Fix tms9918a transparent color rendering
[qemu/z80.git] / target-z80 / exec.h
blob570afa87636dea80dc770280ae3d78f4a5354f33
1 /*
2 * Z80 execution defines
4 * Copyright (c) 2007-2009 Stuart Brady <stuart.brady@gmail.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
20 #include "config.h"
21 #include "dyngen-exec.h"
23 #define TARGET_LONG_BITS 32
25 #include "cpu-defs.h"
27 /* at least 4 register variables are defined */
28 register struct CPUZ80State *env asm(AREG0);
30 #if TARGET_LONG_BITS > HOST_LONG_BITS
32 /* no registers can be used */
33 #define T0 (env->t0)
34 #define T1 (env->t1)
36 #else
38 /* XXX: use unsigned long instead of target_ulong - better code will
39 be generated for 64 bit CPUs */
40 register target_ulong T0 asm(AREG1);
41 register target_ulong T1 asm(AREG2);
43 #endif /* ! (TARGET_LONG_BITS > HOST_LONG_BITS) */
45 #define A0 (env->a0)
47 #define A (env->regs[R_A])
48 #define F (env->regs[R_F])
49 #define BC (env->regs[R_BC])
50 #define DE (env->regs[R_DE])
51 #define HL (env->regs[R_HL])
52 #define IX (env->regs[R_IX])
53 #define IY (env->regs[R_IY])
54 #define SP (env->regs[R_SP])
55 #define I (env->regs[R_I])
56 #define R (env->regs[R_R])
57 #define AX (env->regs[R_AX])
58 #define FX (env->regs[R_FX])
59 #define BCX (env->regs[R_BCX])
60 #define DEX (env->regs[R_DEX])
61 #define HLX (env->regs[R_HLX])
63 #define PC (env->pc)
65 #include "cpu.h"
66 #include "exec-all.h"
68 void do_interrupt(CPUZ80State *env);
69 void raise_interrupt(int intno, int is_int, int error_code,
70 int next_eip_addend);
71 void raise_exception_err(int exception_index, int error_code);
72 void raise_exception(int exception_index);
74 #if !defined(CONFIG_USER_ONLY)
76 #include "softmmu_exec.h"
78 #endif /* !defined(CONFIG_USER_ONLY) */
80 extern const uint8_t parity_table[256];
82 static inline void env_to_regs(void)
84 #ifdef reg_A
85 A = env->regs[R_A];
86 #endif
87 #ifdef reg_F
88 F = env->regs[R_F];
89 #endif
90 #ifdef reg_BC
91 BC = env->regs[R_BC];
92 #endif
93 #ifdef reg_DE
94 DE = env->regs[R_DE];
95 #endif
96 #ifdef reg_HL
97 HL = env->regs[R_HL];
98 #endif
99 #ifdef reg_IX
100 IX = env->regs[R_IX];
101 #endif
102 #ifdef reg_IY
103 IY = env->regs[R_IY];
104 #endif
105 #ifdef reg_SP
106 SP = env->regs[R_SP];
107 #endif
108 #ifdef reg_I
109 I = env->regs[R_I];
110 #endif
111 #ifdef reg_R
112 R = env->regs[R_R];
113 #endif
114 #ifdef reg_AX
115 AX = env->regs[R_AX];
116 #endif
117 #ifdef reg_FX
118 FX = env->regs[R_FX];
119 #endif
120 #ifdef reg_BCX
121 BCX = env->regs[R_BCX];
122 #endif
123 #ifdef reg_DEX
124 DEX = env->regs[R_DEX];
125 #endif
126 #ifdef reg_HLX
127 HLX = env->regs[R_HLX];
128 #endif
131 static inline void regs_to_env(void)
133 #ifdef reg_A
134 env->regs[R_A] = A;
135 #endif
136 #ifdef reg_F
137 env->regs[R_F] = F;
138 #endif
139 #ifdef reg_BC
140 env->regs[R_BC] = BC;
141 #endif
142 #ifdef reg_DE
143 env->regs[R_DE] = DE;
144 #endif
145 #ifdef reg_HL
146 env->regs[R_HL] = HL;
147 #endif
148 #ifdef reg_IX
149 env->regs[R_IX] = IX;
150 #endif
151 #ifdef reg_IY
152 env->regs[R_IY] = IY;
153 #endif
154 #ifdef reg_SP
155 env->regs[R_SP] = SP;
156 #endif
157 #ifdef reg_I
158 env->regs[R_I] = I;
159 #endif
160 #ifdef reg_R
161 env->regs[R_R] = R;
162 #endif
163 #ifdef reg_AX
164 env->regs[R_AX] = AX;
165 #endif
166 #ifdef reg_FX
167 env->regs[R_FX] = FX;
168 #endif
169 #ifdef reg_BCX
170 env->regs[R_BCX] = BCX;
171 #endif
172 #ifdef reg_DEX
173 env->regs[R_DEX] = DEX;
174 #endif
175 #ifdef reg_HLX
176 env->regs[R_HLX] = HLX;
177 #endif
180 static inline int cpu_has_work(CPUState *env)
182 return env->interrupt_request & CPU_INTERRUPT_HARD;
185 static inline int cpu_halted(CPUState *env)
187 if (!env->halted) {
188 return 0;
190 //printf("%s: at PC 0x%x halted == %d, irq %d\n",__FUNCTION__, env->pc, env->halted,env->interrupt_request);
191 if (cpu_has_work(env)) {
192 env->halted = 0;
193 return 0;
195 return EXCP_HALTED;