summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2021-06-25 16:03:41 -0500
committer cracyc <cracyc@users.noreply.github.com>2021-06-25 16:03:41 -0500
commit531f9febd8b4600ad90b011980f90b7378a79883 (patch)
treeb5514e77cc605b2fb9def3d6c0324d9d0b50b705
parent92a472a2ee71180d078f7f85c97d094a68ae0921 (diff)
vis: make memcard writing work
-rw-r--r--src/devices/machine/ds6417.cpp2
-rw-r--r--src/mame/drivers/vis.cpp25
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;
}
}