From d4032d954cb965ee0acec19fad06d5d16c1df8ca Mon Sep 17 00:00:00 2001 From: cracyc Date: Wed, 25 Sep 2013 02:21:56 +0000 Subject: [PATCH] (mess) pc: mc1502 fdc reset fix [shattered] --- src/mess/drivers/pc.c | 8 +++++++- src/mess/machine/pc.c | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mess/drivers/pc.c b/src/mess/drivers/pc.c index 60d3dc3c837..856e4048d3a 100644 --- a/src/mess/drivers/pc.c +++ b/src/mess/drivers/pc.c @@ -157,11 +157,17 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(mc1502_io, AS_IO, 8, pc_state ) AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE("pic8259", pic8259_device, read, write) - AM_RANGE(0x0028, 0x0028) AM_DEVREADWRITE("upd8251", i8251_device, data_r, data_w) // not working yet + AM_RANGE(0x0028, 0x0028) AM_DEVREADWRITE("upd8251", i8251_device, data_r, data_w) // not working yet AM_RANGE(0x0029, 0x0029) AM_DEVREADWRITE("upd8251", i8251_device, status_r, control_w) AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) + // BIOS 5.31, 5.33 + AM_RANGE(0x004c, 0x004c) AM_READWRITE(mc1502_wd17xx_aux_r, mc1502_wd17xx_aux_w) + AM_RANGE(0x004d, 0x004d) AM_READ(mc1502_wd17xx_motor_r) + AM_RANGE(0x004e, 0x004e) AM_READ(mc1502_wd17xx_drq_r) // blocking read! + AM_RANGE(0x0048, 0x004b) AM_DEVREADWRITE("vg93", fd1793_t, read, write) AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) AM_RANGE(0x0068, 0x006B) AM_DEVREADWRITE("ppi8255n2", i8255_device, read, write) // keyboard poll + // BIOS 5.0, 5.2 AM_RANGE(0x0100, 0x0100) AM_READWRITE(mc1502_wd17xx_aux_r, mc1502_wd17xx_aux_w) AM_RANGE(0x0108, 0x0108) AM_READ(mc1502_wd17xx_drq_r) // blocking read! AM_RANGE(0x010a, 0x010a) AM_READ(mc1502_wd17xx_motor_r) diff --git a/src/mess/machine/pc.c b/src/mess/machine/pc.c index 33e9d58c5b3..1e8e4a7e965 100644 --- a/src/mess/machine/pc.c +++ b/src/mess/machine/pc.c @@ -977,8 +977,8 @@ READ8_MEMBER(pc_state::mc1502_kppi_portc_r) data |= m_centronics->fault_r() << 4; data |= m_centronics->pe_r() << 5; - data |= m_centronics->busy_r() << 6; - data |= m_centronics->ack_r() << 7; + data |= m_centronics->ack_r() << 6; + data |= m_centronics->busy_r() << 7; return data; } @@ -1141,7 +1141,7 @@ I8255_INTERFACE( mc1502_ppi8255_interface_2 ) DEVCB_NULL, DEVCB_NULL, DEVCB_DRIVER_MEMBER(pc_state,mc1502_kppi_portb_w), - DEVCB_NULL, + DEVCB_DRIVER_MEMBER(pc_state,mc1502_kppi_portc_r), DEVCB_DRIVER_MEMBER(pc_state,mc1502_kppi_portc_w) }; @@ -1289,7 +1289,7 @@ WRITE8_MEMBER(pc_state::mc1502_wd17xx_aux_w) fdc->set_floppy(floppy); // master reset - if(data & 1) + if((data & 1) == 0) fdc->reset(); // SIDE ONE