[coreboot] [PATCH] Free VGA BIOS for K8M890

Kevin O'Connor kevin at koconnor.net
Sat Apr 25 16:46:43 CEST 2009

On Sat, Apr 25, 2009 at 04:01:09PM +0200, Rudolf Marek wrote:
> I managed to catch all I/O for init of K8M890 IGP. Attached patch is for
> http://www.nongnu.org/vgabios/. With a patch one can have a console and some VGA
> resolutions also might work.
> It is just a interesting result.

So, you got the open source vgabios to boot on real hardware.  Very nice!

> I used libx86 library to catch all IO. It was quite painful until I
> realize that the emulator cannot handle properly opcodes like
> 0x66 0xe8 .. .. 0xff 0xff and also mov al,cs:[ebx] which I get
> caught in Sebios int 15 routine.

Most of SeaBIOS is compiled with gcc.  gcc generates regular 32bit
code.  Then a gnu assembler (gas) hack is used to make that 32bit code
run while the processor is in 16bit mode.

As such, I can't think of any way to stop the 0x66/0x67 prefixes -
they are inherent to the process.

> Those were just directly transformed with bash script to IO calls in
> patch. The BIOS works, it even sets the memory speed grade, but not
> the mem size to scratch registers (it uses SeaBIOS VIA vga hooks for
> this)

It would be nice to port the open source vgabios from bcc to gcc.
(Much like what was done with bochs bios/SeaBIOS.)  Doing so will make
understanding and manipulating the code much easier.

I actually started this 5 months ago - I ported all the assembler to
pseudo C code.  I realized it was more work than I originally
anticipated, and so it stalled.

> +mov al, #0x1
> +mov dx, #0x3c3
> +out dx,al
> +mov ax, #0x32
> +mov dx, #0x3c4
> +out dx,ax
> +mov al, #0x10
> +mov dx, #0x3c4
> +out dx,al

I suspect some of these IO accesses would be done by the vgabios
anyway - some things like screen clearing and palette selection are
standard.  Which parts are standard and which parts are via specific
is an open question though.


More information about the coreboot mailing list