📄 port.pas
字号:
unit port;
interface
function PortReadByte(Addr:Word):Byte;
function PortReadWord(Addr:Word):Word;
function PortReadWordLS(Addr:Word):Word;
procedure PortWriteByte(Addr:Word;Value:Byte);
procedure PortWriteWord(Addr:Word;Value:Word);
procedure PortWriteWordLS(Addr:Word;Value:Word);
implementation
//PortReadbyte函数
//参数:portaddress
//返回:给定port的byte值
function PortReadByte(Addr:Word):Byte;assembler;register;
asm
MOV DX,AX
IN AL,DX
end;
//高速读端口函数:PortReadWord函数
//参数:port address
//返回:给定port的word值
//注释:可能有些卡和计算机不能访问全部的word
function PortReadWord(Addr:Word):Word;assembler;register;
asm
MOV DX,AX
IN AX,DX
end;
//低速读端口函数
//参数: port address
//返回:给定port的word值
//注释:工作时,要调整DELAY
function PortReadWordLS (Addr:Word):Word; assembler; register;
const
Delay = 150;
//依靠CPU的速度和卡的速度
asm
MOV DX,AX
IN AL,DX //读LSB端口
MOV ECX,Delay
@1:
LOOP @1//在两次读之间延时
XCHG AH,AL
INC DX //port+l
IN AL,DX//读MSB端口
XCHG AH,AL// 重新存储字节顺序
end;
//PortWriteByte函数
procedure PortWriteByte(Addr:Word; Value:Byte); assembler; register;
asm
XCHG AX,DX
OUT DX,AL
end;
//高速写端口过程
//注释:工作时,可能有些卡和计算机不能访问全部的Word
procedure PortWriteWord(Addr:word; Value:word); assembler; register;
asm
XCHG AX,DX
OUT DX,AX
end;
//低速写端口过程
procedure PortWriteWordLS(Addr:word;Value:word); assembler; register;
const
Delay = 150;//依靠CPU的速度和卡的速度
asm
XCHG AX,DX
OUT DX,AL
MOV ECX,Delay
@1:
LOOP @1
XCHG AH,AL
INC DX
OUT DX,AL
end;
end.//单元结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -