psy_commando

Disasm SSB file loading

Sep 14th, 2015
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.20 KB | None | 0 0
  1. //------------------------------
  2. // Function 022E5D50
  3. //------------------------------
  4. 022E5D50 E92D4030 push    r4,r5,r14
  5. 022E5D54 E24DD054 sub     r13,r13,54h
  6. 022E5D58 E1A05001 mov     r5,r1
  7. 022E5D5C E1A04000 mov     r4,r0
  8. 022E5D60 E59F118C ldr     r1,=2319908h
  9. 022E5D64 E1A02005 mov     r2,r5
  10. 022E5D68 E3A00002 mov     r0,2h
  11. 022E5D6C EBF49933 bl      200C240h
  12. 022E5D70 EBF488FC bl      2008168h
  13. 022E5D74 E28D000C add     r0,r13,0Ch
  14. 022E5D78 EBF48921 bl      2008204h
  15. 022E5D7C E28D000C add     r0,r13,0Ch
  16. 022E5D80 E1A01005 mov     r1,r5
  17. 022E5D84 EBF48921 bl      2008210h
  18. 022E5D88 E28D000C add     r0,r13,0Ch
  19. 022E5D8C E28D1000 add     r1,r13,0h
  20. 022E5D90 E3A0200C mov     r2,0Ch
  21. 022E5D94 EBF4892E bl      2008254h      //This loads the SSB file's header.
  22. //-- SSB Header is read here
  23. 022E5D98 E1DD30B4 ldrh    r3,[r13,4h]   //R3 = SSBStrContTableOffset
  24. 022E5D9C E1DD20B6 ldrh    r2,[r13,6h]   //R2 = SSBConstTblSize.
  25. 022E5DA0 E59F0150 ldr     r0,=2324F74h  //Static location
  26. 022E5DA4 E28D1000 add     r1,r13,0h     //R1 = PtrSSBHeaderBuff
  27. 022E5DA8 E0833002 add     r3,r3,r2      //R3 = SSBStrContTableOffset + SSBConstTblSize (String table offset?)
  28. 022E5DAC E1D020D1 ldrsb   r2,[r0,1h]    //R2 = MysteryHeaderOffsetInt16 (0) (The same position is written to on line 022E4A5C )
  29. 022E5DB0 E5940000 ldr     r0,[r4]       //R0 = SSBDestBufferPtr (Read from 0x2324C84. A pointer to where the script's content will be written, 0x2120380. (SSBDestBufferPtr))
  30. 022E5DB4 E3500000 cmp     r0,0h         //Check if SSBDestBufferPtr is null (result handled at line 022E5DCC)
  31. 022E5DB8 E2820004 add     r0,r2,4h      //R0 = MysteryHeaderOffsetInt16 + 4
  32. 022E5DBC E1A00080 mov     r0,r0,lsl 1h  //R0 = (MysteryHeaderOffsetInt16 + 4) * 2
  33. 022E5DC0 E19100B0 ldrh    r0,[r1,r0]    //R0 = SizeStringTable?
  34. 022E5DC4 E0830000 add     r0,r3,r0      //R0 = OffsetStringTable + SizeStringTable
  35. 022E5DC8 E1A00080 mov     r0,r0,lsl 1h  //R0 = (OffsetStringTable + SizeStringTable) * 2
  36. if( SSBDestBufferPtr != null )
  37.     022E5DCC 1A000003 bne     22E5DE0h  ///GOTO LBL1
  38. 022E5DD0 E3A01001 mov     r1,1h        
  39. 022E5DD4 E5840004 str     r0,[r4,4h]
  40. 022E5DD8 EBF46CE4 bl      2001170h      ///EXEC 02001170
  41. 022E5DDC E5840000 str     r0,[r4]
  42. ///LBL1
  43. 022E5DE0 E1DD20B4 ldrh    r2,[r13,4h]   //R2 = SSBStrContTableOffset
  44. 022E5DE4 E5941000 ldr     r1,[r4]       //R1 = SSBDestBufferPtr
  45. 022E5DE8 E28D000C add     r0,r13,0Ch    //R0 = PtrSSBHeaderBuff + 12 (Points past the header)
  46. 022E5DEC E1A02082 mov     r2,r2,lsl 1h  //R2 = SSBStrContTableOffset * 2
  47. 022E5DF0 EBF48917 bl      2008254h      ///EXEC 02008254 (R0 = (PtrSSBHeaderBuff + 12), R1 = SSBDestBufferPtr, R2 = (SSBStrContTableOffset *2), R3 = OffsetStringTable  )
  48. 022E5DF4 E1DD00B0 ldrh    r0,[r13]      //R0 = SSBNbConsts
  49. 022E5DF8 E3500000 cmp     r0,0h
  50. if( SSBNbConsts == 0 )
  51.     022E5DFC 0A000008 beq     22E5E24h  ///GOTO LBL2
  52. 022E5E00 E1DD10B4 ldrh    r1,[r13,4h]   //R1 = SSBStrContTableOffset
  53. 022E5E04 E1DD00B2 ldrh    r0,[r13,2h]   //R0 = SSBNbStrings
  54. 022E5E08 E1DD20B6 ldrh    r2,[r13,6h]   //R2 = SSBConstTblSize
  55. 022E5E0C E5943000 ldr     r3,[r4]       //R3 = SSBDestBufferPtr
  56. 022E5E10 E0811000 add     r1,r1,r0      //R1 = SSBStrContTableOffset + SSBNbStrings
  57. 022E5E14 E28D000C add     r0,r13,0Ch    //R0 = (PtrSSBHeaderBuff + 12)
  58. 022E5E18 E0831081 add     r1,r3,r1,lsl 1h //R1 =  SSBDestBufferPtr + ( (SSBStrContTableOffset + SSBNbStrings) * 2)
  59. 022E5E1C E1A02082 mov     r2,r2,lsl 1h  //R2 = SSBConstTblSize * 2
  60. 022E5E20 EBF4890B bl      2008254h      ///EXEC 02008254 (R0 = (PtrSSBHeaderBuff + 12), R1 = SSBDestBufferPtr + ( (SSBStrContTableOffset + SSBNbStrings) * 2), R2 = (SSBConstTblSize * 2), R3 = SSBDestBufferPtr  )
  61. ///LBL2
  62. 022E5E24 E1DD00B2 ldrh    r0,[r13,2h]   //R0 = SSBNbStrings
  63. 022E5E28 E3500000 cmp     r0,0h        
  64. if( SSBNbStrings == 0 )
  65.     022E5E2C 0A00002A beq     22E5EDCh  ///GOTO LBL3 022E5EDC
  66. 022E5E30 E1DD20B4 ldrh    r2,[r13,4h]   //R2 = SSBStrContTableOffset
  67. 022E5E34 E1DD10B6 ldrh    r1,[r13,6h]   //R1 = SSBConstTblSize
  68. 022E5E38 E59F00B8 ldr     r0,=2324F74h  //
  69. 022E5E3C E3A03000 mov     r3,0h         //R3 = 0
  70. 022E5E40 E0821001 add     r1,r2,r1      //R1 = SSBConstTblSize + SSBStrContTableOffset
  71. 022E5E44 E2812006 add     r2,r1,6h      //R2 = (SSBConstTblSize + SSBStrContTableOffset) + 6
  72. 022E5E48 E1D0C0D1 ldrsb   r12,[r0,1h]   //R12 = **** MysteryHeaderOffsetInt16 **** (0) (The same position is written to on line 022E4A5C )
  73. 022E5E4C E28D1000 add     r1,r13,0h     //R1 = PtrSSBHeaderBuff + 0
  74. 022E5E50 EA000003 b       22E5E64h      ///GOTO LBL4 022E5E64
  75. ///LBL5
  76. 022E5E54 E0810083 add     r0,r1,r3,lsl 1h
  77. 022E5E58 E1D000B8 ldrh    r0,[r0,8h]
  78. 022E5E5C E2833001 add     r3,r3,1h
  79. 022E5E60 E0822000 add     r2,r2,r0
  80. ///LBL4
  81. 022E5E64 E153000C cmp     r3,r12
  82. if( R3 < MysteryHeaderOffsetInt16 )
  83.     022E5E68 BAFFFFF9 blt     22E5E54h      ///GOTO LBL5 022E5E54
  84. 022E5E6C E1A01082 mov     r1,r2,lsl 1h  //R1 = ((SSBConstTblSize + SSBStrContTableOffset) + 6 ) * 2
  85. 022E5E70 E28D000C add     r0,r13,0Ch    //R0 = PtrSSBHeaderBuff + 12
  86. 022E5E74 E3A02000 mov     r2,0h         //R2 = 0
  87. 022E5E78 EBF4890A bl      20082A8h      ///EXEC 020082A8 (Wrap call to SSBFileConstStrTblROMOffset)
  88. 022E5E7C E1DD20B2 ldrh    r2,[r13,2h]   //R2 = SSBNbStrings
  89. 022E5E80 E1DD10B4 ldrh    r1,[r13,4h]   //R1 = SSBStrContTableOffset
  90. 022E5E84 E5943000 ldr     r3,[r4]       //R3 = SSBDestBufferPtr
  91. 022E5E88 E28D000C add     r0,r13,0Ch    //R0 = PtrSSBHeaderBuff + 12
  92. 022E5E8C E0831081 add     r1,r3,r1,lsl 1h //R1 = SSBDestBufferPtr + (SSBStrContTableOffset * 2)
  93. 022E5E90 E1A02082 mov     r2,r2,lsl 1h  //R2 = SSBNbStrings * 2
  94. 022E5E94 EBF488EE bl      2008254h      ///EXEC 02008254
  95. 022E5E98 E59F0058 ldr     r0,=2324F74h
  96. 022E5E9C E28D1000 add     r1,r13,0h     //R1 = PtrSSBHeaderBuff + 0
  97. 022E5EA0 E1D000D1 ldrsb   r0,[r0,1h]    //R0 = MysteryHeaderOffsetInt16 (0) (The same position is written to on line 022E4A5C )
  98. 022E5EA4 E1DDC0B2 ldrh    r12,[r13,2h]  //R12 = SSBNbStrings
  99. 022E5EA8 E1DD20B4 ldrh    r2,[r13,4h]   //R2 = SSBStrContTableOffset
  100. 022E5EAC E2800004 add     r0,r0,4h      //R0 = MysteryHeaderOffsetInt16 + 4
  101. 022E5EB0 E1A00080 mov     r0,r0,lsl 1h  //R0 = ( MysteryHeaderOffsetInt16 + 4 ) * 2
  102. 022E5EB4 E19100B0 ldrh    r0,[r1,r0]    //R0 =
  103. 022E5EB8 E08C1002 add     r1,r12,r2     //R1 = SSBNbStrings + SSBStrContTableOffset
  104. 022E5EBC E1DD30B6 ldrh    r3,[r13,6h]   //R3 = SSBConstTblSize
  105. 022E5EC0 E040200C sub     r2,r0,r12     //R2 = R0 - SSBNbStrings
  106. 022E5EC4 E5944000 ldr     r4,[r4]       //R4 = SSBDestBufferPtr
  107. 022E5EC8 E0831001 add     r1,r3,r1      //R1 = SSBConstTblSize + (SSBNbStrings + SSBStrContTableOffset)
  108. 022E5ECC E28D000C add     r0,r13,0Ch    //R0 = PtrSSBHeaderBuff + 12
  109. 022E5ED0 E0841081 add     r1,r4,r1,lsl 1h //R1 = SSBDestBufferPtr + ( ( SSBConstTblSize + (SSBNbStrings + SSBStrContTableOffset) ) * 2)
  110. 022E5ED4 E1A02082 mov     r2,r2,lsl 1h  //R2 = R2 * 2
  111. 022E5ED8 EBF488DD bl      2008254h      ///EXEC 02008254
  112. ///LBL3
  113. 022E5EDC E28D000C add     r0,r13,0Ch    //R0 = PtrSSBHeaderBuff + 12
  114. 022E5EE0 EBF488F7 bl      20082C4h      ///EXEC 020082C4
  115. 022E5EE4 EBF488AA bl      2008194h      ///EXEC 02008194
  116. 022E5EE8 E3A00001 mov     r0,1h         //R0 = 1
  117. 022E5EEC E28DD054 add     r13,r13,54h   //R13 = PtrSSBHeaderBuff + 0x54
  118. 022E5EF0 E8BD8030 pop     r4,r5,r15     //
Advertisement
Add Comment
Please, Sign In to add comment