[SeaBIOS] [PATCH 1/2] floppy: Minor cleanup - reduce some cut-and-paste code.

Kevin O'Connor kevin at koconnor.net
Mon Nov 26 17:21:27 CET 2012


The diskette_param_table is a copy of diskette_param_table2 - just
memcpy it at runtime instead of duplicating the configuration in the
code.

Also, setup the floppy interrupt vector in the floppy.c code instead
of the post.c code.

Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
 src/floppy.c | 22 ++++++----------------
 src/post.c   |  2 --
 2 files changed, 6 insertions(+), 18 deletions(-)

diff --git a/src/floppy.c b/src/floppy.c
index ce54d0c..3c8ae5a 100644
--- a/src/floppy.c
+++ b/src/floppy.c
@@ -47,22 +47,7 @@ struct floppy_ext_dbt_s diskette_param_table2 VAR16VISIBLE = {
     .drive_type     = 4,    // drive type in cmos
 };
 
-// Since no provisions are made for multiple drive types, most
-// values in this table are ignored.  I set parameters for 1.44M
-// floppy here
-struct floppy_dbt_s diskette_param_table VAR16FIXED(0xefc7) = {
-    .specify1       = 0xAF,
-    .specify2       = 0x02,
-    .shutoff_ticks  = FLOPPY_MOTOR_TICKS,
-    .bps_code       = FLOPPY_SIZE_CODE,
-    .sectors        = 18,
-    .interblock_len = FLOPPY_GAPLEN,
-    .data_len       = FLOPPY_DATALEN,
-    .gap_len        = FLOPPY_FORMAT_GAPLEN,
-    .fill_byte      = FLOPPY_FILLBYTE,
-    .settle_time    = 0x0F,
-    .startup_time   = 0x08,
-};
+struct floppy_dbt_s diskette_param_table VAR16FIXED(0xefc7);
 
 struct floppyinfo_s {
     struct chs_s chs;
@@ -131,6 +116,11 @@ addFloppy(int floppyid, int ftype)
 void
 floppy_setup(void)
 {
+    memcpy(&diskette_param_table, &diskette_param_table2
+           , sizeof(diskette_param_table));
+    SET_IVT(0x1E, SEGOFF(SEG_BIOS
+                         , (u32)&diskette_param_table2 - BUILD_BIOS_ADDR));
+
     if (! CONFIG_FLOPPY)
         return;
     dprintf(3, "init floppy drives\n");
diff --git a/src/post.c b/src/post.c
index 0133f75..9a6dd3f 100644
--- a/src/post.c
+++ b/src/post.c
@@ -73,8 +73,6 @@ init_ivt(void)
     // set vector 0x79 to zero
     // this is used by 'gardian angel' protection system
     SET_IVT(0x79, SEGOFF(0, 0));
-
-    SET_IVT(0x1E, SEGOFF(SEG_BIOS, (u32)&diskette_param_table2 - BUILD_BIOS_ADDR));
 }
 
 static void
-- 
1.7.11.7




More information about the SeaBIOS mailing list