summaryrefslogtreecommitdiff
path: root/dis.c
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2012-12-21 22:33:24 -0800
committerMike Pavone <pavone@retrodev.com>2012-12-21 22:33:24 -0800
commitbd678c1400e3589e591e371049d6a79d81ae131c (patch)
treefad7fdea2cdd8ef308392952a640c356cdc86ca1 /dis.c
parentac74c3c5e970bd9ac2a70f8784e34f5152f0b44c (diff)
Fix bug in disassembler that caused it to disassemble addresses it shouldn't
Diffstat (limited to 'dis.c')
-rw-r--r--dis.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/dis.c b/dis.c
index c3406f9..c6357d8 100644
--- a/dis.c
+++ b/dis.c
@@ -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);