Advertisement
BenArthur_7

fcn.02759bd4 (ai_param)

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