Fixed osSetTimer to match

This commit is contained in:
Ryan Myers
2021-09-22 10:47:45 -04:00
parent 064eb841c9
commit 3578c5649a
7 changed files with 47 additions and 110 deletions
+1 -1
View File
@@ -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
@@ -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
@@ -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)
@@ -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
+3 -4
View File
@@ -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;
+12 -12
View File
@@ -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
+13 -13
View File
@@ -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;