File: /~heha/hs/vcall0.zip/VCALL0.TXT

VCALL0.386: Hilfstreiber zur Ausführung von privilegiertem 16-bit-Code
 - Ermöglicht das Laufenlassen von vorhandenen Code-Abschnitten im
   privilegierten Kernel-Modus unter Windows
 - Unterstützt Real-Mode-DOS-Anwendungen (genauer: V86) ebenso wie DPMI
   und 16bit-Windows-Programme
 - Um mindestens 200% schnellere Portzugriffe möglich, auf geschützte 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 Lösung, die unter EMM386 "kriecht",
   wäre zweifelsohne ebenso interessant
 - Extra-Unterstützung von Windows 95: Dynamisches Gerätetreiber-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 lästige Timer-Programmierung kümmert sich das VxD
   (die erreichbare Frequenz hängt stark vom Rechner und [möglicherweise]
   der Anzahl der DOS-Boxen ab. Ein 486/66 schaffte nur 10 kHz absturzfrei.
 - geplant: API für Win32 (Kopfzerbrechen wegen Kontextumschaltung)
 - geplant: VxD-API für LPTDAC2 und andere VxDs
 - geplant: dito für Windows NT

Dateiliste:
VCALL0.386	Der Virtuelle Gerätetreiber für Windows
VCALL0.ASM	Quelldatei für Turbo Assembler 3.2
VCALL0.DEF	Modul-Definitions-Datei für 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 für Borland C (ungetestet, OHNE Windows-95-Zeug)
VCALL0.H	Header-Datei für Borland-C-Programme
VCALL0TC.C	Beispiel in C

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

Garantien:
 - Ich übernehme keine Garantie, weder für Hard- noch Softwareschäden

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 für 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 präsent: 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
 - Nähere Hinweise befinden sich in den deutsch kommentierten Quelltexten

Probleme:
 - Windows stürzt sofort ab, wenn obige Prämisse (FAR-Call) verletzt wird,
   und man landet unverzüglich auf dem DOS-Prompt (Windows 3.1).
 - Der kritische Code ist undebugbar, der Versuch, ein Breakpoint in den
   Code zu setzen, führt ebenfalls zum fatalen Windows-Ausstieg. Ausnahme:
   Man benutzt SoftICE für 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

Geändertes seit letzter Version:
   Hinzugefügte Unterstützung des dynamischen Geräteladens unter Windows95
   Periodischer Aufruf (bis 20 kHz)
Detected encoding: OEM (CP437)1
Wrong umlauts? - Assume file is ANSI (CP1252) encoded