[SeaBIOS] [coreboot] Patch number 4 for floppy in SeaBIOS

Kevin O'Connor kevin at koconnor.net
Sat Dec 7 00:13:32 CET 2013


On Fri, Dec 06, 2013 at 11:01:25AM +0100, Gelip wrote:
> Still Disk I/O error:
> 07.178: Booting from Floppy...
> 07.198: enter handle_13:
> 07.198:    a=00000201  b=00000000  c=00000001  d=00000000 ds=0000 es=07c0 ss=dd80
> 07.198:   si=00000000 di=00000000 bp=00000000 sp=0000fae8 cs=f000 ip=c9a1  f=0202
> 07.198: disk_op d=0x000f4530 lba=0 buf=0x00007c00 count=1 cmd=2
> 07.198: check_recal_drive 0
> 07.198: floppy_drive_recal 0
> 07.198: handle_0e
> 07.198: floppy_pio
> 07.198: floppy_pio
> 07.198: handle_0e
> 07.198: floppy_pio
> 07.198: floppy_media_sense 0 ftype=4
> 07.198: floppy_drive_readid 0 rate=0 head=0
> 07.198: floppy_pio
> 07.513: handle_0e
> 07.513: floppy_media_sense finish 0 data_rate=0 fms=17 stype=4
> 07.514: floppy_pio
> 07.685: handle_0e
> 07.685: Booting from 0000:7c00
> 07.685: enter handle_13:
> 07.685:    a=00000201  b=00000700  c=00000002  d=00000100 ds=0000 es=0000 ss=dd80
> 07.685:   si=00007bd2 di=00000700 bp=00007c00 sp=0000fae8 cs=0000 ip=7d6e  f=0002
> 07.684: disk_op d=0x000f4530 lba=19 buf=0x00000700 count=1 cmd=2
> 07.684: floppy_pio
> 07.850: handle_0e
> 07.850: enter handle_13:
> 07.850:    a=00000201  b=00000700  c=00000010  d=00000100 ds=0000 es=0000 ss=dd80
> 07.850:   si=00007bd2 di=00000002 bp=00007c00 sp=0000fae8 cs=0000 ip=7d6e  f=0002
> 07.852: disk_op d=0x000f4530 lba=33 buf=0x00000700 count=1 cmd=2
> 07.852: floppy_pio
> 07.965: handle_0e
> 07.965: enter handle_13:
> 07.965:    a=00000201  b=00000900  c=00000011  d=00000100 ds=0000 es=0000 ss=dd80
> 07.965:   si=00007bd2 di=00000002 bp=00007c00 sp=0000fae8 cs=0000 ip=7d6e  f=0006
> 07.965: disk_op d=0x000f4530 lba=34 buf=0x00000900 count=1 cmd=2
> 07.971: floppy_pio
> 08.133: handle_0e
> 08.133: enter handle_13:
> 08.133:    a=00000201  b=00000b00  c=00000012  d=00000100 ds=0000 es=0000 ss=dd80
> 08.134:   si=00007bd2 di=00000002 bp=00007c00 sp=0000fae8 cs=0000 ip=7d6e  f=0006
> 08.136: disk_op d=0x000f4530 lba=35 buf=0x00000b00 count=1 cmd=2
> 08.136: floppy_pio
> 08.507: handle_0e
> 08.507: floppy error: 40 04 10 01 00 00 02
> 08.507: invalid basic_access:96:
> 08.507:    a=00000200  b=00000b00  c=00000012  d=00000100 ds=0000 es=0000 ss=dd80
> 08.510:   si=00007bd2 di=00000002 bp=00007c00 sp=0000fae8 cs=0000 ip=7d6e  f=0006

Well, the good news is that the above indicates you've succesfully
read 4 sectors from the floppy drive.  The bad news is that it failed
when it tried to read the fifth sector, and I don't know why it fails.

Have you verified that the floppy is not corrupt?  If you boot the
same machine to Linux can the same floppy be fully read from within
Linux?

The floppy specs seem to indicate we should be sending a "specify"
floppy command.  You could give that a shot (see incremental patch
below), but I think it's unlikely to resolve your issue.

-Kevin


--- seabios/src/hw/floppy.c-prev        2013-12-06 18:09:57.667850286 -0500
+++ seabios/src/hw/floppy.c     2013-12-06 18:10:07.215574848 -0500
@@ -322,8 +322,19 @@
     if (ret)
         return ret;
 
-    // send Recalibrate command (2 bytes) to controller
+    // send a Specify command to controller
     struct floppy_pio_s pio;
+    pio.cmdlen = 3;
+    pio.resplen = 0;
+    pio.waitirq = 0;
+    pio.data[0] = 0x03;
+    pio.data[1] = GET_GLOBAL(diskette_param_table2.dbt.specify1);
+    pio.data[2] = GET_GLOBAL(diskette_param_table2.dbt.specify2);
+    ret = floppy_pio(&pio);
+    if (ret)
+        return ret;
+
+    // send Recalibrate command (2 bytes) to controller
     pio.cmdlen = 2;
     pio.resplen = 0;
     pio.waitirq = 1;



More information about the SeaBIOS mailing list