zirblazer / htmlfiles

4 stars 1 forks source link

ROM duplication on IBM PC/AT #1

Open VorfeedCanal opened 3 years ago

VorfeedCanal commented 3 years ago

I don't really know what purpose this mirroring would serve other than a possible attempt to remove the Motherboard ROMs from the UMA in a future platform.

It's actually pretty simple. If you open the 80286 datasheet you may find the following phrase there: After RESET becomes inactive and an internal processing interval elapses, the 80286 begins execution in real address mode with the instruction at physical location FFFFF0(H) (page 13 in my copy).

80286 and 80386 (and, most likely, all subsequent CPUs) actually start not in real mode, but in UNreal mode (since real mode address can not point to location FFFFF0).

But IBM PC software directly accesses certain well-known location in BIOS ROM. The simplest way to solve that dilemma is to put ROM in memory mapping in two places. Like IBM PC/AT did.

zirblazer commented 3 years ago

Thanks for the info.

I never thought about the possibility of the 80286 starting execution at near the end of the 16 MiB Physical Address Space due to it being -supposedly- initialized in Real Mode, so I thought that the Firmware was still located at the same place. So the correct way of seeing this is than the PC/AT reserved 128 KiB at the end of the 16 MiB to meet 80286 hardwired bootstrapping needs first, then it gets mirrored to the standard UMA for backwards compatibility purposes.

However, this opens up a lot of questions. There are some things that may deserve some further research like what happened to this area when it evolved into the ISA Memory Hole (The 1 MiB at the 15 - 16 MiB range. The PS/2 platform also had something similar there, if I recall correctly), since I recall reading that XGA Video Cards could map its full 1 MiB framebuffer into it. This would obviously conflict with the mandatory ROM at that range. Given than that happened in the Chipset era, then I suppose than the ROM was available at that location for Processor bootstrapping purposes, then it gets unmapped/remapped to the UMA to leave it empty for MMIO for expansion cards. I will have to eventually research this, if I ever get to update it.