mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-05-23 04:36:22 -05:00
os_alarm
This commit is contained in:
parent
138adb2033
commit
72ffb45b68
|
|
@ -26,7 +26,7 @@ _0221BA0C:
|
|||
blt _0221BA0C
|
||||
bl sub_02034D8C
|
||||
bl OS_InitTick
|
||||
bl sub_020D365C
|
||||
bl OS_InitAlarm
|
||||
bl OS_DisableInterrupts
|
||||
add r5, r0, #0
|
||||
mov r0, #2
|
||||
|
|
|
|||
|
|
@ -52,10 +52,12 @@ NATIVE_TOOLS := \
|
|||
TOOLDIRS := $(foreach tool,$(NATIVE_TOOLS),$(dir $(tool)))
|
||||
|
||||
# Directories
|
||||
NITROSDK_SRC_SUBDIRS := os
|
||||
|
||||
LIB_SUBDIRS := cw NitroSDK NitroSystem NitroDWC NitroWiFi libCPS libVCT
|
||||
SRC_SUBDIR := src
|
||||
ASM_SUBDIR := asm
|
||||
LIB_SRC_SUBDIR := lib/src $(LIB_SUBDIRS:%=lib/%/src)
|
||||
LIB_SRC_SUBDIR := lib/src $(LIB_SUBDIRS:%=lib/%/src) $(NITROSDK_SRC_SUBDIRS:%=lib/NitroSDK/src/%)
|
||||
LIB_ASM_SUBDIR := lib/asm $(LIB_SUBDIRS:%=lib/%/asm)
|
||||
ALL_SUBDIRS := $(SRC_SUBDIR) $(ASM_SUBDIR) $(LIB_SRC_SUBDIR) $(LIB_ASM_SUBDIR)
|
||||
|
||||
|
|
|
|||
|
|
@ -29248,8 +29248,8 @@
|
|||
.public OS_GetTick
|
||||
.public OS_GetTickLo
|
||||
.public OS_SetTick
|
||||
.public sub_020D365C
|
||||
.public sub_020D369C
|
||||
.public OS_InitAlarm
|
||||
.public OS_IsAlarmAvailable
|
||||
.public OS_CreateAlarm
|
||||
.public OS_SetAlarm
|
||||
.public OS_CancelAlarm
|
||||
|
|
|
|||
|
|
@ -5252,7 +5252,7 @@ ov13_0222B558: ; 0x0222B558
|
|||
bne _0222B590
|
||||
bl OS_Terminate
|
||||
_0222B590:
|
||||
bl sub_020D369C
|
||||
bl OS_IsAlarmAvailable
|
||||
cmp r0, #0
|
||||
bne _0222B5A0
|
||||
bl OS_Terminate
|
||||
|
|
|
|||
182
lib/NitroSDK/src/os/os_alarm.c
Normal file
182
lib/NitroSDK/src/os/os_alarm.c
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
#include <nitro.h>
|
||||
|
||||
void OSi_AlarmHandler(void *arg);
|
||||
void OSi_ArrangeTimer(void);
|
||||
|
||||
#define OSi_ALARM_TIMER OS_TIMER_1
|
||||
#define OSi_ALARM_TIMERCONTROL ((1 << REG_OS_TM1CNT_H_E_SHIFT) | (1 << REG_OS_TM1CNT_H_I_SHIFT) | OS_TIMER_PRESCALER_64)
|
||||
#define OSi_ALARM_IE_TIMER OS_IE_TIMER1
|
||||
|
||||
u16 OSi_UseAlarm = 0;
|
||||
struct OSiAlarmQueue OSi_AlarmQueue;
|
||||
|
||||
void OSi_SetTimer(OSAlarm *alarm) {
|
||||
s64 delta;
|
||||
OSTick tick = OS_GetTick();
|
||||
u16 timerCount;
|
||||
|
||||
OS_SetTimerControl(OSi_ALARM_TIMER, 0);
|
||||
delta = alarm->fire - tick;
|
||||
OSi_EnterTimerCallback(OSi_ALARM_TIMER, OSi_AlarmHandler, NULL);
|
||||
if (delta < 0) {
|
||||
timerCount = (u16)~1;
|
||||
} else if (delta < 0x10000) {
|
||||
timerCount = (u16)~delta;
|
||||
} else {
|
||||
timerCount = 0;
|
||||
}
|
||||
OS_SetTimerCount(OSi_ALARM_TIMER, timerCount);
|
||||
OS_SetTimerControl(OSi_ALARM_TIMER, OSi_ALARM_TIMERCONTROL);
|
||||
OS_EnableIrqMask(OSi_ALARM_IE_TIMER);
|
||||
}
|
||||
|
||||
void OS_InitAlarm(void) {
|
||||
if (OSi_UseAlarm) {
|
||||
return;
|
||||
}
|
||||
OSi_UseAlarm = 1;
|
||||
OSi_SetTimerReserved(OSi_ALARM_TIMER);
|
||||
OSi_AlarmQueue.head = NULL;
|
||||
OSi_AlarmQueue.tail = NULL;
|
||||
OS_DisableIrqMask(OSi_ALARM_IE_TIMER);
|
||||
}
|
||||
|
||||
BOOL OS_IsAlarmAvailable(void) {
|
||||
return OSi_UseAlarm;
|
||||
}
|
||||
|
||||
void OS_CreateAlarm(OSAlarm *alarm) {
|
||||
alarm->handler = NULL;
|
||||
alarm->tag = 0;
|
||||
}
|
||||
|
||||
void OSi_InsertAlarm(OSAlarm *alarm, OSTick fire) {
|
||||
OSAlarm *prev;
|
||||
OSAlarm *next;
|
||||
|
||||
if (alarm->period > 0) {
|
||||
OSTick tick = OS_GetTick();
|
||||
fire = alarm->start;
|
||||
if (alarm->start < tick) {
|
||||
fire += alarm->period * ((tick - alarm->start) / alarm->period + 1);
|
||||
}
|
||||
}
|
||||
alarm->fire = fire;
|
||||
for (next = OSi_AlarmQueue.head; next; next = next->next) {
|
||||
if ((s64)(fire - next->fire) >= 0) { // cast required to match
|
||||
continue;
|
||||
}
|
||||
alarm->prev = next->prev;
|
||||
next->prev = alarm;
|
||||
alarm->next = next;
|
||||
prev = alarm->prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
} else {
|
||||
OSi_AlarmQueue.head = alarm;
|
||||
OSi_SetTimer(alarm);
|
||||
}
|
||||
return;
|
||||
}
|
||||
alarm->next = NULL;
|
||||
prev = OSi_AlarmQueue.tail;
|
||||
OSi_AlarmQueue.tail = alarm;
|
||||
alarm->prev = prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
} else {
|
||||
OSi_AlarmQueue.head = OSi_AlarmQueue.tail = alarm; // why set .tail twice?
|
||||
OSi_SetTimer(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg) {
|
||||
OSIntrMode enabled;
|
||||
|
||||
if (alarm == NULL || alarm->handler != NULL) {
|
||||
OS_Panic("");
|
||||
}
|
||||
|
||||
enabled = OS_DisableInterrupts();
|
||||
alarm->period = 0;
|
||||
alarm->handler = handler;
|
||||
alarm->arg = arg;
|
||||
OSi_InsertAlarm(alarm, tick + OS_GetTick());
|
||||
OS_RestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
void OS_CancelAlarm(OSAlarm *alarm) {
|
||||
OSAlarm *next;
|
||||
OSIntrMode enabled;
|
||||
|
||||
enabled = OS_DisableInterrupts();
|
||||
if (alarm->handler == NULL) {
|
||||
OS_RestoreInterrupts(enabled);
|
||||
return;
|
||||
}
|
||||
next = alarm->next;
|
||||
if (next == NULL) {
|
||||
OSi_AlarmQueue.tail = alarm->prev;
|
||||
} else {
|
||||
next->prev = alarm->prev;
|
||||
}
|
||||
if (alarm->prev != NULL) {
|
||||
alarm->prev->next = next;
|
||||
} else {
|
||||
OSi_AlarmQueue.head = next;
|
||||
if (next != NULL) {
|
||||
OSi_SetTimer(next);
|
||||
}
|
||||
}
|
||||
alarm->handler = NULL;
|
||||
alarm->period = 0;
|
||||
OS_RestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
asm void OSi_AlarmHandler(void *arg) {
|
||||
stmdb sp!, {r0, lr}
|
||||
bl OSi_ArrangeTimer
|
||||
ldmia sp!, {r0, lr}
|
||||
bx lr
|
||||
}
|
||||
|
||||
void OSi_ArrangeTimer(void) {
|
||||
OSTick tick;
|
||||
OSAlarm *alarm;
|
||||
OSAlarm *next;
|
||||
OSAlarmHandler handler;
|
||||
|
||||
OS_SetTimerControl(OSi_ALARM_TIMER, 0);
|
||||
OS_DisableIrqMask(OSi_ALARM_IE_TIMER);
|
||||
OS_SetIrqCheckFlag(OSi_ALARM_IE_TIMER);
|
||||
tick = OS_GetTick();
|
||||
alarm = OSi_AlarmQueue.head;
|
||||
if (alarm == NULL) {
|
||||
return;
|
||||
}
|
||||
if (tick < alarm->fire) {
|
||||
OSi_SetTimer(alarm);
|
||||
return;
|
||||
}
|
||||
next = alarm->next;
|
||||
OSi_AlarmQueue.head = next;
|
||||
if (next == NULL) {
|
||||
OSi_AlarmQueue.tail = NULL;
|
||||
} else {
|
||||
next->prev = NULL;
|
||||
}
|
||||
handler = alarm->handler;
|
||||
if (alarm->period == 0) {
|
||||
alarm->handler = NULL;
|
||||
}
|
||||
if (handler) {
|
||||
handler(alarm->arg);
|
||||
}
|
||||
if (alarm->period > 0) {
|
||||
alarm->handler = handler;
|
||||
OSi_InsertAlarm(alarm, 0);
|
||||
}
|
||||
if (OSi_AlarmQueue.head) {
|
||||
OSi_SetTimer(OSi_AlarmQueue.head);
|
||||
}
|
||||
}
|
||||
320
lib/asm/nitro.s
320
lib/asm/nitro.s
|
|
@ -70,326 +70,14 @@
|
|||
.public OS_DisableProtectionUnit
|
||||
.public OS_SetDPermissionsForProtectionRegion
|
||||
.public OSi_SetTimerReserved
|
||||
.public OSi_SetTimer
|
||||
.public OSi_InsertAlarm
|
||||
|
||||
_021E19E4:
|
||||
.space 0x39AC
|
||||
_021E19F0:
|
||||
.space 0x39A0
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_020D35D0
|
||||
sub_020D35D0: ; 0x020D35D0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r0
|
||||
bl OS_GetTick
|
||||
ldr r3, _020D364C ; =0x04000106
|
||||
mov r2, #0
|
||||
strh r2, [r3]
|
||||
ldr ip, [r4, #0xc]
|
||||
ldr r3, [r4, #0x10]
|
||||
subs r5, ip, r0
|
||||
sbc r4, r3, r1
|
||||
ldr r1, _020D3650 ; =sub_020D38DC
|
||||
mov r0, #1
|
||||
bl OSi_EnterTimerCallback
|
||||
subs r0, r5, #0
|
||||
mov r3, #0
|
||||
sbcs r0, r4, #0
|
||||
ldrlt r3, _020D3654 ; =0x0000FFFE
|
||||
blt _020D3630
|
||||
subs r0, r5, #0x10000
|
||||
sbcs r0, r4, r3
|
||||
bge _020D3630
|
||||
mvn r0, r5
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r3, r0, lsr #0x10
|
||||
_020D3630:
|
||||
ldr r2, _020D3658 ; =0x04000104
|
||||
mov r1, #0xc1
|
||||
strh r3, [r2]
|
||||
mov r0, #0x10
|
||||
strh r1, [r2, #2]
|
||||
bl OS_EnableIrqMask
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_020D364C: .word 0x04000106
|
||||
_020D3650: .word sub_020D38DC
|
||||
_020D3654: .word 0x0000FFFE
|
||||
_020D3658: .word 0x04000104
|
||||
arm_func_end sub_020D35D0
|
||||
|
||||
arm_func_start sub_020D365C
|
||||
sub_020D365C: ; 0x020D365C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r1, _020D3698 ; =0x021E19E4
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, pc}
|
||||
mov r0, #1
|
||||
strh r0, [r1]
|
||||
bl OSi_SetTimerReserved
|
||||
ldr r1, _020D3698 ; =0x021E19E4
|
||||
mov r2, #0
|
||||
str r2, [r1, #4]
|
||||
mov r0, #0x10
|
||||
str r2, [r1, #8]
|
||||
bl OS_DisableIrqMask
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_020D3698: .word 0x021E19E4
|
||||
arm_func_end sub_020D365C
|
||||
|
||||
arm_func_start sub_020D369C
|
||||
sub_020D369C: ; 0x020D369C
|
||||
ldr r0, _020D36A8 ; =0x021E19E4
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020D36A8: .word 0x021E19E4
|
||||
arm_func_end sub_020D369C
|
||||
|
||||
arm_func_start OS_CreateAlarm
|
||||
OS_CreateAlarm: ; 0x020D36AC
|
||||
mov r1, #0
|
||||
str r1, [r0]
|
||||
str r1, [r0, #8]
|
||||
bx lr
|
||||
arm_func_end OS_CreateAlarm
|
||||
|
||||
arm_func_start sub_020D36BC
|
||||
sub_020D36BC: ; 0x020D36BC
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
ldr r0, [r8, #0x20]
|
||||
ldr r3, [r8, #0x1c]
|
||||
cmp r0, #0
|
||||
mov r7, r1
|
||||
mov r6, r2
|
||||
cmpeq r3, #0
|
||||
beq _020D3730
|
||||
bl OS_GetTick
|
||||
ldr r6, [r8, #0x28]
|
||||
ldr r7, [r8, #0x24]
|
||||
cmp r6, r1
|
||||
cmpeq r7, r0
|
||||
bhs _020D3730
|
||||
ldr r5, [r8, #0x1c]
|
||||
ldr r4, [r8, #0x20]
|
||||
subs r0, r0, r7
|
||||
mov r2, r5
|
||||
mov r3, r4
|
||||
sbc r1, r1, r6
|
||||
bl _ll_udiv
|
||||
adds r2, r0, #1
|
||||
adc r0, r1, #0
|
||||
umull r3, r1, r5, r2
|
||||
mla r1, r5, r0, r1
|
||||
mla r1, r4, r2, r1
|
||||
adds r7, r7, r3
|
||||
adc r6, r6, r1
|
||||
_020D3730:
|
||||
str r7, [r8, #0xc]
|
||||
ldr r0, _020D37E4 ; =0x021E19E4
|
||||
str r6, [r8, #0x10]
|
||||
ldr r5, [r0, #4]
|
||||
cmp r5, #0
|
||||
beq _020D37AC
|
||||
mov r2, #0
|
||||
mov r1, r2
|
||||
_020D3750:
|
||||
ldr r3, [r5, #0xc]
|
||||
ldr r0, [r5, #0x10]
|
||||
subs r4, r7, r3
|
||||
sbc r3, r6, r0
|
||||
subs r0, r4, r1
|
||||
sbcs r0, r3, r2
|
||||
bge _020D37A0
|
||||
ldr r0, [r5, #0x14]
|
||||
str r0, [r8, #0x14]
|
||||
str r8, [r5, #0x14]
|
||||
str r5, [r8, #0x18]
|
||||
ldr r0, [r8, #0x14]
|
||||
cmp r0, #0
|
||||
strne r8, [r0, #0x18]
|
||||
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
ldr r1, _020D37E4 ; =0x021E19E4
|
||||
mov r0, r8
|
||||
str r8, [r1, #4]
|
||||
bl sub_020D35D0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_020D37A0:
|
||||
ldr r5, [r5, #0x18]
|
||||
cmp r5, #0
|
||||
bne _020D3750
|
||||
_020D37AC:
|
||||
ldr r1, _020D37E4 ; =0x021E19E4
|
||||
mov r0, #0
|
||||
str r0, [r8, #0x18]
|
||||
ldr r0, [r1, #8]
|
||||
str r8, [r1, #8]
|
||||
str r0, [r8, #0x14]
|
||||
cmp r0, #0
|
||||
strne r8, [r0, #0x18]
|
||||
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
str r8, [r1, #8]
|
||||
mov r0, r8
|
||||
str r8, [r1, #4]
|
||||
bl sub_020D35D0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
_020D37E4: .word 0x021E19E4
|
||||
arm_func_end sub_020D36BC
|
||||
|
||||
arm_func_start OS_SetAlarm
|
||||
OS_SetAlarm: ; 0x020D37E8
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
movs r6, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
mov r7, r3
|
||||
beq _020D380C
|
||||
ldr r0, [r6]
|
||||
cmp r0, #0
|
||||
beq _020D3810
|
||||
_020D380C:
|
||||
bl OS_Terminate
|
||||
_020D3810:
|
||||
bl OS_DisableInterrupts
|
||||
mov r1, #0
|
||||
str r1, [r6, #0x1c]
|
||||
str r1, [r6, #0x20]
|
||||
str r7, [r6]
|
||||
ldr r1, [sp, #0x18]
|
||||
mov r7, r0
|
||||
str r1, [r6, #4]
|
||||
bl OS_GetTick
|
||||
adds r3, r5, r0
|
||||
adc r2, r4, r1
|
||||
mov r0, r6
|
||||
mov r1, r3
|
||||
bl sub_020D36BC
|
||||
mov r0, r7
|
||||
bl OS_RestoreInterrupts
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end OS_SetAlarm
|
||||
|
||||
arm_func_start OS_CancelAlarm
|
||||
OS_CancelAlarm: ; 0x020D3854
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, [r5]
|
||||
mov r4, r0
|
||||
cmp r1, #0
|
||||
bne _020D3878
|
||||
bl OS_RestoreInterrupts
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_020D3878:
|
||||
ldr r0, [r5, #0x18]
|
||||
cmp r0, #0
|
||||
ldrne r1, [r5, #0x14]
|
||||
strne r1, [r0, #0x14]
|
||||
bne _020D3898
|
||||
ldr r2, [r5, #0x14]
|
||||
ldr r1, _020D38D8 ; =0x021E19E4
|
||||
str r2, [r1, #8]
|
||||
_020D3898:
|
||||
ldr r1, [r5, #0x14]
|
||||
cmp r1, #0
|
||||
strne r0, [r1, #0x18]
|
||||
bne _020D38BC
|
||||
ldr r1, _020D38D8 ; =0x021E19E4
|
||||
cmp r0, #0
|
||||
str r0, [r1, #4]
|
||||
beq _020D38BC
|
||||
bl sub_020D35D0
|
||||
_020D38BC:
|
||||
mov r1, #0
|
||||
str r1, [r5]
|
||||
str r1, [r5, #0x1c]
|
||||
mov r0, r4
|
||||
str r1, [r5, #0x20]
|
||||
bl OS_RestoreInterrupts
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_020D38D8: .word 0x021E19E4
|
||||
arm_func_end OS_CancelAlarm
|
||||
|
||||
arm_func_start sub_020D38DC
|
||||
sub_020D38DC: ; 0x020D38DC
|
||||
stmdb sp!, {r0, lr}
|
||||
bl sub_020D38EC
|
||||
ldmia sp!, {r0, lr}
|
||||
bx lr
|
||||
arm_func_end sub_020D38DC
|
||||
|
||||
arm_func_start sub_020D38EC
|
||||
sub_020D38EC: ; 0x020D38EC
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r1, _020D39D0 ; =0x04000106
|
||||
mov r2, #0
|
||||
mov r0, #0x10
|
||||
strh r2, [r1]
|
||||
bl OS_DisableIrqMask
|
||||
ldr r0, _020D39D4 ; =OS_IRQTable
|
||||
add r0, r0, #0x3000
|
||||
ldr r1, [r0, #0xff8]
|
||||
orr r1, r1, #0x10
|
||||
str r1, [r0, #0xff8]
|
||||
bl OS_GetTick
|
||||
ldr r2, _020D39D8 ; =0x021E19E4
|
||||
ldr r4, [r2, #4]
|
||||
cmp r4, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldr r3, [r4, #0x10]
|
||||
ldr ip, [r4, #0xc]
|
||||
cmp r1, r3
|
||||
cmpeq r0, ip
|
||||
bhs _020D394C
|
||||
mov r0, r4
|
||||
bl sub_020D35D0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_020D394C:
|
||||
ldr r1, [r4, #0x18]
|
||||
mov r0, #0
|
||||
str r1, [r2, #4]
|
||||
cmp r1, #0
|
||||
streq r0, [r2, #8]
|
||||
strne r0, [r1, #0x14]
|
||||
ldr r0, [r4, #0x20]
|
||||
ldr r1, [r4, #0x1c]
|
||||
cmp r0, #0
|
||||
ldr r5, [r4]
|
||||
mov r0, #0
|
||||
cmpeq r1, #0
|
||||
streq r0, [r4]
|
||||
cmp r5, #0
|
||||
beq _020D3990
|
||||
ldr r0, [r4, #4]
|
||||
blx r5
|
||||
_020D3990:
|
||||
ldr r0, [r4, #0x20]
|
||||
ldr r1, [r4, #0x1c]
|
||||
cmp r0, #0
|
||||
cmpeq r1, #0
|
||||
mov r1, #0
|
||||
beq _020D39B8
|
||||
mov r0, r4
|
||||
mov r2, r1
|
||||
str r5, [r4]
|
||||
bl sub_020D36BC
|
||||
_020D39B8:
|
||||
ldr r0, _020D39D8 ; =0x021E19E4
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
bl sub_020D35D0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_020D39D0: .word 0x04000106
|
||||
_020D39D4: .word OS_IRQTable
|
||||
_020D39D8: .word 0x021E19E4
|
||||
arm_func_end sub_020D38EC
|
||||
|
||||
arm_func_start OS_InitVAlarm
|
||||
OS_InitVAlarm: ; 0x020D39DC
|
||||
stmdb sp!, {r3, lr}
|
||||
|
|
|
|||
|
|
@ -25268,10 +25268,10 @@ _020AD8BC:
|
|||
bne _020AD930
|
||||
bl OS_InitTick
|
||||
_020AD930:
|
||||
bl sub_020D369C
|
||||
bl OS_IsAlarmAvailable
|
||||
cmp r0, #0
|
||||
bne _020AD940
|
||||
bl sub_020D365C
|
||||
bl OS_InitAlarm
|
||||
_020AD940:
|
||||
ldr r0, _020AD964 ; =0x021D5FEC
|
||||
ldr r0, [r0]
|
||||
|
|
|
|||
|
|
@ -18,5 +18,7 @@
|
|||
#include <nitro/os/emulator.h>
|
||||
#include <nitro/os/protectionRegion.h>
|
||||
#include <nitro/os/protectionUnit.h>
|
||||
#include <nitro/os/tick.h>
|
||||
#include <nitro/os/alarm.h>
|
||||
|
||||
#endif //NITRO_OS_H_
|
||||
|
|
|
|||
|
|
@ -8,4 +8,11 @@
|
|||
#include <nitro/os/ARM7/alarm.h>
|
||||
#endif
|
||||
|
||||
struct OSiAlarmQueue
|
||||
{
|
||||
OSAlarm *head;
|
||||
OSAlarm *tail;
|
||||
};
|
||||
struct OSiAlarmQueue *OSi_GetAlarmQueue(void);
|
||||
|
||||
#endif //NITRO_OS_ALARM_H
|
||||
|
|
|
|||
|
|
@ -9,4 +9,7 @@ int OS_SNPrintf(char * dest, u32 len, const char * format, ...);
|
|||
int OS_VSPrintf(char * dest, const char * format, va_list va);
|
||||
int OS_VSNPrintf(char * dest, u32 len, const char * format, va_list va);
|
||||
|
||||
void OS_Terminate();
|
||||
#define OS_Panic(...) OS_Terminate()
|
||||
|
||||
#endif //NITRO_OS_PRINTF_H_
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user