fix(pipeline): gang.gba works
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user