use crate::ppu::registers::Registers;
use bitflags::bitflags;
bitflags! {
#[derive(Default, PartialEq, Eq, Copy, Clone, Debug)]
pub struct PpuStatus: u8 {
const OPEN_BUS_0 = 0b00000001;
const OPEN_BUS_1 = 0b00000010;
const OPEN_BUS_2 = 0b00000100;
const OPEN_BUS_3 = 0b00001000;
const OPEN_BUS_4 = 0b00010000;
const SPRITE_OVERFLOW = 0b00100000;
const SPRITE_ZERO_HIT = 0b01000000;
const VBLANK_STARTED = 0b10000000;
const BEGIN_FRAME_CLEAR = Self::VBLANK_STARTED.bits() | Self::SPRITE_ZERO_HIT.bits() | PpuStatus::SPRITE_OVERFLOW.bits();
}
}
impl Registers {
pub fn frame_begin_clear_flags(&mut self) {
self.ppu_status.remove(PpuStatus::BEGIN_FRAME_CLEAR);
}
pub fn start_vblank(&mut self) {
self.ppu_status.insert(PpuStatus::VBLANK_STARTED);
}
pub fn vblank_started(&self) -> bool {
self.ppu_status.contains(PpuStatus::VBLANK_STARTED)
}
pub fn set_sprite_zero_hit(&mut self) {
self.ppu_status.insert(PpuStatus::SPRITE_ZERO_HIT);
}
pub fn set_sprite_overflow(&mut self) {
self.ppu_status.insert(PpuStatus::SPRITE_OVERFLOW);
}
}