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:
Zugriffssoftware für Leica-Vermessungsgerät „Wild GIF 12“ (näheres hier)
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 meineinpout32.dll noch folgende Features:
Spezielle Unterstützung von USB2LPT, sowohl native API als auch (treiberlose) HID-API
Unterstützung für gewöhnliche USB-Drucker-Konverter (hierbei beschränkt auf 8 Bit Ausgabe und 3 Bit Eingabe,
Anpass-Schaltung erforderlich)
Genial: In diesem Fall werden keinerlei Admin-Privilegien benötigt.
Eingebautes Java-Interface (JNI) mit variablen Packages, kompatibel zu allen Versionen von jnpout*.dll (getestet, OK)
Mikrocode-basierte universelle API für alle LPT-artigen Geräte (für maximalen Datendurchsatz speziell bei USB2LPT)
API-Kompatibilität zu dlportio.dll und io.dll — inpout32.dll kann umbenannt werden um diese zu ersetzen
Kann mit normalen Benutzerrechten laufen wenn Admin das vorher so festlegt
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:
Trapping auf „586-Debugregister“ oder „386-IOPM-Tab.“
(ersteres ist härter, letzteres ist netter, funktioniert aber nicht unter NT-Systemen)
Betriebsart auf „AUS“ (keine interne Protokollierung)
Lautsprecher beliebig
Treiber beim Systemstart laden EIN wenn man nicht dieses Programm vorher aufrufen möchte
Hauptschalter: Emulation auf [LPT1]: Gewünschte Portadresse
Modifikation: Physikalische Adresse: Vorhandene Basisadresse (zu entnehmen vom Geräte-Manager)
Es ist ein 16-bit-Programm, ohne dass das auffällt! Quelltext ist dabei. Siehe auch die beiden Screenshots:
Der Zeitverlust beim Portzugriff durch die Umleitung ist vernachlässigbar!
Ganz im Gegensatz zu USB2LPT.