~sircmpwn/hdmg

a83f462e2027c237bbc9209069a88123dbf436f4 — Drew DeVault 1 year, 6 months ago 91995c6
sm83: generate & stub out prefix instructions
4 files changed, 1617 insertions(+), 1 deletions(-)

M cmd/igen/main.ha
M sm83/instr.ha
A sm83/prefix.ha
M sm83/tab.ha
M cmd/igen/main.ha => cmd/igen/main.ha +74 -0
@@ 57,6 57,15 @@ type operand = enum uint {
	RST_28,
	RST_30,
	RST_38,
	// Bits
	BIT_0,
	BIT_1,
	BIT_2,
	BIT_3,
	BIT_4,
	BIT_5,
	BIT_6,
	BIT_7,
	// Special cases
	HL_INC,
	HL_DEC,


@@ 82,6 91,17 @@ export fn main() void = {
	fmt::println("const itab: [0x100]instr = [")!;
	opcodes(&lex);
	fmt::println("];")!;
	fmt::println()!;

	expect(&lex, json::comma);
	const tok = expect(&lex, "");
	assert(tok as str == "cbprefixed");
	expect(&lex, json::colon);
	expect(&lex, json::objstart);

	fmt::println("const prefixtab: [0x100]instr = [")!;
	opcodes(&lex);
	fmt::println("];")!;
};

fn opcodes(lex: *json::lexer) void = {


@@ 310,6 330,22 @@ fn scan_operand(lex: *json::lexer) operand = {
		op = operand::RST_30;
	case "38H" =>
		op = operand::RST_38;
	case "0" =>
		op = operand::BIT_0;
	case "1" =>
		op = operand::BIT_1;
	case "2" =>
		op = operand::BIT_2;
	case "3" =>
		op = operand::BIT_3;
	case "4" =>
		op = operand::BIT_4;
	case "5" =>
		op = operand::BIT_5;
	case "6" =>
		op = operand::BIT_6;
	case "7" =>
		op = operand::BIT_7;
	case =>
		abort();
	};


@@ 390,6 426,28 @@ fn exec(mnemonic: str, ops: []operand) str = {
		fmt::fprint(&name, "di")!;
	case "PREFIX" =>
		fmt::fprint(&name, "prefix")!;
	case "RLC" =>
		fmt::fprint(&name, "rlc")!;
	case "RRC" =>
		fmt::fprint(&name, "rrc")!;
	case "RL" =>
		fmt::fprint(&name, "rl")!;
	case "RR" =>
		fmt::fprint(&name, "rr")!;
	case "SLA" =>
		fmt::fprint(&name, "sla")!;
	case "SRA" =>
		fmt::fprint(&name, "sra")!;
	case "SWAP" =>
		fmt::fprint(&name, "swap")!;
	case "SRL" =>
		fmt::fprint(&name, "srl")!;
	case "BIT" =>
		fmt::fprint(&name, "bit")!;
	case "SET" =>
		fmt::fprint(&name, "set")!;
	case "RES" =>
		fmt::fprint(&name, "res")!;
	case =>
		fmt::fprint(&name, "unimpl")!;
		return strio::string(&name);


@@ 467,6 525,22 @@ fn exec(mnemonic: str, ops: []operand) str = {
			fmt::fprint(&name, "30")!;
		case operand::RST_38 =>
			fmt::fprint(&name, "38")!;
		case operand::BIT_0 =>
			fmt::fprint(&name, "0")!;
		case operand::BIT_1 =>
			fmt::fprint(&name, "1")!;
		case operand::BIT_2 =>
			fmt::fprint(&name, "2")!;
		case operand::BIT_3 =>
			fmt::fprint(&name, "3")!;
		case operand::BIT_4 =>
			fmt::fprint(&name, "4")!;
		case operand::BIT_5 =>
			fmt::fprint(&name, "5")!;
		case operand::BIT_6 =>
			fmt::fprint(&name, "6")!;
		case operand::BIT_7 =>
			fmt::fprint(&name, "7")!;
		};

		if (i + 1 < len(ops)) {

M sm83/instr.ha => sm83/instr.ha +4 -1
@@ 13,7 13,10 @@ fn exec_unimpl(cpu: *sm83) void = {
};

fn exec_prefix(cpu: *sm83) void = {
	abort("Unimplemented instruction"); // TODO
	const op = fetchd8(cpu);
	const instr = &prefixtab[op];
	instr.exec(cpu);
	cpu.cycles -= instr.cycles: int;
};

fn exec_rst_00(cpu: *sm83) void = {

A sm83/prefix.ha => sm83/prefix.ha +256 -0
@@ 0,0 1,256 @@
fn exec_rlc_b(cpu: *sm83) void = abort("TODO");
fn exec_rlc_c(cpu: *sm83) void = abort("TODO");
fn exec_rlc_d(cpu: *sm83) void = abort("TODO");
fn exec_rlc_e(cpu: *sm83) void = abort("TODO");
fn exec_rlc_h(cpu: *sm83) void = abort("TODO");
fn exec_rlc_l(cpu: *sm83) void = abort("TODO");
fn exec_rlc_hl(cpu: *sm83) void = abort("TODO");
fn exec_rlc_a(cpu: *sm83) void = abort("TODO");
fn exec_rrc_b(cpu: *sm83) void = abort("TODO");
fn exec_rrc_c(cpu: *sm83) void = abort("TODO");
fn exec_rrc_d(cpu: *sm83) void = abort("TODO");
fn exec_rrc_e(cpu: *sm83) void = abort("TODO");
fn exec_rrc_h(cpu: *sm83) void = abort("TODO");
fn exec_rrc_l(cpu: *sm83) void = abort("TODO");
fn exec_rrc_hl(cpu: *sm83) void = abort("TODO");
fn exec_rrc_a(cpu: *sm83) void = abort("TODO");
fn exec_rl_b(cpu: *sm83) void = abort("TODO");
fn exec_rl_c(cpu: *sm83) void = abort("TODO");
fn exec_rl_d(cpu: *sm83) void = abort("TODO");
fn exec_rl_e(cpu: *sm83) void = abort("TODO");
fn exec_rl_h(cpu: *sm83) void = abort("TODO");
fn exec_rl_l(cpu: *sm83) void = abort("TODO");
fn exec_rl_hl(cpu: *sm83) void = abort("TODO");
fn exec_rl_a(cpu: *sm83) void = abort("TODO");
fn exec_rr_b(cpu: *sm83) void = abort("TODO");
fn exec_rr_c(cpu: *sm83) void = abort("TODO");
fn exec_rr_d(cpu: *sm83) void = abort("TODO");
fn exec_rr_e(cpu: *sm83) void = abort("TODO");
fn exec_rr_h(cpu: *sm83) void = abort("TODO");
fn exec_rr_l(cpu: *sm83) void = abort("TODO");
fn exec_rr_hl(cpu: *sm83) void = abort("TODO");
fn exec_rr_a(cpu: *sm83) void = abort("TODO");
fn exec_sla_b(cpu: *sm83) void = abort("TODO");
fn exec_sla_c(cpu: *sm83) void = abort("TODO");
fn exec_sla_d(cpu: *sm83) void = abort("TODO");
fn exec_sla_e(cpu: *sm83) void = abort("TODO");
fn exec_sla_h(cpu: *sm83) void = abort("TODO");
fn exec_sla_l(cpu: *sm83) void = abort("TODO");
fn exec_sla_hl(cpu: *sm83) void = abort("TODO");
fn exec_sla_a(cpu: *sm83) void = abort("TODO");
fn exec_sra_b(cpu: *sm83) void = abort("TODO");
fn exec_sra_c(cpu: *sm83) void = abort("TODO");
fn exec_sra_d(cpu: *sm83) void = abort("TODO");
fn exec_sra_e(cpu: *sm83) void = abort("TODO");
fn exec_sra_h(cpu: *sm83) void = abort("TODO");
fn exec_sra_l(cpu: *sm83) void = abort("TODO");
fn exec_sra_hl(cpu: *sm83) void = abort("TODO");
fn exec_sra_a(cpu: *sm83) void = abort("TODO");
fn exec_swap_b(cpu: *sm83) void = abort("TODO");
fn exec_swap_c(cpu: *sm83) void = abort("TODO");
fn exec_swap_d(cpu: *sm83) void = abort("TODO");
fn exec_swap_e(cpu: *sm83) void = abort("TODO");
fn exec_swap_h(cpu: *sm83) void = abort("TODO");
fn exec_swap_l(cpu: *sm83) void = abort("TODO");
fn exec_swap_hl(cpu: *sm83) void = abort("TODO");
fn exec_swap_a(cpu: *sm83) void = abort("TODO");
fn exec_srl_b(cpu: *sm83) void = abort("TODO");
fn exec_srl_c(cpu: *sm83) void = abort("TODO");
fn exec_srl_d(cpu: *sm83) void = abort("TODO");
fn exec_srl_e(cpu: *sm83) void = abort("TODO");
fn exec_srl_h(cpu: *sm83) void = abort("TODO");
fn exec_srl_l(cpu: *sm83) void = abort("TODO");
fn exec_srl_hl(cpu: *sm83) void = abort("TODO");
fn exec_srl_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_0_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_1_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_2_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_3_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_4_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_5_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_6_a(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_b(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_c(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_d(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_e(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_h(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_l(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_hl(cpu: *sm83) void = abort("TODO");
fn exec_bit_7_a(cpu: *sm83) void = abort("TODO");
fn exec_res_0_b(cpu: *sm83) void = abort("TODO");
fn exec_res_0_c(cpu: *sm83) void = abort("TODO");
fn exec_res_0_d(cpu: *sm83) void = abort("TODO");
fn exec_res_0_e(cpu: *sm83) void = abort("TODO");
fn exec_res_0_h(cpu: *sm83) void = abort("TODO");
fn exec_res_0_l(cpu: *sm83) void = abort("TODO");
fn exec_res_0_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_0_a(cpu: *sm83) void = abort("TODO");
fn exec_res_1_b(cpu: *sm83) void = abort("TODO");
fn exec_res_1_c(cpu: *sm83) void = abort("TODO");
fn exec_res_1_d(cpu: *sm83) void = abort("TODO");
fn exec_res_1_e(cpu: *sm83) void = abort("TODO");
fn exec_res_1_h(cpu: *sm83) void = abort("TODO");
fn exec_res_1_l(cpu: *sm83) void = abort("TODO");
fn exec_res_1_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_1_a(cpu: *sm83) void = abort("TODO");
fn exec_res_2_b(cpu: *sm83) void = abort("TODO");
fn exec_res_2_c(cpu: *sm83) void = abort("TODO");
fn exec_res_2_d(cpu: *sm83) void = abort("TODO");
fn exec_res_2_e(cpu: *sm83) void = abort("TODO");
fn exec_res_2_h(cpu: *sm83) void = abort("TODO");
fn exec_res_2_l(cpu: *sm83) void = abort("TODO");
fn exec_res_2_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_2_a(cpu: *sm83) void = abort("TODO");
fn exec_res_3_b(cpu: *sm83) void = abort("TODO");
fn exec_res_3_c(cpu: *sm83) void = abort("TODO");
fn exec_res_3_d(cpu: *sm83) void = abort("TODO");
fn exec_res_3_e(cpu: *sm83) void = abort("TODO");
fn exec_res_3_h(cpu: *sm83) void = abort("TODO");
fn exec_res_3_l(cpu: *sm83) void = abort("TODO");
fn exec_res_3_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_3_a(cpu: *sm83) void = abort("TODO");
fn exec_res_4_b(cpu: *sm83) void = abort("TODO");
fn exec_res_4_c(cpu: *sm83) void = abort("TODO");
fn exec_res_4_d(cpu: *sm83) void = abort("TODO");
fn exec_res_4_e(cpu: *sm83) void = abort("TODO");
fn exec_res_4_h(cpu: *sm83) void = abort("TODO");
fn exec_res_4_l(cpu: *sm83) void = abort("TODO");
fn exec_res_4_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_4_a(cpu: *sm83) void = abort("TODO");
fn exec_res_5_b(cpu: *sm83) void = abort("TODO");
fn exec_res_5_c(cpu: *sm83) void = abort("TODO");
fn exec_res_5_d(cpu: *sm83) void = abort("TODO");
fn exec_res_5_e(cpu: *sm83) void = abort("TODO");
fn exec_res_5_h(cpu: *sm83) void = abort("TODO");
fn exec_res_5_l(cpu: *sm83) void = abort("TODO");
fn exec_res_5_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_5_a(cpu: *sm83) void = abort("TODO");
fn exec_res_6_b(cpu: *sm83) void = abort("TODO");
fn exec_res_6_c(cpu: *sm83) void = abort("TODO");
fn exec_res_6_d(cpu: *sm83) void = abort("TODO");
fn exec_res_6_e(cpu: *sm83) void = abort("TODO");
fn exec_res_6_h(cpu: *sm83) void = abort("TODO");
fn exec_res_6_l(cpu: *sm83) void = abort("TODO");
fn exec_res_6_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_6_a(cpu: *sm83) void = abort("TODO");
fn exec_res_7_b(cpu: *sm83) void = abort("TODO");
fn exec_res_7_c(cpu: *sm83) void = abort("TODO");
fn exec_res_7_d(cpu: *sm83) void = abort("TODO");
fn exec_res_7_e(cpu: *sm83) void = abort("TODO");
fn exec_res_7_h(cpu: *sm83) void = abort("TODO");
fn exec_res_7_l(cpu: *sm83) void = abort("TODO");
fn exec_res_7_hl(cpu: *sm83) void = abort("TODO");
fn exec_res_7_a(cpu: *sm83) void = abort("TODO");
fn exec_set_0_b(cpu: *sm83) void = abort("TODO");
fn exec_set_0_c(cpu: *sm83) void = abort("TODO");
fn exec_set_0_d(cpu: *sm83) void = abort("TODO");
fn exec_set_0_e(cpu: *sm83) void = abort("TODO");
fn exec_set_0_h(cpu: *sm83) void = abort("TODO");
fn exec_set_0_l(cpu: *sm83) void = abort("TODO");
fn exec_set_0_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_0_a(cpu: *sm83) void = abort("TODO");
fn exec_set_1_b(cpu: *sm83) void = abort("TODO");
fn exec_set_1_c(cpu: *sm83) void = abort("TODO");
fn exec_set_1_d(cpu: *sm83) void = abort("TODO");
fn exec_set_1_e(cpu: *sm83) void = abort("TODO");
fn exec_set_1_h(cpu: *sm83) void = abort("TODO");
fn exec_set_1_l(cpu: *sm83) void = abort("TODO");
fn exec_set_1_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_1_a(cpu: *sm83) void = abort("TODO");
fn exec_set_2_b(cpu: *sm83) void = abort("TODO");
fn exec_set_2_c(cpu: *sm83) void = abort("TODO");
fn exec_set_2_d(cpu: *sm83) void = abort("TODO");
fn exec_set_2_e(cpu: *sm83) void = abort("TODO");
fn exec_set_2_h(cpu: *sm83) void = abort("TODO");
fn exec_set_2_l(cpu: *sm83) void = abort("TODO");
fn exec_set_2_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_2_a(cpu: *sm83) void = abort("TODO");
fn exec_set_3_b(cpu: *sm83) void = abort("TODO");
fn exec_set_3_c(cpu: *sm83) void = abort("TODO");
fn exec_set_3_d(cpu: *sm83) void = abort("TODO");
fn exec_set_3_e(cpu: *sm83) void = abort("TODO");
fn exec_set_3_h(cpu: *sm83) void = abort("TODO");
fn exec_set_3_l(cpu: *sm83) void = abort("TODO");
fn exec_set_3_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_3_a(cpu: *sm83) void = abort("TODO");
fn exec_set_4_b(cpu: *sm83) void = abort("TODO");
fn exec_set_4_c(cpu: *sm83) void = abort("TODO");
fn exec_set_4_d(cpu: *sm83) void = abort("TODO");
fn exec_set_4_e(cpu: *sm83) void = abort("TODO");
fn exec_set_4_h(cpu: *sm83) void = abort("TODO");
fn exec_set_4_l(cpu: *sm83) void = abort("TODO");
fn exec_set_4_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_4_a(cpu: *sm83) void = abort("TODO");
fn exec_set_5_b(cpu: *sm83) void = abort("TODO");
fn exec_set_5_c(cpu: *sm83) void = abort("TODO");
fn exec_set_5_d(cpu: *sm83) void = abort("TODO");
fn exec_set_5_e(cpu: *sm83) void = abort("TODO");
fn exec_set_5_h(cpu: *sm83) void = abort("TODO");
fn exec_set_5_l(cpu: *sm83) void = abort("TODO");
fn exec_set_5_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_5_a(cpu: *sm83) void = abort("TODO");
fn exec_set_6_b(cpu: *sm83) void = abort("TODO");
fn exec_set_6_c(cpu: *sm83) void = abort("TODO");
fn exec_set_6_d(cpu: *sm83) void = abort("TODO");
fn exec_set_6_e(cpu: *sm83) void = abort("TODO");
fn exec_set_6_h(cpu: *sm83) void = abort("TODO");
fn exec_set_6_l(cpu: *sm83) void = abort("TODO");
fn exec_set_6_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_6_a(cpu: *sm83) void = abort("TODO");
fn exec_set_7_b(cpu: *sm83) void = abort("TODO");
fn exec_set_7_c(cpu: *sm83) void = abort("TODO");
fn exec_set_7_d(cpu: *sm83) void = abort("TODO");
fn exec_set_7_e(cpu: *sm83) void = abort("TODO");
fn exec_set_7_h(cpu: *sm83) void = abort("TODO");
fn exec_set_7_l(cpu: *sm83) void = abort("TODO");
fn exec_set_7_hl(cpu: *sm83) void = abort("TODO");
fn exec_set_7_a(cpu: *sm83) void = abort("TODO");

M sm83/tab.ha => sm83/tab.ha +1283 -0
@@ 1282,3 1282,1286 @@ const itab: [0x100]instr = [
		cycles = 16,
	},
];

const prefixtab: [0x100]instr = [
	// 0x0: RLC
	instr {
		exec = &exec_rlc_b,
		cycles = 8,
	},
	// 0x1: RLC
	instr {
		exec = &exec_rlc_c,
		cycles = 8,
	},
	// 0x2: RLC
	instr {
		exec = &exec_rlc_d,
		cycles = 8,
	},
	// 0x3: RLC
	instr {
		exec = &exec_rlc_e,
		cycles = 8,
	},
	// 0x4: RLC
	instr {
		exec = &exec_rlc_h,
		cycles = 8,
	},
	// 0x5: RLC
	instr {
		exec = &exec_rlc_l,
		cycles = 8,
	},
	// 0x6: RLC
	instr {
		exec = &exec_rlc_hl,
		cycles = 16,
	},
	// 0x7: RLC
	instr {
		exec = &exec_rlc_a,
		cycles = 8,
	},
	// 0x8: RRC
	instr {
		exec = &exec_rrc_b,
		cycles = 8,
	},
	// 0x9: RRC
	instr {
		exec = &exec_rrc_c,
		cycles = 8,
	},
	// 0xA: RRC
	instr {
		exec = &exec_rrc_d,
		cycles = 8,
	},
	// 0xB: RRC
	instr {
		exec = &exec_rrc_e,
		cycles = 8,
	},
	// 0xC: RRC
	instr {
		exec = &exec_rrc_h,
		cycles = 8,
	},
	// 0xD: RRC
	instr {
		exec = &exec_rrc_l,
		cycles = 8,
	},
	// 0xE: RRC
	instr {
		exec = &exec_rrc_hl,
		cycles = 16,
	},
	// 0xF: RRC
	instr {
		exec = &exec_rrc_a,
		cycles = 8,
	},
	// 0x10: RL
	instr {
		exec = &exec_rl_b,
		cycles = 8,
	},
	// 0x11: RL
	instr {
		exec = &exec_rl_c,
		cycles = 8,
	},
	// 0x12: RL
	instr {
		exec = &exec_rl_d,
		cycles = 8,
	},
	// 0x13: RL
	instr {
		exec = &exec_rl_e,
		cycles = 8,
	},
	// 0x14: RL
	instr {
		exec = &exec_rl_h,
		cycles = 8,
	},
	// 0x15: RL
	instr {
		exec = &exec_rl_l,
		cycles = 8,
	},
	// 0x16: RL
	instr {
		exec = &exec_rl_hl,
		cycles = 16,
	},
	// 0x17: RL
	instr {
		exec = &exec_rl_a,
		cycles = 8,
	},
	// 0x18: RR
	instr {
		exec = &exec_rr_b,
		cycles = 8,
	},
	// 0x19: RR
	instr {
		exec = &exec_rr_c,
		cycles = 8,
	},
	// 0x1A: RR
	instr {
		exec = &exec_rr_d,
		cycles = 8,
	},
	// 0x1B: RR
	instr {
		exec = &exec_rr_e,
		cycles = 8,
	},
	// 0x1C: RR
	instr {
		exec = &exec_rr_h,
		cycles = 8,
	},
	// 0x1D: RR
	instr {
		exec = &exec_rr_l,
		cycles = 8,
	},
	// 0x1E: RR
	instr {
		exec = &exec_rr_hl,
		cycles = 16,
	},
	// 0x1F: RR
	instr {
		exec = &exec_rr_a,
		cycles = 8,
	},
	// 0x20: SLA
	instr {
		exec = &exec_sla_b,
		cycles = 8,
	},
	// 0x21: SLA
	instr {
		exec = &exec_sla_c,
		cycles = 8,
	},
	// 0x22: SLA
	instr {
		exec = &exec_sla_d,
		cycles = 8,
	},
	// 0x23: SLA
	instr {
		exec = &exec_sla_e,
		cycles = 8,
	},
	// 0x24: SLA
	instr {
		exec = &exec_sla_h,
		cycles = 8,
	},
	// 0x25: SLA
	instr {
		exec = &exec_sla_l,
		cycles = 8,
	},
	// 0x26: SLA
	instr {
		exec = &exec_sla_hl,
		cycles = 16,
	},
	// 0x27: SLA
	instr {
		exec = &exec_sla_a,
		cycles = 8,
	},
	// 0x28: SRA
	instr {
		exec = &exec_sra_b,
		cycles = 8,
	},
	// 0x29: SRA
	instr {
		exec = &exec_sra_c,
		cycles = 8,
	},
	// 0x2A: SRA
	instr {
		exec = &exec_sra_d,
		cycles = 8,
	},
	// 0x2B: SRA
	instr {
		exec = &exec_sra_e,
		cycles = 8,
	},
	// 0x2C: SRA
	instr {
		exec = &exec_sra_h,
		cycles = 8,
	},
	// 0x2D: SRA
	instr {
		exec = &exec_sra_l,
		cycles = 8,
	},
	// 0x2E: SRA
	instr {
		exec = &exec_sra_hl,
		cycles = 16,
	},
	// 0x2F: SRA
	instr {
		exec = &exec_sra_a,
		cycles = 8,
	},
	// 0x30: SWAP
	instr {
		exec = &exec_swap_b,
		cycles = 8,
	},
	// 0x31: SWAP
	instr {
		exec = &exec_swap_c,
		cycles = 8,
	},
	// 0x32: SWAP
	instr {
		exec = &exec_swap_d,
		cycles = 8,
	},
	// 0x33: SWAP
	instr {
		exec = &exec_swap_e,
		cycles = 8,
	},
	// 0x34: SWAP
	instr {
		exec = &exec_swap_h,
		cycles = 8,
	},
	// 0x35: SWAP
	instr {
		exec = &exec_swap_l,
		cycles = 8,
	},
	// 0x36: SWAP
	instr {
		exec = &exec_swap_hl,
		cycles = 16,
	},
	// 0x37: SWAP
	instr {
		exec = &exec_swap_a,
		cycles = 8,
	},
	// 0x38: SRL
	instr {
		exec = &exec_srl_b,
		cycles = 8,
	},
	// 0x39: SRL
	instr {
		exec = &exec_srl_c,
		cycles = 8,
	},
	// 0x3A: SRL
	instr {
		exec = &exec_srl_d,
		cycles = 8,
	},
	// 0x3B: SRL
	instr {
		exec = &exec_srl_e,
		cycles = 8,
	},
	// 0x3C: SRL
	instr {
		exec = &exec_srl_h,
		cycles = 8,
	},
	// 0x3D: SRL
	instr {
		exec = &exec_srl_l,
		cycles = 8,
	},
	// 0x3E: SRL
	instr {
		exec = &exec_srl_hl,
		cycles = 16,
	},
	// 0x3F: SRL
	instr {
		exec = &exec_srl_a,
		cycles = 8,
	},
	// 0x40: BIT
	instr {
		exec = &exec_bit_0_b,
		cycles = 8,
	},
	// 0x41: BIT
	instr {
		exec = &exec_bit_0_c,
		cycles = 8,
	},
	// 0x42: BIT
	instr {
		exec = &exec_bit_0_d,
		cycles = 8,
	},
	// 0x43: BIT
	instr {
		exec = &exec_bit_0_e,
		cycles = 8,
	},
	// 0x44: BIT
	instr {
		exec = &exec_bit_0_h,
		cycles = 8,
	},
	// 0x45: BIT
	instr {
		exec = &exec_bit_0_l,
		cycles = 8,
	},
	// 0x46: BIT
	instr {
		exec = &exec_bit_0_hl,
		cycles = 12,
	},
	// 0x47: BIT
	instr {
		exec = &exec_bit_0_a,
		cycles = 8,
	},
	// 0x48: BIT
	instr {
		exec = &exec_bit_1_b,
		cycles = 8,
	},
	// 0x49: BIT
	instr {
		exec = &exec_bit_1_c,
		cycles = 8,
	},
	// 0x4A: BIT
	instr {
		exec = &exec_bit_1_d,
		cycles = 8,
	},
	// 0x4B: BIT
	instr {
		exec = &exec_bit_1_e,
		cycles = 8,
	},
	// 0x4C: BIT
	instr {
		exec = &exec_bit_1_h,
		cycles = 8,
	},
	// 0x4D: BIT
	instr {
		exec = &exec_bit_1_l,
		cycles = 8,
	},
	// 0x4E: BIT
	instr {
		exec = &exec_bit_1_hl,
		cycles = 12,
	},
	// 0x4F: BIT
	instr {
		exec = &exec_bit_1_a,
		cycles = 8,
	},
	// 0x50: BIT
	instr {
		exec = &exec_bit_2_b,
		cycles = 8,
	},
	// 0x51: BIT
	instr {
		exec = &exec_bit_2_c,
		cycles = 8,
	},
	// 0x52: BIT
	instr {
		exec = &exec_bit_2_d,
		cycles = 8,
	},
	// 0x53: BIT
	instr {
		exec = &exec_bit_2_e,
		cycles = 8,
	},
	// 0x54: BIT
	instr {
		exec = &exec_bit_2_h,
		cycles = 8,
	},
	// 0x55: BIT
	instr {
		exec = &exec_bit_2_l,
		cycles = 8,
	},
	// 0x56: BIT
	instr {
		exec = &exec_bit_2_hl,
		cycles = 12,
	},
	// 0x57: BIT
	instr {
		exec = &exec_bit_2_a,
		cycles = 8,
	},
	// 0x58: BIT
	instr {
		exec = &exec_bit_3_b,
		cycles = 8,
	},
	// 0x59: BIT
	instr {
		exec = &exec_bit_3_c,
		cycles = 8,
	},
	// 0x5A: BIT
	instr {
		exec = &exec_bit_3_d,
		cycles = 8,
	},
	// 0x5B: BIT
	instr {
		exec = &exec_bit_3_e,
		cycles = 8,
	},
	// 0x5C: BIT
	instr {
		exec = &exec_bit_3_h,
		cycles = 8,
	},
	// 0x5D: BIT
	instr {
		exec = &exec_bit_3_l,
		cycles = 8,
	},
	// 0x5E: BIT
	instr {
		exec = &exec_bit_3_hl,
		cycles = 12,
	},
	// 0x5F: BIT
	instr {
		exec = &exec_bit_3_a,
		cycles = 8,
	},
	// 0x60: BIT
	instr {
		exec = &exec_bit_4_b,
		cycles = 8,
	},
	// 0x61: BIT
	instr {
		exec = &exec_bit_4_c,
		cycles = 8,
	},
	// 0x62: BIT
	instr {
		exec = &exec_bit_4_d,
		cycles = 8,
	},
	// 0x63: BIT
	instr {
		exec = &exec_bit_4_e,
		cycles = 8,
	},
	// 0x64: BIT
	instr {
		exec = &exec_bit_4_h,
		cycles = 8,
	},
	// 0x65: BIT
	instr {
		exec = &exec_bit_4_l,
		cycles = 8,
	},
	// 0x66: BIT
	instr {
		exec = &exec_bit_4_hl,
		cycles = 12,
	},
	// 0x67: BIT
	instr {
		exec = &exec_bit_4_a,
		cycles = 8,
	},
	// 0x68: BIT
	instr {
		exec = &exec_bit_5_b,
		cycles = 8,
	},
	// 0x69: BIT
	instr {
		exec = &exec_bit_5_c,
		cycles = 8,
	},
	// 0x6A: BIT
	instr {
		exec = &exec_bit_5_d,
		cycles = 8,
	},
	// 0x6B: BIT
	instr {
		exec = &exec_bit_5_e,
		cycles = 8,
	},
	// 0x6C: BIT
	instr {
		exec = &exec_bit_5_h,
		cycles = 8,
	},
	// 0x6D: BIT
	instr {
		exec = &exec_bit_5_l,
		cycles = 8,
	},
	// 0x6E: BIT
	instr {
		exec = &exec_bit_5_hl,
		cycles = 12,
	},
	// 0x6F: BIT
	instr {
		exec = &exec_bit_5_a,
		cycles = 8,
	},
	// 0x70: BIT
	instr {
		exec = &exec_bit_6_b,
		cycles = 8,
	},
	// 0x71: BIT
	instr {
		exec = &exec_bit_6_c,
		cycles = 8,
	},
	// 0x72: BIT
	instr {
		exec = &exec_bit_6_d,
		cycles = 8,
	},
	// 0x73: BIT
	instr {
		exec = &exec_bit_6_e,
		cycles = 8,
	},
	// 0x74: BIT
	instr {
		exec = &exec_bit_6_h,
		cycles = 8,
	},
	// 0x75: BIT
	instr {
		exec = &exec_bit_6_l,
		cycles = 8,
	},
	// 0x76: BIT
	instr {
		exec = &exec_bit_6_hl,
		cycles = 12,
	},
	// 0x77: BIT
	instr {
		exec = &exec_bit_6_a,
		cycles = 8,
	},
	// 0x78: BIT
	instr {
		exec = &exec_bit_7_b,
		cycles = 8,
	},
	// 0x79: BIT
	instr {
		exec = &exec_bit_7_c,
		cycles = 8,
	},
	// 0x7A: BIT
	instr {
		exec = &exec_bit_7_d,
		cycles = 8,
	},
	// 0x7B: BIT
	instr {
		exec = &exec_bit_7_e,
		cycles = 8,
	},
	// 0x7C: BIT
	instr {
		exec = &exec_bit_7_h,
		cycles = 8,
	},
	// 0x7D: BIT
	instr {
		exec = &exec_bit_7_l,
		cycles = 8,
	},
	// 0x7E: BIT
	instr {
		exec = &exec_bit_7_hl,
		cycles = 12,
	},
	// 0x7F: BIT
	instr {
		exec = &exec_bit_7_a,
		cycles = 8,
	},
	// 0x80: RES
	instr {
		exec = &exec_res_0_b,
		cycles = 8,
	},
	// 0x81: RES
	instr {
		exec = &exec_res_0_c,
		cycles = 8,
	},
	// 0x82: RES
	instr {
		exec = &exec_res_0_d,
		cycles = 8,
	},
	// 0x83: RES
	instr {
		exec = &exec_res_0_e,
		cycles = 8,
	},
	// 0x84: RES
	instr {
		exec = &exec_res_0_h,
		cycles = 8,
	},
	// 0x85: RES
	instr {
		exec = &exec_res_0_l,
		cycles = 8,
	},
	// 0x86: RES
	instr {
		exec = &exec_res_0_hl,
		cycles = 16,
	},
	// 0x87: RES
	instr {
		exec = &exec_res_0_a,
		cycles = 8,
	},
	// 0x88: RES
	instr {
		exec = &exec_res_1_b,
		cycles = 8,
	},
	// 0x89: RES
	instr {
		exec = &exec_res_1_c,
		cycles = 8,
	},
	// 0x8A: RES
	instr {
		exec = &exec_res_1_d,
		cycles = 8,
	},
	// 0x8B: RES
	instr {
		exec = &exec_res_1_e,
		cycles = 8,
	},
	// 0x8C: RES
	instr {
		exec = &exec_res_1_h,
		cycles = 8,
	},
	// 0x8D: RES
	instr {
		exec = &exec_res_1_l,
		cycles = 8,
	},
	// 0x8E: RES
	instr {
		exec = &exec_res_1_hl,
		cycles = 16,
	},
	// 0x8F: RES
	instr {
		exec = &exec_res_1_a,
		cycles = 8,
	},
	// 0x90: RES
	instr {
		exec = &exec_res_2_b,
		cycles = 8,
	},
	// 0x91: RES
	instr {
		exec = &exec_res_2_c,
		cycles = 8,
	},
	// 0x92: RES
	instr {
		exec = &exec_res_2_d,
		cycles = 8,
	},
	// 0x93: RES
	instr {
		exec = &exec_res_2_e,
		cycles = 8,
	},
	// 0x94: RES
	instr {
		exec = &exec_res_2_h,
		cycles = 8,
	},
	// 0x95: RES
	instr {
		exec = &exec_res_2_l,
		cycles = 8,
	},
	// 0x96: RES
	instr {
		exec = &exec_res_2_hl,
		cycles = 16,
	},
	// 0x97: RES
	instr {
		exec = &exec_res_2_a,
		cycles = 8,
	},
	// 0x98: RES
	instr {
		exec = &exec_res_3_b,
		cycles = 8,
	},
	// 0x99: RES
	instr {
		exec = &exec_res_3_c,
		cycles = 8,
	},
	// 0x9A: RES
	instr {
		exec = &exec_res_3_d,
		cycles = 8,
	},
	// 0x9B: RES
	instr {
		exec = &exec_res_3_e,
		cycles = 8,
	},
	// 0x9C: RES
	instr {
		exec = &exec_res_3_h,
		cycles = 8,
	},
	// 0x9D: RES
	instr {
		exec = &exec_res_3_l,
		cycles = 8,
	},
	// 0x9E: RES
	instr {
		exec = &exec_res_3_hl,
		cycles = 16,
	},
	// 0x9F: RES
	instr {
		exec = &exec_res_3_a,
		cycles = 8,
	},
	// 0xA0: RES
	instr {
		exec = &exec_res_4_b,
		cycles = 8,
	},
	// 0xA1: RES
	instr {
		exec = &exec_res_4_c,
		cycles = 8,
	},
	// 0xA2: RES
	instr {
		exec = &exec_res_4_d,
		cycles = 8,
	},
	// 0xA3: RES
	instr {
		exec = &exec_res_4_e,
		cycles = 8,
	},
	// 0xA4: RES
	instr {
		exec = &exec_res_4_h,
		cycles = 8,
	},
	// 0xA5: RES
	instr {
		exec = &exec_res_4_l,
		cycles = 8,
	},
	// 0xA6: RES
	instr {
		exec = &exec_res_4_hl,
		cycles = 16,
	},
	// 0xA7: RES
	instr {
		exec = &exec_res_4_a,
		cycles = 8,
	},
	// 0xA8: RES
	instr {
		exec = &exec_res_5_b,
		cycles = 8,
	},
	// 0xA9: RES
	instr {
		exec = &exec_res_5_c,
		cycles = 8,
	},
	// 0xAA: RES
	instr {
		exec = &exec_res_5_d,
		cycles = 8,
	},
	// 0xAB: RES
	instr {
		exec = &exec_res_5_e,
		cycles = 8,
	},
	// 0xAC: RES
	instr {
		exec = &exec_res_5_h,
		cycles = 8,
	},
	// 0xAD: RES
	instr {
		exec = &exec_res_5_l,
		cycles = 8,
	},
	// 0xAE: RES
	instr {
		exec = &exec_res_5_hl,
		cycles = 16,
	},
	// 0xAF: RES
	instr {
		exec = &exec_res_5_a,
		cycles = 8,
	},
	// 0xB0: RES
	instr {
		exec = &exec_res_6_b,
		cycles = 8,
	},
	// 0xB1: RES
	instr {
		exec = &exec_res_6_c,
		cycles = 8,
	},
	// 0xB2: RES
	instr {
		exec = &exec_res_6_d,
		cycles = 8,
	},
	// 0xB3: RES
	instr {
		exec = &exec_res_6_e,
		cycles = 8,
	},
	// 0xB4: RES
	instr {
		exec = &exec_res_6_h,
		cycles = 8,
	},
	// 0xB5: RES
	instr {
		exec = &exec_res_6_l,
		cycles = 8,
	},
	// 0xB6: RES
	instr {
		exec = &exec_res_6_hl,
		cycles = 16,
	},
	// 0xB7: RES
	instr {
		exec = &exec_res_6_a,
		cycles = 8,
	},
	// 0xB8: RES
	instr {
		exec = &exec_res_7_b,
		cycles = 8,
	},
	// 0xB9: RES
	instr {
		exec = &exec_res_7_c,
		cycles = 8,
	},
	// 0xBA: RES
	instr {
		exec = &exec_res_7_d,
		cycles = 8,
	},
	// 0xBB: RES
	instr {
		exec = &exec_res_7_e,
		cycles = 8,
	},
	// 0xBC: RES
	instr {
		exec = &exec_res_7_h,
		cycles = 8,
	},
	// 0xBD: RES
	instr {
		exec = &exec_res_7_l,
		cycles = 8,
	},
	// 0xBE: RES
	instr {
		exec = &exec_res_7_hl,
		cycles = 16,
	},
	// 0xBF: RES
	instr {
		exec = &exec_res_7_a,
		cycles = 8,
	},
	// 0xC0: SET
	instr {
		exec = &exec_set_0_b,
		cycles = 8,
	},
	// 0xC1: SET
	instr {
		exec = &exec_set_0_c,
		cycles = 8,
	},
	// 0xC2: SET
	instr {
		exec = &exec_set_0_d,
		cycles = 8,
	},
	// 0xC3: SET
	instr {
		exec = &exec_set_0_e,
		cycles = 8,
	},
	// 0xC4: SET
	instr {
		exec = &exec_set_0_h,
		cycles = 8,
	},
	// 0xC5: SET
	instr {
		exec = &exec_set_0_l,
		cycles = 8,
	},
	// 0xC6: SET
	instr {
		exec = &exec_set_0_hl,
		cycles = 16,
	},
	// 0xC7: SET
	instr {
		exec = &exec_set_0_a,
		cycles = 8,
	},
	// 0xC8: SET
	instr {
		exec = &exec_set_1_b,
		cycles = 8,
	},
	// 0xC9: SET
	instr {
		exec = &exec_set_1_c,
		cycles = 8,
	},
	// 0xCA: SET
	instr {
		exec = &exec_set_1_d,
		cycles = 8,
	},
	// 0xCB: SET
	instr {
		exec = &exec_set_1_e,
		cycles = 8,
	},
	// 0xCC: SET
	instr {
		exec = &exec_set_1_h,
		cycles = 8,
	},
	// 0xCD: SET
	instr {
		exec = &exec_set_1_l,
		cycles = 8,
	},
	// 0xCE: SET
	instr {
		exec = &exec_set_1_hl,
		cycles = 16,
	},
	// 0xCF: SET
	instr {
		exec = &exec_set_1_a,
		cycles = 8,
	},
	// 0xD0: SET
	instr {
		exec = &exec_set_2_b,
		cycles = 8,
	},
	// 0xD1: SET
	instr {
		exec = &exec_set_2_c,
		cycles = 8,
	},
	// 0xD2: SET
	instr {
		exec = &exec_set_2_d,
		cycles = 8,
	},
	// 0xD3: SET
	instr {
		exec = &exec_set_2_e,
		cycles = 8,
	},
	// 0xD4: SET
	instr {
		exec = &exec_set_2_h,
		cycles = 8,
	},
	// 0xD5: SET
	instr {
		exec = &exec_set_2_l,
		cycles = 8,
	},
	// 0xD6: SET
	instr {
		exec = &exec_set_2_hl,
		cycles = 16,
	},
	// 0xD7: SET
	instr {
		exec = &exec_set_2_a,
		cycles = 8,
	},
	// 0xD8: SET
	instr {
		exec = &exec_set_3_b,
		cycles = 8,
	},
	// 0xD9: SET
	instr {
		exec = &exec_set_3_c,
		cycles = 8,
	},
	// 0xDA: SET
	instr {
		exec = &exec_set_3_d,
		cycles = 8,
	},
	// 0xDB: SET
	instr {
		exec = &exec_set_3_e,
		cycles = 8,
	},
	// 0xDC: SET
	instr {
		exec = &exec_set_3_h,
		cycles = 8,
	},
	// 0xDD: SET
	instr {
		exec = &exec_set_3_l,
		cycles = 8,
	},
	// 0xDE: SET
	instr {
		exec = &exec_set_3_hl,
		cycles = 16,
	},
	// 0xDF: SET
	instr {
		exec = &exec_set_3_a,
		cycles = 8,
	},
	// 0xE0: SET
	instr {
		exec = &exec_set_4_b,
		cycles = 8,
	},
	// 0xE1: SET
	instr {
		exec = &exec_set_4_c,
		cycles = 8,
	},
	// 0xE2: SET
	instr {
		exec = &exec_set_4_d,
		cycles = 8,
	},
	// 0xE3: SET
	instr {
		exec = &exec_set_4_e,
		cycles = 8,
	},
	// 0xE4: SET
	instr {
		exec = &exec_set_4_h,
		cycles = 8,
	},
	// 0xE5: SET
	instr {
		exec = &exec_set_4_l,
		cycles = 8,
	},
	// 0xE6: SET
	instr {
		exec = &exec_set_4_hl,
		cycles = 16,
	},
	// 0xE7: SET
	instr {
		exec = &exec_set_4_a,
		cycles = 8,
	},
	// 0xE8: SET
	instr {
		exec = &exec_set_5_b,
		cycles = 8,
	},
	// 0xE9: SET
	instr {
		exec = &exec_set_5_c,
		cycles = 8,
	},
	// 0xEA: SET
	instr {
		exec = &exec_set_5_d,
		cycles = 8,
	},
	// 0xEB: SET
	instr {
		exec = &exec_set_5_e,
		cycles = 8,
	},
	// 0xEC: SET
	instr {
		exec = &exec_set_5_h,
		cycles = 8,
	},
	// 0xED: SET
	instr {
		exec = &exec_set_5_l,
		cycles = 8,
	},
	// 0xEE: SET
	instr {
		exec = &exec_set_5_hl,
		cycles = 16,
	},
	// 0xEF: SET
	instr {
		exec = &exec_set_5_a,
		cycles = 8,
	},
	// 0xF0: SET
	instr {
		exec = &exec_set_6_b,
		cycles = 8,
	},
	// 0xF1: SET
	instr {
		exec = &exec_set_6_c,
		cycles = 8,
	},
	// 0xF2: SET
	instr {
		exec = &exec_set_6_d,
		cycles = 8,
	},
	// 0xF3: SET
	instr {
		exec = &exec_set_6_e,
		cycles = 8,
	},
	// 0xF4: SET
	instr {
		exec = &exec_set_6_h,
		cycles = 8,
	},
	// 0xF5: SET
	instr {
		exec = &exec_set_6_l,
		cycles = 8,
	},
	// 0xF6: SET
	instr {
		exec = &exec_set_6_hl,
		cycles = 16,
	},
	// 0xF7: SET
	instr {
		exec = &exec_set_6_a,
		cycles = 8,
	},
	// 0xF8: SET
	instr {
		exec = &exec_set_7_b,
		cycles = 8,
	},
	// 0xF9: SET
	instr {
		exec = &exec_set_7_c,
		cycles = 8,
	},
	// 0xFA: SET
	instr {
		exec = &exec_set_7_d,
		cycles = 8,
	},
	// 0xFB: SET
	instr {
		exec = &exec_set_7_e,
		cycles = 8,
	},
	// 0xFC: SET
	instr {
		exec = &exec_set_7_h,
		cycles = 8,
	},
	// 0xFD: SET
	instr {
		exec = &exec_set_7_l,
		cycles = 8,
	},
	// 0xFE: SET
	instr {
		exec = &exec_set_7_hl,
		cycles = 16,
	},
	// 0xFF: SET
	instr {
		exec = &exec_set_7_a,
		cycles = 8,
	},
];