From 182392bf1ce375fadd14e5532bc1fb343093c238 Mon Sep 17 00:00:00 2001 From: Rekai Musuka Date: Fri, 21 Oct 2022 05:11:46 -0300 Subject: [PATCH] feat(cpu): properly implement STR STRH and STRB --- src/cpu/half_signed_data_transfer.zig | 5 +---- src/cpu/single_data_transfer.zig | 14 +++----------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/cpu/half_signed_data_transfer.zig b/src/cpu/half_signed_data_transfer.zig index e84149e..95a9bfe 100644 --- a/src/cpu/half_signed_data_transfer.zig +++ b/src/cpu/half_signed_data_transfer.zig @@ -51,10 +51,7 @@ pub fn comptimeHalfSignedDataTransfer(comptime P: bool, comptime U: bool, compti } else { if (opcode >> 5 & 0x01 == 0x01) { // STRH - const src = @truncate(u16, cpu.r[rd]); - - bus.write16(address + 2, src); - bus.write16(address, src); + bus.write16(address, @truncate(u16, cpu.r[rd])); } else { std.debug.panic("[CPU] TODO: Figure out if this is also SWP", .{}); } diff --git a/src/cpu/single_data_transfer.zig b/src/cpu/single_data_transfer.zig index dbb1028..bdea0b7 100644 --- a/src/cpu/single_data_transfer.zig +++ b/src/cpu/single_data_transfer.zig @@ -31,19 +31,11 @@ pub fn comptimeSingleDataTransfer(comptime I: bool, comptime P: bool, comptime U } else { if (B) { // STRB - const src = @truncate(u8, cpu.r[rd]); - - bus.write8(address + 3, src); - bus.write8(address + 2, src); - bus.write8(address + 1, src); - bus.write8(address, src); + bus.write8(address, @truncate(u8, cpu.r[rd])); } else { // STR - - // FIXME: Is this right? - const src = cpu.r[rd]; - const aligned_addr = address - (address % 4); - bus.write32(aligned_addr, src); + const force_aligned = address & 0xFFFF_FFFC; + bus.write32(force_aligned, cpu.r[rd]); } }