On the SeaBIOS mailing list, Kevin O’Connor recently provided a patch to SeaBIOS to enable it to run in PAE mode. SeaBIOS is the main open source implementation of 16-bit x86 BIOS, used in coreboot, tianocore, and elsewhere. Excerpting Kevin’s posting:
I was curious to see if SeaBIOS could run its 32bit code with PAE paging enabled. So, I put together some test code, and so far it seems to work.
The reason why PAE is interesting (instead of standard i386 paging) is that it allows for 64bit mappings and because one can set it up with just a single level page directory of 2MB pages. The single level page directory makes maintaining it much easier.
The SeaBIOS’ malloc code could also be updated to remap pages which would make it possible for it to relocate itself above 4GB and to store data above 4GB. That’s likely not all that useful, but I think it would be a little amusing for a 16bit bios to fully support 64bit memory.
I haven’t done any performance tests. It’s unclear what the performance impact of enabling paging on every 32bit entry point would be.
It appears that more work will be done before this patch is contributed to trunk. But it is interesting to see PAE-enabled BIOS!