diff options
Diffstat (limited to 'src/devices/cpu/tlcs90/tlcs90.cpp')
-rw-r--r-- | src/devices/cpu/tlcs90/tlcs90.cpp | 172 |
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; |