CodesXX.h
  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)OpZ80(R->PC.W++));
 54                 M_ADD(I);break;
 55  case ADD_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
 65                 M_SUB(I);break;
 66  case SUB_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
 76                 M_AND(I);break;
 77  case AND_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
 87                 M_OR(I);break;
 88  case OR_BYTE:  I=OpZ80(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)OpZ80(R->PC.W++));
 98                 M_ADC(I);break;
 99  case ADC_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
109                 M_SBC(I);break;
110  case SBC_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
120                 M_XOR(I);break;
121  case XOR_BYTE: I=OpZ80(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)OpZ80(R->PC.W++));
131                 M_CP(I);break;
132  case CP_BYTE:  I=OpZ80(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)OpZ80(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)OpZ80(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=OpZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break;
230  case INA:  I=OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(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)OpZ80(R->PC.W++));break;
341  case LD_C_xHL:    R->BC.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
342  case LD_D_xHL:    R->DE.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
343  case LD_E_xHL:    R->DE.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
344  case LD_H_xHL:    R->HL.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
345  case LD_L_xHL:    R->HL.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
346  case LD_A_xHL:    R->AF.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break;
347  
348  case LD_B_BYTE:   R->BC.B.h=OpZ80(R->PC.W++);break;
349  case LD_C_BYTE:   R->BC.B.l=OpZ80(R->PC.W++);break;
350  case LD_D_BYTE:   R->DE.B.h=OpZ80(R->PC.W++);break;
351  case LD_E_BYTE:   R->DE.B.l=OpZ80(R->PC.W++);break;
352  case LD_H_BYTE:   R->XX.B.h=OpZ80(R->PC.W++);break;
353  case LD_L_BYTE:   R->XX.B.l=OpZ80(R->PC.W++);break;
354  case LD_A_BYTE:   R->AF.B.h=OpZ80(R->PC.W++);break;
355  case LD_xHL_BYTE: J.W=R->XX.W+(offset)OpZ80(R->PC.W++);
356                    WrZ80(J.W,OpZ80(R->PC.W++));break;
357  
358  case LD_xWORD_HL:
359    J.B.l=OpZ80(R->PC.W++);
360    J.B.h=OpZ80(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=OpZ80(R->PC.W++);
367    J.B.h=OpZ80(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=OpZ80(R->PC.W++);
374    J.B.h=OpZ80(R->PC.W++);
375    R->AF.B.h=RdZ80(J.W);
376    break;
377  
378  case LD_xWORD_A:
379    J.B.l=OpZ80(R->PC.W++);
380    J.B.h=OpZ80(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;