summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/s2650
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/s2650')
-rw-r--r--src/devices/cpu/s2650/s2650.cpp27
-rw-r--r--src/devices/cpu/s2650/s2650.h5
2 files changed, 19 insertions, 13 deletions
diff --git a/src/devices/cpu/s2650/s2650.cpp b/src/devices/cpu/s2650/s2650.cpp
index 9e36a1c8ae1..ccdc5694cd2 100644
--- a/src/devices/cpu/s2650/s2650.cpp
+++ b/src/devices/cpu/s2650/s2650.cpp
@@ -36,7 +36,7 @@ s2650_device::s2650_device(const machine_config &mconfig, const char *tag, devic
, m_sense_handler(*this)
, m_flag_handler(*this), m_intack_handler(*this)
, m_ppc(0), m_page(0), m_iar(0), m_ea(0), m_psl(0), m_psu(0), m_r(0)
- , m_halt(0), m_ir(0), m_irq_state(0), m_icount(0), m_cache(nullptr)
+ , m_halt(0), m_ir(0), m_irq_state(0), m_icount(0)
, m_debugger_temp(0)
{
memset(m_reg, 0x00, sizeof(m_reg));
@@ -167,7 +167,7 @@ static const int S2650_relative[0x100] =
* RDMEM
* read memory byte from addr
***************************************************************/
-#define RDMEM(addr) space(AS_PROGRAM).read_byte(addr)
+#define RDMEM(addr) m_program.read_byte(addr)
inline void s2650_device::set_psu(uint8_t new_val)
{
@@ -264,7 +264,7 @@ inline int s2650_device::check_irq_line()
***************************************************************/
inline uint8_t s2650_device::ROP()
{
- uint8_t result = m_cache->read_byte(m_page + m_iar);
+ uint8_t result = m_cprogram.read_byte(m_page + m_iar);
m_iar = (m_iar + 1) & PMSK;
return result;
}
@@ -275,7 +275,7 @@ inline uint8_t s2650_device::ROP()
***************************************************************/
inline uint8_t s2650_device::ARG()
{
- uint8_t result = m_cache->read_byte(m_page + m_iar);
+ uint8_t result = m_cprogram.read_byte(m_page + m_iar);
m_iar = (m_iar + 1) & PMSK;
return result;
}
@@ -561,7 +561,7 @@ inline uint8_t s2650_device::ARG()
* Store source register to memory addr (CC unchanged)
***************************************************************/
#define M_STR(address,source) \
- space(AS_PROGRAM).write_byte(address, source)
+ m_program.write_byte(address, source)
/***************************************************************
* M_AND
@@ -824,7 +824,10 @@ void s2650_device::device_start()
m_flag_handler.resolve_safe();
m_intack_handler.resolve_safe(0x00);
- m_cache = space(AS_PROGRAM).cache<0, 0, ENDIANNESS_BIG>();
+ space(AS_PROGRAM).cache(m_cprogram);
+ space(AS_PROGRAM).specific(m_program);
+ space(AS_DATA).specific(m_data);
+ space(AS_IO).specific(m_io);
save_item(NAME(m_ppc));
save_item(NAME(m_page));
@@ -1124,7 +1127,7 @@ void s2650_device::execute_run()
case 0x32: /* REDC,2 */
case 0x33: /* REDC,3 */
m_icount -= 6;
- m_reg[m_r] = space(AS_DATA).read_byte(S2650_CTRL_PORT);
+ m_reg[m_r] = m_data.read_byte(S2650_CTRL_PORT);
SET_CC( m_reg[m_r] );
break;
@@ -1214,7 +1217,7 @@ void s2650_device::execute_run()
case 0x56: /* REDE,2 v */
case 0x57: /* REDE,3 v */
m_icount -= 9;
- m_reg[m_r] = space(AS_IO).read_byte(ARG());
+ m_reg[m_r] = m_io.read_byte(ARG());
SET_CC(m_reg[m_r]);
break;
@@ -1273,7 +1276,7 @@ void s2650_device::execute_run()
case 0x72: /* REDD,2 */
case 0x73: /* REDD,3 */
m_icount -= 6;
- m_reg[m_r] = space(AS_DATA).read_byte(S2650_DATA_PORT);
+ m_reg[m_r] = m_data.read_byte(S2650_DATA_PORT);
SET_CC(m_reg[m_r]);
break;
@@ -1429,7 +1432,7 @@ void s2650_device::execute_run()
case 0xb2: /* WRTC,2 */
case 0xb3: /* WRTC,3 */
m_icount -= 6;
- space(AS_DATA).write_byte(S2650_CTRL_PORT,m_reg[m_r]);
+ m_data.write_byte(S2650_CTRL_PORT,m_reg[m_r]);
break;
case 0xb4: /* TPSU */
@@ -1515,7 +1518,7 @@ void s2650_device::execute_run()
case 0xd6: /* WRTE,2 v */
case 0xd7: /* WRTE,3 v */
m_icount -= 9;
- space(AS_IO).write_byte( ARG(), m_reg[m_r] );
+ m_io.write_byte( ARG(), m_reg[m_r] );
break;
case 0xd8: /* BIRR,0 (*)a */
@@ -1573,7 +1576,7 @@ void s2650_device::execute_run()
case 0xf2: /* WRTD,2 */
case 0xf3: /* WRTD,3 */
m_icount -= 6;
- space(AS_DATA).write_byte(S2650_DATA_PORT, m_reg[m_r]);
+ m_data.write_byte(S2650_DATA_PORT, m_reg[m_r]);
break;
case 0xf4: /* TMI,0 v */
diff --git a/src/devices/cpu/s2650/s2650.h b/src/devices/cpu/s2650/s2650.h
index 1bd42fa535c..008ea0bb31f 100644
--- a/src/devices/cpu/s2650/s2650.h
+++ b/src/devices/cpu/s2650/s2650.h
@@ -84,7 +84,10 @@ private:
uint8_t m_irq_state;
int m_icount;
- memory_access_cache<0, 0, ENDIANNESS_BIG> *m_cache;
+ memory_access<15, 0, 0, ENDIANNESS_BIG>::cache m_cprogram;
+ memory_access<15, 0, 0, ENDIANNESS_BIG>::specific m_program;
+ memory_access< 1, 0, 0, ENDIANNESS_BIG>::specific m_data;
+ memory_access< 8, 0, 0, ENDIANNESS_BIG>::specific m_io;
// For debugger
uint16_t m_debugger_temp;