123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- 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.
|