ref: f448fe6109884566e820142742ea7be8b52fb1c5
parent: 468ee688e68aaac0da90eef8082bb092d305b1e0
author: allkern <aurealinbox@gmail.com>
date: Sun Apr 21 08:44:55 EDT 2024
Fix CPU typo
--- a/psx/cpu.c
+++ b/psx/cpu.c
@@ -636,8 +636,7 @@
DO_PENDING_LOAD;
uint32_t addr = s + IMM16S;
- uint32_t aligned_addr = addr & 0xFFFFFFFC;
- uint32_t aligned_load = r3000_read32(cpu, aligned_addr);
+ uint32_t value = psx_bus_read32(cpu->bus, addr & 0xfffffffc);
if (rt == cpu->load_d)
t = cpu->load_v;
@@ -644,30 +643,10 @@
int shift = (int)((addr & 0x3) << 3);
uint32_t mask = (uint32_t)0x00FFFFFF >> shift;
- uint32_t value = (t & mask) | (aligned_load << (24 - shift));
+ uint32_t value = (t & mask) | (value << (24 - shift));
cpu->load_d = rt;
cpu->load_v = value;
-
- // uint32_t addr = cpu->r[S] + IMM16S;
-
- // uint32_t aligned = psx_bus_read32(cpu->bus, addr & ~0x3);
-
- // printf("aligned=%08x load_v=%08x addr=%08x prev=%08x\n",
- // aligned,
- // cpu->load_v,
- // addr,
- // psx_bus_read32(cpu->bus, addr + 1)
- // );
-
- // switch (addr & 0x3) {
- // case 3: cpu->load_v = (cpu->load_v & 0x00ffffff) | (aligned << 24); break;
- // case 2: cpu->load_v = (cpu->load_v & 0x0000ffff) | (aligned << 16); break;
- // case 1: cpu->load_v = (cpu->load_v & 0x000000ff) | (aligned << 8 ); break;
- // case 0: cpu->load_v = aligned ; break;
- // }
-
- // cpu->load_d = T;
}
void psx_cpu_i_lw(psx_cpu_t* cpu) {
@@ -723,8 +702,7 @@
DO_PENDING_LOAD;
uint32_t addr = s + IMM16S;
- uint32_t aligned_addr = addr & 0xFFFFFFFC;
- uint32_t aligned_load = r3000_read32(cpu, aligned_addr);
+ uint32_t value = psx_bus_read32(cpu->bus, addr & 0xfffffffc);
if (rt == cpu->load_d)
t = cpu->load_v;
@@ -731,23 +709,10 @@
int shift = (int)((addr & 0x3) << 3);
uint32_t mask = 0xFFFFFF00 << (24 - shift);
- uint32_t value = (t & mask) | (aligned_load >> shift);
+ uint32_t value = (t & mask) | (value >> shift);
cpu->load_d = rt;
cpu->load_v = value;
-
- // uint32_t addr = cpu->r[S] + IMM16S;
-
- // uint32_t aligned = psx_bus_read32(cpu->bus, addr & ~0x3);
-
- // switch (addr & 0x3) {
- // case 0: cpu->load_v = aligned ; break;
- // case 1: cpu->load_v = (cpu->load_v & 0xff000000) | (aligned >> 8 ); break;
- // case 2: cpu->load_v = (cpu->load_v & 0xffff0000) | (aligned >> 16); break;
- // case 3: cpu->load_v = (cpu->load_v & 0xffffff00) | (aligned >> 24); break;
- // }
-
- // cpu->load_d = T;
}
void psx_cpu_i_sb(psx_cpu_t* cpu) {
@@ -799,7 +764,7 @@
DO_PENDING_LOAD;
uint32_t addr = s + IMM16S;
- uint32_t aligned = addr & ~0x3;
+ uint32_t aligned = addr & 0xfffffffc;
uint32_t v = psx_bus_read32(cpu->bus, aligned);
switch (addr & 0x3) {
@@ -843,7 +808,7 @@
DO_PENDING_LOAD;
uint32_t addr = s + IMM16S;
- uint32_t aligned = addr & ~0x3;
+ uint32_t aligned = addr & 0xfffffffc;
uint32_t v = psx_bus_read32(cpu->bus, aligned);
switch (addr & 0x3) {
@@ -2209,4 +2174,4 @@
#undef DEBUG_ALL
#undef SE8
-#undef SE16
\ No newline at end of file
+#undef SE16
--
⑨