diff options
-rw-r--r-- | scripts/src/cpu.lua | 10 | ||||
-rw-r--r-- | src/devices/bus/odyssey2/chess.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/z80/nsc800.cpp | 79 | ||||
-rw-r--r-- | src/devices/cpu/z80/nsc800.h | 39 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.cpp | 47 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.h | 29 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.lst | 8 | ||||
-rw-r--r-- | src/mame/canon/x07.h | 2 | ||||
-rw-r--r-- | src/mame/husky/hunter2.cpp | 2 | ||||
-rw-r--r-- | src/mame/husky/husky.cpp | 2 | ||||
-rw-r--r-- | src/mame/skeleton/i7000.cpp | 2 |
11 files changed, 141 insertions, 81 deletions
diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 85de8acd3c8..2ed01f4913b 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -2972,6 +2972,14 @@ end -------------------------------------------------- -- Zilog Z80 --@src/devices/cpu/z80/z80.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/tmpz84c011.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/tmpz84c015.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/ez80.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/lz8420m.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/mc8123.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/nsc800.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/r800.h,CPUS["Z80"] = true +--@src/devices/cpu/z80/z84c015.h,CPUS["Z80"] = true --@src/devices/cpu/z80/z80n.h,CPUS["Z80N"] = true --@src/devices/cpu/z80/kc82.h,CPUS["KC80"] = true --@src/devices/cpu/z80/kl5c80a12.h,CPUS["KC80"] = true @@ -2993,6 +3001,8 @@ if CPUS["Z80"] or CPUS["KC80"] or CPUS["Z80N"] then MAME_DIR .. "src/devices/cpu/z80/lz8420m.h", MAME_DIR .. "src/devices/cpu/z80/mc8123.cpp", MAME_DIR .. "src/devices/cpu/z80/mc8123.h", + MAME_DIR .. "src/devices/cpu/z80/nsc800.cpp", + MAME_DIR .. "src/devices/cpu/z80/nsc800.h", MAME_DIR .. "src/devices/cpu/z80/r800.cpp", MAME_DIR .. "src/devices/cpu/z80/r800.h", MAME_DIR .. "src/devices/cpu/z80/z84c015.cpp", diff --git a/src/devices/bus/odyssey2/chess.cpp b/src/devices/bus/odyssey2/chess.cpp index 80b807d769e..9122e5fe378 100644 --- a/src/devices/bus/odyssey2/chess.cpp +++ b/src/devices/bus/odyssey2/chess.cpp @@ -15,7 +15,7 @@ Hardware notes: #include "emu.h" #include "chess.h" -#include "cpu/z80/z80.h" +#include "cpu/z80/nsc800.h" #include "machine/gen_latch.h" namespace { diff --git a/src/devices/cpu/z80/nsc800.cpp b/src/devices/cpu/z80/nsc800.cpp new file mode 100644 index 00000000000..bb5f47bb217 --- /dev/null +++ b/src/devices/cpu/z80/nsc800.cpp @@ -0,0 +1,79 @@ +// license:BSD-3-Clause +// copyright-holders:Juergen Buchmueller +/* + + National Semiconductor NSC800 + +*/ + +#include "emu.h" +#include "nsc800.h" + +#include "z80.inc" + +#define LOG_INT (1U << 1) // z80.lst + +//#define VERBOSE (LOG_INT) +#include "logmacro.h" + +#define LOGINT(...) LOGMASKED(LOG_INT, __VA_ARGS__) + + +// device type definition +DEFINE_DEVICE_TYPE(NSC800, nsc800_device, "nsc800", "National Semiconductor NSC800") + +nsc800_device::nsc800_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : z80_device(mconfig, NSC800, tag, owner, clock) +{ +} + + +//------------------------------------------------- +// initialization +//------------------------------------------------- + +void nsc800_device::device_start() +{ + z80_device::device_start(); + + save_item(NAME(m_nsc800_irq_state)); +} + +void nsc800_device::device_reset() +{ + z80_device::device_reset(); + memset(m_nsc800_irq_state, 0, sizeof(m_nsc800_irq_state)); +} + + +//------------------------------------------------- +// execute +//------------------------------------------------- + +void nsc800_device::do_op() +{ + #include "cpu/z80/ncs800.hxx" +} + +void nsc800_device::execute_set_input(int inputnum, int state) +{ + switch (inputnum) + { + case INPUT_LINE_IRQ0: + case NSC800_RSTA: + m_nsc800_irq_state[0] = state; + break; + + case NSC800_RSTB: + m_nsc800_irq_state[1] = state; + break; + + case NSC800_RSTC: + m_nsc800_irq_state[2] = state; + break; + + default: + z80_device::execute_set_input(inputnum, state); + break; + } +} diff --git a/src/devices/cpu/z80/nsc800.h b/src/devices/cpu/z80/nsc800.h new file mode 100644 index 00000000000..c7ccd3c90b8 --- /dev/null +++ b/src/devices/cpu/z80/nsc800.h @@ -0,0 +1,39 @@ +// license:BSD-3-Clause +// copyright-holders:Juergen Buchmueller +#ifndef MAME_CPU_Z80_NSC800_H +#define MAME_CPU_Z80_NSC800_H + +#pragma once + +#include "z80.h" + +enum +{ + NSC800_RSTA = Z80_INPUT_LINE_MAX, + NSC800_RSTB, + NSC800_RSTC +}; + + +class nsc800_device : public z80_device +{ +public: + nsc800_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + // device_t implementation + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + // device_execute_interface implementation + virtual u32 execute_input_lines() const noexcept override { return 7; } + virtual void execute_set_input(int inputnum, int state) override; + + virtual void do_op() override; + u8 m_nsc800_irq_state[3]; // state of NSC800 restart interrupts A, B, C +}; + +DECLARE_DEVICE_TYPE(NSC800, nsc800_device) + + +#endif // MAME_CPU_Z80_NSC800_H diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp index 694c6421cd1..53790c028ca 100644 --- a/src/devices/cpu/z80/z80.cpp +++ b/src/devices/cpu/z80/z80.cpp @@ -680,13 +680,6 @@ void z80_device::device_start() set_icountptr(m_icount); } -void nsc800_device::device_start() -{ - z80_device::device_start(); - - save_item(NAME(m_nsc800_irq_state)); -} - /**************************************************************************** * Do a reset ****************************************************************************/ @@ -707,22 +700,11 @@ void z80_device::device_reset() m_iff2 = 0; } -void nsc800_device::device_reset() -{ - z80_device::device_reset(); - memset(m_nsc800_irq_state, 0, sizeof(m_nsc800_irq_state)); -} - void z80_device::do_op() { #include "cpu/z80/z80.hxx" } -void nsc800_device::do_op() -{ - #include "cpu/z80/ncs800.hxx" -} - /**************************************************************************** * Execute 'cycles' T-states. ****************************************************************************/ @@ -773,28 +755,6 @@ void z80_device::execute_set_input(int inputnum, int state) } } -void nsc800_device::execute_set_input(int inputnum, int state) -{ - switch (inputnum) - { - case NSC800_RSTA: - m_nsc800_irq_state[NSC800_RSTA] = state; - break; - - case NSC800_RSTB: - m_nsc800_irq_state[NSC800_RSTB] = state; - break; - - case NSC800_RSTC: - m_nsc800_irq_state[NSC800_RSTC] = state; - break; - - default: - z80_device::execute_set_input(inputnum, state); - break; - } -} - /************************************************************************** * STATE IMPORT/EXPORT **************************************************************************/ @@ -901,10 +861,3 @@ device_memory_interface::space_config_vector z80_device::memory_space_config() c } DEFINE_DEVICE_TYPE(Z80, z80_device, "z80", "Zilog Z80") - -nsc800_device::nsc800_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : z80_device(mconfig, NSC800, tag, owner, clock) -{ -} - -DEFINE_DEVICE_TYPE(NSC800, nsc800_device, "nsc800", "National Semiconductor NSC800") diff --git a/src/devices/cpu/z80/z80.h b/src/devices/cpu/z80/z80.h index 39c8ec023f1..6822d81ea53 100644 --- a/src/devices/cpu/z80/z80.h +++ b/src/devices/cpu/z80/z80.h @@ -9,12 +9,11 @@ enum { - NSC800_RSTA = INPUT_LINE_IRQ0 + 1, - NSC800_RSTB, - NSC800_RSTC, - Z80_INPUT_LINE_WAIT, + Z80_INPUT_LINE_WAIT = INPUT_LINE_IRQ0 + 1, Z80_INPUT_LINE_BOGUSWAIT, // WAIT pin implementation used to be nonexistent, please remove this when all drivers are updated with Z80_INPUT_LINE_WAIT - Z80_INPUT_LINE_BUSRQ + Z80_INPUT_LINE_BUSRQ, + + Z80_INPUT_LINE_MAX }; enum @@ -194,25 +193,5 @@ protected: DECLARE_DEVICE_TYPE(Z80, z80_device) -class nsc800_device : public z80_device -{ -public: - nsc800_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - -protected: - // device_t implementation - virtual void device_start() override ATTR_COLD; - virtual void device_reset() override ATTR_COLD; - - // device_execute_interface implementation - virtual u32 execute_input_lines() const noexcept override { return 7; } - virtual void execute_set_input(int inputnum, int state) override; - - virtual void do_op() override; - u8 m_nsc800_irq_state[4]; // state of NSC800 restart interrupts A, B, C -}; - -DECLARE_DEVICE_TYPE(NSC800, nsc800_device) - #endif // MAME_CPU_Z80_Z80_H diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst index 7426e8ae230..5b86445799e 100644 --- a/src/devices/cpu/z80/z80.lst +++ b/src/devices/cpu/z80/z80.lst @@ -627,15 +627,15 @@ macro nsc800_take_interrupt m_iff1 = m_iff2 = 0; // 'interrupt latency' cycles + 7 - if (m_nsc800_irq_state[NSC800_RSTA]) { + if (m_nsc800_irq_state[0]) { TDAT = PC; call wm16_sp PC = 0x003c; - } else if (m_nsc800_irq_state[NSC800_RSTB]) { + } else if (m_nsc800_irq_state[1]) { TDAT = PC; call wm16_sp PC = 0x0034; - } else if (m_nsc800_irq_state[NSC800_RSTC]) { + } else if (m_nsc800_irq_state[2]) { TDAT = PC; call wm16_sp PC = 0x002c; @@ -652,7 +652,7 @@ macro nsc800_take_interrupt macro ncs800:check_interrupts if (m_nmi_pending) { call take_nmi - } else if ((m_nsc800_irq_state[NSC800_RSTA] != CLEAR_LINE || m_nsc800_irq_state[NSC800_RSTB] != CLEAR_LINE || m_nsc800_irq_state[NSC800_RSTC] != CLEAR_LINE) && m_iff1 && !m_after_ei) { + } else if ((m_nsc800_irq_state[0] != CLEAR_LINE || m_nsc800_irq_state[1] != CLEAR_LINE || m_nsc800_irq_state[2] != CLEAR_LINE) && m_iff1 && !m_after_ei) { call nsc800_take_interrupt } else if (m_irq_state != CLEAR_LINE && m_iff1 && !m_after_ei) { call take_interrupt diff --git a/src/mame/canon/x07.h b/src/mame/canon/x07.h index c0b999b7a55..cb773ec1bb0 100644 --- a/src/mame/canon/x07.h +++ b/src/mame/canon/x07.h @@ -10,7 +10,7 @@ #pragma once -#include "cpu/z80/z80.h" +#include "cpu/z80/nsc800.h" #include "sound/beep.h" #include "machine/nvram.h" #include "machine/ram.h" diff --git a/src/mame/husky/hunter2.cpp b/src/mame/husky/hunter2.cpp index 7a1f26b294f..c8d3275cf1f 100644 --- a/src/mame/husky/hunter2.cpp +++ b/src/mame/husky/hunter2.cpp @@ -32,7 +32,7 @@ #include "emu.h" #include "bus/rs232/rs232.h" -#include "cpu/z80/z80.h" +#include "cpu/z80/nsc800.h" #include "machine/mm58274c.h" #include "machine/nsc810.h" #include "machine/ram.h" diff --git a/src/mame/husky/husky.cpp b/src/mame/husky/husky.cpp index 5859e75ea02..4591483cb0f 100644 --- a/src/mame/husky/husky.cpp +++ b/src/mame/husky/husky.cpp @@ -19,7 +19,7 @@ ****************************************************************************/ #include "emu.h" -#include "cpu/z80/z80.h" +#include "cpu/z80/nsc800.h" #include "machine/mm58274c.h" #include "machine/nsc810.h" #include "machine/ram.h" diff --git a/src/mame/skeleton/i7000.cpp b/src/mame/skeleton/i7000.cpp index eb65cb3c8e8..abb15ecf4c9 100644 --- a/src/mame/skeleton/i7000.cpp +++ b/src/mame/skeleton/i7000.cpp @@ -45,7 +45,7 @@ #include "emu.h" #include "bus/generic/carts.h" #include "bus/generic/slot.h" -#include "cpu/z80/z80.h" //CPU was actually a NSC800 (Z80 compatible) +#include "cpu/z80/nsc800.h" #include "machine/i8279.h" #include "machine/pit8253.h" #include "sound/spkrdev.h" |