From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O3km5-0006ic-5g for qemu-devel@nongnu.org; Mon, 19 Apr 2010 02:48:05 -0400 Received: from [140.186.70.92] (port=34896 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O3kly-0006fQ-34 for qemu-devel@nongnu.org; Mon, 19 Apr 2010 02:48:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O3klw-0007ff-0d for qemu-devel@nongnu.org; Mon, 19 Apr 2010 02:47:57 -0400 Received: from chello084112167138.7.11.vie.surfer.at ([84.112.167.138]:39495 helo=wiesinger.com) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O3klu-0007Tw-Nz for qemu-devel@nongnu.org; Mon, 19 Apr 2010 02:47:55 -0400 Message-ID: <4BCBF60B.50809@wiesinger.com> Date: Mon, 19 Apr 2010 08:19:55 +0200 From: Gerhard Wiesinger MIME-Version: 1.0 Subject: Re: [SeaBIOS] [Qemu-devel] QEMU regression problems References: <20100414011646.GA28219@morn.localdomain> In-Reply-To: <20100414011646.GA28219@morn.localdomain> Content-Type: multipart/mixed; boundary="------------010706020508020702060808" List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin O'Connor Cc: seabios@seabios.org, qemu-devel@nongnu.org, Roy Tam This is a multi-part message in MIME format. --------------010706020508020702060808 Content-Type: multipart/alternative; boundary="------------070100050908030109030003" --------------070100050908030109030003 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Kevin O'Connor wrote: > On Tue, Apr 13, 2010 at 02:26:10PM +0800, Roy Tam wrote: > >> 2010/4/12 Gerhard Wiesinger : >> >>> 3.) There is also a problem with the reported base memory under QEMM386 >>> (HIMEM.SYS and EMM386.EXE is correct here). It is 646kB instead of 640kB. >>> Therefore base memory test fails. I guess that reporting memory CMOS >>> tables/interrupt functions are not implemented correctly. >>> >> - The Base Memory > 640K error seems to be SeaBIOS related. QEMU Bochs >> BIOS(tested with both -old-bios hack in 0.12 series and old 0.11.1) >> will just freeze after QEMU counted RAM.(Tested with ScriptPC and >> Bochs). >> > > The SeaBIOS log would really help. This can be done by adding: > > -chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios > > to the qemu command line. > > The memory can be obtained in several places (int 12, int 1588, int > 15e801, int 15e820, and mem 40:13). All look fine to me from looking > at the code. OK, I made some research on the topic. Problem is that QEMM pushes the Extended BIOS data area to High RAM on some machines (QEMU, P733). Therefore 640k low memory is available and checkit reports 640kB + 6kB=646kB EBIOS DATA AREA. Whats strange that on a physical Pentium 733 machine this works correctly (details see below and attached files), maybe someone can try to find the problem with QEMM+Checkit 3.0 (maybe there is still some other BIOS function incorrectly implemented). QEMM parameter NOXBDA avoids moving the XBDA up to HI RAM and therefore checkit reports 640kB well. SeaBIOS seems to be correct (see below and attached patch files and description below). Total Memory: 256MB (262144kB), Base RAM: 637kB Extended BIOS Data Area size: 3 kB, segment=9f40 SCSI option ROM: After option ROMS, Total Memory: 256MB (262144kB), Base RAM: 634kB Extended BIOS Data Area size: 6 kB, segment=9e80 *MS-DOS 6.22, QEMM 8.03* *QEMU* *Testcase* *BDA* *40h:13h* *INT* *12h* *INT 15h,* *AX=E820h* *EBIOS* *DATAAREA* *Checkit* *3.0* Plain DOS, after Boot 634kB 634kB 634kB 9E80h-A000h (6k) 640kB HIMEM.SYS+EMM386.EXE 634kB 634kB 634kB 9E80h-A000h (6k) 640kB QEMM 640kB 640kB 634kB CEB5h-D035h (6k) 646kB QEMURAMD + QEMM 628kB 628kB 634kB 9E80h-A000h (6k) 634k *VMWare* *Testcase* *BDA* *40h:13h* *INT* *12h* *INT 15h,* *AX=E820h* *EBIOS* *DATAAREA* *Checkit 3.0* Plain DOS, after Boot 638kB 638kB 638kB 9F80h-A000h (2k) 640kB HIMEM.SYS+EMM386.EXE 638kB 638kB 638kB 9F80h-A000h (2k) 640kB QEMM 638kB 638kB 638kB 9F80h-A000h (2k) 640kB QEMURAMD + QEMM 632kB 632kB 632kB 9F80h-A000h (2k) 634kB *Pentium 733* *Testcase* *BDA* *40h:13h* *INT* *12h* *INT 15h,* *AX=E820h* *EBIOS* *DATAAREA* *Checkit 3.0* Plain DOS, after Boot 639kB 639kB 639kB 9FC0h-A000h (1k) 640kB QEMM 640B 640kB 639kB D1B5h- (1k) 640kB Attached documents: MEQEMU.TXT QEMU, no CONFIG.SYS/AUTOEXEC.BAT MEQEMUH.TXT QEMU, HIMEM.SYS, EMM386.EXE MEQEMUQ1.TXT QEMU, QEMM386.EXE, NOXBDA parameter MEQEMUQ2.TXT QEMU, QEMM386.EXE MEVMW.TXT VMWare, no CONFIG.SYS/AUTOEXEC.BAT MEVMWH.TXT VMWare, HIMEM.SYS, EMM386.EXE MEVMWQ.TXT QEMU, QEMM386.EXE (XBDA not moved to HMA!?!) P733.TXT, Pentium 733, no CONFIG.SYS/AUTOEXEC.BAT P733Q.TXT Pentium 733, QEMM386.EXE Code and Patches can be found at (released under GPL V2): http://www.wiesinger.com/opensource/seabios/meminfoa.asm http://www.wiesinger.com/opensource/seabios/meminfo.c http://www.wiesinger.com/opensource/seabios/meminfo.exe http://www.wiesinger.com/opensource/seabios/seabios-0.6.0-gw-V01.patch QEMURAMD: DOS Device driver, which modifies BDA reported memory by -6kB, released later. Build script will be released under my DOS-Tools soon (some cleanup necessary). Ciao, Gerhard --------------070100050908030109030003 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Kevin O'Connor wrote:
On Tue, Apr 13, 2010 at 02:26:10PM +0800, Roy Tam wrote:
  
