On Wed, Dec 04, 2013 at 10:39:43PM +0100, Gelip wrote:
I make manually patch floppy.c and seriallog-20131204_232400.log readserial.py /dev/ttyS0 115200
======= Wed Dec 4 23:24:06 2013 (adjust=86.8us)
[...]
08.149: Booting from Floppy... 08.149: check_recal_drive 0 08.149: floppy_drive_recal 0 08.149: floppy_select_drive 0 08.149: floppy_enable_controller 10.126: floppy_disable_controller
The SeaBIOS code was expecting an irq and did not receive one. It looks like the seabios code may be incorrectly reading from a write only register (the "dor" register). To confirm if this is the case, can you add the following additional debugging and re-run?
-Kevin
--- floppy.c 2013-12-04 20:36:20.090459019 -0500 +++ src/hw/floppy.c 2013-12-04 20:39:44.426820240 -0500 @@ -278,8 +278,9 @@ static int floppy_enable_controller(void) { - dprintf(1, "floppy_enable_controller\n"); + dprintf(1, "floppy_enable_controller dor=%x\n", inb(PORT_FD_DOR)); outb(inb(PORT_FD_DOR) | 0x04, PORT_FD_DOR); + dprintf(1, "now dor=%x\n", inb(PORT_FD_DOR)); int ret = floppy_wait_irq(); if (ret) return ret; @@ -301,6 +302,7 @@
// Enable controller if it isn't running. u8 dor = inb(PORT_FD_DOR); + dprintf(1, "dor=%x\n", dor); if (!(dor & 0x04)) { int ret = floppy_enable_controller(); if (ret) @@ -670,7 +672,7 @@ { if (! CONFIG_FLOPPY) return; - debug_isr(DEBUG_ISR_0e); + debug_isr(1);
// diskette interrupt has occurred u8 frs = GET_BDA(floppy_recalibration_status);