+ added portl class for 32-bit port access in the i8086-msdos ports unit, if

the target cpu is 386 or later

git-svn-id: trunk@32929 -
This commit is contained in:
nickysn 2016-01-12 18:06:21 +00:00
parent e628729e1d
commit 79c5b632f1

View File

@ -20,6 +20,15 @@ unit ports;
ObjFpc mode is required PM }
{$Mode ObjFpc}
{$if defined(CPU80386)
or defined(CPUPENTIUM)
or defined(CPUPENTIUM2)
or defined(CPUPENTIUM3)
or defined(CPUPENTIUM4)
or defined(CPUPENTIUMM)}
{$define CPU_IS_386_OR_LATER}
{$endif}
interface
type
@ -35,18 +44,22 @@ type
property pp[w : word] : word read readport write writeport;default;
end;
{ tportl = class
{$ifdef CPU_IS_386_OR_LATER}
tportl = class
procedure writeport(p : word;data : longint);
function readport(p : word) : longint;
property pp[w : word] : longint read readport write writeport;default;
end;}
end;
{$endif CPU_IS_386_OR_LATER}
var
{ we don't need to initialize port, because neither member
variables nor virtual methods are accessed }
port,
portb : tport;
portw : tportw;
// portl : tportl;
{$ifdef CPU_IS_386_OR_LATER}
portl : tportl;
{$endif CPU_IS_386_OR_LATER}
implementation
@ -82,18 +95,22 @@ asm
end;
{procedure tportl.writeport(p : word;data : longint);assembler;
{$ifdef CPU_IS_386_OR_LATER}
procedure tportl.writeport(p : word;data : longint);assembler;
asm
movw p,%dx
movl data,%eax
outl %eax,%dx
mov dx, p
mov eax, data
out dx, eax
end;
function tportl.readport(p : word) : longint;assembler;
asm
movw p,%dx
inl %dx,%eax
end;}
mov dx, p
in eax, dx
mov edx, eax
shr edx, 16
end;
{$endif CPU_IS_386_OR_LATER}
end.