r9751: Fix race condition in PDC device. Multi disk load now possible.

This commit is contained in:
Brandon Munger 2016-05-08 15:41:24 -04:00
parent 1243bb8d96
commit e1c13a3f5e

View File

@ -449,6 +449,8 @@ WRITE8_MEMBER(pdc_device::p0_7_w)
case 4: /* Port 4: FDD command completion status low byte [0x5FF030B0] */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x04 WRITE: %02X\n", data);
reg_p4 = data;
if(TRACE_PDC_FDC) logerror("PDC: Resetting 0x38 bit 1. This causes the PDC to stop looking for a command.\n");
reg_p38 &= ~2; // Clear bit 1
break;
case 5: /* Port 5: FDD command completion status high byte [0x5FF030B0] */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x05 WRITE: %02X\n", data);
@ -477,8 +479,8 @@ WRITE8_MEMBER(pdc_device::fdd_68k_w)
{
case 0x21: /* Port 21: ?? */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x21 WRITE: %02X\n", data);
if(TRACE_PDC_FDC) logerror("PDC: Resetting 0x38 bit 1\n");
reg_p38 &= ~2; // Clear bit 1
//if(TRACE_PDC_FDC) logerror("PDC: Resetting 0x38 bit 1\n");
//reg_p38 &= ~2; // Clear bit 1
reg_p21 = data;
break;
case 0x23: /* Port 23: FDD 68k DMA high byte */
@ -547,15 +549,15 @@ WRITE8_MEMBER(pdc_device::p50_5f_w)
switch(data)
{
case 0x00:
if(TRACE_PDC_FDC) logerror("PDC: FDD (all) Motor off.\n");
if(TRACE_PDC_FDC) logerror("PDC: FDD (all) Motor off. PC: %X\n", space.device().safe_pc());
m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(1);
break;
case 0x80:
if(TRACE_PDC_FDC) logerror("PDC: FDD (all) Motor on.\n");
if(TRACE_PDC_FDC) logerror("PDC: FDD (all) Motor on. PC: %X\n", space.device().safe_pc());
m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(0);
break;
default:
if(TRACE_PDC_FDC) logerror("PDC: Port 0x52 WRITE: %x\n", data);
if(TRACE_PDC_FDC) logerror("PDC: Port 0x52 WRITE: %x\n PC: %X\n", data, space.device().safe_pc());
}
break;
case 0x53: /* Probably set_rate here */
@ -565,7 +567,7 @@ WRITE8_MEMBER(pdc_device::p50_5f_w)
switch(data)
{
case 0x00:
if(TRACE_PDC_FDC) logerror("PDC: FDD 1 Motor off.\n");
if(TRACE_PDC_FDC) logerror("PDC: FDD 1 Motor off. PC: %X\n", space.device().safe_pc());
m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(1);
break;
case 0x80: