From 524439907ac49927d6310e8d4c4ec43841bc47a2 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 9 May 2020 17:15:46 +0200 Subject: [PATCH] 6801: tcsr upper 3 bits are read-only (nw) --- src/devices/cpu/m6800/m6801.cpp | 8 +++++--- src/devices/cpu/m6800/m6801.h | 3 +-- src/mame/drivers/psion.cpp | 15 --------------- src/mame/includes/psion.h | 2 -- 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/devices/cpu/m6800/m6801.cpp b/src/devices/cpu/m6800/m6801.cpp index e279137f86e..a2c036825f4 100644 --- a/src/devices/cpu/m6800/m6801.cpp +++ b/src/devices/cpu/m6800/m6801.cpp @@ -1352,10 +1352,10 @@ uint8_t hd6301x_cpu_device::p7_data_r() void hd6301x_cpu_device::p7_data_w(uint8_t data) { - LOGPORT("Port 7 Data Register: %02x\n", data); - data &= 0x1f; + LOGPORT("Port 7 Data Register: %02x\n", data); + m_portx_data[2] = data; m_out_portx_func[2](0, m_portx_data[2], 0x1f); } @@ -1369,9 +1369,11 @@ uint8_t m6801_cpu_device::tcsr_r() void m6801_cpu_device::tcsr_w(uint8_t data) { + data &= 0x1f; + LOGTIMER("Timer Control and Status Register: %02x\n", data); - m_tcsr = data; + m_tcsr = data | (m_tcsr & 0xe0); m_pending_tcsr &= m_tcsr; modified_tcsr(); if( !(m_cc & 0x10) ) diff --git a/src/devices/cpu/m6800/m6801.h b/src/devices/cpu/m6800/m6801.h index b9d65bb9d02..ecb34ccf65a 100644 --- a/src/devices/cpu/m6800/m6801.h +++ b/src/devices/cpu/m6800/m6801.h @@ -91,10 +91,9 @@ protected: uint8_t p4_data_r(); void p4_data_w(uint8_t data); -public: // FIXME: psion.cpp accesses this +protected: uint8_t tcsr_r(); void tcsr_w(uint8_t data); -protected: uint8_t ch_r(); uint8_t cl_r(); void ch_w(uint8_t data); diff --git a/src/mame/drivers/psion.cpp b/src/mame/drivers/psion.cpp index 0f67945d5ff..1b941b19d11 100644 --- a/src/mame/drivers/psion.cpp +++ b/src/mame/drivers/psion.cpp @@ -76,19 +76,6 @@ uint8_t psion_state::port2_r() return m_pack1->data_r() | m_pack2->data_r(); } -void psion_state::tcsr_w(uint8_t data) -{ - m_tcsr_value = data; - m_maincpu->tcsr_w(data); -} - -uint8_t psion_state::tcsr_r() -{ - if (!machine().side_effects_disabled()) - m_maincpu->tcsr_w(m_tcsr_value); - return m_maincpu->tcsr_r(); -} - uint8_t psion_state::rcp5c_r() { return (m_maincpu->rcr_r()&0x7f) | (m_stby_pwr<<7); @@ -247,7 +234,6 @@ void psion_state::psion_int_reg(address_map &map) { // FIXME: this should all be made internal to the CPU device map(0x0000, 0x001f).m(m_maincpu, FUNC(hd6301x_cpu_device::hd6301x_io)); - map(0x0008, 0x0008).rw(FUNC(psion_state::tcsr_r), FUNC(psion_state::tcsr_w)); map(0x0014, 0x0014).r(FUNC(psion_state::rcp5c_r)); } @@ -496,7 +482,6 @@ void psion_state::machine_start() save_item(NAME(m_kb_counter)); save_item(NAME(m_enable_nmi)); - save_item(NAME(m_tcsr_value)); save_item(NAME(m_stby_pwr)); save_item(NAME(m_pulse)); save_item(NAME(m_rom_bank)); diff --git a/src/mame/includes/psion.h b/src/mame/includes/psion.h index ee852094b87..f0f6f970ae3 100644 --- a/src/mame/includes/psion.h +++ b/src/mame/includes/psion.h @@ -85,8 +85,6 @@ protected: void update_banks(); void port2_w(offs_t offset, uint8_t data, uint8_t ddr); uint8_t port2_r(); - void tcsr_w(uint8_t data); - uint8_t tcsr_r(); uint8_t rcp5c_r(); uint8_t port5_r(); void port6_w(uint8_t data);