From 4e2a5d21e1dc57d941ad2aed53db5e960c43809a Mon Sep 17 00:00:00 2001 From: Jay Oster Date: Mon, 23 Dec 2024 20:48:19 -0800 Subject: [PATCH 1/2] Fix disassembler tracing early exits with some LD instructions --- core/src/disassembler.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/disassembler.rs b/core/src/disassembler.rs index 9a6aa6b..fa5c859 100644 --- a/core/src/disassembler.rs +++ b/core/src/disassembler.rs @@ -527,7 +527,15 @@ pub fn compute_step( None, ) } - (None, 0x0000..=0x7FFF) => (None, None), + (None, 0x0000..=0x7FFF) => ( + Some(Cursor { + bank0, + bank, + pc: pc.wrapping_add(len as u16), + reg_a: None, + }), + None, + ), _ => ( Some(Cursor { bank0, From 0cace6aad07804fa08191a5451ea330aa138d57f Mon Sep 17 00:00:00 2001 From: Jay Oster Date: Mon, 23 Dec 2024 20:49:33 -0800 Subject: [PATCH 2/2] Remove unnecessary RefCell This doesn't do anything at all. It just makes the code harder to understand. --- core/src/disassembler.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/core/src/disassembler.rs b/core/src/disassembler.rs index fa5c859..c9d4112 100644 --- a/core/src/disassembler.rs +++ b/core/src/disassembler.rs @@ -360,18 +360,14 @@ impl Trace { return; } - let cursors = &std::cell::RefCell::new(cursors); - let (step, jump) = compute_step(len, cursor, &op, &rom.cartridge); - cursors.borrow_mut().extend(step); + cursors.extend(step); - let Some(jump) = jump else { - return - }; + let Some(jump) = jump else { return }; if let Some(to) = Address::from_cursor(&jump) { self.add_jump(address, to); - cursors.borrow_mut().push(jump); + cursors.push(jump); } }