diff --git a/.gitignore b/.gitignore index 4bff43674..054ff399b 100755 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,8 @@ context_gen_header.h tools/m2ctx.py # regardless of the above, the context file itself shouldnt be there ctx.c +# diff.py -o requires a copy of the build folder +expected/* # Assets. Generally ignored, but ones with "custom" in the name are fine. /bin/* diff --git a/Makefile b/Makefile index 20f0a8046..668c58632 100644 --- a/Makefile +++ b/Makefile @@ -28,8 +28,8 @@ BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION) # Directories containing source files INCLUDE_DIRS := include -SRC_DIRS := src src/audio courses -ASM_DIRS := asm asm/audio data data/sound_data +SRC_DIRS := src src/audio src/os src/os/math courses +ASM_DIRS := asm asm/audio asm/os data data/sound_data COURSE_DIRS := \ courses/mushroom_cup/luigi_raceway courses/mushroom_cup/koopa_beach \ courses/mushroom_cup/moo_moo_farm courses/mushroom_cup/kalimari_desert courses/flower_cup/toads_turnpike courses/flower_cup/frappe_snowland \ @@ -220,6 +220,7 @@ $(BUILD_DIR)/%.mio0.s: $(BUILD_DIR)/%.mio0 $(BUILD_DIR)/%.o: %.c @$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< $(CC) -c $(CFLAGS) -o $@ $< + $(PYTHON) tools/set_o32abi_bit.py $@ $(BUILD_DIR)/%.o: $(BUILD_DIR)/%.c @$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< @@ -233,6 +234,22 @@ $(GLOBAL_ASM_O_FILES): CC := $(PYTHON) tools/asm_processor/build.py $(CC) -- $(A $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) #repeat for other files $(CPP) $(VERSION_CFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< + +#################### Libultra ##################### +$(BUILD_DIR)/src/os/%.o: OPT_FLAGS := +$(BUILD_DIR)/src/os/math/%.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/src/os/math/ll%.o: OPT_FLAGS := +$(BUILD_DIR)/src/os/math/ll%.o: MIPSISET := -mips3 -32 +$(BUILD_DIR)/src/os/ldiv.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/src/os/string.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/src/os/gu%.o: OPT_FLAGS := -O3 +$(BUILD_DIR)/src/os/al%.o: OPT_FLAGS := -O3 +$(BUILD_DIR)/src/os/__osLeoInterrupt.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/src/os/_Printf.o: OPT_FLAGS := -O3 +$(BUILD_DIR)/src/os/_Litob.o: OPT_FLAGS := -O3 +$(BUILD_DIR)/src/os/_Ldtob.o: OPT_FLAGS := -O3 + + #################### Compile course vertex to mio0 ##################### mushroom_cup := $(BUILD_DIR)/courses/mushroom_cup @@ -396,7 +413,7 @@ $(battle)/skyscraper/%.inc.mio0.o: courses/battle/skyscraper/%.inc.c $(BUILD_DIR)/$(TARGET).elf: $(O_FILES) $(COURSE_MIO0_OBJ_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(LD_COURSE_VERTEX_DEPENDENCIES) undefined_syms.txt - $(LD) $(LDFLAGS) -o $@ $(O_FILES) + $(LD) $(LDFLAGS) -o $@ # -R $(mushroom_cup)/luigi_raceway/model.inc.elf -R $(mushroom_cup)/moo_moo_farm/model.inc.elf -R $(mushroom_cup)/koopa_beach/model.inc.elf -R $(mushroom_cup)/kalimari_desert/model.inc.elf \ -R $(flower_cup)/toads_turnpike/model.inc.elf -R $(flower_cup)/frappe_snowland/model.inc.elf -R $(flower_cup)/choco_mountain/model.inc.elf -R $(flower_cup)/mario_raceway/model.inc.elf \ diff --git a/asm/audio/load.s b/asm/audio/load.s index 6d1ca3473..8d7aa788d 100644 --- a/asm/audio/load.s +++ b/asm/audio/load.s @@ -1631,8 +1631,8 @@ glabel audio_init /* 0BCD84 800BC184 0601FFFA */ bgez $s0, .L800BC170 /* 0BCD88 800BC188 24420008 */ addiu $v0, $v0, 8 .L800BC18C: -/* 0BCD8C 800BC18C 3C028000 */ lui $v0, %hi(D_80000300) # $v0, 0x8000 -/* 0BCD90 800BC190 8C420300 */ lw $v0, %lo(D_80000300)($v0) +/* 0BCD8C 800BC18C 3C028000 */ lui $v0, %hi(osTvType) # $v0, 0x8000 +/* 0BCD90 800BC190 8C420300 */ lw $v0, %lo(osTvType)($v0) /* 0BCD94 800BC194 10400007 */ beqz $v0, .L800BC1B4 /* 0BCD98 800BC198 24010001 */ li $at, 1 /* 0BCD9C 800BC19C 10410015 */ beq $v0, $at, .L800BC1F4 diff --git a/asm/bss_MainSeg.s b/asm/bss_MainSeg.s index a713bdbd8..7c15be3c2 100644 --- a/asm/bss_MainSeg.s +++ b/asm/bss_MainSeg.s @@ -2738,12 +2738,14 @@ glabel D_80196420 glabel D_80196438 .skip 8 -glabel D_80196440 +# seteventmesg bss +glabel __osEventStateTab .skip 128 glabel D_801964C0 .skip 64 +# osContStartReadData bss glabel _osContCmdBuf .skip 60 @@ -2765,77 +2767,16 @@ glabel D_80196568 glabel D_80196580 .skip 16 -glabel D_80196590 +# osPfsIsPlug bss +glabel __osPfsPifRam .skip 60 glabel D_801965CC .skip 4 +# guRotateF ? glabel D_801965D0 .skip 16 glabel D_801965E0 .skip 4096 - -glabel D_801975E0 -.skip 32 - -glabel D_80197600 -.skip 4 - -glabel D_80197604 -.skip 4 - -glabel D_80197608 -.skip 4 - -glabel D_8019760C -.skip 4 - -glabel D_80197610 -.skip 16 - -glabel D_80197620 -.skip 8 - -glabel D_80197628 -.skip 24 - -glabel D_80197640 -.skip 8 - -glabel D_80197648 -.skip 24 - -glabel D_80197660 -.skip 60 - -glabel D_8019769C -.skip 4 - -glabel D_801976A0 -.skip 432 - -glabel D_80197850 -.skip 4 - -glabel D_80197854 -.skip 1 - -glabel D_80197855 -.skip 1 - -glabel D_80197856 -.skip 2 - -glabel D_80197858 -.skip 4 - -glabel D_8019785C -.skip 100 - -glabel D_801978C0 -.skip 16 - -glabel D_801978D0 -.skip 12 diff --git a/asm/bss_after_diskinit.s b/asm/bss_after_diskinit.s new file mode 100644 index 000000000..59be09fc1 --- /dev/null +++ b/asm/bss_after_diskinit.s @@ -0,0 +1,6 @@ +.include "macros.inc" + +.section .bss + +glabel D_801978D0 +.skip 12 diff --git a/asm/bss_after_ostimer.s b/asm/bss_after_ostimer.s new file mode 100644 index 000000000..f62daeb24 --- /dev/null +++ b/asm/bss_after_ostimer.s @@ -0,0 +1,6 @@ +.include "macros.inc" + +.section .bss + +glabel D_801976A0 +.skip 432 diff --git a/asm/code_800040C0.s b/asm/code_800040C0.s index 3afe9897f..e63afde9f 100644 --- a/asm/code_800040C0.s +++ b/asm/code_800040C0.s @@ -299,7 +299,7 @@ glabel crash_screen_draw_info glabel get_faulted_thread /* 0050C4 800044C4 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0050C8 800044C8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0050CC 800044CC 0C03384C */ jal func_800CE130 +/* 0050CC 800044CC 0C03384C */ jal __osGetCurrFaultedThread /* 0050D0 800044D0 00000000 */ nop /* 0050D4 800044D4 8C4E0004 */ lw $t6, 4($v0) /* 0050D8 800044D8 2404FFFF */ li $a0, -1 diff --git a/asm/code_80040E50.s b/asm/code_80040E50.s index f607c7887..8133e2bbf 100644 --- a/asm/code_80040E50.s +++ b/asm/code_80040E50.s @@ -1120,7 +1120,7 @@ glabel func_80041D34 /* 042974 80041D74 E7A20018 */ swc1 $f2, 0x18($sp) /* 042978 80041D78 E7A2001C */ swc1 $f2, 0x1c($sp) /* 04297C 80041D7C E7AC0014 */ swc1 $f12, 0x14($sp) -/* 042980 80041D80 0C0338A9 */ jal guFrustum +/* 042980 80041D80 0C0338A9 */ jal guOrtho /* 042984 80041D84 E7A00010 */ swc1 $f0, 0x10($sp) /* 042988 80041D88 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 04298C 80041D8C 44811000 */ mtc1 $at, $f2 @@ -1155,7 +1155,7 @@ glabel func_80041D34 /* 0429FC 80041DFC E7AC0014 */ swc1 $f12, 0x14($sp) /* 042A00 80041E00 E7A20018 */ swc1 $f2, 0x18($sp) /* 042A04 80041E04 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 042A08 80041E08 0C0338A9 */ jal guFrustum +/* 042A08 80041E08 0C0338A9 */ jal guOrtho /* 042A0C 80041E0C 24840140 */ addiu $a0, $a0, 0x140 /* 042A10 80041E10 10000035 */ b .L80041EE8 /* 042A14 80041E14 8FBF0024 */ lw $ra, 0x24($sp) @@ -1168,7 +1168,7 @@ glabel func_80041D34 /* 042A2C 80041E2C E7AC0014 */ swc1 $f12, 0x14($sp) /* 042A30 80041E30 E7A20018 */ swc1 $f2, 0x18($sp) /* 042A34 80041E34 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 042A38 80041E38 0C0338A9 */ jal guFrustum +/* 042A38 80041E38 0C0338A9 */ jal guOrtho /* 042A3C 80041E3C 24840140 */ addiu $a0, $a0, 0x140 /* 042A40 80041E40 10000029 */ b .L80041EE8 /* 042A44 80041E44 8FBF0024 */ lw $ra, 0x24($sp) @@ -1186,7 +1186,7 @@ glabel func_80041D34 /* 042A70 80041E70 E7AC0014 */ swc1 $f12, 0x14($sp) /* 042A74 80041E74 E7A20018 */ swc1 $f2, 0x18($sp) /* 042A78 80041E78 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 042A7C 80041E7C 0C0338A9 */ jal guFrustum +/* 042A7C 80041E7C 0C0338A9 */ jal guOrtho /* 042A80 80041E80 24840140 */ addiu $a0, $a0, 0x140 /* 042A84 80041E84 10000018 */ b .L80041EE8 /* 042A88 80041E88 8FBF0024 */ lw $ra, 0x24($sp) @@ -1199,7 +1199,7 @@ glabel func_80041D34 /* 042AA0 80041EA0 E7AC0014 */ swc1 $f12, 0x14($sp) /* 042AA4 80041EA4 E7A20018 */ swc1 $f2, 0x18($sp) /* 042AA8 80041EA8 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 042AAC 80041EAC 0C0338A9 */ jal guFrustum +/* 042AAC 80041EAC 0C0338A9 */ jal guOrtho /* 042AB0 80041EB0 24840140 */ addiu $a0, $a0, 0x140 /* 042AB4 80041EB4 1000000C */ b .L80041EE8 /* 042AB8 80041EB8 8FBF0024 */ lw $ra, 0x24($sp) @@ -1212,7 +1212,7 @@ glabel func_80041D34 /* 042AD0 80041ED0 E7AC0014 */ swc1 $f12, 0x14($sp) /* 042AD4 80041ED4 E7A20018 */ swc1 $f2, 0x18($sp) /* 042AD8 80041ED8 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 042ADC 80041EDC 0C0338A9 */ jal guFrustum +/* 042ADC 80041EDC 0C0338A9 */ jal guOrtho /* 042AE0 80041EE0 24840140 */ addiu $a0, $a0, 0x140 /* 042AE4 80041EE4 8FBF0024 */ lw $ra, 0x24($sp) .L80041EE8: diff --git a/asm/code_80091750.s b/asm/code_80091750.s index 7e8d8171b..dd8fa339f 100644 --- a/asm/code_80091750.s +++ b/asm/code_80091750.s @@ -485,7 +485,7 @@ glabel func_80091D74 /* 0929E8 80091DE8 10000036 */ b .L80091EC4 /* 0929EC 80091DEC 00001025 */ move $v0, $zero .L80091DF0: -/* 0929F0 80091DF0 0C0338EC */ jal func_800CE3B0 +/* 0929F0 80091DF0 0C0338EC */ jal osPfsIsPlug /* 0929F4 80091DF4 27A50067 */ addiu $a1, $sp, 0x67 /* 0929F8 80091DF8 93AA0067 */ lbu $t2, 0x67($sp) /* 0929FC 80091DFC 3C148019 */ lui $s4, %hi(D_8018E868) # $s4, 0x8019 @@ -2774,7 +2774,7 @@ glabel func_80093C98 /* 094930 80093D30 E7A40014 */ swc1 $f4, 0x14($sp) /* 094934 80093D34 E7A00010 */ swc1 $f0, 0x10($sp) /* 094938 80093D38 E7A60018 */ swc1 $f6, 0x18($sp) -/* 09493C 80093D3C 0C0338A9 */ jal guFrustum +/* 09493C 80093D3C 0C0338A9 */ jal guOrtho /* 094940 80093D40 E7A8001C */ swc1 $f8, 0x1c($sp) /* 094944 80093D44 3C038015 */ lui $v1, %hi(gDisplayListHead) # $v1, 0x8015 /* 094948 80093D48 24630298 */ addiu $v1, %lo(gDisplayListHead) # addiu $v1, $v1, 0x298 @@ -2940,7 +2940,7 @@ glabel func_80093F10 /* 094BA0 80093FA0 E7A40014 */ swc1 $f4, 0x14($sp) /* 094BA4 80093FA4 E7A00010 */ swc1 $f0, 0x10($sp) /* 094BA8 80093FA8 E7A60018 */ swc1 $f6, 0x18($sp) -/* 094BAC 80093FAC 0C0338A9 */ jal guFrustum +/* 094BAC 80093FAC 0C0338A9 */ jal guOrtho /* 094BB0 80093FB0 E7A8001C */ swc1 $f8, 0x1c($sp) /* 094BB4 80093FB4 8E020000 */ lw $v0, ($s0) /* 094BB8 80093FB8 3C0E0103 */ lui $t6, (0x01030040 >> 16) # lui $t6, 0x103 @@ -3071,7 +3071,7 @@ glabel func_800940EC /* 094DA4 800941A4 E7A40014 */ swc1 $f4, 0x14($sp) /* 094DA8 800941A8 E7A00010 */ swc1 $f0, 0x10($sp) /* 094DAC 800941AC E7A60018 */ swc1 $f6, 0x18($sp) -/* 094DB0 800941B0 0C0338A9 */ jal guFrustum +/* 094DB0 800941B0 0C0338A9 */ jal guOrtho /* 094DB4 800941B4 E7A8001C */ swc1 $f8, 0x1c($sp) /* 094DB8 800941B8 8E020000 */ lw $v0, ($s0) /* 094DBC 800941BC 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 @@ -3683,7 +3683,7 @@ glabel func_80094A64 /* 09570C 80094B0C E7A40014 */ swc1 $f4, 0x14($sp) /* 095710 80094B10 E7A00010 */ swc1 $f0, 0x10($sp) /* 095714 80094B14 E7A60018 */ swc1 $f6, 0x18($sp) -/* 095718 80094B18 0C0338A9 */ jal guFrustum +/* 095718 80094B18 0C0338A9 */ jal guOrtho /* 09571C 80094B1C E7A8001C */ swc1 $f8, 0x1c($sp) /* 095720 80094B20 8E020000 */ lw $v0, ($s0) /* 095724 80094B24 3C0D0103 */ lui $t5, (0x01030040 >> 16) # lui $t5, 0x103 @@ -22166,7 +22166,7 @@ glabel func_800A54EC /* 0A61AC 800A55AC E7A40014 */ swc1 $f4, 0x14($sp) /* 0A61B0 800A55B0 E7A00010 */ swc1 $f0, 0x10($sp) /* 0A61B4 800A55B4 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0A61B8 800A55B8 0C0338A9 */ jal guFrustum +/* 0A61B8 800A55B8 0C0338A9 */ jal guOrtho /* 0A61BC 800A55BC E7A8001C */ swc1 $f8, 0x1c($sp) /* 0A61C0 800A55C0 3C088015 */ lui $t0, %hi(gDisplayListHead) # $t0, 0x8015 /* 0A61C4 800A55C4 25080298 */ addiu $t0, %lo(gDisplayListHead) # addiu $t0, $t0, 0x298 diff --git a/asm/code_802A3730.s b/asm/code_802A3730.s index fe3c1bd8a..c64967846 100644 --- a/asm/code_802A3730.s +++ b/asm/code_802A3730.s @@ -1227,7 +1227,7 @@ glabel func_802A487C /* 10DF34 802A4924 E7A40010 */ swc1 $f4, 0x10($sp) /* 10DF38 802A4928 E7A00014 */ swc1 $f0, 0x14($sp) /* 10DF3C 802A492C E7A60018 */ swc1 $f6, 0x18($sp) -/* 10DF40 802A4930 0C0338A9 */ jal guFrustum +/* 10DF40 802A4930 0C0338A9 */ jal guOrtho /* 10DF44 802A4934 E7A8001C */ swc1 $f8, 0x1c($sp) /* 10DF48 802A4938 3C038015 */ lui $v1, %hi(gDisplayListHead) # $v1, 0x8015 /* 10DF4C 802A493C 24630298 */ addiu $v1, %lo(gDisplayListHead) # addiu $v1, $v1, 0x298 @@ -1410,7 +1410,7 @@ glabel func_802A4A0C /* 10E204 802A4BF4 E7A80010 */ swc1 $f8, 0x10($sp) /* 10E208 802A4BF8 E7A00014 */ swc1 $f0, 0x14($sp) /* 10E20C 802A4BFC E7AA0018 */ swc1 $f10, 0x18($sp) -/* 10E210 802A4C00 0C0338A9 */ jal guFrustum +/* 10E210 802A4C00 0C0338A9 */ jal guOrtho /* 10E214 802A4C04 E7A6001C */ swc1 $f6, 0x1c($sp) /* 10E218 802A4C08 3C038015 */ lui $v1, %hi(gDisplayListHead) # $v1, 0x8015 /* 10E21C 802A4C0C 24630298 */ addiu $v1, %lo(gDisplayListHead) # addiu $v1, $v1, 0x298 diff --git a/asm/libultra.s b/asm/libultra.s deleted file mode 100644 index b3ad95df1..000000000 --- a/asm/libultra.s +++ /dev/null @@ -1,14753 +0,0 @@ -# Mario Kart 64 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - -.section .text, "ax" - -glabel osCreateThread -/* 0CCB70 800CBF70 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CCB74 800CBF74 AFA40028 */ sw $a0, 0x28($sp) -/* 0CCB78 800CBF78 AFA5002C */ sw $a1, 0x2c($sp) -/* 0CCB7C 800CBF7C 8FAE002C */ lw $t6, 0x2c($sp) -/* 0CCB80 800CBF80 8FAF0028 */ lw $t7, 0x28($sp) -/* 0CCB84 800CBF84 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CCB88 800CBF88 AFA60030 */ sw $a2, 0x30($sp) -/* 0CCB8C 800CBF8C AFA70034 */ sw $a3, 0x34($sp) -/* 0CCB90 800CBF90 AFB00018 */ sw $s0, 0x18($sp) -/* 0CCB94 800CBF94 ADEE0014 */ sw $t6, 0x14($t7) -/* 0CCB98 800CBF98 8FB90028 */ lw $t9, 0x28($sp) -/* 0CCB9C 800CBF9C 8FB8003C */ lw $t8, 0x3c($sp) -/* 0CCBA0 800CBFA0 AF380004 */ sw $t8, 4($t9) -/* 0CCBA4 800CBFA4 8FA80028 */ lw $t0, 0x28($sp) -/* 0CCBA8 800CBFA8 AD000000 */ sw $zero, ($t0) -/* 0CCBAC 800CBFAC 8FA90028 */ lw $t1, 0x28($sp) -/* 0CCBB0 800CBFB0 AD200008 */ sw $zero, 8($t1) -/* 0CCBB4 800CBFB4 8FAB0028 */ lw $t3, 0x28($sp) -/* 0CCBB8 800CBFB8 8FAA0030 */ lw $t2, 0x30($sp) -/* 0CCBBC 800CBFBC AD6A011C */ sw $t2, 0x11c($t3) -/* 0CCBC0 800CBFC0 8FAC0034 */ lw $t4, 0x34($sp) -/* 0CCBC4 800CBFC4 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CCBC8 800CBFC8 01807825 */ move $t7, $t4 -/* 0CCBCC 800CBFCC 000C77C3 */ sra $t6, $t4, 0x1f -/* 0CCBD0 800CBFD0 ADAE0038 */ sw $t6, 0x38($t5) -/* 0CCBD4 800CBFD4 ADAF003C */ sw $t7, 0x3c($t5) -/* 0CCBD8 800CBFD8 8FB80038 */ lw $t8, 0x38($sp) -/* 0CCBDC 800CBFDC 8FB90028 */ lw $t9, 0x28($sp) -/* 0CCBE0 800CBFE0 3C0C800D */ lui $t4, %hi(__osCleanupThread) # $t4, 0x800d -/* 0CCBE4 800CBFE4 03004825 */ move $t1, $t8 -/* 0CCBE8 800CBFE8 2D210010 */ sltiu $at, $t1, 0x10 -/* 0CCBEC 800CBFEC 001847C3 */ sra $t0, $t8, 0x1f -/* 0CCBF0 800CBFF0 01015023 */ subu $t2, $t0, $at -/* 0CCBF4 800CBFF4 252BFFF0 */ addiu $t3, $t1, -0x10 -/* 0CCBF8 800CBFF8 AF2B00F4 */ sw $t3, 0xf4($t9) -/* 0CCBFC 800CBFFC AF2A00F0 */ sw $t2, 0xf0($t9) -/* 0CCC00 800CC000 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CCC04 800CC004 258C1AA0 */ addiu $t4, %lo(__osCleanupThread) # addiu $t4, $t4, 0x1aa0 -/* 0CCC08 800CC008 01807825 */ move $t7, $t4 -/* 0CCC0C 800CC00C 000C77C3 */ sra $t6, $t4, 0x1f -/* 0CCC10 800CC010 ADAE0100 */ sw $t6, 0x100($t5) -/* 0CCC14 800CC014 ADAF0104 */ sw $t7, 0x104($t5) -/* 0CCC18 800CC018 8FA90028 */ lw $t1, 0x28($sp) -/* 0CCC1C 800CC01C 3C18003F */ lui $t8, (0x003FFF01 >> 16) # lui $t8, 0x3f -/* 0CCC20 800CC020 3718FF01 */ ori $t8, (0x003FFF01 & 0xFFFF) # ori $t8, $t8, 0xff01 -/* 0CCC24 800CC024 AFB80020 */ sw $t8, 0x20($sp) -/* 0CCC28 800CC028 3408FF03 */ li $t0, 65283 -/* 0CCC2C 800CC02C AD280118 */ sw $t0, 0x118($t1) -/* 0CCC30 800CC030 8FAA0020 */ lw $t2, 0x20($sp) -/* 0CCC34 800CC034 8FAC0028 */ lw $t4, 0x28($sp) -/* 0CCC38 800CC038 3C01003F */ lui $at, 0x3f -/* 0CCC3C 800CC03C 01415824 */ and $t3, $t2, $at -/* 0CCC40 800CC040 000BCC02 */ srl $t9, $t3, 0x10 -/* 0CCC44 800CC044 AD990128 */ sw $t9, 0x128($t4) -/* 0CCC48 800CC048 8FAF0028 */ lw $t7, 0x28($sp) -/* 0CCC4C 800CC04C 3C0E0100 */ lui $t6, (0x01000800 >> 16) # lui $t6, 0x100 -/* 0CCC50 800CC050 35CE0800 */ ori $t6, (0x01000800 & 0xFFFF) # ori $t6, $t6, 0x800 -/* 0CCC54 800CC054 ADEE012C */ sw $t6, 0x12c($t7) -/* 0CCC58 800CC058 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CCC5C 800CC05C 24180001 */ li $t8, 1 -/* 0CCC60 800CC060 ADA00018 */ sw $zero, 0x18($t5) -/* 0CCC64 800CC064 8FA80028 */ lw $t0, 0x28($sp) -/* 0CCC68 800CC068 A5180010 */ sh $t8, 0x10($t0) -/* 0CCC6C 800CC06C 8FA90028 */ lw $t1, 0x28($sp) -/* 0CCC70 800CC070 0C0346AC */ jal __osDisableInt -/* 0CCC74 800CC074 A5200012 */ sh $zero, 0x12($t1) -/* 0CCC78 800CC078 3C0A800F */ lui $t2, %hi(D_800EB3AC) # $t2, 0x800f -/* 0CCC7C 800CC07C 8D4AB3AC */ lw $t2, %lo(D_800EB3AC)($t2) -/* 0CCC80 800CC080 8FAB0028 */ lw $t3, 0x28($sp) -/* 0CCC84 800CC084 00408025 */ move $s0, $v0 -/* 0CCC88 800CC088 3C01800F */ lui $at, %hi(D_800EB3AC) # $at, 0x800f -/* 0CCC8C 800CC08C AD6A000C */ sw $t2, 0xc($t3) -/* 0CCC90 800CC090 8FB90028 */ lw $t9, 0x28($sp) -/* 0CCC94 800CC094 02002025 */ move $a0, $s0 -/* 0CCC98 800CC098 0C0346B4 */ jal __osRestoreInt -/* 0CCC9C 800CC09C AC39B3AC */ sw $t9, %lo(D_800EB3AC)($at) -/* 0CCCA0 800CC0A0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CCCA4 800CC0A4 8FB00018 */ lw $s0, 0x18($sp) -/* 0CCCA8 800CC0A8 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CCCAC 800CC0AC 03E00008 */ jr $ra -/* 0CCCB0 800CC0B0 00000000 */ nop - -/* 0CCCB4 800CC0B4 00000000 */ nop -/* 0CCCB8 800CC0B8 00000000 */ nop -/* 0CCCBC 800CC0BC 00000000 */ nop - -glabel osInitialize -/* 0CCCC0 800CC0C0 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0CCCC4 800CC0C4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CCCC8 800CC0C8 240E0001 */ li $t6, 1 -/* 0CCCCC 800CC0CC 3C018019 */ lui $at, %hi(D_80194040) # $at, 0x8019 -/* 0CCCD0 800CC0D0 AFB00018 */ sw $s0, 0x18($sp) -/* 0CCCD4 800CC0D4 AFA00038 */ sw $zero, 0x38($sp) -/* 0CCCD8 800CC0D8 0C0346D0 */ jal __osGetSR -/* 0CCCDC 800CC0DC AC2E4040 */ sw $t6, %lo(D_80194040)($at) -/* 0CCCE0 800CC0E0 00408025 */ move $s0, $v0 -/* 0CCCE4 800CC0E4 3C012000 */ lui $at, 0x2000 -/* 0CCCE8 800CC0E8 0C0346CC */ jal __osSetSR -/* 0CCCEC 800CC0EC 02012025 */ or $a0, $s0, $at -/* 0CCCF0 800CC0F0 3C040100 */ lui $a0, (0x01000800 >> 16) # lui $a0, 0x100 -/* 0CCCF4 800CC0F4 0C0346D4 */ jal __osSetFpcCsr -/* 0CCCF8 800CC0F8 34840800 */ ori $a0, (0x01000800 & 0xFFFF) # ori $a0, $a0, 0x800 -/* 0CCCFC 800CC0FC 3C041FC0 */ lui $a0, (0x1FC007FC >> 16) # lui $a0, 0x1fc0 -/* 0CCD00 800CC100 348407FC */ ori $a0, (0x1FC007FC & 0xFFFF) # ori $a0, $a0, 0x7fc -/* 0CCD04 800CC104 0C0346D8 */ jal __osSiRawReadIo -/* 0CCD08 800CC108 27A5003C */ addiu $a1, $sp, 0x3c -/* 0CCD0C 800CC10C 10400007 */ beqz $v0, .L800CC12C -/* 0CCD10 800CC110 00000000 */ nop -.L800CC114: -/* 0CCD14 800CC114 3C041FC0 */ lui $a0, (0x1FC007FC >> 16) # lui $a0, 0x1fc0 -/* 0CCD18 800CC118 348407FC */ ori $a0, (0x1FC007FC & 0xFFFF) # ori $a0, $a0, 0x7fc -/* 0CCD1C 800CC11C 0C0346D8 */ jal __osSiRawReadIo -/* 0CCD20 800CC120 27A5003C */ addiu $a1, $sp, 0x3c -/* 0CCD24 800CC124 1440FFFB */ bnez $v0, .L800CC114 -/* 0CCD28 800CC128 00000000 */ nop -.L800CC12C: -/* 0CCD2C 800CC12C 8FA5003C */ lw $a1, 0x3c($sp) -/* 0CCD30 800CC130 3C041FC0 */ lui $a0, (0x1FC007FC >> 16) # lui $a0, 0x1fc0 -/* 0CCD34 800CC134 348407FC */ ori $a0, (0x1FC007FC & 0xFFFF) # ori $a0, $a0, 0x7fc -/* 0CCD38 800CC138 34AF0008 */ ori $t7, $a1, 8 -/* 0CCD3C 800CC13C 0C0346EC */ jal __osSiRawWriteIo -/* 0CCD40 800CC140 01E02825 */ move $a1, $t7 -/* 0CCD44 800CC144 10400009 */ beqz $v0, .L800CC16C -/* 0CCD48 800CC148 00000000 */ nop -.L800CC14C: -/* 0CCD4C 800CC14C 8FA5003C */ lw $a1, 0x3c($sp) -/* 0CCD50 800CC150 3C041FC0 */ lui $a0, (0x1FC007FC >> 16) # lui $a0, 0x1fc0 -/* 0CCD54 800CC154 348407FC */ ori $a0, (0x1FC007FC & 0xFFFF) # ori $a0, $a0, 0x7fc -/* 0CCD58 800CC158 34B80008 */ ori $t8, $a1, 8 -/* 0CCD5C 800CC15C 0C0346EC */ jal __osSiRawWriteIo -/* 0CCD60 800CC160 03002825 */ move $a1, $t8 -/* 0CCD64 800CC164 1440FFF9 */ bnez $v0, .L800CC14C -/* 0CCD68 800CC168 00000000 */ nop -.L800CC16C: -/* 0CCD6C 800CC16C 3C08800D */ lui $t0, %hi(__osExceptionPreamble) # $t0, 0x800d -/* 0CCD70 800CC170 250811B0 */ addiu $t0, %lo(__osExceptionPreamble) # addiu $t0, $t0, 0x11b0 -/* 0CCD74 800CC174 8D010000 */ lw $at, ($t0) -/* 0CCD78 800CC178 3C198000 */ li $t9, 0x80000000 # $t9, 0x8000 -/* 0CCD7C 800CC17C 3C0D800D */ lui $t5, %hi(__osExceptionPreamble) # $t5, 0x800d -/* 0CCD80 800CC180 AF210000 */ sw $at, ($t9) -/* 0CCD84 800CC184 8D0B0004 */ lw $t3, 4($t0) -/* 0CCD88 800CC188 25AD11B0 */ addiu $t5, %lo(__osExceptionPreamble) # addiu $t5, $t5, 0x11b0 -/* 0CCD8C 800CC18C 3C0C8000 */ lui $t4, (0x80000080 >> 16) # $t4, 0x8000 -/* 0CCD90 800CC190 AF2B0004 */ sw $t3, 4($t9) -/* 0CCD94 800CC194 8D010008 */ lw $at, 8($t0) -/* 0CCD98 800CC198 358C0080 */ ori $t4, (0x80000080 & 0xFFFF) # ori $t4, $t4, 0x80 -/* 0CCD9C 800CC19C 3C09800D */ lui $t1, %hi(__osExceptionPreamble) # $t1, 0x800d -/* 0CCDA0 800CC1A0 AF210008 */ sw $at, 8($t9) -/* 0CCDA4 800CC1A4 8D0B000C */ lw $t3, 0xc($t0) -/* 0CCDA8 800CC1A8 252911B0 */ addiu $t1, %lo(__osExceptionPreamble) # addiu $t1, $t1, 0x11b0 -/* 0CCDAC 800CC1AC 3C0A8000 */ lui $t2, (0x80000100 >> 16) # $t2, 0x8000 -/* 0CCDB0 800CC1B0 AF2B000C */ sw $t3, 0xc($t9) -/* 0CCDB4 800CC1B4 8DA10000 */ lw $at, ($t5) -/* 0CCDB8 800CC1B8 354A0100 */ ori $t2, (0x80000100 & 0xFFFF) # ori $t2, $t2, 0x100 -/* 0CCDBC 800CC1BC 3C0E800D */ lui $t6, %hi(__osExceptionPreamble) # $t6, 0x800d -/* 0CCDC0 800CC1C0 AD810000 */ sw $at, ($t4) -/* 0CCDC4 800CC1C4 8DB80004 */ lw $t8, 4($t5) -/* 0CCDC8 800CC1C8 25CE11B0 */ addiu $t6, %lo(__osExceptionPreamble) # addiu $t6, $t6, 0x11b0 -/* 0CCDCC 800CC1CC 3C0F8000 */ lui $t7, (0x80000180 >> 16) # $t7, 0x8000 -/* 0CCDD0 800CC1D0 AD980004 */ sw $t8, 4($t4) -/* 0CCDD4 800CC1D4 8DA10008 */ lw $at, 8($t5) -/* 0CCDD8 800CC1D8 35EF0180 */ ori $t7, (0x80000180 & 0xFFFF) # ori $t7, $t7, 0x180 -/* 0CCDDC 800CC1DC 3C048000 */ lui $a0, 0x8000 -/* 0CCDE0 800CC1E0 AD810008 */ sw $at, 8($t4) -/* 0CCDE4 800CC1E4 8DB8000C */ lw $t8, 0xc($t5) -/* 0CCDE8 800CC1E8 24050190 */ li $a1, 400 -/* 0CCDEC 800CC1EC AD98000C */ sw $t8, 0xc($t4) -/* 0CCDF0 800CC1F0 8D210000 */ lw $at, ($t1) -/* 0CCDF4 800CC1F4 AD410000 */ sw $at, ($t2) -/* 0CCDF8 800CC1F8 8D2B0004 */ lw $t3, 4($t1) -/* 0CCDFC 800CC1FC AD4B0004 */ sw $t3, 4($t2) -/* 0CCE00 800CC200 8D210008 */ lw $at, 8($t1) -/* 0CCE04 800CC204 AD410008 */ sw $at, 8($t2) -/* 0CCE08 800CC208 8D2B000C */ lw $t3, 0xc($t1) -/* 0CCE0C 800CC20C AD4B000C */ sw $t3, 0xc($t2) -/* 0CCE10 800CC210 8DC10000 */ lw $at, ($t6) -/* 0CCE14 800CC214 ADE10000 */ sw $at, ($t7) -/* 0CCE18 800CC218 8DD80004 */ lw $t8, 4($t6) -/* 0CCE1C 800CC21C ADF80004 */ sw $t8, 4($t7) -/* 0CCE20 800CC220 8DC10008 */ lw $at, 8($t6) -/* 0CCE24 800CC224 ADE10008 */ sw $at, 8($t7) -/* 0CCE28 800CC228 8DD8000C */ lw $t8, 0xc($t6) -/* 0CCE2C 800CC22C 0C034700 */ jal osWriteBackDCache -/* 0CCE30 800CC230 ADF8000C */ sw $t8, 0xc($t7) -/* 0CCE34 800CC234 3C048000 */ lui $a0, 0x8000 -/* 0CCE38 800CC238 0C0336C0 */ jal osInvalCache -/* 0CCE3C 800CC23C 24050190 */ li $a1, 400 -/* 0CCE40 800CC240 0C034720 */ jal osMapTLBRdb -/* 0CCE44 800CC244 00000000 */ nop -/* 0CCE48 800CC248 24040004 */ li $a0, 4 -/* 0CCE4C 800CC24C 0C034738 */ jal osEPiRawReadIo -/* 0CCE50 800CC250 27A50038 */ addiu $a1, $sp, 0x38 -/* 0CCE54 800CC254 8FA80038 */ lw $t0, 0x38($sp) -/* 0CCE58 800CC258 2401FFF0 */ li $at, -16 -/* 0CCE5C 800CC25C 0101C824 */ and $t9, $t0, $at -/* 0CCE60 800CC260 13200006 */ beqz $t9, .L800CC27C -/* 0CCE64 800CC264 AFB90038 */ sw $t9, 0x38($sp) -/* 0CCE68 800CC268 3C01800F */ lui $at, %hi(osClockRate + 4) # $at, 0x800f -/* 0CCE6C 800CC26C 03205825 */ move $t3, $t9 -/* 0CCE70 800CC270 240A0000 */ li $t2, 0 -/* 0CCE74 800CC274 AC2AA5E0 */ sw $t2, %lo(osClockRate)($at) -/* 0CCE78 800CC278 AC2BA5E4 */ sw $t3, %lo(osClockRate + 4)($at) -.L800CC27C: -/* 0CCE7C 800CC27C 3C04800F */ lui $a0, %hi(osClockRate) # $a0, 0x800f -/* 0CCE80 800CC280 3C05800F */ lui $a1, %hi(osClockRate + 4) # $a1, 0x800f -/* 0CCE84 800CC284 8CA5A5E4 */ lw $a1, %lo(osClockRate + 4)($a1) -/* 0CCE88 800CC288 8C84A5E0 */ lw $a0, %lo(osClockRate)($a0) -/* 0CCE8C 800CC28C 24060000 */ li $a2, 0 -/* 0CCE90 800CC290 0C0337F6 */ jal __ll_mul -/* 0CCE94 800CC294 24070003 */ li $a3, 3 -/* 0CCE98 800CC298 AFA20020 */ sw $v0, 0x20($sp) -/* 0CCE9C 800CC29C AFA30024 */ sw $v1, 0x24($sp) -/* 0CCEA0 800CC2A0 8FA50024 */ lw $a1, 0x24($sp) -/* 0CCEA4 800CC2A4 8FA40020 */ lw $a0, 0x20($sp) -/* 0CCEA8 800CC2A8 24060000 */ li $a2, 0 -/* 0CCEAC 800CC2AC 0C0337B6 */ jal __ull_div -/* 0CCEB0 800CC2B0 24070004 */ li $a3, 4 -/* 0CCEB4 800CC2B4 3C098000 */ lui $t1, %hi(D_8000030C) # $t1, 0x8000 -/* 0CCEB8 800CC2B8 8D29030C */ lw $t1, %lo(D_8000030C)($t1) -/* 0CCEBC 800CC2BC 3C01800F */ lui $at, %hi(osClockRate + 4) # $at, 0x800f -/* 0CCEC0 800CC2C0 AC22A5E0 */ sw $v0, %lo(osClockRate)($at) -/* 0CCEC4 800CC2C4 15200005 */ bnez $t1, .L800CC2DC -/* 0CCEC8 800CC2C8 AC23A5E4 */ sw $v1, %lo(osClockRate + 4)($at) -/* 0CCECC 800CC2CC 3C048000 */ lui $a0, %hi(D_8000031C) # $a0, 0x8000 -/* 0CCED0 800CC2D0 2484031C */ addiu $a0, %lo(D_8000031C) # addiu $a0, $a0, 0x31c -/* 0CCED4 800CC2D4 0C033698 */ jal bzero -/* 0CCED8 800CC2D8 24050040 */ li $a1, 64 -.L800CC2DC: -/* 0CCEDC 800CC2DC 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 -/* 0CCEE0 800CC2E0 8DAC0010 */ lw $t4, %lo(D_A4600010)($t5) -/* 0CCEE4 800CC2E4 318F0003 */ andi $t7, $t4, 3 -/* 0CCEE8 800CC2E8 11E00008 */ beqz $t7, .L800CC30C -/* 0CCEEC 800CC2EC AFAC0030 */ sw $t4, 0x30($sp) -.L800CC2F0: -/* 0CCEF0 800CC2F0 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0CCEF4 800CC2F4 8DD80010 */ lw $t8, %lo(D_A4600010)($t6) -/* 0CCEF8 800CC2F8 AFB80030 */ sw $t8, 0x30($sp) -/* 0CCEFC 800CC2FC 8FA80030 */ lw $t0, 0x30($sp) -/* 0CCF00 800CC300 31190003 */ andi $t9, $t0, 3 -/* 0CCF04 800CC304 1720FFFA */ bnez $t9, .L800CC2F0 -/* 0CCF08 800CC308 00000000 */ nop -.L800CC30C: -/* 0CCF0C 800CC30C 3C0AA500 */ lui $t2, %hi(D_A5000508) # $t2, 0xa500 -/* 0CCF10 800CC310 8D4B0508 */ lw $t3, %lo(D_A5000508)($t2) -/* 0CCF14 800CC314 3169FFFF */ andi $t1, $t3, 0xffff -/* 0CCF18 800CC318 1520000A */ bnez $t1, .L800CC344 -/* 0CCF1C 800CC31C AFAB0034 */ sw $t3, 0x34($sp) -/* 0CCF20 800CC320 240D0001 */ li $t5, 1 -/* 0CCF24 800CC324 3C01800F */ lui $at, %hi(D_800EA5F0) # $at, 0x800f -/* 0CCF28 800CC328 3C05800D */ lui $a1, %hi(D_800D1D90) # $a1, 0x800d -/* 0CCF2C 800CC32C AC2DA5F0 */ sw $t5, %lo(D_800EA5F0)($at) -/* 0CCF30 800CC330 24A51D90 */ addiu $a1, %lo(D_800D1D90) # addiu $a1, $a1, 0x1d90 -/* 0CCF34 800CC334 0C034750 */ jal __osSetHWIntrRoutine -/* 0CCF38 800CC338 24040001 */ li $a0, 1 -/* 0CCF3C 800CC33C 10000003 */ b .L800CC34C -/* 0CCF40 800CC340 00000000 */ nop -.L800CC344: -/* 0CCF44 800CC344 3C01800F */ lui $at, %hi(D_800EA5F0) # $at, 0x800f -/* 0CCF48 800CC348 AC20A5F0 */ sw $zero, %lo(D_800EA5F0)($at) -.L800CC34C: -/* 0CCF4C 800CC34C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CCF50 800CC350 8FB00018 */ lw $s0, 0x18($sp) -/* 0CCF54 800CC354 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0CCF58 800CC358 03E00008 */ jr $ra -/* 0CCF5C 800CC35C 00000000 */ nop - -glabel osStartThread -/* 0CCF60 800CC360 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CCF64 800CC364 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CCF68 800CC368 AFA40028 */ sw $a0, 0x28($sp) -/* 0CCF6C 800CC36C AFB10018 */ sw $s1, 0x18($sp) -/* 0CCF70 800CC370 0C0346AC */ jal __osDisableInt -/* 0CCF74 800CC374 AFB00014 */ sw $s0, 0x14($sp) -/* 0CCF78 800CC378 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CCF7C 800CC37C 24010001 */ li $at, 1 -/* 0CCF80 800CC380 00408025 */ move $s0, $v0 -/* 0CCF84 800CC384 95D10010 */ lhu $s1, 0x10($t6) -/* 0CCF88 800CC388 1221000C */ beq $s1, $at, .L800CC3BC -/* 0CCF8C 800CC38C 24010008 */ li $at, 8 -/* 0CCF90 800CC390 1621002A */ bne $s1, $at, .L800CC43C -/* 0CCF94 800CC394 00000000 */ nop -/* 0CCF98 800CC398 8FB80028 */ lw $t8, 0x28($sp) -/* 0CCF9C 800CC39C 240F0002 */ li $t7, 2 -/* 0CCFA0 800CC3A0 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0CCFA4 800CC3A4 A70F0010 */ sh $t7, 0x10($t8) -/* 0CCFA8 800CC3A8 8FA50028 */ lw $a1, 0x28($sp) -/* 0CCFAC 800CC3AC 0C034633 */ jal __osEnqueueThread -/* 0CCFB0 800CC3B0 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0CCFB4 800CC3B4 10000021 */ b .L800CC43C -/* 0CCFB8 800CC3B8 00000000 */ nop -.L800CC3BC: -/* 0CCFBC 800CC3BC 8FB90028 */ lw $t9, 0x28($sp) -/* 0CCFC0 800CC3C0 8F280008 */ lw $t0, 8($t9) -/* 0CCFC4 800CC3C4 11000005 */ beqz $t0, .L800CC3DC -/* 0CCFC8 800CC3C8 00000000 */ nop -/* 0CCFCC 800CC3CC 3C09800F */ lui $t1, %hi(D_800EB3A8) # $t1, 0x800f -/* 0CCFD0 800CC3D0 2529B3A8 */ addiu $t1, %lo(D_800EB3A8) # addiu $t1, $t1, -0x4c58 -/* 0CCFD4 800CC3D4 1509000A */ bne $t0, $t1, .L800CC400 -/* 0CCFD8 800CC3D8 00000000 */ nop -.L800CC3DC: -/* 0CCFDC 800CC3DC 8FAB0028 */ lw $t3, 0x28($sp) -/* 0CCFE0 800CC3E0 240A0002 */ li $t2, 2 -/* 0CCFE4 800CC3E4 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0CCFE8 800CC3E8 A56A0010 */ sh $t2, 0x10($t3) -/* 0CCFEC 800CC3EC 8FA50028 */ lw $a1, 0x28($sp) -/* 0CCFF0 800CC3F0 0C034633 */ jal __osEnqueueThread -/* 0CCFF4 800CC3F4 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0CCFF8 800CC3F8 10000010 */ b .L800CC43C -/* 0CCFFC 800CC3FC 00000000 */ nop -.L800CC400: -/* 0CD000 800CC400 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CD004 800CC404 240C0008 */ li $t4, 8 -/* 0CD008 800CC408 A5AC0010 */ sh $t4, 0x10($t5) -/* 0CD00C 800CC40C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD010 800CC410 8DC40008 */ lw $a0, 8($t6) -/* 0CD014 800CC414 0C034633 */ jal __osEnqueueThread -/* 0CD018 800CC418 01C02825 */ move $a1, $t6 -/* 0CD01C 800CC41C 8FAF0028 */ lw $t7, 0x28($sp) -/* 0CD020 800CC420 0C034645 */ jal __osPopThread -/* 0CD024 800CC424 8DE40008 */ lw $a0, 8($t7) -/* 0CD028 800CC428 00408825 */ move $s1, $v0 -/* 0CD02C 800CC42C 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0CD030 800CC430 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0CD034 800CC434 0C034633 */ jal __osEnqueueThread -/* 0CD038 800CC438 02202825 */ move $a1, $s1 -.L800CC43C: -/* 0CD03C 800CC43C 3C18800F */ lui $t8, %hi(D_800EB3B0) # $t8, 0x800f -/* 0CD040 800CC440 8F18B3B0 */ lw $t8, %lo(D_800EB3B0)($t8) -/* 0CD044 800CC444 17000005 */ bnez $t8, .L800CC45C -/* 0CD048 800CC448 00000000 */ nop -/* 0CD04C 800CC44C 0C034649 */ jal __osDispatchThread -/* 0CD050 800CC450 00000000 */ nop -/* 0CD054 800CC454 1000000F */ b .L800CC494 -/* 0CD058 800CC458 00000000 */ nop -.L800CC45C: -/* 0CD05C 800CC45C 3C19800F */ lui $t9, %hi(D_800EB3B0) # $t9, 0x800f -/* 0CD060 800CC460 3C09800F */ lui $t1, %hi(D_800EB3A8) # $t1, 0x800f -/* 0CD064 800CC464 8D29B3A8 */ lw $t1, %lo(D_800EB3A8)($t1) -/* 0CD068 800CC468 8F39B3B0 */ lw $t9, %lo(D_800EB3B0)($t9) -/* 0CD06C 800CC46C 8D2A0004 */ lw $t2, 4($t1) -/* 0CD070 800CC470 8F280004 */ lw $t0, 4($t9) -/* 0CD074 800CC474 010A082A */ slt $at, $t0, $t2 -/* 0CD078 800CC478 10200006 */ beqz $at, .L800CC494 -/* 0CD07C 800CC47C 00000000 */ nop -/* 0CD080 800CC480 240B0002 */ li $t3, 2 -/* 0CD084 800CC484 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0CD088 800CC488 A72B0010 */ sh $t3, 0x10($t9) -/* 0CD08C 800CC48C 0C0345F3 */ jal __osEnqueueAndYield -/* 0CD090 800CC490 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -.L800CC494: -/* 0CD094 800CC494 0C0346B4 */ jal __osRestoreInt -/* 0CD098 800CC498 02002025 */ move $a0, $s0 -/* 0CD09C 800CC49C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD0A0 800CC4A0 8FB00014 */ lw $s0, 0x14($sp) -/* 0CD0A4 800CC4A4 8FB10018 */ lw $s1, 0x18($sp) -/* 0CD0A8 800CC4A8 03E00008 */ jr $ra -/* 0CD0AC 800CC4AC 27BD0028 */ addiu $sp, $sp, 0x28 - -glabel osCreateViManager -/* 0CD0B0 800CC4B0 3C0E800F */ lui $t6, %hi(D_800EA600) # $t6, 0x800f -/* 0CD0B4 800CC4B4 8DCEA600 */ lw $t6, %lo(D_800EA600)($t6) -/* 0CD0B8 800CC4B8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0CD0BC 800CC4BC AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD0C0 800CC4C0 15C00059 */ bnez $t6, .L800CC628 -/* 0CD0C4 800CC4C4 AFA40030 */ sw $a0, 0x30($sp) -/* 0CD0C8 800CC4C8 0C034984 */ jal __osTimerServicesInit -/* 0CD0CC 800CC4CC 00000000 */ nop -/* 0CD0D0 800CC4D0 3C048019 */ lui $a0, %hi(D_80195200) # $a0, 0x8019 -/* 0CD0D4 800CC4D4 3C058019 */ lui $a1, %hi(D_80195218) # $a1, 0x8019 -/* 0CD0D8 800CC4D8 24A55218 */ addiu $a1, %lo(D_80195218) # addiu $a1, $a1, 0x5218 -/* 0CD0DC 800CC4DC 24845200 */ addiu $a0, %lo(D_80195200) # addiu $a0, $a0, 0x5200 -/* 0CD0E0 800CC4E0 0C033358 */ jal osCreateMesgQueue -/* 0CD0E4 800CC4E4 24060005 */ li $a2, 5 -/* 0CD0E8 800CC4E8 3C018019 */ lui $at, %hi(D_80195230) # $at, 0x8019 -/* 0CD0EC 800CC4EC 240F000D */ li $t7, 13 -/* 0CD0F0 800CC4F0 A42F5230 */ sh $t7, %lo(D_80195230)($at) -/* 0CD0F4 800CC4F4 A0205232 */ sb $zero, %lo(D_80195230+0x2)($at) -/* 0CD0F8 800CC4F8 AC205234 */ sw $zero, %lo(D_80195230+0x4)($at) -/* 0CD0FC 800CC4FC 3C018019 */ lui $at, %hi(D_80195248) # $at, 0x8019 -/* 0CD100 800CC500 2418000E */ li $t8, 14 -/* 0CD104 800CC504 3C058019 */ lui $a1, %hi(D_80195200) # $a1, 0x8019 -/* 0CD108 800CC508 3C068019 */ lui $a2, %hi(D_80195230) # $a2, 0x8019 -/* 0CD10C 800CC50C A4385248 */ sh $t8, %lo(D_80195248)($at) -/* 0CD110 800CC510 A020524A */ sb $zero, %lo(D_80195248+0x2)($at) -/* 0CD114 800CC514 AC20524C */ sw $zero, %lo(D_80195248+0x4)($at) -/* 0CD118 800CC518 24C65230 */ addiu $a2, %lo(D_80195230) # addiu $a2, $a2, 0x5230 -/* 0CD11C 800CC51C 24A55200 */ addiu $a1, %lo(D_80195200) # addiu $a1, $a1, 0x5200 -/* 0CD120 800CC520 0C033380 */ jal osSetEventMesg -/* 0CD124 800CC524 24040007 */ li $a0, 7 -/* 0CD128 800CC528 3C058019 */ lui $a1, %hi(D_80195200) # $a1, 0x8019 -/* 0CD12C 800CC52C 3C068019 */ lui $a2, %hi(D_80195248) # $a2, 0x8019 -/* 0CD130 800CC530 24C65248 */ addiu $a2, %lo(D_80195248) # addiu $a2, $a2, 0x5248 -/* 0CD134 800CC534 24A55200 */ addiu $a1, %lo(D_80195200) # addiu $a1, $a1, 0x5200 -/* 0CD138 800CC538 0C033380 */ jal osSetEventMesg -/* 0CD13C 800CC53C 24040003 */ li $a0, 3 -/* 0CD140 800CC540 2419FFFF */ li $t9, -1 -/* 0CD144 800CC544 AFB90028 */ sw $t9, 0x28($sp) -/* 0CD148 800CC548 0C034A84 */ jal osGetThreadPri -/* 0CD14C 800CC54C 00002025 */ move $a0, $zero -/* 0CD150 800CC550 AFA20024 */ sw $v0, 0x24($sp) -/* 0CD154 800CC554 8FA80024 */ lw $t0, 0x24($sp) -/* 0CD158 800CC558 8FA90030 */ lw $t1, 0x30($sp) -/* 0CD15C 800CC55C 0109082A */ slt $at, $t0, $t1 -/* 0CD160 800CC560 10200005 */ beqz $at, .L800CC578 -/* 0CD164 800CC564 00000000 */ nop -/* 0CD168 800CC568 AFA80028 */ sw $t0, 0x28($sp) -/* 0CD16C 800CC56C 00002025 */ move $a0, $zero -/* 0CD170 800CC570 0C033320 */ jal osSetThreadPri -/* 0CD174 800CC574 01202825 */ move $a1, $t1 -.L800CC578: -/* 0CD178 800CC578 0C0346AC */ jal __osDisableInt -/* 0CD17C 800CC57C 00000000 */ nop -/* 0CD180 800CC580 3C01800F */ lui $at, %hi(D_800EA600) # $at, 0x800f -/* 0CD184 800CC584 3C0C8019 */ lui $t4, %hi(D_80195200) # $t4, 0x8019 -/* 0CD188 800CC588 3C0B8019 */ lui $t3, %hi(D_80194050) # $t3, 0x8019 -/* 0CD18C 800CC58C 258C5200 */ addiu $t4, %lo(D_80195200) # addiu $t4, $t4, 0x5200 -/* 0CD190 800CC590 240A0001 */ li $t2, 1 -/* 0CD194 800CC594 256B4050 */ addiu $t3, %lo(D_80194050) # addiu $t3, $t3, 0x4050 -/* 0CD198 800CC598 AC2AA600 */ sw $t2, %lo(D_800EA600)($at) -/* 0CD19C 800CC59C AC2BA604 */ sw $t3, %lo(D_800EA600+0x4)($at) -/* 0CD1A0 800CC5A0 AC2CA608 */ sw $t4, %lo(D_800EA600+0x8)($at) -/* 0CD1A4 800CC5A4 AC2CA60C */ sw $t4, %lo(D_800EA600+0xC)($at) -/* 0CD1A8 800CC5A8 3C0D8019 */ lui $t5, %hi(D_80194200) # $t5, 0x8019 -/* 0CD1AC 800CC5AC 8FAF0030 */ lw $t7, 0x30($sp) -/* 0CD1B0 800CC5B0 3C01800F */ lui $at, %hi(D_800EA610) # $at, 0x800f -/* 0CD1B4 800CC5B4 25AD4200 */ addiu $t5, %lo(D_80194200) # addiu $t5, $t5, 0x4200 -/* 0CD1B8 800CC5B8 25AE1000 */ addiu $t6, $t5, 0x1000 -/* 0CD1BC 800CC5BC 3C06800D */ lui $a2, %hi(__osViDevMgrMain) # $a2, 0x800d -/* 0CD1C0 800CC5C0 3C07800F */ lui $a3, %hi(D_800EA600) # $a3, 0x800f -/* 0CD1C4 800CC5C4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0CD1C8 800CC5C8 AC20A610 */ sw $zero, %lo(D_800EA610)($at) -/* 0CD1CC 800CC5CC AC20A614 */ sw $zero, %lo(D_800EA610+0x4)($at) -/* 0CD1D0 800CC5D0 AC20A618 */ sw $zero, %lo(D_800EA610+0x8)($at) -/* 0CD1D4 800CC5D4 24E7A600 */ addiu $a3, %lo(D_800EA600) # addiu $a3, $a3, -0x5a00 -/* 0CD1D8 800CC5D8 24C6C638 */ addiu $a2, %lo(__osViDevMgrMain) # addiu $a2, $a2, -0x39c8 -/* 0CD1DC 800CC5DC AFAE0010 */ sw $t6, 0x10($sp) -/* 0CD1E0 800CC5E0 01602025 */ move $a0, $t3 -/* 0CD1E4 800CC5E4 00002825 */ move $a1, $zero -/* 0CD1E8 800CC5E8 0C032FDC */ jal osCreateThread -/* 0CD1EC 800CC5EC AFAF0014 */ sw $t7, 0x14($sp) -/* 0CD1F0 800CC5F0 0C034A8C */ jal __osViInit -/* 0CD1F4 800CC5F4 00000000 */ nop -/* 0CD1F8 800CC5F8 3C048019 */ lui $a0, %hi(D_80194050) # $a0, 0x8019 -/* 0CD1FC 800CC5FC 0C0330D8 */ jal osStartThread -/* 0CD200 800CC600 24844050 */ addiu $a0, %lo(D_80194050) # addiu $a0, $a0, 0x4050 -/* 0CD204 800CC604 0C0346B4 */ jal __osRestoreInt -/* 0CD208 800CC608 8FA4002C */ lw $a0, 0x2c($sp) -/* 0CD20C 800CC60C 8FB80028 */ lw $t8, 0x28($sp) -/* 0CD210 800CC610 2401FFFF */ li $at, -1 -/* 0CD214 800CC614 13010004 */ beq $t8, $at, .L800CC628 -/* 0CD218 800CC618 00000000 */ nop -/* 0CD21C 800CC61C 00002025 */ move $a0, $zero -/* 0CD220 800CC620 0C033320 */ jal osSetThreadPri -/* 0CD224 800CC624 03002825 */ move $a1, $t8 -.L800CC628: -/* 0CD228 800CC628 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD22C 800CC62C 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0CD230 800CC630 03E00008 */ jr $ra -/* 0CD234 800CC634 00000000 */ nop - -glabel __osViDevMgrMain -/* 0CD238 800CC638 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CD23C 800CC63C AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD240 800CC640 AFA40038 */ sw $a0, 0x38($sp) -/* 0CD244 800CC644 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD248 800CC648 AFA0002C */ sw $zero, 0x2c($sp) -/* 0CD24C 800CC64C 0C034AE0 */ jal func_800D2B80 -/* 0CD250 800CC650 AFA00028 */ sw $zero, 0x28($sp) -/* 0CD254 800CC654 AFA20034 */ sw $v0, 0x34($sp) -/* 0CD258 800CC658 8FAE0034 */ lw $t6, 0x34($sp) -/* 0CD25C 800CC65C 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 -/* 0CD260 800CC660 95CF0002 */ lhu $t7, 2($t6) -/* 0CD264 800CC664 15E00004 */ bnez $t7, .L800CC678 -/* 0CD268 800CC668 A42F5260 */ sh $t7, %lo(D_80195260)($at) -/* 0CD26C 800CC66C 24180001 */ li $t8, 1 -/* 0CD270 800CC670 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 -/* 0CD274 800CC674 A4385260 */ sh $t8, %lo(D_80195260)($at) -.L800CC678: -/* 0CD278 800CC678 8FB90038 */ lw $t9, 0x38($sp) -/* 0CD27C 800CC67C AFB90030 */ sw $t9, 0x30($sp) -.L800CC680: -/* 0CD280 800CC680 8FA80030 */ lw $t0, 0x30($sp) -/* 0CD284 800CC684 27A5002C */ addiu $a1, $sp, 0x2c -/* 0CD288 800CC688 24060001 */ li $a2, 1 -/* 0CD28C 800CC68C 0C0335D4 */ jal osRecvMesg -/* 0CD290 800CC690 8D04000C */ lw $a0, 0xc($t0) -/* 0CD294 800CC694 8FA9002C */ lw $t1, 0x2c($sp) -/* 0CD298 800CC698 2401000D */ li $at, 13 -/* 0CD29C 800CC69C 95300000 */ lhu $s0, ($t1) -/* 0CD2A0 800CC6A0 12010005 */ beq $s0, $at, .L800CC6B8 -/* 0CD2A4 800CC6A4 2401000E */ li $at, 14 -/* 0CD2A8 800CC6A8 12010047 */ beq $s0, $at, .L800CC7C8 -/* 0CD2AC 800CC6AC 00000000 */ nop -/* 0CD2B0 800CC6B0 1000FFF3 */ b .L800CC680 -/* 0CD2B4 800CC6B4 00000000 */ nop -.L800CC6B8: -/* 0CD2B8 800CC6B8 0C034AE4 */ jal __osViSwapContext -/* 0CD2BC 800CC6BC 00000000 */ nop -/* 0CD2C0 800CC6C0 3C0A8019 */ lui $t2, %hi(D_80195260) # $t2, 0x8019 -/* 0CD2C4 800CC6C4 954A5260 */ lhu $t2, %lo(D_80195260)($t2) -/* 0CD2C8 800CC6C8 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 -/* 0CD2CC 800CC6CC 254BFFFF */ addiu $t3, $t2, -1 -/* 0CD2D0 800CC6D0 316CFFFF */ andi $t4, $t3, 0xffff -/* 0CD2D4 800CC6D4 15800010 */ bnez $t4, .L800CC718 -/* 0CD2D8 800CC6D8 A42B5260 */ sh $t3, %lo(D_80195260)($at) -/* 0CD2DC 800CC6DC 0C034AE0 */ jal func_800D2B80 -/* 0CD2E0 800CC6E0 00000000 */ nop -/* 0CD2E4 800CC6E4 AFA20034 */ sw $v0, 0x34($sp) -/* 0CD2E8 800CC6E8 8FAD0034 */ lw $t5, 0x34($sp) -/* 0CD2EC 800CC6EC 8DAE0010 */ lw $t6, 0x10($t5) -/* 0CD2F0 800CC6F0 11C00005 */ beqz $t6, .L800CC708 -/* 0CD2F4 800CC6F4 00000000 */ nop -/* 0CD2F8 800CC6F8 01C02025 */ move $a0, $t6 -/* 0CD2FC 800CC6FC 8DA50014 */ lw $a1, 0x14($t5) -/* 0CD300 800CC700 0C033630 */ jal osSendMesg -/* 0CD304 800CC704 00003025 */ move $a2, $zero -.L800CC708: -/* 0CD308 800CC708 8FAF0034 */ lw $t7, 0x34($sp) -/* 0CD30C 800CC70C 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 -/* 0CD310 800CC710 95F80002 */ lhu $t8, 2($t7) -/* 0CD314 800CC714 A4385260 */ sh $t8, %lo(D_80195260)($at) -.L800CC718: -/* 0CD318 800CC718 3C198019 */ lui $t9, %hi(D_8019760C) # $t9, 0x8019 -/* 0CD31C 800CC71C 8F39760C */ lw $t9, %lo(D_8019760C)($t9) -/* 0CD320 800CC720 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD324 800CC724 3C018019 */ lui $at, %hi(D_8019760C) # $at, 0x8019 -/* 0CD328 800CC728 27280001 */ addiu $t0, $t9, 1 -/* 0CD32C 800CC72C 1120000C */ beqz $t1, .L800CC760 -/* 0CD330 800CC730 AC28760C */ sw $t0, %lo(D_8019760C)($at) -/* 0CD334 800CC734 0C034468 */ jal osGetCount -/* 0CD338 800CC738 00000000 */ nop -/* 0CD33C 800CC73C AFA20024 */ sw $v0, 0x24($sp) -/* 0CD340 800CC740 8FAA0024 */ lw $t2, 0x24($sp) -/* 0CD344 800CC744 240C0000 */ li $t4, 0 -/* 0CD348 800CC748 3C018019 */ lui $at, %hi(D_80197600) # $at, 0x8019 -/* 0CD34C 800CC74C AC2C7600 */ sw $t4, %lo(D_80197600)($at) -/* 0CD350 800CC750 3C018019 */ lui $at, %hi(D_80197604) # $at, 0x8019 -/* 0CD354 800CC754 01406825 */ move $t5, $t2 -/* 0CD358 800CC758 AC2D7604 */ sw $t5, %lo(D_80197604)($at) -/* 0CD35C 800CC75C AFA00028 */ sw $zero, 0x28($sp) -.L800CC760: -/* 0CD360 800CC760 3C0B8019 */ lui $t3, %hi(D_80197608) # $t3, 0x8019 -/* 0CD364 800CC764 8D6B7608 */ lw $t3, %lo(D_80197608)($t3) -/* 0CD368 800CC768 0C034468 */ jal osGetCount -/* 0CD36C 800CC76C AFAB0024 */ sw $t3, 0x24($sp) -/* 0CD370 800CC770 3C018019 */ lui $at, %hi(D_80197608) # $at, 0x8019 -/* 0CD374 800CC774 AC227608 */ sw $v0, %lo(D_80197608)($at) -/* 0CD378 800CC778 3C0E8019 */ lui $t6, %hi(D_80197608) # $t6, 0x8019 -/* 0CD37C 800CC77C 8DCE7608 */ lw $t6, %lo(D_80197608)($t6) -/* 0CD380 800CC780 8FAF0024 */ lw $t7, 0x24($sp) -/* 0CD384 800CC784 3C0B8019 */ lui $t3, %hi(D_80197604) # $t3, 0x8019 -/* 0CD388 800CC788 8D6B7604 */ lw $t3, %lo(D_80197604)($t3) -/* 0CD38C 800CC78C 01CFC023 */ subu $t8, $t6, $t7 -/* 0CD390 800CC790 03004825 */ move $t1, $t8 -/* 0CD394 800CC794 3C0A8019 */ lui $t2, %hi(D_80197600) # $t2, 0x8019 -/* 0CD398 800CC798 012B6821 */ addu $t5, $t1, $t3 -/* 0CD39C 800CC79C 8D4A7600 */ lw $t2, %lo(D_80197600)($t2) -/* 0CD3A0 800CC7A0 24080000 */ li $t0, 0 -/* 0CD3A4 800CC7A4 01AB082B */ sltu $at, $t5, $t3 -/* 0CD3A8 800CC7A8 00286021 */ addu $t4, $at, $t0 -/* 0CD3AC 800CC7AC 3C018019 */ lui $at, %hi(D_80197600) # $at, 0x8019 -/* 0CD3B0 800CC7B0 018A6021 */ addu $t4, $t4, $t2 -/* 0CD3B4 800CC7B4 AC2C7600 */ sw $t4, %lo(D_80197600)($at) -/* 0CD3B8 800CC7B8 3C018019 */ lui $at, %hi(D_80197604) # $at, 0x8019 -/* 0CD3BC 800CC7BC AFB80024 */ sw $t8, 0x24($sp) -/* 0CD3C0 800CC7C0 1000FFAF */ b .L800CC680 -/* 0CD3C4 800CC7C4 AC2D7604 */ sw $t5, %lo(D_80197604)($at) -.L800CC7C8: -/* 0CD3C8 800CC7C8 0C0349A7 */ jal __osTimerInterrupt -/* 0CD3CC 800CC7CC 00000000 */ nop -/* 0CD3D0 800CC7D0 1000FFAB */ b .L800CC680 -/* 0CD3D4 800CC7D4 00000000 */ nop -/* 0CD3D8 800CC7D8 00000000 */ nop -/* 0CD3DC 800CC7DC 00000000 */ nop -/* 0CD3E0 800CC7E0 00000000 */ nop -/* 0CD3E4 800CC7E4 00000000 */ nop -/* 0CD3E8 800CC7E8 00000000 */ nop -/* 0CD3EC 800CC7EC 00000000 */ nop -/* 0CD3F0 800CC7F0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD3F4 800CC7F4 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD3F8 800CC7F8 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CD3FC 800CC7FC 03E00008 */ jr $ra -/* 0CD400 800CC800 00000000 */ nop - -/* 0CD404 800CC804 00000000 */ nop -/* 0CD408 800CC808 00000000 */ nop -/* 0CD40C 800CC80C 00000000 */ nop -/* 0CD410 800CC810 00000000 */ nop -/* 0CD414 800CC814 00000000 */ nop -/* 0CD418 800CC818 00000000 */ nop -/* 0CD41C 800CC81C 00000000 */ nop -/* 0CD420 800CC820 00000000 */ nop -/* 0CD424 800CC824 00000000 */ nop -/* 0CD428 800CC828 00000000 */ nop -/* 0CD42C 800CC82C 00000000 */ nop -/* 0CD430 800CC830 00000000 */ nop -/* 0CD434 800CC834 00000000 */ nop -/* 0CD438 800CC838 00000000 */ nop -/* 0CD43C 800CC83C 00000000 */ nop -/* 0CD440 800CC840 00000000 */ nop -/* 0CD444 800CC844 00000000 */ nop -/* 0CD448 800CC848 00000000 */ nop -/* 0CD44C 800CC84C 00000000 */ nop -glabel osViSetMode -/* 0CD450 800CC850 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CD454 800CC854 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD458 800CC858 AFA40028 */ sw $a0, 0x28($sp) -/* 0CD45C 800CC85C 0C0346AC */ jal __osDisableInt -/* 0CD460 800CC860 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD464 800CC864 3C0F800F */ lui $t7, %hi(D_800EB434) # $t7, 0x800f -/* 0CD468 800CC868 8DEFB434 */ lw $t7, %lo(D_800EB434)($t7) -/* 0CD46C 800CC86C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD470 800CC870 3C19800F */ lui $t9, %hi(D_800EB434) # $t9, 0x800f -/* 0CD474 800CC874 24180001 */ li $t8, 1 -/* 0CD478 800CC878 ADEE0008 */ sw $t6, 8($t7) -/* 0CD47C 800CC87C 8F39B434 */ lw $t9, %lo(D_800EB434)($t9) -/* 0CD480 800CC880 3C08800F */ lui $t0, %hi(D_800EB434) # $t0, 0x800f -/* 0CD484 800CC884 00408025 */ move $s0, $v0 -/* 0CD488 800CC888 A7380000 */ sh $t8, ($t9) -/* 0CD48C 800CC88C 8D08B434 */ lw $t0, %lo(D_800EB434)($t0) -/* 0CD490 800CC890 02002025 */ move $a0, $s0 -/* 0CD494 800CC894 8D090008 */ lw $t1, 8($t0) -/* 0CD498 800CC898 8D2A0004 */ lw $t2, 4($t1) -/* 0CD49C 800CC89C 0C0346B4 */ jal __osRestoreInt -/* 0CD4A0 800CC8A0 AD0A000C */ sw $t2, 0xc($t0) -/* 0CD4A4 800CC8A4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD4A8 800CC8A8 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD4AC 800CC8AC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CD4B0 800CC8B0 03E00008 */ jr $ra -/* 0CD4B4 800CC8B4 00000000 */ nop - -/* 0CD4B8 800CC8B8 00000000 */ nop -/* 0CD4BC 800CC8BC 00000000 */ nop -glabel osViBlack -/* 0CD4C0 800CC8C0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CD4C4 800CC8C4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD4C8 800CC8C8 AFA40028 */ sw $a0, 0x28($sp) -/* 0CD4CC 800CC8CC 0C0346AC */ jal __osDisableInt -/* 0CD4D0 800CC8D0 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD4D4 800CC8D4 93AE002B */ lbu $t6, 0x2b($sp) -/* 0CD4D8 800CC8D8 00408025 */ move $s0, $v0 -/* 0CD4DC 800CC8DC 11C00007 */ beqz $t6, .L800CC8FC -/* 0CD4E0 800CC8E0 00000000 */ nop -/* 0CD4E4 800CC8E4 3C0F800F */ lui $t7, %hi(D_800EB434) # $t7, 0x800f -/* 0CD4E8 800CC8E8 8DEFB434 */ lw $t7, %lo(D_800EB434)($t7) -/* 0CD4EC 800CC8EC 95F80000 */ lhu $t8, ($t7) -/* 0CD4F0 800CC8F0 37190020 */ ori $t9, $t8, 0x20 -/* 0CD4F4 800CC8F4 10000007 */ b .L800CC914 -/* 0CD4F8 800CC8F8 A5F90000 */ sh $t9, ($t7) -.L800CC8FC: -/* 0CD4FC 800CC8FC 3C08800F */ lui $t0, %hi(D_800EB434) # $t0, 0x800f -/* 0CD500 800CC900 8D08B434 */ lw $t0, %lo(D_800EB434)($t0) -/* 0CD504 800CC904 2401FFDF */ li $at, -33 -/* 0CD508 800CC908 95090000 */ lhu $t1, ($t0) -/* 0CD50C 800CC90C 01215024 */ and $t2, $t1, $at -/* 0CD510 800CC910 A50A0000 */ sh $t2, ($t0) -.L800CC914: -/* 0CD514 800CC914 0C0346B4 */ jal __osRestoreInt -/* 0CD518 800CC918 02002025 */ move $a0, $s0 -/* 0CD51C 800CC91C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD520 800CC920 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD524 800CC924 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CD528 800CC928 03E00008 */ jr $ra -/* 0CD52C 800CC92C 00000000 */ nop - -glabel osViSetSpecialFeatures -/* 0CD530 800CC930 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CD534 800CC934 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD538 800CC938 AFA40028 */ sw $a0, 0x28($sp) -/* 0CD53C 800CC93C 0C0346AC */ jal __osDisableInt -/* 0CD540 800CC940 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD544 800CC944 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD548 800CC948 00408025 */ move $s0, $v0 -/* 0CD54C 800CC94C 31CF0001 */ andi $t7, $t6, 1 -/* 0CD550 800CC950 11E00006 */ beqz $t7, .L800CC96C -/* 0CD554 800CC954 00000000 */ nop -/* 0CD558 800CC958 3C18800F */ lui $t8, %hi(D_800EB434) # $t8, 0x800f -/* 0CD55C 800CC95C 8F18B434 */ lw $t8, %lo(D_800EB434)($t8) -/* 0CD560 800CC960 8F19000C */ lw $t9, 0xc($t8) -/* 0CD564 800CC964 37280008 */ ori $t0, $t9, 8 -/* 0CD568 800CC968 AF08000C */ sw $t0, 0xc($t8) -.L800CC96C: -/* 0CD56C 800CC96C 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD570 800CC970 312A0002 */ andi $t2, $t1, 2 -/* 0CD574 800CC974 11400007 */ beqz $t2, .L800CC994 -/* 0CD578 800CC978 00000000 */ nop -/* 0CD57C 800CC97C 3C0B800F */ lui $t3, %hi(D_800EB434) # $t3, 0x800f -/* 0CD580 800CC980 8D6BB434 */ lw $t3, %lo(D_800EB434)($t3) -/* 0CD584 800CC984 2401FFF7 */ li $at, -9 -/* 0CD588 800CC988 8D6C000C */ lw $t4, 0xc($t3) -/* 0CD58C 800CC98C 01816824 */ and $t5, $t4, $at -/* 0CD590 800CC990 AD6D000C */ sw $t5, 0xc($t3) -.L800CC994: -/* 0CD594 800CC994 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD598 800CC998 31CF0004 */ andi $t7, $t6, 4 -/* 0CD59C 800CC99C 11E00006 */ beqz $t7, .L800CC9B8 -/* 0CD5A0 800CC9A0 00000000 */ nop -/* 0CD5A4 800CC9A4 3C19800F */ lui $t9, %hi(D_800EB434) # $t9, 0x800f -/* 0CD5A8 800CC9A8 8F39B434 */ lw $t9, %lo(D_800EB434)($t9) -/* 0CD5AC 800CC9AC 8F28000C */ lw $t0, 0xc($t9) -/* 0CD5B0 800CC9B0 35180004 */ ori $t8, $t0, 4 -/* 0CD5B4 800CC9B4 AF38000C */ sw $t8, 0xc($t9) -.L800CC9B8: -/* 0CD5B8 800CC9B8 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD5BC 800CC9BC 312A0008 */ andi $t2, $t1, 8 -/* 0CD5C0 800CC9C0 11400007 */ beqz $t2, .L800CC9E0 -/* 0CD5C4 800CC9C4 00000000 */ nop -/* 0CD5C8 800CC9C8 3C0C800F */ lui $t4, %hi(D_800EB434) # $t4, 0x800f -/* 0CD5CC 800CC9CC 8D8CB434 */ lw $t4, %lo(D_800EB434)($t4) -/* 0CD5D0 800CC9D0 2401FFFB */ li $at, -5 -/* 0CD5D4 800CC9D4 8D8D000C */ lw $t5, 0xc($t4) -/* 0CD5D8 800CC9D8 01A15824 */ and $t3, $t5, $at -/* 0CD5DC 800CC9DC AD8B000C */ sw $t3, 0xc($t4) -.L800CC9E0: -/* 0CD5E0 800CC9E0 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD5E4 800CC9E4 31CF0010 */ andi $t7, $t6, 0x10 -/* 0CD5E8 800CC9E8 11E00006 */ beqz $t7, .L800CCA04 -/* 0CD5EC 800CC9EC 00000000 */ nop -/* 0CD5F0 800CC9F0 3C08800F */ lui $t0, %hi(D_800EB434) # $t0, 0x800f -/* 0CD5F4 800CC9F4 8D08B434 */ lw $t0, %lo(D_800EB434)($t0) -/* 0CD5F8 800CC9F8 8D18000C */ lw $t8, 0xc($t0) -/* 0CD5FC 800CC9FC 37190010 */ ori $t9, $t8, 0x10 -/* 0CD600 800CCA00 AD19000C */ sw $t9, 0xc($t0) -.L800CCA04: -/* 0CD604 800CCA04 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD608 800CCA08 312A0020 */ andi $t2, $t1, 0x20 -/* 0CD60C 800CCA0C 11400007 */ beqz $t2, .L800CCA2C -/* 0CD610 800CCA10 00000000 */ nop -/* 0CD614 800CCA14 3C0D800F */ lui $t5, %hi(D_800EB434) # $t5, 0x800f -/* 0CD618 800CCA18 8DADB434 */ lw $t5, %lo(D_800EB434)($t5) -/* 0CD61C 800CCA1C 2401FFEF */ li $at, -17 -/* 0CD620 800CCA20 8DAB000C */ lw $t3, 0xc($t5) -/* 0CD624 800CCA24 01616024 */ and $t4, $t3, $at -/* 0CD628 800CCA28 ADAC000C */ sw $t4, 0xc($t5) -.L800CCA2C: -/* 0CD62C 800CCA2C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD630 800CCA30 31CF0040 */ andi $t7, $t6, 0x40 -/* 0CD634 800CCA34 11E0000D */ beqz $t7, .L800CCA6C -/* 0CD638 800CCA38 00000000 */ nop -/* 0CD63C 800CCA3C 3C18800F */ lui $t8, %hi(D_800EB434) # $t8, 0x800f -/* 0CD640 800CCA40 8F18B434 */ lw $t8, %lo(D_800EB434)($t8) -/* 0CD644 800CCA44 3C010001 */ lui $at, 1 -/* 0CD648 800CCA48 3C09800F */ lui $t1, %hi(D_800EB434) # $t1, 0x800f -/* 0CD64C 800CCA4C 8F19000C */ lw $t9, 0xc($t8) -/* 0CD650 800CCA50 03214025 */ or $t0, $t9, $at -/* 0CD654 800CCA54 AF08000C */ sw $t0, 0xc($t8) -/* 0CD658 800CCA58 8D29B434 */ lw $t1, %lo(D_800EB434)($t1) -/* 0CD65C 800CCA5C 2401FCFF */ li $at, -769 -/* 0CD660 800CCA60 8D2A000C */ lw $t2, 0xc($t1) -/* 0CD664 800CCA64 01415824 */ and $t3, $t2, $at -/* 0CD668 800CCA68 AD2B000C */ sw $t3, 0xc($t1) -.L800CCA6C: -/* 0CD66C 800CCA6C 8FAC0028 */ lw $t4, 0x28($sp) -/* 0CD670 800CCA70 318D0080 */ andi $t5, $t4, 0x80 -/* 0CD674 800CCA74 11A00010 */ beqz $t5, .L800CCAB8 -/* 0CD678 800CCA78 00000000 */ nop -/* 0CD67C 800CCA7C 3C0E800F */ lui $t6, %hi(D_800EB434) # $t6, 0x800f -/* 0CD680 800CCA80 8DCEB434 */ lw $t6, %lo(D_800EB434)($t6) -/* 0CD684 800CCA84 3C01FFFE */ lui $at, (0xFFFEFFFF >> 16) # lui $at, 0xfffe -/* 0CD688 800CCA88 3421FFFF */ ori $at, (0xFFFEFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0CD68C 800CCA8C 8DCF000C */ lw $t7, 0xc($t6) -/* 0CD690 800CCA90 3C08800F */ lui $t0, %hi(D_800EB434) # $t0, 0x800f -/* 0CD694 800CCA94 01E1C824 */ and $t9, $t7, $at -/* 0CD698 800CCA98 ADD9000C */ sw $t9, 0xc($t6) -/* 0CD69C 800CCA9C 8D08B434 */ lw $t0, %lo(D_800EB434)($t0) -/* 0CD6A0 800CCAA0 8D0A0008 */ lw $t2, 8($t0) -/* 0CD6A4 800CCAA4 8D18000C */ lw $t8, 0xc($t0) -/* 0CD6A8 800CCAA8 8D4B0004 */ lw $t3, 4($t2) -/* 0CD6AC 800CCAAC 31690300 */ andi $t1, $t3, 0x300 -/* 0CD6B0 800CCAB0 03096025 */ or $t4, $t8, $t1 -/* 0CD6B4 800CCAB4 AD0C000C */ sw $t4, 0xc($t0) -.L800CCAB8: -/* 0CD6B8 800CCAB8 3C0D800F */ lui $t5, %hi(D_800EB434) # $t5, 0x800f -/* 0CD6BC 800CCABC 8DADB434 */ lw $t5, %lo(D_800EB434)($t5) -/* 0CD6C0 800CCAC0 02002025 */ move $a0, $s0 -/* 0CD6C4 800CCAC4 95AF0000 */ lhu $t7, ($t5) -/* 0CD6C8 800CCAC8 35F90008 */ ori $t9, $t7, 8 -/* 0CD6CC 800CCACC 0C0346B4 */ jal __osRestoreInt -/* 0CD6D0 800CCAD0 A5B90000 */ sh $t9, ($t5) -/* 0CD6D4 800CCAD4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD6D8 800CCAD8 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD6DC 800CCADC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CD6E0 800CCAE0 03E00008 */ jr $ra -/* 0CD6E4 800CCAE4 00000000 */ nop - -/* 0CD6E8 800CCAE8 00000000 */ nop -/* 0CD6EC 800CCAEC 00000000 */ nop -glabel osCreatePiManager -/* 0CD6F0 800CCAF0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0CD6F4 800CCAF4 3C0E800F */ lui $t6, %hi(D_800EB340) # $t6, 0x800f -/* 0CD6F8 800CCAF8 8DCEB340 */ lw $t6, %lo(D_800EB340)($t6) -/* 0CD6FC 800CCAFC AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD700 800CCB00 AFA40030 */ sw $a0, 0x30($sp) -/* 0CD704 800CCB04 AFA50034 */ sw $a1, 0x34($sp) -/* 0CD708 800CCB08 AFA60038 */ sw $a2, 0x38($sp) -/* 0CD70C 800CCB0C 15C00056 */ bnez $t6, .L800CCC68 -/* 0CD710 800CCB10 AFA7003C */ sw $a3, 0x3c($sp) -/* 0CD714 800CCB14 8FA40034 */ lw $a0, 0x34($sp) -/* 0CD718 800CCB18 8FA50038 */ lw $a1, 0x38($sp) -/* 0CD71C 800CCB1C 0C033358 */ jal osCreateMesgQueue -/* 0CD720 800CCB20 8FA6003C */ lw $a2, 0x3c($sp) -/* 0CD724 800CCB24 3C048019 */ lui $a0, %hi(D_80196420) # $a0, 0x8019 -/* 0CD728 800CCB28 3C058019 */ lui $a1, %hi(D_80196438) # $a1, 0x8019 -/* 0CD72C 800CCB2C 24A56438 */ addiu $a1, %lo(D_80196438) # addiu $a1, $a1, 0x6438 -/* 0CD730 800CCB30 24846420 */ addiu $a0, %lo(D_80196420) # addiu $a0, $a0, 0x6420 -/* 0CD734 800CCB34 0C033358 */ jal osCreateMesgQueue -/* 0CD738 800CCB38 24060001 */ li $a2, 1 -/* 0CD73C 800CCB3C 3C0F800F */ lui $t7, %hi(D_800EB440) # $t7, 0x800f -/* 0CD740 800CCB40 8DEFB440 */ lw $t7, %lo(D_800EB440)($t7) -/* 0CD744 800CCB44 15E00003 */ bnez $t7, .L800CCB54 -/* 0CD748 800CCB48 00000000 */ nop -/* 0CD74C 800CCB4C 0C034BBC */ jal __osPiCreateAccessQueue -/* 0CD750 800CCB50 00000000 */ nop -.L800CCB54: -/* 0CD754 800CCB54 3C058019 */ lui $a1, %hi(D_80196420) # $a1, 0x8019 -/* 0CD758 800CCB58 3C062222 */ lui $a2, (0x22222222 >> 16) # lui $a2, 0x2222 -/* 0CD75C 800CCB5C 34C62222 */ ori $a2, (0x22222222 & 0xFFFF) # ori $a2, $a2, 0x2222 -/* 0CD760 800CCB60 24A56420 */ addiu $a1, %lo(D_80196420) # addiu $a1, $a1, 0x6420 -/* 0CD764 800CCB64 0C033380 */ jal osSetEventMesg -/* 0CD768 800CCB68 24040008 */ li $a0, 8 -/* 0CD76C 800CCB6C 2418FFFF */ li $t8, -1 -/* 0CD770 800CCB70 AFB80028 */ sw $t8, 0x28($sp) -/* 0CD774 800CCB74 0C034A84 */ jal osGetThreadPri -/* 0CD778 800CCB78 00002025 */ move $a0, $zero -/* 0CD77C 800CCB7C AFA20024 */ sw $v0, 0x24($sp) -/* 0CD780 800CCB80 8FB90024 */ lw $t9, 0x24($sp) -/* 0CD784 800CCB84 8FA80030 */ lw $t0, 0x30($sp) -/* 0CD788 800CCB88 0328082A */ slt $at, $t9, $t0 -/* 0CD78C 800CCB8C 10200005 */ beqz $at, .L800CCBA4 -/* 0CD790 800CCB90 00000000 */ nop -/* 0CD794 800CCB94 AFB90028 */ sw $t9, 0x28($sp) -/* 0CD798 800CCB98 00002025 */ move $a0, $zero -/* 0CD79C 800CCB9C 0C033320 */ jal osSetThreadPri -/* 0CD7A0 800CCBA0 01002825 */ move $a1, $t0 -.L800CCBA4: -/* 0CD7A4 800CCBA4 0C0346AC */ jal __osDisableInt -/* 0CD7A8 800CCBA8 00000000 */ nop -/* 0CD7AC 800CCBAC 3C01800F */ lui $at, %hi(D_800EB340) # $at, 0x800f -/* 0CD7B0 800CCBB0 8FAB0034 */ lw $t3, 0x34($sp) -/* 0CD7B4 800CCBB4 3C0A8019 */ lui $t2, %hi(D_80195270) # $t2, 0x8019 -/* 0CD7B8 800CCBB8 3C0C8019 */ lui $t4, %hi(D_80196420) # $t4, 0x8019 -/* 0CD7BC 800CCBBC 24090001 */ li $t1, 1 -/* 0CD7C0 800CCBC0 254A5270 */ addiu $t2, %lo(D_80195270) # addiu $t2, $t2, 0x5270 -/* 0CD7C4 800CCBC4 258C6420 */ addiu $t4, %lo(D_80196420) # addiu $t4, $t4, 0x6420 -/* 0CD7C8 800CCBC8 AC29B340 */ sw $t1, %lo(D_800EB340)($at) -/* 0CD7CC 800CCBCC AC2AB344 */ sw $t2, %lo(D_800EB340+0x4)($at) -/* 0CD7D0 800CCBD0 AC2CB34C */ sw $t4, %lo(D_800EB340+0xC)($at) -/* 0CD7D4 800CCBD4 3C188019 */ lui $t8, %hi(D_80195420) # $t8, 0x8019 -/* 0CD7D8 800CCBD8 AC2BB348 */ sw $t3, %lo(D_800EB340+0x8)($at) -/* 0CD7DC 800CCBDC 8FA80030 */ lw $t0, 0x30($sp) -/* 0CD7E0 800CCBE0 3C01800F */ lui $at, %hi(D_800EB340+0x18) # $at, 0x800f -/* 0CD7E4 800CCBE4 3C0D8019 */ lui $t5, %hi(D_80197628) # $t5, 0x8019 -/* 0CD7E8 800CCBE8 3C0E800D */ lui $t6, %hi(osPiRawStartDma) # $t6, 0x800d -/* 0CD7EC 800CCBEC 3C0F800D */ lui $t7, %hi(osEPiRawStartDma) # $t7, 0x800d -/* 0CD7F0 800CCBF0 27185420 */ addiu $t8, %lo(D_80195420) # addiu $t8, $t8, 0x5420 -/* 0CD7F4 800CCBF4 25AD7628 */ addiu $t5, %lo(D_80197628) # addiu $t5, $t5, 0x7628 -/* 0CD7F8 800CCBF8 25CE2FB0 */ addiu $t6, %lo(osPiRawStartDma) # addiu $t6, $t6, 0x2fb0 -/* 0CD7FC 800CCBFC 25EF3090 */ addiu $t7, %lo(osEPiRawStartDma) # addiu $t7, $t7, 0x3090 -/* 0CD800 800CCC00 27191000 */ addiu $t9, $t8, 0x1000 -/* 0CD804 800CCC04 3C06800D */ lui $a2, %hi(D_800D3170) # $a2, 0x800d -/* 0CD808 800CCC08 3C07800F */ lui $a3, %hi(D_800EB340) # $a3, 0x800f -/* 0CD80C 800CCC0C AFA2002C */ sw $v0, 0x2c($sp) -/* 0CD810 800CCC10 AC2DB350 */ sw $t5, %lo(D_800EB340+0x10)($at) -/* 0CD814 800CCC14 AC2EB354 */ sw $t6, %lo(D_800EB340+0x14)($at) -/* 0CD818 800CCC18 AC2FB358 */ sw $t7, %lo(D_800EB340+0x18)($at) -/* 0CD81C 800CCC1C 24E7B340 */ addiu $a3, %lo(D_800EB340) # addiu $a3, $a3, -0x4cc0 -/* 0CD820 800CCC20 24C63170 */ addiu $a2, %lo(D_800D3170) # addiu $a2, $a2, 0x3170 -/* 0CD824 800CCC24 AFB90010 */ sw $t9, 0x10($sp) -/* 0CD828 800CCC28 01402025 */ move $a0, $t2 -/* 0CD82C 800CCC2C 00002825 */ move $a1, $zero -/* 0CD830 800CCC30 0C032FDC */ jal osCreateThread -/* 0CD834 800CCC34 AFA80014 */ sw $t0, 0x14($sp) -/* 0CD838 800CCC38 3C048019 */ lui $a0, %hi(D_80195270) # $a0, 0x8019 -/* 0CD83C 800CCC3C 0C0330D8 */ jal osStartThread -/* 0CD840 800CCC40 24845270 */ addiu $a0, %lo(D_80195270) # addiu $a0, $a0, 0x5270 -/* 0CD844 800CCC44 0C0346B4 */ jal __osRestoreInt -/* 0CD848 800CCC48 8FA4002C */ lw $a0, 0x2c($sp) -/* 0CD84C 800CCC4C 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD850 800CCC50 2401FFFF */ li $at, -1 -/* 0CD854 800CCC54 11210004 */ beq $t1, $at, .L800CCC68 -/* 0CD858 800CCC58 00000000 */ nop -/* 0CD85C 800CCC5C 00002025 */ move $a0, $zero -/* 0CD860 800CCC60 0C033320 */ jal osSetThreadPri -/* 0CD864 800CCC64 01202825 */ move $a1, $t1 -.L800CCC68: -/* 0CD868 800CCC68 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD86C 800CCC6C 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0CD870 800CCC70 03E00008 */ jr $ra -/* 0CD874 800CCC74 00000000 */ nop - -/* 0CD878 800CCC78 00000000 */ nop -/* 0CD87C 800CCC7C 00000000 */ nop -glabel osSetThreadPri -/* 0CD880 800CCC80 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CD884 800CCC84 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD888 800CCC88 AFA40028 */ sw $a0, 0x28($sp) -/* 0CD88C 800CCC8C AFA5002C */ sw $a1, 0x2c($sp) -/* 0CD890 800CCC90 0C0346AC */ jal __osDisableInt -/* 0CD894 800CCC94 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD898 800CCC98 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD89C 800CCC9C 00408025 */ move $s0, $v0 -/* 0CD8A0 800CCCA0 15C00004 */ bnez $t6, .L800CCCB4 -/* 0CD8A4 800CCCA4 00000000 */ nop -/* 0CD8A8 800CCCA8 3C0F800F */ lui $t7, %hi(D_800EB3B0) # $t7, 0x800f -/* 0CD8AC 800CCCAC 8DEFB3B0 */ lw $t7, %lo(D_800EB3B0)($t7) -/* 0CD8B0 800CCCB0 AFAF0028 */ sw $t7, 0x28($sp) -.L800CCCB4: -/* 0CD8B4 800CCCB4 8FB80028 */ lw $t8, 0x28($sp) -/* 0CD8B8 800CCCB8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0CD8BC 800CCCBC 8F190004 */ lw $t9, 4($t8) -/* 0CD8C0 800CCCC0 13280020 */ beq $t9, $t0, .L800CCD44 -/* 0CD8C4 800CCCC4 00000000 */ nop -/* 0CD8C8 800CCCC8 AF080004 */ sw $t0, 4($t8) -/* 0CD8CC 800CCCCC 3C0A800F */ lui $t2, %hi(D_800EB3B0) # $t2, 0x800f -/* 0CD8D0 800CCCD0 8D4AB3B0 */ lw $t2, %lo(D_800EB3B0)($t2) -/* 0CD8D4 800CCCD4 8FA90028 */ lw $t1, 0x28($sp) -/* 0CD8D8 800CCCD8 112A000C */ beq $t1, $t2, .L800CCD0C -/* 0CD8DC 800CCCDC 00000000 */ nop -/* 0CD8E0 800CCCE0 952B0010 */ lhu $t3, 0x10($t1) -/* 0CD8E4 800CCCE4 24010001 */ li $at, 1 -/* 0CD8E8 800CCCE8 11610008 */ beq $t3, $at, .L800CCD0C -/* 0CD8EC 800CCCEC 00000000 */ nop -/* 0CD8F0 800CCCF0 8D240008 */ lw $a0, 8($t1) -/* 0CD8F4 800CCCF4 0C0346BC */ jal __osDequeueThread -/* 0CD8F8 800CCCF8 01202825 */ move $a1, $t1 -/* 0CD8FC 800CCCFC 8FAC0028 */ lw $t4, 0x28($sp) -/* 0CD900 800CCD00 8D840008 */ lw $a0, 8($t4) -/* 0CD904 800CCD04 0C034633 */ jal __osEnqueueThread -/* 0CD908 800CCD08 01802825 */ move $a1, $t4 -.L800CCD0C: -/* 0CD90C 800CCD0C 3C0D800F */ lui $t5, %hi(D_800EB3B0) # $t5, 0x800f -/* 0CD910 800CCD10 3C0F800F */ lui $t7, %hi(D_800EB3A8) # $t7, 0x800f -/* 0CD914 800CCD14 8DEFB3A8 */ lw $t7, %lo(D_800EB3A8)($t7) -/* 0CD918 800CCD18 8DADB3B0 */ lw $t5, %lo(D_800EB3B0)($t5) -/* 0CD91C 800CCD1C 8DF90004 */ lw $t9, 4($t7) -/* 0CD920 800CCD20 8DAE0004 */ lw $t6, 4($t5) -/* 0CD924 800CCD24 01D9082A */ slt $at, $t6, $t9 -/* 0CD928 800CCD28 10200006 */ beqz $at, .L800CCD44 -/* 0CD92C 800CCD2C 00000000 */ nop -/* 0CD930 800CCD30 24080002 */ li $t0, 2 -/* 0CD934 800CCD34 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0CD938 800CCD38 A5A80010 */ sh $t0, 0x10($t5) -/* 0CD93C 800CCD3C 0C0345F3 */ jal __osEnqueueAndYield -/* 0CD940 800CCD40 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -.L800CCD44: -/* 0CD944 800CCD44 0C0346B4 */ jal __osRestoreInt -/* 0CD948 800CCD48 02002025 */ move $a0, $s0 -/* 0CD94C 800CCD4C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD950 800CCD50 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD954 800CCD54 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CD958 800CCD58 03E00008 */ jr $ra -/* 0CD95C 800CCD5C 00000000 */ nop - -glabel osCreateMesgQueue -/* 0CD960 800CCD60 3C0E800F */ lui $t6, %hi(D_800EB3A0) # $t6, 0x800f -/* 0CD964 800CCD64 3C0F800F */ lui $t7, %hi(D_800EB3A0) # $t7, 0x800f -/* 0CD968 800CCD68 25CEB3A0 */ addiu $t6, %lo(D_800EB3A0) # addiu $t6, $t6, -0x4c60 -/* 0CD96C 800CCD6C 25EFB3A0 */ addiu $t7, %lo(D_800EB3A0) # addiu $t7, $t7, -0x4c60 -/* 0CD970 800CCD70 AC8E0000 */ sw $t6, ($a0) -/* 0CD974 800CCD74 AC8F0004 */ sw $t7, 4($a0) -/* 0CD978 800CCD78 AC800008 */ sw $zero, 8($a0) -/* 0CD97C 800CCD7C AC80000C */ sw $zero, 0xc($a0) -/* 0CD980 800CCD80 AC860010 */ sw $a2, 0x10($a0) -/* 0CD984 800CCD84 03E00008 */ jr $ra -/* 0CD988 800CCD88 AC850014 */ sw $a1, 0x14($a0) - -/* 0CD98C 800CCD8C 00000000 */ nop -glabel osViSetEvent -/* 0CD990 800CCD90 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CD994 800CCD94 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CD998 800CCD98 AFA40028 */ sw $a0, 0x28($sp) -/* 0CD99C 800CCD9C AFA5002C */ sw $a1, 0x2c($sp) -/* 0CD9A0 800CCDA0 AFA60030 */ sw $a2, 0x30($sp) -/* 0CD9A4 800CCDA4 0C0346AC */ jal __osDisableInt -/* 0CD9A8 800CCDA8 AFB00018 */ sw $s0, 0x18($sp) -/* 0CD9AC 800CCDAC 3C0F800F */ lui $t7, %hi(D_800EB434) # $t7, 0x800f -/* 0CD9B0 800CCDB0 8DEFB434 */ lw $t7, %lo(D_800EB434)($t7) -/* 0CD9B4 800CCDB4 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CD9B8 800CCDB8 3C19800F */ lui $t9, %hi(D_800EB434) # $t9, 0x800f -/* 0CD9BC 800CCDBC 3C09800F */ lui $t1, %hi(D_800EB434) # $t1, 0x800f -/* 0CD9C0 800CCDC0 ADEE0010 */ sw $t6, 0x10($t7) -/* 0CD9C4 800CCDC4 8F39B434 */ lw $t9, %lo(D_800EB434)($t9) -/* 0CD9C8 800CCDC8 8FB8002C */ lw $t8, 0x2c($sp) -/* 0CD9CC 800CCDCC 00408025 */ move $s0, $v0 -/* 0CD9D0 800CCDD0 02002025 */ move $a0, $s0 -/* 0CD9D4 800CCDD4 AF380014 */ sw $t8, 0x14($t9) -/* 0CD9D8 800CCDD8 8D29B434 */ lw $t1, %lo(D_800EB434)($t1) -/* 0CD9DC 800CCDDC 8FA80030 */ lw $t0, 0x30($sp) -/* 0CD9E0 800CCDE0 0C0346B4 */ jal __osRestoreInt -/* 0CD9E4 800CCDE4 A5280002 */ sh $t0, 2($t1) -/* 0CD9E8 800CCDE8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CD9EC 800CCDEC 8FB00018 */ lw $s0, 0x18($sp) -/* 0CD9F0 800CCDF0 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CD9F4 800CCDF4 03E00008 */ jr $ra -/* 0CD9F8 800CCDF8 00000000 */ nop - -/* 0CD9FC 800CCDFC 00000000 */ nop -glabel osSetEventMesg -/* 0CDA00 800CCE00 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CDA04 800CCE04 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CDA08 800CCE08 AFA40028 */ sw $a0, 0x28($sp) -/* 0CDA0C 800CCE0C AFA5002C */ sw $a1, 0x2c($sp) -/* 0CDA10 800CCE10 AFA60030 */ sw $a2, 0x30($sp) -/* 0CDA14 800CCE14 0C0346AC */ jal __osDisableInt -/* 0CDA18 800CCE18 AFB00018 */ sw $s0, 0x18($sp) -/* 0CDA1C 800CCE1C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CDA20 800CCE20 3C188019 */ lui $t8, %hi(D_80196440) # $t8, 0x8019 -/* 0CDA24 800CCE24 8FA8002C */ lw $t0, 0x2c($sp) -/* 0CDA28 800CCE28 27186440 */ addiu $t8, %lo(D_80196440) # addiu $t8, $t8, 0x6440 -/* 0CDA2C 800CCE2C 000E78C0 */ sll $t7, $t6, 3 -/* 0CDA30 800CCE30 01F8C821 */ addu $t9, $t7, $t8 -/* 0CDA34 800CCE34 AFB90020 */ sw $t9, 0x20($sp) -/* 0CDA38 800CCE38 AF280000 */ sw $t0, ($t9) -/* 0CDA3C 800CCE3C 8FAA0020 */ lw $t2, 0x20($sp) -/* 0CDA40 800CCE40 8FA90030 */ lw $t1, 0x30($sp) -/* 0CDA44 800CCE44 00408025 */ move $s0, $v0 -/* 0CDA48 800CCE48 02002025 */ move $a0, $s0 -/* 0CDA4C 800CCE4C 0C0346B4 */ jal __osRestoreInt -/* 0CDA50 800CCE50 AD490004 */ sw $t1, 4($t2) -/* 0CDA54 800CCE54 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CDA58 800CCE58 8FB00018 */ lw $s0, 0x18($sp) -/* 0CDA5C 800CCE5C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0CDA60 800CCE60 03E00008 */ jr $ra -/* 0CDA64 800CCE64 00000000 */ nop - -/* 0CDA68 800CCE68 00000000 */ nop -/* 0CDA6C 800CCE6C 00000000 */ nop -glabel osSpTaskDunno -/* 0CDA70 800CCE70 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CDA74 800CCE74 3C0E8019 */ lui $t6, %hi(D_801964C0) # $t6, 0x8019 -/* 0CDA78 800CCE78 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CDA7C 800CCE7C AFA40020 */ sw $a0, 0x20($sp) -/* 0CDA80 800CCE80 25CE64C0 */ addiu $t6, %lo(D_801964C0) # addiu $t6, $t6, 0x64c0 -/* 0CDA84 800CCE84 AFAE001C */ sw $t6, 0x1c($sp) -/* 0CDA88 800CCE88 01C02825 */ move $a1, $t6 -/* 0CDA8C 800CCE8C 8FA40020 */ lw $a0, 0x20($sp) -/* 0CDA90 800CCE90 0C034D48 */ jal bcopy -/* 0CDA94 800CCE94 24060040 */ li $a2, 64 -/* 0CDA98 800CCE98 8FAF001C */ lw $t7, 0x1c($sp) -/* 0CDA9C 800CCE9C 8DF80010 */ lw $t8, 0x10($t7) -/* 0CDAA0 800CCEA0 13000005 */ beqz $t8, .L800CCEB8 -/* 0CDAA4 800CCEA4 00000000 */ nop -/* 0CDAA8 800CCEA8 0C034E0C */ jal osVirtualToPhysical -/* 0CDAAC 800CCEAC 03002025 */ move $a0, $t8 -/* 0CDAB0 800CCEB0 8FB9001C */ lw $t9, 0x1c($sp) -/* 0CDAB4 800CCEB4 AF220010 */ sw $v0, 0x10($t9) -.L800CCEB8: -/* 0CDAB8 800CCEB8 8FA8001C */ lw $t0, 0x1c($sp) -/* 0CDABC 800CCEBC 8D090018 */ lw $t1, 0x18($t0) -/* 0CDAC0 800CCEC0 11200005 */ beqz $t1, .L800CCED8 -/* 0CDAC4 800CCEC4 00000000 */ nop -/* 0CDAC8 800CCEC8 0C034E0C */ jal osVirtualToPhysical -/* 0CDACC 800CCECC 01202025 */ move $a0, $t1 -/* 0CDAD0 800CCED0 8FAA001C */ lw $t2, 0x1c($sp) -/* 0CDAD4 800CCED4 AD420018 */ sw $v0, 0x18($t2) -.L800CCED8: -/* 0CDAD8 800CCED8 8FAB001C */ lw $t3, 0x1c($sp) -/* 0CDADC 800CCEDC 8D6C0020 */ lw $t4, 0x20($t3) -/* 0CDAE0 800CCEE0 11800005 */ beqz $t4, .L800CCEF8 -/* 0CDAE4 800CCEE4 00000000 */ nop -/* 0CDAE8 800CCEE8 0C034E0C */ jal osVirtualToPhysical -/* 0CDAEC 800CCEEC 01802025 */ move $a0, $t4 -/* 0CDAF0 800CCEF0 8FAD001C */ lw $t5, 0x1c($sp) -/* 0CDAF4 800CCEF4 ADA20020 */ sw $v0, 0x20($t5) -.L800CCEF8: -/* 0CDAF8 800CCEF8 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CDAFC 800CCEFC 8DCF0028 */ lw $t7, 0x28($t6) -/* 0CDB00 800CCF00 11E00005 */ beqz $t7, .L800CCF18 -/* 0CDB04 800CCF04 00000000 */ nop -/* 0CDB08 800CCF08 0C034E0C */ jal osVirtualToPhysical -/* 0CDB0C 800CCF0C 01E02025 */ move $a0, $t7 -/* 0CDB10 800CCF10 8FB8001C */ lw $t8, 0x1c($sp) -/* 0CDB14 800CCF14 AF020028 */ sw $v0, 0x28($t8) -.L800CCF18: -/* 0CDB18 800CCF18 8FB9001C */ lw $t9, 0x1c($sp) -/* 0CDB1C 800CCF1C 8F28002C */ lw $t0, 0x2c($t9) -/* 0CDB20 800CCF20 11000005 */ beqz $t0, .L800CCF38 -/* 0CDB24 800CCF24 00000000 */ nop -/* 0CDB28 800CCF28 0C034E0C */ jal osVirtualToPhysical -/* 0CDB2C 800CCF2C 01002025 */ move $a0, $t0 -/* 0CDB30 800CCF30 8FA9001C */ lw $t1, 0x1c($sp) -/* 0CDB34 800CCF34 AD22002C */ sw $v0, 0x2c($t1) -.L800CCF38: -/* 0CDB38 800CCF38 8FAA001C */ lw $t2, 0x1c($sp) -/* 0CDB3C 800CCF3C 8D4B0030 */ lw $t3, 0x30($t2) -/* 0CDB40 800CCF40 11600005 */ beqz $t3, .L800CCF58 -/* 0CDB44 800CCF44 00000000 */ nop -/* 0CDB48 800CCF48 0C034E0C */ jal osVirtualToPhysical -/* 0CDB4C 800CCF4C 01602025 */ move $a0, $t3 -/* 0CDB50 800CCF50 8FAC001C */ lw $t4, 0x1c($sp) -/* 0CDB54 800CCF54 AD820030 */ sw $v0, 0x30($t4) -.L800CCF58: -/* 0CDB58 800CCF58 8FAD001C */ lw $t5, 0x1c($sp) -/* 0CDB5C 800CCF5C 8DAE0038 */ lw $t6, 0x38($t5) -/* 0CDB60 800CCF60 11C00005 */ beqz $t6, .L800CCF78 -/* 0CDB64 800CCF64 00000000 */ nop -/* 0CDB68 800CCF68 0C034E0C */ jal osVirtualToPhysical -/* 0CDB6C 800CCF6C 01C02025 */ move $a0, $t6 -/* 0CDB70 800CCF70 8FAF001C */ lw $t7, 0x1c($sp) -/* 0CDB74 800CCF74 ADE20038 */ sw $v0, 0x38($t7) -.L800CCF78: -/* 0CDB78 800CCF78 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CDB7C 800CCF7C 8FA2001C */ lw $v0, 0x1c($sp) -/* 0CDB80 800CCF80 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CDB84 800CCF84 03E00008 */ jr $ra -/* 0CDB88 800CCF88 00000000 */ nop - -glabel osSpTaskLoad -/* 0CDB8C 800CCF8C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CDB90 800CCF90 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CDB94 800CCF94 AFA40020 */ sw $a0, 0x20($sp) -/* 0CDB98 800CCF98 0C03339C */ jal osSpTaskDunno -/* 0CDB9C 800CCF9C 8FA40020 */ lw $a0, 0x20($sp) -/* 0CDBA0 800CCFA0 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CDBA4 800CCFA4 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CDBA8 800CCFA8 8DCF0004 */ lw $t7, 4($t6) -/* 0CDBAC 800CCFAC 31F80001 */ andi $t8, $t7, 1 -/* 0CDBB0 800CCFB0 1300000B */ beqz $t8, .L800CCFE0 -/* 0CDBB4 800CCFB4 00000000 */ nop -/* 0CDBB8 800CCFB8 8DD90038 */ lw $t9, 0x38($t6) -/* 0CDBBC 800CCFBC 2401FFFE */ li $at, -2 -/* 0CDBC0 800CCFC0 ADD90018 */ sw $t9, 0x18($t6) -/* 0CDBC4 800CCFC4 8FA8001C */ lw $t0, 0x1c($sp) -/* 0CDBC8 800CCFC8 8D09003C */ lw $t1, 0x3c($t0) -/* 0CDBCC 800CCFCC AD09001C */ sw $t1, 0x1c($t0) -/* 0CDBD0 800CCFD0 8FAA0020 */ lw $t2, 0x20($sp) -/* 0CDBD4 800CCFD4 8D4B0004 */ lw $t3, 4($t2) -/* 0CDBD8 800CCFD8 01616024 */ and $t4, $t3, $at -/* 0CDBDC 800CCFDC AD4C0004 */ sw $t4, 4($t2) -.L800CCFE0: -/* 0CDBE0 800CCFE0 8FA4001C */ lw $a0, 0x1c($sp) -/* 0CDBE4 800CCFE4 0C034700 */ jal osWriteBackDCache -/* 0CDBE8 800CCFE8 24050040 */ li $a1, 64 -/* 0CDBEC 800CCFEC 0C034E2C */ jal __osSpSetStatus -/* 0CDBF0 800CCFF0 24042B00 */ li $a0, 11008 -/* 0CDBF4 800CCFF4 3C040400 */ lui $a0, (0x04001000 >> 16) # lui $a0, 0x400 -/* 0CDBF8 800CCFF8 0C034E30 */ jal __osSpSetPc -/* 0CDBFC 800CCFFC 34841000 */ ori $a0, (0x04001000 & 0xFFFF) # ori $a0, $a0, 0x1000 -/* 0CDC00 800CD000 2401FFFF */ li $at, -1 -/* 0CDC04 800CD004 14410007 */ bne $v0, $at, .L800CD024 -/* 0CDC08 800CD008 00000000 */ nop -.L800CD00C: -/* 0CDC0C 800CD00C 3C040400 */ lui $a0, (0x04001000 >> 16) # lui $a0, 0x400 -/* 0CDC10 800CD010 0C034E30 */ jal __osSpSetPc -/* 0CDC14 800CD014 34841000 */ ori $a0, (0x04001000 & 0xFFFF) # ori $a0, $a0, 0x1000 -/* 0CDC18 800CD018 2401FFFF */ li $at, -1 -/* 0CDC1C 800CD01C 1041FFFB */ beq $v0, $at, .L800CD00C -/* 0CDC20 800CD020 00000000 */ nop -.L800CD024: -/* 0CDC24 800CD024 3C050400 */ lui $a1, (0x04000FC0 >> 16) # lui $a1, 0x400 -/* 0CDC28 800CD028 34A50FC0 */ ori $a1, (0x04000FC0 & 0xFFFF) # ori $a1, $a1, 0xfc0 -/* 0CDC2C 800CD02C 24040001 */ li $a0, 1 -/* 0CDC30 800CD030 8FA6001C */ lw $a2, 0x1c($sp) -/* 0CDC34 800CD034 0C034E40 */ jal __osSpRawStartDma -/* 0CDC38 800CD038 24070040 */ li $a3, 64 -/* 0CDC3C 800CD03C 2401FFFF */ li $at, -1 -/* 0CDC40 800CD040 1441000A */ bne $v0, $at, .L800CD06C -/* 0CDC44 800CD044 00000000 */ nop -.L800CD048: -/* 0CDC48 800CD048 3C050400 */ lui $a1, (0x04000FC0 >> 16) # lui $a1, 0x400 -/* 0CDC4C 800CD04C 34A50FC0 */ ori $a1, (0x04000FC0 & 0xFFFF) # ori $a1, $a1, 0xfc0 -/* 0CDC50 800CD050 24040001 */ li $a0, 1 -/* 0CDC54 800CD054 8FA6001C */ lw $a2, 0x1c($sp) -/* 0CDC58 800CD058 0C034E40 */ jal __osSpRawStartDma -/* 0CDC5C 800CD05C 24070040 */ li $a3, 64 -/* 0CDC60 800CD060 2401FFFF */ li $at, -1 -/* 0CDC64 800CD064 1041FFF8 */ beq $v0, $at, .L800CD048 -/* 0CDC68 800CD068 00000000 */ nop -.L800CD06C: -/* 0CDC6C 800CD06C 0C034E64 */ jal __osSpDeviceBusy -/* 0CDC70 800CD070 00000000 */ nop -/* 0CDC74 800CD074 10400005 */ beqz $v0, .L800CD08C -/* 0CDC78 800CD078 00000000 */ nop -.L800CD07C: -/* 0CDC7C 800CD07C 0C034E64 */ jal __osSpDeviceBusy -/* 0CDC80 800CD080 00000000 */ nop -/* 0CDC84 800CD084 1440FFFD */ bnez $v0, .L800CD07C -/* 0CDC88 800CD088 00000000 */ nop -.L800CD08C: -/* 0CDC8C 800CD08C 8FAD001C */ lw $t5, 0x1c($sp) -/* 0CDC90 800CD090 3C050400 */ lui $a1, (0x04001000 >> 16) # lui $a1, 0x400 -/* 0CDC94 800CD094 34A51000 */ ori $a1, (0x04001000 & 0xFFFF) # ori $a1, $a1, 0x1000 -/* 0CDC98 800CD098 24040001 */ li $a0, 1 -/* 0CDC9C 800CD09C 8DA60008 */ lw $a2, 8($t5) -/* 0CDCA0 800CD0A0 0C034E40 */ jal __osSpRawStartDma -/* 0CDCA4 800CD0A4 8DA7000C */ lw $a3, 0xc($t5) -/* 0CDCA8 800CD0A8 2401FFFF */ li $at, -1 -/* 0CDCAC 800CD0AC 1441000B */ bne $v0, $at, .L800CD0DC -/* 0CDCB0 800CD0B0 00000000 */ nop -.L800CD0B4: -/* 0CDCB4 800CD0B4 8FAF001C */ lw $t7, 0x1c($sp) -/* 0CDCB8 800CD0B8 3C050400 */ lui $a1, (0x04001000 >> 16) # lui $a1, 0x400 -/* 0CDCBC 800CD0BC 34A51000 */ ori $a1, (0x04001000 & 0xFFFF) # ori $a1, $a1, 0x1000 -/* 0CDCC0 800CD0C0 24040001 */ li $a0, 1 -/* 0CDCC4 800CD0C4 8DE60008 */ lw $a2, 8($t7) -/* 0CDCC8 800CD0C8 0C034E40 */ jal __osSpRawStartDma -/* 0CDCCC 800CD0CC 8DE7000C */ lw $a3, 0xc($t7) -/* 0CDCD0 800CD0D0 2401FFFF */ li $at, -1 -/* 0CDCD4 800CD0D4 1041FFF7 */ beq $v0, $at, .L800CD0B4 -/* 0CDCD8 800CD0D8 00000000 */ nop -.L800CD0DC: -/* 0CDCDC 800CD0DC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CDCE0 800CD0E0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CDCE4 800CD0E4 03E00008 */ jr $ra -/* 0CDCE8 800CD0E8 00000000 */ nop - -glabel osSpTaskStartGo -/* 0CDCEC 800CD0EC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CDCF0 800CD0F0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CDCF4 800CD0F4 0C034E64 */ jal __osSpDeviceBusy -/* 0CDCF8 800CD0F8 AFA40018 */ sw $a0, 0x18($sp) -/* 0CDCFC 800CD0FC 10400005 */ beqz $v0, .L800CD114 -/* 0CDD00 800CD100 00000000 */ nop -.L800CD104: -/* 0CDD04 800CD104 0C034E64 */ jal __osSpDeviceBusy -/* 0CDD08 800CD108 00000000 */ nop -/* 0CDD0C 800CD10C 1440FFFD */ bnez $v0, .L800CD104 -/* 0CDD10 800CD110 00000000 */ nop -.L800CD114: -/* 0CDD14 800CD114 0C034E2C */ jal __osSpSetStatus -/* 0CDD18 800CD118 24040125 */ li $a0, 293 -/* 0CDD1C 800CD11C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CDD20 800CD120 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CDD24 800CD124 03E00008 */ jr $ra -/* 0CDD28 800CD128 00000000 */ nop - -/* 0CDD2C 800CD12C 00000000 */ nop -glabel osContInit -/* 0CDD30 800CD130 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0CDD34 800CD134 3C0E800F */ lui $t6, %hi(D_800EB360) # $t6, 0x800f -/* 0CDD38 800CD138 8DCEB360 */ lw $t6, %lo(D_800EB360)($t6) -/* 0CDD3C 800CD13C AFBF0024 */ sw $ra, 0x24($sp) -/* 0CDD40 800CD140 AFA40080 */ sw $a0, 0x80($sp) -/* 0CDD44 800CD144 AFA50084 */ sw $a1, 0x84($sp) -/* 0CDD48 800CD148 AFA60088 */ sw $a2, 0x88($sp) -/* 0CDD4C 800CD14C 11C00003 */ beqz $t6, .L800CD15C -/* 0CDD50 800CD150 AFA00078 */ sw $zero, 0x78($sp) -/* 0CDD54 800CD154 10000070 */ b .L800CD318 -/* 0CDD58 800CD158 00001025 */ move $v0, $zero -.L800CD15C: -/* 0CDD5C 800CD15C 240F0001 */ li $t7, 1 -/* 0CDD60 800CD160 3C01800F */ lui $at, %hi(D_800EB360) # $at, 0x800f -/* 0CDD64 800CD164 0C033778 */ jal osGetTime -/* 0CDD68 800CD168 AC2FB360 */ sw $t7, %lo(D_800EB360)($at) -/* 0CDD6C 800CD16C 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 -/* 0CDD70 800CD170 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f -/* 0CDD74 800CD174 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f -/* 0CDD78 800CD178 AFA20070 */ sw $v0, 0x70($sp) -/* 0CDD7C 800CD17C AFA30074 */ sw $v1, 0x74($sp) -/* 0CDD80 800CD180 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) -/* 0CDD84 800CD184 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) -/* 0CDD88 800CD188 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 -/* 0CDD8C 800CD18C 0C0337F6 */ jal __ll_mul -/* 0CDD90 800CD190 24040000 */ li $a0, 0 -/* 0CDD94 800CD194 AFA20030 */ sw $v0, 0x30($sp) -/* 0CDD98 800CD198 AFA30034 */ sw $v1, 0x34($sp) -/* 0CDD9C 800CD19C 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0CDDA0 800CD1A0 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0CDDA4 800CD1A4 8FA50034 */ lw $a1, 0x34($sp) -/* 0CDDA8 800CD1A8 8FA40030 */ lw $a0, 0x30($sp) -/* 0CDDAC 800CD1AC 0C0337B6 */ jal __ull_div -/* 0CDDB0 800CD1B0 24060000 */ li $a2, 0 -/* 0CDDB4 800CD1B4 8FB80070 */ lw $t8, 0x70($sp) -/* 0CDDB8 800CD1B8 8FB90074 */ lw $t9, 0x74($sp) -/* 0CDDBC 800CD1BC 0058082B */ sltu $at, $v0, $t8 -/* 0CDDC0 800CD1C0 14200031 */ bnez $at, .L800CD288 -/* 0CDDC4 800CD1C4 0302082B */ sltu $at, $t8, $v0 -/* 0CDDC8 800CD1C8 14200003 */ bnez $at, .L800CD1D8 -/* 0CDDCC 800CD1CC 0323082B */ sltu $at, $t9, $v1 -/* 0CDDD0 800CD1D0 1020002D */ beqz $at, .L800CD288 -/* 0CDDD4 800CD1D4 00000000 */ nop -.L800CD1D8: -/* 0CDDD8 800CD1D8 27A40038 */ addiu $a0, $sp, 0x38 -/* 0CDDDC 800CD1DC 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CDDE0 800CD1E0 0C033358 */ jal osCreateMesgQueue -/* 0CDDE4 800CD1E4 24060001 */ li $a2, 1 -/* 0CDDE8 800CD1E8 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 -/* 0CDDEC 800CD1EC 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f -/* 0CDDF0 800CD1F0 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f -/* 0CDDF4 800CD1F4 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) -/* 0CDDF8 800CD1F8 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) -/* 0CDDFC 800CD1FC 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 -/* 0CDE00 800CD200 0C0337F6 */ jal __ll_mul -/* 0CDE04 800CD204 24040000 */ li $a0, 0 -/* 0CDE08 800CD208 AFA20028 */ sw $v0, 0x28($sp) -/* 0CDE0C 800CD20C AFA3002C */ sw $v1, 0x2c($sp) -/* 0CDE10 800CD210 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0CDE14 800CD214 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0CDE18 800CD218 8FA5002C */ lw $a1, 0x2c($sp) -/* 0CDE1C 800CD21C 8FA40028 */ lw $a0, 0x28($sp) -/* 0CDE20 800CD220 0C0337B6 */ jal __ull_div -/* 0CDE24 800CD224 24060000 */ li $a2, 0 -/* 0CDE28 800CD228 AFA20030 */ sw $v0, 0x30($sp) -/* 0CDE2C 800CD22C AFA30034 */ sw $v1, 0x34($sp) -/* 0CDE30 800CD230 8FA90034 */ lw $t1, 0x34($sp) -/* 0CDE34 800CD234 8FA80030 */ lw $t0, 0x30($sp) -/* 0CDE38 800CD238 8FAA0070 */ lw $t2, 0x70($sp) -/* 0CDE3C 800CD23C 8FAB0074 */ lw $t3, 0x74($sp) -/* 0CDE40 800CD240 240C0000 */ li $t4, 0 -/* 0CDE44 800CD244 240D0000 */ li $t5, 0 -/* 0CDE48 800CD248 27AE0038 */ addiu $t6, $sp, 0x38 -/* 0CDE4C 800CD24C 27AF007C */ addiu $t7, $sp, 0x7c -/* 0CDE50 800CD250 010A3023 */ subu $a2, $t0, $t2 -/* 0CDE54 800CD254 012B082B */ sltu $at, $t1, $t3 -/* 0CDE58 800CD258 00C13023 */ subu $a2, $a2, $at -/* 0CDE5C 800CD25C AFAF001C */ sw $t7, 0x1c($sp) -/* 0CDE60 800CD260 AFAE0018 */ sw $t6, 0x18($sp) -/* 0CDE64 800CD264 AFAD0014 */ sw $t5, 0x14($sp) -/* 0CDE68 800CD268 AFAC0010 */ sw $t4, 0x10($sp) -/* 0CDE6C 800CD26C 27A40050 */ addiu $a0, $sp, 0x50 -/* 0CDE70 800CD270 0C034E70 */ jal osSetTimer -/* 0CDE74 800CD274 012B3823 */ subu $a3, $t1, $t3 -/* 0CDE78 800CD278 27A40038 */ addiu $a0, $sp, 0x38 -/* 0CDE7C 800CD27C 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CDE80 800CD280 0C0335D4 */ jal osRecvMesg -/* 0CDE84 800CD284 24060001 */ li $a2, 1 -.L800CD288: -/* 0CDE88 800CD288 24180004 */ li $t8, 4 -/* 0CDE8C 800CD28C 3C018019 */ lui $at, %hi(_osContNumControllers) # $at, 0x8019 -/* 0CDE90 800CD290 A0386541 */ sb $t8, %lo(_osContNumControllers)($at) -/* 0CDE94 800CD294 0C0334FE */ jal __osPackRequestData -/* 0CDE98 800CD298 00002025 */ move $a0, $zero -/* 0CDE9C 800CD29C 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 -/* 0CDEA0 800CD2A0 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 -/* 0CDEA4 800CD2A4 0C034EA8 */ jal __osSiRawStartDma -/* 0CDEA8 800CD2A8 24040001 */ li $a0, 1 -/* 0CDEAC 800CD2AC AFA20078 */ sw $v0, 0x78($sp) -/* 0CDEB0 800CD2B0 8FA40080 */ lw $a0, 0x80($sp) -/* 0CDEB4 800CD2B4 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CDEB8 800CD2B8 0C0335D4 */ jal osRecvMesg -/* 0CDEBC 800CD2BC 24060001 */ li $a2, 1 -/* 0CDEC0 800CD2C0 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 -/* 0CDEC4 800CD2C4 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 -/* 0CDEC8 800CD2C8 0C034EA8 */ jal __osSiRawStartDma -/* 0CDECC 800CD2CC 00002025 */ move $a0, $zero -/* 0CDED0 800CD2D0 AFA20078 */ sw $v0, 0x78($sp) -/* 0CDED4 800CD2D4 8FA40080 */ lw $a0, 0x80($sp) -/* 0CDED8 800CD2D8 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CDEDC 800CD2DC 0C0335D4 */ jal osRecvMesg -/* 0CDEE0 800CD2E0 24060001 */ li $a2, 1 -/* 0CDEE4 800CD2E4 8FA40084 */ lw $a0, 0x84($sp) -/* 0CDEE8 800CD2E8 0C0334CA */ jal __osContGetInitData -/* 0CDEEC 800CD2EC 8FA50088 */ lw $a1, 0x88($sp) -/* 0CDEF0 800CD2F0 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0CDEF4 800CD2F4 0C034ED4 */ jal __osSiCreateAccessQueue -/* 0CDEF8 800CD2F8 A0206540 */ sb $zero, %lo(_osLastSentSiCmd)($at) -/* 0CDEFC 800CD2FC 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 -/* 0CDF00 800CD300 3C058019 */ lui $a1, %hi(D_80196580) # $a1, 0x8019 -/* 0CDF04 800CD304 24A56580 */ addiu $a1, %lo(D_80196580) # addiu $a1, $a1, 0x6580 -/* 0CDF08 800CD308 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 -/* 0CDF0C 800CD30C 0C033358 */ jal osCreateMesgQueue -/* 0CDF10 800CD310 24060001 */ li $a2, 1 -/* 0CDF14 800CD314 8FA20078 */ lw $v0, 0x78($sp) -.L800CD318: -/* 0CDF18 800CD318 8FBF0024 */ lw $ra, 0x24($sp) -/* 0CDF1C 800CD31C 27BD0080 */ addiu $sp, $sp, 0x80 -/* 0CDF20 800CD320 03E00008 */ jr $ra -/* 0CDF24 800CD324 00000000 */ nop - -glabel __osContGetInitData -/* 0CDF28 800CD328 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 -/* 0CDF2C 800CD32C 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) -/* 0CDF30 800CD330 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CDF34 800CD334 3C0E8019 */ lui $t6, %hi(_osContCmdBuf) # $t6, 0x8019 -/* 0CDF38 800CD338 25CE6500 */ addiu $t6, %lo(_osContCmdBuf) # addiu $t6, $t6, 0x6500 -/* 0CDF3C 800CD33C A3A00007 */ sb $zero, 7($sp) -/* 0CDF40 800CD340 AFAE0014 */ sw $t6, 0x14($sp) -/* 0CDF44 800CD344 19E00028 */ blez $t7, .L800CD3E8 -/* 0CDF48 800CD348 AFA00008 */ sw $zero, 8($sp) -.L800CD34C: -/* 0CDF4C 800CD34C 8FB90014 */ lw $t9, 0x14($sp) -/* 0CDF50 800CD350 27B8000C */ addiu $t8, $sp, 0xc -/* 0CDF54 800CD354 8B210000 */ lwl $at, ($t9) -/* 0CDF58 800CD358 9B210003 */ lwr $at, 3($t9) -/* 0CDF5C 800CD35C AF010000 */ sw $at, ($t8) -/* 0CDF60 800CD360 8B290004 */ lwl $t1, 4($t9) -/* 0CDF64 800CD364 9B290007 */ lwr $t1, 7($t9) -/* 0CDF68 800CD368 AF090004 */ sw $t1, 4($t8) -/* 0CDF6C 800CD36C 93AA000E */ lbu $t2, 0xe($sp) -/* 0CDF70 800CD370 314B00C0 */ andi $t3, $t2, 0xc0 -/* 0CDF74 800CD374 000B6103 */ sra $t4, $t3, 4 -/* 0CDF78 800CD378 A0AC0003 */ sb $t4, 3($a1) -/* 0CDF7C 800CD37C 90AD0003 */ lbu $t5, 3($a1) -/* 0CDF80 800CD380 15A0000E */ bnez $t5, .L800CD3BC -/* 0CDF84 800CD384 00000000 */ nop -/* 0CDF88 800CD388 93AE0011 */ lbu $t6, 0x11($sp) -/* 0CDF8C 800CD38C 93A80010 */ lbu $t0, 0x10($sp) -/* 0CDF90 800CD390 240B0001 */ li $t3, 1 -/* 0CDF94 800CD394 000E7A00 */ sll $t7, $t6, 8 -/* 0CDF98 800CD398 01E8C025 */ or $t8, $t7, $t0 -/* 0CDF9C 800CD39C A4B80000 */ sh $t8, ($a1) -/* 0CDFA0 800CD3A0 93B90012 */ lbu $t9, 0x12($sp) -/* 0CDFA4 800CD3A4 A0B90002 */ sb $t9, 2($a1) -/* 0CDFA8 800CD3A8 8FAA0008 */ lw $t2, 8($sp) -/* 0CDFAC 800CD3AC 93A90007 */ lbu $t1, 7($sp) -/* 0CDFB0 800CD3B0 014B6004 */ sllv $t4, $t3, $t2 -/* 0CDFB4 800CD3B4 012C6825 */ or $t5, $t1, $t4 -/* 0CDFB8 800CD3B8 A3AD0007 */ sb $t5, 7($sp) -.L800CD3BC: -/* 0CDFBC 800CD3BC 8FAE0008 */ lw $t6, 8($sp) -/* 0CDFC0 800CD3C0 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 -/* 0CDFC4 800CD3C4 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) -/* 0CDFC8 800CD3C8 8FA80014 */ lw $t0, 0x14($sp) -/* 0CDFCC 800CD3CC 25CF0001 */ addiu $t7, $t6, 1 -/* 0CDFD0 800CD3D0 01F9082A */ slt $at, $t7, $t9 -/* 0CDFD4 800CD3D4 25180008 */ addiu $t8, $t0, 8 -/* 0CDFD8 800CD3D8 AFB80014 */ sw $t8, 0x14($sp) -/* 0CDFDC 800CD3DC AFAF0008 */ sw $t7, 8($sp) -/* 0CDFE0 800CD3E0 1420FFDA */ bnez $at, .L800CD34C -/* 0CDFE4 800CD3E4 24A50004 */ addiu $a1, $a1, 4 -.L800CD3E8: -/* 0CDFE8 800CD3E8 93AB0007 */ lbu $t3, 7($sp) -/* 0CDFEC 800CD3EC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CDFF0 800CD3F0 03E00008 */ jr $ra -/* 0CDFF4 800CD3F4 A08B0000 */ sb $t3, ($a0) - -glabel __osPackRequestData -/* 0CDFF8 800CD3F8 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDFFC 800CD3FC 308400FF */ andi $a0, $a0, 0xff -/* 0CE000 800CD400 AFA00000 */ sw $zero, ($sp) -.L800CD404: -/* 0CE004 800CD404 8FAE0000 */ lw $t6, ($sp) -/* 0CE008 800CD408 8FB80000 */ lw $t8, ($sp) -/* 0CE00C 800CD40C 3C018019 */ lui $at, %hi(_osContCmdBuf) # 0x8019 -/* 0CE010 800CD410 000E7880 */ sll $t7, $t6, 2 -/* 0CE014 800CD414 002F0821 */ addu $at, $at, $t7 -/* 0CE018 800CD418 AC206500 */ sw $zero, %lo(_osContCmdBuf)($at) # 0x6500($at) -/* 0CE01C 800CD41C 27190001 */ addiu $t9, $t8, 1 -/* 0CE020 800CD420 2B210010 */ slti $at, $t9, 0x10 -/* 0CE024 800CD424 1420FFF7 */ bnez $at, .L800CD404 -/* 0CE028 800CD428 AFB90000 */ sw $t9, ($sp) -/* 0CE02C 800CD42C 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 -/* 0CE030 800CD430 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) -/* 0CE034 800CD434 3C098019 */ lui $t1, %hi(_osContCmdBuf) # $t1, 0x8019 -/* 0CE038 800CD438 24080001 */ li $t0, 1 -/* 0CE03C 800CD43C 3C018019 */ lui $at, %hi(_osContPifCtrl) # $at, 0x8019 -/* 0CE040 800CD440 25296500 */ addiu $t1, %lo(_osContCmdBuf) # addiu $t1, $t1, 0x6500 -/* 0CE044 800CD444 240A00FF */ li $t2, 255 -/* 0CE048 800CD448 240B0001 */ li $t3, 1 -/* 0CE04C 800CD44C 240C0003 */ li $t4, 3 -/* 0CE050 800CD450 240D00FF */ li $t5, 255 -/* 0CE054 800CD454 240E00FF */ li $t6, 255 -/* 0CE058 800CD458 240F00FF */ li $t7, 255 -/* 0CE05C 800CD45C 241800FF */ li $t8, 255 -/* 0CE060 800CD460 AC28653C */ sw $t0, %lo(_osContPifCtrl)($at) -/* 0CE064 800CD464 AFA9000C */ sw $t1, 0xc($sp) -/* 0CE068 800CD468 A3AA0004 */ sb $t2, 4($sp) -/* 0CE06C 800CD46C A3AB0005 */ sb $t3, 5($sp) -/* 0CE070 800CD470 A3AC0006 */ sb $t4, 6($sp) -/* 0CE074 800CD474 A3A40007 */ sb $a0, 7($sp) -/* 0CE078 800CD478 A3AD0008 */ sb $t5, 8($sp) -/* 0CE07C 800CD47C A3AE0009 */ sb $t6, 9($sp) -/* 0CE080 800CD480 A3AF000A */ sb $t7, 0xa($sp) -/* 0CE084 800CD484 A3B8000B */ sb $t8, 0xb($sp) -/* 0CE088 800CD488 1B200013 */ blez $t9, .L800CD4D8 -/* 0CE08C 800CD48C AFA00000 */ sw $zero, ($sp) -.L800CD490: -/* 0CE090 800CD490 27A90004 */ addiu $t1, $sp, 4 -/* 0CE094 800CD494 8D210000 */ lw $at, ($t1) -/* 0CE098 800CD498 8FA8000C */ lw $t0, 0xc($sp) -/* 0CE09C 800CD49C 3C188019 */ lui $t8, %hi(_osContNumControllers) # $t8, 0x8019 -/* 0CE0A0 800CD4A0 A9010000 */ swl $at, ($t0) -/* 0CE0A4 800CD4A4 B9010003 */ swr $at, 3($t0) -/* 0CE0A8 800CD4A8 8D2B0004 */ lw $t3, 4($t1) -/* 0CE0AC 800CD4AC A90B0004 */ swl $t3, 4($t0) -/* 0CE0B0 800CD4B0 B90B0007 */ swr $t3, 7($t0) -/* 0CE0B4 800CD4B4 8FAE0000 */ lw $t6, ($sp) -/* 0CE0B8 800CD4B8 93186541 */ lbu $t8, %lo(_osContNumControllers)($t8) -/* 0CE0BC 800CD4BC 8FAC000C */ lw $t4, 0xc($sp) -/* 0CE0C0 800CD4C0 25CF0001 */ addiu $t7, $t6, 1 -/* 0CE0C4 800CD4C4 01F8082A */ slt $at, $t7, $t8 -/* 0CE0C8 800CD4C8 258D0008 */ addiu $t5, $t4, 8 -/* 0CE0CC 800CD4CC AFAF0000 */ sw $t7, ($sp) -/* 0CE0D0 800CD4D0 1420FFEF */ bnez $at, .L800CD490 -/* 0CE0D4 800CD4D4 AFAD000C */ sw $t5, 0xc($sp) -.L800CD4D8: -/* 0CE0D8 800CD4D8 8FAA000C */ lw $t2, 0xc($sp) -/* 0CE0DC 800CD4DC 241900FE */ li $t9, 254 -/* 0CE0E0 800CD4E0 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CE0E4 800CD4E4 03E00008 */ jr $ra -/* 0CE0E8 800CD4E8 A1590000 */ sb $t9, ($t2) - -/* 0CE0EC 800CD4EC 00000000 */ nop -glabel osContStartReadData -/* 0CE0F0 800CD4F0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CE0F4 800CD4F4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE0F8 800CD4F8 AFA40020 */ sw $a0, 0x20($sp) -/* 0CE0FC 800CD4FC 0C034EE8 */ jal __osSiGetAccess -/* 0CE100 800CD500 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CE104 800CD504 3C0E8019 */ lui $t6, %hi(_osLastSentSiCmd) # $t6, 0x8019 -/* 0CE108 800CD508 91CE6540 */ lbu $t6, %lo(_osLastSentSiCmd)($t6) -/* 0CE10C 800CD50C 24010001 */ li $at, 1 -/* 0CE110 800CD510 11C1000C */ beq $t6, $at, .L800CD544 -/* 0CE114 800CD514 00000000 */ nop -/* 0CE118 800CD518 0C033597 */ jal func_800CD65C -/* 0CE11C 800CD51C 00000000 */ nop -/* 0CE120 800CD520 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 -/* 0CE124 800CD524 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 -/* 0CE128 800CD528 0C034EA8 */ jal __osSiRawStartDma -/* 0CE12C 800CD52C 24040001 */ li $a0, 1 -/* 0CE130 800CD530 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CE134 800CD534 8FA40020 */ lw $a0, 0x20($sp) -/* 0CE138 800CD538 00002825 */ move $a1, $zero -/* 0CE13C 800CD53C 0C0335D4 */ jal osRecvMesg -/* 0CE140 800CD540 24060001 */ li $a2, 1 -.L800CD544: -/* 0CE144 800CD544 AFA00018 */ sw $zero, 0x18($sp) -.L800CD548: -/* 0CE148 800CD548 8FB80018 */ lw $t8, 0x18($sp) -/* 0CE14C 800CD54C 8FA80018 */ lw $t0, 0x18($sp) -/* 0CE150 800CD550 3C018019 */ lui $at, %hi(_osContCmdBuf) # 0x8019 -/* 0CE154 800CD554 0018C880 */ sll $t9, $t8, 2 -/* 0CE158 800CD558 00390821 */ addu $at, $at, $t9 -/* 0CE15C 800CD55C 240F00FF */ li $t7, 255 -/* 0CE160 800CD560 AC2F6500 */ sw $t7, %lo(_osContCmdBuf)($at) # 0x6500($at) -/* 0CE164 800CD564 25090001 */ addiu $t1, $t0, 1 -/* 0CE168 800CD568 29210010 */ slti $at, $t1, 0x10 -/* 0CE16C 800CD56C 1420FFF6 */ bnez $at, .L800CD548 -/* 0CE170 800CD570 AFA90018 */ sw $t1, 0x18($sp) -/* 0CE174 800CD574 3C018019 */ lui $at, %hi(_osContPifCtrl) # $at, 0x8019 -/* 0CE178 800CD578 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 -/* 0CE17C 800CD57C AC20653C */ sw $zero, %lo(_osContPifCtrl)($at) -/* 0CE180 800CD580 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 -/* 0CE184 800CD584 0C034EA8 */ jal __osSiRawStartDma -/* 0CE188 800CD588 00002025 */ move $a0, $zero -/* 0CE18C 800CD58C 240A0001 */ li $t2, 1 -/* 0CE190 800CD590 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0CE194 800CD594 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CE198 800CD598 0C034EF9 */ jal __osSiRelAccess -/* 0CE19C 800CD59C A02A6540 */ sb $t2, %lo(_osLastSentSiCmd)($at) -/* 0CE1A0 800CD5A0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE1A4 800CD5A4 8FA2001C */ lw $v0, 0x1c($sp) -/* 0CE1A8 800CD5A8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CE1AC 800CD5AC 03E00008 */ jr $ra -/* 0CE1B0 800CD5B0 00000000 */ nop - -glabel osContGetReadData -/* 0CE1B4 800CD5B4 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 -/* 0CE1B8 800CD5B8 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) -/* 0CE1BC 800CD5BC 3C0E8019 */ lui $t6, %hi(_osContCmdBuf) # $t6, 0x8019 -/* 0CE1C0 800CD5C0 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CE1C4 800CD5C4 25CE6500 */ addiu $t6, %lo(_osContCmdBuf) # addiu $t6, $t6, 0x6500 -/* 0CE1C8 800CD5C8 AFAE000C */ sw $t6, 0xc($sp) -/* 0CE1CC 800CD5CC 19E00021 */ blez $t7, .L800CD654 -/* 0CE1D0 800CD5D0 AFA00000 */ sw $zero, ($sp) -.L800CD5D4: -/* 0CE1D4 800CD5D4 8FB9000C */ lw $t9, 0xc($sp) -/* 0CE1D8 800CD5D8 27B80004 */ addiu $t8, $sp, 4 -/* 0CE1DC 800CD5DC 8B210000 */ lwl $at, ($t9) -/* 0CE1E0 800CD5E0 9B210003 */ lwr $at, 3($t9) -/* 0CE1E4 800CD5E4 AF010000 */ sw $at, ($t8) -/* 0CE1E8 800CD5E8 8B290004 */ lwl $t1, 4($t9) -/* 0CE1EC 800CD5EC 9B290007 */ lwr $t1, 7($t9) -/* 0CE1F0 800CD5F0 AF090004 */ sw $t1, 4($t8) -/* 0CE1F4 800CD5F4 93AA0006 */ lbu $t2, 6($sp) -/* 0CE1F8 800CD5F8 314B00C0 */ andi $t3, $t2, 0xc0 -/* 0CE1FC 800CD5FC 000B6103 */ sra $t4, $t3, 4 -/* 0CE200 800CD600 A08C0004 */ sb $t4, 4($a0) -/* 0CE204 800CD604 908D0004 */ lbu $t5, 4($a0) -/* 0CE208 800CD608 15A00007 */ bnez $t5, .L800CD628 -/* 0CE20C 800CD60C 00000000 */ nop -/* 0CE210 800CD610 97AE0008 */ lhu $t6, 8($sp) -/* 0CE214 800CD614 A48E0000 */ sh $t6, ($a0) -/* 0CE218 800CD618 83AF000A */ lb $t7, 0xa($sp) -/* 0CE21C 800CD61C A08F0002 */ sb $t7, 2($a0) -/* 0CE220 800CD620 83A8000B */ lb $t0, 0xb($sp) -/* 0CE224 800CD624 A0880003 */ sb $t0, 3($a0) -.L800CD628: -/* 0CE228 800CD628 8FB80000 */ lw $t8, ($sp) -/* 0CE22C 800CD62C 3C0B8019 */ lui $t3, %hi(_osContNumControllers) # $t3, 0x8019 -/* 0CE230 800CD630 916B6541 */ lbu $t3, %lo(_osContNumControllers)($t3) -/* 0CE234 800CD634 8FA9000C */ lw $t1, 0xc($sp) -/* 0CE238 800CD638 27190001 */ addiu $t9, $t8, 1 -/* 0CE23C 800CD63C 032B082A */ slt $at, $t9, $t3 -/* 0CE240 800CD640 252A0008 */ addiu $t2, $t1, 8 -/* 0CE244 800CD644 AFAA000C */ sw $t2, 0xc($sp) -/* 0CE248 800CD648 AFB90000 */ sw $t9, ($sp) -/* 0CE24C 800CD64C 1420FFE1 */ bnez $at, .L800CD5D4 -/* 0CE250 800CD650 24840006 */ addiu $a0, $a0, 6 -.L800CD654: -/* 0CE254 800CD654 03E00008 */ jr $ra -/* 0CE258 800CD658 27BD0010 */ addiu $sp, $sp, 0x10 - -glabel func_800CD65C -/* 0CE25C 800CD65C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CE260 800CD660 3C0E8019 */ lui $t6, %hi(_osContCmdBuf) # $t6, 0x8019 -/* 0CE264 800CD664 25CE6500 */ addiu $t6, %lo(_osContCmdBuf) # addiu $t6, $t6, 0x6500 -/* 0CE268 800CD668 AFAE000C */ sw $t6, 0xc($sp) -/* 0CE26C 800CD66C AFA00000 */ sw $zero, ($sp) -.L800CD670: -/* 0CE270 800CD670 8FAF0000 */ lw $t7, ($sp) -/* 0CE274 800CD674 8FB90000 */ lw $t9, ($sp) -/* 0CE278 800CD678 3C018019 */ lui $at, %hi(_osContCmdBuf) # 0x8019 -/* 0CE27C 800CD67C 000FC080 */ sll $t8, $t7, 2 -/* 0CE280 800CD680 00380821 */ addu $at, $at, $t8 -/* 0CE284 800CD684 AC206500 */ sw $zero, %lo(_osContCmdBuf)($at) # 0x6500($at) -/* 0CE288 800CD688 27280001 */ addiu $t0, $t9, 1 -/* 0CE28C 800CD68C 29010010 */ slti $at, $t0, 0x10 -/* 0CE290 800CD690 1420FFF7 */ bnez $at, .L800CD670 -/* 0CE294 800CD694 AFA80000 */ sw $t0, ($sp) -/* 0CE298 800CD698 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 -/* 0CE29C 800CD69C 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) -/* 0CE2A0 800CD6A0 24090001 */ li $t1, 1 -/* 0CE2A4 800CD6A4 3C018019 */ lui $at, %hi(_osContPifCtrl) # $at, 0x8019 -/* 0CE2A8 800CD6A8 240A00FF */ li $t2, 255 -/* 0CE2AC 800CD6AC 240B0001 */ li $t3, 1 -/* 0CE2B0 800CD6B0 240C0004 */ li $t4, 4 -/* 0CE2B4 800CD6B4 240D0001 */ li $t5, 1 -/* 0CE2B8 800CD6B8 340EFFFF */ li $t6, 65535 -/* 0CE2BC 800CD6BC 240FFFFF */ li $t7, -1 -/* 0CE2C0 800CD6C0 2418FFFF */ li $t8, -1 -/* 0CE2C4 800CD6C4 AC29653C */ sw $t1, %lo(_osContPifCtrl)($at) -/* 0CE2C8 800CD6C8 A3AA0004 */ sb $t2, 4($sp) -/* 0CE2CC 800CD6CC A3AB0005 */ sb $t3, 5($sp) -/* 0CE2D0 800CD6D0 A3AC0006 */ sb $t4, 6($sp) -/* 0CE2D4 800CD6D4 A3AD0007 */ sb $t5, 7($sp) -/* 0CE2D8 800CD6D8 A7AE0008 */ sh $t6, 8($sp) -/* 0CE2DC 800CD6DC A3AF000A */ sb $t7, 0xa($sp) -/* 0CE2E0 800CD6E0 A3B8000B */ sb $t8, 0xb($sp) -/* 0CE2E4 800CD6E4 1B200013 */ blez $t9, .L800CD734 -/* 0CE2E8 800CD6E8 AFA00000 */ sw $zero, ($sp) -.L800CD6EC: -/* 0CE2EC 800CD6EC 27A90004 */ addiu $t1, $sp, 4 -/* 0CE2F0 800CD6F0 8D210000 */ lw $at, ($t1) -/* 0CE2F4 800CD6F4 8FA8000C */ lw $t0, 0xc($sp) -/* 0CE2F8 800CD6F8 3C188019 */ lui $t8, %hi(_osContNumControllers) # $t8, 0x8019 -/* 0CE2FC 800CD6FC A9010000 */ swl $at, ($t0) -/* 0CE300 800CD700 B9010003 */ swr $at, 3($t0) -/* 0CE304 800CD704 8D2B0004 */ lw $t3, 4($t1) -/* 0CE308 800CD708 A90B0004 */ swl $t3, 4($t0) -/* 0CE30C 800CD70C B90B0007 */ swr $t3, 7($t0) -/* 0CE310 800CD710 8FAE0000 */ lw $t6, ($sp) -/* 0CE314 800CD714 93186541 */ lbu $t8, %lo(_osContNumControllers)($t8) -/* 0CE318 800CD718 8FAC000C */ lw $t4, 0xc($sp) -/* 0CE31C 800CD71C 25CF0001 */ addiu $t7, $t6, 1 -/* 0CE320 800CD720 01F8082A */ slt $at, $t7, $t8 -/* 0CE324 800CD724 258D0008 */ addiu $t5, $t4, 8 -/* 0CE328 800CD728 AFAF0000 */ sw $t7, ($sp) -/* 0CE32C 800CD72C 1420FFEF */ bnez $at, .L800CD6EC -/* 0CE330 800CD730 AFAD000C */ sw $t5, 0xc($sp) -.L800CD734: -/* 0CE334 800CD734 8FAA000C */ lw $t2, 0xc($sp) -/* 0CE338 800CD738 241900FE */ li $t9, 254 -/* 0CE33C 800CD73C 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CE340 800CD740 03E00008 */ jr $ra -/* 0CE344 800CD744 A1590000 */ sb $t9, ($t2) - -/* 0CE348 800CD748 00000000 */ nop -/* 0CE34C 800CD74C 00000000 */ nop -glabel osRecvMesg -/* 0CE350 800CD750 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CE354 800CD754 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CE358 800CD758 AFA40028 */ sw $a0, 0x28($sp) -/* 0CE35C 800CD75C AFA5002C */ sw $a1, 0x2c($sp) -/* 0CE360 800CD760 AFA60030 */ sw $a2, 0x30($sp) -/* 0CE364 800CD764 AFB10018 */ sw $s1, 0x18($sp) -/* 0CE368 800CD768 0C0346AC */ jal __osDisableInt -/* 0CE36C 800CD76C AFB00014 */ sw $s0, 0x14($sp) -/* 0CE370 800CD770 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CE374 800CD774 00408025 */ move $s0, $v0 -/* 0CE378 800CD778 8DCF0008 */ lw $t7, 8($t6) -/* 0CE37C 800CD77C 15E00012 */ bnez $t7, .L800CD7C8 -/* 0CE380 800CD780 00000000 */ nop -.L800CD784: -/* 0CE384 800CD784 8FB80030 */ lw $t8, 0x30($sp) -/* 0CE388 800CD788 17000005 */ bnez $t8, .L800CD7A0 -/* 0CE38C 800CD78C 00000000 */ nop -/* 0CE390 800CD790 0C0346B4 */ jal __osRestoreInt -/* 0CE394 800CD794 02002025 */ move $a0, $s0 -/* 0CE398 800CD798 10000036 */ b .L800CD874 -/* 0CE39C 800CD79C 2402FFFF */ li $v0, -1 -.L800CD7A0: -/* 0CE3A0 800CD7A0 3C08800F */ lui $t0, %hi(D_800EB3B0) # $t0, 0x800f -/* 0CE3A4 800CD7A4 8D08B3B0 */ lw $t0, %lo(D_800EB3B0)($t0) -/* 0CE3A8 800CD7A8 24190008 */ li $t9, 8 -/* 0CE3AC 800CD7AC A5190010 */ sh $t9, 0x10($t0) -/* 0CE3B0 800CD7B0 0C0345F3 */ jal __osEnqueueAndYield -/* 0CE3B4 800CD7B4 8FA40028 */ lw $a0, 0x28($sp) -/* 0CE3B8 800CD7B8 8FA90028 */ lw $t1, 0x28($sp) -/* 0CE3BC 800CD7BC 8D2A0008 */ lw $t2, 8($t1) -/* 0CE3C0 800CD7C0 1140FFF0 */ beqz $t2, .L800CD784 -/* 0CE3C4 800CD7C4 00000000 */ nop -.L800CD7C8: -/* 0CE3C8 800CD7C8 8FAB002C */ lw $t3, 0x2c($sp) -/* 0CE3CC 800CD7CC 11600008 */ beqz $t3, .L800CD7F0 -/* 0CE3D0 800CD7D0 00000000 */ nop -/* 0CE3D4 800CD7D4 8FAC0028 */ lw $t4, 0x28($sp) -/* 0CE3D8 800CD7D8 8D8E000C */ lw $t6, 0xc($t4) -/* 0CE3DC 800CD7DC 8D8D0014 */ lw $t5, 0x14($t4) -/* 0CE3E0 800CD7E0 000E7880 */ sll $t7, $t6, 2 -/* 0CE3E4 800CD7E4 01AFC021 */ addu $t8, $t5, $t7 -/* 0CE3E8 800CD7E8 8F190000 */ lw $t9, ($t8) -/* 0CE3EC 800CD7EC AD790000 */ sw $t9, ($t3) -.L800CD7F0: -/* 0CE3F0 800CD7F0 8FA80028 */ lw $t0, 0x28($sp) -/* 0CE3F4 800CD7F4 8D09000C */ lw $t1, 0xc($t0) -/* 0CE3F8 800CD7F8 8D0C0010 */ lw $t4, 0x10($t0) -/* 0CE3FC 800CD7FC 252A0001 */ addiu $t2, $t1, 1 -/* 0CE400 800CD800 014C001A */ div $zero, $t2, $t4 -/* 0CE404 800CD804 00007010 */ mfhi $t6 -/* 0CE408 800CD808 AD0E000C */ sw $t6, 0xc($t0) -/* 0CE40C 800CD80C 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CE410 800CD810 15800002 */ bnez $t4, .L800CD81C -/* 0CE414 800CD814 00000000 */ nop -/* 0CE418 800CD818 0007000D */ break 7 -.L800CD81C: -/* 0CE41C 800CD81C 2401FFFF */ li $at, -1 -/* 0CE420 800CD820 15810004 */ bne $t4, $at, .L800CD834 -/* 0CE424 800CD824 3C018000 */ lui $at, 0x8000 -/* 0CE428 800CD828 15410002 */ bne $t2, $at, .L800CD834 -/* 0CE42C 800CD82C 00000000 */ nop -/* 0CE430 800CD830 0006000D */ break 6 -.L800CD834: -/* 0CE434 800CD834 8DAF0008 */ lw $t7, 8($t5) -/* 0CE438 800CD838 25F8FFFF */ addiu $t8, $t7, -1 -/* 0CE43C 800CD83C ADB80008 */ sw $t8, 8($t5) -/* 0CE440 800CD840 8FB90028 */ lw $t9, 0x28($sp) -/* 0CE444 800CD844 8F2B0004 */ lw $t3, 4($t9) -/* 0CE448 800CD848 8D690000 */ lw $t1, ($t3) -/* 0CE44C 800CD84C 11200006 */ beqz $t1, .L800CD868 -/* 0CE450 800CD850 00000000 */ nop -/* 0CE454 800CD854 0C034645 */ jal __osPopThread -/* 0CE458 800CD858 27240004 */ addiu $a0, $t9, 4 -/* 0CE45C 800CD85C 00408825 */ move $s1, $v0 -/* 0CE460 800CD860 0C0330D8 */ jal osStartThread -/* 0CE464 800CD864 02202025 */ move $a0, $s1 -.L800CD868: -/* 0CE468 800CD868 0C0346B4 */ jal __osRestoreInt -/* 0CE46C 800CD86C 02002025 */ move $a0, $s0 -/* 0CE470 800CD870 00001025 */ move $v0, $zero -.L800CD874: -/* 0CE474 800CD874 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CE478 800CD878 8FB00014 */ lw $s0, 0x14($sp) -/* 0CE47C 800CD87C 8FB10018 */ lw $s1, 0x18($sp) -/* 0CE480 800CD880 03E00008 */ jr $ra -/* 0CE484 800CD884 27BD0028 */ addiu $sp, $sp, 0x28 - -/* 0CE488 800CD888 00000000 */ nop -/* 0CE48C 800CD88C 00000000 */ nop -glabel osWritebackDCacheAll -/* 0CE490 800CD890 3C088000 */ li $t0, 0x80000000 # $t0, 0x8000 -/* 0CE494 800CD894 240A2000 */ li $t2, 8192 -/* 0CE498 800CD898 010A4821 */ addu $t1, $t0, $t2 -/* 0CE49C 800CD89C 2529FFF0 */ addiu $t1, $t1, -0x10 -.L800CD8A0: -/* 0CE4A0 800CD8A0 BD010000 */ cache 1, ($t0) -/* 0CE4A4 800CD8A4 0109082B */ sltu $at, $t0, $t1 -/* 0CE4A8 800CD8A8 1420FFFD */ bnez $at, .L800CD8A0 -/* 0CE4AC 800CD8AC 25080010 */ addiu $t0, $t0, 0x10 -/* 0CE4B0 800CD8B0 03E00008 */ jr $ra -/* 0CE4B4 800CD8B4 00000000 */ nop - -/* 0CE4B8 800CD8B8 00000000 */ nop -/* 0CE4BC 800CD8BC 00000000 */ nop -glabel osSendMesg -/* 0CE4C0 800CD8C0 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CE4C4 800CD8C4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0CE4C8 800CD8C8 AFA40038 */ sw $a0, 0x38($sp) -/* 0CE4CC 800CD8CC AFA5003C */ sw $a1, 0x3c($sp) -/* 0CE4D0 800CD8D0 AFA60040 */ sw $a2, 0x40($sp) -/* 0CE4D4 800CD8D4 AFB20020 */ sw $s2, 0x20($sp) -/* 0CE4D8 800CD8D8 AFB1001C */ sw $s1, 0x1c($sp) -/* 0CE4DC 800CD8DC 0C0346AC */ jal __osDisableInt -/* 0CE4E0 800CD8E0 AFB00018 */ sw $s0, 0x18($sp) -/* 0CE4E4 800CD8E4 8FAE0038 */ lw $t6, 0x38($sp) -/* 0CE4E8 800CD8E8 00408025 */ move $s0, $v0 -/* 0CE4EC 800CD8EC 8DCF0008 */ lw $t7, 8($t6) -/* 0CE4F0 800CD8F0 8DD80010 */ lw $t8, 0x10($t6) -/* 0CE4F4 800CD8F4 01F8082A */ slt $at, $t7, $t8 -/* 0CE4F8 800CD8F8 14200018 */ bnez $at, .L800CD95C -/* 0CE4FC 800CD8FC 00000000 */ nop -.L800CD900: -/* 0CE500 800CD900 8FB90040 */ lw $t9, 0x40($sp) -/* 0CE504 800CD904 24010001 */ li $at, 1 -/* 0CE508 800CD908 1721000A */ bne $t9, $at, .L800CD934 -/* 0CE50C 800CD90C 00000000 */ nop -/* 0CE510 800CD910 3C09800F */ lui $t1, %hi(D_800EB3B0) # $t1, 0x800f -/* 0CE514 800CD914 8D29B3B0 */ lw $t1, %lo(D_800EB3B0)($t1) -/* 0CE518 800CD918 24080008 */ li $t0, 8 -/* 0CE51C 800CD91C A5280010 */ sh $t0, 0x10($t1) -/* 0CE520 800CD920 8FA40038 */ lw $a0, 0x38($sp) -/* 0CE524 800CD924 0C0345F3 */ jal __osEnqueueAndYield -/* 0CE528 800CD928 24840004 */ addiu $a0, $a0, 4 -/* 0CE52C 800CD92C 10000005 */ b .L800CD944 -/* 0CE530 800CD930 00000000 */ nop -.L800CD934: -/* 0CE534 800CD934 0C0346B4 */ jal __osRestoreInt -/* 0CE538 800CD938 02002025 */ move $a0, $s0 -/* 0CE53C 800CD93C 1000002D */ b .L800CD9F4 -/* 0CE540 800CD940 2402FFFF */ li $v0, -1 -.L800CD944: -/* 0CE544 800CD944 8FAA0038 */ lw $t2, 0x38($sp) -/* 0CE548 800CD948 8D4B0008 */ lw $t3, 8($t2) -/* 0CE54C 800CD94C 8D4C0010 */ lw $t4, 0x10($t2) -/* 0CE550 800CD950 016C082A */ slt $at, $t3, $t4 -/* 0CE554 800CD954 1020FFEA */ beqz $at, .L800CD900 -/* 0CE558 800CD958 00000000 */ nop -.L800CD95C: -/* 0CE55C 800CD95C 8FAD0038 */ lw $t5, 0x38($sp) -/* 0CE560 800CD960 8FA8003C */ lw $t0, 0x3c($sp) -/* 0CE564 800CD964 8DAE000C */ lw $t6, 0xc($t5) -/* 0CE568 800CD968 8DAF0008 */ lw $t7, 8($t5) -/* 0CE56C 800CD96C 8DB90010 */ lw $t9, 0x10($t5) -/* 0CE570 800CD970 8DA90014 */ lw $t1, 0x14($t5) -/* 0CE574 800CD974 01CFC021 */ addu $t8, $t6, $t7 -/* 0CE578 800CD978 0319001A */ div $zero, $t8, $t9 -/* 0CE57C 800CD97C 00008810 */ mfhi $s1 -/* 0CE580 800CD980 00115080 */ sll $t2, $s1, 2 -/* 0CE584 800CD984 012A5821 */ addu $t3, $t1, $t2 -/* 0CE588 800CD988 AD680000 */ sw $t0, ($t3) -/* 0CE58C 800CD98C 8FAC0038 */ lw $t4, 0x38($sp) -/* 0CE590 800CD990 17200002 */ bnez $t9, .L800CD99C -/* 0CE594 800CD994 00000000 */ nop -/* 0CE598 800CD998 0007000D */ break 7 -.L800CD99C: -/* 0CE59C 800CD99C 2401FFFF */ li $at, -1 -/* 0CE5A0 800CD9A0 17210004 */ bne $t9, $at, .L800CD9B4 -/* 0CE5A4 800CD9A4 3C018000 */ lui $at, 0x8000 -/* 0CE5A8 800CD9A8 17010002 */ bne $t8, $at, .L800CD9B4 -/* 0CE5AC 800CD9AC 00000000 */ nop -/* 0CE5B0 800CD9B0 0006000D */ break 6 -.L800CD9B4: -/* 0CE5B4 800CD9B4 8D8E0008 */ lw $t6, 8($t4) -/* 0CE5B8 800CD9B8 25CF0001 */ addiu $t7, $t6, 1 -/* 0CE5BC 800CD9BC AD8F0008 */ sw $t7, 8($t4) -/* 0CE5C0 800CD9C0 8FB80038 */ lw $t8, 0x38($sp) -/* 0CE5C4 800CD9C4 8F190000 */ lw $t9, ($t8) -/* 0CE5C8 800CD9C8 8F2D0000 */ lw $t5, ($t9) -/* 0CE5CC 800CD9CC 11A00006 */ beqz $t5, .L800CD9E8 -/* 0CE5D0 800CD9D0 00000000 */ nop -/* 0CE5D4 800CD9D4 0C034645 */ jal __osPopThread -/* 0CE5D8 800CD9D8 03002025 */ move $a0, $t8 -/* 0CE5DC 800CD9DC 00409025 */ move $s2, $v0 -/* 0CE5E0 800CD9E0 0C0330D8 */ jal osStartThread -/* 0CE5E4 800CD9E4 02402025 */ move $a0, $s2 -.L800CD9E8: -/* 0CE5E8 800CD9E8 0C0346B4 */ jal __osRestoreInt -/* 0CE5EC 800CD9EC 02002025 */ move $a0, $s0 -/* 0CE5F0 800CD9F0 00001025 */ move $v0, $zero -.L800CD9F4: -/* 0CE5F4 800CD9F4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0CE5F8 800CD9F8 8FB00018 */ lw $s0, 0x18($sp) -/* 0CE5FC 800CD9FC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0CE600 800CDA00 8FB20020 */ lw $s2, 0x20($sp) -/* 0CE604 800CDA04 03E00008 */ jr $ra -/* 0CE608 800CDA08 27BD0038 */ addiu $sp, $sp, 0x38 - -/* 0CE60C 800CDA0C 00000000 */ nop -glabel osViSwapBuffer -/* 0CE610 800CDA10 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CE614 800CDA14 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE618 800CDA18 0C0346AC */ jal __osDisableInt -/* 0CE61C 800CDA1C AFA40020 */ sw $a0, 0x20($sp) -/* 0CE620 800CDA20 3C0F800F */ lui $t7, %hi(D_800EB434) # $t7, 0x800f -/* 0CE624 800CDA24 8DEFB434 */ lw $t7, %lo(D_800EB434)($t7) -/* 0CE628 800CDA28 8FAE0020 */ lw $t6, 0x20($sp) -/* 0CE62C 800CDA2C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CE630 800CDA30 3C18800F */ lui $t8, %hi(D_800EB434) # $t8, 0x800f -/* 0CE634 800CDA34 ADEE0004 */ sw $t6, 4($t7) -/* 0CE638 800CDA38 8F18B434 */ lw $t8, %lo(D_800EB434)($t8) -/* 0CE63C 800CDA3C 97190000 */ lhu $t9, ($t8) -/* 0CE640 800CDA40 37280010 */ ori $t0, $t9, 0x10 -/* 0CE644 800CDA44 A7080000 */ sh $t0, ($t8) -/* 0CE648 800CDA48 0C0346B4 */ jal __osRestoreInt -/* 0CE64C 800CDA4C 8FA4001C */ lw $a0, 0x1c($sp) -/* 0CE650 800CDA50 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE654 800CDA54 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CE658 800CDA58 03E00008 */ jr $ra -/* 0CE65C 800CDA5C 00000000 */ nop - -glabel bzero -/* 0CE660 800CDA60 28A1000C */ slti $at, $a1, 0xc -/* 0CE664 800CDA64 1420001D */ bnez $at, .L800CDADC -/* 0CE668 800CDA68 00041823 */ negu $v1, $a0 -/* 0CE66C 800CDA6C 30630003 */ andi $v1, $v1, 3 -/* 0CE670 800CDA70 10600003 */ beqz $v1, .L800CDA80 -/* 0CE674 800CDA74 00A32823 */ subu $a1, $a1, $v1 -/* 0CE678 800CDA78 A8800000 */ swl $zero, ($a0) -/* 0CE67C 800CDA7C 00832021 */ addu $a0, $a0, $v1 -.L800CDA80: -/* 0CE680 800CDA80 2401FFE0 */ li $at, -32 -/* 0CE684 800CDA84 00A13824 */ and $a3, $a1, $at -/* 0CE688 800CDA88 10E0000C */ beqz $a3, .L800CDABC -/* 0CE68C 800CDA8C 00A72823 */ subu $a1, $a1, $a3 -/* 0CE690 800CDA90 00E43821 */ addu $a3, $a3, $a0 -.L800CDA94: -/* 0CE694 800CDA94 24840020 */ addiu $a0, $a0, 0x20 -/* 0CE698 800CDA98 AC80FFE0 */ sw $zero, -0x20($a0) -/* 0CE69C 800CDA9C AC80FFE4 */ sw $zero, -0x1c($a0) -/* 0CE6A0 800CDAA0 AC80FFE8 */ sw $zero, -0x18($a0) -/* 0CE6A4 800CDAA4 AC80FFEC */ sw $zero, -0x14($a0) -/* 0CE6A8 800CDAA8 AC80FFF0 */ sw $zero, -0x10($a0) -/* 0CE6AC 800CDAAC AC80FFF4 */ sw $zero, -0xc($a0) -/* 0CE6B0 800CDAB0 AC80FFF8 */ sw $zero, -8($a0) -/* 0CE6B4 800CDAB4 1487FFF7 */ bne $a0, $a3, .L800CDA94 -/* 0CE6B8 800CDAB8 AC80FFFC */ sw $zero, -4($a0) -.L800CDABC: -/* 0CE6BC 800CDABC 2401FFFC */ li $at, -4 -/* 0CE6C0 800CDAC0 00A13824 */ and $a3, $a1, $at -/* 0CE6C4 800CDAC4 10E00005 */ beqz $a3, .L800CDADC -/* 0CE6C8 800CDAC8 00A72823 */ subu $a1, $a1, $a3 -/* 0CE6CC 800CDACC 00E43821 */ addu $a3, $a3, $a0 -.L800CDAD0: -/* 0CE6D0 800CDAD0 24840004 */ addiu $a0, $a0, 4 -/* 0CE6D4 800CDAD4 1487FFFE */ bne $a0, $a3, .L800CDAD0 -/* 0CE6D8 800CDAD8 AC80FFFC */ sw $zero, -4($a0) -.L800CDADC: -/* 0CE6DC 800CDADC 18A00005 */ blez $a1, .L800CDAF4 -/* 0CE6E0 800CDAE0 00000000 */ nop -/* 0CE6E4 800CDAE4 00A42821 */ addu $a1, $a1, $a0 -.L800CDAE8: -/* 0CE6E8 800CDAE8 24840001 */ addiu $a0, $a0, 1 -/* 0CE6EC 800CDAEC 1485FFFE */ bne $a0, $a1, .L800CDAE8 -/* 0CE6F0 800CDAF0 A080FFFF */ sb $zero, -1($a0) -.L800CDAF4: -/* 0CE6F4 800CDAF4 03E00008 */ jr $ra -/* 0CE6F8 800CDAF8 00000000 */ nop - -/* 0CE6FC 800CDAFC 00000000 */ nop -glabel osInvalCache -/* 0CE700 800CDB00 18A00011 */ blez $a1, .L800CDB48 -/* 0CE704 800CDB04 00000000 */ nop -/* 0CE708 800CDB08 240B4000 */ li $t3, 16384 -/* 0CE70C 800CDB0C 00AB082B */ sltu $at, $a1, $t3 -/* 0CE710 800CDB10 1020000F */ beqz $at, .L800CDB50 -/* 0CE714 800CDB14 00000000 */ nop -/* 0CE718 800CDB18 00804025 */ move $t0, $a0 -/* 0CE71C 800CDB1C 00854821 */ addu $t1, $a0, $a1 -/* 0CE720 800CDB20 0109082B */ sltu $at, $t0, $t1 -/* 0CE724 800CDB24 10200008 */ beqz $at, .L800CDB48 -/* 0CE728 800CDB28 00000000 */ nop -/* 0CE72C 800CDB2C 310A001F */ andi $t2, $t0, 0x1f -/* 0CE730 800CDB30 2529FFE0 */ addiu $t1, $t1, -0x20 -/* 0CE734 800CDB34 010A4023 */ subu $t0, $t0, $t2 -.L800CDB38: -/* 0CE738 800CDB38 BD100000 */ cache 0x10, ($t0) -/* 0CE73C 800CDB3C 0109082B */ sltu $at, $t0, $t1 -/* 0CE740 800CDB40 1420FFFD */ bnez $at, .L800CDB38 -/* 0CE744 800CDB44 25080020 */ addiu $t0, $t0, 0x20 -.L800CDB48: -/* 0CE748 800CDB48 03E00008 */ jr $ra -/* 0CE74C 800CDB4C 00000000 */ nop - -.L800CDB50: -/* 0CE750 800CDB50 3C088000 */ li $t0, 0x80000000 -/* 0CE754 800CDB54 010B4821 */ addu $t1, $t0, $t3 -/* 0CE758 800CDB58 2529FFE0 */ addiu $t1, $t1, -0x20 -.L800CDB5C: -/* 0CE75C 800CDB5C BD000000 */ cache 0, ($t0) -/* 0CE760 800CDB60 0109082B */ sltu $at, $t0, $t1 -/* 0CE764 800CDB64 1420FFFD */ bnez $at, .L800CDB5C -/* 0CE768 800CDB68 25080020 */ addiu $t0, $t0, 0x20 -/* 0CE76C 800CDB6C 03E00008 */ jr $ra -/* 0CE770 800CDB70 00000000 */ nop - -/* 0CE774 800CDB74 00000000 */ nop -/* 0CE778 800CDB78 00000000 */ nop -/* 0CE77C 800CDB7C 00000000 */ nop -glabel osInvalDCache -/* 0CE780 800CDB80 18A0001F */ blez $a1, .L800CDC00 -/* 0CE784 800CDB84 00000000 */ nop -/* 0CE788 800CDB88 240B2000 */ li $t3, 8192 -/* 0CE78C 800CDB8C 00AB082B */ sltu $at, $a1, $t3 -/* 0CE790 800CDB90 1020001D */ beqz $at, .L800CDC08 -/* 0CE794 800CDB94 00000000 */ nop -/* 0CE798 800CDB98 00804025 */ move $t0, $a0 -/* 0CE79C 800CDB9C 00854821 */ addu $t1, $a0, $a1 -/* 0CE7A0 800CDBA0 0109082B */ sltu $at, $t0, $t1 -/* 0CE7A4 800CDBA4 10200016 */ beqz $at, .L800CDC00 -/* 0CE7A8 800CDBA8 00000000 */ nop -/* 0CE7AC 800CDBAC 310A000F */ andi $t2, $t0, 0xf -/* 0CE7B0 800CDBB0 11400007 */ beqz $t2, .L800CDBD0 -/* 0CE7B4 800CDBB4 2529FFF0 */ addiu $t1, $t1, -0x10 -/* 0CE7B8 800CDBB8 010A4023 */ subu $t0, $t0, $t2 -/* 0CE7BC 800CDBBC BD150000 */ cache 0x15, ($t0) -/* 0CE7C0 800CDBC0 0109082B */ sltu $at, $t0, $t1 -/* 0CE7C4 800CDBC4 1020000E */ beqz $at, .L800CDC00 -/* 0CE7C8 800CDBC8 00000000 */ nop -/* 0CE7CC 800CDBCC 25080010 */ addiu $t0, $t0, 0x10 -.L800CDBD0: -/* 0CE7D0 800CDBD0 312A000F */ andi $t2, $t1, 0xf -/* 0CE7D4 800CDBD4 11400006 */ beqz $t2, .L800CDBF0 -/* 0CE7D8 800CDBD8 00000000 */ nop -/* 0CE7DC 800CDBDC 012A4823 */ subu $t1, $t1, $t2 -/* 0CE7E0 800CDBE0 BD350010 */ cache 0x15, 0x10($t1) -/* 0CE7E4 800CDBE4 0128082B */ sltu $at, $t1, $t0 -/* 0CE7E8 800CDBE8 14200005 */ bnez $at, .L800CDC00 -/* 0CE7EC 800CDBEC 00000000 */ nop -.L800CDBF0: -/* 0CE7F0 800CDBF0 BD110000 */ cache 0x11, ($t0) -/* 0CE7F4 800CDBF4 0109082B */ sltu $at, $t0, $t1 -/* 0CE7F8 800CDBF8 1420FFFD */ bnez $at, .L800CDBF0 -/* 0CE7FC 800CDBFC 25080010 */ addiu $t0, $t0, 0x10 -.L800CDC00: -/* 0CE800 800CDC00 03E00008 */ jr $ra -/* 0CE804 800CDC04 00000000 */ nop - -.L800CDC08: -/* 0CE808 800CDC08 3C088000 */ li $t0, 0x80000000 -/* 0CE80C 800CDC0C 010B4821 */ addu $t1, $t0, $t3 -/* 0CE810 800CDC10 2529FFF0 */ addiu $t1, $t1, -0x10 -.L800CDC14: -/* 0CE814 800CDC14 BD010000 */ cache 1, ($t0) -/* 0CE818 800CDC18 0109082B */ sltu $at, $t0, $t1 -/* 0CE81C 800CDC1C 1420FFFD */ bnez $at, .L800CDC14 -/* 0CE820 800CDC20 25080010 */ addiu $t0, $t0, 0x10 -/* 0CE824 800CDC24 03E00008 */ jr $ra -/* 0CE828 800CDC28 00000000 */ nop - -/* 0CE82C 800CDC2C 00000000 */ nop -glabel osPiStartDma -/* 0CE830 800CDC30 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0CE834 800CDC34 3C0E800F */ lui $t6, %hi(D_800EB340) # $t6, 0x800f -/* 0CE838 800CDC38 8DCEB340 */ lw $t6, %lo(D_800EB340)($t6) -/* 0CE83C 800CDC3C AFBF001C */ sw $ra, 0x1c($sp) -/* 0CE840 800CDC40 AFA40028 */ sw $a0, 0x28($sp) -/* 0CE844 800CDC44 AFA5002C */ sw $a1, 0x2c($sp) -/* 0CE848 800CDC48 AFA60030 */ sw $a2, 0x30($sp) -/* 0CE84C 800CDC4C AFA70034 */ sw $a3, 0x34($sp) -/* 0CE850 800CDC50 AFB10018 */ sw $s1, 0x18($sp) -/* 0CE854 800CDC54 15C00003 */ bnez $t6, .L800CDC64 -/* 0CE858 800CDC58 AFB00014 */ sw $s0, 0x14($sp) -/* 0CE85C 800CDC5C 10000032 */ b .L800CDD28 -/* 0CE860 800CDC60 2402FFFF */ li $v0, -1 -.L800CDC64: -/* 0CE864 800CDC64 8FAF0030 */ lw $t7, 0x30($sp) -/* 0CE868 800CDC68 15E00005 */ bnez $t7, .L800CDC80 -/* 0CE86C 800CDC6C 00000000 */ nop -/* 0CE870 800CDC70 8FB90028 */ lw $t9, 0x28($sp) -/* 0CE874 800CDC74 2418000B */ li $t8, 11 -/* 0CE878 800CDC78 10000004 */ b .L800CDC8C -/* 0CE87C 800CDC7C A7380000 */ sh $t8, ($t9) -.L800CDC80: -/* 0CE880 800CDC80 8FA90028 */ lw $t1, 0x28($sp) -/* 0CE884 800CDC84 2408000C */ li $t0, 12 -/* 0CE888 800CDC88 A5280000 */ sh $t0, ($t1) -.L800CDC8C: -/* 0CE88C 800CDC8C 8FAA002C */ lw $t2, 0x2c($sp) -/* 0CE890 800CDC90 8FAB0028 */ lw $t3, 0x28($sp) -/* 0CE894 800CDC94 24010001 */ li $at, 1 -/* 0CE898 800CDC98 A16A0002 */ sb $t2, 2($t3) -/* 0CE89C 800CDC9C 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CE8A0 800CDCA0 8FAC0040 */ lw $t4, 0x40($sp) -/* 0CE8A4 800CDCA4 ADAC0004 */ sw $t4, 4($t5) -/* 0CE8A8 800CDCA8 8FAF0028 */ lw $t7, 0x28($sp) -/* 0CE8AC 800CDCAC 8FAE0038 */ lw $t6, 0x38($sp) -/* 0CE8B0 800CDCB0 ADEE0008 */ sw $t6, 8($t7) -/* 0CE8B4 800CDCB4 8FB90028 */ lw $t9, 0x28($sp) -/* 0CE8B8 800CDCB8 8FB80034 */ lw $t8, 0x34($sp) -/* 0CE8BC 800CDCBC AF38000C */ sw $t8, 0xc($t9) -/* 0CE8C0 800CDCC0 8FA90028 */ lw $t1, 0x28($sp) -/* 0CE8C4 800CDCC4 8FA8003C */ lw $t0, 0x3c($sp) -/* 0CE8C8 800CDCC8 AD280010 */ sw $t0, 0x10($t1) -/* 0CE8CC 800CDCCC 8FAA0028 */ lw $t2, 0x28($sp) -/* 0CE8D0 800CDCD0 AD400014 */ sw $zero, 0x14($t2) -/* 0CE8D4 800CDCD4 8FAB002C */ lw $t3, 0x2c($sp) -/* 0CE8D8 800CDCD8 1561000A */ bne $t3, $at, .L800CDD04 -/* 0CE8DC 800CDCDC 00000000 */ nop -/* 0CE8E0 800CDCE0 0C034F58 */ jal osPiGetCmdQueue -/* 0CE8E4 800CDCE4 00000000 */ nop -/* 0CE8E8 800CDCE8 00408825 */ move $s1, $v0 -/* 0CE8EC 800CDCEC 02202025 */ move $a0, $s1 -/* 0CE8F0 800CDCF0 8FA50028 */ lw $a1, 0x28($sp) -/* 0CE8F4 800CDCF4 0C034F04 */ jal osJamMesg -/* 0CE8F8 800CDCF8 00003025 */ move $a2, $zero -/* 0CE8FC 800CDCFC 10000009 */ b .L800CDD24 -/* 0CE900 800CDD00 00408025 */ move $s0, $v0 -.L800CDD04: -/* 0CE904 800CDD04 0C034F58 */ jal osPiGetCmdQueue -/* 0CE908 800CDD08 00000000 */ nop -/* 0CE90C 800CDD0C 00408825 */ move $s1, $v0 -/* 0CE910 800CDD10 02202025 */ move $a0, $s1 -/* 0CE914 800CDD14 8FA50028 */ lw $a1, 0x28($sp) -/* 0CE918 800CDD18 0C033630 */ jal osSendMesg -/* 0CE91C 800CDD1C 00003025 */ move $a2, $zero -/* 0CE920 800CDD20 00408025 */ move $s0, $v0 -.L800CDD24: -/* 0CE924 800CDD24 02001025 */ move $v0, $s0 -.L800CDD28: -/* 0CE928 800CDD28 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CE92C 800CDD2C 8FB00014 */ lw $s0, 0x14($sp) -/* 0CE930 800CDD30 8FB10018 */ lw $s1, 0x18($sp) -/* 0CE934 800CDD34 03E00008 */ jr $ra -/* 0CE938 800CDD38 27BD0028 */ addiu $sp, $sp, 0x28 - -/* 0CE93C 800CDD3C 00000000 */ nop -glabel osSpTaskYield -/* 0CE940 800CDD40 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CE944 800CDD44 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE948 800CDD48 0C034E2C */ jal __osSpSetStatus -/* 0CE94C 800CDD4C 24040400 */ li $a0, 1024 -/* 0CE950 800CDD50 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE954 800CDD54 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CE958 800CDD58 03E00008 */ jr $ra -/* 0CE95C 800CDD5C 00000000 */ nop - -glabel func_800CDD60 -/* 0CE960 800CDD60 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CE964 800CDD64 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE968 800CDD68 0C034F64 */ jal __osSpGetStatus -/* 0CE96C 800CDD6C AFA40020 */ sw $a0, 0x20($sp) -/* 0CE970 800CDD70 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CE974 800CDD74 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CE978 800CDD78 31CF0100 */ andi $t7, $t6, 0x100 -/* 0CE97C 800CDD7C 11E00004 */ beqz $t7, .L800CDD90 -/* 0CE980 800CDD80 00000000 */ nop -/* 0CE984 800CDD84 24180001 */ li $t8, 1 -/* 0CE988 800CDD88 10000002 */ b .L800CDD94 -/* 0CE98C 800CDD8C AFB80018 */ sw $t8, 0x18($sp) -.L800CDD90: -/* 0CE990 800CDD90 AFA00018 */ sw $zero, 0x18($sp) -.L800CDD94: -/* 0CE994 800CDD94 8FB9001C */ lw $t9, 0x1c($sp) -/* 0CE998 800CDD98 33280080 */ andi $t0, $t9, 0x80 -/* 0CE99C 800CDD9C 1100000B */ beqz $t0, .L800CDDCC -/* 0CE9A0 800CDDA0 00000000 */ nop -/* 0CE9A4 800CDDA4 8FA90020 */ lw $t1, 0x20($sp) -/* 0CE9A8 800CDDA8 8FAB0018 */ lw $t3, 0x18($sp) -/* 0CE9AC 800CDDAC 2401FFFD */ li $at, -3 -/* 0CE9B0 800CDDB0 8D2A0004 */ lw $t2, 4($t1) -/* 0CE9B4 800CDDB4 014B6025 */ or $t4, $t2, $t3 -/* 0CE9B8 800CDDB8 AD2C0004 */ sw $t4, 4($t1) -/* 0CE9BC 800CDDBC 8FAD0020 */ lw $t5, 0x20($sp) -/* 0CE9C0 800CDDC0 8DAE0004 */ lw $t6, 4($t5) -/* 0CE9C4 800CDDC4 01C17824 */ and $t7, $t6, $at -/* 0CE9C8 800CDDC8 ADAF0004 */ sw $t7, 4($t5) -.L800CDDCC: -/* 0CE9CC 800CDDCC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE9D0 800CDDD0 8FA20018 */ lw $v0, 0x18($sp) -/* 0CE9D4 800CDDD4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CE9D8 800CDDD8 03E00008 */ jr $ra -/* 0CE9DC 800CDDDC 00000000 */ nop - -glabel osGetTime -/* 0CE9E0 800CDDE0 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CE9E4 800CDDE4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CE9E8 800CDDE8 0C0346AC */ jal __osDisableInt -/* 0CE9EC 800CDDEC AFB00018 */ sw $s0, 0x18($sp) -/* 0CE9F0 800CDDF0 0C034468 */ jal osGetCount -/* 0CE9F4 800CDDF4 00408025 */ move $s0, $v0 -/* 0CE9F8 800CDDF8 AFA20034 */ sw $v0, 0x34($sp) -/* 0CE9FC 800CDDFC 3C0F8019 */ lui $t7, %hi(D_80197608) # $t7, 0x8019 -/* 0CEA00 800CDE00 8DEF7608 */ lw $t7, %lo(D_80197608)($t7) -/* 0CEA04 800CDE04 8FAE0034 */ lw $t6, 0x34($sp) -/* 0CEA08 800CDE08 3C088019 */ lui $t0, %hi(D_80197600) # $t0, 0x8019 -/* 0CEA0C 800CDE0C 3C098019 */ lui $t1, %hi(D_80197604) # $t1, 0x8019 -/* 0CEA10 800CDE10 8D297604 */ lw $t1, %lo(D_80197604)($t1) -/* 0CEA14 800CDE14 8D087600 */ lw $t0, %lo(D_80197600)($t0) -/* 0CEA18 800CDE18 01CFC023 */ subu $t8, $t6, $t7 -/* 0CEA1C 800CDE1C AFB80030 */ sw $t8, 0x30($sp) -/* 0CEA20 800CDE20 02002025 */ move $a0, $s0 -/* 0CEA24 800CDE24 AFA9002C */ sw $t1, 0x2c($sp) -/* 0CEA28 800CDE28 0C0346B4 */ jal __osRestoreInt -/* 0CEA2C 800CDE2C AFA80028 */ sw $t0, 0x28($sp) -/* 0CEA30 800CDE30 8FB90030 */ lw $t9, 0x30($sp) -/* 0CEA34 800CDE34 8FAD002C */ lw $t5, 0x2c($sp) -/* 0CEA38 800CDE38 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CEA3C 800CDE3C 03205825 */ move $t3, $t9 -/* 0CEA40 800CDE40 016D1821 */ addu $v1, $t3, $t5 -/* 0CEA44 800CDE44 8FAC0028 */ lw $t4, 0x28($sp) -/* 0CEA48 800CDE48 240A0000 */ li $t2, 0 -/* 0CEA4C 800CDE4C 006D082B */ sltu $at, $v1, $t5 -/* 0CEA50 800CDE50 002A1021 */ addu $v0, $at, $t2 -/* 0CEA54 800CDE54 8FB00018 */ lw $s0, 0x18($sp) -/* 0CEA58 800CDE58 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CEA5C 800CDE5C 03E00008 */ jr $ra -/* 0CEA60 800CDE60 004C1021 */ addu $v0, $v0, $t4 - -/* 0CEA64 800CDE64 00000000 */ nop -/* 0CEA68 800CDE68 00000000 */ nop -/* 0CEA6C 800CDE6C 00000000 */ nop -glabel __ull_rshift -/* 0CEA70 800CDE70 AFA40000 */ sw $a0, ($sp) -/* 0CEA74 800CDE74 AFA50004 */ sw $a1, 4($sp) -/* 0CEA78 800CDE78 AFA60008 */ sw $a2, 8($sp) -/* 0CEA7C 800CDE7C AFA7000C */ sw $a3, 0xc($sp) -/* 0CEA80 800CDE80 DFAF0008 */ ld $t7, 8($sp) -/* 0CEA84 800CDE84 DFAE0000 */ ld $t6, ($sp) -/* 0CEA88 800CDE88 01EE1016 */ dsrlv $v0, $t6, $t7 -/* 0CEA8C 800CDE8C 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEA90 800CDE90 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEA94 800CDE94 03E00008 */ jr $ra -/* 0CEA98 800CDE98 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ull_rem -/* 0CEA9C 800CDE9C AFA40000 */ sw $a0, ($sp) -/* 0CEAA0 800CDEA0 AFA50004 */ sw $a1, 4($sp) -/* 0CEAA4 800CDEA4 AFA60008 */ sw $a2, 8($sp) -/* 0CEAA8 800CDEA8 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEAAC 800CDEAC DFAF0008 */ ld $t7, 8($sp) -/* 0CEAB0 800CDEB0 DFAE0000 */ ld $t6, ($sp) -/* 0CEAB4 800CDEB4 01CF001F */ ddivu $zero, $t6, $t7 -/* 0CEAB8 800CDEB8 15E00002 */ bnez $t7, .L800CDEC4 -/* 0CEABC 800CDEBC 00000000 */ nop -/* 0CEAC0 800CDEC0 0007000D */ break 7 -.L800CDEC4: -/* 0CEAC4 800CDEC4 00001010 */ mfhi $v0 -/* 0CEAC8 800CDEC8 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEACC 800CDECC 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEAD0 800CDED0 03E00008 */ jr $ra -/* 0CEAD4 800CDED4 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ull_div -/* 0CEAD8 800CDED8 AFA40000 */ sw $a0, ($sp) -/* 0CEADC 800CDEDC AFA50004 */ sw $a1, 4($sp) -/* 0CEAE0 800CDEE0 AFA60008 */ sw $a2, 8($sp) -/* 0CEAE4 800CDEE4 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEAE8 800CDEE8 DFAF0008 */ ld $t7, 8($sp) -/* 0CEAEC 800CDEEC DFAE0000 */ ld $t6, ($sp) -/* 0CEAF0 800CDEF0 01CF001F */ ddivu $zero, $t6, $t7 -/* 0CEAF4 800CDEF4 15E00002 */ bnez $t7, .L800CDF00 -/* 0CEAF8 800CDEF8 00000000 */ nop -/* 0CEAFC 800CDEFC 0007000D */ break 7 -.L800CDF00: -/* 0CEB00 800CDF00 00001012 */ mflo $v0 -/* 0CEB04 800CDF04 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEB08 800CDF08 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEB0C 800CDF0C 03E00008 */ jr $ra -/* 0CEB10 800CDF10 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ll_lshift -/* 0CEB14 800CDF14 AFA40000 */ sw $a0, ($sp) -/* 0CEB18 800CDF18 AFA50004 */ sw $a1, 4($sp) -/* 0CEB1C 800CDF1C AFA60008 */ sw $a2, 8($sp) -/* 0CEB20 800CDF20 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEB24 800CDF24 DFAF0008 */ ld $t7, 8($sp) -/* 0CEB28 800CDF28 DFAE0000 */ ld $t6, ($sp) -/* 0CEB2C 800CDF2C 01EE1014 */ dsllv $v0, $t6, $t7 -/* 0CEB30 800CDF30 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEB34 800CDF34 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEB38 800CDF38 03E00008 */ jr $ra -/* 0CEB3C 800CDF3C 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ll_rem -/* 0CEB40 800CDF40 AFA40000 */ sw $a0, ($sp) -/* 0CEB44 800CDF44 AFA50004 */ sw $a1, 4($sp) -/* 0CEB48 800CDF48 AFA60008 */ sw $a2, 8($sp) -/* 0CEB4C 800CDF4C AFA7000C */ sw $a3, 0xc($sp) -/* 0CEB50 800CDF50 DFAF0008 */ ld $t7, 8($sp) -/* 0CEB54 800CDF54 DFAE0000 */ ld $t6, ($sp) -/* 0CEB58 800CDF58 01CF001F */ ddivu $zero, $t6, $t7 -/* 0CEB5C 800CDF5C 15E00002 */ bnez $t7, .L800CDF68 -/* 0CEB60 800CDF60 00000000 */ nop -/* 0CEB64 800CDF64 0007000D */ break 7 -.L800CDF68: -/* 0CEB68 800CDF68 00001010 */ mfhi $v0 -/* 0CEB6C 800CDF6C 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEB70 800CDF70 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEB74 800CDF74 03E00008 */ jr $ra -/* 0CEB78 800CDF78 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ll_div -/* 0CEB7C 800CDF7C AFA40000 */ sw $a0, ($sp) -/* 0CEB80 800CDF80 AFA50004 */ sw $a1, 4($sp) -/* 0CEB84 800CDF84 AFA60008 */ sw $a2, 8($sp) -/* 0CEB88 800CDF88 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEB8C 800CDF8C DFAF0008 */ ld $t7, 8($sp) -/* 0CEB90 800CDF90 DFAE0000 */ ld $t6, ($sp) -/* 0CEB94 800CDF94 01CF001E */ ddiv $zero, $t6, $t7 -/* 0CEB98 800CDF98 00000000 */ nop -/* 0CEB9C 800CDF9C 15E00002 */ bnez $t7, .L800CDFA8 -/* 0CEBA0 800CDFA0 00000000 */ nop -/* 0CEBA4 800CDFA4 0007000D */ break 7 -.L800CDFA8: -/* 0CEBA8 800CDFA8 6401FFFF */ daddiu $at, $zero, -1 -/* 0CEBAC 800CDFAC 15E10005 */ bne $t7, $at, .L800CDFC4 -/* 0CEBB0 800CDFB0 64010001 */ daddiu $at, $zero, 1 -/* 0CEBB4 800CDFB4 00010FFC */ dsll32 $at, $at, 0x1f -/* 0CEBB8 800CDFB8 15C10002 */ bne $t6, $at, .L800CDFC4 -/* 0CEBBC 800CDFBC 00000000 */ nop -/* 0CEBC0 800CDFC0 0006000D */ break 6 -.L800CDFC4: -/* 0CEBC4 800CDFC4 00001012 */ mflo $v0 -/* 0CEBC8 800CDFC8 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEBCC 800CDFCC 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEBD0 800CDFD0 03E00008 */ jr $ra -/* 0CEBD4 800CDFD4 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ll_mul -/* 0CEBD8 800CDFD8 AFA40000 */ sw $a0, ($sp) -/* 0CEBDC 800CDFDC AFA50004 */ sw $a1, 4($sp) -/* 0CEBE0 800CDFE0 AFA60008 */ sw $a2, 8($sp) -/* 0CEBE4 800CDFE4 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEBE8 800CDFE8 DFAF0008 */ ld $t7, 8($sp) -/* 0CEBEC 800CDFEC DFAE0000 */ ld $t6, ($sp) -/* 0CEBF0 800CDFF0 01CF001D */ dmultu $t6, $t7 -/* 0CEBF4 800CDFF4 00001012 */ mflo $v0 -/* 0CEBF8 800CDFF8 0002183C */ dsll32 $v1, $v0, 0 -/* 0CEBFC 800CDFFC 0003183F */ dsra32 $v1, $v1, 0 -/* 0CEC00 800CE000 03E00008 */ jr $ra -/* 0CEC04 800CE004 0002103F */ dsra32 $v0, $v0, 0 - -glabel __ull_divremi -/* 0CEC08 800CE008 87AF0012 */ lh $t7, 0x12($sp) -/* 0CEC0C 800CE00C AFA60008 */ sw $a2, 8($sp) -/* 0CEC10 800CE010 AFA7000C */ sw $a3, 0xc($sp) -/* 0CEC14 800CE014 DFAE0008 */ ld $t6, 8($sp) -/* 0CEC18 800CE018 01E0C025 */ move $t8, $t7 -/* 0CEC1C 800CE01C 0300C825 */ move $t9, $t8 -/* 0CEC20 800CE020 01D9001F */ ddivu $zero, $t6, $t9 -/* 0CEC24 800CE024 17200002 */ bnez $t9, .L800CE030 -/* 0CEC28 800CE028 00000000 */ nop -/* 0CEC2C 800CE02C 0007000D */ break 7 -.L800CE030: -/* 0CEC30 800CE030 00004012 */ mflo $t0 -/* 0CEC34 800CE034 FC880000 */ sd $t0, ($a0) -/* 0CEC38 800CE038 87AA0012 */ lh $t2, 0x12($sp) -/* 0CEC3C 800CE03C DFA90008 */ ld $t1, 8($sp) -/* 0CEC40 800CE040 01405825 */ move $t3, $t2 -/* 0CEC44 800CE044 01606025 */ move $t4, $t3 -/* 0CEC48 800CE048 012C001F */ ddivu $zero, $t1, $t4 -/* 0CEC4C 800CE04C 15800002 */ bnez $t4, .L800CE058 -/* 0CEC50 800CE050 00000000 */ nop -/* 0CEC54 800CE054 0007000D */ break 7 -.L800CE058: -/* 0CEC58 800CE058 00006810 */ mfhi $t5 -/* 0CEC5C 800CE05C FCAD0000 */ sd $t5, ($a1) -/* 0CEC60 800CE060 03E00008 */ jr $ra -/* 0CEC64 800CE064 00000000 */ nop - -glabel __ll_mod -/* 0CEC68 800CE068 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0CEC6C 800CE06C AFA40008 */ sw $a0, 8($sp) -/* 0CEC70 800CE070 AFA5000C */ sw $a1, 0xc($sp) -/* 0CEC74 800CE074 AFA60010 */ sw $a2, 0x10($sp) -/* 0CEC78 800CE078 AFA70014 */ sw $a3, 0x14($sp) -/* 0CEC7C 800CE07C DFAF0010 */ ld $t7, 0x10($sp) -/* 0CEC80 800CE080 DFAE0008 */ ld $t6, 8($sp) -/* 0CEC84 800CE084 01CF001E */ ddiv $zero, $t6, $t7 -/* 0CEC88 800CE088 00000000 */ nop -/* 0CEC8C 800CE08C 15E00002 */ bnez $t7, .L800CE098 -/* 0CEC90 800CE090 00000000 */ nop -/* 0CEC94 800CE094 0007000D */ break 7 -.L800CE098: -/* 0CEC98 800CE098 6401FFFF */ daddiu $at, $zero, -1 -/* 0CEC9C 800CE09C 15E10005 */ bne $t7, $at, .L800CE0B4 -/* 0CECA0 800CE0A0 64010001 */ daddiu $at, $zero, 1 -/* 0CECA4 800CE0A4 00010FFC */ dsll32 $at, $at, 0x1f -/* 0CECA8 800CE0A8 15C10002 */ bne $t6, $at, .L800CE0B4 -/* 0CECAC 800CE0AC 00000000 */ nop -/* 0CECB0 800CE0B0 0006000D */ break 6 -.L800CE0B4: -/* 0CECB4 800CE0B4 0000C010 */ mfhi $t8 -/* 0CECB8 800CE0B8 FFB80000 */ sd $t8, ($sp) -/* 0CECBC 800CE0BC 07010003 */ bgez $t8, .L800CE0CC -/* 0CECC0 800CE0C0 00000000 */ nop -/* 0CECC4 800CE0C4 1DE00007 */ bgtz $t7, .L800CE0E4 -/* 0CECC8 800CE0C8 00000000 */ nop -.L800CE0CC: -/* 0CECCC 800CE0CC DFB90000 */ ld $t9, ($sp) -/* 0CECD0 800CE0D0 1B200008 */ blez $t9, .L800CE0F4 -/* 0CECD4 800CE0D4 00000000 */ nop -/* 0CECD8 800CE0D8 DFA80010 */ ld $t0, 0x10($sp) -/* 0CECDC 800CE0DC 05010005 */ bgez $t0, .L800CE0F4 -/* 0CECE0 800CE0E0 00000000 */ nop -.L800CE0E4: -/* 0CECE4 800CE0E4 DFA90000 */ ld $t1, ($sp) -/* 0CECE8 800CE0E8 DFAA0010 */ ld $t2, 0x10($sp) -/* 0CECEC 800CE0EC 012A582D */ daddu $t3, $t1, $t2 -/* 0CECF0 800CE0F0 FFAB0000 */ sd $t3, ($sp) -.L800CE0F4: -/* 0CECF4 800CE0F4 8FA20000 */ lw $v0, ($sp) -/* 0CECF8 800CE0F8 8FA30004 */ lw $v1, 4($sp) -/* 0CECFC 800CE0FC 03E00008 */ jr $ra -/* 0CED00 800CE100 27BD0008 */ addiu $sp, $sp, 8 - -glabel __ll_rshift -/* 0CED04 800CE104 AFA40000 */ sw $a0, ($sp) -/* 0CED08 800CE108 AFA50004 */ sw $a1, 4($sp) -/* 0CED0C 800CE10C AFA60008 */ sw $a2, 8($sp) -/* 0CED10 800CE110 AFA7000C */ sw $a3, 0xc($sp) -/* 0CED14 800CE114 DFAF0008 */ ld $t7, 8($sp) -/* 0CED18 800CE118 DFAE0000 */ ld $t6, ($sp) -/* 0CED1C 800CE11C 01EE1017 */ dsrav $v0, $t6, $t7 -/* 0CED20 800CE120 0002183C */ dsll32 $v1, $v0, 0 -/* 0CED24 800CE124 0003183F */ dsra32 $v1, $v1, 0 -/* 0CED28 800CE128 03E00008 */ jr $ra -/* 0CED2C 800CE12C 0002103F */ dsra32 $v0, $v0, 0 - -glabel func_800CE130 -/* 0CED30 800CE130 3C02800F */ lui $v0, %hi(D_800EB3AC) # 0x800f -/* 0CED34 800CE134 03E00008 */ jr $ra -/* 0CED38 800CE138 8C42B3AC */ lw $v0, %lo(D_800EB3AC)($v0) # -0x4c54($v0) - -/* 0CED3C 800CE13C 00000000 */ nop -glabel sqrtf -/* 0CED40 800CE140 03E00008 */ jr $ra -/* 0CED44 800CE144 46006004 */ sqrt.s $f0, $f12 - -/* 0CED48 800CE148 00000000 */ nop -/* 0CED4C 800CE14C 00000000 */ nop -glabel guOrthoF -/* 0CED50 800CE150 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CED54 800CE154 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CED58 800CE158 AFA5001C */ sw $a1, 0x1c($sp) -/* 0CED5C 800CE15C AFA60020 */ sw $a2, 0x20($sp) -/* 0CED60 800CE160 AFA70024 */ sw $a3, 0x24($sp) -/* 0CED64 800CE164 0C034FA8 */ jal guMtxIdentF -/* 0CED68 800CE168 AFA40018 */ sw $a0, 0x18($sp) -/* 0CED6C 800CE16C C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0CED70 800CE170 C7A6001C */ lwc1 $f6, 0x1c($sp) -/* 0CED74 800CE174 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0CED78 800CE178 44814000 */ mtc1 $at, $f8 -/* 0CED7C 800CE17C 46062001 */ sub.s $f0, $f4, $f6 -/* 0CED80 800CE180 8FA20018 */ lw $v0, 0x18($sp) -/* 0CED84 800CE184 C7AE0028 */ lwc1 $f14, 0x28($sp) -/* 0CED88 800CE188 C7B00030 */ lwc1 $f16, 0x30($sp) -/* 0CED8C 800CE18C 46004283 */ div.s $f10, $f8, $f0 -/* 0CED90 800CE190 C7B2002C */ lwc1 $f18, 0x2c($sp) -/* 0CED94 800CE194 44813000 */ mtc1 $at, $f6 -/* 0CED98 800CE198 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 0CED9C 800CE19C 46128301 */ sub.s $f12, $f16, $f18 -/* 0CEDA0 800CE1A0 00001825 */ move $v1, $zero -/* 0CEDA4 800CE1A4 24040004 */ li $a0, 4 -/* 0CEDA8 800CE1A8 E44A0000 */ swc1 $f10, ($v0) -/* 0CEDAC 800CE1AC C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0CEDB0 800CE1B0 44815000 */ mtc1 $at, $f10 -/* 0CEDB4 800CE1B4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0CEDB8 800CE1B8 46047081 */ sub.s $f2, $f14, $f4 -/* 0CEDBC 800CE1BC 460C5103 */ div.s $f4, $f10, $f12 -/* 0CEDC0 800CE1C0 46023203 */ div.s $f8, $f6, $f2 -/* 0CEDC4 800CE1C4 E4440028 */ swc1 $f4, 0x28($v0) -/* 0CEDC8 800CE1C8 E4480014 */ swc1 $f8, 0x14($v0) -/* 0CEDCC 800CE1CC C7A8001C */ lwc1 $f8, 0x1c($sp) -/* 0CEDD0 800CE1D0 C7A60020 */ lwc1 $f6, 0x20($sp) -/* 0CEDD4 800CE1D4 46083280 */ add.s $f10, $f6, $f8 -/* 0CEDD8 800CE1D8 46005107 */ neg.s $f4, $f10 -/* 0CEDDC 800CE1DC 46002183 */ div.s $f6, $f4, $f0 -/* 0CEDE0 800CE1E0 E4460030 */ swc1 $f6, 0x30($v0) -/* 0CEDE4 800CE1E4 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0CEDE8 800CE1E8 46087280 */ add.s $f10, $f14, $f8 -/* 0CEDEC 800CE1EC 46128200 */ add.s $f8, $f16, $f18 -/* 0CEDF0 800CE1F0 46005107 */ neg.s $f4, $f10 -/* 0CEDF4 800CE1F4 46004287 */ neg.s $f10, $f8 -/* 0CEDF8 800CE1F8 46022183 */ div.s $f6, $f4, $f2 -/* 0CEDFC 800CE1FC 460C5103 */ div.s $f4, $f10, $f12 -/* 0CEE00 800CE200 E4460034 */ swc1 $f6, 0x34($v0) -/* 0CEE04 800CE204 44813000 */ mtc1 $at, $f6 -/* 0CEE08 800CE208 00000000 */ nop -/* 0CEE0C 800CE20C E446003C */ swc1 $f6, 0x3c($v0) -/* 0CEE10 800CE210 E4440038 */ swc1 $f4, 0x38($v0) -/* 0CEE14 800CE214 C7A00034 */ lwc1 $f0, 0x34($sp) -/* 0CEE18 800CE218 C4480000 */ lwc1 $f8, ($v0) -/* 0CEE1C 800CE21C 24630001 */ addiu $v1, $v1, 1 -/* 0CEE20 800CE220 C4520004 */ lwc1 $f18, 4($v0) -/* 0CEE24 800CE224 46004302 */ mul.s $f12, $f8, $f0 -/* 0CEE28 800CE228 C44E0008 */ lwc1 $f14, 8($v0) -/* 0CEE2C 800CE22C 10640010 */ beq $v1, $a0, .L800CE270 -/* 0CEE30 800CE230 C450000C */ lwc1 $f16, 0xc($v0) -.L800CE234: -/* 0CEE34 800CE234 46009282 */ mul.s $f10, $f18, $f0 -/* 0CEE38 800CE238 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0CEE3C 800CE23C C4520014 */ lwc1 $f18, 0x14($v0) -/* 0CEE40 800CE240 46007182 */ mul.s $f6, $f14, $f0 -/* 0CEE44 800CE244 C44E0018 */ lwc1 $f14, 0x18($v0) -/* 0CEE48 800CE248 24630001 */ addiu $v1, $v1, 1 -/* 0CEE4C 800CE24C 46008102 */ mul.s $f4, $f16, $f0 -/* 0CEE50 800CE250 C450001C */ lwc1 $f16, 0x1c($v0) -/* 0CEE54 800CE254 E44C0000 */ swc1 $f12, ($v0) -/* 0CEE58 800CE258 46004302 */ mul.s $f12, $f8, $f0 -/* 0CEE5C 800CE25C E44A0004 */ swc1 $f10, 4($v0) -/* 0CEE60 800CE260 E4460008 */ swc1 $f6, 8($v0) -/* 0CEE64 800CE264 24420010 */ addiu $v0, $v0, 0x10 -/* 0CEE68 800CE268 1464FFF2 */ bne $v1, $a0, .L800CE234 -/* 0CEE6C 800CE26C E444FFFC */ swc1 $f4, -4($v0) -.L800CE270: -/* 0CEE70 800CE270 46009282 */ mul.s $f10, $f18, $f0 -/* 0CEE74 800CE274 24420010 */ addiu $v0, $v0, 0x10 -/* 0CEE78 800CE278 E44CFFF0 */ swc1 $f12, -0x10($v0) -/* 0CEE7C 800CE27C 46007182 */ mul.s $f6, $f14, $f0 -/* 0CEE80 800CE280 00000000 */ nop -/* 0CEE84 800CE284 46008102 */ mul.s $f4, $f16, $f0 -/* 0CEE88 800CE288 E44AFFF4 */ swc1 $f10, -0xc($v0) -/* 0CEE8C 800CE28C E446FFF8 */ swc1 $f6, -8($v0) -/* 0CEE90 800CE290 E444FFFC */ swc1 $f4, -4($v0) -/* 0CEE94 800CE294 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CEE98 800CE298 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CEE9C 800CE29C 03E00008 */ jr $ra -/* 0CEEA0 800CE2A0 00000000 */ nop - -glabel guFrustum -/* 0CEEA4 800CE2A4 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0CEEA8 800CE2A8 44856000 */ mtc1 $a1, $f12 -/* 0CEEAC 800CE2AC 44867000 */ mtc1 $a2, $f14 -/* 0CEEB0 800CE2B0 44878000 */ mtc1 $a3, $f16 -/* 0CEEB4 800CE2B4 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0CEEB8 800CE2B8 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0CEEBC 800CE2BC C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0CEEC0 800CE2C0 C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 0CEEC4 800CE2C4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0CEEC8 800CE2C8 AFA40068 */ sw $a0, 0x68($sp) -/* 0CEECC 800CE2CC 44056000 */ mfc1 $a1, $f12 -/* 0CEED0 800CE2D0 44067000 */ mfc1 $a2, $f14 -/* 0CEED4 800CE2D4 44078000 */ mfc1 $a3, $f16 -/* 0CEED8 800CE2D8 27A40028 */ addiu $a0, $sp, 0x28 -/* 0CEEDC 800CE2DC E7A40010 */ swc1 $f4, 0x10($sp) -/* 0CEEE0 800CE2E0 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0CEEE4 800CE2E4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0CEEE8 800CE2E8 0C033854 */ jal guOrthoF -/* 0CEEEC 800CE2EC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0CEEF0 800CE2F0 27A40028 */ addiu $a0, $sp, 0x28 -/* 0CEEF4 800CE2F4 0C034F68 */ jal guMtxF2L -/* 0CEEF8 800CE2F8 8FA50068 */ lw $a1, 0x68($sp) -/* 0CEEFC 800CE2FC 8FBF0024 */ lw $ra, 0x24($sp) -/* 0CEF00 800CE300 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0CEF04 800CE304 03E00008 */ jr $ra -/* 0CEF08 800CE308 00000000 */ nop - -/* 0CEF0C 800CE30C 00000000 */ nop -glabel osSetTime -/* 0CEF10 800CE310 AFA40000 */ sw $a0, ($sp) -/* 0CEF14 800CE314 8FAE0000 */ lw $t6, ($sp) -/* 0CEF18 800CE318 AFA50004 */ sw $a1, 4($sp) -/* 0CEF1C 800CE31C 3C018019 */ lui $at, %hi(D_80197600) # $at, 0x8019 -/* 0CEF20 800CE320 8FAF0004 */ lw $t7, 4($sp) -/* 0CEF24 800CE324 AC2E7600 */ sw $t6, %lo(D_80197600)($at) -/* 0CEF28 800CE328 3C018019 */ lui $at, %hi(D_80197604) # 0x8019 -/* 0CEF2C 800CE32C 03E00008 */ jr $ra -/* 0CEF30 800CE330 AC2F7604 */ sw $t7, %lo(D_80197604)($at) # 0x7604($at) - -/* 0CEF34 800CE334 00000000 */ nop -/* 0CEF38 800CE338 00000000 */ nop -/* 0CEF3C 800CE33C 00000000 */ nop -glabel osEepromProbe -/* 0CEF40 800CE340 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CEF44 800CE344 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CEF48 800CE348 AFA40020 */ sw $a0, 0x20($sp) -/* 0CEF4C 800CE34C 0C034EE8 */ jal __osSiGetAccess -/* 0CEF50 800CE350 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CEF54 800CE354 8FA40020 */ lw $a0, 0x20($sp) -/* 0CEF58 800CE358 0C0350B3 */ jal __osEepStatus -/* 0CEF5C 800CE35C 27A50018 */ addiu $a1, $sp, 0x18 -/* 0CEF60 800CE360 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CEF64 800CE364 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CEF68 800CE368 15C00008 */ bnez $t6, .L800CE38C -/* 0CEF6C 800CE36C 00000000 */ nop -/* 0CEF70 800CE370 97AF0018 */ lhu $t7, 0x18($sp) -/* 0CEF74 800CE374 31F88000 */ andi $t8, $t7, 0x8000 -/* 0CEF78 800CE378 13000004 */ beqz $t8, .L800CE38C -/* 0CEF7C 800CE37C 00000000 */ nop -/* 0CEF80 800CE380 24190001 */ li $t9, 1 -/* 0CEF84 800CE384 10000002 */ b .L800CE390 -/* 0CEF88 800CE388 AFB9001C */ sw $t9, 0x1c($sp) -.L800CE38C: -/* 0CEF8C 800CE38C AFA0001C */ sw $zero, 0x1c($sp) -.L800CE390: -/* 0CEF90 800CE390 0C034EF9 */ jal __osSiRelAccess -/* 0CEF94 800CE394 00000000 */ nop -/* 0CEF98 800CE398 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CEF9C 800CE39C 8FA2001C */ lw $v0, 0x1c($sp) -/* 0CEFA0 800CE3A0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CEFA4 800CE3A4 03E00008 */ jr $ra -/* 0CEFA8 800CE3A8 00000000 */ nop - -/* 0CEFAC 800CE3AC 00000000 */ nop -glabel func_800CE3B0 -/* 0CEFB0 800CE3B0 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0CEFB4 800CE3B4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CEFB8 800CE3B8 240E0003 */ li $t6, 3 -/* 0CEFBC 800CE3BC AFA40040 */ sw $a0, 0x40($sp) -/* 0CEFC0 800CE3C0 AFA50044 */ sw $a1, 0x44($sp) -/* 0CEFC4 800CE3C4 AFA0003C */ sw $zero, 0x3c($sp) -/* 0CEFC8 800CE3C8 A3A0001F */ sb $zero, 0x1f($sp) -/* 0CEFCC 800CE3CC 0C034EE8 */ jal __osSiGetAccess -/* 0CEFD0 800CE3D0 AFAE0018 */ sw $t6, 0x18($sp) -.L800CE3D4: -/* 0CEFD4 800CE3D4 0C033954 */ jal func_800CE550 -/* 0CEFD8 800CE3D8 00002025 */ move $a0, $zero -/* 0CEFDC 800CE3DC 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0CEFE0 800CE3E0 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0CEFE4 800CE3E4 0C034EA8 */ jal __osSiRawStartDma -/* 0CEFE8 800CE3E8 24040001 */ li $a0, 1 -/* 0CEFEC 800CE3EC AFA2003C */ sw $v0, 0x3c($sp) -/* 0CEFF0 800CE3F0 8FA40040 */ lw $a0, 0x40($sp) -/* 0CEFF4 800CE3F4 27A50038 */ addiu $a1, $sp, 0x38 -/* 0CEFF8 800CE3F8 0C0335D4 */ jal osRecvMesg -/* 0CEFFC 800CE3FC 24060001 */ li $a2, 1 -/* 0CF000 800CE400 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0CF004 800CE404 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0CF008 800CE408 0C034EA8 */ jal __osSiRawStartDma -/* 0CF00C 800CE40C 00002025 */ move $a0, $zero -/* 0CF010 800CE410 AFA2003C */ sw $v0, 0x3c($sp) -/* 0CF014 800CE414 8FA40040 */ lw $a0, 0x40($sp) -/* 0CF018 800CE418 27A50038 */ addiu $a1, $sp, 0x38 -/* 0CF01C 800CE41C 0C0335D4 */ jal osRecvMesg -/* 0CF020 800CE420 24060001 */ li $a2, 1 -/* 0CF024 800CE424 27A40037 */ addiu $a0, $sp, 0x37 -/* 0CF028 800CE428 0C033993 */ jal func_800CE64C -/* 0CF02C 800CE42C 27A50024 */ addiu $a1, $sp, 0x24 -/* 0CF030 800CE430 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 -/* 0CF034 800CE434 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) -/* 0CF038 800CE438 AFA00020 */ sw $zero, 0x20($sp) -/* 0CF03C 800CE43C 19E00014 */ blez $t7, .L800CE490 -/* 0CF040 800CE440 00000000 */ nop -.L800CE444: -/* 0CF044 800CE444 8FB80020 */ lw $t8, 0x20($sp) -/* 0CF048 800CE448 0018C880 */ sll $t9, $t8, 2 -/* 0CF04C 800CE44C 03B94021 */ addu $t0, $sp, $t9 -/* 0CF050 800CE450 91080026 */ lbu $t0, 0x26($t0) -/* 0CF054 800CE454 31090004 */ andi $t1, $t0, 4 -/* 0CF058 800CE458 15200005 */ bnez $t1, .L800CE470 -/* 0CF05C 800CE45C 00000000 */ nop -/* 0CF060 800CE460 8FAA0018 */ lw $t2, 0x18($sp) -/* 0CF064 800CE464 254BFFFF */ addiu $t3, $t2, -1 -/* 0CF068 800CE468 10000009 */ b .L800CE490 -/* 0CF06C 800CE46C AFAB0018 */ sw $t3, 0x18($sp) -.L800CE470: -/* 0CF070 800CE470 8FAC0020 */ lw $t4, 0x20($sp) -/* 0CF074 800CE474 3C0E8019 */ lui $t6, %hi(_osContNumControllers) # $t6, 0x8019 -/* 0CF078 800CE478 91CE6541 */ lbu $t6, %lo(_osContNumControllers)($t6) -/* 0CF07C 800CE47C 258D0001 */ addiu $t5, $t4, 1 -/* 0CF080 800CE480 AFAD0020 */ sw $t5, 0x20($sp) -/* 0CF084 800CE484 01AE082A */ slt $at, $t5, $t6 -/* 0CF088 800CE488 1420FFEE */ bnez $at, .L800CE444 -/* 0CF08C 800CE48C 00000000 */ nop -.L800CE490: -/* 0CF090 800CE490 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 -/* 0CF094 800CE494 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) -/* 0CF098 800CE498 8FB80020 */ lw $t8, 0x20($sp) -/* 0CF09C 800CE49C 15F80002 */ bne $t7, $t8, .L800CE4A8 -/* 0CF0A0 800CE4A0 00000000 */ nop -/* 0CF0A4 800CE4A4 AFA00018 */ sw $zero, 0x18($sp) -.L800CE4A8: -/* 0CF0A8 800CE4A8 8FB90018 */ lw $t9, 0x18($sp) -/* 0CF0AC 800CE4AC 1F20FFC9 */ bgtz $t9, .L800CE3D4 -/* 0CF0B0 800CE4B0 00000000 */ nop -/* 0CF0B4 800CE4B4 3C088019 */ lui $t0, %hi(_osContNumControllers) # $t0, 0x8019 -/* 0CF0B8 800CE4B8 91086541 */ lbu $t0, %lo(_osContNumControllers)($t0) -/* 0CF0BC 800CE4BC AFA00020 */ sw $zero, 0x20($sp) -/* 0CF0C0 800CE4C0 19000019 */ blez $t0, .L800CE528 -/* 0CF0C4 800CE4C4 00000000 */ nop -.L800CE4C8: -/* 0CF0C8 800CE4C8 8FA90020 */ lw $t1, 0x20($sp) -/* 0CF0CC 800CE4CC 27AB0024 */ addiu $t3, $sp, 0x24 -/* 0CF0D0 800CE4D0 00095080 */ sll $t2, $t1, 2 -/* 0CF0D4 800CE4D4 014B6021 */ addu $t4, $t2, $t3 -/* 0CF0D8 800CE4D8 918D0003 */ lbu $t5, 3($t4) -/* 0CF0DC 800CE4DC 15A0000A */ bnez $t5, .L800CE508 -/* 0CF0E0 800CE4E0 00000000 */ nop -/* 0CF0E4 800CE4E4 918E0002 */ lbu $t6, 2($t4) -/* 0CF0E8 800CE4E8 31CF0001 */ andi $t7, $t6, 1 -/* 0CF0EC 800CE4EC 11E00006 */ beqz $t7, .L800CE508 -/* 0CF0F0 800CE4F0 00000000 */ nop -/* 0CF0F4 800CE4F4 93B8001F */ lbu $t8, 0x1f($sp) -/* 0CF0F8 800CE4F8 24190001 */ li $t9, 1 -/* 0CF0FC 800CE4FC 01394004 */ sllv $t0, $t9, $t1 -/* 0CF100 800CE500 03085025 */ or $t2, $t8, $t0 -/* 0CF104 800CE504 A3AA001F */ sb $t2, 0x1f($sp) -.L800CE508: -/* 0CF108 800CE508 8FAB0020 */ lw $t3, 0x20($sp) -/* 0CF10C 800CE50C 3C0C8019 */ lui $t4, %hi(_osContNumControllers) # $t4, 0x8019 -/* 0CF110 800CE510 918C6541 */ lbu $t4, %lo(_osContNumControllers)($t4) -/* 0CF114 800CE514 256D0001 */ addiu $t5, $t3, 1 -/* 0CF118 800CE518 AFAD0020 */ sw $t5, 0x20($sp) -/* 0CF11C 800CE51C 01AC082A */ slt $at, $t5, $t4 -/* 0CF120 800CE520 1420FFE9 */ bnez $at, .L800CE4C8 -/* 0CF124 800CE524 00000000 */ nop -.L800CE528: -/* 0CF128 800CE528 0C034EF9 */ jal __osSiRelAccess -/* 0CF12C 800CE52C 00000000 */ nop -/* 0CF130 800CE530 93AE001F */ lbu $t6, 0x1f($sp) -/* 0CF134 800CE534 8FAF0044 */ lw $t7, 0x44($sp) -/* 0CF138 800CE538 A1EE0000 */ sb $t6, ($t7) -/* 0CF13C 800CE53C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF140 800CE540 8FA2003C */ lw $v0, 0x3c($sp) -/* 0CF144 800CE544 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0CF148 800CE548 03E00008 */ jr $ra -/* 0CF14C 800CE54C 00000000 */ nop - -glabel func_800CE550 -/* 0CF150 800CE550 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CF154 800CE554 308400FF */ andi $a0, $a0, 0xff -/* 0CF158 800CE558 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0CF15C 800CE55C A0246540 */ sb $a0, %lo(_osLastSentSiCmd)($at) -/* 0CF160 800CE560 AFA00000 */ sw $zero, ($sp) -.L800CE564: -/* 0CF164 800CE564 8FAE0000 */ lw $t6, ($sp) -/* 0CF168 800CE568 8FB80000 */ lw $t8, ($sp) -/* 0CF16C 800CE56C 3C018019 */ lui $at, %hi(D_80196590) # 0x8019 -/* 0CF170 800CE570 000E7880 */ sll $t7, $t6, 2 -/* 0CF174 800CE574 002F0821 */ addu $at, $at, $t7 -/* 0CF178 800CE578 AC206590 */ sw $zero, %lo(D_80196590)($at) # 0x6590($at) -/* 0CF17C 800CE57C 27190001 */ addiu $t9, $t8, 1 -/* 0CF180 800CE580 2B210010 */ slti $at, $t9, 0x10 -/* 0CF184 800CE584 1420FFF7 */ bnez $at, .L800CE564 -/* 0CF188 800CE588 AFB90000 */ sw $t9, ($sp) -/* 0CF18C 800CE58C 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 -/* 0CF190 800CE590 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) -/* 0CF194 800CE594 3C098019 */ lui $t1, %hi(D_80196590) # $t1, 0x8019 -/* 0CF198 800CE598 24080001 */ li $t0, 1 -/* 0CF19C 800CE59C 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 -/* 0CF1A0 800CE5A0 25296590 */ addiu $t1, %lo(D_80196590) # addiu $t1, $t1, 0x6590 -/* 0CF1A4 800CE5A4 240A00FF */ li $t2, 255 -/* 0CF1A8 800CE5A8 240B0001 */ li $t3, 1 -/* 0CF1AC 800CE5AC 240C0003 */ li $t4, 3 -/* 0CF1B0 800CE5B0 240D00FF */ li $t5, 255 -/* 0CF1B4 800CE5B4 240E00FF */ li $t6, 255 -/* 0CF1B8 800CE5B8 240F00FF */ li $t7, 255 -/* 0CF1BC 800CE5BC 241800FF */ li $t8, 255 -/* 0CF1C0 800CE5C0 AC2865CC */ sw $t0, %lo(D_801965CC)($at) -/* 0CF1C4 800CE5C4 AFA9000C */ sw $t1, 0xc($sp) -/* 0CF1C8 800CE5C8 A3AA0004 */ sb $t2, 4($sp) -/* 0CF1CC 800CE5CC A3AB0005 */ sb $t3, 5($sp) -/* 0CF1D0 800CE5D0 A3AC0006 */ sb $t4, 6($sp) -/* 0CF1D4 800CE5D4 A3A40007 */ sb $a0, 7($sp) -/* 0CF1D8 800CE5D8 A3AD0008 */ sb $t5, 8($sp) -/* 0CF1DC 800CE5DC A3AE0009 */ sb $t6, 9($sp) -/* 0CF1E0 800CE5E0 A3AF000A */ sb $t7, 0xa($sp) -/* 0CF1E4 800CE5E4 A3B8000B */ sb $t8, 0xb($sp) -/* 0CF1E8 800CE5E8 1B200013 */ blez $t9, .L800CE638 -/* 0CF1EC 800CE5EC AFA00000 */ sw $zero, ($sp) -.L800CE5F0: -/* 0CF1F0 800CE5F0 27A90004 */ addiu $t1, $sp, 4 -/* 0CF1F4 800CE5F4 8D210000 */ lw $at, ($t1) -/* 0CF1F8 800CE5F8 8FA8000C */ lw $t0, 0xc($sp) -/* 0CF1FC 800CE5FC 3C188019 */ lui $t8, %hi(_osContNumControllers) # $t8, 0x8019 -/* 0CF200 800CE600 A9010000 */ swl $at, ($t0) -/* 0CF204 800CE604 B9010003 */ swr $at, 3($t0) -/* 0CF208 800CE608 8D2B0004 */ lw $t3, 4($t1) -/* 0CF20C 800CE60C A90B0004 */ swl $t3, 4($t0) -/* 0CF210 800CE610 B90B0007 */ swr $t3, 7($t0) -/* 0CF214 800CE614 8FAE0000 */ lw $t6, ($sp) -/* 0CF218 800CE618 93186541 */ lbu $t8, %lo(_osContNumControllers)($t8) -/* 0CF21C 800CE61C 8FAC000C */ lw $t4, 0xc($sp) -/* 0CF220 800CE620 25CF0001 */ addiu $t7, $t6, 1 -/* 0CF224 800CE624 01F8082A */ slt $at, $t7, $t8 -/* 0CF228 800CE628 258D0008 */ addiu $t5, $t4, 8 -/* 0CF22C 800CE62C AFAF0000 */ sw $t7, ($sp) -/* 0CF230 800CE630 1420FFEF */ bnez $at, .L800CE5F0 -/* 0CF234 800CE634 AFAD000C */ sw $t5, 0xc($sp) -.L800CE638: -/* 0CF238 800CE638 8FAA000C */ lw $t2, 0xc($sp) -/* 0CF23C 800CE63C 241900FE */ li $t9, 254 -/* 0CF240 800CE640 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CF244 800CE644 03E00008 */ jr $ra -/* 0CF248 800CE648 A1590000 */ sb $t9, ($t2) - -glabel func_800CE64C -/* 0CF24C 800CE64C 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 -/* 0CF250 800CE650 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) -/* 0CF254 800CE654 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CF258 800CE658 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0CF25C 800CE65C 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0CF260 800CE660 A3A00007 */ sb $zero, 7($sp) -/* 0CF264 800CE664 AFAE0014 */ sw $t6, 0x14($sp) -/* 0CF268 800CE668 19E00028 */ blez $t7, .L800CE70C -/* 0CF26C 800CE66C AFA00008 */ sw $zero, 8($sp) -.L800CE670: -/* 0CF270 800CE670 8FB90014 */ lw $t9, 0x14($sp) -/* 0CF274 800CE674 27B8000C */ addiu $t8, $sp, 0xc -/* 0CF278 800CE678 8B210000 */ lwl $at, ($t9) -/* 0CF27C 800CE67C 9B210003 */ lwr $at, 3($t9) -/* 0CF280 800CE680 AF010000 */ sw $at, ($t8) -/* 0CF284 800CE684 8B290004 */ lwl $t1, 4($t9) -/* 0CF288 800CE688 9B290007 */ lwr $t1, 7($t9) -/* 0CF28C 800CE68C AF090004 */ sw $t1, 4($t8) -/* 0CF290 800CE690 93AA000E */ lbu $t2, 0xe($sp) -/* 0CF294 800CE694 314B00C0 */ andi $t3, $t2, 0xc0 -/* 0CF298 800CE698 000B6103 */ sra $t4, $t3, 4 -/* 0CF29C 800CE69C A0AC0003 */ sb $t4, 3($a1) -/* 0CF2A0 800CE6A0 90AD0003 */ lbu $t5, 3($a1) -/* 0CF2A4 800CE6A4 15A0000E */ bnez $t5, .L800CE6E0 -/* 0CF2A8 800CE6A8 00000000 */ nop -/* 0CF2AC 800CE6AC 93AE0011 */ lbu $t6, 0x11($sp) -/* 0CF2B0 800CE6B0 93A80010 */ lbu $t0, 0x10($sp) -/* 0CF2B4 800CE6B4 240B0001 */ li $t3, 1 -/* 0CF2B8 800CE6B8 000E7A00 */ sll $t7, $t6, 8 -/* 0CF2BC 800CE6BC 01E8C025 */ or $t8, $t7, $t0 -/* 0CF2C0 800CE6C0 A4B80000 */ sh $t8, ($a1) -/* 0CF2C4 800CE6C4 93B90012 */ lbu $t9, 0x12($sp) -/* 0CF2C8 800CE6C8 A0B90002 */ sb $t9, 2($a1) -/* 0CF2CC 800CE6CC 8FAA0008 */ lw $t2, 8($sp) -/* 0CF2D0 800CE6D0 93A90007 */ lbu $t1, 7($sp) -/* 0CF2D4 800CE6D4 014B6004 */ sllv $t4, $t3, $t2 -/* 0CF2D8 800CE6D8 012C6825 */ or $t5, $t1, $t4 -/* 0CF2DC 800CE6DC A3AD0007 */ sb $t5, 7($sp) -.L800CE6E0: -/* 0CF2E0 800CE6E0 8FAE0008 */ lw $t6, 8($sp) -/* 0CF2E4 800CE6E4 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 -/* 0CF2E8 800CE6E8 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) -/* 0CF2EC 800CE6EC 8FA80014 */ lw $t0, 0x14($sp) -/* 0CF2F0 800CE6F0 25CF0001 */ addiu $t7, $t6, 1 -/* 0CF2F4 800CE6F4 01F9082A */ slt $at, $t7, $t9 -/* 0CF2F8 800CE6F8 25180008 */ addiu $t8, $t0, 8 -/* 0CF2FC 800CE6FC AFB80014 */ sw $t8, 0x14($sp) -/* 0CF300 800CE700 AFAF0008 */ sw $t7, 8($sp) -/* 0CF304 800CE704 1420FFDA */ bnez $at, .L800CE670 -/* 0CF308 800CE708 24A50004 */ addiu $a1, $a1, 4 -.L800CE70C: -/* 0CF30C 800CE70C 93AB0007 */ lbu $t3, 7($sp) -/* 0CF310 800CE710 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CF314 800CE714 03E00008 */ jr $ra -/* 0CF318 800CE718 A08B0000 */ sb $t3, ($a0) - -/* 0CF31C 800CE71C 00000000 */ nop -glabel func_800CE720 -/* 0CF320 800CE720 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CF324 800CE724 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF328 800CE728 AFA40020 */ sw $a0, 0x20($sp) -/* 0CF32C 800CE72C AFA50024 */ sw $a1, 0x24($sp) -/* 0CF330 800CE730 AFA60028 */ sw $a2, 0x28($sp) -/* 0CF334 800CE734 0C034EE8 */ jal __osSiGetAccess -/* 0CF338 800CE738 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CF33C 800CE73C 8FA40020 */ lw $a0, 0x20($sp) -/* 0CF340 800CE740 0C0339F5 */ jal func_800CE7D4 -/* 0CF344 800CE744 8FA50028 */ lw $a1, 0x28($sp) -/* 0CF348 800CE748 0C034EF9 */ jal __osSiRelAccess -/* 0CF34C 800CE74C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF350 800CE750 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CF354 800CE754 11C00003 */ beqz $t6, .L800CE764 -/* 0CF358 800CE758 00000000 */ nop -/* 0CF35C 800CE75C 10000019 */ b .L800CE7C4 -/* 0CF360 800CE760 01C01025 */ move $v0, $t6 -.L800CE764: -/* 0CF364 800CE764 8FAF0020 */ lw $t7, 0x20($sp) -/* 0CF368 800CE768 8FB80024 */ lw $t8, 0x24($sp) -/* 0CF36C 800CE76C AF0F0004 */ sw $t7, 4($t8) -/* 0CF370 800CE770 8FA80024 */ lw $t0, 0x24($sp) -/* 0CF374 800CE774 8FB90028 */ lw $t9, 0x28($sp) -/* 0CF378 800CE778 AD190008 */ sw $t9, 8($t0) -/* 0CF37C 800CE77C 8FA90024 */ lw $t1, 0x24($sp) -/* 0CF380 800CE780 AD200000 */ sw $zero, ($t1) -/* 0CF384 800CE784 0C0352D9 */ jal __osGetId -/* 0CF388 800CE788 8FA40024 */ lw $a0, 0x24($sp) -/* 0CF38C 800CE78C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF390 800CE790 8FAA001C */ lw $t2, 0x1c($sp) -/* 0CF394 800CE794 11400003 */ beqz $t2, .L800CE7A4 -/* 0CF398 800CE798 00000000 */ nop -/* 0CF39C 800CE79C 10000009 */ b .L800CE7C4 -/* 0CF3A0 800CE7A0 01401025 */ move $v0, $t2 -.L800CE7A4: -/* 0CF3A4 800CE7A4 0C035494 */ jal osPfsChecker -/* 0CF3A8 800CE7A8 8FA40024 */ lw $a0, 0x24($sp) -/* 0CF3AC 800CE7AC 8FAB0024 */ lw $t3, 0x24($sp) -/* 0CF3B0 800CE7B0 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF3B4 800CE7B4 8D6C0000 */ lw $t4, ($t3) -/* 0CF3B8 800CE7B8 358D0001 */ ori $t5, $t4, 1 -/* 0CF3BC 800CE7BC AD6D0000 */ sw $t5, ($t3) -/* 0CF3C0 800CE7C0 8FA2001C */ lw $v0, 0x1c($sp) -.L800CE7C4: -/* 0CF3C4 800CE7C4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF3C8 800CE7C8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CF3CC 800CE7CC 03E00008 */ jr $ra -/* 0CF3D0 800CE7D0 00000000 */ nop - -glabel func_800CE7D4 -/* 0CF3D4 800CE7D4 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CF3D8 800CE7D8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF3DC 800CE7DC AFA40038 */ sw $a0, 0x38($sp) -/* 0CF3E0 800CE7E0 AFA5003C */ sw $a1, 0x3c($sp) -/* 0CF3E4 800CE7E4 AFA00034 */ sw $zero, 0x34($sp) -/* 0CF3E8 800CE7E8 0C033954 */ jal func_800CE550 -/* 0CF3EC 800CE7EC 00002025 */ move $a0, $zero -/* 0CF3F0 800CE7F0 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0CF3F4 800CE7F4 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0CF3F8 800CE7F8 0C034EA8 */ jal __osSiRawStartDma -/* 0CF3FC 800CE7FC 24040001 */ li $a0, 1 -/* 0CF400 800CE800 AFA20034 */ sw $v0, 0x34($sp) -/* 0CF404 800CE804 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF408 800CE808 27A50030 */ addiu $a1, $sp, 0x30 -/* 0CF40C 800CE80C 0C0335D4 */ jal osRecvMesg -/* 0CF410 800CE810 24060001 */ li $a2, 1 -/* 0CF414 800CE814 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0CF418 800CE818 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0CF41C 800CE81C 0C034EA8 */ jal __osSiRawStartDma -/* 0CF420 800CE820 00002025 */ move $a0, $zero -/* 0CF424 800CE824 AFA20034 */ sw $v0, 0x34($sp) -/* 0CF428 800CE828 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF42C 800CE82C 27A50030 */ addiu $a1, $sp, 0x30 -/* 0CF430 800CE830 0C0335D4 */ jal osRecvMesg -/* 0CF434 800CE834 24060001 */ li $a2, 1 -/* 0CF438 800CE838 27A4002F */ addiu $a0, $sp, 0x2f -/* 0CF43C 800CE83C 0C033993 */ jal func_800CE64C -/* 0CF440 800CE840 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CF444 800CE844 8FAE003C */ lw $t6, 0x3c($sp) -/* 0CF448 800CE848 000E7880 */ sll $t7, $t6, 2 -/* 0CF44C 800CE84C 03AFC021 */ addu $t8, $sp, $t7 -/* 0CF450 800CE850 9318001E */ lbu $t8, 0x1e($t8) -/* 0CF454 800CE854 33190001 */ andi $t9, $t8, 1 -/* 0CF458 800CE858 13200006 */ beqz $t9, .L800CE874 -/* 0CF45C 800CE85C 00000000 */ nop -/* 0CF460 800CE860 33080002 */ andi $t0, $t8, 2 -/* 0CF464 800CE864 11000003 */ beqz $t0, .L800CE874 -/* 0CF468 800CE868 00000000 */ nop -/* 0CF46C 800CE86C 10000018 */ b .L800CE8D0 -/* 0CF470 800CE870 24020002 */ li $v0, 2 -.L800CE874: -/* 0CF474 800CE874 8FA9003C */ lw $t1, 0x3c($sp) -/* 0CF478 800CE878 27AB001C */ addiu $t3, $sp, 0x1c -/* 0CF47C 800CE87C 00095080 */ sll $t2, $t1, 2 -/* 0CF480 800CE880 014B6021 */ addu $t4, $t2, $t3 -/* 0CF484 800CE884 918D0003 */ lbu $t5, 3($t4) -/* 0CF488 800CE888 15A00005 */ bnez $t5, .L800CE8A0 -/* 0CF48C 800CE88C 00000000 */ nop -/* 0CF490 800CE890 918E0002 */ lbu $t6, 2($t4) -/* 0CF494 800CE894 31CF0001 */ andi $t7, $t6, 1 -/* 0CF498 800CE898 15E00003 */ bnez $t7, .L800CE8A8 -/* 0CF49C 800CE89C 00000000 */ nop -.L800CE8A0: -/* 0CF4A0 800CE8A0 1000000B */ b .L800CE8D0 -/* 0CF4A4 800CE8A4 24020001 */ li $v0, 1 -.L800CE8A8: -/* 0CF4A8 800CE8A8 8FB9003C */ lw $t9, 0x3c($sp) -/* 0CF4AC 800CE8AC 0019C080 */ sll $t8, $t9, 2 -/* 0CF4B0 800CE8B0 03B84021 */ addu $t0, $sp, $t8 -/* 0CF4B4 800CE8B4 9108001E */ lbu $t0, 0x1e($t0) -/* 0CF4B8 800CE8B8 31090004 */ andi $t1, $t0, 4 -/* 0CF4BC 800CE8BC 11200003 */ beqz $t1, .L800CE8CC -/* 0CF4C0 800CE8C0 00000000 */ nop -/* 0CF4C4 800CE8C4 10000002 */ b .L800CE8D0 -/* 0CF4C8 800CE8C8 24020004 */ li $v0, 4 -.L800CE8CC: -/* 0CF4CC 800CE8CC 8FA20034 */ lw $v0, 0x34($sp) -.L800CE8D0: -/* 0CF4D0 800CE8D0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF4D4 800CE8D4 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CF4D8 800CE8D8 03E00008 */ jr $ra -/* 0CF4DC 800CE8DC 00000000 */ nop - -glabel osPfsNumFiles -/* 0CF4E0 800CE8E0 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0CF4E4 800CE8E4 AFA40048 */ sw $a0, 0x48($sp) -/* 0CF4E8 800CE8E8 8FAE0048 */ lw $t6, 0x48($sp) -/* 0CF4EC 800CE8EC AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF4F0 800CE8F0 AFA5004C */ sw $a1, 0x4c($sp) -/* 0CF4F4 800CE8F4 AFA60050 */ sw $a2, 0x50($sp) -/* 0CF4F8 800CE8F8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CF4FC 800CE8FC 8DCF0000 */ lw $t7, ($t6) -/* 0CF500 800CE900 31F80001 */ andi $t8, $t7, 1 -/* 0CF504 800CE904 17000003 */ bnez $t8, .L800CE914 -/* 0CF508 800CE908 00000000 */ nop -/* 0CF50C 800CE90C 10000041 */ b .L800CEA14 -/* 0CF510 800CE910 24020005 */ li $v0, 5 -.L800CE914: -/* 0CF514 800CE914 0C035370 */ jal __osCheckId -/* 0CF518 800CE918 8FA40048 */ lw $a0, 0x48($sp) -/* 0CF51C 800CE91C 24010002 */ li $at, 2 -/* 0CF520 800CE920 14410003 */ bne $v0, $at, .L800CE930 -/* 0CF524 800CE924 00000000 */ nop -/* 0CF528 800CE928 1000003A */ b .L800CEA14 -/* 0CF52C 800CE92C 24020002 */ li $v0, 2 -.L800CE930: -/* 0CF530 800CE930 8FB90048 */ lw $t9, 0x48($sp) -/* 0CF534 800CE934 93280065 */ lbu $t0, 0x65($t9) -/* 0CF538 800CE938 1100000A */ beqz $t0, .L800CE964 -/* 0CF53C 800CE93C 00000000 */ nop -/* 0CF540 800CE940 A3200065 */ sb $zero, 0x65($t9) -/* 0CF544 800CE944 0C035477 */ jal __osPfsSelectBank -/* 0CF548 800CE948 8FA40048 */ lw $a0, 0x48($sp) -/* 0CF54C 800CE94C AFA20040 */ sw $v0, 0x40($sp) -/* 0CF550 800CE950 8FA90040 */ lw $t1, 0x40($sp) -/* 0CF554 800CE954 11200003 */ beqz $t1, .L800CE964 -/* 0CF558 800CE958 00000000 */ nop -/* 0CF55C 800CE95C 1000002D */ b .L800CEA14 -/* 0CF560 800CE960 01201025 */ move $v0, $t1 -.L800CE964: -/* 0CF564 800CE964 8FAA0048 */ lw $t2, 0x48($sp) -/* 0CF568 800CE968 AFA00044 */ sw $zero, 0x44($sp) -/* 0CF56C 800CE96C 8D4B0050 */ lw $t3, 0x50($t2) -/* 0CF570 800CE970 19600020 */ blez $t3, .L800CE9F4 -/* 0CF574 800CE974 00000000 */ nop -.L800CE978: -/* 0CF578 800CE978 8FAC0048 */ lw $t4, 0x48($sp) -/* 0CF57C 800CE97C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0CF580 800CE980 27A70020 */ addiu $a3, $sp, 0x20 -/* 0CF584 800CE984 8D8D005C */ lw $t5, 0x5c($t4) -/* 0CF588 800CE988 8D840004 */ lw $a0, 4($t4) -/* 0CF58C 800CE98C 8D850008 */ lw $a1, 8($t4) -/* 0CF590 800CE990 0C03572C */ jal __osContRamRead -/* 0CF594 800CE994 01AE3021 */ addu $a2, $t5, $t6 -/* 0CF598 800CE998 AFA20040 */ sw $v0, 0x40($sp) -/* 0CF59C 800CE99C 8FAF0040 */ lw $t7, 0x40($sp) -/* 0CF5A0 800CE9A0 11E00003 */ beqz $t7, .L800CE9B0 -/* 0CF5A4 800CE9A4 00000000 */ nop -/* 0CF5A8 800CE9A8 1000001A */ b .L800CEA14 -/* 0CF5AC 800CE9AC 01E01025 */ move $v0, $t7 -.L800CE9B0: -/* 0CF5B0 800CE9B0 97B80024 */ lhu $t8, 0x24($sp) -/* 0CF5B4 800CE9B4 13000007 */ beqz $t8, .L800CE9D4 -/* 0CF5B8 800CE9B8 00000000 */ nop -/* 0CF5BC 800CE9BC 8FA80020 */ lw $t0, 0x20($sp) -/* 0CF5C0 800CE9C0 11000004 */ beqz $t0, .L800CE9D4 -/* 0CF5C4 800CE9C4 00000000 */ nop -/* 0CF5C8 800CE9C8 8FB9001C */ lw $t9, 0x1c($sp) -/* 0CF5CC 800CE9CC 27290001 */ addiu $t1, $t9, 1 -/* 0CF5D0 800CE9D0 AFA9001C */ sw $t1, 0x1c($sp) -.L800CE9D4: -/* 0CF5D4 800CE9D4 8FAA0044 */ lw $t2, 0x44($sp) -/* 0CF5D8 800CE9D8 8FAC0048 */ lw $t4, 0x48($sp) -/* 0CF5DC 800CE9DC 254B0001 */ addiu $t3, $t2, 1 -/* 0CF5E0 800CE9E0 AFAB0044 */ sw $t3, 0x44($sp) -/* 0CF5E4 800CE9E4 8D8D0050 */ lw $t5, 0x50($t4) -/* 0CF5E8 800CE9E8 016D082A */ slt $at, $t3, $t5 -/* 0CF5EC 800CE9EC 1420FFE2 */ bnez $at, .L800CE978 -/* 0CF5F0 800CE9F0 00000000 */ nop -.L800CE9F4: -/* 0CF5F4 800CE9F4 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CF5F8 800CE9F8 8FAF0050 */ lw $t7, 0x50($sp) -/* 0CF5FC 800CE9FC 00001025 */ move $v0, $zero -/* 0CF600 800CEA00 ADEE0000 */ sw $t6, ($t7) -/* 0CF604 800CEA04 8FB80048 */ lw $t8, 0x48($sp) -/* 0CF608 800CEA08 8FB9004C */ lw $t9, 0x4c($sp) -/* 0CF60C 800CEA0C 8F080050 */ lw $t0, 0x50($t8) -/* 0CF610 800CEA10 AF280000 */ sw $t0, ($t9) -.L800CEA14: -/* 0CF614 800CEA14 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF618 800CEA18 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0CF61C 800CEA1C 03E00008 */ jr $ra -/* 0CF620 800CEA20 00000000 */ nop - -/* 0CF624 800CEA24 00000000 */ nop -/* 0CF628 800CEA28 00000000 */ nop -/* 0CF62C 800CEA2C 00000000 */ nop -glabel osPfsFileState -/* 0CF630 800CEA30 27BDFEB0 */ addiu $sp, $sp, -0x150 -/* 0CF634 800CEA34 AFA40150 */ sw $a0, 0x150($sp) -/* 0CF638 800CEA38 8FAF0150 */ lw $t7, 0x150($sp) -/* 0CF63C 800CEA3C AFA50154 */ sw $a1, 0x154($sp) -/* 0CF640 800CEA40 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF644 800CEA44 AFA60158 */ sw $a2, 0x158($sp) -/* 0CF648 800CEA48 8FAE0154 */ lw $t6, 0x154($sp) -/* 0CF64C 800CEA4C 8DF80050 */ lw $t8, 0x50($t7) -/* 0CF650 800CEA50 01D8082A */ slt $at, $t6, $t8 -/* 0CF654 800CEA54 10200003 */ beqz $at, .L800CEA64 -/* 0CF658 800CEA58 00000000 */ nop -/* 0CF65C 800CEA5C 05C10003 */ bgez $t6, .L800CEA6C -/* 0CF660 800CEA60 00000000 */ nop -.L800CEA64: -/* 0CF664 800CEA64 100000AA */ b .L800CED10 -/* 0CF668 800CEA68 24020005 */ li $v0, 5 -.L800CEA6C: -/* 0CF66C 800CEA6C 8FB90150 */ lw $t9, 0x150($sp) -/* 0CF670 800CEA70 8F280000 */ lw $t0, ($t9) -/* 0CF674 800CEA74 31090001 */ andi $t1, $t0, 1 -/* 0CF678 800CEA78 15200003 */ bnez $t1, .L800CEA88 -/* 0CF67C 800CEA7C 00000000 */ nop -/* 0CF680 800CEA80 100000A3 */ b .L800CED10 -/* 0CF684 800CEA84 24020005 */ li $v0, 5 -.L800CEA88: -/* 0CF688 800CEA88 0C035370 */ jal __osCheckId -/* 0CF68C 800CEA8C 8FA40150 */ lw $a0, 0x150($sp) -/* 0CF690 800CEA90 24010002 */ li $at, 2 -/* 0CF694 800CEA94 14410003 */ bne $v0, $at, .L800CEAA4 -/* 0CF698 800CEA98 00000000 */ nop -/* 0CF69C 800CEA9C 1000009C */ b .L800CED10 -/* 0CF6A0 800CEAA0 24020002 */ li $v0, 2 -.L800CEAA4: -/* 0CF6A4 800CEAA4 8FAA0150 */ lw $t2, 0x150($sp) -/* 0CF6A8 800CEAA8 914B0065 */ lbu $t3, 0x65($t2) -/* 0CF6AC 800CEAAC 1160000A */ beqz $t3, .L800CEAD8 -/* 0CF6B0 800CEAB0 00000000 */ nop -/* 0CF6B4 800CEAB4 A1400065 */ sb $zero, 0x65($t2) -/* 0CF6B8 800CEAB8 0C035477 */ jal __osPfsSelectBank -/* 0CF6BC 800CEABC 8FA40150 */ lw $a0, 0x150($sp) -/* 0CF6C0 800CEAC0 AFA2014C */ sw $v0, 0x14c($sp) -/* 0CF6C4 800CEAC4 8FAC014C */ lw $t4, 0x14c($sp) -/* 0CF6C8 800CEAC8 11800003 */ beqz $t4, .L800CEAD8 -/* 0CF6CC 800CEACC 00000000 */ nop -/* 0CF6D0 800CEAD0 1000008F */ b .L800CED10 -/* 0CF6D4 800CEAD4 01801025 */ move $v0, $t4 -.L800CEAD8: -/* 0CF6D8 800CEAD8 8FAD0150 */ lw $t5, 0x150($sp) -/* 0CF6DC 800CEADC 8FB80154 */ lw $t8, 0x154($sp) -/* 0CF6E0 800CEAE0 27A70028 */ addiu $a3, $sp, 0x28 -/* 0CF6E4 800CEAE4 8DAF005C */ lw $t7, 0x5c($t5) -/* 0CF6E8 800CEAE8 8DA40004 */ lw $a0, 4($t5) -/* 0CF6EC 800CEAEC 8DA50008 */ lw $a1, 8($t5) -/* 0CF6F0 800CEAF0 0C03572C */ jal __osContRamRead -/* 0CF6F4 800CEAF4 01F83021 */ addu $a2, $t7, $t8 -/* 0CF6F8 800CEAF8 AFA2014C */ sw $v0, 0x14c($sp) -/* 0CF6FC 800CEAFC 8FAE014C */ lw $t6, 0x14c($sp) -/* 0CF700 800CEB00 11C00003 */ beqz $t6, .L800CEB10 -/* 0CF704 800CEB04 00000000 */ nop -/* 0CF708 800CEB08 10000081 */ b .L800CED10 -/* 0CF70C 800CEB0C 01C01025 */ move $v0, $t6 -.L800CEB10: -/* 0CF710 800CEB10 97B9002C */ lhu $t9, 0x2c($sp) -/* 0CF714 800CEB14 13200004 */ beqz $t9, .L800CEB28 -/* 0CF718 800CEB18 00000000 */ nop -/* 0CF71C 800CEB1C 8FA80028 */ lw $t0, 0x28($sp) -/* 0CF720 800CEB20 15000003 */ bnez $t0, .L800CEB30 -/* 0CF724 800CEB24 00000000 */ nop -.L800CEB28: -/* 0CF728 800CEB28 10000079 */ b .L800CED10 -/* 0CF72C 800CEB2C 24020005 */ li $v0, 5 -.L800CEB30: -/* 0CF730 800CEB30 8FAB0150 */ lw $t3, 0x150($sp) -/* 0CF734 800CEB34 97A9002E */ lhu $t1, 0x2e($sp) -/* 0CF738 800CEB38 8D6A0060 */ lw $t2, 0x60($t3) -/* 0CF73C 800CEB3C 012A082A */ slt $at, $t1, $t2 -/* 0CF740 800CEB40 10200003 */ beqz $at, .L800CEB50 -/* 0CF744 800CEB44 00000000 */ nop -/* 0CF748 800CEB48 10000071 */ b .L800CED10 -/* 0CF74C 800CEB4C 24020003 */ li $v0, 3 -.L800CEB50: -/* 0CF750 800CEB50 93AC002F */ lbu $t4, 0x2f($sp) -/* 0CF754 800CEB54 93AD002E */ lbu $t5, 0x2e($sp) -/* 0CF758 800CEB58 8FAF0150 */ lw $t7, 0x150($sp) -/* 0CF75C 800CEB5C AFA00148 */ sw $zero, 0x148($sp) -/* 0CF760 800CEB60 A3AC001E */ sb $t4, 0x1e($sp) -/* 0CF764 800CEB64 A3AD001F */ sb $t5, 0x1f($sp) -/* 0CF768 800CEB68 91F80064 */ lbu $t8, 0x64($t7) -/* 0CF76C 800CEB6C 01B8082A */ slt $at, $t5, $t8 -/* 0CF770 800CEB70 1020003E */ beqz $at, .L800CEC6C -/* 0CF774 800CEB74 00000000 */ nop -.L800CEB78: -/* 0CF778 800CEB78 8FA40150 */ lw $a0, 0x150($sp) -/* 0CF77C 800CEB7C 27A50048 */ addiu $a1, $sp, 0x48 -/* 0CF780 800CEB80 00003025 */ move $a2, $zero -/* 0CF784 800CEB84 0C0353AF */ jal __osPfsRWInode -/* 0CF788 800CEB88 93A7001F */ lbu $a3, 0x1f($sp) -/* 0CF78C 800CEB8C AFA2014C */ sw $v0, 0x14c($sp) -/* 0CF790 800CEB90 8FAE014C */ lw $t6, 0x14c($sp) -/* 0CF794 800CEB94 11C00003 */ beqz $t6, .L800CEBA4 -/* 0CF798 800CEB98 00000000 */ nop -/* 0CF79C 800CEB9C 1000005C */ b .L800CED10 -/* 0CF7A0 800CEBA0 01C01025 */ move $v0, $t6 -.L800CEBA4: -/* 0CF7A4 800CEBA4 93A8001E */ lbu $t0, 0x1e($sp) -/* 0CF7A8 800CEBA8 27A90048 */ addiu $t1, $sp, 0x48 -/* 0CF7AC 800CEBAC 27B90024 */ addiu $t9, $sp, 0x24 -/* 0CF7B0 800CEBB0 00085840 */ sll $t3, $t0, 1 -/* 0CF7B4 800CEBB4 01695021 */ addu $t2, $t3, $t1 -/* 0CF7B8 800CEBB8 95410000 */ lhu $at, ($t2) -/* 0CF7BC 800CEBBC A7210000 */ sh $at, ($t9) -/* 0CF7C0 800CEBC0 8FAD0148 */ lw $t5, 0x148($sp) -/* 0CF7C4 800CEBC4 8FA80150 */ lw $t0, 0x150($sp) -/* 0CF7C8 800CEBC8 97AE0024 */ lhu $t6, 0x24($sp) -/* 0CF7CC 800CEBCC 25B80001 */ addiu $t8, $t5, 1 -/* 0CF7D0 800CEBD0 AFB80148 */ sw $t8, 0x148($sp) -/* 0CF7D4 800CEBD4 8D0B0060 */ lw $t3, 0x60($t0) -/* 0CF7D8 800CEBD8 01CB082A */ slt $at, $t6, $t3 -/* 0CF7DC 800CEBDC 14200019 */ bnez $at, .L800CEC44 -/* 0CF7E0 800CEBE0 00000000 */ nop -.L800CEBE4: -/* 0CF7E4 800CEBE4 8FA90148 */ lw $t1, 0x148($sp) -/* 0CF7E8 800CEBE8 93AA0025 */ lbu $t2, 0x25($sp) -/* 0CF7EC 800CEBEC 27AD0048 */ addiu $t5, $sp, 0x48 -/* 0CF7F0 800CEBF0 252C0001 */ addiu $t4, $t1, 1 -/* 0CF7F4 800CEBF4 000A7840 */ sll $t7, $t2, 1 -/* 0CF7F8 800CEBF8 AFAC0148 */ sw $t4, 0x148($sp) -/* 0CF7FC 800CEBFC 01EDC021 */ addu $t8, $t7, $t5 -/* 0CF800 800CEC00 97010000 */ lhu $at, ($t8) -/* 0CF804 800CEC04 27B90024 */ addiu $t9, $sp, 0x24 -/* 0CF808 800CEC08 A7210000 */ sh $at, ($t9) -/* 0CF80C 800CEC0C 93AC001F */ lbu $t4, 0x1f($sp) -/* 0CF810 800CEC10 93A90024 */ lbu $t1, 0x24($sp) -/* 0CF814 800CEC14 112C0005 */ beq $t1, $t4, .L800CEC2C -/* 0CF818 800CEC18 00000000 */ nop -/* 0CF81C 800CEC1C 93AA0025 */ lbu $t2, 0x25($sp) -/* 0CF820 800CEC20 A3A9001F */ sb $t1, 0x1f($sp) -/* 0CF824 800CEC24 10000007 */ b .L800CEC44 -/* 0CF828 800CEC28 A3AA001E */ sb $t2, 0x1e($sp) -.L800CEC2C: -/* 0CF82C 800CEC2C 8FAD0150 */ lw $t5, 0x150($sp) -/* 0CF830 800CEC30 97AF0024 */ lhu $t7, 0x24($sp) -/* 0CF834 800CEC34 8DAE0060 */ lw $t6, 0x60($t5) -/* 0CF838 800CEC38 01EE082A */ slt $at, $t7, $t6 -/* 0CF83C 800CEC3C 1020FFE9 */ beqz $at, .L800CEBE4 -/* 0CF840 800CEC40 00000000 */ nop -.L800CEC44: -/* 0CF844 800CEC44 97A80024 */ lhu $t0, 0x24($sp) -/* 0CF848 800CEC48 24010001 */ li $at, 1 -/* 0CF84C 800CEC4C 11010007 */ beq $t0, $at, .L800CEC6C -/* 0CF850 800CEC50 00000000 */ nop -/* 0CF854 800CEC54 8FB80150 */ lw $t8, 0x150($sp) -/* 0CF858 800CEC58 93B9001F */ lbu $t9, 0x1f($sp) -/* 0CF85C 800CEC5C 930B0064 */ lbu $t3, 0x64($t8) -/* 0CF860 800CEC60 032B082A */ slt $at, $t9, $t3 -/* 0CF864 800CEC64 1420FFC4 */ bnez $at, .L800CEB78 -/* 0CF868 800CEC68 00000000 */ nop -.L800CEC6C: -/* 0CF86C 800CEC6C 97AC0024 */ lhu $t4, 0x24($sp) -/* 0CF870 800CEC70 24010001 */ li $at, 1 -/* 0CF874 800CEC74 11810003 */ beq $t4, $at, .L800CEC84 -/* 0CF878 800CEC78 00000000 */ nop -/* 0CF87C 800CEC7C 10000024 */ b .L800CED10 -/* 0CF880 800CEC80 24020003 */ li $v0, 3 -.L800CEC84: -/* 0CF884 800CEC84 8FA90148 */ lw $t1, 0x148($sp) -/* 0CF888 800CEC88 8FAD0158 */ lw $t5, 0x158($sp) -/* 0CF88C 800CEC8C 00095200 */ sll $t2, $t1, 8 -/* 0CF890 800CEC90 ADAA0000 */ sw $t2, ($t5) -/* 0CF894 800CEC94 8FAE0158 */ lw $t6, 0x158($sp) -/* 0CF898 800CEC98 97AF002C */ lhu $t7, 0x2c($sp) -/* 0CF89C 800CEC9C A5CF0008 */ sh $t7, 8($t6) -/* 0CF8A0 800CECA0 8FB80158 */ lw $t8, 0x158($sp) -/* 0CF8A4 800CECA4 8FA80028 */ lw $t0, 0x28($sp) -/* 0CF8A8 800CECA8 AF080004 */ sw $t0, 4($t8) -/* 0CF8AC 800CECAC AFA00020 */ sw $zero, 0x20($sp) -.L800CECB0: -/* 0CF8B0 800CECB0 8FB90020 */ lw $t9, 0x20($sp) -/* 0CF8B4 800CECB4 8FAC0158 */ lw $t4, 0x158($sp) -/* 0CF8B8 800CECB8 03B95821 */ addu $t3, $sp, $t9 -/* 0CF8BC 800CECBC 916B0038 */ lbu $t3, 0x38($t3) -/* 0CF8C0 800CECC0 01994821 */ addu $t1, $t4, $t9 -/* 0CF8C4 800CECC4 A12B000E */ sb $t3, 0xe($t1) -/* 0CF8C8 800CECC8 8FAA0020 */ lw $t2, 0x20($sp) -/* 0CF8CC 800CECCC 254D0001 */ addiu $t5, $t2, 1 -/* 0CF8D0 800CECD0 29A10010 */ slti $at, $t5, 0x10 -/* 0CF8D4 800CECD4 1420FFF6 */ bnez $at, .L800CECB0 -/* 0CF8D8 800CECD8 AFAD0020 */ sw $t5, 0x20($sp) -/* 0CF8DC 800CECDC AFA00020 */ sw $zero, 0x20($sp) -.L800CECE0: -/* 0CF8E0 800CECE0 8FAF0020 */ lw $t7, 0x20($sp) -/* 0CF8E4 800CECE4 8FA80158 */ lw $t0, 0x158($sp) -/* 0CF8E8 800CECE8 03AF7021 */ addu $t6, $sp, $t7 -/* 0CF8EC 800CECEC 91CE0034 */ lbu $t6, 0x34($t6) -/* 0CF8F0 800CECF0 010FC021 */ addu $t8, $t0, $t7 -/* 0CF8F4 800CECF4 A30E000A */ sb $t6, 0xa($t8) -/* 0CF8F8 800CECF8 8FAC0020 */ lw $t4, 0x20($sp) -/* 0CF8FC 800CECFC 25990001 */ addiu $t9, $t4, 1 -/* 0CF900 800CED00 2B210004 */ slti $at, $t9, 4 -/* 0CF904 800CED04 1420FFF6 */ bnez $at, .L800CECE0 -/* 0CF908 800CED08 AFB90020 */ sw $t9, 0x20($sp) -/* 0CF90C 800CED0C 00001025 */ move $v0, $zero -.L800CED10: -/* 0CF910 800CED10 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF914 800CED14 27BD0150 */ addiu $sp, $sp, 0x150 -/* 0CF918 800CED18 03E00008 */ jr $ra -/* 0CF91C 800CED1C 00000000 */ nop - -glabel osPfsFreeBlocks -/* 0CF920 800CED20 27BDFED0 */ addiu $sp, $sp, -0x130 -/* 0CF924 800CED24 AFA40130 */ sw $a0, 0x130($sp) -/* 0CF928 800CED28 8FAE0130 */ lw $t6, 0x130($sp) -/* 0CF92C 800CED2C AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF930 800CED30 AFA50134 */ sw $a1, 0x134($sp) -/* 0CF934 800CED34 AFA00128 */ sw $zero, 0x128($sp) -/* 0CF938 800CED38 AFA00024 */ sw $zero, 0x24($sp) -/* 0CF93C 800CED3C 8DCF0000 */ lw $t7, ($t6) -/* 0CF940 800CED40 31F80001 */ andi $t8, $t7, 1 -/* 0CF944 800CED44 17000003 */ bnez $t8, .L800CED54 -/* 0CF948 800CED48 00000000 */ nop -/* 0CF94C 800CED4C 10000043 */ b .L800CEE5C -/* 0CF950 800CED50 24020005 */ li $v0, 5 -.L800CED54: -/* 0CF954 800CED54 0C035370 */ jal __osCheckId -/* 0CF958 800CED58 8FA40130 */ lw $a0, 0x130($sp) -/* 0CF95C 800CED5C 24010002 */ li $at, 2 -/* 0CF960 800CED60 14410003 */ bne $v0, $at, .L800CED70 -/* 0CF964 800CED64 00000000 */ nop -/* 0CF968 800CED68 1000003C */ b .L800CEE5C -/* 0CF96C 800CED6C 24020002 */ li $v0, 2 -.L800CED70: -/* 0CF970 800CED70 8FB90130 */ lw $t9, 0x130($sp) -/* 0CF974 800CED74 A3A00023 */ sb $zero, 0x23($sp) -/* 0CF978 800CED78 93280064 */ lbu $t0, 0x64($t9) -/* 0CF97C 800CED7C 19000031 */ blez $t0, .L800CEE44 -/* 0CF980 800CED80 00000000 */ nop -.L800CED84: -/* 0CF984 800CED84 8FA40130 */ lw $a0, 0x130($sp) -/* 0CF988 800CED88 27A50028 */ addiu $a1, $sp, 0x28 -/* 0CF98C 800CED8C 00003025 */ move $a2, $zero -/* 0CF990 800CED90 0C0353AF */ jal __osPfsRWInode -/* 0CF994 800CED94 93A70023 */ lbu $a3, 0x23($sp) -/* 0CF998 800CED98 AFA20024 */ sw $v0, 0x24($sp) -/* 0CF99C 800CED9C 8FA90024 */ lw $t1, 0x24($sp) -/* 0CF9A0 800CEDA0 11200003 */ beqz $t1, .L800CEDB0 -/* 0CF9A4 800CEDA4 00000000 */ nop -/* 0CF9A8 800CEDA8 1000002C */ b .L800CEE5C -/* 0CF9AC 800CEDAC 01201025 */ move $v0, $t1 -.L800CEDB0: -/* 0CF9B0 800CEDB0 93AA0023 */ lbu $t2, 0x23($sp) -/* 0CF9B4 800CEDB4 19400004 */ blez $t2, .L800CEDC8 -/* 0CF9B8 800CEDB8 00000000 */ nop -/* 0CF9BC 800CEDBC 240B0001 */ li $t3, 1 -/* 0CF9C0 800CEDC0 10000004 */ b .L800CEDD4 -/* 0CF9C4 800CEDC4 AFAB001C */ sw $t3, 0x1c($sp) -.L800CEDC8: -/* 0CF9C8 800CEDC8 8FAC0130 */ lw $t4, 0x130($sp) -/* 0CF9CC 800CEDCC 8D8D0060 */ lw $t5, 0x60($t4) -/* 0CF9D0 800CEDD0 AFAD001C */ sw $t5, 0x1c($sp) -.L800CEDD4: -/* 0CF9D4 800CEDD4 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CF9D8 800CEDD8 29C10080 */ slti $at, $t6, 0x80 -/* 0CF9DC 800CEDDC 10200010 */ beqz $at, .L800CEE20 -/* 0CF9E0 800CEDE0 AFAE012C */ sw $t6, 0x12c($sp) -.L800CEDE4: -/* 0CF9E4 800CEDE4 8FAF012C */ lw $t7, 0x12c($sp) -/* 0CF9E8 800CEDE8 24010003 */ li $at, 3 -/* 0CF9EC 800CEDEC 000FC040 */ sll $t8, $t7, 1 -/* 0CF9F0 800CEDF0 03B8C821 */ addu $t9, $sp, $t8 -/* 0CF9F4 800CEDF4 97390028 */ lhu $t9, 0x28($t9) -/* 0CF9F8 800CEDF8 17210004 */ bne $t9, $at, .L800CEE0C -/* 0CF9FC 800CEDFC 00000000 */ nop -/* 0CFA00 800CEE00 8FA80128 */ lw $t0, 0x128($sp) -/* 0CFA04 800CEE04 25090001 */ addiu $t1, $t0, 1 -/* 0CFA08 800CEE08 AFA90128 */ sw $t1, 0x128($sp) -.L800CEE0C: -/* 0CFA0C 800CEE0C 8FAA012C */ lw $t2, 0x12c($sp) -/* 0CFA10 800CEE10 254B0001 */ addiu $t3, $t2, 1 -/* 0CFA14 800CEE14 29610080 */ slti $at, $t3, 0x80 -/* 0CFA18 800CEE18 1420FFF2 */ bnez $at, .L800CEDE4 -/* 0CFA1C 800CEE1C AFAB012C */ sw $t3, 0x12c($sp) -.L800CEE20: -/* 0CFA20 800CEE20 93AC0023 */ lbu $t4, 0x23($sp) -/* 0CFA24 800CEE24 8FAF0130 */ lw $t7, 0x130($sp) -/* 0CFA28 800CEE28 258D0001 */ addiu $t5, $t4, 1 -/* 0CFA2C 800CEE2C A3AD0023 */ sb $t5, 0x23($sp) -/* 0CFA30 800CEE30 91F80064 */ lbu $t8, 0x64($t7) -/* 0CFA34 800CEE34 31AE00FF */ andi $t6, $t5, 0xff -/* 0CFA38 800CEE38 01D8082A */ slt $at, $t6, $t8 -/* 0CFA3C 800CEE3C 1420FFD1 */ bnez $at, .L800CED84 -/* 0CFA40 800CEE40 00000000 */ nop -.L800CEE44: -/* 0CFA44 800CEE44 8FB90128 */ lw $t9, 0x128($sp) -/* 0CFA48 800CEE48 8FAA0134 */ lw $t2, 0x134($sp) -/* 0CFA4C 800CEE4C 00001025 */ move $v0, $zero -/* 0CFA50 800CEE50 001940C0 */ sll $t0, $t9, 3 -/* 0CFA54 800CEE54 00084940 */ sll $t1, $t0, 5 -/* 0CFA58 800CEE58 AD490000 */ sw $t1, ($t2) -.L800CEE5C: -/* 0CFA5C 800CEE5C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFA60 800CEE60 27BD0130 */ addiu $sp, $sp, 0x130 -/* 0CFA64 800CEE64 03E00008 */ jr $ra -/* 0CFA68 800CEE68 00000000 */ nop - -/* 0CFA6C 800CEE6C 00000000 */ nop -glabel guRotateF -/* 0CFA70 800CEE70 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CFA74 800CEE74 3C01800F */ lui $at, %hi(D_800F39E0) # $at, 0x800f -/* 0CFA78 800CEE78 C42439E0 */ lwc1 $f4, %lo(D_800F39E0)($at) -/* 0CFA7C 800CEE7C AFB00018 */ sw $s0, 0x18($sp) -/* 0CFA80 800CEE80 00808025 */ move $s0, $a0 -/* 0CFA84 800CEE84 3C018019 */ lui $at, %hi(D_801965D0) -/* 0CFA88 800CEE88 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CFA8C 800CEE8C AFA5003C */ sw $a1, 0x3c($sp) -/* 0CFA90 800CEE90 AFA60040 */ sw $a2, 0x40($sp) -/* 0CFA94 800CEE94 AFA70044 */ sw $a3, 0x44($sp) -/* 0CFA98 800CEE98 27A60048 */ addiu $a2, $sp, 0x48 -/* 0CFA9C 800CEE9C 27A50044 */ addiu $a1, $sp, 0x44 -/* 0CFAA0 800CEEA0 27A40040 */ addiu $a0, $sp, 0x40 -/* 0CFAA4 800CEEA4 0C035818 */ jal guNormalize -/* 0CFAA8 800CEEA8 E42465D0 */ swc1 $f4, %lo(D_801965D0)($at) -/* 0CFAAC 800CEEAC 3C018019 */ lui $at, %hi(D_801965D0) -/* 0CFAB0 800CEEB0 C7AC003C */ lwc1 $f12, 0x3c($sp) -/* 0CFAB4 800CEEB4 C42665D0 */ lwc1 $f6, %lo(D_801965D0)($at) -/* 0CFAB8 800CEEB8 46066302 */ mul.s $f12, $f12, $f6 -/* 0CFABC 800CEEBC 0C03583C */ jal sinf -/* 0CFAC0 800CEEC0 E7AC003C */ swc1 $f12, 0x3c($sp) -/* 0CFAC4 800CEEC4 C7AC003C */ lwc1 $f12, 0x3c($sp) -/* 0CFAC8 800CEEC8 0C0358AC */ jal cosf -/* 0CFACC 800CEECC E7A00034 */ swc1 $f0, 0x34($sp) -/* 0CFAD0 800CEED0 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0CFAD4 800CEED4 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0CFAD8 800CEED8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0CFADC 800CEEDC 44814000 */ mtc1 $at, $f8 -/* 0CFAE0 800CEEE0 46045182 */ mul.s $f6, $f10, $f4 -/* 0CFAE4 800CEEE4 02002025 */ move $a0, $s0 -/* 0CFAE8 800CEEE8 46004081 */ sub.s $f2, $f8, $f0 -/* 0CFAEC 800CEEEC C7A80048 */ lwc1 $f8, 0x48($sp) -/* 0CFAF0 800CEEF0 E7A00030 */ swc1 $f0, 0x30($sp) -/* 0CFAF4 800CEEF4 46023402 */ mul.s $f16, $f6, $f2 -/* 0CFAF8 800CEEF8 00000000 */ nop -/* 0CFAFC 800CEEFC 46082182 */ mul.s $f6, $f4, $f8 -/* 0CFB00 800CEF00 E7B0002C */ swc1 $f16, 0x2c($sp) -/* 0CFB04 800CEF04 46023482 */ mul.s $f18, $f6, $f2 -/* 0CFB08 800CEF08 00000000 */ nop -/* 0CFB0C 800CEF0C 460A4102 */ mul.s $f4, $f8, $f10 -/* 0CFB10 800CEF10 E7B20028 */ swc1 $f18, 0x28($sp) -/* 0CFB14 800CEF14 46022182 */ mul.s $f6, $f4, $f2 -/* 0CFB18 800CEF18 0C034FA8 */ jal guMtxIdentF -/* 0CFB1C 800CEF1C E7A60024 */ swc1 $f6, 0x24($sp) -/* 0CFB20 800CEF20 C7A80040 */ lwc1 $f8, 0x40($sp) -/* 0CFB24 800CEF24 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0CFB28 800CEF28 44815000 */ mtc1 $at, $f10 -/* 0CFB2C 800CEF2C 46084002 */ mul.s $f0, $f8, $f8 -/* 0CFB30 800CEF30 C7AC0030 */ lwc1 $f12, 0x30($sp) -/* 0CFB34 800CEF34 C7AE0034 */ lwc1 $f14, 0x34($sp) -/* 0CFB38 800CEF38 C7B0002C */ lwc1 $f16, 0x2c($sp) -/* 0CFB3C 800CEF3C C7B20028 */ lwc1 $f18, 0x28($sp) -/* 0CFB40 800CEF40 46005101 */ sub.s $f4, $f10, $f0 -/* 0CFB44 800CEF44 460C2182 */ mul.s $f6, $f4, $f12 -/* 0CFB48 800CEF48 46003200 */ add.s $f8, $f6, $f0 -/* 0CFB4C 800CEF4C E6080000 */ swc1 $f8, ($s0) -/* 0CFB50 800CEF50 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0CFB54 800CEF54 460E5102 */ mul.s $f4, $f10, $f14 -/* 0CFB58 800CEF58 46049181 */ sub.s $f6, $f18, $f4 -/* 0CFB5C 800CEF5C E6060024 */ swc1 $f6, 0x24($s0) -/* 0CFB60 800CEF60 C7A80040 */ lwc1 $f8, 0x40($sp) -/* 0CFB64 800CEF64 460E4282 */ mul.s $f10, $f8, $f14 -/* 0CFB68 800CEF68 44814000 */ mtc1 $at, $f8 -/* 0CFB6C 800CEF6C 46125100 */ add.s $f4, $f10, $f18 -/* 0CFB70 800CEF70 E6040018 */ swc1 $f4, 0x18($s0) -/* 0CFB74 800CEF74 C7A60044 */ lwc1 $f6, 0x44($sp) -/* 0CFB78 800CEF78 46063082 */ mul.s $f2, $f6, $f6 -/* 0CFB7C 800CEF7C 46024281 */ sub.s $f10, $f8, $f2 -/* 0CFB80 800CEF80 460C5102 */ mul.s $f4, $f10, $f12 -/* 0CFB84 800CEF84 46022180 */ add.s $f6, $f4, $f2 -/* 0CFB88 800CEF88 E6060014 */ swc1 $f6, 0x14($s0) -/* 0CFB8C 800CEF8C C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0CFB90 800CEF90 C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0CFB94 800CEF94 460E4282 */ mul.s $f10, $f8, $f14 -/* 0CFB98 800CEF98 46045180 */ add.s $f6, $f10, $f4 -/* 0CFB9C 800CEF9C E6060020 */ swc1 $f6, 0x20($s0) -/* 0CFBA0 800CEFA0 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 0CFBA4 800CEFA4 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0CFBA8 800CEFA8 460E5102 */ mul.s $f4, $f10, $f14 -/* 0CFBAC 800CEFAC 46044181 */ sub.s $f6, $f8, $f4 -/* 0CFBB0 800CEFB0 44814000 */ mtc1 $at, $f8 -/* 0CFBB4 800CEFB4 E6060008 */ swc1 $f6, 8($s0) -/* 0CFBB8 800CEFB8 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0CFBBC 800CEFBC 460A5002 */ mul.s $f0, $f10, $f10 -/* 0CFBC0 800CEFC0 46004101 */ sub.s $f4, $f8, $f0 -/* 0CFBC4 800CEFC4 460C2182 */ mul.s $f6, $f4, $f12 -/* 0CFBC8 800CEFC8 46003280 */ add.s $f10, $f6, $f0 -/* 0CFBCC 800CEFCC E60A0028 */ swc1 $f10, 0x28($s0) -/* 0CFBD0 800CEFD0 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 0CFBD4 800CEFD4 460E4102 */ mul.s $f4, $f8, $f14 -/* 0CFBD8 800CEFD8 46048181 */ sub.s $f6, $f16, $f4 -/* 0CFBDC 800CEFDC E6060010 */ swc1 $f6, 0x10($s0) -/* 0CFBE0 800CEFE0 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0CFBE4 800CEFE4 460E5202 */ mul.s $f8, $f10, $f14 -/* 0CFBE8 800CEFE8 46104100 */ add.s $f4, $f8, $f16 -/* 0CFBEC 800CEFEC E6040004 */ swc1 $f4, 4($s0) -/* 0CFBF0 800CEFF0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CFBF4 800CEFF4 8FB00018 */ lw $s0, 0x18($sp) -/* 0CFBF8 800CEFF8 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CFBFC 800CEFFC 03E00008 */ jr $ra -/* 0CFC00 800CF000 00000000 */ nop - -glabel guRotate -/* 0CFC04 800CF004 44856000 */ mtc1 $a1, $f12 -/* 0CFC08 800CF008 44867000 */ mtc1 $a2, $f14 -/* 0CFC0C 800CF00C 44878000 */ mtc1 $a3, $f16 -/* 0CFC10 800CF010 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0CFC14 800CF014 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0CFC18 800CF018 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CFC1C 800CF01C AFA40060 */ sw $a0, 0x60($sp) -/* 0CFC20 800CF020 44056000 */ mfc1 $a1, $f12 -/* 0CFC24 800CF024 44067000 */ mfc1 $a2, $f14 -/* 0CFC28 800CF028 44078000 */ mfc1 $a3, $f16 -/* 0CFC2C 800CF02C 27A40020 */ addiu $a0, $sp, 0x20 -/* 0CFC30 800CF030 0C033B9C */ jal guRotateF -/* 0CFC34 800CF034 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0CFC38 800CF038 27A40020 */ addiu $a0, $sp, 0x20 -/* 0CFC3C 800CF03C 0C034F68 */ jal guMtxF2L -/* 0CFC40 800CF040 8FA50060 */ lw $a1, 0x60($sp) -/* 0CFC44 800CF044 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CFC48 800CF048 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0CFC4C 800CF04C 03E00008 */ jr $ra -/* 0CFC50 800CF050 00000000 */ nop - -/* 0CFC54 800CF054 00000000 */ nop -/* 0CFC58 800CF058 00000000 */ nop -/* 0CFC5C 800CF05C 00000000 */ nop -glabel guScaleF -/* 0CFC60 800CF060 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CFC64 800CF064 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CFC68 800CF068 AFA5001C */ sw $a1, 0x1c($sp) -/* 0CFC6C 800CF06C AFA60020 */ sw $a2, 0x20($sp) -/* 0CFC70 800CF070 AFA70024 */ sw $a3, 0x24($sp) -/* 0CFC74 800CF074 0C034FA8 */ jal guMtxIdentF -/* 0CFC78 800CF078 AFA40018 */ sw $a0, 0x18($sp) -/* 0CFC7C 800CF07C 8FA40018 */ lw $a0, 0x18($sp) -/* 0CFC80 800CF080 C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 0CFC84 800CF084 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0CFC88 800CF088 44815000 */ mtc1 $at, $f10 -/* 0CFC8C 800CF08C E4840000 */ swc1 $f4, ($a0) -/* 0CFC90 800CF090 C7A60020 */ lwc1 $f6, 0x20($sp) -/* 0CFC94 800CF094 E4860014 */ swc1 $f6, 0x14($a0) -/* 0CFC98 800CF098 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0CFC9C 800CF09C E48A003C */ swc1 $f10, 0x3c($a0) -/* 0CFCA0 800CF0A0 E4880028 */ swc1 $f8, 0x28($a0) -/* 0CFCA4 800CF0A4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFCA8 800CF0A8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CFCAC 800CF0AC 03E00008 */ jr $ra -/* 0CFCB0 800CF0B0 00000000 */ nop - -glabel guScale -/* 0CFCB4 800CF0B4 44856000 */ mtc1 $a1, $f12 -/* 0CFCB8 800CF0B8 44867000 */ mtc1 $a2, $f14 -/* 0CFCBC 800CF0BC 44878000 */ mtc1 $a3, $f16 -/* 0CFCC0 800CF0C0 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0CFCC4 800CF0C4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CFCC8 800CF0C8 AFA40058 */ sw $a0, 0x58($sp) -/* 0CFCCC 800CF0CC 44056000 */ mfc1 $a1, $f12 -/* 0CFCD0 800CF0D0 44067000 */ mfc1 $a2, $f14 -/* 0CFCD4 800CF0D4 44078000 */ mfc1 $a3, $f16 -/* 0CFCD8 800CF0D8 0C033C18 */ jal guScaleF -/* 0CFCDC 800CF0DC 27A40018 */ addiu $a0, $sp, 0x18 -/* 0CFCE0 800CF0E0 27A40018 */ addiu $a0, $sp, 0x18 -/* 0CFCE4 800CF0E4 0C034F68 */ jal guMtxF2L -/* 0CFCE8 800CF0E8 8FA50058 */ lw $a1, 0x58($sp) -/* 0CFCEC 800CF0EC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFCF0 800CF0F0 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0CFCF4 800CF0F4 03E00008 */ jr $ra -/* 0CFCF8 800CF0F8 00000000 */ nop - -/* 0CFCFC 800CF0FC 00000000 */ nop -glabel guPerspectiveF -/* 0CFD00 800CF100 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0CFD04 800CF104 44867000 */ mtc1 $a2, $f14 -/* 0CFD08 800CF108 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CFD0C 800CF10C AFA7003C */ sw $a3, 0x3c($sp) -/* 0CFD10 800CF110 AFA40030 */ sw $a0, 0x30($sp) -/* 0CFD14 800CF114 AFA50034 */ sw $a1, 0x34($sp) -/* 0CFD18 800CF118 0C034FA8 */ jal guMtxIdentF -/* 0CFD1C 800CF11C E7AE0038 */ swc1 $f14, 0x38($sp) -/* 0CFD20 800CF120 C7AE0038 */ lwc1 $f14, 0x38($sp) -/* 0CFD24 800CF124 3C01800F */ lui $at, %hi(D_800F39F0) -/* 0CFD28 800CF128 D42639F0 */ ldc1 $f6, %lo(D_800F39F0)($at) -/* 0CFD2C 800CF12C 46007121 */ cvt.d.s $f4, $f14 -/* 0CFD30 800CF130 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0CFD34 800CF134 46262202 */ mul.d $f8, $f4, $f6 -/* 0CFD38 800CF138 44815000 */ mtc1 $at, $f10 -/* 0CFD3C 800CF13C 462043A0 */ cvt.s.d $f14, $f8 -/* 0CFD40 800CF140 460A7303 */ div.s $f12, $f14, $f10 -/* 0CFD44 800CF144 0C0358AC */ jal cosf -/* 0CFD48 800CF148 E7AC001C */ swc1 $f12, 0x1c($sp) -/* 0CFD4C 800CF14C C7AC001C */ lwc1 $f12, 0x1c($sp) -/* 0CFD50 800CF150 0C03583C */ jal sinf -/* 0CFD54 800CF154 E7A00020 */ swc1 $f0, 0x20($sp) -/* 0CFD58 800CF158 C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0CFD5C 800CF15C C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0CFD60 800CF160 C7AE0040 */ lwc1 $f14, 0x40($sp) -/* 0CFD64 800CF164 46002083 */ div.s $f2, $f4, $f0 -/* 0CFD68 800CF168 C7B00044 */ lwc1 $f16, 0x44($sp) -/* 0CFD6C 800CF16C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0CFD70 800CF170 44812000 */ mtc1 $at, $f4 -/* 0CFD74 800CF174 46107480 */ add.s $f18, $f14, $f16 -/* 0CFD78 800CF178 8FA20030 */ lw $v0, 0x30($sp) -/* 0CFD7C 800CF17C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0CFD80 800CF180 46107301 */ sub.s $f12, $f14, $f16 -/* 0CFD84 800CF184 8FA50034 */ lw $a1, 0x34($sp) -/* 0CFD88 800CF188 E444002C */ swc1 $f4, 0x2c($v0) -/* 0CFD8C 800CF18C 00001825 */ move $v1, $zero -/* 0CFD90 800CF190 24040004 */ li $a0, 4 -/* 0CFD94 800CF194 460C9283 */ div.s $f10, $f18, $f12 -/* 0CFD98 800CF198 E4420014 */ swc1 $f2, 0x14($v0) -/* 0CFD9C 800CF19C 46061203 */ div.s $f8, $f2, $f6 -/* 0CFDA0 800CF1A0 44813000 */ mtc1 $at, $f6 -/* 0CFDA4 800CF1A4 E44A0028 */ swc1 $f10, 0x28($v0) -/* 0CFDA8 800CF1A8 E4480000 */ swc1 $f8, ($v0) -/* 0CFDAC 800CF1AC 460E3202 */ mul.s $f8, $f6, $f14 -/* 0CFDB0 800CF1B0 44803000 */ mtc1 $zero, $f6 -/* 0CFDB4 800CF1B4 00000000 */ nop -/* 0CFDB8 800CF1B8 E446003C */ swc1 $f6, 0x3c($v0) -/* 0CFDBC 800CF1BC 46104282 */ mul.s $f10, $f8, $f16 -/* 0CFDC0 800CF1C0 460C5103 */ div.s $f4, $f10, $f12 -/* 0CFDC4 800CF1C4 E4440038 */ swc1 $f4, 0x38($v0) -/* 0CFDC8 800CF1C8 C7A00048 */ lwc1 $f0, 0x48($sp) -/* 0CFDCC 800CF1CC C4460000 */ lwc1 $f6, ($v0) -/* 0CFDD0 800CF1D0 24630001 */ addiu $v1, $v1, 1 -/* 0CFDD4 800CF1D4 C4500004 */ lwc1 $f16, 4($v0) -/* 0CFDD8 800CF1D8 46003282 */ mul.s $f10, $f6, $f0 -/* 0CFDDC 800CF1DC C44C0008 */ lwc1 $f12, 8($v0) -/* 0CFDE0 800CF1E0 10640010 */ beq $v1, $a0, .L800CF224 -/* 0CFDE4 800CF1E4 C44E000C */ lwc1 $f14, 0xc($v0) -.L800CF1E8: -/* 0CFDE8 800CF1E8 46008202 */ mul.s $f8, $f16, $f0 -/* 0CFDEC 800CF1EC C4460010 */ lwc1 $f6, 0x10($v0) -/* 0CFDF0 800CF1F0 C4500014 */ lwc1 $f16, 0x14($v0) -/* 0CFDF4 800CF1F4 46006102 */ mul.s $f4, $f12, $f0 -/* 0CFDF8 800CF1F8 C44C0018 */ lwc1 $f12, 0x18($v0) -/* 0CFDFC 800CF1FC 24630001 */ addiu $v1, $v1, 1 -/* 0CFE00 800CF200 46007082 */ mul.s $f2, $f14, $f0 -/* 0CFE04 800CF204 C44E001C */ lwc1 $f14, 0x1c($v0) -/* 0CFE08 800CF208 E44A0000 */ swc1 $f10, ($v0) -/* 0CFE0C 800CF20C 46003282 */ mul.s $f10, $f6, $f0 -/* 0CFE10 800CF210 E4480004 */ swc1 $f8, 4($v0) -/* 0CFE14 800CF214 E4440008 */ swc1 $f4, 8($v0) -/* 0CFE18 800CF218 24420010 */ addiu $v0, $v0, 0x10 -/* 0CFE1C 800CF21C 1464FFF2 */ bne $v1, $a0, .L800CF1E8 -/* 0CFE20 800CF220 E442FFFC */ swc1 $f2, -4($v0) -.L800CF224: -/* 0CFE24 800CF224 46008202 */ mul.s $f8, $f16, $f0 -/* 0CFE28 800CF228 24420010 */ addiu $v0, $v0, 0x10 -/* 0CFE2C 800CF22C E44AFFF0 */ swc1 $f10, -0x10($v0) -/* 0CFE30 800CF230 46006102 */ mul.s $f4, $f12, $f0 -/* 0CFE34 800CF234 00000000 */ nop -/* 0CFE38 800CF238 46007082 */ mul.s $f2, $f14, $f0 -/* 0CFE3C 800CF23C E448FFF4 */ swc1 $f8, -0xc($v0) -/* 0CFE40 800CF240 E444FFF8 */ swc1 $f4, -8($v0) -/* 0CFE44 800CF244 E442FFFC */ swc1 $f2, -4($v0) -/* 0CFE48 800CF248 10A00035 */ beqz $a1, .L800CF320 -/* 0CFE4C 800CF24C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0CFE50 800CF250 44814800 */ mtc1 $at, $f9 -/* 0CFE54 800CF254 44804000 */ mtc1 $zero, $f8 -/* 0CFE58 800CF258 46009021 */ cvt.d.s $f0, $f18 -/* 0CFE5C 800CF25C 340EFFFF */ li $t6, 65535 -/* 0CFE60 800CF260 4628003E */ c.le.d $f0, $f8 -/* 0CFE64 800CF264 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 0CFE68 800CF268 45020004 */ bc1fl .L800CF27C -/* 0CFE6C 800CF26C 44815800 */ mtc1 $at, $f11 -/* 0CFE70 800CF270 1000002B */ b .L800CF320 -/* 0CFE74 800CF274 A4AE0000 */ sh $t6, ($a1) -/* 0CFE78 800CF278 44815800 */ mtc1 $at, $f11 -.L800CF27C: -/* 0CFE7C 800CF27C 44805000 */ mtc1 $zero, $f10 -/* 0CFE80 800CF280 24180001 */ li $t8, 1 -/* 0CFE84 800CF284 3C0141E0 */ li $at, 0x41E00000 # 28.000000 -/* 0CFE88 800CF288 46205103 */ div.d $f4, $f10, $f0 -/* 0CFE8C 800CF28C 24080001 */ li $t0, 1 -/* 0CFE90 800CF290 444FF800 */ cfc1 $t7, $31 -/* 0CFE94 800CF294 44D8F800 */ ctc1 $t8, $31 -/* 0CFE98 800CF298 00000000 */ nop -/* 0CFE9C 800CF29C 462021A4 */ cvt.w.d $f6, $f4 -/* 0CFEA0 800CF2A0 4458F800 */ cfc1 $t8, $31 -/* 0CFEA4 800CF2A4 00000000 */ nop -/* 0CFEA8 800CF2A8 33180078 */ andi $t8, $t8, 0x78 -/* 0CFEAC 800CF2AC 53000014 */ beql $t8, $zero, .L800CF300 -/* 0CFEB0 800CF2B0 44183000 */ mfc1 $t8, $f6 -/* 0CFEB4 800CF2B4 44813800 */ mtc1 $at, $f7 -/* 0CFEB8 800CF2B8 44803000 */ mtc1 $zero, $f6 -/* 0CFEBC 800CF2BC 24180001 */ li $t8, 1 -/* 0CFEC0 800CF2C0 46262181 */ sub.d $f6, $f4, $f6 -/* 0CFEC4 800CF2C4 44D8F800 */ ctc1 $t8, $31 -/* 0CFEC8 800CF2C8 00000000 */ nop -/* 0CFECC 800CF2CC 462031A4 */ cvt.w.d $f6, $f6 -/* 0CFED0 800CF2D0 4458F800 */ cfc1 $t8, $31 -/* 0CFED4 800CF2D4 00000000 */ nop -/* 0CFED8 800CF2D8 33180078 */ andi $t8, $t8, 0x78 -/* 0CFEDC 800CF2DC 17000005 */ bnez $t8, .L800CF2F4 -/* 0CFEE0 800CF2E0 00000000 */ nop -/* 0CFEE4 800CF2E4 44183000 */ mfc1 $t8, $f6 -/* 0CFEE8 800CF2E8 3C018000 */ lui $at, 0x8000 -/* 0CFEEC 800CF2EC 10000007 */ b .L800CF30C -/* 0CFEF0 800CF2F0 0301C025 */ or $t8, $t8, $at -.L800CF2F4: -/* 0CFEF4 800CF2F4 10000005 */ b .L800CF30C -/* 0CFEF8 800CF2F8 2418FFFF */ li $t8, -1 -/* 0CFEFC 800CF2FC 44183000 */ mfc1 $t8, $f6 -.L800CF300: -/* 0CFF00 800CF300 00000000 */ nop -/* 0CFF04 800CF304 0700FFFB */ bltz $t8, .L800CF2F4 -/* 0CFF08 800CF308 00000000 */ nop -.L800CF30C: -/* 0CFF0C 800CF30C 44CFF800 */ ctc1 $t7, $31 -/* 0CFF10 800CF310 3319FFFF */ andi $t9, $t8, 0xffff -/* 0CFF14 800CF314 1F200002 */ bgtz $t9, .L800CF320 -/* 0CFF18 800CF318 A4B80000 */ sh $t8, ($a1) -/* 0CFF1C 800CF31C A4A80000 */ sh $t0, ($a1) -.L800CF320: -/* 0CFF20 800CF320 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFF24 800CF324 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0CFF28 800CF328 03E00008 */ jr $ra -/* 0CFF2C 800CF32C 00000000 */ nop - -glabel guPerspective -/* 0CFF30 800CF330 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0CFF34 800CF334 44866000 */ mtc1 $a2, $f12 -/* 0CFF38 800CF338 44877000 */ mtc1 $a3, $f14 -/* 0CFF3C 800CF33C C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0CFF40 800CF340 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0CFF44 800CF344 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0CFF48 800CF348 AFBF0024 */ sw $ra, 0x24($sp) -/* 0CFF4C 800CF34C AFA40068 */ sw $a0, 0x68($sp) -/* 0CFF50 800CF350 44066000 */ mfc1 $a2, $f12 -/* 0CFF54 800CF354 44077000 */ mfc1 $a3, $f14 -/* 0CFF58 800CF358 27A40028 */ addiu $a0, $sp, 0x28 -/* 0CFF5C 800CF35C E7A40010 */ swc1 $f4, 0x10($sp) -/* 0CFF60 800CF360 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0CFF64 800CF364 0C033C40 */ jal guPerspectiveF -/* 0CFF68 800CF368 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0CFF6C 800CF36C 27A40028 */ addiu $a0, $sp, 0x28 -/* 0CFF70 800CF370 0C034F68 */ jal guMtxF2L -/* 0CFF74 800CF374 8FA50068 */ lw $a1, 0x68($sp) -/* 0CFF78 800CF378 8FBF0024 */ lw $ra, 0x24($sp) -/* 0CFF7C 800CF37C 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0CFF80 800CF380 03E00008 */ jr $ra -/* 0CFF84 800CF384 00000000 */ nop - -/* 0CFF88 800CF388 00000000 */ nop -/* 0CFF8C 800CF38C 00000000 */ nop -glabel guLookAtF -/* 0CFF90 800CF390 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0CFF94 800CF394 AFBF004C */ sw $ra, 0x4c($sp) -/* 0CFF98 800CF398 AFB00048 */ sw $s0, 0x48($sp) -/* 0CFF9C 800CF39C 00808025 */ move $s0, $a0 -/* 0CFFA0 800CF3A0 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0CFFA4 800CF3A4 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0CFFA8 800CF3A8 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0CFFAC 800CF3AC F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0CFFB0 800CF3B0 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0CFFB4 800CF3B4 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0CFFB8 800CF3B8 AFA50054 */ sw $a1, 0x54($sp) -/* 0CFFBC 800CF3BC AFA60058 */ sw $a2, 0x58($sp) -/* 0CFFC0 800CF3C0 0C034FA8 */ jal guMtxIdentF -/* 0CFFC4 800CF3C4 AFA7005C */ sw $a3, 0x5c($sp) -/* 0CFFC8 800CF3C8 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 0CFFCC 800CF3CC C7A60054 */ lwc1 $f6, 0x54($sp) -/* 0CFFD0 800CF3D0 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 0CFFD4 800CF3D4 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 0CFFD8 800CF3D8 46062001 */ sub.s $f0, $f4, $f6 -/* 0CFFDC 800CF3DC C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 0CFFE0 800CF3E0 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0CFFE4 800CF3E4 460A4581 */ sub.s $f22, $f8, $f10 -/* 0CFFE8 800CF3E8 46000202 */ mul.s $f8, $f0, $f0 -/* 0CFFEC 800CF3EC 46000506 */ mov.s $f20, $f0 -/* 0CFFF0 800CF3F0 46062601 */ sub.s $f24, $f4, $f6 -/* 0CFFF4 800CF3F4 4616B282 */ mul.s $f10, $f22, $f22 -/* 0CFFF8 800CF3F8 460A4100 */ add.s $f4, $f8, $f10 -/* 0CFFFC 800CF3FC 4618C182 */ mul.s $f6, $f24, $f24 -/* 0D0000 800CF400 0C033850 */ jal sqrtf -/* 0D0004 800CF404 46062300 */ add.s $f12, $f4, $f6 -/* 0D0008 800CF408 3C01BFF0 */ li $at, 0xBFF00000 # -1.875000 -/* 0D000C 800CF40C 44814800 */ mtc1 $at, $f9 -/* 0D0010 800CF410 44804000 */ mtc1 $zero, $f8 -/* 0D0014 800CF414 460002A1 */ cvt.d.s $f10, $f0 -/* 0D0018 800CF418 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 0D001C 800CF41C 462A4103 */ div.d $f4, $f8, $f10 -/* 0D0020 800CF420 C7AA0074 */ lwc1 $f10, 0x74($sp) -/* 0D0024 800CF424 462020A0 */ cvt.s.d $f2, $f4 -/* 0D0028 800CF428 4602A502 */ mul.s $f20, $f20, $f2 -/* 0D002C 800CF42C 00000000 */ nop -/* 0D0030 800CF430 4602B582 */ mul.s $f22, $f22, $f2 -/* 0D0034 800CF434 00000000 */ nop -/* 0D0038 800CF438 4602C602 */ mul.s $f24, $f24, $f2 -/* 0D003C 800CF43C 00000000 */ nop -/* 0D0040 800CF440 46183202 */ mul.s $f8, $f6, $f24 -/* 0D0044 800CF444 00000000 */ nop -/* 0D0048 800CF448 46165102 */ mul.s $f4, $f10, $f22 -/* 0D004C 800CF44C 46044681 */ sub.s $f26, $f8, $f4 -/* 0D0050 800CF450 46145202 */ mul.s $f8, $f10, $f20 -/* 0D0054 800CF454 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 0D0058 800CF458 46182282 */ mul.s $f10, $f4, $f24 -/* 0D005C 800CF45C 460A4701 */ sub.s $f28, $f8, $f10 -/* 0D0060 800CF460 46162202 */ mul.s $f8, $f4, $f22 -/* 0D0064 800CF464 00000000 */ nop -/* 0D0068 800CF468 46143282 */ mul.s $f10, $f6, $f20 -/* 0D006C 800CF46C 460A4781 */ sub.s $f30, $f8, $f10 -/* 0D0070 800CF470 461AD102 */ mul.s $f4, $f26, $f26 -/* 0D0074 800CF474 00000000 */ nop -/* 0D0078 800CF478 461CE182 */ mul.s $f6, $f28, $f28 -/* 0D007C 800CF47C 46062200 */ add.s $f8, $f4, $f6 -/* 0D0080 800CF480 461EF282 */ mul.s $f10, $f30, $f30 -/* 0D0084 800CF484 0C033850 */ jal sqrtf -/* 0D0088 800CF488 460A4300 */ add.s $f12, $f8, $f10 -/* 0D008C 800CF48C 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 0D0090 800CF490 44812800 */ mtc1 $at, $f5 -/* 0D0094 800CF494 44802000 */ mtc1 $zero, $f4 -/* 0D0098 800CF498 460001A1 */ cvt.d.s $f6, $f0 -/* 0D009C 800CF49C 46262203 */ div.d $f8, $f4, $f6 -/* 0D00A0 800CF4A0 462040A0 */ cvt.s.d $f2, $f8 -/* 0D00A4 800CF4A4 4602D682 */ mul.s $f26, $f26, $f2 -/* 0D00A8 800CF4A8 00000000 */ nop -/* 0D00AC 800CF4AC 4602E702 */ mul.s $f28, $f28, $f2 -/* 0D00B0 800CF4B0 00000000 */ nop -/* 0D00B4 800CF4B4 4602F782 */ mul.s $f30, $f30, $f2 -/* 0D00B8 800CF4B8 00000000 */ nop -/* 0D00BC 800CF4BC 461EB282 */ mul.s $f10, $f22, $f30 -/* 0D00C0 800CF4C0 00000000 */ nop -/* 0D00C4 800CF4C4 461CC102 */ mul.s $f4, $f24, $f28 -/* 0D00C8 800CF4C8 00000000 */ nop -/* 0D00CC 800CF4CC 461AC182 */ mul.s $f6, $f24, $f26 -/* 0D00D0 800CF4D0 00000000 */ nop -/* 0D00D4 800CF4D4 461EA202 */ mul.s $f8, $f20, $f30 -/* 0D00D8 800CF4D8 46045381 */ sub.s $f14, $f10, $f4 -/* 0D00DC 800CF4DC 461CA282 */ mul.s $f10, $f20, $f28 -/* 0D00E0 800CF4E0 00000000 */ nop -/* 0D00E4 800CF4E4 461AB102 */ mul.s $f4, $f22, $f26 -/* 0D00E8 800CF4E8 E7AE006C */ swc1 $f14, 0x6c($sp) -/* 0D00EC 800CF4EC 46083401 */ sub.s $f16, $f6, $f8 -/* 0D00F0 800CF4F0 460E7182 */ mul.s $f6, $f14, $f14 -/* 0D00F4 800CF4F4 00000000 */ nop -/* 0D00F8 800CF4F8 46108202 */ mul.s $f8, $f16, $f16 -/* 0D00FC 800CF4FC E7B00070 */ swc1 $f16, 0x70($sp) -/* 0D0100 800CF500 46045481 */ sub.s $f18, $f10, $f4 -/* 0D0104 800CF504 46129102 */ mul.s $f4, $f18, $f18 -/* 0D0108 800CF508 46083280 */ add.s $f10, $f6, $f8 -/* 0D010C 800CF50C E7B20074 */ swc1 $f18, 0x74($sp) -/* 0D0110 800CF510 0C033850 */ jal sqrtf -/* 0D0114 800CF514 46045300 */ add.s $f12, $f10, $f4 -/* 0D0118 800CF518 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 0D011C 800CF51C 44813800 */ mtc1 $at, $f7 -/* 0D0120 800CF520 44803000 */ mtc1 $zero, $f6 -/* 0D0124 800CF524 46000221 */ cvt.d.s $f8, $f0 -/* 0D0128 800CF528 C7AE006C */ lwc1 $f14, 0x6c($sp) -/* 0D012C 800CF52C 46283283 */ div.d $f10, $f6, $f8 -/* 0D0130 800CF530 C7AC0070 */ lwc1 $f12, 0x70($sp) -/* 0D0134 800CF534 C7A40074 */ lwc1 $f4, 0x74($sp) -/* 0D0138 800CF538 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D013C 800CF53C 462050A0 */ cvt.s.d $f2, $f10 -/* 0D0140 800CF540 46027382 */ mul.s $f14, $f14, $f2 -/* 0D0144 800CF544 00000000 */ nop -/* 0D0148 800CF548 46026302 */ mul.s $f12, $f12, $f2 -/* 0D014C 800CF54C 00000000 */ nop -/* 0D0150 800CF550 46022182 */ mul.s $f6, $f4, $f2 -/* 0D0154 800CF554 E7A60074 */ swc1 $f6, 0x74($sp) -/* 0D0158 800CF558 E61A0000 */ swc1 $f26, ($s0) -/* 0D015C 800CF55C E61C0010 */ swc1 $f28, 0x10($s0) -/* 0D0160 800CF560 E61E0020 */ swc1 $f30, 0x20($s0) -/* 0D0164 800CF564 C7A80054 */ lwc1 $f8, 0x54($sp) -/* 0D0168 800CF568 C7A40058 */ lwc1 $f4, 0x58($sp) -/* 0D016C 800CF56C 461A4282 */ mul.s $f10, $f8, $f26 -/* 0D0170 800CF570 00000000 */ nop -/* 0D0174 800CF574 461C2182 */ mul.s $f6, $f4, $f28 -/* 0D0178 800CF578 C7A4005C */ lwc1 $f4, 0x5c($sp) -/* 0D017C 800CF57C E60E0004 */ swc1 $f14, 4($s0) -/* 0D0180 800CF580 E60C0014 */ swc1 $f12, 0x14($s0) -/* 0D0184 800CF584 46065200 */ add.s $f8, $f10, $f6 -/* 0D0188 800CF588 461E2282 */ mul.s $f10, $f4, $f30 -/* 0D018C 800CF58C 460A4180 */ add.s $f6, $f8, $f10 -/* 0D0190 800CF590 46003107 */ neg.s $f4, $f6 -/* 0D0194 800CF594 E6040030 */ swc1 $f4, 0x30($s0) -/* 0D0198 800CF598 C7A00074 */ lwc1 $f0, 0x74($sp) -/* 0D019C 800CF59C E7AC0070 */ swc1 $f12, 0x70($sp) -/* 0D01A0 800CF5A0 E7AE006C */ swc1 $f14, 0x6c($sp) -/* 0D01A4 800CF5A4 C7AE0054 */ lwc1 $f14, 0x54($sp) -/* 0D01A8 800CF5A8 C7AC0058 */ lwc1 $f12, 0x58($sp) -/* 0D01AC 800CF5AC C7A2005C */ lwc1 $f2, 0x5c($sp) -/* 0D01B0 800CF5B0 E6000024 */ swc1 $f0, 0x24($s0) -/* 0D01B4 800CF5B4 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0D01B8 800CF5B8 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 0D01BC 800CF5BC E6140008 */ swc1 $f20, 8($s0) -/* 0D01C0 800CF5C0 46087282 */ mul.s $f10, $f14, $f8 -/* 0D01C4 800CF5C4 E6160018 */ swc1 $f22, 0x18($s0) -/* 0D01C8 800CF5C8 E6180028 */ swc1 $f24, 0x28($s0) -/* 0D01CC 800CF5CC 46066102 */ mul.s $f4, $f12, $f6 -/* 0D01D0 800CF5D0 46045200 */ add.s $f8, $f10, $f4 -/* 0D01D4 800CF5D4 46001182 */ mul.s $f6, $f2, $f0 -/* 0D01D8 800CF5D8 44800000 */ mtc1 $zero, $f0 -/* 0D01DC 800CF5DC 00000000 */ nop -/* 0D01E0 800CF5E0 E600000C */ swc1 $f0, 0xc($s0) -/* 0D01E4 800CF5E4 E600001C */ swc1 $f0, 0x1c($s0) -/* 0D01E8 800CF5E8 E600002C */ swc1 $f0, 0x2c($s0) -/* 0D01EC 800CF5EC 46064280 */ add.s $f10, $f8, $f6 -/* 0D01F0 800CF5F0 46147202 */ mul.s $f8, $f14, $f20 -/* 0D01F4 800CF5F4 00000000 */ nop -/* 0D01F8 800CF5F8 46166182 */ mul.s $f6, $f12, $f22 -/* 0D01FC 800CF5FC 46005107 */ neg.s $f4, $f10 -/* 0D0200 800CF600 E6040034 */ swc1 $f4, 0x34($s0) -/* 0D0204 800CF604 46181102 */ mul.s $f4, $f2, $f24 -/* 0D0208 800CF608 46064280 */ add.s $f10, $f8, $f6 -/* 0D020C 800CF60C 46045200 */ add.s $f8, $f10, $f4 -/* 0D0210 800CF610 44815000 */ mtc1 $at, $f10 -/* 0D0214 800CF614 46004187 */ neg.s $f6, $f8 -/* 0D0218 800CF618 E60A003C */ swc1 $f10, 0x3c($s0) -/* 0D021C 800CF61C E6060038 */ swc1 $f6, 0x38($s0) -/* 0D0220 800CF620 8FBF004C */ lw $ra, 0x4c($sp) -/* 0D0224 800CF624 8FB00048 */ lw $s0, 0x48($sp) -/* 0D0228 800CF628 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0D022C 800CF62C D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0D0230 800CF630 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0D0234 800CF634 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0D0238 800CF638 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D023C 800CF63C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D0240 800CF640 03E00008 */ jr $ra -/* 0D0244 800CF644 27BD0050 */ addiu $sp, $sp, 0x50 - -glabel guLookAt -/* 0D0248 800CF648 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 0D024C 800CF64C C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0D0250 800CF650 44856000 */ mtc1 $a1, $f12 -/* 0D0254 800CF654 44867000 */ mtc1 $a2, $f14 -/* 0D0258 800CF658 44878000 */ mtc1 $a3, $f16 -/* 0D025C 800CF65C E7A40010 */ swc1 $f4, 0x10($sp) -/* 0D0260 800CF660 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0D0264 800CF664 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0D0268 800CF668 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0D026C 800CF66C C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0D0270 800CF670 C7B20090 */ lwc1 $f18, 0x90($sp) -/* 0D0274 800CF674 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D0278 800CF678 AFA40070 */ sw $a0, 0x70($sp) -/* 0D027C 800CF67C 44056000 */ mfc1 $a1, $f12 -/* 0D0280 800CF680 44067000 */ mfc1 $a2, $f14 -/* 0D0284 800CF684 44078000 */ mfc1 $a3, $f16 -/* 0D0288 800CF688 27A40030 */ addiu $a0, $sp, 0x30 -/* 0D028C 800CF68C E7A40024 */ swc1 $f4, 0x24($sp) -/* 0D0290 800CF690 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0D0294 800CF694 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0D0298 800CF698 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0D029C 800CF69C 0C033CE4 */ jal guLookAtF -/* 0D02A0 800CF6A0 E7B20020 */ swc1 $f18, 0x20($sp) -/* 0D02A4 800CF6A4 27A40030 */ addiu $a0, $sp, 0x30 -/* 0D02A8 800CF6A8 0C034F68 */ jal guMtxF2L -/* 0D02AC 800CF6AC 8FA50070 */ lw $a1, 0x70($sp) -/* 0D02B0 800CF6B0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D02B4 800CF6B4 27BD0070 */ addiu $sp, $sp, 0x70 -/* 0D02B8 800CF6B8 03E00008 */ jr $ra -/* 0D02BC 800CF6BC 00000000 */ nop - -glabel guTranslateF -/* 0D02C0 800CF6C0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D02C4 800CF6C4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D02C8 800CF6C8 AFA5001C */ sw $a1, 0x1c($sp) -/* 0D02CC 800CF6CC AFA60020 */ sw $a2, 0x20($sp) -/* 0D02D0 800CF6D0 AFA70024 */ sw $a3, 0x24($sp) -/* 0D02D4 800CF6D4 0C034FA8 */ jal guMtxIdentF -/* 0D02D8 800CF6D8 AFA40018 */ sw $a0, 0x18($sp) -/* 0D02DC 800CF6DC 8FA40018 */ lw $a0, 0x18($sp) -/* 0D02E0 800CF6E0 C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 0D02E4 800CF6E4 E4840030 */ swc1 $f4, 0x30($a0) -/* 0D02E8 800CF6E8 C7A60020 */ lwc1 $f6, 0x20($sp) -/* 0D02EC 800CF6EC E4860034 */ swc1 $f6, 0x34($a0) -/* 0D02F0 800CF6F0 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0D02F4 800CF6F4 E4880038 */ swc1 $f8, 0x38($a0) -/* 0D02F8 800CF6F8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D02FC 800CF6FC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D0300 800CF700 03E00008 */ jr $ra -/* 0D0304 800CF704 00000000 */ nop - -glabel guTranslate -/* 0D0308 800CF708 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0D030C 800CF70C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0310 800CF710 AFA40068 */ sw $a0, 0x68($sp) -/* 0D0314 800CF714 AFA5006C */ sw $a1, 0x6c($sp) -/* 0D0318 800CF718 AFA60070 */ sw $a2, 0x70($sp) -/* 0D031C 800CF71C AFA70074 */ sw $a3, 0x74($sp) -/* 0D0320 800CF720 0C034FA8 */ jal guMtxIdentF -/* 0D0324 800CF724 27A40028 */ addiu $a0, $sp, 0x28 -/* 0D0328 800CF728 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 0D032C 800CF72C C7A60070 */ lwc1 $f6, 0x70($sp) -/* 0D0330 800CF730 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0D0334 800CF734 27A40028 */ addiu $a0, $sp, 0x28 -/* 0D0338 800CF738 8FA50068 */ lw $a1, 0x68($sp) -/* 0D033C 800CF73C E7A40058 */ swc1 $f4, 0x58($sp) -/* 0D0340 800CF740 E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0D0344 800CF744 0C034F68 */ jal guMtxF2L -/* 0D0348 800CF748 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0D034C 800CF74C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D0350 800CF750 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0D0354 800CF754 03E00008 */ jr $ra -/* 0D0358 800CF758 00000000 */ nop - -/* 0D035C 800CF75C 00000000 */ nop -glabel osSyncPrintf -/* 0D0360 800CF760 AFA40000 */ sw $a0, ($sp) -/* 0D0364 800CF764 AFA50004 */ sw $a1, 4($sp) -/* 0D0368 800CF768 AFA60008 */ sw $a2, 8($sp) -/* 0D036C 800CF76C 03E00008 */ jr $ra -/* 0D0370 800CF770 24020001 */ li $v0, 1 - -glabel func_800CF774 -/* 0D0374 800CF774 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D0378 800CF778 AFA40020 */ sw $a0, 0x20($sp) -/* 0D037C 800CF77C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0380 800CF780 AFA50024 */ sw $a1, 0x24($sp) -/* 0D0384 800CF784 AFA60028 */ sw $a2, 0x28($sp) -/* 0D0388 800CF788 AFA7002C */ sw $a3, 0x2c($sp) -/* 0D038C 800CF78C 3C04800D */ lui $a0, %hi(osSyncPrintf) # $a0, 0x800d -/* 0D0390 800CF790 2484F760 */ addiu $a0, %lo(osSyncPrintf) # addiu $a0, $a0, -0x8a0 -/* 0D0394 800CF794 27A70024 */ addiu $a3, $sp, 0x24 -/* 0D0398 800CF798 8FA60020 */ lw $a2, 0x20($sp) -/* 0D039C 800CF79C 0C035AA4 */ jal _vprintf -/* 0D03A0 800CF7A0 00002825 */ move $a1, $zero -/* 0D03A4 800CF7A4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D03A8 800CF7A8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D03AC 800CF7AC 03E00008 */ jr $ra -/* 0D03B0 800CF7B0 00000000 */ nop - -/* 0D03B4 800CF7B4 00000000 */ nop -/* 0D03B8 800CF7B8 00000000 */ nop -/* 0D03BC 800CF7BC 00000000 */ nop -glabel guMtxXFML -/* 0D03C0 800CF7C0 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0D03C4 800CF7C4 AFA5006C */ sw $a1, 0x6c($sp) -/* 0D03C8 800CF7C8 00802825 */ move $a1, $a0 -/* 0D03CC 800CF7CC AFBF0024 */ sw $ra, 0x24($sp) -/* 0D03D0 800CF7D0 AFA40068 */ sw $a0, 0x68($sp) -/* 0D03D4 800CF7D4 AFA60070 */ sw $a2, 0x70($sp) -/* 0D03D8 800CF7D8 AFA70074 */ sw $a3, 0x74($sp) -/* 0D03DC 800CF7DC 0C034FD6 */ jal guMtxL2F -/* 0D03E0 800CF7E0 27A40028 */ addiu $a0, $sp, 0x28 -/* 0D03E4 800CF7E4 8FAE0078 */ lw $t6, 0x78($sp) -/* 0D03E8 800CF7E8 8FAF007C */ lw $t7, 0x7c($sp) -/* 0D03EC 800CF7EC 8FB80080 */ lw $t8, 0x80($sp) -/* 0D03F0 800CF7F0 27A40028 */ addiu $a0, $sp, 0x28 -/* 0D03F4 800CF7F4 8FA5006C */ lw $a1, 0x6c($sp) -/* 0D03F8 800CF7F8 8FA60070 */ lw $a2, 0x70($sp) -/* 0D03FC 800CF7FC 8FA70074 */ lw $a3, 0x74($sp) -/* 0D0400 800CF800 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D0404 800CF804 AFAF0014 */ sw $t7, 0x14($sp) -/* 0D0408 800CF808 0C035C38 */ jal guMtxXFMF -/* 0D040C 800CF80C AFB80018 */ sw $t8, 0x18($sp) -/* 0D0410 800CF810 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D0414 800CF814 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0D0418 800CF818 03E00008 */ jr $ra -/* 0D041C 800CF81C 00000000 */ nop - -glabel guMtxCatL -/* 0D0420 800CF820 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0D0424 800CF824 AFA500DC */ sw $a1, 0xdc($sp) -/* 0D0428 800CF828 00802825 */ move $a1, $a0 -/* 0D042C 800CF82C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0430 800CF830 AFA400D8 */ sw $a0, 0xd8($sp) -/* 0D0434 800CF834 AFA600E0 */ sw $a2, 0xe0($sp) -/* 0D0438 800CF838 0C034FD6 */ jal guMtxL2F -/* 0D043C 800CF83C 27A40098 */ addiu $a0, $sp, 0x98 -/* 0D0440 800CF840 27A40058 */ addiu $a0, $sp, 0x58 -/* 0D0444 800CF844 0C034FD6 */ jal guMtxL2F -/* 0D0448 800CF848 8FA500DC */ lw $a1, 0xdc($sp) -/* 0D044C 800CF84C 27A40098 */ addiu $a0, $sp, 0x98 -/* 0D0450 800CF850 27A50058 */ addiu $a1, $sp, 0x58 -/* 0D0454 800CF854 0C035C60 */ jal guMtxCatF -/* 0D0458 800CF858 27A60018 */ addiu $a2, $sp, 0x18 -/* 0D045C 800CF85C 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D0460 800CF860 0C034F68 */ jal guMtxF2L -/* 0D0464 800CF864 8FA500E0 */ lw $a1, 0xe0($sp) -/* 0D0468 800CF868 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D046C 800CF86C 27BD00D8 */ addiu $sp, $sp, 0xd8 -/* 0D0470 800CF870 03E00008 */ jr $ra -/* 0D0474 800CF874 00000000 */ nop - -/* 0D0478 800CF878 00000000 */ nop -/* 0D047C 800CF87C 00000000 */ nop -glabel osPfsFindFile -/* 0D0480 800CF880 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D0484 800CF884 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0488 800CF888 AFA40048 */ sw $a0, 0x48($sp) -/* 0D048C 800CF88C AFA5004C */ sw $a1, 0x4c($sp) -/* 0D0490 800CF890 AFA60050 */ sw $a2, 0x50($sp) -/* 0D0494 800CF894 AFA70054 */ sw $a3, 0x54($sp) -/* 0D0498 800CF898 AFA0001C */ sw $zero, 0x1c($sp) -/* 0D049C 800CF89C 0C035370 */ jal __osCheckId -/* 0D04A0 800CF8A0 8FA40048 */ lw $a0, 0x48($sp) -/* 0D04A4 800CF8A4 24010002 */ li $at, 2 -/* 0D04A8 800CF8A8 14410003 */ bne $v0, $at, .L800CF8B8 -/* 0D04AC 800CF8AC 00000000 */ nop -/* 0D04B0 800CF8B0 1000005C */ b .L800CFA24 -/* 0D04B4 800CF8B4 24020002 */ li $v0, 2 -.L800CF8B8: -/* 0D04B8 800CF8B8 8FAE0048 */ lw $t6, 0x48($sp) -/* 0D04BC 800CF8BC AFA00044 */ sw $zero, 0x44($sp) -/* 0D04C0 800CF8C0 8DCF0050 */ lw $t7, 0x50($t6) -/* 0D04C4 800CF8C4 19E00053 */ blez $t7, .L800CFA14 -/* 0D04C8 800CF8C8 00000000 */ nop -.L800CF8CC: -/* 0D04CC 800CF8CC 8FB80048 */ lw $t8, 0x48($sp) -/* 0D04D0 800CF8D0 8FA80044 */ lw $t0, 0x44($sp) -/* 0D04D4 800CF8D4 27A70020 */ addiu $a3, $sp, 0x20 -/* 0D04D8 800CF8D8 8F19005C */ lw $t9, 0x5c($t8) -/* 0D04DC 800CF8DC 8F040004 */ lw $a0, 4($t8) -/* 0D04E0 800CF8E0 8F050008 */ lw $a1, 8($t8) -/* 0D04E4 800CF8E4 0C03572C */ jal __osContRamRead -/* 0D04E8 800CF8E8 03283021 */ addu $a2, $t9, $t0 -/* 0D04EC 800CF8EC AFA2001C */ sw $v0, 0x1c($sp) -/* 0D04F0 800CF8F0 8FA9001C */ lw $t1, 0x1c($sp) -/* 0D04F4 800CF8F4 11200003 */ beqz $t1, .L800CF904 -/* 0D04F8 800CF8F8 00000000 */ nop -/* 0D04FC 800CF8FC 10000049 */ b .L800CFA24 -/* 0D0500 800CF900 01201025 */ move $v0, $t1 -.L800CF904: -/* 0D0504 800CF904 97AA0024 */ lhu $t2, 0x24($sp) -/* 0D0508 800CF908 97AB004E */ lhu $t3, 0x4e($sp) -/* 0D050C 800CF90C 154B0039 */ bne $t2, $t3, .L800CF9F4 -/* 0D0510 800CF910 00000000 */ nop -/* 0D0514 800CF914 8FAC0020 */ lw $t4, 0x20($sp) -/* 0D0518 800CF918 8FAD0050 */ lw $t5, 0x50($sp) -/* 0D051C 800CF91C 158D0035 */ bne $t4, $t5, .L800CF9F4 -/* 0D0520 800CF920 00000000 */ nop -/* 0D0524 800CF924 8FAE0054 */ lw $t6, 0x54($sp) -/* 0D0528 800CF928 AFA00018 */ sw $zero, 0x18($sp) -/* 0D052C 800CF92C 11C00012 */ beqz $t6, .L800CF978 -/* 0D0530 800CF930 00000000 */ nop -/* 0D0534 800CF934 AFA00040 */ sw $zero, 0x40($sp) -.L800CF938: -/* 0D0538 800CF938 8FB80040 */ lw $t8, 0x40($sp) -/* 0D053C 800CF93C 8FAF0054 */ lw $t7, 0x54($sp) -/* 0D0540 800CF940 03B84821 */ addu $t1, $sp, $t8 -/* 0D0544 800CF944 01F8C821 */ addu $t9, $t7, $t8 -/* 0D0548 800CF948 93280000 */ lbu $t0, ($t9) -/* 0D054C 800CF94C 91290030 */ lbu $t1, 0x30($t1) -/* 0D0550 800CF950 11090004 */ beq $t0, $t1, .L800CF964 -/* 0D0554 800CF954 00000000 */ nop -/* 0D0558 800CF958 240A0001 */ li $t2, 1 -/* 0D055C 800CF95C 10000006 */ b .L800CF978 -/* 0D0560 800CF960 AFAA0018 */ sw $t2, 0x18($sp) -.L800CF964: -/* 0D0564 800CF964 8FAB0040 */ lw $t3, 0x40($sp) -/* 0D0568 800CF968 256C0001 */ addiu $t4, $t3, 1 -/* 0D056C 800CF96C 29810010 */ slti $at, $t4, 0x10 -/* 0D0570 800CF970 1420FFF1 */ bnez $at, .L800CF938 -/* 0D0574 800CF974 AFAC0040 */ sw $t4, 0x40($sp) -.L800CF978: -/* 0D0578 800CF978 8FAD0058 */ lw $t5, 0x58($sp) -/* 0D057C 800CF97C 11A00015 */ beqz $t5, .L800CF9D4 -/* 0D0580 800CF980 00000000 */ nop -/* 0D0584 800CF984 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D0588 800CF988 15C00012 */ bnez $t6, .L800CF9D4 -/* 0D058C 800CF98C 00000000 */ nop -/* 0D0590 800CF990 AFA00040 */ sw $zero, 0x40($sp) -.L800CF994: -/* 0D0594 800CF994 8FB90040 */ lw $t9, 0x40($sp) -/* 0D0598 800CF998 8FAF0058 */ lw $t7, 0x58($sp) -/* 0D059C 800CF99C 03B94821 */ addu $t1, $sp, $t9 -/* 0D05A0 800CF9A0 01F9C021 */ addu $t8, $t7, $t9 -/* 0D05A4 800CF9A4 93080000 */ lbu $t0, ($t8) -/* 0D05A8 800CF9A8 9129002C */ lbu $t1, 0x2c($t1) -/* 0D05AC 800CF9AC 11090004 */ beq $t0, $t1, .L800CF9C0 -/* 0D05B0 800CF9B0 00000000 */ nop -/* 0D05B4 800CF9B4 240A0001 */ li $t2, 1 -/* 0D05B8 800CF9B8 10000006 */ b .L800CF9D4 -/* 0D05BC 800CF9BC AFAA0018 */ sw $t2, 0x18($sp) -.L800CF9C0: -/* 0D05C0 800CF9C0 8FAB0040 */ lw $t3, 0x40($sp) -/* 0D05C4 800CF9C4 256C0001 */ addiu $t4, $t3, 1 -/* 0D05C8 800CF9C8 29810004 */ slti $at, $t4, 4 -/* 0D05CC 800CF9CC 1420FFF1 */ bnez $at, .L800CF994 -/* 0D05D0 800CF9D0 AFAC0040 */ sw $t4, 0x40($sp) -.L800CF9D4: -/* 0D05D4 800CF9D4 8FAD0018 */ lw $t5, 0x18($sp) -/* 0D05D8 800CF9D8 15A00006 */ bnez $t5, .L800CF9F4 -/* 0D05DC 800CF9DC 00000000 */ nop -/* 0D05E0 800CF9E0 8FAE0044 */ lw $t6, 0x44($sp) -/* 0D05E4 800CF9E4 8FAF005C */ lw $t7, 0x5c($sp) -/* 0D05E8 800CF9E8 ADEE0000 */ sw $t6, ($t7) -/* 0D05EC 800CF9EC 1000000D */ b .L800CFA24 -/* 0D05F0 800CF9F0 8FA2001C */ lw $v0, 0x1c($sp) -.L800CF9F4: -/* 0D05F4 800CF9F4 8FB80044 */ lw $t8, 0x44($sp) -/* 0D05F8 800CF9F8 8FA80048 */ lw $t0, 0x48($sp) -/* 0D05FC 800CF9FC 27190001 */ addiu $t9, $t8, 1 -/* 0D0600 800CFA00 AFB90044 */ sw $t9, 0x44($sp) -/* 0D0604 800CFA04 8D090050 */ lw $t1, 0x50($t0) -/* 0D0608 800CFA08 0329082A */ slt $at, $t9, $t1 -/* 0D060C 800CFA0C 1420FFAF */ bnez $at, .L800CF8CC -/* 0D0610 800CFA10 00000000 */ nop -.L800CFA14: -/* 0D0614 800CFA14 8FAB005C */ lw $t3, 0x5c($sp) -/* 0D0618 800CFA18 240AFFFF */ li $t2, -1 -/* 0D061C 800CFA1C 24020005 */ li $v0, 5 -/* 0D0620 800CFA20 AD6A0000 */ sw $t2, ($t3) -.L800CFA24: -/* 0D0624 800CFA24 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D0628 800CFA28 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0D062C 800CFA2C 03E00008 */ jr $ra -/* 0D0630 800CFA30 00000000 */ nop - -/* 0D0634 800CFA34 00000000 */ nop -/* 0D0638 800CFA38 00000000 */ nop -/* 0D063C 800CFA3C 00000000 */ nop -glabel osPfsDeleteFile -/* 0D0640 800CFA40 27BDFEA0 */ addiu $sp, $sp, -0x160 -/* 0D0644 800CFA44 AFA50164 */ sw $a1, 0x164($sp) -/* 0D0648 800CFA48 97AE0166 */ lhu $t6, 0x166($sp) -/* 0D064C 800CFA4C AFBF0024 */ sw $ra, 0x24($sp) -/* 0D0650 800CFA50 AFA40160 */ sw $a0, 0x160($sp) -/* 0D0654 800CFA54 AFA60168 */ sw $a2, 0x168($sp) -/* 0D0658 800CFA58 AFA7016C */ sw $a3, 0x16c($sp) -/* 0D065C 800CFA5C 11C00004 */ beqz $t6, .L800CFA70 -/* 0D0660 800CFA60 A7A00032 */ sh $zero, 0x32($sp) -/* 0D0664 800CFA64 8FAF0168 */ lw $t7, 0x168($sp) -/* 0D0668 800CFA68 15E00003 */ bnez $t7, .L800CFA78 -/* 0D066C 800CFA6C 00000000 */ nop -.L800CFA70: -/* 0D0670 800CFA70 100000A7 */ b .L800CFD10 -/* 0D0674 800CFA74 24020005 */ li $v0, 5 -.L800CFA78: -/* 0D0678 800CFA78 8FB80160 */ lw $t8, 0x160($sp) -/* 0D067C 800CFA7C 8F190000 */ lw $t9, ($t8) -/* 0D0680 800CFA80 33280001 */ andi $t0, $t9, 1 -/* 0D0684 800CFA84 15000003 */ bnez $t0, .L800CFA94 -/* 0D0688 800CFA88 00000000 */ nop -/* 0D068C 800CFA8C 100000A0 */ b .L800CFD10 -/* 0D0690 800CFA90 24020005 */ li $v0, 5 -.L800CFA94: -/* 0D0694 800CFA94 0C035370 */ jal __osCheckId -/* 0D0698 800CFA98 8FA40160 */ lw $a0, 0x160($sp) -/* 0D069C 800CFA9C 24010002 */ li $at, 2 -/* 0D06A0 800CFAA0 14410003 */ bne $v0, $at, .L800CFAB0 -/* 0D06A4 800CFAA4 00000000 */ nop -/* 0D06A8 800CFAA8 10000099 */ b .L800CFD10 -/* 0D06AC 800CFAAC 24020002 */ li $v0, 2 -.L800CFAB0: -/* 0D06B0 800CFAB0 8FA90160 */ lw $t1, 0x160($sp) -/* 0D06B4 800CFAB4 912A0065 */ lbu $t2, 0x65($t1) -/* 0D06B8 800CFAB8 1140000A */ beqz $t2, .L800CFAE4 -/* 0D06BC 800CFABC 00000000 */ nop -/* 0D06C0 800CFAC0 A1200065 */ sb $zero, 0x65($t1) -/* 0D06C4 800CFAC4 0C035477 */ jal __osPfsSelectBank -/* 0D06C8 800CFAC8 8FA40160 */ lw $a0, 0x160($sp) -/* 0D06CC 800CFACC AFA20154 */ sw $v0, 0x154($sp) -/* 0D06D0 800CFAD0 8FAB0154 */ lw $t3, 0x154($sp) -/* 0D06D4 800CFAD4 11600003 */ beqz $t3, .L800CFAE4 -/* 0D06D8 800CFAD8 00000000 */ nop -/* 0D06DC 800CFADC 1000008C */ b .L800CFD10 -/* 0D06E0 800CFAE0 01601025 */ move $v0, $t3 -.L800CFAE4: -/* 0D06E4 800CFAE4 8FAC0170 */ lw $t4, 0x170($sp) -/* 0D06E8 800CFAE8 27AD015C */ addiu $t5, $sp, 0x15c -/* 0D06EC 800CFAEC AFAD0014 */ sw $t5, 0x14($sp) -/* 0D06F0 800CFAF0 8FA40160 */ lw $a0, 0x160($sp) -/* 0D06F4 800CFAF4 97A50166 */ lhu $a1, 0x166($sp) -/* 0D06F8 800CFAF8 8FA60168 */ lw $a2, 0x168($sp) -/* 0D06FC 800CFAFC 8FA7016C */ lw $a3, 0x16c($sp) -/* 0D0700 800CFB00 0C033E20 */ jal osPfsFindFile -/* 0D0704 800CFB04 AFAC0010 */ sw $t4, 0x10($sp) -/* 0D0708 800CFB08 AFA20154 */ sw $v0, 0x154($sp) -/* 0D070C 800CFB0C 8FAE0154 */ lw $t6, 0x154($sp) -/* 0D0710 800CFB10 11C00003 */ beqz $t6, .L800CFB20 -/* 0D0714 800CFB14 00000000 */ nop -/* 0D0718 800CFB18 1000007D */ b .L800CFD10 -/* 0D071C 800CFB1C 01C01025 */ move $v0, $t6 -.L800CFB20: -/* 0D0720 800CFB20 8FAF015C */ lw $t7, 0x15c($sp) -/* 0D0724 800CFB24 2401FFFF */ li $at, -1 -/* 0D0728 800CFB28 15E10003 */ bne $t7, $at, .L800CFB38 -/* 0D072C 800CFB2C 00000000 */ nop -/* 0D0730 800CFB30 10000077 */ b .L800CFD10 -/* 0D0734 800CFB34 24020005 */ li $v0, 5 -.L800CFB38: -/* 0D0738 800CFB38 8FB80160 */ lw $t8, 0x160($sp) -/* 0D073C 800CFB3C 8FA8015C */ lw $t0, 0x15c($sp) -/* 0D0740 800CFB40 27A70034 */ addiu $a3, $sp, 0x34 -/* 0D0744 800CFB44 8F19005C */ lw $t9, 0x5c($t8) -/* 0D0748 800CFB48 8F040004 */ lw $a0, 4($t8) -/* 0D074C 800CFB4C 8F050008 */ lw $a1, 8($t8) -/* 0D0750 800CFB50 0C03572C */ jal __osContRamRead -/* 0D0754 800CFB54 03283021 */ addu $a2, $t9, $t0 -/* 0D0758 800CFB58 AFA20154 */ sw $v0, 0x154($sp) -/* 0D075C 800CFB5C 8FAA0154 */ lw $t2, 0x154($sp) -/* 0D0760 800CFB60 11400003 */ beqz $t2, .L800CFB70 -/* 0D0764 800CFB64 00000000 */ nop -/* 0D0768 800CFB68 10000069 */ b .L800CFD10 -/* 0D076C 800CFB6C 01401025 */ move $v0, $t2 -.L800CFB70: -/* 0D0770 800CFB70 93A9003B */ lbu $t1, 0x3b($sp) -/* 0D0774 800CFB74 93AB003A */ lbu $t3, 0x3a($sp) -/* 0D0778 800CFB78 8FAC0160 */ lw $t4, 0x160($sp) -/* 0D077C 800CFB7C A3A9002F */ sb $t1, 0x2f($sp) -/* 0D0780 800CFB80 A3AB002E */ sb $t3, 0x2e($sp) -/* 0D0784 800CFB84 918D0064 */ lbu $t5, 0x64($t4) -/* 0D0788 800CFB88 016D082A */ slt $at, $t3, $t5 -/* 0D078C 800CFB8C 10200036 */ beqz $at, .L800CFC68 -/* 0D0790 800CFB90 00000000 */ nop -.L800CFB94: -/* 0D0794 800CFB94 8FA40160 */ lw $a0, 0x160($sp) -/* 0D0798 800CFB98 27A50054 */ addiu $a1, $sp, 0x54 -/* 0D079C 800CFB9C 00003025 */ move $a2, $zero -/* 0D07A0 800CFBA0 0C0353AF */ jal __osPfsRWInode -/* 0D07A4 800CFBA4 93A7002E */ lbu $a3, 0x2e($sp) -/* 0D07A8 800CFBA8 AFA20154 */ sw $v0, 0x154($sp) -/* 0D07AC 800CFBAC 8FAE0154 */ lw $t6, 0x154($sp) -/* 0D07B0 800CFBB0 11C00003 */ beqz $t6, .L800CFBC0 -/* 0D07B4 800CFBB4 00000000 */ nop -/* 0D07B8 800CFBB8 10000055 */ b .L800CFD10 -/* 0D07BC 800CFBBC 01C01025 */ move $v0, $t6 -.L800CFBC0: -/* 0D07C0 800CFBC0 93AF002E */ lbu $t7, 0x2e($sp) -/* 0D07C4 800CFBC4 27B80030 */ addiu $t8, $sp, 0x30 -/* 0D07C8 800CFBC8 24190001 */ li $t9, 1 -/* 0D07CC 800CFBCC AFB90018 */ sw $t9, 0x18($sp) -/* 0D07D0 800CFBD0 AFB80014 */ sw $t8, 0x14($sp) -/* 0D07D4 800CFBD4 8FA40160 */ lw $a0, 0x160($sp) -/* 0D07D8 800CFBD8 27A50054 */ addiu $a1, $sp, 0x54 -/* 0D07DC 800CFBDC 93A6002F */ lbu $a2, 0x2f($sp) -/* 0D07E0 800CFBE0 27A70032 */ addiu $a3, $sp, 0x32 -/* 0D07E4 800CFBE4 0C033F48 */ jal __osPfsReleasePages -/* 0D07E8 800CFBE8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0D07EC 800CFBEC AFA20154 */ sw $v0, 0x154($sp) -/* 0D07F0 800CFBF0 8FA80154 */ lw $t0, 0x154($sp) -/* 0D07F4 800CFBF4 11000003 */ beqz $t0, .L800CFC04 -/* 0D07F8 800CFBF8 00000000 */ nop -/* 0D07FC 800CFBFC 10000044 */ b .L800CFD10 -/* 0D0800 800CFC00 01001025 */ move $v0, $t0 -.L800CFC04: -/* 0D0804 800CFC04 8FA40160 */ lw $a0, 0x160($sp) -/* 0D0808 800CFC08 27A50054 */ addiu $a1, $sp, 0x54 -/* 0D080C 800CFC0C 24060001 */ li $a2, 1 -/* 0D0810 800CFC10 0C0353AF */ jal __osPfsRWInode -/* 0D0814 800CFC14 93A7002E */ lbu $a3, 0x2e($sp) -/* 0D0818 800CFC18 AFA20154 */ sw $v0, 0x154($sp) -/* 0D081C 800CFC1C 8FAA0154 */ lw $t2, 0x154($sp) -/* 0D0820 800CFC20 11400003 */ beqz $t2, .L800CFC30 -/* 0D0824 800CFC24 00000000 */ nop -/* 0D0828 800CFC28 10000039 */ b .L800CFD10 -/* 0D082C 800CFC2C 01401025 */ move $v0, $t2 -.L800CFC30: -/* 0D0830 800CFC30 97A90030 */ lhu $t1, 0x30($sp) -/* 0D0834 800CFC34 24010001 */ li $at, 1 -/* 0D0838 800CFC38 1121000B */ beq $t1, $at, .L800CFC68 -/* 0D083C 800CFC3C 00000000 */ nop -/* 0D0840 800CFC40 93AC0030 */ lbu $t4, 0x30($sp) -/* 0D0844 800CFC44 93AB0031 */ lbu $t3, 0x31($sp) -/* 0D0848 800CFC48 8FAE0160 */ lw $t6, 0x160($sp) -/* 0D084C 800CFC4C A3AC002E */ sb $t4, 0x2e($sp) -/* 0D0850 800CFC50 A3AB002F */ sb $t3, 0x2f($sp) -/* 0D0854 800CFC54 93AD002E */ lbu $t5, 0x2e($sp) -/* 0D0858 800CFC58 91CF0064 */ lbu $t7, 0x64($t6) -/* 0D085C 800CFC5C 01AF082A */ slt $at, $t5, $t7 -/* 0D0860 800CFC60 1420FFCC */ bnez $at, .L800CFB94 -/* 0D0864 800CFC64 00000000 */ nop -.L800CFC68: -/* 0D0868 800CFC68 8FB90160 */ lw $t9, 0x160($sp) -/* 0D086C 800CFC6C 93B8002E */ lbu $t8, 0x2e($sp) -/* 0D0870 800CFC70 93280064 */ lbu $t0, 0x64($t9) -/* 0D0874 800CFC74 0308082A */ slt $at, $t8, $t0 -/* 0D0878 800CFC78 14200003 */ bnez $at, .L800CFC88 -/* 0D087C 800CFC7C 00000000 */ nop -/* 0D0880 800CFC80 10000023 */ b .L800CFD10 -/* 0D0884 800CFC84 24020003 */ li $v0, 3 -.L800CFC88: -/* 0D0888 800CFC88 AFA00034 */ sw $zero, 0x34($sp) -/* 0D088C 800CFC8C A7A00038 */ sh $zero, 0x38($sp) -/* 0D0890 800CFC90 A7A0003A */ sh $zero, 0x3a($sp) -/* 0D0894 800CFC94 A7A0003E */ sh $zero, 0x3e($sp) -/* 0D0898 800CFC98 AFA00158 */ sw $zero, 0x158($sp) -.L800CFC9C: -/* 0D089C 800CFC9C 8FAA0158 */ lw $t2, 0x158($sp) -/* 0D08A0 800CFCA0 03AA4821 */ addu $t1, $sp, $t2 -/* 0D08A4 800CFCA4 A1200044 */ sb $zero, 0x44($t1) -/* 0D08A8 800CFCA8 8FAC0158 */ lw $t4, 0x158($sp) -/* 0D08AC 800CFCAC 258B0001 */ addiu $t3, $t4, 1 -/* 0D08B0 800CFCB0 29610010 */ slti $at, $t3, 0x10 -/* 0D08B4 800CFCB4 1420FFF9 */ bnez $at, .L800CFC9C -/* 0D08B8 800CFCB8 AFAB0158 */ sw $t3, 0x158($sp) -/* 0D08BC 800CFCBC AFA00158 */ sw $zero, 0x158($sp) -.L800CFCC0: -/* 0D08C0 800CFCC0 8FAE0158 */ lw $t6, 0x158($sp) -/* 0D08C4 800CFCC4 03AE6821 */ addu $t5, $sp, $t6 -/* 0D08C8 800CFCC8 A1A00040 */ sb $zero, 0x40($t5) -/* 0D08CC 800CFCCC 8FAF0158 */ lw $t7, 0x158($sp) -/* 0D08D0 800CFCD0 25F90001 */ addiu $t9, $t7, 1 -/* 0D08D4 800CFCD4 2B210004 */ slti $at, $t9, 4 -/* 0D08D8 800CFCD8 1420FFF9 */ bnez $at, .L800CFCC0 -/* 0D08DC 800CFCDC AFB90158 */ sw $t9, 0x158($sp) -/* 0D08E0 800CFCE0 8FB80160 */ lw $t8, 0x160($sp) -/* 0D08E4 800CFCE4 A3A0003C */ sb $zero, 0x3c($sp) -/* 0D08E8 800CFCE8 8FAA015C */ lw $t2, 0x15c($sp) -/* 0D08EC 800CFCEC 8F08005C */ lw $t0, 0x5c($t8) -/* 0D08F0 800CFCF0 8F050008 */ lw $a1, 8($t8) -/* 0D08F4 800CFCF4 8F040004 */ lw $a0, 4($t8) -/* 0D08F8 800CFCF8 AFA00010 */ sw $zero, 0x10($sp) -/* 0D08FC 800CFCFC 27A70034 */ addiu $a3, $sp, 0x34 -/* 0D0900 800CFD00 0C035CBC */ jal __osContRamWrite -/* 0D0904 800CFD04 010A3021 */ addu $a2, $t0, $t2 -/* 0D0908 800CFD08 AFA20154 */ sw $v0, 0x154($sp) -/* 0D090C 800CFD0C 8FA20154 */ lw $v0, 0x154($sp) -.L800CFD10: -/* 0D0910 800CFD10 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D0914 800CFD14 27BD0160 */ addiu $sp, $sp, 0x160 -/* 0D0918 800CFD18 03E00008 */ jr $ra -/* 0D091C 800CFD1C 00000000 */ nop - -glabel __osPfsReleasePages -/* 0D0920 800CFD20 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D0924 800CFD24 AFA60030 */ sw $a2, 0x30($sp) -/* 0D0928 800CFD28 93B80033 */ lbu $t8, 0x33($sp) -/* 0D092C 800CFD2C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D0930 800CFD30 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D0934 800CFD34 0018C840 */ sll $t9, $t8, 1 -/* 0D0938 800CFD38 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D093C 800CFD3C AFA40028 */ sw $a0, 0x28($sp) -/* 0D0940 800CFD40 AFA70034 */ sw $a3, 0x34($sp) -/* 0D0944 800CFD44 AFA0001C */ sw $zero, 0x1c($sp) -/* 0D0948 800CFD48 01F94021 */ addu $t0, $t7, $t9 -/* 0D094C 800CFD4C 95010000 */ lhu $at, ($t0) -/* 0D0950 800CFD50 27AE0024 */ addiu $t6, $sp, 0x24 -/* 0D0954 800CFD54 A5C10000 */ sh $at, ($t6) -/* 0D0958 800CFD58 97AC0024 */ lhu $t4, 0x24($sp) -/* 0D095C 800CFD5C 24010001 */ li $at, 1 -/* 0D0960 800CFD60 1181000B */ beq $t4, $at, .L800CFD90 -/* 0D0964 800CFD64 00000000 */ nop -/* 0D0968 800CFD68 93AD0024 */ lbu $t5, 0x24($sp) -/* 0D096C 800CFD6C 19A00004 */ blez $t5, .L800CFD80 -/* 0D0970 800CFD70 00000000 */ nop -/* 0D0974 800CFD74 24180001 */ li $t8, 1 -/* 0D0978 800CFD78 1000000E */ b .L800CFDB4 -/* 0D097C 800CFD7C AFB80018 */ sw $t8, 0x18($sp) -.L800CFD80: -/* 0D0980 800CFD80 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D0984 800CFD84 8DF90060 */ lw $t9, 0x60($t7) -/* 0D0988 800CFD88 1000000A */ b .L800CFDB4 -/* 0D098C 800CFD8C AFB90018 */ sw $t9, 0x18($sp) -.L800CFD90: -/* 0D0990 800CFD90 93AA003B */ lbu $t2, 0x3b($sp) -/* 0D0994 800CFD94 19400004 */ blez $t2, .L800CFDA8 -/* 0D0998 800CFD98 00000000 */ nop -/* 0D099C 800CFD9C 24090001 */ li $t1, 1 -/* 0D09A0 800CFDA0 10000004 */ b .L800CFDB4 -/* 0D09A4 800CFDA4 AFA90018 */ sw $t1, 0x18($sp) -.L800CFDA8: -/* 0D09A8 800CFDA8 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D09AC 800CFDAC 8DC80060 */ lw $t0, 0x60($t6) -/* 0D09B0 800CFDB0 AFA80018 */ sw $t0, 0x18($sp) -.L800CFDB4: -/* 0D09B4 800CFDB4 93AB0025 */ lbu $t3, 0x25($sp) -/* 0D09B8 800CFDB8 8FAC0018 */ lw $t4, 0x18($sp) -/* 0D09BC 800CFDBC 016C082A */ slt $at, $t3, $t4 -/* 0D09C0 800CFDC0 10200007 */ beqz $at, .L800CFDE0 -/* 0D09C4 800CFDC4 00000000 */ nop -/* 0D09C8 800CFDC8 97AD0024 */ lhu $t5, 0x24($sp) -/* 0D09CC 800CFDCC 24010001 */ li $at, 1 -/* 0D09D0 800CFDD0 11A10003 */ beq $t5, $at, .L800CFDE0 -/* 0D09D4 800CFDD4 00000000 */ nop -/* 0D09D8 800CFDD8 1000005B */ b .L800CFF48 -/* 0D09DC 800CFDDC 24020003 */ li $v0, 3 -.L800CFDE0: -/* 0D09E0 800CFDE0 27AF0024 */ addiu $t7, $sp, 0x24 -/* 0D09E4 800CFDE4 95E10000 */ lhu $at, ($t7) -/* 0D09E8 800CFDE8 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D09EC 800CFDEC A7010000 */ sh $at, ($t8) -/* 0D09F0 800CFDF0 8FA90040 */ lw $t1, 0x40($sp) -/* 0D09F4 800CFDF4 24010001 */ li $at, 1 -/* 0D09F8 800CFDF8 15210007 */ bne $t1, $at, .L800CFE18 -/* 0D09FC 800CFDFC 00000000 */ nop -/* 0D0A00 800CFE00 93AB0033 */ lbu $t3, 0x33($sp) -/* 0D0A04 800CFE04 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D0A08 800CFE08 240E0003 */ li $t6, 3 -/* 0D0A0C 800CFE0C 000B6040 */ sll $t4, $t3, 1 -/* 0D0A10 800CFE10 010C6821 */ addu $t5, $t0, $t4 -/* 0D0A14 800CFE14 A5AE0000 */ sh $t6, ($t5) -.L800CFE18: -/* 0D0A18 800CFE18 8FA40028 */ lw $a0, 0x28($sp) -/* 0D0A1C 800CFE1C 93A50033 */ lbu $a1, 0x33($sp) -/* 0D0A20 800CFE20 8FA60034 */ lw $a2, 0x34($sp) -/* 0D0A24 800CFE24 0C033FD6 */ jal __osBlockSum -/* 0D0A28 800CFE28 93A7003B */ lbu $a3, 0x3b($sp) -/* 0D0A2C 800CFE2C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D0A30 800CFE30 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D0A34 800CFE34 13200003 */ beqz $t9, .L800CFE44 -/* 0D0A38 800CFE38 00000000 */ nop -/* 0D0A3C 800CFE3C 10000042 */ b .L800CFF48 -/* 0D0A40 800CFE40 03201025 */ move $v0, $t9 -.L800CFE44: -/* 0D0A44 800CFE44 97B80024 */ lhu $t8, 0x24($sp) -/* 0D0A48 800CFE48 24010001 */ li $at, 1 -/* 0D0A4C 800CFE4C 17010003 */ bne $t8, $at, .L800CFE5C -/* 0D0A50 800CFE50 00000000 */ nop -/* 0D0A54 800CFE54 1000003C */ b .L800CFF48 -/* 0D0A58 800CFE58 00001025 */ move $v0, $zero -.L800CFE5C: -/* 0D0A5C 800CFE5C 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D0A60 800CFE60 97AF0024 */ lhu $t7, 0x24($sp) -/* 0D0A64 800CFE64 8D490060 */ lw $t1, 0x60($t2) -/* 0D0A68 800CFE68 01E9082A */ slt $at, $t7, $t1 -/* 0D0A6C 800CFE6C 14200025 */ bnez $at, .L800CFF04 -/* 0D0A70 800CFE70 00000000 */ nop -.L800CFE74: -/* 0D0A74 800CFE74 93AE0025 */ lbu $t6, 0x25($sp) -/* 0D0A78 800CFE78 97AB0024 */ lhu $t3, 0x24($sp) -/* 0D0A7C 800CFE7C 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D0A80 800CFE80 000E6840 */ sll $t5, $t6, 1 -/* 0D0A84 800CFE84 A7AB0020 */ sh $t3, 0x20($sp) -/* 0D0A88 800CFE88 018DC821 */ addu $t9, $t4, $t5 -/* 0D0A8C 800CFE8C 97210000 */ lhu $at, ($t9) -/* 0D0A90 800CFE90 27A80024 */ addiu $t0, $sp, 0x24 -/* 0D0A94 800CFE94 240F0003 */ li $t7, 3 -/* 0D0A98 800CFE98 A5010000 */ sh $at, ($t0) -/* 0D0A9C 800CFE9C 93AB0021 */ lbu $t3, 0x21($sp) -/* 0D0AA0 800CFEA0 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D0AA4 800CFEA4 000B7040 */ sll $t6, $t3, 1 -/* 0D0AA8 800CFEA8 012E6021 */ addu $t4, $t1, $t6 -/* 0D0AAC 800CFEAC A58F0000 */ sh $t7, ($t4) -/* 0D0AB0 800CFEB0 93A7003B */ lbu $a3, 0x3b($sp) -/* 0D0AB4 800CFEB4 8FA60034 */ lw $a2, 0x34($sp) -/* 0D0AB8 800CFEB8 93A50021 */ lbu $a1, 0x21($sp) -/* 0D0ABC 800CFEBC 0C033FD6 */ jal __osBlockSum -/* 0D0AC0 800CFEC0 8FA40028 */ lw $a0, 0x28($sp) -/* 0D0AC4 800CFEC4 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D0AC8 800CFEC8 8FAD001C */ lw $t5, 0x1c($sp) -/* 0D0ACC 800CFECC 11A00003 */ beqz $t5, .L800CFEDC -/* 0D0AD0 800CFED0 00000000 */ nop -/* 0D0AD4 800CFED4 1000001C */ b .L800CFF48 -/* 0D0AD8 800CFED8 01A01025 */ move $v0, $t5 -.L800CFEDC: -/* 0D0ADC 800CFEDC 93B80024 */ lbu $t8, 0x24($sp) -/* 0D0AE0 800CFEE0 93A8003B */ lbu $t0, 0x3b($sp) -/* 0D0AE4 800CFEE4 17080007 */ bne $t8, $t0, .L800CFF04 -/* 0D0AE8 800CFEE8 00000000 */ nop -/* 0D0AEC 800CFEEC 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D0AF0 800CFEF0 97B90024 */ lhu $t9, 0x24($sp) -/* 0D0AF4 800CFEF4 8D4B0060 */ lw $t3, 0x60($t2) -/* 0D0AF8 800CFEF8 032B082A */ slt $at, $t9, $t3 -/* 0D0AFC 800CFEFC 1020FFDD */ beqz $at, .L800CFE74 -/* 0D0B00 800CFF00 00000000 */ nop -.L800CFF04: -/* 0D0B04 800CFF04 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D0B08 800CFF08 97A90024 */ lhu $t1, 0x24($sp) -/* 0D0B0C 800CFF0C 8DCF0060 */ lw $t7, 0x60($t6) -/* 0D0B10 800CFF10 012F082A */ slt $at, $t1, $t7 -/* 0D0B14 800CFF14 14200007 */ bnez $at, .L800CFF34 -/* 0D0B18 800CFF18 00000000 */ nop -/* 0D0B1C 800CFF1C 93B80025 */ lbu $t8, 0x25($sp) -/* 0D0B20 800CFF20 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D0B24 800CFF24 240C0003 */ li $t4, 3 -/* 0D0B28 800CFF28 00184040 */ sll $t0, $t8, 1 -/* 0D0B2C 800CFF2C 01A85021 */ addu $t2, $t5, $t0 -/* 0D0B30 800CFF30 A54C0000 */ sh $t4, ($t2) -.L800CFF34: -/* 0D0B34 800CFF34 27AB0024 */ addiu $t3, $sp, 0x24 -/* 0D0B38 800CFF38 95610000 */ lhu $at, ($t3) -/* 0D0B3C 800CFF3C 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D0B40 800CFF40 00001025 */ move $v0, $zero -/* 0D0B44 800CFF44 A7210000 */ sh $at, ($t9) -.L800CFF48: -/* 0D0B48 800CFF48 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D0B4C 800CFF4C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D0B50 800CFF50 03E00008 */ jr $ra -/* 0D0B54 800CFF54 00000000 */ nop - -glabel __osBlockSum -/* 0D0B58 800CFF58 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D0B5C 800CFF5C AFA40040 */ sw $a0, 0x40($sp) -/* 0D0B60 800CFF60 AFA7004C */ sw $a3, 0x4c($sp) -/* 0D0B64 800CFF64 93AE004F */ lbu $t6, 0x4f($sp) -/* 0D0B68 800CFF68 8FAF0040 */ lw $t7, 0x40($sp) -/* 0D0B6C 800CFF6C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0B70 800CFF70 AFA50044 */ sw $a1, 0x44($sp) -/* 0D0B74 800CFF74 AFA60048 */ sw $a2, 0x48($sp) -/* 0D0B78 800CFF78 AFA00038 */ sw $zero, 0x38($sp) -/* 0D0B7C 800CFF7C A1EE0065 */ sb $t6, 0x65($t7) -/* 0D0B80 800CFF80 0C035477 */ jal __osPfsSelectBank -/* 0D0B84 800CFF84 8FA40040 */ lw $a0, 0x40($sp) -/* 0D0B88 800CFF88 AFA20038 */ sw $v0, 0x38($sp) -/* 0D0B8C 800CFF8C 8FB80038 */ lw $t8, 0x38($sp) -/* 0D0B90 800CFF90 13000003 */ beqz $t8, .L800CFFA0 -/* 0D0B94 800CFF94 00000000 */ nop -/* 0D0B98 800CFF98 10000027 */ b .L800D0038 -/* 0D0B9C 800CFF9C 03001025 */ move $v0, $t8 -.L800CFFA0: -/* 0D0BA0 800CFFA0 AFA0003C */ sw $zero, 0x3c($sp) -.L800CFFA4: -/* 0D0BA4 800CFFA4 93A80047 */ lbu $t0, 0x47($sp) -/* 0D0BA8 800CFFA8 8FB90040 */ lw $t9, 0x40($sp) -/* 0D0BAC 800CFFAC 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D0BB0 800CFFB0 000848C0 */ sll $t1, $t0, 3 -/* 0D0BB4 800CFFB4 27A70018 */ addiu $a3, $sp, 0x18 -/* 0D0BB8 800CFFB8 8F240004 */ lw $a0, 4($t9) -/* 0D0BBC 800CFFBC 8F250008 */ lw $a1, 8($t9) -/* 0D0BC0 800CFFC0 0C03572C */ jal __osContRamRead -/* 0D0BC4 800CFFC4 012A3021 */ addu $a2, $t1, $t2 -/* 0D0BC8 800CFFC8 AFA20038 */ sw $v0, 0x38($sp) -/* 0D0BCC 800CFFCC 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D0BD0 800CFFD0 11600007 */ beqz $t3, .L800CFFF0 -/* 0D0BD4 800CFFD4 00000000 */ nop -/* 0D0BD8 800CFFD8 8FAC0040 */ lw $t4, 0x40($sp) -/* 0D0BDC 800CFFDC A1800065 */ sb $zero, 0x65($t4) -/* 0D0BE0 800CFFE0 0C035477 */ jal __osPfsSelectBank -/* 0D0BE4 800CFFE4 8FA40040 */ lw $a0, 0x40($sp) -/* 0D0BE8 800CFFE8 10000013 */ b .L800D0038 -/* 0D0BEC 800CFFEC 8FA20038 */ lw $v0, 0x38($sp) -.L800CFFF0: -/* 0D0BF0 800CFFF0 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D0BF4 800CFFF4 0C03513C */ jal __osSumcalc -/* 0D0BF8 800CFFF8 24050020 */ li $a1, 32 -/* 0D0BFC 800CFFFC 8FAD0048 */ lw $t5, 0x48($sp) -/* 0D0C00 800D0000 95AE0000 */ lhu $t6, ($t5) -/* 0D0C04 800D0004 004E7821 */ addu $t7, $v0, $t6 -/* 0D0C08 800D0008 A5AF0000 */ sh $t7, ($t5) -/* 0D0C0C 800D000C 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D0C10 800D0010 27190001 */ addiu $t9, $t8, 1 -/* 0D0C14 800D0014 2B210008 */ slti $at, $t9, 8 -/* 0D0C18 800D0018 1420FFE2 */ bnez $at, .L800CFFA4 -/* 0D0C1C 800D001C AFB9003C */ sw $t9, 0x3c($sp) -/* 0D0C20 800D0020 8FA80040 */ lw $t0, 0x40($sp) -/* 0D0C24 800D0024 A1000065 */ sb $zero, 0x65($t0) -/* 0D0C28 800D0028 0C035477 */ jal __osPfsSelectBank -/* 0D0C2C 800D002C 8FA40040 */ lw $a0, 0x40($sp) -/* 0D0C30 800D0030 AFA20038 */ sw $v0, 0x38($sp) -/* 0D0C34 800D0034 8FA20038 */ lw $v0, 0x38($sp) -.L800D0038: -/* 0D0C38 800D0038 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D0C3C 800D003C 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D0C40 800D0040 03E00008 */ jr $ra -/* 0D0C44 800D0044 00000000 */ nop - -/* 0D0C48 800D0048 00000000 */ nop -/* 0D0C4C 800D004C 00000000 */ nop -glabel osEepromLongWrite -/* 0D0C50 800D0050 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D0C54 800D0054 AFA50044 */ sw $a1, 0x44($sp) -/* 0D0C58 800D0058 93AE0047 */ lbu $t6, 0x47($sp) -/* 0D0C5C 800D005C AFBF0024 */ sw $ra, 0x24($sp) -/* 0D0C60 800D0060 AFA40040 */ sw $a0, 0x40($sp) -/* 0D0C64 800D0064 29C10041 */ slti $at, $t6, 0x41 -/* 0D0C68 800D0068 AFA60048 */ sw $a2, 0x48($sp) -/* 0D0C6C 800D006C AFA7004C */ sw $a3, 0x4c($sp) -/* 0D0C70 800D0070 14200003 */ bnez $at, .L800D0080 -/* 0D0C74 800D0074 AFA0003C */ sw $zero, 0x3c($sp) -/* 0D0C78 800D0078 10000040 */ b .L800D017C -/* 0D0C7C 800D007C 2402FFFF */ li $v0, -1 -.L800D0080: -/* 0D0C80 800D0080 8FAF004C */ lw $t7, 0x4c($sp) -/* 0D0C84 800D0084 19E0003C */ blez $t7, .L800D0178 -/* 0D0C88 800D0088 00000000 */ nop -.L800D008C: -/* 0D0C8C 800D008C 8FA40040 */ lw $a0, 0x40($sp) -/* 0D0C90 800D0090 93A50047 */ lbu $a1, 0x47($sp) -/* 0D0C94 800D0094 0C035004 */ jal osEepromWrite -/* 0D0C98 800D0098 8FA60048 */ lw $a2, 0x48($sp) -/* 0D0C9C 800D009C AFA2003C */ sw $v0, 0x3c($sp) -/* 0D0CA0 800D00A0 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D0CA4 800D00A4 13000003 */ beqz $t8, .L800D00B4 -/* 0D0CA8 800D00A8 00000000 */ nop -/* 0D0CAC 800D00AC 10000033 */ b .L800D017C -/* 0D0CB0 800D00B0 03001025 */ move $v0, $t8 -.L800D00B4: -/* 0D0CB4 800D00B4 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D0CB8 800D00B8 93A90047 */ lbu $t1, 0x47($sp) -/* 0D0CBC 800D00BC 8FAB0048 */ lw $t3, 0x48($sp) -/* 0D0CC0 800D00C0 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f -/* 0D0CC4 800D00C4 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f -/* 0D0CC8 800D00C8 2728FFF8 */ addiu $t0, $t9, -8 -/* 0D0CCC 800D00CC 252A0001 */ addiu $t2, $t1, 1 -/* 0D0CD0 800D00D0 256C0008 */ addiu $t4, $t3, 8 -/* 0D0CD4 800D00D4 AFA8004C */ sw $t0, 0x4c($sp) -/* 0D0CD8 800D00D8 A3AA0047 */ sb $t2, 0x47($sp) -/* 0D0CDC 800D00DC AFAC0048 */ sw $t4, 0x48($sp) -/* 0D0CE0 800D00E0 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) -/* 0D0CE4 800D00E4 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) -/* 0D0CE8 800D00E8 24040000 */ li $a0, 0 -/* 0D0CEC 800D00EC 0C0337F6 */ jal __ll_mul -/* 0D0CF0 800D00F0 24052EE0 */ li $a1, 12000 -/* 0D0CF4 800D00F4 AFA20028 */ sw $v0, 0x28($sp) -/* 0D0CF8 800D00F8 AFA3002C */ sw $v1, 0x2c($sp) -/* 0D0CFC 800D00FC 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0D0D00 800D0100 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0D0D04 800D0104 8FA5002C */ lw $a1, 0x2c($sp) -/* 0D0D08 800D0108 8FA40028 */ lw $a0, 0x28($sp) -/* 0D0D0C 800D010C 0C0337B6 */ jal __ull_div -/* 0D0D10 800D0110 24060000 */ li $a2, 0 -/* 0D0D14 800D0114 3C0D8019 */ lui $t5, %hi(D_80196568) # $t5, 0x8019 -/* 0D0D18 800D0118 3C188019 */ lui $t8, %hi(D_80196580) # $t8, 0x8019 -/* 0D0D1C 800D011C 27186580 */ addiu $t8, %lo(D_80196580) # addiu $t8, $t8, 0x6580 -/* 0D0D20 800D0120 25AD6568 */ addiu $t5, %lo(D_80196568) # addiu $t5, $t5, 0x6568 -/* 0D0D24 800D0124 AFA20030 */ sw $v0, 0x30($sp) -/* 0D0D28 800D0128 AFA30034 */ sw $v1, 0x34($sp) -/* 0D0D2C 800D012C 3C048019 */ lui $a0, %hi(D_80196548) # $a0, 0x8019 -/* 0D0D30 800D0130 240E0000 */ li $t6, 0 -/* 0D0D34 800D0134 240F0000 */ li $t7, 0 -/* 0D0D38 800D0138 AFAF0014 */ sw $t7, 0x14($sp) -/* 0D0D3C 800D013C AFAE0010 */ sw $t6, 0x10($sp) -/* 0D0D40 800D0140 24846548 */ addiu $a0, %lo(D_80196548) # addiu $a0, $a0, 0x6548 -/* 0D0D44 800D0144 8FA70034 */ lw $a3, 0x34($sp) -/* 0D0D48 800D0148 8FA60030 */ lw $a2, 0x30($sp) -/* 0D0D4C 800D014C AFAD0018 */ sw $t5, 0x18($sp) -/* 0D0D50 800D0150 0C034E70 */ jal osSetTimer -/* 0D0D54 800D0154 AFB8001C */ sw $t8, 0x1c($sp) -/* 0D0D58 800D0158 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 -/* 0D0D5C 800D015C 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 -/* 0D0D60 800D0160 00002825 */ move $a1, $zero -/* 0D0D64 800D0164 0C0335D4 */ jal osRecvMesg -/* 0D0D68 800D0168 24060001 */ li $a2, 1 -/* 0D0D6C 800D016C 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D0D70 800D0170 1F20FFC6 */ bgtz $t9, .L800D008C -/* 0D0D74 800D0174 00000000 */ nop -.L800D0178: -/* 0D0D78 800D0178 8FA2003C */ lw $v0, 0x3c($sp) -.L800D017C: -/* 0D0D7C 800D017C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D0D80 800D0180 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D0D84 800D0184 03E00008 */ jr $ra -/* 0D0D88 800D0188 00000000 */ nop - -/* 0D0D8C 800D018C 00000000 */ nop -glabel osEepromLongRead -/* 0D0D90 800D0190 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D0D94 800D0194 AFA50044 */ sw $a1, 0x44($sp) -/* 0D0D98 800D0198 93AE0047 */ lbu $t6, 0x47($sp) -/* 0D0D9C 800D019C AFBF0024 */ sw $ra, 0x24($sp) -/* 0D0DA0 800D01A0 AFA40040 */ sw $a0, 0x40($sp) -/* 0D0DA4 800D01A4 29C10041 */ slti $at, $t6, 0x41 -/* 0D0DA8 800D01A8 AFA60048 */ sw $a2, 0x48($sp) -/* 0D0DAC 800D01AC AFA7004C */ sw $a3, 0x4c($sp) -/* 0D0DB0 800D01B0 14200003 */ bnez $at, .L800D01C0 -/* 0D0DB4 800D01B4 AFA0003C */ sw $zero, 0x3c($sp) -/* 0D0DB8 800D01B8 10000040 */ b .L800D02BC -/* 0D0DBC 800D01BC 2402FFFF */ li $v0, -1 -.L800D01C0: -/* 0D0DC0 800D01C0 8FAF004C */ lw $t7, 0x4c($sp) -/* 0D0DC4 800D01C4 19E0003C */ blez $t7, .L800D02B8 -/* 0D0DC8 800D01C8 00000000 */ nop -.L800D01CC: -/* 0D0DCC 800D01CC 8FA40040 */ lw $a0, 0x40($sp) -/* 0D0DD0 800D01D0 93A50047 */ lbu $a1, 0x47($sp) -/* 0D0DD4 800D01D4 0C035DA8 */ jal osEepromRead -/* 0D0DD8 800D01D8 8FA60048 */ lw $a2, 0x48($sp) -/* 0D0DDC 800D01DC AFA2003C */ sw $v0, 0x3c($sp) -/* 0D0DE0 800D01E0 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D0DE4 800D01E4 13000003 */ beqz $t8, .L800D01F4 -/* 0D0DE8 800D01E8 00000000 */ nop -/* 0D0DEC 800D01EC 10000033 */ b .L800D02BC -/* 0D0DF0 800D01F0 03001025 */ move $v0, $t8 -.L800D01F4: -/* 0D0DF4 800D01F4 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D0DF8 800D01F8 93A90047 */ lbu $t1, 0x47($sp) -/* 0D0DFC 800D01FC 8FAB0048 */ lw $t3, 0x48($sp) -/* 0D0E00 800D0200 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f -/* 0D0E04 800D0204 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f -/* 0D0E08 800D0208 2728FFF8 */ addiu $t0, $t9, -8 -/* 0D0E0C 800D020C 252A0001 */ addiu $t2, $t1, 1 -/* 0D0E10 800D0210 256C0008 */ addiu $t4, $t3, 8 -/* 0D0E14 800D0214 AFA8004C */ sw $t0, 0x4c($sp) -/* 0D0E18 800D0218 A3AA0047 */ sb $t2, 0x47($sp) -/* 0D0E1C 800D021C AFAC0048 */ sw $t4, 0x48($sp) -/* 0D0E20 800D0220 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) -/* 0D0E24 800D0224 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) -/* 0D0E28 800D0228 24040000 */ li $a0, 0 -/* 0D0E2C 800D022C 0C0337F6 */ jal __ll_mul -/* 0D0E30 800D0230 24052EE0 */ li $a1, 12000 -/* 0D0E34 800D0234 AFA20028 */ sw $v0, 0x28($sp) -/* 0D0E38 800D0238 AFA3002C */ sw $v1, 0x2c($sp) -/* 0D0E3C 800D023C 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0D0E40 800D0240 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0D0E44 800D0244 8FA5002C */ lw $a1, 0x2c($sp) -/* 0D0E48 800D0248 8FA40028 */ lw $a0, 0x28($sp) -/* 0D0E4C 800D024C 0C0337B6 */ jal __ull_div -/* 0D0E50 800D0250 24060000 */ li $a2, 0 -/* 0D0E54 800D0254 3C0D8019 */ lui $t5, %hi(D_80196568) # $t5, 0x8019 -/* 0D0E58 800D0258 3C188019 */ lui $t8, %hi(D_80196580) # $t8, 0x8019 -/* 0D0E5C 800D025C 27186580 */ addiu $t8, %lo(D_80196580) # addiu $t8, $t8, 0x6580 -/* 0D0E60 800D0260 25AD6568 */ addiu $t5, %lo(D_80196568) # addiu $t5, $t5, 0x6568 -/* 0D0E64 800D0264 AFA20030 */ sw $v0, 0x30($sp) -/* 0D0E68 800D0268 AFA30034 */ sw $v1, 0x34($sp) -/* 0D0E6C 800D026C 3C048019 */ lui $a0, %hi(D_80196548) # $a0, 0x8019 -/* 0D0E70 800D0270 240E0000 */ li $t6, 0 -/* 0D0E74 800D0274 240F0000 */ li $t7, 0 -/* 0D0E78 800D0278 AFAF0014 */ sw $t7, 0x14($sp) -/* 0D0E7C 800D027C AFAE0010 */ sw $t6, 0x10($sp) -/* 0D0E80 800D0280 24846548 */ addiu $a0, %lo(D_80196548) # addiu $a0, $a0, 0x6548 -/* 0D0E84 800D0284 8FA70034 */ lw $a3, 0x34($sp) -/* 0D0E88 800D0288 8FA60030 */ lw $a2, 0x30($sp) -/* 0D0E8C 800D028C AFAD0018 */ sw $t5, 0x18($sp) -/* 0D0E90 800D0290 0C034E70 */ jal osSetTimer -/* 0D0E94 800D0294 AFB8001C */ sw $t8, 0x1c($sp) -/* 0D0E98 800D0298 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 -/* 0D0E9C 800D029C 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 -/* 0D0EA0 800D02A0 00002825 */ move $a1, $zero -/* 0D0EA4 800D02A4 0C0335D4 */ jal osRecvMesg -/* 0D0EA8 800D02A8 24060001 */ li $a2, 1 -/* 0D0EAC 800D02AC 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D0EB0 800D02B0 1F20FFC6 */ bgtz $t9, .L800D01CC -/* 0D0EB4 800D02B4 00000000 */ nop -.L800D02B8: -/* 0D0EB8 800D02B8 8FA2003C */ lw $v0, 0x3c($sp) -.L800D02BC: -/* 0D0EBC 800D02BC 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D0EC0 800D02C0 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D0EC4 800D02C4 03E00008 */ jr $ra -/* 0D0EC8 800D02C8 00000000 */ nop - -/* 0D0ECC 800D02CC 00000000 */ nop -glabel osPfsReadWriteFile -/* 0D0ED0 800D02D0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D0ED4 800D02D4 AFA50024 */ sw $a1, 0x24($sp) -/* 0D0ED8 800D02D8 AFA7002C */ sw $a3, 0x2c($sp) -/* 0D0EDC 800D02DC 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D0EE0 800D02E0 8FAE0024 */ lw $t6, 0x24($sp) -/* 0D0EE4 800D02E4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0EE8 800D02E8 AFA40020 */ sw $a0, 0x20($sp) -/* 0D0EEC 800D02EC AFA60028 */ sw $a2, 0x28($sp) -/* 0D0EF0 800D02F0 93190000 */ lbu $t9, ($t8) -/* 0D0EF4 800D02F4 91CF0000 */ lbu $t7, ($t6) -/* 0D0EF8 800D02F8 11F9000E */ beq $t7, $t9, .L800D0334 -/* 0D0EFC 800D02FC 00000000 */ nop -/* 0D0F00 800D0300 A1D90000 */ sb $t9, ($t6) -/* 0D0F04 800D0304 8FA80024 */ lw $t0, 0x24($sp) -/* 0D0F08 800D0308 8FA50028 */ lw $a1, 0x28($sp) -/* 0D0F0C 800D030C 8FA40020 */ lw $a0, 0x20($sp) -/* 0D0F10 800D0310 00003025 */ move $a2, $zero -/* 0D0F14 800D0314 0C0353AF */ jal __osPfsRWInode -/* 0D0F18 800D0318 91070000 */ lbu $a3, ($t0) -/* 0D0F1C 800D031C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D0F20 800D0320 8FA9001C */ lw $t1, 0x1c($sp) -/* 0D0F24 800D0324 11200003 */ beqz $t1, .L800D0334 -/* 0D0F28 800D0328 00000000 */ nop -/* 0D0F2C 800D032C 10000023 */ b .L800D03BC -/* 0D0F30 800D0330 01201025 */ move $v0, $t1 -.L800D0334: -/* 0D0F34 800D0334 8FAA002C */ lw $t2, 0x2c($sp) -/* 0D0F38 800D0338 8FAB0028 */ lw $t3, 0x28($sp) -/* 0D0F3C 800D033C 914C0001 */ lbu $t4, 1($t2) -/* 0D0F40 800D0340 000C6840 */ sll $t5, $t4, 1 -/* 0D0F44 800D0344 016DC021 */ addu $t8, $t3, $t5 -/* 0D0F48 800D0348 97010000 */ lhu $at, ($t8) -/* 0D0F4C 800D034C A5410000 */ sh $at, ($t2) -/* 0D0F50 800D0350 8FA90020 */ lw $t1, 0x20($sp) -/* 0D0F54 800D0354 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D0F58 800D0358 8D2C0060 */ lw $t4, 0x60($t1) -/* 0D0F5C 800D035C 95C80000 */ lhu $t0, ($t6) -/* 0D0F60 800D0360 010C082A */ slt $at, $t0, $t4 -/* 0D0F64 800D0364 1420000B */ bnez $at, .L800D0394 -/* 0D0F68 800D0368 00000000 */ nop -/* 0D0F6C 800D036C 91CB0000 */ lbu $t3, ($t6) -/* 0D0F70 800D0370 912D0064 */ lbu $t5, 0x64($t1) -/* 0D0F74 800D0374 016D082A */ slt $at, $t3, $t5 -/* 0D0F78 800D0378 10200006 */ beqz $at, .L800D0394 -/* 0D0F7C 800D037C 00000000 */ nop -/* 0D0F80 800D0380 91CF0001 */ lbu $t7, 1($t6) -/* 0D0F84 800D0384 19E00003 */ blez $t7, .L800D0394 -/* 0D0F88 800D0388 29E10080 */ slti $at, $t7, 0x80 -/* 0D0F8C 800D038C 1420000A */ bnez $at, .L800D03B8 -/* 0D0F90 800D0390 00000000 */ nop -.L800D0394: -/* 0D0F94 800D0394 8FAA002C */ lw $t2, 0x2c($sp) -/* 0D0F98 800D0398 24010001 */ li $at, 1 -/* 0D0F9C 800D039C 95580000 */ lhu $t8, ($t2) -/* 0D0FA0 800D03A0 17010003 */ bne $t8, $at, .L800D03B0 -/* 0D0FA4 800D03A4 00000000 */ nop -/* 0D0FA8 800D03A8 10000004 */ b .L800D03BC -/* 0D0FAC 800D03AC 24020005 */ li $v0, 5 -.L800D03B0: -/* 0D0FB0 800D03B0 10000002 */ b .L800D03BC -/* 0D0FB4 800D03B4 24020003 */ li $v0, 3 -.L800D03B8: -/* 0D0FB8 800D03B8 00001025 */ move $v0, $zero -.L800D03BC: -/* 0D0FBC 800D03BC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D0FC0 800D03C0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D0FC4 800D03C4 03E00008 */ jr $ra -/* 0D0FC8 800D03C8 00000000 */ nop - -glabel func_800D03CC -/* 0D0FCC 800D03CC 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 0D0FD0 800D03D0 AFA40158 */ sw $a0, 0x158($sp) -/* 0D0FD4 800D03D4 8FAF0158 */ lw $t7, 0x158($sp) -/* 0D0FD8 800D03D8 AFA5015C */ sw $a1, 0x15c($sp) -/* 0D0FDC 800D03DC AFBF001C */ sw $ra, 0x1c($sp) -/* 0D0FE0 800D03E0 AFA60160 */ sw $a2, 0x160($sp) -/* 0D0FE4 800D03E4 AFA70164 */ sw $a3, 0x164($sp) -/* 0D0FE8 800D03E8 8FAE015C */ lw $t6, 0x15c($sp) -/* 0D0FEC 800D03EC 8DF80050 */ lw $t8, 0x50($t7) -/* 0D0FF0 800D03F0 01D8082A */ slt $at, $t6, $t8 -/* 0D0FF4 800D03F4 10200003 */ beqz $at, .L800D0404 -/* 0D0FF8 800D03F8 00000000 */ nop -/* 0D0FFC 800D03FC 05C10003 */ bgez $t6, .L800D040C -/* 0D1000 800D0400 00000000 */ nop -.L800D0404: -/* 0D1004 800D0404 100000ED */ b .L800D07BC -/* 0D1008 800D0408 24020005 */ li $v0, 5 -.L800D040C: -/* 0D100C 800D040C 8FB90168 */ lw $t9, 0x168($sp) -/* 0D1010 800D0410 1B200004 */ blez $t9, .L800D0424 -/* 0D1014 800D0414 00000000 */ nop -/* 0D1018 800D0418 3328001F */ andi $t0, $t9, 0x1f -/* 0D101C 800D041C 11000003 */ beqz $t0, .L800D042C -/* 0D1020 800D0420 00000000 */ nop -.L800D0424: -/* 0D1024 800D0424 100000E5 */ b .L800D07BC -/* 0D1028 800D0428 24020005 */ li $v0, 5 -.L800D042C: -/* 0D102C 800D042C 8FA90164 */ lw $t1, 0x164($sp) -/* 0D1030 800D0430 05200004 */ bltz $t1, .L800D0444 -/* 0D1034 800D0434 00000000 */ nop -/* 0D1038 800D0438 312A001F */ andi $t2, $t1, 0x1f -/* 0D103C 800D043C 11400003 */ beqz $t2, .L800D044C -/* 0D1040 800D0440 00000000 */ nop -.L800D0444: -/* 0D1044 800D0444 100000DD */ b .L800D07BC -/* 0D1048 800D0448 24020005 */ li $v0, 5 -.L800D044C: -/* 0D104C 800D044C 8FAB0158 */ lw $t3, 0x158($sp) -/* 0D1050 800D0450 8D6C0000 */ lw $t4, ($t3) -/* 0D1054 800D0454 318D0001 */ andi $t5, $t4, 1 -/* 0D1058 800D0458 15A00003 */ bnez $t5, .L800D0468 -/* 0D105C 800D045C 00000000 */ nop -/* 0D1060 800D0460 100000D6 */ b .L800D07BC -/* 0D1064 800D0464 24020005 */ li $v0, 5 -.L800D0468: -/* 0D1068 800D0468 0C035370 */ jal __osCheckId -/* 0D106C 800D046C 8FA40158 */ lw $a0, 0x158($sp) -/* 0D1070 800D0470 24010002 */ li $at, 2 -/* 0D1074 800D0474 14410003 */ bne $v0, $at, .L800D0484 -/* 0D1078 800D0478 00000000 */ nop -/* 0D107C 800D047C 100000CF */ b .L800D07BC -/* 0D1080 800D0480 24020002 */ li $v0, 2 -.L800D0484: -/* 0D1084 800D0484 8FAF0158 */ lw $t7, 0x158($sp) -/* 0D1088 800D0488 91F80065 */ lbu $t8, 0x65($t7) -/* 0D108C 800D048C 1300000A */ beqz $t8, .L800D04B8 -/* 0D1090 800D0490 00000000 */ nop -/* 0D1094 800D0494 A1E00065 */ sb $zero, 0x65($t7) -/* 0D1098 800D0498 0C035477 */ jal __osPfsSelectBank -/* 0D109C 800D049C 8FA40158 */ lw $a0, 0x158($sp) -/* 0D10A0 800D04A0 AFA20154 */ sw $v0, 0x154($sp) -/* 0D10A4 800D04A4 8FAE0154 */ lw $t6, 0x154($sp) -/* 0D10A8 800D04A8 11C00003 */ beqz $t6, .L800D04B8 -/* 0D10AC 800D04AC 00000000 */ nop -/* 0D10B0 800D04B0 100000C2 */ b .L800D07BC -/* 0D10B4 800D04B4 01C01025 */ move $v0, $t6 -.L800D04B8: -/* 0D10B8 800D04B8 8FB90158 */ lw $t9, 0x158($sp) -/* 0D10BC 800D04BC 8FA9015C */ lw $t1, 0x15c($sp) -/* 0D10C0 800D04C0 27A70134 */ addiu $a3, $sp, 0x134 -/* 0D10C4 800D04C4 8F28005C */ lw $t0, 0x5c($t9) -/* 0D10C8 800D04C8 8F240004 */ lw $a0, 4($t9) -/* 0D10CC 800D04CC 8F250008 */ lw $a1, 8($t9) -/* 0D10D0 800D04D0 0C03572C */ jal __osContRamRead -/* 0D10D4 800D04D4 01093021 */ addu $a2, $t0, $t1 -/* 0D10D8 800D04D8 AFA20154 */ sw $v0, 0x154($sp) -/* 0D10DC 800D04DC 8FAA0154 */ lw $t2, 0x154($sp) -/* 0D10E0 800D04E0 11400003 */ beqz $t2, .L800D04F0 -/* 0D10E4 800D04E4 00000000 */ nop -/* 0D10E8 800D04E8 100000B4 */ b .L800D07BC -/* 0D10EC 800D04EC 01401025 */ move $v0, $t2 -.L800D04F0: -/* 0D10F0 800D04F0 8FAC0158 */ lw $t4, 0x158($sp) -/* 0D10F4 800D04F4 97AB013A */ lhu $t3, 0x13a($sp) -/* 0D10F8 800D04F8 8D8D0060 */ lw $t5, 0x60($t4) -/* 0D10FC 800D04FC 016D082A */ slt $at, $t3, $t5 -/* 0D1100 800D0500 1420000B */ bnez $at, .L800D0530 -/* 0D1104 800D0504 00000000 */ nop -/* 0D1108 800D0508 93B8013A */ lbu $t8, 0x13a($sp) -/* 0D110C 800D050C 918F0064 */ lbu $t7, 0x64($t4) -/* 0D1110 800D0510 030F082A */ slt $at, $t8, $t7 -/* 0D1114 800D0514 10200006 */ beqz $at, .L800D0530 -/* 0D1118 800D0518 00000000 */ nop -/* 0D111C 800D051C 93AE013B */ lbu $t6, 0x13b($sp) -/* 0D1120 800D0520 19C00003 */ blez $t6, .L800D0530 -/* 0D1124 800D0524 29C10080 */ slti $at, $t6, 0x80 -/* 0D1128 800D0528 14200009 */ bnez $at, .L800D0550 -/* 0D112C 800D052C 00000000 */ nop -.L800D0530: -/* 0D1130 800D0530 97B9013A */ lhu $t9, 0x13a($sp) -/* 0D1134 800D0534 24010001 */ li $at, 1 -/* 0D1138 800D0538 17210003 */ bne $t9, $at, .L800D0548 -/* 0D113C 800D053C 00000000 */ nop -/* 0D1140 800D0540 1000009E */ b .L800D07BC -/* 0D1144 800D0544 24020005 */ li $v0, 5 -.L800D0548: -/* 0D1148 800D0548 1000009C */ b .L800D07BC -/* 0D114C 800D054C 24020003 */ li $v0, 3 -.L800D0550: -/* 0D1150 800D0550 93A80163 */ lbu $t0, 0x163($sp) -/* 0D1154 800D0554 15000007 */ bnez $t0, .L800D0574 -/* 0D1158 800D0558 00000000 */ nop -/* 0D115C 800D055C 93A9013C */ lbu $t1, 0x13c($sp) -/* 0D1160 800D0560 312A0002 */ andi $t2, $t1, 2 -/* 0D1164 800D0564 15400003 */ bnez $t2, .L800D0574 -/* 0D1168 800D0568 00000000 */ nop -/* 0D116C 800D056C 10000093 */ b .L800D07BC -/* 0D1170 800D0570 24020006 */ li $v0, 6 -.L800D0574: -/* 0D1174 800D0574 8FAD0164 */ lw $t5, 0x164($sp) -/* 0D1178 800D0578 97B8013A */ lhu $t8, 0x13a($sp) -/* 0D117C 800D057C 240B00FF */ li $t3, 255 -/* 0D1180 800D0580 A3AB0023 */ sb $t3, 0x23($sp) -/* 0D1184 800D0584 05A10003 */ bgez $t5, .L800D0594 -/* 0D1188 800D0588 000D6143 */ sra $t4, $t5, 5 -/* 0D118C 800D058C 25A1001F */ addiu $at, $t5, 0x1f -/* 0D1190 800D0590 00016143 */ sra $t4, $at, 5 -.L800D0594: -/* 0D1194 800D0594 AFAC002C */ sw $t4, 0x2c($sp) -/* 0D1198 800D0598 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D119C 800D059C A7B80030 */ sh $t8, 0x30($sp) -/* 0D11A0 800D05A0 29E10008 */ slti $at, $t7, 8 -/* 0D11A4 800D05A4 14200013 */ bnez $at, .L800D05F4 -/* 0D11A8 800D05A8 00000000 */ nop -.L800D05AC: -/* 0D11AC 800D05AC 8FA40158 */ lw $a0, 0x158($sp) -/* 0D11B0 800D05B0 27A50023 */ addiu $a1, $sp, 0x23 -/* 0D11B4 800D05B4 27A60034 */ addiu $a2, $sp, 0x34 -/* 0D11B8 800D05B8 0C0340B4 */ jal osPfsReadWriteFile -/* 0D11BC 800D05BC 27A70030 */ addiu $a3, $sp, 0x30 -/* 0D11C0 800D05C0 AFA20154 */ sw $v0, 0x154($sp) -/* 0D11C4 800D05C4 8FAE0154 */ lw $t6, 0x154($sp) -/* 0D11C8 800D05C8 11C00003 */ beqz $t6, .L800D05D8 -/* 0D11CC 800D05CC 00000000 */ nop -/* 0D11D0 800D05D0 1000007A */ b .L800D07BC -/* 0D11D4 800D05D4 01C01025 */ move $v0, $t6 -.L800D05D8: -/* 0D11D8 800D05D8 8FB9002C */ lw $t9, 0x2c($sp) -/* 0D11DC 800D05DC 2728FFF8 */ addiu $t0, $t9, -8 -/* 0D11E0 800D05E0 AFA8002C */ sw $t0, 0x2c($sp) -/* 0D11E4 800D05E4 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D11E8 800D05E8 29210008 */ slti $at, $t1, 8 -/* 0D11EC 800D05EC 1020FFEF */ beqz $at, .L800D05AC -/* 0D11F0 800D05F0 00000000 */ nop -.L800D05F4: -/* 0D11F4 800D05F4 8FAA0168 */ lw $t2, 0x168($sp) -/* 0D11F8 800D05F8 8FAD016C */ lw $t5, 0x16c($sp) -/* 0D11FC 800D05FC 05410003 */ bgez $t2, .L800D060C -/* 0D1200 800D0600 000A5943 */ sra $t3, $t2, 5 -/* 0D1204 800D0604 2541001F */ addiu $at, $t2, 0x1f -/* 0D1208 800D0608 00015943 */ sra $t3, $at, 5 -.L800D060C: -/* 0D120C 800D060C AFAB0028 */ sw $t3, 0x28($sp) -/* 0D1210 800D0610 19600046 */ blez $t3, .L800D072C -/* 0D1214 800D0614 AFAD0024 */ sw $t5, 0x24($sp) -.L800D0618: -/* 0D1218 800D0618 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D121C 800D061C 24010008 */ li $at, 8 -/* 0D1220 800D0620 1581000D */ bne $t4, $at, .L800D0658 -/* 0D1224 800D0624 00000000 */ nop -/* 0D1228 800D0628 8FA40158 */ lw $a0, 0x158($sp) -/* 0D122C 800D062C 27A50023 */ addiu $a1, $sp, 0x23 -/* 0D1230 800D0630 27A60034 */ addiu $a2, $sp, 0x34 -/* 0D1234 800D0634 0C0340B4 */ jal osPfsReadWriteFile -/* 0D1238 800D0638 27A70030 */ addiu $a3, $sp, 0x30 -/* 0D123C 800D063C AFA20154 */ sw $v0, 0x154($sp) -/* 0D1240 800D0640 8FB80154 */ lw $t8, 0x154($sp) -/* 0D1244 800D0644 13000003 */ beqz $t8, .L800D0654 -/* 0D1248 800D0648 00000000 */ nop -/* 0D124C 800D064C 1000005B */ b .L800D07BC -/* 0D1250 800D0650 03001025 */ move $v0, $t8 -.L800D0654: -/* 0D1254 800D0654 AFA0002C */ sw $zero, 0x2c($sp) -.L800D0658: -/* 0D1258 800D0658 8FAF0158 */ lw $t7, 0x158($sp) -/* 0D125C 800D065C 93B90030 */ lbu $t9, 0x30($sp) -/* 0D1260 800D0660 91EE0065 */ lbu $t6, 0x65($t7) -/* 0D1264 800D0664 11D9000A */ beq $t6, $t9, .L800D0690 -/* 0D1268 800D0668 00000000 */ nop -/* 0D126C 800D066C A1F90065 */ sb $t9, 0x65($t7) -/* 0D1270 800D0670 0C035477 */ jal __osPfsSelectBank -/* 0D1274 800D0674 8FA40158 */ lw $a0, 0x158($sp) -/* 0D1278 800D0678 AFA20154 */ sw $v0, 0x154($sp) -/* 0D127C 800D067C 8FA80154 */ lw $t0, 0x154($sp) -/* 0D1280 800D0680 11000003 */ beqz $t0, .L800D0690 -/* 0D1284 800D0684 00000000 */ nop -/* 0D1288 800D0688 1000004C */ b .L800D07BC -/* 0D128C 800D068C 01001025 */ move $v0, $t0 -.L800D0690: -/* 0D1290 800D0690 93A90031 */ lbu $t1, 0x31($sp) -/* 0D1294 800D0694 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D1298 800D0698 93AC0163 */ lbu $t4, 0x163($sp) -/* 0D129C 800D069C 000950C0 */ sll $t2, $t1, 3 -/* 0D12A0 800D06A0 014D5821 */ addu $t3, $t2, $t5 -/* 0D12A4 800D06A4 15800009 */ bnez $t4, .L800D06CC -/* 0D12A8 800D06A8 A7AB0020 */ sh $t3, 0x20($sp) -/* 0D12AC 800D06AC 8FB80158 */ lw $t8, 0x158($sp) -/* 0D12B0 800D06B0 3166FFFF */ andi $a2, $t3, 0xffff -/* 0D12B4 800D06B4 8FA70024 */ lw $a3, 0x24($sp) -/* 0D12B8 800D06B8 8F040004 */ lw $a0, 4($t8) -/* 0D12BC 800D06BC 0C03572C */ jal __osContRamRead -/* 0D12C0 800D06C0 8F050008 */ lw $a1, 8($t8) -/* 0D12C4 800D06C4 10000009 */ b .L800D06EC -/* 0D12C8 800D06C8 AFA20154 */ sw $v0, 0x154($sp) -.L800D06CC: -/* 0D12CC 800D06CC 8FAE0158 */ lw $t6, 0x158($sp) -/* 0D12D0 800D06D0 97A60020 */ lhu $a2, 0x20($sp) -/* 0D12D4 800D06D4 8FA70024 */ lw $a3, 0x24($sp) -/* 0D12D8 800D06D8 8DC40004 */ lw $a0, 4($t6) -/* 0D12DC 800D06DC 8DC50008 */ lw $a1, 8($t6) -/* 0D12E0 800D06E0 0C035CBC */ jal __osContRamWrite -/* 0D12E4 800D06E4 AFA00010 */ sw $zero, 0x10($sp) -/* 0D12E8 800D06E8 AFA20154 */ sw $v0, 0x154($sp) -.L800D06EC: -/* 0D12EC 800D06EC 8FB90154 */ lw $t9, 0x154($sp) -/* 0D12F0 800D06F0 13200003 */ beqz $t9, .L800D0700 -/* 0D12F4 800D06F4 00000000 */ nop -/* 0D12F8 800D06F8 10000030 */ b .L800D07BC -/* 0D12FC 800D06FC 03201025 */ move $v0, $t9 -.L800D0700: -/* 0D1300 800D0700 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D1304 800D0704 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D1308 800D0708 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D130C 800D070C 25ACFFFF */ addiu $t4, $t5, -1 -/* 0D1310 800D0710 AFAC0028 */ sw $t4, 0x28($sp) -/* 0D1314 800D0714 8FB80028 */ lw $t8, 0x28($sp) -/* 0D1318 800D0718 25E80020 */ addiu $t0, $t7, 0x20 -/* 0D131C 800D071C 252A0001 */ addiu $t2, $t1, 1 -/* 0D1320 800D0720 AFA80024 */ sw $t0, 0x24($sp) -/* 0D1324 800D0724 1F00FFBC */ bgtz $t8, .L800D0618 -/* 0D1328 800D0728 AFAA002C */ sw $t2, 0x2c($sp) -.L800D072C: -/* 0D132C 800D072C 93AB0163 */ lbu $t3, 0x163($sp) -/* 0D1330 800D0730 24010001 */ li $at, 1 -/* 0D1334 800D0734 15610020 */ bne $t3, $at, .L800D07B8 -/* 0D1338 800D0738 00000000 */ nop -/* 0D133C 800D073C 93AE013C */ lbu $t6, 0x13c($sp) -/* 0D1340 800D0740 31D90002 */ andi $t9, $t6, 2 -/* 0D1344 800D0744 1720001C */ bnez $t9, .L800D07B8 -/* 0D1348 800D0748 00000000 */ nop -/* 0D134C 800D074C 8FA80158 */ lw $t0, 0x158($sp) -/* 0D1350 800D0750 35CF0002 */ ori $t7, $t6, 2 -/* 0D1354 800D0754 A3AF013C */ sb $t7, 0x13c($sp) -/* 0D1358 800D0758 A1000065 */ sb $zero, 0x65($t0) -/* 0D135C 800D075C 0C035477 */ jal __osPfsSelectBank -/* 0D1360 800D0760 8FA40158 */ lw $a0, 0x158($sp) -/* 0D1364 800D0764 AFA20154 */ sw $v0, 0x154($sp) -/* 0D1368 800D0768 8FA90154 */ lw $t1, 0x154($sp) -/* 0D136C 800D076C 11200003 */ beqz $t1, .L800D077C -/* 0D1370 800D0770 00000000 */ nop -/* 0D1374 800D0774 10000011 */ b .L800D07BC -/* 0D1378 800D0778 01201025 */ move $v0, $t1 -.L800D077C: -/* 0D137C 800D077C 8FAA0158 */ lw $t2, 0x158($sp) -/* 0D1380 800D0780 8FAC015C */ lw $t4, 0x15c($sp) -/* 0D1384 800D0784 27A70134 */ addiu $a3, $sp, 0x134 -/* 0D1388 800D0788 8D4D005C */ lw $t5, 0x5c($t2) -/* 0D138C 800D078C 8D440004 */ lw $a0, 4($t2) -/* 0D1390 800D0790 8D450008 */ lw $a1, 8($t2) -/* 0D1394 800D0794 AFA00010 */ sw $zero, 0x10($sp) -/* 0D1398 800D0798 0C035CBC */ jal __osContRamWrite -/* 0D139C 800D079C 01AC3021 */ addu $a2, $t5, $t4 -/* 0D13A0 800D07A0 AFA20154 */ sw $v0, 0x154($sp) -/* 0D13A4 800D07A4 8FB80154 */ lw $t8, 0x154($sp) -/* 0D13A8 800D07A8 13000003 */ beqz $t8, .L800D07B8 -/* 0D13AC 800D07AC 00000000 */ nop -/* 0D13B0 800D07B0 10000002 */ b .L800D07BC -/* 0D13B4 800D07B4 03001025 */ move $v0, $t8 -.L800D07B8: -/* 0D13B8 800D07B8 00001025 */ move $v0, $zero -.L800D07BC: -/* 0D13BC 800D07BC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D13C0 800D07C0 27BD0158 */ addiu $sp, $sp, 0x158 -/* 0D13C4 800D07C4 03E00008 */ jr $ra -/* 0D13C8 800D07C8 00000000 */ nop - -/* 0D13CC 800D07CC 00000000 */ nop -glabel osPfsAllocateFile -/* 0D13D0 800D07D0 27BDFD88 */ addiu $sp, $sp, -0x278 -/* 0D13D4 800D07D4 AFA5027C */ sw $a1, 0x27c($sp) -/* 0D13D8 800D07D8 97AE027E */ lhu $t6, 0x27e($sp) -/* 0D13DC 800D07DC AFBF0024 */ sw $ra, 0x24($sp) -/* 0D13E0 800D07E0 AFA40278 */ sw $a0, 0x278($sp) -/* 0D13E4 800D07E4 AFA60280 */ sw $a2, 0x280($sp) -/* 0D13E8 800D07E8 AFA70284 */ sw $a3, 0x284($sp) -/* 0D13EC 800D07EC AFA00268 */ sw $zero, 0x268($sp) -/* 0D13F0 800D07F0 AFA00260 */ sw $zero, 0x260($sp) -/* 0D13F4 800D07F4 A3A0003A */ sb $zero, 0x3a($sp) -/* 0D13F8 800D07F8 11C00004 */ beqz $t6, .L800D080C -/* 0D13FC 800D07FC AFA00034 */ sw $zero, 0x34($sp) -/* 0D1400 800D0800 8FAF0280 */ lw $t7, 0x280($sp) -/* 0D1404 800D0804 15E00003 */ bnez $t7, .L800D0814 -/* 0D1408 800D0808 00000000 */ nop -.L800D080C: -/* 0D140C 800D080C 1000010D */ b .L800D0C44 -/* 0D1410 800D0810 24020005 */ li $v0, 5 -.L800D0814: -/* 0D1414 800D0814 8FB8028C */ lw $t8, 0x28c($sp) -/* 0D1418 800D0818 8FA90278 */ lw $t1, 0x278($sp) -/* 0D141C 800D081C 271900FF */ addiu $t9, $t8, 0xff -/* 0D1420 800D0820 07210003 */ bgez $t9, .L800D0830 -/* 0D1424 800D0824 00194203 */ sra $t0, $t9, 8 -/* 0D1428 800D0828 272100FF */ addiu $at, $t9, 0xff -/* 0D142C 800D082C 00014203 */ sra $t0, $at, 8 -.L800D0830: -/* 0D1430 800D0830 AFA8025C */ sw $t0, 0x25c($sp) -/* 0D1434 800D0834 8D2A0000 */ lw $t2, ($t1) -/* 0D1438 800D0838 314B0001 */ andi $t3, $t2, 1 -/* 0D143C 800D083C 15600003 */ bnez $t3, .L800D084C -/* 0D1440 800D0840 00000000 */ nop -/* 0D1444 800D0844 100000FF */ b .L800D0C44 -/* 0D1448 800D0848 24020005 */ li $v0, 5 -.L800D084C: -/* 0D144C 800D084C 0C035370 */ jal __osCheckId -/* 0D1450 800D0850 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1454 800D0854 24010002 */ li $at, 2 -/* 0D1458 800D0858 14410003 */ bne $v0, $at, .L800D0868 -/* 0D145C 800D085C 00000000 */ nop -/* 0D1460 800D0860 100000F8 */ b .L800D0C44 -/* 0D1464 800D0864 24020002 */ li $v0, 2 -.L800D0868: -/* 0D1468 800D0868 8FAC0288 */ lw $t4, 0x288($sp) -/* 0D146C 800D086C 8FAD0290 */ lw $t5, 0x290($sp) -/* 0D1470 800D0870 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1474 800D0874 97A5027E */ lhu $a1, 0x27e($sp) -/* 0D1478 800D0878 8FA60280 */ lw $a2, 0x280($sp) -/* 0D147C 800D087C 8FA70284 */ lw $a3, 0x284($sp) -/* 0D1480 800D0880 AFAC0010 */ sw $t4, 0x10($sp) -/* 0D1484 800D0884 0C033E20 */ jal osPfsFindFile -/* 0D1488 800D0888 AFAD0014 */ sw $t5, 0x14($sp) -/* 0D148C 800D088C AFA20260 */ sw $v0, 0x260($sp) -/* 0D1490 800D0890 8FAE0260 */ lw $t6, 0x260($sp) -/* 0D1494 800D0894 11C00005 */ beqz $t6, .L800D08AC -/* 0D1498 800D0898 24010005 */ li $at, 5 -/* 0D149C 800D089C 11C10003 */ beq $t6, $at, .L800D08AC -/* 0D14A0 800D08A0 00000000 */ nop -/* 0D14A4 800D08A4 100000E7 */ b .L800D0C44 -/* 0D14A8 800D08A8 01C01025 */ move $v0, $t6 -.L800D08AC: -/* 0D14AC 800D08AC 8FAF0290 */ lw $t7, 0x290($sp) -/* 0D14B0 800D08B0 2401FFFF */ li $at, -1 -/* 0D14B4 800D08B4 8DF80000 */ lw $t8, ($t7) -/* 0D14B8 800D08B8 13010003 */ beq $t8, $at, .L800D08C8 -/* 0D14BC 800D08BC 00000000 */ nop -/* 0D14C0 800D08C0 100000E0 */ b .L800D0C44 -/* 0D14C4 800D08C4 24020009 */ li $v0, 9 -.L800D08C8: -/* 0D14C8 800D08C8 8FA40278 */ lw $a0, 0x278($sp) -/* 0D14CC 800D08CC 0C033B48 */ jal osPfsFreeBlocks -/* 0D14D0 800D08D0 27A50030 */ addiu $a1, $sp, 0x30 -/* 0D14D4 800D08D4 8FB9028C */ lw $t9, 0x28c($sp) -/* 0D14D8 800D08D8 8FA80030 */ lw $t0, 0x30($sp) -/* 0D14DC 800D08DC AFA20260 */ sw $v0, 0x260($sp) -/* 0D14E0 800D08E0 0119082A */ slt $at, $t0, $t9 -/* 0D14E4 800D08E4 10200003 */ beqz $at, .L800D08F4 -/* 0D14E8 800D08E8 00000000 */ nop -/* 0D14EC 800D08EC 100000D5 */ b .L800D0C44 -/* 0D14F0 800D08F0 24020007 */ li $v0, 7 -.L800D08F4: -/* 0D14F4 800D08F4 8FA9025C */ lw $t1, 0x25c($sp) -/* 0D14F8 800D08F8 112000D1 */ beqz $t1, .L800D0C40 -/* 0D14FC 800D08FC 00000000 */ nop -/* 0D1500 800D0900 8FAA0290 */ lw $t2, 0x290($sp) -/* 0D1504 800D0904 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1508 800D0908 00002825 */ move $a1, $zero -/* 0D150C 800D090C 00003025 */ move $a2, $zero -/* 0D1510 800D0910 00003825 */ move $a3, $zero -/* 0D1514 800D0914 AFA00010 */ sw $zero, 0x10($sp) -/* 0D1518 800D0918 0C033E20 */ jal osPfsFindFile -/* 0D151C 800D091C AFAA0014 */ sw $t2, 0x14($sp) -/* 0D1520 800D0920 AFA20260 */ sw $v0, 0x260($sp) -/* 0D1524 800D0924 8FAB0260 */ lw $t3, 0x260($sp) -/* 0D1528 800D0928 11600005 */ beqz $t3, .L800D0940 -/* 0D152C 800D092C 24010005 */ li $at, 5 -/* 0D1530 800D0930 11610003 */ beq $t3, $at, .L800D0940 -/* 0D1534 800D0934 00000000 */ nop -/* 0D1538 800D0938 100000C2 */ b .L800D0C44 -/* 0D153C 800D093C 01601025 */ move $v0, $t3 -.L800D0940: -/* 0D1540 800D0940 8FAC0290 */ lw $t4, 0x290($sp) -/* 0D1544 800D0944 2401FFFF */ li $at, -1 -/* 0D1548 800D0948 8D8D0000 */ lw $t5, ($t4) -/* 0D154C 800D094C 15A10003 */ bne $t5, $at, .L800D095C -/* 0D1550 800D0950 00000000 */ nop -/* 0D1554 800D0954 100000BB */ b .L800D0C44 -/* 0D1558 800D0958 24020008 */ li $v0, 8 -.L800D095C: -/* 0D155C 800D095C 8FAE0278 */ lw $t6, 0x278($sp) -/* 0D1560 800D0960 A3A0003B */ sb $zero, 0x3b($sp) -/* 0D1564 800D0964 91CF0064 */ lbu $t7, 0x64($t6) -/* 0D1568 800D0968 19E00062 */ blez $t7, .L800D0AF4 -/* 0D156C 800D096C 00000000 */ nop -.L800D0970: -/* 0D1570 800D0970 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1574 800D0974 27A5015C */ addiu $a1, $sp, 0x15c -/* 0D1578 800D0978 00003025 */ move $a2, $zero -/* 0D157C 800D097C 0C0353AF */ jal __osPfsRWInode -/* 0D1580 800D0980 93A7003B */ lbu $a3, 0x3b($sp) -/* 0D1584 800D0984 AFA20260 */ sw $v0, 0x260($sp) -/* 0D1588 800D0988 8FB80260 */ lw $t8, 0x260($sp) -/* 0D158C 800D098C 13000003 */ beqz $t8, .L800D099C -/* 0D1590 800D0990 00000000 */ nop -/* 0D1594 800D0994 100000AB */ b .L800D0C44 -/* 0D1598 800D0998 03001025 */ move $v0, $t8 -.L800D099C: -/* 0D159C 800D099C 93B9003B */ lbu $t9, 0x3b($sp) -/* 0D15A0 800D09A0 27A80270 */ addiu $t0, $sp, 0x270 -/* 0D15A4 800D09A4 27A9026C */ addiu $t1, $sp, 0x26c -/* 0D15A8 800D09A8 AFA90018 */ sw $t1, 0x18($sp) -/* 0D15AC 800D09AC AFA80014 */ sw $t0, 0x14($sp) -/* 0D15B0 800D09B0 8FA40278 */ lw $a0, 0x278($sp) -/* 0D15B4 800D09B4 27A5015C */ addiu $a1, $sp, 0x15c -/* 0D15B8 800D09B8 8FA6025C */ lw $a2, 0x25c($sp) -/* 0D15BC 800D09BC 27A70274 */ addiu $a3, $sp, 0x274 -/* 0D15C0 800D09C0 0C034315 */ jal __osPfsDeclearPage -/* 0D15C4 800D09C4 AFB90010 */ sw $t9, 0x10($sp) -/* 0D15C8 800D09C8 AFA20260 */ sw $v0, 0x260($sp) -/* 0D15CC 800D09CC 8FAA0260 */ lw $t2, 0x260($sp) -/* 0D15D0 800D09D0 11400003 */ beqz $t2, .L800D09E0 -/* 0D15D4 800D09D4 00000000 */ nop -/* 0D15D8 800D09D8 1000009A */ b .L800D0C44 -/* 0D15DC 800D09DC 01401025 */ move $v0, $t2 -.L800D09E0: -/* 0D15E0 800D09E0 8FAB0274 */ lw $t3, 0x274($sp) -/* 0D15E4 800D09E4 2401FFFF */ li $at, -1 -/* 0D15E8 800D09E8 11610039 */ beq $t3, $at, .L800D0AD0 -/* 0D15EC 800D09EC 00000000 */ nop -/* 0D15F0 800D09F0 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D15F4 800D09F4 15800005 */ bnez $t4, .L800D0A0C -/* 0D15F8 800D09F8 00000000 */ nop -/* 0D15FC 800D09FC 93AD003B */ lbu $t5, 0x3b($sp) -/* 0D1600 800D0A00 A3AB002D */ sb $t3, 0x2d($sp) -/* 0D1604 800D0A04 10000016 */ b .L800D0A60 -/* 0D1608 800D0A08 A3AD002C */ sb $t5, 0x2c($sp) -.L800D0A0C: -/* 0D160C 800D0A0C 8FAF0268 */ lw $t7, 0x268($sp) -/* 0D1610 800D0A10 93AE003B */ lbu $t6, 0x3b($sp) -/* 0D1614 800D0A14 27A5005C */ addiu $a1, $sp, 0x5c -/* 0D1618 800D0A18 000FC040 */ sll $t8, $t7, 1 -/* 0D161C 800D0A1C 03B8C821 */ addu $t9, $sp, $t8 -/* 0D1620 800D0A20 A32E005C */ sb $t6, 0x5c($t9) -/* 0D1624 800D0A24 8FA90268 */ lw $t1, 0x268($sp) -/* 0D1628 800D0A28 8FA80274 */ lw $t0, 0x274($sp) -/* 0D162C 800D0A2C 24060001 */ li $a2, 1 -/* 0D1630 800D0A30 00095040 */ sll $t2, $t1, 1 -/* 0D1634 800D0A34 03AA6021 */ addu $t4, $sp, $t2 -/* 0D1638 800D0A38 A188005D */ sb $t0, 0x5d($t4) -/* 0D163C 800D0A3C 93A7003A */ lbu $a3, 0x3a($sp) -/* 0D1640 800D0A40 0C0353AF */ jal __osPfsRWInode -/* 0D1644 800D0A44 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1648 800D0A48 AFA20260 */ sw $v0, 0x260($sp) -/* 0D164C 800D0A4C 8FAB0260 */ lw $t3, 0x260($sp) -/* 0D1650 800D0A50 11600003 */ beqz $t3, .L800D0A60 -/* 0D1654 800D0A54 00000000 */ nop -/* 0D1658 800D0A58 1000007A */ b .L800D0C44 -/* 0D165C 800D0A5C 01601025 */ move $v0, $t3 -.L800D0A60: -/* 0D1660 800D0A60 AFA00264 */ sw $zero, 0x264($sp) -.L800D0A64: -/* 0D1664 800D0A64 8FAD0264 */ lw $t5, 0x264($sp) -/* 0D1668 800D0A68 000D7840 */ sll $t7, $t5, 1 -/* 0D166C 800D0A6C 03AF7021 */ addu $t6, $sp, $t7 -/* 0D1670 800D0A70 95CE015C */ lhu $t6, 0x15c($t6) -/* 0D1674 800D0A74 03AFC021 */ addu $t8, $sp, $t7 -/* 0D1678 800D0A78 A70E005C */ sh $t6, 0x5c($t8) -/* 0D167C 800D0A7C 8FB90264 */ lw $t9, 0x264($sp) -/* 0D1680 800D0A80 27290001 */ addiu $t1, $t9, 1 -/* 0D1684 800D0A84 29210080 */ slti $at, $t1, 0x80 -/* 0D1688 800D0A88 1420FFF6 */ bnez $at, .L800D0A64 -/* 0D168C 800D0A8C AFA90264 */ sw $t1, 0x264($sp) -/* 0D1690 800D0A90 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D1694 800D0A94 8FAD025C */ lw $t5, 0x25c($sp) -/* 0D1698 800D0A98 8FAE0270 */ lw $t6, 0x270($sp) -/* 0D169C 800D0A9C 8FA8026C */ lw $t0, 0x26c($sp) -/* 0D16A0 800D0AA0 93AA003B */ lbu $t2, 0x3b($sp) -/* 0D16A4 800D0AA4 258B0001 */ addiu $t3, $t4, 1 -/* 0D16A8 800D0AA8 01CD082A */ slt $at, $t6, $t5 -/* 0D16AC 800D0AAC AFAB0034 */ sw $t3, 0x34($sp) -/* 0D16B0 800D0AB0 AFA80268 */ sw $t0, 0x268($sp) -/* 0D16B4 800D0AB4 10200004 */ beqz $at, .L800D0AC8 -/* 0D16B8 800D0AB8 A3AA003A */ sb $t2, 0x3a($sp) -/* 0D16BC 800D0ABC 01AE7823 */ subu $t7, $t5, $t6 -/* 0D16C0 800D0AC0 10000003 */ b .L800D0AD0 -/* 0D16C4 800D0AC4 AFAF025C */ sw $t7, 0x25c($sp) -.L800D0AC8: -/* 0D16C8 800D0AC8 1000000A */ b .L800D0AF4 -/* 0D16CC 800D0ACC AFA0025C */ sw $zero, 0x25c($sp) -.L800D0AD0: -/* 0D16D0 800D0AD0 93B8003B */ lbu $t8, 0x3b($sp) -/* 0D16D4 800D0AD4 8FA80278 */ lw $t0, 0x278($sp) -/* 0D16D8 800D0AD8 27190001 */ addiu $t9, $t8, 1 -/* 0D16DC 800D0ADC A3B9003B */ sb $t9, 0x3b($sp) -/* 0D16E0 800D0AE0 910A0064 */ lbu $t2, 0x64($t0) -/* 0D16E4 800D0AE4 332900FF */ andi $t1, $t9, 0xff -/* 0D16E8 800D0AE8 012A082A */ slt $at, $t1, $t2 -/* 0D16EC 800D0AEC 1420FFA0 */ bnez $at, .L800D0970 -/* 0D16F0 800D0AF0 00000000 */ nop -.L800D0AF4: -/* 0D16F4 800D0AF4 8FAC025C */ lw $t4, 0x25c($sp) -/* 0D16F8 800D0AF8 1D800005 */ bgtz $t4, .L800D0B10 -/* 0D16FC 800D0AFC 00000000 */ nop -/* 0D1700 800D0B00 8FAB0274 */ lw $t3, 0x274($sp) -/* 0D1704 800D0B04 2401FFFF */ li $at, -1 -/* 0D1708 800D0B08 15610003 */ bne $t3, $at, .L800D0B18 -/* 0D170C 800D0B0C 00000000 */ nop -.L800D0B10: -/* 0D1710 800D0B10 1000004C */ b .L800D0C44 -/* 0D1714 800D0B14 24020003 */ li $v0, 3 -.L800D0B18: -/* 0D1718 800D0B18 8FAE0268 */ lw $t6, 0x268($sp) -/* 0D171C 800D0B1C 93AD003B */ lbu $t5, 0x3b($sp) -/* 0D1720 800D0B20 27A5005C */ addiu $a1, $sp, 0x5c -/* 0D1724 800D0B24 000E7840 */ sll $t7, $t6, 1 -/* 0D1728 800D0B28 03AFC021 */ addu $t8, $sp, $t7 -/* 0D172C 800D0B2C A30D005C */ sb $t5, 0x5c($t8) -/* 0D1730 800D0B30 8FA80268 */ lw $t0, 0x268($sp) -/* 0D1734 800D0B34 8FB90274 */ lw $t9, 0x274($sp) -/* 0D1738 800D0B38 24060001 */ li $a2, 1 -/* 0D173C 800D0B3C 00084840 */ sll $t1, $t0, 1 -/* 0D1740 800D0B40 03A95021 */ addu $t2, $sp, $t1 -/* 0D1744 800D0B44 A159005D */ sb $t9, 0x5d($t2) -/* 0D1748 800D0B48 93A7003A */ lbu $a3, 0x3a($sp) -/* 0D174C 800D0B4C 0C0353AF */ jal __osPfsRWInode -/* 0D1750 800D0B50 8FA40278 */ lw $a0, 0x278($sp) -/* 0D1754 800D0B54 AFA20260 */ sw $v0, 0x260($sp) -/* 0D1758 800D0B58 8FAC0260 */ lw $t4, 0x260($sp) -/* 0D175C 800D0B5C 11800003 */ beqz $t4, .L800D0B6C -/* 0D1760 800D0B60 00000000 */ nop -/* 0D1764 800D0B64 10000037 */ b .L800D0C44 -/* 0D1768 800D0B68 01801025 */ move $v0, $t4 -.L800D0B6C: -/* 0D176C 800D0B6C 97AB002C */ lhu $t3, 0x2c($sp) -/* 0D1770 800D0B70 97AE027E */ lhu $t6, 0x27e($sp) -/* 0D1774 800D0B74 8FAD0280 */ lw $t5, 0x280($sp) -/* 0D1778 800D0B78 A7A00046 */ sh $zero, 0x46($sp) -/* 0D177C 800D0B7C AFA00264 */ sw $zero, 0x264($sp) -/* 0D1780 800D0B80 A7AB0042 */ sh $t3, 0x42($sp) -/* 0D1784 800D0B84 A7AE0040 */ sh $t6, 0x40($sp) -/* 0D1788 800D0B88 AFAD003C */ sw $t5, 0x3c($sp) -.L800D0B8C: -/* 0D178C 800D0B8C 8FAF0284 */ lw $t7, 0x284($sp) -/* 0D1790 800D0B90 8FA80264 */ lw $t0, 0x264($sp) -/* 0D1794 800D0B94 91F80000 */ lbu $t8, ($t7) -/* 0D1798 800D0B98 03A8C821 */ addu $t9, $sp, $t0 -/* 0D179C 800D0B9C A338004C */ sb $t8, 0x4c($t9) -/* 0D17A0 800D0BA0 8FAC0264 */ lw $t4, 0x264($sp) -/* 0D17A4 800D0BA4 8FA90284 */ lw $t1, 0x284($sp) -/* 0D17A8 800D0BA8 258B0001 */ addiu $t3, $t4, 1 -/* 0D17AC 800D0BAC 29610010 */ slti $at, $t3, 0x10 -/* 0D17B0 800D0BB0 252A0001 */ addiu $t2, $t1, 1 -/* 0D17B4 800D0BB4 AFAB0264 */ sw $t3, 0x264($sp) -/* 0D17B8 800D0BB8 1420FFF4 */ bnez $at, .L800D0B8C -/* 0D17BC 800D0BBC AFAA0284 */ sw $t2, 0x284($sp) -/* 0D17C0 800D0BC0 AFA00264 */ sw $zero, 0x264($sp) -.L800D0BC4: -/* 0D17C4 800D0BC4 8FAE0288 */ lw $t6, 0x288($sp) -/* 0D17C8 800D0BC8 8FAF0264 */ lw $t7, 0x264($sp) -/* 0D17CC 800D0BCC 91CD0000 */ lbu $t5, ($t6) -/* 0D17D0 800D0BD0 03AFC021 */ addu $t8, $sp, $t7 -/* 0D17D4 800D0BD4 A30D0048 */ sb $t5, 0x48($t8) -/* 0D17D8 800D0BD8 8FA90264 */ lw $t1, 0x264($sp) -/* 0D17DC 800D0BDC 8FA80288 */ lw $t0, 0x288($sp) -/* 0D17E0 800D0BE0 252A0001 */ addiu $t2, $t1, 1 -/* 0D17E4 800D0BE4 29410004 */ slti $at, $t2, 4 -/* 0D17E8 800D0BE8 25190001 */ addiu $t9, $t0, 1 -/* 0D17EC 800D0BEC AFAA0264 */ sw $t2, 0x264($sp) -/* 0D17F0 800D0BF0 1420FFF4 */ bnez $at, .L800D0BC4 -/* 0D17F4 800D0BF4 AFB90288 */ sw $t9, 0x288($sp) -/* 0D17F8 800D0BF8 8FAC0278 */ lw $t4, 0x278($sp) -/* 0D17FC 800D0BFC 8FAB0290 */ lw $t3, 0x290($sp) -/* 0D1800 800D0C00 27A7003C */ addiu $a3, $sp, 0x3c -/* 0D1804 800D0C04 8D8D005C */ lw $t5, 0x5c($t4) -/* 0D1808 800D0C08 8D6E0000 */ lw $t6, ($t3) -/* 0D180C 800D0C0C 8D840004 */ lw $a0, 4($t4) -/* 0D1810 800D0C10 8D850008 */ lw $a1, 8($t4) -/* 0D1814 800D0C14 AFA00010 */ sw $zero, 0x10($sp) -/* 0D1818 800D0C18 0C035CBC */ jal __osContRamWrite -/* 0D181C 800D0C1C 01CD3021 */ addu $a2, $t6, $t5 -/* 0D1820 800D0C20 AFA20260 */ sw $v0, 0x260($sp) -/* 0D1824 800D0C24 8FAF0260 */ lw $t7, 0x260($sp) -/* 0D1828 800D0C28 11E00003 */ beqz $t7, .L800D0C38 -/* 0D182C 800D0C2C 00000000 */ nop -/* 0D1830 800D0C30 10000004 */ b .L800D0C44 -/* 0D1834 800D0C34 01E01025 */ move $v0, $t7 -.L800D0C38: -/* 0D1838 800D0C38 10000002 */ b .L800D0C44 -/* 0D183C 800D0C3C 8FA20260 */ lw $v0, 0x260($sp) -.L800D0C40: -/* 0D1840 800D0C40 24020005 */ li $v0, 5 -.L800D0C44: -/* 0D1844 800D0C44 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D1848 800D0C48 27BD0278 */ addiu $sp, $sp, 0x278 -/* 0D184C 800D0C4C 03E00008 */ jr $ra -/* 0D1850 800D0C50 00000000 */ nop - -glabel __osPfsDeclearPage -/* 0D1854 800D0C54 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0D1858 800D0C58 93AE0063 */ lbu $t6, 0x63($sp) -/* 0D185C 800D0C5C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D1860 800D0C60 AFA40050 */ sw $a0, 0x50($sp) -/* 0D1864 800D0C64 AFA50054 */ sw $a1, 0x54($sp) -/* 0D1868 800D0C68 AFA60058 */ sw $a2, 0x58($sp) -/* 0D186C 800D0C6C AFA7005C */ sw $a3, 0x5c($sp) -/* 0D1870 800D0C70 19C00004 */ blez $t6, .L800D0C84 -/* 0D1874 800D0C74 AFA0001C */ sw $zero, 0x1c($sp) -/* 0D1878 800D0C78 240F0001 */ li $t7, 1 -/* 0D187C 800D0C7C 10000004 */ b .L800D0C90 -/* 0D1880 800D0C80 AFAF0018 */ sw $t7, 0x18($sp) -.L800D0C84: -/* 0D1884 800D0C84 8FB80050 */ lw $t8, 0x50($sp) -/* 0D1888 800D0C88 8F190060 */ lw $t9, 0x60($t8) -/* 0D188C 800D0C8C AFB90018 */ sw $t9, 0x18($sp) -.L800D0C90: -/* 0D1890 800D0C90 8FA80018 */ lw $t0, 0x18($sp) -/* 0D1894 800D0C94 29010080 */ slti $at, $t0, 0x80 -/* 0D1898 800D0C98 1020000E */ beqz $at, .L800D0CD4 -/* 0D189C 800D0C9C AFA8004C */ sw $t0, 0x4c($sp) -.L800D0CA0: -/* 0D18A0 800D0CA0 8FAA004C */ lw $t2, 0x4c($sp) -/* 0D18A4 800D0CA4 8FA90054 */ lw $t1, 0x54($sp) -/* 0D18A8 800D0CA8 24010003 */ li $at, 3 -/* 0D18AC 800D0CAC 000A5840 */ sll $t3, $t2, 1 -/* 0D18B0 800D0CB0 012B6021 */ addu $t4, $t1, $t3 -/* 0D18B4 800D0CB4 958D0000 */ lhu $t5, ($t4) -/* 0D18B8 800D0CB8 11A10006 */ beq $t5, $at, .L800D0CD4 -/* 0D18BC 800D0CBC 00000000 */ nop -/* 0D18C0 800D0CC0 8FAE004C */ lw $t6, 0x4c($sp) -/* 0D18C4 800D0CC4 25CF0001 */ addiu $t7, $t6, 1 -/* 0D18C8 800D0CC8 29E10080 */ slti $at, $t7, 0x80 -/* 0D18CC 800D0CCC 1420FFF4 */ bnez $at, .L800D0CA0 -/* 0D18D0 800D0CD0 AFAF004C */ sw $t7, 0x4c($sp) -.L800D0CD4: -/* 0D18D4 800D0CD4 8FB8004C */ lw $t8, 0x4c($sp) -/* 0D18D8 800D0CD8 24010080 */ li $at, 128 -/* 0D18DC 800D0CDC 17010006 */ bne $t8, $at, .L800D0CF8 -/* 0D18E0 800D0CE0 00000000 */ nop -/* 0D18E4 800D0CE4 8FA8005C */ lw $t0, 0x5c($sp) -/* 0D18E8 800D0CE8 2419FFFF */ li $t9, -1 -/* 0D18EC 800D0CEC AD190000 */ sw $t9, ($t0) -/* 0D18F0 800D0CF0 1000006D */ b .L800D0EA8 -/* 0D18F4 800D0CF4 8FA2001C */ lw $v0, 0x1c($sp) -.L800D0CF8: -/* 0D18F8 800D0CF8 AFA00020 */ sw $zero, 0x20($sp) -.L800D0CFC: -/* 0D18FC 800D0CFC 8FAA0020 */ lw $t2, 0x20($sp) -/* 0D1900 800D0D00 03AA4821 */ addu $t1, $sp, $t2 -/* 0D1904 800D0D04 A1200024 */ sb $zero, 0x24($t1) -/* 0D1908 800D0D08 8FAB0020 */ lw $t3, 0x20($sp) -/* 0D190C 800D0D0C 256C0001 */ addiu $t4, $t3, 1 -/* 0D1910 800D0D10 29810020 */ slti $at, $t4, 0x20 -/* 0D1914 800D0D14 1420FFF9 */ bnez $at, .L800D0CFC -/* 0D1918 800D0D18 AFAC0020 */ sw $t4, 0x20($sp) -/* 0D191C 800D0D1C 8FAD004C */ lw $t5, 0x4c($sp) -/* 0D1920 800D0D20 8FAF0064 */ lw $t7, 0x64($sp) -/* 0D1924 800D0D24 240E0001 */ li $t6, 1 -/* 0D1928 800D0D28 AFAD0048 */ sw $t5, 0x48($sp) -/* 0D192C 800D0D2C ADEE0000 */ sw $t6, ($t7) -/* 0D1930 800D0D30 8FB8004C */ lw $t8, 0x4c($sp) -/* 0D1934 800D0D34 8FAA0064 */ lw $t2, 0x64($sp) -/* 0D1938 800D0D38 8FA80058 */ lw $t0, 0x58($sp) -/* 0D193C 800D0D3C 27190001 */ addiu $t9, $t8, 1 -/* 0D1940 800D0D40 AFB9004C */ sw $t9, 0x4c($sp) -/* 0D1944 800D0D44 AFB80044 */ sw $t8, 0x44($sp) -/* 0D1948 800D0D48 8D490000 */ lw $t1, ($t2) -/* 0D194C 800D0D4C 0128082A */ slt $at, $t1, $t0 -/* 0D1950 800D0D50 10200034 */ beqz $at, .L800D0E24 -/* 0D1954 800D0D54 2B210080 */ slti $at, $t9, 0x80 -/* 0D1958 800D0D58 10200032 */ beqz $at, .L800D0E24 -/* 0D195C 800D0D5C 00000000 */ nop -.L800D0D60: -/* 0D1960 800D0D60 8FAC004C */ lw $t4, 0x4c($sp) -/* 0D1964 800D0D64 8FAB0054 */ lw $t3, 0x54($sp) -/* 0D1968 800D0D68 24010003 */ li $at, 3 -/* 0D196C 800D0D6C 000C6840 */ sll $t5, $t4, 1 -/* 0D1970 800D0D70 016D7021 */ addu $t6, $t3, $t5 -/* 0D1974 800D0D74 95CF0000 */ lhu $t7, ($t6) -/* 0D1978 800D0D78 15E1001D */ bne $t7, $at, .L800D0DF0 -/* 0D197C 800D0D7C 00000000 */ nop -/* 0D1980 800D0D80 8FAA0044 */ lw $t2, 0x44($sp) -/* 0D1984 800D0D84 93B80063 */ lbu $t8, 0x63($sp) -/* 0D1988 800D0D88 27A60024 */ addiu $a2, $sp, 0x24 -/* 0D198C 800D0D8C 000A4040 */ sll $t0, $t2, 1 -/* 0D1990 800D0D90 01684821 */ addu $t1, $t3, $t0 -/* 0D1994 800D0D94 A1380000 */ sb $t8, ($t1) -/* 0D1998 800D0D98 8FAD0044 */ lw $t5, 0x44($sp) -/* 0D199C 800D0D9C 8FAC0054 */ lw $t4, 0x54($sp) -/* 0D19A0 800D0DA0 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D19A4 800D0DA4 000D7040 */ sll $t6, $t5, 1 -/* 0D19A8 800D0DA8 018E7821 */ addu $t7, $t4, $t6 -/* 0D19AC 800D0DAC A1F90001 */ sb $t9, 1($t7) -/* 0D19B0 800D0DB0 93A70063 */ lbu $a3, 0x63($sp) -/* 0D19B4 800D0DB4 8FA50044 */ lw $a1, 0x44($sp) -/* 0D19B8 800D0DB8 0C0343AE */ jal func_800D0EB8 -/* 0D19BC 800D0DBC 8FA40050 */ lw $a0, 0x50($sp) -/* 0D19C0 800D0DC0 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D19C4 800D0DC4 8FAA001C */ lw $t2, 0x1c($sp) -/* 0D19C8 800D0DC8 11400003 */ beqz $t2, .L800D0DD8 -/* 0D19CC 800D0DCC 00000000 */ nop -/* 0D19D0 800D0DD0 10000035 */ b .L800D0EA8 -/* 0D19D4 800D0DD4 01401025 */ move $v0, $t2 -.L800D0DD8: -/* 0D19D8 800D0DD8 8FAB004C */ lw $t3, 0x4c($sp) -/* 0D19DC 800D0DDC 8FA80064 */ lw $t0, 0x64($sp) -/* 0D19E0 800D0DE0 AFAB0044 */ sw $t3, 0x44($sp) -/* 0D19E4 800D0DE4 8D180000 */ lw $t8, ($t0) -/* 0D19E8 800D0DE8 27090001 */ addiu $t1, $t8, 1 -/* 0D19EC 800D0DEC AD090000 */ sw $t1, ($t0) -.L800D0DF0: -/* 0D19F0 800D0DF0 8FAD004C */ lw $t5, 0x4c($sp) -/* 0D19F4 800D0DF4 8FB90064 */ lw $t9, 0x64($sp) -/* 0D19F8 800D0DF8 8FAE0058 */ lw $t6, 0x58($sp) -/* 0D19FC 800D0DFC 25AC0001 */ addiu $t4, $t5, 1 -/* 0D1A00 800D0E00 AFAC004C */ sw $t4, 0x4c($sp) -/* 0D1A04 800D0E04 8F2F0000 */ lw $t7, ($t9) -/* 0D1A08 800D0E08 01EE082A */ slt $at, $t7, $t6 -/* 0D1A0C 800D0E0C 10200005 */ beqz $at, .L800D0E24 -/* 0D1A10 800D0E10 00000000 */ nop -/* 0D1A14 800D0E14 8FAA004C */ lw $t2, 0x4c($sp) -/* 0D1A18 800D0E18 29410080 */ slti $at, $t2, 0x80 -/* 0D1A1C 800D0E1C 1420FFD0 */ bnez $at, .L800D0D60 -/* 0D1A20 800D0E20 00000000 */ nop -.L800D0E24: -/* 0D1A24 800D0E24 8FAB0048 */ lw $t3, 0x48($sp) -/* 0D1A28 800D0E28 8FB8005C */ lw $t8, 0x5c($sp) -/* 0D1A2C 800D0E2C 24010080 */ li $at, 128 -/* 0D1A30 800D0E30 AF0B0000 */ sw $t3, ($t8) -/* 0D1A34 800D0E34 8FA9004C */ lw $t1, 0x4c($sp) -/* 0D1A38 800D0E38 1521000C */ bne $t1, $at, .L800D0E6C -/* 0D1A3C 800D0E3C 00000000 */ nop -/* 0D1A40 800D0E40 8FAD0064 */ lw $t5, 0x64($sp) -/* 0D1A44 800D0E44 8FA80058 */ lw $t0, 0x58($sp) -/* 0D1A48 800D0E48 8DAC0000 */ lw $t4, ($t5) -/* 0D1A4C 800D0E4C 0188082A */ slt $at, $t4, $t0 -/* 0D1A50 800D0E50 10200006 */ beqz $at, .L800D0E6C -/* 0D1A54 800D0E54 00000000 */ nop -/* 0D1A58 800D0E58 8FB90044 */ lw $t9, 0x44($sp) -/* 0D1A5C 800D0E5C 8FAE0068 */ lw $t6, 0x68($sp) -/* 0D1A60 800D0E60 ADD90000 */ sw $t9, ($t6) -/* 0D1A64 800D0E64 10000010 */ b .L800D0EA8 -/* 0D1A68 800D0E68 8FA2001C */ lw $v0, 0x1c($sp) -.L800D0E6C: -/* 0D1A6C 800D0E6C 8FAB0044 */ lw $t3, 0x44($sp) -/* 0D1A70 800D0E70 8FAA0054 */ lw $t2, 0x54($sp) -/* 0D1A74 800D0E74 240F0001 */ li $t7, 1 -/* 0D1A78 800D0E78 000BC040 */ sll $t8, $t3, 1 -/* 0D1A7C 800D0E7C 01584821 */ addu $t1, $t2, $t8 -/* 0D1A80 800D0E80 A52F0000 */ sh $t7, ($t1) -/* 0D1A84 800D0E84 93A70063 */ lbu $a3, 0x63($sp) -/* 0D1A88 800D0E88 8FA50044 */ lw $a1, 0x44($sp) -/* 0D1A8C 800D0E8C 8FA40050 */ lw $a0, 0x50($sp) -/* 0D1A90 800D0E90 0C0343AE */ jal func_800D0EB8 -/* 0D1A94 800D0E94 27A60024 */ addiu $a2, $sp, 0x24 -/* 0D1A98 800D0E98 8FAD0068 */ lw $t5, 0x68($sp) -/* 0D1A9C 800D0E9C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D1AA0 800D0EA0 ADA00000 */ sw $zero, ($t5) -/* 0D1AA4 800D0EA4 8FA2001C */ lw $v0, 0x1c($sp) -.L800D0EA8: -/* 0D1AA8 800D0EA8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D1AAC 800D0EAC 27BD0050 */ addiu $sp, $sp, 0x50 -/* 0D1AB0 800D0EB0 03E00008 */ jr $ra -/* 0D1AB4 800D0EB4 00000000 */ nop - -glabel func_800D0EB8 -/* 0D1AB8 800D0EB8 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D1ABC 800D0EBC AFA40028 */ sw $a0, 0x28($sp) -/* 0D1AC0 800D0EC0 AFA70034 */ sw $a3, 0x34($sp) -/* 0D1AC4 800D0EC4 93AE0037 */ lbu $t6, 0x37($sp) -/* 0D1AC8 800D0EC8 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D1ACC 800D0ECC AFBF001C */ sw $ra, 0x1c($sp) -/* 0D1AD0 800D0ED0 AFA5002C */ sw $a1, 0x2c($sp) -/* 0D1AD4 800D0ED4 AFA60030 */ sw $a2, 0x30($sp) -/* 0D1AD8 800D0ED8 AFA00020 */ sw $zero, 0x20($sp) -/* 0D1ADC 800D0EDC A1EE0065 */ sb $t6, 0x65($t7) -/* 0D1AE0 800D0EE0 0C035477 */ jal __osPfsSelectBank -/* 0D1AE4 800D0EE4 8FA40028 */ lw $a0, 0x28($sp) -/* 0D1AE8 800D0EE8 AFA20020 */ sw $v0, 0x20($sp) -/* 0D1AEC 800D0EEC 8FB80020 */ lw $t8, 0x20($sp) -/* 0D1AF0 800D0EF0 13000003 */ beqz $t8, .L800D0F00 -/* 0D1AF4 800D0EF4 00000000 */ nop -/* 0D1AF8 800D0EF8 1000001B */ b .L800D0F68 -/* 0D1AFC 800D0EFC 03001025 */ move $v0, $t8 -.L800D0F00: -/* 0D1B00 800D0F00 AFA00024 */ sw $zero, 0x24($sp) -.L800D0F04: -/* 0D1B04 800D0F04 8FB90028 */ lw $t9, 0x28($sp) -/* 0D1B08 800D0F08 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D1B0C 800D0F0C 8FAA0024 */ lw $t2, 0x24($sp) -/* 0D1B10 800D0F10 8F240004 */ lw $a0, 4($t9) -/* 0D1B14 800D0F14 8F250008 */ lw $a1, 8($t9) -/* 0D1B18 800D0F18 000848C0 */ sll $t1, $t0, 3 -/* 0D1B1C 800D0F1C AFA00010 */ sw $zero, 0x10($sp) -/* 0D1B20 800D0F20 8FA70030 */ lw $a3, 0x30($sp) -/* 0D1B24 800D0F24 0C035CBC */ jal __osContRamWrite -/* 0D1B28 800D0F28 012A3021 */ addu $a2, $t1, $t2 -/* 0D1B2C 800D0F2C AFA20020 */ sw $v0, 0x20($sp) -/* 0D1B30 800D0F30 8FAB0020 */ lw $t3, 0x20($sp) -/* 0D1B34 800D0F34 15600006 */ bnez $t3, .L800D0F50 -/* 0D1B38 800D0F38 00000000 */ nop -/* 0D1B3C 800D0F3C 8FAC0024 */ lw $t4, 0x24($sp) -/* 0D1B40 800D0F40 258D0001 */ addiu $t5, $t4, 1 -/* 0D1B44 800D0F44 29A10008 */ slti $at, $t5, 8 -/* 0D1B48 800D0F48 1420FFEE */ bnez $at, .L800D0F04 -/* 0D1B4C 800D0F4C AFAD0024 */ sw $t5, 0x24($sp) -.L800D0F50: -/* 0D1B50 800D0F50 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D1B54 800D0F54 A1C00065 */ sb $zero, 0x65($t6) -/* 0D1B58 800D0F58 0C035477 */ jal __osPfsSelectBank -/* 0D1B5C 800D0F5C 8FA40028 */ lw $a0, 0x28($sp) -/* 0D1B60 800D0F60 AFA20020 */ sw $v0, 0x20($sp) -/* 0D1B64 800D0F64 8FA20020 */ lw $v0, 0x20($sp) -.L800D0F68: -/* 0D1B68 800D0F68 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D1B6C 800D0F6C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D1B70 800D0F70 03E00008 */ jr $ra -/* 0D1B74 800D0F74 00000000 */ nop - -/* 0D1B78 800D0F78 00000000 */ nop -/* 0D1B7C 800D0F7C 00000000 */ nop -glabel osAiSetFrequency -/* 0D1B80 800D0F80 3C0E800F */ lui $t6, %hi(D_800EB438) # $t6, 0x800f -/* 0D1B84 800D0F84 8DCEB438 */ lw $t6, %lo(D_800EB438)($t6) -/* 0D1B88 800D0F88 44844000 */ mtc1 $a0, $f8 -/* 0D1B8C 800D0F8C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D1B90 800D0F90 448E2000 */ mtc1 $t6, $f4 -/* 0D1B94 800D0F94 468042A0 */ cvt.s.w $f10, $f8 -/* 0D1B98 800D0F98 04810005 */ bgez $a0, .L800D0FB0 -/* 0D1B9C 800D0F9C 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1BA0 800D0FA0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1BA4 800D0FA4 44818000 */ mtc1 $at, $f16 -/* 0D1BA8 800D0FA8 00000000 */ nop -/* 0D1BAC 800D0FAC 46105280 */ add.s $f10, $f10, $f16 -.L800D0FB0: -/* 0D1BB0 800D0FB0 460A3483 */ div.s $f18, $f6, $f10 -/* 0D1BB4 800D0FB4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1BB8 800D0FB8 44812000 */ mtc1 $at, $f4 -/* 0D1BBC 800D0FBC 24050001 */ li $a1, 1 -/* 0D1BC0 800D0FC0 46049300 */ add.s $f12, $f18, $f4 -/* 0D1BC4 800D0FC4 444FF800 */ cfc1 $t7, $31 -/* 0D1BC8 800D0FC8 44C5F800 */ ctc1 $a1, $31 -/* 0D1BCC 800D0FCC 00000000 */ nop -/* 0D1BD0 800D0FD0 46006224 */ cvt.w.s $f8, $f12 -/* 0D1BD4 800D0FD4 4445F800 */ cfc1 $a1, $31 -/* 0D1BD8 800D0FD8 00000000 */ nop -/* 0D1BDC 800D0FDC 30A10004 */ andi $at, $a1, 4 -/* 0D1BE0 800D0FE0 30A50078 */ andi $a1, $a1, 0x78 -/* 0D1BE4 800D0FE4 10A00013 */ beqz $a1, .L800D1034 -/* 0D1BE8 800D0FE8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D1BEC 800D0FEC 44814000 */ mtc1 $at, $f8 -/* 0D1BF0 800D0FF0 24050001 */ li $a1, 1 -/* 0D1BF4 800D0FF4 46086201 */ sub.s $f8, $f12, $f8 -/* 0D1BF8 800D0FF8 44C5F800 */ ctc1 $a1, $31 -/* 0D1BFC 800D0FFC 00000000 */ nop -/* 0D1C00 800D1000 46004224 */ cvt.w.s $f8, $f8 -/* 0D1C04 800D1004 4445F800 */ cfc1 $a1, $31 -/* 0D1C08 800D1008 00000000 */ nop -/* 0D1C0C 800D100C 30A10004 */ andi $at, $a1, 4 -/* 0D1C10 800D1010 30A50078 */ andi $a1, $a1, 0x78 -/* 0D1C14 800D1014 14A00005 */ bnez $a1, .L800D102C -/* 0D1C18 800D1018 00000000 */ nop -/* 0D1C1C 800D101C 44054000 */ mfc1 $a1, $f8 -/* 0D1C20 800D1020 3C018000 */ lui $at, 0x8000 -/* 0D1C24 800D1024 10000007 */ b .L800D1044 -/* 0D1C28 800D1028 00A12825 */ or $a1, $a1, $at -.L800D102C: -/* 0D1C2C 800D102C 10000005 */ b .L800D1044 -/* 0D1C30 800D1030 2405FFFF */ li $a1, -1 -.L800D1034: -/* 0D1C34 800D1034 44054000 */ mfc1 $a1, $f8 -/* 0D1C38 800D1038 00000000 */ nop -/* 0D1C3C 800D103C 04A0FFFB */ bltz $a1, .L800D102C -/* 0D1C40 800D1040 00000000 */ nop -.L800D1044: -/* 0D1C44 800D1044 44CFF800 */ ctc1 $t7, $31 -/* 0D1C48 800D1048 2CA10084 */ sltiu $at, $a1, 0x84 -/* 0D1C4C 800D104C 10200003 */ beqz $at, .L800D105C -/* 0D1C50 800D1050 00000000 */ nop -/* 0D1C54 800D1054 10000020 */ b .L800D10D8 -/* 0D1C58 800D1058 2402FFFF */ li $v0, -1 -.L800D105C: -/* 0D1C5C 800D105C 24010042 */ li $at, 66 -/* 0D1C60 800D1060 00A1001B */ divu $zero, $a1, $at -/* 0D1C64 800D1064 00003012 */ mflo $a2 -/* 0D1C68 800D1068 30D800FF */ andi $t8, $a2, 0xff -/* 0D1C6C 800D106C 03003025 */ move $a2, $t8 -/* 0D1C70 800D1070 28C10011 */ slti $at, $a2, 0x11 -/* 0D1C74 800D1074 14200002 */ bnez $at, .L800D1080 -/* 0D1C78 800D1078 00000000 */ nop -/* 0D1C7C 800D107C 24060010 */ li $a2, 16 -.L800D1080: -/* 0D1C80 800D1080 24B9FFFF */ addiu $t9, $a1, -1 -/* 0D1C84 800D1084 3C08A450 */ lui $t0, %hi(D_A4500010) # $t0, 0xa450 -/* 0D1C88 800D1088 AD190010 */ sw $t9, %lo(D_A4500010)($t0) -/* 0D1C8C 800D108C 24C9FFFF */ addiu $t1, $a2, -1 -/* 0D1C90 800D1090 3C0AA450 */ lui $t2, %hi(D_A4500014) # $t2, 0xa450 -/* 0D1C94 800D1094 AD490014 */ sw $t1, %lo(D_A4500014)($t2) -/* 0D1C98 800D1098 240B0001 */ li $t3, 1 -/* 0D1C9C 800D109C 3C0CA450 */ lui $t4, %hi(D_A4500008) # $t4, 0xa450 -/* 0D1CA0 800D10A0 AD8B0008 */ sw $t3, %lo(D_A4500008)($t4) -/* 0D1CA4 800D10A4 3C0D800F */ lui $t5, %hi(D_800EB438) # $t5, 0x800f -/* 0D1CA8 800D10A8 8DADB438 */ lw $t5, %lo(D_800EB438)($t5) -/* 0D1CAC 800D10AC 01A5001A */ div $zero, $t5, $a1 -/* 0D1CB0 800D10B0 00001012 */ mflo $v0 -/* 0D1CB4 800D10B4 14A00002 */ bnez $a1, .L800D10C0 -/* 0D1CB8 800D10B8 00000000 */ nop -/* 0D1CBC 800D10BC 0007000D */ break 7 -.L800D10C0: -/* 0D1CC0 800D10C0 2401FFFF */ li $at, -1 -/* 0D1CC4 800D10C4 14A10004 */ bne $a1, $at, .L800D10D8 -/* 0D1CC8 800D10C8 3C018000 */ lui $at, 0x8000 -/* 0D1CCC 800D10CC 15A10002 */ bne $t5, $at, .L800D10D8 -/* 0D1CD0 800D10D0 00000000 */ nop -/* 0D1CD4 800D10D4 0006000D */ break 6 -.L800D10D8: -/* 0D1CD8 800D10D8 03E00008 */ jr $ra -/* 0D1CDC 800D10DC 27BD0010 */ addiu $sp, $sp, 0x10 - -glabel osAiGetLength -/* 0D1CE0 800D10E0 3C0EA450 */ lui $t6, 0xa450 -/* 0D1CE4 800D10E4 03E00008 */ jr $ra -/* 0D1CE8 800D10E8 8DC20004 */ lw $v0, 4($t6) - -/* 0D1CEC 800D10EC 00000000 */ nop -glabel osAiSetNextBuffer -/* 0D1CF0 800D10F0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D1CF4 800D10F4 3C0F800F */ lui $t7, %hi(D_800EB370) # $t7, 0x800f -/* 0D1CF8 800D10F8 91EFB370 */ lbu $t7, %lo(D_800EB370)($t7) -/* 0D1CFC 800D10FC AFA40020 */ sw $a0, 0x20($sp) -/* 0D1D00 800D1100 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D1D04 800D1104 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D1D08 800D1108 AFA50024 */ sw $a1, 0x24($sp) -/* 0D1D0C 800D110C 11E00003 */ beqz $t7, .L800D111C -/* 0D1D10 800D1110 AFAE001C */ sw $t6, 0x1c($sp) -/* 0D1D14 800D1114 25D8E000 */ addiu $t8, $t6, -0x2000 -/* 0D1D18 800D1118 AFB8001C */ sw $t8, 0x1c($sp) -.L800D111C: -/* 0D1D1C 800D111C 8FB90020 */ lw $t9, 0x20($sp) -/* 0D1D20 800D1120 8FA80024 */ lw $t0, 0x24($sp) -/* 0D1D24 800D1124 24012000 */ li $at, 8192 -/* 0D1D28 800D1128 03284821 */ addu $t1, $t9, $t0 -/* 0D1D2C 800D112C 312A3FFF */ andi $t2, $t1, 0x3fff -/* 0D1D30 800D1130 15410005 */ bne $t2, $at, .L800D1148 -/* 0D1D34 800D1134 00000000 */ nop -/* 0D1D38 800D1138 240B0001 */ li $t3, 1 -/* 0D1D3C 800D113C 3C01800F */ lui $at, %hi(D_800EB370) # $at, 0x800f -/* 0D1D40 800D1140 10000003 */ b .L800D1150 -/* 0D1D44 800D1144 A02BB370 */ sb $t3, %lo(D_800EB370)($at) -.L800D1148: -/* 0D1D48 800D1148 3C01800F */ lui $at, %hi(D_800EB370) # $at, 0x800f -/* 0D1D4C 800D114C A020B370 */ sb $zero, %lo(D_800EB370)($at) -.L800D1150: -/* 0D1D50 800D1150 0C035E68 */ jal __osAiDeviceBusy -/* 0D1D54 800D1154 00000000 */ nop -/* 0D1D58 800D1158 10400003 */ beqz $v0, .L800D1168 -/* 0D1D5C 800D115C 00000000 */ nop -/* 0D1D60 800D1160 10000009 */ b .L800D1188 -/* 0D1D64 800D1164 2402FFFF */ li $v0, -1 -.L800D1168: -/* 0D1D68 800D1168 0C034E0C */ jal osVirtualToPhysical -/* 0D1D6C 800D116C 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D1D70 800D1170 3C0CA450 */ lui $t4, 0xa450 -/* 0D1D74 800D1174 AD820000 */ sw $v0, ($t4) -/* 0D1D78 800D1178 8FAD0024 */ lw $t5, 0x24($sp) -/* 0D1D7C 800D117C 3C0FA450 */ lui $t7, %hi(D_A4500004) # $t7, 0xa450 -/* 0D1D80 800D1180 00001025 */ move $v0, $zero -/* 0D1D84 800D1184 ADED0004 */ sw $t5, %lo(D_A4500004)($t7) -.L800D1188: -/* 0D1D88 800D1188 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D1D8C 800D118C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D1D90 800D1190 03E00008 */ jr $ra -/* 0D1D94 800D1194 00000000 */ nop - -/* 0D1D98 800D1198 00000000 */ nop -/* 0D1D9C 800D119C 00000000 */ nop -glabel osGetCount -/* 0D1DA0 800D11A0 40024800 */ mfc0 $v0, $9 -/* 0D1DA4 800D11A4 03E00008 */ jr $ra -/* 0D1DA8 800D11A8 00000000 */ nop - -/* 0D1DAC 800D11AC 00000000 */ nop -glabel __osExceptionPreamble -/* 0D1DB0 800D11B0 3C1A800D */ lui $k0, %hi(__osExceptionHandler) # $k0, 0x800d -/* 0D1DB4 800D11B4 275A11C0 */ addiu $k0, %lo(__osExceptionHandler) # addiu $k0, $k0, 0x11c0 -/* 0D1DB8 800D11B8 03400008 */ jr $k0 -/* 0D1DBC 800D11BC 00000000 */ nop -glabel __osExceptionHandler -/* 0D1DC0 800D11C0 3C1A8019 */ lui $k0, %hi(D_801976A0) # $k0, 0x8019 -/* 0D1DC4 800D11C4 275A76A0 */ addiu $k0, %lo(D_801976A0) # addiu $k0, $k0, 0x76a0 -/* 0D1DC8 800D11C8 FF410020 */ sd $at, 0x20($k0) -/* 0D1DCC 800D11CC 401B6000 */ mfc0 $k1, $12 -/* 0D1DD0 800D11D0 AF5B0118 */ sw $k1, 0x118($k0) -/* 0D1DD4 800D11D4 2401FFFC */ li $at, -4 -/* 0D1DD8 800D11D8 0361D824 */ and $k1, $k1, $at -/* 0D1DDC 800D11DC 409B6000 */ mtc0 $k1, $12 -/* 0D1DE0 800D11E0 FF480058 */ sd $t0, 0x58($k0) -/* 0D1DE4 800D11E4 FF490060 */ sd $t1, 0x60($k0) -/* 0D1DE8 800D11E8 FF4A0068 */ sd $t2, 0x68($k0) -/* 0D1DEC 800D11EC AF400018 */ sw $zero, 0x18($k0) -/* 0D1DF0 800D11F0 40086800 */ mfc0 $t0, $13 -/* 0D1DF4 800D11F4 03404025 */ move $t0, $k0 -/* 0D1DF8 800D11F8 3C1A800F */ lui $k0, %hi(D_800EB3B0) # $k0, 0x800f -/* 0D1DFC 800D11FC 8F5AB3B0 */ lw $k0, %lo(D_800EB3B0)($k0) -/* 0D1E00 800D1200 DD090020 */ ld $t1, 0x20($t0) -/* 0D1E04 800D1204 FF490020 */ sd $t1, 0x20($k0) -/* 0D1E08 800D1208 DD090118 */ ld $t1, 0x118($t0) -/* 0D1E0C 800D120C FF490118 */ sd $t1, 0x118($k0) -/* 0D1E10 800D1210 DD090058 */ ld $t1, 0x58($t0) -/* 0D1E14 800D1214 FF490058 */ sd $t1, 0x58($k0) -/* 0D1E18 800D1218 DD090060 */ ld $t1, 0x60($t0) -/* 0D1E1C 800D121C FF490060 */ sd $t1, 0x60($k0) -/* 0D1E20 800D1220 DD090068 */ ld $t1, 0x68($t0) -/* 0D1E24 800D1224 FF490068 */ sd $t1, 0x68($k0) -/* 0D1E28 800D1228 8F5B0118 */ lw $k1, 0x118($k0) -/* 0D1E2C 800D122C 00004012 */ mflo $t0 -/* 0D1E30 800D1230 FF480108 */ sd $t0, 0x108($k0) -/* 0D1E34 800D1234 00004010 */ mfhi $t0 -/* 0D1E38 800D1238 3369FF00 */ andi $t1, $k1, 0xff00 -/* 0D1E3C 800D123C FF420028 */ sd $v0, 0x28($k0) -/* 0D1E40 800D1240 FF430030 */ sd $v1, 0x30($k0) -/* 0D1E44 800D1244 FF440038 */ sd $a0, 0x38($k0) -/* 0D1E48 800D1248 FF450040 */ sd $a1, 0x40($k0) -/* 0D1E4C 800D124C FF460048 */ sd $a2, 0x48($k0) -/* 0D1E50 800D1250 FF470050 */ sd $a3, 0x50($k0) -/* 0D1E54 800D1254 FF4B0070 */ sd $t3, 0x70($k0) -/* 0D1E58 800D1258 FF4C0078 */ sd $t4, 0x78($k0) -/* 0D1E5C 800D125C FF4D0080 */ sd $t5, 0x80($k0) -/* 0D1E60 800D1260 FF4E0088 */ sd $t6, 0x88($k0) -/* 0D1E64 800D1264 FF4F0090 */ sd $t7, 0x90($k0) -/* 0D1E68 800D1268 FF500098 */ sd $s0, 0x98($k0) -/* 0D1E6C 800D126C FF5100A0 */ sd $s1, 0xa0($k0) -/* 0D1E70 800D1270 FF5200A8 */ sd $s2, 0xa8($k0) -/* 0D1E74 800D1274 FF5300B0 */ sd $s3, 0xb0($k0) -/* 0D1E78 800D1278 FF5400B8 */ sd $s4, 0xb8($k0) -/* 0D1E7C 800D127C FF5500C0 */ sd $s5, 0xc0($k0) -/* 0D1E80 800D1280 FF5600C8 */ sd $s6, 0xc8($k0) -/* 0D1E84 800D1284 FF5700D0 */ sd $s7, 0xd0($k0) -/* 0D1E88 800D1288 FF5800D8 */ sd $t8, 0xd8($k0) -/* 0D1E8C 800D128C FF5900E0 */ sd $t9, 0xe0($k0) -/* 0D1E90 800D1290 FF5C00E8 */ sd $gp, 0xe8($k0) -/* 0D1E94 800D1294 FF5D00F0 */ sd $sp, 0xf0($k0) -/* 0D1E98 800D1298 FF5E00F8 */ sd $fp, 0xf8($k0) -/* 0D1E9C 800D129C FF5F0100 */ sd $ra, 0x100($k0) -/* 0D1EA0 800D12A0 1120000D */ beqz $t1, .L800D12D8 -/* 0D1EA4 800D12A4 FF480110 */ sd $t0, 0x110($k0) -/* 0D1EA8 800D12A8 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D1EAC 800D12AC 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D1EB0 800D12B0 8D080000 */ lw $t0, ($t0) -/* 0D1EB4 800D12B4 2401FFFF */ li $at, -1 -/* 0D1EB8 800D12B8 01014026 */ xor $t0, $t0, $at -/* 0D1EBC 800D12BC 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff -/* 0D1EC0 800D12C0 3108FF00 */ andi $t0, $t0, 0xff00 -/* 0D1EC4 800D12C4 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff -/* 0D1EC8 800D12C8 01284825 */ or $t1, $t1, $t0 -/* 0D1ECC 800D12CC 0361D824 */ and $k1, $k1, $at -/* 0D1ED0 800D12D0 0369D825 */ or $k1, $k1, $t1 -/* 0D1ED4 800D12D4 AF5B0118 */ sw $k1, 0x118($k0) -.L800D12D8: -/* 0D1ED8 800D12D8 3C09A430 */ lui $t1, %hi(D_A430000C) # $t1, 0xa430 -/* 0D1EDC 800D12DC 8D29000C */ lw $t1, %lo(D_A430000C)($t1) -/* 0D1EE0 800D12E0 1120000B */ beqz $t1, .L800D1310 -/* 0D1EE4 800D12E4 00000000 */ nop -/* 0D1EE8 800D12E8 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D1EEC 800D12EC 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D1EF0 800D12F0 8D080000 */ lw $t0, ($t0) -/* 0D1EF4 800D12F4 8F4C0128 */ lw $t4, 0x128($k0) -/* 0D1EF8 800D12F8 2401FFFF */ li $at, -1 -/* 0D1EFC 800D12FC 00084402 */ srl $t0, $t0, 0x10 -/* 0D1F00 800D1300 01014026 */ xor $t0, $t0, $at -/* 0D1F04 800D1304 3108003F */ andi $t0, $t0, 0x3f -/* 0D1F08 800D1308 010C4024 */ and $t0, $t0, $t4 -/* 0D1F0C 800D130C 01284825 */ or $t1, $t1, $t0 -.L800D1310: -/* 0D1F10 800D1310 AF490128 */ sw $t1, 0x128($k0) -/* 0D1F14 800D1314 40087000 */ mfc0 $t0, $14 -/* 0D1F18 800D1318 AF48011C */ sw $t0, 0x11c($k0) -/* 0D1F1C 800D131C 8F480018 */ lw $t0, 0x18($k0) -/* 0D1F20 800D1320 11000014 */ beqz $t0, .L800D1374 -/* 0D1F24 800D1324 00000000 */ nop -/* 0D1F28 800D1328 4448F800 */ cfc1 $t0, $31 -/* 0D1F2C 800D132C 00000000 */ nop -/* 0D1F30 800D1330 AF48012C */ sw $t0, 0x12c($k0) -/* 0D1F34 800D1334 F7400130 */ sdc1 $f0, 0x130($k0) -/* 0D1F38 800D1338 F7420138 */ sdc1 $f2, 0x138($k0) -/* 0D1F3C 800D133C F7440140 */ sdc1 $f4, 0x140($k0) -/* 0D1F40 800D1340 F7460148 */ sdc1 $f6, 0x148($k0) -/* 0D1F44 800D1344 F7480150 */ sdc1 $f8, 0x150($k0) -/* 0D1F48 800D1348 F74A0158 */ sdc1 $f10, 0x158($k0) -/* 0D1F4C 800D134C F74C0160 */ sdc1 $f12, 0x160($k0) -/* 0D1F50 800D1350 F74E0168 */ sdc1 $f14, 0x168($k0) -/* 0D1F54 800D1354 F7500170 */ sdc1 $f16, 0x170($k0) -/* 0D1F58 800D1358 F7520178 */ sdc1 $f18, 0x178($k0) -/* 0D1F5C 800D135C F7540180 */ sdc1 $f20, 0x180($k0) -/* 0D1F60 800D1360 F7560188 */ sdc1 $f22, 0x188($k0) -/* 0D1F64 800D1364 F7580190 */ sdc1 $f24, 0x190($k0) -/* 0D1F68 800D1368 F75A0198 */ sdc1 $f26, 0x198($k0) -/* 0D1F6C 800D136C F75C01A0 */ sdc1 $f28, 0x1a0($k0) -/* 0D1F70 800D1370 F75E01A8 */ sdc1 $f30, 0x1a8($k0) -.L800D1374: -/* 0D1F74 800D1374 40086800 */ mfc0 $t0, $13 -/* 0D1F78 800D1378 AF480120 */ sw $t0, 0x120($k0) -/* 0D1F7C 800D137C 24090002 */ li $t1, 2 -/* 0D1F80 800D1380 A7490010 */ sh $t1, 0x10($k0) -/* 0D1F84 800D1384 3109007C */ andi $t1, $t0, 0x7c -/* 0D1F88 800D1388 240A0024 */ li $t2, 36 -/* 0D1F8C 800D138C 112A00B0 */ beq $t1, $t2, .L800D1650 -/* 0D1F90 800D1390 00000000 */ nop -/* 0D1F94 800D1394 240A002C */ li $t2, 44 -/* 0D1F98 800D1398 112A00FF */ beq $t1, $t2, .L800D1798 -/* 0D1F9C 800D139C 00000000 */ nop -/* 0D1FA0 800D13A0 240A0000 */ li $t2, 0 -/* 0D1FA4 800D13A4 152A00C3 */ bne $t1, $t2, .L800D16B4 -/* 0D1FA8 800D13A8 00000000 */ nop -/* 0D1FAC 800D13AC 03688024 */ and $s0, $k1, $t0 -.L800D13B0: -/* 0D1FB0 800D13B0 3209FF00 */ andi $t1, $s0, 0xff00 -/* 0D1FB4 800D13B4 00095302 */ srl $t2, $t1, 0xc -/* 0D1FB8 800D13B8 15400003 */ bnez $t2, .L800D13C8 -/* 0D1FBC 800D13BC 00000000 */ nop -/* 0D1FC0 800D13C0 00095202 */ srl $t2, $t1, 8 -/* 0D1FC4 800D13C4 214A0010 */ addi $t2, $t2, 0x10 -.L800D13C8: -/* 0D1FC8 800D13C8 3C01800F */ lui $at, %hi(D_800F3A00) # 0x800f -/* 0D1FCC 800D13CC 002A0821 */ addu $at, $at, $t2 -/* 0D1FD0 800D13D0 902A3A00 */ lbu $t2, %lo(D_800F3A00)($at) # 0x3a00($at) -/* 0D1FD4 800D13D4 3C01800F */ lui $at, %hi(D_800F3A20) -/* 0D1FD8 800D13D8 002A0821 */ addu $at, $at, $t2 -/* 0D1FDC 800D13DC 8C2A3A20 */ lw $t2, %lo(D_800F3A20)($at) -/* 0D1FE0 800D13E0 01400008 */ jr $t2 -/* 0D1FE4 800D13E4 00000000 */ nop -glabel L800D13E8 -/* 0D1FE8 800D13E8 2401DFFF */ li $at, -8193 -/* 0D1FEC 800D13EC 1000FFF0 */ b .L800D13B0 -/* 0D1FF0 800D13F0 02018024 */ and $s0, $s0, $at -glabel L800D13F4 -/* 0D1FF4 800D13F4 2401BFFF */ li $at, -16385 -/* 0D1FF8 800D13F8 1000FFED */ b .L800D13B0 -/* 0D1FFC 800D13FC 02018024 */ and $s0, $s0, $at -glabel L800D1400 -/* 0D2000 800D1400 40095800 */ mfc0 $t1, $11 -/* 0D2004 800D1404 40895800 */ mtc0 $t1, $11 -/* 0D2008 800D1408 0C0345B9 */ jal func_800D16E4 -/* 0D200C 800D140C 24040018 */ li $a0, 24 -/* 0D2010 800D1410 3C01FFFF */ lui $at, (0xFFFF7FFF >> 16) # lui $at, 0xffff -/* 0D2014 800D1414 34217FFF */ ori $at, (0xFFFF7FFF & 0xFFFF) # ori $at, $at, 0x7fff -/* 0D2018 800D1418 1000FFE5 */ b .L800D13B0 -/* 0D201C 800D141C 02018024 */ and $s0, $s0, $at -glabel L800D1420 -/* 0D2020 800D1420 2401F7FF */ li $at, -2049 -/* 0D2024 800D1424 02018024 */ and $s0, $s0, $at -/* 0D2028 800D1428 240A0004 */ li $t2, 4 -/* 0D202C 800D142C 3C01800F */ lui $at, %hi(D_800EB380) # 0x800f -/* 0D2030 800D1430 002A0821 */ addu $at, $at, $t2 -/* 0D2034 800D1434 8C2AB380 */ lw $t2, %lo(D_800EB380)($at) # -0x4c80($at) -/* 0D2038 800D1438 3C1D8019 */ lui $sp, %hi(D_801965E0) # $sp, 0x8019 -/* 0D203C 800D143C 27BD65E0 */ addiu $sp, %lo(D_801965E0) # addiu $sp, $sp, 0x65e0 -/* 0D2040 800D1440 24040010 */ li $a0, 16 -/* 0D2044 800D1444 11400007 */ beqz $t2, .L800D1464 -/* 0D2048 800D1448 27BD0FF0 */ addiu $sp, $sp, 0xff0 -/* 0D204C 800D144C 0140F809 */ jalr $t2 -/* 0D2050 800D1450 00000000 */ nop -/* 0D2054 800D1454 10400003 */ beqz $v0, .L800D1464 -/* 0D2058 800D1458 00000000 */ nop -/* 0D205C 800D145C 10000082 */ b .L800D1668 -/* 0D2060 800D1460 00000000 */ nop -.L800D1464: -/* 0D2064 800D1464 0C0345B9 */ jal func_800D16E4 -/* 0D2068 800D1468 00000000 */ nop -/* 0D206C 800D146C 1000FFD0 */ b .L800D13B0 -/* 0D2070 800D1470 00000000 */ nop -glabel L800D1474 -/* 0D2074 800D1474 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D2078 800D1478 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D207C 800D147C 8D080000 */ lw $t0, ($t0) -/* 0D2080 800D1480 3C11A430 */ lui $s1, %hi(D_A4300008) # $s1, 0xa430 -/* 0D2084 800D1484 8E310008 */ lw $s1, %lo(D_A4300008)($s1) -/* 0D2088 800D1488 00084402 */ srl $t0, $t0, 0x10 -/* 0D208C 800D148C 02288824 */ and $s1, $s1, $t0 -/* 0D2090 800D1490 32290001 */ andi $t1, $s1, 1 -/* 0D2094 800D1494 11200013 */ beqz $t1, .L800D14E4 -/* 0D2098 800D1498 00000000 */ nop -/* 0D209C 800D149C 3C0CA404 */ lui $t4, %hi(D_A4040010) # $t4, 0xa404 -/* 0D20A0 800D14A0 8D8C0010 */ lw $t4, %lo(D_A4040010)($t4) -/* 0D20A4 800D14A4 24090008 */ li $t1, 8 -/* 0D20A8 800D14A8 3C01A404 */ lui $at, %hi(D_A4040010) # $at, 0xa404 -/* 0D20AC 800D14AC 318C0300 */ andi $t4, $t4, 0x300 -/* 0D20B0 800D14B0 3231003E */ andi $s1, $s1, 0x3e -/* 0D20B4 800D14B4 11800007 */ beqz $t4, .L800D14D4 -/* 0D20B8 800D14B8 AC290010 */ sw $t1, %lo(D_A4040010)($at) -/* 0D20BC 800D14BC 0C0345B9 */ jal func_800D16E4 -/* 0D20C0 800D14C0 24040020 */ li $a0, 32 -/* 0D20C4 800D14C4 12200038 */ beqz $s1, .L800D15A8 -/* 0D20C8 800D14C8 00000000 */ nop -/* 0D20CC 800D14CC 10000005 */ b .L800D14E4 -/* 0D20D0 800D14D0 00000000 */ nop -.L800D14D4: -/* 0D20D4 800D14D4 0C0345B9 */ jal func_800D16E4 -/* 0D20D8 800D14D8 24040058 */ li $a0, 88 -/* 0D20DC 800D14DC 12200032 */ beqz $s1, .L800D15A8 -/* 0D20E0 800D14E0 00000000 */ nop -.L800D14E4: -/* 0D20E4 800D14E4 32290008 */ andi $t1, $s1, 8 -/* 0D20E8 800D14E8 11200007 */ beqz $t1, .L800D1508 -/* 0D20EC 800D14EC 3C01A440 */ lui $at, %hi(D_A4400010) # $at, 0xa440 -/* 0D20F0 800D14F0 32310037 */ andi $s1, $s1, 0x37 -/* 0D20F4 800D14F4 AC200010 */ sw $zero, %lo(D_A4400010)($at) -/* 0D20F8 800D14F8 0C0345B9 */ jal func_800D16E4 -/* 0D20FC 800D14FC 24040038 */ li $a0, 56 -/* 0D2100 800D1500 12200029 */ beqz $s1, .L800D15A8 -/* 0D2104 800D1504 00000000 */ nop -.L800D1508: -/* 0D2108 800D1508 32290004 */ andi $t1, $s1, 4 -/* 0D210C 800D150C 11200009 */ beqz $t1, .L800D1534 -/* 0D2110 800D1510 00000000 */ nop -/* 0D2114 800D1514 24090001 */ li $t1, 1 -/* 0D2118 800D1518 3C01A450 */ lui $at, %hi(D_A450000C) # $at, 0xa450 -/* 0D211C 800D151C 3231003B */ andi $s1, $s1, 0x3b -/* 0D2120 800D1520 AC29000C */ sw $t1, %lo(D_A450000C)($at) -/* 0D2124 800D1524 0C0345B9 */ jal func_800D16E4 -/* 0D2128 800D1528 24040030 */ li $a0, 48 -/* 0D212C 800D152C 1220001E */ beqz $s1, .L800D15A8 -/* 0D2130 800D1530 00000000 */ nop -.L800D1534: -/* 0D2134 800D1534 32290002 */ andi $t1, $s1, 2 -/* 0D2138 800D1538 11200007 */ beqz $t1, .L800D1558 -/* 0D213C 800D153C 3C01A480 */ lui $at, %hi(D_A4800018) # $at, 0xa480 -/* 0D2140 800D1540 3231003D */ andi $s1, $s1, 0x3d -/* 0D2144 800D1544 AC200018 */ sw $zero, %lo(D_A4800018)($at) -/* 0D2148 800D1548 0C0345B9 */ jal func_800D16E4 -/* 0D214C 800D154C 24040028 */ li $a0, 40 -/* 0D2150 800D1550 12200015 */ beqz $s1, .L800D15A8 -/* 0D2154 800D1554 00000000 */ nop -.L800D1558: -/* 0D2158 800D1558 32290010 */ andi $t1, $s1, 0x10 -/* 0D215C 800D155C 11200009 */ beqz $t1, .L800D1584 -/* 0D2160 800D1560 00000000 */ nop -/* 0D2164 800D1564 24090002 */ li $t1, 2 -/* 0D2168 800D1568 3C01A460 */ lui $at, %hi(D_A4600010) # $at, 0xa460 -/* 0D216C 800D156C 3231002F */ andi $s1, $s1, 0x2f -/* 0D2170 800D1570 AC290010 */ sw $t1, %lo(D_A4600010)($at) -/* 0D2174 800D1574 0C0345B9 */ jal func_800D16E4 -/* 0D2178 800D1578 24040040 */ li $a0, 64 -/* 0D217C 800D157C 1220000A */ beqz $s1, .L800D15A8 -/* 0D2180 800D1580 00000000 */ nop -.L800D1584: -/* 0D2184 800D1584 32290020 */ andi $t1, $s1, 0x20 -/* 0D2188 800D1588 11200007 */ beqz $t1, .L800D15A8 -/* 0D218C 800D158C 00000000 */ nop -/* 0D2190 800D1590 24090800 */ li $t1, 2048 -/* 0D2194 800D1594 3C01A430 */ lui $at, 0xa430 -/* 0D2198 800D1598 3231001F */ andi $s1, $s1, 0x1f -/* 0D219C 800D159C AC290000 */ sw $t1, ($at) -/* 0D21A0 800D15A0 0C0345B9 */ jal func_800D16E4 -/* 0D21A4 800D15A4 24040048 */ li $a0, 72 -.L800D15A8: -/* 0D21A8 800D15A8 2401FBFF */ li $at, -1025 -/* 0D21AC 800D15AC 1000FF80 */ b .L800D13B0 -/* 0D21B0 800D15B0 02018024 */ and $s0, $s0, $at -glabel L800D15B4 -/* 0D21B4 800D15B4 8F5B0118 */ lw $k1, 0x118($k0) -/* 0D21B8 800D15B8 2401EFFF */ li $at, -4097 -/* 0D21BC 800D15BC 3C09800F */ lui $t1, %hi(D_800EA5E8) # $t1, 0x800f -/* 0D21C0 800D15C0 0361D824 */ and $k1, $k1, $at -/* 0D21C4 800D15C4 AF5B0118 */ sw $k1, 0x118($k0) -/* 0D21C8 800D15C8 2529A5E8 */ addiu $t1, %lo(D_800EA5E8) # addiu $t1, $t1, -0x5a18 -/* 0D21CC 800D15CC 8D2A0000 */ lw $t2, ($t1) -/* 0D21D0 800D15D0 11400003 */ beqz $t2, .L800D15E0 -/* 0D21D4 800D15D4 2401EFFF */ li $at, -4097 -/* 0D21D8 800D15D8 10000023 */ b .L800D1668 -/* 0D21DC 800D15DC 02018024 */ and $s0, $s0, $at -.L800D15E0: -/* 0D21E0 800D15E0 240A0001 */ li $t2, 1 -/* 0D21E4 800D15E4 AD2A0000 */ sw $t2, ($t1) -/* 0D21E8 800D15E8 0C0345B9 */ jal func_800D16E4 -/* 0D21EC 800D15EC 24040070 */ li $a0, 112 -/* 0D21F0 800D15F0 3C0A800F */ lui $t2, %hi(D_800EB3A8) # $t2, 0x800f -/* 0D21F4 800D15F4 8D4AB3A8 */ lw $t2, %lo(D_800EB3A8)($t2) -/* 0D21F8 800D15F8 2401EFFF */ li $at, -4097 -/* 0D21FC 800D15FC 02018024 */ and $s0, $s0, $at -/* 0D2200 800D1600 8D5B0118 */ lw $k1, 0x118($t2) -/* 0D2204 800D1604 0361D824 */ and $k1, $k1, $at -/* 0D2208 800D1608 10000017 */ b .L800D1668 -/* 0D220C 800D160C AD5B0118 */ sw $k1, 0x118($t2) -glabel L800D1610 -/* 0D2210 800D1610 2401FDFF */ li $at, -513 -/* 0D2214 800D1614 01014024 */ and $t0, $t0, $at -/* 0D2218 800D1618 40886800 */ mtc0 $t0, $13 -/* 0D221C 800D161C 0C0345B9 */ jal func_800D16E4 -/* 0D2220 800D1620 24040008 */ li $a0, 8 -/* 0D2224 800D1624 2401FDFF */ li $at, -513 -/* 0D2228 800D1628 1000FF61 */ b .L800D13B0 -/* 0D222C 800D162C 02018024 */ and $s0, $s0, $at -glabel L800D1630 -/* 0D2230 800D1630 2401FEFF */ li $at, -257 -/* 0D2234 800D1634 01014024 */ and $t0, $t0, $at -/* 0D2238 800D1638 40886800 */ mtc0 $t0, $13 -/* 0D223C 800D163C 0C0345B9 */ jal func_800D16E4 -/* 0D2240 800D1640 24040000 */ li $a0, 0 -/* 0D2244 800D1644 2401FEFF */ li $at, -257 -/* 0D2248 800D1648 1000FF59 */ b .L800D13B0 -/* 0D224C 800D164C 02018024 */ and $s0, $s0, $at -.L800D1650: -/* 0D2250 800D1650 24090001 */ li $t1, 1 -/* 0D2254 800D1654 A7490012 */ sh $t1, 0x12($k0) -/* 0D2258 800D1658 0C0345B9 */ jal func_800D16E4 -/* 0D225C 800D165C 24040050 */ li $a0, 80 -/* 0D2260 800D1660 10000001 */ b .L800D1668 -/* 0D2264 800D1664 00000000 */ nop -.L800D1668: -glabel L800D1668 -/* 0D2268 800D1668 3C0A800F */ lui $t2, %hi(D_800EB3A8) # $t2, 0x800f -/* 0D226C 800D166C 8D4AB3A8 */ lw $t2, %lo(D_800EB3A8)($t2) -/* 0D2270 800D1670 8F490004 */ lw $t1, 4($k0) -/* 0D2274 800D1674 8D4B0004 */ lw $t3, 4($t2) -/* 0D2278 800D1678 012B082A */ slt $at, $t1, $t3 -/* 0D227C 800D167C 10200007 */ beqz $at, .L800D169C -/* 0D2280 800D1680 00000000 */ nop -/* 0D2284 800D1684 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0D2288 800D1688 03402825 */ move $a1, $k0 -/* 0D228C 800D168C 0C034633 */ jal __osEnqueueThread -/* 0D2290 800D1690 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0D2294 800D1694 08034649 */ j __osDispatchThread -/* 0D2298 800D1698 00000000 */ nop - -.L800D169C: -/* 0D229C 800D169C 3C09800F */ lui $t1, %hi(D_800EB3A8) # $t1, 0x800f -/* 0D22A0 800D16A0 2529B3A8 */ addiu $t1, %lo(D_800EB3A8) # addiu $t1, $t1, -0x4c58 -/* 0D22A4 800D16A4 8D2A0000 */ lw $t2, ($t1) -/* 0D22A8 800D16A8 AF4A0000 */ sw $t2, ($k0) -/* 0D22AC 800D16AC 08034649 */ j __osDispatchThread -/* 0D22B0 800D16B0 AD3A0000 */ sw $k0, ($t1) - -.L800D16B4: -/* 0D22B4 800D16B4 3C01800F */ lui $at, %hi(D_800EB3B4) # $at, 0x800f -/* 0D22B8 800D16B8 AC3AB3B4 */ sw $k0, %lo(D_800EB3B4)($at) -/* 0D22BC 800D16BC 24090001 */ li $t1, 1 -/* 0D22C0 800D16C0 A7490010 */ sh $t1, 0x10($k0) -/* 0D22C4 800D16C4 24090002 */ li $t1, 2 -/* 0D22C8 800D16C8 A7490012 */ sh $t1, 0x12($k0) -/* 0D22CC 800D16CC 400A4000 */ mfc0 $t2, $8 -/* 0D22D0 800D16D0 AF4A0124 */ sw $t2, 0x124($k0) -/* 0D22D4 800D16D4 0C0345B9 */ jal func_800D16E4 -/* 0D22D8 800D16D8 24040060 */ li $a0, 96 -/* 0D22DC 800D16DC 08034649 */ j __osDispatchThread -/* 0D22E0 800D16E0 00000000 */ nop - -glabel func_800D16E4 -/* 0D22E4 800D16E4 3C0A8019 */ lui $t2, %hi(D_80196440) # $t2, 0x8019 -/* 0D22E8 800D16E8 254A6440 */ addiu $t2, %lo(D_80196440) # addiu $t2, $t2, 0x6440 -/* 0D22EC 800D16EC 01445021 */ addu $t2, $t2, $a0 -/* 0D22F0 800D16F0 8D490000 */ lw $t1, ($t2) -/* 0D22F4 800D16F4 03E09025 */ move $s2, $ra -/* 0D22F8 800D16F8 11200025 */ beqz $t1, .L800D1790 -/* 0D22FC 800D16FC 00000000 */ nop -/* 0D2300 800D1700 8D2B0008 */ lw $t3, 8($t1) -/* 0D2304 800D1704 8D2C0010 */ lw $t4, 0x10($t1) -/* 0D2308 800D1708 016C082A */ slt $at, $t3, $t4 -/* 0D230C 800D170C 10200020 */ beqz $at, .L800D1790 -/* 0D2310 800D1710 00000000 */ nop -/* 0D2314 800D1714 8D2D000C */ lw $t5, 0xc($t1) -/* 0D2318 800D1718 01AB6821 */ addu $t5, $t5, $t3 -/* 0D231C 800D171C 01AC001A */ div $zero, $t5, $t4 -/* 0D2320 800D1720 15800002 */ bnez $t4, .L800D172C -/* 0D2324 800D1724 00000000 */ nop -/* 0D2328 800D1728 0007000D */ break 7 -.L800D172C: -/* 0D232C 800D172C 2401FFFF */ li $at, -1 -/* 0D2330 800D1730 15810004 */ bne $t4, $at, .L800D1744 -/* 0D2334 800D1734 3C018000 */ lui $at, 0x8000 -/* 0D2338 800D1738 15A10002 */ bne $t5, $at, .L800D1744 -/* 0D233C 800D173C 00000000 */ nop -/* 0D2340 800D1740 0006000D */ break 6 -.L800D1744: -/* 0D2344 800D1744 8D2C0014 */ lw $t4, 0x14($t1) -/* 0D2348 800D1748 00006810 */ mfhi $t5 -/* 0D234C 800D174C 000D6880 */ sll $t5, $t5, 2 -/* 0D2350 800D1750 018D6021 */ addu $t4, $t4, $t5 -/* 0D2354 800D1754 8D4D0004 */ lw $t5, 4($t2) -/* 0D2358 800D1758 256A0001 */ addiu $t2, $t3, 1 -/* 0D235C 800D175C AD8D0000 */ sw $t5, ($t4) -/* 0D2360 800D1760 AD2A0008 */ sw $t2, 8($t1) -/* 0D2364 800D1764 8D2A0000 */ lw $t2, ($t1) -/* 0D2368 800D1768 8D4B0000 */ lw $t3, ($t2) -/* 0D236C 800D176C 11600008 */ beqz $t3, .L800D1790 -/* 0D2370 800D1770 00000000 */ nop -/* 0D2374 800D1774 0C034645 */ jal __osPopThread -/* 0D2378 800D1778 01202025 */ move $a0, $t1 -/* 0D237C 800D177C 00405025 */ move $t2, $v0 -/* 0D2380 800D1780 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0D2384 800D1784 01402825 */ move $a1, $t2 -/* 0D2388 800D1788 0C034633 */ jal __osEnqueueThread -/* 0D238C 800D178C 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -.L800D1790: -/* 0D2390 800D1790 02400008 */ jr $s2 -/* 0D2394 800D1794 00000000 */ nop -.L800D1798: -/* 0D2398 800D1798 3C013000 */ lui $at, 0x3000 -/* 0D239C 800D179C 01014824 */ and $t1, $t0, $at -/* 0D23A0 800D17A0 00094F02 */ srl $t1, $t1, 0x1c -/* 0D23A4 800D17A4 240A0001 */ li $t2, 1 -/* 0D23A8 800D17A8 152AFFC2 */ bne $t1, $t2, .L800D16B4 -/* 0D23AC 800D17AC 00000000 */ nop -/* 0D23B0 800D17B0 8F5B0118 */ lw $k1, 0x118($k0) -/* 0D23B4 800D17B4 3C012000 */ lui $at, 0x2000 -/* 0D23B8 800D17B8 24090001 */ li $t1, 1 -/* 0D23BC 800D17BC 0361D825 */ or $k1, $k1, $at -/* 0D23C0 800D17C0 AF490018 */ sw $t1, 0x18($k0) -/* 0D23C4 800D17C4 1000FFB5 */ b .L800D169C -/* 0D23C8 800D17C8 AF5B0118 */ sw $k1, 0x118($k0) -glabel __osEnqueueAndYield -/* 0D23CC 800D17CC 3C05800F */ lui $a1, %hi(D_800EB3B0) # $a1, 0x800f -/* 0D23D0 800D17D0 8CA5B3B0 */ lw $a1, %lo(D_800EB3B0)($a1) -/* 0D23D4 800D17D4 40086000 */ mfc0 $t0, $12 -/* 0D23D8 800D17D8 8CBB0018 */ lw $k1, 0x18($a1) -/* 0D23DC 800D17DC 35080002 */ ori $t0, $t0, 2 -/* 0D23E0 800D17E0 ACA80118 */ sw $t0, 0x118($a1) -/* 0D23E4 800D17E4 FCB00098 */ sd $s0, 0x98($a1) -/* 0D23E8 800D17E8 FCB100A0 */ sd $s1, 0xa0($a1) -/* 0D23EC 800D17EC FCB200A8 */ sd $s2, 0xa8($a1) -/* 0D23F0 800D17F0 FCB300B0 */ sd $s3, 0xb0($a1) -/* 0D23F4 800D17F4 FCB400B8 */ sd $s4, 0xb8($a1) -/* 0D23F8 800D17F8 FCB500C0 */ sd $s5, 0xc0($a1) -/* 0D23FC 800D17FC FCB600C8 */ sd $s6, 0xc8($a1) -/* 0D2400 800D1800 FCB700D0 */ sd $s7, 0xd0($a1) -/* 0D2404 800D1804 FCBC00E8 */ sd $gp, 0xe8($a1) -/* 0D2408 800D1808 FCBD00F0 */ sd $sp, 0xf0($a1) -/* 0D240C 800D180C FCBE00F8 */ sd $fp, 0xf8($a1) -/* 0D2410 800D1810 FCBF0100 */ sd $ra, 0x100($a1) -/* 0D2414 800D1814 13600009 */ beqz $k1, .L800D183C -/* 0D2418 800D1818 ACBF011C */ sw $ra, 0x11c($a1) -/* 0D241C 800D181C 445BF800 */ cfc1 $k1, $31 -/* 0D2420 800D1820 F4B40180 */ sdc1 $f20, 0x180($a1) -/* 0D2424 800D1824 F4B60188 */ sdc1 $f22, 0x188($a1) -/* 0D2428 800D1828 F4B80190 */ sdc1 $f24, 0x190($a1) -/* 0D242C 800D182C F4BA0198 */ sdc1 $f26, 0x198($a1) -/* 0D2430 800D1830 F4BC01A0 */ sdc1 $f28, 0x1a0($a1) -/* 0D2434 800D1834 F4BE01A8 */ sdc1 $f30, 0x1a8($a1) -/* 0D2438 800D1838 ACBB012C */ sw $k1, 0x12c($a1) -.L800D183C: -/* 0D243C 800D183C 8CBB0118 */ lw $k1, 0x118($a1) -/* 0D2440 800D1840 3369FF00 */ andi $t1, $k1, 0xff00 -/* 0D2444 800D1844 1120000D */ beqz $t1, .L800D187C -/* 0D2448 800D1848 00000000 */ nop -/* 0D244C 800D184C 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D2450 800D1850 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D2454 800D1854 8D080000 */ lw $t0, ($t0) -/* 0D2458 800D1858 2401FFFF */ li $at, -1 -/* 0D245C 800D185C 01014026 */ xor $t0, $t0, $at -/* 0D2460 800D1860 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff -/* 0D2464 800D1864 3108FF00 */ andi $t0, $t0, 0xff00 -/* 0D2468 800D1868 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff -/* 0D246C 800D186C 01284825 */ or $t1, $t1, $t0 -/* 0D2470 800D1870 0361D824 */ and $k1, $k1, $at -/* 0D2474 800D1874 0369D825 */ or $k1, $k1, $t1 -/* 0D2478 800D1878 ACBB0118 */ sw $k1, 0x118($a1) -.L800D187C: -/* 0D247C 800D187C 3C1BA430 */ lui $k1, %hi(D_A430000C) # $k1, 0xa430 -/* 0D2480 800D1880 8F7B000C */ lw $k1, %lo(D_A430000C)($k1) -/* 0D2484 800D1884 1360000B */ beqz $k1, .L800D18B4 -/* 0D2488 800D1888 00000000 */ nop -/* 0D248C 800D188C 3C1A800F */ lui $k0, %hi(D_800EA5EC) # $k0, 0x800f -/* 0D2490 800D1890 275AA5EC */ addiu $k0, %lo(D_800EA5EC) # addiu $k0, $k0, -0x5a14 -/* 0D2494 800D1894 8F5A0000 */ lw $k0, ($k0) -/* 0D2498 800D1898 8CA80128 */ lw $t0, 0x128($a1) -/* 0D249C 800D189C 2401FFFF */ li $at, -1 -/* 0D24A0 800D18A0 001AD402 */ srl $k0, $k0, 0x10 -/* 0D24A4 800D18A4 0341D026 */ xor $k0, $k0, $at -/* 0D24A8 800D18A8 335A003F */ andi $k0, $k0, 0x3f -/* 0D24AC 800D18AC 0348D024 */ and $k0, $k0, $t0 -/* 0D24B0 800D18B0 037AD825 */ or $k1, $k1, $k0 -.L800D18B4: -/* 0D24B4 800D18B4 10800003 */ beqz $a0, .L800D18C4 -/* 0D24B8 800D18B8 ACBB0128 */ sw $k1, 0x128($a1) -/* 0D24BC 800D18BC 0C034633 */ jal __osEnqueueThread -/* 0D24C0 800D18C0 00000000 */ nop -.L800D18C4: -/* 0D24C4 800D18C4 08034649 */ j __osDispatchThread -/* 0D24C8 800D18C8 00000000 */ nop - -glabel __osEnqueueThread -/* 0D24CC 800D18CC 8C980000 */ lw $t8, ($a0) -/* 0D24D0 800D18D0 8CAF0004 */ lw $t7, 4($a1) -/* 0D24D4 800D18D4 0080C825 */ move $t9, $a0 -/* 0D24D8 800D18D8 8F0E0004 */ lw $t6, 4($t8) -/* 0D24DC 800D18DC 01CF082A */ slt $at, $t6, $t7 -/* 0D24E0 800D18E0 14200007 */ bnez $at, .L800D1900 -/* 0D24E4 800D18E4 00000000 */ nop -.L800D18E8: -/* 0D24E8 800D18E8 0300C825 */ move $t9, $t8 -/* 0D24EC 800D18EC 8F180000 */ lw $t8, ($t8) -/* 0D24F0 800D18F0 8F0E0004 */ lw $t6, 4($t8) -/* 0D24F4 800D18F4 01CF082A */ slt $at, $t6, $t7 -/* 0D24F8 800D18F8 1020FFFB */ beqz $at, .L800D18E8 -/* 0D24FC 800D18FC 00000000 */ nop -.L800D1900: -/* 0D2500 800D1900 8F380000 */ lw $t8, ($t9) -/* 0D2504 800D1904 ACB80000 */ sw $t8, ($a1) -/* 0D2508 800D1908 AF250000 */ sw $a1, ($t9) -/* 0D250C 800D190C 03E00008 */ jr $ra -/* 0D2510 800D1910 ACA40008 */ sw $a0, 8($a1) - -glabel __osPopThread -/* 0D2514 800D1914 8C820000 */ lw $v0, ($a0) -/* 0D2518 800D1918 8C590000 */ lw $t9, ($v0) -/* 0D251C 800D191C 03E00008 */ jr $ra -/* 0D2520 800D1920 AC990000 */ sw $t9, ($a0) - -glabel __osDispatchThread -/* 0D2524 800D1924 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0D2528 800D1928 0C034645 */ jal __osPopThread -/* 0D252C 800D192C 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0D2530 800D1930 3C01800F */ lui $at, %hi(D_800EB3B0) # $at, 0x800f -/* 0D2534 800D1934 AC22B3B0 */ sw $v0, %lo(D_800EB3B0)($at) -/* 0D2538 800D1938 24080004 */ li $t0, 4 -/* 0D253C 800D193C A4480010 */ sh $t0, 0x10($v0) -/* 0D2540 800D1940 0040D025 */ move $k0, $v0 -/* 0D2544 800D1944 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D2548 800D1948 8F5B0118 */ lw $k1, 0x118($k0) -/* 0D254C 800D194C 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D2550 800D1950 8D080000 */ lw $t0, ($t0) -/* 0D2554 800D1954 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff -/* 0D2558 800D1958 3369FF00 */ andi $t1, $k1, 0xff00 -/* 0D255C 800D195C 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff -/* 0D2560 800D1960 3108FF00 */ andi $t0, $t0, 0xff00 -/* 0D2564 800D1964 01284824 */ and $t1, $t1, $t0 -/* 0D2568 800D1968 0361D824 */ and $k1, $k1, $at -/* 0D256C 800D196C 0369D825 */ or $k1, $k1, $t1 -/* 0D2570 800D1970 409B6000 */ mtc0 $k1, $12 -/* 0D2574 800D1974 DF5B0108 */ ld $k1, 0x108($k0) -/* 0D2578 800D1978 DF410020 */ ld $at, 0x20($k0) -/* 0D257C 800D197C DF420028 */ ld $v0, 0x28($k0) -/* 0D2580 800D1980 03600013 */ mtlo $k1 -/* 0D2584 800D1984 DF5B0110 */ ld $k1, 0x110($k0) -/* 0D2588 800D1988 DF430030 */ ld $v1, 0x30($k0) -/* 0D258C 800D198C DF440038 */ ld $a0, 0x38($k0) -/* 0D2590 800D1990 DF450040 */ ld $a1, 0x40($k0) -/* 0D2594 800D1994 DF460048 */ ld $a2, 0x48($k0) -/* 0D2598 800D1998 DF470050 */ ld $a3, 0x50($k0) -/* 0D259C 800D199C DF480058 */ ld $t0, 0x58($k0) -/* 0D25A0 800D19A0 DF490060 */ ld $t1, 0x60($k0) -/* 0D25A4 800D19A4 DF4A0068 */ ld $t2, 0x68($k0) -/* 0D25A8 800D19A8 DF4B0070 */ ld $t3, 0x70($k0) -/* 0D25AC 800D19AC DF4C0078 */ ld $t4, 0x78($k0) -/* 0D25B0 800D19B0 DF4D0080 */ ld $t5, 0x80($k0) -/* 0D25B4 800D19B4 DF4E0088 */ ld $t6, 0x88($k0) -/* 0D25B8 800D19B8 DF4F0090 */ ld $t7, 0x90($k0) -/* 0D25BC 800D19BC DF500098 */ ld $s0, 0x98($k0) -/* 0D25C0 800D19C0 DF5100A0 */ ld $s1, 0xa0($k0) -/* 0D25C4 800D19C4 DF5200A8 */ ld $s2, 0xa8($k0) -/* 0D25C8 800D19C8 DF5300B0 */ ld $s3, 0xb0($k0) -/* 0D25CC 800D19CC DF5400B8 */ ld $s4, 0xb8($k0) -/* 0D25D0 800D19D0 DF5500C0 */ ld $s5, 0xc0($k0) -/* 0D25D4 800D19D4 DF5600C8 */ ld $s6, 0xc8($k0) -/* 0D25D8 800D19D8 DF5700D0 */ ld $s7, 0xd0($k0) -/* 0D25DC 800D19DC DF5800D8 */ ld $t8, 0xd8($k0) -/* 0D25E0 800D19E0 DF5900E0 */ ld $t9, 0xe0($k0) -/* 0D25E4 800D19E4 DF5C00E8 */ ld $gp, 0xe8($k0) -/* 0D25E8 800D19E8 03600011 */ mthi $k1 -/* 0D25EC 800D19EC DF5D00F0 */ ld $sp, 0xf0($k0) -/* 0D25F0 800D19F0 DF5E00F8 */ ld $fp, 0xf8($k0) -/* 0D25F4 800D19F4 DF5F0100 */ ld $ra, 0x100($k0) -/* 0D25F8 800D19F8 8F5B011C */ lw $k1, 0x11c($k0) -/* 0D25FC 800D19FC 409B7000 */ mtc0 $k1, $14 -/* 0D2600 800D1A00 8F5B0018 */ lw $k1, 0x18($k0) -/* 0D2604 800D1A04 13600013 */ beqz $k1, .L800D1A54 -/* 0D2608 800D1A08 00000000 */ nop -/* 0D260C 800D1A0C 8F5B012C */ lw $k1, 0x12c($k0) -/* 0D2610 800D1A10 44DBF800 */ ctc1 $k1, $31 -/* 0D2614 800D1A14 D7400130 */ ldc1 $f0, 0x130($k0) -/* 0D2618 800D1A18 D7420138 */ ldc1 $f2, 0x138($k0) -/* 0D261C 800D1A1C D7440140 */ ldc1 $f4, 0x140($k0) -/* 0D2620 800D1A20 D7460148 */ ldc1 $f6, 0x148($k0) -/* 0D2624 800D1A24 D7480150 */ ldc1 $f8, 0x150($k0) -/* 0D2628 800D1A28 D74A0158 */ ldc1 $f10, 0x158($k0) -/* 0D262C 800D1A2C D74C0160 */ ldc1 $f12, 0x160($k0) -/* 0D2630 800D1A30 D74E0168 */ ldc1 $f14, 0x168($k0) -/* 0D2634 800D1A34 D7500170 */ ldc1 $f16, 0x170($k0) -/* 0D2638 800D1A38 D7520178 */ ldc1 $f18, 0x178($k0) -/* 0D263C 800D1A3C D7540180 */ ldc1 $f20, 0x180($k0) -/* 0D2640 800D1A40 D7560188 */ ldc1 $f22, 0x188($k0) -/* 0D2644 800D1A44 D7580190 */ ldc1 $f24, 0x190($k0) -/* 0D2648 800D1A48 D75A0198 */ ldc1 $f26, 0x198($k0) -/* 0D264C 800D1A4C D75C01A0 */ ldc1 $f28, 0x1a0($k0) -/* 0D2650 800D1A50 D75E01A8 */ ldc1 $f30, 0x1a8($k0) -.L800D1A54: -/* 0D2654 800D1A54 8F5B0128 */ lw $k1, 0x128($k0) -/* 0D2658 800D1A58 3C1A800F */ lui $k0, %hi(D_800EA5EC) # $k0, 0x800f -/* 0D265C 800D1A5C 275AA5EC */ addiu $k0, %lo(D_800EA5EC) # addiu $k0, $k0, -0x5a14 -/* 0D2660 800D1A60 8F5A0000 */ lw $k0, ($k0) -/* 0D2664 800D1A64 001AD402 */ srl $k0, $k0, 0x10 -/* 0D2668 800D1A68 037AD824 */ and $k1, $k1, $k0 -/* 0D266C 800D1A6C 001BD840 */ sll $k1, $k1, 1 -/* 0D2670 800D1A70 3C1A800F */ lui $k0, %hi(D_800F3C10) # $k0, 0x800f -/* 0D2674 800D1A74 275A3C10 */ addiu $k0, %lo(D_800F3C10) # addiu $k0, $k0, 0x3c10 -/* 0D2678 800D1A78 037AD821 */ addu $k1, $k1, $k0 -/* 0D267C 800D1A7C 977B0000 */ lhu $k1, ($k1) -/* 0D2680 800D1A80 3C1AA430 */ lui $k0, %hi(D_A430000C) # $k0, 0xa430 -/* 0D2684 800D1A84 275A000C */ addiu $k0, %lo(D_A430000C) # addiu $k0, $k0, 0xc -/* 0D2688 800D1A88 AF5B0000 */ sw $k1, ($k0) -/* 0D268C 800D1A8C 00000000 */ nop -/* 0D2690 800D1A90 00000000 */ nop -/* 0D2694 800D1A94 00000000 */ nop -/* 0D2698 800D1A98 00000000 */ nop -/* 0D269C 800D1A9C 42000018 */ eret -glabel __osCleanupThread -/* 0D26A0 800D1AA0 0C035E9C */ jal osDestroyThread -/* 0D26A4 800D1AA4 00002025 */ move $a0, $zero -/* 0D26A8 800D1AA8 00000000 */ nop -/* 0D26AC 800D1AAC 00000000 */ nop -glabel __osDisableInt -/* 0D26B0 800D1AB0 40086000 */ mfc0 $t0, $12 -/* 0D26B4 800D1AB4 2401FFFE */ li $at, -2 -/* 0D26B8 800D1AB8 01014824 */ and $t1, $t0, $at -/* 0D26BC 800D1ABC 40896000 */ mtc0 $t1, $12 -/* 0D26C0 800D1AC0 31020001 */ andi $v0, $t0, 1 -/* 0D26C4 800D1AC4 00000000 */ nop -/* 0D26C8 800D1AC8 03E00008 */ jr $ra -/* 0D26CC 800D1ACC 00000000 */ nop - -glabel __osRestoreInt -/* 0D26D0 800D1AD0 40086000 */ mfc0 $t0, $12 -/* 0D26D4 800D1AD4 01044025 */ or $t0, $t0, $a0 -/* 0D26D8 800D1AD8 40886000 */ mtc0 $t0, $12 -/* 0D26DC 800D1ADC 00000000 */ nop -/* 0D26E0 800D1AE0 00000000 */ nop -/* 0D26E4 800D1AE4 03E00008 */ jr $ra -/* 0D26E8 800D1AE8 00000000 */ nop - -/* 0D26EC 800D1AEC 00000000 */ nop -glabel __osDequeueThread -/* 0D26F0 800D1AF0 00803025 */ move $a2, $a0 -/* 0D26F4 800D1AF4 8CC70000 */ lw $a3, ($a2) -/* 0D26F8 800D1AF8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D26FC 800D1AFC 10E0000A */ beqz $a3, .L800D1B28 -/* 0D2700 800D1B00 00000000 */ nop -.L800D1B04: -/* 0D2704 800D1B04 14E50004 */ bne $a3, $a1, .L800D1B18 -/* 0D2708 800D1B08 00000000 */ nop -/* 0D270C 800D1B0C 8CAE0000 */ lw $t6, ($a1) -/* 0D2710 800D1B10 10000005 */ b .L800D1B28 -/* 0D2714 800D1B14 ACCE0000 */ sw $t6, ($a2) -.L800D1B18: -/* 0D2718 800D1B18 00E03025 */ move $a2, $a3 -/* 0D271C 800D1B1C 8CC70000 */ lw $a3, ($a2) -/* 0D2720 800D1B20 14E0FFF8 */ bnez $a3, .L800D1B04 -/* 0D2724 800D1B24 00000000 */ nop -.L800D1B28: -/* 0D2728 800D1B28 03E00008 */ jr $ra -/* 0D272C 800D1B2C 27BD0008 */ addiu $sp, $sp, 8 - -glabel __osSetSR -/* 0D2730 800D1B30 40846000 */ mtc0 $a0, $12 -/* 0D2734 800D1B34 00000000 */ nop -/* 0D2738 800D1B38 03E00008 */ jr $ra -/* 0D273C 800D1B3C 00000000 */ nop - -glabel __osGetSR -/* 0D2740 800D1B40 40026000 */ mfc0 $v0, $12 -/* 0D2744 800D1B44 03E00008 */ jr $ra -/* 0D2748 800D1B48 00000000 */ nop - -/* 0D274C 800D1B4C 00000000 */ nop -glabel __osSetFpcCsr -/* 0D2750 800D1B50 4442F800 */ cfc1 $v0, $31 -/* 0D2754 800D1B54 44C4F800 */ ctc1 $a0, $31 -/* 0D2758 800D1B58 03E00008 */ jr $ra -/* 0D275C 800D1B5C 00000000 */ nop - -glabel __osSiRawReadIo -/* 0D2760 800D1B60 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D2764 800D1B64 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D2768 800D1B68 AFA40018 */ sw $a0, 0x18($sp) -/* 0D276C 800D1B6C 0C035EDC */ jal __osSiDeviceBusy -/* 0D2770 800D1B70 AFA5001C */ sw $a1, 0x1c($sp) -/* 0D2774 800D1B74 10400003 */ beqz $v0, .L800D1B84 -/* 0D2778 800D1B78 00000000 */ nop -/* 0D277C 800D1B7C 10000008 */ b .L800D1BA0 -/* 0D2780 800D1B80 2402FFFF */ li $v0, -1 -.L800D1B84: -/* 0D2784 800D1B84 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D2788 800D1B88 3C01A000 */ lui $at, 0xa000 -/* 0D278C 800D1B8C 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D2790 800D1B90 01C17825 */ or $t7, $t6, $at -/* 0D2794 800D1B94 8DF80000 */ lw $t8, ($t7) -/* 0D2798 800D1B98 00001025 */ move $v0, $zero -/* 0D279C 800D1B9C AF380000 */ sw $t8, ($t9) -.L800D1BA0: -/* 0D27A0 800D1BA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D27A4 800D1BA4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D27A8 800D1BA8 03E00008 */ jr $ra -/* 0D27AC 800D1BAC 00000000 */ nop - -glabel __osSiRawWriteIo -/* 0D27B0 800D1BB0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D27B4 800D1BB4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D27B8 800D1BB8 AFA40018 */ sw $a0, 0x18($sp) -/* 0D27BC 800D1BBC 0C035EDC */ jal __osSiDeviceBusy -/* 0D27C0 800D1BC0 AFA5001C */ sw $a1, 0x1c($sp) -/* 0D27C4 800D1BC4 10400003 */ beqz $v0, .L800D1BD4 -/* 0D27C8 800D1BC8 00000000 */ nop -/* 0D27CC 800D1BCC 10000007 */ b .L800D1BEC -/* 0D27D0 800D1BD0 2402FFFF */ li $v0, -1 -.L800D1BD4: -/* 0D27D4 800D1BD4 8FAF0018 */ lw $t7, 0x18($sp) -/* 0D27D8 800D1BD8 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D27DC 800D1BDC 3C01A000 */ lui $at, 0xa000 -/* 0D27E0 800D1BE0 01E1C025 */ or $t8, $t7, $at -/* 0D27E4 800D1BE4 00001025 */ move $v0, $zero -/* 0D27E8 800D1BE8 AF0E0000 */ sw $t6, ($t8) -.L800D1BEC: -/* 0D27EC 800D1BEC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D27F0 800D1BF0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D27F4 800D1BF4 03E00008 */ jr $ra -/* 0D27F8 800D1BF8 00000000 */ nop - -/* 0D27FC 800D1BFC 00000000 */ nop -glabel osWriteBackDCache -/* 0D2800 800D1C00 18A00011 */ blez $a1, .L800D1C48 -/* 0D2804 800D1C04 00000000 */ nop -/* 0D2808 800D1C08 240B2000 */ li $t3, 8192 -/* 0D280C 800D1C0C 00AB082B */ sltu $at, $a1, $t3 -/* 0D2810 800D1C10 1020000F */ beqz $at, .L800D1C50 -/* 0D2814 800D1C14 00000000 */ nop -/* 0D2818 800D1C18 00804025 */ move $t0, $a0 -/* 0D281C 800D1C1C 00854821 */ addu $t1, $a0, $a1 -/* 0D2820 800D1C20 0109082B */ sltu $at, $t0, $t1 -/* 0D2824 800D1C24 10200008 */ beqz $at, .L800D1C48 -/* 0D2828 800D1C28 00000000 */ nop -/* 0D282C 800D1C2C 310A000F */ andi $t2, $t0, 0xf -/* 0D2830 800D1C30 2529FFF0 */ addiu $t1, $t1, -0x10 -/* 0D2834 800D1C34 010A4023 */ subu $t0, $t0, $t2 -.L800D1C38: -/* 0D2838 800D1C38 BD190000 */ cache 0x19, ($t0) -/* 0D283C 800D1C3C 0109082B */ sltu $at, $t0, $t1 -/* 0D2840 800D1C40 1420FFFD */ bnez $at, .L800D1C38 -/* 0D2844 800D1C44 25080010 */ addiu $t0, $t0, 0x10 -.L800D1C48: -/* 0D2848 800D1C48 03E00008 */ jr $ra -/* 0D284C 800D1C4C 00000000 */ nop - -.L800D1C50: -/* 0D2850 800D1C50 3C088000 */ li $t0, 0x80000000 -/* 0D2854 800D1C54 010B4821 */ addu $t1, $t0, $t3 -/* 0D2858 800D1C58 2529FFF0 */ addiu $t1, $t1, -0x10 -.L800D1C5C: -/* 0D285C 800D1C5C BD010000 */ cache 1, ($t0) -/* 0D2860 800D1C60 0109082B */ sltu $at, $t0, $t1 -/* 0D2864 800D1C64 1420FFFD */ bnez $at, .L800D1C5C -/* 0D2868 800D1C68 25080010 */ addiu $t0, $t0, 0x10 -/* 0D286C 800D1C6C 03E00008 */ jr $ra -/* 0D2870 800D1C70 00000000 */ nop - -/* 0D2874 800D1C74 00000000 */ nop -/* 0D2878 800D1C78 00000000 */ nop -/* 0D287C 800D1C7C 00000000 */ nop -glabel osMapTLBRdb -/* 0D2880 800D1C80 40085000 */ mfc0 $t0, $10 -/* 0D2884 800D1C84 2409001F */ li $t1, 31 -/* 0D2888 800D1C88 40890000 */ mtc0 $t1, $0 -/* 0D288C 800D1C8C 40802800 */ mtc0 $zero, $5 -/* 0D2890 800D1C90 240A0017 */ li $t2, 23 -/* 0D2894 800D1C94 3C09C000 */ lui $t1, 0xc000 -/* 0D2898 800D1C98 40895000 */ mtc0 $t1, $10 -/* 0D289C 800D1C9C 3C098000 */ lui $t1, 0x8000 -/* 0D28A0 800D1CA0 00095982 */ srl $t3, $t1, 6 -/* 0D28A4 800D1CA4 016A5825 */ or $t3, $t3, $t2 -/* 0D28A8 800D1CA8 408B1000 */ mtc0 $t3, $2 -/* 0D28AC 800D1CAC 24090001 */ li $t1, 1 -/* 0D28B0 800D1CB0 40891800 */ mtc0 $t1, $3 -/* 0D28B4 800D1CB4 00000000 */ nop -/* 0D28B8 800D1CB8 42000002 */ tlbwi -/* 0D28BC 800D1CBC 00000000 */ nop -/* 0D28C0 800D1CC0 00000000 */ nop -/* 0D28C4 800D1CC4 00000000 */ nop -/* 0D28C8 800D1CC8 00000000 */ nop -/* 0D28CC 800D1CCC 40885000 */ mtc0 $t0, $10 -/* 0D28D0 800D1CD0 03E00008 */ jr $ra -/* 0D28D4 800D1CD4 00000000 */ nop - -/* 0D28D8 800D1CD8 00000000 */ nop -/* 0D28DC 800D1CDC 00000000 */ nop -glabel osEPiRawReadIo -/* 0D28E0 800D1CE0 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D28E4 800D1CE4 8DC60010 */ lw $a2, %lo(D_A4600010)($t6) -/* 0D28E8 800D1CE8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D28EC 800D1CEC 30CF0003 */ andi $t7, $a2, 3 -/* 0D28F0 800D1CF0 11E00006 */ beqz $t7, .L800D1D0C -/* 0D28F4 800D1CF4 00000000 */ nop -.L800D1CF8: -/* 0D28F8 800D1CF8 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D28FC 800D1CFC 8F060010 */ lw $a2, %lo(D_A4600010)($t8) -/* 0D2900 800D1D00 30D90003 */ andi $t9, $a2, 3 -/* 0D2904 800D1D04 1720FFFC */ bnez $t9, .L800D1CF8 -/* 0D2908 800D1D08 00000000 */ nop -.L800D1D0C: -/* 0D290C 800D1D0C 3C088000 */ lui $t0, %hi(D_80000308) # $t0, 0x8000 -/* 0D2910 800D1D10 8D080308 */ lw $t0, %lo(D_80000308)($t0) -/* 0D2914 800D1D14 3C01A000 */ lui $at, 0xa000 -/* 0D2918 800D1D18 00001025 */ move $v0, $zero -/* 0D291C 800D1D1C 01044825 */ or $t1, $t0, $a0 -/* 0D2920 800D1D20 01215025 */ or $t2, $t1, $at -/* 0D2924 800D1D24 8D4B0000 */ lw $t3, ($t2) -/* 0D2928 800D1D28 27BD0008 */ addiu $sp, $sp, 8 -/* 0D292C 800D1D2C 03E00008 */ jr $ra -/* 0D2930 800D1D30 ACAB0000 */ sw $t3, ($a1) - -/* 0D2934 800D1D34 00000000 */ nop -/* 0D2938 800D1D38 00000000 */ nop -/* 0D293C 800D1D3C 00000000 */ nop -glabel __osSetHWIntrRoutine -/* 0D2940 800D1D40 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D2944 800D1D44 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D2948 800D1D48 AFA40028 */ sw $a0, 0x28($sp) -/* 0D294C 800D1D4C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D2950 800D1D50 0C0346AC */ jal __osDisableInt -/* 0D2954 800D1D54 AFB00018 */ sw $s0, 0x18($sp) -/* 0D2958 800D1D58 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D295C 800D1D5C 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D2960 800D1D60 3C01800F */ lui $at, %hi(D_800EB380) # 0x800f -/* 0D2964 800D1D64 000FC080 */ sll $t8, $t7, 2 -/* 0D2968 800D1D68 00408025 */ move $s0, $v0 -/* 0D296C 800D1D6C 00380821 */ addu $at, $at, $t8 -/* 0D2970 800D1D70 02002025 */ move $a0, $s0 -/* 0D2974 800D1D74 0C0346B4 */ jal __osRestoreInt -/* 0D2978 800D1D78 AC2EB380 */ sw $t6, %lo(D_800EB380)($at) # -0x4c80($at) -/* 0D297C 800D1D7C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D2980 800D1D80 8FB00018 */ lw $s0, 0x18($sp) -/* 0D2984 800D1D84 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D2988 800D1D88 03E00008 */ jr $ra -/* 0D298C 800D1D8C 00000000 */ nop - -glabel D_800D1D90 -/* 0D2990 800D1D90 3C0E800F */ lui $t6, %hi(D_800EA5F0) # $t6, 0x800f -/* 0D2994 800D1D94 8DCEA5F0 */ lw $t6, %lo(D_800EA5F0)($t6) -/* 0D2998 800D1D98 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D299C 800D1D9C AFBF001C */ sw $ra, 0x1c($sp) -/* 0D29A0 800D1DA0 15C00003 */ bnez $t6, .L800D1DB0 -/* 0D29A4 800D1DA4 00000000 */ nop -/* 0D29A8 800D1DA8 1000019D */ b .L800D2420 -/* 0D29AC 800D1DAC 00001025 */ move $v0, $zero -.L800D1DB0: -/* 0D29B0 800D1DB0 3C0F8019 */ lui $t7, %hi(D_801978C0) # $t7, 0x8019 -/* 0D29B4 800D1DB4 8DEF78C0 */ lw $t7, %lo(D_801978C0)($t7) -/* 0D29B8 800D1DB8 3C0BA460 */ lui $t3, %hi(D_A4600010) # $t3, 0xa460 -/* 0D29BC 800D1DBC 25F80014 */ addiu $t8, $t7, 0x14 -/* 0D29C0 800D1DC0 AFB80030 */ sw $t8, 0x30($sp) -/* 0D29C4 800D1DC4 95F9001A */ lhu $t9, 0x1a($t7) -/* 0D29C8 800D1DC8 00194140 */ sll $t0, $t9, 5 -/* 0D29CC 800D1DCC 03084821 */ addu $t1, $t8, $t0 -/* 0D29D0 800D1DD0 252A001C */ addiu $t2, $t1, 0x1c -/* 0D29D4 800D1DD4 AFAA002C */ sw $t2, 0x2c($sp) -/* 0D29D8 800D1DD8 8D6C0010 */ lw $t4, %lo(D_A4600010)($t3) -/* 0D29DC 800D1DDC AFAC0038 */ sw $t4, 0x38($sp) -/* 0D29E0 800D1DE0 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D29E4 800D1DE4 31AE0001 */ andi $t6, $t5, 1 -/* 0D29E8 800D1DE8 11C00034 */ beqz $t6, .L800D1EBC -/* 0D29EC 800D1DEC 00000000 */ nop -/* 0D29F0 800D1DF0 240F0003 */ li $t7, 3 -/* 0D29F4 800D1DF4 3C19A460 */ lui $t9, %hi(D_A4600010) # $t9, 0xa460 -/* 0D29F8 800D1DF8 AF2F0010 */ sw $t7, %lo(D_A4600010)($t9) -/* 0D29FC 800D1DFC 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D2A00 800D1E00 8F080010 */ lw $t0, %lo(D_A4600010)($t8) -/* 0D2A04 800D1E04 AFA80038 */ sw $t0, 0x38($sp) -/* 0D2A08 800D1E08 8FA90038 */ lw $t1, 0x38($sp) -/* 0D2A0C 800D1E0C 312A0002 */ andi $t2, $t1, 2 -/* 0D2A10 800D1E10 11400008 */ beqz $t2, .L800D1E34 -/* 0D2A14 800D1E14 00000000 */ nop -.L800D1E18: -/* 0D2A18 800D1E18 3C0BA460 */ lui $t3, %hi(D_A4600010) # $t3, 0xa460 -/* 0D2A1C 800D1E1C 8D6C0010 */ lw $t4, %lo(D_A4600010)($t3) -/* 0D2A20 800D1E20 AFAC0038 */ sw $t4, 0x38($sp) -/* 0D2A24 800D1E24 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D2A28 800D1E28 31AE0002 */ andi $t6, $t5, 2 -/* 0D2A2C 800D1E2C 15C0FFFA */ bnez $t6, .L800D1E18 -/* 0D2A30 800D1E30 00000000 */ nop -.L800D1E34: -/* 0D2A34 800D1E34 3C0FA500 */ lui $t7, %hi(D_A5000508) # $t7, 0xa500 -/* 0D2A38 800D1E38 8DF90508 */ lw $t9, %lo(D_A5000508)($t7) -/* 0D2A3C 800D1E3C 3C010200 */ lui $at, 0x200 -/* 0D2A40 800D1E40 AFB9003C */ sw $t9, 0x3c($sp) -/* 0D2A44 800D1E44 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D2A48 800D1E48 03014024 */ and $t0, $t8, $at -/* 0D2A4C 800D1E4C 11000015 */ beqz $t0, .L800D1EA4 -/* 0D2A50 800D1E50 00000000 */ nop -/* 0D2A54 800D1E54 3C09A460 */ lui $t1, %hi(D_A4600010) # $t1, 0xa460 -/* 0D2A58 800D1E58 8D2A0010 */ lw $t2, %lo(D_A4600010)($t1) -/* 0D2A5C 800D1E5C AFAA0038 */ sw $t2, 0x38($sp) -/* 0D2A60 800D1E60 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D2A64 800D1E64 316C0002 */ andi $t4, $t3, 2 -/* 0D2A68 800D1E68 11800008 */ beqz $t4, .L800D1E8C -/* 0D2A6C 800D1E6C 00000000 */ nop -.L800D1E70: -/* 0D2A70 800D1E70 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 -/* 0D2A74 800D1E74 8DAE0010 */ lw $t6, %lo(D_A4600010)($t5) -/* 0D2A78 800D1E78 AFAE0038 */ sw $t6, 0x38($sp) -/* 0D2A7C 800D1E7C 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D2A80 800D1E80 31F90002 */ andi $t9, $t7, 2 -/* 0D2A84 800D1E84 1720FFFA */ bnez $t9, .L800D1E70 -/* 0D2A88 800D1E88 00000000 */ nop -.L800D1E8C: -/* 0D2A8C 800D1E8C 8FB80030 */ lw $t8, 0x30($sp) -/* 0D2A90 800D1E90 3C010100 */ lui $at, 0x100 -/* 0D2A94 800D1E94 3C0AA500 */ lui $t2, %hi(D_A5000510) # $t2, 0xa500 -/* 0D2A98 800D1E98 8F080014 */ lw $t0, 0x14($t8) -/* 0D2A9C 800D1E9C 01014825 */ or $t1, $t0, $at -/* 0D2AA0 800D1EA0 AD490510 */ sw $t1, %lo(D_A5000510)($t2) -.L800D1EA4: -/* 0D2AA4 800D1EA4 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D2AA8 800D1EA8 240B004B */ li $t3, 75 -/* 0D2AAC 800D1EAC 0C03490C */ jal func_800D2430 -/* 0D2AB0 800D1EB0 AD8B0010 */ sw $t3, 0x10($t4) -/* 0D2AB4 800D1EB4 1000015A */ b .L800D2420 -/* 0D2AB8 800D1EB8 24020001 */ li $v0, 1 -.L800D1EBC: -/* 0D2ABC 800D1EBC 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 -/* 0D2AC0 800D1EC0 8DAE0010 */ lw $t6, %lo(D_A4600010)($t5) -/* 0D2AC4 800D1EC4 AFAE0038 */ sw $t6, 0x38($sp) -/* 0D2AC8 800D1EC8 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D2ACC 800D1ECC 31F90002 */ andi $t9, $t7, 2 -/* 0D2AD0 800D1ED0 13200008 */ beqz $t9, .L800D1EF4 -/* 0D2AD4 800D1ED4 00000000 */ nop -.L800D1ED8: -/* 0D2AD8 800D1ED8 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D2ADC 800D1EDC 8F080010 */ lw $t0, %lo(D_A4600010)($t8) -/* 0D2AE0 800D1EE0 AFA80038 */ sw $t0, 0x38($sp) -/* 0D2AE4 800D1EE4 8FA90038 */ lw $t1, 0x38($sp) -/* 0D2AE8 800D1EE8 312A0002 */ andi $t2, $t1, 2 -/* 0D2AEC 800D1EEC 1540FFFA */ bnez $t2, .L800D1ED8 -/* 0D2AF0 800D1EF0 00000000 */ nop -.L800D1EF4: -/* 0D2AF4 800D1EF4 3C0BA500 */ lui $t3, %hi(D_A5000508) # $t3, 0xa500 -/* 0D2AF8 800D1EF8 8D6C0508 */ lw $t4, %lo(D_A5000508)($t3) -/* 0D2AFC 800D1EFC 3C010200 */ lui $at, 0x200 -/* 0D2B00 800D1F00 AFAC003C */ sw $t4, 0x3c($sp) -/* 0D2B04 800D1F04 8FAD003C */ lw $t5, 0x3c($sp) -/* 0D2B08 800D1F08 01A17024 */ and $t6, $t5, $at -/* 0D2B0C 800D1F0C 11C00019 */ beqz $t6, .L800D1F74 -/* 0D2B10 800D1F10 00000000 */ nop -/* 0D2B14 800D1F14 3C0FA460 */ lui $t7, %hi(D_A4600010) # $t7, 0xa460 -/* 0D2B18 800D1F18 8DF90010 */ lw $t9, %lo(D_A4600010)($t7) -/* 0D2B1C 800D1F1C AFB90038 */ sw $t9, 0x38($sp) -/* 0D2B20 800D1F20 8FB80038 */ lw $t8, 0x38($sp) -/* 0D2B24 800D1F24 33080002 */ andi $t0, $t8, 2 -/* 0D2B28 800D1F28 11000008 */ beqz $t0, .L800D1F4C -/* 0D2B2C 800D1F2C 00000000 */ nop -.L800D1F30: -/* 0D2B30 800D1F30 3C09A460 */ lui $t1, %hi(D_A4600010) # $t1, 0xa460 -/* 0D2B34 800D1F34 8D2A0010 */ lw $t2, %lo(D_A4600010)($t1) -/* 0D2B38 800D1F38 AFAA0038 */ sw $t2, 0x38($sp) -/* 0D2B3C 800D1F3C 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D2B40 800D1F40 316C0002 */ andi $t4, $t3, 2 -/* 0D2B44 800D1F44 1580FFFA */ bnez $t4, .L800D1F30 -/* 0D2B48 800D1F48 00000000 */ nop -.L800D1F4C: -/* 0D2B4C 800D1F4C 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D2B50 800D1F50 3C010100 */ lui $at, 0x100 -/* 0D2B54 800D1F54 3C19A500 */ lui $t9, %hi(D_A5000510) # $t9, 0xa500 -/* 0D2B58 800D1F58 8DAE0014 */ lw $t6, 0x14($t5) -/* 0D2B5C 800D1F5C 00001025 */ move $v0, $zero -/* 0D2B60 800D1F60 01C17825 */ or $t7, $t6, $at -/* 0D2B64 800D1F64 AF2F0510 */ sw $t7, %lo(D_A5000510)($t9) -/* 0D2B68 800D1F68 8FB80030 */ lw $t8, 0x30($sp) -/* 0D2B6C 800D1F6C 1000012C */ b .L800D2420 -/* 0D2B70 800D1F70 AF000010 */ sw $zero, 0x10($t8) -.L800D1F74: -/* 0D2B74 800D1F74 8FA8003C */ lw $t0, 0x3c($sp) -/* 0D2B78 800D1F78 3C010800 */ lui $at, 0x800 -/* 0D2B7C 800D1F7C 01014824 */ and $t1, $t0, $at -/* 0D2B80 800D1F80 11200007 */ beqz $t1, .L800D1FA0 -/* 0D2B84 800D1F84 00000000 */ nop -/* 0D2B88 800D1F88 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D2B8C 800D1F8C 240A0003 */ li $t2, 3 -/* 0D2B90 800D1F90 0C03490C */ jal func_800D2430 -/* 0D2B94 800D1F94 AD6A0010 */ sw $t2, 0x10($t3) -/* 0D2B98 800D1F98 10000121 */ b .L800D2420 -/* 0D2B9C 800D1F9C 24020001 */ li $v0, 1 -.L800D1FA0: -/* 0D2BA0 800D1FA0 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D2BA4 800D1FA4 24010001 */ li $at, 1 -/* 0D2BA8 800D1FA8 8D8D0000 */ lw $t5, ($t4) -/* 0D2BAC 800D1FAC 15A1003A */ bne $t5, $at, .L800D2098 -/* 0D2BB0 800D1FB0 00000000 */ nop -/* 0D2BB4 800D1FB4 8FAE003C */ lw $t6, 0x3c($sp) -/* 0D2BB8 800D1FB8 3C014000 */ lui $at, 0x4000 -/* 0D2BBC 800D1FBC 01C17824 */ and $t7, $t6, $at -/* 0D2BC0 800D1FC0 15E00020 */ bnez $t7, .L800D2044 -/* 0D2BC4 800D1FC4 00000000 */ nop -/* 0D2BC8 800D1FC8 95880004 */ lhu $t0, 4($t4) -/* 0D2BCC 800D1FCC 8D990008 */ lw $t9, 8($t4) -/* 0D2BD0 800D1FD0 00084880 */ sll $t1, $t0, 2 -/* 0D2BD4 800D1FD4 01284821 */ addu $t1, $t1, $t0 -/* 0D2BD8 800D1FD8 00094880 */ sll $t1, $t1, 2 -/* 0D2BDC 800D1FDC 01284821 */ addu $t1, $t1, $t0 -/* 0D2BE0 800D1FE0 00094880 */ sll $t1, $t1, 2 -/* 0D2BE4 800D1FE4 01284821 */ addu $t1, $t1, $t0 -/* 0D2BE8 800D1FE8 27380001 */ addiu $t8, $t9, 1 -/* 0D2BEC 800D1FEC 13090006 */ beq $t8, $t1, .L800D2008 -/* 0D2BF0 800D1FF0 00000000 */ nop -/* 0D2BF4 800D1FF4 240A0006 */ li $t2, 6 -/* 0D2BF8 800D1FF8 0C03490C */ jal func_800D2430 -/* 0D2BFC 800D1FFC AD8A0010 */ sw $t2, 0x10($t4) -/* 0D2C00 800D2000 10000107 */ b .L800D2420 -/* 0D2C04 800D2004 24020001 */ li $v0, 1 -.L800D2008: -/* 0D2C08 800D2008 240B0002 */ li $t3, 2 -/* 0D2C0C 800D200C 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 -/* 0D2C10 800D2010 ADAB0010 */ sw $t3, %lo(D_A4600010)($t5) -/* 0D2C14 800D2014 3C0E800F */ lui $t6, %hi(D_800EA5EC) # $t6, 0x800f -/* 0D2C18 800D2018 8DCEA5EC */ lw $t6, %lo(D_800EA5EC)($t6) -/* 0D2C1C 800D201C 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 -/* 0D2C20 800D2020 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 -/* 0D2C24 800D2024 01C17825 */ or $t7, $t6, $at -/* 0D2C28 800D2028 8FB90030 */ lw $t9, 0x30($sp) -/* 0D2C2C 800D202C 3C01800F */ lui $at, %hi(D_800EA5EC) # $at, 0x800f -/* 0D2C30 800D2030 AC2FA5EC */ sw $t7, %lo(D_800EA5EC)($at) -/* 0D2C34 800D2034 0C034946 */ jal func_800D2518 -/* 0D2C38 800D2038 AF200010 */ sw $zero, 0x10($t9) -/* 0D2C3C 800D203C 100000F8 */ b .L800D2420 -/* 0D2C40 800D2040 24020001 */ li $v0, 1 -.L800D2044: -/* 0D2C44 800D2044 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D2C48 800D2048 3C048019 */ lui $a0, %hi(D_801978C0) # $a0, 0x8019 -/* 0D2C4C 800D204C 3C060500 */ lui $a2, (0x05000400 >> 16) # lui $a2, 0x500 -/* 0D2C50 800D2050 8D180000 */ lw $t8, ($t0) -/* 0D2C54 800D2054 8D090008 */ lw $t1, 8($t0) -/* 0D2C58 800D2058 34C60400 */ ori $a2, (0x05000400 & 0xFFFF) # ori $a2, $a2, 0x400 -/* 0D2C5C 800D205C 24050001 */ li $a1, 1 -/* 0D2C60 800D2060 03095021 */ addu $t2, $t8, $t1 -/* 0D2C64 800D2064 AD0A0000 */ sw $t2, ($t0) -/* 0D2C68 800D2068 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D2C6C 800D206C 8D8B0008 */ lw $t3, 8($t4) -/* 0D2C70 800D2070 256D0001 */ addiu $t5, $t3, 1 -/* 0D2C74 800D2074 AD8D0008 */ sw $t5, 8($t4) -/* 0D2C78 800D2078 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D2C7C 800D207C 8C8478C0 */ lw $a0, %lo(D_801978C0)($a0) -/* 0D2C80 800D2080 8DCF0008 */ lw $t7, 8($t6) -/* 0D2C84 800D2084 8DC70000 */ lw $a3, ($t6) -/* 0D2C88 800D2088 0C034C24 */ jal osEPiRawStartDma -/* 0D2C8C 800D208C AFAF0010 */ sw $t7, 0x10($sp) -/* 0D2C90 800D2090 100000E3 */ b .L800D2420 -/* 0D2C94 800D2094 24020001 */ li $v0, 1 -.L800D2098: -/* 0D2C98 800D2098 8FB90030 */ lw $t9, 0x30($sp) -/* 0D2C9C 800D209C 8F380000 */ lw $t8, ($t9) -/* 0D2CA0 800D20A0 170000DA */ bnez $t8, .L800D240C -/* 0D2CA4 800D20A4 00000000 */ nop -/* 0D2CA8 800D20A8 97290004 */ lhu $t1, 4($t9) -/* 0D2CAC 800D20AC 24010003 */ li $at, 3 -/* 0D2CB0 800D20B0 15210017 */ bne $t1, $at, .L800D2110 -/* 0D2CB4 800D20B4 00000000 */ nop -/* 0D2CB8 800D20B8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D2CBC 800D20BC 8F2A0008 */ lw $t2, 8($t9) -/* 0D2CC0 800D20C0 8D0B000C */ lw $t3, 0xc($t0) -/* 0D2CC4 800D20C4 256D0011 */ addiu $t5, $t3, 0x11 -/* 0D2CC8 800D20C8 01AA082A */ slt $at, $t5, $t2 -/* 0D2CCC 800D20CC 10200005 */ beqz $at, .L800D20E4 -/* 0D2CD0 800D20D0 00000000 */ nop -/* 0D2CD4 800D20D4 0C03490C */ jal func_800D2430 -/* 0D2CD8 800D20D8 AF200010 */ sw $zero, 0x10($t9) -/* 0D2CDC 800D20DC 100000D0 */ b .L800D2420 -/* 0D2CE0 800D20E0 24020001 */ li $v0, 1 -.L800D20E4: -/* 0D2CE4 800D20E4 8FAC003C */ lw $t4, 0x3c($sp) -/* 0D2CE8 800D20E8 3C014000 */ lui $at, 0x4000 -/* 0D2CEC 800D20EC 01817024 */ and $t6, $t4, $at -/* 0D2CF0 800D20F0 15C0000C */ bnez $t6, .L800D2124 -/* 0D2CF4 800D20F4 00000000 */ nop -/* 0D2CF8 800D20F8 8FB80030 */ lw $t8, 0x30($sp) -/* 0D2CFC 800D20FC 240F0011 */ li $t7, 17 -/* 0D2D00 800D2100 0C03490C */ jal func_800D2430 -/* 0D2D04 800D2104 AF0F0010 */ sw $t7, 0x10($t8) -/* 0D2D08 800D2108 100000C5 */ b .L800D2420 -/* 0D2D0C 800D210C 24020001 */ li $v0, 1 -.L800D2110: -/* 0D2D10 800D2110 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D2D14 800D2114 8D280000 */ lw $t0, ($t1) -/* 0D2D18 800D2118 8D2B0008 */ lw $t3, 8($t1) -/* 0D2D1C 800D211C 010B5021 */ addu $t2, $t0, $t3 -/* 0D2D20 800D2120 AD2A0000 */ sw $t2, ($t1) -.L800D2124: -/* 0D2D24 800D2124 3C0DA500 */ lui $t5, %hi(D_A5000510) # $t5, 0xa500 -/* 0D2D28 800D2128 8DB90510 */ lw $t9, %lo(D_A5000510)($t5) -/* 0D2D2C 800D212C 3C010020 */ lui $at, 0x20 -/* 0D2D30 800D2130 AFB90034 */ sw $t9, 0x34($sp) -/* 0D2D34 800D2134 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D2D38 800D2138 01817024 */ and $t6, $t4, $at -/* 0D2D3C 800D213C 11C00004 */ beqz $t6, .L800D2150 -/* 0D2D40 800D2140 3C010040 */ lui $at, 0x40 -/* 0D2D44 800D2144 01817824 */ and $t7, $t4, $at -/* 0D2D48 800D2148 15E00006 */ bnez $t7, .L800D2164 -/* 0D2D4C 800D214C 00000000 */ nop -.L800D2150: -/* 0D2D50 800D2150 8FB80034 */ lw $t8, 0x34($sp) -/* 0D2D54 800D2154 3C010200 */ lui $at, 0x200 -/* 0D2D58 800D2158 03014024 */ and $t0, $t8, $at -/* 0D2D5C 800D215C 11000022 */ beqz $t0, .L800D21E8 -/* 0D2D60 800D2160 00000000 */ nop -.L800D2164: -/* 0D2D64 800D2164 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D2D68 800D2168 8D6A000C */ lw $t2, 0xc($t3) -/* 0D2D6C 800D216C 2D410004 */ sltiu $at, $t2, 4 -/* 0D2D70 800D2170 14200010 */ bnez $at, .L800D21B4 -/* 0D2D74 800D2174 00000000 */ nop -/* 0D2D78 800D2178 8FA90030 */ lw $t1, 0x30($sp) -/* 0D2D7C 800D217C 24010003 */ li $at, 3 -/* 0D2D80 800D2180 952D0004 */ lhu $t5, 4($t1) -/* 0D2D84 800D2184 15A10005 */ bne $t5, $at, .L800D219C -/* 0D2D88 800D2188 00000000 */ nop -/* 0D2D8C 800D218C 8D390008 */ lw $t9, 8($t1) -/* 0D2D90 800D2190 2B210053 */ slti $at, $t9, 0x53 -/* 0D2D94 800D2194 14200010 */ bnez $at, .L800D21D8 -/* 0D2D98 800D2198 00000000 */ nop -.L800D219C: -/* 0D2D9C 800D219C 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D2DA0 800D21A0 240E0011 */ li $t6, 17 -/* 0D2DA4 800D21A4 0C03490C */ jal func_800D2430 -/* 0D2DA8 800D21A8 AD8E0010 */ sw $t6, 0x10($t4) -/* 0D2DAC 800D21AC 1000009C */ b .L800D2420 -/* 0D2DB0 800D21B0 24020001 */ li $v0, 1 -.L800D21B4: -/* 0D2DB4 800D21B4 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D2DB8 800D21B8 8FA80030 */ lw $t0, 0x30($sp) -/* 0D2DBC 800D21BC 8DF8000C */ lw $t8, 0xc($t7) -/* 0D2DC0 800D21C0 AFB80028 */ sw $t8, 0x28($sp) -/* 0D2DC4 800D21C4 8D0B0008 */ lw $t3, 8($t0) -/* 0D2DC8 800D21C8 00186880 */ sll $t5, $t8, 2 -/* 0D2DCC 800D21CC 01ED4821 */ addu $t1, $t7, $t5 -/* 0D2DD0 800D21D0 256A0001 */ addiu $t2, $t3, 1 -/* 0D2DD4 800D21D4 AD2A0010 */ sw $t2, 0x10($t1) -.L800D21D8: -/* 0D2DD8 800D21D8 8FB9002C */ lw $t9, 0x2c($sp) -/* 0D2DDC 800D21DC 8F2E000C */ lw $t6, 0xc($t9) -/* 0D2DE0 800D21E0 25CC0001 */ addiu $t4, $t6, 1 -/* 0D2DE4 800D21E4 AF2C000C */ sw $t4, 0xc($t9) -.L800D21E8: -/* 0D2DE8 800D21E8 8FA8003C */ lw $t0, 0x3c($sp) -/* 0D2DEC 800D21EC 3C011000 */ lui $at, 0x1000 -/* 0D2DF0 800D21F0 01015824 */ and $t3, $t0, $at -/* 0D2DF4 800D21F4 11600034 */ beqz $t3, .L800D22C8 -/* 0D2DF8 800D21F8 00000000 */ nop -/* 0D2DFC 800D21FC 8FB80030 */ lw $t8, 0x30($sp) -/* 0D2E00 800D2200 24010057 */ li $at, 87 -/* 0D2E04 800D2204 8F0F0008 */ lw $t7, 8($t8) -/* 0D2E08 800D2208 11E10004 */ beq $t7, $at, .L800D221C -/* 0D2E0C 800D220C 00000000 */ nop -/* 0D2E10 800D2210 240D0006 */ li $t5, 6 -/* 0D2E14 800D2214 0C03490C */ jal func_800D2430 -/* 0D2E18 800D2218 AF0D0010 */ sw $t5, 0x10($t8) -.L800D221C: -/* 0D2E1C 800D221C 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D2E20 800D2220 24010002 */ li $at, 2 -/* 0D2E24 800D2224 95490004 */ lhu $t1, 4($t2) -/* 0D2E28 800D2228 1521000F */ bne $t1, $at, .L800D2268 -/* 0D2E2C 800D222C 00000000 */ nop -/* 0D2E30 800D2230 954E0006 */ lhu $t6, 6($t2) -/* 0D2E34 800D2234 15C0000C */ bnez $t6, .L800D2268 -/* 0D2E38 800D2238 00000000 */ nop -/* 0D2E3C 800D223C 240C0001 */ li $t4, 1 -/* 0D2E40 800D2240 A54C0006 */ sh $t4, 6($t2) -/* 0D2E44 800D2244 8FA80030 */ lw $t0, 0x30($sp) -/* 0D2E48 800D2248 2419FFFF */ li $t9, -1 -/* 0D2E4C 800D224C AD190008 */ sw $t9, 8($t0) -/* 0D2E50 800D2250 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D2E54 800D2254 8D6F003C */ lw $t7, 0x3c($t3) -/* 0D2E58 800D2258 8D6D0044 */ lw $t5, 0x44($t3) -/* 0D2E5C 800D225C 01EDC023 */ subu $t8, $t7, $t5 -/* 0D2E60 800D2260 1000000B */ b .L800D2290 -/* 0D2E64 800D2264 AD78003C */ sw $t8, 0x3c($t3) -.L800D2268: -/* 0D2E68 800D2268 24090002 */ li $t1, 2 -/* 0D2E6C 800D226C 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D2E70 800D2270 ADC90010 */ sw $t1, %lo(D_A4600010)($t6) -/* 0D2E74 800D2274 3C0C800F */ lui $t4, %hi(D_800EA5EC) # $t4, 0x800f -/* 0D2E78 800D2278 8D8CA5EC */ lw $t4, %lo(D_800EA5EC)($t4) -/* 0D2E7C 800D227C 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 -/* 0D2E80 800D2280 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 -/* 0D2E84 800D2284 01815025 */ or $t2, $t4, $at -/* 0D2E88 800D2288 3C01800F */ lui $at, %hi(D_800EA5EC) # $at, 0x800f -/* 0D2E8C 800D228C AC2AA5EC */ sw $t2, %lo(D_800EA5EC)($at) -.L800D2290: -/* 0D2E90 800D2290 8FB9002C */ lw $t9, 0x2c($sp) -/* 0D2E94 800D2294 3C048019 */ lui $a0, %hi(D_801978C0) # $a0, 0x8019 -/* 0D2E98 800D2298 8C8478C0 */ lw $a0, %lo(D_801978C0)($a0) -/* 0D2E9C 800D229C 8F280008 */ lw $t0, 8($t9) -/* 0D2EA0 800D22A0 8F270004 */ lw $a3, 4($t9) -/* 0D2EA4 800D22A4 00002825 */ move $a1, $zero -/* 0D2EA8 800D22A8 00087880 */ sll $t7, $t0, 2 -/* 0D2EAC 800D22AC AFAF0010 */ sw $t7, 0x10($sp) -/* 0D2EB0 800D22B0 0C034C24 */ jal osEPiRawStartDma -/* 0D2EB4 800D22B4 3C060500 */ lui $a2, 0x500 -/* 0D2EB8 800D22B8 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D2EBC 800D22BC 24020001 */ li $v0, 1 -/* 0D2EC0 800D22C0 10000057 */ b .L800D2420 -/* 0D2EC4 800D22C4 ADA00010 */ sw $zero, 0x10($t5) -.L800D22C8: -/* 0D2EC8 800D22C8 8FB80030 */ lw $t8, 0x30($sp) -/* 0D2ECC 800D22CC 2401FFFF */ li $at, -1 -/* 0D2ED0 800D22D0 8F0B0008 */ lw $t3, 8($t8) -/* 0D2ED4 800D22D4 15610020 */ bne $t3, $at, .L800D2358 -/* 0D2ED8 800D22D8 00000000 */ nop -/* 0D2EDC 800D22DC 97090004 */ lhu $t1, 4($t8) -/* 0D2EE0 800D22E0 24010002 */ li $at, 2 -/* 0D2EE4 800D22E4 1521001C */ bne $t1, $at, .L800D2358 -/* 0D2EE8 800D22E8 00000000 */ nop -/* 0D2EEC 800D22EC 970E0006 */ lhu $t6, 6($t8) -/* 0D2EF0 800D22F0 24010001 */ li $at, 1 -/* 0D2EF4 800D22F4 15C10018 */ bne $t6, $at, .L800D2358 -/* 0D2EF8 800D22F8 00000000 */ nop -/* 0D2EFC 800D22FC 270C001C */ addiu $t4, $t8, 0x1c -/* 0D2F00 800D2300 AFAC0024 */ sw $t4, 0x24($sp) -/* 0D2F04 800D2304 8F0A0028 */ lw $t2, 0x28($t8) -/* 0D2F08 800D2308 15400010 */ bnez $t2, .L800D234C -/* 0D2F0C 800D230C 00000000 */ nop -/* 0D2F10 800D2310 8F190020 */ lw $t9, 0x20($t8) -/* 0D2F14 800D2314 8F280000 */ lw $t0, ($t9) -/* 0D2F18 800D2318 8F2F0004 */ lw $t7, 4($t9) -/* 0D2F1C 800D231C 8F2B0008 */ lw $t3, 8($t9) -/* 0D2F20 800D2320 8F2E000C */ lw $t6, 0xc($t9) -/* 0D2F24 800D2324 010F6825 */ or $t5, $t0, $t7 -/* 0D2F28 800D2328 01AB4825 */ or $t1, $t5, $t3 -/* 0D2F2C 800D232C 01C96025 */ or $t4, $t6, $t1 -/* 0D2F30 800D2330 11800006 */ beqz $t4, .L800D234C -/* 0D2F34 800D2334 00000000 */ nop -/* 0D2F38 800D2338 240A0006 */ li $t2, 6 -/* 0D2F3C 800D233C 0C03490C */ jal func_800D2430 -/* 0D2F40 800D2340 AF0A0010 */ sw $t2, 0x10($t8) -/* 0D2F44 800D2344 10000036 */ b .L800D2420 -/* 0D2F48 800D2348 24020001 */ li $v0, 1 -.L800D234C: -/* 0D2F4C 800D234C 8FA80030 */ lw $t0, 0x30($sp) -/* 0D2F50 800D2350 0C034946 */ jal func_800D2518 -/* 0D2F54 800D2354 AD000010 */ sw $zero, 0x10($t0) -.L800D2358: -/* 0D2F58 800D2358 8FAF0030 */ lw $t7, 0x30($sp) -/* 0D2F5C 800D235C 3C014000 */ lui $at, 0x4000 -/* 0D2F60 800D2360 8DED0008 */ lw $t5, 8($t7) -/* 0D2F64 800D2364 25AB0001 */ addiu $t3, $t5, 1 -/* 0D2F68 800D2368 ADEB0008 */ sw $t3, 8($t7) -/* 0D2F6C 800D236C 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D2F70 800D2370 03217024 */ and $t6, $t9, $at -/* 0D2F74 800D2374 11C00019 */ beqz $t6, .L800D23DC -/* 0D2F78 800D2378 00000000 */ nop -/* 0D2F7C 800D237C 8FA90030 */ lw $t1, 0x30($sp) -/* 0D2F80 800D2380 8D2C0008 */ lw $t4, 8($t1) -/* 0D2F84 800D2384 29810055 */ slti $at, $t4, 0x55 -/* 0D2F88 800D2388 14200006 */ bnez $at, .L800D23A4 -/* 0D2F8C 800D238C 00000000 */ nop -/* 0D2F90 800D2390 240A0006 */ li $t2, 6 -/* 0D2F94 800D2394 0C03490C */ jal func_800D2430 -/* 0D2F98 800D2398 AD2A0010 */ sw $t2, 0x10($t1) -/* 0D2F9C 800D239C 10000020 */ b .L800D2420 -/* 0D2FA0 800D23A0 24020001 */ li $v0, 1 -.L800D23A4: -/* 0D2FA4 800D23A4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D2FA8 800D23A8 3C048019 */ lui $a0, %hi(D_801978C0) # $a0, 0x8019 -/* 0D2FAC 800D23AC 3C060500 */ lui $a2, (0x05000400 >> 16) # lui $a2, 0x500 -/* 0D2FB0 800D23B0 8F080008 */ lw $t0, 8($t8) -/* 0D2FB4 800D23B4 8F070000 */ lw $a3, ($t8) -/* 0D2FB8 800D23B8 34C60400 */ ori $a2, (0x05000400 & 0xFFFF) # ori $a2, $a2, 0x400 -/* 0D2FBC 800D23BC 8C8478C0 */ lw $a0, %lo(D_801978C0)($a0) -/* 0D2FC0 800D23C0 00002825 */ move $a1, $zero -/* 0D2FC4 800D23C4 0C034C24 */ jal osEPiRawStartDma -/* 0D2FC8 800D23C8 AFA80010 */ sw $t0, 0x10($sp) -/* 0D2FCC 800D23CC 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D2FD0 800D23D0 24020001 */ li $v0, 1 -/* 0D2FD4 800D23D4 10000012 */ b .L800D2420 -/* 0D2FD8 800D23D8 ADA00010 */ sw $zero, 0x10($t5) -.L800D23DC: -/* 0D2FDC 800D23DC 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D2FE0 800D23E0 8D6F0008 */ lw $t7, 8($t3) -/* 0D2FE4 800D23E4 29E10055 */ slti $at, $t7, 0x55 -/* 0D2FE8 800D23E8 10200006 */ beqz $at, .L800D2404 -/* 0D2FEC 800D23EC 00000000 */ nop -/* 0D2FF0 800D23F0 24190006 */ li $t9, 6 -/* 0D2FF4 800D23F4 0C03490C */ jal func_800D2430 -/* 0D2FF8 800D23F8 AD790010 */ sw $t9, 0x10($t3) -/* 0D2FFC 800D23FC 10000008 */ b .L800D2420 -/* 0D3000 800D2400 24020001 */ li $v0, 1 -.L800D2404: -/* 0D3004 800D2404 10000006 */ b .L800D2420 -/* 0D3008 800D2408 24020001 */ li $v0, 1 -.L800D240C: -/* 0D300C 800D240C 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D3010 800D2410 240E004B */ li $t6, 75 -/* 0D3014 800D2414 0C03490C */ jal func_800D2430 -/* 0D3018 800D2418 AD8E0010 */ sw $t6, 0x10($t4) -/* 0D301C 800D241C 24020001 */ li $v0, 1 -.L800D2420: -/* 0D3020 800D2420 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D3024 800D2424 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D3028 800D2428 03E00008 */ jr $ra -/* 0D302C 800D242C 00000000 */ nop - -glabel func_800D2430 -/* 0D3030 800D2430 3C0E8019 */ lui $t6, %hi(D_801978C0) # $t6, 0x8019 -/* 0D3034 800D2434 8DCE78C0 */ lw $t6, %lo(D_801978C0)($t6) -/* 0D3038 800D2438 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D303C 800D243C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3040 800D2440 25CF0014 */ addiu $t7, $t6, 0x14 -/* 0D3044 800D2444 AFAF001C */ sw $t7, 0x1c($sp) -/* 0D3048 800D2448 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D304C 800D244C 8F190010 */ lw $t9, %lo(D_A4600010)($t8) -/* 0D3050 800D2450 AFB90018 */ sw $t9, 0x18($sp) -/* 0D3054 800D2454 8FA80018 */ lw $t0, 0x18($sp) -/* 0D3058 800D2458 31090002 */ andi $t1, $t0, 2 -/* 0D305C 800D245C 11200008 */ beqz $t1, .L800D2480 -/* 0D3060 800D2460 00000000 */ nop -.L800D2464: -/* 0D3064 800D2464 3C0AA460 */ lui $t2, %hi(D_A4600010) # $t2, 0xa460 -/* 0D3068 800D2468 8D4B0010 */ lw $t3, %lo(D_A4600010)($t2) -/* 0D306C 800D246C AFAB0018 */ sw $t3, 0x18($sp) -/* 0D3070 800D2470 8FAC0018 */ lw $t4, 0x18($sp) -/* 0D3074 800D2474 318D0002 */ andi $t5, $t4, 2 -/* 0D3078 800D2478 15A0FFFA */ bnez $t5, .L800D2464 -/* 0D307C 800D247C 00000000 */ nop -.L800D2480: -/* 0D3080 800D2480 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D3084 800D2484 3C011000 */ lui $at, 0x1000 -/* 0D3088 800D2488 3C19A500 */ lui $t9, %hi(D_A5000510) # $t9, 0xa500 -/* 0D308C 800D248C 8DCF0014 */ lw $t7, 0x14($t6) -/* 0D3090 800D2490 3C08A460 */ lui $t0, %hi(D_A4600010) # $t0, 0xa460 -/* 0D3094 800D2494 01E1C025 */ or $t8, $t7, $at -/* 0D3098 800D2498 AF380510 */ sw $t8, %lo(D_A5000510)($t9) -/* 0D309C 800D249C 8D090010 */ lw $t1, %lo(D_A4600010)($t0) -/* 0D30A0 800D24A0 AFA90018 */ sw $t1, 0x18($sp) -/* 0D30A4 800D24A4 8FAA0018 */ lw $t2, 0x18($sp) -/* 0D30A8 800D24A8 314B0002 */ andi $t3, $t2, 2 -/* 0D30AC 800D24AC 11600008 */ beqz $t3, .L800D24D0 -/* 0D30B0 800D24B0 00000000 */ nop -.L800D24B4: -/* 0D30B4 800D24B4 3C0CA460 */ lui $t4, %hi(D_A4600010) # $t4, 0xa460 -/* 0D30B8 800D24B8 8D8D0010 */ lw $t5, %lo(D_A4600010)($t4) -/* 0D30BC 800D24BC AFAD0018 */ sw $t5, 0x18($sp) -/* 0D30C0 800D24C0 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D30C4 800D24C4 31CF0002 */ andi $t7, $t6, 2 -/* 0D30C8 800D24C8 15E0FFFA */ bnez $t7, .L800D24B4 -/* 0D30CC 800D24CC 00000000 */ nop -.L800D24D0: -/* 0D30D0 800D24D0 8FB8001C */ lw $t8, 0x1c($sp) -/* 0D30D4 800D24D4 3C08A500 */ lui $t0, %hi(D_A5000510) # $t0, 0xa500 -/* 0D30D8 800D24D8 8F190014 */ lw $t9, 0x14($t8) -/* 0D30DC 800D24DC 0C034946 */ jal func_800D2518 -/* 0D30E0 800D24E0 AD190510 */ sw $t9, %lo(D_A5000510)($t0) -/* 0D30E4 800D24E4 24090002 */ li $t1, 2 -/* 0D30E8 800D24E8 3C0AA460 */ lui $t2, %hi(D_A4600010) # $t2, 0xa460 -/* 0D30EC 800D24EC AD490010 */ sw $t1, %lo(D_A4600010)($t2) -/* 0D30F0 800D24F0 3C0B800F */ lui $t3, %hi(D_800EA5EC) # $t3, 0x800f -/* 0D30F4 800D24F4 8D6BA5EC */ lw $t3, %lo(D_800EA5EC)($t3) -/* 0D30F8 800D24F8 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 -/* 0D30FC 800D24FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3100 800D2500 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 -/* 0D3104 800D2504 01616025 */ or $t4, $t3, $at -/* 0D3108 800D2508 3C01800F */ lui $at, %hi(D_800EA5EC) # $at, 0x800f -/* 0D310C 800D250C AC2CA5EC */ sw $t4, %lo(D_800EA5EC)($at) -/* 0D3110 800D2510 03E00008 */ jr $ra -/* 0D3114 800D2514 27BD0020 */ addiu $sp, $sp, 0x20 - -glabel func_800D2518 -/* 0D3118 800D2518 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D311C 800D251C 3C0E8019 */ lui $t6, %hi(D_80196440) # $t6, 0x8019 -/* 0D3120 800D2520 25CE6440 */ addiu $t6, %lo(D_80196440) # addiu $t6, $t6, 0x6440 -/* 0D3124 800D2524 25CF0040 */ addiu $t7, $t6, 0x40 -/* 0D3128 800D2528 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D312C 800D252C AFB00018 */ sw $s0, 0x18($sp) -/* 0D3130 800D2530 AFAF002C */ sw $t7, 0x2c($sp) -/* 0D3134 800D2534 8DD80040 */ lw $t8, 0x40($t6) -/* 0D3138 800D2538 1300002D */ beqz $t8, .L800D25F0 -/* 0D313C 800D253C AFB80028 */ sw $t8, 0x28($sp) -/* 0D3140 800D2540 8F190008 */ lw $t9, 8($t8) -/* 0D3144 800D2544 8F080010 */ lw $t0, 0x10($t8) -/* 0D3148 800D2548 0328082A */ slt $at, $t9, $t0 -/* 0D314C 800D254C 10200028 */ beqz $at, .L800D25F0 -/* 0D3150 800D2550 00000000 */ nop -/* 0D3154 800D2554 8FA90028 */ lw $t1, 0x28($sp) -/* 0D3158 800D2558 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D315C 800D255C 8D2A000C */ lw $t2, 0xc($t1) -/* 0D3160 800D2560 8D2B0008 */ lw $t3, 8($t1) -/* 0D3164 800D2564 8D2D0010 */ lw $t5, 0x10($t1) -/* 0D3168 800D2568 014B6021 */ addu $t4, $t2, $t3 -/* 0D316C 800D256C 018D001A */ div $zero, $t4, $t5 -/* 0D3170 800D2570 00007810 */ mfhi $t7 -/* 0D3174 800D2574 AFAF0024 */ sw $t7, 0x24($sp) -/* 0D3178 800D2578 8D280014 */ lw $t0, 0x14($t1) -/* 0D317C 800D257C 8DD80004 */ lw $t8, 4($t6) -/* 0D3180 800D2580 000FC880 */ sll $t9, $t7, 2 -/* 0D3184 800D2584 01195021 */ addu $t2, $t0, $t9 -/* 0D3188 800D2588 AD580000 */ sw $t8, ($t2) -/* 0D318C 800D258C 8FAB0028 */ lw $t3, 0x28($sp) -/* 0D3190 800D2590 15A00002 */ bnez $t5, .L800D259C -/* 0D3194 800D2594 00000000 */ nop -/* 0D3198 800D2598 0007000D */ break 7 -.L800D259C: -/* 0D319C 800D259C 2401FFFF */ li $at, -1 -/* 0D31A0 800D25A0 15A10004 */ bne $t5, $at, .L800D25B4 -/* 0D31A4 800D25A4 3C018000 */ lui $at, 0x8000 -/* 0D31A8 800D25A8 15810002 */ bne $t4, $at, .L800D25B4 -/* 0D31AC 800D25AC 00000000 */ nop -/* 0D31B0 800D25B0 0006000D */ break 6 -.L800D25B4: -/* 0D31B4 800D25B4 8D6C0008 */ lw $t4, 8($t3) -/* 0D31B8 800D25B8 258D0001 */ addiu $t5, $t4, 1 -/* 0D31BC 800D25BC AD6D0008 */ sw $t5, 8($t3) -/* 0D31C0 800D25C0 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D31C4 800D25C4 8DCF0000 */ lw $t7, ($t6) -/* 0D31C8 800D25C8 8DE90000 */ lw $t1, ($t7) -/* 0D31CC 800D25CC 11200008 */ beqz $t1, .L800D25F0 -/* 0D31D0 800D25D0 00000000 */ nop -/* 0D31D4 800D25D4 0C034645 */ jal __osPopThread -/* 0D31D8 800D25D8 01C02025 */ move $a0, $t6 -/* 0D31DC 800D25DC 00408025 */ move $s0, $v0 -/* 0D31E0 800D25E0 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0D31E4 800D25E4 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0D31E8 800D25E8 0C034633 */ jal __osEnqueueThread -/* 0D31EC 800D25EC 02002825 */ move $a1, $s0 -.L800D25F0: -/* 0D31F0 800D25F0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D31F4 800D25F4 8FB00018 */ lw $s0, 0x18($sp) -/* 0D31F8 800D25F8 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0D31FC 800D25FC 03E00008 */ jr $ra -/* 0D3200 800D2600 00000000 */ nop - -/* 0D3204 800D2604 00000000 */ nop -/* 0D3208 800D2608 00000000 */ nop -/* 0D320C 800D260C 00000000 */ nop -glabel __osTimerServicesInit -/* 0D3210 800D2610 3C018019 */ lui $at, %hi(D_80197600) # $at, 0x8019 -/* 0D3214 800D2614 240E0000 */ li $t6, 0 -/* 0D3218 800D2618 240F0000 */ li $t7, 0 -/* 0D321C 800D261C AC2F7604 */ sw $t7, %lo(D_80197600+0x4)($at) -/* 0D3220 800D2620 AC2E7600 */ sw $t6, %lo(D_80197600)($at) -/* 0D3224 800D2624 3C018019 */ lui $at, %hi(D_80197608) # $at, 0x8019 -/* 0D3228 800D2628 3C18800F */ lui $t8, %hi(D_800EB3C0) # $t8, 0x800f -/* 0D322C 800D262C 8F18B3C0 */ lw $t8, %lo(D_800EB3C0)($t8) -/* 0D3230 800D2630 AC207608 */ sw $zero, %lo(D_80197600+0x8)($at) -/* 0D3234 800D2634 3C018019 */ lui $at, %hi(D_8019760C) # $at, 0x8019 -/* 0D3238 800D2638 AC20760C */ sw $zero, %lo(D_8019760C)($at) -/* 0D323C 800D263C 3C19800F */ lui $t9, %hi(D_800EB3C0) # $t9, 0x800f -/* 0D3240 800D2640 AF180004 */ sw $t8, 4($t8) -/* 0D3244 800D2644 8F39B3C0 */ lw $t9, %lo(D_800EB3C0)($t9) -/* 0D3248 800D2648 3C09800F */ lui $t1, %hi(D_800EB3C0) # $t1, 0x800f -/* 0D324C 800D264C 240A0000 */ li $t2, 0 -/* 0D3250 800D2650 8F280004 */ lw $t0, 4($t9) -/* 0D3254 800D2654 240B0000 */ li $t3, 0 -/* 0D3258 800D2658 3C0C800F */ lui $t4, %hi(D_800EB3C0) # $t4, 0x800f -/* 0D325C 800D265C AF280000 */ sw $t0, ($t9) -/* 0D3260 800D2660 8D29B3C0 */ lw $t1, %lo(D_800EB3C0)($t1) -/* 0D3264 800D2664 3C0D800F */ lui $t5, %hi(D_800EB3C0) # $t5, 0x800f -/* 0D3268 800D2668 3C18800F */ lui $t8, %hi(D_800EB3C0) # $t8, 0x800f -/* 0D326C 800D266C AD2A0010 */ sw $t2, 0x10($t1) -/* 0D3270 800D2670 AD2B0014 */ sw $t3, 0x14($t1) -/* 0D3274 800D2674 8D8CB3C0 */ lw $t4, %lo(D_800EB3C0)($t4) -/* 0D3278 800D2678 8D8E0010 */ lw $t6, 0x10($t4) -/* 0D327C 800D267C 8D8F0014 */ lw $t7, 0x14($t4) -/* 0D3280 800D2680 AD8E0008 */ sw $t6, 8($t4) -/* 0D3284 800D2684 AD8F000C */ sw $t7, 0xc($t4) -/* 0D3288 800D2688 8DADB3C0 */ lw $t5, %lo(D_800EB3C0)($t5) -/* 0D328C 800D268C ADA00018 */ sw $zero, 0x18($t5) -/* 0D3290 800D2690 8F18B3C0 */ lw $t8, %lo(D_800EB3C0)($t8) -/* 0D3294 800D2694 03E00008 */ jr $ra -/* 0D3298 800D2698 AF00001C */ sw $zero, 0x1c($t8) - -glabel __osTimerInterrupt -/* 0D329C 800D269C 3C0E800F */ lui $t6, %hi(D_800EB3C0) # $t6, 0x800f -/* 0D32A0 800D26A0 8DCEB3C0 */ lw $t6, %lo(D_800EB3C0)($t6) -/* 0D32A4 800D26A4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D32A8 800D26A8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D32AC 800D26AC 8DCF0000 */ lw $t7, ($t6) -/* 0D32B0 800D26B0 11EE0054 */ beq $t7, $t6, .L800D2804 -/* 0D32B4 800D26B4 00000000 */ nop -.L800D26B8: -/* 0D32B8 800D26B8 3C18800F */ lui $t8, %hi(D_800EB3C0) # $t8, 0x800f -/* 0D32BC 800D26BC 8F18B3C0 */ lw $t8, %lo(D_800EB3C0)($t8) -/* 0D32C0 800D26C0 8F190000 */ lw $t9, ($t8) -/* 0D32C4 800D26C4 17380006 */ bne $t9, $t8, .L800D26E0 -/* 0D32C8 800D26C8 AFB90024 */ sw $t9, 0x24($sp) -/* 0D32CC 800D26CC 0C035F24 */ jal __osSetCompare -/* 0D32D0 800D26D0 00002025 */ move $a0, $zero -/* 0D32D4 800D26D4 3C018019 */ lui $at, %hi(D_80197610) # $at, 0x8019 -/* 0D32D8 800D26D8 1000004A */ b .L800D2804 -/* 0D32DC 800D26DC AC207610 */ sw $zero, %lo(D_80197610)($at) -.L800D26E0: -/* 0D32E0 800D26E0 0C034468 */ jal osGetCount -/* 0D32E4 800D26E4 00000000 */ nop -/* 0D32E8 800D26E8 AFA20020 */ sw $v0, 0x20($sp) -/* 0D32EC 800D26EC 3C098019 */ lui $t1, %hi(D_80197610) # $t1, 0x8019 -/* 0D32F0 800D26F0 8D297610 */ lw $t1, %lo(D_80197610)($t1) -/* 0D32F4 800D26F4 8FA80020 */ lw $t0, 0x20($sp) -/* 0D32F8 800D26F8 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D32FC 800D26FC 3C018019 */ lui $at, %hi(D_80197610) # $at, 0x8019 -/* 0D3300 800D2700 01095023 */ subu $t2, $t0, $t1 -/* 0D3304 800D2704 AFAA001C */ sw $t2, 0x1c($sp) -/* 0D3308 800D2708 AC287610 */ sw $t0, %lo(D_80197610)($at) -/* 0D330C 800D270C 8DEE0010 */ lw $t6, 0x10($t7) -/* 0D3310 800D2710 8FAB001C */ lw $t3, 0x1c($sp) -/* 0D3314 800D2714 240C0000 */ li $t4, 0 -/* 0D3318 800D2718 01E0C825 */ move $t9, $t7 -/* 0D331C 800D271C 01CC082B */ sltu $at, $t6, $t4 -/* 0D3320 800D2720 8DEF0014 */ lw $t7, 0x14($t7) -/* 0D3324 800D2724 14200016 */ bnez $at, .L800D2780 -/* 0D3328 800D2728 01606825 */ move $t5, $t3 -/* 0D332C 800D272C 018E082B */ sltu $at, $t4, $t6 -/* 0D3330 800D2730 14200003 */ bnez $at, .L800D2740 -/* 0D3334 800D2734 01AF082B */ sltu $at, $t5, $t7 -/* 0D3338 800D2738 10200011 */ beqz $at, .L800D2780 -/* 0D333C 800D273C 00000000 */ nop -.L800D2740: -/* 0D3340 800D2740 27380010 */ addiu $t8, $t9, 0x10 -/* 0D3344 800D2744 AFB80018 */ sw $t8, 0x18($sp) -/* 0D3348 800D2748 8F2B0014 */ lw $t3, 0x14($t9) -/* 0D334C 800D274C 8F2A0010 */ lw $t2, 0x10($t9) -/* 0D3350 800D2750 016D082B */ sltu $at, $t3, $t5 -/* 0D3354 800D2754 014C4023 */ subu $t0, $t2, $t4 -/* 0D3358 800D2758 01014023 */ subu $t0, $t0, $at -/* 0D335C 800D275C 016D4823 */ subu $t1, $t3, $t5 -/* 0D3360 800D2760 AF290014 */ sw $t1, 0x14($t9) -/* 0D3364 800D2764 AF280010 */ sw $t0, 0x10($t9) -/* 0D3368 800D2768 8FAE0024 */ lw $t6, 0x24($sp) -/* 0D336C 800D276C 8DC40010 */ lw $a0, 0x10($t6) -/* 0D3370 800D2770 0C034A05 */ jal __osSetTimerIntr -/* 0D3374 800D2774 8DC50014 */ lw $a1, 0x14($t6) -/* 0D3378 800D2778 10000022 */ b .L800D2804 -/* 0D337C 800D277C 00000000 */ nop -.L800D2780: -/* 0D3380 800D2780 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D3384 800D2784 8DF80000 */ lw $t8, ($t7) -/* 0D3388 800D2788 8DEA0004 */ lw $t2, 4($t7) -/* 0D338C 800D278C AD580000 */ sw $t8, ($t2) -/* 0D3390 800D2790 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D3394 800D2794 8D6C0004 */ lw $t4, 4($t3) -/* 0D3398 800D2798 8D6D0000 */ lw $t5, ($t3) -/* 0D339C 800D279C ADAC0004 */ sw $t4, 4($t5) -/* 0D33A0 800D27A0 8FA80024 */ lw $t0, 0x24($sp) -/* 0D33A4 800D27A4 AD000000 */ sw $zero, ($t0) -/* 0D33A8 800D27A8 8FA90024 */ lw $t1, 0x24($sp) -/* 0D33AC 800D27AC AD200004 */ sw $zero, 4($t1) -/* 0D33B0 800D27B0 8FB90024 */ lw $t9, 0x24($sp) -/* 0D33B4 800D27B4 8F2E0018 */ lw $t6, 0x18($t9) -/* 0D33B8 800D27B8 11C00005 */ beqz $t6, .L800D27D0 -/* 0D33BC 800D27BC 00000000 */ nop -/* 0D33C0 800D27C0 01C02025 */ move $a0, $t6 -/* 0D33C4 800D27C4 8F25001C */ lw $a1, 0x1c($t9) -/* 0D33C8 800D27C8 0C033630 */ jal osSendMesg -/* 0D33CC 800D27CC 00003025 */ move $a2, $zero -.L800D27D0: -/* 0D33D0 800D27D0 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D33D4 800D27D4 8DF80008 */ lw $t8, 8($t7) -/* 0D33D8 800D27D8 8DF9000C */ lw $t9, 0xc($t7) -/* 0D33DC 800D27DC 17000003 */ bnez $t8, .L800D27EC -/* 0D33E0 800D27E0 00000000 */ nop -/* 0D33E4 800D27E4 1320FFB4 */ beqz $t9, .L800D26B8 -/* 0D33E8 800D27E8 00000000 */ nop -.L800D27EC: -/* 0D33EC 800D27EC ADF80010 */ sw $t8, 0x10($t7) -/* 0D33F0 800D27F0 ADF90014 */ sw $t9, 0x14($t7) -/* 0D33F4 800D27F4 0C034A22 */ jal __osInsertTimer -/* 0D33F8 800D27F8 8FA40024 */ lw $a0, 0x24($sp) -/* 0D33FC 800D27FC 1000FFAE */ b .L800D26B8 -/* 0D3400 800D2800 00000000 */ nop -.L800D2804: -/* 0D3404 800D2804 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3408 800D2808 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D340C 800D280C 03E00008 */ jr $ra -/* 0D3410 800D2810 00000000 */ nop - -glabel __osSetTimerIntr -/* 0D3414 800D2814 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D3418 800D2818 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D341C 800D281C AFA40028 */ sw $a0, 0x28($sp) -/* 0D3420 800D2820 0C0346AC */ jal __osDisableInt -/* 0D3424 800D2824 AFA5002C */ sw $a1, 0x2c($sp) -/* 0D3428 800D2828 0C034468 */ jal osGetCount -/* 0D342C 800D282C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D3430 800D2830 3C018019 */ lui $at, %hi(D_80197610) # $at, 0x8019 -/* 0D3434 800D2834 AC227610 */ sw $v0, %lo(D_80197610)($at) -/* 0D3438 800D2838 3C0E8019 */ lui $t6, %hi(D_80197610) # $t6, 0x8019 -/* 0D343C 800D283C 8DCE7610 */ lw $t6, %lo(D_80197610)($t6) -/* 0D3440 800D2840 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D3444 800D2844 8FA80028 */ lw $t0, 0x28($sp) -/* 0D3448 800D2848 01C0C825 */ move $t9, $t6 -/* 0D344C 800D284C 03295821 */ addu $t3, $t9, $t1 -/* 0D3450 800D2850 24180000 */ li $t8, 0 -/* 0D3454 800D2854 0169082B */ sltu $at, $t3, $t1 -/* 0D3458 800D2858 00385021 */ addu $t2, $at, $t8 -/* 0D345C 800D285C 01485021 */ addu $t2, $t2, $t0 -/* 0D3460 800D2860 AFAA0020 */ sw $t2, 0x20($sp) -/* 0D3464 800D2864 AFAB0024 */ sw $t3, 0x24($sp) -/* 0D3468 800D2868 0C035F24 */ jal __osSetCompare -/* 0D346C 800D286C 01602025 */ move $a0, $t3 -/* 0D3470 800D2870 0C0346B4 */ jal __osRestoreInt -/* 0D3474 800D2874 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D3478 800D2878 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D347C 800D287C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D3480 800D2880 03E00008 */ jr $ra -/* 0D3484 800D2884 00000000 */ nop - -glabel __osInsertTimer -/* 0D3488 800D2888 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D348C 800D288C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3490 800D2890 0C0346AC */ jal __osDisableInt -/* 0D3494 800D2894 AFA40038 */ sw $a0, 0x38($sp) -/* 0D3498 800D2898 3C0E800F */ lui $t6, %hi(D_800EB3C0) # $t6, 0x800f -/* 0D349C 800D289C 8DCEB3C0 */ lw $t6, %lo(D_800EB3C0)($t6) -/* 0D34A0 800D28A0 AFA20024 */ sw $v0, 0x24($sp) -/* 0D34A4 800D28A4 8FB80038 */ lw $t8, 0x38($sp) -/* 0D34A8 800D28A8 8DCF0000 */ lw $t7, ($t6) -/* 0D34AC 800D28AC AFAF0034 */ sw $t7, 0x34($sp) -/* 0D34B0 800D28B0 8F090014 */ lw $t1, 0x14($t8) -/* 0D34B4 800D28B4 8F080010 */ lw $t0, 0x10($t8) -/* 0D34B8 800D28B8 AFA9002C */ sw $t1, 0x2c($sp) -/* 0D34BC 800D28BC 11EE0029 */ beq $t7, $t6, .L800D2964 -/* 0D34C0 800D28C0 AFA80028 */ sw $t0, 0x28($sp) -/* 0D34C4 800D28C4 8DEA0010 */ lw $t2, 0x10($t7) -/* 0D34C8 800D28C8 8DEB0014 */ lw $t3, 0x14($t7) -/* 0D34CC 800D28CC 010A082B */ sltu $at, $t0, $t2 -/* 0D34D0 800D28D0 14200024 */ bnez $at, .L800D2964 -/* 0D34D4 800D28D4 0148082B */ sltu $at, $t2, $t0 -/* 0D34D8 800D28D8 14200003 */ bnez $at, .L800D28E8 -/* 0D34DC 800D28DC 0169082B */ sltu $at, $t3, $t1 -/* 0D34E0 800D28E0 10200020 */ beqz $at, .L800D2964 -/* 0D34E4 800D28E4 00000000 */ nop -.L800D28E8: -/* 0D34E8 800D28E8 27B90028 */ addiu $t9, $sp, 0x28 -/* 0D34EC 800D28EC 8FB80034 */ lw $t8, 0x34($sp) -/* 0D34F0 800D28F0 AFB90020 */ sw $t9, 0x20($sp) -/* 0D34F4 800D28F4 8F2D0004 */ lw $t5, 4($t9) -/* 0D34F8 800D28F8 8F2C0000 */ lw $t4, ($t9) -/* 0D34FC 800D28FC 8F0F0014 */ lw $t7, 0x14($t8) -/* 0D3500 800D2900 8F0E0010 */ lw $t6, 0x10($t8) -/* 0D3504 800D2904 3C18800F */ lui $t8, %hi(D_800EB3C0) # $t8, 0x800f -/* 0D3508 800D2908 01AF082B */ sltu $at, $t5, $t7 -/* 0D350C 800D290C 018E4023 */ subu $t0, $t4, $t6 -/* 0D3510 800D2910 01014023 */ subu $t0, $t0, $at -/* 0D3514 800D2914 01AF4823 */ subu $t1, $t5, $t7 -/* 0D3518 800D2918 AF290004 */ sw $t1, 4($t9) -/* 0D351C 800D291C AF280000 */ sw $t0, ($t9) -/* 0D3520 800D2920 8FAA0034 */ lw $t2, 0x34($sp) -/* 0D3524 800D2924 8F18B3C0 */ lw $t8, %lo(D_800EB3C0)($t8) -/* 0D3528 800D2928 8D4B0000 */ lw $t3, ($t2) -/* 0D352C 800D292C 1178000D */ beq $t3, $t8, .L800D2964 -/* 0D3530 800D2930 AFAB0034 */ sw $t3, 0x34($sp) -/* 0D3534 800D2934 8FAC0028 */ lw $t4, 0x28($sp) -/* 0D3538 800D2938 8D6E0010 */ lw $t6, 0x10($t3) -/* 0D353C 800D293C 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D3540 800D2940 8D6F0014 */ lw $t7, 0x14($t3) -/* 0D3544 800D2944 01CC082B */ sltu $at, $t6, $t4 -/* 0D3548 800D2948 1420FFE7 */ bnez $at, .L800D28E8 -/* 0D354C 800D294C 00000000 */ nop -/* 0D3550 800D2950 018E082B */ sltu $at, $t4, $t6 -/* 0D3554 800D2954 14200003 */ bnez $at, .L800D2964 -/* 0D3558 800D2958 01ED082B */ sltu $at, $t7, $t5 -/* 0D355C 800D295C 1420FFE2 */ bnez $at, .L800D28E8 -/* 0D3560 800D2960 00000000 */ nop -.L800D2964: -/* 0D3564 800D2964 8FB90038 */ lw $t9, 0x38($sp) -/* 0D3568 800D2968 8FA80028 */ lw $t0, 0x28($sp) -/* 0D356C 800D296C 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D3570 800D2970 3C18800F */ lui $t8, %hi(D_800EB3C0) # $t8, 0x800f -/* 0D3574 800D2974 AF280010 */ sw $t0, 0x10($t9) -/* 0D3578 800D2978 AF290014 */ sw $t1, 0x14($t9) -/* 0D357C 800D297C 8F18B3C0 */ lw $t8, %lo(D_800EB3C0)($t8) -/* 0D3580 800D2980 8FAA0034 */ lw $t2, 0x34($sp) -/* 0D3584 800D2984 1158000D */ beq $t2, $t8, .L800D29BC -/* 0D3588 800D2988 00000000 */ nop -/* 0D358C 800D298C 254B0010 */ addiu $t3, $t2, 0x10 -/* 0D3590 800D2990 AFAB001C */ sw $t3, 0x1c($sp) -/* 0D3594 800D2994 8D4D0014 */ lw $t5, 0x14($t2) -/* 0D3598 800D2998 8D4C0010 */ lw $t4, 0x10($t2) -/* 0D359C 800D299C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D35A0 800D29A0 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D35A4 800D29A4 018E4023 */ subu $t0, $t4, $t6 -/* 0D35A8 800D29A8 01AF082B */ sltu $at, $t5, $t7 -/* 0D35AC 800D29AC 01014023 */ subu $t0, $t0, $at -/* 0D35B0 800D29B0 01AF4823 */ subu $t1, $t5, $t7 -/* 0D35B4 800D29B4 AD490014 */ sw $t1, 0x14($t2) -/* 0D35B8 800D29B8 AD480010 */ sw $t0, 0x10($t2) -.L800D29BC: -/* 0D35BC 800D29BC 8FB90034 */ lw $t9, 0x34($sp) -/* 0D35C0 800D29C0 8FB80038 */ lw $t8, 0x38($sp) -/* 0D35C4 800D29C4 AF190000 */ sw $t9, ($t8) -/* 0D35C8 800D29C8 8FAB0034 */ lw $t3, 0x34($sp) -/* 0D35CC 800D29CC 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D35D0 800D29D0 8D6C0004 */ lw $t4, 4($t3) -/* 0D35D4 800D29D4 ADAC0004 */ sw $t4, 4($t5) -/* 0D35D8 800D29D8 8FAF0034 */ lw $t7, 0x34($sp) -/* 0D35DC 800D29DC 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D35E0 800D29E0 8DE80004 */ lw $t0, 4($t7) -/* 0D35E4 800D29E4 AD0E0000 */ sw $t6, ($t0) -/* 0D35E8 800D29E8 8FAA0034 */ lw $t2, 0x34($sp) -/* 0D35EC 800D29EC 8FA90038 */ lw $t1, 0x38($sp) -/* 0D35F0 800D29F0 AD490004 */ sw $t1, 4($t2) -/* 0D35F4 800D29F4 0C0346B4 */ jal __osRestoreInt -/* 0D35F8 800D29F8 8FA40024 */ lw $a0, 0x24($sp) -/* 0D35FC 800D29FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3600 800D2A00 8FA20028 */ lw $v0, 0x28($sp) -/* 0D3604 800D2A04 8FA3002C */ lw $v1, 0x2c($sp) -/* 0D3608 800D2A08 03E00008 */ jr $ra -/* 0D360C 800D2A0C 27BD0038 */ addiu $sp, $sp, 0x38 - -glabel osGetThreadPri -/* 0D3610 800D2A10 14800003 */ bnez $a0, .L800D2A20 -/* 0D3614 800D2A14 00000000 */ nop -/* 0D3618 800D2A18 3C04800F */ lui $a0, %hi(D_800EB3B0) # $a0, 0x800f -/* 0D361C 800D2A1C 8C84B3B0 */ lw $a0, %lo(D_800EB3B0)($a0) -.L800D2A20: -/* 0D3620 800D2A20 03E00008 */ jr $ra -/* 0D3624 800D2A24 8C820004 */ lw $v0, 4($a0) - -/* 0D3628 800D2A28 00000000 */ nop -/* 0D362C 800D2A2C 00000000 */ nop -glabel __osViInit -/* 0D3630 800D2A30 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D3634 800D2A34 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3638 800D2A38 3C04800F */ lui $a0, %hi(D_800EB3D0) # $a0, 0x800f -/* 0D363C 800D2A3C 2484B3D0 */ addiu $a0, %lo(D_800EB3D0) # addiu $a0, $a0, -0x4c30 -/* 0D3640 800D2A40 0C033698 */ jal bzero -/* 0D3644 800D2A44 24050060 */ li $a1, 96 -/* 0D3648 800D2A48 3C0E800F */ lui $t6, %hi(D_800EB3D0) # $t6, 0x800f -/* 0D364C 800D2A4C 25CEB3D0 */ addiu $t6, %lo(D_800EB3D0) # addiu $t6, $t6, -0x4c30 -/* 0D3650 800D2A50 3C01800F */ lui $at, %hi(D_800EB430) # $at, 0x800f -/* 0D3654 800D2A54 AC2EB430 */ sw $t6, %lo(D_800EB430)($at) -/* 0D3658 800D2A58 3C01800F */ lui $at, %hi(D_800EB434) # $at, 0x800f -/* 0D365C 800D2A5C 25CF0030 */ addiu $t7, $t6, 0x30 -/* 0D3660 800D2A60 AC2FB434 */ sw $t7, %lo(D_800EB434)($at) -/* 0D3664 800D2A64 24180001 */ li $t8, 1 -/* 0D3668 800D2A68 A5D80032 */ sh $t8, 0x32($t6) -/* 0D366C 800D2A6C 3C08800F */ lui $t0, %hi(D_800EB430) # $t0, 0x800f -/* 0D3670 800D2A70 8D08B430 */ lw $t0, %lo(D_800EB430)($t0) -/* 0D3674 800D2A74 24190001 */ li $t9, 1 -/* 0D3678 800D2A78 3C098000 */ lui $t1, %hi(D_80000300) # $t1, 0x8000 -/* 0D367C 800D2A7C A5190002 */ sh $t9, 2($t0) -/* 0D3680 800D2A80 8D290300 */ lw $t1, %lo(D_80000300)($t1) -/* 0D3684 800D2A84 1520000B */ bnez $t1, .L800D2AB4 -/* 0D3688 800D2A88 00000000 */ nop -/* 0D368C 800D2A8C 3C0B800F */ lui $t3, %hi(D_800EB434) # $t3, 0x800f -/* 0D3690 800D2A90 8D6BB434 */ lw $t3, %lo(D_800EB434)($t3) -/* 0D3694 800D2A94 3C0A800F */ lui $t2, %hi(D_800EB4B0) # $t2, 0x800f -/* 0D3698 800D2A98 254AB4B0 */ addiu $t2, %lo(D_800EB4B0) # addiu $t2, $t2, -0x4b50 -/* 0D369C 800D2A9C 3C0C02F5 */ lui $t4, (0x02F5B2D2 >> 16) # lui $t4, 0x2f5 -/* 0D36A0 800D2AA0 358CB2D2 */ ori $t4, (0x02F5B2D2 & 0xFFFF) # ori $t4, $t4, 0xb2d2 -/* 0D36A4 800D2AA4 3C01800F */ lui $at, %hi(D_800EB438) # $at, 0x800f -/* 0D36A8 800D2AA8 AD6A0008 */ sw $t2, 8($t3) -/* 0D36AC 800D2AAC 10000019 */ b .L800D2B14 -/* 0D36B0 800D2AB0 AC2CB438 */ sw $t4, %lo(D_800EB438)($at) -.L800D2AB4: -/* 0D36B4 800D2AB4 3C0D8000 */ lui $t5, %hi(D_80000300) # $t5, 0x8000 -/* 0D36B8 800D2AB8 8DAD0300 */ lw $t5, %lo(D_80000300)($t5) -/* 0D36BC 800D2ABC 24010002 */ li $at, 2 -/* 0D36C0 800D2AC0 15A1000B */ bne $t5, $at, .L800D2AF0 -/* 0D36C4 800D2AC4 00000000 */ nop -/* 0D36C8 800D2AC8 3C18800F */ lui $t8, %hi(D_800EB434) # $t8, 0x800f -/* 0D36CC 800D2ACC 8F18B434 */ lw $t8, %lo(D_800EB434)($t8) -/* 0D36D0 800D2AD0 3C0F800F */ lui $t7, %hi(D_800EB500) # $t7, 0x800f -/* 0D36D4 800D2AD4 25EFB500 */ addiu $t7, %lo(D_800EB500) # addiu $t7, $t7, -0x4b00 -/* 0D36D8 800D2AD8 3C0E02E6 */ lui $t6, (0x02E6025C >> 16) # lui $t6, 0x2e6 -/* 0D36DC 800D2ADC 35CE025C */ ori $t6, (0x02E6025C & 0xFFFF) # ori $t6, $t6, 0x25c -/* 0D36E0 800D2AE0 3C01800F */ lui $at, %hi(D_800EB438) # $at, 0x800f -/* 0D36E4 800D2AE4 AF0F0008 */ sw $t7, 8($t8) -/* 0D36E8 800D2AE8 1000000A */ b .L800D2B14 -/* 0D36EC 800D2AEC AC2EB438 */ sw $t6, %lo(D_800EB438)($at) -.L800D2AF0: -/* 0D36F0 800D2AF0 3C08800F */ lui $t0, %hi(D_800EB434) # $t0, 0x800f -/* 0D36F4 800D2AF4 8D08B434 */ lw $t0, %lo(D_800EB434)($t0) -/* 0D36F8 800D2AF8 3C19800F */ lui $t9, %hi(D_800EB550) # $t9, 0x800f -/* 0D36FC 800D2AFC 2739B550 */ addiu $t9, %lo(D_800EB550) # addiu $t9, $t9, -0x4ab0 -/* 0D3700 800D2B00 3C0902E6 */ lui $t1, (0x02E6D354 >> 16) # lui $t1, 0x2e6 -/* 0D3704 800D2B04 3529D354 */ ori $t1, (0x02E6D354 & 0xFFFF) # ori $t1, $t1, 0xd354 -/* 0D3708 800D2B08 3C01800F */ lui $at, %hi(D_800EB438) # $at, 0x800f -/* 0D370C 800D2B0C AD190008 */ sw $t9, 8($t0) -/* 0D3710 800D2B10 AC29B438 */ sw $t1, %lo(D_800EB438)($at) -.L800D2B14: -/* 0D3714 800D2B14 3C0B800F */ lui $t3, %hi(D_800EB434) # $t3, 0x800f -/* 0D3718 800D2B18 8D6BB434 */ lw $t3, %lo(D_800EB434)($t3) -/* 0D371C 800D2B1C 240A0020 */ li $t2, 32 -/* 0D3720 800D2B20 3C0C800F */ lui $t4, %hi(D_800EB434) # $t4, 0x800f -/* 0D3724 800D2B24 A56A0000 */ sh $t2, ($t3) -/* 0D3728 800D2B28 8D8CB434 */ lw $t4, %lo(D_800EB434)($t4) -/* 0D372C 800D2B2C 3C18A440 */ lui $t8, %hi(D_A4400010) # $t8, 0xa440 -/* 0D3730 800D2B30 8D8D0008 */ lw $t5, 8($t4) -/* 0D3734 800D2B34 8DAF0004 */ lw $t7, 4($t5) -/* 0D3738 800D2B38 AD8F000C */ sw $t7, 0xc($t4) -/* 0D373C 800D2B3C 8F0E0010 */ lw $t6, %lo(D_A4400010)($t8) -/* 0D3740 800D2B40 2DC1000B */ sltiu $at, $t6, 0xb -/* 0D3744 800D2B44 14200006 */ bnez $at, .L800D2B60 -/* 0D3748 800D2B48 00000000 */ nop -.L800D2B4C: -/* 0D374C 800D2B4C 3C19A440 */ lui $t9, %hi(D_A4400010) # $t9, 0xa440 -/* 0D3750 800D2B50 8F280010 */ lw $t0, %lo(D_A4400010)($t9) -/* 0D3754 800D2B54 2D01000B */ sltiu $at, $t0, 0xb -/* 0D3758 800D2B58 1020FFFC */ beqz $at, .L800D2B4C -/* 0D375C 800D2B5C 00000000 */ nop -.L800D2B60: -/* 0D3760 800D2B60 3C09A440 */ lui $t1, 0xa440 -/* 0D3764 800D2B64 0C034AE4 */ jal __osViSwapContext -/* 0D3768 800D2B68 AD200000 */ sw $zero, ($t1) -/* 0D376C 800D2B6C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3770 800D2B70 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D3774 800D2B74 03E00008 */ jr $ra -/* 0D3778 800D2B78 00000000 */ nop - -/* 0D377C 800D2B7C 00000000 */ nop -glabel func_800D2B80 -/* 0D3780 800D2B80 3C02800F */ lui $v0, %hi(D_800EB430) # 0x800f -/* 0D3784 800D2B84 03E00008 */ jr $ra -/* 0D3788 800D2B88 8C42B430 */ lw $v0, %lo(D_800EB430)($v0) # -0x4bd0($v0) - -/* 0D378C 800D2B8C 00000000 */ nop -glabel __osViSwapContext -/* 0D3790 800D2B90 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D3794 800D2B94 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D3798 800D2B98 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D379C 800D2B9C AFB20020 */ sw $s2, 0x20($sp) -/* 0D37A0 800D2BA0 AFB00018 */ sw $s0, 0x18($sp) -/* 0D37A4 800D2BA4 AFA00030 */ sw $zero, 0x30($sp) -/* 0D37A8 800D2BA8 3C11800F */ lui $s1, %hi(D_800EB434) # $s1, 0x800f -/* 0D37AC 800D2BAC 3C0EA440 */ lui $t6, %hi(D_A4400010) # $t6, 0xa440 -/* 0D37B0 800D2BB0 8E31B434 */ lw $s1, %lo(D_800EB434)($s1) -/* 0D37B4 800D2BB4 8DCF0010 */ lw $t7, %lo(D_A4400010)($t6) -/* 0D37B8 800D2BB8 8E300008 */ lw $s0, 8($s1) -/* 0D37BC 800D2BBC 31F80001 */ andi $t8, $t7, 1 -/* 0D37C0 800D2BC0 AFB80030 */ sw $t8, 0x30($sp) -/* 0D37C4 800D2BC4 0C034E0C */ jal osVirtualToPhysical -/* 0D37C8 800D2BC8 8E240004 */ lw $a0, 4($s1) -/* 0D37CC 800D2BCC 8FB90030 */ lw $t9, 0x30($sp) -/* 0D37D0 800D2BD0 00409025 */ move $s2, $v0 -/* 0D37D4 800D2BD4 00194080 */ sll $t0, $t9, 2 -/* 0D37D8 800D2BD8 01194021 */ addu $t0, $t0, $t9 -/* 0D37DC 800D2BDC 00084080 */ sll $t0, $t0, 2 -/* 0D37E0 800D2BE0 02084821 */ addu $t1, $s0, $t0 -/* 0D37E4 800D2BE4 8D2A0028 */ lw $t2, 0x28($t1) -/* 0D37E8 800D2BE8 01525821 */ addu $t3, $t2, $s2 -/* 0D37EC 800D2BEC AFAB003C */ sw $t3, 0x3c($sp) -/* 0D37F0 800D2BF0 962C0000 */ lhu $t4, ($s1) -/* 0D37F4 800D2BF4 318D0002 */ andi $t5, $t4, 2 -/* 0D37F8 800D2BF8 11A00008 */ beqz $t5, .L800D2C1C -/* 0D37FC 800D2BFC 00000000 */ nop -/* 0D3800 800D2C00 8E0F0020 */ lw $t7, 0x20($s0) -/* 0D3804 800D2C04 8E2E0020 */ lw $t6, 0x20($s1) -/* 0D3808 800D2C08 2401F000 */ li $at, -4096 -/* 0D380C 800D2C0C 01E1C024 */ and $t8, $t7, $at -/* 0D3810 800D2C10 01D8C825 */ or $t9, $t6, $t8 -/* 0D3814 800D2C14 10000003 */ b .L800D2C24 -/* 0D3818 800D2C18 AE390020 */ sw $t9, 0x20($s1) -.L800D2C1C: -/* 0D381C 800D2C1C 8E080020 */ lw $t0, 0x20($s0) -/* 0D3820 800D2C20 AE280020 */ sw $t0, 0x20($s1) -.L800D2C24: -/* 0D3824 800D2C24 96290000 */ lhu $t1, ($s1) -/* 0D3828 800D2C28 312A0004 */ andi $t2, $t1, 4 -/* 0D382C 800D2C2C 11400041 */ beqz $t2, .L800D2D34 -/* 0D3830 800D2C30 00000000 */ nop -/* 0D3834 800D2C34 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D3838 800D2C38 000B6080 */ sll $t4, $t3, 2 -/* 0D383C 800D2C3C 018B6021 */ addu $t4, $t4, $t3 -/* 0D3840 800D2C40 000C6080 */ sll $t4, $t4, 2 -/* 0D3844 800D2C44 020C6821 */ addu $t5, $s0, $t4 -/* 0D3848 800D2C48 8DAF002C */ lw $t7, 0x2c($t5) -/* 0D384C 800D2C4C 31EE0FFF */ andi $t6, $t7, 0xfff -/* 0D3850 800D2C50 448E3000 */ mtc1 $t6, $f6 -/* 0D3854 800D2C54 AFAE0034 */ sw $t6, 0x34($sp) -/* 0D3858 800D2C58 C6240024 */ lwc1 $f4, 0x24($s1) -/* 0D385C 800D2C5C 05C10005 */ bgez $t6, .L800D2C74 -/* 0D3860 800D2C60 46803220 */ cvt.s.w $f8, $f6 -/* 0D3864 800D2C64 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D3868 800D2C68 44815000 */ mtc1 $at, $f10 -/* 0D386C 800D2C6C 00000000 */ nop -/* 0D3870 800D2C70 460A4200 */ add.s $f8, $f8, $f10 -.L800D2C74: -/* 0D3874 800D2C74 46082402 */ mul.s $f16, $f4, $f8 -/* 0D3878 800D2C78 24190001 */ li $t9, 1 -/* 0D387C 800D2C7C 4458F800 */ cfc1 $t8, $31 -/* 0D3880 800D2C80 44D9F800 */ ctc1 $t9, $31 -/* 0D3884 800D2C84 00000000 */ nop -/* 0D3888 800D2C88 460084A4 */ cvt.w.s $f18, $f16 -/* 0D388C 800D2C8C 4459F800 */ cfc1 $t9, $31 -/* 0D3890 800D2C90 00000000 */ nop -/* 0D3894 800D2C94 33210004 */ andi $at, $t9, 4 -/* 0D3898 800D2C98 33390078 */ andi $t9, $t9, 0x78 -/* 0D389C 800D2C9C 13200013 */ beqz $t9, .L800D2CEC -/* 0D38A0 800D2CA0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D38A4 800D2CA4 44819000 */ mtc1 $at, $f18 -/* 0D38A8 800D2CA8 24190001 */ li $t9, 1 -/* 0D38AC 800D2CAC 46128481 */ sub.s $f18, $f16, $f18 -/* 0D38B0 800D2CB0 44D9F800 */ ctc1 $t9, $31 -/* 0D38B4 800D2CB4 00000000 */ nop -/* 0D38B8 800D2CB8 460094A4 */ cvt.w.s $f18, $f18 -/* 0D38BC 800D2CBC 4459F800 */ cfc1 $t9, $31 -/* 0D38C0 800D2CC0 00000000 */ nop -/* 0D38C4 800D2CC4 33210004 */ andi $at, $t9, 4 -/* 0D38C8 800D2CC8 33390078 */ andi $t9, $t9, 0x78 -/* 0D38CC 800D2CCC 17200005 */ bnez $t9, .L800D2CE4 -/* 0D38D0 800D2CD0 00000000 */ nop -/* 0D38D4 800D2CD4 44199000 */ mfc1 $t9, $f18 -/* 0D38D8 800D2CD8 3C018000 */ lui $at, 0x8000 -/* 0D38DC 800D2CDC 10000007 */ b .L800D2CFC -/* 0D38E0 800D2CE0 0321C825 */ or $t9, $t9, $at -.L800D2CE4: -/* 0D38E4 800D2CE4 10000005 */ b .L800D2CFC -/* 0D38E8 800D2CE8 2419FFFF */ li $t9, -1 -.L800D2CEC: -/* 0D38EC 800D2CEC 44199000 */ mfc1 $t9, $f18 -/* 0D38F0 800D2CF0 00000000 */ nop -/* 0D38F4 800D2CF4 0720FFFB */ bltz $t9, .L800D2CE4 -/* 0D38F8 800D2CF8 00000000 */ nop -.L800D2CFC: -/* 0D38FC 800D2CFC AE39002C */ sw $t9, 0x2c($s1) -/* 0D3900 800D2D00 8FA90030 */ lw $t1, 0x30($sp) -/* 0D3904 800D2D04 8E28002C */ lw $t0, 0x2c($s1) -/* 0D3908 800D2D08 2401F000 */ li $at, -4096 -/* 0D390C 800D2D0C 00095080 */ sll $t2, $t1, 2 -/* 0D3910 800D2D10 01495021 */ addu $t2, $t2, $t1 -/* 0D3914 800D2D14 000A5080 */ sll $t2, $t2, 2 -/* 0D3918 800D2D18 020A5821 */ addu $t3, $s0, $t2 -/* 0D391C 800D2D1C 8D6C002C */ lw $t4, 0x2c($t3) -/* 0D3920 800D2D20 44D8F800 */ ctc1 $t8, $31 -/* 0D3924 800D2D24 01816824 */ and $t5, $t4, $at -/* 0D3928 800D2D28 010D7825 */ or $t7, $t0, $t5 -/* 0D392C 800D2D2C 10000008 */ b .L800D2D50 -/* 0D3930 800D2D30 AE2F002C */ sw $t7, 0x2c($s1) -.L800D2D34: -/* 0D3934 800D2D34 8FAE0030 */ lw $t6, 0x30($sp) -/* 0D3938 800D2D38 000EC080 */ sll $t8, $t6, 2 -/* 0D393C 800D2D3C 030EC021 */ addu $t8, $t8, $t6 -/* 0D3940 800D2D40 0018C080 */ sll $t8, $t8, 2 -/* 0D3944 800D2D44 0218C821 */ addu $t9, $s0, $t8 -/* 0D3948 800D2D48 8F29002C */ lw $t1, 0x2c($t9) -/* 0D394C 800D2D4C AE29002C */ sw $t1, 0x2c($s1) -.L800D2D50: -/* 0D3950 800D2D50 8E0A001C */ lw $t2, 0x1c($s0) -/* 0D3954 800D2D54 AFAA0038 */ sw $t2, 0x38($sp) -/* 0D3958 800D2D58 962B0000 */ lhu $t3, ($s1) -/* 0D395C 800D2D5C 316C0020 */ andi $t4, $t3, 0x20 -/* 0D3960 800D2D60 11800002 */ beqz $t4, .L800D2D6C -/* 0D3964 800D2D64 00000000 */ nop -/* 0D3968 800D2D68 AFA00038 */ sw $zero, 0x38($sp) -.L800D2D6C: -/* 0D396C 800D2D6C 96280000 */ lhu $t0, ($s1) -/* 0D3970 800D2D70 310D0040 */ andi $t5, $t0, 0x40 -/* 0D3974 800D2D74 11A00005 */ beqz $t5, .L800D2D8C -/* 0D3978 800D2D78 00000000 */ nop -/* 0D397C 800D2D7C AE20002C */ sw $zero, 0x2c($s1) -/* 0D3980 800D2D80 0C034E0C */ jal osVirtualToPhysical -/* 0D3984 800D2D84 8E240004 */ lw $a0, 4($s1) -/* 0D3988 800D2D88 AFA2003C */ sw $v0, 0x3c($sp) -.L800D2D8C: -/* 0D398C 800D2D8C 962F0000 */ lhu $t7, ($s1) -/* 0D3990 800D2D90 31EE0080 */ andi $t6, $t7, 0x80 -/* 0D3994 800D2D94 11C00009 */ beqz $t6, .L800D2DBC -/* 0D3998 800D2D98 00000000 */ nop -/* 0D399C 800D2D9C 96380028 */ lhu $t8, 0x28($s1) -/* 0D39A0 800D2DA0 3C0103FF */ lui $at, 0x3ff -/* 0D39A4 800D2DA4 8E240004 */ lw $a0, 4($s1) -/* 0D39A8 800D2DA8 0018CC00 */ sll $t9, $t8, 0x10 -/* 0D39AC 800D2DAC 03214824 */ and $t1, $t9, $at -/* 0D39B0 800D2DB0 0C034E0C */ jal osVirtualToPhysical -/* 0D39B4 800D2DB4 AE29002C */ sw $t1, 0x2c($s1) -/* 0D39B8 800D2DB8 AFA2003C */ sw $v0, 0x3c($sp) -.L800D2DBC: -/* 0D39BC 800D2DBC 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D39C0 800D2DC0 3C0BA440 */ lui $t3, %hi(D_A4400020) # $t3, 0xa440 -/* 0D39C4 800D2DC4 3C08A440 */ lui $t0, %hi(D_A440002C) # $t0, 0xa440 -/* 0D39C8 800D2DC8 AD6A0004 */ sw $t2, %lo(D_A4400004)($t3) -/* 0D39CC 800D2DCC 8E0C0008 */ lw $t4, 8($s0) -/* 0D39D0 800D2DD0 3C0FA440 */ lui $t7, %hi(D_A4400014) # $t7, 0xa440 -/* 0D39D4 800D2DD4 3C18A440 */ lui $t8, %hi(D_A4400018) # $t8, 0xa440 -/* 0D39D8 800D2DD8 AD0C0008 */ sw $t4, %lo(D_A4400008)($t0) -/* 0D39DC 800D2DDC 8E0D000C */ lw $t5, 0xc($s0) -/* 0D39E0 800D2DE0 3C09A440 */ lui $t1, %hi(D_A440001C) # $t1, 0xa440 -/* 0D39E4 800D2DE4 3C01800F */ lui $at, %hi(D_800EB434) # $at, 0x800f -/* 0D39E8 800D2DE8 ADED0014 */ sw $t5, %lo(D_A4400014)($t7) -/* 0D39EC 800D2DEC 8E0E0010 */ lw $t6, 0x10($s0) -/* 0D39F0 800D2DF0 AF0E0018 */ sw $t6, %lo(D_A4400018)($t8) -/* 0D39F4 800D2DF4 8E190014 */ lw $t9, 0x14($s0) -/* 0D39F8 800D2DF8 AD39001C */ sw $t9, %lo(D_A440001C)($t1) -/* 0D39FC 800D2DFC 8E0A0018 */ lw $t2, 0x18($s0) -/* 0D3A00 800D2E00 3C19A440 */ lui $t9, %hi(D_A440000C) # $t9, 0xa440 -/* 0D3A04 800D2E04 AD6A0020 */ sw $t2, %lo(D_A4400020)($t3) -/* 0D3A08 800D2E08 8FAC0038 */ lw $t4, 0x38($sp) -/* 0D3A0C 800D2E0C AD0C0024 */ sw $t4, %lo(D_A4400024)($t0) -/* 0D3A10 800D2E10 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D3A14 800D2E14 000D7880 */ sll $t7, $t5, 2 -/* 0D3A18 800D2E18 01ED7821 */ addu $t7, $t7, $t5 -/* 0D3A1C 800D2E1C 000F7880 */ sll $t7, $t7, 2 -/* 0D3A20 800D2E20 020F7021 */ addu $t6, $s0, $t7 -/* 0D3A24 800D2E24 8DD80030 */ lw $t8, 0x30($t6) -/* 0D3A28 800D2E28 AF380028 */ sw $t8, %lo(D_A4400028)($t9) -/* 0D3A2C 800D2E2C 8FA90030 */ lw $t1, 0x30($sp) -/* 0D3A30 800D2E30 00095080 */ sll $t2, $t1, 2 -/* 0D3A34 800D2E34 01495021 */ addu $t2, $t2, $t1 -/* 0D3A38 800D2E38 000A5080 */ sll $t2, $t2, 2 -/* 0D3A3C 800D2E3C 020A5821 */ addu $t3, $s0, $t2 -/* 0D3A40 800D2E40 8D6C0034 */ lw $t4, 0x34($t3) -/* 0D3A44 800D2E44 3C0AA440 */ lui $t2, %hi(D_A4400030) # $t2, 0xa440 -/* 0D3A48 800D2E48 AD0C002C */ sw $t4, %lo(D_A440002C)($t0) -/* 0D3A4C 800D2E4C 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D3A50 800D2E50 3C0CA440 */ lui $t4, %hi(D_A4400034) # $t4, 0xa440 -/* 0D3A54 800D2E54 000D7880 */ sll $t7, $t5, 2 -/* 0D3A58 800D2E58 01ED7821 */ addu $t7, $t7, $t5 -/* 0D3A5C 800D2E5C 000F7880 */ sll $t7, $t7, 2 -/* 0D3A60 800D2E60 020F7021 */ addu $t6, $s0, $t7 -/* 0D3A64 800D2E64 8DD80038 */ lw $t8, 0x38($t6) -/* 0D3A68 800D2E68 3C0DA440 */ lui $t5, 0xa440 -/* 0D3A6C 800D2E6C 3C0F800F */ lui $t7, %hi(D_800EB430) # $t7, 0x800f -/* 0D3A70 800D2E70 AF38000C */ sw $t8, %lo(D_A440000C)($t9) -/* 0D3A74 800D2E74 8E290020 */ lw $t1, 0x20($s1) -/* 0D3A78 800D2E78 3C18800F */ lui $t8, %hi(D_800EB430) # $t8, 0x800f -/* 0D3A7C 800D2E7C 3C0E800F */ lui $t6, %hi(D_800EB434) # $t6, 0x800f -/* 0D3A80 800D2E80 AD490030 */ sw $t1, %lo(D_A4400030)($t2) -/* 0D3A84 800D2E84 8E2B002C */ lw $t3, 0x2c($s1) -/* 0D3A88 800D2E88 AD8B0034 */ sw $t3, %lo(D_A4400034)($t4) -/* 0D3A8C 800D2E8C 8E28000C */ lw $t0, 0xc($s1) -/* 0D3A90 800D2E90 ADA80000 */ sw $t0, ($t5) -/* 0D3A94 800D2E94 8DEFB430 */ lw $t7, %lo(D_800EB430)($t7) -/* 0D3A98 800D2E98 AC2FB434 */ sw $t7, %lo(D_800EB434)($at) -/* 0D3A9C 800D2E9C 3C01800F */ lui $at, %hi(D_800EB430) # $at, 0x800f -/* 0D3AA0 800D2EA0 AC31B430 */ sw $s1, %lo(D_800EB430)($at) -/* 0D3AA4 800D2EA4 8F18B430 */ lw $t8, %lo(D_800EB430)($t8) -/* 0D3AA8 800D2EA8 8DCEB434 */ lw $t6, %lo(D_800EB434)($t6) -/* 0D3AAC 800D2EAC 270A0030 */ addiu $t2, $t8, 0x30 -.L800D2EB0: -/* 0D3AB0 800D2EB0 8F010000 */ lw $at, ($t8) -/* 0D3AB4 800D2EB4 2718000C */ addiu $t8, $t8, 0xc -/* 0D3AB8 800D2EB8 25CE000C */ addiu $t6, $t6, 0xc -/* 0D3ABC 800D2EBC ADC1FFF4 */ sw $at, -0xc($t6) -/* 0D3AC0 800D2EC0 8F01FFF8 */ lw $at, -8($t8) -/* 0D3AC4 800D2EC4 ADC1FFF8 */ sw $at, -8($t6) -/* 0D3AC8 800D2EC8 8F01FFFC */ lw $at, -4($t8) -/* 0D3ACC 800D2ECC 170AFFF8 */ bne $t8, $t2, .L800D2EB0 -/* 0D3AD0 800D2ED0 ADC1FFFC */ sw $at, -4($t6) -/* 0D3AD4 800D2ED4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D3AD8 800D2ED8 8FB00018 */ lw $s0, 0x18($sp) -/* 0D3ADC 800D2EDC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D3AE0 800D2EE0 8FB20020 */ lw $s2, 0x20($sp) -/* 0D3AE4 800D2EE4 03E00008 */ jr $ra -/* 0D3AE8 800D2EE8 27BD0048 */ addiu $sp, $sp, 0x48 - -/* 0D3AEC 800D2EEC 00000000 */ nop -glabel __osPiCreateAccessQueue -/* 0D3AF0 800D2EF0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D3AF4 800D2EF4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3AF8 800D2EF8 240E0001 */ li $t6, 1 -/* 0D3AFC 800D2EFC 3C01800F */ lui $at, %hi(D_800EB440) # $at, 0x800f -/* 0D3B00 800D2F00 3C048019 */ lui $a0, %hi(D_80197628) # $a0, 0x8019 -/* 0D3B04 800D2F04 3C058019 */ lui $a1, %hi(D_80197620) # $a1, 0x8019 -/* 0D3B08 800D2F08 AC2EB440 */ sw $t6, %lo(D_800EB440)($at) -/* 0D3B0C 800D2F0C 24A57620 */ addiu $a1, %lo(D_80197620) # addiu $a1, $a1, 0x7620 -/* 0D3B10 800D2F10 24847628 */ addiu $a0, %lo(D_80197628) # addiu $a0, $a0, 0x7628 -/* 0D3B14 800D2F14 0C033358 */ jal osCreateMesgQueue -/* 0D3B18 800D2F18 24060001 */ li $a2, 1 -/* 0D3B1C 800D2F1C 3C048019 */ lui $a0, %hi(D_80197628) # $a0, 0x8019 -/* 0D3B20 800D2F20 24847628 */ addiu $a0, %lo(D_80197628) # addiu $a0, $a0, 0x7628 -/* 0D3B24 800D2F24 00002825 */ move $a1, $zero -/* 0D3B28 800D2F28 0C033630 */ jal osSendMesg -/* 0D3B2C 800D2F2C 00003025 */ move $a2, $zero -/* 0D3B30 800D2F30 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3B34 800D2F34 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D3B38 800D2F38 03E00008 */ jr $ra -/* 0D3B3C 800D2F3C 00000000 */ nop - -glabel __osPiGetAccess -/* 0D3B40 800D2F40 3C0E800F */ lui $t6, %hi(D_800EB440) # $t6, 0x800f -/* 0D3B44 800D2F44 8DCEB440 */ lw $t6, %lo(D_800EB440)($t6) -/* 0D3B48 800D2F48 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D3B4C 800D2F4C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3B50 800D2F50 15C00003 */ bnez $t6, .L800D2F60 -/* 0D3B54 800D2F54 00000000 */ nop -/* 0D3B58 800D2F58 0C034BBC */ jal __osPiCreateAccessQueue -/* 0D3B5C 800D2F5C 00000000 */ nop -.L800D2F60: -/* 0D3B60 800D2F60 3C048019 */ lui $a0, %hi(D_80197628) # $a0, 0x8019 -/* 0D3B64 800D2F64 24847628 */ addiu $a0, %lo(D_80197628) # addiu $a0, $a0, 0x7628 -/* 0D3B68 800D2F68 27A5001C */ addiu $a1, $sp, 0x1c -/* 0D3B6C 800D2F6C 0C0335D4 */ jal osRecvMesg -/* 0D3B70 800D2F70 24060001 */ li $a2, 1 -/* 0D3B74 800D2F74 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3B78 800D2F78 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D3B7C 800D2F7C 03E00008 */ jr $ra -/* 0D3B80 800D2F80 00000000 */ nop - -glabel __osPiRelAccess -/* 0D3B84 800D2F84 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D3B88 800D2F88 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3B8C 800D2F8C 3C048019 */ lui $a0, %hi(D_80197628) # $a0, 0x8019 -/* 0D3B90 800D2F90 24847628 */ addiu $a0, %lo(D_80197628) # addiu $a0, $a0, 0x7628 -/* 0D3B94 800D2F94 00002825 */ move $a1, $zero -/* 0D3B98 800D2F98 0C033630 */ jal osSendMesg -/* 0D3B9C 800D2F9C 00003025 */ move $a2, $zero -/* 0D3BA0 800D2FA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D3BA4 800D2FA4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D3BA8 800D2FA8 03E00008 */ jr $ra -/* 0D3BAC 800D2FAC 00000000 */ nop - -glabel osPiRawStartDma -/* 0D3BB0 800D2FB0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D3BB4 800D2FB4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D3BB8 800D2FB8 AFA40028 */ sw $a0, 0x28($sp) -/* 0D3BBC 800D2FBC AFA5002C */ sw $a1, 0x2c($sp) -/* 0D3BC0 800D2FC0 AFA60030 */ sw $a2, 0x30($sp) -/* 0D3BC4 800D2FC4 AFA70034 */ sw $a3, 0x34($sp) -/* 0D3BC8 800D2FC8 AFB10018 */ sw $s1, 0x18($sp) -/* 0D3BCC 800D2FCC AFB00014 */ sw $s0, 0x14($sp) -/* 0D3BD0 800D2FD0 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D3BD4 800D2FD4 8DD00010 */ lw $s0, %lo(D_A4600010)($t6) -/* 0D3BD8 800D2FD8 320F0003 */ andi $t7, $s0, 3 -/* 0D3BDC 800D2FDC 11E00006 */ beqz $t7, .L800D2FF8 -/* 0D3BE0 800D2FE0 00000000 */ nop -.L800D2FE4: -/* 0D3BE4 800D2FE4 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D3BE8 800D2FE8 8F100010 */ lw $s0, %lo(D_A4600010)($t8) -/* 0D3BEC 800D2FEC 32190003 */ andi $t9, $s0, 3 -/* 0D3BF0 800D2FF0 1720FFFC */ bnez $t9, .L800D2FE4 -/* 0D3BF4 800D2FF4 00000000 */ nop -.L800D2FF8: -/* 0D3BF8 800D2FF8 0C034E0C */ jal osVirtualToPhysical -/* 0D3BFC 800D2FFC 8FA40030 */ lw $a0, 0x30($sp) -/* 0D3C00 800D3000 3C08A460 */ lui $t0, 0xa460 -/* 0D3C04 800D3004 AD020000 */ sw $v0, ($t0) -/* 0D3C08 800D3008 3C098000 */ lui $t1, %hi(D_80000308) # $t1, 0x8000 -/* 0D3C0C 800D300C 8D290308 */ lw $t1, %lo(D_80000308)($t1) -/* 0D3C10 800D3010 8FAA002C */ lw $t2, 0x2c($sp) -/* 0D3C14 800D3014 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0D3C18 800D3018 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0D3C1C 800D301C 012A5825 */ or $t3, $t1, $t2 -/* 0D3C20 800D3020 01616024 */ and $t4, $t3, $at -/* 0D3C24 800D3024 3C0DA460 */ lui $t5, %hi(D_A4600004) # $t5, 0xa460 -/* 0D3C28 800D3028 ADAC0004 */ sw $t4, %lo(D_A4600004)($t5) -/* 0D3C2C 800D302C 8FB10028 */ lw $s1, 0x28($sp) -/* 0D3C30 800D3030 12200005 */ beqz $s1, .L800D3048 -/* 0D3C34 800D3034 24010001 */ li $at, 1 -/* 0D3C38 800D3038 12210008 */ beq $s1, $at, .L800D305C -/* 0D3C3C 800D303C 00000000 */ nop -/* 0D3C40 800D3040 1000000B */ b .L800D3070 -/* 0D3C44 800D3044 00000000 */ nop -.L800D3048: -/* 0D3C48 800D3048 8FAE0034 */ lw $t6, 0x34($sp) -/* 0D3C4C 800D304C 3C18A460 */ lui $t8, %hi(D_A460000C) # $t8, 0xa460 -/* 0D3C50 800D3050 25CFFFFF */ addiu $t7, $t6, -1 -/* 0D3C54 800D3054 10000008 */ b .L800D3078 -/* 0D3C58 800D3058 AF0F000C */ sw $t7, %lo(D_A460000C)($t8) -.L800D305C: -/* 0D3C5C 800D305C 8FB90034 */ lw $t9, 0x34($sp) -/* 0D3C60 800D3060 3C09A460 */ lui $t1, %hi(D_A4600008) # $t1, 0xa460 -/* 0D3C64 800D3064 2728FFFF */ addiu $t0, $t9, -1 -/* 0D3C68 800D3068 10000003 */ b .L800D3078 -/* 0D3C6C 800D306C AD280008 */ sw $t0, %lo(D_A4600008)($t1) -.L800D3070: -/* 0D3C70 800D3070 10000002 */ b .L800D307C -/* 0D3C74 800D3074 2402FFFF */ li $v0, -1 -.L800D3078: -/* 0D3C78 800D3078 00001025 */ move $v0, $zero -.L800D307C: -/* 0D3C7C 800D307C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D3C80 800D3080 8FB00014 */ lw $s0, 0x14($sp) -/* 0D3C84 800D3084 8FB10018 */ lw $s1, 0x18($sp) -/* 0D3C88 800D3088 03E00008 */ jr $ra -/* 0D3C8C 800D308C 27BD0028 */ addiu $sp, $sp, 0x28 - -glabel osEPiRawStartDma -/* 0D3C90 800D3090 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D3C94 800D3094 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D3C98 800D3098 AFA40028 */ sw $a0, 0x28($sp) -/* 0D3C9C 800D309C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D3CA0 800D30A0 AFA60030 */ sw $a2, 0x30($sp) -/* 0D3CA4 800D30A4 AFA70034 */ sw $a3, 0x34($sp) -/* 0D3CA8 800D30A8 AFB10018 */ sw $s1, 0x18($sp) -/* 0D3CAC 800D30AC AFB00014 */ sw $s0, 0x14($sp) -/* 0D3CB0 800D30B0 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D3CB4 800D30B4 8DD00010 */ lw $s0, %lo(D_A4600010)($t6) -/* 0D3CB8 800D30B8 320F0003 */ andi $t7, $s0, 3 -/* 0D3CBC 800D30BC 11E00006 */ beqz $t7, .L800D30D8 -/* 0D3CC0 800D30C0 00000000 */ nop -.L800D30C4: -/* 0D3CC4 800D30C4 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D3CC8 800D30C8 8F100010 */ lw $s0, %lo(D_A4600010)($t8) -/* 0D3CCC 800D30CC 32190003 */ andi $t9, $s0, 3 -/* 0D3CD0 800D30D0 1720FFFC */ bnez $t9, .L800D30C4 -/* 0D3CD4 800D30D4 00000000 */ nop -.L800D30D8: -/* 0D3CD8 800D30D8 0C034E0C */ jal osVirtualToPhysical -/* 0D3CDC 800D30DC 8FA40034 */ lw $a0, 0x34($sp) -/* 0D3CE0 800D30E0 3C08A460 */ lui $t0, 0xa460 -/* 0D3CE4 800D30E4 AD020000 */ sw $v0, ($t0) -/* 0D3CE8 800D30E8 8FA90028 */ lw $t1, 0x28($sp) -/* 0D3CEC 800D30EC 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D3CF0 800D30F0 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0D3CF4 800D30F4 8D2A000C */ lw $t2, 0xc($t1) -/* 0D3CF8 800D30F8 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0D3CFC 800D30FC 3C0EA460 */ lui $t6, %hi(D_A4600004) # $t6, 0xa460 -/* 0D3D00 800D3100 014B6025 */ or $t4, $t2, $t3 -/* 0D3D04 800D3104 01816824 */ and $t5, $t4, $at -/* 0D3D08 800D3108 ADCD0004 */ sw $t5, %lo(D_A4600004)($t6) -/* 0D3D0C 800D310C 8FB1002C */ lw $s1, 0x2c($sp) -/* 0D3D10 800D3110 12200005 */ beqz $s1, .L800D3128 -/* 0D3D14 800D3114 24010001 */ li $at, 1 -/* 0D3D18 800D3118 12210008 */ beq $s1, $at, .L800D313C -/* 0D3D1C 800D311C 00000000 */ nop -/* 0D3D20 800D3120 1000000B */ b .L800D3150 -/* 0D3D24 800D3124 00000000 */ nop -.L800D3128: -/* 0D3D28 800D3128 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D3D2C 800D312C 3C19A460 */ lui $t9, %hi(D_A460000C) # $t9, 0xa460 -/* 0D3D30 800D3130 25F8FFFF */ addiu $t8, $t7, -1 -/* 0D3D34 800D3134 10000008 */ b .L800D3158 -/* 0D3D38 800D3138 AF38000C */ sw $t8, %lo(D_A460000C)($t9) -.L800D313C: -/* 0D3D3C 800D313C 8FA80038 */ lw $t0, 0x38($sp) -/* 0D3D40 800D3140 3C0AA460 */ lui $t2, %hi(D_A4600008) # $t2, 0xa460 -/* 0D3D44 800D3144 2509FFFF */ addiu $t1, $t0, -1 -/* 0D3D48 800D3148 10000003 */ b .L800D3158 -/* 0D3D4C 800D314C AD490008 */ sw $t1, %lo(D_A4600008)($t2) -.L800D3150: -/* 0D3D50 800D3150 10000002 */ b .L800D315C -/* 0D3D54 800D3154 2402FFFF */ li $v0, -1 -.L800D3158: -/* 0D3D58 800D3158 00001025 */ move $v0, $zero -.L800D315C: -/* 0D3D5C 800D315C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D3D60 800D3160 8FB00014 */ lw $s0, 0x14($sp) -/* 0D3D64 800D3164 8FB10018 */ lw $s1, 0x18($sp) -/* 0D3D68 800D3168 03E00008 */ jr $ra -/* 0D3D6C 800D316C 27BD0028 */ addiu $sp, $sp, 0x28 - -glabel D_800D3170 -/* 0D3D70 800D3170 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D3D74 800D3174 AFA40048 */ sw $a0, 0x48($sp) -/* 0D3D78 800D3178 8FAE0048 */ lw $t6, 0x48($sp) -/* 0D3D7C 800D317C AFBF001C */ sw $ra, 0x1c($sp) -/* 0D3D80 800D3180 AFA00030 */ sw $zero, 0x30($sp) -/* 0D3D84 800D3184 AFA0002C */ sw $zero, 0x2c($sp) -/* 0D3D88 800D3188 AFA00044 */ sw $zero, 0x44($sp) -/* 0D3D8C 800D318C AFA00038 */ sw $zero, 0x38($sp) -/* 0D3D90 800D3190 AFAE0034 */ sw $t6, 0x34($sp) -.L800D3194: -/* 0D3D94 800D3194 8FAF0034 */ lw $t7, 0x34($sp) -/* 0D3D98 800D3198 27A50044 */ addiu $a1, $sp, 0x44 -/* 0D3D9C 800D319C 24060001 */ li $a2, 1 -/* 0D3DA0 800D31A0 0C0335D4 */ jal osRecvMesg -/* 0D3DA4 800D31A4 8DE40008 */ lw $a0, 8($t7) -/* 0D3DA8 800D31A8 8FB80044 */ lw $t8, 0x44($sp) -/* 0D3DAC 800D31AC 8F190014 */ lw $t9, 0x14($t8) -/* 0D3DB0 800D31B0 13200064 */ beqz $t9, .L800D3344 -/* 0D3DB4 800D31B4 00000000 */ nop -/* 0D3DB8 800D31B8 93280004 */ lbu $t0, 4($t9) -/* 0D3DBC 800D31BC 24010002 */ li $at, 2 -/* 0D3DC0 800D31C0 15010060 */ bne $t0, $at, .L800D3344 -/* 0D3DC4 800D31C4 00000000 */ nop -/* 0D3DC8 800D31C8 8F290014 */ lw $t1, 0x14($t9) -/* 0D3DCC 800D31CC 11200003 */ beqz $t1, .L800D31DC -/* 0D3DD0 800D31D0 24010001 */ li $at, 1 -/* 0D3DD4 800D31D4 1521005B */ bne $t1, $at, .L800D3344 -/* 0D3DD8 800D31D8 00000000 */ nop -.L800D31DC: -/* 0D3DDC 800D31DC 8FAA0044 */ lw $t2, 0x44($sp) -/* 0D3DE0 800D31E0 2408FFFF */ li $t0, -1 -/* 0D3DE4 800D31E4 24010003 */ li $at, 3 -/* 0D3DE8 800D31E8 8D4B0014 */ lw $t3, 0x14($t2) -/* 0D3DEC 800D31EC 256C0014 */ addiu $t4, $t3, 0x14 -/* 0D3DF0 800D31F0 AFAC0024 */ sw $t4, 0x24($sp) -/* 0D3DF4 800D31F4 958D0006 */ lhu $t5, 6($t4) -/* 0D3DF8 800D31F8 000D7140 */ sll $t6, $t5, 5 -/* 0D3DFC 800D31FC 018E7821 */ addu $t7, $t4, $t6 -/* 0D3E00 800D3200 25F8001C */ addiu $t8, $t7, 0x1c -/* 0D3E04 800D3204 AFB80028 */ sw $t8, 0x28($sp) -/* 0D3E08 800D3208 AD880008 */ sw $t0, 8($t4) -/* 0D3E0C 800D320C 8FB90024 */ lw $t9, 0x24($sp) -/* 0D3E10 800D3210 97290004 */ lhu $t1, 4($t9) -/* 0D3E14 800D3214 11210006 */ beq $t1, $at, .L800D3230 -/* 0D3E18 800D3218 00000000 */ nop -/* 0D3E1C 800D321C 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D3E20 800D3220 8D4B0000 */ lw $t3, ($t2) -/* 0D3E24 800D3224 8D4D0008 */ lw $t5, 8($t2) -/* 0D3E28 800D3228 016D7023 */ subu $t6, $t3, $t5 -/* 0D3E2C 800D322C AD4E0000 */ sw $t6, ($t2) -.L800D3230: -/* 0D3E30 800D3230 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D3E34 800D3234 24010002 */ li $at, 2 -/* 0D3E38 800D3238 95F80004 */ lhu $t8, 4($t7) -/* 0D3E3C 800D323C 17010009 */ bne $t8, $at, .L800D3264 -/* 0D3E40 800D3240 00000000 */ nop -/* 0D3E44 800D3244 8FA80044 */ lw $t0, 0x44($sp) -/* 0D3E48 800D3248 8D0C0014 */ lw $t4, 0x14($t0) -/* 0D3E4C 800D324C 8D990014 */ lw $t9, 0x14($t4) -/* 0D3E50 800D3250 17200004 */ bnez $t9, .L800D3264 -/* 0D3E54 800D3254 00000000 */ nop -/* 0D3E58 800D3258 24090001 */ li $t1, 1 -/* 0D3E5C 800D325C 10000002 */ b .L800D3268 -/* 0D3E60 800D3260 AFA9002C */ sw $t1, 0x2c($sp) -.L800D3264: -/* 0D3E64 800D3264 AFA0002C */ sw $zero, 0x2c($sp) -.L800D3268: -/* 0D3E68 800D3268 8FAB0034 */ lw $t3, 0x34($sp) -/* 0D3E6C 800D326C 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D3E70 800D3270 24060001 */ li $a2, 1 -/* 0D3E74 800D3274 0C0335D4 */ jal osRecvMesg -/* 0D3E78 800D3278 8D640010 */ lw $a0, 0x10($t3) -/* 0D3E7C 800D327C 3C040010 */ lui $a0, (0x00100401 >> 16) # lui $a0, 0x10 -/* 0D3E80 800D3280 0C035F28 */ jal __osResetGlobalIntMask -/* 0D3E84 800D3284 34840401 */ ori $a0, (0x00100401 & 0xFFFF) # ori $a0, $a0, 0x401 -/* 0D3E88 800D3288 8FAE0024 */ lw $t6, 0x24($sp) -/* 0D3E8C 800D328C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0D3E90 800D3290 3C018000 */ lui $at, 0x8000 -/* 0D3E94 800D3294 8DC60014 */ lw $a2, 0x14($t6) -/* 0D3E98 800D3298 3C050500 */ lui $a1, (0x05000510 >> 16) # lui $a1, 0x500 -/* 0D3E9C 800D329C 34A50510 */ ori $a1, (0x05000510 & 0xFFFF) # ori $a1, $a1, 0x510 -/* 0D3EA0 800D32A0 00C15025 */ or $t2, $a2, $at -/* 0D3EA4 800D32A4 01403025 */ move $a2, $t2 -/* 0D3EA8 800D32A8 0C035F40 */ jal osEPiRawWriteIo -/* 0D3EAC 800D32AC 8DA40014 */ lw $a0, 0x14($t5) -.L800D32B0: -/* 0D3EB0 800D32B0 8FAF0034 */ lw $t7, 0x34($sp) -/* 0D3EB4 800D32B4 27A50040 */ addiu $a1, $sp, 0x40 -/* 0D3EB8 800D32B8 24060001 */ li $a2, 1 -/* 0D3EBC 800D32BC 0C0335D4 */ jal osRecvMesg -/* 0D3EC0 800D32C0 8DE4000C */ lw $a0, 0xc($t7) -/* 0D3EC4 800D32C4 8FB80044 */ lw $t8, 0x44($sp) -/* 0D3EC8 800D32C8 00003025 */ move $a2, $zero -/* 0D3ECC 800D32CC 8F040004 */ lw $a0, 4($t8) -/* 0D3ED0 800D32D0 0C033630 */ jal osSendMesg -/* 0D3ED4 800D32D4 03002825 */ move $a1, $t8 -/* 0D3ED8 800D32D8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D3EDC 800D32DC 24010001 */ li $at, 1 -/* 0D3EE0 800D32E0 AFA20030 */ sw $v0, 0x30($sp) -/* 0D3EE4 800D32E4 15010008 */ bne $t0, $at, .L800D3308 -/* 0D3EE8 800D32E8 00000000 */ nop -/* 0D3EEC 800D32EC 8FAC0044 */ lw $t4, 0x44($sp) -/* 0D3EF0 800D32F0 8D990014 */ lw $t9, 0x14($t4) -/* 0D3EF4 800D32F4 8F290024 */ lw $t1, 0x24($t9) -/* 0D3EF8 800D32F8 15200003 */ bnez $t1, .L800D3308 -/* 0D3EFC 800D32FC 00000000 */ nop -/* 0D3F00 800D3300 1000FFEB */ b .L800D32B0 -/* 0D3F04 800D3304 AFA0002C */ sw $zero, 0x2c($sp) -.L800D3308: -/* 0D3F08 800D3308 8FAB0034 */ lw $t3, 0x34($sp) -/* 0D3F0C 800D330C 00002825 */ move $a1, $zero -/* 0D3F10 800D3310 00003025 */ move $a2, $zero -/* 0D3F14 800D3314 0C033630 */ jal osSendMesg -/* 0D3F18 800D3318 8D640010 */ lw $a0, 0x10($t3) -/* 0D3F1C 800D331C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0D3F20 800D3320 24010001 */ li $at, 1 -/* 0D3F24 800D3324 8DAE0014 */ lw $t6, 0x14($t5) -/* 0D3F28 800D3328 95CA001A */ lhu $t2, 0x1a($t6) -/* 0D3F2C 800D332C 1541FF99 */ bne $t2, $at, .L800D3194 -/* 0D3F30 800D3330 00000000 */ nop -/* 0D3F34 800D3334 0C035F54 */ jal osYieldThread -/* 0D3F38 800D3338 00000000 */ nop -/* 0D3F3C 800D333C 1000FF95 */ b .L800D3194 -/* 0D3F40 800D3340 00000000 */ nop -.L800D3344: -/* 0D3F44 800D3344 8FAF0044 */ lw $t7, 0x44($sp) -/* 0D3F48 800D3348 95F80000 */ lhu $t8, ($t7) -/* 0D3F4C 800D334C 2708FFF6 */ addiu $t0, $t8, -0xa -/* 0D3F50 800D3350 2D010007 */ sltiu $at, $t0, 7 -/* 0D3F54 800D3354 10200052 */ beqz $at, .L800D34A0 -/* 0D3F58 800D3358 00000000 */ nop -/* 0D3F5C 800D335C 00084080 */ sll $t0, $t0, 2 -/* 0D3F60 800D3360 3C01800F */ lui $at, %hi(D_800F3A50) -/* 0D3F64 800D3364 00280821 */ addu $at, $at, $t0 -/* 0D3F68 800D3368 8C283A50 */ lw $t0, %lo(D_800F3A50)($at) -/* 0D3F6C 800D336C 01000008 */ jr $t0 -/* 0D3F70 800D3370 00000000 */ nop -glabel L800D3374 -/* 0D3F74 800D3374 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D3F78 800D3378 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D3F7C 800D337C 24060001 */ li $a2, 1 -/* 0D3F80 800D3380 0C0335D4 */ jal osRecvMesg -/* 0D3F84 800D3384 8D840010 */ lw $a0, 0x10($t4) -/* 0D3F88 800D3388 8FB90044 */ lw $t9, 0x44($sp) -/* 0D3F8C 800D338C 8FA90034 */ lw $t1, 0x34($sp) -/* 0D3F90 800D3390 00002025 */ move $a0, $zero -/* 0D3F94 800D3394 8F25000C */ lw $a1, 0xc($t9) -/* 0D3F98 800D3398 8F260008 */ lw $a2, 8($t9) -/* 0D3F9C 800D339C 8F270010 */ lw $a3, 0x10($t9) -/* 0D3FA0 800D33A0 8D390014 */ lw $t9, 0x14($t1) -/* 0D3FA4 800D33A4 0320F809 */ jalr $t9 -/* 0D3FA8 800D33A8 00000000 */ nop -/* 0D3FAC 800D33AC 1000003E */ b .L800D34A8 -/* 0D3FB0 800D33B0 AFA20038 */ sw $v0, 0x38($sp) -glabel L800D33B4 -/* 0D3FB4 800D33B4 8FAB0034 */ lw $t3, 0x34($sp) -/* 0D3FB8 800D33B8 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D3FBC 800D33BC 24060001 */ li $a2, 1 -/* 0D3FC0 800D33C0 0C0335D4 */ jal osRecvMesg -/* 0D3FC4 800D33C4 8D640010 */ lw $a0, 0x10($t3) -/* 0D3FC8 800D33C8 8FAE0034 */ lw $t6, 0x34($sp) -/* 0D3FCC 800D33CC 8FAD0044 */ lw $t5, 0x44($sp) -/* 0D3FD0 800D33D0 24040001 */ li $a0, 1 -/* 0D3FD4 800D33D4 8DD90014 */ lw $t9, 0x14($t6) -/* 0D3FD8 800D33D8 8DA5000C */ lw $a1, 0xc($t5) -/* 0D3FDC 800D33DC 8DA60008 */ lw $a2, 8($t5) -/* 0D3FE0 800D33E0 0320F809 */ jalr $t9 -/* 0D3FE4 800D33E4 8DA70010 */ lw $a3, 0x10($t5) -/* 0D3FE8 800D33E8 1000002F */ b .L800D34A8 -/* 0D3FEC 800D33EC AFA20038 */ sw $v0, 0x38($sp) -glabel L800D33F0 -/* 0D3FF0 800D33F0 8FAA0034 */ lw $t2, 0x34($sp) -/* 0D3FF4 800D33F4 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D3FF8 800D33F8 24060001 */ li $a2, 1 -/* 0D3FFC 800D33FC 0C0335D4 */ jal osRecvMesg -/* 0D4000 800D3400 8D440010 */ lw $a0, 0x10($t2) -/* 0D4004 800D3404 8FAF0044 */ lw $t7, 0x44($sp) -/* 0D4008 800D3408 8FA80034 */ lw $t0, 0x34($sp) -/* 0D400C 800D340C 00002825 */ move $a1, $zero -/* 0D4010 800D3410 8DF80010 */ lw $t8, 0x10($t7) -/* 0D4014 800D3414 8DE40014 */ lw $a0, 0x14($t7) -/* 0D4018 800D3418 8DE6000C */ lw $a2, 0xc($t7) -/* 0D401C 800D341C 8DE70008 */ lw $a3, 8($t7) -/* 0D4020 800D3420 AFB80010 */ sw $t8, 0x10($sp) -/* 0D4024 800D3424 8D190018 */ lw $t9, 0x18($t0) -/* 0D4028 800D3428 0320F809 */ jalr $t9 -/* 0D402C 800D342C 00000000 */ nop -/* 0D4030 800D3430 1000001D */ b .L800D34A8 -/* 0D4034 800D3434 AFA20038 */ sw $v0, 0x38($sp) -glabel L800D3438 -/* 0D4038 800D3438 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D403C 800D343C 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D4040 800D3440 24060001 */ li $a2, 1 -/* 0D4044 800D3444 0C0335D4 */ jal osRecvMesg -/* 0D4048 800D3448 8D840010 */ lw $a0, 0x10($t4) -/* 0D404C 800D344C 8FA90044 */ lw $t1, 0x44($sp) -/* 0D4050 800D3450 8FAD0034 */ lw $t5, 0x34($sp) -/* 0D4054 800D3454 24050001 */ li $a1, 1 -/* 0D4058 800D3458 8D2B0010 */ lw $t3, 0x10($t1) -/* 0D405C 800D345C 8D240014 */ lw $a0, 0x14($t1) -/* 0D4060 800D3460 8D26000C */ lw $a2, 0xc($t1) -/* 0D4064 800D3464 8D270008 */ lw $a3, 8($t1) -/* 0D4068 800D3468 AFAB0010 */ sw $t3, 0x10($sp) -/* 0D406C 800D346C 8DB90018 */ lw $t9, 0x18($t5) -/* 0D4070 800D3470 0320F809 */ jalr $t9 -/* 0D4074 800D3474 00000000 */ nop -/* 0D4078 800D3478 1000000B */ b .L800D34A8 -/* 0D407C 800D347C AFA20038 */ sw $v0, 0x38($sp) -glabel L800D3480 -/* 0D4080 800D3480 8FAE0044 */ lw $t6, 0x44($sp) -/* 0D4084 800D3484 00003025 */ move $a2, $zero -/* 0D4088 800D3488 8DC40004 */ lw $a0, 4($t6) -/* 0D408C 800D348C 0C033630 */ jal osSendMesg -/* 0D4090 800D3490 01C02825 */ move $a1, $t6 -/* 0D4094 800D3494 240AFFFF */ li $t2, -1 -/* 0D4098 800D3498 10000003 */ b .L800D34A8 -/* 0D409C 800D349C AFAA0038 */ sw $t2, 0x38($sp) -.L800D34A0: -glabel L800D34A0 -/* 0D40A0 800D34A0 240FFFFF */ li $t7, -1 -/* 0D40A4 800D34A4 AFAF0038 */ sw $t7, 0x38($sp) -.L800D34A8: -/* 0D40A8 800D34A8 8FB80038 */ lw $t8, 0x38($sp) -/* 0D40AC 800D34AC 1700FF39 */ bnez $t8, .L800D3194 -/* 0D40B0 800D34B0 00000000 */ nop -/* 0D40B4 800D34B4 8FA80034 */ lw $t0, 0x34($sp) -/* 0D40B8 800D34B8 27A50040 */ addiu $a1, $sp, 0x40 -/* 0D40BC 800D34BC 24060001 */ li $a2, 1 -/* 0D40C0 800D34C0 0C0335D4 */ jal osRecvMesg -/* 0D40C4 800D34C4 8D04000C */ lw $a0, 0xc($t0) -/* 0D40C8 800D34C8 8FAC0044 */ lw $t4, 0x44($sp) -/* 0D40CC 800D34CC 00003025 */ move $a2, $zero -/* 0D40D0 800D34D0 8D840004 */ lw $a0, 4($t4) -/* 0D40D4 800D34D4 0C033630 */ jal osSendMesg -/* 0D40D8 800D34D8 01802825 */ move $a1, $t4 -/* 0D40DC 800D34DC 8FA90034 */ lw $t1, 0x34($sp) -/* 0D40E0 800D34E0 AFA20030 */ sw $v0, 0x30($sp) -/* 0D40E4 800D34E4 00002825 */ move $a1, $zero -/* 0D40E8 800D34E8 00003025 */ move $a2, $zero -/* 0D40EC 800D34EC 0C033630 */ jal osSendMesg -/* 0D40F0 800D34F0 8D240010 */ lw $a0, 0x10($t1) -/* 0D40F4 800D34F4 1000FF27 */ b .L800D3194 -/* 0D40F8 800D34F8 00000000 */ nop -/* 0D40FC 800D34FC 00000000 */ nop -/* 0D4100 800D3500 00000000 */ nop -/* 0D4104 800D3504 00000000 */ nop -/* 0D4108 800D3508 00000000 */ nop -/* 0D410C 800D350C 00000000 */ nop -/* 0D4110 800D3510 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D4114 800D3514 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0D4118 800D3518 03E00008 */ jr $ra -/* 0D411C 800D351C 00000000 */ nop - -glabel bcopy -/* 0D4120 800D3520 10C0001A */ beqz $a2, .L800D358C -/* 0D4124 800D3524 00A03825 */ move $a3, $a1 -/* 0D4128 800D3528 10850018 */ beq $a0, $a1, .L800D358C -/* 0D412C 800D352C 00A4082A */ slt $at, $a1, $a0 -/* 0D4130 800D3530 54200008 */ bnel $at, $zero, .L800D3554 -/* 0D4134 800D3534 28C10010 */ slti $at, $a2, 0x10 -/* 0D4138 800D3538 00861020 */ add $v0, $a0, $a2 -/* 0D413C 800D353C 00A2082A */ slt $at, $a1, $v0 -/* 0D4140 800D3540 50200004 */ beql $at, $zero, .L800D3554 -/* 0D4144 800D3544 28C10010 */ slti $at, $a2, 0x10 -/* 0D4148 800D3548 1000005B */ b .L800D36B8 -/* 0D414C 800D354C 28C10010 */ slti $at, $a2, 0x10 -/* 0D4150 800D3550 28C10010 */ slti $at, $a2, 0x10 -.L800D3554: -/* 0D4154 800D3554 14200005 */ bnez $at, .L800D356C -/* 0D4158 800D3558 00000000 */ nop -/* 0D415C 800D355C 30820003 */ andi $v0, $a0, 3 -/* 0D4160 800D3560 30A30003 */ andi $v1, $a1, 3 -/* 0D4164 800D3564 1043000B */ beq $v0, $v1, .L800D3594 -/* 0D4168 800D3568 00000000 */ nop -.L800D356C: -/* 0D416C 800D356C 10C00007 */ beqz $a2, .L800D358C -/* 0D4170 800D3570 00000000 */ nop -/* 0D4174 800D3574 00861821 */ addu $v1, $a0, $a2 -.L800D3578: -/* 0D4178 800D3578 80820000 */ lb $v0, ($a0) -/* 0D417C 800D357C 24840001 */ addiu $a0, $a0, 1 -/* 0D4180 800D3580 24A50001 */ addiu $a1, $a1, 1 -/* 0D4184 800D3584 1483FFFC */ bne $a0, $v1, .L800D3578 -/* 0D4188 800D3588 A0A2FFFF */ sb $v0, -1($a1) -.L800D358C: -/* 0D418C 800D358C 03E00008 */ jr $ra -/* 0D4190 800D3590 00E01025 */ move $v0, $a3 - -.L800D3594: -/* 0D4194 800D3594 10400018 */ beqz $v0, .L800D35F8 -/* 0D4198 800D3598 24010001 */ li $at, 1 -/* 0D419C 800D359C 1041000F */ beq $v0, $at, .L800D35DC -/* 0D41A0 800D35A0 24010002 */ li $at, 2 -/* 0D41A4 800D35A4 50410008 */ beql $v0, $at, .L800D35C8 -/* 0D41A8 800D35A8 84820000 */ lh $v0, ($a0) -/* 0D41AC 800D35AC 80820000 */ lb $v0, ($a0) -/* 0D41B0 800D35B0 24840001 */ addiu $a0, $a0, 1 -/* 0D41B4 800D35B4 24A50001 */ addiu $a1, $a1, 1 -/* 0D41B8 800D35B8 24C6FFFF */ addiu $a2, $a2, -1 -/* 0D41BC 800D35BC 1000000E */ b .L800D35F8 -/* 0D41C0 800D35C0 A0A2FFFF */ sb $v0, -1($a1) -/* 0D41C4 800D35C4 84820000 */ lh $v0, ($a0) -.L800D35C8: -/* 0D41C8 800D35C8 24840002 */ addiu $a0, $a0, 2 -/* 0D41CC 800D35CC 24A50002 */ addiu $a1, $a1, 2 -/* 0D41D0 800D35D0 24C6FFFE */ addiu $a2, $a2, -2 -/* 0D41D4 800D35D4 10000008 */ b .L800D35F8 -/* 0D41D8 800D35D8 A4A2FFFE */ sh $v0, -2($a1) -.L800D35DC: -/* 0D41DC 800D35DC 80820000 */ lb $v0, ($a0) -/* 0D41E0 800D35E0 84830001 */ lh $v1, 1($a0) -/* 0D41E4 800D35E4 24840003 */ addiu $a0, $a0, 3 -/* 0D41E8 800D35E8 24A50003 */ addiu $a1, $a1, 3 -/* 0D41EC 800D35EC 24C6FFFD */ addiu $a2, $a2, -3 -/* 0D41F0 800D35F0 A0A2FFFD */ sb $v0, -3($a1) -/* 0D41F4 800D35F4 A4A3FFFE */ sh $v1, -2($a1) -.L800D35F8: -/* 0D41F8 800D35F8 28C10020 */ slti $at, $a2, 0x20 -/* 0D41FC 800D35FC 54200016 */ bnel $at, $zero, .L800D3658 -/* 0D4200 800D3600 28C10010 */ slti $at, $a2, 0x10 -/* 0D4204 800D3604 8C820000 */ lw $v0, ($a0) -/* 0D4208 800D3608 8C830004 */ lw $v1, 4($a0) -/* 0D420C 800D360C 8C880008 */ lw $t0, 8($a0) -/* 0D4210 800D3610 8C89000C */ lw $t1, 0xc($a0) -/* 0D4214 800D3614 8C8A0010 */ lw $t2, 0x10($a0) -/* 0D4218 800D3618 8C8B0014 */ lw $t3, 0x14($a0) -/* 0D421C 800D361C 8C8C0018 */ lw $t4, 0x18($a0) -/* 0D4220 800D3620 8C8D001C */ lw $t5, 0x1c($a0) -/* 0D4224 800D3624 24840020 */ addiu $a0, $a0, 0x20 -/* 0D4228 800D3628 24A50020 */ addiu $a1, $a1, 0x20 -/* 0D422C 800D362C 24C6FFE0 */ addiu $a2, $a2, -0x20 -/* 0D4230 800D3630 ACA2FFE0 */ sw $v0, -0x20($a1) -/* 0D4234 800D3634 ACA3FFE4 */ sw $v1, -0x1c($a1) -/* 0D4238 800D3638 ACA8FFE8 */ sw $t0, -0x18($a1) -/* 0D423C 800D363C ACA9FFEC */ sw $t1, -0x14($a1) -/* 0D4240 800D3640 ACAAFFF0 */ sw $t2, -0x10($a1) -/* 0D4244 800D3644 ACABFFF4 */ sw $t3, -0xc($a1) -/* 0D4248 800D3648 ACACFFF8 */ sw $t4, -8($a1) -/* 0D424C 800D364C 1000FFEA */ b .L800D35F8 -/* 0D4250 800D3650 ACADFFFC */ sw $t5, -4($a1) -.L800D3654: -/* 0D4254 800D3654 28C10010 */ slti $at, $a2, 0x10 -.L800D3658: -/* 0D4258 800D3658 5420000E */ bnel $at, $zero, .L800D3694 -/* 0D425C 800D365C 28C10004 */ slti $at, $a2, 4 -/* 0D4260 800D3660 8C820000 */ lw $v0, ($a0) -/* 0D4264 800D3664 8C830004 */ lw $v1, 4($a0) -/* 0D4268 800D3668 8C880008 */ lw $t0, 8($a0) -/* 0D426C 800D366C 8C89000C */ lw $t1, 0xc($a0) -/* 0D4270 800D3670 24840010 */ addiu $a0, $a0, 0x10 -/* 0D4274 800D3674 24A50010 */ addiu $a1, $a1, 0x10 -/* 0D4278 800D3678 24C6FFF0 */ addiu $a2, $a2, -0x10 -/* 0D427C 800D367C ACA2FFF0 */ sw $v0, -0x10($a1) -/* 0D4280 800D3680 ACA3FFF4 */ sw $v1, -0xc($a1) -/* 0D4284 800D3684 ACA8FFF8 */ sw $t0, -8($a1) -/* 0D4288 800D3688 1000FFF2 */ b .L800D3654 -/* 0D428C 800D368C ACA9FFFC */ sw $t1, -4($a1) -.L800D3690: -/* 0D4290 800D3690 28C10004 */ slti $at, $a2, 4 -.L800D3694: -/* 0D4294 800D3694 1420FFB5 */ bnez $at, .L800D356C -/* 0D4298 800D3698 00000000 */ nop -/* 0D429C 800D369C 8C820000 */ lw $v0, ($a0) -/* 0D42A0 800D36A0 24840004 */ addiu $a0, $a0, 4 -/* 0D42A4 800D36A4 24A50004 */ addiu $a1, $a1, 4 -/* 0D42A8 800D36A8 24C6FFFC */ addiu $a2, $a2, -4 -/* 0D42AC 800D36AC 1000FFF8 */ b .L800D3690 -/* 0D42B0 800D36B0 ACA2FFFC */ sw $v0, -4($a1) -/* 0D42B4 800D36B4 28C10010 */ slti $at, $a2, 0x10 -.L800D36B8: -/* 0D42B8 800D36B8 00862020 */ add $a0, $a0, $a2 -/* 0D42BC 800D36BC 14200005 */ bnez $at, .L800D36D4 -/* 0D42C0 800D36C0 00A62820 */ add $a1, $a1, $a2 -/* 0D42C4 800D36C4 30820003 */ andi $v0, $a0, 3 -/* 0D42C8 800D36C8 30A30003 */ andi $v1, $a1, 3 -/* 0D42CC 800D36CC 1043000D */ beq $v0, $v1, .L800D3704 -/* 0D42D0 800D36D0 00000000 */ nop -.L800D36D4: -/* 0D42D4 800D36D4 10C0FFAD */ beqz $a2, .L800D358C -/* 0D42D8 800D36D8 00000000 */ nop -/* 0D42DC 800D36DC 2484FFFF */ addiu $a0, $a0, -1 -/* 0D42E0 800D36E0 24A5FFFF */ addiu $a1, $a1, -1 -/* 0D42E4 800D36E4 00861823 */ subu $v1, $a0, $a2 -.L800D36E8: -/* 0D42E8 800D36E8 80820000 */ lb $v0, ($a0) -/* 0D42EC 800D36EC 2484FFFF */ addiu $a0, $a0, -1 -/* 0D42F0 800D36F0 24A5FFFF */ addiu $a1, $a1, -1 -/* 0D42F4 800D36F4 1483FFFC */ bne $a0, $v1, .L800D36E8 -/* 0D42F8 800D36F8 A0A20001 */ sb $v0, 1($a1) -/* 0D42FC 800D36FC 03E00008 */ jr $ra -/* 0D4300 800D3700 00E01025 */ move $v0, $a3 - -.L800D3704: -/* 0D4304 800D3704 10400018 */ beqz $v0, .L800D3768 -/* 0D4308 800D3708 24010003 */ li $at, 3 -/* 0D430C 800D370C 1041000F */ beq $v0, $at, .L800D374C -/* 0D4310 800D3710 24010002 */ li $at, 2 -/* 0D4314 800D3714 50410008 */ beql $v0, $at, .L800D3738 -/* 0D4318 800D3718 8482FFFE */ lh $v0, -2($a0) -/* 0D431C 800D371C 8082FFFF */ lb $v0, -1($a0) -/* 0D4320 800D3720 2484FFFF */ addiu $a0, $a0, -1 -/* 0D4324 800D3724 24A5FFFF */ addiu $a1, $a1, -1 -/* 0D4328 800D3728 24C6FFFF */ addiu $a2, $a2, -1 -/* 0D432C 800D372C 1000000E */ b .L800D3768 -/* 0D4330 800D3730 A0A20000 */ sb $v0, ($a1) -/* 0D4334 800D3734 8482FFFE */ lh $v0, -2($a0) -.L800D3738: -/* 0D4338 800D3738 2484FFFE */ addiu $a0, $a0, -2 -/* 0D433C 800D373C 24A5FFFE */ addiu $a1, $a1, -2 -/* 0D4340 800D3740 24C6FFFE */ addiu $a2, $a2, -2 -/* 0D4344 800D3744 10000008 */ b .L800D3768 -/* 0D4348 800D3748 A4A20000 */ sh $v0, ($a1) -.L800D374C: -/* 0D434C 800D374C 8082FFFF */ lb $v0, -1($a0) -/* 0D4350 800D3750 8483FFFD */ lh $v1, -3($a0) -/* 0D4354 800D3754 2484FFFD */ addiu $a0, $a0, -3 -/* 0D4358 800D3758 24A5FFFD */ addiu $a1, $a1, -3 -/* 0D435C 800D375C 24C6FFFD */ addiu $a2, $a2, -3 -/* 0D4360 800D3760 A0A20002 */ sb $v0, 2($a1) -/* 0D4364 800D3764 A4A30000 */ sh $v1, ($a1) -.L800D3768: -/* 0D4368 800D3768 28C10020 */ slti $at, $a2, 0x20 -/* 0D436C 800D376C 54200016 */ bnel $at, $zero, .L800D37C8 -/* 0D4370 800D3770 28C10010 */ slti $at, $a2, 0x10 -/* 0D4374 800D3774 8C82FFFC */ lw $v0, -4($a0) -/* 0D4378 800D3778 8C83FFF8 */ lw $v1, -8($a0) -/* 0D437C 800D377C 8C88FFF4 */ lw $t0, -0xc($a0) -/* 0D4380 800D3780 8C89FFF0 */ lw $t1, -0x10($a0) -/* 0D4384 800D3784 8C8AFFEC */ lw $t2, -0x14($a0) -/* 0D4388 800D3788 8C8BFFE8 */ lw $t3, -0x18($a0) -/* 0D438C 800D378C 8C8CFFE4 */ lw $t4, -0x1c($a0) -/* 0D4390 800D3790 8C8DFFE0 */ lw $t5, -0x20($a0) -/* 0D4394 800D3794 2484FFE0 */ addiu $a0, $a0, -0x20 -/* 0D4398 800D3798 24A5FFE0 */ addiu $a1, $a1, -0x20 -/* 0D439C 800D379C 24C6FFE0 */ addiu $a2, $a2, -0x20 -/* 0D43A0 800D37A0 ACA2001C */ sw $v0, 0x1c($a1) -/* 0D43A4 800D37A4 ACA30018 */ sw $v1, 0x18($a1) -/* 0D43A8 800D37A8 ACA80014 */ sw $t0, 0x14($a1) -/* 0D43AC 800D37AC ACA90010 */ sw $t1, 0x10($a1) -/* 0D43B0 800D37B0 ACAA000C */ sw $t2, 0xc($a1) -/* 0D43B4 800D37B4 ACAB0008 */ sw $t3, 8($a1) -/* 0D43B8 800D37B8 ACAC0004 */ sw $t4, 4($a1) -/* 0D43BC 800D37BC 1000FFEA */ b .L800D3768 -/* 0D43C0 800D37C0 ACAD0000 */ sw $t5, ($a1) -.L800D37C4: -/* 0D43C4 800D37C4 28C10010 */ slti $at, $a2, 0x10 -.L800D37C8: -/* 0D43C8 800D37C8 5420000E */ bnel $at, $zero, .L800D3804 -/* 0D43CC 800D37CC 28C10004 */ slti $at, $a2, 4 -/* 0D43D0 800D37D0 8C82FFFC */ lw $v0, -4($a0) -/* 0D43D4 800D37D4 8C83FFF8 */ lw $v1, -8($a0) -/* 0D43D8 800D37D8 8C88FFF4 */ lw $t0, -0xc($a0) -/* 0D43DC 800D37DC 8C89FFF0 */ lw $t1, -0x10($a0) -/* 0D43E0 800D37E0 2484FFF0 */ addiu $a0, $a0, -0x10 -/* 0D43E4 800D37E4 24A5FFF0 */ addiu $a1, $a1, -0x10 -/* 0D43E8 800D37E8 24C6FFF0 */ addiu $a2, $a2, -0x10 -/* 0D43EC 800D37EC ACA2000C */ sw $v0, 0xc($a1) -/* 0D43F0 800D37F0 ACA30008 */ sw $v1, 8($a1) -/* 0D43F4 800D37F4 ACA80004 */ sw $t0, 4($a1) -/* 0D43F8 800D37F8 1000FFF2 */ b .L800D37C4 -/* 0D43FC 800D37FC ACA90000 */ sw $t1, ($a1) -.L800D3800: -/* 0D4400 800D3800 28C10004 */ slti $at, $a2, 4 -.L800D3804: -/* 0D4404 800D3804 1420FFB3 */ bnez $at, .L800D36D4 -/* 0D4408 800D3808 00000000 */ nop -/* 0D440C 800D380C 8C82FFFC */ lw $v0, -4($a0) -/* 0D4410 800D3810 2484FFFC */ addiu $a0, $a0, -4 -/* 0D4414 800D3814 24A5FFFC */ addiu $a1, $a1, -4 -/* 0D4418 800D3818 24C6FFFC */ addiu $a2, $a2, -4 -/* 0D441C 800D381C 1000FFF8 */ b .L800D3800 -/* 0D4420 800D3820 ACA20000 */ sw $v0, ($a1) -/* 0D4424 800D3824 00000000 */ nop -/* 0D4428 800D3828 00000000 */ nop -/* 0D442C 800D382C 00000000 */ nop -glabel osVirtualToPhysical -/* 0D4430 800D3830 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D4434 800D3834 AFA40018 */ sw $a0, 0x18($sp) -/* 0D4438 800D3838 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D443C 800D383C 3C018000 */ lui $at, 0x8000 -/* 0D4440 800D3840 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4444 800D3844 01C1082B */ sltu $at, $t6, $at -/* 0D4448 800D3848 14200007 */ bnez $at, .L800D3868 -/* 0D444C 800D384C 3C01A000 */ lui $at, 0xa000 -/* 0D4450 800D3850 01C1082B */ sltu $at, $t6, $at -/* 0D4454 800D3854 10200004 */ beqz $at, .L800D3868 -/* 0D4458 800D3858 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0D445C 800D385C 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0D4460 800D3860 1000000E */ b .L800D389C -/* 0D4464 800D3864 01C11024 */ and $v0, $t6, $at -.L800D3868: -/* 0D4468 800D3868 8FAF0018 */ lw $t7, 0x18($sp) -/* 0D446C 800D386C 3C01A000 */ lui $at, 0xa000 -/* 0D4470 800D3870 01E1082B */ sltu $at, $t7, $at -/* 0D4474 800D3874 14200007 */ bnez $at, .L800D3894 -/* 0D4478 800D3878 3C01C000 */ lui $at, 0xc000 -/* 0D447C 800D387C 01E1082B */ sltu $at, $t7, $at -/* 0D4480 800D3880 10200004 */ beqz $at, .L800D3894 -/* 0D4484 800D3884 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 0D4488 800D3888 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0D448C 800D388C 10000003 */ b .L800D389C -/* 0D4490 800D3890 01E11024 */ and $v0, $t7, $at -.L800D3894: -/* 0D4494 800D3894 0C035F68 */ jal __osProbeTLB -/* 0D4498 800D3898 8FA40018 */ lw $a0, 0x18($sp) -.L800D389C: -/* 0D449C 800D389C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D44A0 800D38A0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D44A4 800D38A4 03E00008 */ jr $ra -/* 0D44A8 800D38A8 00000000 */ nop - -/* 0D44AC 800D38AC 00000000 */ nop -glabel __osSpSetStatus -/* 0D44B0 800D38B0 3C0EA404 */ lui $t6, 0xa404 -/* 0D44B4 800D38B4 03E00008 */ jr $ra -/* 0D44B8 800D38B8 ADC40010 */ sw $a0, 0x10($t6) - -/* 0D44BC 800D38BC 00000000 */ nop -glabel __osSpSetPc -/* 0D44C0 800D38C0 3C0EA404 */ lui $t6, %hi(D_A4040010) # $t6, 0xa404 -/* 0D44C4 800D38C4 8DC50010 */ lw $a1, %lo(D_A4040010)($t6) -/* 0D44C8 800D38C8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D44CC 800D38CC 30AF0001 */ andi $t7, $a1, 1 -/* 0D44D0 800D38D0 15E00003 */ bnez $t7, .L800D38E0 -/* 0D44D4 800D38D4 00000000 */ nop -/* 0D44D8 800D38D8 10000004 */ b .L800D38EC -/* 0D44DC 800D38DC 2402FFFF */ li $v0, -1 -.L800D38E0: -/* 0D44E0 800D38E0 3C18A408 */ lui $t8, 0xa408 -/* 0D44E4 800D38E4 AF040000 */ sw $a0, ($t8) -/* 0D44E8 800D38E8 00001025 */ move $v0, $zero -.L800D38EC: -/* 0D44EC 800D38EC 03E00008 */ jr $ra -/* 0D44F0 800D38F0 27BD0008 */ addiu $sp, $sp, 8 - -/* 0D44F4 800D38F4 00000000 */ nop -/* 0D44F8 800D38F8 00000000 */ nop -/* 0D44FC 800D38FC 00000000 */ nop -glabel __osSpRawStartDma -/* 0D4500 800D3900 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D4504 800D3904 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4508 800D3908 AFA40018 */ sw $a0, 0x18($sp) -/* 0D450C 800D390C AFA5001C */ sw $a1, 0x1c($sp) -/* 0D4510 800D3910 AFA60020 */ sw $a2, 0x20($sp) -/* 0D4514 800D3914 0C034E64 */ jal __osSpDeviceBusy -/* 0D4518 800D3918 AFA70024 */ sw $a3, 0x24($sp) -/* 0D451C 800D391C 10400003 */ beqz $v0, .L800D392C -/* 0D4520 800D3920 00000000 */ nop -/* 0D4524 800D3924 10000015 */ b .L800D397C -/* 0D4528 800D3928 2402FFFF */ li $v0, -1 -.L800D392C: -/* 0D452C 800D392C 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D4530 800D3930 3C0FA404 */ lui $t7, 0xa404 -/* 0D4534 800D3934 ADEE0000 */ sw $t6, ($t7) -/* 0D4538 800D3938 0C034E0C */ jal osVirtualToPhysical -/* 0D453C 800D393C 8FA40020 */ lw $a0, 0x20($sp) -/* 0D4540 800D3940 3C18A404 */ lui $t8, %hi(D_A4040004) # $t8, 0xa404 -/* 0D4544 800D3944 AF020004 */ sw $v0, %lo(D_A4040004)($t8) -/* 0D4548 800D3948 8FB90018 */ lw $t9, 0x18($sp) -/* 0D454C 800D394C 17200006 */ bnez $t9, .L800D3968 -/* 0D4550 800D3950 00000000 */ nop -/* 0D4554 800D3954 8FA80024 */ lw $t0, 0x24($sp) -/* 0D4558 800D3958 3C0AA404 */ lui $t2, %hi(D_A404000C) # $t2, 0xa404 -/* 0D455C 800D395C 2509FFFF */ addiu $t1, $t0, -1 -/* 0D4560 800D3960 10000005 */ b .L800D3978 -/* 0D4564 800D3964 AD49000C */ sw $t1, %lo(D_A404000C)($t2) -.L800D3968: -/* 0D4568 800D3968 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D456C 800D396C 3C0DA404 */ lui $t5, %hi(D_A4040008) # $t5, 0xa404 -/* 0D4570 800D3970 256CFFFF */ addiu $t4, $t3, -1 -/* 0D4574 800D3974 ADAC0008 */ sw $t4, %lo(D_A4040008)($t5) -.L800D3978: -/* 0D4578 800D3978 00001025 */ move $v0, $zero -.L800D397C: -/* 0D457C 800D397C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4580 800D3980 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D4584 800D3984 03E00008 */ jr $ra -/* 0D4588 800D3988 00000000 */ nop - -/* 0D458C 800D398C 00000000 */ nop -glabel __osSpDeviceBusy -/* 0D4590 800D3990 3C0EA404 */ lui $t6, %hi(D_A4040010) # $t6, 0xa404 -/* 0D4594 800D3994 8DC40010 */ lw $a0, %lo(D_A4040010)($t6) -/* 0D4598 800D3998 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D459C 800D399C 308F001C */ andi $t7, $a0, 0x1c -/* 0D45A0 800D39A0 11E00003 */ beqz $t7, .L800D39B0 -/* 0D45A4 800D39A4 00000000 */ nop -/* 0D45A8 800D39A8 10000002 */ b .L800D39B4 -/* 0D45AC 800D39AC 24020001 */ li $v0, 1 -.L800D39B0: -/* 0D45B0 800D39B0 00001025 */ move $v0, $zero -.L800D39B4: -/* 0D45B4 800D39B4 03E00008 */ jr $ra -/* 0D45B8 800D39B8 27BD0008 */ addiu $sp, $sp, 8 - -/* 0D45BC 800D39BC 00000000 */ nop -glabel osSetTimer -/* 0D45C0 800D39C0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D45C4 800D39C4 AFA40020 */ sw $a0, 0x20($sp) -/* 0D45C8 800D39C8 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D45CC 800D39CC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D45D0 800D39D0 AFA60028 */ sw $a2, 0x28($sp) -/* 0D45D4 800D39D4 AFA7002C */ sw $a3, 0x2c($sp) -/* 0D45D8 800D39D8 ADC00000 */ sw $zero, ($t6) -/* 0D45DC 800D39DC 8FAF0020 */ lw $t7, 0x20($sp) -/* 0D45E0 800D39E0 ADE00004 */ sw $zero, 4($t7) -/* 0D45E4 800D39E4 8FA80020 */ lw $t0, 0x20($sp) -/* 0D45E8 800D39E8 8FB90034 */ lw $t9, 0x34($sp) -/* 0D45EC 800D39EC 8FB80030 */ lw $t8, 0x30($sp) -/* 0D45F0 800D39F0 AD19000C */ sw $t9, 0xc($t0) -/* 0D45F4 800D39F4 AD180008 */ sw $t8, 8($t0) -/* 0D45F8 800D39F8 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D45FC 800D39FC 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D4600 800D3A00 15400003 */ bnez $t2, .L800D3A10 -/* 0D4604 800D3A04 00000000 */ nop -/* 0D4608 800D3A08 11600005 */ beqz $t3, .L800D3A20 -/* 0D460C 800D3A0C 00000000 */ nop -.L800D3A10: -/* 0D4610 800D3A10 8FA90020 */ lw $t1, 0x20($sp) -/* 0D4614 800D3A14 AD2A0010 */ sw $t2, 0x10($t1) -/* 0D4618 800D3A18 10000006 */ b .L800D3A34 -/* 0D461C 800D3A1C AD2B0014 */ sw $t3, 0x14($t1) -.L800D3A20: -/* 0D4620 800D3A20 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D4624 800D3A24 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D4628 800D3A28 8FAD0034 */ lw $t5, 0x34($sp) -/* 0D462C 800D3A2C ADCC0010 */ sw $t4, 0x10($t6) -/* 0D4630 800D3A30 ADCD0014 */ sw $t5, 0x14($t6) -.L800D3A34: -/* 0D4634 800D3A34 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D4638 800D3A38 8FB80020 */ lw $t8, 0x20($sp) -/* 0D463C 800D3A3C AF0F0018 */ sw $t7, 0x18($t8) -/* 0D4640 800D3A40 8FA80020 */ lw $t0, 0x20($sp) -/* 0D4644 800D3A44 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D4648 800D3A48 AD19001C */ sw $t9, 0x1c($t0) -/* 0D464C 800D3A4C 0C034A22 */ jal __osInsertTimer -/* 0D4650 800D3A50 8FA40020 */ lw $a0, 0x20($sp) -/* 0D4654 800D3A54 3C0A800F */ lui $t2, %hi(D_800EB3C0) # $t2, 0x800f -/* 0D4658 800D3A58 8D4AB3C0 */ lw $t2, %lo(D_800EB3C0)($t2) -/* 0D465C 800D3A5C AFA20018 */ sw $v0, 0x18($sp) -/* 0D4660 800D3A60 AFA3001C */ sw $v1, 0x1c($sp) -/* 0D4664 800D3A64 8FA90020 */ lw $t1, 0x20($sp) -/* 0D4668 800D3A68 8D4B0000 */ lw $t3, ($t2) -/* 0D466C 800D3A6C 15690004 */ bne $t3, $t1, .L800D3A80 -/* 0D4670 800D3A70 00000000 */ nop -/* 0D4674 800D3A74 8FA40018 */ lw $a0, 0x18($sp) -/* 0D4678 800D3A78 0C034A05 */ jal __osSetTimerIntr -/* 0D467C 800D3A7C 8FA5001C */ lw $a1, 0x1c($sp) -.L800D3A80: -/* 0D4680 800D3A80 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4684 800D3A84 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D4688 800D3A88 00001025 */ move $v0, $zero -/* 0D468C 800D3A8C 03E00008 */ jr $ra -/* 0D4690 800D3A90 00000000 */ nop - -/* 0D4694 800D3A94 00000000 */ nop -/* 0D4698 800D3A98 00000000 */ nop -/* 0D469C 800D3A9C 00000000 */ nop -glabel __osSiRawStartDma -/* 0D46A0 800D3AA0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D46A4 800D3AA4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D46A8 800D3AA8 AFA40018 */ sw $a0, 0x18($sp) -/* 0D46AC 800D3AAC 0C035EDC */ jal __osSiDeviceBusy -/* 0D46B0 800D3AB0 AFA5001C */ sw $a1, 0x1c($sp) -/* 0D46B4 800D3AB4 10400003 */ beqz $v0, .L800D3AC4 -/* 0D46B8 800D3AB8 00000000 */ nop -/* 0D46BC 800D3ABC 1000001F */ b .L800D3B3C -/* 0D46C0 800D3AC0 2402FFFF */ li $v0, -1 -.L800D3AC4: -/* 0D46C4 800D3AC4 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D46C8 800D3AC8 24010001 */ li $at, 1 -/* 0D46CC 800D3ACC 15C10004 */ bne $t6, $at, .L800D3AE0 -/* 0D46D0 800D3AD0 00000000 */ nop -/* 0D46D4 800D3AD4 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D46D8 800D3AD8 0C034700 */ jal osWriteBackDCache -/* 0D46DC 800D3ADC 24050040 */ li $a1, 64 -.L800D3AE0: -/* 0D46E0 800D3AE0 0C034E0C */ jal osVirtualToPhysical -/* 0D46E4 800D3AE4 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D46E8 800D3AE8 3C0FA480 */ lui $t7, 0xa480 -/* 0D46EC 800D3AEC ADE20000 */ sw $v0, ($t7) -/* 0D46F0 800D3AF0 8FB80018 */ lw $t8, 0x18($sp) -/* 0D46F4 800D3AF4 17000006 */ bnez $t8, .L800D3B10 -/* 0D46F8 800D3AF8 00000000 */ nop -/* 0D46FC 800D3AFC 3C191FC0 */ lui $t9, (0x1FC007C0 >> 16) # lui $t9, 0x1fc0 -/* 0D4700 800D3B00 373907C0 */ ori $t9, (0x1FC007C0 & 0xFFFF) # ori $t9, $t9, 0x7c0 -/* 0D4704 800D3B04 3C08A480 */ lui $t0, %hi(D_A4800004) # $t0, 0xa480 -/* 0D4708 800D3B08 10000005 */ b .L800D3B20 -/* 0D470C 800D3B0C AD190004 */ sw $t9, %lo(D_A4800004)($t0) -.L800D3B10: -/* 0D4710 800D3B10 3C091FC0 */ lui $t1, (0x1FC007C0 >> 16) # lui $t1, 0x1fc0 -/* 0D4714 800D3B14 352907C0 */ ori $t1, (0x1FC007C0 & 0xFFFF) # ori $t1, $t1, 0x7c0 -/* 0D4718 800D3B18 3C0AA480 */ lui $t2, %hi(D_A4800010) # $t2, 0xa480 -/* 0D471C 800D3B1C AD490010 */ sw $t1, %lo(D_A4800010)($t2) -.L800D3B20: -/* 0D4720 800D3B20 8FAB0018 */ lw $t3, 0x18($sp) -/* 0D4724 800D3B24 15600004 */ bnez $t3, .L800D3B38 -/* 0D4728 800D3B28 00000000 */ nop -/* 0D472C 800D3B2C 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D4730 800D3B30 0C0336E0 */ jal osInvalDCache -/* 0D4734 800D3B34 24050040 */ li $a1, 64 -.L800D3B38: -/* 0D4738 800D3B38 00001025 */ move $v0, $zero -.L800D3B3C: -/* 0D473C 800D3B3C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4740 800D3B40 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D4744 800D3B44 03E00008 */ jr $ra -/* 0D4748 800D3B48 00000000 */ nop - -/* 0D474C 800D3B4C 00000000 */ nop -glabel __osSiCreateAccessQueue -/* 0D4750 800D3B50 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D4754 800D3B54 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4758 800D3B58 240E0001 */ li $t6, 1 -/* 0D475C 800D3B5C 3C01800F */ lui $at, %hi(D_800EB450) # $at, 0x800f -/* 0D4760 800D3B60 3C048019 */ lui $a0, %hi(D_80197648) # $a0, 0x8019 -/* 0D4764 800D3B64 3C058019 */ lui $a1, %hi(D_80197640) # $a1, 0x8019 -/* 0D4768 800D3B68 AC2EB450 */ sw $t6, %lo(D_800EB450)($at) -/* 0D476C 800D3B6C 24A57640 */ addiu $a1, %lo(D_80197640) # addiu $a1, $a1, 0x7640 -/* 0D4770 800D3B70 24847648 */ addiu $a0, %lo(D_80197648) # addiu $a0, $a0, 0x7648 -/* 0D4774 800D3B74 0C033358 */ jal osCreateMesgQueue -/* 0D4778 800D3B78 24060001 */ li $a2, 1 -/* 0D477C 800D3B7C 3C048019 */ lui $a0, %hi(D_80197648) # $a0, 0x8019 -/* 0D4780 800D3B80 24847648 */ addiu $a0, %lo(D_80197648) # addiu $a0, $a0, 0x7648 -/* 0D4784 800D3B84 00002825 */ move $a1, $zero -/* 0D4788 800D3B88 0C033630 */ jal osSendMesg -/* 0D478C 800D3B8C 00003025 */ move $a2, $zero -/* 0D4790 800D3B90 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4794 800D3B94 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D4798 800D3B98 03E00008 */ jr $ra -/* 0D479C 800D3B9C 00000000 */ nop - -glabel __osSiGetAccess -/* 0D47A0 800D3BA0 3C0E800F */ lui $t6, %hi(D_800EB450) # $t6, 0x800f -/* 0D47A4 800D3BA4 8DCEB450 */ lw $t6, %lo(D_800EB450)($t6) -/* 0D47A8 800D3BA8 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D47AC 800D3BAC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D47B0 800D3BB0 15C00003 */ bnez $t6, .L800D3BC0 -/* 0D47B4 800D3BB4 00000000 */ nop -/* 0D47B8 800D3BB8 0C034ED4 */ jal __osSiCreateAccessQueue -/* 0D47BC 800D3BBC 00000000 */ nop -.L800D3BC0: -/* 0D47C0 800D3BC0 3C048019 */ lui $a0, %hi(D_80197648) # $a0, 0x8019 -/* 0D47C4 800D3BC4 24847648 */ addiu $a0, %lo(D_80197648) # addiu $a0, $a0, 0x7648 -/* 0D47C8 800D3BC8 27A5001C */ addiu $a1, $sp, 0x1c -/* 0D47CC 800D3BCC 0C0335D4 */ jal osRecvMesg -/* 0D47D0 800D3BD0 24060001 */ li $a2, 1 -/* 0D47D4 800D3BD4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D47D8 800D3BD8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D47DC 800D3BDC 03E00008 */ jr $ra -/* 0D47E0 800D3BE0 00000000 */ nop - -glabel __osSiRelAccess -/* 0D47E4 800D3BE4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D47E8 800D3BE8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D47EC 800D3BEC 3C048019 */ lui $a0, %hi(D_80197648) # $a0, 0x8019 -/* 0D47F0 800D3BF0 24847648 */ addiu $a0, %lo(D_80197648) # addiu $a0, $a0, 0x7648 -/* 0D47F4 800D3BF4 00002825 */ move $a1, $zero -/* 0D47F8 800D3BF8 0C033630 */ jal osSendMesg -/* 0D47FC 800D3BFC 00003025 */ move $a2, $zero -/* 0D4800 800D3C00 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4804 800D3C04 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D4808 800D3C08 03E00008 */ jr $ra -/* 0D480C 800D3C0C 00000000 */ nop - -glabel osJamMesg -/* 0D4810 800D3C10 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D4814 800D3C14 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D4818 800D3C18 AFA40028 */ sw $a0, 0x28($sp) -/* 0D481C 800D3C1C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D4820 800D3C20 AFA60030 */ sw $a2, 0x30($sp) -/* 0D4824 800D3C24 AFB10018 */ sw $s1, 0x18($sp) -/* 0D4828 800D3C28 0C0346AC */ jal __osDisableInt -/* 0D482C 800D3C2C AFB00014 */ sw $s0, 0x14($sp) -/* 0D4830 800D3C30 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D4834 800D3C34 00408025 */ move $s0, $v0 -/* 0D4838 800D3C38 8DCF0008 */ lw $t7, 8($t6) -/* 0D483C 800D3C3C 8DD80010 */ lw $t8, 0x10($t6) -/* 0D4840 800D3C40 01F8082A */ slt $at, $t7, $t8 -/* 0D4844 800D3C44 14200018 */ bnez $at, .L800D3CA8 -/* 0D4848 800D3C48 00000000 */ nop -.L800D3C4C: -/* 0D484C 800D3C4C 8FB90030 */ lw $t9, 0x30($sp) -/* 0D4850 800D3C50 24010001 */ li $at, 1 -/* 0D4854 800D3C54 1721000A */ bne $t9, $at, .L800D3C80 -/* 0D4858 800D3C58 00000000 */ nop -/* 0D485C 800D3C5C 3C09800F */ lui $t1, %hi(D_800EB3B0) # $t1, 0x800f -/* 0D4860 800D3C60 8D29B3B0 */ lw $t1, %lo(D_800EB3B0)($t1) -/* 0D4864 800D3C64 24080008 */ li $t0, 8 -/* 0D4868 800D3C68 A5280010 */ sh $t0, 0x10($t1) -/* 0D486C 800D3C6C 8FA40028 */ lw $a0, 0x28($sp) -/* 0D4870 800D3C70 0C0345F3 */ jal __osEnqueueAndYield -/* 0D4874 800D3C74 24840004 */ addiu $a0, $a0, 4 -/* 0D4878 800D3C78 10000005 */ b .L800D3C90 -/* 0D487C 800D3C7C 00000000 */ nop -.L800D3C80: -/* 0D4880 800D3C80 0C0346B4 */ jal __osRestoreInt -/* 0D4884 800D3C84 02002025 */ move $a0, $s0 -/* 0D4888 800D3C88 10000030 */ b .L800D3D4C -/* 0D488C 800D3C8C 2402FFFF */ li $v0, -1 -.L800D3C90: -/* 0D4890 800D3C90 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D4894 800D3C94 8D4B0008 */ lw $t3, 8($t2) -/* 0D4898 800D3C98 8D4C0010 */ lw $t4, 0x10($t2) -/* 0D489C 800D3C9C 016C082A */ slt $at, $t3, $t4 -/* 0D48A0 800D3CA0 1020FFEA */ beqz $at, .L800D3C4C -/* 0D48A4 800D3CA4 00000000 */ nop -.L800D3CA8: -/* 0D48A8 800D3CA8 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D48AC 800D3CAC 8DAE000C */ lw $t6, 0xc($t5) -/* 0D48B0 800D3CB0 8DAF0010 */ lw $t7, 0x10($t5) -/* 0D48B4 800D3CB4 01CFC021 */ addu $t8, $t6, $t7 -/* 0D48B8 800D3CB8 2719FFFF */ addiu $t9, $t8, -1 -/* 0D48BC 800D3CBC 032F001A */ div $zero, $t9, $t7 -/* 0D48C0 800D3CC0 00004010 */ mfhi $t0 -/* 0D48C4 800D3CC4 ADA8000C */ sw $t0, 0xc($t5) -/* 0D48C8 800D3CC8 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D48CC 800D3CCC 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D48D0 800D3CD0 15E00002 */ bnez $t7, .L800D3CDC -/* 0D48D4 800D3CD4 00000000 */ nop -/* 0D48D8 800D3CD8 0007000D */ break 7 -.L800D3CDC: -/* 0D48DC 800D3CDC 2401FFFF */ li $at, -1 -/* 0D48E0 800D3CE0 15E10004 */ bne $t7, $at, .L800D3CF4 -/* 0D48E4 800D3CE4 3C018000 */ lui $at, 0x8000 -/* 0D48E8 800D3CE8 17210002 */ bne $t9, $at, .L800D3CF4 -/* 0D48EC 800D3CEC 00000000 */ nop -/* 0D48F0 800D3CF0 0006000D */ break 6 -.L800D3CF4: -/* 0D48F4 800D3CF4 8D4C000C */ lw $t4, 0xc($t2) -/* 0D48F8 800D3CF8 8D4B0014 */ lw $t3, 0x14($t2) -/* 0D48FC 800D3CFC 000C7080 */ sll $t6, $t4, 2 -/* 0D4900 800D3D00 016EC021 */ addu $t8, $t3, $t6 -/* 0D4904 800D3D04 AF090000 */ sw $t1, ($t8) -/* 0D4908 800D3D08 8FB90028 */ lw $t9, 0x28($sp) -/* 0D490C 800D3D0C 8F2F0008 */ lw $t7, 8($t9) -/* 0D4910 800D3D10 25E80001 */ addiu $t0, $t7, 1 -/* 0D4914 800D3D14 AF280008 */ sw $t0, 8($t9) -/* 0D4918 800D3D18 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D491C 800D3D1C 8DAA0000 */ lw $t2, ($t5) -/* 0D4920 800D3D20 8D4C0000 */ lw $t4, ($t2) -/* 0D4924 800D3D24 11800006 */ beqz $t4, .L800D3D40 -/* 0D4928 800D3D28 00000000 */ nop -/* 0D492C 800D3D2C 0C034645 */ jal __osPopThread -/* 0D4930 800D3D30 01A02025 */ move $a0, $t5 -/* 0D4934 800D3D34 00408825 */ move $s1, $v0 -/* 0D4938 800D3D38 0C0330D8 */ jal osStartThread -/* 0D493C 800D3D3C 02202025 */ move $a0, $s1 -.L800D3D40: -/* 0D4940 800D3D40 0C0346B4 */ jal __osRestoreInt -/* 0D4944 800D3D44 02002025 */ move $a0, $s0 -/* 0D4948 800D3D48 00001025 */ move $v0, $zero -.L800D3D4C: -/* 0D494C 800D3D4C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D4950 800D3D50 8FB00014 */ lw $s0, 0x14($sp) -/* 0D4954 800D3D54 8FB10018 */ lw $s1, 0x18($sp) -/* 0D4958 800D3D58 03E00008 */ jr $ra -/* 0D495C 800D3D5C 27BD0028 */ addiu $sp, $sp, 0x28 - -glabel osPiGetCmdQueue -/* 0D4960 800D3D60 3C0E800F */ lui $t6, %hi(D_800EB340) # $t6, 0x800f -/* 0D4964 800D3D64 8DCEB340 */ lw $t6, %lo(D_800EB340)($t6) -/* 0D4968 800D3D68 15C00003 */ bnez $t6, .L800D3D78 -/* 0D496C 800D3D6C 00000000 */ nop -/* 0D4970 800D3D70 03E00008 */ jr $ra -/* 0D4974 800D3D74 00001025 */ move $v0, $zero - -.L800D3D78: -/* 0D4978 800D3D78 3C02800F */ lui $v0, %hi(D_800EB340+0x8) # $v0, 0x800f -/* 0D497C 800D3D7C 8C42B348 */ lw $v0, %lo(D_800EB340+0x8)($v0) -/* 0D4980 800D3D80 03E00008 */ jr $ra -/* 0D4984 800D3D84 00000000 */ nop - -/* 0D4988 800D3D88 00000000 */ nop -/* 0D498C 800D3D8C 00000000 */ nop -glabel __osSpGetStatus -/* 0D4990 800D3D90 3C0EA404 */ lui $t6, 0xa404 -/* 0D4994 800D3D94 03E00008 */ jr $ra -/* 0D4998 800D3D98 8DC20010 */ lw $v0, 0x10($t6) - -/* 0D499C 800D3D9C 00000000 */ nop -glabel guMtxF2L -/* 0D49A0 800D3DA0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0D49A4 800D3DA4 44810000 */ mtc1 $at, $f0 -/* 0D49A8 800D3DA8 00A01025 */ move $v0, $a1 -/* 0D49AC 800D3DAC 24A30020 */ addiu $v1, $a1, 0x20 -/* 0D49B0 800D3DB0 00003025 */ move $a2, $zero -/* 0D49B4 800D3DB4 00803825 */ move $a3, $a0 -/* 0D49B8 800D3DB8 240C0004 */ li $t4, 4 -/* 0D49BC 800D3DBC 240B0002 */ li $t3, 2 -/* 0D49C0 800D3DC0 3C0AFFFF */ lui $t2, 0xffff -.L800D3DC4: -/* 0D49C4 800D3DC4 00002025 */ move $a0, $zero -/* 0D49C8 800D3DC8 00E04025 */ move $t0, $a3 -/* 0D49CC 800D3DCC C50E0004 */ lwc1 $f14, 4($t0) -/* 0D49D0 800D3DD0 24840001 */ addiu $a0, $a0, 1 -/* 0D49D4 800D3DD4 C5120000 */ lwc1 $f18, ($t0) -/* 0D49D8 800D3DD8 46007402 */ mul.s $f16, $f14, $f0 -/* 0D49DC 800D3DDC 108B0019 */ beq $a0, $t3, .L800D3E44 -/* 0D49E0 800D3DE0 00000000 */ nop -.L800D3DE4: -/* 0D49E4 800D3DE4 46009382 */ mul.s $f14, $f18, $f0 -/* 0D49E8 800D3DE8 24840001 */ addiu $a0, $a0, 1 -/* 0D49EC 800D3DEC 24420004 */ addiu $v0, $v0, 4 -/* 0D49F0 800D3DF0 24630004 */ addiu $v1, $v1, 4 -/* 0D49F4 800D3DF4 25080008 */ addiu $t0, $t0, 8 -/* 0D49F8 800D3DF8 4600830D */ trunc.w.s $f12, $f16 -/* 0D49FC 800D3DFC 4600738D */ trunc.w.s $f14, $f14 -/* 0D4A00 800D3E00 44096000 */ mfc1 $t1, $f12 -/* 0D4A04 800D3E04 44057000 */ mfc1 $a1, $f14 -/* 0D4A08 800D3E08 0009CC03 */ sra $t9, $t1, 0x10 -/* 0D4A0C 800D3E0C 332DFFFF */ andi $t5, $t9, 0xffff -/* 0D4A10 800D3E10 00AAC024 */ and $t8, $a1, $t2 -/* 0D4A14 800D3E14 030D7025 */ or $t6, $t8, $t5 -/* 0D4A18 800D3E18 00057C00 */ sll $t7, $a1, 0x10 -/* 0D4A1C 800D3E1C 01EAC824 */ and $t9, $t7, $t2 -/* 0D4A20 800D3E20 AC4EFFFC */ sw $t6, -4($v0) -/* 0D4A24 800D3E24 3138FFFF */ andi $t8, $t1, 0xffff -/* 0D4A28 800D3E28 03386825 */ or $t5, $t9, $t8 -/* 0D4A2C 800D3E2C AC6DFFFC */ sw $t5, -4($v1) -/* 0D4A30 800D3E30 C50E0004 */ lwc1 $f14, 4($t0) -/* 0D4A34 800D3E34 C5120000 */ lwc1 $f18, ($t0) -/* 0D4A38 800D3E38 46007402 */ mul.s $f16, $f14, $f0 -/* 0D4A3C 800D3E3C 148BFFE9 */ bne $a0, $t3, .L800D3DE4 -/* 0D4A40 800D3E40 00000000 */ nop -.L800D3E44: -/* 0D4A44 800D3E44 46009382 */ mul.s $f14, $f18, $f0 -/* 0D4A48 800D3E48 25080008 */ addiu $t0, $t0, 8 -/* 0D4A4C 800D3E4C 24420004 */ addiu $v0, $v0, 4 -/* 0D4A50 800D3E50 24630004 */ addiu $v1, $v1, 4 -/* 0D4A54 800D3E54 4600830D */ trunc.w.s $f12, $f16 -/* 0D4A58 800D3E58 4600738D */ trunc.w.s $f14, $f14 -/* 0D4A5C 800D3E5C 44096000 */ mfc1 $t1, $f12 -/* 0D4A60 800D3E60 44057000 */ mfc1 $a1, $f14 -/* 0D4A64 800D3E64 0009CC03 */ sra $t9, $t1, 0x10 -/* 0D4A68 800D3E68 332DFFFF */ andi $t5, $t9, 0xffff -/* 0D4A6C 800D3E6C 00AAC024 */ and $t8, $a1, $t2 -/* 0D4A70 800D3E70 030D7025 */ or $t6, $t8, $t5 -/* 0D4A74 800D3E74 00057C00 */ sll $t7, $a1, 0x10 -/* 0D4A78 800D3E78 01EAC824 */ and $t9, $t7, $t2 -/* 0D4A7C 800D3E7C 3138FFFF */ andi $t8, $t1, 0xffff -/* 0D4A80 800D3E80 AC4EFFFC */ sw $t6, -4($v0) -/* 0D4A84 800D3E84 03386825 */ or $t5, $t9, $t8 -/* 0D4A88 800D3E88 AC6DFFFC */ sw $t5, -4($v1) -/* 0D4A8C 800D3E8C 24C60001 */ addiu $a2, $a2, 1 -/* 0D4A90 800D3E90 14CCFFCC */ bne $a2, $t4, .L800D3DC4 -/* 0D4A94 800D3E94 24E70010 */ addiu $a3, $a3, 0x10 -/* 0D4A98 800D3E98 03E00008 */ jr $ra -/* 0D4A9C 800D3E9C 00000000 */ nop - -glabel guMtxIdentF -/* 0D4AA0 800D3EA0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D4AA4 800D3EA4 00801825 */ move $v1, $a0 -/* 0D4AA8 800D3EA8 44810000 */ mtc1 $at, $f0 -/* 0D4AAC 800D3EAC 44801000 */ mtc1 $zero, $f2 -/* 0D4AB0 800D3EB0 24040001 */ li $a0, 1 -/* 0D4AB4 800D3EB4 00001025 */ move $v0, $zero -/* 0D4AB8 800D3EB8 24070004 */ li $a3, 4 -/* 0D4ABC 800D3EBC 24060003 */ li $a2, 3 -/* 0D4AC0 800D3EC0 24050002 */ li $a1, 2 -.L800D3EC4: -/* 0D4AC4 800D3EC4 54400004 */ bnel $v0, $zero, .L800D3ED8 -/* 0D4AC8 800D3EC8 E4620000 */ swc1 $f2, ($v1) -/* 0D4ACC 800D3ECC 10000002 */ b .L800D3ED8 -/* 0D4AD0 800D3ED0 E4600000 */ swc1 $f0, ($v1) -/* 0D4AD4 800D3ED4 E4620000 */ swc1 $f2, ($v1) -.L800D3ED8: -/* 0D4AD8 800D3ED8 54440004 */ bnel $v0, $a0, .L800D3EEC -/* 0D4ADC 800D3EDC E4620004 */ swc1 $f2, 4($v1) -/* 0D4AE0 800D3EE0 10000002 */ b .L800D3EEC -/* 0D4AE4 800D3EE4 E4600004 */ swc1 $f0, 4($v1) -/* 0D4AE8 800D3EE8 E4620004 */ swc1 $f2, 4($v1) -.L800D3EEC: -/* 0D4AEC 800D3EEC 54450004 */ bnel $v0, $a1, .L800D3F00 -/* 0D4AF0 800D3EF0 E4620008 */ swc1 $f2, 8($v1) -/* 0D4AF4 800D3EF4 10000002 */ b .L800D3F00 -/* 0D4AF8 800D3EF8 E4600008 */ swc1 $f0, 8($v1) -/* 0D4AFC 800D3EFC E4620008 */ swc1 $f2, 8($v1) -.L800D3F00: -/* 0D4B00 800D3F00 54460004 */ bnel $v0, $a2, .L800D3F14 -/* 0D4B04 800D3F04 E462000C */ swc1 $f2, 0xc($v1) -/* 0D4B08 800D3F08 10000002 */ b .L800D3F14 -/* 0D4B0C 800D3F0C E460000C */ swc1 $f0, 0xc($v1) -/* 0D4B10 800D3F10 E462000C */ swc1 $f2, 0xc($v1) -.L800D3F14: -/* 0D4B14 800D3F14 24420001 */ addiu $v0, $v0, 1 -/* 0D4B18 800D3F18 1447FFEA */ bne $v0, $a3, .L800D3EC4 -/* 0D4B1C 800D3F1C 24630010 */ addiu $v1, $v1, 0x10 -/* 0D4B20 800D3F20 03E00008 */ jr $ra -/* 0D4B24 800D3F24 00000000 */ nop - -glabel guMtxIdent -/* 0D4B28 800D3F28 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0D4B2C 800D3F2C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4B30 800D3F30 AFA40058 */ sw $a0, 0x58($sp) -/* 0D4B34 800D3F34 0C034FA8 */ jal guMtxIdentF -/* 0D4B38 800D3F38 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D4B3C 800D3F3C 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D4B40 800D3F40 0C034F68 */ jal guMtxF2L -/* 0D4B44 800D3F44 8FA50058 */ lw $a1, 0x58($sp) -/* 0D4B48 800D3F48 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4B4C 800D3F4C 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0D4B50 800D3F50 03E00008 */ jr $ra -/* 0D4B54 800D3F54 00000000 */ nop - -glabel guMtxL2F -/* 0D4B58 800D3F58 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0D4B5C 800D3F5C 44810000 */ mtc1 $at, $f0 -/* 0D4B60 800D3F60 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D4B64 800D3F64 00A01025 */ move $v0, $a1 -/* 0D4B68 800D3F68 24A30020 */ addiu $v1, $a1, 0x20 -/* 0D4B6C 800D3F6C 00003025 */ move $a2, $zero -/* 0D4B70 800D3F70 00804025 */ move $t0, $a0 -/* 0D4B74 800D3F74 240C0004 */ li $t4, 4 -/* 0D4B78 800D3F78 240B0002 */ li $t3, 2 -/* 0D4B7C 800D3F7C 3C0AFFFF */ lui $t2, 0xffff -.L800D3F80: -/* 0D4B80 800D3F80 00002025 */ move $a0, $zero -/* 0D4B84 800D3F84 01004825 */ move $t1, $t0 -.L800D3F88: -/* 0D4B88 800D3F88 8C6E0000 */ lw $t6, ($v1) -/* 0D4B8C 800D3F8C 8C590000 */ lw $t9, ($v0) -/* 0D4B90 800D3F90 24840001 */ addiu $a0, $a0, 1 -/* 0D4B94 800D3F94 000E7C02 */ srl $t7, $t6, 0x10 -/* 0D4B98 800D3F98 31F8FFFF */ andi $t8, $t7, 0xffff -/* 0D4B9C 800D3F9C 032A6824 */ and $t5, $t9, $t2 -/* 0D4BA0 800D3FA0 030D7025 */ or $t6, $t8, $t5 -/* 0D4BA4 800D3FA4 AFAE0004 */ sw $t6, 4($sp) -/* 0D4BA8 800D3FA8 8C6F0000 */ lw $t7, ($v1) -/* 0D4BAC 800D3FAC 8C580000 */ lw $t8, ($v0) -/* 0D4BB0 800D3FB0 8FA50004 */ lw $a1, 4($sp) -/* 0D4BB4 800D3FB4 31F9FFFF */ andi $t9, $t7, 0xffff -/* 0D4BB8 800D3FB8 00186C00 */ sll $t5, $t8, 0x10 -/* 0D4BBC 800D3FBC 44859000 */ mtc1 $a1, $f18 -/* 0D4BC0 800D3FC0 01AA7024 */ and $t6, $t5, $t2 -/* 0D4BC4 800D3FC4 032E3825 */ or $a3, $t9, $t6 -/* 0D4BC8 800D3FC8 468094A0 */ cvt.s.w $f18, $f18 -/* 0D4BCC 800D3FCC 44878000 */ mtc1 $a3, $f16 -/* 0D4BD0 800D3FD0 AFA70000 */ sw $a3, ($sp) -/* 0D4BD4 800D3FD4 24420004 */ addiu $v0, $v0, 4 -/* 0D4BD8 800D3FD8 24630004 */ addiu $v1, $v1, 4 -/* 0D4BDC 800D3FDC 46808420 */ cvt.s.w $f16, $f16 -/* 0D4BE0 800D3FE0 25290008 */ addiu $t1, $t1, 8 -/* 0D4BE4 800D3FE4 46009483 */ div.s $f18, $f18, $f0 -/* 0D4BE8 800D3FE8 46008403 */ div.s $f16, $f16, $f0 -/* 0D4BEC 800D3FEC E532FFF8 */ swc1 $f18, -8($t1) -/* 0D4BF0 800D3FF0 148BFFE5 */ bne $a0, $t3, .L800D3F88 -/* 0D4BF4 800D3FF4 E530FFFC */ swc1 $f16, -4($t1) -/* 0D4BF8 800D3FF8 24C60001 */ addiu $a2, $a2, 1 -/* 0D4BFC 800D3FFC 14CCFFE0 */ bne $a2, $t4, .L800D3F80 -/* 0D4C00 800D4000 25080010 */ addiu $t0, $t0, 0x10 -/* 0D4C04 800D4004 03E00008 */ jr $ra -/* 0D4C08 800D4008 27BD0010 */ addiu $sp, $sp, 0x10 - -/* 0D4C0C 800D400C 00000000 */ nop -glabel osEepromWrite -/* 0D4C10 800D4010 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D4C14 800D4014 AFA5003C */ sw $a1, 0x3c($sp) -/* 0D4C18 800D4018 93AF003F */ lbu $t7, 0x3f($sp) -/* 0D4C1C 800D401C 3C0E8019 */ lui $t6, %hi(D_80197660) # $t6, 0x8019 -/* 0D4C20 800D4020 25CE7660 */ addiu $t6, %lo(D_80197660) # addiu $t6, $t6, 0x7660 -/* 0D4C24 800D4024 29E10041 */ slti $at, $t7, 0x41 -/* 0D4C28 800D4028 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4C2C 800D402C AFA40038 */ sw $a0, 0x38($sp) -/* 0D4C30 800D4030 AFA60040 */ sw $a2, 0x40($sp) -/* 0D4C34 800D4034 AFA00034 */ sw $zero, 0x34($sp) -/* 0D4C38 800D4038 14200003 */ bnez $at, .L800D4048 -/* 0D4C3C 800D403C AFAE002C */ sw $t6, 0x2c($sp) -/* 0D4C40 800D4040 1000005B */ b .L800D41B0 -/* 0D4C44 800D4044 2402FFFF */ li $v0, -1 -.L800D4048: -/* 0D4C48 800D4048 0C034EE8 */ jal __osSiGetAccess -/* 0D4C4C 800D404C 00000000 */ nop -/* 0D4C50 800D4050 8FA40038 */ lw $a0, 0x38($sp) -/* 0D4C54 800D4054 0C0350B3 */ jal __osEepStatus -/* 0D4C58 800D4058 27A5001C */ addiu $a1, $sp, 0x1c -/* 0D4C5C 800D405C AFA20034 */ sw $v0, 0x34($sp) -/* 0D4C60 800D4060 8FB80034 */ lw $t8, 0x34($sp) -/* 0D4C64 800D4064 17000005 */ bnez $t8, .L800D407C -/* 0D4C68 800D4068 00000000 */ nop -/* 0D4C6C 800D406C 97B9001C */ lhu $t9, 0x1c($sp) -/* 0D4C70 800D4070 34018000 */ li $at, 32768 -/* 0D4C74 800D4074 13210003 */ beq $t9, $at, .L800D4084 -/* 0D4C78 800D4078 00000000 */ nop -.L800D407C: -/* 0D4C7C 800D407C 1000004C */ b .L800D41B0 -/* 0D4C80 800D4080 24020008 */ li $v0, 8 -.L800D4084: -/* 0D4C84 800D4084 93A8001E */ lbu $t0, 0x1e($sp) -/* 0D4C88 800D4088 31090080 */ andi $t1, $t0, 0x80 -/* 0D4C8C 800D408C 11200008 */ beqz $t1, .L800D40B0 -/* 0D4C90 800D4090 00000000 */ nop -.L800D4094: -/* 0D4C94 800D4094 8FA40038 */ lw $a0, 0x38($sp) -/* 0D4C98 800D4098 0C0350B3 */ jal __osEepStatus -/* 0D4C9C 800D409C 27A5001C */ addiu $a1, $sp, 0x1c -/* 0D4CA0 800D40A0 93AA001E */ lbu $t2, 0x1e($sp) -/* 0D4CA4 800D40A4 314B0080 */ andi $t3, $t2, 0x80 -/* 0D4CA8 800D40A8 1560FFFA */ bnez $t3, .L800D4094 -/* 0D4CAC 800D40AC 00000000 */ nop -.L800D40B0: -/* 0D4CB0 800D40B0 93A4003F */ lbu $a0, 0x3f($sp) -/* 0D4CB4 800D40B4 0C035070 */ jal func_800D41C0 -/* 0D4CB8 800D40B8 8FA50040 */ lw $a1, 0x40($sp) -/* 0D4CBC 800D40BC 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D4CC0 800D40C0 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D4CC4 800D40C4 0C034EA8 */ jal __osSiRawStartDma -/* 0D4CC8 800D40C8 24040001 */ li $a0, 1 -/* 0D4CCC 800D40CC AFA20034 */ sw $v0, 0x34($sp) -/* 0D4CD0 800D40D0 8FA40038 */ lw $a0, 0x38($sp) -/* 0D4CD4 800D40D4 00002825 */ move $a1, $zero -/* 0D4CD8 800D40D8 0C0335D4 */ jal osRecvMesg -/* 0D4CDC 800D40DC 24060001 */ li $a2, 1 -/* 0D4CE0 800D40E0 AFA00030 */ sw $zero, 0x30($sp) -.L800D40E4: -/* 0D4CE4 800D40E4 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D4CE8 800D40E8 8FAF0030 */ lw $t7, 0x30($sp) -/* 0D4CEC 800D40EC 3C018019 */ lui $at, %hi(D_80197660) # 0x8019 -/* 0D4CF0 800D40F0 000D7080 */ sll $t6, $t5, 2 -/* 0D4CF4 800D40F4 002E0821 */ addu $at, $at, $t6 -/* 0D4CF8 800D40F8 240C00FF */ li $t4, 255 -/* 0D4CFC 800D40FC AC2C7660 */ sw $t4, %lo(D_80197660)($at) # 0x7660($at) -/* 0D4D00 800D4100 25F80001 */ addiu $t8, $t7, 1 -/* 0D4D04 800D4104 2B010010 */ slti $at, $t8, 0x10 -/* 0D4D08 800D4108 1420FFF6 */ bnez $at, .L800D40E4 -/* 0D4D0C 800D410C AFB80030 */ sw $t8, 0x30($sp) -/* 0D4D10 800D4110 3C018019 */ lui $at, %hi(D_8019769C) # $at, 0x8019 -/* 0D4D14 800D4114 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D4D18 800D4118 AC20769C */ sw $zero, %lo(D_8019769C)($at) -/* 0D4D1C 800D411C 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D4D20 800D4120 0C034EA8 */ jal __osSiRawStartDma -/* 0D4D24 800D4124 00002025 */ move $a0, $zero -/* 0D4D28 800D4128 24190005 */ li $t9, 5 -/* 0D4D2C 800D412C 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0D4D30 800D4130 AFA20034 */ sw $v0, 0x34($sp) -/* 0D4D34 800D4134 A0396540 */ sb $t9, %lo(_osLastSentSiCmd)($at) -/* 0D4D38 800D4138 8FA40038 */ lw $a0, 0x38($sp) -/* 0D4D3C 800D413C 00002825 */ move $a1, $zero -/* 0D4D40 800D4140 0C0335D4 */ jal osRecvMesg -/* 0D4D44 800D4144 24060001 */ li $a2, 1 -/* 0D4D48 800D4148 AFA00030 */ sw $zero, 0x30($sp) -.L800D414C: -/* 0D4D4C 800D414C 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D4D50 800D4150 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D4D54 800D4154 254B0001 */ addiu $t3, $t2, 1 -/* 0D4D58 800D4158 29610004 */ slti $at, $t3, 4 -/* 0D4D5C 800D415C 25090001 */ addiu $t1, $t0, 1 -/* 0D4D60 800D4160 AFAB0030 */ sw $t3, 0x30($sp) -/* 0D4D64 800D4164 1420FFF9 */ bnez $at, .L800D414C -/* 0D4D68 800D4168 AFA9002C */ sw $t1, 0x2c($sp) -/* 0D4D6C 800D416C 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D4D70 800D4170 27AD0020 */ addiu $t5, $sp, 0x20 -/* 0D4D74 800D4174 89810000 */ lwl $at, ($t4) -/* 0D4D78 800D4178 99810003 */ lwr $at, 3($t4) -/* 0D4D7C 800D417C ADA10000 */ sw $at, ($t5) -/* 0D4D80 800D4180 898F0004 */ lwl $t7, 4($t4) -/* 0D4D84 800D4184 998F0007 */ lwr $t7, 7($t4) -/* 0D4D88 800D4188 ADAF0004 */ sw $t7, 4($t5) -/* 0D4D8C 800D418C 89810008 */ lwl $at, 8($t4) -/* 0D4D90 800D4190 9981000B */ lwr $at, 0xb($t4) -/* 0D4D94 800D4194 ADA10008 */ sw $at, 8($t5) -/* 0D4D98 800D4198 93B80021 */ lbu $t8, 0x21($sp) -/* 0D4D9C 800D419C 331900C0 */ andi $t9, $t8, 0xc0 -/* 0D4DA0 800D41A0 00194103 */ sra $t0, $t9, 4 -/* 0D4DA4 800D41A4 0C034EF9 */ jal __osSiRelAccess -/* 0D4DA8 800D41A8 AFA80034 */ sw $t0, 0x34($sp) -/* 0D4DAC 800D41AC 8FA20034 */ lw $v0, 0x34($sp) -.L800D41B0: -/* 0D4DB0 800D41B0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D4DB4 800D41B4 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0D4DB8 800D41B8 03E00008 */ jr $ra -/* 0D4DBC 800D41BC 00000000 */ nop - -glabel func_800D41C0 -/* 0D4DC0 800D41C0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D4DC4 800D41C4 3C0E8019 */ lui $t6, %hi(D_80197660) # $t6, 0x8019 -/* 0D4DC8 800D41C8 25CE7660 */ addiu $t6, %lo(D_80197660) # addiu $t6, $t6, 0x7660 -/* 0D4DCC 800D41CC 308400FF */ andi $a0, $a0, 0xff -/* 0D4DD0 800D41D0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0D4DD4 800D41D4 AFA00004 */ sw $zero, 4($sp) -.L800D41D8: -/* 0D4DD8 800D41D8 8FB80004 */ lw $t8, 4($sp) -/* 0D4DDC 800D41DC 8FA80004 */ lw $t0, 4($sp) -/* 0D4DE0 800D41E0 3C018019 */ lui $at, %hi(D_80197660) # 0x8019 -/* 0D4DE4 800D41E4 0018C880 */ sll $t9, $t8, 2 -/* 0D4DE8 800D41E8 00390821 */ addu $at, $at, $t9 -/* 0D4DEC 800D41EC 240F00FF */ li $t7, 255 -/* 0D4DF0 800D41F0 AC2F7660 */ sw $t7, %lo(D_80197660)($at) # 0x7660($at) -/* 0D4DF4 800D41F4 25090001 */ addiu $t1, $t0, 1 -/* 0D4DF8 800D41F8 29210010 */ slti $at, $t1, 0x10 -/* 0D4DFC 800D41FC 1420FFF6 */ bnez $at, .L800D41D8 -/* 0D4E00 800D4200 AFA90004 */ sw $t1, 4($sp) -/* 0D4E04 800D4204 240A0001 */ li $t2, 1 -/* 0D4E08 800D4208 3C018019 */ lui $at, %hi(D_8019769C) # $at, 0x8019 -/* 0D4E0C 800D420C 240B000A */ li $t3, 10 -/* 0D4E10 800D4210 240C0001 */ li $t4, 1 -/* 0D4E14 800D4214 240D0005 */ li $t5, 5 -/* 0D4E18 800D4218 AC2A769C */ sw $t2, %lo(D_8019769C)($at) -/* 0D4E1C 800D421C A3AB0008 */ sb $t3, 8($sp) -/* 0D4E20 800D4220 A3AC0009 */ sb $t4, 9($sp) -/* 0D4E24 800D4224 A3AD000A */ sb $t5, 0xa($sp) -/* 0D4E28 800D4228 A3A4000B */ sb $a0, 0xb($sp) -/* 0D4E2C 800D422C AFA00004 */ sw $zero, 4($sp) -.L800D4230: -/* 0D4E30 800D4230 8FB80004 */ lw $t8, 4($sp) -/* 0D4E34 800D4234 90AE0000 */ lbu $t6, ($a1) -/* 0D4E38 800D4238 24A50001 */ addiu $a1, $a1, 1 -/* 0D4E3C 800D423C 03B87821 */ addu $t7, $sp, $t8 -/* 0D4E40 800D4240 A1EE000C */ sb $t6, 0xc($t7) -/* 0D4E44 800D4244 8FB90004 */ lw $t9, 4($sp) -/* 0D4E48 800D4248 27280001 */ addiu $t0, $t9, 1 -/* 0D4E4C 800D424C 29010008 */ slti $at, $t0, 8 -/* 0D4E50 800D4250 1420FFF7 */ bnez $at, .L800D4230 -/* 0D4E54 800D4254 AFA80004 */ sw $t0, 4($sp) -/* 0D4E58 800D4258 AFA00004 */ sw $zero, 4($sp) -.L800D425C: -/* 0D4E5C 800D425C 8FA90014 */ lw $t1, 0x14($sp) -/* 0D4E60 800D4260 A1200000 */ sb $zero, ($t1) -/* 0D4E64 800D4264 8FAC0004 */ lw $t4, 4($sp) -/* 0D4E68 800D4268 8FAA0014 */ lw $t2, 0x14($sp) -/* 0D4E6C 800D426C 258D0001 */ addiu $t5, $t4, 1 -/* 0D4E70 800D4270 29A10004 */ slti $at, $t5, 4 -/* 0D4E74 800D4274 254B0001 */ addiu $t3, $t2, 1 -/* 0D4E78 800D4278 AFAD0004 */ sw $t5, 4($sp) -/* 0D4E7C 800D427C 1420FFF7 */ bnez $at, .L800D425C -/* 0D4E80 800D4280 AFAB0014 */ sw $t3, 0x14($sp) -/* 0D4E84 800D4284 27B80008 */ addiu $t8, $sp, 8 -/* 0D4E88 800D4288 8F010000 */ lw $at, ($t8) -/* 0D4E8C 800D428C 8FAE0014 */ lw $t6, 0x14($sp) -/* 0D4E90 800D4290 240A00FE */ li $t2, 254 -/* 0D4E94 800D4294 A9C10000 */ swl $at, ($t6) -/* 0D4E98 800D4298 B9C10003 */ swr $at, 3($t6) -/* 0D4E9C 800D429C 8F190004 */ lw $t9, 4($t8) -/* 0D4EA0 800D42A0 A9D90004 */ swl $t9, 4($t6) -/* 0D4EA4 800D42A4 B9D90007 */ swr $t9, 7($t6) -/* 0D4EA8 800D42A8 8F010008 */ lw $at, 8($t8) -/* 0D4EAC 800D42AC A9C10008 */ swl $at, 8($t6) -/* 0D4EB0 800D42B0 B9C1000B */ swr $at, 0xb($t6) -/* 0D4EB4 800D42B4 8FA80014 */ lw $t0, 0x14($sp) -/* 0D4EB8 800D42B8 2509000C */ addiu $t1, $t0, 0xc -/* 0D4EBC 800D42BC AFA90014 */ sw $t1, 0x14($sp) -/* 0D4EC0 800D42C0 A12A0000 */ sb $t2, ($t1) -/* 0D4EC4 800D42C4 03E00008 */ jr $ra -/* 0D4EC8 800D42C8 27BD0018 */ addiu $sp, $sp, 0x18 - -glabel __osEepStatus -/* 0D4ECC 800D42CC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D4ED0 800D42D0 3C0E8019 */ lui $t6, %hi(D_80197660) # $t6, 0x8019 -/* 0D4ED4 800D42D4 25CE7660 */ addiu $t6, %lo(D_80197660) # addiu $t6, $t6, 0x7660 -/* 0D4ED8 800D42D8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D4EDC 800D42DC AFA40030 */ sw $a0, 0x30($sp) -/* 0D4EE0 800D42E0 AFA50034 */ sw $a1, 0x34($sp) -/* 0D4EE4 800D42E4 AFA0002C */ sw $zero, 0x2c($sp) -/* 0D4EE8 800D42E8 AFAE0024 */ sw $t6, 0x24($sp) -/* 0D4EEC 800D42EC AFA00028 */ sw $zero, 0x28($sp) -.L800D42F0: -/* 0D4EF0 800D42F0 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D4EF4 800D42F4 8FB90028 */ lw $t9, 0x28($sp) -/* 0D4EF8 800D42F8 3C018019 */ lui $at, %hi(D_80197660) # 0x8019 -/* 0D4EFC 800D42FC 000FC080 */ sll $t8, $t7, 2 -/* 0D4F00 800D4300 00380821 */ addu $at, $at, $t8 -/* 0D4F04 800D4304 AC207660 */ sw $zero, %lo(D_80197660)($at) # 0x7660($at) -/* 0D4F08 800D4308 27280001 */ addiu $t0, $t9, 1 -/* 0D4F0C 800D430C 29010010 */ slti $at, $t0, 0x10 -/* 0D4F10 800D4310 1420FFF7 */ bnez $at, .L800D42F0 -/* 0D4F14 800D4314 AFA80028 */ sw $t0, 0x28($sp) -/* 0D4F18 800D4318 3C0A8019 */ lui $t2, %hi(D_80197660) # $t2, 0x8019 -/* 0D4F1C 800D431C 24090001 */ li $t1, 1 -/* 0D4F20 800D4320 3C018019 */ lui $at, %hi(D_8019769C) # $at, 0x8019 -/* 0D4F24 800D4324 254A7660 */ addiu $t2, %lo(D_80197660) # addiu $t2, $t2, 0x7660 -/* 0D4F28 800D4328 AC29769C */ sw $t1, %lo(D_8019769C)($at) -/* 0D4F2C 800D432C AFAA0024 */ sw $t2, 0x24($sp) -/* 0D4F30 800D4330 AFA00028 */ sw $zero, 0x28($sp) -.L800D4334: -/* 0D4F34 800D4334 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D4F38 800D4338 A1600000 */ sb $zero, ($t3) -/* 0D4F3C 800D433C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D4F40 800D4340 8FAC0024 */ lw $t4, 0x24($sp) -/* 0D4F44 800D4344 25CF0001 */ addiu $t7, $t6, 1 -/* 0D4F48 800D4348 29E10004 */ slti $at, $t7, 4 -/* 0D4F4C 800D434C 258D0001 */ addiu $t5, $t4, 1 -/* 0D4F50 800D4350 AFAF0028 */ sw $t7, 0x28($sp) -/* 0D4F54 800D4354 1420FFF7 */ bnez $at, .L800D4334 -/* 0D4F58 800D4358 AFAD0024 */ sw $t5, 0x24($sp) -/* 0D4F5C 800D435C 241800FF */ li $t8, 255 -/* 0D4F60 800D4360 24190001 */ li $t9, 1 -/* 0D4F64 800D4364 24080003 */ li $t0, 3 -/* 0D4F68 800D4368 240900FF */ li $t1, 255 -/* 0D4F6C 800D436C 240A00FF */ li $t2, 255 -/* 0D4F70 800D4370 240B00FF */ li $t3, 255 -/* 0D4F74 800D4374 240C00FF */ li $t4, 255 -/* 0D4F78 800D4378 A3B8001C */ sb $t8, 0x1c($sp) -/* 0D4F7C 800D437C A3B9001D */ sb $t9, 0x1d($sp) -/* 0D4F80 800D4380 A3A8001E */ sb $t0, 0x1e($sp) -/* 0D4F84 800D4384 A3A0001F */ sb $zero, 0x1f($sp) -/* 0D4F88 800D4388 A3A90020 */ sb $t1, 0x20($sp) -/* 0D4F8C 800D438C A3AA0021 */ sb $t2, 0x21($sp) -/* 0D4F90 800D4390 A3AB0022 */ sb $t3, 0x22($sp) -/* 0D4F94 800D4394 A3AC0023 */ sb $t4, 0x23($sp) -/* 0D4F98 800D4398 27AE001C */ addiu $t6, $sp, 0x1c -/* 0D4F9C 800D439C 8DC10000 */ lw $at, ($t6) -/* 0D4FA0 800D43A0 8FAD0024 */ lw $t5, 0x24($sp) -/* 0D4FA4 800D43A4 240A00FE */ li $t2, 254 -/* 0D4FA8 800D43A8 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D4FAC 800D43AC A9A10000 */ swl $at, ($t5) -/* 0D4FB0 800D43B0 B9A10003 */ swr $at, 3($t5) -/* 0D4FB4 800D43B4 8DD90004 */ lw $t9, 4($t6) -/* 0D4FB8 800D43B8 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D4FBC 800D43BC 24040001 */ li $a0, 1 -/* 0D4FC0 800D43C0 A9B90004 */ swl $t9, 4($t5) -/* 0D4FC4 800D43C4 B9B90007 */ swr $t9, 7($t5) -/* 0D4FC8 800D43C8 8FA80024 */ lw $t0, 0x24($sp) -/* 0D4FCC 800D43CC 25090008 */ addiu $t1, $t0, 8 -/* 0D4FD0 800D43D0 AFA90024 */ sw $t1, 0x24($sp) -/* 0D4FD4 800D43D4 0C034EA8 */ jal __osSiRawStartDma -/* 0D4FD8 800D43D8 A12A0000 */ sb $t2, ($t1) -/* 0D4FDC 800D43DC AFA2002C */ sw $v0, 0x2c($sp) -/* 0D4FE0 800D43E0 8FA40030 */ lw $a0, 0x30($sp) -/* 0D4FE4 800D43E4 00002825 */ move $a1, $zero -/* 0D4FE8 800D43E8 0C0335D4 */ jal osRecvMesg -/* 0D4FEC 800D43EC 24060001 */ li $a2, 1 -/* 0D4FF0 800D43F0 240B0005 */ li $t3, 5 -/* 0D4FF4 800D43F4 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0D4FF8 800D43F8 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D4FFC 800D43FC A02B6540 */ sb $t3, %lo(_osLastSentSiCmd)($at) -/* 0D5000 800D4400 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D5004 800D4404 0C034EA8 */ jal __osSiRawStartDma -/* 0D5008 800D4408 00002025 */ move $a0, $zero -/* 0D500C 800D440C AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5010 800D4410 8FA40030 */ lw $a0, 0x30($sp) -/* 0D5014 800D4414 00002825 */ move $a1, $zero -/* 0D5018 800D4418 0C0335D4 */ jal osRecvMesg -/* 0D501C 800D441C 24060001 */ li $a2, 1 -/* 0D5020 800D4420 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D5024 800D4424 11800003 */ beqz $t4, .L800D4434 -/* 0D5028 800D4428 00000000 */ nop -/* 0D502C 800D442C 1000002C */ b .L800D44E0 -/* 0D5030 800D4430 01801025 */ move $v0, $t4 -.L800D4434: -/* 0D5034 800D4434 3C188019 */ lui $t8, %hi(D_80197660) # $t8, 0x8019 -/* 0D5038 800D4438 27187660 */ addiu $t8, %lo(D_80197660) # addiu $t8, $t8, 0x7660 -/* 0D503C 800D443C AFB80024 */ sw $t8, 0x24($sp) -/* 0D5040 800D4440 AFA00028 */ sw $zero, 0x28($sp) -.L800D4444: -/* 0D5044 800D4444 8FAF0024 */ lw $t7, 0x24($sp) -/* 0D5048 800D4448 A1E00000 */ sb $zero, ($t7) -/* 0D504C 800D444C 8FB90028 */ lw $t9, 0x28($sp) -/* 0D5050 800D4450 8FAD0024 */ lw $t5, 0x24($sp) -/* 0D5054 800D4454 27280001 */ addiu $t0, $t9, 1 -/* 0D5058 800D4458 29010004 */ slti $at, $t0, 4 -/* 0D505C 800D445C 25AE0001 */ addiu $t6, $t5, 1 -/* 0D5060 800D4460 AFA80028 */ sw $t0, 0x28($sp) -/* 0D5064 800D4464 1420FFF7 */ bnez $at, .L800D4444 -/* 0D5068 800D4468 AFAE0024 */ sw $t6, 0x24($sp) -/* 0D506C 800D446C 8FA90024 */ lw $t1, 0x24($sp) -/* 0D5070 800D4470 27AA001C */ addiu $t2, $sp, 0x1c -/* 0D5074 800D4474 89210000 */ lwl $at, ($t1) -/* 0D5078 800D4478 99210003 */ lwr $at, 3($t1) -/* 0D507C 800D447C AD410000 */ sw $at, ($t2) -/* 0D5080 800D4480 892C0004 */ lwl $t4, 4($t1) -/* 0D5084 800D4484 992C0007 */ lwr $t4, 7($t1) -/* 0D5088 800D4488 AD4C0004 */ sw $t4, 4($t2) -/* 0D508C 800D448C 93B8001E */ lbu $t8, 0x1e($sp) -/* 0D5090 800D4490 8FAE0034 */ lw $t6, 0x34($sp) -/* 0D5094 800D4494 330F00C0 */ andi $t7, $t8, 0xc0 -/* 0D5098 800D4498 000F6903 */ sra $t5, $t7, 4 -/* 0D509C 800D449C A1CD0003 */ sb $t5, 3($t6) -/* 0D50A0 800D44A0 93B90021 */ lbu $t9, 0x21($sp) -/* 0D50A4 800D44A4 93AB0020 */ lbu $t3, 0x20($sp) -/* 0D50A8 800D44A8 8FA90034 */ lw $t1, 0x34($sp) -/* 0D50AC 800D44AC 00194200 */ sll $t0, $t9, 8 -/* 0D50B0 800D44B0 010B5025 */ or $t2, $t0, $t3 -/* 0D50B4 800D44B4 A52A0000 */ sh $t2, ($t1) -/* 0D50B8 800D44B8 8FB80034 */ lw $t8, 0x34($sp) -/* 0D50BC 800D44BC 93AC0022 */ lbu $t4, 0x22($sp) -/* 0D50C0 800D44C0 A30C0002 */ sb $t4, 2($t8) -/* 0D50C4 800D44C4 8FAF0034 */ lw $t7, 0x34($sp) -/* 0D50C8 800D44C8 91ED0003 */ lbu $t5, 3($t7) -/* 0D50CC 800D44CC 11A00003 */ beqz $t5, .L800D44DC -/* 0D50D0 800D44D0 00000000 */ nop -/* 0D50D4 800D44D4 10000002 */ b .L800D44E0 -/* 0D50D8 800D44D8 01A01025 */ move $v0, $t5 -.L800D44DC: -/* 0D50DC 800D44DC 00001025 */ move $v0, $zero -.L800D44E0: -/* 0D50E0 800D44E0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D50E4 800D44E4 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0D50E8 800D44E8 03E00008 */ jr $ra -/* 0D50EC 800D44EC 00000000 */ nop - -glabel __osSumcalc -/* 0D50F0 800D44F0 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D50F4 800D44F4 AFA00008 */ sw $zero, 8($sp) -/* 0D50F8 800D44F8 AFA40004 */ sw $a0, 4($sp) -/* 0D50FC 800D44FC 18A00010 */ blez $a1, .L800D4540 -/* 0D5100 800D4500 AFA0000C */ sw $zero, 0xc($sp) -.L800D4504: -/* 0D5104 800D4504 8FAF0004 */ lw $t7, 4($sp) -/* 0D5108 800D4508 8FAE0008 */ lw $t6, 8($sp) -/* 0D510C 800D450C 8FAB000C */ lw $t3, 0xc($sp) -/* 0D5110 800D4510 91F80000 */ lbu $t8, ($t7) -/* 0D5114 800D4514 25E80001 */ addiu $t0, $t7, 1 -/* 0D5118 800D4518 256C0001 */ addiu $t4, $t3, 1 -/* 0D511C 800D451C 01D8C821 */ addu $t9, $t6, $t8 -/* 0D5120 800D4520 AFB90008 */ sw $t9, 8($sp) -/* 0D5124 800D4524 8FA90008 */ lw $t1, 8($sp) -/* 0D5128 800D4528 0185082A */ slt $at, $t4, $a1 -/* 0D512C 800D452C AFAC000C */ sw $t4, 0xc($sp) -/* 0D5130 800D4530 312AFFFF */ andi $t2, $t1, 0xffff -/* 0D5134 800D4534 AFA80004 */ sw $t0, 4($sp) -/* 0D5138 800D4538 1420FFF2 */ bnez $at, .L800D4504 -/* 0D513C 800D453C AFAA0008 */ sw $t2, 8($sp) -.L800D4540: -/* 0D5140 800D4540 97A2000A */ lhu $v0, 0xa($sp) -/* 0D5144 800D4544 03E00008 */ jr $ra -/* 0D5148 800D4548 27BD0010 */ addiu $sp, $sp, 0x10 - -glabel __osIdCheckSum -/* 0D514C 800D454C 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D5150 800D4550 A7A00006 */ sh $zero, 6($sp) -/* 0D5154 800D4554 A4C00000 */ sh $zero, ($a2) -/* 0D5158 800D4558 94CE0000 */ lhu $t6, ($a2) -/* 0D515C 800D455C A4AE0000 */ sh $t6, ($a1) -/* 0D5160 800D4560 AFA00000 */ sw $zero, ($sp) -.L800D4564: -/* 0D5164 800D4564 8FAF0000 */ lw $t7, ($sp) -/* 0D5168 800D4568 008FC021 */ addu $t8, $a0, $t7 -/* 0D516C 800D456C 97190000 */ lhu $t9, ($t8) -/* 0D5170 800D4570 A7B90006 */ sh $t9, 6($sp) -/* 0D5174 800D4574 94A80000 */ lhu $t0, ($a1) -/* 0D5178 800D4578 01194821 */ addu $t1, $t0, $t9 -/* 0D517C 800D457C A4A90000 */ sh $t1, ($a1) -/* 0D5180 800D4580 97AB0006 */ lhu $t3, 6($sp) -/* 0D5184 800D4584 94CA0000 */ lhu $t2, ($a2) -/* 0D5188 800D4588 01606027 */ not $t4, $t3 -/* 0D518C 800D458C 014C6821 */ addu $t5, $t2, $t4 -/* 0D5190 800D4590 A4CD0000 */ sh $t5, ($a2) -/* 0D5194 800D4594 8FAE0000 */ lw $t6, ($sp) -/* 0D5198 800D4598 25CF0002 */ addiu $t7, $t6, 2 -/* 0D519C 800D459C 2DE1001C */ sltiu $at, $t7, 0x1c -/* 0D51A0 800D45A0 1420FFF0 */ bnez $at, .L800D4564 -/* 0D51A4 800D45A4 AFAF0000 */ sw $t7, ($sp) -/* 0D51A8 800D45A8 00001025 */ move $v0, $zero -/* 0D51AC 800D45AC 03E00008 */ jr $ra -/* 0D51B0 800D45B0 27BD0008 */ addiu $sp, $sp, 8 - -glabel __osRepairPackId -/* 0D51B4 800D45B4 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0D51B8 800D45B8 AFA40078 */ sw $a0, 0x78($sp) -/* 0D51BC 800D45BC 8FAE0078 */ lw $t6, 0x78($sp) -/* 0D51C0 800D45C0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D51C4 800D45C4 AFA5007C */ sw $a1, 0x7c($sp) -/* 0D51C8 800D45C8 AFA60080 */ sw $a2, 0x80($sp) -/* 0D51CC 800D45CC AFA00074 */ sw $zero, 0x74($sp) -/* 0D51D0 800D45D0 A3A00033 */ sb $zero, 0x33($sp) -/* 0D51D4 800D45D4 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D51D8 800D45D8 11E0000A */ beqz $t7, .L800D4604 -/* 0D51DC 800D45DC 00000000 */ nop -/* 0D51E0 800D45E0 A1C00065 */ sb $zero, 0x65($t6) -/* 0D51E4 800D45E4 0C035477 */ jal __osPfsSelectBank -/* 0D51E8 800D45E8 8FA40078 */ lw $a0, 0x78($sp) -/* 0D51EC 800D45EC AFA20074 */ sw $v0, 0x74($sp) -/* 0D51F0 800D45F0 8FB80074 */ lw $t8, 0x74($sp) -/* 0D51F4 800D45F4 13000003 */ beqz $t8, .L800D4604 -/* 0D51F8 800D45F8 00000000 */ nop -/* 0D51FC 800D45FC 100000EF */ b .L800D49BC -/* 0D5200 800D4600 03001025 */ move $v0, $t8 -.L800D4604: -/* 0D5204 800D4604 8FA80080 */ lw $t0, 0x80($sp) -/* 0D5208 800D4608 2419FFFF */ li $t9, -1 -/* 0D520C 800D460C 0C034468 */ jal osGetCount -/* 0D5210 800D4610 AD190000 */ sw $t9, ($t0) -/* 0D5214 800D4614 8FA90080 */ lw $t1, 0x80($sp) -/* 0D5218 800D4618 AD220004 */ sw $v0, 4($t1) -/* 0D521C 800D461C 8FAA007C */ lw $t2, 0x7c($sp) -/* 0D5220 800D4620 8FAB0080 */ lw $t3, 0x80($sp) -/* 0D5224 800D4624 8D4C0008 */ lw $t4, 8($t2) -/* 0D5228 800D4628 8D4D000C */ lw $t5, 0xc($t2) -/* 0D522C 800D462C AD6C0008 */ sw $t4, 8($t3) -/* 0D5230 800D4630 AD6D000C */ sw $t5, 0xc($t3) -/* 0D5234 800D4634 8FAF007C */ lw $t7, 0x7c($sp) -/* 0D5238 800D4638 8FB80080 */ lw $t8, 0x80($sp) -/* 0D523C 800D463C 8DEE0010 */ lw $t6, 0x10($t7) -/* 0D5240 800D4640 8DEF0014 */ lw $t7, 0x14($t7) -/* 0D5244 800D4644 AF0E0010 */ sw $t6, 0x10($t8) -/* 0D5248 800D4648 AF0F0014 */ sw $t7, 0x14($t8) -/* 0D524C 800D464C AFA00028 */ sw $zero, 0x28($sp) -.L800D4650: -/* 0D5250 800D4650 8FB90028 */ lw $t9, 0x28($sp) -/* 0D5254 800D4654 8FA80078 */ lw $t0, 0x78($sp) -/* 0D5258 800D4658 A1190065 */ sb $t9, 0x65($t0) -/* 0D525C 800D465C 0C035477 */ jal __osPfsSelectBank -/* 0D5260 800D4660 8FA40078 */ lw $a0, 0x78($sp) -/* 0D5264 800D4664 AFA20074 */ sw $v0, 0x74($sp) -/* 0D5268 800D4668 8FA90074 */ lw $t1, 0x74($sp) -/* 0D526C 800D466C 11200003 */ beqz $t1, .L800D467C -/* 0D5270 800D4670 00000000 */ nop -/* 0D5274 800D4674 100000D1 */ b .L800D49BC -/* 0D5278 800D4678 01201025 */ move $v0, $t1 -.L800D467C: -/* 0D527C 800D467C 8FAA0078 */ lw $t2, 0x78($sp) -/* 0D5280 800D4680 00003025 */ move $a2, $zero -/* 0D5284 800D4684 27A70054 */ addiu $a3, $sp, 0x54 -/* 0D5288 800D4688 8D440004 */ lw $a0, 4($t2) -/* 0D528C 800D468C 0C03572C */ jal __osContRamRead -/* 0D5290 800D4690 8D450008 */ lw $a1, 8($t2) -/* 0D5294 800D4694 AFA20074 */ sw $v0, 0x74($sp) -/* 0D5298 800D4698 8FAC0074 */ lw $t4, 0x74($sp) -/* 0D529C 800D469C 11800003 */ beqz $t4, .L800D46AC -/* 0D52A0 800D46A0 00000000 */ nop -/* 0D52A4 800D46A4 100000C5 */ b .L800D49BC -/* 0D52A8 800D46A8 01801025 */ move $v0, $t4 -.L800D46AC: -/* 0D52AC 800D46AC 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D52B0 800D46B0 27AE0054 */ addiu $t6, $sp, 0x54 -/* 0D52B4 800D46B4 240F0001 */ li $t7, 1 -/* 0D52B8 800D46B8 35AB0080 */ ori $t3, $t5, 0x80 -/* 0D52BC 800D46BC A1CB0000 */ sb $t3, ($t6) -/* 0D52C0 800D46C0 AFAF002C */ sw $t7, 0x2c($sp) -.L800D46C4: -/* 0D52C4 800D46C4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D52C8 800D46C8 27B90054 */ addiu $t9, $sp, 0x54 -/* 0D52CC 800D46CC 03194021 */ addu $t0, $t8, $t9 -/* 0D52D0 800D46D0 91090000 */ lbu $t1, ($t0) -/* 0D52D4 800D46D4 01205027 */ not $t2, $t1 -/* 0D52D8 800D46D8 A10A0000 */ sb $t2, ($t0) -/* 0D52DC 800D46DC 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D52E0 800D46E0 258D0001 */ addiu $t5, $t4, 1 -/* 0D52E4 800D46E4 29A10020 */ slti $at, $t5, 0x20 -/* 0D52E8 800D46E8 1420FFF6 */ bnez $at, .L800D46C4 -/* 0D52EC 800D46EC AFAD002C */ sw $t5, 0x2c($sp) -/* 0D52F0 800D46F0 8FAB0078 */ lw $t3, 0x78($sp) -/* 0D52F4 800D46F4 00003025 */ move $a2, $zero -/* 0D52F8 800D46F8 27A70054 */ addiu $a3, $sp, 0x54 -/* 0D52FC 800D46FC 8D640004 */ lw $a0, 4($t3) -/* 0D5300 800D4700 8D650008 */ lw $a1, 8($t3) -/* 0D5304 800D4704 0C035CBC */ jal __osContRamWrite -/* 0D5308 800D4708 AFA00010 */ sw $zero, 0x10($sp) -/* 0D530C 800D470C AFA20074 */ sw $v0, 0x74($sp) -/* 0D5310 800D4710 8FAE0074 */ lw $t6, 0x74($sp) -/* 0D5314 800D4714 11C00003 */ beqz $t6, .L800D4724 -/* 0D5318 800D4718 00000000 */ nop -/* 0D531C 800D471C 100000A7 */ b .L800D49BC -/* 0D5320 800D4720 01C01025 */ move $v0, $t6 -.L800D4724: -/* 0D5324 800D4724 8FAF0078 */ lw $t7, 0x78($sp) -/* 0D5328 800D4728 00003025 */ move $a2, $zero -/* 0D532C 800D472C 27A70034 */ addiu $a3, $sp, 0x34 -/* 0D5330 800D4730 8DE40004 */ lw $a0, 4($t7) -/* 0D5334 800D4734 0C03572C */ jal __osContRamRead -/* 0D5338 800D4738 8DE50008 */ lw $a1, 8($t7) -/* 0D533C 800D473C AFA20074 */ sw $v0, 0x74($sp) -/* 0D5340 800D4740 8FB80074 */ lw $t8, 0x74($sp) -/* 0D5344 800D4744 13000003 */ beqz $t8, .L800D4754 -/* 0D5348 800D4748 00000000 */ nop -/* 0D534C 800D474C 1000009B */ b .L800D49BC -/* 0D5350 800D4750 03001025 */ move $v0, $t8 -.L800D4754: -/* 0D5354 800D4754 AFA0002C */ sw $zero, 0x2c($sp) -.L800D4758: -/* 0D5358 800D4758 8FB9002C */ lw $t9, 0x2c($sp) -/* 0D535C 800D475C 03B94821 */ addu $t1, $sp, $t9 -/* 0D5360 800D4760 03B95021 */ addu $t2, $sp, $t9 -/* 0D5364 800D4764 914A0034 */ lbu $t2, 0x34($t2) -/* 0D5368 800D4768 91290054 */ lbu $t1, 0x54($t1) -/* 0D536C 800D476C 152A0006 */ bne $t1, $t2, .L800D4788 -/* 0D5370 800D4770 00000000 */ nop -/* 0D5374 800D4774 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D5378 800D4778 250C0001 */ addiu $t4, $t0, 1 -/* 0D537C 800D477C 29810020 */ slti $at, $t4, 0x20 -/* 0D5380 800D4780 1420FFF5 */ bnez $at, .L800D4758 -/* 0D5384 800D4784 AFAC002C */ sw $t4, 0x2c($sp) -.L800D4788: -/* 0D5388 800D4788 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D538C 800D478C 24010020 */ li $at, 32 -/* 0D5390 800D4790 15A10026 */ bne $t5, $at, .L800D482C -/* 0D5394 800D4794 00000000 */ nop -/* 0D5398 800D4798 8FAB0028 */ lw $t3, 0x28($sp) -/* 0D539C 800D479C 1960001C */ blez $t3, .L800D4810 -/* 0D53A0 800D47A0 00000000 */ nop -/* 0D53A4 800D47A4 8FAE0078 */ lw $t6, 0x78($sp) -/* 0D53A8 800D47A8 A1C00065 */ sb $zero, 0x65($t6) -/* 0D53AC 800D47AC 0C035477 */ jal __osPfsSelectBank -/* 0D53B0 800D47B0 8FA40078 */ lw $a0, 0x78($sp) -/* 0D53B4 800D47B4 AFA20074 */ sw $v0, 0x74($sp) -/* 0D53B8 800D47B8 8FAF0074 */ lw $t7, 0x74($sp) -/* 0D53BC 800D47BC 11E00003 */ beqz $t7, .L800D47CC -/* 0D53C0 800D47C0 00000000 */ nop -/* 0D53C4 800D47C4 1000007D */ b .L800D49BC -/* 0D53C8 800D47C8 01E01025 */ move $v0, $t7 -.L800D47CC: -/* 0D53CC 800D47CC 8FB80078 */ lw $t8, 0x78($sp) -/* 0D53D0 800D47D0 00003025 */ move $a2, $zero -/* 0D53D4 800D47D4 27A70054 */ addiu $a3, $sp, 0x54 -/* 0D53D8 800D47D8 8F040004 */ lw $a0, 4($t8) -/* 0D53DC 800D47DC 0C03572C */ jal __osContRamRead -/* 0D53E0 800D47E0 8F050008 */ lw $a1, 8($t8) -/* 0D53E4 800D47E4 AFA20074 */ sw $v0, 0x74($sp) -/* 0D53E8 800D47E8 8FB90074 */ lw $t9, 0x74($sp) -/* 0D53EC 800D47EC 13200003 */ beqz $t9, .L800D47FC -/* 0D53F0 800D47F0 00000000 */ nop -/* 0D53F4 800D47F4 10000071 */ b .L800D49BC -/* 0D53F8 800D47F8 03201025 */ move $v0, $t9 -.L800D47FC: -/* 0D53FC 800D47FC 27A90054 */ addiu $t1, $sp, 0x54 -/* 0D5400 800D4800 912A0000 */ lbu $t2, ($t1) -/* 0D5404 800D4804 24010080 */ li $at, 128 -/* 0D5408 800D4808 15410008 */ bne $t2, $at, .L800D482C -/* 0D540C 800D480C 00000000 */ nop -.L800D4810: -/* 0D5410 800D4810 8FA80028 */ lw $t0, 0x28($sp) -/* 0D5414 800D4814 250C0001 */ addiu $t4, $t0, 1 -/* 0D5418 800D4818 AFAC0028 */ sw $t4, 0x28($sp) -/* 0D541C 800D481C 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D5420 800D4820 29A1003E */ slti $at, $t5, 0x3e -/* 0D5424 800D4824 1420FF8A */ bnez $at, .L800D4650 -/* 0D5428 800D4828 00000000 */ nop -.L800D482C: -/* 0D542C 800D482C 8FAB0078 */ lw $t3, 0x78($sp) -/* 0D5430 800D4830 A1600065 */ sb $zero, 0x65($t3) -/* 0D5434 800D4834 0C035477 */ jal __osPfsSelectBank -/* 0D5438 800D4838 8FA40078 */ lw $a0, 0x78($sp) -/* 0D543C 800D483C AFA20074 */ sw $v0, 0x74($sp) -/* 0D5440 800D4840 8FAE0074 */ lw $t6, 0x74($sp) -/* 0D5444 800D4844 11C00003 */ beqz $t6, .L800D4854 -/* 0D5448 800D4848 00000000 */ nop -/* 0D544C 800D484C 1000005B */ b .L800D49BC -/* 0D5450 800D4850 01C01025 */ move $v0, $t6 -.L800D4854: -/* 0D5454 800D4854 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D5458 800D4858 19E00004 */ blez $t7, .L800D486C -/* 0D545C 800D485C 00000000 */ nop -/* 0D5460 800D4860 24180001 */ li $t8, 1 -/* 0D5464 800D4864 10000002 */ b .L800D4870 -/* 0D5468 800D4868 A3B80033 */ sb $t8, 0x33($sp) -.L800D486C: -/* 0D546C 800D486C A3A00033 */ sb $zero, 0x33($sp) -.L800D4870: -/* 0D5470 800D4870 8FB9007C */ lw $t9, 0x7c($sp) -/* 0D5474 800D4874 93A80033 */ lbu $t0, 0x33($sp) -/* 0D5478 800D4878 8FAD0080 */ lw $t5, 0x80($sp) -/* 0D547C 800D487C 97290018 */ lhu $t1, 0x18($t9) -/* 0D5480 800D4880 312AFFFE */ andi $t2, $t1, 0xfffe -/* 0D5484 800D4884 01486025 */ or $t4, $t2, $t0 -/* 0D5488 800D4888 A5AC0018 */ sh $t4, 0x18($t5) -/* 0D548C 800D488C 8FAE0080 */ lw $t6, 0x80($sp) -/* 0D5490 800D4890 8FAB0028 */ lw $t3, 0x28($sp) -/* 0D5494 800D4894 A1CB001A */ sb $t3, 0x1a($t6) -/* 0D5498 800D4898 8FAF007C */ lw $t7, 0x7c($sp) -/* 0D549C 800D489C 8FB90080 */ lw $t9, 0x80($sp) -/* 0D54A0 800D48A0 91F8001B */ lbu $t8, 0x1b($t7) -/* 0D54A4 800D48A4 A338001B */ sb $t8, 0x1b($t9) -/* 0D54A8 800D48A8 8FA90080 */ lw $t1, 0x80($sp) -/* 0D54AC 800D48AC 01202025 */ move $a0, $t1 -/* 0D54B0 800D48B0 2525001C */ addiu $a1, $t1, 0x1c -/* 0D54B4 800D48B4 0C035153 */ jal __osIdCheckSum -/* 0D54B8 800D48B8 2526001E */ addiu $a2, $t1, 0x1e -/* 0D54BC 800D48BC 240A0001 */ li $t2, 1 -/* 0D54C0 800D48C0 27A80020 */ addiu $t0, $sp, 0x20 -/* 0D54C4 800D48C4 A50A0000 */ sh $t2, ($t0) -/* 0D54C8 800D48C8 240C0003 */ li $t4, 3 -/* 0D54CC 800D48CC 27AD0020 */ addiu $t5, $sp, 0x20 -/* 0D54D0 800D48D0 A5AC0002 */ sh $t4, 2($t5) -/* 0D54D4 800D48D4 240B0004 */ li $t3, 4 -/* 0D54D8 800D48D8 27AE0020 */ addiu $t6, $sp, 0x20 -/* 0D54DC 800D48DC A5CB0004 */ sh $t3, 4($t6) -/* 0D54E0 800D48E0 240F0006 */ li $t7, 6 -/* 0D54E4 800D48E4 27B80020 */ addiu $t8, $sp, 0x20 -/* 0D54E8 800D48E8 A70F0006 */ sh $t7, 6($t8) -/* 0D54EC 800D48EC AFA0002C */ sw $zero, 0x2c($sp) -.L800D48F0: -/* 0D54F0 800D48F0 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D54F4 800D48F4 8FB90078 */ lw $t9, 0x78($sp) -/* 0D54F8 800D48F8 24080001 */ li $t0, 1 -/* 0D54FC 800D48FC 00095040 */ sll $t2, $t1, 1 -/* 0D5500 800D4900 03AA3021 */ addu $a2, $sp, $t2 -/* 0D5504 800D4904 94C60020 */ lhu $a2, 0x20($a2) -/* 0D5508 800D4908 8F240004 */ lw $a0, 4($t9) -/* 0D550C 800D490C 8F250008 */ lw $a1, 8($t9) -/* 0D5510 800D4910 AFA80010 */ sw $t0, 0x10($sp) -/* 0D5514 800D4914 0C035CBC */ jal __osContRamWrite -/* 0D5518 800D4918 8FA70080 */ lw $a3, 0x80($sp) -/* 0D551C 800D491C AFA20074 */ sw $v0, 0x74($sp) -/* 0D5520 800D4920 8FAC0074 */ lw $t4, 0x74($sp) -/* 0D5524 800D4924 11800003 */ beqz $t4, .L800D4934 -/* 0D5528 800D4928 00000000 */ nop -/* 0D552C 800D492C 10000023 */ b .L800D49BC -/* 0D5530 800D4930 01801025 */ move $v0, $t4 -.L800D4934: -/* 0D5534 800D4934 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D5538 800D4938 25AB0001 */ addiu $t3, $t5, 1 -/* 0D553C 800D493C 29610004 */ slti $at, $t3, 4 -/* 0D5540 800D4940 1420FFEB */ bnez $at, .L800D48F0 -/* 0D5544 800D4944 AFAB002C */ sw $t3, 0x2c($sp) -/* 0D5548 800D4948 8FAE0078 */ lw $t6, 0x78($sp) -/* 0D554C 800D494C 24060001 */ li $a2, 1 -/* 0D5550 800D4950 27A70054 */ addiu $a3, $sp, 0x54 -/* 0D5554 800D4954 8DC40004 */ lw $a0, 4($t6) -/* 0D5558 800D4958 0C03572C */ jal __osContRamRead -/* 0D555C 800D495C 8DC50008 */ lw $a1, 8($t6) -/* 0D5560 800D4960 AFA20074 */ sw $v0, 0x74($sp) -/* 0D5564 800D4964 8FAF0074 */ lw $t7, 0x74($sp) -/* 0D5568 800D4968 11E00003 */ beqz $t7, .L800D4978 -/* 0D556C 800D496C 00000000 */ nop -/* 0D5570 800D4970 10000012 */ b .L800D49BC -/* 0D5574 800D4974 01E01025 */ move $v0, $t7 -.L800D4978: -/* 0D5578 800D4978 AFA0002C */ sw $zero, 0x2c($sp) -.L800D497C: -/* 0D557C 800D497C 8FB9002C */ lw $t9, 0x2c($sp) -/* 0D5580 800D4980 8FB80080 */ lw $t8, 0x80($sp) -/* 0D5584 800D4984 03B94021 */ addu $t0, $sp, $t9 -/* 0D5588 800D4988 03194821 */ addu $t1, $t8, $t9 -/* 0D558C 800D498C 912A0000 */ lbu $t2, ($t1) -/* 0D5590 800D4990 91080054 */ lbu $t0, 0x54($t0) -/* 0D5594 800D4994 11480003 */ beq $t2, $t0, .L800D49A4 -/* 0D5598 800D4998 00000000 */ nop -/* 0D559C 800D499C 10000007 */ b .L800D49BC -/* 0D55A0 800D49A0 2402000A */ li $v0, 10 -.L800D49A4: -/* 0D55A4 800D49A4 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D55A8 800D49A8 258D0001 */ addiu $t5, $t4, 1 -/* 0D55AC 800D49AC 29A10020 */ slti $at, $t5, 0x20 -/* 0D55B0 800D49B0 1420FFF2 */ bnez $at, .L800D497C -/* 0D55B4 800D49B4 AFAD002C */ sw $t5, 0x2c($sp) -/* 0D55B8 800D49B8 00001025 */ move $v0, $zero -.L800D49BC: -/* 0D55BC 800D49BC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D55C0 800D49C0 27BD0078 */ addiu $sp, $sp, 0x78 -/* 0D55C4 800D49C4 03E00008 */ jr $ra -/* 0D55C8 800D49C8 00000000 */ nop - -glabel __osCheckPackId -/* 0D55CC 800D49CC 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D55D0 800D49D0 AFA40038 */ sw $a0, 0x38($sp) -/* 0D55D4 800D49D4 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D55D8 800D49D8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D55DC 800D49DC AFA5003C */ sw $a1, 0x3c($sp) -/* 0D55E0 800D49E0 AFA0002C */ sw $zero, 0x2c($sp) -/* 0D55E4 800D49E4 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D55E8 800D49E8 11E0000A */ beqz $t7, .L800D4A14 -/* 0D55EC 800D49EC 00000000 */ nop -/* 0D55F0 800D49F0 A1C00065 */ sb $zero, 0x65($t6) -/* 0D55F4 800D49F4 0C035477 */ jal __osPfsSelectBank -/* 0D55F8 800D49F8 8FA40038 */ lw $a0, 0x38($sp) -/* 0D55FC 800D49FC AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5600 800D4A00 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D5604 800D4A04 13000003 */ beqz $t8, .L800D4A14 -/* 0D5608 800D4A08 00000000 */ nop -/* 0D560C 800D4A0C 10000051 */ b .L800D4B54 -/* 0D5610 800D4A10 03001025 */ move $v0, $t8 -.L800D4A14: -/* 0D5614 800D4A14 24190001 */ li $t9, 1 -/* 0D5618 800D4A18 27A80030 */ addiu $t0, $sp, 0x30 -/* 0D561C 800D4A1C A5190000 */ sh $t9, ($t0) -/* 0D5620 800D4A20 24090003 */ li $t1, 3 -/* 0D5624 800D4A24 27AA0030 */ addiu $t2, $sp, 0x30 -/* 0D5628 800D4A28 A5490002 */ sh $t1, 2($t2) -/* 0D562C 800D4A2C 240B0004 */ li $t3, 4 -/* 0D5630 800D4A30 27AC0030 */ addiu $t4, $sp, 0x30 -/* 0D5634 800D4A34 A58B0004 */ sh $t3, 4($t4) -/* 0D5638 800D4A38 240D0006 */ li $t5, 6 -/* 0D563C 800D4A3C 27AF0030 */ addiu $t7, $sp, 0x30 -/* 0D5640 800D4A40 A5ED0006 */ sh $t5, 6($t7) -/* 0D5644 800D4A44 240E0001 */ li $t6, 1 -/* 0D5648 800D4A48 AFAE0024 */ sw $t6, 0x24($sp) -.L800D4A4C: -/* 0D564C 800D4A4C 8FB90024 */ lw $t9, 0x24($sp) -/* 0D5650 800D4A50 8FB80038 */ lw $t8, 0x38($sp) -/* 0D5654 800D4A54 8FA7003C */ lw $a3, 0x3c($sp) -/* 0D5658 800D4A58 00194040 */ sll $t0, $t9, 1 -/* 0D565C 800D4A5C 03A83021 */ addu $a2, $sp, $t0 -/* 0D5660 800D4A60 94C60030 */ lhu $a2, 0x30($a2) -/* 0D5664 800D4A64 8F040004 */ lw $a0, 4($t8) -/* 0D5668 800D4A68 0C03572C */ jal __osContRamRead -/* 0D566C 800D4A6C 8F050008 */ lw $a1, 8($t8) -/* 0D5670 800D4A70 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5674 800D4A74 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D5678 800D4A78 11200003 */ beqz $t1, .L800D4A88 -/* 0D567C 800D4A7C 00000000 */ nop -/* 0D5680 800D4A80 10000034 */ b .L800D4B54 -/* 0D5684 800D4A84 01201025 */ move $v0, $t1 -.L800D4A88: -/* 0D5688 800D4A88 8FA4003C */ lw $a0, 0x3c($sp) -/* 0D568C 800D4A8C 27A5002A */ addiu $a1, $sp, 0x2a -/* 0D5690 800D4A90 0C035153 */ jal __osIdCheckSum -/* 0D5694 800D4A94 27A60028 */ addiu $a2, $sp, 0x28 -/* 0D5698 800D4A98 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D569C 800D4A9C 97AC002A */ lhu $t4, 0x2a($sp) -/* 0D56A0 800D4AA0 954B001C */ lhu $t3, 0x1c($t2) -/* 0D56A4 800D4AA4 156C0005 */ bne $t3, $t4, .L800D4ABC -/* 0D56A8 800D4AA8 00000000 */ nop -/* 0D56AC 800D4AAC 954D001E */ lhu $t5, 0x1e($t2) -/* 0D56B0 800D4AB0 97AF0028 */ lhu $t7, 0x28($sp) -/* 0D56B4 800D4AB4 11AF0006 */ beq $t5, $t7, .L800D4AD0 -/* 0D56B8 800D4AB8 00000000 */ nop -.L800D4ABC: -/* 0D56BC 800D4ABC 8FAE0024 */ lw $t6, 0x24($sp) -/* 0D56C0 800D4AC0 25D80001 */ addiu $t8, $t6, 1 -/* 0D56C4 800D4AC4 2B010004 */ slti $at, $t8, 4 -/* 0D56C8 800D4AC8 1420FFE0 */ bnez $at, .L800D4A4C -/* 0D56CC 800D4ACC AFB80024 */ sw $t8, 0x24($sp) -.L800D4AD0: -/* 0D56D0 800D4AD0 8FB90024 */ lw $t9, 0x24($sp) -/* 0D56D4 800D4AD4 24010004 */ li $at, 4 -/* 0D56D8 800D4AD8 17210003 */ bne $t9, $at, .L800D4AE8 -/* 0D56DC 800D4ADC 00000000 */ nop -/* 0D56E0 800D4AE0 1000001C */ b .L800D4B54 -/* 0D56E4 800D4AE4 2402000A */ li $v0, 10 -.L800D4AE8: -/* 0D56E8 800D4AE8 AFA00020 */ sw $zero, 0x20($sp) -.L800D4AEC: -/* 0D56EC 800D4AEC 8FA80020 */ lw $t0, 0x20($sp) -/* 0D56F0 800D4AF0 8FA90024 */ lw $t1, 0x24($sp) -/* 0D56F4 800D4AF4 11090011 */ beq $t0, $t1, .L800D4B3C -/* 0D56F8 800D4AF8 00000000 */ nop -/* 0D56FC 800D4AFC 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D5700 800D4B00 00086040 */ sll $t4, $t0, 1 -/* 0D5704 800D4B04 03AC3021 */ addu $a2, $sp, $t4 -/* 0D5708 800D4B08 94C60030 */ lhu $a2, 0x30($a2) -/* 0D570C 800D4B0C 240A0001 */ li $t2, 1 -/* 0D5710 800D4B10 8D640004 */ lw $a0, 4($t3) -/* 0D5714 800D4B14 8D650008 */ lw $a1, 8($t3) -/* 0D5718 800D4B18 AFAA0010 */ sw $t2, 0x10($sp) -/* 0D571C 800D4B1C 0C035CBC */ jal __osContRamWrite -/* 0D5720 800D4B20 8FA7003C */ lw $a3, 0x3c($sp) -/* 0D5724 800D4B24 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5728 800D4B28 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D572C 800D4B2C 11A00003 */ beqz $t5, .L800D4B3C -/* 0D5730 800D4B30 00000000 */ nop -/* 0D5734 800D4B34 10000007 */ b .L800D4B54 -/* 0D5738 800D4B38 01A01025 */ move $v0, $t5 -.L800D4B3C: -/* 0D573C 800D4B3C 8FAF0020 */ lw $t7, 0x20($sp) -/* 0D5740 800D4B40 25EE0001 */ addiu $t6, $t7, 1 -/* 0D5744 800D4B44 29C10004 */ slti $at, $t6, 4 -/* 0D5748 800D4B48 1420FFE8 */ bnez $at, .L800D4AEC -/* 0D574C 800D4B4C AFAE0020 */ sw $t6, 0x20($sp) -/* 0D5750 800D4B50 00001025 */ move $v0, $zero -.L800D4B54: -/* 0D5754 800D4B54 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D5758 800D4B58 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0D575C 800D4B5C 03E00008 */ jr $ra -/* 0D5760 800D4B60 00000000 */ nop - -glabel __osGetId -/* 0D5764 800D4B64 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0D5768 800D4B68 AFA40068 */ sw $a0, 0x68($sp) -/* 0D576C 800D4B6C 8FAE0068 */ lw $t6, 0x68($sp) -/* 0D5770 800D4B70 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D5774 800D4B74 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D5778 800D4B78 11E0000A */ beqz $t7, .L800D4BA4 -/* 0D577C 800D4B7C 00000000 */ nop -/* 0D5780 800D4B80 A1C00065 */ sb $zero, 0x65($t6) -/* 0D5784 800D4B84 0C035477 */ jal __osPfsSelectBank -/* 0D5788 800D4B88 8FA40068 */ lw $a0, 0x68($sp) -/* 0D578C 800D4B8C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D5790 800D4B90 8FB8001C */ lw $t8, 0x1c($sp) -/* 0D5794 800D4B94 13000003 */ beqz $t8, .L800D4BA4 -/* 0D5798 800D4B98 00000000 */ nop -/* 0D579C 800D4B9C 10000084 */ b .L800D4DB0 -/* 0D57A0 800D4BA0 03001025 */ move $v0, $t8 -.L800D4BA4: -/* 0D57A4 800D4BA4 8FB90068 */ lw $t9, 0x68($sp) -/* 0D57A8 800D4BA8 24060001 */ li $a2, 1 -/* 0D57AC 800D4BAC 27A70040 */ addiu $a3, $sp, 0x40 -/* 0D57B0 800D4BB0 8F240004 */ lw $a0, 4($t9) -/* 0D57B4 800D4BB4 0C03572C */ jal __osContRamRead -/* 0D57B8 800D4BB8 8F250008 */ lw $a1, 8($t9) -/* 0D57BC 800D4BBC AFA2001C */ sw $v0, 0x1c($sp) -/* 0D57C0 800D4BC0 8FA8001C */ lw $t0, 0x1c($sp) -/* 0D57C4 800D4BC4 11000003 */ beqz $t0, .L800D4BD4 -/* 0D57C8 800D4BC8 00000000 */ nop -/* 0D57CC 800D4BCC 10000078 */ b .L800D4DB0 -/* 0D57D0 800D4BD0 01001025 */ move $v0, $t0 -.L800D4BD4: -/* 0D57D4 800D4BD4 27A40040 */ addiu $a0, $sp, 0x40 -/* 0D57D8 800D4BD8 27A50062 */ addiu $a1, $sp, 0x62 -/* 0D57DC 800D4BDC 0C035153 */ jal __osIdCheckSum -/* 0D57E0 800D4BE0 27A60060 */ addiu $a2, $sp, 0x60 -/* 0D57E4 800D4BE4 27A90040 */ addiu $t1, $sp, 0x40 -/* 0D57E8 800D4BE8 AFA90018 */ sw $t1, 0x18($sp) -/* 0D57EC 800D4BEC 952A001C */ lhu $t2, 0x1c($t1) -/* 0D57F0 800D4BF0 97AB0062 */ lhu $t3, 0x62($sp) -/* 0D57F4 800D4BF4 154B0005 */ bne $t2, $t3, .L800D4C0C -/* 0D57F8 800D4BF8 00000000 */ nop -/* 0D57FC 800D4BFC 952C001E */ lhu $t4, 0x1e($t1) -/* 0D5800 800D4C00 97AD0060 */ lhu $t5, 0x60($sp) -/* 0D5804 800D4C04 118D001B */ beq $t4, $t5, .L800D4C74 -/* 0D5808 800D4C08 00000000 */ nop -.L800D4C0C: -/* 0D580C 800D4C0C 8FA40068 */ lw $a0, 0x68($sp) -/* 0D5810 800D4C10 0C035273 */ jal __osCheckPackId -/* 0D5814 800D4C14 8FA50018 */ lw $a1, 0x18($sp) -/* 0D5818 800D4C18 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D581C 800D4C1C 8FAF001C */ lw $t7, 0x1c($sp) -/* 0D5820 800D4C20 2401000A */ li $at, 10 -/* 0D5824 800D4C24 15E1000E */ bne $t7, $at, .L800D4C60 -/* 0D5828 800D4C28 00000000 */ nop -/* 0D582C 800D4C2C 8FA40068 */ lw $a0, 0x68($sp) -/* 0D5830 800D4C30 8FA50018 */ lw $a1, 0x18($sp) -/* 0D5834 800D4C34 0C03516D */ jal __osRepairPackId -/* 0D5838 800D4C38 27A60020 */ addiu $a2, $sp, 0x20 -/* 0D583C 800D4C3C AFA2001C */ sw $v0, 0x1c($sp) -/* 0D5840 800D4C40 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D5844 800D4C44 11C00003 */ beqz $t6, .L800D4C54 -/* 0D5848 800D4C48 00000000 */ nop -/* 0D584C 800D4C4C 10000058 */ b .L800D4DB0 -/* 0D5850 800D4C50 01C01025 */ move $v0, $t6 -.L800D4C54: -/* 0D5854 800D4C54 27B80020 */ addiu $t8, $sp, 0x20 -/* 0D5858 800D4C58 10000006 */ b .L800D4C74 -/* 0D585C 800D4C5C AFB80018 */ sw $t8, 0x18($sp) -.L800D4C60: -/* 0D5860 800D4C60 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D5864 800D4C64 13200003 */ beqz $t9, .L800D4C74 -/* 0D5868 800D4C68 00000000 */ nop -/* 0D586C 800D4C6C 10000050 */ b .L800D4DB0 -/* 0D5870 800D4C70 03201025 */ move $v0, $t9 -.L800D4C74: -/* 0D5874 800D4C74 8FA80018 */ lw $t0, 0x18($sp) -/* 0D5878 800D4C78 950A0018 */ lhu $t2, 0x18($t0) -/* 0D587C 800D4C7C 314B0001 */ andi $t3, $t2, 1 -/* 0D5880 800D4C80 15600013 */ bnez $t3, .L800D4CD0 -/* 0D5884 800D4C84 00000000 */ nop -/* 0D5888 800D4C88 8FA40068 */ lw $a0, 0x68($sp) -/* 0D588C 800D4C8C 01002825 */ move $a1, $t0 -/* 0D5890 800D4C90 0C03516D */ jal __osRepairPackId -/* 0D5894 800D4C94 27A60020 */ addiu $a2, $sp, 0x20 -/* 0D5898 800D4C98 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D589C 800D4C9C 8FA9001C */ lw $t1, 0x1c($sp) -/* 0D58A0 800D4CA0 11200003 */ beqz $t1, .L800D4CB0 -/* 0D58A4 800D4CA4 00000000 */ nop -/* 0D58A8 800D4CA8 10000041 */ b .L800D4DB0 -/* 0D58AC 800D4CAC 01201025 */ move $v0, $t1 -.L800D4CB0: -/* 0D58B0 800D4CB0 27AC0020 */ addiu $t4, $sp, 0x20 -/* 0D58B4 800D4CB4 AFAC0018 */ sw $t4, 0x18($sp) -/* 0D58B8 800D4CB8 958D0018 */ lhu $t5, 0x18($t4) -/* 0D58BC 800D4CBC 31AF0001 */ andi $t7, $t5, 1 -/* 0D58C0 800D4CC0 15E00003 */ bnez $t7, .L800D4CD0 -/* 0D58C4 800D4CC4 00000000 */ nop -/* 0D58C8 800D4CC8 10000039 */ b .L800D4DB0 -/* 0D58CC 800D4CCC 2402000B */ li $v0, 11 -.L800D4CD0: -/* 0D58D0 800D4CD0 AFA00064 */ sw $zero, 0x64($sp) -.L800D4CD4: -/* 0D58D4 800D4CD4 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D58D8 800D4CD8 8FB80064 */ lw $t8, 0x64($sp) -/* 0D58DC 800D4CDC 8FAB0068 */ lw $t3, 0x68($sp) -/* 0D58E0 800D4CE0 01D8C821 */ addu $t9, $t6, $t8 -/* 0D58E4 800D4CE4 932A0000 */ lbu $t2, ($t9) -/* 0D58E8 800D4CE8 01784021 */ addu $t0, $t3, $t8 -/* 0D58EC 800D4CEC A10A000C */ sb $t2, 0xc($t0) -/* 0D58F0 800D4CF0 8FA90064 */ lw $t1, 0x64($sp) -/* 0D58F4 800D4CF4 252C0001 */ addiu $t4, $t1, 1 -/* 0D58F8 800D4CF8 29810020 */ slti $at, $t4, 0x20 -/* 0D58FC 800D4CFC 1420FFF5 */ bnez $at, .L800D4CD4 -/* 0D5900 800D4D00 AFAC0064 */ sw $t4, 0x64($sp) -/* 0D5904 800D4D04 8FAD0018 */ lw $t5, 0x18($sp) -/* 0D5908 800D4D08 8FAE0068 */ lw $t6, 0x68($sp) -/* 0D590C 800D4D0C 24060007 */ li $a2, 7 -/* 0D5910 800D4D10 91AF001B */ lbu $t7, 0x1b($t5) -/* 0D5914 800D4D14 240D0010 */ li $t5, 16 -/* 0D5918 800D4D18 ADCF004C */ sw $t7, 0x4c($t6) -/* 0D591C 800D4D1C 8FB90018 */ lw $t9, 0x18($sp) -/* 0D5920 800D4D20 8FB80068 */ lw $t8, 0x68($sp) -/* 0D5924 800D4D24 240E0008 */ li $t6, 8 -/* 0D5928 800D4D28 932B001A */ lbu $t3, 0x1a($t9) -/* 0D592C 800D4D2C A30B0064 */ sb $t3, 0x64($t8) -/* 0D5930 800D4D30 8FAA0068 */ lw $t2, 0x68($sp) -/* 0D5934 800D4D34 91480064 */ lbu $t0, 0x64($t2) -/* 0D5938 800D4D38 00084840 */ sll $t1, $t0, 1 -/* 0D593C 800D4D3C 252C0003 */ addiu $t4, $t1, 3 -/* 0D5940 800D4D40 AD4C0060 */ sw $t4, 0x60($t2) -/* 0D5944 800D4D44 8FAF0068 */ lw $t7, 0x68($sp) -/* 0D5948 800D4D48 ADED0050 */ sw $t5, 0x50($t7) -/* 0D594C 800D4D4C 8FB90068 */ lw $t9, 0x68($sp) -/* 0D5950 800D4D50 AF2E0054 */ sw $t6, 0x54($t9) -/* 0D5954 800D4D54 8FAB0068 */ lw $t3, 0x68($sp) -/* 0D5958 800D4D58 91780064 */ lbu $t8, 0x64($t3) -/* 0D595C 800D4D5C 001840C0 */ sll $t0, $t8, 3 -/* 0D5960 800D4D60 25090008 */ addiu $t1, $t0, 8 -/* 0D5964 800D4D64 AD690058 */ sw $t1, 0x58($t3) -/* 0D5968 800D4D68 8FAC0068 */ lw $t4, 0x68($sp) -/* 0D596C 800D4D6C 918D0064 */ lbu $t5, 0x64($t4) -/* 0D5970 800D4D70 8D8A0058 */ lw $t2, 0x58($t4) -/* 0D5974 800D4D74 000D78C0 */ sll $t7, $t5, 3 -/* 0D5978 800D4D78 014F7021 */ addu $t6, $t2, $t7 -/* 0D597C 800D4D7C AD8E005C */ sw $t6, 0x5c($t4) -/* 0D5980 800D4D80 8FB90068 */ lw $t9, 0x68($sp) -/* 0D5984 800D4D84 8F240004 */ lw $a0, 4($t9) -/* 0D5988 800D4D88 8F250008 */ lw $a1, 8($t9) -/* 0D598C 800D4D8C 0C03572C */ jal __osContRamRead -/* 0D5990 800D4D90 2727002C */ addiu $a3, $t9, 0x2c -/* 0D5994 800D4D94 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D5998 800D4D98 8FB8001C */ lw $t8, 0x1c($sp) -/* 0D599C 800D4D9C 13000003 */ beqz $t8, .L800D4DAC -/* 0D59A0 800D4DA0 00000000 */ nop -/* 0D59A4 800D4DA4 10000002 */ b .L800D4DB0 -/* 0D59A8 800D4DA8 03001025 */ move $v0, $t8 -.L800D4DAC: -/* 0D59AC 800D4DAC 00001025 */ move $v0, $zero -.L800D4DB0: -/* 0D59B0 800D4DB0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D59B4 800D4DB4 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0D59B8 800D4DB8 03E00008 */ jr $ra -/* 0D59BC 800D4DBC 00000000 */ nop - -glabel __osCheckId -/* 0D59C0 800D4DC0 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D59C4 800D4DC4 AFA40040 */ sw $a0, 0x40($sp) -/* 0D59C8 800D4DC8 8FAE0040 */ lw $t6, 0x40($sp) -/* 0D59CC 800D4DCC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D59D0 800D4DD0 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D59D4 800D4DD4 11E0000A */ beqz $t7, .L800D4E00 -/* 0D59D8 800D4DD8 00000000 */ nop -/* 0D59DC 800D4DDC A1C00065 */ sb $zero, 0x65($t6) -/* 0D59E0 800D4DE0 0C035477 */ jal __osPfsSelectBank -/* 0D59E4 800D4DE4 8FA40040 */ lw $a0, 0x40($sp) -/* 0D59E8 800D4DE8 AFA20018 */ sw $v0, 0x18($sp) -/* 0D59EC 800D4DEC 8FB80018 */ lw $t8, 0x18($sp) -/* 0D59F0 800D4DF0 13000003 */ beqz $t8, .L800D4E00 -/* 0D59F4 800D4DF4 00000000 */ nop -/* 0D59F8 800D4DF8 1000002C */ b .L800D4EAC -/* 0D59FC 800D4DFC 03001025 */ move $v0, $t8 -.L800D4E00: -/* 0D5A00 800D4E00 8FB90040 */ lw $t9, 0x40($sp) -/* 0D5A04 800D4E04 24060001 */ li $a2, 1 -/* 0D5A08 800D4E08 27A7001C */ addiu $a3, $sp, 0x1c -/* 0D5A0C 800D4E0C 8F240004 */ lw $a0, 4($t9) -/* 0D5A10 800D4E10 0C03572C */ jal __osContRamRead -/* 0D5A14 800D4E14 8F250008 */ lw $a1, 8($t9) -/* 0D5A18 800D4E18 AFA20018 */ sw $v0, 0x18($sp) -/* 0D5A1C 800D4E1C 8FA80018 */ lw $t0, 0x18($sp) -/* 0D5A20 800D4E20 11000011 */ beqz $t0, .L800D4E68 -/* 0D5A24 800D4E24 24010002 */ li $at, 2 -/* 0D5A28 800D4E28 11010003 */ beq $t0, $at, .L800D4E38 -/* 0D5A2C 800D4E2C 00000000 */ nop -/* 0D5A30 800D4E30 1000001E */ b .L800D4EAC -/* 0D5A34 800D4E34 01001025 */ move $v0, $t0 -.L800D4E38: -/* 0D5A38 800D4E38 8FA90040 */ lw $t1, 0x40($sp) -/* 0D5A3C 800D4E3C 24060001 */ li $a2, 1 -/* 0D5A40 800D4E40 27A7001C */ addiu $a3, $sp, 0x1c -/* 0D5A44 800D4E44 8D240004 */ lw $a0, 4($t1) -/* 0D5A48 800D4E48 0C03572C */ jal __osContRamRead -/* 0D5A4C 800D4E4C 8D250008 */ lw $a1, 8($t1) -/* 0D5A50 800D4E50 AFA20018 */ sw $v0, 0x18($sp) -/* 0D5A54 800D4E54 8FAA0018 */ lw $t2, 0x18($sp) -/* 0D5A58 800D4E58 11400003 */ beqz $t2, .L800D4E68 -/* 0D5A5C 800D4E5C 00000000 */ nop -/* 0D5A60 800D4E60 10000012 */ b .L800D4EAC -/* 0D5A64 800D4E64 01401025 */ move $v0, $t2 -.L800D4E68: -/* 0D5A68 800D4E68 AFA0003C */ sw $zero, 0x3c($sp) -.L800D4E6C: -/* 0D5A6C 800D4E6C 8FAB003C */ lw $t3, 0x3c($sp) -/* 0D5A70 800D4E70 8FAD0040 */ lw $t5, 0x40($sp) -/* 0D5A74 800D4E74 03AB6021 */ addu $t4, $sp, $t3 -/* 0D5A78 800D4E78 01AB7821 */ addu $t7, $t5, $t3 -/* 0D5A7C 800D4E7C 91EE000C */ lbu $t6, 0xc($t7) -/* 0D5A80 800D4E80 918C001C */ lbu $t4, 0x1c($t4) -/* 0D5A84 800D4E84 118E0003 */ beq $t4, $t6, .L800D4E94 -/* 0D5A88 800D4E88 00000000 */ nop -/* 0D5A8C 800D4E8C 10000007 */ b .L800D4EAC -/* 0D5A90 800D4E90 24020002 */ li $v0, 2 -.L800D4E94: -/* 0D5A94 800D4E94 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D5A98 800D4E98 27190001 */ addiu $t9, $t8, 1 -/* 0D5A9C 800D4E9C 2B210020 */ slti $at, $t9, 0x20 -/* 0D5AA0 800D4EA0 1420FFF2 */ bnez $at, .L800D4E6C -/* 0D5AA4 800D4EA4 AFB9003C */ sw $t9, 0x3c($sp) -/* 0D5AA8 800D4EA8 00001025 */ move $v0, $zero -.L800D4EAC: -/* 0D5AAC 800D4EAC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D5AB0 800D4EB0 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D5AB4 800D4EB4 03E00008 */ jr $ra -/* 0D5AB8 800D4EB8 00000000 */ nop - -glabel __osPfsRWInode -/* 0D5ABC 800D4EBC 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D5AC0 800D4EC0 AFA40038 */ sw $a0, 0x38($sp) -/* 0D5AC4 800D4EC4 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D5AC8 800D4EC8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D5ACC 800D4ECC AFA5003C */ sw $a1, 0x3c($sp) -/* 0D5AD0 800D4ED0 AFA60040 */ sw $a2, 0x40($sp) -/* 0D5AD4 800D4ED4 AFA70044 */ sw $a3, 0x44($sp) -/* 0D5AD8 800D4ED8 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D5ADC 800D4EDC 11E0000A */ beqz $t7, .L800D4F08 -/* 0D5AE0 800D4EE0 00000000 */ nop -/* 0D5AE4 800D4EE4 A1C00065 */ sb $zero, 0x65($t6) -/* 0D5AE8 800D4EE8 0C035477 */ jal __osPfsSelectBank -/* 0D5AEC 800D4EEC 8FA40038 */ lw $a0, 0x38($sp) -/* 0D5AF0 800D4EF0 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5AF4 800D4EF4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D5AF8 800D4EF8 13000003 */ beqz $t8, .L800D4F08 -/* 0D5AFC 800D4EFC 00000000 */ nop -/* 0D5B00 800D4F00 100000B2 */ b .L800D51CC -/* 0D5B04 800D4F04 03001025 */ move $v0, $t8 -.L800D4F08: -/* 0D5B08 800D4F08 93B90047 */ lbu $t9, 0x47($sp) -/* 0D5B0C 800D4F0C 1B200004 */ blez $t9, .L800D4F20 -/* 0D5B10 800D4F10 00000000 */ nop -/* 0D5B14 800D4F14 24080001 */ li $t0, 1 -/* 0D5B18 800D4F18 10000004 */ b .L800D4F2C -/* 0D5B1C 800D4F1C AFA80028 */ sw $t0, 0x28($sp) -.L800D4F20: -/* 0D5B20 800D4F20 8FA90038 */ lw $t1, 0x38($sp) -/* 0D5B24 800D4F24 8D2A0060 */ lw $t2, 0x60($t1) -/* 0D5B28 800D4F28 AFAA0028 */ sw $t2, 0x28($sp) -.L800D4F2C: -/* 0D5B2C 800D4F2C 93AB0043 */ lbu $t3, 0x43($sp) -/* 0D5B30 800D4F30 24010001 */ li $at, 1 -/* 0D5B34 800D4F34 1561000C */ bne $t3, $at, .L800D4F68 -/* 0D5B38 800D4F38 00000000 */ nop -/* 0D5B3C 800D4F3C 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D5B40 800D4F40 8FAC003C */ lw $t4, 0x3c($sp) -/* 0D5B44 800D4F44 000D2823 */ negu $a1, $t5 -/* 0D5B48 800D4F48 00057040 */ sll $t6, $a1, 1 -/* 0D5B4C 800D4F4C 01C02825 */ move $a1, $t6 -/* 0D5B50 800D4F50 000D7840 */ sll $t7, $t5, 1 -/* 0D5B54 800D4F54 24A50100 */ addiu $a1, $a1, 0x100 -/* 0D5B58 800D4F58 0C03513C */ jal __osSumcalc -/* 0D5B5C 800D4F5C 018F2021 */ addu $a0, $t4, $t7 -/* 0D5B60 800D4F60 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D5B64 800D4F64 A3020001 */ sb $v0, 1($t8) -.L800D4F68: -/* 0D5B68 800D4F68 AFA00030 */ sw $zero, 0x30($sp) -.L800D4F6C: -/* 0D5B6C 800D4F6C 8FA80030 */ lw $t0, 0x30($sp) -/* 0D5B70 800D4F70 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D5B74 800D4F74 93AB0043 */ lbu $t3, 0x43($sp) -/* 0D5B78 800D4F78 00084940 */ sll $t1, $t0, 5 -/* 0D5B7C 800D4F7C 24010001 */ li $at, 1 -/* 0D5B80 800D4F80 03295021 */ addu $t2, $t9, $t1 -/* 0D5B84 800D4F84 1561001B */ bne $t3, $at, .L800D4FF4 -/* 0D5B88 800D4F88 AFAA0024 */ sw $t2, 0x24($sp) -/* 0D5B8C 800D4F8C 8FAC0038 */ lw $t4, 0x38($sp) -/* 0D5B90 800D4F90 93AD0047 */ lbu $t5, 0x47($sp) -/* 0D5B94 800D4F94 01403825 */ move $a3, $t2 -/* 0D5B98 800D4F98 8D8F0054 */ lw $t7, 0x54($t4) -/* 0D5B9C 800D4F9C 000D70C0 */ sll $t6, $t5, 3 -/* 0D5BA0 800D4FA0 8D840004 */ lw $a0, 4($t4) -/* 0D5BA4 800D4FA4 8D850008 */ lw $a1, 8($t4) -/* 0D5BA8 800D4FA8 01EEC021 */ addu $t8, $t7, $t6 -/* 0D5BAC 800D4FAC 03083021 */ addu $a2, $t8, $t0 -/* 0D5BB0 800D4FB0 0C035CBC */ jal __osContRamWrite -/* 0D5BB4 800D4FB4 AFA00010 */ sw $zero, 0x10($sp) -/* 0D5BB8 800D4FB8 8FB90038 */ lw $t9, 0x38($sp) -/* 0D5BBC 800D4FBC 93AB0047 */ lbu $t3, 0x47($sp) -/* 0D5BC0 800D4FC0 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5BC4 800D4FC4 8F290058 */ lw $t1, 0x58($t9) -/* 0D5BC8 800D4FC8 8FAF0030 */ lw $t7, 0x30($sp) -/* 0D5BCC 800D4FCC 000B60C0 */ sll $t4, $t3, 3 -/* 0D5BD0 800D4FD0 8F250008 */ lw $a1, 8($t9) -/* 0D5BD4 800D4FD4 8F240004 */ lw $a0, 4($t9) -/* 0D5BD8 800D4FD8 012C6821 */ addu $t5, $t1, $t4 -/* 0D5BDC 800D4FDC AFA00010 */ sw $zero, 0x10($sp) -/* 0D5BE0 800D4FE0 8FA70024 */ lw $a3, 0x24($sp) -/* 0D5BE4 800D4FE4 0C035CBC */ jal __osContRamWrite -/* 0D5BE8 800D4FE8 01AF3021 */ addu $a2, $t5, $t7 -/* 0D5BEC 800D4FEC 1000000D */ b .L800D5024 -/* 0D5BF0 800D4FF0 AFA2002C */ sw $v0, 0x2c($sp) -.L800D4FF4: -/* 0D5BF4 800D4FF4 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D5BF8 800D4FF8 93A80047 */ lbu $t0, 0x47($sp) -/* 0D5BFC 800D4FFC 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D5C00 800D5000 8DD80054 */ lw $t8, 0x54($t6) -/* 0D5C04 800D5004 000850C0 */ sll $t2, $t0, 3 -/* 0D5C08 800D5008 8FA70024 */ lw $a3, 0x24($sp) -/* 0D5C0C 800D500C 030AC821 */ addu $t9, $t8, $t2 -/* 0D5C10 800D5010 8DC40004 */ lw $a0, 4($t6) -/* 0D5C14 800D5014 8DC50008 */ lw $a1, 8($t6) -/* 0D5C18 800D5018 0C03572C */ jal __osContRamRead -/* 0D5C1C 800D501C 032B3021 */ addu $a2, $t9, $t3 -/* 0D5C20 800D5020 AFA2002C */ sw $v0, 0x2c($sp) -.L800D5024: -/* 0D5C24 800D5024 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D5C28 800D5028 11200003 */ beqz $t1, .L800D5038 -/* 0D5C2C 800D502C 00000000 */ nop -/* 0D5C30 800D5030 10000066 */ b .L800D51CC -/* 0D5C34 800D5034 01201025 */ move $v0, $t1 -.L800D5038: -/* 0D5C38 800D5038 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D5C3C 800D503C 258D0001 */ addiu $t5, $t4, 1 -/* 0D5C40 800D5040 29A10008 */ slti $at, $t5, 8 -/* 0D5C44 800D5044 1420FFC9 */ bnez $at, .L800D4F6C -/* 0D5C48 800D5048 AFAD0030 */ sw $t5, 0x30($sp) -/* 0D5C4C 800D504C 93AF0043 */ lbu $t7, 0x43($sp) -/* 0D5C50 800D5050 15E0005D */ bnez $t7, .L800D51C8 -/* 0D5C54 800D5054 00000000 */ nop -/* 0D5C58 800D5058 8FA80028 */ lw $t0, 0x28($sp) -/* 0D5C5C 800D505C 8FAE003C */ lw $t6, 0x3c($sp) -/* 0D5C60 800D5060 00082823 */ negu $a1, $t0 -/* 0D5C64 800D5064 00055040 */ sll $t2, $a1, 1 -/* 0D5C68 800D5068 01402825 */ move $a1, $t2 -/* 0D5C6C 800D506C 0008C040 */ sll $t8, $t0, 1 -/* 0D5C70 800D5070 24A50100 */ addiu $a1, $a1, 0x100 -/* 0D5C74 800D5074 0C03513C */ jal __osSumcalc -/* 0D5C78 800D5078 01D82021 */ addu $a0, $t6, $t8 -/* 0D5C7C 800D507C 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D5C80 800D5080 A3A20037 */ sb $v0, 0x37($sp) -/* 0D5C84 800D5084 93A90037 */ lbu $t1, 0x37($sp) -/* 0D5C88 800D5088 932B0001 */ lbu $t3, 1($t9) -/* 0D5C8C 800D508C 11690037 */ beq $t3, $t1, .L800D516C -/* 0D5C90 800D5090 00000000 */ nop -/* 0D5C94 800D5094 AFA00030 */ sw $zero, 0x30($sp) -.L800D5098: -/* 0D5C98 800D5098 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D5C9C 800D509C 8FAC003C */ lw $t4, 0x3c($sp) -/* 0D5CA0 800D50A0 8FB80038 */ lw $t8, 0x38($sp) -/* 0D5CA4 800D50A4 000D7940 */ sll $t7, $t5, 5 -/* 0D5CA8 800D50A8 018F7021 */ addu $t6, $t4, $t7 -/* 0D5CAC 800D50AC 93AA0047 */ lbu $t2, 0x47($sp) -/* 0D5CB0 800D50B0 AFAE0024 */ sw $t6, 0x24($sp) -/* 0D5CB4 800D50B4 8F080058 */ lw $t0, 0x58($t8) -/* 0D5CB8 800D50B8 000AC8C0 */ sll $t9, $t2, 3 -/* 0D5CBC 800D50BC 01C03825 */ move $a3, $t6 -/* 0D5CC0 800D50C0 01195821 */ addu $t3, $t0, $t9 -/* 0D5CC4 800D50C4 016D3021 */ addu $a2, $t3, $t5 -/* 0D5CC8 800D50C8 8F050008 */ lw $a1, 8($t8) -/* 0D5CCC 800D50CC 0C03572C */ jal __osContRamRead -/* 0D5CD0 800D50D0 8F040004 */ lw $a0, 4($t8) -/* 0D5CD4 800D50D4 8FA90030 */ lw $t1, 0x30($sp) -/* 0D5CD8 800D50D8 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5CDC 800D50DC 252C0001 */ addiu $t4, $t1, 1 -/* 0D5CE0 800D50E0 29810008 */ slti $at, $t4, 8 -/* 0D5CE4 800D50E4 1420FFEC */ bnez $at, .L800D5098 -/* 0D5CE8 800D50E8 AFAC0030 */ sw $t4, 0x30($sp) -/* 0D5CEC 800D50EC 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D5CF0 800D50F0 93AA0037 */ lbu $t2, 0x37($sp) -/* 0D5CF4 800D50F4 91F80001 */ lbu $t8, 1($t7) -/* 0D5CF8 800D50F8 130A0003 */ beq $t8, $t2, .L800D5108 -/* 0D5CFC 800D50FC 00000000 */ nop -/* 0D5D00 800D5100 10000032 */ b .L800D51CC -/* 0D5D04 800D5104 24020003 */ li $v0, 3 -.L800D5108: -/* 0D5D08 800D5108 AFA00030 */ sw $zero, 0x30($sp) -.L800D510C: -/* 0D5D0C 800D510C 8FB90030 */ lw $t9, 0x30($sp) -/* 0D5D10 800D5110 8FA8003C */ lw $t0, 0x3c($sp) -/* 0D5D14 800D5114 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D5D18 800D5118 00195940 */ sll $t3, $t9, 5 -/* 0D5D1C 800D511C 010B6821 */ addu $t5, $t0, $t3 -/* 0D5D20 800D5120 93AC0047 */ lbu $t4, 0x47($sp) -/* 0D5D24 800D5124 AFAD0024 */ sw $t5, 0x24($sp) -/* 0D5D28 800D5128 8DC90054 */ lw $t1, 0x54($t6) -/* 0D5D2C 800D512C 000C78C0 */ sll $t7, $t4, 3 -/* 0D5D30 800D5130 8DC50008 */ lw $a1, 8($t6) -/* 0D5D34 800D5134 8DC40004 */ lw $a0, 4($t6) -/* 0D5D38 800D5138 012FC021 */ addu $t8, $t1, $t7 -/* 0D5D3C 800D513C AFA00010 */ sw $zero, 0x10($sp) -/* 0D5D40 800D5140 01A03825 */ move $a3, $t5 -/* 0D5D44 800D5144 0C035CBC */ jal __osContRamWrite -/* 0D5D48 800D5148 03193021 */ addu $a2, $t8, $t9 -/* 0D5D4C 800D514C 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D5D50 800D5150 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5D54 800D5154 25480001 */ addiu $t0, $t2, 1 -/* 0D5D58 800D5158 29010008 */ slti $at, $t0, 8 -/* 0D5D5C 800D515C 1420FFEB */ bnez $at, .L800D510C -/* 0D5D60 800D5160 AFA80030 */ sw $t0, 0x30($sp) -/* 0D5D64 800D5164 10000018 */ b .L800D51C8 -/* 0D5D68 800D5168 00000000 */ nop -.L800D516C: -/* 0D5D6C 800D516C AFA00030 */ sw $zero, 0x30($sp) -.L800D5170: -/* 0D5D70 800D5170 8FAE0030 */ lw $t6, 0x30($sp) -/* 0D5D74 800D5174 8FAB003C */ lw $t3, 0x3c($sp) -/* 0D5D78 800D5178 8FAF0038 */ lw $t7, 0x38($sp) -/* 0D5D7C 800D517C 000E6140 */ sll $t4, $t6, 5 -/* 0D5D80 800D5180 016C4821 */ addu $t1, $t3, $t4 -/* 0D5D84 800D5184 93B90047 */ lbu $t9, 0x47($sp) -/* 0D5D88 800D5188 AFA90024 */ sw $t1, 0x24($sp) -/* 0D5D8C 800D518C 8DF80058 */ lw $t8, 0x58($t7) -/* 0D5D90 800D5190 001968C0 */ sll $t5, $t9, 3 -/* 0D5D94 800D5194 8DE50008 */ lw $a1, 8($t7) -/* 0D5D98 800D5198 8DE40004 */ lw $a0, 4($t7) -/* 0D5D9C 800D519C 030D5021 */ addu $t2, $t8, $t5 -/* 0D5DA0 800D51A0 AFA00010 */ sw $zero, 0x10($sp) -/* 0D5DA4 800D51A4 01203825 */ move $a3, $t1 -/* 0D5DA8 800D51A8 0C035CBC */ jal __osContRamWrite -/* 0D5DAC 800D51AC 014E3021 */ addu $a2, $t2, $t6 -/* 0D5DB0 800D51B0 8FA80030 */ lw $t0, 0x30($sp) -/* 0D5DB4 800D51B4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0D5DB8 800D51B8 250B0001 */ addiu $t3, $t0, 1 -/* 0D5DBC 800D51BC 29610008 */ slti $at, $t3, 8 -/* 0D5DC0 800D51C0 1420FFEB */ bnez $at, .L800D5170 -/* 0D5DC4 800D51C4 AFAB0030 */ sw $t3, 0x30($sp) -.L800D51C8: -/* 0D5DC8 800D51C8 00001025 */ move $v0, $zero -.L800D51CC: -/* 0D5DCC 800D51CC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D5DD0 800D51D0 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0D5DD4 800D51D4 03E00008 */ jr $ra -/* 0D5DD8 800D51D8 00000000 */ nop - -glabel __osPfsSelectBank -/* 0D5DDC 800D51DC 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D5DE0 800D51E0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D5DE4 800D51E4 AFA40048 */ sw $a0, 0x48($sp) -/* 0D5DE8 800D51E8 AFA00020 */ sw $zero, 0x20($sp) -/* 0D5DEC 800D51EC AFA00024 */ sw $zero, 0x24($sp) -.L800D51F0: -/* 0D5DF0 800D51F0 8FAE0048 */ lw $t6, 0x48($sp) -/* 0D5DF4 800D51F4 8FB80024 */ lw $t8, 0x24($sp) -/* 0D5DF8 800D51F8 91CF0065 */ lbu $t7, 0x65($t6) -/* 0D5DFC 800D51FC 03B8C821 */ addu $t9, $sp, $t8 -/* 0D5E00 800D5200 A32F0028 */ sb $t7, 0x28($t9) -/* 0D5E04 800D5204 8FA80024 */ lw $t0, 0x24($sp) -/* 0D5E08 800D5208 25090001 */ addiu $t1, $t0, 1 -/* 0D5E0C 800D520C 29210020 */ slti $at, $t1, 0x20 -/* 0D5E10 800D5210 1420FFF7 */ bnez $at, .L800D51F0 -/* 0D5E14 800D5214 AFA90024 */ sw $t1, 0x24($sp) -/* 0D5E18 800D5218 8FAA0048 */ lw $t2, 0x48($sp) -/* 0D5E1C 800D521C 24060400 */ li $a2, 1024 -/* 0D5E20 800D5220 27A70028 */ addiu $a3, $sp, 0x28 -/* 0D5E24 800D5224 8D440004 */ lw $a0, 4($t2) -/* 0D5E28 800D5228 8D450008 */ lw $a1, 8($t2) -/* 0D5E2C 800D522C 0C035CBC */ jal __osContRamWrite -/* 0D5E30 800D5230 AFA00010 */ sw $zero, 0x10($sp) -/* 0D5E34 800D5234 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D5E38 800D5238 AFA20020 */ sw $v0, 0x20($sp) -/* 0D5E3C 800D523C 8FA20020 */ lw $v0, 0x20($sp) -/* 0D5E40 800D5240 03E00008 */ jr $ra -/* 0D5E44 800D5244 27BD0048 */ addiu $sp, $sp, 0x48 - -/* 0D5E48 800D5248 00000000 */ nop -/* 0D5E4C 800D524C 00000000 */ nop -glabel osPfsChecker -/* 0D5E50 800D5250 27BDFB78 */ addiu $sp, $sp, -0x488 -/* 0D5E54 800D5254 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D5E58 800D5258 AFA40488 */ sw $a0, 0x488($sp) -/* 0D5E5C 800D525C AFA00034 */ sw $zero, 0x34($sp) -/* 0D5E60 800D5260 0C035370 */ jal __osCheckId -/* 0D5E64 800D5264 8FA40488 */ lw $a0, 0x488($sp) -/* 0D5E68 800D5268 AFA20480 */ sw $v0, 0x480($sp) -/* 0D5E6C 800D526C 8FAE0480 */ lw $t6, 0x480($sp) -/* 0D5E70 800D5270 24010002 */ li $at, 2 -/* 0D5E74 800D5274 15C10004 */ bne $t6, $at, .L800D5288 -/* 0D5E78 800D5278 00000000 */ nop -/* 0D5E7C 800D527C 0C0352D9 */ jal __osGetId -/* 0D5E80 800D5280 8FA40488 */ lw $a0, 0x488($sp) -/* 0D5E84 800D5284 AFA20480 */ sw $v0, 0x480($sp) -.L800D5288: -/* 0D5E88 800D5288 8FAF0480 */ lw $t7, 0x480($sp) -/* 0D5E8C 800D528C 11E00003 */ beqz $t7, .L800D529C -/* 0D5E90 800D5290 00000000 */ nop -/* 0D5E94 800D5294 1000019B */ b .L800D5904 -/* 0D5E98 800D5298 01E01025 */ move $v0, $t7 -.L800D529C: -/* 0D5E9C 800D529C 8FA40488 */ lw $a0, 0x488($sp) -/* 0D5EA0 800D52A0 0C035645 */ jal corrupted_init -/* 0D5EA4 800D52A4 27A50038 */ addiu $a1, $sp, 0x38 -/* 0D5EA8 800D52A8 AFA20480 */ sw $v0, 0x480($sp) -/* 0D5EAC 800D52AC 8FB80480 */ lw $t8, 0x480($sp) -/* 0D5EB0 800D52B0 13000003 */ beqz $t8, .L800D52C0 -/* 0D5EB4 800D52B4 00000000 */ nop -/* 0D5EB8 800D52B8 10000192 */ b .L800D5904 -/* 0D5EBC 800D52BC 03001025 */ move $v0, $t8 -.L800D52C0: -/* 0D5EC0 800D52C0 8FB90488 */ lw $t9, 0x488($sp) -/* 0D5EC4 800D52C4 AFA00484 */ sw $zero, 0x484($sp) -/* 0D5EC8 800D52C8 8F280050 */ lw $t0, 0x50($t9) -/* 0D5ECC 800D52CC 190000C0 */ blez $t0, .L800D55D0 -/* 0D5ED0 800D52D0 00000000 */ nop -.L800D52D4: -/* 0D5ED4 800D52D4 8FA90488 */ lw $t1, 0x488($sp) -/* 0D5ED8 800D52D8 8FAB0484 */ lw $t3, 0x484($sp) -/* 0D5EDC 800D52DC 27A7025C */ addiu $a3, $sp, 0x25c -/* 0D5EE0 800D52E0 8D2A005C */ lw $t2, 0x5c($t1) -/* 0D5EE4 800D52E4 8D240004 */ lw $a0, 4($t1) -/* 0D5EE8 800D52E8 8D250008 */ lw $a1, 8($t1) -/* 0D5EEC 800D52EC 0C03572C */ jal __osContRamRead -/* 0D5EF0 800D52F0 014B3021 */ addu $a2, $t2, $t3 -/* 0D5EF4 800D52F4 AFA20480 */ sw $v0, 0x480($sp) -/* 0D5EF8 800D52F8 8FAC0480 */ lw $t4, 0x480($sp) -/* 0D5EFC 800D52FC 11800003 */ beqz $t4, .L800D530C -/* 0D5F00 800D5300 00000000 */ nop -/* 0D5F04 800D5304 1000017F */ b .L800D5904 -/* 0D5F08 800D5308 01801025 */ move $v0, $t4 -.L800D530C: -/* 0D5F0C 800D530C 97AD0260 */ lhu $t5, 0x260($sp) -/* 0D5F10 800D5310 11A0007D */ beqz $t5, .L800D5508 -/* 0D5F14 800D5314 00000000 */ nop -/* 0D5F18 800D5318 8FAE025C */ lw $t6, 0x25c($sp) -/* 0D5F1C 800D531C 11C0007A */ beqz $t6, .L800D5508 -/* 0D5F20 800D5320 00000000 */ nop -/* 0D5F24 800D5324 97AF0262 */ lhu $t7, 0x262($sp) -/* 0D5F28 800D5328 8FA80488 */ lw $t0, 0x488($sp) -/* 0D5F2C 800D532C 241800FF */ li $t8, 255 -/* 0D5F30 800D5330 A7AF047C */ sh $t7, 0x47c($sp) -/* 0D5F34 800D5334 AFA0002C */ sw $zero, 0x2c($sp) -/* 0D5F38 800D5338 AFA00028 */ sw $zero, 0x28($sp) -/* 0D5F3C 800D533C A3B80033 */ sb $t8, 0x33($sp) -/* 0D5F40 800D5340 97B9047C */ lhu $t9, 0x47c($sp) -/* 0D5F44 800D5344 8D090060 */ lw $t1, 0x60($t0) -/* 0D5F48 800D5348 0329082A */ slt $at, $t9, $t1 -/* 0D5F4C 800D534C 14200042 */ bnez $at, .L800D5458 -/* 0D5F50 800D5350 00000000 */ nop -/* 0D5F54 800D5354 93AA047C */ lbu $t2, 0x47c($sp) -/* 0D5F58 800D5358 910B0064 */ lbu $t3, 0x64($t0) -/* 0D5F5C 800D535C 014B082A */ slt $at, $t2, $t3 -/* 0D5F60 800D5360 1020003D */ beqz $at, .L800D5458 -/* 0D5F64 800D5364 00000000 */ nop -/* 0D5F68 800D5368 93AC047D */ lbu $t4, 0x47d($sp) -/* 0D5F6C 800D536C 1980003A */ blez $t4, .L800D5458 -/* 0D5F70 800D5370 29810080 */ slti $at, $t4, 0x80 -/* 0D5F74 800D5374 10200038 */ beqz $at, .L800D5458 -/* 0D5F78 800D5378 00000000 */ nop -.L800D537C: -/* 0D5F7C 800D537C 93AD0033 */ lbu $t5, 0x33($sp) -/* 0D5F80 800D5380 93AE047C */ lbu $t6, 0x47c($sp) -/* 0D5F84 800D5384 11AE000F */ beq $t5, $t6, .L800D53C4 -/* 0D5F88 800D5388 00000000 */ nop -/* 0D5F8C 800D538C A3AE0033 */ sb $t6, 0x33($sp) -/* 0D5F90 800D5390 8FA40488 */ lw $a0, 0x488($sp) -/* 0D5F94 800D5394 27A5027C */ addiu $a1, $sp, 0x27c -/* 0D5F98 800D5398 00003025 */ move $a2, $zero -/* 0D5F9C 800D539C 0C0353AF */ jal __osPfsRWInode -/* 0D5FA0 800D53A0 01C03825 */ move $a3, $t6 -/* 0D5FA4 800D53A4 AFA20480 */ sw $v0, 0x480($sp) -/* 0D5FA8 800D53A8 8FAF0480 */ lw $t7, 0x480($sp) -/* 0D5FAC 800D53AC 11E00005 */ beqz $t7, .L800D53C4 -/* 0D5FB0 800D53B0 24010003 */ li $at, 3 -/* 0D5FB4 800D53B4 11E10003 */ beq $t7, $at, .L800D53C4 -/* 0D5FB8 800D53B8 00000000 */ nop -/* 0D5FBC 800D53BC 10000151 */ b .L800D5904 -/* 0D5FC0 800D53C0 01E01025 */ move $v0, $t7 -.L800D53C4: -/* 0D5FC4 800D53C4 97B8047C */ lhu $t8, 0x47c($sp) -/* 0D5FC8 800D53C8 8FA40488 */ lw $a0, 0x488($sp) -/* 0D5FCC 800D53CC 27A60038 */ addiu $a2, $sp, 0x38 -/* 0D5FD0 800D53D0 A7B80004 */ sh $t8, 4($sp) -/* 0D5FD4 800D53D4 0C0356B2 */ jal corrupted -/* 0D5FD8 800D53D8 8FA50004 */ lw $a1, 4($sp) -/* 0D5FDC 800D53DC 8FB90028 */ lw $t9, 0x28($sp) -/* 0D5FE0 800D53E0 00594823 */ subu $t1, $v0, $t9 -/* 0D5FE4 800D53E4 AFA9002C */ sw $t1, 0x2c($sp) -/* 0D5FE8 800D53E8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D5FEC 800D53EC 1500001A */ bnez $t0, .L800D5458 -/* 0D5FF0 800D53F0 00000000 */ nop -/* 0D5FF4 800D53F4 93AC047D */ lbu $t4, 0x47d($sp) -/* 0D5FF8 800D53F8 240A0001 */ li $t2, 1 -/* 0D5FFC 800D53FC 27AE027C */ addiu $t6, $sp, 0x27c -/* 0D6000 800D5400 000C6840 */ sll $t5, $t4, 1 -/* 0D6004 800D5404 AFAA0028 */ sw $t2, 0x28($sp) -/* 0D6008 800D5408 01AE7821 */ addu $t7, $t5, $t6 -/* 0D600C 800D540C 95E10000 */ lhu $at, ($t7) -/* 0D6010 800D5410 27AB047C */ addiu $t3, $sp, 0x47c -/* 0D6014 800D5414 A5610000 */ sh $at, ($t3) -/* 0D6018 800D5418 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D601C 800D541C 97A8047C */ lhu $t0, 0x47c($sp) -/* 0D6020 800D5420 8D4C0060 */ lw $t4, 0x60($t2) -/* 0D6024 800D5424 010C082A */ slt $at, $t0, $t4 -/* 0D6028 800D5428 1420000B */ bnez $at, .L800D5458 -/* 0D602C 800D542C 00000000 */ nop -/* 0D6030 800D5430 93AD047C */ lbu $t5, 0x47c($sp) -/* 0D6034 800D5434 914E0064 */ lbu $t6, 0x64($t2) -/* 0D6038 800D5438 01AE082A */ slt $at, $t5, $t6 -/* 0D603C 800D543C 10200006 */ beqz $at, .L800D5458 -/* 0D6040 800D5440 00000000 */ nop -/* 0D6044 800D5444 93B9047D */ lbu $t9, 0x47d($sp) -/* 0D6048 800D5448 1B200003 */ blez $t9, .L800D5458 -/* 0D604C 800D544C 2B210080 */ slti $at, $t9, 0x80 -/* 0D6050 800D5450 1420FFCA */ bnez $at, .L800D537C -/* 0D6054 800D5454 00000000 */ nop -.L800D5458: -/* 0D6058 800D5458 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D605C 800D545C 17000005 */ bnez $t8, .L800D5474 -/* 0D6060 800D5460 00000000 */ nop -/* 0D6064 800D5464 97AB047C */ lhu $t3, 0x47c($sp) -/* 0D6068 800D5468 24010001 */ li $at, 1 -/* 0D606C 800D546C 11610050 */ beq $t3, $at, .L800D55B0 -/* 0D6070 800D5470 00000000 */ nop -.L800D5474: -/* 0D6074 800D5474 8FAF0488 */ lw $t7, 0x488($sp) -/* 0D6078 800D5478 A7A00260 */ sh $zero, 0x260($sp) -/* 0D607C 800D547C AFA0025C */ sw $zero, 0x25c($sp) -/* 0D6080 800D5480 A7A00262 */ sh $zero, 0x262($sp) -/* 0D6084 800D5484 A3A00264 */ sb $zero, 0x264($sp) -/* 0D6088 800D5488 A7A00266 */ sh $zero, 0x266($sp) -/* 0D608C 800D548C 91E90065 */ lbu $t1, 0x65($t7) -/* 0D6090 800D5490 1120000A */ beqz $t1, .L800D54BC -/* 0D6094 800D5494 00000000 */ nop -/* 0D6098 800D5498 A1E00065 */ sb $zero, 0x65($t7) -/* 0D609C 800D549C 0C035477 */ jal __osPfsSelectBank -/* 0D60A0 800D54A0 8FA40488 */ lw $a0, 0x488($sp) -/* 0D60A4 800D54A4 AFA20480 */ sw $v0, 0x480($sp) -/* 0D60A8 800D54A8 8FA80480 */ lw $t0, 0x480($sp) -/* 0D60AC 800D54AC 11000003 */ beqz $t0, .L800D54BC -/* 0D60B0 800D54B0 00000000 */ nop -/* 0D60B4 800D54B4 10000113 */ b .L800D5904 -/* 0D60B8 800D54B8 01001025 */ move $v0, $t0 -.L800D54BC: -/* 0D60BC 800D54BC 8FAC0488 */ lw $t4, 0x488($sp) -/* 0D60C0 800D54C0 8FAD0484 */ lw $t5, 0x484($sp) -/* 0D60C4 800D54C4 27A7025C */ addiu $a3, $sp, 0x25c -/* 0D60C8 800D54C8 8D8A005C */ lw $t2, 0x5c($t4) -/* 0D60CC 800D54CC 8D840004 */ lw $a0, 4($t4) -/* 0D60D0 800D54D0 8D850008 */ lw $a1, 8($t4) -/* 0D60D4 800D54D4 AFA00010 */ sw $zero, 0x10($sp) -/* 0D60D8 800D54D8 0C035CBC */ jal __osContRamWrite -/* 0D60DC 800D54DC 014D3021 */ addu $a2, $t2, $t5 -/* 0D60E0 800D54E0 AFA20480 */ sw $v0, 0x480($sp) -/* 0D60E4 800D54E4 8FAE0480 */ lw $t6, 0x480($sp) -/* 0D60E8 800D54E8 11C00003 */ beqz $t6, .L800D54F8 -/* 0D60EC 800D54EC 00000000 */ nop -/* 0D60F0 800D54F0 10000104 */ b .L800D5904 -/* 0D60F4 800D54F4 01C01025 */ move $v0, $t6 -.L800D54F8: -/* 0D60F8 800D54F8 8FB90034 */ lw $t9, 0x34($sp) -/* 0D60FC 800D54FC 27380001 */ addiu $t8, $t9, 1 -/* 0D6100 800D5500 1000002B */ b .L800D55B0 -/* 0D6104 800D5504 AFB80034 */ sw $t8, 0x34($sp) -.L800D5508: -/* 0D6108 800D5508 97AB0260 */ lhu $t3, 0x260($sp) -/* 0D610C 800D550C 15600004 */ bnez $t3, .L800D5520 -/* 0D6110 800D5510 00000000 */ nop -/* 0D6114 800D5514 8FA9025C */ lw $t1, 0x25c($sp) -/* 0D6118 800D5518 11200025 */ beqz $t1, .L800D55B0 -/* 0D611C 800D551C 00000000 */ nop -.L800D5520: -/* 0D6120 800D5520 8FAF0488 */ lw $t7, 0x488($sp) -/* 0D6124 800D5524 A7A00260 */ sh $zero, 0x260($sp) -/* 0D6128 800D5528 AFA0025C */ sw $zero, 0x25c($sp) -/* 0D612C 800D552C A7A00262 */ sh $zero, 0x262($sp) -/* 0D6130 800D5530 A3A00264 */ sb $zero, 0x264($sp) -/* 0D6134 800D5534 A7A00266 */ sh $zero, 0x266($sp) -/* 0D6138 800D5538 91E80065 */ lbu $t0, 0x65($t7) -/* 0D613C 800D553C 1100000A */ beqz $t0, .L800D5568 -/* 0D6140 800D5540 00000000 */ nop -/* 0D6144 800D5544 A1E00065 */ sb $zero, 0x65($t7) -/* 0D6148 800D5548 0C035477 */ jal __osPfsSelectBank -/* 0D614C 800D554C 8FA40488 */ lw $a0, 0x488($sp) -/* 0D6150 800D5550 AFA20480 */ sw $v0, 0x480($sp) -/* 0D6154 800D5554 8FAC0480 */ lw $t4, 0x480($sp) -/* 0D6158 800D5558 11800003 */ beqz $t4, .L800D5568 -/* 0D615C 800D555C 00000000 */ nop -/* 0D6160 800D5560 100000E8 */ b .L800D5904 -/* 0D6164 800D5564 01801025 */ move $v0, $t4 -.L800D5568: -/* 0D6168 800D5568 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D616C 800D556C 8FAE0484 */ lw $t6, 0x484($sp) -/* 0D6170 800D5570 27A7025C */ addiu $a3, $sp, 0x25c -/* 0D6174 800D5574 8D4D005C */ lw $t5, 0x5c($t2) -/* 0D6178 800D5578 8D440004 */ lw $a0, 4($t2) -/* 0D617C 800D557C 8D450008 */ lw $a1, 8($t2) -/* 0D6180 800D5580 AFA00010 */ sw $zero, 0x10($sp) -/* 0D6184 800D5584 0C035CBC */ jal __osContRamWrite -/* 0D6188 800D5588 01AE3021 */ addu $a2, $t5, $t6 -/* 0D618C 800D558C AFA20480 */ sw $v0, 0x480($sp) -/* 0D6190 800D5590 8FB90480 */ lw $t9, 0x480($sp) -/* 0D6194 800D5594 13200003 */ beqz $t9, .L800D55A4 -/* 0D6198 800D5598 00000000 */ nop -/* 0D619C 800D559C 100000D9 */ b .L800D5904 -/* 0D61A0 800D55A0 03201025 */ move $v0, $t9 -.L800D55A4: -/* 0D61A4 800D55A4 8FB80034 */ lw $t8, 0x34($sp) -/* 0D61A8 800D55A8 270B0001 */ addiu $t3, $t8, 1 -/* 0D61AC 800D55AC AFAB0034 */ sw $t3, 0x34($sp) -.L800D55B0: -/* 0D61B0 800D55B0 8FA90484 */ lw $t1, 0x484($sp) -/* 0D61B4 800D55B4 8FAF0488 */ lw $t7, 0x488($sp) -/* 0D61B8 800D55B8 25280001 */ addiu $t0, $t1, 1 -/* 0D61BC 800D55BC AFA80484 */ sw $t0, 0x484($sp) -/* 0D61C0 800D55C0 8DEC0050 */ lw $t4, 0x50($t7) -/* 0D61C4 800D55C4 010C082A */ slt $at, $t0, $t4 -/* 0D61C8 800D55C8 1420FF42 */ bnez $at, .L800D52D4 -/* 0D61CC 800D55CC 00000000 */ nop -.L800D55D0: -/* 0D61D0 800D55D0 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D61D4 800D55D4 AFA00484 */ sw $zero, 0x484($sp) -/* 0D61D8 800D55D8 8D4D0050 */ lw $t5, 0x50($t2) -/* 0D61DC 800D55DC 19A0002C */ blez $t5, .L800D5690 -/* 0D61E0 800D55E0 00000000 */ nop -.L800D55E4: -/* 0D61E4 800D55E4 8FAE0488 */ lw $t6, 0x488($sp) -/* 0D61E8 800D55E8 8FB80484 */ lw $t8, 0x484($sp) -/* 0D61EC 800D55EC 27A7025C */ addiu $a3, $sp, 0x25c -/* 0D61F0 800D55F0 8DD9005C */ lw $t9, 0x5c($t6) -/* 0D61F4 800D55F4 8DC40004 */ lw $a0, 4($t6) -/* 0D61F8 800D55F8 8DC50008 */ lw $a1, 8($t6) -/* 0D61FC 800D55FC 0C03572C */ jal __osContRamRead -/* 0D6200 800D5600 03383021 */ addu $a2, $t9, $t8 -/* 0D6204 800D5604 AFA20480 */ sw $v0, 0x480($sp) -/* 0D6208 800D5608 8FAB0480 */ lw $t3, 0x480($sp) -/* 0D620C 800D560C 11600003 */ beqz $t3, .L800D561C -/* 0D6210 800D5610 00000000 */ nop -/* 0D6214 800D5614 100000BB */ b .L800D5904 -/* 0D6218 800D5618 01601025 */ move $v0, $t3 -.L800D561C: -/* 0D621C 800D561C 97A90260 */ lhu $t1, 0x260($sp) -/* 0D6220 800D5620 1120000F */ beqz $t1, .L800D5660 -/* 0D6224 800D5624 00000000 */ nop -/* 0D6228 800D5628 8FAF025C */ lw $t7, 0x25c($sp) -/* 0D622C 800D562C 11E0000C */ beqz $t7, .L800D5660 -/* 0D6230 800D5630 00000000 */ nop -/* 0D6234 800D5634 8FAC0488 */ lw $t4, 0x488($sp) -/* 0D6238 800D5638 97A80262 */ lhu $t0, 0x262($sp) -/* 0D623C 800D563C 958A0062 */ lhu $t2, 0x62($t4) -/* 0D6240 800D5640 010A082A */ slt $at, $t0, $t2 -/* 0D6244 800D5644 14200006 */ bnez $at, .L800D5660 -/* 0D6248 800D5648 00000000 */ nop -/* 0D624C 800D564C 8FAD0484 */ lw $t5, 0x484($sp) -/* 0D6250 800D5650 000D7040 */ sll $t6, $t5, 1 -/* 0D6254 800D5654 03AEC821 */ addu $t9, $sp, $t6 -/* 0D6258 800D5658 10000005 */ b .L800D5670 -/* 0D625C 800D565C A728023C */ sh $t0, 0x23c($t9) -.L800D5660: -/* 0D6260 800D5660 8FB80484 */ lw $t8, 0x484($sp) -/* 0D6264 800D5664 00185840 */ sll $t3, $t8, 1 -/* 0D6268 800D5668 03AB4821 */ addu $t1, $sp, $t3 -/* 0D626C 800D566C A520023C */ sh $zero, 0x23c($t1) -.L800D5670: -/* 0D6270 800D5670 8FAF0484 */ lw $t7, 0x484($sp) -/* 0D6274 800D5674 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D6278 800D5678 25EC0001 */ addiu $t4, $t7, 1 -/* 0D627C 800D567C AFAC0484 */ sw $t4, 0x484($sp) -/* 0D6280 800D5680 8D4D0050 */ lw $t5, 0x50($t2) -/* 0D6284 800D5684 018D082A */ slt $at, $t4, $t5 -/* 0D6288 800D5688 1420FFD6 */ bnez $at, .L800D55E4 -/* 0D628C 800D568C 00000000 */ nop -.L800D5690: -/* 0D6290 800D5690 8FA80488 */ lw $t0, 0x488($sp) -/* 0D6294 800D5694 A3A00033 */ sb $zero, 0x33($sp) -/* 0D6298 800D5698 910E0064 */ lbu $t6, 0x64($t0) -/* 0D629C 800D569C 19C0008B */ blez $t6, .L800D58CC -/* 0D62A0 800D56A0 00000000 */ nop -.L800D56A4: -/* 0D62A4 800D56A4 8FA40488 */ lw $a0, 0x488($sp) -/* 0D62A8 800D56A8 27A5027C */ addiu $a1, $sp, 0x27c -/* 0D62AC 800D56AC 00003025 */ move $a2, $zero -/* 0D62B0 800D56B0 0C0353AF */ jal __osPfsRWInode -/* 0D62B4 800D56B4 93A70033 */ lbu $a3, 0x33($sp) -/* 0D62B8 800D56B8 AFA20480 */ sw $v0, 0x480($sp) -/* 0D62BC 800D56BC 8FB90480 */ lw $t9, 0x480($sp) -/* 0D62C0 800D56C0 13200005 */ beqz $t9, .L800D56D8 -/* 0D62C4 800D56C4 24010003 */ li $at, 3 -/* 0D62C8 800D56C8 13210003 */ beq $t9, $at, .L800D56D8 -/* 0D62CC 800D56CC 00000000 */ nop -/* 0D62D0 800D56D0 1000008C */ b .L800D5904 -/* 0D62D4 800D56D4 03201025 */ move $v0, $t9 -.L800D56D8: -/* 0D62D8 800D56D8 93B80033 */ lbu $t8, 0x33($sp) -/* 0D62DC 800D56DC 1B000004 */ blez $t8, .L800D56F0 -/* 0D62E0 800D56E0 00000000 */ nop -/* 0D62E4 800D56E4 240B0001 */ li $t3, 1 -/* 0D62E8 800D56E8 10000004 */ b .L800D56FC -/* 0D62EC 800D56EC AFAB0024 */ sw $t3, 0x24($sp) -.L800D56F0: -/* 0D62F0 800D56F0 8FA90488 */ lw $t1, 0x488($sp) -/* 0D62F4 800D56F4 8D2F0060 */ lw $t7, 0x60($t1) -/* 0D62F8 800D56F8 AFAF0024 */ sw $t7, 0x24($sp) -.L800D56FC: -/* 0D62FC 800D56FC 8FAA0024 */ lw $t2, 0x24($sp) -/* 0D6300 800D5700 AFA00484 */ sw $zero, 0x484($sp) -/* 0D6304 800D5704 1940000D */ blez $t2, .L800D573C -/* 0D6308 800D5708 00000000 */ nop -.L800D570C: -/* 0D630C 800D570C 8FAC0484 */ lw $t4, 0x484($sp) -/* 0D6310 800D5710 000C6840 */ sll $t5, $t4, 1 -/* 0D6314 800D5714 03AD4021 */ addu $t0, $sp, $t5 -/* 0D6318 800D5718 9508027C */ lhu $t0, 0x27c($t0) -/* 0D631C 800D571C 03AD7021 */ addu $t6, $sp, $t5 -/* 0D6320 800D5720 A5C8037C */ sh $t0, 0x37c($t6) -/* 0D6324 800D5724 8FB90484 */ lw $t9, 0x484($sp) -/* 0D6328 800D5728 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D632C 800D572C 27380001 */ addiu $t8, $t9, 1 -/* 0D6330 800D5730 030B082A */ slt $at, $t8, $t3 -/* 0D6334 800D5734 1420FFF5 */ bnez $at, .L800D570C -/* 0D6338 800D5738 AFB80484 */ sw $t8, 0x484($sp) -.L800D573C: -/* 0D633C 800D573C 8FA90484 */ lw $t1, 0x484($sp) -/* 0D6340 800D5740 29210080 */ slti $at, $t1, 0x80 -/* 0D6344 800D5744 1020000B */ beqz $at, .L800D5774 -/* 0D6348 800D5748 00000000 */ nop -.L800D574C: -/* 0D634C 800D574C 8FAA0484 */ lw $t2, 0x484($sp) -/* 0D6350 800D5750 240F0003 */ li $t7, 3 -/* 0D6354 800D5754 000A6040 */ sll $t4, $t2, 1 -/* 0D6358 800D5758 03AC4021 */ addu $t0, $sp, $t4 -/* 0D635C 800D575C A50F037C */ sh $t7, 0x37c($t0) -/* 0D6360 800D5760 8FAD0484 */ lw $t5, 0x484($sp) -/* 0D6364 800D5764 25AE0001 */ addiu $t6, $t5, 1 -/* 0D6368 800D5768 29C10080 */ slti $at, $t6, 0x80 -/* 0D636C 800D576C 1420FFF7 */ bnez $at, .L800D574C -/* 0D6370 800D5770 AFAE0484 */ sw $t6, 0x484($sp) -.L800D5774: -/* 0D6374 800D5774 8FB90488 */ lw $t9, 0x488($sp) -/* 0D6378 800D5778 AFA00484 */ sw $zero, 0x484($sp) -/* 0D637C 800D577C 8F380050 */ lw $t8, 0x50($t9) -/* 0D6380 800D5780 1B00003E */ blez $t8, .L800D587C -/* 0D6384 800D5784 00000000 */ nop -.L800D5788: -/* 0D6388 800D5788 8FAB0484 */ lw $t3, 0x484($sp) -/* 0D638C 800D578C 27AA023C */ addiu $t2, $sp, 0x23c -/* 0D6390 800D5790 93A80033 */ lbu $t0, 0x33($sp) -/* 0D6394 800D5794 000B4840 */ sll $t1, $t3, 1 -/* 0D6398 800D5798 012A7821 */ addu $t7, $t1, $t2 -/* 0D639C 800D579C 91EC0000 */ lbu $t4, ($t7) -/* 0D63A0 800D57A0 1588002E */ bne $t4, $t0, .L800D585C -/* 0D63A4 800D57A4 00000000 */ nop -/* 0D63A8 800D57A8 8FAE0488 */ lw $t6, 0x488($sp) -/* 0D63AC 800D57AC 95ED0000 */ lhu $t5, ($t7) -/* 0D63B0 800D57B0 95D90062 */ lhu $t9, 0x62($t6) -/* 0D63B4 800D57B4 01B9082A */ slt $at, $t5, $t9 -/* 0D63B8 800D57B8 14200028 */ bnez $at, .L800D585C -/* 0D63BC 800D57BC 00000000 */ nop -.L800D57C0: -/* 0D63C0 800D57C0 8FB80484 */ lw $t8, 0x484($sp) -/* 0D63C4 800D57C4 27A8027C */ addiu $t0, $sp, 0x27c -/* 0D63C8 800D57C8 27AA0020 */ addiu $t2, $sp, 0x20 -/* 0D63CC 800D57CC 00185840 */ sll $t3, $t8, 1 -/* 0D63D0 800D57D0 03AB4821 */ addu $t1, $sp, $t3 -/* 0D63D4 800D57D4 9129023D */ lbu $t1, 0x23d($t1) -/* 0D63D8 800D57D8 00096040 */ sll $t4, $t1, 1 -/* 0D63DC 800D57DC 01887821 */ addu $t7, $t4, $t0 -/* 0D63E0 800D57E0 A3A90023 */ sb $t1, 0x23($sp) -/* 0D63E4 800D57E4 95E10000 */ lhu $at, ($t7) -/* 0D63E8 800D57E8 27A80020 */ addiu $t0, $sp, 0x20 -/* 0D63EC 800D57EC 27A9037C */ addiu $t1, $sp, 0x37c -/* 0D63F0 800D57F0 A5410000 */ sh $at, ($t2) -/* 0D63F4 800D57F4 93B80023 */ lbu $t8, 0x23($sp) -/* 0D63F8 800D57F8 95010000 */ lhu $at, ($t0) -/* 0D63FC 800D57FC 00185840 */ sll $t3, $t8, 1 -/* 0D6400 800D5800 01696021 */ addu $t4, $t3, $t1 -/* 0D6404 800D5804 A5810000 */ sh $at, ($t4) -/* 0D6408 800D5808 8FAF0484 */ lw $t7, 0x484($sp) -/* 0D640C 800D580C 27A90020 */ addiu $t1, $sp, 0x20 -/* 0D6410 800D5810 95210000 */ lhu $at, ($t1) -/* 0D6414 800D5814 27B8023C */ addiu $t8, $sp, 0x23c -/* 0D6418 800D5818 000FC840 */ sll $t9, $t7, 1 -/* 0D641C 800D581C 03385821 */ addu $t3, $t9, $t8 -/* 0D6420 800D5820 A5610000 */ sh $at, ($t3) -/* 0D6424 800D5824 8FA80484 */ lw $t0, 0x484($sp) -/* 0D6428 800D5828 27AF023C */ addiu $t7, $sp, 0x23c -/* 0D642C 800D582C 93AD0033 */ lbu $t5, 0x33($sp) -/* 0D6430 800D5830 00085040 */ sll $t2, $t0, 1 -/* 0D6434 800D5834 014FC821 */ addu $t9, $t2, $t7 -/* 0D6438 800D5838 93380000 */ lbu $t8, ($t9) -/* 0D643C 800D583C 170D0007 */ bne $t8, $t5, .L800D585C -/* 0D6440 800D5840 00000000 */ nop -/* 0D6444 800D5844 8FAB0488 */ lw $t3, 0x488($sp) -/* 0D6448 800D5848 972E0000 */ lhu $t6, ($t9) -/* 0D644C 800D584C 95690062 */ lhu $t1, 0x62($t3) -/* 0D6450 800D5850 01C9082A */ slt $at, $t6, $t1 -/* 0D6454 800D5854 1020FFDA */ beqz $at, .L800D57C0 -/* 0D6458 800D5858 00000000 */ nop -.L800D585C: -/* 0D645C 800D585C 8FAC0484 */ lw $t4, 0x484($sp) -/* 0D6460 800D5860 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D6464 800D5864 25880001 */ addiu $t0, $t4, 1 -/* 0D6468 800D5868 AFA80484 */ sw $t0, 0x484($sp) -/* 0D646C 800D586C 8D4F0050 */ lw $t7, 0x50($t2) -/* 0D6470 800D5870 010F082A */ slt $at, $t0, $t7 -/* 0D6474 800D5874 1420FFC4 */ bnez $at, .L800D5788 -/* 0D6478 800D5878 00000000 */ nop -.L800D587C: -/* 0D647C 800D587C 8FA40488 */ lw $a0, 0x488($sp) -/* 0D6480 800D5880 27A5037C */ addiu $a1, $sp, 0x37c -/* 0D6484 800D5884 24060001 */ li $a2, 1 -/* 0D6488 800D5888 0C0353AF */ jal __osPfsRWInode -/* 0D648C 800D588C 93A70033 */ lbu $a3, 0x33($sp) -/* 0D6490 800D5890 AFA20480 */ sw $v0, 0x480($sp) -/* 0D6494 800D5894 8FB80480 */ lw $t8, 0x480($sp) -/* 0D6498 800D5898 13000003 */ beqz $t8, .L800D58A8 -/* 0D649C 800D589C 00000000 */ nop -/* 0D64A0 800D58A0 10000018 */ b .L800D5904 -/* 0D64A4 800D58A4 03001025 */ move $v0, $t8 -.L800D58A8: -/* 0D64A8 800D58A8 93AD0033 */ lbu $t5, 0x33($sp) -/* 0D64AC 800D58AC 8FAE0488 */ lw $t6, 0x488($sp) -/* 0D64B0 800D58B0 25B90001 */ addiu $t9, $t5, 1 -/* 0D64B4 800D58B4 A3B90033 */ sb $t9, 0x33($sp) -/* 0D64B8 800D58B8 91C90064 */ lbu $t1, 0x64($t6) -/* 0D64BC 800D58BC 332B00FF */ andi $t3, $t9, 0xff -/* 0D64C0 800D58C0 0169082A */ slt $at, $t3, $t1 -/* 0D64C4 800D58C4 1420FF77 */ bnez $at, .L800D56A4 -/* 0D64C8 800D58C8 00000000 */ nop -.L800D58CC: -/* 0D64CC 800D58CC 8FAC0034 */ lw $t4, 0x34($sp) -/* 0D64D0 800D58D0 11800006 */ beqz $t4, .L800D58EC -/* 0D64D4 800D58D4 00000000 */ nop -/* 0D64D8 800D58D8 8FAA0488 */ lw $t2, 0x488($sp) -/* 0D64DC 800D58DC 8D480000 */ lw $t0, ($t2) -/* 0D64E0 800D58E0 350F0002 */ ori $t7, $t0, 2 -/* 0D64E4 800D58E4 10000006 */ b .L800D5900 -/* 0D64E8 800D58E8 AD4F0000 */ sw $t7, ($t2) -.L800D58EC: -/* 0D64EC 800D58EC 8FB80488 */ lw $t8, 0x488($sp) -/* 0D64F0 800D58F0 2401FFFD */ li $at, -3 -/* 0D64F4 800D58F4 8F0D0000 */ lw $t5, ($t8) -/* 0D64F8 800D58F8 01A1C824 */ and $t9, $t5, $at -/* 0D64FC 800D58FC AF190000 */ sw $t9, ($t8) -.L800D5900: -/* 0D6500 800D5900 00001025 */ move $v0, $zero -.L800D5904: -/* 0D6504 800D5904 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D6508 800D5908 27BD0488 */ addiu $sp, $sp, 0x488 -/* 0D650C 800D590C 03E00008 */ jr $ra -/* 0D6510 800D5910 00000000 */ nop - -glabel corrupted_init -/* 0D6514 800D5914 27BDFED0 */ addiu $sp, $sp, -0x130 -/* 0D6518 800D5918 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D651C 800D591C AFA40130 */ sw $a0, 0x130($sp) -/* 0D6520 800D5920 AFA50134 */ sw $a1, 0x134($sp) -/* 0D6524 800D5924 AFA0012C */ sw $zero, 0x12c($sp) -.L800D5928: -/* 0D6528 800D5928 8FAE0134 */ lw $t6, 0x134($sp) -/* 0D652C 800D592C 8FAF012C */ lw $t7, 0x12c($sp) -/* 0D6530 800D5930 01CFC021 */ addu $t8, $t6, $t7 -/* 0D6534 800D5934 A3000101 */ sb $zero, 0x101($t8) -/* 0D6538 800D5938 8FB9012C */ lw $t9, 0x12c($sp) -/* 0D653C 800D593C 27280001 */ addiu $t0, $t9, 1 -/* 0D6540 800D5940 29010100 */ slti $at, $t0, 0x100 -/* 0D6544 800D5944 1420FFF8 */ bnez $at, .L800D5928 -/* 0D6548 800D5948 AFA8012C */ sw $t0, 0x12c($sp) -/* 0D654C 800D594C 8FAA0134 */ lw $t2, 0x134($sp) -/* 0D6550 800D5950 240900FF */ li $t1, 255 -/* 0D6554 800D5954 A1490100 */ sb $t1, 0x100($t2) -/* 0D6558 800D5958 8FAB0130 */ lw $t3, 0x130($sp) -/* 0D655C 800D595C A3A00123 */ sb $zero, 0x123($sp) -/* 0D6560 800D5960 916C0064 */ lbu $t4, 0x64($t3) -/* 0D6564 800D5964 19800053 */ blez $t4, .L800D5AB4 -/* 0D6568 800D5968 00000000 */ nop -.L800D596C: -/* 0D656C 800D596C 93AD0123 */ lbu $t5, 0x123($sp) -/* 0D6570 800D5970 19A00004 */ blez $t5, .L800D5984 -/* 0D6574 800D5974 00000000 */ nop -/* 0D6578 800D5978 240E0001 */ li $t6, 1 -/* 0D657C 800D597C 10000004 */ b .L800D5990 -/* 0D6580 800D5980 AFAE0124 */ sw $t6, 0x124($sp) -.L800D5984: -/* 0D6584 800D5984 8FAF0130 */ lw $t7, 0x130($sp) -/* 0D6588 800D5988 8DF80060 */ lw $t8, 0x60($t7) -/* 0D658C 800D598C AFB80124 */ sw $t8, 0x124($sp) -.L800D5990: -/* 0D6590 800D5990 8FA40130 */ lw $a0, 0x130($sp) -/* 0D6594 800D5994 27A50020 */ addiu $a1, $sp, 0x20 -/* 0D6598 800D5998 00003025 */ move $a2, $zero -/* 0D659C 800D599C 0C0353AF */ jal __osPfsRWInode -/* 0D65A0 800D59A0 93A70123 */ lbu $a3, 0x123($sp) -/* 0D65A4 800D59A4 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D65A8 800D59A8 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D65AC 800D59AC 13200005 */ beqz $t9, .L800D59C4 -/* 0D65B0 800D59B0 24010003 */ li $at, 3 -/* 0D65B4 800D59B4 13210003 */ beq $t9, $at, .L800D59C4 -/* 0D65B8 800D59B8 00000000 */ nop -/* 0D65BC 800D59BC 1000003E */ b .L800D5AB8 -/* 0D65C0 800D59C0 03201025 */ move $v0, $t9 -.L800D59C4: -/* 0D65C4 800D59C4 8FA80124 */ lw $t0, 0x124($sp) -/* 0D65C8 800D59C8 29010080 */ slti $at, $t0, 0x80 -/* 0D65CC 800D59CC 10200030 */ beqz $at, .L800D5A90 -/* 0D65D0 800D59D0 AFA8012C */ sw $t0, 0x12c($sp) -.L800D59D4: -/* 0D65D4 800D59D4 8FAA012C */ lw $t2, 0x12c($sp) -/* 0D65D8 800D59D8 27AC0020 */ addiu $t4, $sp, 0x20 -/* 0D65DC 800D59DC 27A90120 */ addiu $t1, $sp, 0x120 -/* 0D65E0 800D59E0 000A5840 */ sll $t3, $t2, 1 -/* 0D65E4 800D59E4 016C6821 */ addu $t5, $t3, $t4 -/* 0D65E8 800D59E8 95A10000 */ lhu $at, ($t5) -/* 0D65EC 800D59EC A5210000 */ sh $at, ($t1) -/* 0D65F0 800D59F0 8FB90130 */ lw $t9, 0x130($sp) -/* 0D65F4 800D59F4 97B80120 */ lhu $t8, 0x120($sp) -/* 0D65F8 800D59F8 8F280060 */ lw $t0, 0x60($t9) -/* 0D65FC 800D59FC 0308082A */ slt $at, $t8, $t0 -/* 0D6600 800D5A00 1420001E */ bnez $at, .L800D5A7C -/* 0D6604 800D5A04 00000000 */ nop -/* 0D6608 800D5A08 93AA0120 */ lbu $t2, 0x120($sp) -/* 0D660C 800D5A0C 93AB0123 */ lbu $t3, 0x123($sp) -/* 0D6610 800D5A10 114B001A */ beq $t2, $t3, .L800D5A7C -/* 0D6614 800D5A14 00000000 */ nop -/* 0D6618 800D5A18 93AC0121 */ lbu $t4, 0x121($sp) -/* 0D661C 800D5A1C 8FB90134 */ lw $t9, 0x134($sp) -/* 0D6620 800D5A20 05810003 */ bgez $t4, .L800D5A30 -/* 0D6624 800D5A24 000C7083 */ sra $t6, $t4, 2 -/* 0D6628 800D5A28 25810003 */ addiu $at, $t4, 3 -/* 0D662C 800D5A2C 00017083 */ sra $t6, $at, 2 -.L800D5A30: -/* 0D6630 800D5A30 05410004 */ bgez $t2, .L800D5A44 -/* 0D6634 800D5A34 31490007 */ andi $t1, $t2, 7 -/* 0D6638 800D5A38 11200002 */ beqz $t1, .L800D5A44 -/* 0D663C 800D5A3C 00000000 */ nop -/* 0D6640 800D5A40 2529FFF8 */ addiu $t1, $t1, -8 -.L800D5A44: -/* 0D6644 800D5A44 00096940 */ sll $t5, $t1, 5 -/* 0D6648 800D5A48 01CD7821 */ addu $t7, $t6, $t5 -/* 0D664C 800D5A4C AFAF0128 */ sw $t7, 0x128($sp) -/* 0D6650 800D5A50 032FC021 */ addu $t8, $t9, $t7 -/* 0D6654 800D5A54 93080101 */ lbu $t0, 0x101($t8) -/* 0D6658 800D5A58 05610004 */ bgez $t3, .L800D5A6C -/* 0D665C 800D5A5C 316C0007 */ andi $t4, $t3, 7 -/* 0D6660 800D5A60 11800002 */ beqz $t4, .L800D5A6C -/* 0D6664 800D5A64 00000000 */ nop -/* 0D6668 800D5A68 258CFFF8 */ addiu $t4, $t4, -8 -.L800D5A6C: -/* 0D666C 800D5A6C 240A0001 */ li $t2, 1 -/* 0D6670 800D5A70 018A4804 */ sllv $t1, $t2, $t4 -/* 0D6674 800D5A74 01097025 */ or $t6, $t0, $t1 -/* 0D6678 800D5A78 A30E0101 */ sb $t6, 0x101($t8) -.L800D5A7C: -/* 0D667C 800D5A7C 8FAD012C */ lw $t5, 0x12c($sp) -/* 0D6680 800D5A80 25B90001 */ addiu $t9, $t5, 1 -/* 0D6684 800D5A84 2B210080 */ slti $at, $t9, 0x80 -/* 0D6688 800D5A88 1420FFD2 */ bnez $at, .L800D59D4 -/* 0D668C 800D5A8C AFB9012C */ sw $t9, 0x12c($sp) -.L800D5A90: -/* 0D6690 800D5A90 93AF0123 */ lbu $t7, 0x123($sp) -/* 0D6694 800D5A94 8FAC0130 */ lw $t4, 0x130($sp) -/* 0D6698 800D5A98 25EB0001 */ addiu $t3, $t7, 1 -/* 0D669C 800D5A9C A3AB0123 */ sb $t3, 0x123($sp) -/* 0D66A0 800D5AA0 91880064 */ lbu $t0, 0x64($t4) -/* 0D66A4 800D5AA4 316A00FF */ andi $t2, $t3, 0xff -/* 0D66A8 800D5AA8 0148082A */ slt $at, $t2, $t0 -/* 0D66AC 800D5AAC 1420FFAF */ bnez $at, .L800D596C -/* 0D66B0 800D5AB0 00000000 */ nop -.L800D5AB4: -/* 0D66B4 800D5AB4 00001025 */ move $v0, $zero -.L800D5AB8: -/* 0D66B8 800D5AB8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D66BC 800D5ABC 27BD0130 */ addiu $sp, $sp, 0x130 -/* 0D66C0 800D5AC0 03E00008 */ jr $ra -/* 0D66C4 800D5AC4 00000000 */ nop - -glabel corrupted -/* 0D66C8 800D5AC8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D66CC 800D5ACC AFA50034 */ sw $a1, 0x34($sp) -/* 0D66D0 800D5AD0 93B80034 */ lbu $t8, 0x34($sp) -/* 0D66D4 800D5AD4 93AE0035 */ lbu $t6, 0x35($sp) -/* 0D66D8 800D5AD8 AFA40030 */ sw $a0, 0x30($sp) -/* 0D66DC 800D5ADC 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D66E0 800D5AE0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D66E4 800D5AE4 AFA60038 */ sw $a2, 0x38($sp) -/* 0D66E8 800D5AE8 AFA00024 */ sw $zero, 0x24($sp) -/* 0D66EC 800D5AEC AFA00018 */ sw $zero, 0x18($sp) -/* 0D66F0 800D5AF0 05C10003 */ bgez $t6, .L800D5B00 -/* 0D66F4 800D5AF4 000E7883 */ sra $t7, $t6, 2 -/* 0D66F8 800D5AF8 25C10003 */ addiu $at, $t6, 3 -/* 0D66FC 800D5AFC 00017883 */ sra $t7, $at, 2 -.L800D5B00: -/* 0D6700 800D5B00 07010004 */ bgez $t8, .L800D5B14 -/* 0D6704 800D5B04 33190007 */ andi $t9, $t8, 7 -/* 0D6708 800D5B08 13200002 */ beqz $t9, .L800D5B14 -/* 0D670C 800D5B0C 00000000 */ nop -/* 0D6710 800D5B10 2739FFF8 */ addiu $t9, $t9, -8 -.L800D5B14: -/* 0D6714 800D5B14 00194140 */ sll $t0, $t9, 5 -/* 0D6718 800D5B18 01E84821 */ addu $t1, $t7, $t0 -/* 0D671C 800D5B1C AFA90028 */ sw $t1, 0x28($sp) -/* 0D6720 800D5B20 A3A00023 */ sb $zero, 0x23($sp) -/* 0D6724 800D5B24 914B0064 */ lbu $t3, 0x64($t2) -/* 0D6728 800D5B28 1960005C */ blez $t3, .L800D5C9C -/* 0D672C 800D5B2C 00000000 */ nop -.L800D5B30: -/* 0D6730 800D5B30 93AC0023 */ lbu $t4, 0x23($sp) -/* 0D6734 800D5B34 19800004 */ blez $t4, .L800D5B48 -/* 0D6738 800D5B38 00000000 */ nop -/* 0D673C 800D5B3C 240D0001 */ li $t5, 1 -/* 0D6740 800D5B40 10000004 */ b .L800D5B54 -/* 0D6744 800D5B44 AFAD001C */ sw $t5, 0x1c($sp) -.L800D5B48: -/* 0D6748 800D5B48 8FAE0030 */ lw $t6, 0x30($sp) -/* 0D674C 800D5B4C 8DD80060 */ lw $t8, 0x60($t6) -/* 0D6750 800D5B50 AFB8001C */ sw $t8, 0x1c($sp) -.L800D5B54: -/* 0D6754 800D5B54 93B90023 */ lbu $t9, 0x23($sp) -/* 0D6758 800D5B58 93AF0034 */ lbu $t7, 0x34($sp) -/* 0D675C 800D5B5C 132F000F */ beq $t9, $t7, .L800D5B9C -/* 0D6760 800D5B60 00000000 */ nop -/* 0D6764 800D5B64 8FA80038 */ lw $t0, 0x38($sp) -/* 0D6768 800D5B68 8FA90028 */ lw $t1, 0x28($sp) -/* 0D676C 800D5B6C 240D0001 */ li $t5, 1 -/* 0D6770 800D5B70 01095021 */ addu $t2, $t0, $t1 -/* 0D6774 800D5B74 914B0101 */ lbu $t3, 0x101($t2) -/* 0D6778 800D5B78 07210004 */ bgez $t9, .L800D5B8C -/* 0D677C 800D5B7C 332C0007 */ andi $t4, $t9, 7 -/* 0D6780 800D5B80 11800002 */ beqz $t4, .L800D5B8C -/* 0D6784 800D5B84 00000000 */ nop -/* 0D6788 800D5B88 258CFFF8 */ addiu $t4, $t4, -8 -.L800D5B8C: -/* 0D678C 800D5B8C 018D7004 */ sllv $t6, $t5, $t4 -/* 0D6790 800D5B90 016EC024 */ and $t8, $t3, $t6 -/* 0D6794 800D5B94 13000038 */ beqz $t8, .L800D5C78 -/* 0D6798 800D5B98 00000000 */ nop -.L800D5B9C: -/* 0D679C 800D5B9C 8FA80038 */ lw $t0, 0x38($sp) -/* 0D67A0 800D5BA0 93AF0023 */ lbu $t7, 0x23($sp) -/* 0D67A4 800D5BA4 91090100 */ lbu $t1, 0x100($t0) -/* 0D67A8 800D5BA8 11E90011 */ beq $t7, $t1, .L800D5BF0 -/* 0D67AC 800D5BAC 00000000 */ nop -/* 0D67B0 800D5BB0 8FA40030 */ lw $a0, 0x30($sp) -/* 0D67B4 800D5BB4 01002825 */ move $a1, $t0 -/* 0D67B8 800D5BB8 00003025 */ move $a2, $zero -/* 0D67BC 800D5BBC 0C0353AF */ jal __osPfsRWInode -/* 0D67C0 800D5BC0 01E03825 */ move $a3, $t7 -/* 0D67C4 800D5BC4 AFA20018 */ sw $v0, 0x18($sp) -/* 0D67C8 800D5BC8 8FAA0018 */ lw $t2, 0x18($sp) -/* 0D67CC 800D5BCC 11400005 */ beqz $t2, .L800D5BE4 -/* 0D67D0 800D5BD0 24010003 */ li $at, 3 -/* 0D67D4 800D5BD4 11410003 */ beq $t2, $at, .L800D5BE4 -/* 0D67D8 800D5BD8 00000000 */ nop -/* 0D67DC 800D5BDC 10000030 */ b .L800D5CA0 -/* 0D67E0 800D5BE0 01401025 */ move $v0, $t2 -.L800D5BE4: -/* 0D67E4 800D5BE4 93B90023 */ lbu $t9, 0x23($sp) -/* 0D67E8 800D5BE8 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D67EC 800D5BEC A1B90100 */ sb $t9, 0x100($t5) -.L800D5BF0: -/* 0D67F0 800D5BF0 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D67F4 800D5BF4 8FAC001C */ lw $t4, 0x1c($sp) -/* 0D67F8 800D5BF8 29610002 */ slti $at, $t3, 2 -/* 0D67FC 800D5BFC 10200018 */ beqz $at, .L800D5C60 -/* 0D6800 800D5C00 AFAC002C */ sw $t4, 0x2c($sp) -/* 0D6804 800D5C04 29810080 */ slti $at, $t4, 0x80 -/* 0D6808 800D5C08 10200015 */ beqz $at, .L800D5C60 -/* 0D680C 800D5C0C 00000000 */ nop -.L800D5C10: -/* 0D6810 800D5C10 8FB8002C */ lw $t8, 0x2c($sp) -/* 0D6814 800D5C14 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D6818 800D5C18 97AA0034 */ lhu $t2, 0x34($sp) -/* 0D681C 800D5C1C 00184840 */ sll $t1, $t8, 1 -/* 0D6820 800D5C20 01C94021 */ addu $t0, $t6, $t1 -/* 0D6824 800D5C24 950F0000 */ lhu $t7, ($t0) -/* 0D6828 800D5C28 15EA0004 */ bne $t7, $t2, .L800D5C3C -/* 0D682C 800D5C2C 00000000 */ nop -/* 0D6830 800D5C30 8FB90024 */ lw $t9, 0x24($sp) -/* 0D6834 800D5C34 272D0001 */ addiu $t5, $t9, 1 -/* 0D6838 800D5C38 AFAD0024 */ sw $t5, 0x24($sp) -.L800D5C3C: -/* 0D683C 800D5C3C 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D6840 800D5C40 8FB80024 */ lw $t8, 0x24($sp) -/* 0D6844 800D5C44 256C0001 */ addiu $t4, $t3, 1 -/* 0D6848 800D5C48 2B010002 */ slti $at, $t8, 2 -/* 0D684C 800D5C4C 10200004 */ beqz $at, .L800D5C60 -/* 0D6850 800D5C50 AFAC002C */ sw $t4, 0x2c($sp) -/* 0D6854 800D5C54 29810080 */ slti $at, $t4, 0x80 -/* 0D6858 800D5C58 1420FFED */ bnez $at, .L800D5C10 -/* 0D685C 800D5C5C 00000000 */ nop -.L800D5C60: -/* 0D6860 800D5C60 8FAE0024 */ lw $t6, 0x24($sp) -/* 0D6864 800D5C64 29C10002 */ slti $at, $t6, 2 -/* 0D6868 800D5C68 14200003 */ bnez $at, .L800D5C78 -/* 0D686C 800D5C6C 00000000 */ nop -/* 0D6870 800D5C70 1000000B */ b .L800D5CA0 -/* 0D6874 800D5C74 24020002 */ li $v0, 2 -.L800D5C78: -/* 0D6878 800D5C78 93A90023 */ lbu $t1, 0x23($sp) -/* 0D687C 800D5C7C 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D6880 800D5C80 25280001 */ addiu $t0, $t1, 1 -/* 0D6884 800D5C84 A3A80023 */ sb $t0, 0x23($sp) -/* 0D6888 800D5C88 91590064 */ lbu $t9, 0x64($t2) -/* 0D688C 800D5C8C 310F00FF */ andi $t7, $t0, 0xff -/* 0D6890 800D5C90 01F9082A */ slt $at, $t7, $t9 -/* 0D6894 800D5C94 1420FFA6 */ bnez $at, .L800D5B30 -/* 0D6898 800D5C98 00000000 */ nop -.L800D5C9C: -/* 0D689C 800D5C9C 8FA20024 */ lw $v0, 0x24($sp) -.L800D5CA0: -/* 0D68A0 800D5CA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D68A4 800D5CA4 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0D68A8 800D5CA8 03E00008 */ jr $ra -/* 0D68AC 800D5CAC 00000000 */ nop - -glabel __osContRamRead -/* 0D68B0 800D5CB0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0D68B4 800D5CB4 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0D68B8 800D5CB8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D68BC 800D5CBC 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0D68C0 800D5CC0 240F0002 */ li $t7, 2 -/* 0D68C4 800D5CC4 AFA40060 */ sw $a0, 0x60($sp) -/* 0D68C8 800D5CC8 AFA50064 */ sw $a1, 0x64($sp) -/* 0D68CC 800D5CCC AFA60068 */ sw $a2, 0x68($sp) -/* 0D68D0 800D5CD0 AFA7006C */ sw $a3, 0x6c($sp) -/* 0D68D4 800D5CD4 AFB00018 */ sw $s0, 0x18($sp) -/* 0D68D8 800D5CD8 AFA0005C */ sw $zero, 0x5c($sp) -/* 0D68DC 800D5CDC AFAE0054 */ sw $t6, 0x54($sp) -/* 0D68E0 800D5CE0 0C034EE8 */ jal __osSiGetAccess -/* 0D68E4 800D5CE4 AFAF0028 */ sw $t7, 0x28($sp) -/* 0D68E8 800D5CE8 24180002 */ li $t8, 2 -/* 0D68EC 800D5CEC 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0D68F0 800D5CF0 A0386540 */ sb $t8, %lo(_osLastSentSiCmd)($at) -/* 0D68F4 800D5CF4 8FA40064 */ lw $a0, 0x64($sp) -/* 0D68F8 800D5CF8 0C0357BD */ jal func_800D5EF4 -/* 0D68FC 800D5CFC 97A5006A */ lhu $a1, 0x6a($sp) -/* 0D6900 800D5D00 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0D6904 800D5D04 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0D6908 800D5D08 0C034EA8 */ jal __osSiRawStartDma -/* 0D690C 800D5D0C 24040001 */ li $a0, 1 -/* 0D6910 800D5D10 AFA2005C */ sw $v0, 0x5c($sp) -/* 0D6914 800D5D14 8FA40060 */ lw $a0, 0x60($sp) -/* 0D6918 800D5D18 00002825 */ move $a1, $zero -/* 0D691C 800D5D1C 0C0335D4 */ jal osRecvMesg -/* 0D6920 800D5D20 24060001 */ li $a2, 1 -.L800D5D24: -/* 0D6924 800D5D24 AFA00058 */ sw $zero, 0x58($sp) -.L800D5D28: -/* 0D6928 800D5D28 8FA80058 */ lw $t0, 0x58($sp) -/* 0D692C 800D5D2C 8FAA0058 */ lw $t2, 0x58($sp) -/* 0D6930 800D5D30 3C018019 */ lui $at, %hi(D_80196590) # 0x8019 -/* 0D6934 800D5D34 00084880 */ sll $t1, $t0, 2 -/* 0D6938 800D5D38 00290821 */ addu $at, $at, $t1 -/* 0D693C 800D5D3C 241900FF */ li $t9, 255 -/* 0D6940 800D5D40 AC396590 */ sw $t9, %lo(D_80196590)($at) # 0x6590($at) -/* 0D6944 800D5D44 254B0001 */ addiu $t3, $t2, 1 -/* 0D6948 800D5D48 29610010 */ slti $at, $t3, 0x10 -/* 0D694C 800D5D4C 1420FFF6 */ bnez $at, .L800D5D28 -/* 0D6950 800D5D50 AFAB0058 */ sw $t3, 0x58($sp) -/* 0D6954 800D5D54 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 -/* 0D6958 800D5D58 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0D695C 800D5D5C AC2065CC */ sw $zero, %lo(D_801965CC)($at) -/* 0D6960 800D5D60 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0D6964 800D5D64 0C034EA8 */ jal __osSiRawStartDma -/* 0D6968 800D5D68 00002025 */ move $a0, $zero -/* 0D696C 800D5D6C AFA2005C */ sw $v0, 0x5c($sp) -/* 0D6970 800D5D70 8FA40060 */ lw $a0, 0x60($sp) -/* 0D6974 800D5D74 00002825 */ move $a1, $zero -/* 0D6978 800D5D78 0C0335D4 */ jal osRecvMesg -/* 0D697C 800D5D7C 24060001 */ li $a2, 1 -/* 0D6980 800D5D80 8FAD0064 */ lw $t5, 0x64($sp) -/* 0D6984 800D5D84 3C0C8019 */ lui $t4, %hi(D_80196590) # $t4, 0x8019 -/* 0D6988 800D5D88 258C6590 */ addiu $t4, %lo(D_80196590) # addiu $t4, $t4, 0x6590 -/* 0D698C 800D5D8C 11A0000C */ beqz $t5, .L800D5DC0 -/* 0D6990 800D5D90 AFAC0054 */ sw $t4, 0x54($sp) -/* 0D6994 800D5D94 19A0000A */ blez $t5, .L800D5DC0 -/* 0D6998 800D5D98 AFA00058 */ sw $zero, 0x58($sp) -.L800D5D9C: -/* 0D699C 800D5D9C 8FB80058 */ lw $t8, 0x58($sp) -/* 0D69A0 800D5DA0 8FB90064 */ lw $t9, 0x64($sp) -/* 0D69A4 800D5DA4 8FAE0054 */ lw $t6, 0x54($sp) -/* 0D69A8 800D5DA8 27080001 */ addiu $t0, $t8, 1 -/* 0D69AC 800D5DAC 0119082A */ slt $at, $t0, $t9 -/* 0D69B0 800D5DB0 25CF0001 */ addiu $t7, $t6, 1 -/* 0D69B4 800D5DB4 AFA80058 */ sw $t0, 0x58($sp) -/* 0D69B8 800D5DB8 1420FFF8 */ bnez $at, .L800D5D9C -/* 0D69BC 800D5DBC AFAF0054 */ sw $t7, 0x54($sp) -.L800D5DC0: -/* 0D69C0 800D5DC0 8FAA0054 */ lw $t2, 0x54($sp) -/* 0D69C4 800D5DC4 27A9002C */ addiu $t1, $sp, 0x2c -/* 0D69C8 800D5DC8 254C0024 */ addiu $t4, $t2, 0x24 -.L800D5DCC: -/* 0D69CC 800D5DCC 89410000 */ lwl $at, ($t2) -/* 0D69D0 800D5DD0 99410003 */ lwr $at, 3($t2) -/* 0D69D4 800D5DD4 254A000C */ addiu $t2, $t2, 0xc -/* 0D69D8 800D5DD8 2529000C */ addiu $t1, $t1, 0xc -/* 0D69DC 800D5DDC AD21FFF4 */ sw $at, -0xc($t1) -/* 0D69E0 800D5DE0 8941FFF8 */ lwl $at, -8($t2) -/* 0D69E4 800D5DE4 9941FFFB */ lwr $at, -5($t2) -/* 0D69E8 800D5DE8 AD21FFF8 */ sw $at, -8($t1) -/* 0D69EC 800D5DEC 8941FFFC */ lwl $at, -4($t2) -/* 0D69F0 800D5DF0 9941FFFF */ lwr $at, -1($t2) -/* 0D69F4 800D5DF4 154CFFF5 */ bne $t2, $t4, .L800D5DCC -/* 0D69F8 800D5DF8 AD21FFFC */ sw $at, -4($t1) -/* 0D69FC 800D5DFC 89410000 */ lwl $at, ($t2) -/* 0D6A00 800D5E00 99410003 */ lwr $at, 3($t2) -/* 0D6A04 800D5E04 AD210000 */ sw $at, ($t1) -/* 0D6A08 800D5E08 93AD002E */ lbu $t5, 0x2e($sp) -/* 0D6A0C 800D5E0C 31AE00C0 */ andi $t6, $t5, 0xc0 -/* 0D6A10 800D5E10 000E7903 */ sra $t7, $t6, 4 -/* 0D6A14 800D5E14 15E00025 */ bnez $t7, .L800D5EAC -/* 0D6A18 800D5E18 AFAF005C */ sw $t7, 0x5c($sp) -/* 0D6A1C 800D5E1C 27A4002C */ addiu $a0, $sp, 0x2c -/* 0D6A20 800D5E20 0C035FC4 */ jal __osContDataCrc -/* 0D6A24 800D5E24 24840006 */ addiu $a0, $a0, 6 -/* 0D6A28 800D5E28 A3A20027 */ sb $v0, 0x27($sp) -/* 0D6A2C 800D5E2C 93B80027 */ lbu $t8, 0x27($sp) -/* 0D6A30 800D5E30 93A80052 */ lbu $t0, 0x52($sp) -/* 0D6A34 800D5E34 1308000F */ beq $t8, $t0, .L800D5E74 -/* 0D6A38 800D5E38 00000000 */ nop -/* 0D6A3C 800D5E3C 8FA40060 */ lw $a0, 0x60($sp) -/* 0D6A40 800D5E40 0C0339F5 */ jal func_800CE7D4 -/* 0D6A44 800D5E44 8FA50064 */ lw $a1, 0x64($sp) -/* 0D6A48 800D5E48 AFA2005C */ sw $v0, 0x5c($sp) -/* 0D6A4C 800D5E4C 8FB9005C */ lw $t9, 0x5c($sp) -/* 0D6A50 800D5E50 13200005 */ beqz $t9, .L800D5E68 -/* 0D6A54 800D5E54 00000000 */ nop -/* 0D6A58 800D5E58 0C034EF9 */ jal __osSiRelAccess -/* 0D6A5C 800D5E5C 00000000 */ nop -/* 0D6A60 800D5E60 1000001F */ b .L800D5EE0 -/* 0D6A64 800D5E64 8FA2005C */ lw $v0, 0x5c($sp) -.L800D5E68: -/* 0D6A68 800D5E68 240B0004 */ li $t3, 4 -/* 0D6A6C 800D5E6C 1000000F */ b .L800D5EAC -/* 0D6A70 800D5E70 AFAB005C */ sw $t3, 0x5c($sp) -.L800D5E74: -/* 0D6A74 800D5E74 AFA00058 */ sw $zero, 0x58($sp) -.L800D5E78: -/* 0D6A78 800D5E78 8FAC0058 */ lw $t4, 0x58($sp) -/* 0D6A7C 800D5E7C 8FA9006C */ lw $t1, 0x6c($sp) -/* 0D6A80 800D5E80 03AC5021 */ addu $t2, $sp, $t4 -/* 0D6A84 800D5E84 914A0032 */ lbu $t2, 0x32($t2) -/* 0D6A88 800D5E88 A12A0000 */ sb $t2, ($t1) -/* 0D6A8C 800D5E8C 8FAF0058 */ lw $t7, 0x58($sp) -/* 0D6A90 800D5E90 8FAD006C */ lw $t5, 0x6c($sp) -/* 0D6A94 800D5E94 25F80001 */ addiu $t8, $t7, 1 -/* 0D6A98 800D5E98 2B010020 */ slti $at, $t8, 0x20 -/* 0D6A9C 800D5E9C 25AE0001 */ addiu $t6, $t5, 1 -/* 0D6AA0 800D5EA0 AFB80058 */ sw $t8, 0x58($sp) -/* 0D6AA4 800D5EA4 1420FFF4 */ bnez $at, .L800D5E78 -/* 0D6AA8 800D5EA8 AFAE006C */ sw $t6, 0x6c($sp) -.L800D5EAC: -/* 0D6AAC 800D5EAC 8FA8005C */ lw $t0, 0x5c($sp) -/* 0D6AB0 800D5EB0 24010004 */ li $at, 4 -/* 0D6AB4 800D5EB4 15010007 */ bne $t0, $at, .L800D5ED4 -/* 0D6AB8 800D5EB8 00000000 */ nop -/* 0D6ABC 800D5EBC 8FB90028 */ lw $t9, 0x28($sp) -/* 0D6AC0 800D5EC0 2B300000 */ slti $s0, $t9, 0 -/* 0D6AC4 800D5EC4 3A100001 */ xori $s0, $s0, 1 -/* 0D6AC8 800D5EC8 272BFFFF */ addiu $t3, $t9, -1 -/* 0D6ACC 800D5ECC 1600FF95 */ bnez $s0, .L800D5D24 -/* 0D6AD0 800D5ED0 AFAB0028 */ sw $t3, 0x28($sp) -.L800D5ED4: -/* 0D6AD4 800D5ED4 0C034EF9 */ jal __osSiRelAccess -/* 0D6AD8 800D5ED8 00000000 */ nop -/* 0D6ADC 800D5EDC 8FA2005C */ lw $v0, 0x5c($sp) -.L800D5EE0: -/* 0D6AE0 800D5EE0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D6AE4 800D5EE4 8FB00018 */ lw $s0, 0x18($sp) -/* 0D6AE8 800D5EE8 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0D6AEC 800D5EEC 03E00008 */ jr $ra -/* 0D6AF0 800D5EF0 00000000 */ nop - -glabel func_800D5EF4 -/* 0D6AF4 800D5EF4 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D6AF8 800D5EF8 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0D6AFC 800D5EFC 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0D6B00 800D5F00 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D6B04 800D5F04 AFA40048 */ sw $a0, 0x48($sp) -/* 0D6B08 800D5F08 AFA5004C */ sw $a1, 0x4c($sp) -/* 0D6B0C 800D5F0C AFAE0044 */ sw $t6, 0x44($sp) -/* 0D6B10 800D5F10 AFA00018 */ sw $zero, 0x18($sp) -.L800D5F14: -/* 0D6B14 800D5F14 8FAF0018 */ lw $t7, 0x18($sp) -/* 0D6B18 800D5F18 8FB90018 */ lw $t9, 0x18($sp) -/* 0D6B1C 800D5F1C 3C018019 */ lui $at, %hi(D_80196590) # 0x8019 -/* 0D6B20 800D5F20 000FC080 */ sll $t8, $t7, 2 -/* 0D6B24 800D5F24 00380821 */ addu $at, $at, $t8 -/* 0D6B28 800D5F28 AC206590 */ sw $zero, %lo(D_80196590)($at) # 0x6590($at) -/* 0D6B2C 800D5F2C 27280001 */ addiu $t0, $t9, 1 -/* 0D6B30 800D5F30 29010010 */ slti $at, $t0, 0x10 -/* 0D6B34 800D5F34 1420FFF7 */ bnez $at, .L800D5F14 -/* 0D6B38 800D5F38 AFA80018 */ sw $t0, 0x18($sp) -/* 0D6B3C 800D5F3C 24090001 */ li $t1, 1 -/* 0D6B40 800D5F40 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 -/* 0D6B44 800D5F44 240A00FF */ li $t2, 255 -/* 0D6B48 800D5F48 240B0003 */ li $t3, 3 -/* 0D6B4C 800D5F4C 240C0021 */ li $t4, 33 -/* 0D6B50 800D5F50 240D0002 */ li $t5, 2 -/* 0D6B54 800D5F54 AC2965CC */ sw $t1, %lo(D_801965CC)($at) -/* 0D6B58 800D5F58 A3AA001C */ sb $t2, 0x1c($sp) -/* 0D6B5C 800D5F5C A3AB001D */ sb $t3, 0x1d($sp) -/* 0D6B60 800D5F60 A3AC001E */ sb $t4, 0x1e($sp) -/* 0D6B64 800D5F64 A3AD001F */ sb $t5, 0x1f($sp) -/* 0D6B68 800D5F68 0C035F98 */ jal __osContAddressCrc -/* 0D6B6C 800D5F6C 97A4004E */ lhu $a0, 0x4e($sp) -/* 0D6B70 800D5F70 97AE004E */ lhu $t6, 0x4e($sp) -/* 0D6B74 800D5F74 241900FF */ li $t9, 255 -/* 0D6B78 800D5F78 A3B90042 */ sb $t9, 0x42($sp) -/* 0D6B7C 800D5F7C 000E7940 */ sll $t7, $t6, 5 -/* 0D6B80 800D5F80 004FC025 */ or $t8, $v0, $t7 -/* 0D6B84 800D5F84 A7B80020 */ sh $t8, 0x20($sp) -/* 0D6B88 800D5F88 AFA00018 */ sw $zero, 0x18($sp) -.L800D5F8C: -/* 0D6B8C 800D5F8C 8FA90018 */ lw $t1, 0x18($sp) -/* 0D6B90 800D5F90 240800FF */ li $t0, 255 -/* 0D6B94 800D5F94 03A95021 */ addu $t2, $sp, $t1 -/* 0D6B98 800D5F98 A1480022 */ sb $t0, 0x22($t2) -/* 0D6B9C 800D5F9C 8FAB0018 */ lw $t3, 0x18($sp) -/* 0D6BA0 800D5FA0 256C0001 */ addiu $t4, $t3, 1 -/* 0D6BA4 800D5FA4 29810020 */ slti $at, $t4, 0x20 -/* 0D6BA8 800D5FA8 1420FFF8 */ bnez $at, .L800D5F8C -/* 0D6BAC 800D5FAC AFAC0018 */ sw $t4, 0x18($sp) -/* 0D6BB0 800D5FB0 8FAD0048 */ lw $t5, 0x48($sp) -/* 0D6BB4 800D5FB4 11A0000E */ beqz $t5, .L800D5FF0 -/* 0D6BB8 800D5FB8 00000000 */ nop -/* 0D6BBC 800D5FBC 19A0000C */ blez $t5, .L800D5FF0 -/* 0D6BC0 800D5FC0 AFA00018 */ sw $zero, 0x18($sp) -.L800D5FC4: -/* 0D6BC4 800D5FC4 8FAE0044 */ lw $t6, 0x44($sp) -/* 0D6BC8 800D5FC8 A1C00000 */ sb $zero, ($t6) -/* 0D6BCC 800D5FCC 8FB90018 */ lw $t9, 0x18($sp) -/* 0D6BD0 800D5FD0 8FA90048 */ lw $t1, 0x48($sp) -/* 0D6BD4 800D5FD4 8FAF0044 */ lw $t7, 0x44($sp) -/* 0D6BD8 800D5FD8 27280001 */ addiu $t0, $t9, 1 -/* 0D6BDC 800D5FDC 0109082A */ slt $at, $t0, $t1 -/* 0D6BE0 800D5FE0 25F80001 */ addiu $t8, $t7, 1 -/* 0D6BE4 800D5FE4 AFA80018 */ sw $t0, 0x18($sp) -/* 0D6BE8 800D5FE8 1420FFF6 */ bnez $at, .L800D5FC4 -/* 0D6BEC 800D5FEC AFB80044 */ sw $t8, 0x44($sp) -.L800D5FF0: -/* 0D6BF0 800D5FF0 27AB001C */ addiu $t3, $sp, 0x1c -/* 0D6BF4 800D5FF4 256D0024 */ addiu $t5, $t3, 0x24 -/* 0D6BF8 800D5FF8 8FAA0044 */ lw $t2, 0x44($sp) -.L800D5FFC: -/* 0D6BFC 800D5FFC 8D610000 */ lw $at, ($t3) -/* 0D6C00 800D6000 256B000C */ addiu $t3, $t3, 0xc -/* 0D6C04 800D6004 254A000C */ addiu $t2, $t2, 0xc -/* 0D6C08 800D6008 A941FFF4 */ swl $at, -0xc($t2) -/* 0D6C0C 800D600C B941FFF7 */ swr $at, -9($t2) -/* 0D6C10 800D6010 8D61FFF8 */ lw $at, -8($t3) -/* 0D6C14 800D6014 A941FFF8 */ swl $at, -8($t2) -/* 0D6C18 800D6018 B941FFFB */ swr $at, -5($t2) -/* 0D6C1C 800D601C 8D61FFFC */ lw $at, -4($t3) -/* 0D6C20 800D6020 A941FFFC */ swl $at, -4($t2) -/* 0D6C24 800D6024 156DFFF5 */ bne $t3, $t5, .L800D5FFC -/* 0D6C28 800D6028 B941FFFF */ swr $at, -1($t2) -/* 0D6C2C 800D602C 8D610000 */ lw $at, ($t3) -/* 0D6C30 800D6030 241800FE */ li $t8, 254 -/* 0D6C34 800D6034 A9410000 */ swl $at, ($t2) -/* 0D6C38 800D6038 B9410003 */ swr $at, 3($t2) -/* 0D6C3C 800D603C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0D6C40 800D6040 25CF0028 */ addiu $t7, $t6, 0x28 -/* 0D6C44 800D6044 AFAF0044 */ sw $t7, 0x44($sp) -/* 0D6C48 800D6048 A1F80000 */ sb $t8, ($t7) -/* 0D6C4C 800D604C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D6C50 800D6050 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0D6C54 800D6054 03E00008 */ jr $ra -/* 0D6C58 800D6058 00000000 */ nop - -/* 0D6C5C 800D605C 00000000 */ nop -glabel guNormalize -/* 0D6C60 800D6060 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D6C64 800D6064 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D6C68 800D6068 C4820000 */ lwc1 $f2, ($a0) -/* 0D6C6C 800D606C C4AE0000 */ lwc1 $f14, ($a1) -/* 0D6C70 800D6070 C4C00000 */ lwc1 $f0, ($a2) -/* 0D6C74 800D6074 46021102 */ mul.s $f4, $f2, $f2 -/* 0D6C78 800D6078 AFA60020 */ sw $a2, 0x20($sp) -/* 0D6C7C 800D607C AFA5001C */ sw $a1, 0x1c($sp) -/* 0D6C80 800D6080 460E7182 */ mul.s $f6, $f14, $f14 -/* 0D6C84 800D6084 AFA40018 */ sw $a0, 0x18($sp) -/* 0D6C88 800D6088 46000282 */ mul.s $f10, $f0, $f0 -/* 0D6C8C 800D608C 46062200 */ add.s $f8, $f4, $f6 -/* 0D6C90 800D6090 0C033850 */ jal sqrtf -/* 0D6C94 800D6094 46085300 */ add.s $f12, $f10, $f8 -/* 0D6C98 800D6098 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D6C9C 800D609C 44818000 */ mtc1 $at, $f16 -/* 0D6CA0 800D60A0 8FA40018 */ lw $a0, 0x18($sp) -/* 0D6CA4 800D60A4 8FA5001C */ lw $a1, 0x1c($sp) -/* 0D6CA8 800D60A8 46008083 */ div.s $f2, $f16, $f0 -/* 0D6CAC 800D60AC C4920000 */ lwc1 $f18, ($a0) -/* 0D6CB0 800D60B0 8FA60020 */ lw $a2, 0x20($sp) -/* 0D6CB4 800D60B4 46029102 */ mul.s $f4, $f18, $f2 -/* 0D6CB8 800D60B8 E4840000 */ swc1 $f4, ($a0) -/* 0D6CBC 800D60BC C4A60000 */ lwc1 $f6, ($a1) -/* 0D6CC0 800D60C0 46023282 */ mul.s $f10, $f6, $f2 -/* 0D6CC4 800D60C4 E4AA0000 */ swc1 $f10, ($a1) -/* 0D6CC8 800D60C8 C4C80000 */ lwc1 $f8, ($a2) -/* 0D6CCC 800D60CC 46024402 */ mul.s $f16, $f8, $f2 -/* 0D6CD0 800D60D0 E4D00000 */ swc1 $f16, ($a2) -/* 0D6CD4 800D60D4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D6CD8 800D60D8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D6CDC 800D60DC 03E00008 */ jr $ra -/* 0D6CE0 800D60E0 00000000 */ nop - -/* 0D6CE4 800D60E4 00000000 */ nop -/* 0D6CE8 800D60E8 00000000 */ nop -/* 0D6CEC 800D60EC 00000000 */ nop -glabel sinf -/* 0D6CF0 800D60F0 E7AC0000 */ swc1 $f12, ($sp) -/* 0D6CF4 800D60F4 8FA20000 */ lw $v0, ($sp) -/* 0D6CF8 800D60F8 C7A40000 */ lwc1 $f4, ($sp) -/* 0D6CFC 800D60FC 00021D83 */ sra $v1, $v0, 0x16 -/* 0D6D00 800D6100 306E01FF */ andi $t6, $v1, 0x1ff -/* 0D6D04 800D6104 29C100FF */ slti $at, $t6, 0xff -/* 0D6D08 800D6108 10200019 */ beqz $at, .L800D6170 -/* 0D6D0C 800D610C 01C01825 */ move $v1, $t6 -/* 0D6D10 800D6110 29C100E6 */ slti $at, $t6, 0xe6 -/* 0D6D14 800D6114 14200014 */ bnez $at, .L800D6168 -/* 0D6D18 800D6118 460020A1 */ cvt.d.s $f2, $f4 -/* 0D6D1C 800D611C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D6D20 800D6120 3C03800F */ lui $v1, %hi(D_800F3A70) # $v1, 0x800f -/* 0D6D24 800D6124 24633A70 */ addiu $v1, %lo(D_800F3A70) # addiu $v1, $v1, 0x3a70 -/* 0D6D28 800D6128 D4660020 */ ldc1 $f6, 0x20($v1) -/* 0D6D2C 800D612C D46A0018 */ ldc1 $f10, 0x18($v1) -/* 0D6D30 800D6130 D4640010 */ ldc1 $f4, 0x10($v1) -/* 0D6D34 800D6134 462C3202 */ mul.d $f8, $f6, $f12 -/* 0D6D38 800D6138 462A4400 */ add.d $f16, $f8, $f10 -/* 0D6D3C 800D613C D46A0008 */ ldc1 $f10, 8($v1) -/* 0D6D40 800D6140 462C8482 */ mul.d $f18, $f16, $f12 -/* 0D6D44 800D6144 46249180 */ add.d $f6, $f18, $f4 -/* 0D6D48 800D6148 462C3202 */ mul.d $f8, $f6, $f12 -/* 0D6D4C 800D614C 46285380 */ add.d $f14, $f10, $f8 -/* 0D6D50 800D6150 462C1402 */ mul.d $f16, $f2, $f12 -/* 0D6D54 800D6154 00000000 */ nop -/* 0D6D58 800D6158 462E8482 */ mul.d $f18, $f16, $f14 -/* 0D6D5C 800D615C 46229100 */ add.d $f4, $f18, $f2 -/* 0D6D60 800D6160 03E00008 */ jr $ra -/* 0D6D64 800D6164 46202020 */ cvt.s.d $f0, $f4 - -.L800D6168: -/* 0D6D68 800D6168 03E00008 */ jr $ra -/* 0D6D6C 800D616C C7A00000 */ lwc1 $f0, ($sp) - -.L800D6170: -/* 0D6D70 800D6170 28610136 */ slti $at, $v1, 0x136 -/* 0D6D74 800D6174 10200044 */ beqz $at, .L800D6288 -/* 0D6D78 800D6178 C7A40000 */ lwc1 $f4, ($sp) -/* 0D6D7C 800D617C C7A60000 */ lwc1 $f6, ($sp) -/* 0D6D80 800D6180 3C01800F */ lui $at, %hi(D_800F3A98) -/* 0D6D84 800D6184 D42A3A98 */ ldc1 $f10, %lo(D_800F3A98)($at) -/* 0D6D88 800D6188 460030A1 */ cvt.d.s $f2, $f6 -/* 0D6D8C 800D618C 44804800 */ mtc1 $zero, $f9 -/* 0D6D90 800D6190 462A1002 */ mul.d $f0, $f2, $f10 -/* 0D6D94 800D6194 44804000 */ mtc1 $zero, $f8 -/* 0D6D98 800D6198 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D6D9C 800D619C 4620403E */ c.le.d $f8, $f0 -/* 0D6DA0 800D61A0 00000000 */ nop -/* 0D6DA4 800D61A4 4502000B */ bc1fl .L800D61D4 -/* 0D6DA8 800D61A8 44813800 */ mtc1 $at, $f7 -/* 0D6DAC 800D61AC 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D6DB0 800D61B0 44818800 */ mtc1 $at, $f17 -/* 0D6DB4 800D61B4 44808000 */ mtc1 $zero, $f16 -/* 0D6DB8 800D61B8 00000000 */ nop -/* 0D6DBC 800D61BC 46300480 */ add.d $f18, $f0, $f16 -/* 0D6DC0 800D61C0 4620910D */ trunc.w.d $f4, $f18 -/* 0D6DC4 800D61C4 44022000 */ mfc1 $v0, $f4 -/* 0D6DC8 800D61C8 10000009 */ b .L800D61F0 -/* 0D6DCC 800D61CC 44828000 */ mtc1 $v0, $f16 -/* 0D6DD0 800D61D0 44813800 */ mtc1 $at, $f7 -.L800D61D4: -/* 0D6DD4 800D61D4 44803000 */ mtc1 $zero, $f6 -/* 0D6DD8 800D61D8 00000000 */ nop -/* 0D6DDC 800D61DC 46260281 */ sub.d $f10, $f0, $f6 -/* 0D6DE0 800D61E0 4620520D */ trunc.w.d $f8, $f10 -/* 0D6DE4 800D61E4 44024000 */ mfc1 $v0, $f8 -/* 0D6DE8 800D61E8 00000000 */ nop -/* 0D6DEC 800D61EC 44828000 */ mtc1 $v0, $f16 -.L800D61F0: -/* 0D6DF0 800D61F0 3C01800F */ lui $at, %hi(D_800F3AA0) -/* 0D6DF4 800D61F4 D4323AA0 */ ldc1 $f18, %lo(D_800F3AA0)($at) -/* 0D6DF8 800D61F8 46808021 */ cvt.d.w $f0, $f16 -/* 0D6DFC 800D61FC 3C01800F */ lui $at, %hi(D_800F3AA8) -/* 0D6E00 800D6200 D4263AA8 */ ldc1 $f6, %lo(D_800F3AA8)($at) -/* 0D6E04 800D6204 3C03800F */ lui $v1, %hi(D_800F3A70) # $v1, 0x800f -/* 0D6E08 800D6208 24633A70 */ addiu $v1, %lo(D_800F3A70) # addiu $v1, $v1, 0x3a70 -/* 0D6E0C 800D620C 46320102 */ mul.d $f4, $f0, $f18 -/* 0D6E10 800D6210 D4680020 */ ldc1 $f8, 0x20($v1) -/* 0D6E14 800D6214 D4720018 */ ldc1 $f18, 0x18($v1) -/* 0D6E18 800D6218 30590001 */ andi $t9, $v0, 1 -/* 0D6E1C 800D621C 46260282 */ mul.d $f10, $f0, $f6 -/* 0D6E20 800D6220 46241081 */ sub.d $f2, $f2, $f4 -/* 0D6E24 800D6224 462A1081 */ sub.d $f2, $f2, $f10 -/* 0D6E28 800D6228 D46A0010 */ ldc1 $f10, 0x10($v1) -/* 0D6E2C 800D622C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D6E30 800D6230 00000000 */ nop -/* 0D6E34 800D6234 462C4402 */ mul.d $f16, $f8, $f12 -/* 0D6E38 800D6238 46328100 */ add.d $f4, $f16, $f18 -/* 0D6E3C 800D623C D4720008 */ ldc1 $f18, 8($v1) -/* 0D6E40 800D6240 462C2182 */ mul.d $f6, $f4, $f12 -/* 0D6E44 800D6244 462A3200 */ add.d $f8, $f6, $f10 -/* 0D6E48 800D6248 462C4402 */ mul.d $f16, $f8, $f12 -/* 0D6E4C 800D624C 17200007 */ bnez $t9, .L800D626C -/* 0D6E50 800D6250 46309380 */ add.d $f14, $f18, $f16 -/* 0D6E54 800D6254 462C1102 */ mul.d $f4, $f2, $f12 -/* 0D6E58 800D6258 00000000 */ nop -/* 0D6E5C 800D625C 462E2182 */ mul.d $f6, $f4, $f14 -/* 0D6E60 800D6260 46223280 */ add.d $f10, $f6, $f2 -/* 0D6E64 800D6264 03E00008 */ jr $ra -/* 0D6E68 800D6268 46205020 */ cvt.s.d $f0, $f10 - -.L800D626C: -/* 0D6E6C 800D626C 462C1202 */ mul.d $f8, $f2, $f12 -/* 0D6E70 800D6270 00000000 */ nop -/* 0D6E74 800D6274 462E4482 */ mul.d $f18, $f8, $f14 -/* 0D6E78 800D6278 46229400 */ add.d $f16, $f18, $f2 -/* 0D6E7C 800D627C 46208020 */ cvt.s.d $f0, $f16 -/* 0D6E80 800D6280 03E00008 */ jr $ra -/* 0D6E84 800D6284 46000007 */ neg.s $f0, $f0 - -.L800D6288: -/* 0D6E88 800D6288 46042032 */ c.eq.s $f4, $f4 -/* 0D6E8C 800D628C 3C01800F */ lui $at, %hi(D_800F3AB0) -/* 0D6E90 800D6290 45010004 */ bc1t .L800D62A4 -/* 0D6E94 800D6294 00000000 */ nop -/* 0D6E98 800D6298 3C01800F */ lui $at, %hi(D_800F3C90) -/* 0D6E9C 800D629C 03E00008 */ jr $ra -/* 0D6EA0 800D62A0 C4203C90 */ lwc1 $f0, %lo(D_800F3C90)($at) - -.L800D62A4: -/* 0D6EA4 800D62A4 C4203AB0 */ lwc1 $f0, %lo(D_800F3AB0)($at) -/* 0D6EA8 800D62A8 03E00008 */ jr $ra -/* 0D6EAC 800D62AC 00000000 */ nop - -glabel cosf -/* 0D6EB0 800D62B0 E7AC0000 */ swc1 $f12, ($sp) -/* 0D6EB4 800D62B4 8FA20000 */ lw $v0, ($sp) -/* 0D6EB8 800D62B8 C7A60000 */ lwc1 $f6, ($sp) -/* 0D6EBC 800D62BC C7AA0000 */ lwc1 $f10, ($sp) -/* 0D6EC0 800D62C0 00027583 */ sra $t6, $v0, 0x16 -/* 0D6EC4 800D62C4 31CF01FF */ andi $t7, $t6, 0x1ff -/* 0D6EC8 800D62C8 29E10136 */ slti $at, $t7, 0x136 -/* 0D6ECC 800D62CC 50200049 */ beql $at, $zero, .L800D63F4 -/* 0D6ED0 800D62D0 460A5032 */ c.eq.s $f10, $f10 -/* 0D6ED4 800D62D4 44802000 */ mtc1 $zero, $f4 -/* 0D6ED8 800D62D8 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D6EDC 800D62DC 44819800 */ mtc1 $at, $f19 -/* 0D6EE0 800D62E0 4606203C */ c.lt.s $f4, $f6 -/* 0D6EE4 800D62E4 C7A00000 */ lwc1 $f0, ($sp) -/* 0D6EE8 800D62E8 3C01800F */ lui $at, %hi(D_800F3AE8) -/* 0D6EEC 800D62EC 45020004 */ bc1fl .L800D6300 -/* 0D6EF0 800D62F0 46000007 */ neg.s $f0, $f0 -/* 0D6EF4 800D62F4 10000002 */ b .L800D6300 -/* 0D6EF8 800D62F8 46003006 */ mov.s $f0, $f6 -/* 0D6EFC 800D62FC 46000007 */ neg.s $f0, $f0 -.L800D6300: -/* 0D6F00 800D6300 D4283AE8 */ ldc1 $f8, %lo(D_800F3AE8)($at) -/* 0D6F04 800D6304 46000321 */ cvt.d.s $f12, $f0 -/* 0D6F08 800D6308 44809000 */ mtc1 $zero, $f18 -/* 0D6F0C 800D630C 46286282 */ mul.d $f10, $f12, $f8 -/* 0D6F10 800D6310 44802800 */ mtc1 $zero, $f5 -/* 0D6F14 800D6314 44802000 */ mtc1 $zero, $f4 -/* 0D6F18 800D6318 46325380 */ add.d $f14, $f10, $f18 -/* 0D6F1C 800D631C 462E203E */ c.le.d $f4, $f14 -/* 0D6F20 800D6320 00000000 */ nop -/* 0D6F24 800D6324 45020007 */ bc1fl .L800D6344 -/* 0D6F28 800D6328 46327281 */ sub.d $f10, $f14, $f18 -/* 0D6F2C 800D632C 46327180 */ add.d $f6, $f14, $f18 -/* 0D6F30 800D6330 4620320D */ trunc.w.d $f8, $f6 -/* 0D6F34 800D6334 44024000 */ mfc1 $v0, $f8 -/* 0D6F38 800D6338 10000006 */ b .L800D6354 -/* 0D6F3C 800D633C 44823000 */ mtc1 $v0, $f6 -/* 0D6F40 800D6340 46327281 */ sub.d $f10, $f14, $f18 -.L800D6344: -/* 0D6F44 800D6344 4620510D */ trunc.w.d $f4, $f10 -/* 0D6F48 800D6348 44022000 */ mfc1 $v0, $f4 -/* 0D6F4C 800D634C 00000000 */ nop -/* 0D6F50 800D6350 44823000 */ mtc1 $v0, $f6 -.L800D6354: -/* 0D6F54 800D6354 3C01800F */ lui $at, %hi(D_800F3AF0) -/* 0D6F58 800D6358 D42A3AF0 */ ldc1 $f10, %lo(D_800F3AF0)($at) -/* 0D6F5C 800D635C 46803221 */ cvt.d.w $f8, $f6 -/* 0D6F60 800D6360 3C01800F */ lui $at, %hi(D_800F3AF8) -/* 0D6F64 800D6364 D4263AF8 */ ldc1 $f6, %lo(D_800F3AF8)($at) -/* 0D6F68 800D6368 3C03800F */ lui $v1, %hi(D_800F3AC0) # $v1, 0x800f -/* 0D6F6C 800D636C 24633AC0 */ addiu $v1, %lo(D_800F3AC0) # addiu $v1, $v1, 0x3ac0 -/* 0D6F70 800D6370 46324001 */ sub.d $f0, $f8, $f18 -/* 0D6F74 800D6374 30480001 */ andi $t0, $v0, 1 -/* 0D6F78 800D6378 462A0102 */ mul.d $f4, $f0, $f10 -/* 0D6F7C 800D637C D46A0020 */ ldc1 $f10, 0x20($v1) -/* 0D6F80 800D6380 46260202 */ mul.d $f8, $f0, $f6 -/* 0D6F84 800D6384 D4660018 */ ldc1 $f6, 0x18($v1) -/* 0D6F88 800D6388 46246081 */ sub.d $f2, $f12, $f4 -/* 0D6F8C 800D638C 46281081 */ sub.d $f2, $f2, $f8 -/* 0D6F90 800D6390 46221382 */ mul.d $f14, $f2, $f2 -/* 0D6F94 800D6394 00000000 */ nop -/* 0D6F98 800D6398 462E5102 */ mul.d $f4, $f10, $f14 -/* 0D6F9C 800D639C 46262200 */ add.d $f8, $f4, $f6 -/* 0D6FA0 800D63A0 D4640010 */ ldc1 $f4, 0x10($v1) -/* 0D6FA4 800D63A4 462E4282 */ mul.d $f10, $f8, $f14 -/* 0D6FA8 800D63A8 46245180 */ add.d $f6, $f10, $f4 -/* 0D6FAC 800D63AC D46A0008 */ ldc1 $f10, 8($v1) -/* 0D6FB0 800D63B0 462E3202 */ mul.d $f8, $f6, $f14 -/* 0D6FB4 800D63B4 15000007 */ bnez $t0, .L800D63D4 -/* 0D6FB8 800D63B8 46285400 */ add.d $f16, $f10, $f8 -/* 0D6FBC 800D63BC 462E1102 */ mul.d $f4, $f2, $f14 -/* 0D6FC0 800D63C0 00000000 */ nop -/* 0D6FC4 800D63C4 46302182 */ mul.d $f6, $f4, $f16 -/* 0D6FC8 800D63C8 46223280 */ add.d $f10, $f6, $f2 -/* 0D6FCC 800D63CC 03E00008 */ jr $ra -/* 0D6FD0 800D63D0 46205020 */ cvt.s.d $f0, $f10 - -.L800D63D4: -/* 0D6FD4 800D63D4 462E1202 */ mul.d $f8, $f2, $f14 -/* 0D6FD8 800D63D8 00000000 */ nop -/* 0D6FDC 800D63DC 46304102 */ mul.d $f4, $f8, $f16 -/* 0D6FE0 800D63E0 46222180 */ add.d $f6, $f4, $f2 -/* 0D6FE4 800D63E4 46203020 */ cvt.s.d $f0, $f6 -/* 0D6FE8 800D63E8 03E00008 */ jr $ra -/* 0D6FEC 800D63EC 46000007 */ neg.s $f0, $f0 - -/* 0D6FF0 800D63F0 460A5032 */ c.eq.s $f10, $f10 -.L800D63F4: -/* 0D6FF4 800D63F4 3C01800F */ lui $at, %hi(D_800F3B00) -/* 0D6FF8 800D63F8 45010004 */ bc1t .L800D640C -/* 0D6FFC 800D63FC 00000000 */ nop -/* 0D7000 800D6400 3C01800F */ lui $at, %hi(D_800F3C90) -/* 0D7004 800D6404 03E00008 */ jr $ra -/* 0D7008 800D6408 C4203C90 */ lwc1 $f0, %lo(D_800F3C90)($at) - -.L800D640C: -/* 0D700C 800D640C C4203B00 */ lwc1 $f0, %lo(D_800F3B00)($at) -/* 0D7010 800D6410 03E00008 */ jr $ra -/* 0D7014 800D6414 00000000 */ nop - -/* 0D7018 800D6418 00000000 */ nop -/* 0D701C 800D641C 00000000 */ nop -glabel _Printf -/* 0D7020 800D6420 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D7024 800D6424 AFA50020 */ sw $a1, 0x20($sp) -/* 0D7028 800D6428 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D702C 800D642C 30AE00FF */ andi $t6, $a1, 0xff -/* 0D7030 800D6430 29C10026 */ slti $at, $t6, 0x26 -/* 0D7034 800D6434 01C02825 */ move $a1, $t6 -/* 0D7038 800D6438 AE00000C */ sw $zero, 0xc($s0) -/* 0D703C 800D643C AE000010 */ sw $zero, 0x10($s0) -/* 0D7040 800D6440 AE000014 */ sw $zero, 0x14($s0) -/* 0D7044 800D6444 AE000018 */ sw $zero, 0x18($s0) -/* 0D7048 800D6448 AE00001C */ sw $zero, 0x1c($s0) -/* 0D704C 800D644C AE000020 */ sw $zero, 0x20($s0) -/* 0D7050 800D6450 1420000A */ bnez $at, .L800D647C -/* 0D7054 800D6454 01C01825 */ move $v1, $t6 -/* 0D7058 800D6458 25CFFFBB */ addiu $t7, $t6, -0x45 -/* 0D705C 800D645C 2DE10034 */ sltiu $at, $t7, 0x34 -/* 0D7060 800D6460 10200181 */ beqz $at, .L800D6A68 -/* 0D7064 800D6464 000F7880 */ sll $t7, $t7, 2 -/* 0D7068 800D6468 3C01800F */ lui $at, %hi(D_800F3B34) -/* 0D706C 800D646C 002F0821 */ addu $at, $at, $t7 -/* 0D7070 800D6470 8C2F3B34 */ lw $t7, %lo(D_800F3B34)($at) -/* 0D7074 800D6474 01E00008 */ jr $t7 -/* 0D7078 800D6478 00000000 */ nop -.L800D647C: -/* 0D707C 800D647C 24010025 */ li $at, 37 -/* 0D7080 800D6480 50610172 */ beql $v1, $at, .L800D6A4C -/* 0D7084 800D6484 8E18000C */ lw $t8, 0xc($s0) -/* 0D7088 800D6488 10000178 */ b .L800D6A6C -/* 0D708C 800D648C 8E0E000C */ lw $t6, 0xc($s0) -glabel L800D6490 -/* 0D7090 800D6490 8CD80000 */ lw $t8, ($a2) -/* 0D7094 800D6494 2401FFFC */ li $at, -4 -/* 0D7098 800D6498 27190003 */ addiu $t9, $t8, 3 -/* 0D709C 800D649C 03217024 */ and $t6, $t9, $at -/* 0D70A0 800D64A0 25CF0004 */ addiu $t7, $t6, 4 -/* 0D70A4 800D64A4 ACCF0000 */ sw $t7, ($a2) -/* 0D70A8 800D64A8 8E0E000C */ lw $t6, 0xc($s0) -/* 0D70AC 800D64AC 8DF9FFFC */ lw $t9, -4($t7) -/* 0D70B0 800D64B0 00EE7821 */ addu $t7, $a3, $t6 -/* 0D70B4 800D64B4 A1F90000 */ sb $t9, ($t7) -/* 0D70B8 800D64B8 8E18000C */ lw $t8, 0xc($s0) -/* 0D70BC 800D64BC 270E0001 */ addiu $t6, $t8, 1 -/* 0D70C0 800D64C0 1000016F */ b .L800D6A80 -/* 0D70C4 800D64C4 AE0E000C */ sw $t6, 0xc($s0) -glabel L800D64C8 -/* 0D70C8 800D64C8 92020034 */ lbu $v0, 0x34($s0) -/* 0D70CC 800D64CC 2401006C */ li $at, 108 -/* 0D70D0 800D64D0 5441000D */ bnel $v0, $at, .L800D6508 -/* 0D70D4 800D64D4 2401004C */ li $at, 76 -/* 0D70D8 800D64D8 8CD90000 */ lw $t9, ($a2) -/* 0D70DC 800D64DC 2401FFFC */ li $at, -4 -/* 0D70E0 800D64E0 272F0003 */ addiu $t7, $t9, 3 -/* 0D70E4 800D64E4 01E1C024 */ and $t8, $t7, $at -/* 0D70E8 800D64E8 270E0004 */ addiu $t6, $t8, 4 -/* 0D70EC 800D64EC ACCE0000 */ sw $t6, ($a2) -/* 0D70F0 800D64F0 8DCFFFFC */ lw $t7, -4($t6) -/* 0D70F4 800D64F4 000FC7C3 */ sra $t8, $t7, 0x1f -/* 0D70F8 800D64F8 AE180000 */ sw $t8, ($s0) -/* 0D70FC 800D64FC 10000019 */ b .L800D6564 -/* 0D7100 800D6500 AE0F0004 */ sw $t7, 4($s0) -/* 0D7104 800D6504 2401004C */ li $at, 76 -.L800D6508: -/* 0D7108 800D6508 5441000D */ bnel $v0, $at, .L800D6540 -/* 0D710C 800D650C 8CCF0000 */ lw $t7, ($a2) -/* 0D7110 800D6510 8CCE0000 */ lw $t6, ($a2) -/* 0D7114 800D6514 2401FFF8 */ li $at, -8 -/* 0D7118 800D6518 25CF0007 */ addiu $t7, $t6, 7 -/* 0D711C 800D651C 01E1C024 */ and $t8, $t7, $at -/* 0D7120 800D6520 27190008 */ addiu $t9, $t8, 8 -/* 0D7124 800D6524 ACD90000 */ sw $t9, ($a2) -/* 0D7128 800D6528 8F38FFF8 */ lw $t8, -8($t9) -/* 0D712C 800D652C 8F39FFFC */ lw $t9, -4($t9) -/* 0D7130 800D6530 AE180000 */ sw $t8, ($s0) -/* 0D7134 800D6534 1000000B */ b .L800D6564 -/* 0D7138 800D6538 AE190004 */ sw $t9, 4($s0) -/* 0D713C 800D653C 8CCF0000 */ lw $t7, ($a2) -.L800D6540: -/* 0D7140 800D6540 2401FFFC */ li $at, -4 -/* 0D7144 800D6544 25EE0003 */ addiu $t6, $t7, 3 -/* 0D7148 800D6548 01C1C024 */ and $t8, $t6, $at -/* 0D714C 800D654C 27190004 */ addiu $t9, $t8, 4 -/* 0D7150 800D6550 ACD90000 */ sw $t9, ($a2) -/* 0D7154 800D6554 8F2EFFFC */ lw $t6, -4($t9) -/* 0D7158 800D6558 000EC7C3 */ sra $t8, $t6, 0x1f -/* 0D715C 800D655C AE180000 */ sw $t8, ($s0) -/* 0D7160 800D6560 AE0E0004 */ sw $t6, 4($s0) -.L800D6564: -/* 0D7164 800D6564 920F0034 */ lbu $t7, 0x34($s0) -/* 0D7168 800D6568 24010068 */ li $at, 104 -/* 0D716C 800D656C 55E10008 */ bnel $t7, $at, .L800D6590 -/* 0D7170 800D6570 8E0E0000 */ lw $t6, ($s0) -/* 0D7174 800D6574 8E0F0004 */ lw $t7, 4($s0) -/* 0D7178 800D6578 000FCC00 */ sll $t9, $t7, 0x10 -/* 0D717C 800D657C 00197403 */ sra $t6, $t9, 0x10 -/* 0D7180 800D6580 000EC7C3 */ sra $t8, $t6, 0x1f -/* 0D7184 800D6584 AE180000 */ sw $t8, ($s0) -/* 0D7188 800D6588 AE0E0004 */ sw $t6, 4($s0) -/* 0D718C 800D658C 8E0E0000 */ lw $t6, ($s0) -.L800D6590: -/* 0D7190 800D6590 5DC0000E */ bgtzl $t6, .L800D65CC -/* 0D7194 800D6594 8E020030 */ lw $v0, 0x30($s0) -/* 0D7198 800D6598 05C20004 */ bltzl $t6, .L800D65AC -/* 0D719C 800D659C 8E19000C */ lw $t9, 0xc($s0) -/* 0D71A0 800D65A0 1000000A */ b .L800D65CC -/* 0D71A4 800D65A4 8E020030 */ lw $v0, 0x30($s0) -/* 0D71A8 800D65A8 8E19000C */ lw $t9, 0xc($s0) -.L800D65AC: -/* 0D71AC 800D65AC 2418002D */ li $t8, 45 -/* 0D71B0 800D65B0 00F97021 */ addu $t6, $a3, $t9 -/* 0D71B4 800D65B4 A1D80000 */ sb $t8, ($t6) -/* 0D71B8 800D65B8 8E0F000C */ lw $t7, 0xc($s0) -/* 0D71BC 800D65BC 25F90001 */ addiu $t9, $t7, 1 -/* 0D71C0 800D65C0 10000016 */ b .L800D661C -/* 0D71C4 800D65C4 AE19000C */ sw $t9, 0xc($s0) -/* 0D71C8 800D65C8 8E020030 */ lw $v0, 0x30($s0) -.L800D65CC: -/* 0D71CC 800D65CC 30580002 */ andi $t8, $v0, 2 -/* 0D71D0 800D65D0 13000009 */ beqz $t8, .L800D65F8 -/* 0D71D4 800D65D4 304E0001 */ andi $t6, $v0, 1 -/* 0D71D8 800D65D8 8E0F000C */ lw $t7, 0xc($s0) -/* 0D71DC 800D65DC 240E002B */ li $t6, 43 -/* 0D71E0 800D65E0 00EFC821 */ addu $t9, $a3, $t7 -/* 0D71E4 800D65E4 A32E0000 */ sb $t6, ($t9) -/* 0D71E8 800D65E8 8E18000C */ lw $t8, 0xc($s0) -/* 0D71EC 800D65EC 270F0001 */ addiu $t7, $t8, 1 -/* 0D71F0 800D65F0 1000000A */ b .L800D661C -/* 0D71F4 800D65F4 AE0F000C */ sw $t7, 0xc($s0) -.L800D65F8: -/* 0D71F8 800D65F8 51C00009 */ beql $t6, $zero, .L800D6620 -/* 0D71FC 800D65FC 8E19000C */ lw $t9, 0xc($s0) -/* 0D7200 800D6600 8E18000C */ lw $t8, 0xc($s0) -/* 0D7204 800D6604 24190020 */ li $t9, 32 -/* 0D7208 800D6608 00F87821 */ addu $t7, $a3, $t8 -/* 0D720C 800D660C A1F90000 */ sb $t9, ($t7) -/* 0D7210 800D6610 8E0E000C */ lw $t6, 0xc($s0) -/* 0D7214 800D6614 25D80001 */ addiu $t8, $t6, 1 -/* 0D7218 800D6618 AE18000C */ sw $t8, 0xc($s0) -.L800D661C: -/* 0D721C 800D661C 8E19000C */ lw $t9, 0xc($s0) -.L800D6620: -/* 0D7220 800D6620 02002025 */ move $a0, $s0 -/* 0D7224 800D6624 03277821 */ addu $t7, $t9, $a3 -/* 0D7228 800D6628 0C036020 */ jal _Litob -/* 0D722C 800D662C AE0F0008 */ sw $t7, 8($s0) -/* 0D7230 800D6630 10000114 */ b .L800D6A84 -/* 0D7234 800D6634 8FBF0014 */ lw $ra, 0x14($sp) -glabel L800D6638 -/* 0D7238 800D6638 92020034 */ lbu $v0, 0x34($s0) -/* 0D723C 800D663C 2401006C */ li $at, 108 -/* 0D7240 800D6640 5441000D */ bnel $v0, $at, .L800D6678 -/* 0D7244 800D6644 2401004C */ li $at, 76 -/* 0D7248 800D6648 8CCE0000 */ lw $t6, ($a2) -/* 0D724C 800D664C 2401FFFC */ li $at, -4 -/* 0D7250 800D6650 25D80003 */ addiu $t8, $t6, 3 -/* 0D7254 800D6654 0301C824 */ and $t9, $t8, $at -/* 0D7258 800D6658 272F0004 */ addiu $t7, $t9, 4 -/* 0D725C 800D665C ACCF0000 */ sw $t7, ($a2) -/* 0D7260 800D6660 8DF8FFFC */ lw $t8, -4($t7) -/* 0D7264 800D6664 001877C3 */ sra $t6, $t8, 0x1f -/* 0D7268 800D6668 AE0E0000 */ sw $t6, ($s0) -/* 0D726C 800D666C 10000019 */ b .L800D66D4 -/* 0D7270 800D6670 AE180004 */ sw $t8, 4($s0) -/* 0D7274 800D6674 2401004C */ li $at, 76 -.L800D6678: -/* 0D7278 800D6678 5441000D */ bnel $v0, $at, .L800D66B0 -/* 0D727C 800D667C 8CCE0000 */ lw $t6, ($a2) -/* 0D7280 800D6680 8CD90000 */ lw $t9, ($a2) -/* 0D7284 800D6684 2401FFF8 */ li $at, -8 -/* 0D7288 800D6688 27380007 */ addiu $t8, $t9, 7 -/* 0D728C 800D668C 03017024 */ and $t6, $t8, $at -/* 0D7290 800D6690 25CF0008 */ addiu $t7, $t6, 8 -/* 0D7294 800D6694 ACCF0000 */ sw $t7, ($a2) -/* 0D7298 800D6698 8DF9FFFC */ lw $t9, -4($t7) -/* 0D729C 800D669C 8DF8FFF8 */ lw $t8, -8($t7) -/* 0D72A0 800D66A0 AE190004 */ sw $t9, 4($s0) -/* 0D72A4 800D66A4 1000000B */ b .L800D66D4 -/* 0D72A8 800D66A8 AE180000 */ sw $t8, ($s0) -/* 0D72AC 800D66AC 8CCE0000 */ lw $t6, ($a2) -.L800D66B0: -/* 0D72B0 800D66B0 2401FFFC */ li $at, -4 -/* 0D72B4 800D66B4 25CF0003 */ addiu $t7, $t6, 3 -/* 0D72B8 800D66B8 01E1C024 */ and $t8, $t7, $at -/* 0D72BC 800D66BC 27190004 */ addiu $t9, $t8, 4 -/* 0D72C0 800D66C0 ACD90000 */ sw $t9, ($a2) -/* 0D72C4 800D66C4 8F2FFFFC */ lw $t7, -4($t9) -/* 0D72C8 800D66C8 000FC7C3 */ sra $t8, $t7, 0x1f -/* 0D72CC 800D66CC AE180000 */ sw $t8, ($s0) -/* 0D72D0 800D66D0 AE0F0004 */ sw $t7, 4($s0) -.L800D66D4: -/* 0D72D4 800D66D4 92020034 */ lbu $v0, 0x34($s0) -/* 0D72D8 800D66D8 24010068 */ li $at, 104 -/* 0D72DC 800D66DC 14410007 */ bne $v0, $at, .L800D66FC -/* 0D72E0 800D66E0 00000000 */ nop -/* 0D72E4 800D66E4 8E0F0004 */ lw $t7, 4($s0) -/* 0D72E8 800D66E8 240E0000 */ li $t6, 0 -/* 0D72EC 800D66EC AE0E0000 */ sw $t6, ($s0) -/* 0D72F0 800D66F0 31F9FFFF */ andi $t9, $t7, 0xffff -/* 0D72F4 800D66F4 10000007 */ b .L800D6714 -/* 0D72F8 800D66F8 AE190004 */ sw $t9, 4($s0) -.L800D66FC: -/* 0D72FC 800D66FC 54400006 */ bnel $v0, $zero, .L800D6718 -/* 0D7300 800D6700 8E0F0030 */ lw $t7, 0x30($s0) -/* 0D7304 800D6704 8E190004 */ lw $t9, 4($s0) -/* 0D7308 800D6708 24180000 */ li $t8, 0 -/* 0D730C 800D670C AE180000 */ sw $t8, ($s0) -/* 0D7310 800D6710 AE190004 */ sw $t9, 4($s0) -.L800D6714: -/* 0D7314 800D6714 8E0F0030 */ lw $t7, 0x30($s0) -.L800D6718: -/* 0D7318 800D6718 31EE0008 */ andi $t6, $t7, 8 -/* 0D731C 800D671C 51C00014 */ beql $t6, $zero, .L800D6770 -/* 0D7320 800D6720 8E18000C */ lw $t8, 0xc($s0) -/* 0D7324 800D6724 8E19000C */ lw $t9, 0xc($s0) -/* 0D7328 800D6728 24180030 */ li $t8, 48 -/* 0D732C 800D672C 24010078 */ li $at, 120 -/* 0D7330 800D6730 00F97821 */ addu $t7, $a3, $t9 -/* 0D7334 800D6734 A1F80000 */ sb $t8, ($t7) -/* 0D7338 800D6738 8E0E000C */ lw $t6, 0xc($s0) -/* 0D733C 800D673C 25D90001 */ addiu $t9, $t6, 1 -/* 0D7340 800D6740 10610004 */ beq $v1, $at, .L800D6754 -/* 0D7344 800D6744 AE19000C */ sw $t9, 0xc($s0) -/* 0D7348 800D6748 24010058 */ li $at, 88 -/* 0D734C 800D674C 54610008 */ bnel $v1, $at, .L800D6770 -/* 0D7350 800D6750 8E18000C */ lw $t8, 0xc($s0) -.L800D6754: -/* 0D7354 800D6754 8E18000C */ lw $t8, 0xc($s0) -/* 0D7358 800D6758 00F87821 */ addu $t7, $a3, $t8 -/* 0D735C 800D675C A1E50000 */ sb $a1, ($t7) -/* 0D7360 800D6760 8E0E000C */ lw $t6, 0xc($s0) -/* 0D7364 800D6764 25D90001 */ addiu $t9, $t6, 1 -/* 0D7368 800D6768 AE19000C */ sw $t9, 0xc($s0) -/* 0D736C 800D676C 8E18000C */ lw $t8, 0xc($s0) -.L800D6770: -/* 0D7370 800D6770 02002025 */ move $a0, $s0 -/* 0D7374 800D6774 03077821 */ addu $t7, $t8, $a3 -/* 0D7378 800D6778 0C036020 */ jal _Litob -/* 0D737C 800D677C AE0F0008 */ sw $t7, 8($s0) -/* 0D7380 800D6780 100000C0 */ b .L800D6A84 -/* 0D7384 800D6784 8FBF0014 */ lw $ra, 0x14($sp) -glabel L800D6788 -/* 0D7388 800D6788 920E0034 */ lbu $t6, 0x34($s0) -/* 0D738C 800D678C 2401004C */ li $at, 76 -/* 0D7390 800D6790 55C10019 */ bnel $t6, $at, .L800D67F8 -/* 0D7394 800D6794 8CC20000 */ lw $v0, ($a2) -/* 0D7398 800D6798 8CC20000 */ lw $v0, ($a2) -/* 0D739C 800D679C 30590001 */ andi $t9, $v0, 1 -/* 0D73A0 800D67A0 13200005 */ beqz $t9, .L800D67B8 -/* 0D73A4 800D67A4 00401825 */ move $v1, $v0 -/* 0D73A8 800D67A8 24780007 */ addiu $t8, $v1, 7 -/* 0D73AC 800D67AC ACD80000 */ sw $t8, ($a2) -/* 0D73B0 800D67B0 1000000D */ b .L800D67E8 -/* 0D73B4 800D67B4 2702FFEA */ addiu $v0, $t8, -0x16 -.L800D67B8: -/* 0D73B8 800D67B8 306F0002 */ andi $t7, $v1, 2 -/* 0D73BC 800D67BC 11E00005 */ beqz $t7, .L800D67D4 -/* 0D73C0 800D67C0 24590007 */ addiu $t9, $v0, 7 -/* 0D73C4 800D67C4 246E000A */ addiu $t6, $v1, 0xa -/* 0D73C8 800D67C8 ACCE0000 */ sw $t6, ($a2) -/* 0D73CC 800D67CC 10000005 */ b .L800D67E4 -/* 0D73D0 800D67D0 25C4FFD8 */ addiu $a0, $t6, -0x28 -.L800D67D4: -/* 0D73D4 800D67D4 2401FFF8 */ li $at, -8 -/* 0D73D8 800D67D8 0321C024 */ and $t8, $t9, $at -/* 0D73DC 800D67DC 27040008 */ addiu $a0, $t8, 8 -/* 0D73E0 800D67E0 ACC40000 */ sw $a0, ($a2) -.L800D67E4: -/* 0D73E4 800D67E4 00801025 */ move $v0, $a0 -.L800D67E8: -/* 0D73E8 800D67E8 D444FFF8 */ ldc1 $f4, -8($v0) -/* 0D73EC 800D67EC 10000017 */ b .L800D684C -/* 0D73F0 800D67F0 F6040000 */ sdc1 $f4, ($s0) -/* 0D73F4 800D67F4 8CC20000 */ lw $v0, ($a2) -.L800D67F8: -/* 0D73F8 800D67F8 304E0001 */ andi $t6, $v0, 1 -/* 0D73FC 800D67FC 11C00005 */ beqz $t6, .L800D6814 -/* 0D7400 800D6800 00401825 */ move $v1, $v0 -/* 0D7404 800D6804 24790007 */ addiu $t9, $v1, 7 -/* 0D7408 800D6808 ACD90000 */ sw $t9, ($a2) -/* 0D740C 800D680C 1000000D */ b .L800D6844 -/* 0D7410 800D6810 2722FFEA */ addiu $v0, $t9, -0x16 -.L800D6814: -/* 0D7414 800D6814 30780002 */ andi $t8, $v1, 2 -/* 0D7418 800D6818 13000005 */ beqz $t8, .L800D6830 -/* 0D741C 800D681C 244E0007 */ addiu $t6, $v0, 7 -/* 0D7420 800D6820 246F000A */ addiu $t7, $v1, 0xa -/* 0D7424 800D6824 ACCF0000 */ sw $t7, ($a2) -/* 0D7428 800D6828 10000005 */ b .L800D6840 -/* 0D742C 800D682C 25E4FFD8 */ addiu $a0, $t7, -0x28 -.L800D6830: -/* 0D7430 800D6830 2401FFF8 */ li $at, -8 -/* 0D7434 800D6834 01C1C824 */ and $t9, $t6, $at -/* 0D7438 800D6838 27240008 */ addiu $a0, $t9, 8 -/* 0D743C 800D683C ACC40000 */ sw $a0, ($a2) -.L800D6840: -/* 0D7440 800D6840 00801025 */ move $v0, $a0 -.L800D6844: -/* 0D7444 800D6844 D446FFF8 */ ldc1 $f6, -8($v0) -/* 0D7448 800D6848 F6060000 */ sdc1 $f6, ($s0) -.L800D684C: -/* 0D744C 800D684C 960F0000 */ lhu $t7, ($s0) -/* 0D7450 800D6850 31EE8000 */ andi $t6, $t7, 0x8000 -/* 0D7454 800D6854 51C0000A */ beql $t6, $zero, .L800D6880 -/* 0D7458 800D6858 8E020030 */ lw $v0, 0x30($s0) -/* 0D745C 800D685C 8E18000C */ lw $t8, 0xc($s0) -/* 0D7460 800D6860 2419002D */ li $t9, 45 -/* 0D7464 800D6864 00F87821 */ addu $t7, $a3, $t8 -/* 0D7468 800D6868 A1F90000 */ sb $t9, ($t7) -/* 0D746C 800D686C 8E0E000C */ lw $t6, 0xc($s0) -/* 0D7470 800D6870 25D80001 */ addiu $t8, $t6, 1 -/* 0D7474 800D6874 10000016 */ b .L800D68D0 -/* 0D7478 800D6878 AE18000C */ sw $t8, 0xc($s0) -/* 0D747C 800D687C 8E020030 */ lw $v0, 0x30($s0) -.L800D6880: -/* 0D7480 800D6880 30590002 */ andi $t9, $v0, 2 -/* 0D7484 800D6884 13200009 */ beqz $t9, .L800D68AC -/* 0D7488 800D6888 304F0001 */ andi $t7, $v0, 1 -/* 0D748C 800D688C 8E0E000C */ lw $t6, 0xc($s0) -/* 0D7490 800D6890 240F002B */ li $t7, 43 -/* 0D7494 800D6894 00EEC021 */ addu $t8, $a3, $t6 -/* 0D7498 800D6898 A30F0000 */ sb $t7, ($t8) -/* 0D749C 800D689C 8E19000C */ lw $t9, 0xc($s0) -/* 0D74A0 800D68A0 272E0001 */ addiu $t6, $t9, 1 -/* 0D74A4 800D68A4 1000000A */ b .L800D68D0 -/* 0D74A8 800D68A8 AE0E000C */ sw $t6, 0xc($s0) -.L800D68AC: -/* 0D74AC 800D68AC 51E00009 */ beql $t7, $zero, .L800D68D4 -/* 0D74B0 800D68B0 8E18000C */ lw $t8, 0xc($s0) -/* 0D74B4 800D68B4 8E19000C */ lw $t9, 0xc($s0) -/* 0D74B8 800D68B8 24180020 */ li $t8, 32 -/* 0D74BC 800D68BC 00F97021 */ addu $t6, $a3, $t9 -/* 0D74C0 800D68C0 A1D80000 */ sb $t8, ($t6) -/* 0D74C4 800D68C4 8E0F000C */ lw $t7, 0xc($s0) -/* 0D74C8 800D68C8 25F90001 */ addiu $t9, $t7, 1 -/* 0D74CC 800D68CC AE19000C */ sw $t9, 0xc($s0) -.L800D68D0: -/* 0D74D0 800D68D0 8E18000C */ lw $t8, 0xc($s0) -.L800D68D4: -/* 0D74D4 800D68D4 02002025 */ move $a0, $s0 -/* 0D74D8 800D68D8 03077021 */ addu $t6, $t8, $a3 -/* 0D74DC 800D68DC 0C036224 */ jal func_800D8890 -/* 0D74E0 800D68E0 AE0E0008 */ sw $t6, 8($s0) -/* 0D74E4 800D68E4 10000067 */ b .L800D6A84 -/* 0D74E8 800D68E8 8FBF0014 */ lw $ra, 0x14($sp) -glabel L800D68EC -/* 0D74EC 800D68EC 92020034 */ lbu $v0, 0x34($s0) -/* 0D74F0 800D68F0 24010068 */ li $at, 104 -/* 0D74F4 800D68F4 5441000C */ bnel $v0, $at, .L800D6928 -/* 0D74F8 800D68F8 2401006C */ li $at, 108 -/* 0D74FC 800D68FC 8CCF0000 */ lw $t7, ($a2) -/* 0D7500 800D6900 2401FFFC */ li $at, -4 -/* 0D7504 800D6904 25F90003 */ addiu $t9, $t7, 3 -/* 0D7508 800D6908 0321C024 */ and $t8, $t9, $at -/* 0D750C 800D690C 270E0004 */ addiu $t6, $t8, 4 -/* 0D7510 800D6910 ACCE0000 */ sw $t6, ($a2) -/* 0D7514 800D6914 8DD9FFFC */ lw $t9, -4($t6) -/* 0D7518 800D6918 8E0F002C */ lw $t7, 0x2c($s0) -/* 0D751C 800D691C 10000058 */ b .L800D6A80 -/* 0D7520 800D6920 A72F0000 */ sh $t7, ($t9) -/* 0D7524 800D6924 2401006C */ li $at, 108 -.L800D6928: -/* 0D7528 800D6928 5441000C */ bnel $v0, $at, .L800D695C -/* 0D752C 800D692C 2401004C */ li $at, 76 -/* 0D7530 800D6930 8CD80000 */ lw $t8, ($a2) -/* 0D7534 800D6934 2401FFFC */ li $at, -4 -/* 0D7538 800D6938 270E0003 */ addiu $t6, $t8, 3 -/* 0D753C 800D693C 01C17824 */ and $t7, $t6, $at -/* 0D7540 800D6940 25F90004 */ addiu $t9, $t7, 4 -/* 0D7544 800D6944 ACD90000 */ sw $t9, ($a2) -/* 0D7548 800D6948 8F2EFFFC */ lw $t6, -4($t9) -/* 0D754C 800D694C 8E18002C */ lw $t8, 0x2c($s0) -/* 0D7550 800D6950 1000004B */ b .L800D6A80 -/* 0D7554 800D6954 ADD80000 */ sw $t8, ($t6) -/* 0D7558 800D6958 2401004C */ li $at, 76 -.L800D695C: -/* 0D755C 800D695C 5441000E */ bnel $v0, $at, .L800D6998 -/* 0D7560 800D6960 8CCF0000 */ lw $t7, ($a2) -/* 0D7564 800D6964 8CCF0000 */ lw $t7, ($a2) -/* 0D7568 800D6968 2401FFFC */ li $at, -4 -/* 0D756C 800D696C 25F90003 */ addiu $t9, $t7, 3 -/* 0D7570 800D6970 0321C024 */ and $t8, $t9, $at -/* 0D7574 800D6974 270E0004 */ addiu $t6, $t8, 4 -/* 0D7578 800D6978 ACCE0000 */ sw $t6, ($a2) -/* 0D757C 800D697C 8DCEFFFC */ lw $t6, -4($t6) -/* 0D7580 800D6980 8E0F002C */ lw $t7, 0x2c($s0) -/* 0D7584 800D6984 24180000 */ li $t8, 0 -/* 0D7588 800D6988 ADD80000 */ sw $t8, ($t6) -/* 0D758C 800D698C 1000003C */ b .L800D6A80 -/* 0D7590 800D6990 ADCF0004 */ sw $t7, 4($t6) -/* 0D7594 800D6994 8CCF0000 */ lw $t7, ($a2) -.L800D6998: -/* 0D7598 800D6998 2401FFFC */ li $at, -4 -/* 0D759C 800D699C 25F80003 */ addiu $t8, $t7, 3 -/* 0D75A0 800D69A0 0301C824 */ and $t9, $t8, $at -/* 0D75A4 800D69A4 272E0004 */ addiu $t6, $t9, 4 -/* 0D75A8 800D69A8 ACCE0000 */ sw $t6, ($a2) -/* 0D75AC 800D69AC 8DD8FFFC */ lw $t8, -4($t6) -/* 0D75B0 800D69B0 8E0F002C */ lw $t7, 0x2c($s0) -/* 0D75B4 800D69B4 10000032 */ b .L800D6A80 -/* 0D75B8 800D69B8 AF0F0000 */ sw $t7, ($t8) -glabel L800D69BC -/* 0D75BC 800D69BC 8CD90000 */ lw $t9, ($a2) -/* 0D75C0 800D69C0 2401FFFC */ li $at, -4 -/* 0D75C4 800D69C4 02002025 */ move $a0, $s0 -/* 0D75C8 800D69C8 272E0003 */ addiu $t6, $t9, 3 -/* 0D75CC 800D69CC 01C17824 */ and $t7, $t6, $at -/* 0D75D0 800D69D0 25F80004 */ addiu $t8, $t7, 4 -/* 0D75D4 800D69D4 ACD80000 */ sw $t8, ($a2) -/* 0D75D8 800D69D8 8F0EFFFC */ lw $t6, -4($t8) -/* 0D75DC 800D69DC 8E0F000C */ lw $t7, 0xc($s0) -/* 0D75E0 800D69E0 24050078 */ li $a1, 120 -/* 0D75E4 800D69E4 000EC7C3 */ sra $t8, $t6, 0x1f -/* 0D75E8 800D69E8 AE0E0004 */ sw $t6, 4($s0) -/* 0D75EC 800D69EC 01E77021 */ addu $t6, $t7, $a3 -/* 0D75F0 800D69F0 AE180000 */ sw $t8, ($s0) -/* 0D75F4 800D69F4 0C036020 */ jal _Litob -/* 0D75F8 800D69F8 AE0E0008 */ sw $t6, 8($s0) -/* 0D75FC 800D69FC 10000021 */ b .L800D6A84 -/* 0D7600 800D6A00 8FBF0014 */ lw $ra, 0x14($sp) -glabel L800D6A04 -/* 0D7604 800D6A04 8CD80000 */ lw $t8, ($a2) -/* 0D7608 800D6A08 2401FFFC */ li $at, -4 -/* 0D760C 800D6A0C 27190003 */ addiu $t9, $t8, 3 -/* 0D7610 800D6A10 03217824 */ and $t7, $t9, $at -/* 0D7614 800D6A14 25EE0004 */ addiu $t6, $t7, 4 -/* 0D7618 800D6A18 ACCE0000 */ sw $t6, ($a2) -/* 0D761C 800D6A1C 8DC4FFFC */ lw $a0, -4($t6) -/* 0D7620 800D6A20 0C036003 */ jal strlen -/* 0D7624 800D6A24 AE040008 */ sw $a0, 8($s0) -/* 0D7628 800D6A28 8E030024 */ lw $v1, 0x24($s0) -/* 0D762C 800D6A2C AE020014 */ sw $v0, 0x14($s0) -/* 0D7630 800D6A30 04600013 */ bltz $v1, .L800D6A80 -/* 0D7634 800D6A34 0062082A */ slt $at, $v1, $v0 -/* 0D7638 800D6A38 50200012 */ beql $at, $zero, .L800D6A84 -/* 0D763C 800D6A3C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D7640 800D6A40 1000000F */ b .L800D6A80 -/* 0D7644 800D6A44 AE030014 */ sw $v1, 0x14($s0) -/* 0D7648 800D6A48 8E18000C */ lw $t8, 0xc($s0) -.L800D6A4C: -/* 0D764C 800D6A4C 240E0025 */ li $t6, 37 -/* 0D7650 800D6A50 00F8C821 */ addu $t9, $a3, $t8 -/* 0D7654 800D6A54 A32E0000 */ sb $t6, ($t9) -/* 0D7658 800D6A58 8E0F000C */ lw $t7, 0xc($s0) -/* 0D765C 800D6A5C 25F80001 */ addiu $t8, $t7, 1 -/* 0D7660 800D6A60 10000007 */ b .L800D6A80 -/* 0D7664 800D6A64 AE18000C */ sw $t8, 0xc($s0) -.L800D6A68: -glabel L800D6A68 -/* 0D7668 800D6A68 8E0E000C */ lw $t6, 0xc($s0) -.L800D6A6C: -/* 0D766C 800D6A6C 00EEC821 */ addu $t9, $a3, $t6 -/* 0D7670 800D6A70 A3250000 */ sb $a1, ($t9) -/* 0D7674 800D6A74 8E0F000C */ lw $t7, 0xc($s0) -/* 0D7678 800D6A78 25F80001 */ addiu $t8, $t7, 1 -/* 0D767C 800D6A7C AE18000C */ sw $t8, 0xc($s0) -.L800D6A80: -/* 0D7680 800D6A80 8FBF0014 */ lw $ra, 0x14($sp) -.L800D6A84: -/* 0D7684 800D6A84 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D7688 800D6A88 03E00008 */ jr $ra -/* 0D768C 800D6A8C 00000000 */ nop - -glabel _vprintf -/* 0D7690 800D6A90 27BDFF20 */ addiu $sp, $sp, -0xe0 -/* 0D7694 800D6A94 AFB70034 */ sw $s7, 0x34($sp) -/* 0D7698 800D6A98 AFB60030 */ sw $s6, 0x30($sp) -/* 0D769C 800D6A9C AFB5002C */ sw $s5, 0x2c($sp) -/* 0D76A0 800D6AA0 AFBE0038 */ sw $fp, 0x38($sp) -/* 0D76A4 800D6AA4 AFB40028 */ sw $s4, 0x28($sp) -/* 0D76A8 800D6AA8 AFB30024 */ sw $s3, 0x24($sp) -/* 0D76AC 800D6AAC AFA700EC */ sw $a3, 0xec($sp) -/* 0D76B0 800D6AB0 3C15800F */ lui $s5, %hi(D_800EB484) # $s5, 0x800f -/* 0D76B4 800D6AB4 3C16800F */ lui $s6, %hi(D_800F3B14) # $s6, 0x800f -/* 0D76B8 800D6AB8 3C17800F */ lui $s7, %hi(D_800EB460) # $s7, 0x800f -/* 0D76BC 800D6ABC 00C03825 */ move $a3, $a2 -/* 0D76C0 800D6AC0 00A09825 */ move $s3, $a1 -/* 0D76C4 800D6AC4 0080A025 */ move $s4, $a0 -/* 0D76C8 800D6AC8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D76CC 800D6ACC AFB20020 */ sw $s2, 0x20($sp) -/* 0D76D0 800D6AD0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D76D4 800D6AD4 AFB00018 */ sw $s0, 0x18($sp) -/* 0D76D8 800D6AD8 AFA600E8 */ sw $a2, 0xe8($sp) -/* 0D76DC 800D6ADC AFA000D4 */ sw $zero, 0xd4($sp) -/* 0D76E0 800D6AE0 26F7B460 */ addiu $s7, %lo(D_800EB460) # addiu $s7, $s7, -0x4ba0 -/* 0D76E4 800D6AE4 26D63B14 */ addiu $s6, %lo(D_800F3B14) # addiu $s6, $s6, 0x3b14 -/* 0D76E8 800D6AE8 26B5B484 */ addiu $s5, %lo(D_800EB484) # addiu $s5, $s5, -0x4b7c -/* 0D76EC 800D6AEC 241E000A */ li $fp, 10 -.L800D6AF0: -/* 0D76F0 800D6AF0 90F00000 */ lbu $s0, ($a3) -/* 0D76F4 800D6AF4 24F20001 */ addiu $s2, $a3, 1 -/* 0D76F8 800D6AF8 24030025 */ li $v1, 37 -/* 0D76FC 800D6AFC 1A000009 */ blez $s0, .L800D6B24 -/* 0D7700 800D6B00 02602025 */ move $a0, $s3 -.L800D6B04: -/* 0D7704 800D6B04 54700004 */ bnel $v1, $s0, .L800D6B18 -/* 0D7708 800D6B08 92500000 */ lbu $s0, ($s2) -/* 0D770C 800D6B0C 10000005 */ b .L800D6B24 -/* 0D7710 800D6B10 2652FFFF */ addiu $s2, $s2, -1 -/* 0D7714 800D6B14 92500000 */ lbu $s0, ($s2) -.L800D6B18: -/* 0D7718 800D6B18 26520001 */ addiu $s2, $s2, 1 -/* 0D771C 800D6B1C 1E00FFF9 */ bgtz $s0, .L800D6B04 -/* 0D7720 800D6B20 00000000 */ nop -.L800D6B24: -/* 0D7724 800D6B24 02471023 */ subu $v0, $s2, $a3 -/* 0D7728 800D6B28 1840000C */ blez $v0, .L800D6B5C -/* 0D772C 800D6B2C 00E02825 */ move $a1, $a3 -/* 0D7730 800D6B30 00408825 */ move $s1, $v0 -/* 0D7734 800D6B34 0280F809 */ jalr $s4 -/* 0D7738 800D6B38 00403025 */ move $a2, $v0 -/* 0D773C 800D6B3C 10400005 */ beqz $v0, .L800D6B54 -/* 0D7740 800D6B40 00409825 */ move $s3, $v0 -/* 0D7744 800D6B44 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0D7748 800D6B48 01D17821 */ addu $t7, $t6, $s1 -/* 0D774C 800D6B4C 10000003 */ b .L800D6B5C -/* 0D7750 800D6B50 AFAF00D4 */ sw $t7, 0xd4($sp) -.L800D6B54: -/* 0D7754 800D6B54 10000153 */ b .L800D70A4 -/* 0D7758 800D6B58 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6B5C: -/* 0D775C 800D6B5C 16000003 */ bnez $s0, .L800D6B6C -/* 0D7760 800D6B60 26520001 */ addiu $s2, $s2, 1 -/* 0D7764 800D6B64 1000014F */ b .L800D70A4 -/* 0D7768 800D6B68 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6B6C: -/* 0D776C 800D6B6C AFA000D8 */ sw $zero, 0xd8($sp) -/* 0D7770 800D6B70 92450000 */ lbu $a1, ($s2) -/* 0D7774 800D6B74 0C03600D */ jal strchr -/* 0D7778 800D6B78 02C02025 */ move $a0, $s6 -/* 0D777C 800D6B7C 1040000F */ beqz $v0, .L800D6BBC -/* 0D7780 800D6B80 00408025 */ move $s0, $v0 -.L800D6B84: -/* 0D7784 800D6B84 0216C823 */ subu $t9, $s0, $s6 -/* 0D7788 800D6B88 00197080 */ sll $t6, $t9, 2 -/* 0D778C 800D6B8C 3C0F800F */ lui $t7, %hi(D_800F3B1C) -/* 0D7790 800D6B90 01EE7821 */ addu $t7, $t7, $t6 -/* 0D7794 800D6B94 8DEF3B1C */ lw $t7, %lo(D_800F3B1C)($t7) -/* 0D7798 800D6B98 8FB800D8 */ lw $t8, 0xd8($sp) -/* 0D779C 800D6B9C 26520001 */ addiu $s2, $s2, 1 -/* 0D77A0 800D6BA0 02C02025 */ move $a0, $s6 -/* 0D77A4 800D6BA4 030FC825 */ or $t9, $t8, $t7 -/* 0D77A8 800D6BA8 AFB900D8 */ sw $t9, 0xd8($sp) -/* 0D77AC 800D6BAC 0C03600D */ jal strchr -/* 0D77B0 800D6BB0 92450000 */ lbu $a1, ($s2) -/* 0D77B4 800D6BB4 1440FFF3 */ bnez $v0, .L800D6B84 -/* 0D77B8 800D6BB8 00408025 */ move $s0, $v0 -.L800D6BBC: -/* 0D77BC 800D6BBC 924E0000 */ lbu $t6, ($s2) -/* 0D77C0 800D6BC0 2402002A */ li $v0, 42 -/* 0D77C4 800D6BC4 8FB800EC */ lw $t8, 0xec($sp) -/* 0D77C8 800D6BC8 144E0011 */ bne $v0, $t6, .L800D6C10 -/* 0D77CC 800D6BCC 3C04800F */ lui $a0, %hi(D_800F3B10) # $a0, 0x800f -/* 0D77D0 800D6BD0 270F0003 */ addiu $t7, $t8, 3 -/* 0D77D4 800D6BD4 2401FFFC */ li $at, -4 -/* 0D77D8 800D6BD8 01E1C824 */ and $t9, $t7, $at -/* 0D77DC 800D6BDC 272E0004 */ addiu $t6, $t9, 4 -/* 0D77E0 800D6BE0 AFAE00EC */ sw $t6, 0xec($sp) -/* 0D77E4 800D6BE4 8F380000 */ lw $t8, ($t9) -/* 0D77E8 800D6BE8 26520001 */ addiu $s2, $s2, 1 -/* 0D77EC 800D6BEC 07010006 */ bgez $t8, .L800D6C08 -/* 0D77F0 800D6BF0 AFB800D0 */ sw $t8, 0xd0($sp) -/* 0D77F4 800D6BF4 8FAE00D8 */ lw $t6, 0xd8($sp) -/* 0D77F8 800D6BF8 00187823 */ negu $t7, $t8 -/* 0D77FC 800D6BFC AFAF00D0 */ sw $t7, 0xd0($sp) -/* 0D7800 800D6C00 35D90004 */ ori $t9, $t6, 4 -/* 0D7804 800D6C04 AFB900D8 */ sw $t9, 0xd8($sp) -.L800D6C08: -/* 0D7808 800D6C08 10000018 */ b .L800D6C6C -/* 0D780C 800D6C0C 92450000 */ lbu $a1, ($s2) -.L800D6C10: -/* 0D7810 800D6C10 AFA000D0 */ sw $zero, 0xd0($sp) -/* 0D7814 800D6C14 92450000 */ lbu $a1, ($s2) -/* 0D7818 800D6C18 28A10030 */ slti $at, $a1, 0x30 -/* 0D781C 800D6C1C 14200013 */ bnez $at, .L800D6C6C -/* 0D7820 800D6C20 28A1003A */ slti $at, $a1, 0x3a -/* 0D7824 800D6C24 50200012 */ beql $at, $zero, .L800D6C70 -/* 0D7828 800D6C28 2401002E */ li $at, 46 -/* 0D782C 800D6C2C 8FB800D0 */ lw $t8, 0xd0($sp) -.L800D6C30: -/* 0D7830 800D6C30 2B0103E7 */ slti $at, $t8, 0x3e7 -/* 0D7834 800D6C34 50200007 */ beql $at, $zero, .L800D6C54 -/* 0D7838 800D6C38 92450001 */ lbu $a1, 1($s2) -/* 0D783C 800D6C3C 031E0019 */ multu $t8, $fp -/* 0D7840 800D6C40 00007812 */ mflo $t7 -/* 0D7844 800D6C44 00AF7021 */ addu $t6, $a1, $t7 -/* 0D7848 800D6C48 25D9FFD0 */ addiu $t9, $t6, -0x30 -/* 0D784C 800D6C4C AFB900D0 */ sw $t9, 0xd0($sp) -/* 0D7850 800D6C50 92450001 */ lbu $a1, 1($s2) -.L800D6C54: -/* 0D7854 800D6C54 26520001 */ addiu $s2, $s2, 1 -/* 0D7858 800D6C58 28A10030 */ slti $at, $a1, 0x30 -/* 0D785C 800D6C5C 14200003 */ bnez $at, .L800D6C6C -/* 0D7860 800D6C60 28A1003A */ slti $at, $a1, 0x3a -/* 0D7864 800D6C64 5420FFF2 */ bnel $at, $zero, .L800D6C30 -/* 0D7868 800D6C68 8FB800D0 */ lw $t8, 0xd0($sp) -.L800D6C6C: -/* 0D786C 800D6C6C 2401002E */ li $at, 46 -.L800D6C70: -/* 0D7870 800D6C70 10A10004 */ beq $a1, $at, .L800D6C84 -/* 0D7874 800D6C74 2418FFFF */ li $t8, -1 -/* 0D7878 800D6C78 AFB800CC */ sw $t8, 0xcc($sp) -/* 0D787C 800D6C7C 10000026 */ b .L800D6D18 -/* 0D7880 800D6C80 92450000 */ lbu $a1, ($s2) -.L800D6C84: -/* 0D7884 800D6C84 924F0001 */ lbu $t7, 1($s2) -/* 0D7888 800D6C88 8FAE00EC */ lw $t6, 0xec($sp) -/* 0D788C 800D6C8C 26520001 */ addiu $s2, $s2, 1 -/* 0D7890 800D6C90 144F000A */ bne $v0, $t7, .L800D6CBC -/* 0D7894 800D6C94 25D90003 */ addiu $t9, $t6, 3 -/* 0D7898 800D6C98 2401FFFC */ li $at, -4 -/* 0D789C 800D6C9C 0321C024 */ and $t8, $t9, $at -/* 0D78A0 800D6CA0 270F0004 */ addiu $t7, $t8, 4 -/* 0D78A4 800D6CA4 AFAF00EC */ sw $t7, 0xec($sp) -/* 0D78A8 800D6CA8 8F0E0000 */ lw $t6, ($t8) -/* 0D78AC 800D6CAC 26520001 */ addiu $s2, $s2, 1 -/* 0D78B0 800D6CB0 AFAE00CC */ sw $t6, 0xcc($sp) -/* 0D78B4 800D6CB4 10000018 */ b .L800D6D18 -/* 0D78B8 800D6CB8 92450000 */ lbu $a1, ($s2) -.L800D6CBC: -/* 0D78BC 800D6CBC AFA000CC */ sw $zero, 0xcc($sp) -/* 0D78C0 800D6CC0 92450000 */ lbu $a1, ($s2) -/* 0D78C4 800D6CC4 28A10030 */ slti $at, $a1, 0x30 -/* 0D78C8 800D6CC8 14200013 */ bnez $at, .L800D6D18 -/* 0D78CC 800D6CCC 28A1003A */ slti $at, $a1, 0x3a -/* 0D78D0 800D6CD0 10200011 */ beqz $at, .L800D6D18 -/* 0D78D4 800D6CD4 00000000 */ nop -/* 0D78D8 800D6CD8 8FB900CC */ lw $t9, 0xcc($sp) -.L800D6CDC: -/* 0D78DC 800D6CDC 2B2103E7 */ slti $at, $t9, 0x3e7 -/* 0D78E0 800D6CE0 50200007 */ beql $at, $zero, .L800D6D00 -/* 0D78E4 800D6CE4 92450001 */ lbu $a1, 1($s2) -/* 0D78E8 800D6CE8 033E0019 */ multu $t9, $fp -/* 0D78EC 800D6CEC 00007812 */ mflo $t7 -/* 0D78F0 800D6CF0 00AFC021 */ addu $t8, $a1, $t7 -/* 0D78F4 800D6CF4 270EFFD0 */ addiu $t6, $t8, -0x30 -/* 0D78F8 800D6CF8 AFAE00CC */ sw $t6, 0xcc($sp) -/* 0D78FC 800D6CFC 92450001 */ lbu $a1, 1($s2) -.L800D6D00: -/* 0D7900 800D6D00 26520001 */ addiu $s2, $s2, 1 -/* 0D7904 800D6D04 28A10030 */ slti $at, $a1, 0x30 -/* 0D7908 800D6D08 14200003 */ bnez $at, .L800D6D18 -/* 0D790C 800D6D0C 28A1003A */ slti $at, $a1, 0x3a -/* 0D7910 800D6D10 5420FFF2 */ bnel $at, $zero, .L800D6CDC -/* 0D7914 800D6D14 8FB900CC */ lw $t9, 0xcc($sp) -.L800D6D18: -/* 0D7918 800D6D18 0C03600D */ jal strchr -/* 0D791C 800D6D1C 24843B10 */ addiu $a0, %lo(D_800F3B10) # addiu $a0, $a0, 0x3b10 -/* 0D7920 800D6D20 10400005 */ beqz $v0, .L800D6D38 -/* 0D7924 800D6D24 27B000A8 */ addiu $s0, $sp, 0xa8 -/* 0D7928 800D6D28 92590000 */ lbu $t9, ($s2) -/* 0D792C 800D6D2C 26520001 */ addiu $s2, $s2, 1 -/* 0D7930 800D6D30 10000002 */ b .L800D6D3C -/* 0D7934 800D6D34 A3B900DC */ sb $t9, 0xdc($sp) -.L800D6D38: -/* 0D7938 800D6D38 A3A000DC */ sb $zero, 0xdc($sp) -.L800D6D3C: -/* 0D793C 800D6D3C 93AF00DC */ lbu $t7, 0xdc($sp) -/* 0D7940 800D6D40 2402006C */ li $v0, 108 -/* 0D7944 800D6D44 27A600EC */ addiu $a2, $sp, 0xec -/* 0D7948 800D6D48 144F0007 */ bne $v0, $t7, .L800D6D68 -/* 0D794C 800D6D4C 27A7007C */ addiu $a3, $sp, 0x7c -/* 0D7950 800D6D50 92580000 */ lbu $t8, ($s2) -/* 0D7954 800D6D54 240E004C */ li $t6, 76 -/* 0D7958 800D6D58 14580003 */ bne $v0, $t8, .L800D6D68 -/* 0D795C 800D6D5C 00000000 */ nop -/* 0D7960 800D6D60 A3AE00DC */ sb $t6, 0xdc($sp) -/* 0D7964 800D6D64 26520001 */ addiu $s2, $s2, 1 -.L800D6D68: -/* 0D7968 800D6D68 0C035908 */ jal _Printf -/* 0D796C 800D6D6C 92450000 */ lbu $a1, ($s2) -/* 0D7970 800D6D70 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D7974 800D6D74 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 0D7978 800D6D78 8FAE00B8 */ lw $t6, 0xb8($sp) -/* 0D797C 800D6D7C 032FC023 */ subu $t8, $t9, $t7 -/* 0D7980 800D6D80 8FAF00BC */ lw $t7, 0xbc($sp) -/* 0D7984 800D6D84 030EC823 */ subu $t9, $t8, $t6 -/* 0D7988 800D6D88 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0D798C 800D6D8C 032FC023 */ subu $t8, $t9, $t7 -/* 0D7990 800D6D90 8FAF00C4 */ lw $t7, 0xc4($sp) -/* 0D7994 800D6D94 030EC823 */ subu $t9, $t8, $t6 -/* 0D7998 800D6D98 8FAE00C8 */ lw $t6, 0xc8($sp) -/* 0D799C 800D6D9C 032FC023 */ subu $t8, $t9, $t7 -/* 0D79A0 800D6DA0 8FAF00D8 */ lw $t7, 0xd8($sp) -/* 0D79A4 800D6DA4 030EC823 */ subu $t9, $t8, $t6 -/* 0D79A8 800D6DA8 AFB900D0 */ sw $t9, 0xd0($sp) -/* 0D79AC 800D6DAC 31F80004 */ andi $t8, $t7, 4 -/* 0D79B0 800D6DB0 1700001A */ bnez $t8, .L800D6E1C -/* 0D79B4 800D6DB4 0019702A */ slt $t6, $zero, $t9 -/* 0D79B8 800D6DB8 51C00019 */ beql $t6, $zero, .L800D6E20 -/* 0D79BC 800D6DBC 8FB900B4 */ lw $t9, 0xb4($sp) -/* 0D79C0 800D6DC0 11C00016 */ beqz $t6, .L800D6E1C -/* 0D79C4 800D6DC4 03208825 */ move $s1, $t9 -/* 0D79C8 800D6DC8 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6DCC: -/* 0D79CC 800D6DCC 14200003 */ bnez $at, .L800D6DDC -/* 0D79D0 800D6DD0 02208025 */ move $s0, $s1 -/* 0D79D4 800D6DD4 10000001 */ b .L800D6DDC -/* 0D79D8 800D6DD8 24100020 */ li $s0, 32 -.L800D6DDC: -/* 0D79DC 800D6DDC 1A00000C */ blez $s0, .L800D6E10 -/* 0D79E0 800D6DE0 02602025 */ move $a0, $s3 -/* 0D79E4 800D6DE4 02E02825 */ move $a1, $s7 -/* 0D79E8 800D6DE8 0280F809 */ jalr $s4 -/* 0D79EC 800D6DEC 02003025 */ move $a2, $s0 -/* 0D79F0 800D6DF0 10400005 */ beqz $v0, .L800D6E08 -/* 0D79F4 800D6DF4 00409825 */ move $s3, $v0 -/* 0D79F8 800D6DF8 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0D79FC 800D6DFC 01F0C021 */ addu $t8, $t7, $s0 -/* 0D7A00 800D6E00 10000003 */ b .L800D6E10 -/* 0D7A04 800D6E04 AFB800D4 */ sw $t8, 0xd4($sp) -.L800D6E08: -/* 0D7A08 800D6E08 100000A6 */ b .L800D70A4 -/* 0D7A0C 800D6E0C 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6E10: -/* 0D7A10 800D6E10 02308823 */ subu $s1, $s1, $s0 -/* 0D7A14 800D6E14 5E20FFED */ bgtzl $s1, .L800D6DCC -/* 0D7A18 800D6E18 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6E1C: -/* 0D7A1C 800D6E1C 8FB900B4 */ lw $t9, 0xb4($sp) -.L800D6E20: -/* 0D7A20 800D6E20 02602025 */ move $a0, $s3 -/* 0D7A24 800D6E24 27A5007C */ addiu $a1, $sp, 0x7c -/* 0D7A28 800D6E28 5B20000D */ blezl $t9, .L800D6E60 -/* 0D7A2C 800D6E2C 8FB900B8 */ lw $t9, 0xb8($sp) -/* 0D7A30 800D6E30 0280F809 */ jalr $s4 -/* 0D7A34 800D6E34 03203025 */ move $a2, $t9 -/* 0D7A38 800D6E38 10400006 */ beqz $v0, .L800D6E54 -/* 0D7A3C 800D6E3C 00409825 */ move $s3, $v0 -/* 0D7A40 800D6E40 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0D7A44 800D6E44 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 0D7A48 800D6E48 01CFC021 */ addu $t8, $t6, $t7 -/* 0D7A4C 800D6E4C 10000003 */ b .L800D6E5C -/* 0D7A50 800D6E50 AFB800D4 */ sw $t8, 0xd4($sp) -.L800D6E54: -/* 0D7A54 800D6E54 10000093 */ b .L800D70A4 -/* 0D7A58 800D6E58 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6E5C: -/* 0D7A5C 800D6E5C 8FB900B8 */ lw $t9, 0xb8($sp) -.L800D6E60: -/* 0D7A60 800D6E60 0019702A */ slt $t6, $zero, $t9 -/* 0D7A64 800D6E64 51C00019 */ beql $t6, $zero, .L800D6ECC -/* 0D7A68 800D6E68 8FB900BC */ lw $t9, 0xbc($sp) -/* 0D7A6C 800D6E6C 11C00016 */ beqz $t6, .L800D6EC8 -/* 0D7A70 800D6E70 03208825 */ move $s1, $t9 -/* 0D7A74 800D6E74 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6E78: -/* 0D7A78 800D6E78 14200003 */ bnez $at, .L800D6E88 -/* 0D7A7C 800D6E7C 02208025 */ move $s0, $s1 -/* 0D7A80 800D6E80 10000001 */ b .L800D6E88 -/* 0D7A84 800D6E84 24100020 */ li $s0, 32 -.L800D6E88: -/* 0D7A88 800D6E88 1A00000C */ blez $s0, .L800D6EBC -/* 0D7A8C 800D6E8C 02602025 */ move $a0, $s3 -/* 0D7A90 800D6E90 02A02825 */ move $a1, $s5 -/* 0D7A94 800D6E94 0280F809 */ jalr $s4 -/* 0D7A98 800D6E98 02003025 */ move $a2, $s0 -/* 0D7A9C 800D6E9C 10400005 */ beqz $v0, .L800D6EB4 -/* 0D7AA0 800D6EA0 00409825 */ move $s3, $v0 -/* 0D7AA4 800D6EA4 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0D7AA8 800D6EA8 01F0C021 */ addu $t8, $t7, $s0 -/* 0D7AAC 800D6EAC 10000003 */ b .L800D6EBC -/* 0D7AB0 800D6EB0 AFB800D4 */ sw $t8, 0xd4($sp) -.L800D6EB4: -/* 0D7AB4 800D6EB4 1000007B */ b .L800D70A4 -/* 0D7AB8 800D6EB8 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6EBC: -/* 0D7ABC 800D6EBC 02308823 */ subu $s1, $s1, $s0 -/* 0D7AC0 800D6EC0 5E20FFED */ bgtzl $s1, .L800D6E78 -/* 0D7AC4 800D6EC4 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6EC8: -/* 0D7AC8 800D6EC8 8FB900BC */ lw $t9, 0xbc($sp) -.L800D6ECC: -/* 0D7ACC 800D6ECC 02602025 */ move $a0, $s3 -/* 0D7AD0 800D6ED0 8FA500B0 */ lw $a1, 0xb0($sp) -/* 0D7AD4 800D6ED4 5B20000D */ blezl $t9, .L800D6F0C -/* 0D7AD8 800D6ED8 8FB900C0 */ lw $t9, 0xc0($sp) -/* 0D7ADC 800D6EDC 0280F809 */ jalr $s4 -/* 0D7AE0 800D6EE0 03203025 */ move $a2, $t9 -/* 0D7AE4 800D6EE4 10400006 */ beqz $v0, .L800D6F00 -/* 0D7AE8 800D6EE8 00409825 */ move $s3, $v0 -/* 0D7AEC 800D6EEC 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0D7AF0 800D6EF0 8FAF00BC */ lw $t7, 0xbc($sp) -/* 0D7AF4 800D6EF4 01CFC021 */ addu $t8, $t6, $t7 -/* 0D7AF8 800D6EF8 10000003 */ b .L800D6F08 -/* 0D7AFC 800D6EFC AFB800D4 */ sw $t8, 0xd4($sp) -.L800D6F00: -/* 0D7B00 800D6F00 10000068 */ b .L800D70A4 -/* 0D7B04 800D6F04 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6F08: -/* 0D7B08 800D6F08 8FB900C0 */ lw $t9, 0xc0($sp) -.L800D6F0C: -/* 0D7B0C 800D6F0C 0019702A */ slt $t6, $zero, $t9 -/* 0D7B10 800D6F10 51C00019 */ beql $t6, $zero, .L800D6F78 -/* 0D7B14 800D6F14 8FB900C4 */ lw $t9, 0xc4($sp) -/* 0D7B18 800D6F18 11C00016 */ beqz $t6, .L800D6F74 -/* 0D7B1C 800D6F1C 03208825 */ move $s1, $t9 -/* 0D7B20 800D6F20 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6F24: -/* 0D7B24 800D6F24 14200003 */ bnez $at, .L800D6F34 -/* 0D7B28 800D6F28 02208025 */ move $s0, $s1 -/* 0D7B2C 800D6F2C 10000001 */ b .L800D6F34 -/* 0D7B30 800D6F30 24100020 */ li $s0, 32 -.L800D6F34: -/* 0D7B34 800D6F34 1A00000C */ blez $s0, .L800D6F68 -/* 0D7B38 800D6F38 02602025 */ move $a0, $s3 -/* 0D7B3C 800D6F3C 02A02825 */ move $a1, $s5 -/* 0D7B40 800D6F40 0280F809 */ jalr $s4 -/* 0D7B44 800D6F44 02003025 */ move $a2, $s0 -/* 0D7B48 800D6F48 10400005 */ beqz $v0, .L800D6F60 -/* 0D7B4C 800D6F4C 00409825 */ move $s3, $v0 -/* 0D7B50 800D6F50 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0D7B54 800D6F54 01F0C021 */ addu $t8, $t7, $s0 -/* 0D7B58 800D6F58 10000003 */ b .L800D6F68 -/* 0D7B5C 800D6F5C AFB800D4 */ sw $t8, 0xd4($sp) -.L800D6F60: -/* 0D7B60 800D6F60 10000050 */ b .L800D70A4 -/* 0D7B64 800D6F64 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6F68: -/* 0D7B68 800D6F68 02308823 */ subu $s1, $s1, $s0 -/* 0D7B6C 800D6F6C 5E20FFED */ bgtzl $s1, .L800D6F24 -/* 0D7B70 800D6F70 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6F74: -/* 0D7B74 800D6F74 8FB900C4 */ lw $t9, 0xc4($sp) -.L800D6F78: -/* 0D7B78 800D6F78 02602025 */ move $a0, $s3 -/* 0D7B7C 800D6F7C 8FAE00B0 */ lw $t6, 0xb0($sp) -/* 0D7B80 800D6F80 1B20000D */ blez $t9, .L800D6FB8 -/* 0D7B84 800D6F84 8FAF00BC */ lw $t7, 0xbc($sp) -/* 0D7B88 800D6F88 01CF2821 */ addu $a1, $t6, $t7 -/* 0D7B8C 800D6F8C 0280F809 */ jalr $s4 -/* 0D7B90 800D6F90 03203025 */ move $a2, $t9 -/* 0D7B94 800D6F94 10400006 */ beqz $v0, .L800D6FB0 -/* 0D7B98 800D6F98 00409825 */ move $s3, $v0 -/* 0D7B9C 800D6F9C 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0D7BA0 800D6FA0 8FAE00C4 */ lw $t6, 0xc4($sp) -/* 0D7BA4 800D6FA4 030E7821 */ addu $t7, $t8, $t6 -/* 0D7BA8 800D6FA8 10000003 */ b .L800D6FB8 -/* 0D7BAC 800D6FAC AFAF00D4 */ sw $t7, 0xd4($sp) -.L800D6FB0: -/* 0D7BB0 800D6FB0 1000003C */ b .L800D70A4 -/* 0D7BB4 800D6FB4 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D6FB8: -/* 0D7BB8 800D6FB8 8FB900C8 */ lw $t9, 0xc8($sp) -/* 0D7BBC 800D6FBC 0019C02A */ slt $t8, $zero, $t9 -/* 0D7BC0 800D6FC0 53000019 */ beql $t8, $zero, .L800D7028 -/* 0D7BC4 800D6FC4 8FB900D8 */ lw $t9, 0xd8($sp) -/* 0D7BC8 800D6FC8 13000016 */ beqz $t8, .L800D7024 -/* 0D7BCC 800D6FCC 03208825 */ move $s1, $t9 -/* 0D7BD0 800D6FD0 2E210021 */ sltiu $at, $s1, 0x21 -.L800D6FD4: -/* 0D7BD4 800D6FD4 14200003 */ bnez $at, .L800D6FE4 -/* 0D7BD8 800D6FD8 02208025 */ move $s0, $s1 -/* 0D7BDC 800D6FDC 10000001 */ b .L800D6FE4 -/* 0D7BE0 800D6FE0 24100020 */ li $s0, 32 -.L800D6FE4: -/* 0D7BE4 800D6FE4 1A00000C */ blez $s0, .L800D7018 -/* 0D7BE8 800D6FE8 02602025 */ move $a0, $s3 -/* 0D7BEC 800D6FEC 02A02825 */ move $a1, $s5 -/* 0D7BF0 800D6FF0 0280F809 */ jalr $s4 -/* 0D7BF4 800D6FF4 02003025 */ move $a2, $s0 -/* 0D7BF8 800D6FF8 10400005 */ beqz $v0, .L800D7010 -/* 0D7BFC 800D6FFC 00409825 */ move $s3, $v0 -/* 0D7C00 800D7000 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0D7C04 800D7004 01D07821 */ addu $t7, $t6, $s0 -/* 0D7C08 800D7008 10000003 */ b .L800D7018 -/* 0D7C0C 800D700C AFAF00D4 */ sw $t7, 0xd4($sp) -.L800D7010: -/* 0D7C10 800D7010 10000024 */ b .L800D70A4 -/* 0D7C14 800D7014 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D7018: -/* 0D7C18 800D7018 02308823 */ subu $s1, $s1, $s0 -/* 0D7C1C 800D701C 5E20FFED */ bgtzl $s1, .L800D6FD4 -/* 0D7C20 800D7020 2E210021 */ sltiu $at, $s1, 0x21 -.L800D7024: -/* 0D7C24 800D7024 8FB900D8 */ lw $t9, 0xd8($sp) -.L800D7028: -/* 0D7C28 800D7028 8FAE00D0 */ lw $t6, 0xd0($sp) -/* 0D7C2C 800D702C 33380004 */ andi $t8, $t9, 4 -/* 0D7C30 800D7030 1300001A */ beqz $t8, .L800D709C -/* 0D7C34 800D7034 000E782A */ slt $t7, $zero, $t6 -/* 0D7C38 800D7038 11E00018 */ beqz $t7, .L800D709C -/* 0D7C3C 800D703C 00000000 */ nop -/* 0D7C40 800D7040 11E00016 */ beqz $t7, .L800D709C -/* 0D7C44 800D7044 01C08825 */ move $s1, $t6 -/* 0D7C48 800D7048 2E210021 */ sltiu $at, $s1, 0x21 -.L800D704C: -/* 0D7C4C 800D704C 14200003 */ bnez $at, .L800D705C -/* 0D7C50 800D7050 02208025 */ move $s0, $s1 -/* 0D7C54 800D7054 10000001 */ b .L800D705C -/* 0D7C58 800D7058 24100020 */ li $s0, 32 -.L800D705C: -/* 0D7C5C 800D705C 1A00000C */ blez $s0, .L800D7090 -/* 0D7C60 800D7060 02602025 */ move $a0, $s3 -/* 0D7C64 800D7064 02E02825 */ move $a1, $s7 -/* 0D7C68 800D7068 0280F809 */ jalr $s4 -/* 0D7C6C 800D706C 02003025 */ move $a2, $s0 -/* 0D7C70 800D7070 10400005 */ beqz $v0, .L800D7088 -/* 0D7C74 800D7074 00409825 */ move $s3, $v0 -/* 0D7C78 800D7078 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0D7C7C 800D707C 0330C021 */ addu $t8, $t9, $s0 -/* 0D7C80 800D7080 10000003 */ b .L800D7090 -/* 0D7C84 800D7084 AFB800D4 */ sw $t8, 0xd4($sp) -.L800D7088: -/* 0D7C88 800D7088 10000006 */ b .L800D70A4 -/* 0D7C8C 800D708C 8FA200D4 */ lw $v0, 0xd4($sp) -.L800D7090: -/* 0D7C90 800D7090 02308823 */ subu $s1, $s1, $s0 -/* 0D7C94 800D7094 5E20FFED */ bgtzl $s1, .L800D704C -/* 0D7C98 800D7098 2E210021 */ sltiu $at, $s1, 0x21 -.L800D709C: -/* 0D7C9C 800D709C 1000FE94 */ b .L800D6AF0 -/* 0D7CA0 800D70A0 26470001 */ addiu $a3, $s2, 1 -.L800D70A4: -/* 0D7CA4 800D70A4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0D7CA8 800D70A8 8FB00018 */ lw $s0, 0x18($sp) -/* 0D7CAC 800D70AC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D7CB0 800D70B0 8FB20020 */ lw $s2, 0x20($sp) -/* 0D7CB4 800D70B4 8FB30024 */ lw $s3, 0x24($sp) -/* 0D7CB8 800D70B8 8FB40028 */ lw $s4, 0x28($sp) -/* 0D7CBC 800D70BC 8FB5002C */ lw $s5, 0x2c($sp) -/* 0D7CC0 800D70C0 8FB60030 */ lw $s6, 0x30($sp) -/* 0D7CC4 800D70C4 8FB70034 */ lw $s7, 0x34($sp) -/* 0D7CC8 800D70C8 8FBE0038 */ lw $fp, 0x38($sp) -/* 0D7CCC 800D70CC 03E00008 */ jr $ra -/* 0D7CD0 800D70D0 27BD00E0 */ addiu $sp, $sp, 0xe0 - -/* 0D7CD4 800D70D4 00000000 */ nop -/* 0D7CD8 800D70D8 00000000 */ nop -/* 0D7CDC 800D70DC 00000000 */ nop -glabel guMtxXFMF -/* 0D7CE0 800D70E0 44856000 */ mtc1 $a1, $f12 -/* 0D7CE4 800D70E4 C4840000 */ lwc1 $f4, ($a0) -/* 0D7CE8 800D70E8 44867000 */ mtc1 $a2, $f14 -/* 0D7CEC 800D70EC C4880010 */ lwc1 $f8, 0x10($a0) -/* 0D7CF0 800D70F0 460C2182 */ mul.s $f6, $f4, $f12 -/* 0D7CF4 800D70F4 44878000 */ mtc1 $a3, $f16 -/* 0D7CF8 800D70F8 C4840020 */ lwc1 $f4, 0x20($a0) -/* 0D7CFC 800D70FC 460E4282 */ mul.s $f10, $f8, $f14 -/* 0D7D00 800D7100 8FAE0010 */ lw $t6, 0x10($sp) -/* 0D7D04 800D7104 46102202 */ mul.s $f8, $f4, $f16 -/* 0D7D08 800D7108 460A3480 */ add.s $f18, $f6, $f10 -/* 0D7D0C 800D710C C48A0030 */ lwc1 $f10, 0x30($a0) -/* 0D7D10 800D7110 46089180 */ add.s $f6, $f18, $f8 -/* 0D7D14 800D7114 46065100 */ add.s $f4, $f10, $f6 -/* 0D7D18 800D7118 E5C40000 */ swc1 $f4, ($t6) -/* 0D7D1C 800D711C C4920004 */ lwc1 $f18, 4($a0) -/* 0D7D20 800D7120 C48A0014 */ lwc1 $f10, 0x14($a0) -/* 0D7D24 800D7124 8FAF0014 */ lw $t7, 0x14($sp) -/* 0D7D28 800D7128 460C9202 */ mul.s $f8, $f18, $f12 -/* 0D7D2C 800D712C C4920024 */ lwc1 $f18, 0x24($a0) -/* 0D7D30 800D7130 460E5182 */ mul.s $f6, $f10, $f14 -/* 0D7D34 800D7134 46064100 */ add.s $f4, $f8, $f6 -/* 0D7D38 800D7138 46109282 */ mul.s $f10, $f18, $f16 -/* 0D7D3C 800D713C C4860034 */ lwc1 $f6, 0x34($a0) -/* 0D7D40 800D7140 460A2200 */ add.s $f8, $f4, $f10 -/* 0D7D44 800D7144 46083480 */ add.s $f18, $f6, $f8 -/* 0D7D48 800D7148 E5F20000 */ swc1 $f18, ($t7) -/* 0D7D4C 800D714C C4840008 */ lwc1 $f4, 8($a0) -/* 0D7D50 800D7150 C4860018 */ lwc1 $f6, 0x18($a0) -/* 0D7D54 800D7154 8FB80018 */ lw $t8, 0x18($sp) -/* 0D7D58 800D7158 460C2282 */ mul.s $f10, $f4, $f12 -/* 0D7D5C 800D715C C4840028 */ lwc1 $f4, 0x28($a0) -/* 0D7D60 800D7160 460E3202 */ mul.s $f8, $f6, $f14 -/* 0D7D64 800D7164 46085480 */ add.s $f18, $f10, $f8 -/* 0D7D68 800D7168 46102182 */ mul.s $f6, $f4, $f16 -/* 0D7D6C 800D716C C4880038 */ lwc1 $f8, 0x38($a0) -/* 0D7D70 800D7170 46069280 */ add.s $f10, $f18, $f6 -/* 0D7D74 800D7174 460A4100 */ add.s $f4, $f8, $f10 -/* 0D7D78 800D7178 03E00008 */ jr $ra -/* 0D7D7C 800D717C E7040000 */ swc1 $f4, ($t8) - -glabel guMtxCatF -/* 0D7D80 800D7180 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0D7D84 800D7184 44800000 */ mtc1 $zero, $f0 -/* 0D7D88 800D7188 27A3001C */ addiu $v1, $sp, 0x1c -/* 0D7D8C 800D718C 27AB005C */ addiu $t3, $sp, 0x5c -/* 0D7D90 800D7190 00803825 */ move $a3, $a0 -/* 0D7D94 800D7194 00A04025 */ move $t0, $a1 -/* 0D7D98 800D7198 240A0010 */ li $t2, 16 -.L800D719C: -/* 0D7D9C 800D719C 00002025 */ move $a0, $zero -/* 0D7DA0 800D71A0 00602825 */ move $a1, $v1 -/* 0D7DA4 800D71A4 01004825 */ move $t1, $t0 -/* 0D7DA8 800D71A8 E4A00000 */ swc1 $f0, ($a1) -/* 0D7DAC 800D71AC C52C0000 */ lwc1 $f12, ($t1) -/* 0D7DB0 800D71B0 C4EE0000 */ lwc1 $f14, ($a3) -/* 0D7DB4 800D71B4 24840004 */ addiu $a0, $a0, 4 -/* 0D7DB8 800D71B8 C4B00000 */ lwc1 $f16, ($a1) -/* 0D7DBC 800D71BC 460C7482 */ mul.s $f18, $f14, $f12 -/* 0D7DC0 800D71C0 508A0020 */ beql $a0, $t2, .L800D7244 -/* 0D7DC4 800D71C4 46128380 */ add.s $f14, $f16, $f18 -/* 0D7DC8 800D71C8 46128380 */ add.s $f14, $f16, $f18 -.L800D71CC: -/* 0D7DCC 800D71CC 24840004 */ addiu $a0, $a0, 4 -/* 0D7DD0 800D71D0 24A50004 */ addiu $a1, $a1, 4 -/* 0D7DD4 800D71D4 25290004 */ addiu $t1, $t1, 4 -/* 0D7DD8 800D71D8 E4AEFFFC */ swc1 $f14, -4($a1) -/* 0D7DDC 800D71DC C4EE0004 */ lwc1 $f14, 4($a3) -/* 0D7DE0 800D71E0 C52C000C */ lwc1 $f12, 0xc($t1) -/* 0D7DE4 800D71E4 C4AAFFFC */ lwc1 $f10, -4($a1) -/* 0D7DE8 800D71E8 460C7302 */ mul.s $f12, $f14, $f12 -/* 0D7DEC 800D71EC 460C5300 */ add.s $f12, $f10, $f12 -/* 0D7DF0 800D71F0 E4ACFFFC */ swc1 $f12, -4($a1) -/* 0D7DF4 800D71F4 C4EC0008 */ lwc1 $f12, 8($a3) -/* 0D7DF8 800D71F8 C52A001C */ lwc1 $f10, 0x1c($t1) -/* 0D7DFC 800D71FC C4AEFFFC */ lwc1 $f14, -4($a1) -/* 0D7E00 800D7200 460A6282 */ mul.s $f10, $f12, $f10 -/* 0D7E04 800D7204 460A7280 */ add.s $f10, $f14, $f10 -/* 0D7E08 800D7208 E4AAFFFC */ swc1 $f10, -4($a1) -/* 0D7E0C 800D720C C4EA000C */ lwc1 $f10, 0xc($a3) -/* 0D7E10 800D7210 C52E002C */ lwc1 $f14, 0x2c($t1) -/* 0D7E14 800D7214 C4ACFFFC */ lwc1 $f12, -4($a1) -/* 0D7E18 800D7218 E4A00000 */ swc1 $f0, ($a1) -/* 0D7E1C 800D721C 460E5382 */ mul.s $f14, $f10, $f14 -/* 0D7E20 800D7220 C4B00000 */ lwc1 $f16, ($a1) -/* 0D7E24 800D7224 460E6380 */ add.s $f14, $f12, $f14 -/* 0D7E28 800D7228 E4AEFFFC */ swc1 $f14, -4($a1) -/* 0D7E2C 800D722C C4EE0000 */ lwc1 $f14, ($a3) -/* 0D7E30 800D7230 C52C0000 */ lwc1 $f12, ($t1) -/* 0D7E34 800D7234 460C7482 */ mul.s $f18, $f14, $f12 -/* 0D7E38 800D7238 548AFFE4 */ bnel $a0, $t2, .L800D71CC -/* 0D7E3C 800D723C 46128380 */ add.s $f14, $f16, $f18 -/* 0D7E40 800D7240 46128380 */ add.s $f14, $f16, $f18 -.L800D7244: -/* 0D7E44 800D7244 24A50004 */ addiu $a1, $a1, 4 -/* 0D7E48 800D7248 25290004 */ addiu $t1, $t1, 4 -/* 0D7E4C 800D724C E4AEFFFC */ swc1 $f14, -4($a1) -/* 0D7E50 800D7250 C52C000C */ lwc1 $f12, 0xc($t1) -/* 0D7E54 800D7254 C4EE0004 */ lwc1 $f14, 4($a3) -/* 0D7E58 800D7258 C4AAFFFC */ lwc1 $f10, -4($a1) -/* 0D7E5C 800D725C 460C7302 */ mul.s $f12, $f14, $f12 -/* 0D7E60 800D7260 460C5300 */ add.s $f12, $f10, $f12 -/* 0D7E64 800D7264 E4ACFFFC */ swc1 $f12, -4($a1) -/* 0D7E68 800D7268 C52A001C */ lwc1 $f10, 0x1c($t1) -/* 0D7E6C 800D726C C4EC0008 */ lwc1 $f12, 8($a3) -/* 0D7E70 800D7270 C4AEFFFC */ lwc1 $f14, -4($a1) -/* 0D7E74 800D7274 460A6282 */ mul.s $f10, $f12, $f10 -/* 0D7E78 800D7278 460A7280 */ add.s $f10, $f14, $f10 -/* 0D7E7C 800D727C E4AAFFFC */ swc1 $f10, -4($a1) -/* 0D7E80 800D7280 C52E002C */ lwc1 $f14, 0x2c($t1) -/* 0D7E84 800D7284 C4EA000C */ lwc1 $f10, 0xc($a3) -/* 0D7E88 800D7288 C4ACFFFC */ lwc1 $f12, -4($a1) -/* 0D7E8C 800D728C 460E5382 */ mul.s $f14, $f10, $f14 -/* 0D7E90 800D7290 460E6380 */ add.s $f14, $f12, $f14 -/* 0D7E94 800D7294 E4AEFFFC */ swc1 $f14, -4($a1) -/* 0D7E98 800D7298 24630010 */ addiu $v1, $v1, 0x10 -/* 0D7E9C 800D729C 006B082B */ sltu $at, $v1, $t3 -/* 0D7EA0 800D72A0 1420FFBE */ bnez $at, .L800D719C -/* 0D7EA4 800D72A4 24E70010 */ addiu $a3, $a3, 0x10 -/* 0D7EA8 800D72A8 00C01825 */ move $v1, $a2 -/* 0D7EAC 800D72AC 27A4001C */ addiu $a0, $sp, 0x1c -/* 0D7EB0 800D72B0 27A2005C */ addiu $v0, $sp, 0x5c -.L800D72B4: -/* 0D7EB4 800D72B4 C4860000 */ lwc1 $f6, ($a0) -/* 0D7EB8 800D72B8 24840010 */ addiu $a0, $a0, 0x10 -/* 0D7EBC 800D72BC 24630010 */ addiu $v1, $v1, 0x10 -/* 0D7EC0 800D72C0 E466FFF0 */ swc1 $f6, -0x10($v1) -/* 0D7EC4 800D72C4 C488FFF4 */ lwc1 $f8, -0xc($a0) -/* 0D7EC8 800D72C8 E468FFF4 */ swc1 $f8, -0xc($v1) -/* 0D7ECC 800D72CC C490FFF8 */ lwc1 $f16, -8($a0) -/* 0D7ED0 800D72D0 E470FFF8 */ swc1 $f16, -8($v1) -/* 0D7ED4 800D72D4 C48AFFFC */ lwc1 $f10, -4($a0) -/* 0D7ED8 800D72D8 1482FFF6 */ bne $a0, $v0, .L800D72B4 -/* 0D7EDC 800D72DC E46AFFFC */ swc1 $f10, -4($v1) -/* 0D7EE0 800D72E0 03E00008 */ jr $ra -/* 0D7EE4 800D72E4 27BD0068 */ addiu $sp, $sp, 0x68 - -/* 0D7EE8 800D72E8 00000000 */ nop -/* 0D7EEC 800D72EC 00000000 */ nop -glabel __osContRamWrite -/* 0D7EF0 800D72F0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0D7EF4 800D72F4 8FB80070 */ lw $t8, 0x70($sp) -/* 0D7EF8 800D72F8 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0D7EFC 800D72FC 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0D7F00 800D7300 240F0002 */ li $t7, 2 -/* 0D7F04 800D7304 24010001 */ li $at, 1 -/* 0D7F08 800D7308 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D7F0C 800D730C AFA40060 */ sw $a0, 0x60($sp) -/* 0D7F10 800D7310 AFA50064 */ sw $a1, 0x64($sp) -/* 0D7F14 800D7314 AFA60068 */ sw $a2, 0x68($sp) -/* 0D7F18 800D7318 AFA7006C */ sw $a3, 0x6c($sp) -/* 0D7F1C 800D731C AFB00018 */ sw $s0, 0x18($sp) -/* 0D7F20 800D7320 AFA0005C */ sw $zero, 0x5c($sp) -/* 0D7F24 800D7324 AFAE0054 */ sw $t6, 0x54($sp) -/* 0D7F28 800D7328 13010009 */ beq $t8, $at, .L800D7350 -/* 0D7F2C 800D732C AFAF0028 */ sw $t7, 0x28($sp) -/* 0D7F30 800D7330 97B9006A */ lhu $t9, 0x6a($sp) -/* 0D7F34 800D7334 2B210007 */ slti $at, $t9, 7 -/* 0D7F38 800D7338 10200005 */ beqz $at, .L800D7350 -/* 0D7F3C 800D733C 00000000 */ nop -/* 0D7F40 800D7340 13200003 */ beqz $t9, .L800D7350 -/* 0D7F44 800D7344 00000000 */ nop -/* 0D7F48 800D7348 10000070 */ b .L800D750C -/* 0D7F4C 800D734C 00001025 */ move $v0, $zero -.L800D7350: -/* 0D7F50 800D7350 0C034EE8 */ jal __osSiGetAccess -/* 0D7F54 800D7354 00000000 */ nop -/* 0D7F58 800D7358 24080003 */ li $t0, 3 -/* 0D7F5C 800D735C 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0D7F60 800D7360 A0286540 */ sb $t0, %lo(_osLastSentSiCmd)($at) -/* 0D7F64 800D7364 8FA40064 */ lw $a0, 0x64($sp) -/* 0D7F68 800D7368 97A5006A */ lhu $a1, 0x6a($sp) -/* 0D7F6C 800D736C 0C035D48 */ jal func_800D7520 -/* 0D7F70 800D7370 8FA6006C */ lw $a2, 0x6c($sp) -/* 0D7F74 800D7374 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0D7F78 800D7378 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0D7F7C 800D737C 0C034EA8 */ jal __osSiRawStartDma -/* 0D7F80 800D7380 24040001 */ li $a0, 1 -/* 0D7F84 800D7384 AFA2005C */ sw $v0, 0x5c($sp) -/* 0D7F88 800D7388 8FA40060 */ lw $a0, 0x60($sp) -/* 0D7F8C 800D738C 00002825 */ move $a1, $zero -/* 0D7F90 800D7390 0C0335D4 */ jal osRecvMesg -/* 0D7F94 800D7394 24060001 */ li $a2, 1 -.L800D7398: -/* 0D7F98 800D7398 AFA00058 */ sw $zero, 0x58($sp) -.L800D739C: -/* 0D7F9C 800D739C 8FAA0058 */ lw $t2, 0x58($sp) -/* 0D7FA0 800D73A0 8FAC0058 */ lw $t4, 0x58($sp) -/* 0D7FA4 800D73A4 3C018019 */ lui $at, %hi(D_80196590) # 0x8019 -/* 0D7FA8 800D73A8 000A5880 */ sll $t3, $t2, 2 -/* 0D7FAC 800D73AC 002B0821 */ addu $at, $at, $t3 -/* 0D7FB0 800D73B0 240900FF */ li $t1, 255 -/* 0D7FB4 800D73B4 AC296590 */ sw $t1, %lo(D_80196590)($at) # 0x6590($at) -/* 0D7FB8 800D73B8 258D0001 */ addiu $t5, $t4, 1 -/* 0D7FBC 800D73BC 29A10010 */ slti $at, $t5, 0x10 -/* 0D7FC0 800D73C0 1420FFF6 */ bnez $at, .L800D739C -/* 0D7FC4 800D73C4 AFAD0058 */ sw $t5, 0x58($sp) -/* 0D7FC8 800D73C8 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 -/* 0D7FCC 800D73CC 3C058019 */ lui $a1, %hi(D_80196590) # $a1, 0x8019 -/* 0D7FD0 800D73D0 AC2065CC */ sw $zero, %lo(D_801965CC)($at) -/* 0D7FD4 800D73D4 24A56590 */ addiu $a1, %lo(D_80196590) # addiu $a1, $a1, 0x6590 -/* 0D7FD8 800D73D8 0C034EA8 */ jal __osSiRawStartDma -/* 0D7FDC 800D73DC 00002025 */ move $a0, $zero -/* 0D7FE0 800D73E0 AFA2005C */ sw $v0, 0x5c($sp) -/* 0D7FE4 800D73E4 8FA40060 */ lw $a0, 0x60($sp) -/* 0D7FE8 800D73E8 00002825 */ move $a1, $zero -/* 0D7FEC 800D73EC 0C0335D4 */ jal osRecvMesg -/* 0D7FF0 800D73F0 24060001 */ li $a2, 1 -/* 0D7FF4 800D73F4 8FAF0064 */ lw $t7, 0x64($sp) -/* 0D7FF8 800D73F8 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0D7FFC 800D73FC 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0D8000 800D7400 11E0000C */ beqz $t7, .L800D7434 -/* 0D8004 800D7404 AFAE0054 */ sw $t6, 0x54($sp) -/* 0D8008 800D7408 19E0000A */ blez $t7, .L800D7434 -/* 0D800C 800D740C AFA00058 */ sw $zero, 0x58($sp) -.L800D7410: -/* 0D8010 800D7410 8FA80058 */ lw $t0, 0x58($sp) -/* 0D8014 800D7414 8FA90064 */ lw $t1, 0x64($sp) -/* 0D8018 800D7418 8FB80054 */ lw $t8, 0x54($sp) -/* 0D801C 800D741C 250A0001 */ addiu $t2, $t0, 1 -/* 0D8020 800D7420 0149082A */ slt $at, $t2, $t1 -/* 0D8024 800D7424 27190001 */ addiu $t9, $t8, 1 -/* 0D8028 800D7428 AFAA0058 */ sw $t2, 0x58($sp) -/* 0D802C 800D742C 1420FFF8 */ bnez $at, .L800D7410 -/* 0D8030 800D7430 AFB90054 */ sw $t9, 0x54($sp) -.L800D7434: -/* 0D8034 800D7434 8FAC0054 */ lw $t4, 0x54($sp) -/* 0D8038 800D7438 27AB002C */ addiu $t3, $sp, 0x2c -/* 0D803C 800D743C 258E0024 */ addiu $t6, $t4, 0x24 -.L800D7440: -/* 0D8040 800D7440 89810000 */ lwl $at, ($t4) -/* 0D8044 800D7444 99810003 */ lwr $at, 3($t4) -/* 0D8048 800D7448 258C000C */ addiu $t4, $t4, 0xc -/* 0D804C 800D744C 256B000C */ addiu $t3, $t3, 0xc -/* 0D8050 800D7450 AD61FFF4 */ sw $at, -0xc($t3) -/* 0D8054 800D7454 8981FFF8 */ lwl $at, -8($t4) -/* 0D8058 800D7458 9981FFFB */ lwr $at, -5($t4) -/* 0D805C 800D745C AD61FFF8 */ sw $at, -8($t3) -/* 0D8060 800D7460 8981FFFC */ lwl $at, -4($t4) -/* 0D8064 800D7464 9981FFFF */ lwr $at, -1($t4) -/* 0D8068 800D7468 158EFFF5 */ bne $t4, $t6, .L800D7440 -/* 0D806C 800D746C AD61FFFC */ sw $at, -4($t3) -/* 0D8070 800D7470 89810000 */ lwl $at, ($t4) -/* 0D8074 800D7474 99810003 */ lwr $at, 3($t4) -/* 0D8078 800D7478 AD610000 */ sw $at, ($t3) -/* 0D807C 800D747C 93AF002E */ lbu $t7, 0x2e($sp) -/* 0D8080 800D7480 31F800C0 */ andi $t8, $t7, 0xc0 -/* 0D8084 800D7484 0018C903 */ sra $t9, $t8, 4 -/* 0D8088 800D7488 17200013 */ bnez $t9, .L800D74D8 -/* 0D808C 800D748C AFB9005C */ sw $t9, 0x5c($sp) -/* 0D8090 800D7490 0C035FC4 */ jal __osContDataCrc -/* 0D8094 800D7494 8FA4006C */ lw $a0, 0x6c($sp) -/* 0D8098 800D7498 93A80052 */ lbu $t0, 0x52($sp) -/* 0D809C 800D749C 1048000E */ beq $v0, $t0, .L800D74D8 -/* 0D80A0 800D74A0 00000000 */ nop -/* 0D80A4 800D74A4 8FA40060 */ lw $a0, 0x60($sp) -/* 0D80A8 800D74A8 0C0339F5 */ jal func_800CE7D4 -/* 0D80AC 800D74AC 8FA50064 */ lw $a1, 0x64($sp) -/* 0D80B0 800D74B0 AFA2005C */ sw $v0, 0x5c($sp) -/* 0D80B4 800D74B4 8FAA005C */ lw $t2, 0x5c($sp) -/* 0D80B8 800D74B8 11400005 */ beqz $t2, .L800D74D0 -/* 0D80BC 800D74BC 00000000 */ nop -/* 0D80C0 800D74C0 0C034EF9 */ jal __osSiRelAccess -/* 0D80C4 800D74C4 00000000 */ nop -/* 0D80C8 800D74C8 10000010 */ b .L800D750C -/* 0D80CC 800D74CC 8FA2005C */ lw $v0, 0x5c($sp) -.L800D74D0: -/* 0D80D0 800D74D0 24090004 */ li $t1, 4 -/* 0D80D4 800D74D4 AFA9005C */ sw $t1, 0x5c($sp) -.L800D74D8: -/* 0D80D8 800D74D8 8FAD005C */ lw $t5, 0x5c($sp) -/* 0D80DC 800D74DC 24010004 */ li $at, 4 -/* 0D80E0 800D74E0 15A10007 */ bne $t5, $at, .L800D7500 -/* 0D80E4 800D74E4 00000000 */ nop -/* 0D80E8 800D74E8 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D80EC 800D74EC 29D00000 */ slti $s0, $t6, 0 -/* 0D80F0 800D74F0 3A100001 */ xori $s0, $s0, 1 -/* 0D80F4 800D74F4 25CCFFFF */ addiu $t4, $t6, -1 -/* 0D80F8 800D74F8 1600FFA7 */ bnez $s0, .L800D7398 -/* 0D80FC 800D74FC AFAC0028 */ sw $t4, 0x28($sp) -.L800D7500: -/* 0D8100 800D7500 0C034EF9 */ jal __osSiRelAccess -/* 0D8104 800D7504 00000000 */ nop -/* 0D8108 800D7508 8FA2005C */ lw $v0, 0x5c($sp) -.L800D750C: -/* 0D810C 800D750C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D8110 800D7510 8FB00018 */ lw $s0, 0x18($sp) -/* 0D8114 800D7514 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0D8118 800D7518 03E00008 */ jr $ra -/* 0D811C 800D751C 00000000 */ nop - -glabel func_800D7520 -/* 0D8120 800D7520 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D8124 800D7524 3C0E8019 */ lui $t6, %hi(D_80196590) # $t6, 0x8019 -/* 0D8128 800D7528 25CE6590 */ addiu $t6, %lo(D_80196590) # addiu $t6, $t6, 0x6590 -/* 0D812C 800D752C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D8130 800D7530 AFA40048 */ sw $a0, 0x48($sp) -/* 0D8134 800D7534 AFA5004C */ sw $a1, 0x4c($sp) -/* 0D8138 800D7538 AFA60050 */ sw $a2, 0x50($sp) -/* 0D813C 800D753C AFAE0044 */ sw $t6, 0x44($sp) -/* 0D8140 800D7540 AFA00018 */ sw $zero, 0x18($sp) -.L800D7544: -/* 0D8144 800D7544 8FAF0018 */ lw $t7, 0x18($sp) -/* 0D8148 800D7548 8FB90018 */ lw $t9, 0x18($sp) -/* 0D814C 800D754C 3C018019 */ lui $at, %hi(D_80196590) # 0x8019 -/* 0D8150 800D7550 000FC080 */ sll $t8, $t7, 2 -/* 0D8154 800D7554 00380821 */ addu $at, $at, $t8 -/* 0D8158 800D7558 AC206590 */ sw $zero, %lo(D_80196590)($at) # 0x6590($at) -/* 0D815C 800D755C 27280001 */ addiu $t0, $t9, 1 -/* 0D8160 800D7560 29010010 */ slti $at, $t0, 0x10 -/* 0D8164 800D7564 1420FFF7 */ bnez $at, .L800D7544 -/* 0D8168 800D7568 AFA80018 */ sw $t0, 0x18($sp) -/* 0D816C 800D756C 24090001 */ li $t1, 1 -/* 0D8170 800D7570 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 -/* 0D8174 800D7574 240A00FF */ li $t2, 255 -/* 0D8178 800D7578 240B0023 */ li $t3, 35 -/* 0D817C 800D757C 240C0001 */ li $t4, 1 -/* 0D8180 800D7580 240D0003 */ li $t5, 3 -/* 0D8184 800D7584 AC2965CC */ sw $t1, %lo(D_801965CC)($at) -/* 0D8188 800D7588 A3AA001C */ sb $t2, 0x1c($sp) -/* 0D818C 800D758C A3AB001D */ sb $t3, 0x1d($sp) -/* 0D8190 800D7590 A3AC001E */ sb $t4, 0x1e($sp) -/* 0D8194 800D7594 A3AD001F */ sb $t5, 0x1f($sp) -/* 0D8198 800D7598 0C035F98 */ jal __osContAddressCrc -/* 0D819C 800D759C 97A4004E */ lhu $a0, 0x4e($sp) -/* 0D81A0 800D75A0 97AE004E */ lhu $t6, 0x4e($sp) -/* 0D81A4 800D75A4 241900FF */ li $t9, 255 -/* 0D81A8 800D75A8 A3B90042 */ sb $t9, 0x42($sp) -/* 0D81AC 800D75AC 000E7940 */ sll $t7, $t6, 5 -/* 0D81B0 800D75B0 004FC025 */ or $t8, $v0, $t7 -/* 0D81B4 800D75B4 A7B80020 */ sh $t8, 0x20($sp) -/* 0D81B8 800D75B8 AFA00018 */ sw $zero, 0x18($sp) -.L800D75BC: -/* 0D81BC 800D75BC 8FA80050 */ lw $t0, 0x50($sp) -/* 0D81C0 800D75C0 8FAA0018 */ lw $t2, 0x18($sp) -/* 0D81C4 800D75C4 91090000 */ lbu $t1, ($t0) -/* 0D81C8 800D75C8 03AA5821 */ addu $t3, $sp, $t2 -/* 0D81CC 800D75CC A1690022 */ sb $t1, 0x22($t3) -/* 0D81D0 800D75D0 8FAE0018 */ lw $t6, 0x18($sp) -/* 0D81D4 800D75D4 8FAC0050 */ lw $t4, 0x50($sp) -/* 0D81D8 800D75D8 25CF0001 */ addiu $t7, $t6, 1 -/* 0D81DC 800D75DC 29E10020 */ slti $at, $t7, 0x20 -/* 0D81E0 800D75E0 258D0001 */ addiu $t5, $t4, 1 -/* 0D81E4 800D75E4 AFAF0018 */ sw $t7, 0x18($sp) -/* 0D81E8 800D75E8 1420FFF4 */ bnez $at, .L800D75BC -/* 0D81EC 800D75EC AFAD0050 */ sw $t5, 0x50($sp) -/* 0D81F0 800D75F0 8FB80048 */ lw $t8, 0x48($sp) -/* 0D81F4 800D75F4 1300000E */ beqz $t8, .L800D7630 -/* 0D81F8 800D75F8 00000000 */ nop -/* 0D81FC 800D75FC 1B00000C */ blez $t8, .L800D7630 -/* 0D8200 800D7600 AFA00018 */ sw $zero, 0x18($sp) -.L800D7604: -/* 0D8204 800D7604 8FB90044 */ lw $t9, 0x44($sp) -/* 0D8208 800D7608 A3200000 */ sb $zero, ($t9) -/* 0D820C 800D760C 8FAA0018 */ lw $t2, 0x18($sp) -/* 0D8210 800D7610 8FAC0048 */ lw $t4, 0x48($sp) -/* 0D8214 800D7614 8FA80044 */ lw $t0, 0x44($sp) -/* 0D8218 800D7618 254B0001 */ addiu $t3, $t2, 1 -/* 0D821C 800D761C 016C082A */ slt $at, $t3, $t4 -/* 0D8220 800D7620 25090001 */ addiu $t1, $t0, 1 -/* 0D8224 800D7624 AFAB0018 */ sw $t3, 0x18($sp) -/* 0D8228 800D7628 1420FFF6 */ bnez $at, .L800D7604 -/* 0D822C 800D762C AFA90044 */ sw $t1, 0x44($sp) -.L800D7630: -/* 0D8230 800D7630 27AE001C */ addiu $t6, $sp, 0x1c -/* 0D8234 800D7634 25D80024 */ addiu $t8, $t6, 0x24 -/* 0D8238 800D7638 8FAD0044 */ lw $t5, 0x44($sp) -.L800D763C: -/* 0D823C 800D763C 8DC10000 */ lw $at, ($t6) -/* 0D8240 800D7640 25CE000C */ addiu $t6, $t6, 0xc -/* 0D8244 800D7644 25AD000C */ addiu $t5, $t5, 0xc -/* 0D8248 800D7648 A9A1FFF4 */ swl $at, -0xc($t5) -/* 0D824C 800D764C B9A1FFF7 */ swr $at, -9($t5) -/* 0D8250 800D7650 8DC1FFF8 */ lw $at, -8($t6) -/* 0D8254 800D7654 A9A1FFF8 */ swl $at, -8($t5) -/* 0D8258 800D7658 B9A1FFFB */ swr $at, -5($t5) -/* 0D825C 800D765C 8DC1FFFC */ lw $at, -4($t6) -/* 0D8260 800D7660 A9A1FFFC */ swl $at, -4($t5) -/* 0D8264 800D7664 15D8FFF5 */ bne $t6, $t8, .L800D763C -/* 0D8268 800D7668 B9A1FFFF */ swr $at, -1($t5) -/* 0D826C 800D766C 8DC10000 */ lw $at, ($t6) -/* 0D8270 800D7670 240900FE */ li $t1, 254 -/* 0D8274 800D7674 A9A10000 */ swl $at, ($t5) -/* 0D8278 800D7678 B9A10003 */ swr $at, 3($t5) -/* 0D827C 800D767C 8FB90044 */ lw $t9, 0x44($sp) -/* 0D8280 800D7680 27280028 */ addiu $t0, $t9, 0x28 -/* 0D8284 800D7684 AFA80044 */ sw $t0, 0x44($sp) -/* 0D8288 800D7688 A1090000 */ sb $t1, ($t0) -/* 0D828C 800D768C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D8290 800D7690 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0D8294 800D7694 03E00008 */ jr $ra -/* 0D8298 800D7698 00000000 */ nop - -/* 0D829C 800D769C 00000000 */ nop -glabel osEepromRead -/* 0D82A0 800D76A0 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D82A4 800D76A4 AFA5003C */ sw $a1, 0x3c($sp) -/* 0D82A8 800D76A8 93AF003F */ lbu $t7, 0x3f($sp) -/* 0D82AC 800D76AC 3C0E8019 */ lui $t6, %hi(D_80197660) # $t6, 0x8019 -/* 0D82B0 800D76B0 25CE7660 */ addiu $t6, %lo(D_80197660) # addiu $t6, $t6, 0x7660 -/* 0D82B4 800D76B4 29E10041 */ slti $at, $t7, 0x41 -/* 0D82B8 800D76B8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D82BC 800D76BC AFA40038 */ sw $a0, 0x38($sp) -/* 0D82C0 800D76C0 AFA60040 */ sw $a2, 0x40($sp) -/* 0D82C4 800D76C4 AFA00034 */ sw $zero, 0x34($sp) -/* 0D82C8 800D76C8 AFA00030 */ sw $zero, 0x30($sp) -/* 0D82CC 800D76CC 14200003 */ bnez $at, .L800D76DC -/* 0D82D0 800D76D0 AFAE002C */ sw $t6, 0x2c($sp) -/* 0D82D4 800D76D4 1000006A */ b .L800D7880 -/* 0D82D8 800D76D8 2402FFFF */ li $v0, -1 -.L800D76DC: -/* 0D82DC 800D76DC 0C034EE8 */ jal __osSiGetAccess -/* 0D82E0 800D76E0 00000000 */ nop -/* 0D82E4 800D76E4 8FA40038 */ lw $a0, 0x38($sp) -/* 0D82E8 800D76E8 0C0350B3 */ jal __osEepStatus -/* 0D82EC 800D76EC 27A50028 */ addiu $a1, $sp, 0x28 -/* 0D82F0 800D76F0 AFA20034 */ sw $v0, 0x34($sp) -/* 0D82F4 800D76F4 8FB80034 */ lw $t8, 0x34($sp) -/* 0D82F8 800D76F8 17000005 */ bnez $t8, .L800D7710 -/* 0D82FC 800D76FC 00000000 */ nop -/* 0D8300 800D7700 97B90028 */ lhu $t9, 0x28($sp) -/* 0D8304 800D7704 34018000 */ li $at, 32768 -/* 0D8308 800D7708 13210003 */ beq $t9, $at, .L800D7718 -/* 0D830C 800D770C 00000000 */ nop -.L800D7710: -/* 0D8310 800D7710 1000005B */ b .L800D7880 -/* 0D8314 800D7714 24020008 */ li $v0, 8 -.L800D7718: -/* 0D8318 800D7718 93A8002A */ lbu $t0, 0x2a($sp) -/* 0D831C 800D771C 31090080 */ andi $t1, $t0, 0x80 -/* 0D8320 800D7720 11200008 */ beqz $t1, .L800D7744 -/* 0D8324 800D7724 00000000 */ nop -.L800D7728: -/* 0D8328 800D7728 8FA40038 */ lw $a0, 0x38($sp) -/* 0D832C 800D772C 0C0350B3 */ jal __osEepStatus -/* 0D8330 800D7730 27A50028 */ addiu $a1, $sp, 0x28 -/* 0D8334 800D7734 93AA002A */ lbu $t2, 0x2a($sp) -/* 0D8338 800D7738 314B0080 */ andi $t3, $t2, 0x80 -/* 0D833C 800D773C 1560FFFA */ bnez $t3, .L800D7728 -/* 0D8340 800D7740 00000000 */ nop -.L800D7744: -/* 0D8344 800D7744 0C035E24 */ jal func_800D7890 -/* 0D8348 800D7748 93A4003F */ lbu $a0, 0x3f($sp) -/* 0D834C 800D774C 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D8350 800D7750 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D8354 800D7754 0C034EA8 */ jal __osSiRawStartDma -/* 0D8358 800D7758 24040001 */ li $a0, 1 -/* 0D835C 800D775C AFA20034 */ sw $v0, 0x34($sp) -/* 0D8360 800D7760 8FA40038 */ lw $a0, 0x38($sp) -/* 0D8364 800D7764 00002825 */ move $a1, $zero -/* 0D8368 800D7768 0C0335D4 */ jal osRecvMesg -/* 0D836C 800D776C 24060001 */ li $a2, 1 -/* 0D8370 800D7770 AFA00030 */ sw $zero, 0x30($sp) -.L800D7774: -/* 0D8374 800D7774 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D8378 800D7778 8FAF0030 */ lw $t7, 0x30($sp) -/* 0D837C 800D777C 3C018019 */ lui $at, %hi(D_80197660) # 0x8019 -/* 0D8380 800D7780 000D7080 */ sll $t6, $t5, 2 -/* 0D8384 800D7784 002E0821 */ addu $at, $at, $t6 -/* 0D8388 800D7788 240C00FF */ li $t4, 255 -/* 0D838C 800D778C AC2C7660 */ sw $t4, %lo(D_80197660)($at) # 0x7660($at) -/* 0D8390 800D7790 25F80001 */ addiu $t8, $t7, 1 -/* 0D8394 800D7794 2B010010 */ slti $at, $t8, 0x10 -/* 0D8398 800D7798 1420FFF6 */ bnez $at, .L800D7774 -/* 0D839C 800D779C AFB80030 */ sw $t8, 0x30($sp) -/* 0D83A0 800D77A0 3C018019 */ lui $at, %hi(D_8019769C) # $at, 0x8019 -/* 0D83A4 800D77A4 3C058019 */ lui $a1, %hi(D_80197660) # $a1, 0x8019 -/* 0D83A8 800D77A8 AC20769C */ sw $zero, %lo(D_8019769C)($at) -/* 0D83AC 800D77AC 24A57660 */ addiu $a1, %lo(D_80197660) # addiu $a1, $a1, 0x7660 -/* 0D83B0 800D77B0 0C034EA8 */ jal __osSiRawStartDma -/* 0D83B4 800D77B4 00002025 */ move $a0, $zero -/* 0D83B8 800D77B8 24190004 */ li $t9, 4 -/* 0D83BC 800D77BC 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 -/* 0D83C0 800D77C0 AFA20034 */ sw $v0, 0x34($sp) -/* 0D83C4 800D77C4 A0396540 */ sb $t9, %lo(_osLastSentSiCmd)($at) -/* 0D83C8 800D77C8 8FA40038 */ lw $a0, 0x38($sp) -/* 0D83CC 800D77CC 00002825 */ move $a1, $zero -/* 0D83D0 800D77D0 0C0335D4 */ jal osRecvMesg -/* 0D83D4 800D77D4 24060001 */ li $a2, 1 -/* 0D83D8 800D77D8 AFA00030 */ sw $zero, 0x30($sp) -.L800D77DC: -/* 0D83DC 800D77DC 8FAA0030 */ lw $t2, 0x30($sp) -/* 0D83E0 800D77E0 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D83E4 800D77E4 254B0001 */ addiu $t3, $t2, 1 -/* 0D83E8 800D77E8 29610004 */ slti $at, $t3, 4 -/* 0D83EC 800D77EC 25090001 */ addiu $t1, $t0, 1 -/* 0D83F0 800D77F0 AFAB0030 */ sw $t3, 0x30($sp) -/* 0D83F4 800D77F4 1420FFF9 */ bnez $at, .L800D77DC -/* 0D83F8 800D77F8 AFA9002C */ sw $t1, 0x2c($sp) -/* 0D83FC 800D77FC 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D8400 800D7800 27AD001C */ addiu $t5, $sp, 0x1c -/* 0D8404 800D7804 89810000 */ lwl $at, ($t4) -/* 0D8408 800D7808 99810003 */ lwr $at, 3($t4) -/* 0D840C 800D780C ADA10000 */ sw $at, ($t5) -/* 0D8410 800D7810 898F0004 */ lwl $t7, 4($t4) -/* 0D8414 800D7814 998F0007 */ lwr $t7, 7($t4) -/* 0D8418 800D7818 ADAF0004 */ sw $t7, 4($t5) -/* 0D841C 800D781C 89810008 */ lwl $at, 8($t4) -/* 0D8420 800D7820 9981000B */ lwr $at, 0xb($t4) -/* 0D8424 800D7824 ADA10008 */ sw $at, 8($t5) -/* 0D8428 800D7828 93B8001D */ lbu $t8, 0x1d($sp) -/* 0D842C 800D782C 331900C0 */ andi $t9, $t8, 0xc0 -/* 0D8430 800D7830 00194103 */ sra $t0, $t9, 4 -/* 0D8434 800D7834 1500000F */ bnez $t0, .L800D7874 -/* 0D8438 800D7838 AFA80034 */ sw $t0, 0x34($sp) -/* 0D843C 800D783C AFA00030 */ sw $zero, 0x30($sp) -.L800D7840: -/* 0D8440 800D7840 8FA90030 */ lw $t1, 0x30($sp) -/* 0D8444 800D7844 8FAB0040 */ lw $t3, 0x40($sp) -/* 0D8448 800D7848 03A95021 */ addu $t2, $sp, $t1 -/* 0D844C 800D784C 914A0020 */ lbu $t2, 0x20($t2) -/* 0D8450 800D7850 A16A0000 */ sb $t2, ($t3) -/* 0D8454 800D7854 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D8458 800D7858 8FAE0040 */ lw $t6, 0x40($sp) -/* 0D845C 800D785C 258F0001 */ addiu $t7, $t4, 1 -/* 0D8460 800D7860 29E10008 */ slti $at, $t7, 8 -/* 0D8464 800D7864 25CD0001 */ addiu $t5, $t6, 1 -/* 0D8468 800D7868 AFAF0030 */ sw $t7, 0x30($sp) -/* 0D846C 800D786C 1420FFF4 */ bnez $at, .L800D7840 -/* 0D8470 800D7870 AFAD0040 */ sw $t5, 0x40($sp) -.L800D7874: -/* 0D8474 800D7874 0C034EF9 */ jal __osSiRelAccess -/* 0D8478 800D7878 00000000 */ nop -/* 0D847C 800D787C 8FA20034 */ lw $v0, 0x34($sp) -.L800D7880: -/* 0D8480 800D7880 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D8484 800D7884 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0D8488 800D7888 03E00008 */ jr $ra -/* 0D848C 800D788C 00000000 */ nop - -glabel func_800D7890 -/* 0D8490 800D7890 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D8494 800D7894 3C0E8019 */ lui $t6, %hi(D_80197660) # $t6, 0x8019 -/* 0D8498 800D7898 25CE7660 */ addiu $t6, %lo(D_80197660) # addiu $t6, $t6, 0x7660 -/* 0D849C 800D789C 308400FF */ andi $a0, $a0, 0xff -/* 0D84A0 800D78A0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0D84A4 800D78A4 AFA00004 */ sw $zero, 4($sp) -.L800D78A8: -/* 0D84A8 800D78A8 8FB80004 */ lw $t8, 4($sp) -/* 0D84AC 800D78AC 8FA80004 */ lw $t0, 4($sp) -/* 0D84B0 800D78B0 3C018019 */ lui $at, %hi(D_80197660) # 0x8019 -/* 0D84B4 800D78B4 0018C880 */ sll $t9, $t8, 2 -/* 0D84B8 800D78B8 00390821 */ addu $at, $at, $t9 -/* 0D84BC 800D78BC 240F00FF */ li $t7, 255 -/* 0D84C0 800D78C0 AC2F7660 */ sw $t7, %lo(D_80197660)($at) # 0x7660($at) -/* 0D84C4 800D78C4 25090001 */ addiu $t1, $t0, 1 -/* 0D84C8 800D78C8 29210010 */ slti $at, $t1, 0x10 -/* 0D84CC 800D78CC 1420FFF6 */ bnez $at, .L800D78A8 -/* 0D84D0 800D78D0 AFA90004 */ sw $t1, 4($sp) -/* 0D84D4 800D78D4 240A0001 */ li $t2, 1 -/* 0D84D8 800D78D8 3C018019 */ lui $at, %hi(D_8019769C) # $at, 0x8019 -/* 0D84DC 800D78DC 240B0002 */ li $t3, 2 -/* 0D84E0 800D78E0 240C0008 */ li $t4, 8 -/* 0D84E4 800D78E4 240D0004 */ li $t5, 4 -/* 0D84E8 800D78E8 AC2A769C */ sw $t2, %lo(D_8019769C)($at) -/* 0D84EC 800D78EC A3AB0008 */ sb $t3, 8($sp) -/* 0D84F0 800D78F0 A3AC0009 */ sb $t4, 9($sp) -/* 0D84F4 800D78F4 A3AD000A */ sb $t5, 0xa($sp) -/* 0D84F8 800D78F8 A3A4000B */ sb $a0, 0xb($sp) -/* 0D84FC 800D78FC AFA00004 */ sw $zero, 4($sp) -.L800D7900: -/* 0D8500 800D7900 8FAE0004 */ lw $t6, 4($sp) -/* 0D8504 800D7904 03AEC021 */ addu $t8, $sp, $t6 -/* 0D8508 800D7908 A300000C */ sb $zero, 0xc($t8) -/* 0D850C 800D790C 8FAF0004 */ lw $t7, 4($sp) -/* 0D8510 800D7910 25F90001 */ addiu $t9, $t7, 1 -/* 0D8514 800D7914 2B210008 */ slti $at, $t9, 8 -/* 0D8518 800D7918 1420FFF9 */ bnez $at, .L800D7900 -/* 0D851C 800D791C AFB90004 */ sw $t9, 4($sp) -/* 0D8520 800D7920 AFA00004 */ sw $zero, 4($sp) -.L800D7924: -/* 0D8524 800D7924 8FA80014 */ lw $t0, 0x14($sp) -/* 0D8528 800D7928 A1000000 */ sb $zero, ($t0) -/* 0D852C 800D792C 8FAB0004 */ lw $t3, 4($sp) -/* 0D8530 800D7930 8FA90014 */ lw $t1, 0x14($sp) -/* 0D8534 800D7934 256C0001 */ addiu $t4, $t3, 1 -/* 0D8538 800D7938 29810004 */ slti $at, $t4, 4 -/* 0D853C 800D793C 252A0001 */ addiu $t2, $t1, 1 -/* 0D8540 800D7940 AFAC0004 */ sw $t4, 4($sp) -/* 0D8544 800D7944 1420FFF7 */ bnez $at, .L800D7924 -/* 0D8548 800D7948 AFAA0014 */ sw $t2, 0x14($sp) -/* 0D854C 800D794C 27AE0008 */ addiu $t6, $sp, 8 -/* 0D8550 800D7950 8DC10000 */ lw $at, ($t6) -/* 0D8554 800D7954 8FAD0014 */ lw $t5, 0x14($sp) -/* 0D8558 800D7958 240900FE */ li $t1, 254 -/* 0D855C 800D795C A9A10000 */ swl $at, ($t5) -/* 0D8560 800D7960 B9A10003 */ swr $at, 3($t5) -/* 0D8564 800D7964 8DCF0004 */ lw $t7, 4($t6) -/* 0D8568 800D7968 A9AF0004 */ swl $t7, 4($t5) -/* 0D856C 800D796C B9AF0007 */ swr $t7, 7($t5) -/* 0D8570 800D7970 8DC10008 */ lw $at, 8($t6) -/* 0D8574 800D7974 A9A10008 */ swl $at, 8($t5) -/* 0D8578 800D7978 B9A1000B */ swr $at, 0xb($t5) -/* 0D857C 800D797C 8FB90014 */ lw $t9, 0x14($sp) -/* 0D8580 800D7980 2728000C */ addiu $t0, $t9, 0xc -/* 0D8584 800D7984 AFA80014 */ sw $t0, 0x14($sp) -/* 0D8588 800D7988 A1090000 */ sb $t1, ($t0) -/* 0D858C 800D798C 03E00008 */ jr $ra -/* 0D8590 800D7990 27BD0018 */ addiu $sp, $sp, 0x18 - -/* 0D8594 800D7994 00000000 */ nop -/* 0D8598 800D7998 00000000 */ nop -/* 0D859C 800D799C 00000000 */ nop -glabel __osAiDeviceBusy -/* 0D85A0 800D79A0 3C0EA450 */ lui $t6, %hi(D_A450000C) # $t6, 0xa450 -/* 0D85A4 800D79A4 8DC4000C */ lw $a0, %lo(D_A450000C)($t6) -/* 0D85A8 800D79A8 3C018000 */ lui $at, 0x8000 -/* 0D85AC 800D79AC 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D85B0 800D79B0 00817824 */ and $t7, $a0, $at -/* 0D85B4 800D79B4 11E00003 */ beqz $t7, .L800D79C4 -/* 0D85B8 800D79B8 00000000 */ nop -/* 0D85BC 800D79BC 10000002 */ b .L800D79C8 -/* 0D85C0 800D79C0 24020001 */ li $v0, 1 -.L800D79C4: -/* 0D85C4 800D79C4 00001025 */ move $v0, $zero -.L800D79C8: -/* 0D85C8 800D79C8 03E00008 */ jr $ra -/* 0D85CC 800D79CC 27BD0008 */ addiu $sp, $sp, 8 - -glabel osSetIntMask -/* 0D85D0 800D79D0 400C6000 */ mfc0 $t4, $12 -/* 0D85D4 800D79D4 3182FF01 */ andi $v0, $t4, 0xff01 -/* 0D85D8 800D79D8 3C08800F */ lui $t0, %hi(D_800EA5EC) # $t0, 0x800f -/* 0D85DC 800D79DC 2508A5EC */ addiu $t0, %lo(D_800EA5EC) # addiu $t0, $t0, -0x5a14 -/* 0D85E0 800D79E0 8D0B0000 */ lw $t3, ($t0) -/* 0D85E4 800D79E4 2401FFFF */ li $at, -1 -/* 0D85E8 800D79E8 01614026 */ xor $t0, $t3, $at -/* 0D85EC 800D79EC 3108FF00 */ andi $t0, $t0, 0xff00 -/* 0D85F0 800D79F0 00481025 */ or $v0, $v0, $t0 -/* 0D85F4 800D79F4 3C0AA430 */ lui $t2, %hi(D_A430000C) # $t2, 0xa430 -/* 0D85F8 800D79F8 8D4A000C */ lw $t2, %lo(D_A430000C)($t2) -/* 0D85FC 800D79FC 11400005 */ beqz $t2, .L800D7A14 -/* 0D8600 800D7A00 000B4C02 */ srl $t1, $t3, 0x10 -/* 0D8604 800D7A04 2401FFFF */ li $at, -1 -/* 0D8608 800D7A08 01214826 */ xor $t1, $t1, $at -/* 0D860C 800D7A0C 3129003F */ andi $t1, $t1, 0x3f -/* 0D8610 800D7A10 01495025 */ or $t2, $t2, $t1 -.L800D7A14: -/* 0D8614 800D7A14 000A5400 */ sll $t2, $t2, 0x10 -/* 0D8618 800D7A18 004A1025 */ or $v0, $v0, $t2 -/* 0D861C 800D7A1C 3C01003F */ lui $at, 0x3f -/* 0D8620 800D7A20 00814024 */ and $t0, $a0, $at -/* 0D8624 800D7A24 010B4024 */ and $t0, $t0, $t3 -/* 0D8628 800D7A28 000843C2 */ srl $t0, $t0, 0xf -/* 0D862C 800D7A2C 3C0A800F */ lui $t2, %hi(D_800F3C10) # 0x800f -/* 0D8630 800D7A30 01485021 */ addu $t2, $t2, $t0 -/* 0D8634 800D7A34 954A3C10 */ lhu $t2, %lo(D_800F3C10)($t2) # 0x3c10($t2) -/* 0D8638 800D7A38 3C01A430 */ lui $at, %hi(D_A430000C) # $at, 0xa430 -/* 0D863C 800D7A3C AC2A000C */ sw $t2, %lo(D_A430000C)($at) -/* 0D8640 800D7A40 3088FF01 */ andi $t0, $a0, 0xff01 -/* 0D8644 800D7A44 3169FF00 */ andi $t1, $t3, 0xff00 -/* 0D8648 800D7A48 01094024 */ and $t0, $t0, $t1 -/* 0D864C 800D7A4C 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff -/* 0D8650 800D7A50 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff -/* 0D8654 800D7A54 01816024 */ and $t4, $t4, $at -/* 0D8658 800D7A58 01886025 */ or $t4, $t4, $t0 -/* 0D865C 800D7A5C 408C6000 */ mtc0 $t4, $12 -/* 0D8660 800D7A60 00000000 */ nop -/* 0D8664 800D7A64 00000000 */ nop -/* 0D8668 800D7A68 03E00008 */ jr $ra -/* 0D866C 800D7A6C 00000000 */ nop - -glabel osDestroyThread -/* 0D8670 800D7A70 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D8674 800D7A74 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D8678 800D7A78 AFA40038 */ sw $a0, 0x38($sp) -/* 0D867C 800D7A7C AFB20020 */ sw $s2, 0x20($sp) -/* 0D8680 800D7A80 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D8684 800D7A84 0C0346AC */ jal __osDisableInt -/* 0D8688 800D7A88 AFB00018 */ sw $s0, 0x18($sp) -/* 0D868C 800D7A8C 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D8690 800D7A90 00408025 */ move $s0, $v0 -/* 0D8694 800D7A94 15C00005 */ bnez $t6, .L800D7AAC -/* 0D8698 800D7A98 00000000 */ nop -/* 0D869C 800D7A9C 3C0F800F */ lui $t7, %hi(D_800EB3B0) # $t7, 0x800f -/* 0D86A0 800D7AA0 8DEFB3B0 */ lw $t7, %lo(D_800EB3B0)($t7) -/* 0D86A4 800D7AA4 10000009 */ b .L800D7ACC -/* 0D86A8 800D7AA8 AFAF0038 */ sw $t7, 0x38($sp) -.L800D7AAC: -/* 0D86AC 800D7AAC 8FB80038 */ lw $t8, 0x38($sp) -/* 0D86B0 800D7AB0 24010001 */ li $at, 1 -/* 0D86B4 800D7AB4 97190010 */ lhu $t9, 0x10($t8) -/* 0D86B8 800D7AB8 13210004 */ beq $t9, $at, .L800D7ACC -/* 0D86BC 800D7ABC 00000000 */ nop -/* 0D86C0 800D7AC0 8F040008 */ lw $a0, 8($t8) -/* 0D86C4 800D7AC4 0C0346BC */ jal __osDequeueThread -/* 0D86C8 800D7AC8 03002825 */ move $a1, $t8 -.L800D7ACC: -/* 0D86CC 800D7ACC 3C08800F */ lui $t0, %hi(D_800EB3AC) # $t0, 0x800f -/* 0D86D0 800D7AD0 8D08B3AC */ lw $t0, %lo(D_800EB3AC)($t0) -/* 0D86D4 800D7AD4 8FA90038 */ lw $t1, 0x38($sp) -/* 0D86D8 800D7AD8 15090005 */ bne $t0, $t1, .L800D7AF0 -/* 0D86DC 800D7ADC 00000000 */ nop -/* 0D86E0 800D7AE0 8D0A000C */ lw $t2, 0xc($t0) -/* 0D86E4 800D7AE4 3C01800F */ lui $at, %hi(D_800EB3AC) # $at, 0x800f -/* 0D86E8 800D7AE8 10000010 */ b .L800D7B2C -/* 0D86EC 800D7AEC AC2AB3AC */ sw $t2, %lo(D_800EB3AC)($at) -.L800D7AF0: -/* 0D86F0 800D7AF0 3C11800F */ lui $s1, %hi(D_800EB3AC) # $s1, 0x800f -/* 0D86F4 800D7AF4 8E31B3AC */ lw $s1, %lo(D_800EB3AC)($s1) -/* 0D86F8 800D7AF8 8E32000C */ lw $s2, 0xc($s1) -/* 0D86FC 800D7AFC 1240000B */ beqz $s2, .L800D7B2C -/* 0D8700 800D7B00 00000000 */ nop -.L800D7B04: -/* 0D8704 800D7B04 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D8708 800D7B08 164B0004 */ bne $s2, $t3, .L800D7B1C -/* 0D870C 800D7B0C 00000000 */ nop -/* 0D8710 800D7B10 8D6C000C */ lw $t4, 0xc($t3) -/* 0D8714 800D7B14 10000005 */ b .L800D7B2C -/* 0D8718 800D7B18 AE2C000C */ sw $t4, 0xc($s1) -.L800D7B1C: -/* 0D871C 800D7B1C 02408825 */ move $s1, $s2 -/* 0D8720 800D7B20 8E32000C */ lw $s2, 0xc($s1) -/* 0D8724 800D7B24 1640FFF7 */ bnez $s2, .L800D7B04 -/* 0D8728 800D7B28 00000000 */ nop -.L800D7B2C: -/* 0D872C 800D7B2C 3C0E800F */ lui $t6, %hi(D_800EB3B0) # $t6, 0x800f -/* 0D8730 800D7B30 8DCEB3B0 */ lw $t6, %lo(D_800EB3B0)($t6) -/* 0D8734 800D7B34 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D8738 800D7B38 15AE0003 */ bne $t5, $t6, .L800D7B48 -/* 0D873C 800D7B3C 00000000 */ nop -/* 0D8740 800D7B40 0C034649 */ jal __osDispatchThread -/* 0D8744 800D7B44 00000000 */ nop -.L800D7B48: -/* 0D8748 800D7B48 0C0346B4 */ jal __osRestoreInt -/* 0D874C 800D7B4C 02002025 */ move $a0, $s0 -/* 0D8750 800D7B50 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D8754 800D7B54 8FB00018 */ lw $s0, 0x18($sp) -/* 0D8758 800D7B58 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D875C 800D7B5C 8FB20020 */ lw $s2, 0x20($sp) -/* 0D8760 800D7B60 03E00008 */ jr $ra -/* 0D8764 800D7B64 27BD0038 */ addiu $sp, $sp, 0x38 - -/* 0D8768 800D7B68 00000000 */ nop -/* 0D876C 800D7B6C 00000000 */ nop -glabel __osSiDeviceBusy -/* 0D8770 800D7B70 3C0EA480 */ lui $t6, %hi(D_A4800018) # $t6, 0xa480 -/* 0D8774 800D7B74 8DC40018 */ lw $a0, %lo(D_A4800018)($t6) -/* 0D8778 800D7B78 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D877C 800D7B7C 308F0003 */ andi $t7, $a0, 3 -/* 0D8780 800D7B80 11E00003 */ beqz $t7, .L800D7B90 -/* 0D8784 800D7B84 00000000 */ nop -/* 0D8788 800D7B88 10000002 */ b .L800D7B94 -/* 0D878C 800D7B8C 24020001 */ li $v0, 1 -.L800D7B90: -/* 0D8790 800D7B90 00001025 */ move $v0, $zero -.L800D7B94: -/* 0D8794 800D7B94 03E00008 */ jr $ra -/* 0D8798 800D7B98 27BD0008 */ addiu $sp, $sp, 8 - -/* 0D879C 800D7B9C 00000000 */ nop -/* 0D87A0 800D7BA0 240E0002 */ li $t6, 2 -/* 0D87A4 800D7BA4 3C018019 */ lui $at, %hi(D_80197854) # $at, 0x8019 -/* 0D87A8 800D7BA8 A02E7854 */ sb $t6, %lo(D_80197854)($at) -/* 0D87AC 800D7BAC 3C018019 */ lui $at, %hi(D_8019785C) # $at, 0x8019 -/* 0D87B0 800D7BB0 3C0FA500 */ lui $t7, 0xa500 -/* 0D87B4 800D7BB4 AC2F785C */ sw $t7, %lo(D_8019785C)($at) -/* 0D87B8 800D7BB8 3C018019 */ lui $at, %hi(D_80197855) # $at, 0x8019 -/* 0D87BC 800D7BBC 24180003 */ li $t8, 3 -/* 0D87C0 800D7BC0 A0387855 */ sb $t8, %lo(D_80197855)($at) -/* 0D87C4 800D7BC4 3C018019 */ lui $at, %hi(D_80197858) # $at, 0x8019 -/* 0D87C8 800D7BC8 24190006 */ li $t9, 6 -/* 0D87CC 800D7BCC A0397858 */ sb $t9, %lo(D_80197858)($at) -/* 0D87D0 800D7BD0 3C018019 */ lui $at, %hi(D_80197856) # $at, 0x8019 -/* 0D87D4 800D7BD4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D87D8 800D7BD8 24080006 */ li $t0, 6 -/* 0D87DC 800D7BDC 24090002 */ li $t1, 2 -/* 0D87E0 800D7BE0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D87E4 800D7BE4 A0287856 */ sb $t0, %lo(D_80197856)($at) -/* 0D87E8 800D7BE8 A0297857 */ sb $t1, %lo(D_80197856+0x1)($at) -/* 0D87EC 800D7BEC 240A0003 */ li $t2, 3 -/* 0D87F0 800D7BF0 3C0BA460 */ lui $t3, %hi(D_A4600024) # $t3, 0xa460 -/* 0D87F4 800D7BF4 AD6A0024 */ sw $t2, %lo(D_A4600024)($t3) -/* 0D87F8 800D7BF8 3C0C8019 */ lui $t4, %hi(D_80197858) # $t4, 0x8019 -/* 0D87FC 800D7BFC 918C7858 */ lbu $t4, %lo(D_80197858)($t4) -/* 0D8800 800D7C00 3C0DA460 */ lui $t5, %hi(D_A4600028) # $t5, 0xa460 -/* 0D8804 800D7C04 3C0E8019 */ lui $t6, %hi(D_80197856) # $t6, 0x8019 -/* 0D8808 800D7C08 ADAC0028 */ sw $t4, %lo(D_A4600028)($t5) -/* 0D880C 800D7C0C 91CE7856 */ lbu $t6, %lo(D_80197856)($t6) -/* 0D8810 800D7C10 3C0FA460 */ lui $t7, %hi(D_A460002C) # $t7, 0xa460 -/* 0D8814 800D7C14 3C188019 */ lui $t8, %hi(D_80197856+0x1) # $t8, 0x8019 -/* 0D8818 800D7C18 ADEE002C */ sw $t6, %lo(D_A460002C)($t7) -/* 0D881C 800D7C1C 93187857 */ lbu $t8, %lo(D_80197856+0x1)($t8) -/* 0D8820 800D7C20 3C048019 */ lui $a0, %hi(D_80197850) # $a0, 0x8019 -/* 0D8824 800D7C24 3C19A460 */ lui $t9, %hi(D_A4600030) # $t9, 0xa460 -/* 0D8828 800D7C28 24847850 */ addiu $a0, %lo(D_80197850) # addiu $a0, $a0, 0x7850 -/* 0D882C 800D7C2C 24840014 */ addiu $a0, $a0, 0x14 -/* 0D8830 800D7C30 2405005C */ li $a1, 92 -/* 0D8834 800D7C34 0C033698 */ jal bzero -/* 0D8838 800D7C38 AF380030 */ sw $t8, %lo(D_A4600030)($t9) -/* 0D883C 800D7C3C 0C0346AC */ jal __osDisableInt -/* 0D8840 800D7C40 00000000 */ nop -/* 0D8844 800D7C44 3C08800F */ lui $t0, %hi(D_800EB35C) # $t0, 0x800f -/* 0D8848 800D7C48 8D08B35C */ lw $t0, %lo(D_800EB35C)($t0) -/* 0D884C 800D7C4C 3C018019 */ lui $at, %hi(D_80197850) # $at, 0x8019 -/* 0D8850 800D7C50 3C098019 */ lui $t1, %hi(D_80197850) # $t1, 0x8019 -/* 0D8854 800D7C54 AC287850 */ sw $t0, %lo(D_80197850)($at) -/* 0D8858 800D7C58 3C01800F */ lui $at, %hi(D_800EB35C) # $at, 0x800f -/* 0D885C 800D7C5C 25297850 */ addiu $t1, %lo(D_80197850) # addiu $t1, $t1, 0x7850 -/* 0D8860 800D7C60 AC29B35C */ sw $t1, %lo(D_800EB35C)($at) -/* 0D8864 800D7C64 AFA2001C */ sw $v0, 0x1c($sp) -/* 0D8868 800D7C68 3C018019 */ lui $at, %hi(D_801978C0) # $at, 0x8019 -/* 0D886C 800D7C6C AC2978C0 */ sw $t1, %lo(D_801978C0)($at) -/* 0D8870 800D7C70 0C0346B4 */ jal __osRestoreInt -/* 0D8874 800D7C74 8FA4001C */ lw $a0, 0x1c($sp) -/* 0D8878 800D7C78 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D887C 800D7C7C 3C028019 */ lui $v0, %hi(D_80197850) # $v0, 0x8019 -/* 0D8880 800D7C80 24427850 */ addiu $v0, %lo(D_80197850) # addiu $v0, $v0, 0x7850 -/* 0D8884 800D7C84 03E00008 */ jr $ra -/* 0D8888 800D7C88 27BD0020 */ addiu $sp, $sp, 0x20 - -/* 0D888C 800D7C8C 00000000 */ nop -glabel __osSetCompare -/* 0D8890 800D7C90 40845800 */ mtc0 $a0, $11 -/* 0D8894 800D7C94 03E00008 */ jr $ra -/* 0D8898 800D7C98 00000000 */ nop - -/* 0D889C 800D7C9C 00000000 */ nop -glabel __osResetGlobalIntMask -/* 0D88A0 800D7CA0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D88A4 800D7CA4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D88A8 800D7CA8 AFA40028 */ sw $a0, 0x28($sp) -/* 0D88AC 800D7CAC 0C0346AC */ jal __osDisableInt -/* 0D88B0 800D7CB0 AFB00018 */ sw $s0, 0x18($sp) -/* 0D88B4 800D7CB4 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D88B8 800D7CB8 3C0E800F */ lui $t6, %hi(D_800EA5EC) # $t6, 0x800f -/* 0D88BC 800D7CBC 8DCEA5EC */ lw $t6, %lo(D_800EA5EC)($t6) -/* 0D88C0 800D7CC0 2401FBFE */ li $at, -1026 -/* 0D88C4 800D7CC4 01E1C024 */ and $t8, $t7, $at -/* 0D88C8 800D7CC8 0300C827 */ not $t9, $t8 -/* 0D88CC 800D7CCC 00408025 */ move $s0, $v0 -/* 0D88D0 800D7CD0 3C01800F */ lui $at, %hi(D_800EA5EC) # $at, 0x800f -/* 0D88D4 800D7CD4 01D94024 */ and $t0, $t6, $t9 -/* 0D88D8 800D7CD8 AC28A5EC */ sw $t0, %lo(D_800EA5EC)($at) -/* 0D88DC 800D7CDC 0C0346B4 */ jal __osRestoreInt -/* 0D88E0 800D7CE0 02002025 */ move $a0, $s0 -/* 0D88E4 800D7CE4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D88E8 800D7CE8 8FB00018 */ lw $s0, 0x18($sp) -/* 0D88EC 800D7CEC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D88F0 800D7CF0 03E00008 */ jr $ra -/* 0D88F4 800D7CF4 00000000 */ nop - -/* 0D88F8 800D7CF8 00000000 */ nop -/* 0D88FC 800D7CFC 00000000 */ nop -glabel osEPiRawWriteIo -/* 0D8900 800D7D00 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D8904 800D7D04 8DC70010 */ lw $a3, %lo(D_A4600010)($t6) -/* 0D8908 800D7D08 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D890C 800D7D0C 30EF0003 */ andi $t7, $a3, 3 -/* 0D8910 800D7D10 11E00006 */ beqz $t7, .L800D7D2C -/* 0D8914 800D7D14 00000000 */ nop -.L800D7D18: -/* 0D8918 800D7D18 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D891C 800D7D1C 8F070010 */ lw $a3, %lo(D_A4600010)($t8) -/* 0D8920 800D7D20 30F90003 */ andi $t9, $a3, 3 -/* 0D8924 800D7D24 1720FFFC */ bnez $t9, .L800D7D18 -/* 0D8928 800D7D28 00000000 */ nop -.L800D7D2C: -/* 0D892C 800D7D2C 8C88000C */ lw $t0, 0xc($a0) -/* 0D8930 800D7D30 3C01A000 */ lui $at, 0xa000 -/* 0D8934 800D7D34 27BD0008 */ addiu $sp, $sp, 8 -/* 0D8938 800D7D38 01054825 */ or $t1, $t0, $a1 -/* 0D893C 800D7D3C 01215025 */ or $t2, $t1, $at -/* 0D8940 800D7D40 AD460000 */ sw $a2, ($t2) -/* 0D8944 800D7D44 03E00008 */ jr $ra -/* 0D8948 800D7D48 00001025 */ move $v0, $zero - -/* 0D894C 800D7D4C 00000000 */ nop -glabel osYieldThread -/* 0D8950 800D7D50 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D8954 800D7D54 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D8958 800D7D58 0C0346AC */ jal __osDisableInt -/* 0D895C 800D7D5C AFB00018 */ sw $s0, 0x18($sp) -/* 0D8960 800D7D60 3C0F800F */ lui $t7, %hi(D_800EB3B0) # $t7, 0x800f -/* 0D8964 800D7D64 8DEFB3B0 */ lw $t7, %lo(D_800EB3B0)($t7) -/* 0D8968 800D7D68 240E0002 */ li $t6, 2 -/* 0D896C 800D7D6C 3C04800F */ lui $a0, %hi(D_800EB3A8) # $a0, 0x800f -/* 0D8970 800D7D70 00408025 */ move $s0, $v0 -/* 0D8974 800D7D74 2484B3A8 */ addiu $a0, %lo(D_800EB3A8) # addiu $a0, $a0, -0x4c58 -/* 0D8978 800D7D78 0C0345F3 */ jal __osEnqueueAndYield -/* 0D897C 800D7D7C A5EE0010 */ sh $t6, 0x10($t7) -/* 0D8980 800D7D80 0C0346B4 */ jal __osRestoreInt -/* 0D8984 800D7D84 02002025 */ move $a0, $s0 -/* 0D8988 800D7D88 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D898C 800D7D8C 8FB00018 */ lw $s0, 0x18($sp) -/* 0D8990 800D7D90 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D8994 800D7D94 03E00008 */ jr $ra -/* 0D8998 800D7D98 00000000 */ nop - -/* 0D899C 800D7D9C 00000000 */ nop -glabel __osProbeTLB -/* 0D89A0 800D7DA0 40085000 */ mfc0 $t0, $10 -/* 0D89A4 800D7DA4 310900FF */ andi $t1, $t0, 0xff -/* 0D89A8 800D7DA8 2401E000 */ li $at, -8192 -/* 0D89AC 800D7DAC 00815024 */ and $t2, $a0, $at -/* 0D89B0 800D7DB0 012A4825 */ or $t1, $t1, $t2 -/* 0D89B4 800D7DB4 40895000 */ mtc0 $t1, $10 -/* 0D89B8 800D7DB8 00000000 */ nop -/* 0D89BC 800D7DBC 00000000 */ nop -/* 0D89C0 800D7DC0 00000000 */ nop -/* 0D89C4 800D7DC4 42000008 */ tlbp -/* 0D89C8 800D7DC8 00000000 */ nop -/* 0D89CC 800D7DCC 00000000 */ nop -/* 0D89D0 800D7DD0 400B0000 */ mfc0 $t3, $0 -/* 0D89D4 800D7DD4 3C018000 */ lui $at, 0x8000 -/* 0D89D8 800D7DD8 01615824 */ and $t3, $t3, $at -/* 0D89DC 800D7DDC 1560001A */ bnez $t3, .L800D7E48 -/* 0D89E0 800D7DE0 00000000 */ nop -/* 0D89E4 800D7DE4 42000001 */ tlbr -/* 0D89E8 800D7DE8 00000000 */ nop -/* 0D89EC 800D7DEC 00000000 */ nop -/* 0D89F0 800D7DF0 00000000 */ nop -/* 0D89F4 800D7DF4 400B2800 */ mfc0 $t3, $5 -/* 0D89F8 800D7DF8 216B2000 */ addi $t3, $t3, 0x2000 -/* 0D89FC 800D7DFC 000B5842 */ srl $t3, $t3, 1 -/* 0D8A00 800D7E00 01646024 */ and $t4, $t3, $a0 -/* 0D8A04 800D7E04 15800004 */ bnez $t4, .L800D7E18 -/* 0D8A08 800D7E08 216BFFFF */ addi $t3, $t3, -1 -/* 0D8A0C 800D7E0C 40021000 */ mfc0 $v0, $2 -/* 0D8A10 800D7E10 10000002 */ b .L800D7E1C -/* 0D8A14 800D7E14 00000000 */ nop -.L800D7E18: -/* 0D8A18 800D7E18 40021800 */ mfc0 $v0, $3 -.L800D7E1C: -/* 0D8A1C 800D7E1C 304D0002 */ andi $t5, $v0, 2 -/* 0D8A20 800D7E20 11A00009 */ beqz $t5, .L800D7E48 -/* 0D8A24 800D7E24 00000000 */ nop -/* 0D8A28 800D7E28 3C013FFF */ lui $at, (0x3FFFFFC0 >> 16) # lui $at, 0x3fff -/* 0D8A2C 800D7E2C 3421FFC0 */ ori $at, (0x3FFFFFC0 & 0xFFFF) # ori $at, $at, 0xffc0 -/* 0D8A30 800D7E30 00411024 */ and $v0, $v0, $at -/* 0D8A34 800D7E34 00021180 */ sll $v0, $v0, 6 -/* 0D8A38 800D7E38 008B6824 */ and $t5, $a0, $t3 -/* 0D8A3C 800D7E3C 004D1020 */ add $v0, $v0, $t5 -/* 0D8A40 800D7E40 10000002 */ b .L800D7E4C -/* 0D8A44 800D7E44 00000000 */ nop -.L800D7E48: -/* 0D8A48 800D7E48 2402FFFF */ li $v0, -1 -.L800D7E4C: -/* 0D8A4C 800D7E4C 40885000 */ mtc0 $t0, $10 -/* 0D8A50 800D7E50 03E00008 */ jr $ra -/* 0D8A54 800D7E54 00000000 */ nop - -/* 0D8A58 800D7E58 00000000 */ nop -/* 0D8A5C 800D7E5C 00000000 */ nop -glabel __osContAddressCrc -/* 0D8A60 800D7E60 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D8A64 800D7E64 3084FFFF */ andi $a0, $a0, 0xffff -/* 0D8A68 800D7E68 A3A0000F */ sb $zero, 0xf($sp) -/* 0D8A6C 800D7E6C AFA00008 */ sw $zero, 8($sp) -.L800D7E70: -/* 0D8A70 800D7E70 93AE000F */ lbu $t6, 0xf($sp) -/* 0D8A74 800D7E74 31CF0010 */ andi $t7, $t6, 0x10 -/* 0D8A78 800D7E78 11E00004 */ beqz $t7, .L800D7E8C -/* 0D8A7C 800D7E7C 00000000 */ nop -/* 0D8A80 800D7E80 24180015 */ li $t8, 21 -/* 0D8A84 800D7E84 10000002 */ b .L800D7E90 -/* 0D8A88 800D7E88 A3B8000E */ sb $t8, 0xe($sp) -.L800D7E8C: -/* 0D8A8C 800D7E8C A3A0000E */ sb $zero, 0xe($sp) -.L800D7E90: -/* 0D8A90 800D7E90 93B9000F */ lbu $t9, 0xf($sp) -/* 0D8A94 800D7E94 30890400 */ andi $t1, $a0, 0x400 -/* 0D8A98 800D7E98 00194040 */ sll $t0, $t9, 1 -/* 0D8A9C 800D7E9C 11200003 */ beqz $t1, .L800D7EAC -/* 0D8AA0 800D7EA0 A3A8000F */ sb $t0, 0xf($sp) -/* 0D8AA4 800D7EA4 10000002 */ b .L800D7EB0 -/* 0D8AA8 800D7EA8 24050001 */ li $a1, 1 -.L800D7EAC: -/* 0D8AAC 800D7EAC 00002825 */ move $a1, $zero -.L800D7EB0: -/* 0D8AB0 800D7EB0 93AA000F */ lbu $t2, 0xf($sp) -/* 0D8AB4 800D7EB4 8FA80008 */ lw $t0, 8($sp) -/* 0D8AB8 800D7EB8 93AF000E */ lbu $t7, 0xe($sp) -/* 0D8ABC 800D7EBC 30AB00FF */ andi $t3, $a1, 0xff -/* 0D8AC0 800D7EC0 00046840 */ sll $t5, $a0, 1 -/* 0D8AC4 800D7EC4 014B6025 */ or $t4, $t2, $t3 -/* 0D8AC8 800D7EC8 01A02025 */ move $a0, $t5 -/* 0D8ACC 800D7ECC 319800FF */ andi $t8, $t4, 0xff -/* 0D8AD0 800D7ED0 25090001 */ addiu $t1, $t0, 1 -/* 0D8AD4 800D7ED4 29210010 */ slti $at, $t1, 0x10 -/* 0D8AD8 800D7ED8 A3AC000F */ sb $t4, 0xf($sp) -/* 0D8ADC 800D7EDC 308EFFFF */ andi $t6, $a0, 0xffff -/* 0D8AE0 800D7EE0 030FC826 */ xor $t9, $t8, $t7 -/* 0D8AE4 800D7EE4 AFA90008 */ sw $t1, 8($sp) -/* 0D8AE8 800D7EE8 01C02025 */ move $a0, $t6 -/* 0D8AEC 800D7EEC 1420FFE0 */ bnez $at, .L800D7E70 -/* 0D8AF0 800D7EF0 A3B9000F */ sb $t9, 0xf($sp) -/* 0D8AF4 800D7EF4 93A2000F */ lbu $v0, 0xf($sp) -/* 0D8AF8 800D7EF8 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0D8AFC 800D7EFC 304A001F */ andi $t2, $v0, 0x1f -/* 0D8B00 800D7F00 01401025 */ move $v0, $t2 -/* 0D8B04 800D7F04 304B00FF */ andi $t3, $v0, 0xff -/* 0D8B08 800D7F08 03E00008 */ jr $ra -/* 0D8B0C 800D7F0C 01601025 */ move $v0, $t3 - -glabel __osContDataCrc -/* 0D8B10 800D7F10 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D8B14 800D7F14 A3A0000F */ sb $zero, 0xf($sp) -/* 0D8B18 800D7F18 AFA00008 */ sw $zero, 8($sp) -.L800D7F1C: -/* 0D8B1C 800D7F1C 240E0007 */ li $t6, 7 -/* 0D8B20 800D7F20 AFAE0004 */ sw $t6, 4($sp) -.L800D7F24: -/* 0D8B24 800D7F24 93AF000F */ lbu $t7, 0xf($sp) -/* 0D8B28 800D7F28 31F80080 */ andi $t8, $t7, 0x80 -/* 0D8B2C 800D7F2C 13000004 */ beqz $t8, .L800D7F40 -/* 0D8B30 800D7F30 00000000 */ nop -/* 0D8B34 800D7F34 24190085 */ li $t9, 133 -/* 0D8B38 800D7F38 10000002 */ b .L800D7F44 -/* 0D8B3C 800D7F3C A3B9000E */ sb $t9, 0xe($sp) -.L800D7F40: -/* 0D8B40 800D7F40 A3A0000E */ sb $zero, 0xe($sp) -.L800D7F44: -/* 0D8B44 800D7F44 93A8000F */ lbu $t0, 0xf($sp) -/* 0D8B48 800D7F48 8FAA0008 */ lw $t2, 8($sp) -/* 0D8B4C 800D7F4C 24010020 */ li $at, 32 -/* 0D8B50 800D7F50 00084840 */ sll $t1, $t0, 1 -/* 0D8B54 800D7F54 15410004 */ bne $t2, $at, .L800D7F68 -/* 0D8B58 800D7F58 A3A9000F */ sb $t1, 0xf($sp) -/* 0D8B5C 800D7F5C 312B00FF */ andi $t3, $t1, 0xff -/* 0D8B60 800D7F60 1000000E */ b .L800D7F9C -/* 0D8B64 800D7F64 A3AB000F */ sb $t3, 0xf($sp) -.L800D7F68: -/* 0D8B68 800D7F68 8FAD0004 */ lw $t5, 4($sp) -/* 0D8B6C 800D7F6C 908C0000 */ lbu $t4, ($a0) -/* 0D8B70 800D7F70 240E0001 */ li $t6, 1 -/* 0D8B74 800D7F74 01AE7804 */ sllv $t7, $t6, $t5 -/* 0D8B78 800D7F78 018FC024 */ and $t8, $t4, $t7 -/* 0D8B7C 800D7F7C 13000003 */ beqz $t8, .L800D7F8C -/* 0D8B80 800D7F80 00000000 */ nop -/* 0D8B84 800D7F84 10000002 */ b .L800D7F90 -/* 0D8B88 800D7F88 24050001 */ li $a1, 1 -.L800D7F8C: -/* 0D8B8C 800D7F8C 00002825 */ move $a1, $zero -.L800D7F90: -/* 0D8B90 800D7F90 93B9000F */ lbu $t9, 0xf($sp) -/* 0D8B94 800D7F94 03254025 */ or $t0, $t9, $a1 -/* 0D8B98 800D7F98 A3A8000F */ sb $t0, 0xf($sp) -.L800D7F9C: -/* 0D8B9C 800D7F9C 8FAE0004 */ lw $t6, 4($sp) -/* 0D8BA0 800D7FA0 93AA000F */ lbu $t2, 0xf($sp) -/* 0D8BA4 800D7FA4 93A9000E */ lbu $t1, 0xe($sp) -/* 0D8BA8 800D7FA8 25CDFFFF */ addiu $t5, $t6, -1 -/* 0D8BAC 800D7FAC AFAD0004 */ sw $t5, 4($sp) -/* 0D8BB0 800D7FB0 01495826 */ xor $t3, $t2, $t1 -/* 0D8BB4 800D7FB4 05A1FFDB */ bgez $t5, .L800D7F24 -/* 0D8BB8 800D7FB8 A3AB000F */ sb $t3, 0xf($sp) -/* 0D8BBC 800D7FBC 8FAC0008 */ lw $t4, 8($sp) -/* 0D8BC0 800D7FC0 24840001 */ addiu $a0, $a0, 1 -/* 0D8BC4 800D7FC4 258F0001 */ addiu $t7, $t4, 1 -/* 0D8BC8 800D7FC8 29E10021 */ slti $at, $t7, 0x21 -/* 0D8BCC 800D7FCC 1420FFD3 */ bnez $at, .L800D7F1C -/* 0D8BD0 800D7FD0 AFAF0008 */ sw $t7, 8($sp) -/* 0D8BD4 800D7FD4 93A2000F */ lbu $v0, 0xf($sp) -/* 0D8BD8 800D7FD8 03E00008 */ jr $ra -/* 0D8BDC 800D7FDC 27BD0010 */ addiu $sp, $sp, 0x10 - -glabel memcpy -/* 0D8BE0 800D7FE0 00801025 */ move $v0, $a0 -/* 0D8BE4 800D7FE4 10C00007 */ beqz $a2, .L800D8004 -/* 0D8BE8 800D7FE8 00A01825 */ move $v1, $a1 -.L800D7FEC: -/* 0D8BEC 800D7FEC 906E0000 */ lbu $t6, ($v1) -/* 0D8BF0 800D7FF0 24C6FFFF */ addiu $a2, $a2, -1 -/* 0D8BF4 800D7FF4 24420001 */ addiu $v0, $v0, 1 -/* 0D8BF8 800D7FF8 24630001 */ addiu $v1, $v1, 1 -/* 0D8BFC 800D7FFC 14C0FFFB */ bnez $a2, .L800D7FEC -/* 0D8C00 800D8000 A04EFFFF */ sb $t6, -1($v0) -.L800D8004: -/* 0D8C04 800D8004 03E00008 */ jr $ra -/* 0D8C08 800D8008 00801025 */ move $v0, $a0 - -glabel strlen -/* 0D8C0C 800D800C 908E0000 */ lbu $t6, ($a0) -/* 0D8C10 800D8010 00801825 */ move $v1, $a0 -/* 0D8C14 800D8014 11C00005 */ beqz $t6, .L800D802C -/* 0D8C18 800D8018 00000000 */ nop -/* 0D8C1C 800D801C 906F0001 */ lbu $t7, 1($v1) -.L800D8020: -/* 0D8C20 800D8020 24630001 */ addiu $v1, $v1, 1 -/* 0D8C24 800D8024 55E0FFFE */ bnel $t7, $zero, .L800D8020 -/* 0D8C28 800D8028 906F0001 */ lbu $t7, 1($v1) -.L800D802C: -/* 0D8C2C 800D802C 03E00008 */ jr $ra -/* 0D8C30 800D8030 00641023 */ subu $v0, $v1, $a0 - -glabel strchr -/* 0D8C34 800D8034 90830000 */ lbu $v1, ($a0) -/* 0D8C38 800D8038 30AE00FF */ andi $t6, $a1, 0xff -/* 0D8C3C 800D803C 30A200FF */ andi $v0, $a1, 0xff -/* 0D8C40 800D8040 51C3000A */ beql $t6, $v1, .L800D806C -/* 0D8C44 800D8044 00801025 */ move $v0, $a0 -.L800D8048: -/* 0D8C48 800D8048 54600004 */ bnel $v1, $zero, .L800D805C -/* 0D8C4C 800D804C 90830001 */ lbu $v1, 1($a0) -/* 0D8C50 800D8050 03E00008 */ jr $ra -/* 0D8C54 800D8054 00001025 */ move $v0, $zero - -/* 0D8C58 800D8058 90830001 */ lbu $v1, 1($a0) -.L800D805C: -/* 0D8C5C 800D805C 24840001 */ addiu $a0, $a0, 1 -/* 0D8C60 800D8060 1443FFF9 */ bne $v0, $v1, .L800D8048 -/* 0D8C64 800D8064 00000000 */ nop -/* 0D8C68 800D8068 00801025 */ move $v0, $a0 -.L800D806C: -/* 0D8C6C 800D806C 03E00008 */ jr $ra -/* 0D8C70 800D8070 00000000 */ nop - -/* 0D8C74 800D8074 00000000 */ nop -/* 0D8C78 800D8078 00000000 */ nop -/* 0D8C7C 800D807C 00000000 */ nop -glabel _Litob -/* 0D8C80 800D8080 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0D8C84 800D8084 AFB10020 */ sw $s1, 0x20($sp) -/* 0D8C88 800D8088 30A200FF */ andi $v0, $a1, 0xff -/* 0D8C8C 800D808C 24030058 */ li $v1, 88 -/* 0D8C90 800D8090 00808825 */ move $s1, $a0 -/* 0D8C94 800D8094 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D8C98 800D8098 AFB30028 */ sw $s3, 0x28($sp) -/* 0D8C9C 800D809C AFB20024 */ sw $s2, 0x24($sp) -/* 0D8CA0 800D80A0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0D8CA4 800D80A4 14620004 */ bne $v1, $v0, .L800D80B8 -/* 0D8CA8 800D80A8 AFA50094 */ sw $a1, 0x94($sp) -/* 0D8CAC 800D80AC 3C13800F */ lui $s3, %hi(D_800EB5B4) # $s3, 0x800f -/* 0D8CB0 800D80B0 10000003 */ b .L800D80C0 -/* 0D8CB4 800D80B4 2673B5B4 */ addiu $s3, %lo(D_800EB5B4) # addiu $s3, $s3, -0x4a4c -.L800D80B8: -/* 0D8CB8 800D80B8 3C13800F */ lui $s3, %hi(D_800EB5A0) # $s3, 0x800f -/* 0D8CBC 800D80BC 2673B5A0 */ addiu $s3, %lo(D_800EB5A0) # addiu $s3, $s3, -0x4a60 -.L800D80C0: -/* 0D8CC0 800D80C0 2401006F */ li $at, 111 -/* 0D8CC4 800D80C4 14410003 */ bne $v0, $at, .L800D80D4 -/* 0D8CC8 800D80C8 24100018 */ li $s0, 24 -/* 0D8CCC 800D80CC 10000009 */ b .L800D80F4 -/* 0D8CD0 800D80D0 24090008 */ li $t1, 8 -.L800D80D4: -/* 0D8CD4 800D80D4 24010078 */ li $at, 120 -/* 0D8CD8 800D80D8 10410005 */ beq $v0, $at, .L800D80F0 -/* 0D8CDC 800D80DC 24080010 */ li $t0, 16 -/* 0D8CE0 800D80E0 10620003 */ beq $v1, $v0, .L800D80F0 -/* 0D8CE4 800D80E4 00000000 */ nop -/* 0D8CE8 800D80E8 10000001 */ b .L800D80F0 -/* 0D8CEC 800D80EC 2408000A */ li $t0, 10 -.L800D80F0: -/* 0D8CF0 800D80F0 01004825 */ move $t1, $t0 -.L800D80F4: -/* 0D8CF4 800D80F4 8E380000 */ lw $t8, ($s1) -/* 0D8CF8 800D80F8 8E390004 */ lw $t9, 4($s1) -/* 0D8CFC 800D80FC 24010064 */ li $at, 100 -/* 0D8D00 800D8100 AFB80060 */ sw $t8, 0x60($sp) -/* 0D8D04 800D8104 AFB80040 */ sw $t8, 0x40($sp) -/* 0D8D08 800D8108 AFB90044 */ sw $t9, 0x44($sp) -/* 0D8D0C 800D810C 10410004 */ beq $v0, $at, .L800D8120 -/* 0D8D10 800D8110 AFB90064 */ sw $t9, 0x64($sp) -/* 0D8D14 800D8114 24010069 */ li $at, 105 -/* 0D8D18 800D8118 54410010 */ bnel $v0, $at, .L800D815C -/* 0D8D1C 800D811C 8FAA0060 */ lw $t2, 0x60($sp) -.L800D8120: -/* 0D8D20 800D8120 8FAC0040 */ lw $t4, 0x40($sp) -/* 0D8D24 800D8124 5D80000D */ bgtzl $t4, .L800D815C -/* 0D8D28 800D8128 8FAA0060 */ lw $t2, 0x60($sp) -/* 0D8D2C 800D812C 05800003 */ bltz $t4, .L800D813C -/* 0D8D30 800D8130 8FAE0060 */ lw $t6, 0x60($sp) -/* 0D8D34 800D8134 10000009 */ b .L800D815C -/* 0D8D38 800D8138 8FAA0060 */ lw $t2, 0x60($sp) -.L800D813C: -/* 0D8D3C 800D813C 8FAF0064 */ lw $t7, 0x64($sp) -/* 0D8D40 800D8140 01C0C027 */ not $t8, $t6 -/* 0D8D44 800D8144 2DE10001 */ sltiu $at, $t7, 1 -/* 0D8D48 800D8148 0301C021 */ addu $t8, $t8, $at -/* 0D8D4C 800D814C 000FC823 */ negu $t9, $t7 -/* 0D8D50 800D8150 AFB90064 */ sw $t9, 0x64($sp) -/* 0D8D54 800D8154 AFB80060 */ sw $t8, 0x60($sp) -/* 0D8D58 800D8158 8FAA0060 */ lw $t2, 0x60($sp) -.L800D815C: -/* 0D8D5C 800D815C 8FAB0064 */ lw $t3, 0x64($sp) -/* 0D8D60 800D8160 24080017 */ li $t0, 23 -/* 0D8D64 800D8164 15400006 */ bnez $t2, .L800D8180 -/* 0D8D68 800D8168 8FA40060 */ lw $a0, 0x60($sp) -/* 0D8D6C 800D816C 55600005 */ bnel $t3, $zero, .L800D8184 -/* 0D8D70 800D8170 24100017 */ li $s0, 23 -/* 0D8D74 800D8174 8E2C0024 */ lw $t4, 0x24($s1) -/* 0D8D78 800D8178 51800010 */ beql $t4, $zero, .L800D81BC -/* 0D8D7C 800D817C 27B20078 */ addiu $s2, $sp, 0x78 -.L800D8180: -/* 0D8D80 800D8180 24100017 */ li $s0, 23 -.L800D8184: -/* 0D8D84 800D8184 8FA50064 */ lw $a1, 0x64($sp) -/* 0D8D88 800D8188 01203825 */ move $a3, $t1 -/* 0D8D8C 800D818C 000937C3 */ sra $a2, $t1, 0x1f -/* 0D8D90 800D8190 AFA8004C */ sw $t0, 0x4c($sp) -/* 0D8D94 800D8194 0C0337A7 */ jal __ull_rem -/* 0D8D98 800D8198 AFA90070 */ sw $t1, 0x70($sp) -/* 0D8D9C 800D819C 8FA8004C */ lw $t0, 0x4c($sp) -/* 0D8DA0 800D81A0 00737021 */ addu $t6, $v1, $s3 -/* 0D8DA4 800D81A4 91CF0000 */ lbu $t7, ($t6) -/* 0D8DA8 800D81A8 27B20078 */ addiu $s2, $sp, 0x78 -/* 0D8DAC 800D81AC 8FA90070 */ lw $t1, 0x70($sp) -/* 0D8DB0 800D81B0 0248C021 */ addu $t8, $s2, $t0 -/* 0D8DB4 800D81B4 A30F0000 */ sb $t7, ($t8) -/* 0D8DB8 800D81B8 27B20078 */ addiu $s2, $sp, 0x78 -.L800D81BC: -/* 0D8DBC 800D81BC 8FA40060 */ lw $a0, 0x60($sp) -/* 0D8DC0 800D81C0 8FA50064 */ lw $a1, 0x64($sp) -/* 0D8DC4 800D81C4 01203825 */ move $a3, $t1 -/* 0D8DC8 800D81C8 000937C3 */ sra $a2, $t1, 0x1f -/* 0D8DCC 800D81CC 0C0337B6 */ jal __ull_div -/* 0D8DD0 800D81D0 AFA90070 */ sw $t1, 0x70($sp) -/* 0D8DD4 800D81D4 8FA90070 */ lw $t1, 0x70($sp) -/* 0D8DD8 800D81D8 AE230004 */ sw $v1, 4($s1) -/* 0D8DDC 800D81DC 0440002B */ bltz $v0, .L800D828C -/* 0D8DE0 800D81E0 AE220000 */ sw $v0, ($s1) -/* 0D8DE4 800D81E4 1C400003 */ bgtz $v0, .L800D81F4 -/* 0D8DE8 800D81E8 00000000 */ nop -/* 0D8DEC 800D81EC 50600028 */ beql $v1, $zero, .L800D8290 -/* 0D8DF0 800D81F0 240C0018 */ li $t4, 24 -.L800D81F4: -/* 0D8DF4 800D81F4 1A000025 */ blez $s0, .L800D828C -/* 0D8DF8 800D81F8 000967C3 */ sra $t4, $t1, 0x1f -/* 0D8DFC 800D81FC 8E2A0000 */ lw $t2, ($s1) -/* 0D8E00 800D8200 8E2B0004 */ lw $t3, 4($s1) -/* 0D8E04 800D8204 AFA9003C */ sw $t1, 0x3c($sp) -/* 0D8E08 800D8208 AFAC0038 */ sw $t4, 0x38($sp) -/* 0D8E0C 800D820C AFAA0040 */ sw $t2, 0x40($sp) -/* 0D8E10 800D8210 AFAB0044 */ sw $t3, 0x44($sp) -/* 0D8E14 800D8214 8FAE0038 */ lw $t6, 0x38($sp) -.L800D8218: -/* 0D8E18 800D8218 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D8E1C 800D821C 27A40050 */ addiu $a0, $sp, 0x50 -/* 0D8E20 800D8220 8FA60040 */ lw $a2, 0x40($sp) -/* 0D8E24 800D8224 8FA70044 */ lw $a3, 0x44($sp) -/* 0D8E28 800D8228 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D8E2C 800D822C 0C036378 */ jal lldiv -/* 0D8E30 800D8230 AFAF0014 */ sw $t7, 0x14($sp) -/* 0D8E34 800D8234 8FB80050 */ lw $t8, 0x50($sp) -/* 0D8E38 800D8238 8FB90054 */ lw $t9, 0x54($sp) -/* 0D8E3C 800D823C 2604FFFF */ addiu $a0, $s0, -1 -/* 0D8E40 800D8240 AE380000 */ sw $t8, ($s1) -/* 0D8E44 800D8244 AE390004 */ sw $t9, 4($s1) -/* 0D8E48 800D8248 8FAB005C */ lw $t3, 0x5c($sp) -/* 0D8E4C 800D824C 02447821 */ addu $t7, $s2, $a0 -/* 0D8E50 800D8250 00808025 */ move $s0, $a0 -/* 0D8E54 800D8254 01736821 */ addu $t5, $t3, $s3 -/* 0D8E58 800D8258 91AE0000 */ lbu $t6, ($t5) -/* 0D8E5C 800D825C A1EE0000 */ sb $t6, ($t7) -/* 0D8E60 800D8260 8E380000 */ lw $t8, ($s1) -/* 0D8E64 800D8264 8E390004 */ lw $t9, 4($s1) -/* 0D8E68 800D8268 AFB80040 */ sw $t8, 0x40($sp) -/* 0D8E6C 800D826C 07000007 */ bltz $t8, .L800D828C -/* 0D8E70 800D8270 AFB90044 */ sw $t9, 0x44($sp) -/* 0D8E74 800D8274 1F000003 */ bgtz $t8, .L800D8284 -/* 0D8E78 800D8278 00000000 */ nop -/* 0D8E7C 800D827C 53200004 */ beql $t9, $zero, .L800D8290 -/* 0D8E80 800D8280 240C0018 */ li $t4, 24 -.L800D8284: -/* 0D8E84 800D8284 5E00FFE4 */ bgtzl $s0, .L800D8218 -/* 0D8E88 800D8288 8FAE0038 */ lw $t6, 0x38($sp) -.L800D828C: -/* 0D8E8C 800D828C 240C0018 */ li $t4, 24 -.L800D8290: -/* 0D8E90 800D8290 01903023 */ subu $a2, $t4, $s0 -/* 0D8E94 800D8294 AE260014 */ sw $a2, 0x14($s1) -/* 0D8E98 800D8298 8E240008 */ lw $a0, 8($s1) -/* 0D8E9C 800D829C 0C035FF8 */ jal memcpy -/* 0D8EA0 800D82A0 02502821 */ addu $a1, $s2, $s0 -/* 0D8EA4 800D82A4 8E250014 */ lw $a1, 0x14($s1) -/* 0D8EA8 800D82A8 8E240024 */ lw $a0, 0x24($s1) -/* 0D8EAC 800D82AC 00A4082A */ slt $at, $a1, $a0 -/* 0D8EB0 800D82B0 10200002 */ beqz $at, .L800D82BC -/* 0D8EB4 800D82B4 00856823 */ subu $t5, $a0, $a1 -/* 0D8EB8 800D82B8 AE2D0010 */ sw $t5, 0x10($s1) -.L800D82BC: -/* 0D8EBC 800D82BC 04830010 */ bgezl $a0, .L800D8300 -/* 0D8EC0 800D82C0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D8EC4 800D82C4 8E2E0030 */ lw $t6, 0x30($s1) -/* 0D8EC8 800D82C8 24010010 */ li $at, 16 -/* 0D8ECC 800D82CC 31CF0014 */ andi $t7, $t6, 0x14 -/* 0D8ED0 800D82D0 55E1000B */ bnel $t7, $at, .L800D8300 -/* 0D8ED4 800D82D4 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D8ED8 800D82D8 8E380028 */ lw $t8, 0x28($s1) -/* 0D8EDC 800D82DC 8E39000C */ lw $t9, 0xc($s1) -/* 0D8EE0 800D82E0 8E220010 */ lw $v0, 0x10($s1) -/* 0D8EE4 800D82E4 03195023 */ subu $t2, $t8, $t9 -/* 0D8EE8 800D82E8 01425823 */ subu $t3, $t2, $v0 -/* 0D8EEC 800D82EC 01658023 */ subu $s0, $t3, $a1 -/* 0D8EF0 800D82F0 1A000002 */ blez $s0, .L800D82FC -/* 0D8EF4 800D82F4 00506021 */ addu $t4, $v0, $s0 -/* 0D8EF8 800D82F8 AE2C0010 */ sw $t4, 0x10($s1) -.L800D82FC: -/* 0D8EFC 800D82FC 8FBF002C */ lw $ra, 0x2c($sp) -.L800D8300: -/* 0D8F00 800D8300 8FB0001C */ lw $s0, 0x1c($sp) -/* 0D8F04 800D8304 8FB10020 */ lw $s1, 0x20($sp) -/* 0D8F08 800D8308 8FB20024 */ lw $s2, 0x24($sp) -/* 0D8F0C 800D830C 8FB30028 */ lw $s3, 0x28($sp) -/* 0D8F10 800D8310 03E00008 */ jr $ra -/* 0D8F14 800D8314 27BD0090 */ addiu $sp, $sp, 0x90 - -/* 0D8F18 800D8318 00000000 */ nop -/* 0D8F1C 800D831C 00000000 */ nop -glabel _Ldtob -/* 0D8F20 800D8320 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D8F24 800D8324 AFB20028 */ sw $s2, 0x28($sp) -/* 0D8F28 800D8328 00127400 */ sll $t6, $s2, 0x10 -/* 0D8F2C 800D832C 000E9403 */ sra $s2, $t6, 0x10 -/* 0D8F30 800D8330 AFB30024 */ sw $s3, 0x24($sp) -/* 0D8F34 800D8334 0013C400 */ sll $t8, $s3, 0x10 -/* 0D8F38 800D8338 00189C03 */ sra $s3, $t8, 0x10 -/* 0D8F3C 800D833C 328E00FF */ andi $t6, $s4, 0xff -/* 0D8F40 800D8340 AFB4001C */ sw $s4, 0x1c($sp) -/* 0D8F44 800D8344 01C0A025 */ move $s4, $t6 -/* 0D8F48 800D8348 1E600004 */ bgtz $s3, .L800D835C -/* 0D8F4C 800D834C AFBF0014 */ sw $ra, 0x14($sp) -/* 0D8F50 800D8350 3C11800F */ lui $s1, %hi(D_800F3CF0) # $s1, 0x800f -/* 0D8F54 800D8354 26313CF0 */ addiu $s1, %lo(D_800F3CF0) # addiu $s1, $s1, 0x3cf0 -/* 0D8F58 800D8358 24130001 */ li $s3, 1 -.L800D835C: -/* 0D8F5C 800D835C 24020066 */ li $v0, 102 -/* 0D8F60 800D8360 1054000C */ beq $v0, $s4, .L800D8394 -/* 0D8F64 800D8364 02801825 */ move $v1, $s4 -/* 0D8F68 800D8368 24040067 */ li $a0, 103 -/* 0D8F6C 800D836C 10830002 */ beq $a0, $v1, .L800D8378 -/* 0D8F70 800D8370 24010047 */ li $at, 71 -/* 0D8F74 800D8374 14610096 */ bne $v1, $at, .L800D85D0 -.L800D8378: -/* 0D8F78 800D8378 2A41FFFC */ slti $at, $s2, -4 -/* 0D8F7C 800D837C 14200094 */ bnez $at, .L800D85D0 -/* 0D8F80 800D8380 00000000 */ nop -/* 0D8F84 800D8384 8E0F0024 */ lw $t7, 0x24($s0) -/* 0D8F88 800D8388 024F082A */ slt $at, $s2, $t7 -/* 0D8F8C 800D838C 10200090 */ beqz $at, .L800D85D0 -/* 0D8F90 800D8390 00000000 */ nop -.L800D8394: -/* 0D8F94 800D8394 26520001 */ addiu $s2, $s2, 1 -/* 0D8F98 800D8398 0012C400 */ sll $t8, $s2, 0x10 -/* 0D8F9C 800D839C 1043000E */ beq $v0, $v1, .L800D83D8 -/* 0D8FA0 800D83A0 00189403 */ sra $s2, $t8, 0x10 -/* 0D8FA4 800D83A4 8E0E0030 */ lw $t6, 0x30($s0) -/* 0D8FA8 800D83A8 8E020024 */ lw $v0, 0x24($s0) -/* 0D8FAC 800D83AC 31CF0008 */ andi $t7, $t6, 8 -/* 0D8FB0 800D83B0 15E00005 */ bnez $t7, .L800D83C8 -/* 0D8FB4 800D83B4 0262082A */ slt $at, $s3, $v0 -/* 0D8FB8 800D83B8 50200004 */ beql $at, $zero, .L800D83CC -/* 0D8FBC 800D83BC 0052C023 */ subu $t8, $v0, $s2 -/* 0D8FC0 800D83C0 AE130024 */ sw $s3, 0x24($s0) -/* 0D8FC4 800D83C4 02601025 */ move $v0, $s3 -.L800D83C8: -/* 0D8FC8 800D83C8 0052C023 */ subu $t8, $v0, $s2 -.L800D83CC: -/* 0D8FCC 800D83CC 07010002 */ bgez $t8, .L800D83D8 -/* 0D8FD0 800D83D0 AE180024 */ sw $t8, 0x24($s0) -/* 0D8FD4 800D83D4 AE000024 */ sw $zero, 0x24($s0) -.L800D83D8: -/* 0D8FD8 800D83D8 1E400033 */ bgtz $s2, .L800D84A8 -/* 0D8FDC 800D83DC 0272082A */ slt $at, $s3, $s2 -/* 0D8FE0 800D83E0 8E0F0008 */ lw $t7, 8($s0) -/* 0D8FE4 800D83E4 8E180014 */ lw $t8, 0x14($s0) -/* 0D8FE8 800D83E8 240E0030 */ li $t6, 48 -/* 0D8FEC 800D83EC 00121823 */ negu $v1, $s2 -/* 0D8FF0 800D83F0 01F8C821 */ addu $t9, $t7, $t8 -/* 0D8FF4 800D83F4 A32E0000 */ sb $t6, ($t9) -/* 0D8FF8 800D83F8 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D8FFC 800D83FC 8E020024 */ lw $v0, 0x24($s0) -/* 0D9000 800D8400 02202825 */ move $a1, $s1 -/* 0D9004 800D8404 25F80001 */ addiu $t8, $t7, 1 -/* 0D9008 800D8408 1C400005 */ bgtz $v0, .L800D8420 -/* 0D900C 800D840C AE180014 */ sw $t8, 0x14($s0) -/* 0D9010 800D8410 8E0E0030 */ lw $t6, 0x30($s0) -/* 0D9014 800D8414 31D90008 */ andi $t9, $t6, 8 -/* 0D9018 800D8418 5320000B */ beql $t9, $zero, .L800D8448 -/* 0D901C 800D841C 0043082A */ slt $at, $v0, $v1 -.L800D8420: -/* 0D9020 800D8420 8E180008 */ lw $t8, 8($s0) -/* 0D9024 800D8424 8E0E0014 */ lw $t6, 0x14($s0) -/* 0D9028 800D8428 240F002E */ li $t7, 46 -/* 0D902C 800D842C 030EC821 */ addu $t9, $t8, $t6 -/* 0D9030 800D8430 A32F0000 */ sb $t7, ($t9) -/* 0D9034 800D8434 8E180014 */ lw $t8, 0x14($s0) -/* 0D9038 800D8438 8E020024 */ lw $v0, 0x24($s0) -/* 0D903C 800D843C 270E0001 */ addiu $t6, $t8, 1 -/* 0D9040 800D8440 AE0E0014 */ sw $t6, 0x14($s0) -/* 0D9044 800D8444 0043082A */ slt $at, $v0, $v1 -.L800D8448: -/* 0D9048 800D8448 50200006 */ beql $at, $zero, .L800D8464 -/* 0D904C 800D844C 0052C021 */ addu $t8, $v0, $s2 -/* 0D9050 800D8450 00029023 */ negu $s2, $v0 -/* 0D9054 800D8454 00127C00 */ sll $t7, $s2, 0x10 -/* 0D9058 800D8458 000F9403 */ sra $s2, $t7, 0x10 -/* 0D905C 800D845C 00121823 */ negu $v1, $s2 -/* 0D9060 800D8460 0052C021 */ addu $t8, $v0, $s2 -.L800D8464: -/* 0D9064 800D8464 0313082A */ slt $at, $t8, $s3 -/* 0D9068 800D8468 AE030018 */ sw $v1, 0x18($s0) -/* 0D906C 800D846C 10200004 */ beqz $at, .L800D8480 -/* 0D9070 800D8470 AE180024 */ sw $t8, 0x24($s0) -/* 0D9074 800D8474 00189C00 */ sll $s3, $t8, 0x10 -/* 0D9078 800D8478 00137403 */ sra $t6, $s3, 0x10 -/* 0D907C 800D847C 01C09825 */ move $s3, $t6 -.L800D8480: -/* 0D9080 800D8480 8E0F0008 */ lw $t7, 8($s0) -/* 0D9084 800D8484 8E190014 */ lw $t9, 0x14($s0) -/* 0D9088 800D8488 AE13001C */ sw $s3, 0x1c($s0) -/* 0D908C 800D848C 02603025 */ move $a2, $s3 -/* 0D9090 800D8490 0C035FF8 */ jal memcpy -/* 0D9094 800D8494 01F92021 */ addu $a0, $t7, $t9 -/* 0D9098 800D8498 8E180024 */ lw $t8, 0x24($s0) -/* 0D909C 800D849C 03137023 */ subu $t6, $t8, $s3 -/* 0D90A0 800D84A0 100000E2 */ b .L800D882C -/* 0D90A4 800D84A4 AE0E0020 */ sw $t6, 0x20($s0) -.L800D84A8: -/* 0D90A8 800D84A8 1020001D */ beqz $at, .L800D8520 -/* 0D90AC 800D84AC 02202825 */ move $a1, $s1 -/* 0D90B0 800D84B0 8E0F0008 */ lw $t7, 8($s0) -/* 0D90B4 800D84B4 8E190014 */ lw $t9, 0x14($s0) -/* 0D90B8 800D84B8 02202825 */ move $a1, $s1 -/* 0D90BC 800D84BC 02603025 */ move $a2, $s3 -/* 0D90C0 800D84C0 0C035FF8 */ jal memcpy -/* 0D90C4 800D84C4 01F92021 */ addu $a0, $t7, $t9 -/* 0D90C8 800D84C8 8E180014 */ lw $t8, 0x14($s0) -/* 0D90CC 800D84CC 8E020024 */ lw $v0, 0x24($s0) -/* 0D90D0 800D84D0 02537823 */ subu $t7, $s2, $s3 -/* 0D90D4 800D84D4 03137021 */ addu $t6, $t8, $s3 -/* 0D90D8 800D84D8 AE0E0014 */ sw $t6, 0x14($s0) -/* 0D90DC 800D84DC 1C400005 */ bgtz $v0, .L800D84F4 -/* 0D90E0 800D84E0 AE0F0018 */ sw $t7, 0x18($s0) -/* 0D90E4 800D84E4 8E190030 */ lw $t9, 0x30($s0) -/* 0D90E8 800D84E8 33380008 */ andi $t8, $t9, 8 -/* 0D90EC 800D84EC 1300000A */ beqz $t8, .L800D8518 -/* 0D90F0 800D84F0 00000000 */ nop -.L800D84F4: -/* 0D90F4 800D84F4 8E0F0008 */ lw $t7, 8($s0) -/* 0D90F8 800D84F8 8E190014 */ lw $t9, 0x14($s0) -/* 0D90FC 800D84FC 240E002E */ li $t6, 46 -/* 0D9100 800D8500 01F9C021 */ addu $t8, $t7, $t9 -/* 0D9104 800D8504 A30E0000 */ sb $t6, ($t8) -/* 0D9108 800D8508 8E0F001C */ lw $t7, 0x1c($s0) -/* 0D910C 800D850C 8E020024 */ lw $v0, 0x24($s0) -/* 0D9110 800D8510 25F90001 */ addiu $t9, $t7, 1 -/* 0D9114 800D8514 AE19001C */ sw $t9, 0x1c($s0) -.L800D8518: -/* 0D9118 800D8518 100000C4 */ b .L800D882C -/* 0D911C 800D851C AE020020 */ sw $v0, 0x20($s0) -.L800D8520: -/* 0D9120 800D8520 8E0E0008 */ lw $t6, 8($s0) -/* 0D9124 800D8524 8E180014 */ lw $t8, 0x14($s0) -/* 0D9128 800D8528 02403025 */ move $a2, $s2 -/* 0D912C 800D852C 0C035FF8 */ jal memcpy -/* 0D9130 800D8530 01D82021 */ addu $a0, $t6, $t8 -/* 0D9134 800D8534 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D9138 800D8538 8E020024 */ lw $v0, 0x24($s0) -/* 0D913C 800D853C 02729823 */ subu $s3, $s3, $s2 -/* 0D9140 800D8540 00137400 */ sll $t6, $s3, 0x10 -/* 0D9144 800D8544 01F2C821 */ addu $t9, $t7, $s2 -/* 0D9148 800D8548 AE190014 */ sw $t9, 0x14($s0) -/* 0D914C 800D854C 1C400005 */ bgtz $v0, .L800D8564 -/* 0D9150 800D8550 000E9C03 */ sra $s3, $t6, 0x10 -/* 0D9154 800D8554 8E0F0030 */ lw $t7, 0x30($s0) -/* 0D9158 800D8558 31F90008 */ andi $t9, $t7, 8 -/* 0D915C 800D855C 5320000B */ beql $t9, $zero, .L800D858C -/* 0D9160 800D8560 0053082A */ slt $at, $v0, $s3 -.L800D8564: -/* 0D9164 800D8564 8E180008 */ lw $t8, 8($s0) -/* 0D9168 800D8568 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D916C 800D856C 240E002E */ li $t6, 46 -/* 0D9170 800D8570 030FC821 */ addu $t9, $t8, $t7 -/* 0D9174 800D8574 A32E0000 */ sb $t6, ($t9) -/* 0D9178 800D8578 8E180014 */ lw $t8, 0x14($s0) -/* 0D917C 800D857C 8E020024 */ lw $v0, 0x24($s0) -/* 0D9180 800D8580 270F0001 */ addiu $t7, $t8, 1 -/* 0D9184 800D8584 AE0F0014 */ sw $t7, 0x14($s0) -/* 0D9188 800D8588 0053082A */ slt $at, $v0, $s3 -.L800D858C: -/* 0D918C 800D858C 10200004 */ beqz $at, .L800D85A0 -/* 0D9190 800D8590 02512821 */ addu $a1, $s2, $s1 -/* 0D9194 800D8594 00029C00 */ sll $s3, $v0, 0x10 -/* 0D9198 800D8598 00137403 */ sra $t6, $s3, 0x10 -/* 0D919C 800D859C 01C09825 */ move $s3, $t6 -.L800D85A0: -/* 0D91A0 800D85A0 8E190008 */ lw $t9, 8($s0) -/* 0D91A4 800D85A4 8E180014 */ lw $t8, 0x14($s0) -/* 0D91A8 800D85A8 02603025 */ move $a2, $s3 -/* 0D91AC 800D85AC 0C035FF8 */ jal memcpy -/* 0D91B0 800D85B0 03382021 */ addu $a0, $t9, $t8 -/* 0D91B4 800D85B4 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D91B8 800D85B8 8E190024 */ lw $t9, 0x24($s0) -/* 0D91BC 800D85BC 01F37021 */ addu $t6, $t7, $s3 -/* 0D91C0 800D85C0 0333C023 */ subu $t8, $t9, $s3 -/* 0D91C4 800D85C4 AE0E0014 */ sw $t6, 0x14($s0) -/* 0D91C8 800D85C8 10000098 */ b .L800D882C -/* 0D91CC 800D85CC AE180018 */ sw $t8, 0x18($s0) -.L800D85D0: -/* 0D91D0 800D85D0 10830003 */ beq $a0, $v1, .L800D85E0 -/* 0D91D4 800D85D4 24010047 */ li $at, 71 -/* 0D91D8 800D85D8 54610011 */ bnel $v1, $at, .L800D8620 -/* 0D91DC 800D85DC 8E180008 */ lw $t8, 8($s0) -.L800D85E0: -/* 0D91E0 800D85E0 8E020024 */ lw $v0, 0x24($s0) -/* 0D91E4 800D85E4 24140045 */ li $s4, 69 -/* 0D91E8 800D85E8 0262082A */ slt $at, $s3, $v0 -/* 0D91EC 800D85EC 50200004 */ beql $at, $zero, .L800D8600 -/* 0D91F0 800D85F0 244FFFFF */ addiu $t7, $v0, -1 -/* 0D91F4 800D85F4 AE130024 */ sw $s3, 0x24($s0) -/* 0D91F8 800D85F8 02601025 */ move $v0, $s3 -/* 0D91FC 800D85FC 244FFFFF */ addiu $t7, $v0, -1 -.L800D8600: -/* 0D9200 800D8600 05E10002 */ bgez $t7, .L800D860C -/* 0D9204 800D8604 AE0F0024 */ sw $t7, 0x24($s0) -/* 0D9208 800D8608 AE000024 */ sw $zero, 0x24($s0) -.L800D860C: -/* 0D920C 800D860C 14830003 */ bne $a0, $v1, .L800D861C -/* 0D9210 800D8610 00000000 */ nop -/* 0D9214 800D8614 10000001 */ b .L800D861C -/* 0D9218 800D8618 24140065 */ li $s4, 101 -.L800D861C: -/* 0D921C 800D861C 8E180008 */ lw $t8, 8($s0) -.L800D8620: -/* 0D9220 800D8620 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D9224 800D8624 92390000 */ lbu $t9, ($s1) -/* 0D9228 800D8628 26310001 */ addiu $s1, $s1, 1 -/* 0D922C 800D862C 030F7021 */ addu $t6, $t8, $t7 -/* 0D9230 800D8630 A1D90000 */ sb $t9, ($t6) -/* 0D9234 800D8634 8E180014 */ lw $t8, 0x14($s0) -/* 0D9238 800D8638 8E020024 */ lw $v0, 0x24($s0) -/* 0D923C 800D863C 270F0001 */ addiu $t7, $t8, 1 -/* 0D9240 800D8640 1C400005 */ bgtz $v0, .L800D8658 -/* 0D9244 800D8644 AE0F0014 */ sw $t7, 0x14($s0) -/* 0D9248 800D8648 8E190030 */ lw $t9, 0x30($s0) -/* 0D924C 800D864C 332E0008 */ andi $t6, $t9, 8 -/* 0D9250 800D8650 11C0000A */ beqz $t6, .L800D867C -/* 0D9254 800D8654 00000000 */ nop -.L800D8658: -/* 0D9258 800D8658 8E0F0008 */ lw $t7, 8($s0) -/* 0D925C 800D865C 8E190014 */ lw $t9, 0x14($s0) -/* 0D9260 800D8660 2418002E */ li $t8, 46 -/* 0D9264 800D8664 01F97021 */ addu $t6, $t7, $t9 -/* 0D9268 800D8668 A1D80000 */ sb $t8, ($t6) -/* 0D926C 800D866C 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D9270 800D8670 8E020024 */ lw $v0, 0x24($s0) -/* 0D9274 800D8674 25F90001 */ addiu $t9, $t7, 1 -/* 0D9278 800D8678 AE190014 */ sw $t9, 0x14($s0) -.L800D867C: -/* 0D927C 800D867C 58400016 */ blezl $v0, .L800D86D8 -/* 0D9280 800D8680 8E0E0008 */ lw $t6, 8($s0) -/* 0D9284 800D8684 2673FFFF */ addiu $s3, $s3, -1 -/* 0D9288 800D8688 0013C400 */ sll $t8, $s3, 0x10 -/* 0D928C 800D868C 00189C03 */ sra $s3, $t8, 0x10 -/* 0D9290 800D8690 0053082A */ slt $at, $v0, $s3 -/* 0D9294 800D8694 10200004 */ beqz $at, .L800D86A8 -/* 0D9298 800D8698 02202825 */ move $a1, $s1 -/* 0D929C 800D869C 00029C00 */ sll $s3, $v0, 0x10 -/* 0D92A0 800D86A0 00137C03 */ sra $t7, $s3, 0x10 -/* 0D92A4 800D86A4 01E09825 */ move $s3, $t7 -.L800D86A8: -/* 0D92A8 800D86A8 8E190008 */ lw $t9, 8($s0) -/* 0D92AC 800D86AC 8E180014 */ lw $t8, 0x14($s0) -/* 0D92B0 800D86B0 02603025 */ move $a2, $s3 -/* 0D92B4 800D86B4 0C035FF8 */ jal memcpy -/* 0D92B8 800D86B8 03382021 */ addu $a0, $t9, $t8 -/* 0D92BC 800D86BC 8E0E0014 */ lw $t6, 0x14($s0) -/* 0D92C0 800D86C0 8E190024 */ lw $t9, 0x24($s0) -/* 0D92C4 800D86C4 01D37821 */ addu $t7, $t6, $s3 -/* 0D92C8 800D86C8 0333C023 */ subu $t8, $t9, $s3 -/* 0D92CC 800D86CC AE0F0014 */ sw $t7, 0x14($s0) -/* 0D92D0 800D86D0 AE180018 */ sw $t8, 0x18($s0) -/* 0D92D4 800D86D4 8E0E0008 */ lw $t6, 8($s0) -.L800D86D8: -/* 0D92D8 800D86D8 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D92DC 800D86DC 01CF8821 */ addu $s1, $t6, $t7 -/* 0D92E0 800D86E0 26310001 */ addiu $s1, $s1, 1 -/* 0D92E4 800D86E4 06400005 */ bltz $s2, .L800D86FC -/* 0D92E8 800D86E8 A234FFFF */ sb $s4, -1($s1) -/* 0D92EC 800D86EC 2419002B */ li $t9, 43 -/* 0D92F0 800D86F0 A2390000 */ sb $t9, ($s1) -/* 0D92F4 800D86F4 10000008 */ b .L800D8718 -/* 0D92F8 800D86F8 26310001 */ addiu $s1, $s1, 1 -.L800D86FC: -/* 0D92FC 800D86FC 00129023 */ negu $s2, $s2 -/* 0D9300 800D8700 00127400 */ sll $t6, $s2, 0x10 -/* 0D9304 800D8704 2418002D */ li $t8, 45 -/* 0D9308 800D8708 000E7C03 */ sra $t7, $t6, 0x10 -/* 0D930C 800D870C A2380000 */ sb $t8, ($s1) -/* 0D9310 800D8710 26310001 */ addiu $s1, $s1, 1 -/* 0D9314 800D8714 01E09025 */ move $s2, $t7 -.L800D8718: -/* 0D9318 800D8718 2A410064 */ slti $at, $s2, 0x64 -/* 0D931C 800D871C 5420002A */ bnel $at, $zero, .L800D87C8 -/* 0D9320 800D8720 2402000A */ li $v0, 10 -/* 0D9324 800D8724 2A4103E8 */ slti $at, $s2, 0x3e8 -/* 0D9328 800D8728 14200013 */ bnez $at, .L800D8778 -/* 0D932C 800D872C 240203E8 */ li $v0, 1000 -/* 0D9330 800D8730 0242001A */ div $zero, $s2, $v0 -/* 0D9334 800D8734 14400002 */ bnez $v0, .L800D8740 -/* 0D9338 800D8738 00000000 */ nop -/* 0D933C 800D873C 0007000D */ break 7 -.L800D8740: -/* 0D9340 800D8740 2401FFFF */ li $at, -1 -/* 0D9344 800D8744 14410004 */ bne $v0, $at, .L800D8758 -/* 0D9348 800D8748 3C018000 */ lui $at, 0x8000 -/* 0D934C 800D874C 16410002 */ bne $s2, $at, .L800D8758 -/* 0D9350 800D8750 00000000 */ nop -/* 0D9354 800D8754 0006000D */ break 6 -.L800D8758: -/* 0D9358 800D8758 00009010 */ mfhi $s2 -/* 0D935C 800D875C 00127400 */ sll $t6, $s2, 0x10 -/* 0D9360 800D8760 0000C812 */ mflo $t9 -/* 0D9364 800D8764 27380030 */ addiu $t8, $t9, 0x30 -/* 0D9368 800D8768 000E7C03 */ sra $t7, $t6, 0x10 -/* 0D936C 800D876C 01E09025 */ move $s2, $t7 -/* 0D9370 800D8770 A2380000 */ sb $t8, ($s1) -/* 0D9374 800D8774 26310001 */ addiu $s1, $s1, 1 -.L800D8778: -/* 0D9378 800D8778 24020064 */ li $v0, 100 -/* 0D937C 800D877C 0242001A */ div $zero, $s2, $v0 -/* 0D9380 800D8780 14400002 */ bnez $v0, .L800D878C -/* 0D9384 800D8784 00000000 */ nop -/* 0D9388 800D8788 0007000D */ break 7 -.L800D878C: -/* 0D938C 800D878C 2401FFFF */ li $at, -1 -/* 0D9390 800D8790 14410004 */ bne $v0, $at, .L800D87A4 -/* 0D9394 800D8794 3C018000 */ lui $at, 0x8000 -/* 0D9398 800D8798 16410002 */ bne $s2, $at, .L800D87A4 -/* 0D939C 800D879C 00000000 */ nop -/* 0D93A0 800D87A0 0006000D */ break 6 -.L800D87A4: -/* 0D93A4 800D87A4 00009010 */ mfhi $s2 -/* 0D93A8 800D87A8 00127400 */ sll $t6, $s2, 0x10 -/* 0D93AC 800D87AC 0000C812 */ mflo $t9 -/* 0D93B0 800D87B0 27380030 */ addiu $t8, $t9, 0x30 -/* 0D93B4 800D87B4 000E7C03 */ sra $t7, $t6, 0x10 -/* 0D93B8 800D87B8 01E09025 */ move $s2, $t7 -/* 0D93BC 800D87BC A2380000 */ sb $t8, ($s1) -/* 0D93C0 800D87C0 26310001 */ addiu $s1, $s1, 1 -/* 0D93C4 800D87C4 2402000A */ li $v0, 10 -.L800D87C8: -/* 0D93C8 800D87C8 0242001A */ div $zero, $s2, $v0 -/* 0D93CC 800D87CC 14400002 */ bnez $v0, .L800D87D8 -/* 0D93D0 800D87D0 00000000 */ nop -/* 0D93D4 800D87D4 0007000D */ break 7 -.L800D87D8: -/* 0D93D8 800D87D8 2401FFFF */ li $at, -1 -/* 0D93DC 800D87DC 14410004 */ bne $v0, $at, .L800D87F0 -/* 0D93E0 800D87E0 3C018000 */ lui $at, 0x8000 -/* 0D93E4 800D87E4 16410002 */ bne $s2, $at, .L800D87F0 -/* 0D93E8 800D87E8 00000000 */ nop -/* 0D93EC 800D87EC 0006000D */ break 6 -.L800D87F0: -/* 0D93F0 800D87F0 00009010 */ mfhi $s2 -/* 0D93F4 800D87F4 00127400 */ sll $t6, $s2, 0x10 -/* 0D93F8 800D87F8 0000C812 */ mflo $t9 -/* 0D93FC 800D87FC 27380030 */ addiu $t8, $t9, 0x30 -/* 0D9400 800D8800 000E7C03 */ sra $t7, $t6, 0x10 -/* 0D9404 800D8804 25F90030 */ addiu $t9, $t7, 0x30 -/* 0D9408 800D8808 A2380000 */ sb $t8, ($s1) -/* 0D940C 800D880C A2390001 */ sb $t9, 1($s1) -/* 0D9410 800D8810 8E180008 */ lw $t8, 8($s0) -/* 0D9414 800D8814 01E09025 */ move $s2, $t7 -/* 0D9418 800D8818 8E0F0014 */ lw $t7, 0x14($s0) -/* 0D941C 800D881C 26310002 */ addiu $s1, $s1, 2 -/* 0D9420 800D8820 02387023 */ subu $t6, $s1, $t8 -/* 0D9424 800D8824 01CFC823 */ subu $t9, $t6, $t7 -/* 0D9428 800D8828 AE19001C */ sw $t9, 0x1c($s0) -.L800D882C: -/* 0D942C 800D882C 8E180030 */ lw $t8, 0x30($s0) -/* 0D9430 800D8830 24010010 */ li $at, 16 -/* 0D9434 800D8834 330E0014 */ andi $t6, $t8, 0x14 -/* 0D9438 800D8838 55C10010 */ bnel $t6, $at, .L800D887C -/* 0D943C 800D883C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D9440 800D8840 8E0F000C */ lw $t7, 0xc($s0) -/* 0D9444 800D8844 8E190014 */ lw $t9, 0x14($s0) -/* 0D9448 800D8848 8E0E0018 */ lw $t6, 0x18($s0) -/* 0D944C 800D884C 8E030028 */ lw $v1, 0x28($s0) -/* 0D9450 800D8850 01F9C021 */ addu $t8, $t7, $t9 -/* 0D9454 800D8854 8E19001C */ lw $t9, 0x1c($s0) -/* 0D9458 800D8858 030E7821 */ addu $t7, $t8, $t6 -/* 0D945C 800D885C 8E0E0020 */ lw $t6, 0x20($s0) -/* 0D9460 800D8860 01F9C021 */ addu $t8, $t7, $t9 -/* 0D9464 800D8864 030E1021 */ addu $v0, $t8, $t6 -/* 0D9468 800D8868 0043082A */ slt $at, $v0, $v1 -/* 0D946C 800D886C 10200002 */ beqz $at, .L800D8878 -/* 0D9470 800D8870 00627823 */ subu $t7, $v1, $v0 -/* 0D9474 800D8874 AE0F0010 */ sw $t7, 0x10($s0) -.L800D8878: -/* 0D9478 800D8878 8FBF0014 */ lw $ra, 0x14($sp) -.L800D887C: -/* 0D947C 800D887C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D9480 800D8880 03E00008 */ jr $ra -/* 0D9484 800D8884 00000000 */ nop - -/* 0D9488 800D8888 03E00008 */ jr $ra -/* 0D948C 800D888C 00000000 */ nop - -glabel func_800D8890 -/* 0D9490 800D8890 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 0D9494 800D8894 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D9498 800D8898 AFB50038 */ sw $s5, 0x38($sp) -/* 0D949C 800D889C AFB40034 */ sw $s4, 0x34($sp) -/* 0D94A0 800D88A0 AFB30030 */ sw $s3, 0x30($sp) -/* 0D94A4 800D88A4 AFB2002C */ sw $s2, 0x2c($sp) -/* 0D94A8 800D88A8 AFB10028 */ sw $s1, 0x28($sp) -/* 0D94AC 800D88AC AFB00024 */ sw $s0, 0x24($sp) -/* 0D94B0 800D88B0 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D94B4 800D88B4 AFA400D0 */ sw $a0, 0xd0($sp) -/* 0D94B8 800D88B8 AFA500D4 */ sw $a1, 0xd4($sp) -/* 0D94BC 800D88BC 8C820024 */ lw $v0, 0x24($a0) -/* 0D94C0 800D88C0 27B500B0 */ addiu $s5, $sp, 0xb0 -/* 0D94C4 800D88C4 D4940000 */ ldc1 $f20, ($a0) -/* 0D94C8 800D88C8 04410003 */ bgez $v0, .L800D88D8 -/* 0D94CC 800D88CC 240F0006 */ li $t7, 6 -/* 0D94D0 800D88D0 1000000C */ b .L800D8904 -/* 0D94D4 800D88D4 AC8F0024 */ sw $t7, 0x24($a0) -.L800D88D8: -/* 0D94D8 800D88D8 1440000A */ bnez $v0, .L800D8904 -/* 0D94DC 800D88DC 93B800D7 */ lbu $t8, 0xd7($sp) -/* 0D94E0 800D88E0 24010067 */ li $at, 103 -/* 0D94E4 800D88E4 13010004 */ beq $t8, $at, .L800D88F8 -/* 0D94E8 800D88E8 AFB80048 */ sw $t8, 0x48($sp) -/* 0D94EC 800D88EC 24010047 */ li $at, 71 -/* 0D94F0 800D88F0 57010005 */ bnel $t8, $at, .L800D8908 -/* 0D94F4 800D88F4 8FAE00D0 */ lw $t6, 0xd0($sp) -.L800D88F8: -/* 0D94F8 800D88F8 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0D94FC 800D88FC 24190001 */ li $t9, 1 -/* 0D9500 800D8900 ADF90024 */ sw $t9, 0x24($t7) -.L800D8904: -/* 0D9504 800D8904 8FAE00D0 */ lw $t6, 0xd0($sp) -.L800D8908: -/* 0D9508 800D8908 240107FF */ li $at, 2047 -/* 0D950C 800D890C 95C40000 */ lhu $a0, ($t6) -/* 0D9510 800D8910 30837FF0 */ andi $v1, $a0, 0x7ff0 -/* 0D9514 800D8914 0003C103 */ sra $t8, $v1, 4 -/* 0D9518 800D8918 0018CC00 */ sll $t9, $t8, 0x10 -/* 0D951C 800D891C 00191C03 */ sra $v1, $t9, 0x10 -/* 0D9520 800D8920 14610018 */ bne $v1, $at, .L800D8984 -/* 0D9524 800D8924 00000000 */ nop -/* 0D9528 800D8928 A7A0009A */ sh $zero, 0x9a($sp) -/* 0D952C 800D892C 95D80000 */ lhu $t8, ($t6) -/* 0D9530 800D8930 24030002 */ li $v1, 2 -/* 0D9534 800D8934 00031400 */ sll $v0, $v1, 0x10 -/* 0D9538 800D8938 3319000F */ andi $t9, $t8, 0xf -/* 0D953C 800D893C 5720000A */ bnel $t9, $zero, .L800D8968 -/* 0D9540 800D8940 00027C03 */ sra $t7, $v0, 0x10 -/* 0D9544 800D8944 95CF0002 */ lhu $t7, 2($t6) -/* 0D9548 800D8948 55E00007 */ bnel $t7, $zero, .L800D8968 -/* 0D954C 800D894C 00027C03 */ sra $t7, $v0, 0x10 -/* 0D9550 800D8950 95D80004 */ lhu $t8, 4($t6) -/* 0D9554 800D8954 57000004 */ bnel $t8, $zero, .L800D8968 -/* 0D9558 800D8958 00027C03 */ sra $t7, $v0, 0x10 -/* 0D955C 800D895C 95D90006 */ lhu $t9, 6($t6) -/* 0D9560 800D8960 13200003 */ beqz $t9, .L800D8970 -/* 0D9564 800D8964 00027C03 */ sra $t7, $v0, 0x10 -.L800D8968: -/* 0D9568 800D8968 10000014 */ b .L800D89BC -/* 0D956C 800D896C 01E01025 */ move $v0, $t7 -.L800D8970: -/* 0D9570 800D8970 24030001 */ li $v1, 1 -/* 0D9574 800D8974 00031400 */ sll $v0, $v1, 0x10 -/* 0D9578 800D8978 00027C03 */ sra $t7, $v0, 0x10 -/* 0D957C 800D897C 1000000F */ b .L800D89BC -/* 0D9580 800D8980 01E01025 */ move $v0, $t7 -.L800D8984: -/* 0D9584 800D8984 18600008 */ blez $v1, .L800D89A8 -/* 0D9588 800D8988 3098800F */ andi $t8, $a0, 0x800f -/* 0D958C 800D898C 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D9590 800D8990 370E3FF0 */ ori $t6, $t8, 0x3ff0 -/* 0D9594 800D8994 246FFC02 */ addiu $t7, $v1, -0x3fe -/* 0D9598 800D8998 A72E0000 */ sh $t6, ($t9) -/* 0D959C 800D899C A7AF009A */ sh $t7, 0x9a($sp) -/* 0D95A0 800D89A0 10000006 */ b .L800D89BC -/* 0D95A4 800D89A4 2402FFFF */ li $v0, -1 -.L800D89A8: -/* 0D95A8 800D89A8 04610003 */ bgez $v1, .L800D89B8 -/* 0D95AC 800D89AC 00001025 */ move $v0, $zero -/* 0D95B0 800D89B0 10000002 */ b .L800D89BC -/* 0D95B4 800D89B4 24020002 */ li $v0, 2 -.L800D89B8: -/* 0D95B8 800D89B8 A7A0009A */ sh $zero, 0x9a($sp) -.L800D89BC: -/* 0D95BC 800D89BC 18400012 */ blez $v0, .L800D8A08 -/* 0D95C0 800D89C0 0002C400 */ sll $t8, $v0, 0x10 -/* 0D95C4 800D89C4 0002C400 */ sll $t8, $v0, 0x10 -/* 0D95C8 800D89C8 00187403 */ sra $t6, $t8, 0x10 -/* 0D95CC 800D89CC 24010002 */ li $at, 2 -/* 0D95D0 800D89D0 15C10004 */ bne $t6, $at, .L800D89E4 -/* 0D95D4 800D89D4 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D95D8 800D89D8 3C05800F */ lui $a1, %hi(D_800F3CE8) # $a1, 0x800f -/* 0D95DC 800D89DC 10000003 */ b .L800D89EC -/* 0D95E0 800D89E0 24A53CE8 */ addiu $a1, %lo(D_800F3CE8) # addiu $a1, $a1, 0x3ce8 -.L800D89E4: -/* 0D95E4 800D89E4 3C05800F */ lui $a1, %hi(D_800F3CEC) # $a1, 0x800f -/* 0D95E8 800D89E8 24A53CEC */ addiu $a1, %lo(D_800F3CEC) # addiu $a1, $a1, 0x3cec -.L800D89EC: -/* 0D95EC 800D89EC 240F0003 */ li $t7, 3 -/* 0D95F0 800D89F0 AF2F0014 */ sw $t7, 0x14($t9) -/* 0D95F4 800D89F4 8F240008 */ lw $a0, 8($t9) -/* 0D95F8 800D89F8 0C035FF8 */ jal memcpy -/* 0D95FC 800D89FC 24060003 */ li $a2, 3 -/* 0D9600 800D8A00 100000ED */ b .L800D8DB8 -/* 0D9604 800D8A04 8FBF003C */ lw $ra, 0x3c($sp) -.L800D8A08: -/* 0D9608 800D8A08 00187403 */ sra $t6, $t8, 0x10 -/* 0D960C 800D8A0C 15C00003 */ bnez $t6, .L800D8A1C -/* 0D9610 800D8A10 00009825 */ move $s3, $zero -/* 0D9614 800D8A14 100000E2 */ b .L800D8DA0 -/* 0D9618 800D8A18 A7A0009A */ sh $zero, 0x9a($sp) -.L800D8A1C: -/* 0D961C 800D8A1C 44801800 */ mtc1 $zero, $f3 -/* 0D9620 800D8A20 44801000 */ mtc1 $zero, $f2 -/* 0D9624 800D8A24 93AF00D7 */ lbu $t7, 0xd7($sp) -/* 0D9628 800D8A28 87B9009A */ lh $t9, 0x9a($sp) -/* 0D962C 800D8A2C 4622A03C */ c.lt.d $f20, $f2 -/* 0D9630 800D8A30 24017597 */ li $at, 30103 -/* 0D9634 800D8A34 00001825 */ move $v1, $zero -/* 0D9638 800D8A38 27B500B1 */ addiu $s5, $sp, 0xb1 -/* 0D963C 800D8A3C 45000002 */ bc1f .L800D8A48 -/* 0D9640 800D8A40 AFAF0048 */ sw $t7, 0x48($sp) -/* 0D9644 800D8A44 4620A507 */ neg.d $f20, $f20 -.L800D8A48: -/* 0D9648 800D8A48 03210019 */ multu $t9, $at -/* 0D964C 800D8A4C 3C010001 */ lui $at, (0x000186A0 >> 16) # lui $at, 1 -/* 0D9650 800D8A50 342186A0 */ ori $at, (0x000186A0 & 0xFFFF) # ori $at, $at, 0x86a0 -/* 0D9654 800D8A54 24050006 */ li $a1, 6 -/* 0D9658 800D8A58 0000C012 */ mflo $t8 -/* 0D965C 800D8A5C 00000000 */ nop -/* 0D9660 800D8A60 00000000 */ nop -/* 0D9664 800D8A64 0301001A */ div $zero, $t8, $at -/* 0D9668 800D8A68 00007012 */ mflo $t6 -/* 0D966C 800D8A6C 25CFFFFC */ addiu $t7, $t6, -4 -/* 0D9670 800D8A70 000FCC00 */ sll $t9, $t7, 0x10 -/* 0D9674 800D8A74 0019C403 */ sra $t8, $t9, 0x10 -/* 0D9678 800D8A78 07010019 */ bgez $t8, .L800D8AE0 -/* 0D967C 800D8A7C A7AF009A */ sh $t7, 0x9a($sp) -/* 0D9680 800D8A80 000FCC00 */ sll $t9, $t7, 0x10 -/* 0D9684 800D8A84 0019C403 */ sra $t8, $t9, 0x10 -/* 0D9688 800D8A88 240E0003 */ li $t6, 3 -/* 0D968C 800D8A8C 01D82023 */ subu $a0, $t6, $t8 -/* 0D9690 800D8A90 2401FFFC */ li $at, -4 -/* 0D9694 800D8A94 00811024 */ and $v0, $a0, $at -/* 0D9698 800D8A98 0002C823 */ negu $t9, $v0 -/* 0D969C 800D8A9C 1840002C */ blez $v0, .L800D8B50 -/* 0D96A0 800D8AA0 A7B9009A */ sh $t9, 0x9a($sp) -/* 0D96A4 800D8AA4 3C04800F */ lui $a0, %hi(D_800F3CA0) # $a0, 0x800f -/* 0D96A8 800D8AA8 24843CA0 */ addiu $a0, %lo(D_800F3CA0) # addiu $a0, $a0, 0x3ca0 -.L800D8AAC: -/* 0D96AC 800D8AAC 304E0001 */ andi $t6, $v0, 1 -/* 0D96B0 800D8AB0 11C00006 */ beqz $t6, .L800D8ACC -/* 0D96B4 800D8AB4 0002C843 */ sra $t9, $v0, 1 -/* 0D96B8 800D8AB8 0003C0C0 */ sll $t8, $v1, 3 -/* 0D96BC 800D8ABC 00987821 */ addu $t7, $a0, $t8 -/* 0D96C0 800D8AC0 D5E40000 */ ldc1 $f4, ($t7) -/* 0D96C4 800D8AC4 4624A502 */ mul.d $f20, $f20, $f4 -/* 0D96C8 800D8AC8 00000000 */ nop -.L800D8ACC: -/* 0D96CC 800D8ACC 03201025 */ move $v0, $t9 -/* 0D96D0 800D8AD0 1F20FFF6 */ bgtz $t9, .L800D8AAC -/* 0D96D4 800D8AD4 24630001 */ addiu $v1, $v1, 1 -/* 0D96D8 800D8AD8 1000001E */ b .L800D8B54 -/* 0D96DC 800D8ADC 8FAF0048 */ lw $t7, 0x48($sp) -.L800D8AE0: -/* 0D96E0 800D8AE0 87AE009A */ lh $t6, 0x9a($sp) -/* 0D96E4 800D8AE4 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 0D96E8 800D8AE8 00001825 */ move $v1, $zero -/* 0D96EC 800D8AEC 19C00018 */ blez $t6, .L800D8B50 -/* 0D96F0 800D8AF0 31D8FFFC */ andi $t8, $t6, 0xfffc -/* 0D96F4 800D8AF4 00181400 */ sll $v0, $t8, 0x10 -/* 0D96F8 800D8AF8 0018CC00 */ sll $t9, $t8, 0x10 -/* 0D96FC 800D8AFC 44810800 */ mtc1 $at, $f1 -/* 0D9700 800D8B00 44800000 */ mtc1 $zero, $f0 -/* 0D9704 800D8B04 00197403 */ sra $t6, $t9, 0x10 -/* 0D9708 800D8B08 00027C03 */ sra $t7, $v0, 0x10 -/* 0D970C 800D8B0C A7B8009A */ sh $t8, 0x9a($sp) -/* 0D9710 800D8B10 19C0000E */ blez $t6, .L800D8B4C -/* 0D9714 800D8B14 01E01025 */ move $v0, $t7 -/* 0D9718 800D8B18 3C04800F */ lui $a0, %hi(D_800F3CA0) # $a0, 0x800f -/* 0D971C 800D8B1C 24843CA0 */ addiu $a0, %lo(D_800F3CA0) # addiu $a0, $a0, 0x3ca0 -.L800D8B20: -/* 0D9720 800D8B20 304F0001 */ andi $t7, $v0, 1 -/* 0D9724 800D8B24 11E00006 */ beqz $t7, .L800D8B40 -/* 0D9728 800D8B28 00027043 */ sra $t6, $v0, 1 -/* 0D972C 800D8B2C 0003C0C0 */ sll $t8, $v1, 3 -/* 0D9730 800D8B30 0098C821 */ addu $t9, $a0, $t8 -/* 0D9734 800D8B34 D7260000 */ ldc1 $f6, ($t9) -/* 0D9738 800D8B38 46260002 */ mul.d $f0, $f0, $f6 -/* 0D973C 800D8B3C 00000000 */ nop -.L800D8B40: -/* 0D9740 800D8B40 01C01025 */ move $v0, $t6 -/* 0D9744 800D8B44 1DC0FFF6 */ bgtz $t6, .L800D8B20 -/* 0D9748 800D8B48 24630001 */ addiu $v1, $v1, 1 -.L800D8B4C: -/* 0D974C 800D8B4C 4620A503 */ div.d $f20, $f20, $f0 -.L800D8B50: -/* 0D9750 800D8B50 8FAF0048 */ lw $t7, 0x48($sp) -.L800D8B54: -/* 0D9754 800D8B54 24010066 */ li $at, 102 -/* 0D9758 800D8B58 8FB800D0 */ lw $t8, 0xd0($sp) -/* 0D975C 800D8B5C 15E10004 */ bne $t7, $at, .L800D8B70 -/* 0D9760 800D8B60 240E0030 */ li $t6, 48 -/* 0D9764 800D8B64 87A5009A */ lh $a1, 0x9a($sp) -/* 0D9768 800D8B68 10000001 */ b .L800D8B70 -/* 0D976C 800D8B6C 24A5000A */ addiu $a1, $a1, 0xa -.L800D8B70: -/* 0D9770 800D8B70 8F190024 */ lw $t9, 0x24($t8) -/* 0D9774 800D8B74 00B9A021 */ addu $s4, $a1, $t9 -/* 0D9778 800D8B78 2A810014 */ slti $at, $s4, 0x14 -/* 0D977C 800D8B7C 14200002 */ bnez $at, .L800D8B88 -/* 0D9780 800D8B80 00000000 */ nop -/* 0D9784 800D8B84 24140013 */ li $s4, 19 -.L800D8B88: -/* 0D9788 800D8B88 1A800033 */ blez $s4, .L800D8C58 -/* 0D978C 800D8B8C A3AE00B0 */ sb $t6, 0xb0($sp) -/* 0D9790 800D8B90 4634103C */ c.lt.d $f2, $f20 -/* 0D9794 800D8B94 24130030 */ li $s3, 48 -/* 0D9798 800D8B98 27B20074 */ addiu $s2, $sp, 0x74 -/* 0D979C 800D8B9C 4502002F */ bc1fl .L800D8C5C -/* 0D97A0 800D8BA0 87B8009A */ lh $t8, 0x9a($sp) -/* 0D97A4 800D8BA4 4620A20D */ trunc.w.d $f8, $f20 -.L800D8BA8: -/* 0D97A8 800D8BA8 2694FFF8 */ addiu $s4, $s4, -8 -/* 0D97AC 800D8BAC 26B50008 */ addiu $s5, $s5, 8 -/* 0D97B0 800D8BB0 44114000 */ mfc1 $s1, $f8 -/* 0D97B4 800D8BB4 1A800008 */ blez $s4, .L800D8BD8 -/* 0D97B8 800D8BB8 00000000 */ nop -/* 0D97BC 800D8BBC 44915000 */ mtc1 $s1, $f10 -/* 0D97C0 800D8BC0 3C01800F */ lui $at, %hi(D_800F3CF8) -/* 0D97C4 800D8BC4 D4283CF8 */ ldc1 $f8, %lo(D_800F3CF8)($at) -/* 0D97C8 800D8BC8 46805121 */ cvt.d.w $f4, $f10 -/* 0D97CC 800D8BCC 4624A181 */ sub.d $f6, $f20, $f4 -/* 0D97D0 800D8BD0 46283502 */ mul.d $f20, $f6, $f8 -/* 0D97D4 800D8BD4 00000000 */ nop -.L800D8BD8: -/* 0D97D8 800D8BD8 1A200011 */ blez $s1, .L800D8C20 -/* 0D97DC 800D8BDC 24100008 */ li $s0, 8 -/* 0D97E0 800D8BE0 24100007 */ li $s0, 7 -/* 0D97E4 800D8BE4 0600000E */ bltz $s0, .L800D8C20 -/* 0D97E8 800D8BE8 02402025 */ move $a0, $s2 -.L800D8BEC: -/* 0D97EC 800D8BEC 02202825 */ move $a1, $s1 -/* 0D97F0 800D8BF0 0C0363B8 */ jal ldiv -/* 0D97F4 800D8BF4 2406000A */ li $a2, 10 -/* 0D97F8 800D8BF8 8FB80078 */ lw $t8, 0x78($sp) -/* 0D97FC 800D8BFC 26B5FFFF */ addiu $s5, $s5, -1 -/* 0D9800 800D8C00 27190030 */ addiu $t9, $t8, 0x30 -/* 0D9804 800D8C04 A2B90000 */ sb $t9, ($s5) -/* 0D9808 800D8C08 8FB10074 */ lw $s1, 0x74($sp) -/* 0D980C 800D8C0C 5A200005 */ blezl $s1, .L800D8C24 -/* 0D9810 800D8C10 44801800 */ mtc1 $zero, $f3 -/* 0D9814 800D8C14 2610FFFF */ addiu $s0, $s0, -1 -/* 0D9818 800D8C18 0603FFF4 */ bgezl $s0, .L800D8BEC -/* 0D981C 800D8C1C 02402025 */ move $a0, $s2 -.L800D8C20: -/* 0D9820 800D8C20 44801800 */ mtc1 $zero, $f3 -.L800D8C24: -/* 0D9824 800D8C24 44801000 */ mtc1 $zero, $f2 -/* 0D9828 800D8C28 2610FFFF */ addiu $s0, $s0, -1 -/* 0D982C 800D8C2C 06000004 */ bltz $s0, .L800D8C40 -.L800D8C30: -/* 0D9830 800D8C30 2610FFFF */ addiu $s0, $s0, -1 -/* 0D9834 800D8C34 26B5FFFF */ addiu $s5, $s5, -1 -/* 0D9838 800D8C38 0601FFFD */ bgez $s0, .L800D8C30 -/* 0D983C 800D8C3C A2B30000 */ sb $s3, ($s5) -.L800D8C40: -/* 0D9840 800D8C40 1A800005 */ blez $s4, .L800D8C58 -/* 0D9844 800D8C44 26B50008 */ addiu $s5, $s5, 8 -/* 0D9848 800D8C48 4634103C */ c.lt.d $f2, $f20 -/* 0D984C 800D8C4C 00000000 */ nop -/* 0D9850 800D8C50 4503FFD5 */ bc1tl .L800D8BA8 -/* 0D9854 800D8C54 4620A20D */ trunc.w.d $f8, $f20 -.L800D8C58: -/* 0D9858 800D8C58 87B8009A */ lh $t8, 0x9a($sp) -.L800D8C5C: -/* 0D985C 800D8C5C 93AE00B1 */ lbu $t6, 0xb1($sp) -/* 0D9860 800D8C60 27AF00B0 */ addiu $t7, $sp, 0xb0 -/* 0D9864 800D8C64 24020030 */ li $v0, 48 -/* 0D9868 800D8C68 02AFA023 */ subu $s4, $s5, $t7 -/* 0D986C 800D8C6C 27190007 */ addiu $t9, $t8, 7 -/* 0D9870 800D8C70 2694FFFF */ addiu $s4, $s4, -1 -/* 0D9874 800D8C74 A7B9009A */ sh $t9, 0x9a($sp) -/* 0D9878 800D8C78 144E0009 */ bne $v0, $t6, .L800D8CA0 -/* 0D987C 800D8C7C 27B500B1 */ addiu $s5, $sp, 0xb1 -/* 0D9880 800D8C80 87AF009A */ lh $t7, 0x9a($sp) -.L800D8C84: -/* 0D9884 800D8C84 26B50001 */ addiu $s5, $s5, 1 -/* 0D9888 800D8C88 2694FFFF */ addiu $s4, $s4, -1 -/* 0D988C 800D8C8C 25F8FFFF */ addiu $t8, $t7, -1 -/* 0D9890 800D8C90 A7B8009A */ sh $t8, 0x9a($sp) -/* 0D9894 800D8C94 92B90000 */ lbu $t9, ($s5) -/* 0D9898 800D8C98 5059FFFA */ beql $v0, $t9, .L800D8C84 -/* 0D989C 800D8C9C 87AF009A */ lh $t7, 0x9a($sp) -.L800D8CA0: -/* 0D98A0 800D8CA0 8FAE0048 */ lw $t6, 0x48($sp) -/* 0D98A4 800D8CA4 24010066 */ li $at, 102 -/* 0D98A8 800D8CA8 8FB800D0 */ lw $t8, 0xd0($sp) -/* 0D98AC 800D8CAC 15C10004 */ bne $t6, $at, .L800D8CC0 -/* 0D98B0 800D8CB0 8FAF0048 */ lw $t7, 0x48($sp) -/* 0D98B4 800D8CB4 87A5009A */ lh $a1, 0x9a($sp) -/* 0D98B8 800D8CB8 10000009 */ b .L800D8CE0 -/* 0D98BC 800D8CBC 24A50001 */ addiu $a1, $a1, 1 -.L800D8CC0: -/* 0D98C0 800D8CC0 24010065 */ li $at, 101 -/* 0D98C4 800D8CC4 11E10003 */ beq $t7, $at, .L800D8CD4 -/* 0D98C8 800D8CC8 24010045 */ li $at, 69 -/* 0D98CC 800D8CCC 15E10003 */ bne $t7, $at, .L800D8CDC -/* 0D98D0 800D8CD0 00001025 */ move $v0, $zero -.L800D8CD4: -/* 0D98D4 800D8CD4 10000001 */ b .L800D8CDC -/* 0D98D8 800D8CD8 24020001 */ li $v0, 1 -.L800D8CDC: -/* 0D98DC 800D8CDC 00402825 */ move $a1, $v0 -.L800D8CE0: -/* 0D98E0 800D8CE0 8F190024 */ lw $t9, 0x24($t8) -/* 0D98E4 800D8CE4 00B99821 */ addu $s3, $a1, $t9 -/* 0D98E8 800D8CE8 00137400 */ sll $t6, $s3, 0x10 -/* 0D98EC 800D8CEC 000E9C03 */ sra $s3, $t6, 0x10 -/* 0D98F0 800D8CF0 0293082A */ slt $at, $s4, $s3 -/* 0D98F4 800D8CF4 10200004 */ beqz $at, .L800D8D08 -/* 0D98F8 800D8CF8 00000000 */ nop -/* 0D98FC 800D8CFC 00149C00 */ sll $s3, $s4, 0x10 -/* 0D9900 800D8D00 0013C403 */ sra $t8, $s3, 0x10 -/* 0D9904 800D8D04 03009825 */ move $s3, $t8 -.L800D8D08: -/* 0D9908 800D8D08 1A600025 */ blez $s3, .L800D8DA0 -/* 0D990C 800D8D0C 0274082A */ slt $at, $s3, $s4 -/* 0D9910 800D8D10 10200007 */ beqz $at, .L800D8D30 -/* 0D9914 800D8D14 02751021 */ addu $v0, $s3, $s5 -/* 0D9918 800D8D18 90590000 */ lbu $t9, ($v0) -/* 0D991C 800D8D1C 2B210035 */ slti $at, $t9, 0x35 -/* 0D9920 800D8D20 54200004 */ bnel $at, $zero, .L800D8D34 -/* 0D9924 800D8D24 24050030 */ li $a1, 48 -/* 0D9928 800D8D28 10000003 */ b .L800D8D38 -/* 0D992C 800D8D2C 24050039 */ li $a1, 57 -.L800D8D30: -/* 0D9930 800D8D30 24050030 */ li $a1, 48 -.L800D8D34: -/* 0D9934 800D8D34 02751021 */ addu $v0, $s3, $s5 -.L800D8D38: -/* 0D9938 800D8D38 904EFFFF */ lbu $t6, -1($v0) -/* 0D993C 800D8D3C 2663FFFF */ addiu $v1, $s3, -1 -/* 0D9940 800D8D40 00A02025 */ move $a0, $a1 -/* 0D9944 800D8D44 14AE0009 */ bne $a1, $t6, .L800D8D6C -/* 0D9948 800D8D48 24010039 */ li $at, 57 -/* 0D994C 800D8D4C 00751021 */ addu $v0, $v1, $s5 -.L800D8D50: -/* 0D9950 800D8D50 9059FFFF */ lbu $t9, -1($v0) -/* 0D9954 800D8D54 2673FFFF */ addiu $s3, $s3, -1 -/* 0D9958 800D8D58 00137C00 */ sll $t7, $s3, 0x10 -/* 0D995C 800D8D5C 2463FFFF */ addiu $v1, $v1, -1 -/* 0D9960 800D8D60 2442FFFF */ addiu $v0, $v0, -1 -/* 0D9964 800D8D64 1099FFFA */ beq $a0, $t9, .L800D8D50 -/* 0D9968 800D8D68 000F9C03 */ sra $s3, $t7, 0x10 -.L800D8D6C: -/* 0D996C 800D8D6C 14810004 */ bne $a0, $at, .L800D8D80 -/* 0D9970 800D8D70 02A31021 */ addu $v0, $s5, $v1 -/* 0D9974 800D8D74 904E0000 */ lbu $t6, ($v0) -/* 0D9978 800D8D78 25CF0001 */ addiu $t7, $t6, 1 -/* 0D997C 800D8D7C A04F0000 */ sb $t7, ($v0) -.L800D8D80: -/* 0D9980 800D8D80 04610007 */ bgez $v1, .L800D8DA0 -/* 0D9984 800D8D84 87AE009A */ lh $t6, 0x9a($sp) -/* 0D9988 800D8D88 26730001 */ addiu $s3, $s3, 1 -/* 0D998C 800D8D8C 0013C400 */ sll $t8, $s3, 0x10 -/* 0D9990 800D8D90 25CF0001 */ addiu $t7, $t6, 1 -/* 0D9994 800D8D94 A7AF009A */ sh $t7, 0x9a($sp) -/* 0D9998 800D8D98 00189C03 */ sra $s3, $t8, 0x10 -/* 0D999C 800D8D9C 26B5FFFF */ addiu $s5, $s5, -1 -.L800D8DA0: -/* 0D99A0 800D8DA0 8FB000D0 */ lw $s0, 0xd0($sp) -/* 0D99A4 800D8DA4 93B400D7 */ lbu $s4, 0xd7($sp) -/* 0D99A8 800D8DA8 02A08825 */ move $s1, $s5 -/* 0D99AC 800D8DAC 0C0360C8 */ jal _Ldtob -/* 0D99B0 800D8DB0 87B2009A */ lh $s2, 0x9a($sp) -/* 0D99B4 800D8DB4 8FBF003C */ lw $ra, 0x3c($sp) -.L800D8DB8: -/* 0D99B8 800D8DB8 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D99BC 800D8DBC 8FB00024 */ lw $s0, 0x24($sp) -/* 0D99C0 800D8DC0 8FB10028 */ lw $s1, 0x28($sp) -/* 0D99C4 800D8DC4 8FB2002C */ lw $s2, 0x2c($sp) -/* 0D99C8 800D8DC8 8FB30030 */ lw $s3, 0x30($sp) -/* 0D99CC 800D8DCC 8FB40034 */ lw $s4, 0x34($sp) -/* 0D99D0 800D8DD0 8FB50038 */ lw $s5, 0x38($sp) -/* 0D99D4 800D8DD4 03E00008 */ jr $ra -/* 0D99D8 800D8DD8 27BD00D0 */ addiu $sp, $sp, 0xd0 - -/* 0D99DC 800D8DDC 00000000 */ nop -glabel lldiv -/* 0D99E0 800D8DE0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D99E4 800D8DE4 AFA40030 */ sw $a0, 0x30($sp) -/* 0D99E8 800D8DE8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D99EC 800D8DEC AFA60038 */ sw $a2, 0x38($sp) -/* 0D99F0 800D8DF0 AFA7003C */ sw $a3, 0x3c($sp) -/* 0D99F4 800D8DF4 00C02025 */ move $a0, $a2 -/* 0D99F8 800D8DF8 00E02825 */ move $a1, $a3 -/* 0D99FC 800D8DFC 8FA70044 */ lw $a3, 0x44($sp) -/* 0D9A00 800D8E00 0C0337DF */ jal __ll_div -/* 0D9A04 800D8E04 8FA60040 */ lw $a2, 0x40($sp) -/* 0D9A08 800D8E08 AFA20020 */ sw $v0, 0x20($sp) -/* 0D9A0C 800D8E0C AFA30024 */ sw $v1, 0x24($sp) -/* 0D9A10 800D8E10 8FA40040 */ lw $a0, 0x40($sp) -/* 0D9A14 800D8E14 8FA50044 */ lw $a1, 0x44($sp) -/* 0D9A18 800D8E18 00403025 */ move $a2, $v0 -/* 0D9A1C 800D8E1C 0C0337F6 */ jal __ll_mul -/* 0D9A20 800D8E20 00603825 */ move $a3, $v1 -/* 0D9A24 800D8E24 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D9A28 800D8E28 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D9A2C 800D8E2C 8FA80020 */ lw $t0, 0x20($sp) -/* 0D9A30 800D8E30 01C2C023 */ subu $t8, $t6, $v0 -/* 0D9A34 800D8E34 01E3082B */ sltu $at, $t7, $v1 -/* 0D9A38 800D8E38 0301C023 */ subu $t8, $t8, $at -/* 0D9A3C 800D8E3C 01E3C823 */ subu $t9, $t7, $v1 -/* 0D9A40 800D8E40 AFB9002C */ sw $t9, 0x2c($sp) -/* 0D9A44 800D8E44 AFB80028 */ sw $t8, 0x28($sp) -/* 0D9A48 800D8E48 1D000017 */ bgtz $t0, .L800D8EA8 -/* 0D9A4C 800D8E4C 8FA90024 */ lw $t1, 0x24($sp) -/* 0D9A50 800D8E50 05000003 */ bltz $t0, .L800D8E60 -/* 0D9A54 800D8E54 00000000 */ nop -/* 0D9A58 800D8E58 10000014 */ b .L800D8EAC -/* 0D9A5C 800D8E5C 27A80020 */ addiu $t0, $sp, 0x20 -.L800D8E60: -/* 0D9A60 800D8E60 07020012 */ bltzl $t8, .L800D8EAC -/* 0D9A64 800D8E64 27A80020 */ addiu $t0, $sp, 0x20 -/* 0D9A68 800D8E68 1F000003 */ bgtz $t8, .L800D8E78 -/* 0D9A6C 800D8E6C 252B0001 */ addiu $t3, $t1, 1 -/* 0D9A70 800D8E70 5320000E */ beql $t9, $zero, .L800D8EAC -/* 0D9A74 800D8E74 27A80020 */ addiu $t0, $sp, 0x20 -.L800D8E78: -/* 0D9A78 800D8E78 8FAC0040 */ lw $t4, 0x40($sp) -/* 0D9A7C 800D8E7C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0D9A80 800D8E80 2D610001 */ sltiu $at, $t3, 1 -/* 0D9A84 800D8E84 01015021 */ addu $t2, $t0, $at -/* 0D9A88 800D8E88 030C7023 */ subu $t6, $t8, $t4 -/* 0D9A8C 800D8E8C 032D082B */ sltu $at, $t9, $t5 -/* 0D9A90 800D8E90 01C17023 */ subu $t6, $t6, $at -/* 0D9A94 800D8E94 032D7823 */ subu $t7, $t9, $t5 -/* 0D9A98 800D8E98 AFAA0020 */ sw $t2, 0x20($sp) -/* 0D9A9C 800D8E9C AFAB0024 */ sw $t3, 0x24($sp) -/* 0D9AA0 800D8EA0 AFAF002C */ sw $t7, 0x2c($sp) -/* 0D9AA4 800D8EA4 AFAE0028 */ sw $t6, 0x28($sp) -.L800D8EA8: -/* 0D9AA8 800D8EA8 27A80020 */ addiu $t0, $sp, 0x20 -.L800D8EAC: -/* 0D9AAC 800D8EAC 8FA20030 */ lw $v0, 0x30($sp) -/* 0D9AB0 800D8EB0 8D010000 */ lw $at, ($t0) -/* 0D9AB4 800D8EB4 AC410000 */ sw $at, ($v0) -/* 0D9AB8 800D8EB8 8D0B0004 */ lw $t3, 4($t0) -/* 0D9ABC 800D8EBC AC4B0004 */ sw $t3, 4($v0) -/* 0D9AC0 800D8EC0 8D010008 */ lw $at, 8($t0) -/* 0D9AC4 800D8EC4 AC410008 */ sw $at, 8($v0) -/* 0D9AC8 800D8EC8 8D0B000C */ lw $t3, 0xc($t0) -/* 0D9ACC 800D8ECC AC4B000C */ sw $t3, 0xc($v0) -/* 0D9AD0 800D8ED0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D9AD4 800D8ED4 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0D9AD8 800D8ED8 03E00008 */ jr $ra -/* 0D9ADC 800D8EDC 00000000 */ nop - -glabel ldiv -/* 0D9AE0 800D8EE0 00A6001A */ div $zero, $a1, $a2 -/* 0D9AE4 800D8EE4 00001012 */ mflo $v0 -/* 0D9AE8 800D8EE8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D9AEC 800D8EEC 14C00002 */ bnez $a2, .L800D8EF8 -/* 0D9AF0 800D8EF0 00000000 */ nop -/* 0D9AF4 800D8EF4 0007000D */ break 7 -.L800D8EF8: -/* 0D9AF8 800D8EF8 2401FFFF */ li $at, -1 -/* 0D9AFC 800D8EFC 14C10004 */ bne $a2, $at, .L800D8F10 -/* 0D9B00 800D8F00 3C018000 */ lui $at, 0x8000 -/* 0D9B04 800D8F04 14A10002 */ bne $a1, $at, .L800D8F10 -/* 0D9B08 800D8F08 00000000 */ nop -/* 0D9B0C 800D8F0C 0006000D */ break 6 -.L800D8F10: -/* 0D9B10 800D8F10 00C20019 */ multu $a2, $v0 -/* 0D9B14 800D8F14 AFA20000 */ sw $v0, ($sp) -/* 0D9B18 800D8F18 27AF0000 */ addiu $t7, $sp, 0 -/* 0D9B1C 800D8F1C 00007012 */ mflo $t6 -/* 0D9B20 800D8F20 00AE1823 */ subu $v1, $a1, $t6 -/* 0D9B24 800D8F24 04410008 */ bgez $v0, .L800D8F48 -/* 0D9B28 800D8F28 AFA30004 */ sw $v1, 4($sp) -/* 0D9B2C 800D8F2C AFA20000 */ sw $v0, ($sp) -/* 0D9B30 800D8F30 18600005 */ blez $v1, .L800D8F48 -/* 0D9B34 800D8F34 AFA30004 */ sw $v1, 4($sp) -/* 0D9B38 800D8F38 24420001 */ addiu $v0, $v0, 1 -/* 0D9B3C 800D8F3C 00661823 */ subu $v1, $v1, $a2 -/* 0D9B40 800D8F40 AFA30004 */ sw $v1, 4($sp) -/* 0D9B44 800D8F44 AFA20000 */ sw $v0, ($sp) -.L800D8F48: -/* 0D9B48 800D8F48 8DE10000 */ lw $at, ($t7) -/* 0D9B4C 800D8F4C 00801025 */ move $v0, $a0 -/* 0D9B50 800D8F50 AC810000 */ sw $at, ($a0) -/* 0D9B54 800D8F54 8DE80004 */ lw $t0, 4($t7) -/* 0D9B58 800D8F58 27BD0008 */ addiu $sp, $sp, 8 -/* 0D9B5C 800D8F5C 03E00008 */ jr $ra -/* 0D9B60 800D8F60 AC880004 */ sw $t0, 4($a0) - -/* 0D9B64 800D8F64 00000000 */ nop -/* 0D9B68 800D8F68 00000000 */ nop -/* 0D9B6C 800D8F6C 00000000 */ nop diff --git a/asm/non_matchings/code_800029B0.s b/asm/non_matchings/code_800029B0.s index 121e01c22..6821b1779 100644 --- a/asm/non_matchings/code_800029B0.s +++ b/asm/non_matchings/code_800029B0.s @@ -408,10 +408,10 @@ glabel L80003000 /* 003C0C 8000300C 00000000 */ nop glabel func_80003010 -/* 003C10 80003010 3C038000 */ lui $v1, %hi(D_8000031C) # $v1, 0x8000 +/* 003C10 80003010 3C038000 */ lui $v1, %hi(osAppNmiBuffer) # $v1, 0x8000 /* 003C14 80003014 3C028000 */ lui $v0, %hi(D_8000035C) # $v0, 0x8000 /* 003C18 80003018 2442035C */ addiu $v0, %lo(D_8000035C) # addiu $v0, $v0, 0x35c -/* 003C1C 8000301C 2463031C */ addiu $v1, %lo(D_8000031C) # addiu $v1, $v1, 0x31c +/* 003C1C 8000301C 2463031C */ addiu $v1, %lo(osAppNmiBuffer) # addiu $v1, $v1, 0x31c .L80003020: /* 003C20 80003020 24630010 */ addiu $v1, $v1, 0x10 /* 003C24 80003024 AC60FFF4 */ sw $zero, -0xc($v1) diff --git a/asm/non_matchings/code_800AF9B0.s b/asm/non_matchings/code_800AF9B0.s index 51e54caf2..44d90db8f 100644 --- a/asm/non_matchings/code_800AF9B0.s +++ b/asm/non_matchings/code_800AF9B0.s @@ -6865,7 +6865,7 @@ glabel func_800B5B2C .L800B5B50: /* 0B6750 800B5B50 3C048015 */ lui $a0, %hi(gSIEventMesgQueue) # $a0, 0x8015 /* 0B6754 800B5B54 2484F0B8 */ addiu $a0, %lo(gSIEventMesgQueue) # addiu $a0, $a0, -0xf48 -/* 0B6758 800B5B58 0C0338EC */ jal func_800CE3B0 +/* 0B6758 800B5B58 0C0338EC */ jal osPfsIsPlug /* 0B675C 800B5B5C AFA60020 */ sw $a2, 0x20($sp) /* 0B6760 800B5B60 8FA60020 */ lw $a2, 0x20($sp) /* 0B6764 800B5B64 93AE001F */ lbu $t6, 0x1f($sp) @@ -7265,7 +7265,7 @@ glabel func_800B6088 /* 0B6CC4 800B60C4 8CA5EB84 */ lw $a1, %lo(D_8018EB84)($a1) /* 0B6CC8 800B60C8 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 /* 0B6CCC 800B60CC AFA30014 */ sw $v1, 0x14($sp) -/* 0B6CD0 800B60D0 0C0340F3 */ jal func_800D03CC +/* 0B6CD0 800B60D0 0C0340F3 */ jal osPfsReadWriteFile /* 0B6CD4 800B60D4 24060001 */ li $a2, 1 /* 0B6CD8 800B60D8 8FBF001C */ lw $ra, 0x1c($sp) /* 0B6CDC 800B60DC 27BD0020 */ addiu $sp, $sp, 0x20 @@ -7376,7 +7376,7 @@ glabel func_800B6178 /* 0B6E5C 800B625C 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 /* 0B6E60 800B6260 25470100 */ addiu $a3, $t2, 0x100 /* 0B6E64 800B6264 24060001 */ li $a2, 1 -/* 0B6E68 800B6268 0C0340F3 */ jal func_800D03CC +/* 0B6E68 800B6268 0C0340F3 */ jal osPfsReadWriteFile /* 0B6E6C 800B626C AFAC0014 */ sw $t4, 0x14($sp) /* 0B6E70 800B6270 1440001E */ bnez $v0, .L800B62EC /* 0B6E74 800B6274 00401825 */ move $v1, $v0 @@ -7592,7 +7592,7 @@ glabel func_800B64EC /* 0B7148 800B6548 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 /* 0B714C 800B654C 24E70100 */ addiu $a3, $a3, 0x100 /* 0B7150 800B6550 00003025 */ move $a2, $zero -/* 0B7154 800B6554 0C0340F3 */ jal func_800D03CC +/* 0B7154 800B6554 0C0340F3 */ jal osPfsReadWriteFile /* 0B7158 800B6558 AFAF0014 */ sw $t7, 0x14($sp) /* 0B715C 800B655C 1440001D */ bnez $v0, .L800B65D4 /* 0B7160 800B6560 AFA20030 */ sw $v0, 0x30($sp) @@ -7667,7 +7667,7 @@ glabel func_800B65F4 /* 0B7254 800B6654 2484E8D0 */ addiu $a0, %lo(D_8018E8D0) # addiu $a0, $a0, -0x1730 /* 0B7258 800B6658 24E70100 */ addiu $a3, $a3, 0x100 /* 0B725C 800B665C 00003025 */ move $a2, $zero -/* 0B7260 800B6660 0C0340F3 */ jal func_800D03CC +/* 0B7260 800B6660 0C0340F3 */ jal osPfsReadWriteFile /* 0B7264 800B6664 AFAF0014 */ sw $t7, 0x14($sp) /* 0B7268 800B6668 1440001F */ bnez $v0, .L800B66E8 /* 0B726C 800B666C AFA20034 */ sw $v0, 0x34($sp) @@ -7730,7 +7730,7 @@ glabel func_800B6708 /* 0B7338 800B6738 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 /* 0B733C 800B673C AFAF0014 */ sw $t7, 0x14($sp) /* 0B7340 800B6740 00003025 */ move $a2, $zero -/* 0B7344 800B6744 0C0340F3 */ jal func_800D03CC +/* 0B7344 800B6744 0C0340F3 */ jal osPfsReadWriteFile /* 0B7348 800B6748 00003825 */ move $a3, $zero /* 0B734C 800B674C 3C118019 */ lui $s1, %hi(D_8018EE10) # $s1, 0x8019 /* 0B7350 800B6750 2631EE10 */ addiu $s1, %lo(D_8018EE10) # addiu $s1, $s1, -0x11f0 @@ -7770,7 +7770,7 @@ glabel func_800B6798 /* 0B73C8 800B67C8 2484E8D0 */ addiu $a0, %lo(D_8018E8D0) # addiu $a0, $a0, -0x1730 /* 0B73CC 800B67CC 00003025 */ move $a2, $zero /* 0B73D0 800B67D0 00003825 */ move $a3, $zero -/* 0B73D4 800B67D4 0C0340F3 */ jal func_800D03CC +/* 0B73D4 800B67D4 0C0340F3 */ jal osPfsReadWriteFile /* 0B73D8 800B67D8 AFB20014 */ sw $s2, 0x14($sp) /* 0B73DC 800B67DC 00008025 */ move $s0, $zero /* 0B73E0 800B67E0 24110002 */ li $s1, 2 @@ -7940,7 +7940,7 @@ glabel func_800B69BC /* 0B7644 800B6A44 AFA90010 */ sw $t1, 0x10($sp) /* 0B7648 800B6A48 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 /* 0B764C 800B6A4C 24060001 */ li $a2, 1 -/* 0B7650 800B6A50 0C0340F3 */ jal func_800D03CC +/* 0B7650 800B6A50 0C0340F3 */ jal osPfsReadWriteFile /* 0B7654 800B6A54 AFA80014 */ sw $t0, 0x14($sp) /* 0B7658 800B6A58 8FBF001C */ lw $ra, 0x1c($sp) /* 0B765C 800B6A5C 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/main/func_8000105C.s b/asm/non_matchings/main/func_8000105C.s index 108934701..3bb6b83d2 100644 --- a/asm/non_matchings/main/func_8000105C.s +++ b/asm/non_matchings/main/func_8000105C.s @@ -18,7 +18,7 @@ glabel func_8000105C /* 001C9C 8000109C 0C000456 */ jal dma_copy /* 001CA0 800010A0 3C048028 */ lui $a0, 0x8028 /* 001CA4 800010A4 3C048028 */ lui $a0, 0x8028 -/* 001CA8 800010A8 0C0336C0 */ jal osInvalCache +/* 001CA8 800010A8 0C0336C0 */ jal osInvalICache /* 001CAC 800010AC 3405DF00 */ li $a1, 57088 /* 001CB0 800010B0 3C048028 */ lui $a0, 0x8028 /* 001CB4 800010B4 0C0336E0 */ jal osInvalDCache diff --git a/asm/non_matchings/main/func_800010CC.s b/asm/non_matchings/main/func_800010CC.s index 01e411cdf..f147e2fd0 100644 --- a/asm/non_matchings/main/func_800010CC.s +++ b/asm/non_matchings/main/func_800010CC.s @@ -23,7 +23,7 @@ glabel func_800010CC /* 001D20 80001120 3C048028 */ lui $a0, (0x8028DF00 >> 16) # lui $a0, 0x8028 /* 001D24 80001124 3C050002 */ lui $a1, (0x0002C470 >> 16) # lui $a1, 2 /* 001D28 80001128 34A5C470 */ ori $a1, (0x0002C470 & 0xFFFF) # ori $a1, $a1, 0xc470 -/* 001D2C 8000112C 0C0336C0 */ jal osInvalCache +/* 001D2C 8000112C 0C0336C0 */ jal osInvalICache /* 001D30 80001130 3484DF00 */ ori $a0, (0x8028DF00 & 0xFFFF) # ori $a0, $a0, 0xdf00 /* 001D34 80001134 3C048028 */ lui $a0, (0x8028DF00 >> 16) # lui $a0, 0x8028 /* 001D38 80001138 3C050002 */ lui $a1, (0x0002C470 >> 16) # lui $a1, 2 diff --git a/asm/non_matchings/main/func_800022DC.s b/asm/non_matchings/main/func_800022DC.s index 8b94d05ea..4d72956e8 100644 --- a/asm/non_matchings/main/func_800022DC.s +++ b/asm/non_matchings/main/func_800022DC.s @@ -10,7 +10,7 @@ glabel func_800022DC /* 002EFC 800022FC 00E02025 */ move $a0, $a3 /* 002F00 80002300 55C10010 */ bnel $t6, $at, .L80002344 /* 002F04 80002304 8CF90000 */ lw $t9, ($a3) -/* 002F08 80002308 0C033758 */ jal func_800CDD60 +/* 002F08 80002308 0C033758 */ jal osSpTaskYielded /* 002F0C 8000230C AFA7001C */ sw $a3, 0x1c($sp) /* 002F10 80002310 14400005 */ bnez $v0, .L80002328 /* 002F14 80002314 8FA7001C */ lw $a3, 0x1c($sp) diff --git a/asm/os/__osDisableInt.s b/asm/os/__osDisableInt.s new file mode 100644 index 000000000..4c759b4c9 --- /dev/null +++ b/asm/os/__osDisableInt.s @@ -0,0 +1,18 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + + +glabel __osDisableInt + mfc0 $t0, $12 + and $t1, $t0, -2 + mtc0 $t1, $12 + andi $v0, $t0, 1 + nop + jr $ra + nop + diff --git a/asm/os/__osException.s b/asm/os/__osException.s new file mode 100644 index 000000000..5bc11ff9d --- /dev/null +++ b/asm/os/__osException.s @@ -0,0 +1,639 @@ +# handwritten (needs data/rodata too) +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + + +glabel __osExceptionPreamble +/* 0D1DB0 800D11B0 3C1A800D */ lui $k0, %hi(__osException) # $k0, 0x800d +/* 0D1DB4 800D11B4 275A11C0 */ addiu $k0, %lo(__osException) # addiu $k0, $k0, 0x11c0 +/* 0D1DB8 800D11B8 03400008 */ jr $k0 +/* 0D1DBC 800D11BC 00000000 */ nop +glabel __osException +/* 0D1DC0 800D11C0 3C1A8019 */ lui $k0, %hi(D_801976A0) # $k0, 0x8019 +/* 0D1DC4 800D11C4 275A76A0 */ addiu $k0, %lo(D_801976A0) # addiu $k0, $k0, 0x76a0 +/* 0D1DC8 800D11C8 FF410020 */ sd $at, 0x20($k0) +/* 0D1DCC 800D11CC 401B6000 */ mfc0 $k1, $12 +/* 0D1DD0 800D11D0 AF5B0118 */ sw $k1, 0x118($k0) +/* 0D1DD4 800D11D4 2401FFFC */ li $at, -4 +/* 0D1DD8 800D11D8 0361D824 */ and $k1, $k1, $at +/* 0D1DDC 800D11DC 409B6000 */ mtc0 $k1, $12 +/* 0D1DE0 800D11E0 FF480058 */ sd $t0, 0x58($k0) +/* 0D1DE4 800D11E4 FF490060 */ sd $t1, 0x60($k0) +/* 0D1DE8 800D11E8 FF4A0068 */ sd $t2, 0x68($k0) +/* 0D1DEC 800D11EC AF400018 */ sw $zero, 0x18($k0) +/* 0D1DF0 800D11F0 40086800 */ mfc0 $t0, $13 +/* 0D1DF4 800D11F4 03404025 */ move $t0, $k0 +/* 0D1DF8 800D11F8 3C1A800F */ lui $k0, %hi(__osRunningThread) # $k0, 0x800f +/* 0D1DFC 800D11FC 8F5AB3B0 */ lw $k0, %lo(__osRunningThread)($k0) +/* 0D1E00 800D1200 DD090020 */ ld $t1, 0x20($t0) +/* 0D1E04 800D1204 FF490020 */ sd $t1, 0x20($k0) +/* 0D1E08 800D1208 DD090118 */ ld $t1, 0x118($t0) +/* 0D1E0C 800D120C FF490118 */ sd $t1, 0x118($k0) +/* 0D1E10 800D1210 DD090058 */ ld $t1, 0x58($t0) +/* 0D1E14 800D1214 FF490058 */ sd $t1, 0x58($k0) +/* 0D1E18 800D1218 DD090060 */ ld $t1, 0x60($t0) +/* 0D1E1C 800D121C FF490060 */ sd $t1, 0x60($k0) +/* 0D1E20 800D1220 DD090068 */ ld $t1, 0x68($t0) +/* 0D1E24 800D1224 FF490068 */ sd $t1, 0x68($k0) +/* 0D1E28 800D1228 8F5B0118 */ lw $k1, 0x118($k0) +/* 0D1E2C 800D122C 00004012 */ mflo $t0 +/* 0D1E30 800D1230 FF480108 */ sd $t0, 0x108($k0) +/* 0D1E34 800D1234 00004010 */ mfhi $t0 +/* 0D1E38 800D1238 3369FF00 */ andi $t1, $k1, 0xff00 +/* 0D1E3C 800D123C FF420028 */ sd $v0, 0x28($k0) +/* 0D1E40 800D1240 FF430030 */ sd $v1, 0x30($k0) +/* 0D1E44 800D1244 FF440038 */ sd $a0, 0x38($k0) +/* 0D1E48 800D1248 FF450040 */ sd $a1, 0x40($k0) +/* 0D1E4C 800D124C FF460048 */ sd $a2, 0x48($k0) +/* 0D1E50 800D1250 FF470050 */ sd $a3, 0x50($k0) +/* 0D1E54 800D1254 FF4B0070 */ sd $t3, 0x70($k0) +/* 0D1E58 800D1258 FF4C0078 */ sd $t4, 0x78($k0) +/* 0D1E5C 800D125C FF4D0080 */ sd $t5, 0x80($k0) +/* 0D1E60 800D1260 FF4E0088 */ sd $t6, 0x88($k0) +/* 0D1E64 800D1264 FF4F0090 */ sd $t7, 0x90($k0) +/* 0D1E68 800D1268 FF500098 */ sd $s0, 0x98($k0) +/* 0D1E6C 800D126C FF5100A0 */ sd $s1, 0xa0($k0) +/* 0D1E70 800D1270 FF5200A8 */ sd $s2, 0xa8($k0) +/* 0D1E74 800D1274 FF5300B0 */ sd $s3, 0xb0($k0) +/* 0D1E78 800D1278 FF5400B8 */ sd $s4, 0xb8($k0) +/* 0D1E7C 800D127C FF5500C0 */ sd $s5, 0xc0($k0) +/* 0D1E80 800D1280 FF5600C8 */ sd $s6, 0xc8($k0) +/* 0D1E84 800D1284 FF5700D0 */ sd $s7, 0xd0($k0) +/* 0D1E88 800D1288 FF5800D8 */ sd $t8, 0xd8($k0) +/* 0D1E8C 800D128C FF5900E0 */ sd $t9, 0xe0($k0) +/* 0D1E90 800D1290 FF5C00E8 */ sd $gp, 0xe8($k0) +/* 0D1E94 800D1294 FF5D00F0 */ sd $sp, 0xf0($k0) +/* 0D1E98 800D1298 FF5E00F8 */ sd $fp, 0xf8($k0) +/* 0D1E9C 800D129C FF5F0100 */ sd $ra, 0x100($k0) +/* 0D1EA0 800D12A0 1120000D */ beqz $t1, .L800D12D8 +/* 0D1EA4 800D12A4 FF480110 */ sd $t0, 0x110($k0) +/* 0D1EA8 800D12A8 3C08800F */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800f +/* 0D1EAC 800D12AC 2508A5EC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5a14 +/* 0D1EB0 800D12B0 8D080000 */ lw $t0, ($t0) +/* 0D1EB4 800D12B4 2401FFFF */ li $at, -1 +/* 0D1EB8 800D12B8 01014026 */ xor $t0, $t0, $at +/* 0D1EBC 800D12BC 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff +/* 0D1EC0 800D12C0 3108FF00 */ andi $t0, $t0, 0xff00 +/* 0D1EC4 800D12C4 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff +/* 0D1EC8 800D12C8 01284825 */ or $t1, $t1, $t0 +/* 0D1ECC 800D12CC 0361D824 */ and $k1, $k1, $at +/* 0D1ED0 800D12D0 0369D825 */ or $k1, $k1, $t1 +/* 0D1ED4 800D12D4 AF5B0118 */ sw $k1, 0x118($k0) +.L800D12D8: +/* 0D1ED8 800D12D8 3C09A430 */ lui $t1, %hi(D_A430000C) # $t1, 0xa430 +/* 0D1EDC 800D12DC 8D29000C */ lw $t1, %lo(D_A430000C)($t1) +/* 0D1EE0 800D12E0 1120000B */ beqz $t1, .L800D1310 +/* 0D1EE4 800D12E4 00000000 */ nop +/* 0D1EE8 800D12E8 3C08800F */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800f +/* 0D1EEC 800D12EC 2508A5EC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5a14 +/* 0D1EF0 800D12F0 8D080000 */ lw $t0, ($t0) +/* 0D1EF4 800D12F4 8F4C0128 */ lw $t4, 0x128($k0) +/* 0D1EF8 800D12F8 2401FFFF */ li $at, -1 +/* 0D1EFC 800D12FC 00084402 */ srl $t0, $t0, 0x10 +/* 0D1F00 800D1300 01014026 */ xor $t0, $t0, $at +/* 0D1F04 800D1304 3108003F */ andi $t0, $t0, 0x3f +/* 0D1F08 800D1308 010C4024 */ and $t0, $t0, $t4 +/* 0D1F0C 800D130C 01284825 */ or $t1, $t1, $t0 +.L800D1310: +/* 0D1F10 800D1310 AF490128 */ sw $t1, 0x128($k0) +/* 0D1F14 800D1314 40087000 */ mfc0 $t0, $14 +/* 0D1F18 800D1318 AF48011C */ sw $t0, 0x11c($k0) +/* 0D1F1C 800D131C 8F480018 */ lw $t0, 0x18($k0) +/* 0D1F20 800D1320 11000014 */ beqz $t0, .L800D1374 +/* 0D1F24 800D1324 00000000 */ nop +/* 0D1F28 800D1328 4448F800 */ cfc1 $t0, $31 +/* 0D1F2C 800D132C 00000000 */ nop +/* 0D1F30 800D1330 AF48012C */ sw $t0, 0x12c($k0) +/* 0D1F34 800D1334 F7400130 */ sdc1 $f0, 0x130($k0) +/* 0D1F38 800D1338 F7420138 */ sdc1 $f2, 0x138($k0) +/* 0D1F3C 800D133C F7440140 */ sdc1 $f4, 0x140($k0) +/* 0D1F40 800D1340 F7460148 */ sdc1 $f6, 0x148($k0) +/* 0D1F44 800D1344 F7480150 */ sdc1 $f8, 0x150($k0) +/* 0D1F48 800D1348 F74A0158 */ sdc1 $f10, 0x158($k0) +/* 0D1F4C 800D134C F74C0160 */ sdc1 $f12, 0x160($k0) +/* 0D1F50 800D1350 F74E0168 */ sdc1 $f14, 0x168($k0) +/* 0D1F54 800D1354 F7500170 */ sdc1 $f16, 0x170($k0) +/* 0D1F58 800D1358 F7520178 */ sdc1 $f18, 0x178($k0) +/* 0D1F5C 800D135C F7540180 */ sdc1 $f20, 0x180($k0) +/* 0D1F60 800D1360 F7560188 */ sdc1 $f22, 0x188($k0) +/* 0D1F64 800D1364 F7580190 */ sdc1 $f24, 0x190($k0) +/* 0D1F68 800D1368 F75A0198 */ sdc1 $f26, 0x198($k0) +/* 0D1F6C 800D136C F75C01A0 */ sdc1 $f28, 0x1a0($k0) +/* 0D1F70 800D1370 F75E01A8 */ sdc1 $f30, 0x1a8($k0) +.L800D1374: +/* 0D1F74 800D1374 40086800 */ mfc0 $t0, $13 +/* 0D1F78 800D1378 AF480120 */ sw $t0, 0x120($k0) +/* 0D1F7C 800D137C 24090002 */ li $t1, 2 +/* 0D1F80 800D1380 A7490010 */ sh $t1, 0x10($k0) +/* 0D1F84 800D1384 3109007C */ andi $t1, $t0, 0x7c +/* 0D1F88 800D1388 240A0024 */ li $t2, 36 +/* 0D1F8C 800D138C 112A00B0 */ beq $t1, $t2, .L800D1650 +/* 0D1F90 800D1390 00000000 */ nop +/* 0D1F94 800D1394 240A002C */ li $t2, 44 +/* 0D1F98 800D1398 112A00FF */ beq $t1, $t2, .L800D1798 +/* 0D1F9C 800D139C 00000000 */ nop +/* 0D1FA0 800D13A0 240A0000 */ li $t2, 0 +/* 0D1FA4 800D13A4 152A00C3 */ bne $t1, $t2, .L800D16B4 +/* 0D1FA8 800D13A8 00000000 */ nop +/* 0D1FAC 800D13AC 03688024 */ and $s0, $k1, $t0 +.L800D13B0: +/* 0D1FB0 800D13B0 3209FF00 */ andi $t1, $s0, 0xff00 +/* 0D1FB4 800D13B4 00095302 */ srl $t2, $t1, 0xc +/* 0D1FB8 800D13B8 15400003 */ bnez $t2, .L800D13C8 +/* 0D1FBC 800D13BC 00000000 */ nop +/* 0D1FC0 800D13C0 00095202 */ srl $t2, $t1, 8 +/* 0D1FC4 800D13C4 214A0010 */ addi $t2, $t2, 0x10 +.L800D13C8: +/* 0D1FC8 800D13C8 3C01800F */ lui $at, %hi(D_800F3A00) # 0x800f +/* 0D1FCC 800D13CC 002A0821 */ addu $at, $at, $t2 +/* 0D1FD0 800D13D0 902A3A00 */ lbu $t2, %lo(D_800F3A00)($at) # 0x3a00($at) +/* 0D1FD4 800D13D4 3C01800F */ lui $at, %hi(D_800F3A20) +/* 0D1FD8 800D13D8 002A0821 */ addu $at, $at, $t2 +/* 0D1FDC 800D13DC 8C2A3A20 */ lw $t2, %lo(D_800F3A20)($at) +/* 0D1FE0 800D13E0 01400008 */ jr $t2 +/* 0D1FE4 800D13E4 00000000 */ nop +glabel L800D13E8 +/* 0D1FE8 800D13E8 2401DFFF */ li $at, -8193 +/* 0D1FEC 800D13EC 1000FFF0 */ b .L800D13B0 +/* 0D1FF0 800D13F0 02018024 */ and $s0, $s0, $at +glabel L800D13F4 +/* 0D1FF4 800D13F4 2401BFFF */ li $at, -16385 +/* 0D1FF8 800D13F8 1000FFED */ b .L800D13B0 +/* 0D1FFC 800D13FC 02018024 */ and $s0, $s0, $at +glabel L800D1400 +/* 0D2000 800D1400 40095800 */ mfc0 $t1, $11 +/* 0D2004 800D1404 40895800 */ mtc0 $t1, $11 +/* 0D2008 800D1408 0C0345B9 */ jal func_800D16E4 +/* 0D200C 800D140C 24040018 */ li $a0, 24 +/* 0D2010 800D1410 3C01FFFF */ lui $at, (0xFFFF7FFF >> 16) # lui $at, 0xffff +/* 0D2014 800D1414 34217FFF */ ori $at, (0xFFFF7FFF & 0xFFFF) # ori $at, $at, 0x7fff +/* 0D2018 800D1418 1000FFE5 */ b .L800D13B0 +/* 0D201C 800D141C 02018024 */ and $s0, $s0, $at +glabel L800D1420 +/* 0D2020 800D1420 2401F7FF */ li $at, -2049 +/* 0D2024 800D1424 02018024 */ and $s0, $s0, $at +/* 0D2028 800D1428 240A0004 */ li $t2, 4 +/* 0D202C 800D142C 3C01800F */ lui $at, %hi(__osHwIntTable) # 0x800f +/* 0D2030 800D1430 002A0821 */ addu $at, $at, $t2 +/* 0D2034 800D1434 8C2AB380 */ lw $t2, %lo(__osHwIntTable)($at) # -0x4c80($at) +/* 0D2038 800D1438 3C1D8019 */ lui $sp, %hi(D_801965E0) # $sp, 0x8019 +/* 0D203C 800D143C 27BD65E0 */ addiu $sp, %lo(D_801965E0) # addiu $sp, $sp, 0x65e0 +/* 0D2040 800D1440 24040010 */ li $a0, 16 +/* 0D2044 800D1444 11400007 */ beqz $t2, .L800D1464 +/* 0D2048 800D1448 27BD0FF0 */ addiu $sp, $sp, 0xff0 +/* 0D204C 800D144C 0140F809 */ jalr $t2 +/* 0D2050 800D1450 00000000 */ nop +/* 0D2054 800D1454 10400003 */ beqz $v0, .L800D1464 +/* 0D2058 800D1458 00000000 */ nop +/* 0D205C 800D145C 10000082 */ b .L800D1668 +/* 0D2060 800D1460 00000000 */ nop +.L800D1464: +/* 0D2064 800D1464 0C0345B9 */ jal func_800D16E4 +/* 0D2068 800D1468 00000000 */ nop +/* 0D206C 800D146C 1000FFD0 */ b .L800D13B0 +/* 0D2070 800D1470 00000000 */ nop +glabel L800D1474 +/* 0D2074 800D1474 3C08800F */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800f +/* 0D2078 800D1478 2508A5EC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5a14 +/* 0D207C 800D147C 8D080000 */ lw $t0, ($t0) +/* 0D2080 800D1480 3C11A430 */ lui $s1, %hi(D_A4300008) # $s1, 0xa430 +/* 0D2084 800D1484 8E310008 */ lw $s1, %lo(D_A4300008)($s1) +/* 0D2088 800D1488 00084402 */ srl $t0, $t0, 0x10 +/* 0D208C 800D148C 02288824 */ and $s1, $s1, $t0 +/* 0D2090 800D1490 32290001 */ andi $t1, $s1, 1 +/* 0D2094 800D1494 11200013 */ beqz $t1, .L800D14E4 +/* 0D2098 800D1498 00000000 */ nop +/* 0D209C 800D149C 3C0CA404 */ lui $t4, %hi(D_A4040010) # $t4, 0xa404 +/* 0D20A0 800D14A0 8D8C0010 */ lw $t4, %lo(D_A4040010)($t4) +/* 0D20A4 800D14A4 24090008 */ li $t1, 8 +/* 0D20A8 800D14A8 3C01A404 */ lui $at, %hi(D_A4040010) # $at, 0xa404 +/* 0D20AC 800D14AC 318C0300 */ andi $t4, $t4, 0x300 +/* 0D20B0 800D14B0 3231003E */ andi $s1, $s1, 0x3e +/* 0D20B4 800D14B4 11800007 */ beqz $t4, .L800D14D4 +/* 0D20B8 800D14B8 AC290010 */ sw $t1, %lo(D_A4040010)($at) +/* 0D20BC 800D14BC 0C0345B9 */ jal func_800D16E4 +/* 0D20C0 800D14C0 24040020 */ li $a0, 32 +/* 0D20C4 800D14C4 12200038 */ beqz $s1, .L800D15A8 +/* 0D20C8 800D14C8 00000000 */ nop +/* 0D20CC 800D14CC 10000005 */ b .L800D14E4 +/* 0D20D0 800D14D0 00000000 */ nop +.L800D14D4: +/* 0D20D4 800D14D4 0C0345B9 */ jal func_800D16E4 +/* 0D20D8 800D14D8 24040058 */ li $a0, 88 +/* 0D20DC 800D14DC 12200032 */ beqz $s1, .L800D15A8 +/* 0D20E0 800D14E0 00000000 */ nop +.L800D14E4: +/* 0D20E4 800D14E4 32290008 */ andi $t1, $s1, 8 +/* 0D20E8 800D14E8 11200007 */ beqz $t1, .L800D1508 +/* 0D20EC 800D14EC 3C01A440 */ lui $at, %hi(D_A4400010) # $at, 0xa440 +/* 0D20F0 800D14F0 32310037 */ andi $s1, $s1, 0x37 +/* 0D20F4 800D14F4 AC200010 */ sw $zero, %lo(D_A4400010)($at) +/* 0D20F8 800D14F8 0C0345B9 */ jal func_800D16E4 +/* 0D20FC 800D14FC 24040038 */ li $a0, 56 +/* 0D2100 800D1500 12200029 */ beqz $s1, .L800D15A8 +/* 0D2104 800D1504 00000000 */ nop +.L800D1508: +/* 0D2108 800D1508 32290004 */ andi $t1, $s1, 4 +/* 0D210C 800D150C 11200009 */ beqz $t1, .L800D1534 +/* 0D2110 800D1510 00000000 */ nop +/* 0D2114 800D1514 24090001 */ li $t1, 1 +/* 0D2118 800D1518 3C01A450 */ lui $at, %hi(D_A450000C) # $at, 0xa450 +/* 0D211C 800D151C 3231003B */ andi $s1, $s1, 0x3b +/* 0D2120 800D1520 AC29000C */ sw $t1, %lo(D_A450000C)($at) +/* 0D2124 800D1524 0C0345B9 */ jal func_800D16E4 +/* 0D2128 800D1528 24040030 */ li $a0, 48 +/* 0D212C 800D152C 1220001E */ beqz $s1, .L800D15A8 +/* 0D2130 800D1530 00000000 */ nop +.L800D1534: +/* 0D2134 800D1534 32290002 */ andi $t1, $s1, 2 +/* 0D2138 800D1538 11200007 */ beqz $t1, .L800D1558 +/* 0D213C 800D153C 3C01A480 */ lui $at, %hi(D_A4800018) # $at, 0xa480 +/* 0D2140 800D1540 3231003D */ andi $s1, $s1, 0x3d +/* 0D2144 800D1544 AC200018 */ sw $zero, %lo(D_A4800018)($at) +/* 0D2148 800D1548 0C0345B9 */ jal func_800D16E4 +/* 0D214C 800D154C 24040028 */ li $a0, 40 +/* 0D2150 800D1550 12200015 */ beqz $s1, .L800D15A8 +/* 0D2154 800D1554 00000000 */ nop +.L800D1558: +/* 0D2158 800D1558 32290010 */ andi $t1, $s1, 0x10 +/* 0D215C 800D155C 11200009 */ beqz $t1, .L800D1584 +/* 0D2160 800D1560 00000000 */ nop +/* 0D2164 800D1564 24090002 */ li $t1, 2 +/* 0D2168 800D1568 3C01A460 */ lui $at, %hi(D_A4600010) # $at, 0xa460 +/* 0D216C 800D156C 3231002F */ andi $s1, $s1, 0x2f +/* 0D2170 800D1570 AC290010 */ sw $t1, %lo(D_A4600010)($at) +/* 0D2174 800D1574 0C0345B9 */ jal func_800D16E4 +/* 0D2178 800D1578 24040040 */ li $a0, 64 +/* 0D217C 800D157C 1220000A */ beqz $s1, .L800D15A8 +/* 0D2180 800D1580 00000000 */ nop +.L800D1584: +/* 0D2184 800D1584 32290020 */ andi $t1, $s1, 0x20 +/* 0D2188 800D1588 11200007 */ beqz $t1, .L800D15A8 +/* 0D218C 800D158C 00000000 */ nop +/* 0D2190 800D1590 24090800 */ li $t1, 2048 +/* 0D2194 800D1594 3C01A430 */ lui $at, 0xa430 +/* 0D2198 800D1598 3231001F */ andi $s1, $s1, 0x1f +/* 0D219C 800D159C AC290000 */ sw $t1, ($at) +/* 0D21A0 800D15A0 0C0345B9 */ jal func_800D16E4 +/* 0D21A4 800D15A4 24040048 */ li $a0, 72 +.L800D15A8: +/* 0D21A8 800D15A8 2401FBFF */ li $at, -1025 +/* 0D21AC 800D15AC 1000FF80 */ b .L800D13B0 +/* 0D21B0 800D15B0 02018024 */ and $s0, $s0, $at +glabel L800D15B4 +/* 0D21B4 800D15B4 8F5B0118 */ lw $k1, 0x118($k0) +/* 0D21B8 800D15B8 2401EFFF */ li $at, -4097 +/* 0D21BC 800D15BC 3C09800F */ lui $t1, %hi(D_800EA5E8) # $t1, 0x800f +/* 0D21C0 800D15C0 0361D824 */ and $k1, $k1, $at +/* 0D21C4 800D15C4 AF5B0118 */ sw $k1, 0x118($k0) +/* 0D21C8 800D15C8 2529A5E8 */ addiu $t1, %lo(D_800EA5E8) # addiu $t1, $t1, -0x5a18 +/* 0D21CC 800D15CC 8D2A0000 */ lw $t2, ($t1) +/* 0D21D0 800D15D0 11400003 */ beqz $t2, .L800D15E0 +/* 0D21D4 800D15D4 2401EFFF */ li $at, -4097 +/* 0D21D8 800D15D8 10000023 */ b .L800D1668 +/* 0D21DC 800D15DC 02018024 */ and $s0, $s0, $at +.L800D15E0: +/* 0D21E0 800D15E0 240A0001 */ li $t2, 1 +/* 0D21E4 800D15E4 AD2A0000 */ sw $t2, ($t1) +/* 0D21E8 800D15E8 0C0345B9 */ jal func_800D16E4 +/* 0D21EC 800D15EC 24040070 */ li $a0, 112 +/* 0D21F0 800D15F0 3C0A800F */ lui $t2, %hi(__osRunQueue) # $t2, 0x800f +/* 0D21F4 800D15F4 8D4AB3A8 */ lw $t2, %lo(__osRunQueue)($t2) +/* 0D21F8 800D15F8 2401EFFF */ li $at, -4097 +/* 0D21FC 800D15FC 02018024 */ and $s0, $s0, $at +/* 0D2200 800D1600 8D5B0118 */ lw $k1, 0x118($t2) +/* 0D2204 800D1604 0361D824 */ and $k1, $k1, $at +/* 0D2208 800D1608 10000017 */ b .L800D1668 +/* 0D220C 800D160C AD5B0118 */ sw $k1, 0x118($t2) +glabel L800D1610 +/* 0D2210 800D1610 2401FDFF */ li $at, -513 +/* 0D2214 800D1614 01014024 */ and $t0, $t0, $at +/* 0D2218 800D1618 40886800 */ mtc0 $t0, $13 +/* 0D221C 800D161C 0C0345B9 */ jal func_800D16E4 +/* 0D2220 800D1620 24040008 */ li $a0, 8 +/* 0D2224 800D1624 2401FDFF */ li $at, -513 +/* 0D2228 800D1628 1000FF61 */ b .L800D13B0 +/* 0D222C 800D162C 02018024 */ and $s0, $s0, $at +glabel L800D1630 +/* 0D2230 800D1630 2401FEFF */ li $at, -257 +/* 0D2234 800D1634 01014024 */ and $t0, $t0, $at +/* 0D2238 800D1638 40886800 */ mtc0 $t0, $13 +/* 0D223C 800D163C 0C0345B9 */ jal func_800D16E4 +/* 0D2240 800D1640 24040000 */ li $a0, 0 +/* 0D2244 800D1644 2401FEFF */ li $at, -257 +/* 0D2248 800D1648 1000FF59 */ b .L800D13B0 +/* 0D224C 800D164C 02018024 */ and $s0, $s0, $at +.L800D1650: +/* 0D2250 800D1650 24090001 */ li $t1, 1 +/* 0D2254 800D1654 A7490012 */ sh $t1, 0x12($k0) +/* 0D2258 800D1658 0C0345B9 */ jal func_800D16E4 +/* 0D225C 800D165C 24040050 */ li $a0, 80 +/* 0D2260 800D1660 10000001 */ b .L800D1668 +/* 0D2264 800D1664 00000000 */ nop +.L800D1668: +glabel L800D1668 +/* 0D2268 800D1668 3C0A800F */ lui $t2, %hi(__osRunQueue) # $t2, 0x800f +/* 0D226C 800D166C 8D4AB3A8 */ lw $t2, %lo(__osRunQueue)($t2) +/* 0D2270 800D1670 8F490004 */ lw $t1, 4($k0) +/* 0D2274 800D1674 8D4B0004 */ lw $t3, 4($t2) +/* 0D2278 800D1678 012B082A */ slt $at, $t1, $t3 +/* 0D227C 800D167C 10200007 */ beqz $at, .L800D169C +/* 0D2280 800D1680 00000000 */ nop +/* 0D2284 800D1684 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f +/* 0D2288 800D1688 03402825 */ move $a1, $k0 +/* 0D228C 800D168C 0C034633 */ jal __osEnqueueThread +/* 0D2290 800D1690 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58 +/* 0D2294 800D1694 08034649 */ j __osDispatchThread +/* 0D2298 800D1698 00000000 */ nop + +.L800D169C: +/* 0D229C 800D169C 3C09800F */ lui $t1, %hi(__osRunQueue) # $t1, 0x800f +/* 0D22A0 800D16A0 2529B3A8 */ addiu $t1, %lo(__osRunQueue) # addiu $t1, $t1, -0x4c58 +/* 0D22A4 800D16A4 8D2A0000 */ lw $t2, ($t1) +/* 0D22A8 800D16A8 AF4A0000 */ sw $t2, ($k0) +/* 0D22AC 800D16AC 08034649 */ j __osDispatchThread +/* 0D22B0 800D16B0 AD3A0000 */ sw $k0, ($t1) + +.L800D16B4: +/* 0D22B4 800D16B4 3C01800F */ lui $at, %hi(D_800EB3B4) # $at, 0x800f +/* 0D22B8 800D16B8 AC3AB3B4 */ sw $k0, %lo(D_800EB3B4)($at) +/* 0D22BC 800D16BC 24090001 */ li $t1, 1 +/* 0D22C0 800D16C0 A7490010 */ sh $t1, 0x10($k0) +/* 0D22C4 800D16C4 24090002 */ li $t1, 2 +/* 0D22C8 800D16C8 A7490012 */ sh $t1, 0x12($k0) +/* 0D22CC 800D16CC 400A4000 */ mfc0 $t2, $8 +/* 0D22D0 800D16D0 AF4A0124 */ sw $t2, 0x124($k0) +/* 0D22D4 800D16D4 0C0345B9 */ jal func_800D16E4 +/* 0D22D8 800D16D8 24040060 */ li $a0, 96 +/* 0D22DC 800D16DC 08034649 */ j __osDispatchThread +/* 0D22E0 800D16E0 00000000 */ nop + +glabel func_800D16E4 +/* 0D22E4 800D16E4 3C0A8019 */ lui $t2, %hi(__osEventStateTab) # $t2, 0x8019 +/* 0D22E8 800D16E8 254A6440 */ addiu $t2, %lo(__osEventStateTab) # addiu $t2, $t2, 0x6440 +/* 0D22EC 800D16EC 01445021 */ addu $t2, $t2, $a0 +/* 0D22F0 800D16F0 8D490000 */ lw $t1, ($t2) +/* 0D22F4 800D16F4 03E09025 */ move $s2, $ra +/* 0D22F8 800D16F8 11200025 */ beqz $t1, .L800D1790 +/* 0D22FC 800D16FC 00000000 */ nop +/* 0D2300 800D1700 8D2B0008 */ lw $t3, 8($t1) +/* 0D2304 800D1704 8D2C0010 */ lw $t4, 0x10($t1) +/* 0D2308 800D1708 016C082A */ slt $at, $t3, $t4 +/* 0D230C 800D170C 10200020 */ beqz $at, .L800D1790 +/* 0D2310 800D1710 00000000 */ nop +/* 0D2314 800D1714 8D2D000C */ lw $t5, 0xc($t1) +/* 0D2318 800D1718 01AB6821 */ addu $t5, $t5, $t3 +/* 0D231C 800D171C 01AC001A */ div $zero, $t5, $t4 +/* 0D2320 800D1720 15800002 */ bnez $t4, .L800D172C +/* 0D2324 800D1724 00000000 */ nop +/* 0D2328 800D1728 0007000D */ break 7 +.L800D172C: +/* 0D232C 800D172C 2401FFFF */ li $at, -1 +/* 0D2330 800D1730 15810004 */ bne $t4, $at, .L800D1744 +/* 0D2334 800D1734 3C018000 */ lui $at, 0x8000 +/* 0D2338 800D1738 15A10002 */ bne $t5, $at, .L800D1744 +/* 0D233C 800D173C 00000000 */ nop +/* 0D2340 800D1740 0006000D */ break 6 +.L800D1744: +/* 0D2344 800D1744 8D2C0014 */ lw $t4, 0x14($t1) +/* 0D2348 800D1748 00006810 */ mfhi $t5 +/* 0D234C 800D174C 000D6880 */ sll $t5, $t5, 2 +/* 0D2350 800D1750 018D6021 */ addu $t4, $t4, $t5 +/* 0D2354 800D1754 8D4D0004 */ lw $t5, 4($t2) +/* 0D2358 800D1758 256A0001 */ addiu $t2, $t3, 1 +/* 0D235C 800D175C AD8D0000 */ sw $t5, ($t4) +/* 0D2360 800D1760 AD2A0008 */ sw $t2, 8($t1) +/* 0D2364 800D1764 8D2A0000 */ lw $t2, ($t1) +/* 0D2368 800D1768 8D4B0000 */ lw $t3, ($t2) +/* 0D236C 800D176C 11600008 */ beqz $t3, .L800D1790 +/* 0D2370 800D1770 00000000 */ nop +/* 0D2374 800D1774 0C034645 */ jal __osPopThread +/* 0D2378 800D1778 01202025 */ move $a0, $t1 +/* 0D237C 800D177C 00405025 */ move $t2, $v0 +/* 0D2380 800D1780 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f +/* 0D2384 800D1784 01402825 */ move $a1, $t2 +/* 0D2388 800D1788 0C034633 */ jal __osEnqueueThread +/* 0D238C 800D178C 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58 +.L800D1790: +/* 0D2390 800D1790 02400008 */ jr $s2 +/* 0D2394 800D1794 00000000 */ nop +.L800D1798: +/* 0D2398 800D1798 3C013000 */ lui $at, 0x3000 +/* 0D239C 800D179C 01014824 */ and $t1, $t0, $at +/* 0D23A0 800D17A0 00094F02 */ srl $t1, $t1, 0x1c +/* 0D23A4 800D17A4 240A0001 */ li $t2, 1 +/* 0D23A8 800D17A8 152AFFC2 */ bne $t1, $t2, .L800D16B4 +/* 0D23AC 800D17AC 00000000 */ nop +/* 0D23B0 800D17B0 8F5B0118 */ lw $k1, 0x118($k0) +/* 0D23B4 800D17B4 3C012000 */ lui $at, 0x2000 +/* 0D23B8 800D17B8 24090001 */ li $t1, 1 +/* 0D23BC 800D17BC 0361D825 */ or $k1, $k1, $at +/* 0D23C0 800D17C0 AF490018 */ sw $t1, 0x18($k0) +/* 0D23C4 800D17C4 1000FFB5 */ b .L800D169C +/* 0D23C8 800D17C8 AF5B0118 */ sw $k1, 0x118($k0) +glabel __osEnqueueAndYield +/* 0D23CC 800D17CC 3C05800F */ lui $a1, %hi(__osRunningThread) # $a1, 0x800f +/* 0D23D0 800D17D0 8CA5B3B0 */ lw $a1, %lo(__osRunningThread)($a1) +/* 0D23D4 800D17D4 40086000 */ mfc0 $t0, $12 +/* 0D23D8 800D17D8 8CBB0018 */ lw $k1, 0x18($a1) +/* 0D23DC 800D17DC 35080002 */ ori $t0, $t0, 2 +/* 0D23E0 800D17E0 ACA80118 */ sw $t0, 0x118($a1) +/* 0D23E4 800D17E4 FCB00098 */ sd $s0, 0x98($a1) +/* 0D23E8 800D17E8 FCB100A0 */ sd $s1, 0xa0($a1) +/* 0D23EC 800D17EC FCB200A8 */ sd $s2, 0xa8($a1) +/* 0D23F0 800D17F0 FCB300B0 */ sd $s3, 0xb0($a1) +/* 0D23F4 800D17F4 FCB400B8 */ sd $s4, 0xb8($a1) +/* 0D23F8 800D17F8 FCB500C0 */ sd $s5, 0xc0($a1) +/* 0D23FC 800D17FC FCB600C8 */ sd $s6, 0xc8($a1) +/* 0D2400 800D1800 FCB700D0 */ sd $s7, 0xd0($a1) +/* 0D2404 800D1804 FCBC00E8 */ sd $gp, 0xe8($a1) +/* 0D2408 800D1808 FCBD00F0 */ sd $sp, 0xf0($a1) +/* 0D240C 800D180C FCBE00F8 */ sd $fp, 0xf8($a1) +/* 0D2410 800D1810 FCBF0100 */ sd $ra, 0x100($a1) +/* 0D2414 800D1814 13600009 */ beqz $k1, .L800D183C +/* 0D2418 800D1818 ACBF011C */ sw $ra, 0x11c($a1) +/* 0D241C 800D181C 445BF800 */ cfc1 $k1, $31 +/* 0D2420 800D1820 F4B40180 */ sdc1 $f20, 0x180($a1) +/* 0D2424 800D1824 F4B60188 */ sdc1 $f22, 0x188($a1) +/* 0D2428 800D1828 F4B80190 */ sdc1 $f24, 0x190($a1) +/* 0D242C 800D182C F4BA0198 */ sdc1 $f26, 0x198($a1) +/* 0D2430 800D1830 F4BC01A0 */ sdc1 $f28, 0x1a0($a1) +/* 0D2434 800D1834 F4BE01A8 */ sdc1 $f30, 0x1a8($a1) +/* 0D2438 800D1838 ACBB012C */ sw $k1, 0x12c($a1) +.L800D183C: +/* 0D243C 800D183C 8CBB0118 */ lw $k1, 0x118($a1) +/* 0D2440 800D1840 3369FF00 */ andi $t1, $k1, 0xff00 +/* 0D2444 800D1844 1120000D */ beqz $t1, .L800D187C +/* 0D2448 800D1848 00000000 */ nop +/* 0D244C 800D184C 3C08800F */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800f +/* 0D2450 800D1850 2508A5EC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5a14 +/* 0D2454 800D1854 8D080000 */ lw $t0, ($t0) +/* 0D2458 800D1858 2401FFFF */ li $at, -1 +/* 0D245C 800D185C 01014026 */ xor $t0, $t0, $at +/* 0D2460 800D1860 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff +/* 0D2464 800D1864 3108FF00 */ andi $t0, $t0, 0xff00 +/* 0D2468 800D1868 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff +/* 0D246C 800D186C 01284825 */ or $t1, $t1, $t0 +/* 0D2470 800D1870 0361D824 */ and $k1, $k1, $at +/* 0D2474 800D1874 0369D825 */ or $k1, $k1, $t1 +/* 0D2478 800D1878 ACBB0118 */ sw $k1, 0x118($a1) +.L800D187C: +/* 0D247C 800D187C 3C1BA430 */ lui $k1, %hi(D_A430000C) # $k1, 0xa430 +/* 0D2480 800D1880 8F7B000C */ lw $k1, %lo(D_A430000C)($k1) +/* 0D2484 800D1884 1360000B */ beqz $k1, .L800D18B4 +/* 0D2488 800D1888 00000000 */ nop +/* 0D248C 800D188C 3C1A800F */ lui $k0, %hi(__OSGlobalIntMask) # $k0, 0x800f +/* 0D2490 800D1890 275AA5EC */ addiu $k0, %lo(__OSGlobalIntMask) # addiu $k0, $k0, -0x5a14 +/* 0D2494 800D1894 8F5A0000 */ lw $k0, ($k0) +/* 0D2498 800D1898 8CA80128 */ lw $t0, 0x128($a1) +/* 0D249C 800D189C 2401FFFF */ li $at, -1 +/* 0D24A0 800D18A0 001AD402 */ srl $k0, $k0, 0x10 +/* 0D24A4 800D18A4 0341D026 */ xor $k0, $k0, $at +/* 0D24A8 800D18A8 335A003F */ andi $k0, $k0, 0x3f +/* 0D24AC 800D18AC 0348D024 */ and $k0, $k0, $t0 +/* 0D24B0 800D18B0 037AD825 */ or $k1, $k1, $k0 +.L800D18B4: +/* 0D24B4 800D18B4 10800003 */ beqz $a0, .L800D18C4 +/* 0D24B8 800D18B8 ACBB0128 */ sw $k1, 0x128($a1) +/* 0D24BC 800D18BC 0C034633 */ jal __osEnqueueThread +/* 0D24C0 800D18C0 00000000 */ nop +.L800D18C4: +/* 0D24C4 800D18C4 08034649 */ j __osDispatchThread +/* 0D24C8 800D18C8 00000000 */ nop + +glabel __osEnqueueThread +/* 0D24CC 800D18CC 8C980000 */ lw $t8, ($a0) +/* 0D24D0 800D18D0 8CAF0004 */ lw $t7, 4($a1) +/* 0D24D4 800D18D4 0080C825 */ move $t9, $a0 +/* 0D24D8 800D18D8 8F0E0004 */ lw $t6, 4($t8) +/* 0D24DC 800D18DC 01CF082A */ slt $at, $t6, $t7 +/* 0D24E0 800D18E0 14200007 */ bnez $at, .L800D1900 +/* 0D24E4 800D18E4 00000000 */ nop +.L800D18E8: +/* 0D24E8 800D18E8 0300C825 */ move $t9, $t8 +/* 0D24EC 800D18EC 8F180000 */ lw $t8, ($t8) +/* 0D24F0 800D18F0 8F0E0004 */ lw $t6, 4($t8) +/* 0D24F4 800D18F4 01CF082A */ slt $at, $t6, $t7 +/* 0D24F8 800D18F8 1020FFFB */ beqz $at, .L800D18E8 +/* 0D24FC 800D18FC 00000000 */ nop +.L800D1900: +/* 0D2500 800D1900 8F380000 */ lw $t8, ($t9) +/* 0D2504 800D1904 ACB80000 */ sw $t8, ($a1) +/* 0D2508 800D1908 AF250000 */ sw $a1, ($t9) +/* 0D250C 800D190C 03E00008 */ jr $ra +/* 0D2510 800D1910 ACA40008 */ sw $a0, 8($a1) + +glabel __osPopThread +/* 0D2514 800D1914 8C820000 */ lw $v0, ($a0) +/* 0D2518 800D1918 8C590000 */ lw $t9, ($v0) +/* 0D251C 800D191C 03E00008 */ jr $ra +/* 0D2520 800D1920 AC990000 */ sw $t9, ($a0) + +glabel __osDispatchThread +/* 0D2524 800D1924 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f +/* 0D2528 800D1928 0C034645 */ jal __osPopThread +/* 0D252C 800D192C 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58 +/* 0D2530 800D1930 3C01800F */ lui $at, %hi(__osRunningThread) # $at, 0x800f +/* 0D2534 800D1934 AC22B3B0 */ sw $v0, %lo(__osRunningThread)($at) +/* 0D2538 800D1938 24080004 */ li $t0, 4 +/* 0D253C 800D193C A4480010 */ sh $t0, 0x10($v0) +/* 0D2540 800D1940 0040D025 */ move $k0, $v0 +/* 0D2544 800D1944 3C08800F */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800f +/* 0D2548 800D1948 8F5B0118 */ lw $k1, 0x118($k0) +/* 0D254C 800D194C 2508A5EC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5a14 +/* 0D2550 800D1950 8D080000 */ lw $t0, ($t0) +/* 0D2554 800D1954 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff +/* 0D2558 800D1958 3369FF00 */ andi $t1, $k1, 0xff00 +/* 0D255C 800D195C 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff +/* 0D2560 800D1960 3108FF00 */ andi $t0, $t0, 0xff00 +/* 0D2564 800D1964 01284824 */ and $t1, $t1, $t0 +/* 0D2568 800D1968 0361D824 */ and $k1, $k1, $at +/* 0D256C 800D196C 0369D825 */ or $k1, $k1, $t1 +/* 0D2570 800D1970 409B6000 */ mtc0 $k1, $12 +/* 0D2574 800D1974 DF5B0108 */ ld $k1, 0x108($k0) +/* 0D2578 800D1978 DF410020 */ ld $at, 0x20($k0) +/* 0D257C 800D197C DF420028 */ ld $v0, 0x28($k0) +/* 0D2580 800D1980 03600013 */ mtlo $k1 +/* 0D2584 800D1984 DF5B0110 */ ld $k1, 0x110($k0) +/* 0D2588 800D1988 DF430030 */ ld $v1, 0x30($k0) +/* 0D258C 800D198C DF440038 */ ld $a0, 0x38($k0) +/* 0D2590 800D1990 DF450040 */ ld $a1, 0x40($k0) +/* 0D2594 800D1994 DF460048 */ ld $a2, 0x48($k0) +/* 0D2598 800D1998 DF470050 */ ld $a3, 0x50($k0) +/* 0D259C 800D199C DF480058 */ ld $t0, 0x58($k0) +/* 0D25A0 800D19A0 DF490060 */ ld $t1, 0x60($k0) +/* 0D25A4 800D19A4 DF4A0068 */ ld $t2, 0x68($k0) +/* 0D25A8 800D19A8 DF4B0070 */ ld $t3, 0x70($k0) +/* 0D25AC 800D19AC DF4C0078 */ ld $t4, 0x78($k0) +/* 0D25B0 800D19B0 DF4D0080 */ ld $t5, 0x80($k0) +/* 0D25B4 800D19B4 DF4E0088 */ ld $t6, 0x88($k0) +/* 0D25B8 800D19B8 DF4F0090 */ ld $t7, 0x90($k0) +/* 0D25BC 800D19BC DF500098 */ ld $s0, 0x98($k0) +/* 0D25C0 800D19C0 DF5100A0 */ ld $s1, 0xa0($k0) +/* 0D25C4 800D19C4 DF5200A8 */ ld $s2, 0xa8($k0) +/* 0D25C8 800D19C8 DF5300B0 */ ld $s3, 0xb0($k0) +/* 0D25CC 800D19CC DF5400B8 */ ld $s4, 0xb8($k0) +/* 0D25D0 800D19D0 DF5500C0 */ ld $s5, 0xc0($k0) +/* 0D25D4 800D19D4 DF5600C8 */ ld $s6, 0xc8($k0) +/* 0D25D8 800D19D8 DF5700D0 */ ld $s7, 0xd0($k0) +/* 0D25DC 800D19DC DF5800D8 */ ld $t8, 0xd8($k0) +/* 0D25E0 800D19E0 DF5900E0 */ ld $t9, 0xe0($k0) +/* 0D25E4 800D19E4 DF5C00E8 */ ld $gp, 0xe8($k0) +/* 0D25E8 800D19E8 03600011 */ mthi $k1 +/* 0D25EC 800D19EC DF5D00F0 */ ld $sp, 0xf0($k0) +/* 0D25F0 800D19F0 DF5E00F8 */ ld $fp, 0xf8($k0) +/* 0D25F4 800D19F4 DF5F0100 */ ld $ra, 0x100($k0) +/* 0D25F8 800D19F8 8F5B011C */ lw $k1, 0x11c($k0) +/* 0D25FC 800D19FC 409B7000 */ mtc0 $k1, $14 +/* 0D2600 800D1A00 8F5B0018 */ lw $k1, 0x18($k0) +/* 0D2604 800D1A04 13600013 */ beqz $k1, .L800D1A54 +/* 0D2608 800D1A08 00000000 */ nop +/* 0D260C 800D1A0C 8F5B012C */ lw $k1, 0x12c($k0) +/* 0D2610 800D1A10 44DBF800 */ ctc1 $k1, $31 +/* 0D2614 800D1A14 D7400130 */ ldc1 $f0, 0x130($k0) +/* 0D2618 800D1A18 D7420138 */ ldc1 $f2, 0x138($k0) +/* 0D261C 800D1A1C D7440140 */ ldc1 $f4, 0x140($k0) +/* 0D2620 800D1A20 D7460148 */ ldc1 $f6, 0x148($k0) +/* 0D2624 800D1A24 D7480150 */ ldc1 $f8, 0x150($k0) +/* 0D2628 800D1A28 D74A0158 */ ldc1 $f10, 0x158($k0) +/* 0D262C 800D1A2C D74C0160 */ ldc1 $f12, 0x160($k0) +/* 0D2630 800D1A30 D74E0168 */ ldc1 $f14, 0x168($k0) +/* 0D2634 800D1A34 D7500170 */ ldc1 $f16, 0x170($k0) +/* 0D2638 800D1A38 D7520178 */ ldc1 $f18, 0x178($k0) +/* 0D263C 800D1A3C D7540180 */ ldc1 $f20, 0x180($k0) +/* 0D2640 800D1A40 D7560188 */ ldc1 $f22, 0x188($k0) +/* 0D2644 800D1A44 D7580190 */ ldc1 $f24, 0x190($k0) +/* 0D2648 800D1A48 D75A0198 */ ldc1 $f26, 0x198($k0) +/* 0D264C 800D1A4C D75C01A0 */ ldc1 $f28, 0x1a0($k0) +/* 0D2650 800D1A50 D75E01A8 */ ldc1 $f30, 0x1a8($k0) +.L800D1A54: +/* 0D2654 800D1A54 8F5B0128 */ lw $k1, 0x128($k0) +/* 0D2658 800D1A58 3C1A800F */ lui $k0, %hi(__OSGlobalIntMask) # $k0, 0x800f +/* 0D265C 800D1A5C 275AA5EC */ addiu $k0, %lo(__OSGlobalIntMask) # addiu $k0, $k0, -0x5a14 +/* 0D2660 800D1A60 8F5A0000 */ lw $k0, ($k0) +/* 0D2664 800D1A64 001AD402 */ srl $k0, $k0, 0x10 +/* 0D2668 800D1A68 037AD824 */ and $k1, $k1, $k0 +/* 0D266C 800D1A6C 001BD840 */ sll $k1, $k1, 1 +/* 0D2670 800D1A70 3C1A800F */ lui $k0, %hi(D_800F3C10) # $k0, 0x800f +/* 0D2674 800D1A74 275A3C10 */ addiu $k0, %lo(D_800F3C10) # addiu $k0, $k0, 0x3c10 +/* 0D2678 800D1A78 037AD821 */ addu $k1, $k1, $k0 +/* 0D267C 800D1A7C 977B0000 */ lhu $k1, ($k1) +/* 0D2680 800D1A80 3C1AA430 */ lui $k0, %hi(D_A430000C) # $k0, 0xa430 +/* 0D2684 800D1A84 275A000C */ addiu $k0, %lo(D_A430000C) # addiu $k0, $k0, 0xc +/* 0D2688 800D1A88 AF5B0000 */ sw $k1, ($k0) +/* 0D268C 800D1A8C 00000000 */ nop +/* 0D2690 800D1A90 00000000 */ nop +/* 0D2694 800D1A94 00000000 */ nop +/* 0D2698 800D1A98 00000000 */ nop +/* 0D269C 800D1A9C 42000018 */ eret +glabel __osCleanupThread +/* 0D26A0 800D1AA0 0C035E9C */ jal osDestroyThread +/* 0D26A4 800D1AA4 00002025 */ move $a0, $zero +/* 0D26A8 800D1AA8 00000000 */ nop +/* 0D26AC 800D1AAC 00000000 */ nop diff --git a/asm/os/__osGetSR.s b/asm/os/__osGetSR.s new file mode 100644 index 000000000..e2f74c76b --- /dev/null +++ b/asm/os/__osGetSR.s @@ -0,0 +1,15 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osGetSR + mfc0 $v0, $12 + jr $ra + nop + + nop + diff --git a/asm/os/__osLeoInterrupt.s b/asm/os/__osLeoInterrupt.s new file mode 100644 index 000000000..fd43eeb5c --- /dev/null +++ b/asm/os/__osLeoInterrupt.s @@ -0,0 +1,602 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel __osLeoInterrupt +/* 0D2990 800D1D90 3C0E800F */ lui $t6, %hi(D_800EA5F0) # $t6, 0x800f +/* 0D2994 800D1D94 8DCEA5F0 */ lw $t6, %lo(D_800EA5F0)($t6) +/* 0D2998 800D1D98 27BDFFC0 */ addiu $sp, $sp, -0x40 +/* 0D299C 800D1D9C AFBF001C */ sw $ra, 0x1c($sp) +/* 0D29A0 800D1DA0 15C00003 */ bnez $t6, .L800D1DB0 +/* 0D29A4 800D1DA4 00000000 */ nop +/* 0D29A8 800D1DA8 1000019D */ b .L800D2420 +/* 0D29AC 800D1DAC 00001025 */ move $v0, $zero +.L800D1DB0: +/* 0D29B0 800D1DB0 3C0F8019 */ lui $t7, %hi(__osDiskHandle) # $t7, 0x8019 +/* 0D29B4 800D1DB4 8DEF78C0 */ lw $t7, %lo(__osDiskHandle)($t7) +/* 0D29B8 800D1DB8 3C0BA460 */ lui $t3, %hi(D_A4600010) # $t3, 0xa460 +/* 0D29BC 800D1DBC 25F80014 */ addiu $t8, $t7, 0x14 +/* 0D29C0 800D1DC0 AFB80030 */ sw $t8, 0x30($sp) +/* 0D29C4 800D1DC4 95F9001A */ lhu $t9, 0x1a($t7) +/* 0D29C8 800D1DC8 00194140 */ sll $t0, $t9, 5 +/* 0D29CC 800D1DCC 03084821 */ addu $t1, $t8, $t0 +/* 0D29D0 800D1DD0 252A001C */ addiu $t2, $t1, 0x1c +/* 0D29D4 800D1DD4 AFAA002C */ sw $t2, 0x2c($sp) +/* 0D29D8 800D1DD8 8D6C0010 */ lw $t4, %lo(D_A4600010)($t3) +/* 0D29DC 800D1DDC AFAC0038 */ sw $t4, 0x38($sp) +/* 0D29E0 800D1DE0 8FAD0038 */ lw $t5, 0x38($sp) +/* 0D29E4 800D1DE4 31AE0001 */ andi $t6, $t5, 1 +/* 0D29E8 800D1DE8 11C00034 */ beqz $t6, .L800D1EBC +/* 0D29EC 800D1DEC 00000000 */ nop +/* 0D29F0 800D1DF0 240F0003 */ li $t7, 3 +/* 0D29F4 800D1DF4 3C19A460 */ lui $t9, %hi(D_A4600010) # $t9, 0xa460 +/* 0D29F8 800D1DF8 AF2F0010 */ sw $t7, %lo(D_A4600010)($t9) +/* 0D29FC 800D1DFC 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 +/* 0D2A00 800D1E00 8F080010 */ lw $t0, %lo(D_A4600010)($t8) +/* 0D2A04 800D1E04 AFA80038 */ sw $t0, 0x38($sp) +/* 0D2A08 800D1E08 8FA90038 */ lw $t1, 0x38($sp) +/* 0D2A0C 800D1E0C 312A0002 */ andi $t2, $t1, 2 +/* 0D2A10 800D1E10 11400008 */ beqz $t2, .L800D1E34 +/* 0D2A14 800D1E14 00000000 */ nop +.L800D1E18: +/* 0D2A18 800D1E18 3C0BA460 */ lui $t3, %hi(D_A4600010) # $t3, 0xa460 +/* 0D2A1C 800D1E1C 8D6C0010 */ lw $t4, %lo(D_A4600010)($t3) +/* 0D2A20 800D1E20 AFAC0038 */ sw $t4, 0x38($sp) +/* 0D2A24 800D1E24 8FAD0038 */ lw $t5, 0x38($sp) +/* 0D2A28 800D1E28 31AE0002 */ andi $t6, $t5, 2 +/* 0D2A2C 800D1E2C 15C0FFFA */ bnez $t6, .L800D1E18 +/* 0D2A30 800D1E30 00000000 */ nop +.L800D1E34: +/* 0D2A34 800D1E34 3C0FA500 */ lui $t7, %hi(D_A5000508) # $t7, 0xa500 +/* 0D2A38 800D1E38 8DF90508 */ lw $t9, %lo(D_A5000508)($t7) +/* 0D2A3C 800D1E3C 3C010200 */ lui $at, 0x200 +/* 0D2A40 800D1E40 AFB9003C */ sw $t9, 0x3c($sp) +/* 0D2A44 800D1E44 8FB8003C */ lw $t8, 0x3c($sp) +/* 0D2A48 800D1E48 03014024 */ and $t0, $t8, $at +/* 0D2A4C 800D1E4C 11000015 */ beqz $t0, .L800D1EA4 +/* 0D2A50 800D1E50 00000000 */ nop +/* 0D2A54 800D1E54 3C09A460 */ lui $t1, %hi(D_A4600010) # $t1, 0xa460 +/* 0D2A58 800D1E58 8D2A0010 */ lw $t2, %lo(D_A4600010)($t1) +/* 0D2A5C 800D1E5C AFAA0038 */ sw $t2, 0x38($sp) +/* 0D2A60 800D1E60 8FAB0038 */ lw $t3, 0x38($sp) +/* 0D2A64 800D1E64 316C0002 */ andi $t4, $t3, 2 +/* 0D2A68 800D1E68 11800008 */ beqz $t4, .L800D1E8C +/* 0D2A6C 800D1E6C 00000000 */ nop +.L800D1E70: +/* 0D2A70 800D1E70 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 +/* 0D2A74 800D1E74 8DAE0010 */ lw $t6, %lo(D_A4600010)($t5) +/* 0D2A78 800D1E78 AFAE0038 */ sw $t6, 0x38($sp) +/* 0D2A7C 800D1E7C 8FAF0038 */ lw $t7, 0x38($sp) +/* 0D2A80 800D1E80 31F90002 */ andi $t9, $t7, 2 +/* 0D2A84 800D1E84 1720FFFA */ bnez $t9, .L800D1E70 +/* 0D2A88 800D1E88 00000000 */ nop +.L800D1E8C: +/* 0D2A8C 800D1E8C 8FB80030 */ lw $t8, 0x30($sp) +/* 0D2A90 800D1E90 3C010100 */ lui $at, 0x100 +/* 0D2A94 800D1E94 3C0AA500 */ lui $t2, %hi(D_A5000510) # $t2, 0xa500 +/* 0D2A98 800D1E98 8F080014 */ lw $t0, 0x14($t8) +/* 0D2A9C 800D1E9C 01014825 */ or $t1, $t0, $at +/* 0D2AA0 800D1EA0 AD490510 */ sw $t1, %lo(D_A5000510)($t2) +.L800D1EA4: +/* 0D2AA4 800D1EA4 8FAC0030 */ lw $t4, 0x30($sp) +/* 0D2AA8 800D1EA8 240B004B */ li $t3, 75 +/* 0D2AAC 800D1EAC 0C03490C */ jal __osLeoAbnormalResume +/* 0D2AB0 800D1EB0 AD8B0010 */ sw $t3, 0x10($t4) +/* 0D2AB4 800D1EB4 1000015A */ b .L800D2420 +/* 0D2AB8 800D1EB8 24020001 */ li $v0, 1 +.L800D1EBC: +/* 0D2ABC 800D1EBC 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 +/* 0D2AC0 800D1EC0 8DAE0010 */ lw $t6, %lo(D_A4600010)($t5) +/* 0D2AC4 800D1EC4 AFAE0038 */ sw $t6, 0x38($sp) +/* 0D2AC8 800D1EC8 8FAF0038 */ lw $t7, 0x38($sp) +/* 0D2ACC 800D1ECC 31F90002 */ andi $t9, $t7, 2 +/* 0D2AD0 800D1ED0 13200008 */ beqz $t9, .L800D1EF4 +/* 0D2AD4 800D1ED4 00000000 */ nop +.L800D1ED8: +/* 0D2AD8 800D1ED8 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 +/* 0D2ADC 800D1EDC 8F080010 */ lw $t0, %lo(D_A4600010)($t8) +/* 0D2AE0 800D1EE0 AFA80038 */ sw $t0, 0x38($sp) +/* 0D2AE4 800D1EE4 8FA90038 */ lw $t1, 0x38($sp) +/* 0D2AE8 800D1EE8 312A0002 */ andi $t2, $t1, 2 +/* 0D2AEC 800D1EEC 1540FFFA */ bnez $t2, .L800D1ED8 +/* 0D2AF0 800D1EF0 00000000 */ nop +.L800D1EF4: +/* 0D2AF4 800D1EF4 3C0BA500 */ lui $t3, %hi(D_A5000508) # $t3, 0xa500 +/* 0D2AF8 800D1EF8 8D6C0508 */ lw $t4, %lo(D_A5000508)($t3) +/* 0D2AFC 800D1EFC 3C010200 */ lui $at, 0x200 +/* 0D2B00 800D1F00 AFAC003C */ sw $t4, 0x3c($sp) +/* 0D2B04 800D1F04 8FAD003C */ lw $t5, 0x3c($sp) +/* 0D2B08 800D1F08 01A17024 */ and $t6, $t5, $at +/* 0D2B0C 800D1F0C 11C00019 */ beqz $t6, .L800D1F74 +/* 0D2B10 800D1F10 00000000 */ nop +/* 0D2B14 800D1F14 3C0FA460 */ lui $t7, %hi(D_A4600010) # $t7, 0xa460 +/* 0D2B18 800D1F18 8DF90010 */ lw $t9, %lo(D_A4600010)($t7) +/* 0D2B1C 800D1F1C AFB90038 */ sw $t9, 0x38($sp) +/* 0D2B20 800D1F20 8FB80038 */ lw $t8, 0x38($sp) +/* 0D2B24 800D1F24 33080002 */ andi $t0, $t8, 2 +/* 0D2B28 800D1F28 11000008 */ beqz $t0, .L800D1F4C +/* 0D2B2C 800D1F2C 00000000 */ nop +.L800D1F30: +/* 0D2B30 800D1F30 3C09A460 */ lui $t1, %hi(D_A4600010) # $t1, 0xa460 +/* 0D2B34 800D1F34 8D2A0010 */ lw $t2, %lo(D_A4600010)($t1) +/* 0D2B38 800D1F38 AFAA0038 */ sw $t2, 0x38($sp) +/* 0D2B3C 800D1F3C 8FAB0038 */ lw $t3, 0x38($sp) +/* 0D2B40 800D1F40 316C0002 */ andi $t4, $t3, 2 +/* 0D2B44 800D1F44 1580FFFA */ bnez $t4, .L800D1F30 +/* 0D2B48 800D1F48 00000000 */ nop +.L800D1F4C: +/* 0D2B4C 800D1F4C 8FAD0030 */ lw $t5, 0x30($sp) +/* 0D2B50 800D1F50 3C010100 */ lui $at, 0x100 +/* 0D2B54 800D1F54 3C19A500 */ lui $t9, %hi(D_A5000510) # $t9, 0xa500 +/* 0D2B58 800D1F58 8DAE0014 */ lw $t6, 0x14($t5) +/* 0D2B5C 800D1F5C 00001025 */ move $v0, $zero +/* 0D2B60 800D1F60 01C17825 */ or $t7, $t6, $at +/* 0D2B64 800D1F64 AF2F0510 */ sw $t7, %lo(D_A5000510)($t9) +/* 0D2B68 800D1F68 8FB80030 */ lw $t8, 0x30($sp) +/* 0D2B6C 800D1F6C 1000012C */ b .L800D2420 +/* 0D2B70 800D1F70 AF000010 */ sw $zero, 0x10($t8) +.L800D1F74: +/* 0D2B74 800D1F74 8FA8003C */ lw $t0, 0x3c($sp) +/* 0D2B78 800D1F78 3C010800 */ lui $at, 0x800 +/* 0D2B7C 800D1F7C 01014824 */ and $t1, $t0, $at +/* 0D2B80 800D1F80 11200007 */ beqz $t1, .L800D1FA0 +/* 0D2B84 800D1F84 00000000 */ nop +/* 0D2B88 800D1F88 8FAB0030 */ lw $t3, 0x30($sp) +/* 0D2B8C 800D1F8C 240A0003 */ li $t2, 3 +/* 0D2B90 800D1F90 0C03490C */ jal __osLeoAbnormalResume +/* 0D2B94 800D1F94 AD6A0010 */ sw $t2, 0x10($t3) +/* 0D2B98 800D1F98 10000121 */ b .L800D2420 +/* 0D2B9C 800D1F9C 24020001 */ li $v0, 1 +.L800D1FA0: +/* 0D2BA0 800D1FA0 8FAC0030 */ lw $t4, 0x30($sp) +/* 0D2BA4 800D1FA4 24010001 */ li $at, 1 +/* 0D2BA8 800D1FA8 8D8D0000 */ lw $t5, ($t4) +/* 0D2BAC 800D1FAC 15A1003A */ bne $t5, $at, .L800D2098 +/* 0D2BB0 800D1FB0 00000000 */ nop +/* 0D2BB4 800D1FB4 8FAE003C */ lw $t6, 0x3c($sp) +/* 0D2BB8 800D1FB8 3C014000 */ lui $at, 0x4000 +/* 0D2BBC 800D1FBC 01C17824 */ and $t7, $t6, $at +/* 0D2BC0 800D1FC0 15E00020 */ bnez $t7, .L800D2044 +/* 0D2BC4 800D1FC4 00000000 */ nop +/* 0D2BC8 800D1FC8 95880004 */ lhu $t0, 4($t4) +/* 0D2BCC 800D1FCC 8D990008 */ lw $t9, 8($t4) +/* 0D2BD0 800D1FD0 00084880 */ sll $t1, $t0, 2 +/* 0D2BD4 800D1FD4 01284821 */ addu $t1, $t1, $t0 +/* 0D2BD8 800D1FD8 00094880 */ sll $t1, $t1, 2 +/* 0D2BDC 800D1FDC 01284821 */ addu $t1, $t1, $t0 +/* 0D2BE0 800D1FE0 00094880 */ sll $t1, $t1, 2 +/* 0D2BE4 800D1FE4 01284821 */ addu $t1, $t1, $t0 +/* 0D2BE8 800D1FE8 27380001 */ addiu $t8, $t9, 1 +/* 0D2BEC 800D1FEC 13090006 */ beq $t8, $t1, .L800D2008 +/* 0D2BF0 800D1FF0 00000000 */ nop +/* 0D2BF4 800D1FF4 240A0006 */ li $t2, 6 +/* 0D2BF8 800D1FF8 0C03490C */ jal __osLeoAbnormalResume +/* 0D2BFC 800D1FFC AD8A0010 */ sw $t2, 0x10($t4) +/* 0D2C00 800D2000 10000107 */ b .L800D2420 +/* 0D2C04 800D2004 24020001 */ li $v0, 1 +.L800D2008: +/* 0D2C08 800D2008 240B0002 */ li $t3, 2 +/* 0D2C0C 800D200C 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 +/* 0D2C10 800D2010 ADAB0010 */ sw $t3, %lo(D_A4600010)($t5) +/* 0D2C14 800D2014 3C0E800F */ lui $t6, %hi(__OSGlobalIntMask) # $t6, 0x800f +/* 0D2C18 800D2018 8DCEA5EC */ lw $t6, %lo(__OSGlobalIntMask)($t6) +/* 0D2C1C 800D201C 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 +/* 0D2C20 800D2020 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 +/* 0D2C24 800D2024 01C17825 */ or $t7, $t6, $at +/* 0D2C28 800D2028 8FB90030 */ lw $t9, 0x30($sp) +/* 0D2C2C 800D202C 3C01800F */ lui $at, %hi(__OSGlobalIntMask) # $at, 0x800f +/* 0D2C30 800D2030 AC2FA5EC */ sw $t7, %lo(__OSGlobalIntMask)($at) +/* 0D2C34 800D2034 0C034946 */ jal __osLeoResume +/* 0D2C38 800D2038 AF200010 */ sw $zero, 0x10($t9) +/* 0D2C3C 800D203C 100000F8 */ b .L800D2420 +/* 0D2C40 800D2040 24020001 */ li $v0, 1 +.L800D2044: +/* 0D2C44 800D2044 8FA8002C */ lw $t0, 0x2c($sp) +/* 0D2C48 800D2048 3C048019 */ lui $a0, %hi(__osDiskHandle) # $a0, 0x8019 +/* 0D2C4C 800D204C 3C060500 */ lui $a2, (0x05000400 >> 16) # lui $a2, 0x500 +/* 0D2C50 800D2050 8D180000 */ lw $t8, ($t0) +/* 0D2C54 800D2054 8D090008 */ lw $t1, 8($t0) +/* 0D2C58 800D2058 34C60400 */ ori $a2, (0x05000400 & 0xFFFF) # ori $a2, $a2, 0x400 +/* 0D2C5C 800D205C 24050001 */ li $a1, 1 +/* 0D2C60 800D2060 03095021 */ addu $t2, $t8, $t1 +/* 0D2C64 800D2064 AD0A0000 */ sw $t2, ($t0) +/* 0D2C68 800D2068 8FAC0030 */ lw $t4, 0x30($sp) +/* 0D2C6C 800D206C 8D8B0008 */ lw $t3, 8($t4) +/* 0D2C70 800D2070 256D0001 */ addiu $t5, $t3, 1 +/* 0D2C74 800D2074 AD8D0008 */ sw $t5, 8($t4) +/* 0D2C78 800D2078 8FAE002C */ lw $t6, 0x2c($sp) +/* 0D2C7C 800D207C 8C8478C0 */ lw $a0, %lo(__osDiskHandle)($a0) +/* 0D2C80 800D2080 8DCF0008 */ lw $t7, 8($t6) +/* 0D2C84 800D2084 8DC70000 */ lw $a3, ($t6) +/* 0D2C88 800D2088 0C034C24 */ jal osEPiRawStartDma +/* 0D2C8C 800D208C AFAF0010 */ sw $t7, 0x10($sp) +/* 0D2C90 800D2090 100000E3 */ b .L800D2420 +/* 0D2C94 800D2094 24020001 */ li $v0, 1 +.L800D2098: +/* 0D2C98 800D2098 8FB90030 */ lw $t9, 0x30($sp) +/* 0D2C9C 800D209C 8F380000 */ lw $t8, ($t9) +/* 0D2CA0 800D20A0 170000DA */ bnez $t8, .L800D240C +/* 0D2CA4 800D20A4 00000000 */ nop +/* 0D2CA8 800D20A8 97290004 */ lhu $t1, 4($t9) +/* 0D2CAC 800D20AC 24010003 */ li $at, 3 +/* 0D2CB0 800D20B0 15210017 */ bne $t1, $at, .L800D2110 +/* 0D2CB4 800D20B4 00000000 */ nop +/* 0D2CB8 800D20B8 8FA8002C */ lw $t0, 0x2c($sp) +/* 0D2CBC 800D20BC 8F2A0008 */ lw $t2, 8($t9) +/* 0D2CC0 800D20C0 8D0B000C */ lw $t3, 0xc($t0) +/* 0D2CC4 800D20C4 256D0011 */ addiu $t5, $t3, 0x11 +/* 0D2CC8 800D20C8 01AA082A */ slt $at, $t5, $t2 +/* 0D2CCC 800D20CC 10200005 */ beqz $at, .L800D20E4 +/* 0D2CD0 800D20D0 00000000 */ nop +/* 0D2CD4 800D20D4 0C03490C */ jal __osLeoAbnormalResume +/* 0D2CD8 800D20D8 AF200010 */ sw $zero, 0x10($t9) +/* 0D2CDC 800D20DC 100000D0 */ b .L800D2420 +/* 0D2CE0 800D20E0 24020001 */ li $v0, 1 +.L800D20E4: +/* 0D2CE4 800D20E4 8FAC003C */ lw $t4, 0x3c($sp) +/* 0D2CE8 800D20E8 3C014000 */ lui $at, 0x4000 +/* 0D2CEC 800D20EC 01817024 */ and $t6, $t4, $at +/* 0D2CF0 800D20F0 15C0000C */ bnez $t6, .L800D2124 +/* 0D2CF4 800D20F4 00000000 */ nop +/* 0D2CF8 800D20F8 8FB80030 */ lw $t8, 0x30($sp) +/* 0D2CFC 800D20FC 240F0011 */ li $t7, 17 +/* 0D2D00 800D2100 0C03490C */ jal __osLeoAbnormalResume +/* 0D2D04 800D2104 AF0F0010 */ sw $t7, 0x10($t8) +/* 0D2D08 800D2108 100000C5 */ b .L800D2420 +/* 0D2D0C 800D210C 24020001 */ li $v0, 1 +.L800D2110: +/* 0D2D10 800D2110 8FA9002C */ lw $t1, 0x2c($sp) +/* 0D2D14 800D2114 8D280000 */ lw $t0, ($t1) +/* 0D2D18 800D2118 8D2B0008 */ lw $t3, 8($t1) +/* 0D2D1C 800D211C 010B5021 */ addu $t2, $t0, $t3 +/* 0D2D20 800D2120 AD2A0000 */ sw $t2, ($t1) +.L800D2124: +/* 0D2D24 800D2124 3C0DA500 */ lui $t5, %hi(D_A5000510) # $t5, 0xa500 +/* 0D2D28 800D2128 8DB90510 */ lw $t9, %lo(D_A5000510)($t5) +/* 0D2D2C 800D212C 3C010020 */ lui $at, 0x20 +/* 0D2D30 800D2130 AFB90034 */ sw $t9, 0x34($sp) +/* 0D2D34 800D2134 8FAC0034 */ lw $t4, 0x34($sp) +/* 0D2D38 800D2138 01817024 */ and $t6, $t4, $at +/* 0D2D3C 800D213C 11C00004 */ beqz $t6, .L800D2150 +/* 0D2D40 800D2140 3C010040 */ lui $at, 0x40 +/* 0D2D44 800D2144 01817824 */ and $t7, $t4, $at +/* 0D2D48 800D2148 15E00006 */ bnez $t7, .L800D2164 +/* 0D2D4C 800D214C 00000000 */ nop +.L800D2150: +/* 0D2D50 800D2150 8FB80034 */ lw $t8, 0x34($sp) +/* 0D2D54 800D2154 3C010200 */ lui $at, 0x200 +/* 0D2D58 800D2158 03014024 */ and $t0, $t8, $at +/* 0D2D5C 800D215C 11000022 */ beqz $t0, .L800D21E8 +/* 0D2D60 800D2160 00000000 */ nop +.L800D2164: +/* 0D2D64 800D2164 8FAB002C */ lw $t3, 0x2c($sp) +/* 0D2D68 800D2168 8D6A000C */ lw $t2, 0xc($t3) +/* 0D2D6C 800D216C 2D410004 */ sltiu $at, $t2, 4 +/* 0D2D70 800D2170 14200010 */ bnez $at, .L800D21B4 +/* 0D2D74 800D2174 00000000 */ nop +/* 0D2D78 800D2178 8FA90030 */ lw $t1, 0x30($sp) +/* 0D2D7C 800D217C 24010003 */ li $at, 3 +/* 0D2D80 800D2180 952D0004 */ lhu $t5, 4($t1) +/* 0D2D84 800D2184 15A10005 */ bne $t5, $at, .L800D219C +/* 0D2D88 800D2188 00000000 */ nop +/* 0D2D8C 800D218C 8D390008 */ lw $t9, 8($t1) +/* 0D2D90 800D2190 2B210053 */ slti $at, $t9, 0x53 +/* 0D2D94 800D2194 14200010 */ bnez $at, .L800D21D8 +/* 0D2D98 800D2198 00000000 */ nop +.L800D219C: +/* 0D2D9C 800D219C 8FAC0030 */ lw $t4, 0x30($sp) +/* 0D2DA0 800D21A0 240E0011 */ li $t6, 17 +/* 0D2DA4 800D21A4 0C03490C */ jal __osLeoAbnormalResume +/* 0D2DA8 800D21A8 AD8E0010 */ sw $t6, 0x10($t4) +/* 0D2DAC 800D21AC 1000009C */ b .L800D2420 +/* 0D2DB0 800D21B0 24020001 */ li $v0, 1 +.L800D21B4: +/* 0D2DB4 800D21B4 8FAF002C */ lw $t7, 0x2c($sp) +/* 0D2DB8 800D21B8 8FA80030 */ lw $t0, 0x30($sp) +/* 0D2DBC 800D21BC 8DF8000C */ lw $t8, 0xc($t7) +/* 0D2DC0 800D21C0 AFB80028 */ sw $t8, 0x28($sp) +/* 0D2DC4 800D21C4 8D0B0008 */ lw $t3, 8($t0) +/* 0D2DC8 800D21C8 00186880 */ sll $t5, $t8, 2 +/* 0D2DCC 800D21CC 01ED4821 */ addu $t1, $t7, $t5 +/* 0D2DD0 800D21D0 256A0001 */ addiu $t2, $t3, 1 +/* 0D2DD4 800D21D4 AD2A0010 */ sw $t2, 0x10($t1) +.L800D21D8: +/* 0D2DD8 800D21D8 8FB9002C */ lw $t9, 0x2c($sp) +/* 0D2DDC 800D21DC 8F2E000C */ lw $t6, 0xc($t9) +/* 0D2DE0 800D21E0 25CC0001 */ addiu $t4, $t6, 1 +/* 0D2DE4 800D21E4 AF2C000C */ sw $t4, 0xc($t9) +.L800D21E8: +/* 0D2DE8 800D21E8 8FA8003C */ lw $t0, 0x3c($sp) +/* 0D2DEC 800D21EC 3C011000 */ lui $at, 0x1000 +/* 0D2DF0 800D21F0 01015824 */ and $t3, $t0, $at +/* 0D2DF4 800D21F4 11600034 */ beqz $t3, .L800D22C8 +/* 0D2DF8 800D21F8 00000000 */ nop +/* 0D2DFC 800D21FC 8FB80030 */ lw $t8, 0x30($sp) +/* 0D2E00 800D2200 24010057 */ li $at, 87 +/* 0D2E04 800D2204 8F0F0008 */ lw $t7, 8($t8) +/* 0D2E08 800D2208 11E10004 */ beq $t7, $at, .L800D221C +/* 0D2E0C 800D220C 00000000 */ nop +/* 0D2E10 800D2210 240D0006 */ li $t5, 6 +/* 0D2E14 800D2214 0C03490C */ jal __osLeoAbnormalResume +/* 0D2E18 800D2218 AF0D0010 */ sw $t5, 0x10($t8) +.L800D221C: +/* 0D2E1C 800D221C 8FAA0030 */ lw $t2, 0x30($sp) +/* 0D2E20 800D2220 24010002 */ li $at, 2 +/* 0D2E24 800D2224 95490004 */ lhu $t1, 4($t2) +/* 0D2E28 800D2228 1521000F */ bne $t1, $at, .L800D2268 +/* 0D2E2C 800D222C 00000000 */ nop +/* 0D2E30 800D2230 954E0006 */ lhu $t6, 6($t2) +/* 0D2E34 800D2234 15C0000C */ bnez $t6, .L800D2268 +/* 0D2E38 800D2238 00000000 */ nop +/* 0D2E3C 800D223C 240C0001 */ li $t4, 1 +/* 0D2E40 800D2240 A54C0006 */ sh $t4, 6($t2) +/* 0D2E44 800D2244 8FA80030 */ lw $t0, 0x30($sp) +/* 0D2E48 800D2248 2419FFFF */ li $t9, -1 +/* 0D2E4C 800D224C AD190008 */ sw $t9, 8($t0) +/* 0D2E50 800D2250 8FAB0030 */ lw $t3, 0x30($sp) +/* 0D2E54 800D2254 8D6F003C */ lw $t7, 0x3c($t3) +/* 0D2E58 800D2258 8D6D0044 */ lw $t5, 0x44($t3) +/* 0D2E5C 800D225C 01EDC023 */ subu $t8, $t7, $t5 +/* 0D2E60 800D2260 1000000B */ b .L800D2290 +/* 0D2E64 800D2264 AD78003C */ sw $t8, 0x3c($t3) +.L800D2268: +/* 0D2E68 800D2268 24090002 */ li $t1, 2 +/* 0D2E6C 800D226C 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 +/* 0D2E70 800D2270 ADC90010 */ sw $t1, %lo(D_A4600010)($t6) +/* 0D2E74 800D2274 3C0C800F */ lui $t4, %hi(__OSGlobalIntMask) # $t4, 0x800f +/* 0D2E78 800D2278 8D8CA5EC */ lw $t4, %lo(__OSGlobalIntMask)($t4) +/* 0D2E7C 800D227C 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 +/* 0D2E80 800D2280 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 +/* 0D2E84 800D2284 01815025 */ or $t2, $t4, $at +/* 0D2E88 800D2288 3C01800F */ lui $at, %hi(__OSGlobalIntMask) # $at, 0x800f +/* 0D2E8C 800D228C AC2AA5EC */ sw $t2, %lo(__OSGlobalIntMask)($at) +.L800D2290: +/* 0D2E90 800D2290 8FB9002C */ lw $t9, 0x2c($sp) +/* 0D2E94 800D2294 3C048019 */ lui $a0, %hi(__osDiskHandle) # $a0, 0x8019 +/* 0D2E98 800D2298 8C8478C0 */ lw $a0, %lo(__osDiskHandle)($a0) +/* 0D2E9C 800D229C 8F280008 */ lw $t0, 8($t9) +/* 0D2EA0 800D22A0 8F270004 */ lw $a3, 4($t9) +/* 0D2EA4 800D22A4 00002825 */ move $a1, $zero +/* 0D2EA8 800D22A8 00087880 */ sll $t7, $t0, 2 +/* 0D2EAC 800D22AC AFAF0010 */ sw $t7, 0x10($sp) +/* 0D2EB0 800D22B0 0C034C24 */ jal osEPiRawStartDma +/* 0D2EB4 800D22B4 3C060500 */ lui $a2, 0x500 +/* 0D2EB8 800D22B8 8FAD0030 */ lw $t5, 0x30($sp) +/* 0D2EBC 800D22BC 24020001 */ li $v0, 1 +/* 0D2EC0 800D22C0 10000057 */ b .L800D2420 +/* 0D2EC4 800D22C4 ADA00010 */ sw $zero, 0x10($t5) +.L800D22C8: +/* 0D2EC8 800D22C8 8FB80030 */ lw $t8, 0x30($sp) +/* 0D2ECC 800D22CC 2401FFFF */ li $at, -1 +/* 0D2ED0 800D22D0 8F0B0008 */ lw $t3, 8($t8) +/* 0D2ED4 800D22D4 15610020 */ bne $t3, $at, .L800D2358 +/* 0D2ED8 800D22D8 00000000 */ nop +/* 0D2EDC 800D22DC 97090004 */ lhu $t1, 4($t8) +/* 0D2EE0 800D22E0 24010002 */ li $at, 2 +/* 0D2EE4 800D22E4 1521001C */ bne $t1, $at, .L800D2358 +/* 0D2EE8 800D22E8 00000000 */ nop +/* 0D2EEC 800D22EC 970E0006 */ lhu $t6, 6($t8) +/* 0D2EF0 800D22F0 24010001 */ li $at, 1 +/* 0D2EF4 800D22F4 15C10018 */ bne $t6, $at, .L800D2358 +/* 0D2EF8 800D22F8 00000000 */ nop +/* 0D2EFC 800D22FC 270C001C */ addiu $t4, $t8, 0x1c +/* 0D2F00 800D2300 AFAC0024 */ sw $t4, 0x24($sp) +/* 0D2F04 800D2304 8F0A0028 */ lw $t2, 0x28($t8) +/* 0D2F08 800D2308 15400010 */ bnez $t2, .L800D234C +/* 0D2F0C 800D230C 00000000 */ nop +/* 0D2F10 800D2310 8F190020 */ lw $t9, 0x20($t8) +/* 0D2F14 800D2314 8F280000 */ lw $t0, ($t9) +/* 0D2F18 800D2318 8F2F0004 */ lw $t7, 4($t9) +/* 0D2F1C 800D231C 8F2B0008 */ lw $t3, 8($t9) +/* 0D2F20 800D2320 8F2E000C */ lw $t6, 0xc($t9) +/* 0D2F24 800D2324 010F6825 */ or $t5, $t0, $t7 +/* 0D2F28 800D2328 01AB4825 */ or $t1, $t5, $t3 +/* 0D2F2C 800D232C 01C96025 */ or $t4, $t6, $t1 +/* 0D2F30 800D2330 11800006 */ beqz $t4, .L800D234C +/* 0D2F34 800D2334 00000000 */ nop +/* 0D2F38 800D2338 240A0006 */ li $t2, 6 +/* 0D2F3C 800D233C 0C03490C */ jal __osLeoAbnormalResume +/* 0D2F40 800D2340 AF0A0010 */ sw $t2, 0x10($t8) +/* 0D2F44 800D2344 10000036 */ b .L800D2420 +/* 0D2F48 800D2348 24020001 */ li $v0, 1 +.L800D234C: +/* 0D2F4C 800D234C 8FA80030 */ lw $t0, 0x30($sp) +/* 0D2F50 800D2350 0C034946 */ jal __osLeoResume +/* 0D2F54 800D2354 AD000010 */ sw $zero, 0x10($t0) +.L800D2358: +/* 0D2F58 800D2358 8FAF0030 */ lw $t7, 0x30($sp) +/* 0D2F5C 800D235C 3C014000 */ lui $at, 0x4000 +/* 0D2F60 800D2360 8DED0008 */ lw $t5, 8($t7) +/* 0D2F64 800D2364 25AB0001 */ addiu $t3, $t5, 1 +/* 0D2F68 800D2368 ADEB0008 */ sw $t3, 8($t7) +/* 0D2F6C 800D236C 8FB9003C */ lw $t9, 0x3c($sp) +/* 0D2F70 800D2370 03217024 */ and $t6, $t9, $at +/* 0D2F74 800D2374 11C00019 */ beqz $t6, .L800D23DC +/* 0D2F78 800D2378 00000000 */ nop +/* 0D2F7C 800D237C 8FA90030 */ lw $t1, 0x30($sp) +/* 0D2F80 800D2380 8D2C0008 */ lw $t4, 8($t1) +/* 0D2F84 800D2384 29810055 */ slti $at, $t4, 0x55 +/* 0D2F88 800D2388 14200006 */ bnez $at, .L800D23A4 +/* 0D2F8C 800D238C 00000000 */ nop +/* 0D2F90 800D2390 240A0006 */ li $t2, 6 +/* 0D2F94 800D2394 0C03490C */ jal __osLeoAbnormalResume +/* 0D2F98 800D2398 AD2A0010 */ sw $t2, 0x10($t1) +/* 0D2F9C 800D239C 10000020 */ b .L800D2420 +/* 0D2FA0 800D23A0 24020001 */ li $v0, 1 +.L800D23A4: +/* 0D2FA4 800D23A4 8FB8002C */ lw $t8, 0x2c($sp) +/* 0D2FA8 800D23A8 3C048019 */ lui $a0, %hi(__osDiskHandle) # $a0, 0x8019 +/* 0D2FAC 800D23AC 3C060500 */ lui $a2, (0x05000400 >> 16) # lui $a2, 0x500 +/* 0D2FB0 800D23B0 8F080008 */ lw $t0, 8($t8) +/* 0D2FB4 800D23B4 8F070000 */ lw $a3, ($t8) +/* 0D2FB8 800D23B8 34C60400 */ ori $a2, (0x05000400 & 0xFFFF) # ori $a2, $a2, 0x400 +/* 0D2FBC 800D23BC 8C8478C0 */ lw $a0, %lo(__osDiskHandle)($a0) +/* 0D2FC0 800D23C0 00002825 */ move $a1, $zero +/* 0D2FC4 800D23C4 0C034C24 */ jal osEPiRawStartDma +/* 0D2FC8 800D23C8 AFA80010 */ sw $t0, 0x10($sp) +/* 0D2FCC 800D23CC 8FAD0030 */ lw $t5, 0x30($sp) +/* 0D2FD0 800D23D0 24020001 */ li $v0, 1 +/* 0D2FD4 800D23D4 10000012 */ b .L800D2420 +/* 0D2FD8 800D23D8 ADA00010 */ sw $zero, 0x10($t5) +.L800D23DC: +/* 0D2FDC 800D23DC 8FAB0030 */ lw $t3, 0x30($sp) +/* 0D2FE0 800D23E0 8D6F0008 */ lw $t7, 8($t3) +/* 0D2FE4 800D23E4 29E10055 */ slti $at, $t7, 0x55 +/* 0D2FE8 800D23E8 10200006 */ beqz $at, .L800D2404 +/* 0D2FEC 800D23EC 00000000 */ nop +/* 0D2FF0 800D23F0 24190006 */ li $t9, 6 +/* 0D2FF4 800D23F4 0C03490C */ jal __osLeoAbnormalResume +/* 0D2FF8 800D23F8 AD790010 */ sw $t9, 0x10($t3) +/* 0D2FFC 800D23FC 10000008 */ b .L800D2420 +/* 0D3000 800D2400 24020001 */ li $v0, 1 +.L800D2404: +/* 0D3004 800D2404 10000006 */ b .L800D2420 +/* 0D3008 800D2408 24020001 */ li $v0, 1 +.L800D240C: +/* 0D300C 800D240C 8FAC0030 */ lw $t4, 0x30($sp) +/* 0D3010 800D2410 240E004B */ li $t6, 75 +/* 0D3014 800D2414 0C03490C */ jal __osLeoAbnormalResume +/* 0D3018 800D2418 AD8E0010 */ sw $t6, 0x10($t4) +/* 0D301C 800D241C 24020001 */ li $v0, 1 +.L800D2420: +/* 0D3020 800D2420 8FBF001C */ lw $ra, 0x1c($sp) +/* 0D3024 800D2424 27BD0040 */ addiu $sp, $sp, 0x40 +/* 0D3028 800D2428 03E00008 */ jr $ra +/* 0D302C 800D242C 00000000 */ nop + +glabel __osLeoAbnormalResume +/* 0D3030 800D2430 3C0E8019 */ lui $t6, %hi(__osDiskHandle) # $t6, 0x8019 +/* 0D3034 800D2434 8DCE78C0 */ lw $t6, %lo(__osDiskHandle)($t6) +/* 0D3038 800D2438 27BDFFE0 */ addiu $sp, $sp, -0x20 +/* 0D303C 800D243C AFBF0014 */ sw $ra, 0x14($sp) +/* 0D3040 800D2440 25CF0014 */ addiu $t7, $t6, 0x14 +/* 0D3044 800D2444 AFAF001C */ sw $t7, 0x1c($sp) +/* 0D3048 800D2448 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 +/* 0D304C 800D244C 8F190010 */ lw $t9, %lo(D_A4600010)($t8) +/* 0D3050 800D2450 AFB90018 */ sw $t9, 0x18($sp) +/* 0D3054 800D2454 8FA80018 */ lw $t0, 0x18($sp) +/* 0D3058 800D2458 31090002 */ andi $t1, $t0, 2 +/* 0D305C 800D245C 11200008 */ beqz $t1, .L800D2480 +/* 0D3060 800D2460 00000000 */ nop +.L800D2464: +/* 0D3064 800D2464 3C0AA460 */ lui $t2, %hi(D_A4600010) # $t2, 0xa460 +/* 0D3068 800D2468 8D4B0010 */ lw $t3, %lo(D_A4600010)($t2) +/* 0D306C 800D246C AFAB0018 */ sw $t3, 0x18($sp) +/* 0D3070 800D2470 8FAC0018 */ lw $t4, 0x18($sp) +/* 0D3074 800D2474 318D0002 */ andi $t5, $t4, 2 +/* 0D3078 800D2478 15A0FFFA */ bnez $t5, .L800D2464 +/* 0D307C 800D247C 00000000 */ nop +.L800D2480: +/* 0D3080 800D2480 8FAE001C */ lw $t6, 0x1c($sp) +/* 0D3084 800D2484 3C011000 */ lui $at, 0x1000 +/* 0D3088 800D2488 3C19A500 */ lui $t9, %hi(D_A5000510) # $t9, 0xa500 +/* 0D308C 800D248C 8DCF0014 */ lw $t7, 0x14($t6) +/* 0D3090 800D2490 3C08A460 */ lui $t0, %hi(D_A4600010) # $t0, 0xa460 +/* 0D3094 800D2494 01E1C025 */ or $t8, $t7, $at +/* 0D3098 800D2498 AF380510 */ sw $t8, %lo(D_A5000510)($t9) +/* 0D309C 800D249C 8D090010 */ lw $t1, %lo(D_A4600010)($t0) +/* 0D30A0 800D24A0 AFA90018 */ sw $t1, 0x18($sp) +/* 0D30A4 800D24A4 8FAA0018 */ lw $t2, 0x18($sp) +/* 0D30A8 800D24A8 314B0002 */ andi $t3, $t2, 2 +/* 0D30AC 800D24AC 11600008 */ beqz $t3, .L800D24D0 +/* 0D30B0 800D24B0 00000000 */ nop +.L800D24B4: +/* 0D30B4 800D24B4 3C0CA460 */ lui $t4, %hi(D_A4600010) # $t4, 0xa460 +/* 0D30B8 800D24B8 8D8D0010 */ lw $t5, %lo(D_A4600010)($t4) +/* 0D30BC 800D24BC AFAD0018 */ sw $t5, 0x18($sp) +/* 0D30C0 800D24C0 8FAE0018 */ lw $t6, 0x18($sp) +/* 0D30C4 800D24C4 31CF0002 */ andi $t7, $t6, 2 +/* 0D30C8 800D24C8 15E0FFFA */ bnez $t7, .L800D24B4 +/* 0D30CC 800D24CC 00000000 */ nop +.L800D24D0: +/* 0D30D0 800D24D0 8FB8001C */ lw $t8, 0x1c($sp) +/* 0D30D4 800D24D4 3C08A500 */ lui $t0, %hi(D_A5000510) # $t0, 0xa500 +/* 0D30D8 800D24D8 8F190014 */ lw $t9, 0x14($t8) +/* 0D30DC 800D24DC 0C034946 */ jal __osLeoResume +/* 0D30E0 800D24E0 AD190510 */ sw $t9, %lo(D_A5000510)($t0) +/* 0D30E4 800D24E4 24090002 */ li $t1, 2 +/* 0D30E8 800D24E8 3C0AA460 */ lui $t2, %hi(D_A4600010) # $t2, 0xa460 +/* 0D30EC 800D24EC AD490010 */ sw $t1, %lo(D_A4600010)($t2) +/* 0D30F0 800D24F0 3C0B800F */ lui $t3, %hi(__OSGlobalIntMask) # $t3, 0x800f +/* 0D30F4 800D24F4 8D6BA5EC */ lw $t3, %lo(__OSGlobalIntMask)($t3) +/* 0D30F8 800D24F8 3C010010 */ lui $at, (0x00100401 >> 16) # lui $at, 0x10 +/* 0D30FC 800D24FC 8FBF0014 */ lw $ra, 0x14($sp) +/* 0D3100 800D2500 34210401 */ ori $at, (0x00100401 & 0xFFFF) # ori $at, $at, 0x401 +/* 0D3104 800D2504 01616025 */ or $t4, $t3, $at +/* 0D3108 800D2508 3C01800F */ lui $at, %hi(__OSGlobalIntMask) # $at, 0x800f +/* 0D310C 800D250C AC2CA5EC */ sw $t4, %lo(__OSGlobalIntMask)($at) +/* 0D3110 800D2510 03E00008 */ jr $ra +/* 0D3114 800D2514 27BD0020 */ addiu $sp, $sp, 0x20 + +glabel __osLeoResume +/* 0D3118 800D2518 27BDFFD0 */ addiu $sp, $sp, -0x30 +/* 0D311C 800D251C 3C0E8019 */ lui $t6, %hi(__osEventStateTab) # $t6, 0x8019 +/* 0D3120 800D2520 25CE6440 */ addiu $t6, %lo(__osEventStateTab) # addiu $t6, $t6, 0x6440 +/* 0D3124 800D2524 25CF0040 */ addiu $t7, $t6, 0x40 +/* 0D3128 800D2528 AFBF001C */ sw $ra, 0x1c($sp) +/* 0D312C 800D252C AFB00018 */ sw $s0, 0x18($sp) +/* 0D3130 800D2530 AFAF002C */ sw $t7, 0x2c($sp) +/* 0D3134 800D2534 8DD80040 */ lw $t8, 0x40($t6) +/* 0D3138 800D2538 1300002D */ beqz $t8, .L800D25F0 +/* 0D313C 800D253C AFB80028 */ sw $t8, 0x28($sp) +/* 0D3140 800D2540 8F190008 */ lw $t9, 8($t8) +/* 0D3144 800D2544 8F080010 */ lw $t0, 0x10($t8) +/* 0D3148 800D2548 0328082A */ slt $at, $t9, $t0 +/* 0D314C 800D254C 10200028 */ beqz $at, .L800D25F0 +/* 0D3150 800D2550 00000000 */ nop +/* 0D3154 800D2554 8FA90028 */ lw $t1, 0x28($sp) +/* 0D3158 800D2558 8FAE002C */ lw $t6, 0x2c($sp) +/* 0D315C 800D255C 8D2A000C */ lw $t2, 0xc($t1) +/* 0D3160 800D2560 8D2B0008 */ lw $t3, 8($t1) +/* 0D3164 800D2564 8D2D0010 */ lw $t5, 0x10($t1) +/* 0D3168 800D2568 014B6021 */ addu $t4, $t2, $t3 +/* 0D316C 800D256C 018D001A */ div $zero, $t4, $t5 +/* 0D3170 800D2570 00007810 */ mfhi $t7 +/* 0D3174 800D2574 AFAF0024 */ sw $t7, 0x24($sp) +/* 0D3178 800D2578 8D280014 */ lw $t0, 0x14($t1) +/* 0D317C 800D257C 8DD80004 */ lw $t8, 4($t6) +/* 0D3180 800D2580 000FC880 */ sll $t9, $t7, 2 +/* 0D3184 800D2584 01195021 */ addu $t2, $t0, $t9 +/* 0D3188 800D2588 AD580000 */ sw $t8, ($t2) +/* 0D318C 800D258C 8FAB0028 */ lw $t3, 0x28($sp) +/* 0D3190 800D2590 15A00002 */ bnez $t5, .L800D259C +/* 0D3194 800D2594 00000000 */ nop +/* 0D3198 800D2598 0007000D */ break 7 +.L800D259C: +/* 0D319C 800D259C 2401FFFF */ li $at, -1 +/* 0D31A0 800D25A0 15A10004 */ bne $t5, $at, .L800D25B4 +/* 0D31A4 800D25A4 3C018000 */ lui $at, 0x8000 +/* 0D31A8 800D25A8 15810002 */ bne $t4, $at, .L800D25B4 +/* 0D31AC 800D25AC 00000000 */ nop +/* 0D31B0 800D25B0 0006000D */ break 6 +.L800D25B4: +/* 0D31B4 800D25B4 8D6C0008 */ lw $t4, 8($t3) +/* 0D31B8 800D25B8 258D0001 */ addiu $t5, $t4, 1 +/* 0D31BC 800D25BC AD6D0008 */ sw $t5, 8($t3) +/* 0D31C0 800D25C0 8FAE0028 */ lw $t6, 0x28($sp) +/* 0D31C4 800D25C4 8DCF0000 */ lw $t7, ($t6) +/* 0D31C8 800D25C8 8DE90000 */ lw $t1, ($t7) +/* 0D31CC 800D25CC 11200008 */ beqz $t1, .L800D25F0 +/* 0D31D0 800D25D0 00000000 */ nop +/* 0D31D4 800D25D4 0C034645 */ jal __osPopThread +/* 0D31D8 800D25D8 01C02025 */ move $a0, $t6 +/* 0D31DC 800D25DC 00408025 */ move $s0, $v0 +/* 0D31E0 800D25E0 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f +/* 0D31E4 800D25E4 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58 +/* 0D31E8 800D25E8 0C034633 */ jal __osEnqueueThread +/* 0D31EC 800D25EC 02002825 */ move $a1, $s0 +.L800D25F0: +/* 0D31F0 800D25F0 8FBF001C */ lw $ra, 0x1c($sp) +/* 0D31F4 800D25F4 8FB00018 */ lw $s0, 0x18($sp) +/* 0D31F8 800D25F8 27BD0030 */ addiu $sp, $sp, 0x30 +/* 0D31FC 800D25FC 03E00008 */ jr $ra +/* 0D3200 800D2600 00000000 */ nop + +/* 0D3204 800D2604 00000000 */ nop +/* 0D3208 800D2608 00000000 */ nop +/* 0D320C 800D260C 00000000 */ nop diff --git a/asm/os/__osProbeTLB.s b/asm/os/__osProbeTLB.s new file mode 100644 index 000000000..fe83ea164 --- /dev/null +++ b/asm/os/__osProbeTLB.s @@ -0,0 +1,64 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osProbeTLB + mfc0 $t0, $10 + andi $t1, $t0, 0xff + li $at, -8192 + and $t2, $a0, $at + or $t1, $t1, $t2 + mtc0 $t1, $10 + nop + nop + nop + tlbp + nop + nop + mfc0 $t3, $0 + lui $at, 0x8000 + and $t3, $t3, $at + bnez $t3, .L8032A0D8 + nop + tlbr + nop + nop + nop + mfc0 $t3, $5 + addi $t3, $t3, 0x2000 + srl $t3, $t3, 1 + and $t4, $t3, $a0 + bnez $t4, .L8032A0A8 + addi $t3, $t3, -1 + mfc0 $v0, $2 + b .L8032A0AC + nop +.L8032A0A8: + mfc0 $v0, $3 +.L8032A0AC: + andi $t5, $v0, 2 + beqz $t5, .L8032A0D8 + nop + lui $at, (0x3FFFFFC0 >> 16) # lui $at, 0x3fff + ori $at, (0x3FFFFFC0 & 0xFFFF) # ori $at, $at, 0xffc0 + and $v0, $v0, $at + sll $v0, $v0, 6 + and $t5, $a0, $t3 + add $v0, $v0, $t5 + b .L8032A0DC + nop +.L8032A0D8: + li $v0, -1 +.L8032A0DC: + mtc0 $t0, $10 + jr $ra + nop + + nop + nop + diff --git a/asm/os/__osRestoreInt.s b/asm/os/__osRestoreInt.s new file mode 100644 index 000000000..f6ab98ef1 --- /dev/null +++ b/asm/os/__osRestoreInt.s @@ -0,0 +1,19 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osRestoreInt + mfc0 $t0, $12 + or $t0, $t0, $a0 + mtc0 $t0, $12 + nop + nop + jr $ra + nop + + nop + diff --git a/asm/os/__osSetCompare.s b/asm/os/__osSetCompare.s new file mode 100644 index 000000000..a1dab9319 --- /dev/null +++ b/asm/os/__osSetCompare.s @@ -0,0 +1,15 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osSetCompare + mtc0 $a0, $11 + jr $ra + nop + + nop + diff --git a/asm/os/__osSetFpcCsr.s b/asm/os/__osSetFpcCsr.s new file mode 100644 index 000000000..e644bc74e --- /dev/null +++ b/asm/os/__osSetFpcCsr.s @@ -0,0 +1,14 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osSetFpcCsr + cfc1 $v0, $31 + ctc1 $a0, $31 + jr $ra + nop + diff --git a/asm/os/__osSetSR.s b/asm/os/__osSetSR.s new file mode 100644 index 000000000..3fba3e668 --- /dev/null +++ b/asm/os/__osSetSR.s @@ -0,0 +1,14 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel __osSetSR + mtc0 $a0, $12 + nop + jr $ra + nop + diff --git a/asm/os/bcopy.s b/asm/os/bcopy.s new file mode 100644 index 000000000..953a3d3c0 --- /dev/null +++ b/asm/os/bcopy.s @@ -0,0 +1,232 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel bcopy + beqz $a2, .L80323A4C + move $a3, $a1 + beq $a0, $a1, .L80323A4C + slt $at, $a1, $a0 + bnezl $at, .L80323A14 + slti $at, $a2, 0x10 + add $v0, $a0, $a2 + slt $at, $a1, $v0 + beql $at, $zero, .L80323A14 + slti $at, $a2, 0x10 + b .L80323B78 + slti $at, $a2, 0x10 + slti $at, $a2, 0x10 +.L80323A14: + bnez $at, .L80323A2C + nop + andi $v0, $a0, 3 + andi $v1, $a1, 3 + beq $v0, $v1, .L80323A54 + nop +.L80323A2C: + beqz $a2, .L80323A4C + nop + addu $v1, $a0, $a2 +.L80323A38: + lb $v0, ($a0) + addiu $a0, $a0, 1 + addiu $a1, $a1, 1 + bne $a0, $v1, .L80323A38 + sb $v0, -1($a1) +.L80323A4C: + jr $ra + move $v0, $a3 + +.L80323A54: + beqz $v0, .L80323AB8 + li $at, 1 + beq $v0, $at, .L80323A9C + li $at, 2 + beql $v0, $at, .L80323A88 + lh $v0, ($a0) + lb $v0, ($a0) + addiu $a0, $a0, 1 + addiu $a1, $a1, 1 + addiu $a2, $a2, -1 + b .L80323AB8 + sb $v0, -1($a1) + lh $v0, ($a0) +.L80323A88: + addiu $a0, $a0, 2 + addiu $a1, $a1, 2 + addiu $a2, $a2, -2 + b .L80323AB8 + sh $v0, -2($a1) +.L80323A9C: + lb $v0, ($a0) + lh $v1, 1($a0) + addiu $a0, $a0, 3 + addiu $a1, $a1, 3 + addiu $a2, $a2, -3 + sb $v0, -3($a1) + sh $v1, -2($a1) +.L80323AB8: + slti $at, $a2, 0x20 + bnezl $at, .L80323B18 + slti $at, $a2, 0x10 + lw $v0, ($a0) + lw $v1, 4($a0) + lw $t0, 8($a0) + lw $t1, 0xc($a0) + lw $t2, 0x10($a0) + lw $t3, 0x14($a0) + lw $t4, 0x18($a0) + lw $t5, 0x1c($a0) + addiu $a0, $a0, 0x20 + addiu $a1, $a1, 0x20 + addiu $a2, $a2, -0x20 + sw $v0, -0x20($a1) + sw $v1, -0x1c($a1) + sw $t0, -0x18($a1) + sw $t1, -0x14($a1) + sw $t2, -0x10($a1) + sw $t3, -0xc($a1) + sw $t4, -8($a1) + b .L80323AB8 + sw $t5, -4($a1) +.L80323B14: + slti $at, $a2, 0x10 +.L80323B18: + bnezl $at, .L80323B54 + slti $at, $a2, 4 + lw $v0, ($a0) + lw $v1, 4($a0) + lw $t0, 8($a0) + lw $t1, 0xc($a0) + addiu $a0, $a0, 0x10 + addiu $a1, $a1, 0x10 + addiu $a2, $a2, -0x10 + sw $v0, -0x10($a1) + sw $v1, -0xc($a1) + sw $t0, -8($a1) + b .L80323B14 + sw $t1, -4($a1) +.L80323B50: + slti $at, $a2, 4 +.L80323B54: + bnez $at, .L80323A2C + nop + lw $v0, ($a0) + addiu $a0, $a0, 4 + addiu $a1, $a1, 4 + addiu $a2, $a2, -4 + b .L80323B50 + sw $v0, -4($a1) + slti $at, $a2, 0x10 +.L80323B78: + add $a0, $a0, $a2 + bnez $at, .L80323B94 + add $a1, $a1, $a2 + andi $v0, $a0, 3 + andi $v1, $a1, 3 + beq $v0, $v1, .L80323BC4 + nop +.L80323B94: + beqz $a2, .L80323A4C + nop + addiu $a0, $a0, -1 + addiu $a1, $a1, -1 + subu $v1, $a0, $a2 +.L80323BA8: + lb $v0, ($a0) + addiu $a0, $a0, -1 + addiu $a1, $a1, -1 + bne $a0, $v1, .L80323BA8 + sb $v0, 1($a1) + jr $ra + move $v0, $a3 + +.L80323BC4: + beqz $v0, .L80323C28 + li $at, 3 + beq $v0, $at, .L80323C0C + li $at, 2 + beql $v0, $at, .L80323BF8 + lh $v0, -2($a0) + lb $v0, -1($a0) + addiu $a0, $a0, -1 + addiu $a1, $a1, -1 + addiu $a2, $a2, -1 + b .L80323C28 + sb $v0, ($a1) + lh $v0, -2($a0) +.L80323BF8: + addiu $a0, $a0, -2 + addiu $a1, $a1, -2 + addiu $a2, $a2, -2 + b .L80323C28 + sh $v0, ($a1) +.L80323C0C: + lb $v0, -1($a0) + lh $v1, -3($a0) + addiu $a0, $a0, -3 + addiu $a1, $a1, -3 + addiu $a2, $a2, -3 + sb $v0, 2($a1) + sh $v1, ($a1) +.L80323C28: + slti $at, $a2, 0x20 + bnezl $at, .L80323C88 + slti $at, $a2, 0x10 + lw $v0, -4($a0) + lw $v1, -8($a0) + lw $t0, -0xc($a0) + lw $t1, -0x10($a0) + lw $t2, -0x14($a0) + lw $t3, -0x18($a0) + lw $t4, -0x1c($a0) + lw $t5, -0x20($a0) + addiu $a0, $a0, -0x20 + addiu $a1, $a1, -0x20 + addiu $a2, $a2, -0x20 + sw $v0, 0x1c($a1) + sw $v1, 0x18($a1) + sw $t0, 0x14($a1) + sw $t1, 0x10($a1) + sw $t2, 0xc($a1) + sw $t3, 8($a1) + sw $t4, 4($a1) + b .L80323C28 + sw $t5, ($a1) +.L80323C84: + slti $at, $a2, 0x10 +.L80323C88: + bnezl $at, .L80323CC4 + slti $at, $a2, 4 + lw $v0, -4($a0) + lw $v1, -8($a0) + lw $t0, -0xc($a0) + lw $t1, -0x10($a0) + addiu $a0, $a0, -0x10 + addiu $a1, $a1, -0x10 + addiu $a2, $a2, -0x10 + sw $v0, 0xc($a1) + sw $v1, 8($a1) + sw $t0, 4($a1) + b .L80323C84 + sw $t1, ($a1) +.L80323CC0: + slti $at, $a2, 4 +.L80323CC4: + bnez $at, .L80323B94 + nop + lw $v0, -4($a0) + addiu $a0, $a0, -4 + addiu $a1, $a1, -4 + addiu $a2, $a2, -4 + b .L80323CC0 + sw $v0, ($a1) + nop + nop + nop + diff --git a/asm/os/bzero.s b/asm/os/bzero.s new file mode 100644 index 000000000..0b6f5d482 --- /dev/null +++ b/asm/os/bzero.s @@ -0,0 +1,60 @@ +# handwritten +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + + +glabel bzero +/* 0CE660 800CDA60 28A1000C */ slti $at, $a1, 0xc +/* 0CE664 800CDA64 1420001D */ bnez $at, .L800CDADC +/* 0CE668 800CDA68 00041823 */ negu $v1, $a0 +/* 0CE66C 800CDA6C 30630003 */ andi $v1, $v1, 3 +/* 0CE670 800CDA70 10600003 */ beqz $v1, .L800CDA80 +/* 0CE674 800CDA74 00A32823 */ subu $a1, $a1, $v1 +/* 0CE678 800CDA78 A8800000 */ swl $zero, ($a0) +/* 0CE67C 800CDA7C 00832021 */ addu $a0, $a0, $v1 +.L800CDA80: +/* 0CE680 800CDA80 2401FFE0 */ li $at, -32 +/* 0CE684 800CDA84 00A13824 */ and $a3, $a1, $at +/* 0CE688 800CDA88 10E0000C */ beqz $a3, .L800CDABC +/* 0CE68C 800CDA8C 00A72823 */ subu $a1, $a1, $a3 +/* 0CE690 800CDA90 00E43821 */ addu $a3, $a3, $a0 +.L800CDA94: +/* 0CE694 800CDA94 24840020 */ addiu $a0, $a0, 0x20 +/* 0CE698 800CDA98 AC80FFE0 */ sw $zero, -0x20($a0) +/* 0CE69C 800CDA9C AC80FFE4 */ sw $zero, -0x1c($a0) +/* 0CE6A0 800CDAA0 AC80FFE8 */ sw $zero, -0x18($a0) +/* 0CE6A4 800CDAA4 AC80FFEC */ sw $zero, -0x14($a0) +/* 0CE6A8 800CDAA8 AC80FFF0 */ sw $zero, -0x10($a0) +/* 0CE6AC 800CDAAC AC80FFF4 */ sw $zero, -0xc($a0) +/* 0CE6B0 800CDAB0 AC80FFF8 */ sw $zero, -8($a0) +/* 0CE6B4 800CDAB4 1487FFF7 */ bne $a0, $a3, .L800CDA94 +/* 0CE6B8 800CDAB8 AC80FFFC */ sw $zero, -4($a0) +.L800CDABC: +/* 0CE6BC 800CDABC 2401FFFC */ li $at, -4 +/* 0CE6C0 800CDAC0 00A13824 */ and $a3, $a1, $at +/* 0CE6C4 800CDAC4 10E00005 */ beqz $a3, .L800CDADC +/* 0CE6C8 800CDAC8 00A72823 */ subu $a1, $a1, $a3 +/* 0CE6CC 800CDACC 00E43821 */ addu $a3, $a3, $a0 +.L800CDAD0: +/* 0CE6D0 800CDAD0 24840004 */ addiu $a0, $a0, 4 +/* 0CE6D4 800CDAD4 1487FFFE */ bne $a0, $a3, .L800CDAD0 +/* 0CE6D8 800CDAD8 AC80FFFC */ sw $zero, -4($a0) +.L800CDADC: +/* 0CE6DC 800CDADC 18A00005 */ blez $a1, .L800CDAF4 +/* 0CE6E0 800CDAE0 00000000 */ nop +/* 0CE6E4 800CDAE4 00A42821 */ addu $a1, $a1, $a0 +.L800CDAE8: +/* 0CE6E8 800CDAE8 24840001 */ addiu $a0, $a0, 1 +/* 0CE6EC 800CDAEC 1485FFFE */ bne $a0, $a1, .L800CDAE8 +/* 0CE6F0 800CDAF0 A080FFFF */ sb $zero, -1($a0) +.L800CDAF4: +/* 0CE6F4 800CDAF4 03E00008 */ jr $ra +/* 0CE6F8 800CDAF8 00000000 */ nop + +/* 0CE6FC 800CDAFC 00000000 */ nop diff --git a/asm/os/contramread.s b/asm/os/contramread.s new file mode 100644 index 000000000..0dbabeaf5 --- /dev/null +++ b/asm/os/contramread.s @@ -0,0 +1,265 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel __osContRamRead +/* 0D68B0 800D5CB0 27BDFFA0 */ addiu $sp, $sp, -0x60 +/* 0D68B4 800D5CB4 3C0E8019 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8019 +/* 0D68B8 800D5CB8 AFBF001C */ sw $ra, 0x1c($sp) +/* 0D68BC 800D5CBC 25CE6590 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, 0x6590 +/* 0D68C0 800D5CC0 240F0002 */ li $t7, 2 +/* 0D68C4 800D5CC4 AFA40060 */ sw $a0, 0x60($sp) +/* 0D68C8 800D5CC8 AFA50064 */ sw $a1, 0x64($sp) +/* 0D68CC 800D5CCC AFA60068 */ sw $a2, 0x68($sp) +/* 0D68D0 800D5CD0 AFA7006C */ sw $a3, 0x6c($sp) +/* 0D68D4 800D5CD4 AFB00018 */ sw $s0, 0x18($sp) +/* 0D68D8 800D5CD8 AFA0005C */ sw $zero, 0x5c($sp) +/* 0D68DC 800D5CDC AFAE0054 */ sw $t6, 0x54($sp) +/* 0D68E0 800D5CE0 0C034EE8 */ jal __osSiGetAccess +/* 0D68E4 800D5CE4 AFAF0028 */ sw $t7, 0x28($sp) +/* 0D68E8 800D5CE8 24180002 */ li $t8, 2 +/* 0D68EC 800D5CEC 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 +/* 0D68F0 800D5CF0 A0386540 */ sb $t8, %lo(_osLastSentSiCmd)($at) +/* 0D68F4 800D5CF4 8FA40064 */ lw $a0, 0x64($sp) +/* 0D68F8 800D5CF8 0C0357BD */ jal __osPackRamReadData +/* 0D68FC 800D5CFC 97A5006A */ lhu $a1, 0x6a($sp) +/* 0D6900 800D5D00 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0D6904 800D5D04 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0D6908 800D5D08 0C034EA8 */ jal __osSiRawStartDma +/* 0D690C 800D5D0C 24040001 */ li $a0, 1 +/* 0D6910 800D5D10 AFA2005C */ sw $v0, 0x5c($sp) +/* 0D6914 800D5D14 8FA40060 */ lw $a0, 0x60($sp) +/* 0D6918 800D5D18 00002825 */ move $a1, $zero +/* 0D691C 800D5D1C 0C0335D4 */ jal osRecvMesg +/* 0D6920 800D5D20 24060001 */ li $a2, 1 +.L800D5D24: +/* 0D6924 800D5D24 AFA00058 */ sw $zero, 0x58($sp) +.L800D5D28: +/* 0D6928 800D5D28 8FA80058 */ lw $t0, 0x58($sp) +/* 0D692C 800D5D2C 8FAA0058 */ lw $t2, 0x58($sp) +/* 0D6930 800D5D30 3C018019 */ lui $at, %hi(__osPfsPifRam) # 0x8019 +/* 0D6934 800D5D34 00084880 */ sll $t1, $t0, 2 +/* 0D6938 800D5D38 00290821 */ addu $at, $at, $t1 +/* 0D693C 800D5D3C 241900FF */ li $t9, 255 +/* 0D6940 800D5D40 AC396590 */ sw $t9, %lo(__osPfsPifRam)($at) # 0x6590($at) +/* 0D6944 800D5D44 254B0001 */ addiu $t3, $t2, 1 +/* 0D6948 800D5D48 29610010 */ slti $at, $t3, 0x10 +/* 0D694C 800D5D4C 1420FFF6 */ bnez $at, .L800D5D28 +/* 0D6950 800D5D50 AFAB0058 */ sw $t3, 0x58($sp) +/* 0D6954 800D5D54 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 +/* 0D6958 800D5D58 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0D695C 800D5D5C AC2065CC */ sw $zero, %lo(D_801965CC)($at) +/* 0D6960 800D5D60 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0D6964 800D5D64 0C034EA8 */ jal __osSiRawStartDma +/* 0D6968 800D5D68 00002025 */ move $a0, $zero +/* 0D696C 800D5D6C AFA2005C */ sw $v0, 0x5c($sp) +/* 0D6970 800D5D70 8FA40060 */ lw $a0, 0x60($sp) +/* 0D6974 800D5D74 00002825 */ move $a1, $zero +/* 0D6978 800D5D78 0C0335D4 */ jal osRecvMesg +/* 0D697C 800D5D7C 24060001 */ li $a2, 1 +/* 0D6980 800D5D80 8FAD0064 */ lw $t5, 0x64($sp) +/* 0D6984 800D5D84 3C0C8019 */ lui $t4, %hi(__osPfsPifRam) # $t4, 0x8019 +/* 0D6988 800D5D88 258C6590 */ addiu $t4, %lo(__osPfsPifRam) # addiu $t4, $t4, 0x6590 +/* 0D698C 800D5D8C 11A0000C */ beqz $t5, .L800D5DC0 +/* 0D6990 800D5D90 AFAC0054 */ sw $t4, 0x54($sp) +/* 0D6994 800D5D94 19A0000A */ blez $t5, .L800D5DC0 +/* 0D6998 800D5D98 AFA00058 */ sw $zero, 0x58($sp) +.L800D5D9C: +/* 0D699C 800D5D9C 8FB80058 */ lw $t8, 0x58($sp) +/* 0D69A0 800D5DA0 8FB90064 */ lw $t9, 0x64($sp) +/* 0D69A4 800D5DA4 8FAE0054 */ lw $t6, 0x54($sp) +/* 0D69A8 800D5DA8 27080001 */ addiu $t0, $t8, 1 +/* 0D69AC 800D5DAC 0119082A */ slt $at, $t0, $t9 +/* 0D69B0 800D5DB0 25CF0001 */ addiu $t7, $t6, 1 +/* 0D69B4 800D5DB4 AFA80058 */ sw $t0, 0x58($sp) +/* 0D69B8 800D5DB8 1420FFF8 */ bnez $at, .L800D5D9C +/* 0D69BC 800D5DBC AFAF0054 */ sw $t7, 0x54($sp) +.L800D5DC0: +/* 0D69C0 800D5DC0 8FAA0054 */ lw $t2, 0x54($sp) +/* 0D69C4 800D5DC4 27A9002C */ addiu $t1, $sp, 0x2c +/* 0D69C8 800D5DC8 254C0024 */ addiu $t4, $t2, 0x24 +.L800D5DCC: +/* 0D69CC 800D5DCC 89410000 */ lwl $at, ($t2) +/* 0D69D0 800D5DD0 99410003 */ lwr $at, 3($t2) +/* 0D69D4 800D5DD4 254A000C */ addiu $t2, $t2, 0xc +/* 0D69D8 800D5DD8 2529000C */ addiu $t1, $t1, 0xc +/* 0D69DC 800D5DDC AD21FFF4 */ sw $at, -0xc($t1) +/* 0D69E0 800D5DE0 8941FFF8 */ lwl $at, -8($t2) +/* 0D69E4 800D5DE4 9941FFFB */ lwr $at, -5($t2) +/* 0D69E8 800D5DE8 AD21FFF8 */ sw $at, -8($t1) +/* 0D69EC 800D5DEC 8941FFFC */ lwl $at, -4($t2) +/* 0D69F0 800D5DF0 9941FFFF */ lwr $at, -1($t2) +/* 0D69F4 800D5DF4 154CFFF5 */ bne $t2, $t4, .L800D5DCC +/* 0D69F8 800D5DF8 AD21FFFC */ sw $at, -4($t1) +/* 0D69FC 800D5DFC 89410000 */ lwl $at, ($t2) +/* 0D6A00 800D5E00 99410003 */ lwr $at, 3($t2) +/* 0D6A04 800D5E04 AD210000 */ sw $at, ($t1) +/* 0D6A08 800D5E08 93AD002E */ lbu $t5, 0x2e($sp) +/* 0D6A0C 800D5E0C 31AE00C0 */ andi $t6, $t5, 0xc0 +/* 0D6A10 800D5E10 000E7903 */ sra $t7, $t6, 4 +/* 0D6A14 800D5E14 15E00025 */ bnez $t7, .L800D5EAC +/* 0D6A18 800D5E18 AFAF005C */ sw $t7, 0x5c($sp) +/* 0D6A1C 800D5E1C 27A4002C */ addiu $a0, $sp, 0x2c +/* 0D6A20 800D5E20 0C035FC4 */ jal __osContDataCrc +/* 0D6A24 800D5E24 24840006 */ addiu $a0, $a0, 6 +/* 0D6A28 800D5E28 A3A20027 */ sb $v0, 0x27($sp) +/* 0D6A2C 800D5E2C 93B80027 */ lbu $t8, 0x27($sp) +/* 0D6A30 800D5E30 93A80052 */ lbu $t0, 0x52($sp) +/* 0D6A34 800D5E34 1308000F */ beq $t8, $t0, .L800D5E74 +/* 0D6A38 800D5E38 00000000 */ nop +/* 0D6A3C 800D5E3C 8FA40060 */ lw $a0, 0x60($sp) +/* 0D6A40 800D5E40 0C0339F5 */ jal func_800CE7D4 +/* 0D6A44 800D5E44 8FA50064 */ lw $a1, 0x64($sp) +/* 0D6A48 800D5E48 AFA2005C */ sw $v0, 0x5c($sp) +/* 0D6A4C 800D5E4C 8FB9005C */ lw $t9, 0x5c($sp) +/* 0D6A50 800D5E50 13200005 */ beqz $t9, .L800D5E68 +/* 0D6A54 800D5E54 00000000 */ nop +/* 0D6A58 800D5E58 0C034EF9 */ jal __osSiRelAccess +/* 0D6A5C 800D5E5C 00000000 */ nop +/* 0D6A60 800D5E60 1000001F */ b .L800D5EE0 +/* 0D6A64 800D5E64 8FA2005C */ lw $v0, 0x5c($sp) +.L800D5E68: +/* 0D6A68 800D5E68 240B0004 */ li $t3, 4 +/* 0D6A6C 800D5E6C 1000000F */ b .L800D5EAC +/* 0D6A70 800D5E70 AFAB005C */ sw $t3, 0x5c($sp) +.L800D5E74: +/* 0D6A74 800D5E74 AFA00058 */ sw $zero, 0x58($sp) +.L800D5E78: +/* 0D6A78 800D5E78 8FAC0058 */ lw $t4, 0x58($sp) +/* 0D6A7C 800D5E7C 8FA9006C */ lw $t1, 0x6c($sp) +/* 0D6A80 800D5E80 03AC5021 */ addu $t2, $sp, $t4 +/* 0D6A84 800D5E84 914A0032 */ lbu $t2, 0x32($t2) +/* 0D6A88 800D5E88 A12A0000 */ sb $t2, ($t1) +/* 0D6A8C 800D5E8C 8FAF0058 */ lw $t7, 0x58($sp) +/* 0D6A90 800D5E90 8FAD006C */ lw $t5, 0x6c($sp) +/* 0D6A94 800D5E94 25F80001 */ addiu $t8, $t7, 1 +/* 0D6A98 800D5E98 2B010020 */ slti $at, $t8, 0x20 +/* 0D6A9C 800D5E9C 25AE0001 */ addiu $t6, $t5, 1 +/* 0D6AA0 800D5EA0 AFB80058 */ sw $t8, 0x58($sp) +/* 0D6AA4 800D5EA4 1420FFF4 */ bnez $at, .L800D5E78 +/* 0D6AA8 800D5EA8 AFAE006C */ sw $t6, 0x6c($sp) +.L800D5EAC: +/* 0D6AAC 800D5EAC 8FA8005C */ lw $t0, 0x5c($sp) +/* 0D6AB0 800D5EB0 24010004 */ li $at, 4 +/* 0D6AB4 800D5EB4 15010007 */ bne $t0, $at, .L800D5ED4 +/* 0D6AB8 800D5EB8 00000000 */ nop +/* 0D6ABC 800D5EBC 8FB90028 */ lw $t9, 0x28($sp) +/* 0D6AC0 800D5EC0 2B300000 */ slti $s0, $t9, 0 +/* 0D6AC4 800D5EC4 3A100001 */ xori $s0, $s0, 1 +/* 0D6AC8 800D5EC8 272BFFFF */ addiu $t3, $t9, -1 +/* 0D6ACC 800D5ECC 1600FF95 */ bnez $s0, .L800D5D24 +/* 0D6AD0 800D5ED0 AFAB0028 */ sw $t3, 0x28($sp) +.L800D5ED4: +/* 0D6AD4 800D5ED4 0C034EF9 */ jal __osSiRelAccess +/* 0D6AD8 800D5ED8 00000000 */ nop +/* 0D6ADC 800D5EDC 8FA2005C */ lw $v0, 0x5c($sp) +.L800D5EE0: +/* 0D6AE0 800D5EE0 8FBF001C */ lw $ra, 0x1c($sp) +/* 0D6AE4 800D5EE4 8FB00018 */ lw $s0, 0x18($sp) +/* 0D6AE8 800D5EE8 27BD0060 */ addiu $sp, $sp, 0x60 +/* 0D6AEC 800D5EEC 03E00008 */ jr $ra +/* 0D6AF0 800D5EF0 00000000 */ nop + +glabel __osPackRamReadData +/* 0D6AF4 800D5EF4 27BDFFB8 */ addiu $sp, $sp, -0x48 +/* 0D6AF8 800D5EF8 3C0E8019 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8019 +/* 0D6AFC 800D5EFC 25CE6590 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, 0x6590 +/* 0D6B00 800D5F00 AFBF0014 */ sw $ra, 0x14($sp) +/* 0D6B04 800D5F04 AFA40048 */ sw $a0, 0x48($sp) +/* 0D6B08 800D5F08 AFA5004C */ sw $a1, 0x4c($sp) +/* 0D6B0C 800D5F0C AFAE0044 */ sw $t6, 0x44($sp) +/* 0D6B10 800D5F10 AFA00018 */ sw $zero, 0x18($sp) +.L800D5F14: +/* 0D6B14 800D5F14 8FAF0018 */ lw $t7, 0x18($sp) +/* 0D6B18 800D5F18 8FB90018 */ lw $t9, 0x18($sp) +/* 0D6B1C 800D5F1C 3C018019 */ lui $at, %hi(__osPfsPifRam) # 0x8019 +/* 0D6B20 800D5F20 000FC080 */ sll $t8, $t7, 2 +/* 0D6B24 800D5F24 00380821 */ addu $at, $at, $t8 +/* 0D6B28 800D5F28 AC206590 */ sw $zero, %lo(__osPfsPifRam)($at) # 0x6590($at) +/* 0D6B2C 800D5F2C 27280001 */ addiu $t0, $t9, 1 +/* 0D6B30 800D5F30 29010010 */ slti $at, $t0, 0x10 +/* 0D6B34 800D5F34 1420FFF7 */ bnez $at, .L800D5F14 +/* 0D6B38 800D5F38 AFA80018 */ sw $t0, 0x18($sp) +/* 0D6B3C 800D5F3C 24090001 */ li $t1, 1 +/* 0D6B40 800D5F40 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 +/* 0D6B44 800D5F44 240A00FF */ li $t2, 255 +/* 0D6B48 800D5F48 240B0003 */ li $t3, 3 +/* 0D6B4C 800D5F4C 240C0021 */ li $t4, 33 +/* 0D6B50 800D5F50 240D0002 */ li $t5, 2 +/* 0D6B54 800D5F54 AC2965CC */ sw $t1, %lo(D_801965CC)($at) +/* 0D6B58 800D5F58 A3AA001C */ sb $t2, 0x1c($sp) +/* 0D6B5C 800D5F5C A3AB001D */ sb $t3, 0x1d($sp) +/* 0D6B60 800D5F60 A3AC001E */ sb $t4, 0x1e($sp) +/* 0D6B64 800D5F64 A3AD001F */ sb $t5, 0x1f($sp) +/* 0D6B68 800D5F68 0C035F98 */ jal __osContAddressCrc +/* 0D6B6C 800D5F6C 97A4004E */ lhu $a0, 0x4e($sp) +/* 0D6B70 800D5F70 97AE004E */ lhu $t6, 0x4e($sp) +/* 0D6B74 800D5F74 241900FF */ li $t9, 255 +/* 0D6B78 800D5F78 A3B90042 */ sb $t9, 0x42($sp) +/* 0D6B7C 800D5F7C 000E7940 */ sll $t7, $t6, 5 +/* 0D6B80 800D5F80 004FC025 */ or $t8, $v0, $t7 +/* 0D6B84 800D5F84 A7B80020 */ sh $t8, 0x20($sp) +/* 0D6B88 800D5F88 AFA00018 */ sw $zero, 0x18($sp) +.L800D5F8C: +/* 0D6B8C 800D5F8C 8FA90018 */ lw $t1, 0x18($sp) +/* 0D6B90 800D5F90 240800FF */ li $t0, 255 +/* 0D6B94 800D5F94 03A95021 */ addu $t2, $sp, $t1 +/* 0D6B98 800D5F98 A1480022 */ sb $t0, 0x22($t2) +/* 0D6B9C 800D5F9C 8FAB0018 */ lw $t3, 0x18($sp) +/* 0D6BA0 800D5FA0 256C0001 */ addiu $t4, $t3, 1 +/* 0D6BA4 800D5FA4 29810020 */ slti $at, $t4, 0x20 +/* 0D6BA8 800D5FA8 1420FFF8 */ bnez $at, .L800D5F8C +/* 0D6BAC 800D5FAC AFAC0018 */ sw $t4, 0x18($sp) +/* 0D6BB0 800D5FB0 8FAD0048 */ lw $t5, 0x48($sp) +/* 0D6BB4 800D5FB4 11A0000E */ beqz $t5, .L800D5FF0 +/* 0D6BB8 800D5FB8 00000000 */ nop +/* 0D6BBC 800D5FBC 19A0000C */ blez $t5, .L800D5FF0 +/* 0D6BC0 800D5FC0 AFA00018 */ sw $zero, 0x18($sp) +.L800D5FC4: +/* 0D6BC4 800D5FC4 8FAE0044 */ lw $t6, 0x44($sp) +/* 0D6BC8 800D5FC8 A1C00000 */ sb $zero, ($t6) +/* 0D6BCC 800D5FCC 8FB90018 */ lw $t9, 0x18($sp) +/* 0D6BD0 800D5FD0 8FA90048 */ lw $t1, 0x48($sp) +/* 0D6BD4 800D5FD4 8FAF0044 */ lw $t7, 0x44($sp) +/* 0D6BD8 800D5FD8 27280001 */ addiu $t0, $t9, 1 +/* 0D6BDC 800D5FDC 0109082A */ slt $at, $t0, $t1 +/* 0D6BE0 800D5FE0 25F80001 */ addiu $t8, $t7, 1 +/* 0D6BE4 800D5FE4 AFA80018 */ sw $t0, 0x18($sp) +/* 0D6BE8 800D5FE8 1420FFF6 */ bnez $at, .L800D5FC4 +/* 0D6BEC 800D5FEC AFB80044 */ sw $t8, 0x44($sp) +.L800D5FF0: +/* 0D6BF0 800D5FF0 27AB001C */ addiu $t3, $sp, 0x1c +/* 0D6BF4 800D5FF4 256D0024 */ addiu $t5, $t3, 0x24 +/* 0D6BF8 800D5FF8 8FAA0044 */ lw $t2, 0x44($sp) +.L800D5FFC: +/* 0D6BFC 800D5FFC 8D610000 */ lw $at, ($t3) +/* 0D6C00 800D6000 256B000C */ addiu $t3, $t3, 0xc +/* 0D6C04 800D6004 254A000C */ addiu $t2, $t2, 0xc +/* 0D6C08 800D6008 A941FFF4 */ swl $at, -0xc($t2) +/* 0D6C0C 800D600C B941FFF7 */ swr $at, -9($t2) +/* 0D6C10 800D6010 8D61FFF8 */ lw $at, -8($t3) +/* 0D6C14 800D6014 A941FFF8 */ swl $at, -8($t2) +/* 0D6C18 800D6018 B941FFFB */ swr $at, -5($t2) +/* 0D6C1C 800D601C 8D61FFFC */ lw $at, -4($t3) +/* 0D6C20 800D6020 A941FFFC */ swl $at, -4($t2) +/* 0D6C24 800D6024 156DFFF5 */ bne $t3, $t5, .L800D5FFC +/* 0D6C28 800D6028 B941FFFF */ swr $at, -1($t2) +/* 0D6C2C 800D602C 8D610000 */ lw $at, ($t3) +/* 0D6C30 800D6030 241800FE */ li $t8, 254 +/* 0D6C34 800D6034 A9410000 */ swl $at, ($t2) +/* 0D6C38 800D6038 B9410003 */ swr $at, 3($t2) +/* 0D6C3C 800D603C 8FAE0044 */ lw $t6, 0x44($sp) +/* 0D6C40 800D6040 25CF0028 */ addiu $t7, $t6, 0x28 +/* 0D6C44 800D6044 AFAF0044 */ sw $t7, 0x44($sp) +/* 0D6C48 800D6048 A1F80000 */ sb $t8, ($t7) +/* 0D6C4C 800D604C 8FBF0014 */ lw $ra, 0x14($sp) +/* 0D6C50 800D6050 27BD0048 */ addiu $sp, $sp, 0x48 +/* 0D6C54 800D6054 03E00008 */ jr $ra +/* 0D6C58 800D6058 00000000 */ nop + +/* 0D6C5C 800D605C 00000000 */ nop diff --git a/asm/os/contramwrite.s b/asm/os/contramwrite.s new file mode 100644 index 000000000..b17838e87 --- /dev/null +++ b/asm/os/contramwrite.s @@ -0,0 +1,264 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel __osContRamWrite +/* 0D7EF0 800D72F0 27BDFFA0 */ addiu $sp, $sp, -0x60 +/* 0D7EF4 800D72F4 8FB80070 */ lw $t8, 0x70($sp) +/* 0D7EF8 800D72F8 3C0E8019 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8019 +/* 0D7EFC 800D72FC 25CE6590 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, 0x6590 +/* 0D7F00 800D7300 240F0002 */ li $t7, 2 +/* 0D7F04 800D7304 24010001 */ li $at, 1 +/* 0D7F08 800D7308 AFBF001C */ sw $ra, 0x1c($sp) +/* 0D7F0C 800D730C AFA40060 */ sw $a0, 0x60($sp) +/* 0D7F10 800D7310 AFA50064 */ sw $a1, 0x64($sp) +/* 0D7F14 800D7314 AFA60068 */ sw $a2, 0x68($sp) +/* 0D7F18 800D7318 AFA7006C */ sw $a3, 0x6c($sp) +/* 0D7F1C 800D731C AFB00018 */ sw $s0, 0x18($sp) +/* 0D7F20 800D7320 AFA0005C */ sw $zero, 0x5c($sp) +/* 0D7F24 800D7324 AFAE0054 */ sw $t6, 0x54($sp) +/* 0D7F28 800D7328 13010009 */ beq $t8, $at, .L800D7350 +/* 0D7F2C 800D732C AFAF0028 */ sw $t7, 0x28($sp) +/* 0D7F30 800D7330 97B9006A */ lhu $t9, 0x6a($sp) +/* 0D7F34 800D7334 2B210007 */ slti $at, $t9, 7 +/* 0D7F38 800D7338 10200005 */ beqz $at, .L800D7350 +/* 0D7F3C 800D733C 00000000 */ nop +/* 0D7F40 800D7340 13200003 */ beqz $t9, .L800D7350 +/* 0D7F44 800D7344 00000000 */ nop +/* 0D7F48 800D7348 10000070 */ b .L800D750C +/* 0D7F4C 800D734C 00001025 */ move $v0, $zero +.L800D7350: +/* 0D7F50 800D7350 0C034EE8 */ jal __osSiGetAccess +/* 0D7F54 800D7354 00000000 */ nop +/* 0D7F58 800D7358 24080003 */ li $t0, 3 +/* 0D7F5C 800D735C 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 +/* 0D7F60 800D7360 A0286540 */ sb $t0, %lo(_osLastSentSiCmd)($at) +/* 0D7F64 800D7364 8FA40064 */ lw $a0, 0x64($sp) +/* 0D7F68 800D7368 97A5006A */ lhu $a1, 0x6a($sp) +/* 0D7F6C 800D736C 0C035D48 */ jal __osPackRamWriteData +/* 0D7F70 800D7370 8FA6006C */ lw $a2, 0x6c($sp) +/* 0D7F74 800D7374 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0D7F78 800D7378 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0D7F7C 800D737C 0C034EA8 */ jal __osSiRawStartDma +/* 0D7F80 800D7380 24040001 */ li $a0, 1 +/* 0D7F84 800D7384 AFA2005C */ sw $v0, 0x5c($sp) +/* 0D7F88 800D7388 8FA40060 */ lw $a0, 0x60($sp) +/* 0D7F8C 800D738C 00002825 */ move $a1, $zero +/* 0D7F90 800D7390 0C0335D4 */ jal osRecvMesg +/* 0D7F94 800D7394 24060001 */ li $a2, 1 +.L800D7398: +/* 0D7F98 800D7398 AFA00058 */ sw $zero, 0x58($sp) +.L800D739C: +/* 0D7F9C 800D739C 8FAA0058 */ lw $t2, 0x58($sp) +/* 0D7FA0 800D73A0 8FAC0058 */ lw $t4, 0x58($sp) +/* 0D7FA4 800D73A4 3C018019 */ lui $at, %hi(__osPfsPifRam) # 0x8019 +/* 0D7FA8 800D73A8 000A5880 */ sll $t3, $t2, 2 +/* 0D7FAC 800D73AC 002B0821 */ addu $at, $at, $t3 +/* 0D7FB0 800D73B0 240900FF */ li $t1, 255 +/* 0D7FB4 800D73B4 AC296590 */ sw $t1, %lo(__osPfsPifRam)($at) # 0x6590($at) +/* 0D7FB8 800D73B8 258D0001 */ addiu $t5, $t4, 1 +/* 0D7FBC 800D73BC 29A10010 */ slti $at, $t5, 0x10 +/* 0D7FC0 800D73C0 1420FFF6 */ bnez $at, .L800D739C +/* 0D7FC4 800D73C4 AFAD0058 */ sw $t5, 0x58($sp) +/* 0D7FC8 800D73C8 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 +/* 0D7FCC 800D73CC 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0D7FD0 800D73D0 AC2065CC */ sw $zero, %lo(D_801965CC)($at) +/* 0D7FD4 800D73D4 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0D7FD8 800D73D8 0C034EA8 */ jal __osSiRawStartDma +/* 0D7FDC 800D73DC 00002025 */ move $a0, $zero +/* 0D7FE0 800D73E0 AFA2005C */ sw $v0, 0x5c($sp) +/* 0D7FE4 800D73E4 8FA40060 */ lw $a0, 0x60($sp) +/* 0D7FE8 800D73E8 00002825 */ move $a1, $zero +/* 0D7FEC 800D73EC 0C0335D4 */ jal osRecvMesg +/* 0D7FF0 800D73F0 24060001 */ li $a2, 1 +/* 0D7FF4 800D73F4 8FAF0064 */ lw $t7, 0x64($sp) +/* 0D7FF8 800D73F8 3C0E8019 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8019 +/* 0D7FFC 800D73FC 25CE6590 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, 0x6590 +/* 0D8000 800D7400 11E0000C */ beqz $t7, .L800D7434 +/* 0D8004 800D7404 AFAE0054 */ sw $t6, 0x54($sp) +/* 0D8008 800D7408 19E0000A */ blez $t7, .L800D7434 +/* 0D800C 800D740C AFA00058 */ sw $zero, 0x58($sp) +.L800D7410: +/* 0D8010 800D7410 8FA80058 */ lw $t0, 0x58($sp) +/* 0D8014 800D7414 8FA90064 */ lw $t1, 0x64($sp) +/* 0D8018 800D7418 8FB80054 */ lw $t8, 0x54($sp) +/* 0D801C 800D741C 250A0001 */ addiu $t2, $t0, 1 +/* 0D8020 800D7420 0149082A */ slt $at, $t2, $t1 +/* 0D8024 800D7424 27190001 */ addiu $t9, $t8, 1 +/* 0D8028 800D7428 AFAA0058 */ sw $t2, 0x58($sp) +/* 0D802C 800D742C 1420FFF8 */ bnez $at, .L800D7410 +/* 0D8030 800D7430 AFB90054 */ sw $t9, 0x54($sp) +.L800D7434: +/* 0D8034 800D7434 8FAC0054 */ lw $t4, 0x54($sp) +/* 0D8038 800D7438 27AB002C */ addiu $t3, $sp, 0x2c +/* 0D803C 800D743C 258E0024 */ addiu $t6, $t4, 0x24 +.L800D7440: +/* 0D8040 800D7440 89810000 */ lwl $at, ($t4) +/* 0D8044 800D7444 99810003 */ lwr $at, 3($t4) +/* 0D8048 800D7448 258C000C */ addiu $t4, $t4, 0xc +/* 0D804C 800D744C 256B000C */ addiu $t3, $t3, 0xc +/* 0D8050 800D7450 AD61FFF4 */ sw $at, -0xc($t3) +/* 0D8054 800D7454 8981FFF8 */ lwl $at, -8($t4) +/* 0D8058 800D7458 9981FFFB */ lwr $at, -5($t4) +/* 0D805C 800D745C AD61FFF8 */ sw $at, -8($t3) +/* 0D8060 800D7460 8981FFFC */ lwl $at, -4($t4) +/* 0D8064 800D7464 9981FFFF */ lwr $at, -1($t4) +/* 0D8068 800D7468 158EFFF5 */ bne $t4, $t6, .L800D7440 +/* 0D806C 800D746C AD61FFFC */ sw $at, -4($t3) +/* 0D8070 800D7470 89810000 */ lwl $at, ($t4) +/* 0D8074 800D7474 99810003 */ lwr $at, 3($t4) +/* 0D8078 800D7478 AD610000 */ sw $at, ($t3) +/* 0D807C 800D747C 93AF002E */ lbu $t7, 0x2e($sp) +/* 0D8080 800D7480 31F800C0 */ andi $t8, $t7, 0xc0 +/* 0D8084 800D7484 0018C903 */ sra $t9, $t8, 4 +/* 0D8088 800D7488 17200013 */ bnez $t9, .L800D74D8 +/* 0D808C 800D748C AFB9005C */ sw $t9, 0x5c($sp) +/* 0D8090 800D7490 0C035FC4 */ jal __osContDataCrc +/* 0D8094 800D7494 8FA4006C */ lw $a0, 0x6c($sp) +/* 0D8098 800D7498 93A80052 */ lbu $t0, 0x52($sp) +/* 0D809C 800D749C 1048000E */ beq $v0, $t0, .L800D74D8 +/* 0D80A0 800D74A0 00000000 */ nop +/* 0D80A4 800D74A4 8FA40060 */ lw $a0, 0x60($sp) +/* 0D80A8 800D74A8 0C0339F5 */ jal func_800CE7D4 +/* 0D80AC 800D74AC 8FA50064 */ lw $a1, 0x64($sp) +/* 0D80B0 800D74B0 AFA2005C */ sw $v0, 0x5c($sp) +/* 0D80B4 800D74B4 8FAA005C */ lw $t2, 0x5c($sp) +/* 0D80B8 800D74B8 11400005 */ beqz $t2, .L800D74D0 +/* 0D80BC 800D74BC 00000000 */ nop +/* 0D80C0 800D74C0 0C034EF9 */ jal __osSiRelAccess +/* 0D80C4 800D74C4 00000000 */ nop +/* 0D80C8 800D74C8 10000010 */ b .L800D750C +/* 0D80CC 800D74CC 8FA2005C */ lw $v0, 0x5c($sp) +.L800D74D0: +/* 0D80D0 800D74D0 24090004 */ li $t1, 4 +/* 0D80D4 800D74D4 AFA9005C */ sw $t1, 0x5c($sp) +.L800D74D8: +/* 0D80D8 800D74D8 8FAD005C */ lw $t5, 0x5c($sp) +/* 0D80DC 800D74DC 24010004 */ li $at, 4 +/* 0D80E0 800D74E0 15A10007 */ bne $t5, $at, .L800D7500 +/* 0D80E4 800D74E4 00000000 */ nop +/* 0D80E8 800D74E8 8FAE0028 */ lw $t6, 0x28($sp) +/* 0D80EC 800D74EC 29D00000 */ slti $s0, $t6, 0 +/* 0D80F0 800D74F0 3A100001 */ xori $s0, $s0, 1 +/* 0D80F4 800D74F4 25CCFFFF */ addiu $t4, $t6, -1 +/* 0D80F8 800D74F8 1600FFA7 */ bnez $s0, .L800D7398 +/* 0D80FC 800D74FC AFAC0028 */ sw $t4, 0x28($sp) +.L800D7500: +/* 0D8100 800D7500 0C034EF9 */ jal __osSiRelAccess +/* 0D8104 800D7504 00000000 */ nop +/* 0D8108 800D7508 8FA2005C */ lw $v0, 0x5c($sp) +.L800D750C: +/* 0D810C 800D750C 8FBF001C */ lw $ra, 0x1c($sp) +/* 0D8110 800D7510 8FB00018 */ lw $s0, 0x18($sp) +/* 0D8114 800D7514 27BD0060 */ addiu $sp, $sp, 0x60 +/* 0D8118 800D7518 03E00008 */ jr $ra +/* 0D811C 800D751C 00000000 */ nop + +glabel __osPackRamWriteData +/* 0D8120 800D7520 27BDFFB8 */ addiu $sp, $sp, -0x48 +/* 0D8124 800D7524 3C0E8019 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8019 +/* 0D8128 800D7528 25CE6590 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, 0x6590 +/* 0D812C 800D752C AFBF0014 */ sw $ra, 0x14($sp) +/* 0D8130 800D7530 AFA40048 */ sw $a0, 0x48($sp) +/* 0D8134 800D7534 AFA5004C */ sw $a1, 0x4c($sp) +/* 0D8138 800D7538 AFA60050 */ sw $a2, 0x50($sp) +/* 0D813C 800D753C AFAE0044 */ sw $t6, 0x44($sp) +/* 0D8140 800D7540 AFA00018 */ sw $zero, 0x18($sp) +.L800D7544: +/* 0D8144 800D7544 8FAF0018 */ lw $t7, 0x18($sp) +/* 0D8148 800D7548 8FB90018 */ lw $t9, 0x18($sp) +/* 0D814C 800D754C 3C018019 */ lui $at, %hi(__osPfsPifRam) # 0x8019 +/* 0D8150 800D7550 000FC080 */ sll $t8, $t7, 2 +/* 0D8154 800D7554 00380821 */ addu $at, $at, $t8 +/* 0D8158 800D7558 AC206590 */ sw $zero, %lo(__osPfsPifRam)($at) # 0x6590($at) +/* 0D815C 800D755C 27280001 */ addiu $t0, $t9, 1 +/* 0D8160 800D7560 29010010 */ slti $at, $t0, 0x10 +/* 0D8164 800D7564 1420FFF7 */ bnez $at, .L800D7544 +/* 0D8168 800D7568 AFA80018 */ sw $t0, 0x18($sp) +/* 0D816C 800D756C 24090001 */ li $t1, 1 +/* 0D8170 800D7570 3C018019 */ lui $at, %hi(D_801965CC) # $at, 0x8019 +/* 0D8174 800D7574 240A00FF */ li $t2, 255 +/* 0D8178 800D7578 240B0023 */ li $t3, 35 +/* 0D817C 800D757C 240C0001 */ li $t4, 1 +/* 0D8180 800D7580 240D0003 */ li $t5, 3 +/* 0D8184 800D7584 AC2965CC */ sw $t1, %lo(D_801965CC)($at) +/* 0D8188 800D7588 A3AA001C */ sb $t2, 0x1c($sp) +/* 0D818C 800D758C A3AB001D */ sb $t3, 0x1d($sp) +/* 0D8190 800D7590 A3AC001E */ sb $t4, 0x1e($sp) +/* 0D8194 800D7594 A3AD001F */ sb $t5, 0x1f($sp) +/* 0D8198 800D7598 0C035F98 */ jal __osContAddressCrc +/* 0D819C 800D759C 97A4004E */ lhu $a0, 0x4e($sp) +/* 0D81A0 800D75A0 97AE004E */ lhu $t6, 0x4e($sp) +/* 0D81A4 800D75A4 241900FF */ li $t9, 255 +/* 0D81A8 800D75A8 A3B90042 */ sb $t9, 0x42($sp) +/* 0D81AC 800D75AC 000E7940 */ sll $t7, $t6, 5 +/* 0D81B0 800D75B0 004FC025 */ or $t8, $v0, $t7 +/* 0D81B4 800D75B4 A7B80020 */ sh $t8, 0x20($sp) +/* 0D81B8 800D75B8 AFA00018 */ sw $zero, 0x18($sp) +.L800D75BC: +/* 0D81BC 800D75BC 8FA80050 */ lw $t0, 0x50($sp) +/* 0D81C0 800D75C0 8FAA0018 */ lw $t2, 0x18($sp) +/* 0D81C4 800D75C4 91090000 */ lbu $t1, ($t0) +/* 0D81C8 800D75C8 03AA5821 */ addu $t3, $sp, $t2 +/* 0D81CC 800D75CC A1690022 */ sb $t1, 0x22($t3) +/* 0D81D0 800D75D0 8FAE0018 */ lw $t6, 0x18($sp) +/* 0D81D4 800D75D4 8FAC0050 */ lw $t4, 0x50($sp) +/* 0D81D8 800D75D8 25CF0001 */ addiu $t7, $t6, 1 +/* 0D81DC 800D75DC 29E10020 */ slti $at, $t7, 0x20 +/* 0D81E0 800D75E0 258D0001 */ addiu $t5, $t4, 1 +/* 0D81E4 800D75E4 AFAF0018 */ sw $t7, 0x18($sp) +/* 0D81E8 800D75E8 1420FFF4 */ bnez $at, .L800D75BC +/* 0D81EC 800D75EC AFAD0050 */ sw $t5, 0x50($sp) +/* 0D81F0 800D75F0 8FB80048 */ lw $t8, 0x48($sp) +/* 0D81F4 800D75F4 1300000E */ beqz $t8, .L800D7630 +/* 0D81F8 800D75F8 00000000 */ nop +/* 0D81FC 800D75FC 1B00000C */ blez $t8, .L800D7630 +/* 0D8200 800D7600 AFA00018 */ sw $zero, 0x18($sp) +.L800D7604: +/* 0D8204 800D7604 8FB90044 */ lw $t9, 0x44($sp) +/* 0D8208 800D7608 A3200000 */ sb $zero, ($t9) +/* 0D820C 800D760C 8FAA0018 */ lw $t2, 0x18($sp) +/* 0D8210 800D7610 8FAC0048 */ lw $t4, 0x48($sp) +/* 0D8214 800D7614 8FA80044 */ lw $t0, 0x44($sp) +/* 0D8218 800D7618 254B0001 */ addiu $t3, $t2, 1 +/* 0D821C 800D761C 016C082A */ slt $at, $t3, $t4 +/* 0D8220 800D7620 25090001 */ addiu $t1, $t0, 1 +/* 0D8224 800D7624 AFAB0018 */ sw $t3, 0x18($sp) +/* 0D8228 800D7628 1420FFF6 */ bnez $at, .L800D7604 +/* 0D822C 800D762C AFA90044 */ sw $t1, 0x44($sp) +.L800D7630: +/* 0D8230 800D7630 27AE001C */ addiu $t6, $sp, 0x1c +/* 0D8234 800D7634 25D80024 */ addiu $t8, $t6, 0x24 +/* 0D8238 800D7638 8FAD0044 */ lw $t5, 0x44($sp) +.L800D763C: +/* 0D823C 800D763C 8DC10000 */ lw $at, ($t6) +/* 0D8240 800D7640 25CE000C */ addiu $t6, $t6, 0xc +/* 0D8244 800D7644 25AD000C */ addiu $t5, $t5, 0xc +/* 0D8248 800D7648 A9A1FFF4 */ swl $at, -0xc($t5) +/* 0D824C 800D764C B9A1FFF7 */ swr $at, -9($t5) +/* 0D8250 800D7650 8DC1FFF8 */ lw $at, -8($t6) +/* 0D8254 800D7654 A9A1FFF8 */ swl $at, -8($t5) +/* 0D8258 800D7658 B9A1FFFB */ swr $at, -5($t5) +/* 0D825C 800D765C 8DC1FFFC */ lw $at, -4($t6) +/* 0D8260 800D7660 A9A1FFFC */ swl $at, -4($t5) +/* 0D8264 800D7664 15D8FFF5 */ bne $t6, $t8, .L800D763C +/* 0D8268 800D7668 B9A1FFFF */ swr $at, -1($t5) +/* 0D826C 800D766C 8DC10000 */ lw $at, ($t6) +/* 0D8270 800D7670 240900FE */ li $t1, 254 +/* 0D8274 800D7674 A9A10000 */ swl $at, ($t5) +/* 0D8278 800D7678 B9A10003 */ swr $at, 3($t5) +/* 0D827C 800D767C 8FB90044 */ lw $t9, 0x44($sp) +/* 0D8280 800D7680 27280028 */ addiu $t0, $t9, 0x28 +/* 0D8284 800D7684 AFA80044 */ sw $t0, 0x44($sp) +/* 0D8288 800D7688 A1090000 */ sb $t1, ($t0) +/* 0D828C 800D768C 8FBF0014 */ lw $ra, 0x14($sp) +/* 0D8290 800D7690 27BD0048 */ addiu $sp, $sp, 0x48 +/* 0D8294 800D7694 03E00008 */ jr $ra +/* 0D8298 800D7698 00000000 */ nop + +/* 0D829C 800D769C 00000000 */ nop diff --git a/asm/os/func_800CE720.s b/asm/os/func_800CE720.s new file mode 100644 index 000000000..0550e2e2b --- /dev/null +++ b/asm/os/func_800CE720.s @@ -0,0 +1,132 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel func_800CE720 +/* 0CF320 800CE720 27BDFFE0 */ addiu $sp, $sp, -0x20 +/* 0CF324 800CE724 AFBF0014 */ sw $ra, 0x14($sp) +/* 0CF328 800CE728 AFA40020 */ sw $a0, 0x20($sp) +/* 0CF32C 800CE72C AFA50024 */ sw $a1, 0x24($sp) +/* 0CF330 800CE730 AFA60028 */ sw $a2, 0x28($sp) +/* 0CF334 800CE734 0C034EE8 */ jal __osSiGetAccess +/* 0CF338 800CE738 AFA0001C */ sw $zero, 0x1c($sp) +/* 0CF33C 800CE73C 8FA40020 */ lw $a0, 0x20($sp) +/* 0CF340 800CE740 0C0339F5 */ jal func_800CE7D4 +/* 0CF344 800CE744 8FA50028 */ lw $a1, 0x28($sp) +/* 0CF348 800CE748 0C034EF9 */ jal __osSiRelAccess +/* 0CF34C 800CE74C AFA2001C */ sw $v0, 0x1c($sp) +/* 0CF350 800CE750 8FAE001C */ lw $t6, 0x1c($sp) +/* 0CF354 800CE754 11C00003 */ beqz $t6, .L800CE764 +/* 0CF358 800CE758 00000000 */ nop +/* 0CF35C 800CE75C 10000019 */ b .L800CE7C4 +/* 0CF360 800CE760 01C01025 */ move $v0, $t6 +.L800CE764: +/* 0CF364 800CE764 8FAF0020 */ lw $t7, 0x20($sp) +/* 0CF368 800CE768 8FB80024 */ lw $t8, 0x24($sp) +/* 0CF36C 800CE76C AF0F0004 */ sw $t7, 4($t8) +/* 0CF370 800CE770 8FA80024 */ lw $t0, 0x24($sp) +/* 0CF374 800CE774 8FB90028 */ lw $t9, 0x28($sp) +/* 0CF378 800CE778 AD190008 */ sw $t9, 8($t0) +/* 0CF37C 800CE77C 8FA90024 */ lw $t1, 0x24($sp) +/* 0CF380 800CE780 AD200000 */ sw $zero, ($t1) +/* 0CF384 800CE784 0C0352D9 */ jal __osGetId +/* 0CF388 800CE788 8FA40024 */ lw $a0, 0x24($sp) +/* 0CF38C 800CE78C AFA2001C */ sw $v0, 0x1c($sp) +/* 0CF390 800CE790 8FAA001C */ lw $t2, 0x1c($sp) +/* 0CF394 800CE794 11400003 */ beqz $t2, .L800CE7A4 +/* 0CF398 800CE798 00000000 */ nop +/* 0CF39C 800CE79C 10000009 */ b .L800CE7C4 +/* 0CF3A0 800CE7A0 01401025 */ move $v0, $t2 +.L800CE7A4: +/* 0CF3A4 800CE7A4 0C035494 */ jal osPfsChecker +/* 0CF3A8 800CE7A8 8FA40024 */ lw $a0, 0x24($sp) +/* 0CF3AC 800CE7AC 8FAB0024 */ lw $t3, 0x24($sp) +/* 0CF3B0 800CE7B0 AFA2001C */ sw $v0, 0x1c($sp) +/* 0CF3B4 800CE7B4 8D6C0000 */ lw $t4, ($t3) +/* 0CF3B8 800CE7B8 358D0001 */ ori $t5, $t4, 1 +/* 0CF3BC 800CE7BC AD6D0000 */ sw $t5, ($t3) +/* 0CF3C0 800CE7C0 8FA2001C */ lw $v0, 0x1c($sp) +.L800CE7C4: +/* 0CF3C4 800CE7C4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0CF3C8 800CE7C8 27BD0020 */ addiu $sp, $sp, 0x20 +/* 0CF3CC 800CE7CC 03E00008 */ jr $ra +/* 0CF3D0 800CE7D0 00000000 */ nop + +glabel func_800CE7D4 +/* 0CF3D4 800CE7D4 27BDFFC8 */ addiu $sp, $sp, -0x38 +/* 0CF3D8 800CE7D8 AFBF0014 */ sw $ra, 0x14($sp) +/* 0CF3DC 800CE7DC AFA40038 */ sw $a0, 0x38($sp) +/* 0CF3E0 800CE7E0 AFA5003C */ sw $a1, 0x3c($sp) +/* 0CF3E4 800CE7E4 AFA00034 */ sw $zero, 0x34($sp) +/* 0CF3E8 800CE7E8 0C033954 */ jal __osPfsRequestData +/* 0CF3EC 800CE7EC 00002025 */ move $a0, $zero +/* 0CF3F0 800CE7F0 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0CF3F4 800CE7F4 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0CF3F8 800CE7F8 0C034EA8 */ jal __osSiRawStartDma +/* 0CF3FC 800CE7FC 24040001 */ li $a0, 1 +/* 0CF400 800CE800 AFA20034 */ sw $v0, 0x34($sp) +/* 0CF404 800CE804 8FA40038 */ lw $a0, 0x38($sp) +/* 0CF408 800CE808 27A50030 */ addiu $a1, $sp, 0x30 +/* 0CF40C 800CE80C 0C0335D4 */ jal osRecvMesg +/* 0CF410 800CE810 24060001 */ li $a2, 1 +/* 0CF414 800CE814 3C058019 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8019 +/* 0CF418 800CE818 24A56590 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, 0x6590 +/* 0CF41C 800CE81C 0C034EA8 */ jal __osSiRawStartDma +/* 0CF420 800CE820 00002025 */ move $a0, $zero +/* 0CF424 800CE824 AFA20034 */ sw $v0, 0x34($sp) +/* 0CF428 800CE828 8FA40038 */ lw $a0, 0x38($sp) +/* 0CF42C 800CE82C 27A50030 */ addiu $a1, $sp, 0x30 +/* 0CF430 800CE830 0C0335D4 */ jal osRecvMesg +/* 0CF434 800CE834 24060001 */ li $a2, 1 +/* 0CF438 800CE838 27A4002F */ addiu $a0, $sp, 0x2f +/* 0CF43C 800CE83C 0C033993 */ jal __osPfsGetInitData +/* 0CF440 800CE840 27A5001C */ addiu $a1, $sp, 0x1c +/* 0CF444 800CE844 8FAE003C */ lw $t6, 0x3c($sp) +/* 0CF448 800CE848 000E7880 */ sll $t7, $t6, 2 +/* 0CF44C 800CE84C 03AFC021 */ addu $t8, $sp, $t7 +/* 0CF450 800CE850 9318001E */ lbu $t8, 0x1e($t8) +/* 0CF454 800CE854 33190001 */ andi $t9, $t8, 1 +/* 0CF458 800CE858 13200006 */ beqz $t9, .L800CE874 +/* 0CF45C 800CE85C 00000000 */ nop +/* 0CF460 800CE860 33080002 */ andi $t0, $t8, 2 +/* 0CF464 800CE864 11000003 */ beqz $t0, .L800CE874 +/* 0CF468 800CE868 00000000 */ nop +/* 0CF46C 800CE86C 10000018 */ b .L800CE8D0 +/* 0CF470 800CE870 24020002 */ li $v0, 2 +.L800CE874: +/* 0CF474 800CE874 8FA9003C */ lw $t1, 0x3c($sp) +/* 0CF478 800CE878 27AB001C */ addiu $t3, $sp, 0x1c +/* 0CF47C 800CE87C 00095080 */ sll $t2, $t1, 2 +/* 0CF480 800CE880 014B6021 */ addu $t4, $t2, $t3 +/* 0CF484 800CE884 918D0003 */ lbu $t5, 3($t4) +/* 0CF488 800CE888 15A00005 */ bnez $t5, .L800CE8A0 +/* 0CF48C 800CE88C 00000000 */ nop +/* 0CF490 800CE890 918E0002 */ lbu $t6, 2($t4) +/* 0CF494 800CE894 31CF0001 */ andi $t7, $t6, 1 +/* 0CF498 800CE898 15E00003 */ bnez $t7, .L800CE8A8 +/* 0CF49C 800CE89C 00000000 */ nop +.L800CE8A0: +/* 0CF4A0 800CE8A0 1000000B */ b .L800CE8D0 +/* 0CF4A4 800CE8A4 24020001 */ li $v0, 1 +.L800CE8A8: +/* 0CF4A8 800CE8A8 8FB9003C */ lw $t9, 0x3c($sp) +/* 0CF4AC 800CE8AC 0019C080 */ sll $t8, $t9, 2 +/* 0CF4B0 800CE8B0 03B84021 */ addu $t0, $sp, $t8 +/* 0CF4B4 800CE8B4 9108001E */ lbu $t0, 0x1e($t0) +/* 0CF4B8 800CE8B8 31090004 */ andi $t1, $t0, 4 +/* 0CF4BC 800CE8BC 11200003 */ beqz $t1, .L800CE8CC +/* 0CF4C0 800CE8C0 00000000 */ nop +/* 0CF4C4 800CE8C4 10000002 */ b .L800CE8D0 +/* 0CF4C8 800CE8C8 24020004 */ li $v0, 4 +.L800CE8CC: +/* 0CF4CC 800CE8CC 8FA20034 */ lw $v0, 0x34($sp) +.L800CE8D0: +/* 0CF4D0 800CE8D0 8FBF0014 */ lw $ra, 0x14($sp) +/* 0CF4D4 800CE8D4 27BD0038 */ addiu $sp, $sp, 0x38 +/* 0CF4D8 800CE8D8 03E00008 */ jr $ra +/* 0CF4DC 800CE8DC 00000000 */ nop diff --git a/asm/os/guPerspectiveF.s b/asm/os/guPerspectiveF.s new file mode 100644 index 000000000..21b502197 --- /dev/null +++ b/asm/os/guPerspectiveF.s @@ -0,0 +1,184 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel guPerspectiveF +/* 0CFD00 800CF100 27BDFFD0 */ addiu $sp, $sp, -0x30 +/* 0CFD04 800CF104 44867000 */ mtc1 $a2, $f14 +/* 0CFD08 800CF108 AFBF0014 */ sw $ra, 0x14($sp) +/* 0CFD0C 800CF10C AFA7003C */ sw $a3, 0x3c($sp) +/* 0CFD10 800CF110 AFA40030 */ sw $a0, 0x30($sp) +/* 0CFD14 800CF114 AFA50034 */ sw $a1, 0x34($sp) +/* 0CFD18 800CF118 0C034FA8 */ jal guMtxIdentF +/* 0CFD1C 800CF11C E7AE0038 */ swc1 $f14, 0x38($sp) +/* 0CFD20 800CF120 C7AE0038 */ lwc1 $f14, 0x38($sp) +/* 0CFD24 800CF124 3C01800F */ lui $at, %hi(D_800F39F0) +/* 0CFD28 800CF128 D42639F0 */ ldc1 $f6, %lo(D_800F39F0)($at) +/* 0CFD2C 800CF12C 46007121 */ cvt.d.s $f4, $f14 +/* 0CFD30 800CF130 3C014000 */ li $at, 0x40000000 # 2.000000 +/* 0CFD34 800CF134 46262202 */ mul.d $f8, $f4, $f6 +/* 0CFD38 800CF138 44815000 */ mtc1 $at, $f10 +/* 0CFD3C 800CF13C 462043A0 */ cvt.s.d $f14, $f8 +/* 0CFD40 800CF140 460A7303 */ div.s $f12, $f14, $f10 +/* 0CFD44 800CF144 0C0358AC */ jal cosf +/* 0CFD48 800CF148 E7AC001C */ swc1 $f12, 0x1c($sp) +/* 0CFD4C 800CF14C C7AC001C */ lwc1 $f12, 0x1c($sp) +/* 0CFD50 800CF150 0C03583C */ jal sinf +/* 0CFD54 800CF154 E7A00020 */ swc1 $f0, 0x20($sp) +/* 0CFD58 800CF158 C7A40020 */ lwc1 $f4, 0x20($sp) +/* 0CFD5C 800CF15C C7A6003C */ lwc1 $f6, 0x3c($sp) +/* 0CFD60 800CF160 C7AE0040 */ lwc1 $f14, 0x40($sp) +/* 0CFD64 800CF164 46002083 */ div.s $f2, $f4, $f0 +/* 0CFD68 800CF168 C7B00044 */ lwc1 $f16, 0x44($sp) +/* 0CFD6C 800CF16C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 +/* 0CFD70 800CF170 44812000 */ mtc1 $at, $f4 +/* 0CFD74 800CF174 46107480 */ add.s $f18, $f14, $f16 +/* 0CFD78 800CF178 8FA20030 */ lw $v0, 0x30($sp) +/* 0CFD7C 800CF17C 3C014000 */ li $at, 0x40000000 # 2.000000 +/* 0CFD80 800CF180 46107301 */ sub.s $f12, $f14, $f16 +/* 0CFD84 800CF184 8FA50034 */ lw $a1, 0x34($sp) +/* 0CFD88 800CF188 E444002C */ swc1 $f4, 0x2c($v0) +/* 0CFD8C 800CF18C 00001825 */ move $v1, $zero +/* 0CFD90 800CF190 24040004 */ li $a0, 4 +/* 0CFD94 800CF194 460C9283 */ div.s $f10, $f18, $f12 +/* 0CFD98 800CF198 E4420014 */ swc1 $f2, 0x14($v0) +/* 0CFD9C 800CF19C 46061203 */ div.s $f8, $f2, $f6 +/* 0CFDA0 800CF1A0 44813000 */ mtc1 $at, $f6 +/* 0CFDA4 800CF1A4 E44A0028 */ swc1 $f10, 0x28($v0) +/* 0CFDA8 800CF1A8 E4480000 */ swc1 $f8, ($v0) +/* 0CFDAC 800CF1AC 460E3202 */ mul.s $f8, $f6, $f14 +/* 0CFDB0 800CF1B0 44803000 */ mtc1 $zero, $f6 +/* 0CFDB4 800CF1B4 00000000 */ nop +/* 0CFDB8 800CF1B8 E446003C */ swc1 $f6, 0x3c($v0) +/* 0CFDBC 800CF1BC 46104282 */ mul.s $f10, $f8, $f16 +/* 0CFDC0 800CF1C0 460C5103 */ div.s $f4, $f10, $f12 +/* 0CFDC4 800CF1C4 E4440038 */ swc1 $f4, 0x38($v0) +/* 0CFDC8 800CF1C8 C7A00048 */ lwc1 $f0, 0x48($sp) +/* 0CFDCC 800CF1CC C4460000 */ lwc1 $f6, ($v0) +/* 0CFDD0 800CF1D0 24630001 */ addiu $v1, $v1, 1 +/* 0CFDD4 800CF1D4 C4500004 */ lwc1 $f16, 4($v0) +/* 0CFDD8 800CF1D8 46003282 */ mul.s $f10, $f6, $f0 +/* 0CFDDC 800CF1DC C44C0008 */ lwc1 $f12, 8($v0) +/* 0CFDE0 800CF1E0 10640010 */ beq $v1, $a0, .L800CF224 +/* 0CFDE4 800CF1E4 C44E000C */ lwc1 $f14, 0xc($v0) +.L800CF1E8: +/* 0CFDE8 800CF1E8 46008202 */ mul.s $f8, $f16, $f0 +/* 0CFDEC 800CF1EC C4460010 */ lwc1 $f6, 0x10($v0) +/* 0CFDF0 800CF1F0 C4500014 */ lwc1 $f16, 0x14($v0) +/* 0CFDF4 800CF1F4 46006102 */ mul.s $f4, $f12, $f0 +/* 0CFDF8 800CF1F8 C44C0018 */ lwc1 $f12, 0x18($v0) +/* 0CFDFC 800CF1FC 24630001 */ addiu $v1, $v1, 1 +/* 0CFE00 800CF200 46007082 */ mul.s $f2, $f14, $f0 +/* 0CFE04 800CF204 C44E001C */ lwc1 $f14, 0x1c($v0) +/* 0CFE08 800CF208 E44A0000 */ swc1 $f10, ($v0) +/* 0CFE0C 800CF20C 46003282 */ mul.s $f10, $f6, $f0 +/* 0CFE10 800CF210 E4480004 */ swc1 $f8, 4($v0) +/* 0CFE14 800CF214 E4440008 */ swc1 $f4, 8($v0) +/* 0CFE18 800CF218 24420010 */ addiu $v0, $v0, 0x10 +/* 0CFE1C 800CF21C 1464FFF2 */ bne $v1, $a0, .L800CF1E8 +/* 0CFE20 800CF220 E442FFFC */ swc1 $f2, -4($v0) +.L800CF224: +/* 0CFE24 800CF224 46008202 */ mul.s $f8, $f16, $f0 +/* 0CFE28 800CF228 24420010 */ addiu $v0, $v0, 0x10 +/* 0CFE2C 800CF22C E44AFFF0 */ swc1 $f10, -0x10($v0) +/* 0CFE30 800CF230 46006102 */ mul.s $f4, $f12, $f0 +/* 0CFE34 800CF234 00000000 */ nop +/* 0CFE38 800CF238 46007082 */ mul.s $f2, $f14, $f0 +/* 0CFE3C 800CF23C E448FFF4 */ swc1 $f8, -0xc($v0) +/* 0CFE40 800CF240 E444FFF8 */ swc1 $f4, -8($v0) +/* 0CFE44 800CF244 E442FFFC */ swc1 $f2, -4($v0) +/* 0CFE48 800CF248 10A00035 */ beqz $a1, .L800CF320 +/* 0CFE4C 800CF24C 3C014000 */ li $at, 0x40000000 # 2.000000 +/* 0CFE50 800CF250 44814800 */ mtc1 $at, $f9 +/* 0CFE54 800CF254 44804000 */ mtc1 $zero, $f8 +/* 0CFE58 800CF258 46009021 */ cvt.d.s $f0, $f18 +/* 0CFE5C 800CF25C 340EFFFF */ li $t6, 65535 +/* 0CFE60 800CF260 4628003E */ c.le.d $f0, $f8 +/* 0CFE64 800CF264 3C014100 */ li $at, 0x41000000 # 8.000000 +/* 0CFE68 800CF268 45020004 */ bc1fl .L800CF27C +/* 0CFE6C 800CF26C 44815800 */ mtc1 $at, $f11 +/* 0CFE70 800CF270 1000002B */ b .L800CF320 +/* 0CFE74 800CF274 A4AE0000 */ sh $t6, ($a1) +/* 0CFE78 800CF278 44815800 */ mtc1 $at, $f11 +.L800CF27C: +/* 0CFE7C 800CF27C 44805000 */ mtc1 $zero, $f10 +/* 0CFE80 800CF280 24180001 */ li $t8, 1 +/* 0CFE84 800CF284 3C0141E0 */ li $at, 0x41E00000 # 28.000000 +/* 0CFE88 800CF288 46205103 */ div.d $f4, $f10, $f0 +/* 0CFE8C 800CF28C 24080001 */ li $t0, 1 +/* 0CFE90 800CF290 444FF800 */ cfc1 $t7, $31 +/* 0CFE94 800CF294 44D8F800 */ ctc1 $t8, $31 +/* 0CFE98 800CF298 00000000 */ nop +/* 0CFE9C 800CF29C 462021A4 */ cvt.w.d $f6, $f4 +/* 0CFEA0 800CF2A0 4458F800 */ cfc1 $t8, $31 +/* 0CFEA4 800CF2A4 00000000 */ nop +/* 0CFEA8 800CF2A8 33180078 */ andi $t8, $t8, 0x78 +/* 0CFEAC 800CF2AC 53000014 */ beql $t8, $zero, .L800CF300 +/* 0CFEB0 800CF2B0 44183000 */ mfc1 $t8, $f6 +/* 0CFEB4 800CF2B4 44813800 */ mtc1 $at, $f7 +/* 0CFEB8 800CF2B8 44803000 */ mtc1 $zero, $f6 +/* 0CFEBC 800CF2BC 24180001 */ li $t8, 1 +/* 0CFEC0 800CF2C0 46262181 */ sub.d $f6, $f4, $f6 +/* 0CFEC4 800CF2C4 44D8F800 */ ctc1 $t8, $31 +/* 0CFEC8 800CF2C8 00000000 */ nop +/* 0CFECC 800CF2CC 462031A4 */ cvt.w.d $f6, $f6 +/* 0CFED0 800CF2D0 4458F800 */ cfc1 $t8, $31 +/* 0CFED4 800CF2D4 00000000 */ nop +/* 0CFED8 800CF2D8 33180078 */ andi $t8, $t8, 0x78 +/* 0CFEDC 800CF2DC 17000005 */ bnez $t8, .L800CF2F4 +/* 0CFEE0 800CF2E0 00000000 */ nop +/* 0CFEE4 800CF2E4 44183000 */ mfc1 $t8, $f6 +/* 0CFEE8 800CF2E8 3C018000 */ lui $at, 0x8000 +/* 0CFEEC 800CF2EC 10000007 */ b .L800CF30C +/* 0CFEF0 800CF2F0 0301C025 */ or $t8, $t8, $at +.L800CF2F4: +/* 0CFEF4 800CF2F4 10000005 */ b .L800CF30C +/* 0CFEF8 800CF2F8 2418FFFF */ li $t8, -1 +/* 0CFEFC 800CF2FC 44183000 */ mfc1 $t8, $f6 +.L800CF300: +/* 0CFF00 800CF300 00000000 */ nop +/* 0CFF04 800CF304 0700FFFB */ bltz $t8, .L800CF2F4 +/* 0CFF08 800CF308 00000000 */ nop +.L800CF30C: +/* 0CFF0C 800CF30C 44CFF800 */ ctc1 $t7, $31 +/* 0CFF10 800CF310 3319FFFF */ andi $t9, $t8, 0xffff +/* 0CFF14 800CF314 1F200002 */ bgtz $t9, .L800CF320 +/* 0CFF18 800CF318 A4B80000 */ sh $t8, ($a1) +/* 0CFF1C 800CF31C A4A80000 */ sh $t0, ($a1) +.L800CF320: +/* 0CFF20 800CF320 8FBF0014 */ lw $ra, 0x14($sp) +/* 0CFF24 800CF324 27BD0030 */ addiu $sp, $sp, 0x30 +/* 0CFF28 800CF328 03E00008 */ jr $ra +/* 0CFF2C 800CF32C 00000000 */ nop + +glabel guPerspective +/* 0CFF30 800CF330 27BDFF98 */ addiu $sp, $sp, -0x68 +/* 0CFF34 800CF334 44866000 */ mtc1 $a2, $f12 +/* 0CFF38 800CF338 44877000 */ mtc1 $a3, $f14 +/* 0CFF3C 800CF33C C7A40078 */ lwc1 $f4, 0x78($sp) +/* 0CFF40 800CF340 C7A6007C */ lwc1 $f6, 0x7c($sp) +/* 0CFF44 800CF344 C7A80080 */ lwc1 $f8, 0x80($sp) +/* 0CFF48 800CF348 AFBF0024 */ sw $ra, 0x24($sp) +/* 0CFF4C 800CF34C AFA40068 */ sw $a0, 0x68($sp) +/* 0CFF50 800CF350 44066000 */ mfc1 $a2, $f12 +/* 0CFF54 800CF354 44077000 */ mfc1 $a3, $f14 +/* 0CFF58 800CF358 27A40028 */ addiu $a0, $sp, 0x28 +/* 0CFF5C 800CF35C E7A40010 */ swc1 $f4, 0x10($sp) +/* 0CFF60 800CF360 E7A60014 */ swc1 $f6, 0x14($sp) +/* 0CFF64 800CF364 0C033C40 */ jal guPerspectiveF +/* 0CFF68 800CF368 E7A80018 */ swc1 $f8, 0x18($sp) +/* 0CFF6C 800CF36C 27A40028 */ addiu $a0, $sp, 0x28 +/* 0CFF70 800CF370 0C034F68 */ jal guMtxF2L +/* 0CFF74 800CF374 8FA50068 */ lw $a1, 0x68($sp) +/* 0CFF78 800CF378 8FBF0024 */ lw $ra, 0x24($sp) +/* 0CFF7C 800CF37C 27BD0068 */ addiu $sp, $sp, 0x68 +/* 0CFF80 800CF380 03E00008 */ jr $ra +/* 0CFF84 800CF384 00000000 */ nop + +/* 0CFF88 800CF388 00000000 */ nop +/* 0CFF8C 800CF38C 00000000 */ nop \ No newline at end of file diff --git a/asm/os/guRotateF.s b/asm/os/guRotateF.s new file mode 100644 index 000000000..8b7634159 --- /dev/null +++ b/asm/os/guRotateF.s @@ -0,0 +1,137 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel guRotateF +/* 0CFA70 800CEE70 27BDFFC8 */ addiu $sp, $sp, -0x38 +/* 0CFA74 800CEE74 3C01800F */ lui $at, %hi(D_800F39E0) # $at, 0x800f +/* 0CFA78 800CEE78 C42439E0 */ lwc1 $f4, %lo(D_800F39E0)($at) +/* 0CFA7C 800CEE7C AFB00018 */ sw $s0, 0x18($sp) +/* 0CFA80 800CEE80 00808025 */ move $s0, $a0 +/* 0CFA84 800CEE84 3C018019 */ lui $at, %hi(D_801965D0) +/* 0CFA88 800CEE88 AFBF001C */ sw $ra, 0x1c($sp) +/* 0CFA8C 800CEE8C AFA5003C */ sw $a1, 0x3c($sp) +/* 0CFA90 800CEE90 AFA60040 */ sw $a2, 0x40($sp) +/* 0CFA94 800CEE94 AFA70044 */ sw $a3, 0x44($sp) +/* 0CFA98 800CEE98 27A60048 */ addiu $a2, $sp, 0x48 +/* 0CFA9C 800CEE9C 27A50044 */ addiu $a1, $sp, 0x44 +/* 0CFAA0 800CEEA0 27A40040 */ addiu $a0, $sp, 0x40 +/* 0CFAA4 800CEEA4 0C035818 */ jal guNormalize +/* 0CFAA8 800CEEA8 E42465D0 */ swc1 $f4, %lo(D_801965D0)($at) +/* 0CFAAC 800CEEAC 3C018019 */ lui $at, %hi(D_801965D0) +/* 0CFAB0 800CEEB0 C7AC003C */ lwc1 $f12, 0x3c($sp) +/* 0CFAB4 800CEEB4 C42665D0 */ lwc1 $f6, %lo(D_801965D0)($at) +/* 0CFAB8 800CEEB8 46066302 */ mul.s $f12, $f12, $f6 +/* 0CFABC 800CEEBC 0C03583C */ jal sinf +/* 0CFAC0 800CEEC0 E7AC003C */ swc1 $f12, 0x3c($sp) +/* 0CFAC4 800CEEC4 C7AC003C */ lwc1 $f12, 0x3c($sp) +/* 0CFAC8 800CEEC8 0C0358AC */ jal cosf +/* 0CFACC 800CEECC E7A00034 */ swc1 $f0, 0x34($sp) +/* 0CFAD0 800CEED0 C7AA0040 */ lwc1 $f10, 0x40($sp) +/* 0CFAD4 800CEED4 C7A40044 */ lwc1 $f4, 0x44($sp) +/* 0CFAD8 800CEED8 3C013F80 */ li $at, 0x3F800000 # 1.000000 +/* 0CFADC 800CEEDC 44814000 */ mtc1 $at, $f8 +/* 0CFAE0 800CEEE0 46045182 */ mul.s $f6, $f10, $f4 +/* 0CFAE4 800CEEE4 02002025 */ move $a0, $s0 +/* 0CFAE8 800CEEE8 46004081 */ sub.s $f2, $f8, $f0 +/* 0CFAEC 800CEEEC C7A80048 */ lwc1 $f8, 0x48($sp) +/* 0CFAF0 800CEEF0 E7A00030 */ swc1 $f0, 0x30($sp) +/* 0CFAF4 800CEEF4 46023402 */ mul.s $f16, $f6, $f2 +/* 0CFAF8 800CEEF8 00000000 */ nop +/* 0CFAFC 800CEEFC 46082182 */ mul.s $f6, $f4, $f8 +/* 0CFB00 800CEF00 E7B0002C */ swc1 $f16, 0x2c($sp) +/* 0CFB04 800CEF04 46023482 */ mul.s $f18, $f6, $f2 +/* 0CFB08 800CEF08 00000000 */ nop +/* 0CFB0C 800CEF0C 460A4102 */ mul.s $f4, $f8, $f10 +/* 0CFB10 800CEF10 E7B20028 */ swc1 $f18, 0x28($sp) +/* 0CFB14 800CEF14 46022182 */ mul.s $f6, $f4, $f2 +/* 0CFB18 800CEF18 0C034FA8 */ jal guMtxIdentF +/* 0CFB1C 800CEF1C E7A60024 */ swc1 $f6, 0x24($sp) +/* 0CFB20 800CEF20 C7A80040 */ lwc1 $f8, 0x40($sp) +/* 0CFB24 800CEF24 3C013F80 */ li $at, 0x3F800000 # 1.000000 +/* 0CFB28 800CEF28 44815000 */ mtc1 $at, $f10 +/* 0CFB2C 800CEF2C 46084002 */ mul.s $f0, $f8, $f8 +/* 0CFB30 800CEF30 C7AC0030 */ lwc1 $f12, 0x30($sp) +/* 0CFB34 800CEF34 C7AE0034 */ lwc1 $f14, 0x34($sp) +/* 0CFB38 800CEF38 C7B0002C */ lwc1 $f16, 0x2c($sp) +/* 0CFB3C 800CEF3C C7B20028 */ lwc1 $f18, 0x28($sp) +/* 0CFB40 800CEF40 46005101 */ sub.s $f4, $f10, $f0 +/* 0CFB44 800CEF44 460C2182 */ mul.s $f6, $f4, $f12 +/* 0CFB48 800CEF48 46003200 */ add.s $f8, $f6, $f0 +/* 0CFB4C 800CEF4C E6080000 */ swc1 $f8, ($s0) +/* 0CFB50 800CEF50 C7AA0040 */ lwc1 $f10, 0x40($sp) +/* 0CFB54 800CEF54 460E5102 */ mul.s $f4, $f10, $f14 +/* 0CFB58 800CEF58 46049181 */ sub.s $f6, $f18, $f4 +/* 0CFB5C 800CEF5C E6060024 */ swc1 $f6, 0x24($s0) +/* 0CFB60 800CEF60 C7A80040 */ lwc1 $f8, 0x40($sp) +/* 0CFB64 800CEF64 460E4282 */ mul.s $f10, $f8, $f14 +/* 0CFB68 800CEF68 44814000 */ mtc1 $at, $f8 +/* 0CFB6C 800CEF6C 46125100 */ add.s $f4, $f10, $f18 +/* 0CFB70 800CEF70 E6040018 */ swc1 $f4, 0x18($s0) +/* 0CFB74 800CEF74 C7A60044 */ lwc1 $f6, 0x44($sp) +/* 0CFB78 800CEF78 46063082 */ mul.s $f2, $f6, $f6 +/* 0CFB7C 800CEF7C 46024281 */ sub.s $f10, $f8, $f2 +/* 0CFB80 800CEF80 460C5102 */ mul.s $f4, $f10, $f12 +/* 0CFB84 800CEF84 46022180 */ add.s $f6, $f4, $f2 +/* 0CFB88 800CEF88 E6060014 */ swc1 $f6, 0x14($s0) +/* 0CFB8C 800CEF8C C7A80044 */ lwc1 $f8, 0x44($sp) +/* 0CFB90 800CEF90 C7A40024 */ lwc1 $f4, 0x24($sp) +/* 0CFB94 800CEF94 460E4282 */ mul.s $f10, $f8, $f14 +/* 0CFB98 800CEF98 46045180 */ add.s $f6, $f10, $f4 +/* 0CFB9C 800CEF9C E6060020 */ swc1 $f6, 0x20($s0) +/* 0CFBA0 800CEFA0 C7AA0044 */ lwc1 $f10, 0x44($sp) +/* 0CFBA4 800CEFA4 C7A80024 */ lwc1 $f8, 0x24($sp) +/* 0CFBA8 800CEFA8 460E5102 */ mul.s $f4, $f10, $f14 +/* 0CFBAC 800CEFAC 46044181 */ sub.s $f6, $f8, $f4 +/* 0CFBB0 800CEFB0 44814000 */ mtc1 $at, $f8 +/* 0CFBB4 800CEFB4 E6060008 */ swc1 $f6, 8($s0) +/* 0CFBB8 800CEFB8 C7AA0048 */ lwc1 $f10, 0x48($sp) +/* 0CFBBC 800CEFBC 460A5002 */ mul.s $f0, $f10, $f10 +/* 0CFBC0 800CEFC0 46004101 */ sub.s $f4, $f8, $f0 +/* 0CFBC4 800CEFC4 460C2182 */ mul.s $f6, $f4, $f12 +/* 0CFBC8 800CEFC8 46003280 */ add.s $f10, $f6, $f0 +/* 0CFBCC 800CEFCC E60A0028 */ swc1 $f10, 0x28($s0) +/* 0CFBD0 800CEFD0 C7A80048 */ lwc1 $f8, 0x48($sp) +/* 0CFBD4 800CEFD4 460E4102 */ mul.s $f4, $f8, $f14 +/* 0CFBD8 800CEFD8 46048181 */ sub.s $f6, $f16, $f4 +/* 0CFBDC 800CEFDC E6060010 */ swc1 $f6, 0x10($s0) +/* 0CFBE0 800CEFE0 C7AA0048 */ lwc1 $f10, 0x48($sp) +/* 0CFBE4 800CEFE4 460E5202 */ mul.s $f8, $f10, $f14 +/* 0CFBE8 800CEFE8 46104100 */ add.s $f4, $f8, $f16 +/* 0CFBEC 800CEFEC E6040004 */ swc1 $f4, 4($s0) +/* 0CFBF0 800CEFF0 8FBF001C */ lw $ra, 0x1c($sp) +/* 0CFBF4 800CEFF4 8FB00018 */ lw $s0, 0x18($sp) +/* 0CFBF8 800CEFF8 27BD0038 */ addiu $sp, $sp, 0x38 +/* 0CFBFC 800CEFFC 03E00008 */ jr $ra +/* 0CFC00 800CF000 00000000 */ nop + +glabel guRotate +/* 0CFC04 800CF004 44856000 */ mtc1 $a1, $f12 +/* 0CFC08 800CF008 44867000 */ mtc1 $a2, $f14 +/* 0CFC0C 800CF00C 44878000 */ mtc1 $a3, $f16 +/* 0CFC10 800CF010 27BDFFA0 */ addiu $sp, $sp, -0x60 +/* 0CFC14 800CF014 C7A40070 */ lwc1 $f4, 0x70($sp) +/* 0CFC18 800CF018 AFBF001C */ sw $ra, 0x1c($sp) +/* 0CFC1C 800CF01C AFA40060 */ sw $a0, 0x60($sp) +/* 0CFC20 800CF020 44056000 */ mfc1 $a1, $f12 +/* 0CFC24 800CF024 44067000 */ mfc1 $a2, $f14 +/* 0CFC28 800CF028 44078000 */ mfc1 $a3, $f16 +/* 0CFC2C 800CF02C 27A40020 */ addiu $a0, $sp, 0x20 +/* 0CFC30 800CF030 0C033B9C */ jal guRotateF +/* 0CFC34 800CF034 E7A40010 */ swc1 $f4, 0x10($sp) +/* 0CFC38 800CF038 27A40020 */ addiu $a0, $sp, 0x20 +/* 0CFC3C 800CF03C 0C034F68 */ jal guMtxF2L +/* 0CFC40 800CF040 8FA50060 */ lw $a1, 0x60($sp) +/* 0CFC44 800CF044 8FBF001C */ lw $ra, 0x1c($sp) +/* 0CFC48 800CF048 27BD0060 */ addiu $sp, $sp, 0x60 +/* 0CFC4C 800CF04C 03E00008 */ jr $ra +/* 0CFC50 800CF050 00000000 */ nop + +/* 0CFC54 800CF054 00000000 */ nop +/* 0CFC58 800CF058 00000000 */ nop +/* 0CFC5C 800CF05C 00000000 */ nop \ No newline at end of file diff --git a/asm/os/osContInit.s b/asm/os/osContInit.s new file mode 100644 index 000000000..fd88ea83d --- /dev/null +++ b/asm/os/osContInit.s @@ -0,0 +1,265 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osContInit +/* 0CDD30 800CD130 27BDFF80 */ addiu $sp, $sp, -0x80 +/* 0CDD34 800CD134 3C0E800F */ lui $t6, %hi(D_800EB360) # $t6, 0x800f +/* 0CDD38 800CD138 8DCEB360 */ lw $t6, %lo(D_800EB360)($t6) +/* 0CDD3C 800CD13C AFBF0024 */ sw $ra, 0x24($sp) +/* 0CDD40 800CD140 AFA40080 */ sw $a0, 0x80($sp) +/* 0CDD44 800CD144 AFA50084 */ sw $a1, 0x84($sp) +/* 0CDD48 800CD148 AFA60088 */ sw $a2, 0x88($sp) +/* 0CDD4C 800CD14C 11C00003 */ beqz $t6, .L800CD15C +/* 0CDD50 800CD150 AFA00078 */ sw $zero, 0x78($sp) +/* 0CDD54 800CD154 10000070 */ b .L800CD318 +/* 0CDD58 800CD158 00001025 */ move $v0, $zero +.L800CD15C: +/* 0CDD5C 800CD15C 240F0001 */ li $t7, 1 +/* 0CDD60 800CD160 3C01800F */ lui $at, %hi(D_800EB360) # $at, 0x800f +/* 0CDD64 800CD164 0C033778 */ jal osGetTime +/* 0CDD68 800CD168 AC2FB360 */ sw $t7, %lo(D_800EB360)($at) +/* 0CDD6C 800CD16C 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 +/* 0CDD70 800CD170 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f +/* 0CDD74 800CD174 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f +/* 0CDD78 800CD178 AFA20070 */ sw $v0, 0x70($sp) +/* 0CDD7C 800CD17C AFA30074 */ sw $v1, 0x74($sp) +/* 0CDD80 800CD180 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) +/* 0CDD84 800CD184 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) +/* 0CDD88 800CD188 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 +/* 0CDD8C 800CD18C 0C0337F6 */ jal __ll_mul +/* 0CDD90 800CD190 24040000 */ li $a0, 0 +/* 0CDD94 800CD194 AFA20030 */ sw $v0, 0x30($sp) +/* 0CDD98 800CD198 AFA30034 */ sw $v1, 0x34($sp) +/* 0CDD9C 800CD19C 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf +/* 0CDDA0 800CD1A0 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 +/* 0CDDA4 800CD1A4 8FA50034 */ lw $a1, 0x34($sp) +/* 0CDDA8 800CD1A8 8FA40030 */ lw $a0, 0x30($sp) +/* 0CDDAC 800CD1AC 0C0337B6 */ jal __ull_div +/* 0CDDB0 800CD1B0 24060000 */ li $a2, 0 +/* 0CDDB4 800CD1B4 8FB80070 */ lw $t8, 0x70($sp) +/* 0CDDB8 800CD1B8 8FB90074 */ lw $t9, 0x74($sp) +/* 0CDDBC 800CD1BC 0058082B */ sltu $at, $v0, $t8 +/* 0CDDC0 800CD1C0 14200031 */ bnez $at, .L800CD288 +/* 0CDDC4 800CD1C4 0302082B */ sltu $at, $t8, $v0 +/* 0CDDC8 800CD1C8 14200003 */ bnez $at, .L800CD1D8 +/* 0CDDCC 800CD1CC 0323082B */ sltu $at, $t9, $v1 +/* 0CDDD0 800CD1D0 1020002D */ beqz $at, .L800CD288 +/* 0CDDD4 800CD1D4 00000000 */ nop +.L800CD1D8: +/* 0CDDD8 800CD1D8 27A40038 */ addiu $a0, $sp, 0x38 +/* 0CDDDC 800CD1DC 27A5007C */ addiu $a1, $sp, 0x7c +/* 0CDDE0 800CD1E0 0C033358 */ jal osCreateMesgQueue +/* 0CDDE4 800CD1E4 24060001 */ li $a2, 1 +/* 0CDDE8 800CD1E8 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 +/* 0CDDEC 800CD1EC 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f +/* 0CDDF0 800CD1F0 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f +/* 0CDDF4 800CD1F4 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) +/* 0CDDF8 800CD1F8 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) +/* 0CDDFC 800CD1FC 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 +/* 0CDE00 800CD200 0C0337F6 */ jal __ll_mul +/* 0CDE04 800CD204 24040000 */ li $a0, 0 +/* 0CDE08 800CD208 AFA20028 */ sw $v0, 0x28($sp) +/* 0CDE0C 800CD20C AFA3002C */ sw $v1, 0x2c($sp) +/* 0CDE10 800CD210 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf +/* 0CDE14 800CD214 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 +/* 0CDE18 800CD218 8FA5002C */ lw $a1, 0x2c($sp) +/* 0CDE1C 800CD21C 8FA40028 */ lw $a0, 0x28($sp) +/* 0CDE20 800CD220 0C0337B6 */ jal __ull_div +/* 0CDE24 800CD224 24060000 */ li $a2, 0 +/* 0CDE28 800CD228 AFA20030 */ sw $v0, 0x30($sp) +/* 0CDE2C 800CD22C AFA30034 */ sw $v1, 0x34($sp) +/* 0CDE30 800CD230 8FA90034 */ lw $t1, 0x34($sp) +/* 0CDE34 800CD234 8FA80030 */ lw $t0, 0x30($sp) +/* 0CDE38 800CD238 8FAA0070 */ lw $t2, 0x70($sp) +/* 0CDE3C 800CD23C 8FAB0074 */ lw $t3, 0x74($sp) +/* 0CDE40 800CD240 240C0000 */ li $t4, 0 +/* 0CDE44 800CD244 240D0000 */ li $t5, 0 +/* 0CDE48 800CD248 27AE0038 */ addiu $t6, $sp, 0x38 +/* 0CDE4C 800CD24C 27AF007C */ addiu $t7, $sp, 0x7c +/* 0CDE50 800CD250 010A3023 */ subu $a2, $t0, $t2 +/* 0CDE54 800CD254 012B082B */ sltu $at, $t1, $t3 +/* 0CDE58 800CD258 00C13023 */ subu $a2, $a2, $at +/* 0CDE5C 800CD25C AFAF001C */ sw $t7, 0x1c($sp) +/* 0CDE60 800CD260 AFAE0018 */ sw $t6, 0x18($sp) +/* 0CDE64 800CD264 AFAD0014 */ sw $t5, 0x14($sp) +/* 0CDE68 800CD268 AFAC0010 */ sw $t4, 0x10($sp) +/* 0CDE6C 800CD26C 27A40050 */ addiu $a0, $sp, 0x50 +/* 0CDE70 800CD270 0C034E70 */ jal osSetTimer +/* 0CDE74 800CD274 012B3823 */ subu $a3, $t1, $t3 +/* 0CDE78 800CD278 27A40038 */ addiu $a0, $sp, 0x38 +/* 0CDE7C 800CD27C 27A5007C */ addiu $a1, $sp, 0x7c +/* 0CDE80 800CD280 0C0335D4 */ jal osRecvMesg +/* 0CDE84 800CD284 24060001 */ li $a2, 1 +.L800CD288: +/* 0CDE88 800CD288 24180004 */ li $t8, 4 +/* 0CDE8C 800CD28C 3C018019 */ lui $at, %hi(_osContNumControllers) # $at, 0x8019 +/* 0CDE90 800CD290 A0386541 */ sb $t8, %lo(_osContNumControllers)($at) +/* 0CDE94 800CD294 0C0334FE */ jal __osPackRequestData +/* 0CDE98 800CD298 00002025 */ move $a0, $zero +/* 0CDE9C 800CD29C 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 +/* 0CDEA0 800CD2A0 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 +/* 0CDEA4 800CD2A4 0C034EA8 */ jal __osSiRawStartDma +/* 0CDEA8 800CD2A8 24040001 */ li $a0, 1 +/* 0CDEAC 800CD2AC AFA20078 */ sw $v0, 0x78($sp) +/* 0CDEB0 800CD2B0 8FA40080 */ lw $a0, 0x80($sp) +/* 0CDEB4 800CD2B4 27A5007C */ addiu $a1, $sp, 0x7c +/* 0CDEB8 800CD2B8 0C0335D4 */ jal osRecvMesg +/* 0CDEBC 800CD2BC 24060001 */ li $a2, 1 +/* 0CDEC0 800CD2C0 3C058019 */ lui $a1, %hi(_osContCmdBuf) # $a1, 0x8019 +/* 0CDEC4 800CD2C4 24A56500 */ addiu $a1, %lo(_osContCmdBuf) # addiu $a1, $a1, 0x6500 +/* 0CDEC8 800CD2C8 0C034EA8 */ jal __osSiRawStartDma +/* 0CDECC 800CD2CC 00002025 */ move $a0, $zero +/* 0CDED0 800CD2D0 AFA20078 */ sw $v0, 0x78($sp) +/* 0CDED4 800CD2D4 8FA40080 */ lw $a0, 0x80($sp) +/* 0CDED8 800CD2D8 27A5007C */ addiu $a1, $sp, 0x7c +/* 0CDEDC 800CD2DC 0C0335D4 */ jal osRecvMesg +/* 0CDEE0 800CD2E0 24060001 */ li $a2, 1 +/* 0CDEE4 800CD2E4 8FA40084 */ lw $a0, 0x84($sp) +/* 0CDEE8 800CD2E8 0C0334CA */ jal __osContGetInitData +/* 0CDEEC 800CD2EC 8FA50088 */ lw $a1, 0x88($sp) +/* 0CDEF0 800CD2F0 3C018019 */ lui $at, %hi(_osLastSentSiCmd) # $at, 0x8019 +/* 0CDEF4 800CD2F4 0C034ED4 */ jal __osSiCreateAccessQueue +/* 0CDEF8 800CD2F8 A0206540 */ sb $zero, %lo(_osLastSentSiCmd)($at) +/* 0CDEFC 800CD2FC 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 +/* 0CDF00 800CD300 3C058019 */ lui $a1, %hi(D_80196580) # $a1, 0x8019 +/* 0CDF04 800CD304 24A56580 */ addiu $a1, %lo(D_80196580) # addiu $a1, $a1, 0x6580 +/* 0CDF08 800CD308 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 +/* 0CDF0C 800CD30C 0C033358 */ jal osCreateMesgQueue +/* 0CDF10 800CD310 24060001 */ li $a2, 1 +/* 0CDF14 800CD314 8FA20078 */ lw $v0, 0x78($sp) +.L800CD318: +/* 0CDF18 800CD318 8FBF0024 */ lw $ra, 0x24($sp) +/* 0CDF1C 800CD31C 27BD0080 */ addiu $sp, $sp, 0x80 +/* 0CDF20 800CD320 03E00008 */ jr $ra +/* 0CDF24 800CD324 00000000 */ nop + +glabel __osContGetInitData +/* 0CDF28 800CD328 3C0F8019 */ lui $t7, %hi(_osContNumControllers) # $t7, 0x8019 +/* 0CDF2C 800CD32C 91EF6541 */ lbu $t7, %lo(_osContNumControllers)($t7) +/* 0CDF30 800CD330 27BDFFE8 */ addiu $sp, $sp, -0x18 +/* 0CDF34 800CD334 3C0E8019 */ lui $t6, %hi(_osContCmdBuf) # $t6, 0x8019 +/* 0CDF38 800CD338 25CE6500 */ addiu $t6, %lo(_osContCmdBuf) # addiu $t6, $t6, 0x6500 +/* 0CDF3C 800CD33C A3A00007 */ sb $zero, 7($sp) +/* 0CDF40 800CD340 AFAE0014 */ sw $t6, 0x14($sp) +/* 0CDF44 800CD344 19E00028 */ blez $t7, .L800CD3E8 +/* 0CDF48 800CD348 AFA00008 */ sw $zero, 8($sp) +.L800CD34C: +/* 0CDF4C 800CD34C 8FB90014 */ lw $t9, 0x14($sp) +/* 0CDF50 800CD350 27B8000C */ addiu $t8, $sp, 0xc +/* 0CDF54 800CD354 8B210000 */ lwl $at, ($t9) +/* 0CDF58 800CD358 9B210003 */ lwr $at, 3($t9) +/* 0CDF5C 800CD35C AF010000 */ sw $at, ($t8) +/* 0CDF60 800CD360 8B290004 */ lwl $t1, 4($t9) +/* 0CDF64 800CD364 9B290007 */ lwr $t1, 7($t9) +/* 0CDF68 800CD368 AF090004 */ sw $t1, 4($t8) +/* 0CDF6C 800CD36C 93AA000E */ lbu $t2, 0xe($sp) +/* 0CDF70 800CD370 314B00C0 */ andi $t3, $t2, 0xc0 +/* 0CDF74 800CD374 000B6103 */ sra $t4, $t3, 4 +/* 0CDF78 800CD378 A0AC0003 */ sb $t4, 3($a1) +/* 0CDF7C 800CD37C 90AD0003 */ lbu $t5, 3($a1) +/* 0CDF80 800CD380 15A0000E */ bnez $t5, .L800CD3BC +/* 0CDF84 800CD384 00000000 */ nop +/* 0CDF88 800CD388 93AE0011 */ lbu $t6, 0x11($sp) +/* 0CDF8C 800CD38C 93A80010 */ lbu $t0, 0x10($sp) +/* 0CDF90 800CD390 240B0001 */ li $t3, 1 +/* 0CDF94 800CD394 000E7A00 */ sll $t7, $t6, 8 +/* 0CDF98 800CD398 01E8C025 */ or $t8, $t7, $t0 +/* 0CDF9C 800CD39C A4B80000 */ sh $t8, ($a1) +/* 0CDFA0 800CD3A0 93B90012 */ lbu $t9, 0x12($sp) +/* 0CDFA4 800CD3A4 A0B90002 */ sb $t9, 2($a1) +/* 0CDFA8 800CD3A8 8FAA0008 */ lw $t2, 8($sp) +/* 0CDFAC 800CD3AC 93A90007 */ lbu $t1, 7($sp) +/* 0CDFB0 800CD3B0 014B6004 */ sllv $t4, $t3, $t2 +/* 0CDFB4 800CD3B4 012C6825 */ or $t5, $t1, $t4 +/* 0CDFB8 800CD3B8 A3AD0007 */ sb $t5, 7($sp) +.L800CD3BC: +/* 0CDFBC 800CD3BC 8FAE0008 */ lw $t6, 8($sp) +/* 0CDFC0 800CD3C0 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 +/* 0CDFC4 800CD3C4 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) +/* 0CDFC8 800CD3C8 8FA80014 */ lw $t0, 0x14($sp) +/* 0CDFCC 800CD3CC 25CF0001 */ addiu $t7, $t6, 1 +/* 0CDFD0 800CD3D0 01F9082A */ slt $at, $t7, $t9 +/* 0CDFD4 800CD3D4 25180008 */ addiu $t8, $t0, 8 +/* 0CDFD8 800CD3D8 AFB80014 */ sw $t8, 0x14($sp) +/* 0CDFDC 800CD3DC AFAF0008 */ sw $t7, 8($sp) +/* 0CDFE0 800CD3E0 1420FFDA */ bnez $at, .L800CD34C +/* 0CDFE4 800CD3E4 24A50004 */ addiu $a1, $a1, 4 +.L800CD3E8: +/* 0CDFE8 800CD3E8 93AB0007 */ lbu $t3, 7($sp) +/* 0CDFEC 800CD3EC 27BD0018 */ addiu $sp, $sp, 0x18 +/* 0CDFF0 800CD3F0 03E00008 */ jr $ra +/* 0CDFF4 800CD3F4 A08B0000 */ sb $t3, ($a0) + +glabel __osPackRequestData +/* 0CDFF8 800CD3F8 27BDFFF0 */ addiu $sp, $sp, -0x10 +/* 0CDFFC 800CD3FC 308400FF */ andi $a0, $a0, 0xff +/* 0CE000 800CD400 AFA00000 */ sw $zero, ($sp) +.L800CD404: +/* 0CE004 800CD404 8FAE0000 */ lw $t6, ($sp) +/* 0CE008 800CD408 8FB80000 */ lw $t8, ($sp) +/* 0CE00C 800CD40C 3C018019 */ lui $at, %hi(_osContCmdBuf) # 0x8019 +/* 0CE010 800CD410 000E7880 */ sll $t7, $t6, 2 +/* 0CE014 800CD414 002F0821 */ addu $at, $at, $t7 +/* 0CE018 800CD418 AC206500 */ sw $zero, %lo(_osContCmdBuf)($at) # 0x6500($at) +/* 0CE01C 800CD41C 27190001 */ addiu $t9, $t8, 1 +/* 0CE020 800CD420 2B210010 */ slti $at, $t9, 0x10 +/* 0CE024 800CD424 1420FFF7 */ bnez $at, .L800CD404 +/* 0CE028 800CD428 AFB90000 */ sw $t9, ($sp) +/* 0CE02C 800CD42C 3C198019 */ lui $t9, %hi(_osContNumControllers) # $t9, 0x8019 +/* 0CE030 800CD430 93396541 */ lbu $t9, %lo(_osContNumControllers)($t9) +/* 0CE034 800CD434 3C098019 */ lui $t1, %hi(_osContCmdBuf) # $t1, 0x8019 +/* 0CE038 800CD438 24080001 */ li $t0, 1 +/* 0CE03C 800CD43C 3C018019 */ lui $at, %hi(_osContPifCtrl) # $at, 0x8019 +/* 0CE040 800CD440 25296500 */ addiu $t1, %lo(_osContCmdBuf) # addiu $t1, $t1, 0x6500 +/* 0CE044 800CD444 240A00FF */ li $t2, 255 +/* 0CE048 800CD448 240B0001 */ li $t3, 1 +/* 0CE04C 800CD44C 240C0003 */ li $t4, 3 +/* 0CE050 800CD450 240D00FF */ li $t5, 255 +/* 0CE054 800CD454 240E00FF */ li $t6, 255 +/* 0CE058 800CD458 240F00FF */ li $t7, 255 +/* 0CE05C 800CD45C 241800FF */ li $t8, 255 +/* 0CE060 800CD460 AC28653C */ sw $t0, %lo(_osContPifCtrl)($at) +/* 0CE064 800CD464 AFA9000C */ sw $t1, 0xc($sp) +/* 0CE068 800CD468 A3AA0004 */ sb $t2, 4($sp) +/* 0CE06C 800CD46C A3AB0005 */ sb $t3, 5($sp) +/* 0CE070 800CD470 A3AC0006 */ sb $t4, 6($sp) +/* 0CE074 800CD474 A3A40007 */ sb $a0, 7($sp) +/* 0CE078 800CD478 A3AD0008 */ sb $t5, 8($sp) +/* 0CE07C 800CD47C A3AE0009 */ sb $t6, 9($sp) +/* 0CE080 800CD480 A3AF000A */ sb $t7, 0xa($sp) +/* 0CE084 800CD484 A3B8000B */ sb $t8, 0xb($sp) +/* 0CE088 800CD488 1B200013 */ blez $t9, .L800CD4D8 +/* 0CE08C 800CD48C AFA00000 */ sw $zero, ($sp) +.L800CD490: +/* 0CE090 800CD490 27A90004 */ addiu $t1, $sp, 4 +/* 0CE094 800CD494 8D210000 */ lw $at, ($t1) +/* 0CE098 800CD498 8FA8000C */ lw $t0, 0xc($sp) +/* 0CE09C 800CD49C 3C188019 */ lui $t8, %hi(_osContNumControllers) # $t8, 0x8019 +/* 0CE0A0 800CD4A0 A9010000 */ swl $at, ($t0) +/* 0CE0A4 800CD4A4 B9010003 */ swr $at, 3($t0) +/* 0CE0A8 800CD4A8 8D2B0004 */ lw $t3, 4($t1) +/* 0CE0AC 800CD4AC A90B0004 */ swl $t3, 4($t0) +/* 0CE0B0 800CD4B0 B90B0007 */ swr $t3, 7($t0) +/* 0CE0B4 800CD4B4 8FAE0000 */ lw $t6, ($sp) +/* 0CE0B8 800CD4B8 93186541 */ lbu $t8, %lo(_osContNumControllers)($t8) +/* 0CE0BC 800CD4BC 8FAC000C */ lw $t4, 0xc($sp) +/* 0CE0C0 800CD4C0 25CF0001 */ addiu $t7, $t6, 1 +/* 0CE0C4 800CD4C4 01F8082A */ slt $at, $t7, $t8 +/* 0CE0C8 800CD4C8 258D0008 */ addiu $t5, $t4, 8 +/* 0CE0CC 800CD4CC AFAF0000 */ sw $t7, ($sp) +/* 0CE0D0 800CD4D0 1420FFEF */ bnez $at, .L800CD490 +/* 0CE0D4 800CD4D4 AFAD000C */ sw $t5, 0xc($sp) +.L800CD4D8: +/* 0CE0D8 800CD4D8 8FAA000C */ lw $t2, 0xc($sp) +/* 0CE0DC 800CD4DC 241900FE */ li $t9, 254 +/* 0CE0E0 800CD4E0 27BD0010 */ addiu $sp, $sp, 0x10 +/* 0CE0E4 800CD4E4 03E00008 */ jr $ra +/* 0CE0E8 800CD4E8 A1590000 */ sb $t9, ($t2) + +/* 0CE0EC 800CD4EC 00000000 */ nop + diff --git a/asm/os/osCreatePiManager.s b/asm/os/osCreatePiManager.s new file mode 100644 index 000000000..f546e21de --- /dev/null +++ b/asm/os/osCreatePiManager.s @@ -0,0 +1,114 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osCreatePiManager +/* 0CD6F0 800CCAF0 27BDFFD0 */ addiu $sp, $sp, -0x30 +/* 0CD6F4 800CCAF4 3C0E800F */ lui $t6, %hi(__osPiDevMgr) # $t6, 0x800f +/* 0CD6F8 800CCAF8 8DCEB340 */ lw $t6, %lo(__osPiDevMgr)($t6) +/* 0CD6FC 800CCAFC AFBF001C */ sw $ra, 0x1c($sp) +/* 0CD700 800CCB00 AFA40030 */ sw $a0, 0x30($sp) +/* 0CD704 800CCB04 AFA50034 */ sw $a1, 0x34($sp) +/* 0CD708 800CCB08 AFA60038 */ sw $a2, 0x38($sp) +/* 0CD70C 800CCB0C 15C00056 */ bnez $t6, .L800CCC68 +/* 0CD710 800CCB10 AFA7003C */ sw $a3, 0x3c($sp) +/* 0CD714 800CCB14 8FA40034 */ lw $a0, 0x34($sp) +/* 0CD718 800CCB18 8FA50038 */ lw $a1, 0x38($sp) +/* 0CD71C 800CCB1C 0C033358 */ jal osCreateMesgQueue +/* 0CD720 800CCB20 8FA6003C */ lw $a2, 0x3c($sp) +/* 0CD724 800CCB24 3C048019 */ lui $a0, %hi(D_80196420) # $a0, 0x8019 +/* 0CD728 800CCB28 3C058019 */ lui $a1, %hi(D_80196438) # $a1, 0x8019 +/* 0CD72C 800CCB2C 24A56438 */ addiu $a1, %lo(D_80196438) # addiu $a1, $a1, 0x6438 +/* 0CD730 800CCB30 24846420 */ addiu $a0, %lo(D_80196420) # addiu $a0, $a0, 0x6420 +/* 0CD734 800CCB34 0C033358 */ jal osCreateMesgQueue +/* 0CD738 800CCB38 24060001 */ li $a2, 1 +/* 0CD73C 800CCB3C 3C0F800F */ lui $t7, %hi(gOsPiAccessQueueCreated) # $t7, 0x800f +/* 0CD740 800CCB40 8DEFB440 */ lw $t7, %lo(gOsPiAccessQueueCreated)($t7) +/* 0CD744 800CCB44 15E00003 */ bnez $t7, .L800CCB54 +/* 0CD748 800CCB48 00000000 */ nop +/* 0CD74C 800CCB4C 0C034BBC */ jal __osPiCreateAccessQueue +/* 0CD750 800CCB50 00000000 */ nop +.L800CCB54: +/* 0CD754 800CCB54 3C058019 */ lui $a1, %hi(D_80196420) # $a1, 0x8019 +/* 0CD758 800CCB58 3C062222 */ lui $a2, (0x22222222 >> 16) # lui $a2, 0x2222 +/* 0CD75C 800CCB5C 34C62222 */ ori $a2, (0x22222222 & 0xFFFF) # ori $a2, $a2, 0x2222 +/* 0CD760 800CCB60 24A56420 */ addiu $a1, %lo(D_80196420) # addiu $a1, $a1, 0x6420 +/* 0CD764 800CCB64 0C033380 */ jal osSetEventMesg +/* 0CD768 800CCB68 24040008 */ li $a0, 8 +/* 0CD76C 800CCB6C 2418FFFF */ li $t8, -1 +/* 0CD770 800CCB70 AFB80028 */ sw $t8, 0x28($sp) +/* 0CD774 800CCB74 0C034A84 */ jal osGetThreadPri +/* 0CD778 800CCB78 00002025 */ move $a0, $zero +/* 0CD77C 800CCB7C AFA20024 */ sw $v0, 0x24($sp) +/* 0CD780 800CCB80 8FB90024 */ lw $t9, 0x24($sp) +/* 0CD784 800CCB84 8FA80030 */ lw $t0, 0x30($sp) +/* 0CD788 800CCB88 0328082A */ slt $at, $t9, $t0 +/* 0CD78C 800CCB8C 10200005 */ beqz $at, .L800CCBA4 +/* 0CD790 800CCB90 00000000 */ nop +/* 0CD794 800CCB94 AFB90028 */ sw $t9, 0x28($sp) +/* 0CD798 800CCB98 00002025 */ move $a0, $zero +/* 0CD79C 800CCB9C 0C033320 */ jal osSetThreadPri +/* 0CD7A0 800CCBA0 01002825 */ move $a1, $t0 +.L800CCBA4: +/* 0CD7A4 800CCBA4 0C0346AC */ jal __osDisableInt +/* 0CD7A8 800CCBA8 00000000 */ nop +/* 0CD7AC 800CCBAC 3C01800F */ lui $at, %hi(__osPiDevMgr) # $at, 0x800f +/* 0CD7B0 800CCBB0 8FAB0034 */ lw $t3, 0x34($sp) +/* 0CD7B4 800CCBB4 3C0A8019 */ lui $t2, %hi(D_80195270) # $t2, 0x8019 +/* 0CD7B8 800CCBB8 3C0C8019 */ lui $t4, %hi(D_80196420) # $t4, 0x8019 +/* 0CD7BC 800CCBBC 24090001 */ li $t1, 1 +/* 0CD7C0 800CCBC0 254A5270 */ addiu $t2, %lo(D_80195270) # addiu $t2, $t2, 0x5270 +/* 0CD7C4 800CCBC4 258C6420 */ addiu $t4, %lo(D_80196420) # addiu $t4, $t4, 0x6420 +/* 0CD7C8 800CCBC8 AC29B340 */ sw $t1, %lo(__osPiDevMgr)($at) +/* 0CD7CC 800CCBCC AC2AB344 */ sw $t2, %lo(__osPiDevMgr+0x4)($at) +/* 0CD7D0 800CCBD0 AC2CB34C */ sw $t4, %lo(__osPiDevMgr+0xC)($at) +/* 0CD7D4 800CCBD4 3C188019 */ lui $t8, %hi(D_80195420) # $t8, 0x8019 +/* 0CD7D8 800CCBD8 AC2BB348 */ sw $t3, %lo(__osPiDevMgr+0x8)($at) +/* 0CD7DC 800CCBDC 8FA80030 */ lw $t0, 0x30($sp) +/* 0CD7E0 800CCBE0 3C01800F */ lui $at, %hi(__osPiDevMgr+0x18) # $at, 0x800f +/* 0CD7E4 800CCBE4 3C0D8019 */ lui $t5, %hi(gOsPiMessageQueue) # $t5, 0x8019 +/* 0CD7E8 800CCBE8 3C0E800D */ lui $t6, %hi(osPiRawStartDma) # $t6, 0x800d +/* 0CD7EC 800CCBEC 3C0F800D */ lui $t7, %hi(osEPiRawStartDma) # $t7, 0x800d +/* 0CD7F0 800CCBF0 27185420 */ addiu $t8, %lo(D_80195420) # addiu $t8, $t8, 0x5420 +/* 0CD7F4 800CCBF4 25AD7628 */ addiu $t5, %lo(gOsPiMessageQueue) # addiu $t5, $t5, 0x7628 +/* 0CD7F8 800CCBF8 25CE2FB0 */ addiu $t6, %lo(osPiRawStartDma) # addiu $t6, $t6, 0x2fb0 +/* 0CD7FC 800CCBFC 25EF3090 */ addiu $t7, %lo(osEPiRawStartDma) # addiu $t7, $t7, 0x3090 +/* 0CD800 800CCC00 27191000 */ addiu $t9, $t8, 0x1000 +/* 0CD804 800CCC04 3C06800D */ lui $a2, %hi(__osDevMgrMain) # $a2, 0x800d +/* 0CD808 800CCC08 3C07800F */ lui $a3, %hi(__osPiDevMgr) # $a3, 0x800f +/* 0CD80C 800CCC0C AFA2002C */ sw $v0, 0x2c($sp) +/* 0CD810 800CCC10 AC2DB350 */ sw $t5, %lo(__osPiDevMgr+0x10)($at) +/* 0CD814 800CCC14 AC2EB354 */ sw $t6, %lo(__osPiDevMgr+0x14)($at) +/* 0CD818 800CCC18 AC2FB358 */ sw $t7, %lo(__osPiDevMgr+0x18)($at) +/* 0CD81C 800CCC1C 24E7B340 */ addiu $a3, %lo(__osPiDevMgr) # addiu $a3, $a3, -0x4cc0 +/* 0CD820 800CCC20 24C63170 */ addiu $a2, %lo(__osDevMgrMain) # addiu $a2, $a2, 0x3170 +/* 0CD824 800CCC24 AFB90010 */ sw $t9, 0x10($sp) +/* 0CD828 800CCC28 01402025 */ move $a0, $t2 +/* 0CD82C 800CCC2C 00002825 */ move $a1, $zero +/* 0CD830 800CCC30 0C032FDC */ jal osCreateThread +/* 0CD834 800CCC34 AFA80014 */ sw $t0, 0x14($sp) +/* 0CD838 800CCC38 3C048019 */ lui $a0, %hi(D_80195270) # $a0, 0x8019 +/* 0CD83C 800CCC3C 0C0330D8 */ jal osStartThread +/* 0CD840 800CCC40 24845270 */ addiu $a0, %lo(D_80195270) # addiu $a0, $a0, 0x5270 +/* 0CD844 800CCC44 0C0346B4 */ jal __osRestoreInt +/* 0CD848 800CCC48 8FA4002C */ lw $a0, 0x2c($sp) +/* 0CD84C 800CCC4C 8FA90028 */ lw $t1, 0x28($sp) +/* 0CD850 800CCC50 2401FFFF */ li $at, -1 +/* 0CD854 800CCC54 11210004 */ beq $t1, $at, .L800CCC68 +/* 0CD858 800CCC58 00000000 */ nop +/* 0CD85C 800CCC5C 00002025 */ move $a0, $zero +/* 0CD860 800CCC60 0C033320 */ jal osSetThreadPri +/* 0CD864 800CCC64 01202825 */ move $a1, $t1 +.L800CCC68: +/* 0CD868 800CCC68 8FBF001C */ lw $ra, 0x1c($sp) +/* 0CD86C 800CCC6C 27BD0030 */ addiu $sp, $sp, 0x30 +/* 0CD870 800CCC70 03E00008 */ jr $ra +/* 0CD874 800CCC74 00000000 */ nop + +/* 0CD878 800CCC78 00000000 */ nop +/* 0CD87C 800CCC7C 00000000 */ nop \ No newline at end of file diff --git a/asm/os/osCreateViManager.s b/asm/os/osCreateViManager.s new file mode 100644 index 000000000..e3d20b44d --- /dev/null +++ b/asm/os/osCreateViManager.s @@ -0,0 +1,254 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osCreateViManager +/* 0CD0B0 800CC4B0 3C0E800F */ lui $t6, %hi(viMgrMainArgs) # $t6, 0x800f +/* 0CD0B4 800CC4B4 8DCEA600 */ lw $t6, %lo(viMgrMainArgs)($t6) +/* 0CD0B8 800CC4B8 27BDFFD0 */ addiu $sp, $sp, -0x30 +/* 0CD0BC 800CC4BC AFBF001C */ sw $ra, 0x1c($sp) +/* 0CD0C0 800CC4C0 15C00059 */ bnez $t6, .L800CC628 +/* 0CD0C4 800CC4C4 AFA40030 */ sw $a0, 0x30($sp) +/* 0CD0C8 800CC4C8 0C034984 */ jal __osTimerServicesInit +/* 0CD0CC 800CC4CC 00000000 */ nop +/* 0CD0D0 800CC4D0 3C048019 */ lui $a0, %hi(D_80195200) # $a0, 0x8019 +/* 0CD0D4 800CC4D4 3C058019 */ lui $a1, %hi(D_80195218) # $a1, 0x8019 +/* 0CD0D8 800CC4D8 24A55218 */ addiu $a1, %lo(D_80195218) # addiu $a1, $a1, 0x5218 +/* 0CD0DC 800CC4DC 24845200 */ addiu $a0, %lo(D_80195200) # addiu $a0, $a0, 0x5200 +/* 0CD0E0 800CC4E0 0C033358 */ jal osCreateMesgQueue +/* 0CD0E4 800CC4E4 24060005 */ li $a2, 5 +/* 0CD0E8 800CC4E8 3C018019 */ lui $at, %hi(D_80195230) # $at, 0x8019 +/* 0CD0EC 800CC4EC 240F000D */ li $t7, 13 +/* 0CD0F0 800CC4F0 A42F5230 */ sh $t7, %lo(D_80195230)($at) +/* 0CD0F4 800CC4F4 A0205232 */ sb $zero, %lo(D_80195230+0x2)($at) +/* 0CD0F8 800CC4F8 AC205234 */ sw $zero, %lo(D_80195230+0x4)($at) +/* 0CD0FC 800CC4FC 3C018019 */ lui $at, %hi(D_80195248) # $at, 0x8019 +/* 0CD100 800CC500 2418000E */ li $t8, 14 +/* 0CD104 800CC504 3C058019 */ lui $a1, %hi(D_80195200) # $a1, 0x8019 +/* 0CD108 800CC508 3C068019 */ lui $a2, %hi(D_80195230) # $a2, 0x8019 +/* 0CD10C 800CC50C A4385248 */ sh $t8, %lo(D_80195248)($at) +/* 0CD110 800CC510 A020524A */ sb $zero, %lo(D_80195248+0x2)($at) +/* 0CD114 800CC514 AC20524C */ sw $zero, %lo(D_80195248+0x4)($at) +/* 0CD118 800CC518 24C65230 */ addiu $a2, %lo(D_80195230) # addiu $a2, $a2, 0x5230 +/* 0CD11C 800CC51C 24A55200 */ addiu $a1, %lo(D_80195200) # addiu $a1, $a1, 0x5200 +/* 0CD120 800CC520 0C033380 */ jal osSetEventMesg +/* 0CD124 800CC524 24040007 */ li $a0, 7 +/* 0CD128 800CC528 3C058019 */ lui $a1, %hi(D_80195200) # $a1, 0x8019 +/* 0CD12C 800CC52C 3C068019 */ lui $a2, %hi(D_80195248) # $a2, 0x8019 +/* 0CD130 800CC530 24C65248 */ addiu $a2, %lo(D_80195248) # addiu $a2, $a2, 0x5248 +/* 0CD134 800CC534 24A55200 */ addiu $a1, %lo(D_80195200) # addiu $a1, $a1, 0x5200 +/* 0CD138 800CC538 0C033380 */ jal osSetEventMesg +/* 0CD13C 800CC53C 24040003 */ li $a0, 3 +/* 0CD140 800CC540 2419FFFF */ li $t9, -1 +/* 0CD144 800CC544 AFB90028 */ sw $t9, 0x28($sp) +/* 0CD148 800CC548 0C034A84 */ jal osGetThreadPri +/* 0CD14C 800CC54C 00002025 */ move $a0, $zero +/* 0CD150 800CC550 AFA20024 */ sw $v0, 0x24($sp) +/* 0CD154 800CC554 8FA80024 */ lw $t0, 0x24($sp) +/* 0CD158 800CC558 8FA90030 */ lw $t1, 0x30($sp) +/* 0CD15C 800CC55C 0109082A */ slt $at, $t0, $t1 +/* 0CD160 800CC560 10200005 */ beqz $at, .L800CC578 +/* 0CD164 800CC564 00000000 */ nop +/* 0CD168 800CC568 AFA80028 */ sw $t0, 0x28($sp) +/* 0CD16C 800CC56C 00002025 */ move $a0, $zero +/* 0CD170 800CC570 0C033320 */ jal osSetThreadPri +/* 0CD174 800CC574 01202825 */ move $a1, $t1 +.L800CC578: +/* 0CD178 800CC578 0C0346AC */ jal __osDisableInt +/* 0CD17C 800CC57C 00000000 */ nop +/* 0CD180 800CC580 3C01800F */ lui $at, %hi(viMgrMainArgs) # $at, 0x800f +/* 0CD184 800CC584 3C0C8019 */ lui $t4, %hi(D_80195200) # $t4, 0x8019 +/* 0CD188 800CC588 3C0B8019 */ lui $t3, %hi(D_80194050) # $t3, 0x8019 +/* 0CD18C 800CC58C 258C5200 */ addiu $t4, %lo(D_80195200) # addiu $t4, $t4, 0x5200 +/* 0CD190 800CC590 240A0001 */ li $t2, 1 +/* 0CD194 800CC594 256B4050 */ addiu $t3, %lo(D_80194050) # addiu $t3, $t3, 0x4050 +/* 0CD198 800CC598 AC2AA600 */ sw $t2, %lo(viMgrMainArgs)($at) +/* 0CD19C 800CC59C AC2BA604 */ sw $t3, %lo(viMgrMainArgs+0x4)($at) +/* 0CD1A0 800CC5A0 AC2CA608 */ sw $t4, %lo(viMgrMainArgs+0x8)($at) +/* 0CD1A4 800CC5A4 AC2CA60C */ sw $t4, %lo(viMgrMainArgs+0xC)($at) +/* 0CD1A8 800CC5A8 3C0D8019 */ lui $t5, %hi(D_80194200) # $t5, 0x8019 +/* 0CD1AC 800CC5AC 8FAF0030 */ lw $t7, 0x30($sp) +/* 0CD1B0 800CC5B0 3C01800F */ lui $at, %hi(D_800EA610) # $at, 0x800f +/* 0CD1B4 800CC5B4 25AD4200 */ addiu $t5, %lo(D_80194200) # addiu $t5, $t5, 0x4200 +/* 0CD1B8 800CC5B8 25AE1000 */ addiu $t6, $t5, 0x1000 +/* 0CD1BC 800CC5BC 3C06800D */ lui $a2, %hi(__osViDevMgrMain) # $a2, 0x800d +/* 0CD1C0 800CC5C0 3C07800F */ lui $a3, %hi(viMgrMainArgs) # $a3, 0x800f +/* 0CD1C4 800CC5C4 AFA2002C */ sw $v0, 0x2c($sp) +/* 0CD1C8 800CC5C8 AC20A610 */ sw $zero, %lo(D_800EA610)($at) +/* 0CD1CC 800CC5CC AC20A614 */ sw $zero, %lo(D_800EA610+0x4)($at) +/* 0CD1D0 800CC5D0 AC20A618 */ sw $zero, %lo(D_800EA610+0x8)($at) +/* 0CD1D4 800CC5D4 24E7A600 */ addiu $a3, %lo(viMgrMainArgs) # addiu $a3, $a3, -0x5a00 +/* 0CD1D8 800CC5D8 24C6C638 */ addiu $a2, %lo(__osViDevMgrMain) # addiu $a2, $a2, -0x39c8 +/* 0CD1DC 800CC5DC AFAE0010 */ sw $t6, 0x10($sp) +/* 0CD1E0 800CC5E0 01602025 */ move $a0, $t3 +/* 0CD1E4 800CC5E4 00002825 */ move $a1, $zero +/* 0CD1E8 800CC5E8 0C032FDC */ jal osCreateThread +/* 0CD1EC 800CC5EC AFAF0014 */ sw $t7, 0x14($sp) +/* 0CD1F0 800CC5F0 0C034A8C */ jal __osViInit +/* 0CD1F4 800CC5F4 00000000 */ nop +/* 0CD1F8 800CC5F8 3C048019 */ lui $a0, %hi(D_80194050) # $a0, 0x8019 +/* 0CD1FC 800CC5FC 0C0330D8 */ jal osStartThread +/* 0CD200 800CC600 24844050 */ addiu $a0, %lo(D_80194050) # addiu $a0, $a0, 0x4050 +/* 0CD204 800CC604 0C0346B4 */ jal __osRestoreInt +/* 0CD208 800CC608 8FA4002C */ lw $a0, 0x2c($sp) +/* 0CD20C 800CC60C 8FB80028 */ lw $t8, 0x28($sp) +/* 0CD210 800CC610 2401FFFF */ li $at, -1 +/* 0CD214 800CC614 13010004 */ beq $t8, $at, .L800CC628 +/* 0CD218 800CC618 00000000 */ nop +/* 0CD21C 800CC61C 00002025 */ move $a0, $zero +/* 0CD220 800CC620 0C033320 */ jal osSetThreadPri +/* 0CD224 800CC624 03002825 */ move $a1, $t8 +.L800CC628: +/* 0CD228 800CC628 8FBF001C */ lw $ra, 0x1c($sp) +/* 0CD22C 800CC62C 27BD0030 */ addiu $sp, $sp, 0x30 +/* 0CD230 800CC630 03E00008 */ jr $ra +/* 0CD234 800CC634 00000000 */ nop + +glabel __osViDevMgrMain +/* 0CD238 800CC638 27BDFFC8 */ addiu $sp, $sp, -0x38 +/* 0CD23C 800CC63C AFBF001C */ sw $ra, 0x1c($sp) +/* 0CD240 800CC640 AFA40038 */ sw $a0, 0x38($sp) +/* 0CD244 800CC644 AFB00018 */ sw $s0, 0x18($sp) +/* 0CD248 800CC648 AFA0002C */ sw $zero, 0x2c($sp) +/* 0CD24C 800CC64C 0C034AE0 */ jal __osViGetCurrentContext +/* 0CD250 800CC650 AFA00028 */ sw $zero, 0x28($sp) +/* 0CD254 800CC654 AFA20034 */ sw $v0, 0x34($sp) +/* 0CD258 800CC658 8FAE0034 */ lw $t6, 0x34($sp) +/* 0CD25C 800CC65C 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 +/* 0CD260 800CC660 95CF0002 */ lhu $t7, 2($t6) +/* 0CD264 800CC664 15E00004 */ bnez $t7, .L800CC678 +/* 0CD268 800CC668 A42F5260 */ sh $t7, %lo(D_80195260)($at) +/* 0CD26C 800CC66C 24180001 */ li $t8, 1 +/* 0CD270 800CC670 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 +/* 0CD274 800CC674 A4385260 */ sh $t8, %lo(D_80195260)($at) +.L800CC678: +/* 0CD278 800CC678 8FB90038 */ lw $t9, 0x38($sp) +/* 0CD27C 800CC67C AFB90030 */ sw $t9, 0x30($sp) +.L800CC680: +/* 0CD280 800CC680 8FA80030 */ lw $t0, 0x30($sp) +/* 0CD284 800CC684 27A5002C */ addiu $a1, $sp, 0x2c +/* 0CD288 800CC688 24060001 */ li $a2, 1 +/* 0CD28C 800CC68C 0C0335D4 */ jal osRecvMesg +/* 0CD290 800CC690 8D04000C */ lw $a0, 0xc($t0) +/* 0CD294 800CC694 8FA9002C */ lw $t1, 0x2c($sp) +/* 0CD298 800CC698 2401000D */ li $at, 13 +/* 0CD29C 800CC69C 95300000 */ lhu $s0, ($t1) +/* 0CD2A0 800CC6A0 12010005 */ beq $s0, $at, .L800CC6B8 +/* 0CD2A4 800CC6A4 2401000E */ li $at, 14 +/* 0CD2A8 800CC6A8 12010047 */ beq $s0, $at, .L800CC7C8 +/* 0CD2AC 800CC6AC 00000000 */ nop +/* 0CD2B0 800CC6B0 1000FFF3 */ b .L800CC680 +/* 0CD2B4 800CC6B4 00000000 */ nop +.L800CC6B8: +/* 0CD2B8 800CC6B8 0C034AE4 */ jal __osViSwapContext +/* 0CD2BC 800CC6BC 00000000 */ nop +/* 0CD2C0 800CC6C0 3C0A8019 */ lui $t2, %hi(D_80195260) # $t2, 0x8019 +/* 0CD2C4 800CC6C4 954A5260 */ lhu $t2, %lo(D_80195260)($t2) +/* 0CD2C8 800CC6C8 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 +/* 0CD2CC 800CC6CC 254BFFFF */ addiu $t3, $t2, -1 +/* 0CD2D0 800CC6D0 316CFFFF */ andi $t4, $t3, 0xffff +/* 0CD2D4 800CC6D4 15800010 */ bnez $t4, .L800CC718 +/* 0CD2D8 800CC6D8 A42B5260 */ sh $t3, %lo(D_80195260)($at) +/* 0CD2DC 800CC6DC 0C034AE0 */ jal __osViGetCurrentContext +/* 0CD2E0 800CC6E0 00000000 */ nop +/* 0CD2E4 800CC6E4 AFA20034 */ sw $v0, 0x34($sp) +/* 0CD2E8 800CC6E8 8FAD0034 */ lw $t5, 0x34($sp) +/* 0CD2EC 800CC6EC 8DAE0010 */ lw $t6, 0x10($t5) +/* 0CD2F0 800CC6F0 11C00005 */ beqz $t6, .L800CC708 +/* 0CD2F4 800CC6F4 00000000 */ nop +/* 0CD2F8 800CC6F8 01C02025 */ move $a0, $t6 +/* 0CD2FC 800CC6FC 8DA50014 */ lw $a1, 0x14($t5) +/* 0CD300 800CC700 0C033630 */ jal osSendMesg +/* 0CD304 800CC704 00003025 */ move $a2, $zero +.L800CC708: +/* 0CD308 800CC708 8FAF0034 */ lw $t7, 0x34($sp) +/* 0CD30C 800CC70C 3C018019 */ lui $at, %hi(D_80195260) # $at, 0x8019 +/* 0CD310 800CC710 95F80002 */ lhu $t8, 2($t7) +/* 0CD314 800CC714 A4385260 */ sh $t8, %lo(D_80195260)($at) +.L800CC718: +/* 0CD318 800CC718 3C198019 */ lui $t9, %hi(__osViIntrCount) # $t9, 0x8019 +/* 0CD31C 800CC71C 8F39760C */ lw $t9, %lo(__osViIntrCount)($t9) +/* 0CD320 800CC720 8FA90028 */ lw $t1, 0x28($sp) +/* 0CD324 800CC724 3C018019 */ lui $at, %hi(__osViIntrCount) # $at, 0x8019 +/* 0CD328 800CC728 27280001 */ addiu $t0, $t9, 1 +/* 0CD32C 800CC72C 1120000C */ beqz $t1, .L800CC760 +/* 0CD330 800CC730 AC28760C */ sw $t0, %lo(__osViIntrCount)($at) +/* 0CD334 800CC734 0C034468 */ jal osGetCount +/* 0CD338 800CC738 00000000 */ nop +/* 0CD33C 800CC73C AFA20024 */ sw $v0, 0x24($sp) +/* 0CD340 800CC740 8FAA0024 */ lw $t2, 0x24($sp) +/* 0CD344 800CC744 240C0000 */ li $t4, 0 +/* 0CD348 800CC748 3C018019 */ lui $at, %hi(__osCurrentTime) # $at, 0x8019 +/* 0CD34C 800CC74C AC2C7600 */ sw $t4, %lo(__osCurrentTime)($at) +/* 0CD350 800CC750 3C018019 */ lui $at, %hi(__osCurrentTime) # $at, 0x8019 +/* 0CD354 800CC754 01406825 */ move $t5, $t2 +/* 0CD358 800CC758 AC2D7604 */ sw $t5, %lo(__osCurrentTime+ 4)($at) +/* 0CD35C 800CC75C AFA00028 */ sw $zero, 0x28($sp) +.L800CC760: +/* 0CD360 800CC760 3C0B8019 */ lui $t3, %hi(__osBaseCounter) # $t3, 0x8019 +/* 0CD364 800CC764 8D6B7608 */ lw $t3, %lo(__osBaseCounter)($t3) +/* 0CD368 800CC768 0C034468 */ jal osGetCount +/* 0CD36C 800CC76C AFAB0024 */ sw $t3, 0x24($sp) +/* 0CD370 800CC770 3C018019 */ lui $at, %hi(__osBaseCounter) # $at, 0x8019 +/* 0CD374 800CC774 AC227608 */ sw $v0, %lo(__osBaseCounter)($at) +/* 0CD378 800CC778 3C0E8019 */ lui $t6, %hi(__osBaseCounter) # $t6, 0x8019 +/* 0CD37C 800CC77C 8DCE7608 */ lw $t6, %lo(__osBaseCounter)($t6) +/* 0CD380 800CC780 8FAF0024 */ lw $t7, 0x24($sp) +/* 0CD384 800CC784 3C0B8019 */ lui $t3, %hi(__osCurrentTime) # $t3, 0x8019 +/* 0CD388 800CC788 8D6B7604 */ lw $t3, %lo(__osCurrentTime + 4)($t3) +/* 0CD38C 800CC78C 01CFC023 */ subu $t8, $t6, $t7 +/* 0CD390 800CC790 03004825 */ move $t1, $t8 +/* 0CD394 800CC794 3C0A8019 */ lui $t2, %hi(__osCurrentTime) # $t2, 0x8019 +/* 0CD398 800CC798 012B6821 */ addu $t5, $t1, $t3 +/* 0CD39C 800CC79C 8D4A7600 */ lw $t2, %lo(__osCurrentTime)($t2) +/* 0CD3A0 800CC7A0 24080000 */ li $t0, 0 +/* 0CD3A4 800CC7A4 01AB082B */ sltu $at, $t5, $t3 +/* 0CD3A8 800CC7A8 00286021 */ addu $t4, $at, $t0 +/* 0CD3AC 800CC7AC 3C018019 */ lui $at, %hi(__osCurrentTime) # $at, 0x8019 +/* 0CD3B0 800CC7B0 018A6021 */ addu $t4, $t4, $t2 +/* 0CD3B4 800CC7B4 AC2C7600 */ sw $t4, %lo(__osCurrentTime)($at) +/* 0CD3B8 800CC7B8 3C018019 */ lui $at, %hi(__osCurrentTime) # $at, 0x8019 +/* 0CD3BC 800CC7BC AFB80024 */ sw $t8, 0x24($sp) +/* 0CD3C0 800CC7C0 1000FFAF */ b .L800CC680 +/* 0CD3C4 800CC7C4 AC2D7604 */ sw $t5, %lo(__osCurrentTime + 4)($at) +.L800CC7C8: +/* 0CD3C8 800CC7C8 0C0349A7 */ jal __osTimerInterrupt +/* 0CD3CC 800CC7CC 00000000 */ nop +/* 0CD3D0 800CC7D0 1000FFAB */ b .L800CC680 +/* 0CD3D4 800CC7D4 00000000 */ nop +/* 0CD3D8 800CC7D8 00000000 */ nop +/* 0CD3DC 800CC7DC 00000000 */ nop +/* 0CD3E0 800CC7E0 00000000 */ nop +/* 0CD3E4 800CC7E4 00000000 */ nop +/* 0CD3E8 800CC7E8 00000000 */ nop +/* 0CD3EC 800CC7EC 00000000 */ nop +/* 0CD3F0 800CC7F0 8FBF001C */ lw $ra, 0x1c($sp) +/* 0CD3F4 800CC7F4 8FB00018 */ lw $s0, 0x18($sp) +/* 0CD3F8 800CC7F8 27BD0038 */ addiu $sp, $sp, 0x38 +/* 0CD3FC 800CC7FC 03E00008 */ jr $ra +/* 0CD400 800CC800 00000000 */ nop + +/* 0CD404 800CC804 00000000 */ nop +/* 0CD408 800CC808 00000000 */ nop +/* 0CD40C 800CC80C 00000000 */ nop +/* 0CD410 800CC810 00000000 */ nop +/* 0CD414 800CC814 00000000 */ nop +/* 0CD418 800CC818 00000000 */ nop +/* 0CD41C 800CC81C 00000000 */ nop +/* 0CD420 800CC820 00000000 */ nop +/* 0CD424 800CC824 00000000 */ nop +/* 0CD428 800CC828 00000000 */ nop +/* 0CD42C 800CC82C 00000000 */ nop +/* 0CD430 800CC830 00000000 */ nop +/* 0CD434 800CC834 00000000 */ nop +/* 0CD438 800CC838 00000000 */ nop +/* 0CD43C 800CC83C 00000000 */ nop +/* 0CD440 800CC840 00000000 */ nop +/* 0CD444 800CC844 00000000 */ nop +/* 0CD448 800CC848 00000000 */ nop +/* 0CD44C 800CC84C 00000000 */ nop \ No newline at end of file diff --git a/asm/os/osEeprom.s b/asm/os/osEeprom.s new file mode 100644 index 000000000..29ddd385c --- /dev/null +++ b/asm/os/osEeprom.s @@ -0,0 +1,183 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osEepromLongWrite +/* 0D0C50 800D0050 27BDFFC0 */ addiu $sp, $sp, -0x40 +/* 0D0C54 800D0054 AFA50044 */ sw $a1, 0x44($sp) +/* 0D0C58 800D0058 93AE0047 */ lbu $t6, 0x47($sp) +/* 0D0C5C 800D005C AFBF0024 */ sw $ra, 0x24($sp) +/* 0D0C60 800D0060 AFA40040 */ sw $a0, 0x40($sp) +/* 0D0C64 800D0064 29C10041 */ slti $at, $t6, 0x41 +/* 0D0C68 800D0068 AFA60048 */ sw $a2, 0x48($sp) +/* 0D0C6C 800D006C AFA7004C */ sw $a3, 0x4c($sp) +/* 0D0C70 800D0070 14200003 */ bnez $at, .L800D0080 +/* 0D0C74 800D0074 AFA0003C */ sw $zero, 0x3c($sp) +/* 0D0C78 800D0078 10000040 */ b .L800D017C +/* 0D0C7C 800D007C 2402FFFF */ li $v0, -1 +.L800D0080: +/* 0D0C80 800D0080 8FAF004C */ lw $t7, 0x4c($sp) +/* 0D0C84 800D0084 19E0003C */ blez $t7, .L800D0178 +/* 0D0C88 800D0088 00000000 */ nop +.L800D008C: +/* 0D0C8C 800D008C 8FA40040 */ lw $a0, 0x40($sp) +/* 0D0C90 800D0090 93A50047 */ lbu $a1, 0x47($sp) +/* 0D0C94 800D0094 0C035004 */ jal osEepromWrite +/* 0D0C98 800D0098 8FA60048 */ lw $a2, 0x48($sp) +/* 0D0C9C 800D009C AFA2003C */ sw $v0, 0x3c($sp) +/* 0D0CA0 800D00A0 8FB8003C */ lw $t8, 0x3c($sp) +/* 0D0CA4 800D00A4 13000003 */ beqz $t8, .L800D00B4 +/* 0D0CA8 800D00A8 00000000 */ nop +/* 0D0CAC 800D00AC 10000033 */ b .L800D017C +/* 0D0CB0 800D00B0 03001025 */ move $v0, $t8 +.L800D00B4: +/* 0D0CB4 800D00B4 8FB9004C */ lw $t9, 0x4c($sp) +/* 0D0CB8 800D00B8 93A90047 */ lbu $t1, 0x47($sp) +/* 0D0CBC 800D00BC 8FAB0048 */ lw $t3, 0x48($sp) +/* 0D0CC0 800D00C0 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f +/* 0D0CC4 800D00C4 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f +/* 0D0CC8 800D00C8 2728FFF8 */ addiu $t0, $t9, -8 +/* 0D0CCC 800D00CC 252A0001 */ addiu $t2, $t1, 1 +/* 0D0CD0 800D00D0 256C0008 */ addiu $t4, $t3, 8 +/* 0D0CD4 800D00D4 AFA8004C */ sw $t0, 0x4c($sp) +/* 0D0CD8 800D00D8 A3AA0047 */ sb $t2, 0x47($sp) +/* 0D0CDC 800D00DC AFAC0048 */ sw $t4, 0x48($sp) +/* 0D0CE0 800D00E0 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) +/* 0D0CE4 800D00E4 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) +/* 0D0CE8 800D00E8 24040000 */ li $a0, 0 +/* 0D0CEC 800D00EC 0C0337F6 */ jal __ll_mul +/* 0D0CF0 800D00F0 24052EE0 */ li $a1, 12000 +/* 0D0CF4 800D00F4 AFA20028 */ sw $v0, 0x28($sp) +/* 0D0CF8 800D00F8 AFA3002C */ sw $v1, 0x2c($sp) +/* 0D0CFC 800D00FC 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf +/* 0D0D00 800D0100 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 +/* 0D0D04 800D0104 8FA5002C */ lw $a1, 0x2c($sp) +/* 0D0D08 800D0108 8FA40028 */ lw $a0, 0x28($sp) +/* 0D0D0C 800D010C 0C0337B6 */ jal __ull_div +/* 0D0D10 800D0110 24060000 */ li $a2, 0 +/* 0D0D14 800D0114 3C0D8019 */ lui $t5, %hi(D_80196568) # $t5, 0x8019 +/* 0D0D18 800D0118 3C188019 */ lui $t8, %hi(D_80196580) # $t8, 0x8019 +/* 0D0D1C 800D011C 27186580 */ addiu $t8, %lo(D_80196580) # addiu $t8, $t8, 0x6580 +/* 0D0D20 800D0120 25AD6568 */ addiu $t5, %lo(D_80196568) # addiu $t5, $t5, 0x6568 +/* 0D0D24 800D0124 AFA20030 */ sw $v0, 0x30($sp) +/* 0D0D28 800D0128 AFA30034 */ sw $v1, 0x34($sp) +/* 0D0D2C 800D012C 3C048019 */ lui $a0, %hi(D_80196548) # $a0, 0x8019 +/* 0D0D30 800D0130 240E0000 */ li $t6, 0 +/* 0D0D34 800D0134 240F0000 */ li $t7, 0 +/* 0D0D38 800D0138 AFAF0014 */ sw $t7, 0x14($sp) +/* 0D0D3C 800D013C AFAE0010 */ sw $t6, 0x10($sp) +/* 0D0D40 800D0140 24846548 */ addiu $a0, %lo(D_80196548) # addiu $a0, $a0, 0x6548 +/* 0D0D44 800D0144 8FA70034 */ lw $a3, 0x34($sp) +/* 0D0D48 800D0148 8FA60030 */ lw $a2, 0x30($sp) +/* 0D0D4C 800D014C AFAD0018 */ sw $t5, 0x18($sp) +/* 0D0D50 800D0150 0C034E70 */ jal osSetTimer +/* 0D0D54 800D0154 AFB8001C */ sw $t8, 0x1c($sp) +/* 0D0D58 800D0158 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 +/* 0D0D5C 800D015C 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 +/* 0D0D60 800D0160 00002825 */ move $a1, $zero +/* 0D0D64 800D0164 0C0335D4 */ jal osRecvMesg +/* 0D0D68 800D0168 24060001 */ li $a2, 1 +/* 0D0D6C 800D016C 8FB9004C */ lw $t9, 0x4c($sp) +/* 0D0D70 800D0170 1F20FFC6 */ bgtz $t9, .L800D008C +/* 0D0D74 800D0174 00000000 */ nop +.L800D0178: +/* 0D0D78 800D0178 8FA2003C */ lw $v0, 0x3c($sp) +.L800D017C: +/* 0D0D7C 800D017C 8FBF0024 */ lw $ra, 0x24($sp) +/* 0D0D80 800D0180 27BD0040 */ addiu $sp, $sp, 0x40 +/* 0D0D84 800D0184 03E00008 */ jr $ra +/* 0D0D88 800D0188 00000000 */ nop + +/* 0D0D8C 800D018C 00000000 */ nop +glabel osEepromLongRead +/* 0D0D90 800D0190 27BDFFC0 */ addiu $sp, $sp, -0x40 +/* 0D0D94 800D0194 AFA50044 */ sw $a1, 0x44($sp) +/* 0D0D98 800D0198 93AE0047 */ lbu $t6, 0x47($sp) +/* 0D0D9C 800D019C AFBF0024 */ sw $ra, 0x24($sp) +/* 0D0DA0 800D01A0 AFA40040 */ sw $a0, 0x40($sp) +/* 0D0DA4 800D01A4 29C10041 */ slti $at, $t6, 0x41 +/* 0D0DA8 800D01A8 AFA60048 */ sw $a2, 0x48($sp) +/* 0D0DAC 800D01AC AFA7004C */ sw $a3, 0x4c($sp) +/* 0D0DB0 800D01B0 14200003 */ bnez $at, .L800D01C0 +/* 0D0DB4 800D01B4 AFA0003C */ sw $zero, 0x3c($sp) +/* 0D0DB8 800D01B8 10000040 */ b .L800D02BC +/* 0D0DBC 800D01BC 2402FFFF */ li $v0, -1 +.L800D01C0: +/* 0D0DC0 800D01C0 8FAF004C */ lw $t7, 0x4c($sp) +/* 0D0DC4 800D01C4 19E0003C */ blez $t7, .L800D02B8 +/* 0D0DC8 800D01C8 00000000 */ nop +.L800D01CC: +/* 0D0DCC 800D01CC 8FA40040 */ lw $a0, 0x40($sp) +/* 0D0DD0 800D01D0 93A50047 */ lbu $a1, 0x47($sp) +/* 0D0DD4 800D01D4 0C035DA8 */ jal osEepromRead +/* 0D0DD8 800D01D8 8FA60048 */ lw $a2, 0x48($sp) +/* 0D0DDC 800D01DC AFA2003C */ sw $v0, 0x3c($sp) +/* 0D0DE0 800D01E0 8FB8003C */ lw $t8, 0x3c($sp) +/* 0D0DE4 800D01E4 13000003 */ beqz $t8, .L800D01F4 +/* 0D0DE8 800D01E8 00000000 */ nop +/* 0D0DEC 800D01EC 10000033 */ b .L800D02BC +/* 0D0DF0 800D01F0 03001025 */ move $v0, $t8 +.L800D01F4: +/* 0D0DF4 800D01F4 8FB9004C */ lw $t9, 0x4c($sp) +/* 0D0DF8 800D01F8 93A90047 */ lbu $t1, 0x47($sp) +/* 0D0DFC 800D01FC 8FAB0048 */ lw $t3, 0x48($sp) +/* 0D0E00 800D0200 3C06800F */ lui $a2, %hi(osClockRate) # $a2, 0x800f +/* 0D0E04 800D0204 3C07800F */ lui $a3, %hi(osClockRate + 4) # $a3, 0x800f +/* 0D0E08 800D0208 2728FFF8 */ addiu $t0, $t9, -8 +/* 0D0E0C 800D020C 252A0001 */ addiu $t2, $t1, 1 +/* 0D0E10 800D0210 256C0008 */ addiu $t4, $t3, 8 +/* 0D0E14 800D0214 AFA8004C */ sw $t0, 0x4c($sp) +/* 0D0E18 800D0218 A3AA0047 */ sb $t2, 0x47($sp) +/* 0D0E1C 800D021C AFAC0048 */ sw $t4, 0x48($sp) +/* 0D0E20 800D0220 8CE7A5E4 */ lw $a3, %lo(osClockRate + 4)($a3) +/* 0D0E24 800D0224 8CC6A5E0 */ lw $a2, %lo(osClockRate)($a2) +/* 0D0E28 800D0228 24040000 */ li $a0, 0 +/* 0D0E2C 800D022C 0C0337F6 */ jal __ll_mul +/* 0D0E30 800D0230 24052EE0 */ li $a1, 12000 +/* 0D0E34 800D0234 AFA20028 */ sw $v0, 0x28($sp) +/* 0D0E38 800D0238 AFA3002C */ sw $v1, 0x2c($sp) +/* 0D0E3C 800D023C 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf +/* 0D0E40 800D0240 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 +/* 0D0E44 800D0244 8FA5002C */ lw $a1, 0x2c($sp) +/* 0D0E48 800D0248 8FA40028 */ lw $a0, 0x28($sp) +/* 0D0E4C 800D024C 0C0337B6 */ jal __ull_div +/* 0D0E50 800D0250 24060000 */ li $a2, 0 +/* 0D0E54 800D0254 3C0D8019 */ lui $t5, %hi(D_80196568) # $t5, 0x8019 +/* 0D0E58 800D0258 3C188019 */ lui $t8, %hi(D_80196580) # $t8, 0x8019 +/* 0D0E5C 800D025C 27186580 */ addiu $t8, %lo(D_80196580) # addiu $t8, $t8, 0x6580 +/* 0D0E60 800D0260 25AD6568 */ addiu $t5, %lo(D_80196568) # addiu $t5, $t5, 0x6568 +/* 0D0E64 800D0264 AFA20030 */ sw $v0, 0x30($sp) +/* 0D0E68 800D0268 AFA30034 */ sw $v1, 0x34($sp) +/* 0D0E6C 800D026C 3C048019 */ lui $a0, %hi(D_80196548) # $a0, 0x8019 +/* 0D0E70 800D0270 240E0000 */ li $t6, 0 +/* 0D0E74 800D0274 240F0000 */ li $t7, 0 +/* 0D0E78 800D0278 AFAF0014 */ sw $t7, 0x14($sp) +/* 0D0E7C 800D027C AFAE0010 */ sw $t6, 0x10($sp) +/* 0D0E80 800D0280 24846548 */ addiu $a0, %lo(D_80196548) # addiu $a0, $a0, 0x6548 +/* 0D0E84 800D0284 8FA70034 */ lw $a3, 0x34($sp) +/* 0D0E88 800D0288 8FA60030 */ lw $a2, 0x30($sp) +/* 0D0E8C 800D028C AFAD0018 */ sw $t5, 0x18($sp) +/* 0D0E90 800D0290 0C034E70 */ jal osSetTimer +/* 0D0E94 800D0294 AFB8001C */ sw $t8, 0x1c($sp) +/* 0D0E98 800D0298 3C048019 */ lui $a0, %hi(D_80196568) # $a0, 0x8019 +/* 0D0E9C 800D029C 24846568 */ addiu $a0, %lo(D_80196568) # addiu $a0, $a0, 0x6568 +/* 0D0EA0 800D02A0 00002825 */ move $a1, $zero +/* 0D0EA4 800D02A4 0C0335D4 */ jal osRecvMesg +/* 0D0EA8 800D02A8 24060001 */ li $a2, 1 +/* 0D0EAC 800D02AC 8FB9004C */ lw $t9, 0x4c($sp) +/* 0D0EB0 800D02B0 1F20FFC6 */ bgtz $t9, .L800D01CC +/* 0D0EB4 800D02B4 00000000 */ nop +.L800D02B8: +/* 0D0EB8 800D02B8 8FA2003C */ lw $v0, 0x3c($sp) +.L800D02BC: +/* 0D0EBC 800D02BC 8FBF0024 */ lw $ra, 0x24($sp) +/* 0D0EC0 800D02C0 27BD0040 */ addiu $sp, $sp, 0x40 +/* 0D0EC4 800D02C4 03E00008 */ jr $ra +/* 0D0EC8 800D02C8 00000000 */ nop + +/* 0D0ECC 800D02CC 00000000 */ nop diff --git a/asm/os/osGetCount.s b/asm/os/osGetCount.s new file mode 100644 index 000000000..58bd36299 --- /dev/null +++ b/asm/os/osGetCount.s @@ -0,0 +1,15 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel osGetCount + mfc0 $v0, $9 + jr $ra + nop + + nop + diff --git a/asm/os/osInvalDCache.s b/asm/os/osInvalDCache.s new file mode 100644 index 000000000..e73fceb46 --- /dev/null +++ b/asm/os/osInvalDCache.s @@ -0,0 +1,62 @@ +# handwritten +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osInvalDCache +/* 0CE780 800CDB80 18A0001F */ blez $a1, .L800CDC00 +/* 0CE784 800CDB84 00000000 */ nop +/* 0CE788 800CDB88 240B2000 */ li $t3, 8192 +/* 0CE78C 800CDB8C 00AB082B */ sltu $at, $a1, $t3 +/* 0CE790 800CDB90 1020001D */ beqz $at, .L800CDC08 +/* 0CE794 800CDB94 00000000 */ nop +/* 0CE798 800CDB98 00804025 */ move $t0, $a0 +/* 0CE79C 800CDB9C 00854821 */ addu $t1, $a0, $a1 +/* 0CE7A0 800CDBA0 0109082B */ sltu $at, $t0, $t1 +/* 0CE7A4 800CDBA4 10200016 */ beqz $at, .L800CDC00 +/* 0CE7A8 800CDBA8 00000000 */ nop +/* 0CE7AC 800CDBAC 310A000F */ andi $t2, $t0, 0xf +/* 0CE7B0 800CDBB0 11400007 */ beqz $t2, .L800CDBD0 +/* 0CE7B4 800CDBB4 2529FFF0 */ addiu $t1, $t1, -0x10 +/* 0CE7B8 800CDBB8 010A4023 */ subu $t0, $t0, $t2 +/* 0CE7BC 800CDBBC BD150000 */ cache 0x15, ($t0) +/* 0CE7C0 800CDBC0 0109082B */ sltu $at, $t0, $t1 +/* 0CE7C4 800CDBC4 1020000E */ beqz $at, .L800CDC00 +/* 0CE7C8 800CDBC8 00000000 */ nop +/* 0CE7CC 800CDBCC 25080010 */ addiu $t0, $t0, 0x10 +.L800CDBD0: +/* 0CE7D0 800CDBD0 312A000F */ andi $t2, $t1, 0xf +/* 0CE7D4 800CDBD4 11400006 */ beqz $t2, .L800CDBF0 +/* 0CE7D8 800CDBD8 00000000 */ nop +/* 0CE7DC 800CDBDC 012A4823 */ subu $t1, $t1, $t2 +/* 0CE7E0 800CDBE0 BD350010 */ cache 0x15, 0x10($t1) +/* 0CE7E4 800CDBE4 0128082B */ sltu $at, $t1, $t0 +/* 0CE7E8 800CDBE8 14200005 */ bnez $at, .L800CDC00 +/* 0CE7EC 800CDBEC 00000000 */ nop +.L800CDBF0: +/* 0CE7F0 800CDBF0 BD110000 */ cache 0x11, ($t0) +/* 0CE7F4 800CDBF4 0109082B */ sltu $at, $t0, $t1 +/* 0CE7F8 800CDBF8 1420FFFD */ bnez $at, .L800CDBF0 +/* 0CE7FC 800CDBFC 25080010 */ addiu $t0, $t0, 0x10 +.L800CDC00: +/* 0CE800 800CDC00 03E00008 */ jr $ra +/* 0CE804 800CDC04 00000000 */ nop + +.L800CDC08: +/* 0CE808 800CDC08 3C088000 */ li $t0, 0x80000000 +/* 0CE80C 800CDC0C 010B4821 */ addu $t1, $t0, $t3 +/* 0CE810 800CDC10 2529FFF0 */ addiu $t1, $t1, -0x10 +.L800CDC14: +/* 0CE814 800CDC14 BD010000 */ cache 1, ($t0) +/* 0CE818 800CDC18 0109082B */ sltu $at, $t0, $t1 +/* 0CE81C 800CDC1C 1420FFFD */ bnez $at, .L800CDC14 +/* 0CE820 800CDC20 25080010 */ addiu $t0, $t0, 0x10 +/* 0CE824 800CDC24 03E00008 */ jr $ra +/* 0CE828 800CDC28 00000000 */ nop + +/* 0CE82C 800CDC2C 00000000 */ nop diff --git a/asm/os/osInvalICache.s b/asm/os/osInvalICache.s new file mode 100644 index 000000000..ad67b33a7 --- /dev/null +++ b/asm/os/osInvalICache.s @@ -0,0 +1,50 @@ +# handwritten +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + + +glabel osInvalICache +/* 0CE700 800CDB00 18A00011 */ blez $a1, .L800CDB48 +/* 0CE704 800CDB04 00000000 */ nop +/* 0CE708 800CDB08 240B4000 */ li $t3, 16384 +/* 0CE70C 800CDB0C 00AB082B */ sltu $at, $a1, $t3 +/* 0CE710 800CDB10 1020000F */ beqz $at, .L800CDB50 +/* 0CE714 800CDB14 00000000 */ nop +/* 0CE718 800CDB18 00804025 */ move $t0, $a0 +/* 0CE71C 800CDB1C 00854821 */ addu $t1, $a0, $a1 +/* 0CE720 800CDB20 0109082B */ sltu $at, $t0, $t1 +/* 0CE724 800CDB24 10200008 */ beqz $at, .L800CDB48 +/* 0CE728 800CDB28 00000000 */ nop +/* 0CE72C 800CDB2C 310A001F */ andi $t2, $t0, 0x1f +/* 0CE730 800CDB30 2529FFE0 */ addiu $t1, $t1, -0x20 +/* 0CE734 800CDB34 010A4023 */ subu $t0, $t0, $t2 +.L800CDB38: +/* 0CE738 800CDB38 BD100000 */ cache 0x10, ($t0) +/* 0CE73C 800CDB3C 0109082B */ sltu $at, $t0, $t1 +/* 0CE740 800CDB40 1420FFFD */ bnez $at, .L800CDB38 +/* 0CE744 800CDB44 25080020 */ addiu $t0, $t0, 0x20 +.L800CDB48: +/* 0CE748 800CDB48 03E00008 */ jr $ra +/* 0CE74C 800CDB4C 00000000 */ nop + +.L800CDB50: +/* 0CE750 800CDB50 3C088000 */ li $t0, 0x80000000 +/* 0CE754 800CDB54 010B4821 */ addu $t1, $t0, $t3 +/* 0CE758 800CDB58 2529FFE0 */ addiu $t1, $t1, -0x20 +.L800CDB5C: +/* 0CE75C 800CDB5C BD000000 */ cache 0, ($t0) +/* 0CE760 800CDB60 0109082B */ sltu $at, $t0, $t1 +/* 0CE764 800CDB64 1420FFFD */ bnez $at, .L800CDB5C +/* 0CE768 800CDB68 25080020 */ addiu $t0, $t0, 0x20 +/* 0CE76C 800CDB6C 03E00008 */ jr $ra +/* 0CE770 800CDB70 00000000 */ nop + +/* 0CE774 800CDB74 00000000 */ nop +/* 0CE778 800CDB78 00000000 */ nop +/* 0CE77C 800CDB7C 00000000 */ nop diff --git a/asm/os/osMapTLBRdb.s b/asm/os/osMapTLBRdb.s new file mode 100644 index 000000000..6753280d6 --- /dev/null +++ b/asm/os/osMapTLBRdb.s @@ -0,0 +1,36 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel osMapTLBRdb + mfc0 $t0, $10 + li $t1, 31 + mtc0 $t1, $0 + mtc0 $zero, $5 + li $t2, 23 + lui $t1, 0xc000 + mtc0 $t1, $10 + lui $t1, 0x8000 + srl $t3, $t1, 6 + or $t3, $t3, $t2 + mtc0 $t3, $2 + li $t1, 1 + mtc0 $t1, $3 + nop + tlbwi + nop + nop + nop + nop + mtc0 $t0, $10 + jr $ra + nop + + nop + nop + diff --git a/asm/os/osSetIntMask.s b/asm/os/osSetIntMask.s new file mode 100644 index 000000000..9c442e66d --- /dev/null +++ b/asm/os/osSetIntMask.s @@ -0,0 +1,140 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.eqv MI_INTR_MASK_REG, 0xA430000C + +.set VERSION_EU_SH, 1 + +.section .text, "ax" + +glabel osSetIntMask +.ifdef VERSION_EU_SH + mfc0 $t4, $12 + andi $v0, $t4, 0xff01 + lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8030 + addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, 0x208c + lw $t3, ($t0) + li $at, -1 + xor $t0, $t3, $at + andi $t0, $t0, 0xff00 + or $v0, $v0, $t0 +.else + mfc0 $t1, $12 + andi $v0, $t1, 0xff01 +.endif + lui $t2, %hi(MI_INTR_MASK_REG) # $t2, 0xa430 + lw $t2, %lo(MI_INTR_MASK_REG)($t2) +.ifdef VERSION_EU_SH + beqz $t2, .L80200074 + srl $t1, $t3, 0x10 + li $at, -1 + xor $t1, $t1, $at + andi $t1, $t1, 0x3f + or $t2, $t2, $t1 +.L80200074: +.endif + sll $t2, $t2, 0x10 + or $v0, $v0, $t2 + lui $at, 0x3f + and $t0, $a0, $at +.ifdef VERSION_EU_SH + and $t0, $t0, $t3 +.endif + srl $t0, $t0, 0xf + lui $t2, %hi(D_800F3C10) + addu $t2, $t2, $t0 + lhu $t2, %lo(D_800F3C10)($t2) + lui $at, %hi(MI_INTR_MASK_REG) # $at, 0xa430 + sw $t2, %lo(MI_INTR_MASK_REG)($at) + andi $t0, $a0, 0xff01 +.ifdef VERSION_EU_SH + andi $t1, $t3, 0xff00 + and $t0, $t0, $t1 +.endif + lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff + ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff +.ifdef VERSION_EU_SH + and $t4, $t4, $at + or $t4, $t4, $t0 + mtc0 $t4, $12 +.else + and $t1, $t1, $at + or $t1, $t1, $t0 + mtc0 $t1, $12 +.endif + nop + nop + jr $ra + nop + + +.section .rodata + +glabel D_800F3C10 +.half 0x0555 +.half 0x0556 +.half 0x0559 +.half 0x055A +.half 0x0565 +.half 0x0566 +.half 0x0569 +.half 0x056A +.half 0x0595 +.half 0x0596 +.half 0x0599 +.half 0x059A +.half 0x05A5 +.half 0x05A6 +.half 0x05A9 +.half 0x05AA +.half 0x0655 +.half 0x0656 +.half 0x0659 +.half 0x065A +.half 0x0665 +.half 0x0666 +.half 0x0669 +.half 0x066A +.half 0x0695 +.half 0x0696 +.half 0x0699 +.half 0x069A +.half 0x06A5 +.half 0x06A6 +.half 0x06A9 +.half 0x06AA +.half 0x0955 +.half 0x0956 +.half 0x0959 +.half 0x095A +.half 0x0965 +.half 0x0966 +.half 0x0969 +.half 0x096A +.half 0x0995 +.half 0x0996 +.half 0x0999 +.half 0x099A +.half 0x09A5 +.half 0x09A6 +.half 0x09A9 +.half 0x09AA +.half 0x0A55 +.half 0x0A56 +.half 0x0A59 +.half 0x0A5A +.half 0x0A65 +.half 0x0A66 +.half 0x0A69 +.half 0x0A6A +.half 0x0A95 +.half 0x0A96 +.half 0x0A99 +.half 0x0A9A +.half 0x0AA5 +.half 0x0AA6 +.half 0x0AA9 +.half 0x0AAA diff --git a/asm/os/osSyncPrintf.s b/asm/os/osSyncPrintf.s new file mode 100644 index 000000000..e212c4b93 --- /dev/null +++ b/asm/os/osSyncPrintf.s @@ -0,0 +1,37 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osSyncPrintf +/* 0D0360 800CF760 AFA40000 */ sw $a0, ($sp) +/* 0D0364 800CF764 AFA50004 */ sw $a1, 4($sp) +/* 0D0368 800CF768 AFA60008 */ sw $a2, 8($sp) +/* 0D036C 800CF76C 03E00008 */ jr $ra +/* 0D0370 800CF770 24020001 */ li $v0, 1 + +glabel func_800CF774 +/* 0D0374 800CF774 27BDFFE0 */ addiu $sp, $sp, -0x20 +/* 0D0378 800CF778 AFA40020 */ sw $a0, 0x20($sp) +/* 0D037C 800CF77C AFBF0014 */ sw $ra, 0x14($sp) +/* 0D0380 800CF780 AFA50024 */ sw $a1, 0x24($sp) +/* 0D0384 800CF784 AFA60028 */ sw $a2, 0x28($sp) +/* 0D0388 800CF788 AFA7002C */ sw $a3, 0x2c($sp) +/* 0D038C 800CF78C 3C04800D */ lui $a0, %hi(osSyncPrintf) # $a0, 0x800d +/* 0D0390 800CF790 2484F760 */ addiu $a0, %lo(osSyncPrintf) # addiu $a0, $a0, -0x8a0 +/* 0D0394 800CF794 27A70024 */ addiu $a3, $sp, 0x24 +/* 0D0398 800CF798 8FA60020 */ lw $a2, 0x20($sp) +/* 0D039C 800CF79C 0C035AA4 */ jal _Printf +/* 0D03A0 800CF7A0 00002825 */ move $a1, $zero +/* 0D03A4 800CF7A4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0D03A8 800CF7A8 27BD0020 */ addiu $sp, $sp, 0x20 +/* 0D03AC 800CF7AC 03E00008 */ jr $ra +/* 0D03B0 800CF7B0 00000000 */ nop + +/* 0D03B4 800CF7B4 00000000 */ nop +/* 0D03B8 800CF7B8 00000000 */ nop +/* 0D03BC 800CF7BC 00000000 */ nop \ No newline at end of file diff --git a/asm/os/osWritebackDCache.s b/asm/os/osWritebackDCache.s new file mode 100644 index 000000000..8e870168a --- /dev/null +++ b/asm/os/osWritebackDCache.s @@ -0,0 +1,39 @@ +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" + +glabel osWritebackDCache + blez $a1, .osWritebackDCacheReturn + nop + li $t3, 8192 + bgeu $a1, $t3, .L80324E40 + nop + move $t0, $a0 + addu $t1, $a0, $a1 + bgeu $t0, $t1, .osWritebackDCacheReturn + nop + andi $t2, $t0, 0xf + addiu $t1, $t1, -0x10 + subu $t0, $t0, $t2 +.L80324E28: + cache 0x19, ($t0) + bltu $t0, $t1, .L80324E28 + addiu $t0, $t0, 0x10 +.osWritebackDCacheReturn: + jr $ra + nop + +.L80324E40: + lui $t0, 0x8000 + addu $t1, $t0, $t3 + addiu $t1, $t1, -0x10 +.L80324E4C: + cache 1, ($t0) + bltu $t0, $t1, .L80324E4C + addiu $t0, 0x10 # addiu $t0, $t0, 0x10 + jr $ra + nop diff --git a/asm/os/osWritebackDCacheAll.s b/asm/os/osWritebackDCacheAll.s new file mode 100644 index 000000000..51d43cdad --- /dev/null +++ b/asm/os/osWritebackDCacheAll.s @@ -0,0 +1,25 @@ +# handwritten +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel osWritebackDCacheAll +/* 0CE490 800CD890 3C088000 */ li $t0, 0x80000000 # $t0, 0x8000 +/* 0CE494 800CD894 240A2000 */ li $t2, 8192 +/* 0CE498 800CD898 010A4821 */ addu $t1, $t0, $t2 +/* 0CE49C 800CD89C 2529FFF0 */ addiu $t1, $t1, -0x10 +.L800CD8A0: +/* 0CE4A0 800CD8A0 BD010000 */ cache 1, ($t0) +/* 0CE4A4 800CD8A4 0109082B */ sltu $at, $t0, $t1 +/* 0CE4A8 800CD8A8 1420FFFD */ bnez $at, .L800CD8A0 +/* 0CE4AC 800CD8AC 25080010 */ addiu $t0, $t0, 0x10 +/* 0CE4B0 800CD8B0 03E00008 */ jr $ra +/* 0CE4B4 800CD8B4 00000000 */ nop + +/* 0CE4B8 800CD8B8 00000000 */ nop +/* 0CE4BC 800CD8BC 00000000 */ nop diff --git a/asm/os/sqrtf.s b/asm/os/sqrtf.s new file mode 100644 index 000000000..f84daa776 --- /dev/null +++ b/asm/os/sqrtf.s @@ -0,0 +1,16 @@ +# Handwritten +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel sqrtf +/* 0CED40 800CE140 03E00008 */ jr $ra +/* 0CED44 800CE144 46006004 */ sqrt.s $f0, $f12 + +/* 0CED48 800CE148 00000000 */ nop +/* 0CED4C 800CE14C 00000000 */ nop diff --git a/data/data_0DD0A0.s b/data/data_0DD0A0.s index 3652e1cb9..dc5ddef14 100644 --- a/data/data_0DD0A0.s +++ b/data/data_0DD0A0.s @@ -224,7 +224,7 @@ glabel D_800DC5FC .hword 0x0000, 0x0000 glabel D_800DC600 -.word D_8000031C +.word osAppNmiBuffer glabel gIsMirrorMode .word 0x00000000 diff --git a/data/data_0DD0A0_2.s b/data/data_0DD0A0_2.s index b7ad5b9ba..78f30d321 100644 --- a/data/data_0DD0A0_2.s +++ b/data/data_0DD0A0_2.s @@ -3455,403 +3455,3 @@ glabel D_800EA5D8 glabel D_800EA5DC .word 0x00000000 - -glabel osClockRate -.dword 0x0000000003b9aca0 - -glabel D_800EA5E8 -.word 0x00000000 - -glabel D_800EA5EC -.word 0x003fff01 - -glabel D_800EA5F0 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EA600 -.word 0x00000000 -.word 0x00000000 -.word 0x00000000 -.word 0x00000000 - -glabel D_800EA610 -.word 0x00000000 - -.word 0x00000000 - -.word 0x00000000, 0x00000000, 0x00000000, 0x0000320e -.word 0x00000140, 0x03e52239, 0x0000020d, 0x00000c15 -.word 0x0c150c15, 0x006c02ec, 0x00000200, 0x00000000 -.word 0x00000280, 0x00000400, 0x002501ff, 0x000e0204 -.word 0x00000002, 0x00000280, 0x00000400, 0x002501ff -.word 0x000e0204, 0x00000002, 0x01000000, 0x0000324e -.word 0x00000140, 0x03e52239, 0x0000020c, 0x00000c15 -.word 0x0c150c15, 0x006c02ec, 0x00000200, 0x00000000 -.word 0x00000280, 0x01000400, 0x002301fd, 0x000e0204 -.word 0x00000002, 0x00000280, 0x03000400, 0x002501ff -.word 0x000e0204, 0x00000002 - -glabel D_800EA6C0 # OSViMode -.word 0x02000000, 0x0000311e, 0x00000140, 0x03e52239 -.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x03000000, 0x0000305e, 0x00000140, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000280 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x04000000, 0x0000330f, 0x00000140, 0x03e52239 -.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x05000000, 0x0000324f, 0x00000140, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000500 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x06000000, 0x0000301f, 0x00000140, 0x03e52239 -.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x07000000, 0x0000305f, 0x00000140, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000500 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x08000000, 0x0000324e, 0x00000500, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x09000000, 0x0000324e, 0x00000280, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x0a000000, 0x0000305e, 0x00000500, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x0b000000, 0x0000305e, 0x00000280, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x0c000000, 0x0000334f, 0x00000500, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00001400 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x0D000000, 0x0000324f, 0x00000280, 0x03e52239 -.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 -.word 0x002301fd, 0x000e0204, 0x00000002, 0x00001400 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x0e000000, 0x0000320e, 0x00000140, 0x0404233a -.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 -.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 -.word 0x0f000000, 0x0000324e, 0x00000140, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000280 -.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x10000000, 0x0000311e, 0x00000140, 0x0404233a -.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 -.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 -.word 0x11000000, 0x0000305e, 0x00000140, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000280 -.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x12000000, 0x0000330f, 0x00000140, 0x0404233a -.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000500 -.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 -.word 0x13000000, 0x0000324f, 0x00000140, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000500 -.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x14000000, 0x0000301f, 0x00000140, 0x0404233a -.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000500 -.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 -.word 0x15000000, 0x0000305f, 0x00000140, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000500 -.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x16000000, 0x0000324e, 0x00000500, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 -.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x17000000, 0x0000324e, 0x00000280, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 -.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x18000000, 0x0000305e, 0x00000500, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 -.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x19000000, 0x0000305e, 0x00000280, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 -.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x1a000000, 0x0000334f, 0x00000500, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00001400 -.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x1b000000, 0x0000324f, 0x00000280, 0x0404233a -.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 -.word 0x005d0237, 0x0009026b, 0x00000002, 0x00001400 -.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 -.word 0x1c000000, 0x0000320e, 0x00000140, 0x04651e39 -.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x1d000000, 0x0000324e, 0x00000140, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000280 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 - -glabel D_800EAF80 -.word 0x1e000000, 0x0000311e, 0x00000140, 0x04651e39 -.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x1f000000, 0x0000305e, 0x00000140, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000280 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x20000000, 0x0000330f, 0x00000140, 0x04651e39 -.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x21000000, 0x0000324f, 0x00000140, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000500 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x22000000, 0x0000301f, 0x00000140, 0x04651e39 -.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x23000000, 0x0000305f, 0x00000140, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000500 -.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x24000000, 0x0000324e, 0x00000500, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x25000000, 0x0000324e, 0x00000280, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x26000000, 0x0000305e, 0x00000500, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x27000000, 0x0000305e, 0x00000280, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x28000000, 0x0000334f, 0x00000500, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00001400 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 -.word 0x29000000, 0x0000324f, 0x00000280, 0x04651e39 -.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec -.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 -.word 0x002301fd, 0x000b0202, 0x00000002, 0x00001400 -.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 - -glabel D_800EB340 -.word 0x00000000 - -.word 0x00000000 - -.word 0x00000000 - -.word 0x00000000 - - -.word 0x00000000 - -.word 0x00000000 - -.word 0x00000000 - -glabel D_800EB35C -.word 0x00000000 - -glabel D_800EB360 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB370 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB380 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB3A0 -.word 0x00000000, 0xffffffff - -glabel D_800EB3A8 -.word D_800EB3A0 - -glabel D_800EB3AC -.word D_800EB3A0 - -glabel D_800EB3B0 -.word 0x00000000 - -glabel D_800EB3B4 -.word 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB3C0 -.word D_801975E0, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB3D0 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB400 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB430 -.word D_800EB3D0 - -glabel D_800EB434 -.word D_800EB400 - -glabel D_800EB438 -.word 0x02e6d354, 0x00000000 - -glabel D_800EB440 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB450 -.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB460 -.word 0x20202020, 0x20202020, 0x20202020, 0x20202020 -.word 0x20202020, 0x20202020, 0x20202020, 0x20202020 -.word 0x00000000 - -glabel D_800EB484 -.word 0x30303030, 0x30303030, 0x30303030, 0x30303030 -.word 0x30303030, 0x30303030, 0x30303030, 0x30303030 -.word 0x00000000, 0x00000000, 0x00000000 - -glabel D_800EB4B0 -.word 0x10000000, 0x0000311e, 0x00000140, 0x0404233a -.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 -.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 - -glabel D_800EB500 -.word 0x1e000000, 0x0000311e, 0x00000140, 0x04651e39 -.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 - -glabel D_800EB550 -.word 0x02000000, 0x0000311e, 0x00000140, 0x03e52239 -.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec -.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 -.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 -.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 - -.balign 4 -glabel D_800EB5A0 -.asciiz "0123456789abcdef" - -.balign 4 -glabel D_800EB5B4 -.asciiz "0123456789ABCDEF" - -.balign 4 -.word 0x00000000, 0x00000000 - -.balign 4 -glabel D_800EB5D0 -.asciiz "SOUTH " - -.balign 4 -glabel D_800EB5D8 -.asciiz "EAST " - -.balign 4 -glabel D_800EB5E0 -.asciiz "NORTH " -.balign 4 - -glabel D_800EB5E8 -.asciiz "WEST " - -.balign 4 -glabel D_800EB5F0 -.asciiz "SOUTH " - -.balign 4 -glabel D_800EB5F8 -.double 0.01666666 - -glabel D_800EB600 -.double 0.01666666 - -glabel D_800EB608 -.double 0.01666666 - -glabel D_800EB610 -.double 0.01666666 - -glabel D_800EB618 -.word L80001F0C, L80001F0C, L80001F0C, L80001F0C -.word L80001F38, L80001F48, L80001F60, L80001EFC -.word L80001F60, L80001F58 - -glabel D_800EB640 -.double 0.01666666 - -glabel D_800EB648 -.word L800026B4, L800026CC, L800026E4, L800026FC -.word L80002714, L8000272C, L8000276C, L8000276C -.word L8000276C, L8000274C -glabel D_800EB670 \ No newline at end of file diff --git a/data/data_0DD0A0_2_1.s b/data/data_0DD0A0_2_1.s new file mode 100644 index 000000000..f0ae3c610 --- /dev/null +++ b/data/data_0DD0A0_2_1.s @@ -0,0 +1,288 @@ +.include "macros.inc" + +.section .data + +# createvimanager .data + +glabel D_800EA5F0 +.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 + +glabel viMgrMainArgs +.word 0, 0, 0, 0 + +glabel D_800EA610 +.word 0x00000000 +.word 0x00000000 +.word 0x00000000 + + +.word 0x00000000 +.word 0x00000000, 0x0000320e +.word 0x00000140, 0x03e52239, 0x0000020d, 0x00000c15 +.word 0x0c150c15, 0x006c02ec, 0x00000200, 0x00000000 +.word 0x00000280, 0x00000400, 0x002501ff, 0x000e0204 +.word 0x00000002, 0x00000280, 0x00000400, 0x002501ff +.word 0x000e0204, 0x00000002, 0x01000000, 0x0000324e +.word 0x00000140, 0x03e52239, 0x0000020c, 0x00000c15 +.word 0x0c150c15, 0x006c02ec, 0x00000200, 0x00000000 +.word 0x00000280, 0x01000400, 0x002301fd, 0x000e0204 +.word 0x00000002, 0x00000280, 0x03000400, 0x002501ff +.word 0x000e0204, 0x00000002 + +glabel D_800EA6C0 # OSViMode +.word 0x02000000, 0x0000311e, 0x00000140, 0x03e52239 +.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x03000000, 0x0000305e, 0x00000140, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000280 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x04000000, 0x0000330f, 0x00000140, 0x03e52239 +.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x05000000, 0x0000324f, 0x00000140, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000500 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x06000000, 0x0000301f, 0x00000140, 0x03e52239 +.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x07000000, 0x0000305f, 0x00000140, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000500 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x08000000, 0x0000324e, 0x00000500, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x09000000, 0x0000324e, 0x00000280, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x0a000000, 0x0000305e, 0x00000500, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x0b000000, 0x0000305e, 0x00000280, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00000a00 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x0c000000, 0x0000334f, 0x00000500, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00001400 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x0D000000, 0x0000324f, 0x00000280, 0x03e52239 +.word 0x0000020c, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 +.word 0x002301fd, 0x000e0204, 0x00000002, 0x00001400 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x0e000000, 0x0000320e, 0x00000140, 0x0404233a +.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 +.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 +.word 0x0f000000, 0x0000324e, 0x00000140, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000280 +.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x10000000, 0x0000311e, 0x00000140, 0x0404233a +.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 +.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 +.word 0x11000000, 0x0000305e, 0x00000140, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000280 +.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x12000000, 0x0000330f, 0x00000140, 0x0404233a +.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000500 +.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 +.word 0x13000000, 0x0000324f, 0x00000140, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000500 +.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x14000000, 0x0000301f, 0x00000140, 0x0404233a +.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000500 +.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 +.word 0x15000000, 0x0000305f, 0x00000140, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000500 +.word 0x03000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x16000000, 0x0000324e, 0x00000500, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 +.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x17000000, 0x0000324e, 0x00000280, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 +.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x18000000, 0x0000305e, 0x00000500, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 +.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x19000000, 0x0000305e, 0x00000280, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00000a00 +.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x1a000000, 0x0000334f, 0x00000500, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00001400 +.word 0x00000400, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x1b000000, 0x0000324f, 0x00000280, 0x0404233a +.word 0x00000270, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 +.word 0x005d0237, 0x0009026b, 0x00000002, 0x00001400 +.word 0x02000800, 0x005f0239, 0x000d0269, 0x00000002 +.word 0x1c000000, 0x0000320e, 0x00000140, 0x04651e39 +.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x1d000000, 0x0000324e, 0x00000140, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000280 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 + +glabel D_800EAF80 +.word 0x1e000000, 0x0000311e, 0x00000140, 0x04651e39 +.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x1f000000, 0x0000305e, 0x00000140, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x01000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000280 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x20000000, 0x0000330f, 0x00000140, 0x04651e39 +.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x21000000, 0x0000324f, 0x00000140, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000500 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x22000000, 0x0000301f, 0x00000140, 0x04651e39 +.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000500 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x23000000, 0x0000305f, 0x00000140, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000500, 0x01000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000500 +.word 0x03000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x24000000, 0x0000324e, 0x00000500, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x25000000, 0x0000324e, 0x00000280, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x26000000, 0x0000305e, 0x00000500, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x00000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x27000000, 0x0000305e, 0x00000280, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000500, 0x02000800 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00000a00 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x28000000, 0x0000334f, 0x00000500, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000a00, 0x00000400 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00001400 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 +.word 0x29000000, 0x0000324f, 0x00000280, 0x04651e39 +.word 0x0000020c, 0x00000c10, 0x0c1c0c1c, 0x006c02ec +.word 0x00000400, 0x00000000, 0x00000a00, 0x02000800 +.word 0x002301fd, 0x000b0202, 0x00000002, 0x00001400 +.word 0x02000800, 0x002501ff, 0x000e0204, 0x00000002 + + +# osPiStartDma .data +glabel __osPiDevMgr +.word 0x00000000 + +.word 0x00000000 + +.word 0x00000000 + +.word 0x00000000 + + +.word 0x00000000 + +.word 0x00000000 + +.word 0x00000000 + +glabel __osPiTable +.word 0x00000000 + +glabel D_800EB360 +.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 + +glabel D_800EB370 +.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 + +glabel __osHwIntTable +.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +.word 0x00000000, 0x00000000, 0x00000000, 0x00000000 + +glabel D_800EB3A0 +.word 0x00000000, 0xffffffff + +glabel __osRunQueue +.word D_800EB3A0 + +glabel __osActiveQueue +.word D_800EB3A0 + +glabel __osRunningThread +.word 0x00000000 + +glabel D_800EB3B4 +.word 0x00000000 + +.balign 16 + +# glabel __osTimerList +# .word __osBaseTimer + +# .word 0x00000000, 0x00000000, 0x00000000 + diff --git a/data/data_0DD0A0_3.s b/data/data_0DD0A0_3.s index afa55483e..7b0004249 100644 --- a/data/data_0DD0A0_3.s +++ b/data/data_0DD0A0_3.s @@ -7335,14 +7335,15 @@ glabel D_800F39C0 .word L800CBE60, L800CBE78, L800CBE90, L800CBEA8 .word L800CBEC0, L800CBECC, L800CBF08, L800CBEEC + +# guRotateF rodata glabel D_800F39E0 .float 0.017453292 - .balign 16 +# guPerspectiveF rodata glabel D_800F39F0 .double 0.017453292222222222 - .word 0x00000000, 0x00000000 glabel D_800F3A00 @@ -7358,77 +7359,7 @@ glabel D_800F3A20 .word 0x00000000, 0x00000000, 0x00000000 -glabel D_800F3A50 -.word L800D3480, L800D3374, L800D33B4, L800D34A0 -.word L800D34A0, L800D33F0, L800D3438, 0x00000000 +# glabel D_800F3A50 +# .word L800D3480, L800D3374, L800D33B4, L800D34A0 +# .word L800D34A0, L800D33F0, L800D3438, 0x00000000 -glabel D_800F3A70 -.double 1.0 -.double -0.16666659550427756 -.double 0.0083330662460821547 -.double -0.00019809602901937949 -.double 2.6057806379680372e-06 - -glabel D_800F3A98 -.double 0.31830988618379069 - -glabel D_800F3AA0 -.double 3.1415926218032837 - -glabel D_800F3AA8 -.double 3.1786509547056392e-08 - -glabel D_800F3AB0 -.float 0.0 - -.word 0x00000000, 0x00000000, 0x00000000 - -glabel D_800F3AC0 -.double 1.0 -.double -0.16666659550427756 -.double 0.0083330662460821547 -.double -0.00019809602901937949 -.double 2.6057806379680372e-06 - -glabel D_800F3AE8 -.double 0.31830988618379069 - -glabel D_800F3AF0 -.double 3.1415926218032837 - -glabel D_800F3AF8 -.double 3.1786509547056392e-08 - -glabel D_800F3B00 -.float 0.0 - -.word 0x00000000, 0x00000000, 0x00000000 - -glabel D_800F3B10 -.asciiz "hlL" - -.balign 4 -glabel D_800F3B14 -.asciiz " +-#0" - -.balign 4 -glabel D_800F3B1C -.word 0x00000001, 0x00000002, 0x00000004, 0x00000008 -.word 0x00000010, 0x00000000 - -glabel D_800F3B34 -.word L800D6788, L800D6A68, L800D6788, L800D6A68 -.word L800D6A68, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D6A68, L800D6A68, L800D6638 -.word L800D6A68, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D6A68, L800D6490, L800D64C8 -.word L800D6788, L800D6788, L800D6788, L800D6A68 -.word L800D64C8, L800D6A68, L800D6A68, L800D6A68 -.word L800D6A68, L800D68EC, L800D6638, L800D69BC -.word L800D6A68, L800D6A68, L800D6A04, L800D6A68 -.word L800D6638, L800D6A68, L800D6A68, L800D6638 - -.word 0x00000000, 0x00000000, 0x00000000 diff --git a/data/rodata_libultra.s b/data/rodata_libultra.s new file mode 100644 index 000000000..78c2804be --- /dev/null +++ b/data/rodata_libultra.s @@ -0,0 +1,25 @@ +.include "macros.inc" + +.section .rodata + +glabel osViModePalLan1 +.word 0x10000000, 0x0000311e, 0x00000140, 0x0404233a +.word 0x00000271, 0x00150c69, 0x0c6f0c6e, 0x00800300 +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x005f0239, 0x0009026b, 0x00000002, 0x00000280 +.word 0x00000400, 0x005f0239, 0x0009026b, 0x00000002 + +glabel osViModeMpalLan1 +.word 0x1e000000, 0x0000311e, 0x00000140, 0x04651e39 +.word 0x0000020d, 0x00040c11, 0x0c190c1a, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 + +glabel osViModeNtscLan1 +.word 0x02000000, 0x0000311e, 0x00000140, 0x03e52239 +.word 0x0000020d, 0x00000c15, 0x0c150c15, 0x006c02ec +.word 0x00000200, 0x00000000, 0x00000280, 0x00000400 +.word 0x002501ff, 0x000e0204, 0x00000002, 0x00000280 +.word 0x00000400, 0x002501ff, 0x000e0204, 0x00000002 + diff --git a/data/rodata_main.s b/data/rodata_main.s new file mode 100644 index 000000000..027ee0b2f --- /dev/null +++ b/data/rodata_main.s @@ -0,0 +1,50 @@ +.include "macros.inc" + +.section .rodata + +.balign 4 +glabel D_800EB5D0 +.asciiz "SOUTH " + +.balign 4 +glabel D_800EB5D8 +.asciiz "EAST " + +.balign 4 +glabel D_800EB5E0 +.asciiz "NORTH " +.balign 4 + +glabel D_800EB5E8 +.asciiz "WEST " + +.balign 4 +glabel D_800EB5F0 +.asciiz "SOUTH " + +.balign 4 +glabel D_800EB5F8 +.double 0.01666666 + +glabel D_800EB600 +.double 0.01666666 + +glabel D_800EB608 +.double 0.01666666 + +glabel D_800EB610 +.double 0.01666666 + +glabel D_800EB618 +.word L80001F0C, L80001F0C, L80001F0C, L80001F0C +.word L80001F38, L80001F48, L80001F60, L80001EFC +.word L80001F60, L80001F58 + +glabel D_800EB640 +.double 0.01666666 + +glabel D_800EB648 +.word L800026B4, L800026CC, L800026E4, L800026FC +.word L80002714, L8000272C, L8000276C, L8000276C +.word L8000276C, L8000274C +glabel D_800EB670 diff --git a/include/PR/R4300.h b/include/PR/R4300.h new file mode 100644 index 000000000..932694d3f --- /dev/null +++ b/include/PR/R4300.h @@ -0,0 +1,453 @@ +/************************************************************************** + * * + * Copyright (C) 1995, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * $Revision: 1.13 $ + * $Date: 1997/02/11 08:15:34 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/R4300.h,v $ + * + **************************************************************************/ + +#ifndef __R4300_H__ +#define __R4300_H__ + +#include + +/* + * Segment base addresses and sizes + */ +#define KUBASE 0 +#define KUSIZE 0x80000000 +#define K0BASE 0x80000000 +#define K0SIZE 0x20000000 +#define K1BASE 0xA0000000 +#define K1SIZE 0x20000000 +#define K2BASE 0xC0000000 +#define K2SIZE 0x20000000 + +/* + * Exception vectors + */ +#define SIZE_EXCVEC 0x80 /* Size of an exc. vec */ +#define UT_VEC K0BASE /* utlbmiss vector */ +#define R_VEC (K1BASE+0x1fc00000) /* reset vector */ +#define XUT_VEC (K0BASE+0x80) /* extended address tlbmiss */ +#define ECC_VEC (K0BASE+0x100) /* Ecc exception vector */ +#define E_VEC (K0BASE+0x180) /* Gen. exception vector */ + +/* + * Address conversion macros + */ +#ifdef _LANGUAGE_ASSEMBLY + +#define K0_TO_K1(x) ((x)|0xA0000000) /* kseg0 to kseg1 */ +#define K1_TO_K0(x) ((x)&0x9FFFFFFF) /* kseg1 to kseg0 */ +#define K0_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg0 to physical */ +#define K1_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg1 to physical */ +#define KDM_TO_PHYS(x) ((x)&0x1FFFFFFF) /* direct mapped to physical */ +#define PHYS_TO_K0(x) ((x)|0x80000000) /* physical to kseg0 */ +#define PHYS_TO_K1(x) ((x)|0xA0000000) /* physical to kseg1 */ + +#else /* _LANGUAGE_C */ + +#define K0_TO_K1(x) ((u32)(x)|0xA0000000) /* kseg0 to kseg1 */ +#define K1_TO_K0(x) ((u32)(x)&0x9FFFFFFF) /* kseg1 to kseg0 */ +#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg0 to physical */ +#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg1 to physical */ +#define KDM_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* direct mapped to physical */ +#define PHYS_TO_K0(x) ((u32)(x)|0x80000000) /* physical to kseg0 */ +#define PHYS_TO_K1(x) ((u32)(x)|0xA0000000) /* physical to kseg1 */ + +#endif /* _LANGUAGE_ASSEMBLY */ + +/* + * Address predicates + */ +#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE) +#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE) +#define IS_KSEGDM(x) ((u32)(x) >= K0BASE && (u32)(x) < K2BASE) +#define IS_KSEG2(x) ((u32)(x) >= K2BASE && (u32)(x) < KPTE_SHDUBASE) +#define IS_KPTESEG(x) ((u32)(x) >= KPTE_SHDUBASE) +#define IS_KUSEG(x) ((u32)(x) < K0BASE) + +/* + * TLB size constants + */ + +#define NTLBENTRIES 31 /* entry 31 is reserved by rdb */ + +#define TLBHI_VPN2MASK 0xffffe000 +#define TLBHI_VPN2SHIFT 13 +#define TLBHI_PIDMASK 0xff +#define TLBHI_PIDSHIFT 0 +#define TLBHI_NPID 255 /* 255 to fit in 8 bits */ + +#define TLBLO_PFNMASK 0x3fffffc0 +#define TLBLO_PFNSHIFT 6 +#define TLBLO_CACHMASK 0x38 /* cache coherency algorithm */ +#define TLBLO_CACHSHIFT 3 +#define TLBLO_UNCACHED 0x10 /* not cached */ +#define TLBLO_NONCOHRNT 0x18 /* Cacheable non-coherent */ +#define TLBLO_EXLWR 0x28 /* Exclusive write */ +#define TLBLO_D 0x4 /* writeable */ +#define TLBLO_V 0x2 /* valid bit */ +#define TLBLO_G 0x1 /* global access bit */ + +#define TLBINX_PROBE 0x80000000 +#define TLBINX_INXMASK 0x3f +#define TLBINX_INXSHIFT 0 + +#define TLBRAND_RANDMASK 0x3f +#define TLBRAND_RANDSHIFT 0 + +#define TLBWIRED_WIREDMASK 0x3f + +#define TLBCTXT_BASEMASK 0xff800000 +#define TLBCTXT_BASESHIFT 23 +#define TLBCTXT_BASEBITS 9 + +#define TLBCTXT_VPNMASK 0x7ffff0 +#define TLBCTXT_VPNSHIFT 4 + +#define TLBPGMASK_4K 0x0 +#define TLBPGMASK_16K 0x6000 +#define TLBPGMASK_64K 0x1e000 + +/* + * Status register + */ +#define SR_CUMASK 0xf0000000 /* coproc usable bits */ + +#define SR_CU3 0x80000000 /* Coprocessor 3 usable */ +#define SR_CU2 0x40000000 /* Coprocessor 2 usable */ +#define SR_CU1 0x20000000 /* Coprocessor 1 usable */ +#define SR_CU0 0x10000000 /* Coprocessor 0 usable */ +#define SR_RP 0x08000000 /* Reduced power (quarter speed) */ +#define SR_FR 0x04000000 /* MIPS III FP register mode */ +#define SR_RE 0x02000000 /* Reverse endian */ +#define SR_ITS 0x01000000 /* Instruction trace support */ +#define SR_BEV 0x00400000 /* Use boot exception vectors */ +#define SR_TS 0x00200000 /* TLB shutdown */ +#define SR_SR 0x00100000 /* Soft reset occured */ +#define SR_CH 0x00040000 /* Cache hit for last 'cache' op */ +#define SR_CE 0x00020000 /* Create ECC */ +#define SR_DE 0x00010000 /* ECC of parity does not cause error */ + +/* + * Interrupt enable bits + * (NOTE: bits set to 1 enable the corresponding level interrupt) + */ +#define SR_IMASK 0x0000ff00 /* Interrupt mask */ +#define SR_IMASK8 0x00000000 /* mask level 8 */ +#define SR_IMASK7 0x00008000 /* mask level 7 */ +#define SR_IMASK6 0x0000c000 /* mask level 6 */ +#define SR_IMASK5 0x0000e000 /* mask level 5 */ +#define SR_IMASK4 0x0000f000 /* mask level 4 */ +#define SR_IMASK3 0x0000f800 /* mask level 3 */ +#define SR_IMASK2 0x0000fc00 /* mask level 2 */ +#define SR_IMASK1 0x0000fe00 /* mask level 1 */ +#define SR_IMASK0 0x0000ff00 /* mask level 0 */ + +#define SR_IBIT8 0x00008000 /* bit level 8 */ +#define SR_IBIT7 0x00004000 /* bit level 7 */ +#define SR_IBIT6 0x00002000 /* bit level 6 */ +#define SR_IBIT5 0x00001000 /* bit level 5 */ +#define SR_IBIT4 0x00000800 /* bit level 4 */ +#define SR_IBIT3 0x00000400 /* bit level 3 */ +#define SR_IBIT2 0x00000200 /* bit level 2 */ +#define SR_IBIT1 0x00000100 /* bit level 1 */ + +#define SR_IMASKSHIFT 8 + +#define SR_KX 0x00000080 /* extended-addr TLB vec in kernel */ +#define SR_SX 0x00000040 /* xtended-addr TLB vec supervisor */ +#define SR_UX 0x00000020 /* xtended-addr TLB vec in user mode */ +#define SR_KSU_MASK 0x00000018 /* mode mask */ +#define SR_KSU_USR 0x00000010 /* user mode */ +#define SR_KSU_SUP 0x00000008 /* supervisor mode */ +#define SR_KSU_KER 0x00000000 /* kernel mode */ +#define SR_ERL 0x00000004 /* Error level, 1=>cache error */ +#define SR_EXL 0x00000002 /* Exception level, 1=>exception */ +#define SR_IE 0x00000001 /* interrupt enable, 1=>enable */ + +/* + * Cause Register + */ +#define CAUSE_BD 0x80000000 /* Branch delay slot */ +#define CAUSE_CEMASK 0x30000000 /* coprocessor error */ +#define CAUSE_CESHIFT 28 + +/* Interrupt pending bits */ +#define CAUSE_IP8 0x00008000 /* External level 8 pending - COMPARE */ +#define CAUSE_IP7 0x00004000 /* External level 7 pending - INT4 */ +#define CAUSE_IP6 0x00002000 /* External level 6 pending - INT3 */ +#define CAUSE_IP5 0x00001000 /* External level 5 pending - INT2 */ +#define CAUSE_IP4 0x00000800 /* External level 4 pending - INT1 */ +#define CAUSE_IP3 0x00000400 /* External level 3 pending - INT0 */ +#define CAUSE_SW2 0x00000200 /* Software level 2 pending */ +#define CAUSE_SW1 0x00000100 /* Software level 1 pending */ + +#define CAUSE_IPMASK 0x0000FF00 /* Pending interrupt mask */ +#define CAUSE_IPSHIFT 8 + +#define CAUSE_EXCMASK 0x0000007C /* Cause code bits */ + +#define CAUSE_EXCSHIFT 2 + +/* Cause register exception codes */ + +#define EXC_CODE(x) ((x)<<2) + +/* Hardware exception codes */ +#define EXC_INT EXC_CODE(0) /* interrupt */ +#define EXC_MOD EXC_CODE(1) /* TLB mod */ +#define EXC_RMISS EXC_CODE(2) /* Read TLB Miss */ +#define EXC_WMISS EXC_CODE(3) /* Write TLB Miss */ +#define EXC_RADE EXC_CODE(4) /* Read Address Error */ +#define EXC_WADE EXC_CODE(5) /* Write Address Error */ +#define EXC_IBE EXC_CODE(6) /* Instruction Bus Error */ +#define EXC_DBE EXC_CODE(7) /* Data Bus Error */ +#define EXC_SYSCALL EXC_CODE(8) /* SYSCALL */ +#define EXC_BREAK EXC_CODE(9) /* BREAKpoint */ +#define EXC_II EXC_CODE(10) /* Illegal Instruction */ +#define EXC_CPU EXC_CODE(11) /* CoProcessor Unusable */ +#define EXC_OV EXC_CODE(12) /* OVerflow */ +#define EXC_TRAP EXC_CODE(13) /* Trap exception */ +#define EXC_VCEI EXC_CODE(14) /* Virt. Coherency on Inst. fetch */ +#define EXC_FPE EXC_CODE(15) /* Floating Point Exception */ +#define EXC_WATCH EXC_CODE(23) /* Watchpoint reference */ +#define EXC_VCED EXC_CODE(31) /* Virt. Coherency on data read */ + +/* C0_PRID Defines */ +#define C0_IMPMASK 0xff00 +#define C0_IMPSHIFT 8 +#define C0_REVMASK 0xff +#define C0_MAJREVMASK 0xf0 +#define C0_MAJREVSHIFT 4 +#define C0_MINREVMASK 0xf + +/* + * Coprocessor 0 operations + */ +#define C0_READI 0x1 /* read ITLB entry addressed by C0_INDEX */ +#define C0_WRITEI 0x2 /* write ITLB entry addressed by C0_INDEX */ +#define C0_WRITER 0x6 /* write ITLB entry addressed by C0_RAND */ +#define C0_PROBE 0x8 /* probe for ITLB entry addressed by TLBHI */ +#define C0_RFE 0x10 /* restore for exception */ + +/* + * 'cache' instruction definitions + */ + +/* Target cache */ +#define CACH_PI 0x0 /* specifies primary inst. cache */ +#define CACH_PD 0x1 /* primary data cache */ +#define CACH_SI 0x2 /* secondary instruction cache */ +#define CACH_SD 0x3 /* secondary data cache */ + +/* Cache operations */ +#define C_IINV 0x0 /* index invalidate (inst, 2nd inst) */ +#define C_IWBINV 0x0 /* index writeback inval (d, sd) */ +#define C_ILT 0x4 /* index load tag (all) */ +#define C_IST 0x8 /* index store tag (all) */ +#define C_CDX 0xc /* create dirty exclusive (d, sd) */ +#define C_HINV 0x10 /* hit invalidate (all) */ +#define C_HWBINV 0x14 /* hit writeback inv. (d, sd) */ +#define C_FILL 0x14 /* fill (i) */ +#define C_HWB 0x18 /* hit writeback (i, d, sd) */ +#define C_HSV 0x1c /* hit set virt. (si, sd) */ + +/* + * Cache size definitions + */ +#define ICACHE_SIZE 0x4000 /* 16K */ +#define ICACHE_LINESIZE 32 /* 8 words */ +#define ICACHE_LINEMASK (ICACHE_LINESIZE-1) + +#define DCACHE_SIZE 0x2000 /* 8K */ +#define DCACHE_LINESIZE 16 /* 4 words */ +#define DCACHE_LINEMASK (DCACHE_LINESIZE-1) + +/* + * C0_CONFIG register definitions + */ +#define CONFIG_CM 0x80000000 /* 1 == Master-Checker enabled */ +#define CONFIG_EC 0x70000000 /* System Clock ratio */ +#define CONFIG_EC_1_1 0x6 /* System Clock ratio 1 :1 */ +#define CONFIG_EC_3_2 0x7 /* System Clock ratio 1.5 :1 */ +#define CONFIG_EC_2_1 0x0 /* System Clock ratio 2 :1 */ +#define CONFIG_EC_3_1 0x1 /* System Clock ratio 3 :1 */ +#define CONFIG_EP 0x0f000000 /* Transmit Data Pattern */ +#define CONFIG_SB 0x00c00000 /* Secondary cache block size */ + +#define CONFIG_SS 0x00200000 /* Split scache: 0 == I&D combined */ +#define CONFIG_SW 0x00100000 /* scache port: 0==128, 1==64 */ +#define CONFIG_EW 0x000c0000 /* System Port width: 0==64, 1==32 */ +#define CONFIG_SC 0x00020000 /* 0 -> 2nd cache present */ +#define CONFIG_SM 0x00010000 /* 0 -> Dirty Shared Coherency enabled*/ +#define CONFIG_BE 0x00008000 /* Endian-ness: 1 --> BE */ +#define CONFIG_EM 0x00004000 /* 1 -> ECC mode, 0 -> parity */ +#define CONFIG_EB 0x00002000 /* Block order:1->sequent,0->subblock */ + +#define CONFIG_IC 0x00000e00 /* Primary Icache size */ +#define CONFIG_DC 0x000001c0 /* Primary Dcache size */ +#define CONFIG_IB 0x00000020 /* Icache block size */ +#define CONFIG_DB 0x00000010 /* Dcache block size */ +#define CONFIG_CU 0x00000008 /* Update on Store-conditional */ +#define CONFIG_K0 0x00000007 /* K0SEG Coherency algorithm */ + +#define CONFIG_UNCACHED 0x00000002 /* K0 is uncached */ +#define CONFIG_NONCOHRNT 0x00000003 +#define CONFIG_COHRNT_EXLWR 0x00000005 +#define CONFIG_SB_SHFT 22 /* shift SB to bit position 0 */ +#define CONFIG_IC_SHFT 9 /* shift IC to bit position 0 */ +#define CONFIG_DC_SHFT 6 /* shift DC to bit position 0 */ +#define CONFIG_BE_SHFT 15 /* shift BE to bit position 0 */ + +/* + * C0_TAGLO definitions for setting/getting cache states and physaddr bits + */ +#define SADDRMASK 0xFFFFE000 /* 31..13 -> scache paddr bits 35..17 */ +#define SVINDEXMASK 0x00000380 /* 9..7: prim virt index bits 14..12 */ +#define SSTATEMASK 0x00001c00 /* bits 12..10 hold scache line state */ +#define SINVALID 0x00000000 /* invalid --> 000 == state 0 */ +#define SCLEANEXCL 0x00001000 /* clean exclusive --> 100 == state 4 */ +#define SDIRTYEXCL 0x00001400 /* dirty exclusive --> 101 == state 5 */ +#define SECC_MASK 0x0000007f /* low 7 bits are ecc for the tag */ +#define SADDR_SHIFT 4 /* shift STagLo (31..13) to 35..17 */ + +#define PADDRMASK 0xFFFFFF00 /* PTagLo31..8->prim paddr bits35..12 */ +#define PADDR_SHIFT 4 /* roll bits 35..12 down to 31..8 */ +#define PSTATEMASK 0x00C0 /* bits 7..6 hold primary line state */ +#define PINVALID 0x0000 /* invalid --> 000 == state 0 */ +#define PCLEANEXCL 0x0080 /* clean exclusive --> 10 == state 2 */ +#define PDIRTYEXCL 0x00C0 /* dirty exclusive --> 11 == state 3 */ +#define PPARITY_MASK 0x0001 /* low bit is parity bit (even). */ + +/* + * C0_CACHE_ERR definitions. + */ +#define CACHERR_ER 0x80000000 /* 0: inst ref, 1: data ref */ +#define CACHERR_EC 0x40000000 /* 0: primary, 1: secondary */ +#define CACHERR_ED 0x20000000 /* 1: data error */ +#define CACHERR_ET 0x10000000 /* 1: tag error */ +#define CACHERR_ES 0x08000000 /* 1: external ref, e.g. snoop*/ +#define CACHERR_EE 0x04000000 /* error on SysAD bus */ +#define CACHERR_EB 0x02000000 /* complicated, see spec. */ +#define CACHERR_EI 0x01000000 /* complicated, see spec. */ +#define CACHERR_SIDX_MASK 0x003ffff8 /* secondary cache index */ +#define CACHERR_PIDX_MASK 0x00000007 /* primary cache index */ +#define CACHERR_PIDX_SHIFT 12 /* bits 2..0 are paddr14..12 */ + +/* R4000 family supports hardware watchpoints: + * C0_WATCHLO: + * bits 31..3 are bits 31..3 of physaddr to watch + * bit 2: reserved; must be written as 0. + * bit 1: when set causes a watchpoint trap on load accesses to paddr. + * bit 0: when set traps on stores to paddr; + * C0_WATCHHI + * bits 31..4 are reserved and must be written as zeros. + * bits 3..0 are bits 35..32 of the physaddr to watch + */ +#define WATCHLO_WTRAP 0x00000001 +#define WATCHLO_RTRAP 0x00000002 +#define WATCHLO_ADDRMASK 0xfffffff8 +#define WATCHLO_VALIDMASK 0xfffffffb +#define WATCHHI_VALIDMASK 0x0000000f + +/* + * Coprocessor 0 registers + */ +#ifdef _LANGUAGE_ASSEMBLY +#define C0_INX $0 +#define C0_RAND $1 +#define C0_ENTRYLO0 $2 +#define C0_ENTRYLO1 $3 +#define C0_CONTEXT $4 +#define C0_PAGEMASK $5 /* page mask */ +#define C0_WIRED $6 /* # wired entries in tlb */ +#define C0_BADVADDR $8 +#define C0_COUNT $9 /* free-running counter */ +#define C0_ENTRYHI $10 +#define C0_SR $12 +#define C0_CAUSE $13 +#define C0_EPC $14 +#define C0_PRID $15 /* revision identifier */ +#define C0_COMPARE $11 /* counter comparison reg. */ +#define C0_CONFIG $16 /* hardware configuration */ +#define C0_LLADDR $17 /* load linked address */ +#define C0_WATCHLO $18 /* watchpoint */ +#define C0_WATCHHI $19 /* watchpoint */ +#define C0_ECC $26 /* S-cache ECC and primary parity */ +#define C0_CACHE_ERR $27 /* cache error status */ +#define C0_TAGLO $28 /* cache operations */ +#define C0_TAGHI $29 /* cache operations */ +#define C0_ERROR_EPC $30 /* ECC error prg. counter */ + +# else /* ! _LANGUAGE_ASSEMBLY */ + +#define C0_INX 0 +#define C0_RAND 1 +#define C0_ENTRYLO0 2 +#define C0_ENTRYLO1 3 +#define C0_CONTEXT 4 +#define C0_PAGEMASK 5 /* page mask */ +#define C0_WIRED 6 /* # wired entries in tlb */ +#define C0_BADVADDR 8 +#define C0_COUNT 9 /* free-running counter */ +#define C0_ENTRYHI 10 +#define C0_SR 12 +#define C0_CAUSE 13 +#define C0_EPC 14 +#define C0_PRID 15 /* revision identifier */ +#define C0_COMPARE 11 /* counter comparison reg. */ +#define C0_CONFIG 16 /* hardware configuration */ +#define C0_LLADDR 17 /* load linked address */ +#define C0_WATCHLO 18 /* watchpoint */ +#define C0_WATCHHI 19 /* watchpoint */ +#define C0_ECC 26 /* S-cache ECC and primary parity */ +#define C0_CACHE_ERR 27 /* cache error status */ +#define C0_TAGLO 28 /* cache operations */ +#define C0_TAGHI 29 /* cache operations */ +#define C0_ERROR_EPC 30 /* ECC error prg. counter */ + +#endif /* _LANGUAGE_ASSEMBLY */ + +/* + * floating-point status register + */ +#define FPCSR_FS 0x01000000 /* flush denorm to zero */ +#define FPCSR_C 0x00800000 /* condition bit */ +#define FPCSR_CE 0x00020000 /* cause: unimplemented operation */ +#define FPCSR_CV 0x00010000 /* cause: invalid operation */ +#define FPCSR_CZ 0x00008000 /* cause: division by zero */ +#define FPCSR_CO 0x00004000 /* cause: overflow */ +#define FPCSR_CU 0x00002000 /* cause: underflow */ +#define FPCSR_CI 0x00001000 /* cause: inexact operation */ +#define FPCSR_EV 0x00000800 /* enable: invalid operation */ +#define FPCSR_EZ 0x00000400 /* enable: division by zero */ +#define FPCSR_EO 0x00000200 /* enable: overflow */ +#define FPCSR_EU 0x00000100 /* enable: underflow */ +#define FPCSR_EI 0x00000080 /* enable: inexact operation */ +#define FPCSR_FV 0x00000040 /* flag: invalid operation */ +#define FPCSR_FZ 0x00000020 /* flag: division by zero */ +#define FPCSR_FO 0x00000010 /* flag: overflow */ +#define FPCSR_FU 0x00000008 /* flag: underflow */ +#define FPCSR_FI 0x00000004 /* flag: inexact operation */ +#define FPCSR_RM_MASK 0x00000003 /* rounding mode mask */ +#define FPCSR_RM_RN 0x00000000 /* round to nearest */ +#define FPCSR_RM_RZ 0x00000001 /* round to zero */ +#define FPCSR_RM_RP 0x00000002 /* round to positive infinity */ +#define FPCSR_RM_RM 0x00000003 /* round to negative infinity */ + +#endif /* __R4300_H */ diff --git a/include/PR/os.h b/include/PR/os.h new file mode 100644 index 000000000..3126f4817 --- /dev/null +++ b/include/PR/os.h @@ -0,0 +1,800 @@ + +/*==================================================================== + * os.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/************************************************************************** + * + * $Revision: 1.149 $ + * $Date: 1997/12/15 04:30:52 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/os.h,v $ + * + **************************************************************************/ + + +#ifndef _OS_H_ +#define _OS_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "PR/os_message.h" + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +/* + * Structure for device manager block + */ +typedef struct { + s32 active; /* Status flag */ + OSThread *thread; /* Calling thread */ + OSMesgQueue *cmdQueue; /* Command queue */ + OSMesgQueue *evtQueue; /* Event queue */ + OSMesgQueue *acsQueue; /* Access queue */ + /* Raw DMA routine */ + s32 (*dma)(s32, u32, void *, u32); + s32 (*edma)(OSPiHandle *, s32, u32, void *, u32); +} OSDevMgr; + +/* + * Structure for file system + */ + + + +typedef struct { + int status; + OSMesgQueue *queue; + int channel; + u8 id[32]; + u8 label[32]; + int version; + int dir_size; + int inode_table; /* block location */ + int minode_table; /* mirrioring inode_table */ + int dir_table; /* block location */ + int inode_start_page; /* page # */ + u8 banks; + u8 activebank; +} OSPfs; + + +typedef struct { + u32 file_size; /* bytes */ + u32 game_code; + u16 company_code; + char ext_name[4]; + char game_name[16]; +} OSPfsState; + +/* + * Structure for Profiler + */ +typedef struct { + u16 *histo_base; /* histogram base */ + u32 histo_size; /* histogram size */ + u32 *text_start; /* start of text segment */ + u32 *text_end; /* end of text segment */ +} OSProf; + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* Thread states */ + +#define OS_STATE_STOPPED 1 +#define OS_STATE_RUNNABLE 2 +#define OS_STATE_RUNNING 4 +#define OS_STATE_WAITING 8 + +/* Events */ +#ifdef _FINALROM +#define OS_NUM_EVENTS 15 +#else +#define OS_NUM_EVENTS 23 +#endif + +#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */ +#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */ +#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */ +#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */ +#define OS_EVENT_SP 4 /* SP task done interrupt */ +#define OS_EVENT_SI 5 /* SI (controller) interrupt */ +#define OS_EVENT_AI 6 /* AI interrupt */ +#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */ +#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */ +#define OS_EVENT_DP 9 /* DP full sync interrupt */ +#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */ +#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */ +#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */ +#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */ +#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */ +#ifndef _FINALROM +#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */ +#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */ +#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */ +#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */ +#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */ +#define OS_EVENT_RDB_DBG_DONE 20 +#define OS_EVENT_RDB_FLUSH_PROF 21 +#define OS_EVENT_RDB_ACK_PROF 22 +#endif + +/* Flags for debugging purpose */ + +#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */ +#define OS_FLAG_FAULT 2 /* CPU fault has occurred */ + +/* Interrupt masks */ + +#define OS_IM_NONE 0x00000001 +#define OS_IM_SW1 0x00000501 +#define OS_IM_SW2 0x00000601 +#define OS_IM_CART 0x00000c01 +#define OS_IM_PRENMI 0x00001401 +#define OS_IM_RDBWRITE 0x00002401 +#define OS_IM_RDBREAD 0x00004401 +#define OS_IM_COUNTER 0x00008401 +#define OS_IM_CPU 0x0000ff01 +#define OS_IM_SP 0x00010401 +#define OS_IM_SI 0x00020401 +#define OS_IM_AI 0x00040401 +#define OS_IM_VI 0x00080401 +#define OS_IM_PI 0x00100401 +#define OS_IM_DP 0x00200401 +#define OS_IM_ALL 0x003fff01 +#define RCP_IMASK 0x003f0000 +#define RCP_IMASKSHIFT 16 + +/* Recommended thread priorities for the system threads */ + +#define OS_PRIORITY_MAX 255 +#define OS_PRIORITY_VIMGR 254 +#define OS_PRIORITY_RMON 250 +#define OS_PRIORITY_RMONSPIN 200 +#define OS_PRIORITY_PIMGR 150 +#define OS_PRIORITY_SIMGR 140 +#define OS_PRIORITY_APPMAX 127 +#define OS_PRIORITY_IDLE 0 /* Must be 0 */ + + +/* Flags to turn blocking on/off when sending/receiving message */ + +#define OS_MESG_NOBLOCK 0 +#define OS_MESG_BLOCK 1 + +/* Flags to indicate direction of data transfer */ + +#define OS_READ 0 /* device -> RDRAM */ +#define OS_WRITE 1 /* device <- RDRAM */ +#define OS_OTHERS 2 /* for Leo disk only */ + +/* + * I/O message types + */ +#define OS_MESG_TYPE_BASE (10) +#define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0) +#define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1) +#define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2) +#define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3) +#define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4) +#define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5) +#define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6) + +/* + * I/O message priority + */ +#define OS_MESG_PRI_NORMAL 0 +#define OS_MESG_PRI_HIGH 1 + +/* + * Page size argument for TLB routines + */ +#define OS_PM_4K 0x0000000 +#define OS_PM_16K 0x0006000 +#define OS_PM_64K 0x001e000 +#define OS_PM_256K 0x007e000 +#define OS_PM_1M 0x01fe000 +#define OS_PM_4M 0x07fe000 +#define OS_PM_16M 0x1ffe000 + +/* + * Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager), + * SIM (SI Manager) + * + */ +#define OS_PIM_STACKSIZE 4096 +#define OS_VIM_STACKSIZE 4096 +#define OS_SIM_STACKSIZE 4096 + +#define OS_MIN_STACKSIZE 72 + +/* + * Values for osTvType + */ +#define OS_TV_PAL 0 +#define OS_TV_NTSC 1 +#define OS_TV_MPAL 2 + +/* + * Video Interface (VI) mode type + */ +#define OS_VI_NTSC_LPN1 0 /* NTSC */ +#define OS_VI_NTSC_LPF1 1 +#define OS_VI_NTSC_LAN1 2 +#define OS_VI_NTSC_LAF1 3 +#define OS_VI_NTSC_LPN2 4 +#define OS_VI_NTSC_LPF2 5 +#define OS_VI_NTSC_LAN2 6 +#define OS_VI_NTSC_LAF2 7 +#define OS_VI_NTSC_HPN1 8 +#define OS_VI_NTSC_HPF1 9 +#define OS_VI_NTSC_HAN1 10 +#define OS_VI_NTSC_HAF1 11 +#define OS_VI_NTSC_HPN2 12 +#define OS_VI_NTSC_HPF2 13 + +#define OS_VI_PAL_LPN1 14 /* PAL */ +#define OS_VI_PAL_LPF1 15 +#define OS_VI_PAL_LAN1 16 +#define OS_VI_PAL_LAF1 17 +#define OS_VI_PAL_LPN2 18 +#define OS_VI_PAL_LPF2 19 +#define OS_VI_PAL_LAN2 20 +#define OS_VI_PAL_LAF2 21 +#define OS_VI_PAL_HPN1 22 +#define OS_VI_PAL_HPF1 23 +#define OS_VI_PAL_HAN1 24 +#define OS_VI_PAL_HAF1 25 +#define OS_VI_PAL_HPN2 26 +#define OS_VI_PAL_HPF2 27 + +#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */ +#define OS_VI_MPAL_LPF1 29 +#define OS_VI_MPAL_LAN1 30 +#define OS_VI_MPAL_LAF1 31 +#define OS_VI_MPAL_LPN2 32 +#define OS_VI_MPAL_LPF2 33 +#define OS_VI_MPAL_LAN2 34 +#define OS_VI_MPAL_LAF2 35 +#define OS_VI_MPAL_HPN1 36 +#define OS_VI_MPAL_HPF1 37 +#define OS_VI_MPAL_HAN1 38 +#define OS_VI_MPAL_HAF1 39 +#define OS_VI_MPAL_HPN2 40 +#define OS_VI_MPAL_HPF2 41 + +/* + * Video Interface (VI) special features + */ +#define OS_VI_GAMMA_ON 0x0001 +#define OS_VI_GAMMA_OFF 0x0002 +#define OS_VI_GAMMA_DITHER_ON 0x0004 +#define OS_VI_GAMMA_DITHER_OFF 0x0008 +#define OS_VI_DIVOT_ON 0x0010 +#define OS_VI_DIVOT_OFF 0x0020 +#define OS_VI_DITHER_FILTER_ON 0x0040 +#define OS_VI_DITHER_FILTER_OFF 0x0080 + +/* + * Video Interface (VI) mode attribute bit + */ +#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */ +#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */ +#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */ +#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */ +#define OS_VI_BIT_ANTIALIAS 0x0010 +#define OS_VI_BIT_POINTSAMPLE 0x0020 +#define OS_VI_BIT_16PIXEL 0x0040 +#define OS_VI_BIT_32PIXEL 0x0080 +#define OS_VI_BIT_LORES 0x0100 +#define OS_VI_BIT_HIRES 0x0200 +#define OS_VI_BIT_NTSC 0x0400 +#define OS_VI_BIT_PAL 0x0800 + +/* + * Leo Disk + */ + +/* transfer mode */ + +#define LEO_BLOCK_MODE 1 +#define LEO_TRACK_MODE 2 +#define LEO_SECTOR_MODE 3 + +/* + * Controllers number + */ + +#ifndef _HW_VERSION_1 +#define MAXCONTROLLERS 4 +#else +#define MAXCONTROLLERS 6 +#endif + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 +#ifdef _HW_VERSION_1 +#define CONT_FRAME_ERROR 0x2 +#define CONT_COLLISION_ERROR 0x1 +#endif + +/* Controller type */ + +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1f07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 + +/* Controller status */ + +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +/* EEPROM TYPE */ + +#define EEPROM_TYPE_4K 0x01 +#define EEPROM_TYPE_16K 0x02 + +/* Buttons */ + +#define CONT_A 0x8000 +#define CONT_B 0x4000 +#define CONT_G 0x2000 +#define CONT_START 0x1000 +#define CONT_UP 0x0800 +#define CONT_DOWN 0x0400 +#define CONT_LEFT 0x0200 +#define CONT_RIGHT 0x0100 +#define CONT_L 0x0020 +#define CONT_R 0x0010 +#define CONT_E 0x0008 +#define CONT_D 0x0004 +#define CONT_C 0x0002 +#define CONT_F 0x0001 + +/* Nintendo's official button names */ + +#define A_BUTTON CONT_A +#define B_BUTTON CONT_B +#define L_TRIG CONT_L +#define R_TRIG CONT_R +#define Z_TRIG CONT_G +#define START_BUTTON CONT_START +#define U_JPAD CONT_UP +#define L_JPAD CONT_LEFT +#define R_JPAD CONT_RIGHT +#define D_JPAD CONT_DOWN +#define U_CBUTTONS CONT_E +#define L_CBUTTONS CONT_C +#define R_CBUTTONS CONT_F +#define D_CBUTTONS CONT_D + +/* File System size */ +#define OS_PFS_VERSION 0x0200 +#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) +#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) + +#define PFS_FILE_NAME_LEN 16 +#define PFS_FILE_EXT_LEN 4 +#define BLOCKSIZE 32 /* bytes */ +#define PFS_ONE_PAGE 8 /* blocks */ +#define PFS_MAX_BANKS 62 + +/* File System flag */ + +#define PFS_READ 0 +#define PFS_WRITE 1 +#define PFS_CREATE 2 + +/* File System status */ +#define PFS_INITIALIZED 0x1 +#define PFS_CORRUPTED 0x2 /* File system was corrupted */ + +/* File System error number */ + +#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */ +#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */ + /* different one */ +#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */ +#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR +#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/ +#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/ +#define PFS_DATA_FULL 7 /* no free pages on ram pack */ +#define PFS_DIR_FULL 8 /* no free directories on ram pack*/ +#define PFS_ERR_EXIST 9 /* file exists */ +#define PFS_ERR_ID_FATAL 10 /* dead ram pack */ +#define PFS_ERR_DEVICE 11 /* wrong device type*/ + +/* definition for EEPROM */ + +#define EEPROM_MAXBLOCKS 64 +#define EEP16K_MAXBLOCKS 256 +#define EEPROM_BLOCK_SIZE 8 + +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + +/* + * Profiler constants + */ +#define PROF_MIN_INTERVAL 50 /* microseconds */ + +/* + * Boot addresses + */ +#define BOOT_ADDRESS_ULTRA 0x80000400 +#define BOOT_ADDRESS_COSIM 0x80002000 +#define BOOT_ADDRESS_EMU 0x20010000 +#define BOOT_ADDRESS_INDY 0x88100000 + +/* + * Size of buffer the retains contents after NMI + */ +#define OS_APP_NMI_BUFSIZE 64 + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + +/* PARTNER-N64 */ +#ifdef PTN64 +#define osReadHost osReadHost_pt +#define osWriteHost osWriteHost_pt +#endif + +/* Get count of valid messages in queue */ +#define MQ_GET_COUNT(mq) ((mq)->validCount) + +/* Figure out if message queue is empty or full */ +#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) +#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) + +/* + * CPU counter increments at 3/4 of bus clock rate: + * + * Bus Clock Proc Clock Counter (1/2 Proc Clock) + * --------- ---------- ------------------------ + * 62.5 Mhz 93.75 Mhz 46.875 Mhz + */ +extern u64 osClockRate; + +#define OS_CLOCK_RATE 62500000LL +#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4) +#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL)) +#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL)) +#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL)) +#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL)) + +/************************************************************************** + * + * Extern variables + * + */ +extern OSViMode osViModeTable[]; /* Global VI mode table */ + +extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */ +extern OSViMode osViModeNtscLpf1; +extern OSViMode osViModeNtscLan1; +extern OSViMode osViModeNtscLaf1; +extern OSViMode osViModeNtscLpn2; +extern OSViMode osViModeNtscLpf2; +extern OSViMode osViModeNtscLan2; +extern OSViMode osViModeNtscLaf2; +extern OSViMode osViModeNtscHpn1; +extern OSViMode osViModeNtscHpf1; +extern OSViMode osViModeNtscHan1; +extern OSViMode osViModeNtscHaf1; +extern OSViMode osViModeNtscHpn2; +extern OSViMode osViModeNtscHpf2; + +extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */ +extern OSViMode osViModePalLpf1; +extern OSViMode osViModePalLan1; +extern OSViMode osViModePalLaf1; +extern OSViMode osViModePalLpn2; +extern OSViMode osViModePalLpf2; +extern OSViMode osViModePalLan2; +extern OSViMode osViModePalLaf2; +extern OSViMode osViModePalHpn1; +extern OSViMode osViModePalHpf1; +extern OSViMode osViModePalHan1; +extern OSViMode osViModePalHaf1; +extern OSViMode osViModePalHpn2; +extern OSViMode osViModePalHpf2; + +extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */ +extern OSViMode osViModeMpalLpf1; +extern OSViMode osViModeMpalLan1; +extern OSViMode osViModeMpalLaf1; +extern OSViMode osViModeMpalLpn2; +extern OSViMode osViModeMpalLpf2; +extern OSViMode osViModeMpalLan2; +extern OSViMode osViModeMpalLaf2; +extern OSViMode osViModeMpalHpn1; +extern OSViMode osViModeMpalHpf1; +extern OSViMode osViModeMpalHan1; +extern OSViMode osViModeMpalHaf1; +extern OSViMode osViModeMpalHpn2; +extern OSViMode osViModeMpalHpf2; + +extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */ +extern u32 osRomBase; /* Rom base address of the game image */ +extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */ +extern u32 osResetType; /* 0 = cold reset, 1 = NMI */ +extern s32 osCicId; +extern s32 osVersion; +extern u32 osMemSize; /* Memory Size */ +extern s32 osAppNMIBuffer[]; + +extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */ +extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */ +extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/ + + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Thread operations */ + +extern void osCreateThread(OSThread *, OSId, void (*)(void *), + void *, void *, OSPri); +extern void osDestroyThread(OSThread *); +extern void osYieldThread(void); +extern void osStartThread(OSThread *); +extern void osStopThread(OSThread *); +extern OSId osGetThreadId(OSThread *); +extern void osSetThreadPri(OSThread *, OSPri); +extern OSPri osGetThreadPri(OSThread *); + +/* Message operations */ + +extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32); +extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32); + +/* Event operations */ + +extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg); + +/* Interrupt operations */ + +extern OSIntMask osGetIntMask(void); +extern OSIntMask osSetIntMask(OSIntMask); + +/* RDB port operations */ + +extern void osInitRdb(u8 *sendBuf, u32 sendSize); + +/* Cache operations and macros */ + +extern void osInvalDCache(void *, size_t); +extern void osInvalICache(void *, size_t); +extern void osWritebackDCache(void *, size_t); +extern void osWritebackDCacheAll(void); + +#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10)) +#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10)) + +/* TLB management routines */ + +extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32); +extern void osMapTLBRdb(void); +extern void osUnmapTLB(s32); +extern void osUnmapTLBAll(void); +extern void osSetTLBASID(s32); + +/* Address translation routines and macros */ + +extern u32 osVirtualToPhysical(void *); +extern void * osPhysicalToVirtual(u32); + +#define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000)) +#define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000)) + +#define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000)) +#define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000)) + +/* I/O operations */ + +/* Audio interface (Ai) */ +extern u32 osAiGetStatus(void); +extern u32 osAiGetLength(void); +extern s32 osAiSetFrequency(u32); +extern s32 osAiSetNextBuffer(void *, u32); + +/* Display processor interface (Dp) */ +extern u32 osDpGetStatus(void); +extern void osDpSetStatus(u32); +extern void osDpGetCounters(u32 *); +extern s32 osDpSetNextBuffer(void *, u64); + +/* Peripheral interface (Pi) */ +extern u32 osPiGetStatus(void); +extern s32 osPiGetDeviceType(void); +extern s32 osPiRawWriteIo(u32, u32); +extern s32 osPiRawReadIo(u32, u32 *); +extern s32 osPiRawStartDma(s32, u32, void *, u32); +extern s32 osPiWriteIo(u32, u32); +extern s32 osPiReadIo(u32, u32 *); +extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32, + OSMesgQueue *); +extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32); + +/* Video interface (Vi) */ +extern u32 osViGetStatus(void); +extern u32 osViGetCurrentMode(void); +extern u32 osViGetCurrentLine(void); +extern u32 osViGetCurrentField(void); +extern void *osViGetCurrentFramebuffer(void); +extern void *osViGetNextFramebuffer(void); +extern void osViSetXScale(f32); +extern void osViSetYScale(f32); +extern void osViSetSpecialFeatures(u32); +extern void osViSetMode(OSViMode *); +extern void osViSetEvent(OSMesgQueue *, OSMesg, u32); +extern void osViSwapBuffer(void *); +extern void osViBlack(u8); +extern void osViFade(u8, u16); +extern void osViRepeatLine(u8); +extern void osCreateViManager(OSPri); + +/* Timer interface */ + +extern OSTime osGetTime(void); +extern void osSetTime(OSTime); +extern u32 osSetTimer(OSTimer *, OSTime, OSTime, + OSMesgQueue *, OSMesg); +extern int osStopTimer(OSTimer *); + +/* Controller interface */ + +extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *); +extern s32 osContReset(OSMesgQueue *, OSContStatus *); +extern s32 osContStartQuery(OSMesgQueue *); +extern s32 osContStartReadData(OSMesgQueue *); +#ifndef _HW_VERSION_1 +extern s32 osContSetCh(u8); +#endif +extern void osContGetQuery(OSContStatus *); +extern void osContGetReadData(OSContPad *); + +/* file system interface */ + +extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int); +extern s32 osPfsRepairId(OSPfs *); +extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int); +extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int); +extern s32 osPfsChecker(OSPfs *); +extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *); +extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *); +extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *); +extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *); +extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *); +extern s32 osPfsGetLabel(OSPfs *, u8 *, int *); +extern s32 osPfsSetLabel(OSPfs *, u8 *); +extern s32 osPfsIsPlug(OSMesgQueue *, u8 *); +extern s32 osPfsFreeBlocks(OSPfs *, s32 *); +extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *); + +/* EEPROM interface */ + +extern s32 osEepromProbe(OSMesgQueue *); +extern s32 osEepromRead(OSMesgQueue *, u8, u8 *); +extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *); +extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int); +extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int); + +/* MOTOR interface */ + +extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int); +extern s32 osMotorStop(OSPfs *); +extern s32 osMotorStart(OSPfs *); + +/* Enhanced PI interface */ + +extern OSPiHandle *osCartRomInit(void); +extern OSPiHandle *osLeoDiskInit(void); +extern OSPiHandle *osDriveRomInit(void); + +extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *); +extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32); +extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *); +extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 ); +extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 ); +extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *); +extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32); +extern s32 osEPiLinkHandle(OSPiHandle *); + +/* Profiler Interface */ + +extern void osProfileInit(OSProf *, u32 profcnt); +extern void osProfileStart(u32); +extern void osProfileFlush(void); +extern void osProfileStop(void); + +/* Game <> Host data transfer functions */ + +extern s32 osTestHost(void); +extern void osReadHost(void *, u32); +extern void osWriteHost(void *, u32); +extern void osAckRamromRead(void); +extern void osAckRamromWrite(void); + + +/* byte string operations */ + +extern void bcopy(const void *, void *, size_t); +extern int bcmp(const void *, const void *, int); +extern void bzero(void *, size_t); + +/* Miscellaneous operations */ + +extern void osInitialize(void); +extern u32 osGetCount(void); +extern void osExit(void); +extern u32 osGetMemSize(void); + +/* Printf */ + +extern int sprintf(char *s, const char *fmt, ...); +extern void osSyncPrintf(const char *fmt, ...); +extern void osAsyncPrintf(const char *fmt, ...); +extern int osSyncGetChars(char *buf); +extern int osAsyncGetChars(char *buf); + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_H */ diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 9b5abd2b6..f3552c0c2 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -5,6 +5,8 @@ /* Types */ + +#ifndef MK64 typedef struct { #if !defined(VERSION_EU) && !defined(VERSION_SH) u32 errStatus; @@ -15,6 +17,15 @@ typedef struct { u32 C1ErrNum; u32 C1ErrSector[4]; } __OSBlockInfo; +#else +typedef struct { + void *dramAddr; + void *C2Addr; + u32 sectorSize; + u32 C1ErrNum; + u32 C1ErrSector[4]; +} __OSBlockInfo; +#endif typedef struct { u32 cmdType; // 0 @@ -22,9 +33,7 @@ typedef struct { u16 blockNum; // 6 s32 sectorNum; // 8 uintptr_t devAddr; // c -#if defined(VERSION_EU) || defined(VERSION_SH) - u32 unk10; //error status added moved to blockinfo -#endif + u32 errStatus; //error status added moved to blockinfo u32 bmCtlShadow; // 10 u32 seqCtlShadow; // 14 __OSBlockInfo block[2]; // 18 @@ -60,9 +69,7 @@ typedef struct { /*0x08*/ void *dramAddr; /*0x0C*/ uintptr_t devAddr; /*0x10*/ size_t size; -#if defined(VERSION_EU) || defined(VERSION_SH) OSPiHandle *piHandle; // from the official definition -#endif } OSIoMesg; /* Definitions */ diff --git a/include/PR/os_vi.h b/include/PR/os_vi.h index 3578c9a31..98fb4ed31 100644 --- a/include/PR/os_vi.h +++ b/include/PR/os_vi.h @@ -61,7 +61,7 @@ typedef struct /* 0x00 */ u16 unk00; //some kind of flags. swap buffer sets to 0x10 /* 0x02 */ u16 retraceCount; /* 0x04 */ void* buffer; - /* 0x08 */ OSViMode *unk08; + /* 0x08 */ OSViMode *modep; /* 0x0c */ u32 features; /* 0x10 */ OSMesgQueue *mq; /* 0x14 */ OSMesg *msg; diff --git a/include/PR/rcp.h b/include/PR/rcp.h new file mode 100644 index 000000000..68ce9682d --- /dev/null +++ b/include/PR/rcp.h @@ -0,0 +1,881 @@ +#ifndef _RCP_H_ +#define _RCP_H_ + +/************************************************************************** + * * + * Copyright (C) 1995, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * File: rcp.h + * + * This file contains register and bit definitions for RCP memory map. + * $Revision: 1.20 $ + * $Date: 1997/07/23 08:35:21 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/rcp.h,v $ + * + **************************************************************************/ + +#include +#include + +/********************************************************************** + * + * Here is a quick overview of the RCP memory map: + * + +0x0000_0000 .. 0x03ef_ffff RDRAM memory +0x03f0_0000 .. 0x03ff_ffff RDRAM registers + + RCP registers (see below) +0x0400_0000 .. 0x040f_ffff SP registers +0x0410_0000 .. 0x041f_ffff DP command registers +0x0420_0000 .. 0x042f_ffff DP span registers +0x0430_0000 .. 0x043f_ffff MI registers +0x0440_0000 .. 0x044f_ffff VI registers +0x0450_0000 .. 0x045f_ffff AI registers +0x0460_0000 .. 0x046f_ffff PI registers +0x0470_0000 .. 0x047f_ffff RI registers +0x0480_0000 .. 0x048f_ffff SI registers +0x0490_0000 .. 0x04ff_ffff unused + +0x0500_0000 .. 0x05ff_ffff cartridge domain 2 +0x0600_0000 .. 0x07ff_ffff cartridge domain 1 +0x0800_0000 .. 0x0fff_ffff cartridge domain 2 +0x1000_0000 .. 0x1fbf_ffff cartridge domain 1 + +0x1fc0_0000 .. 0x1fc0_07bf PIF Boot Rom (1984 bytes) +0x1fc0_07c0 .. 0x1fc0_07ff PIF (JoyChannel) RAM (64 bytes) +0x1fc0_0800 .. 0x1fcf_ffff Reserved +0x1fd0_0000 .. 0x7fff_ffff cartridge domain 1 +0x8000_0000 .. 0xffff_ffff external SysAD device + +The Indy development board use cartridge domain 1: +0x1000_0000 .. 0x10ff_ffff RAMROM +0x1800_0000 .. 0x1800_0003 GIO interrupt (6 bits valid in 4 bytes) +0x1800_0400 .. 0x1800_0403 GIO sync (6 bits valid in 4 bytes) +0x1800_0800 .. 0x1800_0803 CART interrupt (6 bits valid in 4 bytes) + + + +**************************************************************************/ + + +/************************************************************************* + * RDRAM Memory (Assumes that maximum size is 4 MB) + */ +#define RDRAM_0_START 0x00000000 +#define RDRAM_0_END 0x001FFFFF +#define RDRAM_1_START 0x00200000 +#define RDRAM_1_END 0x003FFFFF + +#define RDRAM_START RDRAM_0_START +#define RDRAM_END RDRAM_1_END + + +/************************************************************************* + * Address predicates + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) +#define IS_RDRAM(x) ((unsigned)(x) >= RDRAM_START && \ + (unsigned)(x) < RDRAM_END) +#endif + + +/************************************************************************* + * RDRAM Registers (0x03f0_0000 .. 0x03ff_ffff) + */ +#define RDRAM_BASE_REG 0x03F00000 + +#define RDRAM_CONFIG_REG (RDRAM_BASE_REG+0x00) +#define RDRAM_DEVICE_TYPE_REG (RDRAM_BASE_REG+0x00) +#define RDRAM_DEVICE_ID_REG (RDRAM_BASE_REG+0x04) +#define RDRAM_DELAY_REG (RDRAM_BASE_REG+0x08) +#define RDRAM_MODE_REG (RDRAM_BASE_REG+0x0c) +#define RDRAM_REF_INTERVAL_REG (RDRAM_BASE_REG+0x10) +#define RDRAM_REF_ROW_REG (RDRAM_BASE_REG+0x14) +#define RDRAM_RAS_INTERVAL_REG (RDRAM_BASE_REG+0x18) +#define RDRAM_MIN_INTERVAL_REG (RDRAM_BASE_REG+0x1c) +#define RDRAM_ADDR_SELECT_REG (RDRAM_BASE_REG+0x20) +#define RDRAM_DEVICE_MANUF_REG (RDRAM_BASE_REG+0x24) + +#define RDRAM_0_DEVICE_ID 0 +#define RDRAM_1_DEVICE_ID 1 + +#define RDRAM_RESET_MODE 0 +#define RDRAM_ACTIVE_MODE 1 +#define RDRAM_STANDBY_MODE 2 + +#define RDRAM_LENGTH (2*512*2048) +#define RDRAM_0_BASE_ADDRESS (RDRAM_0_DEVICE_ID*RDRAM_LENGTH) +#define RDRAM_1_BASE_ADDRESS (RDRAM_1_DEVICE_ID*RDRAM_LENGTH) + +#define RDRAM_0_CONFIG 0x00000 +#define RDRAM_1_CONFIG 0x00400 +#define RDRAM_GLOBAL_CONFIG 0x80000 + + +/************************************************************************* + * PIF Physical memory map (total size = 2 KB) + * + * Size Description Mode + * 1FC007FF +-------+-----------------+-----+ + * | 64 B | JoyChannel RAM | R/W | + * 1FC007C0 +-------+-----------------+-----+ + * |1984 B | Boot ROM | * | * = Reserved + * 1FC00000 +-------+-----------------+-----+ + * + */ +#define PIF_ROM_START 0x1FC00000 +#define PIF_ROM_END 0x1FC007BF +#define PIF_RAM_START 0x1FC007C0 +#define PIF_RAM_END 0x1FC007FF + + +/************************************************************************* + * Controller channel + * Each game controller channel has 4 error bits that are defined in bit 6-7 of + * the Rx and Tx data size area bytes. Programmers need to clear these bits + * when setting the Tx/Rx size area values for a channel + */ +#define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ +#define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ +#define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */ +#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */ + +#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ + + +/************************************************************************* + * External device info + */ +#define DEVICE_TYPE_CART 0 /* ROM cartridge */ +#define DEVICE_TYPE_BULK 1 /* ROM bulk */ +#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ +#define DEVICE_TYPE_SRAM 3 /* SRAM */ + +/************************************************************************* + * SP Memory + */ +#define SP_DMEM_START 0x04000000 /* read/write */ +#define SP_DMEM_END 0x04000FFF +#define SP_IMEM_START 0x04001000 /* read/write */ +#define SP_IMEM_END 0x04001FFF + +/************************************************************************* + * SP CP0 Registers + */ + +#define SP_BASE_REG 0x04040000 + +/* SP memory address (R/W): [11:0] DMEM/IMEM address; [12] 0=DMEM,1=IMEM */ +#define SP_MEM_ADDR_REG (SP_BASE_REG+0x00) /* Master */ + +/* SP DRAM DMA address (R/W): [23:0] RDRAM address */ +#define SP_DRAM_ADDR_REG (SP_BASE_REG+0x04) /* Slave */ + +/* SP read DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */ +/* direction: I/DMEM <- RDRAM */ +#define SP_RD_LEN_REG (SP_BASE_REG+0x08) /* R/W: read len */ + +/* SP write DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */ +/* direction: I/DMEM -> RDRAM */ +#define SP_WR_LEN_REG (SP_BASE_REG+0x0C) /* R/W: write len */ + +/* SP status (R/W): [14:0] valid bits; see below for write/read mode */ +#define SP_STATUS_REG (SP_BASE_REG+0x10) + +/* SP DMA full (R): [0] valid bit; dma full */ +#define SP_DMA_FULL_REG (SP_BASE_REG+0x14) + +/* SP DMA busy (R): [0] valid bit; dma busy */ +#define SP_DMA_BUSY_REG (SP_BASE_REG+0x18) + +/* SP semaphore (R/W): Read: [0] semaphore flag (set on read) */ +/* Write: [] clear semaphore flag */ +#define SP_SEMAPHORE_REG (SP_BASE_REG+0x1C) + +/* SP PC (R/W): [11:0] program counter */ +#define SP_PC_REG 0x04080000 + +/* SP MEM address: bit 12 specifies if address is IMEM or DMEM */ +#define SP_DMA_DMEM 0x0000 /* Bit 12: 0=DMEM, 1=IMEM */ +#define SP_DMA_IMEM 0x1000 /* Bit 12: 0=DMEM, 1=IMEM */ + +/* + * Values to clear/set bit in status reg (SP_STATUS_REG - write) + */ +#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ +#define SP_SET_HALT 0x00002 /* Bit 1: set halt */ +#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ +#define SP_CLR_INTR 0x00008 /* Bit 3: clear intr */ +#define SP_SET_INTR 0x00010 /* Bit 4: set intr */ +#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ +#define SP_SET_SSTEP 0x00040 /* Bit 6: set sstep */ +#define SP_CLR_INTR_BREAK 0x00080 /* Bit 7: clear intr on break */ +#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ +#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */ +#define SP_SET_SIG0 0x00400 /* Bit 10: set signal 0 */ +#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */ +#define SP_SET_SIG1 0x01000 /* Bit 12: set signal 1 */ +#define SP_CLR_SIG2 0x02000 /* Bit 13: clear signal 2 */ +#define SP_SET_SIG2 0x04000 /* Bit 14: set signal 2 */ +#define SP_CLR_SIG3 0x08000 /* Bit 15: clear signal 3 */ +#define SP_SET_SIG3 0x10000 /* Bit 16: set signal 3 */ +#define SP_CLR_SIG4 0x20000 /* Bit 17: clear signal 4 */ +#define SP_SET_SIG4 0x40000 /* Bit 18: set signal 4 */ +#define SP_CLR_SIG5 0x80000 /* Bit 19: clear signal 5 */ +#define SP_SET_SIG5 0x100000 /* Bit 20: set signal 5 */ +#define SP_CLR_SIG6 0x200000 /* Bit 21: clear signal 6 */ +#define SP_SET_SIG6 0x400000 /* Bit 22: set signal 6 */ +#define SP_CLR_SIG7 0x800000 /* Bit 23: clear signal 7 */ +#define SP_SET_SIG7 0x1000000 /* Bit 24: set signal 7 */ + +/* + * Patterns to interpret status reg (SP_STATUS_REG - read) + */ +#define SP_STATUS_HALT 0x001 /* Bit 0: halt */ +#define SP_STATUS_BROKE 0x002 /* Bit 1: broke */ +#define SP_STATUS_DMA_BUSY 0x004 /* Bit 2: dma busy */ +#define SP_STATUS_DMA_FULL 0x008 /* Bit 3: dma full */ +#define SP_STATUS_IO_FULL 0x010 /* Bit 4: io full */ +#define SP_STATUS_SSTEP 0x020 /* Bit 5: single step */ +#define SP_STATUS_INTR_BREAK 0x040 /* Bit 6: interrupt on break */ +#define SP_STATUS_SIG0 0x080 /* Bit 7: signal 0 set */ +#define SP_STATUS_SIG1 0x100 /* Bit 8: signal 1 set */ +#define SP_STATUS_SIG2 0x200 /* Bit 9: signal 2 set */ +#define SP_STATUS_SIG3 0x400 /* Bit 10: signal 3 set */ +#define SP_STATUS_SIG4 0x800 /* Bit 11: signal 4 set */ +#define SP_STATUS_SIG5 0x1000 /* Bit 12: signal 5 set */ +#define SP_STATUS_SIG6 0x2000 /* Bit 13: signal 6 set */ +#define SP_STATUS_SIG7 0x4000 /* Bit 14: signal 7 set */ + +/* + * Use of SIG bits + */ +#define SP_CLR_YIELD SP_CLR_SIG0 +#define SP_SET_YIELD SP_SET_SIG0 +#define SP_STATUS_YIELD SP_STATUS_SIG0 +#define SP_CLR_YIELDED SP_CLR_SIG1 +#define SP_SET_YIELDED SP_SET_SIG1 +#define SP_STATUS_YIELDED SP_STATUS_SIG1 +#define SP_CLR_TASKDONE SP_CLR_SIG2 +#define SP_SET_TASKDONE SP_SET_SIG2 +#define SP_STATUS_TASKDONE SP_STATUS_SIG2 +#define SP_CLR_RSPSIGNAL SP_CLR_SIG3 +#define SP_SET_RSPSIGNAL SP_SET_SIG3 +#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3 +#define SP_CLR_CPUSIGNAL SP_CLR_SIG4 +#define SP_SET_CPUSIGNAL SP_SET_SIG4 +#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4 + +/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */ +#define SP_IBIST_REG 0x04080004 + +/* + * Patterns to interpret status reg (SP_BIST_REG - write) + */ +#define SP_IBIST_CHECK 0x01 /* Bit 0: BIST check */ +#define SP_IBIST_GO 0x02 /* Bit 1: BIST go */ +#define SP_IBIST_CLEAR 0x04 /* Bit 2: BIST clear */ + +/* + * Patterns to interpret status reg (SP_BIST_REG - read) + */ +/* First 2 bits are same as in write mode: + * Bit 0: BIST check; Bit 1: BIST go + */ +#define SP_IBIST_DONE 0x04 /* Bit 2: BIST done */ +#define SP_IBIST_FAILED 0x78 /* Bit [6:3]: BIST fail */ + + +/************************************************************************* + * DP Command Registers + */ +#define DPC_BASE_REG 0x04100000 + +/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */ +#define DPC_START_REG (DPC_BASE_REG+0x00) + +/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */ +#define DPC_END_REG (DPC_BASE_REG+0x04) + +/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */ +#define DPC_CURRENT_REG (DPC_BASE_REG+0x08) + +/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */ +#define DPC_STATUS_REG (DPC_BASE_REG+0x0C) + +/* DP clock counter (R): [23:0] clock counter */ +#define DPC_CLOCK_REG (DPC_BASE_REG+0x10) + +/* DP buffer busy counter (R): [23:0] clock counter */ +#define DPC_BUFBUSY_REG (DPC_BASE_REG+0x14) + +/* DP pipe busy counter (R): [23:0] clock counter */ +#define DPC_PIPEBUSY_REG (DPC_BASE_REG+0x18) + +/* DP TMEM load counter (R): [23:0] clock counter */ +#define DPC_TMEM_REG (DPC_BASE_REG+0x1C) + +/* + * Values to clear/set bit in status reg (DPC_STATUS_REG - write) + */ +#define DPC_CLR_XBUS_DMEM_DMA 0x0001 /* Bit 0: clear xbus_dmem_dma */ +#define DPC_SET_XBUS_DMEM_DMA 0x0002 /* Bit 1: set xbus_dmem_dma */ +#define DPC_CLR_FREEZE 0x0004 /* Bit 2: clear freeze */ +#define DPC_SET_FREEZE 0x0008 /* Bit 3: set freeze */ +#define DPC_CLR_FLUSH 0x0010 /* Bit 4: clear flush */ +#define DPC_SET_FLUSH 0x0020 /* Bit 5: set flush */ +#define DPC_CLR_TMEM_CTR 0x0040 /* Bit 6: clear tmem ctr */ +#define DPC_CLR_PIPE_CTR 0x0080 /* Bit 7: clear pipe ctr */ +#define DPC_CLR_CMD_CTR 0x0100 /* Bit 8: clear cmd ctr */ +#define DPC_CLR_CLOCK_CTR 0x0200 /* Bit 9: clear clock ctr */ + +/* + * Patterns to interpret status reg (DPC_STATUS_REG - read) + */ +#define DPC_STATUS_XBUS_DMEM_DMA 0x001 /* Bit 0: xbus_dmem_dma */ +#define DPC_STATUS_FREEZE 0x002 /* Bit 1: freeze */ +#define DPC_STATUS_FLUSH 0x004 /* Bit 2: flush */ +/*#define DPC_STATUS_FROZEN 0x008*/ /* Bit 3: frozen */ +#define DPC_STATUS_START_GCLK 0x008 /* Bit 3: start gclk */ +#define DPC_STATUS_TMEM_BUSY 0x010 /* Bit 4: tmem busy */ +#define DPC_STATUS_PIPE_BUSY 0x020 /* Bit 5: pipe busy */ +#define DPC_STATUS_CMD_BUSY 0x040 /* Bit 6: cmd busy */ +#define DPC_STATUS_CBUF_READY 0x080 /* Bit 7: cbuf ready */ +#define DPC_STATUS_DMA_BUSY 0x100 /* Bit 8: dma busy */ +#define DPC_STATUS_END_VALID 0x200 /* Bit 9: end valid */ +#define DPC_STATUS_START_VALID 0x400 /* Bit 10: start valid */ + + +/************************************************************************* + * DP Span Registers + */ +#define DPS_BASE_REG 0x04200000 + +/* DP tmem bist (R/W): [10:0] BIST status bits; see below for detail */ +#define DPS_TBIST_REG (DPS_BASE_REG+0x00) + +/* DP span test mode (R/W): [0] Span buffer test access enable */ +#define DPS_TEST_MODE_REG (DPS_BASE_REG+0x04) + +/* DP span buffer test address (R/W): [6:0] bits; see below for detail */ +#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG+0x08) + +/* DP span buffer test data (R/W): [31:0] span buffer data */ +#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG+0x0C) + +/* + * Patterns to interpret status reg (DPS_TMEM_BIST_REG - write) + */ +#define DPS_TBIST_CHECK 0x01 /* Bit 0: BIST check */ +#define DPS_TBIST_GO 0x02 /* Bit 1: BIST go */ +#define DPS_TBIST_CLEAR 0x04 /* Bit 2: BIST clear */ + +/* + * Patterns to interpret status reg (DPS_TMEM_BIST_REG - read) + */ +/* First 2 bits are same as in write mode: + * Bit 0: BIST check; Bit 1: BIST go + */ +#define DPS_TBIST_DONE 0x004 /* Bit 2: BIST done */ +#define DPS_TBIST_FAILED 0x7F8 /* Bit [10:3]: BIST fail */ + + +/************************************************************************* + * MIPS Interface (MI) Registers + */ +#define MI_BASE_REG 0x04300000 + +/* + * MI init mode (W): [6:0] init length, [7] clear init mode, [8] set init mode + * [9/10] clear/set ebus test mode, [11] clear DP interrupt + * (R): [6:0] init length, [7] init mode, [8] ebus test mode + */ +#define MI_INIT_MODE_REG (MI_BASE_REG+0x00) +#define MI_MODE_REG MI_INIT_MODE_REG + +/* + * Values to clear/set bit in mode reg (MI_MODE_REG - write) + */ +#define MI_CLR_INIT 0x0080 /* Bit 7: clear init mode */ +#define MI_SET_INIT 0x0100 /* Bit 8: set init mode */ +#define MI_CLR_EBUS 0x0200 /* Bit 9: clear ebus test */ +#define MI_SET_EBUS 0x0400 /* Bit 10: set ebus test mode */ +#define MI_CLR_DP_INTR 0x0800 /* Bit 11: clear dp interrupt */ +#define MI_CLR_RDRAM 0x1000 /* Bit 12: clear RDRAM reg */ +#define MI_SET_RDRAM 0x2000 /* Bit 13: set RDRAM reg mode */ + +/* + * Patterns to interpret mode reg (MI_MODE_REG - read) + */ +#define MI_MODE_INIT 0x0080 /* Bit 7: init mode */ +#define MI_MODE_EBUS 0x0100 /* Bit 8: ebus test mode */ +#define MI_MODE_RDRAM 0x0200 /* Bit 9: RDRAM reg mode */ + +/* MI version (R): [7:0] io, [15:8] rac, [23:16] rdp, [31:24] rsp */ +#define MI_VERSION_REG (MI_BASE_REG+0x04) +#define MI_NOOP_REG MI_VERSION_REG + +/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */ +#define MI_INTR_REG (MI_BASE_REG+0x08) + +/* + * MI interrupt mask (W): [11:0] valid bits - see below for bit patterns + * (R): [5:0] valid bits - see below for bit patterns + */ +#define MI_INTR_MASK_REG (MI_BASE_REG+0x0C) + +/* + * The following are values to check for interrupt setting (MI_INTR_REG) + */ +#define MI_INTR_SP 0x01 /* Bit 0: SP intr */ +#define MI_INTR_SI 0x02 /* Bit 1: SI intr */ +#define MI_INTR_AI 0x04 /* Bit 2: AI intr */ +#define MI_INTR_VI 0x08 /* Bit 3: VI intr */ +#define MI_INTR_PI 0x10 /* Bit 4: PI intr */ +#define MI_INTR_DP 0x20 /* Bit 5: DP intr */ + +/* + * The following are values to clear/set various interrupt bit mask + * They can be ORed together to manipulate multiple bits + * (MI_INTR_MASK_REG - write) + */ +#define MI_INTR_MASK_CLR_SP 0x0001 /* Bit 0: clear SP mask */ +#define MI_INTR_MASK_SET_SP 0x0002 /* Bit 1: set SP mask */ +#define MI_INTR_MASK_CLR_SI 0x0004 /* Bit 2: clear SI mask */ +#define MI_INTR_MASK_SET_SI 0x0008 /* Bit 3: set SI mask */ +#define MI_INTR_MASK_CLR_AI 0x0010 /* Bit 4: clear AI mask */ +#define MI_INTR_MASK_SET_AI 0x0020 /* Bit 5: set AI mask */ +#define MI_INTR_MASK_CLR_VI 0x0040 /* Bit 6: clear VI mask */ +#define MI_INTR_MASK_SET_VI 0x0080 /* Bit 7: set VI mask */ +#define MI_INTR_MASK_CLR_PI 0x0100 /* Bit 8: clear PI mask */ +#define MI_INTR_MASK_SET_PI 0x0200 /* Bit 9: set PI mask */ +#define MI_INTR_MASK_CLR_DP 0x0400 /* Bit 10: clear DP mask */ +#define MI_INTR_MASK_SET_DP 0x0800 /* Bit 11: set DP mask */ + +/* + * The following are values to check for interrupt mask setting + * (MI_INTR_MASK_REG - read) + */ +#define MI_INTR_MASK_SP 0x01 /* Bit 0: SP intr mask */ +#define MI_INTR_MASK_SI 0x02 /* Bit 1: SI intr mask */ +#define MI_INTR_MASK_AI 0x04 /* Bit 2: AI intr mask */ +#define MI_INTR_MASK_VI 0x08 /* Bit 3: VI intr mask */ +#define MI_INTR_MASK_PI 0x10 /* Bit 4: PI intr mask */ +#define MI_INTR_MASK_DP 0x20 /* Bit 5: DP intr mask */ + + +/************************************************************************* + * Video Interface (VI) Registers + */ +#define VI_BASE_REG 0x04400000 + +/* VI status/control (R/W): [15-0] valid bits: + * [1:0] = type[1:0] (pixel size) + * 0: blank (no data, no sync) + * 1: reserved + * 2: 5/5/5/3 ("16" bit) + * 3: 8/8/8/8 (32 bit) + * [2] = gamma_dither_enable (normally on, unless "special effect") + * [3] = gamma_enable (normally on, unless MPEG/JPEG) + * [4] = divot_enable (normally on if antialiased, unless decal lines) + * [5] = reserved - always off + * [6] = serrate (always on if interlaced, off if not) + * [7] = reserved - diagnostics only + * [9:8] = anti-alias (aa) mode[1:0] + * 0: aa & resamp (always fetch extra lines) + * 1: aa & resamp (fetch extra lines if needed) + * 2: resamp only (treat as all fully covered) + * 3: neither (replicate pixels, no interpolate) + * [11] = reserved - diagnostics only + * [15:12] = reserved + * + */ +#define VI_STATUS_REG (VI_BASE_REG+0x00) +#define VI_CONTROL_REG VI_STATUS_REG + +/* VI origin (R/W): [23:0] frame buffer origin in bytes */ +#define VI_ORIGIN_REG (VI_BASE_REG+0x04) +#define VI_DRAM_ADDR_REG VI_ORIGIN_REG + +/* VI width (R/W): [11:0] frame buffer line width in pixels */ +#define VI_WIDTH_REG (VI_BASE_REG+0x08) +#define VI_H_WIDTH_REG VI_WIDTH_REG + +/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */ +#define VI_INTR_REG (VI_BASE_REG+0x0C) +#define VI_V_INTR_REG VI_INTR_REG + +/* + * VI current vertical line (R/W): [9:0] current half line, sampled once per + * line (the lsb of V_CURRENT is constant within a field, and in + * interlaced modes gives the field number - which is constant for non- + * interlaced modes) + * - Any write to this register will clear interrupt line + */ +#define VI_CURRENT_REG (VI_BASE_REG+0x10) +#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG + +/* + * VI video timing (R/W): [ 7: 0] horizontal sync width in pixels, + * [15: 8] color burst width in pixels, + * [19:16] vertical sync width in half lines, + * [29:20] start of color burst in pixels from h-sync + */ +#define VI_BURST_REG (VI_BASE_REG+0x14) +#define VI_TIMING_REG VI_BURST_REG + +/* VI vertical sync (R/W): [9:0] number of half-lines per field */ +#define VI_V_SYNC_REG (VI_BASE_REG+0x18) + +/* VI horizontal sync (R/W): [11: 0] total duration of a line in 1/4 pixel + * [20:16] a 5-bit leap pattern used for PAL only + * (h_sync_period) + */ +#define VI_H_SYNC_REG (VI_BASE_REG+0x1C) + +/* + * VI horizontal sync leap (R/W): [11: 0] identical to h_sync_period + * [27:16] identical to h_sync_period + */ +#define VI_LEAP_REG (VI_BASE_REG+0x20) +#define VI_H_SYNC_LEAP_REG VI_LEAP_REG + +/* + * VI horizontal video (R/W): [ 9: 0] end of active video in screen pixels + * : [25:16] start of active video in screen pixels + */ +#define VI_H_START_REG (VI_BASE_REG+0x24) +#define VI_H_VIDEO_REG VI_H_START_REG + +/* + * VI vertical video (R/W): [ 9: 0] end of active video in screen half-lines + * : [25:16] start of active video in screen half-lines + */ +#define VI_V_START_REG (VI_BASE_REG+0x28) +#define VI_V_VIDEO_REG VI_V_START_REG + +/* + * VI vertical burst (R/W): [ 9: 0] end of color burst enable in half-lines + * : [25:16] start of color burst enable in half-lines + */ +#define VI_V_BURST_REG (VI_BASE_REG+0x2C) + +/* VI x-scale (R/W): [11: 0] 1/horizontal scale up factor (2.10 format) + * [27:16] horizontal subpixel offset (2.10 format) + */ +#define VI_X_SCALE_REG (VI_BASE_REG+0x30) + +/* VI y-scale (R/W): [11: 0] 1/vertical scale up factor (2.10 format) + * [27:16] vertical subpixel offset (2.10 format) + */ +#define VI_Y_SCALE_REG (VI_BASE_REG+0x34) + +/* + * Patterns to interpret VI_CONTROL_REG + */ +#define VI_CTRL_TYPE_16 0x00002 /* Bit [1:0] pixel size: 16 bit */ +#define VI_CTRL_TYPE_32 0x00003 /* Bit [1:0] pixel size: 32 bit */ +#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* Bit 2: default = on */ +#define VI_CTRL_GAMMA_ON 0x00008 /* Bit 3: default = on */ +#define VI_CTRL_DIVOT_ON 0x00010 /* Bit 4: default = on */ +#define VI_CTRL_SERRATE_ON 0x00040 /* Bit 6: on if interlaced */ +#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* Bit 16: dither-filter mode */ + +/* + * Possible video clocks (NTSC or PAL) + */ +#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ +#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ +#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */ + + +/************************************************************************* + * Audio Interface (AI) Registers + * + * The address and length registers are double buffered; that is, they + * can be written twice before becoming full. + * The address must be written before the length. + */ +#define AI_BASE_REG 0x04500000 + +/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */ +#define AI_DRAM_ADDR_REG (AI_BASE_REG+0x00) /* R0: DRAM address */ + +/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */ +/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */ +#define AI_LEN_REG (AI_BASE_REG+0x04) /* R1: Length */ + +/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */ +#define AI_CONTROL_REG (AI_BASE_REG+0x08) /* R2: DMA Control */ + +/* + * AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy + * Note that a 1->0 transition in ai_full will set interrupt + * (W): clear audio interrupt + */ +#define AI_STATUS_REG (AI_BASE_REG+0x0C) /* R3: Status */ + +/* + * AI DAC sample period register (W): [13:0] dac rate + * - vid_clock/(dperiod + 1) is the DAC sample rate + * - (dperiod + 1) >= 66 * (aclockhp + 1) must be true + */ +#define AI_DACRATE_REG (AI_BASE_REG+0x10) /* R4: DAC rate 14-lsb*/ + +/* + * AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) + * - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate + * - The abus clock stops if aclockhp is zero + */ +#define AI_BITRATE_REG (AI_BASE_REG+0x14) /* R5: Bit rate 4-lsb */ + +/* Value for control register */ +#define AI_CONTROL_DMA_ON 0x01 /* LSB = 1: DMA enable*/ +#define AI_CONTROL_DMA_OFF 0x00 /* LSB = 1: DMA enable*/ + +/* Value for status register */ +#define AI_STATUS_FIFO_FULL 0x80000000 /* Bit 31: full */ +#define AI_STATUS_DMA_BUSY 0x40000000 /* Bit 30: busy */ + +/* DAC rate = video clock / audio frequency + * - DAC rate >= (66 * Bit rate) must be true + */ +#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */ +#define AI_MIN_DAC_RATE 132 + +/* Bit rate <= (DAC rate / 66) */ +#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */ +#define AI_MIN_BIT_RATE 2 + +/* + * Maximum and minimum values for audio frequency based on video clocks + * max frequency = (video clock / min dac rate) + * min frequency = (video clock / max dac rate) + */ +#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */ +#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */ + +#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */ +#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */ + +#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */ +#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */ + + +/************************************************************************* + * Peripheral Interface (PI) Registers + */ +#define PI_BASE_REG 0x04600000 + +/* PI DRAM address (R/W): [23:0] starting RDRAM address */ +#define PI_DRAM_ADDR_REG (PI_BASE_REG+0x00) /* DRAM address */ + +/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */ +#define PI_CART_ADDR_REG (PI_BASE_REG+0x04) + +/* PI read length (R/W): [23:0] read data length */ +#define PI_RD_LEN_REG (PI_BASE_REG+0x08) + +/* PI write length (R/W): [23:0] write data length */ +#define PI_WR_LEN_REG (PI_BASE_REG+0x0C) + +/* + * PI status (R): [0] DMA busy, [1] IO busy, [2], error + * (W): [0] reset controller (and abort current op), [1] clear intr + */ +#define PI_STATUS_REG (PI_BASE_REG+0x10) + +/* PI dom1 latency (R/W): [7:0] domain 1 device latency */ +#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG+0x14) + +/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */ +#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG+0x18) + +/* PI dom1 page size (R/W): [3:0] domain 1 device page size */ +#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG+0x1C) /* page size */ + +/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */ +#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG+0x20) + +/* PI dom2 latency (R/W): [7:0] domain 2 device latency */ +#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG+0x24) /* Domain 2 latency */ + +/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */ +#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG+0x28) /* pulse width */ + +/* PI dom2 page size (R/W): [3:0] domain 2 device page size */ +#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG+0x2C) /* page size */ + +/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */ +#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG+0x30) /* release duration */ + +#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG +#define PI_DOMAIN2_REG PI_BSD_DOM2_LAT_REG + +#define PI_DOM_LAT_OFS 0x00 +#define PI_DOM_PWD_OFS 0x04 +#define PI_DOM_PGS_OFS 0x08 +#define PI_DOM_RLS_OFS 0x0C + +/* + * PI status register has 3 bits active when read from (PI_STATUS_REG - read) + * Bit 0: DMA busy - set when DMA is in progress + * Bit 1: IO busy - set when IO is in progress + * Bit 2: Error - set when CPU issues IO request while DMA is busy + */ +#define PI_STATUS_ERROR 0x04 +#define PI_STATUS_IO_BUSY 0x02 +#define PI_STATUS_DMA_BUSY 0x01 + +/* PI status register has 2 bits active when written to: + * Bit 0: When set, reset PIC + * Bit 1: When set, clear interrupt flag + * The values of the two bits can be ORed together to both reset PIC and + * clear interrupt at the same time. + * + * Note: + * - The PIC does generate an interrupt at the end of each DMA. CPU + * needs to clear the interrupt flag explicitly (from an interrupt + * handler) by writing into the STATUS register with bit 1 set. + * + * - When a DMA completes, the interrupt flag is set. CPU can issue + * another request even while the interrupt flag is set (as long as + * PIC is idle). However, it is the CPU's responsibility for + * maintaining accurate correspondence between DMA completions and + * interrupts. + * + * - When PIC is reset, if PIC happens to be busy, an interrupt will + * be generated as PIC returns to idle. Otherwise, no interrupt will + * be generated and PIC remains idle. + */ +/* + * Values to clear interrupt/reset PIC (PI_STATUS_REG - write) + */ +#define PI_STATUS_RESET 0x01 +#define PI_SET_RESET PI_STATUS_RESET + +#define PI_STATUS_CLR_INTR 0x02 +#define PI_CLR_INTR PI_STATUS_CLR_INTR + +#define PI_DMA_BUFFER_SIZE 128 + +#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */ +#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */ +#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */ +#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */ +#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */ + + +/************************************************************************* + * RDRAM Interface (RI) Registers + */ +#define RI_BASE_REG 0x04700000 + +/* RI mode (R/W): [1:0] operating mode, [2] stop T active, [3] stop R active */ +#define RI_MODE_REG (RI_BASE_REG+0x00) + +/* RI config (R/W): [5:0] current control input, [6] current control enable */ +#define RI_CONFIG_REG (RI_BASE_REG+0x04) + +/* RI current load (W): [] any write updates current control register */ +#define RI_CURRENT_LOAD_REG (RI_BASE_REG+0x08) + +/* RI select (R/W): [2:0] receive select, [2:0] transmit select */ +#define RI_SELECT_REG (RI_BASE_REG+0x0C) + +/* RI refresh (R/W): [7:0] clean refresh delay, [15:8] dirty refresh delay, + * [16] refresh bank, [17] refresh enable + * [18] refresh optimize + */ +#define RI_REFRESH_REG (RI_BASE_REG+0x10) +#define RI_COUNT_REG RI_REFRESH_REG + +/* RI latency (R/W): [3:0] DMA latency/overlap */ +#define RI_LATENCY_REG (RI_BASE_REG+0x14) + +/* RI error (R): [0] nack error, [1] ack error */ +#define RI_RERROR_REG (RI_BASE_REG+0x18) + +/* RI error (W): [] any write clears all error bits */ +#define RI_WERROR_REG (RI_BASE_REG+0x1C) + + +/************************************************************************* + * Serial Interface (SI) Registers + */ +#define SI_BASE_REG 0x04800000 + +/* SI DRAM address (R/W): [23:0] starting RDRAM address */ +#define SI_DRAM_ADDR_REG (SI_BASE_REG+0x00) /* R0: DRAM address */ + +/* SI address read 64B (W): [] any write causes a 64B DMA write */ +#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG+0x04) /* R1: 64B PIF->DRAM */ + +/* Address SI_BASE_REG + (0x08, 0x0c, 0x14) are reserved */ + +/* SI address write 64B (W): [] any write causes a 64B DMA read */ +#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG+0x10) /* R4: 64B DRAM->PIF */ + +/* + * SI status (W): [] any write clears interrupt + * (R): [0] DMA busy, [1] IO read busy, [2] reserved + * [3] DMA error, [12] interrupt + */ +#define SI_STATUS_REG (SI_BASE_REG+0x18) /* R6: Status */ + +/* SI status register has the following bits active: + * 0: DMA busy - set when DMA is in progress + * 1: IO busy - set when IO access is in progress + * 3: DMA error - set when there are overlapping DMA requests + * 12: Interrupt - Interrupt set + */ +#define SI_STATUS_DMA_BUSY 0x0001 +#define SI_STATUS_RD_BUSY 0x0002 +#define SI_STATUS_DMA_ERROR 0x0008 +#define SI_STATUS_INTERRUPT 0x1000 + +/************************************************************************* + * Development Board GIO Control Registers + */ + +#define GIO_BASE_REG 0x18000000 + +/* Game to Host Interrupt */ +#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000) + +/* Game to Host SYNC */ +#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400) + +/* Host to Game Interrupt */ +#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800) + + +/************************************************************************* + * Common macros + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) +#define IO_READ(addr) (*(vu32 *)PHYS_TO_K1(addr)) +#define IO_WRITE(addr,data) (*(vu32 *)PHYS_TO_K1(addr)=(u32)(data)) +#define RCP_STAT_PRINT \ + rmonPrintf("current=%x start=%x end=%x dpstat=%x spstat=%x\n", \ + IO_READ(DPC_CURRENT_REG), \ + IO_READ(DPC_START_REG), \ + IO_READ(DPC_END_REG), \ + IO_READ(DPC_STATUS_REG), \ + IO_READ(SP_STATUS_REG)) + +#endif + +#endif /* _RCP_H_ */ diff --git a/mk64.ld b/mk64.ld index ac191b267..4d7fbf9bf 100644 --- a/mk64.ld +++ b/mk64.ld @@ -96,13 +96,146 @@ SECTIONS BUILD_DIR/asm/audio/seqplayer.o(.text); BUILD_DIR/asm/audio/external.o(.text); BUILD_DIR/asm/audio/port_eu.o(.text); - BUILD_DIR/asm/libultra.o(.text); + + BUILD_DIR/src/os/osCreateThread.o(.text); + BUILD_DIR/src/os/osInitialize.o(.text); + BUILD_DIR/src/os/osStartThread.o(.text); + BUILD_DIR/asm/os/osCreateViManager.o(.text); + BUILD_DIR/src/os/osViSetMode.o(.text); + BUILD_DIR/src/os/osViBlack.o(.text); + BUILD_DIR/src/os/osViSetSpecialFeatures.o(.text); + BUILD_DIR/asm/os/osCreatePiManager.o(.text); + BUILD_DIR/src/os/osSetThreadPri.o(.text); + BUILD_DIR/src/os/osCreateMesgQueue.o(.text); + BUILD_DIR/src/os/osViSetEvent.o(.text); + BUILD_DIR/src/os/osSetEventMesg.o(.text); + BUILD_DIR/src/os/osSpTaskLoadGo.o(.text); + BUILD_DIR/asm/os/osContInit.o(.text); + BUILD_DIR/src/os/osContStartReadData.o(.text); + BUILD_DIR/src/os/osRecvMesg.o(.text); + BUILD_DIR/asm/os/osWritebackDCacheAll.o(.text); + BUILD_DIR/src/os/osSendMesg.o(.text); + BUILD_DIR/src/os/osViSwapBuffer.o(.text); + BUILD_DIR/asm/os/bzero.o(.text); + BUILD_DIR/asm/os/osInvalICache.o(.text); + BUILD_DIR/asm/os/osInvalDCache.o(.text); + BUILD_DIR/src/os/osPiStartDma.o(.text); + BUILD_DIR/src/os/osSpTaskYield.o(.text); + BUILD_DIR/src/os/osSpTaskYielded.o(.text); + BUILD_DIR/src/os/osGetTime.o(.text); + BUILD_DIR/src/os/math/llmuldiv.o(.text); + BUILD_DIR/src/os/__osGetCurrFaultedThread.o(.text); + BUILD_DIR/asm/os/sqrtf.o(.text); + BUILD_DIR/src/os/guOrthoF.o(.text); + BUILD_DIR/src/os/osSetTime.o(.text); + BUILD_DIR/src/os/osEepromProbe.o(.text); + BUILD_DIR/src/os/osPfsIsPlug.o(.text); + BUILD_DIR/asm/os/func_800CE720.o(.text); + BUILD_DIR/src/os/osPfsNumFiles.o(.text); + BUILD_DIR/src/os/osPfsFileState.o(.text); + BUILD_DIR/src/os/osPfsFreeBlocks.o(.text); + BUILD_DIR/asm/os/guRotateF.o(.text); + BUILD_DIR/src/os/guScaleF.o(.text); + BUILD_DIR/asm/os/guPerspectiveF.o(.text); + BUILD_DIR/src/os/guLookAtF.o(.text); + BUILD_DIR/src/os/guTranslateF.o(.text); + BUILD_DIR/asm/os/osSyncPrintf.o(.text); + BUILD_DIR/src/os/guMtxCatL.o(.text); + BUILD_DIR/src/os/osPfsSearchFile.o(.text); + BUILD_DIR/src/os/osPfsDeleteFile.o(.text); + BUILD_DIR/asm/os/osEeprom.o(.text); + BUILD_DIR/src/os/osPfsReadWriteFile.o(.text); + BUILD_DIR/src/os/osPfsAllocateFile.o(.text); + BUILD_DIR/src/os/osAiSetFrequency.o(.text); + BUILD_DIR/src/os/osAiGetLength.o(.text); + BUILD_DIR/src/os/osAiSetNextBuffer.o(.text); + BUILD_DIR/asm/os/osGetCount.o(.text); + BUILD_DIR/asm/os/__osException.o(.text); + BUILD_DIR/asm/os/__osDisableInt.o(.text); + BUILD_DIR/asm/os/__osRestoreInt.o(.text); + BUILD_DIR/src/os/__osDequeueThread.o(.text); + BUILD_DIR/asm/os/__osSetSR.o(.text); + BUILD_DIR/asm/os/__osGetSR.o(.text); + BUILD_DIR/asm/os/__osSetFpcCsr.o(.text); + BUILD_DIR/src/os/__osSiRawReadIo.o(.text); + BUILD_DIR/src/os/__osSiRawWriteIo.o(.text); + BUILD_DIR/asm/os/osWritebackDCache.o(.text); + BUILD_DIR/asm/os/osMapTLBRdb.o(.text); + BUILD_DIR/src/os/osPiRawReadIo.o(.text); + BUILD_DIR/src/os/__osSetHWIntrRoutine.o(.text); + BUILD_DIR/asm/os/__osLeoInterrupt.o(.text); + BUILD_DIR/src/os/osTimer.o(.text); + BUILD_DIR/src/os/osGetThreadPri.o(.text); + BUILD_DIR/src/os/__osViInit.o(.text); + BUILD_DIR/src/os/__osViGetCurrentContext.o(.text); + BUILD_DIR/src/os/__osViSwapContext.o(.text); + BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.text); + BUILD_DIR/src/os/osPiRawStartDma.o(.text); + BUILD_DIR/src/os/osEPiRawStartDma.o(.text); + BUILD_DIR/src/os/__osDevMgrMain.o(.text); + BUILD_DIR/asm/os/bcopy.o(.text); + BUILD_DIR/src/os/osVirtualToPhysical.o(.text); + BUILD_DIR/src/os/__osSpSetStatus.o(.text); + BUILD_DIR/src/os/__osSpSetPc.o(.text); + BUILD_DIR/src/os/__osSpRawStartDma.o(.text); + BUILD_DIR/src/os/__osSpDeviceBusy.o(.text); + BUILD_DIR/src/os/osSetTimer.o(.text); + BUILD_DIR/src/os/__osSiRawStartDma.o(.text); + BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.text); + BUILD_DIR/src/os/osJamMesg.o(.text); + BUILD_DIR/src/os/osPiGetCmdQueue.o(.text); + BUILD_DIR/src/os/__osSpGetStatus.o(.text); + BUILD_DIR/src/os/guMtxF2L.o(.text); + BUILD_DIR/src/os/osEepromWrite.o(.text); + BUILD_DIR/src/os/contpfs.o(.text); + BUILD_DIR/src/os/osPfsChecker.o(.text); + BUILD_DIR/asm/os/contramread.o(.text); + BUILD_DIR/src/os/guNormalize.o(.text); + BUILD_DIR/src/os/math/sinf.o(.text); + BUILD_DIR/src/os/math/cosf.o(.text); + BUILD_DIR/src/os/_Printf.o(.text); + BUILD_DIR/src/os/guMtxCatF.o(.text); + BUILD_DIR/asm/os/contramwrite.o(.text); + BUILD_DIR/src/os/osEepromRead.o(.text); + BUILD_DIR/src/os/__osAiDeviceBusy.o(.text); + BUILD_DIR/asm/os/osSetIntMask.o(.text); + BUILD_DIR/src/os/osDestroyThread.o(.text); + BUILD_DIR/src/os/__osSiDeviceBusy.o(.text); + BUILD_DIR/src/os/osLeoDiskInit.o(.text); + BUILD_DIR/asm/os/__osSetCompare.o(.text); + BUILD_DIR/src/os/__osResetGlobalIntMask.o(.text); + BUILD_DIR/src/os/__osEPiRawWriteIo.o(.text); + BUILD_DIR/src/os/osYieldThread.o(.text); + BUILD_DIR/asm/os/__osProbeTLB.o(.text); + BUILD_DIR/src/os/crc.o(.text); + BUILD_DIR/src/os/string.o(.text); + BUILD_DIR/src/os/_Litob.o(.text); + BUILD_DIR/src/os/_Ldtob.o(.text); + BUILD_DIR/src/os/ldiv.o(.text); + BUILD_DIR/data/rsp.o(.text); BUILD_DIR/data/data_0DD0A0.o(.data); BUILD_DIR/src/kart_attributes.inc.o(.data); BUILD_DIR/data/data_0DD0A0_2.o(.rodata); + BUILD_DIR/src/os/osInitialize.o(.data); + /*BUILD_DIR/src/os/osCreateViManager.o(.data);*/ + BUILD_DIR/data/data_0DD0A0_2_1.o(.data); + BUILD_DIR/src/os/osTimer.o(.data); + BUILD_DIR/src/os/__osViInit.o(.data); + BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.data); + BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.data); + BUILD_DIR/src/os/_Printf.o(.data); + BUILD_DIR/data/rodata_libultra.o(.rodata); + BUILD_DIR/src/os/_Litob.o(.data); + BUILD_DIR/data/rodata_main.o(.rodata); BUILD_DIR/src/code_800029B0.o(.rodata); BUILD_DIR/data/data_0DD0A0_3.o(.rodata); + BUILD_DIR/src/os/__osDevMgrMain.o(.rodata); + BUILD_DIR/src/os/math/sinf.o(.rodata); + BUILD_DIR/src/os/math/cosf.o(.rodata); + BUILD_DIR/src/os/_Printf.o(.rodata); + BUILD_DIR/asm/os/osSetIntMask.o(.rodata); + BUILD_DIR/src/os/_Ldtob.o(.rodata); BUILD_DIR/src/data_0DD0A0_3.inc.o(.data); BUILD_DIR/data/rsp.o(.data); BUILD_DIR/src/audio/data.o(.data); @@ -120,6 +253,13 @@ SECTIONS BUILD_DIR/asm/bss_80004EF0.o(.bss); BUILD_DIR/asm/bss_80005FD0.o(.bss); BUILD_DIR/asm/bss_MainSeg.o(.bss); + BUILD_DIR/src/os/osTimer.o(.bss); + BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.bss); + BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss); + BUILD_DIR/src/os/osEepromWrite.o(.bss); + BUILD_DIR/asm/bss_after_ostimer.o(.bss); + BUILD_DIR/src/os/osLeoDiskInit.o(.bss); + BUILD_DIR/asm/bss_after_diskinit.o(.bss); } END_NOLOAD(main) diff --git a/rename_sym.sh b/rename_sym.sh index dbbd75b38..a967fdc7c 100755 --- a/rename_sym.sh +++ b/rename_sym.sh @@ -10,4 +10,4 @@ fi #echo "Replace $1 with $2?" #read -grep -rl "$1" asm/**/*.s data/*.s src/*.c include/*.h undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g" +grep -rl "$1" asm/**/*.s data/*.s src/*.c src/os/*.{c,h} undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g" diff --git a/src/code_800029B0.c b/src/code_800029B0.c index b5a2cae2d..ee2248b91 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -54,8 +54,6 @@ extern u32 *D_802B91C8; void load_giant_egg(f32 *, f32, f32, f32); -extern u32 D_8000031C[]; - // gfx? extern u32 *D_0F04FE28; extern u32 *D_0F050118; @@ -223,7 +221,7 @@ void func_80003010(void) { int i; for (i = 0; i < 16; i++) { - D_8000031C[i] = 0; + ((u32 *)osAppNmiBuffer)[i] = 0; } } diff --git a/src/data_0DD0A0_3.inc.c b/src/data_0DD0A0_3.inc.c index 4c8a18095..c60719dc1 100644 --- a/src/data_0DD0A0_3.inc.c +++ b/src/data_0DD0A0_3.inc.c @@ -2,6 +2,8 @@ #include #include +// audio rodata + /* struct D_800F2F90 D_800F2F90[] = { L800C0124, L800C0078, L800C0140, L800C0150, @@ -360,28 +362,3 @@ s32 D_800F3B1C[] = { }; */ - -u16 D_800F3C10[] = { - 0x0555, 0x0556, 0x0559, 0x055a, 0x0565, 0x0566, 0x0569, 0x056a, - 0x0595, 0x0596, 0x0599, 0x059a, 0x05a5, 0x05a6, 0x05a9, 0x05aa, - 0x0655, 0x0656, 0x0659, 0x065a, 0x0665, 0x0666, 0x0669, 0x066a, - 0x0695, 0x0696, 0x0699, 0x069a, 0x06a5, 0x06a6, 0x06a9, 0x06aa, - 0x0955, 0x0956, 0x0959, 0x095a, 0x0965, 0x0966, 0x0969, 0x096a, - 0x0995, 0x0996, 0x0999, 0x099a, 0x09a5, 0x09a6, 0x09a9, 0x09aa, - 0x0a55, 0x0a56, 0x0a59, 0x0a5a, 0x0a65, 0x0a66, 0x0a69, 0x0a6a, - 0x0a95, 0x0a96, 0x0a99, 0x0a9a, 0x0aa5, 0x0aa6, 0x0aa9, 0x0aaa, -}; -int D_800F3C90[] = {0x7f810000, 0x00000000, 0x00000000, 0x00000000 }; // NaN? - -double D_800F3CA0[] = { - 10.0, 100.0, 10000.0, 100000000.0, 10000000000000000.0, - 1.0e+32, 1.0e+64, 1.0e+128, 1.0e+256 -}; - -char D_800F3CE8[] = "NaN"; -char D_800F3CEC[] = "Inf"; - - -char D_800F3CF0[] = "0"; -float D_800F3CF4 = 0x00000000; // .word -double D_800F3CF8 = 100000000.0; diff --git a/src/gbiMacro.c b/src/gbiMacro.c index b2a2d0b87..610cd8678 100644 --- a/src/gbiMacro.c +++ b/src/gbiMacro.c @@ -15,7 +15,7 @@ void gfx_func_80040D00(void) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - guFrustum((Mtx *) gGfxPool, 0.0f, 320.0f, 0.0f, 240.0f, -1.0f, 1.0f, 1.0f); + guOrtho((Mtx *) gGfxPool, 0.0f, 320.0f, 0.0f, 240.0f, -1.0f, 1.0f, 1.0f); gDPHalf1(gDisplayListHead++, 0x0000FFFF); gSPMatrix(gDisplayListHead++, (u32) gGfxPool & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, (u32) &D_0D008E98 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/main.c b/src/main.c index 548845579..ef5f9793a 100644 --- a/src/main.c +++ b/src/main.c @@ -30,11 +30,9 @@ extern s32 D_800DC52C; extern OSThread D_801524C0; extern OSThread D_80154670; extern OSViMode D_800EA6C0, D_800EAF80; -extern s32 D_80000300; extern s16 D_8015011C; extern OSMesgQueue D_8015F460; extern OSMesg D_8015F3E0; -extern s32 D_8000030C; extern s32 D_80156820; extern struct SPTask *gActiveSPTask; extern s16 sNumVBlanks; @@ -119,7 +117,7 @@ void main_func(void) { void thread1_idle(void *arg0) { osCreateViManager(OS_PRIORITY_VIMGR); - if (D_80000300 == 1) { + if (osTvType == 1) { osViSetMode(&D_800EA6C0); } else { osViSetMode(&D_800EAF80); @@ -127,7 +125,7 @@ void thread1_idle(void *arg0) { osViBlack(TRUE); osViSetSpecialFeatures(OS_VI_GAMMA_OFF); osCreatePiManager(OS_PRIORITY_PIMGR, &D_8015F460, &D_8015F3E0, 0x20); - D_8015011C = (s16) D_8000030C; + D_8015011C = (s16) osResetType; create_debug_thread(); start_debug_thread(); create_thread(&D_80154670, 3, &thread3_video, arg0, &D_80156820, 100); @@ -399,7 +397,7 @@ void func_8000105C(void) { bzero(SEG_80280000, 0xDF00); osWritebackDCacheAll(); dma_copy(SEG_80280000, &_code_80280000SegmentRomStart, ALIGN16((u32)&_code_80280000SegmentRomEnd - (u32)&_code_80280000SegmentRomStart)); - osInvalCache(SEG_80280000, 0xDF00); + osInvalICache(SEG_80280000, 0xDF00); osInvalDCache(SEG_80280000, 0xDF00); } @@ -407,7 +405,7 @@ void func_800010CC(void) { bzero(SEG_8028DF00, 0x2C470); osWritebackDCacheAll(); dma_copy(SEG_8028DF00, &_code_8028DF00SegmentRomStart, ALIGN16((u32)&_code_8028DF00SegmentRomEnd - (u32)&_code_8028DF00SegmentRomStart)); - osInvalCache(SEG_8028DF00, 0x2C470); + osInvalICache(SEG_8028DF00, 0x2C470); osInvalDCache(SEG_8028DF00, 0x2C470); } @@ -1004,7 +1002,7 @@ void *func_800022DC(void) { gActiveSPTask = NULL; if (temp_a3->unk48 == 2) { sp1C = temp_a3; - if (func_800CDD60(temp_a3, temp_a3) == 0) { + if (osSpTaskYielded(temp_a3, temp_a3) == 0) { temp_a3->unk48 = 3; profiler_log_gfx_time(1, temp_a3); } diff --git a/src/os/NaN.c b/src/os/NaN.c new file mode 100644 index 000000000..05f4031cd --- /dev/null +++ b/src/os/NaN.c @@ -0,0 +1,5 @@ +typedef union { + int i; + float f; +} fu; +const fu NAN = { 0x7f810000 }; diff --git a/src/os/_Ldtob.c b/src/os/_Ldtob.c new file mode 100644 index 000000000..c06714c23 --- /dev/null +++ b/src/os/_Ldtob.c @@ -0,0 +1,288 @@ +#include "libultra_internal.h" +#include +#include +#include +#include "printf.h" + +#define BUFF_LEN 0x20 + +static s16 _Ldunscale(s16 *, printf_struct *); +static void _Genld(printf_struct *, u8, u8 *, s16, s16); + +const int NAN[] = {0x7f810000, 0x00000000, 0x00000000, 0x00000000 }; // NaN? +const double D_80338670[] = { 10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L }; + +/* float properties */ +#define _D0 0 +#define _DBIAS 0x3ff +#define _DLONG 1 +#define _DOFF 4 +#define _FBIAS 0x7e +#define _FOFF 7 +#define _FRND 1 +#define _LBIAS 0x3ffe +#define _LOFF 15 +/* integer properties */ +#define _C2 1 +#define _CSIGN 1 +#define _ILONG 0 +#define _MBMAX 8 +#define NAN 2 +#define INF 1 +#define FINITE -1 +#define _DFRAC ((1 << _DOFF) - 1) +#define _DMASK (0x7fff & ~_DFRAC) +#define _DMAX ((1 << (15 - _DOFF)) - 1) +#define _DNAN (0x8000 | _DMAX << _DOFF | 1 << (_DOFF - 1)) +#define _DSIGN 0x8000 +#if _D0 == 3 +#define _D1 2 /* little-endian order */ +#define _D2 1 +#define _D3 0 +#else +#define _D1 1 /* big-endian order */ +#define _D2 2 +#define _D3 3 +#endif + +void _Ldtob(printf_struct *args, u8 type) { + u8 buff[BUFF_LEN]; + u8 *ptr; + UNUSED u32 sp70; + f64 val; + /* maybe struct? */ + s16 err; + s16 nsig; + s16 exp; + + s32 i; + s32 n; + f64 factor; + s32 gen; + s32 j; + s32 lo; + ldiv_t qr; + u8 drop; + s32 n2; + /* */ + UNUSED u8 unused[0x4]; + ptr = buff; + val = args->value.f64; + if (args->precision < 0) { + args->precision = 6; + } else { + if (args->precision == 0 && (type == 'g' || type == 'G')) { + args->precision = 1; + } + } + err = _Ldunscale(&exp, args); + if (err > 0) { + memcpy(args->buff, err == 2 ? "NaN" : "Inf", args->part2_len = 3); + return; + } + if (err == 0) { + nsig = 0; + exp = 0; + } else { + if (val < 0) { + val = -val; + } + exp = exp * 30103 / 0x000186A0 - 4; + if (exp < 0) { + n = (3 - exp) & ~3; + exp = -n; + for (i = 0; n > 0; n >>= 1, i++) { + if ((n & 1) != 0) { + val *= D_80338670[i]; + } + } + } else { + if (exp > 0) { + factor = 1; + exp &= ~3; + for (n = exp, i = 0; n > 0; n >>= 1, i++) { + if ((n & 1) != 0) { + factor *= D_80338670[i]; + } + } + val /= factor; + } + } + gen = ((type == 'f') ? exp + 10 : 6) + args->precision; + if (gen > 0x13) { + gen = 0x13; + } + *ptr++ = '0'; + while (gen > 0 && 0 < val) { + lo = val; + if ((gen -= 8) > 0) { + val = (val - lo) * 1.0e8; + } + ptr = ptr + 8; + for (j = 8; lo > 0 && --j >= 0;) { + qr = ldiv(lo, 10); + *--ptr = qr.rem + '0'; + lo = qr.quot; + } + while (--j >= 0) { + ptr--; + *ptr = '0'; + } + ptr += 8; + } + + gen = ptr - &buff[1]; + for (ptr = &buff[1], exp += 7; *ptr == '0'; ptr++) { + --gen, --exp; + } + + nsig = ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)) + args->precision; + if (gen < nsig) { + nsig = gen; + } + if (nsig > 0) { + if (nsig < gen && ptr[nsig] > '4') { + drop = '9'; + } else { + drop = '0'; + } + + for (n2 = nsig; ptr[--n2] == drop;) { + nsig--; + } + if (drop == '9') { + ptr[n2]++; + } + if (n2 < 0) { + --ptr, ++nsig, ++exp; + } + } + } + _Genld(args, type, ptr, nsig, exp); +} + +static s16 _Ldunscale(s16 *pex, printf_struct *px) { + + unsigned short *ps = (unsigned short *) px; + short xchar = (ps[_D0] & _DMASK) >> _DOFF; + if (xchar == _DMAX) { /* NaN or INF */ + *pex = 0; + return (s16)(ps[_D0] & _DFRAC || ps[_D1] || ps[_D2] || ps[_D3] ? NAN : INF); + } else if (0 < xchar) { + ps[_D0] = (ps[_D0] & ~_DMASK) | (_DBIAS << _DOFF); + *pex = xchar - (_DBIAS - 1); + return (FINITE); + } + if (0 > xchar) { + return NAN; + } else { + *pex = 0; + return (0); + } +} + +static void _Genld(printf_struct *px, u8 code, u8 *p, s16 nsig, s16 xexp) { + u8 point = '.'; + if (nsig <= 0) { + nsig = 1, + + p = (u8 *) "0"; + } + + if (code == 'f' + || ((code == 'g' || code == 'G') && (-4 <= xexp) && (xexp < px->precision))) { /* 'f' format */ + ++xexp; /* change to leading digit count */ + if (code != 'f') { /* fixup for 'g' */ + if (!(px->flags & FLAGS_HASH) && nsig < px->precision) { + px->precision = nsig; + } + if ((px->precision -= xexp) < 0) { + px->precision = 0; + } + } + if (xexp <= 0) { /* digits only to right of point */ + px->buff[px->part2_len++] = '0'; + if (0 < px->precision || px->flags & FLAGS_HASH) { + px->buff[px->part2_len++] = point; + } + if (px->precision < -xexp) { + xexp = -px->precision; + } + px->num_mid_zeros = -xexp; + px->precision += xexp; + if (px->precision < nsig) { + nsig = px->precision; + } + memcpy(&px->buff[px->part2_len], p, px->part3_len = nsig); + px->num_trailing_zeros = px->precision - nsig; + } else if (nsig < xexp) { /* zeros before point */ + memcpy(&px->buff[px->part2_len], p, nsig); + px->part2_len += nsig; + px->num_mid_zeros = xexp - nsig; + if (0 < px->precision || px->flags & FLAGS_HASH) { + px->buff[px->part2_len] = point, ++px->part3_len; + } + px->num_trailing_zeros = px->precision; + } else { /* enough digits before point */ + memcpy(&px->buff[px->part2_len], p, xexp); + px->part2_len += xexp; + nsig -= xexp; + if (0 < px->precision || px->flags & FLAGS_HASH) { + px->buff[px->part2_len++] = point; + } + if (px->precision < nsig) { + nsig = px->precision; + } + memcpy(&px->buff[px->part2_len], p + xexp, nsig); + px->part2_len += nsig; + px->num_mid_zeros = px->precision - nsig; + } + } else { /* 'e' format */ + if (code == 'g' || code == 'G') { /* fixup for 'g' */ + if (nsig < px->precision) { + px->precision = nsig; + } + if (--px->precision < 0) { + px->precision = 0; + } + code = code == 'g' ? 'e' : 'E'; + } + px->buff[px->part2_len++] = *p++; + if (0 < px->precision || px->flags & FLAGS_HASH) { + px->buff[px->part2_len++] = point; + } + if (0 < px->precision) { /* put fraction digits */ + if (px->precision < --nsig) { + nsig = px->precision; + } + memcpy(&px->buff[px->part2_len], p, nsig); + px->part2_len += nsig; + px->num_mid_zeros = px->precision - nsig; + } + p = (u8 *) &px->buff[px->part2_len]; /* put exponent */ + *p++ = code; + if (0 <= xexp) { + *p++ = '+'; + } else { /* negative exponent */ + *p++ = '-'; + xexp = -xexp; + } + if (100 <= xexp) { /* put oversize exponent */ + if (1000 <= xexp) { + *p++ = xexp / 1000 + '0', xexp %= 1000; + } + *p++ = xexp / 100 + '0', xexp %= 100; + } + *p++ = xexp / 10 + '0', xexp %= 10; + *p++ = xexp + '0'; + px->part3_len = p - (u8 *) &px->buff[px->part2_len]; + } + if ((px->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { /* pad with leading zeros */ + int n = + px->part1_len + px->part2_len + px->num_mid_zeros + px->part3_len + px->num_trailing_zeros; + + if (n < px->width) { + px->num_leading_zeros = px->width - n; + } + } +} diff --git a/src/os/_Litob.c b/src/os/_Litob.c new file mode 100644 index 000000000..58ed081ff --- /dev/null +++ b/src/os/_Litob.c @@ -0,0 +1,59 @@ +#include "libultra_internal.h" +#include +#include +#include "printf.h" + +#define BUFF_LEN 0x18 + +static u8 D_80334960[] = "0123456789abcdef"; +static u8 D_80334974[] = "0123456789ABCDEF"; + +void _Litob(printf_struct *args, u8 type) { + u8 buff[BUFF_LEN]; + const u8 *num_map; + s32 base; + s32 buff_ind; + u64 num; + lldiv_t quotrem; + + if (type == 'X') { + num_map = D_80334974; + } else { + num_map = D_80334960; + } + + base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16); + buff_ind = BUFF_LEN; + num = args->value.s64; + + if ((type == 'd' || type == 'i') && args->value.s64 < 0) { + num = -num; + } + + if (num != 0 || args->precision != 0) { + buff[--buff_ind] = num_map[num % base]; + } + + args->value.s64 = num / base; + + while (args->value.s64 > 0 && buff_ind > 0) { + quotrem = lldiv(args->value.s64, base); + args->value.s64 = quotrem.quot; + buff[--buff_ind] = num_map[quotrem.rem]; + } + + args->part2_len = BUFF_LEN - buff_ind; + + memcpy(args->buff, buff + buff_ind, args->part2_len); + + if (args->part2_len < args->precision) { + args->num_leading_zeros = args->precision - args->part2_len; + } + + if (args->precision < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { + buff_ind = args->width - args->part1_len - args->num_leading_zeros - args->part2_len; + if (buff_ind > 0) { + args->num_leading_zeros += buff_ind; + } + } +} diff --git a/src/os/_Printf.c b/src/os/_Printf.c new file mode 100644 index 000000000..e42bf0428 --- /dev/null +++ b/src/os/_Printf.c @@ -0,0 +1,236 @@ +#include "libultra_internal.h" +#include +#include +#include "printf.h" + +#define ATOI(i, a) \ + for (i = 0; *a >= '0' && *a <= '9'; a++) \ + if (i < 999) \ + i = *a + i * 10 - '0'; +#define _PROUT(dst, fmt, _size) \ + if (_size > 0) { \ + dst = prout(dst, fmt, _size); \ + if (dst != 0) \ + sp78.size += _size; \ + else \ + return sp78.size; \ + } +#define _PAD(i, m, c, src, extracond) \ + if (extracond && m > 0) \ + for (i = m; i > 0; i -= c) { \ + if ((u32) i > 32) \ + c = 32; \ + else \ + c = i; \ + _PROUT(dst, src, c); \ + } + +const char length_str[] = "hlL"; +const char flags_str[] = " +-#0"; +const u32 flags_arr[] = { FLAGS_SPACE, FLAGS_PLUS, FLAGS_MINUS, FLAGS_HASH, FLAGS_ZERO, 0 }; +char _spaces[] = " "; +char _zeroes[] = "00000000000000000000000000000000"; + +static void _Putfld(printf_struct *, va_list *, u8, u8 *); + +s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args) { + printf_struct sp78; + const u8 *fmt_ptr; + u8 c; + const char *flag_index; + u8 sp4c[0x20]; // probably a buffer? + s32 sp48, sp44, sp40, sp3c, sp38, sp34, sp30, sp2c, sp28, sp24; + sp78.size = 0; + while (TRUE) { + fmt_ptr = (u8 *) fmt; +#ifdef VERSION_SH + // new version: don't point fmt_ptr beyond NUL character + while ((c = *fmt_ptr) != 0 && c != '%') { + fmt_ptr++; + } +#else + while ((c = *fmt_ptr++) > 0) { + if (c == '%') { + fmt_ptr--; + break; + } + } +#endif + _PROUT(dst, fmt, fmt_ptr - (u8 *) fmt); + if (c == 0) { + return sp78.size; + } + fmt = (char *) ++fmt_ptr; + sp78.flags = 0; + for (; (flag_index = strchr(flags_str, *fmt_ptr)) != NULL; fmt_ptr++) { + sp78.flags |= flags_arr[flag_index - flags_str]; + } + if (*fmt_ptr == '*') { + sp78.width = va_arg(args, s32); + if (sp78.width < 0) { + sp78.width = -sp78.width; + sp78.flags |= FLAGS_MINUS; + } + fmt_ptr++; + } else { + ATOI(sp78.width, fmt_ptr); + } + if (*fmt_ptr != '.') { + sp78.precision = -1; + } else { + fmt_ptr++; + if (*fmt_ptr == '*') { + sp78.precision = va_arg(args, s32); + fmt_ptr++; + } else { + ATOI(sp78.precision, fmt_ptr); + } + } + if (strchr(length_str, *fmt_ptr) != NULL) { + sp78.length = *fmt_ptr++; + } else { + sp78.length = 0; + } + + if (sp78.length == 'l' && *fmt_ptr == 'l') { + sp78.length = 'L'; + fmt_ptr++; + } + _Putfld(&sp78, &args, *fmt_ptr, sp4c); + sp78.width -= sp78.part1_len + sp78.num_leading_zeros + sp78.part2_len + sp78.num_mid_zeros + + sp78.part3_len + sp78.num_trailing_zeros; + _PAD(sp44, sp78.width, sp48, _spaces, !(sp78.flags & FLAGS_MINUS)); + _PROUT(dst, (char *) sp4c, sp78.part1_len); + _PAD(sp3c, sp78.num_leading_zeros, sp40, _zeroes, 1); + _PROUT(dst, sp78.buff, sp78.part2_len); + _PAD(sp34, sp78.num_mid_zeros, sp38, _zeroes, 1); + _PROUT(dst, (char *) (&sp78.buff[sp78.part2_len]), sp78.part3_len) + _PAD(sp2c, sp78.num_trailing_zeros, sp30, _zeroes, 1); + _PAD(sp24, sp78.width, sp28, _spaces, sp78.flags & FLAGS_MINUS); + fmt = (char *) fmt_ptr + 1; + } +} + +static void _Putfld(printf_struct *a0, va_list *args, u8 type, u8 *buff) { + a0->part1_len = a0->num_leading_zeros = a0->part2_len = a0->num_mid_zeros = a0->part3_len = + a0->num_trailing_zeros = 0; + + switch (type) { + + case 'c': + buff[a0->part1_len++] = va_arg(*args, u32); + break; + + case 'd': + case 'i': + if (a0->length == 'l') { + a0->value.s64 = va_arg(*args, s32); + } else if (a0->length == 'L') { + a0->value.s64 = va_arg(*args, s64); + } else { + a0->value.s64 = va_arg(*args, s32); + } + + if (a0->length == 'h') { + a0->value.s64 = (s16) a0->value.s64; + } + + if (a0->value.s64 < 0) { + buff[a0->part1_len++] = '-'; + } else if (a0->flags & FLAGS_PLUS) { + buff[a0->part1_len++] = '+'; + } else if (a0->flags & FLAGS_SPACE) { + buff[a0->part1_len++] = ' '; + } + + a0->buff = (char *) &buff[a0->part1_len]; + + _Litob(a0, type); + break; + + case 'x': + case 'X': + case 'u': + case 'o': + if (a0->length == 'l') { + a0->value.s64 = va_arg(*args, s32); + } else if (a0->length == 'L') { + a0->value.s64 = va_arg(*args, s64); + } else { + a0->value.s64 = va_arg(*args, s32); + } + + if (a0->length == 'h') { + a0->value.s64 = (u16) a0->value.s64; + } else if (a0->length == 0) { + a0->value.s64 = (u32) a0->value.s64; + } + + if (a0->flags & FLAGS_HASH) { + buff[a0->part1_len++] = '0'; + if (type == 'x' || type == 'X') { + + buff[a0->part1_len++] = type; + } + } + a0->buff = (char *) &buff[a0->part1_len]; + _Litob(a0, type); + break; + + case 'e': + case 'f': + case 'g': + case 'E': + case 'G': + //... okay? + a0->value.f64 = a0->length == 'L' ? va_arg(*args, f64) : va_arg(*args, f64); + + if (a0->value.u16 & 0x8000) { + buff[a0->part1_len++] = '-'; + } else { + if (a0->flags & FLAGS_PLUS) { + buff[a0->part1_len++] = '+'; + } else if (a0->flags & FLAGS_SPACE) { + buff[a0->part1_len++] = ' '; + } + } + + a0->buff = (char *) &buff[a0->part1_len]; + _Ldtob(a0, type); + break; + + case 'n': + if (a0->length == 'h') { + *(va_arg(*args, u16 *)) = a0->size; + } else if (a0->length == 'l') { + *va_arg(*args, u32 *) = a0->size; + } else if (a0->length == 'L') { + *va_arg(*args, u64 *) = a0->size; + } else { + *va_arg(*args, u32 *) = a0->size; + } + break; + + case 'p': + a0->value.s64 = (intptr_t) va_arg(*args, void *); + a0->buff = (char *) &buff[a0->part1_len]; + _Litob(a0, 'x'); + break; + + case 's': + a0->buff = va_arg(*args, char *); + a0->part2_len = strlen(a0->buff); + if (a0->precision >= 0 && a0->part2_len > a0->precision) { + a0->part2_len = a0->precision; + } + break; + + case '%': + buff[a0->part1_len++] = '%'; + break; + + default: + buff[a0->part1_len++] = type; + break; + } +} diff --git a/src/os/__osAiDeviceBusy.c b/src/os/__osAiDeviceBusy.c new file mode 100644 index 000000000..261fcbaba --- /dev/null +++ b/src/os/__osAiDeviceBusy.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osAiDeviceBusy(void) { + register s32 status = HW_REG(AI_STATUS_REG, u32); + if ((status & AI_STATUS_AI_FULL) != 0) { + return 1; + } else { + return 0; + } +} diff --git a/src/os/__osAtomicDec.c b/src/os/__osAtomicDec.c new file mode 100644 index 000000000..87ff265eb --- /dev/null +++ b/src/os/__osAtomicDec.c @@ -0,0 +1,17 @@ +#include "libultra_internal.h" + +s32 __osAtomicDec(u32 *a0) { + s32 sp1c; + s32 sp18; + sp1c = __osDisableInt(); + + if (*a0 != 0) { + (*a0)--; + sp18 = 1; + } else { + sp18 = 0; + } + + __osRestoreInt(sp1c); + return sp18; +} diff --git a/src/os/__osDequeueThread.c b/src/os/__osDequeueThread.c new file mode 100644 index 000000000..3f5eafc75 --- /dev/null +++ b/src/os/__osDequeueThread.c @@ -0,0 +1,25 @@ +#include "libultra_internal.h" + +// these don't feel like they belong here +// but it makes the most logical since there was printf data before +// OSThread *D_800EB3A0 = NULL; +// u32 D_80334894 = -1; +// OSThread *__osRunQueue = (OSThread *) &D_800EB3A0; +// OSThread *__osActiveQueue = (OSThread *) &D_800EB3A0; +// OSThread *__osRunningThread = NULL; +// u32 D_803348A4 = 0; // UNKNOWN + +void __osDequeueThread(OSThread **queue, OSThread *thread) { + register OSThread **a2; + register OSThread *a3; + a2 = queue; + a3 = *a2; + while (a3 != NULL) { + if (a3 == thread) { + *a2 = thread->next; + return; + } + a2 = &a3->next; + a3 = *a2; + } +} diff --git a/src/os/__osDevMgrMain.c b/src/os/__osDevMgrMain.c new file mode 100644 index 000000000..06fe91e3b --- /dev/null +++ b/src/os/__osDevMgrMain.c @@ -0,0 +1,93 @@ +#define MK64 + +#include "libultra_internal.h" +#include "macros.h" + +#include "new_func.h" + +void __osDevMgrMain(void *args) { + OSIoMesg *mb; + OSMesg em; + OSMesg dummy; + s32 ret; + OSMgrArgs *sp34; + UNUSED u32 sp30; + u32 sp2c; + __OSBlockInfo *sp28; + __OSTranxInfo *sp24; + sp30 = 0; + sp2c = 0; + mb = NULL; + ret = 0; + sp34 = (OSMgrArgs *) args; + while (TRUE) { + osRecvMesg(sp34->cmdQueue, (OSMesg) &mb, OS_MESG_BLOCK); + if (mb->piHandle != NULL && mb->piHandle->type == 2 + && (mb->piHandle->transferInfo.cmdType == 0 + || mb->piHandle->transferInfo.cmdType == 1)) { + sp24 = &mb->piHandle->transferInfo; + sp28 = &sp24->block[sp24->blockNum]; + sp24->sectorNum = -1; + if (sp24->transferMode != 3) { + sp28->dramAddr = (void *) ((u32) sp28->dramAddr - sp28->sectorSize); + } + if (sp24->transferMode == 2 && mb->piHandle->transferInfo.cmdType == 0) { + sp2c = 1; + } else { + sp2c = 0; + } + osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); + __osResetGlobalIntMask(0x00100401); // remove magic constant! + __osEPiRawWriteIo(mb->piHandle, 0x05000510, (sp24->bmCtlShadow | 0x80000000)); + while (TRUE) { + osRecvMesg(sp34->eventQueue, &em, OS_MESG_BLOCK); + sp30 = osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + if (sp2c != 1 || mb->piHandle->transferInfo.errStatus != 0) { + break; + } + sp2c = 0; + } + osSendMesg(sp34->accessQueue, NULL, OS_MESG_NOBLOCK); + if (mb->piHandle->transferInfo.blockNum == 1) { + osYieldThread(); + } + } else { + switch (mb->hdr.type) { + case 11: + osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); + ret = sp34->dma_func(OS_READ, mb->devAddr, mb->dramAddr, mb->size); + break; + case 12: + osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); + ret = sp34->dma_func(OS_WRITE, mb->devAddr, mb->dramAddr, mb->size); + break; + case 15: + osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); + ret = sp34->edma_func(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, + mb->size); + break; + case 16: + osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); + ret = sp34->edma_func(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr, + mb->size); + break; + case 10: + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + ret = -1; + break; + break; + default: + ret = -1; + break; + } + if (ret == 0) { + osRecvMesg(sp34->eventQueue, &em, OS_MESG_BLOCK); + sp30 = + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + osSendMesg(sp34->accessQueue, NULL, OS_MESG_NOBLOCK); + } + } + } +} + +#undef MK64 diff --git a/src/os/__osEPiRawReadIo.c b/src/os/__osEPiRawReadIo.c new file mode 100644 index 000000000..28c403a28 --- /dev/null +++ b/src/os/__osEPiRawReadIo.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *data) { + register s32 stat; + while (stat = HW_REG(PI_STATUS_REG, s32), stat & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + ; + } + *data = HW_REG(arg0->baseAddress | devAddr, s32); + return 0; +} diff --git a/src/os/__osEPiRawWriteIo.c b/src/os/__osEPiRawWriteIo.c new file mode 100644 index 000000000..539a5c65c --- /dev/null +++ b/src/os/__osEPiRawWriteIo.c @@ -0,0 +1,35 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osEPiRawWriteIo(OSPiHandle *a0, u32 a1, u32 a2) { + register u32 a3 = HW_REG(PI_STATUS_REG, u32); + while (a3 & PI_STATUS_ERROR) + a3 = HW_REG(PI_STATUS_REG, u32); + HW_REG(a0->baseAddress | a1, u32) = a2; + return 0; +} +/* +/ 0B69A0 802F71A0 3C0EA460 / lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 +/ 0B69A4 802F71A4 8DC70010 / lw $a3, %lo(PI_STATUS_REG)($t6) +/ 0B69A8 802F71A8 27BDFFF8 / addiu $sp, $sp, -8 +/ 0B69AC 802F71AC 30EF0003 / andi $t7, $a3, 3 + +/ 0B69B0 802F71B0 11E00006 / beqz $t7, .L802F71CC +/ 0B69B4 802F71B4 00000000 / nop +.L802F71B8: +/ 0B69B8 802F71B8 3C18A460 / lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460 +/ 0B69BC 802F71BC 8F070010 / lw $a3, %lo(PI_STATUS_REG)($t8) +/ 0B69C0 802F71C0 30F90003 / andi $t9, $a3, 3 +/ 0B69C4 802F71C4 1720FFFC / bnez $t9, .L802F71B8 +/ 0B69C8 802F71C8 00000000 / nop +.L802F71CC: +/ 0B69CC 802F71CC 8C88000C / lw $t0, 0xc($a0) +/ 0B69D0 802F71D0 3C01A000 / lui $at, 0xa000 +/ 0B69D4 802F71D4 27BD0008 / addiu $sp, $sp, 8 +/ 0B69D8 802F71D8 01054825 / or $t1, $t0, $a1 +/ 0B69DC 802F71DC 01215025 / or $t2, $t1, $at +/ 0B69E0 802F71E0 AD460000 / sw $a2, ($t2) +/ 0B69E4 802F71E4 03E00008 / jr $ra +/ 0B69E8 802F71E8 00001025 / move $v0, $zero + +/ 0B69EC 802F71EC 00000000 / nop */ diff --git a/src/os/__osGetCurrFaultedThread.c b/src/os/__osGetCurrFaultedThread.c new file mode 100644 index 000000000..dafb2e089 --- /dev/null +++ b/src/os/__osGetCurrFaultedThread.c @@ -0,0 +1,5 @@ +#include "libultra_internal.h" + +OSThread *__osGetCurrFaultedThread() { + return __osActiveQueue; // 80302efc +} diff --git a/src/os/__osLeoInterrupt.c b/src/os/__osLeoInterrupt.c new file mode 100644 index 000000000..f250efe28 --- /dev/null +++ b/src/os/__osLeoInterrupt.c @@ -0,0 +1,213 @@ +// not matching + +#include "libultra_internal.h" +#include "osint.h" +#include "piint.h" +#include "ultra64.h" + +extern OSThread *__osRunQueue; +static void __osLeoResume(void); +static void __osLeoAbnormalResume(void); +extern u8 leoDiskStack[OS_PIM_STACKSIZE]; //technically should have a OS_LEO_STACKSIZE or something.. + +extern u32 D_800EA5F0; + +s32 __osLeoInterrupt() +{ + u32 stat; + volatile u32 pi_stat; + u32 bm_stat; + __OSTranxInfo *info; + __OSBlockInfo *blockInfo; + + // addition to mk64 + if (D_800EA5F0 == 0) return 0; + + stat = 0; + info = &__osDiskHandle->transferInfo; + blockInfo = &info->block[info->blockNum]; + pi_stat = IO_READ(PI_STATUS_REG); + if (pi_stat & PI_STATUS_DMA_BUSY) + { + __OSGlobalIntMask = __OSGlobalIntMask & ~SR_IBIT4; //cartridge interrupt + blockInfo->errStatus = LEO_ERROR_29; + __osLeoResume(); + return 1; + } + WAIT_ON_IOBUSY(pi_stat); + stat = IO_READ(LEO_STATUS); + if (stat & LEO_STATUS_MECHANIC_INTERRUPT) + { + WAIT_ON_IOBUSY(pi_stat); + IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR); + blockInfo->errStatus = LEO_ERROR_GOOD; + return 0; + } + if (info->cmdType == LEO_CMD_TYPE_2) + return 1; + if (stat & LEO_STATUS_BUFFER_MANAGER_ERROR) + { + WAIT_ON_IOBUSY(pi_stat); + stat = IO_READ(LEO_STATUS); + blockInfo->errStatus = LEO_ERROR_22; + __osLeoResume(); + IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); + __OSGlobalIntMask |= OS_IM_PI; + return 1; + } + if (info->cmdType == LEO_CMD_TYPE_1) + { + if ((stat & LEO_STATUS_DATA_REQUEST) == 0) + { + if (info->sectorNum + 1 != info->transferMode * 85) + { + blockInfo->errStatus = LEO_ERROR_24; + __osLeoAbnormalResume(); + return 1; + } + IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); + __OSGlobalIntMask |= OS_IM_PI; + blockInfo->errStatus = LEO_ERROR_GOOD; + __osLeoResume(); + return 1; + } + blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr + blockInfo->sectorSize); + info->sectorNum++; + osEPiRawStartDma(__osDiskHandle, OS_WRITE, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize); + return 1; + } + if (info->cmdType == LEO_CMD_TYPE_0) + { + if (info->transferMode == LEO_SECTOR_MODE) + { + if ((s32)blockInfo->C1ErrNum + 17 < info->sectorNum) + { + blockInfo->errStatus = LEO_ERROR_GOOD; + __osLeoAbnormalResume(); + return 1; + } + if ((stat & LEO_STATUS_DATA_REQUEST) == 0) + { + blockInfo->errStatus = LEO_ERROR_23; + __osLeoAbnormalResume(); + return 1; + } + } + else + { + blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr + blockInfo->sectorSize); + } + bm_stat = IO_READ(LEO_BM_STATUS); + if ((bm_stat & LEO_BM_STATUS_C1SINGLE && bm_stat & LEO_BM_STATUS_C1DOUBLE) || bm_stat & LEO_BM_STATUS_MICRO) + { + if (blockInfo->C1ErrNum > 3) + { + if (info->transferMode != LEO_SECTOR_MODE || info->sectorNum > 0x52) + { + blockInfo->errStatus = LEO_ERROR_23; + __osLeoAbnormalResume(); + return 1; + } + } + else + { + int errNum = blockInfo->C1ErrNum; + blockInfo->C1ErrSector[errNum] = info->sectorNum + 1; + } + blockInfo->C1ErrNum += 1; + } + if (stat & LEO_STATUS_C2_TRANSFER) + { + if (info->sectorNum != 87) + { + blockInfo->errStatus = LEO_ERROR_24; + __osLeoAbnormalResume(); + } + if (info->transferMode == LEO_TRACK_MODE && info->blockNum == 0) + { + info->blockNum = 1; + info->sectorNum = -1; + info->block[1].dramAddr = (void *)((u32)info->block[1].dramAddr - info->block[1].sectorSize); + + blockInfo->errStatus = LEO_ERROR_22; + } + else + { + IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); + __OSGlobalIntMask |= OS_IM_PI; + info->cmdType = LEO_CMD_TYPE_2; + blockInfo->errStatus = LEO_ERROR_GOOD; + } + osEPiRawStartDma(__osDiskHandle, OS_READ, LEO_C2_BUFF, blockInfo->C2Addr, blockInfo->sectorSize * 4); + return 1; + } + + if (info->sectorNum == -1 && info->transferMode == LEO_TRACK_MODE && info->blockNum == 1) + { + __OSBlockInfo *bptr = &info->block[0]; + if (bptr->C1ErrNum == 0) + { + if (((u32 *)bptr->C2Addr)[0] | ((u32 *)bptr->C2Addr)[1] | ((u32 *)bptr->C2Addr)[2] | ((u32 *)bptr->C2Addr)[3]) + { + bptr->errStatus = LEO_ERROR_24; + __osLeoAbnormalResume(); + return 1; + } + } + bptr->errStatus = 0; + __osLeoResume(); + } + info->sectorNum++; + if (stat & LEO_STATUS_DATA_REQUEST) + { + if (info->sectorNum > 0x54) + { + blockInfo->errStatus = LEO_ERROR_24; + __osLeoAbnormalResume(); + return 1; + } + osEPiRawStartDma(__osDiskHandle, 0, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize); + blockInfo->errStatus = LEO_ERROR_GOOD; + return 1; + } + if (info->sectorNum <= 0x54) + { + blockInfo->errStatus = LEO_ERROR_24; + __osLeoAbnormalResume(); + return 1; + } + return 1; + } + blockInfo->errStatus = LEO_ERROR_4; + __osLeoAbnormalResume(); + return 1; +} + +void __osLeoAbnormalResume(void) +{ + __OSTranxInfo *info; + u32 pi_stat; + info = &__osDiskHandle->transferInfo; + WAIT_ON_IOBUSY(pi_stat); + IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET); + WAIT_ON_IOBUSY(pi_stat); + IO_WRITE(LEO_BM_CTL, info->bmCtlShadow); + __osLeoResume(); + IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); + __OSGlobalIntMask |= OS_IM_PI; +} +void __osLeoResume(void) +{ + __OSEventState *es; + OSMesgQueue *mq; + s32 last; + es = &__osEventStateTab[OS_EVENT_PI]; + mq = es->messageQueue; + if (mq == NULL || MQ_IS_FULL(mq)) + return; + last = (mq->first + mq->validCount) % mq->msgCount; + mq->msg[last] = es->message; + mq->validCount++; + if (mq->mtqueue->next != NULL) + __osEnqueueThread(&__osRunQueue, __osPopThread(&mq->mtqueue)); +} diff --git a/src/os/__osPiCreateAccessQueue.c b/src/os/__osPiCreateAccessQueue.c new file mode 100644 index 000000000..90d4c86ab --- /dev/null +++ b/src/os/__osPiCreateAccessQueue.c @@ -0,0 +1,25 @@ +#include "libultra_internal.h" + +#define PIAccessQueueSize 2 + +OSMesg osPiMesgBuff[PIAccessQueueSize]; +OSMesgQueue gOsPiMessageQueue; +u32 gOsPiAccessQueueCreated = 0; + +void __osPiCreateAccessQueue(void) { + gOsPiAccessQueueCreated = 1; + osCreateMesgQueue(&gOsPiMessageQueue, &osPiMesgBuff[0], PIAccessQueueSize - 1); + osSendMesg(&gOsPiMessageQueue, NULL, OS_MESG_NOBLOCK); +} + +void __osPiGetAccess(void) { + OSMesg sp1c; + if (!gOsPiAccessQueueCreated) { + __osPiCreateAccessQueue(); + } + osRecvMesg(&gOsPiMessageQueue, &sp1c, OS_MESG_BLOCK); +} + +void __osPiRelAccess(void) { + osSendMesg(&gOsPiMessageQueue, NULL, OS_MESG_NOBLOCK); +} diff --git a/src/os/__osResetGlobalIntMask.c b/src/os/__osResetGlobalIntMask.c new file mode 100644 index 000000000..e6b0de27d --- /dev/null +++ b/src/os/__osResetGlobalIntMask.c @@ -0,0 +1,9 @@ +#include "libultra_internal.h" +#include "new_func.h" + +void __osResetGlobalIntMask(u32 mask) { + register u32 prev; + prev = __osDisableInt(); + __OSGlobalIntMask &= ~(-0x402 & mask); + __osRestoreInt(prev); +} diff --git a/src/os/__osSetGlobalIntMask.c b/src/os/__osSetGlobalIntMask.c new file mode 100644 index 000000000..c800bb334 --- /dev/null +++ b/src/os/__osSetGlobalIntMask.c @@ -0,0 +1,9 @@ +#include "libultra_internal.h" +#include "hardware.h" +#include "new_func.h" + +void __osSetGlobalIntMask(s32 arg0) { + register u32 prev = __osDisableInt(); + __OSGlobalIntMask |= arg0; + __osRestoreInt(prev); +} diff --git a/src/os/__osSetHWIntrRoutine.c b/src/os/__osSetHWIntrRoutine.c new file mode 100755 index 000000000..182dc8cb4 --- /dev/null +++ b/src/os/__osSetHWIntrRoutine.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" + +extern s32 (*__osHwIntTable[])(void); +void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void)) +{ + register u32 saveMask; + saveMask = __osDisableInt(); + __osHwIntTable[interrupt] = handler; + __osRestoreInt(saveMask); +} diff --git a/src/os/__osSiCreateAccessQueue.c b/src/os/__osSiCreateAccessQueue.c new file mode 100644 index 000000000..069177747 --- /dev/null +++ b/src/os/__osSiCreateAccessQueue.c @@ -0,0 +1,25 @@ +#include "libultra_internal.h" + +#define SIAccessQueueSize 2 + +OSMesg osSiMesgBuff[SIAccessQueueSize]; +OSMesgQueue gOsSiMessageQueue; +u32 gOsSiAccessQueueCreated = 0; + +void __osSiCreateAccessQueue() { + gOsSiAccessQueueCreated = 1; + osCreateMesgQueue(&gOsSiMessageQueue, &osSiMesgBuff[0], SIAccessQueueSize - 1); + osSendMesg(&gOsSiMessageQueue, NULL, OS_MESG_NOBLOCK); +} + +void __osSiGetAccess(void) { + OSMesg sp1c; + if (!gOsSiAccessQueueCreated) { + __osSiCreateAccessQueue(); + } + osRecvMesg(&gOsSiMessageQueue, &sp1c, OS_MESG_BLOCK); +} + +void __osSiRelAccess(void) { + osSendMesg(&gOsSiMessageQueue, NULL, OS_MESG_NOBLOCK); +} diff --git a/src/os/__osSiDeviceBusy.c b/src/os/__osSiDeviceBusy.c new file mode 100644 index 000000000..5872f1344 --- /dev/null +++ b/src/os/__osSiDeviceBusy.c @@ -0,0 +1,12 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSiDeviceBusy() { + register u32 status; + status = HW_REG(SI_STATUS_REG, u32); + if (status & (SI_STATUS_DMA_BUSY | SI_STATUS_IO_READ_BUSY)) { + return 1; + } else { + return 0; + } +} diff --git a/src/os/__osSiRawReadIo.c b/src/os/__osSiRawReadIo.c new file mode 100644 index 000000000..03654dab2 --- /dev/null +++ b/src/os/__osSiRawReadIo.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSiRawReadIo(void *a0, u32 *a1) { + if (__osSiDeviceBusy()) { + return -1; + } + *a1 = HW_REG((uintptr_t) a0, u32); + return 0; +} diff --git a/src/os/__osSiRawStartDma.c b/src/os/__osSiRawStartDma.c new file mode 100644 index 000000000..965b71879 --- /dev/null +++ b/src/os/__osSiRawStartDma.c @@ -0,0 +1,25 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSiRawStartDma(s32 dir, void *addr) { + if (__osSiDeviceBusy()) { + return -1; + } + + if (dir == OS_WRITE) { + osWritebackDCache(addr, 64); + } + + HW_REG(SI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(addr); + + if (dir == OS_READ) { + HW_REG(SI_PIF_ADDR_RD64B_REG, u32) = 0x1FC007C0; + } else { + HW_REG(SI_PIF_ADDR_WR64B_REG, u32) = 0x1FC007C0; + } + + if (dir == OS_READ) { + osInvalDCache(addr, 64); + } + return 0; +} diff --git a/src/os/__osSiRawWriteIo.c b/src/os/__osSiRawWriteIo.c new file mode 100644 index 000000000..8da0a3d65 --- /dev/null +++ b/src/os/__osSiRawWriteIo.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSiRawWriteIo(void *a0, u32 a1) { + if (__osSiDeviceBusy()) { + return -1; + } + HW_REG((uintptr_t) a0, u32) = a1; + return 0; +} diff --git a/src/os/__osSpDeviceBusy.c b/src/os/__osSpDeviceBusy.c new file mode 100644 index 000000000..a40c402a2 --- /dev/null +++ b/src/os/__osSpDeviceBusy.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSpDeviceBusy() { + register u32 status = HW_REG(SP_STATUS_REG, u32); + if (status & (SPSTATUS_IO_FULL | SPSTATUS_DMA_FULL | SPSTATUS_DMA_BUSY)) { + return 1; + } + return 0; +} diff --git a/src/os/__osSpGetStatus.c b/src/os/__osSpGetStatus.c new file mode 100644 index 000000000..a3be17e66 --- /dev/null +++ b/src/os/__osSpGetStatus.c @@ -0,0 +1,6 @@ +#include "libultra_internal.h" +#include "hardware.h" + +u32 __osSpGetStatus() { + return HW_REG(SP_STATUS_REG, u32); +} diff --git a/src/os/__osSpRawStartDma.c b/src/os/__osSpRawStartDma.c new file mode 100644 index 000000000..3768a5fa4 --- /dev/null +++ b/src/os/__osSpRawStartDma.c @@ -0,0 +1,16 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size) { + if (__osSpDeviceBusy()) { + return -1; + } + HW_REG(SP_MEM_ADDR_REG, void *) = sp_ptr; + HW_REG(SP_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_ptr); + if (dir == 0) { + HW_REG(SP_WR_LEN_REG, u32) = size - 1; + } else { + HW_REG(SP_RD_LEN_REG, u32) = size - 1; + } + return 0; +} diff --git a/src/os/__osSpSetPc.c b/src/os/__osSpSetPc.c new file mode 100644 index 000000000..d074590c9 --- /dev/null +++ b/src/os/__osSpSetPc.c @@ -0,0 +1,12 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osSpSetPc(void *pc) { + register u32 status = HW_REG(SP_STATUS_REG, u32); + if (!(status & SPSTATUS_HALT)) { + return -1; + } else { + HW_REG(SP_PC_REG, void *) = pc; + return 0; + } +} diff --git a/src/os/__osSpSetStatus.c b/src/os/__osSpSetStatus.c new file mode 100644 index 000000000..d63ac4cea --- /dev/null +++ b/src/os/__osSpSetStatus.c @@ -0,0 +1,6 @@ +#include "libultra_internal.h" +#include "hardware.h" + +void __osSpSetStatus(u32 status) { + HW_REG(SP_STATUS_REG, u32) = status; +} diff --git a/src/os/__osSyncPutChars.c b/src/os/__osSyncPutChars.c new file mode 100644 index 000000000..a27ef60f8 --- /dev/null +++ b/src/os/__osSyncPutChars.c @@ -0,0 +1,38 @@ +#include "libultra_internal.h" + +typedef struct { + u8 unk00 : 2; + u8 pad : 4; + u8 unk01 : 2; + u8 unk2[3]; +} unkStruct; + +u32 D_80334A40 = 0; +u32 D_80334A44 = 1; + +void __osSyncPutChars(s32 a0, s32 a1, u8 *a2) { + unkStruct sp24; + s32 sp20; + u32 sp1c; + sp24.unk00 = a0; + sp24.unk01 = a1; + + for (sp20 = 0; sp20 < a1; sp20++) { + sp24.unk2[sp20] = a2[sp20]; + } + + while (!__osAtomicDec(&D_80334A44)) { + ; + } + + sp1c = __osDisableInt(); + + *(u32 *) 0xC0000000 = *(u32 *) &sp24; + while (!(__osGetCause() & 0x2000)) { + ; + } + *(u32 *) 0xC000000C = 0; + D_80334A44++; + + __osRestoreInt(sp1c); +} diff --git a/src/os/__osViGetCurrentContext.c b/src/os/__osViGetCurrentContext.c new file mode 100644 index 000000000..0f7cf3a95 --- /dev/null +++ b/src/os/__osViGetCurrentContext.c @@ -0,0 +1,7 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViCurr; + +OSViContext *__osViGetCurrentContext() { + return __osViCurr; +} diff --git a/src/os/__osViInit.c b/src/os/__osViInit.c new file mode 100644 index 000000000..c4e39e475 --- /dev/null +++ b/src/os/__osViInit.c @@ -0,0 +1,41 @@ +#include "libultra_internal.h" +#include "hardware.h" + +extern u32 osTvType; + +OSViContext sViContexts[2] = { 0 }; +OSViContext *__osViCurr = &sViContexts[0]; +OSViContext *__osViNext = &sViContexts[1]; + +u32 osViClock = 0x02E6D354; // used for audio frequency calculations + +extern OSViMode osViModePalLan1; +extern OSViMode osViModeMpalLan1; +extern OSViMode osViModeNtscLan1; + +void __osViInit(void) { + bzero(sViContexts, sizeof(sViContexts)); + __osViCurr = &sViContexts[0]; + __osViNext = &sViContexts[1]; + __osViNext->retraceCount = 1; + __osViCurr->retraceCount = 1; + + if (osTvType == TV_TYPE_PAL) { + __osViNext->modep = &osViModePalLan1; + osViClock = 0x02F5B2D2; + } else if (osTvType == TV_TYPE_MPAL) { + __osViNext->modep = &osViModeMpalLan1; + osViClock = 0x02E6025C; + } else { + __osViNext->modep = &osViModeNtscLan1; + osViClock = 0x02E6D354; + } + + __osViNext->unk00 = 0x20; + __osViNext->features = __osViNext->modep->comRegs.ctrl; + while (HW_REG(VI_CURRENT_REG, u32) > 0xa) { + ; + } + HW_REG(VI_STATUS_REG, u32) = 0; + __osViSwapContext(); +} diff --git a/src/os/__osViSwapContext.c b/src/os/__osViSwapContext.c new file mode 100644 index 000000000..990cb11fd --- /dev/null +++ b/src/os/__osViSwapContext.c @@ -0,0 +1,61 @@ +#include "libultra_internal.h" +#include "hardware.h" + +extern OSViContext *__osViNext; +extern OSViContext *__osViCurr; + +void __osViSwapContext() { + register OSViMode *s0; + register OSViContext *s1; + u32 origin; + u32 hStart; + u32 sp34; + u32 field; + register u32 s2; + field = 0; + s1 = __osViNext; + s0 = s1->modep; + field = HW_REG(VI_V_CURRENT_LINE_REG, u32) & 1; + s2 = osVirtualToPhysical(s1->buffer); + origin = (s0->fldRegs[field].origin) + s2; + if (s1->unk00 & 2) { + s1->unk20 |= s0->comRegs.xScale & ~0xfff; + } else { + s1->unk20 = s0->comRegs.xScale; + } + if (s1->unk00 & 4) { + sp34 = (u32)(s0->fldRegs[field].yScale & 0xfff); + s1->unk2c = s1->unk24 * sp34; + s1->unk2c |= s0->fldRegs[field].yScale & ~0xfff; + } else { + s1->unk2c = s0->fldRegs[field].yScale; + } + hStart = s0->comRegs.hStart; + if (s1->unk00 & 0x20) { + hStart = 0; + } + if (s1->unk00 & 0x40) { + s1->unk2c = 0; + origin = osVirtualToPhysical(s1->buffer); + } + if (s1->unk00 & 0x80) { + s1->unk2c = (s1->unk28 << 0x10) & 0x3ff0000; + origin = osVirtualToPhysical(s1->buffer); + } + HW_REG(VI_ORIGIN_REG, u32) = origin; + HW_REG(VI_WIDTH_REG, u32) = s0->comRegs.width; + HW_REG(VI_BURST_REG, u32) = s0->comRegs.burst; + HW_REG(VI_V_SYNC_REG, u32) = s0->comRegs.vSync; + HW_REG(VI_H_SYNC_REG, u32) = s0->comRegs.hSync; + HW_REG(VI_LEAP_REG, u32) = s0->comRegs.leap; + HW_REG(VI_H_START_REG, u32) = hStart; + HW_REG(VI_V_START_REG, u32) = s0->fldRegs[field].vStart; + HW_REG(VI_V_BURST_REG, u32) = s0->fldRegs[field].vBurst; + HW_REG(VI_INTR_REG, u32) = s0->fldRegs[field].vIntr; + HW_REG(VI_X_SCALE_REG, u32) = s1->unk20; + HW_REG(VI_Y_SCALE_REG, u32) = s1->unk2c; + HW_REG(VI_CONTROL_REG, u32) = s1->features; + __osViNext = __osViCurr; + __osViCurr = s1; + *__osViNext = *__osViCurr; +} diff --git a/src/os/alBnkfNew.c b/src/os/alBnkfNew.c new file mode 100644 index 000000000..11db85bd8 --- /dev/null +++ b/src/os/alBnkfNew.c @@ -0,0 +1,93 @@ +#include "libultra_internal.h" +#include "libaudio_internal.h" + +#define PATCH(SRC, BASE, TYPE) SRC = (TYPE)((uintptr_t) SRC + (uintptr_t) BASE) + +void alSeqFileNew(ALSeqFile *f, u8 *base) { + int i; + for (i = 0; i < f->seqCount; i++) { + PATCH(f->seqArray[i].offset, base, u8 *); + } +} + +static void _bnkfPatchBank(ALInstrument *inst, ALBankFile *f, u8 *table) { + int i; + ALSound *sound; + ALWaveTable *wavetable; + u8 *table2; + + if (inst->flags) { + return; + } + + inst->flags = 1; + + for (i = 0; i < inst->soundCount; i++) { + PATCH(inst->soundArray[i], f, ALSound *); + sound = inst->soundArray[i]; + if (sound->flags) { + continue; + } + + table2 = table; + + sound->flags = 1; + PATCH(sound->envelope, f, ALEnvelope *); + PATCH(sound->keyMap, f, ALKeyMap *); + PATCH(sound->wavetable, f, ALWaveTable *); + wavetable = sound->wavetable; + if (wavetable->flags) { + continue; + } + + wavetable->flags = 1; + PATCH(wavetable->base, table2, u8 *); + if (wavetable->type == 0) { + PATCH(wavetable->waveInfo.adpcmWave.book, f, ALADPCMBook *); + if (wavetable->waveInfo.adpcmWave.loop != NULL) { + PATCH(wavetable->waveInfo.adpcmWave.loop, f, ALADPCMloop *); + } + } else if (wavetable->type == 1) { + if (wavetable->waveInfo.rawWave.loop != NULL) { + PATCH(wavetable->waveInfo.rawWave.loop, f, ALRawLoop *); + } + } + } +} + +// Force adding another jr $ra. Has to be called or it doesn't get put in the +// right place. +static void unused(void) { +} + +void alBnkfNew(ALBankFile *f, u8 *table) { + ALBank *bank; + int i; + int j; + unused(); + if (f->revision != AL_BANK_VERSION) { + return; + } + + for (i = 0; i < f->bankCount; i++) { + PATCH(f->bankArray[i], f, ALBank *); + if (f->bankArray[i] == NULL) { + continue; + } + + bank = f->bankArray[i]; + if (bank->flags == 0) { + bank->flags = 1; + if (bank->percussion != NULL) { + PATCH(bank->percussion, f, ALInstrument *); + _bnkfPatchBank(bank->percussion, f, table); + } + for (j = 0; j < bank->instCount; j++) { + PATCH(bank->instArray[j], f, ALInstrument *); + if (bank->instArray[j] != NULL) { + _bnkfPatchBank(bank->instArray[j], f, table); + } + } + } + } +} diff --git a/src/os/bstring.h b/src/os/bstring.h new file mode 100644 index 000000000..01486d99e --- /dev/null +++ b/src/os/bstring.h @@ -0,0 +1,36 @@ +#ifndef __BSTRING_H__ +#define __BSTRING_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/* + * bstring(3C) -- byte string operations + * + * Copyright 1990, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; + * the contents of this file may not be disclosed to third parties, copied or + * duplicated in any form, in whole or in part, without the prior written + * permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to restrictions + * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data + * and Computer Software clause at DFARS 252.227-7013, and/or in similar or + * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - + * rights reserved under the Copyright Laws of the United States. + */ + +#ident "$Revision: 1.4 $" + +extern void bcopy(const void *, void *, size_t); +extern int bcmp(const void *, const void *, int); +extern void bzero(void *, size_t); +extern void blkclr(void *, int); + +#ifdef __cplusplus +} +#endif +#endif /* !__BSTRING_H__ */ diff --git a/src/os/contpfs.c b/src/os/contpfs.c new file mode 100644 index 000000000..a94d59fa1 --- /dev/null +++ b/src/os/contpfs.c @@ -0,0 +1,298 @@ +#include "libultra_internal.h" +#include "controller.h" + +u16 __osSumcalc(u8 *ptr, int length) +{ + int i; + u32 sum; + u8 *tmp; + + sum = 0; + tmp = ptr; + for (i = 0; i < length; i++) + { + sum += *tmp++; + sum &= 0xffff; + } + return sum; +} +s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum) +{ + u16 data; + u32 j; + data = 0; + *icsum = 0; + *csum = *icsum; + for (j = 0; j < 28; j += 2) + { + //feels like this should be a compiler optimization not manual.. + //but it doesn't match and I'm pretty sure this is just -O1 + data = *(u16 *)((u8 *)ptr + j); + //data = ptr[j] + *csum += data; + *icsum += ~data; + } + return 0; +} +s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid) +{ + + s32 ret; + u8 temp[32]; + u8 comp[32]; + u8 mask; + int i; + int j; + u16 index[4]; + + ret = 0; + mask = 0; + SET_ACTIVEBANK_TO_ZERO; + newid->repaired = -1; + newid->random = osGetCount(); + newid->serial_mid = badid->serial_mid; + newid->serial_low = badid->serial_low; + for (j = 0; j < PFS_MAX_BANKS;) + { + pfs->activebank = j; + ERRCK(__osPfsSelectBank(pfs)) + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, (u8*)&temp)); //TODO: fix magic number + temp[0] = j | 0x80; + for (i = 1; i < ARRLEN(temp); i++) + { + + temp[i] = ~temp[i]; + } + + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, 0, (u8*)temp, FALSE)); //oddr 0, don't force + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, (u8*)&comp)); + + for (i = 0; i < ARRLEN(temp); i++) + { + if (comp[i] != temp[i]) + break; + } + if (i != ARRLEN(temp)) + break; + if (j > 0) + { + pfs->activebank = 0; + ERRCK(__osPfsSelectBank(pfs)); + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, (u8*)temp)); + if (temp[0] != 128) + break; //TODO: remove magic constant + } + j++; + } + pfs->activebank = 0; + ERRCK(__osPfsSelectBank(pfs)); + if (j > 0) + mask = 1; + else + mask = 0; + newid->deviceid = (badid->deviceid & (u16)~1) | mask; + newid->banks = j; + newid->version = badid->version; + __osIdCheckSum((u16*)newid, &newid->checksum, &newid->inverted_checksum); + index[0] = 1; + index[1] = 3; + index[2] = 4; + index[3] = 6; + for (i = 0; i < ARRLEN(index); i++) + { + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, index[i], (u8*)newid, TRUE)); + } + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp)); + for (i = 0; i < ARRLEN(temp); i++) + { + if (temp[i] != ((u8 *)newid)[i]) + return PFS_ERR_ID_FATAL; + } + return 0; +} + +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp) +{ + u16 index[4]; + s32 ret; + u16 sum; + u16 isum; + int i; + int j; + + ret = 0; + SET_ACTIVEBANK_TO_ZERO; + index[0] = 1; + index[1] = 3; + index[2] = 4; + index[3] = 6; + for (i = 1; i < ARRLEN(index); i++) + { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, index[i], (u8*)temp)); + __osIdCheckSum((u16 *)temp, &sum, &isum); + if (temp->checksum == sum && temp->inverted_checksum == isum) + break; + } + if (i == ARRLEN(index)) + return PFS_ERR_ID_FATAL; + + for (j = 0; j < ARRLEN(index); j++) + { + if (j != i) + { + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, index[j], (u8*)temp, TRUE)); + } + } + return 0; +} + +s32 __osGetId(OSPfs *pfs) +{ + int k; + u16 sum; + u16 isum; + u8 temp[32]; + __OSPackId newid; + s32 ret; + __OSPackId *id; + + SET_ACTIVEBANK_TO_ZERO; + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp)); + __osIdCheckSum((u16*)temp, &sum, &isum); + id = (__OSPackId*)temp; + if (id->checksum != sum || id->inverted_checksum != isum) + { + ret = __osCheckPackId(pfs, id); + if (ret == PFS_ERR_ID_FATAL) + { + ERRCK(__osRepairPackId(pfs, id, &newid)); + id = &newid; + } + else if (ret != 0) + { + return ret; + } + } + if ((id->deviceid & 1) == 0) //TODO: remove magic constant + { + ERRCK(__osRepairPackId(pfs, id, &newid)); + id = &newid; + if ((id->deviceid & 1) == 0) + return PFS_ERR_DEVICE; + } + for (k = 0; k < ARRLEN(pfs->id); k++) + { + pfs->id[k] = ((u8 *)id)[k]; + } + pfs->version = id->version; + pfs->banks = id->banks; + pfs->inode_start_page = pfs->banks * 2 + 3; //TODO: loads of magic constants.. + pfs->dir_size = 16; + pfs->inode_table = 8; + pfs->minode_table = pfs->banks * PFS_ONE_PAGE + 8; + pfs->dir_table = pfs->minode_table + pfs->banks * PFS_ONE_PAGE; + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 7, pfs->label)); + return 0; +} + +s32 __osCheckId(OSPfs *pfs) +{ + int k; + u8 temp[32]; + s32 ret; + + SET_ACTIVEBANK_TO_ZERO; + ret = __osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp); + if (ret != 0) + { + if (ret != 2) + return ret; + else + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp)); + } + + for (k = 0; k < ARRLEN(temp); k++) + { + if (pfs->id[k] != temp[k]) + return PFS_ERR_NEW_PACK; + } + + return 0; +} + +s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank) +{ + u8 sum; + int j; + s32 ret; + int offset; + u8 *addr; + + SET_ACTIVEBANK_TO_ZERO; + + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + + if (flag == PFS_WRITE) + inode->inode_page[0].inode_t.page = __osSumcalc((u8*)&inode->inode_page[offset], (-offset) * 2 + 256); + + for (j = 0; j < 8; j++) + { + addr = ((u8 *)inode->inode_page + j * 32); //TODO: don't like this =/ //maybe &inode->inode_table[j*PFS_ONE_PAGE].ipage or something + if (flag == PFS_WRITE) + { + ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->inode_table + bank * 8 + j, addr, FALSE); + ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->minode_table + bank * 8 + j, addr, FALSE); + } + else + { + ret = __osContRamRead(pfs->queue, pfs->channel, pfs->inode_table + bank * 8 + j, addr); + } + if (ret != 0) + return ret; + } + if (flag == PFS_READ) + { + sum = __osSumcalc((u8*)&inode->inode_page[offset], (-offset) * 2 + 256); + if (sum != inode->inode_page[0].inode_t.page) + { + for (j = 0; j < PFS_ONE_PAGE; j++) + { + addr = ((u8 *)inode->inode_page + j * 32); + ret = __osContRamRead(pfs->queue, pfs->channel, pfs->minode_table + bank * PFS_ONE_PAGE + j, addr); + } + if (sum != inode->inode_page[0].inode_t.page) + return PFS_ERR_INCONSISTENT; + for (j = 0; j < PFS_ONE_PAGE; j++) + { + addr = ((u8 *)inode->inode_page + j * 32); + ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->inode_table + bank * PFS_ONE_PAGE + j, addr, FALSE); + } + } + else + { + for (j = 0; j < PFS_ONE_PAGE; j++) + { + addr = ((u8 *)inode->inode_page + j * 32); + ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->minode_table + bank * PFS_ONE_PAGE + j, addr, FALSE); + } + } + } + return 0; +} + +s32 __osPfsSelectBank(OSPfs *pfs) +{ + u8 temp[BLOCKSIZE]; + int i; + s32 ret; + ret = 0; + for (i = 0; i < ARRLEN(temp); i++) + { + temp[i] = pfs->activebank; + } + ret = __osContRamWrite(pfs->queue, pfs->channel, 1024, (u8*)temp, FALSE); + return ret; +} \ No newline at end of file diff --git a/src/os/contramread.c b/src/os/contramread.c new file mode 100644 index 000000000..3937fd7e3 --- /dev/null +++ b/src/os/contramread.c @@ -0,0 +1,96 @@ +#include "libultra_internal.h" +#include "PR/rcp.h" +#include "controller.h" + +extern s32 func_800CE7D4(OSMesgQueue *, s32); +void __osPackRamReadData(int channel, u16 address); + +extern u32 D_801965CC; + +s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { + s32 ret; + int i; + u8 *ptr; + __OSContRamReadFormat ramreadformat; + int retry; + ret = 0; + ptr = (u8 *)&__osPfsPifRam; + retry = 2; + __osSiGetAccess(); + _osLastSentSiCmd = CONT_CMD_READ_MEMPACK; + __osPackRamReadData(channel, address); + ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + for (i = 0; i < 16; i++) { + __osPfsPifRam.ramarray[i] = 0xFF; + } + do { + D_801965CC = 0; + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + ptr = (u8 *)&__osPfsPifRam; + if (channel != 0) { + for (i = 0; i < channel; i++) { + ptr++; + } + } + ramreadformat = *(__OSContRamReadFormat *)ptr; + ret = CHNL_ERR(ramreadformat); + if (ret == 0) { + u8 c; + c = __osContDataCrc((u8*)&ramreadformat.data); + if (c != ramreadformat.datacrc) { + ret = func_800CE7D4(mq, channel); + if (ret != 0) { + __osSiRelAccess(); + return ret; + } + ret = PFS_ERR_CONTRFAIL; + } else { + for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + *buffer++ = ramreadformat.data[i]; + } + } + } + // diff here somewhere + else { + ret = 1/* PFS_ERR_NOPACK */; + } + if (ret != PFS_ERR_CONTRFAIL) { + break; + } + } while (retry-- >= 0); + __osSiRelAccess(); + return ret; +} + +void __osPackRamReadData(int channel, u16 address) { + u8 *ptr; + __OSContRamReadFormat ramreadformat; + int i; + + ptr = (u8 *)__osPfsPifRam.ramarray; + + for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + __osPfsPifRam.ramarray[i] = 0; + } + + __osPfsPifRam.pifstatus = CONT_CMD_EXE; + ramreadformat.dummy = CONT_CMD_NOP; + ramreadformat.txsize = CONT_CMD_READ_MEMPACK_TX; + ramreadformat.rxsize = CONT_CMD_READ_MEMPACK_RX; + ramreadformat.cmd = CONT_CMD_READ_MEMPACK; + ramreadformat.address = (address << 0x5) | __osContAddressCrc(address); + ramreadformat.datacrc = CONT_CMD_NOP; + for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + ramreadformat.data[i] = CONT_CMD_NOP; + } + if (channel != 0) { + for (i = 0; i < channel; i++) { + *ptr++ = 0; + } + } + *(__OSContRamReadFormat *)ptr = ramreadformat; + ptr += sizeof(__OSContRamReadFormat); + ptr[0] = CONT_CMD_END; +} diff --git a/src/os/contramwrite.c b/src/os/contramwrite.c new file mode 100644 index 000000000..cdd8510a7 --- /dev/null +++ b/src/os/contramwrite.c @@ -0,0 +1,94 @@ +#include "libultra_internal.h" +#include "PR/rcp.h" +#include "controller.h" + +extern s32 func_800CE7D4(OSMesgQueue *, s32); +void __osPackRamWriteData(int channel, u16 address, u8 *buffer); +extern u32 D_801965CC; + +s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force) { + s32 ret; + int i; + u8 *ptr; + __OSContRamReadFormat ramreadformat; + int retry; + + ret = 0; + ptr = (u8 *)&__osPfsPifRam; + retry = 2; + if (force != 1 && address < 7 && address != 0) { + return 0; + } + __osSiGetAccess(); + _osLastSentSiCmd = CONT_CMD_WRITE_MEMPACK; + __osPackRamWriteData(channel, address, buffer); + ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + for (i = 0; i < 16; i++) { + __osPfsPifRam.ramarray[i] = 0xFF; + } + do { + D_801965CC = 0; + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + ptr = (u8 *)&__osPfsPifRam; + if (channel != 0) { + for (i = 0; i < channel; i++) { + ptr++; + } + } + + ramreadformat = *(__OSContRamReadFormat *)ptr; + + ret = CHNL_ERR(ramreadformat); + if (ret == 0) { + if (__osContDataCrc(buffer) != ramreadformat.datacrc) { + ret = func_800CE7D4(mq, channel); + if (ret != 0) { + __osSiRelAccess(); + return ret; + } + ret = PFS_ERR_CONTRFAIL; + } + // same diff as contramread + } else { + ret = PFS_ERR_NOPACK; + } + if (ret != PFS_ERR_CONTRFAIL) { + break; + } + } while ((retry-- >= 0)); + __osSiRelAccess(); + return ret; +} + +void __osPackRamWriteData(int channel, u16 address, u8 *buffer) { + u8 *ptr; + __OSContRamReadFormat ramreadformat; + int i; + + ptr = (u8 *)__osPfsPifRam.ramarray; + + for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + __osPfsPifRam.ramarray[i] = 0; + } + + __osPfsPifRam.pifstatus = CONT_CMD_EXE; + ramreadformat.dummy = CONT_CMD_NOP; + ramreadformat.txsize = CONT_CMD_WRITE_MEMPACK_TX; + ramreadformat.rxsize = CONT_CMD_WRITE_MEMPACK_RX; + ramreadformat.cmd = CONT_CMD_WRITE_MEMPACK; + ramreadformat.address = (address << 0x5) | __osContAddressCrc(address); + ramreadformat.datacrc = CONT_CMD_NOP; + for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + ramreadformat.data[i] = *buffer++; + } + if (channel != 0) { + for (i = 0; i < channel; i++) { + *ptr++ = 0; + } + } + *(__OSContRamReadFormat *)ptr = ramreadformat; + ptr += sizeof(__OSContRamReadFormat); + ptr[0] = CONT_CMD_END; +} diff --git a/src/os/controller.h b/src/os/controller.h new file mode 100644 index 000000000..518b113ee --- /dev/null +++ b/src/os/controller.h @@ -0,0 +1,208 @@ +#ifndef _CONTROLLER_H +#define _CONTROLLER_H +#include "PR/os_internal.h" +#include "PR/os.h" +#include "PR/rcp.h" + +//should go somewhere else but +#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0]))) +#define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4) + +typedef struct +{ + /* 0x0 */ u32 ramarray[15]; + /* 0x3C */ u32 pifstatus; +} OSPifRam; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u16 button; + /* 0x6 */ s8 stick_x; + /* 0x7 */ s8 stick_y; +} __OSContReadFormat; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u8 typeh; + /* 0x5 */ u8 typel; + /* 0x6 */ u8 status; + /* 0x7 */ u8 dummy1; +} __OSContRequesFormat; + +typedef struct +{ + /* 0x0 */ u8 txsize; + /* 0x1 */ u8 rxsize; + /* 0x2 */ u8 cmd; + /* 0x3 */ u8 typeh; + /* 0x4 */ u8 typel; + /* 0x5 */ u8 status; +} __OSContRequesFormatShort; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u16 address; + /* 0x6 */ u8 data[BLOCKSIZE]; + /* 0x26 */ u8 datacrc; +} __OSContRamReadFormat; + +typedef union { + /* 0x0 */ struct + { + /* 0x0 */ u8 bank; + /* 0x1 */ u8 page; + } inode_t; + /* 0x0 */ u16 ipage; +} __OSInodeUnit; + +typedef struct +{ + /* 0x0 */ u32 game_code; + /* 0x4 */ u16 company_code; + /* 0x6 */ __OSInodeUnit start_page; + /* 0x8 */ u8 status; + /* 0x9 */ s8 reserved; + /* 0xA */ u16 data_sum; + /* 0xC */ u8 ext_name[PFS_FILE_EXT_LEN]; + /* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN]; +} __OSDir; + +typedef struct +{ + /* 0x0 */ __OSInodeUnit inode_page[128]; +} __OSInode; + +typedef struct +{ + /* 0x0 */ u32 repaired; + /* 0x4 */ u32 random; + /* 0x8 */ u64 serial_mid; + /* 0x10 */ u64 serial_low; + /* 0x18 */ u16 deviceid; + /* 0x1A */ u8 banks; + /* 0x1B */ u8 version; + /* 0x1C */ u16 checksum; + /* 0x1E */ u16 inverted_checksum; +} __OSPackId; + +typedef struct +{ + /* 0x0 */ u8 txsize; + /* 0x1 */ u8 rxsize; + /* 0x2 */ u8 cmd; + /* 0x3 */ u8 address; + /* 0x4 */ u8 data[EEPROM_BLOCK_SIZE]; +} __OSContEepromFormat; + +//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage +#define CONT_CMD_REQUEST_STATUS 0 +#define CONT_CMD_READ_BUTTON 1 +#define CONT_CMD_READ_MEMPACK 2 +#define CONT_CMD_WRITE_MEMPACK 3 +#define CONT_CMD_READ_EEPROM 4 +#define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_RESET 0xff + +#define CONT_CMD_REQUEST_STATUS_TX 1 +#define CONT_CMD_READ_BUTTON_TX 1 +#define CONT_CMD_READ_MEMPACK_TX 3 +#define CONT_CMD_WRITE_MEMPACK_TX 35 +#define CONT_CMD_READ_EEPROM_TX 2 +#define CONT_CMD_WRITE_EEPROM_TX 10 +#define CONT_CMD_RESET_TX 1 + +#define CONT_CMD_REQUEST_STATUS_RX 3 +#define CONT_CMD_READ_BUTTON_RX 4 +#define CONT_CMD_READ_MEMPACK_RX 33 +#define CONT_CMD_WRITE_MEMPACK_RX 1 +#define CONT_CMD_READ_EEPROM_RX 8 +#define CONT_CMD_WRITE_EEPROM_RX 1 +#define CONT_CMD_RESET_RX 3 + +#define CONT_CMD_NOP 0xff +#define CONT_CMD_END 0xfe //indicates end of a command +#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command + +#define DIR_STATUS_EMPTY 0 +#define DIR_STATUS_UNKNOWN 1 +#define DIR_STATUS_OCCUPIED 2 + + +typedef struct +{ + /* 0x0 */ __OSInode inode; + /* 0x100 */ u8 bank; + /* 0x101 */ u8 map[256]; +} __OSInodeCache; + +extern s32 __osEepStatus(OSMesgQueue *, OSContStatus *); +u16 __osSumcalc(u8 *ptr, int length); +s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum); +s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid); +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp); +s32 __osGetId(OSPfs *pfs); +s32 __osCheckId(OSPfs *pfs); +s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank); +s32 __osPfsSelectBank(OSPfs *pfs); +s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page); +s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag); +s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank); +s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer); +s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force); +void __osContGetInitData(u8 *pattern, OSContStatus *data); +void __osPackRequestData(u8 cmd); +void __osPfsRequestData(u8 cmd); +void __osPfsGetInitData(u8* pattern, OSContStatus* data); +u8 __osContAddressCrc(u16 addr); +u8 __osContDataCrc(u8 *data); +s32 __osPfsGetStatus(OSMesgQueue *queue, int channel); + +extern u8 _osLastSentSiCmd; +extern OSTimer __osEepromTimer; +extern OSMesg __osEepromTimerMsg; +extern OSMesgQueue __osEepromTimerQ; +extern OSPifRam __osEepPifRam; +extern OSPifRam __osContPifRam; +extern OSPifRam __osPfsPifRam; +extern u8 _osContNumControllers; + +//some version of this almost certainly existed since there's plenty of times where it's used right before a return 0 +#define ERRCK(fn) \ + ret = fn; \ + if (ret != 0) \ + return ret; + +#define SET_ACTIVEBANK_TO_ZERO \ + if (pfs->activebank != 0) \ + { \ + pfs->activebank = 0; \ + ERRCK(__osPfsSelectBank(pfs)) \ + } + +#define PFS_CHECK_ID \ + if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \ + return PFS_ERR_NEW_PACK; +#endif + +#define PFS_CHECK_STATUS \ + if ((pfs->status & PFS_INITIALIZED) == 0) \ + return PFS_ERR_INVALID; + +#define PFS_GET_STATUS \ + __osSiGetAccess(); \ + ret = __osPfsGetStatus(queue, channel); \ + __osSiRelAccess(); \ + if (ret != 0) \ + return ret; diff --git a/src/os/crc.c b/src/os/crc.c new file mode 100644 index 000000000..f7fd3f296 --- /dev/null +++ b/src/os/crc.c @@ -0,0 +1,46 @@ +#include "libultra_internal.h" + +u8 __osContAddressCrc(u16 addr) { + u8 temp; + u8 temp2; + int i; + temp = 0; + for (i = 0; i < 16; i++) { + if (temp & 0x10) { + temp2 = 21; + } else { + temp2 = 0; + } + + temp <<= 1; + temp |= (u8)((addr & 0x400) ? 1 : 0); + addr <<= 1; + temp ^= temp2; + } + return temp & 0x1f; +} + +u8 __osContDataCrc(u8 *data) { + u8 temp; + u8 temp2; + int i; + int j; + temp = 0; + for (i = 0; i <= 32; i++, data++) { + for (j = 7; j >= 0; j--) { + if (temp & 0x80) { + temp2 = 133; + } else { + temp2 = 0; + } + temp <<= 1; + if (i == 32) { + temp &= -1; + } else { + temp |= ((*data & (1 << j)) ? 1 : 0); + } + temp ^= temp2; + } + } + return temp; +} diff --git a/src/os/epidma.c b/src/os/epidma.c new file mode 100644 index 000000000..3aa76f17a --- /dev/null +++ b/src/os/epidma.c @@ -0,0 +1,26 @@ +#ifdef VERSION_SH + +#include "PR/os_internal.h" +#include "piint.h" + +s32 osEPiStartDma(OSPiHandle *pihandle, OSIoMesg *mb, s32 direction) { + register s32 ret; + + if (!__osPiDevMgr.active) { + return -1; + } + mb->piHandle = pihandle; + if (direction == OS_READ) { + mb->hdr.type = OS_MESG_TYPE_EDMAREAD; + } else { + mb->hdr.type = OS_MESG_TYPE_EDMAWRITE; + } + if (mb->hdr.pri == OS_MESG_PRI_HIGH) { + ret = osJamMesg(osPiGetCmdQueue(), mb, OS_MESG_NOBLOCK); + } else { + ret = osSendMesg(osPiGetCmdQueue(), mb, OS_MESG_NOBLOCK); + } + return ret; +} + +#endif diff --git a/src/os/guLookAtF.c b/src/os/guLookAtF.c new file mode 100755 index 000000000..2fb530c97 --- /dev/null +++ b/src/os/guLookAtF.c @@ -0,0 +1,83 @@ +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +#include "libultra_internal.h" + +void guLookAtF(float mf[4][4], float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp) +{ + float len, xLook, yLook, zLook, xRight, yRight, zRight; + + guMtxIdentF(mf); + + xLook = xAt - xEye; + yLook = yAt - yEye; + zLook = zAt - zEye; + + /* Negate because positive Z is behind us: */ + len = -1.0 / sqrtf (xLook*xLook + yLook*yLook + zLook*zLook); + xLook *= len; + yLook *= len; + zLook *= len; + + /* Right = Up x Look */ + + xRight = yUp * zLook - zUp * yLook; + yRight = zUp * xLook - xUp * zLook; + zRight = xUp * yLook - yUp * xLook; + len = 1.0 / sqrtf (xRight*xRight + yRight*yRight + zRight*zRight); + xRight *= len; + yRight *= len; + zRight *= len; + + /* Up = Look x Right */ + + xUp = yLook * zRight - zLook * yRight; + yUp = zLook * xRight - xLook * zRight; + zUp = xLook * yRight - yLook * xRight; + len = 1.0 / sqrtf (xUp*xUp + yUp*yUp + zUp*zUp); + xUp *= len; + yUp *= len; + zUp *= len; + + mf[0][0] = xRight; + mf[1][0] = yRight; + mf[2][0] = zRight; + mf[3][0] = -(xEye * xRight + yEye * yRight + zEye * zRight); + + mf[0][1] = xUp; + mf[1][1] = yUp; + mf[2][1] = zUp; + mf[3][1] = -(xEye * xUp + yEye * yUp + zEye * zUp); + + mf[0][2] = xLook; + mf[1][2] = yLook; + mf[2][2] = zLook; + mf[3][2] = -(xEye * xLook + yEye * yLook + zEye * zLook); + + mf[0][3] = 0; + mf[1][3] = 0; + mf[2][3] = 0; + mf[3][3] = 1; +} + +void guLookAt (Mtx *m, float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp) +{ + float mf[4][4]; + + guLookAtF(mf, xEye, yEye, zEye, xAt, yAt, zAt, xUp, yUp, zUp); + + guMtxF2L(mf, m); +} diff --git a/src/os/guLookAtRef.c b/src/os/guLookAtRef.c new file mode 100644 index 000000000..4e65a49a3 --- /dev/null +++ b/src/os/guLookAtRef.c @@ -0,0 +1,114 @@ +/* + * This file originates from the standard Nintendo 64 SDK libultra src + * directory, and it used exclusively when building with the Fast3DEX2 + * microcode. Not not using it breaks environment mapping. + * + * Apart from the modifications listed below, this file is unmodified. + */ + +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/* Minor modifications */ +#include +#define FTOFRAC8(x) ((int) MIN(((x) * (128.0)), 127.0) & 0xff) + +void guLookAtReflectF(float mf[4][4], LookAt *l, float xEye, float yEye, float zEye, float xAt, + float yAt, float zAt, float xUp, float yUp, float zUp) { + float len, xLook, yLook, zLook, xRight, yRight, zRight; + + guMtxIdentF(mf); + + xLook = xAt - xEye; + yLook = yAt - yEye; + zLook = zAt - zEye; + + /* Negate because positive Z is behind us: */ + len = -1.0 / sqrtf(xLook * xLook + yLook * yLook + zLook * zLook); + xLook *= len; + yLook *= len; + zLook *= len; + + /* Right = Up x Look */ + + xRight = yUp * zLook - zUp * yLook; + yRight = zUp * xLook - xUp * zLook; + zRight = xUp * yLook - yUp * xLook; + len = 1.0 / sqrtf(xRight * xRight + yRight * yRight + zRight * zRight); + xRight *= len; + yRight *= len; + zRight *= len; + + /* Up = Look x Right */ + + xUp = yLook * zRight - zLook * yRight; + yUp = zLook * xRight - xLook * zRight; + zUp = xLook * yRight - yLook * xRight; + len = 1.0 / sqrtf(xUp * xUp + yUp * yUp + zUp * zUp); + xUp *= len; + yUp *= len; + zUp *= len; + + /* reflectance vectors = Up and Right */ + + l->l[0].l.dir[0] = FTOFRAC8(xRight); + l->l[0].l.dir[1] = FTOFRAC8(yRight); + l->l[0].l.dir[2] = FTOFRAC8(zRight); + l->l[1].l.dir[0] = FTOFRAC8(xUp); + l->l[1].l.dir[1] = FTOFRAC8(yUp); + l->l[1].l.dir[2] = FTOFRAC8(zUp); + l->l[0].l.col[0] = 0x00; + l->l[0].l.col[1] = 0x00; + l->l[0].l.col[2] = 0x00; + l->l[0].l.pad1 = 0x00; + l->l[0].l.colc[0] = 0x00; + l->l[0].l.colc[1] = 0x00; + l->l[0].l.colc[2] = 0x00; + l->l[0].l.pad2 = 0x00; + l->l[1].l.col[0] = 0x00; + l->l[1].l.col[1] = 0x80; + l->l[1].l.col[2] = 0x00; + l->l[1].l.pad1 = 0x00; + l->l[1].l.colc[0] = 0x00; + l->l[1].l.colc[1] = 0x80; + l->l[1].l.colc[2] = 0x00; + l->l[1].l.pad2 = 0x00; + + mf[0][0] = xRight; + mf[1][0] = yRight; + mf[2][0] = zRight; + mf[3][0] = -(xEye * xRight + yEye * yRight + zEye * zRight); + + mf[0][1] = xUp; + mf[1][1] = yUp; + mf[2][1] = zUp; + mf[3][1] = -(xEye * xUp + yEye * yUp + zEye * zUp); + + mf[0][2] = xLook; + mf[1][2] = yLook; + mf[2][2] = zLook; + mf[3][2] = -(xEye * xLook + yEye * yLook + zEye * zLook); + + mf[0][3] = 0; + mf[1][3] = 0; + mf[2][3] = 0; + mf[3][3] = 1; +} + +void guLookAtReflect(Mtx *m, LookAt *l, float xEye, float yEye, float zEye, float xAt, float yAt, + float zAt, float xUp, float yUp, float zUp) { + float mf[4][4]; + + guLookAtReflectF(mf, l, xEye, yEye, zEye, xAt, yAt, zAt, xUp, yUp, zUp); + + guMtxF2L(mf, m); +} diff --git a/src/os/guMtxCatF.c b/src/os/guMtxCatF.c new file mode 100755 index 000000000..94e0d10f3 --- /dev/null +++ b/src/os/guMtxCatF.c @@ -0,0 +1,63 @@ + +/* + * Copyright 1995, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED + * + * UNPUBLISHED -- Rights reserved under the copyright laws of the United + * States. Use of a copyright notice is precautionary only and does not + * imply publication or disclosure. + * + * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to restrictions + * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or + * in similar or successor clauses in the FAR, or the DOD or NASA FAR + * Supplement. Contractor/manufacturer is Silicon Graphics, Inc., + * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311. + * + * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY + * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION, + * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY + * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON + * GRAPHICS, INC. + * + */ + +/* + * File: mtxcatf.c + * Creator: hsa@sgi.com + * Create Date: Thu Nov 2 13:03:02 PST 1995 + * + */ + +#include + +void guMtxCatF(float mf[4][4], float nf[4][4], float res[4][4]) +{ + int i, j, k; + float temp[4][4]; + + for (i=0; i<4; i++) { + for (j=0; j<4; j++) { + temp[i][j] = 0.0; + for (k=0; k<4; k++) { + temp[i][j] += mf[i][k] * nf[k][j]; + } + } + } + + /* make sure we handle case where result is an input */ + for (i=0; i<4; i++) { + for (j=0; j<4; j++) { + res[i][j] = temp[i][j]; + } + } +} + +void guMtxXFMF(float mf[4][4], float x, float y, float z, float *ox, float *oy, float *oz) +{ + *ox = mf[0][0]*x + mf[1][0]*y + mf[2][0]*z + mf[3][0]; + *oy = mf[0][1]*x + mf[1][1]*y + mf[2][1]*z + mf[3][1]; + *oz = mf[0][2]*x + mf[1][2]*y + mf[2][2]*z + mf[3][2]; +} + diff --git a/src/os/guMtxCatL.c b/src/os/guMtxCatL.c new file mode 100755 index 000000000..7903b18b1 --- /dev/null +++ b/src/os/guMtxCatL.c @@ -0,0 +1,55 @@ + +/* + * Copyright 1995, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED + * + * UNPUBLISHED -- Rights reserved under the copyright laws of the United + * States. Use of a copyright notice is precautionary only and does not + * imply publication or disclosure. + * + * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to restrictions + * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or + * in similar or successor clauses in the FAR, or the DOD or NASA FAR + * Supplement. Contractor/manufacturer is Silicon Graphics, Inc., + * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311. + * + * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY + * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION, + * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY + * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON + * GRAPHICS, INC. + * + */ + +/* + * File: mtxcatl.c + * Creator: hsa@sgi.com + * Create Date: Thu Nov 2 13:03:02 PST 1995 + * + */ + +#include "libultra_internal.h" +#include + +void guMtxXFMF(Mtx *, float, float, float, float *, float *, float *); + +void guMtxCatL(Mtx *m, Mtx *n, Mtx *res) { + float mf[4][4], nf[4][4], resf[4][4]; + + guMtxL2F(mf, m); + guMtxL2F(nf, n); + + guMtxCatF(mf, nf, resf); + + guMtxF2L(resf, res); +} + +void guMtxXFML(Mtx *m, float x, float y, float z, float *ox, float *oy, float *oz) { + float mf[4][4]; + + guMtxL2F(mf, m); + + guMtxXFMF(mf, x, y, z, ox, oy, oz); +} diff --git a/src/os/guMtxF2L.c b/src/os/guMtxF2L.c new file mode 100644 index 000000000..2b9d93592 --- /dev/null +++ b/src/os/guMtxF2L.c @@ -0,0 +1,70 @@ +#include "libultra_internal.h" +#ifdef GBI_FLOATS +#include +#endif + +#ifndef GBI_FLOATS +void guMtxF2L(float mf[4][4], Mtx *m) { + int r, c; + s32 tmp1; + s32 tmp2; + s32 *m1 = &m->m[0][0]; + s32 *m2 = &m->m[2][0]; + for (r = 0; r < 4; r++) { + for (c = 0; c < 2; c++) { + tmp1 = mf[r][2 * c] * 65536.0f; + tmp2 = mf[r][2 * c + 1] * 65536.0f; + *m1++ = (tmp1 & 0xffff0000) | ((tmp2 >> 0x10) & 0xffff); + *m2++ = ((tmp1 << 0x10) & 0xffff0000) | (tmp2 & 0xffff); + } + } +} + +void guMtxL2F(float mf[4][4], Mtx *m) { + int r, c; + u32 tmp1; + u32 tmp2; + u32 *m1; + u32 *m2; + s32 stmp1, stmp2; + m1 = (u32 *) &m->m[0][0]; + m2 = (u32 *) &m->m[2][0]; + for (r = 0; r < 4; r++) { + for (c = 0; c < 2; c++) { + tmp1 = (*m1 & 0xffff0000) | ((*m2 >> 0x10) & 0xffff); + tmp2 = ((*m1++ << 0x10) & 0xffff0000) | (*m2++ & 0xffff); + stmp1 = *(s32 *) &tmp1; + stmp2 = *(s32 *) &tmp2; + mf[r][c * 2 + 0] = stmp1 / 65536.0f; + mf[r][c * 2 + 1] = stmp2 / 65536.0f; + } + } +} +#else +void guMtxF2L(float mf[4][4], Mtx *m) { + memcpy(m, mf, sizeof(Mtx)); +} +#endif + +void guMtxIdentF(float mf[4][4]) { + int r, c; + for (r = 0; r < 4; r++) { + for (c = 0; c < 4; c++) { + if (r == c) { + mf[r][c] = 1.0f; + } else { + mf[r][c] = 0.0f; + } + } + } +} + +void guMtxIdent(Mtx *m) { +#ifndef GBI_FLOATS + float mf[4][4]; + guMtxIdentF(mf); + guMtxF2L(mf, m); +#else + guMtxIdentF(m->m); +#endif +} diff --git a/src/os/guNormalize.c b/src/os/guNormalize.c new file mode 100644 index 000000000..3ac2f00bd --- /dev/null +++ b/src/os/guNormalize.c @@ -0,0 +1,8 @@ +#include "libultra_internal.h" + +void guNormalize(f32 *x, f32 *y, f32 *z) { + f32 tmp = 1.0f / sqrtf(*x * *x + *y * *y + *z * *z); + *x = *x * tmp; + *y = *y * tmp; + *z = *z * tmp; +} diff --git a/src/os/guOrthoF.c b/src/os/guOrthoF.c new file mode 100644 index 000000000..bf15b06c4 --- /dev/null +++ b/src/os/guOrthoF.c @@ -0,0 +1,27 @@ +#include "libultra_internal.h" + +void guOrthoF(float m[4][4], float left, float right, float bottom, float top, float near, float far, + float scale) { + int row; + int col; + guMtxIdentF(m); + m[0][0] = 2 / (right - left); + m[1][1] = 2 / (top - bottom); + m[2][2] = -2 / (far - near); + m[3][0] = -(right + left) / (right - left); + m[3][1] = -(top + bottom) / (top - bottom); + m[3][2] = -(far + near) / (far - near); + m[3][3] = 1; + for (row = 0; row < 4; row++) { + for (col = 0; col < 4; col++) { + m[row][col] *= scale; + } + } +} + +void guOrtho(Mtx *m, float left, float right, float bottom, float top, float near, float far, + float scale) { + float sp28[4][4]; + guOrthoF(sp28, left, right, bottom, top, near, far, scale); + guMtxF2L(sp28, m); +} diff --git a/src/os/guPerspectiveF.c b/src/os/guPerspectiveF.c new file mode 100644 index 000000000..f56fbb8f6 --- /dev/null +++ b/src/os/guPerspectiveF.c @@ -0,0 +1,39 @@ +#include "libultra_internal.h" + +void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect, float near, float far, + float scale) { + float yscale; + int row; + int col; + guMtxIdentF(mf); + fovy *= GU_PI / 180.0; + yscale = cosf(fovy / 2) / sinf(fovy / 2); + mf[0][0] = yscale / aspect; + mf[1][1] = yscale; + mf[2][2] = (near + far) / (near - far); + mf[2][3] = -1; + mf[3][2] = 2 * near * far / (near - far); + mf[3][3] = 0.0f; + for (row = 0; row < 4; row++) { + for (col = 0; col < 4; col++) { + mf[row][col] *= scale; + } + } + if (perspNorm != NULL) { + if (near + far <= 2.0) { + *perspNorm = 65535; + } else { + *perspNorm = (double) (1 << 17) / (near + far); + if (*perspNorm <= 0) { + *perspNorm = 1; + } + } + } +} + +void guPerspective(Mtx *m, u16 *perspNorm, float fovy, float aspect, float near, float far, + float scale) { + float mat[4][4]; + guPerspectiveF(mat, perspNorm, fovy, aspect, near, far, scale); + guMtxF2L(mat, m); +} diff --git a/src/os/guRotateF.c b/src/os/guRotateF.c new file mode 100644 index 000000000..c71093aee --- /dev/null +++ b/src/os/guRotateF.c @@ -0,0 +1,42 @@ +#include "libultra_internal.h" + +void guRotateF(float m[4][4], float a, float x, float y, float z) { + float sin_a; + float cos_a; + float sp2c; + float sp28; + float sp24; + float xx, yy, zz; + static float D_80365D70 = GU_PI / 180; + + guNormalize(&x, &y, &z); + + a = a * D_80365D70; + + sin_a = sinf(a); + cos_a = cosf(a); + + sp2c = x * y * (1 - cos_a); + sp28 = y * z * (1 - cos_a); + sp24 = z * x * (1 - cos_a); + + guMtxIdentF(m); + xx = x * x; + m[0][0] = (1 - xx) * cos_a + xx; + m[2][1] = sp28 - x * sin_a; + m[1][2] = sp28 + x * sin_a; + yy = y * y; + m[1][1] = (1 - yy) * cos_a + yy; + m[2][0] = sp24 + y * sin_a; + m[0][2] = sp24 - y * sin_a; + zz = z * z; + m[2][2] = (1 - zz) * cos_a + zz; + m[1][0] = sp2c - z * sin_a; + m[0][1] = sp2c + z * sin_a; +} + +void guRotate(Mtx *m, float a, float x, float y, float z) { + float mf[4][4]; + guRotateF(mf, a, x, y, z); + guMtxF2L(mf, m); +} diff --git a/src/os/guScaleF.c b/src/os/guScaleF.c new file mode 100644 index 000000000..15de4c693 --- /dev/null +++ b/src/os/guScaleF.c @@ -0,0 +1,15 @@ +#include "libultra_internal.h" + +void guScaleF(float mf[4][4], float x, float y, float z) { + guMtxIdentF(mf); + mf[0][0] = x; + mf[1][1] = y; + mf[2][2] = z; + mf[3][3] = 1.0; +} + +void guScale(Mtx *m, float x, float y, float z) { + float mf[4][4]; + guScaleF(mf, x, y, z); + guMtxF2L(mf, m); +} diff --git a/src/os/guTranslateF.c b/src/os/guTranslateF.c new file mode 100644 index 000000000..179a6a7d1 --- /dev/null +++ b/src/os/guTranslateF.c @@ -0,0 +1,14 @@ +#include "libultra_internal.h" + +void guTranslateF(float m[4][4], float x, float y, float z) { + guMtxIdentF(m); + m[3][0] = x; + m[3][1] = y; + m[3][2] = z; +} + +void guTranslate(Mtx *m, float x, float y, float z) { + float mf[4][4]; + guTranslateF(mf, x, y, z); + guMtxF2L(mf, m); +} diff --git a/src/os/hardware.h b/src/os/hardware.h new file mode 100644 index 000000000..14848ca86 --- /dev/null +++ b/src/os/hardware.h @@ -0,0 +1,127 @@ +#ifndef _HARDWARE_H_ +#define _HARDWARE_H_ + +#define HW_REG(reg, type) *(volatile type *)(uintptr_t)(reg | 0xa0000000) + +#define AI_DRAM_ADDR_REG 0x04500000 +#define AI_LEN_REG 0x04500004 +#define AI_CONTROL_REG 0x04500008 +#define AI_STATUS_REG 0x0450000C +#define AI_STATUS_AI_FULL (1 << 31) +#define AI_STATUS_AI_BUSY (1 << 30) +#define AI_DACRATE_REG 0x04500010 +#define AI_BITRATE_REG 0x04500014 + +#define VI_STATUS_REG 0x04400000 +#define VI_CONTROL_REG 0x04400000 +#define VI_ORIGIN_REG 0x04400004 +#define VI_DRAM_ADDR_REG 0x04400004 +#define VI_WIDTH_REG 0x04400008 +#define VI_H_WIDTH_REG 0x04400008 +#define VI_INTR_REG 0x0440000C +#define VI_V_INTER_REG 0x0440000C +#define VI_CURRENT_REG 0x04400010 +#define VI_V_CURRENT_LINE_REG 0x04400010 +#define VI_BURST_REG 0x04400014 +#define VI_TIMING_REG 0x04400014 +#define VI_V_SYNC_REG 0x04400018 //VI vertical sync +#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync +#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap +#define VI_H_SYNC_LEAP_REG 0x04400020 +#define VI_H_START_REG 0x04400024 //VI horizontal video +#define VI_H_VIDEO_REG 0x04400024 +#define VI_V_START_REG 0x04400028 //VI vertical video +#define VI_V_VIDEO_REG 0x04400028 +#define VI_V_BURST_REG 0x0440002C //VI vertical burst +#define VI_X_SCALE_REG 0x04400030 //VI x-scale +#define VI_Y_SCALE_REG 0x04400034 //VI y-scale + +#define SP_IMEM_START 0x04001000 +#define SP_DMEM_START 0x04000000 + +#define SP_MEM_ADDR_REG 0x04040000 +#define SP_DRAM_ADDR_REG 0x04040004 +#define SP_RD_LEN_REG 0x04040008 +#define SP_WR_LEN_REG 0x0404000C +#define SP_STATUS_REG 0x04040010 +#define SP_PC_REG 0x04080000 + +#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address +#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address +#define PI_RD_LEN_REG 0x04600008 //PI read length +#define PI_WR_LEN_REG 0x0460000C //PI write length +#define PI_STATUS_REG 0x04600010 //PI status +#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency +#define PI_DOMAIN1_REG 0x04600014 +#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width +#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size +#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release +#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency +#define PI_DOMAIN2_REG 0x04600024 +#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width +#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size +#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release + +#define PI_STATUS_BUSY 0x1 +#define PI_STATUS_IOBUSY 0x2 +#define PI_STATUS_ERROR 0x3 + +#define PI_STATUS_RESET_CONTROLLER 0x1 +#define PI_STATUS_CLEAR_INTR 0x2 + +#define SI_DRAM_ADDR_REG 0x04800000 +#define SI_PIF_ADDR_RD64B_REG 0x04800004 +#define SI_PIF_ADDR_WR64B_REG 0x04800010 +#define SI_STATUS_REG 0x04800018 + +#define SI_STATUS_DMA_BUSY 0x1 +#define SI_STATUS_IO_READ_BUSY 0x2 +#define SI_STATUS_DMA_ERROR 0x8 +#define SI_STATUS_INTERRUPT (1 << 12) + +#define MI_INIT_MODE_REG 0x04300000 +#define MI_MODE_REG MI_INIT_MODE_REG +#define MI_VERSION_REG 0x04300004 +#define MI_INTR_REG 0x04300008 +#define MI_INTR_MASK_REG 0x0430000C + +//https://github.com/LuigiBlood/64dd/wiki/Registers +#define ASIC_STATUS 0x05000508 + +#define DATA_REQUEST 0x40000000 +#define C2_TRANSFER 0x10000000 +#define BUFFER_MANAGER_ERROR 0x08000000 +#define BUFFER_MANAGER_INTERRUPT 0x04000000 +#define MECHANIC_INTERRUPT 0x02000000 +#define DISK_PRESENT 0x01000000 +#define BUSY_STATE 0x00800000 +#define RESET_STATE 0x00400000 +#define MOTOR_NOT_SPINNING 0x00100000 +#define HEAD_RETRACTED 0x00080000 +#define WRITE_PROTECT_ERROR 0x00040000 +#define MECHANIC_ERROR 0x00020000 +#define DISK_CHANGE 0x00010000 + +#define _64DD_PRESENT_MASK 0xFFFF + + +//ro +#define ASIC_BM_STATUS 0x05000510 + +#define MICRO_STATUS 0x02000000 +#define C1_DOUBLE 0x00400000 +#define C1_SINGLE 0x00200000 + +//wo +#define ASIC_BM_CTL 0x05000510 +#define BUFFER_MANAGER_RESET 0x10000000 +#define MECHANIC_INTERRUPT_RESET 0x01000000 +/*- Start Buffer Manager (0x80000000) +- Buffer Manager Mode (0x40000000) +- BM Interrupt Mask (0x20000000) +- Buffer Manager Reset (0x10000000) +- Disable OR Check? (0x08000000) +- Disable C1 Correction (0x04000000) +- Block Transfer (0x02000000) +- Mechanic Interrupt Reset (0x01000000)*/ +#endif diff --git a/src/os/ldiv.c b/src/os/ldiv.c new file mode 100644 index 000000000..01b04be2e --- /dev/null +++ b/src/os/ldiv.c @@ -0,0 +1,28 @@ +#include "libultra_internal.h" +#include + +lldiv_t lldiv(long long num, long long denom) { + lldiv_t ret; + + ret.quot = num / denom; + ret.rem = num - denom * ret.quot; + if (ret.quot < 0 && ret.rem > 0) { + ret.quot++; + ret.rem -= denom; + } + + return ret; +} + +ldiv_t ldiv(long num, long denom) { + ldiv_t ret; + + ret.quot = num / denom; + ret.rem = num - denom * ret.quot; + if (ret.quot < 0 && ret.rem > 0) { + ret.quot++; + ret.rem -= denom; + } + + return ret; +} diff --git a/src/os/libaudio_internal.h b/src/os/libaudio_internal.h new file mode 100644 index 000000000..ea63322c1 --- /dev/null +++ b/src/os/libaudio_internal.h @@ -0,0 +1,127 @@ +#ifndef _LIBAUDIO_INTERNAL_H_ +#define _LIBAUDIO_INTERNAL_H_ +#include +#define AL_BANK_VERSION 0x4231 /* 'B1' */ + +typedef u8 ALPan; +typedef s32 ALMicroTime; + +/* Possible wavetable types */ +enum +{ + AL_ADPCM_WAVE = 0, + AL_RAW16_WAVE +}; + +typedef struct +{ + u32 start; + u32 end; + u32 count; +} ALRawLoop; + +typedef struct +{ + u32 start; + u32 end; + u32 count; + ADPCM_STATE state; +} ALADPCMloop; + +typedef struct +{ + s32 order; + s32 npredictors; + s16 book[1]; // variable size, 8-byte aligned +} ALADPCMBook; + +typedef struct +{ + ALMicroTime attackTime; + ALMicroTime decayTime; + ALMicroTime releaseTime; + u8 attackVolume; + u8 decayVolume; +} ALEnvelope; + +typedef struct +{ + u8 velocityMin; + u8 velocityMax; + u8 keyMin; + u8 keyMax; + u8 keyBase; + s8 detune; +} ALKeyMap; + +typedef struct +{ + ALADPCMloop *loop; + ALADPCMBook *book; +} ALADPCMWaveInfo; + +typedef struct +{ + ALRawLoop *loop; +} ALRAWWaveInfo; + +typedef struct ALWaveTable_s +{ + u8 *base; /* ptr to start of wave data */ + s32 len; /* length of data in bytes */ + u8 type; /* compression type */ + u8 flags; /* offset/address flags */ + union { + ALADPCMWaveInfo adpcmWave; + ALRAWWaveInfo rawWave; + } waveInfo; +} ALWaveTable; + +typedef struct ALSound_s +{ + ALEnvelope *envelope; + ALKeyMap *keyMap; + ALWaveTable *wavetable; /* offset to wavetable struct */ + ALPan samplePan; + u8 sampleVolume; + u8 flags; +} ALSound; + +typedef struct +{ + u8 volume; /* overall volume for this instrument */ + ALPan pan; /* 0 = hard left, 127 = hard right */ + u8 priority; /* voice priority for this instrument */ + u8 flags; + u8 tremType; /* the type of tremelo osc. to use */ + u8 tremRate; /* the rate of the tremelo osc. */ + u8 tremDepth; /* the depth of the tremelo osc */ + u8 tremDelay; /* the delay for the tremelo osc */ + u8 vibType; /* the type of tremelo osc. to use */ + u8 vibRate; /* the rate of the tremelo osc. */ + u8 vibDepth; /* the depth of the tremelo osc */ + u8 vibDelay; /* the delay for the tremelo osc */ + s16 bendRange; /* pitch bend range in cents */ + s16 soundCount; /* number of sounds in this array */ + ALSound *soundArray[1]; +} ALInstrument; + +typedef struct ALBank_s +{ + s16 instCount; /* number of programs in this bank */ + u8 flags; + u8 pad; + s32 sampleRate; /* e.g. 44100, 22050, etc... */ + ALInstrument *percussion; /* default percussion for GM */ + ALInstrument *instArray[1]; /* ARRAY of instruments */ +} ALBank; + +typedef struct +{ /* Note: sizeof won't be correct */ + s16 revision; /* format revision of this file */ + s16 bankCount; /* number of banks */ + ALBank *bankArray[1]; /* ARRAY of bank offsets */ +} ALBankFile; + +void alBnkfNew(ALBankFile *f, u8 *table); +#endif diff --git a/src/os/libultra_internal.h b/src/os/libultra_internal.h new file mode 100644 index 000000000..19ec7d934 --- /dev/null +++ b/src/os/libultra_internal.h @@ -0,0 +1,70 @@ +#ifndef _LIBULTRA_INTERNAL_H_ +#define _LIBULTRA_INTERNAL_H_ +#include +#include "macros.h" + +/* + * This define is needed because the original definitions in __osDequeueThread.c are declared + * seperately instead of part of a single struct, however some code alises over this memory + * assuming a unified structure. To fix this, we declare the full type here and then alias the + * symbol names to the correct members in AVOID_UB. + */ + +// Original OSThread_ListHead definitions +extern OSThread *D_800EB3A0; +extern OSThread *__osActiveQueue; +extern OSThread *__osRunQueue; +extern OSThread *__osRunningThread; + + +// Original EEPROM definitions +extern ALIGNED8 u32 D_80365E00[15]; +extern u32 D_80365E3C; + +typedef struct { + u32 initialized; // probably something like initialized? + OSThread *mgrThread; + OSMesgQueue *cmdQueue; + OSMesgQueue *eventQueue; + OSMesgQueue *accessQueue; + s32 (*dma_func)(s32, u32, void *, size_t); + s32 (*edma_func)(OSPiHandle*, s32, u32, void *, size_t); +} OSMgrArgs; + +s32 __osDisableInt(void); +void __osRestoreInt(s32); +void __osEnqueueAndYield(OSThread **); +void __osDequeueThread(OSThread **, OSThread *); +void __osEnqueueThread(OSThread **, OSThread *); +OSThread *__osPopThread(OSThread **); +s32 __osSiRawStartDma(s32, void *); +void __osSiCreateAccessQueue(void); +void __osSiGetAccess(void); +void __osSiRelAccess(void); +u32 __osProbeTLB(void *); +void __osPiCreateAccessQueue(void); +void __osPiGetAccess(void); +void __osSetSR(u32); +u32 __osGetSR(void); +void __osSetFpcCsr(u32); +s32 __osSiRawReadIo(void *, u32 *); +s32 __osSiRawWriteIo(void *, u32); +s32 osPiRawReadIo(u32 a0, u32 *a1); +void __osSpSetStatus(u32); +u32 __osSpGetStatus(void); +s32 __osSpSetPc(void *); +s32 __osSpDeviceBusy(void); +s32 __osSiDeviceBusy(void); +s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size); +void __osViInit(void); +OSViContext *__osViGetCurrentContext(void); +OSViContext *__osViGetCurrentContext2(void); +void __osViSwapContext(void); +void __osSetTimerIntr(u64); +u64 __osInsertTimer(OSTimer *); +void __osSetCompare(u32); +s32 __osAiDeviceBusy(void); +void __osDispatchThread(void); +u32 __osGetCause(void); +s32 __osAtomicDec(u32 *); +#endif diff --git a/src/os/math/cosf.c b/src/os/math/cosf.c new file mode 100644 index 000000000..2b01c12a5 --- /dev/null +++ b/src/os/math/cosf.c @@ -0,0 +1,94 @@ + +// These unions are necessary to put the constants in .rodata rather than .data. +// TODO: is it possible to remove them somehow? + +typedef union { + /* 0x0 */ double d; + /* 0x0 */ struct + { + /* 0x0 */ unsigned int hi; + /* 0x4 */ unsigned int lo; + } word; +} du; + +typedef union { + /* 0x0 */ float f; + /* 0x0 */ unsigned int i; +} fu; + +static const du P[5] = {{1.0}, + {-0.16666659550427756}, + {0.008333066246082155}, + {-1.980960290193795E-4}, + {2.605780637968037E-6}}; + +static const du rpi = {0.3183098861837907}; + +static const du pihi = { + 3.1415926218032837}; + +static const du pilo = { + 3.178650954705639E-8}; + +static const fu zero = {0.0}; +extern const fu NAN; + +float cosf(float x) +{ + double dx; // double x + double xsq; // x squared + double poly; + double dn; + float xabs; + int n; + double result; + int ix; // int x + int xpt; + ix = *(int *)&x; + xpt = (ix >> 22) & 0x1FF; + + if (xpt < 310) + { + if (0 < x) + xabs = x; + else + xabs = -x; + dx = xabs; + + dn = dx * rpi.d + .5; + if (0 <= dn) + { + + n = dn + .5; + } + else + { + n = dn - .5; + } + dn = n; + + dx -= (dn - .5) * pihi.d; + dx -= (dn - .5) * pilo.d; + xsq = dx * dx; + + poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; + + result = ((dx * xsq) * poly) + dx; + + if ((n & 0x1) == 0) + { + return result; + } + else + { + return -(float)result; + } + } + + if (x != x) + { + return NAN.f; + } + + return zero.f; +} diff --git a/src/os/math/llconv.c b/src/os/math/llconv.c new file mode 100644 index 000000000..3cf941c14 --- /dev/null +++ b/src/os/math/llconv.c @@ -0,0 +1,34 @@ +typedef signed long long int s64; +typedef unsigned long long int u64; +s64 __d_to_ll(double d) +{ + return d; +} +s64 __f_to_ll(float f) +{ + return f; +} +u64 __d_to_ull(double d) +{ + return d; +} +u64 __f_to_ull(float f) +{ + return f; +} +double __ll_to_d(s64 s) +{ + return s; +} +float __ll_to_f(s64 s) +{ + return s; +} +double __ull_to_d(u64 u) +{ + return u; +} +float __ull_to_f(u64 u) +{ + return u; +} diff --git a/src/os/math/llmuldiv.c b/src/os/math/llmuldiv.c new file mode 100644 index 000000000..e64b9d0c8 --- /dev/null +++ b/src/os/math/llmuldiv.c @@ -0,0 +1,53 @@ +unsigned long long __ull_rshift(unsigned long long a0, unsigned long long a1) +{ + return a0 >> a1; +} +unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1) +{ + return a0 % a1; +} +unsigned long long __ull_div(unsigned long long a0, unsigned long long a1) +{ + return a0 / a1; +} + +unsigned long long __ll_lshift(unsigned long long a0, unsigned long long a1) +{ + return a0 << a1; +} + +long long __ll_rem(unsigned long long a0, long long a1) +{ + return a0 % a1; +} + +long long __ll_div(long long a0, long long a1) +{ + return a0 / a1; +} + +unsigned long long __ll_mul(unsigned long long a0, unsigned long long a1) +{ + return a0 * a1; +} + +void __ull_divremi(unsigned long long *div, unsigned long long *rem, unsigned long long a2, unsigned short a3) +{ + *div = a2 / a3; + *rem = a2 % a3; +} +long long __ll_mod(long long a0, long long a1) +{ + long long tmp = a0 % a1; + if ((tmp < 0 && a1 > 0) || (tmp > 0 && a1 < 0)) + { + + tmp += a1; + } + return tmp; +} + +long long __ll_rshift(long long a0, long long a1) +{ + return a0 >> a1; +} diff --git a/src/os/math/sinf.c b/src/os/math/sinf.c new file mode 100644 index 000000000..bdc83168e --- /dev/null +++ b/src/os/math/sinf.c @@ -0,0 +1,111 @@ + +// These unions are necessary to put the constants in .rodata rather than .data. +// TODO: is it possible to remove them somehow? + +typedef union { + /* 0x0 */ double d; + /* 0x0 */ struct + { + /* 0x0 */ unsigned int hi; + /* 0x4 */ unsigned int lo; + } word; +} du; + +typedef union { + /* 0x0 */ float f; + /* 0x0 */ unsigned int i; +} fu; + +static const du P[5] = {{1.0}, + {-0.16666659550427756}, + {0.008333066246082155}, + {-1.980960290193795E-4}, + {2.605780637968037E-6}}; + +static const du rpi = {0.3183098861837907}; + +static const du pihi = { + 3.1415926218032837}; + +static const du pilo = { + 3.178650954705639E-8}; + +static const fu zero = {0.0}; +extern const fu NAN; + +float sinf(float x) +{ + double dx; // double x + double xsq; // x squared + double poly; + double dn; + int n; + double result; + int ix; // int x + int xpt; + + ix = *(int *)&x; + xpt = (ix >> 22) & 0x1FF; + + if (xpt < 255) + { + dx = x; + if (xpt >= 230) + { + xsq = dx * dx; + + poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; + + result = ((dx * xsq) * poly) + dx; + + return result; + } + else + { + return x; + } + } + + if (xpt < 310) + { + dx = x; + + dn = dx * rpi.d; + + if (dn >= 0) + { + n = dn + 0.5; + } + else + { + n = dn - 0.5; + } + + dn = n; + + dx -= dn * pihi.d; + dx -= dn * pilo.d; + + xsq = dx * dx; + + poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; + + result = ((dx * xsq) * poly) + dx; + + if ((n & 0x1) == 0) + { + return result; + } + else + { + return -(float)result; + } + } + + if (x != x) + { + return NAN.f; + } + + return zero.f; +} diff --git a/src/os/new_func.h b/src/os/new_func.h new file mode 100644 index 000000000..f966f6d31 --- /dev/null +++ b/src/os/new_func.h @@ -0,0 +1,28 @@ +#ifndef NEW_FUNC_H +#define NEW_FUNC_H + +#include "libultra_internal.h" +#include "hardware.h" + +#define WAIT_ON_IOBUSY(var) \ + var = HW_REG(PI_STATUS_REG, u32); \ + while (var & PI_STATUS_IOBUSY) \ + var = HW_REG(PI_STATUS_REG, u32); + +extern u32 EU_D_80302090; + +extern OSPiHandle *__osDiskHandle; //possibly __osPiTable + +extern volatile u32 __OSGlobalIntMask; +s32 osEPiRawStartDma(OSPiHandle *arg0, s32 dir, u32 cart_addr, void *dram_addr, u32 size); +void func_802F4B08(void); +void func_802F4A20(void); +void __osResetGlobalIntMask(u32 mask); +void __osEPiRawWriteIo(OSPiHandle*, u32, u32); +void func_802F71F0(void); +#ifdef VERSION_SH +void __osSetGlobalIntMask(s32 arg0); +s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *arg2); +#endif + +#endif diff --git a/src/os/osAi.h b/src/os/osAi.h new file mode 100644 index 000000000..276fa071a --- /dev/null +++ b/src/os/osAi.h @@ -0,0 +1,7 @@ +#ifndef _OSAI_H_ +#define _OSAI_H_ + +s32 osAiSetFrequency(u32); +s32 osAiSetNextBuffer(void *, u32); +u32 osAiGetLength(void); +#endif diff --git a/src/os/osAiGetLength.c b/src/os/osAiGetLength.c new file mode 100644 index 000000000..08458a7ab --- /dev/null +++ b/src/os/osAiGetLength.c @@ -0,0 +1,7 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +u32 osAiGetLength() { + return HW_REG(AI_LEN_REG, u32); +} diff --git a/src/os/osAiSetFrequency.c b/src/os/osAiSetFrequency.c new file mode 100644 index 000000000..49bc29813 --- /dev/null +++ b/src/os/osAiSetFrequency.c @@ -0,0 +1,28 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +extern s32 osViClock; + +s32 osAiSetFrequency(u32 freq) { + register u32 a1; + register s32 a2; + register float ftmp; + ftmp = osViClock / (float) freq + .5f; + + a1 = ftmp; + + if (a1 < 0x84) { + return -1; + } + + a2 = (a1 / 66) & 0xff; + if (a2 > 16) { + a2 = 16; + } + + HW_REG(AI_DACRATE_REG, u32) = a1 - 1; + HW_REG(AI_BITRATE_REG, u32) = a2 - 1; + HW_REG(AI_CONTROL_REG, u32) = 1; // enable dma + return osViClock / (s32) a1; +} diff --git a/src/os/osAiSetNextBuffer.c b/src/os/osAiSetNextBuffer.c new file mode 100644 index 000000000..155df560c --- /dev/null +++ b/src/os/osAiSetNextBuffer.c @@ -0,0 +1,41 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +// hdwrBugFlag on libreultra +extern u8 D_800EB370; // = 0; + +/** + * It is worth noting that a previous hardware bug has been fixed by a software + * patch in osAiSetNextBuffer. This bug occurred when the address of the end of the + * buffer specified by osAiSetNextBuffer was at a specific value. This value + * occurred when the following was true: + * + * (vaddr + nbytes) & 0x00003FFF == 0x00002000 + * + * (when the buffer ends with address of lower 14 bits 0x2000) In this case, the + * DMA transfer does not complete successfully. This can cause clicks and pops in + * the audio output. This bug no longer requires special handling by the application + * because it is now patched by osAiSetNextBuffer. + */ + +s32 osAiSetNextBuffer(void *buff, u32 len) { + u8 *sp1c = buff; + if (D_800EB370 != 0) { + sp1c -= 0x2000; + } + + if ((((uintptr_t) buff + len) & 0x3fff) == 0x2000) { + D_800EB370 = 1; + } else { + D_800EB370 = 0; + } + + if (__osAiDeviceBusy()) { + return -1; + } + + HW_REG(AI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(sp1c); + HW_REG(AI_LEN_REG, u32) = len; + return 0; +} diff --git a/src/os/osCartRomInit.c b/src/os/osCartRomInit.c new file mode 100644 index 000000000..b1b6599c7 --- /dev/null +++ b/src/os/osCartRomInit.c @@ -0,0 +1,40 @@ +#include "libultra_internal.h" + +#include "PR/os_vi.h" +#include "PR/os_internal.h" +#include "PR/R4300.h" +#include "PR/rcp.h" +#include "PR/os_pi.h" +#include "PR/os.h" + +OSPiHandle CartRomHandle; + +OSPiHandle *osCartRomInit(void) { + u32 domain; + u32 saveMask; + + domain = 0; + + if (CartRomHandle.baseAddress == PHYS_TO_K1(PI_DOM1_ADDR2)) { + return &CartRomHandle; + } + + CartRomHandle.type = DEVICE_TYPE_CART; + CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2); + osPiRawReadIo(0, &domain); + CartRomHandle.latency = domain & 0xff; + CartRomHandle.pulse = (domain >> 8) & 0xff; + CartRomHandle.pageSize = (domain >> 0x10) & 0xf; + CartRomHandle.relDuration = (domain >> 0x14) & 0xf; + CartRomHandle.domain = PI_DOMAIN1; + //CartRomHandle.speed = 0; + + bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); + + saveMask = __osDisableInt(); + CartRomHandle.next = __osPiTable; + __osPiTable = &CartRomHandle; + __osRestoreInt(saveMask); + + return &CartRomHandle; +} diff --git a/src/os/osContInit.c b/src/os/osContInit.c new file mode 100644 index 000000000..20c478db2 --- /dev/null +++ b/src/os/osContInit.c @@ -0,0 +1,99 @@ +#include "libultra_internal.h" +#include "osContInternal.h" + +void __osPackRequestData(u8); +void __osContGetInitData(u8 *, OSContStatus *); + +u32 _osContInitialized = 0; + +extern u64 osClockRate; + +// these probably belong in EEPROMlongread or something +u8 _osLastSentSiCmd; +u8 _osContNumControllers; +OSTimer D_80365D28; +OSMesgQueue _osContMesgQueue; +OSMesg _osContMesgBuff[4]; +s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status) { + OSMesg mesg; + u32 ret = 0; + OSTime currentTime; + OSTimer timer; + OSMesgQueue timerMesgQueue; + + if (_osContInitialized) { + return 0; + } + _osContInitialized = 1; + currentTime = osGetTime(); + if (500000 * osClockRate / 1000000 > currentTime) { + osCreateMesgQueue(&timerMesgQueue, &mesg, 1); + osSetTimer(&timer, 500000 * osClockRate / 1000000 - currentTime, 0, &timerMesgQueue, &mesg); + osRecvMesg(&timerMesgQueue, &mesg, OS_MESG_BLOCK); + } + _osContNumControllers = 4; // TODO: figure out what it means +#if defined(VERSION_EU) || defined(VERSION_SH) + __osPackRequestData(0); +#else + __osPackRequestData(255); +#endif + ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + osRecvMesg(mq, &mesg, OS_MESG_BLOCK); + ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); + osRecvMesg(mq, &mesg, OS_MESG_BLOCK); + __osContGetInitData(bitpattern, status); +#if defined(VERSION_EU) || defined(VERSION_SH) + _osLastSentSiCmd = 0; +#else + _osLastSentSiCmd = 255; +#endif + __osSiCreateAccessQueue(); + osCreateMesgQueue(&_osContMesgQueue, _osContMesgBuff, 1); + return ret; +} +void __osContGetInitData(u8 *bitpattern, OSContStatus *status) { + OSContPackedRequest *cmdBufPtr; + OSContPackedRequest response; + s32 i; + u8 sp7; + + sp7 = 0; + cmdBufPtr = &(_osContCmdBuf[0].request); + for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, status++) { + response = *(OSContPackedRequest *) cmdBufPtr; + status->errno = (response.rxLen & 0xc0) >> 4; + if (status->errno == 0) { + status->type = response.data2 << 8 | response.data1; + status->status = response.data3; + + sp7 |= 1 << i; + } + } + *bitpattern = sp7; +} +void __osPackRequestData(u8 command) { + OSContPackedRequest *cmdBufPtr; + OSContPackedRequest request; + s32 i; + + // some kind of weird zeroing code + for (i = 0; i < 0x10; i++) { + *((u32 *) &_osContCmdBuf + i) = 0; + } + + _osContPifCtrl = 1; + cmdBufPtr = &_osContCmdBuf[0].request; + request.padOrEnd = 255; + request.txLen = 1; + request.rxLen = 3; + request.command = command; + request.data1 = 255; + request.data2 = 255; + request.data3 = 255; + request.data4 = 255; + + for (i = 0; i < _osContNumControllers; i++) { + *cmdBufPtr++ = request; + } + cmdBufPtr->padOrEnd = 254; +} diff --git a/src/os/osContInternal.h b/src/os/osContInternal.h new file mode 100644 index 000000000..0f628205b --- /dev/null +++ b/src/os/osContInternal.h @@ -0,0 +1,47 @@ +#ifndef _ULTRA64_CONTROLLER_INTERNAL_H_ +#define _ULTRA64_CONTROLLER_INTERNAL_H_ + +#include + +typedef struct +{ + u8 padOrEnd; + u8 txLen; + u8 rxLen; //includes errno + u8 command; + u16 button; + s8 rawStickX; + s8 rawStickY; +} OSContPackedRead; + +typedef struct +{ + u8 padOrEnd; + u8 txLen; + u8 rxLen; + u8 command; + u8 data1; + u8 data2; + u8 data3; + u8 data4; +} OSContPackedRequest; + +typedef union { + OSContPackedRead read; + OSContPackedRequest request; + u32 as_raw[2]; +} OSContPackedStruct; + +#ifdef AVOID_UB +// Fix the OSContPackedStruct array +extern OSContPackedStruct _osContCmdBuf[8]; + +// And fix the last element +#define _osContPifCtrl _osContCmdBuf[7].as_raw[1] +#else +// Original OSContPackedStruct definitions +extern OSContPackedStruct _osContCmdBuf[7]; +extern u32 _osContPifCtrl; +#endif + +#endif diff --git a/src/os/osContStartReadData.c b/src/os/osContStartReadData.c new file mode 100644 index 000000000..3e72796c7 --- /dev/null +++ b/src/os/osContStartReadData.c @@ -0,0 +1,73 @@ +#include "libultra_internal.h" +#include "osContInternal.h" +#include + +#ifndef AVOID_UB +extern ALIGNED8 OSContPackedStruct _osContCmdBuf[7]; +UNUSED static u32 unused; // padding between these two variables +extern u32 _osContPifCtrl; +#else +// Reordered gcc vars above will disturb the aliasing done to access all 8 members of this array, hence AVOID_UB. +ALIGNED8 OSContPackedStruct _osContCmdBuf[8]; +#endif + +extern u8 _osLastSentSiCmd; +extern u8 _osContNumControllers; + +void __osPackReadData(void); +s32 osContStartReadData(OSMesgQueue *mesg) { + s32 ret = 0; + s32 i; + __osSiGetAccess(); + if (_osLastSentSiCmd != 1) { + __osPackReadData(); + ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + osRecvMesg(mesg, NULL, OS_MESG_BLOCK); + } + for (i = 0; i < 0x10; i++) { + *((u32 *) &_osContCmdBuf + i) = 255; + } + + _osContPifCtrl = 0; + ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); + _osLastSentSiCmd = 1; + __osSiRelAccess(); + return ret; +} +void osContGetReadData(OSContPad *pad) { + OSContPackedRead *cmdBufPtr; + OSContPackedRead response; + s32 i; + cmdBufPtr = &_osContCmdBuf[0].read; + for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, pad++) { + response = *cmdBufPtr; + pad->errno = (response.rxLen & 0xc0) >> 4; + if (pad->errno == 0) { + pad->button = response.button; + pad->stick_x = response.rawStickX; + pad->stick_y = response.rawStickY; + } + }; +} +void __osPackReadData() { + OSContPackedRead *cmdBufPtr; + OSContPackedRead request; + s32 i; + cmdBufPtr = &_osContCmdBuf[0].read; + for (i = 0; i < 0x10; i++) { + *((u32 *) &_osContCmdBuf + i) = 0; + } + + _osContPifCtrl = 1; + request.padOrEnd = 255; + request.txLen = 1; + request.rxLen = 4; + request.command = 1; + request.button = 65535; + request.rawStickX = -1; + request.rawStickY = -1; + for (i = 0; i < _osContNumControllers; i++) { + *cmdBufPtr++ = request; + } + cmdBufPtr->padOrEnd = 254; +} diff --git a/src/os/osCreateMesgQueue.c b/src/os/osCreateMesgQueue.c new file mode 100644 index 000000000..93e4f058c --- /dev/null +++ b/src/os/osCreateMesgQueue.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count) { + mq->mtqueue = (OSThread *) &D_800EB3A0; //? + mq->fullqueue = (OSThread *) &D_800EB3A0; + mq->validCount = 0; + mq->first = 0; + mq->msgCount = count; + mq->msg = msgBuf; + return; +} diff --git a/src/os/osCreatePiManager.c b/src/os/osCreatePiManager.c new file mode 100644 index 000000000..7e182b748 --- /dev/null +++ b/src/os/osCreatePiManager.c @@ -0,0 +1,61 @@ +#include "libultra_internal.h" + +#define OS_PI_MGR_MESG_BUFF_SIZE 1 + +#ifdef VERSION_SH // TODO: In libreultra this is in an include +extern OSPiHandle *CartRomHandle; +extern OSPiHandle *LeoDiskHandle; +#endif + +OSMgrArgs __osPiDevMgr = { 0 }; +#if defined(VERSION_EU) || defined(VERSION_SH) +OSPiHandle *__osPiTable = NULL; +#endif +#ifdef VERSION_SH +OSPiHandle *__osCurrentHandle[2] = { &CartRomHandle, &LeoDiskHandle }; +#endif +OSThread piMgrThread; +u32 piMgrStack[0x400]; // stack bottom +OSMesgQueue __osPiMesgQueue; +OSMesg piMgrMesgBuff[OS_PI_MGR_MESG_BUFF_SIZE + 1]; + +extern u32 gOsPiAccessQueueCreated; +extern OSMesgQueue gOsPiMessageQueue; +void __osDevMgrMain(void *); + +void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt) { + u32 int_disabled; + OSPri newPri; + OSPri currentPri; + + if (!__osPiDevMgr.initialized) { + osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); + osCreateMesgQueue(&__osPiMesgQueue, &piMgrMesgBuff[0], OS_PI_MGR_MESG_BUFF_SIZE); + if (!gOsPiAccessQueueCreated) { + __osPiCreateAccessQueue(); + } // what is this constant geez + osSetEventMesg(OS_EVENT_PI, &__osPiMesgQueue, (void *) 0x22222222); + newPri = -1; + currentPri = osGetThreadPri(NULL); + if (currentPri < pri) { + newPri = currentPri; + osSetThreadPri(NULL, pri); + } + int_disabled = __osDisableInt(); + __osPiDevMgr.initialized = TRUE; + __osPiDevMgr.mgrThread = &piMgrThread; + __osPiDevMgr.cmdQueue = cmdQ; + __osPiDevMgr.eventQueue = &__osPiMesgQueue; + __osPiDevMgr.accessQueue = &gOsPiMessageQueue; + __osPiDevMgr.dma_func = osPiRawStartDma; +#if defined(VERSION_EU) || defined(VERSION_SH) + __osPiDevMgr.edma_func = osEPiRawStartDma; +#endif + osCreateThread(&piMgrThread, 0, __osDevMgrMain, (void *) &__osPiDevMgr, &piMgrStack[0x400], pri); + osStartThread(&piMgrThread); + __osRestoreInt(int_disabled); + if (newPri != -1) { + osSetThreadPri(NULL, newPri); + } + } +} diff --git a/src/os/osCreateThread.c b/src/os/osCreateThread.c new file mode 100644 index 000000000..d714a8eba --- /dev/null +++ b/src/os/osCreateThread.c @@ -0,0 +1,36 @@ +#include "libultra_internal.h" + +void __osCleanupThread(void); +extern OSThread *__osActiveQueue; + + +// Don't warn about pointer->u64 cast +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpointer-to-int-cast" + +void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri pri) { + register u32 int_disabled; + u32 tmp; + thread->id = id; + thread->priority = pri; + thread->next = NULL; + thread->queue = NULL; + thread->context.pc = (u32) entry; + thread->context.a0 = (u64) arg; + thread->context.sp = (u64) sp - 16; + thread->context.ra = (u64) __osCleanupThread; + tmp = OS_IM_ALL; + thread->context.sr = 65283; + thread->context.rcp = (tmp & 0x3f0000) >> 16; + thread->context.fpcsr = (u32) 0x01000800; + thread->fp = 0; + thread->state = OS_STATE_STOPPED; + thread->flags = 0; + int_disabled = __osDisableInt(); + thread->tlnext = __osActiveQueue; + + __osActiveQueue = thread; + __osRestoreInt(int_disabled); +} + +#pragma GCC diagnostic pop diff --git a/src/os/osCreateViManager.c b/src/os/osCreateViManager.c new file mode 100644 index 000000000..e44f47777 --- /dev/null +++ b/src/os/osCreateViManager.c @@ -0,0 +1,110 @@ +#include "libultra_internal.h" + +#define OS_VI_MANAGER_MESSAGE_BUFF_SIZE 5 + +OSMgrArgs viMgrMainArgs = { 0 }; +static OSThread viMgrThread; +static u32 viMgrStack[0x400]; // stack bottom +static OSMesgQueue __osViMesgQueue; +static OSMesg viMgrMesgBuff[OS_VI_MANAGER_MESSAGE_BUFF_SIZE]; + +static OSIoMesg viEventViMesg; +static OSIoMesg viEventCounterMesg; + +extern void __osTimerServicesInit(void); +extern void __osTimerInterrupt(void); +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 D_80365DA8; +extern u32 __osViIntrCount; +void viMgrMain(void *); + +void osCreateViManager(OSPri pri) { + u32 int_disabled; + OSPri newPri; + OSPri currentPri; + if (!viMgrMainArgs.initialized) { + __osTimerServicesInit(); + osCreateMesgQueue(&__osViMesgQueue, &viMgrMesgBuff[0], OS_VI_MANAGER_MESSAGE_BUFF_SIZE); + viEventViMesg.hdr.type = 13; + viEventViMesg.hdr.pri = 0; + viEventViMesg.hdr.retQueue = 0; + viEventCounterMesg.hdr.type = 14; + viEventCounterMesg.hdr.pri = 0; + viEventCounterMesg.hdr.retQueue = 0; + osSetEventMesg(OS_EVENT_VI, &__osViMesgQueue, &viEventViMesg); + osSetEventMesg(OS_EVENT_COUNTER, &__osViMesgQueue, &viEventCounterMesg); + newPri = -1; + currentPri = osGetThreadPri(NULL); + if (currentPri < pri) { + newPri = currentPri; + osSetThreadPri(NULL, pri); + } + int_disabled = __osDisableInt(); + viMgrMainArgs.initialized = TRUE; + viMgrMainArgs.mgrThread = &viMgrThread; + viMgrMainArgs.cmdQueue = &__osViMesgQueue; + viMgrMainArgs.eventQueue = &__osViMesgQueue; + viMgrMainArgs.accessQueue = NULL; + viMgrMainArgs.dma_func = NULL; +#if defined(VERSION_EU) || defined(VERSION_SH) + viMgrMainArgs.edma_func = NULL; +#endif + + osCreateThread(&viMgrThread, 0, viMgrMain, (void *) &viMgrMainArgs, &viMgrStack[0x400], pri); + __osViInit(); + osStartThread(&viMgrThread); + __osRestoreInt(int_disabled); + if (newPri != -1) { + osSetThreadPri(NULL, newPri); + } + } +} + +void viMgrMain(void *vargs) { + static u16 retrace; + OSViContext *context; + OSMgrArgs *args; + OSMesg mesg; + u32 sp28; // always 0 + u32 sp24; // time related + mesg = NULL; + sp28 = FALSE; + context = __osViGetCurrentContext(); + + if ((retrace = context->retraceCount) == 0) { + retrace = 1; + } + + args = (OSMgrArgs *) vargs; + + while (TRUE) { + osRecvMesg(args->eventQueue, &mesg, OS_MESG_BLOCK); + switch (*(u16 *) mesg) { + case 13: + __osViSwapContext(); + if (!--retrace) { + context = __osViGetCurrentContext(); + if (context->mq != NULL) { + osSendMesg(context->mq, context->msg, OS_MESG_NOBLOCK); + } + retrace = context->retraceCount; + } + __osViIntrCount++; + if (sp28) { + sp24 = osGetCount(); + __osCurrentTime = sp24; + sp28 = 0; + } + sp24 = __osBaseCounter; + __osBaseCounter = osGetCount(); + sp24 = __osBaseCounter - sp24; + __osCurrentTime = __osCurrentTime + sp24; + break; + + case 14: + __osTimerInterrupt(); + break; + } + } +} diff --git a/src/os/osDestroyThread.c b/src/os/osDestroyThread.c new file mode 100644 index 000000000..ef8520a23 --- /dev/null +++ b/src/os/osDestroyThread.c @@ -0,0 +1,37 @@ +#include "libultra_internal.h" + +void osDestroyThread(OSThread *thread) { + register s32 int_disabled; + register OSThread *s1; + register OSThread *s2; + + int_disabled = __osDisableInt(); + + if (thread == NULL) { + thread = __osRunningThread; + } else if (thread->state != OS_STATE_STOPPED) { + __osDequeueThread(thread->queue, thread); + } + + if (__osActiveQueue == thread) { + __osActiveQueue = __osActiveQueue->tlnext; + } else { + s1 = __osActiveQueue; + s2 = s1->tlnext; + while (s2 != NULL) { + if (s2 == thread) { + s1->tlnext = thread->tlnext; + break; + } else { + s1 = s2; + s2 = s1->tlnext; + } + } + } + + if (thread == __osRunningThread) { + __osDispatchThread(); + } + + __osRestoreInt(int_disabled); +} diff --git a/src/os/osEPiRawStartDma.c b/src/os/osEPiRawStartDma.c new file mode 100644 index 000000000..b8cd8245a --- /dev/null +++ b/src/os/osEPiRawStartDma.c @@ -0,0 +1,35 @@ +#include "libultra_internal.h" +#include "hardware.h" +#include "new_func.h" +#include "PR/R4300.h" +// TODO: This define is from piint.h, but including that causes problems... +#define UPDATE_REG(reg, var) \ + if (cHandle->var != pihandle->var) \ + IO_WRITE(reg, pihandle->var); +// TODO: This define is from os.h, but including that causes problems... +#define PI_DOMAIN1 0 +// TODO: These defines are from PR/rcp.h, but including that causes problems... +#define IO_WRITE(addr, data) (*(vu32 *) PHYS_TO_K1(addr) = (u32)(data)) + +s32 osEPiRawStartDma(OSPiHandle *pihandle, s32 dir, u32 cart_addr, void *dram_addr, u32 size) { + register int status; + + status = HW_REG(PI_STATUS_REG, u32); + while (status & PI_STATUS_ERROR) + status = HW_REG(PI_STATUS_REG, u32); + + HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); + HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) pihandle->baseAddress | cart_addr) & 0x1fffffff); + + switch (dir) { + case OS_READ: + HW_REG(PI_WR_LEN_REG, u32) = size - 1; + break; + case OS_WRITE: + HW_REG(PI_RD_LEN_REG, u32) = size - 1; + break; + default: + return -1; + } + return 0; +} diff --git a/src/os/osEepromLongRead.c b/src/os/osEepromLongRead.c new file mode 100644 index 000000000..b9884abf7 --- /dev/null +++ b/src/os/osEepromLongRead.c @@ -0,0 +1,30 @@ +#include "libultra_internal.h" + +extern u64 osClockRate; +extern u8 D_80365D20; +extern u8 _osContNumControllers; +extern OSTimer D_80365D28; // not sure what this is yet +extern OSMesgQueue _osContMesgQueue; +extern OSMesg _osContMesgBuff[4]; + +s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { + s32 status = 0; + if (address > 0x40) { + return -1; + } + + while (nbytes > 0) { + status = osEepromRead(mq, address, buffer); + if (status != 0) { + return status; + } + + nbytes -= 8; + address += 1; + buffer += 8; + osSetTimer(&D_80365D28, 12000 * osClockRate / 1000000, 0, &_osContMesgQueue, _osContMesgBuff); + osRecvMesg(&_osContMesgQueue, NULL, OS_MESG_BLOCK); + } + + return status; +} diff --git a/src/os/osEepromLongWrite.c b/src/os/osEepromLongWrite.c new file mode 100644 index 000000000..ef09fa92b --- /dev/null +++ b/src/os/osEepromLongWrite.c @@ -0,0 +1,31 @@ +#include "libultra_internal.h" + +extern u64 osClockRate; +extern u8 D_80365D20; +extern u8 _osContNumControllers; +extern OSTimer D_80365D28; +extern OSMesgQueue _osContMesgQueue; +extern OSMesg _osContMesgBuff[4]; +// exactly the same as osEepromLongRead except for osEepromWrite call + +s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { + s32 result = 0; + if (address > 0x40) { + return -1; + } + + while (nbytes > 0) { + result = osEepromWrite(mq, address, buffer); + if (result != 0) { + return result; + } + + nbytes -= 8; + address += 1; + buffer += 8; + osSetTimer(&D_80365D28, 12000 * osClockRate / 1000000, 0, &_osContMesgQueue, _osContMesgBuff); + osRecvMesg(&_osContMesgQueue, NULL, OS_MESG_BLOCK); + } + + return result; +} diff --git a/src/os/osEepromProbe.c b/src/os/osEepromProbe.c new file mode 100644 index 000000000..d550b8464 --- /dev/null +++ b/src/os/osEepromProbe.c @@ -0,0 +1,24 @@ +#include "libultra_internal.h" + +// TODO: merge with osEepromWrite +typedef struct { + u16 unk00; + u8 unk02; + u8 unk03; +} unkStruct; + +s32 __osEepStatus(OSMesgQueue *, unkStruct *); +s32 osEepromProbe(OSMesgQueue *mq) { + s32 status = 0; + unkStruct sp18; + + __osSiGetAccess(); + status = __osEepStatus(mq, &sp18); + if (status == 0 && (sp18.unk00 & 0x8000) != 0) { + status = 1; + } else { + status = 0; + } + __osSiRelAccess(); + return status; +} diff --git a/src/os/osEepromRead.c b/src/os/osEepromRead.c new file mode 100644 index 000000000..561ad2056 --- /dev/null +++ b/src/os/osEepromRead.c @@ -0,0 +1,102 @@ +#include "libultra_internal.h" + +extern u8 _osLastSentSiCmd; + +extern u32 __osEepPifRam[15]; +extern u32 D_8019769C; + +typedef struct { + u16 unk00; + u8 unk02; + u8 unk03; +} unkStruct; +typedef struct { + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u8 unk06; + u8 unk07; +} unkStruct3; + +typedef struct { + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + unkStruct3 unk04; +} unkStruct2; + +s32 __osEepStatus(OSMesgQueue *, unkStruct *); +s32 __osPackEepReadData(u8); + +s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { + s32 sp34; + s32 sp30; + u8 *sp2c; + unkStruct sp28; + unkStruct2 sp20; + sp34 = 0; + sp30 = 0; + sp2c = (u8 *) &__osEepPifRam; + if (address > 0x40) { + return -1; + } + __osSiGetAccess(); + sp34 = __osEepStatus(mq, &sp28); + if (sp34 != 0 || sp28.unk00 != 0x8000) { + + return 8; + } + while (sp28.unk02 & 0x80) { + __osEepStatus(mq, &sp28); + } + __osPackEepReadData(address); + sp34 = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + for (sp30 = 0; sp30 < 0x10; sp30++) { + __osEepPifRam[sp30] = 255; + } + D_8019769C = 0; + sp34 = __osSiRawStartDma(OS_READ, __osEepPifRam); + _osLastSentSiCmd = 4; + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + for (sp30 = 0; sp30 < 4; sp30++) { + sp2c++; + } + sp20 = *(unkStruct2 *) sp2c; + sp34 = (sp20.unk01 & 0xc0) >> 4; + if (sp34 == 0) { + for (sp30 = 0; sp30 < 8; sp30++) { + *buffer++ = ((u8 *) &sp20.unk04)[sp30]; + } + } + __osSiRelAccess(); + return sp34; +} + +s32 __osPackEepReadData(u8 address) { + u8 *sp14; + unkStruct2 sp8; + s32 sp4; + sp14 = (u8 *) &__osEepPifRam; + for (sp4 = 0; sp4 < 0x10; sp4++) { + __osEepPifRam[sp4] = 255; + } + D_8019769C = 1; + sp8.unk00 = 2; + sp8.unk01 = 8; + sp8.unk02 = 4; + sp8.unk03 = address; + for (sp4 = 0; sp4 < 8; sp4++) { + ((u8 *) &sp8.unk04)[sp4] = 0; + } + for (sp4 = 0; sp4 < 4; sp4++) { + *sp14++ = 0; + } + *(unkStruct2 *) sp14 = sp8; + sp14 += 0xc; + *sp14 = 254; +} diff --git a/src/os/osEepromWrite.c b/src/os/osEepromWrite.c new file mode 100644 index 000000000..eba200510 --- /dev/null +++ b/src/os/osEepromWrite.c @@ -0,0 +1,162 @@ +#include "libultra_internal.h" +#include "osContInternal.h" + +ALIGNED8 u32 __osEepPifRam[15]; +u32 D_8019769C; + +extern u8 _osLastSentSiCmd; + +typedef struct { + u16 unk00; + u8 unk02; + u8 unk03; +} unkStruct; +typedef struct { + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u8 unk06; + u8 unk07; +} unkStruct3; + +typedef struct { + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + unkStruct3 unk04; +} unkStruct2; + +s32 __osEepStatus(OSMesgQueue *, unkStruct *); +s32 __osPackEepWriteData(u8, u8 *); + +s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { + s32 sp34; + s32 sp30; + u8 *sp2c; + unkStruct2 sp20; + unkStruct sp1c; + sp34 = 0; + sp2c = (u8 *) &__osEepPifRam; + + if (address > 0x40) { + return -1; + } + + __osSiGetAccess(); + sp34 = __osEepStatus(mq, &sp1c); + + if (sp34 != 0 || sp1c.unk00 != 0x8000) { + return 8; + } + + while (sp1c.unk02 & 0x80) { + __osEepStatus(mq, &sp1c); + } + + __osPackEepWriteData(address, buffer); + + sp34 = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + for (sp30 = 0; sp30 < 0x10; sp30++) { + (__osEepPifRam)[sp30] = 255; + } + + D_8019769C = 0; + sp34 = __osSiRawStartDma(OS_READ, __osEepPifRam); + _osLastSentSiCmd = 5; + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + for (sp30 = 0; sp30 < 4; sp30++) { + sp2c++; + } + + sp20 = *(unkStruct2 *) sp2c; + sp34 = (sp20.unk01 & 0xc0) >> 4; + __osSiRelAccess(); + return sp34; +} + +s32 __osPackEepWriteData(u8 address, u8 *buffer) { + u8 *sp14; + unkStruct2 sp8; + s32 sp4; + sp14 = (u8 *) &__osEepPifRam; + for (sp4 = 0; sp4 < 0x10; sp4++) { + __osEepPifRam[sp4] = 255; + } + D_8019769C = 1; + sp8.unk00 = 10; + sp8.unk01 = 1; + sp8.unk02 = 5; + sp8.unk03 = address; + for (sp4 = 0; sp4 < 8; sp4++) { + ((u8 *) &sp8.unk04)[sp4] = *buffer++; + } + for (sp4 = 0; sp4 < 4; sp4++) { + *sp14++ = 0; + } + *(unkStruct2 *) sp14 = sp8; + sp14 += 0xc; + *sp14 = 254; +} + +s32 __osEepStatus(OSMesgQueue *a0, unkStruct *a1) { + u32 sp2c = 0; + s32 sp28; + u8 *sp24 = (u8 *) __osEepPifRam; + unkStruct3 sp1c; + + for (sp28 = 0; sp28 < 0x10; sp28++) { + __osEepPifRam[sp28] = 0; + } + + D_8019769C = 1; + sp24 = (u8 *) __osEepPifRam; + for (sp28 = 0; sp28 < 4; sp28++) { + *sp24++ = 0; + } + + sp1c.unk00 = 255; + sp1c.unk01 = 1; + sp1c.unk02 = 3; + sp1c.unk03 = 0; + sp1c.unk04 = 255; + sp1c.unk05 = 255; + sp1c.unk06 = 255; + sp1c.unk07 = 255; + *(unkStruct3 *) sp24 = sp1c; + + sp24 += 8; + sp24[0] = 254; + + sp2c = __osSiRawStartDma(OS_WRITE, __osEepPifRam); + osRecvMesg(a0, NULL, OS_MESG_BLOCK); + + _osLastSentSiCmd = 5; + + sp2c = __osSiRawStartDma(OS_READ, __osEepPifRam); + osRecvMesg(a0, NULL, OS_MESG_BLOCK); + + if (sp2c != 0) { + return sp2c; + } + + sp24 = (u8 *) __osEepPifRam; + for (sp28 = 0; sp28 < 4; sp28++) { + *sp24++ = 0; + } + + sp1c = *(unkStruct3 *) sp24; + a1->unk03 = (sp1c.unk02 & 0xc0) >> 4; + a1->unk00 = (sp1c.unk05 << 8) | sp1c.unk04; + a1->unk02 = sp1c.unk06; + if (a1->unk03 != 0) { + return a1->unk03; + } + return 0; +} diff --git a/src/os/osGetThreadPri.c b/src/os/osGetThreadPri.c new file mode 100644 index 000000000..43a0145b2 --- /dev/null +++ b/src/os/osGetThreadPri.c @@ -0,0 +1,8 @@ +#include "libultra_internal.h" + +OSPri osGetThreadPri(OSThread *thread) { + if (thread == NULL) { + thread = __osRunningThread; + } + return thread->priority; +} diff --git a/src/os/osGetTime.c b/src/os/osGetTime.c new file mode 100644 index 000000000..f07fd5c8a --- /dev/null +++ b/src/os/osGetTime.c @@ -0,0 +1,18 @@ +#include "libultra_internal.h" + +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; + +OSTime osGetTime() +{ + u32 tmptime; + u32 elapseCount; + OSTime currentCount; + register u32 saveMask; + saveMask = __osDisableInt(); + tmptime = osGetCount(); + elapseCount = tmptime - __osBaseCounter; + currentCount = __osCurrentTime; + __osRestoreInt(saveMask); + return currentCount + elapseCount; +} diff --git a/src/os/osInitialize.c b/src/os/osInitialize.c new file mode 100644 index 000000000..3b51ee6c0 --- /dev/null +++ b/src/os/osInitialize.c @@ -0,0 +1,76 @@ +#include "libultra_internal.h" +#include "hardware.h" +#include + +#define PIF_ADDR_START (void *) 0x1FC007FC + +typedef struct { + u32 instr00; + u32 instr01; + u32 instr02; + u32 instr03; +} exceptionPreamble; + +extern u32 D_80194040; // maybe initialized? +extern s32 __osLeoInterrupt; +extern u32 D_800EA5F0; + + +u64 osClockRate = 62500000; +u32 D_800EA5E8 = 0; +u32 __OSGlobalIntMask = OS_IM_ALL; + +#define EXCEPTION_TLB_MISS 0x80000000 +#define EXCEPTION_XTLB_MISS 0x80000080 +#define EXCEPTION_CACHE_ERROR 0x80000100 +#define EXCEPTION_GENERAL 0x80000180 + +extern u32 osResetType; +extern exceptionPreamble __osExceptionPreamble; + +void osInitialize(void) { + u32 sp34; + u32 sp30 = 0; + + UNUSED u32 eu_sp34; + UNUSED u32 eu_sp30; + UNUSED u32 sp2c; + D_80194040 = TRUE; + __osSetSR(__osGetSR() | 0x20000000); + __osSetFpcCsr(0x01000800); + while (__osSiRawReadIo(PIF_ADDR_START, &sp34)) { + ; + } + while (__osSiRawWriteIo(PIF_ADDR_START, sp34 | 8)) { + ; + } + *(exceptionPreamble *) EXCEPTION_TLB_MISS = __osExceptionPreamble; + *(exceptionPreamble *) EXCEPTION_XTLB_MISS = __osExceptionPreamble; + *(exceptionPreamble *) EXCEPTION_CACHE_ERROR = __osExceptionPreamble; + *(exceptionPreamble *) EXCEPTION_GENERAL = __osExceptionPreamble; + osWritebackDCache((void *) 0x80000000, + EXCEPTION_GENERAL + sizeof(exceptionPreamble) - EXCEPTION_TLB_MISS); + osInvalICache((void *) 0x80000000, + EXCEPTION_GENERAL + sizeof(exceptionPreamble) - EXCEPTION_TLB_MISS); + osMapTLBRdb(); + osPiRawReadIo(4, &sp30); + sp30 &= ~0xf; + if (sp30) { + osClockRate = sp30; + } + osClockRate = osClockRate * 3 / 4; + if (osResetType == RESET_TYPE_COLD_RESET) { + bzero(osAppNmiBuffer, sizeof(osAppNmiBuffer)); + } + + eu_sp30 = HW_REG(PI_STATUS_REG, u32); + while (eu_sp30 & PI_STATUS_ERROR) { + eu_sp30 = HW_REG(PI_STATUS_REG, u32); + }; + if (!((eu_sp34 = HW_REG(ASIC_STATUS, u32)) & _64DD_PRESENT_MASK)) { + D_800EA5F0 = 1; + __osSetHWIntrRoutine(1, &__osLeoInterrupt); + } else { + D_800EA5F0 = 0; + } +} diff --git a/src/os/osJamMesg.c b/src/os/osJamMesg.c new file mode 100644 index 000000000..6afddc61e --- /dev/null +++ b/src/os/osJamMesg.c @@ -0,0 +1,24 @@ +#include "libultra_internal.h" + +s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) { + register s32 int_disabled; + int_disabled = __osDisableInt(); + while (mq->validCount >= mq->msgCount) { + if (flag == OS_MESG_BLOCK) { + __osRunningThread->state = OS_STATE_WAITING; + __osEnqueueAndYield(&mq->fullqueue); + } else { + __osRestoreInt(int_disabled); + return -1; + } + } + + mq->first = (mq->first + mq->msgCount - 1) % mq->msgCount; + mq->msg[mq->first] = msg; + mq->validCount++; + if (mq->mtqueue->next != NULL) { + osStartThread(__osPopThread(&mq->mtqueue)); + } + __osRestoreInt(int_disabled); + return 0; +} diff --git a/src/os/osLeoDiskInit.c b/src/os/osLeoDiskInit.c new file mode 100644 index 000000000..54bb89b18 --- /dev/null +++ b/src/os/osLeoDiskInit.c @@ -0,0 +1,38 @@ +#define MK64 + +#include "libultra_internal.h" +#include "hardware.h" + +// this file must include some globally referenced data because it is not called anywhere +// data, comes shortly before _Ldtob I think, before crash_screen + +extern OSPiHandle *__osPiTable; +// bss +OSPiHandle LeoDiskHandle; +OSPiHandle *__osDiskHandle; + +OSPiHandle *osLeoDiskInit(void) { + s32 sp1c; + LeoDiskHandle.type = 2; + LeoDiskHandle.baseAddress = (0xa0000000 | 0x05000000); + LeoDiskHandle.latency = 3; + LeoDiskHandle.pulse = 6; + LeoDiskHandle.pageSize = 6; + LeoDiskHandle.relDuration = 2; +#ifdef VERSION_SH + LeoDiskHandle.domain = 1; +#endif + HW_REG(PI_BSD_DOM2_LAT_REG, u32) = LeoDiskHandle.latency; + HW_REG(PI_BSD_DOM2_PWD_REG, u32) = LeoDiskHandle.pulse; + HW_REG(PI_BSD_DOM2_PGS_REG, u32) = LeoDiskHandle.pageSize; + HW_REG(PI_BSD_DOM2_RLS_REG, u32) = LeoDiskHandle.relDuration; + bzero(&LeoDiskHandle.transferInfo, sizeof(__OSTranxInfo)); + sp1c = __osDisableInt(); + LeoDiskHandle.next = __osPiTable; + __osPiTable = &LeoDiskHandle; + __osDiskHandle = &LeoDiskHandle; + __osRestoreInt(sp1c); + return &LeoDiskHandle; +} + +#undef MK64 diff --git a/src/os/osPfsAllocateFile.c b/src/os/osPfsAllocateFile.c new file mode 100644 index 000000000..874cfecd3 --- /dev/null +++ b/src/os/osPfsAllocateFile.c @@ -0,0 +1,181 @@ +#include "libultra_internal.h" +#include "controller.h" + +static s32 __osClearPage(OSPfs *pfs, int page_no, u8 *data, u8 bank); +s32 osPfsAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, int file_size_in_bytes, s32 *file_no) +{ + int start_page; + int decleared; + int last_page; + int old_last_page; + int j; + s32 ret; + int file_size_in_pages; + __OSInode inode; + __OSInode backup_inode; + __OSDir dir; + u8 bank; + u8 old_bank; + int firsttime; + s32 bytes; + __OSInodeUnit fpage; + + old_last_page = 0; + ret = 0; + old_bank = 0; + firsttime = 0; + + if (company_code == 0 || game_code == 0) + return PFS_ERR_INVALID; + + file_size_in_pages = (file_size_in_bytes + 255) / (BLOCKSIZE * PFS_ONE_PAGE); + if ((pfs->status & PFS_INITIALIZED) == FALSE) + return PFS_ERR_INVALID; + + PFS_CHECK_ID; + + ret = osPfsFindFile(pfs, company_code, game_code, game_name, ext_name, file_no); + if (ret != 0 && ret != PFS_ERR_INVALID) + return ret; + + if (*file_no != -1) + return PFS_ERR_EXIST; + + ret = osPfsFreeBlocks(pfs, &bytes); + if (file_size_in_bytes > bytes) + return PFS_DATA_FULL; + + if (file_size_in_pages != 0) + { + ret = osPfsFindFile(pfs, 0, 0, NULL, NULL, file_no); + if (ret != 0 && ret != PFS_ERR_INVALID) + return ret; + if (*file_no == -1) + return PFS_DIR_FULL; + + for (bank = 0; bank < pfs->banks; bank++) + { + ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank)); + ERRCK(__osPfsDeclearPage(pfs, &inode, file_size_in_pages, &start_page, bank, &decleared, &last_page)); + if (start_page != -1) + { + if (firsttime == 0) + { + fpage.inode_t.page = start_page; + fpage.inode_t.bank = bank; + } + else + { + backup_inode.inode_page[old_last_page].inode_t.bank = bank; + backup_inode.inode_page[old_last_page].inode_t.page = start_page; + ERRCK(__osPfsRWInode(pfs, &backup_inode, OS_WRITE, old_bank)); + } + + for (j = 0; j < ARRLEN(inode.inode_page); j++) + backup_inode.inode_page[j].ipage = inode.inode_page[j].ipage; + old_last_page = last_page; + old_bank = bank; + firsttime++; + if (file_size_in_pages > decleared) + file_size_in_pages = file_size_in_pages - decleared; + else + { + file_size_in_pages = 0; + break; + } + } + } + if (file_size_in_pages > 0 || start_page == -1) + return PFS_ERR_INCONSISTENT; + + backup_inode.inode_page[old_last_page].inode_t.bank = bank; + backup_inode.inode_page[old_last_page].inode_t.page = start_page; + ERRCK(__osPfsRWInode(pfs, &backup_inode, OS_WRITE, old_bank)); + dir.start_page = fpage; + dir.company_code = company_code; + dir.game_code = game_code; + dir.data_sum = 0; + for (j = 0; j < ARRLEN(dir.game_name); j++) + dir.game_name[j] = *game_name++; + for (j = 0; j < ARRLEN(dir.ext_name); j++) + dir.ext_name[j] = *ext_name++; + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, *file_no + pfs->dir_table, (u8*)&dir, FALSE)); + return ret; + } + return PFS_ERR_INVALID; +} + +s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page) +{ + int j; + int spage; + int old_page; + u8 tmp_data[BLOCKSIZE]; + int i; + s32 ret; + int offset; + + ret = 0; + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + for (j = offset; j < ARRLEN(inode->inode_page); j++) + { + if (inode->inode_page[j].ipage == 3) + break; + } + if (j == ARRLEN(inode->inode_page)) + { + *first_page = -1; + return ret; + } + for (i = 0; i < ARRLEN(tmp_data); i++) + tmp_data[i] = 0; + spage = j; + *decleared = 1; + old_page = j++; + while (file_size_in_pages > *decleared && j < ARRLEN(inode->inode_page)) + { + if (inode->inode_page[j].ipage == 3) + { + inode->inode_page[old_page].inode_t.bank = bank; + inode->inode_page[old_page].inode_t.page = j; + ERRCK(__osClearPage(pfs, old_page, (u8*)tmp_data, bank)); + old_page = j; + (*decleared)++; + } + j++; + } + *first_page = spage; + if (j == ARRLEN(inode->inode_page)) + { + if (file_size_in_pages > *decleared) + { + *last_page = old_page; + return ret; + } + } + inode->inode_page[old_page].ipage = 1; + ret = __osClearPage(pfs, old_page, (u8*)tmp_data, bank); + *last_page = 0; + return ret; +} + +static s32 __osClearPage(OSPfs *pfs, int page_no, u8 *data, u8 bank) +{ + int i; + s32 ret; + ret = 0; + pfs->activebank = bank; + ERRCK(__osPfsSelectBank(pfs)); + for (i = 0; i < PFS_ONE_PAGE; i++) + { + ret = __osContRamWrite(pfs->queue, pfs->channel, page_no * PFS_ONE_PAGE + i, data, FALSE); + if (ret != 0) + break; + } + pfs->activebank = 0; + ret = __osPfsSelectBank(pfs); + return ret; +} \ No newline at end of file diff --git a/src/os/osPfsChecker.c b/src/os/osPfsChecker.c new file mode 100644 index 000000000..18457216e --- /dev/null +++ b/src/os/osPfsChecker.c @@ -0,0 +1,207 @@ +#include "libultra_internal.h" +#include "controller.h" + +s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache); +s32 corrupted(OSPfs *pfs, __OSInodeUnit fpage, __OSInodeCache *cache); +s32 osPfsChecker(OSPfs *pfs) +{ + int j; //1156 + s32 ret; //1152 + __OSInodeUnit next_page; + __OSInode checked_inode; + __OSInode tmp_inode; //636 + __OSDir tmp_dir; + __OSInodeUnit file_next_node[16]; + __OSInodeCache cache; //56 + int fixed; //52 + u8 bank; //51 + s32 cc; //44 + s32 cl; //40 + int offset; //36 + + fixed = 0; + ret = __osCheckId(pfs); + if (ret == PFS_ERR_NEW_PACK) + ret = __osGetId(pfs); + if (ret != 0) + return ret; + ERRCK(corrupted_init(pfs, &cache)); + for (j = 0; j < pfs->dir_size; j++) + { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir)); + if (tmp_dir.company_code != 0 && tmp_dir.game_code != 0) + { + next_page = tmp_dir.start_page; + cc = 0; + cl = 0; + bank = 255; + while (next_page.ipage >= pfs->inode_start_page && next_page.inode_t.bank < pfs->banks && next_page.inode_t.page > 0 && next_page.inode_t.page < 128) + { + if (bank != next_page.inode_t.bank) + { + bank = next_page.inode_t.bank; + ret = __osPfsRWInode(pfs, &tmp_inode, OS_READ, bank); + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) + return ret; + } + cc = corrupted(pfs, next_page, &cache) - cl; + if (cc != 0) + break; + cl = 1; + next_page = tmp_inode.inode_page[next_page.inode_t.page]; + } + if (cc == 0 && next_page.ipage == 1) + continue; + + tmp_dir.company_code = 0; + tmp_dir.game_code = 0; + tmp_dir.start_page.ipage = 0; + tmp_dir.status = DIR_STATUS_EMPTY; + tmp_dir.data_sum = 0; + SET_ACTIVEBANK_TO_ZERO; + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir, FALSE)); + fixed++; + } + else + { + if (tmp_dir.company_code == 0 && tmp_dir.game_code == 0) + continue; + tmp_dir.company_code = 0; + tmp_dir.game_code = 0; + tmp_dir.start_page.ipage = 0; + tmp_dir.status = DIR_STATUS_EMPTY; + tmp_dir.data_sum = 0; + + SET_ACTIVEBANK_TO_ZERO; + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir, FALSE)); + fixed++; + } + } + for (j = 0; j < pfs->dir_size; j++) + { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir)); + + if (tmp_dir.company_code != 0 && tmp_dir.game_code != 0 && + tmp_dir.start_page.ipage >= ((__OSInodeUnit *)&(pfs->inode_start_page) + 1)->ipage) //weird + { + file_next_node[j].ipage = tmp_dir.start_page.ipage; + } + else + { + file_next_node[j].ipage = 0; + } + } + for (bank = 0; bank < pfs->banks; bank++) + { + ret = __osPfsRWInode(pfs, &tmp_inode, 0, bank); + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) + return ret; + if (bank > 0) + { + offset = 1; + } + else + { + offset = pfs->inode_start_page; + } + for (j = 0; j < offset; j++) + { + checked_inode.inode_page[j].ipage = tmp_inode.inode_page[j].ipage; + } + for (; j < 128; j++) + { + checked_inode.inode_page[j].ipage = 3; + } + for (j = 0; j < pfs->dir_size; j++) + { + while (file_next_node[j].inode_t.bank == bank && file_next_node[j].ipage >= ((__OSInodeUnit *)&(pfs->inode_start_page) + 1)->ipage) + { + u8 pp = file_next_node[j].inode_t.page; + file_next_node[j] = checked_inode.inode_page[pp] = tmp_inode.inode_page[pp]; + } + } + ERRCK(__osPfsRWInode(pfs, &checked_inode, OS_WRITE, bank)); + } + if (fixed) + pfs->status |= PFS_CORRUPTED; + else + pfs->status &= ~PFS_CORRUPTED; + + return 0; +} + +s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache) +{ + int i; + int n; + int offset; + u8 bank; + __OSInodeUnit tpage; + __OSInode tmp_inode; + s32 ret; + + for (i = 0; i < ARRLEN(cache->map); i++) + cache->map[i] = 0; + cache->bank = -1; + for (bank = 0; bank < pfs->banks; bank++) + { + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + + ret = __osPfsRWInode(pfs, &tmp_inode, OS_READ, bank); + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) + return ret; + for (i = offset; i < ARRLEN(tmp_inode.inode_page); i++) + { + tpage = tmp_inode.inode_page[i]; + if (tpage.ipage >= pfs->inode_start_page && tpage.inode_t.bank != bank) + { + n = (tpage.inode_t.page / 4) + ((tpage.inode_t.bank % PFS_ONE_PAGE) * BLOCKSIZE); + cache->map[n] |= 1 << (bank % PFS_ONE_PAGE); + } + } + } + return 0; +} + +s32 corrupted(OSPfs *pfs, __OSInodeUnit fpage, __OSInodeCache *cache) +{ + int j; + int n; + int hit; + u8 bank; + int offset; + s32 ret; + + hit = 0; + ret = 0; + n = (fpage.inode_t.page / 4) + (fpage.inode_t.bank % 8) * BLOCKSIZE; + for (bank = 0; bank < pfs->banks; bank++) + { + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + if (bank == fpage.inode_t.bank || cache->map[n] & (1 << (bank % 8))) + { + if (bank != cache->bank) + { + ret = __osPfsRWInode(pfs, &cache->inode, 0, bank); + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) + return ret; + cache->bank = bank; + } + + for (j = offset; hit < 2 && (j < ARRLEN(cache->inode.inode_page)); j++) + { + if (cache->inode.inode_page[j].ipage == fpage.ipage) + hit++; + } + if (1 < hit) + return PFS_ERR_NEW_PACK; + } + } + return hit; +} diff --git a/src/os/osPfsDeleteFile.c b/src/os/osPfsDeleteFile.c new file mode 100644 index 000000000..ac784347a --- /dev/null +++ b/src/os/osPfsDeleteFile.c @@ -0,0 +1,130 @@ +#include "libultra_internal.h" +#include "controller.h" + +s32 osPfsDeleteFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, + u8 *ext_name) +{ + + s32 file_no; + int k; + s32 ret; + __OSInode inode; + __OSDir dir; + u16 sum; + __OSInodeUnit last_page; + u8 startpage; + u8 bank; + sum = 0; + if (company_code == 0 || game_code == 0) + return PFS_ERR_INVALID; + PFS_CHECK_STATUS; + PFS_CHECK_ID; + SET_ACTIVEBANK_TO_ZERO; + ERRCK(osPfsFindFile(pfs, company_code, game_code, game_name, ext_name, &file_no)); + + if (file_no == -1) + return PFS_ERR_INVALID; + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir)); + + startpage = dir.start_page.inode_t.page; + + for (bank = dir.start_page.inode_t.bank; bank < pfs->banks;) + { + ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank)); + ERRCK(__osPfsReleasePages(pfs, &inode, startpage, &sum, bank, &last_page, 1)); //TODO: magic constant + ERRCK(__osPfsRWInode(pfs, &inode, OS_WRITE, bank)); + if (last_page.ipage == 1) + break; + bank = last_page.inode_t.bank; + startpage = last_page.inode_t.page; + } + + if (bank >= pfs->banks) + return PFS_ERR_INCONSISTENT; + + dir.game_code = 0; + dir.company_code = 0; + dir.start_page.ipage = 0; + dir.data_sum = 0; + for (k = 0; k < ARRLEN(dir.game_name); k++) + { + dir.game_name[k] = 0; + } + for (k = 0; k < ARRLEN(dir.ext_name); k++) + { + dir.ext_name[k] = 0; + } + dir.status = DIR_STATUS_EMPTY; + ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir, FALSE); + + return ret; +} +s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag) +{ + __OSInodeUnit next_page; + __OSInodeUnit old_page; + s32 ret; + int offset; + ret = 0; + next_page = inode->inode_page[start_page]; + if (next_page.ipage != 1) + { + if (next_page.inode_t.bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + } + else + { + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + } + if (next_page.inode_t.page < offset && next_page.ipage != 1) + return PFS_ERR_INCONSISTENT; + *last_page = next_page; + if (flag == 1) //TODO: magic number + inode->inode_page[start_page].ipage = 3; + + ERRCK(__osBlockSum(pfs, start_page, sum, bank)); + if (next_page.ipage == 1) + return 0; + while (next_page.ipage >= pfs->inode_start_page) + { + old_page = next_page; + next_page = inode->inode_page[next_page.inode_t.page]; + inode->inode_page[old_page.inode_t.page].ipage = 3; + + ERRCK(__osBlockSum(pfs, old_page.inode_t.page, sum, bank)); + if (next_page.inode_t.bank != bank) + break; + } + if (next_page.ipage >= pfs->inode_start_page) + inode->inode_page[next_page.inode_t.page].ipage = 3; + *last_page = next_page; + return 0; +} +s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank) +{ + int i; + s32 ret; + u8 data[32]; + ret = 0; + pfs->activebank = bank; + ERRCK(__osPfsSelectBank(pfs)); + for (i = 0; i < PFS_ONE_PAGE; i++) + { + ret = __osContRamRead(pfs->queue, pfs->channel, page_no * PFS_ONE_PAGE + i, data); + if (ret != 0) + { + pfs->activebank = 0; + __osPfsSelectBank(pfs); + return ret; + } + *sum = *sum + __osSumcalc(data, sizeof(data)); + } + pfs->activebank = 0; + ret = __osPfsSelectBank(pfs); + return ret; +} \ No newline at end of file diff --git a/src/os/osPfsFileState.c b/src/os/osPfsFileState.c new file mode 100755 index 000000000..648fc7f85 --- /dev/null +++ b/src/os/osPfsFileState.c @@ -0,0 +1,58 @@ +#include "libultra_internal.h" +#include "controller.h" + +s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state) +{ + s32 ret; + int pages; + __OSInode inode; + __OSDir dir; + __OSInodeUnit next_page; + int j; + u8 bank; + u8 start_page; + if (file_no >= pfs->dir_size || file_no < 0) + return PFS_ERR_INVALID; + PFS_CHECK_STATUS; + PFS_CHECK_ID; + SET_ACTIVEBANK_TO_ZERO; + + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir)); + if (dir.company_code == 0 || dir.game_code == 0) + return PFS_ERR_INVALID; + if (dir.start_page.ipage < pfs->inode_start_page) + return PFS_ERR_INCONSISTENT; + pages = 0; + start_page = dir.start_page.inode_t.page; + bank = dir.start_page.inode_t.bank; + while (bank < pfs->banks) + { + ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank)); + next_page = inode.inode_page[start_page]; + pages++; + while (next_page.ipage >= pfs->inode_start_page) + { + pages++; + next_page = inode.inode_page[next_page.inode_t.page]; + if (next_page.inode_t.bank != bank) + { + bank = next_page.inode_t.bank; + start_page = next_page.inode_t.page; + break; + } + } + if (next_page.ipage == 1) + break; + } + if (next_page.ipage != 1) + return PFS_ERR_INCONSISTENT; + + state->file_size = pages << PFS_ONE_PAGE; + state->company_code = dir.company_code; + state->game_code = dir.game_code; + for (j = 0; j < ARRLEN(state->game_name); j++) + state->game_name[j] = dir.game_name[j]; + for (j = 0; j < ARRLEN(state->ext_name); j++) + state->ext_name[j] = dir.ext_name[j]; + return 0; +} diff --git a/src/os/osPfsFreeBlocks.c b/src/os/osPfsFreeBlocks.c new file mode 100755 index 000000000..f63c7b745 --- /dev/null +++ b/src/os/osPfsFreeBlocks.c @@ -0,0 +1,34 @@ +#include "libultra_internal.h" +#include "controller.h" + +s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used) +{ + int j; + int pages; + __OSInode inode; + s32 ret; + u8 bank; + int offset; + pages = 0; + ret = 0; + PFS_CHECK_STATUS; + PFS_CHECK_ID; + for (bank = 0; bank < pfs->banks; bank++) + { + ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank)); + if (bank > 0) + offset = 1; + else + offset = pfs->inode_start_page; + for (j = offset; j < ARRLEN(inode.inode_page); j++) + { + if (inode.inode_page[j].ipage == 3) + pages++; + } + } + *bytes_not_used = pages * PFS_ONE_PAGE * BLOCKSIZE; + return 0; +} + +/* +*/ \ No newline at end of file diff --git a/src/os/osPfsIsPlug.c b/src/os/osPfsIsPlug.c new file mode 100644 index 000000000..9fcb0ae57 --- /dev/null +++ b/src/os/osPfsIsPlug.c @@ -0,0 +1,96 @@ +#include "libultra_internal.h" + +#include "PR/os_pi.h" +#include "controller.h" + +extern OSPifRam __osPfsPifRam; + +s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern) { + s32 ret; + OSMesg dummy; + u8 bitpattern; + OSContStatus data[MAXCONTROLLERS]; + int channel; + u8 bits; + int crc_error_cnt; + ret = 0; + bits = 0; + crc_error_cnt = 3; + __osSiGetAccess(); + while (TRUE) { + __osPfsRequestData(CONT_CMD_REQUEST_STATUS); + ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(queue, &dummy, OS_MESG_BLOCK); + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(queue, &dummy, OS_MESG_BLOCK); + __osPfsGetInitData(&bitpattern, data); + for (channel = 0; channel < _osContNumControllers; channel++) { + if ((data[channel].status & CONT_ADDR_CRC_ER) == 0) { + crc_error_cnt--; + break; + } + } + if (_osContNumControllers == channel) { + crc_error_cnt = 0; + } + if (crc_error_cnt < 1) { + for (channel = 0; channel < _osContNumControllers; channel++) { + if (data[channel].errno == 0 && (data[channel].status & CONT_CARD_ON) != 0) { + bits |= 1 << channel; + } + } + __osSiRelAccess(); + *pattern = bits; + return ret; + } + } +} + +void __osPfsRequestData(u8 cmd) { + u8 *ptr; + __OSContRequesFormat requestformat; + int i; + + _osLastSentSiCmd = cmd; + + for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + __osPfsPifRam.ramarray[i] = 0; + } + + __osPfsPifRam.pifstatus = CONT_CMD_EXE; + + ptr = (u8 *)&__osPfsPifRam; + requestformat.dummy = CONT_CMD_NOP; + requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX; + requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX; + requestformat.cmd = cmd; + requestformat.typeh = CONT_CMD_NOP; + requestformat.typel = CONT_CMD_NOP; + requestformat.status = CONT_CMD_NOP; + requestformat.dummy1 = CONT_CMD_NOP; + for (i = 0; i < _osContNumControllers; i++) { + *(__OSContRequesFormat *)ptr = requestformat; + ptr += sizeof(__OSContRequesFormat); + } + *ptr = CONT_CMD_END; +} + +void __osPfsGetInitData(u8 *pattern, OSContStatus *data) { + u8 *ptr; + __OSContRequesFormat requestformat; + int i; + u8 bits; + bits = 0; + ptr = (u8 *)&__osPfsPifRam; + for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(__OSContRequesFormat)) { + requestformat = *(__OSContRequesFormat *)ptr; + data->errno = CHNL_ERR(requestformat); + if (data->errno == 0) { + data->type = (requestformat.typel << 8) | (requestformat.typeh); + data->status = requestformat.status; + bits |= 1 << i; + } + data++; + } + *pattern = bits; +} diff --git a/src/os/osPfsNumFiles.c b/src/os/osPfsNumFiles.c new file mode 100755 index 000000000..09d0eba6f --- /dev/null +++ b/src/os/osPfsNumFiles.c @@ -0,0 +1,24 @@ +#include "libultra_internal.h" +#include "PR/os.h" +#include "controller.h" + +s32 osPfsNumFiles(OSPfs *pfs, s32 *max_files, s32 *files_used) +{ + int j; + s32 ret; + __OSDir dir; + int files; + files = 0; + PFS_CHECK_STATUS; + PFS_CHECK_ID; + SET_ACTIVEBANK_TO_ZERO; + for (j = 0; j < pfs->dir_size; j++) + { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir)); + if (dir.company_code != 0 && dir.game_code != 0) + files++; + } + *files_used = files; + *max_files = pfs->dir_size; + return 0; +} diff --git a/src/os/osPfsReadWriteFile.c b/src/os/osPfsReadWriteFile.c new file mode 100644 index 000000000..697a726f4 --- /dev/null +++ b/src/os/osPfsReadWriteFile.c @@ -0,0 +1,101 @@ +#include "libultra_internal.h" +#include "controller.h" + +static s32 __osPfsGetNextPage(OSPfs *pfs, u8 *bank, __OSInode *inode, __OSInodeUnit *page) +{ + s32 ret; + if (*bank != page->inode_t.bank) + { + *bank = page->inode_t.bank; + ERRCK(__osPfsRWInode(pfs, inode, 0, *bank)); + } + *page = inode->inode_page[page->inode_t.page]; + if (page->ipage < pfs->inode_start_page || + page->inode_t.bank >= pfs->banks || + page->inode_t.page <= 0 || + page->inode_t.page >= ARRLEN(inode->inode_page)) + { + if (page->ipage == 1) + return PFS_ERR_INVALID; + return PFS_ERR_INCONSISTENT; + } + return 0; +} +s32 osPfsReadWriteFile(OSPfs *pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8 *data_buffer) +{ + s32 ret; + __OSDir dir; + __OSInode inode; + __OSInodeUnit cur_page; + int cur_block; + int siz_block; + u8 *buffer; + u8 bank; + u16 blockno; + if (file_no >= pfs->dir_size || file_no < 0) + return PFS_ERR_INVALID; + if (size_in_bytes <= 0 || ((size_in_bytes & (BLOCKSIZE - 1)) != 0)) + return PFS_ERR_INVALID; + if (offset < 0 || ((offset & (BLOCKSIZE - 1)) != 0)) + return PFS_ERR_INVALID; + + PFS_CHECK_STATUS; + PFS_CHECK_ID; + SET_ACTIVEBANK_TO_ZERO; + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir)); + + if (dir.start_page.ipage < pfs->inode_start_page || + dir.start_page.inode_t.bank >= pfs->banks || + dir.start_page.inode_t.page <= 0 || + dir.start_page.inode_t.page >= ARRLEN(inode.inode_page)) + { + + if ((dir.start_page.ipage == 1)) + return PFS_ERR_INVALID; + return PFS_ERR_INCONSISTENT; + } + if (flag == PFS_READ && (dir.status & DIR_STATUS_OCCUPIED) == 0) + return PFS_ERR_BAD_DATA; + bank = -1; + cur_block = offset / BLOCKSIZE; + cur_page = dir.start_page; + while (cur_block >= PFS_ONE_PAGE) + { + ERRCK(__osPfsGetNextPage(pfs, &bank, &inode, &cur_page)); + cur_block -= PFS_ONE_PAGE; + } + siz_block = size_in_bytes / BLOCKSIZE; + buffer = data_buffer; + while (siz_block > 0) + { + if (cur_block == PFS_ONE_PAGE) + { + ERRCK(__osPfsGetNextPage(pfs, &bank, &inode, &cur_page)); + cur_block = 0; + } + if (pfs->activebank != cur_page.inode_t.bank) + { + pfs->activebank = cur_page.inode_t.bank; + ERRCK(__osPfsSelectBank(pfs)); + } + blockno = cur_page.inode_t.page * PFS_ONE_PAGE + cur_block; + if (flag == OS_READ) + ret = __osContRamRead(pfs->queue, pfs->channel, blockno, buffer); + else + ret = __osContRamWrite(pfs->queue, pfs->channel, blockno, buffer, FALSE); + if (ret != 0) + return ret; + buffer += BLOCKSIZE; + cur_block++; + siz_block--; + } + if (flag == PFS_WRITE && (dir.status & DIR_STATUS_OCCUPIED) == 0) + { + dir.status |= DIR_STATUS_OCCUPIED; + pfs->activebank = 0; + ERRCK(__osPfsSelectBank(pfs)); + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir, FALSE)); + } + return 0; + +} \ No newline at end of file diff --git a/src/os/osPfsSearchFile.c b/src/os/osPfsSearchFile.c new file mode 100755 index 000000000..dc1bc8a21 --- /dev/null +++ b/src/os/osPfsSearchFile.c @@ -0,0 +1,51 @@ +#include "libultra_internal.h" +#include "controller.h" + +s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, s32 *file_no) +{ + s32 j; + int i; + __OSDir dir; + s32 ret; + int fail; + ret = 0; + PFS_CHECK_ID; + for (j = 0; j < pfs->dir_size; j++) + { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir)); + if ((dir.company_code == company_code) && dir.game_code == game_code) + { + fail = FALSE; + if (game_name != NULL) + { + for (i = 0; i < ARRLEN(dir.game_name); i++) + { + if (dir.game_name[i] != game_name[i]) + { + fail = TRUE; + break; + } + } + } + if (ext_name != NULL && !fail) + { + + for (i = 0; i < ARRLEN(dir.ext_name); i++) + { + if (dir.ext_name[i] != ext_name[i]) + { + fail = TRUE; + break; + } + } + } + if (!fail) + { + *file_no = j; + return ret; + } + } + } + *file_no = -1; + return PFS_ERR_INVALID; +} \ No newline at end of file diff --git a/src/os/osPiGetCmdQueue.c b/src/os/osPiGetCmdQueue.c new file mode 100644 index 000000000..457abc650 --- /dev/null +++ b/src/os/osPiGetCmdQueue.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" + +extern OSMgrArgs __osPiDevMgr; + +OSMesgQueue *osPiGetCmdQueue(void) { + if (!__osPiDevMgr.initialized) { + return NULL; + } + return __osPiDevMgr.cmdQueue; +} diff --git a/src/os/osPiRawReadIo.c b/src/os/osPiRawReadIo.c new file mode 100644 index 000000000..07270788b --- /dev/null +++ b/src/os/osPiRawReadIo.c @@ -0,0 +1,14 @@ +#include "libultra_internal.h" +#include "hardware.h" + +extern u32 osRomBase; + +s32 osPiRawReadIo(u32 a0, u32 *a1) { + register int status; + status = HW_REG(PI_STATUS_REG, u32); + while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + status = HW_REG(PI_STATUS_REG, u32); + } + *a1 = HW_REG(osRomBase | a0, u32); + return 0; +} diff --git a/src/os/osPiRawStartDma.c b/src/os/osPiRawStartDma.c new file mode 100644 index 000000000..ca6044e6e --- /dev/null +++ b/src/os/osPiRawStartDma.c @@ -0,0 +1,56 @@ +#include "libultra_internal.h" +#include "hardware.h" + +extern u32 osRomBase; // TODO: figure out why this is like this + +s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size) { + register int status; + status = HW_REG(PI_STATUS_REG, u32); + while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + status = HW_REG(PI_STATUS_REG, u32); + } + + HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); + + HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | cart_addr) & 0x1fffffff); + + switch (dir) { + case 0: + HW_REG(PI_WR_LEN_REG, u32) = size - 1; + break; + case 1: + HW_REG(PI_RD_LEN_REG, u32) = size - 1; + break; + default: + return -1; + break; + } + return 0; +} + +#ifdef VERSION_EU +/*s32 osPiRawStartDma_2(s32 dir, u32 cart_addr, void *dram_addr, size_t size) { + register int status; + status = HW_REG(PI_STATUS_REG, u32); + while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + status = HW_REG(PI_STATUS_REG, u32); + } + + HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); + + HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | cart_addr) & 0x1fffffff); + + switch (dir) { + case 0: + HW_REG(PI_WR_LEN_REG, u32) = size - 1; + break; + case 1: + HW_REG(PI_RD_LEN_REG, u32) = size - 1; + break; + default: + return -1; + break; + } + return 0; +}*/ +#endif diff --git a/src/os/osPiStartDma.c b/src/os/osPiStartDma.c new file mode 100644 index 000000000..9940ba287 --- /dev/null +++ b/src/os/osPiStartDma.c @@ -0,0 +1,35 @@ +#include "libultra_internal.h" + +extern OSMgrArgs __osPiDevMgr; + +s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr, + size_t nbytes, OSMesgQueue *mq) { + register s32 result; + register OSMesgQueue *cmdQueue; + if (!__osPiDevMgr.initialized) { + return -1; + } + + // TODO: name magic constants + if (direction == OS_READ) { + mb->hdr.type = 11; + } else { + mb->hdr.type = 12; + } + + mb->hdr.pri = priority; + mb->hdr.retQueue = mq; + mb->dramAddr = vAddr; + mb->devAddr = devAddr; + mb->size = nbytes; + mb->piHandle = NULL; + + if (priority == OS_MESG_PRI_HIGH) { + cmdQueue = osPiGetCmdQueue(); + result = osJamMesg(cmdQueue, mb, OS_MESG_NOBLOCK); + } else { + cmdQueue = osPiGetCmdQueue(); + result = osSendMesg(cmdQueue, mb, OS_MESG_NOBLOCK); + } + return result; +} diff --git a/src/os/osRecvMesg.c b/src/os/osRecvMesg.c new file mode 100644 index 000000000..1878e85cb --- /dev/null +++ b/src/os/osRecvMesg.c @@ -0,0 +1,31 @@ +#include "libultra_internal.h" + +s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag) { + register u32 int_disabled; + register OSThread *thread; + int_disabled = __osDisableInt(); + + while (!mq->validCount) { + if (!flag) { + __osRestoreInt(int_disabled); + return -1; + } + __osRunningThread->state = OS_STATE_WAITING; + __osEnqueueAndYield(&mq->mtqueue); + } + + if (msg != NULL) { + *msg = *(mq->first + mq->msg); + } + + mq->first = (mq->first + 1) % mq->msgCount; + mq->validCount--; + + if (mq->fullqueue->next != NULL) { + thread = __osPopThread(&mq->fullqueue); + osStartThread(thread); + } + + __osRestoreInt(int_disabled); + return 0; +} diff --git a/src/os/osSendMesg.c b/src/os/osSendMesg.c new file mode 100644 index 000000000..ee1b50270 --- /dev/null +++ b/src/os/osSendMesg.c @@ -0,0 +1,30 @@ +#include "libultra_internal.h" + +s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) { + register u32 int_disabled; + register s32 index; + register OSThread *s2; + int_disabled = __osDisableInt(); + + while (mq->validCount >= mq->msgCount) { + if (flag == OS_MESG_BLOCK) { + __osRunningThread->state = 8; + __osEnqueueAndYield(&mq->fullqueue); + } else { + __osRestoreInt(int_disabled); + return -1; + } + } + + index = (mq->first + mq->validCount) % mq->msgCount; + mq->msg[index] = msg; + mq->validCount++; + + if (mq->mtqueue->next != NULL) { + s2 = __osPopThread(&mq->mtqueue); + osStartThread(s2); + } + + __osRestoreInt(int_disabled); + return 0; +} diff --git a/src/os/osSetEventMesg.c b/src/os/osSetEventMesg.c new file mode 100644 index 000000000..ebc83537a --- /dev/null +++ b/src/os/osSetEventMesg.c @@ -0,0 +1,18 @@ +#include "libultra_internal.h" + +typedef struct OSEventMessageStruct_0_s { + OSMesgQueue *queue; + OSMesg msg; +} OSEventMessageStruct_0; + +extern OSEventMessageStruct_0 __osEventStateTab[16]; + +void osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg msg) { + register u32 int_disabled; + OSEventMessageStruct_0 *msgs; + int_disabled = __osDisableInt(); + msgs = __osEventStateTab + e; + msgs->queue = mq; + msgs->msg = msg; + __osRestoreInt(int_disabled); +} diff --git a/src/os/osSetThreadPri.c b/src/os/osSetThreadPri.c new file mode 100644 index 000000000..84a9a4c14 --- /dev/null +++ b/src/os/osSetThreadPri.c @@ -0,0 +1,24 @@ +#include "libultra_internal.h" + +void osSetThreadPri(OSThread *thread, OSPri pri) { + register u32 int_disabled = __osDisableInt(); + if (thread == NULL) { + thread = __osRunningThread; + } + + if (thread->priority != pri) { + thread->priority = pri; + if (thread != __osRunningThread) { + if (thread->state != OS_STATE_STOPPED) { + __osDequeueThread(thread->queue, thread); + __osEnqueueThread(thread->queue, thread); + } + } + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + } + } + + __osRestoreInt(int_disabled); +} diff --git a/src/os/osSetTime.c b/src/os/osSetTime.c new file mode 100644 index 000000000..cad09ab27 --- /dev/null +++ b/src/os/osSetTime.c @@ -0,0 +1,7 @@ +#include "libultra_internal.h" + +extern OSTime __osCurrentTime; + +void osSetTime(OSTime time) { + __osCurrentTime = time; +} diff --git a/src/os/osSetTimer.c b/src/os/osSetTimer.c new file mode 100644 index 000000000..dda659f14 --- /dev/null +++ b/src/os/osSetTimer.c @@ -0,0 +1,23 @@ +#include "libultra_internal.h" + +extern OSTimer *__osTimerList; +extern u64 __osInsertTimer(OSTimer *); + +u32 osSetTimer(OSTimer *a0, OSTime a1, u64 a2, OSMesgQueue *a3, OSMesg a4) { + u64 sp18; + a0->next = NULL; + a0->prev = NULL; + a0->interval = a2; + if (a1 != 0) { + a0->remaining = a1; + } else { + a0->remaining = a2; + } + a0->mq = a3; + a0->msg = a4; + sp18 = __osInsertTimer(a0); + if (__osTimerList->next == a0) { + __osSetTimerIntr(sp18); + } + return 0; +} diff --git a/src/os/osSpTaskLoadGo.c b/src/os/osSpTaskLoadGo.c new file mode 100644 index 000000000..93f86dcf8 --- /dev/null +++ b/src/os/osSpTaskLoadGo.c @@ -0,0 +1,65 @@ +#include "libultra_internal.h" +#include "hardware.h" +#include + +#define _osVirtualToPhysical(ptr) \ + if (ptr != NULL) { \ + ptr = (void *) osVirtualToPhysical(ptr); \ + } + +extern OSTask D_801964C0; +OSTask *_VirtualToPhysicalTask(OSTask *task) { + OSTask *physicalTask; + physicalTask = &D_801964C0; + bcopy(task, physicalTask, sizeof(OSTask)); + _osVirtualToPhysical(physicalTask->t.ucode); + _osVirtualToPhysical(physicalTask->t.ucode_data); + _osVirtualToPhysical(physicalTask->t.dram_stack); + _osVirtualToPhysical(physicalTask->t.output_buff); + _osVirtualToPhysical(physicalTask->t.output_buff_size); + _osVirtualToPhysical(physicalTask->t.data_ptr); + _osVirtualToPhysical(physicalTask->t.yield_data_ptr); + return physicalTask; +} + +void osSpTaskLoad(OSTask *task) { + OSTask *physicalTask; + physicalTask = _VirtualToPhysicalTask(task); + if (physicalTask->t.flags & M_TASK_FLAG0) { + physicalTask->t.ucode_data = physicalTask->t.yield_data_ptr; + physicalTask->t.ucode_data_size = physicalTask->t.yield_data_size; + task->t.flags &= ~M_TASK_FLAG0; +#ifdef VERSION_SH + if (physicalTask->t.flags & M_TASK_FLAG2) { + physicalTask->t.ucode = HW_REG((uintptr_t)task->t.yield_data_ptr + 0xBFC, u64*); + } +#endif + } + osWritebackDCache(physicalTask, sizeof(OSTask)); + __osSpSetStatus(SPSTATUS_CLEAR_SIGNAL0 | SPSTATUS_CLEAR_SIGNAL1 | SPSTATUS_CLEAR_SIGNAL2 + | SPSTATUS_SET_INTR_ON_BREAK); + while (__osSpSetPc((void *) SP_IMEM_START) == -1) { + ; + } + while (__osSpRawStartDma(1, (void *) (SP_IMEM_START - sizeof(*physicalTask)), physicalTask, + sizeof(OSTask)) + == -1) { + ; + } + while (__osSpDeviceBusy()) { + ; + } + while (__osSpRawStartDma(1, (void *) SP_IMEM_START, physicalTask->t.ucode_boot, + physicalTask->t.ucode_boot_size) + == -1) { + ; + } +} + +void osSpTaskStartGo(UNUSED OSTask *task) { + while (__osSpDeviceBusy()) { + ; + } + __osSpSetStatus(SPSTATUS_SET_INTR_ON_BREAK | SPSTATUS_CLEAR_SSTEP | SPSTATUS_CLEAR_BROKE + | SPSTATUS_CLEAR_HALT); +} diff --git a/src/os/osSpTaskYield.c b/src/os/osSpTaskYield.c new file mode 100644 index 000000000..92546a8fe --- /dev/null +++ b/src/os/osSpTaskYield.c @@ -0,0 +1,5 @@ +#include "libultra_internal.h" + +void osSpTaskYield(void) { + __osSpSetStatus(SPSTATUS_SET_SIGNAL0); +} diff --git a/src/os/osSpTaskYielded.c b/src/os/osSpTaskYielded.c new file mode 100644 index 000000000..fa0dcbc2e --- /dev/null +++ b/src/os/osSpTaskYielded.c @@ -0,0 +1,17 @@ +#include "libultra_internal.h" + +OSYieldResult osSpTaskYielded(OSTask *task) { + s32 status; + u32 int_disabledult; + status = __osSpGetStatus(); + if (status & SPSTATUS_SIGNAL1_SET) { + int_disabledult = 1; + } else { + int_disabledult = 0; + } + if (status & SPSTATUS_SIGNAL0_SET) { + task->t.flags |= int_disabledult; + task->t.flags &= ~(M_TASK_FLAG1); + } + return int_disabledult; +} diff --git a/src/os/osStartThread.c b/src/os/osStartThread.c new file mode 100644 index 000000000..a9a8ce89c --- /dev/null +++ b/src/os/osStartThread.c @@ -0,0 +1,37 @@ +#include "libultra_internal.h" + +void osStartThread(OSThread *thread) { + register u32 int_disabled; + register uintptr_t state; + int_disabled = __osDisableInt(); + state = thread->state; + + if (state != OS_STATE_STOPPED) { + if (state == OS_STATE_WAITING) { + do { + } while (0); + thread->state = OS_STATE_RUNNABLE; + __osEnqueueThread(&__osRunQueue, thread); + } + } else { + if (thread->queue == NULL || thread->queue == &__osRunQueue) { + thread->state = OS_STATE_RUNNABLE; + + __osEnqueueThread(&__osRunQueue, thread); + } else { + thread->state = OS_STATE_WAITING; + __osEnqueueThread(thread->queue, thread); + state = (uintptr_t) __osPopThread(thread->queue); + __osEnqueueThread(&__osRunQueue, (OSThread *) state); + } + } + if (__osRunningThread == NULL) { + __osDispatchThread(); + } else { + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + } + } + __osRestoreInt(int_disabled); +} diff --git a/src/os/osSyncPrintf.c b/src/os/osSyncPrintf.c new file mode 100644 index 000000000..a7e2035e9 --- /dev/null +++ b/src/os/osSyncPrintf.c @@ -0,0 +1,14 @@ +#include "libultra_internal.h" +#include "libc/stdarg.h" + +// neither function matches + +void osSyncPrintf(const char *fmt, ...) { + if (1); +} + +void func_800CF774(const char *fmt, ...) { + va_list args; + + _Printf(osSyncPrintf, 0, fmt, &args); +} diff --git a/src/os/osTimer.c b/src/os/osTimer.c new file mode 100644 index 000000000..b14139a94 --- /dev/null +++ b/src/os/osTimer.c @@ -0,0 +1,87 @@ +#include "libultra_internal.h" + +OSTimer __osBaseTimer; +OSTime __osCurrentTime; +u32 __osBaseCounter; +u32 __osViIntrCount; +u32 __osTimerCounter; + +OSTimer *__osTimerList = &__osBaseTimer; +void __osTimerServicesInit(void) { + __osCurrentTime = 0; + __osBaseCounter = 0; + __osViIntrCount = 0; + __osTimerList->prev = __osTimerList; + __osTimerList->next = __osTimerList->prev; + __osTimerList->remaining = 0; + __osTimerList->interval = __osTimerList->remaining; + __osTimerList->mq = NULL; + __osTimerList->msg = NULL; +} + +void __osTimerInterrupt(void) { + OSTimer *sp24; + u32 sp20; + u32 sp1c; + if (__osTimerList->next == __osTimerList) { + return; + } + while (TRUE) { + sp24 = __osTimerList->next; + if (sp24 == __osTimerList) { + __osSetCompare(0); + __osTimerCounter = 0; + break; + } + sp20 = osGetCount(); + sp1c = sp20 - __osTimerCounter; + __osTimerCounter = sp20; + if (sp1c < sp24->remaining) { + sp24->remaining -= sp1c; + __osSetTimerIntr(sp24->remaining); + return; + } else { + sp24->prev->next = sp24->next; + sp24->next->prev = sp24->prev; + sp24->next = NULL; + sp24->prev = NULL; + if (sp24->mq != NULL) { + osSendMesg(sp24->mq, sp24->msg, OS_MESG_NOBLOCK); + } + if (sp24->interval != 0) { + sp24->remaining = sp24->interval; + __osInsertTimer(sp24); + } + } + } +} + +void __osSetTimerIntr(u64 a0) { + u64 tmp; + s32 intDisabled = __osDisableInt(); + __osTimerCounter = osGetCount(); + tmp = a0 + __osTimerCounter; + __osSetCompare(tmp); + __osRestoreInt(intDisabled); +} + +u64 __osInsertTimer(OSTimer *a0) { + OSTimer *sp34; + u64 sp28; + s32 intDisabled; + intDisabled = __osDisableInt(); + for (sp34 = __osTimerList->next, sp28 = a0->remaining; sp34 != __osTimerList && sp28 > sp34->remaining; + sp28 -= sp34->remaining, sp34 = sp34->next) { + ; + } + a0->remaining = sp28; + if (sp34 != __osTimerList) { + sp34->remaining -= sp28; + } + a0->next = sp34; + a0->prev = sp34->prev; + sp34->prev->next = a0; + sp34->prev = a0; + __osRestoreInt(intDisabled); + return sp28; +} diff --git a/src/os/osViBlack.c b/src/os/osViBlack.c new file mode 100644 index 000000000..277dfedb2 --- /dev/null +++ b/src/os/osViBlack.c @@ -0,0 +1,14 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +// TODO: name magic constants +void osViBlack(u8 active) { + register u32 int_disabled = __osDisableInt(); + if (active) { + __osViNext->unk00 |= 0x20; + } else { + __osViNext->unk00 &= ~0x20; + } + __osRestoreInt(int_disabled); +} diff --git a/src/os/osViData.c b/src/os/osViData.c new file mode 100644 index 000000000..feab7e18a --- /dev/null +++ b/src/os/osViData.c @@ -0,0 +1,137 @@ +#include "libultra_internal.h" + +#if defined(VERSION_EU) || defined(VERSION_SH) +OSViMode osViModePalLan1 = { + /*type*/ 16, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, +#ifdef VERSION_EU + /*burst*/ 67380026, +#else + /*burst*/ 72621626, +#endif + /*vSync*/ 625, +#ifdef VERSION_EU + /*hSync*/ 1379433, + /*leap*/ 208604270, +#else + /*hSync*/ 1510505, + /*leap*/ 208604269, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } +}; + +OSViMode osViModeMpalLan1 = { + /*type*/ 30, //osViModePalLan1 + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; + +OSViMode osViModeNtscLan1 = { + /*type*/ 2, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; +#else +OSViMode osViModePalLan1 = { + /*type*/ 2, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; + +OSViMode osViModeMpalLan1 = { + /*type*/ 16, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 67380026, + /*vSync*/ 625, + /*hSync*/ 1379433, + /*leap*/ 208604270, + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } +}; +#endif diff --git a/src/os/osViSetEvent.c b/src/os/osViSetEvent.c new file mode 100644 index 000000000..6969ec8f5 --- /dev/null +++ b/src/os/osViSetEvent.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount) { + register u32 int_disabled = __osDisableInt(); + (__osViNext)->mq = mq; + (__osViNext)->msg = msg; + (__osViNext)->retraceCount = retraceCount; + __osRestoreInt(int_disabled); +} diff --git a/src/os/osViSetMode.c b/src/os/osViSetMode.c new file mode 100644 index 000000000..716596fb5 --- /dev/null +++ b/src/os/osViSetMode.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSetMode(OSViMode *mode) { + register u32 int_disabled = __osDisableInt(); + __osViNext->modep = mode; + __osViNext->unk00 = 1; + __osViNext->features = __osViNext->modep->comRegs.ctrl; + __osRestoreInt(int_disabled); +} diff --git a/src/os/osViSetSpecialFeatures.c b/src/os/osViSetSpecialFeatures.c new file mode 100644 index 000000000..c1bf52b63 --- /dev/null +++ b/src/os/osViSetSpecialFeatures.c @@ -0,0 +1,35 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSetSpecialFeatures(u32 func) { + register u32 int_disabled = __osDisableInt(); + if (func & OS_VI_GAMMA_ON) { + __osViNext->features |= OS_VI_GAMMA; + } + if (func & OS_VI_GAMMA_OFF) { + __osViNext->features &= ~OS_VI_GAMMA; + } + if (func & OS_VI_GAMMA_DITHER_ON) { + __osViNext->features |= OS_VI_GAMMA_DITHER; + } + if (func & OS_VI_GAMMA_DITHER_OFF) { + __osViNext->features &= ~OS_VI_GAMMA_DITHER; + } + if (func & OS_VI_DIVOT_ON) { + __osViNext->features |= OS_VI_DIVOT; + } + if (func & OS_VI_DIVOT_OFF) { + __osViNext->features &= ~OS_VI_DIVOT; + } + if (func & OS_VI_DITHER_FILTER_ON) { + __osViNext->features |= OS_VI_DITHER_FILTER; + __osViNext->features &= ~(OS_VI_UNK200 | OS_VI_UNK100); + } + if (func & OS_VI_DITHER_FILTER_OFF) { + __osViNext->features &= ~OS_VI_DITHER_FILTER; + __osViNext->features |= __osViNext->modep->comRegs.ctrl & (OS_VI_UNK200 | OS_VI_UNK100); + } + __osViNext->unk00 |= 8; + __osRestoreInt(int_disabled); +} diff --git a/src/os/osViSwapBuffer.c b/src/os/osViSwapBuffer.c new file mode 100644 index 000000000..c2cb1d506 --- /dev/null +++ b/src/os/osViSwapBuffer.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSwapBuffer(void *vaddr) { + u32 int_disabled = __osDisableInt(); + __osViNext->buffer = vaddr; + __osViNext->unk00 |= 0x10; // TODO: figure out what this flag means + __osRestoreInt(int_disabled); +} diff --git a/src/os/osViTable.c b/src/os/osViTable.c new file mode 100644 index 000000000..424f7ccac --- /dev/null +++ b/src/os/osViTable.c @@ -0,0 +1,1101 @@ +#include "libultra_internal.h" + +OSViMode osViModeTable[] = { + /*osViModeNtscLpn1*/ + { /*type*/ 0, + /*comRegs*/ + { /*ctrl*/ 12814, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLpf1*/ + { /*type*/ 1, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLan1*/ + { /*type*/ 2, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLaf1*/ + { /*type*/ 3, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLpn2*/ + { /*type*/ 4, + /*comRegs*/ + { /*ctrl*/ 13071, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLpf2*/ + { /*type*/ 5, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLan2*/ + { /*type*/ 6, + /*comRegs*/ + { /*ctrl*/ 12319, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscLaf2*/ + { /*type*/ 7, + /*comRegs*/ + { /*ctrl*/ 12383, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHpn1*/ + { /*type*/ 8, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 1280, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHpf1*/ + { /*type*/ 9, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 640, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHan1*/ + { /*type*/ 10, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 1280, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHaf1*/ + { /*type*/ 11, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 640, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHpn2*/ + { /*type*/ 12, + /*comRegs*/ + { /*ctrl*/ 13135, + /*width*/ 1280, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModeNtscHpf2*/ + { /*type*/ 13, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 640, + /*burst*/ 65348153, + /*vSync*/ 524, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + +#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) + /*osViModePalLpn1*/ + { /*type*/ 14, + /*comRegs*/ + { /*ctrl*/ 12814, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 625, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } }, + /*osViModePalLpf1*/ + { /*type*/ 15, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalLan1*/ + { /*type*/ 16, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 625, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } }, + /*osViModePalLaf1*/ + { /*type*/ 17, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalLpn2*/ + { /*type*/ 18, + /*comRegs*/ + { /*ctrl*/ 13071, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 625, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } }, + /*osViModePalLpf2*/ + { /*type*/ 19, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalLan2*/ + { /*type*/ 20, + /*comRegs*/ + { /*ctrl*/ 12319, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 625, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } }, + /*osViModePalLaf2*/ + { /*type*/ 21, + /*comRegs*/ + { /*ctrl*/ 12383, + /*width*/ 320, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHpn1*/ + { /*type*/ 22, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 1280, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHpf1*/ + { /*type*/ 23, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 640, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHan1*/ + { /*type*/ 24, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 1280, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHaf1*/ + { /*type*/ 25, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 640, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHpn2*/ + { /*type*/ 26, + /*comRegs*/ + { /*ctrl*/ 13135, + /*width*/ 1280, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, + /*osViModePalHpf2*/ + { /*type*/ 27, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 640, +#ifdef VERSION_SH + /*burst*/ 72621626, +#else + /*burst*/ 67380026, +#endif + /*vSync*/ 624, +#ifdef VERSION_SH + /*hSync*/ 1510505, + /*leap*/ 208604269, +#else + /*hSync*/ 1379433, + /*leap*/ 208604270, +#endif + /*hStart*/ 8389376, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 6095415, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 33556480, + /*vStart*/ 6226489, + /*vBurst*/ 852585, + /*vIntr*/ 2 } } }, +#endif +#if defined(VERSION_US) || defined(VERSION_EU) || defined (VERSION_SH) + /*osViModePalLpn1*/ + { /*type*/ 28, + /*comRegs*/ + { /*ctrl*/ 12814, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLpf1*/ + { /*type*/ 29, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLan1*/ + { /*type*/ 30, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLaf1*/ + { /*type*/ 31, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLpn2*/ + { /*type*/ 32, + /*comRegs*/ + { /*ctrl*/ 13071, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLpf2*/ + { /*type*/ 33, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLan2*/ + { /*type*/ 34, + /*comRegs*/ + { /*ctrl*/ 12319, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalLaf2*/ + { /*type*/ 35, + /*comRegs*/ + { /*ctrl*/ 12383, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 16778240, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 1280, + /*yScale*/ 50332672, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHpn1*/ + { /*type*/ 36, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 1280, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHpf1*/ + { /*type*/ 37, + /*comRegs*/ + { /*ctrl*/ 12878, + /*width*/ 640, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHan1*/ + { /*type*/ 38, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 1280, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHaf1*/ + { /*type*/ 39, + /*comRegs*/ + { /*ctrl*/ 12382, + /*width*/ 640, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 1280, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHpn2*/ + { /*type*/ 40, + /*comRegs*/ + { /*ctrl*/ 13135, + /*width*/ 1280, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 1024, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } }, + /*osViModePalHpf2*/ + { /*type*/ 41, + /*comRegs*/ + { /*ctrl*/ 12879, + /*width*/ 640, + /*burst*/ 73735737, + /*vSync*/ 524, + /*hSync*/ 3088, + /*leap*/ 203164700, + /*hStart*/ 7078636, + /*xScale*/ 1024, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 2560, + /*yScale*/ 33556480, + /*vStart*/ 2294269, + /*vBurst*/ 721410, + /*vIntr*/ 2 }, + { /*origin*/ 5120, + /*yScale*/ 33556480, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } } +#endif +}; diff --git a/src/os/osVirtualToPhysical.c b/src/os/osVirtualToPhysical.c new file mode 100644 index 000000000..b1fb1a55d --- /dev/null +++ b/src/os/osVirtualToPhysical.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +uintptr_t osVirtualToPhysical(void *addr) { + if ((uintptr_t) addr >= 0x80000000 && (uintptr_t) addr < 0xa0000000) { + return ((uintptr_t) addr & 0x1fffffff); + } else if ((uintptr_t) addr >= 0xa0000000 && (uintptr_t) addr < 0xc0000000) { + return ((uintptr_t) addr & 0x1fffffff); + } else { + return __osProbeTLB(addr); + } +} diff --git a/src/os/osYieldThread.c b/src/os/osYieldThread.c new file mode 100755 index 000000000..ff39cf8c1 --- /dev/null +++ b/src/os/osYieldThread.c @@ -0,0 +1,9 @@ +#include "libultra_internal.h" +#include "osint.h" + +void osYieldThread(void){ + register u32 saveMask = __osDisableInt(); + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + __osRestoreInt(saveMask); +} diff --git a/src/os/osint.h b/src/os/osint.h new file mode 100644 index 000000000..f2220f4db --- /dev/null +++ b/src/os/osint.h @@ -0,0 +1,49 @@ +#ifndef _OSINT_H +#define _OSINT_H +#include "libultra_internal.h" + +typedef struct __OSEventState +{ + OSMesgQueue *messageQueue; + OSMesg message; +} __OSEventState; +extern struct __osThreadTail +{ + OSThread *next; + OSPri priority; +} __osThreadTail; + +//maybe should be in exceptasm.h? +extern void __osEnqueueAndYield(OSThread **); +extern void __osDequeueThread(OSThread **, OSThread *); +extern void __osEnqueueThread(OSThread **, OSThread *); +extern OSThread *__osPopThread(OSThread **); +extern void __osDispatchThread(void); + +extern void __osSetTimerIntr(OSTime); +extern OSTime __osInsertTimer(OSTimer *); +extern void __osTimerInterrupt(void); +extern u32 __osProbeTLB(void *); +extern int __osSpDeviceBusy(void); + +extern OSThread *__osRunningThread; +extern OSThread *__osActiveQueue; +extern OSThread *__osFaultedThread; +extern OSThread *__osRunQueue; + +extern OSTimer *__osTimerList; +extern OSTimer __osBaseTimer; +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 __osViIntrCount; +extern u32 __osTimerCounter; + +extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; + + +//not sure if this should be here +extern s32 osViClock; +extern void __osTimerServicesInit(void); +extern s32 __osAiDeviceBusy(void); +extern int __osDpDeviceBusy(void); +#endif diff --git a/src/os/piint.h b/src/os/piint.h new file mode 100644 index 000000000..f2793962f --- /dev/null +++ b/src/os/piint.h @@ -0,0 +1,147 @@ +#ifndef _PIINT_H +#define _PIINT_H +#include "PR/os_internal.h" +#include "PR/rcp.h" +#include "PR/os_pi.h" +#include "PR/os.h" + +//https://github.com/LuigiBlood/64dd/wiki/Memory-Map + +#define LEO_BASE_REG 0x05000000 + +#define LEO_CMD (LEO_BASE_REG + 0x508) +#define LEO_STATUS (LEO_BASE_REG + 0x508) + +#define LEO_BM_CTL (LEO_BASE_REG + 0x510) +#define LEO_BM_STATUS (LEO_BASE_REG + 0x510) + +#define LEO_SEQ_CTL (LEO_BASE_REG + 0x518) +#define LEO_SEQ_STATUS (LEO_BASE_REG + 0x518) + +#define LEO_C2_BUFF (LEO_BASE_REG + 0x000) //C2 Sector Buffer +#define LEO_SECTOR_BUFF (LEO_BASE_REG + 0x400) //Data Sector Buffer +#define LEO_DATA (LEO_BASE_REG + 0x500) //Data +#define LEO_MISC_REG (LEO_BASE_REG + 0x504) //Misc Register +#define LEO_CUR_TK (LEO_BASE_REG + 0x50C) //Current Track +#define LEO_ERR_SECTOR (LEO_BASE_REG + 0x514) //Sector Error Status +#define LEO_CUR_SECTOR (LEO_BASE_REG + 0x51C) //Current Sector +#define LEO_HARD_RESET (LEO_BASE_REG + 0x520) //Hard Reset +#define LEO_C1_S0 (LEO_BASE_REG + 0x524) //C1 +#define LEO_HOST_SECBYTE (LEO_BASE_REG + 0x528) //Sector Size (in bytes) +#define LEO_C1_S2 (LEO_BASE_REG + 0x52C) //C1 +#define LEO_SEC_BYTE (LEO_BASE_REG + 0x530) //Sectors per Block, Full Size +#define LEO_C1_S4 (LEO_BASE_REG + 0x534) //C1 +#define LEO_C1_S6 (LEO_BASE_REG + 0x538) //C1 +#define LEO_CUR_ADDR (LEO_BASE_REG + 0x53C) //Current Address? +#define LEO_ID_REG (LEO_BASE_REG + 0x540) //ID +#define LEO_TEST_REG (LEO_BASE_REG + 0x544) //Test Read +#define LEO_TEST_PIN_SEL (LEO_BASE_REG + 0x548) //Test Write +#define LEO_RAM_ADDR (LEO_BASE_REG + 0x580) //Microsequencer RAM + +#define LEO_STATUS_PRESENCE_MASK 0xFFFF + +#define LEO_STATUS_DATA_REQUEST 0x40000000 +#define LEO_STATUS_C2_TRANSFER 0x10000000 +#define LEO_STATUS_BUFFER_MANAGER_ERROR 0x08000000 +#define LEO_STATUS_BUFFER_MANAGER_INTERRUPT 0x04000000 +#define LEO_STATUS_MECHANIC_INTERRUPT 0x02000000 +#define LEO_STATUS_DISK_PRESENT 0x01000000 +#define LEO_STATUS_BUSY_STATE 0x00800000 +#define LEO_STATUS_RESET_STATE 0x00400000 +#define LEO_STATUS_MOTOR_NOT_SPINNING 0x00100000 +#define LEO_STATUS_HEAD_RETRACTED 0x00080000 +#define LEO_STATUS_WRITE_PROTECT_ERROR 0x00040000 +#define LEO_STATUS_MECHANIC_ERROR 0x00020000 +#define LEO_STATUS_DISK_CHANGE 0x00010000 + +#define LEO_STATUS_MODE_MASK (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_SLEEP (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_STANDBY (LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_ACTIVE 0 + +#define LEO_CUR_TK_INDEX_LOCK 0x60000000 + +#define LEO_BM_STATUS_RUNNING 0x80000000 //Running +#define LEO_BM_STATUS_ERROR 0x04000000 //Error +#define LEO_BM_STATUS_MICRO 0x02000000 //Micro Status? +#define LEO_BM_STATUS_BLOCK 0x01000000 //Block Transfer +#define LEO_BM_STATUS_C1CORRECTION 0x00800000 //C1 Correction +#define LEO_BM_STATUS_C1DOUBLE 0x00400000 //C1 Double +#define LEO_BM_STATUS_C1SINGLE 0x00200000 //C1 Single +#define LEO_BM_STATUS_C1ERROR 0x00010000 //C1 Error + +#define LEO_BM_CTL_START 0x80000000 //Start Buffer Manager +#define LEO_BM_CTL_MODE 0x40000000 //Buffer Manager Mode +#define LEO_BM_CTL_IMASK 0x20000000 //BM Interrupt Mask +#define LEO_BM_CTL_RESET 0x10000000 //Buffer Manager Reset +#define LEO_BM_CTL_DISABLE_OR 0x08000000 //Disable OR Check? +#define LEO_BM_CTL_DISABLE_C1 0x04000000 //Disable C1 Correction +#define LEO_BM_CTL_BLOCK 0x02000000 //Block Transfer +#define LEO_BM_CTL_CLR_MECHANIC_INTR 0x01000000 //Mechanic Interrupt Reset + +#define LEO_BM_CTL_CONTROL_MASK 0xFF000000 +#define LEO_BM_CTL_SECTOR_MASK 0x00FF0000 +#define LEO_BM_CTL_SECTOR_SHIFT 16 + +#define LEO_CMD_TYPE_0 0 //TODO: name +#define LEO_CMD_TYPE_1 1 //TODO: name +#define LEO_CMD_TYPE_2 2 //TODO: name + +#define LEO_ERROR_GOOD 0 +#define LEO_ERROR_4 4 //maybe busy? +#define LEO_ERROR_22 22 // +#define LEO_ERROR_23 23 //unrecovered read error? +#define LEO_ERROR_24 24 //no reference position found? +#define LEO_ERROR_29 29 // + +extern OSDevMgr __osPiDevMgr; +extern OSPiHandle *__osCurrentHandle[2]; +extern OSPiHandle CartRomHandle; +extern OSPiHandle LeoDiskHandle; +extern OSMesgQueue __osPiAccessQueue; +extern u32 __osPiAccessQueueEnabled; + +int __osPiDeviceBusy(void); +void __osDevMgrMain(void *); +void __osPiCreateAccessQueue(void); +void __osPiRelAccess(void); +void __osPiGetAccess(void); +OSMesgQueue *osPiGetCmdQueue(void); + +#define OS_RAMROM_STACKSIZE 1024 + +#define WAIT_ON_IOBUSY(stat) \ + stat = IO_READ(PI_STATUS_REG); \ + while (stat & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) \ + stat = IO_READ(PI_STATUS_REG); + +#define UPDATE_REG(reg, var) \ + if (cHandle->var != pihandle->var) \ + IO_WRITE(reg, pihandle->var); + +#define EPI_SYNC(pihandle, stat, domain) \ + \ + WAIT_ON_IOBUSY(stat) \ + \ + domain = pihandle->domain; \ + if (__osCurrentHandle[domain] != pihandle) \ + { \ + OSPiHandle *cHandle = __osCurrentHandle[domain]; \ + if (domain == PI_DOMAIN1) \ + { \ + UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); \ + } \ + else \ + { \ + UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); \ + } \ + __osCurrentHandle[domain] = pihandle; \ + } + +#endif diff --git a/src/os/printf.h b/src/os/printf.h new file mode 100644 index 000000000..be3669edd --- /dev/null +++ b/src/os/printf.h @@ -0,0 +1,37 @@ +#ifndef _PRINTF_H_ +#define _PRINTF_H_ +#include + +typedef struct +{ + union { + /* 00 */ s64 s64; + u64 u64; + f64 f64; + u32 u32; + u16 u16; + } value; + /* 08 */ char *buff; + /* 0c */ s32 part1_len; + /* 10 */ s32 num_leading_zeros; + /* 14 */ s32 part2_len; + /* 18 */ s32 num_mid_zeros; + /* 1c */ s32 part3_len; + /* 20 */ s32 num_trailing_zeros; + /* 24 */ s32 precision; + /* 28 */ s32 width; + /* 2c */ u32 size; + /* 30 */ u32 flags; + /* 34 */ u8 length; +} printf_struct; + +#define FLAGS_SPACE 1 +#define FLAGS_PLUS 2 +#define FLAGS_MINUS 4 +#define FLAGS_HASH 8 +#define FLAGS_ZERO 16 +s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args); +void _Litob(printf_struct *args, u8 type); +void func_800D8890(printf_struct *args, u8 type); +void _Ldtob(printf_struct *args, u8 type); +#endif diff --git a/src/os/sprintf.c b/src/os/sprintf.c new file mode 100644 index 000000000..57a7e99d4 --- /dev/null +++ b/src/os/sprintf.c @@ -0,0 +1,21 @@ +#include +#include "libultra_internal.h" +#include "printf.h" +#include + +char *proutSprintf(char *dst, const char *src, size_t count); + +int sprintf(char *dst, const char *fmt, ...) { + s32 written; + va_list args; + va_start(args, fmt); + written = _Putfld(proutSprintf, dst, fmt, args); + if (written >= 0) { + dst[written] = 0; + } + return written; +} + +char *proutSprintf(char *dst, const char *src, size_t count) { + return (char *) memcpy((u8 *) dst, (u8 *) src, count) + count; +} diff --git a/src/os/string.c b/src/os/string.c new file mode 100644 index 000000000..dbffaa1d3 --- /dev/null +++ b/src/os/string.c @@ -0,0 +1,31 @@ +#include "libultra_internal.h" +#include + +void *memcpy(void *dst, const void *src, size_t size) { + u8 *_dst = dst; + const u8 *_src = src; + while (size > 0) { + *_dst++ = *_src++; + size--; + } + return dst; +} + +size_t strlen(const char *str) { + const u8 *ptr = (const u8 *) str; + while (*ptr) { + ptr++; + } + return (const char *) ptr - str; +} + +char *strchr(const char *str, s32 ch) { + u8 c = ch; + while (*(u8 *)str != c) { + if (*(u8 *)str == 0) { + return NULL; + } + str++; + } + return (char *) str; +} diff --git a/tools/set_o32abi_bit.py b/tools/set_o32abi_bit.py new file mode 100644 index 000000000..db86ca672 --- /dev/null +++ b/tools/set_o32abi_bit.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import argparse, struct, sys + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('file', help='input file') + args = parser.parse_args() + + with open(args.file, 'r+b') as f: + magic = struct.unpack('>I', f.read(4))[0] + if magic != 0x7F454C46: + print('Error: Not an ELF file') + sys.exit(1) + + f.seek(36) + flags = struct.unpack('>I', f.read(4))[0] + # if flags & 0xF0000000 != 0x20000000: # test for mips3 + # print('Error: Architecture not mips3') + # sys.exit(1) + + flags |= 0x00001000 # set EF_MIPS_ABI_O32 + f.seek(36) + f.write(struct.pack('>I', flags)) + + diff --git a/undefined_syms.txt b/undefined_syms.txt index 1c49b4cd0..e48927d6f 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -634,15 +634,15 @@ d_course_skyscraper_vertex = 0x0F000000; -D_80000300 = 0x80000300; +osTvType = 0x80000300; D_8015C000 = 0x8015C000; -D_80000308 = 0x80000308; -D_8000030C = 0x8000030C; -D_8000031C = 0x8000031C; +osRomBase = 0x80000308; +osResetType = 0x8000030C; +osAppNmiBuffer = 0x8000031C; D_8000035C = 0x8000035C; D_80004334 = 0x80004334; - +D_800EA5E8 = 0x800EA5E8; D_800DFF88 = 0x800DFF88;