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.h81
1 files changed, 58 insertions, 23 deletions
diff --git a/src/devices/cpu/mc68hc11/mc68hc11.h b/src/devices/cpu/mc68hc11/mc68hc11.h
index 33b6ab4be33..acba3a59064 100644
--- a/src/devices/cpu/mc68hc11/mc68hc11.h
+++ b/src/devices/cpu/mc68hc11/mc68hc11.h
@@ -8,11 +8,13 @@
enum {
MC68HC11_IRQ_LINE = 0,
- MC68HC11_TOC1_LINE = 1
+ MC68HC11_TOC1_LINE = 1,
+ MC68HC11_RTI_LINE = 2
};
DECLARE_DEVICE_TYPE(MC68HC11A1, mc68hc11a1_device)
DECLARE_DEVICE_TYPE(MC68HC11D0, mc68hc11d0_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)
@@ -49,7 +51,7 @@ public:
auto out_spi2_data_callback() { return m_spi2_data_output_cb.bind(); }
protected:
- mc68hc11_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t internal_ram_size, uint16_t reg_block_size, uint8_t init_value, address_map_constructor reg_map);
+ 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;
@@ -74,6 +76,8 @@ protected:
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) = 0;
+
template <int P> uint8_t port_r();
template <int P> void port_w(uint8_t data);
template <int P> uint8_t ddr_r();
@@ -81,15 +85,20 @@ protected:
uint8_t pioc_r();
uint8_t tcnt_r(offs_t offset);
void tcnt_w(offs_t offset, uint8_t data);
- uint8_t toc1_r(offs_t offset);
- void toc1_w(offs_t offset, uint8_t data);
+ uint8_t toc_r(offs_t offset);
+ void toc_w(offs_t offset, uint8_t data);
uint8_t tmsk1_r();
void tmsk1_w(uint8_t data);
uint8_t tflg1_r();
void tflg1_w(uint8_t data);
+ uint8_t tflg2_r();
+ void tflg2_w(uint8_t data);
+ uint8_t tmsk2_r();
void tmsk2_w(uint8_t data);
uint8_t pactl_r();
void pactl_w(uint8_t data);
+ uint8_t pactl_ddra_r();
+ void pactl_ddra_w(uint8_t data);
template <int N> uint8_t spcr_r();
template <int N> uint8_t spsr_r();
template <int N> uint8_t spdr_r();
@@ -98,8 +107,13 @@ protected:
void adctl_w(uint8_t data);
uint8_t adr_r(offs_t offset);
uint8_t opt2_r();
+ uint8_t config_r();
+ uint8_t config_1s_r();
+ void config_w(uint8_t data);
uint8_t init_r();
void init_w(uint8_t data);
+ uint8_t option_r();
+ void option_w(uint8_t data);
uint8_t scbd_r(offs_t offset);
uint8_t sccr1_r();
uint8_t sccr2_r();
@@ -109,8 +123,6 @@ protected:
private:
address_space_config m_program_config;
- address_space_config m_data_config;
- address_space_config m_io_config;
union {
struct {
@@ -140,11 +152,9 @@ private:
uint8_t m_adctl;
int m_ad_channel;
- uint8_t m_irq_state[2];
+ uint8_t m_irq_state[3];
memory_access<16, 0, 0, ENDIANNESS_BIG>::cache m_cache;
memory_access<16, 0, 0, ENDIANNESS_BIG>::specific m_program;
- memory_access<11, 0, 0, ENDIANNESS_BIG>::specific m_data;
- memory_access< 8, 0, 0, ENDIANNESS_BIG>::specific m_io;
devcb_read8::array<8> m_port_input_cb;
devcb_write8::array<8> m_port_output_cb;
devcb_read8::array<8> m_analog_cb;
@@ -152,25 +162,37 @@ private:
devcb_write8 m_spi2_data_output_cb;
int m_icount;
- int m_ram_position;
- int m_reg_position;
+ memory_view m_ram_view;
+ memory_view m_reg_view;
const uint16_t m_internal_ram_size;
const uint16_t m_reg_block_size; // size of internal I/O space
+ const uint16_t m_internal_rom_size;
+ const uint16_t m_internal_eeprom_size;
const uint8_t m_init_value; // default value for INIT register
+ const uint8_t m_config_mask;
+ const uint8_t m_option_mask;
uint8_t m_wait_state;
uint8_t m_stop_state;
uint8_t m_tflg1;
uint8_t m_tmsk1;
- uint16_t m_toc1;
+ uint16_t m_toc[5];
uint16_t m_tcnt;
// uint8_t m_por;
- uint8_t m_pr;
+ uint8_t m_tflg2;
+ uint8_t m_tmsk2;
uint8_t m_pactl;
+ uint8_t m_init;
+
+protected:
+ uint8_t m_config;
+ uint8_t m_option;
+private:
uint64_t m_frc_base;
+ uint64_t m_reset_time;
typedef void (mc68hc11_cpu_device::*ophandler)();
struct hc11_opcode_list_struct
@@ -186,7 +208,7 @@ private:
ophandler hc11_optable_page3[256];
ophandler hc11_optable_page4[256];
- void ram_map(address_map &map);
+ void internal_map(address_map &map);
uint8_t FETCH();
uint16_t FETCH16();
@@ -524,10 +546,10 @@ public:
protected:
virtual void device_reset() override;
- uint8_t pactl_r();
- void pactl_w(uint8_t data);
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
- void io_map(address_map &map);
+ uint8_t pactl_ddra7_r();
+ void pactl_ddra7_w(uint8_t data);
};
class mc68hc11d0_device : public mc68hc11_cpu_device
@@ -539,10 +561,19 @@ public:
protected:
virtual void device_reset() override;
- uint8_t pactl_r();
- void pactl_w(uint8_t data);
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
+};
+
+class mc68hc811e2_device : public mc68hc11_cpu_device
+{
+public:
+ // construction/destruction
+ mc68hc811e2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_reset() override;
- void io_map(address_map &map);
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
};
class mc68hc11f1_device : public mc68hc11_cpu_device
@@ -552,7 +583,9 @@ public:
mc68hc11f1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- void io_map(address_map &map);
+ virtual void device_reset() override;
+
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
};
class mc68hc11k1_device : public mc68hc11_cpu_device
@@ -562,7 +595,7 @@ public:
mc68hc11k1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- void io_map(address_map &map);
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
};
class mc68hc11m0_device : public mc68hc11_cpu_device
@@ -572,7 +605,9 @@ public:
mc68hc11m0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- void io_map(address_map &map);
+ virtual void device_reset() override;
+
+ virtual void mc68hc11_reg_map(memory_view::memory_view_entry &block, offs_t base) override;
};
#endif // MAME_CPU_MC68HC11_MC68HC11_H