summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/upd7810
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2014-06-11 10:35:47 +0000
committer Dirk Best <mail@dirk-best.de>2014-06-11 10:35:47 +0000
commite6feb0a07e115e525525309b1f3302dd2a0a29ec (patch)
tree20fe9f6eeeb74dff93db1096e649e45686bb451d /src/emu/cpu/upd7810
parent5306fe407f2cdd91cc733dcda08a419a8ad46164 (diff)
upd7810: reorganize, compile source files seperately instead of
including them into the main source
Diffstat (limited to 'src/emu/cpu/upd7810')
-rw-r--r--src/emu/cpu/upd7810/upd7810.c161
-rw-r--r--src/emu/cpu/upd7810/upd7810.h42
-rw-r--r--src/emu/cpu/upd7810/upd7810_dasm.c (renamed from src/emu/cpu/upd7810/7810dasm.c)0
-rw-r--r--src/emu/cpu/upd7810/upd7810_macros.h144
-rw-r--r--src/emu/cpu/upd7810/upd7810_opcodes.c (renamed from src/emu/cpu/upd7810/7810ops.inc)4
-rw-r--r--src/emu/cpu/upd7810/upd7810_table.c (renamed from src/emu/cpu/upd7810/7810tbl.inc)2
6 files changed, 193 insertions, 160 deletions
diff --git a/src/emu/cpu/upd7810/upd7810.c b/src/emu/cpu/upd7810/upd7810.c
index d4a6ccb8de0..1232fd20271 100644
--- a/src/emu/cpu/upd7810/upd7810.c
+++ b/src/emu/cpu/upd7810/upd7810.c
@@ -407,6 +407,7 @@ STOP 01001000 10111011 12 stop
#include "emu.h"
#include "debugger.h"
#include "upd7810.h"
+#include "upd7810_macros.h"
const device_type UPD7810 = &device_creator<upd7810_device>;
@@ -541,162 +542,6 @@ offs_t upd78c05_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
return CPU_DISASSEMBLE_NAME(upd78c05)(this, buffer, pc, oprom, opram, options);
}
-
-#define CY 0x01
-#define F1 0x02
-#define L0 0x04
-#define L1 0x08
-#define HC 0x10
-#define SK 0x20
-#define Z 0x40
-#define F7 0x80
-
-/* IRR flags */
-#define INTNMI 0x0001
-#define INTFT0 0x0002
-#define INTFT1 0x0004
-#define INTF1 0x0008
-#define INTF2 0x0010
-#define INTFE0 0x0020
-#define INTFE1 0x0040
-#define INTFEIN 0x0080
-#define INTFAD 0x0100
-#define INTFSR 0x0200
-#define INTFST 0x0400
-#define INTER 0x0800
-#define INTOV 0x1000
-#define INTF0 0x2000
-
-/* ITF flags */
-#define INTAN4 0x0001
-#define INTAN5 0x0002
-#define INTAN6 0x0004
-#define INTAN7 0x0008
-#define INTSB 0x0010
-
-#define PPC m_ppc.w.l
-#define PC m_pc.w.l
-#define PCL m_pc.b.l
-#define PCH m_pc.b.h
-#define PCD m_pc.d
-#define SP m_sp.w.l
-#define SPL m_sp.b.l
-#define SPH m_sp.b.h
-#define SPD m_sp.d
-#define PSW m_psw
-#define OP m_op
-#define OP2 m_op2
-#define IFF m_iff
-#define EA m_ea.w.l
-#define EAL m_ea.b.l
-#define EAH m_ea.b.h
-#define VA m_va.w.l
-#define V m_va.b.h
-#define A m_va.b.l
-#define VAD m_va.d
-#define BC m_bc.w.l
-#define B m_bc.b.h
-#define C m_bc.b.l
-#define DE m_de.w.l
-#define D m_de.b.h
-#define E m_de.b.l
-#define HL m_hl.w.l
-#define H m_hl.b.h
-#define L m_hl.b.l
-#define EA2 m_ea2.w.l
-#define VA2 m_va2.w.l
-#define BC2 m_bc2.w.l
-#define DE2 m_de2.w.l
-#define HL2 m_hl2.w.l
-
-#define OVC0 m_ovc0
-#define OVC1 m_ovc1
-#define OVCE m_ovce
-#define OVCF m_ovcf
-#define OVCS m_ovcs
-#define EDGES m_edges
-
-#define CNT0 m_cnt.b.l
-#define CNT1 m_cnt.b.h
-#define TM0 m_tm.b.l
-#define TM1 m_tm.b.h
-#define ECNT m_ecnt.w.l
-#define ECPT m_ecnt.w.h
-#define ETM0 m_etm.w.l
-#define ETM1 m_etm.w.h
-
-#define MA m_ma
-#define MB m_mb
-#define MCC m_mcc
-#define MC m_mc
-#define MM m_mm
-#define MF m_mf
-#define TMM m_tmm
-#define ETMM m_etmm
-#define EOM m_eom
-#define SML m_sml
-#define SMH m_smh
-#define PANM m_panm
-#define ANM m_anm
-#define MKL m_mkl
-#define MKH m_mkh
-#define ZCM m_zcm
-
-#define CR0 m_cr0
-#define CR1 m_cr1
-#define CR2 m_cr2
-#define CR3 m_cr3
-#define RXB m_rxb
-#define TXB m_txb
-
-#define RXD m_rxd
-#define TXD m_txd
-#define SCK m_sck
-#define TI m_ti
-#define TO m_to
-#define CI m_ci
-#define CO0 m_co0
-#define CO1 m_co1
-
-#define IRR m_irr
-#define ITF m_itf
-
-
-#define RDOP(O) O = m_direct->read_decrypted_byte(PCD); PC++
-#define RDOPARG(A) A = m_direct->read_raw_byte(PCD); PC++
-#define RM(A) m_program->read_byte(A)
-#define WM(A,V) m_program->write_byte(A,V)
-
-#define ZHC_ADD(after,before,carry) \
- if (after == 0) PSW |= Z; else PSW &= ~Z; \
- if (after == before) \
- PSW = (PSW&~CY) | (carry); \
- else if (after < before) \
- PSW |= CY; \
- else \
- PSW &= ~CY; \
- if ((after & 15) < (before & 15)) \
- PSW |= HC; \
- else \
- PSW &= ~HC;
-#define ZHC_SUB(after,before,carry) \
- if (after == 0) PSW |= Z; else PSW &= ~Z; \
- if (before == after) \
- PSW = (PSW & ~CY) | (carry); \
- else if (after > before) \
- PSW |= CY; \
- else \
- PSW &= ~CY; \
- if ((after & 15) > (before & 15)) \
- PSW |= HC; \
- else \
- PSW &= ~HC;
-#define SKIP_CY if (CY == (PSW & CY)) PSW |= SK
-#define SKIP_NC if (0 == (PSW & CY)) PSW |= SK
-#define SKIP_Z if (Z == (PSW & Z)) PSW |= SK
-#define SKIP_NZ if (0 == (PSW & Z)) PSW |= SK
-#define SET_Z(n) if (n) PSW &= ~Z; else PSW |= Z
-
UINT8 upd7810_device::RP(offs_t port)
{
UINT8 data = 0xff;
@@ -1977,9 +1822,6 @@ void upd7810_device::state_string_export(const device_state_entry &entry, astrin
}
}
-#include "7810tbl.inc"
-#include "7810ops.inc"
-
void upd7810_device::device_reset()
{
m_ppc.d = 0;
@@ -2092,7 +1934,6 @@ void upd78c05_device::device_reset()
m_ovc0 = ( ( TMM & 0x04 ) ? 16 * 8 : 8 ) * TM0;
}
-
void upd7810_device::execute_run()
{
do
diff --git a/src/emu/cpu/upd7810/upd7810.h b/src/emu/cpu/upd7810/upd7810.h
index 0d1161e39a8..3be3177040c 100644
--- a/src/emu/cpu/upd7810/upd7810.h
+++ b/src/emu/cpu/upd7810/upd7810.h
@@ -102,6 +102,48 @@ public:
template<class _Object> static devcb_base &set_an7_func(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_an7_func.set_callback(object); }
protected:
+ // flags
+ enum
+ {
+ CY = 0x01,
+ F1 = 0x02,
+ L0 = 0x04,
+ L1 = 0x08,
+ HC = 0x10,
+ SK = 0x20,
+ Z = 0x40,
+ F7 = 0x80
+ };
+
+ // IRR flags
+ enum
+ {
+ INTNMI = 0x0001,
+ INTFT0 = 0x0002,
+ INTFT1 = 0x0004,
+ INTF1 = 0x0008,
+ INTF2 = 0x0010,
+ INTFE0 = 0x0020,
+ INTFE1 = 0x0040,
+ INTFEIN = 0x0080,
+ INTFAD = 0x0100,
+ INTFSR = 0x0200,
+ INTFST = 0x0400,
+ INTER = 0x0800,
+ INTOV = 0x1000,
+ INTF0 = 0x2000
+ };
+
+ // ITF flags
+ enum
+ {
+ INTAN4 = 0x0001,
+ INTAN5 = 0x0002,
+ INTAN6 = 0x0004,
+ INTAN7 = 0x0008,
+ INTSB = 0x0010
+ };
+
// device-level overrides
virtual void device_start();
virtual void device_reset();
diff --git a/src/emu/cpu/upd7810/7810dasm.c b/src/emu/cpu/upd7810/upd7810_dasm.c
index 2ed2760f8bd..2ed2760f8bd 100644
--- a/src/emu/cpu/upd7810/7810dasm.c
+++ b/src/emu/cpu/upd7810/upd7810_dasm.c
diff --git a/src/emu/cpu/upd7810/upd7810_macros.h b/src/emu/cpu/upd7810/upd7810_macros.h
new file mode 100644
index 00000000000..0c11e037281
--- /dev/null
+++ b/src/emu/cpu/upd7810/upd7810_macros.h
@@ -0,0 +1,144 @@
+/***************************************************************************
+
+ uPD7810/11, 7810H/11H, 78C10/C11/C14 private use macros
+
+***************************************************************************/
+
+//**************************************************************************
+// REGISTER
+//**************************************************************************
+
+#define PPC m_ppc.w.l
+#define PC m_pc.w.l
+#define PCL m_pc.b.l
+#define PCH m_pc.b.h
+#define PCD m_pc.d
+#define SP m_sp.w.l
+#define SPL m_sp.b.l
+#define SPH m_sp.b.h
+#define SPD m_sp.d
+#define PSW m_psw
+#define OP m_op
+#define OP2 m_op2
+#define IFF m_iff
+#define EA m_ea.w.l
+#define EAL m_ea.b.l
+#define EAH m_ea.b.h
+#define VA m_va.w.l
+#define V m_va.b.h
+#define A m_va.b.l
+#define VAD m_va.d
+#define BC m_bc.w.l
+#define B m_bc.b.h
+#define C m_bc.b.l
+#define DE m_de.w.l
+#define D m_de.b.h
+#define E m_de.b.l
+#define HL m_hl.w.l
+#define H m_hl.b.h
+#define L m_hl.b.l
+#define EA2 m_ea2.w.l
+#define VA2 m_va2.w.l
+#define BC2 m_bc2.w.l
+#define DE2 m_de2.w.l
+#define HL2 m_hl2.w.l
+
+#define OVC0 m_ovc0
+#define OVC1 m_ovc1
+#define OVCE m_ovce
+#define OVCF m_ovcf
+#define OVCS m_ovcs
+#define EDGES m_edges
+
+#define CNT0 m_cnt.b.l
+#define CNT1 m_cnt.b.h
+#define TM0 m_tm.b.l
+#define TM1 m_tm.b.h
+#define ECNT m_ecnt.w.l
+#define ECPT m_ecnt.w.h
+#define ETM0 m_etm.w.l
+#define ETM1 m_etm.w.h
+
+#define MA m_ma
+#define MB m_mb
+#define MCC m_mcc
+#define MC m_mc
+#define MM m_mm
+#define MF m_mf
+#define TMM m_tmm
+#define ETMM m_etmm
+#define EOM m_eom
+#define SML m_sml
+#define SMH m_smh
+#define PANM m_panm
+#define ANM m_anm
+#define MKL m_mkl
+#define MKH m_mkh
+#define ZCM m_zcm
+
+#define CR0 m_cr0
+#define CR1 m_cr1
+#define CR2 m_cr2
+#define CR3 m_cr3
+#define RXB m_rxb
+#define TXB m_txb
+
+#define RXD m_rxd
+#define TXD m_txd
+#define SCK m_sck
+#define TI m_ti
+#define TO m_to
+#define CI m_ci
+#define CO0 m_co0
+#define CO1 m_co1
+
+#define IRR m_irr
+#define ITF m_itf
+
+
+//**************************************************************************
+// MEMORY/OPCODE READ/WRITE
+//**************************************************************************
+
+#define RDOP(O) O = m_direct->read_decrypted_byte(PCD); PC++
+#define RDOPARG(A) A = m_direct->read_raw_byte(PCD); PC++
+#define RM(A) m_program->read_byte(A)
+#define WM(A,V) m_program->write_byte(A,V)
+
+
+//**************************************************************************
+// PSW OPERATIONS
+//**************************************************************************
+
+#define ZHC_ADD(after,before,carry) \
+ if (after == 0) PSW |= Z; else PSW &= ~Z; \
+ if (after == before) \
+ PSW = (PSW&~CY) | (carry); \
+ else if (after < before) \
+ PSW |= CY; \
+ else \
+ PSW &= ~CY; \
+ if ((after & 15) < (before & 15)) \
+ PSW |= HC; \
+ else \
+ PSW &= ~HC;
+
+#define ZHC_SUB(after,before,carry) \
+ if (after == 0) PSW |= Z; else PSW &= ~Z; \
+ if (before == after) \
+ PSW = (PSW & ~CY) | (carry); \
+ else if (after > before) \
+ PSW |= CY; \
+ else \
+ PSW &= ~CY; \
+ if ((after & 15) > (before & 15)) \
+ PSW |= HC; \
+ else \
+ PSW &= ~HC;
+
+#define SKIP_CY if (CY == (PSW & CY)) PSW |= SK
+#define SKIP_NC if (0 == (PSW & CY)) PSW |= SK
+#define SKIP_Z if (Z == (PSW & Z)) PSW |= SK
+#define SKIP_NZ if (0 == (PSW & Z)) PSW |= SK
+
+#define SET_Z(n) if (n) PSW &= ~Z; else PSW |= Z
diff --git a/src/emu/cpu/upd7810/7810ops.inc b/src/emu/cpu/upd7810/upd7810_opcodes.c
index b6d701bb14c..e3f8e16ee8c 100644
--- a/src/emu/cpu/upd7810/7810ops.inc
+++ b/src/emu/cpu/upd7810/upd7810_opcodes.c
@@ -7,6 +7,10 @@
*
*****************************************************************************/
+#include "emu.h"
+#include "upd7810.h"
+#include "upd7810_macros.h"
+
void upd7810_device::illegal()
{
logerror("uPD7810 '%s': illegal opcode %02x at PC:%04x\n", tag(), OP, PC);
diff --git a/src/emu/cpu/upd7810/7810tbl.inc b/src/emu/cpu/upd7810/upd7810_table.c
index b4cf2d8b3cb..3e60916a771 100644
--- a/src/emu/cpu/upd7810/7810tbl.inc
+++ b/src/emu/cpu/upd7810/upd7810_table.c
@@ -7,6 +7,8 @@
*
*****************************************************************************/
+#include "emu.h"
+#include "upd7810.h"
const struct upd7810_device::opcode_s upd7810_device::s_op48[256] =
{