1 |
dpavlin |
111 |
/** 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; |