working on gemmaegui to build a usable UI
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
pub mod EmmaEGuiState;
|
||||
pub mod GemmaEGuiSupport;
|
||||
Reference in New Issue
Block a user