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. -Kevin -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

