diff options
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 |
commit | e6feb0a07e115e525525309b1f3302dd2a0a29ec (patch) | |
tree | 20fe9f6eeeb74dff93db1096e649e45686bb451d /src/emu/cpu/upd7810 | |
parent | 5306fe407f2cdd91cc733dcda08a419a8ad46164 (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.c | 161 | ||||
-rw-r--r-- | src/emu/cpu/upd7810/upd7810.h | 42 | ||||
-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.h | 144 | ||||
-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] = { |