mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-06 10:18:25 +02:00
* more unix reform
This commit is contained in:
parent
7efaf7dee2
commit
7ad40b4fbd
10
rtl/unix/syscall.pp
Normal file
10
rtl/unix/syscall.pp
Normal file
@ -0,0 +1,10 @@
|
||||
unit syscall;
|
||||
|
||||
interface
|
||||
|
||||
{$i sysnr.inc}
|
||||
{$i syscallh.inc}
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
289
rtl/unix/x86.pp
Normal file
289
rtl/unix/x86.pp
Normal file
@ -0,0 +1,289 @@
|
||||
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
|
||||
|
||||
|
||||
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.
|
Loading…
Reference in New Issue
Block a user