I am currently doing an experiment for S6.828 and I am facing a problem.
+------------------+ <- 0xFFFFFFFF (4GB)
| 32-bit |
| memory mapped |
| devices |
| |
//////////
//////////
| |
| Unused |
| |
+------------------+ <- depends on amount of RAM
| |
| |
| Extended Memory |
| |
| |
+------------------+ <- 0x00100000 (1MB)
| BIOS ROM |
+------------------+ <- 0x000F0000 (960KB)
| 16-bit devices, |
| expansion ROMs |
+------------------+ <- 0x000C0000 (768KB)
| VGA Display |
+------------------+ <- 0x000A0000 (640KB)
| |
| Low Memory |
| |
+------------------+ <- 0x00000000
In the table above, the space allocated for the BIOS is from 0xF0000
to 0xFFFFF
. The first line of the boot system is at 0xFFFF0
, located at the end of the system, and the instruction is ljmp $0xf000,$0xe05b
. The purpose of this instruction is to jump to the first instruction of the BIOS. This confuses me. I know that the size of the BIOS can vary between different manufacturers, so the address of the ljmp instruction can also vary. But why don’t we set the first instruction of the BIOS at 0xF0000
? Wouldn’t that be more intuitive, and we wouldn’t need to jump to a separate address after the ljmp instruction
I would like to know why we don’t use the address 0xF0000
as the starting address for all BIOS.
4