Wiederbelebung
Direktzugriffe auf I/O-Ports unter aktuellem Windows
------------------------------------------------------------------------------
c't 24/15, S.182, as@ct.de 

Dateien
DOSBOX-074.zip Sourcen c't Version mit DirectIO-Möglichkeit für vorgegebene Port-Bereic
							 samt Projectmappe und Projekt (32 bittig) in dosbox-0.74\visualc_net
Liesmich       das hier

 
Dosbox-074 wurde um die Klasse DirectIO erweitert, mit eigenen Handlern für Readport() und Writeport() (nur 8bittig) in DirectIO.cpp
Diese Fassung ist ohne ipx-Support und Screenshot-Modul erstellt. Die muss man gegebenenfalls dazuladen (siehe Doku von Dosbox im Wiki zu Visual Studio:
http://www.dosbox.com/wiki/Building_DOSBox_with_Visual_C_2008_Express
 
Zusätzlich muss man die SDL-Bibliothek laden: https://www.libsdl.org/   
Ich habe noch die alte Version 1.2.15 verwendet. Die Pfade zu den SDL Include-Dateien und zur SDL Bibliothek sind 
dann in den Projekteingenschaften unter VC++-Verzeichnisse einzutragen. 


In Dosbox.ini gibt es nun eine Sektion [directio] die folgende Einträge kennt: 
from = StartPortadresse 
offset = Translation der Adresse (default:0); Zieladressen <0x100 und im PCI-Bereich 0xcf0 .. 0xcff werden ignoriert! 
size  = Portbereich, maximal 0x20  

Der direkte Zugriff auf Ports klappt nur, wenn zuvor GiveIO (64 Bit von Henrik Haftmann) aufgerufen wurde. Sonst gibt es eine Exception! 
Zwei DOS-Programme mit Turbo-Pascal-Sourcen sind anbei unter \DOS-Programme:
in xxxx    :liest Port xxxx (in hex) z.B. in e000
out xxxx yy:schreibt yy auf Port xxxx (alles in hex) z.B out e000 90  

Achtung für den Zugriff auf serielle Schnittstellen ist DirectIO nicht nötig, die Zugriffe setzt DOS-box 074 auf die Windows-Modem-Funktionen um.

Die Debugversion gibt alle Zugriffe auf die Ports aus. Viel Spaß 
as@ct.de
        