From 12cfccb6cfa4da110707595a2052e58daccd9003 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 10 May 2023 23:16:47 -0400 Subject: x68k.cpp: Hook up SCSI DMA channel --- src/mame/sharp/x68k.cpp | 11 ++++++++--- src/mame/sharp/x68k.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mame/sharp/x68k.cpp b/src/mame/sharp/x68k.cpp index 0a365e52c60..c71c9babaa3 100644 --- a/src/mame/sharp/x68k.cpp +++ b/src/mame/sharp/x68k.cpp @@ -979,9 +979,10 @@ WRITE_LINE_MEMBER(x68ksupr_state::scsi_irq) } } -WRITE_LINE_MEMBER(x68ksupr_state::scsi_drq) +void x68ksupr_state::scsi_unknown_w(uint8_t data) { - // TODO + // Documentation claims SSTS register is read-only, but x68030 boot code writes #$05 to this address anyway. + // Is this an undocumented MB89352 feature, an ASIC register, an original code bug or a bad dump? } void x68k_state::x68k_base_map(address_map &map) @@ -1051,6 +1052,7 @@ void x68030_state::x68030_map(address_map &map) map(0xe92000, 0xe92003).r(m_okim6258, FUNC(okim6258_device::status_r)).umask32(0x00ff00ff).w(FUNC(x68030_state::adpcm_w)).umask32(0x00ff00ff); map(0xe96020, 0xe9603f).m(m_scsictrl, FUNC(mb89352_device::map)).umask32(0x00ff00ff); + map(0xe9602d, 0xe9602d).w(FUNC(x68030_state::scsi_unknown_w)); map(0xea0000, 0xea1fff).noprw();//.rw(FUNC(x68030_state::exp_r), FUNC(x68030_state::exp_w)); // external SCSI ROM and controller map(0xeafa80, 0xeafa8b).rw(FUNC(x68030_state::areaset_r), FUNC(x68030_state::enh_areaset_w)); map(0xfc0000, 0xfdffff).rom(); // internal SCSI ROM @@ -1385,9 +1387,12 @@ void x68ksupr_state::x68ksupr_base(machine_config &config) spc.set_clock(40_MHz_XTAL / 8); spc.out_irq_callback().set(*this, FUNC(x68ksupr_state::scsi_irq)); - spc.out_dreq_callback().set(*this, FUNC(x68ksupr_state::scsi_drq)); + spc.out_dreq_callback().set(m_hd63450, FUNC(hd63450_device::drq1_w)); }); + m_hd63450->dma_read<1>().set("scsi:7:spc", FUNC(mb89352_device::dma_r)); + m_hd63450->dma_write<1>().set("scsi:7:spc", FUNC(mb89352_device::dma_w)); + VICON(config, m_crtc, 38.86363_MHz_XTAL); m_crtc->set_clock_69m(69.55199_MHz_XTAL); m_crtc->set_screen("screen"); diff --git a/src/mame/sharp/x68k.h b/src/mame/sharp/x68k.h index 96f02ebf1c4..0970e6c3257 100644 --- a/src/mame/sharp/x68k.h +++ b/src/mame/sharp/x68k.h @@ -321,7 +321,7 @@ public: protected: DECLARE_WRITE_LINE_MEMBER(scsi_irq); - DECLARE_WRITE_LINE_MEMBER(scsi_drq); + void scsi_unknown_w(uint8_t data); required_device m_scsictrl; -- cgit v1.2.3