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 = '_';