104 lines
2.8 KiB
Rust
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);
|
|
}
|
|
});
|
|
})
|
|
}
|