diff --git a/.gitignore b/.gitignore index ea8c4bf..3a8cabc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.idea diff --git a/.idea/trevors_chip8_toy.iml b/.idea/trevors_chip8_toy.iml deleted file mode 100644 index 702a8af..0000000 --- a/.idea/trevors_chip8_toy.iml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gemma/src/constants.rs b/gemma/src/constants.rs index 2320f07..873ec4d 100644 --- a/gemma/src/constants.rs +++ b/gemma/src/constants.rs @@ -1,7 +1,3 @@ -use std::borrow::ToOwned; -use std::clone::Clone; -use std::net::ToSocketAddrs; -use std::string::ToString; pub const CHIP8_REGISTER_COUNT: i32 = 16; pub const CHIP8_MEMORY_SIZE: i32 = 4096i32; diff --git a/gemma/tests/computer_tests.rs b/gemma/tests/computer_tests.rs index 3416578..bec83f8 100644 --- a/gemma/tests/computer_tests.rs +++ b/gemma/tests/computer_tests.rs @@ -1,12 +1,11 @@ mod test_utils; -use std::path::{Path, PathBuf}; -use std::time::Instant; +use std::path::Path; use gemma::chip8::computer::Chip8Computer; use gemma::chip8::computer_manager::Chip8ComputerManager; use gemma::chip8::quirk_modes::QuirkMode; use gemma::chip8::quirk_modes::QuirkMode::{Chip8, SChipModern, XOChip}; use gemma::chip8::registers::Chip8Registers; -use gemma::constants::{CHIP8_VIDEO_MEMORY, TESTS_ROOT, TEST_ROM_ROOT}; +use gemma::constants::{CHIP8_VIDEO_MEMORY, TEST_ROM_ROOT}; use crate::test_utils::{load_compressed_result, load_result, load_rom}; #[test] @@ -73,7 +72,7 @@ fn level3_test() { let mut x = Chip8Computer::new(); x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8")); - for i in 0..0x180 { + for _ in 0..0x180 { x.step_system(); } @@ -88,7 +87,7 @@ fn level3_compressed_test() { let mut x = Chip8Computer::new(); x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8")); - for i in 0..0x180 { + for _ in 0..0x180 { x.step_system(); } diff --git a/gemma/tests/state_tests.rs b/gemma/tests/state_tests.rs index 265f0e2..4ab56f4 100644 --- a/gemma/tests/state_tests.rs +++ b/gemma/tests/state_tests.rs @@ -1,6 +1,4 @@ use std::fs; -use std::io; -use flate2::write::GzDecoder; use gemma::chip8::computer::Chip8Computer; use std::io::prelude::*; diff --git a/gemma/tests/test_utils.rs b/gemma/tests/test_utils.rs index 63d78b9..57b2222 100644 --- a/gemma/tests/test_utils.rs +++ b/gemma/tests/test_utils.rs @@ -1,11 +1,9 @@ use std::fs::File; use std::io::{Read, Write}; -use std::path::Path; use flate2::Compression; use flate2::read::DeflateDecoder; use flate2::write::{DeflateEncoder}; -use log::debug; const TEST_OUTPUT_SAMPLE_DIR: &str = "../resources/test/"; diff --git a/gemmarat/src/bin/gemmarat.rs b/gemmarat/src/bin/gemmarat.rs index 5dd19cb..4a3d64f 100644 --- a/gemmarat/src/bin/gemmarat.rs +++ b/gemmarat/src/bin/gemmarat.rs @@ -1,5 +1,4 @@ use std::path::Path; -use std::rc::Rc; use ratatui::prelude::*; use std::time::Duration; use color_eyre::{eyre::Context, Result}; @@ -8,12 +7,11 @@ use ratatui::{ widgets::Paragraph, DefaultTerminal, Frame, }; -use ratatui::layout::Rect; use ratatui::layout::{Constraint, Direction}; use ratatui::prelude::Layout; use ratatui::widgets::{Block, Borders}; -use gemma::chip8::computer::Chip8Computer; use gemma::chip8::computer_manager::Chip8ComputerManager; +use gemma::chip8::quirk_modes::QuirkMode::Chip8; use gemmarat::register_widget::RegisterWidget; use gemmarat::timer_widget::TimerWidget; use gemmarat::video_widget::VideoWidget; @@ -42,14 +40,15 @@ fn main() -> Result<()> { fn run(mut terminal: DefaultTerminal) -> Result<()> { let mut manager = Chip8ComputerManager::default(); manager.load_new_program_from_disk_to_system_memory(Path::new("/home/tmerritt/Projects/trevors_chip8_toy/resources/roms/2-ibm-logo.ch8")); - for _ in 0..30 { - manager.tick(); - } + // for _ in 0..30 { + // manager.tick(); + // } loop { + manager.tick(); terminal.draw(|frame| { do_draw(frame, &mut manager); }).expect("unable to render display."); - if should_quit()? { + if handle_keyboard(&mut manager)? { break; } } @@ -117,19 +116,37 @@ fn do_draw(frame: &mut Frame, draw_with: &mut Chip8ComputerManager) { // Footer Bar frame.render_widget( - Paragraph::new("F1 - Step | F2 - Run | F3 - Stop | Q - Quit") + Paragraph::new("F1 - Step | F2 - Run | F3 - Stop | F4 - Reset | Q - Quit") .centered() .block(Block::new().borders(Borders::ALL)), main_layout[1]); } -fn should_quit() -> Result { - if event::poll(Duration::from_millis(250)).context("event poll failed")? { - if let Event::Key(key) = event::read().context("event read failed")? { - return Ok(KeyCode::Char('q') == key.code); +fn handle_keyboard(state: &mut Chip8ComputerManager) -> Result { + let mut die_time = false; + if event::poll(Duration::from_millis(100)).context("Unable to poll Keyboard")? { + if let Event::Key(key) = event::read().context("Event Read Failed")? { + match key.code { + KeyCode::F(1) => { + state.tick(); + }, + KeyCode::F(2) => { + state.core_should_run = true; + }, + KeyCode::F(3) => { + state.core_should_run = false; + } + KeyCode::F(4) => { + state.reset(Chip8); + } + KeyCode::Char('q') | KeyCode::Char('Q') => { + die_time = true; + } + _ => {} + } } } - Ok(false) + + Ok(die_time) } -