mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp.git
synced 2024-12-28 06:21:31 +00:00
23 lines
677 B
C++
23 lines
677 B
C++
|
#include "ultra64.h"
|
||
|
|
||
|
#define K0BASE 0x80000000
|
||
|
#define K1BASE 0xA0000000
|
||
|
#define K2BASE 0xC0000000
|
||
|
#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE)
|
||
|
#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE)
|
||
|
#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg0 to physical */
|
||
|
#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg1 to physical */
|
||
|
|
||
|
u32 osVirtualToPhysical(PTR(void) addr) {
|
||
|
uintptr_t addr_val = (uintptr_t)addr;
|
||
|
if (IS_KSEG0(addr_val)) {
|
||
|
return K0_TO_PHYS(addr_val);
|
||
|
} else if (IS_KSEG1(addr_val)) {
|
||
|
return K1_TO_PHYS(addr_val);
|
||
|
} else {
|
||
|
// TODO handle TLB mappings
|
||
|
return (u32)addr_val;
|
||
|
}
|
||
|
}
|
||
|
|