diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-12-21 22:33:24 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-12-21 22:33:24 -0800 |
commit | bd678c1400e3589e591e371049d6a79d81ae131c (patch) | |
tree | fad7fdea2cdd8ef308392952a640c356cdc86ca1 /dis.c | |
parent | ac74c3c5e970bd9ac2a70f8784e34f5152f0b44c (diff) |
Fix bug in disassembler that caused it to disassemble addresses it shouldn't
Diffstat (limited to 'dis.c')
-rw-r--r-- | dis.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -26,6 +26,7 @@ deferred * defer(uint32_t address, deferred * next) if (is_visited(address)) { return next; } + //printf("deferring %X\n", address); deferred * d = malloc(sizeof(deferred)); d->address = address; d->next = next; @@ -83,7 +84,8 @@ int main(int argc, char ** argv) next = m68k_decode(encoded, &instbuf, address); address += (next-encoded)*2; encoded = next; - m68k_disasm(&instbuf, disbuf); + //m68k_disasm(&instbuf, disbuf); + //printf("%X: %s\n", instbuf.address, disbuf); if (instbuf.op == M68K_ILLEGAL || instbuf.op == M68K_RTS || instbuf.op == M68K_RTE) { break; } else if (instbuf.op == M68K_BCC || instbuf.op == M68K_DBCC || instbuf.op == M68K_BSR) { @@ -98,7 +100,7 @@ int main(int argc, char ** argv) def = defer(tmp_addr, def); } } else if(instbuf.op == M68K_JMP) { - if (instbuf.src.addr_mode == MODE_ABSOLUTE || MODE_ABSOLUTE_SHORT) { + if (instbuf.src.addr_mode == MODE_ABSOLUTE || instbuf.src.addr_mode == MODE_ABSOLUTE_SHORT) { address = instbuf.src.params.immed; encoded = filebuf + address/2; if (is_visited(address)) { @@ -108,7 +110,7 @@ int main(int argc, char ** argv) break; } } else if(instbuf.op == M68K_JSR) { - if (instbuf.src.addr_mode == MODE_ABSOLUTE || MODE_ABSOLUTE_SHORT) { + if (instbuf.src.addr_mode == MODE_ABSOLUTE || instbuf.src.addr_mode == MODE_ABSOLUTE_SHORT) { def = defer(instbuf.src.params.immed, def); } } @@ -125,7 +127,6 @@ int main(int argc, char ** argv) #else for(cur = filebuf + 0x100; (cur - filebuf) < (filesize/2); ) { - //printf("cur: %p: %x\n", cur, *cur); unsigned short * start = cur; cur = m68k_decode(cur, &instbuf, (start - filebuf)*2); m68k_disasm(&instbuf, disbuf); |