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)
}
-