BUGFIX GEMMARAT: fixes input bug with frequent drops of inputs from 2 input loops
CLEANUP: remove unused imports, _ unused variables
This commit is contained in:
parent
9b64a959f3
commit
66ab2363d8
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
/target
|
/target
|
||||||
|
.idea
|
||||||
|
|||||||
21
.idea/trevors_chip8_toy.iml
generated
21
.idea/trevors_chip8_toy.iml
generated
@ -1,21 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="EMPTY_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemma/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemma/tests" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmaegui/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmaimgui/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmasdl2/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmatelnet/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmautil/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmautil/tests" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmaegui/tests" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmaimgui/tests" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/gemmatelnet/tests" isTestSource="true" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
@ -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_REGISTER_COUNT: i32 = 16;
|
||||||
pub const CHIP8_MEMORY_SIZE: i32 = 4096i32;
|
pub const CHIP8_MEMORY_SIZE: i32 = 4096i32;
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
mod test_utils;
|
mod test_utils;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::Path;
|
||||||
use std::time::Instant;
|
|
||||||
use gemma::chip8::computer::Chip8Computer;
|
use gemma::chip8::computer::Chip8Computer;
|
||||||
use gemma::chip8::computer_manager::Chip8ComputerManager;
|
use gemma::chip8::computer_manager::Chip8ComputerManager;
|
||||||
use gemma::chip8::quirk_modes::QuirkMode;
|
use gemma::chip8::quirk_modes::QuirkMode;
|
||||||
use gemma::chip8::quirk_modes::QuirkMode::{Chip8, SChipModern, XOChip};
|
use gemma::chip8::quirk_modes::QuirkMode::{Chip8, SChipModern, XOChip};
|
||||||
use gemma::chip8::registers::Chip8Registers;
|
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};
|
use crate::test_utils::{load_compressed_result, load_result, load_rom};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -73,7 +72,7 @@ fn level3_test() {
|
|||||||
let mut x = Chip8Computer::new();
|
let mut x = Chip8Computer::new();
|
||||||
|
|
||||||
x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8"));
|
x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8"));
|
||||||
for i in 0..0x180 {
|
for _ in 0..0x180 {
|
||||||
x.step_system();
|
x.step_system();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +87,7 @@ fn level3_compressed_test() {
|
|||||||
let mut x = Chip8Computer::new();
|
let mut x = Chip8Computer::new();
|
||||||
|
|
||||||
x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8"));
|
x.load_bytes_to_memory(0x200, &load_rom("3-corax+.ch8"));
|
||||||
for i in 0..0x180 {
|
for _ in 0..0x180 {
|
||||||
x.step_system();
|
x.step_system();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io;
|
|
||||||
use flate2::write::GzDecoder;
|
|
||||||
use gemma::chip8::computer::Chip8Computer;
|
use gemma::chip8::computer::Chip8Computer;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,9 @@
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::path::Path;
|
|
||||||
use flate2::Compression;
|
use flate2::Compression;
|
||||||
use flate2::read::DeflateDecoder;
|
use flate2::read::DeflateDecoder;
|
||||||
use flate2::write::{DeflateEncoder};
|
use flate2::write::{DeflateEncoder};
|
||||||
|
|
||||||
use log::debug;
|
|
||||||
|
|
||||||
const TEST_OUTPUT_SAMPLE_DIR: &str = "../resources/test/";
|
const TEST_OUTPUT_SAMPLE_DIR: &str = "../resources/test/";
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::rc::Rc;
|
|
||||||
use ratatui::prelude::*;
|
use ratatui::prelude::*;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use color_eyre::{eyre::Context, Result};
|
use color_eyre::{eyre::Context, Result};
|
||||||
@ -8,12 +7,11 @@ use ratatui::{
|
|||||||
widgets::Paragraph,
|
widgets::Paragraph,
|
||||||
DefaultTerminal, Frame,
|
DefaultTerminal, Frame,
|
||||||
};
|
};
|
||||||
use ratatui::layout::Rect;
|
|
||||||
use ratatui::layout::{Constraint, Direction};
|
use ratatui::layout::{Constraint, Direction};
|
||||||
use ratatui::prelude::Layout;
|
use ratatui::prelude::Layout;
|
||||||
use ratatui::widgets::{Block, Borders};
|
use ratatui::widgets::{Block, Borders};
|
||||||
use gemma::chip8::computer::Chip8Computer;
|
|
||||||
use gemma::chip8::computer_manager::Chip8ComputerManager;
|
use gemma::chip8::computer_manager::Chip8ComputerManager;
|
||||||
|
use gemma::chip8::quirk_modes::QuirkMode::Chip8;
|
||||||
use gemmarat::register_widget::RegisterWidget;
|
use gemmarat::register_widget::RegisterWidget;
|
||||||
use gemmarat::timer_widget::TimerWidget;
|
use gemmarat::timer_widget::TimerWidget;
|
||||||
use gemmarat::video_widget::VideoWidget;
|
use gemmarat::video_widget::VideoWidget;
|
||||||
@ -42,14 +40,15 @@ fn main() -> Result<()> {
|
|||||||
fn run(mut terminal: DefaultTerminal) -> Result<()> {
|
fn run(mut terminal: DefaultTerminal) -> Result<()> {
|
||||||
let mut manager = Chip8ComputerManager::default();
|
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"));
|
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 {
|
// for _ in 0..30 {
|
||||||
manager.tick();
|
// manager.tick();
|
||||||
}
|
// }
|
||||||
loop {
|
loop {
|
||||||
|
manager.tick();
|
||||||
terminal.draw(|frame| {
|
terminal.draw(|frame| {
|
||||||
do_draw(frame, &mut manager);
|
do_draw(frame, &mut manager);
|
||||||
}).expect("unable to render display.");
|
}).expect("unable to render display.");
|
||||||
if should_quit()? {
|
if handle_keyboard(&mut manager)? {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,19 +116,37 @@ fn do_draw(frame: &mut Frame, draw_with: &mut Chip8ComputerManager) {
|
|||||||
|
|
||||||
// Footer Bar
|
// Footer Bar
|
||||||
frame.render_widget(
|
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()
|
.centered()
|
||||||
.block(Block::new().borders(Borders::ALL)), main_layout[1]);
|
.block(Block::new().borders(Borders::ALL)), main_layout[1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn should_quit() -> Result<bool> {
|
fn handle_keyboard(state: &mut Chip8ComputerManager) -> Result<bool> {
|
||||||
if event::poll(Duration::from_millis(250)).context("event poll failed")? {
|
let mut die_time = false;
|
||||||
if let Event::Key(key) = event::read().context("event read failed")? {
|
if event::poll(Duration::from_millis(100)).context("Unable to poll Keyboard")? {
|
||||||
return Ok(KeyCode::Char('q') == key.code);
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user