Hi! Just cleaning up a little ...
According to PredatorZeta:
Type Byteint = __byte__ Integer; Byte = __unsigned__ Byteint; Shortint =__short__ Integer; Word16 = __unsigned__ Shortint;
`ByteInt', `Byte', and `ShortInt' like above are already built-in in recent (alpha) versions of GPC. `Word16' also exists but is named `ShortWord'.
Function Inportw(port : integer) : word16; var temp : word16=0; begin Asm("inw %%dx, %%ax" : "=a" (temp) : "d" (port)); Inportw:=temp; end;
Function Inportb(port : integer) : byte; var temp : byte=0; begin Asm("inw %%dx, %%al" : "=a" (temp) : "d" (port)); Inportb:=temp; end;
This can be abbreviated further (and indented;-):
Function InPortW ( port: Integer ) result: ShortWord;
begin (* InPortW *) asm ( 'inw %%dx, %%ax' : '=a' ( result ) : 'd' ( port ) ); end (* InPortW *);
Function InPortB ( port: Integer ) result: Byte;
begin (* InPortB *) asm ( 'inw %%dx, %%al' : '=a' ( result ) : 'd' ( port ) ); end (* InPortB *);
(NOT TESTED, sorry!)
PredatorZeta, are you sure that it's `inw' in the second case, not `inb'?
BTW, you can even use these as procedures in your program without loss of speed: With full optimization `-O3', GPC will automatically inline the above.
Hope this helps,
Peter
Dr. rer. nat. [970604] Peter Gerwinski, Essen, free physicist and programmer peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201] maintainer GNU Pascal [970510] - http://home.pages.de/~gnu-pascal/ [970125]