pub struct Registers {
pub a: u8,
pub b: u8,
pub c: u8,
pub d: u8,
pub e: u8,
pub h: u8,
pub l: u8,
}
impl Registers {
pub fn new() -> Registers {
Registers {
a: 0,
b: 0,
c: 0,
d: 0,
e: 0,
h: 0,
l: 0,
}
}
pub fn get_bc(&self) -> u16 {
(self.b as u16) << 8 | self.c as u16
}
pub fn set_bc(&mut self, value: u16) {
self.b = ((value & 0xFF00) >> 8) as u8;
self.c = (value & 0xFF) as u8;
}
pub fn get_de(&self) -> u16 {
(self.d as u16) << 8 | self.e as u16
}
pub fn set_de(&mut self, value: u16) {
self.d = ((value & 0xFF00) >> 8) as u8;
self.e = (value & 0xFF) as u8;
}
pub fn get_hl(&self) -> u16 {
(self.h as u16) << 8 | self.l as u16
}
pub fn set_hl(&mut self, value: u16) {
self.h = ((value & 0xFF00) >> 8) as u8;
self.l = (value & 0xFF) as u8;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn bc_set() {
let mut registers = Registers::new();
registers.set_bc(0b1010_1111_1100_1100);
assert_eq!(registers.b, 0b1010_1111u8);
assert_eq!(registers.c, 0b1100_1100u8);
}
}