diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2018-10-26 18:59:16 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2018-10-26 19:00:01 -0400 |
commit | 0d01ce1c25dcfc20ef7aa1aa1593d7793001ac56 (patch) | |
tree | 4250970fbcd7d3cf48aa6304c845d6aa03bdb9d3 /src/devices/cpu/m6800/m6801.h | |
parent | e6ec2426996620bdd1a9ef38933bf20117130d69 (diff) |
m6801: Use devcb for ports; remove I/O space and MCFG_ macros (nw)
Diffstat (limited to 'src/devices/cpu/m6800/m6801.h')
-rw-r--r-- | src/devices/cpu/m6800/m6801.h | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/src/devices/cpu/m6800/m6801.h b/src/devices/cpu/m6800/m6801.h index 34a371edcef..3254858ad61 100644 --- a/src/devices/cpu/m6800/m6801.h +++ b/src/devices/cpu/m6800/m6801.h @@ -41,40 +41,33 @@ enum M6801_MODE_7 }; -enum -{ - M6801_PORT1 = 0x100, - M6801_PORT2, - M6801_PORT3, - M6801_PORT4 -}; - - -#define MCFG_M6801_SC2(_devcb) \ - downcast<m6801_cpu_device &>(*device).set_out_sc2_func(DEVCB_##_devcb); -#define MCFG_M6801_SER_TX(_devcb) \ - downcast<m6801_cpu_device &>(*device).set_out_sertx_func(DEVCB_##_devcb); - class m6801_cpu_device : public m6800_cpu_device { public: m6801_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // configuration helpers - template<class Object> devcb_base &set_out_sc2_func(Object &&cb) { return m_out_sc2_func.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_out_sertx_func(Object &&cb) { return m_out_sertx_func.set_callback(std::forward<Object>(cb)); } + auto in_p1_cb() { return m_in_port_func[0].bind(); } + auto out_p1_cb() { return m_out_port_func[0].bind(); } + auto in_p2_cb() { return m_in_port_func[1].bind(); } + auto out_p2_cb() { return m_out_port_func[1].bind(); } + auto in_p3_cb() { return m_in_port_func[2].bind(); } + auto out_p3_cb() { return m_out_port_func[2].bind(); } + auto in_p4_cb() { return m_in_port_func[3].bind(); } + auto out_p4_cb() { return m_out_port_func[3].bind(); } + + auto out_sc2_cb() { return m_out_sc2_func.bind(); } + auto out_ser_tx_cb() { return m_out_sertx_func.bind(); } DECLARE_READ8_MEMBER( m6801_io_r ); DECLARE_WRITE8_MEMBER( m6801_io_w ); void m6801_clock_serial(); - - void m6803_mem(address_map &map); protected: m6801_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const m6800_cpu_device::op_func *insn, const uint8_t *cycles, address_map_constructor internal = address_map_constructor()); // device-level overrides + virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; @@ -83,28 +76,20 @@ protected: virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override { return (cycles * 4); } virtual void execute_set_input(int inputnum, int state) override; - // device_memory_interface overrides - virtual space_config_vector memory_space_config() const override; - // device_disasm_interface overrides virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; - address_space_config m_io_config; + void m6803_mem(address_map &map); + + devcb_read8 m_in_port_func[4]; + devcb_write8 m_out_port_func[4]; devcb_write_line m_out_sc2_func; devcb_write_line m_out_sertx_func; - address_space *m_io; - /* internal registers */ - uint8_t m_port1_ddr; - uint8_t m_port2_ddr; - uint8_t m_port3_ddr; - uint8_t m_port4_ddr; - uint8_t m_port1_data; - uint8_t m_port2_data; - uint8_t m_port3_data; - uint8_t m_port4_data; + uint8_t m_port_ddr[4]; + uint8_t m_port_data[4]; uint8_t m_p3csr; // Port 3 Control/Status Register uint8_t m_tcsr; /* Timer Control and Status Register */ uint8_t m_pending_tcsr; /* pending IRQ flag for clear IRQflag process */ |