adds support for showing/hiding the 3 windows

- memory
- video
- registers
This commit is contained in:
Trevor Merritt 2024-10-08 19:44:58 -04:00
parent d06bc3fd87
commit 6fe644ef46
3 changed files with 30 additions and 12 deletions

View File

@ -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);

View File

@ -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);
});
}

View File

@ -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();
}
}