diff --git a/Makefile b/Makefile index e6eae1d8..5c2a807b 100755 --- a/Makefile +++ b/Makefile @@ -271,6 +271,7 @@ $(BUILD_DIR)/lib/src/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 $(BUILD_DIR)/lib/src/osEepromWrite.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osEepromRead.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osSetTimer.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osVirtualToPhysical.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/%.o: MIPSISET := -mips2 $(BUILD_DIR)/lib/src/mips1/%.o: MIPSISET := -mips1 diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index 45d8dcc0..2ff7c684 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -12,9 +12,9 @@ /* Functions */ -/*u32 __osProbeTLB(void *); +u32 __osProbeTLB(void *); u32 __osDisableInt(void); -void __osRestoreInt(u32);*/ +void __osRestoreInt(u32); OSThread *__osGetCurrFaultedThread(void); #endif diff --git a/lib/asm/non_matchings/unknown_0C98F0/osVirtualToPhysical.s b/lib/asm/non_matchings/unknown_0C98F0/osVirtualToPhysical.s deleted file mode 100644 index 621b912a..00000000 --- a/lib/asm/non_matchings/unknown_0C98F0/osVirtualToPhysical.s +++ /dev/null @@ -1,38 +0,0 @@ -glabel osVirtualToPhysical -/* 0C98F0 800C8CF0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C98F4 800C8CF4 AFA40018 */ sw $a0, 0x18($sp) -/* 0C98F8 800C8CF8 8FAE0018 */ lw $t6, 0x18($sp) -/* 0C98FC 800C8CFC 3C018000 */ lui $at, 0x8000 -/* 0C9900 800C8D00 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C9904 800C8D04 01C1082B */ sltu $at, $t6, $at -/* 0C9908 800C8D08 14200007 */ bnez $at, .L800C8D28 -/* 0C990C 800C8D0C 3C01A000 */ lui $at, 0xa000 -/* 0C9910 800C8D10 01C1082B */ sltu $at, $t6, $at -/* 0C9914 800C8D14 10200004 */ beqz $at, .L800C8D28 -/* 0C9918 800C8D18 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0C991C 800C8D1C 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0C9920 800C8D20 1000000E */ b .L800C8D5C -/* 0C9924 800C8D24 01C11024 */ and $v0, $t6, $at -.L800C8D28: -/* 0C9928 800C8D28 8FAF0018 */ lw $t7, 0x18($sp) -/* 0C992C 800C8D2C 3C01A000 */ lui $at, 0xa000 -/* 0C9930 800C8D30 01E1082B */ sltu $at, $t7, $at -/* 0C9934 800C8D34 14200007 */ bnez $at, .L800C8D54 -/* 0C9938 800C8D38 3C01C000 */ lui $at, 0xc000 -/* 0C993C 800C8D3C 01E1082B */ sltu $at, $t7, $at -/* 0C9940 800C8D40 10200004 */ beqz $at, .L800C8D54 -/* 0C9944 800C8D44 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0C9948 800C8D48 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0C994C 800C8D4C 10000003 */ b .L800C8D5C -/* 0C9950 800C8D50 01E11024 */ and $v0, $t7, $at -.L800C8D54: -/* 0C9954 800C8D54 0C034D6C */ jal __osProbeTLB -/* 0C9958 800C8D58 8FA40018 */ lw $a0, 0x18($sp) -.L800C8D5C: -/* 0C995C 800C8D5C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C9960 800C8D60 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0C9964 800C8D64 03E00008 */ jr $ra -/* 0C9968 800C8D68 00000000 */ nop - -/* 0C996C 800C8D6C 00000000 */ nop - diff --git a/lib/src/mips1/al/reverb.c b/lib/src/mips1/al/reverb.c index 748f6c33..c1a17c29 100644 --- a/lib/src/mips1/al/reverb.c +++ b/lib/src/mips1/al/reverb.c @@ -5,6 +5,7 @@ #include "macros.h" #include "libultra_internal.h" #include "audio_internal.h" +#include "../../osVirtualToPhysical.h" /************ .data ************/ diff --git a/lib/src/osVirtualToPhysical.c b/lib/src/osVirtualToPhysical.c new file mode 100644 index 00000000..468de672 --- /dev/null +++ b/lib/src/osVirtualToPhysical.c @@ -0,0 +1,18 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800C8CF0 */ + +#include "types.h" +#include "macros.h" +#include "PR/R4300.h" + +u32 osVirtualToPhysical(void *addr) { + if (IS_KSEG0(addr)) { + return K0_TO_PHYS(addr); + } + else if (IS_KSEG1(addr)) { + return K1_TO_PHYS(addr); + } + else { + return __osProbeTLB(addr); + } +} diff --git a/lib/src/osVirtualToPhysical.h b/lib/src/osVirtualToPhysical.h new file mode 100644 index 00000000..de6aef77 --- /dev/null +++ b/lib/src/osVirtualToPhysical.h @@ -0,0 +1,8 @@ +#ifndef _OSVIRTUALTOPHYSICAL_H_ +#define _OSVIRTUALTOPHYSICAL_H_ + +#include "types.h" + +u32 osVirtualToPhysical(void *addr); + +#endif diff --git a/lib/src/unknown_0C98F0.c b/lib/src/unknown_0C98F0.c deleted file mode 100644 index d60b9397..00000000 --- a/lib/src/unknown_0C98F0.c +++ /dev/null @@ -1,7 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800C8CF0 */ - -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C98F0/osVirtualToPhysical.s") diff --git a/lib/src/unknown_0D29F0.c b/lib/src/unknown_0D29F0.c index d7879b13..fcd38aaa 100644 --- a/lib/src/unknown_0D29F0.c +++ b/lib/src/unknown_0D29F0.c @@ -4,6 +4,7 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" +#include "osVirtualToPhysical.h" typedef struct { diff --git a/lib/src/unknown_0D3160.c b/lib/src/unknown_0D3160.c index fccf66da..5fd3605b 100644 --- a/lib/src/unknown_0D3160.c +++ b/lib/src/unknown_0D3160.c @@ -5,6 +5,7 @@ #include "macros.h" #include "libultra_internal.h" #include "PR/rcp.h" +#include "osVirtualToPhysical.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s")