[coreboot] SimNOW VGA int 1a

Marc Jones Marc.Jones at amd.com
Wed Oct 15 23:13:21 CEST 2008

Myles Watson wrote:
>> -----Original Message-----
>> From: Marc Jones [mailto:Marc.Jones at 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 Jones
Senior Firmware Engineer
(970) 226-9684 Office
mailto:Marc.Jones at amd.com

More information about the coreboot mailing list