Quelltext /~heha/hs/vcall0.zip/VCALL0.TXT

VCALL0.386: Hilfstreiber zur Ausfhrung von privilegiertem 16-bit-Code
 - Ermglicht das Laufenlassen von vorhandenen Code-Abschnitten im
   privilegierten Kernel-Modus unter Windows
 - Untersttzt Real-Mode-DOS-Anwendungen (genauer: V86) ebenso wie DPMI
   und 16bit-Windows-Programme
 - Um mindestens 200% schnellere Portzugriffe mglich, auf geschtzte Ports
   (von Windows-VxD's gesperrte oder emulierte) mehr als 1000% Geschwindig-
   keitszunahme! Auch CLI/STI ist maximal schnell (3 statt viele 1000 Takte)
 - Leider ist Windows erforderlich; eine Lsung, die unter EMM386 "kriecht",
   wre zweifelsohne ebenso interessant
 - Extra-Untersttzung von Windows 95: Dynamisches Gertetreiber-Laden
   und Entladen erspart Modifikation an der SYSTEM.INI und sichert
   sofortige Einsatzbereitschaft seiner Programme an fremden Rechnern
   (ohne zu booten)
 - NEU: Aufruf einer periodischen Routine im Ring0 bis ca. 50 kHz (!),
   um die lstige Timer-Programmierung kmmert sich das VxD
   (die erreichbare Frequenz hngt stark vom Rechner und [mglicherweise]
   der Anzahl der DOS-Boxen ab. Ein 486/66 schaffte nur 10 kHz absturzfrei.
 - geplant: API fr Win32 (Kopfzerbrechen wegen Kontextumschaltung)
 - geplant: VxD-API fr LPTDAC2 und andere VxDs
 - geplant: dito fr Windows NT

Dateiliste:
VCALL0.386	Der Virtuelle Gertetreiber fr Windows
VCALL0.ASM	Quelldatei fr Turbo Assembler 3.2
VCALL0.DEF	Modul-Definitions-Datei fr den Linker LINK386.EXE
		(Weitere Quellen und bersetzungstools auf Anfrage)
VCALL0.TXT	Diese Dokumentation
VCALL0.TPU	Pascal-Unit, Version 7, Zielplattform DOS
VCALL0.PAS      Unit-Quelldatei (z.B. zur Generierung anderer Units)
VCALL0T.PAS	Einfaches Beispiel zur Benutzung von VCALL0.TPU
VCALL0.C	Quelldatei fr Borland C (ungetestet, OHNE Windows-95-Zeug)
VCALL0.H	Header-Datei fr Borland-C-Programme
VCALL0TC.C	Beispiel in C

Erforderlich:
 - 386SX oder hher
 - MS-Windows Enhanced Mode oder Windows95
 - Dein Programm, um dort eine kleine nderung vorzunehmen

Garantien:
 - Ich bernehme keine Garantie, weder fr Hard- noch Softwareschden

Installation (Nur Windows 3.1):
 - Das VxD VCALL0.386 ins Windows-Verzeichnis kopieren (oder sonstwohin)
 - in die [386enh]-Sektion der SYSTEM.INI folgende Zeile eintragen:
   device=VCALL0.386			;Pfad mit angeben, falls "sonstwo"
 - Windows neustarten, um nderung wirksam werden zu lassen

Gebrauch:
 - Die Pascal-Unit, die fr alle 3 Borland-Pascal-Plattformen bersetzbar
   ist, wird in das Zielprogramm eingebunden
 - Die zeitkritische Routine, die keine verschachtelte Prozedur sein darf
   und FAR kodiert sein mu, wird nicht direkt, sondern mittels der Funktion
   Call0() aufgerufen. Diese Hilfsfunktion bekommt den Prozedurzeiger
   bergeben. Ist VCALL0 gerade nicht prsent: Macht nichts. Call0() ruft
   in diesem Falle die Zielprozedur direkt, also im nicht privilegierten
   Modus
 - Wichtig: FAR-Calls sind in dieser Prozedur nicht erlaubt. Range- und
   Stack-Checking ist auszuschalten, da diese Optionen FAR-Calls einstreuen
 - Nhere Hinweise befinden sich in den deutsch kommentierten Quelltexten

Probleme:
 - Windows strzt sofort ab, wenn obige Prmisse (FAR-Call) verletzt wird,
   und man landet unverzglich auf dem DOS-Prompt (Windows 3.1).
 - Der kritische Code ist undebugbar, der Versuch, ein Breakpoint in den
   Code zu setzen, fhrt ebenfalls zum fatalen Windows-Ausstieg. Ausnahme:
   Man benutzt SoftICE fr Windows zum Debuggen (vielleicht auch WDEB, aber
   wer das benutzt, ist selbst schuld:-)

Autor
 haftmann#software
 Henrik Haftmann, Reichenhainer Str. 51  Zimmer 105
 email: henrik.haftmann@e-technik.tu-chemnitz.de

Neueste Version unter
 http://www.tu-chemnitz.de/~heha/hs_freeware/vcall0.zip

Gendertes seit letzter Version:
   Hinzugefgte Untersttzung des dynamischen Gerteladens unter Windows95
   Periodischer Aufruf (bis 20 kHz)
Vorgefundene Kodierung: UTF-80