[SeaBIOS] MINIX 3.1.6 works in QEMU-0.12.3 only with KVM disabled
Gleb Natapov
gleb at redhat.com
Tue Mar 16 07:34:33 CET 2010
On Mon, Mar 15, 2010 at 07:37:56PM -0400, Kevin O'Connor wrote:
> On Mon, Mar 15, 2010 at 04:28:02PM +0100, Antoine Leca wrote:
> > http://bochs.sourceforge.net/cgi-bin/lxr/source/bios/rombios.c has:
> [...]
> > 3660 ;; make sure DS and ES limits are 64KB
> > 3661 mov ax, #0x28
> > 3662 mov ds, ax
> > 3663 mov es, ax
> [...]
> > In SeaBIOS, the applicable code is in src/system.c, and looks like
> [...]
> > Note that while the basic scheme is the same, the "cleaning up" of lines
> > 3660-3663 "make sure DS and ES limits are 64KB" is not present.
>
> That does appear to be a SeaBIOS error. I'll commit a fix (see
> below).
>
> [...]
> > >> (qemu) info registers
> > >> EIP=0000f4a7 EFL=00023002 [-------] CPL=3 II=0 A20=1 SMM=0 HLT=0
> > >> ES =0000 00000000 0000ffff 0000f300
> > >> CS =f000 000f0000 0000ffff 0000f300
> > >> SS =9492 00094920 0000ffff 0000f300
> > >> DS =97ce 00097cec 0000ffff 0000f300
> > >
> > > A ds.base of 0x97cec cannot be translated to a real mode segment.
>
> However, it's not clear why it would make a difference. The segment
> limit is shown as 0xffff here - it's the segment base which is not
> aligned. On return to real mode, the segment base should have been
> reloaded..
>
What part of Intel SDM says so?
> -Kevin
>
>
> --- a/src/system.c
> +++ b/src/system.c
> @@ -143,6 +143,11 @@ handle_1587(struct bregs *regs)
> " xorw %%di, %%di\n"
> " rep movsw\n"
>
> + // Restore DS and ES segment limits to 0xffff
> + " movw $(5<<3), %%ax\n" // 5th descriptor in table (SS)
> + " movw %%ax, %%ds\n"
> + " movw %%ax, %%es\n"
> +
> // Disable protected mode
> " movl %%cr0, %%eax\n"
> " andl $~" __stringify(CR0_PE) ", %%eax\n"
>
> _______________________________________________
> SeaBIOS mailing list
> SeaBIOS at seabios.org
> http://www.seabios.org/mailman/listinfo/seabios
--
Gleb.
More information about the SeaBIOS
mailing list