summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/mn10200/mn10200.h
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-06-02 19:49:45 +0200
committer hap <happppp@users.noreply.github.com>2015-06-02 19:49:45 +0200
commitc5891758cb9fb5cc4a56d2af3c3287fc5e29851f (patch)
tree0adc8525c128a92e1731c1c328e4a7c2f1f47ae5 /src/emu/cpu/mn10200/mn10200.h
parentc325f48069737463c4ec6c72228e881232dec861 (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.h88
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