diff --git a/src/driver/PCI.pas b/src/driver/PCI.pas index 18140937..8ac8bc77 100644 --- a/src/driver/PCI.pas +++ b/src/driver/PCI.pas @@ -273,24 +273,35 @@ begin isDevice := 1; end; -function read8(bus : uint8; slot : uint8; func : uint8; offset : uint8; part : uint8) : uint8; -begin - loadConfig(bus, slot, func, offset); - read8 := (inl($CFC) shr (part)) and $FF; -end; - -function read16(bus : uint8; slot : uint8; func : uint8; offset : uint8; part : uint8) : uint16; -begin - loadConfig(bus, slot, func, offset); - read16 := (inl($CFC) shr (part * 2)) and $FFFF; -end; - function read32(bus : uint8; slot : uint8; func : uint8; offset : uint8) : uint32; begin loadConfig(bus, slot, func, offset); read32 := inl($CFC); end; +function read16(bus : uint8; slot : uint8; func : uint8; offset : uint8; part : uint8) : uint16; +var + input : uint32; + +begin + input:= read32(bus, slot, func, offset); + read16:= (input SHL (part * 16)) and $0000FFFF; + //loadConfig(bus, slot, func, offset); + //read16 := (inw($CFC) shr (part * 16)) and $FFFF; +end; + +function read8(bus : uint8; slot : uint8; func : uint8; offset : uint8; part : uint8) : uint8; +var + input : uint32; + +begin + //loadConfig(bus, slot, func, offset); + //read8 := (inb($CFC) shr (part * 8)) and $FF; + input:= read32(bus, slot, func, offset); + read8:= (input SHL (part * 8)) and $000000FF; +end; + + function read_device_config(bus : uint8; slot : uint8; func : uint8; offset : uint8) : TPCI_Device; var tmp : TPCI_Device;