summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mc68hc11/mc68hc11.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mc68hc11/mc68hc11.h')
-rw-r--r--src/devices/cpu/mc68hc11/mc68hc11.h51
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;
};