4

How do BIOS extensions (option ROMs) work? I understand that an installed device may have it's own BIOS that adds features to the system but I'm not sure of how they are set up.

I keep reading the following address range 0x0C0000 to 0x0F0000 is used but I don't understand what this is used for. It's as if the ROMs are stored at these address but I don't see how that works. What if you installed 2 devices that both expected to be at 0x0C0000?

Then the BIOS jumps to the option ROM and starts running from there, my next question is that when the ROM writes into the Interrupt Vector Table and hooks an interrupt to point to itself, what address does this point to?

For example on a VGA card what address would it hook INT 10h to?

Or is it that the entire option ROM gets mapped into an area between 0x0C0000 to 0x0F0000 and the IVT would point to somewhere in this range?

I know this is regarding older technologies that aren't used any more (e.g. using interrupts) but I'm interested as to how they worked.

If anyone can help answer the above questions or just give a brief overview it would be greatly appreciated,

Thanks

RJSmith92
  • 880

1 Answers1

5

In the IBM PC days, with the ISA bus, each device simply had to use a different address. Often times they had hardware jumpers or dip switches you could configure to change the address to avoid conflicts. With the advent of the PCI bus, hardware addresses are configured automatically by the system bios to assign each device a unique address.

If the oprom hooks an interrupt, it points to an address within the assigned address that the oprom lives at. In the case of VGA bios, that normally was within the 0xC0000 block. Using the msdos debugger, you could inspect the interrupt vector table to see the entry point, and start disassembling the instructions there to see what they did.

psusi
  • 8,122