Mercurial > repos > blastem
comparison ztestgen.c @ 298:170722e80fc0
Fix handling of instructions that combine an IX/IY displacement with another prefix in test generator
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 08 May 2013 22:45:29 -0700 |
parents | f90aeea98e53 |
children | 3f4f2b7318a1 |
comparison
equal
deleted
inserted
replaced
297:147e31983730 | 298:170722e80fc0 |
---|---|
224 cur = ld_ir16(cur, reg, reg_values[reg]); | 224 cur = ld_ir16(cur, reg, reg_values[reg]); |
225 } | 225 } |
226 } | 226 } |
227 | 227 |
228 //copy instruction | 228 //copy instruction |
229 memcpy(cur, instbuf, instlen); | 229 if (instlen == 3) { |
230 cur += instlen; | 230 memcpy(cur, instbuf, 2); |
231 cur += 2; | |
232 } else { | |
233 memcpy(cur, instbuf, instlen); | |
234 cur += instlen; | |
235 } | |
231 | 236 |
232 //immed/displacement byte(s) | 237 //immed/displacement byte(s) |
233 if (addr_mode == Z80_IX_DISPLACE || addr_mode == Z80_IY_DISPLACE) { | 238 if (addr_mode == Z80_IX_DISPLACE || addr_mode == Z80_IY_DISPLACE) { |
234 *(cur++) = inst->ea_reg; | 239 *(cur++) = inst->ea_reg; |
235 } else if (addr_mode == Z80_IMMED & inst->op != Z80_IM) { | 240 } else if (addr_mode == Z80_IMMED & inst->op != Z80_IM) { |
241 *(cur++) = inst->immed & 0xFF; | 246 *(cur++) = inst->immed & 0xFF; |
242 *(cur++) = inst->immed >> 8; | 247 *(cur++) = inst->immed >> 8; |
243 } | 248 } |
244 if (inst->reg == Z80_USE_IMMED && inst->op != Z80_BIT && inst->op != Z80_RES && inst->op != Z80_SET) { | 249 if (inst->reg == Z80_USE_IMMED && inst->op != Z80_BIT && inst->op != Z80_RES && inst->op != Z80_SET) { |
245 *(cur++) = inst->immed & 0xFF; | 250 *(cur++) = inst->immed & 0xFF; |
251 } | |
252 if (instlen == 3) { | |
253 *(cur++) = instbuf[2]; | |
246 } | 254 } |
247 | 255 |
248 for (char * cur = disbuf; *cur != 0; cur++) { | 256 for (char * cur = disbuf; *cur != 0; cur++) { |
249 if (*cur == ',' || *cur == ' ') { | 257 if (*cur == ',' || *cur == ' ') { |
250 *cur = '_'; | 258 *cur = '_'; |