summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6805/m68hc05.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6805/m68hc05.cpp')
-rw-r--r--src/devices/cpu/m6805/m68hc05.cpp85
1 files changed, 84 insertions, 1 deletions
diff --git a/src/devices/cpu/m6805/m68hc05.cpp b/src/devices/cpu/m6805/m68hc05.cpp
index 545451c90da..a0f459a20f8 100644
--- a/src/devices/cpu/m6805/m68hc05.cpp
+++ b/src/devices/cpu/m6805/m68hc05.cpp
@@ -94,6 +94,7 @@ DEFINE_DEVICE_TYPE(M68HC05C4, m68hc05c4_device, "m68hc05c4", "Motorola MC6
DEFINE_DEVICE_TYPE(M68HC05C8, m68hc05c8_device, "m68hc05c8", "Motorola MC68HC05C8")
DEFINE_DEVICE_TYPE(M68HC705C8A, m68hc705c8a_device, "m68hc705c8a", "Motorola MC68HC705C8A")
DEFINE_DEVICE_TYPE(M68HC05L9, m68hc05l9_device, "m68hc05l9", "Motorola MC68HC05L9")
+DEFINE_DEVICE_TYPE(M68HC05L11, m68hc05l11_device, "m68hc05l11", "Motorola MC68HC05L11")
@@ -955,7 +956,7 @@ void m68hc05l9_device::l9_map(address_map &map)
// 0x000c hour alarm
// 0x000d BAUD
// 0x000e SCCR1
- // 0x000f SCCR2l9_device
+ // 0x000f SCCR2
// 0x0010 SCSR
// 0x0011 SCDR
map(0x0012, 0x0012).rw(FUNC(m68hc05l9_device::tcr_r), FUNC(m68hc05l9_device::tcr_w));
@@ -1008,3 +1009,85 @@ std::unique_ptr<util::disasm_interface> m68hc05l9_device::create_disassembler()
{
return std::make_unique<m68hc05_disassembler>(m68hc05c4_syms);
}
+
+
+
+/****************************************************************************
+ * MC68HC05L11 device
+ ****************************************************************************/
+
+void m68hc05l11_device::l11_map(address_map &map)
+{
+ map(0x0000, 0x0003).rw(FUNC(m68hc05l11_device::port_read), FUNC(m68hc05l11_device::port_latch_w));
+ // 0x0004 port E
+ // 0x0005 port F
+ map(0x0006, 0x0008).rw(FUNC(m68hc05l11_device::port_ddr_r), FUNC(m68hc05l11_device::port_ddr_w));
+ // 0x0009 port E direction
+ // 0x000a port F direction
+ // 0x000b minute alarm
+ // 0x000c hour alarm
+ // 0x000d BAUD
+ // 0x000e SCCR1
+ // 0x000f SCCR2
+ // 0x0010 SCSR
+ // 0x0011 SCDR
+ map(0x0012, 0x0012).rw(FUNC(m68hc05l11_device::tcr_r), FUNC(m68hc05l11_device::tcr_w));
+ map(0x0013, 0x0013).r(FUNC(m68hc05l11_device::tsr_r));
+ map(0x0014, 0x0015).r(FUNC(m68hc05l11_device::icr_r));
+ map(0x0016, 0x0017).rw(FUNC(m68hc05l11_device::ocr_r), FUNC(m68hc05l11_device::ocr_w));
+ map(0x0018, 0x001b).r(FUNC(m68hc05l11_device::timer_r));
+ // 0x001c-0x001d output compare 2
+ // 0x001e reserved
+ // 0x001f RTC interrupt status
+ // 0x0020 count down
+ // 0x0021 control 1
+ // 0x0022 SPCR
+ // 0x0023 SPSR
+ // 0x0024 SPDR
+ // 0x0025 control 2
+ // 0x0026 TONEA
+ // 0x0027 TONEB
+ // 0x0028-0x0033 LCD registers
+ // 0x0033 reserved
+ // 0x0034-0x003b MMU registers
+ // 0x003c hours
+ // 0x003d minutes
+ // 0x003e seconds
+ // 0x003f reserved
+ map(0x0040, 0x01ff).ram(); // RAM/stack
+ // 0x0200-0x6fff external memory (common area)
+ map(0x7000, 0x7dff).rom().region(DEVICE_SELF, 0); // user ROM
+ map(0x7e00, 0x7fef).rom().region(DEVICE_SELF, 0xe00); // self-check (incl. vectors)
+ map(0x7ff0, 0x7fff).rom().region(DEVICE_SELF, 0xff0); // user vectors
+ // 0x8000-0x7fffff external memory (banked in four 8K segments)
+}
+
+
+m68hc05l11_device::m68hc05l11_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock)
+ : m68hc05_device(
+ mconfig,
+ tag,
+ owner,
+ clock,
+ M68HC05L11,
+ 16, // FIXME: 16 logical mapped to 23 physical
+ address_map_constructor(FUNC(m68hc05l11_device::l11_map), this))
+{
+ set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xff }});
+}
+
+
+
+void m68hc05l11_device::device_start()
+{
+ m68hc05_device::device_start();
+
+ add_port_state(std::array<bool, PORT_COUNT>{{ true, true, true, false }});
+ add_timer_state();
+}
+
+
+std::unique_ptr<util::disasm_interface> m68hc05l11_device::create_disassembler()
+{
+ return std::make_unique<m68hc05_disassembler>(m68hc05c4_syms);
+}