Skip to main content

nes_sim/
api.rs

1use crate::{ControllerState, FRAME_WIDTH};
2
3pub const VIDEO_FRAME_PITCH: usize = FRAME_WIDTH;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq)]
6pub enum PixelFormat {
7    Indexed8,
8}
9
10#[derive(Clone, Copy, Debug, PartialEq, Eq)]
11pub struct VideoFrame<'a> {
12    pub width: usize,
13    pub height: usize,
14    pub pitch: usize,
15    pub format: PixelFormat,
16    pub frame_number: u64,
17    pub pixels: &'a [u8],
18}
19
20#[derive(Clone, Copy, Debug, PartialEq)]
21pub struct AudioBatch<'a> {
22    pub channels: u8,
23    pub sample_rate: u32,
24    pub samples: &'a [f32],
25}
26
27impl<'a> Default for AudioBatch<'a> {
28    fn default() -> Self {
29        Self {
30            channels: 1,
31            sample_rate: 44_100,
32            samples: &[],
33        }
34    }
35}
36
37#[derive(Clone, Copy, Debug, PartialEq, Eq)]
38pub enum CoreCommand {
39    Reset,
40    SetControllerState { port: usize, state: ControllerState },
41    RunFrame,
42    StepCpuInstruction,
43}
44
45#[derive(Clone, Copy, Debug, PartialEq, Eq)]
46pub enum CoreEvent {
47    None,
48    ResetComplete,
49    ControllerStateUpdated { port: usize },
50    FrameReady { frame_number: u64 },
51    CpuInstructionComplete { instruction_counter: u64 },
52}
53
54#[derive(Clone, Copy, Debug, PartialEq, Eq)]
55pub struct CoreResponse {
56    pub event: CoreEvent,
57    pub master_clock: u64,
58}
59
60#[derive(Clone, Copy, Debug, PartialEq, Eq)]
61pub struct CpuDebugSnapshot {
62    pub a: u8,
63    pub x: u8,
64    pub y: u8,
65    pub sp: u8,
66    pub pc: u16,
67    pub status: u8,
68    pub clocks: u64,
69    pub cycles_remaining: u64,
70    pub instruction_counter: u64,
71    pub irq_pending: bool,
72    pub nmi_line: bool,
73}
74
75#[derive(Clone, Copy, Debug, PartialEq, Eq)]
76pub struct PpuDebugSnapshot {
77    pub frame: u64,
78    pub scanline: i16,
79    pub in_vblank: bool,
80    pub nmi_line: bool,
81    pub oam_addr: u8,
82}
83
84#[derive(Clone, Copy, Debug, PartialEq, Eq)]
85pub struct DebugSnapshot {
86    pub master_clock: u64,
87    pub cpu: CpuDebugSnapshot,
88    pub ppu: PpuDebugSnapshot,
89}