1 |
/** Z80: portable Z80 emulator *******************************/ |
2 |
/** **/ |
3 |
/** CodesXX.h **/ |
4 |
/** **/ |
5 |
/** This file contains implementation for FD/DD tables of **/ |
6 |
/** Z80 commands. It is included from Z80.c. **/ |
7 |
/** **/ |
8 |
/** Copyright (C) Marat Fayzullin 1994-2007 **/ |
9 |
/** You are not allowed to distribute this software **/ |
10 |
/** commercially. Please, notify me, if you make any **/ |
11 |
/** changes to this file. **/ |
12 |
/*************************************************************/ |
13 |
|
14 |
case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; |
15 |
case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; |
16 |
case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; |
17 |
case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; |
18 |
|
19 |
case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; |
20 |
case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; |
21 |
case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; |
22 |
case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; |
23 |
case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; |
24 |
case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; |
25 |
case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; |
26 |
case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; |
27 |
|
28 |
case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; |
29 |
case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; |
30 |
case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; |
31 |
case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; |
32 |
case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; |
33 |
case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; |
34 |
case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; |
35 |
case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; |
36 |
|
37 |
case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; |
38 |
case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; |
39 |
case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; |
40 |
case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; |
41 |
case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; |
42 |
case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; |
43 |
case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; |
44 |
case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; |
45 |
|
46 |
case ADD_B: M_ADD(R->BC.B.h);break; |
47 |
case ADD_C: M_ADD(R->BC.B.l);break; |
48 |
case ADD_D: M_ADD(R->DE.B.h);break; |
49 |
case ADD_E: M_ADD(R->DE.B.l);break; |
50 |
case ADD_H: M_ADD(R->XX.B.h);break; |
51 |
case ADD_L: M_ADD(R->XX.B.l);break; |
52 |
case ADD_A: M_ADD(R->AF.B.h);break; |
53 |
case ADD_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
54 |
M_ADD(I);break; |
55 |
case ADD_BYTE: I=RdZ80(R->PC.W++);M_ADD(I);break; |
56 |
|
57 |
case SUB_B: M_SUB(R->BC.B.h);break; |
58 |
case SUB_C: M_SUB(R->BC.B.l);break; |
59 |
case SUB_D: M_SUB(R->DE.B.h);break; |
60 |
case SUB_E: M_SUB(R->DE.B.l);break; |
61 |
case SUB_H: M_SUB(R->XX.B.h);break; |
62 |
case SUB_L: M_SUB(R->XX.B.l);break; |
63 |
case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; |
64 |
case SUB_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
65 |
M_SUB(I);break; |
66 |
case SUB_BYTE: I=RdZ80(R->PC.W++);M_SUB(I);break; |
67 |
|
68 |
case AND_B: M_AND(R->BC.B.h);break; |
69 |
case AND_C: M_AND(R->BC.B.l);break; |
70 |
case AND_D: M_AND(R->DE.B.h);break; |
71 |
case AND_E: M_AND(R->DE.B.l);break; |
72 |
case AND_H: M_AND(R->XX.B.h);break; |
73 |
case AND_L: M_AND(R->XX.B.l);break; |
74 |
case AND_A: M_AND(R->AF.B.h);break; |
75 |
case AND_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
76 |
M_AND(I);break; |
77 |
case AND_BYTE: I=RdZ80(R->PC.W++);M_AND(I);break; |
78 |
|
79 |
case OR_B: M_OR(R->BC.B.h);break; |
80 |
case OR_C: M_OR(R->BC.B.l);break; |
81 |
case OR_D: M_OR(R->DE.B.h);break; |
82 |
case OR_E: M_OR(R->DE.B.l);break; |
83 |
case OR_H: M_OR(R->XX.B.h);break; |
84 |
case OR_L: M_OR(R->XX.B.l);break; |
85 |
case OR_A: M_OR(R->AF.B.h);break; |
86 |
case OR_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
87 |
M_OR(I);break; |
88 |
case OR_BYTE: I=RdZ80(R->PC.W++);M_OR(I);break; |
89 |
|
90 |
case ADC_B: M_ADC(R->BC.B.h);break; |
91 |
case ADC_C: M_ADC(R->BC.B.l);break; |
92 |
case ADC_D: M_ADC(R->DE.B.h);break; |
93 |
case ADC_E: M_ADC(R->DE.B.l);break; |
94 |
case ADC_H: M_ADC(R->XX.B.h);break; |
95 |
case ADC_L: M_ADC(R->XX.B.l);break; |
96 |
case ADC_A: M_ADC(R->AF.B.h);break; |
97 |
case ADC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
98 |
M_ADC(I);break; |
99 |
case ADC_BYTE: I=RdZ80(R->PC.W++);M_ADC(I);break; |
100 |
|
101 |
case SBC_B: M_SBC(R->BC.B.h);break; |
102 |
case SBC_C: M_SBC(R->BC.B.l);break; |
103 |
case SBC_D: M_SBC(R->DE.B.h);break; |
104 |
case SBC_E: M_SBC(R->DE.B.l);break; |
105 |
case SBC_H: M_SBC(R->XX.B.h);break; |
106 |
case SBC_L: M_SBC(R->XX.B.l);break; |
107 |
case SBC_A: M_SBC(R->AF.B.h);break; |
108 |
case SBC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
109 |
M_SBC(I);break; |
110 |
case SBC_BYTE: I=RdZ80(R->PC.W++);M_SBC(I);break; |
111 |
|
112 |
case XOR_B: M_XOR(R->BC.B.h);break; |
113 |
case XOR_C: M_XOR(R->BC.B.l);break; |
114 |
case XOR_D: M_XOR(R->DE.B.h);break; |
115 |
case XOR_E: M_XOR(R->DE.B.l);break; |
116 |
case XOR_H: M_XOR(R->XX.B.h);break; |
117 |
case XOR_L: M_XOR(R->XX.B.l);break; |
118 |
case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; |
119 |
case XOR_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
120 |
M_XOR(I);break; |
121 |
case XOR_BYTE: I=RdZ80(R->PC.W++);M_XOR(I);break; |
122 |
|
123 |
case CP_B: M_CP(R->BC.B.h);break; |
124 |
case CP_C: M_CP(R->BC.B.l);break; |
125 |
case CP_D: M_CP(R->DE.B.h);break; |
126 |
case CP_E: M_CP(R->DE.B.l);break; |
127 |
case CP_H: M_CP(R->XX.B.h);break; |
128 |
case CP_L: M_CP(R->XX.B.l);break; |
129 |
case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; |
130 |
case CP_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); |
131 |
M_CP(I);break; |
132 |
case CP_BYTE: I=RdZ80(R->PC.W++);M_CP(I);break; |
133 |
|
134 |
case LD_BC_WORD: M_LDWORD(BC);break; |
135 |
case LD_DE_WORD: M_LDWORD(DE);break; |
136 |
case LD_HL_WORD: M_LDWORD(XX);break; |
137 |
case LD_SP_WORD: M_LDWORD(SP);break; |
138 |
|
139 |
case LD_PC_HL: R->PC.W=R->XX.W;JumpZ80(R->PC.W);break; |
140 |
case LD_SP_HL: R->SP.W=R->XX.W;break; |
141 |
case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; |
142 |
case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; |
143 |
|
144 |
case ADD_HL_BC: M_ADDW(XX,BC);break; |
145 |
case ADD_HL_DE: M_ADDW(XX,DE);break; |
146 |
case ADD_HL_HL: M_ADDW(XX,XX);break; |
147 |
case ADD_HL_SP: M_ADDW(XX,SP);break; |
148 |
|
149 |
case DEC_BC: R->BC.W--;break; |
150 |
case DEC_DE: R->DE.W--;break; |
151 |
case DEC_HL: R->XX.W--;break; |
152 |
case DEC_SP: R->SP.W--;break; |
153 |
|
154 |
case INC_BC: R->BC.W++;break; |
155 |
case INC_DE: R->DE.W++;break; |
156 |
case INC_HL: R->XX.W++;break; |
157 |
case INC_SP: R->SP.W++;break; |
158 |
|
159 |
case DEC_B: M_DEC(R->BC.B.h);break; |
160 |
case DEC_C: M_DEC(R->BC.B.l);break; |
161 |
case DEC_D: M_DEC(R->DE.B.h);break; |
162 |
case DEC_E: M_DEC(R->DE.B.l);break; |
163 |
case DEC_H: M_DEC(R->XX.B.h);break; |
164 |
case DEC_L: M_DEC(R->XX.B.l);break; |
165 |
case DEC_A: M_DEC(R->AF.B.h);break; |
166 |
case DEC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_DEC(I); |
167 |
WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I); |
168 |
break; |
169 |
|
170 |
case INC_B: M_INC(R->BC.B.h);break; |
171 |
case INC_C: M_INC(R->BC.B.l);break; |
172 |
case INC_D: M_INC(R->DE.B.h);break; |
173 |
case INC_E: M_INC(R->DE.B.l);break; |
174 |
case INC_H: M_INC(R->XX.B.h);break; |
175 |
case INC_L: M_INC(R->XX.B.l);break; |
176 |
case INC_A: M_INC(R->AF.B.h);break; |
177 |
case INC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_INC(I); |
178 |
WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I); |
179 |
break; |
180 |
|
181 |
case RLCA: |
182 |
I=(R->AF.B.h&0x80? C_FLAG:0); |
183 |
R->AF.B.h=(R->AF.B.h<<1)|I; |
184 |
R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; |
185 |
break; |
186 |
case RLA: |
187 |
I=(R->AF.B.h&0x80? C_FLAG:0); |
188 |
R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); |
189 |
R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; |
190 |
break; |
191 |
case RRCA: |
192 |
I=R->AF.B.h&0x01; |
193 |
R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); |
194 |
R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; |
195 |
break; |
196 |
case RRA: |
197 |
I=R->AF.B.h&0x01; |
198 |
R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); |
199 |
R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; |
200 |
break; |
201 |
|
202 |
case RST00: M_RST(0x0000);break; |
203 |
case RST08: M_RST(0x0008);break; |
204 |
case RST10: M_RST(0x0010);break; |
205 |
case RST18: M_RST(0x0018);break; |
206 |
case RST20: M_RST(0x0020);break; |
207 |
case RST28: M_RST(0x0028);break; |
208 |
case RST30: M_RST(0x0030);break; |
209 |
case RST38: M_RST(0x0038);break; |
210 |
|
211 |
case PUSH_BC: M_PUSH(BC);break; |
212 |
case PUSH_DE: M_PUSH(DE);break; |
213 |
case PUSH_HL: M_PUSH(XX);break; |
214 |
case PUSH_AF: M_PUSH(AF);break; |
215 |
|
216 |
case POP_BC: M_POP(BC);break; |
217 |
case POP_DE: M_POP(DE);break; |
218 |
case POP_HL: M_POP(XX);break; |
219 |
case POP_AF: M_POP(AF);break; |
220 |
|
221 |
case DJNZ: if(--R->BC.B.h) { R->ICount-=5;M_JR; } else R->PC.W++;break; |
222 |
case JP: M_JP;break; |
223 |
case JR: M_JR;break; |
224 |
case CALL: M_CALL;break; |
225 |
case RET: M_RET;break; |
226 |
case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; |
227 |
case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; |
228 |
case NOP: break; |
229 |
case OUTA: I=RdZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break; |
230 |
case INA: I=RdZ80(R->PC.W++);R->AF.B.h=InZ80(I|(R->AF.W&0xFF00));break; |
231 |
|
232 |
case HALT: |
233 |
R->PC.W--; |
234 |
R->IFF|=IFF_HALT; |
235 |
R->IBackup=0; |
236 |
R->ICount=0; |
237 |
break; |
238 |
|
239 |
case DI: |
240 |
if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1; |
241 |
R->IFF&=~(IFF_1|IFF_2|IFF_EI); |
242 |
break; |
243 |
|
244 |
case EI: |
245 |
if(!(R->IFF&(IFF_1|IFF_EI))) |
246 |
{ |
247 |
R->IFF|=IFF_2|IFF_EI; |
248 |
R->IBackup=R->ICount; |
249 |
R->ICount=1; |
250 |
} |
251 |
break; |
252 |
|
253 |
case CCF: |
254 |
R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); |
255 |
R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; |
256 |
break; |
257 |
|
258 |
case EXX: |
259 |
J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; |
260 |
J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; |
261 |
J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; |
262 |
break; |
263 |
|
264 |
case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; |
265 |
case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; |
266 |
|
267 |
case LD_B_B: R->BC.B.h=R->BC.B.h;break; |
268 |
case LD_C_B: R->BC.B.l=R->BC.B.h;break; |
269 |
case LD_D_B: R->DE.B.h=R->BC.B.h;break; |
270 |
case LD_E_B: R->DE.B.l=R->BC.B.h;break; |
271 |
case LD_H_B: R->XX.B.h=R->BC.B.h;break; |
272 |
case LD_L_B: R->XX.B.l=R->BC.B.h;break; |
273 |
case LD_A_B: R->AF.B.h=R->BC.B.h;break; |
274 |
case LD_xHL_B: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
275 |
WrZ80(J.W,R->BC.B.h);break; |
276 |
|
277 |
case LD_B_C: R->BC.B.h=R->BC.B.l;break; |
278 |
case LD_C_C: R->BC.B.l=R->BC.B.l;break; |
279 |
case LD_D_C: R->DE.B.h=R->BC.B.l;break; |
280 |
case LD_E_C: R->DE.B.l=R->BC.B.l;break; |
281 |
case LD_H_C: R->XX.B.h=R->BC.B.l;break; |
282 |
case LD_L_C: R->XX.B.l=R->BC.B.l;break; |
283 |
case LD_A_C: R->AF.B.h=R->BC.B.l;break; |
284 |
case LD_xHL_C: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
285 |
WrZ80(J.W,R->BC.B.l);break; |
286 |
|
287 |
case LD_B_D: R->BC.B.h=R->DE.B.h;break; |
288 |
case LD_C_D: R->BC.B.l=R->DE.B.h;break; |
289 |
case LD_D_D: R->DE.B.h=R->DE.B.h;break; |
290 |
case LD_E_D: R->DE.B.l=R->DE.B.h;break; |
291 |
case LD_H_D: R->XX.B.h=R->DE.B.h;break; |
292 |
case LD_L_D: R->XX.B.l=R->DE.B.h;break; |
293 |
case LD_A_D: R->AF.B.h=R->DE.B.h;break; |
294 |
case LD_xHL_D: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
295 |
WrZ80(J.W,R->DE.B.h);break; |
296 |
|
297 |
case LD_B_E: R->BC.B.h=R->DE.B.l;break; |
298 |
case LD_C_E: R->BC.B.l=R->DE.B.l;break; |
299 |
case LD_D_E: R->DE.B.h=R->DE.B.l;break; |
300 |
case LD_E_E: R->DE.B.l=R->DE.B.l;break; |
301 |
case LD_H_E: R->XX.B.h=R->DE.B.l;break; |
302 |
case LD_L_E: R->XX.B.l=R->DE.B.l;break; |
303 |
case LD_A_E: R->AF.B.h=R->DE.B.l;break; |
304 |
case LD_xHL_E: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
305 |
WrZ80(J.W,R->DE.B.l);break; |
306 |
|
307 |
case LD_B_H: R->BC.B.h=R->XX.B.h;break; |
308 |
case LD_C_H: R->BC.B.l=R->XX.B.h;break; |
309 |
case LD_D_H: R->DE.B.h=R->XX.B.h;break; |
310 |
case LD_E_H: R->DE.B.l=R->XX.B.h;break; |
311 |
case LD_H_H: R->XX.B.h=R->XX.B.h;break; |
312 |
case LD_L_H: R->XX.B.l=R->XX.B.h;break; |
313 |
case LD_A_H: R->AF.B.h=R->XX.B.h;break; |
314 |
case LD_xHL_H: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
315 |
WrZ80(J.W,R->HL.B.h);break; |
316 |
|
317 |
case LD_B_L: R->BC.B.h=R->XX.B.l;break; |
318 |
case LD_C_L: R->BC.B.l=R->XX.B.l;break; |
319 |
case LD_D_L: R->DE.B.h=R->XX.B.l;break; |
320 |
case LD_E_L: R->DE.B.l=R->XX.B.l;break; |
321 |
case LD_H_L: R->XX.B.h=R->XX.B.l;break; |
322 |
case LD_L_L: R->XX.B.l=R->XX.B.l;break; |
323 |
case LD_A_L: R->AF.B.h=R->XX.B.l;break; |
324 |
case LD_xHL_L: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
325 |
WrZ80(J.W,R->HL.B.l);break; |
326 |
|
327 |
case LD_B_A: R->BC.B.h=R->AF.B.h;break; |
328 |
case LD_C_A: R->BC.B.l=R->AF.B.h;break; |
329 |
case LD_D_A: R->DE.B.h=R->AF.B.h;break; |
330 |
case LD_E_A: R->DE.B.l=R->AF.B.h;break; |
331 |
case LD_H_A: R->XX.B.h=R->AF.B.h;break; |
332 |
case LD_L_A: R->XX.B.l=R->AF.B.h;break; |
333 |
case LD_A_A: R->AF.B.h=R->AF.B.h;break; |
334 |
case LD_xHL_A: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
335 |
WrZ80(J.W,R->AF.B.h);break; |
336 |
|
337 |
case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; |
338 |
case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; |
339 |
|
340 |
case LD_B_xHL: R->BC.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
341 |
case LD_C_xHL: R->BC.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
342 |
case LD_D_xHL: R->DE.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
343 |
case LD_E_xHL: R->DE.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
344 |
case LD_H_xHL: R->HL.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
345 |
case LD_L_xHL: R->HL.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
346 |
case LD_A_xHL: R->AF.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; |
347 |
|
348 |
case LD_B_BYTE: R->BC.B.h=RdZ80(R->PC.W++);break; |
349 |
case LD_C_BYTE: R->BC.B.l=RdZ80(R->PC.W++);break; |
350 |
case LD_D_BYTE: R->DE.B.h=RdZ80(R->PC.W++);break; |
351 |
case LD_E_BYTE: R->DE.B.l=RdZ80(R->PC.W++);break; |
352 |
case LD_H_BYTE: R->XX.B.h=RdZ80(R->PC.W++);break; |
353 |
case LD_L_BYTE: R->XX.B.l=RdZ80(R->PC.W++);break; |
354 |
case LD_A_BYTE: R->AF.B.h=RdZ80(R->PC.W++);break; |
355 |
case LD_xHL_BYTE: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); |
356 |
WrZ80(J.W,RdZ80(R->PC.W++));break; |
357 |
|
358 |
case LD_xWORD_HL: |
359 |
J.B.l=RdZ80(R->PC.W++); |
360 |
J.B.h=RdZ80(R->PC.W++); |
361 |
WrZ80(J.W++,R->XX.B.l); |
362 |
WrZ80(J.W,R->XX.B.h); |
363 |
break; |
364 |
|
365 |
case LD_HL_xWORD: |
366 |
J.B.l=RdZ80(R->PC.W++); |
367 |
J.B.h=RdZ80(R->PC.W++); |
368 |
R->XX.B.l=RdZ80(J.W++); |
369 |
R->XX.B.h=RdZ80(J.W); |
370 |
break; |
371 |
|
372 |
case LD_A_xWORD: |
373 |
J.B.l=RdZ80(R->PC.W++); |
374 |
J.B.h=RdZ80(R->PC.W++); |
375 |
R->AF.B.h=RdZ80(J.W); |
376 |
break; |
377 |
|
378 |
case LD_xWORD_A: |
379 |
J.B.l=RdZ80(R->PC.W++); |
380 |
J.B.h=RdZ80(R->PC.W++); |
381 |
WrZ80(J.W,R->AF.B.h); |
382 |
break; |
383 |
|
384 |
case EX_HL_xSP: |
385 |
J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->XX.B.l); |
386 |
J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->XX.B.h); |
387 |
R->XX.W=J.W; |
388 |
break; |
389 |
|
390 |
case DAA: |
391 |
J.W=R->AF.B.h; |
392 |
if(R->AF.B.l&C_FLAG) J.W|=256; |
393 |
if(R->AF.B.l&H_FLAG) J.W|=512; |
394 |
if(R->AF.B.l&N_FLAG) J.W|=1024; |
395 |
R->AF.W=DAATable[J.W]; |
396 |
break; |