2010/4/12 Gerhard Wiesinger <lists@wiesinger.com>:
    
3.) There is also a problem with the reported base memory under QEMM386
(HIMEM.SYS and EMM386.EXE is correct here). It is 646kB instead of 640kB.
Therefore base memory test fails. I guess that reporting memory CMOS
tables/interrupt functions are not implemented correctly.
      
- The Base Memory > 640K error seems to be SeaBIOS related. QEMU Bochs
BIOS(tested with both -old-bios hack in 0.12 series and old 0.11.1)
will just freeze after QEMU counted RAM.(Tested with ScriptPC and
Bochs).
    

The SeaBIOS log would really help.  This can be done by adding:

-chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios

to the qemu command line.

The memory can be obtained in several places (int 12, int 1588, int
15e801, int 15e820, and mem 40:13).  All look fine to me from looking
at the code.

OK, I made some research on the topic. Problem is that QEMM pushes the Extended BIOS data area to High RAM on some machines (QEMU, P733). Therefore 640k low memory is available and checkit reports 640kB + 6kB=646kB EBIOS DATA AREA. Whats strange that on a physical Pentium 733 machine this works correctly (details see below and attached files), maybe someone can try to find the problem with QEMM+Checkit 3.0 (maybe there is still some other BIOS function incorrectly implemented). QEMM parameter NOXBDA avoids moving the XBDA up to HI RAM and therefore checkit reports 640kB well.

SeaBIOS seems to be correct (see below and attached patch files and description below).
Total Memory: 256MB (262144kB), Base RAM: 637kB
Extended BIOS Data Area size: 3 kB, segment=9f40

SCSI option ROM:
After option ROMS, Total Memory: 256MB (262144kB), Base RAM: 634kB
Extended BIOS Data Area size: 6 kB, segment=9e80

MS-DOS 6.22, QEMM 8.03

QEMU

Testcase

BDA

40h:13h

INT

12h

INT 15h,

AX=E820h

EBIOS

DATAAREA

Checkit

3.0

Plain DOS, after Boot

634kB

634kB

634kB

9E80h-A000h (6k)

640kB

HIMEM.SYS+EMM386.EXE

634kB

634kB

634kB

9E80h-A000h (6k)

640kB

QEMM

640kB

640kB

634kB

CEB5h-D035h (6k)

646kB

QEMURAMD + QEMM

628kB

628kB

634kB

9E80h-A000h (6k)

634k

VMWare

Testcase

BDA

40h:13h

INT

12h

INT 15h,

AX=E820h

EBIOS

DATAAREA

Checkit 3.0

Plain DOS, after Boot

638kB

638kB

638kB

9F80h-A000h (2k)

640kB

HIMEM.SYS+EMM386.EXE

638kB

638kB

638kB

9F80h-A000h (2k)

640kB

QEMM

638kB

638kB

638kB

9F80h-A000h (2k)

640kB

QEMURAMD + QEMM

632kB

632kB

632kB

9F80h-A000h (2k)

634kB

Pentium 733

Testcase

BDA

40h:13h

INT

12h

INT 15h,

AX=E820h

EBIOS

DATAAREA

Checkit 3.0

Plain DOS, after Boot

639kB

639kB

639kB

9FC0h-A000h (1k)

640kB

QEMM

640B

640kB

639kB

D1B5h- (1k)

640kB

Attached documents:
MEQEMU.TXT QEMU, no CONFIG.SYS/AUTOEXEC.BAT
MEQEMUH.TXT
QEMU, HIMEM.SYS, EMM386.EXE
MEQEMUQ1.TXT QEMU, QEMM386.EXE, NOXBDA parameter
MEQEMUQ2.TXT QEMU, QEMM386.EXE
MEVMW.TXT VMWare, no CONFIG.SYS/AUTOEXEC.BAT
MEVMWH.TXT VMWare, HIMEM.SYS, EMM386.EXE
MEVMWQ.TXT QEMU, QEMM386.EXE (XBDA not moved to HMA!?!)
P733.TXT, Pentium 733, no CONFIG.SYS/AUTOEXEC.BAT
P733Q.TXT Pentium 733, QEMM386.EXE

Code and Patches can be found at (released under GPL V2):
http://www.wiesinger.com/opensource/seabios/meminfoa.asm
http://www.wiesinger.com/opensource/seabios/meminfo.c
http://www.wiesinger.com/opensource/seabios/meminfo.exe
http://www.wiesinger.com/opensource/seabios/seabios-0.6.0-gw-V01.patch
QEMURAMD: DOS Device driver, which modifies BDA reported memory by -6kB, released later.

Build script will be released under my DOS-Tools soon (some cleanup necessary).

Ciao,
Gerhard


