Trevor Merritt eccc3fe9e3 evolve egui interface
move more control back up to the ComputerManager
2024-10-22 08:25:08 -04:00

85 lines
2.5 KiB
Rust

use std::default::Default;
use std::fs::DirEntry;
use std::time::Instant;
use gemma::{
chip8::computer::Chip8Computer,
constants::{CHIP8_MEMORY_SIZE, CHIP8_VIDEO_HEIGHT, CHIP8_VIDEO_WIDTH},
};
use imgui::*;
use sys::{ImColor, ImVec2, ImVector_ImU32};
use rand::random;
use gemma::chip8::computer_manager::Chip8ComputerManager;
use gemma::chip8::cpu_states::Chip8CpuStates::WaitingForInstruction;
use gemma::chip8::system_memory::Chip8SystemMemory;
use support::{emmagui_support::GemmaImguiSupport, ui_state::ImGuiUiState};
mod support;
/// Keypad Mappings for my Linux box
/// 1 2 3 C
/// 4 5 6 D
/// 7 8 9 E
/// A 0 B F
const LIN_KEYS: [(u16, u8); 0x10] = [(537, 0x01),(538, 0x02),(539, 0x03),(540, 0x0c),
(562, 0x04),(568, 0x05),(550, 0x06),(563, 0x0d),
(546, 7),(564, 8),(549, 9),(551, 0xe),
(571, 0xa),(569, 0),(548, 0xb),(567, 0xf)];
fn main() {
pretty_env_logger::init();
let mut system = Chip8ComputerManager::default();
let mut ui_state = ImGuiUiState::default();
support::simple_init(file!(), move |_, ui| {
let current_time = Instant::now();
// Key Checks
let down_keys = ui.io().keys_down;
// START DEBUG CODE TO DISPLAY WHAT KEYS WE TRAPPED
for (idx, val) in down_keys.iter().enumerate() {
if *val {
println!("{idx} = {val}");
}
}
// END DEBUG CODE
for (key_code, key_reg) in LIN_KEYS {
if down_keys[key_code as usize] {
system.press_key(key_reg);
system.wait_for_instruction();
} else {
// do we need to release it?
if system.is_key_pressed(key_reg) {
system.release_key(key_reg);
}
}
}
system.tick();
// GUI Parts
if ui_state.show_video {
GemmaImguiSupport::video_display(&system.state(), &ui_state, ui);
}
GemmaImguiSupport::system_controls(&mut system, &mut ui_state, ui);
if ui_state.show_registers {
GemmaImguiSupport::registers_view(&system.state(), ui);
}
if ui_state.show_memory {
let active_instruction = system.state().registers.peek_pc();
GemmaImguiSupport::hex_memory_display(system.state().memory.clone(), (0x100, 0x10), active_instruction as i16, ui);
}
if ui_state.show_keypad {
GemmaImguiSupport::keypad_display(&system.state(), ui);
}
});
}