Takeshi Sone ts1@tsn.or.jp writes:
On Fri, Dec 19, 2003 at 12:49:42AM -0700, Eric W. Biederman wrote:
Adam Sulmicki adam@cfar.umd.edu writes:
you mean just like dosemu runs under linux ???
Right but for BSD and early versions of windows the dependencies were worse. I don't know which services matter though.
Last time I saw the source code of FreeBSD, its _bootloader_ has its own vm86 monitor (in assembly), works in protected mode, and calls all the BIOS calls (video, keyboard, disk,...) in vm86 mode. Also the kernel calls E820, APM, VESA, etc in vm86. Also I saw a recent version of Windows calls BIOS services in vm86.
Maybe we can modify FreeBSD, and have work-around for Windows, but at least I don't think it's the way to go.
My conclusion then was that PCBIOS had to work in real mode.
Maybe we can code it with GCC and .code16gcc hack. If 64KB is not enough, maybe 0xE000 segment can be used so that we have 64KB code and 64KB data segments. And all the "POST" code can be outside the real mode space. So it's not impossible or hard at all.
Ok Then I am up to idea #2. For cooperation, just before I go catch my flight.
Implement a minimal but real PCBIOS.
Have a linux kernel.
Use the PCBIOS to initialize the option roms. Jump to the linux base boot loader.
When I have loaded something I go to real mode with kexec and had off control to the loaded kernel. Which can make BIOS calls. I have traditionally avoided that because the PCBIOS tends to get wedged when I start linux but with the source that should not be a problem.
Eric