tlcs90: move too generic irq enum to class

This commit is contained in:
hap 2024-09-20 11:06:16 +02:00
parent 0fc27e1da5
commit 0f05abed44

View File

@ -5,60 +5,30 @@
#pragma once
// 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
{
static constexpr int MAX_PORTS = 9;
//static constexpr int MAX_ANALOG_INPUTS = 16;
protected:
TIMER_CALLBACK_MEMBER(t90_timer_callback);
TIMER_CALLBACK_MEMBER(t90_timer4_callback);
void tmp90840_regs(address_map &map);
void tmp90840_mem(address_map &map);
void tmp90841_mem(address_map &map);
void tmp90844_regs(address_map &map);
void tmp90ph44_mem(address_map &map);
void tmp91640_mem(address_map &map);
void tmp91641_mem(address_map &map);
enum _e_op
public:
enum tlcs90_e_irq
{
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
INTSWI = 0,
INTNMI,
INTWD,
INT0,
INTT0,
INTT1,
INTT2,
INTT3,
INTT4,
INT1,
INTT5,
INT2,
INTRX,
INTTX,
INTMAX
};
public:
// configuration
template <size_t Port> auto port_read() { return m_port_read_cb[Port].bind(); }
template <size_t Port> auto port_write() { return m_port_write_cb[Port].bind(); }
@ -84,6 +54,18 @@ protected:
// device_state_interface overrides
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
// address maps
void tmp90840_regs(address_map &map);
void tmp90840_mem(address_map &map);
void tmp90841_mem(address_map &map);
void tmp90844_regs(address_map &map);
void tmp90ph44_mem(address_map &map);
void tmp91640_mem(address_map &map);
void tmp91641_mem(address_map &map);
TIMER_CALLBACK_MEMBER(t90_timer_callback);
TIMER_CALLBACK_MEMBER(t90_timer4_callback);
// internal registers
uint8_t p1_r();
void p1_w(uint8_t data);
@ -132,6 +114,19 @@ protected:
void reserved_w(offs_t offset, uint8_t data);
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 class e_mode : u8
{
NONE, BIT8, CC,
@ -141,6 +136,9 @@ private:
R16D8, R16R8
};
static constexpr int MAX_PORTS = 9;
//static constexpr int MAX_ANALOG_INPUTS = 16;
address_space_config m_program_config;
devcb_read8::array<MAX_PORTS> m_port_read_cb;
@ -304,6 +302,8 @@ protected:
};
DECLARE_ENUM_INCDEC_OPERATORS(tlcs90_device::tlcs90_e_irq)
DECLARE_DEVICE_TYPE(TMP90840, tmp90840_device)
DECLARE_DEVICE_TYPE(TMP90841, tmp90841_device)
DECLARE_DEVICE_TYPE(TMP90845, tmp90845_device)