diff options
author | 2015-06-02 19:49:45 +0200 | |
---|---|---|
committer | 2015-06-02 19:49:45 +0200 | |
commit | c5891758cb9fb5cc4a56d2af3c3287fc5e29851f (patch) | |
tree | 0adc8525c128a92e1731c1c328e4a7c2f1f47ae5 /src/emu/cpu/mn10200/mn10200.h | |
parent | c325f48069737463c4ec6c72228e881232dec861 (diff) |
changed mn10200 fake i/o memmap to callbacks
Diffstat (limited to 'src/emu/cpu/mn10200/mn10200.h')
-rw-r--r-- | src/emu/cpu/mn10200/mn10200.h | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/src/emu/cpu/mn10200/mn10200.h b/src/emu/cpu/mn10200/mn10200.h index d0e59530457..59be253f852 100644 --- a/src/emu/cpu/mn10200/mn10200.h +++ b/src/emu/cpu/mn10200/mn10200.h @@ -8,27 +8,14 @@ */ -#pragma once - #ifndef MN10200_H #define MN10200_H -enum -{ - MN10200_PC = 0, - MN10200_PSW, - MN10200_MDR, - MN10200_D0, - MN10200_D1, - MN10200_D2, - MN10200_D3, - MN10200_A0, - MN10200_A1, - MN10200_A2, - MN10200_A3, - MN10200_NMICR, - MN10200_IAGR -}; +// port setup +#define MCFG_MN10200_READ_PORT_CB(X, _devcb) \ + mn10200_device::set_read_port##X##_callback(*device, DEVCB_##_devcb); +#define MCFG_MN10200_WRITE_PORT_CB(X, _devcb) \ + mn10200_device::set_write_port##X##_callback(*device, DEVCB_##_devcb); enum { @@ -50,9 +37,6 @@ enum }; -extern const device_type MN1020012A; - - #define MN10200_NUM_PRESCALERS (2) #define MN10200_NUM_TIMERS_8BIT (10) #define MN10200_NUM_IRQ_GROUPS (31) @@ -62,7 +46,25 @@ class mn10200_device : public cpu_device { public: // construction/destruction - mn10200_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + mn10200_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, address_map_constructor program, const char *shortname, const char *source) + : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) + , m_program_config("program", ENDIANNESS_LITTLE, 16, 24, 0, program) + , m_read_port0(*this), m_read_port1(*this), m_read_port2(*this), m_read_port3(*this), m_read_port4(*this) + , m_write_port0(*this), m_write_port1(*this), m_write_port2(*this), m_write_port3(*this), m_write_port4(*this) + { } + + // static configuration helpers + template<class _Object> static devcb_base &set_read_port0_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_read_port0.set_callback(object); } + template<class _Object> static devcb_base &set_read_port1_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_read_port1.set_callback(object); } + template<class _Object> static devcb_base &set_read_port2_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_read_port2.set_callback(object); } + template<class _Object> static devcb_base &set_read_port3_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_read_port3.set_callback(object); } + template<class _Object> static devcb_base &set_read_port4_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_read_port4.set_callback(object); } + + template<class _Object> static devcb_base &set_write_port0_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_write_port0.set_callback(object); } + template<class _Object> static devcb_base &set_write_port1_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_write_port1.set_callback(object); } + template<class _Object> static devcb_base &set_write_port2_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_write_port2.set_callback(object); } + template<class _Object> static devcb_base &set_write_port3_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_write_port3.set_callback(object); } + template<class _Object> static devcb_base &set_write_port4_callback(device_t &device, _Object object) { return downcast<mn10200_device &>(device).m_write_port4.set_callback(object); } DECLARE_READ8_MEMBER(io_control_r); DECLARE_WRITE8_MEMBER(io_control_w); @@ -82,10 +84,7 @@ protected: virtual void execute_set_input(int inputnum, int state); // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const - { - return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); - } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; } // device_state_interface overrides void state_string_export(const device_state_entry &entry, std::string &str); @@ -97,10 +96,11 @@ protected: private: address_space_config m_program_config; - address_space_config m_io_config; - address_space *m_program; - address_space *m_io; + + // i/o handlers + devcb_read8 m_read_port0, m_read_port1, m_read_port2, m_read_port3, m_read_port4; + devcb_write8 m_write_port0, m_write_port1, m_write_port2, m_write_port3, m_write_port4; int m_cycles; @@ -112,6 +112,10 @@ private: UINT16 m_mdr; // interrupts + void take_irq(int level, int group); + void check_irq(); + void check_ext_irq(); + UINT8 m_icrl[MN10200_NUM_IRQ_GROUPS]; UINT8 m_icrh[MN10200_NUM_IRQ_GROUPS]; @@ -122,6 +126,11 @@ private: bool m_possible_irq; // timers + void refresh_timer(int tmr); + void refresh_all_timers(); + int timer_tick_simple(int tmr); + TIMER_CALLBACK_MEMBER( simple_timer_cb ); + attotime m_sysclock_base; emu_timer *m_timer_timers[MN10200_NUM_TIMERS_8BIT]; @@ -185,13 +194,7 @@ private: inline void change_pc(UINT32 pc) { m_pc = pc & 0xffffff; } - void take_irq(int level, int group); - void check_irq(); - void check_ext_irq(); - void refresh_timer(int tmr); - void refresh_all_timers(); - int timer_tick_simple(int tmr); - TIMER_CALLBACK_MEMBER( simple_timer_cb ); + // opcode helpers void illegal(UINT8 prefix, UINT8 op); UINT32 do_add(UINT32 a, UINT32 b, UINT32 c = 0); UINT32 do_sub(UINT32 a, UINT32 b, UINT32 c = 0); @@ -201,4 +204,15 @@ private: }; -#endif +class mn1020012a_device : public mn10200_device +{ +public: + mn1020012a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + + + +extern const device_type MN1020012A; + + +#endif // MN10200_H |