From 6fe644ef46523e9be52921468776ee3680dd7d14 Mon Sep 17 00:00:00 2001 From: Trevor Merritt Date: Tue, 8 Oct 2024 19:44:58 -0400 Subject: [PATCH] adds support for showing/hiding the 3 windows - memory - video - registers --- emma/src/bin/emmagui.rs | 19 ++++++++++++------- emma/src/bin/support/emmagui_support.rs | 17 ++++++++++++----- emma/src/chip8/instructions.rs | 6 ++++++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/emma/src/bin/emmagui.rs b/emma/src/bin/emmagui.rs index 5476f89..126ff8e 100644 --- a/emma/src/bin/emmagui.rs +++ b/emma/src/bin/emmagui.rs @@ -35,6 +35,7 @@ fn hello_world_window(ui: &Ui) { }); } +#[derive(Copy, Clone)] struct UiState { pub show_registers: bool, pub show_memory: bool, @@ -57,16 +58,20 @@ fn main() { let mut system = Chip8Computer::default(); let mut ui_state = UiState::default(); support::simple_init(file!(), move |_, ui| { + EmmaGui::system_controls(&mut system, &mut ui_state, ui); - // hello_world_window(ui); + if ui_state.show_registers { + EmmaGui::registers_view(&system, ui); + } - EmmaGui::system_controls(&mut system, ui); - - EmmaGui::registers_view(&system, ui); - let active_instruction = system.registers.peek_pc(); - EmmaGui::hex_memory_display(system.memory.clone(), (0x100, 0x10), active_instruction as i16, ui); - EmmaGui::video_display(&system, ui); + if ui_state.show_video { + EmmaGui::video_display(&system, ui); + } + if ui_state.show_memory { + let active_instruction = system.registers.peek_pc(); + EmmaGui::hex_memory_display(system.memory.clone(), (0x100, 0x10), active_instruction as i16, ui); + } // EmmaGui::system_memory_render(system.memory, ui); // system.memory.gui_render(ui); diff --git a/emma/src/bin/support/emmagui_support.rs b/emma/src/bin/support/emmagui_support.rs index fae7bf6..9db58a4 100644 --- a/emma/src/bin/support/emmagui_support.rs +++ b/emma/src/bin/support/emmagui_support.rs @@ -7,9 +7,11 @@ use imgui::{Condition, ImColor32, Ui}; use emmaemu::chip8::computer::Chip8Computer; use emmaemu::chip8::system_memory::Chip8SystemMemory; use emmaemu::constants::{CHIP8_VIDEO_HEIGHT, CHIP8_VIDEO_WIDTH}; +use crate::UiState; -pub struct EmmaGui {} +pub struct EmmaGui { +} const CELL_WIDTH: i32 = 5i32; const CELL_HEIGHT: i32 = 5i32; @@ -17,9 +19,10 @@ const CELL_HEIGHT: i32 = 5i32; impl EmmaGui { pub fn video_display(system_to_control: &Chip8Computer, ui: &Ui) { // draw area size - let draw_area_size = ui.window_size(); - let cell_width = draw_area_size[0] as i32 / 64; - let cell_height = draw_area_size[1] as i32 / 32; + let draw_area_size = ui.io().display_size; + let cell_width = ((draw_area_size[0] as i32 / 64) * 6) / 10; + let cell_height = ((draw_area_size[1] as i32 / 32) * 6) / 10; + ui.window(format!("Display {cell_width}x{cell_height}")) .size([300.0, 300.0], Condition::FirstUseEver) @@ -45,7 +48,7 @@ impl EmmaGui { } }); } - pub fn system_controls(system_to_control: &mut Chip8Computer, ui: &Ui) { + pub fn system_controls(system_to_control: &mut Chip8Computer, gui_state: &mut UiState, ui: &Ui) { ui.window("!!!! CONTROLS !!!!") .size([200.0, 200.0], Condition::FirstUseEver) .build(|| { @@ -77,6 +80,10 @@ impl EmmaGui { println!("{}", system_to_control.dump_registers_to_string()); } + ui.checkbox("Show Memory", &mut gui_state.show_memory); + ui.checkbox("Show Video", &mut gui_state.show_video); + ui.checkbox("Show Registers", &mut gui_state.show_registers); + }); } diff --git a/emma/src/chip8/instructions.rs b/emma/src/chip8/instructions.rs index 7a2f379..d2f6bd8 100644 --- a/emma/src/chip8/instructions.rs +++ b/emma/src/chip8/instructions.rs @@ -1488,4 +1488,10 @@ mod test { Chip8CpuInstructions::LdVxK(0x1).execute(&mut x); assert!(matches!(x.state, WaitingForKey)); } + + #[test] + fn f6_fail_hard_test() { + let mut x = Chip8Computer::new(); + + } }