summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/st2xxx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6502/st2xxx.cpp')
-rw-r--r--src/devices/cpu/m6502/st2xxx.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/devices/cpu/m6502/st2xxx.cpp b/src/devices/cpu/m6502/st2xxx.cpp
index 41327c00267..45200e02a27 100644
--- a/src/devices/cpu/m6502/st2xxx.cpp
+++ b/src/devices/cpu/m6502/st2xxx.cpp
@@ -69,6 +69,10 @@ st2xxx_device::st2xxx_device(const machine_config &mconfig, device_type type, co
, m_lpwm(0)
, m_lcd_ireq(0)
, m_lcd_timer(nullptr)
+ , m_sctr(0)
+ , m_sckr(0)
+ , m_ssr(0)
+ , m_smod(0)
, m_uctr(0)
, m_usr(0)
, m_irctr(0)
@@ -186,6 +190,14 @@ void st2xxx_device::save_common_registers()
save_item(NAME(m_lfra));
save_item(NAME(m_lac));
save_item(NAME(m_lpwm));
+ if (st2xxx_has_spi())
+ {
+ save_item(NAME(m_sctr));
+ save_item(NAME(m_sckr));
+ save_item(NAME(m_ssr));
+ if (st2xxx_spi_iis())
+ save_item(NAME(m_smod));
+ }
if (st2xxx_uctr_mask() != 0)
{
save_item(NAME(m_uctr));
@@ -246,6 +258,12 @@ void st2xxx_device::device_reset()
m_lpwm = 0;
m_lcd_timer->adjust(attotime::never);
+ // reset SPI
+ m_sctr = 0;
+ m_sckr = 0;
+ m_ssr = 0;
+ m_smod = 0;
+
// reset UART and BRG
m_uctr = 0;
m_usr = BIT(st2xxx_uctr_mask(), 4) ? 0x01 : 0;
@@ -758,6 +776,51 @@ void st2xxx_device::lpwm_w(u8 data)
m_lpwm = data & st2xxx_lpwm_mask();
}
+u8 st2xxx_device::sctr_r()
+{
+ return m_sctr;
+}
+
+void st2xxx_device::sctr_w(u8 data)
+{
+ // TXEMP on wakeup?
+ if (!BIT(m_sctr, 7) && BIT(data, 7))
+ m_ssr |= 0x20;
+
+ m_sctr = data;
+}
+
+u8 st2xxx_device::sckr_r()
+{
+ return m_sckr | 0x80;
+}
+
+void st2xxx_device::sckr_w(u8 data)
+{
+ m_sckr = data & 0x7f;
+}
+
+u8 st2xxx_device::ssr_r()
+{
+ return m_ssr | 0x88;
+}
+
+void st2xxx_device::ssr_w(u8 data)
+{
+ // Write any value to clear
+ m_ssr = 0;
+}
+
+u8 st2xxx_device::smod_r()
+{
+ return m_smod | 0xf0;
+}
+
+void st2xxx_device::smod_w(u8 data)
+{
+ m_smod = data & 0x0f;
+}
+
u8 st2xxx_device::uctr_r()
{
return m_uctr | ~st2xxx_uctr_mask();