[SeaBIOS] vga bios woes
Alex Williamson
alex.williamson at redhat.com
Fri Jan 4 18:29:48 CET 2013
On Thu, 2013-01-03 at 20:49 -0700, Alex Williamson wrote:
> On Thu, 2013-01-03 at 20:57 -0500, Kevin O'Connor wrote:
> > On Thu, Jan 03, 2013 at 06:41:35PM -0700, Alex Williamson wrote:
> > > Thanks for filling in that piece of the puzzle for me. If the above is
> > > just a reporting problem, how do I fix it so I can actually step through
> > > the rom? Thanks,
> >
> > One other note - I think Darmawan may have been doing something
> > similar with PCI rom debugging - you may wish to reach out to him.
>
> Thanks for the connection. For now the link Daniel provided has given
> me enough to make progress. It looks like this is a case where the VGA
> bios manages to get the physical address of the device through a legacy
> VGA register (0x3c3) and shoots itself by using that rather than the
> emulated address found through config space. I can kludge the offset
> and get the VGA option rom to finish, but something is still wrong since
> it doesn't trigger the monitor to sync. Still digging. Thanks for the
> help,
I enabled unassigned memory debugging in qemu and get some peculiar
output during the vga bios execution. Given this state:
---------------------------[ STACK ]---
6E02 4942 B5D4 B5E5 6DAE 6DB2 0000 0000
B56A B572 6DBA 0000 6E0A 6DA6 8001 0000
---------------------------[ DS:SI ]---
C0000000: 55 AA 75 E9 21 02 00 00 00 00 00 00 00 00 00 00 U.u.!...........
C0000010: 00 00 00 00 00 00 00 00 D4 01 00 00 00 00 49 42 ..............IB
C0000020: 4D 25 00 00 00 00 00 00 00 00 00 00 00 00 00 04 M%..............
C0000030: 20 37 36 31 32 39 35 35 32 30 00 00 00 00 00 00 .761295520......
---------------------------[ ES:DI ]---
00006E0A: 1A 6E 00 00 00 20 28 03 E8 FD 00 00 E8 FD 00 00 .n....(.........
00006E1A: 00 00 A4 0D 10 00 00 00 10 00 00 00 6E 02 28 17 ............n.(.
00006E2A: 00 00 90 D1 00 00 00 00 00 00 00 00 00 00 FF FF ................
00006E3A: 00 00 FF FF 00 00 00 00 00 00 10 00 00 00 00 F0 ................
----------------------------[ CPU ]----
AX: 6DBA BX: B5E5 CX: 0000 DX: 0001
SI: 0000 DI: 6E0A SP: 6DA2 BP: 6E02
CS: C000 DS: C000 ES: 0000 SS: 0000
IP: 460E EIP:0000460E
CS:IP: C000:460E (0xC460E)
SS:SP: 0000:6DA2 (0x06DA2)
SS:BP: 0000:6E02 (0x06E02)
OF <0> DF <0> IF <1> TF <0> SF <1> ZF <0> AF <1> PF <1> CF <1>
ID <0> VIP <0> VIF <0> AC <0> VM <0> RF <0> NT <0> IOPL <0>
---------------------------[ CODE ]----
0xc460e: mov bp,sp
0xc4610: push bx
0xc4611: push cx
0xc4612: push dx
0xc4613: push di
0xc4614: push ax
0xc4615: mov bx,ax
0xc4617: mov cx,ss
0xc4619: mov es,cx
0xc461b: mov si,WORD PTR es:[bx+0x2]
How does that mov generate this:
Unassigned mem read 00000000b5e5b5d4
Real-mode tcg bug? Here's the next state:
---------------------------[ STACK ]---
6E02 4942 B5D4 B5E5 6DAE 6DB2 0000 0000
B56A B572 6DBA 0000 6E0A 6DA6 8001 0000
---------------------------[ DS:SI ]---
C0000000: 55 AA 75 E9 21 02 00 00 00 00 00 00 00 00 00 00 U.u.!...........
C0000010: 00 00 00 00 00 00 00 00 D4 01 00 00 00 00 49 42 ..............IB
C0000020: 4D 25 00 00 00 00 00 00 00 00 00 00 00 00 00 04 M%..............
C0000030: 20 37 36 31 32 39 35 35 32 30 00 00 00 00 00 00 .761295520......
---------------------------[ ES:DI ]---
00006E0A: 1A 6E 00 00 00 20 28 03 E8 FD 00 00 E8 FD 00 00 .n....(.........
00006E1A: 00 00 A4 0D 10 00 00 00 10 00 00 00 6E 02 28 17 ............n.(.
00006E2A: 00 00 90 D1 00 00 00 00 00 00 00 00 00 00 FF FF ................
00006E3A: 00 00 FF FF 00 00 00 00 00 00 10 00 00 00 00 F0 ................
----------------------------[ CPU ]----
AX: 6DBA BX: B5E5 CX: 0000 DX: 0001
SI: 0000 DI: 6E0A SP: 6DA2 BP: 6DA2
CS: C000 DS: C000 ES: 0000 SS: 0000
IP: 4610 EIP:00004610
CS:IP: C000:4610 (0xC4610)
SS:SP: 0000:6DA2 (0x06DA2)
SS:BP: 0000:6DA2 (0x06DA2)
OF <0> DF <0> IF <1> TF <0> SF <1> ZF <0> AF <1> PF <1> CF <1>
ID <0> VIP <0> VIF <0> AC <0> VM <0> RF <0> NT <0> IOPL <0>
---------------------------[ CODE ]----
0xc4610: push bx
0xc4611: push cx
0xc4612: push dx
0xc4613: push di
0xc4614: push ax
0xc4615: mov bx,ax
0xc4617: mov cx,ss
0xc4619: mov es,cx
0xc461b: mov si,WORD PTR es:[bx+0x2]
0xc461f: mov si,WORD PTR es:[si+0x2]
Here's another odd one, this state:
---------------------------[ STACK ]---
6E02 4942 B5D4 B5E7 6DAE 6DB2 0000 0000
B56A B572 6DBA 0000 6E0A 6DA6 8001 0000
---------------------------[ DS:SI ]---
C0000004: 21 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 !...............
C0000014: 00 00 00 00 D4 01 00 00 00 00 49 42 4D 25 00 00 ..........IBM%..
C0000024: 00 00 00 00 00 00 00 00 00 00 00 04 20 37 36 31 .............761
C0000034: 32 39 35 35 32 30 00 00 00 00 00 00 19 02 00 00 295520..........
---------------------------[ ES:DI ]---
00006E0A: 1A 6E 00 00 00 20 28 03 E8 FD 00 00 E8 FD 00 00 .n....(.........
00006E1A: 00 00 A4 0D 10 00 00 00 10 00 00 00 6E 02 28 17 ............n.(.
00006E2A: 00 00 90 D1 00 00 00 00 00 00 00 00 00 00 FF FF ................
00006E3A: 00 00 FF FF 00 00 00 00 00 00 10 00 00 00 00 F0 ................
----------------------------[ CPU ]----
AX: 0001 BX: B5E5 CX: 0000 DX: 0001
SI: 0004 DI: 6E0A SP: 6DA2 BP: 6DA2
CS: C000 DS: C000 ES: 0000 SS: 0000
IP: 4785 EIP:00004785
CS:IP: C000:4785 (0xC4785)
SS:SP: 0000:6DA2 (0x06DA2)
SS:BP: 0000:6DA2 (0x06DA2)
OF <0> DF <0> IF <1> TF <0> SF <0> ZF <0> AF <0> PF <0> CF <0>
ID <0> VIP <0> VIF <0> AC <0> VM <0> RF <0> NT <0> IOPL <0>
---------------------------[ CODE ]----
0xc4785: pop bp
0xc4786: ret
0xc4787: push bx
0xc4788: push si
0xc4789: mov bx,ax
0xc478b: mov si,WORD PTR es:[bx+0x2]
0xc478f: mov ax,si
0xc4791: mov si,WORD PTR [si+0x48]
0xc4794: add si,ax
0xc4796: mov bx,ax
Generates:
Unassigned mem read 00000000f000c000
Next state:
---------------------------[ STACK ]---
4942 B5D4 B5E7 6DAE 6DB2 0000 0000 B56A
B572 6DBA 0000 6E0A 6DA6 8001 0000 8001
---------------------------[ DS:SI ]---
C0000004: 21 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 !...............
C0000014: 00 00 00 00 D4 01 00 00 00 00 49 42 4D 25 00 00 ..........IBM%..
C0000024: 00 00 00 00 00 00 00 00 00 00 00 04 20 37 36 31 .............761
C0000034: 32 39 35 35 32 30 00 00 00 00 00 00 19 02 00 00 295520..........
---------------------------[ ES:DI ]---
00006E0A: 1A 6E 00 00 00 20 28 03 E8 FD 00 00 E8 FD 00 00 .n....(.........
00006E1A: 00 00 A4 0D 10 00 00 00 10 00 00 00 6E 02 28 17 ............n.(.
00006E2A: 00 00 90 D1 00 00 00 00 00 00 00 00 00 00 FF FF ................
00006E3A: 00 00 FF FF 00 00 00 00 00 00 10 00 00 00 00 F0 ................
----------------------------[ CPU ]----
AX: 0001 BX: B5E5 CX: 0000 DX: 0001
SI: 0004 DI: 6E0A SP: 6DA4 BP: 6E02
CS: C000 DS: C000 ES: 0000 SS: 0000
IP: 4786 EIP:00004786
CS:IP: C000:4786 (0xC4786)
SS:SP: 0000:6DA4 (0x06DA4)
SS:BP: 0000:6E02 (0x06E02)
OF <0> DF <0> IF <1> TF <0> SF <0> ZF <0> AF <0> PF <0> CF <0>
ID <0> VIP <0> VIF <0> AC <0> VM <0> RF <0> NT <0> IOPL <0>
---------------------------[ CODE ]----
0xc4786: ret
0xc4787: push bx
0xc4788: push si
0xc4789: mov bx,ax
0xc478b: mov si,WORD PTR es:[bx+0x2]
0xc478f: mov ax,si
0xc4791: mov si,WORD PTR [si+0x48]
0xc4794: add si,ax
0xc4796: mov bx,ax
0xc4798: mov si,WORD PTR [si+0x1e]
It looks like maybe these innocuous since the next state looks correct.
Again, thanks for any insight you might have into this,
Alex
More information about the SeaBIOS
mailing list