diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-05-09 19:24:18 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-05-09 19:24:18 -0700 |
commit | 7d51c0144bcc12d49cc6d4d5207e086451b9b6b7 (patch) | |
tree | 7538c25a07d98ba45cb2da15442f01990439ae10 | |
parent | 57456f30398fdb57a8bf1a201e222f121570a4a1 (diff) |
Fix terminal instruction detection in disassembler
-rw-r--r-- | z80_to_x86.c | 14 | ||||
-rw-r--r-- | z80inst.c | 7 | ||||
-rw-r--r-- | z80inst.h | 1 | ||||
-rw-r--r-- | zdis.c | 8 |
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]; } @@ -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); +} + + @@ -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_ @@ -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; + } } } } |