# HG changeset patch # User Michael Pavone # Date 1661662952 25200 # Node ID 92dc3e24f3097ccc1add117ed0a9f5ed4cdd025c # Parent 3809a0bd680e5d860e886bfdada2827c435da3ba Fix a couple of Z80 disassembler issues diff -r 3809a0bd680e -r 92dc3e24f309 zdis.c --- a/zdis.c Sat Aug 27 22:02:09 2022 -0700 +++ b/zdis.c Sat Aug 27 22:02:32 2022 -0700 @@ -1,6 +1,6 @@ /* Copyright 2013 Michael Pavone - This file is part of BlastEm. + This file is part of BlastEm. BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. */ #include "z80inst.h" @@ -135,7 +135,7 @@ if (!def || !only) { def = defer(start, def); } - uint16_t address; + uint32_t address; while(def) { do { encoded = NULL; @@ -158,7 +158,7 @@ next = z80_decode(encoded, &instbuf); address += (next-encoded); encoded = next; - + //z80_disasm(&instbuf, disbuf); //printf("%X: %s\n", address, disbuf); switch (instbuf.op) @@ -173,6 +173,7 @@ break; case Z80_JP: address = instbuf.immed; + reference(address); encoded = filebuf + address - offset; break; case Z80_JPCC: @@ -197,20 +198,24 @@ } puts(""); } - for (address = offset; address < filesize + offset; address++) { + uint32_t end = filesize + offset; + if (end > 0xFFFF) { + end = 0x10000; + } + for (address = offset; address < end; address++) { if (is_visited(address)) { encoded = filebuf + address - offset; z80_decode(encoded, &instbuf); if (labels) { - /*m68k_disasm_labels(&instbuf, disbuf); - if (is_label(instbuf.address)) { - printf("ADR_%X:\n", instbuf.address); + z80_disasm(&instbuf, disbuf, address); + if (is_label(address)) { + printf("ADR_%X:\n", address); } if (addr) { - printf("\t%s\t;%X\n", disbuf, instbuf.address); + printf("\t%s\t;%X\n", disbuf, address); } else { printf("\t%s\n", disbuf); - }*/ + } } else { z80_disasm(&instbuf, disbuf, address); printf("%X: %s\n", address, disbuf);