summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-05-08 22:45:29 -0700
committerMike Pavone <pavone@retrodev.com>2013-05-08 22:45:29 -0700
commit7f57adce052ed2ba556741fd6d48694e218b74da (patch)
tree91868c2bdd6b70fc596d3398ec74f19d213b9de9
parentbd3490ebb8ea68b2fb7ee3e0e81b89aa0b2f45f5 (diff)
Fix handling of instructions that combine an IX/IY displacement with another prefix in test generator
-rw-r--r--ztestgen.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/ztestgen.c b/ztestgen.c
index c250d1f..a8531cb 100644
--- a/ztestgen.c
+++ b/ztestgen.c
@@ -226,8 +226,13 @@ void z80_gen_test(z80inst * inst, uint8_t *instbuf, uint8_t instlen)
}
//copy instruction
- memcpy(cur, instbuf, instlen);
- cur += instlen;
+ if (instlen == 3) {
+ memcpy(cur, instbuf, 2);
+ cur += 2;
+ } else {
+ memcpy(cur, instbuf, instlen);
+ cur += instlen;
+ }
//immed/displacement byte(s)
if (addr_mode == Z80_IX_DISPLACE || addr_mode == Z80_IY_DISPLACE) {
@@ -244,6 +249,9 @@ void z80_gen_test(z80inst * inst, uint8_t *instbuf, uint8_t instlen)
if (inst->reg == Z80_USE_IMMED && inst->op != Z80_BIT && inst->op != Z80_RES && inst->op != Z80_SET) {
*(cur++) = inst->immed & 0xFF;
}
+ if (instlen == 3) {
+ *(cur++) = instbuf[2];
+ }
for (char * cur = disbuf; *cur != 0; cur++) {
if (*cur == ',' || *cur == ' ') {