Portadress-Umsetzung oder Portzugriffs-Umleitung

Moderne Parallelport-Karten für PCI, PCIexpress und ExpressCard (via PCIe) lassen ihre Basisadresse nicht auf die altbekannten Adressen 0x378 oder 0x278 einstellen. (Die Adresse 0x3BC ist nicht geeignet für EPP und ECP.) Deren Basisadresse ist eher 0x3008 oder ähnlich.

Einige ältere Programme haben keine wahlfrei einstellbare Portadresse, bspw. avrdude, sondern verlassen sich auf eine der drei altbekannten Portbasisadressen.

inpout32.dll (modern)

Die auf dem Computer wirksame Adressumsetzung kann mit folgender Kommandozeile geprüft werden: »rundll32 .\inpout32.dll,Info«
Es erscheint ein interaktives Konsolenfenster mit den Angaben.
Die neue Version (seit März 2013) meines Ablegers der wohlbekannten inpout32.dll hat eine automatische Adressumsetzung eingebaut!

Weiterhin kann diese DLL Programme unter 64-Bit-Windows zum Laufen bringen, die sogar am echten Onboard-Parallelport ihren Dienst versagen. Etwa:

Ein prozessweiter Exception-Handler mit x86-Befehlsdekoder vollzieht den Trick. Die Adressumsetzung auf Nicht-Standard-Portadressen macht inpout32.dll ganz nebenbei auch noch.

Ist keine Adress-Umsetzung unter Windows 64 bit erforderlich, ist die seit Mai 2015 verfügbare 64-Bit-Version von giveio.sys vorzuziehen, weil ohne Geschwindigkeitseinbußen.

Damit laufen Programme, die diese Bibliothek verwenden, automatisch auch mit solchen Karten ohne weiteres Zutun. Das gilt auch für 64-Bit-Versionen von Windows sowie für 64-Bit-Programme (letztere benötigen inpoutx64.dll, ebenfalls in der ZIP-Datei enthalten).

Neben diesem Feature beinhaltet diese meine inpout32.dll noch folgende Features:

Siehe auch: Hardware emulieren

Hardcore-Lösung (altbacken)

Jenes Programm ermöglicht die automatische Umleitung der Portzugriffe, und erledigt dies universell für alle Fälle (DOS-Box, Win16, Win32, VxD, sonstiger Kernel-Mode-Treiber) im Kernel-Mode.

Der Pferdefuß: Es läuft nur unter Windows 3.1 (Enhanced Mode), 3.11, 95, 98, Me, NT 3.51, NT4, 2000. Also nicht unter XP und neuer. Auch nicht mit mehreren Prozessoren. ECP und EPP wird von diesem Programm nicht umgesetzt.

Das Programm, welches eigentlich zu einen anderen Zweck geschrieben wurde, ist wie folgt einzustellen:

Es ist ein 16-bit-Programm, ohne dass das auffällt! Quelltext ist dabei. Siehe auch die beiden Screenshots:

 
Screenshots zur Einstellung des Programms als Portzugriffs-Umleiter

Der Zeitverlust beim Portzugriff durch die Umleitung ist vernachlässigbar! Ganz im Gegensatz zu USB2LPT.