104 lines
2.8 KiB
Rust

use eframe::egui;
use egui::Ui;
use gemma::chip8::computer::Chip8Computer;
struct EmmaEGuiState {
pub display_video: bool,
pub display_memory: bool,
pub display_registers: bool
}
impl Default for EmmaEGuiState {
fn default() -> Self {
Self { display_video: true,
display_memory: true,
display_registers: true }
}
}
fn controls_view(mut system: &mut Chip8Computer, state: &mut EmmaEGuiState, ui: &mut Ui) {
if ui.button("Step").clicked() {
system.step_system();
}
if ui.button("Start").clicked() {
println!("Start");
}
if ui.button("Stop").clicked() {
println!("STOP");
}
if ui.button("Reset").clicked() {
}
ui.checkbox(&mut state.display_memory, "Display Memory");
ui.checkbox(&mut state.display_video, "Display Video");
ui.checkbox(&mut state.display_registers, "Display Registers");
}
fn registers_view(system: &Chip8Computer, ui:& mut Ui) {
ui.label(format!("V0-7: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} ",
system.registers.peek(0x00),
system.registers.peek(0x01),
system.registers.peek(0x02),
system.registers.peek(0x03),
system.registers.peek(0x04),
system.registers.peek(0x05),
system.registers.peek(0x06),
system.registers.peek(0x07)
));
ui.label(format!("V8-F: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} ",
system.registers.peek(0x08),
system.registers.peek(0x09),
system.registers.peek(0x0A),
system.registers.peek(0x0B),
system.registers.peek(0x0C),
system.registers.peek(0x0D),
system.registers.peek(0x0E),
system.registers.peek(0x0F)
));
ui.label(format!("PC: {:04x}\tI: {:04x}" , system.registers.peek_pc(), system.registers.peek_i()));
}
fn video_view(system: &Chip8Computer, ui: &mut Ui) {
ui.label("Video goes here");
}
fn memory_view(system: &Chip8Computer, ui: &mut Ui) {
ui.label("Memory View");
}
fn main() -> eframe::Result {
println!("Taxation is Theft");
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 240.0]),
..Default::default()
};
let mut state = EmmaEGuiState::default();
let mut computer = Chip8Computer::new();
eframe::run_simple_native("EGUI Emma", options, move |ctx, _frame| {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Gemma");
controls_view(&mut computer, &mut state, ui);
if state.display_memory {
memory_view(&computer, ui);
}
if state.display_video {
video_view(&computer, ui);
}
if state.display_registers {
registers_view(&computer, ui);
}
});
})
}