Video reset now tests ok gemma egui interface now implements stupid workaround for video reset
42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
use gemma::chip8::computer::Chip8Computer;
|
|
use gemma::constants::CHIP8_VIDEO_MEMORY;
|
|
|
|
#[test]
|
|
fn smoke() { assert!(true) }
|
|
|
|
#[test]
|
|
fn test_rom_1_works() {
|
|
let mut x = Chip8Computer::new();
|
|
// Load the IBM rom and run it.
|
|
// it takes 39 cycles to get to the end so lets run it 40.
|
|
|
|
let test_rom_to_run = std::fs::read("../resources/roms/2-ibm-logo.ch8").unwrap();
|
|
x.load_bytes_to_memory(0x200, (&test_rom_to_run).into());
|
|
|
|
for i in 0..40 {
|
|
x.step_system();
|
|
}
|
|
// ...then verify that the current video memory of the chip-8
|
|
// simulator matches what we expect it to be
|
|
|
|
assert_eq!(x.dump_video_to_string(), std::fs::read_to_string("../resources/test/gemma_integration_ibm_rom_output.asc").unwrap());
|
|
}
|
|
|
|
#[test]
|
|
fn reset_clears_video() {
|
|
let mut x = Chip8Computer::new();
|
|
|
|
for i in 0..CHIP8_VIDEO_MEMORY {
|
|
x.video_memory.poke(i as u16, i % 2 == 0);
|
|
}
|
|
|
|
x.reset();
|
|
x.video_memory = x.video_memory.reset();
|
|
|
|
assert_eq!(x.dump_video_to_string(), x.video_memory.format_as_string());
|
|
|
|
for i in 0..CHIP8_VIDEO_MEMORY {
|
|
assert!(!x.video_memory.peek(i as u16));
|
|
}
|
|
}
|