diff --git a/src/apps/cpu_integ_test.c b/src/apps/cpu_integ_test.c index c75d7f2..21dcf50 100644 --- a/src/apps/cpu_integ_test.c +++ b/src/apps/cpu_integ_test.c @@ -77,7 +77,6 @@ static void test_dec(const void *test_data) g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_H), ==, 0); g_assert_cmpint(lr35902_get_reg_16(&cpu, LR35902_REG_DE), ==, 0xffff); - free(src); } diff --git a/src/cpu.c b/src/cpu.c index 9a7e579..48664ff 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -734,10 +734,9 @@ static void ld_c_offset(struct lr35902_state *cpu, uint8_t instr) static void ld_hl_d16(struct lr35902_state *cpu, uint8_t inst) { - cpu->a = cpu->mem_read(cpu, cpu->hl++); + cpu->hl = _pop_stack_16(cpu); } - static void inc_16(struct lr35902_state *cpu, uint8_t instr) { uint8_t reg; @@ -772,8 +771,11 @@ static void dec(struct lr35902_state *cpu, uint8_t instr) { uint8_t reg = (instr >> 3) & 0x7; uint8_t val = _get_reg_8(cpu, reg); - val--; + DEBUG_LOG("reg=%d, val=%d", reg, val); + val--; + DEBUG_LOG("val2=%d", val); _set_reg_8(cpu, reg, val); + DEBUG_LOG("val3=%d", _get_reg_8(cpu, reg)); WRITE_BIT(cpu->f, LR35902_FLAG_BIT_Z, val == 0); WRITE_BIT(cpu->f, LR35902_FLAG_BIT_N, 1); @@ -782,7 +784,7 @@ static void dec(struct lr35902_state *cpu, uint8_t instr) static void dec_16(struct lr35902_state *cpu, uint8_t instr) { - uint8_t reg = (instr & 0xF0) >> 8; + uint8_t reg = (instr & 0xF0) >> 4; uint16_t val; switch (reg) { @@ -804,8 +806,8 @@ static void dec_16(struct lr35902_state *cpu, uint8_t instr) static void rlca(struct lr35902_state *cpu, uint8_t instr) { - uint8_t reg = LR35902_REG_A; - uint8_t val = _get_reg_8(cpu, reg); + uint8_t reg = LR35902_REG_A; + uint8_t val = _get_reg_8(cpu, reg); uint8_t new_val = 0; new_val = (val << 1); diff --git a/src/cpu.h b/src/cpu.h index 89ccdff..b1c4f36 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -37,7 +37,6 @@ typedef enum { NUM_LR35902_REGS_8 } lr35902_regs_8; - typedef enum { LR35902_INT_ON, LR35902_INT_OFF,