summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/cpu.lua10
-rw-r--r--src/devices/bus/odyssey2/chess.cpp2
-rw-r--r--src/devices/cpu/z80/nsc800.cpp79
-rw-r--r--src/devices/cpu/z80/nsc800.h39
-rw-r--r--src/devices/cpu/z80/z80.cpp47
-rw-r--r--src/devices/cpu/z80/z80.h29
-rw-r--r--src/devices/cpu/z80/z80.lst8
-rw-r--r--src/mame/canon/x07.h2
-rw-r--r--src/mame/husky/hunter2.cpp2
-rw-r--r--src/mame/husky/husky.cpp2
-rw-r--r--src/mame/skeleton/i7000.cpp2
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"