diff --git a/programs/1-chip8-logo.ch8 b/programs/1-chip8-logo.ch8 deleted file mode 100644 index 19c5cf3..0000000 Binary files a/programs/1-chip8-logo.ch8 and /dev/null differ diff --git a/programs/2-ibm-logo.ch8 b/programs/2-ibm-logo.ch8 deleted file mode 100644 index 677f227..0000000 Binary files a/programs/2-ibm-logo.ch8 and /dev/null differ diff --git a/programs/4-flags.ch8 b/programs/4-flags.ch8 deleted file mode 100644 index 0698a10..0000000 Binary files a/programs/4-flags.ch8 and /dev/null differ diff --git a/programs/5-quirks.ch8 b/programs/5-quirks.ch8 deleted file mode 100644 index 1c87f6c..0000000 Binary files a/programs/5-quirks.ch8 and /dev/null differ diff --git a/programs/6-keypad.ch8 b/programs/6-keypad.ch8 deleted file mode 100644 index 4d1ecdc..0000000 Binary files a/programs/6-keypad.ch8 and /dev/null differ diff --git a/programs/7-beep.ch8 b/programs/7-beep.ch8 deleted file mode 100644 index 27c205f..0000000 Binary files a/programs/7-beep.ch8 and /dev/null differ diff --git a/programs/Airplane.ch8 b/programs/Airplane.ch8 deleted file mode 100644 index cac8804..0000000 Binary files a/programs/Airplane.ch8 and /dev/null differ diff --git a/programs/Nim [Carmelo Cortez, 1978].ch8 b/programs/Nim [Carmelo Cortez, 1978].ch8 deleted file mode 100644 index 680c96a..0000000 Binary files a/programs/Nim [Carmelo Cortez, 1978].ch8 and /dev/null differ diff --git a/programs/RPS.ch8 b/programs/RPS.ch8 deleted file mode 100644 index 3ea42d4..0000000 Binary files a/programs/RPS.ch8 and /dev/null differ diff --git a/programs/br8kout.ch8 b/programs/br8kout.ch8 deleted file mode 100644 index 7e675f0..0000000 Binary files a/programs/br8kout.ch8 and /dev/null differ diff --git a/programs/corax.ch8 b/programs/corax.ch8 deleted file mode 100644 index 9fc874c..0000000 Binary files a/programs/corax.ch8 and /dev/null differ diff --git a/programs/flightrunner.ch8 b/programs/flightrunner.ch8 deleted file mode 100644 index b379353..0000000 Binary files a/programs/flightrunner.ch8 and /dev/null differ diff --git a/programs/octojam1title.ch8 b/programs/octojam1title.ch8 deleted file mode 100644 index 7e8dd9f..0000000 Binary files a/programs/octojam1title.ch8 and /dev/null differ diff --git a/programs/outlaw.ch8 b/programs/outlaw.ch8 deleted file mode 100644 index 71eff28..0000000 Binary files a/programs/outlaw.ch8 and /dev/null differ diff --git a/programs/snake.ch8 b/programs/snake.ch8 deleted file mode 100644 index 5f83c16..0000000 Binary files a/programs/snake.ch8 and /dev/null differ diff --git a/programs/test.ch8 b/programs/test.ch8 deleted file mode 100644 index 91e68fa..0000000 Binary files a/programs/test.ch8 and /dev/null differ diff --git a/src/chip8.rs b/src/chip8.rs index 5390acb..23bc07b 100644 --- a/src/chip8.rs +++ b/src/chip8.rs @@ -18,6 +18,7 @@ static CYCLES_PER_FRAME: u32 = 10; struct Chip8State { // Flags eti_600_flag: bool, + vblank_waiting: bool, // Memory mem: [u8; MEMORY_LIMIT as usize], @@ -50,6 +51,7 @@ pub struct Chip8Quirks { pub fn run>(chip8_executable_filepath: S, quirks: &Chip8Quirks, debug_mode: bool) { let mut state = Chip8State { eti_600_flag: false, + vblank_waiting: false, mem: [0; 4096], stack: [0; 16], r_v: [0; 16], @@ -122,6 +124,7 @@ fn start(state: &mut Chip8State, quirks: &Chip8Quirks, debug_mode: bool) { input::handle_input(state, &mut rl); + state.vblank_waiting = false; for _ in 0..CYCLES_PER_FRAME { let instruction_bytes = memory::read_n_bytes(&state.mem, state.mem.len(), state.r_pc as usize, 2); @@ -134,6 +137,10 @@ fn start(state: &mut Chip8State, quirks: &Chip8Quirks, debug_mode: bool) { } cpu::execute_instruction(state, instruction, &quirks); + + if state.vblank_waiting { + break; + } } // move to timers.rs diff --git a/src/chip8/cpu.rs b/src/chip8/cpu.rs index 25c7671..5082321 100644 --- a/src/chip8/cpu.rs +++ b/src/chip8/cpu.rs @@ -128,6 +128,10 @@ pub fn execute_instruction(state: &mut Chip8State, instruction: u16, quirks: &Ch } else { gpu::draw(state, x, y, &bytes, n); } + + if quirks.display_wait { + state.vblank_waiting = true; + } } (0xE, _, _, 0xE) => { let key_index = state.r_v[x as usize]; diff --git a/src/main.rs b/src/main.rs index e7967b7..8eab264 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,8 @@ fn main() { || args.quirks.contains(&String::from("chip8")), memory: args.quirks.contains(&String::from("memory")) || args.quirks.contains(&String::from("chip8")), - display_wait: args.quirks.contains(&String::from("displaywait")), + display_wait: args.quirks.contains(&String::from("displaywait")) + || args.quirks.contains(&String::from("chip8")), clipping: args.quirks.contains(&String::from("clipping")) || args.quirks.contains(&String::from("chip8")), shifting: args.quirks.contains(&String::from("shifting")),