--------------070100050908030109030003-- --------------010706020508020702060808 Content-Type: text/plain; name="MEQEMUQ2.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEQEMUQ2.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=640, 640kB INT 12h: AX=640, 640kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3840, extended memory above 16M, in 64K blocks: 245760kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3840, configured memory above 16M, in 64K blocks: 245760kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9E800h (649216), 634kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=B0B5h, memory=6kB Device driver entry point=D1EEh:023Ch, Device flag 1st byte=00h, 2nd byte=83h --------------010706020508020702060808 Content-Type: text/plain; name="MEVMW.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEVMW.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=638, 638kB INT 12h: AX=638, 638kB INT 15h, AH=88h AX=64512, number of continuous kB starting at absolute address 100000h: 64512kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3823, extended memory above 16M, in 64K blocks: 244672kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3823, configured memory above 16M, in 64K blocks: 244672kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9F800h (653312), 638kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9F80h, memory=2kB Device driver entry point=0000h:0000h, Device flag 1st byte=00h, 2nd byte=02h --------------010706020508020702060808 Content-Type: text/plain; name="MEVMWH.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEVMWH.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=638, 638kB INT 12h: AX=638, 638kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3823, extended memory above 16M, in 64K blocks: 244672kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3823, configured memory above 16M, in 64K blocks: 244672kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9F800h (653312), 638kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9F80h, memory=2kB Device driver entry point=CB02h:023Ch, Device flag 1st byte=00h, 2nd byte=C2h --------------010706020508020702060808 Content-Type: text/plain; name="MEVMWQ.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEVMWQ.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=638, 638kB INT 12h: AX=638, 638kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3823, extended memory above 16M, in 64K blocks: 244672kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3823, configured memory above 16M, in 64K blocks: 244672kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9F800h (653312), 638kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9F80h, memory=2kB Device driver entry point=02FFh:023Ch, Device flag 1st byte=00h, 2nd byte=C2h --------------010706020508020702060808 Content-Type: text/plain; name="P733.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="P733.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=639, 639kB INT 12h: AX=639, 639kB INT 15h, AH=88h AX=65472, number of continuous kB starting at absolute address 100000h: 65472kB INT 15h, AX=E801h Not successful INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9FC00h (654336), 639kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9FC0h, memory=1kB Device driver entry point=0000h:0000h, Device flag 1st byte=00h, 2nd byte=00h --------------010706020508020702060808 Content-Type: text/plain; name="P733Q.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="P733Q.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=640, 640kB INT 12h: AX=640, 640kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h Not successful INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9FC00h (654336), 639kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=D1B5h, memory=1kB Device driver entry point=B11Bh:023Ch, Device flag 1st byte=00h, 2nd byte=82h --------------010706020508020702060808 Content-Type: text/plain; name="MEQEMU.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEQEMU.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=634, 634kB INT 12h: AX=634, 634kB INT 15h, AH=88h AX=64512, number of continuous kB starting at absolute address 100000h: 64512kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3840, extended memory above 16M, in 64K blocks: 245760kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3840, configured memory above 16M, in 64K blocks: 245760kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9E800h (649216), 634kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9E80h, memory=6kB Device driver entry point=0000h:0000h, Device flag 1st byte=00h, 2nd byte=00h --------------010706020508020702060808 Content-Type: text/plain; name="MEQEMUH.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEQEMUH.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=634, 634kB INT 12h: AX=634, 634kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3840, extended memory above 16M, in 64K blocks: 245760kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3840, configured memory above 16M, in 64K blocks: 245760kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9E800h (649216), 634kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9E80h, memory=6kB Device driver entry point=08A9h:023Ch, Device flag 1st byte=00h, 2nd byte=83h --------------010706020508020702060808 Content-Type: text/plain; name="MEQEMUQ1.TXT" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="MEQEMUQ1.TXT" Memory Information V1.0, (c) 2009-2010 by Gerhard Wiesinger BIOS area 40h:13h=634, 634kB INT 12h: AX=634, 634kB INT 15h, AH=88h AX=0, number of continuous kB starting at absolute address 100000h: 0kB INT 15h, AX=E801h AX=15360, extended memory between 1M and 16M: 15360kB BX=3840, extended memory above 16M, in 64K blocks: 245760kB CX=15360, configured memory between 1M and 16M: 15360kB DX=3840, configured memory above 16M, in 64K blocks: 245760kB INT 15h, AX=E820h structure len=20 base address 0h (0) length in bytes 9E800h (649216), 634kB type of address range: memory type=1 type of address range: memory type=memory, available to OS EBDA - Extended BIOS Data Area information, found, segment=9E80h, memory=6kB Device driver entry point=D1EEh:023Ch, Device flag 1st byte=00h, 2nd byte=83h --------------010706020508020702060808--