mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-03 06:24:30 +00:00
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
This commit is contained in:
parent
16646aa34d
commit
5aef81071e
45 changed files with 640 additions and 789 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
@ -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
|
|
@ -7,5 +7,5 @@
|
|||
|
||||
.section .bss
|
||||
|
||||
glabel D_80175960
|
||||
glabel pifMempakBuf
|
||||
.space 0x40
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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(?);
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
#ifndef _PADMGR_H_
|
||||
#define _PADMGR_H_
|
||||
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
#include <ultra64/controller.h>
|
||||
|
||||
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
|
|
@ -2,11 +2,37 @@
|
|||
#define _ULTRA64_CONTROLLER_H_
|
||||
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
#include <PR/os_cont.h>
|
||||
#include <PR/os_message.h>
|
||||
|
||||
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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <ultra64.h>
|
||||
#include <ultra64/gbi.h>
|
||||
#include <ultra64/gs2dex.h>
|
||||
#include <ultra64/controller.h>
|
||||
#include <z64light.h>
|
||||
#include <z64actor.h>
|
||||
#include <z64object.h>
|
||||
|
@ -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;
|
||||
|
|
5
makefile
5
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) --
|
||||
|
|
6
spec
6
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"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
#include <vt.h>
|
||||
#include <padmgr.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
#include <padmgr.h>
|
||||
|
||||
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) {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include <global.h>
|
||||
#include <padmgr.h>
|
||||
#include <vt.h>
|
||||
|
||||
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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include <global.h>
|
||||
#include <vt.h>
|
||||
#include <padmgr.h>
|
||||
#include <sched.h>
|
||||
|
||||
u32 gScreenWidth = SCREEN_WIDTH;
|
||||
|
|
|
@ -4,11 +4,10 @@
|
|||
|
||||
#include <PR/os_cont.h>
|
||||
#include <ultra64/controller.h>
|
||||
#include <padmgr.h>
|
||||
|
||||
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; i<padmgr->ncontrollers; ++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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <PR/os_cont.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
68
src/libultra_code/osMempakAddrCRC.c
Normal file
68
src/libultra_code/osMempakAddrCRC.c
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
#include <ultra64/controller.h>
|
||||
|
||||
// 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;
|
||||
}
|
57
src/libultra_code/osReadMempak.c
Normal file
57
src/libultra_code/osReadMempak.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
#include <ultra64/controller.h>
|
||||
|
||||
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;
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue