summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2026-05-05 07:05:47 -0400
committer arbee <rb6502@users.noreply.github.com>2026-05-05 07:05:47 -0400
commitaaacdb9962ca1bb7a0ff60b04ffc7c292f58981a (patch)
tree03fce8a3e64fe0cdaf186ac75ca228b0e895756d
parentcc5d6369f6e9c44155640b3a4342a8bf3c6e4839 (diff)
machine/am9517a.cpp: Implemented V5x DMAU soft reset. [R. Belmont]
- Fixes mpc2000xl reading SCSI CD-ROMs
-rw-r--r--src/devices/machine/am9517a.cpp19
-rw-r--r--src/devices/machine/am9517a.h2
2 files changed, 16 insertions, 5 deletions
diff --git a/src/devices/machine/am9517a.cpp b/src/devices/machine/am9517a.cpp
index c9e8a7b2944..212adaefa6f 100644
--- a/src/devices/machine/am9517a.cpp
+++ b/src/devices/machine/am9517a.cpp
@@ -531,6 +531,11 @@ void am9517a_device::device_start()
void am9517a_device::device_reset()
{
+ soft_reset();
+}
+
+void am9517a_device::soft_reset()
+{
m_state = STATE_SI;
m_command = 0;
m_status &= 0xf0;
@@ -548,7 +553,6 @@ void am9517a_device::device_reset()
set_dack();
}
-
//-------------------------------------------------
// execute_run -
//-------------------------------------------------
@@ -1119,10 +1123,15 @@ void v5x_dmau_device::write(offs_t offset, uint8_t data)
switch (offset)
{
case 0x00: // Initialise
- // TODO: reset (bit 0)
- //m_buswidth = data & 0x02;
- //if (data & 0x01)
- // soft_reset();
+ // bit 0 = soft reset
+ if (BIT(data, 0))
+ {
+ soft_reset();
+
+ m_selected_channel = 0;
+ m_base = 0;
+ }
+
LOG("DMA: Initialise [%02x]\n", data);
break;
case 0x01: // Channel
diff --git a/src/devices/machine/am9517a.h b/src/devices/machine/am9517a.h
index af8361892b6..f1f0dd5b9dd 100644
--- a/src/devices/machine/am9517a.h
+++ b/src/devices/machine/am9517a.h
@@ -93,6 +93,8 @@ protected:
virtual int transfer_size(int const channel) const { return 1; }
+ virtual void soft_reset();
+
int m_icount;
uint32_t m_address_mask;