78 lines
2.6 KiB
Plaintext
78 lines
2.6 KiB
Plaintext
----------------------------------------------------------------------
|
|
Patch name: patch.floppy-mt0
|
|
Author: Bryce Denney
|
|
Date: Wed Dec 12 16:34:42 EST 2001
|
|
|
|
Detailed description:
|
|
WARNING: THIS IS STILL VERY BROKEN!
|
|
I'm working on sourceforge bug
|
|
[ #431508 ] FD io write:3f5: unsupported case 0x45
|
|
http://sourceforge.net/tracker/index.php?func=detail&aid=431508&group_id=12580&atid=112580
|
|
|
|
The code assumes MT=1, and fails when MT=0. I need an understanding
|
|
of what MT really does before I can go any further.
|
|
|
|
Patch was created with:
|
|
cvs diff -u
|
|
Apply patch to what version:
|
|
cvs checked out on DATE, release version VER
|
|
Instructions:
|
|
To patch, go to main bochs directory.
|
|
Type "patch -p0 < THIS_PATCH_FILE".
|
|
----------------------------------------------------------------------
|
|
|
|
Index: iodev/floppy.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/floppy.cc,v
|
|
retrieving revision 1.26
|
|
diff -u -r1.26 floppy.cc
|
|
--- iodev/floppy.cc 2001/10/07 03:28:45 1.26
|
|
+++ iodev/floppy.cc 2001/12/12 21:31:40
|
|
@@ -466,6 +466,9 @@
|
|
case 0x4a: /* read ID */
|
|
BX_FD_THIS s.command_size = 2;
|
|
break;
|
|
+ case 0x45:
|
|
+ BX_ERROR(("treating FDC command 0x45 just like 0xc5"));
|
|
+ // fall through into next case.
|
|
case 0xc5: /* write normal data */
|
|
BX_FD_THIS s.command_size = 9;
|
|
break;
|
|
@@ -712,7 +715,9 @@
|
|
|
|
case 0xe6: // read normal data
|
|
//BX_INFO(("floppy_command read normal data"));
|
|
- case 0xc5: // write normal data
|
|
+ case 0x45: // write normal data, with MT=0.
|
|
+ BX_ERROR(("treat FDC command 0x45 like command 0xc5"));
|
|
+ case 0xc5: // write normal data, with MT=1.
|
|
//BX_INFO(("floppy_command write normal data"));
|
|
if ( (BX_FD_THIS s.DOR & 0x08) == 0 )
|
|
BX_PANIC(("read/write command with DMA and int disabled"));
|
|
@@ -860,7 +865,7 @@
|
|
BX_FD_THIS s.pending_command = BX_FD_THIS s.command[0];
|
|
return;
|
|
}
|
|
- else if (BX_FD_THIS s.command[0] == 0xc5) { // write
|
|
+ else if (BX_FD_THIS s.command[0] == 0xc5 || BX_FD_THIS s.command[0] == 0x45) { // write
|
|
BX_FD_THIS s.floppy_buffer_index = 0;
|
|
|
|
bx_pc_system.set_DRQ(FLOPPY_DMA_CHAN, 1);
|
|
@@ -871,7 +876,7 @@
|
|
return;
|
|
}
|
|
else
|
|
- BX_PANIC(("floppy_command(): unknown read/write command"));
|
|
+ BX_PANIC(("floppy_command(): unknown read/write command 0x%02x", (Bit8u)BX_FD_THIS s.command[0]));
|
|
|
|
return;
|
|
break;
|
|
@@ -980,6 +985,7 @@
|
|
|
|
|
|
case 0x4a: /* read ID */
|
|
+ case 0x45:
|
|
case 0xc5: // write normal data
|
|
case 0xe6: // read normal data
|
|
BX_FD_THIS s.pending_command = 0;
|