summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu')
-rw-r--r--src/devices/cpu/hmcs400/hmcs400.cpp2
-rw-r--r--src/devices/cpu/hmcs400/hmcs400.h2
-rw-r--r--src/devices/cpu/mpk1839/kl1839vm1.h1
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.cpp56
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.h112
-rw-r--r--src/devices/cpu/tlcs90/tlcs90d.cpp91
-rw-r--r--src/devices/cpu/tlcs90/tlcs90d.h36
-rw-r--r--src/devices/cpu/tms9900/tms9900.cpp4
-rw-r--r--src/devices/cpu/tms9900/tms9980a.cpp4
-rw-r--r--src/devices/cpu/z180/z180.cpp7
-rw-r--r--src/devices/cpu/z180/z180.h2
-rw-r--r--src/devices/cpu/z180/z180dasm.cpp1
-rw-r--r--src/devices/cpu/z180/z180dasm.h1
-rw-r--r--src/devices/cpu/z180/z180dd.hxx3
14 files changed, 176 insertions, 146 deletions
diff --git a/src/devices/cpu/hmcs400/hmcs400.cpp b/src/devices/cpu/hmcs400/hmcs400.cpp
index 19249f2f6b8..c54b4beef93 100644
--- a/src/devices/cpu/hmcs400/hmcs400.cpp
+++ b/src/devices/cpu/hmcs400/hmcs400.cpp
@@ -608,7 +608,7 @@ void hmcs400_cpu_device::tm_w(offs_t offset, u8 data, u8 mem_mask)
if (!access_mode(mem_mask))
return;
- // TMA/TMB prescaler divide ratio
+ // TMA/TMB prescaler divide ratio masks
static const int div[2][8] =
{
{ 0x400, 0x200, 0x100, 0x40, 0x10, 4, 2, 1 },
diff --git a/src/devices/cpu/hmcs400/hmcs400.h b/src/devices/cpu/hmcs400/hmcs400.h
index 10b3da0f1f9..8232dddb704 100644
--- a/src/devices/cpu/hmcs400/hmcs400.h
+++ b/src/devices/cpu/hmcs400/hmcs400.h
@@ -149,7 +149,7 @@ protected:
u8 m_pmr; // port mode register
u16 m_prescaler; // 11-bit clock prescaler
u8 m_timer_mode[2]; // TMA/TMB: timer mode registers
- u16 m_timer_div[2]; // timer prescaler divide ration derived from TMA/TMB
+ u16 m_timer_div[2]; // timer prescaler divide ratio masks from TMA/TMB
u8 m_timer_count[2]; // TCA/TCA: timer counters
u8 m_timer_load; // timer B reload register
u8 m_timer_b_low; // timer B counter low latch
diff --git a/src/devices/cpu/mpk1839/kl1839vm1.h b/src/devices/cpu/mpk1839/kl1839vm1.h
index 18b79ecbbb1..69135aa2694 100644
--- a/src/devices/cpu/mpk1839/kl1839vm1.h
+++ b/src/devices/cpu/mpk1839/kl1839vm1.h
@@ -31,7 +31,6 @@ protected:
// device_execute_interface overrides
virtual u32 execute_min_cycles() const noexcept override { return 1; }
virtual u32 execute_max_cycles() const noexcept override { return 16; }
- virtual u32 execute_input_lines() const noexcept { return 1; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp
index be2f05a181a..00e1bde96e4 100644
--- a/src/devices/cpu/tlcs90/tlcs90.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90.cpp
@@ -6,10 +6,6 @@
emulation by Luca Elia, based on the Z80 core by Juergen Buchmueller
- ChangeLog:
-
- 20150517 Fixed TRUN bit masking (timers start/stop handling) [Rainer Keuchel]
-
*************************************************************************************************************/
#include "emu.h"
@@ -284,31 +280,28 @@ static uint8_t SZHV_dec[256]; /* zero, sign, half carry and overflow flags DEC r
#define OP_16 0x80
-
-
-
-#define OP( X,CT ) m_op = X; m_cyc_t = (CT*2);
-#define OP16( X,CT ) OP( (X)|OP_16,CT )
-
-#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 = 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;
+#define OP( X,CT ) m_op = X; m_cyc_t = (CT*2);
+#define OP16( X,CT ) OP( (X)|OP_16,CT )
+
+#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 = 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); }
@@ -2130,11 +2123,6 @@ void tlcs90_device::device_reset()
std::fill(std::begin(m_treg_16bit), std::end(m_treg_16bit), 0);
}
-void tlcs90_device::execute_burn(int32_t cycles)
-{
- m_icount -= 4 * ((cycles + 3) / 4);
-}
-
/*************************************************************************************************************
diff --git a/src/devices/cpu/tlcs90/tlcs90.h b/src/devices/cpu/tlcs90/tlcs90.h
index 7479b699057..e7d07e3f7d7 100644
--- a/src/devices/cpu/tlcs90/tlcs90.h
+++ b/src/devices/cpu/tlcs90/tlcs90.h
@@ -5,7 +5,27 @@
#pragma once
-enum tlcs90_e_irq { INTSWI = 0, INTNMI, INTWD, INT0, INTT0, INTT1, INTT2, INTT3, INTT4, INT1, INTT5, INT2, INTRX, INTTX, INTMAX };
+// TODO: too generic global enum
+enum tlcs90_e_irq
+{
+ INTSWI = 0,
+ INTNMI,
+ INTWD,
+ INT0,
+ INTT0,
+ INTT1,
+ INTT2,
+ INTT3,
+ INTT4,
+ INT1,
+ INTT5,
+ INT2,
+ INTRX,
+ INTTX,
+
+ INTMAX
+};
+
DECLARE_ENUM_INCDEC_OPERATORS(tlcs90_e_irq)
class tlcs90_device : public cpu_device
@@ -14,8 +34,8 @@ class tlcs90_device : public cpu_device
//static constexpr int MAX_ANALOG_INPUTS = 16;
protected:
- TIMER_CALLBACK_MEMBER( t90_timer_callback );
- TIMER_CALLBACK_MEMBER( t90_timer4_callback );
+ TIMER_CALLBACK_MEMBER(t90_timer_callback);
+ TIMER_CALLBACK_MEMBER(t90_timer4_callback);
void tmp90840_regs(address_map &map);
void tmp90840_mem(address_map &map);
@@ -25,8 +45,18 @@ protected:
void tmp91640_mem(address_map &map);
void tmp91641_mem(address_map &map);
- enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV };
-
+ enum _e_op
+ {
+ UNKNOWN,
+ NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR,
+ LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP,
+ JP, JR, CALL, CALLR, RET, RETI, HALT, DI,
+ EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF,
+ CCF, TSET, BIT, SET, RES, INC, DEC, INCX,
+ DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND,
+ XOR, OR, CP, RLC, RRC, RL, RR, SLA,
+ SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV
+ };
public:
// configuration
@@ -47,7 +77,6 @@ protected:
virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
- [[maybe_unused]] void execute_burn(int32_t cycles);
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
@@ -103,7 +132,8 @@ protected:
void reserved_w(offs_t offset, uint8_t data);
private:
- enum class e_mode : u8 {
+ enum class e_mode : u8
+ {
NONE, BIT8, CC,
I8, D8, R8,
I16, D16, R16,
@@ -116,13 +146,13 @@ private:
devcb_read8::array<MAX_PORTS> m_port_read_cb;
devcb_write8::array<MAX_PORTS> m_port_write_cb;
- PAIR m_prvpc,m_pc,m_sp,m_af,m_bc,m_de,m_hl,m_ix,m_iy;
- PAIR m_af2,m_bc2,m_de2,m_hl2;
- uint8_t m_halt, m_after_EI;
- uint16_t m_irq_state, m_irq_line_state, m_irq_mask;
+ PAIR m_prvpc, m_pc, m_sp, m_af, m_bc, m_de, m_hl, m_ix, m_iy;
+ PAIR m_af2, m_bc2, m_de2, m_hl2;
+ uint8_t m_halt, m_after_EI;
+ uint16_t m_irq_state, m_irq_line_state, m_irq_mask;
address_space *m_program;
- int m_icount;
- int m_extra_cycles; // extra cycles for interrupts
+ int m_icount;
+ int m_extra_cycles; // extra cycles for interrupts
uint8_t m_port_latch[MAX_PORTS];
@@ -133,13 +163,13 @@ private:
uint8_t m_p8cr;
uint8_t m_smmod;
- uint32_t m_ixbase,m_iybase;
+ uint32_t m_ixbase,m_iybase;
// Timers: 4 x 8-bit + 1 x 16-bit
- emu_timer *m_timer[4+1];
- uint8_t m_timer_value[4];
- uint16_t m_timer4_value;
- attotime m_timer_period;
+ emu_timer *m_timer[4+1];
+ uint8_t m_timer_value[4];
+ uint16_t m_timer4_value;
+ attotime m_timer_period;
uint8_t m_tmod;
uint8_t m_tclk;
uint8_t m_trun;
@@ -148,44 +178,44 @@ private:
uint16_t m_treg_16bit[2];
// Work registers
- uint8_t m_op;
+ uint8_t m_op;
- e_mode m_mode1;
- uint16_t m_r1,m_r1b;
+ e_mode m_mode1;
+ uint16_t m_r1, m_r1b;
- e_mode m_mode2;
- uint16_t m_r2,m_r2b;
+ e_mode m_mode2;
+ uint16_t m_r2, m_r2b;
- int m_cyc_t,m_cyc_f;
+ int m_cyc_t, m_cyc_f;
- uint32_t m_addr;
+ uint32_t m_addr;
- inline uint8_t RM8 (uint32_t a);
+ inline uint8_t RM8(uint32_t a);
inline uint16_t RM16(uint32_t a);
- inline void WM8 (uint32_t a, uint8_t v);
+ inline void WM8(uint32_t a, uint8_t v);
inline void WM16(uint32_t a, uint16_t v);
- inline uint8_t RX8 (uint32_t a, uint32_t base);
+ inline uint8_t RX8(uint32_t a, uint32_t base);
inline uint16_t RX16(uint32_t a, uint32_t base);
- inline void WX8 (uint32_t a, uint8_t v, uint32_t base);
+ inline void WX8(uint32_t a, uint8_t v, uint32_t base);
inline void WX16(uint32_t a, uint16_t v, uint32_t base);
- inline uint8_t READ8();
+ inline uint8_t READ8();
inline uint16_t READ16();
void decode();
- inline uint16_t r8( const uint16_t r );
- inline void w8( const uint16_t r, uint16_t value );
- inline uint16_t r16( const uint16_t r );
- inline void w16( const uint16_t r, uint16_t value );
+ inline uint16_t r8(const uint16_t r);
+ inline void w8(const uint16_t r, uint16_t value);
+ inline uint16_t r16(const uint16_t r);
+ inline void w16(const uint16_t r, uint16_t value);
inline uint8_t Read1_8();
inline uint16_t Read1_16();
inline uint8_t Read2_8();
inline uint16_t Read2_16();
- inline void Write1_8( uint8_t value );
- inline void Write1_16( uint16_t value );
- inline void Write2_8( uint8_t value );
- inline void Write2_16( uint16_t value );
- inline int Test( uint8_t cond );
- inline void Push( uint16_t rr );
- inline void Pop( uint16_t rr );
+ inline void Write1_8(uint8_t value);
+ inline void Write1_16(uint16_t value);
+ inline void Write2_8(uint8_t value);
+ inline void Write2_16(uint16_t value);
+ inline int Test(uint8_t cond);
+ inline void Push(uint16_t rr);
+ inline void Pop(uint16_t rr);
inline void halt();
inline void leave_halt();
inline void raise_irq(int irq);
diff --git a/src/devices/cpu/tlcs90/tlcs90d.cpp b/src/devices/cpu/tlcs90/tlcs90d.cpp
index 8f850d4c486..4254faddd2b 100644
--- a/src/devices/cpu/tlcs90/tlcs90d.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90d.cpp
@@ -2,25 +2,39 @@
// copyright-holders:Luca Elia
/*************************************************************************************************************
- Toshiba TLCS-90 Series MCU's
-
- emulation by Luca Elia, based on the Z80 core by Juergen Buchmueller
-
- ChangeLog:
-
- 20150517 Fixed TRUN bit masking (timers start/stop handling) [Rainer Keuchel]
+ Toshiba TLCS-90 Series MCU's disassembler
*************************************************************************************************************/
#include "emu.h"
#include "tlcs90d.h"
-const char *const tlcs90_disassembler::op_names[] = { "??", "nop", "ex", "exx", "ld", "ldw", "lda", "ldi", "ldir", "ldd", "lddr", "cpi", "cpir", "cpd", "cpdr", "push", "pop", "jp", "jr", "call", "callr", "ret", "reti", "halt", "di", "ei", "swi", "daa", "cpl", "neg", "ldar", "rcf", "scf", "ccf", "tset", "bit", "set", "res", "inc", "dec", "incx", "decx", "incw", "decw", "add", "adc", "sub", "sbc", "and", "xor", "or", "cp", "rlc", "rrc", "rl", "rr", "sla", "sra", "sll", "srl", "rld", "rrd", "djnz", "mul", "div" };
+const char *const tlcs90_disassembler::op_names[] =
+{
+ "??",
+ "nop", "ex", "exx", "ld", "ldw", "lda", "ldi", "ldir",
+ "ldd", "lddr", "cpi", "cpir", "cpd", "cpdr", "push", "pop",
+ "jp", "jr", "call", "callr","ret", "reti", "halt", "di",
+ "ei", "swi", "daa", "cpl", "neg", "ldar", "rcf", "scf",
+ "ccf", "tset", "bit", "set", "res", "inc", "dec", "incx",
+ "decx", "incw", "decw", "add", "adc", "sub", "sbc", "and",
+ "xor", "or", "cp", "rlc", "rrc", "rl", "rr", "sla",
+ "sra", "sll", "srl", "rld", "rrd", "djnz", "mul", "div"
+};
-const char *const tlcs90_disassembler::r8_names[] = { "b", "c", "d", "e", "h", "l", "a" };
-const char *const tlcs90_disassembler::r16_names[] = { "bc", "de", "hl", "??", "ix", "iy", "sp", "af", "af'", "pc" };
+const char *const tlcs90_disassembler::r8_names[] =
+{
+ "b", "c", "d", "e", "h", "l", "a"
+};
+const char *const tlcs90_disassembler::r16_names[] =
+{
+ "bc", "de", "hl", "??", "ix", "iy", "sp", "af", "af'", "pc"
+};
-const char *const tlcs90_disassembler::cc_names[] = { "f", "lt", "le", "ule", "ov", "mi", "z", "c", "", "ge", "gt", "ugt", "nov", "pl", "nz", "nc" };
+const char *const tlcs90_disassembler::cc_names[] =
+{
+ "f", "lt", "le", "ule", "ov", "mi", "z", "c", "", "ge", "gt", "ugt", "nov", "pl", "nz", "nc"
+};
u32 tlcs90_disassembler::opcode_alignment() const
{
@@ -32,7 +46,8 @@ tlcs90_disassembler::tlcs90_disassembler(uint16_t iobase, const char *const ir_n
{
}
-const char *const tmp90840_disassembler::ir_names[0x40] = {
+const char *const tmp90840_disassembler::ir_names[0x40] =
+{
"P0", "P1", "P01CR/IRFL", "IRFH", "P2", "P2CR", "P3", "P3CR",
"P4", "P4CR", "P5", "SMMOD", "P6", "P7", "P67CR", "SMCR",
"P8", "P8CR", "WDMOD", "WDCR", "TREG0", "TREG1", "TREG2", "TREG3",
@@ -48,7 +63,8 @@ tmp90840_disassembler::tmp90840_disassembler()
{
}
-const char *const tmp90844_disassembler::ir_names[0x40] = {
+const char *const tmp90844_disassembler::ir_names[0x40] =
+{
"P0", "P0CR", "P1", "P1CR", "P2", "P2CR", "P3", "P3CR",
"P4", "P4CR", "P5", "P6", "P7", "P67CR", "P23FR", "P4FR",
"P67FR", "P25FR", "WDMOD", "WDCR", "TREG0", "TREG1", "TREG2", "TREG3",
@@ -64,7 +80,8 @@ tmp90844_disassembler::tmp90844_disassembler()
{
}
-const char *const tmp90c051_disassembler::ir_names[0x4c] = {
+const char *const tmp90c051_disassembler::ir_names[0x4c] =
+{
"P2", "P2CR", "P3", "P3CR",
"P3FR", "P4", "P5", "P45CR", "P45FR", "P6", "P6CR", "P6FR",
"TREG0", "TREG1", "TREG2", "TREG3", "T01MOD", "T23MOD", "TFFCR", "TRDC",
@@ -143,28 +160,28 @@ const char *tlcs90_disassembler::internal_registers_names(uint16_t x) const
#define ZF 0x40
#define SF 0x80
-#define OP( X,CT ) m_op = X;
-#define OP16( X,CT ) m_op = X;
-
-#define OPCC( X,CF,CT ) m_op = X;
-#define OPCC16( X,CF,CT ) m_op = X;
-
-#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;
+#define OP( X,CT ) m_op = X;
+#define OP16( X,CT ) m_op = X;
+
+#define OPCC( X,CF,CT ) m_op = X;
+#define OPCC16( X,CF,CT ) m_op = X;
+
+#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_disassembler::READ8()
{
@@ -960,7 +977,7 @@ bool tlcs90_disassembler::stream_arg(std::ostream &stream, uint32_t pc, const ch
if (reg_name)
util::stream_format(stream, "%s(%s)", pre, reg_name);
else
- util::stream_format(stream, "%s($%04X)", pre, r );
+ 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;
diff --git a/src/devices/cpu/tlcs90/tlcs90d.h b/src/devices/cpu/tlcs90/tlcs90d.h
index 2c71cd432d2..a8392e74eb3 100644
--- a/src/devices/cpu/tlcs90/tlcs90d.h
+++ b/src/devices/cpu/tlcs90/tlcs90d.h
@@ -2,13 +2,7 @@
// copyright-holders:Luca Elia
/*************************************************************************************************************
- Toshiba TLCS-90 Series MCU's
-
- emulation by Luca Elia, based on the Z80 core by Juergen Buchmueller
-
- ChangeLog:
-
- 20150517 Fixed TRUN bit masking (timers start/stop handling) [Rainer Keuchel]
+ Toshiba TLCS-90 Series MCU's disassembler
*************************************************************************************************************/
@@ -28,9 +22,21 @@ protected:
tlcs90_disassembler(uint16_t iobase, const char *const ir_names[]);
private:
- enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV };
+ enum _e_op
+ {
+ UNKNOWN,
+ NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR,
+ LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP,
+ JP, JR, CALL, CALLR, RET, RETI, HALT, DI,
+ EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF,
+ CCF, TSET, BIT, SET, RES, INC, DEC, INCX,
+ DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND,
+ XOR, OR, CP, RLC, RRC, RL, RR, SLA,
+ SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV
+ };
- enum class e_mode : u8 {
+ enum class e_mode : u8
+ {
NONE, BIT8, CC,
I8, D8, R8,
I16, D16, R16,
@@ -46,18 +52,18 @@ private:
const uint16_t m_iobase;
const char *const *m_ir_names;
- uint8_t m_op;
+ uint8_t m_op;
- e_mode m_mode1;
- uint16_t m_r1,m_r1b;
+ e_mode m_mode1;
+ uint16_t m_r1, m_r1b;
- e_mode m_mode2;
- uint16_t m_r2,m_r2b;
+ e_mode m_mode2;
+ uint16_t m_r2, m_r2b;
offs_t m_addr;
const data_buffer *m_opcodes;
- inline uint8_t READ8();
+ inline uint8_t READ8();
inline uint16_t READ16();
void decode();
diff --git a/src/devices/cpu/tms9900/tms9900.cpp b/src/devices/cpu/tms9900/tms9900.cpp
index cac2f42845b..5ae5cb54f6b 100644
--- a/src/devices/cpu/tms9900/tms9900.cpp
+++ b/src/devices/cpu/tms9900/tms9900.cpp
@@ -2771,10 +2771,6 @@ uint32_t tms99xx_device::execute_max_cycles() const noexcept
return 124;
}
-// clocks to cycles, cycles to clocks = id
-// execute_default_irq_vector = 0
-// execute_burn = nop
-
// device_disasm_interface overrides
std::unique_ptr<util::disasm_interface> tms99xx_device::create_disassembler()
diff --git a/src/devices/cpu/tms9900/tms9980a.cpp b/src/devices/cpu/tms9900/tms9980a.cpp
index fc83e0b3c7b..9f5d058705b 100644
--- a/src/devices/cpu/tms9900/tms9980a.cpp
+++ b/src/devices/cpu/tms9900/tms9980a.cpp
@@ -283,10 +283,6 @@ uint32_t tms9980a_device::execute_max_cycles() const noexcept
return 136;
}
-// clocks to cycles, cycles to clocks = id
-// execute_default_irq_vector = 0
-// execute_burn = nop
-
// device_disasm_interface overrides
std::unique_ptr<util::disasm_interface> tms9980a_device::create_disassembler()
diff --git a/src/devices/cpu/z180/z180.cpp b/src/devices/cpu/z180/z180.cpp
index 3097427bd69..b7c11b2b175 100644
--- a/src/devices/cpu/z180/z180.cpp
+++ b/src/devices/cpu/z180/z180.cpp
@@ -2,7 +2,6 @@
// copyright-holders:Juergen Buchmueller
/*****************************************************************************
*
- * z180.c
* Portable Z180 emulator V0.3
*
*****************************************************************************/
@@ -13,8 +12,8 @@
- HALT processing is not yet perfect. The manual states that
during HALT, all dma and internal i/o incl. timers continue to
work. Currently, only timers are implemented. Ideally, the
- burn_cycles routine would go away and halt processing be
- implemented in cpu_execute.
+ (currently unused) burn_cycles routine would go away and halt
+ processing be implemented in execute_run.
- Documentation for RXS/CTS1 pin is contradictory.
@@ -2015,7 +2014,7 @@ again:
/****************************************************************************
* Burn 'cycles' T-states. Adjust R register for the lost time
****************************************************************************/
-void z180_device::execute_burn(int32_t cycles)
+void z180_device::burn_cycles(int32_t cycles)
{
int extra_cycles = memory_wait_states();
diff --git a/src/devices/cpu/z180/z180.h b/src/devices/cpu/z180/z180.h
index 18aa0b5770f..4a8e0e5e4a5 100644
--- a/src/devices/cpu/z180/z180.h
+++ b/src/devices/cpu/z180/z180.h
@@ -147,7 +147,6 @@ protected:
virtual uint32_t execute_default_irq_vector(int inputnum) const noexcept override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
- [[maybe_unused]] void execute_burn(int32_t cycles);
virtual void execute_set_input(int inputnum, int state) override;
// device_memory_interface implementation
@@ -164,6 +163,7 @@ protected:
virtual uint8_t z180_internal_port_read(uint8_t port);
virtual void z180_internal_port_write(uint8_t port, uint8_t data);
+ [[maybe_unused]] void burn_cycles(int32_t cycles);
address_space_config m_program_config;
address_space_config m_io_config;
diff --git a/src/devices/cpu/z180/z180dasm.cpp b/src/devices/cpu/z180/z180dasm.cpp
index 393f9a51946..835c620770d 100644
--- a/src/devices/cpu/z180/z180dasm.cpp
+++ b/src/devices/cpu/z180/z180dasm.cpp
@@ -2,7 +2,6 @@
// copyright-holders:Juergen Buchmueller
/*****************************************************************************
*
- * z180dasm.c
* Portable Z8x180 disassembler
*
*****************************************************************************/
diff --git a/src/devices/cpu/z180/z180dasm.h b/src/devices/cpu/z180/z180dasm.h
index a13c7d92fe1..1d6de1bbf5d 100644
--- a/src/devices/cpu/z180/z180dasm.h
+++ b/src/devices/cpu/z180/z180dasm.h
@@ -2,7 +2,6 @@
// copyright-holders:Juergen Buchmueller
/*****************************************************************************
*
- * z180dasm.c
* Portable Z8x180 disassembler
*
*****************************************************************************/
diff --git a/src/devices/cpu/z180/z180dd.hxx b/src/devices/cpu/z180/z180dd.hxx
index d73c9720cf3..2bee2a99d62 100644
--- a/src/devices/cpu/z180/z180dd.hxx
+++ b/src/devices/cpu/z180/z180dd.hxx
@@ -1,6 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Juergen Buchmueller
-OP(illegal,1) {
+OP(illegal,1)
+{
logerror("Z180 '%s' ill. opcode $%02x $%02x\n",
tag(), m_copcodes.read_byte((_PCD-1)&0xffff), m_copcodes.read_byte(_PCD));
}