Advertisement
Guest User

Custom Exception Handler

a guest
Apr 14th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Custom Exception Handler
  2.  
  3. This code will display exception information on the television screen when an exception occurs. After the console is finished scrolling, you will be returned to the Wii System Menu.
  4.  
  5. (NTSC-U)
  6. C20235F4 00000011
  7. 9421FF80 BC410008
  8. 48000055 2A2A2A2A
  9. 2A2A2043 7573746F
  10. 6D204578 63657074
  11. 696F6E20 48616E64
  12. 6C657220 2A2A2A2A
  13. 2A0A2A2A 2A2A2A2A
  14. 2A2A2A20 62792053
  15. 74617220 26205269
  16. 69646566 69202A2A
  17. 2A2A2A2A 2A2A2A0A
  18. 00000000 7C6802A6
  19. 4CC63182 3D808002
  20. 618C3500 7D8803A6
  21. 4E800021 B8410008
  22. 38210080 28030011
  23. 60000000 00000000
  24. 040238A8 281E0005
  25. C20238BC 0000000D
  26. 9421FF80 BC410008
  27. 48000039 596F7520
  28. 77696C6C 206E6F77
  29. 20626520 72657475
  30. 726E6564 20746F20
  31. 74686520 57696920
  32. 53797374 656D204D
  33. 656E752E 00000000
  34. 7C6802A6 4CC63182
  35. 3D808002 618C3500
  36. 7D8803A6 4E800021
  37. B8410008 38210080
  38. 39610020 00000000
  39. C2226260 00000003
  40. 3D808000 618CB0E8
  41. 7D8803A6 4E800020
  42. 60000000 00000000
  43. 042A3084 00000000
  44. 022A3090 00000023
  45.  
  46. (PAL)
  47. C2023694 00000011
  48. 9421FF80 BC410008
  49. 48000055 2A2A2A2A
  50. 2A2A2043 7573746F
  51. 6D204578 63657074
  52. 696F6E20 48616E64
  53. 6C657220 2A2A2A2A
  54. 2A0A2A2A 2A2A2A2A
  55. 2A2A2A20 62792053
  56. 74617220 26205269
  57. 69646566 69202A2A
  58. 2A2A2A2A 2A2A2A0A
  59. 00000000 7C6802A6
  60. 4CC63182 3D808002
  61. 618C35A0 7D8803A6
  62. 4E800021 B8410008
  63. 38210080 28030011
  64. 60000000 00000000
  65. 04023948 281E0005
  66. C202395C 0000000D
  67. 9421FF80 BC410008
  68. 48000039 596F7520
  69. 77696C6C 206E6F77
  70. 20626520 72657475
  71. 726E6564 20746F20
  72. 74686520 57696920
  73. 53797374 656D204D
  74. 656E752E 00000000
  75. 7C6802A6 4CC63182
  76. 3D808002 618C35A0
  77. 7D8803A6 4E800021
  78. B8410008 38210080
  79. 39610020 00000000
  80. C22265E4 00000003
  81. 3D808000 618CB188
  82. 7D8803A6 4E800020
  83. 60000000 00000000
  84. 042A7404 00000000
  85. 022A7410 00000023
  86.  
  87. (NTSC-J)
  88. C20235B4 00000011
  89. 9421FF80 BC410008
  90. 48000055 2A2A2A2A
  91. 2A2A2043 7573746F
  92. 6D204578 63657074
  93. 696F6E20 48616E64
  94. 6C657220 2A2A2A2A
  95. 2A0A2A2A 2A2A2A2A
  96. 2A2A2A20 62792053
  97. 74617220 26205269
  98. 69646566 69202A2A
  99. 2A2A2A2A 2A2A2A0A
  100. 00000000 7C6802A6
  101. 4CC63182 3D808002
  102. 618C34C0 7D8803A6
  103. 4E800021 B8410008
  104. 38210080 28030011
  105. 60000000 00000000
  106. 04023868 281E0005
  107. C202387C 0000000D
  108. 9421FF80 BC410008
  109. 48000039 596F7520
  110. 77696C6C 206E6F77
  111. 20626520 72657475
  112. 726E6564 20746F20
  113. 74686520 57696920
  114. 53797374 656D204D
  115. 656E752E 00000000
  116. 7C6802A6 4CC63182
  117. 3D808002 618C34C0
  118. 7D8803A6 4E800021
  119. B8410008 38210080
  120. 39610020 00000000
  121. C2226504 00000003
  122. 3D808000 618CB0AC
  123. 7D8803A6 4E800020
  124. 60000000 00000000
  125. 042A6D84 00000000
  126. 022A6D90 00000023
  127.  
  128. (NTSC-K)
  129. C20236F4 00000011
  130. 9421FF80 BC410008
  131. 48000055 2A2A2A2A
  132. 2A2A2043 7573746F
  133. 6D204578 63657074
  134. 696F6E20 48616E64
  135. 6C657220 2A2A2A2A
  136. 2A0A2A2A 2A2A2A2A
  137. 2A2A2A20 62792053
  138. 74617220 26205269
  139. 69646566 69202A2A
  140. 2A2A2A2A 2A2A2A0A
  141. 00000000 7C6802A6
  142. 4CC63182 3D808002
  143. 618C3600 7D8803A6
  144. 4E800021 B8410008
  145. 38210080 28030011
  146. 60000000 00000000
  147. 040239A8 281E0005
  148. C20239BC 0000000D
  149. 9421FF80 BC410008
  150. 48000039 596F7520
  151. 77696C6C 206E6F77
  152. 20626520 72657475
  153. 726E6564 20746F20
  154. 74686520 57696920
  155. 53797374 656D204D
  156. 656E752E 00000000
  157. 7C6802A6 4CC63182
  158. 3D808002 618C3600
  159. 7D8803A6 4E800021
  160. B8410008 38210080
  161. 39610020 00000000
  162. C2226958 00000003
  163. 3D808000 618CB234
  164. 7D8803A6 4E800020
  165. 60000000 00000000
  166. 04295404 00000000
  167. 02295410 00000023
  168.  
  169. #============================================================#
  170. #                           Source                           #
  171. #------------------------------------------------------------#
  172. # nw4r::db::PrintContext_ Exception Type Address Ports:      #
  173. # RMCE - 0x800235F4                                          #
  174. # RMCP - 0x80023694                                          #
  175. # RMCJ - 0x800235B4                                          #
  176. # RMCK - 0x800236F4                                          #
  177. #============================================================#
  178.  
  179. .macro push_stack size, registers
  180.        stwu r1, \size(r1)
  181.        stmw \registers, 8(r1)
  182. .endm
  183.  
  184. .macro absolute_bl register, address
  185.        lis \register, \address@h
  186.        ori \register, \register, \address@l
  187.        mtlr \register
  188.        blrl
  189. .endm
  190.  
  191. .macro pop_stack registers, size
  192.        lmw \registers, 8(r1) # Pop r2-r31 off the stack
  193.        addi r1, r1, \size # Release the space
  194. .endm
  195.  
  196. .set region, ''
  197.  
  198. .if     (region == 'E' || region == 'e') # RMCE
  199.         .set nw4r_db_Exception_Printf_, 0x80023500
  200. .elseif (region == 'P' || region == 'p') # RMCP
  201.         .set nw4r_db_Exception_Printf_, 0x800235A0
  202. .elseif (region == 'J' || region == 'j') # RMCJ
  203.         .set nw4r_db_Exception_Printf_, 0x800234C0
  204. .elseif (region == 'K' || region == 'k') # RMCK
  205.         .set nw4r_db_Exception_Printf_, 0x80023600
  206. .else # Invalid Region
  207.         .abort
  208. .endif
  209.  
  210. # Function Prologue...
  211. push_stack -128, r2
  212.  
  213. bl branch_link_write_exception_printf_statement
  214.  
  215. .string "****** Custom Exception Handler *****\n********* by Star & Riidefi *********\n\0\0\0"
  216.  
  217. branch_link_write_exception_printf_statement:
  218. mflr r3 # Store the pointer to the String into r3
  219.  
  220. # Call nw4r::db::Exception_Printf_
  221. crclr 4*cr1+eq
  222. absolute_bl r12, nw4r_db_Exception_Printf_
  223.  
  224. # Function Epilogue...
  225. pop_stack r2, 128
  226.  
  227. # Original Instruction
  228. cmplwi r3, 0x11 # if (error < OS_ERROR_MAX)
  229.  
  230. #============================================================#
  231. #                  nw4r::db::ShowStackTrace_                 #
  232. #============================================================#
  233. # Display a backtrace of up to 5 levels of the stack.        #
  234. #============================================================#
  235.  
  236. (NTSC-U)
  237. 040238A8 281E0005
  238.  
  239. (PAL)
  240. 04023948 281E0005
  241.  
  242. (NTSC-J)
  243. 04023868 281E0005
  244.  
  245. (NTSC-K)
  246. 040239A8 281E0005
  247.  
  248. #============================================================#
  249. #                           Source                           #
  250. #------------------------------------------------------------#
  251. # nw4r::db::PrintContext_ Function Return Address Ports:     #
  252. # RMCE - 0x800238BC                                          #
  253. # RMCP - 0x8002395C                                          #
  254. # RMCJ - 0x8002387C                                          #
  255. # RMCK - 0x800239BC                                          #
  256. #============================================================#
  257.  
  258. .macro push_stack size, registers
  259.        stwu r1, \size(r1)
  260.        stmw \registers, 8(r1)
  261. .endm
  262.  
  263. .macro absolute_bl register, address
  264.        lis \register, \address@h
  265.        ori \register, \register, \address@l
  266.        mtlr \register
  267.        blrl
  268. .endm
  269.  
  270. .macro pop_stack registers, size
  271.        lmw \registers, 8(r1)
  272.        addi r1, r1, \size
  273. .endm
  274.  
  275. .set region, ''
  276.  
  277. .if     (region == 'E' || region == 'e') # RMCE
  278.         .set nw4r_db_Exception_Printf_, 0x80023500
  279. .elseif (region == 'P' || region == 'p') # RMCP
  280.         .set nw4r_db_Exception_Printf_, 0x800235A0
  281. .elseif (region == 'J' || region == 'j') # RMCJ
  282.         .set nw4r_db_Exception_Printf_, 0x800234C0
  283. .elseif (region == 'K' || region == 'k') # RMCK
  284.         .set nw4r_db_Exception_Printf_, 0x80023600
  285. .else # Invalid Region
  286.         .abort
  287. .endif
  288.  
  289. # Function Prologue...
  290. push_stack -128, r2
  291.  
  292. bl branch_link_write_exception_printf_statement
  293.  
  294. .string "You will now be returned to the Wii System Menu.\0\0\0"
  295.  
  296. branch_link_write_exception_printf_statement:
  297. mflr r3 # Store the pointer to the String into r3
  298.  
  299. # Call nw4r::db::Exception_Printf_
  300. crclr 4*cr1+eq
  301. absolute_bl r12, nw4r_db_Exception_Printf_
  302.  
  303. # Function Epilogue...
  304. pop_stack r2, 128
  305.  
  306. # Original Instruction
  307. addi r11, r1, 32
  308.  
  309. #============================================================#
  310. #                           Source                           #
  311. #------------------------------------------------------------#
  312. # offset = Console_GetBufferHeadLine(console) Address Ports: #
  313. # RMCE - 0x80226260                                          #
  314. # RMCP - 0x802265E4                                          #
  315. # RMCJ - 0x80226504                                          #
  316. # RMCK - 0x80226958                                          #
  317. #============================================================#
  318.  
  319. .macro absolute_b register, address
  320.        lis \register, \address@h
  321.        ori \register, \register, \address@l
  322.        mtlr \register
  323.        blr
  324. .endm
  325.  
  326. .set region, ''
  327.  
  328. .if     (region == 'E' || region == 'e') # RMCE
  329.         .set System_SystemManager_returnToMenu, 0x8000B0E8
  330. .elseif (region == 'P' || region == 'p') # RMCP
  331.         .set System_SystemManager_returnToMenu, 0x8000B188
  332. .elseif (region == 'J' || region == 'j') # RMCJ
  333.         .set System_SystemManager_returnToMenu, 0x8000B0AC
  334. .elseif (region == 'K' || region == 'k') # RMCK
  335.         .set System_SystemManager_returnToMenu, 0x8000B234
  336. .else # Invalid Region
  337.         .abort
  338. .endif
  339.  
  340. # Call System::SystemManager::returnToMenu
  341. absolute_b r12, System_SystemManager_returnToMenu
  342.  
  343. #============================================================#
  344. #                            Note                            #
  345. #------------------------------------------------------------#
  346. # Since we do not return from the function call, there is no #
  347. # need to preserve any registers.                            #
  348. #============================================================#
  349.  
  350. #============================================================#
  351. #                  nw4r::db::exception .bss                  #
  352. #============================================================#
  353.  
  354. #============================================================#
  355. #                   EGG::ExceptionCallBack                   #
  356. #============================================================#
  357. # Automatically display the exception console.               #
  358. #============================================================#
  359.  
  360. (NTSC-U)
  361. 042A3084 00000000
  362.  
  363. (PAL)
  364. 042A7404 00000000
  365.  
  366. (NTSC-J)
  367. 042A6D84 00000000
  368.  
  369. (NTSC-K)
  370. 04295404 00000000
  371.  
  372. #============================================================#
  373. #                  Display Information Flag                  #
  374. #============================================================#
  375. # enum                                                       #
  376. # {                                                          #
  377. #     EXCEPTION_INFO_MAIN     = 0x1,                         #
  378. #     EXCEPTION_INFO_GPR      = 0x2,                         #
  379. #     EXCEPTION_INFO_GPRMAP   = 0x4,                         #
  380. #     EXCEPTION_INFO_SRR0MAP  = 0x8,                         #
  381. #     EXCEPTION_INFO_FPR      = 0x10,                        #
  382. #     EXCEPTION_INFO_TRACE    = 0x20,                        #
  383. #                                                            #
  384. #     EXCEPTION_INFO_ALL      = 0x3F,                        #
  385. # };                                                         #
  386. #                                                            #
  387. # Set the information flag to display the Main Information,  #
  388. # General Purpose Registers, and a Stack Trace.              #
  389. #============================================================#
  390.  
  391. (NTSC-U)
  392. 022A3090 00000023
  393.  
  394. (PAL)
  395. 022A7410 00000023
  396.  
  397. (NTSC-J)
  398. 022A6D90 00000023
  399.  
  400. (NTSC-K)
  401. 02295410 00000023
  402.  
  403. Code Creators: Star, Riidefi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement