Advertisement
Guest User

Draw Text To Screen [Star / Riidefi]

a guest
Aug 17th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Draw Text To Screen [Star / Riidefi]
  2.  
  3. This code will display the specified text on the television screen.
  4.  
  5. (NTSC-U)
  6. C200A3F0 00000007
  7. 9421FF80 BC410008
  8. 806DA358 80630044
  9. 80630000 3D808002
  10. 618C23E0 7D8903A6
  11. 4E800421 B8410008
  12. 38210080 80010014
  13. 60000000 00000000
  14. C2009640 0000000E
  15. 9421FF80 BC410008
  16. 38600000 388000DC
  17. 38A00001 4800002D
  18. 44726177 20546578
  19. 7420546F 20536372
  20. 65656E20 62792053
  21. 74617220 26205269
  22. 69646566 69000000
  23. 7CC802A6 3FE08002
  24. 63EC1DF0 7D8903A6
  25. 4E800421 63EC1DD0
  26. 7D8903A6 4E800421
  27. B8410008 38210080
  28. 81830000 00000000
  29.  
  30. (PAL)
  31. C200A430 00000007
  32. 9421FF80 BC410008
  33. 806DA360 80630044
  34. 80630000 3D808002
  35. 618C2480 7D8903A6
  36. 4E800421 B8410008
  37. 38210080 80010014
  38. 60000000 00000000
  39. C2009680 0000000E
  40. 9421FF80 BC410008
  41. 38600000 388000DC
  42. 38A00001 4800002D
  43. 44726177 20546578
  44. 7420546F 20536372
  45. 65656E20 62792053
  46. 74617220 26205269
  47. 69646566 69000000
  48. 7CC802A6 3FE08002
  49. 63EC1E90 7D8903A6
  50. 4E800421 63EC1E70
  51. 7D8903A6 4E800421
  52. B8410008 38210080
  53. 81830000 00000000
  54.  
  55. (NTSC-J)
  56. C200A38C 00000007
  57. 9421FF80 BC410008
  58. 806DA360 80630044
  59. 80630000 3D808002
  60. 618C23A0 7D8903A6
  61. 4E800421 B8410008
  62. 38210080 80010014
  63. 60000000 00000000
  64. C20095DC 0000000E
  65. 9421FF80 BC410008
  66. 38600000 388000DC
  67. 38A00001 4800002D
  68. 44726177 20546578
  69. 7420546F 20536372
  70. 65656E20 62792053
  71. 74617220 26205269
  72. 69646566 69000000
  73. 7CC802A6 3FE08002
  74. 63EC1DB0 7D8903A6
  75. 4E800421 63EC1D90
  76. 7D8903A6 4E800421
  77. B8410008 38210080
  78. 81830000 00000000
  79.  
  80. (NTSC-K)
  81. C200A538 00000007
  82. 9421FF80 BC410008
  83. 806DA380 80630044
  84. 80630000 3D808002
  85. 618C24E0 7D8903A6
  86. 4E800421 B8410008
  87. 38210080 80010014
  88. 60000000 00000000
  89. C2009788 0000000E
  90. 9421FF80 BC410008
  91. 38600000 388000DC
  92. 38A00001 4800002D
  93. 44726177 20546578
  94. 7420546F 20536372
  95. 65656E20 62792053
  96. 74617220 26205269
  97. 69646566 69000000
  98. 7CC802A6 3FE08002
  99. 63EC1EF0 7D8903A6
  100. 4E800421 63EC1ED0
  101. 7D8903A6 4E800421
  102. B8410008 38210080
  103. 81830000 00000000
  104.  
  105. Code:
  106. #============================================================#
  107. #                          Source                            #
  108. #------------------------------------------------------------#
  109. # bLoadStaticRel Function Return Address Ports:              #
  110. # RMCE - 0x8000A3F0                                          #
  111. # RMCP - 0x8000A430                                          #
  112. # RMCJ - 0x8000A38C                                          #
  113. # RMCK - 0x8000A538                                          #
  114. #============================================================#
  115.  
  116. .macro push_stack size, registers
  117.       stwu r1, \size(r1)
  118.       stmw \registers, 8(r1)
  119. .endm
  120.  
  121. .macro absolute_bl register, address
  122.       lis \register, \address@h
  123.       ori \register, \register, \address@l
  124.       mtctr \register
  125.       bctrl
  126. .endm
  127.  
  128. .macro pop_stack registers, size
  129.       lmw \registers, 8(r1)
  130.       addi r1, r1, \size
  131. .endm
  132.  
  133. .set region, ''
  134.  
  135. .if     (region == 'E' || region == 'e') # RMCE
  136.         .set nw4r_db_DirectPrint_SetupFB, 0x800223E0
  137. .elseif (region == 'P' || region == 'p') # RMCP
  138.         .set nw4r_db_DirectPrint_SetupFB, 0x80022480
  139. .elseif (region == 'J' || region == 'j') # RMCJ
  140.         .set nw4r_db_DirectPrint_SetupFB, 0x800223A0
  141. .elseif (region == 'K' || region == 'k') # RMCK
  142.         .set nw4r_db_DirectPrint_SetupFB, 0x800224E0
  143. .else # Invalid Region
  144.         .abort
  145. .endif
  146.  
  147. # Function Prologue...
  148. push_stack -128, r2
  149.  
  150. # Get the Render Mode (RKSystem->mpVideo()->pRenderMode)
  151. .if     (region == 'E' || region == 'e') # RMCE
  152.         lwz r3, -0x5CA8(r13)
  153. .elseif (region == 'P' || region == 'p') # RMCP
  154.         lwz r3, -0x5CA0(r13)
  155. .elseif (region == 'J' || region == 'j') # RMCJ
  156.         lwz r3, -0x5CA0(r13)
  157. .elseif (region == 'K' || region == 'k') # RMCK
  158.         lwz r3, -0x5C80(r13)
  159. .endif
  160.  
  161. lwz r3, 0x44(r3)
  162. lwz r3, 0(r3)
  163.  
  164. # Call nw4r::db::DirectPrint_SetupFB
  165. absolute_bl r12, nw4r_db_DirectPrint_SetupFB
  166.  
  167. # Function Epilogue...
  168. pop_stack r2, 128
  169.  
  170. # Original Instruction
  171. lwz r0, 20(r1)
  172.  
  173. #============================================================#
  174. #                          Source                            #
  175. #------------------------------------------------------------#
  176. # Draw Debug Bar Call Address Ports:                         #
  177. # RMCE - 0x80009640                                          #
  178. # RMCP - 0x80009680                                          #
  179. # RMCJ - 0x800095DC                                          #
  180. # RMCK - 0x80009788                                          #
  181. #============================================================#
  182.  
  183. .macro push_stack size, registers
  184.       stwu r1, \size(r1)
  185.       stmw \registers, 8(r1)
  186. .endm
  187.  
  188. .macro DirectPrint_absolute_bl register, address
  189.       ori \register, r31, \address@l
  190.       mtctr \register
  191.       bctrl
  192. .endm
  193.  
  194. .macro pop_stack registers, size
  195.       lmw \registers, 8(r1)
  196.       addi r1, r1, \size
  197. .endm
  198.  
  199. .set region, ''
  200.  
  201. .if     (region == 'E' || region == 'e') # RMCE
  202.         .set nw4r_db_DirectPrint_Printf, 0x80021DF0
  203.         .set nw4r_db_DirectPrint_StoreCache, 0x80021DD0
  204. .elseif (region == 'P' || region == 'p') # RMCP
  205.         .set nw4r_db_DirectPrint_Printf, 0x80021E90
  206.         .set nw4r_db_DirectPrint_StoreCache, 0x80021E70
  207. .elseif (region == 'J' || region == 'j') # RMCJ
  208.         .set nw4r_db_DirectPrint_Printf, 0x80021DB0
  209.         .set nw4r_db_DirectPrint_StoreCache, 0x80021D90
  210. .elseif (region == 'K' || region == 'k') # RMCK
  211.         .set nw4r_db_DirectPrint_Printf, 0x80021EF0
  212.         .set nw4r_db_DirectPrint_StoreCache, 0x80021ED0
  213. .else # Invalid Region
  214.         .abort
  215. .endif
  216.  
  217. # Function Prologue...
  218. push_stack -128, r2
  219.  
  220. li r3, 0   # X coordinate of text start
  221. li r4, 220 # Y coordinate of text start
  222. li r5, 1   # Wrap text
  223.  
  224. bl branch_link_write_printf_statement
  225.  
  226. .string "Draw Text To Screen by Star & Riidefi\0\0"
  227.  
  228. branch_link_write_printf_statement:
  229. mflr r6 # Store the pointer to the String into r6
  230.  
  231. lis r31, 0x8002
  232.  
  233. # Call nw4r::db::DirectPrint_Printf
  234. DirectPrint_absolute_bl r12, nw4r_db_DirectPrint_Printf
  235.  
  236. # Call nw4r::db::DirectPrint_StoreCache
  237. DirectPrint_absolute_bl r12, nw4r_db_DirectPrint_StoreCache
  238.  
  239. # Function Epilogue...
  240. pop_stack r2, 128
  241.  
  242. # Original Instruction
  243. lwz r12, 0(r3)
  244.  
  245. Notes:
  246. - The text will flicker since we only set up 1 of the 2 framebuffers to be output to via DirectPrint.
  247.  
  248. Code Creators: Star, Riidefi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement