Add run to address to debugger
This commit is contained in:
@@ -1,13 +1,28 @@
|
||||
use std::rc::Rc;
|
||||
|
||||
use iced::{
|
||||
Element,
|
||||
Length::{self, Fill},
|
||||
Point, Renderer, Size, Theme,
|
||||
advanced::{
|
||||
layout::Node, widget::{
|
||||
tree::{State, Tag}, Tree
|
||||
}, Widget
|
||||
}, mouse, widget::{
|
||||
self, button, canvas::{Frame, Program}, checkbox, column, container::bordered_box, image, number_input, row, rule::horizontal, scrollable, text, Canvas, Text
|
||||
}, window::Event, Element, Length::{self, Fill}, Point, Renderer, Size, Theme
|
||||
Widget,
|
||||
layout::Node,
|
||||
widget::{
|
||||
Tree,
|
||||
tree::{State, Tag},
|
||||
},
|
||||
},
|
||||
mouse,
|
||||
widget::{
|
||||
self, Canvas, Text, button,
|
||||
canvas::{Frame, Program},
|
||||
checkbox, column,
|
||||
container::bordered_box,
|
||||
image, number_input, hex_input, row,
|
||||
rule::horizontal,
|
||||
scrollable, text,
|
||||
},
|
||||
window::Event,
|
||||
};
|
||||
|
||||
use crate::{CycleResult, NES, PPU};
|
||||
@@ -20,6 +35,7 @@ pub struct DebuggerState {
|
||||
scan_lines: usize,
|
||||
to_scan_line: usize,
|
||||
frames: usize,
|
||||
breakpoint: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -38,6 +54,8 @@ pub enum DebuggerMessage {
|
||||
RunToScanLine,
|
||||
SetFrames(usize),
|
||||
RunFrames,
|
||||
SetBreakpoint(usize),
|
||||
RunBreakpoint,
|
||||
}
|
||||
|
||||
pub fn hex16<'a, Theme, Renderer>(val: u16) -> Text<'a, Theme, Renderer>
|
||||
@@ -78,6 +96,7 @@ impl DebuggerState {
|
||||
scan_lines: 1,
|
||||
to_scan_line: 1,
|
||||
frames: 1,
|
||||
breakpoint: 0xEA5A,
|
||||
// cpu_cycles: 1,
|
||||
}
|
||||
}
|
||||
@@ -126,6 +145,7 @@ impl DebuggerState {
|
||||
labelled("Cycle", text(nes.ppu().pixel)),
|
||||
labelled("Scanline", text(nes.ppu().scanline)),
|
||||
labelled("PPU Cycle", text(nes.ppu().cycle)),
|
||||
labelled("Frame", text(nes.ppu().frame_count)),
|
||||
labelled("V:", hex16(nes.ppu().background.v)),
|
||||
labelled("T:", hex16(nes.ppu().background.t)),
|
||||
labelled("X:", hex8(nes.ppu().background.x)),
|
||||
@@ -205,6 +225,12 @@ impl DebuggerState {
|
||||
DebuggerMessage::SetFrames,
|
||||
DebuggerMessage::RunFrames
|
||||
),
|
||||
run_type_hex(
|
||||
"To Address:",
|
||||
self.breakpoint,
|
||||
DebuggerMessage::SetBreakpoint,
|
||||
DebuggerMessage::RunBreakpoint
|
||||
),
|
||||
],
|
||||
]
|
||||
.spacing(5.),
|
||||
@@ -257,6 +283,7 @@ impl DebuggerState {
|
||||
DebuggerMessage::SetScanLines(n) => self.scan_lines = n,
|
||||
DebuggerMessage::SetToScanLine(n) => self.to_scan_line = n,
|
||||
DebuggerMessage::SetFrames(n) => self.frames = n,
|
||||
DebuggerMessage::SetBreakpoint(n) => self.breakpoint = n,
|
||||
DebuggerMessage::RunPPUCycles => Self::run_n_clock_cycles(nes, self.ppu_cycles),
|
||||
DebuggerMessage::RunCPUCycles => Self::run_n_clock_cycles(nes, self.cpu_cycles * 3),
|
||||
DebuggerMessage::RunInstructions => {
|
||||
@@ -267,6 +294,7 @@ impl DebuggerState {
|
||||
Self::run_until(nes, |_, n| n.ppu.scanline == self.to_scan_line, 1)
|
||||
}
|
||||
DebuggerMessage::RunFrames => Self::run_n_clock_cycles(nes, self.frames * 341 * 262),
|
||||
DebuggerMessage::RunBreakpoint => Self::run_until(nes, |_, nes| nes.cpu.pc as usize == self.breakpoint, 1),
|
||||
DebuggerMessage::Run => Self::run_until(nes, |_, nes| nes.halted, 1),
|
||||
DebuggerMessage::Pause => todo!(),
|
||||
}
|
||||
@@ -288,6 +316,21 @@ fn run_type<'a, Message: Clone + 'a>(
|
||||
.spacing(1.)
|
||||
.into()
|
||||
}
|
||||
fn run_type_hex<'a, Message: Clone + 'a>(
|
||||
label: &'a str,
|
||||
val: usize,
|
||||
update: impl Fn(usize) -> Message + 'a,
|
||||
run: Message,
|
||||
) -> Element<'a, Message> {
|
||||
row![
|
||||
widget::container(text(label)).padding(2.),
|
||||
widget::container(hex_input(val).on_input(update).on_submit(run.clone())).padding(2.),
|
||||
widget::container(button(image("./images/ic_fluent_play_24_filled.png")).on_press(run))
|
||||
.padding(2.),
|
||||
]
|
||||
.spacing(1.)
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn labelled<'a, Message: 'a>(
|
||||
label: &'a str,
|
||||
|
||||
Reference in New Issue
Block a user