From 1c4e8eff6849ce35c31f189f9a07519a89c48ef4 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Wed, 26 Aug 2026 08:26:01 +0200 Subject: vnf: don't report stack push/pop twice in verbose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On situations like jsr or rts, we perform two pushes/pops, but this is not to be reported in verbose mode as it's not that clear. Instead, let's report the full address in a single stack line. Signed-off-by: Miquel Sabaté Solà --- lib/vnf/src/lib.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/vnf/src/lib.rs b/lib/vnf/src/lib.rs index 4ba04c1..f2524cd 100644 --- a/lib/vnf/src/lib.rs +++ b/lib/vnf/src/lib.rs @@ -613,8 +613,9 @@ impl Machine { println!(); } - // Push the given 'value' to the stack. - fn push_stack(&mut self, value: u8) -> Result<(), String> { + // Push the given 'value' to the stack. Set 'report' to true if you want the + // output from verbose mode. + fn push_stack(&mut self, value: u8, report: bool) -> Result<(), String> { // Write the given value onto the stack. let address = 0x200 + self.s as u16; self.write_memory(address, value)?; @@ -625,22 +626,23 @@ impl Machine { return Err("stack underflow!".to_string()); } - if self.verbose { + if self.verbose && report { self.put_stack(); } Ok(()) } - // Pop the stack once and return the value that was found. - fn pop_stack(&mut self, account_read: bool) -> Result { + // Pop the stack once and return the value that was found. Set 'report' to + // true if you want the output from verbose mode. + fn pop_stack(&mut self, account_read: bool, report: bool) -> Result { if self.s == self.initial_stack_value { return Err("stack overflow!".to_string()); } self.s += 1; - if self.verbose { + if self.verbose && report { self.put_stack(); } @@ -908,8 +910,8 @@ impl Machine { let low = (next_address as u16 & 0x00FF) as u8; let high = ((next_address as u16 & 0xFF00) >> 8) as u8; - self.push_stack(high)?; - self.push_stack(low)?; + self.push_stack(high, false)?; + self.push_stack(low, true)?; self.pc = address; self.skip_pc = true; @@ -969,8 +971,8 @@ impl Machine { // stack was the next instruction before the call, but the size // of the 'rts/rti' should also be accounted. Hence the + 1 to // the resulting PC. - let low = self.pop_stack(false)? as u16; - let high = (self.pop_stack(false)? as u16) << 8; + let low = self.pop_stack(false, false)? as u16; + let high = (self.pop_stack(false, true)? as u16) << 8; self.pc = (high + low) as usize + 1; self.skip_pc = true; } -- cgit v1.2.3