feat(cpu): implement SWP
This commit is contained in:
parent
b27bf4a85c
commit
85927a943f
|
@ -35,7 +35,9 @@ pub fn halfAndSignedDataTransfer(comptime P: bool, comptime U: bool, comptime I:
|
||||||
switch (@truncate(u2, opcode >> 5)) {
|
switch (@truncate(u2, opcode >> 5)) {
|
||||||
0b00 => {
|
0b00 => {
|
||||||
// SWP
|
// SWP
|
||||||
std.debug.panic("[CPU] TODO: Implement SWP", .{});
|
const value = bus.read32(cpu.r[rn]);
|
||||||
|
const tmp = std.math.rotr(u32, value, 8 * (cpu.r[rn] & 0x3));
|
||||||
|
bus.write32(cpu.r[rm], tmp);
|
||||||
},
|
},
|
||||||
0b01 => {
|
0b01 => {
|
||||||
// LDRH
|
// LDRH
|
||||||
|
@ -45,12 +47,12 @@ pub fn halfAndSignedDataTransfer(comptime P: bool, comptime U: bool, comptime I:
|
||||||
0b10 => {
|
0b10 => {
|
||||||
// LDRSB
|
// LDRSB
|
||||||
cpu.r[rd] = util.u32SignExtend(8, @as(u32, bus.read8(address)));
|
cpu.r[rd] = util.u32SignExtend(8, @as(u32, bus.read8(address)));
|
||||||
std.debug.panic("TODO: Affect the CPSR", .{});
|
std.debug.panic("[CPU|ARM|LDRSB] TODO: Affect the CPSR", .{});
|
||||||
},
|
},
|
||||||
0b11 => {
|
0b11 => {
|
||||||
// LDRSH
|
// LDRSH
|
||||||
cpu.r[rd] = util.u32SignExtend(16, @as(u32, bus.read16(address)));
|
cpu.r[rd] = util.u32SignExtend(16, @as(u32, bus.read16(address)));
|
||||||
std.debug.panic("TODO: Affect the CPSR", .{});
|
std.debug.panic("[CPU|ARM|LDRSH] TODO: Affect the CPSR", .{});
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue