Advertisement
Dwack

MW2 TU7 CFGLoader

Jan 27th, 2012
730
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. # Loading raw .cfg files from HDD for MW2 TU7
  2. # XePatcher v1.1 script v.01
  3. # by Dwack
  4. # greetz Caboose + CraigChrist
  5.  
  6.  
  7.  
  8. # Basic Concept
  9. # r3 = .cfg name
  10. # Use CreateFile and ReadFile to get raw file data
  11. # pass that addr back to the original function
  12. # will need to use sprintf to add "GAME:\\" to filename
  13. # "GAME:\\%s"
  14. ## Script File
  15.  
  16. .set branchToHook, 0x82225E20 # updated
  17. .set hookStart, 0x823B70E8 # updated
  18. .set createFile, 0x82330990 #updated
  19. .set getFileSize, 0x82330B88 #updated
  20. .set readFile, 0x82330CF8 #updated
  21. .set closeHandle, 0x823307B0 #updated
  22. .set saveGPRLR27, 0x823A3674 # updated
  23. .set restGPRLR27, 0x823A36C4 # updated
  24. .set sprintf, 0x823B6D64 # updated
  25. #.set malloc, 0x825571E8 # ? does this even alloc
  26. .set stringGAME, 0x823B7620 # updated
  27. .set loc_82286544, 0x82225E54 # updated
  28. .set originalBranch, 0x8219C0C0 # updated
  29.  
  30. .globl _start
  31. _start:
  32.  
  33. # =======================================================
  34. # Patch String
  35. # =======================================================
  36. .long stringGAME
  37. .long(9f-0f)/4
  38. 0:
  39. .string "GAME:\\%s"
  40. .byte 0
  41. .align 3
  42. 9:
  43.  
  44. # =======================================================
  45. #
  46. #
  47. # =======================================================
  48. # Create branch to hook code
  49. # =======================================================
  50. .long branchToHook
  51. .long (9f - 0f)/4
  52. 0:
  53. bl (hookStart - branchToHook)
  54. cmpwi %r3, 0
  55. bne (loc_82286544 - ( branchToHook + 8))
  56. mr %r3, %r29
  57. bl ( originalBranch - (branchToHook + 16))
  58. 9:
  59.  
  60. # =======================================================
  61. #
  62. #
  63. # =======================================================
  64. # Hook code
  65. # =======================================================
  66. .long hookStart
  67. .long (9f - 0f)/4
  68.  
  69. 0:
  70.  
  71. # =======================================================
  72. # Setup : Save
  73. # =======================================================
  74. mfspr %r12, %LR
  75. bl (saveGPRLR27 - (hookStart + 4))
  76. stwu %r1, -0x190(%r1)
  77. mr %r27, %r3 # alloc'd mem
  78. # =======================================================
  79. # sprintf
  80. # =======================================================
  81. nop
  82. nop
  83. lis %r4, stringGAME@h # game:\\%s
  84. ori %r4, %r4, stringGAME@l
  85. mr %r5, %r29 # .cfg name
  86. addi %r3, %r1, 0x40
  87. bl ( sprintf - (hookStart + 40))
  88. # =======================================================
  89. # CreateFile
  90. # =======================================================
  91. lis %r4, -0x8000
  92. li %r5, 0
  93. li %r6, 0
  94. li %r7, 3
  95. li %r8, 0x80
  96. li %r9, 0
  97. addi %r3, %r1, 0x40
  98. bl (createFile - (hookStart + 72))
  99. mr %r30, %r3
  100. cmpwi cr6, %r3, -1
  101. beq cr6, fail_restore_return
  102. # =======================================================
  103. # GetFileSize
  104. # =======================================================
  105. li %r4, 0
  106. mr %r30, %r3
  107. bl (getFileSize - (hookStart + 96))
  108. # =======================================================
  109. # Malloc
  110. # not needed - using mem alloc'd by game
  111. # =======================================================
  112. nop #mr %r31, %r3
  113. nop #bl ( malloc - (hookStart + 104))
  114. # =======================================================
  115. # ReadFile
  116. # =======================================================
  117. nop #mr %r28, %r3
  118. mr %r4, %r27 # buffer
  119. li %r7, 0
  120. addi %r6, %r1, 0x30
  121. mr %r5, %r3 # size
  122. mr %r3, %r30 # handle
  123. bl ( readFile - (hookStart + 132))
  124. cmpwi cr6, %r3, -1
  125. beq cr6, fail_restore_return
  126. # =======================================================
  127. # CloseHandle
  128. # =======================================================
  129. mr %r3, %r30
  130. bl ( closeHandle - (hookStart + 148))
  131. # =======================================================
  132. # Pass : Restore GPR : Return
  133. # =======================================================
  134. nop
  135. mr %r5, %r27
  136. mr %r3, %r27
  137. addi %r1, %r1, 0x190
  138. b (restGPRLR27 - (hookStart + 168))
  139. # =======================================================
  140. # Fail : Restore GPR : Return
  141. # =======================================================
  142. fail_restore_return:
  143. li %r3, 0
  144. mr %r4, %r27
  145. lis %r5, 1
  146. ori %r5, %r5, 0x8000
  147. addi %r1, %r1, 0x190
  148. b (restGPRLR27 -(hookStart + 192))
  149. 9:
  150.  
  151. # =======================================================
  152. # End Patches
  153. # =======================================================
  154. .long 0xFFFFFFFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement