Myles Watson wrote:
-----Original Message----- From: Marc Jones [mailto:Marc.Jones@amd.com] Sent: Wednesday, October 15, 2008 2:45 PM To: Myles Watson Cc: Tom Sylla; ron minnich; Coreboot Subject: Re: [coreboot] SimNOW VGA int 1a
Myles Watson wrote:
Here's the next part of the log now that I've enabled setup_realmode_idt (I'm running it right before real_mode_switch_call_vga.
Copying VGA ROM image from 0xfe040000 to 0xc0000, 0x8000 bytes BREAK HERE run_bios = 0x0000944a biosint: INT# 0x18 biosint: eax 0x2e ebx 0x10000 ecx 0xfe4 edx 0xcf11c biosint: ebp 0xc0000000 esp 0xd0000 edi 0x1a esi 0x0 biosint: ip 0x1022 cs 0xf flags 0x2067 BIOSINT: Unsupport int #0x18
That isn't the same emulator that most of v2 uses. setup_realmode_idt is certainly required. 0x18 is a strange INT to see. http://www.ctyme.com/intr/int.htm
Can you get back to the calling code and see what it was doing?
The VGA BIOS calls 1a, but it looks like too many things get pushed onto the stack, and it thinks it's 18 instead. I'm not an assembly programmer, but it looks like the problem is in callbiosint or handler. It looks like the registers are being pushed onto the stack too many times?
Ewwww! This looks like a compiler function calling problem.
I think that the 0x18 comes from here : "biosprotect: \n" " .code32 \n" " movw $0x18, %ax\n" " mov %ax, %ds\n" " mov %ax, %es\n" " mov %ax, %fs\n" " mov %ax, %gs\n" " mov %ax, %ss\n" " lidt idtarg \n" " call biosint \n"
Which means that biosint isn't using variables from the stack but from the register.
Marc