mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 06:49:23 +02:00
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
This commit is contained in:
parent
41648a95f7
commit
35789061ba
@ -117,7 +117,7 @@ const
|
|||||||
syscall_nr_getdomainname =162;
|
syscall_nr_getdomainname =162;
|
||||||
syscall_nr_setdomainname =163;
|
syscall_nr_setdomainname =163;
|
||||||
syscall_nr_uname =164;
|
syscall_nr_uname =164;
|
||||||
syscall_nr_sysarch =165;
|
|
||||||
syscall_nr_rtprio =166;
|
syscall_nr_rtprio =166;
|
||||||
syscall_nr_semsys =169;
|
syscall_nr_semsys =169;
|
||||||
syscall_nr_msgsys =170;
|
syscall_nr_msgsys =170;
|
||||||
@ -242,7 +242,7 @@ syscall_nr_getdirentries =196;
|
|||||||
}
|
}
|
||||||
|
|
||||||
{More or less checked BSD syscalls}
|
{More or less checked BSD syscalls}
|
||||||
|
syscall_nr_sysarch = 165;
|
||||||
syscall_nr_accept = 30;
|
syscall_nr_accept = 30;
|
||||||
syscall_nr_access = 33;
|
syscall_nr_access = 33;
|
||||||
syscall_nr_bind = 104;
|
syscall_nr_bind = 104;
|
||||||
@ -316,7 +316,10 @@ syscall_nr_getdirentries =196;
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.3 2000-10-26 23:00:12 peter
|
Revision 1.4 2001-01-22 07:25:10 marco
|
||||||
|
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||||
|
|
||||||
|
Revision 1.3 2000/10/26 23:00:12 peter
|
||||||
* fixes merges
|
* fixes merges
|
||||||
|
|
||||||
Revision 1.2 2000/09/18 13:42:35 marco
|
Revision 1.2 2000/09/18 13:42:35 marco
|
||||||
|
@ -681,9 +681,83 @@ asm
|
|||||||
popl %esi
|
popl %esi
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
* Architecture specific syscalls (i386) using the SYSARCH pseudo call
|
||||||
|
}
|
||||||
|
|
||||||
|
{$packrecords C}
|
||||||
|
|
||||||
|
TYPE uint=CARDINAL;
|
||||||
|
|
||||||
|
CONST
|
||||||
|
I386_GET_LDT =0;
|
||||||
|
I386_SET_LDT =1;
|
||||||
|
{ I386_IOPL }
|
||||||
|
I386_GET_IOPERM =3;
|
||||||
|
I386_SET_IOPERM =4;
|
||||||
|
{ xxxxx }
|
||||||
|
I386_VM86 =6;
|
||||||
|
|
||||||
|
{
|
||||||
|
type i386_ldt_args = record
|
||||||
|
int start : longint;
|
||||||
|
union descriptor *descs;
|
||||||
|
int num;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
type
|
||||||
|
i386_ioperm_args = record
|
||||||
|
start : uint;
|
||||||
|
length : uint;
|
||||||
|
enable : longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
i386_vm86_args = record
|
||||||
|
sub_op : longint; { sub-operation to perform }
|
||||||
|
sub_args : pchar; { args }
|
||||||
|
end;
|
||||||
|
|
||||||
|
sysarch_args = record
|
||||||
|
op : longint;
|
||||||
|
parms : pchar;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{
|
||||||
|
int i386_get_ldt __P((int, union descriptor *, int));
|
||||||
|
int i386_set_ldt __P((int, union descriptor *, int));
|
||||||
|
int i386_get_ioperm __P((unsigned int, unsigned int *, int *));
|
||||||
|
int i386_set_ioperm __P((unsigned int, unsigned int, int));
|
||||||
|
int i386_vm86 __P((int, void *));
|
||||||
|
int i386_set_watch __P((int watchnum, unsigned int watchaddr, int size,
|
||||||
|
int access, struct dbreg * d));
|
||||||
|
int i386_clr_watch __P((int watchnum, struct dbreg * d));
|
||||||
|
}
|
||||||
|
|
||||||
|
Function IOPerm(From,Num:CARDINAL;Value:Longint):boolean;
|
||||||
|
|
||||||
|
var sg : i386_ioperm_args;
|
||||||
|
sa : sysarch_args;
|
||||||
|
|
||||||
|
begin
|
||||||
|
sg.start:=From;
|
||||||
|
sg.length:=Num;
|
||||||
|
sg.enable:=value;
|
||||||
|
sa.op:=i386_SET_IOPERM;
|
||||||
|
sa.parms:=@sg;
|
||||||
|
IOPerm:=do_syscall(syscall_nr_sysarch,longint(@sa))=0;
|
||||||
|
LinuxError:=ErrNo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.3 2000-10-26 22:51:12 peter
|
Revision 1.4 2001-01-22 07:25:10 marco
|
||||||
|
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||||
|
|
||||||
|
Revision 1.3 2000/10/26 22:51:12 peter
|
||||||
* nano sleep (merged)
|
* nano sleep (merged)
|
||||||
|
|
||||||
Revision 1.2 2000/09/18 13:14:50 marco
|
Revision 1.2 2000/09/18 13:14:50 marco
|
||||||
|
@ -924,276 +924,13 @@ begin
|
|||||||
LinuxError:=Errno;
|
LinuxError:=Errno;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$IFDEF I386}
|
|
||||||
|
|
||||||
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;
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2000-12-28 20:50:04 peter
|
Revision 1.6 2001-01-22 07:25:10 marco
|
||||||
|
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||||
|
|
||||||
|
Revision 1.5 2000/12/28 20:50:04 peter
|
||||||
* merged fixes from 1.0.x
|
* merged fixes from 1.0.x
|
||||||
|
|
||||||
Revision 1.4 2000/10/26 22:51:12 peter
|
Revision 1.4 2000/10/26 22:51:12 peter
|
||||||
|
276
rtl/unix/unix.pp
276
rtl/unix/unix.pp
@ -413,9 +413,8 @@ function MUnMap (P : Pointer; Size : Longint) : Boolean;
|
|||||||
Port IO functions
|
Port IO functions
|
||||||
***************************}
|
***************************}
|
||||||
|
|
||||||
{$ifndef BSD}
|
|
||||||
Function IOperm (From,Num : Cardinal; Value : Longint) : boolean;
|
Function IOperm (From,Num : Cardinal; Value : Longint) : boolean;
|
||||||
{$IFDEF I386}
|
{$ifdef i386}
|
||||||
Procedure WritePort (Port : Longint; Value : Byte);
|
Procedure WritePort (Port : Longint; Value : Byte);
|
||||||
Procedure WritePort (Port : Longint; Value : Word);
|
Procedure WritePort (Port : Longint; Value : Word);
|
||||||
Procedure WritePort (Port : Longint; Value : Longint);
|
Procedure WritePort (Port : Longint; Value : Longint);
|
||||||
@ -435,7 +434,6 @@ Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
|||||||
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
||||||
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
||||||
{$endif}
|
{$endif}
|
||||||
{$endif}
|
|
||||||
|
|
||||||
{**************************
|
{**************************
|
||||||
Utility functions
|
Utility functions
|
||||||
@ -2617,6 +2615,273 @@ end;
|
|||||||
Memory functions
|
Memory functions
|
||||||
--------------------------------}
|
--------------------------------}
|
||||||
|
|
||||||
|
{$IFDEF I386}
|
||||||
|
|
||||||
|
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;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Initialization
|
Initialization
|
||||||
@ -2629,7 +2894,10 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.1 2001-01-21 20:21:41 marco
|
Revision 1.2 2001-01-22 07:25:10 marco
|
||||||
|
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||||
|
|
||||||
|
Revision 1.1 2001/01/21 20:21:41 marco
|
||||||
* Rename fest II. Rtl OK
|
* Rename fest II. Rtl OK
|
||||||
|
|
||||||
Revision 1.6 2000/12/28 20:42:12 peter
|
Revision 1.6 2000/12/28 20:42:12 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user