mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 13:19:12 +02:00
+ initial OS/2 release
This commit is contained in:
parent
43c87be76d
commit
b7b725de76
142
rtl/os2/ports.pas
Normal file
142
rtl/os2/ports.pas
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
{
|
||||||
|
$Id$
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
Copyright (c) 1999 by the Free Pascal development team.
|
||||||
|
|
||||||
|
These files adds support for TP styled port accesses (port[],
|
||||||
|
portw[] and portl[] constructs) using Delphi classes.
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
|
||||||
|
unit Ports;
|
||||||
|
|
||||||
|
{ This unit uses classes so ObjFpc mode is required. }
|
||||||
|
{$Mode ObjFpc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
type
|
||||||
|
TPort = class
|
||||||
|
protected
|
||||||
|
procedure WritePort (P: word; Data: byte);
|
||||||
|
function ReadPort (P: word): byte;
|
||||||
|
public
|
||||||
|
property PP [W: word]: byte read readport write writeport; default;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TPortW = class
|
||||||
|
protected
|
||||||
|
procedure WritePort (P: word; Data: word);
|
||||||
|
function ReadPort (P: word): word;
|
||||||
|
public
|
||||||
|
property PP [W: word]: word read readport write writeport; default;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TPortL = class
|
||||||
|
protected
|
||||||
|
procedure WritePort (P: word; Data: longint);
|
||||||
|
function ReadPort (P: word): longint;
|
||||||
|
public
|
||||||
|
property PP [W: word]: longint read readport write writeport; default;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Non-instantiated vars. As yet, they don't have to be instantiated,
|
||||||
|
because neither member variables nor virtual methods are accessed }
|
||||||
|
|
||||||
|
var
|
||||||
|
Port, PortB: TPort;
|
||||||
|
PortW: TPortW;
|
||||||
|
PortL: TPortL;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{Import syscall to call it nicely from assembler procedures.}
|
||||||
|
|
||||||
|
procedure syscall; external name '___SYSCALL';
|
||||||
|
|
||||||
|
{$AsmMode ATT}
|
||||||
|
|
||||||
|
procedure TPort.WritePort (P: word; Data: byte); assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
movb Data, %al
|
||||||
|
outb %al, %dx
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPort.ReadPort (P: word): byte; assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
inb %dx, %al
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPortW.WritePort (P: word; Data : word); assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
movw Data, %ax
|
||||||
|
outw %ax, %dx
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPortW.ReadPort (P: word): word; assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
inw %dx, %ax
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPortL.WritePort (P: word; Data: longint); assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
movl Data, %eax
|
||||||
|
outl %eax, %dx
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPortL.ReadPort (P: word): longint; assembler;
|
||||||
|
asm
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
movw P, %cx
|
||||||
|
movl %ecx, %edx
|
||||||
|
movb $12, %al
|
||||||
|
call syscall
|
||||||
|
movw P, %dx
|
||||||
|
inl %dx, %eax
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
{
|
||||||
|
$Log$
|
||||||
|
Revision 1.1 2000-01-02 16:05:36 hajny
|
||||||
|
+ initial OS/2 release
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user