Exemple #1
0
END_TEST

START_TEST (test_cpu_and)
{
    cpu_t cpu;
    cpu.A = 0x55;

    cpu_set_z(&cpu, true);
    cpu_set_n(&cpu, true);
    cpu_set_c(&cpu, true);
    cpu_set_h(&cpu, false);

    cpu_and(&cpu, 0xF0);

    fail_unless(cpu.A == 0x50);
    fail_unless(!cpu_get_z(&cpu));
    fail_unless(!cpu_get_n(&cpu));
    fail_unless(!cpu_get_c(&cpu));
    fail_unless(cpu_get_h(&cpu));

    cpu_and(&cpu, 0x00);

    fail_unless(cpu.A == 0);
    fail_unless(cpu_get_z(&cpu));
}
Exemple #2
0
void AND(cpu_state_t *state,
		const enum ARG_TYPE arg0, const union REG_INPUT i0,
		const enum ARG_TYPE arg1, const union REG_INPUT i1)
{
	reg_t data0 = cpu_load_reg8(state, A_REG);
	reg_t data1;
	if(arg0 == ARG_TYPE_DATA8)
	{
		data1 = (reg_t)state->arg;
	}
	else if(arg0 == ARG_TYPE_REG16_INDIRECT)
	{
		data1 = (reg_t)cpu_load16_indirect(state, i0);
	}
	else if(arg0 == ARG_TYPE_REG8)
	{
		data1 = cpu_load_reg8(state, i0);
	}
	else
	{
		Error("Incorrect argument type.\n");
	}
	data0 = cpu_and(state, data0, data1);
	cpu_store_reg8(state, A_REG, data0);
}