mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-29 03:46:47 -05:00
Merge branch 'master' of github.com:martmists/pokediamond into pikalax_work
This commit is contained in:
@@ -46,15 +46,21 @@ LD_SPEC := $(TARGET).lsf
|
||||
LD_TEMPLATE := ARM7-TS.lcf.template
|
||||
|
||||
# Directories containing source files
|
||||
SRC_DIRS := src
|
||||
SRC_DIRS := src lib lib/src
|
||||
ASM_DIRS := asm data files
|
||||
|
||||
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
|
||||
S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
|
||||
|
||||
C_OBJS = $(C_FILES:%.c=$(BUILD_DIR)/%.o)
|
||||
S_OBJS = $(S_FILES:%.s=$(BUILD_DIR)/%.o)
|
||||
|
||||
# Object files
|
||||
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
|
||||
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
|
||||
O_FILES := $(C_OBJS) $(S_OBJS)
|
||||
|
||||
.SECONDARY:
|
||||
.DELETE_ON_ERROR:
|
||||
.SECONDEXPANSION:
|
||||
|
||||
##################### Compiler Options #######################
|
||||
|
||||
@@ -83,7 +89,7 @@ OBJCOPY := $(CROSS)objcopy
|
||||
|
||||
# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o
|
||||
ASFLAGS = -proc arm4t -i ..
|
||||
CFLAGS = -O4,p -proc v4t -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir ../arm9/lib/include -W all # temporary fix while arm7 libos hasn't been decomped
|
||||
CFLAGS = -O4,p -proc arm7tdmi -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir lib/include -interworking -DFS_IMPLEMENT -enum int -W all
|
||||
LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start
|
||||
|
||||
####################### Other Tools #########################
|
||||
@@ -92,6 +98,7 @@ LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start
|
||||
SHA1SUM = sha1sum
|
||||
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc
|
||||
GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx
|
||||
SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE)
|
||||
MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q
|
||||
|
||||
TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
|
||||
@@ -99,6 +106,7 @@ TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
|
||||
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
|
||||
|
||||
export LM_LICENSE_FILE := $(TOOLS_DIR)/mwccarm/license.dat
|
||||
export MWCIncludes := lib/include
|
||||
|
||||
######################### Targets ###########################
|
||||
|
||||
@@ -112,6 +120,7 @@ else
|
||||
NODEP := 1
|
||||
endif
|
||||
|
||||
.PRECIOUS: $(ROM)
|
||||
.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm
|
||||
|
||||
MAKEFLAGS += --no-print-directory
|
||||
@@ -142,17 +151,31 @@ patch_mwasmarm:
|
||||
|
||||
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS))
|
||||
|
||||
$(BUILD_DIR)/%.o: %.c
|
||||
######################## Special Rules ########################
|
||||
|
||||
# TODO: Move out to lib/Makefile
|
||||
build/lib/src/%.o: MWCCVERSION = 1.2/sp2p3
|
||||
|
||||
####################### Everything Else ######################
|
||||
|
||||
ifeq (,$(NODEP))
|
||||
$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I ../include -I ../include-mw -I lib/include $(filter $*.c,$(C_FILES)) $(filter $*.s,$(S_FILES)))
|
||||
else
|
||||
$(BUILD_DIR)/%.o: dep :=
|
||||
endif
|
||||
|
||||
$(C_OBJS): $(BUILD_DIR)/%.o: %.c $$(dep)
|
||||
$(CC) -c $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/%.o: %.s
|
||||
$(AS) $(ASFLAGS) $< -o $@
|
||||
$(S_OBJS): $(BUILD_DIR)/%.o: %.s $$(dep)
|
||||
$(AS) $(ASFLAGS) -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SPEC) $(LD_TEMPLATE)
|
||||
$(MAKELSF) $< $(LD_TEMPLATE) $@
|
||||
|
||||
$(ROM): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT)
|
||||
$(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES)
|
||||
$(ROM): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BIN_FILES)
|
||||
$(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(BIN_FILES)
|
||||
$(OBJCOPY) --update-section arm7=$@ -j arm7 $(foreach ov,$(OVERLAYS),--update-section $(ov)=$(BUILD_DIR)/$(ov).sbin -j $(ov)) $(ELF) 2>/dev/null
|
||||
|
||||
# Make sure build directory exists before compiling anything
|
||||
DUMMY != mkdir -p $(ALL_DIRS)
|
||||
@@ -172,7 +195,12 @@ DUMMY != mkdir -p $(ALL_DIRS)
|
||||
%.png: ;
|
||||
%.pal: ;
|
||||
|
||||
$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal
|
||||
# Included files
|
||||
baserom.%: ;
|
||||
%.h: ;
|
||||
%.inc: ;
|
||||
|
||||
$(BIN_FILES): ;
|
||||
|
||||
### Debug Print ###
|
||||
|
||||
|
||||
@@ -14,6 +14,20 @@ Autoload MAIN
|
||||
Autoload WRAM
|
||||
{
|
||||
Address 0x037F8000
|
||||
Object main.o
|
||||
Object OS_irqHandler.o
|
||||
Object OS_irqTable.o
|
||||
Object OS_interrupt.o
|
||||
Object OS_spinLock.o
|
||||
Object OS_thread.o
|
||||
Object OS_context.o
|
||||
Object OS_message.o
|
||||
Object OS_mutex.o
|
||||
Object OS_init.o
|
||||
Object OS_arena.o
|
||||
Object OS_alloc.o
|
||||
Object OS_timer.o
|
||||
Object OS_tick.o
|
||||
Object dtcm.o
|
||||
Object libsyscall.o
|
||||
Object dtcm2.o
|
||||
|
||||
427
arm7/asm/OS_alloc.s
Normal file
427
arm7/asm/OS_alloc.s
Normal file
@@ -0,0 +1,427 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_CheckHeap
|
||||
OS_CheckHeap: ; 0x037F9D88
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
mov r6, #0
|
||||
mov r5, r6
|
||||
mvn r4, #0
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9F34 ; =OSiHeapInfo
|
||||
ldr ip, [r1, r8, lsl #2]
|
||||
mov r1, r4
|
||||
cmp r7, r1
|
||||
ldreq r7, [ip]
|
||||
ldr r2, [ip, #16]
|
||||
cmp r2, #0
|
||||
beq _037F9F24
|
||||
cmp r7, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [ip, #4]
|
||||
cmp r7, r1
|
||||
bge _037F9F24
|
||||
mov r1, #12
|
||||
mul r1, r7, r1
|
||||
add r3, r2, r1
|
||||
ldr r2, [r2, r1]
|
||||
cmp r2, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [r3, #8]
|
||||
cmp r1, #0
|
||||
beq _037F9E70
|
||||
ldr r7, [r1]
|
||||
cmp r7, #0
|
||||
bne _037F9F24
|
||||
b _037F9E70
|
||||
_037F9E0C:
|
||||
ldr r7, [ip, #8]
|
||||
cmp r7, r1
|
||||
bhi _037F9F24
|
||||
ldr r7, [ip, #12]
|
||||
cmp r1, r7
|
||||
bcs _037F9F24
|
||||
ands r7, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9E44
|
||||
ldr r7, [lr]
|
||||
cmp r7, r1
|
||||
bne _037F9F24
|
||||
_037F9E44:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r1, r7, #31
|
||||
bne _037F9F24
|
||||
add r6, r6, r7
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9E70:
|
||||
cmp r1, #0
|
||||
bne _037F9E0C
|
||||
ldr r1, [r3, #4]
|
||||
cmp r1, #0
|
||||
beq _037F9F14
|
||||
ldr r3, [r1]
|
||||
cmp r3, #0
|
||||
bne _037F9F24
|
||||
b _037F9F14
|
||||
_037F9E94:
|
||||
ldr r3, [ip, #8]
|
||||
cmp r3, r1
|
||||
bhi _037F9F24
|
||||
ldr r3, [ip, #12]
|
||||
cmp r1, r3
|
||||
bcs _037F9F24
|
||||
ands r3, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9ECC
|
||||
ldr r3, [lr]
|
||||
cmp r3, r1
|
||||
bne _037F9F24
|
||||
_037F9ECC:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r3, r7, #31
|
||||
bne _037F9F24
|
||||
cmp lr, #0
|
||||
beq _037F9EF4
|
||||
add r1, r1, r7
|
||||
cmp r1, lr
|
||||
bcs _037F9F24
|
||||
_037F9EF4:
|
||||
add r6, r6, r7
|
||||
sub r1, r7, #32
|
||||
add r5, r5, r1
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9F14:
|
||||
cmp r1, #0
|
||||
bne _037F9E94
|
||||
cmp r6, r2
|
||||
moveq r4, r5
|
||||
_037F9F24:
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037F9F34: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_CreateHeap
|
||||
OS_CreateHeap: ; 0x037F9F38
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
mov r5, r2
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9FDC ; =OSiHeapInfo
|
||||
ldr r7, [r1, r4, lsl #2]
|
||||
add r1, r6, #31
|
||||
bic r6, r1, #31
|
||||
bic r5, r5, #31
|
||||
mov r4, #0
|
||||
ldr lr, [r7, #4]
|
||||
mov r1, #12
|
||||
b _037F9FC0
|
||||
_037F9F74:
|
||||
ldr r3, [r7, #16]
|
||||
mul r2, r4, r1
|
||||
add ip, r3, r2
|
||||
ldr r2, [r3, r2]
|
||||
cmp r2, #0
|
||||
bge _037F9FBC
|
||||
sub r1, r5, r6
|
||||
str r1, [ip]
|
||||
mov r2, #0
|
||||
str r2, [r6]
|
||||
str r2, [r6, #4]
|
||||
ldr r1, [ip]
|
||||
str r1, [r6, #8]
|
||||
str r6, [ip, #4]
|
||||
str r2, [ip, #8]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
b _037F9FD0
|
||||
_037F9FBC:
|
||||
add r4, r4, #1
|
||||
_037F9FC0:
|
||||
cmp r4, lr
|
||||
blt _037F9F74
|
||||
bl OS_RestoreInterrupts
|
||||
mvn r0, #0
|
||||
_037F9FD0:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037F9FDC: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_InitAlloc
|
||||
OS_InitAlloc: ; 0x037F9FE0
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r7, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
mov r6, r3
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA084 ; =OSiHeapInfo
|
||||
str r5, [r1, r7, lsl #2]
|
||||
mov r2, #12
|
||||
mul r1, r6, r2
|
||||
add r3, r5, #20
|
||||
str r3, [r5, #16]
|
||||
str r6, [r5, #4]
|
||||
mov r8, #0
|
||||
mvn lr, #0
|
||||
mov ip, r8
|
||||
b _037FA044
|
||||
_037FA024:
|
||||
ldr r6, [r5, #16]
|
||||
mul r3, r8, r2
|
||||
add r7, r6, r3
|
||||
str lr, [r6, r3]
|
||||
str ip, [r7, #8]
|
||||
ldr r3, [r7, #8]
|
||||
str r3, [r7, #4]
|
||||
add r8, r8, #1
|
||||
_037FA044:
|
||||
ldr r3, [r5, #4]
|
||||
cmp r8, r3
|
||||
blt _037FA024
|
||||
mvn r2, #0
|
||||
str r2, [r5]
|
||||
ldr r2, [r5, #16]
|
||||
add r1, r2, r1
|
||||
add r1, r1, #31
|
||||
bic r1, r1, #31
|
||||
str r1, [r5, #8]
|
||||
bic r1, r4, #31
|
||||
str r1, [r5, #12]
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r0, [r5, #8]
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037FA084: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_SetCurrentHeap
|
||||
OS_SetCurrentHeap: ; 0x037FA088
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA0C0 ; =OSiHeapInfo
|
||||
ldr r1, [r1, r4, lsl #2]
|
||||
ldr r4, [r1]
|
||||
str r5, [r1]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037FA0C0: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_FreeToHeap
|
||||
OS_FreeToHeap: ; 0x037FA0C4
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r7, r0
|
||||
mov r4, r1
|
||||
mov r6, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r5, r0
|
||||
ldr r0, _037FA134 ; =OSiHeapInfo
|
||||
ldr r0, [r0, r7, lsl #2]
|
||||
cmp r4, #0
|
||||
ldrlt r4, [r0]
|
||||
sub r6, r6, #32
|
||||
ldr r1, [r0, #16]
|
||||
mov r0, #12
|
||||
mla r7, r4, r0, r1
|
||||
ldr r0, [r7, #8]
|
||||
mov r1, r6
|
||||
bl DLExtract
|
||||
str r0, [r7, #8]
|
||||
ldr r0, [r7, #4]
|
||||
mov r1, r6
|
||||
bl DLInsert
|
||||
str r0, [r7, #4]
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA134: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_AllocFromHeap
|
||||
OS_AllocFromHeap: ; 0x037FA138
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r7, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r1, _037FA24C ; =OSiHeapInfo
|
||||
ldr r1, [r1, r6, lsl #2]
|
||||
cmp r1, #0
|
||||
bne _037FA170
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA170:
|
||||
cmp r5, #0
|
||||
ldrlt r5, [r1]
|
||||
ldr r1, [r1, #16]
|
||||
mov r0, #12
|
||||
mla r6, r5, r0, r1
|
||||
add r0, r7, #32
|
||||
add r0, r0, #31
|
||||
bic r7, r0, #31
|
||||
ldr r0, [r6, #4]
|
||||
mov r5, r0
|
||||
b _037FA1AC
|
||||
_037FA19C:
|
||||
ldr r1, [r5, #8]
|
||||
cmp r7, r1
|
||||
ble _037FA1B4
|
||||
ldr r5, [r5, #4]
|
||||
_037FA1AC:
|
||||
cmp r5, #0
|
||||
bne _037FA19C
|
||||
_037FA1B4:
|
||||
cmp r5, #0
|
||||
bne _037FA1CC
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA1CC:
|
||||
ldr r1, [r5, #8]
|
||||
sub r1, r1, r7
|
||||
cmp r1, #64 ; 0x40
|
||||
bcs _037FA1EC
|
||||
mov r1, r5
|
||||
bl DLExtract
|
||||
str r0, [r6, #4]
|
||||
b _037FA224
|
||||
_037FA1EC:
|
||||
str r7, [r5, #8]
|
||||
add r2, r5, r7
|
||||
str r1, [r2, #8]
|
||||
ldr r0, [r5]
|
||||
str r0, [r5, r7]
|
||||
ldr r0, [r5, #4]
|
||||
str r0, [r2, #4]
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, #0
|
||||
strne r2, [r0]
|
||||
ldr r0, [r2]
|
||||
cmp r0, #0
|
||||
strne r2, [r0, #4]
|
||||
streq r2, [r6, #4]
|
||||
_037FA224:
|
||||
ldr r0, [r6, #8]
|
||||
mov r1, r5
|
||||
bl DLAddFront
|
||||
str r0, [r6, #8]
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add r0, r5, #32
|
||||
_037FA240:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA24C: .word OSiHeapInfo
|
||||
|
||||
arm_func_start DLInsert
|
||||
DLInsert: ; 0x037FA250
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
mov ip, r0
|
||||
mov lr, #0
|
||||
b _037FA274
|
||||
_037FA264:
|
||||
cmp r1, ip
|
||||
bls _037FA27C
|
||||
mov lr, ip
|
||||
ldr ip, [ip, #4]
|
||||
_037FA274:
|
||||
cmp ip, #0
|
||||
bne _037FA264
|
||||
_037FA27C:
|
||||
str ip, [r1, #4]
|
||||
str lr, [r1]
|
||||
cmp ip, #0
|
||||
beq _037FA2BC
|
||||
str r1, [ip]
|
||||
ldr r3, [r1, #8]
|
||||
add r2, r1, r3
|
||||
cmp r2, ip
|
||||
bne _037FA2BC
|
||||
ldr r2, [ip, #8]
|
||||
add r2, r3, r2
|
||||
str r2, [r1, #8]
|
||||
ldr ip, [ip, #4]
|
||||
str ip, [r1, #4]
|
||||
cmp ip, #0
|
||||
strne r1, [ip]
|
||||
_037FA2BC:
|
||||
cmp lr, #0
|
||||
beq _037FA2F4
|
||||
str r1, [lr, #4]
|
||||
ldr r2, [lr, #8]
|
||||
add r3, lr, r2
|
||||
cmp r3, r1
|
||||
bne _037FA2F8
|
||||
ldr r1, [r1, #8]
|
||||
add r1, r2, r1
|
||||
str r1, [lr, #8]
|
||||
str ip, [lr, #4]
|
||||
cmp ip, #0
|
||||
strne lr, [ip]
|
||||
b _037FA2F8
|
||||
_037FA2F4:
|
||||
mov r0, r1
|
||||
_037FA2F8:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start DLExtract
|
||||
DLExtract: ; 0x037FA304
|
||||
ldr r3, [r1, #4]
|
||||
cmp r3, #0
|
||||
ldrne r2, [r1]
|
||||
strne r2, [r3]
|
||||
ldr r2, [r1]
|
||||
cmp r2, #0
|
||||
ldreq r0, [r1, #4]
|
||||
ldrne r1, [r1, #4]
|
||||
strne r1, [r2, #4]
|
||||
bx lr
|
||||
|
||||
arm_func_start DLAddFront
|
||||
DLAddFront: ; 0x037FA32C
|
||||
str r0, [r1, #4]
|
||||
mov r2, #0
|
||||
str r2, [r1]
|
||||
cmp r0, #0
|
||||
strne r1, [r0]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
149
arm7/asm/OS_arena.s
Normal file
149
arm7/asm/OS_arena.s
Normal file
@@ -0,0 +1,149 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_SetArenaLo
|
||||
OS_SetArenaLo: ; 0x037F9BBC
|
||||
mov r0, r0, lsl #2
|
||||
add r0, r0, #40894464 ; 0x2700000
|
||||
add r0, r0, #1044480 ; 0xff000
|
||||
str r1, [r0, #3488] ; 0xda0
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_SetArenaHi
|
||||
OS_SetArenaHi: ; 0x037F9BD0
|
||||
mov r0, r0, lsl #2
|
||||
add r0, r0, #40894464 ; 0x2700000
|
||||
add r0, r0, #1044480 ; 0xff000
|
||||
str r1, [r0, #3524] ; 0xdc4
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_GetInitArenaLo
|
||||
OS_GetInitArenaLo: ; 0x037F9BE4
|
||||
cmp r0, #1
|
||||
beq _037F9C00
|
||||
cmp r0, #7
|
||||
beq _037F9C08
|
||||
cmp r0, #8
|
||||
beq _037F9C18
|
||||
b _037F9C2C
|
||||
_037F9C00:
|
||||
ldr r0, _037F9C34 ; =0x027FAFCC
|
||||
bx lr
|
||||
_037F9C08:
|
||||
ldr r0, _037F9C38 ; =0x0380B92C
|
||||
cmp r0, #58720256 ; 0x03800000
|
||||
movhi r0, #58720256 ; 0x03800000
|
||||
bx lr
|
||||
_037F9C18:
|
||||
mov r0, #58720256 ; 0x03800000
|
||||
ldr r1, _037F9C38 ; =0x0380B92C
|
||||
cmp r1, #58720256 ; 0x03800000
|
||||
movhi r0, r1
|
||||
bx lr
|
||||
_037F9C2C:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
_037F9C34: .word 0x027FAFCC
|
||||
_037F9C38: .word 0x0380B92C
|
||||
|
||||
arm_func_start OS_GetInitArenaHi
|
||||
OS_GetInitArenaHi: ; 0x037F9C3C
|
||||
cmp r0, #1
|
||||
beq _037F9C58
|
||||
cmp r0, #7
|
||||
beq _037F9C60
|
||||
cmp r0, #8
|
||||
beq _037F9C68
|
||||
b _037F9CA0
|
||||
_037F9C58:
|
||||
ldr r0, _037F9CA8 ; =0x027FF000
|
||||
bx lr
|
||||
_037F9C60:
|
||||
mov r0, #58720256 ; 0x03800000
|
||||
bx lr
|
||||
_037F9C68:
|
||||
ldr r1, _037F9CAC ; =0x00000400
|
||||
ldr r0, _037F9CB0 ; =0x0380FF80
|
||||
sub r2, r0, r1
|
||||
mov r0, #58720256 ; 0x03800000
|
||||
ldr r1, _037F9CB4 ; =0x0380B92C
|
||||
cmp r1, #58720256 ; 0x03800000
|
||||
movhi r0, r1
|
||||
ldr r1, _037F9CB8 ; =0x00000400
|
||||
cmp r1, #0
|
||||
bxeq lr
|
||||
cmp r1, #0
|
||||
sublt r0, r0, r1
|
||||
subge r0, r2, r1
|
||||
bx lr
|
||||
_037F9CA0:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
_037F9CA8: .word 0x027FF000
|
||||
_037F9CAC: .word 0x00000400
|
||||
_037F9CB0: .word 0x0380FF80
|
||||
_037F9CB4: .word 0x0380B92C
|
||||
_037F9CB8: .word 0x00000400
|
||||
|
||||
arm_func_start OS_GetArenaLo
|
||||
OS_GetArenaLo: ; 0x037F9CBC
|
||||
mov r0, r0, lsl #2
|
||||
add r0, r0, #40894464 ; 0x2700000
|
||||
add r0, r0, #1044480 ; 0xff000
|
||||
ldr r0, [r0, #3488] ; 0xda0
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_GetArenaHi
|
||||
OS_GetArenaHi: ; 0x037F9CD0
|
||||
mov r0, r0, lsl #2
|
||||
add r0, r0, #40894464 ; 0x2700000
|
||||
add r0, r0, #1044480 ; 0xff000
|
||||
ldr r0, [r0, #3524] ; 0xdc4
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_InitArena
|
||||
OS_InitArena: ; 0x037F9CE4
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037F9D84 ; =_038078F4
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _037F9D78
|
||||
mov r0, #1
|
||||
str r0, [r1]
|
||||
bl OS_GetInitArenaHi
|
||||
mov r1, r0
|
||||
mov r0, #1
|
||||
bl OS_SetArenaHi
|
||||
mov r0, #1
|
||||
bl OS_GetInitArenaLo
|
||||
mov r1, r0
|
||||
mov r0, #1
|
||||
bl OS_SetArenaLo
|
||||
mov r0, #7
|
||||
bl OS_GetInitArenaHi
|
||||
mov r1, r0
|
||||
mov r0, #7
|
||||
bl OS_SetArenaHi
|
||||
mov r0, #7
|
||||
bl OS_GetInitArenaLo
|
||||
mov r1, r0
|
||||
mov r0, #7
|
||||
bl OS_SetArenaLo
|
||||
mov r0, #8
|
||||
bl OS_GetInitArenaHi
|
||||
mov r1, r0
|
||||
mov r0, #8
|
||||
bl OS_SetArenaHi
|
||||
mov r0, #8
|
||||
bl OS_GetInitArenaLo
|
||||
mov r1, r0
|
||||
mov r0, #8
|
||||
bl OS_SetArenaLo
|
||||
_037F9D78:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F9D84: .word _038078F4
|
||||
65
arm7/asm/OS_context.s
Normal file
65
arm7/asm/OS_context.s
Normal file
@@ -0,0 +1,65 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_InitContext
|
||||
OS_InitContext: ; 0x037F9740
|
||||
add r1, r1, #4
|
||||
str r1, [r0, #64] ; 0x40
|
||||
str r2, [r0, #68] ; 0x44
|
||||
sub r2, r2, #64 ; 0x40
|
||||
tst r2, #4
|
||||
subne r2, r2, #4
|
||||
str r2, [r0, #56] ; 0x38
|
||||
ands r1, r1, #1
|
||||
movne r1, #63 ; 0x3f
|
||||
moveq r1, #31
|
||||
str r1, [r0]
|
||||
mov r1, #0
|
||||
str r1, [r0, #4]
|
||||
str r1, [r0, #8]
|
||||
str r1, [r0, #12]
|
||||
str r1, [r0, #16]
|
||||
str r1, [r0, #20]
|
||||
str r1, [r0, #24]
|
||||
str r1, [r0, #28]
|
||||
str r1, [r0, #32]
|
||||
str r1, [r0, #36] ; 0x24
|
||||
str r1, [r0, #40] ; 0x28
|
||||
str r1, [r0, #44] ; 0x2c
|
||||
str r1, [r0, #48] ; 0x30
|
||||
str r1, [r0, #52] ; 0x34
|
||||
str r1, [r0, #60] ; 0x3c
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_SaveContext
|
||||
OS_SaveContext: ; 0x037F97AC
|
||||
add r1, r0, #0
|
||||
mrs r2, CPSR
|
||||
str r2, [r1], #4
|
||||
mov r0, #211 ; 0xd3
|
||||
msr CPSR_c, r0
|
||||
str sp, [r1, #64] ; 0x40
|
||||
msr CPSR_c, r2
|
||||
mov r0, #1
|
||||
stmia r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}
|
||||
adr r0, _037F97E0
|
||||
str r0, [r1, #60] ; 0x3c
|
||||
mov r0, #0
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_LoadContext
|
||||
OS_LoadContext: ; 0x037F97E0
|
||||
_037F97E0: ; needed because otherwise it breaks
|
||||
mrs r1, CPSR
|
||||
bic r1, r1, #31
|
||||
orr r1, r1, #211 ; 0xd3
|
||||
msr CPSR_c, r1
|
||||
ldr r1, [r0], #4
|
||||
msr SPSR_fsxc, r1
|
||||
ldr sp, [r0, #64] ; 0x40
|
||||
ldr lr, [r0, #60] ; 0x3c
|
||||
ldmia r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
|
||||
nop ; (mov r0, r0)
|
||||
subs pc, lr, #4
|
||||
155
arm7/asm/OS_interrupt.s
Normal file
155
arm7/asm/OS_interrupt.s
Normal file
@@ -0,0 +1,155 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_ResetRequestIrqMask
|
||||
OS_ResetRequestIrqMask: ; 0x037F8824
|
||||
ldr ip, _037F8850 ; =0x04000208
|
||||
ldrh r3, [ip]
|
||||
mov r1, #0
|
||||
strh r1, [ip]
|
||||
ldr r2, _037F8854 ; =0x04000214
|
||||
ldr r1, [r2]
|
||||
str r0, [r2]
|
||||
ldrh r0, [ip]
|
||||
strh r3, [ip]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_037F8850: .word 0x04000208
|
||||
_037F8854: .word 0x04000214
|
||||
|
||||
arm_func_start OS_DisableIrqMask
|
||||
OS_DisableIrqMask: ; 0x037F8858
|
||||
ldr ip, _037F888C ; =0x04000208
|
||||
ldrh r3, [ip]
|
||||
mov r1, #0
|
||||
strh r1, [ip]
|
||||
ldr r2, _037F8890 ; =0x04000210
|
||||
ldr r1, [r2]
|
||||
mvn r0, r0
|
||||
and r0, r1, r0
|
||||
str r0, [r2]
|
||||
ldrh r0, [ip]
|
||||
strh r3, [ip]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_037F888C: .word 0x04000208
|
||||
_037F8890: .word 0x04000210
|
||||
|
||||
arm_func_start OS_EnableIrqMask
|
||||
OS_EnableIrqMask: ; 0x037F8894
|
||||
ldr ip, _037F88C4 ; =0x04000208
|
||||
ldrh r3, [ip]
|
||||
mov r1, #0
|
||||
strh r1, [ip]
|
||||
ldr r2, _037F88C8 ; =0x04000210
|
||||
ldr r1, [r2]
|
||||
orr r0, r1, r0
|
||||
str r0, [r2]
|
||||
ldrh r0, [ip]
|
||||
strh r3, [ip]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_037F88C4: .word 0x04000208
|
||||
_037F88C8: .word 0x04000210
|
||||
|
||||
arm_func_start OS_SetIrqMask
|
||||
OS_SetIrqMask: ; 0x037F88CC
|
||||
ldr ip, _037F88F8 ; =0x04000208
|
||||
ldrh r3, [ip]
|
||||
mov r1, #0
|
||||
strh r1, [ip]
|
||||
ldr r2, _037F88FC ; =0x04000210
|
||||
ldr r1, [r2]
|
||||
str r0, [r2]
|
||||
ldrh r0, [ip]
|
||||
strh r3, [ip]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_037F88F8: .word 0x04000208
|
||||
_037F88FC: .word 0x04000210
|
||||
|
||||
arm_func_start OSi_EnterTimerCallback
|
||||
OSi_EnterTimerCallback: ; 0x037F8900
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r3, #12
|
||||
mul r4, r0, r3
|
||||
ldr r3, _037F8940 ; =_03807744
|
||||
str r1, [r3, r4]
|
||||
ldr r1, _037F8944 ; =_0380774C
|
||||
str r2, [r1, r4]
|
||||
mov r1, #1
|
||||
add r0, r0, #3
|
||||
mov r0, r1, lsl r0
|
||||
bl OS_EnableIrqMask
|
||||
mov r1, #1
|
||||
ldr r0, _037F8948 ; =_03807748
|
||||
str r1, [r0, r4]
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
_037F8940: .word _03807744
|
||||
_037F8944: .word _0380774C
|
||||
_037F8948: .word _03807748
|
||||
|
||||
arm_func_start OS_SetIrqFunction
|
||||
OS_SetIrqFunction: ; 0x037F894C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
sub sp, sp, #4
|
||||
mov r9, #0
|
||||
mov r7, r9
|
||||
ldr lr, _037F89E8 ; =OS_IRQTable
|
||||
ldr r4, _037F89EC ; =_03807774
|
||||
ldr r6, _037F89F0 ; =OSi_IrqCallbackInfo
|
||||
mov ip, r9
|
||||
mov r3, #1
|
||||
mov r2, #12
|
||||
_037F8974:
|
||||
ands r5, r0, #1
|
||||
beq _037F89CC
|
||||
mov r8, r7
|
||||
cmp r9, #8
|
||||
blt _037F8998
|
||||
cmp r9, #11
|
||||
suble r5, r9, #8
|
||||
mlale r8, r5, r2, r6
|
||||
ble _037F89BC
|
||||
_037F8998:
|
||||
cmp r9, #3
|
||||
blt _037F89B0
|
||||
cmp r9, #6
|
||||
addle r5, r9, #1
|
||||
mlale r8, r5, r2, r6
|
||||
ble _037F89BC
|
||||
_037F89B0:
|
||||
cmp r9, #0
|
||||
moveq r8, r4
|
||||
strne r1, [lr, r9, lsl #2]
|
||||
_037F89BC:
|
||||
cmp r8, #0
|
||||
strne r1, [r8]
|
||||
strne ip, [r8, #8]
|
||||
strne r3, [r8, #4]
|
||||
_037F89CC:
|
||||
mov r0, r0, lsr #1
|
||||
add r9, r9, #1
|
||||
cmp r9, #25
|
||||
blt _037F8974
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
bx lr
|
||||
_037F89E8: .word OS_IRQTable
|
||||
_037F89EC: .word _03807774
|
||||
_037F89F0: .word OSi_IrqCallbackInfo
|
||||
|
||||
arm_func_start OS_InitIrqTable
|
||||
OS_InitIrqTable: ; 0x037F89F4
|
||||
mov r1, #0
|
||||
ldr r0, _037F8A10 ; =OSi_IrqThreadQueue
|
||||
str r1, [r0, #4]
|
||||
str r1, [r0]
|
||||
ldr r0, _037F8A14 ; =0x027FFC3C
|
||||
str r1, [r0]
|
||||
bx lr
|
||||
_037F8A10: .word OSi_IrqThreadQueue
|
||||
_037F8A14: .word 0x027FFC3C
|
||||
111
arm7/asm/OS_irqHandler.s
Normal file
111
arm7/asm/OS_irqHandler.s
Normal file
@@ -0,0 +1,111 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_IrqHandler
|
||||
OS_IrqHandler: ; 0x037F853C
|
||||
stmfd sp!, {lr}
|
||||
mov ip, #67108864 ; 0x4000000
|
||||
add ip, ip, #528 ; 0x210
|
||||
ldr r1, [ip, #-8]
|
||||
cmp r1, #0
|
||||
ldmeqfd sp!, {pc}
|
||||
ldmia ip, {r1, r2}
|
||||
ands r1, r1, r2
|
||||
ldmeqfd sp!, {pc}
|
||||
mov r3, #1
|
||||
mov r0, #0
|
||||
_037F8568:
|
||||
ands r2, r1, r3, lsl r0
|
||||
addeq r0, r0, #1
|
||||
beq _037F8568
|
||||
str r2, [ip, #4]
|
||||
ldr r1, _037F8588 ; =OS_IRQTable
|
||||
ldr r0, [r1, r0, lsl #2]
|
||||
ldr lr, _037F858C ; =OS_IrqHandler_ThreadSwitch
|
||||
bx r0
|
||||
_037F8588: .word OS_IRQTable
|
||||
_037F858C: .word OS_IrqHandler_ThreadSwitch
|
||||
|
||||
arm_func_start OS_IrqHandler_ThreadSwitch
|
||||
OS_IrqHandler_ThreadSwitch:
|
||||
ldr ip, _037F86AC ; =OSi_IrqThreadQueue
|
||||
mov r3, #0
|
||||
ldr ip, [ip]
|
||||
mov r2, #1
|
||||
cmp ip, #0
|
||||
beq _037F85E0
|
||||
_037F85A8:
|
||||
str r2, [ip, #72] ; 0x48
|
||||
str r3, [ip, #92] ; 0x5c
|
||||
str r3, [ip, #96] ; 0x60
|
||||
ldr r0, [ip, #100] ; 0x64
|
||||
str r3, [ip, #100] ; 0x64
|
||||
mov ip, r0
|
||||
cmp ip, #0
|
||||
bne _037F85A8
|
||||
ldr ip, _037F86AC ; =OSi_IrqThreadQueue
|
||||
str r3, [ip]
|
||||
str r3, [ip, #4]
|
||||
ldr ip, _037F86B0 ; =OSi_ThreadInfo
|
||||
mov r1, #1
|
||||
strh r1, [ip]
|
||||
_037F85E0:
|
||||
ldr ip, _037F86B0 ; =OSi_ThreadInfo
|
||||
ldrh r1, [ip]
|
||||
cmp r1, #0
|
||||
ldreq pc, [sp], #4 ; (ldreq pc, [sp], #4)
|
||||
mov r1, #0
|
||||
strh r1, [ip]
|
||||
mov r3, #210 ; 0xd2
|
||||
msr CPSR_c, r3
|
||||
add r2, ip, #8
|
||||
ldr r1, [r2]
|
||||
_037F8608:
|
||||
cmp r1, #0
|
||||
ldrneh r0, [r1, #72] ; 0x48
|
||||
cmpne r0, #1
|
||||
ldrne r1, [r1, #76] ; 0x4c
|
||||
bne _037F8608
|
||||
cmp r1, #0
|
||||
bne _037F8630
|
||||
_037F8624:
|
||||
mov r3, #146 ; 0x92
|
||||
msr CPSR_c, r3
|
||||
ldr pc, [sp], #4
|
||||
_037F8630:
|
||||
ldr r0, [ip, #4]
|
||||
cmp r1, r0
|
||||
beq _037F8624
|
||||
ldr r3, [ip, #12]
|
||||
cmp r3, #0
|
||||
beq _037F8658
|
||||
stmdb sp!, {r0, r1, ip}
|
||||
mov lr, pc
|
||||
bx r3
|
||||
ldmia sp!, {r0, r1, ip}
|
||||
_037F8658:
|
||||
str r1, [ip, #4]
|
||||
mrs r2, SPSR
|
||||
str r2, [r0, #0]!
|
||||
ldmib sp!, {r2, r3}
|
||||
stmib r0!, {r2, r3}
|
||||
ldmib sp!, {r2, r3, ip, lr}
|
||||
stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
|
||||
stmib r0!, {lr}
|
||||
mov r3, #211 ; 0xd3
|
||||
msr CPSR_c, r3
|
||||
stmib r0!, {sp}
|
||||
ldr sp, [r1, #68] ; 0x44
|
||||
mov r3, #210 ; 0xd2
|
||||
msr CPSR_c, r3
|
||||
ldr r2, [r1, #0]!
|
||||
msr SPSR_fc, r2
|
||||
ldr lr, [r1, #64] ; 0x40
|
||||
ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
|
||||
nop ; (mov r0, r0)
|
||||
stmda sp!, {r0, r1, r2, r3, ip, lr}
|
||||
ldmia sp!, {pc}
|
||||
_037F86AC: .word OSi_IrqThreadQueue
|
||||
_037F86B0: .word OSi_ThreadInfo
|
||||
132
arm7/asm/OS_irqTable.s
Normal file
132
arm7/asm/OS_irqTable.s
Normal file
@@ -0,0 +1,132 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OSi_IrqVBlank
|
||||
OSi_IrqVBlank: ; 0x037F86B4
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037F8700 ; =OSi_IrqCallbackInfo
|
||||
ldr r2, [r0, #96] ; 0x60
|
||||
ldr r1, _037F8704 ; =0x027FFC3C
|
||||
ldr r0, [r1]
|
||||
add r0, r0, #1
|
||||
str r0, [r1]
|
||||
cmp r2, #0
|
||||
beq _037F86E4
|
||||
mov lr, pc
|
||||
bx r2
|
||||
_037F86E4:
|
||||
ldr r1, _037F8708 ; =0x0380FFF8
|
||||
ldr r0, [r1]
|
||||
orr r0, r0, #1
|
||||
str r0, [r1]
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F8700: .word OSi_IrqCallbackInfo
|
||||
_037F8704: .word 0x027FFC3C
|
||||
_037F8708: .word 0x0380FFF8
|
||||
|
||||
arm_func_start OSi_IrqTimer3
|
||||
OSi_IrqTimer3: ; 0x037F870C
|
||||
mov r0, #7
|
||||
ldr ip, _037F8718 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8718: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqTimer2
|
||||
OSi_IrqTimer2: ; 0x037F871C
|
||||
mov r0, #6
|
||||
ldr ip, _037F8728 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8728: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqTimer1
|
||||
OSi_IrqTimer1: ; 0x037F872C
|
||||
mov r0, #5
|
||||
ldr ip, _037F8738 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8738: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqTimer0
|
||||
OSi_IrqTimer0: ; 0x037F873C
|
||||
mov r0, #4
|
||||
ldr ip, _037F8748 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8748: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqDma3
|
||||
OSi_IrqDma3: ; 0x037F874C
|
||||
mov r0, #3
|
||||
ldr ip, _037F8758 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8758: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqDma2
|
||||
OSi_IrqDma2: ; 0x037F875C
|
||||
mov r0, #2
|
||||
ldr ip, _037F8768 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8768: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqDma1
|
||||
OSi_IrqDma1: ; 0x037F876C
|
||||
mov r0, #1
|
||||
ldr ip, _037F8778 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8778: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqDma0
|
||||
OSi_IrqDma0: ; 0x037F877C
|
||||
mov r0, #0
|
||||
ldr ip, _037F8788 ; =OSi_IrqCallback
|
||||
bx ip
|
||||
_037F8788: .word OSi_IrqCallback
|
||||
|
||||
arm_func_start OSi_IrqCallback
|
||||
OSi_IrqCallback: ; 0x037F878C
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r3, #1
|
||||
mov r2, r0, lsl #1
|
||||
ldr r1, _037F880C ; =_038075E4
|
||||
ldrh r1, [r1, r2]
|
||||
mov r5, r3, lsl r1
|
||||
mov r1, #12
|
||||
mul r4, r0, r1
|
||||
ldr r2, _037F8810 ; =OSi_IrqCallbackInfo
|
||||
ldr r1, [r2, r4]
|
||||
mov r0, #0
|
||||
str r0, [r2, r4]
|
||||
cmp r1, #0
|
||||
beq _037F87D8
|
||||
ldr r0, _037F8814 ; =_0380771C
|
||||
ldr r0, [r0, r4]
|
||||
mov lr, pc
|
||||
bx r1
|
||||
_037F87D8:
|
||||
ldr r1, _037F8818 ; =0x0380FFF8
|
||||
ldr r0, [r1]
|
||||
orr r0, r0, r5
|
||||
str r0, [r1]
|
||||
ldr r0, _037F881C ; =_03807718
|
||||
ldr r0, [r0, r4]
|
||||
cmp r0, #0
|
||||
bne _037F8800
|
||||
mov r0, r5
|
||||
bl OS_DisableIrqMask
|
||||
_037F8800:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F880C: .word _038075E4
|
||||
_037F8810: .word OSi_IrqCallbackInfo
|
||||
_037F8814: .word _0380771C
|
||||
_037F8818: .word 0x0380FFF8
|
||||
_037F881C: .word _03807718
|
||||
|
||||
arm_func_start OS_IrqDummy
|
||||
OS_IrqDummy: ; 0x037F8820
|
||||
bx lr
|
||||
147
arm7/asm/OS_message.s
Normal file
147
arm7/asm/OS_message.s
Normal file
@@ -0,0 +1,147 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_ReadMessage
|
||||
OS_ReadMessage: ; 0x037F980C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r7, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
and r8, r7, #1
|
||||
add r7, r6, #8
|
||||
b _037F9850
|
||||
_037F9830:
|
||||
cmp r8, #0
|
||||
bne _037F9848
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037F987C
|
||||
_037F9848:
|
||||
mov r0, r7
|
||||
bl OS_SleepThread
|
||||
_037F9850:
|
||||
ldr r0, [r6, #28]
|
||||
cmp r0, #0
|
||||
beq _037F9830
|
||||
cmp r5, #0
|
||||
ldrne r1, [r6, #16]
|
||||
ldrne r0, [r6, #24]
|
||||
ldrne r0, [r1, r0, lsl #2]
|
||||
strne r0, [r5]
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #1
|
||||
_037F987C:
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_ReceiveMessage
|
||||
OS_ReceiveMessage: ; 0x037F9884
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r7, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
and r8, r7, #1
|
||||
add r7, r6, #8
|
||||
b _037F98C8
|
||||
_037F98A8:
|
||||
cmp r8, #0
|
||||
bne _037F98C0
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037F991C
|
||||
_037F98C0:
|
||||
mov r0, r7
|
||||
bl OS_SleepThread
|
||||
_037F98C8:
|
||||
ldr r0, [r6, #28]
|
||||
cmp r0, #0
|
||||
beq _037F98A8
|
||||
cmp r5, #0
|
||||
ldrne r1, [r6, #16]
|
||||
ldrne r0, [r6, #24]
|
||||
ldrne r0, [r1, r0, lsl #2]
|
||||
strne r0, [r5]
|
||||
ldr r0, [r6, #24]
|
||||
add r0, r0, #1
|
||||
ldr r1, [r6, #20]
|
||||
bl _s32_div_f
|
||||
str r1, [r6, #24]
|
||||
ldr r0, [r6, #28]
|
||||
sub r0, r0, #1
|
||||
str r0, [r6, #28]
|
||||
mov r0, r6
|
||||
bl OS_WakeupThread
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #1
|
||||
_037F991C:
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_SendMessage
|
||||
OS_SendMessage: ; 0x037F9924
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r7, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
and r7, r7, #1
|
||||
b _037F9968
|
||||
_037F9948:
|
||||
cmp r7, #0
|
||||
bne _037F9960
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037F99AC
|
||||
_037F9960:
|
||||
mov r0, r6
|
||||
bl OS_SleepThread
|
||||
_037F9968:
|
||||
ldr r2, [r6, #28]
|
||||
ldr r1, [r6, #20]
|
||||
cmp r1, r2
|
||||
ble _037F9948
|
||||
ldr r0, [r6, #24]
|
||||
add r0, r0, r2
|
||||
bl _s32_div_f
|
||||
ldr r0, [r6, #16]
|
||||
str r5, [r0, r1, lsl #2]
|
||||
ldr r0, [r6, #28]
|
||||
add r0, r0, #1
|
||||
str r0, [r6, #28]
|
||||
add r0, r6, #8
|
||||
bl OS_WakeupThread
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #1
|
||||
_037F99AC:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_InitMessageQueue
|
||||
OS_InitMessageQueue: ; 0x037F99B8
|
||||
mov ip, #0
|
||||
str ip, [r0, #4]
|
||||
ldr r3, [r0, #4]
|
||||
str r3, [r0]
|
||||
str ip, [r0, #12]
|
||||
ldr r3, [r0, #12]
|
||||
str r3, [r0, #8]
|
||||
str r1, [r0, #16]
|
||||
str r2, [r0, #20]
|
||||
str ip, [r0, #24]
|
||||
str ip, [r0, #28]
|
||||
bx lr
|
||||
131
arm7/asm/OS_mutex.s
Normal file
131
arm7/asm/OS_mutex.s
Normal file
@@ -0,0 +1,131 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OSi_DequeueItem
|
||||
OSi_DequeueItem: ; 0x037F99E8
|
||||
ldr r2, [r1, #16]
|
||||
ldr r1, [r1, #20]
|
||||
cmp r2, #0
|
||||
streq r1, [r0, #112] ; 0x70
|
||||
strne r1, [r2, #20]
|
||||
cmp r1, #0
|
||||
streq r2, [r0, #108] ; 0x6c
|
||||
strne r2, [r1, #16]
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_EnqueueTail
|
||||
OSi_EnqueueTail: ; 0x037F9A0C
|
||||
ldr r2, [r0, #112] ; 0x70
|
||||
cmp r2, #0
|
||||
streq r1, [r0, #108] ; 0x6c
|
||||
strne r1, [r2, #16]
|
||||
str r2, [r1, #20]
|
||||
mov r2, #0
|
||||
str r2, [r1, #16]
|
||||
str r1, [r0, #112] ; 0x70
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_UnlockAllMutex
|
||||
OSi_UnlockAllMutex: ; 0x037F9A30
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0
|
||||
add r5, r6, #108 ; 0x6c
|
||||
mov r4, #0
|
||||
b _037F9A58
|
||||
_037F9A44:
|
||||
mov r0, r5
|
||||
bl OSi_RemoveMutexLinkFromQueue
|
||||
str r4, [r0, #12]
|
||||
str r4, [r0, #8]
|
||||
bl OS_WakeupThread
|
||||
_037F9A58:
|
||||
ldr r0, [r6, #108] ; 0x6c
|
||||
cmp r0, #0
|
||||
bne _037F9A44
|
||||
ldmia sp!, {r4, r5, r6, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_UnlockMutex
|
||||
OS_UnlockMutex: ; 0x037F9A6C
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r0, _037F9AD8 ; =OSi_ThreadInfo
|
||||
ldr r0, [r0, #4]
|
||||
ldr r1, [r5, #8]
|
||||
cmp r1, r0
|
||||
bne _037F9AC4
|
||||
ldr r1, [r5, #12]
|
||||
sub r1, r1, #1
|
||||
str r1, [r5, #12]
|
||||
ldr r1, [r5, #12]
|
||||
cmp r1, #0
|
||||
bne _037F9AC4
|
||||
mov r1, r5
|
||||
bl OSi_DequeueItem
|
||||
mov r0, #0
|
||||
str r0, [r5, #8]
|
||||
mov r0, r5
|
||||
bl OS_WakeupThread
|
||||
_037F9AC4:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F9AD8: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OS_LockMutex
|
||||
OS_LockMutex: ; 0x037F9ADC
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r0, _037F9B64 ; =OSi_ThreadInfo
|
||||
ldr r7, [r0, #4]
|
||||
mov r6, #0
|
||||
_037F9AFC:
|
||||
ldr r0, [r5, #8]
|
||||
cmp r0, #0
|
||||
bne _037F9B28
|
||||
str r7, [r5, #8]
|
||||
ldr r0, [r5, #12]
|
||||
add r0, r0, #1
|
||||
str r0, [r5, #12]
|
||||
mov r0, r7
|
||||
mov r1, r5
|
||||
bl OSi_EnqueueTail
|
||||
b _037F9B50
|
||||
_037F9B28:
|
||||
cmp r0, r7
|
||||
ldreq r0, [r5, #12]
|
||||
addeq r0, r0, #1
|
||||
streq r0, [r5, #12]
|
||||
beq _037F9B50
|
||||
str r5, [r7, #104] ; 0x68
|
||||
mov r0, r5
|
||||
bl OS_SleepThread
|
||||
str r6, [r7, #104] ; 0x68
|
||||
b _037F9AFC
|
||||
_037F9B50:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037F9B64: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OS_InitMutex
|
||||
OS_InitMutex: ; 0x037F9B68
|
||||
mov r2, #0
|
||||
str r2, [r0, #4]
|
||||
ldr r1, [r0, #4]
|
||||
str r1, [r0]
|
||||
str r2, [r0, #8]
|
||||
str r2, [r0, #12]
|
||||
bx lr
|
||||
272
arm7/asm/OS_spinLock.s
Normal file
272
arm7/asm/OS_spinLock.s
Normal file
@@ -0,0 +1,272 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_UnLockCartridge
|
||||
OS_UnLockCartridge: ; 0x037F8A18
|
||||
ldr r1, _037F8A20 ; =OS_UnlockCartridge
|
||||
bx r1
|
||||
_037F8A20: .word OS_UnlockCartridge
|
||||
|
||||
arm_func_start OS_GetLockID
|
||||
OS_GetLockID: ; 0x037F8A24
|
||||
ldr r3, _037F8AB4 ; =0x027FFFB8
|
||||
ldr r1, [r3]
|
||||
mov r2, #0
|
||||
mov r0, #-2147483648 ; 0x80000000
|
||||
_037F8A34:
|
||||
tst r1, r0
|
||||
bne _037F8A50
|
||||
add r2, r2, #1
|
||||
cmp r2, #32
|
||||
beq _037F8A50
|
||||
mov r0, r0, lsr #1
|
||||
b _037F8A34
|
||||
_037F8A50:
|
||||
cmp r2, #32
|
||||
movne r0, #128 ; 0x80
|
||||
bne _037F8A98
|
||||
add r3, r3, #4
|
||||
ldr r1, [r3]
|
||||
mov r2, #0
|
||||
mov r0, #-2147483648 ; 0x80000000
|
||||
_037F8A6C:
|
||||
tst r1, r0
|
||||
bne _037F8A88
|
||||
add r2, r2, #1
|
||||
cmp r2, #32
|
||||
beq _037F8A88
|
||||
mov r0, r0, lsr #1
|
||||
b _037F8A6C
|
||||
_037F8A88:
|
||||
cmp r2, #32
|
||||
ldr r0, _037F8AB8 ; =0xFFFFFFFD
|
||||
bxeq lr
|
||||
mov r0, #160 ; 0xa0
|
||||
_037F8A98:
|
||||
add r0, r0, r2
|
||||
mov r1, #-2147483648 ; 0x80000000
|
||||
mov r1, r1, lsr r2
|
||||
ldr r2, [r3]
|
||||
bic r2, r2, r1
|
||||
str r2, [r3]
|
||||
bx lr
|
||||
_037F8AB4: .word 0x027FFFB8
|
||||
_037F8AB8: .word 0xFFFFFFFD
|
||||
|
||||
arm_func_start OS_ReleaseLockID
|
||||
OS_ReleaseLockID: ; 0x037F8ABC
|
||||
ldr r3, _037F8AE8 ; =0x027FFFB8
|
||||
cmp r0, #160 ; 0xa0
|
||||
addpl r3, r3, #4
|
||||
subpl r0, r0, #160 ; 0xa0
|
||||
submi r0, r0, #128 ; 0x80
|
||||
mov r1, #-2147483648 ; 0x80000000
|
||||
mov r1, r1, lsr r0
|
||||
ldr r2, [r3]
|
||||
orr r2, r2, r1
|
||||
str r2, [r3]
|
||||
bx lr
|
||||
_037F8AE8: .word 0x027FFFB8
|
||||
|
||||
arm_func_start OS_ReadOwnerOfLockWord
|
||||
OS_ReadOwnerOfLockWord: ; 0x037F8AEC
|
||||
ldrh r0, [r0, #4]
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_FreeCartridgeBus
|
||||
OSi_FreeCartridgeBus: ;0x037F8AF4
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_AllocateCartridgeBus
|
||||
OSi_AllocateCartridgeBus: ;0x037F8AF8
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_TryLockCartridge
|
||||
OS_TryLockCartridge: ; 0x037F8AFC
|
||||
ldr r1, _037F8B10 ; =0x027FFFE8
|
||||
ldr r2, _037F8B14 ; =OSi_AllocateCartridgeBus
|
||||
mov r3, #1
|
||||
ldr ip, _037F8B18 ; =OSi_DoTryLockByWord
|
||||
bx ip
|
||||
_037F8B10: .word 0x027FFFE8
|
||||
_037F8B14: .word OSi_AllocateCartridgeBus
|
||||
_037F8B18: .word OSi_DoTryLockByWord
|
||||
|
||||
arm_func_start OS_UnlockCartridge
|
||||
OS_UnlockCartridge: ; 0x037F8B1C
|
||||
ldr r1, _037F8B30 ; =0x027FFFE8
|
||||
ldr r2, _037F8B34 ; =OSi_FreeCartridgeBus
|
||||
mov r3, #1
|
||||
ldr ip, _037F8B38 ; =OSi_DoUnlockByWord
|
||||
bx ip
|
||||
_037F8B30: .word 0x027FFFE8
|
||||
_037F8B34: .word OSi_FreeCartridgeBus
|
||||
_037F8B38: .word OSi_DoUnlockByWord
|
||||
|
||||
arm_func_start OS_LockCartridge
|
||||
OS_LockCartridge: ; 0x037F8B3C
|
||||
ldr r1, _037F8B50 ; =0x027FFFE8
|
||||
ldr r2, _037F8B54 ; =OSi_AllocateCartridgeBus
|
||||
mov r3, #1
|
||||
ldr ip, _037F8B58 ; =OSi_DoLockByWord
|
||||
bx ip
|
||||
_037F8B50: .word 0x027FFFE8
|
||||
_037F8B54: .word OSi_AllocateCartridgeBus
|
||||
_037F8B58: .word OSi_DoLockByWord
|
||||
|
||||
arm_func_start OSi_DoTryLockByWord
|
||||
OSi_DoTryLockByWord: ; 0x037F8B5C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
sub sp, sp, #4
|
||||
mov r9, r0
|
||||
mov r8, r1
|
||||
mov r7, r2
|
||||
movs r6, r3
|
||||
beq _037F8B84
|
||||
bl OS_DisableInterrupts_IrqAndFiq
|
||||
mov r5, r0
|
||||
b _037F8B8C
|
||||
_037F8B84:
|
||||
bl OS_DisableInterrupts
|
||||
mov r5, r0
|
||||
_037F8B8C:
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
bl MI_SwapWord
|
||||
movs r4, r0
|
||||
bne _037F8BB4
|
||||
cmp r7, #0
|
||||
beq _037F8BB0
|
||||
mov lr, pc
|
||||
bx r7
|
||||
_037F8BB0:
|
||||
strh r9, [r8, #4]
|
||||
_037F8BB4:
|
||||
cmp r6, #0
|
||||
beq _037F8BC8
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts_IrqAndFiq
|
||||
b _037F8BD0
|
||||
_037F8BC8:
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts
|
||||
_037F8BD0:
|
||||
mov r0, r4
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_DoUnlockByWord
|
||||
OSi_DoUnlockByWord: ; 0x037F8BE0
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r7, r1
|
||||
mov r6, r2
|
||||
mov r5, r3
|
||||
ldrh r1, [r7, #4]
|
||||
cmp r0, r1
|
||||
mvnne r0, #1
|
||||
bne _037F8C60
|
||||
cmp r5, #0
|
||||
beq _037F8C18
|
||||
bl OS_DisableInterrupts_IrqAndFiq
|
||||
mov r4, r0
|
||||
b _037F8C20
|
||||
_037F8C18:
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
_037F8C20:
|
||||
mov r0, #0
|
||||
strh r0, [r7, #4]
|
||||
cmp r6, #0
|
||||
beq _037F8C38
|
||||
mov lr, pc
|
||||
bx r6
|
||||
_037F8C38:
|
||||
mov r0, #0
|
||||
str r0, [r7]
|
||||
cmp r5, #0
|
||||
beq _037F8C54
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts_IrqAndFiq
|
||||
b _037F8C5C
|
||||
_037F8C54:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
_037F8C5C:
|
||||
mov r0, #0
|
||||
_037F8C60:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_DoLockByWord
|
||||
OSi_DoLockByWord: ; 0x037F8C6C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
mov r6, r2
|
||||
mov r5, r3
|
||||
mov r4, #1024 ; 0x400
|
||||
b _037F8C90
|
||||
_037F8C88:
|
||||
mov r0, r4
|
||||
bl FUN_037F8CB4
|
||||
_037F8C90:
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, r6
|
||||
mov r3, r5
|
||||
bl OSi_DoTryLockByWord
|
||||
cmp r0, #0
|
||||
bgt _037F8C88
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start FUN_037F8CB4
|
||||
FUN_037F8CB4: ; 0x037F8CB4 ;part of the above func?
|
||||
ldr ip, _037F8CBC ; =SVC_WaitByLoop
|
||||
bx ip
|
||||
_037F8CBC: .word SVC_WaitByLoop
|
||||
|
||||
arm_func_start OS_InitLock
|
||||
OS_InitLock: ; 0x037F8CC0
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037F8D38 ; =_03807780
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _037F8D2C
|
||||
mov r1, #1
|
||||
str r1, [r0]
|
||||
mov r0, #0
|
||||
ldr r4, _037F8D3C ; =0x027FFFF0
|
||||
strh r0, [r4, #6]
|
||||
mov r5, #1024 ; 0x400
|
||||
b _037F8CFC
|
||||
_037F8CF4:
|
||||
mov r0, r5
|
||||
bl FUN_037F8CB4
|
||||
_037F8CFC:
|
||||
ldrh r0, [r4, #4]
|
||||
cmp r0, #127 ; 0x7f
|
||||
bne _037F8CF4
|
||||
mvn r1, #0
|
||||
ldr r0, _037F8D40 ; =0x027FFFB8
|
||||
str r1, [r0]
|
||||
mov r0, #65536 ; 0x10000
|
||||
rsb r1, r0, #0
|
||||
ldr r0, _037F8D44 ; =0x027FFFBC
|
||||
str r1, [r0]
|
||||
mov r0, #191 ; 0xbf
|
||||
strh r0, [r4, #6]
|
||||
_037F8D2C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F8D38: .word _03807780
|
||||
_037F8D3C: .word 0x027FFFF0
|
||||
_037F8D40: .word 0x027FFFB8
|
||||
_037F8D44: .word 0x027FFFBC
|
||||
767
arm7/asm/OS_thread.s
Normal file
767
arm7/asm/OS_thread.s
Normal file
@@ -0,0 +1,767 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_SetThreadDestructor
|
||||
OS_SetThreadDestructor: ; 0x037F8D48
|
||||
str r1, [r0, #152] ; 0x98
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_EnableScheduler
|
||||
OS_EnableScheduler: ; 0x037F8D50
|
||||
stmdb sp!, {r4, lr}
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, #0
|
||||
ldr r1, _037F8D84 ; =OSi_RescheduleCount
|
||||
ldr r3, [r1]
|
||||
cmp r3, #0
|
||||
subne r2, r3, #1
|
||||
strne r2, [r1]
|
||||
movne r4, r3
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
_037F8D84: .word OSi_RescheduleCount
|
||||
|
||||
arm_func_start OS_DisableScheduler
|
||||
OS_DisableScheduler: ; 0x037F8D88
|
||||
stmdb sp!, {r4, lr}
|
||||
bl OS_DisableInterrupts
|
||||
ldr r2, _037F8DBC ; =OSi_RescheduleCount
|
||||
ldr r3, [r2]
|
||||
mvn r1, #0
|
||||
cmp r3, r1
|
||||
addcc r1, r3, #1
|
||||
strcc r1, [r2]
|
||||
movcc r4, r3
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
_037F8DBC: .word OSi_RescheduleCount
|
||||
|
||||
arm_func_start OS_SetSwitchThreadCallback
|
||||
OS_SetSwitchThreadCallback: ; 0x037F8DC0
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F8DF0 ; =OSi_ThreadInfo
|
||||
ldr r4, [r1, #12]
|
||||
str r5, [r1, #12]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F8DF0: .word OSi_ThreadInfo
|
||||
_037F8DF4:
|
||||
ldr r2, [r0]
|
||||
mov r1, #0
|
||||
str r1, [r0]
|
||||
str r1, [r2, #148] ; 0x94
|
||||
mov r0, r2
|
||||
ldr ip, _037F8E10 ; =OS_WakeupThreadDirect
|
||||
bx ip
|
||||
_037F8E10: .word OS_WakeupThreadDirect
|
||||
|
||||
arm_func_start OS_Sleep
|
||||
OS_Sleep: ; 0x037F8E14
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #52 ; 0x34
|
||||
mov r5, r0
|
||||
add r0, sp, #8
|
||||
bl OS_CreateAlarm
|
||||
ldr r0, _037F8EAC ; =OSi_CurrentThreadPtr
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0]
|
||||
str r0, [sp, #4]
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
add r0, sp, #8
|
||||
ldr r1, [sp, #4]
|
||||
str r0, [r1, #148] ; 0x94
|
||||
add r1, sp, #4
|
||||
str r1, [sp]
|
||||
mov r2, #0
|
||||
ldr r1, _037F8EB0 ; =0x000082EA
|
||||
umull ip, r3, r5, r1
|
||||
mla r3, r5, r2, r3
|
||||
mla r3, r2, r1, r3
|
||||
mov r2, r3, lsr #6
|
||||
mov r1, ip, lsr #6
|
||||
orr r1, r1, r3, lsl #26
|
||||
ldr r3, _037F8EB4 ; =_037F8DF4
|
||||
bl OS_SetAlarm
|
||||
mov r5, #0
|
||||
b _037F8E8C
|
||||
_037F8E84:
|
||||
mov r0, r5
|
||||
bl OS_SleepThread
|
||||
_037F8E8C:
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
bne _037F8E84
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #52 ; 0x34
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F8EAC: .word OSi_CurrentThreadPtr
|
||||
_037F8EB0: .word 0x000082EA
|
||||
_037F8EB4: .word _037F8DF4
|
||||
|
||||
arm_func_start OS_SetThreadPriority
|
||||
OS_SetThreadPriority: ; 0x037F8EB8
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
ldr r0, _037F8F60 ; =OSi_ThreadInfo
|
||||
ldr r8, [r0, #8]
|
||||
mov r7, #0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
b _037F8EE4
|
||||
_037F8EDC:
|
||||
mov r7, r8
|
||||
ldr r8, [r8, #76] ; 0x4c
|
||||
_037F8EE4:
|
||||
cmp r8, #0
|
||||
beq _037F8EF4
|
||||
cmp r8, r6
|
||||
bne _037F8EDC
|
||||
_037F8EF4:
|
||||
cmp r8, #0
|
||||
beq _037F8F08
|
||||
ldr r0, _037F8F64 ; =OSi_IdleThread
|
||||
cmp r8, r0
|
||||
bne _037F8F18
|
||||
_037F8F08:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037F8F58
|
||||
_037F8F18:
|
||||
ldr r0, [r8, #84] ; 0x54
|
||||
cmp r0, r5
|
||||
beq _037F8F4C
|
||||
cmp r7, #0
|
||||
ldreq r1, [r6, #76] ; 0x4c
|
||||
ldreq r0, _037F8F60 ; =OSi_ThreadInfo
|
||||
streq r1, [r0, #8]
|
||||
ldrne r0, [r6, #76] ; 0x4c
|
||||
strne r0, [r7, #76] ; 0x4c
|
||||
str r5, [r6, #84] ; 0x54
|
||||
mov r0, r6
|
||||
bl OSi_InsertThreadToList
|
||||
bl OSi_RescheduleThread
|
||||
_037F8F4C:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #1
|
||||
_037F8F58:
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037F8F60: .word OSi_ThreadInfo
|
||||
_037F8F64: .word OSi_IdleThread
|
||||
|
||||
arm_func_start OS_RescheduleThread
|
||||
OS_RescheduleThread: ; 0x037F8F68
|
||||
stmdb sp!, {r4, lr}
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
bl OSi_RescheduleThread
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_SelectThread
|
||||
OS_SelectThread: ; 0x037F8F88
|
||||
ldr r0, _037F8FB0 ; =OSi_ThreadInfo
|
||||
ldr r0, [r0, #8]
|
||||
b _037F8F98
|
||||
_037F8F94:
|
||||
ldr r0, [r0, #76] ; 0x4c
|
||||
_037F8F98:
|
||||
cmp r0, #0
|
||||
bxeq lr
|
||||
ldr r1, [r0, #72] ; 0x48
|
||||
cmp r1, #1
|
||||
bne _037F8F94
|
||||
bx lr
|
||||
_037F8FB0: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OS_WakeupThreadDirect
|
||||
OS_WakeupThreadDirect: ; 0x037F8FB4
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
mov r0, #1
|
||||
str r0, [r5, #72] ; 0x48
|
||||
bl OSi_RescheduleThread
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_WakeupThread
|
||||
OS_WakeupThread: ; 0x037F8FE8
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r0, [r5]
|
||||
cmp r0, #0
|
||||
beq _037F9050
|
||||
mov r7, #1
|
||||
mov r6, #0
|
||||
b _037F9030
|
||||
_037F9014:
|
||||
mov r0, r5
|
||||
bl OSi_RemoveLinkFromQueue
|
||||
str r7, [r0, #72] ; 0x48
|
||||
str r6, [r0, #92] ; 0x5c
|
||||
str r6, [r0, #100] ; 0x64
|
||||
ldr r1, [r0, #100] ; 0x64
|
||||
str r1, [r0, #96] ; 0x60
|
||||
_037F9030:
|
||||
ldr r0, [r5]
|
||||
cmp r0, #0
|
||||
bne _037F9014
|
||||
mov r0, #0
|
||||
str r0, [r5, #4]
|
||||
ldr r0, [r5, #4]
|
||||
str r0, [r5]
|
||||
bl OSi_RescheduleThread
|
||||
_037F9050:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_SleepThread
|
||||
OS_SleepThread: ; 0x037F9064
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r5, r0
|
||||
ldr r0, _037F90B4 ; =OSi_CurrentThreadPtr
|
||||
ldr r0, [r0]
|
||||
ldr r4, [r0]
|
||||
cmp r6, #0
|
||||
beq _037F9098
|
||||
str r6, [r4, #92] ; 0x5c
|
||||
mov r0, r6
|
||||
mov r1, r4
|
||||
bl OSi_InsertLinkToQueue
|
||||
_037F9098:
|
||||
mov r0, #0
|
||||
str r0, [r4, #72] ; 0x48
|
||||
bl OSi_RescheduleThread
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts
|
||||
ldmia sp!, {r4, r5, r6, lr}
|
||||
bx lr
|
||||
_037F90B4: .word OSi_CurrentThreadPtr
|
||||
|
||||
arm_func_start OS_IsThreadTerminated
|
||||
OS_IsThreadTerminated: ; 0x037F90B8
|
||||
ldr r0, [r0, #72] ; 0x48
|
||||
cmp r0, #2
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
bx lr
|
||||
|
||||
arm_func_start OS_JoinThread
|
||||
OS_JoinThread: ; 0x037F90CC
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r0, [r5, #72] ; 0x48
|
||||
cmp r0, #2
|
||||
beq _037F90F4
|
||||
add r0, r5, #128 ; 0x80
|
||||
bl OS_SleepThread
|
||||
_037F90F4:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_ExitThread_Destroy
|
||||
OSi_ExitThread_Destroy: ; 0x037F9108
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r0, _037F9164 ; =OSi_CurrentThreadPtr
|
||||
ldr r0, [r0]
|
||||
ldr r4, [r0]
|
||||
bl OS_DisableScheduler
|
||||
mov r0, r4
|
||||
bl OSi_UnlockAllMutex
|
||||
ldr r0, [r4, #92] ; 0x5c
|
||||
cmp r0, #0
|
||||
beq _037F9138
|
||||
mov r1, r4
|
||||
bl OSi_RemoveSpecifiedLinkFromQueue
|
||||
_037F9138:
|
||||
mov r0, r4
|
||||
bl OSi_RemoveThreadFromList
|
||||
mov r0, #2
|
||||
str r0, [r4, #72] ; 0x48
|
||||
add r0, r4, #128 ; 0x80
|
||||
bl OS_WakeupThread
|
||||
bl OS_EnableScheduler
|
||||
bl OS_RescheduleThread
|
||||
bl FUN_037FB1F0
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
_037F9164: .word OSi_CurrentThreadPtr
|
||||
|
||||
arm_func_start OSi_ExitThread
|
||||
OSi_ExitThread: ; 0x037F9168
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037F91AC ; =OSi_CurrentThreadPtr
|
||||
ldr r1, [r1]
|
||||
ldr r3, [r1]
|
||||
ldr r2, [r3, #152] ; 0x98
|
||||
cmp r2, #0
|
||||
beq _037F919C
|
||||
mov r1, #0
|
||||
str r1, [r3, #152] ; 0x98
|
||||
mov lr, pc
|
||||
bx r2
|
||||
bl OS_DisableInterrupts
|
||||
_037F919C:
|
||||
bl OSi_ExitThread_Destroy
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F91AC: .word OSi_CurrentThreadPtr
|
||||
|
||||
arm_func_start OSi_ExitThread_ArgSpecified
|
||||
OSi_ExitThread_ArgSpecified: ; 0x037F91B0
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
ldr r1, _037F9210 ; =OSi_StackForDestructor
|
||||
ldr r2, [r1]
|
||||
cmp r2, #0
|
||||
beq _037F91FC
|
||||
ldr r1, _037F9214 ; =OSi_ExitThread
|
||||
bl OS_InitContext
|
||||
str r4, [r5, #4]
|
||||
ldr r0, [r5]
|
||||
orr r0, r0, #128 ; 0x80
|
||||
str r0, [r5]
|
||||
mov r0, #1
|
||||
str r0, [r5, #72] ; 0x48
|
||||
mov r0, r5
|
||||
bl OS_LoadContext
|
||||
b _037F9204
|
||||
_037F91FC:
|
||||
mov r0, r4
|
||||
bl OSi_ExitThread
|
||||
_037F9204:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037F9210: .word OSi_StackForDestructor
|
||||
_037F9214: .word OSi_ExitThread
|
||||
|
||||
arm_func_start OS_ExitThread
|
||||
OS_ExitThread: ; 0x037F9218
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
bl OS_DisableInterrupts
|
||||
ldr r0, _037F9240 ; =OSi_ThreadInfo
|
||||
ldr r0, [r0, #4]
|
||||
mov r1, #0
|
||||
bl OSi_ExitThread_ArgSpecified
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F9240: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OS_CreateThread
|
||||
OS_CreateThread: ; 0x037F9244
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
sub sp, sp, #4
|
||||
mov r9, r0
|
||||
mov r8, r1
|
||||
mov r7, r2
|
||||
mov r6, r3
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
bl OSi_GetUnusedThreadId
|
||||
ldr r1, [sp, #36] ; 0x24
|
||||
str r1, [r9, #84] ; 0x54
|
||||
str r0, [r9, #80] ; 0x50
|
||||
mov r0, #0
|
||||
str r0, [r9, #72] ; 0x48
|
||||
str r0, [r9, #88] ; 0x58
|
||||
mov r0, r9
|
||||
bl OSi_InsertThreadToList
|
||||
str r6, [r9, #120] ; 0x78
|
||||
ldr r0, [sp, #32]
|
||||
sub r5, r6, r0
|
||||
str r5, [r9, #116] ; 0x74
|
||||
mov r2, #0
|
||||
str r2, [r9, #124] ; 0x7c
|
||||
ldr r1, _037F9348 ; =0xD73BFDF7
|
||||
ldr r0, [r9, #120] ; 0x78
|
||||
str r1, [r0, #-4]
|
||||
ldr r1, _037F934C ; =0xFBDD37BB
|
||||
ldr r0, [r9, #116] ; 0x74
|
||||
str r1, [r0]
|
||||
str r2, [r9, #132] ; 0x84
|
||||
ldr r0, [r9, #132] ; 0x84
|
||||
str r0, [r9, #128] ; 0x80
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
sub r2, r6, #4
|
||||
bl OS_InitContext
|
||||
str r7, [r9, #4]
|
||||
ldr r0, _037F9350 ; =OS_ExitThread
|
||||
str r0, [r9, #60] ; 0x3c
|
||||
mov r0, #0
|
||||
add r1, r5, #4
|
||||
ldr r2, [sp, #32]
|
||||
sub r2, r2, #8
|
||||
bl MIi_CpuClear32
|
||||
mov r1, #0
|
||||
str r1, [r9, #104] ; 0x68
|
||||
str r1, [r9, #108] ; 0x6c
|
||||
str r1, [r9, #112] ; 0x70
|
||||
mov r0, r9
|
||||
bl OS_SetThreadDestructor
|
||||
mov r0, #0
|
||||
str r0, [r9, #92] ; 0x5c
|
||||
str r0, [r9, #100] ; 0x64
|
||||
ldr r1, [r9, #100] ; 0x64
|
||||
str r1, [r9, #96] ; 0x60
|
||||
add r1, r9, #136 ; 0x88
|
||||
mov r2, #12
|
||||
bl MIi_CpuClear32
|
||||
mov r0, #0
|
||||
str r0, [r9, #148] ; 0x94
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
|
||||
bx lr
|
||||
_037F9348: .word 0xD73BFDF7
|
||||
_037F934C: .word 0xFBDD37BB
|
||||
_037F9350: .word OS_ExitThread
|
||||
|
||||
arm_func_start OS_InitThread
|
||||
OS_InitThread: ; 0x037F9354
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037F942C ; =OSi_IsThreadInitialized
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _037F9420
|
||||
mov r2, #1
|
||||
str r2, [r0]
|
||||
ldr r1, _037F9430 ; =_038077A0
|
||||
ldr r0, _037F9434 ; =OSi_CurrentThreadPtr
|
||||
str r1, [r0]
|
||||
mov r0, #16
|
||||
ldr r1, _037F9438 ; =OSi_LauncherThread
|
||||
str r0, [r1, #84] ; 0x54
|
||||
mov r0, #0
|
||||
str r0, [r1, #80] ; 0x50
|
||||
str r2, [r1, #72] ; 0x48
|
||||
str r0, [r1, #76] ; 0x4c
|
||||
str r0, [r1, #88] ; 0x58
|
||||
ldr r0, _037F943C ; =OSi_ThreadInfo
|
||||
str r1, [r0, #8]
|
||||
str r1, [r0, #4]
|
||||
ldr r2, _037F9440 ; =0x00000400
|
||||
cmp r2, #0
|
||||
ldrle r0, _037F9444 ; =FUN_037F8000
|
||||
suble r2, r0, r2
|
||||
ldrgt r1, _037F9448 ; =0x00000400
|
||||
ldrgt r0, _037F944C ; =0x0380FF80
|
||||
subgt r0, r0, r1
|
||||
subgt r2, r0, r2
|
||||
ldr r1, _037F9448 ; =0x00000400
|
||||
ldr r0, _037F944C ; =0x0380FF80
|
||||
sub r3, r0, r1
|
||||
ldr r1, _037F9438 ; =OSi_LauncherThread
|
||||
str r3, [r1, #120] ; 0x78
|
||||
str r2, [r1, #116] ; 0x74
|
||||
mov r0, #0
|
||||
str r0, [r1, #124] ; 0x7c
|
||||
ldr r2, _037F9450 ; =0xD73BFDF7
|
||||
str r2, [r3, #-4]
|
||||
ldr r3, _037F9454 ; =0xFBDD37BB
|
||||
ldr r2, [r1, #116] ; 0x74
|
||||
str r3, [r2]
|
||||
str r0, [r1, #132] ; 0x84
|
||||
str r0, [r1, #128] ; 0x80
|
||||
ldr r1, _037F943C ; =OSi_ThreadInfo
|
||||
strh r0, [r1]
|
||||
strh r0, [r1, #2]
|
||||
ldr r2, _037F9458 ; =0x027FFFA4
|
||||
str r1, [r2]
|
||||
bl OS_SetSwitchThreadCallback
|
||||
_037F9420:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F942C: .word OSi_IsThreadInitialized
|
||||
_037F9430: .word _038077A0
|
||||
_037F9434: .word OSi_CurrentThreadPtr
|
||||
_037F9438: .word OSi_LauncherThread
|
||||
_037F943C: .word OSi_ThreadInfo
|
||||
_037F9440: .word 0x00000400
|
||||
_037F9444: .word FUN_037F8000
|
||||
_037F9448: .word 0x00000400
|
||||
_037F944C: .word 0x0380FF80
|
||||
_037F9450: .word 0xD73BFDF7
|
||||
_037F9454: .word 0xFBDD37BB
|
||||
_037F9458: .word 0x027FFFA4
|
||||
|
||||
arm_func_start OSi_RescheduleThread
|
||||
OSi_RescheduleThread: ; 0x037F945C
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r0, _037F952C ; =OSi_RescheduleCount
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _037F9524
|
||||
ldr r4, _037F9530 ; =OSi_ThreadInfo
|
||||
ldrh r0, [r4, #2]
|
||||
cmp r0, #0
|
||||
bne _037F948C
|
||||
bl OS_GetProcMode
|
||||
cmp r0, #18
|
||||
bne _037F9498
|
||||
_037F948C:
|
||||
mov r0, #1
|
||||
strh r0, [r4]
|
||||
b _037F9524
|
||||
_037F9498:
|
||||
ldr r0, _037F9534 ; =OSi_CurrentThreadPtr
|
||||
ldr r0, [r0]
|
||||
ldr r6, [r0]
|
||||
bl OS_SelectThread
|
||||
mov r5, r0
|
||||
cmp r6, r5
|
||||
beq _037F9524
|
||||
cmp r5, #0
|
||||
beq _037F9524
|
||||
ldr r0, [r6, #72] ; 0x48
|
||||
cmp r0, #2
|
||||
beq _037F94D8
|
||||
mov r0, r6
|
||||
bl OS_SaveContext
|
||||
cmp r0, #0
|
||||
bne _037F9524
|
||||
_037F94D8:
|
||||
ldr r0, _037F9538 ; =OSi_SystemCallbackInSwitchThread
|
||||
ldr r2, [r0]
|
||||
cmp r2, #0
|
||||
beq _037F94F8
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov lr, pc
|
||||
bx r2
|
||||
_037F94F8:
|
||||
ldr r2, [r4, #12]
|
||||
cmp r2, #0
|
||||
beq _037F9514
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov lr, pc
|
||||
bx r2
|
||||
_037F9514:
|
||||
ldr r0, _037F9530 ; =OSi_ThreadInfo
|
||||
str r5, [r0, #4]
|
||||
mov r0, r5
|
||||
bl OS_LoadContext
|
||||
_037F9524:
|
||||
ldmia sp!, {r4, r5, r6, lr}
|
||||
bx lr
|
||||
_037F952C: .word OSi_RescheduleCount
|
||||
_037F9530: .word OSi_ThreadInfo
|
||||
_037F9534: .word OSi_CurrentThreadPtr
|
||||
_037F9538: .word OSi_SystemCallbackInSwitchThread
|
||||
|
||||
arm_func_start OSi_RemoveThreadFromList
|
||||
OSi_RemoveThreadFromList: ; 0x037F953C
|
||||
ldr r1, _037F9580 ; =OSi_ThreadInfo
|
||||
ldr r2, [r1, #8]
|
||||
mov r1, #0
|
||||
b _037F9554
|
||||
_037F954C:
|
||||
mov r1, r2
|
||||
ldr r2, [r2, #76] ; 0x4c
|
||||
_037F9554:
|
||||
cmp r2, #0
|
||||
beq _037F9564
|
||||
cmp r2, r0
|
||||
bne _037F954C
|
||||
_037F9564:
|
||||
cmp r1, #0
|
||||
ldreq r1, [r0, #76] ; 0x4c
|
||||
ldreq r0, _037F9580 ; =OSi_ThreadInfo
|
||||
streq r1, [r0, #8]
|
||||
ldrne r0, [r0, #76] ; 0x4c
|
||||
strne r0, [r1, #76] ; 0x4c
|
||||
bx lr
|
||||
_037F9580: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OSi_InsertThreadToList
|
||||
OSi_InsertThreadToList: ; 0x037F9584
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037F95E8 ; =OSi_ThreadInfo
|
||||
ldr r3, [r1, #8]
|
||||
mov lr, r3
|
||||
mov ip, #0
|
||||
b _037F95A8
|
||||
_037F95A0:
|
||||
mov ip, lr
|
||||
ldr lr, [lr, #76] ; 0x4c
|
||||
_037F95A8:
|
||||
cmp lr, #0
|
||||
beq _037F95C0
|
||||
ldr r2, [lr, #84] ; 0x54
|
||||
ldr r1, [r0, #84] ; 0x54
|
||||
cmp r2, r1
|
||||
bcc _037F95A0
|
||||
_037F95C0:
|
||||
cmp ip, #0
|
||||
streq r3, [r0, #76] ; 0x4c
|
||||
ldreq r1, _037F95E8 ; =OSi_ThreadInfo
|
||||
streq r0, [r1, #8]
|
||||
ldrne r1, [ip, #76] ; 0x4c
|
||||
strne r1, [r0, #76] ; 0x4c
|
||||
strne r0, [ip, #76] ; 0x4c
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F95E8: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start OSi_RemoveMutexLinkFromQueue
|
||||
OSi_RemoveMutexLinkFromQueue: ; 0x037F95EC
|
||||
ldr r2, [r0]
|
||||
cmp r2, #0
|
||||
beq _037F9614
|
||||
ldr r1, [r2, #16]
|
||||
str r1, [r0]
|
||||
cmp r1, #0
|
||||
movne r0, #0
|
||||
strne r0, [r1, #20]
|
||||
moveq r1, #0
|
||||
streq r1, [r0, #4]
|
||||
_037F9614:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_RemoveSpecifiedLinkFromQueue
|
||||
OSi_RemoveSpecifiedLinkFromQueue: ; 0x037F961C
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r2, [r0]
|
||||
mov lr, r2
|
||||
b _037F9664
|
||||
_037F9630:
|
||||
ldr ip, [lr, #100] ; 0x64
|
||||
cmp lr, r1
|
||||
bne _037F9660
|
||||
ldr r3, [lr, #96] ; 0x60
|
||||
cmp r2, lr
|
||||
streq ip, [r0]
|
||||
strne ip, [r3, #100] ; 0x64
|
||||
ldr r1, [r0, #4]
|
||||
cmp r1, lr
|
||||
streq r3, [r0, #4]
|
||||
strne r3, [ip, #96] ; 0x60
|
||||
b _037F966C
|
||||
_037F9660:
|
||||
mov lr, ip
|
||||
_037F9664:
|
||||
cmp lr, #0
|
||||
bne _037F9630
|
||||
_037F966C:
|
||||
mov r0, lr
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_RemoveLinkFromQueue
|
||||
OSi_RemoveLinkFromQueue: ; 0x037F967C
|
||||
ldr r2, [r0]
|
||||
cmp r2, #0
|
||||
beq _037F96A8
|
||||
ldr r1, [r2, #100] ; 0x64
|
||||
str r1, [r0]
|
||||
cmp r1, #0
|
||||
movne r0, #0
|
||||
strne r0, [r1, #96] ; 0x60
|
||||
moveq r1, #0
|
||||
streq r1, [r0, #4]
|
||||
streq r1, [r2, #92] ; 0x5c
|
||||
_037F96A8:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_InsertLinkToQueue
|
||||
OSi_InsertLinkToQueue: ; 0x037F96B0
|
||||
ldr ip, [r0]
|
||||
b _037F96C4
|
||||
_037F96B8:
|
||||
cmp ip, r1
|
||||
bxeq lr
|
||||
ldr ip, [ip, #100] ; 0x64
|
||||
_037F96C4:
|
||||
cmp ip, #0
|
||||
beq _037F96DC
|
||||
ldr r3, [ip, #84] ; 0x54
|
||||
ldr r2, [r1, #84] ; 0x54
|
||||
cmp r3, r2
|
||||
bls _037F96B8
|
||||
_037F96DC:
|
||||
cmp ip, #0
|
||||
bne _037F9708
|
||||
ldr r2, [r0, #4]
|
||||
cmp r2, #0
|
||||
streq r1, [r0]
|
||||
strne r1, [r2, #100] ; 0x64
|
||||
str r2, [r1, #96] ; 0x60
|
||||
mov r2, #0
|
||||
str r2, [r1, #100] ; 0x64
|
||||
str r1, [r0, #4]
|
||||
bx lr
|
||||
_037F9708:
|
||||
ldr r2, [ip, #96] ; 0x60
|
||||
cmp r2, #0
|
||||
streq r1, [r0]
|
||||
strne r1, [r2, #100] ; 0x64
|
||||
str r2, [r1, #96] ; 0x60
|
||||
str ip, [r1, #100] ; 0x64
|
||||
str r1, [ip, #96] ; 0x60
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_GetUnusedThreadId
|
||||
OSi_GetUnusedThreadId: ; 0x037F9728
|
||||
ldr r1, _037F973C ; =_0380778C
|
||||
ldr r0, [r1]
|
||||
add r0, r0, #1
|
||||
str r0, [r1]
|
||||
bx lr
|
||||
_037F973C: .word _0380778C
|
||||
138
arm7/asm/OS_tick.s
Normal file
138
arm7/asm/OS_tick.s
Normal file
@@ -0,0 +1,138 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_GetTick
|
||||
OS_GetTick: ; 0x037FA364
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #12
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA404 ; =0x04000100
|
||||
ldrh r1, [r1]
|
||||
strh r1, [sp]
|
||||
ldr r1, _037FA408 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r3, [r1, #4]
|
||||
ldr r2, _037FA40C ; =0x0000FFFF
|
||||
mvn r1, #0
|
||||
and r2, r3, r2
|
||||
and r1, ip, r1
|
||||
str r1, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
ldr r1, _037FA410 ; =0x04000214
|
||||
ldr r1, [r1]
|
||||
ands r1, r1, #8
|
||||
beq _037FA3D8
|
||||
ldrh r1, [sp]
|
||||
ands r1, r1, #32768 ; 0x8000
|
||||
bne _037FA3D8
|
||||
ldr r3, [sp, #4]
|
||||
ldr r2, [sp, #8]
|
||||
mov r1, #1
|
||||
adds r3, r3, r1
|
||||
adc r1, r2, #0
|
||||
str r3, [sp, #4]
|
||||
str r1, [sp, #8]
|
||||
_037FA3D8:
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r2, [sp, #4]
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, r0, lsl #16
|
||||
orr r1, r1, r2, lsr #16
|
||||
ldrh r0, [sp]
|
||||
orr r1, r1, r0, asr #31
|
||||
orr r0, r0, r2, lsl #16
|
||||
add sp, sp, #12
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA404: .word 0x04000100
|
||||
_037FA408: .word OSi_TickCounter
|
||||
_037FA40C: .word 0x0000FFFF
|
||||
_037FA410: .word 0x04000214
|
||||
|
||||
arm_func_start OSi_CountUpTick
|
||||
OSi_CountUpTick: ; 0x037FA414
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037FA488 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r2, [r1, #4]
|
||||
mov r3, #0
|
||||
mov r0, #1
|
||||
adds ip, ip, r0
|
||||
adc r0, r2, #0
|
||||
str ip, [r1]
|
||||
str r0, [r1, #4]
|
||||
ldr r0, _037FA48C ; =OSi_NeedResetTimer
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _037FA46C
|
||||
ldr r2, _037FA490 ; =0x04000102
|
||||
strh r3, [r2]
|
||||
ldr r1, _037FA494 ; =0x04000100
|
||||
strh r3, [r1]
|
||||
mov r1, #193 ; 0xc1
|
||||
strh r1, [r2]
|
||||
str r3, [r0]
|
||||
_037FA46C:
|
||||
mov r0, #0
|
||||
ldr r1, _037FA498 ; =OSi_CountUpTick
|
||||
mov r2, r0
|
||||
bl OSi_EnterTimerCallback
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA488: .word OSi_TickCounter
|
||||
_037FA48C: .word OSi_NeedResetTimer
|
||||
_037FA490: .word 0x04000102
|
||||
_037FA494: .word 0x04000100
|
||||
_037FA498: .word OSi_CountUpTick
|
||||
|
||||
arm_func_start OS_IsTickAvailable
|
||||
OS_IsTickAvailable: ; 0x037FA49C
|
||||
ldr r0, _037FA4A8 ; =_03807920
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
_037FA4A8: .word _03807920
|
||||
|
||||
arm_func_start OS_InitTick
|
||||
OS_InitTick: ; 0x037FA4AC
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037FA528 ; =_03807920
|
||||
ldrh r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _037FA51C
|
||||
mov r1, #1
|
||||
strh r1, [r0]
|
||||
mov r0, #0
|
||||
bl OSi_SetTimerReserved
|
||||
mov r2, #0
|
||||
ldr r0, _037FA52C ; =OSi_TickCounter
|
||||
str r2, [r0]
|
||||
str r2, [r0, #4]
|
||||
ldr r1, _037FA530 ; =0x04000102
|
||||
strh r2, [r1]
|
||||
ldr r0, _037FA534 ; =0x04000100
|
||||
strh r2, [r0]
|
||||
mov r0, #193 ; 0xc1
|
||||
strh r0, [r1]
|
||||
mov r0, #8
|
||||
ldr r1, _037FA538 ; =OSi_CountUpTick
|
||||
bl OS_SetIrqFunction
|
||||
mov r0, #8
|
||||
bl OS_EnableIrqMask
|
||||
mov r1, #0
|
||||
ldr r0, _037FA53C ; =OSi_NeedResetTimer
|
||||
str r1, [r0]
|
||||
_037FA51C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA528: .word _03807920
|
||||
_037FA52C: .word OSi_TickCounter
|
||||
_037FA530: .word 0x04000102
|
||||
_037FA534: .word 0x04000100
|
||||
_037FA538: .word OSi_CountUpTick
|
||||
_037FA53C: .word OSi_NeedResetTimer
|
||||
14
arm7/asm/OS_timer.s
Normal file
14
arm7/asm/OS_timer.s
Normal file
@@ -0,0 +1,14 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OSi_SetTimerReserved
|
||||
OSi_SetTimerReserved: ; 0x037FA348
|
||||
ldr r1, _037FA360 ; =_0380791C
|
||||
ldrh r3, [r1]
|
||||
mov r2, #1
|
||||
orr r0, r3, r2, lsl r0
|
||||
strh r0, [r1]
|
||||
bx lr
|
||||
_037FA360: .word _0380791C
|
||||
2862
arm7/asm/dtcm.s
2862
arm7/asm/dtcm.s
File diff suppressed because it is too large
Load Diff
391
arm7/asm/main.s
Normal file
391
arm7/asm/main.s
Normal file
@@ -0,0 +1,391 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start FUN_037F8000
|
||||
FUN_037F8000: ; 0x037F8000
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037F8028 ; =PMi_Initialized
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _037F801C
|
||||
bl PM_SelfBlinkProc
|
||||
_037F801C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037F8028: .word PMi_Initialized
|
||||
|
||||
arm_func_start FUN_037F802C
|
||||
FUN_037F802C: ; 0x037F802C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
|
||||
sub sp, sp, #4
|
||||
mov sl, r0
|
||||
mov r8, #0
|
||||
bl FUN_037F81E8
|
||||
cmp r0, #0
|
||||
beq _037F80F8
|
||||
bl FUN_037F81C4
|
||||
mov r7, r0
|
||||
mov r9, r8
|
||||
mov r4, #1
|
||||
mov fp, #138 ; 0x8a
|
||||
mov r5, #112 ; 0x70
|
||||
_037F8060:
|
||||
add r6, sl, r9, lsl #8
|
||||
ldr r0, _037F81B4 ; =0x0000FFFF
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
bl FUN_037F81B8
|
||||
mov r2, r6
|
||||
ldrh r1, [r2, #114] ; 0x72
|
||||
cmp r0, r1
|
||||
bne _037F80E0
|
||||
ldrh r0, [r2, #112] ; 0x70
|
||||
cmp r0, #128 ; 0x80
|
||||
bcs _037F80E0
|
||||
ldr r0, _037F81B4 ; =0x0000FFFF
|
||||
add r1, r6, #116 ; 0x74
|
||||
mov r2, fp
|
||||
bl FUN_037F81B8
|
||||
mov r3, r6
|
||||
ldrh r1, [r3, #254] ; 0xfe
|
||||
cmp r0, r1
|
||||
bne _037F80E0
|
||||
ldrh r2, [r3, #118] ; 0x76
|
||||
ldrb r0, [r3, #117] ; 0x75
|
||||
mov r1, r4, lsl r0
|
||||
ands r1, r1, r2
|
||||
beq _037F80E0
|
||||
ands r1, r7, r2
|
||||
ldrneh r1, [r6, #100] ; 0x64
|
||||
bicne r1, r1, #7
|
||||
andne r0, r0, #7
|
||||
orrne r0, r1, r0
|
||||
strneh r0, [r6, #100] ; 0x64
|
||||
orr r8, r8, r4, lsl r9
|
||||
_037F80E0:
|
||||
add r0, r9, #1
|
||||
mov r0, r0, lsl #16
|
||||
mov r9, r0, lsr #16
|
||||
cmp r9, #2
|
||||
bcc _037F8060
|
||||
b _037F8158
|
||||
_037F80F8:
|
||||
bl FUN_037F81C4
|
||||
cmp r0, #0
|
||||
movne r0, #3
|
||||
bne _037F81A8
|
||||
mov r7, r8
|
||||
mov r4, #1
|
||||
ldr r6, _037F81B4 ; =0x0000FFFF
|
||||
mov r5, #112 ; 0x70
|
||||
_037F8118:
|
||||
mov r0, r6
|
||||
add r1, sl, r7, lsl #8
|
||||
mov r2, r5
|
||||
bl FUN_037F81B8
|
||||
add r2, sl, r7, lsl #8
|
||||
ldrh r1, [r2, #114] ; 0x72
|
||||
cmp r0, r1
|
||||
bne _037F8144
|
||||
ldrh r0, [r2, #112] ; 0x70
|
||||
cmp r0, #128 ; 0x80
|
||||
orrcc r8, r8, r4, lsl r7
|
||||
_037F8144:
|
||||
add r0, r7, #1
|
||||
mov r0, r0, lsl #16
|
||||
mov r7, r0, lsr #16
|
||||
cmp r7, #2
|
||||
bcc _037F8118
|
||||
_037F8158:
|
||||
cmp r8, #1
|
||||
beq _037F8174
|
||||
cmp r8, #2
|
||||
beq _037F8174
|
||||
cmp r8, #3
|
||||
beq _037F817C
|
||||
b _037F81A4
|
||||
_037F8174:
|
||||
mov r0, r8
|
||||
b _037F81A8
|
||||
_037F817C:
|
||||
ldrh r0, [sl, #112] ; 0x70
|
||||
add r0, r0, #1
|
||||
and r0, r0, #127 ; 0x7f
|
||||
and r1, r0, #255 ; 0xff
|
||||
add r0, sl, #256 ; 0x100
|
||||
ldrh r0, [r0, #112] ; 0x70
|
||||
cmp r1, r0
|
||||
moveq r0, #2
|
||||
movne r0, #1
|
||||
b _037F81A8
|
||||
_037F81A4:
|
||||
mov r0, #0
|
||||
_037F81A8:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
|
||||
bx lr
|
||||
_037F81B4: .word 0x0000FFFF
|
||||
|
||||
arm_func_start FUN_037F81B8
|
||||
FUN_037F81B8: ; 0x037F81B8
|
||||
ldr ip, _037F81C0 ; =SVC_GetCRC16
|
||||
bx ip
|
||||
_037F81C0: .word SVC_GetCRC16
|
||||
|
||||
arm_func_start FUN_037F81C4
|
||||
FUN_037F81C4: ; 0x037F81C4
|
||||
mov r0, #0
|
||||
ldr r1, _037F81E4 ; =0x027FFE1D
|
||||
ldrb r1, [r1]
|
||||
cmp r1, #128 ; 0x80
|
||||
orreq r0, r0, #64 ; 0x40
|
||||
moveq r0, r0, lsl #16
|
||||
moveq r0, r0, lsr #16
|
||||
bx lr
|
||||
_037F81E4: .word 0x027FFE1D
|
||||
|
||||
arm_func_start FUN_037F81E8
|
||||
FUN_037F81E8: ; 0x037F81E8
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
mov r0, #29
|
||||
mov r1, #1
|
||||
add r2, sp, #0
|
||||
bl NVRAM_ReadDataBytes
|
||||
ldrb r0, [sp]
|
||||
cmp r0, #255 ; 0xff
|
||||
moveq r0, #0
|
||||
beq _037F821C
|
||||
ands r0, r0, #64 ; 0x40
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
_037F821C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start FUN_037F8228
|
||||
FUN_037F8228: ; 0x037F8228
|
||||
stmdb sp!, {r4, lr}
|
||||
sub sp, sp, #528 ; 0x210
|
||||
mov r0, #32
|
||||
mov r1, #2
|
||||
add r2, sp, #4
|
||||
bl NVRAM_ReadDataBytes
|
||||
ldr r0, [sp, #4]
|
||||
mov r0, r0, lsl #3
|
||||
str r0, [sp, #4]
|
||||
mov r1, #256 ; 0x100
|
||||
add r2, sp, #16
|
||||
bl NVRAM_ReadDataBytes
|
||||
ldr r0, [sp, #4]
|
||||
add r0, r0, #256 ; 0x100
|
||||
mov r1, #256 ; 0x100
|
||||
add r2, sp, #272 ; 0x110
|
||||
bl NVRAM_ReadDataBytes
|
||||
add r0, sp, #16
|
||||
bl FUN_037F802C
|
||||
cmp r0, #3
|
||||
blt _037F8290
|
||||
mvn r0, #0
|
||||
ldr r1, _037F83A4 ; =0x027FFC80
|
||||
mov r2, #116 ; 0x74
|
||||
bl MIi_CpuClear32
|
||||
b _037F834C
|
||||
_037F8290:
|
||||
cmp r0, #0
|
||||
beq _037F833C
|
||||
mov r2, r0, lsl #8
|
||||
ldr r1, _037F83A8 ; =0xFFFFFF2A
|
||||
add r1, sp, r1
|
||||
ldrb r1, [r1, r0, lsl #8]
|
||||
cmp r1, #10
|
||||
bcs _037F82DC
|
||||
mov ip, #10
|
||||
mov r3, #0
|
||||
add r1, sp, #16
|
||||
add r2, r1, r2
|
||||
b _037F82D0
|
||||
_037F82C4:
|
||||
add r1, r2, ip, lsl #1
|
||||
strh r3, [r1, #-252] ; 0xffffff04
|
||||
sub ip, ip, #1
|
||||
_037F82D0:
|
||||
ldrb r1, [r2, #-230] ; 0xffffff1a
|
||||
cmp ip, r1
|
||||
bgt _037F82C4
|
||||
_037F82DC:
|
||||
mov r2, r0, lsl #8
|
||||
ldr r1, _037F83AC ; =0xFFFFFF60
|
||||
add r1, sp, r1
|
||||
ldrb r1, [r1, r0, lsl #8]
|
||||
cmp r1, #26
|
||||
bcs _037F8320
|
||||
mov ip, #26
|
||||
mov r3, #0
|
||||
add r1, sp, #16
|
||||
add r2, r1, r2
|
||||
b _037F8314
|
||||
_037F8308:
|
||||
add r1, r2, ip, lsl #1
|
||||
strh r3, [r1, #-230] ; 0xffffff1a
|
||||
sub ip, ip, #1
|
||||
_037F8314:
|
||||
ldrb r1, [r2, #-176] ; 0xffffff50
|
||||
cmp ip, r1
|
||||
bgt _037F8308
|
||||
_037F8320:
|
||||
add r1, sp, #16
|
||||
sub r0, r0, #1
|
||||
add r0, r1, r0, lsl #8
|
||||
ldr r1, _037F83A4 ; =0x027FFC80
|
||||
mov r2, #116 ; 0x74
|
||||
bl MIi_CpuCopy32
|
||||
b _037F834C
|
||||
_037F833C:
|
||||
mov r0, #0
|
||||
ldr r1, _037F83A4 ; =0x027FFC80
|
||||
mov r2, #116 ; 0x74
|
||||
bl MIi_CpuClear32
|
||||
_037F834C:
|
||||
mov r0, #54 ; 0x36
|
||||
mov r1, #6
|
||||
add r2, sp, #8
|
||||
bl NVRAM_ReadDataBytes
|
||||
ldr r0, _037F83A4 ; =0x027FFC80
|
||||
add r4, r0, #116 ; 0x74
|
||||
add r0, sp, #8
|
||||
mov r1, r4
|
||||
mov r2, #6
|
||||
bl MI_CpuCopy8
|
||||
mov r0, #60 ; 0x3c
|
||||
mov r1, #2
|
||||
add r2, sp, #0
|
||||
bl NVRAM_ReadDataBytes
|
||||
ldrh r0, [sp]
|
||||
mov r0, r0, lsl #15
|
||||
mov r0, r0, lsr #16
|
||||
bl WMSP_GetAllowedChannel
|
||||
strh r0, [r4, #6]
|
||||
add sp, sp, #528 ; 0x210
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
_037F83A4: .word 0x027FFC80
|
||||
_037F83A8: .word 0xFFFFFF2A
|
||||
_037F83AC: .word 0xFFFFFF60
|
||||
|
||||
arm_func_start FUN_037F83B0
|
||||
FUN_037F83B0: ; 0x037F83B0
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r0, #8
|
||||
bl OS_GetArenaHi
|
||||
mov r4, r0
|
||||
mov r0, #8
|
||||
bl OS_GetArenaLo
|
||||
mov r1, r0
|
||||
mov r0, #8
|
||||
mov r2, r4
|
||||
mov r3, #1
|
||||
bl OS_InitAlloc
|
||||
mov r4, r0
|
||||
mov r0, #8
|
||||
bl OS_GetArenaHi
|
||||
mov r2, r0
|
||||
mov r0, r4
|
||||
mov r1, #0
|
||||
sub r2, r2, r4
|
||||
bl MI_CpuFill8
|
||||
mov r0, #8
|
||||
mov r1, r4
|
||||
bl OS_SetArenaLo
|
||||
mov r0, #8
|
||||
bl OS_GetArenaHi
|
||||
mov r4, r0
|
||||
mov r0, #8
|
||||
bl OS_GetArenaLo
|
||||
mov r1, r0
|
||||
mov r0, #8
|
||||
mov r2, r4
|
||||
bl OS_CreateHeap
|
||||
movs r4, r0
|
||||
bpl _037F8438
|
||||
bl FUN_037FB1F0
|
||||
_037F8438:
|
||||
mov r0, #8
|
||||
mov r1, r4
|
||||
bl OS_SetCurrentHeap
|
||||
mov r0, #8
|
||||
mov r1, r4
|
||||
bl OS_CheckHeap
|
||||
cmp r0, #8448 ; 0x2100
|
||||
bcs _037F845C
|
||||
bl FUN_037FB1F0
|
||||
_037F845C:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start NitroSpMain
|
||||
NitroSpMain: ; 0x037F8468
|
||||
stmdb sp!, {r4, lr}
|
||||
bl WVR_ShelterExtWram
|
||||
bl OS_Init
|
||||
bl OS_InitThread
|
||||
bl FUN_037F8228
|
||||
bl PXI_Init
|
||||
bl FUN_037F83B0
|
||||
mov r4, r0
|
||||
mov r0, #6
|
||||
bl SND_Init
|
||||
bl PAD_InitXYButton
|
||||
mov r0, #1
|
||||
ldr r1, _037F8524 ; =FUN_037F8000
|
||||
bl OS_SetIrqFunction
|
||||
mov r0, #1
|
||||
bl OS_EnableIrqMask
|
||||
ldr r1, _037F8528 ; =0x04000004
|
||||
ldrh r0, [r1]
|
||||
ldrh r0, [r1]
|
||||
orr r0, r0, #8
|
||||
strh r0, [r1]
|
||||
ldr r1, _037F852C ; =0x04000208
|
||||
ldrh r0, [r1]
|
||||
mov r0, #1
|
||||
strh r0, [r1]
|
||||
bl OS_EnableInterrupts
|
||||
mvn r0, #0
|
||||
bl FS_Init
|
||||
mov r0, #15
|
||||
bl CARD_SetThreadPriority
|
||||
mov r0, #12
|
||||
bl RTC_Init
|
||||
mov r0, r4
|
||||
bl WVR_Init
|
||||
mov r0, #2
|
||||
bl SPI_Init
|
||||
mov r4, #0
|
||||
_037F84FC:
|
||||
bl FUN_037F8530
|
||||
bl OS_IsResetOccurred
|
||||
cmp r0, #0
|
||||
beq _037F8518
|
||||
mov r0, r4
|
||||
bl CTRDG_VibPulseEdgeUpdate
|
||||
bl OS_ResetSystem
|
||||
_037F8518:
|
||||
bl CTRDG_CheckPullOut_Polling
|
||||
bl CARD_CheckPullOut_Polling
|
||||
b _037F84FC
|
||||
_037F8524: .word FUN_037F8000
|
||||
_037F8528: .word 0x04000004
|
||||
_037F852C: .word 0x04000208
|
||||
|
||||
arm_func_start FUN_037F8530
|
||||
FUN_037F8530: ; 0x037F8530
|
||||
ldr ip, _037F8538 ; =SVC_Halt
|
||||
bx ip
|
||||
_037F8538: .word SVC_Halt
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
; .dtcm
|
||||
.extern OS_IrqHandler_ThreadSwitch
|
||||
.extern OSi_EnterTimerCallback
|
||||
.extern OSi_IrqVBlank
|
||||
.extern OSi_IrqTimer3
|
||||
.extern OSi_IrqTimer2
|
||||
@@ -24,9 +25,37 @@
|
||||
.extern OSi_IrqDma2
|
||||
.extern OSi_IrqDma1
|
||||
.extern OSi_IrqDma0
|
||||
.extern OSi_RemoveMutexLinkFromQueue
|
||||
.extern OSi_SetTimerReserved
|
||||
.extern OSi_UnlockAllMutex
|
||||
.extern OS_IrqDummy
|
||||
.extern OS_CheckHeap
|
||||
.extern OS_CreateHeap
|
||||
.extern OS_CreateHeap
|
||||
.extern OS_DisableInterrupts_IrqAndFiq
|
||||
.extern OS_DisableIrqMask
|
||||
.extern OS_EnableInterrupts
|
||||
.extern OS_EnableIrqMask
|
||||
.extern OS_GetArenaHi
|
||||
.extern OS_GetArenaLo
|
||||
.extern OS_GetProcMode
|
||||
.extern OS_Init
|
||||
.extern OS_InitAlloc
|
||||
.extern OS_InitArena
|
||||
.extern OS_InitContext
|
||||
.extern OS_InitIrqTable
|
||||
.extern OS_InitLock
|
||||
.extern OS_InitReset
|
||||
.extern OS_InitThread
|
||||
.extern OS_IsResetOccurred
|
||||
.extern OS_IsTickAvailable
|
||||
.extern OS_LoadContext
|
||||
.extern OS_ResetRequestIrqMask
|
||||
.extern OS_ResetSystem
|
||||
.extern OS_RestoreInterrupts_IrqAndFiq
|
||||
.extern OS_SaveContext
|
||||
.extern OS_SetArenaLo
|
||||
.extern OS_SetCurrentHeap
|
||||
.extern OS_SetIrqMask
|
||||
.extern OS_SetIrqFunction
|
||||
.extern OS_UnLockCartridge
|
||||
@@ -36,6 +65,8 @@
|
||||
.extern OS_TryLockCartridge
|
||||
.extern OS_UnlockCartridge
|
||||
.extern OS_LockCartridge
|
||||
.extern FUN_037F8000
|
||||
.extern FUN_037F8530
|
||||
.extern FUN_037F8CB4
|
||||
.extern OS_Sleep
|
||||
.extern OS_WakeupThreadDirect
|
||||
@@ -69,6 +100,7 @@
|
||||
.extern MIi_CpuClearFast
|
||||
.extern MIi_CpuCopyFast
|
||||
.extern MI_CpuFill8
|
||||
.extern MI_SwapWord
|
||||
.extern PXI_Init
|
||||
.extern PXI_SendWordByFifo
|
||||
.extern PXI_SetFifoRecvCallback
|
||||
@@ -76,6 +108,7 @@
|
||||
.extern EXIi_SetBitRcnt0L
|
||||
.extern SND_EndSleep
|
||||
.extern SND_BeginSleep
|
||||
.extern SND_Init
|
||||
.extern SPI_Init
|
||||
.extern PMi_ResetControl
|
||||
.extern PMi_SetControl
|
||||
@@ -177,6 +210,8 @@
|
||||
.extern sMasterPan
|
||||
.extern _03807660
|
||||
.extern cardi_rom_header_addr
|
||||
.extern CARD_CheckPullOut_Polling
|
||||
.extern CARD_SetThreadPriority
|
||||
.extern _03807668
|
||||
.extern _0380766C
|
||||
.extern PMi_LEDStatus
|
||||
@@ -218,6 +253,7 @@
|
||||
.extern _03807954
|
||||
.extern _03807958
|
||||
.extern _0380795C
|
||||
.extern PAD_InitXYButton
|
||||
.extern PADi_XYButtonAvailable
|
||||
.extern _038079E0
|
||||
.extern sSurroundDecay
|
||||
@@ -295,6 +331,7 @@
|
||||
.extern _0380A4A4
|
||||
.extern _0380AA64
|
||||
.extern _0380B064
|
||||
.extern FS_Init
|
||||
|
||||
; .ext
|
||||
.extern WMSP_GetIndicateThread
|
||||
|
||||
6
arm7/lib/include/OS_init.h
Normal file
6
arm7/lib/include/OS_init.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef POKEDIAMOND_OS_INIT_H
|
||||
#define POKEDIAMOND_OS_INIT_H
|
||||
|
||||
void OS_Init(void);
|
||||
|
||||
#endif //POKEDIAMOND_OS_INIT_H
|
||||
25
arm7/lib/src/OS_init.c
Normal file
25
arm7/lib/src/OS_init.c
Normal file
@@ -0,0 +1,25 @@
|
||||
#include "function_target.h"
|
||||
#include "OS_init.h"
|
||||
|
||||
extern void OS_InitArena(void);
|
||||
extern void PXI_Init(void);
|
||||
extern void OS_InitLock(void);
|
||||
extern void OS_InitIrqTable(void);
|
||||
extern void OS_InitTick(void);
|
||||
extern void OS_InitAlarm(void);
|
||||
extern void OS_InitThread(void);
|
||||
extern void OS_InitReset(void);
|
||||
extern void CTRDG_Init(void);
|
||||
|
||||
ARM_FUNC void OS_Init(void)
|
||||
{
|
||||
OS_InitArena();
|
||||
PXI_Init();
|
||||
OS_InitLock();
|
||||
OS_InitIrqTable();
|
||||
OS_InitTick();
|
||||
OS_InitAlarm();
|
||||
OS_InitThread();
|
||||
OS_InitReset();
|
||||
CTRDG_Init();
|
||||
}
|
||||
Reference in New Issue
Block a user