From 9e30746de1ea7c63e2d3b5e1be4838a8dec07474 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 08:40:26 -0400 Subject: [PATCH 01/46] Remove contramread code that we don't need anymore --- .../unknown_0CE8A0/__osContRamRead.s | 158 ------------------ .../unknown_0CE8A0/__osPackRamReadData.s | 99 ----------- lib/src/os/contramread.c | 5 - 3 files changed, 262 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s delete mode 100644 lib/asm/non_matchings/unknown_0CE8A0/__osPackRamReadData.s diff --git a/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s b/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s deleted file mode 100644 index 00299c76..00000000 --- a/lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s +++ /dev/null @@ -1,158 +0,0 @@ -glabel __osContRamRead -/* 0CE8A0 800CDCA0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0CE8A4 800CDCA4 3C0E8013 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8013 -/* 0CE8A8 800CDCA8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CE8AC 800CDCAC 25CECDE0 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, -0x3220 -/* 0CE8B0 800CDCB0 240F0002 */ li $t7, 2 -/* 0CE8B4 800CDCB4 AFA40060 */ sw $a0, 0x60($sp) -/* 0CE8B8 800CDCB8 AFA50064 */ sw $a1, 0x64($sp) -/* 0CE8BC 800CDCBC AFA60068 */ sw $a2, 0x68($sp) -/* 0CE8C0 800CDCC0 AFA7006C */ sw $a3, 0x6c($sp) -/* 0CE8C4 800CDCC4 AFB00018 */ sw $s0, 0x18($sp) -/* 0CE8C8 800CDCC8 AFA0005C */ sw $zero, 0x5c($sp) -/* 0CE8CC 800CDCCC AFAE0054 */ sw $t6, 0x54($sp) -/* 0CE8D0 800CDCD0 0C033594 */ jal __osSiGetAccess -/* 0CE8D4 800CDCD4 AFAF0028 */ sw $t7, 0x28($sp) -/* 0CE8D8 800CDCD8 24180002 */ li $t8, 2 -/* 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) -/* 0CE8F0 800CDCF0 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CE8F4 800CDCF4 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CE8F8 800CDCF8 0C0335B0 */ jal __osSiRawStartDma -/* 0CE8FC 800CDCFC 24040001 */ li $a0, 1 -/* 0CE900 800CDD00 AFA2005C */ sw $v0, 0x5c($sp) -/* 0CE904 800CDD04 8FA40060 */ lw $a0, 0x60($sp) -/* 0CE908 800CDD08 00002825 */ move $a1, $zero -/* 0CE90C 800CDD0C 0C0322EC */ jal osRecvMesg -/* 0CE910 800CDD10 24060001 */ li $a2, 1 -.L800CDD14: -/* 0CE914 800CDD14 AFA00058 */ sw $zero, 0x58($sp) -.L800CDD18: -/* 0CE918 800CDD18 8FA80058 */ lw $t0, 0x58($sp) -/* 0CE91C 800CDD1C 8FAA0058 */ lw $t2, 0x58($sp) -/* 0CE920 800CDD20 3C018013 */ lui $at, %hi(__osPfsPifRam) # $at, 0x8013 -/* 0CE924 800CDD24 00084880 */ sll $t1, $t0, 2 -/* 0CE928 800CDD28 00290821 */ addu $at, $at, $t1 -/* 0CE92C 800CDD2C 241900FF */ li $t9, 255 -/* 0CE930 800CDD30 AC39CDE0 */ sw $t9, %lo(__osPfsPifRam)($at) -/* 0CE934 800CDD34 254B0001 */ addiu $t3, $t2, 1 -/* 0CE938 800CDD38 29610010 */ slti $at, $t3, 0x10 -/* 0CE93C 800CDD3C 1420FFF6 */ bnez $at, .L800CDD18 -/* 0CE940 800CDD40 AFAB0058 */ sw $t3, 0x58($sp) -/* 0CE944 800CDD44 3C018013 */ lui $at, %hi(D_8012CE1C) # $at, 0x8013 -/* 0CE948 800CDD48 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CE94C 800CDD4C AC20CE1C */ sw $zero, %lo(D_8012CE1C)($at) -/* 0CE950 800CDD50 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CE954 800CDD54 0C0335B0 */ jal __osSiRawStartDma -/* 0CE958 800CDD58 00002025 */ move $a0, $zero -/* 0CE95C 800CDD5C AFA2005C */ sw $v0, 0x5c($sp) -/* 0CE960 800CDD60 8FA40060 */ lw $a0, 0x60($sp) -/* 0CE964 800CDD64 00002825 */ move $a1, $zero -/* 0CE968 800CDD68 0C0322EC */ jal osRecvMesg -/* 0CE96C 800CDD6C 24060001 */ li $a2, 1 -/* 0CE970 800CDD70 8FAD0064 */ lw $t5, 0x64($sp) -/* 0CE974 800CDD74 3C0C8013 */ lui $t4, %hi(__osPfsPifRam) # $t4, 0x8013 -/* 0CE978 800CDD78 258CCDE0 */ addiu $t4, %lo(__osPfsPifRam) # addiu $t4, $t4, -0x3220 -/* 0CE97C 800CDD7C 11A0000C */ beqz $t5, .L800CDDB0 -/* 0CE980 800CDD80 AFAC0054 */ sw $t4, 0x54($sp) -/* 0CE984 800CDD84 19A0000A */ blez $t5, .L800CDDB0 -/* 0CE988 800CDD88 AFA00058 */ sw $zero, 0x58($sp) -.L800CDD8C: -/* 0CE98C 800CDD8C 8FB80058 */ lw $t8, 0x58($sp) -/* 0CE990 800CDD90 8FB90064 */ lw $t9, 0x64($sp) -/* 0CE994 800CDD94 8FAE0054 */ lw $t6, 0x54($sp) -/* 0CE998 800CDD98 27080001 */ addiu $t0, $t8, 1 -/* 0CE99C 800CDD9C 0119082A */ slt $at, $t0, $t9 -/* 0CE9A0 800CDDA0 25CF0001 */ addiu $t7, $t6, 1 -/* 0CE9A4 800CDDA4 AFA80058 */ sw $t0, 0x58($sp) -/* 0CE9A8 800CDDA8 1420FFF8 */ bnez $at, .L800CDD8C -/* 0CE9AC 800CDDAC AFAF0054 */ sw $t7, 0x54($sp) -.L800CDDB0: -/* 0CE9B0 800CDDB0 8FAA0054 */ lw $t2, 0x54($sp) -/* 0CE9B4 800CDDB4 27A9002C */ addiu $t1, $sp, 0x2c -/* 0CE9B8 800CDDB8 254C0024 */ addiu $t4, $t2, 0x24 -.L800CDDBC: -/* 0CE9BC 800CDDBC 89410000 */ lwl $at, ($t2) -/* 0CE9C0 800CDDC0 99410003 */ lwr $at, 3($t2) -/* 0CE9C4 800CDDC4 254A000C */ addiu $t2, $t2, 0xc -/* 0CE9C8 800CDDC8 2529000C */ addiu $t1, $t1, 0xc -/* 0CE9CC 800CDDCC AD21FFF4 */ sw $at, -0xc($t1) -/* 0CE9D0 800CDDD0 8941FFF8 */ lwl $at, -8($t2) -/* 0CE9D4 800CDDD4 9941FFFB */ lwr $at, -5($t2) -/* 0CE9D8 800CDDD8 AD21FFF8 */ sw $at, -8($t1) -/* 0CE9DC 800CDDDC 8941FFFC */ lwl $at, -4($t2) -/* 0CE9E0 800CDDE0 9941FFFF */ lwr $at, -1($t2) -/* 0CE9E4 800CDDE4 154CFFF5 */ bne $t2, $t4, .L800CDDBC -/* 0CE9E8 800CDDE8 AD21FFFC */ sw $at, -4($t1) -/* 0CE9EC 800CDDEC 89410000 */ lwl $at, ($t2) -/* 0CE9F0 800CDDF0 99410003 */ lwr $at, 3($t2) -/* 0CE9F4 800CDDF4 AD210000 */ sw $at, ($t1) -/* 0CE9F8 800CDDF8 93AD002E */ lbu $t5, 0x2e($sp) -/* 0CE9FC 800CDDFC 31AE00C0 */ andi $t6, $t5, 0xc0 -/* 0CEA00 800CDE00 000E7903 */ sra $t7, $t6, 4 -/* 0CEA04 800CDE04 15E00025 */ bnez $t7, .L800CDE9C -/* 0CEA08 800CDE08 AFAF005C */ sw $t7, 0x5c($sp) -/* 0CEA0C 800CDE0C 27A4002C */ addiu $a0, $sp, 0x2c -/* 0CEA10 800CDE10 0C033608 */ jal __osContDataCrc -/* 0CEA14 800CDE14 24840006 */ addiu $a0, $a0, 6 -/* 0CEA18 800CDE18 A3A20027 */ sb $v0, 0x27($sp) -/* 0CEA1C 800CDE1C 93B80027 */ lbu $t8, 0x27($sp) -/* 0CEA20 800CDE20 93A80052 */ lbu $t0, 0x52($sp) -/* 0CEA24 800CDE24 1308000F */ beq $t8, $t0, .L800CDE64 -/* 0CEA28 800CDE28 00000000 */ nop -/* 0CEA2C 800CDE2C 8FA40060 */ lw $a0, 0x60($sp) -/* 0CEA30 800CDE30 0C033B75 */ jal __osPfsGetStatus -/* 0CEA34 800CDE34 8FA50064 */ lw $a1, 0x64($sp) -/* 0CEA38 800CDE38 AFA2005C */ sw $v0, 0x5c($sp) -/* 0CEA3C 800CDE3C 8FB9005C */ lw $t9, 0x5c($sp) -/* 0CEA40 800CDE40 13200005 */ beqz $t9, .L800CDE58 -/* 0CEA44 800CDE44 00000000 */ nop -/* 0CEA48 800CDE48 0C0335A5 */ jal __osSiRelAccess -/* 0CEA4C 800CDE4C 00000000 */ nop -/* 0CEA50 800CDE50 1000001F */ b .L800CDED0 -/* 0CEA54 800CDE54 8FA2005C */ lw $v0, 0x5c($sp) -.L800CDE58: -/* 0CEA58 800CDE58 240B0004 */ li $t3, 4 -/* 0CEA5C 800CDE5C 1000000F */ b .L800CDE9C -/* 0CEA60 800CDE60 AFAB005C */ sw $t3, 0x5c($sp) -.L800CDE64: -/* 0CEA64 800CDE64 AFA00058 */ sw $zero, 0x58($sp) -.L800CDE68: -/* 0CEA68 800CDE68 8FAC0058 */ lw $t4, 0x58($sp) -/* 0CEA6C 800CDE6C 8FA9006C */ lw $t1, 0x6c($sp) -/* 0CEA70 800CDE70 03AC5021 */ addu $t2, $sp, $t4 -/* 0CEA74 800CDE74 914A0032 */ lbu $t2, 0x32($t2) -/* 0CEA78 800CDE78 A12A0000 */ sb $t2, ($t1) -/* 0CEA7C 800CDE7C 8FAF0058 */ lw $t7, 0x58($sp) -/* 0CEA80 800CDE80 8FAD006C */ lw $t5, 0x6c($sp) -/* 0CEA84 800CDE84 25F80001 */ addiu $t8, $t7, 1 -/* 0CEA88 800CDE88 2B010020 */ slti $at, $t8, 0x20 -/* 0CEA8C 800CDE8C 25AE0001 */ addiu $t6, $t5, 1 -/* 0CEA90 800CDE90 AFB80058 */ sw $t8, 0x58($sp) -/* 0CEA94 800CDE94 1420FFF4 */ bnez $at, .L800CDE68 -/* 0CEA98 800CDE98 AFAE006C */ sw $t6, 0x6c($sp) -.L800CDE9C: -/* 0CEA9C 800CDE9C 8FA8005C */ lw $t0, 0x5c($sp) -/* 0CEAA0 800CDEA0 24010004 */ li $at, 4 -/* 0CEAA4 800CDEA4 15010007 */ bne $t0, $at, .L800CDEC4 -/* 0CEAA8 800CDEA8 00000000 */ nop -/* 0CEAAC 800CDEAC 8FB90028 */ lw $t9, 0x28($sp) -/* 0CEAB0 800CDEB0 2B300000 */ slti $s0, $t9, 0 -/* 0CEAB4 800CDEB4 3A100001 */ xori $s0, $s0, 1 -/* 0CEAB8 800CDEB8 272BFFFF */ addiu $t3, $t9, -1 -/* 0CEABC 800CDEBC 1600FF95 */ bnez $s0, .L800CDD14 -/* 0CEAC0 800CDEC0 AFAB0028 */ sw $t3, 0x28($sp) -.L800CDEC4: -/* 0CEAC4 800CDEC4 0C0335A5 */ jal __osSiRelAccess -/* 0CEAC8 800CDEC8 00000000 */ nop -/* 0CEACC 800CDECC 8FA2005C */ lw $v0, 0x5c($sp) -.L800CDED0: -/* 0CEAD0 800CDED0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CEAD4 800CDED4 8FB00018 */ lw $s0, 0x18($sp) -/* 0CEAD8 800CDED8 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0CEADC 800CDEDC 03E00008 */ jr $ra -/* 0CEAE0 800CDEE0 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE8A0/__osPackRamReadData.s b/lib/asm/non_matchings/unknown_0CE8A0/__osPackRamReadData.s deleted file mode 100644 index 9d6cd6ab..00000000 --- a/lib/asm/non_matchings/unknown_0CE8A0/__osPackRamReadData.s +++ /dev/null @@ -1,99 +0,0 @@ -glabel __osPackRamReadData -/* 0CEAE4 800CDEE4 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0CEAE8 800CDEE8 3C0E8013 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8013 -/* 0CEAEC 800CDEEC 25CECDE0 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, -0x3220 -/* 0CEAF0 800CDEF0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CEAF4 800CDEF4 AFA40048 */ sw $a0, 0x48($sp) -/* 0CEAF8 800CDEF8 AFA5004C */ sw $a1, 0x4c($sp) -/* 0CEAFC 800CDEFC AFAE0044 */ sw $t6, 0x44($sp) -/* 0CEB00 800CDF00 AFA00018 */ sw $zero, 0x18($sp) -.L800CDF04: -/* 0CEB04 800CDF04 8FAF0018 */ lw $t7, 0x18($sp) -/* 0CEB08 800CDF08 8FB90018 */ lw $t9, 0x18($sp) -/* 0CEB0C 800CDF0C 3C018013 */ lui $at, %hi(__osPfsPifRam) # $at, 0x8013 -/* 0CEB10 800CDF10 000FC080 */ sll $t8, $t7, 2 -/* 0CEB14 800CDF14 00380821 */ addu $at, $at, $t8 -/* 0CEB18 800CDF18 AC20CDE0 */ sw $zero, %lo(__osPfsPifRam)($at) -/* 0CEB1C 800CDF1C 27280001 */ addiu $t0, $t9, 1 -/* 0CEB20 800CDF20 29010010 */ slti $at, $t0, 0x10 -/* 0CEB24 800CDF24 1420FFF7 */ bnez $at, .L800CDF04 -/* 0CEB28 800CDF28 AFA80018 */ sw $t0, 0x18($sp) -/* 0CEB2C 800CDF2C 24090001 */ li $t1, 1 -/* 0CEB30 800CDF30 3C018013 */ lui $at, %hi(D_8012CE1C) # $at, 0x8013 -/* 0CEB34 800CDF34 240A00FF */ li $t2, 255 -/* 0CEB38 800CDF38 240B0003 */ li $t3, 3 -/* 0CEB3C 800CDF3C 240C0021 */ li $t4, 33 -/* 0CEB40 800CDF40 240D0002 */ li $t5, 2 -/* 0CEB44 800CDF44 AC29CE1C */ sw $t1, %lo(D_8012CE1C)($at) -/* 0CEB48 800CDF48 A3AA001C */ sb $t2, 0x1c($sp) -/* 0CEB4C 800CDF4C A3AB001D */ sb $t3, 0x1d($sp) -/* 0CEB50 800CDF50 A3AC001E */ sb $t4, 0x1e($sp) -/* 0CEB54 800CDF54 A3AD001F */ sb $t5, 0x1f($sp) -/* 0CEB58 800CDF58 0C0335DC */ jal __osContAddressCrc -/* 0CEB5C 800CDF5C 97A4004E */ lhu $a0, 0x4e($sp) -/* 0CEB60 800CDF60 97AE004E */ lhu $t6, 0x4e($sp) -/* 0CEB64 800CDF64 241900FF */ li $t9, 255 -/* 0CEB68 800CDF68 A3B90042 */ sb $t9, 0x42($sp) -/* 0CEB6C 800CDF6C 000E7940 */ sll $t7, $t6, 5 -/* 0CEB70 800CDF70 004FC025 */ or $t8, $v0, $t7 -/* 0CEB74 800CDF74 A7B80020 */ sh $t8, 0x20($sp) -/* 0CEB78 800CDF78 AFA00018 */ sw $zero, 0x18($sp) -.L800CDF7C: -/* 0CEB7C 800CDF7C 8FA90018 */ lw $t1, 0x18($sp) -/* 0CEB80 800CDF80 240800FF */ li $t0, 255 -/* 0CEB84 800CDF84 03A95021 */ addu $t2, $sp, $t1 -/* 0CEB88 800CDF88 A1480022 */ sb $t0, 0x22($t2) -/* 0CEB8C 800CDF8C 8FAB0018 */ lw $t3, 0x18($sp) -/* 0CEB90 800CDF90 256C0001 */ addiu $t4, $t3, 1 -/* 0CEB94 800CDF94 29810020 */ slti $at, $t4, 0x20 -/* 0CEB98 800CDF98 1420FFF8 */ bnez $at, .L800CDF7C -/* 0CEB9C 800CDF9C AFAC0018 */ sw $t4, 0x18($sp) -/* 0CEBA0 800CDFA0 8FAD0048 */ lw $t5, 0x48($sp) -/* 0CEBA4 800CDFA4 11A0000E */ beqz $t5, .L800CDFE0 -/* 0CEBA8 800CDFA8 00000000 */ nop -/* 0CEBAC 800CDFAC 19A0000C */ blez $t5, .L800CDFE0 -/* 0CEBB0 800CDFB0 AFA00018 */ sw $zero, 0x18($sp) -.L800CDFB4: -/* 0CEBB4 800CDFB4 8FAE0044 */ lw $t6, 0x44($sp) -/* 0CEBB8 800CDFB8 A1C00000 */ sb $zero, ($t6) -/* 0CEBBC 800CDFBC 8FB90018 */ lw $t9, 0x18($sp) -/* 0CEBC0 800CDFC0 8FA90048 */ lw $t1, 0x48($sp) -/* 0CEBC4 800CDFC4 8FAF0044 */ lw $t7, 0x44($sp) -/* 0CEBC8 800CDFC8 27280001 */ addiu $t0, $t9, 1 -/* 0CEBCC 800CDFCC 0109082A */ slt $at, $t0, $t1 -/* 0CEBD0 800CDFD0 25F80001 */ addiu $t8, $t7, 1 -/* 0CEBD4 800CDFD4 AFA80018 */ sw $t0, 0x18($sp) -/* 0CEBD8 800CDFD8 1420FFF6 */ bnez $at, .L800CDFB4 -/* 0CEBDC 800CDFDC AFB80044 */ sw $t8, 0x44($sp) -.L800CDFE0: -/* 0CEBE0 800CDFE0 27AB001C */ addiu $t3, $sp, 0x1c -/* 0CEBE4 800CDFE4 256D0024 */ addiu $t5, $t3, 0x24 -/* 0CEBE8 800CDFE8 8FAA0044 */ lw $t2, 0x44($sp) -.L800CDFEC: -/* 0CEBEC 800CDFEC 8D610000 */ lw $at, ($t3) -/* 0CEBF0 800CDFF0 256B000C */ addiu $t3, $t3, 0xc -/* 0CEBF4 800CDFF4 254A000C */ addiu $t2, $t2, 0xc -/* 0CEBF8 800CDFF8 A941FFF4 */ swl $at, -0xc($t2) -/* 0CEBFC 800CDFFC B941FFF7 */ swr $at, -9($t2) -/* 0CEC00 800CE000 8D61FFF8 */ lw $at, -8($t3) -/* 0CEC04 800CE004 A941FFF8 */ swl $at, -8($t2) -/* 0CEC08 800CE008 B941FFFB */ swr $at, -5($t2) -/* 0CEC0C 800CE00C 8D61FFFC */ lw $at, -4($t3) -/* 0CEC10 800CE010 A941FFFC */ swl $at, -4($t2) -/* 0CEC14 800CE014 156DFFF5 */ bne $t3, $t5, .L800CDFEC -/* 0CEC18 800CE018 B941FFFF */ swr $at, -1($t2) -/* 0CEC1C 800CE01C 8D610000 */ lw $at, ($t3) -/* 0CEC20 800CE020 241800FE */ li $t8, 254 -/* 0CEC24 800CE024 A9410000 */ swl $at, ($t2) -/* 0CEC28 800CE028 B9410003 */ swr $at, 3($t2) -/* 0CEC2C 800CE02C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0CEC30 800CE030 25CF0028 */ addiu $t7, $t6, 0x28 -/* 0CEC34 800CE034 AFAF0044 */ sw $t7, 0x44($sp) -/* 0CEC38 800CE038 A1F80000 */ sb $t8, ($t7) -/* 0CEC3C 800CE03C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CEC40 800CE040 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0CEC44 800CE044 03E00008 */ jr $ra -/* 0CEC48 800CE048 00000000 */ nop - -/* 0CEC4C 800CE04C 00000000 */ nop - diff --git a/lib/src/os/contramread.c b/lib/src/os/contramread.c index 5e9e0296..d2bfbe2f 100644 --- a/lib/src/os/contramread.c +++ b/lib/src/os/contramread.c @@ -6,10 +6,6 @@ #include "controller.h" #include "siint.h" -#if 0 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE8A0/__osContRamRead.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE8A0/__osPackRamReadData.s") -#else extern s32 D_8012CE1C; static void __osPackRamReadData(int channel, u16 address); s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { @@ -94,4 +90,3 @@ static void __osPackRamReadData(int channel, u16 address) { ptr += sizeof(__OSContRamReadFormat); ptr[0] = CONT_CMD_END; } -#endif From 90b496bc415dfaf419885047e4e3a71f9ad831d0 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 09:07:05 -0400 Subject: [PATCH 02/46] Match 4 more functions using libreultra --- .../unknown_0CE370/__osContAddressCrc.s | 51 ------ .../unknown_0CE370/__osContDataCrc.s | 62 ------- .../unknown_0CE370/__osContRamWrite.s | 152 ------------------ .../unknown_0CE370/__osPackRamWriteData.s | 104 ------------ lib/src/os/contramwrite.c | 94 +++++++++++ lib/src/os/crc.c | 49 ++++++ lib/src/os/unknown_0CE370.c | 10 -- 7 files changed, 143 insertions(+), 379 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CE370/__osContAddressCrc.s delete mode 100644 lib/asm/non_matchings/unknown_0CE370/__osContDataCrc.s delete mode 100644 lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s delete mode 100644 lib/asm/non_matchings/unknown_0CE370/__osPackRamWriteData.s create mode 100644 lib/src/os/contramwrite.c create mode 100644 lib/src/os/crc.c delete mode 100644 lib/src/os/unknown_0CE370.c diff --git a/lib/asm/non_matchings/unknown_0CE370/__osContAddressCrc.s b/lib/asm/non_matchings/unknown_0CE370/__osContAddressCrc.s deleted file mode 100644 index d6e6d33a..00000000 --- a/lib/asm/non_matchings/unknown_0CE370/__osContAddressCrc.s +++ /dev/null @@ -1,51 +0,0 @@ -glabel __osContAddressCrc -/* 0CE370 800CD770 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CE374 800CD774 3084FFFF */ andi $a0, $a0, 0xffff -/* 0CE378 800CD778 A3A0000F */ sb $zero, 0xf($sp) -/* 0CE37C 800CD77C AFA00008 */ sw $zero, 8($sp) -.L800CD780: -/* 0CE380 800CD780 93AE000F */ lbu $t6, 0xf($sp) -/* 0CE384 800CD784 31CF0010 */ andi $t7, $t6, 0x10 -/* 0CE388 800CD788 11E00004 */ beqz $t7, .L800CD79C -/* 0CE38C 800CD78C 00000000 */ nop -/* 0CE390 800CD790 24180015 */ li $t8, 21 -/* 0CE394 800CD794 10000002 */ b .L800CD7A0 -/* 0CE398 800CD798 A3B8000E */ sb $t8, 0xe($sp) -.L800CD79C: -/* 0CE39C 800CD79C A3A0000E */ sb $zero, 0xe($sp) -.L800CD7A0: -/* 0CE3A0 800CD7A0 93B9000F */ lbu $t9, 0xf($sp) -/* 0CE3A4 800CD7A4 30890400 */ andi $t1, $a0, 0x400 -/* 0CE3A8 800CD7A8 00194040 */ sll $t0, $t9, 1 -/* 0CE3AC 800CD7AC 11200003 */ beqz $t1, .L800CD7BC -/* 0CE3B0 800CD7B0 A3A8000F */ sb $t0, 0xf($sp) -/* 0CE3B4 800CD7B4 10000002 */ b .L800CD7C0 -/* 0CE3B8 800CD7B8 24050001 */ li $a1, 1 -.L800CD7BC: -/* 0CE3BC 800CD7BC 00002825 */ move $a1, $zero -.L800CD7C0: -/* 0CE3C0 800CD7C0 93AA000F */ lbu $t2, 0xf($sp) -/* 0CE3C4 800CD7C4 8FA80008 */ lw $t0, 8($sp) -/* 0CE3C8 800CD7C8 93AF000E */ lbu $t7, 0xe($sp) -/* 0CE3CC 800CD7CC 30AB00FF */ andi $t3, $a1, 0xff -/* 0CE3D0 800CD7D0 00046840 */ sll $t5, $a0, 1 -/* 0CE3D4 800CD7D4 014B6025 */ or $t4, $t2, $t3 -/* 0CE3D8 800CD7D8 01A02025 */ move $a0, $t5 -/* 0CE3DC 800CD7DC 319800FF */ andi $t8, $t4, 0xff -/* 0CE3E0 800CD7E0 25090001 */ addiu $t1, $t0, 1 -/* 0CE3E4 800CD7E4 29210010 */ slti $at, $t1, 0x10 -/* 0CE3E8 800CD7E8 A3AC000F */ sb $t4, 0xf($sp) -/* 0CE3EC 800CD7EC 308EFFFF */ andi $t6, $a0, 0xffff -/* 0CE3F0 800CD7F0 030FC826 */ xor $t9, $t8, $t7 -/* 0CE3F4 800CD7F4 AFA90008 */ sw $t1, 8($sp) -/* 0CE3F8 800CD7F8 01C02025 */ move $a0, $t6 -/* 0CE3FC 800CD7FC 1420FFE0 */ bnez $at, .L800CD780 -/* 0CE400 800CD800 A3B9000F */ sb $t9, 0xf($sp) -/* 0CE404 800CD804 93A2000F */ lbu $v0, 0xf($sp) -/* 0CE408 800CD808 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CE40C 800CD80C 304A001F */ andi $t2, $v0, 0x1f -/* 0CE410 800CD810 01401025 */ move $v0, $t2 -/* 0CE414 800CD814 304B00FF */ andi $t3, $v0, 0xff -/* 0CE418 800CD818 03E00008 */ jr $ra -/* 0CE41C 800CD81C 01601025 */ move $v0, $t3 - diff --git a/lib/asm/non_matchings/unknown_0CE370/__osContDataCrc.s b/lib/asm/non_matchings/unknown_0CE370/__osContDataCrc.s deleted file mode 100644 index e2cf6823..00000000 --- a/lib/asm/non_matchings/unknown_0CE370/__osContDataCrc.s +++ /dev/null @@ -1,62 +0,0 @@ -glabel __osContDataCrc -/* 0CE420 800CD820 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CE424 800CD824 A3A0000F */ sb $zero, 0xf($sp) -/* 0CE428 800CD828 AFA00008 */ sw $zero, 8($sp) -.L800CD82C: -/* 0CE42C 800CD82C 240E0007 */ li $t6, 7 -/* 0CE430 800CD830 AFAE0004 */ sw $t6, 4($sp) -.L800CD834: -/* 0CE434 800CD834 93AF000F */ lbu $t7, 0xf($sp) -/* 0CE438 800CD838 31F80080 */ andi $t8, $t7, 0x80 -/* 0CE43C 800CD83C 13000004 */ beqz $t8, .L800CD850 -/* 0CE440 800CD840 00000000 */ nop -/* 0CE444 800CD844 24190085 */ li $t9, 133 -/* 0CE448 800CD848 10000002 */ b .L800CD854 -/* 0CE44C 800CD84C A3B9000E */ sb $t9, 0xe($sp) -.L800CD850: -/* 0CE450 800CD850 A3A0000E */ sb $zero, 0xe($sp) -.L800CD854: -/* 0CE454 800CD854 93A8000F */ lbu $t0, 0xf($sp) -/* 0CE458 800CD858 8FAA0008 */ lw $t2, 8($sp) -/* 0CE45C 800CD85C 24010020 */ li $at, 32 -/* 0CE460 800CD860 00084840 */ sll $t1, $t0, 1 -/* 0CE464 800CD864 15410004 */ bne $t2, $at, .L800CD878 -/* 0CE468 800CD868 A3A9000F */ sb $t1, 0xf($sp) -/* 0CE46C 800CD86C 312B00FF */ andi $t3, $t1, 0xff -/* 0CE470 800CD870 1000000E */ b .L800CD8AC -/* 0CE474 800CD874 A3AB000F */ sb $t3, 0xf($sp) -.L800CD878: -/* 0CE478 800CD878 8FAD0004 */ lw $t5, 4($sp) -/* 0CE47C 800CD87C 908C0000 */ lbu $t4, ($a0) -/* 0CE480 800CD880 240E0001 */ li $t6, 1 -/* 0CE484 800CD884 01AE7804 */ sllv $t7, $t6, $t5 -/* 0CE488 800CD888 018FC024 */ and $t8, $t4, $t7 -/* 0CE48C 800CD88C 13000003 */ beqz $t8, .L800CD89C -/* 0CE490 800CD890 00000000 */ nop -/* 0CE494 800CD894 10000002 */ b .L800CD8A0 -/* 0CE498 800CD898 24050001 */ li $a1, 1 -.L800CD89C: -/* 0CE49C 800CD89C 00002825 */ move $a1, $zero -.L800CD8A0: -/* 0CE4A0 800CD8A0 93B9000F */ lbu $t9, 0xf($sp) -/* 0CE4A4 800CD8A4 03254025 */ or $t0, $t9, $a1 -/* 0CE4A8 800CD8A8 A3A8000F */ sb $t0, 0xf($sp) -.L800CD8AC: -/* 0CE4AC 800CD8AC 8FAE0004 */ lw $t6, 4($sp) -/* 0CE4B0 800CD8B0 93AA000F */ lbu $t2, 0xf($sp) -/* 0CE4B4 800CD8B4 93A9000E */ lbu $t1, 0xe($sp) -/* 0CE4B8 800CD8B8 25CDFFFF */ addiu $t5, $t6, -1 -/* 0CE4BC 800CD8BC AFAD0004 */ sw $t5, 4($sp) -/* 0CE4C0 800CD8C0 01495826 */ xor $t3, $t2, $t1 -/* 0CE4C4 800CD8C4 05A1FFDB */ bgez $t5, .L800CD834 -/* 0CE4C8 800CD8C8 A3AB000F */ sb $t3, 0xf($sp) -/* 0CE4CC 800CD8CC 8FAC0008 */ lw $t4, 8($sp) -/* 0CE4D0 800CD8D0 24840001 */ addiu $a0, $a0, 1 -/* 0CE4D4 800CD8D4 258F0001 */ addiu $t7, $t4, 1 -/* 0CE4D8 800CD8D8 29E10021 */ slti $at, $t7, 0x21 -/* 0CE4DC 800CD8DC 1420FFD3 */ bnez $at, .L800CD82C -/* 0CE4E0 800CD8E0 AFAF0008 */ sw $t7, 8($sp) -/* 0CE4E4 800CD8E4 93A2000F */ lbu $v0, 0xf($sp) -/* 0CE4E8 800CD8E8 03E00008 */ jr $ra -/* 0CE4EC 800CD8EC 27BD0010 */ addiu $sp, $sp, 0x10 - diff --git a/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s b/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s deleted file mode 100644 index 8b1da721..00000000 --- a/lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s +++ /dev/null @@ -1,152 +0,0 @@ -glabel __osContRamWrite -/* 0CE4F0 800CD8F0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0CE4F4 800CD8F4 8FB80070 */ lw $t8, 0x70($sp) -/* 0CE4F8 800CD8F8 3C0E8013 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8013 -/* 0CE4FC 800CD8FC 25CECDE0 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, -0x3220 -/* 0CE500 800CD900 240F0002 */ li $t7, 2 -/* 0CE504 800CD904 24010001 */ li $at, 1 -/* 0CE508 800CD908 AFBF001C */ sw $ra, 0x1c($sp) -/* 0CE50C 800CD90C AFA40060 */ sw $a0, 0x60($sp) -/* 0CE510 800CD910 AFA50064 */ sw $a1, 0x64($sp) -/* 0CE514 800CD914 AFA60068 */ sw $a2, 0x68($sp) -/* 0CE518 800CD918 AFA7006C */ sw $a3, 0x6c($sp) -/* 0CE51C 800CD91C AFB00018 */ sw $s0, 0x18($sp) -/* 0CE520 800CD920 AFA0005C */ sw $zero, 0x5c($sp) -/* 0CE524 800CD924 AFAE0054 */ sw $t6, 0x54($sp) -/* 0CE528 800CD928 13010009 */ beq $t8, $at, .L800CD950 -/* 0CE52C 800CD92C AFAF0028 */ sw $t7, 0x28($sp) -/* 0CE530 800CD930 97B9006A */ lhu $t9, 0x6a($sp) -/* 0CE534 800CD934 2B210007 */ slti $at, $t9, 7 -/* 0CE538 800CD938 10200005 */ beqz $at, .L800CD950 -/* 0CE53C 800CD93C 00000000 */ nop -/* 0CE540 800CD940 13200003 */ beqz $t9, .L800CD950 -/* 0CE544 800CD944 00000000 */ nop -/* 0CE548 800CD948 10000070 */ b .L800CDB0C -/* 0CE54C 800CD94C 00001025 */ move $v0, $zero -.L800CD950: -/* 0CE550 800CD950 0C033594 */ jal __osSiGetAccess -/* 0CE554 800CD954 00000000 */ nop -/* 0CE558 800CD958 24080003 */ li $t0, 3 -/* 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 -/* 0CE570 800CD970 8FA6006C */ lw $a2, 0x6c($sp) -/* 0CE574 800CD974 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CE578 800CD978 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CE57C 800CD97C 0C0335B0 */ jal __osSiRawStartDma -/* 0CE580 800CD980 24040001 */ li $a0, 1 -/* 0CE584 800CD984 AFA2005C */ sw $v0, 0x5c($sp) -/* 0CE588 800CD988 8FA40060 */ lw $a0, 0x60($sp) -/* 0CE58C 800CD98C 00002825 */ move $a1, $zero -/* 0CE590 800CD990 0C0322EC */ jal osRecvMesg -/* 0CE594 800CD994 24060001 */ li $a2, 1 -.L800CD998: -/* 0CE598 800CD998 AFA00058 */ sw $zero, 0x58($sp) -.L800CD99C: -/* 0CE59C 800CD99C 8FAA0058 */ lw $t2, 0x58($sp) -/* 0CE5A0 800CD9A0 8FAC0058 */ lw $t4, 0x58($sp) -/* 0CE5A4 800CD9A4 3C018013 */ lui $at, %hi(__osPfsPifRam) # $at, 0x8013 -/* 0CE5A8 800CD9A8 000A5880 */ sll $t3, $t2, 2 -/* 0CE5AC 800CD9AC 002B0821 */ addu $at, $at, $t3 -/* 0CE5B0 800CD9B0 240900FF */ li $t1, 255 -/* 0CE5B4 800CD9B4 AC29CDE0 */ sw $t1, %lo(__osPfsPifRam)($at) -/* 0CE5B8 800CD9B8 258D0001 */ addiu $t5, $t4, 1 -/* 0CE5BC 800CD9BC 29A10010 */ slti $at, $t5, 0x10 -/* 0CE5C0 800CD9C0 1420FFF6 */ bnez $at, .L800CD99C -/* 0CE5C4 800CD9C4 AFAD0058 */ sw $t5, 0x58($sp) -/* 0CE5C8 800CD9C8 3C018013 */ lui $at, %hi(D_8012CE1C) # $at, 0x8013 -/* 0CE5CC 800CD9CC 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CE5D0 800CD9D0 AC20CE1C */ sw $zero, %lo(D_8012CE1C)($at) -/* 0CE5D4 800CD9D4 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CE5D8 800CD9D8 0C0335B0 */ jal __osSiRawStartDma -/* 0CE5DC 800CD9DC 00002025 */ move $a0, $zero -/* 0CE5E0 800CD9E0 AFA2005C */ sw $v0, 0x5c($sp) -/* 0CE5E4 800CD9E4 8FA40060 */ lw $a0, 0x60($sp) -/* 0CE5E8 800CD9E8 00002825 */ move $a1, $zero -/* 0CE5EC 800CD9EC 0C0322EC */ jal osRecvMesg -/* 0CE5F0 800CD9F0 24060001 */ li $a2, 1 -/* 0CE5F4 800CD9F4 8FAF0064 */ lw $t7, 0x64($sp) -/* 0CE5F8 800CD9F8 3C0E8013 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8013 -/* 0CE5FC 800CD9FC 25CECDE0 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, -0x3220 -/* 0CE600 800CDA00 11E0000C */ beqz $t7, .L800CDA34 -/* 0CE604 800CDA04 AFAE0054 */ sw $t6, 0x54($sp) -/* 0CE608 800CDA08 19E0000A */ blez $t7, .L800CDA34 -/* 0CE60C 800CDA0C AFA00058 */ sw $zero, 0x58($sp) -.L800CDA10: -/* 0CE610 800CDA10 8FA80058 */ lw $t0, 0x58($sp) -/* 0CE614 800CDA14 8FA90064 */ lw $t1, 0x64($sp) -/* 0CE618 800CDA18 8FB80054 */ lw $t8, 0x54($sp) -/* 0CE61C 800CDA1C 250A0001 */ addiu $t2, $t0, 1 -/* 0CE620 800CDA20 0149082A */ slt $at, $t2, $t1 -/* 0CE624 800CDA24 27190001 */ addiu $t9, $t8, 1 -/* 0CE628 800CDA28 AFAA0058 */ sw $t2, 0x58($sp) -/* 0CE62C 800CDA2C 1420FFF8 */ bnez $at, .L800CDA10 -/* 0CE630 800CDA30 AFB90054 */ sw $t9, 0x54($sp) -.L800CDA34: -/* 0CE634 800CDA34 8FAC0054 */ lw $t4, 0x54($sp) -/* 0CE638 800CDA38 27AB002C */ addiu $t3, $sp, 0x2c -/* 0CE63C 800CDA3C 258E0024 */ addiu $t6, $t4, 0x24 -.L800CDA40: -/* 0CE640 800CDA40 89810000 */ lwl $at, ($t4) -/* 0CE644 800CDA44 99810003 */ lwr $at, 3($t4) -/* 0CE648 800CDA48 258C000C */ addiu $t4, $t4, 0xc -/* 0CE64C 800CDA4C 256B000C */ addiu $t3, $t3, 0xc -/* 0CE650 800CDA50 AD61FFF4 */ sw $at, -0xc($t3) -/* 0CE654 800CDA54 8981FFF8 */ lwl $at, -8($t4) -/* 0CE658 800CDA58 9981FFFB */ lwr $at, -5($t4) -/* 0CE65C 800CDA5C AD61FFF8 */ sw $at, -8($t3) -/* 0CE660 800CDA60 8981FFFC */ lwl $at, -4($t4) -/* 0CE664 800CDA64 9981FFFF */ lwr $at, -1($t4) -/* 0CE668 800CDA68 158EFFF5 */ bne $t4, $t6, .L800CDA40 -/* 0CE66C 800CDA6C AD61FFFC */ sw $at, -4($t3) -/* 0CE670 800CDA70 89810000 */ lwl $at, ($t4) -/* 0CE674 800CDA74 99810003 */ lwr $at, 3($t4) -/* 0CE678 800CDA78 AD610000 */ sw $at, ($t3) -/* 0CE67C 800CDA7C 93AF002E */ lbu $t7, 0x2e($sp) -/* 0CE680 800CDA80 31F800C0 */ andi $t8, $t7, 0xc0 -/* 0CE684 800CDA84 0018C903 */ sra $t9, $t8, 4 -/* 0CE688 800CDA88 17200013 */ bnez $t9, .L800CDAD8 -/* 0CE68C 800CDA8C AFB9005C */ sw $t9, 0x5c($sp) -/* 0CE690 800CDA90 0C033608 */ jal __osContDataCrc -/* 0CE694 800CDA94 8FA4006C */ lw $a0, 0x6c($sp) -/* 0CE698 800CDA98 93A80052 */ lbu $t0, 0x52($sp) -/* 0CE69C 800CDA9C 1048000E */ beq $v0, $t0, .L800CDAD8 -/* 0CE6A0 800CDAA0 00000000 */ nop -/* 0CE6A4 800CDAA4 8FA40060 */ lw $a0, 0x60($sp) -/* 0CE6A8 800CDAA8 0C033B75 */ jal __osPfsGetStatus -/* 0CE6AC 800CDAAC 8FA50064 */ lw $a1, 0x64($sp) -/* 0CE6B0 800CDAB0 AFA2005C */ sw $v0, 0x5c($sp) -/* 0CE6B4 800CDAB4 8FAA005C */ lw $t2, 0x5c($sp) -/* 0CE6B8 800CDAB8 11400005 */ beqz $t2, .L800CDAD0 -/* 0CE6BC 800CDABC 00000000 */ nop -/* 0CE6C0 800CDAC0 0C0335A5 */ jal __osSiRelAccess -/* 0CE6C4 800CDAC4 00000000 */ nop -/* 0CE6C8 800CDAC8 10000010 */ b .L800CDB0C -/* 0CE6CC 800CDACC 8FA2005C */ lw $v0, 0x5c($sp) -.L800CDAD0: -/* 0CE6D0 800CDAD0 24090004 */ li $t1, 4 -/* 0CE6D4 800CDAD4 AFA9005C */ sw $t1, 0x5c($sp) -.L800CDAD8: -/* 0CE6D8 800CDAD8 8FAD005C */ lw $t5, 0x5c($sp) -/* 0CE6DC 800CDADC 24010004 */ li $at, 4 -/* 0CE6E0 800CDAE0 15A10007 */ bne $t5, $at, .L800CDB00 -/* 0CE6E4 800CDAE4 00000000 */ nop -/* 0CE6E8 800CDAE8 8FAE0028 */ lw $t6, 0x28($sp) -/* 0CE6EC 800CDAEC 29D00000 */ slti $s0, $t6, 0 -/* 0CE6F0 800CDAF0 3A100001 */ xori $s0, $s0, 1 -/* 0CE6F4 800CDAF4 25CCFFFF */ addiu $t4, $t6, -1 -/* 0CE6F8 800CDAF8 1600FFA7 */ bnez $s0, .L800CD998 -/* 0CE6FC 800CDAFC AFAC0028 */ sw $t4, 0x28($sp) -.L800CDB00: -/* 0CE700 800CDB00 0C0335A5 */ jal __osSiRelAccess -/* 0CE704 800CDB04 00000000 */ nop -/* 0CE708 800CDB08 8FA2005C */ lw $v0, 0x5c($sp) -.L800CDB0C: -/* 0CE70C 800CDB0C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CE710 800CDB10 8FB00018 */ lw $s0, 0x18($sp) -/* 0CE714 800CDB14 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0CE718 800CDB18 03E00008 */ jr $ra -/* 0CE71C 800CDB1C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE370/__osPackRamWriteData.s b/lib/asm/non_matchings/unknown_0CE370/__osPackRamWriteData.s deleted file mode 100644 index 7b794ab7..00000000 --- a/lib/asm/non_matchings/unknown_0CE370/__osPackRamWriteData.s +++ /dev/null @@ -1,104 +0,0 @@ -glabel __osPackRamWriteData -/* 0CE720 800CDB20 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0CE724 800CDB24 3C0E8013 */ lui $t6, %hi(__osPfsPifRam) # $t6, 0x8013 -/* 0CE728 800CDB28 25CECDE0 */ addiu $t6, %lo(__osPfsPifRam) # addiu $t6, $t6, -0x3220 -/* 0CE72C 800CDB2C AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE730 800CDB30 AFA40048 */ sw $a0, 0x48($sp) -/* 0CE734 800CDB34 AFA5004C */ sw $a1, 0x4c($sp) -/* 0CE738 800CDB38 AFA60050 */ sw $a2, 0x50($sp) -/* 0CE73C 800CDB3C AFAE0044 */ sw $t6, 0x44($sp) -/* 0CE740 800CDB40 AFA00018 */ sw $zero, 0x18($sp) -.L800CDB44: -/* 0CE744 800CDB44 8FAF0018 */ lw $t7, 0x18($sp) -/* 0CE748 800CDB48 8FB90018 */ lw $t9, 0x18($sp) -/* 0CE74C 800CDB4C 3C018013 */ lui $at, %hi(__osPfsPifRam) # $at, 0x8013 -/* 0CE750 800CDB50 000FC080 */ sll $t8, $t7, 2 -/* 0CE754 800CDB54 00380821 */ addu $at, $at, $t8 -/* 0CE758 800CDB58 AC20CDE0 */ sw $zero, %lo(__osPfsPifRam)($at) -/* 0CE75C 800CDB5C 27280001 */ addiu $t0, $t9, 1 -/* 0CE760 800CDB60 29010010 */ slti $at, $t0, 0x10 -/* 0CE764 800CDB64 1420FFF7 */ bnez $at, .L800CDB44 -/* 0CE768 800CDB68 AFA80018 */ sw $t0, 0x18($sp) -/* 0CE76C 800CDB6C 24090001 */ li $t1, 1 -/* 0CE770 800CDB70 3C018013 */ lui $at, %hi(D_8012CE1C) # $at, 0x8013 -/* 0CE774 800CDB74 240A00FF */ li $t2, 255 -/* 0CE778 800CDB78 240B0023 */ li $t3, 35 -/* 0CE77C 800CDB7C 240C0001 */ li $t4, 1 -/* 0CE780 800CDB80 240D0003 */ li $t5, 3 -/* 0CE784 800CDB84 AC29CE1C */ sw $t1, %lo(D_8012CE1C)($at) -/* 0CE788 800CDB88 A3AA001C */ sb $t2, 0x1c($sp) -/* 0CE78C 800CDB8C A3AB001D */ sb $t3, 0x1d($sp) -/* 0CE790 800CDB90 A3AC001E */ sb $t4, 0x1e($sp) -/* 0CE794 800CDB94 A3AD001F */ sb $t5, 0x1f($sp) -/* 0CE798 800CDB98 0C0335DC */ jal __osContAddressCrc -/* 0CE79C 800CDB9C 97A4004E */ lhu $a0, 0x4e($sp) -/* 0CE7A0 800CDBA0 97AE004E */ lhu $t6, 0x4e($sp) -/* 0CE7A4 800CDBA4 241900FF */ li $t9, 255 -/* 0CE7A8 800CDBA8 A3B90042 */ sb $t9, 0x42($sp) -/* 0CE7AC 800CDBAC 000E7940 */ sll $t7, $t6, 5 -/* 0CE7B0 800CDBB0 004FC025 */ or $t8, $v0, $t7 -/* 0CE7B4 800CDBB4 A7B80020 */ sh $t8, 0x20($sp) -/* 0CE7B8 800CDBB8 AFA00018 */ sw $zero, 0x18($sp) -.L800CDBBC: -/* 0CE7BC 800CDBBC 8FA80050 */ lw $t0, 0x50($sp) -/* 0CE7C0 800CDBC0 8FAA0018 */ lw $t2, 0x18($sp) -/* 0CE7C4 800CDBC4 91090000 */ lbu $t1, ($t0) -/* 0CE7C8 800CDBC8 03AA5821 */ addu $t3, $sp, $t2 -/* 0CE7CC 800CDBCC A1690022 */ sb $t1, 0x22($t3) -/* 0CE7D0 800CDBD0 8FAE0018 */ lw $t6, 0x18($sp) -/* 0CE7D4 800CDBD4 8FAC0050 */ lw $t4, 0x50($sp) -/* 0CE7D8 800CDBD8 25CF0001 */ addiu $t7, $t6, 1 -/* 0CE7DC 800CDBDC 29E10020 */ slti $at, $t7, 0x20 -/* 0CE7E0 800CDBE0 258D0001 */ addiu $t5, $t4, 1 -/* 0CE7E4 800CDBE4 AFAF0018 */ sw $t7, 0x18($sp) -/* 0CE7E8 800CDBE8 1420FFF4 */ bnez $at, .L800CDBBC -/* 0CE7EC 800CDBEC AFAD0050 */ sw $t5, 0x50($sp) -/* 0CE7F0 800CDBF0 8FB80048 */ lw $t8, 0x48($sp) -/* 0CE7F4 800CDBF4 1300000E */ beqz $t8, .L800CDC30 -/* 0CE7F8 800CDBF8 00000000 */ nop -/* 0CE7FC 800CDBFC 1B00000C */ blez $t8, .L800CDC30 -/* 0CE800 800CDC00 AFA00018 */ sw $zero, 0x18($sp) -.L800CDC04: -/* 0CE804 800CDC04 8FB90044 */ lw $t9, 0x44($sp) -/* 0CE808 800CDC08 A3200000 */ sb $zero, ($t9) -/* 0CE80C 800CDC0C 8FAA0018 */ lw $t2, 0x18($sp) -/* 0CE810 800CDC10 8FAC0048 */ lw $t4, 0x48($sp) -/* 0CE814 800CDC14 8FA80044 */ lw $t0, 0x44($sp) -/* 0CE818 800CDC18 254B0001 */ addiu $t3, $t2, 1 -/* 0CE81C 800CDC1C 016C082A */ slt $at, $t3, $t4 -/* 0CE820 800CDC20 25090001 */ addiu $t1, $t0, 1 -/* 0CE824 800CDC24 AFAB0018 */ sw $t3, 0x18($sp) -/* 0CE828 800CDC28 1420FFF6 */ bnez $at, .L800CDC04 -/* 0CE82C 800CDC2C AFA90044 */ sw $t1, 0x44($sp) -.L800CDC30: -/* 0CE830 800CDC30 27AE001C */ addiu $t6, $sp, 0x1c -/* 0CE834 800CDC34 25D80024 */ addiu $t8, $t6, 0x24 -/* 0CE838 800CDC38 8FAD0044 */ lw $t5, 0x44($sp) -.L800CDC3C: -/* 0CE83C 800CDC3C 8DC10000 */ lw $at, ($t6) -/* 0CE840 800CDC40 25CE000C */ addiu $t6, $t6, 0xc -/* 0CE844 800CDC44 25AD000C */ addiu $t5, $t5, 0xc -/* 0CE848 800CDC48 A9A1FFF4 */ swl $at, -0xc($t5) -/* 0CE84C 800CDC4C B9A1FFF7 */ swr $at, -9($t5) -/* 0CE850 800CDC50 8DC1FFF8 */ lw $at, -8($t6) -/* 0CE854 800CDC54 A9A1FFF8 */ swl $at, -8($t5) -/* 0CE858 800CDC58 B9A1FFFB */ swr $at, -5($t5) -/* 0CE85C 800CDC5C 8DC1FFFC */ lw $at, -4($t6) -/* 0CE860 800CDC60 A9A1FFFC */ swl $at, -4($t5) -/* 0CE864 800CDC64 15D8FFF5 */ bne $t6, $t8, .L800CDC3C -/* 0CE868 800CDC68 B9A1FFFF */ swr $at, -1($t5) -/* 0CE86C 800CDC6C 8DC10000 */ lw $at, ($t6) -/* 0CE870 800CDC70 240900FE */ li $t1, 254 -/* 0CE874 800CDC74 A9A10000 */ swl $at, ($t5) -/* 0CE878 800CDC78 B9A10003 */ swr $at, 3($t5) -/* 0CE87C 800CDC7C 8FB90044 */ lw $t9, 0x44($sp) -/* 0CE880 800CDC80 27280028 */ addiu $t0, $t9, 0x28 -/* 0CE884 800CDC84 AFA80044 */ sw $t0, 0x44($sp) -/* 0CE888 800CDC88 A1090000 */ sb $t1, ($t0) -/* 0CE88C 800CDC8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE890 800CDC90 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0CE894 800CDC94 03E00008 */ jr $ra -/* 0CE898 800CDC98 00000000 */ nop - -/* 0CE89C 800CDC9C 00000000 */ nop - diff --git a/lib/src/os/contramwrite.c b/lib/src/os/contramwrite.c new file mode 100644 index 00000000..e4d9b996 --- /dev/null +++ b/lib/src/os/contramwrite.c @@ -0,0 +1,94 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CD8F0 */ + +#include "libultra_internal.h" +#include "macros.h" +#include "controller.h" +#include "siint.h" + +extern s32 D_8012CE1C; +static void __osPackRamWriteData(int channel, u16 address, u8 *buffer); + +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(); + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; + __osPackRamWriteData(channel, address, buffer); + ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + do { + for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + __osPfsPifRam.ramarray[i] = 0xFFU; + } + D_8012CE1C = 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 = __osPfsGetStatus(mq, channel); + if (ret != 0) { + __osSiRelAccess(); + return ret; + } + ret = PFS_ERR_CONTRFAIL; + } + } + if (ret != PFS_ERR_CONTRFAIL) + break; + } while ((retry-- >= 0)); + __osSiRelAccess(); + + return ret; +} + +static 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/lib/src/os/crc.c b/lib/src/os/crc.c new file mode 100644 index 00000000..a0b317bd --- /dev/null +++ b/lib/src/os/crc.c @@ -0,0 +1,49 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CD770 */ + +#include "types.h" +#include "macros.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/lib/src/os/unknown_0CE370.c b/lib/src/os/unknown_0CE370.c deleted file mode 100644 index cc129780..00000000 --- a/lib/src/os/unknown_0CE370.c +++ /dev/null @@ -1,10 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800CD770 */ - -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE370/__osContAddressCrc.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE370/__osContDataCrc.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE370/__osContRamWrite.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE370/__osPackRamWriteData.s") From a1c8c570d0240a1a822863a2157c244ab838dfe5 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 09:12:46 -0400 Subject: [PATCH 03/46] Replace some tabs with spaces --- lib/src/os/contramread.c | 10 ++-- lib/src/os/osAiSetFrequency.c | 10 ++-- lib/src/os/osAiSetNextBuffer.c | 24 ++++----- lib/src/os/osPfsChecker.c | 2 +- lib/src/os/osPfsFindFile.c | 4 +- lib/src/os/osPiRawWriteIo.c | 2 +- lib/src/os/osSetEventMesg.c | 12 ++--- lib/src/os/osViMgr.c | 76 +++++++++++++------------- lib/src/os/unknown_0D29F0.c | 98 +++++++++++++++++----------------- lib/src/os/unknown_0D6C90.c | 2 +- lib/src/unknown_0D3020.c | 16 +++--- 11 files changed, 128 insertions(+), 128 deletions(-) diff --git a/lib/src/os/contramread.c b/lib/src/os/contramread.c index d2bfbe2f..2e88c70e 100644 --- a/lib/src/os/contramread.c +++ b/lib/src/os/contramread.c @@ -23,10 +23,10 @@ s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); do { - for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus - __osPfsPifRam.ramarray[i] = 0xFFU; - } - D_8012CE1C = 0; + for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + __osPfsPifRam.ramarray[i] = 0xFFU; + } + D_8012CE1C = 0; ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; @@ -70,7 +70,7 @@ static void __osPackRamReadData(int channel, u16 address) { 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; diff --git a/lib/src/os/osAiSetFrequency.c b/lib/src/os/osAiSetFrequency.c index 21868d97..25188052 100644 --- a/lib/src/os/osAiSetFrequency.c +++ b/lib/src/os/osAiSetFrequency.c @@ -9,20 +9,20 @@ s32 osAiSetFrequency(u32 frequency) { register u8 bitRate; register float f; - f = osViClock / (float)frequency + .5f; + f = osViClock / (float)frequency + .5f; dacRate = f; - if (dacRate < AI_MIN_DAC_RATE) + if (dacRate < AI_MIN_DAC_RATE) return -1; - bitRate = (dacRate / 66); + bitRate = (dacRate / 66); - if (bitRate > AI_MAX_BIT_RATE) + if (bitRate > AI_MAX_BIT_RATE) bitRate = AI_MAX_BIT_RATE; IO_WRITE(AI_DACRATE_REG, dacRate - 1); IO_WRITE(AI_BITRATE_REG, bitRate - 1); IO_WRITE(AI_CONTROL_REG, AI_CONTROL_DMA_ON); - return osViClock / (s32)dacRate; + return osViClock / (s32)dacRate; } diff --git a/lib/src/os/osAiSetNextBuffer.c b/lib/src/os/osAiSetNextBuffer.c index cf93fef8..b4a15580 100644 --- a/lib/src/os/osAiSetNextBuffer.c +++ b/lib/src/os/osAiSetNextBuffer.c @@ -23,19 +23,19 @@ u8 hdwrBugFlag = 0; * because it is now patched by osAiSetNextBuffer. */ s32 osAiSetNextBuffer(void *bufPtr, u32 size) { - char *bptr = bufPtr; - if (hdwrBugFlag != 0) - bptr -= 0x2000; + char *bptr = bufPtr; + if (hdwrBugFlag != 0) + bptr -= 0x2000; - if ((((u32)bufPtr + size) & 0x3fff) == 0x2000) - hdwrBugFlag = 1; - else - hdwrBugFlag = 0; + if ((((u32)bufPtr + size) & 0x3fff) == 0x2000) + hdwrBugFlag = 1; + else + hdwrBugFlag = 0; - if (__osAiDeviceBusy()) - return -1; + if (__osAiDeviceBusy()) + return -1; - IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr)); - IO_WRITE(AI_LEN_REG, size); - return 0; + IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr)); + IO_WRITE(AI_LEN_REG, size); + return 0; } diff --git a/lib/src/os/osPfsChecker.c b/lib/src/os/osPfsChecker.c index 31fe9b00..bd57a283 100644 --- a/lib/src/os/osPfsChecker.c +++ b/lib/src/os/osPfsChecker.c @@ -150,7 +150,7 @@ s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache) { } } } - + return 0; } diff --git a/lib/src/os/osPfsFindFile.c b/lib/src/os/osPfsFindFile.c index 661db5ac..bc1c1967 100644 --- a/lib/src/os/osPfsFindFile.c +++ b/lib/src/os/osPfsFindFile.c @@ -13,7 +13,7 @@ s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 ret = 0; PFS_CHECK_ID; - for (j = 0; j < pfs->dir_size; j++) { + 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; @@ -40,7 +40,7 @@ s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 } } - *file_no = -1; + *file_no = -1; return PFS_ERR_INVALID; } diff --git a/lib/src/os/osPiRawWriteIo.c b/lib/src/os/osPiRawWriteIo.c index 849d7fd7..553f8ad5 100644 --- a/lib/src/os/osPiRawWriteIo.c +++ b/lib/src/os/osPiRawWriteIo.c @@ -9,5 +9,5 @@ s32 osPiRawWriteIo(u32 devAddr, u32 *data) { register u32 stat; WAIT_ON_IOBUSY(stat); *data = IO_READ((u32)osRomBase | devAddr); - return 0; + return 0; } diff --git a/lib/src/os/osSetEventMesg.c b/lib/src/os/osSetEventMesg.c index 5b33da27..47339dbf 100644 --- a/lib/src/os/osSetEventMesg.c +++ b/lib/src/os/osSetEventMesg.c @@ -10,11 +10,11 @@ typedef struct __OSEventState { __OSEventState __osEventStateTab[15]; // __osEventStateTab[OS_NUM_EVENTS]; void osSetEventMesg(OSEvent event, OSMesgQueue *mq, OSMesg msg) { - register u32 saveMask = __osDisableInt(); - __OSEventState *es; + register u32 saveMask = __osDisableInt(); + __OSEventState *es; - es = &__osEventStateTab[event]; - es->messageQueue = mq; - es->message = msg; - __osRestoreInt(saveMask); + es = &__osEventStateTab[event]; + es->messageQueue = mq; + es->message = msg; + __osRestoreInt(saveMask); } diff --git a/lib/src/os/osViMgr.c b/lib/src/os/osViMgr.c index 320e31b2..49a1a551 100644 --- a/lib/src/os/osViMgr.c +++ b/lib/src/os/osViMgr.c @@ -26,42 +26,42 @@ extern OSIoMesg viCounterMsg; //viCounterMsg void viMgrMain(void *arg); void osCreateViManager(OSPri pri) { - u32 savedMask; - OSPri oldPri; - OSPri myPri; - if (__osViDevMgr.active == 0) { - __osTimerServicesInit(); - osCreateMesgQueue(&viEventQueue, viEventBuf, 5); - viRetraceMsg.hdr.type = OS_MESG_TYPE_VRETRACE; - viRetraceMsg.hdr.pri = OS_MESG_PRI_NORMAL; - viRetraceMsg.hdr.retQueue = NULL; - viCounterMsg.hdr.type = OS_MESG_TYPE_COUNTER; - viCounterMsg.hdr.pri = OS_MESG_PRI_NORMAL; - viCounterMsg.hdr.retQueue = NULL; - osSetEventMesg(OS_EVENT_VI, &viEventQueue, &viRetraceMsg); - osSetEventMesg(OS_EVENT_COUNTER, &viEventQueue, &viCounterMsg); - oldPri = -1; - myPri = osGetThreadPri(NULL); - if (myPri < pri) { - oldPri = myPri; - osSetThreadPri(NULL, pri); - } - savedMask = __osDisableInt(); - __osViDevMgr.active = 1; - __osViDevMgr.thread = &viThread; - __osViDevMgr.cmdQueue = &viEventQueue; - __osViDevMgr.evtQueue = &viEventQueue; - __osViDevMgr.acsQueue = NULL; - __osViDevMgr.dma = NULL; - __osViDevMgr.edma = NULL; - osCreateThread(&viThread, 0, viMgrMain, &__osViDevMgr, &viThreadStack[OS_VIM_STACKSIZE], pri); - __osViInit(); - osStartThread(&viThread); - __osRestoreInt(savedMask); - if (oldPri != -1) { - osSetThreadPri(0, oldPri); - } - } + u32 savedMask; + OSPri oldPri; + OSPri myPri; + if (__osViDevMgr.active == 0) { + __osTimerServicesInit(); + osCreateMesgQueue(&viEventQueue, viEventBuf, 5); + viRetraceMsg.hdr.type = OS_MESG_TYPE_VRETRACE; + viRetraceMsg.hdr.pri = OS_MESG_PRI_NORMAL; + viRetraceMsg.hdr.retQueue = NULL; + viCounterMsg.hdr.type = OS_MESG_TYPE_COUNTER; + viCounterMsg.hdr.pri = OS_MESG_PRI_NORMAL; + viCounterMsg.hdr.retQueue = NULL; + osSetEventMesg(OS_EVENT_VI, &viEventQueue, &viRetraceMsg); + osSetEventMesg(OS_EVENT_COUNTER, &viEventQueue, &viCounterMsg); + oldPri = -1; + myPri = osGetThreadPri(NULL); + if (myPri < pri) { + oldPri = myPri; + osSetThreadPri(NULL, pri); + } + savedMask = __osDisableInt(); + __osViDevMgr.active = 1; + __osViDevMgr.thread = &viThread; + __osViDevMgr.cmdQueue = &viEventQueue; + __osViDevMgr.evtQueue = &viEventQueue; + __osViDevMgr.acsQueue = NULL; + __osViDevMgr.dma = NULL; + __osViDevMgr.edma = NULL; + osCreateThread(&viThread, 0, viMgrMain, &__osViDevMgr, &viThreadStack[OS_VIM_STACKSIZE], pri); + __osViInit(); + osStartThread(&viThread); + __osRestoreInt(savedMask); + if (oldPri != -1) { + osSetThreadPri(0, oldPri); + } + } } #ifdef NON_MATCHING @@ -78,7 +78,7 @@ void viMgrMain(void *arg) { mesg = NULL; first = FALSE; vc = __osViGetCurrentContext(); - retrace = vc->retraceCount; + retrace = vc->retraceCount; if (retrace == 0) retrace = 1; @@ -90,7 +90,7 @@ void viMgrMain(void *arg) { switch (mesg->hdr.type) { case OS_MESG_TYPE_VRETRACE: __osViSwapContext(); - retrace--; + retrace--; if (retrace == 0) { vc = __osViGetCurrentContext(); if (vc->msgq != NULL) { diff --git a/lib/src/os/unknown_0D29F0.c b/lib/src/os/unknown_0D29F0.c index 66e3f434..19aa0489 100644 --- a/lib/src/os/unknown_0D29F0.c +++ b/lib/src/os/unknown_0D29F0.c @@ -60,76 +60,76 @@ void *osViGetNextFramebuffer(void){ //TODO Split into sptask.c and seperate header -#define OS_TASK_YIELDED 0x0001 +#define OS_TASK_YIELDED 0x0001 -#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ -#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ -#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ -#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ -#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */ -#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */ -#define SP_CLR_SIG2 0x02000 /* Bit 11: clear signal 1 */ +#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ +#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ +#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ +#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ +#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */ +#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */ +#define SP_CLR_SIG2 0x02000 /* Bit 11: clear signal 1 */ -#define SP_CLR_YIELD SP_CLR_SIG0 -#define SP_CLR_YIELDED SP_CLR_SIG1 -#define SP_CLR_TASKDONE SP_CLR_SIG2 +#define SP_CLR_YIELD SP_CLR_SIG0 +#define SP_CLR_YIELDED SP_CLR_SIG1 +#define SP_CLR_TASKDONE SP_CLR_SIG2 -#define SP_IMEM_START 0x04001000 /* read/write */ +#define SP_IMEM_START 0x04001000 /* read/write */ #define _osVirtualToPhysical(ptr) \ - if (ptr != NULL) \ - { \ - ptr = (void *)osVirtualToPhysical(ptr); \ - } + if (ptr != NULL) \ + { \ + ptr = (void *)osVirtualToPhysical(ptr); \ + } extern OSTask D_8012D1A0; OSTask *_VirtualToPhysicalTask(OSTask *intp) { - OSTask *tp; - tp = &D_8012D1A0; - bcopy(intp, tp, sizeof(OSTask)); + OSTask *tp; + tp = &D_8012D1A0; + bcopy(intp, tp, sizeof(OSTask)); - _osVirtualToPhysical(tp->t.ucode); - _osVirtualToPhysical(tp->t.ucode_data); - _osVirtualToPhysical(tp->t.dram_stack); - _osVirtualToPhysical(tp->t.output_buff); - _osVirtualToPhysical(tp->t.output_buff_size); - _osVirtualToPhysical(tp->t.data_ptr); - _osVirtualToPhysical(tp->t.yield_data_ptr); - return tp; + _osVirtualToPhysical(tp->t.ucode); + _osVirtualToPhysical(tp->t.ucode_data); + _osVirtualToPhysical(tp->t.dram_stack); + _osVirtualToPhysical(tp->t.output_buff); + _osVirtualToPhysical(tp->t.output_buff_size); + _osVirtualToPhysical(tp->t.data_ptr); + _osVirtualToPhysical(tp->t.yield_data_ptr); + return tp; } void osSpTaskLoad(OSTask *intp){ - OSTask *tp; - tp = _VirtualToPhysicalTask(intp); - if (tp->t.flags & OS_TASK_YIELDED) - { - tp->t.ucode_data = tp->t.yield_data_ptr; - tp->t.ucode_data_size = tp->t.yield_data_size; - intp->t.flags &= ~OS_TASK_YIELDED; - } - osWritebackDCache(tp, sizeof(OSTask)); - __osSpSetStatus(SP_CLR_YIELD | SP_CLR_YIELDED | SP_CLR_TASKDONE | SP_SET_INTR_BREAK); - while (__osSpSetPc(SP_IMEM_START) == -1) - ; + OSTask *tp; + tp = _VirtualToPhysicalTask(intp); + if (tp->t.flags & OS_TASK_YIELDED) + { + tp->t.ucode_data = tp->t.yield_data_ptr; + tp->t.ucode_data_size = tp->t.yield_data_size; + intp->t.flags &= ~OS_TASK_YIELDED; + } + osWritebackDCache(tp, sizeof(OSTask)); + __osSpSetStatus(SP_CLR_YIELD | SP_CLR_YIELDED | SP_CLR_TASKDONE | SP_SET_INTR_BREAK); + while (__osSpSetPc(SP_IMEM_START) == -1) + ; - while (__osSpRawStartDma(1, (SP_IMEM_START - sizeof(*tp)), tp, - sizeof(OSTask)) == -1) - ; + while (__osSpRawStartDma(1, (SP_IMEM_START - sizeof(*tp)), tp, + sizeof(OSTask)) == -1) + ; - while (__osSpDeviceBusy()) - ; + while (__osSpDeviceBusy()) + ; - while (__osSpRawStartDma(1, SP_IMEM_START, tp->t.ucode_boot, - tp->t.ucode_boot_size) == -1) - ; + while (__osSpRawStartDma(1, SP_IMEM_START, tp->t.ucode_boot, + tp->t.ucode_boot_size) == -1) + ; } void osSpTaskStartGo(OSTask *tp) { - while (__osSpDeviceBusy()); + while (__osSpDeviceBusy()); - __osSpSetStatus(SP_SET_INTR_BREAK | SP_CLR_SSTEP | SP_CLR_BROKE | SP_CLR_HALT); + __osSpSetStatus(SP_SET_INTR_BREAK | SP_CLR_SSTEP | SP_CLR_BROKE | SP_CLR_HALT); } diff --git a/lib/src/os/unknown_0D6C90.c b/lib/src/os/unknown_0D6C90.c index 7f05b926..1954a0b0 100644 --- a/lib/src/os/unknown_0D6C90.c +++ b/lib/src/os/unknown_0D6C90.c @@ -27,7 +27,7 @@ GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osYieldThread.s") /*extern void __osEnqueueAndYield(OSThread **); -extern void __osRestoreInt(u32); +extern void __osRestoreInt(u32); void osYieldThread(void){ register u32 saveMask = __osDisableInt(); __osRunningThread->state = OS_STATE_RUNNABLE; diff --git a/lib/src/unknown_0D3020.c b/lib/src/unknown_0D3020.c index 8a74a7ba..c410d68e 100644 --- a/lib/src/unknown_0D3020.c +++ b/lib/src/unknown_0D3020.c @@ -10,20 +10,20 @@ extern u32 __osPiAccessQueueEnabled;//__osPiAccessQueueEnabled extern OSMesg D_8012D1E0[PI_Q_BUF_LEN];//piAccessBuf extern OSMesgQueue piAccessQueue; //__osPiAccessQueue void __osPiCreateAccessQueue(void) { - __osPiAccessQueueEnabled = 1; - osCreateMesgQueue(&piAccessQueue, D_8012D1E0, PI_Q_BUF_LEN); - osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); + __osPiAccessQueueEnabled = 1; + osCreateMesgQueue(&piAccessQueue, D_8012D1E0, PI_Q_BUF_LEN); + osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); } void __osPiGetAccess(void) { - OSMesg dummyMesg; - if (!__osPiAccessQueueEnabled) - __osPiCreateAccessQueue(); - osRecvMesg(&piAccessQueue, &dummyMesg, OS_MESG_BLOCK); + OSMesg dummyMesg; + if (!__osPiAccessQueueEnabled) + __osPiCreateAccessQueue(); + osRecvMesg(&piAccessQueue, &dummyMesg, OS_MESG_BLOCK); } void __osPiRelAccess(void) { - osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); + osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); } /**********************************************************************/ From 52f473c94febcb051480f7235ea82c7aa7567e4a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 10:52:10 -0400 Subject: [PATCH 04/46] Define names for the undefined_syms.txt where possible --- .../unknown_0255E0/func_80024D54.s | 4 +- .../unknown_032760/func_8003B4BC.s | 4 +- lib/asm/exception/__osDispatchThread.s | 4 +- lib/asm/exception/__osEnqueueAndYield.s | 4 +- lib/asm/exception/__osException.s | 32 ++++----- .../unknown_0CA530/osSetIntMask.s | 8 +-- .../unknown_0CCF90/osInitialize.s | 12 ++-- .../unknown_0CE200/__osSiRawStartDma.s | 8 +-- .../unknown_0D3020/__osDpDeviceBusy.s | 4 +- .../unknown_0D3020/__osSiDeviceBusy.s | 4 +- .../unknown_0D3020/__osSpDeviceBusy.s | 4 +- .../unknown_0D3020/__osSpRawStartDma.s | 12 ++-- .../unknown_0D3020/__osSpSetPc.s | 4 +- .../unknown_0D3020/__osViSwapContext.s | 44 ++++++------- .../unknown_0D3020/osEPiRawWriteIo.s | 8 +-- .../non_matchings/unknown_0D3160/__osViInit.s | 8 +-- .../unknown_0D4270/__osAiDeviceBusy.s | 4 +- .../unknown_0D5390/osPiRawWriteIo.s | 8 +-- lib/src/os/unknown_0CE200.c | 2 +- lib/src/unknown_0D3020.c | 4 +- src/camera.c | 3 +- src/camera.h | 4 -- undefined_syms.txt | 66 ++++++++----------- 23 files changed, 120 insertions(+), 135 deletions(-) diff --git a/asm/non_matchings/unknown_0255E0/func_80024D54.s b/asm/non_matchings/unknown_0255E0/func_80024D54.s index a53579c5..6174d799 100644 --- a/asm/non_matchings/unknown_0255E0/func_80024D54.s +++ b/asm/non_matchings/unknown_0255E0/func_80024D54.s @@ -159,11 +159,11 @@ glabel func_80024D54 /* 025BA0 80024FA0 A3A00083 */ sb $zero, 0x83($sp) /* 025BA4 80024FA4 304B0004 */ andi $t3, $v0, 4 /* 025BA8 80024FA8 11600003 */ beqz $t3, .L80024FB8 -/* 025BAC 80024FAC 3C0FA000 */ lui $t7, %hi(D_A0000200) # $t7, 0xa000 +/* 025BAC 80024FAC 3C0FA000 */ lui $t7, %hi(THREAD_S6) # $t7, 0xa000 /* 025BB0 80024FB0 240C0001 */ li $t4, 1 /* 025BB4 80024FB4 A3AC0083 */ sb $t4, 0x83($sp) .L80024FB8: -/* 025BB8 80024FB8 8DED0200 */ lw $t5, %lo(D_A0000200)($t7) +/* 025BB8 80024FB8 8DED0200 */ lw $t5, %lo(THREAD_S6)($t7) /* 025BBC 80024FBC 3C01AC29 */ lui $at, 0xac29 /* 025BC0 80024FC0 11A10002 */ beq $t5, $at, .L80024FCC /* 025BC4 80024FC4 240E0001 */ li $t6, 1 diff --git a/asm/non_matchings/unknown_032760/func_8003B4BC.s b/asm/non_matchings/unknown_032760/func_8003B4BC.s index 02afdf05..5a63d62f 100644 --- a/asm/non_matchings/unknown_032760/func_8003B4BC.s +++ b/asm/non_matchings/unknown_032760/func_8003B4BC.s @@ -23,8 +23,8 @@ glabel func_8003B4BC /* 03C0FC 8003B4FC 46283282 */ mul.d $f10, $f6, $f8 /* 03C100 8003B500 462050A0 */ cvt.s.d $f2, $f10 .L8003B504: -/* 03C104 8003B504 3C18A000 */ lui $t8, %hi(D_A0000284) # $t8, 0xa000 -/* 03C108 8003B508 8F190284 */ lw $t9, %lo(D_A0000284)($t8) +/* 03C104 8003B504 3C18A000 */ lui $t8, %hi(THREAD_PC) # $t8, 0xa000 +/* 03C108 8003B508 8F190284 */ lw $t9, %lo(THREAD_PC)($t8) /* 03C10C 8003B50C 3C01240B */ lui $at, (0x240B17D7 >> 16) # lui $at, 0x240b /* 03C110 8003B510 342117D7 */ ori $at, (0x240B17D7 & 0xFFFF) # ori $at, $at, 0x17d7 /* 03C114 8003B514 13210002 */ beq $t9, $at, .L8003B520 diff --git a/lib/asm/exception/__osDispatchThread.s b/lib/asm/exception/__osDispatchThread.s index fe45b6bb..72943148 100644 --- a/lib/asm/exception/__osDispatchThread.s +++ b/lib/asm/exception/__osDispatchThread.s @@ -87,8 +87,8 @@ glabel __osDispatchThread /* 0D4174 800D3574 275A94D0 */ addiu $k0, %lo(D_800E94D0) # addiu $k0, $k0, -0x6b30 /* 0D4178 800D3578 037AD821 */ addu $k1, $k1, $k0 /* 0D417C 800D357C 977B0000 */ lhu $k1, ($k1) -/* 0D4180 800D3580 3C1AA430 */ lui $k0, %hi(D_A430000C) # $k0, 0xa430 -/* 0D4184 800D3584 275A000C */ addiu $k0, %lo(D_A430000C) # addiu $k0, $k0, 0xc +/* 0D4180 800D3580 3C1AA430 */ lui $k0, %hi(MI_INTR_MASK_REG) # $k0, 0xa430 +/* 0D4184 800D3584 275A000C */ addiu $k0, %lo(MI_INTR_MASK_REG) # addiu $k0, $k0, 0xc /* 0D4188 800D3588 AF5B0000 */ sw $k1, ($k0) /* 0D418C 800D358C 00000000 */ nop /* 0D4190 800D3590 00000000 */ nop diff --git a/lib/asm/exception/__osEnqueueAndYield.s b/lib/asm/exception/__osEnqueueAndYield.s index 38b921ee..3a5bef63 100644 --- a/lib/asm/exception/__osEnqueueAndYield.s +++ b/lib/asm/exception/__osEnqueueAndYield.s @@ -45,8 +45,8 @@ glabel __osEnqueueAndYield /* 0D3F74 800D3374 0369D825 */ or $k1, $k1, $t1 /* 0D3F78 800D3378 ACBB0118 */ sw $k1, 0x118($a1) .L800D337C: -/* 0D3F7C 800D337C 3C1BA430 */ lui $k1, %hi(D_A430000C) # $k1, 0xa430 -/* 0D3F80 800D3380 8F7B000C */ lw $k1, %lo(D_A430000C)($k1) +/* 0D3F7C 800D337C 3C1BA430 */ lui $k1, %hi(MI_INTR_MASK_REG) # $k1, 0xa430 +/* 0D3F80 800D3380 8F7B000C */ lw $k1, %lo(MI_INTR_MASK_REG)($k1) /* 0D3F84 800D3384 1360000B */ beqz $k1, .L800D33B4 /* 0D3F88 800D3388 00000000 */ nop /* 0D3F8C 800D338C 3C1A800E */ lui $k0, %hi(__OSGlobalIntMask) # $k0, 0x800e diff --git a/lib/asm/exception/__osException.s b/lib/asm/exception/__osException.s index 12038ec8..753995fb 100644 --- a/lib/asm/exception/__osException.s +++ b/lib/asm/exception/__osException.s @@ -95,8 +95,8 @@ glabel __osException /* 0D39D0 800D2DD0 0369D825 */ or $k1, $k1, $t1 /* 0D39D4 800D2DD4 AF5B0118 */ sw $k1, 0x118($k0) .L800D2DD8: -/* 0D39D8 800D2DD8 3C09A430 */ lui $t1, %hi(D_A430000C) # $t1, 0xa430 -/* 0D39DC 800D2DDC 8D29000C */ lw $t1, %lo(D_A430000C)($t1) +/* 0D39D8 800D2DD8 3C09A430 */ lui $t1, %hi(MI_INTR_MASK_REG) # $t1, 0xa430 +/* 0D39DC 800D2DDC 8D29000C */ lw $t1, %lo(MI_INTR_MASK_REG)($t1) /* 0D39E0 800D2DE0 1120000B */ beqz $t1, .L800D2E10 /* 0D39E4 800D2DE4 00000000 */ nop /* 0D39E8 800D2DE8 3C08800E */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800e @@ -211,21 +211,21 @@ glabel __osException /* 0D3B74 800D2F74 3C08800E */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x800e /* 0D3B78 800D2F78 250838AC */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, 0x38ac /* 0D3B7C 800D2F7C 8D080000 */ lw $t0, ($t0) -/* 0D3B80 800D2F80 3C11A430 */ lui $s1, %hi(D_A4300008) # $s1, 0xa430 -/* 0D3B84 800D2F84 8E310008 */ lw $s1, %lo(D_A4300008)($s1) +/* 0D3B80 800D2F80 3C11A430 */ lui $s1, %hi(MI_INTR_REG) # $s1, 0xa430 +/* 0D3B84 800D2F84 8E310008 */ lw $s1, %lo(MI_INTR_REG)($s1) /* 0D3B88 800D2F88 00084402 */ srl $t0, $t0, 0x10 /* 0D3B8C 800D2F8C 02288824 */ and $s1, $s1, $t0 /* 0D3B90 800D2F90 32290001 */ andi $t1, $s1, 1 /* 0D3B94 800D2F94 11200013 */ beqz $t1, .L800D2FE4 /* 0D3B98 800D2F98 00000000 */ nop -/* 0D3B9C 800D2F9C 3C0CA404 */ lui $t4, %hi(D_A4040010) # $t4, 0xa404 -/* 0D3BA0 800D2FA0 8D8C0010 */ lw $t4, %lo(D_A4040010)($t4) +/* 0D3B9C 800D2F9C 3C0CA404 */ lui $t4, %hi(SP_STATUS_REG) # $t4, 0xa404 +/* 0D3BA0 800D2FA0 8D8C0010 */ lw $t4, %lo(SP_STATUS_REG)($t4) /* 0D3BA4 800D2FA4 24090008 */ li $t1, 8 -/* 0D3BA8 800D2FA8 3C01A404 */ lui $at, %hi(D_A4040010) # $at, 0xa404 +/* 0D3BA8 800D2FA8 3C01A404 */ lui $at, %hi(SP_STATUS_REG) # $at, 0xa404 /* 0D3BAC 800D2FAC 318C0300 */ andi $t4, $t4, 0x300 /* 0D3BB0 800D2FB0 3231003E */ andi $s1, $s1, 0x3e /* 0D3BB4 800D2FB4 11800007 */ beqz $t4, .L800D2FD4 -/* 0D3BB8 800D2FB8 AC290010 */ sw $t1, %lo(D_A4040010)($at) +/* 0D3BB8 800D2FB8 AC290010 */ sw $t1, %lo(SP_STATUS_REG)($at) /* 0D3BBC 800D2FBC 0C034C79 */ jal send_mesg /* 0D3BC0 800D2FC0 24040020 */ li $a0, 32 /* 0D3BC4 800D2FC4 12200038 */ beqz $s1, .L800D30A8 @@ -240,9 +240,9 @@ glabel __osException .L800D2FE4: /* 0D3BE4 800D2FE4 32290008 */ andi $t1, $s1, 8 /* 0D3BE8 800D2FE8 11200007 */ beqz $t1, .L800D3008 -/* 0D3BEC 800D2FEC 3C01A440 */ lui $at, %hi(D_A4400010) # $at, 0xa440 +/* 0D3BEC 800D2FEC 3C01A440 */ lui $at, %hi(VI_CURRENT_REG) # $at, 0xa440 /* 0D3BF0 800D2FF0 32310037 */ andi $s1, $s1, 0x37 -/* 0D3BF4 800D2FF4 AC200010 */ sw $zero, %lo(D_A4400010)($at) +/* 0D3BF4 800D2FF4 AC200010 */ sw $zero, %lo(VI_CURRENT_REG)($at) /* 0D3BF8 800D2FF8 0C034C79 */ jal send_mesg /* 0D3BFC 800D2FFC 24040038 */ li $a0, 56 /* 0D3C00 800D3000 12200029 */ beqz $s1, .L800D30A8 @@ -252,9 +252,9 @@ glabel __osException /* 0D3C0C 800D300C 11200009 */ beqz $t1, .L800D3034 /* 0D3C10 800D3010 00000000 */ nop /* 0D3C14 800D3014 24090001 */ li $t1, 1 -/* 0D3C18 800D3018 3C01A450 */ lui $at, %hi(D_A450000C) # $at, 0xa450 +/* 0D3C18 800D3018 3C01A450 */ lui $at, %hi(AI_STATUS_REG) # $at, 0xa450 /* 0D3C1C 800D301C 3231003B */ andi $s1, $s1, 0x3b -/* 0D3C20 800D3020 AC29000C */ sw $t1, %lo(D_A450000C)($at) +/* 0D3C20 800D3020 AC29000C */ sw $t1, %lo(AI_STATUS_REG)($at) /* 0D3C24 800D3024 0C034C79 */ jal send_mesg /* 0D3C28 800D3028 24040030 */ li $a0, 48 /* 0D3C2C 800D302C 1220001E */ beqz $s1, .L800D30A8 @@ -262,9 +262,9 @@ glabel __osException .L800D3034: /* 0D3C34 800D3034 32290002 */ andi $t1, $s1, 2 /* 0D3C38 800D3038 11200007 */ beqz $t1, .L800D3058 -/* 0D3C3C 800D303C 3C01A480 */ lui $at, %hi(D_A4800018) # $at, 0xa480 +/* 0D3C3C 800D303C 3C01A480 */ lui $at, %hi(SI_STATUS_REG) # $at, 0xa480 /* 0D3C40 800D3040 3231003D */ andi $s1, $s1, 0x3d -/* 0D3C44 800D3044 AC200018 */ sw $zero, %lo(D_A4800018)($at) +/* 0D3C44 800D3044 AC200018 */ sw $zero, %lo(SI_STATUS_REG)($at) /* 0D3C48 800D3048 0C034C79 */ jal send_mesg /* 0D3C4C 800D304C 24040028 */ li $a0, 40 /* 0D3C50 800D3050 12200015 */ beqz $s1, .L800D30A8 @@ -274,9 +274,9 @@ glabel __osException /* 0D3C5C 800D305C 11200009 */ beqz $t1, .L800D3084 /* 0D3C60 800D3060 00000000 */ nop /* 0D3C64 800D3064 24090002 */ li $t1, 2 -/* 0D3C68 800D3068 3C01A460 */ lui $at, %hi(D_A4600010) # $at, 0xa460 +/* 0D3C68 800D3068 3C01A460 */ lui $at, %hi(PI_STATUS_REG) # $at, 0xa460 /* 0D3C6C 800D306C 3231002F */ andi $s1, $s1, 0x2f -/* 0D3C70 800D3070 AC290010 */ sw $t1, %lo(D_A4600010)($at) +/* 0D3C70 800D3070 AC290010 */ sw $t1, %lo(PI_STATUS_REG)($at) /* 0D3C74 800D3074 0C034C79 */ jal send_mesg /* 0D3C78 800D3078 24040040 */ li $a0, 64 /* 0D3C7C 800D307C 1220000A */ beqz $s1, .L800D30A8 diff --git a/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s b/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s index ec4e2972..80b4b75b 100644 --- a/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s +++ b/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s @@ -8,8 +8,8 @@ glabel osSetIntMask /* 0CA648 800C9A48 01614026 */ xor $t0, $t3, $at /* 0CA64C 800C9A4C 3108FF00 */ andi $t0, $t0, 0xff00 /* 0CA650 800C9A50 00481025 */ or $v0, $v0, $t0 -/* 0CA654 800C9A54 3C0AA430 */ lui $t2, %hi(D_A430000C) # $t2, 0xa430 -/* 0CA658 800C9A58 8D4A000C */ lw $t2, %lo(D_A430000C)($t2) +/* 0CA654 800C9A54 3C0AA430 */ lui $t2, %hi(MI_INTR_MASK_REG) # $t2, 0xa430 +/* 0CA658 800C9A58 8D4A000C */ lw $t2, %lo(MI_INTR_MASK_REG)($t2) /* 0CA65C 800C9A5C 11400005 */ beqz $t2, .L800C9A74 /* 0CA660 800C9A60 000B4C02 */ srl $t1, $t3, 0x10 /* 0CA664 800C9A64 2401FFFF */ li $at, -1 @@ -26,8 +26,8 @@ glabel osSetIntMask /* 0CA68C 800C9A8C 3C0A800F */ lui $t2, %hi(D_800E94D0) # $t2, 0x800f /* 0CA690 800C9A90 01485021 */ addu $t2, $t2, $t0 /* 0CA694 800C9A94 954A94D0 */ lhu $t2, %lo(D_800E94D0)($t2) -/* 0CA698 800C9A98 3C01A430 */ lui $at, %hi(D_A430000C) # $at, 0xa430 -/* 0CA69C 800C9A9C AC2A000C */ sw $t2, %lo(D_A430000C)($at) +/* 0CA698 800C9A98 3C01A430 */ lui $at, %hi(MI_INTR_MASK_REG) # $at, 0xa430 +/* 0CA69C 800C9A9C AC2A000C */ sw $t2, %lo(MI_INTR_MASK_REG)($at) /* 0CA6A0 800C9AA0 3088FF01 */ andi $t0, $a0, 0xff01 /* 0CA6A4 800C9AA4 3169FF00 */ andi $t1, $t3, 0xff00 /* 0CA6A8 800C9AA8 01094024 */ and $t0, $t0, $t1 diff --git a/lib/asm/non_matchings/unknown_0CCF90/osInitialize.s b/lib/asm/non_matchings/unknown_0CCF90/osInitialize.s index a422c429..b53100c1 100644 --- a/lib/asm/non_matchings/unknown_0CCF90/osInitialize.s +++ b/lib/asm/non_matchings/unknown_0CCF90/osInitialize.s @@ -140,22 +140,22 @@ glabel osInitialize /* 0CD3B4 800CC7B4 0C034138 */ jal bzero /* 0CD3B8 800CC7B8 24050040 */ li $a1, 64 .L800CC7BC: -/* 0CD3BC 800CC7BC 3C0DA460 */ lui $t5, %hi(D_A4600010) # $t5, 0xa460 -/* 0CD3C0 800CC7C0 8DAC0010 */ lw $t4, %lo(D_A4600010)($t5) +/* 0CD3BC 800CC7BC 3C0DA460 */ lui $t5, %hi(PI_STATUS_REG) # $t5, 0xa460 +/* 0CD3C0 800CC7C0 8DAC0010 */ lw $t4, %lo(PI_STATUS_REG)($t5) /* 0CD3C4 800CC7C4 318F0003 */ andi $t7, $t4, 3 /* 0CD3C8 800CC7C8 11E00008 */ beqz $t7, .L800CC7EC /* 0CD3CC 800CC7CC AFAC0030 */ sw $t4, 0x30($sp) .L800CC7D0: -/* 0CD3D0 800CC7D0 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0CD3D4 800CC7D4 8DD80010 */ lw $t8, %lo(D_A4600010)($t6) +/* 0CD3D0 800CC7D0 3C0EA460 */ lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 +/* 0CD3D4 800CC7D4 8DD80010 */ lw $t8, %lo(PI_STATUS_REG)($t6) /* 0CD3D8 800CC7D8 AFB80030 */ sw $t8, 0x30($sp) /* 0CD3DC 800CC7DC 8FA80030 */ lw $t0, 0x30($sp) /* 0CD3E0 800CC7E0 31190003 */ andi $t9, $t0, 3 /* 0CD3E4 800CC7E4 1720FFFA */ bnez $t9, .L800CC7D0 /* 0CD3E8 800CC7E8 00000000 */ nop .L800CC7EC: -/* 0CD3EC 800CC7EC 3C0AA500 */ lui $t2, %hi(D_A5000508) # $t2, 0xa500 -/* 0CD3F0 800CC7F0 8D4B0508 */ lw $t3, %lo(D_A5000508)($t2) +/* 0CD3EC 800CC7EC 3C0AA500 */ lui $t2, %hi(LEO_STATUS) # $t2, 0xa500 +/* 0CD3F0 800CC7F0 8D4B0508 */ lw $t3, %lo(LEO_STATUS)($t2) /* 0CD3F4 800CC7F4 3169FFFF */ andi $t1, $t3, 0xffff /* 0CD3F8 800CC7F8 1520000A */ bnez $t1, .L800CC824 /* 0CD3FC 800CC7FC AFAB0034 */ sw $t3, 0x34($sp) diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s b/lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s index 843c6d0c..c022a219 100644 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s +++ b/lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s @@ -26,14 +26,14 @@ glabel __osSiRawStartDma /* 0CE318 800CD718 00000000 */ nop /* 0CE31C 800CD71C 3C191FC0 */ lui $t9, (0x1FC007C0 >> 16) # lui $t9, 0x1fc0 /* 0CE320 800CD720 373907C0 */ ori $t9, (0x1FC007C0 & 0xFFFF) # ori $t9, $t9, 0x7c0 -/* 0CE324 800CD724 3C08A480 */ lui $t0, %hi(D_A4800004) # $t0, 0xa480 +/* 0CE324 800CD724 3C08A480 */ lui $t0, %hi(SI_PIF_ADDR_RD64B_REG) # $t0, 0xa480 /* 0CE328 800CD728 10000005 */ b .L800CD740 -/* 0CE32C 800CD72C AD190004 */ sw $t9, %lo(D_A4800004)($t0) +/* 0CE32C 800CD72C AD190004 */ sw $t9, %lo(SI_PIF_ADDR_RD64B_REG)($t0) .L800CD730: /* 0CE330 800CD730 3C091FC0 */ lui $t1, (0x1FC007C0 >> 16) # lui $t1, 0x1fc0 /* 0CE334 800CD734 352907C0 */ ori $t1, (0x1FC007C0 & 0xFFFF) # ori $t1, $t1, 0x7c0 -/* 0CE338 800CD738 3C0AA480 */ lui $t2, %hi(D_A4800010) # $t2, 0xa480 -/* 0CE33C 800CD73C AD490010 */ sw $t1, %lo(D_A4800010)($t2) +/* 0CE338 800CD738 3C0AA480 */ lui $t2, %hi(SI_PIF_ADDR_WR64B_REG) # $t2, 0xa480 +/* 0CE33C 800CD73C AD490010 */ sw $t1, %lo(SI_PIF_ADDR_WR64B_REG)($t2) .L800CD740: /* 0CE340 800CD740 8FAB0018 */ lw $t3, 0x18($sp) /* 0CE344 800CD744 15600004 */ bnez $t3, .L800CD758 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osDpDeviceBusy.s b/lib/asm/non_matchings/unknown_0D3020/__osDpDeviceBusy.s index 1dce4002..f582e5ce 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osDpDeviceBusy.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osDpDeviceBusy.s @@ -1,6 +1,6 @@ glabel __osDpDeviceBusy -/* 0D6C50 800D6050 3C0EA410 */ lui $t6, %hi(D_A410000C) # $t6, 0xa410 -/* 0D6C54 800D6054 8DC4000C */ lw $a0, %lo(D_A410000C)($t6) +/* 0D6C50 800D6050 3C0EA410 */ lui $t6, %hi(DPC_STATUS_REG) # $t6, 0xa410 +/* 0D6C54 800D6054 8DC4000C */ lw $a0, %lo(DPC_STATUS_REG)($t6) /* 0D6C58 800D6058 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D6C5C 800D605C 308F0100 */ andi $t7, $a0, 0x100 /* 0D6C60 800D6060 11E00003 */ beqz $t7, .L800D6070 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSiDeviceBusy.s b/lib/asm/non_matchings/unknown_0D3020/__osSiDeviceBusy.s index 20774a0b..fc29f57b 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osSiDeviceBusy.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osSiDeviceBusy.s @@ -1,6 +1,6 @@ glabel __osSiDeviceBusy -/* 0D5EC0 800D52C0 3C0EA480 */ lui $t6, %hi(D_A4800018) # $t6, 0xa480 -/* 0D5EC4 800D52C4 8DC40018 */ lw $a0, %lo(D_A4800018)($t6) +/* 0D5EC0 800D52C0 3C0EA480 */ lui $t6, %hi(SI_STATUS_REG) # $t6, 0xa480 +/* 0D5EC4 800D52C4 8DC40018 */ lw $a0, %lo(SI_STATUS_REG)($t6) /* 0D5EC8 800D52C8 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D5ECC 800D52CC 308F0003 */ andi $t7, $a0, 3 /* 0D5ED0 800D52D0 11E00003 */ beqz $t7, .L800D52E0 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s b/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s index 758cbf11..a6148e0b 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s @@ -1,6 +1,6 @@ glabel __osSpDeviceBusy -/* 0D70D0 800D64D0 3C0EA404 */ lui $t6, %hi(D_A4040010) # $t6, 0xa404 -/* 0D70D4 800D64D4 8DC40010 */ lw $a0, %lo(D_A4040010)($t6) +/* 0D70D0 800D64D0 3C0EA404 */ lui $t6, %hi(SP_STATUS_REG) # $t6, 0xa404 +/* 0D70D4 800D64D4 8DC40010 */ lw $a0, %lo(SP_STATUS_REG)($t6) /* 0D70D8 800D64D8 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D70DC 800D64DC 308F001C */ andi $t7, $a0, 0x1c /* 0D70E0 800D64E0 11E00003 */ beqz $t7, .L800D64F0 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s b/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s index 9dd2b4fd..33e5605a 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s @@ -16,21 +16,21 @@ glabel __osSpRawStartDma /* 0D7074 800D6474 ADEE0000 */ sw $t6, ($t7) /* 0D7078 800D6478 0C03233C */ jal osVirtualToPhysical /* 0D707C 800D647C 8FA40020 */ lw $a0, 0x20($sp) -/* 0D7080 800D6480 3C18A404 */ lui $t8, %hi(D_A4040004) # $t8, 0xa404 -/* 0D7084 800D6484 AF020004 */ sw $v0, %lo(D_A4040004)($t8) +/* 0D7080 800D6480 3C18A404 */ lui $t8, %hi(SP_DRAM_ADDR_REG) # $t8, 0xa404 +/* 0D7084 800D6484 AF020004 */ sw $v0, %lo(SP_DRAM_ADDR_REG)($t8) /* 0D7088 800D6488 8FB90018 */ lw $t9, 0x18($sp) /* 0D708C 800D648C 17200006 */ bnez $t9, .L800D64A8 /* 0D7090 800D6490 00000000 */ nop /* 0D7094 800D6494 8FA80024 */ lw $t0, 0x24($sp) -/* 0D7098 800D6498 3C0AA404 */ lui $t2, %hi(D_A404000C) # $t2, 0xa404 +/* 0D7098 800D6498 3C0AA404 */ lui $t2, %hi(SP_WR_LEN_REG) # $t2, 0xa404 /* 0D709C 800D649C 2509FFFF */ addiu $t1, $t0, -1 /* 0D70A0 800D64A0 10000005 */ b .L800D64B8 -/* 0D70A4 800D64A4 AD49000C */ sw $t1, %lo(D_A404000C)($t2) +/* 0D70A4 800D64A4 AD49000C */ sw $t1, %lo(SP_WR_LEN_REG)($t2) .L800D64A8: /* 0D70A8 800D64A8 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D70AC 800D64AC 3C0DA404 */ lui $t5, %hi(D_A4040008) # $t5, 0xa404 +/* 0D70AC 800D64AC 3C0DA404 */ lui $t5, %hi(SP_RD_LEN_REG) # $t5, 0xa404 /* 0D70B0 800D64B0 256CFFFF */ addiu $t4, $t3, -1 -/* 0D70B4 800D64B4 ADAC0008 */ sw $t4, %lo(D_A4040008)($t5) +/* 0D70B4 800D64B4 ADAC0008 */ sw $t4, %lo(SP_RD_LEN_REG)($t5) .L800D64B8: /* 0D70B8 800D64B8 00001025 */ move $v0, $zero .L800D64BC: diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s b/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s index 5dfa9740..21c1baff 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s @@ -1,6 +1,6 @@ glabel __osSpSetPc -/* 0D7000 800D6400 3C0EA404 */ lui $t6, %hi(D_A4040010) # $t6, 0xa404 -/* 0D7004 800D6404 8DC50010 */ lw $a1, %lo(D_A4040010)($t6) +/* 0D7000 800D6400 3C0EA404 */ lui $t6, %hi(SP_STATUS_REG) # $t6, 0xa404 +/* 0D7004 800D6404 8DC50010 */ lw $a1, %lo(SP_STATUS_REG)($t6) /* 0D7008 800D6408 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D700C 800D640C 30AF0001 */ andi $t7, $a1, 1 /* 0D7010 800D6410 15E00003 */ bnez $t7, .L800D6420 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s b/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s index 85c395bf..81d5c099 100644 --- a/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s +++ b/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s @@ -6,9 +6,9 @@ glabel __osViSwapContext /* 0D6CA0 800D60A0 AFB00018 */ sw $s0, 0x18($sp) /* 0D6CA4 800D60A4 AFA00030 */ sw $zero, 0x30($sp) /* 0D6CA8 800D60A8 3C11800E */ lui $s1, %hi(__osViNext) # $s1, 0x800e -/* 0D6CAC 800D60AC 3C0EA440 */ lui $t6, %hi(D_A4400010) # $t6, 0xa440 +/* 0D6CAC 800D60AC 3C0EA440 */ lui $t6, %hi(VI_CURRENT_REG) # $t6, 0xa440 /* 0D6CB0 800D60B0 8E314874 */ lw $s1, %lo(__osViNext)($s1) -/* 0D6CB4 800D60B4 8DCF0010 */ lw $t7, %lo(D_A4400010)($t6) +/* 0D6CB4 800D60B4 8DCF0010 */ lw $t7, %lo(VI_CURRENT_REG)($t6) /* 0D6CB8 800D60B8 8E300008 */ lw $s0, 8($s1) /* 0D6CBC 800D60BC 31F80001 */ andi $t8, $t7, 1 /* 0D6CC0 800D60C0 AFB80030 */ sw $t8, 0x30($sp) @@ -150,43 +150,43 @@ glabel __osViSwapContext /* 0D6EB8 800D62B8 AFA2003C */ sw $v0, 0x3c($sp) .L800D62BC: /* 0D6EBC 800D62BC 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D6EC0 800D62C0 3C0BA440 */ lui $t3, %hi(D_A4400020) # $t3, 0xa440 -/* 0D6EC4 800D62C4 3C08A440 */ lui $t0, %hi(D_A440002C) # $t0, 0xa440 -/* 0D6EC8 800D62C8 AD6A0004 */ sw $t2, %lo(D_A4400004)($t3) +/* 0D6EC0 800D62C0 3C0BA440 */ lui $t3, %hi(VI_LEAP_REG) # $t3, 0xa440 +/* 0D6EC4 800D62C4 3C08A440 */ lui $t0, %hi(VI_V_BURST_REG) # $t0, 0xa440 +/* 0D6EC8 800D62C8 AD6A0004 */ sw $t2, %lo(VI_ORIGIN_REG)($t3) /* 0D6ECC 800D62CC 8E0C0008 */ lw $t4, 8($s0) -/* 0D6ED0 800D62D0 3C0FA440 */ lui $t7, %hi(D_A4400014) # $t7, 0xa440 -/* 0D6ED4 800D62D4 3C18A440 */ lui $t8, %hi(D_A4400018) # $t8, 0xa440 -/* 0D6ED8 800D62D8 AD0C0008 */ sw $t4, %lo(D_A4400008)($t0) +/* 0D6ED0 800D62D0 3C0FA440 */ lui $t7, %hi(VI_BURST_REG) # $t7, 0xa440 +/* 0D6ED4 800D62D4 3C18A440 */ lui $t8, %hi(VI_V_SYNC_REG) # $t8, 0xa440 +/* 0D6ED8 800D62D8 AD0C0008 */ sw $t4, %lo(VI_WIDTH_REG)($t0) /* 0D6EDC 800D62DC 8E0D000C */ lw $t5, 0xc($s0) -/* 0D6EE0 800D62E0 3C09A440 */ lui $t1, %hi(D_A440001C) # $t1, 0xa440 +/* 0D6EE0 800D62E0 3C09A440 */ lui $t1, %hi(VI_H_SYNC_REG) # $t1, 0xa440 /* 0D6EE4 800D62E4 3C01800E */ lui $at, %hi(__osViNext) # $at, 0x800e -/* 0D6EE8 800D62E8 ADED0014 */ sw $t5, %lo(D_A4400014)($t7) +/* 0D6EE8 800D62E8 ADED0014 */ sw $t5, %lo(VI_BURST_REG)($t7) /* 0D6EEC 800D62EC 8E0E0010 */ lw $t6, 0x10($s0) -/* 0D6EF0 800D62F0 AF0E0018 */ sw $t6, %lo(D_A4400018)($t8) +/* 0D6EF0 800D62F0 AF0E0018 */ sw $t6, %lo(VI_V_SYNC_REG)($t8) /* 0D6EF4 800D62F4 8E190014 */ lw $t9, 0x14($s0) -/* 0D6EF8 800D62F8 AD39001C */ sw $t9, %lo(D_A440001C)($t1) +/* 0D6EF8 800D62F8 AD39001C */ sw $t9, %lo(VI_H_SYNC_REG)($t1) /* 0D6EFC 800D62FC 8E0A0018 */ lw $t2, 0x18($s0) -/* 0D6F00 800D6300 3C19A440 */ lui $t9, %hi(D_A440000C) # $t9, 0xa440 -/* 0D6F04 800D6304 AD6A0020 */ sw $t2, %lo(D_A4400020)($t3) +/* 0D6F00 800D6300 3C19A440 */ lui $t9, %hi(VI_INTR_REG) # $t9, 0xa440 +/* 0D6F04 800D6304 AD6A0020 */ sw $t2, %lo(VI_LEAP_REG)($t3) /* 0D6F08 800D6308 8FAC0038 */ lw $t4, 0x38($sp) -/* 0D6F0C 800D630C AD0C0024 */ sw $t4, %lo(D_A4400024)($t0) +/* 0D6F0C 800D630C AD0C0024 */ sw $t4, %lo(VI_H_START_REG)($t0) /* 0D6F10 800D6310 8FAD0030 */ lw $t5, 0x30($sp) /* 0D6F14 800D6314 000D7880 */ sll $t7, $t5, 2 /* 0D6F18 800D6318 01ED7821 */ addu $t7, $t7, $t5 /* 0D6F1C 800D631C 000F7880 */ sll $t7, $t7, 2 /* 0D6F20 800D6320 020F7021 */ addu $t6, $s0, $t7 /* 0D6F24 800D6324 8DD80030 */ lw $t8, 0x30($t6) -/* 0D6F28 800D6328 AF380028 */ sw $t8, %lo(D_A4400028)($t9) +/* 0D6F28 800D6328 AF380028 */ sw $t8, %lo(VI_V_START_REG)($t9) /* 0D6F2C 800D632C 8FA90030 */ lw $t1, 0x30($sp) /* 0D6F30 800D6330 00095080 */ sll $t2, $t1, 2 /* 0D6F34 800D6334 01495021 */ addu $t2, $t2, $t1 /* 0D6F38 800D6338 000A5080 */ sll $t2, $t2, 2 /* 0D6F3C 800D633C 020A5821 */ addu $t3, $s0, $t2 /* 0D6F40 800D6340 8D6C0034 */ lw $t4, 0x34($t3) -/* 0D6F44 800D6344 3C0AA440 */ lui $t2, %hi(D_A4400030) # $t2, 0xa440 -/* 0D6F48 800D6348 AD0C002C */ sw $t4, %lo(D_A440002C)($t0) +/* 0D6F44 800D6344 3C0AA440 */ lui $t2, %hi(VI_X_SCALE_REG) # $t2, 0xa440 +/* 0D6F48 800D6348 AD0C002C */ sw $t4, %lo(VI_V_BURST_REG)($t0) /* 0D6F4C 800D634C 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D6F50 800D6350 3C0CA440 */ lui $t4, %hi(D_A4400034) # $t4, 0xa440 +/* 0D6F50 800D6350 3C0CA440 */ lui $t4, %hi(VI_Y_SCALE_REG) # $t4, 0xa440 /* 0D6F54 800D6354 000D7880 */ sll $t7, $t5, 2 /* 0D6F58 800D6358 01ED7821 */ addu $t7, $t7, $t5 /* 0D6F5C 800D635C 000F7880 */ sll $t7, $t7, 2 @@ -194,13 +194,13 @@ glabel __osViSwapContext /* 0D6F64 800D6364 8DD80038 */ lw $t8, 0x38($t6) /* 0D6F68 800D6368 3C0DA440 */ lui $t5, 0xa440 /* 0D6F6C 800D636C 3C0F800E */ lui $t7, %hi(__osViCurr) # $t7, 0x800e -/* 0D6F70 800D6370 AF38000C */ sw $t8, %lo(D_A440000C)($t9) +/* 0D6F70 800D6370 AF38000C */ sw $t8, %lo(VI_INTR_REG)($t9) /* 0D6F74 800D6374 8E290020 */ lw $t1, 0x20($s1) /* 0D6F78 800D6378 3C18800E */ lui $t8, %hi(__osViCurr) # $t8, 0x800e /* 0D6F7C 800D637C 3C0E800E */ lui $t6, %hi(__osViNext) # $t6, 0x800e -/* 0D6F80 800D6380 AD490030 */ sw $t1, %lo(D_A4400030)($t2) +/* 0D6F80 800D6380 AD490030 */ sw $t1, %lo(VI_X_SCALE_REG)($t2) /* 0D6F84 800D6384 8E2B002C */ lw $t3, 0x2c($s1) -/* 0D6F88 800D6388 AD8B0034 */ sw $t3, %lo(D_A4400034)($t4) +/* 0D6F88 800D6388 AD8B0034 */ sw $t3, %lo(VI_Y_SCALE_REG)($t4) /* 0D6F8C 800D638C 8E28000C */ lw $t0, 0xc($s1) /* 0D6F90 800D6390 ADA80000 */ sw $t0, ($t5) /* 0D6F94 800D6394 8DEF4870 */ lw $t7, %lo(__osViCurr)($t7) diff --git a/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s b/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s index 76e1a859..6fc35ae7 100644 --- a/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s +++ b/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s @@ -1,13 +1,13 @@ glabel osEPiRawWriteIo -/* 0D7160 800D6560 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D7164 800D6564 8DC70010 */ lw $a3, %lo(D_A4600010)($t6) +/* 0D7160 800D6560 3C0EA460 */ lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 +/* 0D7164 800D6564 8DC70010 */ lw $a3, %lo(PI_STATUS_REG)($t6) /* 0D7168 800D6568 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D716C 800D656C 30EF0003 */ andi $t7, $a3, 3 /* 0D7170 800D6570 11E00006 */ beqz $t7, .L800D658C /* 0D7174 800D6574 00000000 */ nop .L800D6578: -/* 0D7178 800D6578 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D717C 800D657C 8F070010 */ lw $a3, %lo(D_A4600010)($t8) +/* 0D7178 800D6578 3C18A460 */ lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460 +/* 0D717C 800D657C 8F070010 */ lw $a3, %lo(PI_STATUS_REG)($t8) /* 0D7180 800D6580 30F90003 */ andi $t9, $a3, 3 /* 0D7184 800D6584 1720FFFC */ bnez $t9, .L800D6578 /* 0D7188 800D6588 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3160/__osViInit.s b/lib/asm/non_matchings/unknown_0D3160/__osViInit.s index 30c05010..e2a221a7 100644 --- a/lib/asm/non_matchings/unknown_0D3160/__osViInit.s +++ b/lib/asm/non_matchings/unknown_0D3160/__osViInit.s @@ -65,17 +65,17 @@ glabel __osViInit /* 0D3800 800D2C00 3C0C800E */ lui $t4, %hi(__osViNext) # $t4, 0x800e /* 0D3804 800D2C04 A56A0000 */ sh $t2, ($t3) /* 0D3808 800D2C08 8D8C4874 */ lw $t4, %lo(__osViNext)($t4) -/* 0D380C 800D2C0C 3C18A440 */ lui $t8, %hi(D_A4400010) # $t8, 0xa440 +/* 0D380C 800D2C0C 3C18A440 */ lui $t8, %hi(VI_CURRENT_REG) # $t8, 0xa440 /* 0D3810 800D2C10 8D8D0008 */ lw $t5, 8($t4) /* 0D3814 800D2C14 8DAF0004 */ lw $t7, 4($t5) /* 0D3818 800D2C18 AD8F000C */ sw $t7, 0xc($t4) -/* 0D381C 800D2C1C 8F0E0010 */ lw $t6, %lo(D_A4400010)($t8) +/* 0D381C 800D2C1C 8F0E0010 */ lw $t6, %lo(VI_CURRENT_REG)($t8) /* 0D3820 800D2C20 2DC1000B */ sltiu $at, $t6, 0xb /* 0D3824 800D2C24 14200006 */ bnez $at, .L800D2C40 /* 0D3828 800D2C28 00000000 */ nop .L800D2C2C: -/* 0D382C 800D2C2C 3C19A440 */ lui $t9, %hi(D_A4400010) # $t9, 0xa440 -/* 0D3830 800D2C30 8F280010 */ lw $t0, %lo(D_A4400010)($t9) +/* 0D382C 800D2C2C 3C19A440 */ lui $t9, %hi(VI_CURRENT_REG) # $t9, 0xa440 +/* 0D3830 800D2C30 8F280010 */ lw $t0, %lo(VI_CURRENT_REG)($t9) /* 0D3834 800D2C34 2D01000B */ sltiu $at, $t0, 0xb /* 0D3838 800D2C38 1020FFFC */ beqz $at, .L800D2C2C /* 0D383C 800D2C3C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D4270/__osAiDeviceBusy.s b/lib/asm/non_matchings/unknown_0D4270/__osAiDeviceBusy.s index 03bc2dbc..e6bb2478 100644 --- a/lib/asm/non_matchings/unknown_0D4270/__osAiDeviceBusy.s +++ b/lib/asm/non_matchings/unknown_0D4270/__osAiDeviceBusy.s @@ -1,6 +1,6 @@ glabel __osAiDeviceBusy -/* 0D4270 800D3670 3C0EA450 */ lui $t6, %hi(D_A450000C) # $t6, 0xa450 -/* 0D4274 800D3674 8DC4000C */ lw $a0, %lo(D_A450000C)($t6) +/* 0D4270 800D3670 3C0EA450 */ lui $t6, %hi(AI_STATUS_REG) # $t6, 0xa450 +/* 0D4274 800D3674 8DC4000C */ lw $a0, %lo(AI_STATUS_REG)($t6) /* 0D4278 800D3678 3C018000 */ lui $at, 0x8000 /* 0D427C 800D367C 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D4280 800D3680 00817824 */ and $t7, $a0, $at diff --git a/lib/asm/non_matchings/unknown_0D5390/osPiRawWriteIo.s b/lib/asm/non_matchings/unknown_0D5390/osPiRawWriteIo.s index 1aa4ed67..283eccdb 100644 --- a/lib/asm/non_matchings/unknown_0D5390/osPiRawWriteIo.s +++ b/lib/asm/non_matchings/unknown_0D5390/osPiRawWriteIo.s @@ -1,13 +1,13 @@ glabel osPiRawWriteIo -/* 0D5390 800D4790 3C0EA460 */ lui $t6, %hi(D_A4600010) # $t6, 0xa460 -/* 0D5394 800D4794 8DC60010 */ lw $a2, %lo(D_A4600010)($t6) +/* 0D5390 800D4790 3C0EA460 */ lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 +/* 0D5394 800D4794 8DC60010 */ lw $a2, %lo(PI_STATUS_REG)($t6) /* 0D5398 800D4798 27BDFFF8 */ addiu $sp, $sp, -8 /* 0D539C 800D479C 30CF0003 */ andi $t7, $a2, 3 /* 0D53A0 800D47A0 11E00006 */ beqz $t7, .L800D47BC /* 0D53A4 800D47A4 00000000 */ nop .L800D47A8: -/* 0D53A8 800D47A8 3C18A460 */ lui $t8, %hi(D_A4600010) # $t8, 0xa460 -/* 0D53AC 800D47AC 8F060010 */ lw $a2, %lo(D_A4600010)($t8) +/* 0D53A8 800D47A8 3C18A460 */ lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460 +/* 0D53AC 800D47AC 8F060010 */ lw $a2, %lo(PI_STATUS_REG)($t8) /* 0D53B0 800D47B0 30D90003 */ andi $t9, $a2, 3 /* 0D53B4 800D47B4 1720FFFC */ bnez $t9, .L800D47A8 /* 0D53B8 800D47B8 00000000 */ nop diff --git a/lib/src/os/unknown_0CE200.c b/lib/src/os/unknown_0CE200.c index 1027d2b3..ec79252a 100644 --- a/lib/src/os/unknown_0CE200.c +++ b/lib/src/os/unknown_0CE200.c @@ -25,7 +25,7 @@ u16 retrace; //Used in viMgrMain, but it's supposed to be static in that functio u16 D_8012D192; s32 D_8012D194[2]; s32 D_8012D1A0[16]; -s32 D_8012D1E0[2]; +s32 piAccessBuf[2]; //Should be static, but this works for now s32 piAccessQueue[6]; OSTimer D_8012D200; OSTime __osCurrentTime; diff --git a/lib/src/unknown_0D3020.c b/lib/src/unknown_0D3020.c index c410d68e..0dd6be28 100644 --- a/lib/src/unknown_0D3020.c +++ b/lib/src/unknown_0D3020.c @@ -7,11 +7,11 @@ #define PI_Q_BUF_LEN 1 extern u32 __osPiAccessQueueEnabled;//__osPiAccessQueueEnabled -extern OSMesg D_8012D1E0[PI_Q_BUF_LEN];//piAccessBuf +extern OSMesg piAccessBuf[PI_Q_BUF_LEN];//piAccessBuf extern OSMesgQueue piAccessQueue; //__osPiAccessQueue void __osPiCreateAccessQueue(void) { __osPiAccessQueueEnabled = 1; - osCreateMesgQueue(&piAccessQueue, D_8012D1E0, PI_Q_BUF_LEN); + osCreateMesgQueue(&piAccessQueue, piAccessBuf, PI_Q_BUF_LEN); osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); } diff --git a/src/camera.c b/src/camera.c index cc8aa85d..10e8d457 100644 --- a/src/camera.c +++ b/src/camera.c @@ -142,7 +142,6 @@ u8 D_80121150[16]; /******************************/ #ifdef NON_MATCHING -extern s32 D_A4600010; extern s32 D_B0000578; void func_80065EA0(void) { @@ -163,7 +162,7 @@ void func_80065EA0(void) { D_80120D18 = 0; D_80120D15 = 0; D_800DD060 = 0; - while (D_A4600010 & 3) { + while (IO_READ(PI_STATUS_REG) & 3) { } if ((D_B0000578 & 0xFFFF) != 0x8965) { D_800DD060 = 1; diff --git a/src/camera.h b/src/camera.h index 285bea05..c5303459 100644 --- a/src/camera.h +++ b/src/camera.h @@ -79,10 +79,6 @@ extern s32 D_800DD300; extern s16 gButtonMask; -extern s32 D_A4000000; - -extern s32 SP_IMEM; - //TODO: Figure out where these functions live: unknown_070110? void func_8006F870(Matrix, Matrix); //unknown_070110 void func_800705F8(s32, f32, f32, f32); //From unknown_070110 diff --git a/undefined_syms.txt b/undefined_syms.txt index 9cc15528..431780e9 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -4,44 +4,34 @@ osResetType = 0x8000030C; osCicId = 0x80000310; osAppNMIBuffer = 0x8000031C; -D_A0000200 = 0xA0000200; -D_A0000284 = 0xA0000284; -D_A4000000 = 0xA4000000; -SP_IMEM = 0xA4001000; -D_A4040004 = 0xA4040004; -D_A4040008 = 0xA4040008; -D_A404000C = 0xA404000C; -D_A4040010 = 0xA4040010; -D_A4100004 = 0xA4100004; -D_A410000C = 0xA410000C; -D_A4300008 = 0xA4300008; -D_A430000C = 0xA430000C; -D_A4400004 = 0xA4400004; -D_A4400008 = 0xA4400008; -D_A440000C = 0xA440000C; -D_A4400010 = 0xA4400010; -D_A4400014 = 0xA4400014; -D_A4400018 = 0xA4400018; -D_A440001C = 0xA440001C; -D_A4400020 = 0xA4400020; -D_A4400024 = 0xA4400024; -D_A4400028 = 0xA4400028; -D_A440002C = 0xA440002C; -D_A4400030 = 0xA4400030; -D_A4400034 = 0xA4400034; -D_A4500004 = 0xA4500004; -D_A4500008 = 0xA4500008; -D_A450000C = 0xA450000C; -D_A4500010 = 0xA4500010; -D_A4500014 = 0xA4500014; -D_A4600004 = 0xA4600004; -D_A4600008 = 0xA4600008; -D_A460000C = 0xA460000C; -D_A4600010 = 0xA4600010; -D_A4800004 = 0xA4800004; -D_A4800010 = 0xA4800010; -D_A4800018 = 0xA4800018; -D_A5000508 = 0xA5000508; +THREAD_S6 = 0xA0000200; +THREAD_PC = 0xA0000284; +SP_DRAM_ADDR_REG = 0xA4040004; +SP_RD_LEN_REG = 0xA4040008; +SP_WR_LEN_REG = 0xA404000C; +SP_STATUS_REG = 0xA4040010; +DPC_STATUS_REG = 0xA410000C; +MI_INTR_REG = 0xA4300008; +MI_INTR_MASK_REG = 0xA430000C; +VI_ORIGIN_REG = 0xA4400004; +VI_WIDTH_REG = 0xA4400008; +VI_INTR_REG = 0xA440000C; +VI_CURRENT_REG = 0xA4400010; +VI_BURST_REG = 0xA4400014; +VI_V_SYNC_REG = 0xA4400018; +VI_H_SYNC_REG = 0xA440001C; +VI_LEAP_REG = 0xA4400020; +VI_H_START_REG = 0xA4400024; +VI_V_START_REG = 0xA4400028; +VI_V_BURST_REG = 0xA440002C; +VI_X_SCALE_REG = 0xA4400030; +VI_Y_SCALE_REG = 0xA4400034; +AI_STATUS_REG = 0xA450000C; +PI_STATUS_REG = 0xA4600010; +SI_PIF_ADDR_RD64B_REG = 0xA4800004; +SI_PIF_ADDR_WR64B_REG = 0xA4800010; +SI_STATUS_REG = 0xA4800018; +LEO_STATUS = 0xA5000508; D_B0000574 = 0xB0000574; D_B0000578 = 0xB0000578; From 117dccc3d7a17e710a1592f5d521bdf88326e1f6 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 11:19:14 -0400 Subject: [PATCH 05/46] Decomp __osSetHWIntrRoutine and clean up some includes in other os files --- lib/asm/exception/__osException.s | 4 ++-- .../unknown_0D5390/__osSetHWIntrRoutine.s | 4 ++-- lib/src/al/alCopy.c | 2 +- lib/src/os/__osSetHWIntrRoutine.c | 13 +++++++++++++ lib/src/os/contramread.c | 1 - lib/src/os/contramwrite.c | 1 - lib/src/os/crc.c | 1 - lib/src/os/osAiGetLength.c | 2 -- lib/src/os/osAiSetNextBuffer.c | 1 - lib/src/os/osCreateThread.c | 4 ++-- lib/src/os/osDpGetStatus.c | 1 - lib/src/os/osDpSetNextBuffer.c | 2 +- lib/src/os/osEepromRead.c | 2 -- lib/src/os/osEpiRawStartDma.c | 2 -- lib/src/os/osGetActiveQueue.c | 2 -- lib/src/os/osGetCount.c | 1 - lib/src/os/osInvalDCache.c | 1 - lib/src/os/osSetEventMesg.c | 2 +- lib/src/os/osSetIntMask.c | 1 - lib/src/os/osSetTimer.c | 1 - lib/src/os/osTimer.c | 3 +-- lib/src/os/osViMgr.c | 10 +++++----- lib/src/os/osWritebackDCacheAll.c | 1 - lib/src/os/{unknown_0C7F40.c => unknown_0C7340.c} | 1 - lib/src/os/unknown_0D5390.c | 6 ------ 25 files changed, 28 insertions(+), 41 deletions(-) create mode 100644 lib/src/os/__osSetHWIntrRoutine.c rename lib/src/os/{unknown_0C7F40.c => unknown_0C7340.c} (90%) delete mode 100644 lib/src/os/unknown_0D5390.c diff --git a/lib/asm/exception/__osException.s b/lib/asm/exception/__osException.s index 753995fb..04603d60 100644 --- a/lib/asm/exception/__osException.s +++ b/lib/asm/exception/__osException.s @@ -188,9 +188,9 @@ glabel __osException /* 0D3B20 800D2F20 2401F7FF */ li $at, -2049 /* 0D3B24 800D2F24 02018024 */ and $s0, $s0, $at /* 0D3B28 800D2F28 240A0004 */ li $t2, 4 -/* 0D3B2C 800D2F2C 3C01800E */ lui $at, %hi(D_800E48A0) # $at, 0x800e +/* 0D3B2C 800D2F2C 3C01800E */ lui $at, %hi(__osHwIntTable) # $at, 0x800e /* 0D3B30 800D2F30 002A0821 */ addu $at, $at, $t2 -/* 0D3B34 800D2F34 8C2A48A0 */ lw $t2, %lo(D_800E48A0)($at) +/* 0D3B34 800D2F34 8C2A48A0 */ lw $t2, %lo(__osHwIntTable)($at) /* 0D3B38 800D2F38 3C1D8013 */ lui $sp, %hi(D_8012AAE0) # $sp, 0x8013 /* 0D3B3C 800D2F3C 27BDAAE0 */ addiu $sp, %lo(D_8012AAE0) # addiu $sp, $sp, -0x5520 /* 0D3B40 800D2F40 24040010 */ li $a0, 16 diff --git a/lib/asm/non_matchings/unknown_0D5390/__osSetHWIntrRoutine.s b/lib/asm/non_matchings/unknown_0D5390/__osSetHWIntrRoutine.s index 12e90d2f..dd6fbaca 100644 --- a/lib/asm/non_matchings/unknown_0D5390/__osSetHWIntrRoutine.s +++ b/lib/asm/non_matchings/unknown_0D5390/__osSetHWIntrRoutine.s @@ -7,13 +7,13 @@ glabel __osSetHWIntrRoutine /* 0D5404 800D4804 AFB00018 */ sw $s0, 0x18($sp) /* 0D5408 800D4808 8FAF0028 */ lw $t7, 0x28($sp) /* 0D540C 800D480C 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D5410 800D4810 3C01800E */ lui $at, %hi(D_800E48A0) # $at, 0x800e +/* 0D5410 800D4810 3C01800E */ lui $at, %hi(__osHwIntTable) # $at, 0x800e /* 0D5414 800D4814 000FC080 */ sll $t8, $t7, 2 /* 0D5418 800D4818 00408025 */ move $s0, $v0 /* 0D541C 800D481C 00380821 */ addu $at, $at, $t8 /* 0D5420 800D4820 02002025 */ move $a0, $s0 /* 0D5424 800D4824 0C034960 */ jal __osRestoreInt -/* 0D5428 800D4828 AC2E48A0 */ sw $t6, %lo(D_800E48A0)($at) +/* 0D5428 800D4828 AC2E48A0 */ sw $t6, %lo(__osHwIntTable)($at) /* 0D542C 800D482C 8FBF001C */ lw $ra, 0x1c($sp) /* 0D5430 800D4830 8FB00018 */ lw $s0, 0x18($sp) /* 0D5434 800D4834 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/lib/src/al/alCopy.c b/lib/src/al/alCopy.c index 9134fa85..8826cf0c 100644 --- a/lib/src/al/alCopy.c +++ b/lib/src/al/alCopy.c @@ -5,7 +5,7 @@ #include "macros.h" //TODO: This probably belongs somewhere else -s32 D_800E48A0[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; +s32 __osHwIntTable[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; void alCopy(void *src, void *dest, s32 len) { s32 i; diff --git a/lib/src/os/__osSetHWIntrRoutine.c b/lib/src/os/__osSetHWIntrRoutine.c new file mode 100644 index 00000000..f43cc300 --- /dev/null +++ b/lib/src/os/__osSetHWIntrRoutine.c @@ -0,0 +1,13 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D47DC */ + +#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/lib/src/os/contramread.c b/lib/src/os/contramread.c index 2e88c70e..f9e329a1 100644 --- a/lib/src/os/contramread.c +++ b/lib/src/os/contramread.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800CDCA0 */ -#include "macros.h" #include "libultra_internal.h" #include "controller.h" #include "siint.h" diff --git a/lib/src/os/contramwrite.c b/lib/src/os/contramwrite.c index e4d9b996..4a5bdc8f 100644 --- a/lib/src/os/contramwrite.c +++ b/lib/src/os/contramwrite.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800CD8F0 */ #include "libultra_internal.h" -#include "macros.h" #include "controller.h" #include "siint.h" diff --git a/lib/src/os/crc.c b/lib/src/os/crc.c index a0b317bd..a3f8e32e 100644 --- a/lib/src/os/crc.c +++ b/lib/src/os/crc.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800CD770 */ #include "types.h" -#include "macros.h" u8 __osContAddressCrc(u16 addr) { u8 temp; diff --git a/lib/src/os/osAiGetLength.c b/lib/src/os/osAiGetLength.c index e6170368..7232001c 100644 --- a/lib/src/os/osAiGetLength.c +++ b/lib/src/os/osAiGetLength.c @@ -1,8 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C8E20 */ -#include "types.h" -#include "macros.h" #include "PR/rcp.h" u32 osAiGetLength(void) { diff --git a/lib/src/os/osAiSetNextBuffer.c b/lib/src/os/osAiSetNextBuffer.c index b4a15580..8d023f15 100644 --- a/lib/src/os/osAiSetNextBuffer.c +++ b/lib/src/os/osAiSetNextBuffer.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800C8D70 */ #include "types.h" -#include "macros.h" #include #include #include "osVirtualToPhysical.h" diff --git a/lib/src/os/osCreateThread.c b/lib/src/os/osCreateThread.c index e74c1887..c4597315 100644 --- a/lib/src/os/osCreateThread.c +++ b/lib/src/os/osCreateThread.c @@ -4,8 +4,8 @@ #include "libultra_internal.h" #include "PR/R4300.h" -extern OSThread *__osActiveQueue; //__osActiveQueue; -void __osCleanupThread(void); //__osCleanupThread +extern OSThread *__osActiveQueue; +void __osCleanupThread(void); void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri p) { register u32 saveMask; diff --git a/lib/src/os/osDpGetStatus.c b/lib/src/os/osDpGetStatus.c index 0b0769c8..68f2344e 100644 --- a/lib/src/os/osDpGetStatus.c +++ b/lib/src/os/osDpGetStatus.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800D18D0 */ #include "types.h" -#include "macros.h" #include "libultra_internal.h" u32 osDpGetStatus(){ diff --git a/lib/src/os/osDpSetNextBuffer.c b/lib/src/os/osDpSetNextBuffer.c index de35b0bd..ec05be1c 100644 --- a/lib/src/os/osDpSetNextBuffer.c +++ b/lib/src/os/osDpSetNextBuffer.c @@ -4,7 +4,7 @@ #include "libultra_internal.h" #include "osVirtualToPhysical.h" -int __osDpDeviceBusy(void); +s32 __osDpDeviceBusy(void); s32 osDpSetNextBuffer(void *bufPtr, u64 size) { register u32 stat; diff --git a/lib/src/os/osEepromRead.c b/lib/src/os/osEepromRead.c index 4f66e6c8..c5856877 100644 --- a/lib/src/os/osEepromRead.c +++ b/lib/src/os/osEepromRead.c @@ -1,8 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800CE280 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" #include "PR/rcp.h" #include "controller.h" diff --git a/lib/src/os/osEpiRawStartDma.c b/lib/src/os/osEpiRawStartDma.c index 246bac2a..3698b832 100644 --- a/lib/src/os/osEpiRawStartDma.c +++ b/lib/src/os/osEpiRawStartDma.c @@ -1,8 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D2680 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" #include "PR/rcp.h" #include "osVirtualToPhysical.h" diff --git a/lib/src/os/osGetActiveQueue.c b/lib/src/os/osGetActiveQueue.c index 27b2fff9..7dc7f369 100644 --- a/lib/src/os/osGetActiveQueue.c +++ b/lib/src/os/osGetActiveQueue.c @@ -1,8 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D2470 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" extern OSThread *__osActiveQueue; diff --git a/lib/src/os/osGetCount.c b/lib/src/os/osGetCount.c index c6930a89..b553ef2b 100644 --- a/lib/src/os/osGetCount.c +++ b/lib/src/os/osGetCount.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C78D0 */ -#include "types.h" #include "macros.h" //I don't believe that can be decompiled diff --git a/lib/src/os/osInvalDCache.c b/lib/src/os/osInvalDCache.c index 08cbb7ef..3fea6d4c 100644 --- a/lib/src/os/osInvalDCache.c +++ b/lib/src/os/osInvalDCache.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D17F0 */ -#include "types.h" #include "macros.h" //Most likely hand written and unable to be be decomped diff --git a/lib/src/os/osSetEventMesg.c b/lib/src/os/osSetEventMesg.c index 47339dbf..f5fdea3d 100644 --- a/lib/src/os/osSetEventMesg.c +++ b/lib/src/os/osSetEventMesg.c @@ -8,7 +8,7 @@ typedef struct __OSEventState { OSMesg message; } __OSEventState; -__OSEventState __osEventStateTab[15]; // __osEventStateTab[OS_NUM_EVENTS]; +__OSEventState __osEventStateTab[15]; //OS_NUM_EVENTS = 15 void osSetEventMesg(OSEvent event, OSMesgQueue *mq, OSMesg msg) { register u32 saveMask = __osDisableInt(); __OSEventState *es; diff --git a/lib/src/os/osSetIntMask.c b/lib/src/os/osSetIntMask.c index cbe2348f..286825ce 100644 --- a/lib/src/os/osSetIntMask.c +++ b/lib/src/os/osSetIntMask.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C9A30 */ -#include "types.h" #include "macros.h" //I don't believe it's possible to decomp this one diff --git a/lib/src/os/osSetTimer.c b/lib/src/os/osSetTimer.c index 41c97d8a..ff3db096 100644 --- a/lib/src/os/osSetTimer.c +++ b/lib/src/os/osSetTimer.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D4DE0 */ -#include "macros.h" #include "libultra_internal.h" extern OSTimer *__osTimerList; diff --git a/lib/src/os/osTimer.c b/lib/src/os/osTimer.c index 9a9f2bea..77d6e70d 100644 --- a/lib/src/os/osTimer.c +++ b/lib/src/os/osTimer.c @@ -18,8 +18,7 @@ OSTime __osInsertTimer(OSTimer *t); #ifdef NON_MATCHING //Seems to be a mistmatch based on where __osCurrentTime is defined. //Scratch proving that: https://decomp.me/scratch/OB3iP -void __osTimerServicesInit(void) -{ +void __osTimerServicesInit(void) { __osCurrentTime = 0; __osBaseCounter = 0; __osViIntrCount = 0; diff --git a/lib/src/os/osViMgr.c b/lib/src/os/osViMgr.c index 49a1a551..0789aec4 100644 --- a/lib/src/os/osViMgr.c +++ b/lib/src/os/osViMgr.c @@ -8,20 +8,20 @@ extern OSTime __osCurrentTime; extern u32 __osBaseCounter; -extern u32 __osViIntrCount; //__osViIntrCount +extern u32 __osViIntrCount; OSDevMgr __osViDevMgr = {0}; #define OS_VIM_STACKSIZE 4096 -u8 viThreadStack[2960]; // viThreadStack[OS_VIM_STACKSIZE]; +u8 viThreadStack[2960]; // Should be OS_VIM_STACKSIZE? s32 gThread30Stack; extern OSThread viThread; extern OSMesgQueue viEventQueue; -extern OSMesg viEventBuf[5]; //viEventBuf; -extern OSIoMesg viRetraceMsg; //viRetraceMsg -extern OSIoMesg viCounterMsg; //viCounterMsg +extern OSMesg viEventBuf[5]; +extern OSIoMesg viRetraceMsg; +extern OSIoMesg viCounterMsg; void viMgrMain(void *arg); diff --git a/lib/src/os/osWritebackDCacheAll.c b/lib/src/os/osWritebackDCacheAll.c index 1c238a06..3aa719a3 100644 --- a/lib/src/os/osWritebackDCacheAll.c +++ b/lib/src/os/osWritebackDCacheAll.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D18A0 */ -#include "types.h" #include "macros.h" //Likely hand written and impossible to decomp diff --git a/lib/src/os/unknown_0C7F40.c b/lib/src/os/unknown_0C7340.c similarity index 90% rename from lib/src/os/unknown_0C7F40.c rename to lib/src/os/unknown_0C7340.c index cb91a737..e8c8ccde 100644 --- a/lib/src/os/unknown_0C7F40.c +++ b/lib/src/os/unknown_0C7340.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800C7340 */ #include "types.h" -#include "macros.h" //Called only in osInitialize s32 func_800C7340(void) { diff --git a/lib/src/os/unknown_0D5390.c b/lib/src/os/unknown_0D5390.c deleted file mode 100644 index edc82764..00000000 --- a/lib/src/os/unknown_0D5390.c +++ /dev/null @@ -1,6 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D47DC */ - -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D5390/__osSetHWIntrRoutine.s") From 947593ae55f65a34f351e92b8c94ec5214e8a3cd Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 13:06:22 -0400 Subject: [PATCH 06/46] Renamed a few variables and files --- lib/src/mips1/os/osCreatePiManager.c | 6 +++--- lib/src/os/__osSetHWIntrRoutine.c | 1 + lib/src/{unknown_0D3020.c => os/piacs.c} | 14 +++++++------- lib/src/os/unknown_0CE200.c | 2 +- {lib/src => src}/unknown_0CEC50.c | 0 tools/python/generate_ld.py | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) rename lib/src/{unknown_0D3020.c => os/piacs.c} (83%) rename {lib/src => src}/unknown_0CEC50.c (100%) diff --git a/lib/src/mips1/os/osCreatePiManager.c b/lib/src/mips1/os/osCreatePiManager.c index f61adc56..00fd25cf 100644 --- a/lib/src/mips1/os/osCreatePiManager.c +++ b/lib/src/mips1/os/osCreatePiManager.c @@ -5,8 +5,8 @@ #include "libultra_internal.h" #include "stacks.h" -extern OSMesgQueue piAccessQueue; //piAccessQueue -extern u32 __osPiAccessQueueEnabled; //__osPiAccessQueueEnabled +extern OSMesgQueue __osPiAccessQueue; +extern u32 __osPiAccessQueueEnabled; extern OSDevMgr __osPiDevMgr; void __osDevMgrMain(void); @@ -39,7 +39,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC __osPiDevMgr.thread = &piThread; __osPiDevMgr.cmdQueue = cmdQ; __osPiDevMgr.evtQueue = &piEventQueue; - __osPiDevMgr.acsQueue = &piAccessQueue; + __osPiDevMgr.acsQueue = &__osPiAccessQueue; __osPiDevMgr.dma = osPiRawStartDma; __osPiDevMgr.edma = osEPiRawStartDma; diff --git a/lib/src/os/__osSetHWIntrRoutine.c b/lib/src/os/__osSetHWIntrRoutine.c index f43cc300..4fde9b8d 100644 --- a/lib/src/os/__osSetHWIntrRoutine.c +++ b/lib/src/os/__osSetHWIntrRoutine.c @@ -3,6 +3,7 @@ #include "libultra_internal.h" +//TODO: Figure out a better way to declare this. It's currently randomly declared in another file extern s32 (*__osHwIntTable[])(void); void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void)) { diff --git a/lib/src/unknown_0D3020.c b/lib/src/os/piacs.c similarity index 83% rename from lib/src/unknown_0D3020.c rename to lib/src/os/piacs.c index 0dd6be28..a8d65b15 100644 --- a/lib/src/unknown_0D3020.c +++ b/lib/src/os/piacs.c @@ -6,24 +6,24 @@ #include "libultra_internal.h" #define PI_Q_BUF_LEN 1 -extern u32 __osPiAccessQueueEnabled;//__osPiAccessQueueEnabled -extern OSMesg piAccessBuf[PI_Q_BUF_LEN];//piAccessBuf -extern OSMesgQueue piAccessQueue; //__osPiAccessQueue +extern u32 __osPiAccessQueueEnabled; +extern OSMesg piAccessBuf[PI_Q_BUF_LEN]; +extern OSMesgQueue __osPiAccessQueue; void __osPiCreateAccessQueue(void) { __osPiAccessQueueEnabled = 1; - osCreateMesgQueue(&piAccessQueue, piAccessBuf, PI_Q_BUF_LEN); - osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); + osCreateMesgQueue(&__osPiAccessQueue, piAccessBuf, PI_Q_BUF_LEN); + osSendMesg(&__osPiAccessQueue, NULL, OS_MESG_NOBLOCK); } void __osPiGetAccess(void) { OSMesg dummyMesg; if (!__osPiAccessQueueEnabled) __osPiCreateAccessQueue(); - osRecvMesg(&piAccessQueue, &dummyMesg, OS_MESG_BLOCK); + osRecvMesg(&__osPiAccessQueue, &dummyMesg, OS_MESG_BLOCK); } void __osPiRelAccess(void) { - osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK); + osSendMesg(&__osPiAccessQueue, NULL, OS_MESG_NOBLOCK); } /**********************************************************************/ diff --git a/lib/src/os/unknown_0CE200.c b/lib/src/os/unknown_0CE200.c index ec79252a..b4c7853e 100644 --- a/lib/src/os/unknown_0CE200.c +++ b/lib/src/os/unknown_0CE200.c @@ -26,7 +26,7 @@ u16 D_8012D192; s32 D_8012D194[2]; s32 D_8012D1A0[16]; s32 piAccessBuf[2]; //Should be static, but this works for now -s32 piAccessQueue[6]; +s32 __osPiAccessQueue[6]; OSTimer D_8012D200; OSTime __osCurrentTime; s32 __osBaseCounter; diff --git a/lib/src/unknown_0CEC50.c b/src/unknown_0CEC50.c similarity index 100% rename from lib/src/unknown_0CEC50.c rename to src/unknown_0CEC50.c diff --git a/tools/python/generate_ld.py b/tools/python/generate_ld.py index 1e361e50..0dd1af49 100644 --- a/tools/python/generate_ld.py +++ b/tools/python/generate_ld.py @@ -24,7 +24,7 @@ LATE_DATA_FILES = [ BUILD_DIR + '/lib/src/al/alCopy.o', BUILD_DIR + '/lib/src/libc/xprintf.o', BUILD_DIR + '/lib/src/os/osTimer.o', - BUILD_DIR + '/lib/src/unknown_0D3020.o' + BUILD_DIR + '/lib/src/os/piacs.o' ] BSS_LIB_ORDER_FILES = [ From ed87ea82f056a83f069fe5d0a522a4f3c804585a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 13:49:27 -0400 Subject: [PATCH 07/46] Move assembly files for functions that don't need decompiling, and added function headers to os headers so I can delete a couple I made --- include/PR/os.h | 36 +++++ include/PR/os_internal.h | 144 ++++++++++++++---- include/ultra64.h | 1 + .../unknown_0D3160 => }/__osDisableInt.s | 10 +- .../unknown_0D3160 => }/__osRestoreInt.s | 11 +- lib/asm/__osSetCompare.s | 15 ++ .../unknown_0D10E0 => }/bzero.s | 9 ++ .../non_matchings/unknown_0C8490/osGetCount.s | 7 - .../unknown_0D3020/__osSetCompare.s | 6 - lib/asm/osGetCount.s | 16 ++ .../unknown_0D23F0 => }/osInvalDCache.s | 9 ++ .../unknown_0CA530 => }/osSetIntMask.s | 9 ++ .../osWritebackDCacheAll.s | 9 ++ lib/src/mips1/al/reverb.c | 1 - lib/src/os/__osSetCompare.c | 8 - lib/src/os/__osSpSetStatus.h | 8 - lib/src/os/bzero.c | 8 - lib/src/os/osAiSetNextBuffer.c | 4 +- lib/src/os/osDpSetNextBuffer.c | 1 - lib/src/os/osEpiRawStartDma.c | 1 - lib/src/os/osGetCount.c | 7 - lib/src/os/osInterrupts.c | 8 - lib/src/os/osInvalDCache.c | 7 - lib/src/os/osPiRawStartDma.c | 1 - lib/src/os/osSetIntMask.c | 7 - lib/src/os/osVirtualToPhysical.h | 8 - lib/src/os/osWritebackDCacheAll.c | 7 - lib/src/os/unknown_0D29F0.c | 1 - src/unknown_06B2B0.c | 2 +- 29 files changed, 239 insertions(+), 122 deletions(-) create mode 100644 include/PR/os.h rename lib/asm/{non_matchings/unknown_0D3160 => }/__osDisableInt.s (59%) rename lib/asm/{non_matchings/unknown_0D3160 => }/__osRestoreInt.s (52%) create mode 100644 lib/asm/__osSetCompare.s rename lib/asm/{non_matchings/unknown_0D10E0 => }/bzero.s (89%) delete mode 100644 lib/asm/non_matchings/unknown_0C8490/osGetCount.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osSetCompare.s create mode 100644 lib/asm/osGetCount.s rename lib/asm/{non_matchings/unknown_0D23F0 => }/osInvalDCache.s (89%) rename lib/asm/{non_matchings/unknown_0CA530 => }/osSetIntMask.s (89%) rename lib/asm/{non_matchings/unknown_0D24A0 => }/osWritebackDCacheAll.s (69%) delete mode 100644 lib/src/os/__osSetCompare.c delete mode 100644 lib/src/os/__osSpSetStatus.h delete mode 100644 lib/src/os/bzero.c delete mode 100644 lib/src/os/osGetCount.c delete mode 100644 lib/src/os/osInterrupts.c delete mode 100644 lib/src/os/osInvalDCache.c delete mode 100644 lib/src/os/osSetIntMask.c delete mode 100644 lib/src/os/osVirtualToPhysical.h delete mode 100644 lib/src/os/osWritebackDCacheAll.c diff --git a/include/PR/os.h b/include/PR/os.h new file mode 100644 index 00000000..0880e67b --- /dev/null +++ b/include/PR/os.h @@ -0,0 +1,36 @@ +#ifndef _ULTRA64_OS_INTERNAL_H_ +#define _ULTRA64_OS_INTERNAL_H_ + +/* Internal functions used by the operating system */ +/* Do not include this header in application code */ + +#include "os_thread.h" + +/* Variables */ + +extern u64 osClockRate; +/* + * 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)) + +/* Functions */ + +u32 __osProbeTLB(void *); +u32 __osDisableInt(void); +void __osRestoreInt(u32); +OSThread *__osGetCurrFaultedThread(void); +u32 osVirtualToPhysical(void *addr); + +#endif diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index 28445276..c1361cb8 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -1,35 +1,119 @@ -#ifndef _ULTRA64_OS_INTERNAL_H_ -#define _ULTRA64_OS_INTERNAL_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. * + * * + **************************************************************************/ -/* Internal functions used by the operating system */ -/* Do not include this header in application code */ - -#include "os_thread.h" - -/* Variables */ - -extern u64 osClockRate; -/* - * 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; + * $Revision: 1.18 $ + * $Date: 1997/02/11 08:26:14 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/os_internal.h,v $ + * + **************************************************************************/ -#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)) - -/* Functions */ - -u32 __osProbeTLB(void *); -u32 __osDisableInt(void); -void __osRestoreInt(u32); -OSThread *__osGetCurrFaultedThread(void); +#ifndef _OS_INTERNAL_H_ +#define _OS_INTERNAL_H_ +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { #endif + +#include +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/* Routines to get/fetch coprocessor 0 registers */ + +extern u32 __osGetCause(void); +extern void __osSetCause(u32); +extern u32 __osGetCompare(void); +extern void __osSetCompare(u32); +extern u32 __osGetConfig(void); +extern void __osSetConfig(u32); +extern void __osSetCount(u32); +extern u32 __osGetSR(void); +extern void __osSetSR(u32); +extern u32 __osDisableInt(void); +extern void __osRestoreInt(u32); + +/* Routines to get/set floating-point control and status register */ +extern u32 __osSetFpcCsr(u32); +extern u32 __osGetFpcCsr(void); + +/* Routine for HW interrupt "handler" */ +extern void __osSetHWIntrRoutine(OSHWIntr, s32 (*handler)(void)); + +/* Routine for global interrupt mask */ +extern void __osSetGlobalIntMask(OSHWIntr); +extern void __osResetGlobalIntMask(OSHWIntr); + +/* Routine for global interrupt mask */ +extern s32 __osLeoInterrupt(void); + +/* Routines for fetch TLB info */ + +extern u32 __osGetTLBASID(void); +extern u32 __osGetTLBPageMask(s32); +extern u32 __osGetTLBHi(s32); +extern u32 __osGetTLBLo0(s32); +extern u32 __osGetTLBLo1(s32); + +/* Serial interface (Si) */ + +extern u32 __osSiGetStatus(void); +extern s32 __osSiRawWriteIo(u32, u32); +extern s32 __osSiRawReadIo(u32, u32 *); +extern s32 __osSiRawStartDma(s32, void *); + +/* Signal processor interface (Sp) */ + +extern u32 __osSpGetStatus(void); +extern void __osSpSetStatus(u32); +extern s32 __osSpSetPc(u32); +extern s32 __osSpRawWriteIo(u32, u32); +extern s32 __osSpRawReadIo(u32, u32 *); +extern s32 __osSpRawStartDma(s32, u32, void *, u32); + +/* Error handling */ + +extern void __osError(s16, s16, ...); +extern OSThread * __osGetCurrFaultedThread(void); +extern OSThread * __osGetNextFaultedThread(OSThread *); + +/* Development board functions */ + +extern void __osGIOInit(s32); +extern void __osGIOInterrupt(s32); +extern void __osGIORawInterrupt(s32); + +/* For debugger use */ + +extern OSThread * __osGetActiveQueue(void); + +/* Debug port */ +extern void __osSyncPutChars(int, int, const char *); +extern int __osSyncGetChars(char *); +extern void __osAsyncPutChars(int, int, const char *); +extern int __osAsyncGetChars(char *); +extern int __osAtomicInc(unsigned int *p); +extern int __osAtomicDec(unsigned int *p); + +/* routine for rdb port */ +extern u32 __osRdbSend(u8 *buf, u32 size, u32 type); + + +#endif /* _LANGUAGE_C */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_INTERNAL_H */ diff --git a/include/ultra64.h b/include/ultra64.h index e38edfd4..b61d4b35 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -32,5 +32,6 @@ #include #include #include +#include #endif diff --git a/lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s b/lib/asm/__osDisableInt.s similarity index 59% rename from lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s rename to lib/asm/__osDisableInt.s index ab2e207f..c3968a85 100644 --- a/lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s +++ b/lib/asm/__osDisableInt.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2560 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel __osDisableInt /* 0D3160 800D2560 40086000 */ mfc0 $t0, $12 /* 0D3164 800D2564 2401FFFE */ li $at, -2 @@ -7,4 +16,3 @@ glabel __osDisableInt /* 0D3174 800D2574 00000000 */ nop /* 0D3178 800D2578 03E00008 */ jr $ra /* 0D317C 800D257C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s b/lib/asm/__osRestoreInt.s similarity index 52% rename from lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s rename to lib/asm/__osRestoreInt.s index e771b73d..fad510d1 100644 --- a/lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s +++ b/lib/asm/__osRestoreInt.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2580 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel __osRestoreInt /* 0D3180 800D2580 40086000 */ mfc0 $t0, $12 /* 0D3184 800D2584 01044025 */ or $t0, $t0, $a0 @@ -7,4 +16,4 @@ glabel __osRestoreInt /* 0D3194 800D2594 03E00008 */ jr $ra /* 0D3198 800D2598 00000000 */ nop -/* 0D319C 800D259C 00000000 */ nop +/* 0D319C 800D259C 00000000 */ nop diff --git a/lib/asm/__osSetCompare.s b/lib/asm/__osSetCompare.s new file mode 100644 index 00000000..96733d3a --- /dev/null +++ b/lib/asm/__osSetCompare.s @@ -0,0 +1,15 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D7460 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + +glabel __osSetCompare +/* 0D8060 800D7460 40845800 */ mtc0 $a0, $11 +/* 0D8064 800D7464 03E00008 */ jr $ra +/* 0D8068 800D7468 00000000 */ nop + +/* 0D806C 800D746C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D10E0/bzero.s b/lib/asm/bzero.s similarity index 89% rename from lib/asm/non_matchings/unknown_0D10E0/bzero.s rename to lib/asm/bzero.s index d62c4bca..81481b1a 100644 --- a/lib/asm/non_matchings/unknown_0D10E0/bzero.s +++ b/lib/asm/bzero.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D04E0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel bzero /* 0D10E0 800D04E0 28A1000C */ slti $at, $a1, 0xc /* 0D10E4 800D04E4 1420001D */ bnez $at, .L800D055C diff --git a/lib/asm/non_matchings/unknown_0C8490/osGetCount.s b/lib/asm/non_matchings/unknown_0C8490/osGetCount.s deleted file mode 100644 index 999b4f08..00000000 --- a/lib/asm/non_matchings/unknown_0C8490/osGetCount.s +++ /dev/null @@ -1,7 +0,0 @@ -glabel osGetCount -/* 0C84D0 800C78D0 40024800 */ mfc0 $v0, $9 -/* 0C84D4 800C78D4 03E00008 */ jr $ra -/* 0C84D8 800C78D8 00000000 */ nop - -/* 0C84DC 800C78DC 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSetCompare.s b/lib/asm/non_matchings/unknown_0D3020/__osSetCompare.s deleted file mode 100644 index 7835c154..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osSetCompare.s +++ /dev/null @@ -1,6 +0,0 @@ -glabel __osSetCompare -/* 0D8060 800D7460 40845800 */ mtc0 $a0, $11 -/* 0D8064 800D7464 03E00008 */ jr $ra -/* 0D8068 800D7468 00000000 */ nop - -/* 0D806C 800D746C 00000000 */ nop diff --git a/lib/asm/osGetCount.s b/lib/asm/osGetCount.s new file mode 100644 index 00000000..1021d3ad --- /dev/null +++ b/lib/asm/osGetCount.s @@ -0,0 +1,16 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800C78D0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + +glabel osGetCount +/* 0C84D0 800C78D0 40024800 */ mfc0 $v0, $9 +/* 0C84D4 800C78D4 03E00008 */ jr $ra +/* 0C84D8 800C78D8 00000000 */ nop + +/* 0C84DC 800C78DC 00000000 */ nop + diff --git a/lib/asm/non_matchings/unknown_0D23F0/osInvalDCache.s b/lib/asm/osInvalDCache.s similarity index 89% rename from lib/asm/non_matchings/unknown_0D23F0/osInvalDCache.s rename to lib/asm/osInvalDCache.s index 24dffdac..01caef38 100644 --- a/lib/asm/non_matchings/unknown_0D23F0/osInvalDCache.s +++ b/lib/asm/osInvalDCache.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D17F0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel osInvalDCache /* 0D23F0 800D17F0 18A0001F */ blez $a1, .L800D1870 /* 0D23F4 800D17F4 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s b/lib/asm/osSetIntMask.s similarity index 89% rename from lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s rename to lib/asm/osSetIntMask.s index 80b4b75b..e6bccf72 100644 --- a/lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s +++ b/lib/asm/osSetIntMask.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800C9A30 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel osSetIntMask /* 0CA630 800C9A30 400C6000 */ mfc0 $t4, $12 /* 0CA634 800C9A34 3182FF01 */ andi $v0, $t4, 0xff01 diff --git a/lib/asm/non_matchings/unknown_0D24A0/osWritebackDCacheAll.s b/lib/asm/osWritebackDCacheAll.s similarity index 69% rename from lib/asm/non_matchings/unknown_0D24A0/osWritebackDCacheAll.s rename to lib/asm/osWritebackDCacheAll.s index e89e3996..8fe146a5 100644 --- a/lib/asm/non_matchings/unknown_0D24A0/osWritebackDCacheAll.s +++ b/lib/asm/osWritebackDCacheAll.s @@ -1,3 +1,12 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D18A0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + glabel osWritebackDCacheAll /* 0D24A0 800D18A0 3C088000 */ lui $t0, 0x8000 /* 0D24A4 800D18A4 240A2000 */ li $t2, 8192 diff --git a/lib/src/mips1/al/reverb.c b/lib/src/mips1/al/reverb.c index eb4ec0b3..748f6c33 100644 --- a/lib/src/mips1/al/reverb.c +++ b/lib/src/mips1/al/reverb.c @@ -5,7 +5,6 @@ #include "macros.h" #include "libultra_internal.h" #include "audio_internal.h" -#include "../../os/osVirtualToPhysical.h" /************ .data ************/ diff --git a/lib/src/os/__osSetCompare.c b/lib/src/os/__osSetCompare.c deleted file mode 100644 index 5f4749af..00000000 --- a/lib/src/os/__osSetCompare.c +++ /dev/null @@ -1,8 +0,0 @@ - -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D7460 */ - -#include "macros.h" - -//Unlikely to ever be able to be decompiled -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSetCompare.s") diff --git a/lib/src/os/__osSpSetStatus.h b/lib/src/os/__osSpSetStatus.h deleted file mode 100644 index 3e6d7774..00000000 --- a/lib/src/os/__osSpSetStatus.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _OSSPSETSTATUS_H_ -#define _OSSPSETSTATUS_H_ - -#include "types.h" - -void __osSpSetStatus(u32 status); - -#endif diff --git a/lib/src/os/bzero.c b/lib/src/os/bzero.c deleted file mode 100644 index e5c9fb07..00000000 --- a/lib/src/os/bzero.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D04E0 */ - -#include "types.h" -#include "macros.h" - -//Likely hand written and not intended to decomp -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D10E0/bzero.s") diff --git a/lib/src/os/osAiSetNextBuffer.c b/lib/src/os/osAiSetNextBuffer.c index 8d023f15..55b71eae 100644 --- a/lib/src/os/osAiSetNextBuffer.c +++ b/lib/src/os/osAiSetNextBuffer.c @@ -2,9 +2,7 @@ /* RAM_POS: 0x800C8D70 */ #include "types.h" -#include -#include -#include "osVirtualToPhysical.h" +#include "libultra_internal.h" u8 hdwrBugFlag = 0; diff --git a/lib/src/os/osDpSetNextBuffer.c b/lib/src/os/osDpSetNextBuffer.c index ec05be1c..1861bb8b 100644 --- a/lib/src/os/osDpSetNextBuffer.c +++ b/lib/src/os/osDpSetNextBuffer.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x800D18E0 */ #include "libultra_internal.h" -#include "osVirtualToPhysical.h" s32 __osDpDeviceBusy(void); s32 osDpSetNextBuffer(void *bufPtr, u64 size) { diff --git a/lib/src/os/osEpiRawStartDma.c b/lib/src/os/osEpiRawStartDma.c index 3698b832..11aac402 100644 --- a/lib/src/os/osEpiRawStartDma.c +++ b/lib/src/os/osEpiRawStartDma.c @@ -3,7 +3,6 @@ #include "libultra_internal.h" #include "PR/rcp.h" -#include "osVirtualToPhysical.h" s32 osEPiRawStartDma(OSPiHandle *pihandle, s32 dir, u32 cart_addr, void *dram_addr, u32 size) { register int status; diff --git a/lib/src/os/osGetCount.c b/lib/src/os/osGetCount.c deleted file mode 100644 index b553ef2b..00000000 --- a/lib/src/os/osGetCount.c +++ /dev/null @@ -1,7 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800C78D0 */ - -#include "macros.h" - -//I don't believe that can be decompiled -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C8490/osGetCount.s") diff --git a/lib/src/os/osInterrupts.c b/lib/src/os/osInterrupts.c deleted file mode 100644 index 40669692..00000000 --- a/lib/src/os/osInterrupts.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D2560 */ - -#include "macros.h" - -//To the best of my knowledge these files can never actually be decompiled -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s") diff --git a/lib/src/os/osInvalDCache.c b/lib/src/os/osInvalDCache.c deleted file mode 100644 index 3fea6d4c..00000000 --- a/lib/src/os/osInvalDCache.c +++ /dev/null @@ -1,7 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D17F0 */ - -#include "macros.h" - -//Most likely hand written and unable to be be decomped -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D23F0/osInvalDCache.s") diff --git a/lib/src/os/osPiRawStartDma.c b/lib/src/os/osPiRawStartDma.c index bced171d..b88d8812 100644 --- a/lib/src/os/osPiRawStartDma.c +++ b/lib/src/os/osPiRawStartDma.c @@ -5,7 +5,6 @@ #include "macros.h" #include "libultra_internal.h" #include "PR/rcp.h" -#include "osVirtualToPhysical.h" s32 osPiRawStartDma(s32 direction, u32 devAddr, void *dramAddr, u32 size) { register int status; diff --git a/lib/src/os/osSetIntMask.c b/lib/src/os/osSetIntMask.c deleted file mode 100644 index 286825ce..00000000 --- a/lib/src/os/osSetIntMask.c +++ /dev/null @@ -1,7 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800C9A30 */ - -#include "macros.h" - -//I don't believe it's possible to decomp this one -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA530/osSetIntMask.s") diff --git a/lib/src/os/osVirtualToPhysical.h b/lib/src/os/osVirtualToPhysical.h deleted file mode 100644 index de6aef77..00000000 --- a/lib/src/os/osVirtualToPhysical.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _OSVIRTUALTOPHYSICAL_H_ -#define _OSVIRTUALTOPHYSICAL_H_ - -#include "types.h" - -u32 osVirtualToPhysical(void *addr); - -#endif diff --git a/lib/src/os/osWritebackDCacheAll.c b/lib/src/os/osWritebackDCacheAll.c deleted file mode 100644 index 3aa719a3..00000000 --- a/lib/src/os/osWritebackDCacheAll.c +++ /dev/null @@ -1,7 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D18A0 */ - -#include "macros.h" - -//Likely hand written and impossible to decomp -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D24A0/osWritebackDCacheAll.s") diff --git a/lib/src/os/unknown_0D29F0.c b/lib/src/os/unknown_0D29F0.c index 19aa0489..bfbaad0b 100644 --- a/lib/src/os/unknown_0D29F0.c +++ b/lib/src/os/unknown_0D29F0.c @@ -4,7 +4,6 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" -#include "osVirtualToPhysical.h" typedef struct { diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index cf52f2eb..8a382719 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -29,7 +29,7 @@ #include "unknown_003260.h" #include "unknown_032760.h" #include "textures_sprites.h" -#include "lib/src/os/__osSpSetStatus.h" +#include "PR/os_internal.h" #include "printf.h" #include "fade_transition.h" #include "unknown_077C50.h" From 7c7376bc7b5a1a9be63d65982640797d93d9d51d Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 14:46:38 -0400 Subject: [PATCH 08/46] I'm not as positive about the name of some undefined symbols anymore. Also slightly better stack pointer code --- Makefile | 2 +- .../unknown_0255E0/func_80024D54.s | 4 +-- .../unknown_032760/func_8003B4BC.s | 4 +-- src/memory.c | 4 +-- tools/python/find_glabels.py | 33 +++++++++---------- undefined_syms.txt | 4 +-- 6 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 64e58e52..0b466656 100755 --- a/Makefile +++ b/Makefile @@ -141,7 +141,7 @@ TEXBUILDER = $(TOOLS_DIR)/dkr_texbuilder COMPRESS = $(TOOLS_DIR)/dkr_decompressor -c LIB_DIRS := lib/ -ASM_DIRS := asm/ asm/boot/ asm/assets/ lib/asm/ +ASM_DIRS := asm/ asm/boot/ asm/assets/ lib/asm/ lib/asm/non_decompilable SRC_DIRS := $(sort $(dir $(wildcard src/* src/**/*))) $(sort $(dir $(wildcard lib/src/* lib/src/**/* lib/src/**/**/*))) GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(SRC_DIRS) diff --git a/asm/non_matchings/unknown_0255E0/func_80024D54.s b/asm/non_matchings/unknown_0255E0/func_80024D54.s index 6174d799..a53579c5 100644 --- a/asm/non_matchings/unknown_0255E0/func_80024D54.s +++ b/asm/non_matchings/unknown_0255E0/func_80024D54.s @@ -159,11 +159,11 @@ glabel func_80024D54 /* 025BA0 80024FA0 A3A00083 */ sb $zero, 0x83($sp) /* 025BA4 80024FA4 304B0004 */ andi $t3, $v0, 4 /* 025BA8 80024FA8 11600003 */ beqz $t3, .L80024FB8 -/* 025BAC 80024FAC 3C0FA000 */ lui $t7, %hi(THREAD_S6) # $t7, 0xa000 +/* 025BAC 80024FAC 3C0FA000 */ lui $t7, %hi(D_A0000200) # $t7, 0xa000 /* 025BB0 80024FB0 240C0001 */ li $t4, 1 /* 025BB4 80024FB4 A3AC0083 */ sb $t4, 0x83($sp) .L80024FB8: -/* 025BB8 80024FB8 8DED0200 */ lw $t5, %lo(THREAD_S6)($t7) +/* 025BB8 80024FB8 8DED0200 */ lw $t5, %lo(D_A0000200)($t7) /* 025BBC 80024FBC 3C01AC29 */ lui $at, 0xac29 /* 025BC0 80024FC0 11A10002 */ beq $t5, $at, .L80024FCC /* 025BC4 80024FC4 240E0001 */ li $t6, 1 diff --git a/asm/non_matchings/unknown_032760/func_8003B4BC.s b/asm/non_matchings/unknown_032760/func_8003B4BC.s index 5a63d62f..02afdf05 100644 --- a/asm/non_matchings/unknown_032760/func_8003B4BC.s +++ b/asm/non_matchings/unknown_032760/func_8003B4BC.s @@ -23,8 +23,8 @@ glabel func_8003B4BC /* 03C0FC 8003B4FC 46283282 */ mul.d $f10, $f6, $f8 /* 03C100 8003B500 462050A0 */ cvt.s.d $f2, $f10 .L8003B504: -/* 03C104 8003B504 3C18A000 */ lui $t8, %hi(THREAD_PC) # $t8, 0xa000 -/* 03C108 8003B508 8F190284 */ lw $t9, %lo(THREAD_PC)($t8) +/* 03C104 8003B504 3C18A000 */ lui $t8, %hi(D_A0000284) # $t8, 0xa000 +/* 03C108 8003B508 8F190284 */ lw $t9, %lo(D_A0000284)($t8) /* 03C10C 8003B50C 3C01240B */ lui $at, (0x240B17D7 >> 16) # lui $at, 0x240b /* 03C110 8003B510 342117D7 */ ori $at, (0x240B17D7 & 0xFFFF) # ori $at, $at, 0x17d7 /* 03C114 8003B514 13210002 */ beq $t9, $at, .L8003B520 diff --git a/src/memory.c b/src/memory.c index c0f68ea9..43087210 100644 --- a/src/memory.c +++ b/src/memory.c @@ -121,11 +121,11 @@ GLOBAL_ASM("asm/non_matchings/memory/new_memory_pool.s") void *allocate_from_main_pool_safe(s32 size, u32 colorTag) { void *temp_v0; if (size == 0) { - func_800B7460(*(s32 *)((u8 *)get_stack_pointer() + 0x14), size, colorTag); + func_800B7460((s32 *)((u8 *)get_stack_pointer()->unk14), size, colorTag); } temp_v0 = allocate_from_memory_pool(0, size, colorTag); if (temp_v0 == (void *)NULL) { - func_800B7460(*(s32 *)((u8 *)get_stack_pointer() + 0x14), size, colorTag); + func_800B7460((s32 *)((u8 *)get_stack_pointer()->unk14), size, colorTag); } return temp_v0; } diff --git a/tools/python/find_glabels.py b/tools/python/find_glabels.py index a66b00a2..56c264be 100644 --- a/tools/python/find_glabels.py +++ b/tools/python/find_glabels.py @@ -20,8 +20,6 @@ LOWER_INSTR_LS_REGEX_TMPL = r'(/\* %s[^\n#]*[ls][bhwd](u|c1)?\s+' + REG_REGEX + LOWER_INSTR_ADDU_REGEX_TMPL = r'(/\* %s[^\n#]*addiu\s+' + REG_REGEX + r',\s+' + REG_REGEX + r',\s+)-?0x[0-9a-f]{3,4}' LOWER_INSTR_ADDU_SAME_REGEX_TMPL = r'(/\* %s[^\n#]*)(addiu\s+' + REG_REGEX + r',\s+\3,\s+-?0x[0-9a-f]{3,4})' -IGNORE_GLABELS = ['D_800E389E', 'D_801264A1', 'D_800E1B84'] - def _find_glabels(asm): glabels = [] for file in FileUtil.get_filenames_from_directory_recursive('.', '.s'): @@ -38,22 +36,21 @@ def _find_glabels(asm): if glabel_lower & 0x8000: glabel_upper -= 1 glabel = 'D_%08X' % (glabel_upper << 16 | glabel_lower) - if glabel not in IGNORE_GLABELS: - glabels.append((glabel, *offsets)) - # replace upper instruction - contents = re.sub(UPPER_INSTR_REGEX_TMPL % offsets[0], - r'\1%s, %%hi(%s) # \2' % (reg, glabel), - contents) - # replace lower instruction - contents = re.sub(LOWER_INSTR_LS_REGEX_TMPL % offsets[1], - r'\1%%lo(%s)\5' % glabel, - contents) - contents = re.sub(LOWER_INSTR_ADDU_SAME_REGEX_TMPL % offsets[1], - r'\1addiu \3, %%lo(%s) # \2' % glabel, - contents) - contents = re.sub(LOWER_INSTR_ADDU_REGEX_TMPL % offsets[1], - r'\1%%lo(%s)' % glabel, - contents) + glabels.append((glabel, *offsets)) + # replace upper instruction + contents = re.sub(UPPER_INSTR_REGEX_TMPL % offsets[0], + r'\1%s, %%hi(%s) # \2' % (reg, glabel), + contents) + # replace lower instruction + contents = re.sub(LOWER_INSTR_LS_REGEX_TMPL % offsets[1], + r'\1%%lo(%s)\5' % glabel, + contents) + contents = re.sub(LOWER_INSTR_ADDU_SAME_REGEX_TMPL % offsets[1], + r'\1addiu \3, %%lo(%s) # \2' % glabel, + contents) + contents = re.sub(LOWER_INSTR_ADDU_REGEX_TMPL % offsets[1], + r'\1%%lo(%s)' % glabel, + contents) if len(matches): FileUtil.write_text_to_file(file, contents) return glabels diff --git a/undefined_syms.txt b/undefined_syms.txt index 431780e9..1336ed6c 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -4,8 +4,8 @@ osResetType = 0x8000030C; osCicId = 0x80000310; osAppNMIBuffer = 0x8000031C; -THREAD_S6 = 0xA0000200; -THREAD_PC = 0xA0000284; +D_A0000200 = 0xA0000200; +D_A0000284 = 0xA0000284; SP_DRAM_ADDR_REG = 0xA4040004; SP_RD_LEN_REG = 0xA4040008; SP_WR_LEN_REG = 0xA404000C; From 2eacfbb79adeccd2929cbaaaa1c20af9c972fdb0 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 15:46:47 -0400 Subject: [PATCH 09/46] Start trying to decomp the osMotor functions --- .../_MakeMotorData.s | 0 .../{unknown_072930 => osMotor}/osMotorInit.s | 28 +-- .../osMotorStart.s | 4 +- .../{unknown_072930 => osMotor}/osMotorStop.s | 4 +- lib/src/os/osMotor.c | 171 +++++++++++++++++- src/memory.c | 9 +- 6 files changed, 190 insertions(+), 26 deletions(-) rename lib/asm/non_matchings/{unknown_072930 => osMotor}/_MakeMotorData.s (100%) rename lib/asm/non_matchings/{unknown_072930 => osMotor}/osMotorInit.s (78%) rename lib/asm/non_matchings/{unknown_072930 => osMotor}/osMotorStart.s (95%) rename lib/asm/non_matchings/{unknown_072930 => osMotor}/osMotorStop.s (95%) diff --git a/lib/asm/non_matchings/unknown_072930/_MakeMotorData.s b/lib/asm/non_matchings/osMotor/_MakeMotorData.s similarity index 100% rename from lib/asm/non_matchings/unknown_072930/_MakeMotorData.s rename to lib/asm/non_matchings/osMotor/_MakeMotorData.s diff --git a/lib/asm/non_matchings/unknown_072930/osMotorInit.s b/lib/asm/non_matchings/osMotor/osMotorInit.s similarity index 78% rename from lib/asm/non_matchings/unknown_072930/osMotorInit.s rename to lib/asm/non_matchings/osMotor/osMotorInit.s index 0508ae1a..1c86ff94 100644 --- a/lib/asm/non_matchings/unknown_072930/osMotorInit.s +++ b/lib/asm/non_matchings/osMotor/osMotorInit.s @@ -49,15 +49,15 @@ glabel osMotorInit .L8007218C: /* 072D8C 8007218C 24010080 */ li $at, 128 /* 072D90 80072190 11C10003 */ beq $t6, $at, .L800721A0 -/* 072D94 80072194 3C048012 */ lui $a0, %hi(D_80123FF0) # $a0, 0x8012 +/* 072D94 80072194 3C048012 */ lui $a0, %hi(_motorstartbuf) # $a0, 0x8012 /* 072D98 80072198 10000026 */ b .L80072234 /* 072D9C 8007219C 2402000B */ li $v0, 11 .L800721A0: -/* 072DA0 800721A0 3C038012 */ lui $v1, %hi(D_80123FD0) # $v1, 0x8012 -/* 072DA4 800721A4 3C058012 */ lui $a1, %hi(D_80123FF0) # $a1, 0x8012 -/* 072DA8 800721A8 24A53FF0 */ addiu $a1, %lo(D_80123FF0) # addiu $a1, $a1, 0x3ff0 -/* 072DAC 800721AC 24633FD0 */ addiu $v1, %lo(D_80123FD0) # addiu $v1, $v1, 0x3fd0 -/* 072DB0 800721B0 24843FF0 */ addiu $a0, %lo(D_80123FF0) # addiu $a0, $a0, 0x3ff0 +/* 072DA0 800721A0 3C038012 */ lui $v1, %hi(_motorstopbuf) # $v1, 0x8012 +/* 072DA4 800721A4 3C058012 */ lui $a1, %hi(_motorstartbuf) # $a1, 0x8012 +/* 072DA8 800721A8 24A53FF0 */ addiu $a1, %lo(_motorstartbuf) # addiu $a1, $a1, 0x3ff0 +/* 072DAC 800721AC 24633FD0 */ addiu $v1, %lo(_motorstopbuf) # addiu $v1, $v1, 0x3fd0 +/* 072DB0 800721B0 24843FF0 */ addiu $a0, %lo(_motorstartbuf) # addiu $a0, $a0, 0x3ff0 /* 072DB4 800721B4 24020001 */ li $v0, 1 .L800721B8: /* 072DB8 800721B8 24630004 */ addiu $v1, $v1, 4 @@ -71,21 +71,21 @@ glabel osMotorInit /* 072DD8 800721D8 A082FFFC */ sb $v0, -4($a0) /* 072DDC 800721DC 1465FFF6 */ bne $v1, $a1, .L800721B8 /* 072DE0 800721E0 A060FFFC */ sb $zero, -4($v1) -/* 072DE4 800721E4 3C0F8012 */ lui $t7, %hi(D_80123ED0) # $t7, 0x8012 -/* 072DE8 800721E8 25EF3ED0 */ addiu $t7, %lo(D_80123ED0) # addiu $t7, $t7, 0x3ed0 -/* 072DEC 800721EC 3C068012 */ lui $a2, %hi(D_80123FF0) # $a2, 0x8012 +/* 072DE4 800721E4 3C0F8012 */ lui $t7, %hi(_MotorStartData) # $t7, 0x8012 +/* 072DE8 800721E8 25EF3ED0 */ addiu $t7, %lo(_MotorStartData) # addiu $t7, $t7, 0x3ed0 +/* 072DEC 800721EC 3C068012 */ lui $a2, %hi(_motorstartbuf) # $a2, 0x8012 /* 072DF0 800721F0 00101180 */ sll $v0, $s0, 6 /* 072DF4 800721F4 004F3821 */ addu $a3, $v0, $t7 /* 072DF8 800721F8 AFA2002C */ sw $v0, 0x2c($sp) -/* 072DFC 800721FC 24C63FF0 */ addiu $a2, %lo(D_80123FF0) # addiu $a2, $a2, 0x3ff0 +/* 072DFC 800721FC 24C63FF0 */ addiu $a2, %lo(_motorstartbuf) # addiu $a2, $a2, 0x3ff0 /* 072E00 80072200 02002025 */ move $a0, $s0 /* 072E04 80072204 0C01C7E0 */ jal _MakeMotorData /* 072E08 80072208 24050600 */ li $a1, 1536 /* 072E0C 8007220C 8FA2002C */ lw $v0, 0x2c($sp) -/* 072E10 80072210 3C188012 */ lui $t8, %hi(D_80123DD0) # $t8, 0x8012 -/* 072E14 80072214 27183DD0 */ addiu $t8, %lo(D_80123DD0) # addiu $t8, $t8, 0x3dd0 -/* 072E18 80072218 3C068012 */ lui $a2, %hi(D_80123FD0) # $a2, 0x8012 -/* 072E1C 8007221C 24C63FD0 */ addiu $a2, %lo(D_80123FD0) # addiu $a2, $a2, 0x3fd0 +/* 072E10 80072210 3C188012 */ lui $t8, %hi(_MotorStopData) # $t8, 0x8012 +/* 072E14 80072214 27183DD0 */ addiu $t8, %lo(_MotorStopData) # addiu $t8, $t8, 0x3dd0 +/* 072E18 80072218 3C068012 */ lui $a2, %hi(_motorstopbuf) # $a2, 0x8012 +/* 072E1C 8007221C 24C63FD0 */ addiu $a2, %lo(_motorstopbuf) # addiu $a2, $a2, 0x3fd0 /* 072E20 80072220 02002025 */ move $a0, $s0 /* 072E24 80072224 24050600 */ li $a1, 1536 /* 072E28 80072228 0C01C7E0 */ jal _MakeMotorData diff --git a/lib/asm/non_matchings/unknown_072930/osMotorStart.s b/lib/asm/non_matchings/osMotor/osMotorStart.s similarity index 95% rename from lib/asm/non_matchings/unknown_072930/osMotorStart.s rename to lib/asm/non_matchings/osMotor/osMotorStart.s index 165e2e22..fc0abd6c 100644 --- a/lib/asm/non_matchings/unknown_072930/osMotorStart.s +++ b/lib/asm/non_matchings/osMotor/osMotorStart.s @@ -8,8 +8,8 @@ glabel osMotorStart /* 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 +/* 072A7C 80071E7C 3C088012 */ lui $t0, %hi(_MotorStartData) # $t0, 0x8012 +/* 072A80 80071E80 25083ED0 */ addiu $t0, %lo(_MotorStartData) # addiu $t0, $t0, 0x3ed0 /* 072A84 80071E84 0018C980 */ sll $t9, $t8, 6 /* 072A88 80071E88 03282821 */ addu $a1, $t9, $t0 /* 072A8C 80071E8C 0C0335B0 */ jal __osSiRawStartDma diff --git a/lib/asm/non_matchings/unknown_072930/osMotorStop.s b/lib/asm/non_matchings/osMotor/osMotorStop.s similarity index 95% rename from lib/asm/non_matchings/unknown_072930/osMotorStop.s rename to lib/asm/non_matchings/osMotor/osMotorStop.s index 30c01635..0875e6b9 100644 --- a/lib/asm/non_matchings/unknown_072930/osMotorStop.s +++ b/lib/asm/non_matchings/osMotor/osMotorStop.s @@ -8,8 +8,8 @@ glabel osMotorStop /* 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 +/* 072954 80071D54 3C088012 */ lui $t0, %hi(_MotorStopData) # $t0, 0x8012 +/* 072958 80071D58 25083DD0 */ addiu $t0, %lo(_MotorStopData) # addiu $t0, $t0, 0x3dd0 /* 07295C 80071D5C 0018C980 */ sll $t9, $t8, 6 /* 072960 80071D60 03282821 */ addu $a1, $t9, $t0 /* 072964 80071D64 0C0335B0 */ jal __osSiRawStartDma diff --git a/lib/src/os/osMotor.c b/lib/src/os/osMotor.c index eab11065..4379d74d 100644 --- a/lib/src/os/osMotor.c +++ b/lib/src/os/osMotor.c @@ -3,8 +3,171 @@ #include "types.h" #include "macros.h" +#include "libultra_internal.h" +#include "controller.h" +#include "siint.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_072930/osMotorStop.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_072930/osMotorStart.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_072930/_MakeMotorData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_072930/osMotorInit.s") +#if 1 +GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorStop.s") +GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorStart.s") +GLOBAL_ASM("lib/asm/non_matchings/osMotor/_MakeMotorData.s") +GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorInit.s") +#else + +static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata); +//u32 __osMotorinitialized[MAXCONTROLLERS] = {0, 0, 0, 0}; +extern OSPifRam _MotorStopData[MAXCONTROLLERS]; +extern OSPifRam _MotorStartData[MAXCONTROLLERS]; +extern u8 _motorstopbuf[32]; +extern u8 _motorstartbuf[32]; +s32 osMotorStop(OSPfs *pfs) +{ + int i; + s32 ret; + u8 *ptr; + __OSContRamReadFormat ramreadformat; + + __osSiGetAccess(); + + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; + __osSiRawStartDma(OS_WRITE, &_MotorStopData[pfs->channel]); + osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); + ptr = (u8 *)&__osPfsPifRam; + + if (pfs->channel != 0) + for (i = 0; i < pfs->channel; i++) + ptr++; + + ramreadformat = *(__OSContRamReadFormat *)ptr; + ret = CHNL_ERR(ramreadformat); + if (ret == 0 && ramreadformat.datacrc != __osContDataCrc((u8*)&_motorstopbuf)) + { + ret = PFS_ERR_CONTRFAIL; + } + __osSiRelAccess(); + return ret; +} + +s32 osMotorStart(OSPfs *pfs) +{ + + int i; + s32 ret; + u8 *ptr; + __OSContRamReadFormat ramreadformat; + + __osSiGetAccess(); + + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; + __osSiRawStartDma(OS_WRITE, &_MotorStartData[pfs->channel]); + osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); + ptr = (u8 *)&__osPfsPifRam; + + if (pfs->channel != 0) + for (i = 0; i < pfs->channel; i++) + ptr++; + + ramreadformat = *(__OSContRamReadFormat *)ptr; + ret = CHNL_ERR(ramreadformat); + if (ret == 0 && ramreadformat.datacrc != __osContDataCrc((u8*)&_motorstartbuf)) + { + ret = PFS_ERR_CONTRFAIL; + } + __osSiRelAccess(); + return ret; +} + +static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata) +{ + u8 *ptr; + __OSContRamReadFormat ramreadformat; + int i; + + ptr = (u8 *)mdata->ramarray; + for (i = 0; i < ARRLEN(mdata->ramarray); i++) + mdata->ramarray[i] = 0; + mdata->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; +} + +s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) +{ + int i; + s32 ret; + u8 temp[32]; + pfs->queue = mq; + pfs->channel = channel; + pfs->status = 0; + pfs->activebank = 128; + + for (i = 0; i < ARRLEN(temp); i++) + temp[i] = 254; + + ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + if (ret == 2) //TODO: remove magic constant + ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + if (ret != 0) + return ret; + + ret = __osContRamRead(mq, channel, 1024, temp); + if (ret == 2) + ret = PFS_ERR_CONTRFAIL; //is this right? + if (ret != 0) + return ret; + if (temp[31] == 254) + return PFS_ERR_DEVICE; + + for (i = 0; i < ARRLEN(temp); i++) + temp[i] = 128; + + ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + if (ret == 2) + ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + if (ret != 0) + return ret; + + ret = __osContRamRead(mq, channel, 1024, temp); + if (ret == 2) + ret = PFS_ERR_CONTRFAIL; + if (ret != 0) + return ret; + if (temp[31] != 128) + return PFS_ERR_DEVICE; + + //if (!__osMotorinitialized[channel]) + //{ + for (i = 0; i < ARRLEN(_motorstartbuf); i++) + { + _motorstartbuf[i] = 1; + _motorstopbuf[i] = 0; + } + _MakeMotorData(channel, 1536, _motorstartbuf, &_MotorStartData[channel]); + _MakeMotorData(channel, 1536, _motorstopbuf, &_MotorStopData[channel]); + //__osMotorinitialized[channel] = 1; + //} + return 0; +} +#endif diff --git a/src/memory.c b/src/memory.c index 43087210..5a6ee72e 100644 --- a/src/memory.c +++ b/src/memory.c @@ -4,6 +4,7 @@ #include "memory.h" #include "printf.h" #include "thread0_epc.h" +#include "controller.h" /************ .rodata ************/ @@ -37,10 +38,10 @@ s32 D_801235C4; FreeQueueSlot gFreeQueue[256]; s32 gFreeQueueCount; s32 gFreeQueueState; -s32 D_80123DD0[64]; -s32 D_80123ED0[64]; -s32 D_80123FD0[8]; -s32 D_80123FF0[8]; +OSPifRam _MotorStopData[MAXCONTROLLERS]; +OSPifRam _MotorStartData[MAXCONTROLLERS]; +u8 _motorstopbuf[32]; +u8 _motorstartbuf[32]; extern MemoryPoolSlot gMainMemoryPool; From 2ea8ecc10e554da6cfd47f487f9b35de54444e3d Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 20:51:39 -0400 Subject: [PATCH 10/46] Match motor functions --- Makefile | 2 + .../non_matchings/osMotor/_MakeMotorData.s | 95 ---------------- lib/asm/non_matchings/osMotor/osMotorInit.s | 104 ------------------ lib/asm/non_matchings/osMotor/osMotorStart.s | 80 -------------- lib/asm/non_matchings/osMotor/osMotorStop.s | 80 -------------- lib/src/os/osMotor.c | 94 +++++----------- 6 files changed, 30 insertions(+), 425 deletions(-) delete mode 100644 lib/asm/non_matchings/osMotor/_MakeMotorData.s delete mode 100644 lib/asm/non_matchings/osMotor/osMotorInit.s delete mode 100644 lib/asm/non_matchings/osMotor/osMotorStart.s delete mode 100644 lib/asm/non_matchings/osMotor/osMotorStop.s diff --git a/Makefile b/Makefile index 0b466656..cb479815 100755 --- a/Makefile +++ b/Makefile @@ -267,6 +267,7 @@ $(BUILD_DIR)/lib/src/al/%.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/os/%.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/os/osViMgr.o: OPT_FLAGS := -O2 $(BUILD_DIR)/lib/src/os/osCreatePiManager.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/lib/src/os/osMotor.o: OPT_FLAGS := -O2 $(BUILD_DIR)/lib/src/libc/xprintf.o : OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/al/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 #$(BUILD_DIR)/lib/src/libc/llcvt.o: OPT_FLAGS := @@ -274,6 +275,7 @@ $(BUILD_DIR)/lib/src/al/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 $(BUILD_DIR)/lib/%.o: MIPSISET := -mips2 $(BUILD_DIR)/lib/src/mips1/%.o: MIPSISET := -mips1 +$(BUILD_DIR)/lib/src/os/osMotor.o: MIPSISET := -mips1 # asm-processor currently does not support -O3, so this is my workaround. $(BUILD_DIR)/lib/src/al/global_asm/%.o: OPT_FLAGS := -O2 diff --git a/lib/asm/non_matchings/osMotor/_MakeMotorData.s b/lib/asm/non_matchings/osMotor/_MakeMotorData.s deleted file mode 100644 index defffa72..00000000 --- a/lib/asm/non_matchings/osMotor/_MakeMotorData.s +++ /dev/null @@ -1,95 +0,0 @@ -glabel _MakeMotorData -/* 072B80 80071F80 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 072B84 80071F84 AFB00018 */ sw $s0, 0x18($sp) -/* 072B88 80071F88 00808025 */ move $s0, $a0 -/* 072B8C 80071F8C AFBF001C */ sw $ra, 0x1c($sp) -/* 072B90 80071F90 AFA5005C */ sw $a1, 0x5c($sp) -/* 072B94 80071F94 00E01825 */ move $v1, $a3 -/* 072B98 80071F98 00004025 */ move $t0, $zero -/* 072B9C 80071F9C 00E01025 */ move $v0, $a3 -.L80071FA0: -/* 072BA0 80071FA0 25080001 */ addiu $t0, $t0, 1 -/* 072BA4 80071FA4 2901000F */ slti $at, $t0, 0xf -/* 072BA8 80071FA8 24420004 */ addiu $v0, $v0, 4 -/* 072BAC 80071FAC 1420FFFC */ bnez $at, .L80071FA0 -/* 072BB0 80071FB0 AC40FFFC */ sw $zero, -4($v0) -/* 072BB4 80071FB4 240E0001 */ li $t6, 1 -/* 072BB8 80071FB8 ACEE003C */ sw $t6, 0x3c($a3) -/* 072BBC 80071FBC 240F00FF */ li $t7, 255 -/* 072BC0 80071FC0 24180023 */ li $t8, 35 -/* 072BC4 80071FC4 24190001 */ li $t9, 1 -/* 072BC8 80071FC8 24090003 */ li $t1, 3 -/* 072BCC 80071FCC 97A4005E */ lhu $a0, 0x5e($sp) -/* 072BD0 80071FD0 A3AF002C */ sb $t7, 0x2c($sp) -/* 072BD4 80071FD4 A3B8002D */ sb $t8, 0x2d($sp) -/* 072BD8 80071FD8 A3B9002E */ sb $t9, 0x2e($sp) -/* 072BDC 80071FDC A3A9002F */ sb $t1, 0x2f($sp) -/* 072BE0 80071FE0 AFA60060 */ sw $a2, 0x60($sp) -/* 072BE4 80071FE4 0C0335DC */ jal __osContAddressCrc -/* 072BE8 80071FE8 AFA30054 */ sw $v1, 0x54($sp) -/* 072BEC 80071FEC 97AA005E */ lhu $t2, 0x5e($sp) -/* 072BF0 80071FF0 240D00FF */ li $t5, 255 -/* 072BF4 80071FF4 000A5940 */ sll $t3, $t2, 5 -/* 072BF8 80071FF8 004B6025 */ or $t4, $v0, $t3 -/* 072BFC 80071FFC 8FA30054 */ lw $v1, 0x54($sp) -/* 072C00 80072000 8FA60060 */ lw $a2, 0x60($sp) -/* 072C04 80072004 A7AC0030 */ sh $t4, 0x30($sp) -/* 072C08 80072008 A3AD0052 */ sb $t5, 0x52($sp) -/* 072C0C 8007200C 27A2004C */ addiu $v0, $sp, 0x4c -/* 072C10 80072010 27A4002C */ addiu $a0, $sp, 0x2c -.L80072014: -/* 072C14 80072014 90CE0000 */ lbu $t6, ($a2) -/* 072C18 80072018 24840001 */ addiu $a0, $a0, 1 -/* 072C1C 8007201C 0082082B */ sltu $at, $a0, $v0 -/* 072C20 80072020 24C60001 */ addiu $a2, $a2, 1 -/* 072C24 80072024 1420FFFB */ bnez $at, .L80072014 -/* 072C28 80072028 A08E0005 */ sb $t6, 5($a0) -/* 072C2C 8007202C 12000012 */ beqz $s0, .L80072078 -/* 072C30 80072030 27AF002C */ addiu $t7, $sp, 0x2c -/* 072C34 80072034 1A000010 */ blez $s0, .L80072078 -/* 072C38 80072038 00004025 */ move $t0, $zero -/* 072C3C 8007203C 32040003 */ andi $a0, $s0, 3 -/* 072C40 80072040 10800006 */ beqz $a0, .L8007205C -/* 072C44 80072044 00801025 */ move $v0, $a0 -.L80072048: -/* 072C48 80072048 25080001 */ addiu $t0, $t0, 1 -/* 072C4C 8007204C A0600000 */ sb $zero, ($v1) -/* 072C50 80072050 1448FFFD */ bne $v0, $t0, .L80072048 -/* 072C54 80072054 24630001 */ addiu $v1, $v1, 1 -/* 072C58 80072058 11100007 */ beq $t0, $s0, .L80072078 -.L8007205C: -/* 072C5C 8007205C 25080004 */ addiu $t0, $t0, 4 -/* 072C60 80072060 A0600001 */ sb $zero, 1($v1) -/* 072C64 80072064 A0600002 */ sb $zero, 2($v1) -/* 072C68 80072068 A0600003 */ sb $zero, 3($v1) -/* 072C6C 8007206C 24630004 */ addiu $v1, $v1, 4 -/* 072C70 80072070 1510FFFA */ bne $t0, $s0, .L8007205C -/* 072C74 80072074 A060FFFC */ sb $zero, -4($v1) -.L80072078: -/* 072C78 80072078 00604825 */ move $t1, $v1 -/* 072C7C 8007207C 25F90024 */ addiu $t9, $t7, 0x24 -.L80072080: -/* 072C80 80072080 8DE10000 */ lw $at, ($t7) -/* 072C84 80072084 25EF000C */ addiu $t7, $t7, 0xc -/* 072C88 80072088 A9210000 */ swl $at, ($t1) -/* 072C8C 8007208C B9210003 */ swr $at, 3($t1) -/* 072C90 80072090 8DE1FFF8 */ lw $at, -8($t7) -/* 072C94 80072094 2529000C */ addiu $t1, $t1, 0xc -/* 072C98 80072098 A921FFF8 */ swl $at, -8($t1) -/* 072C9C 8007209C B921FFFB */ swr $at, -5($t1) -/* 072CA0 800720A0 8DE1FFFC */ lw $at, -4($t7) -/* 072CA4 800720A4 00000000 */ nop -/* 072CA8 800720A8 A921FFFC */ swl $at, -4($t1) -/* 072CAC 800720AC 15F9FFF4 */ bne $t7, $t9, .L80072080 -/* 072CB0 800720B0 B921FFFF */ swr $at, -1($t1) -/* 072CB4 800720B4 8DE10000 */ lw $at, ($t7) -/* 072CB8 800720B8 240A00FE */ li $t2, 254 -/* 072CBC 800720BC A9210000 */ swl $at, ($t1) -/* 072CC0 800720C0 B9210003 */ swr $at, 3($t1) -/* 072CC4 800720C4 A06A0028 */ sb $t2, 0x28($v1) -/* 072CC8 800720C8 8FBF001C */ lw $ra, 0x1c($sp) -/* 072CCC 800720CC 8FB00018 */ lw $s0, 0x18($sp) -/* 072CD0 800720D0 24630028 */ addiu $v1, $v1, 0x28 -/* 072CD4 800720D4 03E00008 */ jr $ra -/* 072CD8 800720D8 27BD0058 */ addiu $sp, $sp, 0x58 - diff --git a/lib/asm/non_matchings/osMotor/osMotorInit.s b/lib/asm/non_matchings/osMotor/osMotorInit.s deleted file mode 100644 index 1c86ff94..00000000 --- a/lib/asm/non_matchings/osMotor/osMotorInit.s +++ /dev/null @@ -1,104 +0,0 @@ -glabel osMotorInit -/* 072CDC 800720DC 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 072CE0 800720E0 AFB00020 */ sw $s0, 0x20($sp) -/* 072CE4 800720E4 AFBF0024 */ sw $ra, 0x24($sp) -/* 072CE8 800720E8 24070080 */ li $a3, 128 -/* 072CEC 800720EC 00C08025 */ move $s0, $a2 -/* 072CF0 800720F0 ACA40004 */ sw $a0, 4($a1) -/* 072CF4 800720F4 ACA60008 */ sw $a2, 8($a1) -/* 072CF8 800720F8 ACA00000 */ sw $zero, ($a1) -/* 072CFC 800720FC A0A70065 */ sb $a3, 0x65($a1) -/* 072D00 80072100 27A20030 */ addiu $v0, $sp, 0x30 -/* 072D04 80072104 27A30050 */ addiu $v1, $sp, 0x50 -.L80072108: -/* 072D08 80072108 24420001 */ addiu $v0, $v0, 1 -/* 072D0C 8007210C 0043082B */ sltu $at, $v0, $v1 -/* 072D10 80072110 1420FFFD */ bnez $at, .L80072108 -/* 072D14 80072114 A047FFFF */ sb $a3, -1($v0) -/* 072D18 80072118 02002825 */ move $a1, $s0 -/* 072D1C 8007211C 24060400 */ li $a2, 1024 -/* 072D20 80072120 27A70030 */ addiu $a3, $sp, 0x30 -/* 072D24 80072124 AFA00010 */ sw $zero, 0x10($sp) -/* 072D28 80072128 0C03363C */ jal __osContRamWrite -/* 072D2C 8007212C AFA40058 */ sw $a0, 0x58($sp) -/* 072D30 80072130 24010002 */ li $at, 2 -/* 072D34 80072134 14410008 */ bne $v0, $at, .L80072158 -/* 072D38 80072138 00401825 */ move $v1, $v0 -/* 072D3C 8007213C 8FA40058 */ lw $a0, 0x58($sp) -/* 072D40 80072140 02002825 */ move $a1, $s0 -/* 072D44 80072144 24060400 */ li $a2, 1024 -/* 072D48 80072148 27A70030 */ addiu $a3, $sp, 0x30 -/* 072D4C 8007214C 0C03363C */ jal __osContRamWrite -/* 072D50 80072150 AFA00010 */ sw $zero, 0x10($sp) -/* 072D54 80072154 00401825 */ move $v1, $v0 -.L80072158: -/* 072D58 80072158 10400003 */ beqz $v0, .L80072168 -/* 072D5C 8007215C 02002825 */ move $a1, $s0 -/* 072D60 80072160 10000034 */ b .L80072234 -/* 072D64 80072164 00601025 */ move $v0, $v1 -.L80072168: -/* 072D68 80072168 8FA40058 */ lw $a0, 0x58($sp) -/* 072D6C 8007216C 24060400 */ li $a2, 1024 -/* 072D70 80072170 0C033728 */ jal __osContRamRead -/* 072D74 80072174 27A70030 */ addiu $a3, $sp, 0x30 -/* 072D78 80072178 10400004 */ beqz $v0, .L8007218C -/* 072D7C 8007217C 93AE004F */ lbu $t6, 0x4f($sp) -/* 072D80 80072180 1000002D */ b .L80072238 -/* 072D84 80072184 8FBF0024 */ lw $ra, 0x24($sp) -/* 072D88 80072188 93AE004F */ lbu $t6, 0x4f($sp) -.L8007218C: -/* 072D8C 8007218C 24010080 */ li $at, 128 -/* 072D90 80072190 11C10003 */ beq $t6, $at, .L800721A0 -/* 072D94 80072194 3C048012 */ lui $a0, %hi(_motorstartbuf) # $a0, 0x8012 -/* 072D98 80072198 10000026 */ b .L80072234 -/* 072D9C 8007219C 2402000B */ li $v0, 11 -.L800721A0: -/* 072DA0 800721A0 3C038012 */ lui $v1, %hi(_motorstopbuf) # $v1, 0x8012 -/* 072DA4 800721A4 3C058012 */ lui $a1, %hi(_motorstartbuf) # $a1, 0x8012 -/* 072DA8 800721A8 24A53FF0 */ addiu $a1, %lo(_motorstartbuf) # addiu $a1, $a1, 0x3ff0 -/* 072DAC 800721AC 24633FD0 */ addiu $v1, %lo(_motorstopbuf) # addiu $v1, $v1, 0x3fd0 -/* 072DB0 800721B0 24843FF0 */ addiu $a0, %lo(_motorstartbuf) # addiu $a0, $a0, 0x3ff0 -/* 072DB4 800721B4 24020001 */ li $v0, 1 -.L800721B8: -/* 072DB8 800721B8 24630004 */ addiu $v1, $v1, 4 -/* 072DBC 800721BC A0820001 */ sb $v0, 1($a0) -/* 072DC0 800721C0 A060FFFD */ sb $zero, -3($v1) -/* 072DC4 800721C4 A0820002 */ sb $v0, 2($a0) -/* 072DC8 800721C8 A060FFFE */ sb $zero, -2($v1) -/* 072DCC 800721CC A0820003 */ sb $v0, 3($a0) -/* 072DD0 800721D0 A060FFFF */ sb $zero, -1($v1) -/* 072DD4 800721D4 24840004 */ addiu $a0, $a0, 4 -/* 072DD8 800721D8 A082FFFC */ sb $v0, -4($a0) -/* 072DDC 800721DC 1465FFF6 */ bne $v1, $a1, .L800721B8 -/* 072DE0 800721E0 A060FFFC */ sb $zero, -4($v1) -/* 072DE4 800721E4 3C0F8012 */ lui $t7, %hi(_MotorStartData) # $t7, 0x8012 -/* 072DE8 800721E8 25EF3ED0 */ addiu $t7, %lo(_MotorStartData) # addiu $t7, $t7, 0x3ed0 -/* 072DEC 800721EC 3C068012 */ lui $a2, %hi(_motorstartbuf) # $a2, 0x8012 -/* 072DF0 800721F0 00101180 */ sll $v0, $s0, 6 -/* 072DF4 800721F4 004F3821 */ addu $a3, $v0, $t7 -/* 072DF8 800721F8 AFA2002C */ sw $v0, 0x2c($sp) -/* 072DFC 800721FC 24C63FF0 */ addiu $a2, %lo(_motorstartbuf) # addiu $a2, $a2, 0x3ff0 -/* 072E00 80072200 02002025 */ move $a0, $s0 -/* 072E04 80072204 0C01C7E0 */ jal _MakeMotorData -/* 072E08 80072208 24050600 */ li $a1, 1536 -/* 072E0C 8007220C 8FA2002C */ lw $v0, 0x2c($sp) -/* 072E10 80072210 3C188012 */ lui $t8, %hi(_MotorStopData) # $t8, 0x8012 -/* 072E14 80072214 27183DD0 */ addiu $t8, %lo(_MotorStopData) # addiu $t8, $t8, 0x3dd0 -/* 072E18 80072218 3C068012 */ lui $a2, %hi(_motorstopbuf) # $a2, 0x8012 -/* 072E1C 8007221C 24C63FD0 */ addiu $a2, %lo(_motorstopbuf) # addiu $a2, $a2, 0x3fd0 -/* 072E20 80072220 02002025 */ move $a0, $s0 -/* 072E24 80072224 24050600 */ li $a1, 1536 -/* 072E28 80072228 0C01C7E0 */ jal _MakeMotorData -/* 072E2C 8007222C 00583821 */ addu $a3, $v0, $t8 -/* 072E30 80072230 00001025 */ move $v0, $zero -.L80072234: -/* 072E34 80072234 8FBF0024 */ lw $ra, 0x24($sp) -.L80072238: -/* 072E38 80072238 8FB00020 */ lw $s0, 0x20($sp) -/* 072E3C 8007223C 03E00008 */ jr $ra -/* 072E40 80072240 27BD0058 */ addiu $sp, $sp, 0x58 - -/* 072E44 80072244 00000000 */ nop -/* 072E48 80072248 00000000 */ nop -/* 072E4C 8007224C 00000000 */ nop - diff --git a/lib/asm/non_matchings/osMotor/osMotorStart.s b/lib/asm/non_matchings/osMotor/osMotorStart.s deleted file mode 100644 index fc0abd6c..00000000 --- a/lib/asm/non_matchings/osMotor/osMotorStart.s +++ /dev/null @@ -1,80 +0,0 @@ -glabel osMotorStart -/* 072A58 80071E58 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 072A5C 80071E5C AFBF0014 */ sw $ra, 0x14($sp) -/* 072A60 80071E60 0C033594 */ jal __osSiGetAccess -/* 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(__osContLastCmd) # $at, 0x8013 -/* 072A74 80071E74 A02ECD90 */ sb $t6, %lo(__osContLastCmd)($at) -/* 072A78 80071E78 8DF80008 */ lw $t8, 8($t7) -/* 072A7C 80071E7C 3C088012 */ lui $t0, %hi(_MotorStartData) # $t0, 0x8012 -/* 072A80 80071E80 25083ED0 */ addiu $t0, %lo(_MotorStartData) # addiu $t0, $t0, 0x3ed0 -/* 072A84 80071E84 0018C980 */ sll $t9, $t8, 6 -/* 072A88 80071E88 03282821 */ addu $a1, $t9, $t0 -/* 072A8C 80071E8C 0C0335B0 */ jal __osSiRawStartDma -/* 072A90 80071E90 24040001 */ li $a0, 1 -/* 072A94 80071E94 8FA90050 */ lw $t1, 0x50($sp) -/* 072A98 80071E98 00002825 */ move $a1, $zero -/* 072A9C 80071E9C 8D240004 */ lw $a0, 4($t1) -/* 072AA0 80071EA0 0C0322EC */ jal osRecvMesg -/* 072AA4 80071EA4 24060001 */ li $a2, 1 -/* 072AA8 80071EA8 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 072AAC 80071EAC 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 072AB0 80071EB0 0C0335B0 */ jal __osSiRawStartDma -/* 072AB4 80071EB4 00002025 */ move $a0, $zero -/* 072AB8 80071EB8 8FAA0050 */ lw $t2, 0x50($sp) -/* 072ABC 80071EBC 00002825 */ move $a1, $zero -/* 072AC0 80071EC0 8D440004 */ lw $a0, 4($t2) -/* 072AC4 80071EC4 0C0322EC */ jal osRecvMesg -/* 072AC8 80071EC8 24060001 */ li $a2, 1 -/* 072ACC 80071ECC 8FAB0050 */ lw $t3, 0x50($sp) -/* 072AD0 80071ED0 3C038013 */ lui $v1, %hi(__osPfsPifRam) # $v1, 0x8013 -/* 072AD4 80071ED4 8D640008 */ lw $a0, 8($t3) -/* 072AD8 80071ED8 2463CDE0 */ addiu $v1, %lo(__osPfsPifRam) # addiu $v1, $v1, -0x3220 -/* 072ADC 80071EDC 10800007 */ beqz $a0, .L80071EFC -/* 072AE0 80071EE0 27AC001C */ addiu $t4, $sp, 0x1c -/* 072AE4 80071EE4 18800005 */ blez $a0, .L80071EFC -/* 072AE8 80071EE8 00001025 */ move $v0, $zero -.L80071EEC: -/* 072AEC 80071EEC 24420001 */ addiu $v0, $v0, 1 -/* 072AF0 80071EF0 0044082A */ slt $at, $v0, $a0 -/* 072AF4 80071EF4 1420FFFD */ bnez $at, .L80071EEC -/* 072AF8 80071EF8 24630001 */ addiu $v1, $v1, 1 -.L80071EFC: -/* 072AFC 80071EFC 00607825 */ move $t7, $v1 -/* 072B00 80071F00 246E0024 */ addiu $t6, $v1, 0x24 -.L80071F04: -/* 072B04 80071F04 89E10000 */ lwl $at, ($t7) -/* 072B08 80071F08 99E10003 */ lwr $at, 3($t7) -/* 072B0C 80071F0C 25EF000C */ addiu $t7, $t7, 0xc -/* 072B10 80071F10 AD810000 */ sw $at, ($t4) -/* 072B14 80071F14 89E1FFF8 */ lwl $at, -8($t7) -/* 072B18 80071F18 99E1FFFB */ lwr $at, -5($t7) -/* 072B1C 80071F1C 258C000C */ addiu $t4, $t4, 0xc -/* 072B20 80071F20 AD81FFF8 */ sw $at, -8($t4) -/* 072B24 80071F24 89E1FFFC */ lwl $at, -4($t7) -/* 072B28 80071F28 99E1FFFF */ lwr $at, -1($t7) -/* 072B2C 80071F2C 15EEFFF5 */ bne $t7, $t6, .L80071F04 -/* 072B30 80071F30 AD81FFFC */ sw $at, -4($t4) -/* 072B34 80071F34 89E10000 */ lwl $at, ($t7) -/* 072B38 80071F38 99E10003 */ lwr $at, 3($t7) -/* 072B3C 80071F3C 00000000 */ nop -/* 072B40 80071F40 AD810000 */ sw $at, ($t4) -/* 072B44 80071F44 93A2001E */ lbu $v0, 0x1e($sp) -/* 072B48 80071F48 93A80042 */ lbu $t0, 0x42($sp) -/* 072B4C 80071F4C 305800C0 */ andi $t8, $v0, 0xc0 -/* 072B50 80071F50 00182103 */ sra $a0, $t8, 4 -/* 072B54 80071F54 14800004 */ bnez $a0, .L80071F68 -/* 072B58 80071F58 240100EB */ li $at, 235 -/* 072B5C 80071F5C 11010002 */ beq $t0, $at, .L80071F68 -/* 072B60 80071F60 00000000 */ nop -/* 072B64 80071F64 24040004 */ li $a0, 4 -.L80071F68: -/* 072B68 80071F68 0C0335A5 */ jal __osSiRelAccess -/* 072B6C 80071F6C AFA40048 */ sw $a0, 0x48($sp) -/* 072B70 80071F70 8FBF0014 */ lw $ra, 0x14($sp) -/* 072B74 80071F74 8FA20048 */ lw $v0, 0x48($sp) -/* 072B78 80071F78 03E00008 */ jr $ra -/* 072B7C 80071F7C 27BD0050 */ addiu $sp, $sp, 0x50 - diff --git a/lib/asm/non_matchings/osMotor/osMotorStop.s b/lib/asm/non_matchings/osMotor/osMotorStop.s deleted file mode 100644 index 0875e6b9..00000000 --- a/lib/asm/non_matchings/osMotor/osMotorStop.s +++ /dev/null @@ -1,80 +0,0 @@ -glabel osMotorStop -/* 072930 80071D30 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 072934 80071D34 AFBF0014 */ sw $ra, 0x14($sp) -/* 072938 80071D38 0C033594 */ jal __osSiGetAccess -/* 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(__osContLastCmd) # $at, 0x8013 -/* 07294C 80071D4C A02ECD90 */ sb $t6, %lo(__osContLastCmd)($at) -/* 072950 80071D50 8DF80008 */ lw $t8, 8($t7) -/* 072954 80071D54 3C088012 */ lui $t0, %hi(_MotorStopData) # $t0, 0x8012 -/* 072958 80071D58 25083DD0 */ addiu $t0, %lo(_MotorStopData) # addiu $t0, $t0, 0x3dd0 -/* 07295C 80071D5C 0018C980 */ sll $t9, $t8, 6 -/* 072960 80071D60 03282821 */ addu $a1, $t9, $t0 -/* 072964 80071D64 0C0335B0 */ jal __osSiRawStartDma -/* 072968 80071D68 24040001 */ li $a0, 1 -/* 07296C 80071D6C 8FA90050 */ lw $t1, 0x50($sp) -/* 072970 80071D70 00002825 */ move $a1, $zero -/* 072974 80071D74 8D240004 */ lw $a0, 4($t1) -/* 072978 80071D78 0C0322EC */ jal osRecvMesg -/* 07297C 80071D7C 24060001 */ li $a2, 1 -/* 072980 80071D80 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 072984 80071D84 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 072988 80071D88 0C0335B0 */ jal __osSiRawStartDma -/* 07298C 80071D8C 00002025 */ move $a0, $zero -/* 072990 80071D90 8FAA0050 */ lw $t2, 0x50($sp) -/* 072994 80071D94 00002825 */ move $a1, $zero -/* 072998 80071D98 8D440004 */ lw $a0, 4($t2) -/* 07299C 80071D9C 0C0322EC */ jal osRecvMesg -/* 0729A0 80071DA0 24060001 */ li $a2, 1 -/* 0729A4 80071DA4 8FAB0050 */ lw $t3, 0x50($sp) -/* 0729A8 80071DA8 3C038013 */ lui $v1, %hi(__osPfsPifRam) # $v1, 0x8013 -/* 0729AC 80071DAC 8D640008 */ lw $a0, 8($t3) -/* 0729B0 80071DB0 2463CDE0 */ addiu $v1, %lo(__osPfsPifRam) # addiu $v1, $v1, -0x3220 -/* 0729B4 80071DB4 10800007 */ beqz $a0, .L80071DD4 -/* 0729B8 80071DB8 27AC001C */ addiu $t4, $sp, 0x1c -/* 0729BC 80071DBC 18800005 */ blez $a0, .L80071DD4 -/* 0729C0 80071DC0 00001025 */ move $v0, $zero -.L80071DC4: -/* 0729C4 80071DC4 24420001 */ addiu $v0, $v0, 1 -/* 0729C8 80071DC8 0044082A */ slt $at, $v0, $a0 -/* 0729CC 80071DCC 1420FFFD */ bnez $at, .L80071DC4 -/* 0729D0 80071DD0 24630001 */ addiu $v1, $v1, 1 -.L80071DD4: -/* 0729D4 80071DD4 00607825 */ move $t7, $v1 -/* 0729D8 80071DD8 246E0024 */ addiu $t6, $v1, 0x24 -.L80071DDC: -/* 0729DC 80071DDC 89E10000 */ lwl $at, ($t7) -/* 0729E0 80071DE0 99E10003 */ lwr $at, 3($t7) -/* 0729E4 80071DE4 25EF000C */ addiu $t7, $t7, 0xc -/* 0729E8 80071DE8 AD810000 */ sw $at, ($t4) -/* 0729EC 80071DEC 89E1FFF8 */ lwl $at, -8($t7) -/* 0729F0 80071DF0 99E1FFFB */ lwr $at, -5($t7) -/* 0729F4 80071DF4 258C000C */ addiu $t4, $t4, 0xc -/* 0729F8 80071DF8 AD81FFF8 */ sw $at, -8($t4) -/* 0729FC 80071DFC 89E1FFFC */ lwl $at, -4($t7) -/* 072A00 80071E00 99E1FFFF */ lwr $at, -1($t7) -/* 072A04 80071E04 15EEFFF5 */ bne $t7, $t6, .L80071DDC -/* 072A08 80071E08 AD81FFFC */ sw $at, -4($t4) -/* 072A0C 80071E0C 89E10000 */ lwl $at, ($t7) -/* 072A10 80071E10 99E10003 */ lwr $at, 3($t7) -/* 072A14 80071E14 00000000 */ nop -/* 072A18 80071E18 AD810000 */ sw $at, ($t4) -/* 072A1C 80071E1C 93A2001E */ lbu $v0, 0x1e($sp) -/* 072A20 80071E20 93A80042 */ lbu $t0, 0x42($sp) -/* 072A24 80071E24 305800C0 */ andi $t8, $v0, 0xc0 -/* 072A28 80071E28 00182103 */ sra $a0, $t8, 4 -/* 072A2C 80071E2C 14800004 */ bnez $a0, .L80071E40 -/* 072A30 80071E30 00000000 */ nop -/* 072A34 80071E34 11000002 */ beqz $t0, .L80071E40 -/* 072A38 80071E38 00000000 */ nop -/* 072A3C 80071E3C 24040004 */ li $a0, 4 -.L80071E40: -/* 072A40 80071E40 0C0335A5 */ jal __osSiRelAccess -/* 072A44 80071E44 AFA40048 */ sw $a0, 0x48($sp) -/* 072A48 80071E48 8FBF0014 */ lw $ra, 0x14($sp) -/* 072A4C 80071E4C 8FA20048 */ lw $v0, 0x48($sp) -/* 072A50 80071E50 03E00008 */ jr $ra -/* 072A54 80071E54 27BD0050 */ addiu $sp, $sp, 0x50 - diff --git a/lib/src/os/osMotor.c b/lib/src/os/osMotor.c index 4379d74d..454d5884 100644 --- a/lib/src/os/osMotor.c +++ b/lib/src/os/osMotor.c @@ -1,27 +1,17 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x80071D30 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" #include "controller.h" #include "siint.h" -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorStop.s") -GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorStart.s") -GLOBAL_ASM("lib/asm/non_matchings/osMotor/_MakeMotorData.s") -GLOBAL_ASM("lib/asm/non_matchings/osMotor/osMotorInit.s") -#else - static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata); -//u32 __osMotorinitialized[MAXCONTROLLERS] = {0, 0, 0, 0}; +//TODO: These should really be declared here instead of somewhere else extern OSPifRam _MotorStopData[MAXCONTROLLERS]; extern OSPifRam _MotorStartData[MAXCONTROLLERS]; extern u8 _motorstopbuf[32]; extern u8 _motorstartbuf[32]; -s32 osMotorStop(OSPfs *pfs) -{ +s32 osMotorStop(OSPfs *pfs) { int i; s32 ret; u8 *ptr; @@ -32,7 +22,7 @@ s32 osMotorStop(OSPfs *pfs) __osContLastCmd = CONT_CMD_WRITE_MEMPACK; __osSiRawStartDma(OS_WRITE, &_MotorStopData[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; @@ -42,17 +32,13 @@ s32 osMotorStop(OSPfs *pfs) ramreadformat = *(__OSContRamReadFormat *)ptr; ret = CHNL_ERR(ramreadformat); - if (ret == 0 && ramreadformat.datacrc != __osContDataCrc((u8*)&_motorstopbuf)) - { + if (ret == 0 && ramreadformat.datacrc != 0) ret = PFS_ERR_CONTRFAIL; - } __osSiRelAccess(); return ret; } -s32 osMotorStart(OSPfs *pfs) -{ - +s32 osMotorStart(OSPfs *pfs) { int i; s32 ret; u8 *ptr; @@ -63,7 +49,7 @@ s32 osMotorStart(OSPfs *pfs) __osContLastCmd = CONT_CMD_WRITE_MEMPACK; __osSiRawStartDma(OS_WRITE, &_MotorStartData[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; @@ -73,16 +59,13 @@ s32 osMotorStart(OSPfs *pfs) ramreadformat = *(__OSContRamReadFormat *)ptr; ret = CHNL_ERR(ramreadformat); - if (ret == 0 && ramreadformat.datacrc != __osContDataCrc((u8*)&_motorstartbuf)) - { + if (ret == 0 && ramreadformat.datacrc != 0xEB) ret = PFS_ERR_CONTRFAIL; - } __osSiRelAccess(); return ret; } -static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata) -{ +static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata) { u8 *ptr; __OSContRamReadFormat ramreadformat; int i; @@ -99,12 +82,10 @@ static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata 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++) - { + + if (channel != 0) { + for (i = 0; i < channel; i++) { *ptr++ = 0; } } @@ -113,8 +94,7 @@ static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata ptr[0] = CONT_CMD_END; } -s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) -{ +s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { int i; s32 ret; u8 temp[32]; @@ -123,51 +103,33 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) pfs->status = 0; pfs->activebank = 128; - for (i = 0; i < ARRLEN(temp); i++) - temp[i] = 254; - - ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); - if (ret == 2) //TODO: remove magic constant - ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); - if (ret != 0) - return ret; - - ret = __osContRamRead(mq, channel, 1024, temp); - if (ret == 2) - ret = PFS_ERR_CONTRFAIL; //is this right? - if (ret != 0) - return ret; - if (temp[31] == 254) - return PFS_ERR_DEVICE; - for (i = 0; i < ARRLEN(temp); i++) temp[i] = 128; ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); - if (ret == 2) + + if (ret == PFS_ERR_NEW_PACK) ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + if (ret != 0) return ret; ret = __osContRamRead(mq, channel, 1024, temp); - if (ret == 2) - ret = PFS_ERR_CONTRFAIL; + if (ret != 0) return ret; - if (temp[31] != 128) - return PFS_ERR_DEVICE; - //if (!__osMotorinitialized[channel]) - //{ - for (i = 0; i < ARRLEN(_motorstartbuf); i++) - { - _motorstartbuf[i] = 1; - _motorstopbuf[i] = 0; - } - _MakeMotorData(channel, 1536, _motorstartbuf, &_MotorStartData[channel]); - _MakeMotorData(channel, 1536, _motorstopbuf, &_MotorStopData[channel]); - //__osMotorinitialized[channel] = 1; - //} + if (temp[31] != 128) { + return PFS_ERR_DEVICE; + } + + for (i = 0; i < ARRLEN(_motorstartbuf); i++) { + _motorstartbuf[i] = 1; + _motorstopbuf[i] = 0; + } + + _MakeMotorData(channel, 1536, _motorstartbuf, &_MotorStartData[channel]); + _MakeMotorData(channel, 1536, _motorstopbuf, &_MotorStopData[channel]); + return 0; } -#endif From 062442b02f00005a89c341cc9a5cc7f1d50a8568 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 22:09:54 -0400 Subject: [PATCH 11/46] Split controller and contrreaddata --- lib/src/os/contreaddata.c | 11 ++++ lib/src/os/controller.c | 123 ++++++++++++++++++++++++++++++++++++ lib/src/os/unknown_0CD820.c | 32 ---------- tools/python/generate_ld.py | 2 +- 4 files changed, 135 insertions(+), 33 deletions(-) create mode 100644 lib/src/os/contreaddata.c create mode 100644 lib/src/os/controller.c delete mode 100644 lib/src/os/unknown_0CD820.c diff --git a/lib/src/os/contreaddata.c b/lib/src/os/contreaddata.c new file mode 100644 index 00000000..daa3003a --- /dev/null +++ b/lib/src/os/contreaddata.c @@ -0,0 +1,11 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CCFE0 */ + +#include "types.h" +#include "macros.h" +#include "libultra_internal.h" +#include "controller.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s") diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c new file mode 100644 index 00000000..0d663a4b --- /dev/null +++ b/lib/src/os/controller.c @@ -0,0 +1,123 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CCC20 */ + +#include "types.h" +#include "macros.h" +#include "libultra_internal.h" + +#define HALF_A_SECOND OS_USEC_TO_CYCLES(500000) + +// u32 __osContinitialized = 0; +// OSPifRam __osContPifRam; +// u8 __osContLastCmd; +// u8 __osMaxControllers; // 8012CD91 +// s32 D_8012CD94; +// s32 D_8012CD98[6]; +// s32 D_8012CDB0; +// s32 D_8012CDB4; +// OSMesgQueue __osEepromTimerQ; +// OSMesg __osEepromTimerMsg; +// OSPifRam __osPfsPifRam; // 8012CDE0 + +s32 D_800E38C0 = 0; + +s32 D_8012CD50[15]; +s32 D_8012CD8C; +s8 __osContLastCmd; +s8 __osMaxControllers; // 8012CD91 +s32 D_8012CD94; +s32 D_8012CD98[6]; +s32 D_8012CDB0; +s32 D_8012CDB4; +s32 D_8012CDB8; +s32 D_8012CDBC; +s32 D_8012CDC0[4]; +s32 D_8012CDD0[4]; +s32 __osPfsPifRam; // 8012CDE0 +s32 D_8012CDE4; +s32 D_8012CDE8[12]; +s32 D_8012CE18; +s32 D_8012CE1C; + +#if 1 +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContInit.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s") +#else +s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data) { + OSMesg dummy; + s32 ret; + OSTime t; + OSTimer mytimer; + OSMesgQueue timerMesgQueue; + + ret = 0; + if (__osContinitialized) + return ret; + __osContinitialized = TRUE; + t = osGetTime(); + if (t < HALF_A_SECOND) { + osCreateMesgQueue(&timerMesgQueue, &dummy, 1); + osSetTimer(&mytimer, HALF_A_SECOND - t, 0, &timerMesgQueue, &dummy); + osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); + } + __osMaxControllers = MAXCONTROLLERS; + __osPackRequestData(CONT_CMD_REQUEST_STATUS); + + ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); + osRecvMesg(mq, &dummy, OS_MESG_BLOCK); + + ret = __osSiRawStartDma(OS_READ, &__osContPifRam); + osRecvMesg(mq, &dummy, OS_MESG_BLOCK); + __osContGetInitData(bitpattern, data); + __osContLastCmd = CONT_CMD_REQUEST_STATUS; + __osSiCreateAccessQueue(); + osCreateMesgQueue(&__osEepromTimerQ, &__osEepromTimerMsg, 1); + return ret; +} + +void __osContGetInitData(u8 *pattern, OSContStatus *data) { + u8 *ptr; + __OSContRequesFormat requestformat; + int i; + u8 bits; + bits = 0; + ptr = (u8 *)&__osContPifRam; + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContRequesFormat), data++) { + 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; + } + } + *pattern = bits; +} + +void __osPackRequestData(u8 cmd) { + u8 *ptr; + __OSContRequesFormat requestformat; + int i; + for (i = 0; i < ARRLEN(__osContPifRam.ramarray); i++) { + __osContPifRam.ramarray[i] = 0; + } + __osContPifRam.pifstatus = CONT_CMD_EXE; + ptr = (u8 *)&__osContPifRam.ramarray; + 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 < __osMaxControllers; i++) { + *(__OSContRequesFormat *)ptr = requestformat; + ptr += sizeof(__OSContRequesFormat); + } + ptr[0] = CONT_CMD_END; +} +#endif diff --git a/lib/src/os/unknown_0CD820.c b/lib/src/os/unknown_0CD820.c deleted file mode 100644 index 18cc8de8..00000000 --- a/lib/src/os/unknown_0CD820.c +++ /dev/null @@ -1,32 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800CCC20 */ - -#include "types.h" -#include "macros.h" - -s32 D_800E38C0 = 0; - -s32 D_8012CD50[15]; -s32 D_8012CD8C; -s8 __osContLastCmd; -s8 __osMaxControllers; // 8012CD91 -s32 D_8012CD94; -s32 D_8012CD98[6]; -s32 D_8012CDB0; -s32 D_8012CDB4; -s32 D_8012CDB8; -s32 D_8012CDBC; -s32 D_8012CDC0[4]; -s32 D_8012CDD0[4]; -s32 __osPfsPifRam; // 8012CDE0 -s32 D_8012CDE4; -s32 D_8012CDE8[12]; -s32 D_8012CE18; -s32 D_8012CE1C; - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContInit.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s") diff --git a/tools/python/generate_ld.py b/tools/python/generate_ld.py index 0dd1af49..40ca0d77 100644 --- a/tools/python/generate_ld.py +++ b/tools/python/generate_ld.py @@ -30,7 +30,7 @@ LATE_DATA_FILES = [ BSS_LIB_ORDER_FILES = [ BUILD_DIR + '/lib/src/os/osViMgr.o', BUILD_DIR + '/lib/src/os/osSetEventMesg.o', - BUILD_DIR + '/lib/src/os/unknown_0CD820.o', + BUILD_DIR + '/lib/src/os/controller.o', BUILD_DIR + '/lib/src/os/unknown_0CE200.o' ] From 6344358559492ba71c36c69d517de04c6c8f1625 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 22:12:11 -0400 Subject: [PATCH 12/46] Fix __osPfsPifRam declaration --- lib/src/os/contramread.c | 3 +-- lib/src/os/contramwrite.c | 3 +-- lib/src/os/controller.c | 11 ++++------- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/src/os/contramread.c b/lib/src/os/contramread.c index f9e329a1..28c41d94 100644 --- a/lib/src/os/contramread.c +++ b/lib/src/os/contramread.c @@ -5,7 +5,6 @@ #include "controller.h" #include "siint.h" -extern s32 D_8012CE1C; static void __osPackRamReadData(int channel, u16 address); s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { s32 ret; @@ -25,7 +24,7 @@ s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus __osPfsPifRam.ramarray[i] = 0xFFU; } - D_8012CE1C = 0; + __osPfsPifRam.pifstatus = 0; ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; diff --git a/lib/src/os/contramwrite.c b/lib/src/os/contramwrite.c index 4a5bdc8f..8bae742b 100644 --- a/lib/src/os/contramwrite.c +++ b/lib/src/os/contramwrite.c @@ -5,7 +5,6 @@ #include "controller.h" #include "siint.h" -extern s32 D_8012CE1C; static void __osPackRamWriteData(int channel, u16 address, u8 *buffer); s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force) { @@ -29,7 +28,7 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus __osPfsPifRam.ramarray[i] = 0xFFU; } - D_8012CE1C = 0; + __osPfsPifRam.pifstatus = 0; ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index 0d663a4b..2b70199b 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -4,6 +4,7 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" +#include "controller.h" #define HALF_A_SECOND OS_USEC_TO_CYCLES(500000) @@ -23,8 +24,8 @@ s32 D_800E38C0 = 0; s32 D_8012CD50[15]; s32 D_8012CD8C; -s8 __osContLastCmd; -s8 __osMaxControllers; // 8012CD91 +u8 __osContLastCmd; +u8 __osMaxControllers; // 8012CD91 s32 D_8012CD94; s32 D_8012CD98[6]; s32 D_8012CDB0; @@ -33,11 +34,7 @@ s32 D_8012CDB8; s32 D_8012CDBC; s32 D_8012CDC0[4]; s32 D_8012CDD0[4]; -s32 __osPfsPifRam; // 8012CDE0 -s32 D_8012CDE4; -s32 D_8012CDE8[12]; -s32 D_8012CE18; -s32 D_8012CE1C; +OSPifRam __osPfsPifRam; // 8012CDE0 #if 1 GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContInit.s") From dd3937a113c8aa59bde3a6303951b88166576151 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 22:15:52 -0400 Subject: [PATCH 13/46] __osContPifRam fixed --- .../unknown_0CD820/__osContGetInitData.s | 4 ++-- .../unknown_0CD820/__osPackReadData.s | 12 ++++++------ .../unknown_0CD820/__osPackRequestData.s | 12 ++++++------ .../unknown_0CD820/osContGetReadData.s | 4 ++-- .../non_matchings/unknown_0CD820/osContInit.s | 16 ++++++++-------- .../unknown_0CD820/osContStartReadData.s | 16 ++++++++-------- lib/src/os/controller.c | 6 ++---- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s b/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s index 4a8bf07b..7b274885 100644 --- a/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s +++ b/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s @@ -2,8 +2,8 @@ glabel __osContGetInitData /* 0CDA18 800CCE18 3C0F8013 */ lui $t7, %hi(__osMaxControllers) # $t7, 0x8013 /* 0CDA1C 800CCE1C 91EFCD91 */ lbu $t7, %lo(__osMaxControllers)($t7) /* 0CDA20 800CCE20 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CDA24 800CCE24 3C0E8013 */ lui $t6, %hi(D_8012CD50) # $t6, 0x8013 -/* 0CDA28 800CCE28 25CECD50 */ addiu $t6, %lo(D_8012CD50) # addiu $t6, $t6, -0x32b0 +/* 0CDA24 800CCE24 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 +/* 0CDA28 800CCE28 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 /* 0CDA2C 800CCE2C A3A00007 */ sb $zero, 7($sp) /* 0CDA30 800CCE30 AFAE0014 */ sw $t6, 0x14($sp) /* 0CDA34 800CCE34 19E00028 */ blez $t7, .L800CCED8 diff --git a/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s b/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s index f5005ee2..85ab93d0 100644 --- a/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s +++ b/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s @@ -1,16 +1,16 @@ glabel __osPackReadData /* 0CDD4C 800CD14C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDD50 800CD150 3C0E8013 */ lui $t6, %hi(D_8012CD50) # $t6, 0x8013 -/* 0CDD54 800CD154 25CECD50 */ addiu $t6, %lo(D_8012CD50) # addiu $t6, $t6, -0x32b0 +/* 0CDD50 800CD150 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 +/* 0CDD54 800CD154 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 /* 0CDD58 800CD158 AFAE000C */ sw $t6, 0xc($sp) /* 0CDD5C 800CD15C AFA00000 */ sw $zero, ($sp) .L800CD160: /* 0CDD60 800CD160 8FAF0000 */ lw $t7, ($sp) /* 0CDD64 800CD164 8FB90000 */ lw $t9, ($sp) -/* 0CDD68 800CD168 3C018013 */ lui $at, %hi(D_8012CD50) # $at, 0x8013 +/* 0CDD68 800CD168 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 /* 0CDD6C 800CD16C 000FC080 */ sll $t8, $t7, 2 /* 0CDD70 800CD170 00380821 */ addu $at, $at, $t8 -/* 0CDD74 800CD174 AC20CD50 */ sw $zero, %lo(D_8012CD50)($at) +/* 0CDD74 800CD174 AC20CD50 */ sw $zero, %lo(__osContPifRam)($at) /* 0CDD78 800CD178 27280001 */ addiu $t0, $t9, 1 /* 0CDD7C 800CD17C 29010010 */ slti $at, $t0, 0x10 /* 0CDD80 800CD180 1420FFF7 */ bnez $at, .L800CD160 @@ -18,7 +18,7 @@ glabel __osPackReadData /* 0CDD88 800CD188 3C198013 */ lui $t9, %hi(__osMaxControllers) # $t9, 0x8013 /* 0CDD8C 800CD18C 9339CD91 */ lbu $t9, %lo(__osMaxControllers)($t9) /* 0CDD90 800CD190 24090001 */ li $t1, 1 -/* 0CDD94 800CD194 3C018013 */ lui $at, %hi(D_8012CD8C) # $at, 0x8013 +/* 0CDD94 800CD194 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 /* 0CDD98 800CD198 240A00FF */ li $t2, 255 /* 0CDD9C 800CD19C 240B0001 */ li $t3, 1 /* 0CDDA0 800CD1A0 240C0004 */ li $t4, 4 @@ -26,7 +26,7 @@ glabel __osPackReadData /* 0CDDA8 800CD1A8 340EFFFF */ li $t6, 65535 /* 0CDDAC 800CD1AC 240FFFFF */ li $t7, -1 /* 0CDDB0 800CD1B0 2418FFFF */ li $t8, -1 -/* 0CDDB4 800CD1B4 AC29CD8C */ sw $t1, %lo(D_8012CD8C)($at) +/* 0CDDB4 800CD1B4 AC29CD8C */ sw $t1, %lo(__osContPifRam+60)($at) /* 0CDDB8 800CD1B8 A3AA0004 */ sb $t2, 4($sp) /* 0CDDBC 800CD1BC A3AB0005 */ sb $t3, 5($sp) /* 0CDDC0 800CD1C0 A3AC0006 */ sb $t4, 6($sp) diff --git a/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s b/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s index 3faa7cbc..f1416683 100644 --- a/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s +++ b/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s @@ -5,20 +5,20 @@ glabel __osPackRequestData .L800CCEF4: /* 0CDAF4 800CCEF4 8FAE0000 */ lw $t6, ($sp) /* 0CDAF8 800CCEF8 8FB80000 */ lw $t8, ($sp) -/* 0CDAFC 800CCEFC 3C018013 */ lui $at, %hi(D_8012CD50) # $at, 0x8013 +/* 0CDAFC 800CCEFC 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 /* 0CDB00 800CCF00 000E7880 */ sll $t7, $t6, 2 /* 0CDB04 800CCF04 002F0821 */ addu $at, $at, $t7 -/* 0CDB08 800CCF08 AC20CD50 */ sw $zero, %lo(D_8012CD50)($at) +/* 0CDB08 800CCF08 AC20CD50 */ sw $zero, %lo(__osContPifRam)($at) /* 0CDB0C 800CCF0C 27190001 */ addiu $t9, $t8, 1 /* 0CDB10 800CCF10 2B210010 */ slti $at, $t9, 0x10 /* 0CDB14 800CCF14 1420FFF7 */ bnez $at, .L800CCEF4 /* 0CDB18 800CCF18 AFB90000 */ sw $t9, ($sp) /* 0CDB1C 800CCF1C 3C198013 */ lui $t9, %hi(__osMaxControllers) # $t9, 0x8013 /* 0CDB20 800CCF20 9339CD91 */ lbu $t9, %lo(__osMaxControllers)($t9) -/* 0CDB24 800CCF24 3C098013 */ lui $t1, %hi(D_8012CD50) # $t1, 0x8013 +/* 0CDB24 800CCF24 3C098013 */ lui $t1, %hi(__osContPifRam) # $t1, 0x8013 /* 0CDB28 800CCF28 24080001 */ li $t0, 1 -/* 0CDB2C 800CCF2C 3C018013 */ lui $at, %hi(D_8012CD8C) # $at, 0x8013 -/* 0CDB30 800CCF30 2529CD50 */ addiu $t1, %lo(D_8012CD50) # addiu $t1, $t1, -0x32b0 +/* 0CDB2C 800CCF2C 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 +/* 0CDB30 800CCF30 2529CD50 */ addiu $t1, %lo(__osContPifRam) # addiu $t1, $t1, -0x32b0 /* 0CDB34 800CCF34 240A00FF */ li $t2, 255 /* 0CDB38 800CCF38 240B0001 */ li $t3, 1 /* 0CDB3C 800CCF3C 240C0003 */ li $t4, 3 @@ -26,7 +26,7 @@ glabel __osPackRequestData /* 0CDB44 800CCF44 240E00FF */ li $t6, 255 /* 0CDB48 800CCF48 240F00FF */ li $t7, 255 /* 0CDB4C 800CCF4C 241800FF */ li $t8, 255 -/* 0CDB50 800CCF50 AC28CD8C */ sw $t0, %lo(D_8012CD8C)($at) +/* 0CDB50 800CCF50 AC28CD8C */ sw $t0, %lo(__osContPifRam+60)($at) /* 0CDB54 800CCF54 AFA9000C */ sw $t1, 0xc($sp) /* 0CDB58 800CCF58 A3AA0004 */ sb $t2, 4($sp) /* 0CDB5C 800CCF5C A3AB0005 */ sb $t3, 5($sp) diff --git a/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s b/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s index c447d1eb..9614abeb 100644 --- a/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s +++ b/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s @@ -1,9 +1,9 @@ glabel osContGetReadData /* 0CDCA4 800CD0A4 3C0F8013 */ lui $t7, %hi(__osMaxControllers) # $t7, 0x8013 /* 0CDCA8 800CD0A8 91EFCD91 */ lbu $t7, %lo(__osMaxControllers)($t7) -/* 0CDCAC 800CD0AC 3C0E8013 */ lui $t6, %hi(D_8012CD50) # $t6, 0x8013 +/* 0CDCAC 800CD0AC 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 /* 0CDCB0 800CD0B0 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDCB4 800CD0B4 25CECD50 */ addiu $t6, %lo(D_8012CD50) # addiu $t6, $t6, -0x32b0 +/* 0CDCB4 800CD0B4 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 /* 0CDCB8 800CD0B8 AFAE000C */ sw $t6, 0xc($sp) /* 0CDCBC 800CD0BC 19E00021 */ blez $t7, .L800CD144 /* 0CDCC0 800CD0C0 AFA00000 */ sw $zero, ($sp) diff --git a/lib/asm/non_matchings/unknown_0CD820/osContInit.s b/lib/asm/non_matchings/unknown_0CD820/osContInit.s index 46389661..f124db18 100644 --- a/lib/asm/non_matchings/unknown_0CD820/osContInit.s +++ b/lib/asm/non_matchings/unknown_0CD820/osContInit.s @@ -1,7 +1,7 @@ glabel osContInit /* 0CD820 800CCC20 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0CD824 800CCC24 3C0E800E */ lui $t6, %hi(D_800E38C0) # $t6, 0x800e -/* 0CD828 800CCC28 8DCE38C0 */ lw $t6, %lo(D_800E38C0)($t6) +/* 0CD824 800CCC24 3C0E800E */ lui $t6, %hi(__osContinitialized) # $t6, 0x800e +/* 0CD828 800CCC28 8DCE38C0 */ lw $t6, %lo(__osContinitialized)($t6) /* 0CD82C 800CCC2C AFBF0024 */ sw $ra, 0x24($sp) /* 0CD830 800CCC30 AFA40080 */ sw $a0, 0x80($sp) /* 0CD834 800CCC34 AFA50084 */ sw $a1, 0x84($sp) @@ -12,9 +12,9 @@ glabel osContInit /* 0CD848 800CCC48 00001025 */ move $v0, $zero .L800CCC4C: /* 0CD84C 800CCC4C 240F0001 */ li $t7, 1 -/* 0CD850 800CCC50 3C01800E */ lui $at, %hi(D_800E38C0) # $at, 0x800e +/* 0CD850 800CCC50 3C01800E */ lui $at, %hi(__osContinitialized) # $at, 0x800e /* 0CD854 800CCC54 0C03486C */ jal osGetTime -/* 0CD858 800CCC58 AC2F38C0 */ sw $t7, %lo(D_800E38C0)($at) +/* 0CD858 800CCC58 AC2F38C0 */ sw $t7, %lo(__osContinitialized)($at) /* 0CD85C 800CCC5C 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 /* 0CD860 800CCC60 3C06800E */ lui $a2, %hi(osClockRate) # $a2, 0x800e /* 0CD864 800CCC64 3C07800E */ lui $a3, %hi(osClockRate+4) # $a3, 0x800e @@ -93,8 +93,8 @@ glabel osContInit /* 0CD980 800CCD80 A038CD91 */ sb $t8, %lo(__osMaxControllers)($at) /* 0CD984 800CCD84 0C0333BA */ jal __osPackRequestData /* 0CD988 800CCD88 00002025 */ move $a0, $zero -/* 0CD98C 800CCD8C 3C058013 */ lui $a1, %hi(D_8012CD50) # $a1, 0x8013 -/* 0CD990 800CCD90 24A5CD50 */ addiu $a1, %lo(D_8012CD50) # addiu $a1, $a1, -0x32b0 +/* 0CD98C 800CCD8C 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 +/* 0CD990 800CCD90 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 /* 0CD994 800CCD94 0C0335B0 */ jal __osSiRawStartDma /* 0CD998 800CCD98 24040001 */ li $a0, 1 /* 0CD99C 800CCD9C AFA20078 */ sw $v0, 0x78($sp) @@ -102,8 +102,8 @@ glabel osContInit /* 0CD9A4 800CCDA4 27A5007C */ addiu $a1, $sp, 0x7c /* 0CD9A8 800CCDA8 0C0322EC */ jal osRecvMesg /* 0CD9AC 800CCDAC 24060001 */ li $a2, 1 -/* 0CD9B0 800CCDB0 3C058013 */ lui $a1, %hi(D_8012CD50) # $a1, 0x8013 -/* 0CD9B4 800CCDB4 24A5CD50 */ addiu $a1, %lo(D_8012CD50) # addiu $a1, $a1, -0x32b0 +/* 0CD9B0 800CCDB0 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 +/* 0CD9B4 800CCDB4 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 /* 0CD9B8 800CCDB8 0C0335B0 */ jal __osSiRawStartDma /* 0CD9BC 800CCDBC 00002025 */ move $a0, $zero /* 0CD9C0 800CCDC0 AFA20078 */ sw $v0, 0x78($sp) diff --git a/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s b/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s index 93432d31..2dbdf980 100644 --- a/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s +++ b/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s @@ -11,8 +11,8 @@ glabel osContStartReadData /* 0CDC04 800CD004 00000000 */ nop /* 0CDC08 800CD008 0C033453 */ jal __osPackReadData /* 0CDC0C 800CD00C 00000000 */ nop -/* 0CDC10 800CD010 3C058013 */ lui $a1, %hi(D_8012CD50) # $a1, 0x8013 -/* 0CDC14 800CD014 24A5CD50 */ addiu $a1, %lo(D_8012CD50) # addiu $a1, $a1, -0x32b0 +/* 0CDC10 800CD010 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 +/* 0CDC14 800CD014 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 /* 0CDC18 800CD018 0C0335B0 */ jal __osSiRawStartDma /* 0CDC1C 800CD01C 24040001 */ li $a0, 1 /* 0CDC20 800CD020 AFA2001C */ sw $v0, 0x1c($sp) @@ -25,19 +25,19 @@ glabel osContStartReadData .L800CD038: /* 0CDC38 800CD038 8FB80018 */ lw $t8, 0x18($sp) /* 0CDC3C 800CD03C 8FA80018 */ lw $t0, 0x18($sp) -/* 0CDC40 800CD040 3C018013 */ lui $at, %hi(D_8012CD50) # $at, 0x8013 +/* 0CDC40 800CD040 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 /* 0CDC44 800CD044 0018C880 */ sll $t9, $t8, 2 /* 0CDC48 800CD048 00390821 */ addu $at, $at, $t9 /* 0CDC4C 800CD04C 240F00FF */ li $t7, 255 -/* 0CDC50 800CD050 AC2FCD50 */ sw $t7, %lo(D_8012CD50)($at) +/* 0CDC50 800CD050 AC2FCD50 */ sw $t7, %lo(__osContPifRam)($at) /* 0CDC54 800CD054 25090001 */ addiu $t1, $t0, 1 /* 0CDC58 800CD058 29210010 */ slti $at, $t1, 0x10 /* 0CDC5C 800CD05C 1420FFF6 */ bnez $at, .L800CD038 /* 0CDC60 800CD060 AFA90018 */ sw $t1, 0x18($sp) -/* 0CDC64 800CD064 3C018013 */ lui $at, %hi(D_8012CD8C) # $at, 0x8013 -/* 0CDC68 800CD068 3C058013 */ lui $a1, %hi(D_8012CD50) # $a1, 0x8013 -/* 0CDC6C 800CD06C AC20CD8C */ sw $zero, %lo(D_8012CD8C)($at) -/* 0CDC70 800CD070 24A5CD50 */ addiu $a1, %lo(D_8012CD50) # addiu $a1, $a1, -0x32b0 +/* 0CDC64 800CD064 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 +/* 0CDC68 800CD068 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 +/* 0CDC6C 800CD06C AC20CD8C */ sw $zero, %lo(__osContPifRam+60)($at) +/* 0CDC70 800CD070 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 /* 0CDC74 800CD074 0C0335B0 */ jal __osSiRawStartDma /* 0CDC78 800CD078 00002025 */ move $a0, $zero /* 0CDC7C 800CD07C 240A0001 */ li $t2, 1 diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index 2b70199b..48842269 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -20,10 +20,8 @@ // OSMesg __osEepromTimerMsg; // OSPifRam __osPfsPifRam; // 8012CDE0 -s32 D_800E38C0 = 0; - -s32 D_8012CD50[15]; -s32 D_8012CD8C; +u32 __osContinitialized = 0; +OSPifRam __osContPifRam; u8 __osContLastCmd; u8 __osMaxControllers; // 8012CD91 s32 D_8012CD94; From d16ab2cec57225c8abbb2d76f5bf1e83032ec1bf Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 30 Sep 2021 22:24:16 -0400 Subject: [PATCH 14/46] More controller variables fixed up --- .../non_matchings/unknown_0CD820/osContInit.s | 8 +++--- lib/src/os/controller.c | 28 ++++--------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/lib/asm/non_matchings/unknown_0CD820/osContInit.s b/lib/asm/non_matchings/unknown_0CD820/osContInit.s index f124db18..57b210ea 100644 --- a/lib/asm/non_matchings/unknown_0CD820/osContInit.s +++ b/lib/asm/non_matchings/unknown_0CD820/osContInit.s @@ -117,10 +117,10 @@ glabel osContInit /* 0CD9E0 800CCDE0 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 /* 0CD9E4 800CCDE4 0C033580 */ jal __osSiCreateAccessQueue /* 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 -/* 0CD9F8 800CCDF8 2484CDB8 */ addiu $a0, %lo(D_8012CDB8) # addiu $a0, $a0, -0x3248 +/* 0CD9EC 800CCDEC 3C048013 */ lui $a0, %hi(__osEepromTimerQ) # $a0, 0x8013 +/* 0CD9F0 800CCDF0 3C058013 */ lui $a1, %hi(__osEepromTimerMsg) # $a1, 0x8013 +/* 0CD9F4 800CCDF4 24A5CDD0 */ addiu $a1, %lo(__osEepromTimerMsg) # addiu $a1, $a1, -0x3230 +/* 0CD9F8 800CCDF8 2484CDB8 */ addiu $a0, %lo(__osEepromTimerQ) # addiu $a0, $a0, -0x3248 /* 0CD9FC 800CCDFC 0C032208 */ jal osCreateMesgQueue /* 0CDA00 800CCE00 24060001 */ li $a2, 1 /* 0CDA04 800CCE04 8FA20078 */ lw $v0, 0x78($sp) diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index 48842269..feacb2bf 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -8,31 +8,15 @@ #define HALF_A_SECOND OS_USEC_TO_CYCLES(500000) -// u32 __osContinitialized = 0; -// OSPifRam __osContPifRam; -// u8 __osContLastCmd; -// u8 __osMaxControllers; // 8012CD91 -// s32 D_8012CD94; -// s32 D_8012CD98[6]; -// s32 D_8012CDB0; -// s32 D_8012CDB4; -// OSMesgQueue __osEepromTimerQ; -// OSMesg __osEepromTimerMsg; -// OSPifRam __osPfsPifRam; // 8012CDE0 - u32 __osContinitialized = 0; OSPifRam __osContPifRam; u8 __osContLastCmd; -u8 __osMaxControllers; // 8012CD91 -s32 D_8012CD94; -s32 D_8012CD98[6]; -s32 D_8012CDB0; -s32 D_8012CDB4; -s32 D_8012CDB8; -s32 D_8012CDBC; -s32 D_8012CDC0[4]; -s32 D_8012CDD0[4]; -OSPifRam __osPfsPifRam; // 8012CDE0 +u8 __osMaxControllers; +OSTimer __osEepromTimer; +OSMesgQueue __osEepromTimerQ; +OSMesg __osEepromTimerMsg; +s32 D_8012CDD4[2]; //Padding? +OSPifRam __osPfsPifRam; #if 1 GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContInit.s") From 2ab3d67931e0394ba9e6b3cf58215dc2706e8e6f Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 16:03:32 -0400 Subject: [PATCH 15/46] Match controller functions --- .../unknown_0CD820/__osContGetInitData.s | 57 -------- .../unknown_0CD820/__osPackRequestData.s | 67 --------- .../non_matchings/unknown_0CD820/osContInit.s | 132 ------------------ lib/src/os/controller.c | 31 ++-- lib/src/os/osInitialize.c | 2 +- 5 files changed, 16 insertions(+), 273 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s delete mode 100644 lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s delete mode 100644 lib/asm/non_matchings/unknown_0CD820/osContInit.s diff --git a/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s b/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s deleted file mode 100644 index 7b274885..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s +++ /dev/null @@ -1,57 +0,0 @@ -glabel __osContGetInitData -/* 0CDA18 800CCE18 3C0F8013 */ lui $t7, %hi(__osMaxControllers) # $t7, 0x8013 -/* 0CDA1C 800CCE1C 91EFCD91 */ lbu $t7, %lo(__osMaxControllers)($t7) -/* 0CDA20 800CCE20 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CDA24 800CCE24 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 -/* 0CDA28 800CCE28 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 -/* 0CDA2C 800CCE2C A3A00007 */ sb $zero, 7($sp) -/* 0CDA30 800CCE30 AFAE0014 */ sw $t6, 0x14($sp) -/* 0CDA34 800CCE34 19E00028 */ blez $t7, .L800CCED8 -/* 0CDA38 800CCE38 AFA00008 */ sw $zero, 8($sp) -.L800CCE3C: -/* 0CDA3C 800CCE3C 8FB90014 */ lw $t9, 0x14($sp) -/* 0CDA40 800CCE40 27B8000C */ addiu $t8, $sp, 0xc -/* 0CDA44 800CCE44 8B210000 */ lwl $at, ($t9) -/* 0CDA48 800CCE48 9B210003 */ lwr $at, 3($t9) -/* 0CDA4C 800CCE4C AF010000 */ sw $at, ($t8) -/* 0CDA50 800CCE50 8B290004 */ lwl $t1, 4($t9) -/* 0CDA54 800CCE54 9B290007 */ lwr $t1, 7($t9) -/* 0CDA58 800CCE58 AF090004 */ sw $t1, 4($t8) -/* 0CDA5C 800CCE5C 93AA000E */ lbu $t2, 0xe($sp) -/* 0CDA60 800CCE60 314B00C0 */ andi $t3, $t2, 0xc0 -/* 0CDA64 800CCE64 000B6103 */ sra $t4, $t3, 4 -/* 0CDA68 800CCE68 A0AC0003 */ sb $t4, 3($a1) -/* 0CDA6C 800CCE6C 90AD0003 */ lbu $t5, 3($a1) -/* 0CDA70 800CCE70 15A0000E */ bnez $t5, .L800CCEAC -/* 0CDA74 800CCE74 00000000 */ nop -/* 0CDA78 800CCE78 93AE0011 */ lbu $t6, 0x11($sp) -/* 0CDA7C 800CCE7C 93A80010 */ lbu $t0, 0x10($sp) -/* 0CDA80 800CCE80 240B0001 */ li $t3, 1 -/* 0CDA84 800CCE84 000E7A00 */ sll $t7, $t6, 8 -/* 0CDA88 800CCE88 01E8C025 */ or $t8, $t7, $t0 -/* 0CDA8C 800CCE8C A4B80000 */ sh $t8, ($a1) -/* 0CDA90 800CCE90 93B90012 */ lbu $t9, 0x12($sp) -/* 0CDA94 800CCE94 A0B90002 */ sb $t9, 2($a1) -/* 0CDA98 800CCE98 8FAA0008 */ lw $t2, 8($sp) -/* 0CDA9C 800CCE9C 93A90007 */ lbu $t1, 7($sp) -/* 0CDAA0 800CCEA0 014B6004 */ sllv $t4, $t3, $t2 -/* 0CDAA4 800CCEA4 012C6825 */ or $t5, $t1, $t4 -/* 0CDAA8 800CCEA8 A3AD0007 */ sb $t5, 7($sp) -.L800CCEAC: -/* 0CDAAC 800CCEAC 8FAE0008 */ lw $t6, 8($sp) -/* 0CDAB0 800CCEB0 3C198013 */ lui $t9, %hi(__osMaxControllers) # $t9, 0x8013 -/* 0CDAB4 800CCEB4 9339CD91 */ lbu $t9, %lo(__osMaxControllers)($t9) -/* 0CDAB8 800CCEB8 8FA80014 */ lw $t0, 0x14($sp) -/* 0CDABC 800CCEBC 25CF0001 */ addiu $t7, $t6, 1 -/* 0CDAC0 800CCEC0 01F9082A */ slt $at, $t7, $t9 -/* 0CDAC4 800CCEC4 25180008 */ addiu $t8, $t0, 8 -/* 0CDAC8 800CCEC8 AFB80014 */ sw $t8, 0x14($sp) -/* 0CDACC 800CCECC AFAF0008 */ sw $t7, 8($sp) -/* 0CDAD0 800CCED0 1420FFDA */ bnez $at, .L800CCE3C -/* 0CDAD4 800CCED4 24A50004 */ addiu $a1, $a1, 4 -.L800CCED8: -/* 0CDAD8 800CCED8 93AB0007 */ lbu $t3, 7($sp) -/* 0CDADC 800CCEDC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CDAE0 800CCEE0 03E00008 */ jr $ra -/* 0CDAE4 800CCEE4 A08B0000 */ sb $t3, ($a0) - diff --git a/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s b/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s deleted file mode 100644 index f1416683..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s +++ /dev/null @@ -1,67 +0,0 @@ -glabel __osPackRequestData -/* 0CDAE8 800CCEE8 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDAEC 800CCEEC 308400FF */ andi $a0, $a0, 0xff -/* 0CDAF0 800CCEF0 AFA00000 */ sw $zero, ($sp) -.L800CCEF4: -/* 0CDAF4 800CCEF4 8FAE0000 */ lw $t6, ($sp) -/* 0CDAF8 800CCEF8 8FB80000 */ lw $t8, ($sp) -/* 0CDAFC 800CCEFC 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDB00 800CCF00 000E7880 */ sll $t7, $t6, 2 -/* 0CDB04 800CCF04 002F0821 */ addu $at, $at, $t7 -/* 0CDB08 800CCF08 AC20CD50 */ sw $zero, %lo(__osContPifRam)($at) -/* 0CDB0C 800CCF0C 27190001 */ addiu $t9, $t8, 1 -/* 0CDB10 800CCF10 2B210010 */ slti $at, $t9, 0x10 -/* 0CDB14 800CCF14 1420FFF7 */ bnez $at, .L800CCEF4 -/* 0CDB18 800CCF18 AFB90000 */ sw $t9, ($sp) -/* 0CDB1C 800CCF1C 3C198013 */ lui $t9, %hi(__osMaxControllers) # $t9, 0x8013 -/* 0CDB20 800CCF20 9339CD91 */ lbu $t9, %lo(__osMaxControllers)($t9) -/* 0CDB24 800CCF24 3C098013 */ lui $t1, %hi(__osContPifRam) # $t1, 0x8013 -/* 0CDB28 800CCF28 24080001 */ li $t0, 1 -/* 0CDB2C 800CCF2C 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDB30 800CCF30 2529CD50 */ addiu $t1, %lo(__osContPifRam) # addiu $t1, $t1, -0x32b0 -/* 0CDB34 800CCF34 240A00FF */ li $t2, 255 -/* 0CDB38 800CCF38 240B0001 */ li $t3, 1 -/* 0CDB3C 800CCF3C 240C0003 */ li $t4, 3 -/* 0CDB40 800CCF40 240D00FF */ li $t5, 255 -/* 0CDB44 800CCF44 240E00FF */ li $t6, 255 -/* 0CDB48 800CCF48 240F00FF */ li $t7, 255 -/* 0CDB4C 800CCF4C 241800FF */ li $t8, 255 -/* 0CDB50 800CCF50 AC28CD8C */ sw $t0, %lo(__osContPifRam+60)($at) -/* 0CDB54 800CCF54 AFA9000C */ sw $t1, 0xc($sp) -/* 0CDB58 800CCF58 A3AA0004 */ sb $t2, 4($sp) -/* 0CDB5C 800CCF5C A3AB0005 */ sb $t3, 5($sp) -/* 0CDB60 800CCF60 A3AC0006 */ sb $t4, 6($sp) -/* 0CDB64 800CCF64 A3A40007 */ sb $a0, 7($sp) -/* 0CDB68 800CCF68 A3AD0008 */ sb $t5, 8($sp) -/* 0CDB6C 800CCF6C A3AE0009 */ sb $t6, 9($sp) -/* 0CDB70 800CCF70 A3AF000A */ sb $t7, 0xa($sp) -/* 0CDB74 800CCF74 A3B8000B */ sb $t8, 0xb($sp) -/* 0CDB78 800CCF78 1B200013 */ blez $t9, .L800CCFC8 -/* 0CDB7C 800CCF7C AFA00000 */ sw $zero, ($sp) -.L800CCF80: -/* 0CDB80 800CCF80 27A90004 */ addiu $t1, $sp, 4 -/* 0CDB84 800CCF84 8D210000 */ lw $at, ($t1) -/* 0CDB88 800CCF88 8FA8000C */ lw $t0, 0xc($sp) -/* 0CDB8C 800CCF8C 3C188013 */ lui $t8, %hi(__osMaxControllers) # $t8, 0x8013 -/* 0CDB90 800CCF90 A9010000 */ swl $at, ($t0) -/* 0CDB94 800CCF94 B9010003 */ swr $at, 3($t0) -/* 0CDB98 800CCF98 8D2B0004 */ lw $t3, 4($t1) -/* 0CDB9C 800CCF9C A90B0004 */ swl $t3, 4($t0) -/* 0CDBA0 800CCFA0 B90B0007 */ swr $t3, 7($t0) -/* 0CDBA4 800CCFA4 8FAE0000 */ lw $t6, ($sp) -/* 0CDBA8 800CCFA8 9318CD91 */ lbu $t8, %lo(__osMaxControllers)($t8) -/* 0CDBAC 800CCFAC 8FAC000C */ lw $t4, 0xc($sp) -/* 0CDBB0 800CCFB0 25CF0001 */ addiu $t7, $t6, 1 -/* 0CDBB4 800CCFB4 01F8082A */ slt $at, $t7, $t8 -/* 0CDBB8 800CCFB8 258D0008 */ addiu $t5, $t4, 8 -/* 0CDBBC 800CCFBC AFAF0000 */ sw $t7, ($sp) -/* 0CDBC0 800CCFC0 1420FFEF */ bnez $at, .L800CCF80 -/* 0CDBC4 800CCFC4 AFAD000C */ sw $t5, 0xc($sp) -.L800CCFC8: -/* 0CDBC8 800CCFC8 8FAA000C */ lw $t2, 0xc($sp) -/* 0CDBCC 800CCFCC 241900FE */ li $t9, 254 -/* 0CDBD0 800CCFD0 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CDBD4 800CCFD4 03E00008 */ jr $ra -/* 0CDBD8 800CCFD8 A1590000 */ sb $t9, ($t2) - -/* 0CDBDC 800CCFDC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0CD820/osContInit.s b/lib/asm/non_matchings/unknown_0CD820/osContInit.s deleted file mode 100644 index 57b210ea..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/osContInit.s +++ /dev/null @@ -1,132 +0,0 @@ -glabel osContInit -/* 0CD820 800CCC20 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0CD824 800CCC24 3C0E800E */ lui $t6, %hi(__osContinitialized) # $t6, 0x800e -/* 0CD828 800CCC28 8DCE38C0 */ lw $t6, %lo(__osContinitialized)($t6) -/* 0CD82C 800CCC2C AFBF0024 */ sw $ra, 0x24($sp) -/* 0CD830 800CCC30 AFA40080 */ sw $a0, 0x80($sp) -/* 0CD834 800CCC34 AFA50084 */ sw $a1, 0x84($sp) -/* 0CD838 800CCC38 AFA60088 */ sw $a2, 0x88($sp) -/* 0CD83C 800CCC3C 11C00003 */ beqz $t6, .L800CCC4C -/* 0CD840 800CCC40 AFA00078 */ sw $zero, 0x78($sp) -/* 0CD844 800CCC44 10000070 */ b .L800CCE08 -/* 0CD848 800CCC48 00001025 */ move $v0, $zero -.L800CCC4C: -/* 0CD84C 800CCC4C 240F0001 */ li $t7, 1 -/* 0CD850 800CCC50 3C01800E */ lui $at, %hi(__osContinitialized) # $at, 0x800e -/* 0CD854 800CCC54 0C03486C */ jal osGetTime -/* 0CD858 800CCC58 AC2F38C0 */ sw $t7, %lo(__osContinitialized)($at) -/* 0CD85C 800CCC5C 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 -/* 0CD860 800CCC60 3C06800E */ lui $a2, %hi(osClockRate) # $a2, 0x800e -/* 0CD864 800CCC64 3C07800E */ lui $a3, %hi(osClockRate+4) # $a3, 0x800e -/* 0CD868 800CCC68 AFA20070 */ sw $v0, 0x70($sp) -/* 0CD86C 800CCC6C AFA30074 */ sw $v1, 0x74($sp) -/* 0CD870 800CCC70 8CE738A4 */ lw $a3, %lo(osClockRate+4)($a3) -/* 0CD874 800CCC74 8CC638A0 */ lw $a2, %lo(osClockRate)($a2) -/* 0CD878 800CCC78 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 -/* 0CD87C 800CCC7C 0C033AF2 */ jal __ll_mul -/* 0CD880 800CCC80 24040000 */ li $a0, 0 -/* 0CD884 800CCC84 AFA20030 */ sw $v0, 0x30($sp) -/* 0CD888 800CCC88 AFA30034 */ sw $v1, 0x34($sp) -/* 0CD88C 800CCC8C 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0CD890 800CCC90 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0CD894 800CCC94 8FA50034 */ lw $a1, 0x34($sp) -/* 0CD898 800CCC98 8FA40030 */ lw $a0, 0x30($sp) -/* 0CD89C 800CCC9C 0C033AB2 */ jal __ull_div -/* 0CD8A0 800CCCA0 24060000 */ li $a2, 0 -/* 0CD8A4 800CCCA4 8FB80070 */ lw $t8, 0x70($sp) -/* 0CD8A8 800CCCA8 8FB90074 */ lw $t9, 0x74($sp) -/* 0CD8AC 800CCCAC 0058082B */ sltu $at, $v0, $t8 -/* 0CD8B0 800CCCB0 14200031 */ bnez $at, .L800CCD78 -/* 0CD8B4 800CCCB4 0302082B */ sltu $at, $t8, $v0 -/* 0CD8B8 800CCCB8 14200003 */ bnez $at, .L800CCCC8 -/* 0CD8BC 800CCCBC 0323082B */ sltu $at, $t9, $v1 -/* 0CD8C0 800CCCC0 1020002D */ beqz $at, .L800CCD78 -/* 0CD8C4 800CCCC4 00000000 */ nop -.L800CCCC8: -/* 0CD8C8 800CCCC8 27A40038 */ addiu $a0, $sp, 0x38 -/* 0CD8CC 800CCCCC 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CD8D0 800CCCD0 0C032208 */ jal osCreateMesgQueue -/* 0CD8D4 800CCCD4 24060001 */ li $a2, 1 -/* 0CD8D8 800CCCD8 3C050007 */ lui $a1, (0x0007A120 >> 16) # lui $a1, 7 -/* 0CD8DC 800CCCDC 3C06800E */ lui $a2, %hi(osClockRate) # $a2, 0x800e -/* 0CD8E0 800CCCE0 3C07800E */ lui $a3, %hi(osClockRate) # $a3, 0x800e -/* 0CD8E4 800CCCE4 8CE738A4 */ lw $a3, %lo(osClockRate+4)($a3) -/* 0CD8E8 800CCCE8 8CC638A0 */ lw $a2, %lo(osClockRate)($a2) -/* 0CD8EC 800CCCEC 34A5A120 */ ori $a1, (0x0007A120 & 0xFFFF) # ori $a1, $a1, 0xa120 -/* 0CD8F0 800CCCF0 0C033AF2 */ jal __ll_mul -/* 0CD8F4 800CCCF4 24040000 */ li $a0, 0 -/* 0CD8F8 800CCCF8 AFA20028 */ sw $v0, 0x28($sp) -/* 0CD8FC 800CCCFC AFA3002C */ sw $v1, 0x2c($sp) -/* 0CD900 800CCD00 3C07000F */ lui $a3, (0x000F4240 >> 16) # lui $a3, 0xf -/* 0CD904 800CCD04 34E74240 */ ori $a3, (0x000F4240 & 0xFFFF) # ori $a3, $a3, 0x4240 -/* 0CD908 800CCD08 8FA5002C */ lw $a1, 0x2c($sp) -/* 0CD90C 800CCD0C 8FA40028 */ lw $a0, 0x28($sp) -/* 0CD910 800CCD10 0C033AB2 */ jal __ull_div -/* 0CD914 800CCD14 24060000 */ li $a2, 0 -/* 0CD918 800CCD18 AFA20030 */ sw $v0, 0x30($sp) -/* 0CD91C 800CCD1C AFA30034 */ sw $v1, 0x34($sp) -/* 0CD920 800CCD20 8FA90034 */ lw $t1, 0x34($sp) -/* 0CD924 800CCD24 8FA80030 */ lw $t0, 0x30($sp) -/* 0CD928 800CCD28 8FAA0070 */ lw $t2, 0x70($sp) -/* 0CD92C 800CCD2C 8FAB0074 */ lw $t3, 0x74($sp) -/* 0CD930 800CCD30 240C0000 */ li $t4, 0 -/* 0CD934 800CCD34 240D0000 */ li $t5, 0 -/* 0CD938 800CCD38 27AE0038 */ addiu $t6, $sp, 0x38 -/* 0CD93C 800CCD3C 27AF007C */ addiu $t7, $sp, 0x7c -/* 0CD940 800CCD40 010A3023 */ subu $a2, $t0, $t2 -/* 0CD944 800CCD44 012B082B */ sltu $at, $t1, $t3 -/* 0CD948 800CCD48 00C13023 */ subu $a2, $a2, $at -/* 0CD94C 800CCD4C AFAF001C */ sw $t7, 0x1c($sp) -/* 0CD950 800CCD50 AFAE0018 */ sw $t6, 0x18($sp) -/* 0CD954 800CCD54 AFAD0014 */ sw $t5, 0x14($sp) -/* 0CD958 800CCD58 AFAC0010 */ sw $t4, 0x10($sp) -/* 0CD95C 800CCD5C 27A40050 */ addiu $a0, $sp, 0x50 -/* 0CD960 800CCD60 0C035378 */ jal osSetTimer -/* 0CD964 800CCD64 012B3823 */ subu $a3, $t1, $t3 -/* 0CD968 800CCD68 27A40038 */ addiu $a0, $sp, 0x38 -/* 0CD96C 800CCD6C 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CD970 800CCD70 0C0322EC */ jal osRecvMesg -/* 0CD974 800CCD74 24060001 */ li $a2, 1 -.L800CCD78: -/* 0CD978 800CCD78 24180004 */ li $t8, 4 -/* 0CD97C 800CCD7C 3C018013 */ lui $at, %hi(__osMaxControllers) # $at, 0x8013 -/* 0CD980 800CCD80 A038CD91 */ sb $t8, %lo(__osMaxControllers)($at) -/* 0CD984 800CCD84 0C0333BA */ jal __osPackRequestData -/* 0CD988 800CCD88 00002025 */ move $a0, $zero -/* 0CD98C 800CCD8C 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 -/* 0CD990 800CCD90 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 -/* 0CD994 800CCD94 0C0335B0 */ jal __osSiRawStartDma -/* 0CD998 800CCD98 24040001 */ li $a0, 1 -/* 0CD99C 800CCD9C AFA20078 */ sw $v0, 0x78($sp) -/* 0CD9A0 800CCDA0 8FA40080 */ lw $a0, 0x80($sp) -/* 0CD9A4 800CCDA4 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CD9A8 800CCDA8 0C0322EC */ jal osRecvMesg -/* 0CD9AC 800CCDAC 24060001 */ li $a2, 1 -/* 0CD9B0 800CCDB0 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 -/* 0CD9B4 800CCDB4 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 -/* 0CD9B8 800CCDB8 0C0335B0 */ jal __osSiRawStartDma -/* 0CD9BC 800CCDBC 00002025 */ move $a0, $zero -/* 0CD9C0 800CCDC0 AFA20078 */ sw $v0, 0x78($sp) -/* 0CD9C4 800CCDC4 8FA40080 */ lw $a0, 0x80($sp) -/* 0CD9C8 800CCDC8 27A5007C */ addiu $a1, $sp, 0x7c -/* 0CD9CC 800CCDCC 0C0322EC */ jal osRecvMesg -/* 0CD9D0 800CCDD0 24060001 */ li $a2, 1 -/* 0CD9D4 800CCDD4 8FA40084 */ lw $a0, 0x84($sp) -/* 0CD9D8 800CCDD8 0C033386 */ jal __osContGetInitData -/* 0CD9DC 800CCDDC 8FA50088 */ lw $a1, 0x88($sp) -/* 0CD9E0 800CCDE0 3C018013 */ lui $at, %hi(__osContLastCmd) # $at, 0x8013 -/* 0CD9E4 800CCDE4 0C033580 */ jal __osSiCreateAccessQueue -/* 0CD9E8 800CCDE8 A020CD90 */ sb $zero, %lo(__osContLastCmd)($at) -/* 0CD9EC 800CCDEC 3C048013 */ lui $a0, %hi(__osEepromTimerQ) # $a0, 0x8013 -/* 0CD9F0 800CCDF0 3C058013 */ lui $a1, %hi(__osEepromTimerMsg) # $a1, 0x8013 -/* 0CD9F4 800CCDF4 24A5CDD0 */ addiu $a1, %lo(__osEepromTimerMsg) # addiu $a1, $a1, -0x3230 -/* 0CD9F8 800CCDF8 2484CDB8 */ addiu $a0, %lo(__osEepromTimerQ) # addiu $a0, $a0, -0x3248 -/* 0CD9FC 800CCDFC 0C032208 */ jal osCreateMesgQueue -/* 0CDA00 800CCE00 24060001 */ li $a2, 1 -/* 0CDA04 800CCE04 8FA20078 */ lw $v0, 0x78($sp) -.L800CCE08: -/* 0CDA08 800CCE08 8FBF0024 */ lw $ra, 0x24($sp) -/* 0CDA0C 800CCE0C 27BD0080 */ addiu $sp, $sp, 0x80 -/* 0CDA10 800CCE10 03E00008 */ jr $ra -/* 0CDA14 800CCE14 00000000 */ nop - diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index feacb2bf..c3879f28 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -6,7 +6,9 @@ #include "libultra_internal.h" #include "controller.h" -#define HALF_A_SECOND OS_USEC_TO_CYCLES(500000) +#define HALF_MIL_CYLCES 500000U +#define ONE_MIL_CYLCES 1000000U +#define HALF_SECOND HALF_MIL_CYLCES * osClockRate / ONE_MIL_CYLCES u32 __osContinitialized = 0; OSPifRam __osContPifRam; @@ -15,29 +17,25 @@ u8 __osMaxControllers; OSTimer __osEepromTimer; OSMesgQueue __osEepromTimerQ; OSMesg __osEepromTimerMsg; -s32 D_8012CDD4[2]; //Padding? +s32 D_8012CDD4[2]; //Padding? Maybe osClockRate should be declared here? OSPifRam __osPfsPifRam; +extern OSTime osClockRate; -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContInit.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osContGetInitData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackRequestData.s") -#else s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data) { OSMesg dummy; - s32 ret; + u32 ret = 0; OSTime t; OSTimer mytimer; OSMesgQueue timerMesgQueue; - ret = 0; - if (__osContinitialized) + if (__osContinitialized) { return ret; + } __osContinitialized = TRUE; t = osGetTime(); - if (t < HALF_A_SECOND) { + if (HALF_SECOND > t) { osCreateMesgQueue(&timerMesgQueue, &dummy, 1); - osSetTimer(&mytimer, HALF_A_SECOND - t, 0, &timerMesgQueue, &dummy); + osSetTimer(&mytimer, HALF_SECOND - t, 0, &timerMesgQueue, &dummy); osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); } __osMaxControllers = MAXCONTROLLERS; @@ -48,10 +46,12 @@ s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data) { ret = __osSiRawStartDma(OS_READ, &__osContPifRam); osRecvMesg(mq, &dummy, OS_MESG_BLOCK); + __osContGetInitData(bitpattern, data); __osContLastCmd = CONT_CMD_REQUEST_STATUS; __osSiCreateAccessQueue(); osCreateMesgQueue(&__osEepromTimerQ, &__osEepromTimerMsg, 1); + return ret; } @@ -65,8 +65,7 @@ void __osContGetInitData(u8 *pattern, OSContStatus *data) { for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContRequesFormat), data++) { requestformat = *(__OSContRequesFormat *)ptr; data->errno = CHNL_ERR(requestformat); - if (data->errno == 0) - { + if (data->errno == 0) { data->type = (requestformat.typel << 8) | requestformat.typeh; data->status = requestformat.status; bits |= 1 << i; @@ -79,7 +78,7 @@ void __osPackRequestData(u8 cmd) { u8 *ptr; __OSContRequesFormat requestformat; int i; - for (i = 0; i < ARRLEN(__osContPifRam.ramarray); i++) { + for (i = 0; i <= ARRLEN(__osContPifRam.ramarray); i++) { __osContPifRam.ramarray[i] = 0; } __osContPifRam.pifstatus = CONT_CMD_EXE; @@ -97,6 +96,6 @@ void __osPackRequestData(u8 cmd) { *(__OSContRequesFormat *)ptr = requestformat; ptr += sizeof(__OSContRequesFormat); } + ptr[0] = CONT_CMD_END; } -#endif diff --git a/lib/src/os/osInitialize.c b/lib/src/os/osInitialize.c index dc6353db..aaec2656 100644 --- a/lib/src/os/osInitialize.c +++ b/lib/src/os/osInitialize.c @@ -15,7 +15,7 @@ typedef struct } __osExceptionVector; extern __osExceptionVector __osExceptionPreamble; -u64 osClockRate = OS_CLOCK_RATE; +OSTime osClockRate = OS_CLOCK_RATE; u32 __osShutdown = 0; u32 __OSGlobalIntMask = OS_IM_ALL; s32 D_800E38B0 = 0; // 64DD flag? (Hints from SM64 code) From 066b501cd1d52aff0dce93791f5c579017b9cb5a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 16:29:27 -0400 Subject: [PATCH 16/46] si lib functions matched --- include/PR/os_cont.h | 2 +- .../unknown_0CE200/__osSiCreateAccessQueue.s | 22 ------------- .../unknown_0CE200/__osSiGetAccess.s | 20 ----------- .../unknown_0CE200/__osSiRelAccess.s | 13 -------- lib/src/os/controller.c | 6 ++-- lib/src/os/unknown_0CE200.c | 33 +++++++++++++------ 6 files changed, 27 insertions(+), 69 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h index 7eee1f89..6e9c14f2 100644 --- a/include/PR/os_cont.h +++ b/include/PR/os_cont.h @@ -187,7 +187,7 @@ typedef struct { /* Controller interface */ -extern s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status); +extern s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data); extern s32 osContReset(OSMesgQueue *, OSContStatus *); extern s32 osContStartQuery(OSMesgQueue *); extern s32 osContStartReadData(OSMesgQueue *mq); diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s b/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s deleted file mode 100644 index d764dd04..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s +++ /dev/null @@ -1,22 +0,0 @@ -glabel __osSiCreateAccessQueue -/* 0CE200 800CD600 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CE204 800CD604 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE208 800CD608 240E0001 */ li $t6, 1 -/* 0CE20C 800CD60C 3C01800E */ lui $at, %hi(D_800E38D0) # $at, 0x800e -/* 0CE210 800CD610 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE214 800CD614 3C058013 */ lui $a1, %hi(D_8012CE20) # $a1, 0x8013 -/* 0CE218 800CD618 AC2E38D0 */ sw $t6, %lo(D_800E38D0)($at) -/* 0CE21C 800CD61C 24A5CE20 */ addiu $a1, %lo(D_8012CE20) # addiu $a1, $a1, -0x31e0 -/* 0CE220 800CD620 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE224 800CD624 0C032208 */ jal osCreateMesgQueue -/* 0CE228 800CD628 24060001 */ li $a2, 1 -/* 0CE22C 800CD62C 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE230 800CD630 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE234 800CD634 00002825 */ move $a1, $zero -/* 0CE238 800CD638 0C03238C */ jal osSendMesg -/* 0CE23C 800CD63C 00003025 */ move $a2, $zero -/* 0CE240 800CD640 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE244 800CD644 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CE248 800CD648 03E00008 */ jr $ra -/* 0CE24C 800CD64C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s b/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s deleted file mode 100644 index 67fc3e8d..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s +++ /dev/null @@ -1,20 +0,0 @@ -glabel __osSiGetAccess -/* 0CE250 800CD650 3C0E800E */ lui $t6, %hi(D_800E38D0) # $t6, 0x800e -/* 0CE254 800CD654 8DCE38D0 */ lw $t6, %lo(D_800E38D0)($t6) -/* 0CE258 800CD658 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CE25C 800CD65C AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE260 800CD660 15C00003 */ bnez $t6, .L800CD670 -/* 0CE264 800CD664 00000000 */ nop -/* 0CE268 800CD668 0C033580 */ jal __osSiCreateAccessQueue -/* 0CE26C 800CD66C 00000000 */ nop -.L800CD670: -/* 0CE270 800CD670 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE274 800CD674 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE278 800CD678 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CE27C 800CD67C 0C0322EC */ jal osRecvMesg -/* 0CE280 800CD680 24060001 */ li $a2, 1 -/* 0CE284 800CD684 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE288 800CD688 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CE28C 800CD68C 03E00008 */ jr $ra -/* 0CE290 800CD690 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s b/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s deleted file mode 100644 index 9478af5f..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s +++ /dev/null @@ -1,13 +0,0 @@ -glabel __osSiRelAccess -/* 0CE294 800CD694 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CE298 800CD698 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE29C 800CD69C 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE2A0 800CD6A0 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE2A4 800CD6A4 00002825 */ move $a1, $zero -/* 0CE2A8 800CD6A8 0C03238C */ jal osSendMesg -/* 0CE2AC 800CD6AC 00003025 */ move $a2, $zero -/* 0CE2B0 800CD6B0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE2B4 800CD6B4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CE2B8 800CD6B8 03E00008 */ jr $ra -/* 0CE2BC 800CD6BC 00000000 */ nop - diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index c3879f28..23108dec 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -8,7 +8,7 @@ #define HALF_MIL_CYLCES 500000U #define ONE_MIL_CYLCES 1000000U -#define HALF_SECOND HALF_MIL_CYLCES * osClockRate / ONE_MIL_CYLCES +#define HALF_A_SECOND HALF_MIL_CYLCES * osClockRate / ONE_MIL_CYLCES u32 __osContinitialized = 0; OSPifRam __osContPifRam; @@ -33,9 +33,9 @@ s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data) { } __osContinitialized = TRUE; t = osGetTime(); - if (HALF_SECOND > t) { + if (HALF_A_SECOND > t) { osCreateMesgQueue(&timerMesgQueue, &dummy, 1); - osSetTimer(&mytimer, HALF_SECOND - t, 0, &timerMesgQueue, &dummy); + osSetTimer(&mytimer, HALF_A_SECOND - t, 0, &timerMesgQueue, &dummy); osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); } __osMaxControllers = MAXCONTROLLERS; diff --git a/lib/src/os/unknown_0CE200.c b/lib/src/os/unknown_0CE200.c index b4c7853e..54ee0a5b 100644 --- a/lib/src/os/unknown_0CE200.c +++ b/lib/src/os/unknown_0CE200.c @@ -4,18 +4,18 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" +#include "controller.h" #include "src/memory.h" -s32 D_800E38D0 = 0; +u32 __osSiAccessQueueEnabled = 0; // Ok, so I completely gave up on the rest of these bss variables. // This is probably not the right place for them, but we can always // fix that later. - -s32 D_8012CE20[2]; -s32 D_8012CE28[6]; -s32 __osEepPifRam[15]; -s32 D_8012CE7C; //__osEepPifRam.pifstatus +#define SI_Q_BUF_LEN 1 +static OSMesg siAccessBuf[SI_Q_BUF_LEN]; +OSMesgQueue __osSiAccessQueue; +OSPifRam __osEepPifRam; s32 viThread[172]; s32 viEventQueue[6]; s32 viEventBuf[6]; @@ -25,7 +25,8 @@ u16 retrace; //Used in viMgrMain, but it's supposed to be static in that functio u16 D_8012D192; s32 D_8012D194[2]; s32 D_8012D1A0[16]; -s32 piAccessBuf[2]; //Should be static, but this works for now +#define PI_Q_BUF_LEN 1 +OSMesg piAccessBuf[PI_Q_BUF_LEN]; //Should be static, but this works for now s32 __osPiAccessQueue[6]; OSTimer D_8012D200; OSTime __osCurrentTime; @@ -36,7 +37,19 @@ u32 D_8012D234[2]; s32 D_8012D240[108]; MemoryPoolSlot *gMainMemoryPool; -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s") +void __osSiCreateAccessQueue(void) { + __osSiAccessQueueEnabled = 1; + osCreateMesgQueue(&__osSiAccessQueue, siAccessBuf, SI_Q_BUF_LEN); + osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); +} +void __osSiGetAccess(void) { + OSMesg dummyMesg; + if (!__osSiAccessQueueEnabled) + __osSiCreateAccessQueue(); + osRecvMesg(&__osSiAccessQueue, &dummyMesg, OS_MESG_BLOCK); +} +void __osSiRelAccess(void) { + osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); +} + GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s") From 7160c9d26c8cf560bfa6c9f26ea22627cfc73b72 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 16:35:51 -0400 Subject: [PATCH 17/46] Match __osSiRawStartDma --- lib/src/os/__osSiRawStartDma.c | 25 ++++++++++++++++++++++++ lib/src/os/{unknown_0CE200.c => siacs.c} | 4 ---- tools/python/generate_ld.py | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 lib/src/os/__osSiRawStartDma.c rename lib/src/os/{unknown_0CE200.c => siacs.c} (93%) diff --git a/lib/src/os/__osSiRawStartDma.c b/lib/src/os/__osSiRawStartDma.c new file mode 100644 index 00000000..08c8edff --- /dev/null +++ b/lib/src/os/__osSiRawStartDma.c @@ -0,0 +1,25 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CD6C0 */ + +#include "libultra_internal.h" +#include "src/memory.h" + +s32 __osSiRawStartDma(s32 direction, void *dramAddr) { + if (__osSiDeviceBusy()) + return -1; + + if (direction == OS_WRITE) + osWritebackDCache(dramAddr, 64); + + IO_WRITE(SI_DRAM_ADDR_REG, osVirtualToPhysical(dramAddr)); + + if (direction == OS_READ) + IO_WRITE(SI_PIF_ADDR_RD64B_REG, 0x1FC007C0); + else + IO_WRITE(SI_PIF_ADDR_WR64B_REG, 0x1FC007C0); + + if (direction == OS_READ) + osInvalDCache(dramAddr, 64); + + return 0; +} diff --git a/lib/src/os/unknown_0CE200.c b/lib/src/os/siacs.c similarity index 93% rename from lib/src/os/unknown_0CE200.c rename to lib/src/os/siacs.c index 54ee0a5b..8e68c366 100644 --- a/lib/src/os/unknown_0CE200.c +++ b/lib/src/os/siacs.c @@ -1,8 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800CD600 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" #include "controller.h" #include "src/memory.h" @@ -51,5 +49,3 @@ void __osSiGetAccess(void) { void __osSiRelAccess(void) { osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); } - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s") diff --git a/tools/python/generate_ld.py b/tools/python/generate_ld.py index 40ca0d77..9a4430b1 100644 --- a/tools/python/generate_ld.py +++ b/tools/python/generate_ld.py @@ -31,7 +31,7 @@ BSS_LIB_ORDER_FILES = [ BUILD_DIR + '/lib/src/os/osViMgr.o', BUILD_DIR + '/lib/src/os/osSetEventMesg.o', BUILD_DIR + '/lib/src/os/controller.o', - BUILD_DIR + '/lib/src/os/unknown_0CE200.o' + BUILD_DIR + '/lib/src/os/siacs.o' ] class GenerateLD: From da3f1e3971d3d7a5f1680ceea042647382c254b1 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 16:59:01 -0400 Subject: [PATCH 18/46] Match exception variables using libreultra --- lib/asm/exception/__osException.s | 20 ++++++++++---------- lib/src/os/__osSiRawStartDma.c | 2 +- lib/src/os/siacs.c | 2 +- src/thread30.c | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/asm/exception/__osException.s b/lib/asm/exception/__osException.s index 04603d60..c4fd0f2c 100644 --- a/lib/asm/exception/__osException.s +++ b/lib/asm/exception/__osException.s @@ -1,6 +1,6 @@ .section .rodata -glabel D_800E9670 +glabel __osIntOffTable .word 0x00141818 .word 0x1C1C1C1C .word 0x20202020 @@ -10,7 +10,7 @@ glabel D_800E9670 .word 0x10101010 .word 0x10101010 -glabel D_800E9690 +glabel __osIntTable .word .L800D3168 .word .L800D3130 .word .L800D3110 @@ -24,8 +24,8 @@ glabel D_800E9690 .section .text glabel __osException -/* 0D38C0 800D2CC0 3C1A8013 */ lui $k0, %hi(D_8012D240) # $k0, 0x8013 -/* 0D38C4 800D2CC4 275AD240 */ addiu $k0, %lo(D_8012D240) # addiu $k0, $k0, -0x2dc0 +/* 0D38C0 800D2CC0 3C1A8013 */ lui $k0, %hi(gInterruptedThread) # $k0, 0x8013 +/* 0D38C4 800D2CC4 275AD240 */ addiu $k0, %lo(gInterruptedThread) # addiu $k0, $k0, -0x2dc0 /* 0D38C8 800D2CC8 FF410020 */ sd $at, 0x20($k0) /* 0D38CC 800D2CCC 401B6000 */ mfc0 $k1, $12 /* 0D38D0 800D2CD0 AF5B0118 */ sw $k1, 0x118($k0) @@ -159,12 +159,12 @@ glabel __osException /* 0D3AC0 800D2EC0 00095202 */ srl $t2, $t1, 8 /* 0D3AC4 800D2EC4 214A0010 */ addi $t2, $t2, 0x10 .L800D2EC8: -/* 0D3AC8 800D2EC8 3C01800F */ lui $at, %hi(D_800E9670) # $at, 0x800f +/* 0D3AC8 800D2EC8 3C01800F */ lui $at, %hi(__osIntOffTable) # $at, 0x800f /* 0D3ACC 800D2ECC 002A0821 */ addu $at, $at, $t2 -/* 0D3AD0 800D2ED0 902A9670 */ lbu $t2, %lo(D_800E9670)($at) -/* 0D3AD4 800D2ED4 3C01800F */ lui $at, %hi(D_800E9690) # $at, 0x800f +/* 0D3AD0 800D2ED0 902A9670 */ lbu $t2, %lo(__osIntOffTable)($at) +/* 0D3AD4 800D2ED4 3C01800F */ lui $at, %hi(__osIntTable) # $at, 0x800f /* 0D3AD8 800D2ED8 002A0821 */ addu $at, $at, $t2 -/* 0D3ADC 800D2EDC 8C2A9690 */ lw $t2, %lo(D_800E9690)($at) +/* 0D3ADC 800D2EDC 8C2A9690 */ lw $t2, %lo(__osIntTable)($at) /* 0D3AE0 800D2EE0 01400008 */ jr $t2 /* 0D3AE4 800D2EE4 00000000 */ nop .L800D2EE8: @@ -191,8 +191,8 @@ glabel __osException /* 0D3B2C 800D2F2C 3C01800E */ lui $at, %hi(__osHwIntTable) # $at, 0x800e /* 0D3B30 800D2F30 002A0821 */ addu $at, $at, $t2 /* 0D3B34 800D2F34 8C2A48A0 */ lw $t2, %lo(__osHwIntTable)($at) -/* 0D3B38 800D2F38 3C1D8013 */ lui $sp, %hi(D_8012AAE0) # $sp, 0x8013 -/* 0D3B3C 800D2F3C 27BDAAE0 */ addiu $sp, %lo(D_8012AAE0) # addiu $sp, $sp, -0x5520 +/* 0D3B38 800D2F38 3C1D8013 */ lui $sp, %hi(leoDiskStack) # $sp, 0x8013 +/* 0D3B3C 800D2F3C 27BDAAE0 */ addiu $sp, %lo(leoDiskStack) # addiu $sp, $sp, -0x5520 /* 0D3B40 800D2F40 24040010 */ li $a0, 16 /* 0D3B44 800D2F44 11400007 */ beqz $t2, .L800D2F64 /* 0D3B48 800D2F48 27BD0FF0 */ addiu $sp, $sp, 0xff0 diff --git a/lib/src/os/__osSiRawStartDma.c b/lib/src/os/__osSiRawStartDma.c index 08c8edff..81ef2412 100644 --- a/lib/src/os/__osSiRawStartDma.c +++ b/lib/src/os/__osSiRawStartDma.c @@ -2,7 +2,7 @@ /* RAM_POS: 0x800CD6C0 */ #include "libultra_internal.h" -#include "src/memory.h" +#include "siint.h" s32 __osSiRawStartDma(s32 direction, void *dramAddr) { if (__osSiDeviceBusy()) diff --git a/lib/src/os/siacs.c b/lib/src/os/siacs.c index 8e68c366..00e5bb71 100644 --- a/lib/src/os/siacs.c +++ b/lib/src/os/siacs.c @@ -32,7 +32,7 @@ s32 __osBaseCounter; s32 __osViIntrCount; u32 __osTimerCounter; u32 D_8012D234[2]; -s32 D_8012D240[108]; +OSThread gInterruptedThread; MemoryPoolSlot *gMainMemoryPool; void __osSiCreateAccessQueue(void) { diff --git a/src/thread30.c b/src/thread30.c index 2683b629..4f995bc2 100644 --- a/src/thread30.c +++ b/src/thread30.c @@ -5,6 +5,7 @@ #include "macros.h" #include "libultra_internal.h" #include "unknown_06B2B0.h" +#include "stacks.h" /************ .data ************/ @@ -18,8 +19,7 @@ s32 gThread30LoadDelay = 0; /************ .bss ************/ // Used for __osException, but .bss file order is weird. Need to fix later. -s32 D_8012AAE0[4]; - +u8 leoDiskStack[16]; //technically should have a OS_LEO_STACKSIZE or something.. OSThread gThread30; OSMesgQueue gThread30MesgQueue; OSMesg gThread30Message; From fb820a0d492de4bbbc216eb563f24b0be58a0eee Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 17:09:24 -0400 Subject: [PATCH 19/46] Add clarifying comment on issue --- src/thread30.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/thread30.c b/src/thread30.c index 4f995bc2..ce032d69 100644 --- a/src/thread30.c +++ b/src/thread30.c @@ -19,7 +19,7 @@ s32 gThread30LoadDelay = 0; /************ .bss ************/ // Used for __osException, but .bss file order is weird. Need to fix later. -u8 leoDiskStack[16]; //technically should have a OS_LEO_STACKSIZE or something.. +u8 leoDiskStack[16]; //technically should have a OS_LEO_STACKSIZE or something. This is something like 4096 in libreultra... OSThread gThread30; OSMesgQueue gThread30MesgQueue; OSMesg gThread30Message; From c133bb4259ef507d054832dfb548efd57a0479c0 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 09:59:53 -0400 Subject: [PATCH 20/46] MAtch contreaddata funcs --- .../unknown_0CD820/__osPackReadData.s | 67 ------------------ .../unknown_0CD820/osContGetReadData.s | 47 ------------- .../unknown_0CD820/osContStartReadData.s | 53 --------------- lib/src/os/contramread.c | 2 +- lib/src/os/contramwrite.c | 2 +- lib/src/os/contreaddata.c | 68 ++++++++++++++++++- lib/src/os/osEepromRead.c | 2 +- lib/src/os/osEepromWrite.c | 4 +- 8 files changed, 70 insertions(+), 175 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s delete mode 100644 lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s delete mode 100644 lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s diff --git a/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s b/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s deleted file mode 100644 index 85ab93d0..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s +++ /dev/null @@ -1,67 +0,0 @@ -glabel __osPackReadData -/* 0CDD4C 800CD14C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDD50 800CD150 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 -/* 0CDD54 800CD154 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 -/* 0CDD58 800CD158 AFAE000C */ sw $t6, 0xc($sp) -/* 0CDD5C 800CD15C AFA00000 */ sw $zero, ($sp) -.L800CD160: -/* 0CDD60 800CD160 8FAF0000 */ lw $t7, ($sp) -/* 0CDD64 800CD164 8FB90000 */ lw $t9, ($sp) -/* 0CDD68 800CD168 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDD6C 800CD16C 000FC080 */ sll $t8, $t7, 2 -/* 0CDD70 800CD170 00380821 */ addu $at, $at, $t8 -/* 0CDD74 800CD174 AC20CD50 */ sw $zero, %lo(__osContPifRam)($at) -/* 0CDD78 800CD178 27280001 */ addiu $t0, $t9, 1 -/* 0CDD7C 800CD17C 29010010 */ slti $at, $t0, 0x10 -/* 0CDD80 800CD180 1420FFF7 */ bnez $at, .L800CD160 -/* 0CDD84 800CD184 AFA80000 */ sw $t0, ($sp) -/* 0CDD88 800CD188 3C198013 */ lui $t9, %hi(__osMaxControllers) # $t9, 0x8013 -/* 0CDD8C 800CD18C 9339CD91 */ lbu $t9, %lo(__osMaxControllers)($t9) -/* 0CDD90 800CD190 24090001 */ li $t1, 1 -/* 0CDD94 800CD194 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDD98 800CD198 240A00FF */ li $t2, 255 -/* 0CDD9C 800CD19C 240B0001 */ li $t3, 1 -/* 0CDDA0 800CD1A0 240C0004 */ li $t4, 4 -/* 0CDDA4 800CD1A4 240D0001 */ li $t5, 1 -/* 0CDDA8 800CD1A8 340EFFFF */ li $t6, 65535 -/* 0CDDAC 800CD1AC 240FFFFF */ li $t7, -1 -/* 0CDDB0 800CD1B0 2418FFFF */ li $t8, -1 -/* 0CDDB4 800CD1B4 AC29CD8C */ sw $t1, %lo(__osContPifRam+60)($at) -/* 0CDDB8 800CD1B8 A3AA0004 */ sb $t2, 4($sp) -/* 0CDDBC 800CD1BC A3AB0005 */ sb $t3, 5($sp) -/* 0CDDC0 800CD1C0 A3AC0006 */ sb $t4, 6($sp) -/* 0CDDC4 800CD1C4 A3AD0007 */ sb $t5, 7($sp) -/* 0CDDC8 800CD1C8 A7AE0008 */ sh $t6, 8($sp) -/* 0CDDCC 800CD1CC A3AF000A */ sb $t7, 0xa($sp) -/* 0CDDD0 800CD1D0 A3B8000B */ sb $t8, 0xb($sp) -/* 0CDDD4 800CD1D4 1B200013 */ blez $t9, .L800CD224 -/* 0CDDD8 800CD1D8 AFA00000 */ sw $zero, ($sp) -.L800CD1DC: -/* 0CDDDC 800CD1DC 27A90004 */ addiu $t1, $sp, 4 -/* 0CDDE0 800CD1E0 8D210000 */ lw $at, ($t1) -/* 0CDDE4 800CD1E4 8FA8000C */ lw $t0, 0xc($sp) -/* 0CDDE8 800CD1E8 3C188013 */ lui $t8, %hi(__osMaxControllers) # $t8, 0x8013 -/* 0CDDEC 800CD1EC A9010000 */ swl $at, ($t0) -/* 0CDDF0 800CD1F0 B9010003 */ swr $at, 3($t0) -/* 0CDDF4 800CD1F4 8D2B0004 */ lw $t3, 4($t1) -/* 0CDDF8 800CD1F8 A90B0004 */ swl $t3, 4($t0) -/* 0CDDFC 800CD1FC B90B0007 */ swr $t3, 7($t0) -/* 0CDE00 800CD200 8FAE0000 */ lw $t6, ($sp) -/* 0CDE04 800CD204 9318CD91 */ lbu $t8, %lo(__osMaxControllers)($t8) -/* 0CDE08 800CD208 8FAC000C */ lw $t4, 0xc($sp) -/* 0CDE0C 800CD20C 25CF0001 */ addiu $t7, $t6, 1 -/* 0CDE10 800CD210 01F8082A */ slt $at, $t7, $t8 -/* 0CDE14 800CD214 258D0008 */ addiu $t5, $t4, 8 -/* 0CDE18 800CD218 AFAF0000 */ sw $t7, ($sp) -/* 0CDE1C 800CD21C 1420FFEF */ bnez $at, .L800CD1DC -/* 0CDE20 800CD220 AFAD000C */ sw $t5, 0xc($sp) -.L800CD224: -/* 0CDE24 800CD224 8FAA000C */ lw $t2, 0xc($sp) -/* 0CDE28 800CD228 241900FE */ li $t9, 254 -/* 0CDE2C 800CD22C 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0CDE30 800CD230 03E00008 */ jr $ra -/* 0CDE34 800CD234 A1590000 */ sb $t9, ($t2) - -/* 0CDE38 800CD238 00000000 */ nop -/* 0CDE3C 800CD23C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s b/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s deleted file mode 100644 index 9614abeb..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s +++ /dev/null @@ -1,47 +0,0 @@ -glabel osContGetReadData -/* 0CDCA4 800CD0A4 3C0F8013 */ lui $t7, %hi(__osMaxControllers) # $t7, 0x8013 -/* 0CDCA8 800CD0A8 91EFCD91 */ lbu $t7, %lo(__osMaxControllers)($t7) -/* 0CDCAC 800CD0AC 3C0E8013 */ lui $t6, %hi(__osContPifRam) # $t6, 0x8013 -/* 0CDCB0 800CD0B0 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0CDCB4 800CD0B4 25CECD50 */ addiu $t6, %lo(__osContPifRam) # addiu $t6, $t6, -0x32b0 -/* 0CDCB8 800CD0B8 AFAE000C */ sw $t6, 0xc($sp) -/* 0CDCBC 800CD0BC 19E00021 */ blez $t7, .L800CD144 -/* 0CDCC0 800CD0C0 AFA00000 */ sw $zero, ($sp) -.L800CD0C4: -/* 0CDCC4 800CD0C4 8FB9000C */ lw $t9, 0xc($sp) -/* 0CDCC8 800CD0C8 27B80004 */ addiu $t8, $sp, 4 -/* 0CDCCC 800CD0CC 8B210000 */ lwl $at, ($t9) -/* 0CDCD0 800CD0D0 9B210003 */ lwr $at, 3($t9) -/* 0CDCD4 800CD0D4 AF010000 */ sw $at, ($t8) -/* 0CDCD8 800CD0D8 8B290004 */ lwl $t1, 4($t9) -/* 0CDCDC 800CD0DC 9B290007 */ lwr $t1, 7($t9) -/* 0CDCE0 800CD0E0 AF090004 */ sw $t1, 4($t8) -/* 0CDCE4 800CD0E4 93AA0006 */ lbu $t2, 6($sp) -/* 0CDCE8 800CD0E8 314B00C0 */ andi $t3, $t2, 0xc0 -/* 0CDCEC 800CD0EC 000B6103 */ sra $t4, $t3, 4 -/* 0CDCF0 800CD0F0 A08C0004 */ sb $t4, 4($a0) -/* 0CDCF4 800CD0F4 908D0004 */ lbu $t5, 4($a0) -/* 0CDCF8 800CD0F8 15A00007 */ bnez $t5, .L800CD118 -/* 0CDCFC 800CD0FC 00000000 */ nop -/* 0CDD00 800CD100 97AE0008 */ lhu $t6, 8($sp) -/* 0CDD04 800CD104 A48E0000 */ sh $t6, ($a0) -/* 0CDD08 800CD108 83AF000A */ lb $t7, 0xa($sp) -/* 0CDD0C 800CD10C A08F0002 */ sb $t7, 2($a0) -/* 0CDD10 800CD110 83A8000B */ lb $t0, 0xb($sp) -/* 0CDD14 800CD114 A0880003 */ sb $t0, 3($a0) -.L800CD118: -/* 0CDD18 800CD118 8FB80000 */ lw $t8, ($sp) -/* 0CDD1C 800CD11C 3C0B8013 */ lui $t3, %hi(__osMaxControllers) # $t3, 0x8013 -/* 0CDD20 800CD120 916BCD91 */ lbu $t3, %lo(__osMaxControllers)($t3) -/* 0CDD24 800CD124 8FA9000C */ lw $t1, 0xc($sp) -/* 0CDD28 800CD128 27190001 */ addiu $t9, $t8, 1 -/* 0CDD2C 800CD12C 032B082A */ slt $at, $t9, $t3 -/* 0CDD30 800CD130 252A0008 */ addiu $t2, $t1, 8 -/* 0CDD34 800CD134 AFAA000C */ sw $t2, 0xc($sp) -/* 0CDD38 800CD138 AFB90000 */ sw $t9, ($sp) -/* 0CDD3C 800CD13C 1420FFE1 */ bnez $at, .L800CD0C4 -/* 0CDD40 800CD140 24840006 */ addiu $a0, $a0, 6 -.L800CD144: -/* 0CDD44 800CD144 03E00008 */ jr $ra -/* 0CDD48 800CD148 27BD0010 */ addiu $sp, $sp, 0x10 - diff --git a/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s b/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s deleted file mode 100644 index 2dbdf980..00000000 --- a/lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s +++ /dev/null @@ -1,53 +0,0 @@ -glabel osContStartReadData -/* 0CDBE0 800CCFE0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CDBE4 800CCFE4 AFBF0014 */ sw $ra, 0x14($sp) -/* 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(__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 -/* 0CDC08 800CD008 0C033453 */ jal __osPackReadData -/* 0CDC0C 800CD00C 00000000 */ nop -/* 0CDC10 800CD010 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 -/* 0CDC14 800CD014 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 -/* 0CDC18 800CD018 0C0335B0 */ jal __osSiRawStartDma -/* 0CDC1C 800CD01C 24040001 */ li $a0, 1 -/* 0CDC20 800CD020 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CDC24 800CD024 8FA40020 */ lw $a0, 0x20($sp) -/* 0CDC28 800CD028 00002825 */ move $a1, $zero -/* 0CDC2C 800CD02C 0C0322EC */ jal osRecvMesg -/* 0CDC30 800CD030 24060001 */ li $a2, 1 -.L800CD034: -/* 0CDC34 800CD034 AFA00018 */ sw $zero, 0x18($sp) -.L800CD038: -/* 0CDC38 800CD038 8FB80018 */ lw $t8, 0x18($sp) -/* 0CDC3C 800CD03C 8FA80018 */ lw $t0, 0x18($sp) -/* 0CDC40 800CD040 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDC44 800CD044 0018C880 */ sll $t9, $t8, 2 -/* 0CDC48 800CD048 00390821 */ addu $at, $at, $t9 -/* 0CDC4C 800CD04C 240F00FF */ li $t7, 255 -/* 0CDC50 800CD050 AC2FCD50 */ sw $t7, %lo(__osContPifRam)($at) -/* 0CDC54 800CD054 25090001 */ addiu $t1, $t0, 1 -/* 0CDC58 800CD058 29210010 */ slti $at, $t1, 0x10 -/* 0CDC5C 800CD05C 1420FFF6 */ bnez $at, .L800CD038 -/* 0CDC60 800CD060 AFA90018 */ sw $t1, 0x18($sp) -/* 0CDC64 800CD064 3C018013 */ lui $at, %hi(__osContPifRam) # $at, 0x8013 -/* 0CDC68 800CD068 3C058013 */ lui $a1, %hi(__osContPifRam) # $a1, 0x8013 -/* 0CDC6C 800CD06C AC20CD8C */ sw $zero, %lo(__osContPifRam+60)($at) -/* 0CDC70 800CD070 24A5CD50 */ addiu $a1, %lo(__osContPifRam) # addiu $a1, $a1, -0x32b0 -/* 0CDC74 800CD074 0C0335B0 */ jal __osSiRawStartDma -/* 0CDC78 800CD078 00002025 */ move $a0, $zero -/* 0CDC7C 800CD07C 240A0001 */ li $t2, 1 -/* 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(__osContLastCmd)($at) -/* 0CDC90 800CD090 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CDC94 800CD094 8FA2001C */ lw $v0, 0x1c($sp) -/* 0CDC98 800CD098 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CDC9C 800CD09C 03E00008 */ jr $ra -/* 0CDCA0 800CD0A0 00000000 */ nop - diff --git a/lib/src/os/contramread.c b/lib/src/os/contramread.c index 28c41d94..872a93c7 100644 --- a/lib/src/os/contramread.c +++ b/lib/src/os/contramread.c @@ -24,7 +24,7 @@ s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus __osPfsPifRam.ramarray[i] = 0xFFU; } - __osPfsPifRam.pifstatus = 0; + __osPfsPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; diff --git a/lib/src/os/contramwrite.c b/lib/src/os/contramwrite.c index 8bae742b..0462d816 100644 --- a/lib/src/os/contramwrite.c +++ b/lib/src/os/contramwrite.c @@ -28,7 +28,7 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus __osPfsPifRam.ramarray[i] = 0xFFU; } - __osPfsPifRam.pifstatus = 0; + __osPfsPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); ptr = (u8 *)&__osPfsPifRam; diff --git a/lib/src/os/contreaddata.c b/lib/src/os/contreaddata.c index daa3003a..717e1e62 100644 --- a/lib/src/os/contreaddata.c +++ b/lib/src/os/contreaddata.c @@ -6,6 +6,68 @@ #include "libultra_internal.h" #include "controller.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContStartReadData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/osContGetReadData.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CD820/__osPackReadData.s") +static void __osPackReadData(void); +s32 osContStartReadData(OSMesgQueue *mq) { + s32 ret; + int i; + + ret = 0; + __osSiGetAccess(); + + if (__osContLastCmd != CONT_CMD_READ_BUTTON) { + __osPackReadData(); + ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + } + + for (i = 0; i <= ARRLEN(__osContPifRam.ramarray); i++) { + __osContPifRam.ramarray[i] = 255; + } + + __osContPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; + ret = __osSiRawStartDma(OS_READ, &__osContPifRam); + + __osContLastCmd = CONT_CMD_READ_BUTTON; + __osSiRelAccess(); + return ret; +} + +void osContGetReadData(OSContPad *data) { + u8 *ptr; + __OSContReadFormat readformat; + int i; + ptr = (u8 *)&__osContPifRam.ramarray; + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContReadFormat), data++) { + readformat = *(__OSContReadFormat *)ptr; + data->errno = CHNL_ERR(readformat); + if (data->errno == 0) { + data->button = readformat.button; + data->stick_x = readformat.stick_x; + data->stick_y = readformat.stick_y; + } + } +} + +static void __osPackReadData(void) { + u8 *ptr; + __OSContReadFormat readformat; + int i; + + ptr = (u8*)&__osContPifRam.ramarray; + for (i = 0; i <= ARRLEN(__osContPifRam.ramarray); i++) { + __osContPifRam.ramarray[i] = 0; + } + __osContPifRam.pifstatus = CONT_CMD_EXE; + readformat.dummy = CONT_CMD_NOP; + readformat.txsize = CONT_CMD_READ_BUTTON_TX; + readformat.rxsize = CONT_CMD_READ_BUTTON_RX; + readformat.cmd = CONT_CMD_READ_BUTTON; + readformat.button = -1; + readformat.stick_x = -1; + readformat.stick_y = -1; + for(i=0; i < __osMaxControllers; i++) { + *(__OSContReadFormat*)ptr = readformat; + ptr += sizeof(__OSContReadFormat); + } + *ptr = CONT_CMD_END; +} diff --git a/lib/src/os/osEepromRead.c b/lib/src/os/osEepromRead.c index c5856877..7aec2526 100644 --- a/lib/src/os/osEepromRead.c +++ b/lib/src/os/osEepromRead.c @@ -46,7 +46,7 @@ s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { __osEepPifRam.ramarray[i] = CONT_CMD_NOP; } - __osEepPifRam.pifstatus = 0; + __osEepPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; ret = __osSiRawStartDma(OS_READ, __osEepPifRam.ramarray); diff --git a/lib/src/os/osEepromWrite.c b/lib/src/os/osEepromWrite.c index a9884f24..a7d902ad 100644 --- a/lib/src/os/osEepromWrite.c +++ b/lib/src/os/osEepromWrite.c @@ -36,11 +36,11 @@ s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); //send command to pif osRecvMesg(mq, NULL, OS_MESG_BLOCK); - for (i = 0; i < 0x10; i++) { + for (i = 0; i <= ARRLEN(__osEepPifRam.ramarray); i++) { __osEepPifRam.ramarray[i] = 255; } - __osEepPifRam.pifstatus = 0; + __osEepPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); //recv response __osContLastCmd = CONT_CMD_WRITE_EEPROM; osRecvMesg(mq, NULL, OS_MESG_BLOCK); From bec3f1a8ec86851571c30e1167de8cf008d59aea Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 20:14:32 -0400 Subject: [PATCH 21/46] Matched two more os funcs, and cleaned up some hardcoded values with constants --- .../unknown_0D3020/osDestroyThread.s | 73 ------------------- .../unknown_0D3020/osYieldThread.s | 22 ------ lib/src/os/contreaddata.c | 2 +- lib/src/os/osDestroyThread.c | 42 +++++++++++ lib/src/os/osEepromProbe.c | 2 +- lib/src/os/osEepromRead.c | 6 +- lib/src/os/osEepromWrite.c | 20 +++-- lib/src/os/osMotor.c | 26 ++++--- lib/src/os/osPfsFreeBlocks.c | 2 +- lib/src/os/osPiStartDma.c | 11 +-- lib/src/os/osYieldThread.c | 19 +++++ lib/src/os/osint.h | 46 ++++++++++++ lib/src/os/siacs.c | 2 + lib/src/os/unknown_0D6C90.c | 11 --- src/memory.c | 4 +- 15 files changed, 145 insertions(+), 143 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D3020/osDestroyThread.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/osYieldThread.s create mode 100644 lib/src/os/osDestroyThread.c create mode 100644 lib/src/os/osYieldThread.c create mode 100644 lib/src/os/osint.h diff --git a/lib/asm/non_matchings/unknown_0D3020/osDestroyThread.s b/lib/asm/non_matchings/unknown_0D3020/osDestroyThread.s deleted file mode 100644 index da5d72c4..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/osDestroyThread.s +++ /dev/null @@ -1,73 +0,0 @@ -glabel osDestroyThread -/* 0D7200 800D6600 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0D7204 800D6604 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D7208 800D6608 AFA40038 */ sw $a0, 0x38($sp) -/* 0D720C 800D660C AFB20020 */ sw $s2, 0x20($sp) -/* 0D7210 800D6610 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D7214 800D6614 0C034958 */ jal __osDisableInt -/* 0D7218 800D6618 AFB00018 */ sw $s0, 0x18($sp) -/* 0D721C 800D661C 8FAE0038 */ lw $t6, 0x38($sp) -/* 0D7220 800D6620 00408025 */ move $s0, $v0 -/* 0D7224 800D6624 15C00005 */ bnez $t6, .L800D663C -/* 0D7228 800D6628 00000000 */ nop -/* 0D722C 800D662C 3C0F800E */ lui $t7, %hi(__osRunningThread) # $t7, 0x800e -/* 0D7230 800D6630 8DEF4890 */ lw $t7, %lo(__osRunningThread)($t7) -/* 0D7234 800D6634 10000009 */ b .L800D665C -/* 0D7238 800D6638 AFAF0038 */ sw $t7, 0x38($sp) -.L800D663C: -/* 0D723C 800D663C 8FB80038 */ lw $t8, 0x38($sp) -/* 0D7240 800D6640 24010001 */ li $at, 1 -/* 0D7244 800D6644 97190010 */ lhu $t9, 0x10($t8) -/* 0D7248 800D6648 13210004 */ beq $t9, $at, .L800D665C -/* 0D724C 800D664C 00000000 */ nop -/* 0D7250 800D6650 8F040008 */ lw $a0, 8($t8) -/* 0D7254 800D6654 0C034B1C */ jal __osDequeueThread -/* 0D7258 800D6658 03002825 */ move $a1, $t8 -.L800D665C: -/* 0D725C 800D665C 3C08800E */ lui $t0, %hi(__osActiveQueue) # $t0, 0x800e -/* 0D7260 800D6660 8D08488C */ lw $t0, %lo(__osActiveQueue)($t0) -/* 0D7264 800D6664 8FA90038 */ lw $t1, 0x38($sp) -/* 0D7268 800D6668 15090005 */ bne $t0, $t1, .L800D6680 -/* 0D726C 800D666C 00000000 */ nop -/* 0D7270 800D6670 8D0A000C */ lw $t2, 0xc($t0) -/* 0D7274 800D6674 3C01800E */ lui $at, %hi(__osActiveQueue) # $at, 0x800e -/* 0D7278 800D6678 10000010 */ b .L800D66BC -/* 0D727C 800D667C AC2A488C */ sw $t2, %lo(__osActiveQueue)($at) -.L800D6680: -/* 0D7280 800D6680 3C11800E */ lui $s1, %hi(__osActiveQueue) # $s1, 0x800e -/* 0D7284 800D6684 8E31488C */ lw $s1, %lo(__osActiveQueue)($s1) -/* 0D7288 800D6688 8E32000C */ lw $s2, 0xc($s1) -/* 0D728C 800D668C 1240000B */ beqz $s2, .L800D66BC -/* 0D7290 800D6690 00000000 */ nop -.L800D6694: -/* 0D7294 800D6694 8FAB0038 */ lw $t3, 0x38($sp) -/* 0D7298 800D6698 164B0004 */ bne $s2, $t3, .L800D66AC -/* 0D729C 800D669C 00000000 */ nop -/* 0D72A0 800D66A0 8D6C000C */ lw $t4, 0xc($t3) -/* 0D72A4 800D66A4 10000005 */ b .L800D66BC -/* 0D72A8 800D66A8 AE2C000C */ sw $t4, 0xc($s1) -.L800D66AC: -/* 0D72AC 800D66AC 02408825 */ move $s1, $s2 -/* 0D72B0 800D66B0 8E32000C */ lw $s2, 0xc($s1) -/* 0D72B4 800D66B4 1640FFF7 */ bnez $s2, .L800D6694 -/* 0D72B8 800D66B8 00000000 */ nop -.L800D66BC: -/* 0D72BC 800D66BC 3C0E800E */ lui $t6, %hi(__osRunningThread) # $t6, 0x800e -/* 0D72C0 800D66C0 8DCE4890 */ lw $t6, %lo(__osRunningThread)($t6) -/* 0D72C4 800D66C4 8FAD0038 */ lw $t5, 0x38($sp) -/* 0D72C8 800D66C8 15AE0003 */ bne $t5, $t6, .L800D66D8 -/* 0D72CC 800D66CC 00000000 */ nop -/* 0D72D0 800D66D0 0C034D09 */ jal __osDispatchThread -/* 0D72D4 800D66D4 00000000 */ nop -.L800D66D8: -/* 0D72D8 800D66D8 0C034960 */ jal __osRestoreInt -/* 0D72DC 800D66DC 02002025 */ move $a0, $s0 -/* 0D72E0 800D66E0 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D72E4 800D66E4 8FB00018 */ lw $s0, 0x18($sp) -/* 0D72E8 800D66E8 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D72EC 800D66EC 8FB20020 */ lw $s2, 0x20($sp) -/* 0D72F0 800D66F0 03E00008 */ jr $ra -/* 0D72F4 800D66F4 27BD0038 */ addiu $sp, $sp, 0x38 - -/* 0D72F8 800D66F8 00000000 */ nop -/* 0D72FC 800D66FC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/osYieldThread.s b/lib/asm/non_matchings/unknown_0D3020/osYieldThread.s deleted file mode 100644 index c3469326..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/osYieldThread.s +++ /dev/null @@ -1,22 +0,0 @@ -glabel osYieldThread -/* 0D71B0 800D65B0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D71B4 800D65B4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D71B8 800D65B8 0C034958 */ jal __osDisableInt -/* 0D71BC 800D65BC AFB00018 */ sw $s0, 0x18($sp) -/* 0D71C0 800D65C0 3C0F800E */ lui $t7, %hi(__osRunningThread) # $t7, 0x800e -/* 0D71C4 800D65C4 8DEF4890 */ lw $t7, %lo(__osRunningThread)($t7) -/* 0D71C8 800D65C8 240E0002 */ li $t6, 2 -/* 0D71CC 800D65CC 3C04800E */ lui $a0, %hi(__osRunQueue) # $a0, 0x800e -/* 0D71D0 800D65D0 00408025 */ move $s0, $v0 -/* 0D71D4 800D65D4 24844888 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x4888 -/* 0D71D8 800D65D8 0C034CB3 */ jal __osEnqueueAndYield -/* 0D71DC 800D65DC A5EE0010 */ sh $t6, 0x10($t7) -/* 0D71E0 800D65E0 0C034960 */ jal __osRestoreInt -/* 0D71E4 800D65E4 02002025 */ move $a0, $s0 -/* 0D71E8 800D65E8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D71EC 800D65EC 8FB00018 */ lw $s0, 0x18($sp) -/* 0D71F0 800D65F0 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D71F4 800D65F4 03E00008 */ jr $ra -/* 0D71F8 800D65F8 00000000 */ nop - -/* 0D71FC 800D65FC 00000000 */ nop diff --git a/lib/src/os/contreaddata.c b/lib/src/os/contreaddata.c index 717e1e62..4d7ced8e 100644 --- a/lib/src/os/contreaddata.c +++ b/lib/src/os/contreaddata.c @@ -21,7 +21,7 @@ s32 osContStartReadData(OSMesgQueue *mq) { } for (i = 0; i <= ARRLEN(__osContPifRam.ramarray); i++) { - __osContPifRam.ramarray[i] = 255; + __osContPifRam.ramarray[i] = CONT_CMD_RESET; } __osContPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; diff --git a/lib/src/os/osDestroyThread.c b/lib/src/os/osDestroyThread.c new file mode 100644 index 00000000..a7b98d01 --- /dev/null +++ b/lib/src/os/osDestroyThread.c @@ -0,0 +1,42 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D6600 */ + +#include "macros.h" +#include "libultra_internal.h" +#include "osint.h" + +void osDestroyThread(OSThread *t) { + register u32 saveMask; + register OSThread *pred; + register OSThread *succ; + + saveMask = __osDisableInt(); + + if (t == NULL) { + t = __osRunningThread; + } else if (t->state != OS_STATE_STOPPED) { + __osDequeueThread(t->queue, t); + } + + if (__osActiveQueue == t) { + __osActiveQueue = __osActiveQueue->tlnext; + } else { + pred = __osActiveQueue; + succ = pred->tlnext; + while (succ != NULL) { + if (succ == t) { + pred->tlnext = t->tlnext; + break; + } + + pred = succ; + succ = pred->tlnext; + } + } + + if (t == __osRunningThread) { + __osDispatchThread(); + } + + __osRestoreInt(saveMask); +} diff --git a/lib/src/os/osEepromProbe.c b/lib/src/os/osEepromProbe.c index ab4ca30a..20c176c0 100644 --- a/lib/src/os/osEepromProbe.c +++ b/lib/src/os/osEepromProbe.c @@ -12,7 +12,7 @@ s32 osEepromProbe(OSMesgQueue *mq) { __osSiGetAccess(); ret = __osEepStatus(mq, &sdata); if (ret == 0 && (sdata.type & CONT_EEPROM) != 0) { - ret = 1; + ret = EEPROM_TYPE_4K; } else { ret = 0; } diff --git a/lib/src/os/osEepromRead.c b/lib/src/os/osEepromRead.c index 7aec2526..69077d33 100644 --- a/lib/src/os/osEepromRead.c +++ b/lib/src/os/osEepromRead.c @@ -23,7 +23,7 @@ s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { i = 0; ptr = (u8 *)&__osEepPifRam.ramarray; - if (address > 0x40) { + if (address > EEPROM_MAXBLOCKS) { return -1; } @@ -54,7 +54,7 @@ s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { osRecvMesg(mq, NULL, OS_MESG_BLOCK); //skip the first 4 bytes - for (i = 0; i < 4; i++) { + for (i = 0; i < MAXCONTROLLERS; i++) { ptr++; } @@ -92,7 +92,7 @@ s32 __osPackEepReadData(u8 address) { eepromformat.data[i] = 0; } //skip the first 4 bytes - for (i = 0; i < 4; i++) { + for (i = 0; i < MAXCONTROLLERS; i++) { *ptr++ = 0; } *(__OSContEepromFormat *)ptr = eepromformat; diff --git a/lib/src/os/osEepromWrite.c b/lib/src/os/osEepromWrite.c index a7d902ad..94288775 100644 --- a/lib/src/os/osEepromWrite.c +++ b/lib/src/os/osEepromWrite.c @@ -16,16 +16,14 @@ s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { ret = 0; ptr = (u8 *)&__osEepPifRam.ramarray; - - if (address > 0x40) - { + + if (address > EEPROM_MAXBLOCKS) { return -1; } - + __osSiGetAccess(); ret = __osEepStatus(mq, &sdata); - if (ret != 0 || sdata.type != CONT_EEPROM) { return CONT_NO_RESPONSE_ERROR; } @@ -35,17 +33,17 @@ s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { __osPackEepWriteData(address, buffer); ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); //send command to pif osRecvMesg(mq, NULL, OS_MESG_BLOCK); - + for (i = 0; i <= ARRLEN(__osEepPifRam.ramarray); i++) { __osEepPifRam.ramarray[i] = 255; } - + __osEepPifRam.pifstatus = CONT_CMD_REQUEST_STATUS; ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); //recv response __osContLastCmd = CONT_CMD_WRITE_EEPROM; osRecvMesg(mq, NULL, OS_MESG_BLOCK); //skip the first 4 bytes - for (i = 0; i < 4; i++) { + for (i = 0; i < MAXCONTROLLERS; i++) { ptr++; } eepromformat = *(__OSContEepromFormat *)ptr; @@ -75,7 +73,7 @@ void __osPackEepWriteData(u8 address, u8 *buffer) { eepromformat.data[i] = *buffer++; } //skip the first 4 bytes - for (i = 0; i < 4; i++) { + for (i = 0; i < MAXCONTROLLERS; i++) { *ptr++ = 0; } *(__OSContEepromFormat *)(ptr) = eepromformat; @@ -96,7 +94,7 @@ s32 __osEepStatus(OSMesgQueue *mq, OSContStatus *data) { } __osEepPifRam.pifstatus = CONT_CMD_EXE; ptr = (u8 *)__osEepPifRam.ramarray; - for (i = 0; i < 4; i++) //zero 4 bytes? + for (i = 0; i < MAXCONTROLLERS; i++) //zero 4 bytes? *ptr++ = 0; requestformat.dummy = CONT_CMD_NOP; requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX; @@ -120,7 +118,7 @@ s32 __osEepStatus(OSMesgQueue *mq, OSContStatus *data) { return ret; ptr = (u8 *)&__osEepPifRam; - for (i = 0; i < 4; i++) + for (i = 0; i < MAXCONTROLLERS; i++) *ptr++ = 0; requestformat = *(__OSContRequesFormat *)ptr; diff --git a/lib/src/os/osMotor.c b/lib/src/os/osMotor.c index 454d5884..4056ed14 100644 --- a/lib/src/os/osMotor.c +++ b/lib/src/os/osMotor.c @@ -5,12 +5,16 @@ #include "controller.h" #include "siint.h" +#define MOTOR_RAM_ADDRESS 0x400 +#define MOTOR_DATA_ADDRESS 0x600 +#define MOTOR_DEFAULT_BANK 128 + static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata); //TODO: These should really be declared here instead of somewhere else extern OSPifRam _MotorStopData[MAXCONTROLLERS]; extern OSPifRam _MotorStartData[MAXCONTROLLERS]; -extern u8 _motorstopbuf[32]; -extern u8 _motorstartbuf[32]; +extern u8 _motorstopbuf[BLOCKSIZE]; +extern u8 _motorstartbuf[BLOCKSIZE]; s32 osMotorStop(OSPfs *pfs) { int i; s32 ret; @@ -97,29 +101,29 @@ static void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { int i; s32 ret; - u8 temp[32]; + u8 temp[BLOCKSIZE]; pfs->queue = mq; pfs->channel = channel; pfs->status = 0; - pfs->activebank = 128; + pfs->activebank = MOTOR_DEFAULT_BANK; for (i = 0; i < ARRLEN(temp); i++) - temp[i] = 128; + temp[i] = MOTOR_DEFAULT_BANK; - ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + ret = __osContRamWrite(mq, channel, MOTOR_RAM_ADDRESS, temp, FALSE); if (ret == PFS_ERR_NEW_PACK) - ret = __osContRamWrite(mq, channel, 1024, temp, FALSE); + ret = __osContRamWrite(mq, channel, MOTOR_RAM_ADDRESS, temp, FALSE); if (ret != 0) return ret; - ret = __osContRamRead(mq, channel, 1024, temp); + ret = __osContRamRead(mq, channel, MOTOR_RAM_ADDRESS, temp); if (ret != 0) return ret; - if (temp[31] != 128) { + if (temp[ARRLEN(temp) - 1] != MOTOR_DEFAULT_BANK) { return PFS_ERR_DEVICE; } @@ -128,8 +132,8 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { _motorstopbuf[i] = 0; } - _MakeMotorData(channel, 1536, _motorstartbuf, &_MotorStartData[channel]); - _MakeMotorData(channel, 1536, _motorstopbuf, &_MotorStopData[channel]); + _MakeMotorData(channel, MOTOR_DATA_ADDRESS, _motorstartbuf, &_MotorStartData[channel]); + _MakeMotorData(channel, MOTOR_DATA_ADDRESS, _motorstopbuf, &_MotorStopData[channel]); return 0; } diff --git a/lib/src/os/osPfsFreeBlocks.c b/lib/src/os/osPfsFreeBlocks.c index 8245226c..fb1a77e7 100644 --- a/lib/src/os/osPfsFreeBlocks.c +++ b/lib/src/os/osPfsFreeBlocks.c @@ -26,6 +26,6 @@ s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used) { pages++; } } - *bytes_not_used = pages * 8 * 32; + *bytes_not_used = pages * PFS_ONE_PAGE * BLOCKSIZE; return 0; } diff --git a/lib/src/os/osPiStartDma.c b/lib/src/os/osPiStartDma.c index 46ce2aaa..63c354c4 100644 --- a/lib/src/os/osPiStartDma.c +++ b/lib/src/os/osPiStartDma.c @@ -10,21 +10,18 @@ s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, u32 devAddr, void *d if (!__osPiDevMgr.active) return -1; if (direction == OS_READ) - mb->hdr.type = 11; + mb->hdr.type = OS_MESG_TYPE_DMAREAD; else - mb->hdr.type = 12; + mb->hdr.type = OS_MESG_TYPE_DMAWRITE; mb->hdr.pri = priority; mb->hdr.retQueue = mq; mb->dramAddr = dramAddr; mb->devAddr = devAddr; mb->size = size; mb->piHandle = NULL; - if (priority == OS_MESG_PRI_HIGH) - { + if (priority == OS_MESG_PRI_HIGH) { ret = osJamMesg(osPiGetCmdQueue(), (OSMesg)mb, OS_MESG_NOBLOCK); - } - else - { + } else { ret = osSendMesg(osPiGetCmdQueue(), (OSMesg)mb, OS_MESG_NOBLOCK); } return ret; diff --git a/lib/src/os/osYieldThread.c b/lib/src/os/osYieldThread.c new file mode 100644 index 00000000..7ac4e986 --- /dev/null +++ b/lib/src/os/osYieldThread.c @@ -0,0 +1,19 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D65B0 */ + +#include "macros.h" +#include "libultra_internal.h" +#include "viint.h" + +extern OSThread *__osRunningThread; +extern OSThread *__osRunQueue; + +extern void __osEnqueueAndYield(OSThread **); +extern void __osRestoreInt(u32); + +void osYieldThread(void) { + register u32 saveMask = __osDisableInt(); + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + __osRestoreInt(saveMask); +} diff --git a/lib/src/os/osint.h b/lib/src/os/osint.h new file mode 100644 index 00000000..124b6b03 --- /dev/null +++ b/lib/src/os/osint.h @@ -0,0 +1,46 @@ +#ifndef _OSINT_H +#define _OSINT_H +#include + +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/lib/src/os/siacs.c b/lib/src/os/siacs.c index 00e5bb71..a499b237 100644 --- a/lib/src/os/siacs.c +++ b/lib/src/os/siacs.c @@ -40,12 +40,14 @@ void __osSiCreateAccessQueue(void) { osCreateMesgQueue(&__osSiAccessQueue, siAccessBuf, SI_Q_BUF_LEN); osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); } + void __osSiGetAccess(void) { OSMesg dummyMesg; if (!__osSiAccessQueueEnabled) __osSiCreateAccessQueue(); osRecvMesg(&__osSiAccessQueue, &dummyMesg, OS_MESG_BLOCK); } + void __osSiRelAccess(void) { osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); } diff --git a/lib/src/os/unknown_0D6C90.c b/lib/src/os/unknown_0D6C90.c index 1954a0b0..d24c18e1 100644 --- a/lib/src/os/unknown_0D6C90.c +++ b/lib/src/os/unknown_0D6C90.c @@ -25,14 +25,3 @@ GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osYieldThread.s") -/*extern void __osEnqueueAndYield(OSThread **); -extern void __osRestoreInt(u32); -void osYieldThread(void){ - register u32 saveMask = __osDisableInt(); - __osRunningThread->state = OS_STATE_RUNNABLE; - __osEnqueueAndYield(&__osRunQueue); - __osRestoreInt(saveMask); -}*/ - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osDestroyThread.s") diff --git a/src/memory.c b/src/memory.c index 5a6ee72e..2ad66e00 100644 --- a/src/memory.c +++ b/src/memory.c @@ -40,8 +40,8 @@ s32 gFreeQueueCount; s32 gFreeQueueState; OSPifRam _MotorStopData[MAXCONTROLLERS]; OSPifRam _MotorStartData[MAXCONTROLLERS]; -u8 _motorstopbuf[32]; -u8 _motorstartbuf[32]; +u8 _motorstopbuf[BLOCKSIZE]; +u8 _motorstartbuf[BLOCKSIZE]; extern MemoryPoolSlot gMainMemoryPool; From c2bbd4f40e5555b4a87550e2175c06103fcd4881 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 20:21:22 -0400 Subject: [PATCH 22/46] Match __osViSwapContext --- lib/asm/exception/__osException.s | 4 +- .../unknown_0D3020/__osViSwapContext.s | 230 ------------------ lib/src/os/__osViSwapContext.c | 85 +++++++ lib/src/os/unknown_0D6C90.c | 16 +- 4 files changed, 88 insertions(+), 247 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s create mode 100644 lib/src/os/__osViSwapContext.c diff --git a/lib/asm/exception/__osException.s b/lib/asm/exception/__osException.s index c4fd0f2c..6eed695b 100644 --- a/lib/asm/exception/__osException.s +++ b/lib/asm/exception/__osException.s @@ -369,8 +369,8 @@ glabel __osException /* 0D3DB0 800D31B0 AD3A0000 */ sw $k0, ($t1) .L800D31B4: -/* 0D3DB4 800D31B4 3C01800E */ lui $at, %hi(D_800E4894) # $at, 0x800e -/* 0D3DB8 800D31B8 AC3A4894 */ sw $k0, %lo(D_800E4894)($at) +/* 0D3DB4 800D31B4 3C01800E */ lui $at, %hi(__osFaultedThread) # $at, 0x800e +/* 0D3DB8 800D31B8 AC3A4894 */ sw $k0, %lo(__osFaultedThread)($at) /* 0D3DBC 800D31BC 24090001 */ li $t1, 1 /* 0D3DC0 800D31C0 A7490010 */ sh $t1, 0x10($k0) /* 0D3DC4 800D31C4 24090002 */ li $t1, 2 diff --git a/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s b/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s deleted file mode 100644 index 81d5c099..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s +++ /dev/null @@ -1,230 +0,0 @@ -glabel __osViSwapContext -/* 0D6C90 800D6090 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D6C94 800D6094 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D6C98 800D6098 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D6C9C 800D609C AFB20020 */ sw $s2, 0x20($sp) -/* 0D6CA0 800D60A0 AFB00018 */ sw $s0, 0x18($sp) -/* 0D6CA4 800D60A4 AFA00030 */ sw $zero, 0x30($sp) -/* 0D6CA8 800D60A8 3C11800E */ lui $s1, %hi(__osViNext) # $s1, 0x800e -/* 0D6CAC 800D60AC 3C0EA440 */ lui $t6, %hi(VI_CURRENT_REG) # $t6, 0xa440 -/* 0D6CB0 800D60B0 8E314874 */ lw $s1, %lo(__osViNext)($s1) -/* 0D6CB4 800D60B4 8DCF0010 */ lw $t7, %lo(VI_CURRENT_REG)($t6) -/* 0D6CB8 800D60B8 8E300008 */ lw $s0, 8($s1) -/* 0D6CBC 800D60BC 31F80001 */ andi $t8, $t7, 1 -/* 0D6CC0 800D60C0 AFB80030 */ sw $t8, 0x30($sp) -/* 0D6CC4 800D60C4 0C03233C */ jal osVirtualToPhysical -/* 0D6CC8 800D60C8 8E240004 */ lw $a0, 4($s1) -/* 0D6CCC 800D60CC 8FB90030 */ lw $t9, 0x30($sp) -/* 0D6CD0 800D60D0 00409025 */ move $s2, $v0 -/* 0D6CD4 800D60D4 00194080 */ sll $t0, $t9, 2 -/* 0D6CD8 800D60D8 01194021 */ addu $t0, $t0, $t9 -/* 0D6CDC 800D60DC 00084080 */ sll $t0, $t0, 2 -/* 0D6CE0 800D60E0 02084821 */ addu $t1, $s0, $t0 -/* 0D6CE4 800D60E4 8D2A0028 */ lw $t2, 0x28($t1) -/* 0D6CE8 800D60E8 01525821 */ addu $t3, $t2, $s2 -/* 0D6CEC 800D60EC AFAB003C */ sw $t3, 0x3c($sp) -/* 0D6CF0 800D60F0 962C0000 */ lhu $t4, ($s1) -/* 0D6CF4 800D60F4 318D0002 */ andi $t5, $t4, 2 -/* 0D6CF8 800D60F8 11A00008 */ beqz $t5, .L800D611C -/* 0D6CFC 800D60FC 00000000 */ nop -/* 0D6D00 800D6100 8E0F0020 */ lw $t7, 0x20($s0) -/* 0D6D04 800D6104 8E2E0020 */ lw $t6, 0x20($s1) -/* 0D6D08 800D6108 2401F000 */ li $at, -4096 -/* 0D6D0C 800D610C 01E1C024 */ and $t8, $t7, $at -/* 0D6D10 800D6110 01D8C825 */ or $t9, $t6, $t8 -/* 0D6D14 800D6114 10000003 */ b .L800D6124 -/* 0D6D18 800D6118 AE390020 */ sw $t9, 0x20($s1) -.L800D611C: -/* 0D6D1C 800D611C 8E080020 */ lw $t0, 0x20($s0) -/* 0D6D20 800D6120 AE280020 */ sw $t0, 0x20($s1) -.L800D6124: -/* 0D6D24 800D6124 96290000 */ lhu $t1, ($s1) -/* 0D6D28 800D6128 312A0004 */ andi $t2, $t1, 4 -/* 0D6D2C 800D612C 11400041 */ beqz $t2, .L800D6234 -/* 0D6D30 800D6130 00000000 */ nop -/* 0D6D34 800D6134 8FAB0030 */ lw $t3, 0x30($sp) -/* 0D6D38 800D6138 000B6080 */ sll $t4, $t3, 2 -/* 0D6D3C 800D613C 018B6021 */ addu $t4, $t4, $t3 -/* 0D6D40 800D6140 000C6080 */ sll $t4, $t4, 2 -/* 0D6D44 800D6144 020C6821 */ addu $t5, $s0, $t4 -/* 0D6D48 800D6148 8DAF002C */ lw $t7, 0x2c($t5) -/* 0D6D4C 800D614C 31EE0FFF */ andi $t6, $t7, 0xfff -/* 0D6D50 800D6150 448E3000 */ mtc1 $t6, $f6 -/* 0D6D54 800D6154 AFAE0034 */ sw $t6, 0x34($sp) -/* 0D6D58 800D6158 C6240024 */ lwc1 $f4, 0x24($s1) -/* 0D6D5C 800D615C 05C10005 */ bgez $t6, .L800D6174 -/* 0D6D60 800D6160 46803220 */ cvt.s.w $f8, $f6 -/* 0D6D64 800D6164 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D6D68 800D6168 44815000 */ mtc1 $at, $f10 -/* 0D6D6C 800D616C 00000000 */ nop -/* 0D6D70 800D6170 460A4200 */ add.s $f8, $f8, $f10 -.L800D6174: -/* 0D6D74 800D6174 46082402 */ mul.s $f16, $f4, $f8 -/* 0D6D78 800D6178 24190001 */ li $t9, 1 -/* 0D6D7C 800D617C 4458F800 */ cfc1 $t8, $31 -/* 0D6D80 800D6180 44D9F800 */ ctc1 $t9, $31 -/* 0D6D84 800D6184 00000000 */ nop -/* 0D6D88 800D6188 460084A4 */ cvt.w.s $f18, $f16 -/* 0D6D8C 800D618C 4459F800 */ cfc1 $t9, $31 -/* 0D6D90 800D6190 00000000 */ nop -/* 0D6D94 800D6194 33210004 */ andi $at, $t9, 4 -/* 0D6D98 800D6198 33390078 */ andi $t9, $t9, 0x78 -/* 0D6D9C 800D619C 13200013 */ beqz $t9, .L800D61EC -/* 0D6DA0 800D61A0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D6DA4 800D61A4 44819000 */ mtc1 $at, $f18 -/* 0D6DA8 800D61A8 24190001 */ li $t9, 1 -/* 0D6DAC 800D61AC 46128481 */ sub.s $f18, $f16, $f18 -/* 0D6DB0 800D61B0 44D9F800 */ ctc1 $t9, $31 -/* 0D6DB4 800D61B4 00000000 */ nop -/* 0D6DB8 800D61B8 460094A4 */ cvt.w.s $f18, $f18 -/* 0D6DBC 800D61BC 4459F800 */ cfc1 $t9, $31 -/* 0D6DC0 800D61C0 00000000 */ nop -/* 0D6DC4 800D61C4 33210004 */ andi $at, $t9, 4 -/* 0D6DC8 800D61C8 33390078 */ andi $t9, $t9, 0x78 -/* 0D6DCC 800D61CC 17200005 */ bnez $t9, .L800D61E4 -/* 0D6DD0 800D61D0 00000000 */ nop -/* 0D6DD4 800D61D4 44199000 */ mfc1 $t9, $f18 -/* 0D6DD8 800D61D8 3C018000 */ lui $at, 0x8000 -/* 0D6DDC 800D61DC 10000007 */ b .L800D61FC -/* 0D6DE0 800D61E0 0321C825 */ or $t9, $t9, $at -.L800D61E4: -/* 0D6DE4 800D61E4 10000005 */ b .L800D61FC -/* 0D6DE8 800D61E8 2419FFFF */ li $t9, -1 -.L800D61EC: -/* 0D6DEC 800D61EC 44199000 */ mfc1 $t9, $f18 -/* 0D6DF0 800D61F0 00000000 */ nop -/* 0D6DF4 800D61F4 0720FFFB */ bltz $t9, .L800D61E4 -/* 0D6DF8 800D61F8 00000000 */ nop -.L800D61FC: -/* 0D6DFC 800D61FC AE39002C */ sw $t9, 0x2c($s1) -/* 0D6E00 800D6200 8FA90030 */ lw $t1, 0x30($sp) -/* 0D6E04 800D6204 8E28002C */ lw $t0, 0x2c($s1) -/* 0D6E08 800D6208 2401F000 */ li $at, -4096 -/* 0D6E0C 800D620C 00095080 */ sll $t2, $t1, 2 -/* 0D6E10 800D6210 01495021 */ addu $t2, $t2, $t1 -/* 0D6E14 800D6214 000A5080 */ sll $t2, $t2, 2 -/* 0D6E18 800D6218 020A5821 */ addu $t3, $s0, $t2 -/* 0D6E1C 800D621C 8D6C002C */ lw $t4, 0x2c($t3) -/* 0D6E20 800D6220 44D8F800 */ ctc1 $t8, $31 -/* 0D6E24 800D6224 01816824 */ and $t5, $t4, $at -/* 0D6E28 800D6228 010D7825 */ or $t7, $t0, $t5 -/* 0D6E2C 800D622C 10000008 */ b .L800D6250 -/* 0D6E30 800D6230 AE2F002C */ sw $t7, 0x2c($s1) -.L800D6234: -/* 0D6E34 800D6234 8FAE0030 */ lw $t6, 0x30($sp) -/* 0D6E38 800D6238 000EC080 */ sll $t8, $t6, 2 -/* 0D6E3C 800D623C 030EC021 */ addu $t8, $t8, $t6 -/* 0D6E40 800D6240 0018C080 */ sll $t8, $t8, 2 -/* 0D6E44 800D6244 0218C821 */ addu $t9, $s0, $t8 -/* 0D6E48 800D6248 8F29002C */ lw $t1, 0x2c($t9) -/* 0D6E4C 800D624C AE29002C */ sw $t1, 0x2c($s1) -.L800D6250: -/* 0D6E50 800D6250 8E0A001C */ lw $t2, 0x1c($s0) -/* 0D6E54 800D6254 AFAA0038 */ sw $t2, 0x38($sp) -/* 0D6E58 800D6258 962B0000 */ lhu $t3, ($s1) -/* 0D6E5C 800D625C 316C0020 */ andi $t4, $t3, 0x20 -/* 0D6E60 800D6260 11800002 */ beqz $t4, .L800D626C -/* 0D6E64 800D6264 00000000 */ nop -/* 0D6E68 800D6268 AFA00038 */ sw $zero, 0x38($sp) -.L800D626C: -/* 0D6E6C 800D626C 96280000 */ lhu $t0, ($s1) -/* 0D6E70 800D6270 310D0040 */ andi $t5, $t0, 0x40 -/* 0D6E74 800D6274 11A00005 */ beqz $t5, .L800D628C -/* 0D6E78 800D6278 00000000 */ nop -/* 0D6E7C 800D627C AE20002C */ sw $zero, 0x2c($s1) -/* 0D6E80 800D6280 0C03233C */ jal osVirtualToPhysical -/* 0D6E84 800D6284 8E240004 */ lw $a0, 4($s1) -/* 0D6E88 800D6288 AFA2003C */ sw $v0, 0x3c($sp) -.L800D628C: -/* 0D6E8C 800D628C 962F0000 */ lhu $t7, ($s1) -/* 0D6E90 800D6290 31EE0080 */ andi $t6, $t7, 0x80 -/* 0D6E94 800D6294 11C00009 */ beqz $t6, .L800D62BC -/* 0D6E98 800D6298 00000000 */ nop -/* 0D6E9C 800D629C 96380028 */ lhu $t8, 0x28($s1) -/* 0D6EA0 800D62A0 3C0103FF */ lui $at, 0x3ff -/* 0D6EA4 800D62A4 8E240004 */ lw $a0, 4($s1) -/* 0D6EA8 800D62A8 0018CC00 */ sll $t9, $t8, 0x10 -/* 0D6EAC 800D62AC 03214824 */ and $t1, $t9, $at -/* 0D6EB0 800D62B0 0C03233C */ jal osVirtualToPhysical -/* 0D6EB4 800D62B4 AE29002C */ sw $t1, 0x2c($s1) -/* 0D6EB8 800D62B8 AFA2003C */ sw $v0, 0x3c($sp) -.L800D62BC: -/* 0D6EBC 800D62BC 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D6EC0 800D62C0 3C0BA440 */ lui $t3, %hi(VI_LEAP_REG) # $t3, 0xa440 -/* 0D6EC4 800D62C4 3C08A440 */ lui $t0, %hi(VI_V_BURST_REG) # $t0, 0xa440 -/* 0D6EC8 800D62C8 AD6A0004 */ sw $t2, %lo(VI_ORIGIN_REG)($t3) -/* 0D6ECC 800D62CC 8E0C0008 */ lw $t4, 8($s0) -/* 0D6ED0 800D62D0 3C0FA440 */ lui $t7, %hi(VI_BURST_REG) # $t7, 0xa440 -/* 0D6ED4 800D62D4 3C18A440 */ lui $t8, %hi(VI_V_SYNC_REG) # $t8, 0xa440 -/* 0D6ED8 800D62D8 AD0C0008 */ sw $t4, %lo(VI_WIDTH_REG)($t0) -/* 0D6EDC 800D62DC 8E0D000C */ lw $t5, 0xc($s0) -/* 0D6EE0 800D62E0 3C09A440 */ lui $t1, %hi(VI_H_SYNC_REG) # $t1, 0xa440 -/* 0D6EE4 800D62E4 3C01800E */ lui $at, %hi(__osViNext) # $at, 0x800e -/* 0D6EE8 800D62E8 ADED0014 */ sw $t5, %lo(VI_BURST_REG)($t7) -/* 0D6EEC 800D62EC 8E0E0010 */ lw $t6, 0x10($s0) -/* 0D6EF0 800D62F0 AF0E0018 */ sw $t6, %lo(VI_V_SYNC_REG)($t8) -/* 0D6EF4 800D62F4 8E190014 */ lw $t9, 0x14($s0) -/* 0D6EF8 800D62F8 AD39001C */ sw $t9, %lo(VI_H_SYNC_REG)($t1) -/* 0D6EFC 800D62FC 8E0A0018 */ lw $t2, 0x18($s0) -/* 0D6F00 800D6300 3C19A440 */ lui $t9, %hi(VI_INTR_REG) # $t9, 0xa440 -/* 0D6F04 800D6304 AD6A0020 */ sw $t2, %lo(VI_LEAP_REG)($t3) -/* 0D6F08 800D6308 8FAC0038 */ lw $t4, 0x38($sp) -/* 0D6F0C 800D630C AD0C0024 */ sw $t4, %lo(VI_H_START_REG)($t0) -/* 0D6F10 800D6310 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D6F14 800D6314 000D7880 */ sll $t7, $t5, 2 -/* 0D6F18 800D6318 01ED7821 */ addu $t7, $t7, $t5 -/* 0D6F1C 800D631C 000F7880 */ sll $t7, $t7, 2 -/* 0D6F20 800D6320 020F7021 */ addu $t6, $s0, $t7 -/* 0D6F24 800D6324 8DD80030 */ lw $t8, 0x30($t6) -/* 0D6F28 800D6328 AF380028 */ sw $t8, %lo(VI_V_START_REG)($t9) -/* 0D6F2C 800D632C 8FA90030 */ lw $t1, 0x30($sp) -/* 0D6F30 800D6330 00095080 */ sll $t2, $t1, 2 -/* 0D6F34 800D6334 01495021 */ addu $t2, $t2, $t1 -/* 0D6F38 800D6338 000A5080 */ sll $t2, $t2, 2 -/* 0D6F3C 800D633C 020A5821 */ addu $t3, $s0, $t2 -/* 0D6F40 800D6340 8D6C0034 */ lw $t4, 0x34($t3) -/* 0D6F44 800D6344 3C0AA440 */ lui $t2, %hi(VI_X_SCALE_REG) # $t2, 0xa440 -/* 0D6F48 800D6348 AD0C002C */ sw $t4, %lo(VI_V_BURST_REG)($t0) -/* 0D6F4C 800D634C 8FAD0030 */ lw $t5, 0x30($sp) -/* 0D6F50 800D6350 3C0CA440 */ lui $t4, %hi(VI_Y_SCALE_REG) # $t4, 0xa440 -/* 0D6F54 800D6354 000D7880 */ sll $t7, $t5, 2 -/* 0D6F58 800D6358 01ED7821 */ addu $t7, $t7, $t5 -/* 0D6F5C 800D635C 000F7880 */ sll $t7, $t7, 2 -/* 0D6F60 800D6360 020F7021 */ addu $t6, $s0, $t7 -/* 0D6F64 800D6364 8DD80038 */ lw $t8, 0x38($t6) -/* 0D6F68 800D6368 3C0DA440 */ lui $t5, 0xa440 -/* 0D6F6C 800D636C 3C0F800E */ lui $t7, %hi(__osViCurr) # $t7, 0x800e -/* 0D6F70 800D6370 AF38000C */ sw $t8, %lo(VI_INTR_REG)($t9) -/* 0D6F74 800D6374 8E290020 */ lw $t1, 0x20($s1) -/* 0D6F78 800D6378 3C18800E */ lui $t8, %hi(__osViCurr) # $t8, 0x800e -/* 0D6F7C 800D637C 3C0E800E */ lui $t6, %hi(__osViNext) # $t6, 0x800e -/* 0D6F80 800D6380 AD490030 */ sw $t1, %lo(VI_X_SCALE_REG)($t2) -/* 0D6F84 800D6384 8E2B002C */ lw $t3, 0x2c($s1) -/* 0D6F88 800D6388 AD8B0034 */ sw $t3, %lo(VI_Y_SCALE_REG)($t4) -/* 0D6F8C 800D638C 8E28000C */ lw $t0, 0xc($s1) -/* 0D6F90 800D6390 ADA80000 */ sw $t0, ($t5) -/* 0D6F94 800D6394 8DEF4870 */ lw $t7, %lo(__osViCurr)($t7) -/* 0D6F98 800D6398 AC2F4874 */ sw $t7, %lo(__osViNext)($at) -/* 0D6F9C 800D639C 3C01800E */ lui $at, %hi(__osViCurr) # $at, 0x800e -/* 0D6FA0 800D63A0 AC314870 */ sw $s1, %lo(__osViCurr)($at) -/* 0D6FA4 800D63A4 8F184870 */ lw $t8, %lo(__osViCurr)($t8) -/* 0D6FA8 800D63A8 8DCE4874 */ lw $t6, %lo(__osViNext)($t6) -/* 0D6FAC 800D63AC 270A0030 */ addiu $t2, $t8, 0x30 -.L800D63B0: -/* 0D6FB0 800D63B0 8F010000 */ lw $at, ($t8) -/* 0D6FB4 800D63B4 2718000C */ addiu $t8, $t8, 0xc -/* 0D6FB8 800D63B8 25CE000C */ addiu $t6, $t6, 0xc -/* 0D6FBC 800D63BC ADC1FFF4 */ sw $at, -0xc($t6) -/* 0D6FC0 800D63C0 8F01FFF8 */ lw $at, -8($t8) -/* 0D6FC4 800D63C4 ADC1FFF8 */ sw $at, -8($t6) -/* 0D6FC8 800D63C8 8F01FFFC */ lw $at, -4($t8) -/* 0D6FCC 800D63CC 170AFFF8 */ bne $t8, $t2, .L800D63B0 -/* 0D6FD0 800D63D0 ADC1FFFC */ sw $at, -4($t6) -/* 0D6FD4 800D63D4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D6FD8 800D63D8 8FB00018 */ lw $s0, 0x18($sp) -/* 0D6FDC 800D63DC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D6FE0 800D63E0 8FB20020 */ lw $s2, 0x20($sp) -/* 0D6FE4 800D63E4 03E00008 */ jr $ra -/* 0D6FE8 800D63E8 27BD0048 */ addiu $sp, $sp, 0x48 - -/* 0D6FEC 800D63EC 00000000 */ nop diff --git a/lib/src/os/__osViSwapContext.c b/lib/src/os/__osViSwapContext.c new file mode 100644 index 00000000..a58302a6 --- /dev/null +++ b/lib/src/os/__osViSwapContext.c @@ -0,0 +1,85 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D6090 */ + +#include "macros.h" +#include "libultra_internal.h" +#include "viint.h" + +//TODO: These variable declarations should really be elsewhere. +struct __osThreadTail +{ + OSThread *next; + OSPri priority; +} __osThreadTail; + +struct __osThreadTail __osThreadTail = {0, -1}; +OSThread *__osRunQueue = &__osThreadTail.next; +OSThread *__osActiveQueue = &__osThreadTail.next; + +extern OSThread *__osRunningThread = NULL; +extern OSThread *__osFaultedThread = NULL; + +void __osViSwapContext() { + register OSViMode *vm; + register __OSViContext *vc; + u32 origin; + u32 hStart; + u32 nomValue; + u32 field; + + field = 0; + vc = __osViNext; + vm = vc->modep; + + field = IO_READ(VI_CURRENT_REG) & 1; //field num + + origin = osVirtualToPhysical(vc->framep) + (vm->fldRegs[field].origin); + + if (vc->state & VI_STATE_XSCALE_UPDATED) { + vc->x.scale |= (vm->comRegs.xScale & ~VI_SCALE_MASK); + } else { + vc->x.scale = vm->comRegs.xScale; + } + + if (vc->state & VI_STATE_YSCALE_UPDATED) { + nomValue = vm->fldRegs[field].yScale & VI_SCALE_MASK; + vc->y.scale = vc->y.factor * nomValue; + vc->y.scale |= vm->fldRegs[field].yScale & ~VI_SCALE_MASK; + } else { + vc->y.scale = vm->fldRegs[field].yScale; + } + + hStart = vm->comRegs.hStart; + + if (vc->state & VI_STATE_BLACK) { + hStart = 0; + } + + if (vc->state & VI_STATE_REPEATLINE) { + vc->y.scale = 0; + origin = osVirtualToPhysical(vc->framep); + } + + if (vc->state & VI_STATE_FADE) { + vc->y.scale = (vc->y.offset << VI_SUBPIXEL_SH) & (VI_2_10_FPART_MASK << VI_SUBPIXEL_SH); + origin = osVirtualToPhysical(vc->framep); + } + + IO_WRITE(VI_ORIGIN_REG, origin); + IO_WRITE(VI_WIDTH_REG, vm->comRegs.width); + IO_WRITE(VI_BURST_REG, vm->comRegs.burst); + IO_WRITE(VI_V_SYNC_REG, vm->comRegs.vSync); + IO_WRITE(VI_H_SYNC_REG, vm->comRegs.hSync); + IO_WRITE(VI_LEAP_REG, vm->comRegs.leap); + IO_WRITE(VI_H_START_REG, hStart); + IO_WRITE(VI_V_START_REG, vm->fldRegs[field].vStart); + IO_WRITE(VI_V_BURST_REG, vm->fldRegs[field].vBurst); + IO_WRITE(VI_INTR_REG, vm->fldRegs[field].vIntr); + IO_WRITE(VI_X_SCALE_REG, vc->x.scale); + IO_WRITE(VI_Y_SCALE_REG, vc->y.scale); + IO_WRITE(VI_CONTROL_REG, vc->control); + + __osViNext = __osViCurr; + __osViCurr = vc; + *__osViNext = *__osViCurr; +} diff --git a/lib/src/os/unknown_0D6C90.c b/lib/src/os/unknown_0D6C90.c index d24c18e1..39e7d2b2 100644 --- a/lib/src/os/unknown_0D6C90.c +++ b/lib/src/os/unknown_0D6C90.c @@ -1,24 +1,10 @@ /* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D6090 */ +/* RAM_POS: 0x800D63EC */ #include "macros.h" #include "libultra_internal.h" #include "viint.h" -struct __osThreadTail -{ - OSThread *next; - OSPri priority; -} __osThreadTail; - -struct __osThreadTail __osThreadTail = {0, -1}; -OSThread *__osRunQueue = &__osThreadTail.next; -OSThread *__osActiveQueue = &__osThreadTail.next; - -extern OSThread *__osRunningThread = NULL; -extern OSThread *D_800E4894 = NULL; // __osFaultedThread - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osViSwapContext.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s") From fa6280f3defabea4fdd4a274ec56be133c1a9cbe Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 20:42:42 -0400 Subject: [PATCH 23/46] Match a few more os functions --- .../unknown_0D3020/__osResetGlobalIntMask.s | 26 ------------ .../unknown_0D3020/__osSpDeviceBusy.s | 16 ------- .../unknown_0D3020/__osSpGetStatus.s | 6 --- .../unknown_0D3020/__osSpRawStartDma.s | 42 ------------------- .../unknown_0D3020/__osSpSetPc.s | 20 --------- .../unknown_0D3020/osEPiRawWriteIo.s | 24 ----------- lib/src/os/__osResetGlobalIntMask.c | 16 +++++++ lib/src/os/__osSpDeviceBusy.c | 11 +++++ lib/src/os/__osSpGetStatus.c | 8 ++++ lib/src/os/__osSpRawStartDma.c | 16 +++++++ lib/src/os/__osSpSetPc.c | 14 +++++++ lib/src/os/osEPiRawWriteIo.c | 15 +++++++ lib/src/os/piint.h | 6 +++ lib/src/os/unknown_0D6C90.c | 13 ------ 14 files changed, 86 insertions(+), 147 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s create mode 100644 lib/src/os/__osResetGlobalIntMask.c create mode 100644 lib/src/os/__osSpDeviceBusy.c create mode 100644 lib/src/os/__osSpGetStatus.c create mode 100644 lib/src/os/__osSpRawStartDma.c create mode 100644 lib/src/os/__osSpSetPc.c create mode 100644 lib/src/os/osEPiRawWriteIo.c delete mode 100644 lib/src/os/unknown_0D6C90.c diff --git a/lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s b/lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s deleted file mode 100644 index b6cb5ad9..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s +++ /dev/null @@ -1,26 +0,0 @@ -glabel __osResetGlobalIntMask -/* 0D7100 800D6500 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D7104 800D6504 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D7108 800D6508 AFA40028 */ sw $a0, 0x28($sp) -/* 0D710C 800D650C 0C034958 */ jal __osDisableInt -/* 0D7110 800D6510 AFB00018 */ sw $s0, 0x18($sp) -/* 0D7114 800D6514 8FAF0028 */ lw $t7, 0x28($sp) -/* 0D7118 800D6518 3C0E800E */ lui $t6, %hi(__OSGlobalIntMask) # $t6, 0x800e -/* 0D711C 800D651C 8DCE38AC */ lw $t6, %lo(__OSGlobalIntMask)($t6) -/* 0D7120 800D6520 2401FBFE */ li $at, -1026 -/* 0D7124 800D6524 01E1C024 */ and $t8, $t7, $at -/* 0D7128 800D6528 0300C827 */ not $t9, $t8 -/* 0D712C 800D652C 00408025 */ move $s0, $v0 -/* 0D7130 800D6530 3C01800E */ lui $at, %hi(__OSGlobalIntMask) # $at, 0x800e -/* 0D7134 800D6534 01D94024 */ and $t0, $t6, $t9 -/* 0D7138 800D6538 AC2838AC */ sw $t0, %lo(__OSGlobalIntMask)($at) -/* 0D713C 800D653C 0C034960 */ jal __osRestoreInt -/* 0D7140 800D6540 02002025 */ move $a0, $s0 -/* 0D7144 800D6544 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D7148 800D6548 8FB00018 */ lw $s0, 0x18($sp) -/* 0D714C 800D654C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D7150 800D6550 03E00008 */ jr $ra -/* 0D7154 800D6554 00000000 */ nop - -/* 0D7158 800D6558 00000000 */ nop -/* 0D715C 800D655C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s b/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s deleted file mode 100644 index a6148e0b..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s +++ /dev/null @@ -1,16 +0,0 @@ -glabel __osSpDeviceBusy -/* 0D70D0 800D64D0 3C0EA404 */ lui $t6, %hi(SP_STATUS_REG) # $t6, 0xa404 -/* 0D70D4 800D64D4 8DC40010 */ lw $a0, %lo(SP_STATUS_REG)($t6) -/* 0D70D8 800D64D8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D70DC 800D64DC 308F001C */ andi $t7, $a0, 0x1c -/* 0D70E0 800D64E0 11E00003 */ beqz $t7, .L800D64F0 -/* 0D70E4 800D64E4 00000000 */ nop -/* 0D70E8 800D64E8 10000002 */ b .L800D64F4 -/* 0D70EC 800D64EC 24020001 */ li $v0, 1 -.L800D64F0: -/* 0D70F0 800D64F0 00001025 */ move $v0, $zero -.L800D64F4: -/* 0D70F4 800D64F4 03E00008 */ jr $ra -/* 0D70F8 800D64F8 27BD0008 */ addiu $sp, $sp, 8 - -/* 0D70FC 800D64FC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s b/lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s deleted file mode 100644 index 68a4645c..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s +++ /dev/null @@ -1,6 +0,0 @@ -glabel __osSpGetStatus -/* 0D6FF0 800D63F0 3C0EA404 */ lui $t6, 0xa404 -/* 0D6FF4 800D63F4 03E00008 */ jr $ra -/* 0D6FF8 800D63F8 8DC20010 */ lw $v0, 0x10($t6) - -/* 0D6FFC 800D63FC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s b/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s deleted file mode 100644 index 33e5605a..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s +++ /dev/null @@ -1,42 +0,0 @@ -glabel __osSpRawStartDma -/* 0D7040 800D6440 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D7044 800D6444 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D7048 800D6448 AFA40018 */ sw $a0, 0x18($sp) -/* 0D704C 800D644C AFA5001C */ sw $a1, 0x1c($sp) -/* 0D7050 800D6450 AFA60020 */ sw $a2, 0x20($sp) -/* 0D7054 800D6454 0C035934 */ jal __osSpDeviceBusy -/* 0D7058 800D6458 AFA70024 */ sw $a3, 0x24($sp) -/* 0D705C 800D645C 10400003 */ beqz $v0, .L800D646C -/* 0D7060 800D6460 00000000 */ nop -/* 0D7064 800D6464 10000015 */ b .L800D64BC -/* 0D7068 800D6468 2402FFFF */ li $v0, -1 -.L800D646C: -/* 0D706C 800D646C 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D7070 800D6470 3C0FA404 */ lui $t7, 0xa404 -/* 0D7074 800D6474 ADEE0000 */ sw $t6, ($t7) -/* 0D7078 800D6478 0C03233C */ jal osVirtualToPhysical -/* 0D707C 800D647C 8FA40020 */ lw $a0, 0x20($sp) -/* 0D7080 800D6480 3C18A404 */ lui $t8, %hi(SP_DRAM_ADDR_REG) # $t8, 0xa404 -/* 0D7084 800D6484 AF020004 */ sw $v0, %lo(SP_DRAM_ADDR_REG)($t8) -/* 0D7088 800D6488 8FB90018 */ lw $t9, 0x18($sp) -/* 0D708C 800D648C 17200006 */ bnez $t9, .L800D64A8 -/* 0D7090 800D6490 00000000 */ nop -/* 0D7094 800D6494 8FA80024 */ lw $t0, 0x24($sp) -/* 0D7098 800D6498 3C0AA404 */ lui $t2, %hi(SP_WR_LEN_REG) # $t2, 0xa404 -/* 0D709C 800D649C 2509FFFF */ addiu $t1, $t0, -1 -/* 0D70A0 800D64A0 10000005 */ b .L800D64B8 -/* 0D70A4 800D64A4 AD49000C */ sw $t1, %lo(SP_WR_LEN_REG)($t2) -.L800D64A8: -/* 0D70A8 800D64A8 8FAB0024 */ lw $t3, 0x24($sp) -/* 0D70AC 800D64AC 3C0DA404 */ lui $t5, %hi(SP_RD_LEN_REG) # $t5, 0xa404 -/* 0D70B0 800D64B0 256CFFFF */ addiu $t4, $t3, -1 -/* 0D70B4 800D64B4 ADAC0008 */ sw $t4, %lo(SP_RD_LEN_REG)($t5) -.L800D64B8: -/* 0D70B8 800D64B8 00001025 */ move $v0, $zero -.L800D64BC: -/* 0D70BC 800D64BC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D70C0 800D64C0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D70C4 800D64C4 03E00008 */ jr $ra -/* 0D70C8 800D64C8 00000000 */ nop - -/* 0D70CC 800D64CC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s b/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s deleted file mode 100644 index 21c1baff..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s +++ /dev/null @@ -1,20 +0,0 @@ -glabel __osSpSetPc -/* 0D7000 800D6400 3C0EA404 */ lui $t6, %hi(SP_STATUS_REG) # $t6, 0xa404 -/* 0D7004 800D6404 8DC50010 */ lw $a1, %lo(SP_STATUS_REG)($t6) -/* 0D7008 800D6408 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D700C 800D640C 30AF0001 */ andi $t7, $a1, 1 -/* 0D7010 800D6410 15E00003 */ bnez $t7, .L800D6420 -/* 0D7014 800D6414 00000000 */ nop -/* 0D7018 800D6418 10000004 */ b .L800D642C -/* 0D701C 800D641C 2402FFFF */ li $v0, -1 -.L800D6420: -/* 0D7020 800D6420 3C18A408 */ lui $t8, 0xa408 -/* 0D7024 800D6424 AF040000 */ sw $a0, ($t8) -/* 0D7028 800D6428 00001025 */ move $v0, $zero -.L800D642C: -/* 0D702C 800D642C 03E00008 */ jr $ra -/* 0D7030 800D6430 27BD0008 */ addiu $sp, $sp, 8 - -/* 0D7034 800D6434 00000000 */ nop -/* 0D7038 800D6438 00000000 */ nop -/* 0D703C 800D643C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s b/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s deleted file mode 100644 index 6fc35ae7..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s +++ /dev/null @@ -1,24 +0,0 @@ -glabel osEPiRawWriteIo -/* 0D7160 800D6560 3C0EA460 */ lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 -/* 0D7164 800D6564 8DC70010 */ lw $a3, %lo(PI_STATUS_REG)($t6) -/* 0D7168 800D6568 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D716C 800D656C 30EF0003 */ andi $t7, $a3, 3 -/* 0D7170 800D6570 11E00006 */ beqz $t7, .L800D658C -/* 0D7174 800D6574 00000000 */ nop -.L800D6578: -/* 0D7178 800D6578 3C18A460 */ lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460 -/* 0D717C 800D657C 8F070010 */ lw $a3, %lo(PI_STATUS_REG)($t8) -/* 0D7180 800D6580 30F90003 */ andi $t9, $a3, 3 -/* 0D7184 800D6584 1720FFFC */ bnez $t9, .L800D6578 -/* 0D7188 800D6588 00000000 */ nop -.L800D658C: -/* 0D718C 800D658C 8C88000C */ lw $t0, 0xc($a0) -/* 0D7190 800D6590 3C01A000 */ lui $at, 0xa000 -/* 0D7194 800D6594 27BD0008 */ addiu $sp, $sp, 8 -/* 0D7198 800D6598 01054825 */ or $t1, $t0, $a1 -/* 0D719C 800D659C 01215025 */ or $t2, $t1, $at -/* 0D71A0 800D65A0 AD460000 */ sw $a2, ($t2) -/* 0D71A4 800D65A4 03E00008 */ jr $ra -/* 0D71A8 800D65A8 00001025 */ move $v0, $zero - -/* 0D71AC 800D65AC 00000000 */ nop diff --git a/lib/src/os/__osResetGlobalIntMask.c b/lib/src/os/__osResetGlobalIntMask.c new file mode 100644 index 00000000..fdf01e98 --- /dev/null +++ b/lib/src/os/__osResetGlobalIntMask.c @@ -0,0 +1,16 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D6500 */ + +#include "libultra_internal.h" + +extern u32 __OSGlobalIntMask; + +void __osResetGlobalIntMask(OSHWIntr interrupt) { + register u32 saveMask = __osDisableInt(); + + //not sure about these constants, SR_IBIT3 is external level 3 INT0, which I think corresponds to the rcp + //os.h has several masks defined that end in 401 but non that are just 401 + __OSGlobalIntMask &= ~(interrupt & ~(SR_IBIT3 | SR_IE)); + + __osRestoreInt(saveMask); +} diff --git a/lib/src/os/__osSpDeviceBusy.c b/lib/src/os/__osSpDeviceBusy.c new file mode 100644 index 00000000..a9662071 --- /dev/null +++ b/lib/src/os/__osSpDeviceBusy.c @@ -0,0 +1,11 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D64D0 */ + +#include "libultra_internal.h" + +int __osSpDeviceBusy() { + register u32 stat = IO_READ(SP_STATUS_REG); + if (stat & (SP_STATUS_DMA_BUSY | SP_STATUS_DMA_FULL | SP_STATUS_IO_FULL)) + return 1; + return 0; +} diff --git a/lib/src/os/__osSpGetStatus.c b/lib/src/os/__osSpGetStatus.c new file mode 100644 index 00000000..81e8e284 --- /dev/null +++ b/lib/src/os/__osSpGetStatus.c @@ -0,0 +1,8 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D63EC */ + +#include "libultra_internal.h" + +u32 __osSpGetStatus() { + return IO_READ(SP_STATUS_REG); +} diff --git a/lib/src/os/__osSpRawStartDma.c b/lib/src/os/__osSpRawStartDma.c new file mode 100644 index 00000000..a887f301 --- /dev/null +++ b/lib/src/os/__osSpRawStartDma.c @@ -0,0 +1,16 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D6440 */ + +#include "libultra_internal.h" + +s32 __osSpRawStartDma(s32 direction, u32 devAddr, void *dramAddr, u32 size) { + if (__osSpDeviceBusy()) + return -1; + IO_WRITE(SP_MEM_ADDR_REG, devAddr); + IO_WRITE(SP_DRAM_ADDR_REG, osVirtualToPhysical(dramAddr)); + if (direction == OS_READ) + IO_WRITE(SP_WR_LEN_REG, size - 1); + else + IO_WRITE(SP_RD_LEN_REG, size - 1); + return 0; +} diff --git a/lib/src/os/__osSpSetPc.c b/lib/src/os/__osSpSetPc.c new file mode 100644 index 00000000..a18f4c55 --- /dev/null +++ b/lib/src/os/__osSpSetPc.c @@ -0,0 +1,14 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D63FC */ + +#include "libultra_internal.h" + +s32 __osSpSetPc(u32 data) { + register u32 stat = IO_READ(SP_STATUS_REG); + if (!(stat & SP_STATUS_HALT)) + return -1; + else { + IO_WRITE(SP_PC_REG, data); + } + return 0; +} diff --git a/lib/src/os/osEPiRawWriteIo.c b/lib/src/os/osEPiRawWriteIo.c new file mode 100644 index 00000000..cf7311a3 --- /dev/null +++ b/lib/src/os/osEPiRawWriteIo.c @@ -0,0 +1,15 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D6560 */ + +#include "libultra_internal.h" +#include "piint.h" + +s32 osEPiRawWriteIo(OSPiHandle *pihandle, u32 devAddr, u32 data) { + register u32 stat = IO_READ(PI_STATUS_REG); + + while (stat & PI_STATUS_ERROR) + stat = IO_READ(PI_STATUS_REG); + + IO_WRITE(pihandle->baseAddress | devAddr, data); + return 0; +} diff --git a/lib/src/os/piint.h b/lib/src/os/piint.h index 0c4b300c..9c3f06b8 100644 --- a/lib/src/os/piint.h +++ b/lib/src/os/piint.h @@ -91,6 +91,12 @@ #define LEO_ERROR_24 24 //no reference position found? #define LEO_ERROR_29 29 // +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + extern OSDevMgr __osPiDevMgr; extern OSPiHandle *__osCurrentHandle[2]; extern OSPiHandle CartRomHandle; diff --git a/lib/src/os/unknown_0D6C90.c b/lib/src/os/unknown_0D6C90.c deleted file mode 100644 index 39e7d2b2..00000000 --- a/lib/src/os/unknown_0D6C90.c +++ /dev/null @@ -1,13 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D63EC */ - -#include "macros.h" -#include "libultra_internal.h" -#include "viint.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpGetStatus.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpSetPc.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpRawStartDma.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osSpDeviceBusy.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osResetGlobalIntMask.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osEPiRawWriteIo.s") From 71eb2486369feefbd2274d5fd82c7ee8b92c6891 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:01:16 -0400 Subject: [PATCH 24/46] Identify and match osPfsInit --- .../controller_pak/func_80074B34.s | 2 +- .../controller_pak/func_800758DC.s | 4 +- .../controller_pak/func_80075B18.s | 4 +- .../unknown_0CF330/func_800CED20.s | 50 ------------ lib/src/os/osPfsInit.c | 76 +++++++++++++++++++ lib/src/os/unknown_0CF330.c | 4 +- 6 files changed, 82 insertions(+), 58 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CF330/func_800CED20.s create mode 100644 lib/src/os/osPfsInit.c diff --git a/asm/non_matchings/controller_pak/func_80074B34.s b/asm/non_matchings/controller_pak/func_80074B34.s index c6bc48e8..62679033 100644 --- a/asm/non_matchings/controller_pak/func_80074B34.s +++ b/asm/non_matchings/controller_pak/func_80074B34.s @@ -52,7 +52,7 @@ glabel func_80074B34 /* 0757F4 80074BF4 15C00004 */ bnez $t6, .L80074C08 /* 0757F8 80074BF8 3C048012 */ lui $a0, %hi(D_80124010) # $a0, 0x8012 /* 0757FC 80074BFC 8C844010 */ lw $a0, %lo(D_80124010)($a0) -/* 075800 80074C00 0C033B48 */ jal func_800CED20 +/* 075800 80074C00 0C033B48 */ jal osPfsInit /* 075804 80074C04 03203025 */ move $a2, $t9 .L80074C08: /* 075808 80074C08 8FA40058 */ lw $a0, 0x58($sp) diff --git a/asm/non_matchings/controller_pak/func_800758DC.s b/asm/non_matchings/controller_pak/func_800758DC.s index e05a2d72..5b31d09b 100644 --- a/asm/non_matchings/controller_pak/func_800758DC.s +++ b/asm/non_matchings/controller_pak/func_800758DC.s @@ -68,7 +68,7 @@ glabel func_800758DC /* 0765D0 800759D0 00401825 */ move $v1, $v0 /* 0765D4 800759D4 8E840000 */ lw $a0, ($s4) /* 0765D8 800759D8 02602825 */ move $a1, $s3 -/* 0765DC 800759DC 0C033B48 */ jal func_800CED20 +/* 0765DC 800759DC 0C033B48 */ jal osPfsInit /* 0765E0 800759E0 02A03025 */ move $a2, $s5 /* 0765E4 800759E4 00401825 */ move $v1, $v0 .L800759E8: @@ -90,7 +90,7 @@ glabel func_800758DC /* 07661C 80075A1C 24010001 */ li $at, 1 /* 076620 80075A20 8E840000 */ lw $a0, ($s4) /* 076624 80075A24 02602825 */ move $a1, $s3 -/* 076628 80075A28 0C033B48 */ jal func_800CED20 +/* 076628 80075A28 0C033B48 */ jal osPfsInit /* 07662C 80075A2C 02A03025 */ move $a2, $s5 /* 076630 80075A30 14520008 */ bne $v0, $s2, .L80075A54 /* 076634 80075A34 02602825 */ move $a1, $s3 diff --git a/asm/non_matchings/controller_pak/func_80075B18.s b/asm/non_matchings/controller_pak/func_80075B18.s index ec64e9dd..820b5d28 100644 --- a/asm/non_matchings/controller_pak/func_80075B18.s +++ b/asm/non_matchings/controller_pak/func_80075B18.s @@ -67,13 +67,13 @@ glabel func_80075B18 /* 076818 80075C18 018D9021 */ addu $s2, $t4, $t5 /* 07681C 80075C1C 8E840000 */ lw $a0, ($s4) /* 076820 80075C20 02402825 */ move $a1, $s2 -/* 076824 80075C24 0C033B48 */ jal func_800CED20 +/* 076824 80075C24 0C033B48 */ jal osPfsInit /* 076828 80075C28 02003025 */ move $a2, $s0 /* 07682C 80075C2C 24010002 */ li $at, 2 /* 076830 80075C30 14410004 */ bne $v0, $at, .L80075C44 /* 076834 80075C34 02402825 */ move $a1, $s2 /* 076838 80075C38 8E840000 */ lw $a0, ($s4) -/* 07683C 80075C3C 0C033B48 */ jal func_800CED20 +/* 07683C 80075C3C 0C033B48 */ jal osPfsInit /* 076840 80075C40 02003025 */ move $a2, $s0 .L80075C44: /* 076844 80075C44 14400006 */ bnez $v0, .L80075C60 diff --git a/lib/asm/non_matchings/unknown_0CF330/func_800CED20.s b/lib/asm/non_matchings/unknown_0CF330/func_800CED20.s deleted file mode 100644 index 8f362cdb..00000000 --- a/lib/asm/non_matchings/unknown_0CF330/func_800CED20.s +++ /dev/null @@ -1,50 +0,0 @@ -glabel func_800CED20 -/* 0CF920 800CED20 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CF924 800CED24 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF928 800CED28 AFA40020 */ sw $a0, 0x20($sp) -/* 0CF92C 800CED2C AFA50024 */ sw $a1, 0x24($sp) -/* 0CF930 800CED30 AFA60028 */ sw $a2, 0x28($sp) -/* 0CF934 800CED34 0C033594 */ jal __osSiGetAccess -/* 0CF938 800CED38 AFA0001C */ sw $zero, 0x1c($sp) -/* 0CF93C 800CED3C 8FA40020 */ lw $a0, 0x20($sp) -/* 0CF940 800CED40 0C033B75 */ jal __osPfsGetStatus -/* 0CF944 800CED44 8FA50028 */ lw $a1, 0x28($sp) -/* 0CF948 800CED48 0C0335A5 */ jal __osSiRelAccess -/* 0CF94C 800CED4C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF950 800CED50 8FAE001C */ lw $t6, 0x1c($sp) -/* 0CF954 800CED54 11C00003 */ beqz $t6, .L800CED64 -/* 0CF958 800CED58 00000000 */ nop -/* 0CF95C 800CED5C 10000019 */ b .L800CEDC4 -/* 0CF960 800CED60 01C01025 */ move $v0, $t6 -.L800CED64: -/* 0CF964 800CED64 8FAF0020 */ lw $t7, 0x20($sp) -/* 0CF968 800CED68 8FB80024 */ lw $t8, 0x24($sp) -/* 0CF96C 800CED6C AF0F0004 */ sw $t7, 4($t8) -/* 0CF970 800CED70 8FA80024 */ lw $t0, 0x24($sp) -/* 0CF974 800CED74 8FB90028 */ lw $t9, 0x28($sp) -/* 0CF978 800CED78 AD190008 */ sw $t9, 8($t0) -/* 0CF97C 800CED7C 8FA90024 */ lw $t1, 0x24($sp) -/* 0CF980 800CED80 AD200000 */ sw $zero, ($t1) -/* 0CF984 800CED84 0C035659 */ jal __osGetId -/* 0CF988 800CED88 8FA40024 */ lw $a0, 0x24($sp) -/* 0CF98C 800CED8C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF990 800CED90 8FAA001C */ lw $t2, 0x1c($sp) -/* 0CF994 800CED94 11400003 */ beqz $t2, .L800CEDA4 -/* 0CF998 800CED98 00000000 */ nop -/* 0CF99C 800CED9C 10000009 */ b .L800CEDC4 -/* 0CF9A0 800CEDA0 01401025 */ move $v0, $t2 -.L800CEDA4: -/* 0CF9A4 800CEDA4 0C033D4C */ jal osPfsChecker -/* 0CF9A8 800CEDA8 8FA40024 */ lw $a0, 0x24($sp) -/* 0CF9AC 800CEDAC 8FAB0024 */ lw $t3, 0x24($sp) -/* 0CF9B0 800CEDB0 AFA2001C */ sw $v0, 0x1c($sp) -/* 0CF9B4 800CEDB4 8D6C0000 */ lw $t4, ($t3) -/* 0CF9B8 800CEDB8 358D0001 */ ori $t5, $t4, 1 -/* 0CF9BC 800CEDBC AD6D0000 */ sw $t5, ($t3) -/* 0CF9C0 800CEDC0 8FA2001C */ lw $v0, 0x1c($sp) -.L800CEDC4: -/* 0CF9C4 800CEDC4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CF9C8 800CEDC8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CF9CC 800CEDCC 03E00008 */ jr $ra -/* 0CF9D0 800CEDD0 00000000 */ nop - diff --git a/lib/src/os/osPfsInit.c b/lib/src/os/osPfsInit.c new file mode 100644 index 00000000..1dccaddd --- /dev/null +++ b/lib/src/os/osPfsInit.c @@ -0,0 +1,76 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CED20 */ + +#include "macros.h" +#include "libultra_internal.h" +#include "controller.h" +#include "siint.h" + +s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel) { + s32 ret; + ret = 0; + __osSiGetAccess(); + ret = __osPfsGetStatus(queue, channel); + __osSiRelAccess(); + if (ret != 0) + return ret; + + pfs->queue = queue; + pfs->channel = channel; + pfs->status = 0; + //pfs->activebank = -1; //Single difference between this an libreultra + ERRCK(__osGetId(pfs)); + + ret = osPfsChecker(pfs); + pfs->status |= PFS_INITIALIZED; + return ret; +} + +#if 1 +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s") +#else +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 < __osMaxControllers; channel++) + { + if ((data[channel].status & CONT_ADDR_CRC_ER) == 0) + { + crc_error_cnt--; + break; + } + } + if (__osMaxControllers == channel) + crc_error_cnt = 0; + if (crc_error_cnt < 1) + { + for (channel = 0; channel < __osMaxControllers; channel++) + { + if (data[channel].errno == 0 && (data[channel].status & CONT_CARD_ON) != 0) + bits |= 1 << channel; + } + __osSiRelAccess(); + *pattern = bits; + return ret; + } + } +} +#endif diff --git a/lib/src/os/unknown_0CF330.c b/lib/src/os/unknown_0CF330.c index 8da09a4d..fac4b485 100644 --- a/lib/src/os/unknown_0CF330.c +++ b/lib/src/os/unknown_0CF330.c @@ -1,10 +1,8 @@ /* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800CED20 */ +/* RAM_POS: 0x800CEEE0 */ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/func_800CED20.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s") From f9a8b01e7c931ce389db57af7d7bf4e68c0dd3c5 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:14:55 -0400 Subject: [PATCH 25/46] Match __osPfsGetStatus --- .../unknown_0CF330/__osPfsGetStatus.s | 74 ------------------- lib/src/os/osPfsInit.c | 70 +++++++----------- 2 files changed, 27 insertions(+), 117 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s diff --git a/lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s b/lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s deleted file mode 100644 index 4056dd0f..00000000 --- a/lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s +++ /dev/null @@ -1,74 +0,0 @@ -glabel __osPfsGetStatus -/* 0CF9D4 800CEDD4 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0CF9D8 800CEDD8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CF9DC 800CEDDC AFA40038 */ sw $a0, 0x38($sp) -/* 0CF9E0 800CEDE0 AFA5003C */ sw $a1, 0x3c($sp) -/* 0CF9E4 800CEDE4 AFA00034 */ sw $zero, 0x34($sp) -/* 0CF9E8 800CEDE8 0C03350C */ jal __osPfsRequestData -/* 0CF9EC 800CEDEC 00002025 */ move $a0, $zero -/* 0CF9F0 800CEDF0 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CF9F4 800CEDF4 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CF9F8 800CEDF8 0C0335B0 */ jal __osSiRawStartDma -/* 0CF9FC 800CEDFC 24040001 */ li $a0, 1 -/* 0CFA00 800CEE00 AFA20034 */ sw $v0, 0x34($sp) -/* 0CFA04 800CEE04 8FA40038 */ lw $a0, 0x38($sp) -/* 0CFA08 800CEE08 27A50030 */ addiu $a1, $sp, 0x30 -/* 0CFA0C 800CEE0C 0C0322EC */ jal osRecvMesg -/* 0CFA10 800CEE10 24060001 */ li $a2, 1 -/* 0CFA14 800CEE14 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013 -/* 0CFA18 800CEE18 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220 -/* 0CFA1C 800CEE1C 0C0335B0 */ jal __osSiRawStartDma -/* 0CFA20 800CEE20 00002025 */ move $a0, $zero -/* 0CFA24 800CEE24 AFA20034 */ sw $v0, 0x34($sp) -/* 0CFA28 800CEE28 8FA40038 */ lw $a0, 0x38($sp) -/* 0CFA2C 800CEE2C 27A50030 */ addiu $a1, $sp, 0x30 -/* 0CFA30 800CEE30 0C0322EC */ jal osRecvMesg -/* 0CFA34 800CEE34 24060001 */ li $a2, 1 -/* 0CFA38 800CEE38 27A4002F */ addiu $a0, $sp, 0x2f -/* 0CFA3C 800CEE3C 0C03354B */ jal __osPfsGetInitData -/* 0CFA40 800CEE40 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CFA44 800CEE44 8FAE003C */ lw $t6, 0x3c($sp) -/* 0CFA48 800CEE48 000E7880 */ sll $t7, $t6, 2 -/* 0CFA4C 800CEE4C 03AFC021 */ addu $t8, $sp, $t7 -/* 0CFA50 800CEE50 9318001E */ lbu $t8, 0x1e($t8) -/* 0CFA54 800CEE54 33190001 */ andi $t9, $t8, 1 -/* 0CFA58 800CEE58 13200006 */ beqz $t9, .L800CEE74 -/* 0CFA5C 800CEE5C 00000000 */ nop -/* 0CFA60 800CEE60 33080002 */ andi $t0, $t8, 2 -/* 0CFA64 800CEE64 11000003 */ beqz $t0, .L800CEE74 -/* 0CFA68 800CEE68 00000000 */ nop -/* 0CFA6C 800CEE6C 10000018 */ b .L800CEED0 -/* 0CFA70 800CEE70 24020002 */ li $v0, 2 -.L800CEE74: -/* 0CFA74 800CEE74 8FA9003C */ lw $t1, 0x3c($sp) -/* 0CFA78 800CEE78 27AB001C */ addiu $t3, $sp, 0x1c -/* 0CFA7C 800CEE7C 00095080 */ sll $t2, $t1, 2 -/* 0CFA80 800CEE80 014B6021 */ addu $t4, $t2, $t3 -/* 0CFA84 800CEE84 918D0003 */ lbu $t5, 3($t4) -/* 0CFA88 800CEE88 15A00005 */ bnez $t5, .L800CEEA0 -/* 0CFA8C 800CEE8C 00000000 */ nop -/* 0CFA90 800CEE90 918E0002 */ lbu $t6, 2($t4) -/* 0CFA94 800CEE94 31CF0001 */ andi $t7, $t6, 1 -/* 0CFA98 800CEE98 15E00003 */ bnez $t7, .L800CEEA8 -/* 0CFA9C 800CEE9C 00000000 */ nop -.L800CEEA0: -/* 0CFAA0 800CEEA0 1000000B */ b .L800CEED0 -/* 0CFAA4 800CEEA4 24020001 */ li $v0, 1 -.L800CEEA8: -/* 0CFAA8 800CEEA8 8FB9003C */ lw $t9, 0x3c($sp) -/* 0CFAAC 800CEEAC 0019C080 */ sll $t8, $t9, 2 -/* 0CFAB0 800CEEB0 03B84021 */ addu $t0, $sp, $t8 -/* 0CFAB4 800CEEB4 9108001E */ lbu $t0, 0x1e($t0) -/* 0CFAB8 800CEEB8 31090004 */ andi $t1, $t0, 4 -/* 0CFABC 800CEEBC 11200003 */ beqz $t1, .L800CEECC -/* 0CFAC0 800CEEC0 00000000 */ nop -/* 0CFAC4 800CEEC4 10000002 */ b .L800CEED0 -/* 0CFAC8 800CEEC8 24020004 */ li $v0, 4 -.L800CEECC: -/* 0CFACC 800CEECC 8FA20034 */ lw $v0, 0x34($sp) -.L800CEED0: -/* 0CFAD0 800CEED0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFAD4 800CEED4 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0CFAD8 800CEED8 03E00008 */ jr $ra -/* 0CFADC 800CEEDC 00000000 */ nop - diff --git a/lib/src/os/osPfsInit.c b/lib/src/os/osPfsInit.c index 1dccaddd..a91592aa 100644 --- a/lib/src/os/osPfsInit.c +++ b/lib/src/os/osPfsInit.c @@ -26,51 +26,35 @@ s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel) { return ret; } -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s") -#else -s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern) -{ +//I would think this should be in it's own file, but it only works here +s32 __osPfsGetStatus(OSMesgQueue *queue, int channel) { s32 ret; OSMesg dummy; - u8 bitpattern; + u8 pattern; 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 < __osMaxControllers; channel++) - { - if ((data[channel].status & CONT_ADDR_CRC_ER) == 0) - { - crc_error_cnt--; - break; - } - } - if (__osMaxControllers == channel) - crc_error_cnt = 0; - if (crc_error_cnt < 1) - { - for (channel = 0; channel < __osMaxControllers; channel++) - { - if (data[channel].errno == 0 && (data[channel].status & CONT_CARD_ON) != 0) - bits |= 1 << channel; - } - __osSiRelAccess(); - *pattern = bits; - return ret; - } + + ret = 0; + __osPfsRequestData(0); + + ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(queue, &dummy, OS_MESG_BLOCK); + + ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(queue, &dummy, OS_MESG_BLOCK); + + __osPfsGetInitData(&pattern, data); + + if (data[channel].status & CONT_CARD_ON && data[channel].status & CONT_CARD_PULL) { + return PFS_ERR_NEW_PACK; } + + if (data[channel].errno || !(data[channel].status & CONT_CARD_ON)) { + return PFS_ERR_NOPACK; + } + + if (data[channel].status & CONT_ADDR_CRC_ER) { + return PFS_ERR_CONTRFAIL; + } + + return ret; } -#endif From 889fd2187d99526714c5ed645ddf20f5384fb912 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:25:05 -0400 Subject: [PATCH 26/46] Match pfsreadwritefile --- .../unknown_0CF330/__osPfsGetNextPage.s | 70 ----- .../unknown_0CF330/osPfsReadWriteFile.s | 290 ------------------ lib/src/os/pfsreadwritefile.c | 116 +++++++ lib/src/os/unknown_0CF330.c | 8 - 4 files changed, 116 insertions(+), 368 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s delete mode 100644 lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s create mode 100644 lib/src/os/pfsreadwritefile.c delete mode 100644 lib/src/os/unknown_0CF330.c diff --git a/lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s b/lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s deleted file mode 100644 index 4b9c74b8..00000000 --- a/lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s +++ /dev/null @@ -1,70 +0,0 @@ -glabel __osPfsGetNextPage -/* 0CFAE0 800CEEE0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CFAE4 800CEEE4 AFA50024 */ sw $a1, 0x24($sp) -/* 0CFAE8 800CEEE8 AFA7002C */ sw $a3, 0x2c($sp) -/* 0CFAEC 800CEEEC 8FB8002C */ lw $t8, 0x2c($sp) -/* 0CFAF0 800CEEF0 8FAE0024 */ lw $t6, 0x24($sp) -/* 0CFAF4 800CEEF4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CFAF8 800CEEF8 AFA40020 */ sw $a0, 0x20($sp) -/* 0CFAFC 800CEEFC AFA60028 */ sw $a2, 0x28($sp) -/* 0CFB00 800CEF00 93190000 */ lbu $t9, ($t8) -/* 0CFB04 800CEF04 91CF0000 */ lbu $t7, ($t6) -/* 0CFB08 800CEF08 11F9000E */ beq $t7, $t9, .L800CEF44 -/* 0CFB0C 800CEF0C 00000000 */ nop -/* 0CFB10 800CEF10 A1D90000 */ sb $t9, ($t6) -/* 0CFB14 800CEF14 8FA80024 */ lw $t0, 0x24($sp) -/* 0CFB18 800CEF18 8FA50028 */ lw $a1, 0x28($sp) -/* 0CFB1C 800CEF1C 8FA40020 */ lw $a0, 0x20($sp) -/* 0CFB20 800CEF20 00003025 */ move $a2, $zero -/* 0CFB24 800CEF24 0C03572F */ jal __osPfsRWInode -/* 0CFB28 800CEF28 91070000 */ lbu $a3, ($t0) -/* 0CFB2C 800CEF2C AFA2001C */ sw $v0, 0x1c($sp) -/* 0CFB30 800CEF30 8FA9001C */ lw $t1, 0x1c($sp) -/* 0CFB34 800CEF34 11200003 */ beqz $t1, .L800CEF44 -/* 0CFB38 800CEF38 00000000 */ nop -/* 0CFB3C 800CEF3C 10000023 */ b .L800CEFCC -/* 0CFB40 800CEF40 01201025 */ move $v0, $t1 -.L800CEF44: -/* 0CFB44 800CEF44 8FAA002C */ lw $t2, 0x2c($sp) -/* 0CFB48 800CEF48 8FAB0028 */ lw $t3, 0x28($sp) -/* 0CFB4C 800CEF4C 914C0001 */ lbu $t4, 1($t2) -/* 0CFB50 800CEF50 000C6840 */ sll $t5, $t4, 1 -/* 0CFB54 800CEF54 016DC021 */ addu $t8, $t3, $t5 -/* 0CFB58 800CEF58 97010000 */ lhu $at, ($t8) -/* 0CFB5C 800CEF5C A5410000 */ sh $at, ($t2) -/* 0CFB60 800CEF60 8FA90020 */ lw $t1, 0x20($sp) -/* 0CFB64 800CEF64 8FAE002C */ lw $t6, 0x2c($sp) -/* 0CFB68 800CEF68 8D2C0060 */ lw $t4, 0x60($t1) -/* 0CFB6C 800CEF6C 95C80000 */ lhu $t0, ($t6) -/* 0CFB70 800CEF70 010C082A */ slt $at, $t0, $t4 -/* 0CFB74 800CEF74 1420000B */ bnez $at, .L800CEFA4 -/* 0CFB78 800CEF78 00000000 */ nop -/* 0CFB7C 800CEF7C 91CB0000 */ lbu $t3, ($t6) -/* 0CFB80 800CEF80 912D0064 */ lbu $t5, 0x64($t1) -/* 0CFB84 800CEF84 016D082A */ slt $at, $t3, $t5 -/* 0CFB88 800CEF88 10200006 */ beqz $at, .L800CEFA4 -/* 0CFB8C 800CEF8C 00000000 */ nop -/* 0CFB90 800CEF90 91CF0001 */ lbu $t7, 1($t6) -/* 0CFB94 800CEF94 19E00003 */ blez $t7, .L800CEFA4 -/* 0CFB98 800CEF98 29E10080 */ slti $at, $t7, 0x80 -/* 0CFB9C 800CEF9C 1420000A */ bnez $at, .L800CEFC8 -/* 0CFBA0 800CEFA0 00000000 */ nop -.L800CEFA4: -/* 0CFBA4 800CEFA4 8FAA002C */ lw $t2, 0x2c($sp) -/* 0CFBA8 800CEFA8 24010001 */ li $at, 1 -/* 0CFBAC 800CEFAC 95580000 */ lhu $t8, ($t2) -/* 0CFBB0 800CEFB0 17010003 */ bne $t8, $at, .L800CEFC0 -/* 0CFBB4 800CEFB4 00000000 */ nop -/* 0CFBB8 800CEFB8 10000004 */ b .L800CEFCC -/* 0CFBBC 800CEFBC 24020005 */ li $v0, 5 -.L800CEFC0: -/* 0CFBC0 800CEFC0 10000002 */ b .L800CEFCC -/* 0CFBC4 800CEFC4 24020003 */ li $v0, 3 -.L800CEFC8: -/* 0CFBC8 800CEFC8 00001025 */ move $v0, $zero -.L800CEFCC: -/* 0CFBCC 800CEFCC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CFBD0 800CEFD0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CFBD4 800CEFD4 03E00008 */ jr $ra -/* 0CFBD8 800CEFD8 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s b/lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s deleted file mode 100644 index 8057a431..00000000 --- a/lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s +++ /dev/null @@ -1,290 +0,0 @@ -glabel osPfsReadWriteFile -/* 0CFBDC 800CEFDC 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 0CFBE0 800CEFE0 AFA40158 */ sw $a0, 0x158($sp) -/* 0CFBE4 800CEFE4 8FAF0158 */ lw $t7, 0x158($sp) -/* 0CFBE8 800CEFE8 AFA5015C */ sw $a1, 0x15c($sp) -/* 0CFBEC 800CEFEC AFBF001C */ sw $ra, 0x1c($sp) -/* 0CFBF0 800CEFF0 AFA60160 */ sw $a2, 0x160($sp) -/* 0CFBF4 800CEFF4 AFA70164 */ sw $a3, 0x164($sp) -/* 0CFBF8 800CEFF8 8FAE015C */ lw $t6, 0x15c($sp) -/* 0CFBFC 800CEFFC 8DF80050 */ lw $t8, 0x50($t7) -/* 0CFC00 800CF000 01D8082A */ slt $at, $t6, $t8 -/* 0CFC04 800CF004 10200003 */ beqz $at, .L800CF014 -/* 0CFC08 800CF008 00000000 */ nop -/* 0CFC0C 800CF00C 05C10003 */ bgez $t6, .L800CF01C -/* 0CFC10 800CF010 00000000 */ nop -.L800CF014: -/* 0CFC14 800CF014 100000ED */ b .L800CF3CC -/* 0CFC18 800CF018 24020005 */ li $v0, 5 -.L800CF01C: -/* 0CFC1C 800CF01C 8FB90168 */ lw $t9, 0x168($sp) -/* 0CFC20 800CF020 1B200004 */ blez $t9, .L800CF034 -/* 0CFC24 800CF024 00000000 */ nop -/* 0CFC28 800CF028 3328001F */ andi $t0, $t9, 0x1f -/* 0CFC2C 800CF02C 11000003 */ beqz $t0, .L800CF03C -/* 0CFC30 800CF030 00000000 */ nop -.L800CF034: -/* 0CFC34 800CF034 100000E5 */ b .L800CF3CC -/* 0CFC38 800CF038 24020005 */ li $v0, 5 -.L800CF03C: -/* 0CFC3C 800CF03C 8FA90164 */ lw $t1, 0x164($sp) -/* 0CFC40 800CF040 05200004 */ bltz $t1, .L800CF054 -/* 0CFC44 800CF044 00000000 */ nop -/* 0CFC48 800CF048 312A001F */ andi $t2, $t1, 0x1f -/* 0CFC4C 800CF04C 11400003 */ beqz $t2, .L800CF05C -/* 0CFC50 800CF050 00000000 */ nop -.L800CF054: -/* 0CFC54 800CF054 100000DD */ b .L800CF3CC -/* 0CFC58 800CF058 24020005 */ li $v0, 5 -.L800CF05C: -/* 0CFC5C 800CF05C 8FAB0158 */ lw $t3, 0x158($sp) -/* 0CFC60 800CF060 8D6C0000 */ lw $t4, ($t3) -/* 0CFC64 800CF064 318D0001 */ andi $t5, $t4, 1 -/* 0CFC68 800CF068 15A00003 */ bnez $t5, .L800CF078 -/* 0CFC6C 800CF06C 00000000 */ nop -/* 0CFC70 800CF070 100000D6 */ b .L800CF3CC -/* 0CFC74 800CF074 24020005 */ li $v0, 5 -.L800CF078: -/* 0CFC78 800CF078 0C0356F0 */ jal __osCheckId -/* 0CFC7C 800CF07C 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFC80 800CF080 24010002 */ li $at, 2 -/* 0CFC84 800CF084 14410003 */ bne $v0, $at, .L800CF094 -/* 0CFC88 800CF088 00000000 */ nop -/* 0CFC8C 800CF08C 100000CF */ b .L800CF3CC -/* 0CFC90 800CF090 24020002 */ li $v0, 2 -.L800CF094: -/* 0CFC94 800CF094 8FAF0158 */ lw $t7, 0x158($sp) -/* 0CFC98 800CF098 91F80065 */ lbu $t8, 0x65($t7) -/* 0CFC9C 800CF09C 1300000A */ beqz $t8, .L800CF0C8 -/* 0CFCA0 800CF0A0 00000000 */ nop -/* 0CFCA4 800CF0A4 A1E00065 */ sb $zero, 0x65($t7) -/* 0CFCA8 800CF0A8 0C0357F7 */ jal __osPfsSelectBank -/* 0CFCAC 800CF0AC 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFCB0 800CF0B0 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFCB4 800CF0B4 8FAE0154 */ lw $t6, 0x154($sp) -/* 0CFCB8 800CF0B8 11C00003 */ beqz $t6, .L800CF0C8 -/* 0CFCBC 800CF0BC 00000000 */ nop -/* 0CFCC0 800CF0C0 100000C2 */ b .L800CF3CC -/* 0CFCC4 800CF0C4 01C01025 */ move $v0, $t6 -.L800CF0C8: -/* 0CFCC8 800CF0C8 8FB90158 */ lw $t9, 0x158($sp) -/* 0CFCCC 800CF0CC 8FA9015C */ lw $t1, 0x15c($sp) -/* 0CFCD0 800CF0D0 27A70134 */ addiu $a3, $sp, 0x134 -/* 0CFCD4 800CF0D4 8F28005C */ lw $t0, 0x5c($t9) -/* 0CFCD8 800CF0D8 8F240004 */ lw $a0, 4($t9) -/* 0CFCDC 800CF0DC 8F250008 */ lw $a1, 8($t9) -/* 0CFCE0 800CF0E0 0C033728 */ jal __osContRamRead -/* 0CFCE4 800CF0E4 01093021 */ addu $a2, $t0, $t1 -/* 0CFCE8 800CF0E8 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFCEC 800CF0EC 8FAA0154 */ lw $t2, 0x154($sp) -/* 0CFCF0 800CF0F0 11400003 */ beqz $t2, .L800CF100 -/* 0CFCF4 800CF0F4 00000000 */ nop -/* 0CFCF8 800CF0F8 100000B4 */ b .L800CF3CC -/* 0CFCFC 800CF0FC 01401025 */ move $v0, $t2 -.L800CF100: -/* 0CFD00 800CF100 8FAC0158 */ lw $t4, 0x158($sp) -/* 0CFD04 800CF104 97AB013A */ lhu $t3, 0x13a($sp) -/* 0CFD08 800CF108 8D8D0060 */ lw $t5, 0x60($t4) -/* 0CFD0C 800CF10C 016D082A */ slt $at, $t3, $t5 -/* 0CFD10 800CF110 1420000B */ bnez $at, .L800CF140 -/* 0CFD14 800CF114 00000000 */ nop -/* 0CFD18 800CF118 93B8013A */ lbu $t8, 0x13a($sp) -/* 0CFD1C 800CF11C 918F0064 */ lbu $t7, 0x64($t4) -/* 0CFD20 800CF120 030F082A */ slt $at, $t8, $t7 -/* 0CFD24 800CF124 10200006 */ beqz $at, .L800CF140 -/* 0CFD28 800CF128 00000000 */ nop -/* 0CFD2C 800CF12C 93AE013B */ lbu $t6, 0x13b($sp) -/* 0CFD30 800CF130 19C00003 */ blez $t6, .L800CF140 -/* 0CFD34 800CF134 29C10080 */ slti $at, $t6, 0x80 -/* 0CFD38 800CF138 14200009 */ bnez $at, .L800CF160 -/* 0CFD3C 800CF13C 00000000 */ nop -.L800CF140: -/* 0CFD40 800CF140 97B9013A */ lhu $t9, 0x13a($sp) -/* 0CFD44 800CF144 24010001 */ li $at, 1 -/* 0CFD48 800CF148 17210003 */ bne $t9, $at, .L800CF158 -/* 0CFD4C 800CF14C 00000000 */ nop -/* 0CFD50 800CF150 1000009E */ b .L800CF3CC -/* 0CFD54 800CF154 24020005 */ li $v0, 5 -.L800CF158: -/* 0CFD58 800CF158 1000009C */ b .L800CF3CC -/* 0CFD5C 800CF15C 24020003 */ li $v0, 3 -.L800CF160: -/* 0CFD60 800CF160 93A80163 */ lbu $t0, 0x163($sp) -/* 0CFD64 800CF164 15000007 */ bnez $t0, .L800CF184 -/* 0CFD68 800CF168 00000000 */ nop -/* 0CFD6C 800CF16C 93A9013C */ lbu $t1, 0x13c($sp) -/* 0CFD70 800CF170 312A0002 */ andi $t2, $t1, 2 -/* 0CFD74 800CF174 15400003 */ bnez $t2, .L800CF184 -/* 0CFD78 800CF178 00000000 */ nop -/* 0CFD7C 800CF17C 10000093 */ b .L800CF3CC -/* 0CFD80 800CF180 24020006 */ li $v0, 6 -.L800CF184: -/* 0CFD84 800CF184 8FAD0164 */ lw $t5, 0x164($sp) -/* 0CFD88 800CF188 97B8013A */ lhu $t8, 0x13a($sp) -/* 0CFD8C 800CF18C 240B00FF */ li $t3, 255 -/* 0CFD90 800CF190 A3AB0023 */ sb $t3, 0x23($sp) -/* 0CFD94 800CF194 05A10003 */ bgez $t5, .L800CF1A4 -/* 0CFD98 800CF198 000D6143 */ sra $t4, $t5, 5 -/* 0CFD9C 800CF19C 25A1001F */ addiu $at, $t5, 0x1f -/* 0CFDA0 800CF1A0 00016143 */ sra $t4, $at, 5 -.L800CF1A4: -/* 0CFDA4 800CF1A4 AFAC002C */ sw $t4, 0x2c($sp) -/* 0CFDA8 800CF1A8 8FAF002C */ lw $t7, 0x2c($sp) -/* 0CFDAC 800CF1AC A7B80030 */ sh $t8, 0x30($sp) -/* 0CFDB0 800CF1B0 29E10008 */ slti $at, $t7, 8 -/* 0CFDB4 800CF1B4 14200013 */ bnez $at, .L800CF204 -/* 0CFDB8 800CF1B8 00000000 */ nop -.L800CF1BC: -/* 0CFDBC 800CF1BC 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFDC0 800CF1C0 27A50023 */ addiu $a1, $sp, 0x23 -/* 0CFDC4 800CF1C4 27A60034 */ addiu $a2, $sp, 0x34 -/* 0CFDC8 800CF1C8 0C033BB8 */ jal __osPfsGetNextPage -/* 0CFDCC 800CF1CC 27A70030 */ addiu $a3, $sp, 0x30 -/* 0CFDD0 800CF1D0 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFDD4 800CF1D4 8FAE0154 */ lw $t6, 0x154($sp) -/* 0CFDD8 800CF1D8 11C00003 */ beqz $t6, .L800CF1E8 -/* 0CFDDC 800CF1DC 00000000 */ nop -/* 0CFDE0 800CF1E0 1000007A */ b .L800CF3CC -/* 0CFDE4 800CF1E4 01C01025 */ move $v0, $t6 -.L800CF1E8: -/* 0CFDE8 800CF1E8 8FB9002C */ lw $t9, 0x2c($sp) -/* 0CFDEC 800CF1EC 2728FFF8 */ addiu $t0, $t9, -8 -/* 0CFDF0 800CF1F0 AFA8002C */ sw $t0, 0x2c($sp) -/* 0CFDF4 800CF1F4 8FA9002C */ lw $t1, 0x2c($sp) -/* 0CFDF8 800CF1F8 29210008 */ slti $at, $t1, 8 -/* 0CFDFC 800CF1FC 1020FFEF */ beqz $at, .L800CF1BC -/* 0CFE00 800CF200 00000000 */ nop -.L800CF204: -/* 0CFE04 800CF204 8FAA0168 */ lw $t2, 0x168($sp) -/* 0CFE08 800CF208 8FAD016C */ lw $t5, 0x16c($sp) -/* 0CFE0C 800CF20C 05410003 */ bgez $t2, .L800CF21C -/* 0CFE10 800CF210 000A5943 */ sra $t3, $t2, 5 -/* 0CFE14 800CF214 2541001F */ addiu $at, $t2, 0x1f -/* 0CFE18 800CF218 00015943 */ sra $t3, $at, 5 -.L800CF21C: -/* 0CFE1C 800CF21C AFAB0028 */ sw $t3, 0x28($sp) -/* 0CFE20 800CF220 19600046 */ blez $t3, .L800CF33C -/* 0CFE24 800CF224 AFAD0024 */ sw $t5, 0x24($sp) -.L800CF228: -/* 0CFE28 800CF228 8FAC002C */ lw $t4, 0x2c($sp) -/* 0CFE2C 800CF22C 24010008 */ li $at, 8 -/* 0CFE30 800CF230 1581000D */ bne $t4, $at, .L800CF268 -/* 0CFE34 800CF234 00000000 */ nop -/* 0CFE38 800CF238 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFE3C 800CF23C 27A50023 */ addiu $a1, $sp, 0x23 -/* 0CFE40 800CF240 27A60034 */ addiu $a2, $sp, 0x34 -/* 0CFE44 800CF244 0C033BB8 */ jal __osPfsGetNextPage -/* 0CFE48 800CF248 27A70030 */ addiu $a3, $sp, 0x30 -/* 0CFE4C 800CF24C AFA20154 */ sw $v0, 0x154($sp) -/* 0CFE50 800CF250 8FB80154 */ lw $t8, 0x154($sp) -/* 0CFE54 800CF254 13000003 */ beqz $t8, .L800CF264 -/* 0CFE58 800CF258 00000000 */ nop -/* 0CFE5C 800CF25C 1000005B */ b .L800CF3CC -/* 0CFE60 800CF260 03001025 */ move $v0, $t8 -.L800CF264: -/* 0CFE64 800CF264 AFA0002C */ sw $zero, 0x2c($sp) -.L800CF268: -/* 0CFE68 800CF268 8FAF0158 */ lw $t7, 0x158($sp) -/* 0CFE6C 800CF26C 93B90030 */ lbu $t9, 0x30($sp) -/* 0CFE70 800CF270 91EE0065 */ lbu $t6, 0x65($t7) -/* 0CFE74 800CF274 11D9000A */ beq $t6, $t9, .L800CF2A0 -/* 0CFE78 800CF278 00000000 */ nop -/* 0CFE7C 800CF27C A1F90065 */ sb $t9, 0x65($t7) -/* 0CFE80 800CF280 0C0357F7 */ jal __osPfsSelectBank -/* 0CFE84 800CF284 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFE88 800CF288 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFE8C 800CF28C 8FA80154 */ lw $t0, 0x154($sp) -/* 0CFE90 800CF290 11000003 */ beqz $t0, .L800CF2A0 -/* 0CFE94 800CF294 00000000 */ nop -/* 0CFE98 800CF298 1000004C */ b .L800CF3CC -/* 0CFE9C 800CF29C 01001025 */ move $v0, $t0 -.L800CF2A0: -/* 0CFEA0 800CF2A0 93A90031 */ lbu $t1, 0x31($sp) -/* 0CFEA4 800CF2A4 8FAD002C */ lw $t5, 0x2c($sp) -/* 0CFEA8 800CF2A8 93AC0163 */ lbu $t4, 0x163($sp) -/* 0CFEAC 800CF2AC 000950C0 */ sll $t2, $t1, 3 -/* 0CFEB0 800CF2B0 014D5821 */ addu $t3, $t2, $t5 -/* 0CFEB4 800CF2B4 15800009 */ bnez $t4, .L800CF2DC -/* 0CFEB8 800CF2B8 A7AB0020 */ sh $t3, 0x20($sp) -/* 0CFEBC 800CF2BC 8FB80158 */ lw $t8, 0x158($sp) -/* 0CFEC0 800CF2C0 3166FFFF */ andi $a2, $t3, 0xffff -/* 0CFEC4 800CF2C4 8FA70024 */ lw $a3, 0x24($sp) -/* 0CFEC8 800CF2C8 8F040004 */ lw $a0, 4($t8) -/* 0CFECC 800CF2CC 0C033728 */ jal __osContRamRead -/* 0CFED0 800CF2D0 8F050008 */ lw $a1, 8($t8) -/* 0CFED4 800CF2D4 10000009 */ b .L800CF2FC -/* 0CFED8 800CF2D8 AFA20154 */ sw $v0, 0x154($sp) -.L800CF2DC: -/* 0CFEDC 800CF2DC 8FAE0158 */ lw $t6, 0x158($sp) -/* 0CFEE0 800CF2E0 97A60020 */ lhu $a2, 0x20($sp) -/* 0CFEE4 800CF2E4 8FA70024 */ lw $a3, 0x24($sp) -/* 0CFEE8 800CF2E8 8DC40004 */ lw $a0, 4($t6) -/* 0CFEEC 800CF2EC 8DC50008 */ lw $a1, 8($t6) -/* 0CFEF0 800CF2F0 0C03363C */ jal __osContRamWrite -/* 0CFEF4 800CF2F4 AFA00010 */ sw $zero, 0x10($sp) -/* 0CFEF8 800CF2F8 AFA20154 */ sw $v0, 0x154($sp) -.L800CF2FC: -/* 0CFEFC 800CF2FC 8FB90154 */ lw $t9, 0x154($sp) -/* 0CFF00 800CF300 13200003 */ beqz $t9, .L800CF310 -/* 0CFF04 800CF304 00000000 */ nop -/* 0CFF08 800CF308 10000030 */ b .L800CF3CC -/* 0CFF0C 800CF30C 03201025 */ move $v0, $t9 -.L800CF310: -/* 0CFF10 800CF310 8FAD0028 */ lw $t5, 0x28($sp) -/* 0CFF14 800CF314 8FAF0024 */ lw $t7, 0x24($sp) -/* 0CFF18 800CF318 8FA9002C */ lw $t1, 0x2c($sp) -/* 0CFF1C 800CF31C 25ACFFFF */ addiu $t4, $t5, -1 -/* 0CFF20 800CF320 AFAC0028 */ sw $t4, 0x28($sp) -/* 0CFF24 800CF324 8FB80028 */ lw $t8, 0x28($sp) -/* 0CFF28 800CF328 25E80020 */ addiu $t0, $t7, 0x20 -/* 0CFF2C 800CF32C 252A0001 */ addiu $t2, $t1, 1 -/* 0CFF30 800CF330 AFA80024 */ sw $t0, 0x24($sp) -/* 0CFF34 800CF334 1F00FFBC */ bgtz $t8, .L800CF228 -/* 0CFF38 800CF338 AFAA002C */ sw $t2, 0x2c($sp) -.L800CF33C: -/* 0CFF3C 800CF33C 93AB0163 */ lbu $t3, 0x163($sp) -/* 0CFF40 800CF340 24010001 */ li $at, 1 -/* 0CFF44 800CF344 15610020 */ bne $t3, $at, .L800CF3C8 -/* 0CFF48 800CF348 00000000 */ nop -/* 0CFF4C 800CF34C 93AE013C */ lbu $t6, 0x13c($sp) -/* 0CFF50 800CF350 31D90002 */ andi $t9, $t6, 2 -/* 0CFF54 800CF354 1720001C */ bnez $t9, .L800CF3C8 -/* 0CFF58 800CF358 00000000 */ nop -/* 0CFF5C 800CF35C 8FA80158 */ lw $t0, 0x158($sp) -/* 0CFF60 800CF360 35CF0002 */ ori $t7, $t6, 2 -/* 0CFF64 800CF364 A3AF013C */ sb $t7, 0x13c($sp) -/* 0CFF68 800CF368 A1000065 */ sb $zero, 0x65($t0) -/* 0CFF6C 800CF36C 0C0357F7 */ jal __osPfsSelectBank -/* 0CFF70 800CF370 8FA40158 */ lw $a0, 0x158($sp) -/* 0CFF74 800CF374 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFF78 800CF378 8FA90154 */ lw $t1, 0x154($sp) -/* 0CFF7C 800CF37C 11200003 */ beqz $t1, .L800CF38C -/* 0CFF80 800CF380 00000000 */ nop -/* 0CFF84 800CF384 10000011 */ b .L800CF3CC -/* 0CFF88 800CF388 01201025 */ move $v0, $t1 -.L800CF38C: -/* 0CFF8C 800CF38C 8FAA0158 */ lw $t2, 0x158($sp) -/* 0CFF90 800CF390 8FAC015C */ lw $t4, 0x15c($sp) -/* 0CFF94 800CF394 27A70134 */ addiu $a3, $sp, 0x134 -/* 0CFF98 800CF398 8D4D005C */ lw $t5, 0x5c($t2) -/* 0CFF9C 800CF39C 8D440004 */ lw $a0, 4($t2) -/* 0CFFA0 800CF3A0 8D450008 */ lw $a1, 8($t2) -/* 0CFFA4 800CF3A4 AFA00010 */ sw $zero, 0x10($sp) -/* 0CFFA8 800CF3A8 0C03363C */ jal __osContRamWrite -/* 0CFFAC 800CF3AC 01AC3021 */ addu $a2, $t5, $t4 -/* 0CFFB0 800CF3B0 AFA20154 */ sw $v0, 0x154($sp) -/* 0CFFB4 800CF3B4 8FB80154 */ lw $t8, 0x154($sp) -/* 0CFFB8 800CF3B8 13000003 */ beqz $t8, .L800CF3C8 -/* 0CFFBC 800CF3BC 00000000 */ nop -/* 0CFFC0 800CF3C0 10000002 */ b .L800CF3CC -/* 0CFFC4 800CF3C4 03001025 */ move $v0, $t8 -.L800CF3C8: -/* 0CFFC8 800CF3C8 00001025 */ move $v0, $zero -.L800CF3CC: -/* 0CFFCC 800CF3CC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CFFD0 800CF3D0 27BD0158 */ addiu $sp, $sp, 0x158 -/* 0CFFD4 800CF3D4 03E00008 */ jr $ra -/* 0CFFD8 800CF3D8 00000000 */ nop - -/* 0CFFDC 800CF3DC 00000000 */ nop - diff --git a/lib/src/os/pfsreadwritefile.c b/lib/src/os/pfsreadwritefile.c new file mode 100644 index 00000000..122087a6 --- /dev/null +++ b/lib/src/os/pfsreadwritefile.c @@ -0,0 +1,116 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CEEE0 */ + +#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)); + + /* + libreultra only + if (dir.company_code == 0 || dir.game_code == 0) + return PFS_ERR_INVALID; + */ + + 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; + +} diff --git a/lib/src/os/unknown_0CF330.c b/lib/src/os/unknown_0CF330.c deleted file mode 100644 index fac4b485..00000000 --- a/lib/src/os/unknown_0CF330.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800CEEE0 */ - -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s") From 1db5467b0213634cb8b5c2f8de435b3e60b2eb3a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:42:28 -0400 Subject: [PATCH 27/46] Match osSpTaskYielded and clean up an unknown file a little --- lib/src/os/siacs.c | 2 +- lib/src/os/unknown_0D29F0.c | 80 +++++++++++-------------------------- 2 files changed, 25 insertions(+), 57 deletions(-) diff --git a/lib/src/os/siacs.c b/lib/src/os/siacs.c index a499b237..813c45c3 100644 --- a/lib/src/os/siacs.c +++ b/lib/src/os/siacs.c @@ -22,7 +22,7 @@ s32 viCounterMsg[6]; u16 retrace; //Used in viMgrMain, but it's supposed to be static in that function u16 D_8012D192; s32 D_8012D194[2]; -s32 D_8012D1A0[16]; +OSTask tmp_task; #define PI_Q_BUF_LEN 1 OSMesg piAccessBuf[PI_Q_BUF_LEN]; //Should be static, but this works for now s32 __osPiAccessQueue[6]; diff --git a/lib/src/os/unknown_0D29F0.c b/lib/src/os/unknown_0D29F0.c index bfbaad0b..5e7f4a42 100644 --- a/lib/src/os/unknown_0D29F0.c +++ b/lib/src/os/unknown_0D29F0.c @@ -1,40 +1,32 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D1DF0 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" - -typedef struct -{ - /* 0x0 */ f32 factor; - /* 0x4 */ u16 offset; - /* 0x8 */ u32 scale; -} __OSViScale; - -typedef struct -{ - /* 0x0 */ u16 state; - /* 0x2 */ u16 retraceCount; - /* 0x4 */ void *framep; - /* 0x8 */ OSViMode *modep; - /* 0xC */ u32 control; - /* 0x10 */ OSMesgQueue *msgq; - /* 0x14 */ OSMesg msg; - /* 0x18 */ __OSViScale x; - /* 0x24 */ __OSViScale y; -} __OSViContext; +#include "viint.h" __OSViContext vi[2] = {0}; - __OSViContext *__osViCurr = &vi[0]; __OSViContext *__osViNext = &vi[1]; //TODO: This should be defined above osInitialize -#define VI_NTSC_CLOCK 48681812 +#define OS_TASK_YIELDED 0x0001 +#define OS_TASK_DP_WAIT 0x0002 s32 osViClock = VI_NTSC_CLOCK; -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osSpTaskYielded.s") +OSYieldResult osSpTaskYielded(OSTask *tp) { + u32 status; + OSYieldResult result; + status = __osSpGetStatus(); + if (status & SP_STATUS_YIELDED) + result = OS_TASK_YIELDED; + else + result = 0; + if (status & SP_STATUS_YIELD) { + tp->t.flags |= result; + tp->t.flags &= ~(OS_TASK_DP_WAIT); + } + return result; +} void *osViGetCurrentFramebuffer(void){ register u32 saveMask; @@ -56,38 +48,15 @@ void *osViGetNextFramebuffer(void){ return framep; } - -//TODO Split into sptask.c and seperate header - -#define OS_TASK_YIELDED 0x0001 - -#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ -#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ -#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ -#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ -#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */ -#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */ -#define SP_CLR_SIG2 0x02000 /* Bit 11: clear signal 1 */ - - - -#define SP_CLR_YIELD SP_CLR_SIG0 -#define SP_CLR_YIELDED SP_CLR_SIG1 -#define SP_CLR_TASKDONE SP_CLR_SIG2 - -#define SP_IMEM_START 0x04001000 /* read/write */ - #define _osVirtualToPhysical(ptr) \ - if (ptr != NULL) \ - { \ + if (ptr != NULL) { \ ptr = (void *)osVirtualToPhysical(ptr); \ } -extern OSTask D_8012D1A0; -OSTask *_VirtualToPhysicalTask(OSTask *intp) -{ +extern OSTask tmp_task; +OSTask *_VirtualToPhysicalTask(OSTask *intp) { OSTask *tp; - tp = &D_8012D1A0; + tp = &tmp_task; bcopy(intp, tp, sizeof(OSTask)); _osVirtualToPhysical(tp->t.ucode); @@ -100,16 +69,15 @@ OSTask *_VirtualToPhysicalTask(OSTask *intp) return tp; } -void osSpTaskLoad(OSTask *intp){ - +void osSpTaskLoad(OSTask *intp) { OSTask *tp; tp = _VirtualToPhysicalTask(intp); - if (tp->t.flags & OS_TASK_YIELDED) - { + if (tp->t.flags & OS_TASK_YIELDED) { tp->t.ucode_data = tp->t.yield_data_ptr; tp->t.ucode_data_size = tp->t.yield_data_size; intp->t.flags &= ~OS_TASK_YIELDED; } + osWritebackDCache(tp, sizeof(OSTask)); __osSpSetStatus(SP_CLR_YIELD | SP_CLR_YIELDED | SP_CLR_TASKDONE | SP_SET_INTR_BREAK); while (__osSpSetPc(SP_IMEM_START) == -1) From 6622c7a7fdd0ca93c418fce82a5cb9d120b53fcf Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:49:21 -0400 Subject: [PATCH 28/46] split up some files --- lib/src/al/global_asm/alSynDelete.c | 8 ++++++++ lib/src/os/devmgr.c | 8 ++++++++ lib/src/os/{unknown_0D3360.c => thread.c} | 14 +++----------- lib/src/os/vi.c | 8 ++++++++ 4 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 lib/src/al/global_asm/alSynDelete.c create mode 100644 lib/src/os/devmgr.c rename lib/src/os/{unknown_0D3360.c => thread.c} (56%) create mode 100644 lib/src/os/vi.c diff --git a/lib/src/al/global_asm/alSynDelete.c b/lib/src/al/global_asm/alSynDelete.c new file mode 100644 index 00000000..67877556 --- /dev/null +++ b/lib/src/al/global_asm/alSynDelete.c @@ -0,0 +1,8 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2C60 */ + +#include "types.h" +#include "macros.h" +#include "libultra_internal.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/alSynDelete.s") diff --git a/lib/src/os/devmgr.c b/lib/src/os/devmgr.c new file mode 100644 index 00000000..b0e8ca91 --- /dev/null +++ b/lib/src/os/devmgr.c @@ -0,0 +1,8 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2760 */ + +#include "types.h" +#include "macros.h" +#include "libultra_internal.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s") diff --git a/lib/src/os/unknown_0D3360.c b/lib/src/os/thread.c similarity index 56% rename from lib/src/os/unknown_0D3360.c rename to lib/src/os/thread.c index fe43830f..2a9f9889 100644 --- a/lib/src/os/unknown_0D3360.c +++ b/lib/src/os/thread.c @@ -1,23 +1,15 @@ /* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D2760 */ +/* RAM_POS: 0x800D2C70 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osViInit.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/alSynDelete.s") - void __osDequeueThread(OSThread **queue, OSThread *t) { register OSThread *pred; register OSThread *succ; pred = (OSThread *)queue; //this is actually legit.. succ = pred->next; - while (succ != NULL) - { - if (succ == t) - { + while (succ != NULL) { + if (succ == t) { pred->next = t->next; return; } diff --git a/lib/src/os/vi.c b/lib/src/os/vi.c new file mode 100644 index 00000000..6f0f1550 --- /dev/null +++ b/lib/src/os/vi.c @@ -0,0 +1,8 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2B10 */ + +#include "types.h" +#include "macros.h" +#include "libultra_internal.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osViInit.s") From 719488f4d4aa0974491e81255b7e3cc3f060c3d3 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Wed, 6 Oct 2021 21:50:04 -0400 Subject: [PATCH 29/46] Added a mips_to_c script to make it easier to use it --- .gitignore | 4 ++++ mips_to_c.sh | 4 ++++ 2 files changed, 8 insertions(+) create mode 100755 mips_to_c.sh diff --git a/.gitignore b/.gitignore index 35213355..f1901f2f 100755 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,10 @@ ucode/ # Linker file is automatically generated, so it should be ignored dkr.ld +# CTX files for mips2c should be ignored as we generate those +ctx.c +ctx_includes.c + # Misc stuff that should be ignored. .*/ diff --git a/mips_to_c.sh b/mips_to_c.sh new file mode 100755 index 00000000..17f5913d --- /dev/null +++ b/mips_to_c.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +ASMFILE=$(find . -type f -name "*$1.s") +python3 ../mips_to_c/mips_to_c.py --context ctx.c -f $1 $ASMFILE > $1.c \ No newline at end of file From 8330fceda48a1df1c721e201a7abc126efa3543f Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 7 Oct 2021 09:30:34 -0400 Subject: [PATCH 30/46] Move set_rsp_segment to it's own file outside of the os functions --- .../{func_80079818.s => __scHandleRetrace.s} | 2 +- lib/asm/non_matchings/sched/__scMain.s | 2 +- lib/src/mips1/os/osCreatePiManager.c | 11 +++---- lib/src/mips1/sc/sched.c | 29 ++++++++----------- lib/src/mips1/sc/sched.h | 7 ++--- src/set_rsp_segment.c | 11 +++++++ src/set_rsp_segment.h | 8 +++++ src/unknown_06B2B0.c | 2 +- 8 files changed, 40 insertions(+), 32 deletions(-) rename lib/asm/non_matchings/sched/{func_80079818.s => __scHandleRetrace.s} (99%) create mode 100644 src/set_rsp_segment.c create mode 100644 src/set_rsp_segment.h diff --git a/lib/asm/non_matchings/sched/func_80079818.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s similarity index 99% rename from lib/asm/non_matchings/sched/func_80079818.s rename to lib/asm/non_matchings/sched/__scHandleRetrace.s index 2be643fd..66380241 100644 --- a/lib/asm/non_matchings/sched/func_80079818.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -1,4 +1,4 @@ -glabel func_80079818 +glabel __scHandleRetrace /* 07A418 80079818 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 07A41C 8007981C AFBF001C */ sw $ra, 0x1c($sp) /* 07A420 80079820 AFB10018 */ sw $s1, 0x18($sp) diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s index dbdb3495..94f79fe5 100644 --- a/lib/asm/non_matchings/sched/__scMain.s +++ b/lib/asm/non_matchings/sched/__scMain.s @@ -40,7 +40,7 @@ glabel __scMain /* 07A240 80079640 10000020 */ b .L800796C4 /* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) .L80079648: -/* 07A248 80079648 0C01E606 */ jal func_80079818 +/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace /* 07A24C 8007964C 02402025 */ move $a0, $s2 /* 07A250 80079650 1000FFEC */ b .L80079604 /* 07A254 80079654 02602025 */ move $a0, $s3 diff --git a/lib/src/mips1/os/osCreatePiManager.c b/lib/src/mips1/os/osCreatePiManager.c index 00fd25cf..60f73842 100644 --- a/lib/src/mips1/os/osCreatePiManager.c +++ b/lib/src/mips1/os/osCreatePiManager.c @@ -12,7 +12,7 @@ void __osDevMgrMain(void); // bss variables OSThread piThread; -s32 D_8012A9B0[64]; +u8 piThreadStack_2[256]; // piThreadStack[OS_PIM_STACKSIZE]; Shouldn't this be piThreadStack? OSMesgQueue piEventQueue; OSMesg piEventBuf[2]; @@ -20,8 +20,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC u32 savedMask; OSPri oldPri; OSPri myPri; - if (!__osPiDevMgr.active) - { + if (!__osPiDevMgr.active) { osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); osCreateMesgQueue(&piEventQueue, (OSMesg*)&piEventBuf, 1); if (!__osPiAccessQueueEnabled) @@ -29,8 +28,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222); oldPri = -1; myPri = osGetThreadPri(NULL); - if (myPri < pri) - { + if (myPri < pri) { oldPri = myPri; osSetThreadPri(NULL, pri); } @@ -46,8 +44,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC osCreateThread(&piThread, 0, __osDevMgrMain, &__osPiDevMgr, &piThreadStack[OS_PIM_STACKSIZE], pri); osStartThread(&piThread); __osRestoreInt(savedMask); - if (oldPri != -1) - { + if (oldPri != -1) { osSetThreadPri(NULL, oldPri); } } diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 5cb2a9d5..e8f6cf06 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -54,14 +54,14 @@ const char D_800E7958[] = "\tdata_size\t\t= %u\n"; s32 D_80126110; s32 D_80126114; -OSTime D_80126118; +OSTime gYieldTime; s32 D_80126120; s32 D_80126124; s32 D_80126128[18]; /*******************************/ -void func_8007A080(OSSched *sc); +void __scYield(OSSched *sc); void __scMain(void); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); @@ -153,6 +153,7 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") +//__scHandleRetrace equivalent for unk284? void func_80079760(OSSched *sc) { s32 sp24; s32 sp20; @@ -164,7 +165,7 @@ void func_80079760(OSSched *sc) { sc->unk284 = 1; } if ((sc->unk284 != 0) && (sc->curRSPTask != 0)) { - func_8007A080(sc); + __scYield(sc); } else { sp24 = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); if (__scSchedule(sc, &sp20, &sp1C, sp24) != sp24) { @@ -178,10 +179,10 @@ void dummy_80079808() { void dummy_80079810() { } -GLOBAL_ASM("lib/asm/non_matchings/sched/func_80079818.s") +GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace.s") GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRSP.s") -void __scHandleRDP(OSSched *sc){ +void __scHandleRDP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; s32 state; @@ -198,7 +199,7 @@ void __scHandleRDP(OSSched *sc){ } -OSScTask *__scTaskReady(OSScTask *t){ +OSScTask *__scTaskReady(OSScTask *t) { if (t) { /* * If there is a pending swap bail out til later (next @@ -255,15 +256,14 @@ GLOBAL_ASM("lib/asm/non_matchings/sched/__scTaskComplete.s") void __scAppendList(OSSched *sc, OSScTask *t) { u32 tmp = t->list.t.type; - if (tmp == 2){ + if (tmp == 2) { if(sc->audioListTail) sc->audioListTail->next = t; else sc->audioListHead = t; sc->audioListTail = t; - } - else{ + } else { if(sc->gfxListTail) sc->gfxListTail->next = t; else @@ -300,17 +300,12 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp){ } } -void func_8007A080(OSSched *sc) { +void __scYield(OSSched *sc) { if (sc->curRSPTask->list.t.type == M_GFXTASK) { - sc->curRSPTask->state |= 0x10; - D_80126118 = osGetTime(); + sc->curRSPTask->state |= OS_SC_YIELD; + gYieldTime = osGetTime(); osSpTaskYield(); } } GLOBAL_ASM("lib/asm/non_matchings/sched/__scSchedule.s") - -// This might need to be moved into it's own file. -void set_rsp_segment(Gfx **dlist, s32 segment, s32 base) { - gSPSegment((*dlist)++, segment, base + 0x80000000) -} diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 9fa4a8a5..7e84b88a 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -9,7 +9,7 @@ #define OS_SC_PRE_NMI_MSG 4 #define OS_SC_MAX_MESGS 8 -#define OS_SC_YIELD 2 +#define OS_SC_YIELD 0x10 typedef struct { short type; @@ -67,7 +67,7 @@ extern OSViMode osViModeTable[]; /*******************************/ -void func_8007A080(OSSched *sc); +void __scYield(OSSched *sc); void __scMain(void); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields); @@ -82,8 +82,5 @@ OSScTask *__scTaskReady(OSScTask *t); s32 __scTaskComplete(OSSched *sc, OSScTask *t); void __scAppendList(OSSched *sc, OSScTask *t); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); -void func_8007A080(OSSched *sc); -// This might need to be moved into it's own file. -void set_rsp_segment(Gfx **dlist, s32 segment, s32 base); #endif diff --git a/src/set_rsp_segment.c b/src/set_rsp_segment.c new file mode 100644 index 00000000..942923b6 --- /dev/null +++ b/src/set_rsp_segment.c @@ -0,0 +1,11 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8007A2D0 */ + +#include "set_rsp_segment.h" +#include "PR/mbi.h" +#include "PR/gbi.h" +#include "PR/R4300.h" + +void set_rsp_segment(Gfx **dlist, s32 segment, s32 base) { + gSPSegment((*dlist)++, segment, base + K0BASE) +} diff --git a/src/set_rsp_segment.h b/src/set_rsp_segment.h new file mode 100644 index 00000000..e0145fe4 --- /dev/null +++ b/src/set_rsp_segment.h @@ -0,0 +1,8 @@ +#ifndef _SET_RSP_SEGMENT_H_ +#define _SET_RSP_SEGMENT_H_ + +#include "PR/gbi.h" + +void set_rsp_segment(Gfx **dlist, s32 segment, s32 base); + +#endif diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 8a382719..16539808 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -15,7 +15,7 @@ #include "asset_loading.h" #include "menu.h" #include "video.h" -#include "lib/src/mips1/sc/sched.h" +#include "set_rsp_segment.h" #include "gzip.h" #include "printf.h" #include "thread0_epc.h" From 5cf5f655ef926e20ceb384ee37c13b46ef71e7f1 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 7 Oct 2021 11:36:02 -0400 Subject: [PATCH 31/46] Nearly have __scHandleRSP --- ...dleRetrace.s => __scHandleRetrace_Maybe.s} | 2 +- lib/asm/non_matchings/sched/__scMain.s | 2 +- lib/src/mips1/sc/sched.c | 54 ++++++++++++++++++- lib/src/mips1/sc/sched.h | 31 ++++++++++- 4 files changed, 83 insertions(+), 6 deletions(-) rename lib/asm/non_matchings/sched/{__scHandleRetrace.s => __scHandleRetrace_Maybe.s} (99%) diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s similarity index 99% rename from lib/asm/non_matchings/sched/__scHandleRetrace.s rename to lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s index 66380241..2027258b 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s @@ -1,4 +1,4 @@ -glabel __scHandleRetrace +glabel __scHandleRetrace_Maybe /* 07A418 80079818 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 07A41C 8007981C AFBF001C */ sw $ra, 0x1c($sp) /* 07A420 80079820 AFB10018 */ sw $s1, 0x18($sp) diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s index 94f79fe5..d958a642 100644 --- a/lib/asm/non_matchings/sched/__scMain.s +++ b/lib/asm/non_matchings/sched/__scMain.s @@ -40,7 +40,7 @@ glabel __scMain /* 07A240 80079640 10000020 */ b .L800796C4 /* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) .L80079648: -/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace +/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace_Maybe /* 07A24C 8007964C 02402025 */ move $a0, $s2 /* 07A250 80079650 1000FFEC */ b .L80079604 /* 07A254 80079654 02602025 */ move $a0, $s3 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index e8f6cf06..84f1c948 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -56,7 +56,7 @@ s32 D_80126110; s32 D_80126114; OSTime gYieldTime; s32 D_80126120; -s32 D_80126124; +u32 D_80126124; s32 D_80126128[18]; /*******************************/ @@ -179,8 +179,58 @@ void dummy_80079808() { void dummy_80079810() { } -GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace.s") +GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s") + +#ifdef NON_MATCHING +void __scHandleRSP(OSSched *sc) { + OSScTask *t, *sp = 0, *dp = 0; + s32 state; + s32 temp_hi; + + t = sc->curRSPTask; + sc->curRSPTask = NULL; + + if (t->list.t.type == M_AUDTASK) { + D_80126124 = osGetCount(); + D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / 468750.0f); + D_800DE744 = (f32) (D_800DE744 + D_800DE74C); + if (D_800DE740 < D_800DE74C) { + D_800DE740 = D_800DE74C; + } + temp_hi = (s32) D_800DE750 % 1000; + if ((temp_hi == 1) || (temp_hi == 2)) { + D_800DE748 = (f32) (D_800DE744 / 500.0f); + D_800DE744 = 0.0f; + D_800DE740 = 0.0f; + } + } + + if ((t->state & OS_SC_YIELD)) { + if (osSpTaskYielded(&t->list)) { + t->state |= OS_SC_YIELDED; + if ((t->flags & OS_SC_TYPE_MASK) == OS_SC_XBUS) { + /* push the task back on the list */ + t->next = sc->gfxListHead; + sc->gfxListHead = t; + if (sc->gfxListTail == 0) + sc->gfxListTail = t; + } + } else { + t->state &= ~OS_SC_NEEDS_RSP; + } + if ((t->flags & OS_SC_TYPE_MASK) != OS_SC_XBUS){} + } else { + t->state &= ~OS_SC_NEEDS_RSP; + __scTaskComplete(sc, t); + } + + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + if ( (__scSchedule (sc, &sp, &dp, state)) != state) + __scExec(sc, sp, dp); +} +#else GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRSP.s") +#endif void __scHandleRDP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 7e84b88a..8eb4ff7e 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -9,7 +9,35 @@ #define OS_SC_PRE_NMI_MSG 4 #define OS_SC_MAX_MESGS 8 -#define OS_SC_YIELD 0x10 +/* + * OSScTask state + */ +#define OS_SC_DP 0x0001 /* set if still needs dp */ +#define OS_SC_SP 0x0002 /* set if still needs sp */ +#define OS_SC_YIELD 0x0010 /* set if yield requested */ +#define OS_SC_YIELDED 0x0020 /* set if yield completed */ + +/* + * OSScTask->flags type identifier + */ +#define OS_SC_XBUS (OS_SC_SP | OS_SC_DP) +#define OS_SC_DRAM (OS_SC_SP | OS_SC_DP | OS_SC_DRAM_DLIST) +#define OS_SC_DP_XBUS (OS_SC_SP) +#define OS_SC_DP_DRAM (OS_SC_SP | OS_SC_DRAM_DLIST) +#define OS_SC_SP_XBUS (OS_SC_DP) +#define OS_SC_SP_DRAM (OS_SC_DP | OS_SC_DRAM_DLIST) +/* + * OSScTask flags: + */ +#define OS_SC_NEEDS_RDP 0x0001 /* uses the RDP */ +#define OS_SC_NEEDS_RSP 0x0002 /* uses the RSP */ +#define OS_SC_DRAM_DLIST 0x0004 /* SP & DP communicate through DRAM */ +#define OS_SC_PARALLEL_TASK 0x0010 /* must be first gfx task on list */ +#define OS_SC_LAST_TASK 0x0020 /* last task in queue for frame */ +#define OS_SC_SWAPBUFFER 0x0040 /* swapbuffers when gfx task done */ + +#define OS_SC_RCP_MASK 0x0003 /* mask for needs bits */ +#define OS_SC_TYPE_MASK 0x0007 /* complete type mask */ typedef struct { short type; @@ -31,7 +59,6 @@ typedef struct OSScTask_s { #endif /* FINALROM library used with */ } OSScTask; /* non FINALROM code */ - typedef struct SCClient_s { u8 unk0; struct SCClient_s *next; /* next client in the list */ From ae41df879574634c5608aa542a0e88e7f82660fa Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 7 Oct 2021 13:49:48 -0400 Subject: [PATCH 32/46] Got a match for __scHandleRSP --- include/PR/os.h | 2 -- lib/src/mips1/sc/sched.c | 10 +++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/PR/os.h b/include/PR/os.h index 0880e67b..1fdf643a 100644 --- a/include/PR/os.h +++ b/include/PR/os.h @@ -7,8 +7,6 @@ #include "os_thread.h" /* Variables */ - -extern u64 osClockRate; /* * CPU counter increments at 3/4 of bus clock rate: * diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 84f1c948..3c096d07 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -181,7 +181,8 @@ void dummy_80079810() { GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s") -#ifdef NON_MATCHING +#if 1 +#define OS_CPU_COUNTER_F (f32)(OS_CPU_COUNTER / 100.0f) void __scHandleRSP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; s32 state; @@ -192,7 +193,7 @@ void __scHandleRSP(OSSched *sc) { if (t->list.t.type == M_AUDTASK) { D_80126124 = osGetCount(); - D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / 468750.0f); + D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); D_800DE744 = (f32) (D_800DE744 + D_800DE74C); if (D_800DE740 < D_800DE74C) { D_800DE740 = D_800DE74C; @@ -217,8 +218,11 @@ void __scHandleRSP(OSSched *sc) { } } else { t->state &= ~OS_SC_NEEDS_RSP; + /* BEGIN TODO: This just feels wrong, but it matches */ + while(0){} } if ((t->flags & OS_SC_TYPE_MASK) != OS_SC_XBUS){} + /* END TODO */ } else { t->state &= ~OS_SC_NEEDS_RSP; __scTaskComplete(sc, t); @@ -325,7 +329,7 @@ void __scAppendList(OSSched *sc, OSScTask *t) { t->state = t->flags & 0x03; } -void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp){ +void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { if (sp) { if (sp->list.t.type == M_AUDTASK) { From 75f1c783fd85ab6f723ecdb1066c6e099db5613a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 7 Oct 2021 15:48:22 -0400 Subject: [PATCH 33/46] Start work on __scHandleRetrace --- ...dleRetrace_Maybe.s => __scHandleRetrace.s} | 14 +- lib/asm/non_matchings/sched/__scMain.s | 2 +- lib/src/mips1/sc/sched.c | 126 +++++++++++++++++- 3 files changed, 127 insertions(+), 15 deletions(-) rename lib/asm/non_matchings/sched/{__scHandleRetrace_Maybe.s => __scHandleRetrace.s} (96%) diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s similarity index 96% rename from lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s rename to lib/asm/non_matchings/sched/__scHandleRetrace.s index 2027258b..763fee49 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -1,4 +1,4 @@ -glabel __scHandleRetrace_Maybe +glabel __scHandleRetrace /* 07A418 80079818 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 07A41C 8007981C AFBF001C */ sw $ra, 0x1c($sp) /* 07A420 80079820 AFB10018 */ sw $s1, 0x18($sp) @@ -125,18 +125,18 @@ glabel __scHandleRetrace_Maybe /* 07A5D8 800799D8 0C01E7EA */ jal __scExec /* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: -/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(D_800DE764) # $t5, 0x800e -/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(D_800DE764)($t5) +/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(D_800DE760) # $t5, 0x800e +/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(D_800DE760+4)($t5) /* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(D_800DE760) # $t4, 0x800e /* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(D_800DE760)($t4) /* 07A5F0 800799F0 25AF0001 */ addiu $t7, $t5, 1 /* 07A5F4 800799F4 2DE10001 */ sltiu $at, $t7, 1 /* 07A5F8 800799F8 01817021 */ addu $t6, $t4, $at -/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(D_800DE764) # $at, 0x800e +/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(D_800DE760) # $at, 0x800e /* 07A600 80079A00 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e /* 07A604 80079A04 2442E750 */ addiu $v0, %lo(D_800DE750) # addiu $v0, $v0, -0x18b0 /* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(D_800DE760)($at) -/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(D_800DE764)($at) +/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(D_800DE760+4)($at) /* 07A610 80079A10 8C580000 */ lw $t8, ($v0) /* 07A614 80079A14 00000000 */ nop /* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 @@ -184,8 +184,8 @@ glabel __scHandleRetrace_Maybe /* 07A6A8 80079AA8 24010001 */ li $at, 1 /* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 /* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(D_800DE760) # $a0, 0x800e -/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(D_800DE764) # $a1, 0x800e -/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(D_800DE764)($a1) +/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(D_800DE760) # $a1, 0x800e +/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(D_800DE760+4)($a1) /* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(D_800DE760)($a0) /* 07A6C0 80079AC0 24060000 */ li $a2, 0 /* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s index d958a642..94f79fe5 100644 --- a/lib/asm/non_matchings/sched/__scMain.s +++ b/lib/asm/non_matchings/sched/__scMain.s @@ -40,7 +40,7 @@ glabel __scMain /* 07A240 80079640 10000020 */ b .L800796C4 /* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) .L80079648: -/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace_Maybe +/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace /* 07A24C 8007964C 02402025 */ move $a0, $s2 /* 07A250 80079650 1000FFEC */ b .L80079604 /* 07A254 80079654 02602025 */ move $a0, $s3 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 3c096d07..3edd27c5 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -23,8 +23,7 @@ u32 D_800DE754 = 0; u32 D_800DE758 = 0; s32 D_800DE75C = 0; // Currently unknown, might be a different type. -s32 D_800DE760 = 0; // Currently unknown, might be a different type. -s32 D_800DE764 = 0; // Currently unknown, might be a different type. +u64 D_800DE760 = 0; /*******************************/ @@ -179,10 +178,124 @@ void dummy_80079808() { void dummy_80079810() { } -GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace_Maybe.s") +#if 0 +void __scHandleRetrace(OSSched *sc) { + void *sp44; + OSScTask *sp38; + OSScTask *sp34; + u8 sp32; + OSMesgQueue *sp28; + OSMesgQueue *temp_a0; + OSMesgQueue *temp_a0_2; + OSScClient *temp_s0_2; + OSScClient *temp_s0_3; + OSScTask *temp_v0; + OSScTask *temp_v0_2; + s32 temp_s0; + s32 temp_t2; + s32 temp_t7; + OSScTask *temp_v1; + u64 temp_ret; + u8 temp_v0_3; + s32 phi_s0; + OSScClient *phi_s0_2; -#if 1 + sp44 = NULL; + sp38 = NULL; + sp34 = NULL; + sp32 = 0; + phi_s0 = 0; + if (sc->curRSPTask != 0) { + D_800DE754 = (s32) (D_800DE754 + 1); + } + if (sc->curRDPTask != 0) { + D_800DE758 = (s32) (D_800DE758 + 1); + } + temp_v0 = sc->curRSPTask; + if ((D_800DE754 >= 0xB) && (temp_v0 != 0)) { + D_800DE754 = 0; + __osSpSetStatus(0xAAAA82U); + phi_s0 = 1; + } else if (temp_v0 != 0) { + D_80126110 = 1; + } + temp_v0_2 = sc->curRDPTask; + if ((D_800DE758 >= 0xB) && (temp_v0_2 != 0)) { + if (temp_v0_2->unk68 == 0) { + osSendMesg(temp_v0_2->msgQ, &D_800DE738, 1); + } + sp32 = 1; + sc->doAudio = 0; + D_800DE758 = 0; + __osSpSetStatus(0xAAAA82U); + osDpSetStatus(0x1D6U); + } else if (temp_v0_2 != 0) { + D_80126114 = 1; + } + temp_a0 = &sc->cmdQ; + if (phi_s0 != 0) { + sc->curRSPTask = NULL; + } + if (sp32 != 0) { + sc->curRDPTask = NULL; + } + sp28 = temp_a0; + if (osRecvMesg(temp_a0, &sp44, 0) != -1) { + do { + __scAppendList(sc, (OSScTask *) sp44); + } while (osRecvMesg(sp28, &sp44, 0) != -1); + } + temp_s0 = ((sc->curRSPTask == 0) * 2) | (sc->curRDPTask == 0); + if (__scSchedule(sc, &sp38, &sp34, temp_s0) != temp_s0) { + __scExec(sc, sp38, sp34); + } + temp_t7 = D_800DE760 + 1; + D_800DE760 = (s32) (D_800DE760 + (temp_t7 == 0)); + D_800DE760 = temp_t7; + D_800DE750 = (s32) (D_800DE750 + 1); + temp_v1 = sc->curRDPTask; + temp_t2 = sc->doAudio + 1; + sc->doAudio = temp_t2; + if ((temp_v1 != 0) && ((u32) temp_t2 >= 2U)) { + temp_a0_2 = temp_v1->msgQ; + if (temp_a0_2 != 0) { + if ((temp_v1->unk68 != 0) || (temp_v1->msgQ != 0)) { + osSendMesg(temp_a0_2, temp_v1->msgQ, 1); + } else { + osSendMesg(temp_a0_2, &D_800DE730, 1); + } + } + sc->doAudio = 0; + sc->frameCount = 0; + } + temp_s0_2 = sc->clientList; + phi_s0_2 = temp_s0_2; + if (temp_s0_2 != 0) { + do { + temp_v0_3 = phi_s0_2->unk0; + if (temp_v0_3 == 1) { + temp_ret = D_800DE760 % 2;//__ull_rem(D_800DE760, D_800DE764, 0, 2); + if ((temp_ret == 0)) { + osSendMesg(phi_s0_2->msgQ, (void *) sc, 0); + if (sc->audioListHead != 0) { + func_80079760(sc); + } + } + } else if (temp_v0_3 == 2) { + osSendMesg(phi_s0_2->msgQ, (void *) sc, 0); + } + temp_s0_3 = phi_s0_2->next; + phi_s0_2 = temp_s0_3; + } while (temp_s0_3 != 0); + } +} +#else +GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace.s") +#endif + +//Keeping this defined here because it seems too specific to this function #define OS_CPU_COUNTER_F (f32)(OS_CPU_COUNTER / 100.0f) + void __scHandleRSP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; s32 state; @@ -191,6 +304,8 @@ void __scHandleRSP(OSSched *sc) { t = sc->curRSPTask; sc->curRSPTask = NULL; + //Rare seems to have edited this function, most specifically here. + //Still need to do better for a match, but this does work if (t->list.t.type == M_AUDTASK) { D_80126124 = osGetCount(); D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); @@ -232,9 +347,6 @@ void __scHandleRSP(OSSched *sc) { if ( (__scSchedule (sc, &sp, &dp, state)) != state) __scExec(sc, sp, dp); } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRSP.s") -#endif void __scHandleRDP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; From e6325cbd4cc6c5898d3c2392ccb5bcd38c2c62e5 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 8 Oct 2021 13:42:45 -0400 Subject: [PATCH 34/46] Identified some of the changes to OSSched that Rare has done. *almost* matched what might be the retrace function and might not be --- include/PR/rcp.h | 144 ++++++------- .../non_matchings/sched/__scHandleRetrace.s | 96 ++++----- lib/src/mips1/sc/sched.c | 204 ++++++++---------- lib/src/mips1/sc/sched.h | 31 ++- 4 files changed, 242 insertions(+), 233 deletions(-) diff --git a/include/PR/rcp.h b/include/PR/rcp.h index fc07e79a..99b8b60c 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -52,17 +52,17 @@ 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 +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) +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) @@ -109,9 +109,9 @@ The Indy development board use cartridge domain 1: #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_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) @@ -125,7 +125,7 @@ The Indy development board use cartridge domain 1: /************************************************************************* * PIF Physical memory map (total size = 2 KB) * - * Size Description Mode + * Size Description Mode * 1FC007FF +-------+-----------------+-----+ * | 64 B | JoyChannel RAM | R/W | * 1FC007C0 +-------+-----------------+-----+ @@ -177,7 +177,7 @@ The Indy development board use cartridge domain 1: /* 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 */ @@ -212,31 +212,31 @@ The Indy development board use cartridge domain 1: /* * 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 */ +#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) @@ -253,28 +253,28 @@ The Indy development board use cartridge domain 1: #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 */ +#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 +#define SP_CLR_YIELD SP_CLR_SIG0 /* Bit 9 */ +#define SP_SET_YIELD SP_SET_SIG0 /* Bit 10 */ +#define SP_STATUS_YIELD SP_STATUS_SIG0 /* Bit 7 */ +#define SP_CLR_YIELDED SP_CLR_SIG1 /* Bit 11 */ +#define SP_SET_YIELDED SP_SET_SIG1 /* Bit 12 */ +#define SP_STATUS_YIELDED SP_STATUS_SIG1 /* Bit 8 */ +#define SP_CLR_TASKDONE SP_CLR_SIG2 /* Bit 13 */ +#define SP_SET_TASKDONE SP_SET_SIG2 /* Bit 14 */ +#define SP_STATUS_TASKDONE SP_STATUS_SIG2 /* Bit 9 */ +#define SP_CLR_RSPSIGNAL SP_CLR_SIG3 /* Bit 15 */ +#define SP_SET_RSPSIGNAL SP_SET_SIG3 /* Bit 16 */ +#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3 /* Bit 10 */ +#define SP_CLR_CPUSIGNAL SP_CLR_SIG4 /* Bit 17 */ +#define SP_SET_CPUSIGNAL SP_SET_SIG4 /* Bit 18 */ +#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4 /* Bit 11 */ /* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */ #define SP_IBIST_REG 0x04080004 @@ -308,13 +308,13 @@ The Indy development board use cartridge domain 1: #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) +#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) +#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) @@ -482,9 +482,9 @@ The Indy development board use cartridge domain 1: /* 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) + * 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) @@ -508,11 +508,11 @@ The Indy development board use cartridge domain 1: #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_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_INTR_REG (VI_BASE_REG+0x0C) #define VI_V_INTR_REG VI_INTR_REG /* @@ -520,9 +520,9 @@ The Indy development board use cartridge domain 1: * 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 + * - Any write to this register will clear interrupt line */ -#define VI_CURRENT_REG (VI_BASE_REG+0x10) +#define VI_CURRENT_REG (VI_BASE_REG+0x10) #define VI_V_CURRENT_LINE_REG VI_CURRENT_REG /* @@ -531,23 +531,23 @@ The Indy development board use cartridge domain 1: * [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_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) +#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) +#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_LEAP_REG (VI_BASE_REG+0x20) #define VI_H_SYNC_LEAP_REG VI_LEAP_REG /* @@ -568,17 +568,17 @@ The Indy development board use cartridge domain 1: * 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) +#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) +#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) +#define VI_Y_SCALE_REG (VI_BASE_REG+0x34) /* * Patterns to interpret VI_CONTROL_REG diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s index 763fee49..4fe94072 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -10,7 +10,7 @@ glabel __scHandleRetrace /* 07A438 80079838 8C8E0274 */ lw $t6, 0x274($a0) /* 07A43C 8007983C 00808825 */ move $s1, $a0 /* 07A440 80079840 11C00007 */ beqz $t6, .L80079860 -/* 07A444 80079844 00008025 */ move $s0, $zero +/* 07A444 80079844 00008025 */ move $s0, $zero /* 07A448 80079848 3C03800E */ lui $v1, %hi(D_800DE754) # $v1, 0x800e /* 07A44C 8007984C 2463E754 */ addiu $v1, %lo(D_800DE754) # addiu $v1, $v1, -0x18ac /* 07A450 80079850 8C6F0000 */ lw $t7, ($v1) @@ -21,7 +21,7 @@ glabel __scHandleRetrace /* 07A460 80079860 8E390278 */ lw $t9, 0x278($s1) /* 07A464 80079864 3C03800E */ lui $v1, %hi(D_800DE754) # $v1, 0x800e /* 07A468 80079868 13200006 */ beqz $t9, .L80079884 -/* 07A46C 8007986C 2463E754 */ addiu $v1, %lo(D_800DE754) # addiu $v1, $v1, -0x18ac +/* 07A46C 8007986C 2463E754 */ addiu $v1, %lo(D_800DE754) # addiu $v1, $v1, -0x18ac /* 07A470 80079870 3C08800E */ lui $t0, %hi(D_800DE758) # $t0, 0x800e /* 07A474 80079874 8D08E758 */ lw $t0, %lo(D_800DE758)($t0) /* 07A478 80079878 3C01800E */ lui $at, %hi(D_800DE758) # $at, 0x800e @@ -32,18 +32,18 @@ glabel __scHandleRetrace /* 07A488 80079888 8E220274 */ lw $v0, 0x274($s1) /* 07A48C 8007988C 2941000B */ slti $at, $t2, 0xb /* 07A490 80079890 14200009 */ bnez $at, .L800798B8 -/* 07A494 80079894 00000000 */ nop +/* 07A494 80079894 00000000 */ nop /* 07A498 80079898 10400007 */ beqz $v0, .L800798B8 -/* 07A49C 8007989C 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa +/* 07A49C 8007989C 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa /* 07A4A0 800798A0 AC600000 */ sw $zero, ($v1) /* 07A4A4 800798A4 24100001 */ li $s0, 1 /* 07A4A8 800798A8 0C033490 */ jal __osSpSetStatus -/* 07A4AC 800798AC 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 +/* 07A4AC 800798AC 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 /* 07A4B0 800798B0 10000005 */ b .L800798C8 -/* 07A4B4 800798B4 00000000 */ nop +/* 07A4B4 800798B4 00000000 */ nop .L800798B8: /* 07A4B8 800798B8 10400003 */ beqz $v0, .L800798C8 -/* 07A4BC 800798BC 240B0001 */ li $t3, 1 +/* 07A4BC 800798BC 240B0001 */ li $t3, 1 /* 07A4C0 800798C0 3C018012 */ lui $at, %hi(D_80126110) # $at, 0x8012 /* 07A4C4 800798C4 AC2B6110 */ sw $t3, %lo(D_80126110)($at) .L800798C8: @@ -52,16 +52,16 @@ glabel __scHandleRetrace /* 07A4D0 800798D0 8E220278 */ lw $v0, 0x278($s1) /* 07A4D4 800798D4 2981000B */ slti $at, $t4, 0xb /* 07A4D8 800798D8 14200016 */ bnez $at, .L80079934 -/* 07A4DC 800798DC 00000000 */ nop +/* 07A4DC 800798DC 00000000 */ nop /* 07A4E0 800798E0 10400014 */ beqz $v0, .L80079934 -/* 07A4E4 800798E4 00000000 */ nop +/* 07A4E4 800798E4 00000000 */ nop /* 07A4E8 800798E8 8C4D0068 */ lw $t5, 0x68($v0) /* 07A4EC 800798EC 3C05800E */ lui $a1, %hi(D_800DE738) # $a1, 0x800e /* 07A4F0 800798F0 15A00004 */ bnez $t5, .L80079904 -/* 07A4F4 800798F4 24A5E738 */ addiu $a1, %lo(D_800DE738) # addiu $a1, $a1, -0x18c8 +/* 07A4F4 800798F4 24A5E738 */ addiu $a1, %lo(D_800DE738) # addiu $a1, $a1, -0x18c8 /* 07A4F8 800798F8 8C440050 */ lw $a0, 0x50($v0) /* 07A4FC 800798FC 0C03238C */ jal osSendMesg -/* 07A500 80079900 24060001 */ li $a2, 1 +/* 07A500 80079900 24060001 */ li $a2, 1 .L80079904: /* 07A504 80079904 240E0001 */ li $t6, 1 /* 07A508 80079908 A3AE0032 */ sb $t6, 0x32($sp) @@ -70,42 +70,42 @@ glabel __scHandleRetrace /* 07A514 80079914 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa /* 07A518 80079918 AC20E758 */ sw $zero, %lo(D_800DE758)($at) /* 07A51C 8007991C 0C033490 */ jal __osSpSetStatus -/* 07A520 80079920 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 +/* 07A520 80079920 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 /* 07A524 80079924 0C033494 */ jal osDpSetStatus -/* 07A528 80079928 240401D6 */ li $a0, 470 +/* 07A528 80079928 240401D6 */ li $a0, 470 /* 07A52C 8007992C 10000005 */ b .L80079944 -/* 07A530 80079930 00000000 */ nop +/* 07A530 80079930 00000000 */ nop .L80079934: /* 07A534 80079934 10400003 */ beqz $v0, .L80079944 -/* 07A538 80079938 240F0001 */ li $t7, 1 +/* 07A538 80079938 240F0001 */ li $t7, 1 /* 07A53C 8007993C 3C018012 */ lui $at, %hi(D_80126114) # $at, 0x8012 /* 07A540 80079940 AC2F6114 */ sw $t7, %lo(D_80126114)($at) .L80079944: /* 07A544 80079944 12000002 */ beqz $s0, .L80079950 -/* 07A548 80079948 26240078 */ addiu $a0, $s1, 0x78 +/* 07A548 80079948 26240078 */ addiu $a0, $s1, 0x78 /* 07A54C 8007994C AE200274 */ sw $zero, 0x274($s1) .L80079950: /* 07A550 80079950 93B80032 */ lbu $t8, 0x32($sp) /* 07A554 80079954 27A50044 */ addiu $a1, $sp, 0x44 /* 07A558 80079958 13000002 */ beqz $t8, .L80079964 -/* 07A55C 8007995C 00003025 */ move $a2, $zero +/* 07A55C 8007995C 00003025 */ move $a2, $zero /* 07A560 80079960 AE200278 */ sw $zero, 0x278($s1) .L80079964: /* 07A564 80079964 0C0322EC */ jal osRecvMesg -/* 07A568 80079968 AFA40028 */ sw $a0, 0x28($sp) +/* 07A568 80079968 AFA40028 */ sw $a0, 0x28($sp) /* 07A56C 8007996C 2410FFFF */ li $s0, -1 /* 07A570 80079970 1050000A */ beq $v0, $s0, .L8007999C -/* 07A574 80079974 00000000 */ nop +/* 07A574 80079974 00000000 */ nop /* 07A578 80079978 8FA50044 */ lw $a1, 0x44($sp) .L8007997C: /* 07A57C 8007997C 0C01E7D0 */ jal __scAppendList -/* 07A580 80079980 02202025 */ move $a0, $s1 +/* 07A580 80079980 02202025 */ move $a0, $s1 /* 07A584 80079984 8FA40028 */ lw $a0, 0x28($sp) /* 07A588 80079988 27A50044 */ addiu $a1, $sp, 0x44 /* 07A58C 8007998C 0C0322EC */ jal osRecvMesg -/* 07A590 80079990 00003025 */ move $a2, $zero +/* 07A590 80079990 00003025 */ move $a2, $zero /* 07A594 80079994 1450FFF9 */ bne $v0, $s0, .L8007997C -/* 07A598 80079998 8FA50044 */ lw $a1, 0x44($sp) +/* 07A598 80079998 8FA50044 */ lw $a1, 0x44($sp) .L8007999C: /* 07A59C 8007999C 8E390274 */ lw $t9, 0x274($s1) /* 07A5A0 800799A0 8E2A0278 */ lw $t2, 0x278($s1) @@ -117,13 +117,13 @@ glabel __scHandleRetrace /* 07A5B8 800799B8 02202025 */ move $a0, $s1 /* 07A5BC 800799BC 27A50038 */ addiu $a1, $sp, 0x38 /* 07A5C0 800799C0 0C01E835 */ jal __scSchedule -/* 07A5C4 800799C4 27A60034 */ addiu $a2, $sp, 0x34 +/* 07A5C4 800799C4 27A60034 */ addiu $a2, $sp, 0x34 /* 07A5C8 800799C8 10500005 */ beq $v0, $s0, .L800799E0 -/* 07A5CC 800799CC 00000000 */ nop +/* 07A5CC 800799CC 00000000 */ nop /* 07A5D0 800799D0 8FA50038 */ lw $a1, 0x38($sp) /* 07A5D4 800799D4 8FA60034 */ lw $a2, 0x34($sp) /* 07A5D8 800799D8 0C01E7EA */ jal __scExec -/* 07A5DC 800799DC 02202025 */ move $a0, $s1 +/* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: /* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(D_800DE760) # $t5, 0x800e /* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(D_800DE760+4)($t5) @@ -138,25 +138,25 @@ glabel __scHandleRetrace /* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(D_800DE760)($at) /* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(D_800DE760+4)($at) /* 07A610 80079A10 8C580000 */ lw $t8, ($v0) -/* 07A614 80079A14 00000000 */ nop +/* 07A614 80079A14 00000000 */ nop /* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 /* 07A61C 80079A1C AC590000 */ sw $t9, ($v0) /* 07A620 80079A20 8E280280 */ lw $t0, 0x280($s1) /* 07A624 80079A24 8E23027C */ lw $v1, 0x27c($s1) /* 07A628 80079A28 250A0001 */ addiu $t2, $t0, 1 /* 07A62C 80079A2C 10600019 */ beqz $v1, .L80079A94 -/* 07A630 80079A30 AE2A0280 */ sw $t2, 0x280($s1) +/* 07A630 80079A30 AE2A0280 */ sw $t2, 0x280($s1) /* 07A634 80079A34 2D410002 */ sltiu $at, $t2, 2 /* 07A638 80079A38 14200016 */ bnez $at, .L80079A94 -/* 07A63C 80079A3C 00000000 */ nop +/* 07A63C 80079A3C 00000000 */ nop /* 07A640 80079A40 8C640050 */ lw $a0, 0x50($v1) /* 07A644 80079A44 00601025 */ move $v0, $v1 /* 07A648 80079A48 10800010 */ beqz $a0, .L80079A8C -/* 07A64C 80079A4C 00000000 */ nop +/* 07A64C 80079A4C 00000000 */ nop /* 07A650 80079A50 8C6B0068 */ lw $t3, 0x68($v1) -/* 07A654 80079A54 00000000 */ nop +/* 07A654 80079A54 00000000 */ nop /* 07A658 80079A58 15600005 */ bnez $t3, .L80079A70 -/* 07A65C 80079A5C 00000000 */ nop +/* 07A65C 80079A5C 00000000 */ nop /* 07A660 80079A60 8C6C0054 */ lw $t4, 0x54($v1) /* 07A664 80079A64 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e /* 07A668 80079A68 11800006 */ beqz $t4, .L80079A84 @@ -164,12 +164,12 @@ glabel __scHandleRetrace .L80079A70: /* 07A670 80079A70 8C450054 */ lw $a1, 0x54($v0) /* 07A674 80079A74 0C03238C */ jal osSendMesg -/* 07A678 80079A78 24060001 */ li $a2, 1 +/* 07A678 80079A78 24060001 */ li $a2, 1 /* 07A67C 80079A7C 10000004 */ b .L80079A90 -/* 07A680 80079A80 AE200280 */ sw $zero, 0x280($s1) +/* 07A680 80079A80 AE200280 */ sw $zero, 0x280($s1) .L80079A84: /* 07A684 80079A84 0C03238C */ jal osSendMesg -/* 07A688 80079A88 24060001 */ li $a2, 1 +/* 07A688 80079A88 24060001 */ li $a2, 1 .L80079A8C: /* 07A68C 80079A8C AE200280 */ sw $zero, 0x280($s1) .L80079A90: @@ -178,50 +178,50 @@ glabel __scHandleRetrace /* 07A694 80079A94 8E300260 */ lw $s0, 0x260($s1) /* 07A698 80079A98 00000000 */ nop /* 07A69C 80079A9C 12000025 */ beqz $s0, .L80079B34 -/* 07A6A0 80079AA0 8FBF001C */ lw $ra, 0x1c($sp) +/* 07A6A0 80079AA0 8FBF001C */ lw $ra, 0x1c($sp) .L80079AA4: /* 07A6A4 80079AA4 92020000 */ lbu $v0, ($s0) /* 07A6A8 80079AA8 24010001 */ li $at, 1 /* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 -/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(D_800DE760) # $a0, 0x800e +/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(D_800DE760) # $a0, 0x800e /* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(D_800DE760) # $a1, 0x800e /* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(D_800DE760+4)($a1) /* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(D_800DE760)($a0) /* 07A6C0 80079AC0 24060000 */ li $a2, 0 /* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem -/* 07A6C8 80079AC8 24070002 */ li $a3, 2 +/* 07A6C8 80079AC8 24070002 */ li $a3, 2 /* 07A6CC 80079ACC 14400014 */ bnez $v0, .L80079B20 -/* 07A6D0 80079AD0 00000000 */ nop +/* 07A6D0 80079AD0 00000000 */ nop /* 07A6D4 80079AD4 14600012 */ bnez $v1, .L80079B20 -/* 07A6D8 80079AD8 02202825 */ move $a1, $s1 +/* 07A6D8 80079AD8 02202825 */ move $a1, $s1 /* 07A6DC 80079ADC 8E040008 */ lw $a0, 8($s0) /* 07A6E0 80079AE0 0C03238C */ jal osSendMesg -/* 07A6E4 80079AE4 00003025 */ move $a2, $zero +/* 07A6E4 80079AE4 00003025 */ move $a2, $zero /* 07A6E8 80079AE8 8E2D0264 */ lw $t5, 0x264($s1) /* 07A6EC 80079AEC 00000000 */ nop /* 07A6F0 80079AF0 11A0000B */ beqz $t5, .L80079B20 -/* 07A6F4 80079AF4 00000000 */ nop +/* 07A6F4 80079AF4 00000000 */ nop /* 07A6F8 80079AF8 0C01E5D8 */ jal func_80079760 -/* 07A6FC 80079AFC 02202025 */ move $a0, $s1 +/* 07A6FC 80079AFC 02202025 */ move $a0, $s1 /* 07A700 80079B00 10000008 */ b .L80079B24 -/* 07A704 80079B04 8E100004 */ lw $s0, 4($s0) +/* 07A704 80079B04 8E100004 */ lw $s0, 4($s0) .L80079B08: /* 07A708 80079B08 24010002 */ li $at, 2 /* 07A70C 80079B0C 14410004 */ bne $v0, $at, .L80079B20 -/* 07A710 80079B10 02202825 */ move $a1, $s1 +/* 07A710 80079B10 02202825 */ move $a1, $s1 /* 07A714 80079B14 8E040008 */ lw $a0, 8($s0) /* 07A718 80079B18 0C03238C */ jal osSendMesg -/* 07A71C 80079B1C 00003025 */ move $a2, $zero +/* 07A71C 80079B1C 00003025 */ move $a2, $zero .L80079B20: /* 07A720 80079B20 8E100004 */ lw $s0, 4($s0) .L80079B24: -/* 07A724 80079B24 00000000 */ nop +/* 07A724 80079B24 00000000 */ nop /* 07A728 80079B28 1600FFDE */ bnez $s0, .L80079AA4 -/* 07A72C 80079B2C 00000000 */ nop +/* 07A72C 80079B2C 00000000 */ nop /* 07A730 80079B30 8FBF001C */ lw $ra, 0x1c($sp) .L80079B34: /* 07A734 80079B34 8FB00014 */ lw $s0, 0x14($sp) /* 07A738 80079B38 8FB10018 */ lw $s1, 0x18($sp) /* 07A73C 80079B3C 03E00008 */ jr $ra -/* 07A740 80079B40 27BD0048 */ addiu $sp, $sp, 0x48 +/* 07A740 80079B40 27BD0048 */ addiu $sp, $sp, 0x48 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 3edd27c5..8e28951f 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -7,6 +7,14 @@ #include "f3ddkr.h" #include "libultra_internal.h" +/* + * private typedefs and defines + */ +#define VIDEO_MSG 666 +#define RSP_DONE_MSG 667 +#define RDP_DONE_MSG 668 +#define PRE_NMI_MSG 669 + /************ .data ************/ // Unsure about if this is an array or struct. @@ -64,7 +72,7 @@ void __scYield(OSSched *sc); void __scMain(void); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); -void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields){ +void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields) { sc->curRSPTask = 0; sc->curRDPTask = 0; sc->clientList = 0; @@ -88,11 +96,11 @@ void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 num osCreateMesgQueue(&sc->interruptQ, sc->intBuf, OS_SC_MAX_MESGS); osCreateMesgQueue(&sc->cmdQ, sc->cmdMsgBuf, OS_SC_MAX_MESGS); - osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, (OSMesg)667); - osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, (OSMesg)668); - osSetEventMesg(OS_EVENT_PRENMI, &sc->interruptQ, (OSMesg)669); + osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, (OSMesg)RSP_DONE_MSG); + osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, (OSMesg)RDP_DONE_MSG); + osSetEventMesg(OS_EVENT_PRENMI, &sc->interruptQ, (OSMesg)PRE_NMI_MSG); - osViSetEvent(&sc->interruptQ, (OSMesg)666, numFields); + osViSetEvent(&sc->interruptQ, (OSMesg)VIDEO_MSG, numFields); osCreateThread(&sc->thread, 5, __scMain, (void *)sc, stack, priority); @@ -122,10 +130,10 @@ void osScRemoveClient(OSSched *sc, OSScClient *c) while (client != 0) { if (client == c) { - if(prev) - prev->next = c->next; - else - sc->clientList = c->next; + if(prev) + prev->next = c->next; + else + sc->clientList = c->next; break; } prev = client; @@ -152,23 +160,20 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") -//__scHandleRetrace equivalent for unk284? -void func_80079760(OSSched *sc) { - s32 sp24; - s32 sp20; - s32 sp1C; +void func_80079760(OSSched_Rare *sc) { + s32 state; + OSScTask *sp = 0; + OSScTask *dp = 0; - sp20 = 0; - sp1C = 0; - if (sc->audioListHead != 0) { - sc->unk284 = 1; + if (sc->audioListHead) { + sc->doAudio = 1; } - if ((sc->unk284 != 0) && (sc->curRSPTask != 0)) { + if (sc->doAudio && sc->curRSPTask) { __scYield(sc); } else { - sp24 = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); - if (__scSchedule(sc, &sp20, &sp1C, sp24) != sp24) { - __scExec(sc, sp20, sp1C); + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + if (__scSchedule(sc, &sp, &dp, state) != state) { + __scExec(sc, sp, dp); } } } @@ -179,114 +184,95 @@ void dummy_80079810() { } #if 0 -void __scHandleRetrace(OSSched *sc) { - void *sp44; - OSScTask *sp38; - OSScTask *sp34; - u8 sp32; - OSMesgQueue *sp28; - OSMesgQueue *temp_a0; - OSMesgQueue *temp_a0_2; - OSScClient *temp_s0_2; - OSScClient *temp_s0_3; - OSScTask *temp_v0; - OSScTask *temp_v0_2; - s32 temp_s0; - s32 temp_t2; - s32 temp_t7; - OSScTask *temp_v1; - u64 temp_ret; - u8 temp_v0_3; - s32 phi_s0; - OSScClient *phi_s0_2; +void __scHandleRetrace(OSSched_Rare *sc) { + OSScTask *rspTask = NULL; + OSScClient *client; + s32 i; + s32 availRPC; + OSScTask *sp = 0; + OSScTask *dp = 0; + u8 set_curRSPTask_NULL = FALSE; + u8 set_curRDPTask_NULL = FALSE; - sp44 = NULL; - sp38 = NULL; - sp34 = NULL; - sp32 = 0; - phi_s0 = 0; - if (sc->curRSPTask != 0) { - D_800DE754 = (s32) (D_800DE754 + 1); + if (sc->curRSPTask) { + D_800DE754++; } - if (sc->curRDPTask != 0) { - D_800DE758 = (s32) (D_800DE758 + 1); + + if (sc->curRDPTask) { + D_800DE758++; } - temp_v0 = sc->curRSPTask; - if ((D_800DE754 >= 0xB) && (temp_v0 != 0)) { + + if (((s32)D_800DE754 > (s32)10) && (sc->curRSPTask)) { D_800DE754 = 0; - __osSpSetStatus(0xAAAA82U); - phi_s0 = 1; - } else if (temp_v0 != 0) { + set_curRSPTask_NULL = TRUE; + + __osSpSetStatus(SP_SET_HALT | SP_CLR_INTR_BREAK | SP_CLR_SIG0 | + SP_CLR_SIG1 | SP_CLR_SIG2 | SP_CLR_SIG3 | SP_CLR_SIG4 | + SP_CLR_SIG5 | SP_CLR_SIG6 | SP_CLR_SIG7); + } else if (sc->curRSPTask) { D_80126110 = 1; } - temp_v0_2 = sc->curRDPTask; - if ((D_800DE758 >= 0xB) && (temp_v0_2 != 0)) { - if (temp_v0_2->unk68 == 0) { - osSendMesg(temp_v0_2->msgQ, &D_800DE738, 1); + + if (((s32)D_800DE758 > (s32)10) && (sc->curRDPTask)) { + if (sc->curRDPTask->unk68 == 0) { + osSendMesg(sc->curRDPTask->msgQ, &D_800DE738, OS_MESG_BLOCK); } - sp32 = 1; - sc->doAudio = 0; + + set_curRDPTask_NULL = TRUE; + sc->frameCount = 0; D_800DE758 = 0; - __osSpSetStatus(0xAAAA82U); - osDpSetStatus(0x1D6U); - } else if (temp_v0_2 != 0) { + + __osSpSetStatus(SP_SET_HALT | SP_CLR_INTR_BREAK | SP_CLR_SIG0 | + SP_CLR_SIG1 | SP_CLR_SIG2 | SP_CLR_SIG3 | SP_CLR_SIG4 | + SP_CLR_SIG5 | SP_CLR_SIG6 | SP_CLR_SIG7); + + osDpSetStatus(DPC_SET_XBUS_DMEM_DMA | DPC_CLR_FREEZE | DPC_CLR_FLUSH | + DPC_CLR_TMEM_CTR | DPC_CLR_PIPE_CTR | DPC_CLR_CMD_CTR); + } else if (sc->curRDPTask) { D_80126114 = 1; } - temp_a0 = &sc->cmdQ; - if (phi_s0 != 0) { + + if (set_curRSPTask_NULL) { sc->curRSPTask = NULL; } - if (sp32 != 0) { + if (set_curRDPTask_NULL) { sc->curRDPTask = NULL; } - sp28 = temp_a0; - if (osRecvMesg(temp_a0, &sp44, 0) != -1) { - do { - __scAppendList(sc, (OSScTask *) sp44); - } while (osRecvMesg(sp28, &sp44, 0) != -1); - } - temp_s0 = ((sc->curRSPTask == 0) * 2) | (sc->curRDPTask == 0); - if (__scSchedule(sc, &sp38, &sp34, temp_s0) != temp_s0) { - __scExec(sc, sp38, sp34); - } - temp_t7 = D_800DE760 + 1; - D_800DE760 = (s32) (D_800DE760 + (temp_t7 == 0)); - D_800DE760 = temp_t7; - D_800DE750 = (s32) (D_800DE750 + 1); - temp_v1 = sc->curRDPTask; - temp_t2 = sc->doAudio + 1; - sc->doAudio = temp_t2; - if ((temp_v1 != 0) && ((u32) temp_t2 >= 2U)) { - temp_a0_2 = temp_v1->msgQ; - if (temp_a0_2 != 0) { - if ((temp_v1->unk68 != 0) || (temp_v1->msgQ != 0)) { - osSendMesg(temp_a0_2, temp_v1->msgQ, 1); + + while (osRecvMesg(&sc->cmdQ, (OSMesg *)&rspTask, OS_MESG_NOBLOCK) != -1) + __scAppendList(sc, rspTask); + + availRPC = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL); + if (__scSchedule(sc, &sp, &dp, availRPC) != availRPC) + __scExec(sc, sp, dp); + + D_800DE760++; + D_800DE750++; + sc->frameCount++; + + if ((sc->unkTask) && (sc->frameCount >= 2)) { + if (sc->unkTask->msgQ) { + if ((sc->unkTask->unk68) || (sc->unkTask->msg)) { + osSendMesg(sc->unkTask->msgQ, sc->unkTask->msg, OS_MESG_BLOCK); } else { - osSendMesg(temp_a0_2, &D_800DE730, 1); + osSendMesg(sc->unkTask->msgQ, &D_800DE730, OS_MESG_BLOCK); } } - sc->doAudio = 0; sc->frameCount = 0; + sc->unkTask = 0; } - temp_s0_2 = sc->clientList; - phi_s0_2 = temp_s0_2; - if (temp_s0_2 != 0) { - do { - temp_v0_3 = phi_s0_2->unk0; - if (temp_v0_3 == 1) { - temp_ret = D_800DE760 % 2;//__ull_rem(D_800DE760, D_800DE764, 0, 2); - if ((temp_ret == 0)) { - osSendMesg(phi_s0_2->msgQ, (void *) sc, 0); - if (sc->audioListHead != 0) { - func_80079760(sc); - } + + for (client = sc->clientList; client != 0; client = client->next) { + if (client->unk0 == 1) { + if (D_800DE760 % 2 == 0) { + osSendMesg(client->msgQ, sc, OS_MESG_NOBLOCK); + if (sc->audioListHead) { + func_80079760(sc); } - } else if (temp_v0_3 == 2) { - osSendMesg(phi_s0_2->msgQ, (void *) sc, 0); } - temp_s0_3 = phi_s0_2->next; - phi_s0_2 = temp_s0_3; - } while (temp_s0_3 != 0); + } else if (client->unk0 == 2) { + osSendMesg(client->msgQ, sc, OS_MESG_NOBLOCK); + } } } #else diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 8eb4ff7e..b7b4d43c 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -57,10 +57,13 @@ typedef struct OSScTask_s { OSTime startTime; /* remain at the end!!, or */ OSTime totalTime; /* possible conflict if */ #endif /* FINALROM library used with */ -} OSScTask; /* non FINALROM code */ + /* non FINALROM code */ + + s32 unk68; /* Added by Rare? */ +} OSScTask; typedef struct SCClient_s { - u8 unk0; + u8 unk0; /* Added by Rare? */ struct SCClient_s *next; /* next client in the list */ OSMesgQueue *msgQ; /* where to send the frame msg */ } OSScClient; @@ -83,9 +86,29 @@ typedef struct { /* 0x660 */ OSScTask *curRDPTask; /* 0x710 */ u32 frameCount; /* 0x714 */ s32 doAudio; - /* 0x718 */ s32 unk284; } OSSched; +/* 0x7C8 bytes */ +typedef struct { + /* 0x00 */ OSScMsg retraceMsg; + /* 0x20 */ OSScMsg prenmiMsg; + /* 0x40 */ OSMesgQueue interruptQ; + /* 0x68 */ OSMesg intBuf[OS_SC_MAX_MESGS]; //0x8 per OsMesg + /* 0xA8 */ OSMesgQueue cmdQ; + /* 0xD0 */ OSMesg cmdMsgBuf[OS_SC_MAX_MESGS]; //0x8 per OsMesg + /* 0x110 */ OSThread thread; + /* 0x2D8 */ OSScClient *clientList; + /* 0x2F0 */ OSScTask *audioListHead; + /* 0x3A0 */ OSScTask *gfxListHead; + /* 0x450 */ OSScTask *audioListTail; + /* 0x500 */ OSScTask *gfxListTail; + /* 0x5B0 */ OSScTask *curRSPTask; + /* 0x660 */ OSScTask *curRDPTask; + /* 0x710 */ OSScTask *unkTask; //Rare added? + /* 0x7C0 */ u32 frameCount; + /* 0x7C4 */ s32 doAudio; +} OSSched_Rare; + typedef struct{ u8 pad00[0x50]; } unk800E3900; @@ -103,7 +126,7 @@ void osScRemoveClient(OSSched *sc, OSScClient *c); OSMesgQueue *osScGetCmdQ(OSSched *sc); OSMesgQueue *osScGetInterruptQ(OSSched *sc); void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2); -void func_80079760(OSSched *sc); +void func_80079760(OSSched_Rare *sc); void __scHandleRDP(OSSched *sc); OSScTask *__scTaskReady(OSScTask *t); s32 __scTaskComplete(OSSched *sc, OSScTask *t); From 8ac295a0da5d4cc6a7cdea4366d0017549bf2ed1 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 8 Oct 2021 14:09:33 -0400 Subject: [PATCH 35/46] Removed duiplicated OSSched as I figured out how to make it work --- lib/src/mips1/sc/sched.c | 12 ++++------- lib/src/mips1/sc/sched.h | 43 +++++++++++----------------------------- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 8e28951f..167c8c4d 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -76,13 +76,12 @@ void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 num sc->curRSPTask = 0; sc->curRDPTask = 0; sc->clientList = 0; - sc->audioListHead = 0; sc->gfxListHead = 0; sc->audioListTail = 0; sc->gfxListTail = 0; - sc->doAudio = 0; sc->frameCount = 0; + sc->unkTask = 0; sc->retraceMsg.type = OS_SC_RETRACE_MSG; /* sent to apps */ sc->prenmiMsg.type = OS_SC_PRE_NMI_MSG; @@ -92,17 +91,14 @@ void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 num osCreateViManager(OS_PRIORITY_VIMGR); osViSetMode(&osViModeTable[mode]); osViBlack(TRUE); - osCreateMesgQueue(&sc->interruptQ, sc->intBuf, OS_SC_MAX_MESGS); osCreateMesgQueue(&sc->cmdQ, sc->cmdMsgBuf, OS_SC_MAX_MESGS); - osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, (OSMesg)RSP_DONE_MSG); osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, (OSMesg)RDP_DONE_MSG); osSetEventMesg(OS_EVENT_PRENMI, &sc->interruptQ, (OSMesg)PRE_NMI_MSG); osViSetEvent(&sc->interruptQ, (OSMesg)VIDEO_MSG, numFields); - osCreateThread(&sc->thread, 5, __scMain, (void *)sc, stack, priority); osStartThread(&sc->thread); } @@ -160,7 +156,7 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") -void func_80079760(OSSched_Rare *sc) { +void func_80079760(OSSched *sc) { s32 state; OSScTask *sp = 0; OSScTask *dp = 0; @@ -183,8 +179,8 @@ void dummy_80079808() { void dummy_80079810() { } -#if 0 -void __scHandleRetrace(OSSched_Rare *sc) { +#ifdef NON_MATCHING +void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; s32 i; diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index b7b4d43c..81df82b4 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -7,6 +7,7 @@ #define OS_SC_RETRACE_MSG 1 #define OS_SC_PRE_NMI_MSG 4 +#define OS_SC_AUDIO_MSG 5 #define OS_SC_MAX_MESGS 8 /* @@ -29,15 +30,15 @@ /* * OSScTask flags: */ -#define OS_SC_NEEDS_RDP 0x0001 /* uses the RDP */ -#define OS_SC_NEEDS_RSP 0x0002 /* uses the RSP */ +#define OS_SC_NEEDS_RDP 0x0001 /* uses the RDP */ +#define OS_SC_NEEDS_RSP 0x0002 /* uses the RSP */ #define OS_SC_DRAM_DLIST 0x0004 /* SP & DP communicate through DRAM */ -#define OS_SC_PARALLEL_TASK 0x0010 /* must be first gfx task on list */ -#define OS_SC_LAST_TASK 0x0020 /* last task in queue for frame */ -#define OS_SC_SWAPBUFFER 0x0040 /* swapbuffers when gfx task done */ +#define OS_SC_PARALLEL_TASK 0x0010 /* must be first gfx task on list */ +#define OS_SC_LAST_TASK 0x0020 /* last task in queue for frame */ +#define OS_SC_SWAPBUFFER 0x0040 /* swapbuffers when gfx task done */ -#define OS_SC_RCP_MASK 0x0003 /* mask for needs bits */ -#define OS_SC_TYPE_MASK 0x0007 /* complete type mask */ +#define OS_SC_RCP_MASK 0x0003 /* mask for needs bits */ +#define OS_SC_TYPE_MASK 0x0007 /* complete type mask */ typedef struct { short type; @@ -47,8 +48,8 @@ typedef struct { typedef struct OSScTask_s { struct OSScTask_s *next; /* note: this must be first */ u32 state; - u32 flags; - void *framebuffer; /* used by graphics tasks */ + u32 flags; + void *framebuffer; /* used by graphics tasks */ OSTask list; OSMesgQueue *msgQ; @@ -68,26 +69,6 @@ typedef struct SCClient_s { OSMesgQueue *msgQ; /* where to send the frame msg */ } OSScClient; -/* 0x71C bytes */ -typedef struct { - /* 0x00 */ OSScMsg retraceMsg; - /* 0x20 */ OSScMsg prenmiMsg; - /* 0x40 */ OSMesgQueue interruptQ; - /* 0x68 */ OSMesg intBuf[OS_SC_MAX_MESGS]; //0x8 per OsMesg - /* 0xA8 */ OSMesgQueue cmdQ; - /* 0xD0 */ OSMesg cmdMsgBuf[OS_SC_MAX_MESGS]; //0x8 per OsMesg - /* 0x110 */ OSThread thread; - /* 0x2D8 */ OSScClient *clientList; - /* 0x2F0 */ OSScTask *audioListHead; - /* 0x3A0 */ OSScTask *gfxListHead; - /* 0x450 */ OSScTask *audioListTail; - /* 0x500 */ OSScTask *gfxListTail; - /* 0x5B0 */ OSScTask *curRSPTask; - /* 0x660 */ OSScTask *curRDPTask; - /* 0x710 */ u32 frameCount; - /* 0x714 */ s32 doAudio; -} OSSched; - /* 0x7C8 bytes */ typedef struct { /* 0x00 */ OSScMsg retraceMsg; @@ -107,7 +88,7 @@ typedef struct { /* 0x710 */ OSScTask *unkTask; //Rare added? /* 0x7C0 */ u32 frameCount; /* 0x7C4 */ s32 doAudio; -} OSSched_Rare; +} OSSched; typedef struct{ u8 pad00[0x50]; @@ -126,7 +107,7 @@ void osScRemoveClient(OSSched *sc, OSScClient *c); OSMesgQueue *osScGetCmdQ(OSSched *sc); OSMesgQueue *osScGetInterruptQ(OSSched *sc); void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2); -void func_80079760(OSSched_Rare *sc); +void func_80079760(OSSched *sc); void __scHandleRDP(OSSched *sc); OSScTask *__scTaskReady(OSScTask *t); s32 __scTaskComplete(OSSched *sc, OSScTask *t); From 7ee4a32ae4c780bace488f270c4e5bd09a284354 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 8 Oct 2021 15:37:25 -0400 Subject: [PATCH 36/46] Attempt to match __scMain --- lib/src/mips1/sc/sched.c | 60 +++++++++++++++++++++++++++++++++++++--- lib/src/mips1/sc/sched.h | 8 +++++- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 167c8c4d..e08093f5 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -68,10 +68,6 @@ s32 D_80126128[18]; /*******************************/ -void __scYield(OSSched *sc); -void __scMain(void); -void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); - void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields) { sc->curRSPTask = 0; sc->curRDPTask = 0; @@ -154,7 +150,63 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { *arg2 = D_800DE74C; } +#ifdef NON_MATCHING +static void __scMain(void *arg) { + OSMesg msg = NULL; + OSSched *sc = (OSSched *)arg; + OSScClient *client; + //static int count = 0; + s32 state = 0; + OSScTask *sp = 0; + OSScTask *dp = 0; + + while (1) { + loop1: + do { + osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + + switch ((int) msg) { + case (VIDEO_MSG): + __scHandleRetrace(sc); + goto loop1; + break; + + case (RSP_DONE_MSG): + __scHandleRSP(sc); + goto loop1; + break; + + case (RDP_DONE_MSG): + __scHandleRDP(sc); + goto loop1; + break; + + case (99): + func_80079760(sc); + goto loop1; + break; + + case (PRE_NMI_MSG): + /* + * notify audio and graphics threads to fade out + */ + for (client = sc->clientList; client != 0; client = client->next) { + osSendMesg(client->msgQ, (OSMesg) &sc->prenmiMsg, + OS_MESG_NOBLOCK); + } + goto loop1; + break; + } + __scAppendList(sc, (OSScTask *) msg); + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + } while (__scSchedule(sc, &sp, &dp, state) == state); + __scExec(sc, sp, dp); + goto loop1; + } +} +#else GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") +#endif void func_80079760(OSSched *sc) { s32 state; diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 81df82b4..6610161c 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -99,7 +99,11 @@ extern OSViMode osViModeTable[]; /*******************************/ void __scYield(OSSched *sc); -void __scMain(void); +#ifdef NON_MATCHING +static void __scMain(void *arg); +#else +void __scMain(void *arg); +#endif void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields); void osScAddClient(OSSched *sc, OSScClient *c, OSMesgQueue *msgQ, u8 arg3); @@ -109,9 +113,11 @@ OSMesgQueue *osScGetInterruptQ(OSSched *sc); void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2); void func_80079760(OSSched *sc); void __scHandleRDP(OSSched *sc); +void __scHandleRSP(OSSched *sc); OSScTask *__scTaskReady(OSScTask *t); s32 __scTaskComplete(OSSched *sc, OSScTask *t); void __scAppendList(OSSched *sc, OSScTask *t); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); +void __scHandleRetrace(OSSched *sc); #endif From 596bd60907325e5056832c58bc0f5187cc983fb7 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sat, 9 Oct 2021 10:54:23 -0400 Subject: [PATCH 37/46] Matched __scMain --- lib/asm/non_matchings/sched/__scMain.s | 119 ------------------------- lib/src/mips1/sc/sched.c | 119 ++++++++++++------------- lib/src/mips1/sc/sched.h | 2 +- 3 files changed, 57 insertions(+), 183 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scMain.s diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s deleted file mode 100644 index 94f79fe5..00000000 --- a/lib/asm/non_matchings/sched/__scMain.s +++ /dev/null @@ -1,119 +0,0 @@ -glabel __scMain -/* 07A1AC 800795AC 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 07A1B0 800795B0 AFBE0038 */ sw $fp, 0x38($sp) -/* 07A1B4 800795B4 AFB70034 */ sw $s7, 0x34($sp) -/* 07A1B8 800795B8 AFB60030 */ sw $s6, 0x30($sp) -/* 07A1BC 800795BC AFB5002C */ sw $s5, 0x2c($sp) -/* 07A1C0 800795C0 AFB40028 */ sw $s4, 0x28($sp) -/* 07A1C4 800795C4 AFB30024 */ sw $s3, 0x24($sp) -/* 07A1C8 800795C8 AFB20020 */ sw $s2, 0x20($sp) -/* 07A1CC 800795CC 00809025 */ move $s2, $a0 -/* 07A1D0 800795D0 AFBF003C */ sw $ra, 0x3c($sp) -/* 07A1D4 800795D4 AFB1001C */ sw $s1, 0x1c($sp) -/* 07A1D8 800795D8 AFB00018 */ sw $s0, 0x18($sp) -/* 07A1DC 800795DC AFA00064 */ sw $zero, 0x64($sp) -/* 07A1E0 800795E0 AFA00054 */ sw $zero, 0x54($sp) -/* 07A1E4 800795E4 AFA00050 */ sw $zero, 0x50($sp) -/* 07A1E8 800795E8 24930040 */ addiu $s3, $a0, 0x40 -/* 07A1EC 800795EC 27B40064 */ addiu $s4, $sp, 0x64 -/* 07A1F0 800795F0 24150063 */ li $s5, 99 -/* 07A1F4 800795F4 2416029A */ li $s6, 666 -/* 07A1F8 800795F8 2417029B */ li $s7, 667 -/* 07A1FC 800795FC 241E029C */ li $fp, 668 -/* 07A200 80079600 02602025 */ move $a0, $s3 -.L80079604: -/* 07A204 80079604 02802825 */ move $a1, $s4 -/* 07A208 80079608 0C0322EC */ jal osRecvMesg -/* 07A20C 8007960C 24060001 */ li $a2, 1 -/* 07A210 80079610 8FAE0064 */ lw $t6, 0x64($sp) -/* 07A214 80079614 00000000 */ nop -/* 07A218 80079618 11D50017 */ beq $t6, $s5, .L80079678 -/* 07A21C 8007961C 00000000 */ nop -/* 07A220 80079620 11D60009 */ beq $t6, $s6, .L80079648 -/* 07A224 80079624 00000000 */ nop -/* 07A228 80079628 11D7000B */ beq $t6, $s7, .L80079658 -/* 07A22C 8007962C 00000000 */ nop -/* 07A230 80079630 11DE000D */ beq $t6, $fp, .L80079668 -/* 07A234 80079634 2401029D */ li $at, 669 -/* 07A238 80079638 11C10013 */ beq $t6, $at, .L80079688 -/* 07A23C 8007963C 00000000 */ nop -/* 07A240 80079640 10000020 */ b .L800796C4 -/* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) -.L80079648: -/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace -/* 07A24C 8007964C 02402025 */ move $a0, $s2 -/* 07A250 80079650 1000FFEC */ b .L80079604 -/* 07A254 80079654 02602025 */ move $a0, $s3 -.L80079658: -/* 07A258 80079658 0C01E6D1 */ jal __scHandleRSP -/* 07A25C 8007965C 02402025 */ move $a0, $s2 -/* 07A260 80079660 1000FFE8 */ b .L80079604 -/* 07A264 80079664 02602025 */ move $a0, $s3 -.L80079668: -/* 07A268 80079668 0C01E757 */ jal __scHandleRDP -/* 07A26C 8007966C 02402025 */ move $a0, $s2 -/* 07A270 80079670 1000FFE4 */ b .L80079604 -/* 07A274 80079674 02602025 */ move $a0, $s3 -.L80079678: -/* 07A278 80079678 0C01E5D8 */ jal func_80079760 -/* 07A27C 8007967C 02402025 */ move $a0, $s2 -/* 07A280 80079680 1000FFE0 */ b .L80079604 -/* 07A284 80079684 02602025 */ move $a0, $s3 -.L80079688: -/* 07A288 80079688 8E500260 */ lw $s0, 0x260($s2) -/* 07A28C 8007968C 26510020 */ addiu $s1, $s2, 0x20 -/* 07A290 80079690 1200FFDC */ beqz $s0, .L80079604 -/* 07A294 80079694 02602025 */ move $a0, $s3 -.L80079698: -/* 07A298 80079698 8E040008 */ lw $a0, 8($s0) -/* 07A29C 8007969C 02202825 */ move $a1, $s1 -/* 07A2A0 800796A0 0C03238C */ jal osSendMesg -/* 07A2A4 800796A4 00003025 */ move $a2, $zero -/* 07A2A8 800796A8 8E100004 */ lw $s0, 4($s0) -/* 07A2AC 800796AC 00000000 */ nop -/* 07A2B0 800796B0 1600FFF9 */ bnez $s0, .L80079698 -/* 07A2B4 800796B4 00000000 */ nop -/* 07A2B8 800796B8 1000FFD2 */ b .L80079604 -/* 07A2BC 800796BC 02602025 */ move $a0, $s3 -/* 07A2C0 800796C0 8FA50064 */ lw $a1, 0x64($sp) -.L800796C4: -/* 07A2C4 800796C4 0C01E7D0 */ jal __scAppendList -/* 07A2C8 800796C8 02402025 */ move $a0, $s2 -/* 07A2CC 800796CC 8E4F0274 */ lw $t7, 0x274($s2) -/* 07A2D0 800796D0 8E480278 */ lw $t0, 0x278($s2) -/* 07A2D4 800796D4 2DF80001 */ sltiu $t8, $t7, 1 -/* 07A2D8 800796D8 0018C840 */ sll $t9, $t8, 1 -/* 07A2DC 800796DC 2D090001 */ sltiu $t1, $t0, 1 -/* 07A2E0 800796E0 03298025 */ or $s0, $t9, $t1 -/* 07A2E4 800796E4 02003825 */ move $a3, $s0 -/* 07A2E8 800796E8 02402025 */ move $a0, $s2 -/* 07A2EC 800796EC 27A50054 */ addiu $a1, $sp, 0x54 -/* 07A2F0 800796F0 0C01E835 */ jal __scSchedule -/* 07A2F4 800796F4 27A60050 */ addiu $a2, $sp, 0x50 -/* 07A2F8 800796F8 1050FFC2 */ beq $v0, $s0, .L80079604 -/* 07A2FC 800796FC 02602025 */ move $a0, $s3 -/* 07A300 80079700 8FA50054 */ lw $a1, 0x54($sp) -/* 07A304 80079704 8FA60050 */ lw $a2, 0x50($sp) -/* 07A308 80079708 0C01E7EA */ jal __scExec -/* 07A30C 8007970C 02402025 */ move $a0, $s2 -/* 07A310 80079710 1000FFBC */ b .L80079604 -/* 07A314 80079714 02602025 */ move $a0, $s3 -/* 07A318 80079718 00000000 */ nop -/* 07A31C 8007971C 00000000 */ nop -/* 07A320 80079720 00000000 */ nop -/* 07A324 80079724 00000000 */ nop -/* 07A328 80079728 00000000 */ nop -/* 07A32C 8007972C 00000000 */ nop -/* 07A330 80079730 8FBF003C */ lw $ra, 0x3c($sp) -/* 07A334 80079734 8FB00018 */ lw $s0, 0x18($sp) -/* 07A338 80079738 8FB1001C */ lw $s1, 0x1c($sp) -/* 07A33C 8007973C 8FB20020 */ lw $s2, 0x20($sp) -/* 07A340 80079740 8FB30024 */ lw $s3, 0x24($sp) -/* 07A344 80079744 8FB40028 */ lw $s4, 0x28($sp) -/* 07A348 80079748 8FB5002C */ lw $s5, 0x2c($sp) -/* 07A34C 8007974C 8FB60030 */ lw $s6, 0x30($sp) -/* 07A350 80079750 8FB70034 */ lw $s7, 0x34($sp) -/* 07A354 80079754 8FBE0038 */ lw $fp, 0x38($sp) -/* 07A358 80079758 03E00008 */ jr $ra -/* 07A35C 8007975C 27BD0068 */ addiu $sp, $sp, 0x68 - diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index e08093f5..8223c9ef 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -150,63 +150,52 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { *arg2 = D_800DE74C; } -#ifdef NON_MATCHING static void __scMain(void *arg) { OSMesg msg = NULL; OSSched *sc = (OSSched *)arg; OSScClient *client; - //static int count = 0; s32 state = 0; OSScTask *sp = 0; OSScTask *dp = 0; while (1) { - loop1: - do { - osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + switch ((int) msg) { + case (VIDEO_MSG): + __scHandleRetrace(sc); + break; - switch ((int) msg) { - case (VIDEO_MSG): - __scHandleRetrace(sc); - goto loop1; - break; + case (RSP_DONE_MSG): + __scHandleRSP(sc); + break; - case (RSP_DONE_MSG): - __scHandleRSP(sc); - goto loop1; - break; + case (RDP_DONE_MSG): + __scHandleRDP(sc); + break; - case (RDP_DONE_MSG): - __scHandleRDP(sc); - goto loop1; - break; + case (99): + func_80079760(sc); + break; - case (99): - func_80079760(sc); - goto loop1; - break; - - case (PRE_NMI_MSG): + case (PRE_NMI_MSG): /* * notify audio and graphics threads to fade out */ - for (client = sc->clientList; client != 0; client = client->next) { - osSendMesg(client->msgQ, (OSMesg) &sc->prenmiMsg, - OS_MESG_NOBLOCK); - } - goto loop1; - break; - } - __scAppendList(sc, (OSScTask *) msg); - state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); - } while (__scSchedule(sc, &sp, &dp, state) == state); - __scExec(sc, sp, dp); - goto loop1; + for (client = sc->clientList; client != 0; client = client->next) { + osSendMesg(client->msgQ, (OSMesg) &sc->prenmiMsg, + OS_MESG_NOBLOCK); + }; + break; + + default: + __scAppendList(sc, (OSScTask *) msg); + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + if (__scSchedule(sc, &sp, &dp, state) != state) + __scExec(sc, sp, dp); + break; + } } } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") -#endif void func_80079760(OSSched *sc) { s32 state; @@ -416,38 +405,42 @@ OSScTask *__scTaskReady(OSScTask *t) { } #if 0 +/* + * __scTaskComplete checks to see if the task is complete (all RCP + * operations have been performed) and sends the done message to the + * client if it is. + */ s32 __scTaskComplete(OSSched *sc, OSScTask *t) { int rv; - int firsttime = 1; + static int firsttime = 1; - if ((t->state & 0x03) == 0) { /* none of the needs bits set */ + if ((t->state & OS_SC_RCP_MASK) == 0) { /* none of the needs bits set */ - assert (t->msgQ); - if(t->msgQ){ - //rv = osSendMesg(t->msgQ, &t->msg, OS_MESG_BLOCK); +#ifndef _FINALROM + t->totalTime += osGetTime() - t->startTime; +#endif - //if (t->list.t.type == M_GFXTASK) { - if ((t->flags & 0x20) /*&& (t->flags & OS_SC_LAST_TASK)*/){ - if(sc->doAudio < 2){ - sc->frameCount = t; - } - else{ - if(t->startTime == 0){ - osSendMesg(t->msgQ, t->msg, 1); - } - } - //if (firsttime) { - // osViBlack(FALSE); - // firsttime = 0; - //} - //osViSwapBuffer(t->framebuffer); - } - //} - } +#ifdef SC_LOGGING + osLogEvent(l, 504, 1, t); +#endif + rv = osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); + + if (t->list.t.type == M_GFXTASK) { + if ((t->flags & OS_SC_SWAPBUFFER) && (t->flags & OS_SC_LAST_TASK)){ + if (firsttime) { + osViBlack(FALSE); + firsttime = 0; + } + osViSwapBuffer(t->framebuffer); +#ifdef SC_LOGGING + osLogEvent(l, 525, 1, t->framebuffer); +#endif + } + } return 1; } - + return 0; } #else diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 6610161c..77d0735b 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -99,7 +99,7 @@ extern OSViMode osViModeTable[]; /*******************************/ void __scYield(OSSched *sc); -#ifdef NON_MATCHING +#if 1 static void __scMain(void *arg); #else void __scMain(void *arg); From f72dffd3a9908573be663286b01ca9935454bf68 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Mon, 11 Oct 2021 17:06:25 -0400 Subject: [PATCH 38/46] Match __scSchedule --- lib/asm/non_matchings/sched/__scSchedule.s | 146 --------------------- lib/src/mips1/sc/sched.c | 113 +++++++++++++++- lib/src/mips1/sc/sched.h | 5 +- 3 files changed, 113 insertions(+), 151 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scSchedule.s diff --git a/lib/asm/non_matchings/sched/__scSchedule.s b/lib/asm/non_matchings/sched/__scSchedule.s deleted file mode 100644 index ec4d8aeb..00000000 --- a/lib/asm/non_matchings/sched/__scSchedule.s +++ /dev/null @@ -1,146 +0,0 @@ -.late_rodata -glabel jpt_800E7970 -.word L8007A2A4, L8007A248, L8007A1BC, L8007A2A4, L8007A2A4, L8007A248, L8007A248 - -.text -glabel __scSchedule -/* 07ACD4 8007A0D4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 07ACD8 8007A0D8 AFB10018 */ sw $s1, 0x18($sp) -/* 07ACDC 8007A0DC 00808825 */ move $s1, $a0 -/* 07ACE0 8007A0E0 AFBF001C */ sw $ra, 0x1c($sp) -/* 07ACE4 8007A0E4 AFB00014 */ sw $s0, 0x14($sp) -/* 07ACE8 8007A0E8 2408FFFD */ li $t0, -3 -.L8007A0EC: -/* 07ACEC 8007A0EC 8E2E0284 */ lw $t6, 0x284($s1) -/* 07ACF0 8007A0F0 8E300268 */ lw $s0, 0x268($s1) -/* 07ACF4 8007A0F4 8E220264 */ lw $v0, 0x264($s1) -/* 07ACF8 8007A0F8 11C00016 */ beqz $t6, .L8007A154 -/* 07ACFC 8007A0FC 00E01825 */ move $v1, $a3 -/* 07AD00 8007A100 30EF0002 */ andi $t7, $a3, 2 -/* 07AD04 8007A104 11E00014 */ beqz $t7, .L8007A158 -/* 07AD08 8007A108 02002025 */ move $a0, $s0 -/* 07AD0C 8007A10C 12000008 */ beqz $s0, .L8007A130 -/* 07AD10 8007A110 00000000 */ nop -/* 07AD14 8007A114 8E180008 */ lw $t8, 8($s0) -/* 07AD18 8007A118 00E81824 */ and $v1, $a3, $t0 -/* 07AD1C 8007A11C 33190010 */ andi $t9, $t8, 0x10 -/* 07AD20 8007A120 13200003 */ beqz $t9, .L8007A130 -/* 07AD24 8007A124 00000000 */ nop -/* 07AD28 8007A128 1000005E */ b .L8007A2A4 -/* 07AD2C 8007A12C ACB00000 */ sw $s0, ($a1) -.L8007A130: -/* 07AD30 8007A130 ACA20000 */ sw $v0, ($a1) -/* 07AD34 8007A134 8E2A0264 */ lw $t2, 0x264($s1) -/* 07AD38 8007A138 AE200284 */ sw $zero, 0x284($s1) -/* 07AD3C 8007A13C 8D4B0000 */ lw $t3, ($t2) -/* 07AD40 8007A140 00E81824 */ and $v1, $a3, $t0 -/* 07AD44 8007A144 15600057 */ bnez $t3, .L8007A2A4 -/* 07AD48 8007A148 AE2B0264 */ sw $t3, 0x264($s1) -/* 07AD4C 8007A14C 10000055 */ b .L8007A2A4 -/* 07AD50 8007A150 AE20026C */ sw $zero, 0x26c($s1) -.L8007A154: -/* 07AD54 8007A154 02002025 */ move $a0, $s0 -.L8007A158: -/* 07AD58 8007A158 AFA30024 */ sw $v1, 0x24($sp) -/* 07AD5C 8007A15C AFA5002C */ sw $a1, 0x2c($sp) -/* 07AD60 8007A160 AFA60030 */ sw $a2, 0x30($sp) -/* 07AD64 8007A164 0C01E77A */ jal __scTaskReady -/* 07AD68 8007A168 AFA70034 */ sw $a3, 0x34($sp) -/* 07AD6C 8007A16C 8FA30024 */ lw $v1, 0x24($sp) -/* 07AD70 8007A170 8FA5002C */ lw $a1, 0x2c($sp) -/* 07AD74 8007A174 8FA60030 */ lw $a2, 0x30($sp) -/* 07AD78 8007A178 8FA70034 */ lw $a3, 0x34($sp) -/* 07AD7C 8007A17C 2408FFFD */ li $t0, -3 -/* 07AD80 8007A180 10400048 */ beqz $v0, .L8007A2A4 -/* 07AD84 8007A184 2409FFFE */ li $t1, -2 -/* 07AD88 8007A188 8E0D0008 */ lw $t5, 8($s0) -/* 07AD8C 8007A18C 00000000 */ nop -/* 07AD90 8007A190 31AE0007 */ andi $t6, $t5, 7 -/* 07AD94 8007A194 25CFFFFF */ addiu $t7, $t6, -1 -/* 07AD98 8007A198 2DE10007 */ sltiu $at, $t7, 7 -/* 07AD9C 8007A19C 10200041 */ beqz $at, .L8007A2A4 -/* 07ADA0 8007A1A0 000F7880 */ sll $t7, $t7, 2 -/* 07ADA4 8007A1A4 3C01800E */ lui $at, %hi(jpt_800E7970) # $at, 0x800e -/* 07ADA8 8007A1A8 002F0821 */ addu $at, $at, $t7 -/* 07ADAC 8007A1AC 8C2F7970 */ lw $t7, %lo(jpt_800E7970)($at) -/* 07ADB0 8007A1B0 00000000 */ nop -/* 07ADB4 8007A1B4 01E00008 */ jr $t7 -/* 07ADB8 8007A1B8 00000000 */ nop -glabel L8007A1BC -/* 07ADBC 8007A1BC 8E180004 */ lw $t8, 4($s0) -/* 07ADC0 8007A1C0 30EA0002 */ andi $t2, $a3, 2 -/* 07ADC4 8007A1C4 33190020 */ andi $t9, $t8, 0x20 -/* 07ADC8 8007A1C8 13200013 */ beqz $t9, .L8007A218 -/* 07ADCC 8007A1CC 24010003 */ li $at, 3 -/* 07ADD0 8007A1D0 11400034 */ beqz $t2, .L8007A2A4 -/* 07ADD4 8007A1D4 00000000 */ nop -/* 07ADD8 8007A1D8 ACB00000 */ sw $s0, ($a1) -/* 07ADDC 8007A1DC 8E0B0004 */ lw $t3, 4($s0) -/* 07ADE0 8007A1E0 00E81824 */ and $v1, $a3, $t0 -/* 07ADE4 8007A1E4 316C0001 */ andi $t4, $t3, 1 -/* 07ADE8 8007A1E8 11800003 */ beqz $t4, .L8007A1F8 -/* 07ADEC 8007A1EC 00000000 */ nop -/* 07ADF0 8007A1F0 ACD00000 */ sw $s0, ($a2) -/* 07ADF4 8007A1F4 00691824 */ and $v1, $v1, $t1 -.L8007A1F8: -/* 07ADF8 8007A1F8 8E2D0268 */ lw $t5, 0x268($s1) -/* 07ADFC 8007A1FC 00000000 */ nop -/* 07AE00 8007A200 8DAE0000 */ lw $t6, ($t5) -/* 07AE04 8007A204 00000000 */ nop -/* 07AE08 8007A208 15C00026 */ bnez $t6, .L8007A2A4 -/* 07AE0C 8007A20C AE2E0268 */ sw $t6, 0x268($s1) -/* 07AE10 8007A210 10000024 */ b .L8007A2A4 -/* 07AE14 8007A214 AE200270 */ sw $zero, 0x270($s1) -.L8007A218: -/* 07AE18 8007A218 14E10022 */ bne $a3, $at, .L8007A2A4 -/* 07AE1C 8007A21C 00000000 */ nop -/* 07AE20 8007A220 ACD00000 */ sw $s0, ($a2) -/* 07AE24 8007A224 ACB00000 */ sw $s0, ($a1) -/* 07AE28 8007A228 8E380268 */ lw $t8, 0x268($s1) -/* 07AE2C 8007A22C 2401FFFC */ li $at, -4 -/* 07AE30 8007A230 8F190000 */ lw $t9, ($t8) -/* 07AE34 8007A234 00E11824 */ and $v1, $a3, $at -/* 07AE38 8007A238 1720001A */ bnez $t9, .L8007A2A4 -/* 07AE3C 8007A23C AE390268 */ sw $t9, 0x268($s1) -/* 07AE40 8007A240 10000018 */ b .L8007A2A4 -/* 07AE44 8007A244 AE200270 */ sw $zero, 0x270($s1) -glabel L8007A248 -/* 07AE48 8007A248 8E020004 */ lw $v0, 4($s0) -/* 07AE4C 8007A24C 30EC0002 */ andi $t4, $a3, 2 -/* 07AE50 8007A250 304B0002 */ andi $t3, $v0, 2 -/* 07AE54 8007A254 11600007 */ beqz $t3, .L8007A274 -/* 07AE58 8007A258 304D0001 */ andi $t5, $v0, 1 -/* 07AE5C 8007A25C 11800005 */ beqz $t4, .L8007A274 -/* 07AE60 8007A260 304D0001 */ andi $t5, $v0, 1 -/* 07AE64 8007A264 ACB00000 */ sw $s0, ($a1) -/* 07AE68 8007A268 8E020004 */ lw $v0, 4($s0) -/* 07AE6C 8007A26C 00E81824 */ and $v1, $a3, $t0 -/* 07AE70 8007A270 304D0001 */ andi $t5, $v0, 1 -.L8007A274: -/* 07AE74 8007A274 11A0000B */ beqz $t5, .L8007A2A4 -/* 07AE78 8007A278 306E0001 */ andi $t6, $v1, 1 -/* 07AE7C 8007A27C 11C00009 */ beqz $t6, .L8007A2A4 -/* 07AE80 8007A280 00000000 */ nop -/* 07AE84 8007A284 ACD00000 */ sw $s0, ($a2) -/* 07AE88 8007A288 8E2F0268 */ lw $t7, 0x268($s1) -/* 07AE8C 8007A28C 00691824 */ and $v1, $v1, $t1 -/* 07AE90 8007A290 8DF80000 */ lw $t8, ($t7) -/* 07AE94 8007A294 00000000 */ nop -/* 07AE98 8007A298 17000002 */ bnez $t8, .L8007A2A4 -/* 07AE9C 8007A29C AE380268 */ sw $t8, 0x268($s1) -/* 07AEA0 8007A2A0 AE200270 */ sw $zero, 0x270($s1) -.L8007A2A4: -glabel L8007A2A4 -/* 07AEA4 8007A2A4 10670004 */ beq $v1, $a3, .L8007A2B8 -/* 07AEA8 8007A2A8 8FBF001C */ lw $ra, 0x1c($sp) -/* 07AEAC 8007A2AC 1000FF8F */ b .L8007A0EC -/* 07AEB0 8007A2B0 00603825 */ move $a3, $v1 -/* 07AEB4 8007A2B4 8FBF001C */ lw $ra, 0x1c($sp) -.L8007A2B8: -/* 07AEB8 8007A2B8 8FB00014 */ lw $s0, 0x14($sp) -/* 07AEBC 8007A2BC 8FB10018 */ lw $s1, 0x18($sp) -/* 07AEC0 8007A2C0 27BD0028 */ addiu $sp, $sp, 0x28 -/* 07AEC4 8007A2C4 03E00008 */ jr $ra -/* 07AEC8 8007A2C8 00601025 */ move $v0, $v1 - -/* 07AECC 8007A2CC 00000000 */ nop diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 8223c9ef..d3c577fd 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -159,7 +159,9 @@ static void __scMain(void *arg) { OSScTask *dp = 0; while (1) { + osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + switch ((int) msg) { case (VIDEO_MSG): __scHandleRetrace(sc); @@ -501,4 +503,113 @@ void __scYield(OSSched *sc) { } } -GLOBAL_ASM("lib/asm/non_matchings/sched/__scSchedule.s") +/* + * Schedules the tasks to be run on the RCP + */ +s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) { + s32 avail = availRCP; + OSScTask *gfx = sc->gfxListHead; + OSScTask *audio = sc->audioListHead; + +#ifdef SC_LOGGING + osLogEvent(l, 517, 3, *sp, *dp, availRCP); +#endif + + if (sc->doAudio && (avail & OS_SC_SP)) { + + if (gfx && (gfx->flags & OS_SC_PARALLEL_TASK)) { + *sp = gfx; + avail &= ~OS_SC_SP; + } else { + *sp = audio; + avail &= ~OS_SC_SP; + sc->doAudio = 0; + sc->audioListHead = sc->audioListHead->next; + if (sc->audioListHead == NULL) + sc->audioListTail = NULL; + } + } else { +#ifdef SC_LOGGING + osLogEvent(l, 520, 1, gfx); +#endif + if (__scTaskReady(gfx)) { + +#ifdef SC_LOGGING + osLogEvent(l, 522, 3, gfx, gfx->state, gfx->flags); +#endif + switch (gfx->flags & OS_SC_TYPE_MASK) { + case (OS_SC_XBUS): + if (gfx->state & OS_SC_YIELDED) { +#ifdef SC_LOGGING + osLogEvent(l, 518, 0); +#endif + /* can hit this if RDP finishes at yield req */ + /* assert(gfx->state & OS_SC_DP); */ + + if (avail & OS_SC_SP) { /* if SP is available */ +#ifdef SC_LOGGING + osLogEvent(l, 519, 0); +#endif + *sp = gfx; + avail &= ~OS_SC_SP; + + if (gfx->state & OS_SC_DP) { /* if it needs DP */ + *dp = gfx; + avail &= ~OS_SC_DP; + + if (avail & OS_SC_DP == 0) + assert(sc->curRDPTask == gfx); + + } + + sc->gfxListHead = sc->gfxListHead->next; + if (sc->gfxListHead == NULL) + sc->gfxListTail = NULL; + + } + } else { + if (avail == (OS_SC_SP | OS_SC_DP)) { + *sp = *dp = gfx; + avail &= ~(OS_SC_SP | OS_SC_DP); + sc->gfxListHead = sc->gfxListHead->next; + if (sc->gfxListHead == NULL) + sc->gfxListTail = NULL; + } + } + + break; + + case (OS_SC_DRAM): + case (OS_SC_DP_DRAM): + case (OS_SC_DP_XBUS): + if (gfx->state & OS_SC_SP) { /* if needs SP */ + if (avail & OS_SC_SP) { /* if SP is available */ + *sp = gfx; + avail &= ~OS_SC_SP; + } + } + //This is else if in libreultra, and it's the only difference + if (gfx->state & OS_SC_DP) { /* if needs DP */ + if (avail & OS_SC_DP) { /* if DP available */ + *dp = gfx; + avail &= ~OS_SC_DP; + sc->gfxListHead = sc->gfxListHead->next; + if (sc->gfxListHead == NULL) + sc->gfxListTail = NULL; + } + } + break; + + case (OS_SC_SP_DRAM): + case (OS_SC_SP_XBUS): + default: + break; + } + } + } + + if (avail != availRCP) + avail = __scSchedule(sc, sp, dp, avail); + + return avail; +} diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 77d0735b..74f51d5d 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -99,11 +99,7 @@ extern OSViMode osViModeTable[]; /*******************************/ void __scYield(OSSched *sc); -#if 1 static void __scMain(void *arg); -#else -void __scMain(void *arg); -#endif void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields); void osScAddClient(OSSched *sc, OSScClient *c, OSMesgQueue *msgQ, u8 arg3); @@ -119,5 +115,6 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t); void __scAppendList(OSSched *sc, OSScTask *t); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); void __scHandleRetrace(OSSched *sc); +static s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP); #endif From e7ef9ae58c9df7dd04c3acdef204ef6440adbca8 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Mon, 11 Oct 2021 20:17:21 -0400 Subject: [PATCH 39/46] Match __osDevMgrMain --- include/PR/os.h | 10 + .../unknown_0D3160/__osDevMgrMain.s | 259 ------------------ lib/src/os/devmgr.c | 88 +++++- 3 files changed, 95 insertions(+), 262 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s diff --git a/include/PR/os.h b/include/PR/os.h index 1fdf643a..6a7e2206 100644 --- a/include/PR/os.h +++ b/include/PR/os.h @@ -6,6 +6,16 @@ #include "os_thread.h" +/* + * Leo Disk + */ + +/* transfer mode */ + +#define LEO_BLOCK_MODE 1 +#define LEO_TRACK_MODE 2 +#define LEO_SECTOR_MODE 3 + /* Variables */ /* * CPU counter increments at 3/4 of bus clock rate: diff --git a/lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s b/lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s deleted file mode 100644 index 85ec3a1a..00000000 --- a/lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s +++ /dev/null @@ -1,259 +0,0 @@ -.late_rodata -glabel jpt_800E9650 -.word L800D2A70, L800D2964, L800D29A4, L800D2A90, L800D2A90, L800D29E0, L800D2A28 - -.text -glabel __osDevMgrMain -/* 0D3360 800D2760 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D3364 800D2764 AFA40040 */ sw $a0, 0x40($sp) -/* 0D3368 800D2768 8FAE0040 */ lw $t6, 0x40($sp) -/* 0D336C 800D276C AFBF001C */ sw $ra, 0x1c($sp) -/* 0D3370 800D2770 AFA00028 */ sw $zero, 0x28($sp) -/* 0D3374 800D2774 AFA0003C */ sw $zero, 0x3c($sp) -/* 0D3378 800D2778 AFA00030 */ sw $zero, 0x30($sp) -/* 0D337C 800D277C AFAE002C */ sw $t6, 0x2c($sp) -.L800D2780: -/* 0D3380 800D2780 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D3384 800D2784 27A5003C */ addiu $a1, $sp, 0x3c -/* 0D3388 800D2788 24060001 */ li $a2, 1 -/* 0D338C 800D278C 0C0322EC */ jal osRecvMesg -/* 0D3390 800D2790 8DE40008 */ lw $a0, 8($t7) -/* 0D3394 800D2794 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D3398 800D2798 8F190014 */ lw $t9, 0x14($t8) -/* 0D339C 800D279C 13200065 */ beqz $t9, .L800D2934 -/* 0D33A0 800D27A0 00000000 */ nop -/* 0D33A4 800D27A4 93280004 */ lbu $t0, 4($t9) -/* 0D33A8 800D27A8 24010002 */ li $at, 2 -/* 0D33AC 800D27AC 15010061 */ bne $t0, $at, .L800D2934 -/* 0D33B0 800D27B0 00000000 */ nop -/* 0D33B4 800D27B4 8F290014 */ lw $t1, 0x14($t9) -/* 0D33B8 800D27B8 11200003 */ beqz $t1, .L800D27C8 -/* 0D33BC 800D27BC 24010001 */ li $at, 1 -/* 0D33C0 800D27C0 1521005C */ bne $t1, $at, .L800D2934 -/* 0D33C4 800D27C4 00000000 */ nop -.L800D27C8: -/* 0D33C8 800D27C8 8FAA003C */ lw $t2, 0x3c($sp) -/* 0D33CC 800D27CC 2408FFFF */ li $t0, -1 -/* 0D33D0 800D27D0 24010003 */ li $at, 3 -/* 0D33D4 800D27D4 8D4B0014 */ lw $t3, 0x14($t2) -/* 0D33D8 800D27D8 256C0014 */ addiu $t4, $t3, 0x14 -/* 0D33DC 800D27DC AFAC0020 */ sw $t4, 0x20($sp) -/* 0D33E0 800D27E0 958D0006 */ lhu $t5, 6($t4) -/* 0D33E4 800D27E4 000D70C0 */ sll $t6, $t5, 3 -/* 0D33E8 800D27E8 01CD7021 */ addu $t6, $t6, $t5 -/* 0D33EC 800D27EC 000E7080 */ sll $t6, $t6, 2 -/* 0D33F0 800D27F0 018E7821 */ addu $t7, $t4, $t6 -/* 0D33F4 800D27F4 25F80018 */ addiu $t8, $t7, 0x18 -/* 0D33F8 800D27F8 AFB80024 */ sw $t8, 0x24($sp) -/* 0D33FC 800D27FC AD880008 */ sw $t0, 8($t4) -/* 0D3400 800D2800 8FB90020 */ lw $t9, 0x20($sp) -/* 0D3404 800D2804 97290004 */ lhu $t1, 4($t9) -/* 0D3408 800D2808 11210006 */ beq $t1, $at, .L800D2824 -/* 0D340C 800D280C 00000000 */ nop -/* 0D3410 800D2810 8FAA0024 */ lw $t2, 0x24($sp) -/* 0D3414 800D2814 8D4B0004 */ lw $t3, 4($t2) -/* 0D3418 800D2818 8D4D000C */ lw $t5, 0xc($t2) -/* 0D341C 800D281C 016D7023 */ subu $t6, $t3, $t5 -/* 0D3420 800D2820 AD4E0004 */ sw $t6, 4($t2) -.L800D2824: -/* 0D3424 800D2824 8FAF0020 */ lw $t7, 0x20($sp) -/* 0D3428 800D2828 24010002 */ li $at, 2 -/* 0D342C 800D282C 95F80004 */ lhu $t8, 4($t7) -/* 0D3430 800D2830 17010009 */ bne $t8, $at, .L800D2858 -/* 0D3434 800D2834 00000000 */ nop -/* 0D3438 800D2838 8FA8003C */ lw $t0, 0x3c($sp) -/* 0D343C 800D283C 8D0C0014 */ lw $t4, 0x14($t0) -/* 0D3440 800D2840 8D990014 */ lw $t9, 0x14($t4) -/* 0D3444 800D2844 17200004 */ bnez $t9, .L800D2858 -/* 0D3448 800D2848 00000000 */ nop -/* 0D344C 800D284C 24090001 */ li $t1, 1 -/* 0D3450 800D2850 10000002 */ b .L800D285C -/* 0D3454 800D2854 AFA90028 */ sw $t1, 0x28($sp) -.L800D2858: -/* 0D3458 800D2858 AFA00028 */ sw $zero, 0x28($sp) -.L800D285C: -/* 0D345C 800D285C 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D3460 800D2860 27A50034 */ addiu $a1, $sp, 0x34 -/* 0D3464 800D2864 24060001 */ li $a2, 1 -/* 0D3468 800D2868 0C0322EC */ jal osRecvMesg -/* 0D346C 800D286C 8D640010 */ lw $a0, 0x10($t3) -/* 0D3470 800D2870 3C040010 */ lui $a0, (0x00100401 >> 16) # lui $a0, 0x10 -/* 0D3474 800D2874 0C035940 */ jal __osResetGlobalIntMask -/* 0D3478 800D2878 34840401 */ ori $a0, (0x00100401 & 0xFFFF) # ori $a0, $a0, 0x401 -/* 0D347C 800D287C 8FAE0020 */ lw $t6, 0x20($sp) -/* 0D3480 800D2880 8FAD003C */ lw $t5, 0x3c($sp) -/* 0D3484 800D2884 3C018000 */ lui $at, 0x8000 -/* 0D3488 800D2888 8DC60010 */ lw $a2, 0x10($t6) -/* 0D348C 800D288C 3C050500 */ lui $a1, (0x05000510 >> 16) # lui $a1, 0x500 -/* 0D3490 800D2890 34A50510 */ ori $a1, (0x05000510 & 0xFFFF) # ori $a1, $a1, 0x510 -/* 0D3494 800D2894 00C15025 */ or $t2, $a2, $at -/* 0D3498 800D2898 01403025 */ move $a2, $t2 -/* 0D349C 800D289C 0C035958 */ jal osEPiRawWriteIo -/* 0D34A0 800D28A0 8DA40014 */ lw $a0, 0x14($t5) -.L800D28A4: -/* 0D34A4 800D28A4 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D34A8 800D28A8 27A50038 */ addiu $a1, $sp, 0x38 -/* 0D34AC 800D28AC 24060001 */ li $a2, 1 -/* 0D34B0 800D28B0 0C0322EC */ jal osRecvMesg -/* 0D34B4 800D28B4 8DE4000C */ lw $a0, 0xc($t7) -/* 0D34B8 800D28B8 8FB8003C */ lw $t8, 0x3c($sp) -/* 0D34BC 800D28BC 00003025 */ move $a2, $zero -/* 0D34C0 800D28C0 8F040004 */ lw $a0, 4($t8) -/* 0D34C4 800D28C4 0C03238C */ jal osSendMesg -/* 0D34C8 800D28C8 03002825 */ move $a1, $t8 -/* 0D34CC 800D28CC 8FA80028 */ lw $t0, 0x28($sp) -/* 0D34D0 800D28D0 24010001 */ li $at, 1 -/* 0D34D4 800D28D4 15010008 */ bne $t0, $at, .L800D28F8 -/* 0D34D8 800D28D8 00000000 */ nop -/* 0D34DC 800D28DC 8FAC003C */ lw $t4, 0x3c($sp) -/* 0D34E0 800D28E0 8D990014 */ lw $t9, 0x14($t4) -/* 0D34E4 800D28E4 8F29002C */ lw $t1, 0x2c($t9) -/* 0D34E8 800D28E8 15200003 */ bnez $t1, .L800D28F8 -/* 0D34EC 800D28EC 00000000 */ nop -/* 0D34F0 800D28F0 1000FFEC */ b .L800D28A4 -/* 0D34F4 800D28F4 AFA00028 */ sw $zero, 0x28($sp) -.L800D28F8: -/* 0D34F8 800D28F8 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D34FC 800D28FC 00002825 */ move $a1, $zero -/* 0D3500 800D2900 00003025 */ move $a2, $zero -/* 0D3504 800D2904 0C03238C */ jal osSendMesg -/* 0D3508 800D2908 8D640010 */ lw $a0, 0x10($t3) -/* 0D350C 800D290C 8FAD003C */ lw $t5, 0x3c($sp) -/* 0D3510 800D2910 24010001 */ li $at, 1 -/* 0D3514 800D2914 8DAE0014 */ lw $t6, 0x14($t5) -/* 0D3518 800D2918 95CA001A */ lhu $t2, 0x1a($t6) -/* 0D351C 800D291C 1541FF98 */ bne $t2, $at, .L800D2780 -/* 0D3520 800D2920 00000000 */ nop -/* 0D3524 800D2924 0C03596C */ jal osYieldThread -/* 0D3528 800D2928 00000000 */ nop -/* 0D352C 800D292C 1000FF94 */ b .L800D2780 -/* 0D3530 800D2930 00000000 */ nop -.L800D2934: -/* 0D3534 800D2934 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D3538 800D2938 95F80000 */ lhu $t8, ($t7) -/* 0D353C 800D293C 2708FFF6 */ addiu $t0, $t8, -0xa -/* 0D3540 800D2940 2D010007 */ sltiu $at, $t0, 7 -/* 0D3544 800D2944 10200052 */ beqz $at, .L800D2A90 -/* 0D3548 800D2948 00000000 */ nop -/* 0D354C 800D294C 00084080 */ sll $t0, $t0, 2 -/* 0D3550 800D2950 3C01800F */ lui $at, %hi(jpt_800E9650) # $at, 0x800f -/* 0D3554 800D2954 00280821 */ addu $at, $at, $t0 -/* 0D3558 800D2958 8C289650 */ lw $t0, %lo(jpt_800E9650)($at) -/* 0D355C 800D295C 01000008 */ jr $t0 -/* 0D3560 800D2960 00000000 */ nop -glabel L800D2964 -/* 0D3564 800D2964 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D3568 800D2968 27A50034 */ addiu $a1, $sp, 0x34 -/* 0D356C 800D296C 24060001 */ li $a2, 1 -/* 0D3570 800D2970 0C0322EC */ jal osRecvMesg -/* 0D3574 800D2974 8D840010 */ lw $a0, 0x10($t4) -/* 0D3578 800D2978 8FB9003C */ lw $t9, 0x3c($sp) -/* 0D357C 800D297C 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D3580 800D2980 00002025 */ move $a0, $zero -/* 0D3584 800D2984 8F25000C */ lw $a1, 0xc($t9) -/* 0D3588 800D2988 8F260008 */ lw $a2, 8($t9) -/* 0D358C 800D298C 8F270010 */ lw $a3, 0x10($t9) -/* 0D3590 800D2990 8D390014 */ lw $t9, 0x14($t1) -/* 0D3594 800D2994 0320F809 */ jalr $t9 -/* 0D3598 800D2998 00000000 */ nop -/* 0D359C 800D299C 1000003E */ b .L800D2A98 -/* 0D35A0 800D29A0 AFA20030 */ sw $v0, 0x30($sp) -glabel L800D29A4 -/* 0D35A4 800D29A4 8FAB002C */ lw $t3, 0x2c($sp) -/* 0D35A8 800D29A8 27A50034 */ addiu $a1, $sp, 0x34 -/* 0D35AC 800D29AC 24060001 */ li $a2, 1 -/* 0D35B0 800D29B0 0C0322EC */ jal osRecvMesg -/* 0D35B4 800D29B4 8D640010 */ lw $a0, 0x10($t3) -/* 0D35B8 800D29B8 8FAE002C */ lw $t6, 0x2c($sp) -/* 0D35BC 800D29BC 8FAD003C */ lw $t5, 0x3c($sp) -/* 0D35C0 800D29C0 24040001 */ li $a0, 1 -/* 0D35C4 800D29C4 8DD90014 */ lw $t9, 0x14($t6) -/* 0D35C8 800D29C8 8DA5000C */ lw $a1, 0xc($t5) -/* 0D35CC 800D29CC 8DA60008 */ lw $a2, 8($t5) -/* 0D35D0 800D29D0 0320F809 */ jalr $t9 -/* 0D35D4 800D29D4 8DA70010 */ lw $a3, 0x10($t5) -/* 0D35D8 800D29D8 1000002F */ b .L800D2A98 -/* 0D35DC 800D29DC AFA20030 */ sw $v0, 0x30($sp) -glabel L800D29E0 -/* 0D35E0 800D29E0 8FAA002C */ lw $t2, 0x2c($sp) -/* 0D35E4 800D29E4 27A50034 */ addiu $a1, $sp, 0x34 -/* 0D35E8 800D29E8 24060001 */ li $a2, 1 -/* 0D35EC 800D29EC 0C0322EC */ jal osRecvMesg -/* 0D35F0 800D29F0 8D440010 */ lw $a0, 0x10($t2) -/* 0D35F4 800D29F4 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D35F8 800D29F8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D35FC 800D29FC 00002825 */ move $a1, $zero -/* 0D3600 800D2A00 8DF80010 */ lw $t8, 0x10($t7) -/* 0D3604 800D2A04 8DE40014 */ lw $a0, 0x14($t7) -/* 0D3608 800D2A08 8DE6000C */ lw $a2, 0xc($t7) -/* 0D360C 800D2A0C 8DE70008 */ lw $a3, 8($t7) -/* 0D3610 800D2A10 AFB80010 */ sw $t8, 0x10($sp) -/* 0D3614 800D2A14 8D190018 */ lw $t9, 0x18($t0) -/* 0D3618 800D2A18 0320F809 */ jalr $t9 -/* 0D361C 800D2A1C 00000000 */ nop -/* 0D3620 800D2A20 1000001D */ b .L800D2A98 -/* 0D3624 800D2A24 AFA20030 */ sw $v0, 0x30($sp) -glabel L800D2A28 -/* 0D3628 800D2A28 8FAC002C */ lw $t4, 0x2c($sp) -/* 0D362C 800D2A2C 27A50034 */ addiu $a1, $sp, 0x34 -/* 0D3630 800D2A30 24060001 */ li $a2, 1 -/* 0D3634 800D2A34 0C0322EC */ jal osRecvMesg -/* 0D3638 800D2A38 8D840010 */ lw $a0, 0x10($t4) -/* 0D363C 800D2A3C 8FA9003C */ lw $t1, 0x3c($sp) -/* 0D3640 800D2A40 8FAD002C */ lw $t5, 0x2c($sp) -/* 0D3644 800D2A44 24050001 */ li $a1, 1 -/* 0D3648 800D2A48 8D2B0010 */ lw $t3, 0x10($t1) -/* 0D364C 800D2A4C 8D240014 */ lw $a0, 0x14($t1) -/* 0D3650 800D2A50 8D26000C */ lw $a2, 0xc($t1) -/* 0D3654 800D2A54 8D270008 */ lw $a3, 8($t1) -/* 0D3658 800D2A58 AFAB0010 */ sw $t3, 0x10($sp) -/* 0D365C 800D2A5C 8DB90018 */ lw $t9, 0x18($t5) -/* 0D3660 800D2A60 0320F809 */ jalr $t9 -/* 0D3664 800D2A64 00000000 */ nop -/* 0D3668 800D2A68 1000000B */ b .L800D2A98 -/* 0D366C 800D2A6C AFA20030 */ sw $v0, 0x30($sp) -glabel L800D2A70 -/* 0D3670 800D2A70 8FAE003C */ lw $t6, 0x3c($sp) -/* 0D3674 800D2A74 00003025 */ move $a2, $zero -/* 0D3678 800D2A78 8DC40004 */ lw $a0, 4($t6) -/* 0D367C 800D2A7C 0C03238C */ jal osSendMesg -/* 0D3680 800D2A80 01C02825 */ move $a1, $t6 -/* 0D3684 800D2A84 240AFFFF */ li $t2, -1 -/* 0D3688 800D2A88 10000003 */ b .L800D2A98 -/* 0D368C 800D2A8C AFAA0030 */ sw $t2, 0x30($sp) -.L800D2A90: -glabel L800D2A90 -/* 0D3690 800D2A90 240FFFFF */ li $t7, -1 -/* 0D3694 800D2A94 AFAF0030 */ sw $t7, 0x30($sp) -.L800D2A98: -/* 0D3698 800D2A98 8FB80030 */ lw $t8, 0x30($sp) -/* 0D369C 800D2A9C 1700FF38 */ bnez $t8, .L800D2780 -/* 0D36A0 800D2AA0 00000000 */ nop -/* 0D36A4 800D2AA4 8FA8002C */ lw $t0, 0x2c($sp) -/* 0D36A8 800D2AA8 27A50038 */ addiu $a1, $sp, 0x38 -/* 0D36AC 800D2AAC 24060001 */ li $a2, 1 -/* 0D36B0 800D2AB0 0C0322EC */ jal osRecvMesg -/* 0D36B4 800D2AB4 8D04000C */ lw $a0, 0xc($t0) -/* 0D36B8 800D2AB8 8FAC003C */ lw $t4, 0x3c($sp) -/* 0D36BC 800D2ABC 00003025 */ move $a2, $zero -/* 0D36C0 800D2AC0 8D840004 */ lw $a0, 4($t4) -/* 0D36C4 800D2AC4 0C03238C */ jal osSendMesg -/* 0D36C8 800D2AC8 01802825 */ move $a1, $t4 -/* 0D36CC 800D2ACC 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D36D0 800D2AD0 00002825 */ move $a1, $zero -/* 0D36D4 800D2AD4 00003025 */ move $a2, $zero -/* 0D36D8 800D2AD8 0C03238C */ jal osSendMesg -/* 0D36DC 800D2ADC 8D240010 */ lw $a0, 0x10($t1) -/* 0D36E0 800D2AE0 1000FF27 */ b .L800D2780 -/* 0D36E4 800D2AE4 00000000 */ nop -/* 0D36E8 800D2AE8 00000000 */ nop -/* 0D36EC 800D2AEC 00000000 */ nop -/* 0D36F0 800D2AF0 00000000 */ nop -/* 0D36F4 800D2AF4 00000000 */ nop -/* 0D36F8 800D2AF8 00000000 */ nop -/* 0D36FC 800D2AFC 00000000 */ nop -/* 0D3700 800D2B00 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D3704 800D2B04 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0D3708 800D2B08 03E00008 */ jr $ra -/* 0D370C 800D2B0C 00000000 */ nop - diff --git a/lib/src/os/devmgr.c b/lib/src/os/devmgr.c index b0e8ca91..9cbfb466 100644 --- a/lib/src/os/devmgr.c +++ b/lib/src/os/devmgr.c @@ -1,8 +1,90 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D2760 */ -#include "types.h" -#include "macros.h" #include "libultra_internal.h" +#include "piint.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s") +void __osDevMgrMain(void *args) { + OSIoMesg *mb; + OSMesg em; + OSMesg dummy; + s32 ret; + OSDevMgr *dm; + s32 messageSend; + + messageSend = 0; + mb = NULL; + ret = 0; + dm = (OSDevMgr *)args; + while (TRUE) { + osRecvMesg(dm->cmdQueue, (OSMesg)&mb, OS_MESG_BLOCK); + if (mb->piHandle != NULL && + mb->piHandle->type == DEVICE_TYPE_64DD && + (mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0 || + mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_1)) { + + __OSBlockInfo *blockInfo; + __OSTranxInfo *info; + info = &mb->piHandle->transferInfo; + blockInfo = &info->block[info->blockNum]; + info->sectorNum = -1; + if (info->transferMode != LEO_SECTOR_MODE) { + blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr - blockInfo->sectorSize); + } + if (info->transferMode == LEO_TRACK_MODE && mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0) + messageSend = 1; + else + messageSend = 0; + osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK); + __osResetGlobalIntMask(OS_IM_PI); + osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, (info->bmCtlShadow | 0x80000000)); + while (TRUE) { + osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK); + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + + if (messageSend != 1) + break; + if (mb->piHandle->transferInfo.block[0].errStatus != LEO_ERROR_GOOD) + break; + messageSend = 0; + } + osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK); + if (mb->piHandle->transferInfo.blockNum == 1) + osYieldThread(); + } else { + switch (mb->hdr.type) { + case OS_MESG_TYPE_DMAREAD: + osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK); + ret = dm->dma(OS_READ, mb->devAddr, mb->dramAddr, mb->size); + break; + case OS_MESG_TYPE_DMAWRITE: + osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK); + ret = dm->dma(OS_WRITE, mb->devAddr, mb->dramAddr, mb->size); + break; + case OS_MESG_TYPE_EDMAREAD: + osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK); + ret = dm->edma(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, + mb->size); + break; + case OS_MESG_TYPE_EDMAWRITE: + osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK); + ret = dm->edma(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr, + mb->size); + break; + case OS_MESG_TYPE_LOOPBACK: + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + ret = -1; + break; + default: + ret = -1; + break; + } + + if (ret == 0) { + osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK); + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK); + } + } + } +} From 3b3aabe0bd67609fe13475871764fa1cf4fe6b91 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 14 Oct 2021 14:44:38 -0400 Subject: [PATCH 40/46] Match __scTaskComplete and some other minor cleanps --- .../non_matchings/sched/__scTaskComplete.s | 75 --------------- .../non_matchings/unknown_0C9A30/osSendMesg.s | 95 ------------------- lib/src/mips1/sc/sched.c | 84 ++++++++-------- 3 files changed, 37 insertions(+), 217 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scTaskComplete.s delete mode 100644 lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s diff --git a/lib/asm/non_matchings/sched/__scTaskComplete.s b/lib/asm/non_matchings/sched/__scTaskComplete.s deleted file mode 100644 index 3f8b23cf..00000000 --- a/lib/asm/non_matchings/sched/__scTaskComplete.s +++ /dev/null @@ -1,75 +0,0 @@ -glabel __scTaskComplete -/* 07AA40 80079E40 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 07AA44 80079E44 AFBF0014 */ sw $ra, 0x14($sp) -/* 07AA48 80079E48 AFA40018 */ sw $a0, 0x18($sp) -/* 07AA4C 80079E4C 8CAE0004 */ lw $t6, 4($a1) -/* 07AA50 80079E50 00A03825 */ move $a3, $a1 -/* 07AA54 80079E54 31CF0003 */ andi $t7, $t6, 3 -/* 07AA58 80079E58 15E00035 */ bnez $t7, .L80079F30 -/* 07AA5C 80079E5C 00001025 */ move $v0, $zero -/* 07AA60 80079E60 8CA40050 */ lw $a0, 0x50($a1) -/* 07AA64 80079E64 00000000 */ nop -/* 07AA68 80079E68 1080002F */ beqz $a0, .L80079F28 -/* 07AA6C 80079E6C 00000000 */ nop -/* 07AA70 80079E70 8CB80008 */ lw $t8, 8($a1) -/* 07AA74 80079E74 8FA80018 */ lw $t0, 0x18($sp) -/* 07AA78 80079E78 33190020 */ andi $t9, $t8, 0x20 -/* 07AA7C 80079E7C 1320001B */ beqz $t9, .L80079EEC -/* 07AA80 80079E80 00000000 */ nop -/* 07AA84 80079E84 8D090280 */ lw $t1, 0x280($t0) -/* 07AA88 80079E88 24020001 */ li $v0, 1 -/* 07AA8C 80079E8C 2D210002 */ sltiu $at, $t1, 2 -/* 07AA90 80079E90 10200003 */ beqz $at, .L80079EA0 -/* 07AA94 80079E94 00000000 */ nop -/* 07AA98 80079E98 10000025 */ b .L80079F30 -/* 07AA9C 80079E9C AD05027C */ sw $a1, 0x27c($t0) -.L80079EA0: -/* 07AAA0 80079EA0 8CEA0068 */ lw $t2, 0x68($a3) -/* 07AAA4 80079EA4 00000000 */ nop -/* 07AAA8 80079EA8 15400005 */ bnez $t2, .L80079EC0 -/* 07AAAC 80079EAC 00000000 */ nop -/* 07AAB0 80079EB0 8CEB0054 */ lw $t3, 0x54($a3) -/* 07AAB4 80079EB4 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e -/* 07AAB8 80079EB8 11600006 */ beqz $t3, .L80079ED4 -/* 07AABC 80079EBC 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0 -.L80079EC0: -/* 07AAC0 80079EC0 8CE50054 */ lw $a1, 0x54($a3) -/* 07AAC4 80079EC4 0C03238C */ jal osSendMesg -/* 07AAC8 80079EC8 24060001 */ li $a2, 1 -/* 07AACC 80079ECC 10000004 */ b .L80079EE0 -/* 07AAD0 80079ED0 8FAC0018 */ lw $t4, 0x18($sp) -.L80079ED4: -/* 07AAD4 80079ED4 0C03238C */ jal osSendMesg -/* 07AAD8 80079ED8 24060001 */ li $a2, 1 -/* 07AADC 80079EDC 8FAC0018 */ lw $t4, 0x18($sp) -.L80079EE0: -/* 07AAE0 80079EE0 24020001 */ li $v0, 1 -/* 07AAE4 80079EE4 10000012 */ b .L80079F30 -/* 07AAE8 80079EE8 AD800280 */ sw $zero, 0x280($t4) -.L80079EEC: -/* 07AAEC 80079EEC 8CED0068 */ lw $t5, 0x68($a3) -/* 07AAF0 80079EF0 00000000 */ nop -/* 07AAF4 80079EF4 15A00005 */ bnez $t5, .L80079F0C -/* 07AAF8 80079EF8 00000000 */ nop -/* 07AAFC 80079EFC 8CEE0054 */ lw $t6, 0x54($a3) -/* 07AB00 80079F00 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e -/* 07AB04 80079F04 11C00006 */ beqz $t6, .L80079F20 -/* 07AB08 80079F08 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0 -.L80079F0C: -/* 07AB0C 80079F0C 8CE50054 */ lw $a1, 0x54($a3) -/* 07AB10 80079F10 0C03238C */ jal osSendMesg -/* 07AB14 80079F14 24060001 */ li $a2, 1 -/* 07AB18 80079F18 10000005 */ b .L80079F30 -/* 07AB1C 80079F1C 24020001 */ li $v0, 1 -.L80079F20: -/* 07AB20 80079F20 0C03238C */ jal osSendMesg -/* 07AB24 80079F24 24060001 */ li $a2, 1 -.L80079F28: -/* 07AB28 80079F28 10000001 */ b .L80079F30 -/* 07AB2C 80079F2C 24020001 */ li $v0, 1 -.L80079F30: -/* 07AB30 80079F30 8FBF0014 */ lw $ra, 0x14($sp) -/* 07AB34 80079F34 27BD0018 */ addiu $sp, $sp, 0x18 -/* 07AB38 80079F38 03E00008 */ jr $ra -/* 07AB3C 80079F3C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s b/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s deleted file mode 100644 index cfeb9068..00000000 --- a/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s +++ /dev/null @@ -1,95 +0,0 @@ -glabel osSendMesg -/* 0C9A30 800C8E30 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0C9A34 800C8E34 AFBF0024 */ sw $ra, 0x24($sp) -/* 0C9A38 800C8E38 AFA40038 */ sw $a0, 0x38($sp) -/* 0C9A3C 800C8E3C AFA5003C */ sw $a1, 0x3c($sp) -/* 0C9A40 800C8E40 AFA60040 */ sw $a2, 0x40($sp) -/* 0C9A44 800C8E44 AFB20020 */ sw $s2, 0x20($sp) -/* 0C9A48 800C8E48 AFB1001C */ sw $s1, 0x1c($sp) -/* 0C9A4C 800C8E4C 0C034958 */ jal __osDisableInt -/* 0C9A50 800C8E50 AFB00018 */ sw $s0, 0x18($sp) -/* 0C9A54 800C8E54 8FAE0038 */ lw $t6, 0x38($sp) -/* 0C9A58 800C8E58 00408025 */ move $s0, $v0 -/* 0C9A5C 800C8E5C 8DCF0008 */ lw $t7, 8($t6) -/* 0C9A60 800C8E60 8DD80010 */ lw $t8, 0x10($t6) -/* 0C9A64 800C8E64 01F8082A */ slt $at, $t7, $t8 -/* 0C9A68 800C8E68 14200018 */ bnez $at, .L800C8ECC -/* 0C9A6C 800C8E6C 00000000 */ nop -.L800C8E70: -/* 0C9A70 800C8E70 8FB90040 */ lw $t9, 0x40($sp) -/* 0C9A74 800C8E74 24010001 */ li $at, 1 -/* 0C9A78 800C8E78 1721000A */ bne $t9, $at, .L800C8EA4 -/* 0C9A7C 800C8E7C 00000000 */ nop -/* 0C9A80 800C8E80 3C09800E */ lui $t1, %hi(__osRunningThread) # $t1, 0x800e -/* 0C9A84 800C8E84 8D294890 */ lw $t1, %lo(__osRunningThread)($t1) -/* 0C9A88 800C8E88 24080008 */ li $t0, 8 -/* 0C9A8C 800C8E8C A5280010 */ sh $t0, 0x10($t1) -/* 0C9A90 800C8E90 8FA40038 */ lw $a0, 0x38($sp) -/* 0C9A94 800C8E94 0C034CB3 */ jal __osEnqueueAndYield -/* 0C9A98 800C8E98 24840004 */ addiu $a0, $a0, 4 -/* 0C9A9C 800C8E9C 10000005 */ b .L800C8EB4 -/* 0C9AA0 800C8EA0 00000000 */ nop -.L800C8EA4: -/* 0C9AA4 800C8EA4 0C034960 */ jal __osRestoreInt -/* 0C9AA8 800C8EA8 02002025 */ move $a0, $s0 -/* 0C9AAC 800C8EAC 1000002D */ b .L800C8F64 -/* 0C9AB0 800C8EB0 2402FFFF */ li $v0, -1 -.L800C8EB4: -/* 0C9AB4 800C8EB4 8FAA0038 */ lw $t2, 0x38($sp) -/* 0C9AB8 800C8EB8 8D4B0008 */ lw $t3, 8($t2) -/* 0C9ABC 800C8EBC 8D4C0010 */ lw $t4, 0x10($t2) -/* 0C9AC0 800C8EC0 016C082A */ slt $at, $t3, $t4 -/* 0C9AC4 800C8EC4 1020FFEA */ beqz $at, .L800C8E70 -/* 0C9AC8 800C8EC8 00000000 */ nop -.L800C8ECC: -/* 0C9ACC 800C8ECC 8FAD0038 */ lw $t5, 0x38($sp) -/* 0C9AD0 800C8ED0 8FA8003C */ lw $t0, 0x3c($sp) -/* 0C9AD4 800C8ED4 8DAE000C */ lw $t6, 0xc($t5) -/* 0C9AD8 800C8ED8 8DAF0008 */ lw $t7, 8($t5) -/* 0C9ADC 800C8EDC 8DB90010 */ lw $t9, 0x10($t5) -/* 0C9AE0 800C8EE0 8DA90014 */ lw $t1, 0x14($t5) -/* 0C9AE4 800C8EE4 01CFC021 */ addu $t8, $t6, $t7 -/* 0C9AE8 800C8EE8 0319001A */ div $zero, $t8, $t9 -/* 0C9AEC 800C8EEC 00008810 */ mfhi $s1 -/* 0C9AF0 800C8EF0 00115080 */ sll $t2, $s1, 2 -/* 0C9AF4 800C8EF4 012A5821 */ addu $t3, $t1, $t2 -/* 0C9AF8 800C8EF8 AD680000 */ sw $t0, ($t3) -/* 0C9AFC 800C8EFC 8FAC0038 */ lw $t4, 0x38($sp) -/* 0C9B00 800C8F00 17200002 */ bnez $t9, .L800C8F0C -/* 0C9B04 800C8F04 00000000 */ nop -/* 0C9B08 800C8F08 0007000D */ break 7 -.L800C8F0C: -/* 0C9B0C 800C8F0C 2401FFFF */ li $at, -1 -/* 0C9B10 800C8F10 17210004 */ bne $t9, $at, .L800C8F24 -/* 0C9B14 800C8F14 3C018000 */ lui $at, 0x8000 -/* 0C9B18 800C8F18 17010002 */ bne $t8, $at, .L800C8F24 -/* 0C9B1C 800C8F1C 00000000 */ nop -/* 0C9B20 800C8F20 0006000D */ break 6 -.L800C8F24: -/* 0C9B24 800C8F24 8D8E0008 */ lw $t6, 8($t4) -/* 0C9B28 800C8F28 25CF0001 */ addiu $t7, $t6, 1 -/* 0C9B2C 800C8F2C AD8F0008 */ sw $t7, 8($t4) -/* 0C9B30 800C8F30 8FB80038 */ lw $t8, 0x38($sp) -/* 0C9B34 800C8F34 8F190000 */ lw $t9, ($t8) -/* 0C9B38 800C8F38 8F2D0000 */ lw $t5, ($t9) -/* 0C9B3C 800C8F3C 11A00006 */ beqz $t5, .L800C8F58 -/* 0C9B40 800C8F40 00000000 */ nop -/* 0C9B44 800C8F44 0C034D05 */ jal __osPopThread -/* 0C9B48 800C8F48 03002025 */ move $a0, $t8 -/* 0C9B4C 800C8F4C 00409025 */ move $s2, $v0 -/* 0C9B50 800C8F50 0C032268 */ jal osStartThread -/* 0C9B54 800C8F54 02402025 */ move $a0, $s2 -.L800C8F58: -/* 0C9B58 800C8F58 0C034960 */ jal __osRestoreInt -/* 0C9B5C 800C8F5C 02002025 */ move $a0, $s0 -/* 0C9B60 800C8F60 00001025 */ move $v0, $zero -.L800C8F64: -/* 0C9B64 800C8F64 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C9B68 800C8F68 8FB00018 */ lw $s0, 0x18($sp) -/* 0C9B6C 800C8F6C 8FB1001C */ lw $s1, 0x1c($sp) -/* 0C9B70 800C8F70 8FB20020 */ lw $s2, 0x20($sp) -/* 0C9B74 800C8F74 03E00008 */ jr $ra -/* 0C9B78 800C8F78 27BD0038 */ addiu $sp, $sp, 0x38 - -/* 0C9B7C 800C8F7C 00000000 */ nop - diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index d3c577fd..6d1dbc96 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -27,8 +27,8 @@ f32 D_800DE748 = 0; f32 D_800DE74C = 0; s32 D_800DE750 = 0; // Currently unknown, might be a different type. -u32 D_800DE754 = 0; -u32 D_800DE758 = 0; +s32 D_800DE754 = 0; +s32 D_800DE758 = 0; s32 D_800DE75C = 0; // Currently unknown, might be a different type. u64 D_800DE760 = 0; @@ -226,12 +226,12 @@ void dummy_80079810() { void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; - s32 i; - s32 availRPC; + s32 state; OSScTask *sp = 0; OSScTask *dp = 0; u8 set_curRSPTask_NULL = FALSE; u8 set_curRDPTask_NULL = FALSE; + s32 i; if (sc->curRSPTask) { D_800DE754++; @@ -241,7 +241,7 @@ void __scHandleRetrace(OSSched *sc) { D_800DE758++; } - if (((s32)D_800DE754 > (s32)10) && (sc->curRSPTask)) { + if ((D_800DE754 > 10) && (sc->curRSPTask)) { D_800DE754 = 0; set_curRSPTask_NULL = TRUE; @@ -252,7 +252,7 @@ void __scHandleRetrace(OSSched *sc) { D_80126110 = 1; } - if (((s32)D_800DE758 > (s32)10) && (sc->curRDPTask)) { + if ((D_800DE758 > 10) && (sc->curRDPTask)) { if (sc->curRDPTask->unk68 == 0) { osSendMesg(sc->curRDPTask->msgQ, &D_800DE738, OS_MESG_BLOCK); } @@ -281,8 +281,8 @@ void __scHandleRetrace(OSSched *sc) { while (osRecvMesg(&sc->cmdQ, (OSMesg *)&rspTask, OS_MESG_NOBLOCK) != -1) __scAppendList(sc, rspTask); - availRPC = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL); - if (__scSchedule(sc, &sp, &dp, availRPC) != availRPC) + state = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL); + if (__scSchedule(sc, &sp, &dp, state) != state) __scExec(sc, sp, dp); D_800DE760++; @@ -406,79 +406,69 @@ OSScTask *__scTaskReady(OSScTask *t) { return 0; } -#if 0 /* * __scTaskComplete checks to see if the task is complete (all RCP * operations have been performed) and sends the done message to the * client if it is. */ s32 __scTaskComplete(OSSched *sc, OSScTask *t) { - int rv; - static int firsttime = 1; - - if ((t->state & OS_SC_RCP_MASK) == 0) { /* none of the needs bits set */ - - -#ifndef _FINALROM - t->totalTime += osGetTime() - t->startTime; -#endif - -#ifdef SC_LOGGING - osLogEvent(l, 504, 1, t); -#endif - rv = osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); - - if (t->list.t.type == M_GFXTASK) { - if ((t->flags & OS_SC_SWAPBUFFER) && (t->flags & OS_SC_LAST_TASK)){ - if (firsttime) { - osViBlack(FALSE); - firsttime = 0; - } - osViSwapBuffer(t->framebuffer); -#ifdef SC_LOGGING - osLogEvent(l, 525, 1, t->framebuffer); -#endif + if ((t->state & OS_SC_RCP_MASK) == 0) { + if (t->msgQ) { + if (t->flags & OS_SC_LAST_TASK) { + if (sc->frameCount <= 1) { + sc->unkTask = t; + return 1; + } + if (t->unk68 || t->msg) { + osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); + } else { + osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK); + } + sc->frameCount = 0; + return 1; } - } + if (t->unk68 || t->msg) { + osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); + return 1; + } + osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK); + } return 1; } - return 0; } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scTaskComplete.s") -#endif void __scAppendList(OSSched *sc, OSScTask *t) { - u32 tmp = t->list.t.type; - if (tmp == 2) { + long type = t->list.t.type; + + if (type == M_AUDTASK) { if(sc->audioListTail) sc->audioListTail->next = t; else sc->audioListHead = t; sc->audioListTail = t; - } else { + } else { if(sc->gfxListTail) sc->gfxListTail->next = t; else sc->gfxListHead = t; sc->gfxListTail = t; - } + } + t->next = NULL; - t->state = t->flags & 0x03; + t->state = t->flags & OS_SC_RCP_MASK; } void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { - if (sp) { if (sp->list.t.type == M_AUDTASK) { osWritebackDCacheAll(); /* flush the cache */ D_80126120 = osGetCount(); } - sp->state &= ~0x30; + sp->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); osSpTaskLoad(&sp->list); osSpTaskStartGo(&sp->list); D_800DE754 = 0; @@ -506,7 +496,7 @@ void __scYield(OSSched *sc) { /* * Schedules the tasks to be run on the RCP */ -s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) { +static s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) { s32 avail = availRCP; OSScTask *gfx = sc->gfxListHead; OSScTask *audio = sc->audioListHead; From 23481179eb763cb13dbed185c7ef107efadb20b8 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 14 Oct 2021 15:32:02 -0400 Subject: [PATCH 41/46] Rename gRetraceCount and minor cleanup --- .../non_matchings/sched/__scHandleRetrace.s | 22 +++++++------- lib/src/mips1/sc/sched.c | 30 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s index 4fe94072..69db475e 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -125,18 +125,18 @@ glabel __scHandleRetrace /* 07A5D8 800799D8 0C01E7EA */ jal __scExec /* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: -/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(D_800DE760) # $t5, 0x800e -/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(D_800DE760+4)($t5) -/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(D_800DE760) # $t4, 0x800e -/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(D_800DE760)($t4) +/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCount) # $t5, 0x800e +/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCount+4)($t5) +/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCount) # $t4, 0x800e +/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCount)($t4) /* 07A5F0 800799F0 25AF0001 */ addiu $t7, $t5, 1 /* 07A5F4 800799F4 2DE10001 */ sltiu $at, $t7, 1 /* 07A5F8 800799F8 01817021 */ addu $t6, $t4, $at -/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(D_800DE760) # $at, 0x800e +/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCount) # $at, 0x800e /* 07A600 80079A00 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e /* 07A604 80079A04 2442E750 */ addiu $v0, %lo(D_800DE750) # addiu $v0, $v0, -0x18b0 -/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(D_800DE760)($at) -/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(D_800DE760+4)($at) +/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCount)($at) +/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCount+4)($at) /* 07A610 80079A10 8C580000 */ lw $t8, ($v0) /* 07A614 80079A14 00000000 */ nop /* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 @@ -183,10 +183,10 @@ glabel __scHandleRetrace /* 07A6A4 80079AA4 92020000 */ lbu $v0, ($s0) /* 07A6A8 80079AA8 24010001 */ li $at, 1 /* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 -/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(D_800DE760) # $a0, 0x800e -/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(D_800DE760) # $a1, 0x800e -/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(D_800DE760+4)($a1) -/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(D_800DE760)($a0) +/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCount) # $a0, 0x800e +/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCount) # $a1, 0x800e +/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCount+4)($a1) +/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCount)($a0) /* 07A6C0 80079AC0 24060000 */ li $a2, 0 /* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem /* 07A6C8 80079AC8 24070002 */ li $a3, 2 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 6d1dbc96..3d120b16 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -10,6 +10,7 @@ /* * private typedefs and defines */ +#define UNK_MSG 99 #define VIDEO_MSG 666 #define RSP_DONE_MSG 667 #define RDP_DONE_MSG 668 @@ -31,7 +32,7 @@ s32 D_800DE754 = 0; s32 D_800DE758 = 0; s32 D_800DE75C = 0; // Currently unknown, might be a different type. -u64 D_800DE760 = 0; +u64 gRetraceCount = 0; /*******************************/ @@ -112,8 +113,7 @@ void osScAddClient(OSSched *sc, OSScClient *c, OSMesgQueue *msgQ, u8 arg3){ osSetIntMask(mask); } -void osScRemoveClient(OSSched *sc, OSScClient *c) -{ +void osScRemoveClient(OSSched *sc, OSScClient *c) { OSScClient *client = sc->clientList; OSScClient *prev = 0; OSIntMask mask; @@ -122,10 +122,10 @@ void osScRemoveClient(OSSched *sc, OSScClient *c) while (client != 0) { if (client == c) { - if(prev) - prev->next = c->next; - else - sc->clientList = c->next; + if(prev) + prev->next = c->next; + else + sc->clientList = c->next; break; } prev = client; @@ -135,7 +135,7 @@ void osScRemoveClient(OSSched *sc, OSScClient *c) osSetIntMask(mask); } -OSMesgQueue *osScGetCmdQ(OSSched *sc){ +OSMesgQueue *osScGetCmdQ(OSSched *sc) { return &sc->cmdQ; } @@ -175,7 +175,7 @@ static void __scMain(void *arg) { __scHandleRDP(sc); break; - case (99): + case (UNK_MSG): func_80079760(sc); break; @@ -217,12 +217,11 @@ void func_80079760(OSSched *sc) { } } -void dummy_80079808() { -} -void dummy_80079810() { -} +void dummy_80079808() {} +void dummy_80079810() {} #ifdef NON_MATCHING +//Down to a single regalloc void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; @@ -285,7 +284,7 @@ void __scHandleRetrace(OSSched *sc) { if (__scSchedule(sc, &sp, &dp, state) != state) __scExec(sc, sp, dp); - D_800DE760++; + gRetraceCount++; D_800DE750++; sc->frameCount++; @@ -303,7 +302,8 @@ void __scHandleRetrace(OSSched *sc) { for (client = sc->clientList; client != 0; client = client->next) { if (client->unk0 == 1) { - if (D_800DE760 % 2 == 0) { + //Only run this on even calls to this function + if (gRetraceCount % 2 == 0) { osSendMesg(client->msgQ, sc, OS_MESG_NOBLOCK); if (sc->audioListHead) { func_80079760(sc); From 14e11bd6a2c8b36457b150cb16619b0ecd780e13 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 15 Oct 2021 07:53:00 -0400 Subject: [PATCH 42/46] Rename some unknown variables to be more descriptive --- .../non_matchings/sched/__scHandleRetrace.s | 32 +++++++++---------- lib/src/mips1/sc/sched.c | 30 ++++++++--------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s index 69db475e..dc6d796c 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -11,22 +11,22 @@ glabel __scHandleRetrace /* 07A43C 8007983C 00808825 */ move $s1, $a0 /* 07A440 80079840 11C00007 */ beqz $t6, .L80079860 /* 07A444 80079844 00008025 */ move $s0, $zero -/* 07A448 80079848 3C03800E */ lui $v1, %hi(D_800DE754) # $v1, 0x800e -/* 07A44C 8007984C 2463E754 */ addiu $v1, %lo(D_800DE754) # addiu $v1, $v1, -0x18ac +/* 07A448 80079848 3C03800E */ lui $v1, %hi(gCurRSPTaskCounter) # $v1, 0x800e +/* 07A44C 8007984C 2463E754 */ addiu $v1, %lo(gCurRSPTaskCounter) # addiu $v1, $v1, -0x18ac /* 07A450 80079850 8C6F0000 */ lw $t7, ($v1) /* 07A454 80079854 00000000 */ nop /* 07A458 80079858 25F80001 */ addiu $t8, $t7, 1 /* 07A45C 8007985C AC780000 */ sw $t8, ($v1) .L80079860: /* 07A460 80079860 8E390278 */ lw $t9, 0x278($s1) -/* 07A464 80079864 3C03800E */ lui $v1, %hi(D_800DE754) # $v1, 0x800e +/* 07A464 80079864 3C03800E */ lui $v1, %hi(gCurRSPTaskCounter) # $v1, 0x800e /* 07A468 80079868 13200006 */ beqz $t9, .L80079884 -/* 07A46C 8007986C 2463E754 */ addiu $v1, %lo(D_800DE754) # addiu $v1, $v1, -0x18ac -/* 07A470 80079870 3C08800E */ lui $t0, %hi(D_800DE758) # $t0, 0x800e -/* 07A474 80079874 8D08E758 */ lw $t0, %lo(D_800DE758)($t0) -/* 07A478 80079878 3C01800E */ lui $at, %hi(D_800DE758) # $at, 0x800e +/* 07A46C 8007986C 2463E754 */ addiu $v1, %lo(gCurRSPTaskCounter) # addiu $v1, $v1, -0x18ac +/* 07A470 80079870 3C08800E */ lui $t0, %hi(gCurRDPTaskCounter) # $t0, 0x800e +/* 07A474 80079874 8D08E758 */ lw $t0, %lo(gCurRDPTaskCounter)($t0) +/* 07A478 80079878 3C01800E */ lui $at, %hi(gCurRDPTaskCounter) # $at, 0x800e /* 07A47C 8007987C 25090001 */ addiu $t1, $t0, 1 -/* 07A480 80079880 AC29E758 */ sw $t1, %lo(D_800DE758)($at) +/* 07A480 80079880 AC29E758 */ sw $t1, %lo(gCurRDPTaskCounter)($at) .L80079884: /* 07A484 80079884 8C6A0000 */ lw $t2, ($v1) /* 07A488 80079888 8E220274 */ lw $v0, 0x274($s1) @@ -44,11 +44,11 @@ glabel __scHandleRetrace .L800798B8: /* 07A4B8 800798B8 10400003 */ beqz $v0, .L800798C8 /* 07A4BC 800798BC 240B0001 */ li $t3, 1 -/* 07A4C0 800798C0 3C018012 */ lui $at, %hi(D_80126110) # $at, 0x8012 -/* 07A4C4 800798C4 AC2B6110 */ sw $t3, %lo(D_80126110)($at) +/* 07A4C0 800798C0 3C018012 */ lui $at, %hi(gCurRSPTaskIsSet) # $at, 0x8012 +/* 07A4C4 800798C4 AC2B6110 */ sw $t3, %lo(gCurRSPTaskIsSet)($at) .L800798C8: -/* 07A4C8 800798C8 3C0C800E */ lui $t4, %hi(D_800DE758) # $t4, 0x800e -/* 07A4CC 800798CC 8D8CE758 */ lw $t4, %lo(D_800DE758)($t4) +/* 07A4C8 800798C8 3C0C800E */ lui $t4, %hi(gCurRDPTaskCounter) # $t4, 0x800e +/* 07A4CC 800798CC 8D8CE758 */ lw $t4, %lo(gCurRDPTaskCounter)($t4) /* 07A4D0 800798D0 8E220278 */ lw $v0, 0x278($s1) /* 07A4D4 800798D4 2981000B */ slti $at, $t4, 0xb /* 07A4D8 800798D8 14200016 */ bnez $at, .L80079934 @@ -66,9 +66,9 @@ glabel __scHandleRetrace /* 07A504 80079904 240E0001 */ li $t6, 1 /* 07A508 80079908 A3AE0032 */ sb $t6, 0x32($sp) /* 07A50C 8007990C AE200280 */ sw $zero, 0x280($s1) -/* 07A510 80079910 3C01800E */ lui $at, %hi(D_800DE758) # $at, 0x800e +/* 07A510 80079910 3C01800E */ lui $at, %hi(gCurRDPTaskCounter) # $at, 0x800e /* 07A514 80079914 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa -/* 07A518 80079918 AC20E758 */ sw $zero, %lo(D_800DE758)($at) +/* 07A518 80079918 AC20E758 */ sw $zero, %lo(gCurRDPTaskCounter)($at) /* 07A51C 8007991C 0C033490 */ jal __osSpSetStatus /* 07A520 80079920 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 /* 07A524 80079924 0C033494 */ jal osDpSetStatus @@ -78,8 +78,8 @@ glabel __scHandleRetrace .L80079934: /* 07A534 80079934 10400003 */ beqz $v0, .L80079944 /* 07A538 80079938 240F0001 */ li $t7, 1 -/* 07A53C 8007993C 3C018012 */ lui $at, %hi(D_80126114) # $at, 0x8012 -/* 07A540 80079940 AC2F6114 */ sw $t7, %lo(D_80126114)($at) +/* 07A53C 8007993C 3C018012 */ lui $at, %hi(gCurRDPTaskIsSet) # $at, 0x8012 +/* 07A540 80079940 AC2F6114 */ sw $t7, %lo(gCurRDPTaskIsSet)($at) .L80079944: /* 07A544 80079944 12000002 */ beqz $s0, .L80079950 /* 07A548 80079948 26240078 */ addiu $a0, $s1, 0x78 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 3d120b16..b7b10a68 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -28,9 +28,9 @@ f32 D_800DE748 = 0; f32 D_800DE74C = 0; s32 D_800DE750 = 0; // Currently unknown, might be a different type. -s32 D_800DE754 = 0; -s32 D_800DE758 = 0; -s32 D_800DE75C = 0; // Currently unknown, might be a different type. +s32 gCurRSPTaskCounter = 0; +s32 gCurRDPTaskCounter = 0; +s32 D_800DE75C = 0; u64 gRetraceCount = 0; @@ -60,8 +60,8 @@ const char D_800E7958[] = "\tdata_size\t\t= %u\n"; /************ .bss ************/ -s32 D_80126110; -s32 D_80126114; +s32 gCurRSPTaskIsSet; +s32 gCurRDPTaskIsSet; OSTime gYieldTime; s32 D_80126120; u32 D_80126124; @@ -233,32 +233,32 @@ void __scHandleRetrace(OSSched *sc) { s32 i; if (sc->curRSPTask) { - D_800DE754++; + gCurRSPTaskCounter++; } if (sc->curRDPTask) { - D_800DE758++; + gCurRDPTaskCounter++; } - if ((D_800DE754 > 10) && (sc->curRSPTask)) { - D_800DE754 = 0; + if ((gCurRSPTaskCounter > 10) && (sc->curRSPTask)) { + gCurRSPTaskCounter = 0; set_curRSPTask_NULL = TRUE; __osSpSetStatus(SP_SET_HALT | SP_CLR_INTR_BREAK | SP_CLR_SIG0 | SP_CLR_SIG1 | SP_CLR_SIG2 | SP_CLR_SIG3 | SP_CLR_SIG4 | SP_CLR_SIG5 | SP_CLR_SIG6 | SP_CLR_SIG7); } else if (sc->curRSPTask) { - D_80126110 = 1; + gCurRSPTaskIsSet = TRUE; } - if ((D_800DE758 > 10) && (sc->curRDPTask)) { + if ((gCurRDPTaskCounter > 10) && (sc->curRDPTask)) { if (sc->curRDPTask->unk68 == 0) { osSendMesg(sc->curRDPTask->msgQ, &D_800DE738, OS_MESG_BLOCK); } set_curRDPTask_NULL = TRUE; sc->frameCount = 0; - D_800DE758 = 0; + gCurRDPTaskCounter = 0; __osSpSetStatus(SP_SET_HALT | SP_CLR_INTR_BREAK | SP_CLR_SIG0 | SP_CLR_SIG1 | SP_CLR_SIG2 | SP_CLR_SIG3 | SP_CLR_SIG4 | @@ -267,7 +267,7 @@ void __scHandleRetrace(OSSched *sc) { osDpSetStatus(DPC_SET_XBUS_DMEM_DMA | DPC_CLR_FREEZE | DPC_CLR_FLUSH | DPC_CLR_TMEM_CTR | DPC_CLR_PIPE_CTR | DPC_CLR_CMD_CTR); } else if (sc->curRDPTask) { - D_80126114 = 1; + gCurRDPTaskIsSet = TRUE; } if (set_curRSPTask_NULL) { @@ -471,8 +471,8 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { sp->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); osSpTaskLoad(&sp->list); osSpTaskStartGo(&sp->list); - D_800DE754 = 0; - D_800DE758 = 0; + gCurRSPTaskCounter = 0; + gCurRDPTaskCounter = 0; sc->curRSPTask = sp; if (sp == dp) From 26fa276e2e77e7cb2b1d29d283d5dbbd151ba044 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 15 Oct 2021 09:30:50 -0400 Subject: [PATCH 43/46] Rename some vars, and get __scHandleRetrace even closer to a match --- lib/asm/non_matchings/sched/__scHandleRSP.s | 8 ++--- .../non_matchings/sched/__scHandleRetrace.s | 26 +++++++------- lib/src/mips1/sc/sched.c | 35 ++++++++++--------- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/lib/asm/non_matchings/sched/__scHandleRSP.s b/lib/asm/non_matchings/sched/__scHandleRSP.s index c19d3d20..d8e52b5f 100644 --- a/lib/asm/non_matchings/sched/__scHandleRSP.s +++ b/lib/asm/non_matchings/sched/__scHandleRSP.s @@ -17,8 +17,8 @@ glabel __scHandleRSP /* 07A76C 80079B6C 00808025 */ move $s0, $a0 /* 07A770 80079B70 0C031E34 */ jal osGetCount /* 07A774 80079B74 AFA50034 */ sw $a1, 0x34($sp) -/* 07A778 80079B78 3C038012 */ lui $v1, %hi(D_80126124) # $v1, 0x8012 -/* 07A77C 80079B7C 24636124 */ addiu $v1, %lo(D_80126124) # addiu $v1, $v1, 0x6124 +/* 07A778 80079B78 3C038012 */ lui $v1, %hi(gRSPAudTaskCount) # $v1, 0x8012 +/* 07A77C 80079B7C 24636124 */ addiu $v1, %lo(gRSPAudTaskCount) # addiu $v1, $v1, 0x6124 /* 07A780 80079B80 AC620000 */ sw $v0, ($v1) /* 07A784 80079B84 3C188012 */ lui $t8, %hi(D_80126120) # $t8, 0x8012 /* 07A788 80079B88 8F186120 */ lw $t8, %lo(D_80126120)($t8) @@ -46,7 +46,7 @@ glabel __scHandleRSP /* 07A7DC 80079BDC C4EA0000 */ lwc1 $f10, ($a3) /* 07A7E0 80079BE0 C4C80000 */ lwc1 $f8, ($a2) /* 07A7E4 80079BE4 46128103 */ div.s $f4, $f16, $f18 -/* 07A7E8 80079BE8 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e +/* 07A7E8 80079BE8 3C02800E */ lui $v0, %hi(gRetraceCounter32) # $v0, 0x800e /* 07A7EC 80079BEC E4840000 */ swc1 $f4, ($a0) /* 07A7F0 80079BF0 C4800000 */ lwc1 $f0, ($a0) /* 07A7F4 80079BF4 00000000 */ nop @@ -56,7 +56,7 @@ glabel __scHandleRSP /* 07A804 80079C04 E4C60000 */ swc1 $f6, ($a2) /* 07A808 80079C08 E4E00000 */ swc1 $f0, ($a3) .L80079C0C: -/* 07A80C 80079C0C 8C42E750 */ lw $v0, %lo(D_800DE750)($v0) +/* 07A80C 80079C0C 8C42E750 */ lw $v0, %lo(gRetraceCounter32)($v0) /* 07A810 80079C10 240103E8 */ li $at, 1000 /* 07A814 80079C14 0041001A */ div $zero, $v0, $at /* 07A818 80079C18 24010001 */ li $at, 1 diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s index dc6d796c..083f8519 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -125,18 +125,18 @@ glabel __scHandleRetrace /* 07A5D8 800799D8 0C01E7EA */ jal __scExec /* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: -/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCount) # $t5, 0x800e -/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCount+4)($t5) -/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCount) # $t4, 0x800e -/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCount)($t4) +/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCounter64) # $t5, 0x800e +/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCounter64+4)($t5) +/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCounter64) # $t4, 0x800e +/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCounter64)($t4) /* 07A5F0 800799F0 25AF0001 */ addiu $t7, $t5, 1 /* 07A5F4 800799F4 2DE10001 */ sltiu $at, $t7, 1 /* 07A5F8 800799F8 01817021 */ addu $t6, $t4, $at -/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCount) # $at, 0x800e -/* 07A600 80079A00 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e -/* 07A604 80079A04 2442E750 */ addiu $v0, %lo(D_800DE750) # addiu $v0, $v0, -0x18b0 -/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCount)($at) -/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCount+4)($at) +/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCounter64) # $at, 0x800e +/* 07A600 80079A00 3C02800E */ lui $v0, %hi(gRetraceCounter32) # $v0, 0x800e +/* 07A604 80079A04 2442E750 */ addiu $v0, %lo(gRetraceCounter32) # addiu $v0, $v0, -0x18b0 +/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCounter64)($at) +/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCounter64+4)($at) /* 07A610 80079A10 8C580000 */ lw $t8, ($v0) /* 07A614 80079A14 00000000 */ nop /* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 @@ -183,10 +183,10 @@ glabel __scHandleRetrace /* 07A6A4 80079AA4 92020000 */ lbu $v0, ($s0) /* 07A6A8 80079AA8 24010001 */ li $at, 1 /* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 -/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCount) # $a0, 0x800e -/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCount) # $a1, 0x800e -/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCount+4)($a1) -/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCount)($a0) +/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCounter64) # $a0, 0x800e +/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCounter64) # $a1, 0x800e +/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCounter64+4)($a1) +/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCounter64)($a0) /* 07A6C0 80079AC0 24060000 */ li $a2, 0 /* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem /* 07A6C8 80079AC8 24070002 */ li $a3, 2 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index b7b10a68..de8f6b64 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -27,12 +27,11 @@ f32 D_800DE744 = 0; f32 D_800DE748 = 0; f32 D_800DE74C = 0; -s32 D_800DE750 = 0; // Currently unknown, might be a different type. +u32 gRetraceCounter32 = 0; s32 gCurRSPTaskCounter = 0; s32 gCurRDPTaskCounter = 0; -s32 D_800DE75C = 0; - -u64 gRetraceCount = 0; +static u32 gUnusedVar = 0; +u64 gRetraceCounter64 = 0; /*******************************/ @@ -64,7 +63,7 @@ s32 gCurRSPTaskIsSet; s32 gCurRDPTaskIsSet; OSTime gYieldTime; s32 D_80126120; -u32 D_80126124; +u32 gRSPAudTaskCount; s32 D_80126128[18]; /*******************************/ @@ -221,7 +220,7 @@ void dummy_80079808() {} void dummy_80079810() {} #ifdef NON_MATCHING -//Down to a single regalloc +//Down to single stack pointer value being 0x24 instead of 0x28 void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; @@ -231,6 +230,7 @@ void __scHandleRetrace(OSSched *sc) { u8 set_curRSPTask_NULL = FALSE; u8 set_curRDPTask_NULL = FALSE; s32 i; + OSScTask *unkTask; if (sc->curRSPTask) { gCurRSPTaskCounter++; @@ -284,16 +284,17 @@ void __scHandleRetrace(OSSched *sc) { if (__scSchedule(sc, &sp, &dp, state) != state) __scExec(sc, sp, dp); - gRetraceCount++; - D_800DE750++; + gRetraceCounter64++; + gRetraceCounter32++; sc->frameCount++; if ((sc->unkTask) && (sc->frameCount >= 2)) { - if (sc->unkTask->msgQ) { - if ((sc->unkTask->unk68) || (sc->unkTask->msg)) { - osSendMesg(sc->unkTask->msgQ, sc->unkTask->msg, OS_MESG_BLOCK); + unkTask = sc->unkTask; + if (unkTask->msgQ) { + if ((unkTask->unk68) || (unkTask->msg)) { + osSendMesg(unkTask->msgQ, unkTask->msg, OS_MESG_BLOCK); } else { - osSendMesg(sc->unkTask->msgQ, &D_800DE730, OS_MESG_BLOCK); + osSendMesg(unkTask->msgQ, &D_800DE730, OS_MESG_BLOCK); } } sc->frameCount = 0; @@ -303,7 +304,7 @@ void __scHandleRetrace(OSSched *sc) { for (client = sc->clientList; client != 0; client = client->next) { if (client->unk0 == 1) { //Only run this on even calls to this function - if (gRetraceCount % 2 == 0) { + if (gRetraceCounter64 % 2 == 0) { osSendMesg(client->msgQ, sc, OS_MESG_NOBLOCK); if (sc->audioListHead) { func_80079760(sc); @@ -332,13 +333,13 @@ void __scHandleRSP(OSSched *sc) { //Rare seems to have edited this function, most specifically here. //Still need to do better for a match, but this does work if (t->list.t.type == M_AUDTASK) { - D_80126124 = osGetCount(); - D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); + gRSPAudTaskCount = osGetCount(); + D_800DE74C = (f32) (((f32) (gRSPAudTaskCount - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); D_800DE744 = (f32) (D_800DE744 + D_800DE74C); if (D_800DE740 < D_800DE74C) { D_800DE740 = D_800DE74C; } - temp_hi = (s32) D_800DE750 % 1000; + temp_hi = (s32) gRetraceCounter32 % 1000; if ((temp_hi == 1) || (temp_hi == 2)) { D_800DE748 = (f32) (D_800DE744 / 500.0f); D_800DE744 = 0.0f; @@ -480,7 +481,7 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { } if (dp && (dp != sp)) { - osDpSetNextBuffer(dp->list.t.output_buff, *dp->list.t.output_buff_size); + osDpSetNextBuffer(dp->list.t.output_buff, *dp->list.t.output_buff_size); sc->curRDPTask = dp; } } From 5e0623fa2a9f53150662de51c08205fc641bf122 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 15 Oct 2021 11:03:07 -0400 Subject: [PATCH 44/46] Matched __scHandleRetrace! This brings sched.c to a close --- .../non_matchings/sched/__scHandleRetrace.s | 227 ------------------ lib/src/mips1/sc/sched.c | 6 - 2 files changed, 233 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scHandleRetrace.s diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s deleted file mode 100644 index 083f8519..00000000 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ /dev/null @@ -1,227 +0,0 @@ -glabel __scHandleRetrace -/* 07A418 80079818 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 07A41C 8007981C AFBF001C */ sw $ra, 0x1c($sp) -/* 07A420 80079820 AFB10018 */ sw $s1, 0x18($sp) -/* 07A424 80079824 AFB00014 */ sw $s0, 0x14($sp) -/* 07A428 80079828 AFA00044 */ sw $zero, 0x44($sp) -/* 07A42C 8007982C AFA00038 */ sw $zero, 0x38($sp) -/* 07A430 80079830 AFA00034 */ sw $zero, 0x34($sp) -/* 07A434 80079834 A3A00032 */ sb $zero, 0x32($sp) -/* 07A438 80079838 8C8E0274 */ lw $t6, 0x274($a0) -/* 07A43C 8007983C 00808825 */ move $s1, $a0 -/* 07A440 80079840 11C00007 */ beqz $t6, .L80079860 -/* 07A444 80079844 00008025 */ move $s0, $zero -/* 07A448 80079848 3C03800E */ lui $v1, %hi(gCurRSPTaskCounter) # $v1, 0x800e -/* 07A44C 8007984C 2463E754 */ addiu $v1, %lo(gCurRSPTaskCounter) # addiu $v1, $v1, -0x18ac -/* 07A450 80079850 8C6F0000 */ lw $t7, ($v1) -/* 07A454 80079854 00000000 */ nop -/* 07A458 80079858 25F80001 */ addiu $t8, $t7, 1 -/* 07A45C 8007985C AC780000 */ sw $t8, ($v1) -.L80079860: -/* 07A460 80079860 8E390278 */ lw $t9, 0x278($s1) -/* 07A464 80079864 3C03800E */ lui $v1, %hi(gCurRSPTaskCounter) # $v1, 0x800e -/* 07A468 80079868 13200006 */ beqz $t9, .L80079884 -/* 07A46C 8007986C 2463E754 */ addiu $v1, %lo(gCurRSPTaskCounter) # addiu $v1, $v1, -0x18ac -/* 07A470 80079870 3C08800E */ lui $t0, %hi(gCurRDPTaskCounter) # $t0, 0x800e -/* 07A474 80079874 8D08E758 */ lw $t0, %lo(gCurRDPTaskCounter)($t0) -/* 07A478 80079878 3C01800E */ lui $at, %hi(gCurRDPTaskCounter) # $at, 0x800e -/* 07A47C 8007987C 25090001 */ addiu $t1, $t0, 1 -/* 07A480 80079880 AC29E758 */ sw $t1, %lo(gCurRDPTaskCounter)($at) -.L80079884: -/* 07A484 80079884 8C6A0000 */ lw $t2, ($v1) -/* 07A488 80079888 8E220274 */ lw $v0, 0x274($s1) -/* 07A48C 8007988C 2941000B */ slti $at, $t2, 0xb -/* 07A490 80079890 14200009 */ bnez $at, .L800798B8 -/* 07A494 80079894 00000000 */ nop -/* 07A498 80079898 10400007 */ beqz $v0, .L800798B8 -/* 07A49C 8007989C 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa -/* 07A4A0 800798A0 AC600000 */ sw $zero, ($v1) -/* 07A4A4 800798A4 24100001 */ li $s0, 1 -/* 07A4A8 800798A8 0C033490 */ jal __osSpSetStatus -/* 07A4AC 800798AC 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 -/* 07A4B0 800798B0 10000005 */ b .L800798C8 -/* 07A4B4 800798B4 00000000 */ nop -.L800798B8: -/* 07A4B8 800798B8 10400003 */ beqz $v0, .L800798C8 -/* 07A4BC 800798BC 240B0001 */ li $t3, 1 -/* 07A4C0 800798C0 3C018012 */ lui $at, %hi(gCurRSPTaskIsSet) # $at, 0x8012 -/* 07A4C4 800798C4 AC2B6110 */ sw $t3, %lo(gCurRSPTaskIsSet)($at) -.L800798C8: -/* 07A4C8 800798C8 3C0C800E */ lui $t4, %hi(gCurRDPTaskCounter) # $t4, 0x800e -/* 07A4CC 800798CC 8D8CE758 */ lw $t4, %lo(gCurRDPTaskCounter)($t4) -/* 07A4D0 800798D0 8E220278 */ lw $v0, 0x278($s1) -/* 07A4D4 800798D4 2981000B */ slti $at, $t4, 0xb -/* 07A4D8 800798D8 14200016 */ bnez $at, .L80079934 -/* 07A4DC 800798DC 00000000 */ nop -/* 07A4E0 800798E0 10400014 */ beqz $v0, .L80079934 -/* 07A4E4 800798E4 00000000 */ nop -/* 07A4E8 800798E8 8C4D0068 */ lw $t5, 0x68($v0) -/* 07A4EC 800798EC 3C05800E */ lui $a1, %hi(D_800DE738) # $a1, 0x800e -/* 07A4F0 800798F0 15A00004 */ bnez $t5, .L80079904 -/* 07A4F4 800798F4 24A5E738 */ addiu $a1, %lo(D_800DE738) # addiu $a1, $a1, -0x18c8 -/* 07A4F8 800798F8 8C440050 */ lw $a0, 0x50($v0) -/* 07A4FC 800798FC 0C03238C */ jal osSendMesg -/* 07A500 80079900 24060001 */ li $a2, 1 -.L80079904: -/* 07A504 80079904 240E0001 */ li $t6, 1 -/* 07A508 80079908 A3AE0032 */ sb $t6, 0x32($sp) -/* 07A50C 8007990C AE200280 */ sw $zero, 0x280($s1) -/* 07A510 80079910 3C01800E */ lui $at, %hi(gCurRDPTaskCounter) # $at, 0x800e -/* 07A514 80079914 3C0400AA */ lui $a0, (0x00AAAA82 >> 16) # lui $a0, 0xaa -/* 07A518 80079918 AC20E758 */ sw $zero, %lo(gCurRDPTaskCounter)($at) -/* 07A51C 8007991C 0C033490 */ jal __osSpSetStatus -/* 07A520 80079920 3484AA82 */ ori $a0, (0x00AAAA82 & 0xFFFF) # ori $a0, $a0, 0xaa82 -/* 07A524 80079924 0C033494 */ jal osDpSetStatus -/* 07A528 80079928 240401D6 */ li $a0, 470 -/* 07A52C 8007992C 10000005 */ b .L80079944 -/* 07A530 80079930 00000000 */ nop -.L80079934: -/* 07A534 80079934 10400003 */ beqz $v0, .L80079944 -/* 07A538 80079938 240F0001 */ li $t7, 1 -/* 07A53C 8007993C 3C018012 */ lui $at, %hi(gCurRDPTaskIsSet) # $at, 0x8012 -/* 07A540 80079940 AC2F6114 */ sw $t7, %lo(gCurRDPTaskIsSet)($at) -.L80079944: -/* 07A544 80079944 12000002 */ beqz $s0, .L80079950 -/* 07A548 80079948 26240078 */ addiu $a0, $s1, 0x78 -/* 07A54C 8007994C AE200274 */ sw $zero, 0x274($s1) -.L80079950: -/* 07A550 80079950 93B80032 */ lbu $t8, 0x32($sp) -/* 07A554 80079954 27A50044 */ addiu $a1, $sp, 0x44 -/* 07A558 80079958 13000002 */ beqz $t8, .L80079964 -/* 07A55C 8007995C 00003025 */ move $a2, $zero -/* 07A560 80079960 AE200278 */ sw $zero, 0x278($s1) -.L80079964: -/* 07A564 80079964 0C0322EC */ jal osRecvMesg -/* 07A568 80079968 AFA40028 */ sw $a0, 0x28($sp) -/* 07A56C 8007996C 2410FFFF */ li $s0, -1 -/* 07A570 80079970 1050000A */ beq $v0, $s0, .L8007999C -/* 07A574 80079974 00000000 */ nop -/* 07A578 80079978 8FA50044 */ lw $a1, 0x44($sp) -.L8007997C: -/* 07A57C 8007997C 0C01E7D0 */ jal __scAppendList -/* 07A580 80079980 02202025 */ move $a0, $s1 -/* 07A584 80079984 8FA40028 */ lw $a0, 0x28($sp) -/* 07A588 80079988 27A50044 */ addiu $a1, $sp, 0x44 -/* 07A58C 8007998C 0C0322EC */ jal osRecvMesg -/* 07A590 80079990 00003025 */ move $a2, $zero -/* 07A594 80079994 1450FFF9 */ bne $v0, $s0, .L8007997C -/* 07A598 80079998 8FA50044 */ lw $a1, 0x44($sp) -.L8007999C: -/* 07A59C 8007999C 8E390274 */ lw $t9, 0x274($s1) -/* 07A5A0 800799A0 8E2A0278 */ lw $t2, 0x278($s1) -/* 07A5A4 800799A4 2F280001 */ sltiu $t0, $t9, 1 -/* 07A5A8 800799A8 00084840 */ sll $t1, $t0, 1 -/* 07A5AC 800799AC 2D4B0001 */ sltiu $t3, $t2, 1 -/* 07A5B0 800799B0 012B8025 */ or $s0, $t1, $t3 -/* 07A5B4 800799B4 02003825 */ move $a3, $s0 -/* 07A5B8 800799B8 02202025 */ move $a0, $s1 -/* 07A5BC 800799BC 27A50038 */ addiu $a1, $sp, 0x38 -/* 07A5C0 800799C0 0C01E835 */ jal __scSchedule -/* 07A5C4 800799C4 27A60034 */ addiu $a2, $sp, 0x34 -/* 07A5C8 800799C8 10500005 */ beq $v0, $s0, .L800799E0 -/* 07A5CC 800799CC 00000000 */ nop -/* 07A5D0 800799D0 8FA50038 */ lw $a1, 0x38($sp) -/* 07A5D4 800799D4 8FA60034 */ lw $a2, 0x34($sp) -/* 07A5D8 800799D8 0C01E7EA */ jal __scExec -/* 07A5DC 800799DC 02202025 */ move $a0, $s1 -.L800799E0: -/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCounter64) # $t5, 0x800e -/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCounter64+4)($t5) -/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCounter64) # $t4, 0x800e -/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCounter64)($t4) -/* 07A5F0 800799F0 25AF0001 */ addiu $t7, $t5, 1 -/* 07A5F4 800799F4 2DE10001 */ sltiu $at, $t7, 1 -/* 07A5F8 800799F8 01817021 */ addu $t6, $t4, $at -/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCounter64) # $at, 0x800e -/* 07A600 80079A00 3C02800E */ lui $v0, %hi(gRetraceCounter32) # $v0, 0x800e -/* 07A604 80079A04 2442E750 */ addiu $v0, %lo(gRetraceCounter32) # addiu $v0, $v0, -0x18b0 -/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCounter64)($at) -/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCounter64+4)($at) -/* 07A610 80079A10 8C580000 */ lw $t8, ($v0) -/* 07A614 80079A14 00000000 */ nop -/* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 -/* 07A61C 80079A1C AC590000 */ sw $t9, ($v0) -/* 07A620 80079A20 8E280280 */ lw $t0, 0x280($s1) -/* 07A624 80079A24 8E23027C */ lw $v1, 0x27c($s1) -/* 07A628 80079A28 250A0001 */ addiu $t2, $t0, 1 -/* 07A62C 80079A2C 10600019 */ beqz $v1, .L80079A94 -/* 07A630 80079A30 AE2A0280 */ sw $t2, 0x280($s1) -/* 07A634 80079A34 2D410002 */ sltiu $at, $t2, 2 -/* 07A638 80079A38 14200016 */ bnez $at, .L80079A94 -/* 07A63C 80079A3C 00000000 */ nop -/* 07A640 80079A40 8C640050 */ lw $a0, 0x50($v1) -/* 07A644 80079A44 00601025 */ move $v0, $v1 -/* 07A648 80079A48 10800010 */ beqz $a0, .L80079A8C -/* 07A64C 80079A4C 00000000 */ nop -/* 07A650 80079A50 8C6B0068 */ lw $t3, 0x68($v1) -/* 07A654 80079A54 00000000 */ nop -/* 07A658 80079A58 15600005 */ bnez $t3, .L80079A70 -/* 07A65C 80079A5C 00000000 */ nop -/* 07A660 80079A60 8C6C0054 */ lw $t4, 0x54($v1) -/* 07A664 80079A64 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e -/* 07A668 80079A68 11800006 */ beqz $t4, .L80079A84 -/* 07A66C 80079A6C 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0 -.L80079A70: -/* 07A670 80079A70 8C450054 */ lw $a1, 0x54($v0) -/* 07A674 80079A74 0C03238C */ jal osSendMesg -/* 07A678 80079A78 24060001 */ li $a2, 1 -/* 07A67C 80079A7C 10000004 */ b .L80079A90 -/* 07A680 80079A80 AE200280 */ sw $zero, 0x280($s1) -.L80079A84: -/* 07A684 80079A84 0C03238C */ jal osSendMesg -/* 07A688 80079A88 24060001 */ li $a2, 1 -.L80079A8C: -/* 07A68C 80079A8C AE200280 */ sw $zero, 0x280($s1) -.L80079A90: -/* 07A690 80079A90 AE20027C */ sw $zero, 0x27c($s1) -.L80079A94: -/* 07A694 80079A94 8E300260 */ lw $s0, 0x260($s1) -/* 07A698 80079A98 00000000 */ nop -/* 07A69C 80079A9C 12000025 */ beqz $s0, .L80079B34 -/* 07A6A0 80079AA0 8FBF001C */ lw $ra, 0x1c($sp) -.L80079AA4: -/* 07A6A4 80079AA4 92020000 */ lbu $v0, ($s0) -/* 07A6A8 80079AA8 24010001 */ li $at, 1 -/* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 -/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCounter64) # $a0, 0x800e -/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCounter64) # $a1, 0x800e -/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCounter64+4)($a1) -/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCounter64)($a0) -/* 07A6C0 80079AC0 24060000 */ li $a2, 0 -/* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem -/* 07A6C8 80079AC8 24070002 */ li $a3, 2 -/* 07A6CC 80079ACC 14400014 */ bnez $v0, .L80079B20 -/* 07A6D0 80079AD0 00000000 */ nop -/* 07A6D4 80079AD4 14600012 */ bnez $v1, .L80079B20 -/* 07A6D8 80079AD8 02202825 */ move $a1, $s1 -/* 07A6DC 80079ADC 8E040008 */ lw $a0, 8($s0) -/* 07A6E0 80079AE0 0C03238C */ jal osSendMesg -/* 07A6E4 80079AE4 00003025 */ move $a2, $zero -/* 07A6E8 80079AE8 8E2D0264 */ lw $t5, 0x264($s1) -/* 07A6EC 80079AEC 00000000 */ nop -/* 07A6F0 80079AF0 11A0000B */ beqz $t5, .L80079B20 -/* 07A6F4 80079AF4 00000000 */ nop -/* 07A6F8 80079AF8 0C01E5D8 */ jal func_80079760 -/* 07A6FC 80079AFC 02202025 */ move $a0, $s1 -/* 07A700 80079B00 10000008 */ b .L80079B24 -/* 07A704 80079B04 8E100004 */ lw $s0, 4($s0) -.L80079B08: -/* 07A708 80079B08 24010002 */ li $at, 2 -/* 07A70C 80079B0C 14410004 */ bne $v0, $at, .L80079B20 -/* 07A710 80079B10 02202825 */ move $a1, $s1 -/* 07A714 80079B14 8E040008 */ lw $a0, 8($s0) -/* 07A718 80079B18 0C03238C */ jal osSendMesg -/* 07A71C 80079B1C 00003025 */ move $a2, $zero -.L80079B20: -/* 07A720 80079B20 8E100004 */ lw $s0, 4($s0) -.L80079B24: -/* 07A724 80079B24 00000000 */ nop -/* 07A728 80079B28 1600FFDE */ bnez $s0, .L80079AA4 -/* 07A72C 80079B2C 00000000 */ nop -/* 07A730 80079B30 8FBF001C */ lw $ra, 0x1c($sp) -.L80079B34: -/* 07A734 80079B34 8FB00014 */ lw $s0, 0x14($sp) -/* 07A738 80079B38 8FB10018 */ lw $s1, 0x18($sp) -/* 07A73C 80079B3C 03E00008 */ jr $ra -/* 07A740 80079B40 27BD0048 */ addiu $sp, $sp, 0x48 - diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index de8f6b64..7dd7d928 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -219,8 +219,6 @@ void func_80079760(OSSched *sc) { void dummy_80079808() {} void dummy_80079810() {} -#ifdef NON_MATCHING -//Down to single stack pointer value being 0x24 instead of 0x28 void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; @@ -229,7 +227,6 @@ void __scHandleRetrace(OSSched *sc) { OSScTask *dp = 0; u8 set_curRSPTask_NULL = FALSE; u8 set_curRDPTask_NULL = FALSE; - s32 i; OSScTask *unkTask; if (sc->curRSPTask) { @@ -315,9 +312,6 @@ void __scHandleRetrace(OSSched *sc) { } } } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace.s") -#endif //Keeping this defined here because it seems too specific to this function #define OS_CPU_COUNTER_F (f32)(OS_CPU_COUNTER / 100.0f) From 11a798aa95d05a1d27a193d9b3ceaa326b7b35ba Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 15 Oct 2021 11:04:27 -0400 Subject: [PATCH 45/46] Update the score in the README --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 2f5e5eaa..8bcf9655 100755 --- a/README.md +++ b/README.md @@ -113,30 +113,30 @@ s32 is_drumstick_unlocked(void) { } ``` -As of September 27th 2021, this is our current score: +As of October 15th 2021, this is our current score: ``` - ================================================================== - ADVENTURE ONE (ASM -> C Decompilation) - ------------------------ 16.16% Complete ------------------------- - # Decompiled functions: 934 - # GLOBAL_ASM remaining: 848 - # NON_MATCHING functions: 104 - -------------------------- Game Status --------------------------- - Balloons: 8/47, Keys: 1/4, Trophies: 0/5 - T.T. Amulets: 1/4, Wizpig Amulets: 0/4 - ------------------------------------------------------------------ - We are collecting silver coins in Ancient Lake. (5/8 silver coins) - ================================================================== - ADVENTURE TWO (Cleanup & Documentation) - ------------------------ 0.80% Complete ------------------------- - # Documented functions: 65 - # Undocumented remaining: 1717 - -------------------------- Game Status --------------------------- - Balloons: 0/47, Keys: 0/4, Trophies: 0/5 - T.T. Amulets: 0/4, Wizpig Amulets: 0/4 - ------------------------------------------------------------------ - We are collecting the first balloon on Timber's Island. - ================================================================== + =================================================================== + ADVENTURE ONE (ASM -> C Decompilation) + ------------------------- 17.77% Complete ------------------------- + # Decompiled functions: 972 + # GLOBAL_ASM remaining: 786 + # NON_MATCHING functions: 104 + --------------------------- Game Status --------------------------- + Balloons: 9/47, Keys: 1/4, Trophies: 0/5 + T.T. Amulets: 1/4, Wizpig Amulets: 0/4 + ------------------------------------------------------------------- + We are collecting silver coins in Fossil Canyon. (6/8 silver coins) + =================================================================== + ADVENTURE TWO (Cleanup & Documentation) + ------------------------- 0.80% Complete ------------------------- + # Documented functions: 65 + # Undocumented remaining: 1693 + --------------------------- Game Status --------------------------- + Balloons: 0/47, Keys: 0/4, Trophies: 0/5 + T.T. Amulets: 0/4, Wizpig Amulets: 0/4 + ------------------------------------------------------------------- + We are collecting the first balloon on Timber's Island. + =================================================================== ``` From 9a7d56a3eeeec7f8b988874ed6f8088c77a744d5 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 15 Oct 2021 14:53:40 -0400 Subject: [PATCH 46/46] Identify and name some more vars --- lib/asm/non_matchings/unknown_0CA530/sqrtf.s | 7 -- lib/asm/non_matchings/unknown_0D3020/_Genld.s | 4 +- lib/asm/non_matchings/unknown_0D3020/_Ldtob.s | 20 ++-- lib/asm/non_matchings/unknown_0D3020/_Litob.s | 8 +- lib/asm/non_matchings/unknown_0D3020/cosf.s | 24 ++--- .../unknown_0D3020/func_800D2470.s | 6 -- lib/asm/non_matchings/unknown_0D3020/sinf.s | 28 ++--- lib/asm/sqrtf.s | 16 +++ lib/src/gu/{unknown_0D56B0.c => cosf.c} | 1 - lib/src/gu/guint.h | 42 ++++++++ lib/src/gu/libm_vals.s | 5 + lib/src/gu/sinf.c | 7 ++ lib/src/gu/sqrtf.c | 8 -- lib/src/libc/ldiv.c | 33 ++++++ lib/src/libc/llcvt.c | 18 ++-- lib/src/os/piacs.c | 102 ++++++++---------- 16 files changed, 200 insertions(+), 129 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CA530/sqrtf.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/func_800D2470.s create mode 100644 lib/asm/sqrtf.s rename lib/src/gu/{unknown_0D56B0.c => cosf.c} (77%) create mode 100644 lib/src/gu/guint.h create mode 100644 lib/src/gu/libm_vals.s create mode 100644 lib/src/gu/sinf.c delete mode 100644 lib/src/gu/sqrtf.c diff --git a/lib/asm/non_matchings/unknown_0CA530/sqrtf.s b/lib/asm/non_matchings/unknown_0CA530/sqrtf.s deleted file mode 100644 index 80960e72..00000000 --- a/lib/asm/non_matchings/unknown_0CA530/sqrtf.s +++ /dev/null @@ -1,7 +0,0 @@ -glabel sqrtf -/* 0CA6D0 800C9AD0 03E00008 */ jr $ra -/* 0CA6D4 800C9AD4 46006004 */ sqrt.s $f0, $f12 - -/* 0CA6D8 800C9AD8 00000000 */ nop -/* 0CA6DC 800C9ADC 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0D3020/_Genld.s b/lib/asm/non_matchings/unknown_0D3020/_Genld.s index 0a77c890..146d6546 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Genld.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Genld.s @@ -11,8 +11,8 @@ glabel _Genld /* 0D75C4 800D69C4 01C0A025 */ move $s4, $t6 /* 0D75C8 800D69C8 1E600004 */ bgtz $s3, .L800D69DC /* 0D75CC 800D69CC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D75D0 800D69D0 3C11800F */ lui $s1, %hi(D_800E98B0) # $s1, 0x800f -/* 0D75D4 800D69D4 263198B0 */ addiu $s1, %lo(D_800E98B0) # addiu $s1, $s1, -0x6750 +/* 0D75D0 800D69D0 3C11800F */ lui $s1, %hi(_Genld_0_string) # $s1, 0x800f +/* 0D75D4 800D69D4 263198B0 */ addiu $s1, %lo(_Genld_0_string) # addiu $s1, $s1, -0x6750 /* 0D75D8 800D69D8 24130001 */ li $s3, 1 .L800D69DC: /* 0D75DC 800D69DC 24020066 */ li $v0, 102 diff --git a/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s b/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s index 5d88caa2..fc92c6fa 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s @@ -91,12 +91,12 @@ glabel _Ldtob /* 0D7C4C 800D704C 24010002 */ li $at, 2 /* 0D7C50 800D7050 15C10004 */ bne $t6, $at, .L800D7064 /* 0D7C54 800D7054 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D7C58 800D7058 3C05800F */ lui $a1, %hi(D_800E98A8) # $a1, 0x800f +/* 0D7C58 800D7058 3C05800F */ lui $a1, %hi(Ldtob_NaN) # $a1, 0x800f /* 0D7C5C 800D705C 10000003 */ b .L800D706C -/* 0D7C60 800D7060 24A598A8 */ addiu $a1, %lo(D_800E98A8) # addiu $a1, $a1, -0x6758 +/* 0D7C60 800D7060 24A598A8 */ addiu $a1, %lo(Ldtob_NaN) # addiu $a1, $a1, -0x6758 .L800D7064: -/* 0D7C64 800D7064 3C05800F */ lui $a1, %hi(D_800E98AC) # $a1, 0x800f -/* 0D7C68 800D7068 24A598AC */ addiu $a1, %lo(D_800E98AC) # addiu $a1, $a1, -0x6754 +/* 0D7C64 800D7064 3C05800F */ lui $a1, %hi(Ldtob_Inf) # $a1, 0x800f +/* 0D7C68 800D7068 24A598AC */ addiu $a1, %lo(Ldtob_Inf) # addiu $a1, $a1, -0x6754 .L800D706C: /* 0D7C6C 800D706C 240F0003 */ li $t7, 3 /* 0D7C70 800D7070 AF2F0014 */ sw $t7, 0x14($t9) @@ -147,8 +147,8 @@ glabel _Ldtob /* 0D7D18 800D7118 0002C823 */ negu $t9, $v0 /* 0D7D1C 800D711C 1840002C */ blez $v0, .L800D71D0 /* 0D7D20 800D7120 A7B9009A */ sh $t9, 0x9a($sp) -/* 0D7D24 800D7124 3C04800F */ lui $a0, %hi(D_800E9860) # $a0, 0x800f -/* 0D7D28 800D7128 24849860 */ addiu $a0, %lo(D_800E9860) # addiu $a0, $a0, -0x67a0 +/* 0D7D24 800D7124 3C04800F */ lui $a0, %hi(pows) # $a0, 0x800f +/* 0D7D28 800D7128 24849860 */ addiu $a0, %lo(pows) # addiu $a0, $a0, -0x67a0 .L800D712C: /* 0D7D2C 800D712C 304E0001 */ andi $t6, $v0, 1 /* 0D7D30 800D7130 11C00006 */ beqz $t6, .L800D714C @@ -179,8 +179,8 @@ glabel _Ldtob /* 0D7D8C 800D718C A7B8009A */ sh $t8, 0x9a($sp) /* 0D7D90 800D7190 19C0000E */ blez $t6, .L800D71CC /* 0D7D94 800D7194 01E01025 */ move $v0, $t7 -/* 0D7D98 800D7198 3C04800F */ lui $a0, %hi(D_800E9860) # $a0, 0x800f -/* 0D7D9C 800D719C 24849860 */ addiu $a0, %lo(D_800E9860) # addiu $a0, $a0, -0x67a0 +/* 0D7D98 800D7198 3C04800F */ lui $a0, %hi(pows) # $a0, 0x800f +/* 0D7D9C 800D719C 24849860 */ addiu $a0, %lo(pows) # addiu $a0, $a0, -0x67a0 .L800D71A0: /* 0D7DA0 800D71A0 304F0001 */ andi $t7, $v0, 1 /* 0D7DA4 800D71A4 11E00006 */ beqz $t7, .L800D71C0 @@ -229,8 +229,8 @@ glabel _Ldtob /* 0D7E34 800D7234 1A800008 */ blez $s4, .L800D7258 /* 0D7E38 800D7238 00000000 */ nop /* 0D7E3C 800D723C 44915000 */ mtc1 $s1, $f10 -/* 0D7E40 800D7240 3C01800F */ lui $at, %hi(D_800E98B8) # $at, 0x800f -/* 0D7E44 800D7244 D42898B8 */ ldc1 $f8, %lo(D_800E98B8)($at) +/* 0D7E40 800D7240 3C01800F */ lui $at, %hi(_Ldtob_1e8) # $at, 0x800f +/* 0D7E44 800D7244 D42898B8 */ ldc1 $f8, %lo(_Ldtob_1e8)($at) /* 0D7E48 800D7248 46805121 */ cvt.d.w $f4, $f10 /* 0D7E4C 800D724C 4624A181 */ sub.d $f6, $f20, $f4 /* 0D7E50 800D7250 46283502 */ mul.d $f20, $f6, $f8 diff --git a/lib/asm/non_matchings/unknown_0D3020/_Litob.s b/lib/asm/non_matchings/unknown_0D3020/_Litob.s index 481c9b96..d0c575f0 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Litob.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Litob.s @@ -10,12 +10,12 @@ glabel _Litob /* 0D7320 800D6720 AFB0001C */ sw $s0, 0x1c($sp) /* 0D7324 800D6724 14620004 */ bne $v1, $v0, .L800D6738 /* 0D7328 800D6728 AFA50094 */ sw $a1, 0x94($sp) -/* 0D732C 800D672C 3C13800E */ lui $s3, %hi(D_800E4934) # $s3, 0x800e +/* 0D732C 800D672C 3C13800E */ lui $s3, %hi(udigs) # $s3, 0x800e /* 0D7330 800D6730 10000003 */ b .L800D6740 -/* 0D7334 800D6734 26734934 */ addiu $s3, %lo(D_800E4934) # addiu $s3, $s3, 0x4934 +/* 0D7334 800D6734 26734934 */ addiu $s3, %lo(udigs) # addiu $s3, $s3, 0x4934 .L800D6738: -/* 0D7338 800D6738 3C13800E */ lui $s3, %hi(D_800E4920) # $s3, 0x800e -/* 0D733C 800D673C 26734920 */ addiu $s3, %lo(D_800E4920) # addiu $s3, $s3, 0x4920 +/* 0D7338 800D6738 3C13800E */ lui $s3, %hi(ldigs) # $s3, 0x800e +/* 0D733C 800D673C 26734920 */ addiu $s3, %lo(ldigs) # addiu $s3, $s3, 0x4920 .L800D6740: /* 0D7340 800D6740 2401006F */ li $at, 111 /* 0D7344 800D6744 14410003 */ bne $v0, $at, .L800D6754 diff --git a/lib/asm/non_matchings/unknown_0D3020/cosf.s b/lib/asm/non_matchings/unknown_0D3020/cosf.s index 0222e3d0..8c999e23 100644 --- a/lib/asm/non_matchings/unknown_0D3020/cosf.s +++ b/lib/asm/non_matchings/unknown_0D3020/cosf.s @@ -13,14 +13,14 @@ glabel cosf /* 0D56DC 800D4ADC 44819800 */ mtc1 $at, $f19 /* 0D56E0 800D4AE0 4606203C */ c.lt.s $f4, $f6 /* 0D56E4 800D4AE4 C7A00000 */ lwc1 $f0, ($sp) -/* 0D56E8 800D4AE8 3C01800F */ lui $at, %hi(D_800E97E8) # $at, 0x800f +/* 0D56E8 800D4AE8 3C01800F */ lui $at, %hi(rpi_cosf) # $at, 0x800f /* 0D56EC 800D4AEC 45020004 */ bc1fl .L800D4B00 /* 0D56F0 800D4AF0 46000007 */ neg.s $f0, $f0 /* 0D56F4 800D4AF4 10000002 */ b .L800D4B00 /* 0D56F8 800D4AF8 46003006 */ mov.s $f0, $f6 /* 0D56FC 800D4AFC 46000007 */ neg.s $f0, $f0 .L800D4B00: -/* 0D5700 800D4B00 D42897E8 */ ldc1 $f8, %lo(D_800E97E8)($at) +/* 0D5700 800D4B00 D42897E8 */ ldc1 $f8, %lo(rpi_cosf)($at) /* 0D5704 800D4B04 46000321 */ cvt.d.s $f12, $f0 /* 0D5708 800D4B08 44809000 */ mtc1 $zero, $f18 /* 0D570C 800D4B0C 46286282 */ mul.d $f10, $f12, $f8 @@ -43,13 +43,13 @@ glabel cosf /* 0D574C 800D4B4C 00000000 */ nop /* 0D5750 800D4B50 44823000 */ mtc1 $v0, $f6 .L800D4B54: -/* 0D5754 800D4B54 3C01800F */ lui $at, %hi(D_800E97F0) # $at, 0x800f -/* 0D5758 800D4B58 D42A97F0 */ ldc1 $f10, %lo(D_800E97F0)($at) +/* 0D5754 800D4B54 3C01800F */ lui $at, %hi(pihi_cosf) # $at, 0x800f +/* 0D5758 800D4B58 D42A97F0 */ ldc1 $f10, %lo(pihi_cosf)($at) /* 0D575C 800D4B5C 46803221 */ cvt.d.w $f8, $f6 -/* 0D5760 800D4B60 3C01800F */ lui $at, %hi(D_800E97F8) # $at, 0x800f -/* 0D5764 800D4B64 D42697F8 */ ldc1 $f6, %lo(D_800E97F8)($at) -/* 0D5768 800D4B68 3C03800F */ lui $v1, %hi(D_800E97C0) # $v1, 0x800f -/* 0D576C 800D4B6C 246397C0 */ addiu $v1, %lo(D_800E97C0) # addiu $v1, $v1, -0x6840 +/* 0D5760 800D4B60 3C01800F */ lui $at, %hi(pilo_cosf) # $at, 0x800f +/* 0D5764 800D4B64 D42697F8 */ ldc1 $f6, %lo(pilo_cosf)($at) +/* 0D5768 800D4B68 3C03800F */ lui $v1, %hi(P_cosf) # $v1, 0x800f +/* 0D576C 800D4B6C 246397C0 */ addiu $v1, %lo(P_cosf) # addiu $v1, $v1, -0x6840 /* 0D5770 800D4B70 46324001 */ sub.d $f0, $f8, $f18 /* 0D5774 800D4B74 30480001 */ andi $t0, $v0, 1 /* 0D5778 800D4B78 462A0102 */ mul.d $f4, $f0, $f10 @@ -87,15 +87,15 @@ glabel cosf /* 0D57F0 800D4BF0 460A5032 */ c.eq.s $f10, $f10 .L800D4BF4: -/* 0D57F4 800D4BF4 3C01800F */ lui $at, %hi(D_800E9800) # $at, 0x800f +/* 0D57F4 800D4BF4 3C01800F */ lui $at, %hi(zero_cosf) # $at, 0x800f /* 0D57F8 800D4BF8 45010004 */ bc1t .L800D4C0C /* 0D57FC 800D4BFC 00000000 */ nop -/* 0D5800 800D4C00 3C01800F */ lui $at, %hi(D_800E98C0) # $at, 0x800f +/* 0D5800 800D4C00 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f /* 0D5804 800D4C04 03E00008 */ jr $ra -/* 0D5808 800D4C08 C42098C0 */ lwc1 $f0, %lo(D_800E98C0)($at) +/* 0D5808 800D4C08 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) .L800D4C0C: -/* 0D580C 800D4C0C C4209800 */ lwc1 $f0, %lo(D_800E9800)($at) +/* 0D580C 800D4C0C C4209800 */ lwc1 $f0, %lo(zero_cosf)($at) /* 0D5810 800D4C10 03E00008 */ jr $ra /* 0D5814 800D4C14 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s b/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s deleted file mode 100644 index 278ce499..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s +++ /dev/null @@ -1,6 +0,0 @@ -glabel __osGetActiveQueue -/* 0D3070 800D2470 3C02800E */ lui $v0, %hi(__osActiveQueue) # $v0, 0x800e -/* 0D3074 800D2474 03E00008 */ jr $ra -/* 0D3078 800D2478 8C42488C */ lw $v0, %lo(__osActiveQueue)($v0) - -/* 0D307C 800D247C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/sinf.s b/lib/asm/non_matchings/unknown_0D3020/sinf.s index b7750dbe..1e76b1fa 100644 --- a/lib/asm/non_matchings/unknown_0D3020/sinf.s +++ b/lib/asm/non_matchings/unknown_0D3020/sinf.s @@ -11,8 +11,8 @@ glabel sinf /* 0D5844 800D4C44 14200014 */ bnez $at, .L800D4C98 /* 0D5848 800D4C48 460020A1 */ cvt.d.s $f2, $f4 /* 0D584C 800D4C4C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D5850 800D4C50 3C03800F */ lui $v1, %hi(D_800E9810) # $v1, 0x800f -/* 0D5854 800D4C54 24639810 */ addiu $v1, %lo(D_800E9810) # addiu $v1, $v1, -0x67f0 +/* 0D5850 800D4C50 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f +/* 0D5854 800D4C54 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 /* 0D5858 800D4C58 D4660020 */ ldc1 $f6, 0x20($v1) /* 0D585C 800D4C5C D46A0018 */ ldc1 $f10, 0x18($v1) /* 0D5860 800D4C60 D4640010 */ ldc1 $f4, 0x10($v1) @@ -39,8 +39,8 @@ glabel sinf /* 0D58A4 800D4CA4 10200044 */ beqz $at, .L800D4DB8 /* 0D58A8 800D4CA8 C7A40000 */ lwc1 $f4, ($sp) /* 0D58AC 800D4CAC C7A60000 */ lwc1 $f6, ($sp) -/* 0D58B0 800D4CB0 3C01800F */ lui $at, %hi(D_800E9838) # $at, 0x800f -/* 0D58B4 800D4CB4 D42A9838 */ ldc1 $f10, %lo(D_800E9838)($at) +/* 0D58B0 800D4CB0 3C01800F */ lui $at, %hi(rpi_sinf) # $at, 0x800f +/* 0D58B4 800D4CB4 D42A9838 */ ldc1 $f10, %lo(rpi_sinf)($at) /* 0D58B8 800D4CB8 460030A1 */ cvt.d.s $f2, $f6 /* 0D58BC 800D4CBC 44804800 */ mtc1 $zero, $f9 /* 0D58C0 800D4CC0 462A1002 */ mul.d $f0, $f2, $f10 @@ -69,13 +69,13 @@ glabel sinf /* 0D5918 800D4D18 00000000 */ nop /* 0D591C 800D4D1C 44828000 */ mtc1 $v0, $f16 .L800D4D20: -/* 0D5920 800D4D20 3C01800F */ lui $at, %hi(D_800E9840) # $at, 0x800f -/* 0D5924 800D4D24 D4329840 */ ldc1 $f18, %lo(D_800E9840)($at) +/* 0D5920 800D4D20 3C01800F */ lui $at, %hi(pihi_sinf) # $at, 0x800f +/* 0D5924 800D4D24 D4329840 */ ldc1 $f18, %lo(pihi_sinf)($at) /* 0D5928 800D4D28 46808021 */ cvt.d.w $f0, $f16 -/* 0D592C 800D4D2C 3C01800F */ lui $at, %hi(D_800E9848) # $at, 0x800f -/* 0D5930 800D4D30 D4269848 */ ldc1 $f6, %lo(D_800E9848)($at) -/* 0D5934 800D4D34 3C03800F */ lui $v1, %hi(D_800E9810) # $v1, 0x800f -/* 0D5938 800D4D38 24639810 */ addiu $v1, %lo(D_800E9810) # addiu $v1, $v1, -0x67f0 +/* 0D592C 800D4D2C 3C01800F */ lui $at, %hi(pilo_sinf) # $at, 0x800f +/* 0D5930 800D4D30 D4269848 */ ldc1 $f6, %lo(pilo_sinf)($at) +/* 0D5934 800D4D34 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f +/* 0D5938 800D4D38 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 /* 0D593C 800D4D3C 46320102 */ mul.d $f4, $f0, $f18 /* 0D5940 800D4D40 D4680020 */ ldc1 $f8, 0x20($v1) /* 0D5944 800D4D44 D4720018 */ ldc1 $f18, 0x18($v1) @@ -112,15 +112,15 @@ glabel sinf .L800D4DB8: /* 0D59B8 800D4DB8 46042032 */ c.eq.s $f4, $f4 -/* 0D59BC 800D4DBC 3C01800F */ lui $at, %hi(D_800E9850) # $at, 0x800f +/* 0D59BC 800D4DBC 3C01800F */ lui $at, %hi(zero_sinf) # $at, 0x800f /* 0D59C0 800D4DC0 45010004 */ bc1t .L800D4DD4 /* 0D59C4 800D4DC4 00000000 */ nop -/* 0D59C8 800D4DC8 3C01800F */ lui $at, %hi(D_800E98C0) # $at, 0x800f +/* 0D59C8 800D4DC8 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f /* 0D59CC 800D4DCC 03E00008 */ jr $ra -/* 0D59D0 800D4DD0 C42098C0 */ lwc1 $f0, %lo(D_800E98C0)($at) +/* 0D59D0 800D4DD0 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) .L800D4DD4: -/* 0D59D4 800D4DD4 C4209850 */ lwc1 $f0, %lo(D_800E9850)($at) +/* 0D59D4 800D4DD4 C4209850 */ lwc1 $f0, %lo(zero_sinf)($at) /* 0D59D8 800D4DD8 03E00008 */ jr $ra /* 0D59DC 800D4DDC 00000000 */ nop diff --git a/lib/asm/sqrtf.s b/lib/asm/sqrtf.s new file mode 100644 index 00000000..d652ce16 --- /dev/null +++ b/lib/asm/sqrtf.s @@ -0,0 +1,16 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800C9AD0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + +glabel sqrtf +/* 0CA6D0 800C9AD0 03E00008 */ jr $ra +/* 0CA6D4 800C9AD4 46006004 */ sqrt.s $f0, $f12 + +/* 0CA6D8 800C9AD8 00000000 */ nop +/* 0CA6DC 800C9ADC 00000000 */ nop + diff --git a/lib/src/gu/unknown_0D56B0.c b/lib/src/gu/cosf.c similarity index 77% rename from lib/src/gu/unknown_0D56B0.c rename to lib/src/gu/cosf.c index ed2687e8..2ee1d4d2 100644 --- a/lib/src/gu/unknown_0D56B0.c +++ b/lib/src/gu/cosf.c @@ -5,4 +5,3 @@ #include "macros.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/cosf.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") diff --git a/lib/src/gu/guint.h b/lib/src/gu/guint.h new file mode 100644 index 00000000..c9c1614b --- /dev/null +++ b/lib/src/gu/guint.h @@ -0,0 +1,42 @@ +/************************************************************************** + * * + * 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 "mbi.h" +#include "gu.h" +*/ +typedef union +{ + struct + { + unsigned int hi; + unsigned int lo; + } word; + + double d; +} du; + +typedef union +{ + unsigned int i; + float f; +} fu; + +#ifndef __GL_GL_H__ + +//typedef float Matrix[4][4]; + +#endif + +#define ROUND(d) (int)(((d) >= 0.0) ? ((d) + 0.5) : ((d) - 0.5)) +#define ABS(d) ((d) > 0) ? (d) : -(d) + +//extern float __libm_qnan_f; diff --git a/lib/src/gu/libm_vals.s b/lib/src/gu/libm_vals.s new file mode 100644 index 00000000..b88ad985 --- /dev/null +++ b/lib/src/gu/libm_vals.s @@ -0,0 +1,5 @@ + .rdata + .align 4 + .globl __libm_qnan_f +__libm_qnan_f: + .word 0x7F810000 diff --git a/lib/src/gu/sinf.c b/lib/src/gu/sinf.c new file mode 100644 index 00000000..b42bce68 --- /dev/null +++ b/lib/src/gu/sinf.c @@ -0,0 +1,7 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D4C20 */ + +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") diff --git a/lib/src/gu/sqrtf.c b/lib/src/gu/sqrtf.c deleted file mode 100644 index 93e98c45..00000000 --- a/lib/src/gu/sqrtf.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800C9AD0 */ - -#include "types.h" -#include "macros.h" - -//I don't believe it's possible to decomp this one -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA530/sqrtf.s") diff --git a/lib/src/libc/ldiv.c b/lib/src/libc/ldiv.c index e0817018..395591ee 100644 --- a/lib/src/libc/ldiv.c +++ b/lib/src/libc/ldiv.c @@ -2,6 +2,39 @@ /* RAM_POS: 0x800D7470 */ #include "macros.h" +#include +#ifdef NON_MATCHING +//This needs to be compiled with mips3, which isn't yet supported +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; +} + +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; +} +#else GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/lldiv.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/ldiv.s") +#endif diff --git a/lib/src/libc/llcvt.c b/lib/src/libc/llcvt.c index 2564a703..47138066 100644 --- a/lib/src/libc/llcvt.c +++ b/lib/src/libc/llcvt.c @@ -1,17 +1,8 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C9B30 */ -#if 1 -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__d_to_ll.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__f_to_ll.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__ll_to_f.s") - -#else +#ifdef NON_MATCHING //This needs to be compiled with mips3, which isn't yet supported - long long __d_to_ll(double d) { return d; } @@ -36,4 +27,11 @@ double __ull_to_d(unsigned long long u) { float __ull_to_f(unsigned long long u) { return u; } +#else +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__d_to_ll.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__f_to_ll.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__ll_to_f.s") #endif diff --git a/lib/src/os/piacs.c b/lib/src/os/piacs.c index a8d65b15..b28bcef3 100644 --- a/lib/src/os/piacs.c +++ b/lib/src/os/piacs.c @@ -29,83 +29,75 @@ void __osPiRelAccess(void) { /**********************************************************************/ // Please move these later! - +#include "lib/src/gu/guint.h" // Used with cosf -const int D_800E97C0[5][2] = { - { 0x3FF00000, 0x00000000 }, - { 0xBFC55554, 0xBC83656D }, - { 0x3F8110ED, 0x3804C2A0 }, - { 0xBF29F6FF, 0xEEA56814 }, - { 0x3EC5DBDF, 0x0E314BFE } +/* coefficients for polynomial approximation of cos on +/- pi/2 */ + +const du P_cosf[] = +{ +{0x3ff00000, 0x00000000}, +{0xbfc55554, 0xbc83656d}, +{0x3f8110ed, 0x3804c2a0}, +{0xbf29f6ff, 0xeea56814}, +{0x3ec5dbdf, 0x0e314bfe}, }; -const int D_800E97E8[2] = { - 0x3FD45F30, 0x6DC9C883 -}; -const int D_800E97F0[2] = { - 0x400921FB, 0x50000000 -}; -const int D_800E97F8[2] = { - 0x3E6110B4, 0x611A6263 -}; -const int D_800E9800[1] = { - 0x00000000 -}; +const du rpi_cosf = +{0x3fd45f30, 0x6dc9c883}; + +const du pihi_cosf = +{0x400921fb, 0x50000000}; + +const du pilo_cosf = +{0x3e6110b4, 0x611a6263}; + +const fu zero_cosf = {0x00000000}; const int COSF_FILE_PADDING[3] = { 0 }; // Used with sinf +/* coefficients for polynomial approximation of sin on +/- pi/2 */ -const int D_800E9810[5][2] = { - { 0x3FF00000, 0x00000000 }, - { 0xBFC55554, 0xBC83656D }, - { 0x3F8110ED, 0x3804C2A0 }, - { 0xBF29F6FF, 0xEEA56814 }, - { 0x3EC5DBDF, 0x0E314BFE } +const du P_sinf[] = +{ +{0x3ff00000, 0x00000000}, +{0xbfc55554, 0xbc83656d}, +{0x3f8110ed, 0x3804c2a0}, +{0xbf29f6ff, 0xeea56814}, +{0x3ec5dbdf, 0x0e314bfe}, }; -const int D_800E9838[2] = { - 0x3FD45F30, 0x6DC9C883 -}; +const du rpi_sinf = +{0x3fd45f30, 0x6dc9c883}; -const int D_800E9840[2] = { - 0x400921FB, 0x50000000 -}; +const du pihi_sinf = +{0x400921fb, 0x50000000}; -const int D_800E9848[2] = { - 0x3E6110B4, 0x611A6263 -}; +const du pilo_sinf = +{0x3e6110b4, 0x611a6263}; -const int D_800E9850[1] = { - 0x00000000 -}; +const fu zero_sinf = {0x00000000}; const int SINF_FILE_PADDING[3] = { 0 }; // Used with _Litob +char ldigs[] = "0123456789abcdef"; // lowercase hex digits +char udigs[] = "0123456789ABCDEF"; // uppercase hex digits -char D_800E4920[20] = "0123456789abcdef"; // lowercase hex digits -char D_800E4934[20] = "0123456789ABCDEF"; // uppercase hex digits +// Powers for _Ldtob +const double pows[] = {10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L}; -// Powers -const double D_800E9860[] = { - 10e0L, 10e1L, 10e3L, 10e7L, - 10e15L, 10e31L, 10e63L, 10e127L, - 10e255L -}; +const char Ldtob_NaN[] = "NaN"; +const char Ldtob_Inf[] = "Inf"; -const char D_800E98A8[] = "NaN"; -const char D_800E98AC[] = "Inf"; +//_Genld +const char _Genld_0_string[] = "0"; -const int D_800E98B0[2] = { - 0x30000000, 0x00000000 -}; +//_Ldtob +const double _Ldtob_1e8[] = {1.0e8}; -const int D_800E98B8[2] = { - 0x4197D784, 0x00000000 -}; - -const int D_800E98C0[2] = { +//sinf and cosf - supposed to be defined by libm_vals.s +const int __libm_qnan_f[] = { 0x7F810000, 0x00000000 };