This commit is contained in:
Thaddeus-Maximus
2026-04-03 15:58:58 -05:00
commit f3953d66ae
1516 changed files with 586639 additions and 0 deletions

138
5i24/utils/dos/source/PCI.PAS Executable file
View File

@@ -0,0 +1,138 @@
const
{PCI function identifier in AH }
PCI_Function_ID : byte = $B1;
{ PCI function number in AL }
PCI_BIOS_Present : byte = $01;
PCI_Find_PCI_Device : byte = $02;
PCI_Find_PCI_ClassCode : byte = $03;
PCI_Generate_Special_Cycle : byte = $06;
PCI_Read_Config_Byte : byte = $08;
PCI_Read_Config_Word : byte = $09;
PCI_Read_Config_DWord : byte = $0A;
PCI_Write_Config_Byte : byte = $0B;
PCI_Write_Config_Word : byte = $0C;
PCI_Write_Config_DWord : byte = $0D;
PCI_Get_IRQ_Routing_Options : byte = $0E;
PCI_Set_PCI_IRQ : byte = $0F;
{ function results in AH }
PCI_Result_Successful : byte = $00;
PCI_Function_Not_Supported : byte = $81;
PCI_Bad_Vendor_ID : byte = $83;
PCI_Device_Not_Found : byte = $86;
PCI_Bad_Register_Number : byte = $87;
PCI_Set_Failed : byte = $88;
PCI_Buffer_Too_Small : byte = $89;
PCIStr : word = $4350; {'CP'}
{PCI Command register bits }
PCICommandRegOffset = 4;
PCICommandRegIOEnable : word = $0001;
PCICommandRegMEMEnable : word = $0002;
PCICommandRegMasterEnable : word = $0004;
function PCIBIOSPresent : boolean;
var flag : boolean;
begin
asm
mov ah,PCI_Function_ID
mov al,PCI_BIOS_Present
int $1A
mov flag,false;
or ah,ah
jnz @exit
cmp dx,PCIStr;
jnz @exit
mov flag,true
@exit:
end;
PCIBIOSPresent := flag;
end;
function FindPCIDevice(deviceid,vendorid,index : word;var busnum,devnum: byte) : boolean;
var
flag : boolean;
lbusnum,ldevnum : byte;
begin
asm
mov ah,PCI_Function_ID
mov al,PCI_Find_PCI_Device
mov cx,deviceid
mov dx,vendorid
mov si,index
int $1A
mov flag,false;
or ah,ah
jnz @exit
mov lbusnum,bh
mov ldevnum,bl
mov flag,true
@exit:
end;
busnum := lbusnum;
devnum := ldevnum;
FindPCIDevice := flag;
end;
function ReadPCIConfigWord(busnum,devnum: byte;regnum:word; var configdata :word) : boolean;
var
flag : boolean;
lbusnum,ldevnum : byte;
lregnum,lconfigdata : word;
begin
lbusnum := busnum;
ldevnum := devnum;
lregnum := regnum;
asm
mov ah,PCI_Function_ID
mov al,PCI_Read_Config_Word
mov bh,lbusnum
mov bl,ldevnum
mov di,lregnum
int $1A
mov flag,false;
or ah,ah
jnz @exit
mov lconfigdata,cx
mov flag,true
@exit:
end;
configdata := lconfigdata;
ReadPCIConfigWord := flag;
end;
function WritePCIConfigWord(busnum,devnum: byte;regnum:word;configdata :word) : boolean;
var
flag : boolean;
lbusnum,ldevnum : byte;
lregnum,lconfigdata : word;
begin
lbusnum := busnum;
ldevnum := devnum;
lregnum := regnum;
lconfigdata := configdata;
asm
mov ah,PCI_Function_ID
mov al,PCI_Write_Config_Word
mov bh,lbusnum
mov bl,ldevnum
mov di,lregnum
mov cx,lconfigdata
int $1A
mov flag,false;
or ah,ah
jnz @exit
mov flag,true
@exit:
end;
WritePCIConfigWord := flag;
end;