summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--z80_to_x86.c14
-rw-r--r--z80inst.c7
-rw-r--r--z80inst.h1
-rw-r--r--zdis.c8
4 files changed, 17 insertions, 13 deletions
diff --git a/z80_to_x86.c b/z80_to_x86.c
index 390dfdb..98d68b6 100644
--- a/z80_to_x86.c
+++ b/z80_to_x86.c
@@ -15,7 +15,7 @@
#define SCRATCH2 R14
#define CONTEXT RSI
-//#define DO_DEBUG_PRINT
+#define DO_DEBUG_PRINT
#ifdef DO_DEBUG_PRINT
#define dprintf printf
@@ -1633,12 +1633,6 @@ uint8_t * translate_z80inst(z80inst * inst, uint8_t * dst, z80_context * context
return dst;
}
-uint8_t z80_is_terminal(z80inst * inst)
-{
- return inst->op == Z80_RET || inst->op == Z80_RETI || inst->op == Z80_RETN || inst->op == Z80_JP
- || inst->op == Z80_JR || inst->op == Z80_HALT || (inst->op == Z80_NOP && inst->immed == 42);
-}
-
uint8_t * z80_get_native_address(z80_context * context, uint32_t address)
{
native_map_slot *map;
@@ -1649,14 +1643,14 @@ uint8_t * z80_get_native_address(z80_context * context, uint32_t address)
address &= 0x7FFF;
map = context->banked_code_map + context->bank_reg;
} else {
- dprintf("z80_get_native_address: %X NULL\n", address);
+ //dprintf("z80_get_native_address: %X NULL\n", address);
return NULL;
}
if (!map->base || !map->offsets || map->offsets[address] == INVALID_OFFSET || map->offsets[address] == EXTENSION_WORD) {
- dprintf("z80_get_native_address: %X NULL\n", address);
+ //dprintf("z80_get_native_address: %X NULL\n", address);
return NULL;
}
- dprintf("z80_get_native_address: %X %p\n", address, map->base + map->offsets[address]);
+ //dprintf("z80_get_native_address: %X %p\n", address, map->base + map->offsets[address]);
return map->base + map->offsets[address];
}
diff --git a/z80inst.c b/z80inst.c
index e6d2a33..d5def01 100644
--- a/z80inst.c
+++ b/z80inst.c
@@ -1531,4 +1531,11 @@ uint8_t z80_word_reg(uint8_t reg)
}
}
+uint8_t z80_is_terminal(z80inst * inst)
+{
+ return inst->op == Z80_RET || inst->op == Z80_RETI || inst->op == Z80_RETN || inst->op == Z80_JP
+ || inst->op == Z80_JR || inst->op == Z80_HALT || (inst->op == Z80_NOP && inst->immed == 42);
+}
+
+
diff --git a/z80inst.h b/z80inst.h
index 609f18c..56fd8bd 100644
--- a/z80inst.h
+++ b/z80inst.h
@@ -135,6 +135,7 @@ int z80_disasm(z80inst * decoded, char * dst);
uint8_t z80_high_reg(uint8_t reg);
uint8_t z80_low_reg(uint8_t reg);
uint8_t z80_word_reg(uint8_t reg);
+uint8_t z80_is_terminal(z80inst * inst);
#endif //Z80INST_H_
diff --git a/zdis.c b/zdis.c
index f7c7201..1a032e3 100644
--- a/zdis.c
+++ b/zdis.c
@@ -135,9 +135,6 @@ int main(int argc, char ** argv)
//z80_disasm(&instbuf, disbuf);
//printf("%X: %s\n", address, disbuf);
- if (instbuf.op == Z80_HALT || instbuf.op == Z80_RET || instbuf.op == Z80_RETI || instbuf.op == Z80_RETN || instbuf.op == Z80_RST) {
- break;
- }
switch (instbuf.op)
{
case Z80_JR:
@@ -155,9 +152,14 @@ int main(int argc, char ** argv)
case Z80_JPCC:
case Z80_CALL:
case Z80_CALLCC:
+ case Z80_RST:
reference(instbuf.immed);
def = defer(instbuf.immed, def);
break;
+ default:
+ if (z80_is_terminal(&instbuf)) {
+ address = filesize + 1;
+ }
}
}
}