Subject: Re: Location for x86emu
To: Joerg Sonnenberger <joerg@britannica.bec.de>
From: Terry Moore <tmm@mcci.com>
List: tech-kern
Date: 12/02/2007 04:12:43
At 02:55 PM 12/1/2007 +0100, Joerg Sonnenberger wrote:
>On Sat, Dec 01, 2007 at 02:16:53AM -0500, Terry Moore wrote:
> > I believe that many ROMs call functions in the base BIOS. In that case,
> > wouldn't you also have to provide a BIOS image for them to call into? In
> > the bad old days, certain things were referenced at hard addresses, & I
> > imagine that practice is not totally eliminated.
>
>I don't think any adapter BIOS has hard-coded addresses for BIOS calls,
>but using the interrupt services seems likely. Yes, those areas have to
>be identified as well.
It is an interesting problem.
You can decide not to support them -- this is all ancient history at
this point. However, I knew of adapters that did use hard coded
addresses. (If I recall correctly, you can't even get precise
version information without examining a signature that's close to the
real-mode reset vector at 0xFFFF:0.)
This is why "PC compatible" BIOS companies like Phoenix had a
business, because it was hard to legally get that level of
compatibility without clean-room work -- one team referencing the
published IBM BIOS source, a team of lawyers in the middle, and a
second isolated team re-implementing based only on lawyer-approved
instructions.
Another thing to consider: the BIOS data area and interrupt linkage
also has to be initialized. Again, no problem if you've booted
through the real BIOS. Many adapters stole real-mode memory during
initialization by adjusting the top of real-mode memory -- that was
not done through interrupt calls, but by knowing how the BIOS data
was laid out and adjusting the top-of-memory pointer.
For consistency, and to ensure that you don't get strange
interactions with the real BIOS -- to do all their graphic tricks at
boot time, they resort to some pretty wacky practices --, you might
want to do what other PC emulators do, and supply a BIOS that's used
in the virtual real-mode machine. I imagine that there are
open-source BIOSes that are adequate for this purpose -- what does QEMU use?
--Terry