summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tlcs90/tlcs90.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tlcs90/tlcs90.cpp')
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.cpp172
1 files changed, 86 insertions, 86 deletions
diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp
index 89c03970f24..777ecf3b412 100644
--- a/src/devices/cpu/tlcs90/tlcs90.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90.cpp
@@ -201,22 +201,22 @@ static const char *const cc_names[] = { "f", "lt", "le", "ule", "ov"
#define OPCC( X,CF,CT ) OP( X, CT ) m_cyc_f = (CF*2);
#define OPCC16( X,CF,CT ) OPCC( (X)|OP_16,CF,CT )
-#define BIT8( N,I ) m_mode##N = MODE_BIT8; m_r##N = I;
-#define I8( N,I ) m_mode##N = MODE_I8; m_r##N = I;
-#define D8( N,I ) m_mode##N = MODE_D8; m_r##N = I;
-#define I16( N,I ) m_mode##N = MODE_I16; m_r##N = I;
-#define D16( N,I ) m_mode##N = MODE_D16; m_r##N = I;
-#define R8( N,R ) m_mode##N = MODE_R8; m_r##N = R;
-#define R16( N,R ) m_mode##N = MODE_R16; m_r##N = R;
-#define Q16( N,R ) m_mode##N = MODE_R16; m_r##N = R; if (m_r##N == SP) m_r##N = AF;
-#define MI16( N,I ) m_mode##N = MODE_MI16; m_r##N = I;
-#define MR16( N,R ) m_mode##N = MODE_MR16; m_r##N = R;
-#define MR16D8( N,R,I ) m_mode##N = MODE_MR16D8; m_r##N = R; m_r##N##b = I;
-#define MR16R8( N,R,g ) m_mode##N = MODE_MR16R8; m_r##N = R; m_r##N##b = g;
-#define NONE( N ) m_mode##N = MODE_NONE;
-#define CC( N,cc ) m_mode##N = MODE_CC; m_r##N = cc;
-#define R16D8( N,R,I ) m_mode##N = MODE_R16D8; m_r##N = R; m_r##N##b = I;
-#define R16R8( N,R,g ) m_mode##N = MODE_R16R8; m_r##N = R; m_r##N##b = g;
+#define BIT8( N,I ) m_mode##N = e_mode::BIT8; m_r##N = I;
+#define I8( N,I ) m_mode##N = e_mode::I8; m_r##N = I;
+#define D8( N,I ) m_mode##N = e_mode::D8; m_r##N = I;
+#define I16( N,I ) m_mode##N = e_mode::I16; m_r##N = I;
+#define D16( N,I ) m_mode##N = e_mode::D16; m_r##N = I;
+#define R8( N,R ) m_mode##N = e_mode::R8; m_r##N = R;
+#define R16( N,R ) m_mode##N = e_mode::R16; m_r##N = R;
+#define Q16( N,R ) m_mode##N = e_mode::R16; m_r##N = R; if (m_r##N == SP) m_r##N = AF;
+#define MI16( N,I ) m_mode##N = e_mode::MI16; m_r##N = I;
+#define MR16( N,R ) m_mode##N = e_mode::MR16; m_r##N = R;
+#define MR16D8( N,R,I ) m_mode##N = e_mode::MR16D8; m_r##N = R; m_r##N##b = I;
+#define MR16R8( N,R,g ) m_mode##N = e_mode::MR16R8; m_r##N = R; m_r##N##b = g;
+#define NONE( N ) m_mode##N = e_mode::NONE;
+#define CC( N,cc ) m_mode##N = e_mode::CC; m_r##N = cc;
+#define R16D8( N,R,I ) m_mode##N = e_mode::R16D8; m_r##N = R; m_r##N##b = I;
+#define R16R8( N,R,g ) m_mode##N = e_mode::R16R8; m_r##N = R; m_r##N##b = g;
uint8_t tlcs90_device::RM8 (uint32_t a) { return m_program->read_byte( a ); }
uint16_t tlcs90_device::RM16(uint32_t a) { return RM8(a) | (RM8( (a+1) & 0xffff ) << 8); }
@@ -1017,34 +1017,34 @@ bool tlcs90_device::stream_arg(std::ostream &stream, uint32_t pc, const char *pr
const char *reg_name;
switch ( mode )
{
- case MODE_NONE: return false;
-
- case MODE_BIT8: util::stream_format(stream, "%s%d", pre, r ); return true;
- case MODE_I8: util::stream_format(stream, "%s$%02X", pre, r ); return true;
- case MODE_D8: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7f)-(r&0x80))&0xffff ); return true;
- case MODE_I16: util::stream_format(stream, "%s$%04X", pre, r ); return true;
- case MODE_D16: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7fff)-(r&0x8000))&0xffff ); return true;
- case MODE_MI16:
- reg_name = internal_registers_names(r);
- if (reg_name)
- util::stream_format(stream, "%s(%s)", pre, reg_name);
- else
- util::stream_format(stream, "%s($%04X)", pre, r );
- return true;
- case MODE_R8: util::stream_format(stream, "%s%s", pre, r8_names[r] ); return true;
- case MODE_R16: util::stream_format(stream, "%s%s", pre, r16_names[r] ); return true;
- case MODE_MR16: util::stream_format(stream, "%s(%s)", pre, r16_names[r] ); return true;
-
- case MODE_MR16R8: util::stream_format(stream, "%s(%s+%s)", pre, r16_names[r], r8_names[rb] ); return true;
- case MODE_MR16D8: util::stream_format(stream, "%s(%s%c$%02X)", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
-
- case MODE_CC: util::stream_format(stream, "%s%s", pre, cc_names[r] ); return true;
-
- case MODE_R16R8: util::stream_format(stream, "%s%s+%s", pre, r16_names[r], r8_names[rb] ); return true;
- case MODE_R16D8: util::stream_format(stream, "%s%s%c$%02X", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
-
- default:
- fatalerror("%04x: unimplemented addr mode = %d\n",pc,mode);
+ case e_mode::NONE: return false;
+
+ case e_mode::BIT8: util::stream_format(stream, "%s%d", pre, r ); return true;
+ case e_mode::I8: util::stream_format(stream, "%s$%02X", pre, r ); return true;
+ case e_mode::D8: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7f)-(r&0x80))&0xffff ); return true;
+ case e_mode::I16: util::stream_format(stream, "%s$%04X", pre, r ); return true;
+ case e_mode::D16: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7fff)-(r&0x8000))&0xffff ); return true;
+ case e_mode::MI16:
+ reg_name = internal_registers_names(r);
+ if (reg_name)
+ util::stream_format(stream, "%s(%s)", pre, reg_name);
+ else
+ util::stream_format(stream, "%s($%04X)", pre, r );
+ return true;
+ case e_mode::R8: util::stream_format(stream, "%s%s", pre, r8_names[r] ); return true;
+ case e_mode::R16: util::stream_format(stream, "%s%s", pre, r16_names[r] ); return true;
+ case e_mode::MR16: util::stream_format(stream, "%s(%s)", pre, r16_names[r] ); return true;
+
+ case e_mode::MR16R8: util::stream_format(stream, "%s(%s+%s)", pre, r16_names[r], r8_names[rb] ); return true;
+ case e_mode::MR16D8: util::stream_format(stream, "%s(%s%c$%02X)", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
+
+ case e_mode::CC: util::stream_format(stream, "%s%s", pre, cc_names[r] ); return true;
+
+ case e_mode::R16R8: util::stream_format(stream, "%s%s+%s", pre, r16_names[r], r8_names[rb] ); return true;
+ case e_mode::R16D8: util::stream_format(stream, "%s%s%c$%02X", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
+
+ default:
+ fatalerror("%04x: unimplemented addr mode = %d\n",pc,std::underlying_type_t<e_mode>(mode));
}
// never executed
@@ -1144,53 +1144,53 @@ void tlcs90_device::w16( const uint16_t r, uint16_t value )
#define READ_FN( N ) \
uint8_t tlcs90_device::Read##N##_8() { \
switch ( m_mode##N ) { \
- case MODE_CC: \
- case MODE_BIT8: \
- case MODE_I8: return (uint8_t)m_r##N; \
- case MODE_D8: return (uint8_t)m_r##N; \
- case MODE_R8: return (uint8_t)r8(m_r##N); \
- case MODE_MI16: return RM8(m_r##N); \
- case MODE_MR16R8: return RM8((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b))); \
- case MODE_MR16: \
+ case e_mode::CC: \
+ case e_mode::BIT8: \
+ case e_mode::I8: return (uint8_t)m_r##N; \
+ case e_mode::D8: return (uint8_t)m_r##N; \
+ case e_mode::R8: return (uint8_t)r8(m_r##N); \
+ case e_mode::MI16: return RM8(m_r##N); \
+ case e_mode::MR16R8: return RM8((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b))); \
+ case e_mode::MR16: \
switch( m_r##N ) { \
case IX: return RX8(m_ix.w.l,m_ixbase); \
case IY: return RX8(m_iy.w.l,m_iybase); \
} \
return RM8(r16(m_r##N)); \
- case MODE_MR16D8: \
+ case e_mode::MR16D8: \
switch( m_r##N ) { \
case IX: return RX8((uint16_t)(m_ix.w.l + (int8_t)m_r##N##b),m_ixbase); \
case IY: return RX8((uint16_t)(m_iy.w.l + (int8_t)m_r##N##b),m_iybase); \
} \
return RM8((uint16_t)(r16(m_r##N) + (int8_t)m_r##N##b)); \
default: \
- fatalerror("%04x: unimplemented Read%d_8 mode = %d\n",m_pc.w.l,N,m_mode##N); \
+ fatalerror("%04x: unimplemented Read%d_8 mode = %d\n",m_pc.w.l,N,std::underlying_type_t<e_mode>(m_mode##N)); \
} \
return 0; \
} \
uint16_t tlcs90_device::Read##N##_16() { \
switch ( m_mode##N ) { \
- case MODE_I16: return m_r##N; \
- case MODE_D16: return m_r##N - 1; \
- case MODE_R16: return r16(m_r##N); \
- case MODE_R16D8: return r16(m_r##N) + (int8_t)m_r##N##b; \
- case MODE_R16R8: return r16(m_r##N) + (int8_t)r8(m_r##N##b); \
- case MODE_MI16: return RM16(m_r##N); \
- case MODE_MR16R8: return RM16((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b))); \
- case MODE_MR16: \
+ case e_mode::I16: return m_r##N; \
+ case e_mode::D16: return m_r##N - 1; \
+ case e_mode::R16: return r16(m_r##N); \
+ case e_mode::R16D8: return r16(m_r##N) + (int8_t)m_r##N##b; \
+ case e_mode::R16R8: return r16(m_r##N) + (int8_t)r8(m_r##N##b); \
+ case e_mode::MI16: return RM16(m_r##N); \
+ case e_mode::MR16R8: return RM16((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b))); \
+ case e_mode::MR16: \
switch( m_r##N ) { \
case IX: return RX16(m_ix.w.l,m_ixbase); \
case IY: return RX16(m_iy.w.l,m_iybase); \
} \
return RM16(r16(m_r##N)); \
- case MODE_MR16D8: \
+ case e_mode::MR16D8: \
switch( m_r##N ) { \
case IX: return RX16((uint16_t)(m_ix.w.l + (int8_t)m_r##N##b),m_ixbase); \
case IY: return RX16((uint16_t)(m_iy.w.l + (int8_t)m_r##N##b),m_iybase); \
} \
return RM16((uint16_t)(r16(m_r##N) + (int8_t)m_r##N##b)); \
default: \
- fatalerror("%04x: unimplemented Read%d_16 modes = %d\n",m_pc.w.l,N,m_mode##N); \
+ fatalerror("%04x: unimplemented Read%d_16 modes = %d\n",m_pc.w.l,N,std::underlying_type_t<e_mode>(m_mode##N)); \
} \
return 0; \
}
@@ -1200,45 +1200,45 @@ uint16_t tlcs90_device::Read##N##_16() { \
#define WRITE_FN( N ) \
void tlcs90_device::Write##N##_8( uint8_t value ) { \
switch ( m_mode##N ) { \
- case MODE_R8: w8(m_r##N,value); return; \
- case MODE_MI16: WM8(m_r##N, value); return; \
- case MODE_MR16R8: WM8((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b)), value); return; \
- case MODE_MR16: \
+ case e_mode::R8: w8(m_r##N,value); return; \
+ case e_mode::MI16: WM8(m_r##N, value); return; \
+ case e_mode::MR16R8: WM8((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b)), value); return; \
+ case e_mode::MR16: \
switch( m_r##N ) { \
case IX: WX8(m_ix.w.l,value,m_ixbase); return; \
case IY: WX8(m_iy.w.l,value,m_iybase); return; \
} \
WM8(r16(m_r##N), value); return; \
- case MODE_MR16D8: \
+ case e_mode::MR16D8: \
switch( m_r##N ) { \
case IX: WX8((uint16_t)(m_ix.w.l + (int8_t)m_r##N##b),value,m_ixbase); return; \
case IY: WX8((uint16_t)(m_iy.w.l + (int8_t)m_r##N##b),value,m_iybase); return; \
} \
WM8((uint16_t)(r16(m_r##N) + (int8_t)m_r##N##b), value); return; \
default: \
- fatalerror("%04x: unimplemented Write%d_8 mode = %d\n",m_pc.w.l,N,m_mode##N); \
+ fatalerror("%04x: unimplemented Write%d_8 mode = %d\n",m_pc.w.l,N,std::underlying_type_t<e_mode>(m_mode##N)); \
} \
} \
void tlcs90_device::Write##N##_16( uint16_t value ) \
{ \
switch ( m_mode##N ) { \
- case MODE_R16: w16(m_r##N,value); return; \
- case MODE_MI16: WM16(m_r##N, value); return; \
- case MODE_MR16R8: WM16((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b)), value); return; \
- case MODE_MR16: \
+ case e_mode::R16: w16(m_r##N,value); return; \
+ case e_mode::MI16: WM16(m_r##N, value); return; \
+ case e_mode::MR16R8: WM16((uint16_t)(r16(m_r##N) + (int8_t)r8(m_r##N##b)), value); return; \
+ case e_mode::MR16: \
switch( m_r##N ) { \
case IX: WX16(m_ix.w.l,value,m_ixbase); return; \
case IY: WX16(m_iy.w.l,value,m_iybase); return; \
} \
WM16(r16(m_r##N), value); return; \
- case MODE_MR16D8: \
+ case e_mode::MR16D8: \
switch( m_r##N ) { \
case IX: WX16((uint16_t)(m_ix.w.l + (int8_t)m_r##N##b),value,m_ixbase); return; \
case IY: WX16((uint16_t)(m_iy.w.l + (int8_t)m_r##N##b),value,m_iybase); return; \
} \
WM16((uint16_t)(r16(m_r##N) + (int8_t)m_r##N##b), value); return; \
default: \
- fatalerror("%04x: unimplemented Write%d_16 mode = %d\n",m_pc.w.l,N,m_mode##N); \
+ fatalerror("%04x: unimplemented Write%d_16 mode = %d\n",m_pc.w.l,N,std::underlying_type_t<e_mode>(m_mode##N)); \
} \
}
@@ -1802,7 +1802,7 @@ void tlcs90_device::execute_run()
a32 = a16 + b16;
if ( (m_op == (ADC | OP_16)) && (F & CF) ) a32 += 1;
Write1_16( a32 );
- if ( (m_op == (ADD | OP_16)) && m_mode2 == MODE_R16 )
+ if ( (m_op == (ADD | OP_16)) && m_mode2 == e_mode::R16 )
{
F &= SF | ZF | IF | VF;
}
@@ -1898,7 +1898,7 @@ void tlcs90_device::execute_run()
a8 = Read1_8();
a8 = (a8 << 1) | (a8 >> 7);
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (a8 & 0x01) F |= CF | XCF; // X?
Cyc();
@@ -1907,7 +1907,7 @@ void tlcs90_device::execute_run()
a8 = Read1_8();
a8 = (a8 >> 1) | (a8 << 7);
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (a8 & 0x80) F |= CF | XCF; // X?
Cyc();
@@ -1918,7 +1918,7 @@ void tlcs90_device::execute_run()
a8 <<= 1;
if (F & CF) a8 |= 0x01;
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (b8) F |= CF | XCF; // X?
Cyc();
@@ -1929,7 +1929,7 @@ void tlcs90_device::execute_run()
a8 >>= 1;
if (F & CF) a8 |= 0x80;
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (b8) F |= CF | XCF; // X?
Cyc();
@@ -1941,7 +1941,7 @@ void tlcs90_device::execute_run()
b8 = a8 & 0x80;
a8 <<= 1;
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (b8) F |= CF | XCF; // X?
Cyc();
@@ -1951,7 +1951,7 @@ void tlcs90_device::execute_run()
b8 = a8 & 0x01;
a8 = (a8 & 0x80) | (a8 >> 1);
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (b8) F |= CF | XCF; // X?
Cyc();
@@ -1961,7 +1961,7 @@ void tlcs90_device::execute_run()
b8 = a8 & 0x01;
a8 >>= 1;
Write1_8( a8 );
- if ( m_mode1 == MODE_R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
+ if ( m_mode1 == e_mode::R8 && m_r1 == A ) F &= SF | ZF | IF | PF;
else F = (F & IF) | SZP[a8];
if (b8) F |= CF | XCF; // X?
Cyc();
@@ -2750,9 +2750,9 @@ void tlcs90_device::device_start()
m_timer_value[0] = m_timer_value[1] = m_timer_value[2] = m_timer_value[3] = 0;
m_timer4_value = 0;
m_op = 0;
- m_mode1 = MODE_NONE;
+ m_mode1 = e_mode::NONE;
m_r1 = m_r1b = 0;
- m_mode2 = MODE_NONE;
+ m_mode2 = e_mode::NONE;
m_r2 = m_r2b = 0;
m_cyc_t = m_cyc_f = 0;
m_addr = 0;