From 8c7fdb559fd8df74a49c8a6141e38b92173c2f32 Mon Sep 17 00:00:00 2001 From: David Benepe Date: Sat, 10 Jul 2021 21:23:12 -0500 Subject: [PATCH] Decompiled osEepromWrite and __osPackEepWriteData --- Makefile | 22 +-- README.md | 16 +- asm/non_matchings/memory/func_80071D30.s | 4 +- asm/non_matchings/memory/func_80071E58.s | 4 +- include/controller.h | 9 +- include/siint.h | 10 ++ .../osEepromRead_0CEE80/osEepromRead.s | 20 +-- .../__osEepStatus.s | 28 ++-- .../osEepromWrite_0CF180/osEepromWrite.s | 118 -------------- .../unknown_0CD820/func_800CCC20.s | 4 +- .../unknown_0CD820/func_800CCFE0.s | 8 +- .../unknown_0CDE90/__osPfsRequestData.s | 4 +- .../unknown_0CE370/__osContRamWrite.s | 4 +- .../unknown_0CE8A0/__osContRamRead.s | 4 +- .../unknown_0CF070/__osPackEepReadData.s | 8 +- .../unknown_0CF330/__osPackEepWriteData.s | 72 --------- lib/src/{ => os}/__osSiRawReadIo.c | 0 lib/src/{ => os}/__osSiRawWriteIo.c | 0 lib/src/{ => os}/__osSpSetStatus.c | 0 lib/src/{ => os}/osCreateThread.c | 0 lib/src/{ => os}/osGetThreadPri.c | 0 lib/src/{ => os}/osGetTime.c | 0 lib/src/{ => os}/osJamMesg.c | 0 lib/src/{ => os}/osPfsFreeBlocks.c | 0 lib/src/{ => os}/osPiGetCmdQueue.c | 0 lib/src/{ => os}/osPiStartDma.c | 0 lib/src/{ => os}/osRecvMesg.c | 0 lib/src/{ => os}/osSendMesg.c | 0 lib/src/{ => os}/osSetEventMesg.c | 0 lib/src/{ => os}/osSetTime.c | 0 lib/src/{ => os}/osStartThread.c | 0 lib/src/{ => os}/osStopThread.c | 0 lib/src/{ => os}/osViBlack.c | 0 lib/src/{ => os}/osViSwapBuffer.c | 0 lib/src/osEepromWrite.c | 150 +++++++++++++++++- lib/src/unknown_0CD820.c | 2 +- lib/src/unknown_0CDE90.c | 2 +- lib/src/unknown_0CE200.c | 2 +- lib/src/unknown_0CF330.c | 2 - tools/python/generate_ld.py | 2 +- 40 files changed, 225 insertions(+), 270 deletions(-) create mode 100644 include/siint.h rename lib/asm/non_matchings/{unknown_0CF330 => osEepromWrite}/__osEepStatus.s (85%) delete mode 100644 lib/asm/non_matchings/osEepromWrite_0CF180/osEepromWrite.s delete mode 100644 lib/asm/non_matchings/unknown_0CF330/__osPackEepWriteData.s rename lib/src/{ => os}/__osSiRawReadIo.c (100%) rename lib/src/{ => os}/__osSiRawWriteIo.c (100%) rename lib/src/{ => os}/__osSpSetStatus.c (100%) rename lib/src/{ => os}/osCreateThread.c (100%) rename lib/src/{ => os}/osGetThreadPri.c (100%) rename lib/src/{ => os}/osGetTime.c (100%) rename lib/src/{ => os}/osJamMesg.c (100%) rename lib/src/{ => os}/osPfsFreeBlocks.c (100%) rename lib/src/{ => os}/osPiGetCmdQueue.c (100%) rename lib/src/{ => os}/osPiStartDma.c (100%) rename lib/src/{ => os}/osRecvMesg.c (100%) rename lib/src/{ => os}/osSendMesg.c (100%) rename lib/src/{ => os}/osSetEventMesg.c (100%) rename lib/src/{ => os}/osSetTime.c (100%) rename lib/src/{ => os}/osStartThread.c (100%) rename lib/src/{ => os}/osStopThread.c (100%) rename lib/src/{ => os}/osViBlack.c (100%) rename lib/src/{ => os}/osViSwapBuffer.c (100%) diff --git a/Makefile b/Makefile index 6a5268f0..d30016a4 100755 --- a/Makefile +++ b/Makefile @@ -135,7 +135,7 @@ COMPRESS = $(TOOLS_DIR)/dkr_decompressor -c LIB_DIRS := lib ASM_DIRS := asm asm/boot asm/assets data lib/asm -SRC_DIRS := src lib/src lib/src/al +SRC_DIRS := src lib/src lib/src/al lib/src/os GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/*.c lib/src/*.c) GLOBAL_ASM_O_FILES = $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) @@ -259,6 +259,7 @@ ALL_ASSETS_BUILT += $(patsubst $(UCODE_IN_DIR)/%.bin,$(UCODE_OUT_DIR)/%.bin,$(UC $(BUILD_DIR)/lib/%.o: OPT_FLAGS := -O2 $(BUILD_DIR)/lib/%.o: MIPSISET := -mips2 $(BUILD_DIR)/lib/src/al/%.o: OPT_FLAGS := -O3 +$(BUILD_DIR)/lib/src/os/%.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0C91A0.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D29F0.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0CDE90.o: OPT_FLAGS := -O1 @@ -266,26 +267,11 @@ $(BUILD_DIR)/lib/src/unknown_0D3160.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D3360.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D5EC0.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 -$(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osGetTime.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osJamMesg.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osPfsFreeBlocks.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osPiGetCmdQueue.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osPiStartDma.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osRecvMesg.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osSendMesg.o : OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osSetEventMesg.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osSetTime.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osEepromWrite.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osEepromRead.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osSetTimer.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/__osSiRawReadIo.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/__osSiRawWriteIo.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osStartThread.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osStopThread.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osTimer.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/osViBlack.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osViMgr.o: OPT_FLAGS := -O2 -$(BUILD_DIR)/lib/src/osViSwapBuffer.o : OPT_FLAGS := -O1 ######################## Targets ############################# diff --git a/README.md b/README.md index 504756aa..b33d8ae7 100755 --- a/README.md +++ b/README.md @@ -113,23 +113,23 @@ s32 is_drumstick_unlocked(void) { } ``` -As of June 24th 2021, this is our current score: +As of July 10th 2021, this is our current score: ``` ======================================================= ADVENTURE ONE (ASM -> C Decompilation) - ------------------- 9.47% Complete ------------------- - # Decompiled functions: 699 - # GLOBAL_ASM remaining: 1061 + ------------------- 10.02% Complete ------------------- + # Decompiled functions: 725 + # GLOBAL_ASM remaining: 1036 --------------------- Game Status --------------------- Balloons: 6/47, Keys: 1/4, Trophies: 0/5 T.T. Amulets: 0/4, Wizpig Amulets: 0/4 ------------------------------------------------------- - We are racing in Jungle Falls. (Lap 1/3) + We are racing in Jungle Falls. (Lap 2/3) ======================================================= ADVENTURE TWO (Cleanup & Documentation) - ------------------- 0.49% Complete ------------------- - # Documented functions: 42 - # Undocumented remaining: 1718 + ------------------- 0.59% Complete ------------------- + # Documented functions: 47 + # Undocumented remaining: 1714 --------------------- Game Status --------------------- Balloons: 0/47, Keys: 0/4, Trophies: 0/5 T.T. Amulets: 0/4, Wizpig Amulets: 0/4 diff --git a/asm/non_matchings/memory/func_80071D30.s b/asm/non_matchings/memory/func_80071D30.s index 025282f9..b39521db 100644 --- a/asm/non_matchings/memory/func_80071D30.s +++ b/asm/non_matchings/memory/func_80071D30.s @@ -5,8 +5,8 @@ glabel func_80071D30 /* 07293C 80071D3C AFA40050 */ sw $a0, 0x50($sp) /* 072940 80071D40 8FAF0050 */ lw $t7, 0x50($sp) /* 072944 80071D44 240E0003 */ li $t6, 3 -/* 072948 80071D48 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 07294C 80071D4C A02ECD90 */ sb $t6, %lo(D_8012CD90)($at) +/* 072948 80071D48 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 07294C 80071D4C A02ECD90 */ sb $t6, %lo(__osContLastCmd)($at) /* 072950 80071D50 8DF80008 */ lw $t8, 8($t7) /* 072954 80071D54 3C088012 */ lui $t0, %hi(D_80123DD0) # $t0, 0x8012 /* 072958 80071D58 25083DD0 */ addiu $t0, %lo(D_80123DD0) # addiu $t0, $t0, 0x3dd0 diff --git a/asm/non_matchings/memory/func_80071E58.s b/asm/non_matchings/memory/func_80071E58.s index a28f6961..5eeb6cfc 100644 --- a/asm/non_matchings/memory/func_80071E58.s +++ b/asm/non_matchings/memory/func_80071E58.s @@ -5,8 +5,8 @@ glabel func_80071E58 /* 072A64 80071E64 AFA40050 */ sw $a0, 0x50($sp) /* 072A68 80071E68 8FAF0050 */ lw $t7, 0x50($sp) /* 072A6C 80071E6C 240E0003 */ li $t6, 3 -/* 072A70 80071E70 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 072A74 80071E74 A02ECD90 */ sb $t6, %lo(D_8012CD90)($at) +/* 072A70 80071E70 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 072A74 80071E74 A02ECD90 */ sb $t6, %lo(__osContLastCmd)($at) /* 072A78 80071E78 8DF80008 */ lw $t8, 8($t7) /* 072A7C 80071E7C 3C088012 */ lui $t0, %hi(D_80123ED0) # $t0, 0x8012 /* 072A80 80071E80 25083ED0 */ addiu $t0, %lo(D_80123ED0) # addiu $t0, $t0, 0x3ed0 diff --git a/include/controller.h b/include/controller.h index f5f27f82..8ce3e352 100644 --- a/include/controller.h +++ b/include/controller.h @@ -100,7 +100,14 @@ typedef struct #define DIR_STATUS_UNKNOWN 1 #define DIR_STATUS_OCCUPIED 2 - +extern u8 __osContLastCmd; +extern OSTimer __osEepromTimer; +extern OSMesg __osEepromTimerMsg; +extern OSMesgQueue __osEepromTimerQ; +extern OSPifRam __osEepPifRam; +extern OSPifRam __osContPifRam; +extern OSPifRam __osPfsPifRam; +extern u8 __osMaxControllers; //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) \ diff --git a/include/siint.h b/include/siint.h new file mode 100644 index 00000000..9ce09884 --- /dev/null +++ b/include/siint.h @@ -0,0 +1,10 @@ +#ifndef _SIINT_H +#define _SIINT_H +#include "PR/os_internal.h" +#include "PR/rcp.h" + +void __osSiGetAccess(void); +void __osSiRelAccess(void); +int __osSiDeviceBusy(void); +void __osSiCreateAccessQueue(void); +#endif diff --git a/lib/asm/non_matchings/osEepromRead_0CEE80/osEepromRead.s b/lib/asm/non_matchings/osEepromRead_0CEE80/osEepromRead.s index 5b4a7c16..70db13bb 100644 --- a/lib/asm/non_matchings/osEepromRead_0CEE80/osEepromRead.s +++ b/lib/asm/non_matchings/osEepromRead_0CEE80/osEepromRead.s @@ -2,8 +2,8 @@ glabel osEepromRead /* 0CEE80 800CE280 27BDFFC8 */ addiu $sp, $sp, -0x38 /* 0CEE84 800CE284 AFA5003C */ sw $a1, 0x3c($sp) /* 0CEE88 800CE288 93AF003F */ lbu $t7, 0x3f($sp) -/* 0CEE8C 800CE28C 3C0E8013 */ lui $t6, %hi(D_8012CE40) # $t6, 0x8013 -/* 0CEE90 800CE290 25CECE40 */ addiu $t6, %lo(D_8012CE40) # addiu $t6, $t6, -0x31c0 +/* 0CEE8C 800CE28C 3C0E8013 */ lui $t6, %hi(__osEepPifRam) # $t6, 0x8013 +/* 0CEE90 800CE290 25CECE40 */ addiu $t6, %lo(__osEepPifRam) # addiu $t6, $t6, -0x31c0 /* 0CEE94 800CE294 29E10041 */ slti $at, $t7, 0x41 /* 0CEE98 800CE298 AFBF0014 */ sw $ra, 0x14($sp) /* 0CEE9C 800CE29C AFA40038 */ sw $a0, 0x38($sp) @@ -47,8 +47,8 @@ glabel osEepromRead .L800CE324: /* 0CEF24 800CE324 0C03391C */ jal __osPackEepReadData /* 0CEF28 800CE328 93A4003F */ lbu $a0, 0x3f($sp) -/* 0CEF2C 800CE32C 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 -/* 0CEF30 800CE330 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 +/* 0CEF2C 800CE32C 3C058013 */ lui $a1, %hi(__osEepPifRam) # $a1, 0x8013 +/* 0CEF30 800CE330 24A5CE40 */ addiu $a1, %lo(__osEepPifRam) # addiu $a1, $a1, -0x31c0 /* 0CEF34 800CE334 0C0335B0 */ jal __osSiRawStartDma /* 0CEF38 800CE338 24040001 */ li $a0, 1 /* 0CEF3C 800CE33C AFA20034 */ sw $v0, 0x34($sp) @@ -60,25 +60,25 @@ glabel osEepromRead .L800CE354: /* 0CEF54 800CE354 8FAD0030 */ lw $t5, 0x30($sp) /* 0CEF58 800CE358 8FAF0030 */ lw $t7, 0x30($sp) -/* 0CEF5C 800CE35C 3C018013 */ lui $at, %hi(D_8012CE40) # $at, 0x8013 +/* 0CEF5C 800CE35C 3C018013 */ lui $at, %hi(__osEepPifRam) # $at, 0x8013 /* 0CEF60 800CE360 000D7080 */ sll $t6, $t5, 2 /* 0CEF64 800CE364 002E0821 */ addu $at, $at, $t6 /* 0CEF68 800CE368 240C00FF */ li $t4, 255 -/* 0CEF6C 800CE36C AC2CCE40 */ sw $t4, %lo(D_8012CE40)($at) +/* 0CEF6C 800CE36C AC2CCE40 */ sw $t4, %lo(__osEepPifRam)($at) /* 0CEF70 800CE370 25F80001 */ addiu $t8, $t7, 1 /* 0CEF74 800CE374 2B010010 */ slti $at, $t8, 0x10 /* 0CEF78 800CE378 1420FFF6 */ bnez $at, .L800CE354 /* 0CEF7C 800CE37C AFB80030 */ sw $t8, 0x30($sp) /* 0CEF80 800CE380 3C018013 */ lui $at, %hi(D_8012CE7C) # $at, 0x8013 -/* 0CEF84 800CE384 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 +/* 0CEF84 800CE384 3C058013 */ lui $a1, %hi(__osEepPifRam) # $a1, 0x8013 /* 0CEF88 800CE388 AC20CE7C */ sw $zero, %lo(D_8012CE7C)($at) -/* 0CEF8C 800CE38C 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 +/* 0CEF8C 800CE38C 24A5CE40 */ addiu $a1, %lo(__osEepPifRam) # addiu $a1, $a1, -0x31c0 /* 0CEF90 800CE390 0C0335B0 */ jal __osSiRawStartDma /* 0CEF94 800CE394 00002025 */ move $a0, $zero /* 0CEF98 800CE398 24190004 */ li $t9, 4 -/* 0CEF9C 800CE39C 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 +/* 0CEF9C 800CE39C 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 /* 0CEFA0 800CE3A0 AFA20034 */ sw $v0, 0x34($sp) -/* 0CEFA4 800CE3A4 A039CD90 */ sb $t9, %lo(D_8012CD90)($at) +/* 0CEFA4 800CE3A4 A039CD90 */ sb $t9, %lo(__osContLastCmd)($at) /* 0CEFA8 800CE3A8 8FA40038 */ lw $a0, 0x38($sp) /* 0CEFAC 800CE3AC 00002825 */ move $a1, $zero /* 0CEFB0 800CE3B0 0C0322EC */ jal osRecvMesg diff --git a/lib/asm/non_matchings/unknown_0CF330/__osEepStatus.s b/lib/asm/non_matchings/osEepromWrite/__osEepStatus.s similarity index 85% rename from lib/asm/non_matchings/unknown_0CF330/__osEepStatus.s rename to lib/asm/non_matchings/osEepromWrite/__osEepStatus.s index 0183b29b..83c4fe72 100644 --- a/lib/asm/non_matchings/unknown_0CF330/__osEepStatus.s +++ b/lib/asm/non_matchings/osEepromWrite/__osEepStatus.s @@ -1,7 +1,7 @@ glabel __osEepStatus /* 0CF43C 800CE83C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0CF440 800CE840 3C0E8013 */ lui $t6, %hi(D_8012CE40) # $t6, 0x8013 -/* 0CF444 800CE844 25CECE40 */ addiu $t6, %lo(D_8012CE40) # addiu $t6, $t6, -0x31c0 +/* 0CF440 800CE840 3C0E8013 */ lui $t6, %hi(__osEepPifRam) # $t6, 0x8013 +/* 0CF444 800CE844 25CECE40 */ addiu $t6, %lo(__osEepPifRam) # addiu $t6, $t6, -0x31c0 /* 0CF448 800CE848 AFBF0014 */ sw $ra, 0x14($sp) /* 0CF44C 800CE84C AFA40030 */ sw $a0, 0x30($sp) /* 0CF450 800CE850 AFA50034 */ sw $a1, 0x34($sp) @@ -11,18 +11,18 @@ glabel __osEepStatus .L800CE860: /* 0CF460 800CE860 8FAF0028 */ lw $t7, 0x28($sp) /* 0CF464 800CE864 8FB90028 */ lw $t9, 0x28($sp) -/* 0CF468 800CE868 3C018013 */ lui $at, %hi(D_8012CE40) # $at, 0x8013 +/* 0CF468 800CE868 3C018013 */ lui $at, %hi(__osEepPifRam) # $at, 0x8013 /* 0CF46C 800CE86C 000FC080 */ sll $t8, $t7, 2 /* 0CF470 800CE870 00380821 */ addu $at, $at, $t8 -/* 0CF474 800CE874 AC20CE40 */ sw $zero, %lo(D_8012CE40)($at) +/* 0CF474 800CE874 AC20CE40 */ sw $zero, %lo(__osEepPifRam)($at) /* 0CF478 800CE878 27280001 */ addiu $t0, $t9, 1 /* 0CF47C 800CE87C 29010010 */ slti $at, $t0, 0x10 /* 0CF480 800CE880 1420FFF7 */ bnez $at, .L800CE860 /* 0CF484 800CE884 AFA80028 */ sw $t0, 0x28($sp) -/* 0CF488 800CE888 3C0A8013 */ lui $t2, %hi(D_8012CE40) # $t2, 0x8013 +/* 0CF488 800CE888 3C0A8013 */ lui $t2, %hi(__osEepPifRam) # $t2, 0x8013 /* 0CF48C 800CE88C 24090001 */ li $t1, 1 /* 0CF490 800CE890 3C018013 */ lui $at, %hi(D_8012CE7C) # $at, 0x8013 -/* 0CF494 800CE894 254ACE40 */ addiu $t2, %lo(D_8012CE40) # addiu $t2, $t2, -0x31c0 +/* 0CF494 800CE894 254ACE40 */ addiu $t2, %lo(__osEepPifRam) # addiu $t2, $t2, -0x31c0 /* 0CF498 800CE898 AC29CE7C */ sw $t1, %lo(D_8012CE7C)($at) /* 0CF49C 800CE89C AFAA0024 */ sw $t2, 0x24($sp) /* 0CF4A0 800CE8A0 AFA00028 */ sw $zero, 0x28($sp) @@ -56,11 +56,11 @@ glabel __osEepStatus /* 0CF50C 800CE90C 8DC10000 */ lw $at, ($t6) /* 0CF510 800CE910 8FAD0024 */ lw $t5, 0x24($sp) /* 0CF514 800CE914 240A00FE */ li $t2, 254 -/* 0CF518 800CE918 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 +/* 0CF518 800CE918 3C058013 */ lui $a1, %hi(__osEepPifRam) # $a1, 0x8013 /* 0CF51C 800CE91C A9A10000 */ swl $at, ($t5) /* 0CF520 800CE920 B9A10003 */ swr $at, 3($t5) /* 0CF524 800CE924 8DD90004 */ lw $t9, 4($t6) -/* 0CF528 800CE928 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 +/* 0CF528 800CE928 24A5CE40 */ addiu $a1, %lo(__osEepPifRam) # addiu $a1, $a1, -0x31c0 /* 0CF52C 800CE92C 24040001 */ li $a0, 1 /* 0CF530 800CE930 A9B90004 */ swl $t9, 4($t5) /* 0CF534 800CE934 B9B90007 */ swr $t9, 7($t5) @@ -75,10 +75,10 @@ glabel __osEepStatus /* 0CF558 800CE958 0C0322EC */ jal osRecvMesg /* 0CF55C 800CE95C 24060001 */ li $a2, 1 /* 0CF560 800CE960 240B0005 */ li $t3, 5 -/* 0CF564 800CE964 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 0CF568 800CE968 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 -/* 0CF56C 800CE96C A02BCD90 */ sb $t3, %lo(D_8012CD90)($at) -/* 0CF570 800CE970 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 +/* 0CF564 800CE964 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 0CF568 800CE968 3C058013 */ lui $a1, %hi(__osEepPifRam) # $a1, 0x8013 +/* 0CF56C 800CE96C A02BCD90 */ sb $t3, %lo(__osContLastCmd)($at) +/* 0CF570 800CE970 24A5CE40 */ addiu $a1, %lo(__osEepPifRam) # addiu $a1, $a1, -0x31c0 /* 0CF574 800CE974 0C0335B0 */ jal __osSiRawStartDma /* 0CF578 800CE978 00002025 */ move $a0, $zero /* 0CF57C 800CE97C AFA2002C */ sw $v0, 0x2c($sp) @@ -92,8 +92,8 @@ glabel __osEepStatus /* 0CF59C 800CE99C 1000002C */ b .L800CEA50 /* 0CF5A0 800CE9A0 01801025 */ move $v0, $t4 .L800CE9A4: -/* 0CF5A4 800CE9A4 3C188013 */ lui $t8, %hi(D_8012CE40) # $t8, 0x8013 -/* 0CF5A8 800CE9A8 2718CE40 */ addiu $t8, %lo(D_8012CE40) # addiu $t8, $t8, -0x31c0 +/* 0CF5A4 800CE9A4 3C188013 */ lui $t8, %hi(__osEepPifRam) # $t8, 0x8013 +/* 0CF5A8 800CE9A8 2718CE40 */ addiu $t8, %lo(__osEepPifRam) # addiu $t8, $t8, -0x31c0 /* 0CF5AC 800CE9AC AFB80024 */ sw $t8, 0x24($sp) /* 0CF5B0 800CE9B0 AFA00028 */ sw $zero, 0x28($sp) .L800CE9B4: diff --git a/lib/asm/non_matchings/osEepromWrite_0CF180/osEepromWrite.s b/lib/asm/non_matchings/osEepromWrite_0CF180/osEepromWrite.s deleted file mode 100644 index 05ef776b..00000000 --- a/lib/asm/non_matchings/osEepromWrite_0CF180/osEepromWrite.s +++ /dev/null @@ -1,118 +0,0 @@ -glabel osEepromWrite -/* 0CF180 800CE580 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CF184 800CE584 AFA5003C */ sw $a1, 0x3c($sp) -/* 0CF188 800CE588 93AF003F */ lbu $t7, 0x3f($sp) -/* 0CF18C 800CE58C 3C0E8013 */ lui $t6, %hi(D_8012CE40) # $t6, 0x8013 -/* 0CF190 800CE590 25CECE40 */ addiu $t6, %lo(D_8012CE40) # addiu $t6, $t6, -0x31c0 -/* 0CF194 800CE594 29E10041 */ slti $at, $t7, 0x41 -/* 0CF198 800CE598 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF19C 800CE59C AFA40038 */ sw $a0, 0x38($sp) -/* 0CF1A0 800CE5A0 AFA60040 */ sw $a2, 0x40($sp) -/* 0CF1A4 800CE5A4 AFA00034 */ sw $zero, 0x34($sp) -/* 0CF1A8 800CE5A8 14200003 */ bnez $at, .L800CE5B8 -/* 0CF1AC 800CE5AC AFAE002C */ sw $t6, 0x2c($sp) -/* 0CF1B0 800CE5B0 1000005B */ b .L800CE720 -/* 0CF1B4 800CE5B4 2402FFFF */ li $v0, -1 -.L800CE5B8: -/* 0CF1B8 800CE5B8 0C033594 */ jal __osSiGetAccess -/* 0CF1BC 800CE5BC 00000000 */ nop -/* 0CF1C0 800CE5C0 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF1C4 800CE5C4 0C033A0F */ jal __osEepStatus -/* 0CF1C8 800CE5C8 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CF1CC 800CE5CC AFA20034 */ sw $v0, 0x34($sp) -/* 0CF1D0 800CE5D0 8FB80034 */ lw $t8, 0x34($sp) -/* 0CF1D4 800CE5D4 17000005 */ bnez $t8, .L800CE5EC -/* 0CF1D8 800CE5D8 00000000 */ nop -/* 0CF1DC 800CE5DC 97B9001C */ lhu $t9, 0x1c($sp) -/* 0CF1E0 800CE5E0 34018000 */ li $at, 32768 -/* 0CF1E4 800CE5E4 13210003 */ beq $t9, $at, .L800CE5F4 -/* 0CF1E8 800CE5E8 00000000 */ nop -.L800CE5EC: -/* 0CF1EC 800CE5EC 1000004C */ b .L800CE720 -/* 0CF1F0 800CE5F0 24020008 */ li $v0, 8 -.L800CE5F4: -/* 0CF1F4 800CE5F4 93A8001E */ lbu $t0, 0x1e($sp) -/* 0CF1F8 800CE5F8 31090080 */ andi $t1, $t0, 0x80 -/* 0CF1FC 800CE5FC 11200008 */ beqz $t1, .L800CE620 -/* 0CF200 800CE600 00000000 */ nop -.L800CE604: -/* 0CF204 800CE604 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF208 800CE608 0C033A0F */ jal __osEepStatus -/* 0CF20C 800CE60C 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CF210 800CE610 93AA001E */ lbu $t2, 0x1e($sp) -/* 0CF214 800CE614 314B0080 */ andi $t3, $t2, 0x80 -/* 0CF218 800CE618 1560FFFA */ bnez $t3, .L800CE604 -/* 0CF21C 800CE61C 00000000 */ nop -.L800CE620: -/* 0CF220 800CE620 93A4003F */ lbu $a0, 0x3f($sp) -/* 0CF224 800CE624 0C0339CC */ jal __osPackEepWriteData -/* 0CF228 800CE628 8FA50040 */ lw $a1, 0x40($sp) -/* 0CF22C 800CE62C 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 -/* 0CF230 800CE630 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 -/* 0CF234 800CE634 0C0335B0 */ jal __osSiRawStartDma -/* 0CF238 800CE638 24040001 */ li $a0, 1 -/* 0CF23C 800CE63C AFA20034 */ sw $v0, 0x34($sp) -/* 0CF240 800CE640 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF244 800CE644 00002825 */ move $a1, $zero -/* 0CF248 800CE648 0C0322EC */ jal osRecvMesg -/* 0CF24C 800CE64C 24060001 */ li $a2, 1 -/* 0CF250 800CE650 AFA00030 */ sw $zero, 0x30($sp) -.L800CE654: -/* 0CF254 800CE654 8FAD0030 */ lw $t5, 0x30($sp) -/* 0CF258 800CE658 8FAF0030 */ lw $t7, 0x30($sp) -/* 0CF25C 800CE65C 3C018013 */ lui $at, %hi(D_8012CE40) # $at, 0x8013 -/* 0CF260 800CE660 000D7080 */ sll $t6, $t5, 2 -/* 0CF264 800CE664 002E0821 */ addu $at, $at, $t6 -/* 0CF268 800CE668 240C00FF */ li $t4, 255 -/* 0CF26C 800CE66C AC2CCE40 */ sw $t4, %lo(D_8012CE40)($at) -/* 0CF270 800CE670 25F80001 */ addiu $t8, $t7, 1 -/* 0CF274 800CE674 2B010010 */ slti $at, $t8, 0x10 -/* 0CF278 800CE678 1420FFF6 */ bnez $at, .L800CE654 -/* 0CF27C 800CE67C AFB80030 */ sw $t8, 0x30($sp) -/* 0CF280 800CE680 3C018013 */ lui $at, %hi(D_8012CE7C) # $at, 0x8013 -/* 0CF284 800CE684 3C058013 */ lui $a1, %hi(D_8012CE40) # $a1, 0x8013 -/* 0CF288 800CE688 AC20CE7C */ sw $zero, %lo(D_8012CE7C)($at) -/* 0CF28C 800CE68C 24A5CE40 */ addiu $a1, %lo(D_8012CE40) # addiu $a1, $a1, -0x31c0 -/* 0CF290 800CE690 0C0335B0 */ jal __osSiRawStartDma -/* 0CF294 800CE694 00002025 */ move $a0, $zero -/* 0CF298 800CE698 24190005 */ li $t9, 5 -/* 0CF29C 800CE69C 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 0CF2A0 800CE6A0 AFA20034 */ sw $v0, 0x34($sp) -/* 0CF2A4 800CE6A4 A039CD90 */ sb $t9, %lo(D_8012CD90)($at) -/* 0CF2A8 800CE6A8 8FA40038 */ lw $a0, 0x38($sp) -/* 0CF2AC 800CE6AC 00002825 */ move $a1, $zero -/* 0CF2B0 800CE6B0 0C0322EC */ jal osRecvMesg -/* 0CF2B4 800CE6B4 24060001 */ li $a2, 1 -/* 0CF2B8 800CE6B8 AFA00030 */ sw $zero, 0x30($sp) -.L800CE6BC: -/* 0CF2BC 800CE6BC 8FAA0030 */ lw $t2, 0x30($sp) -/* 0CF2C0 800CE6C0 8FA8002C */ lw $t0, 0x2c($sp) -/* 0CF2C4 800CE6C4 254B0001 */ addiu $t3, $t2, 1 -/* 0CF2C8 800CE6C8 29610004 */ slti $at, $t3, 4 -/* 0CF2CC 800CE6CC 25090001 */ addiu $t1, $t0, 1 -/* 0CF2D0 800CE6D0 AFAB0030 */ sw $t3, 0x30($sp) -/* 0CF2D4 800CE6D4 1420FFF9 */ bnez $at, .L800CE6BC -/* 0CF2D8 800CE6D8 AFA9002C */ sw $t1, 0x2c($sp) -/* 0CF2DC 800CE6DC 8FAC002C */ lw $t4, 0x2c($sp) -/* 0CF2E0 800CE6E0 27AD0020 */ addiu $t5, $sp, 0x20 -/* 0CF2E4 800CE6E4 89810000 */ lwl $at, ($t4) -/* 0CF2E8 800CE6E8 99810003 */ lwr $at, 3($t4) -/* 0CF2EC 800CE6EC ADA10000 */ sw $at, ($t5) -/* 0CF2F0 800CE6F0 898F0004 */ lwl $t7, 4($t4) -/* 0CF2F4 800CE6F4 998F0007 */ lwr $t7, 7($t4) -/* 0CF2F8 800CE6F8 ADAF0004 */ sw $t7, 4($t5) -/* 0CF2FC 800CE6FC 89810008 */ lwl $at, 8($t4) -/* 0CF300 800CE700 9981000B */ lwr $at, 0xb($t4) -/* 0CF304 800CE704 ADA10008 */ sw $at, 8($t5) -/* 0CF308 800CE708 93B80021 */ lbu $t8, 0x21($sp) -/* 0CF30C 800CE70C 331900C0 */ andi $t9, $t8, 0xc0 -/* 0CF310 800CE710 00194103 */ sra $t0, $t9, 4 -/* 0CF314 800CE714 0C0335A5 */ jal __osSiRelAccess -/* 0CF318 800CE718 AFA80034 */ sw $t0, 0x34($sp) -/* 0CF31C 800CE71C 8FA20034 */ lw $v0, 0x34($sp) -.L800CE720: -/* 0CF320 800CE720 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF324 800CE724 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CF328 800CE728 03E00008 */ jr $ra -/* 0CF32C 800CE72C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CD820/func_800CCC20.s b/lib/asm/non_matchings/unknown_0CD820/func_800CCC20.s index 47d7fd04..1fc82ed3 100644 --- a/lib/asm/non_matchings/unknown_0CD820/func_800CCC20.s +++ b/lib/asm/non_matchings/unknown_0CD820/func_800CCC20.s @@ -114,9 +114,9 @@ glabel func_800CCC20 /* 0CD9D4 800CCDD4 8FA40084 */ lw $a0, 0x84($sp) /* 0CD9D8 800CCDD8 0C033386 */ jal func_800CCE18 /* 0CD9DC 800CCDDC 8FA50088 */ lw $a1, 0x88($sp) -/* 0CD9E0 800CCDE0 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 +/* 0CD9E0 800CCDE0 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 /* 0CD9E4 800CCDE4 0C033580 */ jal __osSiCreateAccessQueue -/* 0CD9E8 800CCDE8 A020CD90 */ sb $zero, %lo(D_8012CD90)($at) +/* 0CD9E8 800CCDE8 A020CD90 */ sb $zero, %lo(__osContLastCmd)($at) /* 0CD9EC 800CCDEC 3C048013 */ lui $a0, %hi(D_8012CDB8) # $a0, 0x8013 /* 0CD9F0 800CCDF0 3C058013 */ lui $a1, %hi(D_8012CDD0) # $a1, 0x8013 /* 0CD9F4 800CCDF4 24A5CDD0 */ addiu $a1, %lo(D_8012CDD0) # addiu $a1, $a1, -0x3230 diff --git a/lib/asm/non_matchings/unknown_0CD820/func_800CCFE0.s b/lib/asm/non_matchings/unknown_0CD820/func_800CCFE0.s index bb5da71e..2b897939 100644 --- a/lib/asm/non_matchings/unknown_0CD820/func_800CCFE0.s +++ b/lib/asm/non_matchings/unknown_0CD820/func_800CCFE0.s @@ -4,8 +4,8 @@ glabel func_800CCFE0 /* 0CDBE8 800CCFE8 AFA40020 */ sw $a0, 0x20($sp) /* 0CDBEC 800CCFEC 0C033594 */ jal __osSiGetAccess /* 0CDBF0 800CCFF0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CDBF4 800CCFF4 3C0E8013 */ lui $t6, %hi(D_8012CD90) # $t6, 0x8013 -/* 0CDBF8 800CCFF8 91CECD90 */ lbu $t6, %lo(D_8012CD90)($t6) +/* 0CDBF4 800CCFF4 3C0E8013 */ lui $t6, %hi(__osContLastCmd) # $t6, 0x8013 +/* 0CDBF8 800CCFF8 91CECD90 */ lbu $t6, %lo(__osContLastCmd)($t6) /* 0CDBFC 800CCFFC 24010001 */ li $at, 1 /* 0CDC00 800CD000 11C1000C */ beq $t6, $at, .L800CD034 /* 0CDC04 800CD004 00000000 */ nop @@ -41,10 +41,10 @@ glabel func_800CCFE0 /* 0CDC74 800CD074 0C0335B0 */ jal __osSiRawStartDma /* 0CDC78 800CD078 00002025 */ move $a0, $zero /* 0CDC7C 800CD07C 240A0001 */ li $t2, 1 -/* 0CDC80 800CD080 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 +/* 0CDC80 800CD080 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 /* 0CDC84 800CD084 AFA2001C */ sw $v0, 0x1c($sp) /* 0CDC88 800CD088 0C0335A5 */ jal __osSiRelAccess -/* 0CDC8C 800CD08C A02ACD90 */ sb $t2, %lo(D_8012CD90)($at) +/* 0CDC8C 800CD08C A02ACD90 */ sb $t2, %lo(__osContLastCmd)($at) /* 0CDC90 800CD090 8FBF0014 */ lw $ra, 0x14($sp) /* 0CDC94 800CD094 8FA2001C */ lw $v0, 0x1c($sp) /* 0CDC98 800CD098 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/lib/asm/non_matchings/unknown_0CDE90/__osPfsRequestData.s b/lib/asm/non_matchings/unknown_0CDE90/__osPfsRequestData.s index ef00afec..5bf21989 100644 --- a/lib/asm/non_matchings/unknown_0CDE90/__osPfsRequestData.s +++ b/lib/asm/non_matchings/unknown_0CDE90/__osPfsRequestData.s @@ -1,8 +1,8 @@ glabel __osPfsRequestData /* 0CE030 800CD430 27BDFFF0 */ addiu $sp, $sp, -0x10 /* 0CE034 800CD434 308400FF */ andi $a0, $a0, 0xff -/* 0CE038 800CD438 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 0CE03C 800CD43C A024CD90 */ sb $a0, %lo(D_8012CD90)($at) +/* 0CE038 800CD438 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 0CE03C 800CD43C A024CD90 */ sb $a0, %lo(__osContLastCmd)($at) /* 0CE040 800CD440 AFA00000 */ sw $zero, ($sp) .L800CD444: /* 0CE044 800CD444 8FAE0000 */ lw $t6, ($sp) diff --git a/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s b/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s index 70747e5f..8b1da721 100644 --- a/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s +++ b/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s @@ -27,8 +27,8 @@ glabel __osContRamWrite /* 0CE550 800CD950 0C033594 */ jal __osSiGetAccess /* 0CE554 800CD954 00000000 */ nop /* 0CE558 800CD958 24080003 */ li $t0, 3 -/* 0CE55C 800CD95C 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 0CE560 800CD960 A028CD90 */ sb $t0, %lo(D_8012CD90)($at) +/* 0CE55C 800CD95C 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 0CE560 800CD960 A028CD90 */ sb $t0, %lo(__osContLastCmd)($at) /* 0CE564 800CD964 8FA40064 */ lw $a0, 0x64($sp) /* 0CE568 800CD968 97A5006A */ lhu $a1, 0x6a($sp) /* 0CE56C 800CD96C 0C0336C8 */ jal __osPackRamWriteData diff --git a/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s b/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s index 334703a2..00299c76 100644 --- a/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s +++ b/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s @@ -14,8 +14,8 @@ glabel __osContRamRead /* 0CE8D0 800CDCD0 0C033594 */ jal __osSiGetAccess /* 0CE8D4 800CDCD4 AFAF0028 */ sw $t7, 0x28($sp) /* 0CE8D8 800CDCD8 24180002 */ li $t8, 2 -/* 0CE8DC 800CDCDC 3C018013 */ lui $at, %hi(D_8012CD90) # $at, 0x8013 -/* 0CE8E0 800CDCE0 A038CD90 */ sb $t8, %lo(D_8012CD90)($at) +/* 0CE8DC 800CDCDC 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 +/* 0CE8E0 800CDCE0 A038CD90 */ sb $t8, %lo(__osContLastCmd)($at) /* 0CE8E4 800CDCE4 8FA40064 */ lw $a0, 0x64($sp) /* 0CE8E8 800CDCE8 0C0337B9 */ jal __osPackRamReadData /* 0CE8EC 800CDCEC 97A5006A */ lhu $a1, 0x6a($sp) diff --git a/lib/asm/non_matchings/unknown_0CF070/__osPackEepReadData.s b/lib/asm/non_matchings/unknown_0CF070/__osPackEepReadData.s index 37b43d7f..ff0e6f42 100644 --- a/lib/asm/non_matchings/unknown_0CF070/__osPackEepReadData.s +++ b/lib/asm/non_matchings/unknown_0CF070/__osPackEepReadData.s @@ -1,18 +1,18 @@ glabel __osPackEepReadData /* 0CF070 800CE470 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CF074 800CE474 3C0E8013 */ lui $t6, %hi(D_8012CE40) # $t6, 0x8013 -/* 0CF078 800CE478 25CECE40 */ addiu $t6, %lo(D_8012CE40) # addiu $t6, $t6, -0x31c0 +/* 0CF074 800CE474 3C0E8013 */ lui $t6, %hi(__osEepPifRam) # $t6, 0x8013 +/* 0CF078 800CE478 25CECE40 */ addiu $t6, %lo(__osEepPifRam) # addiu $t6, $t6, -0x31c0 /* 0CF07C 800CE47C 308400FF */ andi $a0, $a0, 0xff /* 0CF080 800CE480 AFAE0014 */ sw $t6, 0x14($sp) /* 0CF084 800CE484 AFA00004 */ sw $zero, 4($sp) .L800CE488: /* 0CF088 800CE488 8FB80004 */ lw $t8, 4($sp) /* 0CF08C 800CE48C 8FA80004 */ lw $t0, 4($sp) -/* 0CF090 800CE490 3C018013 */ lui $at, %hi(D_8012CE40) # $at, 0x8013 +/* 0CF090 800CE490 3C018013 */ lui $at, %hi(__osEepPifRam) # $at, 0x8013 /* 0CF094 800CE494 0018C880 */ sll $t9, $t8, 2 /* 0CF098 800CE498 00390821 */ addu $at, $at, $t9 /* 0CF09C 800CE49C 240F00FF */ li $t7, 255 -/* 0CF0A0 800CE4A0 AC2FCE40 */ sw $t7, %lo(D_8012CE40)($at) +/* 0CF0A0 800CE4A0 AC2FCE40 */ sw $t7, %lo(__osEepPifRam)($at) /* 0CF0A4 800CE4A4 25090001 */ addiu $t1, $t0, 1 /* 0CF0A8 800CE4A8 29210010 */ slti $at, $t1, 0x10 /* 0CF0AC 800CE4AC 1420FFF6 */ bnez $at, .L800CE488 diff --git a/lib/asm/non_matchings/unknown_0CF330/__osPackEepWriteData.s b/lib/asm/non_matchings/unknown_0CF330/__osPackEepWriteData.s deleted file mode 100644 index bca8a948..00000000 --- a/lib/asm/non_matchings/unknown_0CF330/__osPackEepWriteData.s +++ /dev/null @@ -1,72 +0,0 @@ -glabel __osPackEepWriteData -/* 0CF330 800CE730 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CF334 800CE734 3C0E8013 */ lui $t6, %hi(D_8012CE40) # $t6, 0x8013 -/* 0CF338 800CE738 25CECE40 */ addiu $t6, %lo(D_8012CE40) # addiu $t6, $t6, -0x31c0 -/* 0CF33C 800CE73C 308400FF */ andi $a0, $a0, 0xff -/* 0CF340 800CE740 AFAE0014 */ sw $t6, 0x14($sp) -/* 0CF344 800CE744 AFA00004 */ sw $zero, 4($sp) -.L800CE748: -/* 0CF348 800CE748 8FB80004 */ lw $t8, 4($sp) -/* 0CF34C 800CE74C 8FA80004 */ lw $t0, 4($sp) -/* 0CF350 800CE750 3C018013 */ lui $at, %hi(D_8012CE40) # $at, 0x8013 -/* 0CF354 800CE754 0018C880 */ sll $t9, $t8, 2 -/* 0CF358 800CE758 00390821 */ addu $at, $at, $t9 -/* 0CF35C 800CE75C 240F00FF */ li $t7, 255 -/* 0CF360 800CE760 AC2FCE40 */ sw $t7, %lo(D_8012CE40)($at) -/* 0CF364 800CE764 25090001 */ addiu $t1, $t0, 1 -/* 0CF368 800CE768 29210010 */ slti $at, $t1, 0x10 -/* 0CF36C 800CE76C 1420FFF6 */ bnez $at, .L800CE748 -/* 0CF370 800CE770 AFA90004 */ sw $t1, 4($sp) -/* 0CF374 800CE774 240A0001 */ li $t2, 1 -/* 0CF378 800CE778 3C018013 */ lui $at, %hi(D_8012CE7C) # $at, 0x8013 -/* 0CF37C 800CE77C 240B000A */ li $t3, 10 -/* 0CF380 800CE780 240C0001 */ li $t4, 1 -/* 0CF384 800CE784 240D0005 */ li $t5, 5 -/* 0CF388 800CE788 AC2ACE7C */ sw $t2, %lo(D_8012CE7C)($at) -/* 0CF38C 800CE78C A3AB0008 */ sb $t3, 8($sp) -/* 0CF390 800CE790 A3AC0009 */ sb $t4, 9($sp) -/* 0CF394 800CE794 A3AD000A */ sb $t5, 0xa($sp) -/* 0CF398 800CE798 A3A4000B */ sb $a0, 0xb($sp) -/* 0CF39C 800CE79C AFA00004 */ sw $zero, 4($sp) -.L800CE7A0: -/* 0CF3A0 800CE7A0 8FB80004 */ lw $t8, 4($sp) -/* 0CF3A4 800CE7A4 90AE0000 */ lbu $t6, ($a1) -/* 0CF3A8 800CE7A8 24A50001 */ addiu $a1, $a1, 1 -/* 0CF3AC 800CE7AC 03B87821 */ addu $t7, $sp, $t8 -/* 0CF3B0 800CE7B0 A1EE000C */ sb $t6, 0xc($t7) -/* 0CF3B4 800CE7B4 8FB90004 */ lw $t9, 4($sp) -/* 0CF3B8 800CE7B8 27280001 */ addiu $t0, $t9, 1 -/* 0CF3BC 800CE7BC 29010008 */ slti $at, $t0, 8 -/* 0CF3C0 800CE7C0 1420FFF7 */ bnez $at, .L800CE7A0 -/* 0CF3C4 800CE7C4 AFA80004 */ sw $t0, 4($sp) -/* 0CF3C8 800CE7C8 AFA00004 */ sw $zero, 4($sp) -.L800CE7CC: -/* 0CF3CC 800CE7CC 8FA90014 */ lw $t1, 0x14($sp) -/* 0CF3D0 800CE7D0 A1200000 */ sb $zero, ($t1) -/* 0CF3D4 800CE7D4 8FAC0004 */ lw $t4, 4($sp) -/* 0CF3D8 800CE7D8 8FAA0014 */ lw $t2, 0x14($sp) -/* 0CF3DC 800CE7DC 258D0001 */ addiu $t5, $t4, 1 -/* 0CF3E0 800CE7E0 29A10004 */ slti $at, $t5, 4 -/* 0CF3E4 800CE7E4 254B0001 */ addiu $t3, $t2, 1 -/* 0CF3E8 800CE7E8 AFAD0004 */ sw $t5, 4($sp) -/* 0CF3EC 800CE7EC 1420FFF7 */ bnez $at, .L800CE7CC -/* 0CF3F0 800CE7F0 AFAB0014 */ sw $t3, 0x14($sp) -/* 0CF3F4 800CE7F4 27B80008 */ addiu $t8, $sp, 8 -/* 0CF3F8 800CE7F8 8F010000 */ lw $at, ($t8) -/* 0CF3FC 800CE7FC 8FAE0014 */ lw $t6, 0x14($sp) -/* 0CF400 800CE800 240A00FE */ li $t2, 254 -/* 0CF404 800CE804 A9C10000 */ swl $at, ($t6) -/* 0CF408 800CE808 B9C10003 */ swr $at, 3($t6) -/* 0CF40C 800CE80C 8F190004 */ lw $t9, 4($t8) -/* 0CF410 800CE810 A9D90004 */ swl $t9, 4($t6) -/* 0CF414 800CE814 B9D90007 */ swr $t9, 7($t6) -/* 0CF418 800CE818 8F010008 */ lw $at, 8($t8) -/* 0CF41C 800CE81C A9C10008 */ swl $at, 8($t6) -/* 0CF420 800CE820 B9C1000B */ swr $at, 0xb($t6) -/* 0CF424 800CE824 8FA80014 */ lw $t0, 0x14($sp) -/* 0CF428 800CE828 2509000C */ addiu $t1, $t0, 0xc -/* 0CF42C 800CE82C AFA90014 */ sw $t1, 0x14($sp) -/* 0CF430 800CE830 A12A0000 */ sb $t2, ($t1) -/* 0CF434 800CE834 03E00008 */ jr $ra -/* 0CF438 800CE838 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/lib/src/__osSiRawReadIo.c b/lib/src/os/__osSiRawReadIo.c similarity index 100% rename from lib/src/__osSiRawReadIo.c rename to lib/src/os/__osSiRawReadIo.c diff --git a/lib/src/__osSiRawWriteIo.c b/lib/src/os/__osSiRawWriteIo.c similarity index 100% rename from lib/src/__osSiRawWriteIo.c rename to lib/src/os/__osSiRawWriteIo.c diff --git a/lib/src/__osSpSetStatus.c b/lib/src/os/__osSpSetStatus.c similarity index 100% rename from lib/src/__osSpSetStatus.c rename to lib/src/os/__osSpSetStatus.c diff --git a/lib/src/osCreateThread.c b/lib/src/os/osCreateThread.c similarity index 100% rename from lib/src/osCreateThread.c rename to lib/src/os/osCreateThread.c diff --git a/lib/src/osGetThreadPri.c b/lib/src/os/osGetThreadPri.c similarity index 100% rename from lib/src/osGetThreadPri.c rename to lib/src/os/osGetThreadPri.c diff --git a/lib/src/osGetTime.c b/lib/src/os/osGetTime.c similarity index 100% rename from lib/src/osGetTime.c rename to lib/src/os/osGetTime.c diff --git a/lib/src/osJamMesg.c b/lib/src/os/osJamMesg.c similarity index 100% rename from lib/src/osJamMesg.c rename to lib/src/os/osJamMesg.c diff --git a/lib/src/osPfsFreeBlocks.c b/lib/src/os/osPfsFreeBlocks.c similarity index 100% rename from lib/src/osPfsFreeBlocks.c rename to lib/src/os/osPfsFreeBlocks.c diff --git a/lib/src/osPiGetCmdQueue.c b/lib/src/os/osPiGetCmdQueue.c similarity index 100% rename from lib/src/osPiGetCmdQueue.c rename to lib/src/os/osPiGetCmdQueue.c diff --git a/lib/src/osPiStartDma.c b/lib/src/os/osPiStartDma.c similarity index 100% rename from lib/src/osPiStartDma.c rename to lib/src/os/osPiStartDma.c diff --git a/lib/src/osRecvMesg.c b/lib/src/os/osRecvMesg.c similarity index 100% rename from lib/src/osRecvMesg.c rename to lib/src/os/osRecvMesg.c diff --git a/lib/src/osSendMesg.c b/lib/src/os/osSendMesg.c similarity index 100% rename from lib/src/osSendMesg.c rename to lib/src/os/osSendMesg.c diff --git a/lib/src/osSetEventMesg.c b/lib/src/os/osSetEventMesg.c similarity index 100% rename from lib/src/osSetEventMesg.c rename to lib/src/os/osSetEventMesg.c diff --git a/lib/src/osSetTime.c b/lib/src/os/osSetTime.c similarity index 100% rename from lib/src/osSetTime.c rename to lib/src/os/osSetTime.c diff --git a/lib/src/osStartThread.c b/lib/src/os/osStartThread.c similarity index 100% rename from lib/src/osStartThread.c rename to lib/src/os/osStartThread.c diff --git a/lib/src/osStopThread.c b/lib/src/os/osStopThread.c similarity index 100% rename from lib/src/osStopThread.c rename to lib/src/os/osStopThread.c diff --git a/lib/src/osViBlack.c b/lib/src/os/osViBlack.c similarity index 100% rename from lib/src/osViBlack.c rename to lib/src/os/osViBlack.c diff --git a/lib/src/osViSwapBuffer.c b/lib/src/os/osViSwapBuffer.c similarity index 100% rename from lib/src/osViSwapBuffer.c rename to lib/src/os/osViSwapBuffer.c diff --git a/lib/src/osEepromWrite.c b/lib/src/osEepromWrite.c index 7a214308..37e2daaf 100644 --- a/lib/src/osEepromWrite.c +++ b/lib/src/osEepromWrite.c @@ -1,7 +1,151 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800CE580 */ -#include "types.h" -#include "macros.h" +#include "libultra_internal.h" +#include "PR/rcp.h" +#include "controller.h" +#include "siint.h" -GLOBAL_ASM("lib/asm/non_matchings/osEepromWrite_0CF180/osEepromWrite.s") +extern s32 D_8012CE7C; + +void __osPackEepWriteData(u8 address, u8 *buffer); +s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) +{ + + s32 ret; + int i; + u8 *ptr; + __OSContEepromFormat eepromformat; + OSContStatus sdata; + + ret = 0; + ptr = (u8 *)&__osEepPifRam.ramarray; + + if (address > 0x40) + { + return -1; + } + + __osSiGetAccess(); + ret = __osEepStatus(mq, &sdata); + + + if (ret != 0 || sdata.type != CONT_EEPROM) + { + return CONT_NO_RESPONSE_ERROR; + } + while (sdata.status & CONT_EEPROM_BUSY) + { + __osEepStatus(mq, &sdata); + } + __osPackEepWriteData(address, buffer); + ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); //send command to pif + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + for (i = 0; i < 0x10; i++) { + __osEepPifRam.ramarray[i] = 255; + } + + D_8012CE7C = 0; + ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); //recv response + __osContLastCmd = CONT_CMD_WRITE_EEPROM; + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + for (i = 0; i < 4; i++) //skip the first 4 bytes + { + ptr++; + } + eepromformat = *(__OSContEepromFormat *)ptr; + + //probably indicates an error, from PIF + ret = CHNL_ERR(eepromformat); //TODO: remove magic constants + + __osSiRelAccess(); + return ret; +} + +void __osPackEepWriteData(u8 address, u8 *buffer) +{ + u8 *ptr; + __OSContEepromFormat eepromformat; + int i; + ptr = (u8 *)&__osEepPifRam.ramarray; + for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) + { + __osEepPifRam.ramarray[i] = CONT_CMD_NOP; + } + __osEepPifRam.pifstatus = CONT_CMD_EXE; + + eepromformat.txsize = CONT_CMD_WRITE_EEPROM_TX; + eepromformat.rxsize = CONT_CMD_WRITE_EEPROM_RX; + eepromformat.cmd = CONT_CMD_WRITE_EEPROM; + eepromformat.address = address; + for (i = 0; i < ARRLEN(eepromformat.data); i++) + { + eepromformat.data[i] = *buffer++; + } + for (i = 0; i < 4; i++) //skip the first 4 bytes + { + *ptr++ = 0; + } + *(__OSContEepromFormat *)(ptr) = eepromformat; + ptr += sizeof(__OSContEepromFormat); + ptr[0] = CONT_CMD_END; +} + +#ifdef NON_MATCHING + +// This should match! I don't know where the regalloc issue could possibly be. +s32 __osEepStatus(OSMesgQueue *mq, OSContStatus *data) +{ + s32 ret; + s32 i; + u8 *ptr; + __OSContRequesFormat requestformat; + + ret = 0; + ptr = (u8 *)__osEepPifRam.ramarray; + for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) + { + __osEepPifRam.ramarray[i] = 0; + } + __osEepPifRam.pifstatus = CONT_CMD_EXE; + ptr = (u8 *)__osEepPifRam.ramarray; + for (i = 0; i < 4; i++) //zero 4 bytes? + *ptr++ = 0; + requestformat.dummy = CONT_CMD_NOP; + requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX; + requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX; + requestformat.cmd = CONT_CMD_REQUEST_STATUS; + requestformat.typeh = CONT_CMD_NOP; + requestformat.typel = CONT_CMD_NOP; + requestformat.status = CONT_CMD_NOP; + requestformat.dummy1 = CONT_CMD_NOP; + *(__OSContRequesFormat *)ptr = requestformat; + ptr += sizeof(__OSContRequesFormat); + *ptr = CONT_CMD_END; + + ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osContLastCmd = 5; + ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + if (ret != 0) + return ret; + + ptr = (u8 *)&__osEepPifRam; + for (i = 0; i < 4; i++) + *ptr++ = 0; + + requestformat = *(__OSContRequesFormat *)ptr; + data->errno = CHNL_ERR(requestformat); + data->type = (requestformat.typel << 8) | requestformat.typeh; + data->status = requestformat.status; + if (data->errno != 0) + return data->errno; + return 0; +} + +#else +GLOBAL_ASM("lib/asm/non_matchings/osEepromWrite/__osEepStatus.s") +#endif diff --git a/lib/src/unknown_0CD820.c b/lib/src/unknown_0CD820.c index d09539a8..153b65ce 100644 --- a/lib/src/unknown_0CD820.c +++ b/lib/src/unknown_0CD820.c @@ -8,7 +8,7 @@ s32 D_800E38C0 = 0; s32 D_8012CD50[15]; s32 D_8012CD8C; -s8 D_8012CD90; +s8 __osContLastCmd; s8 __osMaxControllers; // 8012CD91 s32 D_8012CD94; s32 D_8012CD98[6]; diff --git a/lib/src/unknown_0CDE90.c b/lib/src/unknown_0CDE90.c index b3e536aa..863b500f 100644 --- a/lib/src/unknown_0CDE90.c +++ b/lib/src/unknown_0CDE90.c @@ -7,7 +7,7 @@ #include "controller.h" extern OSPifRam __osPfsPifRam; //__osPfsPifRam -extern u8 D_8012CD90; //__osContLastCmd +extern u8 __osContLastCmd; //__osContLastCmd extern u8 __osMaxControllers;//__osMaxControllers GLOBAL_ASM("lib/asm/non_matchings/unknown_0CDE90/osPfsIsPlug.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CDE90/__osPfsRequestData.s") diff --git a/lib/src/unknown_0CE200.c b/lib/src/unknown_0CE200.c index 3a244b91..2792e57b 100644 --- a/lib/src/unknown_0CE200.c +++ b/lib/src/unknown_0CE200.c @@ -13,7 +13,7 @@ s32 D_800E38D0 = 0; s32 D_8012CE20[2]; s32 D_8012CE28[6]; -s32 D_8012CE40[15]; +s32 __osEepPifRam[15]; s32 D_8012CE7C; s32 viThread[172]; s32 viEventQueue[6]; diff --git a/lib/src/unknown_0CF330.c b/lib/src/unknown_0CF330.c index 190a0f6e..02a3e6cd 100644 --- a/lib/src/unknown_0CF330.c +++ b/lib/src/unknown_0CF330.c @@ -4,8 +4,6 @@ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPackEepWriteData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osEepStatus.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__ull_rshift.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__ull_rem.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__ull_div.s") diff --git a/tools/python/generate_ld.py b/tools/python/generate_ld.py index 581843dc..83adfc4a 100644 --- a/tools/python/generate_ld.py +++ b/tools/python/generate_ld.py @@ -28,7 +28,7 @@ LATE_DATA_FILES = [ BSS_LIB_ORDER_FILES = [ BUILD_DIR + '/lib/src/osViMgr.o', - BUILD_DIR + '/lib/src/osSetEventMesg.o', + BUILD_DIR + '/lib/src/os/osSetEventMesg.o', BUILD_DIR + '/lib/src/unknown_0CD820.o', BUILD_DIR + '/lib/src/unknown_0CE200.o' ]