working on gemmaegui to build a usable UI

This commit is contained in:
2024-10-11 15:02:15 -04:00
parent ef0250b519
commit c9ef6d4e04
9 changed files with 214 additions and 115 deletions
+9 -73
View File
@@ -1,74 +1,10 @@
use crate::support::GemmaEGuiSupport::GemmaEGui;
use crate::support::EmmaEGuiState::EmmaEGuiState;
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");
}
mod support;
fn main() -> eframe::Result {
println!("Taxation is Theft");
@@ -85,18 +21,18 @@ fn main() -> eframe::Result {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Gemma");
controls_view(&mut computer, &mut state, ui);
GemmaEGui::controls_view(&mut computer, &mut state, ui);
if state.display_memory {
memory_view(&computer, ui);
GemmaEGui::memory_view(&computer, ui);
}
if state.display_video {
video_view(&computer, ui);
GemmaEGui::video_view(&computer, ui);
}
if state.display_registers {
registers_view(&computer, ui);
if state.display_registers {
GemmaEGui::registers_view(&computer, ui);
}
});
})
@@ -0,0 +1,16 @@
pub 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,
}
}
}
@@ -0,0 +1,75 @@
use egui::Color32;
use egui::Rect;
use egui::Pos2;
use egui::Vec2;
use egui::Ui;
use crate::support::EmmaEGuiState::EmmaEGuiState;
use crate::Chip8Computer;
pub struct GemmaEGui {}
impl GemmaEGui {
pub 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");
}
pub 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()));
}
pub fn video_view(system: &Chip8Computer, ui: &mut Ui) {
ui.label("Video goes here");
let (resp, painter) = ui.allocate_painter(Vec2::new(400.0, 500.0), egui::Sense::hover());
for current_row in 0..32 {
for current_col in 0..64 {
let data_offset = current_row * 32 + current_col;
let origin = ui.next_widget_position();
let colour = if system.video_memory.peek(data_offset) {
Color32::RED
} else {
Color32::BLUE
};
let rect = Rect::from_min_size(origin, Vec2::new(10.0, 10.0));
painter.rect_filled(rect, 0.0, colour);
}
}
}
pub fn memory_view(system: &Chip8Computer, ui: &mut Ui) {
ui.label("Memory View");
}
}
+2
View File
@@ -0,0 +1,2 @@
pub mod EmmaEGuiState;
pub mod GemmaEGuiSupport;