use crate::ppu::registers::ppu_control::PpuControlFlags;
use crate::ppu::registers::ppu_mask::PpuMaskFlags;
use crate::ppu::registers::ppu_status::PpuStatus;
use ringbuffer::ConstGenericRingBuffer;
mod ppu_control;
mod ppu_mask;
mod ppu_status;
mod registers_impl;
mod vram_addr;
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum Register {
PpuControl,
PpuMask,
PpuStatus,
OamAddr,
OamData,
PpuScroll,
PpuAddr,
Data,
}
impl From<u16> for Register {
fn from(value: u16) -> Self {
match value & 0b_0111 {
0 => Register::PpuControl,
1 => Register::PpuMask,
2 => Register::PpuStatus,
3 => Register::OamAddr,
4 => Register::OamData,
5 => Register::PpuScroll,
6 => Register::PpuAddr,
7 => Register::Data,
_ => unreachable!(),
}
}
}
#[derive(Clone, PartialEq, Eq)]
pub struct Registers {
ppu_ctrl: PpuControlFlags,
ppu_mask: PpuMaskFlags,
ppu_status: PpuStatus,
oam_addr: u8,
oam_data: u8,
data: u8,
v: u16,
t: u16,
x: u8,
show_bg_buffer: ConstGenericRingBuffer<bool, 4>,
show_sprites_buffer: ConstGenericRingBuffer<bool, 4>,
write_second: bool,
}