summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-12-29 08:35:50 -0500
committer AJR <ajrhacker@users.noreply.github.com>2020-12-29 08:36:38 -0500
commitf8d6d4a82316b061561c98753616183b2cfd4d0b (patch)
tree76dbdcd21dec6c28eb0b5e76260d727f501553f4
parent6ed7f0d90b31fd4b616c08159abb2bdf1ec078ff (diff)
v40, v50, v53: Allow configuration registers to be read back
-rw-r--r--src/devices/cpu/nec/v5x.cpp81
-rw-r--r--src/devices/cpu/nec/v5x.h9
2 files changed, 72 insertions, 18 deletions
diff --git a/src/devices/cpu/nec/v5x.cpp b/src/devices/cpu/nec/v5x.cpp
index 1e4035c9b3b..8ce9a18ad1e 100644
--- a/src/devices/cpu/nec/v5x.cpp
+++ b/src/devices/cpu/nec/v5x.cpp
@@ -40,6 +40,11 @@ DEFINE_DEVICE_TYPE(V50, v50_device, "v50", "NEC V50")
DEFINE_DEVICE_TYPE(V53, v53_device, "v53", "NEC V53")
DEFINE_DEVICE_TYPE(V53A, v53a_device, "v53a", "NEC V53A")
+u8 device_v5x_interface::SULA_r()
+{
+ return m_SULA;
+}
+
void device_v5x_interface::SULA_w(u8 data)
{
if (VERBOSE)
@@ -48,6 +53,11 @@ void device_v5x_interface::SULA_w(u8 data)
install_peripheral_io();
}
+u8 device_v5x_interface::TULA_r()
+{
+ return m_TULA;
+}
+
void device_v5x_interface::TULA_w(u8 data)
{
if (VERBOSE)
@@ -56,6 +66,11 @@ void device_v5x_interface::TULA_w(u8 data)
install_peripheral_io();
}
+u8 device_v5x_interface::IULA_r()
+{
+ return m_IULA;
+}
+
void device_v5x_interface::IULA_w(u8 data)
{
if (VERBOSE)
@@ -64,6 +79,11 @@ void device_v5x_interface::IULA_w(u8 data)
install_peripheral_io();
}
+u8 device_v5x_interface::DULA_r()
+{
+ return m_DULA;
+}
+
void device_v5x_interface::DULA_w(u8 data)
{
if (VERBOSE)
@@ -72,6 +92,11 @@ void device_v5x_interface::DULA_w(u8 data)
install_peripheral_io();
}
+u8 device_v5x_interface::OPHA_r()
+{
+ return m_OPHA;
+}
+
void device_v5x_interface::OPHA_w(u8 data)
{
if (VERBOSE)
@@ -83,14 +108,24 @@ void device_v5x_interface::OPHA_w(u8 data)
m_OPHA = data;
}
+u8 device_v5x_interface::OPSEL_r()
+{
+ return m_OPSEL;
+}
+
void device_v5x_interface::OPSEL_w(u8 data)
{
if (VERBOSE)
device().logerror("OPSEL_w %02x\n", data);
- m_OPSEL = data;
+ m_OPSEL = data & 0x0f;
install_peripheral_io();
}
+u8 device_v5x_interface::TCKS_r()
+{
+ return m_TCKS;
+}
+
void device_v5x_interface::TCKS_w(u8 data)
{
m_TCKS = data;
@@ -265,6 +300,11 @@ void v50_base_device::io_write_word(offs_t a, u16 v)
}
+u8 v50_base_device::OPCN_r()
+{
+ return m_OPCN;
+}
+
void v50_base_device::OPCN_w(u8 data)
{
// bit 7: unused
@@ -416,7 +456,7 @@ void v50_device::install_peripheral_io()
void v50_base_device::internal_port_map(address_map &map)
{
- map(0xfff0, 0xfff0).w(FUNC(v50_base_device::TCKS_w));
+ map(0xfff0, 0xfff0).rw(FUNC(v50_base_device::TCKS_r), FUNC(v50_base_device::TCKS_w));
map(0xfff2, 0xfff2).w(FUNC(v50_base_device::RFC_w));
@@ -424,13 +464,13 @@ void v50_base_device::internal_port_map(address_map &map)
map(0xfff5, 0xfff5).w(FUNC(v50_base_device::WCY1_w));
map(0xfff6, 0xfff6).w(FUNC(v50_base_device::WCY2_w));
- map(0xfff8, 0xfff8).w(FUNC(v50_base_device::SULA_w));
- map(0xfff9, 0xfff9).w(FUNC(v50_base_device::TULA_w));
- map(0xfffa, 0xfffa).w(FUNC(v50_base_device::IULA_w));
- map(0xfffb, 0xfffb).w(FUNC(v50_base_device::DULA_w));
- map(0xfffc, 0xfffc).w(FUNC(v50_base_device::OPHA_w));
- map(0xfffd, 0xfffd).w(FUNC(v50_base_device::OPSEL_w));
- map(0xfffe, 0xfffe).w(FUNC(v50_base_device::OPCN_w));
+ map(0xfff8, 0xfff8).rw(FUNC(v50_base_device::SULA_r), FUNC(v50_base_device::SULA_w));
+ map(0xfff9, 0xfff9).rw(FUNC(v50_base_device::TULA_r), FUNC(v50_base_device::TULA_w));
+ map(0xfffa, 0xfffa).rw(FUNC(v50_base_device::IULA_r), FUNC(v50_base_device::IULA_w));
+ map(0xfffb, 0xfffb).rw(FUNC(v50_base_device::DULA_r), FUNC(v50_base_device::DULA_w));
+ map(0xfffc, 0xfffc).rw(FUNC(v50_base_device::OPHA_r), FUNC(v50_base_device::OPHA_w));
+ map(0xfffd, 0xfffd).rw(FUNC(v50_base_device::OPSEL_r), FUNC(v50_base_device::OPSEL_w));
+ map(0xfffe, 0xfffe).rw(FUNC(v50_base_device::OPCN_r), FUNC(v50_base_device::OPCN_w));
}
void v50_base_device::execute_set_input(int irqline, int state)
@@ -550,6 +590,11 @@ void v53_device::io_write_word(offs_t a, u16 v)
}
+u8 v53_device::SCTL_r()
+{
+ return m_SCTL;
+}
+
void v53_device::SCTL_w(u8 data)
{
// bit 7: unused
@@ -562,7 +607,7 @@ void v53_device::SCTL_w(u8 data)
// bit 0: Onboard pripheral I/O maps to 8-bit boundaries? (otherwise 16-bit)
LOG("SCTL_w %02x\n", data);
- m_SCTL = data;
+ m_SCTL = data & 0x1f;
install_peripheral_io();
}
@@ -703,7 +748,7 @@ void v53_device::internal_port_map(address_map &map)
map(0xffec, 0xffec).w(FUNC(v53_device::WCY0_w)); // waitstate control
map(0xffed, 0xffed).w(FUNC(v53_device::WAC_w)); // waitstate control
// 0xffee-0xffef reserved
- map(0xfff0, 0xfff0).w(FUNC(v53_device::TCKS_w)); // timer clocks
+ map(0xfff0, 0xfff0).rw(FUNC(v53_device::TCKS_r), FUNC(v53_device::TCKS_w)); // timer clocks
map(0xfff1, 0xfff1).w(FUNC(v53_device::SBCR_w)); // internal clock divider, halt behavior etc.
map(0xfff2, 0xfff2).w(FUNC(v53_device::RFC_w)); // ram refresh control
map(0xfff3, 0xfff3).w(FUNC(v53_device::WMB1_w)); // waitstate control
@@ -711,13 +756,13 @@ void v53_device::internal_port_map(address_map &map)
map(0xfff5, 0xfff5).w(FUNC(v53_device::WCY3_w)); // waitstate control
map(0xfff6, 0xfff6).w(FUNC(v53_device::WCY4_w)); // waitstate control
// 0xfff6 reserved
- map(0xfff8, 0xfff8).w(FUNC(v53_device::SULA_w)); // scu mapping
- map(0xfff9, 0xfff9).w(FUNC(v53_device::TULA_w)); // tcu mapping
- map(0xfffa, 0xfffa).w(FUNC(v53_device::IULA_w)); // icu mapping
- map(0xfffb, 0xfffb).w(FUNC(v53_device::DULA_w)); // dmau mapping
- map(0xfffc, 0xfffc).w(FUNC(v53_device::OPHA_w)); // peripheral mapping (upper bits, common)
- map(0xfffd, 0xfffd).w(FUNC(v53_device::OPSEL_w)); // peripheral enabling
- map(0xfffe, 0xfffe).w(FUNC(v53_device::SCTL_w)); // peripheral configuration (& byte / word mapping)
+ map(0xfff8, 0xfff8).rw(FUNC(v53_device::SULA_r), FUNC(v53_device::SULA_w)); // scu mapping
+ map(0xfff9, 0xfff9).rw(FUNC(v53_device::TULA_r), FUNC(v53_device::TULA_w)); // tcu mapping
+ map(0xfffa, 0xfffa).rw(FUNC(v53_device::IULA_r), FUNC(v53_device::IULA_w)); // icu mapping
+ map(0xfffb, 0xfffb).rw(FUNC(v53_device::DULA_r), FUNC(v53_device::DULA_w)); // dmau mapping
+ map(0xfffc, 0xfffc).rw(FUNC(v53_device::OPHA_r), FUNC(v53_device::OPHA_w)); // peripheral mapping (upper bits, common)
+ map(0xfffd, 0xfffd).rw(FUNC(v53_device::OPSEL_r), FUNC(v53_device::OPSEL_w)); // peripheral enabling
+ map(0xfffe, 0xfffe).rw(FUNC(v53_device::SCTL_r), FUNC(v53_device::SCTL_w)); // peripheral configuration (& byte / word mapping)
// 0xffff reserved
}
diff --git a/src/devices/cpu/nec/v5x.h b/src/devices/cpu/nec/v5x.h
index 8b19e1dd8b4..f82c50223e0 100644
--- a/src/devices/cpu/nec/v5x.h
+++ b/src/devices/cpu/nec/v5x.h
@@ -85,6 +85,7 @@ protected:
void WCY1_w(u8 data) {}
void WCY0_w(u8 data) {}
void WAC_w(u8 data) {}
+ u8 TCKS_r();
void TCKS_w(u8 data);
void SBCR_w(u8 data) {}
void RFC_w(u8 data) {}
@@ -92,11 +93,17 @@ protected:
void WCY2_w(u8 data) {}
void WCY3_w(u8 data) {}
void WCY4_w(u8 data) {}
+ u8 SULA_r();
void SULA_w(u8 data);
+ u8 TULA_r();
void TULA_w(u8 data);
+ u8 IULA_r();
void IULA_w(u8 data);
+ u8 DULA_r();
void DULA_w(u8 data);
+ u8 OPHA_r();
void OPHA_w(u8 data);
+ u8 OPSEL_r();
void OPSEL_w(u8 data);
u8 get_pic_ack() { return 0; }
DECLARE_WRITE_LINE_MEMBER(internal_irq_w);
@@ -167,6 +174,7 @@ protected:
void internal_port_map(address_map &map);
+ u8 OPCN_r();
void OPCN_w(u8 data);
private:
@@ -244,6 +252,7 @@ protected:
void internal_port_map(address_map &map);
virtual void install_peripheral_io() override;
+ u8 SCTL_r();
void SCTL_w(u8 data);
private: