diff options
author | 2021-06-25 16:03:41 -0500 | |
---|---|---|
committer | 2021-06-25 16:03:41 -0500 | |
commit | 531f9febd8b4600ad90b011980f90b7378a79883 (patch) | |
tree | b5514e77cc605b2fb9def3d6c0324d9d0b50b705 | |
parent | 92a472a2ee71180d078f7f85c97d094a68ae0921 (diff) |
vis: make memcard writing work
-rw-r--r-- | src/devices/machine/ds6417.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/vis.cpp | 25 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/devices/machine/ds6417.cpp b/src/devices/machine/ds6417.cpp index ef359d9ffd1..4a1128c2fe1 100644 --- a/src/devices/machine/ds6417.cpp +++ b/src/devices/machine/ds6417.cpp @@ -166,7 +166,7 @@ WRITE_LINE_MEMBER( ds6417_device::clock_w ) } m_start = true; - fseek(m_addr & 0x7fff, SEEK_SET); + fseek(m_addr & 0x3fff, SEEK_SET); break; } } diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index ab16dcf2f3e..db4c5952050 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -780,13 +780,23 @@ uint8_t vis_state::memcard_r(offs_t offset) { if(offset) { - if((m_cardreg & 0x18) == 0x18) + if(m_cardreg & 0x10) { if(m_cardcnt == 8) return 0; - m_card->clock_w(1); - m_card->clock_w(0); - m_cardval = (m_cardval >> 1) | (m_card->data_r() ? 0x80 : 0); + if(m_cardreg & 8) + { + m_card->clock_w(1); + m_card->clock_w(0); + m_cardval = (m_cardval >> 1) | (m_card->data_r() ? 0x80 : 0); + } + else + { + m_card->clock_w(0); + m_card->data_w(BIT(m_cardval, 0)); + m_card->clock_w(1); + m_cardval >>= 1; + } m_cardcnt++; return 0x80; } @@ -803,14 +813,19 @@ void vis_state::memcard_w(offs_t offset, uint8_t data) { if(offset) { - if((data & 0x18) != 0x18) + if(!(data & 0x10) && !(m_cardreg & 0x10)) { m_card->data_w(BIT(data, 1)); m_card->clock_w(BIT(data, 0)); m_card->reset_w(!BIT(data, 2)); } m_cardreg = data; + m_cardcnt = data & 8 ? 0 : 8; + } + else + { m_cardcnt = 0; + m_cardval = data; } } |