summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2013-11-05 01:42:25 +0000
committer smf- <smf-@users.noreply.github.com>2013-11-05 01:42:25 +0000
commita53724ce6351bd6e83e80a4c208083daac10027c (patch)
treea12d3b62bad53a8539ae7b1cc73d864d0849779e
parent7641349eb130be64eba7d86258b0922a44e99d00 (diff)
Fixed mametesters 05353 [smf]
-rw-r--r--src/mess/machine/southbridge.c28
-rw-r--r--src/mess/machine/southbridge.h6
2 files changed, 30 insertions, 4 deletions
diff --git a/src/mess/machine/southbridge.c b/src/mess/machine/southbridge.c
index ce00eb027c3..b5501146c63 100644
--- a/src/mess/machine/southbridge.c
+++ b/src/mess/machine/southbridge.c
@@ -176,6 +176,27 @@ IRQ_CALLBACK_MEMBER(southbridge_device::at_irq_callback)
return m_pic8259_master->inta_r();
}
+/// HACK: the memory system cannot cope with mixing the 8 bit device map from the fdc with a 32 bit handler
+READ8_MEMBER(southbridge_device::ide_read_cs1_r)
+{
+ return m_ide->read_cs1(space, 1, (UINT32) 0xff0000) >> 16;
+}
+
+WRITE8_MEMBER(southbridge_device::ide_write_cs1_w)
+{
+ m_ide->write_cs1(space, 1, (UINT32) data << 16, (UINT32) 0xff0000);
+}
+
+READ8_MEMBER(southbridge_device::ide2_read_cs1_r)
+{
+ return m_ide2->read_cs1(space, 1, (UINT32) 0xff0000) >> 16;
+}
+
+WRITE8_MEMBER(southbridge_device::ide2_write_cs1_w)
+{
+ m_ide2->write_cs1(space, 1, (UINT32) data << 16, (UINT32) 0xff0000);
+}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -195,8 +216,11 @@ void southbridge_device::device_start()
spaceio.install_readwrite_handler(0x00c0, 0x00df, read8_delegate(FUNC(southbridge_device::at_dma8237_2_r),this), write8_delegate(FUNC(southbridge_device::at_dma8237_2_w),this), 0xffffffff);
spaceio.install_readwrite_handler(0x0170, 0x0177, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs0),&(*m_ide2)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs0), &(*m_ide2)),0xffffffff);
spaceio.install_readwrite_handler(0x01f0, 0x01f7, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs0),&(*m_ide)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs0), &(*m_ide)),0xffffffff);
- spaceio.install_readwrite_handler(0x0370, 0x0377, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs1),&(*m_ide2)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs1), &(*m_ide2)),0xffffffff);
- spaceio.install_readwrite_handler(0x03f0, 0x03f7, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs1),&(*m_ide)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs1), &(*m_ide)),0xffffffff);
+// HACK: this works if you take out the (non working) fdc
+// spaceio.install_readwrite_handler(0x0370, 0x0377, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs1),&(*m_ide2)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs1), &(*m_ide2)),0xffffffff);
+// spaceio.install_readwrite_handler(0x03f0, 0x03f7, read32_delegate(FUNC(bus_master_ide_controller_device::read_cs1),&(*m_ide)), write32_delegate(FUNC(bus_master_ide_controller_device::write_cs1), &(*m_ide)),0xffffffff);
+ spaceio.install_readwrite_handler(0x0374, 0x0377, read8_delegate(FUNC(southbridge_device::ide2_read_cs1_r),this), write8_delegate(FUNC(southbridge_device::ide2_write_cs1_w), this),0xff0000);
+ spaceio.install_readwrite_handler(0x03f4, 0x03f7, read8_delegate(FUNC(southbridge_device::ide_read_cs1_r),this), write8_delegate(FUNC(southbridge_device::ide_write_cs1_w), this),0xff0000);
spaceio.nop_readwrite(0x00e0, 0x00ef);
diff --git a/src/mess/machine/southbridge.h b/src/mess/machine/southbridge.h
index 3475109b5bb..c41e82b3585 100644
--- a/src/mess/machine/southbridge.h
+++ b/src/mess/machine/southbridge.h
@@ -96,8 +96,10 @@ public:
DECLARE_WRITE_LINE_MEMBER(pc_dack5_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack6_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack7_w);
- DECLARE_READ32_MEMBER(ide_r);
- DECLARE_WRITE32_MEMBER(ide_w);
+ DECLARE_READ8_MEMBER(ide_read_cs1_r);
+ DECLARE_WRITE8_MEMBER(ide_write_cs1_w);
+ DECLARE_READ8_MEMBER(ide2_read_cs1_r);
+ DECLARE_WRITE8_MEMBER(ide2_write_cs1_w);
DECLARE_READ8_MEMBER(at_dma8237_2_r);
DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
DECLARE_READ8_MEMBER(at_keybc_r);