- the skip flag (SK) in command 'read sector' is ignored now. The floppy

command codes 0x46 and 0xc6 are using the normal read function.
This commit is contained in:
Volker Ruppert 2002-07-15 20:11:33 +00:00
parent 53128ce079
commit 43f9f8287b

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: floppy.cc,v 1.40 2002-06-23 18:04:07 vruppert Exp $ // $Id: floppy.cc,v 1.41 2002-07-15 20:11:33 vruppert Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2002 MandrakeSoft S.A. // Copyright (C) 2002 MandrakeSoft S.A.
@ -87,7 +87,7 @@ bx_floppy_ctrl_c::~bx_floppy_ctrl_c(void)
void void
bx_floppy_ctrl_c::init(bx_devices_c *d, bx_cmos_c *cmos) bx_floppy_ctrl_c::init(bx_devices_c *d, bx_cmos_c *cmos)
{ {
BX_DEBUG(("Init $Id: floppy.cc,v 1.40 2002-06-23 18:04:07 vruppert Exp $")); BX_DEBUG(("Init $Id: floppy.cc,v 1.41 2002-07-15 20:11:33 vruppert Exp $"));
BX_FD_THIS devices = d; BX_FD_THIS devices = d;
BX_REGISTER_DMA8_CHANNEL(2, bx_floppy.dma_read, bx_floppy.dma_write, "Floppy Drive"); BX_REGISTER_DMA8_CHANNEL(2, bx_floppy.dma_read, bx_floppy.dma_write, "Floppy Drive");
@ -478,7 +478,9 @@ bx_floppy_ctrl_c::write(Bit32u address, Bit32u value, unsigned io_len)
case 0xc5: /* write normal data */ case 0xc5: /* write normal data */
BX_FD_THIS s.command_size = 9; BX_FD_THIS s.command_size = 9;
break; break;
case 0x46:
case 0x66: case 0x66:
case 0xc6:
case 0xe6: /* read normal data */ case 0xe6: /* read normal data */
BX_FD_THIS s.command_size = 9; BX_FD_THIS s.command_size = 9;
break; break;
@ -797,8 +799,10 @@ bx_floppy_ctrl_c::floppy_command(void)
return; return;
break; break;
case 0x66: // read normal data, MT=0 case 0x46: // read normal data, MT=0, SK=0
case 0xe6: // read normal data, MT=1 case 0x66: // read normal data, MT=0, SK=1
case 0xc6: // read normal data, MT=1, SK=0
case 0xe6: // read normal data, MT=1, SK=1
case 0x45: // write normal data, MT=0 case 0x45: // write normal data, MT=0
case 0xc5: // write normal data, MT=1 case 0xc5: // write normal data, MT=1
BX_FD_THIS s.multi_track = (BX_FD_THIS s.command[0] >> 7); BX_FD_THIS s.multi_track = (BX_FD_THIS s.command[0] >> 7);
@ -939,7 +943,7 @@ bx_floppy_ctrl_c::floppy_command(void)
BX_FD_THIS s.sector[drive] = sector; BX_FD_THIS s.sector[drive] = sector;
BX_FD_THIS s.head[drive] = head; BX_FD_THIS s.head[drive] = head;
if ((BX_FD_THIS s.command[0] & 0x7f) == 0x66) { // read if ((BX_FD_THIS s.command[0] & 0x4f) == 0x46) { // read
floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer,
512, FROM_FLOPPY); 512, FROM_FLOPPY);
BX_FD_THIS s.floppy_buffer_index = 0; BX_FD_THIS s.floppy_buffer_index = 0;
@ -1083,7 +1087,9 @@ bx_floppy_ctrl_c::timer()
raise_interrupt(); raise_interrupt();
break; break;
case 0x66: // read normal data case 0x46: // read normal data
case 0x66:
case 0xc6:
case 0xe6: case 0xe6:
case 0x45: // write normal data case 0x45: // write normal data
case 0xc5: case 0xc5: