From d802d39d8d676a63152387325c856c7bc5be5c00 Mon Sep 17 00:00:00 2001 From: Guy Perfect Date: Mon, 23 Dec 2024 09:56:54 -0600 Subject: [PATCH] Prevent non-debug writes to CTA --- core/vip.c | 10 ++++++---- util/disassembler.c | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/vip.c b/core/vip.c index 0860890..74b9bb2 100644 --- a/core/vip.c +++ b/core/vip.c @@ -481,10 +481,12 @@ static void vipWriteIO( break; case 0x5F830>>1: /* CTA */ - if ((mask & 0xFF00) == 0) - sim->vip.cta.cta_r = value >> 8; - if ((mask & 0x00FF) == 0) - sim->vip.cta.cta_l = value; + if (debug) { + if ((mask & 0xFF00) == 0) + sim->vip.cta.cta_r = value >> 8; + if ((mask & 0x00FF) == 0) + sim->vip.cta.cta_l = value; + } break; case 0x5F842>>1: /* XPCTRL */ diff --git a/util/disassembler.c b/util/disassembler.c index 2f1a596..896f34c 100644 --- a/util/disassembler.c +++ b/util/disassembler.c @@ -513,6 +513,8 @@ static int dasmLine(VB *sim, uint32_t *address, uint32_t pc, line->isPC = *address == pc; for (x = 0; x < line->codeLength; x++) line->code[x] = vbRead(sim, *address + x, VB_U8); + + /* Advance to the next instruction or PC, whichever is sooner */ *address += pc != *address && pc - *address < line->codeLength ? pc - *address : line->codeLength; @@ -657,6 +659,8 @@ static VBU_DasmLine* dasmDisassemble(VB *sim, uint32_t address, size = vbuCodeSize(sim, addr); if (address - addr < size) break; + + /* Advance to the next instruction or PC, whichever is sooner */ addr += addr != pc && pc - addr < size ? pc - addr : size; }