diff options
| author | 2026-05-05 07:05:47 -0400 | |
|---|---|---|
| committer | 2026-05-05 07:05:47 -0400 | |
| commit | aaacdb9962ca1bb7a0ff60b04ffc7c292f58981a (patch) | |
| tree | 03fce8a3e64fe0cdaf186ac75ca228b0e895756d | |
| parent | cc5d6369f6e9c44155640b3a4342a8bf3c6e4839 (diff) | |
machine/am9517a.cpp: Implemented V5x DMAU soft reset. [R. Belmont]
- Fixes mpc2000xl reading SCSI CD-ROMs
| -rw-r--r-- | src/devices/machine/am9517a.cpp | 19 | ||||
| -rw-r--r-- | src/devices/machine/am9517a.h | 2 |
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; |
