diff --git a/Makefile b/Makefile index 93747171b..367e8384f 100644 --- a/Makefile +++ b/Makefile @@ -67,8 +67,6 @@ $(B_DIR)/lib/ultra/gu/frustum.o: LOOPUNROLL := $(B_DIR)/lib/ultra/libc/ll.o: MIPSISET := -mips3 -o32 $(B_DIR)/lib/ultra/libc/llcvt.o: MIPSISET := -mips3 -o32 -$(B_DIR)/lib/ultra/libc/ll.o: OPT_LVL := -O1 -$(B_DIR)/lib/ultra/libc/llcvt.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/dpctr.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/pigetcmdq.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/sp.o: OPT_LVL := -O1 @@ -83,8 +81,11 @@ $(B_DIR)/lib/ultra/io/visetmode.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/visetxscale.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/visetyscale.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/viswapbuf.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/libc/ll.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/libc/llcvt.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/createmesgqueue.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/destroythread.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/os/gettime.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/jammesg.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/recvmesg.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/resetglobalintmask.o: OPT_LVL := -O1 diff --git a/ld/libfiles.inc b/ld/libfiles.inc index 586609fd7..1449e836f 100644 --- a/ld/libfiles.inc +++ b/ld/libfiles.inc @@ -110,7 +110,7 @@ build/ROMID/lib/ultra/io/visetspecial.o (section); \ build/ROMID/lib/ultra/io/viswapbuf.o (section); \ build/ROMID/lib/ultra/io/sptaskyield.o (section); \ - build/ROMID/lib/lib_49120.o (section); \ + build/ROMID/lib/ultra/os/gettime.o (section); \ build/ROMID/lib/ultra/os/timerintr.o (section); \ build/ROMID/lib/ultra/os/interrupt.o (section); \ build/ROMID/lib/ultra/io/vi.o (section); \ diff --git a/src/boot/reset.c b/src/boot/reset.c index 393920b8f..0f2ee3e38 100644 --- a/src/boot/reset.c +++ b/src/boot/reset.c @@ -42,11 +42,11 @@ glabel resetproc /* 2e7c: ac820040 */ sw $v0,0x40($a0) /* 2e80: 0c012338 */ jal osViBlack /* 2e84: 24040001 */ addiu $a0,$zero,0x1 -/* 2e88: 0c012448 */ jal func00049120 +/* 2e88: 0c012448 */ jal osGetTime /* 2e8c: 00000000 */ nop /* 2e90: 3c018009 */ lui $at,%hi(g_ResetSp) /* 2e94: ac22fdf0 */ sw $v0,%lo(g_ResetSp)($at) -/* 2e98: 0c012448 */ jal func00049120 +/* 2e98: 0c012448 */ jal osGetTime /* 2e9c: ac23fdf4 */ sw $v1,-0x20c($at) /* 2ea0: 3c198009 */ lui $t9,%hi(var8008fdf4) /* 2ea4: 8f39fdf4 */ lw $t9,%lo(var8008fdf4)($t9) @@ -66,7 +66,7 @@ glabel resetproc /* 2edc: 10200015 */ beqz $at,.L00002f34 /* 2ee0: 00000000 */ nop .L00002ee4: -/* 2ee4: 0c012448 */ jal func00049120 +/* 2ee4: 0c012448 */ jal osGetTime /* 2ee8: 00000000 */ nop /* 2eec: 3c0b8009 */ lui $t3,%hi(var8008fdf4) /* 2ef0: 8d6bfdf4 */ lw $t3,%lo(var8008fdf4)($t3) diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 6461b321f..18308de69 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14052,9 +14052,8 @@ __OSEventState __osEventStateTab[15] = {0}; u32 var8009c758 = 0; u32 var8009c75c = 0; OSTimer var8009c760 = {0}; -u32 var8009c780 = 0; -u32 var8009c784 = 0; -u32 var8009c788 = 0; +u64 __osCurrentTime = 0; +u32 __osBaseCounter = 0; u32 var8009c78c = 0; u32 var8009c790 = 0; u32 var8009c794 = 0; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index a1116fc8b..1f48fd77e 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -471,8 +471,8 @@ extern u32 var8009c400; extern u32 var8009c650; extern __OSEventState __osEventStateTab[15]; extern OSTimer var8009c760; -extern u32 var8009c780; -extern u32 var8009c788; +extern u64 __osCurrentTime; +extern u32 __osBaseCounter; extern u32 var8009c78c; extern OSMesg piAccessBuf; extern OSMesgQueue __osPiAccessQueue; diff --git a/src/include/lib/lib_490b0.h b/src/include/lib/lib_490b0.h deleted file mode 100644 index 004550f02..000000000 --- a/src/include/lib/lib_490b0.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_490B0_H -#define _IN_LIB_LIB_490B0_H -#include -#include "types.h" - -void osViSwapBuffer(void *framebuffer); -u64 func00049120(void); - -#endif diff --git a/src/lib/audiomgr.c b/src/lib/audiomgr.c index 658b63d22..a5c076f3a 100644 --- a/src/lib/audiomgr.c +++ b/src/lib/audiomgr.c @@ -919,7 +919,7 @@ glabel amgrMain /* 9224: 10000077 */ b .L00009404 /* 9228: 00000000 */ nop .L0000922c: -/* 922c: 0c012448 */ jal func00049120 +/* 922c: 0c012448 */ jal osGetTime /* 9230: 00000000 */ nop /* 9234: ae820000 */ sw $v0,0x0($s4) /* 9238: ae830004 */ sw $v1,0x4($s4) @@ -941,7 +941,7 @@ glabel amgrMain /* 9278: 26520001 */ addiu $s2,$s2,0x1 /* 927c: 0c0026a8 */ jal func00009aa0 /* 9280: 3c040006 */ lui $a0,0x6 -/* 9284: 0c012448 */ jal func00049120 +/* 9284: 0c012448 */ jal osGetTime /* 9288: 00000000 */ nop /* 928c: 8e8c0000 */ lw $t4,0x0($s4) /* 9290: 8e8d0004 */ lw $t5,0x4($s4) @@ -1082,7 +1082,7 @@ glabel amgrMain // // switch (*msg) { // case 4: -// var80091588 = func00049120(); +// var80091588 = osGetTime(); // func00009aa0(0x30000); // amgrHandleFrameMsg(var800915d0[var80092828 % 3], info); // func00009a08(); @@ -1090,7 +1090,7 @@ glabel amgrMain // count++; // func00009aa0(0x60000); // -// var80091590 = func00049120(); +// var80091590 = osGetTime(); // var80091570 = var80091590 - var80091588; // // // 2d8 diff --git a/src/lib/lib_49120.c b/src/lib/lib_49120.c deleted file mode 100644 index d8a48ceb8..000000000 --- a/src/lib/lib_49120.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include "constants.h" -#include "game/data/data_000000.h" -#include "game/data/data_0083d0.h" -#include "game/data/data_00e460.h" -#include "game/data/data_0160b0.h" -#include "game/data/data_01a3a0.h" -#include "game/data/data_020df0.h" -#include "game/data/data_02da90.h" -#include "gvars/gvars.h" -#include "types.h" - -GLOBAL_ASM( -glabel func00049120 -/* 49120: 27bdffc8 */ addiu $sp,$sp,-56 -/* 49124: afbf001c */ sw $ra,0x1c($sp) -/* 49128: 0c01256c */ jal __osDisableInt -/* 4912c: afb00018 */ sw $s0,0x18($sp) -/* 49130: 0c012144 */ jal osGetCount -/* 49134: 00408025 */ or $s0,$v0,$zero -/* 49138: afa20034 */ sw $v0,0x34($sp) -/* 4913c: 3c0f800a */ lui $t7,%hi(var8009c788) -/* 49140: 8defc788 */ lw $t7,%lo(var8009c788)($t7) -/* 49144: 8fae0034 */ lw $t6,0x34($sp) -/* 49148: 3c08800a */ lui $t0,%hi(var8009c780) -/* 4914c: 3c09800a */ lui $t1,%hi(var8009c784) -/* 49150: 8d29c784 */ lw $t1,%lo(var8009c784)($t1) -/* 49154: 8d08c780 */ lw $t0,%lo(var8009c780)($t0) -/* 49158: 01cfc023 */ subu $t8,$t6,$t7 -/* 4915c: afb80030 */ sw $t8,0x30($sp) -/* 49160: 02002025 */ or $a0,$s0,$zero -/* 49164: afa9002c */ sw $t1,0x2c($sp) -/* 49168: 0c012588 */ jal __osRestoreInt -/* 4916c: afa80028 */ sw $t0,0x28($sp) -/* 49170: 8fb90030 */ lw $t9,0x30($sp) -/* 49174: 8fad002c */ lw $t5,0x2c($sp) -/* 49178: 8fbf001c */ lw $ra,0x1c($sp) -/* 4917c: 03205825 */ or $t3,$t9,$zero -/* 49180: 016d1821 */ addu $v1,$t3,$t5 -/* 49184: 8fac0028 */ lw $t4,0x28($sp) -/* 49188: 240a0000 */ addiu $t2,$zero,0x0 -/* 4918c: 006d082b */ sltu $at,$v1,$t5 -/* 49190: 002a1021 */ addu $v0,$at,$t2 -/* 49194: 8fb00018 */ lw $s0,0x18($sp) -/* 49198: 27bd0038 */ addiu $sp,$sp,0x38 -/* 4919c: 03e00008 */ jr $ra -/* 491a0: 004c1021 */ addu $v0,$v0,$t4 -/* 491a4: 00000000 */ nop -/* 491a8: 00000000 */ nop -/* 491ac: 00000000 */ nop -); diff --git a/src/lib/ultra/io/controller.c b/src/lib/ultra/io/controller.c index 1ee046e18..dce32d863 100644 --- a/src/lib/ultra/io/controller.c +++ b/src/lib/ultra/io/controller.c @@ -16,7 +16,7 @@ glabel osContInit .L0004a9ac: /* 4a9ac: 240f0001 */ addiu $t7,$zero,0x1 /* 4a9b0: 3c018006 */ lui $at,%hi(__osContInitialized) -/* 4a9b4: 0c012448 */ jal func00049120 +/* 4a9b4: 0c012448 */ jal osGetTime /* 4a9b8: ac2f0960 */ sw $t7,%lo(__osContInitialized)($at) /* 4a9bc: afa20060 */ sw $v0,0x60($sp) /* 4a9c0: 8fb80060 */ lw $t8,0x60($sp) diff --git a/src/lib/ultra/io/vimgr.c b/src/lib/ultra/io/vimgr.c index d6c4b9ea6..bf2ac7e82 100644 --- a/src/lib/ultra/io/vimgr.c +++ b/src/lib/ultra/io/vimgr.c @@ -127,10 +127,10 @@ glabel viMgrMain /* 3220: a4230290 */ sh $v1,%lo(var80090290)($at) .L00003224: /* 3224: 3c13800a */ lui $s3,%hi(var8009c78c) -/* 3228: 3c12800a */ lui $s2,%hi(var8009c788) -/* 322c: 3c11800a */ lui $s1,%hi(var8009c780) -/* 3230: 2631c780 */ addiu $s1,$s1,%lo(var8009c780) -/* 3234: 2652c788 */ addiu $s2,$s2,%lo(var8009c788) +/* 3228: 3c12800a */ lui $s2,%hi(__osBaseCounter) +/* 322c: 3c11800a */ lui $s1,%hi(__osCurrentTime) +/* 3230: 2631c780 */ addiu $s1,$s1,%lo(__osCurrentTime) +/* 3234: 2652c788 */ addiu $s2,$s2,%lo(__osBaseCounter) /* 3238: 2673c78c */ addiu $s3,$s3,%lo(var8009c78c) /* 323c: 2415000d */ addiu $s5,$zero,0xd /* 3240: 27b40044 */ addiu $s4,$sp,0x44 diff --git a/src/lib/ultra/os/gettime.c b/src/lib/ultra/os/gettime.c new file mode 100644 index 000000000..7abda6726 --- /dev/null +++ b/src/lib/ultra/os/gettime.c @@ -0,0 +1,21 @@ +#include +#include "game/data/data_000000.h" +#include "gvars/gvars.h" + +OSTime osGetTime() +{ + u32 tmptime; + u32 elapseCount; + OSTime currentCount; + register u32 saveMask; + + saveMask = __osDisableInt(); + + tmptime = osGetCount(); + elapseCount = tmptime - __osBaseCounter; + currentCount = __osCurrentTime; + + __osRestoreInt(saveMask); + + return currentCount + elapseCount; +} diff --git a/src/lib/ultra/os/timerintr.c b/src/lib/ultra/os/timerintr.c index 6d5baa4ed..119b0e62a 100644 --- a/src/lib/ultra/os/timerintr.c +++ b/src/lib/ultra/os/timerintr.c @@ -2,15 +2,15 @@ GLOBAL_ASM( glabel __osTimerServicesInit -/* 491b0: 3c01800a */ lui $at,%hi(var8009c784) +/* 491b0: 3c01800a */ lui $at,%hi(__osCurrentTime+0x4) /* 491b4: 240e0000 */ addiu $t6,$zero,0x0 /* 491b8: 240f0000 */ addiu $t7,$zero,0x0 -/* 491bc: ac2fc784 */ sw $t7,%lo(var8009c784)($at) +/* 491bc: ac2fc784 */ sw $t7,%lo(__osCurrentTime+0x4)($at) /* 491c0: ac2ec780 */ sw $t6,-0x3880($at) -/* 491c4: 3c01800a */ lui $at,%hi(var8009c788) +/* 491c4: 3c01800a */ lui $at,%hi(__osBaseCounter) /* 491c8: 3c188006 */ lui $t8,%hi(__osTimerList) /* 491cc: 8f1808a0 */ lw $t8,%lo(__osTimerList)($t8) -/* 491d0: ac20c788 */ sw $zero,%lo(var8009c788)($at) +/* 491d0: ac20c788 */ sw $zero,%lo(__osBaseCounter)($at) /* 491d4: 3c01800a */ lui $at,%hi(var8009c78c) /* 491d8: ac20c78c */ sw $zero,%lo(var8009c78c)($at) /* 491dc: 3c198006 */ lui $t9,%hi(__osTimerList)