fix: properly decode format 11 instructions

This commit is contained in:
Rekai Nyangadzayi Musuka 2022-10-21 05:12:18 -03:00
parent 603e4b6fdf
commit f9e7128061
2 changed files with 5 additions and 5 deletions

View File

@ -496,7 +496,7 @@ fn thumbPopulate() [0x400]ThumbInstrFn {
}, },
0b001 => blk: { 0b001 => blk: {
const L = i >> 5 & 1 == 1; const L = i >> 5 & 1 == 1;
const rd = i >> 2 & 0x3; const rd = i >> 2 & 0x7;
break :blk format11(L, rd); break :blk format11(L, rd);
}, },
0b010 => blk: { 0b010 => blk: {

View File

@ -5,12 +5,12 @@ const InstrFn = @import("../../cpu.zig").ThumbInstrFn;
pub fn format14(comptime L: bool, comptime R: bool) InstrFn { pub fn format14(comptime L: bool, comptime R: bool) InstrFn {
return struct { return struct {
fn inner(cpu: *Arm7tdmi, bus: *Bus, opcode: u16) void { fn inner(cpu: *Arm7tdmi, bus: *Bus, opcode: u16) void {
const count = countRlist(opcode); const count = @boolToInt(R) + countRlist(opcode);
const start = cpu.r[13] - if (!L) 4 * (@boolToInt(R) + count) else 0; const start = cpu.r[13] - if (!L) count * 4 else 0;
var end = cpu.r[13]; var end = cpu.r[13];
if (L) { if (L) {
end += 4 * (@boolToInt(R) + count); end += count * 4;
} else { } else {
end -= 4; end -= 4;
} }
@ -40,7 +40,7 @@ pub fn format14(comptime L: bool, comptime R: bool) InstrFn {
address += 4; address += 4;
} }
cpu.r[13] = if (L) end else cpu.r[13] - 4 * (@boolToInt(R) + count); cpu.r[13] = if (L) end else start;
} }
}.inner; }.inner;
} }