fix(pipeline): gang.gba works

This commit is contained in:
2022-07-02 01:46:21 -03:00
parent c47ef37ba5
commit 53988b1c83
2 changed files with 58 additions and 38 deletions

View File

@@ -11,8 +11,9 @@ pub fn branch(comptime L: bool) InstrFn {
fn inner(cpu: *Arm7tdmi, _: *Bus, opcode: u32) void {
if (L) cpu.r[14] = cpu.r[15] - 4;
cpu.r[15] = cpu.r[15] +% (sext(u32, u24, opcode) << 2);
cpu.reloadPipeline(u32);
const offset = sext(u32, u24, opcode) << 2;
cpu.r[15] = cpu.r[15] +% offset;
cpu.pipe.flush();
}
}.inner;
}
@@ -23,10 +24,10 @@ pub fn branchAndExchange(cpu: *Arm7tdmi, _: *Bus, opcode: u32) void {
if (cpu.r[rn] & 1 == 1) {
cpu.r[15] = cpu.r[rn] & ~@as(u32, 1);
cpu.cpsr.t.set();
cpu.reloadPipeline(u16);
} else {
cpu.r[15] = cpu.r[rn] & ~@as(u32, 3);
cpu.cpsr.t.unset();
cpu.reloadPipeline(u32);
}
cpu.pipe.flush();
}