From 4ae8bfe658d8e34de45490aada97985d1a13f9bf Mon Sep 17 00:00:00 2001 From: tudnai Date: Sun, 13 Nov 2022 11:49:34 -0800 Subject: [PATCH] Turn debugging on and off based on debugger window active status --- A2Mac/DebuggerWindowController.swift | 4 +-- src/cpu/6502.c | 37 +++++++++++----------------- src/cpu/6502_bp.c | 7 +----- src/cpu/6502_bp.h | 1 - src/cpu/6502_debugger.c | 24 ++++++++++++++++++ src/cpu/6502_debugger.h | 3 +++ 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/A2Mac/DebuggerWindowController.swift b/A2Mac/DebuggerWindowController.swift index 55969a7..ed58c3e 100644 --- a/A2Mac/DebuggerWindowController.swift +++ b/A2Mac/DebuggerWindowController.swift @@ -31,6 +31,7 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate { required init?(coder: NSCoder) { super.init(coder: coder) DebuggerWindowController.shared = self + m6502_dbg_init() } @@ -39,8 +40,6 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate { if isWindowFullscreen { window?.toggleFullScreen(self) } - - m6502_dbg_init() } @@ -57,6 +56,7 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate { } func windowWillClose(_ notification: Notification) { + m6502_dbg_off() DebuggerWindowController.shared = nil } diff --git a/src/cpu/6502.c b/src/cpu/6502.c index d379bca..bbc5ed0 100644 --- a/src/cpu/6502.c +++ b/src/cpu/6502.c @@ -40,6 +40,7 @@ #include #include "6502.h" #include "6502_bp.h" +#include "6502_debugger.h" #include "speaker.h" @@ -112,16 +113,11 @@ m6502_t m6502 = { 0, // lastIO 0, // ecoSpindown - - 0, // trace - 0, // step - 0, // brk - 0, // rts - 0, // bra - 0, // bra_true - 0, // bra_false - 0, // compile - + + 0, // debugger.on + 0xFF, // debugger.SP + 0, // debugger.wMask + HALT, // IF }; @@ -423,10 +419,7 @@ void m6502_Debug(void) { m6502.lastIO = 0; m6502.interrupt = NO_INT; // TODO: This should be taken care by the interrupt handler - m6502.debugger.on = 1; - m6502.debugger.mask.hlt = 1; - m6502.debugger.mask.brk = 1; - m6502.debugger.mask.inv = 1; + m6502_dbg_on(); if( diskAccelerator_count ) { if( --diskAccelerator_count <= 0 ) { @@ -443,7 +436,7 @@ void m6502_Debug(void) { case HALT: if (m6502.debugger.mask.hlt) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } break; @@ -451,7 +444,7 @@ void m6502_Debug(void) { case BREAK: if (m6502.debugger.mask.brk) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } break; @@ -459,7 +452,7 @@ void m6502_Debug(void) { case IRQ: if (m6502.debugger.mask.irq) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } break; @@ -467,7 +460,7 @@ void m6502_Debug(void) { case NMI: if (m6502.debugger.mask.nmi) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } break; @@ -475,7 +468,7 @@ void m6502_Debug(void) { case INV: if (m6502.debugger.mask.inv) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } break; @@ -485,7 +478,7 @@ void m6502_Debug(void) { if (m6502.debugger.mask.out) { if ( m6502.SP >= m6502.debugger.SP ) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; +// m6502.debugger.wMask = 0; return; } } @@ -512,8 +505,8 @@ void m6502_Debug(void) { if ( m6502_dbg_bp_is_exists(m6502.PC) ) { cpuState = cpuState_halted; - m6502.debugger.wMask = 0; - m6502.debugger.on = 0; +// m6502.debugger.wMask = 0; +// m6502.debugger.on = 0; m6502.interrupt = BREAKPOINT; return; } diff --git a/src/cpu/6502_bp.c b/src/cpu/6502_bp.c index b6b2ab7..1c77903 100644 --- a/src/cpu/6502_bp.c +++ b/src/cpu/6502_bp.c @@ -30,6 +30,7 @@ #include #include +#include "6502.h" #include "6502_bp.h" /// Array of addresses of active breakpoints @@ -239,9 +240,3 @@ void m6502_dbg_bp_del_all(void) { } -/// Initialize Breakpoints -void m6502_dbg_init(void) { - m6502_dbg_bp_del_all(); -} - - diff --git a/src/cpu/6502_bp.h b/src/cpu/6502_bp.h index 54d144f..444126d 100644 --- a/src/cpu/6502_bp.h +++ b/src/cpu/6502_bp.h @@ -15,7 +15,6 @@ extern uint16_t breakpoints[DEBUG_MAX_BREAKPOINTS]; extern int bp_last_idx; -extern void m6502_dbg_init(void); extern int m6502_dbg_bp_add(uint16_t addr); extern void m6502_dbg_bp_del(uint16_t addr); extern void m6502_dbg_bp_del_all(void); diff --git a/src/cpu/6502_debugger.c b/src/cpu/6502_debugger.c index 77f3bdf..1bcc9e1 100644 --- a/src/cpu/6502_debugger.c +++ b/src/cpu/6502_debugger.c @@ -76,6 +76,7 @@ typedef struct { #include "6502_debugger.h" #include "6502_instructions.h" +#include "6502_bp.h" INLINE int m6502_Disass_1_Instr(void) { @@ -94,4 +95,27 @@ INLINE int m6502_Disass_1_Instr(void) { return 2; } +/// Turn On Debugger +void m6502_dbg_on(void) { + m6502.debugger.on = 1; +} + + +/// Turn Off Debugger +void m6502_dbg_off(void) { + m6502.debugger.on = 0; +} + + +/// Initialize Breakpoints +void m6502_dbg_init(void) { + m6502_dbg_on(); + m6502.debugger.wMask = 0; + m6502.debugger.mask.hlt = 1; + m6502.debugger.mask.brk = 1; + m6502.debugger.mask.inv = 1; + m6502.debugger.SP = 0xFF; + m6502_dbg_bp_del_all(); +} + diff --git a/src/cpu/6502_debugger.h b/src/cpu/6502_debugger.h index 4f23cae..443bd3f 100644 --- a/src/cpu/6502_debugger.h +++ b/src/cpu/6502_debugger.h @@ -12,6 +12,9 @@ extern uint16_t disass_addr; extern int m6502_Disass_1_Instr(void); +extern void m6502_dbg_on(void); +extern void m6502_dbg_off(void); +extern void m6502_dbg_init(void); #endif /* _6502_debugger_h */