Hi,
attached is my work on ADLO.
Changes: 1, use macros for frequently used functions (LOAD_SEG, CMOS_OUT, PCI_OUT) 2, store loader size at end (no 1kb limit) 3, change the copy routine to support 128kb images 4, createpayload utility, which concatenates the ELF header, the loader and BIOS
Together with bochsbios.diff, this made it possible to use the latest 128kb big bios images from Bochs.
After talking with Stefan, it turned out that the enable/disable shadowing inside ADLO are really machine specific, thus this method is not really welcomed.
The new segment support in LAR made the following changes possible:
1, store ADLO in segment0 ("current ADLO" without the copy routine) 2, store the bios in segment1
Thus LinuxBIOS will copy the BIOS to the desired location and the 300byte ADLO will just set up the following:
1, clean up the interrupt vectors 2, set some CMOS variables 3, switch back to 16bit real mode 4, jump to the bios
This works fine now. Inside QEMU. A nice shadow disable/enable should be implemented inside LinuxBIOS, and the lar segment loader should disable it when infering with a region which is shadowed.
The linuxbios.diff is needed to turn on LAR segment support.
What is needed to be done: 1, shadowing in linuxbios 2, reading linuxbios tables for memory size in adlo 3, implementing a better logic in bochsbios regarding the boot devices (currently it can only try one device, hardcoded in cmos)
Regarding 2, is there a simpler way than reading all the MEM entries in the linuxbios tables?
-- Alex Beregszaszi