use cpu::Cpu;
use opcode::Opcode;

pub static mut DEBUG_MODE: bool = true;

pub static FONTSET: [u8; 80] = [
  0xF0, 0x90, 0x90, 0x90, 0xF0, // 0
  0x20, 0x60, 0x20, 0x20, 0x70, // 1
  0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
  0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
  0x90, 0x90, 0xF0, 0x10, 0x10, // 4
  0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
  0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
  0xF0, 0x10, 0x20, 0x40, 0x40, // 7
  0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
  0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
  0xF0, 0x90, 0xF0, 0x90, 0x90, // A
  0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
  0xF0, 0x80, 0x80, 0x80, 0xF0, // C
  0xE0, 0x90, 0x90, 0x90, 0xE0, // D
  0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
  0xF0, 0x80, 0xF0, 0x80, 0x80  // F
];

pub fn 
(cpu: &Cpu, opcode: &Opcode) {
    unsafe {
        if !DEBUG_MODE {
            return;
        }
    }
    println!("cpu:");
    for i in 0..16 {
        if cpu.v[i] == 0 {
            continue;
        }
        println!("      v{:.x}: {:.x}", i, cpu.v[i]);
    }
    println!("    pc: {:.x}", cpu.pc);
    println!("    I: {:.x}", cpu.i);
    println!("    sp: {:.x}", cpu.sp);
    println!("opcode: {:.x}", opcode.code);
}

debug_cycle