summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6805/m6805.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6805/m6805.cpp')
-rw-r--r--src/devices/cpu/m6805/m6805.cpp348
1 files changed, 86 insertions, 262 deletions
diff --git a/src/devices/cpu/m6805/m6805.cpp b/src/devices/cpu/m6805/m6805.cpp
index c949cb21b23..5feef38faef 100644
--- a/src/devices/cpu/m6805/m6805.cpp
+++ b/src/devices/cpu/m6805/m6805.cpp
@@ -242,20 +242,23 @@ const m6805_base_device::op_handler_table m6805_base_device::s_hc_b_ops =
#undef big
+// to prevent the possibility of MAME locking up, don't use 0 cycles here
+#define XX 4 // illegal opcode unknown cycle count
+
const m6805_base_device::cycle_count_table m6805_base_device::s_hmos_cycles =
{
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/*0*/ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
/*1*/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/*2*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- /*3*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6,
- /*4*/ 4, 0, 0, 4, 4, 0, 4, 4, 4, 4, 4, 0, 4, 4, 0, 4,
- /*5*/ 4, 0, 0, 4, 4, 0, 4, 4, 4, 4, 4, 0, 4, 4, 0, 4,
- /*6*/ 7, 0, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7,
- /*7*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6,
- /*8*/ 9, 6, 0,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /*9*/ 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- /*A*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 8, 2, 0,
+ /*3*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 6,XX, 6,
+ /*4*/ 4,XX,XX, 4, 4,XX, 4, 4, 4, 4, 4,XX, 4, 4,XX, 4,
+ /*5*/ 4,XX,XX, 4, 4,XX, 4, 4, 4, 4, 4,XX, 4, 4,XX, 4,
+ /*6*/ 7,XX,XX, 7, 7,XX, 7, 7, 7, 7, 7,XX, 7, 7,XX, 7,
+ /*7*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 6,XX, 6,
+ /*8*/ 9, 6,XX,11,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,
+ /*9*/ XX,XX,XX,XX,XX,XX,XX, 2, 2, 2, 2, 2, 2, 2,XX, 2,
+ /*A*/ 2, 2, 2, 2, 2, 2, 2,XX, 2, 2, 2, 2,XX, 8, 2,XX,
/*B*/ 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 3, 7, 4, 5,
/*C*/ 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 4, 8, 5, 6,
/*D*/ 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 5, 9, 6, 7,
@@ -269,14 +272,14 @@ const m6805_base_device::cycle_count_table m6805_base_device::s_cmos_cycles =
/*0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*1*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- /*3*/ 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 4, 0, 5,
- /*4*/ 3, 0, 0, 3, 3, 0, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3,
- /*5*/ 3, 0, 0, 3, 3, 0, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3,
- /*6*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 5, 0, 6,
- /*7*/ 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 4, 0, 5,
- /*8*/ 9, 6, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- /*9*/ 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- /*A*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 6, 2, 0,
+ /*3*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*4*/ 3,XX,XX, 3, 3,XX, 3, 3, 3, 3, 3,XX, 3, 3,XX, 3,
+ /*5*/ 3,XX,XX, 3, 3,XX, 3, 3, 3, 3, 3,XX, 3, 3,XX, 3,
+ /*6*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 5,XX, 6,
+ /*7*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*8*/ 9, 6,XX,10,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX, 2, 2,
+ /*9*/ XX,XX,XX,XX,XX,XX,XX, 2, 2, 2, 2, 2, 2, 2,XX, 2,
+ /*A*/ 2, 2, 2, 2, 2, 2, 2,XX, 2, 2, 2, 2,XX, 6, 2,XX,
/*B*/ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 2, 5, 3, 4,
/*C*/ 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 3, 6, 4, 5,
/*D*/ 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 4, 7, 5, 6,
@@ -290,14 +293,14 @@ const m6805_base_device::cycle_count_table m6805_base_device::s_hc_cycles =
/*0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*1*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- /*3*/ 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 4, 0, 5,
- /*4*/ 3, 0,11, 3, 3, 0, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3,
- /*5*/ 3, 0, 0, 3, 3, 0, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3,
- /*6*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 5, 0, 6,
- /*7*/ 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 4, 0, 5,
- /*8*/ 9, 6, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- /*9*/ 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- /*A*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 6, 2, 0,
+ /*3*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*4*/ 3,XX,11, 3, 3,XX, 3, 3, 3, 3, 3,XX, 3, 3,XX, 3,
+ /*5*/ 3,XX,XX, 3, 3,XX, 3, 3, 3, 3, 3,XX, 3, 3,XX, 3,
+ /*6*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 5,XX, 6,
+ /*7*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*8*/ 9, 6,XX,10,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX, 2, 2,
+ /*9*/ XX,XX,XX,XX,XX,XX,XX, 2, 2, 2, 2, 2, 2, 2,XX, 2,
+ /*A*/ 2, 2, 2, 2, 2, 2, 2,XX, 2, 2, 2, 2,XX, 6, 2,XX,
/*B*/ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 2, 5, 3, 4,
/*C*/ 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 3, 6, 4, 5,
/*D*/ 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 4, 7, 5, 6,
@@ -305,6 +308,50 @@ const m6805_base_device::cycle_count_table m6805_base_device::s_hc_cycles =
/*F*/ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 2, 5, 3, 4
};
+const m6805_base_device::cycle_count_table m6805_base_device::s_hd6305_cycles =
+{
+ /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
+ /*0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ /*1*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ /*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ /*3*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*4*/ 2,XX,XX, 2, 2,XX, 2, 2, 2, 2, 2,XX, 2, 2,XX, 2,
+ /*5*/ 2,XX,XX, 2, 2,XX, 2, 2, 2, 2, 2,XX, 2, 2,XX, 2,
+ /*6*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 5,XX, 6,
+ /*7*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*8*/ 8, 5,XX,10,XX,XX,XX,XX,XX,XX,XX,XX,XX, 2, 4, 4,
+ /*9*/ XX,XX,XX,XX,XX,XX,XX, 2, 1, 1, 2, 2, 2, 1,XX, 2,
+ /*A*/ 2, 2, 2, 2, 2, 2, 2,XX, 2, 2, 2, 2,XX, 5, 2,XX,
+ /*B*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 5, 3, 3,
+ /*C*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 4, 4,
+ /*D*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 5, 5,
+ /*E*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 5, 4, 4,
+ /*F*/ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 2, 5, 3, 4
+};
+
+const m6805_base_device::cycle_count_table m6805_base_device::s_hd63705_cycles =
+{
+ /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
+ /*0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ /*1*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ /*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ /*3*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*4*/ 2,XX,11, 2, 2,XX, 2, 2, 2, 2, 2,XX, 2, 2,XX, 2,
+ /*5*/ 2,XX,XX, 2, 2,XX, 2, 2, 2, 2, 2,XX, 2, 2,XX, 2,
+ /*6*/ 6,XX,XX, 6, 6,XX, 6, 6, 6, 6, 6,XX, 6, 5,XX, 6,
+ /*7*/ 5,XX,XX, 5, 5,XX, 5, 5, 5, 5, 5,XX, 5, 4,XX, 5,
+ /*8*/ 9, 6,XX,11,XX,XX,XX,XX,XX,XX,XX,XX,XX, 2, 4, 4,
+ /*9*/ XX,XX,XX,XX,XX,XX,XX, 2, 1, 1, 2, 2, 2, 1,XX, 2,
+ /*A*/ 2, 2, 2, 2, 2, 2, 2,XX, 2, 2, 2, 2,XX, 6, 2,XX,
+ /*B*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 6, 3, 3,
+ /*C*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 7, 4, 4,
+ /*D*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 7, 5, 5,
+ /*E*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 4, 4,
+ /*F*/ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 2, 6, 3, 4
+};
+
+#undef XX // /illegal opcode unknown cc
+
//-------------------------------------------------
// m6809_base_device - constructor
@@ -349,11 +396,7 @@ void m6805_base_device::device_start()
space(AS_PROGRAM).specific(m_program13);
}
- // get the minimum not including the zero placeholders for illegal instructions
- m_min_cycles = *std::min_element(
- std::begin(m_params.m_cycles),
- std::end(m_params.m_cycles),
- [] (u8 x, u8 y) { return u8(x - 1) < u8(y - 1); });
+ m_min_cycles = *std::min_element(std::begin(m_params.m_cycles), std::end(m_params.m_cycles));
m_max_cycles = *std::max_element(std::begin(m_params.m_cycles), std::end(m_params.m_cycles));
// set our instruction counter
@@ -395,7 +438,7 @@ void m6805_base_device::device_reset()
m_nmi_state = 0;
- /* IRQ disabled */
+ // IRQ disabled
SEI;
if (m_params.m_addr_width > 14)
@@ -450,21 +493,23 @@ bool m6805_base_device::test_il()
void m6805_base_device::interrupt_vector()
{
+ m_pending_interrupts &= ~(1 << M6805_IRQ_LINE);
if (m_params.m_addr_width > 14)
rm16<true>(0xfffa & m_params.m_vector_mask, m_pc);
else
rm16<false>(0xfffa & m_params.m_vector_mask, m_pc);
}
-/* Generate interrupts */
+// Generate interrupts
void m6805_base_device::interrupt()
{
- /* the 6805 latches interrupt requests internally, so we don't clear */
- /* pending_interrupts until the interrupt is taken, no matter what the */
- /* external IRQ pin does. */
+ // the 6805 latches interrupt requests internally, so we don't clear
+ // pending_interrupts until the interrupt is taken, no matter what the
+ // external IRQ pin does.
- if (BIT(m_pending_interrupts, HD63705_INT_NMI))
+ if (m_pending_interrupts != 0 && (CC & IFLAG) == 0)
{
+ // standard IRQ
if (m_params.m_addr_width > 14) {
pushword<true>(m_pc);
pushbyte<true>(m_x);
@@ -479,48 +524,15 @@ void m6805_base_device::interrupt()
pushbyte<false>(m_cc);
}
SEI;
- /* no vectors supported, just do the callback to clear irq_state if needed */
+
+ // no vectors supported, just do the callback to clear irq_state if needed
standard_irq_callback(0, m_pc.w.l);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ffc, m_pc);
- else
- rm16<false>(0x1ffc, m_pc);
- m_pending_interrupts &= ~(1 << HD63705_INT_NMI);
+ interrupt_vector();
m_icount -= 11;
burn_cycles(11);
}
- else if ((m_pending_interrupts & ((1 << M6805_IRQ_LINE) | HD63705_INT_MASK)) != 0)
- {
- if ((CC & IFLAG) == 0)
- {
- /* standard IRQ */
- if (m_params.m_addr_width > 14) {
- pushword<true>(m_pc);
- pushbyte<true>(m_x);
- pushbyte<true>(m_a);
- pushbyte<true>(m_cc);
- }
- else
- {
- pushword<false>(m_pc);
- pushbyte<false>(m_x);
- pushbyte<false>(m_a);
- pushbyte<false>(m_cc);
- }
- SEI;
- /* no vectors supported, just do the callback to clear irq_state if needed */
- standard_irq_callback(0, m_pc.w.l);
-
- interrupt_vector();
-
- m_pending_interrupts &= ~(1 << M6805_IRQ_LINE);
-
- m_icount -= 11;
- burn_cycles(11);
- }
- }
}
@@ -581,21 +593,10 @@ uint32_t m6805_base_device::execute_max_cycles() const noexcept
}
-//-------------------------------------------------
-// execute_input_lines - return the number of
-// input/interrupt lines
-//-------------------------------------------------
-
-uint32_t m6805_base_device::execute_input_lines() const noexcept
-{
- return 9;
-}
-
-
-/* execute instructions on this CPU until icount expires */
+// execute instructions on this CPU until icount expires
void m6805_base_device::execute_run()
{
- S = SP_ADJUST( S ); /* Taken from CPU_SET_CONTEXT when pointer'afying */
+ S = SP_ADJUST( S ); // Taken from CPU_SET_CONTEXT when pointer'ifying
do
{
@@ -632,6 +633,7 @@ void m6805_base_device::execute_set_input(int inputnum, int state)
/****************************************************************************
* M68HC05EG section
****************************************************************************/
+
m68hc05eg_device::m68hc05eg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: m6805_base_device(
mconfig,
@@ -684,183 +686,5 @@ std::unique_ptr<util::disasm_interface> m68hc05eg_device::create_disassembler()
return std::make_unique<m68hc05_disassembler>();
}
-/****************************************************************************
- * HD63705 section
- ****************************************************************************/
-hd6305_device::hd6305_device(
- machine_config const &mconfig,
- char const *tag,
- device_t *owner,
- uint32_t clock,
- device_type const type,
- configuration_params const &params,
- address_map_constructor internal_map)
- : m6805_base_device(mconfig, tag, owner, clock, type, params, internal_map)
-{
-}
-
-hd6305v0_device::hd6305v0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : hd6305_device(
- mconfig,
- tag,
- owner,
- clock,
- HD6305V0,
- { s_hmos_s_ops, s_hmos_cycles, 14, 0x00ff, 0x00c0, 0x1fff, 0x1ffc },
- address_map_constructor(FUNC(hd6305v0_device::internal_map), this))
-{
-}
-
-void hd6305v0_device::internal_map(address_map &map)
-{
- // TODO: ports, timer, SCI
- map(0x0040, 0x00ff).ram();
- map(0x1000, 0x1fff).rom().region(DEVICE_SELF, 0);
-}
-
-hd6305y2_device::hd6305y2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : hd6305_device(
- mconfig,
- tag,
- owner,
- clock,
- HD6305Y2,
- { s_hmos_s_ops, s_hmos_cycles, 14, 0x00ff, 0x00c0, 0x1fff, 0x1ffc },
- address_map_constructor(FUNC(hd6305y2_device::internal_map), this))
-{
-}
-
-void hd6305y2_device::internal_map(address_map &map)
-{
- // TODO: ports, timer, SCI
- map(0x0040, 0x013f).ram();
-}
-
-hd63705z0_device::hd63705z0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : hd6305_device(
- mconfig,
- tag,
- owner,
- clock,
- HD63705Z0,
- { s_hmos_b_ops, s_hmos_cycles, 16, 0x017f, 0x0100, 0x1fff, 0x1ffa },
- address_map_constructor(FUNC(hd63705z0_device::internal_map), this))
-{
-}
-
-void hd63705z0_device::internal_map(address_map &map)
-{
- // TODO: ports, timer, SCI
- map(0x0040, 0x01bf).ram();
- map(0x01c0, 0x1fff).rom().region(DEVICE_SELF, 0x01c0);
-}
-
-void hd6305_device::device_reset()
-{
- m6805_base_device::device_reset();
-}
-
-void hd6305_device::execute_set_input(int inputnum, int state)
-{
- if (inputnum == INPUT_LINE_NMI)
- {
- if (m_nmi_state != state)
- {
- m_nmi_state = state;
-
- if (state != CLEAR_LINE)
- {
- m_pending_interrupts |= 1 << HD63705_INT_NMI;
- }
- }
- }
- else if (inputnum <= HD63705_INT_ADCONV)
- {
- if (m_irq_state[inputnum] != state)
- {
- m_irq_state[inputnum] = state;
-
- if (state != CLEAR_LINE)
- {
- m_pending_interrupts |= 1 << inputnum;
- }
- }
- }
-}
-
-void hd6305_device::interrupt_vector()
-{
- /* Need to add emulation of other interrupt sources here KW-2/4/99 */
- /* This is just a quick patch for Namco System 2 operation */
-
- if ((m_pending_interrupts & (1 << HD63705_INT_IRQ1)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_IRQ1);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ff8, m_pc);
- else
- rm16<false>(0x1ff8, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_IRQ2)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_IRQ2);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1fec, m_pc);
- else
- rm16<false>(0x1fec, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_ADCONV)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_ADCONV);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1fea, m_pc);
- else
- rm16<false>(0x1fea, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_TIMER1)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_TIMER1);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ff6, m_pc);
- else
- rm16<false>(0x1ff6, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_TIMER2)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_TIMER2);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ff4, m_pc);
- else
- rm16<false>(0x1ff4, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_TIMER3)) != 0)
- {
- m_pending_interrupts &= ~(1<<HD63705_INT_TIMER3);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ff2, m_pc);
- else
- rm16<false>(0x1ff2, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_PCI)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_PCI);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1ff0, m_pc);
- else
- rm16<false>(0x1ff0, m_pc);
- }
- else if ((m_pending_interrupts & (1 << HD63705_INT_SCI)) != 0)
- {
- m_pending_interrupts &= ~(1 << HD63705_INT_SCI);
- if (m_params.m_addr_width > 14)
- rm16<true>(0x1fee, m_pc);
- else
- rm16<false>(0x1fee, m_pc);
- }
-}
-
DEFINE_DEVICE_TYPE(M68HC05EG, m68hc05eg_device, "m68hc05eg", "Motorola MC68HC05EG")
-DEFINE_DEVICE_TYPE(HD6305V0, hd6305v0_device, "hd6305v0", "Hitachi HD6305V0")
-DEFINE_DEVICE_TYPE(HD6305Y2, hd6305y2_device, "hd6305y2", "Hitachi HD6305Y2")
-DEFINE_DEVICE_TYPE(HD63705Z0, hd63705z0_device, "hd63705z0", "Hitachi HD63705Z0")