pub mod dev;
pub mod libs;
pub mod prelude;
#[cfg(test)]
mod tests {
use std::{cell::RefCell, rc::Rc};
use super::prelude::*;
fn check_cycles(ar: &[u8]) -> isize {
let ppi = Rc::new(RefCell::new(PPI::new()));
let mut memory = Memory::new(ppi.clone());
for (i, item) in ar.iter().enumerate() {
memory.write_byte(i as u16, *item);
}
let psg = PSG::new(SoundType::None, None);
let vdp = Rc::new(RefCell::new(Vdp::new(GraphicsType::None, false)));
let ports = Ports::new(vdp.clone(), ppi.clone(), psg);
let mut cpu_z80 = Z80::new(memory, ports);
cpu_z80.reboot();
cpu_z80.reset_cycles();
cpu_z80.run_test();
cpu_z80.get_cycles() as isize
}
#[test]
fn test1() {
let ar = [0x3e, 0x00, 0x76];
let nc = check_cycles(&ar);
assert_eq!(nc, 13);
}
#[test]
fn test2() {
let ar = [0x3e, 0x00, 0xca, 0x00, 0x00, 0x76];
let nc = check_cycles(&ar);
assert_eq!(nc, 24);
}
#[test]
fn test3() {
let ar = [0x06, 0x05, 0x3c, 0x10, 0xfd, 0x76];
let nc = check_cycles(&ar);
assert_eq!(nc, 103);
}
}