Skip to content
Snippets Groups Projects
Verified Commit 5766d0ab authored by João Magalhães's avatar João Magalhães :rocket:
Browse files

feat: more instructions implemented

parent 53464ca3
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ fn main() { ...@@ -4,7 +4,7 @@ fn main() {
let mut game_boy = GameBoy::new(); let mut game_boy = GameBoy::new();
game_boy.load_boot_default(); game_boy.load_boot_default();
for i in 0..24650 { for i in 0..24700 {
game_boy.clock(); game_boy.clock();
if game_boy.cpu().pc() >= 0x3032 { if game_boy.cpu().pc() >= 0x3032 {
println!("{}", i); println!("{}", i);
......
...@@ -14,457 +14,457 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [ ...@@ -14,457 +14,457 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
(rlca, 4, "RLCA"), (rlca, 4, "RLCA"),
(ld_mu16_sp, 20, "LD [u16], SP"), (ld_mu16_sp, 20, "LD [u16], SP"),
(add_hl_bc, 8, "ADD HL, BC"), (add_hl_bc, 8, "ADD HL, BC"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(inc_c, 4, "INC C"), (inc_c, 4, "INC C"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_c_u8, 8, "LD C, u8"), (ld_c_u8, 8, "LD C, u8"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x1 opcodes // 0x1 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_de_u16, 12, "LD DE, u16"), (ld_de_u16, 12, "LD DE, u16"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (inc_de, 8, "INC DE"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(rla, 4, "RLA"), (rla, 4, "RLA"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_a_mde, 8, "LD A, [DE]"), (ld_a_mde, 8, "LD A, [DE]"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x2 opcodes // 0x2 opcodes
(jr_nz_i8, 8, "JR NZ, i8"), (jr_nz_i8, 8, "JR NZ, i8"),
(ld_hl_u16, 12, "LD HL, u16"), (ld_hl_u16, 12, "LD HL, u16"),
(nop, 4, "NOP"), (ld_mhli_a, 8, "LD [HL]+, A"),
(nop, 4, "NOP"), (inc_hl, 8, "INC HL"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x3 opcodes // 0x3 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_sp_u16, 12, "LD SP, u16"), (ld_sp_u16, 12, "LD SP, u16"),
(ld_mhld_a, 8, "LD [HL]-, A"), (ld_mhld_a, 8, "LD [HL]-, A"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_a_u8, 8, "LD A, u8"), (ld_a_u8, 8, "LD A, u8"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x4 opcodes // 0x4 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_c_a, 4, "LD C, A"), (ld_c_a, 4, "LD C, A"),
// 0x5 opcodes // 0x5 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x6 opcodes // 0x6 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x7 opcodes // 0x7 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x8 opcodes // 0x8 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x9 opcodes // 0x9 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xa opcodes // 0xa opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(xor_a_a, 4, "XOR A, A"), (xor_a_a, 4, "XOR A, A"),
// 0xb opcodes // 0xb opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xc opcodes // 0xc opcodes
(ret_nz, 8, "RET NZ"), (ret_nz, 8, "RET NZ"),
(pop_bc, 12, "POP BC"), (pop_bc, 12, "POP BC"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(push_bc, 16, "PUSH BC"), (push_bc, 16, "PUSH BC"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (ret, 16, "RET"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(call_u16, 24, "CALL u16"), (call_u16, 24, "CALL u16"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xd opcodes // 0xd opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xe opcodes // 0xe opcodes
(ld_mff00u8_a, 12, "LD [FF00+u8], A"), (ld_mff00u8_a, 12, "LD [FF00+u8], A"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(ld_mff00c_a, 8, "LD [FF00+C], A"), (ld_mff00c_a, 8, "LD [FF00+C], A"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xf opcodes // 0xf opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
]; ];
pub const BITWISE: [(fn(&mut Cpu), u8, &'static str); 176] = [ pub const BITWISE: [(fn(&mut Cpu), u8, &'static str); 176] = [
// 0x0 opcodes // 0x0 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x1 opcodes // 0x1 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(rl_c, 8, "RL C"), (rl_c, 8, "RL C"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x2 opcodes // 0x2 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x3 opcodes // 0x3 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x4 opcodes // 0x4 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x5 opcodes // 0x5 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x6 opcodes // 0x6 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x7 opcodes // 0x7 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(bit_7_h, 8, "BIT 7, H"), (bit_7_h, 8, "BIT 7, H"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x8 opcodes // 0x8 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0x9 opcodes // 0x9 opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
// 0xa opcodes // 0xa opcodes
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
(nop, 4, "NOP"), (nop, 4, "! UNIMP !"),
]; ];
pub struct Cpu { pub struct Cpu {
...@@ -765,6 +765,10 @@ fn ld_de_u16(cpu: &mut Cpu) { ...@@ -765,6 +765,10 @@ fn ld_de_u16(cpu: &mut Cpu) {
cpu.set_de(word); cpu.set_de(word);
} }
fn inc_de(cpu: &mut Cpu) {
cpu.set_de(cpu.de().wrapping_add(1));
}
fn rla(cpu: &mut Cpu) { fn rla(cpu: &mut Cpu) {
let carry = cpu.get_carry(); let carry = cpu.get_carry();
...@@ -798,6 +802,15 @@ fn ld_hl_u16(cpu: &mut Cpu) { ...@@ -798,6 +802,15 @@ fn ld_hl_u16(cpu: &mut Cpu) {
cpu.set_hl(word); cpu.set_hl(word);
} }
fn ld_mhli_a(cpu: &mut Cpu) {
cpu.mmu.write(cpu.hl(), cpu.a);
cpu.set_hl(cpu.hl().wrapping_add(1));
}
fn inc_hl(cpu: &mut Cpu) {
cpu.set_hl(cpu.hl().wrapping_add(1));
}
fn ld_sp_u16(cpu: &mut Cpu) { fn ld_sp_u16(cpu: &mut Cpu) {
cpu.sp = cpu.read_u16(); cpu.sp = cpu.read_u16();
} }
...@@ -843,6 +856,10 @@ fn push_bc(cpu: &mut Cpu) { ...@@ -843,6 +856,10 @@ fn push_bc(cpu: &mut Cpu) {
cpu.push_word(cpu.bc()); cpu.push_word(cpu.bc());
} }
fn ret(cpu: &mut Cpu) {
cpu.pc = cpu.pop_word();
}
fn call_u16(cpu: &mut Cpu) { fn call_u16(cpu: &mut Cpu) {
let word = cpu.read_u16(); let word = cpu.read_u16();
cpu.push_word(cpu.pc); cpu.push_word(cpu.pc);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment