diff options
Diffstat (limited to 'src/devices/cpu/mc68hc11/mc68hc11.h')
-rw-r--r-- | src/devices/cpu/mc68hc11/mc68hc11.h | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/src/devices/cpu/mc68hc11/mc68hc11.h b/src/devices/cpu/mc68hc11/mc68hc11.h index da3d7477daf..75c12c1455c 100644 --- a/src/devices/cpu/mc68hc11/mc68hc11.h +++ b/src/devices/cpu/mc68hc11/mc68hc11.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ville Linde, Angelo Salese +// copyright-holders:Ville Linde, Angelo Salese, AJR #ifndef MAME_CPU_MC68HC11_MC68HC11_H #define MAME_CPU_MC68HC11_MC68HC11_H @@ -8,18 +8,18 @@ enum { MC68HC11_IRQ_LINE = 0, - MC68HC11_TOC1_LINE = 1, - MC68HC11_RTI_LINE = 2 + MC68HC11_XIRQ_LINE = 1 }; DECLARE_DEVICE_TYPE(MC68HC11A1, mc68hc11a1_device) DECLARE_DEVICE_TYPE(MC68HC11D0, mc68hc11d0_device) +DECLARE_DEVICE_TYPE(MC68HC11E1, mc68hc11e1_device) DECLARE_DEVICE_TYPE(MC68HC811E2, mc68hc811e2_device) DECLARE_DEVICE_TYPE(MC68HC11F1, mc68hc11f1_device) DECLARE_DEVICE_TYPE(MC68HC11K1, mc68hc11k1_device) DECLARE_DEVICE_TYPE(MC68HC11M0, mc68hc11m0_device) -class mc68hc11_cpu_device : public cpu_device +class mc68hc11_cpu_device : public cpu_device, public device_nvram_interface { public: // port configuration @@ -50,15 +50,16 @@ public: auto in_spi2_data_callback() { return m_spi2_data_input_cb.bind(); } auto out_spi2_data_callback() { return m_spi2_data_output_cb.bind(); } + void set_default_config(uint8_t data) { assert(!configured()); m_config = data & m_config_mask; } + protected: mc68hc11_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t ram_size, uint16_t reg_block_size, uint16_t rom_size, uint16_t eeprom_size, uint8_t init_value, uint8_t config_mask, uint8_t option_mask); - // device-level overrides - virtual void device_resolve_objects() override; + // device_t implementation virtual void device_start() override; virtual void device_reset() override; - // device_execute_interface overrides + // device_execute_interface implementation virtual uint32_t execute_min_cycles() const noexcept override { return 1; } virtual uint32_t execute_max_cycles() const noexcept override { return 41; } virtual uint32_t execute_input_lines() const noexcept override { return 2; } @@ -67,15 +68,22 @@ protected: virtual void execute_run() override; virtual void execute_set_input(int inputnum, int state) override; - // device_memory_interface overrides + // device_memory_interface implementation virtual space_config_vector memory_space_config() const override; - // device_state_interface overrides + // device_nvram_interface implementation + virtual bool nvram_read(util::read_stream &file) override; + virtual bool nvram_write(util::write_stream &file) override; + virtual void nvram_default() override; + + // device_state_interface implementation virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; - // device_disasm_interface overrides + // device_disasm_interface implementation virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; + void set_irq_state(uint8_t irqn, bool state); + virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) = 0; template <int P> uint8_t port_r(); @@ -116,6 +124,8 @@ protected: void config_w(uint8_t data); uint8_t init_r(); void init_w(uint8_t data); + uint8_t init2_r(); + void init2_w(uint8_t data); uint8_t option_r(); void option_w(uint8_t data); uint8_t scbd_r(offs_t offset); @@ -156,7 +166,9 @@ private: uint8_t m_adctl; int m_ad_channel; - uint8_t m_irq_state[3]; + uint32_t m_irq_state; + bool m_irq_asserted; + memory_access<16, 0, 0, ENDIANNESS_BIG>::cache m_cache; memory_access<16, 0, 0, ENDIANNESS_BIG>::specific m_program; devcb_read8::array<8> m_port_input_cb; @@ -168,6 +180,8 @@ private: memory_view m_ram_view; memory_view m_reg_view; + memory_view m_eeprom_view; + optional_shared_ptr<uint8_t> m_eeprom_data; const uint16_t m_internal_ram_size; const uint16_t m_reg_block_size; // size of internal I/O space @@ -191,6 +205,7 @@ private: uint8_t m_tmsk2; uint8_t m_pactl; uint8_t m_init; + uint8_t m_init2; protected: uint8_t m_config; @@ -573,6 +588,18 @@ private: uint8_t reg01_r(); }; +class mc68hc11e1_device : public mc68hc11_cpu_device +{ +public: + // construction/destruction + mc68hc11e1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_reset() override; + + virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override; +}; + class mc68hc811e2_device : public mc68hc11_cpu_device { public: @@ -614,8 +641,6 @@ public: mc68hc11m0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual void device_reset() override; - virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override; }; |