summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/upd7810/upd7810_macros.h
blob: b6172e816ba50fa10215b93e596edec6f3d58685 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// license:BSD-3-Clause
// copyright-holders:Juergen Buchmueller
/***************************************************************************

    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 LV0     m_lv0
#define LV1     m_lv1
#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