unit x86; interface function ReadPortB (Port : Longint): Byte; function ReadPortW (Port : Longint): Word; function ReadPortL (Port : Longint): Longint; Procedure ReadPort (Port : Longint; Var Value : Byte); Procedure ReadPort (Port : Longint; Var Value : Longint); Procedure ReadPort (Port : Longint; Var Value : Word); Procedure ReadPortB (Port : Longint; Var Buf; Count: longint); Procedure ReadPortL (Port : Longint; Var Buf; Count: longint); Procedure ReadPortW (Port : Longint; Var Buf; Count: longint); Procedure WritePort (Port : Longint; Value : Byte); Procedure WritePort (Port : Longint; Value : Longint); Procedure WritePort (Port : Longint; Value : Word); Procedure WritePortB (Port : Longint; Value : Byte); Procedure WritePortB (Port : Longint; Var Buf; Count: longint); Procedure WritePortL (Port : Longint; Value : Longint); Procedure WritePortW (Port : Longint; Value : Word); Procedure WritePortW (Port : Longint; Var Buf; Count: longint); Procedure WritePortl (Port : Longint; Var Buf; Count: longint); implementation {$ASMMODE ATT} Procedure WritePort (Port : Longint; Value : Byte); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movb value,%al outb %al,%dx end ['EAX','EDX']; end; Procedure WritePort (Port : Longint; Value : Word); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movw value,%ax outw %ax,%dx end ['EAX','EDX']; end; Procedure WritePort (Port : Longint; Value : Longint); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movl value,%eax outl %eax,%dx end ['EAX','EDX']; end; Procedure WritePortB (Port : Longint; Value : Byte); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movb value,%al outb %al,%dx end ['EAX','EDX']; end; Procedure WritePortW (Port : Longint; Value : Word); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movw value,%ax outw %ax,%dx end ['EAX','EDX']; end; Procedure WritePortL (Port : Longint; Value : Longint); { Writes 'Value' to port 'Port' } begin asm movl port,%edx movl value,%eax outl %eax,%dx end ['EAX','EDX']; end; Procedure WritePortl (Port : Longint; Var Buf; Count: longint); { Writes 'Count' longints from 'Buf' to Port } begin asm movl count,%ecx movl buf,%esi movl port,%edx cld rep outsl end ['ECX','ESI','EDX']; end; Procedure WritePortW (Port : Longint; Var Buf; Count: longint); { Writes 'Count' words from 'Buf' to Port } begin asm movl count,%ecx movl buf,%esi movl port,%edx cld rep outsw end ['ECX','ESI','EDX']; end; Procedure WritePortB (Port : Longint; Var Buf; Count: longint); { Writes 'Count' bytes from 'Buf' to Port } begin asm movl count,%ecx movl buf,%esi movl port,%edx cld rep outsb end ['ECX','ESI','EDX']; end; Procedure ReadPort (Port : Longint; Var Value : Byte); { Reads 'Value' from port 'Port' } begin asm movl port,%edx inb %dx,%al movl value,%edx movb %al,(%edx) end ['EAX','EDX']; end; Procedure ReadPort (Port : Longint; Var Value : Word); { Reads 'Value' from port 'Port' } begin asm movl port,%edx inw %dx,%ax movl value,%edx movw %ax,(%edx) end ['EAX','EDX']; end; Procedure ReadPort (Port : Longint; Var Value : Longint); { Reads 'Value' from port 'Port' } begin asm movl port,%edx inl %dx,%eax movl value,%edx movl %eax,(%edx) end ['EAX','EDX']; end; function ReadPortB (Port : Longint): Byte; assembler; { Reads a byte from port 'Port' } asm xorl %eax,%eax movl port,%edx inb %dx,%al end ['EAX','EDX']; function ReadPortW (Port : Longint): Word; assembler; { Reads a word from port 'Port' } asm xorl %eax,%eax movl port,%edx inw %dx,%ax end ['EAX','EDX']; function ReadPortL (Port : Longint): LongInt; assembler; { Reads a LongInt from port 'Port' } asm movl port,%edx inl %dx,%eax end ['EAX','EDX']; Procedure ReadPortL (Port : Longint; Var Buf; Count: longint); { Reads 'Count' longints from port 'Port' to 'Buf'. } begin asm movl count,%ecx movl buf,%edi movl port,%edx cld rep insl end ['ECX','EDI','EDX']; end; Procedure ReadPortW (Port : Longint; Var Buf; Count: longint); { Reads 'Count' words from port 'Port' to 'Buf'. } begin asm movl count,%ecx movl buf,%edi movl port,%edx cld rep insw end ['ECX','EDI','EDX']; end; Procedure ReadPortB (Port : Longint; Var Buf; Count: longint); { Reads 'Count' bytes from port 'Port' to 'Buf'. } begin asm movl count,%ecx movl buf,%edi movl port,%edx cld rep insb end ['ECX','EDI','EDX']; end; end.