Skip to content

Commit cb65197

Browse files
authored
Merge pull request #1946 from nicolasnoble/pcsx-io-fixes
Fixing accesses to the pcsx IO system.
2 parents b2066c7 + fca66d1 commit cb65197

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

src/mips/common/hardware/pcsxhw.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,28 @@ static __inline__ void pcsx_initMsan() { *((volatile char* const)0x1f802089) = 0
3939
static __inline__ void pcsx_resetMsan() { *((volatile char* const)0x1f802089) = 1; }
4040
static __inline__ void* pcsx_msanAlloc(uint32_t size) {
4141
register uint32_t a0 asm("a0") = size;
42-
return *((void* volatile* const)0x1f80208c);
42+
void* ret;
43+
__asm__ volatile("lw %0, 0x208c(%1)" : "=r"(ret) : "r"(0x1f800000), "r"(a0));
44+
return ret;
4345
}
4446
static __inline__ void pcsx_msanFree(void* ptr) { *((void* volatile* const)0x1f80208c) = ptr; }
4547
static __inline__ void* pcsx_msanRealloc(void* ptr, uint32_t size) {
4648
register void* a0 asm("a0") = ptr;
4749
register uint32_t a1 asm("a1") = size;
48-
return *((void* volatile* const)0x1f802090);
50+
void* ret;
51+
__asm__ volatile("lw %0, 0x2090(%1)" : "=r"(ret) : "r"(0x1f800000), "r"(a0), "r"(a1));
52+
return ret;
4953
}
5054
static __inline__ void pcsx_msanSetChainPtr(void* headerAddr, void* ptrToNext, uint32_t wordCount) {
5155
register void* a0 asm("a0") = ptrToNext;
5256
register uint32_t a1 asm("a1") = wordCount;
53-
*((void* volatile* const)0x1f802094) = headerAddr;
57+
__asm__ volatile("sw %0, 0x2094(%1)" : : "r"(a0), "r"(0x1f800000), "r"(a1));
5458
}
5559
static __inline__ void* pcsx_msanGetChainPtr(void* headerAddr) {
5660
register void* a0 asm("a0") = headerAddr;
57-
return *((void* volatile* const)0x1f802094);
61+
void* ret;
62+
__asm__ volatile("lw %0, 0x2094(%1)" : "=r"(ret) : "r"(0x1f800000), "r"(a0));
63+
return ret;
5864
}
5965

6066
static __inline__ int pcsx_present() { return *((volatile uint32_t* const)0x1f802080) == 0x58534350; }

src/mips/psyqo/examples/pcsxlua/pcsxlua.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ PCSXLuaScene pcsxLuaScene;
6262
void pcsxRegisterVariable(void* address, const char* name) {
6363
register void* a0 asm("a0") = address;
6464
register const char* a1 asm("a1") = name;
65-
__asm__ volatile("" : : "r"(a0), "r"(a1));
66-
*((volatile uint8_t* const)0x1f802081) = 255;
65+
__asm__ volatile("sw %0, 0x2081(%1)" : : "r"(255), "r"(0x1f800000), "r"(a0), "r"(a1));
6766
}
6867

6968
} // namespace

0 commit comments

Comments
 (0)