From 78423708c532bacf95ebc1a4155fe1d43d3d91db Mon Sep 17 00:00:00 2001 From: David Banks Date: Sun, 4 Jul 2021 19:31:13 +0100 Subject: [PATCH] Z80: Ignore machine state in disasseble command Change-Id: I28b67a53ec8936bb9172aa10ca6548fe0d9e6460 --- firmware/AtomBusMon.c | 4 ++-- firmware/dis.h | 6 +++++- firmware/dis6502.c | 2 +- firmware/dis65c02.c | 2 +- firmware/dis6809.c | 2 +- firmware/disz80.c | 12 ++++++++---- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/firmware/AtomBusMon.c b/firmware/AtomBusMon.c index b5c93b8..eb2fcfb 100644 --- a/firmware/AtomBusMon.c +++ b/firmware/AtomBusMon.c @@ -922,7 +922,7 @@ void writeIOByteInc() { addr_t disMem(addr_t addr) { loadAddr(addr); - return disassemble(addr); + return disassemble(addr, MODE_NORMAL); } void genericDump(char *params, data_t (*readFunc)()) { @@ -1526,7 +1526,7 @@ void doCmdDis(char *params) { memAddr = startAddr; loadAddr(memAddr); do { - memAddr = disassemble(memAddr); + memAddr = disassemble(memAddr, MODE_DIS_CMD); i++; } while ((!endAddr && i < 10) || (endAddr && memAddr > startAddr && memAddr <= endAddr)); } diff --git a/firmware/dis.h b/firmware/dis.h index 33e42f7..8c60c04 100644 --- a/firmware/dis.h +++ b/firmware/dis.h @@ -6,6 +6,10 @@ #define PDC_DDR DDRA #define PDC_DIN PINA -addr_t disassemble(addr_t addr); +#define MODE_NORMAL 0 +#define MODE_DIS_CMD 1 + +addr_t disassemble(addr_t addr, uint8_t m); + #endif diff --git a/firmware/dis6502.c b/firmware/dis6502.c index 9b0a655..328436e 100644 --- a/firmware/dis6502.c +++ b/firmware/dis6502.c @@ -167,7 +167,7 @@ static const unsigned char dopaddr[256] PROGMEM = /*F0*/ BRA, INDY, IMP, IMP, ZP, ZPX, ZPX, IMP, IMP, ABSY, IMP, IMP, ABS, ABSX, ABSX, IMP }; -addr_t disassemble(addr_t addr) +addr_t disassemble(addr_t addr, uint8_t m) { char buffer[40]; diff --git a/firmware/dis65c02.c b/firmware/dis65c02.c index 2b06f47..d4ad91e 100644 --- a/firmware/dis65c02.c +++ b/firmware/dis65c02.c @@ -187,7 +187,7 @@ static const unsigned char dopaddr[256] PROGMEM = /*F0*/ BRA, INDY, IND, IMP, ZP, ZPX, ZPX, IMP, IMP, ABSY, IMP, IMP, ABS, ABSX, ABSX, IMP }; -addr_t disassemble(addr_t addr) +addr_t disassemble(addr_t addr, uint8_t m) { char buffer[40]; diff --git a/firmware/dis6809.c b/firmware/dis6809.c index 31725ce..454b3ce 100644 --- a/firmware/dis6809.c +++ b/firmware/dis6809.c @@ -647,7 +647,7 @@ static char *strcc(char *ptr, uint8_t val) { /* disassemble one instruction at address addr and return the address of the next instruction */ -addr_t disassemble(addr_t addr) { +addr_t disassemble(addr_t addr, uint8_t m) { uint8_t d = get_memb(addr); uint8_t s; int8_t i; diff --git a/firmware/disz80.c b/firmware/disz80.c index 49ef72d..a65dfe5 100644 --- a/firmware/disz80.c +++ b/firmware/disz80.c @@ -887,12 +887,15 @@ char * disassem (char *ptr, unsigned int *ip) { return ptr; } -addr_t disassemble(addr_t addr) { +addr_t disassemble(addr_t addr, uint8_t m) { static char buffer[64]; char *ptr; addr_t addr2 = addr; + // Ignore the current CPU state in the disassemble connamd + uint8_t pdc = (m == MODE_DIS_CMD) ? 0 : PDC_DIN; + // 0123456789012345678901234567890123456789 // AAAA : HH HH HH HH : LD RR,($XXXX) @@ -905,11 +908,12 @@ addr_t disassemble(addr_t addr) { // Opcode ptr = buffer + 21; - if (PDC_DIN & 0x80) { + + if (pdc & 0x80) { strcpy_P(ptr, msg_HALT); - } else if (PDC_DIN & 0x40) { + } else if (pdc & 0x40) { strcpy(ptr, msg_NMI); - } else if (PDC_DIN & 0x20) { + } else if (pdc & 0x20) { strcpy(ptr, msg_INT); } else { ptr = disassem(ptr, &addr2);