From ec34a71fcf1db55f8e2786913447b68769fd1a18 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Sun, 17 Oct 2021 20:42:36 -0500 Subject: [PATCH] Mapping CB prefix instructions --- src/cpu.rs | 316 ++++++++++++++++++++++++++++++++++++++++++++++++--- src/utils.rs | 1 + 2 files changed, 304 insertions(+), 13 deletions(-) diff --git a/src/cpu.rs b/src/cpu.rs index 3d372bf..faa0bc0 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -235,7 +235,6 @@ pub enum Opcode { CP(OpcodeParameter), INC(bool, Register), DEC(bool, Register), - SWAP, DAA, CPL, CCF, @@ -249,23 +248,24 @@ pub enum Opcode { RLA, RRCA, RRA, - RLC, - RL, - RRC, - RR, - SLA, - SRA, - SRL, - BIT, - SET, - RES, + SWAP(Register), + RLC(Register), + RL(Register), + RRC(Register), + RR(Register), + SLA(Register), + SRA(Register), + SRL(Register), + BIT(BitIndex, Register), + SET(BitIndex, Register), + RES(BitIndex, Register), JP(OpcodeParameter), JR(OpcodeParameter), CALL(OpcodeParameter), RST(u8), RET(OpcodeParameter), RETI, - PrefixCB, + PrefixCB(Box), IllegalInstruction, } @@ -962,7 +962,297 @@ impl CPU { 0x07 => Opcode::RLCA, 0x0F => Opcode::RRCA, 0x1F => Opcode::RRA, - 0xCB => Opcode::PrefixCB, + 0xCB => match params.1 { + 0x00 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::B))), + 0x01 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::C))), + 0x02 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::D))), + 0x03 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::E))), + 0x04 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::H))), + 0x05 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::L))), + 0x06 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::HL))), + 0x07 => Opcode::PrefixCB(Box::new(Opcode::RLC(Register::A))), + + 0x08 => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::B))), + 0x09 => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::C))), + 0x0A => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::D))), + 0x0B => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::E))), + 0x0C => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::H))), + 0x0D => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::L))), + 0x0E => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::HL))), + 0x0F => Opcode::PrefixCB(Box::new(Opcode::RRC(Register::A))), + + 0x10 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::B))), + 0x11 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::C))), + 0x12 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::D))), + 0x13 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::E))), + 0x14 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::H))), + 0x15 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::L))), + 0x16 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::HL))), + 0x17 => Opcode::PrefixCB(Box::new(Opcode::RL(Register::A))), + + 0x18 => Opcode::PrefixCB(Box::new(Opcode::RR(Register::B))), + 0x19 => Opcode::PrefixCB(Box::new(Opcode::RR(Register::C))), + 0x1A => Opcode::PrefixCB(Box::new(Opcode::RR(Register::D))), + 0x1B => Opcode::PrefixCB(Box::new(Opcode::RR(Register::E))), + 0x1C => Opcode::PrefixCB(Box::new(Opcode::RR(Register::H))), + 0x1D => Opcode::PrefixCB(Box::new(Opcode::RR(Register::L))), + 0x1E => Opcode::PrefixCB(Box::new(Opcode::RR(Register::HL))), + 0x1F => Opcode::PrefixCB(Box::new(Opcode::RR(Register::A))), + + 0x20 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::B))), + 0x21 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::C))), + 0x22 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::D))), + 0x23 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::E))), + 0x24 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::H))), + 0x25 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::L))), + 0x26 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::HL))), + 0x27 => Opcode::PrefixCB(Box::new(Opcode::SLA(Register::A))), + + 0x28 => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::B))), + 0x29 => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::C))), + 0x2A => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::D))), + 0x2B => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::E))), + 0x2C => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::H))), + 0x2D => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::L))), + 0x2E => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::HL))), + 0x2F => Opcode::PrefixCB(Box::new(Opcode::SRA(Register::A))), + + 0x30 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::B))), + 0x31 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::C))), + 0x32 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::D))), + 0x33 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::E))), + 0x34 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::H))), + 0x35 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::L))), + 0x36 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::HL))), + 0x37 => Opcode::PrefixCB(Box::new(Opcode::SWAP(Register::A))), + + 0x38 => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::B))), + 0x39 => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::C))), + 0x3A => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::D))), + 0x3B => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::E))), + 0x3C => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::H))), + 0x3D => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::L))), + 0x3E => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::HL))), + 0x3F => Opcode::PrefixCB(Box::new(Opcode::SRL(Register::A))), + + 0x40 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::B))), + 0x41 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::C))), + 0x42 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::D))), + 0x43 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::E))), + 0x44 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::H))), + 0x45 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::L))), + 0x46 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::HL))), + 0x47 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I0, Register::A))), + + 0x48 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::B))), + 0x49 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::C))), + 0x4A => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::D))), + 0x4B => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::E))), + 0x4C => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::H))), + 0x4D => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::L))), + 0x4E => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::HL))), + 0x4F => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I1, Register::A))), + + 0x50 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::B))), + 0x51 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::C))), + 0x52 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::D))), + 0x53 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::E))), + 0x54 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::H))), + 0x55 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::L))), + 0x56 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::HL))), + 0x57 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I2, Register::A))), + + 0x58 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::B))), + 0x59 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::C))), + 0x5A => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::D))), + 0x5B => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::E))), + 0x5C => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::H))), + 0x5D => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::L))), + 0x5E => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::HL))), + 0x5F => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I3, Register::A))), + + 0x60 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::B))), + 0x61 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::C))), + 0x62 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::D))), + 0x63 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::E))), + 0x64 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::H))), + 0x65 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::L))), + 0x66 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::HL))), + 0x67 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I4, Register::A))), + + 0x68 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::B))), + 0x69 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::C))), + 0x6A => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::D))), + 0x6B => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::E))), + 0x6C => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::H))), + 0x6D => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::L))), + 0x6E => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::HL))), + 0x6F => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I5, Register::A))), + + 0x70 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::B))), + 0x71 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::C))), + 0x72 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::D))), + 0x73 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::E))), + 0x74 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::H))), + 0x75 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::L))), + 0x76 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::HL))), + 0x77 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I6, Register::A))), + + 0x78 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::B))), + 0x79 => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::C))), + 0x7A => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::D))), + 0x7B => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::E))), + 0x7C => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::H))), + 0x7D => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::L))), + 0x7E => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::HL))), + 0x7F => Opcode::PrefixCB(Box::new(Opcode::BIT(BitIndex::I7, Register::A))), + + 0x80 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::B))), + 0x81 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::C))), + 0x82 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::D))), + 0x83 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::E))), + 0x84 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::H))), + 0x85 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::L))), + 0x86 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::HL))), + 0x87 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I0, Register::A))), + + 0x88 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::B))), + 0x89 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::C))), + 0x8A => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::D))), + 0x8B => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::E))), + 0x8C => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::H))), + 0x8D => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::L))), + 0x8E => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::HL))), + 0x8F => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I1, Register::A))), + + 0x90 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::B))), + 0x91 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::C))), + 0x92 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::D))), + 0x93 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::E))), + 0x94 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::H))), + 0x95 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::L))), + 0x96 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::HL))), + 0x97 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I2, Register::A))), + + 0x98 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::B))), + 0x99 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::C))), + 0x9A => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::D))), + 0x9B => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::E))), + 0x9C => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::H))), + 0x9D => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::L))), + 0x9E => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::HL))), + 0x9F => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I3, Register::A))), + + 0xA0 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::B))), + 0xA1 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::C))), + 0xA2 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::D))), + 0xA3 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::E))), + 0xA4 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::H))), + 0xA5 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::L))), + 0xA6 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::HL))), + 0xA7 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I4, Register::A))), + + 0xA8 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::B))), + 0xA9 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::C))), + 0xAA => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::D))), + 0xAB => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::E))), + 0xAC => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::H))), + 0xAD => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::L))), + 0xAE => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::HL))), + 0xAF => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I5, Register::A))), + + 0xB0 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::B))), + 0xB1 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::C))), + 0xB2 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::D))), + 0xB3 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::E))), + 0xB4 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::H))), + 0xB5 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::L))), + 0xB6 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::HL))), + 0xB7 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I6, Register::A))), + + 0xB8 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::B))), + 0xB9 => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::C))), + 0xBA => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::D))), + 0xBB => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::E))), + 0xBC => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::H))), + 0xBD => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::L))), + 0xBE => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::HL))), + 0xBF => Opcode::PrefixCB(Box::new(Opcode::RES(BitIndex::I7, Register::A))), + + 0xC0 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::B))), + 0xC1 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::C))), + 0xC2 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::D))), + 0xC3 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::E))), + 0xC4 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::H))), + 0xC5 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::L))), + 0xC6 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::HL))), + 0xC7 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I0, Register::A))), + + 0xC8 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::B))), + 0xC9 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::C))), + 0xCA => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::D))), + 0xCB => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::E))), + 0xCC => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::H))), + 0xCD => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::L))), + 0xCE => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::HL))), + 0xCF => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I1, Register::A))), + + 0xD0 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::B))), + 0xD1 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::C))), + 0xD2 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::D))), + 0xD3 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::E))), + 0xD4 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::H))), + 0xD5 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::L))), + 0xD6 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::HL))), + 0xD7 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I2, Register::A))), + + 0xD8 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::B))), + 0xD9 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::C))), + 0xDA => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::D))), + 0xDB => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::E))), + 0xDC => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::H))), + 0xDD => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::L))), + 0xDE => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::HL))), + 0xDF => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I3, Register::A))), + + 0xE0 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::B))), + 0xE1 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::C))), + 0xE2 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::D))), + 0xE3 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::E))), + 0xE4 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::H))), + 0xE5 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::L))), + 0xE6 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::HL))), + 0xE7 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I4, Register::A))), + + 0xE8 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::B))), + 0xE9 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::C))), + 0xEA => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::D))), + 0xEB => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::E))), + 0xEC => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::H))), + 0xED => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::L))), + 0xEE => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::HL))), + 0xEF => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I5, Register::A))), + + 0xF0 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::B))), + 0xF1 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::C))), + 0xF2 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::D))), + 0xF3 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::E))), + 0xF4 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::H))), + 0xF5 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::L))), + 0xF6 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::HL))), + 0xF7 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I6, Register::A))), + + 0xF8 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::B))), + 0xF9 => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::C))), + 0xFA => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::D))), + 0xFB => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::E))), + 0xFC => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::H))), + 0xFD => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::L))), + 0xFE => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::HL))), + 0xFF => Opcode::PrefixCB(Box::new(Opcode::SET(BitIndex::I7, Register::A))), + + _ => Opcode::IllegalInstruction, + }, //0xCB => Opcode::SWAP, //0xCB => Opcode::RLC, //0xCB => Opcode::RL, diff --git a/src/utils.rs b/src/utils.rs index 369e483..7fcdee8 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,3 +1,4 @@ +#[derive(Debug)] pub enum BitIndex { I0, I1,