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] */ case 4: /* Port 4: FDD command completion status low byte [0x5FF030B0] */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x04 WRITE: %02X\n", data); if(TRACE_PDC_FDC) logerror("PDC: Port 0x04 WRITE: %02X\n", data);
reg_p4 = 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; break;
case 5: /* Port 5: FDD command completion status high byte [0x5FF030B0] */ case 5: /* Port 5: FDD command completion status high byte [0x5FF030B0] */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x05 WRITE: %02X\n", data); 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: ?? */ case 0x21: /* Port 21: ?? */
if(TRACE_PDC_FDC) logerror("PDC: Port 0x21 WRITE: %02X\n", data); if(TRACE_PDC_FDC) logerror("PDC: Port 0x21 WRITE: %02X\n", data);
if(TRACE_PDC_FDC) logerror("PDC: Resetting 0x38 bit 1\n"); //if(TRACE_PDC_FDC) logerror("PDC: Resetting 0x38 bit 1\n");
reg_p38 &= ~2; // Clear bit 1 //reg_p38 &= ~2; // Clear bit 1
reg_p21 = data; reg_p21 = data;
break; break;
case 0x23: /* Port 23: FDD 68k DMA high byte */ case 0x23: /* Port 23: FDD 68k DMA high byte */
@ -547,15 +549,15 @@ WRITE8_MEMBER(pdc_device::p50_5f_w)
switch(data) switch(data)
{ {
case 0x00: 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); m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(1);
break; break;
case 0x80: 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); m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(0);
break; break;
default: 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; break;
case 0x53: /* Probably set_rate here */ case 0x53: /* Probably set_rate here */
@ -565,7 +567,7 @@ WRITE8_MEMBER(pdc_device::p50_5f_w)
switch(data) switch(data)
{ {
case 0x00: 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); m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(1);
break; break;
case 0x80: case 0x80: