diff --git a/include/PR/os_time.h b/include/PR/os_time.h index 328e6015..d6b9d923 100644 --- a/include/PR/os_time.h +++ b/include/PR/os_time.h @@ -22,6 +22,6 @@ typedef u64 OSTime; OSTime osGetTime(void); void osSetTime(OSTime time); -u32 osSetTimer(OSTimer *, OSTime, u64, OSMesgQueue *, OSMesg); +s32 osSetTimer(OSTimer *, OSTime, u64, OSMesgQueue *, OSMesg); #endif diff --git a/lib/asm/non_matchings/unknown_0D3020/__osInsertTimer.s b/lib/asm/non_matchings/unknown_0D3020/__osInsertTimer.s index 3969df3a..21364b12 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osInsertTimer.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osInsertTimer.s @@ -3,8 +3,8 @@ glabel __osInsertTimer /* 0D5D3C 800D513C AFBF0014 */ sw $ra, 0x14($sp) /* 0D5D40 800D5140 0C034958 */ jal __osDisableInt /* 0D5D44 800D5144 AFA40038 */ sw $a0, 0x38($sp) -/* 0D5D48 800D5148 3C0E800E */ lui $t6, %hi(D_800E4910) # $t6, 0x800e -/* 0D5D4C 800D514C 8DCE4910 */ lw $t6, %lo(D_800E4910)($t6) +/* 0D5D48 800D5148 3C0E800E */ lui $t6, %hi(__osTimerList) # $t6, 0x800e +/* 0D5D4C 800D514C 8DCE4910 */ lw $t6, %lo(__osTimerList)($t6) /* 0D5D50 800D5150 AFA20024 */ sw $v0, 0x24($sp) /* 0D5D54 800D5154 8FB80038 */ lw $t8, 0x38($sp) /* 0D5D58 800D5158 8DCF0000 */ lw $t7, ($t6) @@ -31,7 +31,7 @@ glabel __osInsertTimer /* 0D5DA8 800D51A8 8F2C0000 */ lw $t4, ($t9) /* 0D5DAC 800D51AC 8F0F0014 */ lw $t7, 0x14($t8) /* 0D5DB0 800D51B0 8F0E0010 */ lw $t6, 0x10($t8) -/* 0D5DB4 800D51B4 3C18800E */ lui $t8, %hi(D_800E4910) # $t8, 0x800e +/* 0D5DB4 800D51B4 3C18800E */ lui $t8, %hi(__osTimerList) # $t8, 0x800e /* 0D5DB8 800D51B8 01AF082B */ sltu $at, $t5, $t7 /* 0D5DBC 800D51BC 018E4023 */ subu $t0, $t4, $t6 /* 0D5DC0 800D51C0 01014023 */ subu $t0, $t0, $at @@ -39,7 +39,7 @@ glabel __osInsertTimer /* 0D5DC8 800D51C8 AF290004 */ sw $t1, 4($t9) /* 0D5DCC 800D51CC AF280000 */ sw $t0, ($t9) /* 0D5DD0 800D51D0 8FAA0034 */ lw $t2, 0x34($sp) -/* 0D5DD4 800D51D4 8F184910 */ lw $t8, %lo(D_800E4910)($t8) +/* 0D5DD4 800D51D4 8F184910 */ lw $t8, %lo(__osTimerList)($t8) /* 0D5DD8 800D51D8 8D4B0000 */ lw $t3, ($t2) /* 0D5DDC 800D51DC 1178000D */ beq $t3, $t8, .L800D5214 /* 0D5DE0 800D51E0 AFAB0034 */ sw $t3, 0x34($sp) @@ -59,10 +59,10 @@ glabel __osInsertTimer /* 0D5E14 800D5214 8FB90038 */ lw $t9, 0x38($sp) /* 0D5E18 800D5218 8FA80028 */ lw $t0, 0x28($sp) /* 0D5E1C 800D521C 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D5E20 800D5220 3C18800E */ lui $t8, %hi(D_800E4910) # $t8, 0x800e +/* 0D5E20 800D5220 3C18800E */ lui $t8, %hi(__osTimerList) # $t8, 0x800e /* 0D5E24 800D5224 AF280010 */ sw $t0, 0x10($t9) /* 0D5E28 800D5228 AF290014 */ sw $t1, 0x14($t9) -/* 0D5E2C 800D522C 8F184910 */ lw $t8, %lo(D_800E4910)($t8) +/* 0D5E2C 800D522C 8F184910 */ lw $t8, %lo(__osTimerList)($t8) /* 0D5E30 800D5230 8FAA0034 */ lw $t2, 0x34($sp) /* 0D5E34 800D5234 1158000D */ beq $t2, $t8, .L800D526C /* 0D5E38 800D5238 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/__osTimerServicesInit.s b/lib/asm/non_matchings/unknown_0D3020/__osTimerServicesInit.s index 7795e85c..65069c09 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osTimerServicesInit.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osTimerServicesInit.s @@ -5,33 +5,33 @@ glabel __osTimerServicesInit /* 0D5ACC 800D4ECC AC2FD224 */ sw $t7, %lo(D_8012D224)($at) /* 0D5AD0 800D4ED0 AC2ED220 */ sw $t6, %lo(__osCurrentTime)($at) /* 0D5AD4 800D4ED4 3C018013 */ lui $at, %hi(__osBaseCounter) # $at, 0x8013 -/* 0D5AD8 800D4ED8 3C18800E */ lui $t8, %hi(D_800E4910) # $t8, 0x800e -/* 0D5ADC 800D4EDC 8F184910 */ lw $t8, %lo(D_800E4910)($t8) +/* 0D5AD8 800D4ED8 3C18800E */ lui $t8, %hi(__osTimerList) # $t8, 0x800e +/* 0D5ADC 800D4EDC 8F184910 */ lw $t8, %lo(__osTimerList)($t8) /* 0D5AE0 800D4EE0 AC20D228 */ sw $zero, %lo(__osBaseCounter)($at) /* 0D5AE4 800D4EE4 3C018013 */ lui $at, %hi(D_8012D22C) # $at, 0x8013 /* 0D5AE8 800D4EE8 AC20D22C */ sw $zero, %lo(D_8012D22C)($at) -/* 0D5AEC 800D4EEC 3C19800E */ lui $t9, %hi(D_800E4910) # $t9, 0x800e +/* 0D5AEC 800D4EEC 3C19800E */ lui $t9, %hi(__osTimerList) # $t9, 0x800e /* 0D5AF0 800D4EF0 AF180004 */ sw $t8, 4($t8) -/* 0D5AF4 800D4EF4 8F394910 */ lw $t9, %lo(D_800E4910)($t9) -/* 0D5AF8 800D4EF8 3C09800E */ lui $t1, %hi(D_800E4910) # $t1, 0x800e +/* 0D5AF4 800D4EF4 8F394910 */ lw $t9, %lo(__osTimerList)($t9) +/* 0D5AF8 800D4EF8 3C09800E */ lui $t1, %hi(__osTimerList) # $t1, 0x800e /* 0D5AFC 800D4EFC 240A0000 */ li $t2, 0 /* 0D5B00 800D4F00 8F280004 */ lw $t0, 4($t9) /* 0D5B04 800D4F04 240B0000 */ li $t3, 0 -/* 0D5B08 800D4F08 3C0C800E */ lui $t4, %hi(D_800E4910) # $t4, 0x800e +/* 0D5B08 800D4F08 3C0C800E */ lui $t4, %hi(__osTimerList) # $t4, 0x800e /* 0D5B0C 800D4F0C AF280000 */ sw $t0, ($t9) -/* 0D5B10 800D4F10 8D294910 */ lw $t1, %lo(D_800E4910)($t1) -/* 0D5B14 800D4F14 3C0D800E */ lui $t5, %hi(D_800E4910) # $t5, 0x800e -/* 0D5B18 800D4F18 3C18800E */ lui $t8, %hi(D_800E4910) # $t8, 0x800e +/* 0D5B10 800D4F10 8D294910 */ lw $t1, %lo(__osTimerList)($t1) +/* 0D5B14 800D4F14 3C0D800E */ lui $t5, %hi(__osTimerList) # $t5, 0x800e +/* 0D5B18 800D4F18 3C18800E */ lui $t8, %hi(__osTimerList) # $t8, 0x800e /* 0D5B1C 800D4F1C AD2A0010 */ sw $t2, 0x10($t1) /* 0D5B20 800D4F20 AD2B0014 */ sw $t3, 0x14($t1) -/* 0D5B24 800D4F24 8D8C4910 */ lw $t4, %lo(D_800E4910)($t4) +/* 0D5B24 800D4F24 8D8C4910 */ lw $t4, %lo(__osTimerList)($t4) /* 0D5B28 800D4F28 8D8E0010 */ lw $t6, 0x10($t4) /* 0D5B2C 800D4F2C 8D8F0014 */ lw $t7, 0x14($t4) /* 0D5B30 800D4F30 AD8E0008 */ sw $t6, 8($t4) /* 0D5B34 800D4F34 AD8F000C */ sw $t7, 0xc($t4) -/* 0D5B38 800D4F38 8DAD4910 */ lw $t5, %lo(D_800E4910)($t5) +/* 0D5B38 800D4F38 8DAD4910 */ lw $t5, %lo(__osTimerList)($t5) /* 0D5B3C 800D4F3C ADA00018 */ sw $zero, 0x18($t5) -/* 0D5B40 800D4F40 8F184910 */ lw $t8, %lo(D_800E4910)($t8) +/* 0D5B40 800D4F40 8F184910 */ lw $t8, %lo(__osTimerList)($t8) /* 0D5B44 800D4F44 03E00008 */ jr $ra /* 0D5B48 800D4F48 AF00001C */ sw $zero, 0x1c($t8) diff --git a/lib/asm/non_matchings/unknown_0D3020/osSetTimer.s b/lib/asm/non_matchings/unknown_0D3020/osSetTimer.s deleted file mode 100644 index 4c201fa5..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/osSetTimer.s +++ /dev/null @@ -1,62 +0,0 @@ -glabel osSetTimer -/* 0D59E0 800D4DE0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D59E4 800D4DE4 AFA40020 */ sw $a0, 0x20($sp) -/* 0D59E8 800D4DE8 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D59EC 800D4DEC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D59F0 800D4DF0 AFA60028 */ sw $a2, 0x28($sp) -/* 0D59F4 800D4DF4 AFA7002C */ sw $a3, 0x2c($sp) -/* 0D59F8 800D4DF8 ADC00000 */ sw $zero, ($t6) -/* 0D59FC 800D4DFC 8FAF0020 */ lw $t7, 0x20($sp) -/* 0D5A00 800D4E00 ADE00004 */ sw $zero, 4($t7) -/* 0D5A04 800D4E04 8FA80020 */ lw $t0, 0x20($sp) -/* 0D5A08 800D4E08 8FB90034 */ lw $t9, 0x34($sp) -/* 0D5A0C 800D4E0C 8FB80030 */ lw $t8, 0x30($sp) -/* 0D5A10 800D4E10 AD19000C */ sw $t9, 0xc($t0) -/* 0D5A14 800D4E14 AD180008 */ sw $t8, 8($t0) -/* 0D5A18 800D4E18 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D5A1C 800D4E1C 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D5A20 800D4E20 15400003 */ bnez $t2, .L800D4E30 -/* 0D5A24 800D4E24 00000000 */ nop -/* 0D5A28 800D4E28 11600005 */ beqz $t3, .L800D4E40 -/* 0D5A2C 800D4E2C 00000000 */ nop -.L800D4E30: -/* 0D5A30 800D4E30 8FA90020 */ lw $t1, 0x20($sp) -/* 0D5A34 800D4E34 AD2A0010 */ sw $t2, 0x10($t1) -/* 0D5A38 800D4E38 10000006 */ b .L800D4E54 -/* 0D5A3C 800D4E3C AD2B0014 */ sw $t3, 0x14($t1) -.L800D4E40: -/* 0D5A40 800D4E40 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D5A44 800D4E44 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D5A48 800D4E48 8FAD0034 */ lw $t5, 0x34($sp) -/* 0D5A4C 800D4E4C ADCC0010 */ sw $t4, 0x10($t6) -/* 0D5A50 800D4E50 ADCD0014 */ sw $t5, 0x14($t6) -.L800D4E54: -/* 0D5A54 800D4E54 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D5A58 800D4E58 8FB80020 */ lw $t8, 0x20($sp) -/* 0D5A5C 800D4E5C AF0F0018 */ sw $t7, 0x18($t8) -/* 0D5A60 800D4E60 8FA80020 */ lw $t0, 0x20($sp) -/* 0D5A64 800D4E64 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D5A68 800D4E68 AD19001C */ sw $t9, 0x1c($t0) -/* 0D5A6C 800D4E6C 0C03544E */ jal __osInsertTimer -/* 0D5A70 800D4E70 8FA40020 */ lw $a0, 0x20($sp) -/* 0D5A74 800D4E74 3C0A800E */ lui $t2, %hi(D_800E4910) # $t2, 0x800e -/* 0D5A78 800D4E78 8D4A4910 */ lw $t2, %lo(D_800E4910)($t2) -/* 0D5A7C 800D4E7C AFA20018 */ sw $v0, 0x18($sp) -/* 0D5A80 800D4E80 AFA3001C */ sw $v1, 0x1c($sp) -/* 0D5A84 800D4E84 8FA90020 */ lw $t1, 0x20($sp) -/* 0D5A88 800D4E88 8D4B0000 */ lw $t3, ($t2) -/* 0D5A8C 800D4E8C 15690004 */ bne $t3, $t1, .L800D4EA0 -/* 0D5A90 800D4E90 00000000 */ nop -/* 0D5A94 800D4E94 8FA40018 */ lw $a0, 0x18($sp) -/* 0D5A98 800D4E98 0C035431 */ jal __osSetTimerIntr -/* 0D5A9C 800D4E9C 8FA5001C */ lw $a1, 0x1c($sp) -.L800D4EA0: -/* 0D5AA0 800D4EA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D5AA4 800D4EA4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D5AA8 800D4EA8 00001025 */ move $v0, $zero -/* 0D5AAC 800D4EAC 03E00008 */ jr $ra -/* 0D5AB0 800D4EB0 00000000 */ nop - -/* 0D5AB4 800D4EB4 00000000 */ nop -/* 0D5AB8 800D4EB8 00000000 */ nop -/* 0D5ABC 800D4EBC 00000000 */ nop diff --git a/lib/src/os/osGetTime.c b/lib/src/os/osGetTime.c index a47f3c2a..6c4bfe31 100644 --- a/lib/src/os/osGetTime.c +++ b/lib/src/os/osGetTime.c @@ -3,11 +3,10 @@ #include "libultra_internal.h" -extern OSTime __osCurrentTime;//__osCurrentTime -extern u32 __osBaseCounter; //__osBaseCounter +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; -OSTime osGetTime() -{ +OSTime osGetTime() { u32 tmptime; u32 elapseCount; OSTime currentCount; diff --git a/lib/src/os/osSetTimer.c b/lib/src/os/osSetTimer.c index 528ec225..89825280 100644 --- a/lib/src/os/osSetTimer.c +++ b/lib/src/os/osSetTimer.c @@ -2,27 +2,27 @@ /* RAM_POS: 0x800D4DE0 */ #include "macros.h" - -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osSetTimer.s") -#else #include "libultra_internal.h" -extern OSTimer *D_800E4910; +extern OSTimer *__osTimerList; +OSTime __osInsertTimer(OSTimer *t); -u32 osSetTimer(OSTimer *t, OSTime value, OSTime interval, OSMesgQueue *mq, OSMesg msg) { +s32 osSetTimer(OSTimer *t, OSTime value, OSTime interval, OSMesgQueue *mq, OSMesg msg) { OSTime time; t->next = NULL; t->prev = NULL; t->interval = interval; - if(value != 0) t->remaining = value; - else t->remaining = interval; + + if(value != 0) + t->remaining = value; + else + t->remaining = interval; t->mq = mq; t->msg = msg; - time = (OSTime) __osInsertTimer(t); - if(D_800E4910->next == t) { + time = __osInsertTimer(t); + + if(__osTimerList->next == t) __osSetTimerIntr(time); - } + return 0; } -#endif diff --git a/lib/src/os/osTimer.c b/lib/src/os/osTimer.c index c1859350..9c42915c 100644 --- a/lib/src/os/osTimer.c +++ b/lib/src/os/osTimer.c @@ -5,7 +5,7 @@ #include "libultra_internal.h" extern OSTimer D_8012D200; -OSTimer *D_800E4910 = &D_8012D200; +OSTimer *__osTimerList = &D_8012D200; extern OSTime __osCurrentTime; extern u32 __osBaseCounter; @@ -24,12 +24,12 @@ void __osTimerServicesInit(void) __osCurrentTime = 0; __osBaseCounter = 0; D_8012D22C = 0; - D_800E4910->prev = D_800E4910; - D_800E4910->next = D_800E4910->prev; - D_800E4910->remaining = 0; - D_800E4910->interval = D_800E4910->remaining; - D_800E4910->mq = NULL; - D_800E4910->msg = 0; + __osTimerList->prev = __osTimerList; + __osTimerList->next = __osTimerList->prev; + __osTimerList->remaining = 0; + __osTimerList->interval = __osTimerList->remaining; + __osTimerList->mq = NULL; + __osTimerList->msg = 0; } #endif @@ -38,11 +38,11 @@ void __osTimerInterrupt(void) { u32 count; u32 elapsed_cycles; - if (D_800E4910->next == D_800E4910) + if (__osTimerList->next == __osTimerList) return; while (1) { - t = D_800E4910->next; - if (t == D_800E4910){ + t = __osTimerList->next; + if (t == __osTimerList){ __osSetCompare(0); D_8012D230 = 0; break; @@ -90,13 +90,13 @@ OSTime __osInsertTimer(OSTimer *t) { OSTime tim; u32 savedMask; savedMask = __osDisableInt(); - for (timep = D_800E4910->next, tim = t->remaining; - timep != D_800E4910 && tim > timep->remaining; + for (timep = __osTimerList->next, tim = t->remaining; + timep != __osTimerList && tim > timep->remaining; tim -= timep->remaining, timep = timep->next) { ; } t->remaining = tim; - if (timep != D_800E4910) + if (timep != __osTimerList) timep->remaining -= tim; t->next = timep; t->prev = timep->prev;