Game Boy interrupt registers, which didn't seem to naturally fit anywhere else
6#[derive(Debug, Clone, Default, Encode, Decode)] 7pub struct InterruptRegisters { 8 enabled: u8, 9 flags: u8, 10} 11 12impl InterruptRegisters { 13 pub fn read_ie(&self) -> u8 { 14 // TODO should bits 5-7 read 1? 15 self.enabled | 0xE0 16 } 17 18 pub fn write_ie(&mut self, value: u8) { 19 self.enabled = value & 0x1F; 20 } 21 22 pub fn read_if(&self) -> u8 { 23 self.flags | 0xE0 24 } 25 26 pub fn write_if(&mut self, value: u8) { 27 self.flags = value & 0x1F; 28 } 29 30 pub fn set_flag(&mut self, interrupt_type: InterruptType) { 31 log::trace!("Interrupt flag set: {interrupt_type:?}"); 32 33 self.flags |= interrupt_type.register_mask(); 34 } 35 36 pub fn clear_flag(&mut self, interrupt_type: InterruptType) { 37 log::trace!("Interrupt flag cleared: {interrupt_type:?}"); 38 39 self.flags &= !interrupt_type.register_mask(); 40 } 41}