feat: implement cpu interrupts
This commit is contained in:
@@ -9,84 +9,11 @@ pub struct Interrupt {
|
||||
bitfield! {
|
||||
pub struct InterruptEnable(u8);
|
||||
impl Debug;
|
||||
_vblank, _set_vblank: 0;
|
||||
_lcd_stat, _set_lcd_stat: 1;
|
||||
_timer, _set_timer: 2;
|
||||
_serial, _set_serial: 3;
|
||||
_joypad, _set_joypad: 4;
|
||||
}
|
||||
|
||||
// TODO: Is this the correct behaviour? (I think not)
|
||||
impl InterruptEnable {
|
||||
pub fn vblank(&self) -> bool {
|
||||
self._vblank()
|
||||
}
|
||||
|
||||
pub fn lcd_stat(&self) -> bool {
|
||||
self._lcd_stat()
|
||||
}
|
||||
|
||||
pub fn timer(&self) -> bool {
|
||||
self._timer()
|
||||
}
|
||||
|
||||
pub fn serial(&self) -> bool {
|
||||
self._serial()
|
||||
}
|
||||
|
||||
pub fn joypad(&self) -> bool {
|
||||
self._joypad()
|
||||
}
|
||||
|
||||
pub fn set_vblank(&self, flag: &mut InterruptFlag, value: bool) {
|
||||
let prev = self._vblank();
|
||||
|
||||
if !prev && value {
|
||||
flag.set_vblank(true);
|
||||
}
|
||||
|
||||
flag.set_vblank(value)
|
||||
}
|
||||
|
||||
pub fn set_lcd_stat(&self, flag: &mut InterruptFlag, value: bool) {
|
||||
let prev = self._lcd_stat();
|
||||
|
||||
if !prev && value {
|
||||
flag.set_lcd_stat(true);
|
||||
}
|
||||
|
||||
flag.set_lcd_stat(value)
|
||||
}
|
||||
|
||||
pub fn set_timer(&self, flag: &mut InterruptFlag, value: bool) {
|
||||
let prev = self._timer();
|
||||
|
||||
if !prev && value {
|
||||
flag.set_timer(true);
|
||||
}
|
||||
|
||||
flag.set_timer(value)
|
||||
}
|
||||
|
||||
pub fn set_serial(&self, flag: &mut InterruptFlag, value: bool) {
|
||||
let prev = self._serial();
|
||||
|
||||
if !prev && value {
|
||||
flag.set_serial(true);
|
||||
}
|
||||
|
||||
flag.set_serial(value)
|
||||
}
|
||||
|
||||
pub fn set_joypad(&self, flag: &mut InterruptFlag, value: bool) {
|
||||
let prev = self._joypad();
|
||||
|
||||
if !prev && value {
|
||||
flag.set_joypad(true);
|
||||
}
|
||||
|
||||
flag.set_joypad(value)
|
||||
}
|
||||
pub vblank, set_vblank: 0;
|
||||
pub lcd_stat, set_lcd_stat: 1;
|
||||
pub timer, set_timer: 2;
|
||||
pub serial, set_serial: 3;
|
||||
pub joypad, set_joypad: 4;
|
||||
}
|
||||
|
||||
impl Copy for InterruptEnable {}
|
||||
|
Reference in New Issue
Block a user