From 708099e45d4a1929ebbe395902a4b0d5c66013eb Mon Sep 17 00:00:00 2001 From: tudnai Date: Sun, 30 Oct 2022 16:50:02 -0700 Subject: [PATCH] Step_Out & Step_Over --- A2Mac/DebuggerViewController.swift | 1 - A2Mac/DebuggerWindowController.swift | 28 ++++++++++++++++++++++++++++ src/util/disassembler.c | 4 ++++ src/util/disassembler.h | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/A2Mac/DebuggerViewController.swift b/A2Mac/DebuggerViewController.swift index 96164fe..d37dfb4 100644 --- a/A2Mac/DebuggerViewController.swift +++ b/A2Mac/DebuggerViewController.swift @@ -229,7 +229,6 @@ N V - B D I Z C DisplayStack() DisplayMemory() DisplayDisassembly() - } diff --git a/A2Mac/DebuggerWindowController.swift b/A2Mac/DebuggerWindowController.swift index 3ca0a87..0ddee5f 100644 --- a/A2Mac/DebuggerWindowController.swift +++ b/A2Mac/DebuggerWindowController.swift @@ -131,6 +131,19 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate { @IBAction func Step_Over(_ sender: Any) { + let sp = m6502.SP + + m6502_Step() + while m6502.SP < 0xFF && m6502.SP < sp { + m6502_Step() + } + + // TODO: This should be in Debugger! + if let debugger = DebuggerViewController.shared { + debugger.Update() + } + + // TODO: Update Screen and speaker etc } @@ -140,10 +153,25 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate { if let debugger = DebuggerViewController.shared { debugger.Update() } + + // TODO: Update Screen and speaker etc } @IBAction func Step_Out(_ sender: Any) { + let sp = m6502.SP + + m6502_Step() + while m6502.SP < 0xFF && m6502.SP <= sp { + m6502_Step() + } + + // TODO: This should be in Debugger! + if let debugger = DebuggerViewController.shared { + debugger.Update() + } + + // TODO: Update Screen and speaker etc } diff --git a/src/util/disassembler.c b/src/util/disassembler.c index 7f2f290..f772cd6 100644 --- a/src/util/disassembler.c +++ b/src/util/disassembler.c @@ -62,6 +62,8 @@ void _disPrintf( char * s, const size_t n, const char * fmt, ... ) { // } } +INLINE uint8_t memread8_low( uint16_t addr ); + void _disNewInstruction(void) { // if ( m6502.dbgLevel.trace ) { memset( &disassembly, 0, sizeof(disassembly) ); @@ -73,6 +75,8 @@ void _disNewInstruction(void) { // disassembly.oper[0] = '\0'; // disassembly.comment[0] = '\0'; // } + + disassembly.op = memread8_low(m6502.PC); } diff --git a/src/util/disassembler.h b/src/util/disassembler.h index cf094b2..bd72a88 100644 --- a/src/util/disassembler.h +++ b/src/util/disassembler.h @@ -30,6 +30,7 @@ typedef struct disassembly_s { uint64_t clk; // clock time + uint8_t op; // opcode char addr[5]; // 4 digits + \0 char opcode[4 * 3 + 1]; // max 4 bytes * (2 digits + 1 space) + \0 char * pOpcode; // pointer for opcode string builder