On Sun, 2004-03-28 at 23:51, Bernhard Walle wrote:
Hallo,
ich habe folgenden Code in einem Windowsprogramm gefunden, bin mir aber bei der Bedeutung nicht zu 100 % sicher. Ausprobieren bringt in dem Fall auch nichts. Das Programm steuert Hardware über den Parallelport.
Hier das Codefragment:
last1 = inportb(0x40); last2 = inportb(0x40);
while (last1 == inportb(0x40) && last2 == inportb(0x40)) ;
Auf was genau wartet dieses Codefragment?
Glaskugel, Glaskugel ....
Die Funktion inportb() dürfte es in ähnlicher Form (inb() ?) auch unter Linux geben, deshalb die Frage hier. Ich tippe mal darauf, dass inportb(arg) ein Byte von IO-Port Nummer "arg" einliest. Im Linux-Kernel gibt es auf unterster Ebene vergleichbare Funktionen, die ähnlich heissen (vgl. /usr/src/linux*/include/asm-*/io.h).
while (last1 == inportb(0x40) && last2 == inportb(0x40)) ; Sollte meine obige Annahme stimmen, wird hier auf IO-Port 0x40 gepollt, und darauf gewartet, dass sich eine 2 byte-ige Zeichenkette wiederholt.
cat /proc/ioports liefert bei mir ... 0040-005f : timer .. Das könnte darauf hindeuten könnte, dass der Windows-Code versucht, auf unterster Ebene, am OS vorbei, auf einen Timer-Port zugreift. ;) .. Keine Ahnung, was sich an Port 0x40 genau befindet ;) Ralf