upd7810: reorganize, compile source files seperately instead of

including them into the main source
This commit is contained in:
Dirk Best 2014-06-11 10:35:47 +00:00
parent 5306fe407f
commit e6feb0a07e
8 changed files with 205 additions and 168 deletions

7
.gitattributes vendored
View File

@ -2210,11 +2210,12 @@ src/emu/cpu/unsp/unspdasm.c svneol=native#text/plain
src/emu/cpu/upd7725/dasm7725.c svneol=native#text/plain src/emu/cpu/upd7725/dasm7725.c svneol=native#text/plain
src/emu/cpu/upd7725/upd7725.c svneol=native#text/plain src/emu/cpu/upd7725/upd7725.c svneol=native#text/plain
src/emu/cpu/upd7725/upd7725.h svneol=native#text/plain src/emu/cpu/upd7725/upd7725.h svneol=native#text/plain
src/emu/cpu/upd7810/7810dasm.c svneol=native#text/plain
src/emu/cpu/upd7810/7810ops.inc svneol=native#text/plain
src/emu/cpu/upd7810/7810tbl.inc svneol=native#text/plain
src/emu/cpu/upd7810/upd7810.c svneol=native#text/plain src/emu/cpu/upd7810/upd7810.c svneol=native#text/plain
src/emu/cpu/upd7810/upd7810.h svneol=native#text/plain src/emu/cpu/upd7810/upd7810.h svneol=native#text/plain
src/emu/cpu/upd7810/upd7810_dasm.c svneol=native#text/plain
src/emu/cpu/upd7810/upd7810_macros.h svneol=native#text/plain
src/emu/cpu/upd7810/upd7810_opcodes.c svneol=native#text/plain
src/emu/cpu/upd7810/upd7810_table.c svneol=native#text/plain
src/emu/cpu/v30mz/v30mz.c svneol=native#text/plain src/emu/cpu/v30mz/v30mz.c svneol=native#text/plain
src/emu/cpu/v30mz/v30mz.h svneol=native#text/plain src/emu/cpu/v30mz/v30mz.h svneol=native#text/plain
src/emu/cpu/v60/am.inc svneol=native#text/plain src/emu/cpu/v60/am.inc svneol=native#text/plain

View File

@ -1774,14 +1774,17 @@ $(CPUOBJ)/upd7725/upd7725.o: $(CPUSRC)/upd7725/upd7725.c \
ifneq ($(filter UPD7810,$(CPUS)),) ifneq ($(filter UPD7810,$(CPUS)),)
OBJDIRS += $(CPUOBJ)/upd7810 OBJDIRS += $(CPUOBJ)/upd7810
CPUOBJS += $(CPUOBJ)/upd7810/upd7810.o CPUOBJS += $(CPUOBJ)/upd7810/upd7810.o
DASMOBJS += $(CPUOBJ)/upd7810/7810dasm.o CPUOBJS += $(CPUOBJ)/upd7810/upd7810_opcodes.o
CPUOBJS += $(CPUOBJ)/upd7810/upd7810_table.o
DASMOBJS += $(CPUOBJ)/upd7810/upd7810_dasm.o
endif endif
$(CPUOBJ)/upd7810/upd7810.o: $(CPUSRC)/upd7810/upd7810.c \ $(CPUOBJ)/upd7810/upd7810_opcodes.o: $(CPUSRC)/upd7810/upd7810_opcodes.c \
$(CPUSRC)/upd7810/7810tbl.inc \ $(CPUSRC)/upd7810/upd7810_macros.h
$(CPUSRC)/upd7810/7810ops.inc \
$(CPUSRC)/upd7810/upd7810.h
$(CPUOBJ)/upd7810/upd7810.o: $(CPUSRC)/upd7810/upd7810.c \
$(CPUSRC)/upd7810/upd7810.h \
$(CPUSRC)/upd7810/upd7810_macros.h
#------------------------------------------------- #-------------------------------------------------

View File

@ -407,6 +407,7 @@ STOP 01001000 10111011 12 stop
#include "emu.h" #include "emu.h"
#include "debugger.h" #include "debugger.h"
#include "upd7810.h" #include "upd7810.h"
#include "upd7810_macros.h"
const device_type UPD7810 = &device_creator<upd7810_device>; 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); 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 upd7810_device::RP(offs_t port)
{ {
UINT8 data = 0xff; 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() void upd7810_device::device_reset()
{ {
m_ppc.d = 0; m_ppc.d = 0;
@ -2092,7 +1934,6 @@ void upd78c05_device::device_reset()
m_ovc0 = ( ( TMM & 0x04 ) ? 16 * 8 : 8 ) * TM0; m_ovc0 = ( ( TMM & 0x04 ) ? 16 * 8 : 8 ) * TM0;
} }
void upd7810_device::execute_run() void upd7810_device::execute_run()
{ {
do do

View File

@ -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); } 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: 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 // device-level overrides
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();

View File

@ -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

View File

@ -7,6 +7,10 @@
* *
*****************************************************************************/ *****************************************************************************/
#include "emu.h"
#include "upd7810.h"
#include "upd7810_macros.h"
void upd7810_device::illegal() void upd7810_device::illegal()
{ {
logerror("uPD7810 '%s': illegal opcode %02x at PC:%04x\n", tag(), OP, PC); logerror("uPD7810 '%s': illegal opcode %02x at PC:%04x\n", tag(), OP, PC);

View File

@ -7,6 +7,8 @@
* *
*****************************************************************************/ *****************************************************************************/
#include "emu.h"
#include "upd7810.h"
const struct upd7810_device::opcode_s upd7810_device::s_op48[256] = const struct upd7810_device::opcode_s upd7810_device::s_op48[256] =
{ {