From fdd46f6773b1ac51dc059e77fe71c44055fe1c55 Mon Sep 17 00:00:00 2001 From: tudnai Date: Thu, 17 Nov 2022 13:17:52 -0800 Subject: [PATCH] Memory Breakpoint - phase #1 --- src/cpu/6502_bp.c | 14 ++++++++------ src/cpu/6502_dbg.c | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/cpu/6502_bp.c b/src/cpu/6502_bp.c index 2ab7204..db173a7 100644 --- a/src/cpu/6502_bp.c +++ b/src/cpu/6502_bp.c @@ -186,9 +186,9 @@ int m6502_dbg_bp_get_empty() { /// Get first not empty slot in the bp storage /// @return Index of the empty breakpoint or -1 if error -int m6502_dbg_bp_get_not_empty() { - for (int i = 0; i < DEBUG_MAX_BREAKPOINTS; i++) { - if ( breakpoints[i] ) { +int m6502_dbg_bp_get_not_empty(uint16_t * bp) { + for (int i = 1; i < DEBUG_MAX_BREAKPOINTS; i++) { + if ( bp[i] ) { return i; } } @@ -201,9 +201,11 @@ int m6502_dbg_bp_get_not_empty() { /// @note: Array must be sorted before this! /// @return last index int m6502_dbg_bp_compact(uint16_t * bp) { - int i = m6502_dbg_bp_get_not_empty(); - memcpy(bp, bp + i, LAST_IDX(bp) * sizeof(uint16_t)); - memset(bp + LAST_IDX(bp) - i + 1, 0, (DEBUG_MAX_BREAKPOINTS - LAST_IDX(bp) + i - 1) * sizeof(uint16_t)); + int i = m6502_dbg_bp_get_not_empty(bp); + if ( i > 1 ) { + memcpy(bp + 1, bp + i, LAST_IDX(bp) * sizeof(uint16_t)); + } + memset(bp + i + 1, 0, (DEBUG_MAX_BREAKPOINTS - i - 2) * sizeof(uint16_t)); return m6502_dbg_bp_get_last(bp, LAST_IDX(bp)); } diff --git a/src/cpu/6502_dbg.c b/src/cpu/6502_dbg.c index 2e33363..5867dda 100644 --- a/src/cpu/6502_dbg.c +++ b/src/cpu/6502_dbg.c @@ -190,8 +190,6 @@ void m6502_Debug(void) { if ( m6502_dbg_bp_exists(breakpoints, m6502.PC) ) { cpuState = cpuState_halted; -// m6502.debugger.wMask = 0; -// m6502.debugger.on = 0; m6502.interrupt = BREAKPOINT; return; } @@ -227,6 +225,8 @@ void m6502_dbg_init(void) { m6502.debugger.mask.inv = 1; m6502.debugger.SP = 0xFF; m6502_dbg_bp_del_all(breakpoints); + m6502_dbg_bp_del_all(mem_read_breakpoints); + m6502_dbg_bp_del_all(mem_write_breakpoints); }