tetanes-core 0.14.0

A NES Emulator written in Rust
use crate::ppu::Ppu;
use std::sync::Arc;

#[derive(Debug, Clone, PartialEq)]
#[must_use]
pub enum Debugger {
    Ppu(PpuDebugger),
}

impl From<PpuDebugger> for Debugger {
    fn from(debugger: PpuDebugger) -> Self {
        Self::Ppu(debugger)
    }
}

#[derive(Clone)]
#[must_use]
pub struct PpuDebugger {
    pub cycle: u16,
    pub scanline: u16,
    pub callback: Arc<dyn Fn(Ppu) + Send + Sync + 'static>,
}

impl Default for PpuDebugger {
    fn default() -> Self {
        Self {
            cycle: u16::MAX,
            scanline: u16::MAX,
            callback: Arc::new(|_| {}),
        }
    }
}

impl PartialEq for PpuDebugger {
    fn eq(&self, other: &Self) -> bool {
        self.cycle == other.cycle && self.scanline == other.scanline
    }
}

impl std::fmt::Debug for PpuDebugger {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("PpuDebugger")
            .field("cycle", &self.cycle)
            .field("scanline", &self.scanline)
            .finish_non_exhaustive()
    }
}