From 5aef81071e501fbbe5298a433ead06a625cdb3d8 Mon Sep 17 00:00:00 2001 From: silv3rwing07 <62714207+silv3rwing07@users.noreply.github.com> Date: Tue, 14 Apr 2020 10:17:25 -0700 Subject: [PATCH] padmgr and related (#71) * In process of moving changes over from old repo * Merged in changes * Finished import of padmgr changes from old repo * Adjusted some volatile * Improving padmgr volatile situation * Almost matched osReadMempak * Working on osMempakDataCRC * Explanations and equivalents but no matches for osMempakAddrCRC and osMempakDataCRC * OK after merge * Matched osMempakAddrCRC and osMempakDataCRC * Matched osReadMempak * Updated PadMgr function names to be less like original code * Changed variable names to make them further from original code * Changed names and it stopped matching * Undid clang-format steamrollering whitespace memes * Cleaned up Input names * More formatting changes * Moved padmgr to z64.h, deleted padmgr.h --- asm/code_800BB570.s | 28 +- asm/code_800EC960.s | 4 +- asm/code_801014A0.s | 4 +- asm/code_80101910.s | 16 +- asm/code_80102420.s | 22 +- asm/code_80103010.s | 2 +- asm/code_801041E0.s | 2 +- asm/code_80104810.s | 12 +- asm/code_80104D60.s | 2 +- asm/code_80104F40.s | 8 +- asm/code_80105250.s | 4 +- asm/code_80105CF0.s | 8 +- asm/code_80105F40.s | 160 --------- asm/code_80106170.s | 119 ------- asm/game.s | 2 +- ...func_800C7974.s => PadMgr_ProcessInputs.s} | 6 +- ...unc_800C7E08.s => PadMgr_RequestPadData.s} | 6 +- ...func_800C740C.s => PadMgr_RumbleControl.s} | 16 +- asm/non_matchings/code/padmgr/func_800C7948.s | 13 - asm/non_matchings/code/padmgr/func_800C7C14.s | 137 -------- data/code_80101910.bss.s | 2 +- .../guides/-O2 decompilation (for IDO 5.3).md | 2 + include/functions.h | 38 +- include/padmgr.h | 40 --- include/ultra64/controller.h | 42 ++- include/variables.h | 4 +- include/z64.h | 91 +++-- makefile | 5 +- spec | 6 +- src/boot/z_locale.c | 9 +- src/code/code_800A9F30.c | 15 +- src/code/code_800D31A0.c | 5 +- src/code/fault.c | 30 +- src/code/graph.c | 4 +- src/code/main.c | 1 - src/code/padmgr.c | 331 +++++++++++++----- src/code/z_debug.c | 29 +- src/code/z_demo.c | 16 +- src/code/z_parameter.c | 6 +- src/code/z_sample.c | 2 +- src/libultra_code/osContStartReadData.c | 12 +- src/libultra_code/osMempakAddrCRC.c | 68 ++++ src/libultra_code/osReadMempak.c | 57 +++ .../{osVibrationPack.c => osRumblePak.c} | 28 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 15 +- 45 files changed, 640 insertions(+), 789 deletions(-) delete mode 100644 asm/code_80105F40.s delete mode 100644 asm/code_80106170.s rename asm/non_matchings/code/padmgr/{func_800C7974.s => PadMgr_ProcessInputs.s} (98%) rename asm/non_matchings/code/padmgr/{func_800C7E08.s => PadMgr_RequestPadData.s} (97%) rename asm/non_matchings/code/padmgr/{func_800C740C.s => PadMgr_RumbleControl.s} (97%) delete mode 100644 asm/non_matchings/code/padmgr/func_800C7948.s delete mode 100644 asm/non_matchings/code/padmgr/func_800C7C14.s delete mode 100644 include/padmgr.h create mode 100644 src/libultra_code/osMempakAddrCRC.c create mode 100644 src/libultra_code/osReadMempak.c rename src/libultra_code/{osVibrationPack.c => osRumblePak.c} (76%) diff --git a/asm/code_800BB570.s b/asm/code_800BB570.s index 584b6a0654..547dbf3ff1 100644 --- a/asm/code_800BB570.s +++ b/asm/code_800BB570.s @@ -15,7 +15,7 @@ glabel func_800BB570 /* B32718 800BB578 AFBF0014 */ sw $ra, 0x14($sp) /* B3271C 800BB57C 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32720 800BB580 AFA0001C */ sw $zero, 0x1c($sp) -/* B32724 800BB584 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B32724 800BB584 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B32728 800BB588 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B3272C 800BB58C 3C058016 */ lui $a1, %hi(D_801612F0) # $a1, 0x8016 /* B32730 800BB590 AFA20024 */ sw $v0, 0x24($sp) @@ -34,7 +34,7 @@ glabel func_800BB570 /* B32760 800BB5C0 248412F0 */ addiu $a0, %lo(D_801612F0) # addiu $a0, $a0, 0x12f0 /* B32764 800BB5C4 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32768 800BB5C8 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B3276C 800BB5CC 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B3276C 800BB5CC 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B32770 800BB5D0 8FA50024 */ lw $a1, 0x24($sp) /* B32774 800BB5D4 8FBF0014 */ lw $ra, 0x14($sp) /* B32778 800BB5D8 8FA2001C */ lw $v0, 0x1c($sp) @@ -68,7 +68,7 @@ glabel func_800BB5F8 /* B327D8 800BB638 AFA60070 */ sw $a2, 0x70($sp) /* B327DC 800BB63C 24130001 */ li $s3, 1 /* B327E0 800BB640 0000A825 */ move $s5, $zero -/* B327E4 800BB644 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B327E4 800BB644 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B327E8 800BB648 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B327EC 800BB64C 0230082A */ slt $at, $s1, $s0 /* B327F0 800BB650 AFA20064 */ sw $v0, 0x64($sp) @@ -123,7 +123,7 @@ glabel func_800BB5F8 .L800BB708: /* B328A8 800BB708 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B328AC 800BB70C 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B328B0 800BB710 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B328B0 800BB710 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B328B4 800BB714 8FA50064 */ lw $a1, 0x64($sp) /* B328B8 800BB718 3C048014 */ lui $a0, %hi(D_80143D08) # $a0, 0x8014 /* B328BC 800BB71C 24843D08 */ addiu $a0, %lo(D_80143D08) # addiu $a0, $a0, 0x3d08 @@ -154,7 +154,7 @@ glabel func_800BB764 /* B32918 800BB778 AFA60040 */ sw $a2, 0x40($sp) /* B3291C 800BB77C AFA70044 */ sw $a3, 0x44($sp) /* B32920 800BB780 AFA0002C */ sw $zero, 0x2c($sp) -/* B32924 800BB784 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B32924 800BB784 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B32928 800BB788 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B3292C 800BB78C 3C0E8016 */ lui $t6, %hi(D_80161358) # $t6, 0x8016 /* B32930 800BB790 8FA80048 */ lw $t0, 0x48($sp) @@ -194,7 +194,7 @@ glabel func_800BB764 .L800BB814: /* B329B4 800BB814 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B329B8 800BB818 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B329BC 800BB81C 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B329BC 800BB81C 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B329C0 800BB820 8FA50034 */ lw $a1, 0x34($sp) /* B329C4 800BB824 8FBF001C */ lw $ra, 0x1c($sp) /* B329C8 800BB828 8FA2002C */ lw $v0, 0x2c($sp) @@ -211,7 +211,7 @@ glabel func_800BB838 /* B329EC 800BB84C AFA60040 */ sw $a2, 0x40($sp) /* B329F0 800BB850 AFA70044 */ sw $a3, 0x44($sp) /* B329F4 800BB854 AFA0002C */ sw $zero, 0x2c($sp) -/* B329F8 800BB858 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B329F8 800BB858 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B329FC 800BB85C 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B32A00 800BB860 3C0E8016 */ lui $t6, %hi(D_80161358) # $t6, 0x8016 /* B32A04 800BB864 8FA80048 */ lw $t0, 0x48($sp) @@ -251,7 +251,7 @@ glabel func_800BB838 .L800BB8E8: /* B32A88 800BB8E8 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32A8C 800BB8EC 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B32A90 800BB8F0 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B32A90 800BB8F0 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B32A94 800BB8F4 8FA50034 */ lw $a1, 0x34($sp) /* B32A98 800BB8F8 8FBF001C */ lw $ra, 0x1c($sp) /* B32A9C 800BB8FC 8FA2002C */ lw $v0, 0x2c($sp) @@ -268,7 +268,7 @@ glabel func_800BB90C /* B32AC0 800BB920 00A08025 */ move $s0, $a1 /* B32AC4 800BB924 AFA60048 */ sw $a2, 0x48($sp) /* B32AC8 800BB928 AFA00034 */ sw $zero, 0x34($sp) -/* B32ACC 800BB92C 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B32ACC 800BB92C 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B32AD0 800BB930 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B32AD4 800BB934 AFA2003C */ sw $v0, 0x3c($sp) /* B32AD8 800BB938 92030000 */ lbu $v1, ($s0) @@ -413,7 +413,7 @@ glabel func_800BB90C .L800BBB48: /* B32CE8 800BBB48 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32CEC 800BBB4C 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B32CF0 800BBB50 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B32CF0 800BBB50 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B32CF4 800BBB54 8FA5003C */ lw $a1, 0x3c($sp) /* B32CF8 800BBB58 8FBF002C */ lw $ra, 0x2c($sp) /* B32CFC 800BBB5C 8FA20034 */ lw $v0, 0x34($sp) @@ -428,7 +428,7 @@ glabel func_800BBB6C /* B32D18 800BBB78 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32D1C 800BBB7C AFA50034 */ sw $a1, 0x34($sp) /* B32D20 800BBB80 AFA00024 */ sw $zero, 0x24($sp) -/* B32D24 800BBB84 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B32D24 800BBB84 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B32D28 800BBB88 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B32D2C 800BBB8C 93A30037 */ lbu $v1, 0x37($sp) /* B32D30 800BBB90 3C088013 */ lui $t0, %hi(D_8012D198) # $t0, 0x8013 @@ -458,7 +458,7 @@ glabel func_800BBB6C /* B32D8C 800BBBEC 8FA50020 */ lw $a1, 0x20($sp) /* B32D90 800BBBF0 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32D94 800BBBF4 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B32D98 800BBBF8 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B32D98 800BBBF8 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B32D9C 800BBBFC 8FA5002C */ lw $a1, 0x2c($sp) /* B32DA0 800BBC00 8FBF001C */ lw $ra, 0x1c($sp) /* B32DA4 800BBC04 8FA20024 */ lw $v0, 0x24($sp) @@ -472,7 +472,7 @@ glabel func_800BBC14 /* B32DBC 800BBC1C AFBF0014 */ sw $ra, 0x14($sp) /* B32DC0 800BBC20 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32DC4 800BBC24 AFA5004C */ sw $a1, 0x4c($sp) -/* B32DC8 800BBC28 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B32DC8 800BBC28 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B32DCC 800BBC2C 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B32DD0 800BBC30 93AE004F */ lbu $t6, 0x4f($sp) /* B32DD4 800BBC34 3C058016 */ lui $a1, %hi(D_8016125C) @@ -487,7 +487,7 @@ glabel func_800BBC14 /* B32DF8 800BBC58 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B32DFC 800BBC5C AFA20020 */ sw $v0, 0x20($sp) /* B32E00 800BBC60 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 -/* B32E04 800BBC64 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B32E04 800BBC64 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B32E08 800BBC68 8FA50044 */ lw $a1, 0x44($sp) /* B32E0C 800BBC6C 8FB80020 */ lw $t8, 0x20($sp) /* B32E10 800BBC70 8FBF0014 */ lw $ra, 0x14($sp) diff --git a/asm/code_800EC960.s b/asm/code_800EC960.s index ef024d9a7d..21ddcc0e7b 100644 --- a/asm/code_800EC960.s +++ b/asm/code_800EC960.s @@ -62,7 +62,7 @@ glabel func_800ECA00 /* B63BB4 800ECA14 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B63BB8 800ECA18 27A50020 */ addiu $a1, $sp, 0x20 /* B63BBC 800ECA1C 00003025 */ move $a2, $zero -/* B63BC0 800ECA20 0C031F82 */ jal func_800C7E08 +/* B63BC0 800ECA20 0C031F82 */ jal PadMgr_RequestPadData /* B63BC4 800ECA24 AFAE0018 */ sw $t6, 0x18($sp) /* B63BC8 800ECA28 97AF0020 */ lhu $t7, 0x20($sp) /* B63BCC 800ECA2C 8FB80018 */ lw $t8, 0x18($sp) @@ -2307,7 +2307,7 @@ glabel func_800EE97C /* B65B24 800EE984 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B65B28 800EE988 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B65B2C 800EE98C 27A50020 */ addiu $a1, $sp, 0x20 -/* B65B30 800EE990 0C031F82 */ jal func_800C7E08 +/* B65B30 800EE990 0C031F82 */ jal PadMgr_RequestPadData /* B65B34 800EE994 00003025 */ move $a2, $zero /* B65B38 800EE998 97AE0068 */ lhu $t6, 0x68($sp) /* B65B3C 800EE99C 3C038017 */ lui $v1, %hi(D_8016BAB4) # $v1, 0x8017 diff --git a/asm/code_801014A0.s b/asm/code_801014A0.s index 03365537b3..756c6ced1e 100644 --- a/asm/code_801014A0.s +++ b/asm/code_801014A0.s @@ -150,7 +150,7 @@ glabel func_80101594 /* B78818 80101678 014B3021 */ addu $a2, $t2, $t3 /* B7881C 8010167C 30CCFFFF */ andi $t4, $a2, 0xffff /* B78820 80101680 01803025 */ move $a2, $t4 -/* B78824 80101684 0C0417D0 */ jal func_80105F40 +/* B78824 80101684 0C0417D0 */ jal osReadMempak /* B78828 80101688 27A7014C */ addiu $a3, $sp, 0x14c /* B7882C 8010168C 10400003 */ beqz $v0, .L8010169C /* B78830 80101690 97AD0150 */ lhu $t5, 0x150($sp) @@ -271,7 +271,7 @@ glabel func_80101594 /* B789B8 80101818 01603025 */ move $a2, $t3 /* B789BC 8010181C 8E440004 */ lw $a0, 4($s2) /* B789C0 80101820 8E450008 */ lw $a1, 8($s2) -/* B789C4 80101824 0C0417D0 */ jal func_80105F40 +/* B789C4 80101824 0C0417D0 */ jal osReadMempak /* B789C8 80101828 02203825 */ move $a3, $s1 /* B789CC 8010182C 10000006 */ b .L80101848 /* B789D0 80101830 00401825 */ move $v1, $v0 diff --git a/asm/code_80101910.s b/asm/code_80101910.s index 26d2f62c7b..7b281fee36 100644 --- a/asm/code_80101910.s +++ b/asm/code_80101910.s @@ -20,16 +20,16 @@ glabel func_80101910 /* B78ACC 8010192C A02E4CF4 */ sb $t6, %lo(D_80134CF4)($at) /* B78AD0 80101930 0C040678 */ jal func_801019E0 /* B78AD4 80101934 00002825 */ move $a1, $zero -/* B78AD8 80101938 3C058017 */ lui $a1, %hi(D_80175960) # $a1, 0x8017 -/* B78ADC 8010193C 24A55960 */ addiu $a1, %lo(D_80175960) # addiu $a1, $a1, 0x5960 +/* B78AD8 80101938 3C058017 */ lui $a1, %hi(pifMempakBuf) # $a1, 0x8017 +/* B78ADC 8010193C 24A55960 */ addiu $a1, %lo(pifMempakBuf) # addiu $a1, $a1, 0x5960 /* B78AE0 80101940 0C0404FC */ jal __osSiRawStartDma /*(s32 dir, void *addr)*/ /* B78AE4 80101944 24040001 */ li $a0, 1 /* B78AE8 80101948 8FA40030 */ lw $a0, 0x30($sp) /* B78AEC 8010194C 27A50028 */ addiu $a1, $sp, 0x28 /* B78AF0 80101950 0C000CA0 */ jal osRecvMesg /* B78AF4 80101954 24060001 */ li $a2, 1 -/* B78AF8 80101958 3C058017 */ lui $a1, %hi(D_80175960) # $a1, 0x8017 -/* B78AFC 8010195C 24A55960 */ addiu $a1, %lo(D_80175960) # addiu $a1, $a1, 0x5960 +/* B78AF8 80101958 3C058017 */ lui $a1, %hi(pifMempakBuf) # $a1, 0x8017 +/* B78AFC 8010195C 24A55960 */ addiu $a1, %lo(pifMempakBuf) # addiu $a1, $a1, 0x5960 /* B78B00 80101960 0C0404FC */ jal __osSiRawStartDma /*(s32 dir, void *addr)*/ /* B78B04 80101964 00002025 */ move $a0, $zero /* B78B08 80101968 AFA2002C */ sw $v0, 0x2c($sp) @@ -69,10 +69,10 @@ glabel func_80101910 glabel func_801019E0 /* B78B80 801019E0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* B78B84 801019E4 3C068017 */ lui $a2, %hi(D_80175960) +/* B78B84 801019E4 3C068017 */ lui $a2, %hi(pifMempakBuf) /* B78B88 801019E8 240700FE */ li $a3, 254 /* B78B8C 801019EC 3C018017 */ lui $at, %hi(_osCont_lastPollType) # $at, 0x8017 -/* B78B90 801019F0 24C25960 */ addiu $v0, $a2, %lo(D_80175960) +/* B78B90 801019F0 24C25960 */ addiu $v0, $a2, %lo(pifMempakBuf) /* B78B94 801019F4 AFA5001C */ sw $a1, 0x1c($sp) /* B78B98 801019F8 A0275810 */ sb $a3, %lo(_osCont_lastPollType)($at) /* B78B9C 801019FC 240F0001 */ li $t7, 1 @@ -122,9 +122,9 @@ glabel func_801019E0 /* B78C40 80101AA0 A04DFFFF */ sb $t5, -1($v0) glabel func_80101AA4 -/* B78C44 80101AA4 3C028017 */ lui $v0, %hi(D_80175960) # $v0, 0x8017 +/* B78C44 80101AA4 3C028017 */ lui $v0, %hi(pifMempakBuf) # $v0, 0x8017 /* B78C48 80101AA8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* B78C4C 80101AAC 24425960 */ addiu $v0, %lo(D_80175960) # addiu $v0, $v0, 0x5960 +/* B78C4C 80101AAC 24425960 */ addiu $v0, %lo(pifMempakBuf) # addiu $v0, $v0, 0x5960 /* B78C50 80101AB0 1880000B */ blez $a0, .L80101AE0 /* B78C54 80101AB4 00001825 */ move $v1, $zero /* B78C58 80101AB8 30870003 */ andi $a3, $a0, 3 diff --git a/asm/code_80102420.s b/asm/code_80102420.s index a7f656f045..64a8f61c94 100644 --- a/asm/code_80102420.s +++ b/asm/code_80102420.s @@ -161,7 +161,7 @@ glabel func_80102590 .L80102644: /* B797E4 80102644 8E440004 */ lw $a0, 4($s2) /* B797E8 80102648 8E450008 */ lw $a1, 8($s2) -/* B797EC 8010264C 0C0417D0 */ jal func_80105F40 +/* B797EC 8010264C 0C0417D0 */ jal osReadMempak /* B797F0 80102650 02A03825 */ move $a3, $s5 /* B797F4 80102654 10400003 */ beqz $v0, .L80102664 /* B797F8 80102658 366B0080 */ ori $t3, $s3, 0x80 @@ -190,7 +190,7 @@ glabel func_80102590 .L801026AC: /* B7984C 801026AC 8E440004 */ lw $a0, 4($s2) /* B79850 801026B0 8E450008 */ lw $a1, 8($s2) -/* B79854 801026B4 0C0417D0 */ jal func_80105F40 +/* B79854 801026B4 0C0417D0 */ jal osReadMempak /* B79858 801026B8 27A7005C */ addiu $a3, $sp, 0x5c /* B7985C 801026BC 10400003 */ beqz $v0, .L801026CC /* B79860 801026C0 27A3005C */ addiu $v1, $sp, 0x5c @@ -222,7 +222,7 @@ glabel func_80102590 .L8010271C: /* B798BC 8010271C 8E440004 */ lw $a0, 4($s2) /* B798C0 80102720 8E450008 */ lw $a1, 8($s2) -/* B798C4 80102724 0C0417D0 */ jal func_80105F40 +/* B798C4 80102724 0C0417D0 */ jal osReadMempak /* B798C8 80102728 02A03825 */ move $a3, $s5 /* B798CC 8010272C 10400003 */ beqz $v0, .L8010273C /* B798D0 80102730 93A8007C */ lbu $t0, 0x7c($sp) @@ -296,7 +296,7 @@ glabel func_80102590 /* B799BC 8010281C 8E440004 */ lw $a0, 4($s2) /* B799C0 80102820 8E450008 */ lw $a1, 8($s2) /* B799C4 80102824 24060001 */ li $a2, 1 -/* B799C8 80102828 0C0417D0 */ jal func_80105F40 +/* B799C8 80102828 0C0417D0 */ jal osReadMempak /* B799CC 8010282C 02A03825 */ move $a3, $s5 /* B799D0 80102830 10400003 */ beqz $v0, .L80102840 /* B799D4 80102834 02801825 */ move $v1, $s4 @@ -390,7 +390,7 @@ glabel func_801028E0 /* B79B04 80102964 8E640004 */ lw $a0, 4($s3) /* B79B08 80102968 8E650008 */ lw $a1, 8($s3) /* B79B0C 8010296C 96060000 */ lhu $a2, ($s0) -/* B79B10 80102970 0C0417D0 */ jal func_80105F40 +/* B79B10 80102970 0C0417D0 */ jal osReadMempak /* B79B14 80102974 02403825 */ move $a3, $s2 /* B79B18 80102978 10400003 */ beqz $v0, .L80102988 /* B79B1C 8010297C 02402025 */ move $a0, $s2 @@ -472,7 +472,7 @@ glabel func_80102A44 .L80102A80: /* B79C20 80102A80 8E050008 */ lw $a1, 8($s0) /* B79C24 80102A84 24060001 */ li $a2, 1 -/* B79C28 80102A88 0C0417D0 */ jal func_80105F40 +/* B79C28 80102A88 0C0417D0 */ jal osReadMempak /* B79C2C 80102A8C 27A7004C */ addiu $a3, $sp, 0x4c /* B79C30 80102A90 10400003 */ beqz $v0, .L80102AA0 /* B79C34 80102A94 27A4004C */ addiu $a0, $sp, 0x4c @@ -559,7 +559,7 @@ glabel func_80102A44 /* B79D54 80102BB4 8E050008 */ lw $a1, 8($s0) /* B79D58 80102BB8 24060007 */ li $a2, 7 /* B79D5C 80102BBC 2607002C */ addiu $a3, $s0, 0x2c -/* B79D60 80102BC0 0C0417D0 */ jal func_80105F40 +/* B79D60 80102BC0 0C0417D0 */ jal osReadMempak /* B79D64 80102BC4 A20F0064 */ sb $t7, 0x64($s0) /* B79D68 80102BC8 50400004 */ beql $v0, $zero, .L80102BDC /* B79D6C 80102BCC 00001025 */ move $v0, $zero @@ -600,7 +600,7 @@ glabel func_80102BF0 .L80102C44: /* B79DE4 80102C44 8E050008 */ lw $a1, 8($s0) /* B79DE8 80102C48 24060001 */ li $a2, 1 -/* B79DEC 80102C4C 0C0417D0 */ jal func_80105F40 +/* B79DEC 80102C4C 0C0417D0 */ jal osReadMempak /* B79DF0 80102C50 27A70028 */ addiu $a3, $sp, 0x28 /* B79DF4 80102C54 1040000D */ beqz $v0, .L80102C8C /* B79DF8 80102C58 24010002 */ li $at, 2 @@ -611,7 +611,7 @@ glabel func_80102BF0 .L80102C6C: /* B79E0C 80102C6C 8E040004 */ lw $a0, 4($s0) /* B79E10 80102C70 8E050008 */ lw $a1, 8($s0) -/* B79E14 80102C74 0C0417D0 */ jal func_80105F40 +/* B79E14 80102C74 0C0417D0 */ jal osReadMempak /* B79E18 80102C78 27A70028 */ addiu $a3, $sp, 0x28 /* B79E1C 80102C7C 50400004 */ beql $v0, $zero, .L80102C90 /* B79E20 80102C80 2604000C */ addiu $a0, $s0, 0xc @@ -739,7 +739,7 @@ glabel func_80102CC4 /* B79FD0 80102E30 01D36821 */ addu $t5, $t6, $s3 /* B79FD4 80102E34 01B03021 */ addu $a2, $t5, $s0 /* B79FD8 80102E38 30CFFFFF */ andi $t7, $a2, 0xffff -/* B79FDC 80102E3C 0C0417D0 */ jal func_80105F40 +/* B79FDC 80102E3C 0C0417D0 */ jal osReadMempak /* B79FE0 80102E40 01E03025 */ move $a2, $t7 /* B79FE4 80102E44 00401825 */ move $v1, $v0 .L80102E48: @@ -777,7 +777,7 @@ glabel func_80102CC4 /* B7A05C 80102EBC 01B03021 */ addu $a2, $t5, $s0 /* B7A060 80102EC0 30CFFFFF */ andi $t7, $a2, 0xffff /* B7A064 80102EC4 01E03025 */ move $a2, $t7 -/* B7A068 80102EC8 0C0417D0 */ jal func_80105F40 +/* B7A068 80102EC8 0C0417D0 */ jal osReadMempak /* B7A06C 80102ECC 02203825 */ move $a3, $s1 /* B7A070 80102ED0 26100001 */ addiu $s0, $s0, 1 /* B7A074 80102ED4 2A010008 */ slti $at, $s0, 8 diff --git a/asm/code_80103010.s b/asm/code_80103010.s index 6cdac74edc..a90638b457 100644 --- a/asm/code_80103010.s +++ b/asm/code_80103010.s @@ -53,7 +53,7 @@ glabel func_80103010 /* B7A244 801030A4 03333021 */ addu $a2, $t9, $s3 /* B7A248 801030A8 30C8FFFF */ andi $t0, $a2, 0xffff /* B7A24C 801030AC 01003025 */ move $a2, $t0 -/* B7A250 801030B0 0C0417D0 */ jal func_80105F40 +/* B7A250 801030B0 0C0417D0 */ jal osReadMempak /* B7A254 801030B4 02C03825 */ move $a3, $s6 /* B7A258 801030B8 50400004 */ beql $v0, $zero, .L801030CC /* B7A25C 801030BC 8E440004 */ lw $a0, 4($s2) diff --git a/asm/code_801041E0.s b/asm/code_801041E0.s index 3fabaf1010..8e7944688c 100644 --- a/asm/code_801041E0.s +++ b/asm/code_801041E0.s @@ -57,7 +57,7 @@ glabel func_801041E0 /* B7B420 80104280 01093021 */ addu $a2, $t0, $t1 /* B7B424 80104284 30CAFFFF */ andi $t2, $a2, 0xffff /* B7B428 80104288 01403025 */ move $a2, $t2 -/* B7B42C 8010428C 0C0417D0 */ jal func_80105F40 +/* B7B42C 8010428C 0C0417D0 */ jal osReadMempak /* B7B430 80104290 27A70048 */ addiu $a3, $sp, 0x48 /* B7B434 80104294 10400003 */ beqz $v0, .L801042A4 /* B7B438 80104298 93B0004E */ lbu $s0, 0x4e($sp) diff --git a/asm/code_80104810.s b/asm/code_80104810.s index 8b6be2cf2b..ac479bf19c 100644 --- a/asm/code_80104810.s +++ b/asm/code_80104810.s @@ -27,8 +27,8 @@ glabel func_80104810 /* B7B9E8 80104848 0C0402E8 */ jal __osSiGetAccess /* B7B9EC 8010484C 24110003 */ li $s1, 3 /* B7B9F0 80104850 3C1E8017 */ lui $fp, %hi(_osCont_numControllers) # $fp, 0x8017 -/* B7B9F4 80104854 3C138017 */ lui $s3, %hi(D_80175960) # $s3, 0x8017 -/* B7B9F8 80104858 26735960 */ addiu $s3, %lo(D_80175960) # addiu $s3, $s3, 0x5960 +/* B7B9F4 80104854 3C138017 */ lui $s3, %hi(pifMempakBuf) # $s3, 0x8017 +/* B7B9F8 80104858 26735960 */ addiu $s3, %lo(pifMempakBuf) # addiu $s3, $s3, 0x5960 /* B7B9FC 8010485C 27DE5811 */ addiu $fp, %lo(_osCont_numControllers) # addiu $fp, $fp, 0x5811 /* B7BA00 80104860 00008025 */ move $s0, $zero /* B7BA04 80104864 27B70054 */ addiu $s7, $sp, 0x54 @@ -121,9 +121,9 @@ glabel func_80104810 glabel func_8010499C /* B7BB3C 8010499C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* B7BB40 801049A0 3C058017 */ lui $a1, %hi(D_80175960) +/* B7BB40 801049A0 3C058017 */ lui $a1, %hi(pifMempakBuf) /* B7BB44 801049A4 3C018017 */ lui $at, %hi(_osCont_lastPollType) # $at, 0x8017 -/* B7BB48 801049A8 24A25960 */ addiu $v0, $a1, %lo(D_80175960) +/* B7BB48 801049A8 24A25960 */ addiu $v0, $a1, %lo(pifMempakBuf) /* B7BB4C 801049AC AFA40010 */ sw $a0, 0x10($sp) /* B7BB50 801049B0 A0245810 */ sb $a0, %lo(_osCont_lastPollType)($at) /* B7BB54 801049B4 240F0001 */ li $t7, 1 @@ -172,10 +172,10 @@ glabel func_80104A50 /* B7BBF0 80104A50 3C078017 */ lui $a3, %hi(_osCont_numControllers) # $a3, 0x8017 /* B7BBF4 80104A54 24E75811 */ addiu $a3, %lo(_osCont_numControllers) # addiu $a3, $a3, 0x5811 /* B7BBF8 80104A58 90EE0000 */ lbu $t6, ($a3) -/* B7BBFC 80104A5C 3C038017 */ lui $v1, %hi(D_80175960) # $v1, 0x8017 +/* B7BBFC 80104A5C 3C038017 */ lui $v1, %hi(pifMempakBuf) # $v1, 0x8017 /* B7BC00 80104A60 27BDFFE8 */ addiu $sp, $sp, -0x18 /* B7BC04 80104A64 00001025 */ move $v0, $zero -/* B7BC08 80104A68 24635960 */ addiu $v1, %lo(D_80175960) # addiu $v1, $v1, 0x5960 +/* B7BC08 80104A68 24635960 */ addiu $v1, %lo(pifMempakBuf) # addiu $v1, $v1, 0x5960 /* B7BC0C 80104A6C 19C00020 */ blez $t6, .L80104AF0 /* B7BC10 80104A70 00003025 */ move $a2, $zero /* B7BC14 80104A74 27A8000C */ addiu $t0, $sp, 0xc diff --git a/asm/code_80104D60.s b/asm/code_80104D60.s index 52761a59c1..8025725089 100644 --- a/asm/code_80104D60.s +++ b/asm/code_80104D60.s @@ -61,7 +61,7 @@ glabel func_80104D60 /* B7BFAC 80104E0C 01103021 */ addu $a2, $t0, $s0 /* B7BFB0 80104E10 30C9FFFF */ andi $t1, $a2, 0xffff /* B7BFB4 80104E14 01203025 */ move $a2, $t1 -/* B7BFB8 80104E18 0C0417D0 */ jal func_80105F40 +/* B7BFB8 80104E18 0C0417D0 */ jal osReadMempak /* B7BFBC 80104E1C 27A70038 */ addiu $a3, $sp, 0x38 /* B7BFC0 80104E20 10400003 */ beqz $v0, .L80104E30 /* B7BFC4 80104E24 97AA003C */ lhu $t2, 0x3c($sp) diff --git a/asm/code_80104F40.s b/asm/code_80104F40.s index 674a7adafd..d97e884369 100644 --- a/asm/code_80104F40.s +++ b/asm/code_80104F40.s @@ -49,7 +49,7 @@ glabel func_80104F40 .L80104FC8: /* B7C168 80104FC8 8E040004 */ lw $a0, 4($s0) /* B7C16C 80104FCC 8E050008 */ lw $a1, 8($s0) -/* B7C170 80104FD0 0C0417D0 */ jal func_80105F40 +/* B7C170 80104FD0 0C0417D0 */ jal osReadMempak /* B7C174 80104FD4 27A70048 */ addiu $a3, $sp, 0x48 /* B7C178 80104FD8 10400003 */ beqz $v0, .L80104FE8 /* B7C17C 80104FDC 27A40048 */ addiu $a0, $sp, 0x48 @@ -133,7 +133,7 @@ glabel func_80104F40 /* B7C29C 801050FC AE180060 */ sw $t8, 0x60($s0) /* B7C2A0 80105100 AE080058 */ sw $t0, 0x58($s0) /* B7C2A4 80105104 AE0A005C */ sw $t2, 0x5c($s0) -/* B7C2A8 80105108 0C0417D0 */ jal func_80105F40 +/* B7C2A8 80105108 0C0417D0 */ jal osReadMempak /* B7C2AC 8010510C A20E0064 */ sb $t6, 0x64($s0) /* B7C2B0 80105110 10400003 */ beqz $v0, .L80105120 /* B7C2B4 80105114 00000000 */ nop @@ -167,7 +167,7 @@ glabel func_80105148 .L80105170: /* B7C310 80105170 8E040004 */ lw $a0, 4($s0) /* B7C314 80105174 8E050008 */ lw $a1, 8($s0) -/* B7C318 80105178 0C0417D0 */ jal func_80105F40 +/* B7C318 80105178 0C0417D0 */ jal osReadMempak /* B7C31C 8010517C 27A70030 */ addiu $a3, $sp, 0x30 /* B7C320 80105180 10400003 */ beqz $v0, .L80105190 /* B7C324 80105184 27A30070 */ addiu $v1, $sp, 0x70 @@ -200,7 +200,7 @@ glabel func_80105148 .L801051E8: /* B7C388 801051E8 8E040004 */ lw $a0, 4($s0) /* B7C38C 801051EC 8E050008 */ lw $a1, 8($s0) -/* B7C390 801051F0 0C0417D0 */ jal func_80105F40 +/* B7C390 801051F0 0C0417D0 */ jal osReadMempak /* B7C394 801051F4 27A70050 */ addiu $a3, $sp, 0x50 /* B7C398 801051F8 10400003 */ beqz $v0, .L80105208 /* B7C39C 801051FC 27A40070 */ addiu $a0, $sp, 0x70 diff --git a/asm/code_80105250.s b/asm/code_80105250.s index 979cdea3d0..b3eee820be 100644 --- a/asm/code_80105250.s +++ b/asm/code_80105250.s @@ -56,7 +56,7 @@ glabel func_80105250 /* B7C48C 801052EC 01D43021 */ addu $a2, $t6, $s4 /* B7C490 801052F0 30CFFFFF */ andi $t7, $a2, 0xffff /* B7C494 801052F4 01E03025 */ move $a2, $t7 -/* B7C498 801052F8 0C0417D0 */ jal func_80105F40 +/* B7C498 801052F8 0C0417D0 */ jal osReadMempak /* B7C49C 801052FC 27A7029C */ addiu $a3, $sp, 0x29c /* B7C4A0 80105300 10400003 */ beqz $v0, .L80105310 /* B7C4A4 80105304 0040B825 */ move $s7, $v0 @@ -203,7 +203,7 @@ glabel func_80105250 /* B7C698 801054F8 01543021 */ addu $a2, $t2, $s4 /* B7C69C 801054FC 30C9FFFF */ andi $t1, $a2, 0xffff /* B7C6A0 80105500 01203025 */ move $a2, $t1 -/* B7C6A4 80105504 0C0417D0 */ jal func_80105F40 +/* B7C6A4 80105504 0C0417D0 */ jal osReadMempak /* B7C6A8 80105508 27A7029C */ addiu $a3, $sp, 0x29c /* B7C6AC 8010550C 10400003 */ beqz $v0, .L8010551C /* B7C6B0 80105510 97AE02A0 */ lhu $t6, 0x2a0($sp) diff --git a/asm/code_80105CF0.s b/asm/code_80105CF0.s index 31630157d3..f7ad730e0a 100644 --- a/asm/code_80105CF0.s +++ b/asm/code_80105CF0.s @@ -47,8 +47,8 @@ glabel func_80105CF0 /* B7CF10 80105D70 0010C940 */ sll $t9, $s0, 5 /* B7CF14 80105D74 3C178013 */ lui $s7, %hi(D_80134D20) # $s7, 0x8013 /* B7CF18 80105D78 3C168017 */ lui $s6, %hi(_osCont_lastPollType) # $s6, 0x8017 -/* B7CF1C 80105D7C 3C138017 */ lui $s3, %hi(D_80175960) # $s3, 0x8017 -/* B7CF20 80105D80 26735960 */ addiu $s3, %lo(D_80175960) # addiu $s3, $s3, 0x5960 +/* B7CF1C 80105D7C 3C138017 */ lui $s3, %hi(pifMempakBuf) # $s3, 0x8017 +/* B7CF20 80105D80 26735960 */ addiu $s3, %lo(pifMempakBuf) # addiu $s3, $s3, 0x5960 /* B7CF24 80105D84 26D65810 */ addiu $s6, %lo(_osCont_lastPollType) # addiu $s6, $s6, 0x5810 /* B7CF28 80105D88 26F74D20 */ addiu $s7, %lo(D_80134D20) # addiu $s7, $s7, 0x4d20 /* B7CF2C 80105D8C AFB90040 */ sw $t9, 0x40($sp) @@ -103,7 +103,7 @@ glabel func_80105CF0 .L80105E3C: /* B7CFDC 80105E3C 8FB80044 */ lw $t8, 0x44($sp) /* B7CFE0 80105E40 A2180004 */ sb $t8, 4($s0) -/* B7CFE4 80105E44 0C04185C */ jal func_80106170 +/* B7CFE4 80105E44 0C04185C */ jal osMempakAddrCRC /* B7CFE8 80105E48 97A40072 */ lhu $a0, 0x72($sp) /* B7CFEC 80105E4C 8FB90040 */ lw $t9, 0x40($sp) /* B7CFF0 80105E50 26050006 */ addiu $a1, $s0, 6 @@ -115,7 +115,7 @@ glabel func_80105CF0 /* B7D008 80105E68 24040001 */ li $a0, 1 /* B7D00C 80105E6C 0C0404FC */ jal __osSiRawStartDma /*(s32 dir, void *addr)*/ /* B7D010 80105E70 02602825 */ move $a1, $s3 -/* B7D014 80105E74 0C041890 */ jal func_80106240 +/* B7D014 80105E74 0C041890 */ jal osMempakDataCRC /* B7D018 80105E78 8FA40074 */ lw $a0, 0x74($sp) /* B7D01C 80105E7C 305200FF */ andi $s2, $v0, 0xff /* B7D020 80105E80 02A02025 */ move $a0, $s5 diff --git a/asm/code_80105F40.s b/asm/code_80105F40.s deleted file mode 100644 index 813f58a113..0000000000 --- a/asm/code_80105F40.s +++ /dev/null @@ -1,160 +0,0 @@ -.include "macro.inc" - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 # allow use of 64-bit general purposee registers - -.section .text - -.align 4 - -glabel func_80105F40 -/* B7D0E0 80105F40 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* B7D0E4 80105F44 AFBF003C */ sw $ra, 0x3c($sp) -/* B7D0E8 80105F48 AFB60030 */ sw $s6, 0x30($sp) -/* B7D0EC 80105F4C AFB5002C */ sw $s5, 0x2c($sp) -/* B7D0F0 80105F50 AFB1001C */ sw $s1, 0x1c($sp) -/* B7D0F4 80105F54 00A08825 */ move $s1, $a1 -/* B7D0F8 80105F58 0080B025 */ move $s6, $a0 -/* B7D0FC 80105F5C AFBE0038 */ sw $fp, 0x38($sp) -/* B7D100 80105F60 AFB70034 */ sw $s7, 0x34($sp) -/* B7D104 80105F64 AFB40028 */ sw $s4, 0x28($sp) -/* B7D108 80105F68 AFB30024 */ sw $s3, 0x24($sp) -/* B7D10C 80105F6C AFB20020 */ sw $s2, 0x20($sp) -/* B7D110 80105F70 AFB00018 */ sw $s0, 0x18($sp) -/* B7D114 80105F74 AFA60068 */ sw $a2, 0x68($sp) -/* B7D118 80105F78 AFA7006C */ sw $a3, 0x6c($sp) -/* B7D11C 80105F7C 0C0402E8 */ jal __osSiGetAccess -/* B7D120 80105F80 24150002 */ li $s5, 2 -/* B7D124 80105F84 97A5006A */ lhu $a1, 0x6a($sp) -/* B7D128 80105F88 3C1E8013 */ lui $fp, %hi(D_80134D20) # $fp, 0x8013 -/* B7D12C 80105F8C 3C178017 */ lui $s7, %hi(_osCont_lastPollType) # $s7, 0x8017 -/* B7D130 80105F90 3C148017 */ lui $s4, %hi(D_80175960) # $s4, 0x8017 -/* B7D134 80105F94 000570C3 */ sra $t6, $a1, 3 -/* B7D138 80105F98 00057940 */ sll $t7, $a1, 5 -/* B7D13C 80105F9C AFAF0040 */ sw $t7, 0x40($sp) -/* B7D140 80105FA0 AFAE0044 */ sw $t6, 0x44($sp) -/* B7D144 80105FA4 26945960 */ addiu $s4, %lo(D_80175960) # addiu $s4, $s4, 0x5960 -/* B7D148 80105FA8 26F75810 */ addiu $s7, %lo(_osCont_lastPollType) # addiu $s7, $s7, 0x5810 -/* B7D14C 80105FAC 27DE4D20 */ addiu $fp, %lo(D_80134D20) # addiu $fp, $fp, 0x4d20 -.L80105FB0: -/* B7D150 80105FB0 92F80000 */ lbu $t8, ($s7) -/* B7D154 80105FB4 24010002 */ li $at, 2 -/* B7D158 80105FB8 97A5006A */ lhu $a1, 0x6a($sp) -/* B7D15C 80105FBC 17010003 */ bne $t8, $at, .L80105FCC -/* B7D160 80105FC0 02808025 */ move $s0, $s4 -/* B7D164 80105FC4 8FD90000 */ lw $t9, ($fp) -/* B7D168 80105FC8 12390023 */ beq $s1, $t9, .L80106058 -.L80105FCC: -/* B7D16C 80105FCC 24080002 */ li $t0, 2 -/* B7D170 80105FD0 A2E80000 */ sb $t0, ($s7) -/* B7D174 80105FD4 AFD10000 */ sw $s1, ($fp) -/* B7D178 80105FD8 1A200010 */ blez $s1, .L8010601C -/* B7D17C 80105FDC 00001025 */ move $v0, $zero -/* B7D180 80105FE0 32240003 */ andi $a0, $s1, 3 -/* B7D184 80105FE4 10800006 */ beqz $a0, .L80106000 -/* B7D188 80105FE8 00801825 */ move $v1, $a0 -.L80105FEC: -/* B7D18C 80105FEC 24420001 */ addiu $v0, $v0, 1 -/* B7D190 80105FF0 A2000000 */ sb $zero, ($s0) -/* B7D194 80105FF4 1462FFFD */ bne $v1, $v0, .L80105FEC -/* B7D198 80105FF8 26100001 */ addiu $s0, $s0, 1 -/* B7D19C 80105FFC 10510007 */ beq $v0, $s1, .L8010601C -.L80106000: -/* B7D1A0 80106000 24420004 */ addiu $v0, $v0, 4 -/* B7D1A4 80106004 A2000000 */ sb $zero, ($s0) -/* B7D1A8 80106008 A2000001 */ sb $zero, 1($s0) -/* B7D1AC 8010600C A2000002 */ sb $zero, 2($s0) -/* B7D1B0 80106010 A2000003 */ sb $zero, 3($s0) -/* B7D1B4 80106014 1451FFFA */ bne $v0, $s1, .L80106000 -/* B7D1B8 80106018 26100004 */ addiu $s0, $s0, 4 -.L8010601C: -/* B7D1BC 8010601C 24090001 */ li $t1, 1 -/* B7D1C0 80106020 AE89003C */ sw $t1, 0x3c($s4) -/* B7D1C4 80106024 240A00FF */ li $t2, 255 -/* B7D1C8 80106028 240B0003 */ li $t3, 3 -/* B7D1CC 8010602C 240C0021 */ li $t4, 33 -/* B7D1D0 80106030 240D0002 */ li $t5, 2 -/* B7D1D4 80106034 240E00FF */ li $t6, 255 -/* B7D1D8 80106038 240F00FE */ li $t7, 254 -/* B7D1DC 8010603C A20A0000 */ sb $t2, ($s0) -/* B7D1E0 80106040 A20B0001 */ sb $t3, 1($s0) -/* B7D1E4 80106044 A20C0002 */ sb $t4, 2($s0) -/* B7D1E8 80106048 A20D0003 */ sb $t5, 3($s0) -/* B7D1EC 8010604C A20E0026 */ sb $t6, 0x26($s0) -/* B7D1F0 80106050 10000002 */ b .L8010605C -/* B7D1F4 80106054 A20F0027 */ sb $t7, 0x27($s0) -.L80106058: -/* B7D1F8 80106058 02918021 */ addu $s0, $s4, $s1 -.L8010605C: -/* B7D1FC 8010605C 8FB80044 */ lw $t8, 0x44($sp) -/* B7D200 80106060 30A4FFFF */ andi $a0, $a1, 0xffff -/* B7D204 80106064 0C04185C */ jal func_80106170 -/* B7D208 80106068 A2180004 */ sb $t8, 4($s0) -/* B7D20C 8010606C 8FB90040 */ lw $t9, 0x40($sp) -/* B7D210 80106070 24040001 */ li $a0, 1 -/* B7D214 80106074 02802825 */ move $a1, $s4 -/* B7D218 80106078 00594025 */ or $t0, $v0, $t9 -/* B7D21C 8010607C 0C0404FC */ jal __osSiRawStartDma /*(s32 dir, void *addr)*/ -/* B7D220 80106080 A2080005 */ sb $t0, 5($s0) -/* B7D224 80106084 02C02025 */ move $a0, $s6 -/* B7D228 80106088 00002825 */ move $a1, $zero -/* B7D22C 8010608C 0C000CA0 */ jal osRecvMesg -/* B7D230 80106090 24060001 */ li $a2, 1 -/* B7D234 80106094 00002025 */ move $a0, $zero -/* B7D238 80106098 0C0404FC */ jal __osSiRawStartDma /*(s32 dir, void *addr)*/ -/* B7D23C 8010609C 02802825 */ move $a1, $s4 -/* B7D240 801060A0 02C02025 */ move $a0, $s6 -/* B7D244 801060A4 00002825 */ move $a1, $zero -/* B7D248 801060A8 0C000CA0 */ jal osRecvMesg -/* B7D24C 801060AC 24060001 */ li $a2, 1 -/* B7D250 801060B0 92130002 */ lbu $s3, 2($s0) -/* B7D254 801060B4 26120006 */ addiu $s2, $s0, 6 -/* B7D258 801060B8 326900C0 */ andi $t1, $s3, 0xc0 -/* B7D25C 801060BC 00099903 */ sra $s3, $t1, 4 -/* B7D260 801060C0 56600014 */ bnezl $s3, .L80106114 -/* B7D264 801060C4 24130001 */ li $s3, 1 -/* B7D268 801060C8 0C041890 */ jal func_80106240 -/* B7D26C 801060CC 02402025 */ move $a0, $s2 -/* B7D270 801060D0 920B0026 */ lbu $t3, 0x26($s0) -/* B7D274 801060D4 02402025 */ move $a0, $s2 -/* B7D278 801060D8 8FA5006C */ lw $a1, 0x6c($sp) -/* B7D27C 801060DC 11620008 */ beq $t3, $v0, .L80106100 -/* B7D280 801060E0 00000000 */ nop -/* B7D284 801060E4 02C02025 */ move $a0, $s6 -/* B7D288 801060E8 0C040644 */ jal func_80101910 -/* B7D28C 801060EC 02202825 */ move $a1, $s1 -/* B7D290 801060F0 1440000D */ bnez $v0, .L80106128 -/* B7D294 801060F4 00409825 */ move $s3, $v0 -/* B7D298 801060F8 10000006 */ b .L80106114 -/* B7D29C 801060FC 24130004 */ li $s3, 4 -.L80106100: -/* B7D2A0 80106100 0C001BC4 */ jal bcopy -/* B7D2A4 80106104 24060020 */ li $a2, 32 -/* B7D2A8 80106108 10000003 */ b .L80106118 -/* B7D2AC 8010610C 24010004 */ li $at, 4 -/* B7D2B0 80106110 24130001 */ li $s3, 1 -.L80106114: -/* B7D2B4 80106114 24010004 */ li $at, 4 -.L80106118: -/* B7D2B8 80106118 16610003 */ bne $s3, $at, .L80106128 -/* B7D2BC 8010611C 2AA20000 */ slti $v0, $s5, 0 -/* B7D2C0 80106120 1040FFA3 */ beqz $v0, .L80105FB0 -/* B7D2C4 80106124 26B5FFFF */ addiu $s5, $s5, -1 -.L80106128: -/* B7D2C8 80106128 0C0402F9 */ jal __osSiRelAccess -/* B7D2CC 8010612C 00000000 */ nop -/* B7D2D0 80106130 8FBF003C */ lw $ra, 0x3c($sp) -/* B7D2D4 80106134 02601025 */ move $v0, $s3 -/* B7D2D8 80106138 8FB30024 */ lw $s3, 0x24($sp) -/* B7D2DC 8010613C 8FB00018 */ lw $s0, 0x18($sp) -/* B7D2E0 80106140 8FB1001C */ lw $s1, 0x1c($sp) -/* B7D2E4 80106144 8FB20020 */ lw $s2, 0x20($sp) -/* B7D2E8 80106148 8FB40028 */ lw $s4, 0x28($sp) -/* B7D2EC 8010614C 8FB5002C */ lw $s5, 0x2c($sp) -/* B7D2F0 80106150 8FB60030 */ lw $s6, 0x30($sp) -/* B7D2F4 80106154 8FB70034 */ lw $s7, 0x34($sp) -/* B7D2F8 80106158 8FBE0038 */ lw $fp, 0x38($sp) -/* B7D2FC 8010615C 03E00008 */ jr $ra -/* B7D300 80106160 27BD0060 */ addiu $sp, $sp, 0x60 diff --git a/asm/code_80106170.s b/asm/code_80106170.s deleted file mode 100644 index 16a04f101b..0000000000 --- a/asm/code_80106170.s +++ /dev/null @@ -1,119 +0,0 @@ -.include "macro.inc" - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 # allow use of 64-bit general purposee registers - -.section .text - -.align 4 - -glabel func_80106170 -/* B7D310 80106170 AFA40000 */ sw $a0, ($sp) -/* B7D314 80106174 308EFFFF */ andi $t6, $a0, 0xffff -/* B7D318 80106178 01C02025 */ move $a0, $t6 -/* B7D31C 8010617C 00001825 */ move $v1, $zero -/* B7D320 80106180 24020400 */ li $v0, 1024 -.L80106184: -/* B7D324 80106184 00037840 */ sll $t7, $v1, 1 -/* B7D328 80106188 0082C024 */ and $t8, $a0, $v0 -/* B7D32C 8010618C 13000008 */ beqz $t8, .L801061B0 -/* B7D330 80106190 01E01825 */ move $v1, $t7 -/* B7D334 80106194 31F90020 */ andi $t9, $t7, 0x20 -/* B7D338 80106198 13200003 */ beqz $t9, .L801061A8 -/* B7D33C 8010619C 00000000 */ nop -/* B7D340 801061A0 10000007 */ b .L801061C0 -/* B7D344 801061A4 39E30014 */ xori $v1, $t7, 0x14 -.L801061A8: -/* B7D348 801061A8 10000005 */ b .L801061C0 -/* B7D34C 801061AC 24630001 */ addiu $v1, $v1, 1 -.L801061B0: -/* B7D350 801061B0 30690020 */ andi $t1, $v1, 0x20 -/* B7D354 801061B4 11200002 */ beqz $t1, .L801061C0 -/* B7D358 801061B8 386A0015 */ xori $t2, $v1, 0x15 -/* B7D35C 801061BC 01401825 */ move $v1, $t2 -.L801061C0: -/* B7D360 801061C0 00025842 */ srl $t3, $v0, 1 -/* B7D364 801061C4 1560FFEF */ bnez $t3, .L80106184 -/* B7D368 801061C8 01601025 */ move $v0, $t3 -/* B7D36C 801061CC 00036040 */ sll $t4, $v1, 1 -/* B7D370 801061D0 318D0020 */ andi $t5, $t4, 0x20 -/* B7D374 801061D4 11A00002 */ beqz $t5, .L801061E0 -/* B7D378 801061D8 01801825 */ move $v1, $t4 -/* B7D37C 801061DC 39830015 */ xori $v1, $t4, 0x15 -.L801061E0: -/* B7D380 801061E0 00037840 */ sll $t7, $v1, 1 -/* B7D384 801061E4 31F80020 */ andi $t8, $t7, 0x20 -/* B7D388 801061E8 13000002 */ beqz $t8, .L801061F4 -/* B7D38C 801061EC 01E01825 */ move $v1, $t7 -/* B7D390 801061F0 39E30015 */ xori $v1, $t7, 0x15 -.L801061F4: -/* B7D394 801061F4 00034040 */ sll $t0, $v1, 1 -/* B7D398 801061F8 31090020 */ andi $t1, $t0, 0x20 -/* B7D39C 801061FC 11200002 */ beqz $t1, .L80106208 -/* B7D3A0 80106200 01001825 */ move $v1, $t0 -/* B7D3A4 80106204 39030015 */ xori $v1, $t0, 0x15 -.L80106208: -/* B7D3A8 80106208 00035840 */ sll $t3, $v1, 1 -/* B7D3AC 8010620C 316C0020 */ andi $t4, $t3, 0x20 -/* B7D3B0 80106210 11800002 */ beqz $t4, .L8010621C -/* B7D3B4 80106214 01601825 */ move $v1, $t3 -/* B7D3B8 80106218 39630015 */ xori $v1, $t3, 0x15 -.L8010621C: -/* B7D3BC 8010621C 00037040 */ sll $t6, $v1, 1 -/* B7D3C0 80106220 31CF0020 */ andi $t7, $t6, 0x20 -/* B7D3C4 80106224 11E00002 */ beqz $t7, .L80106230 -/* B7D3C8 80106228 01C01825 */ move $v1, $t6 -/* B7D3CC 8010622C 39C30015 */ xori $v1, $t6, 0x15 -.L80106230: -/* B7D3D0 80106230 00601025 */ move $v0, $v1 -/* B7D3D4 80106234 3059001F */ andi $t9, $v0, 0x1f -/* B7D3D8 80106238 03E00008 */ jr $ra -/* B7D3DC 8010623C 03201025 */ move $v0, $t9 - -glabel func_80106240 -/* B7D3E0 80106240 00802825 */ move $a1, $a0 -/* B7D3E4 80106244 00001825 */ move $v1, $zero -/* B7D3E8 80106248 24020020 */ li $v0, 32 -.L8010624C: -/* B7D3EC 8010624C 24040080 */ li $a0, 128 -/* B7D3F0 80106250 90A60000 */ lbu $a2, ($a1) -.L80106254: -/* B7D3F4 80106254 00037040 */ sll $t6, $v1, 1 -/* B7D3F8 80106258 00C47824 */ and $t7, $a2, $a0 -/* B7D3FC 8010625C 11E00008 */ beqz $t7, .L80106280 -/* B7D400 80106260 01C01825 */ move $v1, $t6 -/* B7D404 80106264 31D80100 */ andi $t8, $t6, 0x100 -/* B7D408 80106268 13000003 */ beqz $t8, .L80106278 -/* B7D40C 8010626C 00000000 */ nop -/* B7D410 80106270 10000007 */ b .L80106290 -/* B7D414 80106274 39C30084 */ xori $v1, $t6, 0x84 -.L80106278: -/* B7D418 80106278 10000005 */ b .L80106290 -/* B7D41C 8010627C 24630001 */ addiu $v1, $v1, 1 -.L80106280: -/* B7D420 80106280 30680100 */ andi $t0, $v1, 0x100 -/* B7D424 80106284 11000002 */ beqz $t0, .L80106290 -/* B7D428 80106288 38690085 */ xori $t1, $v1, 0x85 -/* B7D42C 8010628C 01201825 */ move $v1, $t1 -.L80106290: -/* B7D430 80106290 00045042 */ srl $t2, $a0, 1 -/* B7D434 80106294 1540FFEF */ bnez $t2, .L80106254 -/* B7D438 80106298 01402025 */ move $a0, $t2 -/* B7D43C 8010629C 2442FFFF */ addiu $v0, $v0, -1 -/* B7D440 801062A0 1440FFEA */ bnez $v0, .L8010624C -/* B7D444 801062A4 24A50001 */ addiu $a1, $a1, 1 -/* B7D448 801062A8 00035840 */ sll $t3, $v1, 1 -.L801062AC: -/* B7D44C 801062AC 316C0100 */ andi $t4, $t3, 0x100 -/* B7D450 801062B0 11800002 */ beqz $t4, .L801062BC -/* B7D454 801062B4 01601825 */ move $v1, $t3 -/* B7D458 801062B8 39630085 */ xori $v1, $t3, 0x85 -.L801062BC: -/* B7D45C 801062BC 24420001 */ addiu $v0, $v0, 1 -/* B7D460 801062C0 2C410008 */ sltiu $at, $v0, 8 -/* B7D464 801062C4 5420FFF9 */ bnezl $at, .L801062AC -/* B7D468 801062C8 00035840 */ sll $t3, $v1, 1 -/* B7D46C 801062CC 03E00008 */ jr $ra -/* B7D470 801062D0 306200FF */ andi $v0, $v1, 0xff diff --git a/asm/game.s b/asm/game.s index 28e5e06a1e..79dc8d4f95 100644 --- a/asm/game.s +++ b/asm/game.s @@ -656,7 +656,7 @@ glabel func_800C4A98 /* B3BC44 800C4AA4 3C048016 */ lui $a0, %hi(gPadMgr) # $a0, 0x8016 /* B3BC48 800C4AA8 248468C0 */ addiu $a0, %lo(gPadMgr) # addiu $a0, $a0, 0x68c0 /* B3BC4C 800C4AAC 24E50014 */ addiu $a1, $a3, 0x14 -/* B3BC50 800C4AB0 0C031F82 */ jal func_800C7E08 +/* B3BC50 800C4AB0 0C031F82 */ jal PadMgr_RequestPadData /* B3BC54 800C4AB4 24060001 */ li $a2, 1 /* B3BC58 800C4AB8 8FBF0014 */ lw $ra, 0x14($sp) /* B3BC5C 800C4ABC 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/non_matchings/code/padmgr/func_800C7974.s b/asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s similarity index 98% rename from asm/non_matchings/code/padmgr/func_800C7974.s rename to asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s index 9e00788dd7..df39956a66 100644 --- a/asm/non_matchings/code/padmgr/func_800C7974.s +++ b/asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s @@ -74,7 +74,7 @@ glabel D_80145BD8 .balign 4 .text -glabel func_800C7974 +glabel PadMgr_ProcessInputs /* B3EB14 800C7974 27BDFFB0 */ addiu $sp, $sp, -0x50 /* B3EB18 800C7978 AFBF002C */ sw $ra, 0x2c($sp) /* B3EB1C 800C797C AFB40028 */ sw $s4, 0x28($sp) @@ -82,7 +82,7 @@ glabel func_800C7974 /* B3EB24 800C7984 AFB30024 */ sw $s3, 0x24($sp) /* B3EB28 800C7988 AFB20020 */ sw $s2, 0x20($sp) /* B3EB2C 800C798C AFB1001C */ sw $s1, 0x1c($sp) -/* B3EB30 800C7990 0C031CEF */ jal PadMgr_Lock2 +/* B3EB30 800C7990 0C031CEF */ jal PadMgr_LockPadData /* B3EB34 800C7994 AFB00018 */ sw $s0, 0x18($sp) /* B3EB38 800C7998 928E02A9 */ lbu $t6, 0x2a9($s4) /* B3EB3C 800C799C 26900230 */ addiu $s0, $s4, 0x230 @@ -243,7 +243,7 @@ glabel func_800C7974 /* B3ED84 800C7BE4 1420FF71 */ bnez $at, .L800C79AC /* B3ED88 800C7BE8 26730006 */ addiu $s3, $s3, 6 .L800C7BEC: -/* B3ED8C 800C7BEC 0C031CF9 */ jal PadMgr_Unlock2 +/* B3ED8C 800C7BEC 0C031CF9 */ jal PadMgr_UnlockPadData /* B3ED90 800C7BF0 02802025 */ move $a0, $s4 /* B3ED94 800C7BF4 8FBF002C */ lw $ra, 0x2c($sp) /* B3ED98 800C7BF8 8FB00018 */ lw $s0, 0x18($sp) diff --git a/asm/non_matchings/code/padmgr/func_800C7E08.s b/asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s similarity index 97% rename from asm/non_matchings/code/padmgr/func_800C7E08.s rename to asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s index 0279f7f372..2539481e76 100644 --- a/asm/non_matchings/code/padmgr/func_800C7E08.s +++ b/asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s @@ -1,4 +1,4 @@ -glabel func_800C7E08 +glabel PadMgr_RequestPadData /* B3EFA8 800C7E08 27BDFFD0 */ addiu $sp, $sp, -0x30 /* B3EFAC 800C7E0C AFBF002C */ sw $ra, 0x2c($sp) /* B3EFB0 800C7E10 AFB40028 */ sw $s4, 0x28($sp) @@ -8,7 +8,7 @@ glabel func_800C7E08 /* B3EFC0 800C7E20 AFB20020 */ sw $s2, 0x20($sp) /* B3EFC4 800C7E24 AFB1001C */ sw $s1, 0x1c($sp) /* B3EFC8 800C7E28 AFB00018 */ sw $s0, 0x18($sp) -/* B3EFCC 800C7E2C 0C031CEF */ jal PadMgr_Lock2 +/* B3EFCC 800C7E2C 0C031CEF */ jal PadMgr_LockPadData /* B3EFD0 800C7E30 AFA40030 */ sw $a0, 0x30($sp) /* B3EFD4 800C7E34 8FB10030 */ lw $s1, 0x30($sp) /* B3EFD8 800C7E38 02608025 */ move $s0, $s3 @@ -86,7 +86,7 @@ glabel func_800C7E08 /* B3F0EC 800C7F4C 26310018 */ addiu $s1, $s1, 0x18 /* B3F0F0 800C7F50 1653FFBD */ bne $s2, $s3, .L800C7E48 /* B3F0F4 800C7F54 26100018 */ addiu $s0, $s0, 0x18 -/* B3F0F8 800C7F58 0C031CF9 */ jal PadMgr_Unlock2 +/* B3F0F8 800C7F58 0C031CF9 */ jal PadMgr_UnlockPadData /* B3F0FC 800C7F5C 8FA40030 */ lw $a0, 0x30($sp) /* B3F100 800C7F60 8FBF002C */ lw $ra, 0x2c($sp) /* B3F104 800C7F64 8FB00018 */ lw $s0, 0x18($sp) diff --git a/asm/non_matchings/code/padmgr/func_800C740C.s b/asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s similarity index 97% rename from asm/non_matchings/code/padmgr/func_800C740C.s rename to asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s index 41a6f18458..caf3321d21 100644 --- a/asm/non_matchings/code/padmgr/func_800C740C.s +++ b/asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s @@ -152,7 +152,7 @@ glabel D_80145ABC .balign 4 .text -glabel func_800C740C +glabel PadMgr_RumbleControl /* B3E5AC 800C740C 27BDFFB8 */ addiu $sp, $sp, -0x48 /* B3E5B0 800C7410 AFBF0034 */ sw $ra, 0x34($sp) /* B3E5B4 800C7414 AFB40028 */ sw $s4, 0x28($sp) @@ -162,7 +162,7 @@ glabel func_800C740C /* B3E5C4 800C7424 AFB30024 */ sw $s3, 0x24($sp) /* B3E5C8 800C7428 AFB20020 */ sw $s2, 0x20($sp) /* B3E5CC 800C742C AFB1001C */ sw $s1, 0x1c($sp) -/* B3E5D0 800C7430 0C031C94 */ jal PadMgr_LockGetControllerQueue +/* B3E5D0 800C7430 0C031C94 */ jal PadMgr_LockSerialMesgQueue /* B3E5D4 800C7434 AFB00018 */ sw $s0, 0x18($sp) /* B3E5D8 800C7438 AFA2003C */ sw $v0, 0x3c($sp) /* B3E5DC 800C743C 0000A825 */ move $s5, $zero @@ -210,7 +210,7 @@ glabel func_800C740C /* B3E680 800C74E0 0C00084C */ jal osSyncPrintf /* B3E684 800C74E4 248458CC */ addiu $a0, %lo(D_801458CC) # addiu $a0, $a0, 0x58cc /* B3E688 800C74E8 02402025 */ move $a0, $s2 -/* B3E68C 800C74EC 0C0401E0 */ jal osSetVibration +/* B3E68C 800C74EC 0C0401E0 */ jal osSetRumble /* B3E690 800C74F0 02C02825 */ move $a1, $s6 /* B3E694 800C74F4 10400010 */ beqz $v0, .L800C7538 /* B3E698 800C74F8 240D0003 */ li $t5, 3 @@ -257,7 +257,7 @@ glabel func_800C740C /* B3E734 800C7594 0C00084C */ jal osSyncPrintf /* B3E738 800C7598 24845944 */ addiu $a0, %lo(D_80145944) # addiu $a0, $a0, 0x5944 /* B3E73C 800C759C 02402025 */ move $a0, $s2 -/* B3E740 800C75A0 0C0401E0 */ jal osSetVibration +/* B3E740 800C75A0 0C0401E0 */ jal osSetRumble /* B3E744 800C75A4 00002825 */ move $a1, $zero /* B3E748 800C75A8 1040000F */ beqz $v0, .L800C75E8 /* B3E74C 800C75AC 3C048014 */ lui $a0, %hi(D_80145948) # $a0, 0x8014 @@ -344,7 +344,7 @@ glabel func_800C740C /* B3E87C 800C76DC 028E9021 */ addu $s2, $s4, $t6 /* B3E880 800C76E0 265202BC */ addiu $s2, $s2, 0x2bc /* B3E884 800C76E4 02402825 */ move $a1, $s2 -/* B3E888 800C76E8 0C04027D */ jal osProbeVibrationPack +/* B3E888 800C76E8 0C04027D */ jal osProbeRumblePak /* B3E88C 800C76EC 00403025 */ move $a2, $v0 /* B3E890 800C76F0 14400018 */ bnez $v0, .L800C7754 /* B3E894 800C76F4 2401000B */ li $at, 11 @@ -352,10 +352,10 @@ glabel func_800C740C /* B3E89C 800C76FC 0293C021 */ addu $t8, $s4, $s3 /* B3E8A0 800C7700 A30F02AE */ sb $t7, 0x2ae($t8) /* B3E8A4 800C7704 02402025 */ move $a0, $s2 -/* B3E8A8 800C7708 0C0401E0 */ jal osSetVibration +/* B3E8A8 800C7708 0C0401E0 */ jal osSetRumble /* B3E8AC 800C770C 24050001 */ li $a1, 1 /* B3E8B0 800C7710 02402025 */ move $a0, $s2 -/* B3E8B4 800C7714 0C0401E0 */ jal osSetVibration +/* B3E8B4 800C7714 0C0401E0 */ jal osSetRumble /* B3E8B8 800C7718 00002825 */ move $a1, $zero /* B3E8BC 800C771C 3C048014 */ lui $a0, %hi(D_80145A28) # $a0, 0x8014 /* B3E8C0 800C7720 0C00084C */ jal osSyncPrintf @@ -411,7 +411,7 @@ glabel func_800C740C /* B3E97C 800C77DC 02802025 */ move $a0, $s4 /* B3E980 800C77E0 252A0001 */ addiu $t2, $t1, 1 /* B3E984 800C77E4 AC2AA4F0 */ sw $t2, %lo(D_8016A4F0)($at) -/* B3E988 800C77E8 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue +/* B3E988 800C77E8 0C031CBF */ jal PadMgr_UnlockSerialMesgQueue /* B3E98C 800C77EC 8FA5003C */ lw $a1, 0x3c($sp) /* B3E990 800C77F0 8FBF0034 */ lw $ra, 0x34($sp) /* B3E994 800C77F4 8FB00018 */ lw $s0, 0x18($sp) diff --git a/asm/non_matchings/code/padmgr/func_800C7948.s b/asm/non_matchings/code/padmgr/func_800C7948.s deleted file mode 100644 index 23b8c47d39..0000000000 --- a/asm/non_matchings/code/padmgr/func_800C7948.s +++ /dev/null @@ -1,13 +0,0 @@ -glabel func_800C7948 -/* B3EAE8 800C7948 90AE0000 */ lbu $t6, ($a1) -/* B3EAEC 800C794C 240800F0 */ li $t0, 240 -/* B3EAF0 800C7950 A08E02B2 */ sb $t6, 0x2b2($a0) -/* B3EAF4 800C7954 90AF0001 */ lbu $t7, 1($a1) -/* B3EAF8 800C7958 A08F02B3 */ sb $t7, 0x2b3($a0) -/* B3EAFC 800C795C 90B80002 */ lbu $t8, 2($a1) -/* B3EB00 800C7960 A09802B4 */ sb $t8, 0x2b4($a0) -/* B3EB04 800C7964 90B90003 */ lbu $t9, 3($a1) -/* B3EB08 800C7968 A09902B5 */ sb $t9, 0x2b5($a0) -/* B3EB0C 800C796C 03E00008 */ jr $ra -/* B3EB10 800C7970 A088045D */ sb $t0, 0x45d($a0) - diff --git a/asm/non_matchings/code/padmgr/func_800C7C14.s b/asm/non_matchings/code/padmgr/func_800C7C14.s deleted file mode 100644 index 8dd392ac02..0000000000 --- a/asm/non_matchings/code/padmgr/func_800C7C14.s +++ /dev/null @@ -1,137 +0,0 @@ -.rdata -glabel D_80145BE4 - .asciz "../padmgr.c" - .balign 4 - -glabel D_80145BF0 - .asciz "this->pad_status[i].type = %x\n" - .balign 4 - -glabel D_80145C10 - .asciz "知らない種類のコントローラが接続されています\n" - # EUC-JP: 知らない種類のコントローラが接続されています | An unknown type of controller is connected - .balign 4 - -.text -glabel func_800C7C14 -/* B3EDB4 800C7C14 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* B3EDB8 800C7C18 AFBF0024 */ sw $ra, 0x24($sp) -/* B3EDBC 800C7C1C AFB30020 */ sw $s3, 0x20($sp) -/* B3EDC0 800C7C20 00809825 */ move $s3, $a0 -/* B3EDC4 800C7C24 AFB2001C */ sw $s2, 0x1c($sp) -/* B3EDC8 800C7C28 AFB10018 */ sw $s1, 0x18($sp) -/* B3EDCC 800C7C2C 0C031C94 */ jal PadMgr_LockGetControllerQueue -/* B3EDD0 800C7C30 AFB00014 */ sw $s0, 0x14($sp) -/* B3EDD4 800C7C34 00408825 */ move $s1, $v0 -/* B3EDD8 800C7C38 0C0403BC */ jal osContStartReadData /*(OSMesgQueue *mq)*/ -/* B3EDDC 800C7C3C 00402025 */ move $a0, $v0 -/* B3EDE0 800C7C40 8E630460 */ lw $v1, 0x460($s3) -/* B3EDE4 800C7C44 10600003 */ beqz $v1, .L800C7C54 -/* B3EDE8 800C7C48 02602025 */ move $a0, $s3 -/* B3EDEC 800C7C4C 0060F809 */ jalr $v1 -/* B3EDF0 800C7C50 8E650464 */ lw $a1, 0x464($s3) -.L800C7C54: -/* B3EDF4 800C7C54 02202025 */ move $a0, $s1 -/* B3EDF8 800C7C58 00002825 */ move $a1, $zero -/* B3EDFC 800C7C5C 0C000CA0 */ jal osRecvMesg -/* B3EE00 800C7C60 24060001 */ li $a2, 1 -/* B3EE04 800C7C64 26700290 */ addiu $s0, $s3, 0x290 -/* B3EE08 800C7C68 0C0403DD */ jal osContGetReadData /*(OSContPad *pad)*/ -/* B3EE0C 800C7C6C 02002025 */ move $a0, $s0 -/* B3EE10 800C7C70 926E045E */ lbu $t6, 0x45e($s3) -/* B3EE14 800C7C74 02002025 */ move $a0, $s0 -/* B3EE18 800C7C78 11C00003 */ beqz $t6, .L800C7C88 -/* B3EE1C 800C7C7C 00000000 */ nop -/* B3EE20 800C7C80 0C001114 */ jal bzero -/* B3EE24 800C7C84 24050018 */ li $a1, 24 -.L800C7C88: -/* B3EE28 800C7C88 0C031E5D */ jal func_800C7974 -/* B3EE2C 800C7C8C 02602025 */ move $a0, $s3 -/* B3EE30 800C7C90 0C040C84 */ jal func_80103210 -/* B3EE34 800C7C94 02202025 */ move $a0, $s1 -/* B3EE38 800C7C98 02202025 */ move $a0, $s1 -/* B3EE3C 800C7C9C 00002825 */ move $a1, $zero -/* B3EE40 800C7CA0 0C000CA0 */ jal osRecvMesg -/* B3EE44 800C7CA4 24060001 */ li $a2, 1 -/* B3EE48 800C7CA8 0C040CA3 */ jal func_8010328C -/* B3EE4C 800C7CAC 02602025 */ move $a0, $s3 -/* B3EE50 800C7CB0 02602025 */ move $a0, $s3 -/* B3EE54 800C7CB4 0C031CBF */ jal PadMgr_UnlockReleaseControllerQueue -/* B3EE58 800C7CB8 02202825 */ move $a1, $s1 -/* B3EE5C 800C7CBC 00009025 */ move $s2, $zero -/* B3EE60 800C7CC0 00008825 */ move $s1, $zero -/* B3EE64 800C7CC4 02608025 */ move $s0, $s3 -.L800C7CC8: -/* B3EE68 800C7CC8 920F0003 */ lbu $t7, 3($s0) -/* B3EE6C 800C7CCC 55E00014 */ bnezl $t7, .L800C7D20 -/* B3EE70 800C7CD0 26310001 */ addiu $s1, $s1, 1 -/* B3EE74 800C7CD4 96180000 */ lhu $t8, ($s0) -/* B3EE78 800C7CD8 24010005 */ li $at, 5 -/* B3EE7C 800C7CDC 3C048014 */ lui $a0, %hi(D_80145BE4) # $a0, 0x8014 -/* B3EE80 800C7CE0 17010005 */ bne $t8, $at, .L800C7CF8 -/* B3EE84 800C7CE4 24845BE4 */ addiu $a0, %lo(D_80145BE4) # addiu $a0, $a0, 0x5be4 -/* B3EE88 800C7CE8 24190001 */ li $t9, 1 -/* B3EE8C 800C7CEC 02394004 */ sllv $t0, $t9, $s1 -/* B3EE90 800C7CF0 1000000A */ b .L800C7D1C -/* B3EE94 800C7CF4 02489025 */ or $s2, $s2, $t0 -.L800C7CF8: -/* B3EE98 800C7CF8 0C000B84 */ jal LogUtils_LogThreadId -/* B3EE9C 800C7CFC 240501CA */ li $a1, 458 -/* B3EEA0 800C7D00 3C048014 */ lui $a0, %hi(D_80145BF0) # $a0, 0x8014 -/* B3EEA4 800C7D04 24845BF0 */ addiu $a0, %lo(D_80145BF0) # addiu $a0, $a0, 0x5bf0 -/* B3EEA8 800C7D08 0C00084C */ jal osSyncPrintf -/* B3EEAC 800C7D0C 96050000 */ lhu $a1, ($s0) -/* B3EEB0 800C7D10 3C048014 */ lui $a0, %hi(D_80145C10) # $a0, 0x8014 -/* B3EEB4 800C7D14 0C00084C */ jal osSyncPrintf -/* B3EEB8 800C7D18 24845C10 */ addiu $a0, %lo(D_80145C10) # addiu $a0, $a0, 0x5c10 -.L800C7D1C: -/* B3EEBC 800C7D1C 26310001 */ addiu $s1, $s1, 1 -.L800C7D20: -/* B3EEC0 800C7D20 24010004 */ li $at, 4 -/* B3EEC4 800C7D24 1621FFE8 */ bne $s1, $at, .L800C7CC8 -/* B3EEC8 800C7D28 26100004 */ addiu $s0, $s0, 4 -/* B3EECC 800C7D2C A27202A8 */ sb $s2, 0x2a8($s3) -/* B3EED0 800C7D30 3C098017 */ lui $t1, %hi(gFaultStruct+0x7CD) # $t1, 0x8017 -/* B3EED4 800C7D34 9129B5F5 */ lbu $t1, %lo(gFaultStruct+0x7CD)($t1) -/* B3EED8 800C7D38 51200006 */ beql $t1, $zero, .L800C7D54 -/* B3EEDC 800C7D3C 926A045C */ lbu $t2, 0x45c($s3) -/* B3EEE0 800C7D40 0C031E06 */ jal func_800C7818 -/* B3EEE4 800C7D44 02602025 */ move $a0, $s3 -/* B3EEE8 800C7D48 1000001B */ b .L800C7DB8 -/* B3EEEC 800C7D4C 8FBF0024 */ lw $ra, 0x24($sp) -/* B3EEF0 800C7D50 926A045C */ lbu $t2, 0x45c($s3) -.L800C7D54: -/* B3EEF4 800C7D54 59400009 */ blezl $t2, .L800C7D7C -/* B3EEF8 800C7D58 926D045D */ lbu $t5, 0x45d($s3) -/* B3EEFC 800C7D5C 926B045C */ lbu $t3, 0x45c($s3) -/* B3EF00 800C7D60 02602025 */ move $a0, $s3 -/* B3EF04 800C7D64 256CFFFF */ addiu $t4, $t3, -1 -/* B3EF08 800C7D68 0C031E06 */ jal func_800C7818 -/* B3EF0C 800C7D6C A26C045C */ sb $t4, 0x45c($s3) -/* B3EF10 800C7D70 10000011 */ b .L800C7DB8 -/* B3EF14 800C7D74 8FBF0024 */ lw $ra, 0x24($sp) -/* B3EF18 800C7D78 926D045D */ lbu $t5, 0x45d($s3) -.L800C7D7C: -/* B3EF1C 800C7D7C 55A00006 */ bnezl $t5, .L800C7D98 -/* B3EF20 800C7D80 926E045E */ lbu $t6, 0x45e($s3) -/* B3EF24 800C7D84 0C031E06 */ jal func_800C7818 -/* B3EF28 800C7D88 02602025 */ move $a0, $s3 -/* B3EF2C 800C7D8C 1000000A */ b .L800C7DB8 -/* B3EF30 800C7D90 8FBF0024 */ lw $ra, 0x24($sp) -/* B3EF34 800C7D94 926E045E */ lbu $t6, 0x45e($s3) -.L800C7D98: -/* B3EF38 800C7D98 55C00007 */ bnezl $t6, .L800C7DB8 -/* B3EF3C 800C7D9C 8FBF0024 */ lw $ra, 0x24($sp) -/* B3EF40 800C7DA0 0C031D03 */ jal func_800C740C -/* B3EF44 800C7DA4 02602025 */ move $a0, $s3 -/* B3EF48 800C7DA8 926F045D */ lbu $t7, 0x45d($s3) -/* B3EF4C 800C7DAC 25F8FFFF */ addiu $t8, $t7, -1 -/* B3EF50 800C7DB0 A278045D */ sb $t8, 0x45d($s3) -/* B3EF54 800C7DB4 8FBF0024 */ lw $ra, 0x24($sp) -.L800C7DB8: -/* B3EF58 800C7DB8 8FB00014 */ lw $s0, 0x14($sp) -/* B3EF5C 800C7DBC 8FB10018 */ lw $s1, 0x18($sp) -/* B3EF60 800C7DC0 8FB2001C */ lw $s2, 0x1c($sp) -/* B3EF64 800C7DC4 8FB30020 */ lw $s3, 0x20($sp) -/* B3EF68 800C7DC8 03E00008 */ jr $ra -/* B3EF6C 800C7DCC 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/data/code_80101910.bss.s b/data/code_80101910.bss.s index d36a79afe6..7d318937cf 100644 --- a/data/code_80101910.bss.s +++ b/data/code_80101910.bss.s @@ -7,5 +7,5 @@ .section .bss -glabel D_80175960 +glabel pifMempakBuf .space 0x40 diff --git a/docs/guides/-O2 decompilation (for IDO 5.3).md b/docs/guides/-O2 decompilation (for IDO 5.3).md index 25af668102..d662b0436e 100644 --- a/docs/guides/-O2 decompilation (for IDO 5.3).md +++ b/docs/guides/-O2 decompilation (for IDO 5.3).md @@ -245,6 +245,8 @@ Conditions like `if (glob.singleBitField)` are sometimes (but not always) emitte Copying a struct generates reorderings compared to copying each data member separately. It might also copy padding data (?), and if the size is 3 (mod 4) it may also generate `lwr`/`swr` instructions (like array initialization). +Sometimes, copying small structs with members that fit nicely into primitive types will use normal `lw`, `lh`, etc. instructions. But, usually copying larger structs will use `lwl`/`lwr` instructions, regardless of the internal data. Also, regalloc for struct copying is different between IDO V5.3 and V7.1. If this is the only non-matching in your function, try the other compiler. + ### Register allocation TODO: we really need to figure this out. diff --git a/include/functions.h b/include/functions.h index cf28be8912..82165c3f26 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1561,19 +1561,21 @@ void ListAlloc_Free(ListAlloc* this, void* data); void ListAlloc_FreeAll(ListAlloc* this); void Main_LogSystemHeap(); void Main(void*); -// OSMesgQueue* PadMgr_LockGetControllerQueue(PadMgr* padmgr); -// void PadMgr_UnlockReleaseControllerQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue); -// void PadMgr_Lock2(PadMgr* padmgr); -// void PadMgr_Unlock2(PadMgr* padmgr) -// ? func_800C740C(?); -// ? func_800C7818(?); -// ? func_800C7928(?); -// ? func_800C7948(?); -// ? func_800C7974(?); -// ? func_800C7C14(?); -// ? func_800C7DD0(?); -void func_800C7E08(Input*, u32); -// void PadMgr_Init(PadMgr* padmgr, OSMesg mesg, UNK_TYPE arg2, OSId id, OSPri priority, void* stack); +OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padmgr); +void PadMgr_UnlockSerialMesgQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue); +void PadMgr_LockPadData(PadMgr* padmgr); +void PadMgr_UnlockPadData(PadMgr* padmgr); +void PadMgr_RumbleControl(PadMgr* padmgr); +void PadMgr_RumbleStop(PadMgr* padmgr); +void PadMgr_RumbleReset(PadMgr* padmgr); +void PadMgr_RumbleSet(PadMgr* padmgr, u8* ctrlr_rumbles); +void PadMgr_ProcessInputs(PadMgr* padmgr); +void PadMgr_HandleRetraceMsg(PadMgr* padmgr); +void PadMgr_HandlePreNMI(PadMgr* padmgr); +// This function must remain commented out, because it is called incorrectly in +// fault.c (actual bug in game), and the compiler notices and won't compile it +// void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode); +void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* siIntMsgQ, UNK_TYPE arg2, OSId id, OSPri priority, void* stack); // ? func_800C82A0(?); // ? func_800C84E4(?); // ? func_800C8534(?); @@ -2334,9 +2336,9 @@ s16 sins(u16); // ? func_801004C0(?); // ? func_801005CC(?); // ? func_80100734(?); -// s32 osSetVibration(unk_controller_t *arg0, u32 vibrate); +// s32 osSetRumble(unk_controller_t *arg0, u32 vibrate); // void osSetUpMempakWrite(s32 ctrlridx, pif_data_buffer_t* buf); -// s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx); +// s32 osProbeRumblePak(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx); // void __osSiCreateAccessQueue(); // void __osSiGetAccess(); // void __osSiRelAccess(); @@ -2410,9 +2412,9 @@ void func_80104D00(u8 a0); // ? osAiGetLength(?); // ? func_80105C20(?); // ? func_80105CF0(?); -// ? func_80105F40(?); -// ? func_80106170(?); -// ? func_80106240(?); +// s32 osReadMempak(OSMesgQueue* ctrlrqueue, u32 ctrlridx, s16 addr, PIF_mempak_data_t* data) +u8 osMempakAddrCRC(u16 addr); +u8 osMempakDataCRC(u8 *data); u32 __osSpGetStatus(); void __osSpSetStatus(u32 status); // ? osWritebackDCacheAll(?); diff --git a/include/padmgr.h b/include/padmgr.h deleted file mode 100644 index dda4b210fc..0000000000 --- a/include/padmgr.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef _PADMGR_H_ -#define _PADMGR_H_ - -#include -#include - -#include - -typedef struct { - /* 0x0000 */ OSContStatus pad_status[4]; - /* 0x0010 */ OSMesg msgbuf1[1]; - /* 0x0014 */ OSMesg msgbuf2[1]; - /* 0x0018 */ OSMesg msgbuf3[4]; - /* 0x0028 */ OSMesgQueue queue1; - /* 0x0040 */ OSMesgQueue queue2; - /* 0x0058 */ OSMesgQueue queue3; - /* 0x0070 */ UNK_TYPE unk_70; - /* 0x0074 */ UNK_TYPE unk_74; - /* 0x0078 */ UNK_TYPE unk_78; - /* 0x007C */ UNK_TYPE unk_7C; - /* 0x0080 */ OSThread thread; - /* 0x0230 */ char unk_230[0x78]; - /* 0x02A8 */ u8 unk_2A8; - /* 0x02A9 */ u8 unk_2A9; - /* 0x02AA */ u8 unk_2AA[4]; - /* 0x02AA */ u8 unk_2AE[4]; // Looks like 1 if vibration pack, 2 if (maybe controller pack)? - /* 0x02B2 */ u8 unk_2B2[4]; - /* 0x02B6 */ u8 unk_2B6[4]; - /* 0x02BA */ char unk_2BA[0x02]; // probably padding - /* 0x02BC */ unk_controller_t unk_controller[4]; - /* 0x045C */ u8 unk_45C; - /* 0x045D */ u8 unk_45D; - /* 0x045E */ u8 unk_45E; - /* 0x045F */ u8 unk_45F; - /* 0x0460 */ void(*unk_460)(s32 a, s32 b); - /* 0x0464 */ s32 unk_464; -} PadMgr; // size = 0x468 - - -#endif diff --git a/include/ultra64/controller.h b/include/ultra64/controller.h index cf66ce0a5b..ada0b06d08 100644 --- a/include/ultra64/controller.h +++ b/include/ultra64/controller.h @@ -2,11 +2,37 @@ #define _ULTRA64_CONTROLLER_H_ #include -#include #include #include +typedef struct +{ + /* 0x00 */ union{ + u16 button; + struct{ + u16 a : 1; + u16 b : 1; + u16 z : 1; + u16 s : 1; + u16 du : 1; + u16 dd : 1; + u16 dl : 1; + u16 dr : 1; + u16 illegal_h : 1; + u16 illegal_l : 1; + u16 l : 1; + u16 r : 1; + u16 cu : 1; + u16 cd : 1; + u16 cl : 1; + u16 cr : 1; + }; + }; + /* 0x02 */ s8 x; + /* 0x03 */ s8 y; +} PadInput; // size = 0x4 + typedef struct { u8 slot_type; //0xFF for valid command, 0x00 for don't read this controller, 0xFE for end of commands @@ -19,11 +45,7 @@ typedef struct { PIF_header_t hdr; union{ - struct{ - u16 button; - s8 rawStickX; - s8 rawStickY; - }; + PadInput input; struct{ u8 ctl_type_lo; u8 ctl_type_hi; @@ -42,6 +64,10 @@ typedef union }; } PIF_mempak_wr_t; +typedef struct { + u8 data[0x20]; +} PIF_mempak_data_t; + typedef union { u8 bytes[0x40]; @@ -75,9 +101,9 @@ extern u32 gOsContInitialized; // = 0 extern OSMesgQueue _osContMesgQueue; extern OSMesg _osContMesgBuff[4]; -extern s32 osSetVibration(unk_controller_t *arg0, u32 vibrate); +extern s32 osSetRumble(unk_controller_t *arg0, u32 vibrate); extern void osSetUpMempakWrite(s32 ctrlridx, pif_data_buffer_t* buf); -extern s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx); +extern s32 osProbeRumblePak(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx); extern void __osSiCreateAccessQueue(); extern void __osSiGetAccess(); extern void __osSiRelAccess(); diff --git a/include/variables.h b/include/variables.h index 7cbbec17e7..42767d9631 100644 --- a/include/variables.h +++ b/include/variables.h @@ -847,7 +847,7 @@ extern s32 gSystemArenaLogSeverity; //extern u32 gOsContInitialized = 0; //extern ? D_80134CF0; //extern ? D_80134CF4; -//extern ? D_80134D20; +extern s32 D_80134D20; //extern ? D_80135130; //extern ? D_80135158; extern char D_80135180[]; @@ -3807,7 +3807,7 @@ extern Arena gSystemArena; //extern OSMesgQueue _osContMesgQueue; //extern OSMesg _osContMesgBuff[4]; //extern ? D_80175860; -//extern ? D_80175960; +extern pif_data_buffer_t pifMempakBuf; //extern ? D_801759A0; //extern ? D_801759A4; //extern ? D_801759A8; diff --git a/include/z64.h b/include/z64.h index d317d200b6..ac145c0e7c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -279,44 +280,66 @@ typedef struct GraphicsContext { } GraphicsContext; // size = 0x300 typedef struct { - /* 0x00 */ union { - struct { - u16 a : 1; - u16 b : 1; - u16 z : 1; - u16 s : 1; - u16 du : 1; - u16 dd : 1; - u16 dl : 1; - u16 dr : 1; - u16 : 2; - u16 l : 1; - u16 r : 1; - u16 cu : 1; - u16 cd : 1; - u16 cl : 1; - u16 cr : 1; + PadInput in; + union { + u16 status; + struct { + u8 errno; + u8 statusLo; }; - u16 pad; }; - /* 0x02 */ s8 x; - /* 0x03 */ s8 y; -} RawInput; // size = 0x4 +} PadState; + +typedef struct +{ + /* 0x00 */ PadState cur; + /* 0x06 */ PadState prev; + /* 0x0C */ PadState press; // X/Y store delta from last frame + /* 0x12 */ PadState rel; // X/Y store adjusted + /* The old version of this struct is: + RawInput raw; + u16 status; + RawInput rawPrev; + u16 statusPrev; + u16 padPressed; + s8 xDiff; + s8 yDiff; + char unk_10[0x02]; + u16 padReleased; + s8 xAdjusted; + s8 yAdjusted; + char unk_16[0x02]; + */ +} Input; // size = 0x18 typedef struct { - /* 0x00 */ RawInput raw; - /* 0x04 */ u16 status; - /* 0x06 */ RawInput rawPrev; - /* 0x0A */ u16 statusPrev; - /* 0x0C */ u16 padPressed; - /* 0x0E */ s8 xDiff; - /* 0x0F */ s8 yDiff; - /* 0x10 */ char unk_10[0x02]; - /* 0x12 */ u16 padReleased; - /* 0x14 */ s8 xAdjusted; - /* 0x15 */ s8 yAdjusted; - /* 0x16 */ char unk_16[0x02]; -} Input; // size = 0x18 + /* 0x0000 */ OSContStatus pad_status[4]; + /* 0x0010 */ OSMesg msgbuf1[1]; + /* 0x0014 */ OSMesg msgbuf2[1]; + /* 0x0018 */ OSMesg msgbuf3[4]; + /* 0x0028 */ OSMesgQueue queue1; + /* 0x0040 */ OSMesgQueue queue2; + /* 0x0058 */ OSMesgQueue queue3; + /* 0x0070 */ UNK_TYPE unk_70; + /* 0x0074 */ UNK_TYPE unk_74; + /* 0x0078 */ UNK_TYPE unk_78; + /* 0x007C */ UNK_TYPE unk_7C; + /* 0x0080 */ OSThread thread; + /* 0x0230 */ Input inputs[4]; // 0x18 each = 0x60 total + /* 0x0290 */ PadState pads[4]; // 0x6 each = 0x18 total + /* 0x02A8 */ volatile u8 validCtrlrsMask; + /* 0x02A9 */ s8 ncontrollers; + /* 0x02AA */ u8 ctrlrIsConnected[4]; // Key_switch in original code + /* 0x02AE */ u8 pakType[4]; // 1 if rumble pack, 2 if mempak? + /* 0x02B2 */ volatile u8 rumbleEnable[4]; + /* 0x02B6 */ u8 rumbleCounter[4]; // not clear exact meaning + /* 0x02BC */ unk_controller_t unk_controller[4]; + /* 0x045C */ volatile u8 rumbleOffFrames; + /* 0x045D */ volatile u8 rumbleOnFrames; + /* 0x045E */ u8 preNMIShutdown; + /* 0x0460 */ void (*retraceCallback)(void* padmgr, u32 unk464); + /* 0x0464 */ u32 retraceCallbackValue; +} PadMgr; // size = 0x468 typedef struct { /* 0x0000 */ s16 unk_0; diff --git a/makefile b/makefile index 9b663e20b8..4d8064db02 100644 --- a/makefile +++ b/makefile @@ -179,12 +179,15 @@ build/src/%.o: src/%.c @$(OBJDUMP) -d $@ > $(@:.o=.s) -build/src/libultra_code/%.o: CC := $(CC_OLD) +# This line is redundant because of the asm_processor line below, but keeping it here because +# it is one of the directories that has to be compiled with CC_OLD. +# build/src/libultra_code/%.o: CC := $(CC_OLD) build/src/libultra_boot_O1/%.o: CC := $(CC_OLD) build/src/libultra_boot_O2/%.o: CC := $(CC_OLD) build/src/boot/%.o: CC := python3 tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) -- build/src/code/%.o: CC := python3 tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) -- +build/src/libultra_code/%.o: CC := python3 tools/asm_processor/build.py $(CC_OLD) -- $(AS) $(ASFLAGS) -- build/src/overlays/actors/%.o: CC := python3 tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) -- build/src/overlays/effects/%.o: CC := python3 tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) -- build/src/overlays/gamestates/%.o: CC := python3 tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) -- diff --git a/spec b/spec index cd2adb8087..2de0c9fd28 100644 --- a/spec +++ b/spec @@ -514,7 +514,7 @@ beginseg include "build/data/code_80100290.data.o" include "build/data/code_80100290.rodata.o" include "build/data/code_80100290.bss.o" - include "build/src/libultra_code/osVibrationPack.o" + include "build/src/libultra_code/osRumblePak.o" include "build/src/libultra_code/__osSiCreateAccessQueue.o" include "build/src/libultra_code/osContInit.o" include "build/src/libultra_code/osContStartReadData.o" @@ -563,8 +563,8 @@ beginseg include "build/asm/code_80105C20.o" include "build/asm/code_80105CF0.o" include "build/data/code_80105CF0.data.o" - include "build/asm/code_80105F40.o" - include "build/asm/code_80106170.o" + include "build/src/libultra_code/osReadMempak.o" + include "build/src/libultra_code/osMempakAddrCRC.o" include "build/asm/osSetTimer.o" include "build/src/libultra_code/__osSpGetStatus.o" include "build/src/libultra_code/__osSpSetStatus.o" diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c index 4d2956e3ed..10f6bb4379 100644 --- a/src/boot/z_locale.c +++ b/src/boot/z_locale.c @@ -1,7 +1,6 @@ #include #include #include -#include u32 gCurrentRegion = 0; LocaleCartInfo sCartInfo; @@ -39,13 +38,11 @@ void Locale_ResetRegion() { } u32 func_80001F48() { - PadMgr* padMgr = (PadMgr*)(u32)&gPadMgr; // cast required to match - if (gCurrentRegion == REGION_NATIVE) { return 0; } - if (padMgr->unk_2A8 & 4) { + if (gPadMgr.validCtrlrsMask & 4) { return 0; } @@ -53,13 +50,11 @@ u32 func_80001F48() { } u32 func_80001F8C() { - PadMgr* padMgr = (PadMgr*)(u32)&gPadMgr; // cast required to match - if (gCurrentRegion == REGION_NATIVE) { return 0; } - if (padMgr->unk_2A8 & 4) { + if (gPadMgr.validCtrlrsMask & 4) { return 1; } diff --git a/src/code/code_800A9F30.c b/src/code/code_800A9F30.c index ddc8c02238..15475e8720 100644 --- a/src/code/code_800A9F30.c +++ b/src/code/code_800A9F30.c @@ -1,13 +1,12 @@ #include #include -#include extern u8 D_80160FD0[]; extern PadMgr gPadMgr; void func_800A9F30(s32 a, s32 b) { func_800D2E30(&D_80160FD0); - func_800C7948(a, &D_80160FD0); + PadMgr_RumbleSet(a, &D_80160FD0); } void func_800A9F6C(f32 a, u8 b, u8 c, u8 d) { @@ -35,8 +34,8 @@ void func_800A9F6C(f32 a, u8 b, u8 c, u8 d) { void func_800AA0B4(void) { func_800D3140(&D_80160FD0); - gPadMgr.unk_460 = func_800A9F30; - gPadMgr.unk_464 = 0; + gPadMgr.retraceCallback = func_800A9F30; + gPadMgr.retraceCallbackValue = 0; if (0) {} // Necessary to match } @@ -44,16 +43,16 @@ void func_800AA0B4(void) { void func_800AA0F0(void) { PadMgr* padmgr = &gPadMgr; - if ((padmgr->unk_460 == func_800A9F30) && (padmgr->unk_464 == 0)) { - padmgr->unk_460 = NULL; - padmgr->unk_464 = 0; + if (((void*)padmgr->retraceCallback == (void*)func_800A9F30) && (padmgr->retraceCallbackValue == 0)) { + padmgr->retraceCallback = NULL; + padmgr->retraceCallbackValue = 0; } func_800D3178(&D_80160FD0); } u32 func_800AA148(void) { - return ((gPadMgr.unk_2AE[0] ^ 1) == 0); + return ((gPadMgr.pakType[0] ^ 1) == 0); } void func_800AA15C(void) { diff --git a/src/code/code_800D31A0.c b/src/code/code_800D31A0.c index 54201e35fc..ec5b7a9b05 100644 --- a/src/code/code_800D31A0.c +++ b/src/code/code_800D31A0.c @@ -1,5 +1,4 @@ #include -#include #include extern PadMgr gPadMgr; @@ -14,9 +13,7 @@ void func_800D31A0() { } void func_800D31F0() { - PadMgr* padMgr = (PadMgr*)(u32)&gPadMgr; // cast required to match - - D_8012DBC0 = (padMgr->unk_2A8 & 2) != 0; + D_8012DBC0 = (gPadMgr.validCtrlrsMask & 2) != 0; } void func_800D3210() { diff --git a/src/code/fault.c b/src/code/fault.c index b3270ea7cf..469ef799dd 100644 --- a/src/code/fault.c +++ b/src/code/fault.c @@ -250,7 +250,7 @@ void Fault_Sleep(u32 duration) { void Fault_PadCallback(Input* input) { // BUG: this function is not called correctly and thus will crash from reading a bad pointer at 0x800C7E4C - func_800C7E08(input, 0); + PadMgr_RequestPadData(input, 0); } void Fault_UpdatePadImpl() { @@ -270,7 +270,7 @@ u32 Fault_WaitForInputImpl() { Fault_Sleep(0x10); Fault_UpdatePadImpl(); - kDown = curInput->padPressed; + kDown = curInput->press.in.button; if (kDown == 0x20) { sFaultStructPtr->faultActive = !sFaultStructPtr->faultActive; @@ -583,7 +583,7 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { count--; Fault_Sleep(0x10); Fault_UpdatePadImpl(); - if (!~(curInput->padPressed | ~L_TRIG)) { + if (!~(curInput->press.in.button | ~L_TRIG)) { sFaultStructPtr->faultActive = false; } } @@ -591,42 +591,42 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { do { Fault_Sleep(0x10); Fault_UpdatePadImpl(); - } while (curInput->padPressed == 0); + } while (curInput->press.in.button == 0); - if (!~(curInput->padPressed | ~START_BUTTON)) { + if (!~(curInput->press.in.button | ~START_BUTTON)) { return; } - if (!~(curInput->raw.pad | ~A_BUTTON)) { + if (!~(curInput->cur.in.button | ~A_BUTTON)) { return; } off = 0x10; - if (!~(curInput->raw.pad | ~Z_TRIG)) { + if (!~(curInput->cur.in.button | ~Z_TRIG)) { off = 0x100; } - if (!~(curInput->raw.pad | ~B_BUTTON)) { + if (!~(curInput->cur.in.button | ~B_BUTTON)) { off <<= 8; } - if (!~(curInput->raw.pad | ~U_JPAD)) { + if (!~(curInput->cur.in.button | ~U_JPAD)) { addr -= off; } - if (!~(curInput->raw.pad | ~D_JPAD)) { + if (!~(curInput->cur.in.button | ~D_JPAD)) { addr += off; } - if (!~(curInput->raw.pad | ~U_CBUTTONS)) { + if (!~(curInput->cur.in.button | ~U_CBUTTONS)) { addr = pc; } - if (!~(curInput->raw.pad | ~D_CBUTTONS)) { + if (!~(curInput->cur.in.button | ~D_CBUTTONS)) { addr = sp; } - if (!~(curInput->raw.pad | ~L_CBUTTONS)) { + if (!~(curInput->cur.in.button | ~L_CBUTTONS)) { addr = unk0; } - if (!~(curInput->raw.pad | ~R_CBUTTONS)) { + if (!~(curInput->cur.in.button | ~R_CBUTTONS)) { addr = unk1; } - if (!~(curInput->raw.pad | ~L_TRIG)) { + if (!~(curInput->cur.in.button | ~L_TRIG)) { break; } } diff --git a/src/code/graph.c b/src/code/graph.c index 5e1d2563d5..600c2287f5 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -387,8 +387,8 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { } sGraphUpdateTime = time; - if (D_8012DBC0 && (!~(gameState->input[0].padPressed | ~Z_TRIG)) && - (!~(gameState->input[0].raw.pad | ~(L_TRIG | R_TRIG)))) { + if (D_8012DBC0 && (!~(gameState->input[0].press.in.button | ~Z_TRIG)) && + (!~(gameState->input[0].cur.in.button | ~(L_TRIG | R_TRIG)))) { gSaveContext.game_mode = 0; SET_NEXT_GAMESTATE(gameState, func_80801E44, char[0x240]); // TODO : SelectContext gameState->running = false; diff --git a/src/code/main.c b/src/code/main.c index 5e2b9a89e9..8b797bbf9f 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,6 +1,5 @@ #include #include -#include #include u32 gScreenWidth = SCREEN_WIDTH; diff --git a/src/code/padmgr.c b/src/code/padmgr.c index ac345c86b6..db3cd151fa 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -4,11 +4,10 @@ #include #include -#include s32 D_8012D280 = 1; -OSMesgQueue* PadMgr_LockGetControllerQueue(PadMgr* padmgr) { +OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padmgr) { OSMesgQueue* ctrlrqueue = NULL; if (D_8012D280 > 2) { @@ -28,7 +27,7 @@ OSMesgQueue* PadMgr_LockGetControllerQueue(PadMgr* padmgr) { return ctrlrqueue; } -void PadMgr_UnlockReleaseControllerQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue) { +void PadMgr_UnlockSerialMesgQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue) { if (D_8012D280 > 2) { // EUC-JP: ロック解除します | Unlock osSyncPrintf("%2d %d serialMsgQロック解除します %08x %08x %08x\n", osGetThreadId(NULL), @@ -44,193 +43,347 @@ void PadMgr_UnlockReleaseControllerQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue } } -void PadMgr_Lock2(PadMgr* padmgr) { +void PadMgr_LockPadData(PadMgr* padmgr) { osRecvMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK); } -void PadMgr_Unlock2(PadMgr* padmgr) { +void PadMgr_UnlockPadData(PadMgr* padmgr) { osSendMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK); } #ifdef NON_MATCHING // regalloc and minor ordering differences -void func_800C740C(PadMgr* padmgr) { - static u32 D_8012D284 = 0; +void PadMgr_RumbleControl(PadMgr* padmgr) { + static u32 errcnt = 0; static u32 D_8016A4F0; s32 temp; - s32 var1; + s32 triedRumbleComm; OSMesgQueue* ctrlrqueue; - s32 var3; + s32 ctrlr; s32 var4; s32 i; temp = 1; - ctrlrqueue = PadMgr_LockGetControllerQueue(padmgr); - var1 = 0; + ctrlrqueue = PadMgr_LockSerialMesgQueue(padmgr); + triedRumbleComm = 0; for (i = 0; i < 4; i++) { - if (padmgr->unk_2AA[i] != 0) { + if (padmgr->ctrlrIsConnected[i] != 0) { if (padmgr->pad_status[i].status & 1) { - if (padmgr->unk_2AE[i] == temp) { - if (padmgr->unk_2B2[i] != 0) { - if (padmgr->unk_2B6[i] < 3) { + if (padmgr->pakType[i] == temp) { + if (padmgr->rumbleEnable[i] != 0) { + if (padmgr->rumbleCounter[i] < 3) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック ぶるぶるぶるぶる"); osSyncPrintf(VT_RST); - if (osSetVibration(&padmgr->unk_controller[i], temp) != 0) { - padmgr->unk_2AE[i] = 0; + if (osSetRumble(&padmgr->unk_controller[i], temp) != 0) { + padmgr->pakType[i] = 0; osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました"); osSyncPrintf(VT_RST); } else { - padmgr->unk_2B6[i] = 3; + padmgr->rumbleCounter[i] = 3; } - var1 = 1; + triedRumbleComm = 1; } } else { - if (padmgr->unk_2B6[i] != 0) { + if (padmgr->rumbleCounter[i] != 0) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止"); osSyncPrintf(VT_RST); - if (osSetVibration(&padmgr->unk_controller[i], 0) != 0) { - padmgr->unk_2AE[i] = 0; + if (osSetRumble(&padmgr->unk_controller[i], 0) != 0) { + padmgr->pakType[i] = 0; osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました"); osSyncPrintf(VT_RST); } else { - padmgr->unk_2B6[i]--; + padmgr->rumbleCounter[i]--; } - var1 = 1; + triedRumbleComm = 1; } } } } else { - if (padmgr->unk_2AE[i] != 0) { - if (padmgr->unk_2AE[i] == 1) { + if (padmgr->pakType[i] != 0) { + if (padmgr->pakType[i] == 1) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックが抜かれたようです"); osSyncPrintf(VT_RST); - padmgr->unk_2AE[i] = 0; + padmgr->pakType[i] = 0; } else { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックではないコントローラパックが抜かれたようです"); osSyncPrintf(VT_RST); - padmgr->unk_2AE[i] = 0; + padmgr->pakType[i] = 0; } } } } } - if (!var1) { - var3 = D_8016A4F0 % 4; + if (!triedRumbleComm) { + ctrlr = D_8016A4F0 % 4; - if ((padmgr->unk_2AA[var3] != 0) && (padmgr->pad_status[var3].status & 1) && (padmgr->unk_2AE[var3] != 1)) { - var4 = osProbeVibrationPack(ctrlrqueue, &padmgr->unk_controller[var3], var3); + if ((padmgr->ctrlrIsConnected[ctrlr] != 0) && (padmgr->pad_status[ctrlr].status & 1) && + (padmgr->pakType[ctrlr] != 1)) { + var4 = osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[ctrlr], ctrlr); if (var4 == 0) { - padmgr->unk_2AE[var3] = 1; - osSetVibration(&padmgr->unk_controller[var3], 1); - osSetVibration(&padmgr->unk_controller[var3], 0); + padmgr->pakType[ctrlr] = 1; + osSetRumble(&padmgr->unk_controller[ctrlr], 1); + osSetRumble(&padmgr->unk_controller[ctrlr], 0); osSyncPrintf(VT_FGCOL(YELLOW)); - osSyncPrintf("padmgr: %dコン: %s\n", var3 + 1, "振動パックを認識しました"); + osSyncPrintf("padmgr: %dコン: %s\n", ctrlr + 1, "振動パックを認識しました"); osSyncPrintf(VT_RST); } else if (var4 == 11) { - padmgr->unk_2AE[var3] = 2; + padmgr->pakType[ctrlr] = 2; } else if (var4 == 4) { - LOG_NUM("++errcnt", ++D_8012D284, "../padmgr.c", 282); + LOG_NUM("++errcnt", ++errcnt, "../padmgr.c", 282); osSyncPrintf(VT_FGCOL(YELLOW)); - osSyncPrintf("padmgr: %dコン: %s\n", var3 + 1, "コントローラパックの通信エラー"); + osSyncPrintf("padmgr: %dコン: %s\n", ctrlr + 1, "コントローラパックの通信エラー"); osSyncPrintf(VT_RST); } } } D_8016A4F0++; - PadMgr_UnlockReleaseControllerQueue(padmgr, ctrlrqueue); + PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrqueue); } #else -u32 D_8012D284 = 0; +u32 D_8012D284 = 0; // errcnt u32 D_8016A4F0; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C740C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s") #endif // func_800A2300 in 1.0 -void func_800C7818(PadMgr* padmgr) { +void PadMgr_RumbleStop(PadMgr* padmgr) { s32 i; OSMesgQueue* ctrlrqueue; - ctrlrqueue = PadMgr_LockGetControllerQueue(padmgr); + ctrlrqueue = PadMgr_LockSerialMesgQueue(padmgr); for (i = 0; i < 4; i++) { - if (osProbeVibrationPack(ctrlrqueue, &padmgr->unk_controller[i], i) == 0) { - if ((gFaultStruct.msgId == 0) && (padmgr->unk_45D != 0)) { + if (osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[i], i) == 0) { + if ((gFaultStruct.msgId == 0) && (padmgr->rumbleOnFrames != 0)) { osSyncPrintf(VT_FGCOL(YELLOW)); // EUC-JP: コン | 'Con'? , EUC-JP: 振動パック 停止 | Stop vibration pack osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止"); osSyncPrintf(VT_RST); } - osSetVibration(&padmgr->unk_controller[i], 0); + osSetRumble(&padmgr->unk_controller[i], 0); } } - PadMgr_UnlockReleaseControllerQueue(padmgr, ctrlrqueue); + PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrqueue); } -void func_800C7928(PadMgr* padmgr) { - padmgr->unk_45C = 3; +void PadMgr_RumbleReset(PadMgr* padmgr) { + padmgr->rumbleOffFrames = 3; } -void func_800C7934(PadMgr* padmgr, u32 a1, u32 a2) { - padmgr->unk_2B2[a1] = a2; - padmgr->unk_45D = 0xF0; +void PadMgr_RumbleSetSingle(PadMgr* padmgr, u32 ctrlr, u32 rumble) { + padmgr->rumbleEnable[ctrlr] = rumble; + padmgr->rumbleOnFrames = 0xF0; +} + +// 800A23CC in 1.0 +void PadMgr_RumbleSet(PadMgr* padmgr, u8* ctrlrRumbles) { + s32 i; + for (i = 0; i < 4; ++i) { + padmgr->rumbleEnable[i] = ctrlrRumbles[i]; + } + padmgr->rumbleOnFrames = 0xF0; +} + +#if 0 +void PadMgr_ProcessInputs(PadMgr* padmgr) { + /* + void *sp34; + s32 temp_s1; + s32 temp_v0_5; + u16 temp_a1; + u16 temp_v1_2; + u8 temp_v0; + void *temp_v0_2; + void *temp_v0_3; + void *temp_v0_4; + void *temp_v1; + void *phi_s0; + void *phi_s3; + s32 phi_s2; + s32 phi_s1; + */ + Input* input; + PadState* padnow1; //name from debug string + s32 i; + + PadMgr_LockPadData(padmgr); + input = padmgr->inputs; //s0 + padnow1 = padmgr->pads; //s3 + for(i=0; incontrollers; ++i, ++input, ++padnow1){ + input->prev.in = input->cur.in; + input->prev.status = input->cur.status; + temp_v0 = phi_s3->unk4; + switch(padnow1->errno){ + case 0: + input->cur.in = padnow1->input; + input->cur.status = padnow1->status; + if (padmgr->ctrlrIsConnected[i] == 0) { + padmgr->ctrlrIsConnected[i] = 1; + osSyncPrintf(&D_80145AF0); //"\x1b[33m" + osSyncPrintf(&D_80145AF8, phi_s2 + 1, &D_80145B0C); //"padmgr: %dCon: %s\n" : "Recognized" + osSyncPrintf(&D_80145B1C); //"\x1b[m" + } + break; + case 4: + input->cur.in = input->prev.in; + input->cur.status = input->prev.status; + LogUtils_LogThreadId(&D_80145B20, 0x17c); //"../padmgr.c" + osSyncPrintf(&D_80145B2C, padmgr->ctrlrIsConnected[i]); //"this->ctrlrIsConnected[i] = %d\n" + osSyncPrintf(&D_80145B48); //"\x1b[33m" + osSyncPrintf(&D_80145B50, temp_s1, &D_80145B64); //"padmgr: %dCon: %s\n" : "Overrun error occurred" + osSyncPrintf(&D_80145B80); //"\x1b[m" + break; + case 8: + input->cur.in.button = 0; + input->cur.in.x = 0; + input->cur.in.y = 0; + temp_v0_2 = arg0 + phi_s2; + input->cur.errno = padnow1->errno; + if (temp_v0_2->ctrlrIsConnected != 0){ + temp_v0_2->ctrlrIsConnected = 0; + temp_v0_2->pakType = 0; + temp_v0_2->rumbleCounter = 0xff; + osSyncPrintf(&D_80145B84); //"\x1b[33m" + osSyncPrintf(&D_80145B8C, phi_s2 + 1, &D_80145BA0); //"padmgr: %dCon: %s\n" : "Do not respond" + osSyncPrintf(&D_80145BB0); //"\x1b[m" + } + break; + default: + LogUtils_LogThreadId(&D_80145BB4, 0x18c); //"../padmgr.c" + osSyncPrintf(&D_80145BC0, padnow1->errno); //"padnow1->errno = %x\n" + Fault_AddHungupAndCrash(&D_80145BD8, 0x18d); //"../padmgr.c" + } + input->press.in.button = input->cur.in.button & (input->prev.in.button ^ input->cur.in.button); + input->rel.in.button = input->prev.in.button & (input->prev.in.button ^ input->cur.in.button); + func_800FCC6C(input); + input->press.in.x = (input->cur.in.x - input->prev.in.x) + input->press.in.x; + input->press.in.y = (input->cur.in.y - input->prev.in.y) + input->press.in.y; + } + PadMgr_UnlockPadData(arg0); +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s") +#endif + +void PadMgr_HandleRetraceMsg(PadMgr* padmgr) { + OSMesgQueue* queue; // s1 + u32 i; + u32 mask; + + queue = PadMgr_LockSerialMesgQueue(padmgr); + osContStartReadData(queue); + if (padmgr->retraceCallback) { + padmgr->retraceCallback(padmgr, padmgr->retraceCallbackValue); + } + osRecvMesg(queue, NULL, OS_MESG_BLOCK); + osContGetReadData(&padmgr->pads[0]); + if (padmgr->preNMIShutdown) { + bzero(&padmgr->pads[0], 0x18); + } + PadMgr_ProcessInputs(padmgr); + func_80103210(queue); + osRecvMesg(queue, NULL, OS_MESG_BLOCK); + func_8010328C(padmgr); + PadMgr_UnlockSerialMesgQueue(padmgr, queue); + + mask = 0; + for (i = 0; i - 4 != 0; ++i) { + if (padmgr->pad_status[i].errno == 0) { + if (padmgr->pad_status[i].type - 5 == 0) { + mask |= 1 << i; + } else { + LogUtils_LogThreadId("../padmgr.c", 0x1ca); + osSyncPrintf("this->pad_status[i].type = %x\n", padmgr->pad_status[i].type); + // EUC-JP: 知らない種類のコントローラが接続されています | An unknown type of controller is connected + osSyncPrintf("知らない種類のコントローラが接続されています\n"); + } + } + } + padmgr->validCtrlrsMask = mask; + + if (gFaultStruct.msgId) { + PadMgr_RumbleStop(padmgr); + } else if (padmgr->rumbleOffFrames > 0) { + --padmgr->rumbleOffFrames; + PadMgr_RumbleStop(padmgr); + } else if (padmgr->rumbleOnFrames == 0) { + PadMgr_RumbleStop(padmgr); + } else if (!padmgr->preNMIShutdown) { + PadMgr_RumbleControl(padmgr); + --padmgr->rumbleOnFrames; + } +} + +void PadMgr_HandlePreNMI(PadMgr* padmgr) { + osSyncPrintf("padmgr_HandlePreNMI()\n"); + padmgr->preNMIShutdown = 1; + PadMgr_RumbleReset(padmgr); } #ifdef NON_MATCHING -// minor ordering difference -// 800A23CC in 1.0 -void func_800C7948(PadMgr* padmgr, u8* a1) { - padmgr->unk_2B2[0] = a1[0]; - padmgr->unk_2B2[1] = a1[1]; - padmgr->unk_2B2[2] = a1[2]; - padmgr->unk_2B2[3] = a1[3]; +// Regalloc differences +void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode) { + u32 i; + Input* pmInputs; + Input* newin; - padmgr->unk_45D = 0xF0; // NON MATCHING - T0 and T9 are reordered for some reason + PadMgr_LockPadData(padmgr); + pmInputs = padmgr->inputs; + newin = inputs; + for (i = 0; i < 4; ++i) { + if (mode) { + *newin = *pmInputs; + pmInputs->press.in.button = 0; + pmInputs->press.in.x = 0; + pmInputs->press.in.y = 0; + pmInputs->rel.in.button = 0; + } else { + // Correct instructions, wrong regalloc + newin->prev = newin->cur; + newin->cur = pmInputs->cur; + newin->press.in.button = newin->cur.in.button & (newin->prev.in.button ^ newin->cur.in.button); + newin->rel.in.button = newin->prev.in.button & (newin->prev.in.button ^ newin->cur.in.button); + func_800FCC6C(newin); + newin->press.in.x = (newin->cur.in.x - newin->prev.in.x) + newin->press.in.x; + newin->press.in.y = (newin->cur.in.y - newin->prev.in.y) + newin->press.in.y; + } + ++pmInputs; + ++newin; + } + PadMgr_UnlockPadData(padmgr); } #else -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C7948.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C7974.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C7C14.s") - -void func_800C7DD0(PadMgr* padmgr) { - osSyncPrintf("padmgr_HandlePreNMI()\n"); - padmgr->unk_45E = 1; - func_800C7928(padmgr); -} - -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C7E08.s") -// void func_800C7E08(Input*, u32); - // 800A2918 in 1.0 -void PadMgr_Run(PadMgr* padmgr) { +void PadMgr_MainProc(PadMgr* padmgr) { s16* mesg; - s32 bVar2; + s32 exit; mesg = NULL; // EUC-JP: コントローラスレッド実行開始 | Start of controller thread execution osSyncPrintf("コントローラスレッド実行開始\n"); - bVar2 = 0; + exit = 0; - while (bVar2 == 0) { + while (!exit) { if ((D_8012D280 > 2) && (padmgr->queue3.validCount == 0)) { // EUC-JP: コントローラスレッドイベント待ち | Waiting for controller thread event osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime())); @@ -245,7 +398,7 @@ void PadMgr_Run(PadMgr* padmgr) { osSyncPrintf("padmgr_HandleRetraceMsg START %lld\n", OS_CYCLES_TO_USEC(osGetTime())); } - func_800C7C14(padmgr); + PadMgr_HandleRetraceMsg(padmgr); if (D_8012D280 > 2) { osSyncPrintf("padmgr_HandleRetraceMsg END %lld\n", OS_CYCLES_TO_USEC(osGetTime())); @@ -253,10 +406,10 @@ void PadMgr_Run(PadMgr* padmgr) { break; case OS_SC_PRE_NMI_MSG: - func_800C7DD0(padmgr); + PadMgr_HandlePreNMI(padmgr); break; case OS_SC_NMI_MSG: - bVar2 = 1; + exit = 1; break; } } @@ -267,7 +420,7 @@ void PadMgr_Run(PadMgr* padmgr) { } // func_800A2A14 in 1.0 -void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* ctrlrqueue, UNK_TYPE arg2, OSId id, OSPri priority, void* stack) { +void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* siIntMsgQ, UNK_TYPE arg2, OSId id, OSPri priority, void* stack) { // EUC-JP: パッドマネージャ作成 | Create pad manager osSyncPrintf("パッドマネージャ作成 padmgr_Create()\n"); bzero(padmgr, sizeof(PadMgr)); @@ -276,14 +429,14 @@ void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* ctrlrqueue, UNK_TYPE arg2, OSId id osCreateMesgQueue(&padmgr->queue3, padmgr->msgbuf3, 4); IrqMgr_AddClient(padmgr->unk_78, &padmgr->unk_70, &padmgr->queue3); osCreateMesgQueue(&padmgr->queue1, padmgr->msgbuf1, 1); - PadMgr_UnlockReleaseControllerQueue(padmgr, ctrlrqueue); + PadMgr_UnlockSerialMesgQueue(padmgr, siIntMsgQ); osCreateMesgQueue(&padmgr->queue2, padmgr->msgbuf2, 1); - PadMgr_Unlock2(padmgr); - func_800FCD40(ctrlrqueue, &padmgr->unk_2A8, padmgr); + PadMgr_UnlockPadData(padmgr); + func_800FCD40(siIntMsgQ, &padmgr->validCtrlrsMask, padmgr); - padmgr->unk_2A9 = 4; - func_80104D00(padmgr->unk_2A9); + padmgr->ncontrollers = 4; + func_80104D00(padmgr->ncontrollers); - osCreateThread(&padmgr->thread, id, PadMgr_Run, padmgr, stack, priority); + osCreateThread(&padmgr->thread, id, PadMgr_MainProc, padmgr, stack, priority); osStartThread(&padmgr->thread); } diff --git a/src/code/z_debug.c b/src/code/z_debug.c index cb21e0125a..fc663c3d25 100644 --- a/src/code/z_debug.c +++ b/src/code/z_debug.c @@ -114,11 +114,12 @@ void func_8006390C(Input* input) { s32 i; regGroup = (gGameInfo->regGroup * REG_PAGES + gGameInfo->regPage) * REG_PER_PAGE - REG_PER_PAGE; - dpad = input->raw.pad & (U_JPAD | L_JPAD | R_JPAD | D_JPAD); - if (!~(input->raw.pad | ~L_TRIG) || !~(input->raw.pad | ~R_TRIG) || !~(input->raw.pad | ~START_BUTTON)) { + dpad = input->cur.in.button & (U_JPAD | L_JPAD | R_JPAD | D_JPAD); + if (!~(input->cur.in.button | ~L_TRIG) || !~(input->cur.in.button | ~R_TRIG) || + !~(input->cur.in.button | ~START_BUTTON)) { input_combo = inputCombos; for (i = 0; i < REG_GROUPS; i++) { - if (~(~input_combo->push | input->raw.pad) || ~(~input_combo->held | input->padPressed)) { + if (~(~input_combo->push | input->cur.in.button) || ~(~input_combo->held | input->press.in.button)) { input_combo++; } else { break; @@ -154,16 +155,18 @@ void func_8006390C(Input* input) { gGameInfo->dpadLast = dpad; } - increment = (dpad & R_JPAD) - ? (!~(input->raw.pad | ~(A_BUTTON | B_BUTTON)) - ? 1000 - : !~(input->raw.pad | ~A_BUTTON) ? 100 : !~(input->raw.pad | ~B_BUTTON) ? 10 : 1) - : (dpad & L_JPAD) ? (!~(input->raw.pad | ~(A_BUTTON | B_BUTTON)) - ? -1000 - : !~(input->raw.pad | ~A_BUTTON) - ? -100 - : !~(input->raw.pad | ~B_BUTTON) ? -10 : -1) - : 0; + increment = + (dpad & R_JPAD) + ? (!~(input->cur.in.button | ~(A_BUTTON | B_BUTTON)) + ? 1000 + : !~(input->cur.in.button | ~A_BUTTON) ? 100 + : !~(input->cur.in.button | ~B_BUTTON) ? 10 : 1) + : (dpad & L_JPAD) ? (!~(input->cur.in.button | ~(A_BUTTON | B_BUTTON)) + ? -1000 + : !~(input->cur.in.button | ~A_BUTTON) + ? -100 + : !~(input->cur.in.button | ~B_BUTTON) ? -10 : -1) + : 0; gGameInfo->data[gGameInfo->regCur + regGroup] += increment; if (dpad & U_JPAD) { diff --git a/src/code/z_demo.c b/src/code/z_demo.c index be6505dcd8..32939bf774 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -99,14 +99,15 @@ void func_80064558(GlobalContext* globalCtx, CutsceneContext* csCtx) { void func_800645A0(GlobalContext* globalCtx, CutsceneContext* csCtx) { Input* pad1 = &globalCtx->state.input[0]; - if (!~(pad1->padPressed | ~L_JPAD) && (csCtx->state == CS_STATE_IDLE) && (gSaveContext.scene_setup_index >= 4)) { + if (!~(pad1->press.in.button | ~L_JPAD) && (csCtx->state == CS_STATE_IDLE) && + (gSaveContext.scene_setup_index >= 4)) { D_8015FCC8 = 0; gSaveContext.cutscene_index = 0xFFFD; gSaveContext.cutscene_trigger = 1; } - if (!~(pad1->padPressed | ~U_JPAD) && (csCtx->state == CS_STATE_IDLE) && (gSaveContext.scene_setup_index >= 4) && - (D_8011D394 == 0)) { + if (!~(pad1->press.in.button | ~U_JPAD) && (csCtx->state == CS_STATE_IDLE) && + (gSaveContext.scene_setup_index >= 4) && (D_8011D394 == 0)) { D_8015FCC8 = 1; gSaveContext.cutscene_index = 0xFFFD; gSaveContext.cutscene_trigger = 1; @@ -443,15 +444,16 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt if ((gSaveContext.game_mode != 0) && (gSaveContext.game_mode != 3) && (globalCtx->sceneNum != SCENE_SPOT00) && (csCtx->frames > 20) && - (!~(globalCtx->state.input[0].padPressed | ~A_BUTTON) || !~(globalCtx->state.input[0].padPressed | ~B_BUTTON) || - !~(globalCtx->state.input[0].padPressed | ~START_BUTTON)) && + (!~(globalCtx->state.input[0].press.in.button | ~A_BUTTON) || + !~(globalCtx->state.input[0].press.in.button | ~B_BUTTON) || + !~(globalCtx->state.input[0].press.in.button | ~START_BUTTON)) && (gSaveContext.file_num != 0xFEDC) && (globalCtx->sceneLoadFlag == 0)) { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); temp = 1; } if ((csCtx->frames == cmd->startFrame) || (temp != 0) || - ((csCtx->frames > 20) && (!~(globalCtx->state.input[0].padPressed | ~START_BUTTON)) && + ((csCtx->frames > 20) && (!~(globalCtx->state.input[0].press.in.button | ~START_BUTTON)) && (gSaveContext.file_num != 0xFEDC))) { csCtx->state = CS_STATE_UNSKIPPABLE_EXEC; func_800F68BC(0); @@ -1523,7 +1525,7 @@ void Cutscene_ProcessCommands(GlobalContext* globalCtx, CutsceneContext* csCtx, return; } - if (!~(globalCtx->state.input[0].padPressed | ~R_JPAD)) { + if (!~(globalCtx->state.input[0].press.in.button | ~R_JPAD)) { csCtx->state = CS_STATE_UNSKIPPABLE_INIT; return; } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 19e5915aa7..10e285b8b7 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3982,13 +3982,13 @@ void Interface_Update(GlobalContext* globalCtx) { u16 action; Input* input = &globalCtx->state.input[2]; - if (!~(input->padPressed | ~L_JPAD)) { + if (!~(input->press.in.button | ~L_JPAD)) { gSaveContext.language = 0; osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language); - } else if (!~(input->padPressed | ~U_JPAD)) { + } else if (!~(input->press.in.button | ~U_JPAD)) { gSaveContext.language = 1; osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language); - } else if (!~(input->padPressed | ~R_JPAD)) { + } else if (!~(input->press.in.button | ~R_JPAD)) { gSaveContext.language = 2; osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language); } diff --git a/src/code/z_sample.c b/src/code/z_sample.c index ee7bf3caa0..38add9d423 100644 --- a/src/code/z_sample.c +++ b/src/code/z_sample.c @@ -3,7 +3,7 @@ #include void Sample_Calc(SampleContext* this) { - if (!~(this->state.input[0].padPressed | ~START_BUTTON)) { + if (!~(this->state.input[0].press.in.button | ~START_BUTTON)) { SET_NEXT_GAMESTATE(&this->state, func_800BCA64, GlobalContext); this->state.running = false; } diff --git a/src/libultra_code/osContStartReadData.c b/src/libultra_code/osContStartReadData.c index 9bd0bfbd23..60e415028a 100644 --- a/src/libultra_code/osContStartReadData.c +++ b/src/libultra_code/osContStartReadData.c @@ -26,9 +26,9 @@ void osContGetReadData(OSContPad* pad) { slot = *slot_ptr; pad->errno = (slot.hdr.status_hi_bytes_rec_lo & 0xc0) >> 4; if (pad->errno == 0) { - pad->button = slot.button; - pad->stick_x = slot.rawStickX; - pad->stick_y = slot.rawStickY; + pad->button = slot.input.button; + pad->stick_x = slot.input.x; + pad->stick_y = slot.input.y; } }; } @@ -46,9 +46,9 @@ void __osPackReadData() { slot.hdr.bytes_send = 1; slot.hdr.status_hi_bytes_rec_lo = 4; slot.hdr.command = 1; - slot.button = 0xFFFF; - slot.rawStickX = 0xFF; - slot.rawStickY = 0xFF; + slot.input.button = 0xFFFF; + slot.input.x = 0xFF; + slot.input.y = 0xFF; for (i = 0; i < _osCont_numControllers; i++) { *slot_ptr++ = slot; } diff --git a/src/libultra_code/osMempakAddrCRC.c b/src/libultra_code/osMempakAddrCRC.c new file mode 100644 index 0000000000..4565ff4eed --- /dev/null +++ b/src/libultra_code/osMempakAddrCRC.c @@ -0,0 +1,68 @@ +#include +#include + +#include + +// Valid addr up to 0x7FF +// It's the address of a block of 0x20 bytes in the mempak +// So that means the whole mempak has a 16-bit address space +u8 osMempakAddrCRC(u16 addr) { + u32 addr32 = addr; + u32 ret = 0; + u32 bit; + s32 i; + + for (bit = 0x400; bit; bit /= 2) { + ret *= 2; + if (addr32 & bit) { + if (ret & 0x20) { + ret ^= 0x14; + } else { + ++ret; + } + } else { + if (ret & 0x20) { + ret ^= 0x15; + } + } + } + for (i = 0; i < 5; ++i) { + ret <<= 1; + if (ret & 0x20) { + ret ^= 0x15; + } + } + return ret & 0x1f; +} + +u8 osMempakDataCRC(u8* data) { + s32 ret; + u32 bit; + u32 byte; + + ret = 0; + for (byte = 0x20; byte; --byte, ++data) { + for (bit = 0x80; bit; bit /= 2) { + ret *= 2; + if ((*data & bit) != 0) { + if ((ret & 0x100) != 0) { + ret ^= 0x84; + } else { + ++ret; + } + } else { + if (ret & 0x100) { + ret ^= 0x85; + } + } + } + } + do { + ret *= 2; + if (ret & 0x100) { + ret ^= 0x85; + } + ++byte; + } while (byte < 8U); + return ret; +} diff --git a/src/libultra_code/osReadMempak.c b/src/libultra_code/osReadMempak.c new file mode 100644 index 0000000000..fd1b3b0e42 --- /dev/null +++ b/src/libultra_code/osReadMempak.c @@ -0,0 +1,57 @@ +#include +#include + +#include + +s32 osReadMempak(OSMesgQueue* ctrlrqueue, s32 ctrlridx, u16 addr, PIF_mempak_data_t* data) { + s32 ret; + s32 i; + u8* bufptr; + s32 read_try_count = 2; + + __osSiGetAccess(); + do { + if ((_osCont_lastPollType != 2) || (ctrlridx != D_80134D20)) { + bufptr = &pifMempakBuf.bytes[0]; + _osCont_lastPollType = 2; + D_80134D20 = ctrlridx; + // clang-format off + // NOLINTNEXTLINE + for (i = 0; i < ctrlridx; i++) *bufptr++ = 0; + // clang-format on + pifMempakBuf.status_control = 1; + ((PIF_header_t*)bufptr)->slot_type = 0xff; + ((PIF_header_t*)bufptr)->bytes_send = 3; + ((PIF_header_t*)bufptr)->status_hi_bytes_rec_lo = 0x21; + ((PIF_header_t*)bufptr)->command = 2; // read mempak; send byte 0 + // Received bytes are 6-26 inclusive + bufptr[0x26] = 0xff; // last byte of receive + bufptr[0x27] = 0xfe; // End of commands + } else { + bufptr = &pifMempakBuf.bytes[ctrlridx]; + } + bufptr[4] = addr >> 3; // send byte 1 + bufptr[5] = (s8)(osMempakAddrCRC(addr) | (addr << 5)); // send byte 2 + __osSiRawStartDma(1, &pifMempakBuf); + osRecvMesg(ctrlrqueue, 0, 1); + __osSiRawStartDma(0, &pifMempakBuf); + osRecvMesg(ctrlrqueue, 0, 1); + ret = (((PIF_header_t*)bufptr)->status_hi_bytes_rec_lo & 0xc0) >> 4; + if (!ret) { + if (bufptr[0x26] != osMempakDataCRC(bufptr + 6)) { + ret = func_80101910(ctrlrqueue, ctrlridx); + if (ret) + break; + ret = 4; // Retry + } else { + bcopy(bufptr + 6, data, 0x20); + } + } else { + ret = 1; // Error + } + if (ret != 4) + break; + } while (0 <= read_try_count--); + __osSiRelAccess(); + return ret; +} diff --git a/src/libultra_code/osVibrationPack.c b/src/libultra_code/osRumblePak.c similarity index 76% rename from src/libultra_code/osVibrationPack.c rename to src/libultra_code/osRumblePak.c index 033f04500e..d2b47f2c66 100644 --- a/src/libultra_code/osVibrationPack.c +++ b/src/libultra_code/osRumblePak.c @@ -6,7 +6,7 @@ pif_data_buffer_t osPifBuffers[4]; // func_800CF990 in 1.0 -s32 osSetVibration(unk_controller_t* arg0, u32 vibrate) { +s32 osSetRumble(unk_controller_t* arg0, u32 vibrate) { s32 i; s32 ret; u8* buf; @@ -22,7 +22,7 @@ s32 osSetVibration(unk_controller_t* arg0, u32 vibrate) { ((PIF_mempak_wr_t*)buf)->data[i + 2] = vibrate; } - _osCont_lastPollType = (u8)0xfe; // last controller poll type? + _osCont_lastPollType = 0xfe; // last controller poll type? __osSiRawStartDma(OS_WRITE, &osPifBuffers[arg0->ctrlridx]); osRecvMesg(arg0->ctrlrqueue, NULL, OS_MESG_BLOCK); __osSiRawStartDma(OS_READ, &osPifBuffers[arg0->ctrlridx]); @@ -51,8 +51,8 @@ void osSetUpMempakWrite(s32 ctrlridx, pif_data_buffer_t* buf) { mempakwr.hdr.bytes_send = 0x23; mempakwr.hdr.status_hi_bytes_rec_lo = 1; mempakwr.hdr.command = 3; // write mempak - mempakwr.data[0] = 0xC0; - mempakwr.data[1] = (u8)(func_80106170(0x600) | 0xC000); // yes, this is correct + mempakwr.data[0] = 0x600 >> 3; + mempakwr.data[1] = (u8)(osMempakAddrCRC(0x600) | (0x600 << 5)); if (ctrlridx != 0) { for (i = 0; i < ctrlridx; ++i) { *buf_ptr++ = 0; @@ -67,13 +67,13 @@ typedef struct { u8 unk[0x20]; } unk_sp24_t; -s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t* unk_controller, u32 ctrlridx) { +s32 osProbeRumblePak(OSMesgQueue* ctrlrqueue, unk_controller_t* unk_controller, u32 ctrlridx) { s32 ret; unk_sp24_t sp24; unk_controller->ctrlrqueue = ctrlrqueue; unk_controller->ctrlridx = ctrlridx; - unk_controller->bytes[0x65] = (u8)0xff; + unk_controller->bytes[0x65] = 0xff; unk_controller->unk0 = 0; ret = func_80104C80(unk_controller, 0xfe); @@ -83,37 +83,37 @@ s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t* unk_controll if (ret != 0) { return ret; } - ret = func_80105F40(ctrlrqueue, ctrlridx, 0x400, &sp24); + ret = osReadMempak(ctrlrqueue, ctrlridx, 0x400, &sp24); ret = ret; if (ret == 2) { - ret = 4; //"Controller pack communication error" + ret = 4; // "Controller pack communication error" } if (ret != 0) { return ret; } if (sp24.unk[0x1F] == 0xfe) { - return 0xb; // possibly controller pack? (Some other valid return value other than vibration pack) + return 0xb; // possibly controller pack? (Some other valid return value other than rumble pak) } ret = func_80104C80(unk_controller, 0x80); if (ret == 2) { - ret = 4; //"Controller pack communication error" + ret = 4; // "Controller pack communication error" } if (ret != 0) { return ret; } - ret = func_80105F40(ctrlrqueue, ctrlridx, 0x400, &sp24); + ret = osReadMempak(ctrlrqueue, ctrlridx, 0x400, &sp24); if (ret == 2) { - ret = 4; //"Controller pack communication error" + ret = 4; // "Controller pack communication error" } if (ret != 0) { return ret; } if (sp24.unk[0x1F] != 0x80) { - return 0xb; // possibly controller pack? (Some other valid return value other than vibration pack) + return 0xb; // possibly controller pack? (Some other valid return value other than rumble pak) } if ((unk_controller->unk0 & 8) == 0) { osSetUpMempakWrite(ctrlridx, &osPifBuffers[ctrlridx]); } unk_controller->unk0 = 8; - return 0; //"Recognized vibration pack" + return 0; // "Recognized rumble pak" } diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index 54f1a750a9..901f23c067 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -47,15 +47,8 @@ const ActorInit En_Ani_InitVars = { }; static ColliderCylinderInit cylinderInitData = { - 0x0A, 0x00, 0x11, 0x39, - 0x10, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00000000, - 0x00, 0x00, 0x00, 0x00, - 0xFFCFFFFF, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, - 0x001E, 0x0028, 0x0000, + 0x0A, 0x00, 0x11, 0x39, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00000000, 0x00, 0x00, + 0x00, 0x00, 0xFFCFFFFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x001E, 0x0028, 0x0000, }; static InitChainEntry initChain[] = { @@ -63,9 +56,7 @@ static InitChainEntry initChain[] = { ICHAIN_F32(unk_F4, 850, ICHAIN_STOP), }; -static Vec3f EnAniVec = { - 800.0f, 500.0f, 0.0f -}; +static Vec3f EnAniVec = { 800.0f, 500.0f, 0.0f }; UNK_PTR D_809B0F80[] = { 0x06000408,