Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- / (fcn) fcn.02759bd4 352
- | fcn.02759bd4 (int arg_30h);
- | ; arg int arg_30h @ r1+0x30
- | ; CALL XREF from 0x0275a014 (fcn.02759d34)
- | 0x02759bd4 7c0802a6 mflr r0
- | 0x02759bd8 9421ffd0 stwu r1, -0x30(r1)
- | 0x02759bdc 90010034 stw r0, 0x34(r1)
- | 0x02759be0 bee1000c stmw r23, 0xc(r1)
- | 0x02759be4 7c7d1b78 mr r29, r3 #r3 = ai stat location
- | 0x02759be8 7c9f2378 mr r31, r4 #r4 -> r31, r4 = index
- | 0x02759bec 7cde3378 mr r30, r6 #type (unique, common, maybe amiibo?)
- | 0x02759bf0 7c1f2800 cmpw r31, r5 #r4 = unk_index2 (0x3) ; r5 = unk_index3 (0x1d)
- | 0x02759bf4 7f5f2850 subf r26, r31, r5 #r26 = index3 - index2 = section size
- | 0x02759bf8 3b600000 li r27, 0 #i = 0; for loop?
- | ,=< 0x02759bfc 40800120 bge 0x2759d1c #if index2 >= index 3, return index2
- | | 0x02759c00 57f9103a slwi r25, r31, 2
- | ...--> 0x02759c04 2c1e0000 cmpwi r30, 0
- | ,=====< 0x02759c08 41820020 beq 0x2759c28 #if r30 == 1 then do below
- | |:::| 0x02759c0c 80dd1a48 lwz r6, 0x1a48(r29) #param_nfp file location? maybe common file?
- | |:::| 0x02759c10 7d86ca14 add r12, r6, r25 #r25 = offset (equal to index * 4)
- | |:::| 0x02759c14 800c01d8 lwz r0, 0x1d8(r12) #file offset
- | |:::| 0x02759c18 2c1b0000 cmpwi r27, 0
- | |:::| 0x02759c1c 7f060214 add r24, r6, r0 #location of offset
- | ,======< 0x02759c20 40810058 ble 0x2759c78 #if (i <= 0)
- | ,=======< 0x02759c24 4800001c b 0x2759c40 #else { }
- | ||`-----> 0x02759c28 80dd1a44 lwz r6, 0x1a44(r29) #param? location
- | || :::| 0x02759c2c 7d66ca14 add r11, r6, r25
- | || :::| 0x02759c30 800b01d8 lwz r0, 0x1d8(r11) #load file offset
- | || :::| 0x02759c34 2c1b0000 cmpwi r27, 0
- | || :::| 0x02759c38 7f060214 add r24, r6, r0
- | ||,=====< 0x02759c3c 4081003c ble 0x2759c78
- | |||:::| ; CODE XREF from 0x02759c24 (fcn.02759bd4) #NOTE: FILE POSITION LOADED
- | `-------> 0x02759c40 88180002 lbz r0, 2(r24) #if i > 0, runs here. Load byte 0x2 from word
- | ||:::| 0x02759c44 540c0739 rlwinm. r12, r0, 0, 0x1c, 0x1c #check the 0x08 bit (r12 not actually used here)
- | ,=======< 0x02759c48 4182000c beq 0x2759c54
- | |||:::| 0x02759c4c 377bffff addic. r27, r27, -1
- | ========< 0x02759c50 40810028 ble 0x2759c78 #meaning if [r27 -= 1] <= 0?
- | `-------> 0x02759c54 88180003 lbz r0, 3(r24)
- | ||:::| 0x02759c58 2c000000 cmpwi r0, 0
- | ,=======< 0x02759c5c 408200b0 bne 0x2759d0c #if argCount != 0, break?
- | |||:::| 0x02759c60 3b7b0001 addi r27, r27, 1
- | |||:::| 0x02759c64 375affff addic. r26, r26, -1
- | |||:::| 0x02759c68 3bff0001 addi r31, r31, 1
- | |||:::| 0x02759c6c 3b390004 addi r25, r25, 4
- | |||`====< 0x02759c70 4082ff94 bne 0x2759c04
- | |||,====< 0x02759c74 480000a8 b 0x2759d1c
- | -``-----> 0x02759c78 3ae00002 li r23, 2 #number of bytes to check conditions for
- | | |::| 0x02759c7c 3b800000 li r28, 0
- | | .-----> 0x02759c80 7c98e0ae lbzx r4, r24, r28 #(crash point) loads byte 1 or 2 from each offset
- | | :|::| 0x02759c84 7fa3eb78 mr r3, r29
- | | :|::| 0x02759c88 4bffec7d bl 0x2758904 #check condition of first byte
- | | :|::| 0x02759c8c 2c1c0000 cmpwi r28, 0
- | | :|::| 0x02759c90 88b80002 lbz r5, 2(r24)
- | |,======< 0x02759c94 40820010 bne 0x2759ca4 #r28 incremented every loop here ; for r28 == 0, do below, else jump
- | ||:|::| 0x02759c98 54a007ff clrlwi. r0, r5, 0x1f #if bit 0x1 is set
- | ========< 0x02759c9c 41820014 beq 0x2759cb0 #check that the condition == false
- | ========< 0x02759ca0 4800000c b 0x2759cac #else check that the condition == true
- | |`------> 0x02759ca4 54a807bd rlwinm. r8, r5, 0, 0x1e, 0x1e #if the bit 0x2 is set then
- | |,======< 0x02759ca8 41820008 beq 0x2759cb0 #check that the condition == false
- | ||:|::| ; CODE XREF from 0x02759ca0 (fcn.02759bd4)
- | --------> 0x02759cac 68630001 xori r3, r3, 1
- | -`------> 0x02759cb0 2c030000 cmpwi r3, 0
- | |,======< 0x02759cb4 41820010 beq 0x2759cc4 #branch if the condition was true/false (depends on bits in byte 0x2)
- | ||:|::| 0x02759cb8 54a9077b rlwinm. r9, r5, 0, 0x1d, 0x1d #if the condition was true, then if bit 0x4 is not set, break
- | ========< 0x02759cbc 41820010 beq 0x2759ccc
- | ========< 0x02759cc0 48000018 b 0x2759cd8 #break out of this smaller loop
- | |`------> 0x02759cc4 54a0077b rlwinm. r0, r5, 0, 0x1d, 0x1d #if the condition was false, then if bit 0x4 is set, break
- | |,======< 0x02759cc8 41820010 beq 0x2759cd8
- | --------> 0x02759ccc 36f7ffff addic. r23, r23, -1
- | ||:|::| 0x02759cd0 3b9c0001 addi r28, r28, 1
- | ||`=====< 0x02759cd4 4082ffac bne 0x2759c80 #when it's read bytes 0x0 and 0x1 both, don't go back in the loop
- | || |::| ; CODE XREF from 0x02759cc0 (fcn.02759bd4)
- | -`------> 0x02759cd8 89780003 lbz r11, 3(r24) #argCount
- | | |::| 0x02759cdc 2c0b0000 cmpwi r11, 0
- | | ,=====< 0x02759ce0 40820024 bne 0x2759d04
- | | ||::| 0x02759ce4 2c030000 cmpwi r3, 0 #when argCount == 0, check condition
- | |,======< 0x02759ce8 40820024 bne 0x2759d0c
- | ||||::| 0x02759cec 3b600001 li r27, 1 #if condition was true, set r27 to 1 (what is this?)
- | ||||::| 0x02759cf0 375affff addic. r26, r26, -1 #remining offsets to check --;
- | ||||::| 0x02759cf4 3bff0001 addi r31, r31, 1 #current index
- | ||||::| 0x02759cf8 3b390004 addi r25, r25, 4 #main index offset += 4, to load another address
- | ||||`===< 0x02759cfc 4082ff08 bne 0x2759c04
- | ||||,===< 0x02759d00 4800001c b 0x2759d1c
- | ||`-----> 0x02759d04 2c030000 cmpwi r3, 0
- | ||,=====< 0x02759d08 40820014 bne 0x2759d1c
- | ``------> 0x02759d0c 375affff addic. r26, r26, -1
- | |||:| 0x02759d10 3bff0001 addi r31, r31, 1
- | |||:| 0x02759d14 3b390004 addi r25, r25, 4
- | |||`==< 0x02759d18 4082feec bne 0x2759c04
- | ||| | ; CODE XREF from 0x02759c74 (fcn.02759bd4)
- | ||| | ; CODE XREF from 0x02759d00 (fcn.02759bd4)
- | ```-`-> 0x02759d1c 7fe3fb78 mr r3, r31
- | 0x02759d20 bae1000c lmw r23, 0xc(r1)
- | 0x02759d24 80010034 lwz r0, 0x34(r1)
- | 0x02759d28 7c0803a6 mtlr r0
- | 0x02759d2c 38210030 addi r1, r1, 0x30
- \ 0x02759d30 4e800020 blr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement