~sircmpwn/hdmg

1b1e53f632a30d5fbbc15d43d14e82b80f0b8e5d — Drew DeVault 1 year, 6 months ago 0a1cf04
sm83: implement SWAP
1 files changed, 35 insertions(+), 15 deletions(-)

M sm83/prefix.ha
M sm83/prefix.ha => sm83/prefix.ha +35 -15
@@ 1,3 1,4 @@
fn exec_rlc_a(cpu: *sm83) void = abort("TODO");
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");


@@ 5,7 6,8 @@ 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_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");


@@ 13,7 15,8 @@ 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_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");


@@ 21,7 24,8 @@ 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_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");


@@ 29,7 33,8 @@ 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_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");


@@ 37,7 42,8 @@ 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_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");


@@ 45,15 51,27 @@ 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 swap(reg: *u8) void = {
	const lower = *reg & 0xF;
	const upper = *reg & 0xF0;
	*reg |= (upper >> 8) | (lower << 8);
};

fn exec_swap_a(cpu: *sm83) void = swap(&cpu.regs.A);
fn exec_swap_b(cpu: *sm83) void = swap(&cpu.regs.B);
fn exec_swap_c(cpu: *sm83) void = swap(&cpu.regs.C);
fn exec_swap_d(cpu: *sm83) void = swap(&cpu.regs.D);
fn exec_swap_e(cpu: *sm83) void = swap(&cpu.regs.E);
fn exec_swap_h(cpu: *sm83) void = swap(&cpu.regs.H);
fn exec_swap_l(cpu: *sm83) void = swap(&cpu.regs.L);
fn exec_swap_hl(cpu: *sm83) void = {
	let v = readb(cpu, cpu.regs.HL);
	swap(&v);
	writeb(cpu, cpu.regs.HL, v);
};

fn exec_srl_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");


@@ 61,7 79,7 @@ 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");


@@ 126,6 144,7 @@ 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");


@@ 190,6 209,7 @@ 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");