more opcodes

This commit is contained in:
Alex Janka 2023-01-16 14:43:27 +11:00
parent ca839d9375
commit 121129fe35

View file

@ -75,14 +75,70 @@ impl CPU {
self.state.hl.as_u16 += 1;
},
0x23 => unsafe { self.state.hl.as_u16 += 1 },
0x2C => {
unsafe {
self.state.hl.as_u8s.right += 1;
};
0x24 => unsafe { self.state.hl.as_u8s.left += 1 },
0x25 => unsafe { self.state.hl.as_u8s.left -= 1 },
0x26 => self.state.hl.as_u8s.left = self.ld_immediate_byte(),
0x27 => panic!("DAA instruction: 0x27"),
0x28 => {
let jump_size = self.ld_immediate_byte();
if self.get_flag(FLAGS::Z) == 1 {
unsafe { self.state.pc.as_u16 += jump_size as u16 }
}
}
0x3E => {
self.state.af.as_u8s.left = self.ld_immediate_byte();
0x29 => unsafe { self.state.hl.as_u16 *= 2 },
0x2A => unsafe {
self.state.af.as_u8s.left = self.memory.get(self.state.hl.as_u16);
self.state.hl.as_u16 += 1;
},
0x2B => unsafe { self.state.hl.as_u16 -= 1 },
0x2C => unsafe { self.state.hl.as_u8s.right += 1 },
0x2D => unsafe { self.state.hl.as_u8s.right -= 1 },
0x2E => self.state.hl.as_u8s.right = self.ld_immediate_byte(),
0x2F => unsafe { self.state.af.as_u8s.left = !self.state.af.as_u8s.left },
0x30 => {
let jump_size = self.ld_immediate_byte();
if self.get_flag(FLAGS::C) == 0 {
unsafe { self.state.pc.as_u16 += jump_size as u16 }
}
}
0x31 => self.state.sp = self.ld_immediate_word(),
0x32 => unsafe {
self.memory
.set(self.state.hl.as_u16, self.state.af.as_u8s.left);
self.state.hl.as_u16 -= 1;
},
0x33 => unsafe { self.state.sp.as_u16 += 1 },
0x34 => unsafe {
let address = self.state.hl.as_u16;
let data = self.memory.get(address) + 1;
self.memory.set(address, data);
},
0x35 => unsafe {
let address = self.state.hl.as_u16;
let data = self.memory.get(address) - 1;
self.memory.set(address, data);
},
0x36 => unsafe {
let data = self.ld_immediate_byte();
self.memory.set(self.state.hl.as_u16, data);
},
0x37 => panic!("SCF instruction: 0x37 - set carry flag"),
0x38 => {
let jump_size = self.ld_immediate_byte();
if self.get_flag(FLAGS::C) == 1 {
unsafe { self.state.pc.as_u16 += jump_size as u16 }
}
}
0x39 => unsafe { self.state.hl.as_u16 += self.state.sp.as_u16 },
0x3A => unsafe {
self.state.af.as_u8s.left = self.memory.get(self.state.hl.as_u16);
self.state.hl.as_u16 -= 1;
},
0x3B => unsafe { self.state.sp.as_u16 -= 1 },
0x3C => unsafe { self.state.af.as_u8s.left += 1 },
0x3D => unsafe { self.state.af.as_u8s.left -= 1 },
0x3E => self.state.af.as_u8s.left = self.ld_immediate_byte(),
0x3F => panic!("CCF instruction: 0x3F - flip carry flag"),
0x4A => {
unsafe {
self.state.bc.as_u8s.right = self.state.de.as_u8s.left;