Advertisement
Zoinkity

running dasm 27.bin

Jun 12th, 2016
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 321.87 KB | None | 0 0
  1. 801C6E80 0x0 redirect to 801CE120: V0 = True if IPL valid else False
  2. 27BDFFE8 ADDIU SP,SP,FFE8
  3. AFBF0014 SW RA,0014 (SP)
  4. 0C073848 JAL 801CE120 # V0 = True if IPL valid else False
  5. 00000000 NOP
  6. 8FBF0014 LW RA,0014 (SP)
  7. 27BD0018 ADDIU SP,SP,0018
  8. 03E00008 JR RA
  9. 00000000 NOP
  10.  
  11. 801C6EA0 0x20 NERFed
  12. AFA40000 SW A0,0000 (SP)
  13. 03E00008 JR RA
  14. 00000000 NOP
  15.  
  16. 801C6EAC 0x2C if not 80121214[0], call 800C78FC()
  17. 27BDFFE8 ADDIU SP,SP,FFE8
  18. AFBF0014 SW RA,0014 (SP)
  19. 3C0E8012 LUI T6,8012
  20. 25CE1214 ADDIU T6,T6,1214
  21. 91CF0000 LBU T7,0000 (T6)
  22. 55E00008 BNEL T7,R0,+8 # if not 80121214[0], call 800C78FC()
  23. 8FBF0014 LW RA,0014 (SP)
  24. 0C031E3F JAL 800C78FC
  25. 00000000 NOP
  26. 3C198012 LUI T9,8012
  27. 27391214 ADDIU T9,T9,1214
  28. 24180001 ADDIU T8,R0,0001
  29. A3380000 SB T8,0000 (T9) # 80121214[0] = True
  30. 8FBF0014 LW RA,0014 (SP)
  31. 27BD0018 ADDIU SP,SP,0018
  32. 03E00008 JR RA
  33. 00000000 NOP
  34.  
  35. 801C6EF0 0x70 V0 = True if 80121214[0]
  36. 3C0E8012 LUI T6,8012
  37. 25CE1214 ADDIU T6,T6,1214
  38. 91C20000 LBU V0,0000 (T6)
  39. 0002102B SLTU V0,R0,V0
  40. 03E00008 JR RA
  41. 00000000 NOP
  42.  
  43. 801C6F08 0x88 NERFed; V0 = True
  44. 3C0E8012 LUI T6,8012
  45. 25CE1214 ADDIU T6,T6,1214
  46. 91CF0000 LBU T7,0000 (T6)
  47. 24020001 ADDIU V0,R0,0001
  48. 11E00003 BEQ T7,R0,+3 # if not 80121214[0], still returns True
  49. 00000000 NOP
  50. 03E00008 JR RA
  51. 24020001 ADDIU V0,R0,0001
  52. 03E00008 JR RA
  53. 00000000 NOP
  54.  
  55. 801C6F30 0xB0
  56. 27BDFFE8 ADDIU SP,SP,FFE8
  57. AFBF0014 SW RA,0014 (SP)
  58. 0C071BAB JAL 801C6EAC
  59. 00000000 NOP
  60. 0C071BC2 JAL 801C6F08 # NERFed; V0 = True
  61. 00000000 NOP
  62. 54400008 BNEL V0,R0,+8
  63. 8FBF0014 LW RA,0014 (SP)
  64. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  65. 2404411A ADDIU A0,R0,411A
  66. 0C071BC2 JAL 801C6F08 # NERFed; V0 = True
  67. 00000000 NOP
  68. 1040FFFB BEQ V0,R0,-5
  69. 00000000 NOP
  70. 8FBF0014 LW RA,0014 (SP)
  71. 27BD0018 ADDIU SP,SP,0018
  72. 03E00008 JR RA
  73. 00000000 NOP
  74.  
  75. 801C6F78 0xF8
  76. 27BDFFE8 ADDIU SP,SP,FFE8
  77. 3C028012 LUI V0,8012
  78. 24421214 ADDIU V0,V0,1214
  79. AFBF0014 SW RA,0014 (SP)
  80. 904E0000 LBU T6,0000 (V0)
  81. 51C00004 BEQL T6,R0,+4 # if not 80121214[0], return
  82. 8FBF0014 LW RA,0014 (SP)
  83. 0C031E17 JAL 800C785C # call 800C9DA0(2, 0, 0xFF, 5)
  84. A0400000 SB R0,0000 (V0) # 80121214[0] = 0
  85. 8FBF0014 LW RA,0014 (SP)
  86. 27BD0018 ADDIU SP,SP,0018
  87. 03E00008 JR RA
  88. 00000000 NOP
  89.  
  90. 801C6FAC 0x12C V0 = True if 80121213[0] else False; sets 80121213[0] = 0
  91. 3C038012 LUI V1,8012
  92. 24631213 ADDIU V1,V1,1213
  93. 906E0000 LBU T6,0000 (V1)
  94. 24020001 ADDIU V0,R0,0001
  95. 55C00004 BNEL T6,R0,+4 # if 80121213[0], 80121213[0] = 0
  96. A0600000 SB R0,0000 (V1)
  97. 03E00008 JR RA
  98. 00001025 OR V0,R0,R0
  99. A0600000 SB R0,0000 (V1)
  100. 03E00008 JR RA
  101. 00000000 NOP
  102.  
  103. 801C6FD8 0x158
  104. 27BDFFE8 ADDIU SP,SP,FFE8
  105. AFBF0014 SW RA,0014 (SP)
  106. 0C071BEB JAL 801C6FAC # V0 = True if 80121213[0] else False; sets 80121213[0] = 0
  107. 00000000 NOP
  108. 54400008 BNEL V0,R0,+8
  109. 8FBF0014 LW RA,0014 (SP)
  110. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  111. 2404411A ADDIU A0,R0,411A
  112. 0C071BEB JAL 801C6FAC # V0 = True if 80121213[0] else False; sets 80121213[0] = 0
  113. 00000000 NOP
  114. 1040FFFB BEQ V0,R0,-5
  115. 00000000 NOP
  116. 8FBF0014 LW RA,0014 (SP)
  117. 27BD0018 ADDIU SP,SP,0018
  118. 03E00008 JR RA
  119. 00000000 NOP
  120.  
  121. 801C7018 0x198 if 80121213[0]: 80121213[0] = 1 and print error message "HungUp ../z_n64dd.c:503"
  122. 27BDFFE8 ADDIU SP,SP,FFE8
  123. AFBF0014 SW RA,0014 (SP)
  124. 3C0E8012 LUI T6,8012
  125. 25CE1213 ADDIU T6,T6,1213
  126. 91CF0000 LBU T7,0000 (T6)
  127. 3C04801E LUI A0,801E
  128. 24848E00 ADDIU A0,A0,8E00 # A0 = 801D8E00: p->"../z_n64dd.c"
  129. 11E00003 BEQ T7,R0,+3 # if 80121213[0], call 800AF734("../z_n64dd.c", 0x1F7)
  130. 00000000 NOP
  131. 0C02BDCD JAL 800AF734 # print error message "HungUp %s:%d" % A0, A1
  132. 240501F7 ADDIU A1,R0,01F7 # line#
  133. @801C7044
  134. 3C198012 LUI T9,8012
  135. 27391213 ADDIU T9,T9,1213
  136. 24180001 ADDIU T8,R0,0001
  137. A3380000 SB T8,0000 (T9) # 80121213[0] = 1
  138. 8FBF0014 LW RA,0014 (SP)
  139. 27BD0018 ADDIU SP,SP,0018
  140. 03E00008 JR RA
  141. 00000000 NOP
  142.  
  143. 801C7064 0x1E4 V0 = result of test unit ready; call 801C8000(801D9D50) w/ option 5
  144. 27BDFFE8 ADDIU SP,SP,FFE8
  145. 3C04801E LUI A0,801E
  146. 24849D50 ADDIU A0,A0,9D50
  147. AFBF0014 SW RA,0014 (SP)
  148. 3C19801D LUI T9,801D
  149. 240E0005 ADDIU T6,R0,0005
  150. 27398000 ADDIU T9,T9,8000 # call 801C8000(801D9D50)
  151. 0320F809 JALR RA,T9
  152. A08E0000 SB T6,0000 (A0) # 801D9D50[0] = 5: option
  153. 8FBF0014 LW RA,0014 (SP)
  154. 27BD0018 ADDIU SP,SP,0018
  155. 03E00008 JR RA
  156. 00000000 NOP
  157.  
  158. 27BDFFE0 ADDIU SP,SP,FFE0
  159. AFBF0014 SW RA,0014 (SP)
  160. 3C04801E LUI A0,801E
  161. 3C19801D LUI T9,801D
  162. 24849D50 ADDIU A0,A0,9D50
  163. 240E000A ADDIU T6,R0,000A
  164. 27398000 ADDIU T9,T9,8000
  165. 0320F809 JALR RA,T9
  166. A08E0000 SB T6,0000 (A0)
  167. 04410004 BGEZ V0,+4
  168. 00401825 OR V1,V0,R0
  169. 0C02B398 JAL 800ACE60 # run timer for one full clock
  170. AFA2001C SW V0,001C (SP)
  171. 8FA3001C LW V1,001C (SP)
  172. 00601025 OR V0,V1,R0
  173. 8FBF0014 LW RA,0014 (SP)
  174. 27BD0020 ADDIU SP,SP,0020
  175. 03E00008 JR RA
  176. 00000000 NOP
  177.  
  178. 801C70E4 0x264 True if 801D9DC8 == 1
  179. 3C02801E LUI V0,801E
  180. 8C429DC8 LW V0,9DC8 (V0)
  181. 38420001 XORI V0,V0,0001
  182. 2C420001 SLTIU V0,V0,0001
  183. 03E00008 JR RA
  184. 00000000 NOP
  185.  
  186. 801C70FC 0x27C redirect to 801C70E4: True if 801D9DC8 == 1
  187. 27BDFFE8 ADDIU SP,SP,FFE8
  188. AFBF0014 SW RA,0014 (SP)
  189. 0C071C39 JAL 801C70E4 # True if 801D9DC8 == 1
  190. 00000000 NOP
  191. 8FBF0014 LW RA,0014 (SP)
  192. 27BD0018 ADDIU SP,SP,0018
  193. 03E00008 JR RA
  194. 00000000 NOP
  195.  
  196. 801C711C 0x29C Thread: ddmsg
  197. accepts: A0=target {801D9B90}
  198. 27BDFFA0 ADDIU SP,SP,FFA0
  199. AFB1001C SW S1,001C (SP)
  200. 00808825 OR S1,A0,R0
  201. AFBF003C SW RA,003C (SP)
  202. AFBE0038 SW S8,0038 (SP)
  203. AFB70034 SW S7,0034 (SP)
  204. AFB60030 SW S6,0030 (SP)
  205. AFB5002C SW S5,002C (SP)
  206. AFB40028 SW S4,0028 (SP)
  207. AFB30024 SW S3,0024 (SP)
  208. AFB20020 SW S2,0020 (SP)
  209. AFB00018 SW S0,0018 (SP)
  210. 3C0E8012 LUI T6,8012
  211. AFA00058 SW R0,0058 (SP)
  212. 25CED968 ADDIU T6,T6,D968
  213. 26320078 ADDIU S2,S1,0078
  214. AE2E0098 SW T6,0098 (S1) # S1+98 = 8011D968
  215. 02402025 OR A0,S2,R0 # queue = S1+78
  216. 02202825 OR A1,S1,R0 # msg = S1+0
  217. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  218. 2406001E ADDIU A2,R0,001E # msgs = 30
  219. 8E240098 LW A0,0098 (S1) # A0 = 8011D968
  220. 26250090 ADDIU A1,S1,0090 # A1 = S1+90
  221. AFA50044 SW A1,0044 (SP)
  222. 0C02B3A4 JAL 800ACE90
  223. 02403025 OR A2,S2,R0 # queue = S1+78
  224. 3C17801E LUI S7,801E
  225. 00008025 OR S0,R0,R0
  226. 26F79DB8 ADDIU S7,S7,9DB8
  227. 241E0001 ADDIU S8,R0,0001
  228. 24160004 ADDIU S6,R0,0004
  229. 24150003 ADDIU S5,R0,0003
  230. 24140001 ADDIU S4,R0,0001
  231. 27B30058 ADDIU S3,SP,0058
  232. @801C71A4
  233. 02402025 OR A0,S2,R0 # queue = S1+78
  234. 02602825 OR A1,S3,R0
  235. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  236. 02803025 OR A2,S4,R0 # wait
  237. 8FAF0058 LW T7,0058 (SP) # msg = @SP+58
  238. 85E30000 LH V1,0000 (T7)
  239. 10740007 BEQ V1,S4,+7
  240. 00000000 NOP
  241. 50750017 BEQL V1,S5,+23
  242. 02808025 OR S0,S4,R0
  243. 10760010 BEQ V1,S6,+16
  244. 00000000 NOP
  245. 10000013 BEQ R0,R0,+19
  246. 00000000 NOP
  247. @801C71DC: == 1
  248. 0C000D30 JAL 800034C0
  249. 00000000 NOP
  250. 3C18801E LUI T8,801E
  251. 8F18BFC8 LW T8,BFC8 (T8)
  252. 3C01801E LUI AT,801E
  253. 13020003 BEQ T8,V0,+3
  254. 00000000 NOP
  255. AC22BFC8 SW V0,BFC8 (AT)
  256. A2FE0000 SB S8,0000 (S7) # 801D9DB8 = 1
  257. @801C7200
  258. 0C0722AA JAL 801C8AA8
  259. 00000000 NOP
  260. 10000006 BEQ R0,R0,+6
  261. 00000000 NOP
  262. @801C7210
  263. 0C072AC1 JAL 801CAB04
  264. 00000000 NOP
  265. 10000002 BEQ R0,R0,+2
  266. 00000000 NOP
  267. @801C7220
  268. 02808025 OR S0,S4,R0 # break on fatal error
  269. 5200FFE0 BEQL S0,R0,-32
  270. 02402025 OR A0,S2,R0
  271. @801C722C
  272. 8E240098 LW A0,0098 (S1) # 8011D968
  273. 0C02B3C7 JAL 800ACF1C
  274. 8FA50044 LW A1,0044 (SP) # @S1+90
  275. 8FBF003C LW RA,003C (SP)
  276. 8FB00018 LW S0,0018 (SP)
  277. 8FB1001C LW S1,001C (SP)
  278. 8FB20020 LW S2,0020 (SP)
  279. 8FB30024 LW S3,0024 (SP)
  280. 8FB40028 LW S4,0028 (SP)
  281. 8FB5002C LW S5,002C (SP)
  282. 8FB60030 LW S6,0030 (SP)
  283. 8FB70034 LW S7,0034 (SP)
  284. 8FBE0038 LW S8,0038 (SP)
  285. 03E00008 JR RA
  286. 27BD0060 ADDIU SP,SP,0060
  287.  
  288. 27BDFFD8 ADDIU SP,SP,FFD8
  289. AFBF0014 SW RA,0014 (SP)
  290. 0C071BBC JAL 801C6EF0 # V0 = True if 80121214[0]
  291. 00000000 NOP
  292. 14400003 BNE V0,R0,+3
  293. AFA20020 SW V0,0020 (SP)
  294. 0C071BCC JAL 801C6F30
  295. 00000000 NOP
  296. 3C0F801E LUI T7,801E
  297. 25EF9DB8 ADDIU T7,T7,9DB8
  298. 240E0001 ADDIU T6,R0,0001
  299. 3C08801E LUI T0,801E
  300. A1EE0000 SB T6,0000 (T7)
  301. 25089DC0 ADDIU T0,T0,9DC0
  302. 24180000 ADDIU T8,R0,0000
  303. AD180000 SW T8,0000 (T0)
  304. 24190000 ADDIU T9,R0,0000
  305. 0C071C19 JAL 801C7064 # V0 = result of test unit ready; call 801C8000(801D9D50) w/ option 5
  306. AD190004 SW T9,0004 (T0)
  307. 24010001 ADDIU AT,R0,0001
  308. 14410005 BNE V0,AT,+5
  309. 00000000 NOP
  310. 0C071C26 JAL 801C7098
  311. 00000000 NOP
  312. 10000007 BEQ R0,R0,+7
  313. 00000000 NOP
  314. 3C02801E LUI V0,801E
  315. 24429DC8 ADDIU V0,V0,9DC8
  316. 8C490000 LW T1,0000 (V0)
  317. 11200002 BEQ T1,R0,+2
  318. 00000000 NOP
  319. AC400000 SW R0,0000 (V0)
  320. 3C0A801E LUI T2,801E
  321. 254A9DC0 ADDIU T2,T2,9DC0
  322. 8D4C0000 LW T4,0000 (T2)
  323. 8D4D0004 LW T5,0004 (T2)
  324. 15800003 BNE T4,R0,+3
  325. 00000000 NOP
  326. 51A00045 BEQL T5,R0,+69
  327. 8FB80020 LW T8,0020 (SP)
  328. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  329. 00000000 NOP
  330. 3C0B801E LUI T3,801E
  331. 256B9DC0 ADDIU T3,T3,9DC0
  332. 8D6E0000 LW T6,0000 (T3)
  333. 8D6F0004 LW T7,0004 (T3)
  334. 24060000 ADDIU A2,R0,0000
  335. 004E2023 SUBU A0,V0,T6
  336. 006F082B SLTU AT,V1,T7
  337. 00812023 SUBU A0,A0,AT
  338. 24070040 ADDIU A3,R0,0040
  339. 0C0008B6 JAL 800022D8 # V0, V1 = DMULTU (A0, A1) (A2, A3)
  340. 006F2823 SUBU A1,V1,T7
  341. 00402025 OR A0,V0,R0
  342. 00602825 OR A1,V1,R0
  343. 24060000 ADDIU A2,R0,0000
  344. 0C000876 JAL 800021D8 # V0, V1 = quotient f/ DDIVU (A0, A1) (A2, A3)
  345. 24070BB8 ADDIU A3,R0,0BB8
  346. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  347. AFA3001C SW V1,001C (SP)
  348. 3C19801E LUI T9,801E
  349. 27399DC0 ADDIU T9,T9,9DC0
  350. 8F200000 LW R0,0000 (T9)
  351. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  352. 8F210004 LW AT,0004 (T9)
  353. 3C08801E LUI T0,801E
  354. 25089DC0 ADDIU T0,T0,9DC0
  355. 8D0A0000 LW T2,0000 (T0)
  356. 8D0B0004 LW T3,0004 (T0)
  357. 24060000 ADDIU A2,R0,0000
  358. 004A2023 SUBU A0,V0,T2
  359. 006B082B SLTU AT,V1,T3
  360. 00812023 SUBU A0,A0,AT
  361. 24070040 ADDIU A3,R0,0040
  362. 0C0008B6 JAL 800022D8 # V0, V1 = DMULTU (A0, A1) (A2, A3)
  363. 006B2823 SUBU A1,V1,T3
  364. 00402025 OR A0,V0,R0
  365. 00602825 OR A1,V1,R0
  366. 24060000 ADDIU A2,R0,0000
  367. 0C000876 JAL 800021D8 # V0, V1 = quotient f/ DDIVU (A0, A1) (A2, A3)
  368. 24070BB8 ADDIU A3,R0,0BB8
  369. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  370. 00000000 NOP
  371. 3C09801E LUI T1,801E
  372. 25299DC0 ADDIU T1,T1,9DC0
  373. 8D2C0000 LW T4,0000 (T1)
  374. 8D2D0004 LW T5,0004 (T1)
  375. 24060000 ADDIU A2,R0,0000
  376. 004C2023 SUBU A0,V0,T4
  377. 006D082B SLTU AT,V1,T5
  378. 00812023 SUBU A0,A0,AT
  379. 24070040 ADDIU A3,R0,0040
  380. 0C0008B6 JAL 800022D8 # V0, V1 = DMULTU (A0, A1) (A2, A3)
  381. 006D2823 SUBU A1,V1,T5
  382. 00402025 OR A0,V0,R0
  383. 00602825 OR A1,V1,R0
  384. 24060000 ADDIU A2,R0,0000
  385. 0C000876 JAL 800021D8 # V0, V1 = quotient f/ DDIVU (A0, A1) (A2, A3)
  386. 24070BB8 ADDIU A3,R0,0BB8
  387. 8FAE001C LW T6,001C (SP)
  388. 3C0F000F LUI T7,000F
  389. 35EF4240 ORI T7,T7,4240
  390. 01EE2823 SUBU A1,T7,T6
  391. 58A00004 BLTZL A1,+4
  392. 8FB80020 LW T8,0020 (SP)
  393. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  394. 00A02025 OR A0,A1,R0
  395. 8FB80020 LW T8,0020 (SP)
  396. 57000004 BNEL T8,R0,+4
  397. 8FBF0014 LW RA,0014 (SP)
  398. 0C071BDE JAL 801C6F78
  399. 00000000 NOP
  400. 8FBF0014 LW RA,0014 (SP)
  401. 27BD0028 ADDIU SP,SP,0028
  402. 03E00008 JR RA
  403. 00000000 NOP
  404.  
  405. 801C7438 0x5B8 fill 0x25800 bytes of framebuffer A0 with black
  406. accepts: A0=p->framebuffer
  407. 3C010002 LUI AT,0002
  408. 34215800 ORI AT,AT,5800
  409. 00811821 ADDU V1,A0,AT
  410. 0083082B SLTU AT,A0,V1
  411. 10200006 BEQ AT,R0,+6
  412. 00801025 OR V0,A0,R0
  413. 24040001 ADDIU A0,R0,0001
  414. @801C7450
  415. 24420002 ADDIU V0,V0,0002
  416. 0043082B SLTU AT,V0,V1
  417. 1420FFFD BNE AT,R0,-3
  418. A444FFFE SH A0,FFFE (V0)
  419. 03E00008 JR RA
  420. 00000000 NOP
  421.  
  422. 801C746C 0x5EC draw error# image A0, error text image A1, and disk insertion/removal image A2 to screen
  423. accepts: A0=p->error# image, A1=p->error text image, A2=p->disk insert/removal image
  424. 27BDFFD0 ADDIU SP,SP,FFD0
  425. AFBF0024 SW RA,0024 (SP)
  426. AFA40030 SW A0,0030 (SP)
  427. AFA50034 SW A1,0034 (SP)
  428. AFA60038 SW A2,0038 (SP)
  429. 8FAE0030 LW T6,0030 (SP)
  430. 8FAF0034 LW T7,0034 (SP)
  431. 15C00005 BNE T6,R0,+5
  432. 00000000 NOP
  433. 15E00003 BNE T7,R0,+3
  434. 8FB80038 LW T8,0038 (SP)
  435. 53000045 BEQL T8,R0,+69
  436. 8FBF0024 LW RA,0024 (SP)
  437. 0C000D30 JAL 800034C0
  438. 00000000 NOP
  439. 3C012000 LUI AT,2000
  440. 00412021 ADDU A0,V0,AT
  441. 3C0100FF LUI AT,00FF
  442. 3421FFFF ORI AT,AT,FFFF
  443. 0081C824 AND T9,A0,AT
  444. 1320003B BEQ T9,R0,+59
  445. AFA4002C SW A0,002C (SP)
  446. 3C02801E LUI V0,801E
  447. 24429DB8 ADDIU V0,V0,9DB8
  448. 90480000 LBU T0,0000 (V0)
  449. 5100000B BEQL T0,R0,+11
  450. 8FA40030 LW A0,0030 (SP)
  451. A0400000 SB R0,0000 (V0)
  452. 0C071D0E JAL 801C7438 # fill 0x25800 bytes of framebuffer A0 with black
  453. 8FA4002C LW A0,002C (SP)
  454. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  455. 00000000 NOP
  456. 3C09801E LUI T1,801E
  457. 25299DC0 ADDIU T1,T1,9DC0
  458. AD220000 SW V0,0000 (T1)
  459. AD230004 SW V1,0004 (T1)
  460. 8FA40030 LW A0,0030 (SP)
  461. 24050060 ADDIU A1,R0,0060 # org bytes per row = 96
  462. 24060020 ADDIU A2,R0,0020 # org height = 32
  463. 1080000A BEQ A0,R0,+10
  464. 240700C0 ADDIU A3,R0,00C0 # width = 192
  465. 8FAC002C LW T4,002C (SP)
  466. 240A0010 ADDIU T2,R0,0010
  467. 240B000B ADDIU T3,R0,000B
  468. 240D0140 ADDIU T5,R0,0140
  469. AFAD001C SW T5,001C (SP) # target width = 320
  470. AFAB0014 SW T3,0014 (SP) # 11
  471. AFAA0010 SW T2,0010 (SP) # height = 16
  472. 0C07287C JAL 801CA1F0 # directly draw SP+10 rows of ci4 image A0, (A3, A2) and A1 bytes wide, from offset SP+14 to buffer SP+18 with width SP+1C
  473. AFAC0018 SW T4,0018 (SP) # target
  474. 8FA40034 LW A0,0034 (SP)
  475. 00002825 OR A1,R0,R0
  476. 24060050 ADDIU A2,R0,0050
  477. 1080000A BEQ A0,R0,+10
  478. 24070140 ADDIU A3,R0,0140
  479. 8FB8002C LW T8,002C (SP)
  480. 240E0040 ADDIU T6,R0,0040
  481. 240F000B ADDIU T7,R0,000B
  482. 24190140 ADDIU T9,R0,0140
  483. AFB9001C SW T9,001C (SP)
  484. AFAF0014 SW T7,0014 (SP)
  485. AFAE0010 SW T6,0010 (SP)
  486. 0C07287C JAL 801CA1F0 # directly draw SP+10 rows of ci4 image A0, (A3, A2) and A1 bytes wide, from offset SP+14 to buffer SP+18 with width SP+1C
  487. AFB80018 SW T8,0018 (SP)
  488. 8FA40038 LW A0,0038 (SP)
  489. 00002825 OR A1,R0,R0
  490. 240600B0 ADDIU A2,R0,00B0
  491. 1080000A BEQ A0,R0,+10
  492. 24070140 ADDIU A3,R0,0140
  493. 8FAA002C LW T2,002C (SP)
  494. 24080020 ADDIU T0,R0,0020
  495. 2409000B ADDIU T1,R0,000B
  496. 240B0140 ADDIU T3,R0,0140
  497. AFAB001C SW T3,001C (SP)
  498. AFA90014 SW T1,0014 (SP)
  499. AFA80010 SW T0,0010 (SP)
  500. 0C07287C JAL 801CA1F0 # directly draw SP+10 rows of ci4 image A0, (A3, A2) and A1 bytes wide, from offset SP+14 to buffer SP+18 with width SP+1C
  501. AFAA0018 SW T2,0018 (SP)
  502. 0C000EF8 JAL 80003BE0
  503. 00002025 OR A0,R0,R0
  504. 8FBF0024 LW RA,0024 (SP)
  505. 27BD0030 ADDIU SP,SP,0030
  506. 03E00008 JR RA
  507. 00000000 NOP
  508.  
  509. 801C75BC 0x73C replace and draw error# image A0, error text image A1, and disk insertion/removal image A2 to screen
  510. accepts: A0=p->error# image or None, A1=p->error text image or None, A2=p->disk insertion/removal image or None
  511. 27BDFFE8 ADDIU SP,SP,FFE8
  512. AFBF0014 SW RA,0014 (SP)
  513. 14800004 BNE A0,R0,+4
  514. 3C0E801E LUI T6,801E
  515. 14A00002 BNE A1,R0,+2
  516. 00000000 NOP
  517. 10C0000D BEQ A2,R0,+13
  518. 25CE9DB8 ADDIU T6,T6,9DB8
  519. 91CF0000 LBU T7,0000 (T6)
  520. 10800002 BEQ A0,R0,+2
  521. 3C01801E LUI AT,801E
  522. AC249DCC SW A0,9DCC (AT)
  523. 10A00002 BEQ A1,R0,+2
  524. 3C01801E LUI AT,801E
  525. AC259DD0 SW A1,9DD0 (AT)
  526. 10C00002 BEQ A2,R0,+2
  527. 3C01801E LUI AT,801E
  528. AC269DD4 SW A2,9DD4 (AT)
  529. 0C071D1B JAL 801C746C # draw error# image A0, error text image A1, and disk insertion/removal image A2 to screen
  530. 00000000 NOP
  531. 8FBF0014 LW RA,0014 (SP)
  532. 27BD0018 ADDIU SP,SP,0018
  533. 03E00008 JR RA
  534. 00000000 NOP
  535.  
  536. 801C761C 0x79C draw error images to screen
  537. 27BDFFE8 ADDIU SP,SP,FFE8
  538. AFBF0014 SW RA,0014 (SP)
  539. 0C000733 JAL 80001CCC # run timer for (A0 * clock / 1000)
  540. 24040064 ADDIU A0,R0,0064
  541. 3C04801E LUI A0,801E
  542. 3C05801E LUI A1,801E
  543. 3C06801E LUI A2,801E
  544. 8CC69DD4 LW A2,9DD4 (A2) # disk insertion/removal image = @801D9DD4
  545. 8CA59DD0 LW A1,9DD0 (A1) # error text image = @801D9DD0
  546. 0C071D1B JAL 801C746C # draw error# image A0, error text image A1, and disk insertion/removal image A2 to screen
  547. 8C849DCC LW A0,9DCC (A0) # error# image = @801D9DCC
  548. 8FBF0014 LW RA,0014 (SP)
  549. 27BD0018 ADDIU SP,SP,0018
  550. 03E00008 JR RA
  551. 00000000 NOP
  552.  
  553. 801C7658 0x7D8 start 64DD hardware and management threads
  554. 27BDFFD0 ADDIU SP,SP,FFD0
  555. AFBF0024 SW RA,0024 (SP)
  556. AFB00020 SW S0,0020 (SP)
  557. 3C0E8012 LUI T6,8012
  558. 91CE1212 LBU T6,1212 (T6)
  559. 3C10801E LUI S0,801E
  560. 2610AF88 ADDIU S0,S0,AF88
  561. 11C00003 BEQ T6,R0,+3 # if 80121212[0], return 0
  562. 3C04801E LUI A0,801E
  563. 10000061 BEQ R0,R0,+97
  564. 00001025 OR V0,R0,R0
  565. 3C18801E LUI T8,801E
  566. 27188E10 ADDIU T8,T8,8E10
  567. 3C05801E LUI A1,801E
  568. 240F0100 ADDIU T7,R0,0100
  569. AFAF0010 SW T7,0010 (SP) # blocks = 0x100
  570. 24A59F88 ADDIU A1,A1,9F88 # A1 = 801D9F88
  571. AFB80014 SW T8,0014 (SP) # thread name = 801D8E10: p->"ddmsg"
  572. 2484AF88 ADDIU A0,A0,AF88 # entry = 801DAF88
  573. 02003025 OR A2,S0,R0 # A2 = 801DAF88
  574. 0C000624 JAL 80001890 # create profiler entry A0 for SP+10 blocks of fixed or dynamic memory (A3) between A1 and A2
  575. 00003825 OR A3,R0,R0 # A3 = 0
  576. 3C04801E LUI A0,801E
  577. 3C06801C LUI A2,801C
  578. 3C07801E LUI A3,801E
  579. 2419000D ADDIU T9,R0,000D
  580. AFB90014 SW T9,0014 (SP) # priority = 0xD
  581. 24E79B90 ADDIU A3,A3,9B90 # arg = 801D9B90
  582. 24C6711C ADDIU A2,A2,711C # func = 801C711C
  583. 24849DD8 ADDIU A0,A0,9DD8 # thread = 801D9DD8
  584. 24050009 ADDIU A1,R0,0009 # ID 9
  585. 0C000BC8 JAL 80002F20 # create thread A0, ID A1, calling A2(A3) with stack at SP+10, priority SP+14
  586. AFB00010 SW S0,0010 (SP) # SP = 801DAF88
  587. 3C04801E LUI A0,801E
  588. 0C0017B0 JAL 80005EC0 # start thread A0
  589. 24849DD8 ADDIU A0,A0,9DD8 # thread = 801D9DD8: ddmsg
  590. 3C04801E LUI A0,801E
  591. 3C05801E LUI A1,801E
  592. 24A59DB0 ADDIU A1,A1,9DB0 # msg = 801D9DB0
  593. 24849D80 ADDIU A0,A0,9D80 # queue = 801D9D80
  594. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  595. 24060001 ADDIU A2,R0,0001 # msgs = 1
  596. 3C04801E LUI A0,801E
  597. 3C05801E LUI A1,801E
  598. 24A59DB4 ADDIU A1,A1,9DB4 # msg = 801D9DB4
  599. 24849D98 ADDIU A0,A0,9D98 # queue = 801D9D98
  600. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  601. 24060001 ADDIU A2,R0,0001 # msgs = 1
  602. 3C09801E LUI T1,801E
  603. 25298E18 ADDIU T1,T1,8E18
  604. 3C04801E LUI A0,801E
  605. 3C05801E LUI A1,801E
  606. 3C06801E LUI A2,801E
  607. 24080100 ADDIU T0,R0,0100
  608. AFA80010 SW T0,0010 (SP) # SP+10 = 0x100
  609. 24C6BFA8 ADDIU A2,A2,BFA8 # A2 = 801DBFA8
  610. 24A5AFA8 ADDIU A1,A1,AFA8 # A1 = 801DAFA8
  611. 2484BFA8 ADDIU A0,A0,BFA8 # A0 = 801DBFA8
  612. AFA90014 SW T1,0014 (SP) # thread name = 801D8E18: p->"n64dd"
  613. 0C000624 JAL 80001890 # create profiler entry A0 for SP+10 blocks of fixed or dynamic memory (A3) between A1 and A2
  614. 00003825 OR A3,R0,R0 # fixed
  615. 3C10801E LUI S0,801E
  616. 26109D50 ADDIU S0,S0,9D50 # arg = 801E9D50
  617. 3C0A801E LUI T2,801E
  618. 3C0B801E LUI T3,801E
  619. 3C0D801E LUI T5,801E
  620. 3C02801D LUI V0,801D
  621. 254A9D80 ADDIU T2,T2,9D80
  622. 256B9D98 ADDIU T3,T3,9D98
  623. 240C0008 ADDIU T4,R0,0008
  624. 25ADBFA8 ADDIU T5,T5,BFA8
  625. 240E000D ADDIU T6,R0,000D
  626. 240F0001 ADDIU T7,R0,0001
  627. 24428000 ADDIU V0,V0,8000
  628. AE0A001C SW T2,001C (S0) # arg+1C = 801D9D80: incoming queue
  629. AE0B0020 SW T3,0020 (S0) # arg+20 = 801D9D98: outgoing queue
  630. AE0C0024 SW T4,0024 (S0) # arg+24 = 8: ID
  631. AE0D0028 SW T5,0028 (S0) # arg+28 = 801DBFA8: SP
  632. AE0E002C SW T6,002C (S0) # arg+2C = 0xD: priority
  633. A20F0000 SB T7,0000 (S0) # option 1
  634. AFA2002C SW V0,002C (SP) # func = 801C8000
  635. 0040F809 JALR RA,V0
  636. 02002025 OR A0,S0,R0 # call 801C8000(801E9D50) w/ option 1: start n64dd thread
  637. 3C198012 LUI T9,8012
  638. 27391213 ADDIU T9,T9,1213
  639. 24180001 ADDIU T8,R0,0001
  640. 0C071BF6 JAL 801C6FD8
  641. A3380000 SB T8,0000 (T9)
  642. 8FB9002C LW T9,002C (SP) # func = 801C8000
  643. 3C0A8000 LUI T2,8000
  644. 3C0B801C LUI T3,801C
  645. 24080002 ADDIU T0,R0,0002
  646. 24090006 ADDIU T1,R0,0006
  647. 254A0A54 ADDIU T2,T2,0A54
  648. 256B75BC ADDIU T3,T3,75BC
  649. A2080000 SB T0,0000 (S0) # option 2
  650. AE090010 SW T1,0010 (S0) # arg+10 = 6
  651. AE0A0014 SW T2,0014 (S0) # arg+14 = 80000A54
  652. AE0B000C SW T3,000C (S0) # arg+C = 801C75BC: replace and draw error# image A0, error text image A1, and disk insertion/removal image A2 to screen
  653. 0320F809 JALR RA,T9
  654. 02002025 OR A0,S0,R0 # call 801C8000(801E9D50) w/ option 2: start leo threads
  655. 8FB9002C LW T9,002C (SP)
  656. 240C000D ADDIU T4,R0,000D
  657. A20C0000 SB T4,0000 (S0) # 801E9D50[0] = 0xD: option 0xD
  658. 0320F809 JALR RA,T9
  659. 02002025 OR A0,S0,R0 # call 801C8000(801E9D50) w/ option 0xD: 801D2EA0 = 1
  660. 00001025 OR V0,R0,R0
  661. 8FBF0024 LW RA,0024 (SP)
  662. 8FB00020 LW S0,0020 (SP)
  663. 27BD0030 ADDIU SP,SP,0030
  664. 03E00008 JR RA
  665. 00000000 NOP
  666.  
  667. 801C7818 0x998
  668. 27BDFFE8 ADDIU SP,SP,FFE8
  669. 3C04801E LUI A0,801E
  670. 24849D50 ADDIU A0,A0,9D50
  671. AFBF0014 SW RA,0014 (SP)
  672. 3C19801D LUI T9,801D
  673. 240E000C ADDIU T6,R0,000C
  674. 27398000 ADDIU T9,T9,8000
  675. 0320F809 JALR RA,T9
  676. A08E0000 SB T6,0000 (A0) # call 801C8000(801D9D50) w/ option 0xC: 801D2EA0 = 0
  677. 0C072071 JAL 801C81C4 # V0 = @801D2E60
  678. 00000000 NOP
  679. 14400007 BNE V0,R0,+7
  680. 00000000 NOP
  681. @801C784C
  682. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  683. 2404411A ADDIU A0,R0,411A
  684. 0C072071 JAL 801C81C4 # V0 = @801D2E60
  685. 00000000 NOP
  686. 1040FFFB BEQ V0,R0,-5
  687. 00000000 NOP
  688. @801C7864
  689. 0C072071 JAL 801C81C4 # V0 = @801D2E60
  690. 00000000 NOP
  691. 24010002 ADDIU AT,R0,0002
  692. 10410007 BEQ V0,AT,+7
  693. 00000000 NOP
  694. @801C7878
  695. 0C071D87 JAL 801C761C # draw error images to screen
  696. 00000000 NOP
  697. 0C02B398 JAL 800ACE60 # run timer for one full clock
  698. 00000000 NOP
  699. 10000007 BEQ R0,R0,+7
  700. 2402FFFD ADDIU V0,R0,FFFD
  701. @801C7890
  702. 0C071C06 JAL 801C7018 # if 80121213[0]: 80121213[0] = 1 and print error message "HungUp ../z_n64dd.c:503"
  703. 00000000 NOP
  704. 240F0001 ADDIU T7,R0,0001
  705. 3C018012 LUI AT,8012
  706. A02F1212 SB T7,1212 (AT) # 80121212[0] = 1
  707. 00001025 OR V0,R0,R0
  708. @801C78A8
  709. 8FBF0014 LW RA,0014 (SP)
  710. 27BD0018 ADDIU SP,SP,0018
  711. 03E00008 JR RA
  712. 00000000 NOP
  713.  
  714. 801C78B8 0xA38 disk boot function
  715. 27BDFFE8 ADDIU SP,SP,FFE8
  716. AFBF0014 SW RA,0014 (SP)
  717. 0C071D96 JAL 801C7658 # start 64DD hardware and management threads
  718. 00000000 NOP
  719. 14400004 BNE V0,R0,+4
  720. 00401825 OR V1,V0,R0
  721. 0C071E06 JAL 801C7818
  722. 00000000 NOP
  723. 00401825 OR V1,V0,R0
  724. 00601025 OR V0,V1,R0
  725. 8FBF0014 LW RA,0014 (SP)
  726. 27BD0018 ADDIU SP,SP,0018
  727. 03E00008 JR RA
  728. 00000000 NOP
  729.  
  730. 801C78F0 0xA70 call 801C8000(801D9D50) w/ option 0
  731. 27BDFFE8 ADDIU SP,SP,FFE8
  732. 3C04801E LUI A0,801E
  733. 24849D50 ADDIU A0,A0,9D50
  734. AFBF0014 SW RA,0014 (SP)
  735. 3C19801D LUI T9,801D
  736. 27398000 ADDIU T9,T9,8000
  737. 0320F809 JALR RA,T9
  738. A0800000 SB R0,0000 (A0) # call 801C8000(801D9D50) w/ option 0
  739. 8FBF0014 LW RA,0014 (SP)
  740. 27BD0018 ADDIU SP,SP,0018
  741. 03E00008 JR RA
  742. 00000000 NOP
  743.  
  744. 801C7920 0xAA0 read A2 bytes from LBA A0 to rdram A1; calls 801C8000 with options 3, 6, and 7
  745. accepts: A0=LBA, A1=rdram, A2=bytelength
  746. 27BDFFE0 ADDIU SP,SP,FFE0
  747. AFB00014 SW S0,0014 (SP)
  748. 3C10801E LUI S0,801E
  749. 26109D50 ADDIU S0,S0,9D50
  750. AFBF001C SW RA,001C (SP)
  751. AFB10018 SW S1,0018 (SP)
  752. 00803825 OR A3,A0,R0
  753. 3C11801D LUI S1,801D
  754. 240E0003 ADDIU T6,R0,0003
  755. 26318000 ADDIU S1,S1,8000 # func = 801C8000
  756. AE050018 SW A1,0018 (S0) # 801D9D50+18: A1 f/caller
  757. AE07001C SW A3,001C (S0) # 801D9D50+1C: A0 f/caller
  758. AE060020 SW A2,0020 (S0) # 801D9D50+20: A2 f/caller
  759. A20E0000 SB T6,0000 (S0) # 801D9D50[0] = 3
  760. 0220F809 JALR RA,S1
  761. 02002025 OR A0,S0,R0 # call 801C8000(801D9D50) w/ option 3
  762. @801C7960
  763. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  764. 00000000 NOP
  765. 240F0006 ADDIU T7,R0,0006
  766. A20F0000 SB T7,0000 (S0) # 801D9D50[0] = 6
  767. 0220F809 JALR RA,S1
  768. 02002025 OR A0,S0,R0 # call 801C8000(801D9D50) w/ option 6
  769. 50400008 BEQL V0,R0,+8
  770. 24180007 ADDIU T8,R0,0007
  771. @801C7980: loop while V0
  772. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  773. 2404411A ADDIU A0,R0,411A
  774. 0220F809 JALR RA,S1
  775. 02002025 OR A0,S0,R0
  776. 1440FFFB BNE V0,R0,-5
  777. 00000000 NOP
  778. @801C7998
  779. 24180007 ADDIU T8,R0,0007
  780. A2180000 SB T8,0000 (S0) # 801D9D50[0] = 7
  781. 0220F809 JALR RA,S1
  782. 02002025 OR A0,S0,R0 # call 801C8000(801D9D50) w/ option 7
  783. 50400004 BEQL V0,R0,+4
  784. 8FBF001C LW RA,001C (SP)
  785. @801C79B0
  786. 0C02B398 JAL 800ACE60 # run timer for one full clock
  787. 00000000 NOP
  788. 8FBF001C LW RA,001C (SP)
  789. 8FB00014 LW S0,0014 (SP)
  790. 8FB10018 LW S1,0018 (SP)
  791. 03E00008 JR RA
  792. 27BD0020 ADDIU SP,SP,0020
  793.  
  794. 801C79CC 0xB4C write A2 bytes from rdram A1 to LBA A0; calls 801C8000 with option 4
  795. accepts: A0=LBA, A1=rdram, A2=bytelength
  796. 00803825 OR A3,A0,R0
  797. 3C04801E LUI A0,801E
  798. 27BDFFE8 ADDIU SP,SP,FFE8
  799. AFBF0014 SW RA,0014 (SP)
  800. 24849D50 ADDIU A0,A0,9D50
  801. 3C19801D LUI T9,801D
  802. 240E0004 ADDIU T6,R0,0004
  803. 27398000 ADDIU T9,T9,8000
  804. AC870018 SW A3,0018 (A0) # 801D9D50+18 = A0
  805. AC85001C SW A1,001C (A0) # 801D9D50+1C = A1
  806. AC860020 SW A2,0020 (A0) # 801D9D50+20 = A2
  807. 0320F809 JALR RA,T9 # call 801C8000(801D9D50) w/ option 4
  808. A08E0000 SB T6,0000 (A0) # 801D9D50[0] = 4
  809. 8FBF0014 LW RA,0014 (SP)
  810. 27BD0018 ADDIU SP,SP,0018
  811. 03E00008 JR RA
  812. 00000000 NOP
  813.  
  814. 801C7A10 0xB90 NERFed
  815. accepts: A0=p->diskID
  816. AFA40000 SW A0,0000 (SP)
  817. 03E00008 JR RA
  818. 00000000 NOP
  819.  
  820. 801C7A1C 0xB9C return False if not an EZL* disk or disk has been swapped else True
  821. accepts: A0=p->struct
  822. 27BDFFE0 ADDIU SP,SP,FFE0
  823. AFBF001C SW RA,001C (SP)
  824. AFB00018 SW S0,0018 (SP)
  825. 00802825 OR A1,A0,R0
  826. 24B00038 ADDIU S0,A1,0038 # S0 = struct+38: p->diskID
  827. 0C071E84 JAL 801C7A10 # NERFed
  828. 02002025 OR A0,S0,R0
  829. 3C0E801E LUI T6,801E
  830. 8DCEBFF0 LW T6,BFF0 (T6)
  831. 3C05801E LUI A1,801E
  832. 24A58E20 ADDIU A1,A1,8E20 # 801D8E20: "EZLJ"
  833. 15C00029 BNE T6,R0,+41 # if @801DBFF0, skip copying diskID: True if diskID already copied
  834. 02002025 OR A0,S0,R0
  835. @801C7A50: compare disk gameID and copy on a hit
  836. 0C0350E4 JAL 800D4390 # V0 = difference in A2 bytes at A0 and A1
  837. 24060004 ADDIU A2,R0,0004 # length = 4
  838. 10400007 BEQ V0,R0,+7
  839. 02002025 OR A0,S0,R0
  840. 3C05801E LUI A1,801E
  841. 24A58E28 ADDIU A1,A1,8E28 # 801D8E28: "EZLE"
  842. 0C0350E4 JAL 800D4390 # V0 = difference in A2 bytes at A0 and A1
  843. 24060004 ADDIU A2,R0,0004 # length = 4
  844. 1440001B BNE V0,R0,+27
  845. 3C03801E LUI V1,801E
  846. 8E190000 LW T9,0000 (S0)
  847. 3C0F801E LUI T7,801E
  848. 25EFBFD0 ADDIU T7,T7,BFD0
  849. ADF90000 SW T9,0000 (T7) # 801DBFD0[:32] = struct+38[:32]
  850. 8E180004 LW T8,0004 (S0)
  851. 3C03801E LUI V1,801E
  852. 24080001 ADDIU T0,R0,0001
  853. ADF80004 SW T8,0004 (T7)
  854. 8E190008 LW T9,0008 (S0)
  855. 3C01801E LUI AT,801E
  856. 24639DC8 ADDIU V1,V1,9DC8
  857. ADF90008 SW T9,0008 (T7)
  858. 8E18000C LW T8,000C (S0)
  859. 24090001 ADDIU T1,R0,0001
  860. ADF8000C SW T8,000C (T7)
  861. 8E190010 LW T9,0010 (S0)
  862. ADF90010 SW T9,0010 (T7)
  863. 8E180014 LW T8,0014 (S0)
  864. ADF80014 SW T8,0014 (T7)
  865. 8E190018 LW T9,0018 (S0)
  866. ADF90018 SW T9,0018 (T7)
  867. 8E18001C LW T8,001C (S0)
  868. ADF8001C SW T8,001C (T7)
  869. AC28BFF0 SW T0,BFF0 (AT) # 801D8FF0 = True
  870. 10000014 BEQ R0,R0,+20
  871. AC690000 SW T1,0000 (V1) # 801D9DC8 = 1
  872. @801C7AE0 on a miss set 801D9DC8 = 2 and return False
  873. 24639DC8 ADDIU V1,V1,9DC8
  874. 240A0002 ADDIU T2,R0,0002
  875. 10000010 BEQ R0,R0,+16
  876. AC6A0000 SW T2,0000 (V1) # 801D9DC8 = 2
  877. @801C7AF0 if original diskID already copied, verify same disk inserted...
  878. 3C04801E LUI A0,801E
  879. 2484BFD0 ADDIU A0,A0,BFD0
  880. 02002825 OR A1,S0,R0
  881. 0C0350E4 JAL 800D4390 # V0 = difference in A2 bytes at A0 and A1
  882. 24060020 ADDIU A2,R0,0020
  883. 14400005 BNE V0,R0,+5
  884. 3C03801E LUI V1,801E
  885. 24639DC8 ADDIU V1,V1,9DC8
  886. 240B0001 ADDIU T3,R0,0001
  887. 10000005 BEQ R0,R0,+5
  888. AC6B0000 SW T3,0000 (V1) # 801D9DC8 = 1
  889. @801C7B1C on a miss (or disk swap) set 801D9DC8 = 2 and return False
  890. 3C03801E LUI V1,801E
  891. 24639DC8 ADDIU V1,V1,9DC8
  892. 240C0002 ADDIU T4,R0,0002
  893. AC6C0000 SW T4,0000 (V1) # 801D9DC8 = 2
  894. @801C7B2C
  895. 8C620000 LW V0,0000 (V1)
  896. 8FBF001C LW RA,001C (SP)
  897. 38420001 XORI V0,V0,0001
  898. 2C420001 SLTIU V0,V0,0001 # return True if @801D9DC8 == 1 else False
  899. 8FB00018 LW S0,0018 (SP)
  900. 03E00008 JR RA
  901. 27BD0020 ADDIU SP,SP,0020
  902.  
  903. 801C7B48 0xCC8 V0 = sensecode; A1 = LBAs containing A0 bytes starting from LBA 1, with A2 bytes in final LBA
  904. accepts: A0=length, A1=p->target for #LBAs, A2=p->target for bytelength in final LBA
  905. 27BDFFD0 ADDIU SP,SP,FFD0
  906. AFBF0014 SW RA,0014 (SP)
  907. AFA40030 SW A0,0030 (SP)
  908. AFA50034 SW A1,0034 (SP)
  909. AFA60038 SW A2,0038 (SP)
  910. 8FA50030 LW A1,0030 (SP)
  911. 24040001 ADDIU A0,R0,0001
  912. 27A6002C ADDIU A2,SP,002C
  913. 0C0739A0 JAL 801CE680 # V0=sensecode; A2 = #LBAs for A1 bytes at LBA A0
  914. 24A50001 ADDIU A1,A1,0001 # A0 + 1
  915. 50400004 BEQL V0,R0,+4
  916. 8FA2002C LW V0,002C (SP)
  917. 10000019 BEQ R0,R0,+25
  918. 8FBF0014 LW RA,0014 (SP)
  919. @801C7B80
  920. 8FA2002C LW V0,002C (SP) # V0 = #LBAs for A0+1 bytes starting at LBA 1
  921. 24010001 ADDIU AT,R0,0001
  922. 24040001 ADDIU A0,R0,0001 # LBA 1
  923. 14410003 BNE V0,AT,+3
  924. 2445FFFF ADDIU A1,V0,FFFF
  925. 10000008 BEQ R0,R0,+8
  926. AFA00020 SW R0,0020 (SP) # if #LBAs ==1, SP+20 = 0
  927. @801C7B9C
  928. 27A60020 ADDIU A2,SP,0020
  929. 0C072FBC JAL 801CBEF0 # V0 = sensecode; A2 = bytelength of A1 LBAs starting at A0
  930. AFA50024 SW A1,0024 (SP) # #LBAs - 1
  931. 10400003 BEQ V0,R0,+3
  932. 8FA50024 LW A1,0024 (SP)
  933. 1000000B BEQ R0,R0,+11
  934. 8FBF0014 LW RA,0014 (SP)
  935. @801C7BB8
  936. 8FAF0034 LW T7,0034 (SP)
  937. 24AE0001 ADDIU T6,A1,0001
  938. 00001025 OR V0,R0,R0
  939. ADEE0000 SW T6,0000 (T7) # A1+0 = #LBAs + 1 (so original #LBAs)
  940. 8FB90020 LW T9,0020 (SP)
  941. 8FB80030 LW T8,0030 (SP)
  942. 8FA90038 LW T1,0038 (SP)
  943. 03194023 SUBU T0,T8,T9
  944. AD280000 SW T0,0000 (T1) # A2+0 = bytelength A0 - bytelength of (#LBAs - 1): bytelength within final LBA
  945. 8FBF0014 LW RA,0014 (SP)
  946. @801C7BE0
  947. 27BD0030 ADDIU SP,SP,0030
  948. 03E00008 JR RA
  949. 00000000 NOP
  950.  
  951. 801C7BEC 0xD6C V0 = #bytes at LBA A0
  952. accepts: A0=LBA
  953. 27BDFFE0 ADDIU SP,SP,FFE0
  954. AFBF0014 SW RA,0014 (SP)
  955. 24050001 ADDIU A1,R0,0001 # blocks = 1
  956. 0C072FBC JAL 801CBEF0 # V0 = sensecode; A2 = bytelength of A1 LBAs starting at A0
  957. 27A6001C ADDIU A2,SP,001C
  958. 14400003 BNE V0,R0,+3 # return 0 if error else bytelength
  959. 8FBF0014 LW RA,0014 (SP)
  960. 10000002 BEQ R0,R0,+2
  961. 8FA2001C LW V0,001C (SP)
  962. 00001025 OR V0,R0,R0
  963. 03E00008 JR RA
  964. 27BD0020 ADDIU SP,SP,0020
  965.  
  966. 801C7C1C 0xD9C copy A2 bytes starting A1 bytes after LBA 1 to rdram A0
  967. accepts: A0=p->rdram, A1=offset, A2=length
  968. 27BDFFA0 ADDIU SP,SP,FFA0
  969. AFB10018 SW S1,0018 (SP)
  970. AFB00014 SW S0,0014 (SP)
  971. 00A08025 OR S0,A1,R0
  972. 00C08825 OR S1,A2,R0
  973. AFBF001C SW RA,001C (SP)
  974. AFA40060 SW A0,0060 (SP)
  975. 0C071BF6 JAL 801C6FD8
  976. 00000000 NOP
  977. 0C071BCC JAL 801C6F30
  978. 00000000 NOP
  979. 3C0F801E LUI T7,801E
  980. 25EF9DB8 ADDIU T7,T7,9DB8
  981. 240E0001 ADDIU T6,R0,0001
  982. 3C08801E LUI T0,801E
  983. A1EE0000 SB T6,0000 (T7) # 801D9DB8[0] = 1
  984. 25089DC0 ADDIU T0,T0,9DC0
  985. 24180000 ADDIU T8,R0,0000
  986. AD180000 SW T8,0000 (T0) # 801D9DC0+0 = 0
  987. 24190000 ADDIU T9,R0,0000
  988. AD190004 SW T9,0004 (T0) # 801D9DC0+4 = 0
  989. 02002025 OR A0,S0,R0 # length = offset (A0)
  990. 27A5005C ADDIU A1,SP,005C
  991. 0C071ED2 JAL 801C7B48 # V0 = sensecode; A1 = LBAs containing A0 bytes starting from LBA 1, with A2 bytes in final LBA
  992. 27A60054 ADDIU A2,SP,0054
  993. 02112021 ADDU A0,S0,S1 # length = offset (A1) + length (A2)
  994. 27A50058 ADDIU A1,SP,0058
  995. 0C071ED2 JAL 801C7B48 # V0 = sensecode; A1 = LBAs containing A0 bytes starting from LBA 1, with A2 bytes in final LBA
  996. 27A60050 ADDIU A2,SP,0050
  997. 8FA4005C LW A0,005C (SP) # #LBAs to offset
  998. 8FAA0058 LW T2,0058 (SP) # #LBAs to offset+length
  999. 3C09801D LUI T1,801D
  1000. 8D292E50 LW T1,2E50 (T1)
  1001. 148A000F BNE A0,T2,+15
  1002. AFA9004C SW T1,004C (SP) # SP+4C = @801D2E50
  1003. @801C7CA8: if all data's in one LBA...
  1004. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1005. 00000000 NOP
  1006. 8FA4005C LW A0,005C (SP) # #LBAs to offset
  1007. 8FA5004C LW A1,004C (SP) # target = @801D2E50
  1008. 0C071E48 JAL 801C7920 # read A2 bytes from LBA A0 to rdram A1; calls 801C8000 with options 3, 6, and 7
  1009. 00403025 OR A2,V0,R0 # #bytes at that LBA
  1010. 8FA70054 LW A3,0054 (SP)
  1011. 8FAB004C LW T3,004C (SP)
  1012. 8FA50060 LW A1,0060 (SP) # target = A0 f/caller
  1013. 02203025 OR A2,S1,R0 # length = A2 f/caller
  1014. 0C001370 JAL 80004DC0 # copy A2 bytes from A0 to A1
  1015. 01672021 ADDU A0,T3,A3 # source = @801D2E50 + (#bytes to initial offset)
  1016. 1000003D BEQ R0,R0,+61
  1017. 00000000 NOP
  1018. @801C7CE0: if you're copying off the end of something greater...
  1019. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1020. 00008825 OR S1,R0,R0
  1021. 8FA4005C LW A0,005C (SP)
  1022. 8FA5004C LW A1,004C (SP)
  1023. 0C071E48 JAL 801C7920 # read A2 bytes from LBA A0 to rdram A1; calls 801C8000 with options 3, 6, and 7
  1024. 00403025 OR A2,V0,R0
  1025. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1026. 8FA4005C LW A0,005C (SP)
  1027. 8FA70054 LW A3,0054 (SP)
  1028. 8FAC004C LW T4,004C (SP)
  1029. 8FA50060 LW A1,0060 (SP)
  1030. 00473023 SUBU A2,V0,A3
  1031. 0C001370 JAL 80004DC0 # copy A2 bytes from A0 to A1
  1032. 01872021 ADDU A0,T4,A3
  1033. 8FA2005C LW V0,005C (SP)
  1034. 8FA40058 LW A0,0058 (SP)
  1035. 24420001 ADDIU V0,V0,0001
  1036. 0044082A SLT AT,V0,A0
  1037. 10200016 BEQ AT,R0,+22
  1038. 0044082A SLT AT,V0,A0
  1039. @801C7D30
  1040. 10200009 BEQ AT,R0,+9
  1041. 00408025 OR S0,V0,R0
  1042. @801C7D38
  1043. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1044. 02002025 OR A0,S0,R0
  1045. 8FAD0058 LW T5,0058 (SP)
  1046. 26100001 ADDIU S0,S0,0001
  1047. 02228821 ADDU S1,S1,V0
  1048. 020D082A SLT AT,S0,T5
  1049. 1420FFF9 BNE AT,R0,-7
  1050. 00000000 NOP
  1051. @801C7D58
  1052. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1053. 8FA4005C LW A0,005C (SP)
  1054. 8FAE0060 LW T6,0060 (SP)
  1055. 8FA70054 LW A3,0054 (SP)
  1056. 8FA4005C LW A0,005C (SP)
  1057. 004E7821 ADDU T7,V0,T6
  1058. 02203025 OR A2,S1,R0
  1059. 01E72823 SUBU A1,T7,A3 # A1 = A0 + bytelength - (#bytes to initial offset)
  1060. 0C071E48 JAL 801C7920 # read A2 bytes from LBA A0 to rdram A1; calls 801C8000 with options 3, 6, and 7
  1061. 24840001 ADDIU A0,A0,0001
  1062. 8FA40058 LW A0,0058 (SP)
  1063. 8FB80050 LW T8,0050 (SP)
  1064. 1B000011 BLTZ T8,+17
  1065. 00000000 NOP
  1066. @801C7D90
  1067. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1068. 00000000 NOP
  1069. 8FA40058 LW A0,0058 (SP)
  1070. 8FA5004C LW A1,004C (SP)
  1071. 0C071E48 JAL 801C7920 # read A2 bytes from LBA A0 to rdram A1; calls 801C8000 with options 3, 6, and 7
  1072. 00403025 OR A2,V0,R0
  1073. 0C071EFB JAL 801C7BEC # V0 = #bytes at LBA A0
  1074. 8FA4005C LW A0,005C (SP)
  1075. 8FB90060 LW T9,0060 (SP)
  1076. 8FA70054 LW A3,0054 (SP)
  1077. 8FA4004C LW A0,004C (SP)
  1078. 00594021 ADDU T0,V0,T9
  1079. 01074823 SUBU T1,T0,A3
  1080. 01312821 ADDU A1,T1,S1
  1081. 0C001370 JAL 80004DC0 # copy A2 bytes from A0 to A1
  1082. 8FA60050 LW A2,0050 (SP)
  1083. @801C7DD0
  1084. 3C0A801E LUI T2,801E
  1085. 254A9DC0 ADDIU T2,T2,9DC0
  1086. 8D4C0000 LW T4,0000 (T2) # @801D9DC0+0
  1087. 8D4D0004 LW T5,0004 (T2) # @801D9DC0+4
  1088. 15800003 BNE T4,R0,+3
  1089. 00000000 NOP
  1090. 11A0001A BEQ T5,R0,+26
  1091. 00000000 NOP
  1092. @801C7DF0: if timer set, check it
  1093. 0C001230 JAL 800048C0 # V0, V1 = time since timer started (ref. 80009E80 & 80009E88)
  1094. 00000000 NOP
  1095. 3C0B801E LUI T3,801E
  1096. 256B9DC0 ADDIU T3,T3,9DC0
  1097. 8D6E0000 LW T6,0000 (T3) # @801D9DC0+0
  1098. 8D6F0004 LW T7,0004 (T3) # @801D9DC0+4
  1099. 24060000 ADDIU A2,R0,0000
  1100. 004E2023 SUBU A0,V0,T6
  1101. 006F082B SLTU AT,V1,T7
  1102. 00812023 SUBU A0,A0,AT
  1103. 24070040 ADDIU A3,R0,0040
  1104. 0C0008B6 JAL 800022D8 # V0, V1 = DMULTU (A0, A1) (A2, A3)
  1105. 006F2823 SUBU A1,V1,T7
  1106. 00402025 OR A0,V0,R0
  1107. 00602825 OR A1,V1,R0
  1108. 24060000 ADDIU A2,R0,0000
  1109. 0C000876 JAL 800021D8 # V0, V1 = quotient f/ DDIVU (A0, A1) (A2, A3)
  1110. 24070BB8 ADDIU A3,R0,0BB8 # result // 3000
  1111. 3C06000F LUI A2,000F
  1112. 34C64240 ORI A2,A2,4240
  1113. 00C3C023 SUBU T8,A2,V1
  1114. 1B000003 BLTZ T8,+3 # skip if V1 > 0xF4240 (1000000)
  1115. 00000000 NOP
  1116. @801C7E4C
  1117. 0C00071F JAL 80001C7C # run timer for ((A0 * 3000) // 64)
  1118. 00C32023 SUBU A0,A2,V1 # 0xF4240 - V1
  1119. @801C7E54: error messages if applicable
  1120. 0C071C06 JAL 801C7018 # if 80121213[0]: 80121213[0] = 1 and print error message "HungUp ../z_n64dd.c:503"
  1121. 00000000 NOP
  1122. 0C071BDE JAL 801C6F78
  1123. 00000000 NOP
  1124. @801C7E64
  1125. 8FBF001C LW RA,001C (SP)
  1126. 8FB00014 LW S0,0014 (SP)
  1127. 8FB10018 LW S1,0018 (SP)
  1128. 03E00008 JR RA
  1129. 27BD0060 ADDIU SP,SP,0060
  1130.  
  1131. 801C7E78 0xFF8 unconditional return
  1132. 03E00008 JR RA
  1133. 00000000 NOP
  1134.  
  1135. 801C7E80 0x1000 hook 64DD expansion; load and run file at LBA 1 + 0x1060, 0x118 in size
  1136. 27BDFFD8 ADDIU SP,SP,FFD8
  1137. 3C02801E LUI V0,801E
  1138. 24429D48 ADDIU V0,V0,9D48
  1139. AFBF0014 SW RA,0014 (SP)
  1140. 8C4E0000 LW T6,0000 (V0)
  1141. 3C0F801E LUI T7,801E
  1142. 25E49C30 ADDIU A0,T7,9C30 # A0 = 801D9C30
  1143. 11C00003 BEQ T6,R0,+3 # if @801D9D48, return -1
  1144. 24051060 ADDIU A1,R0,1060 # A1 = 0x1060
  1145. 1000001B BEQ R0,R0,+27
  1146. 2402FFFF ADDIU V0,R0,FFFF
  1147. @801C7EAC
  1148. AC440000 SW A0,0000 (V0) # 801D9D48 = 801D9C30
  1149. 0C071F07 JAL 801C7C1C # copy A2 bytes starting A1 bytes after LBA 1 to rdram A0
  1150. 24060118 ADDIU A2,R0,0118 # A2 = 0x118
  1151. 3C02801E LUI V0,801E
  1152. 8C429D48 LW V0,9D48 (V0) # entry = @801D9D48: 801D9C30
  1153. 8C450000 LW A1,0000 (V0) # @entry+0: offset f/ LBA 1 start
  1154. 8C580004 LW T8,0004 (V0) # @entry+4: offset f/ LBA 1 end
  1155. 8C440008 LW A0,0008 (V0) # @entry+8: rdram start
  1156. 8C59000C LW T9,000C (V0) # @entry+C: rdram end
  1157. 03053023 SUBU A2,T8,A1 # length = @entry+4 - @entry+0
  1158. 00864821 ADDU T1,A0,A2
  1159. 03244023 SUBU T0,T9,A0
  1160. AFA80020 SW T0,0020 (SP) # SP+20 = rdram end - rdram start
  1161. AFA90018 SW T1,0018 (SP) # SP+18 = rdram start + length
  1162. 0C071F07 JAL 801C7C1C # copy A2 bytes starting A1 bytes after LBA 1 to rdram A0
  1163. AFA60024 SW A2,0024 (SP) # SP+24 = length
  1164. @801C7EEC: initialize remaining space after the file
  1165. 8FA60024 LW A2,0024 (SP)
  1166. 8FAA0020 LW T2,0020 (SP)
  1167. 8FA40018 LW A0,0018 (SP) # target = rdram + data size
  1168. 0C000BA0 JAL 80002E80 # initialize A1 bytes at A0
  1169. 01462823 SUBU A1,T2,A2 # length = rdram size - data size
  1170. 3C0B801E LUI T3,801E
  1171. 8D6B9D48 LW T3,9D48 (T3) # entry = @801D9D48: 801D9C30
  1172. 0C02B530 JAL 800AD4C0 # runs function A0, saving to 80121220
  1173. 8D640010 LW A0,0010 (T3) # entrypoint = entry+10
  1174. 00001025 OR V0,R0,R0
  1175. @801C7F14
  1176. 8FBF0014 LW RA,0014 (SP)
  1177. 27BD0028 ADDIU SP,SP,0028
  1178. 03E00008 JR RA
  1179. 00000000 NOP
  1180.  
  1181. 801C7F24 0x10A4 unhook 64DD expansion
  1182. 27BDFFE8 ADDIU SP,SP,FFE8
  1183. AFBF0014 SW RA,0014 (SP)
  1184. 3C0E801E LUI T6,801E
  1185. 8DCE9D48 LW T6,9D48 (T6)
  1186. 15C00003 BNE T6,R0,+3 # if not @801D9D48, return -1
  1187. 00000000 NOP
  1188. 10000010 BEQ R0,R0,+16
  1189. 2402FFFF ADDIU V0,R0,FFFF
  1190. 0C02B547 JAL 800AD51C # unhooks function at 80121220 using unloader function
  1191. 00000000 NOP
  1192. 3C02801E LUI V0,801E
  1193. 8C429D48 LW V0,9D48 (V0)
  1194. 8C440008 LW A0,0008 (V0)
  1195. 8C4F000C LW T7,000C (V0)
  1196. 0C000BA0 JAL 80002E80 # initialize A1 bytes at A0
  1197. 01E42823 SUBU A1,T7,A0
  1198. 3C04801E LUI A0,801E
  1199. 8C849D48 LW A0,9D48 (A0) # target = @801D9D48: entry
  1200. 0C000BA0 JAL 80002E80 # initialize A1 bytes at A0
  1201. 24050118 ADDIU A1,R0,0118 # length = 0x118
  1202. 3C01801E LUI AT,801E
  1203. AC209D48 SW R0,9D48 (AT) # 801D9D48 = 0: remove link to entry
  1204. 00001025 OR V0,R0,R0
  1205. 8FBF0014 LW RA,0014 (SP)
  1206. 27BD0018 ADDIU SP,SP,0018
  1207. 03E00008 JR RA
  1208. 00000000 NOP
  1209.  
  1210. # Note: called by map select menu options and main game code
  1211. 801C7F90 0x1110 unhook or hook (A0) 64DD expansion
  1212. accepts: A0=mode (0:unhook, 1:hook)
  1213. 27BDFFE8 ADDIU SP,SP,FFE8
  1214. AFBF0014 SW RA,0014 (SP)
  1215. 10800009 BEQ A0,R0,+9
  1216. 3C0F801E LUI T7,801E
  1217. @801C7FA0: mode 1 - hook entry
  1218. 3C0E801E LUI T6,801E
  1219. 8DCE9D48 LW T6,9D48 (T6)
  1220. 55C0000B BNEL T6,R0,+11 # if @801D9D48, return
  1221. 8FBF0014 LW RA,0014 (SP)
  1222. @801C7FB0
  1223. 0C071FA0 JAL 801C7E80 # hook 64DD expansion; load and run file at LBA 1 + 0x1060, 0x118 in size
  1224. 00000000 NOP
  1225. 10000007 BEQ R0,R0,+7
  1226. 8FBF0014 LW RA,0014 (SP)
  1227. @801C7FC0: mode 0 - unhook entry
  1228. 8DEF9D48 LW T7,9D48 (T7)
  1229. 51E00004 BEQL T7,R0,+4 # if not @801D9D48, return
  1230. 8FBF0014 LW RA,0014 (SP)
  1231. 0C071FC9 JAL 801C7F24 # unhook 64DD expansion
  1232. 00000000 NOP
  1233. @801C7FD4: return
  1234. 8FBF0014 LW RA,0014 (SP)
  1235. 27BD0018 ADDIU SP,SP,0018
  1236. 03E00008 JR RA
  1237. 00000000 NOP
  1238.  
  1239. 00000000 NOP
  1240. 00000000 NOP
  1241. 00000000 NOP
  1242. 00000000 NOP
  1243. 00000000 NOP
  1244. 00000000 NOP
  1245. 00000000 NOP
  1246.  
  1247. 801C8000 0x1180
  1248. accepts: A0
  1249. 27BDFFD8 ADDIU SP,SP,FFD8
  1250. AFB00020 SW S0,0020 (SP)
  1251. 00808025 OR S0,A0,R0
  1252. AFBF0024 SW RA,0024 (SP)
  1253. 920E0000 LBU T6,0000 (S0) # option = A0[0]
  1254. 2DC1000E SLTIU AT,T6,000E
  1255. 1020005A BEQ AT,R0,+90
  1256. 000E7080 SLL T6,T6,0x2
  1257. 3C01801E LUI AT,801E
  1258. 002E0821 ADDU AT,AT,T6
  1259. 8C2E8E30 LW T6,8E30 (AT) # call 801D8E30[A0]()
  1260. 01C00008 JR T6
  1261. 00000000 NOP
  1262. @801C8034: option 0
  1263. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1264. 00000000 NOP
  1265. 10400003 BEQ V0,R0,+3
  1266. 00000000 NOP
  1267. 10000050 BEQ R0,R0,+80
  1268. 24020001 ADDIU V0,R0,0001
  1269. 0C072155 JAL 801C8554
  1270. 00000000 NOP
  1271. 1000004C BEQ R0,R0,+76
  1272. 00001025 OR V0,R0,R0
  1273. @801C805C: option 1 - create thread handler for this function
  1274. 8E0F002C LW T7,002C (S0)
  1275. 8E04001C LW A0,001C (S0)
  1276. 8E050020 LW A1,0020 (S0)
  1277. 8E060024 LW A2,0024 (S0)
  1278. 8E070028 LW A3,0028 (S0)
  1279. 0C07215E JAL 801C8578 # create init cmd handler thread with ID A2 and priority SP+10, incoming queue A0, outgoing queue A1, stack at A3
  1280. AFAF0010 SW T7,0010 (SP)
  1281. 10000043 BEQ R0,R0,+67
  1282. 00001025 OR V0,R0,R0
  1283. @801C8080: option 2 - start leo threads
  1284. 8E04000C LW A0,000C (S0)
  1285. 8E050010 LW A1,0010 (S0)
  1286. 0C07218E JAL 801C8638 # run "start leo threads" init command, setting 801E2EB4 = function A0, 801E0F70 = function A1, and 801D2EC0 = function A2
  1287. 8E060014 LW A2,0014 (S0)
  1288. 1000003D BEQ R0,R0,+61
  1289. 00001025 OR V0,R0,R0
  1290. @801C8098: option 3 - read bytelength from LBA to rdram
  1291. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1292. 00000000 NOP
  1293. 10400003 BEQ V0,R0,+3
  1294. 24070001 ADDIU A3,R0,0001 # init cmd 1: read bytelength from LBA
  1295. 10000037 BEQ R0,R0,+55
  1296. 24020001 ADDIU V0,R0,0001
  1297. 8E040018 LW A0,0018 (S0)
  1298. 8E05001C LW A1,001C (S0)
  1299. 0C0721A3 JAL 801C868C # run init command to read or write (A3) A2 bytes between LBA A0 and rdram A1
  1300. 8E060020 LW A2,0020 (S0)
  1301. 10000031 BEQ R0,R0,+49
  1302. 00001025 OR V0,R0,R0
  1303. @801C80C8: option 4 - write bytelength from rdram to LBA
  1304. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1305. 00000000 NOP
  1306. 10400003 BEQ V0,R0,+3
  1307. 24070002 ADDIU A3,R0,0002 # init cmd 2: write bytelength to LBA
  1308. 1000002B BEQ R0,R0,+43
  1309. 24020001 ADDIU V0,R0,0001
  1310. 8E040018 LW A0,0018 (S0)
  1311. 8E05001C LW A1,001C (S0)
  1312. 0C0721A3 JAL 801C868C # run init command to read or write (A3) A2 bytes between LBA A0 and rdram A1
  1313. 8E060020 LW A2,0020 (S0)
  1314. 10000025 BEQ R0,R0,+37
  1315. 00001025 OR V0,R0,R0
  1316. @801C80F8: option 5
  1317. 0C0721DC JAL 801C8770 # V0 = 0 if busy, 1 if error, 2 if okay after test unit ready result
  1318. 00000000 NOP
  1319. A2020008 SB V0,0008 (S0) # A0[8] = result of test unit ready
  1320. 10000020 BEQ R0,R0,+32
  1321. 304200FF ANDI V0,V0,00FF # return result of test unit ready
  1322. @801C810C: option 7
  1323. 0C0721FF JAL 801C87FC
  1324. 00000000 NOP
  1325. 1000001D BEQ R0,R0,+29
  1326. 8FBF0024 LW RA,0024 (SP)
  1327. @801C811C: option 6
  1328. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1329. 00000000 NOP
  1330. 10000019 BEQ R0,R0,+25
  1331. 8FBF0024 LW RA,0024 (SP)
  1332. @801C812C: option 8
  1333. 0C0721F0 JAL 801C87C0 # return -1 if 801E0D7E[0] == 0 or recent sensecode @801E0D18+68 == 0 else return sensecode
  1334. 00000000 NOP
  1335. 10000014 BEQ R0,R0,+20
  1336. AE020004 SW V0,0004 (S0)
  1337. @801C813C: option 9
  1338. 0C072217 JAL 801C885C
  1339. 00000000 NOP
  1340. 10000011 BEQ R0,R0,+17
  1341. 8FBF0024 LW RA,0024 (SP)
  1342. @801C814C: option 0xA
  1343. 0C07222B JAL 801C88AC
  1344. 00000000 NOP
  1345. 1000000D BEQ R0,R0,+13
  1346. 8FBF0024 LW RA,0024 (SP)
  1347. @801C815C: option 0xB - True if IPL missing
  1348. 0C07223F JAL 801C88FC # V0 = True if IPL not found else False; sets sensecode 8 (leo busy) if found
  1349. 00000000 NOP
  1350. 10000009 BEQ R0,R0,+9 # return True if IPL not found else False
  1351. 8FBF0024 LW RA,0024 (SP)
  1352. @801C816C: option 0xC: 801D2EA0 = 0
  1353. 3C01801D LUI AT,801D
  1354. 10000004 BEQ R0,R0,+4 # 801D2EA0 = 0; return 0
  1355. AC202EA0 SW R0,2EA0 (AT)
  1356. @801C8178: option 0xD: 801D2EA0 = 1
  1357. 24180001 ADDIU T8,R0,0001
  1358. 3C01801D LUI AT,801D
  1359. AC382EA0 SW T8,2EA0 (AT) # 801D2EA0 = 1; return 0
  1360. 00001025 OR V0,R0,R0
  1361. @801C8188: return
  1362. 8FBF0024 LW RA,0024 (SP)
  1363. 8FB00020 LW S0,0020 (SP)
  1364. 27BD0028 ADDIU SP,SP,0028
  1365. 03E00008 JR RA
  1366. 00000000 NOP
  1367.  
  1368. 801C819C 0x131C 801D2E60 = 1 if A0 else 2
  1369. accepts: A0
  1370. 10800005 BEQ A0,R0,+5
  1371. 240F0002 ADDIU T7,R0,0002
  1372. 240E0001 ADDIU T6,R0,0001
  1373. 3C01801D LUI AT,801D
  1374. 03E00008 JR RA
  1375. AC2E2E60 SW T6,2E60 (AT)
  1376. 3C01801D LUI AT,801D
  1377. AC2F2E60 SW T7,2E60 (AT)
  1378. 03E00008 JR RA
  1379. 00000000 NOP
  1380.  
  1381. 801C81C4 0x1344 V0 = @801D2E60
  1382. 3C02801D LUI V0,801D
  1383. 8C422E60 LW V0,2E60 (V0)
  1384. 03E00008 JR RA
  1385. 00000000 NOP
  1386.  
  1387. 801C81D4 0x1354 True if leo threads successfully started (801D2E64 is True)
  1388. 3C02801D LUI V0,801D
  1389. 8C422E64 LW V0,2E64 (V0)
  1390. 38420001 XORI V0,V0,0001
  1391. 2C420001 SLTIU V0,V0,0001
  1392. 03E00008 JR RA
  1393. 00000000 NOP
  1394.  
  1395. 801C81EC 0x136C start leo threads
  1396. accepts: A0=p->struct
  1397. 27BDFFE8 ADDIU SP,SP,FFE8
  1398. AFBF0014 SW RA,0014 (SP)
  1399. AFA40018 SW A0,0018 (SP)
  1400. 8FA40018 LW A0,0018 (SP)
  1401. 3C05801E LUI A1,801E
  1402. 24A50D88 ADDIU A1,A1,0D88 # msg = 801E0D88
  1403. 24060001 ADDIU A2,R0,0001 # msgs = 1
  1404. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  1405. 2484001C ADDIU A0,A0,001C # queue = A0+1C
  1406. 3C0E8000 LUI T6,8000
  1407. 8DCE6280 LW T6,6280 (T6)
  1408. 24010001 ADDIU AT,R0,0001
  1409. 24040095 ADDIU A0,R0,0095
  1410. 15C1000A BNE T6,AT,+10 # if @80006280 != 1: English
  1411. 24050096 ADDIU A1,R0,0096
  1412. @801C8228: Japanese
  1413. 3C06801E LUI A2,801E
  1414. 24C60D90 ADDIU A2,A2,0D90
  1415. 24040095 ADDIU A0,R0,0095
  1416. 24050096 ADDIU A1,R0,0096
  1417. 0C07485C JAL 801D2170 # Japanese-start leo threads
  1418. 24070008 ADDIU A3,R0,0008
  1419. 8FAF0018 LW T7,0018 (SP)
  1420. 10000007 BEQ R0,R0,+7
  1421. ADE20068 SW V0,0068 (T7)
  1422. @801C824C: English
  1423. 3C06801E LUI A2,801E
  1424. 24C60D90 ADDIU A2,A2,0D90
  1425. 0C074AA0 JAL 801D2A80 # English+Debug-start leo threads
  1426. 24070008 ADDIU A3,R0,0008
  1427. 8FB80018 LW T8,0018 (SP)
  1428. AF020068 SW V0,0068 (T8) # A0+68 = sensecode
  1429. @801C8264
  1430. 8FB90018 LW T9,0018 (SP)
  1431. 24010029 ADDIU AT,R0,0029
  1432. 24080001 ADDIU T0,R0,0001
  1433. 8F220068 LW V0,0068 (T9)
  1434. 10410002 BEQ V0,AT,+2
  1435. 00000000 NOP
  1436. 14400002 BNE V0,R0,+2
  1437. 3C01801D LUI AT,801D
  1438. AC282E64 SW T0,2E64 (AT) # 801D2E64 = True if no error or device communication failure
  1439. 8FBF0014 LW RA,0014 (SP)
  1440. 27BD0018 ADDIU SP,SP,0018
  1441. 03E00008 JR RA
  1442. 00000000 NOP
  1443.  
  1444. 801C8298 0x1418 read disk ID to struct A0
  1445. accepts: A0=struct
  1446. 27BDFFC8 ADDIU SP,SP,FFC8
  1447. AFBF0014 SW RA,0014 (SP)
  1448. 00803825 OR A3,A0,R0
  1449. 24E6001C ADDIU A2,A3,001C # queue = A0+1C
  1450. AFA60018 SW A2,0018 (SP)
  1451. 27A4001C ADDIU A0,SP,001C
  1452. 24E50038 ADDIU A1,A3,0038 # target = A0+38
  1453. 0C073064 JAL 801CC190 # read disk ID to A1 using leocmd A0, informing queue A2; return 0 if okay, -1 if leo not started
  1454. AFA70038 SW A3,0038 (SP)
  1455. 8FA70038 LW A3,0038 (SP)
  1456. 8FA40018 LW A0,0018 (SP) # queue
  1457. 24060001 ADDIU A2,R0,0001
  1458. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  1459. 24E50068 ADDIU A1,A3,0068 # target = A0+68
  1460. 8FBF0014 LW RA,0014 (SP)
  1461. 27BD0038 ADDIU SP,SP,0038
  1462. 03E00008 JR RA
  1463. 00000000 NOP
  1464.  
  1465. 801C82E0 0x1460 apply brake
  1466. accepts: A0=p->struct
  1467. 27BDFFC8 ADDIU SP,SP,FFC8
  1468. AFBF0014 SW RA,0014 (SP)
  1469. AFA40038 SW A0,0038 (SP)
  1470. 8FA70038 LW A3,0038 (SP)
  1471. 27A4001C ADDIU A0,SP,001C
  1472. 24050004 ADDIU A1,R0,0004 # brake on
  1473. 24E7001C ADDIU A3,A3,001C
  1474. 00E03025 OR A2,A3,R0
  1475. 0C073334 JAL 801CCCD0 # send start/stop (A1) leocmd A0, informing queue A2
  1476. AFA70018 SW A3,0018 (SP)
  1477. 8FA50038 LW A1,0038 (SP)
  1478. 8FA40018 LW A0,0018 (SP)
  1479. 24060001 ADDIU A2,R0,0001 # wait
  1480. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  1481. 24A50068 ADDIU A1,A1,0068
  1482. 8FBF0014 LW RA,0014 (SP)
  1483. 27BD0038 ADDIU SP,SP,0038
  1484. 03E00008 JR RA
  1485. 00000000 NOP
  1486.  
  1487. 801C832C 0x14AC read requested (A0) bytelength from LBA
  1488. accepts: A0=p->struct
  1489. 27BDFFC8 ADDIU SP,SP,FFC8
  1490. AFB00020 SW S0,0020 (SP)
  1491. 00808025 OR S0,A0,R0
  1492. AFBF0024 SW RA,0024 (SP)
  1493. 8E04005C LW A0,005C (S0)
  1494. 8E050060 LW A1,0060 (S0)
  1495. 27A60034 ADDIU A2,SP,0034
  1496. 0C0739A0 JAL 801CE680 # V0=sensecode; A2 = #LBAs for A1 bytes at LBA A0
  1497. AFA40030 SW A0,0030 (SP)
  1498. 1440000E BNE V0,R0,+14
  1499. 02002025 OR A0,S0,R0
  1500. 8FAE0034 LW T6,0034 (SP)
  1501. 8E070058 LW A3,0058 (S0)
  1502. 2602001C ADDIU V0,S0,001C
  1503. AFA20014 SW V0,0014 (SP)
  1504. AFA20028 SW V0,0028 (SP)
  1505. 00002825 OR A1,R0,R0 # read
  1506. 8FA60030 LW A2,0030 (SP)
  1507. 0C0729D0 JAL 801CA740 # send read or write (A1) leocmd A0 for SP+10 blocks between LBA A2 and rdram A3, notifying queue SP+14
  1508. AFAE0010 SW T6,0010 (SP)
  1509. 8FA40028 LW A0,0028 (SP)
  1510. 26050068 ADDIU A1,S0,0068
  1511. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  1512. 24060001 ADDIU A2,R0,0001
  1513. 8FBF0024 LW RA,0024 (SP)
  1514. 8FB00020 LW S0,0020 (SP)
  1515. 27BD0038 ADDIU SP,SP,0038
  1516. 03E00008 JR RA
  1517. 00000000 NOP
  1518.  
  1519. 801C83A0 0x1520 write requested (A0) bytelength to LBA
  1520. accepts: A0=p->struct
  1521. 27BDFFC8 ADDIU SP,SP,FFC8
  1522. AFB00020 SW S0,0020 (SP)
  1523. 00808025 OR S0,A0,R0
  1524. AFBF0024 SW RA,0024 (SP)
  1525. 8E040058 LW A0,0058 (S0) # LBA = @A0+58
  1526. 8E050060 LW A1,0060 (S0) # bytelength = @A0+60
  1527. 27A60034 ADDIU A2,SP,0034 # target
  1528. 0C0739A0 JAL 801CE680 # V0=sensecode; A2 = #LBAs for A1 bytes at LBA A0
  1529. AFA40030 SW A0,0030 (SP)
  1530. 1440000E BNE V0,R0,+14 # if error: return error
  1531. 02002025 OR A0,S0,R0
  1532. 8FAE0034 LW T6,0034 (SP)
  1533. 8E07005C LW A3,005C (S0) # rdram = @A0+5C
  1534. 2602001C ADDIU V0,S0,001C
  1535. AFA20014 SW V0,0014 (SP) # queue = A0+1C
  1536. AFA20028 SW V0,0028 (SP)
  1537. 24050001 ADDIU A1,R0,0001 # write
  1538. 8FA60030 LW A2,0030 (SP) # LBA = @A0+58
  1539. 0C0729D0 JAL 801CA740 # send read or write (A1) leocmd A0 for SP+10 blocks between LBA A2 and rdram A3, notifying queue SP+14
  1540. AFAE0010 SW T6,0010 (SP) # blocks = @SP+34
  1541. 8FA40028 LW A0,0028 (SP) # queue = A0+1C
  1542. 26050068 ADDIU A1,S0,0068 # target = A0+68
  1543. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  1544. 24060001 ADDIU A2,R0,0001 # wait
  1545. 8FBF0024 LW RA,0024 (SP)
  1546. 8FB00020 LW S0,0020 (SP)
  1547. 27BD0038 ADDIU SP,SP,0038
  1548. 03E00008 JR RA
  1549. 00000000 NOP
  1550.  
  1551. 801C8414 0x1594 set msg for request A0 to 9
  1552. accepts: A0=p->struct
  1553. 240E0009 ADDIU T6,R0,0009
  1554. AC8E0068 SW T6,0068 (A0)
  1555. 03E00008 JR RA
  1556. 00000000 NOP
  1557.  
  1558. 801C8424 0x15A4 run leo init command (A0[64]) using struct A0
  1559. accepts: A0=p->struct
  1560. 27BDFFD8 ADDIU SP,SP,FFD8
  1561. AFB00014 SW S0,0014 (SP)
  1562. 00808025 OR S0,A0,R0
  1563. AFBF0024 SW RA,0024 (SP)
  1564. AFB30020 SW S3,0020 (SP)
  1565. AFB2001C SW S2,001C (SP)
  1566. AFB10018 SW S1,0018 (SP)
  1567. 240EFFFF ADDIU T6,R0,FFFF
  1568. 0C072075 JAL 801C81D4 # True if leo threads successfully started (801D2E64 is True)
  1569. AE0E0068 SW T6,0068 (S0) # struct+68 = -1
  1570. 14400004 BNE V0,R0,+4
  1571. 24180001 ADDIU T8,R0,0001
  1572. 920F0064 LBU T7,0064 (S0)
  1573. 55E00018 BNEL T7,R0,+24
  1574. 8FBF0024 LW RA,0024 (SP)
  1575. 92190064 LBU T9,0064 (S0) # init state = struct[64]
  1576. 3C09801D LUI T1,801D
  1577. 25292E68 ADDIU T1,T1,2E68
  1578. 001940C0 SLL T0,T9,0x3
  1579. A2180066 SB T8,0066 (S0)
  1580. 01091021 ADDU V0,T0,T1 # p->functions = 801D2E68 + (@struct+64 * 8)
  1581. 8C510000 LW S1,0000 (V0)
  1582. 8C520004 LW S2,0004 (V0)
  1583. 24130002 ADDIU S3,R0,0002
  1584. 0220F809 JALR RA,S1
  1585. 02002025 OR A0,S0,R0
  1586. 0240F809 JALR RA,S2
  1587. 02002025 OR A0,S0,R0
  1588. 1053FFFB BEQ V0,S3,-5
  1589. 00402025 OR A0,V0,R0
  1590. 920A0064 LBU T2,0064 (S0)
  1591. AE02006C SW V0,006C (S0)
  1592. 55400004 BNEL T2,R0,+4
  1593. A2000066 SB R0,0066 (S0)
  1594. 0C072067 JAL 801C819C # 801D2E60 = 1 if A0 else 2
  1595. 00000000 NOP
  1596. A2000066 SB R0,0066 (S0)
  1597. 8FBF0024 LW RA,0024 (SP)
  1598. 8FB00014 LW S0,0014 (SP)
  1599. 8FB10018 LW S1,0018 (SP)
  1600. 8FB2001C LW S2,001C (SP)
  1601. 8FB30020 LW S3,0020 (SP)
  1602. 03E00008 JR RA
  1603. 27BD0028 ADDIU SP,SP,0028
  1604.  
  1605. 801C84D4 0x1654 Thread: runs init command set in struct
  1606. [listens to @801E0D10, funnels msg through 801C8424(), signals @801E0D14 complete]
  1607. 27BDFFD8 ADDIU SP,SP,FFD8
  1608. AFBF001C SW RA,001C (SP)
  1609. AFB10018 SW S1,0018 (SP)
  1610. AFB00014 SW S0,0014 (SP)
  1611. AFA40028 SW A0,0028 (SP)
  1612. 3C10801E LUI S0,801E
  1613. 26100D10 ADDIU S0,S0,0D10
  1614. 27B10024 ADDIU S1,SP,0024
  1615. @801C84F4
  1616. 8E040000 LW A0,0000 (S0) # queue = @801E0D10
  1617. 02202825 OR A1,S1,R0
  1618. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  1619. 24060001 ADDIU A2,R0,0001 # wait
  1620. 0C072109 JAL 801C8424 # run leo init command (A0[64]) using struct A0
  1621. 8FA40024 LW A0,0024 (SP) # msg is presumed to be p->struct
  1622. 8E040004 LW A0,0004 (S0) # queue = @801E0D14
  1623. 00002825 OR A1,R0,R0
  1624. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  1625. 24060001 ADDIU A2,R0,0001 # jam
  1626. 1000FFF6 BEQ R0,R0,-10
  1627. 8E040000 LW A0,0000 (S0)
  1628. 00000000 NOP
  1629. 00000000 NOP
  1630. 00000000 NOP
  1631. 00000000 NOP
  1632. 00000000 NOP
  1633. 00000000 NOP
  1634. 00000000 NOP
  1635. 8FBF001C LW RA,001C (SP)
  1636. 8FB00014 LW S0,0014 (SP)
  1637. 8FB10018 LW S1,0018 (SP)
  1638. 03E00008 JR RA
  1639. 27BD0028 ADDIU SP,SP,0028
  1640.  
  1641. 801C8554 0x16D4 ???; call 80002D70(801E0DB0)
  1642. 27BDFFE8 ADDIU SP,SP,FFE8
  1643. AFBF0014 SW RA,0014 (SP)
  1644. 3C04801E LUI A0,801E
  1645. 0C000B5C JAL 80002D70
  1646. 24840DB0 ADDIU A0,A0,0DB0 # A0 = 801E0DB0 [801E0D18+98]
  1647. 8FBF0014 LW RA,0014 (SP)
  1648. 27BD0018 ADDIU SP,SP,0018
  1649. 03E00008 JR RA
  1650. 00000000 NOP
  1651.  
  1652. 801C8578 0x16F8 create init cmd handler thread with ID A2 and priority SP+10, incoming queue A0, outgoing queue A1, stack at A3
  1653. accepts: A0=p->incoming queue, A1=p->outgoing queue, A2=ID, A3=p->stack, SP+10=priority
  1654. 27BDFFE0 ADDIU SP,SP,FFE0
  1655. 3C02801E LUI V0,801E
  1656. 24420D10 ADDIU V0,V0,0D10
  1657. AFBF001C SW RA,001C (SP)
  1658. AFA40020 SW A0,0020 (SP)
  1659. AFA50024 SW A1,0024 (SP)
  1660. AFA60028 SW A2,0028 (SP)
  1661. AFA7002C SW A3,002C (SP)
  1662. 8FAE0020 LW T6,0020 (SP)
  1663. 8FAF0024 LW T7,0024 (SP)
  1664. 8FB8002C LW T8,002C (SP)
  1665. 8FB90030 LW T9,0030 (SP)
  1666. 3C04801E LUI A0,801E
  1667. 3C06801D LUI A2,801D
  1668. 24C684D4 ADDIU A2,A2,84D4 # func = 801C84D4
  1669. 24840DB0 ADDIU A0,A0,0DB0 # thread = 801E0DB0
  1670. 8FA50028 LW A1,0028 (SP) # ID = A2 f/caller
  1671. 00003825 OR A3,R0,R0 # arg = 0
  1672. AC4E0000 SW T6,0000 (V0) # 801E0D10 = A0 f/caller
  1673. AC4F0004 SW T7,0004 (V0) # 801E0D14 = A1 f/caller
  1674. AFB80010 SW T8,0010 (SP) # SP = A3 f/caller
  1675. 0C000BC8 JAL 80002F20 # create thread A0, ID A1, calling A2(A3) with stack at SP+10, priority SP+14
  1676. AFB90014 SW T9,0014 (SP) # priority = SP+10 f/caller
  1677. 3C04801E LUI A0,801E
  1678. 0C0017B0 JAL 80005EC0 # start thread A0
  1679. 24840DB0 ADDIU A0,A0,0DB0 # thread = 801E0DB0
  1680. 8FBF001C LW RA,001C (SP)
  1681. 27BD0020 ADDIU SP,SP,0020
  1682. 03E00008 JR RA
  1683. 00000000 NOP
  1684.  
  1685. 801C85F0 0x1770 run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1686. accepts: A0=p->struct, A1=mode (0:run via thread, 1:run directly)
  1687. 27BDFFE8 ADDIU SP,SP,FFE8
  1688. AFBF0014 SW RA,0014 (SP)
  1689. 00803825 OR A3,A0,R0
  1690. 24010001 ADDIU AT,R0,0001
  1691. 14A10005 BNE A1,AT,+5
  1692. 3C04801E LUI A0,801E
  1693. 0C072109 JAL 801C8424 # run leo init command (A0[64]) using struct A0
  1694. 00E02025 OR A0,A3,R0
  1695. 10000006 BEQ R0,R0,+6
  1696. 8FBF0014 LW RA,0014 (SP)
  1697. 8C840D10 LW A0,0D10 (A0) # queue = @801E0D10
  1698. 00E02825 OR A1,A3,R0 # msg = A0
  1699. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  1700. 24060001 ADDIU A2,R0,0001 # jam
  1701. 8FBF0014 LW RA,0014 (SP)
  1702. 27BD0018 ADDIU SP,SP,0018
  1703. 03E00008 JR RA
  1704. 00000000 NOP
  1705.  
  1706. 801C8638 0x17B8 run "start leo threads" init command, setting 801E2EB4 = function A0, 801E0F70 = function A1, and 801D2EC0 = function A2
  1707. accepts: A0=p->function, A1=p->function or None, A2=p->function or None
  1708. 27BDFFE8 ADDIU SP,SP,FFE8
  1709. AFBF0014 SW RA,0014 (SP)
  1710. AFA40018 SW A0,0018 (SP)
  1711. 00A03825 OR A3,A1,R0
  1712. 00E02025 OR A0,A3,R0
  1713. 0C0726D4 JAL 801C9B50 # 801E0F70 = A0; 801D2EC0 = A1
  1714. 00C02825 OR A1,A2,R0
  1715. 8FAE0018 LW T6,0018 (SP)
  1716. 3C01801D LUI AT,801D
  1717. 3C04801E LUI A0,801E
  1718. AC2E2EB4 SW T6,2EB4 (AT) # 801E2EB4 = A0 f/caller
  1719. 3C01801E LUI AT,801E
  1720. A0200D7C SB R0,0D7C (AT) # struct[64] = 0: start leo threads
  1721. A0200D7D SB R0,0D7D (AT) # struct[65] = 0
  1722. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1723. 0C07217C JAL 801C85F0 # run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1724. 00002825 OR A1,R0,R0 # use threading
  1725. 8FBF0014 LW RA,0014 (SP)
  1726. 27BD0018 ADDIU SP,SP,0018
  1727. 03E00008 JR RA
  1728. 00000000 NOP
  1729.  
  1730. 801C868C 0x180C run init command to read or write (A3) A2 bytes between LBA A0 and rdram A1
  1731. accepts: A0=LBA, A1=rdram, A2=bytelength, A3=leo init cmd (1:read, 2:write)
  1732. 27BDFFE8 ADDIU SP,SP,FFE8
  1733. 3C02801D LUI V0,801D
  1734. 24422E90 ADDIU V0,V0,2E90
  1735. AFBF0014 SW RA,0014 (SP)
  1736. AFA40018 SW A0,0018 (SP)
  1737. AFA5001C SW A1,001C (SP)
  1738. AFA60020 SW A2,0020 (SP)
  1739. AFA70024 SW A3,0024 (SP)
  1740. 8C4E0000 LW T6,0000 (V0)
  1741. 24010001 ADDIU AT,R0,0001
  1742. 240F0004 ADDIU T7,R0,0004
  1743. 15C1000E BNE T6,AT,+14 # run directly if @801D2E90 == 1 else run threaded
  1744. 3C04801E LUI A0,801E
  1745. AC400000 SW R0,0000 (V0) # 801D2E90 = 0
  1746. 3C01801E LUI AT,801E
  1747. A02F0D7C SB T7,0D7C (AT) # 801E0D18[64] = 4
  1748. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1749. 0C07217C JAL 801C85F0 # run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1750. 24050001 ADDIU A1,R0,0001 # run directly
  1751. 3C02801E LUI V0,801E
  1752. 8C420D84 LW V0,0D84 (V0)
  1753. 24010003 ADDIU AT,R0,0003
  1754. 10410011 BEQ V0,AT,+17
  1755. 24010004 ADDIU AT,R0,0004
  1756. 50410010 BEQL V0,AT,+16 # if @801E0D18+6C in (3, 4), return
  1757. 8FBF0014 LW RA,0014 (SP)
  1758. @801C86F4
  1759. 8FB80018 LW T8,0018 (SP)
  1760. 8FB9001C LW T9,001C (SP)
  1761. 3C01801E LUI AT,801E
  1762. 8FA80020 LW T0,0020 (SP)
  1763. 93A90027 LBU T1,0027 (SP)
  1764. AC380D70 SW T8,0D70 (AT) # 801E0D18+58 = A0 f/caller
  1765. AC390D74 SW T9,0D74 (AT) # 801E0D18+5C = A1 f/caller
  1766. 3C01801E LUI AT,801E
  1767. 3C04801E LUI A0,801E
  1768. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1769. 00002825 OR A1,R0,R0 # use threading
  1770. AC280D78 SW T0,0D78 (AT) # 801E0D18+60 = A2 f/caller
  1771. 0C07217C JAL 801C85F0 # run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1772. A0290D7C SB T1,0D7C (AT) # 801E0D18[64] = A3 f/caller
  1773. 8FBF0014 LW RA,0014 (SP)
  1774. 27BD0018 ADDIU SP,SP,0018
  1775. 03E00008 JR RA
  1776. 00000000 NOP
  1777.  
  1778. 801C873C 0x18BC V0 = True if disk present else False
  1779. accepts: A0=p->struct
  1780. 27BDFFE0 ADDIU SP,SP,FFE0
  1781. AFBF0014 SW RA,0014 (SP)
  1782. AFA40020 SW A0,0020 (SP)
  1783. 0C074B2C JAL 801D2CB0 # V0 = sensecode; A0 = motor state (1: disk removed, 2:head retracted, 4:spindle stopped)
  1784. 27A4001F ADDIU A0,SP,001F
  1785. 8FAE0020 LW T6,0020 (SP)
  1786. ADC20068 SW V0,0068 (T6)
  1787. 93A2001F LBU V0,001F (SP)
  1788. 8FBF0014 LW RA,0014 (SP)
  1789. 30420001 ANDI V0,V0,0001
  1790. 2C420001 SLTIU V0,V0,0001
  1791. 03E00008 JR RA
  1792. 27BD0020 ADDIU SP,SP,0020
  1793.  
  1794. 801C8770 0x18F0 V0 = 0 if busy, 1 if error, 2 if okay after test unit ready result
  1795. 27BDFFE8 ADDIU SP,SP,FFE8
  1796. AFBF0014 SW RA,0014 (SP)
  1797. 3C04801E LUI A0,801E
  1798. 0C0721CF JAL 801C873C # V0 = True if disk present else False
  1799. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1800. 3C0E801E LUI T6,801E
  1801. 8DCE0D80 LW T6,0D80 (T6) # sensecode = @801E0D18+68
  1802. 24010008 ADDIU AT,R0,0008
  1803. 8FBF0014 LW RA,0014 (SP)
  1804. 15C10003 BNE T6,AT,+3
  1805. 00000000 NOP
  1806. 10000006 BEQ R0,R0,+6 # if sensecode == 8: return 0 (leo busy)
  1807. 00001025 OR V0,R0,R0
  1808. 54400004 BNEL V0,R0,+4 # if sensecode: return 1
  1809. 24020001 ADDIU V0,R0,0001
  1810. 10000002 BEQ R0,R0,+2 # if okay: return 2
  1811. 24020002 ADDIU V0,R0,0002
  1812. 24020001 ADDIU V0,R0,0001
  1813. 03E00008 JR RA
  1814. 27BD0018 ADDIU SP,SP,0018
  1815.  
  1816. 801C87C0 0x1940 return -1 if 801E0D7E[0] == 0 or recent sensecode @801E0D18+68 == 0 else return sensecode
  1817. 27BDFFE8 ADDIU SP,SP,FFE8
  1818. AFBF0014 SW RA,0014 (SP)
  1819. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1820. 00000000 NOP
  1821. 14400007 BNE V0,R0,+7 # if V0, return -1
  1822. 8FBF0014 LW RA,0014 (SP)
  1823. 3C03801E LUI V1,801E
  1824. 8C630D80 LW V1,0D80 (V1) # sensecode = @801E0D18+68
  1825. 50600004 BEQL V1,R0,+4 # if not sensecode, return -1
  1826. 2402FFFF ADDIU V0,R0,FFFF
  1827. 10000002 BEQ R0,R0,+2 # else, return sensecode
  1828. 00601025 OR V0,V1,R0
  1829. 2402FFFF ADDIU V0,R0,FFFF
  1830. 03E00008 JR RA
  1831. 27BD0018 ADDIU SP,SP,0018
  1832.  
  1833. 801C87FC 0x197C
  1834. 27BDFFE8 ADDIU SP,SP,FFE8
  1835. AFBF0014 SW RA,0014 (SP)
  1836. 0C072211 JAL 801C8844 # V0 = True if 801E0D7E[0] == 0 else False
  1837. 00000000 NOP
  1838. 1440000A BNE V0,R0,+10 # if V0, return 0
  1839. 8FBF0014 LW RA,0014 (SP)
  1840. 3C02801E LUI V0,801E
  1841. 8C420D84 LW V0,0D84 (V0)
  1842. 24010003 ADDIU AT,R0,0003
  1843. 10410002 BEQ V0,AT,+2
  1844. 24010004 ADDIU AT,R0,0004
  1845. 14410003 BNE V0,AT,+3
  1846. 3C02801E LUI V0,801E
  1847. 10000002 BEQ R0,R0,+2
  1848. 8C420D80 LW V0,0D80 (V0) # if @801E0D84 in (3, 4), return sensecode f/ @801E0D18+68
  1849. 00001025 OR V0,R0,R0 # else, return 0
  1850. 03E00008 JR RA
  1851. 27BD0018 ADDIU SP,SP,0018
  1852.  
  1853. 801C8844 0x19C4 V0 = True if 801E0D7E[0] == 0 else False
  1854. 3C02801E LUI V0,801E
  1855. 90420D7E LBU V0,0D7E (V0)
  1856. 38420001 XORI V0,V0,0001
  1857. 2C420001 SLTIU V0,V0,0001
  1858. 03E00008 JR RA
  1859. 00000000 NOP
  1860.  
  1861. 801C885C 0x19DC
  1862. 27BDFFE8 ADDIU SP,SP,FFE8
  1863. 3C04801E LUI A0,801E
  1864. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1865. AFBF0014 SW RA,0014 (SP)
  1866. 240E0003 ADDIU T6,R0,0003
  1867. A08E0064 SB T6,0064 (A0) # struct[64] = 3
  1868. 0C07217C JAL 801C85F0 # run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1869. 24050001 ADDIU A1,R0,0001 # run directly
  1870. 3C03801E LUI V1,801E
  1871. 8C630D84 LW V1,0D84 (V1) # @801E0D18+6C
  1872. 24010003 ADDIU AT,R0,0003
  1873. 8FBF0014 LW RA,0014 (SP)
  1874. 10610003 BEQ V1,AT,+3 # if @801E0D84 in (3, 4), return -1
  1875. 24010004 ADDIU AT,R0,0004
  1876. 14610003 BNE V1,AT,+3 # else, return True if not @801E0D84 else False
  1877. 2C620001 SLTIU V0,V1,0001
  1878. 10000001 BEQ R0,R0,+1
  1879. 2402FFFF ADDIU V0,R0,FFFF
  1880. 03E00008 JR RA
  1881. 27BD0018 ADDIU SP,SP,0018
  1882.  
  1883. 801C88AC 0x1A2C
  1884. 27BDFFE8 ADDIU SP,SP,FFE8
  1885. 3C04801E LUI A0,801E
  1886. 24840D18 ADDIU A0,A0,0D18 # struct = 801E0D18
  1887. AFBF0014 SW RA,0014 (SP)
  1888. 240E0004 ADDIU T6,R0,0004
  1889. A08E0064 SB T6,0064 (A0) # struct[64] = 4
  1890. 0C07217C JAL 801C85F0 # run leo init command (A0[64]) indirectly or directly (A1) using struct A0
  1891. 24050001 ADDIU A1,R0,0001 # run directly
  1892. 3C03801E LUI V1,801E
  1893. 8C630D84 LW V1,0D84 (V1)
  1894. 24010003 ADDIU AT,R0,0003
  1895. 8FBF0014 LW RA,0014 (SP)
  1896. 10610003 BEQ V1,AT,+3 # if @801E0D84 in (3, 4), return -1
  1897. 24010004 ADDIU AT,R0,0004
  1898. 14610003 BNE V1,AT,+3 # else, return True if not @801E0D84 else False
  1899. 2C620001 SLTIU V0,V1,0001
  1900. 10000001 BEQ R0,R0,+1
  1901. 2402FFFF ADDIU V0,R0,FFFF
  1902. 03E00008 JR RA
  1903. 27BD0018 ADDIU SP,SP,0018
  1904.  
  1905. 801C88FC 0x1A7C V0 = True if IPL not found else False; sets sensecode 8 (leo busy) if found
  1906. 27BDFFE8 ADDIU SP,SP,FFE8
  1907. AFBF0014 SW RA,0014 (SP)
  1908. 0C073848 JAL 801CE120 # V0 = True if IPL valid else False
  1909. 00000000 NOP
  1910. 10400003 BEQ V0,R0,+3
  1911. 3C01801E LUI AT,801E
  1912. 10000002 BEQ R0,R0,+2
  1913. 24030008 ADDIU V1,R0,0008
  1914. 00001825 OR V1,R0,R0
  1915. 2C620001 SLTIU V0,V1,0001 # return True if IPL not found else False
  1916. AC230D80 SW V1,0D80 (AT) # sensecode = leo busy if call 801CE120 else 0
  1917. 8FBF0014 LW RA,0014 (SP)
  1918. 27BD0018 ADDIU SP,SP,0018
  1919. 03E00008 JR RA
  1920. 00000000 NOP
  1921.  
  1922. 00000000 NOP
  1923. 00000000 NOP
  1924.  
  1925. 801C8940 0x1AC0 create and display image for leo error# A0
  1926. accepts: A0=sensecode
  1927. 27BDFFE8 ADDIU SP,SP,FFE8
  1928. AFBF0014 SW RA,0014 (SP)
  1929. 0C07278A JAL 801C9E28 # V0 = p->image for error# string
  1930. 00000000 NOP
  1931. 3C01801D LUI AT,801D
  1932. AC222EA4 SW V0,2EA4 (AT) # 801D2EA4 = p->image for error# string
  1933. 3C01801D LUI AT,801D
  1934. 240E0001 ADDIU T6,R0,0001
  1935. AC2E2EA8 SW T6,2EA8 (AT) # 801D2EA8 = True: display error image
  1936. 8FBF0014 LW RA,0014 (SP)
  1937. 27BD0018 ADDIU SP,SP,0018
  1938. 03E00008 JR RA
  1939. 00000000 NOP
  1940.  
  1941. 801C8974 0x1AF4 if error# image is displayed remove it
  1942. 27BDFFE8 ADDIU SP,SP,FFE8
  1943. AFBF0014 SW RA,0014 (SP)
  1944. 3C0E801D LUI T6,801D
  1945. 8DCE2EA8 LW T6,2EA8 (T6) # @801D2EA8: display error image if True
  1946. 24010001 ADDIU AT,R0,0001
  1947. 55C10008 BNEL T6,AT,+8 # return if no error to display
  1948. 8FBF0014 LW RA,0014 (SP)
  1949. 0C0727B0 JAL 801C9EC0 # V0 = 801E0F80; initialize image at 801E0F80
  1950. 00000000 NOP
  1951. 3C01801D LUI AT,801D
  1952. AC222EA4 SW V0,2EA4 (AT) # 801D2EA4 = 801E0F80
  1953. 3C01801D LUI AT,801D
  1954. AC202EA8 SW R0,2EA8 (AT) # 801D2EA8 = False
  1955. 8FBF0014 LW RA,0014 (SP)
  1956. 27BD0018 ADDIU SP,SP,0018
  1957. 03E00008 JR RA
  1958. 00000000 NOP
  1959.  
  1960. 801C89B8 0x1B38 create and display image for error text of sensecode A0
  1961. accepts: A0=sensecode
  1962. 27BDFFE8 ADDIU SP,SP,FFE8
  1963. AFBF0014 SW RA,0014 (SP)
  1964. 0C0727E4 JAL 801C9F90 # V0 = 801E1580; draw error A0's text to image at 801E1580
  1965. 00000000 NOP
  1966. 3C01801D LUI AT,801D
  1967. AC222EAC SW V0,2EAC (AT) # 801D2EAC = p->image for leo error text image
  1968. 3C01801E LUI AT,801E
  1969. 240E0001 ADDIU T6,R0,0001
  1970. AC2E0F60 SW T6,0F60 (AT) # 801E0F60 = True: display leo error text image
  1971. 8FBF0014 LW RA,0014 (SP)
  1972. 27BD0018 ADDIU SP,SP,0018
  1973. 03E00008 JR RA
  1974. 00000000 NOP
  1975.  
  1976. 801C89EC 0x1B6C if error text image is displayed remove it
  1977. 27BDFFE8 ADDIU SP,SP,FFE8
  1978. AFBF0014 SW RA,0014 (SP)
  1979. 3C0E801E LUI T6,801E
  1980. 8DCE0F60 LW T6,0F60 (T6) # @801E0F60: display leo error text image if True
  1981. 24010001 ADDIU AT,R0,0001
  1982. 55C10008 BNEL T6,AT,+8 # return if no error to display
  1983. 8FBF0014 LW RA,0014 (SP)
  1984. 0C0727FF JAL 801C9FFC # V0 = 801E1580; initialize image at 801E1580
  1985. 00000000 NOP
  1986. 3C01801D LUI AT,801D
  1987. AC222EAC SW V0,2EAC (AT) # 801D2EAC = p->image for leo error text image
  1988. 3C01801E LUI AT,801E
  1989. AC200F60 SW R0,0F60 (AT) # 801E0F60 = False
  1990. 8FBF0014 LW RA,0014 (SP)
  1991. 27BD0018 ADDIU SP,SP,0018
  1992. 03E00008 JR RA
  1993. 00000000 NOP
  1994.  
  1995. 801C8A30 0x1BB0 create and display image for disk removal/insertion error A0
  1996. accepts: A0=leo error msg
  1997. 27BDFFE8 ADDIU SP,SP,FFE8
  1998. AFBF0014 SW RA,0014 (SP)
  1999. 0C07280C JAL 801CA030 # V0 = 801E3D80; draw disk removal/insertion leo error to image 801E3D80
  2000. 00000000 NOP
  2001. 3C01801D LUI AT,801D
  2002. AC222EB0 SW V0,2EB0 (AT) # 801D2EB0 = 801E3D80: p->image
  2003. 3C01801E LUI AT,801E
  2004. 240E0001 ADDIU T6,R0,0001
  2005. AC2E0F64 SW T6,0F64 (AT) # 801E0F64 = True: display disk removal/insertion error image
  2006. 8FBF0014 LW RA,0014 (SP)
  2007. 27BD0018 ADDIU SP,SP,0018
  2008. 03E00008 JR RA
  2009. 00000000 NOP
  2010.  
  2011. 801C8A64 0x1BE4 if disk removal/insertion error image is displayed remove it
  2012. 27BDFFE8 ADDIU SP,SP,FFE8
  2013. AFBF0014 SW RA,0014 (SP)
  2014. 3C0E801E LUI T6,801E
  2015. 8DCE0F64 LW T6,0F64 (T6) # @801E0F60: display disk removal/insertion error image if True
  2016. 24010001 ADDIU AT,R0,0001
  2017. 55C10008 BNEL T6,AT,+8 # return if no error to display
  2018. 8FBF0014 LW RA,0014 (SP)
  2019. 0C07281C JAL 801CA070 # V0 = 801E3D80; initialize image at 801E3D80
  2020. 00000000 NOP
  2021. 3C01801D LUI AT,801D
  2022. AC222EB0 SW V0,2EB0 (AT) # 801D2EB0 = 801E3D80: p->image
  2023. 3C01801E LUI AT,801E
  2024. AC200F64 SW R0,0F64 (AT) # 801E0F64 = False
  2025. 8FBF0014 LW RA,0014 (SP)
  2026. 27BD0018 ADDIU SP,SP,0018
  2027. 03E00008 JR RA
  2028. 00000000 NOP
  2029.  
  2030. 801C8AA8 0x1C28
  2031. 27BDFFD8 ADDIU SP,SP,FFD8
  2032. AFBF0014 SW RA,0014 (SP)
  2033. 3C04801E LUI A0,801E
  2034. 8C840D14 LW A0,0D14 (A0) # queue = @801E0D14
  2035. 00002825 OR A1,R0,R0
  2036. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  2037. 00003025 OR A2,R0,R0 # read
  2038. 3C0E801D LUI T6,801D
  2039. 8DCE2EB4 LW T6,2EB4 (T6)
  2040. 3C0F801D LUI T7,801D
  2041. 51C0001E BEQL T6,R0,+30 # if @801D2EB4 is None, return
  2042. 8FBF0014 LW RA,0014 (SP)
  2043. 8DEF2EA0 LW T7,2EA0 (T7)
  2044. 55E0001B BNEL T7,R0,+27 # if @801D2EA0, return
  2045. 8FBF0014 LW RA,0014 (SP)
  2046. 0C000F30 JAL 80003CC0 # V0 = Status; set interrupts in Status and MI Int using flags A0
  2047. 24040001 ADDIU A0,R0,0001
  2048. 3C03801D LUI V1,801D
  2049. 3C05801D LUI A1,801D
  2050. 3C06801D LUI A2,801D
  2051. 24C62EB0 ADDIU A2,A2,2EB0
  2052. 24A52EAC ADDIU A1,A1,2EAC
  2053. 24632EA4 ADDIU V1,V1,2EA4
  2054. 8C780000 LW T8,0000 (V1) # T8 = @801D2EA4
  2055. 8CB90000 LW T9,0000 (A1) # T9 = @801D2EAC
  2056. 8CC80000 LW T0,0000 (A2) # T0 = @801D2EB0
  2057. AC600000 SW R0,0000 (V1) # 801D2EA4 = 0
  2058. ACA00000 SW R0,0000 (A1) # 801D2EAC = 0
  2059. ACC00000 SW R0,0000 (A2) # 801D2EB0 = 0
  2060. 00402025 OR A0,V0,R0
  2061. AFB80020 SW T8,0020 (SP)
  2062. AFB9001C SW T9,001C (SP)
  2063. 0C000F30 JAL 80003CC0 # V0 = Status; set interrupts in Status and MI Int using flags A0
  2064. AFA80018 SW T0,0018 (SP)
  2065. 3C19801D LUI T9,801D
  2066. 8F392EB4 LW T9,2EB4 (T9) # func = @801D2EB4
  2067. 8FA40020 LW A0,0020 (SP) # A0 = @801D2EA4
  2068. 8FA5001C LW A1,001C (SP) # A1 = @801D2EAC
  2069. 0320F809 JALR RA,T9
  2070. 8FA60018 LW A2,0018 (SP) # A2 = @801D2EB0
  2071. 8FBF0014 LW RA,0014 (SP)
  2072. 27BD0028 ADDIU SP,SP,0028
  2073. 03E00008 JR RA
  2074. 00000000 NOP
  2075.  
  2076. 801C8B58 0x1CD8 display error# A0 with error text A1 and disk removal/insertion text A2
  2077. accepts: A0=sensecode, A1=sensecode, A2=removal/insertion error#
  2078. 27BDFFE8 ADDIU SP,SP,FFE8
  2079. AFBF0014 SW RA,0014 (SP)
  2080. AFA5001C SW A1,001C (SP)
  2081. AFA60020 SW A2,0020 (SP)
  2082. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2083. 00000000 NOP
  2084. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2085. 8FA4001C LW A0,001C (SP)
  2086. 0C07228C JAL 801C8A30 # create and display image for disk removal/insertion error A0
  2087. 8FA40020 LW A0,0020 (SP)
  2088. 8FBF0014 LW RA,0014 (SP)
  2089. 27BD0018 ADDIU SP,SP,0018
  2090. 03E00008 JR RA
  2091. 00000000 NOP
  2092.  
  2093. 801C8B90 0x1D10 remove all error images
  2094. 27BDFFE8 ADDIU SP,SP,FFE8
  2095. AFBF0014 SW RA,0014 (SP)
  2096. 0C07225D JAL 801C8974 # if error# image is displayed remove it
  2097. 00000000 NOP
  2098. 0C07227B JAL 801C89EC # if error text image is displayed remove it
  2099. 00000000 NOP
  2100. 0C072299 JAL 801C8A64 # if disk removal/insertion error image is displayed remove it
  2101. 00000000 NOP
  2102. 8FBF0014 LW RA,0014 (SP)
  2103. 27BD0018 ADDIU SP,SP,0018
  2104. 03E00008 JR RA
  2105. 00000000 NOP
  2106.  
  2107. 801C8BC0 0x1D40 display current error unless invalid command, invalid LBA, or waiting NMI
  2108. accepts: A0=p->struct
  2109. 27BDFFE8 ADDIU SP,SP,FFE8
  2110. AFBF0014 SW RA,0014 (SP)
  2111. 8C850068 LW A1,0068 (A0) # sensecode = @struct+68
  2112. 28A10025 SLTI AT,A1,0025
  2113. 14200002 BNE AT,R0,+2
  2114. 28A10029 SLTI AT,A1,0029
  2115. 14200009 BNE AT,R0,+9
  2116. 2401001F ADDIU AT,R0,001F
  2117. 10A10007 BEQ A1,AT,+7
  2118. 24010020 ADDIU AT,R0,0020 # pass errors 0x1F, 0x20, 0x25, 0x26, 0x27, 0x28
  2119. 10A10005 BEQ A1,AT,+5
  2120. 00000000 NOP
  2121. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2122. 00A02025 OR A0,A1,R0
  2123. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2124. 24040003 ADDIU A0,R0,0003
  2125. 0C07398C JAL 801CE630 # clear leocmd queue
  2126. 00000000 NOP
  2127. 24020004 ADDIU V0,R0,0004
  2128. 8FBF0014 LW RA,0014 (SP)
  2129. 27BD0018 ADDIU SP,SP,0018
  2130. 03E00008 JR RA
  2131. 00000000 NOP
  2132.  
  2133. 801C8C1C 0x1D9C
  2134. accepts: A0=p->struct
  2135. 27BDFFD0 ADDIU SP,SP,FFD0
  2136. AFB1001C SW S1,001C (SP)
  2137. 00808825 OR S1,A0,R0
  2138. AFBF002C SW RA,002C (SP)
  2139. AFB40028 SW S4,0028 (SP)
  2140. AFB30024 SW S3,0024 (SP)
  2141. AFB20020 SW S2,0020 (SP)
  2142. AFB00018 SW S0,0018 (SP)
  2143. 2414002A ADDIU S4,R0,002A
  2144. 24130023 ADDIU S3,R0,0023
  2145. 24120022 ADDIU S2,R0,0022
  2146. 00008025 OR S0,R0,R0
  2147. 0C000733 JAL 80001CCC
  2148. 2404003C ADDIU A0,R0,003C
  2149. 0C0720B8 JAL 801C82E0 # apply brake
  2150. 02202025 OR A0,S1,R0
  2151. 8E220068 LW V0,0068 (S1)
  2152. 10400011 BEQ V0,R0,+17
  2153. 00000000 NOP
  2154. 10520009 BEQ V0,S2,+9
  2155. 00000000 NOP
  2156. 50530010 BEQL V0,S3,+16
  2157. 24100001 ADDIU S0,R0,0001
  2158. 1454000E BNE V0,S4,+14
  2159. 00000000 NOP
  2160. 0C072299 JAL 801C8A64 # if disk removal/insertion error image is displayed remove it
  2161. 00000000 NOP
  2162. 10000010 BEQ R0,R0,+16
  2163. 00001025 OR V0,R0,R0
  2164. 0C072299 JAL 801C8A64 # if disk removal/insertion error image is displayed remove it
  2165. 00000000 NOP
  2166. 0C07398C JAL 801CE630 # clear leocmd queue
  2167. 00000000 NOP
  2168. 1000000A BEQ R0,R0,+10
  2169. 24020003 ADDIU V0,R0,0003
  2170. 0C07228C JAL 801C8A30 # create and display image for disk removal/insertion error A0
  2171. 24040006 ADDIU A0,R0,0006
  2172. 24100001 ADDIU S0,R0,0001
  2173. 5600FFE5 BNEL S0,R0,-27
  2174. 00008025 OR S0,R0,R0
  2175. 0C072299 JAL 801C8A64 # if disk removal/insertion error image is displayed remove it
  2176. 00000000 NOP
  2177. 0C0722F0 JAL 801C8BC0 # display current error unless invalid command, invalid LBA, or waiting NMI
  2178. 02202025 OR A0,S1,R0
  2179. 8FBF002C LW RA,002C (SP)
  2180. 8FB00018 LW S0,0018 (SP)
  2181. 8FB1001C LW S1,001C (SP)
  2182. 8FB20020 LW S2,0020 (SP)
  2183. 8FB30024 LW S3,0024 (SP)
  2184. 8FB40028 LW S4,0028 (SP)
  2185. 03E00008 JR RA
  2186. 27BD0030 ADDIU SP,SP,0030
  2187.  
  2188. 801C8CEC 0x1E6C
  2189. accepts: A0=p->struct
  2190. 27BDFFE8 ADDIU SP,SP,FFE8
  2191. AFBF0014 SW RA,0014 (SP)
  2192. 8C850068 LW A1,0068 (A0) # sensecode = @struct+68
  2193. 24010002 ADDIU AT,R0,0002
  2194. 10A00017 BEQ A1,R0,+23
  2195. 00A01025 OR V0,A1,R0
  2196. 10A1000F BEQ A1,AT,+15
  2197. 24010022 ADDIU AT,R0,0022
  2198. 10410007 BEQ V0,AT,+7
  2199. 24010023 ADDIU AT,R0,0023
  2200. 10410025 BEQ V0,AT,+37 # if queue full return 9
  2201. 2401002B ADDIU AT,R0,002B
  2202. 50410014 BEQL V0,AT,+20
  2203. 908E0065 LBU T6,0065 (A0)
  2204. 1000001B BEQ R0,R0,+27
  2205. 00000000 NOP
  2206. @801C8D2C: 0x22 - command terminated
  2207. 0C0722E4 JAL 801C8B90 # remove all error images
  2208. 00000000 NOP
  2209. 0C07398C JAL 801CE630 # clear leocmd queue
  2210. 00000000 NOP
  2211. 1000001C BEQ R0,R0,+28 # return 3
  2212. 24020003 ADDIU V0,R0,0003
  2213. @801C8D44: 2 - diagnostic failure
  2214. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2215. 00A02025 OR A0,A1,R0
  2216. 0C07228C JAL 801C8A30 # create and display image for disk removal/insertion error A0
  2217. 24040005 ADDIU A0,R0,0005
  2218. 10000016 BEQ R0,R0,+22 # return 9
  2219. 24020009 ADDIU V0,R0,0009
  2220. @801C8D5C: sensecode clear
  2221. 0C0722E4 JAL 801C8B90 # remove all error images
  2222. 00000000 NOP
  2223. 10000012 BEQ R0,R0,+18 # return 0
  2224. 00001025 OR V0,R0,R0
  2225. @801C8D6C: 0x2B - power on or reset occured
  2226. 908E0065 LBU T6,0065 (A0)
  2227. 15C00008 BNE T6,R0,+8 # branch if struct[65]
  2228. 00000000 NOP
  2229. 0C0722E4 JAL 801C8B90 # remove all error images
  2230. AFA40018 SW A0,0018 (SP)
  2231. 8FA40018 LW A0,0018 (SP)
  2232. 240F0002 ADDIU T7,R0,0002
  2233. 24020001 ADDIU V0,R0,0001
  2234. 10000008 BEQ R0,R0,+8 # return 1
  2235. A08F0065 SB T7,0065 (A0) # struct[65] = 2
  2236. @801C8D94
  2237. 0C0722E4 JAL 801C8B90 # remove all error images
  2238. AFA40018 SW A0,0018 (SP)
  2239. 0C0722F0 JAL 801C8BC0 # display current error unless invalid command, invalid LBA, or waiting NMI
  2240. 8FA40018 LW A0,0018 (SP)
  2241. 10000003 BEQ R0,R0,+3
  2242. 8FBF0014 LW RA,0014 (SP)
  2243. @801C8DAC
  2244. 24020009 ADDIU V0,R0,0009
  2245. @801C8DB0
  2246. 8FBF0014 LW RA,0014 (SP)
  2247. 27BD0018 ADDIU SP,SP,0018
  2248. 03E00008 JR RA
  2249. 00000000 NOP
  2250.  
  2251. 801C8DC0 0x1F40 read diskID to struct A0 until success, handling errors
  2252. accepts: A0=p->struct
  2253. 27BDFFD8 ADDIU SP,SP,FFD8
  2254. AFB00014 SW S0,0014 (SP)
  2255. 00808025 OR S0,A0,R0
  2256. AFBF0024 SW RA,0024 (SP)
  2257. AFB30020 SW S3,0020 (SP)
  2258. AFB2001C SW S2,001C (SP)
  2259. AFB10018 SW S1,0018 (SP)
  2260. 24130009 ADDIU S3,R0,0009
  2261. 24120031 ADDIU S2,R0,0031
  2262. 2411002A ADDIU S1,R0,002A
  2263. @801C8DE8: testing loop
  2264. 0C0720A6 JAL 801C8298 # read disk ID to struct A0
  2265. 02002025 OR A0,S0,R0
  2266. 8E040068 LW A0,0068 (S0) # sensecode = @A0+68
  2267. 10910009 BEQ A0,S1,+9 # handle error if sensecode == 0x2A
  2268. 00000000 NOP
  2269. 1492000B BNE A0,S2,+11
  2270. 00000000 NOP
  2271. @801C8E04: 0x31 - ejected illegally (resume)
  2272. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2273. 00000000 NOP
  2274. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2275. 24040002 ADDIU A0,R0,0002
  2276. 1000000F BEQ R0,R0,+15 # return 5
  2277. 24020005 ADDIU V0,R0,0005
  2278. @801C8E1C: 0x2A - medium not preset
  2279. 0C0722E4 JAL 801C8B90 # remove all error images
  2280. 00000000 NOP
  2281. 1000000B BEQ R0,R0,+11 # return 5
  2282. 24020005 ADDIU V0,R0,0005
  2283. @801C8E2C: if disk present continue
  2284. 0C07233B JAL 801C8CEC
  2285. 02002025 OR A0,S0,R0
  2286. 10530003 BEQ V0,S3,+3 # if V0 != 9: return (not queue full or diagnostic failure)
  2287. 00000000 NOP
  2288. 10000006 BEQ R0,R0,+6
  2289. 8FBF0024 LW RA,0024 (SP)
  2290. @801C8E44: loop
  2291. 0C000733 JAL 80001CCC
  2292. 2404003C ADDIU A0,R0,003C
  2293. 1000FFE6 BEQ R0,R0,-26
  2294. 00000000 NOP
  2295. @801C8E54
  2296. 8FBF0024 LW RA,0024 (SP)
  2297. 8FB00014 LW S0,0014 (SP)
  2298. 8FB10018 LW S1,0018 (SP)
  2299. 8FB2001C LW S2,001C (SP)
  2300. 8FB30020 LW S3,0020 (SP)
  2301. 03E00008 JR RA
  2302. 27BD0028 ADDIU SP,SP,0028
  2303.  
  2304. 801C8E70 0x1FF0 read disk ID to struct A0, displaying errors until success
  2305. accepts: A0=p->struct
  2306. 27BDFFD0 ADDIU SP,SP,FFD0
  2307. AFB00018 SW S0,0018 (SP)
  2308. 00808025 OR S0,A0,R0
  2309. AFBF002C SW RA,002C (SP)
  2310. AFB40028 SW S4,0028 (SP)
  2311. AFB30024 SW S3,0024 (SP)
  2312. AFB20020 SW S2,0020 (SP)
  2313. AFB1001C SW S1,001C (SP)
  2314. 24140009 ADDIU S4,R0,0009
  2315. 24130031 ADDIU S3,R0,0031
  2316. 2412002A ADDIU S2,R0,002A
  2317. 24110023 ADDIU S1,R0,0023
  2318. @801C8EA0: while errors
  2319. 0C000733 JAL 80001CCC
  2320. 2404003C ADDIU A0,R0,003C
  2321. 0C0720A6 JAL 801C8298 # read disk ID to struct A0
  2322. 02002025 OR A0,S0,R0
  2323. 8E040068 LW A0,0068 (S0)
  2324. 1091FFFA BEQ A0,S1,-6 # if queue full, retry
  2325. 00000000 NOP
  2326. 10920007 BEQ A0,S2,+7 # if medium not preset, display disk removal message
  2327. 00000000 NOP
  2328. 14930009 BNE A0,S3,+9 # if disk ejected illegally, display error
  2329. 00000000 NOP
  2330. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2331. 00000000 NOP
  2332. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2333. 24040002 ADDIU A0,R0,0002
  2334. 0C07228C JAL 801C8A30 # create and display image for disk removal/insertion error A0
  2335. 24040004 ADDIU A0,R0,0004
  2336. 1000FFEE BEQ R0,R0,-18
  2337. 00000000 NOP
  2338. @801C8EEC
  2339. 0C07233B JAL 801C8CEC
  2340. 02002025 OR A0,S0,R0
  2341. 1054FFEA BEQ V0,S4,-22 # while 9, repeat diskID read
  2342. 00000000 NOP
  2343. 8FBF002C LW RA,002C (SP)
  2344. 8FB00018 LW S0,0018 (SP)
  2345. 8FB1001C LW S1,001C (SP)
  2346. 8FB20020 LW S2,0020 (SP)
  2347. 8FB30024 LW S3,0024 (SP)
  2348. 8FB40028 LW S4,0028 (SP)
  2349. 03E00008 JR RA
  2350. 27BD0030 ADDIU SP,SP,0030
  2351.  
  2352. 801C8F1C 0x209C V0 = @801D2E54() if @801D2E54 else 1; by default return False if not an EZL* disk or disk has been swapped else True
  2353. accepts: A0=p->struct
  2354. 27BDFFE8 ADDIU SP,SP,FFE8
  2355. AFBF0014 SW RA,0014 (SP)
  2356. 3C02801D LUI V0,801D
  2357. 8C422E54 LW V0,2E54 (V0) # func = @801D2E54: 801C7A1C return False if not an EZL* disk or disk has been swapped else True
  2358. 50400006 BEQL V0,R0,+6
  2359. 24020001 ADDIU V0,R0,0001
  2360. 0040F809 JALR RA,V0
  2361. 00000000 NOP
  2362. 10000003 BEQ R0,R0,+3
  2363. 8FBF0014 LW RA,0014 (SP)
  2364. 24020001 ADDIU V0,R0,0001
  2365. 8FBF0014 LW RA,0014 (SP)
  2366. 27BD0018 ADDIU SP,SP,0018
  2367. 03E00008 JR RA
  2368. 00000000 NOP
  2369.  
  2370. 801C8F58 0x20D8
  2371. 27BDFFD8 ADDIU SP,SP,FFD8
  2372. AFB00018 SW S0,0018 (SP)
  2373. 00808025 OR S0,A0,R0
  2374. AFBF0024 SW RA,0024 (SP)
  2375. AFB20020 SW S2,0020 (SP)
  2376. AFB1001C SW S1,001C (SP)
  2377. 24120004 ADDIU S2,R0,0004
  2378. 24110003 ADDIU S1,R0,0003
  2379. 0C07239C JAL 801C8E70 # read disk ID to struct A0, displaying errors until success
  2380. 02002025 OR A0,S0,R0
  2381. 10510003 BEQ V0,S1,+3
  2382. 00401825 OR V1,V0,R0
  2383. 14520003 BNE V0,S2,+3
  2384. 00000000 NOP
  2385. 10000015 BEQ R0,R0,+21
  2386. 00601025 OR V0,V1,R0
  2387. 1460FFF7 BNE V1,R0,-9
  2388. 00000000 NOP
  2389. 0C0723C7 JAL 801C8F1C # V0 = @801D2E54() if @801D2E54 else 1; by default return False if not an EZL* disk or disk has been swapped else True
  2390. 02002025 OR A0,S0,R0
  2391. 10400003 BEQ V0,R0,+3
  2392. 00000000 NOP
  2393. 1000000D BEQ R0,R0,+13 # return 2 if correct disk inserted
  2394. 24020002 ADDIU V0,R0,0002
  2395. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2396. 24040001 ADDIU A0,R0,0001
  2397. 0C072307 JAL 801C8C1C
  2398. 02002025 OR A0,S0,R0
  2399. 10400003 BEQ V0,R0,+3
  2400. 00000000 NOP
  2401. 10000006 BEQ R0,R0,+6
  2402. 8FBF0024 LW RA,0024 (SP)
  2403. 0C07227B JAL 801C89EC # if error text image is displayed remove it
  2404. 00000000 NOP
  2405. 1000FFE5 BEQ R0,R0,-27
  2406. 00000000 NOP
  2407. 8FBF0024 LW RA,0024 (SP)
  2408. 8FB00018 LW S0,0018 (SP)
  2409. 8FB1001C LW S1,001C (SP)
  2410. 8FB20020 LW S2,0020 (SP)
  2411. 03E00008 JR RA
  2412. 27BD0028 ADDIU SP,SP,0028
  2413.  
  2414. 801C9000 0x2180
  2415. 27BDFFD0 ADDIU SP,SP,FFD0
  2416. AFB30024 SW S3,0024 (SP)
  2417. 00809825 OR S3,A0,R0
  2418. AFBF002C SW RA,002C (SP)
  2419. AFB40028 SW S4,0028 (SP)
  2420. AFB20020 SW S2,0020 (SP)
  2421. AFB1001C SW S1,001C (SP)
  2422. AFB00018 SW S0,0018 (SP)
  2423. 24120004 ADDIU S2,R0,0004
  2424. 24110003 ADDIU S1,R0,0003
  2425. 0C07239C JAL 801C8E70 # read disk ID to struct A0, displaying errors until success
  2426. 02602025 OR A0,S3,R0
  2427. 10510003 BEQ V0,S1,+3
  2428. 00408025 OR S0,V0,R0
  2429. 14520003 BNE V0,S2,+3
  2430. 00000000 NOP
  2431. 10000018 BEQ R0,R0,+24
  2432. 02001025 OR V0,S0,R0
  2433. 1600FFF7 BNE S0,R0,-9
  2434. 00000000 NOP
  2435. 0C0722E4 JAL 801C8B90 # remove all error images
  2436. 00000000 NOP
  2437. 0C0723C7 JAL 801C8F1C # V0 = @801D2E54() if @801D2E54 else 1; by default return False if not an EZL* disk or disk has been swapped else True
  2438. 02602025 OR A0,S3,R0
  2439. 10400003 BEQ V0,R0,+3
  2440. 0040A025 OR S4,V0,R0
  2441. 1000000E BEQ R0,R0,+14
  2442. 24020002 ADDIU V0,R0,0002
  2443. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2444. 24040001 ADDIU A0,R0,0001
  2445. 0C072307 JAL 801C8C1C
  2446. 02602025 OR A0,S3,R0
  2447. 10400003 BEQ V0,R0,+3
  2448. 00408025 OR S0,V0,R0
  2449. 10000007 BEQ R0,R0,+7
  2450. 8FBF002C LW RA,002C (SP)
  2451. 0C07227B JAL 801C89EC # if error text image is displayed remove it
  2452. 00000000 NOP
  2453. 1280FFE3 BEQ S4,R0,-29
  2454. 00000000 NOP
  2455. 02001025 OR V0,S0,R0
  2456. 8FBF002C LW RA,002C (SP)
  2457. 8FB00018 LW S0,0018 (SP)
  2458. 8FB1001C LW S1,001C (SP)
  2459. 8FB20020 LW S2,0020 (SP)
  2460. 8FB30024 LW S3,0024 (SP)
  2461. 8FB40028 LW S4,0028 (SP)
  2462. 03E00008 JR RA
  2463. 27BD0030 ADDIU SP,SP,0030
  2464.  
  2465. 801C90C4 0x2244
  2466. 27BDFFE8 ADDIU SP,SP,FFE8
  2467. AFBF0014 SW RA,0014 (SP)
  2468. AFA40018 SW A0,0018 (SP)
  2469. 8FAE0018 LW T6,0018 (SP)
  2470. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2471. 8DC40068 LW A0,0068 (T6)
  2472. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2473. 24040002 ADDIU A0,R0,0002
  2474. 0C072400 JAL 801C9000
  2475. 8FA40018 LW A0,0018 (SP)
  2476. 8FBF0014 LW RA,0014 (SP)
  2477. 27BD0018 ADDIU SP,SP,0018
  2478. 03E00008 JR RA
  2479. 00000000 NOP
  2480.  
  2481. 801C90FC 0x227C
  2482. 27BDFFE8 ADDIU SP,SP,FFE8
  2483. AFBF0014 SW RA,0014 (SP)
  2484. AFA40018 SW A0,0018 (SP)
  2485. 8FAE0018 LW T6,0018 (SP)
  2486. 0C072250 JAL 801C8940 # create and display image for leo error# A0
  2487. 8DC40068 LW A0,0068 (T6)
  2488. 0C072400 JAL 801C9000
  2489. 8FA40018 LW A0,0018 (SP)
  2490. 8FBF0014 LW RA,0014 (SP)
  2491. 27BD0018 ADDIU SP,SP,0018
  2492. 03E00008 JR RA
  2493. 00000000 NOP
  2494.  
  2495. 801C912C 0x22AC
  2496. accepts: A0=p->struct
  2497. 27BDFFD0 ADDIU SP,SP,FFD0
  2498. AFB1001C SW S1,001C (SP)
  2499. 00808825 OR S1,A0,R0
  2500. AFBF002C SW RA,002C (SP)
  2501. AFB40028 SW S4,0028 (SP)
  2502. AFB30024 SW S3,0024 (SP)
  2503. AFB20020 SW S2,0020 (SP)
  2504. AFB00018 SW S0,0018 (SP)
  2505. 00008025 OR S0,R0,R0
  2506. 24140001 ADDIU S4,R0,0001
  2507. 24130004 ADDIU S3,R0,0004
  2508. 24120003 ADDIU S2,R0,0003
  2509. @801C915C: repeat 30 times
  2510. 0C072AEE JAL 801CABB8 # V0 = sensecode; test if drive ready (no phase error, communication error, reset occured)
  2511. 00000000 NOP
  2512. 0C072370 JAL 801C8DC0 # read diskID to struct A0 until success, handling errors
  2513. 02202025 OR A0,S1,R0 # p->struct = A0 f/caller
  2514. 10520003 BEQ V0,S2,+3
  2515. 00401825 OR V1,V0,R0
  2516. 14530003 BNE V0,S3,+3 # if V0 in (3, 4) return V0
  2517. 00000000 NOP
  2518. 10000010 BEQ R0,R0,+16
  2519. 00601025 OR V0,V1,R0
  2520. @801C9184
  2521. 10540007 BEQ V0,S4,+7 # if V0 != 1 return V0
  2522. 00000000 NOP
  2523. 14400003 BNE V0,R0,+3
  2524. 00000000 NOP
  2525. 1000000A BEQ R0,R0,+10
  2526. 00601025 OR V0,V1,R0
  2527. @801C919C
  2528. 10000008 BEQ R0,R0,+8
  2529. 00601025 OR V0,V1,R0
  2530. @801C91A4: V0 == 1
  2531. 0C000733 JAL 80001CCC
  2532. 240400FA ADDIU A0,R0,00FA
  2533. 2A02001E SLTI V0,S0,001E
  2534. 1440FFEA BNE V0,R0,-22 # loop 30 times
  2535. 26100001 ADDIU S0,S0,0001
  2536. @801C91B8: if failed 30 times, then you throw the error
  2537. 0C0722F0 JAL 801C8BC0 # display current error unless invalid command, invalid LBA, or waiting NMI
  2538. 02202025 OR A0,S1,R0
  2539. @801C91C0
  2540. 8FBF002C LW RA,002C (SP)
  2541. 8FB00018 LW S0,0018 (SP)
  2542. 8FB1001C LW S1,001C (SP)
  2543. 8FB20020 LW S2,0020 (SP)
  2544. 8FB30024 LW S3,0024 (SP)
  2545. 8FB40028 LW S4,0028 (SP)
  2546. 03E00008 JR RA
  2547. 27BD0030 ADDIU SP,SP,0030
  2548.  
  2549. 801C91E0 0x2360 test rdram size and read diskID(?)
  2550. accepts: A0=p->struct
  2551. 27BDFFE8 ADDIU SP,SP,FFE8
  2552. AFBF0014 SW RA,0014 (SP)
  2553. 8C8E0068 LW T6,0068 (A0) # sensecode = @struct+68
  2554. 24010029 ADDIU AT,R0,0029
  2555. 3C0F8000 LUI T7,8000
  2556. 15C10005 BNE T6,AT,+5 # branch if sensecode != 0x29: device communication failure
  2557. 00000000 NOP
  2558. 0C0722F0 JAL 801C8BC0 # display current error unless invalid command, invalid LBA, or waiting NMI
  2559. 00000000 NOP
  2560. 10000013 BEQ R0,R0,+19
  2561. 8FBF0014 LW RA,0014 (SP)
  2562. @801C920C
  2563. 8DEF0318 LW T7,0318 (T7) # osMemSize = @80000318
  2564. 3C010080 LUI AT,0080
  2565. 00002825 OR A1,R0,R0
  2566. 01E1082B SLTU AT,T7,AT
  2567. 10200005 BEQ AT,R0,+5 # branch if rdram >= 8MB
  2568. 24060003 ADDIU A2,R0,0003
  2569. @801C9224: if insuffiencent rdram raise error
  2570. 0C0722D6 JAL 801C8B58 # display error# A0 with error text A1 and disk removal/insertion text A2
  2571. 2404002C ADDIU A0,R0,002C # sensecode = 0x2C: rampak not present
  2572. 10000008 BEQ R0,R0,+8 # return 4 if not enough rdram
  2573. 24020004 ADDIU V0,R0,0004
  2574. @801C9234
  2575. 0C07244B JAL 801C912C # ???; pretty sure this reads the diskID into struct A0
  2576. 00000000 NOP
  2577. 14400003 BNE V0,R0,+3 # if error do not set 801D2E90
  2578. 24180001 ADDIU T8,R0,0001
  2579. @801C9244
  2580. 3C01801D LUI AT,801D
  2581. AC382E90 SW T8,2E90 (AT) # 801D2E90 = 1
  2582. 00001025 OR V0,R0,R0
  2583. @801C9250
  2584. 8FBF0014 LW RA,0014 (SP)
  2585. 27BD0018 ADDIU SP,SP,0018
  2586. 03E00008 JR RA
  2587. 00000000 NOP
  2588.  
  2589. 801C9260 0x23E0 handle sensecode in struct A0
  2590. accepts: A0=p->struct
  2591. 27BDFFE8 ADDIU SP,SP,FFE8
  2592. AFBF0014 SW RA,0014 (SP)
  2593. 8C8E0068 LW T6,0068 (A0) # sensecode = @struct+68
  2594. 2DC10032 SLTIU AT,T6,0032
  2595. 1020002A BEQ AT,R0,+42
  2596. 000E7080 SLL T6,T6,0x2
  2597. 3C01801E LUI AT,801E
  2598. 002E0821 ADDU AT,AT,T6
  2599. 8C2E8E70 LW T6,8E70 (AT) # call 801D8E70[sensecode]()
  2600. 01C00008 JR T6
  2601. 00000000 NOP
  2602. @801C928C: 0x17 - unrecovered read error
  2603. 0C0721CF JAL 801C873C # V0 = True if disk present else False
  2604. AFA40018 SW A0,0018 (SP)
  2605. 0C072307 JAL 801C8C1C
  2606. 8FA40018 LW A0,0018 (SP)
  2607. 10400003 BEQ V0,R0,+3
  2608. 00000000 NOP
  2609. 10000020 BEQ R0,R0,+32
  2610. 8FBF0014 LW RA,0014 (SP)
  2611. 0C0722E4 JAL 801C8B90 # remove all error images
  2612. 00000000 NOP
  2613. 1000001B BEQ R0,R0,+27
  2614. 24020002 ADDIU V0,R0,0002
  2615. @801C92BC: 2 - diagnostic failure
  2616. 0C0723D6 JAL 801C8F58
  2617. 00000000 NOP
  2618. 10000018 BEQ R0,R0,+24
  2619. 8FBF0014 LW RA,0014 (SP)
  2620. @801C92CC: 0x22 - command terminated
  2621. 0C07398C JAL 801CE630 # clear leocmd queue
  2622. 00000000 NOP
  2623. 10000013 BEQ R0,R0,+19
  2624. 24020003 ADDIU V0,R0,0003
  2625. @801C92DC: 0x31 - ejected illegally (resume)
  2626. 0C072431 JAL 801C90C4
  2627. 00000000 NOP
  2628. 10000010 BEQ R0,R0,+16
  2629. 8FBF0014 LW RA,0014 (SP)
  2630. @801C92EC: 0x2F - medium may have changed
  2631. 0C072400 JAL 801C9000
  2632. 00000000 NOP
  2633. 1000000C BEQ R0,R0,+12
  2634. 8FBF0014 LW RA,0014 (SP)
  2635. @801C92FC: 0x2A - medium not present
  2636. 0C07243F JAL 801C90FC
  2637. 00000000 NOP
  2638. 10000008 BEQ R0,R0,+8
  2639. 8FBF0014 LW RA,0014 (SP)
  2640. @801C930C: 0 - no error
  2641. 10000005 BEQ R0,R0,+5 # return 0
  2642. 00001025 OR V0,R0,R0
  2643. @801C9314: 0x23 - queue full
  2644. 10000003 BEQ R0,R0,+3 # return 2
  2645. 24020002 ADDIU V0,R0,0002
  2646. @801C931C: all other sensecodes
  2647. 0C0722F0 JAL 801C8BC0 # display current error unless invalid command, invalid LBA, or waiting NMI
  2648. 00000000 NOP
  2649. 8FBF0014 LW RA,0014 (SP)
  2650. 27BD0018 ADDIU SP,SP,0018
  2651. 03E00008 JR RA
  2652. 00000000 NOP
  2653.  
  2654. 801C9334 0x24B4
  2655. accepts: A0=p->struct
  2656. 27BDFFD8 ADDIU SP,SP,FFD8
  2657. AFB30020 SW S3,0020 (SP)
  2658. 00809825 OR S3,A0,R0
  2659. AFBF0024 SW RA,0024 (SP)
  2660. AFB2001C SW S2,001C (SP)
  2661. AFB10018 SW S1,0018 (SP)
  2662. AFB00014 SW S0,0014 (SP)
  2663. 24120005 ADDIU S2,R0,0005
  2664. 24110004 ADDIU S1,R0,0004
  2665. 24100003 ADDIU S0,R0,0003
  2666. @801C935C: while unhandled errors are thrown...
  2667. 0C072370 JAL 801C8DC0 # read diskID to struct A0 until success, handling errors
  2668. 02602025 OR A0,S3,R0
  2669. 10500005 BEQ V0,S0,+5 # if error type 3 (not sure the conditions) return 3
  2670. 00401825 OR V1,V0,R0
  2671. 10510003 BEQ V0,S1,+3 # if error type 4 (not sure the conditions) return 4
  2672. 00000000 NOP
  2673. 14520003 BNE V0,S2,+3 # if disk not present return 5
  2674. 00000000 NOP
  2675. 1000000A BEQ R0,R0,+10
  2676. 00601025 OR V0,V1,R0
  2677. 1460FFF5 BNE V1,R0,-11 # all other errors loop
  2678. 00000000 NOP
  2679. @801C938C
  2680. 0C0723C7 JAL 801C8F1C # V0 = @801D2E54() if @801D2E54 else 1; by default return False if not an EZL* disk or disk has been swapped else True
  2681. 02602025 OR A0,S3,R0
  2682. 50400004 BEQL V0,R0,+4
  2683. 24020007 ADDIU V0,R0,0007
  2684. 10000002 BEQ R0,R0,+2 # return 7 if False else 0
  2685. 00001025 OR V0,R0,R0
  2686. 24020007 ADDIU V0,R0,0007
  2687. @801C93A8
  2688. 8FBF0024 LW RA,0024 (SP)
  2689. 8FB00014 LW S0,0014 (SP)
  2690. 8FB10018 LW S1,0018 (SP)
  2691. 8FB2001C LW S2,001C (SP)
  2692. 8FB30020 LW S3,0020 (SP)
  2693. 03E00008 JR RA
  2694. 27BD0028 ADDIU SP,SP,0028
  2695.  
  2696. 801C93C4
  2697. 27BDFFE0 ADDIU SP,SP,FFE0
  2698. AFB00014 SW S0,0014 (SP)
  2699. 00808025 OR S0,A0,R0
  2700. AFBF001C SW RA,001C (SP)
  2701. AFB10018 SW S1,0018 (SP)
  2702. 24110007 ADDIU S1,R0,0007
  2703. 0C0724CD JAL 801C9334
  2704. 02002025 OR A0,S0,R0
  2705. 10510003 BEQ V0,S1,+3
  2706. 00000000 NOP
  2707. 1000000E BEQ R0,R0,+14
  2708. 8FBF001C LW RA,001C (SP)
  2709. 0C07226E JAL 801C89B8 # create and display image for error text of sensecode A0
  2710. 24040001 ADDIU A0,R0,0001
  2711. 0C072307 JAL 801C8C1C
  2712. 02002025 OR A0,S0,R0
  2713. 10400003 BEQ V0,R0,+3
  2714. 00000000 NOP
  2715. 10000006 BEQ R0,R0,+6
  2716. 8FBF001C LW RA,001C (SP)
  2717. 0C07227B JAL 801C89EC # if error text image is displayed remove it
  2718. 00000000 NOP
  2719. 1000FFEF BEQ R0,R0,-17
  2720. 00000000 NOP
  2721. 8FBF001C LW RA,001C (SP)
  2722. 8FB00014 LW S0,0014 (SP)
  2723. 8FB10018 LW S1,0018 (SP)
  2724. 03E00008 JR RA
  2725. 27BD0020 ADDIU SP,SP,0020
  2726.  
  2727. 00000000 NOP
  2728. 00000000 NOP
  2729.  
  2730. 801C9440 0x25C0 V0 = True if wchar at A0 else False
  2731. accepts: A0=p->char
  2732. 90830000 LBU V1,0000 (A0)
  2733. 2861008E SLTI AT,V1,008E
  2734. 14200002 BNE AT,R0,+2
  2735. 286100FF SLTI AT,V1,00FF
  2736. 14200006 BNE AT,R0,+6
  2737. 2401008F ADDIU AT,R0,008F
  2738. 1061000C BEQ V1,AT,+12
  2739. 00001025 OR V0,R0,R0
  2740. 240100A0 ADDIU AT,R0,00A0
  2741. 10610009 BEQ V1,AT,+9
  2742. 00000000 NOP
  2743. 90830001 LBU V1,0001 (A0)
  2744. 24840001 ADDIU A0,A0,0001
  2745. 286200A0 SLTI V0,V1,00A0
  2746. 38420001 XORI V0,V0,0001
  2747. 10400003 BEQ V0,R0,+3
  2748. 00000000 NOP
  2749. 03E00008 JR RA
  2750. 286200FF SLTI V0,V1,00FF
  2751. 03E00008 JR RA
  2752. 00000000 NOP
  2753.  
  2754. 90830000 LBU V1,0000 (A0)
  2755. 28610081 SLTI AT,V1,0081
  2756. 14200002 BNE AT,R0,+2
  2757. 286100A0 SLTI AT,V1,00A0
  2758. 14200006 BNE AT,R0,+6
  2759. 286100E0 SLTI AT,V1,00E0
  2760. 14200010 BNE AT,R0,+16
  2761. 00001025 OR V0,R0,R0
  2762. 286100FD SLTI AT,V1,00FD
  2763. 1020000D BEQ AT,R0,+13
  2764. 00000000 NOP
  2765. 90830001 LBU V1,0001 (A0)
  2766. 24840001 ADDIU A0,A0,0001
  2767. 28620040 SLTI V0,V1,0040
  2768. 38420001 XORI V0,V0,0001
  2769. 10400007 BEQ V0,R0,+7
  2770. 00000000 NOP
  2771. 286200FD SLTI V0,V1,00FD
  2772. 10400004 BEQ V0,R0,+4
  2773. 00000000 NOP
  2774. 3862007F XORI V0,V1,007F
  2775. 03E00008 JR RA
  2776. 0002102B SLTU V0,R0,V0
  2777. 03E00008 JR RA
  2778. 00000000 NOP
  2779.  
  2780. AFA50004 SW A1,0004 (SP)
  2781. 30A5FFFF ANDI A1,A1,FFFF
  2782. 00057203 SRA T6,A1,0x8
  2783. A08E0000 SB T6,0000 (A0)
  2784. A0850001 SB A1,0001 (A0)
  2785. 03E00008 JR RA
  2786. 00000000 NOP
  2787.  
  2788. 801C9514 0x2694 V0 = wchar A0 - 0x8080
  2789. accepts: A0=wchar
  2790. AFA40000 SW A0,0000 (SP)
  2791. 3084FFFF ANDI A0,A0,FFFF
  2792. 3C01FFFF LUI AT,FFFF
  2793. 34217F80 ORI AT,AT,7F80
  2794. 00811021 ADDU V0,A0,AT
  2795. 3042FFFF ANDI V0,V0,FFFF
  2796. 03E00008 JR RA
  2797. 00000000 NOP
  2798.  
  2799. 801C9534 0x26B4 V0 = euc-jp wchar A0 - 0x8080 -> shift-jis
  2800. accepts: A0=wchar - 0x8080
  2801. AFA40000 SW A0,0000 (SP)
  2802. 3084FFFF ANDI A0,A0,FFFF
  2803. 00042A03 SRA A1,A0,0x8
  2804. 30A800FF ANDI T0,A1,00FF # T0 = bank
  2805. 310E0001 ANDI T6,T0,0001
  2806. 11C0000A BEQ T6,R0,+10
  2807. 308700FF ANDI A3,A0,00FF # A3 = index
  2808. @801C9550
  2809. 00E03025 OR A2,A3,R0
  2810. 24C6001F ADDIU A2,A2,001F
  2811. 30C600FF ANDI A2,A2,00FF
  2812. 28C1007F SLTI AT,A2,007F
  2813. 14200006 BNE AT,R0,+6
  2814. 00C01825 OR V1,A2,R0
  2815. 24C60001 ADDIU A2,A2,0001
  2816. 10000003 BEQ R0,R0,+3
  2817. 30C300FF ANDI V1,A2,00FF
  2818. @801C9574
  2819. 24E6007E ADDIU A2,A3,007E
  2820. 30C300FF ANDI V1,A2,00FF
  2821. 2502FFDF ADDIU V0,T0,FFDF # V0 = bank - 0x21
  2822. 04410002 BGEZ V0,+2
  2823. 00400821 ADDU AT,V0,R0
  2824. 24410001 ADDIU AT,V0,0001
  2825. 00011043 SRA V0,AT,0x1
  2826. 24420081 ADDIU V0,V0,0081
  2827. 304200FF ANDI V0,V0,00FF
  2828. 284100A0 SLTI AT,V0,00A0
  2829. 14200003 BNE AT,R0,+3
  2830. 00402025 OR A0,V0,R0
  2831. 24420040 ADDIU V0,V0,0040
  2832. 304400FF ANDI A0,V0,00FF
  2833. 00047A00 SLL T7,A0,0x8
  2834. 01E31021 ADDU V0,T7,V1
  2835. 3042FFFF ANDI V0,V0,FFFF
  2836. 03E00008 JR RA
  2837. 00000000 NOP
  2838.  
  2839. 801C95C0 0x2740 call @801D2EC0(args)
  2840. accepts: args
  2841. 27BDFFE8 ADDIU SP,SP,FFE8
  2842. AFBF0014 SW RA,0014 (SP)
  2843. 3C02801D LUI V0,801D
  2844. 8C422EC0 LW V0,2EC0 (V0)
  2845. 50400004 BEQL V0,R0,+4
  2846. 8FBF0014 LW RA,0014 (SP)
  2847. 0040F809 JALR RA,V0
  2848. 00000000 NOP
  2849. 8FBF0014 LW RA,0014 (SP)
  2850. 27BD0018 ADDIU SP,SP,0018
  2851. 03E00008 JR RA
  2852. 00000000 NOP
  2853.  
  2854. 801C95F0 0x2770 V0 = IPL hardware address of image for wchar A0 (euc-jp)
  2855. accepts: A0=p->wchar
  2856. 27BDFFE8 ADDIU SP,SP,FFE8
  2857. AFBF0014 SW RA,0014 (SP)
  2858. 00802825 OR A1,A0,R0
  2859. 90AF0000 LBU T7,0000 (A1)
  2860. 90AE0001 LBU T6,0001 (A1)
  2861. 000FC200 SLL T8,T7,0x8
  2862. 01D82025 OR A0,T6,T8
  2863. 0C072545 JAL 801C9514 # V0 = wchar A0 - 0x8080
  2864. 3084FFFF ANDI A0,A0,FFFF
  2865. 0C07254D JAL 801C9534 # V0 = euc-jp wchar A0 - 0x8080 -> shift-jis
  2866. 3044FFFF ANDI A0,V0,FFFF
  2867. 0C073C2C JAL 801CF0B0 # V0 = offset in IPL font to wchar A0's image (shift-jis)
  2868. 00402025 OR A0,V0,R0
  2869. 3C01000A LUI AT,000A
  2870. 00411021 ADDU V0,V0,AT # return 0xA0000 + V0
  2871. 8FBF0014 LW RA,0014 (SP)
  2872. 27BD0018 ADDIU SP,SP,0018
  2873. 03E00008 JR RA
  2874. 00000000 NOP
  2875.  
  2876. 801C963C 0x27BC V0 = correction; A0 = IPL hardware address of image for char SP+10, A1=width, A2=height, A3=alignment
  2877. accepts: A0=p->target, A1=target for width, A2=target for height, A3=target for alignment, SP+10=char
  2878. 27BDFFE8 ADDIU SP,SP,FFE8
  2879. AFBF0014 SW RA,0014 (SP)
  2880. AFA40018 SW A0,0018 (SP)
  2881. 3C19801E LUI T9,801E
  2882. 8F390F70 LW T9,0F70 (T9) # 801E0F70
  2883. 93AE002B LBU T6,002B (SP)
  2884. 00194080 SLL T0,T9,0x2
  2885. 01194023 SUBU T0,T0,T9
  2886. 00084180 SLL T0,T0,0x6
  2887. 25D8FFE0 ADDIU T8,T6,FFE0
  2888. 03081021 ADDU V0,T8,T0
  2889. 0C073EEC JAL 801CFBB0 # V0 = IPL hardware address of image for char A0 - 32; A1 = width, A2 = height, A3 = alignment
  2890. 3044FFFF ANDI A0,V0,FFFF # (char - 0x20) + (@801E0F70 * 0xC0)
  2891. 8FAB0018 LW T3,0018 (SP)
  2892. 3043000F ANDI V1,V0,000F
  2893. 00434823 SUBU T1,V0,V1
  2894. 3C01000A LUI AT,000A
  2895. 01215021 ADDU T2,T1,AT
  2896. 00601025 OR V0,V1,R0
  2897. AD6A0000 SW T2,0000 (T3) # A0+0: 0xA0000 | (V0 & ~0xF)
  2898. 8FBF0014 LW RA,0014 (SP)
  2899. 27BD0018 ADDIU SP,SP,0018
  2900. 03E00008 JR RA
  2901. 00000000 NOP
  2902.  
  2903. 801C969C 0x281C read font image for char SP+10 from IPL to A0
  2904. accepts: A0=p->target, A1=target for width, A2=target for height, A3=target for alignment, SP+10=char
  2905. 27BDFFD8 ADDIU SP,SP,FFD8
  2906. AFBF001C SW RA,001C (SP)
  2907. AFA40028 SW A0,0028 (SP)
  2908. AFA5002C SW A1,002C (SP)
  2909. AFA60030 SW A2,0030 (SP)
  2910. AFA70034 SW A3,0034 (SP)
  2911. 0C072510 JAL 801C9440 # V0 = True if wchar at A0 else False
  2912. 8FA40038 LW A0,0038 (SP)
  2913. 1040000E BEQ V0,R0,+14
  2914. 27A40024 ADDIU A0,SP,0024
  2915. 0C07257C JAL 801C95F0 # V0 = IPL hardware address of image for wchar A0 (euc-jp)
  2916. 8FA40038 LW A0,0038 (SP)
  2917. 8FAE002C LW T6,002C (SP)
  2918. 24040010 ADDIU A0,R0,0010
  2919. AFA20024 SW V0,0024 (SP)
  2920. ADC40000 SW A0,0000 (T6)
  2921. 8FAF0030 LW T7,0030 (SP)
  2922. 2418000B ADDIU T8,R0,000B
  2923. 00001825 OR V1,R0,R0
  2924. ADE40000 SW A0,0000 (T7)
  2925. 8FB90034 LW T9,0034 (SP)
  2926. 10000009 BEQ R0,R0,+9
  2927. AF380000 SW T8,0000 (T9)
  2928. 8FA80038 LW T0,0038 (SP)
  2929. 8FA5002C LW A1,002C (SP)
  2930. 8FA60030 LW A2,0030 (SP)
  2931. 91090000 LBU T1,0000 (T0)
  2932. 8FA70034 LW A3,0034 (SP)
  2933. 0C07258F JAL 801C963C # V0 = correction; A0 = IPL hardware address of image for char SP+10, A1=width, A2=height, A3=alignment
  2934. AFA90010 SW T1,0010 (SP) # char
  2935. 00401825 OR V1,V0,R0
  2936. 8FA40028 LW A0,0028 (SP) # rdram = A0
  2937. 8FA50024 LW A1,0024 (SP) # hardware = IPL address for font image
  2938. 24060080 ADDIU A2,R0,0080 # length = 0x80
  2939. 0C072570 JAL 801C95C0 # call @801D2EC0(args)
  2940. AFA30020 SW V1,0020 (SP)
  2941. 8FA20020 LW V0,0020 (SP)
  2942. 8FBF001C LW RA,001C (SP)
  2943. 27BD0028 ADDIU SP,SP,0028
  2944. 03E00008 JR RA
  2945. 00000000 NOP
  2946.  
  2947. 801C9740 0x28C0 set high or low nibble (A1) of A0 to A2
  2948. accepts: A0=p->target, A1=nibble (0:low, 1:high), A2=value
  2949. AFA60008 SW A2,0008 (SP)
  2950. 30C600FF ANDI A2,A2,00FF
  2951. 24010001 ADDIU AT,R0,0001
  2952. 14A10004 BNE A1,AT,+4
  2953. 00067100 SLL T6,A2,0x4
  2954. A08E0000 SB T6,0000 (A0) # if mode 0: A0[0] = A2 << 4, return 0
  2955. 03E00008 JR RA
  2956. 00001025 OR V0,R0,R0
  2957. 908F0000 LBU T7,0000 (A0)
  2958. 24020001 ADDIU V0,R0,0001
  2959. 01E6C025 OR T8,T7,A2
  2960. A0980000 SB T8,0000 (A0) # if mode 1: A0[0] = A2, return 1
  2961. 03E00008 JR RA
  2962. 00000000 NOP
  2963.  
  2964. 24070001 ADDIU A3,R0,0001
  2965. 8CA20000 LW V0,0000 (A1)
  2966. 00067043 SRA T6,A2,0x1
  2967. 008E2021 ADDU A0,A0,T6
  2968. 14E20003 BNE A3,V0,+3
  2969. 30C30001 ANDI V1,A2,0001
  2970. 50600006 BEQL V1,R0,+6
  2971. 00832021 ADDU A0,A0,V1
  2972. 14400006 BNE V0,R0,+6
  2973. 30C30001 ANDI V1,A2,0001
  2974. 50600005 BEQL V1,R0,+5
  2975. ACA00000 SW R0,0000 (A1)
  2976. 00832021 ADDU A0,A0,V1
  2977. 10000002 BEQ R0,R0,+2
  2978. ACA70000 SW A3,0000 (A1)
  2979. ACA00000 SW R0,0000 (A1)
  2980. 00801025 OR V0,A0,R0
  2981. 03E00008 JR RA
  2982. 00000000 NOP
  2983.  
  2984. 801C97C4 0x2944
  2985. accepts: A0, A1, A2, A3, SP+10, SP+14=p->source, SP+18=width, SP+1C=height, SP+20=alignment
  2986. 27BDFFA0 ADDIU SP,SP,FFA0
  2987. AFB60030 SW S6,0030 (SP)
  2988. 8FB60078 LW S6,0078 (SP)
  2989. AFBF003C SW RA,003C (SP)
  2990. AFBE0038 SW S8,0038 (SP)
  2991. AFB70034 SW S7,0034 (SP)
  2992. AFB5002C SW S5,002C (SP)
  2993. AFB40028 SW S4,0028 (SP)
  2994. AFB30024 SW S3,0024 (SP)
  2995. AFB20020 SW S2,0020 (SP)
  2996. AFB1001C SW S1,001C (SP)
  2997. AFB00018 SW S0,0018 (SP)
  2998. AFA40060 SW A0,0060 (SP)
  2999. AFA50064 SW A1,0064 (SP)
  3000. AFA60068 SW A2,0068 (SP)
  3001. 8FB80070 LW T8,0070 (SP)
  3002. 8FAE0068 LW T6,0068 (SP)
  3003. 02C77821 ADDU T7,S6,A3
  3004. 8FA80060 LW T0,0060 (SP)
  3005. 01F8C821 ADDU T9,T7,T8
  3006. AFB90044 SW T9,0044 (SP)
  3007. AFAE004C SW T6,004C (SP)
  3008. 24140001 ADDIU S4,R0,0001
  3009. 27A5004C ADDIU A1,SP,004C
  3010. 00E03025 OR A2,A3,R0
  3011. 0C0725DE JAL 801C9778
  3012. 8D040000 LW A0,0000 (T0)
  3013. 8FA90064 LW T1,0064 (SP)
  3014. 8FAB0080 LW T3,0080 (SP)
  3015. 240C000B ADDIU T4,R0,000B
  3016. 00095043 SRA T2,T1,0x1
  3017. 018B6823 SUBU T5,T4,T3
  3018. 01AA0019 MULTU T5,T2
  3019. 8FB7007C LW S7,007C (SP)
  3020. 32CF0001 ANDI T7,S6,0001
  3021. AFAA0064 SW T2,0064 (SP)
  3022. 24150001 ADDIU S5,R0,0001
  3023. 8FB20074 LW S2,0074 (SP)
  3024. 00007012 MFLO T6
  3025. 004EF021 ADDU S8,V0,T6
  3026. 11E00002 BEQ T7,R0,+2
  3027. 02E01025 OR V0,S7,R0
  3028. 26D60001 ADDIU S6,S6,0001
  3029. 12E00024 BEQ S7,R0,+36
  3030. 26F7FFFF ADDIU S7,S7,FFFF
  3031. 03C08025 OR S0,S8,R0
  3032. 8FB1004C LW S1,004C (SP)
  3033. 1AC0001A BLTZ S6,+26
  3034. 00009825 OR S3,R0,R0
  3035. 5695000C BNEL S4,S5,+12
  3036. 92460000 LBU A2,0000 (S2)
  3037. 92460000 LBU A2,0000 (S2)
  3038. 02002025 OR A0,S0,R0
  3039. 02202825 OR A1,S1,R0
  3040. 00063103 SRA A2,A2,0x4
  3041. 0C0725D0 JAL 801C9740 # set high or low nibble (A1) of A0 to A2
  3042. 30C600FF ANDI A2,A2,00FF
  3043. 5040000D BEQL V0,R0,+13
  3044. 26730001 ADDIU S3,S3,0001
  3045. 1000000A BEQ R0,R0,+10
  3046. 26100001 ADDIU S0,S0,0001
  3047. 92460000 LBU A2,0000 (S2)
  3048. 02002025 OR A0,S0,R0
  3049. 02202825 OR A1,S1,R0
  3050. 30C6000F ANDI A2,A2,000F
  3051. 0C0725D0 JAL 801C9740 # set high or low nibble (A1) of A0 to A2
  3052. 30C600FF ANDI A2,A2,00FF
  3053. 10400002 BEQ V0,R0,+2
  3054. 26520001 ADDIU S2,S2,0001
  3055. 26100001 ADDIU S0,S0,0001
  3056. 26730001 ADDIU S3,S3,0001
  3057. 3A940001 XORI S4,S4,0001
  3058. 1676FFE8 BNE S3,S6,-24
  3059. 3A310001 XORI S1,S1,0001
  3060. 8FB80064 LW T8,0064 (SP)
  3061. 02E01025 OR V0,S7,R0
  3062. 03D8F021 ADDU S8,S8,T8
  3063. 16E0FFDF BNE S7,R0,-33
  3064. 26F7FFFF ADDIU S7,S7,FFFF
  3065. AFB20074 SW S2,0074 (SP)
  3066. 8FB90060 LW T9,0060 (SP)
  3067. 27A50068 ADDIU A1,SP,0068
  3068. 8FA60044 LW A2,0044 (SP)
  3069. 0C0725DE JAL 801C9778
  3070. 8F240000 LW A0,0000 (T9)
  3071. 8FA80060 LW T0,0060 (SP)
  3072. AD020000 SW V0,0000 (T0)
  3073. 8FA20068 LW V0,0068 (SP)
  3074. 8FBF003C LW RA,003C (SP)
  3075. 8FB00018 LW S0,0018 (SP)
  3076. 8FB1001C LW S1,001C (SP)
  3077. 8FB20020 LW S2,0020 (SP)
  3078. 8FB30024 LW S3,0024 (SP)
  3079. 8FB40028 LW S4,0028 (SP)
  3080. 8FB5002C LW S5,002C (SP)
  3081. 8FB60030 LW S6,0030 (SP)
  3082. 8FB70034 LW S7,0034 (SP)
  3083. 8FBE0038 LW S8,0038 (SP)
  3084. 03E00008 JR RA
  3085. 27BD0060 ADDIU SP,SP,0060
  3086.  
  3087. 27BDFFE8 ADDIU SP,SP,FFE8
  3088. AFBF0014 SW RA,0014 (SP)
  3089. AFA40018 SW A0,0018 (SP)
  3090. AFA5001C SW A1,001C (SP)
  3091. 0C072510 JAL 801C9440 # V0 = True if wchar at A0 else False
  3092. AFA60020 SW A2,0020 (SP)
  3093. 8FA40018 LW A0,0018 (SP)
  3094. 8FA5001C LW A1,001C (SP)
  3095. 10400004 BEQ V0,R0,+4
  3096. 8FA60020 LW A2,0020 (SP)
  3097. ACC00000 SW R0,0000 (A2)
  3098. 1000001F BEQ R0,R0,+31
  3099. ACA00000 SW R0,0000 (A1)
  3100. ACC00000 SW R0,0000 (A2)
  3101. ACA00000 SW R0,0000 (A1)
  3102. 90820000 LBU V0,0000 (A0)
  3103. 24080020 ADDIU T0,R0,0020
  3104. 9083FFFF LBU V1,FFFF (A0)
  3105. 10480008 BEQ V0,T0,+8
  3106. 90870001 LBU A3,0001 (A0)
  3107. 24010049 ADDIU AT,R0,0049
  3108. 10410008 BEQ V0,AT,+8
  3109. 24010069 ADDIU AT,R0,0069
  3110. 50410007 BEQL V0,AT,+7
  3111. 24020002 ADDIU V0,R0,0002
  3112. 1000000E BEQ R0,R0,+14
  3113. 24020001 ADDIU V0,R0,0001
  3114. ACC00000 SW R0,0000 (A2)
  3115. 1000000E BEQ R0,R0,+14
  3116. ACA00000 SW R0,0000 (A1)
  3117. 24020002 ADDIU V0,R0,0002
  3118. ACC20000 SW V0,0000 (A2)
  3119. ACA20000 SW V0,0000 (A1)
  3120. 15030002 BNE T0,V1,+2
  3121. ACC20000 SW V0,0000 (A2)
  3122. ACA00000 SW R0,0000 (A1)
  3123. 55070007 BNEL T0,A3,+7
  3124. 8FBF0014 LW RA,0014 (SP)
  3125. 10000004 BEQ R0,R0,+4
  3126. ACC00000 SW R0,0000 (A2)
  3127. ACC20000 SW V0,0000 (A2)
  3128. ACA20000 SW V0,0000 (A1)
  3129. ACC20000 SW V0,0000 (A2)
  3130. 8FBF0014 LW RA,0014 (SP)
  3131. 27BD0018 ADDIU SP,SP,0018
  3132. 03E00008 JR RA
  3133. 00000000 NOP
  3134.  
  3135. 801C9A10 0x2B90 draw string A2 to image A0, width A1
  3136. accepts: A0=p->target, A1=width, A2=p->text
  3137. 27BDFEE0 ADDIU SP,SP,FEE0
  3138. AFB00030 SW S0,0030 (SP)
  3139. 00C08025 OR S0,A2,R0
  3140. AFBF0054 SW RA,0054 (SP)
  3141. AFBE0050 SW S8,0050 (SP)
  3142. AFB7004C SW S7,004C (SP)
  3143. AFB60048 SW S6,0048 (SP)
  3144. AFB50044 SW S5,0044 (SP)
  3145. AFB40040 SW S4,0040 (SP)
  3146. AFB3003C SW S3,003C (SP)
  3147. AFB20038 SW S2,0038 (SP)
  3148. AFB10034 SW S1,0034 (SP)
  3149. AFA40120 SW A0,0120 (SP)
  3150. AFA50124 SW A1,0124 (SP)
  3151. 12000035 BEQ S0,R0,+53
  3152. 24120001 ADDIU S2,R0,0001
  3153. 920E0000 LBU T6,0000 (S0)
  3154. 03A08825 OR S1,SP,R0
  3155. 2631008F ADDIU S1,S1,008F
  3156. 11C00030 BEQ T6,R0,+48
  3157. 00118902 SRL S1,S1,0x4
  3158. 00118900 SLL S1,S1,0x4
  3159. 27BE0120 ADDIU S8,SP,0120
  3160. 27B70070 ADDIU S7,SP,0070
  3161. 27B60074 ADDIU S6,SP,0074
  3162. 27B50078 ADDIU S5,SP,0078
  3163. 27B40064 ADDIU S4,SP,0064
  3164. 27B30068 ADDIU S3,SP,0068
  3165. 02002025 OR A0,S0,R0 # p->string
  3166. 02602825 OR A1,S3,R0 # SP+68
  3167. 0C072655 JAL 801C9954
  3168. 02803025 OR A2,S4,R0 # SP+64
  3169. 02202025 OR A0,S1,R0 # SP+80~
  3170. 02A02825 OR A1,S5,R0 # SP+78
  3171. 02C03025 OR A2,S6,R0 # SP+74
  3172. 02E03825 OR A3,S7,R0 # SP+70
  3173. 0C0725A7 JAL 801C969C # read font image for char SP+10 from IPL to A0
  3174. AFB00010 SW S0,0010 (SP) #SP+10 = p->string
  3175. 8FA80078 LW T0,0078 (SP)
  3176. 00401825 OR V1,V0,R0
  3177. 03C02025 OR A0,S8,R0
  3178. 310F0001 ANDI T7,T0,0001
  3179. 11E00002 BEQ T7,R0,+2
  3180. 8FA50124 LW A1,0124 (SP)
  3181. 25080001 ADDIU T0,T0,0001 # if width odd, width += 1
  3182. 8FB80064 LW T8,0064 (SP)
  3183. 8FA90074 LW T1,0074 (SP)
  3184. 8FAA0070 LW T2,0070 (SP)
  3185. 0223C821 ADDU T9,S1,V1
  3186. AFB90014 SW T9,0014 (SP)
  3187. 02403025 OR A2,S2,R0
  3188. 8FA70068 LW A3,0068 (SP)
  3189. AFA80018 SW T0,0018 (SP) # SP+18 = width
  3190. AFA80078 SW T0,0078 (SP)
  3191. AFB80010 SW T8,0010 (SP)
  3192. AFA9001C SW T1,001C (SP) # SP+1C = height
  3193. 0C0725F1 JAL 801C97C4
  3194. AFAA0020 SW T2,0020 (SP) # SP+20 = alignment
  3195. 00409025 OR S2,V0,R0
  3196. 0C072510 JAL 801C9440 # V0 = True if wchar at A0 else False
  3197. 02002025 OR A0,S0,R0
  3198. 50400003 BEQL V0,R0,+3
  3199. 920B0001 LBU T3,0001 (S0)
  3200. 26100001 ADDIU S0,S0,0001
  3201. 920B0001 LBU T3,0001 (S0)
  3202. 26100001 ADDIU S0,S0,0001
  3203. 5560FFDA BNEL T3,R0,-38
  3204. 02002025 OR A0,S0,R0
  3205. 8FBF0054 LW RA,0054 (SP)
  3206. 8FB00030 LW S0,0030 (SP)
  3207. 8FB10034 LW S1,0034 (SP)
  3208. 8FB20038 LW S2,0038 (SP)
  3209. 8FB3003C LW S3,003C (SP)
  3210. 8FB40040 LW S4,0040 (SP)
  3211. 8FB50044 LW S5,0044 (SP)
  3212. 8FB60048 LW S6,0048 (SP)
  3213. 8FB7004C LW S7,004C (SP)
  3214. 8FBE0050 LW S8,0050 (SP)
  3215. 03E00008 JR RA
  3216. 27BD0120 ADDIU SP,SP,0120
  3217.  
  3218. 801C9B50 0x2CD0 801E0F70 = A0; 801D2EC0 = A1
  3219. accepts: A0, A1=p->function or None
  3220. 3C01801E LUI AT,801E
  3221. AC240F70 SW A0,0F70 (AT)
  3222. 3C01801D LUI AT,801D
  3223. AC252EC0 SW A1,2EC0 (AT)
  3224. 03E00008 JR RA
  3225. 00000000 NOP
  3226.  
  3227. 00000000 NOP
  3228. 00000000 NOP
  3229.  
  3230. 801C9B70 0x2CF0 V0 = base 10 version of int A0
  3231. accepts: A0=int
  3232. 2881000A SLTI AT,A0,000A
  3233. 00001025 OR V0,R0,R0
  3234. 10200003 BEQ AT,R0,+3
  3235. 00001825 OR V1,R0,R0
  3236. 03E00008 JR RA
  3237. 00801025 OR V0,A0,R0 # if A0 < 10, return A0
  3238. @801C9B88
  3239. 2881000A SLTI AT,A0,000A
  3240. 1420000A BNE AT,R0,+10
  3241. 24050001 ADDIU A1,R0,0001
  3242. 2406000A ADDIU A2,R0,000A
  3243. 2408000A ADDIU T0,R0,000A
  3244. @801C9B9C
  3245. 00C80019 MULTU A2,T0
  3246. 00C02825 OR A1,A2,R0
  3247. 24420001 ADDIU V0,V0,0001
  3248. 00003012 MFLO A2
  3249. 0086082A SLT AT,A0,A2
  3250. 1020FFFA BEQ AT,R0,-6
  3251. 00000000 NOP
  3252. @801C9BB8
  3253. 00403825 OR A3,V0,R0
  3254. 2408000A ADDIU T0,R0,000A
  3255. 00803025 OR A2,A0,R0
  3256. 1040001D BEQ V0,R0,+29
  3257. 2442FFFF ADDIU V0,V0,FFFF
  3258. 00C5001A DIV A2,A1
  3259. 14A00002 BNE A1,R0,+2
  3260. 00000000 NOP
  3261. 0007000D BREAK 0x1C00
  3262. 2401FFFF ADDIU AT,R0,FFFF
  3263. 14A10004 BNE A1,AT,+4
  3264. 3C018000 LUI AT,8000
  3265. 14C10002 BNE A2,AT,+2
  3266. 00000000 NOP
  3267. 0006000D BREAK 0x1800
  3268. 00007012 MFLO T6
  3269. 00003010 MFHI A2
  3270. 00403825 OR A3,V0,R0
  3271. 006E1825 OR V1,V1,T6
  3272. 00A8001A DIV A1,T0
  3273. 00031900 SLL V1,V1,0x4
  3274. 15000002 BNE T0,R0,+2
  3275. 00000000 NOP
  3276. 0007000D BREAK 0x1C00
  3277. 2401FFFF ADDIU AT,R0,FFFF
  3278. 15010004 BNE T0,AT,+4
  3279. 3C018000 LUI AT,8000
  3280. 14A10002 BNE A1,AT,+2
  3281. 00000000 NOP
  3282. 0006000D BREAK 0x1800
  3283. 00002812 MFLO A1
  3284. 1440FFE5 BNE V0,R0,-27
  3285. 2442FFFF ADDIU V0,V0,FFFF
  3286. 00661021 ADDU V0,V1,A2
  3287. 03E00008 JR RA
  3288. 00000000 NOP
  3289.  
  3290. 801C9C48 0x2DC8 V0 = language (0:Japanese, 1:English)
  3291. 3C0E8000 LUI T6,8000
  3292. 8DCE6280 LW T6,6280 (T6)
  3293. 24010001 ADDIU AT,R0,0001
  3294. 24030001 ADDIU V1,R0,0001
  3295. 15C10003 BNE T6,AT,+3 # if @80006280 != 1: return English
  3296. 00000000 NOP
  3297. 10000001 BEQ R0,R0,+1 # return Japanese
  3298. 00001825 OR V1,R0,R0
  3299. 00601025 OR V0,V1,R0
  3300. 03E00008 JR RA
  3301. 00000000 NOP
  3302.  
  3303. 801C9C74 0x2DF4 write value A1 to A2 bytes at A0
  3304. accepts: A0=p->target, A1=value, A2=length
  3305. AFA50004 SW A1,0004 (SP)
  3306. 30A500FF ANDI A1,A1,00FF
  3307. 00C01025 OR V0,A2,R0
  3308. 10C00006 BEQ A2,R0,+6
  3309. 24C6FFFF ADDIU A2,A2,FFFF
  3310. 00C01025 OR V0,A2,R0
  3311. A0850000 SB A1,0000 (A0)
  3312. 24840001 ADDIU A0,A0,0001
  3313. 14C0FFFC BNE A2,R0,-4
  3314. 24C6FFFF ADDIU A2,A2,FFFF
  3315. 03E00008 JR RA
  3316. 00000000 NOP
  3317.  
  3318. 801C9CA4 0x2E24 V0 = p->"Error #" string for region
  3319. 27BDFFE8 ADDIU SP,SP,FFE8
  3320. AFBF0014 SW RA,0014 (SP)
  3321. 0C072712 JAL 801C9C48 # V0 = language (0:Japanese, 1:English)
  3322. 00000000 NOP
  3323. 00027080 SLL T6,V0,0x2
  3324. 3C02801D LUI V0,801D
  3325. 004E1021 ADDU V0,V0,T6
  3326. 8C422ED0 LW V0,2ED0 (V0) # @801D2ED0[language]: p->error# message for language
  3327. 8FBF0014 LW RA,0014 (SP)
  3328. 27BD0018 ADDIU SP,SP,0018
  3329. 03E00008 JR RA
  3330. 00000000 NOP
  3331.  
  3332. 801C9CD4 0x2E54 print int A1 to string A0 as widechars
  3333. accepts: A0=p->string, A1=int
  3334. 27BDFFE0 ADDIU SP,SP,FFE0
  3335. AFBF0014 SW RA,0014 (SP)
  3336. AFA40020 SW A0,0020 (SP)
  3337. AFA50024 SW A1,0024 (SP)
  3338. 0C0726DC JAL 801C9B70 # V0 = base 10 version of int A0
  3339. 8FA40024 LW A0,0024 (SP)
  3340. 8FAE0024 LW T6,0024 (SP)
  3341. 8FA40020 LW A0,0020 (SP)
  3342. 00401825 OR V1,V0,R0
  3343. 29C1000A SLTI AT,T6,000A
  3344. 14200006 BNE AT,R0,+6
  3345. 3405A1A1 ORI A1,R0,A1A1 # A1 = fullwidth space char
  3346. 00022903 SRA A1,V0,0x4
  3347. 3401A3B0 ORI AT,R0,A3B0
  3348. 00A12821 ADDU A1,A1,AT
  3349. 10000001 BEQ R0,R0,+1
  3350. 30A5FFFF ANDI A1,A1,FFFF
  3351. AFA3001C SW V1,001C (SP)
  3352. 0C07253E JAL 801C94F8
  3353. AFA40020 SW A0,0020 (SP)
  3354. 8FA3001C LW V1,001C (SP)
  3355. 8FA40020 LW A0,0020 (SP)
  3356. 3401A3B0 ORI AT,R0,A3B0
  3357. 3065000F ANDI A1,V1,000F
  3358. 00A12821 ADDU A1,A1,AT
  3359. 30A5FFFF ANDI A1,A1,FFFF
  3360. 0C07253E JAL 801C94F8
  3361. 24840002 ADDIU A0,A0,0002
  3362. 8FBF0014 LW RA,0014 (SP)
  3363. 27BD0020 ADDIU SP,SP,0020
  3364. 03E00008 JR RA
  3365. 00000000 NOP
  3366.  
  3367. 801C9D54 0x2ED4 print int A1 to string A0
  3368. accepts: A0=p->string, A1=int
  3369. 27BDFFE8 ADDIU SP,SP,FFE8
  3370. AFBF0014 SW RA,0014 (SP)
  3371. AFA5001C SW A1,001C (SP)
  3372. 00803025 OR A2,A0,R0
  3373. 8FA4001C LW A0,001C (SP)
  3374. 0C0726DC JAL 801C9B70 # V0 = base 10 version of int A0
  3375. AFA60018 SW A2,0018 (SP)
  3376. 8FAE001C LW T6,001C (SP)
  3377. 3048000F ANDI T0,V0,000F
  3378. 8FA60018 LW A2,0018 (SP)
  3379. 29C1000A SLTI AT,T6,000A
  3380. 14200005 BNE AT,R0,+5
  3381. 25090030 ADDIU T1,T0,0030
  3382. 00027903 SRA T7,V0,0x4
  3383. 25F80030 ADDIU T8,T7,0030
  3384. 10000003 BEQ R0,R0,+3
  3385. A0D80000 SB T8,0000 (A2)
  3386. 24190020 ADDIU T9,R0,0020
  3387. A0D90000 SB T9,0000 (A2)
  3388. 24C60001 ADDIU A2,A2,0001
  3389. A0C90000 SB T1,0000 (A2)
  3390. 8FBF0014 LW RA,0014 (SP)
  3391. 27BD0018 ADDIU SP,SP,0018
  3392. 03E00008 JR RA
  3393. 00000000 NOP
  3394.  
  3395. 801C9DB8 draw error# for sensecode A1 to image A0
  3396. accepts: A0=p->image, A1=sensecode
  3397. 27BDFFE0 ADDIU SP,SP,FFE0
  3398. AFBF0014 SW RA,0014 (SP)
  3399. AFA40020 SW A0,0020 (SP)
  3400. AFA50024 SW A1,0024 (SP)
  3401. 0C072729 JAL 801C9CA4 # V0 = p->"Error #" string for region
  3402. 00000000 NOP
  3403. 3C0E8000 LUI T6,8000
  3404. 8DCE6280 LW T6,6280 (T6)
  3405. 24010001 ADDIU AT,R0,0001
  3406. 8FA50024 LW A1,0024 (SP)
  3407. 15C10006 BNE T6,AT,+6 # if @80006280 != 1: English
  3408. 00401825 OR V1,V0,R0
  3409. @801C9DE8: Japanese
  3410. 2444000C ADDIU A0,V0,000C
  3411. 0C072735 JAL 801C9CD4 # print int A1 to string A0 as widechars
  3412. AFA2001C SW V0,001C (SP)
  3413. 10000005 BEQ R0,R0,+5
  3414. 8FA40020 LW A0,0020 (SP)
  3415. @801C9DFC: English
  3416. 2464000D ADDIU A0,V1,000D
  3417. 0C072755 JAL 801C9D54 # print int A1 to string A0
  3418. AFA3001C SW V1,001C (SP)
  3419. 8FA40020 LW A0,0020 (SP)
  3420. @801C9E0C
  3421. 240500C0 ADDIU A1,R0,00C0 # width = 0xC0
  3422. 0C072684 JAL 801C9A10 # draw string A2 to image A0, width A1
  3423. 8FA6001C LW A2,001C (SP) # text = p->"Error #" string for region
  3424. 8FBF0014 LW RA,0014 (SP)
  3425. 27BD0020 ADDIU SP,SP,0020
  3426. 03E00008 JR RA
  3427. 00000000 NOP
  3428.  
  3429. 801C9E28 0x2FA8 V0 = p->image for error# string
  3430. accepts: A0=sensecode
  3431. 27BDFFE8 ADDIU SP,SP,FFE8
  3432. AFBF0014 SW RA,0014 (SP)
  3433. 00802825 OR A1,A0,R0
  3434. 0C0727B0 JAL 801C9EC0 # V0 = 801E0F80; initialize image at 801E0F80
  3435. AFA50018 SW A1,0018 (SP)
  3436. 8FA50018 LW A1,0018 (SP)
  3437. 24010029 ADDIU AT,R0,0029
  3438. 54A1000B BNEL A1,AT,+11
  3439. 28A10025 SLTI AT,A1,0025
  3440. @801C9E4C: sensecode 0x29 (DEVICE COMMUNICATION FAILURE)
  3441. 0C072712 JAL 801C9C48 # V0 = language (0:Japanese, 1:English)
  3442. 00000000 NOP
  3443. 00027080 SLL T6,V0,0x2
  3444. 01C27023 SUBU T6,T6,V0
  3445. 3C0F801D LUI T7,801D
  3446. 25EF2FE0 ADDIU T7,T7,2FE0
  3447. 000E7240 SLL T6,T6,0x9
  3448. 10000011 BEQ R0,R0,+17
  3449. 01CF1021 ADDU V0,T6,T7 # return = 801D2FE0 + (V0*0x600): p->Japanese or English Error 41 image
  3450. @801C9E70
  3451. 28A10025 SLTI AT,A1,0025
  3452. 14200002 BNE AT,R0,+2
  3453. 28A10029 SLTI AT,A1,0029
  3454. 14200005 BNE AT,R0,+5
  3455. 2401001F ADDIU AT,R0,001F
  3456. 10A10003 BEQ A1,AT,+3
  3457. 24010020 ADDIU AT,R0,0020
  3458. 14A10004 BNE A1,AT,+4
  3459. 3C04801E LUI A0,801E
  3460. 3C02801E LUI V0,801E
  3461. 10000005 BEQ R0,R0,+5 # return 801E0F80
  3462. 24420F80 ADDIU V0,V0,0F80
  3463. @801C9EA0
  3464. 0C07276E JAL 801C9DB8 # draw error# for sensecode A1 to image A0
  3465. 24840F80 ADDIU A0,A0,0F80
  3466. 3C02801E LUI V0,801E
  3467. 24420F80 ADDIU V0,V0,0F80 # return 801E0F80
  3468. @801C9EB0
  3469. 8FBF0014 LW RA,0014 (SP)
  3470. 27BD0018 ADDIU SP,SP,0018
  3471. 03E00008 JR RA
  3472. 00000000 NOP
  3473.  
  3474. 801C9EC0 0x3040 V0 = 801E0F80; initialize image at 801E0F80
  3475. 27BDFFE8 ADDIU SP,SP,FFE8
  3476. AFBF0014 SW RA,0014 (SP)
  3477. 3C04801E LUI A0,801E
  3478. 24840F80 ADDIU A0,A0,0F80
  3479. 00002825 OR A1,R0,R0
  3480. 0C07271D JAL 801C9C74 # write value A1 to A2 bytes at A0
  3481. 24060600 ADDIU A2,R0,0600
  3482. 3C02801E LUI V0,801E
  3483. 24420F80 ADDIU V0,V0,0F80
  3484. 8FBF0014 LW RA,0014 (SP)
  3485. 27BD0018 ADDIU SP,SP,0018
  3486. 03E00008 JR RA
  3487. 00000000 NOP
  3488.  
  3489. 801C9EF4 draw A2 lines of leo error msg A1 to image A0
  3490. accepts: A0=p->image, A1=msg#, A2=#lines
  3491. 27BDFFD0 ADDIU SP,SP,FFD0
  3492. AFB50028 SW S5,0028 (SP)
  3493. AFB30020 SW S3,0020 (SP)
  3494. AFB10018 SW S1,0018 (SP)
  3495. 00808825 OR S1,A0,R0
  3496. 00C09825 OR S3,A2,R0
  3497. 00A0A825 OR S5,A1,R0
  3498. AFBF002C SW RA,002C (SP)
  3499. AFB40024 SW S4,0024 (SP)
  3500. AFB2001C SW S2,001C (SP)
  3501. AFB00014 SW S0,0014 (SP)
  3502. 1A600012 BLTZ S3,+18
  3503. 00008025 OR S0,R0,R0
  3504. 3C12801D LUI S2,801D
  3505. 26522EE0 ADDIU S2,S2,2EE0
  3506. 0013A080 SLL S4,S3,0x2
  3507. 0C072712 JAL 801C9C48 # V0 = language (0:Japanese, 1:English)
  3508. 00000000 NOP
  3509. 000271C0 SLL T6,V0,0x7
  3510. 024E7821 ADDU T7,S2,T6
  3511. 0015C100 SLL T8,S5,0x4
  3512. 01F8C821 ADDU T9,T7,T8
  3513. 03304021 ADDU T0,T9,S0
  3514. 8D060000 LW A2,0000 (T0) # text = 801D2EE0 + (language * 0x80) + (msg * 16) + (line * 4)
  3515. 02202025 OR A0,S1,R0 # target = A0 + (line * 0xA00)
  3516. 0C072684 JAL 801C9A10 # draw string A2 to image A0, width A1
  3517. 24050140 ADDIU A1,R0,0140 # width
  3518. 26100004 ADDIU S0,S0,0004
  3519. 1614FFF3 BNE S0,S4,-13
  3520. 26310A00 ADDIU S1,S1,0A00
  3521. 8FBF002C LW RA,002C (SP)
  3522. 8FB00014 LW S0,0014 (SP)
  3523. 8FB10018 LW S1,0018 (SP)
  3524. 8FB2001C LW S2,001C (SP)
  3525. 8FB30020 LW S3,0020 (SP)
  3526. 8FB40024 LW S4,0024 (SP)
  3527. 8FB50028 LW S5,0028 (SP)
  3528. 03E00008 JR RA
  3529. 27BD0030 ADDIU SP,SP,0030
  3530.  
  3531. 801C9F90 0x3110 V0 = 801E1580; draw error A0's text to image at 801E1580
  3532. accepts: A0=leo error to display
  3533. 27BDFFE8 ADDIU SP,SP,FFE8
  3534. AFBF0014 SW RA,0014 (SP)
  3535. AFA40018 SW A0,0018 (SP)
  3536. 0C0727FF JAL 801C9FFC # V0 = 801E1580; initialize image at 801E1580
  3537. 00000000 NOP
  3538. 8FA50018 LW A1,0018 (SP)
  3539. 24010003 ADDIU AT,R0,0003
  3540. 3C04801E LUI A0,801E
  3541. 14A1000A BNE A1,AT,+10
  3542. 24841580 ADDIU A0,A0,1580
  3543. 0C072712 JAL 801C9C48 # V0 = language (0:Japanese, 1:English)
  3544. 00000000 NOP
  3545. 00027080 SLL T6,V0,0x2
  3546. 01C27021 ADDU T6,T6,V0
  3547. 3C0F801D LUI T7,801D
  3548. 25EF3BE0 ADDIU T7,T7,3BE0
  3549. 000E72C0 SLL T6,T6,0xB
  3550. 10000005 BEQ R0,R0,+5 # return V0 = 801D3BE0 + (language * 0x2800): p->Japanese or English "Please read the instruction manual for details" error image
  3551. 01CF1021 ADDU V0,T6,T7
  3552. 0C0727BD JAL 801C9EF4 # draw A2 lines of leo error msg A1 to image A0
  3553. 24060004 ADDIU A2,R0,0004
  3554. 3C02801E LUI V0,801E
  3555. 24421580 ADDIU V0,V0,1580 # return 801E1580
  3556. 8FBF0014 LW RA,0014 (SP)
  3557. 27BD0018 ADDIU SP,SP,0018
  3558. 03E00008 JR RA
  3559. 00000000 NOP
  3560.  
  3561. 801C9FFC 0x317C V0 = 801E1580; initialize image at 801E1580
  3562. 27BDFFE8 ADDIU SP,SP,FFE8
  3563. AFBF0014 SW RA,0014 (SP)
  3564. 3C04801E LUI A0,801E
  3565. 24841580 ADDIU A0,A0,1580
  3566. 00002825 OR A1,R0,R0
  3567. 0C07271D JAL 801C9C74 # write value A1 to A2 bytes at A0
  3568. 24062800 ADDIU A2,R0,2800
  3569. 3C02801E LUI V0,801E
  3570. 24421580 ADDIU V0,V0,1580
  3571. 8FBF0014 LW RA,0014 (SP)
  3572. 27BD0018 ADDIU SP,SP,0018
  3573. 03E00008 JR RA
  3574. 00000000 NOP
  3575.  
  3576. 801CA030 0x31B0 V0 = 801E3D80; draw disk removal/insertion leo error to image 801E3D80
  3577. accepts: A0=leo error msg
  3578. 27BDFFE8 ADDIU SP,SP,FFE8
  3579. AFBF0014 SW RA,0014 (SP)
  3580. AFA40018 SW A0,0018 (SP)
  3581. 0C07281C JAL 801CA070 # V0 = 801E3D80; initialize image at 801E3D80
  3582. 00000000 NOP
  3583. 3C04801E LUI A0,801E
  3584. 24843D80 ADDIU A0,A0,3D80
  3585. 8FA50018 LW A1,0018 (SP)
  3586. 0C0727BD JAL 801C9EF4 # draw A2 lines of leo error msg A1 to image A0
  3587. 24060002 ADDIU A2,R0,0002 # 2 lines
  3588. 3C02801E LUI V0,801E
  3589. 24423D80 ADDIU V0,V0,3D80
  3590. 8FBF0014 LW RA,0014 (SP)
  3591. 27BD0018 ADDIU SP,SP,0018
  3592. 03E00008 JR RA
  3593. 00000000 NOP
  3594.  
  3595. 801CA070 0x31F0 V0 = 801E3D80; initialize image at 801E3D80
  3596. 27BDFFE8 ADDIU SP,SP,FFE8
  3597. AFBF0014 SW RA,0014 (SP)
  3598. 3C04801E LUI A0,801E
  3599. 24843D80 ADDIU A0,A0,3D80
  3600. 00002825 OR A1,R0,R0
  3601. 0C07271D JAL 801C9C74 # write value A1 to A2 bytes at A0
  3602. 24061400 ADDIU A2,R0,1400
  3603. 3C02801E LUI V0,801E
  3604. 24423D80 ADDIU V0,V0,3D80
  3605. 8FBF0014 LW RA,0014 (SP)
  3606. 27BD0018 ADDIU SP,SP,0018
  3607. 03E00008 JR RA
  3608. 00000000 NOP
  3609.  
  3610. 00000000 NOP
  3611. 00000000 NOP
  3612. 00000000 NOP
  3613.  
  3614. 801CA0B0 0x3230 read image for char A0 with width A2, height A3, and alignment SP+10 from IPL to rdram A1
  3615. accepts: A0=char, A1=p->target, A2=target for width, A3=target for height, SP+10=target for alignment
  3616. 27BDFFA0 ADDIU SP,SP,FFA0
  3617. AFB00018 SW S0,0018 (SP)
  3618. 00808025 OR S0,A0,R0
  3619. AFBF001C SW RA,001C (SP)
  3620. AFA50064 SW A1,0064 (SP)
  3621. AFA60068 SW A2,0068 (SP)
  3622. AFA7006C SW A3,006C (SP)
  3623. 0C000580 JAL 80001600 # V0 = p->EPI handle, created if necessary
  3624. 00000000 NOP
  3625. 2A010020 SLTI AT,S0,0020
  3626. 1420000D BNE AT,R0,+13
  3627. AFA20058 SW V0,0058 (SP)
  3628. 2A01007F SLTI AT,S0,007F
  3629. 1020000A BEQ AT,R0,+10 # skip if not ASCII
  3630. 00107080 SLL T6,S0,0x2
  3631. 3C04801E LUI A0,801E
  3632. 008E2021 ADDU A0,A0,T6
  3633. 8C848B60 LW A0,8B60 (A0) # LeoGetAAdr2 = 801D8BE0[ASCII - ' ']
  3634. 8FA50068 LW A1,0068 (SP)
  3635. 8FA6006C LW A2,006C (SP)
  3636. 0C072F34 JAL 801CBCD0 # V0 = address, A1 = width, A2 = height, A3 = alignment for IPL font image entry A0
  3637. 8FA70070 LW A3,0070 (SP)
  3638. 10000013 BEQ R0,R0,+19
  3639. 00408025 OR S0,V0,R0
  3640. @801CA110: shift-jis
  3641. 34018140 ORI AT,R0,8140
  3642. 0201082A SLT AT,S0,AT
  3643. 1420000D BNE AT,R0,+13
  3644. 00000000 NOP
  3645. 0C073C2C JAL 801CF0B0 # V0 = offset in IPL font to wchar A0's image (shift-jis)
  3646. 02002025 OR A0,S0,R0
  3647. 8FAF0068 LW T7,0068 (SP)
  3648. 24030010 ADDIU V1,R0,0010
  3649. 2419000B ADDIU T9,R0,000B
  3650. ADE30000 SW V1,0000 (T7)
  3651. 8FB8006C LW T8,006C (SP)
  3652. 00408025 OR S0,V0,R0
  3653. AF030000 SW V1,0000 (T8)
  3654. 8FA80070 LW T0,0070 (SP)
  3655. 10000003 BEQ R0,R0,+3
  3656. AD190000 SW T9,0000 (T0)
  3657. @801CA150
  3658. 1000001B BEQ R0,R0,+27
  3659. 2402FFFF ADDIU V0,R0,FFFF
  3660. @801CA158
  3661. 27A40040 ADDIU A0,SP,0040
  3662. 27A5003C ADDIU A1,SP,003C
  3663. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  3664. 24060001 ADDIU A2,R0,0001
  3665. 8FAB0064 LW T3,0064 (SP)
  3666. 8FAE0058 LW T6,0058 (SP)
  3667. 3C01000A LUI AT,000A
  3668. 02015021 ADDU T2,S0,AT
  3669. 27A90040 ADDIU T1,SP,0040
  3670. 240C0080 ADDIU T4,R0,0080
  3671. AFAC0034 SW T4,0034 (SP) # req+10 = length: 0x80
  3672. AFA90028 SW T1,0028 (SP) # req+4 = queue temp queue above
  3673. AFAA0030 SW T2,0030 (SP) # req+C = hardware: 0xA0000 + offset
  3674. A3A00026 SB R0,0026 (SP) # req[2] = 0
  3675. 240D0002 ADDIU T5,R0,0002
  3676. AFAB002C SW T3,002C (SP) # req[8] = A1
  3677. ADCD0014 SW T5,0014 (T6) # IPL EPI handle+14 = 2
  3678. 8FA40058 LW A0,0058 (SP) # p->IPL EPI handle
  3679. 27A50024 ADDIU A1,SP,0024
  3680. 0C001030 JAL 800040C0 # send read or write (A2) DMA request A1 using EPI handle A0
  3681. 00003025 OR A2,R0,R0 # read
  3682. 27A40040 ADDIU A0,SP,0040
  3683. 00002825 OR A1,R0,R0
  3684. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  3685. 24060001 ADDIU A2,R0,0001
  3686. 00001025 OR V0,R0,R0
  3687. 8FBF001C LW RA,001C (SP)
  3688. 8FB00018 LW S0,0018 (SP)
  3689. 27BD0060 ADDIU SP,SP,0060
  3690. 03E00008 JR RA
  3691. 00000000 NOP
  3692.  
  3693. 801CA1D4 0x3354 V0 = color A0 from palette 801D9390
  3694. accepts: A0=index
  3695. 308E000F ANDI T6,A0,000F
  3696. 000E7840 SLL T7,T6,0x1
  3697. 3C02801E LUI V0,801E
  3698. 004F1021 ADDU V0,V0,T7
  3699. 94429390 LHU V0,9390 (V0)
  3700. 03E00008 JR RA
  3701. 00000000 NOP
  3702.  
  3703. 801CA1F0 0x3370 directly draw SP+10 rows of ci4 image A0, (A3, A2) and A1 bytes wide, from offset SP+14 to buffer SP+18 with width SP+1C
  3704. accepts: A0=p->image, A1=bytes per row, A2=height, A3=width, SP+10=height out, SP+14=offset, SP+18=p->out, SP+1C=out width
  3705. 27BDFFC0 ADDIU SP,SP,FFC0
  3706. AFBE0038 SW S8,0038 (SP)
  3707. AFB70034 SW S7,0034 (SP)
  3708. AFB30024 SW S3,0024 (SP)
  3709. 00E09825 OR S3,A3,R0
  3710. 8FB70050 LW S7,0050 (SP)
  3711. 00A0F025 OR S8,A1,R0
  3712. AFBF003C SW RA,003C (SP)
  3713. AFB60030 SW S6,0030 (SP)
  3714. AFB5002C SW S5,002C (SP)
  3715. AFB40028 SW S4,0028 (SP)
  3716. AFB20020 SW S2,0020 (SP)
  3717. AFB1001C SW S1,001C (SP)
  3718. AFB00018 SW S0,0018 (SP)
  3719. AFA60048 SW A2,0048 (SP)
  3720. 00808825 OR S1,A0,R0
  3721. 1AE00025 BLTZ S7,+37 # if no output size, return
  3722. 0000A825 OR S5,R0,R0
  3723. @801CA238
  3724. 32760001 ANDI S6,S3,0001
  3725. 8FB40058 LW S4,0058 (SP)
  3726. 1A60001C BLTZ S3,+28
  3727. 00008025 OR S0,R0,R0
  3728. 8FAE0048 LW T6,0048 (SP)
  3729. 8FAF0054 LW T7,0054 (SP)
  3730. 8FA9005C LW T1,005C (SP)
  3731. 001E6040 SLL T4,S8,0x1 # T4 = width * 2
  3732. 01CFC023 SUBU T8,T6,T7
  3733. 0315C821 ADDU T9,T8,S5
  3734. 2728000B ADDIU T0,T9,000B
  3735. 01090019 MULTU T0,T1
  3736. 028C6821 ADDU T5,S4,T4
  3737. 00005012 MFLO T2
  3738. 000A5840 SLL T3,T2,0x1 # T3 = 2(@SP+1C * (A2 - @SP+14 + outpos + 11))
  3739. 01AB9021 ADDU S2,T5,T3 # target = @SP+18 + width * 2 + 2(@SP+1C * (A2 - @SP+14 + outpos + 11))
  3740. 320E0001 ANDI T6,S0,0001
  3741. 55C00005 BNEL T6,R0,+5
  3742. 92240000 LBU A0,0000 (S1)
  3743. 92240000 LBU A0,0000 (S1)
  3744. 10000004 BEQ R0,R0,+4
  3745. 00042103 SRA A0,A0,0x4 # pixel = upper nibble
  3746. @801CA290: get pixel from next byte
  3747. 92240000 LBU A0,0000 (S1)
  3748. 26310001 ADDIU S1,S1,0001
  3749. 3084000F ANDI A0,A0,000F
  3750. 0C072875 JAL 801CA1D4 # V0 = color A0 from palette 801D9390
  3751. 00000000 NOP
  3752. 26100001 ADDIU S0,S0,0001
  3753. 26520002 ADDIU S2,S2,0002
  3754. 1613FFF2 BNE S0,S3,-14
  3755. A642FFFE SH V0,FFFE (S2)
  3756. @801CA2B4: per row
  3757. 12C00002 BEQ S6,R0,+2
  3758. 26B50001 ADDIU S5,S5,0001
  3759. 26310001 ADDIU S1,S1,0001
  3760. 16B7FFDF BNE S5,S7,-33 # for i in range(height)
  3761. 00000000 NOP
  3762. @801CA2C8: return
  3763. 8FBF003C LW RA,003C (SP)
  3764. 8FB00018 LW S0,0018 (SP)
  3765. 8FB1001C LW S1,001C (SP)
  3766. 8FB20020 LW S2,0020 (SP)
  3767. 8FB30024 LW S3,0024 (SP)
  3768. 8FB40028 LW S4,0028 (SP)
  3769. 8FB5002C LW S5,002C (SP)
  3770. 8FB60030 LW S6,0030 (SP)
  3771. 8FB70034 LW S7,0034 (SP)
  3772. 8FBE0038 LW S8,0038 (SP)
  3773. 03E00008 JR RA
  3774. 27BD0040 ADDIU SP,SP,0040
  3775.  
  3776. 801CA2F8 0x3478
  3777. A0850010 SB A1,0010 (A0)
  3778. A0860011 SB A2,0011 (A0)
  3779. A0870012 SB A3,0012 (A0)
  3780. 8FAE0010 LW T6,0010 (SP)
  3781. A08E0013 SB T6,0013 (A0)
  3782. 03E00008 JR RA
  3783. 00000000 NOP
  3784.  
  3785. 801CA314 0x3494
  3786. 948E0014 LHU T6,0014 (A0)
  3787. 94980016 LHU T8,0016 (A0)
  3788. 01C57821 ADDU T7,T6,A1
  3789. 0306C821 ADDU T9,T8,A2
  3790. A48F000A SH T7,000A (A0)
  3791. A499000C SH T9,000C (A0)
  3792. 03E00008 JR RA
  3793. 00000000 NOP
  3794.  
  3795. 801CA334 0x34B4
  3796. A4850014 SH A1,0014 (A0)
  3797. A4860016 SH A2,0016 (A0)
  3798. A4870018 SH A3,0018 (A0)
  3799. 8FAE0010 LW T6,0010 (SP)
  3800. A48E001A SH T6,001A (A0)
  3801. 03E00008 JR RA
  3802. 00000000 NOP
  3803.  
  3804. 801CA350 0x34D0
  3805. 27BDFFE0 ADDIU SP,SP,FFE0
  3806. AFBF001C SW RA,001C (SP)
  3807. AFA50024 SW A1,0024 (SP)
  3808. AFA60028 SW A2,0028 (SP)
  3809. AFA7002C SW A3,002C (SP)
  3810. 8FAE0024 LW T6,0024 (SP)
  3811. 3C012000 LUI AT,2000
  3812. 00002825 OR A1,R0,R0
  3813. 01C17821 ADDU T7,T6,AT
  3814. AC8F0020 SW T7,0020 (A0)
  3815. 8FB80028 LW T8,0028 (SP)
  3816. 00003025 OR A2,R0,R0
  3817. A4980024 SH T8,0024 (A0)
  3818. 8FB9002C LW T9,002C (SP)
  3819. A4990026 SH T9,0026 (A0)
  3820. 8FA8002C LW T0,002C (SP)
  3821. 8FA70028 LW A3,0028 (SP)
  3822. 2509FFFF ADDIU T1,T0,FFFF
  3823. AFA90010 SW T1,0010 (SP)
  3824. 0C0728CD JAL 801CA334
  3825. 24E7FFFF ADDIU A3,A3,FFFF
  3826. 8FBF001C LW RA,001C (SP)
  3827. 27BD0020 ADDIU SP,SP,0020
  3828. 03E00008 JR RA
  3829. 00000000 NOP
  3830.  
  3831. 801CA3B4 0x3534
  3832. 3C012000 LUI AT,2000
  3833. 00A17021 ADDU T6,A1,AT
  3834. AC8E0004 SW T6,0004 (A0)
  3835. A4860008 SH A2,0008 (A0)
  3836. 03E00008 JR RA
  3837. 00000000 NOP
  3838.  
  3839. 801CA3CC 0x354C
  3840. 27BDFFB0 ADDIU SP,SP,FFB0
  3841. AFB00028 SW S0,0028 (SP)
  3842. AFA50054 SW A1,0054 (SP)
  3843. 30A500FF ANDI A1,A1,00FF
  3844. 00808025 OR S0,A0,R0
  3845. AFBF002C SW RA,002C (SP)
  3846. 9202001C LBU V0,001C (S0)
  3847. 27A60048 ADDIU A2,SP,0048
  3848. 27A70044 ADDIU A3,SP,0044
  3849. 10400004 BEQ V0,R0,+4
  3850. 27AF0040 ADDIU T7,SP,0040
  3851. 00027200 SLL T6,V0,0x8
  3852. 1000000A BEQ R0,R0,+10
  3853. 01C52025 OR A0,T6,A1
  3854. 28A10080 SLTI AT,A1,0080
  3855. 14200006 BNE AT,R0,+6
  3856. 00A01025 OR V0,A1,R0
  3857. 28A10099 SLTI AT,A1,0099
  3858. 50200004 BEQL AT,R0,+4
  3859. 00402025 OR A0,V0,R0
  3860. 10000030 BEQ R0,R0,+48
  3861. A205001C SB A1,001C (S0)
  3862. 00402025 OR A0,V0,R0
  3863. A200001C SB R0,001C (S0)
  3864. 8E050004 LW A1,0004 (S0)
  3865. 0C07282C JAL 801CA0B0 # read image for char A0 with width A2, height A3, and alignment SP+10 from IPL to rdram A1
  3866. AFAF0010 SW T7,0010 (SP)
  3867. 14400029 BNE V0,R0,+41
  3868. 8FB90048 LW T9,0048 (SP)
  3869. 9605000A LHU A1,000A (S0)
  3870. 96180018 LHU T8,0018 (S0)
  3871. 00B94021 ADDU T0,A1,T9
  3872. 0308082A SLT AT,T8,T0
  3873. 5020000F BEQL AT,R0,+15
  3874. 8FAC0044 LW T4,0044 (SP)
  3875. 9602000C LHU V0,000C (S0)
  3876. 960A001A LHU T2,001A (S0)
  3877. 96090014 LHU T1,0014 (S0)
  3878. 24420010 ADDIU V0,V0,0010
  3879. 0142082A SLT AT,T2,V0
  3880. 10200005 BEQ AT,R0,+5
  3881. A609000A SH T1,000A (S0)
  3882. 960B0016 LHU T3,0016 (S0)
  3883. 3125FFFF ANDI A1,T1,FFFF
  3884. 10000003 BEQ R0,R0,+3
  3885. A60B000C SH T3,000C (S0)
  3886. A602000C SH V0,000C (S0)
  3887. 9605000A LHU A1,000A (S0)
  3888. 8FAC0044 LW T4,0044 (SP)
  3889. 8FAD0040 LW T5,0040 (SP)
  3890. 8E040004 LW A0,0004 (S0)
  3891. 9606000C LHU A2,000C (S0)
  3892. AFAC0010 SW T4,0010 (SP)
  3893. AFAD0014 SW T5,0014 (SP)
  3894. 8E0E0020 LW T6,0020 (S0)
  3895. 8FA70048 LW A3,0048 (SP)
  3896. AFAE0018 SW T6,0018 (SP)
  3897. 960F0024 LHU T7,0024 (S0)
  3898. 0C07287C JAL 801CA1F0 # directly draw SP+10 rows of ci4 image A0, (A3, A2) and A1 bytes wide, from offset SP+14 to buffer SP+18 with width SP+1C
  3899. AFAF001C SW T7,001C (SP)
  3900. 8FA30048 LW V1,0048 (SP)
  3901. 24010010 ADDIU AT,R0,0010
  3902. 14610003 BNE V1,AT,+3
  3903. 24620002 ADDIU V0,V1,0002
  3904. 10000001 BEQ R0,R0,+1
  3905. 00601025 OR V0,V1,R0
  3906. 9619000A LHU T9,000A (S0)
  3907. 0322C021 ADDU T8,T9,V0
  3908. A618000A SH T8,000A (S0)
  3909. 8FBF002C LW RA,002C (SP)
  3910. 8FB00028 LW S0,0028 (SP)
  3911. 27BD0050 ADDIU SP,SP,0050
  3912. 03E00008 JR RA
  3913. 00000000 NOP
  3914.  
  3915. 801CA4F4 0x3674
  3916. 27BDFFE0 ADDIU SP,SP,FFE0
  3917. AFB00018 SW S0,0018 (SP)
  3918. AFA50024 SW A1,0024 (SP)
  3919. 30A500FF ANDI A1,A1,00FF
  3920. 00808025 OR S0,A0,R0
  3921. AFBF001C SW RA,001C (SP)
  3922. 28A10020 SLTI AT,A1,0020
  3923. 14200008 BNE AT,R0,+8
  3924. 00A01025 OR V0,A1,R0
  3925. 28A10100 SLTI AT,A1,0100
  3926. 10200005 BEQ AT,R0,+5
  3927. 00000000 NOP
  3928. 0C0728F3 JAL 801CA3CC
  3929. 02002025 OR A0,S0,R0
  3930. 1000001F BEQ R0,R0,+31
  3931. 8FBF001C LW RA,001C (SP)
  3932. 1040001C BEQ V0,R0,+28
  3933. 24010009 ADDIU AT,R0,0009
  3934. 1041000D BEQ V0,AT,+13
  3935. 2401000A ADDIU AT,R0,000A
  3936. 10410005 BEQ V0,AT,+5
  3937. 2401000D ADDIU AT,R0,000D
  3938. 50410007 BEQL V0,AT,+7
  3939. 96180014 LHU T8,0014 (S0)
  3940. 10000015 BEQ R0,R0,+21
  3941. 8FBF001C LW RA,001C (SP)
  3942. 960E000C LHU T6,000C (S0)
  3943. 25CF0020 ADDIU T7,T6,0020
  3944. A60F000C SH T7,000C (S0)
  3945. 96180014 LHU T8,0014 (S0)
  3946. 1000000E BEQ R0,R0,+14
  3947. A618000A SH T8,000A (S0)
  3948. 02002025 OR A0,S0,R0
  3949. 0C0728F3 JAL 801CA3CC
  3950. 24050020 ADDIU A1,R0,0020
  3951. 9619000A LHU T9,000A (S0)
  3952. 96080014 LHU T0,0014 (S0)
  3953. 03284823 SUBU T1,T9,T0
  3954. 05210004 BGEZ T1,+4
  3955. 312A00FF ANDI T2,T1,00FF
  3956. 11400002 BEQ T2,R0,+2
  3957. 00000000 NOP
  3958. 254AFF00 ADDIU T2,T2,FF00
  3959. 5540FFF5 BNEL T2,R0,-11
  3960. 02002025 OR A0,S0,R0
  3961. 8FBF001C LW RA,001C (SP)
  3962. 8FB00018 LW S0,0018 (SP)
  3963. 27BD0020 ADDIU SP,SP,0020
  3964. 03E00008 JR RA
  3965. 00000000 NOP
  3966.  
  3967. 801CA5BC 0x373C
  3968. 27BDFFD8 ADDIU SP,SP,FFD8
  3969. AFB20020 SW S2,0020 (SP)
  3970. 00809025 OR S2,A0,R0
  3971. AFBF0024 SW RA,0024 (SP)
  3972. AFB1001C SW S1,001C (SP)
  3973. AFB00018 SW S0,0018 (SP)
  3974. 00C70019 MULTU A2,A3
  3975. 00A08025 OR S0,A1,R0
  3976. 00008812 MFLO S1
  3977. 12200007 BEQ S1,R0,+7
  3978. 02402025 OR A0,S2,R0
  3979. 92050000 LBU A1,0000 (S0)
  3980. 0C07293D JAL 801CA4F4
  3981. 26100001 ADDIU S0,S0,0001
  3982. 2631FFFF ADDIU S1,S1,FFFF
  3983. 5620FFFB BNEL S1,R0,-5
  3984. 02402025 OR A0,S2,R0
  3985. 8FBF0024 LW RA,0024 (SP)
  3986. 8FB00018 LW S0,0018 (SP)
  3987. 8FB1001C LW S1,001C (SP)
  3988. 8FB20020 LW S2,0020 (SP)
  3989. 03E00008 JR RA
  3990. 27BD0028 ADDIU SP,SP,0028
  3991.  
  3992. 801CA618 0x3798
  3993. 27BDFFD8 ADDIU SP,SP,FFD8
  3994. AFB20020 SW S2,0020 (SP)
  3995. AFB1001C SW S1,001C (SP)
  3996. 00A08825 OR S1,A1,R0
  3997. 00809025 OR S2,A0,R0
  3998. AFBF0024 SW RA,0024 (SP)
  3999. AFB00018 SW S0,0018 (SP)
  4000. 92300000 LBU S0,0000 (S1)
  4001. 12000007 BEQ S0,R0,+7
  4002. 02402025 OR A0,S2,R0
  4003. 320500FF ANDI A1,S0,00FF
  4004. 0C07293D JAL 801CA4F4
  4005. 26310001 ADDIU S1,S1,0001
  4006. 92300000 LBU S0,0000 (S1)
  4007. 5600FFFB BNEL S0,R0,-5
  4008. 02402025 OR A0,S2,R0
  4009. 8FBF0024 LW RA,0024 (SP)
  4010. 8FB00018 LW S0,0018 (SP)
  4011. 8FB1001C LW S1,001C (SP)
  4012. 8FB20020 LW S2,0020 (SP)
  4013. 03E00008 JR RA
  4014. 27BD0028 ADDIU SP,SP,0028
  4015.  
  4016. 801CA670 0x37F0
  4017. 27BDFFE8 ADDIU SP,SP,FFE8
  4018. AFBF0014 SW RA,0014 (SP)
  4019. AFA40018 SW A0,0018 (SP)
  4020. 00C03825 OR A3,A2,R0
  4021. 8FA40018 LW A0,0018 (SP)
  4022. 0C07296F JAL 801CA5BC
  4023. 24060001 ADDIU A2,R0,0001
  4024. 8FA20018 LW V0,0018 (SP)
  4025. 8FBF0014 LW RA,0014 (SP)
  4026. 27BD0018 ADDIU SP,SP,0018
  4027. 03E00008 JR RA
  4028. 00000000 NOP
  4029.  
  4030. 801CA6A0 0x3820
  4031. 3C0E801D LUI T6,801D
  4032. 25CEA670 ADDIU T6,T6,A670
  4033. AC8E0000 SW T6,0000 (A0)
  4034. A480000A SH R0,000A (A0)
  4035. A480000C SH R0,000C (A0)
  4036. A4800014 SH R0,0014 (A0)
  4037. A4800016 SH R0,0016 (A0)
  4038. A4800018 SH R0,0018 (A0)
  4039. A480001A SH R0,001A (A0)
  4040. AC800010 SW R0,0010 (A0)
  4041. A080001C SB R0,001C (A0)
  4042. AC800004 SW R0,0004 (A0)
  4043. 03E00008 JR RA
  4044. 00000000 NOP
  4045.  
  4046. 801CA6D8 0x3858 NERFed
  4047. AFA40000 SW A0,0000 (SP)
  4048. 03E00008 JR RA
  4049. 00000000 NOP
  4050.  
  4051. 801CA6E4 0x3864 redirect to 800CE810
  4052. 27BDFFE8 ADDIU SP,SP,FFE8
  4053. AFBF0014 SW RA,0014 (SP)
  4054. 0C033A04 JAL 800CE810
  4055. 00000000 NOP
  4056. 8FBF0014 LW RA,0014 (SP)
  4057. 27BD0018 ADDIU SP,SP,0018
  4058. 03E00008 JR RA
  4059. 00000000 NOP
  4060.  
  4061. 801CA704 0x3884
  4062. 27BDFFE0 ADDIU SP,SP,FFE0
  4063. AFBF0014 SW RA,0014 (SP)
  4064. AFA50024 SW A1,0024 (SP)
  4065. AFA60028 SW A2,0028 (SP)
  4066. AFA7002C SW A3,002C (SP)
  4067. 8FA50024 LW A1,0024 (SP)
  4068. 0C0729B9 JAL 801CA6E4
  4069. 27A60028 ADDIU A2,SP,0028
  4070. 8FBF0014 LW RA,0014 (SP)
  4071. 27BD0020 ADDIU SP,SP,0020
  4072. 03E00008 JR RA
  4073. 00000000 NOP
  4074.  
  4075. 00000000 NOP
  4076. 00000000 NOP
  4077. 00000000 NOP
  4078.  
  4079. 801CA740 0x38C0 send read or write (A1) leocmd A0 for SP+10 blocks between LBA A2 and rdram A3, notifying queue SP+14
  4080. accepts: A0=p->leocmd, A1=mode (0:read, 1:write), A2=LBA, A3=p->rdram, SP+10=length, SP+14=p->queue or None
  4081. 3C0E801E LUI T6,801E
  4082. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  4083. 27BDFFE8 ADDIU SP,SP,FFE8
  4084. AFBF0014 SW RA,0014 (SP)
  4085. 15C00003 BNE T6,R0,+3
  4086. 00000000 NOP
  4087. 10000017 BEQ R0,R0,+23
  4088. 2402FFFF ADDIU V0,R0,FFFF
  4089. 14A00004 BNE A1,R0,+4
  4090. 24180006 ADDIU T8,R0,0006
  4091. 240F0005 ADDIU T7,R0,0005
  4092. 10000002 BEQ R0,R0,+2
  4093. A08F0000 SB T7,0000 (A0) # leocmd[0] = cmd: read
  4094. A0980000 SB T8,0000 (A0) # leocmd[0] = cmd: write
  4095. 8FA2002C LW V0,002C (SP)
  4096. A0800001 SB R0,0001 (A0) # leocmd[1] = 0
  4097. 24190080 ADDIU T9,R0,0080
  4098. 50400004 BEQL V0,R0,+4
  4099. A0800002 SB R0,0002 (A0)
  4100. 10000002 BEQ R0,R0,+2
  4101. A0990002 SB T9,0002 (A0) # leocmd[2] = 0x80: enable post queue
  4102. A0800002 SB R0,0002 (A0) # leocmd[2] = 0
  4103. A0800003 SB R0,0003 (A0) # leocmd[3] = 0
  4104. AC820008 SW V0,0008 (A0) # leocmd+8 = queue
  4105. AC86000C SW A2,000C (A0) # leocmd+10 = LBA
  4106. 8FA80028 LW T0,0028 (SP)
  4107. AC870014 SW A3,0014 (A0) # leocmd+14 = p->data
  4108. 0C072A69 JAL 801CA9A4 # send leocmd A0
  4109. AC880010 SW T0,0010 (A0) # leocmd+10 = length
  4110. 00001025 OR V0,R0,R0 # return 0
  4111. 8FBF0014 LW RA,0014 (SP)
  4112. 27BD0018 ADDIU SP,SP,0018
  4113. 03E00008 JR RA
  4114. 00000000 NOP
  4115.  
  4116. 00000000 NOP
  4117. 00000000 NOP
  4118.  
  4119. 801CA7D0 0x3950 create and start leo threads with priority (A0, A1) with A3 msgs at A2
  4120. accepts: A0=priority of Leo Int, A1=priority of Leo Work, A2=p->msgs, A3=#msgs
  4121. 27BDFFD0 ADDIU SP,SP,FFD0
  4122. 00A4082A SLT AT,A1,A0
  4123. AFBF001C SW RA,001C (SP)
  4124. AFA40030 SW A0,0030 (SP)
  4125. AFA50034 SW A1,0034 (SP)
  4126. AFA60038 SW A2,0038 (SP)
  4127. 10200003 BEQ AT,R0,+3
  4128. AFA7003C SW A3,003C (SP)
  4129. 10000002 BEQ R0,R0,+2
  4130. 00802825 OR A1,A0,R0
  4131. 8FA50034 LW A1,0034 (SP)
  4132. 2418FFFF ADDIU T8,R0,FFFF
  4133. AFB80028 SW T8,0028 (SP)
  4134. 00002025 OR A0,R0,R0
  4135. 0C001158 JAL 80004560
  4136. AFA50020 SW A1,0020 (SP)
  4137. 8FA50020 LW A1,0020 (SP)
  4138. 0045082A SLT AT,V0,A1
  4139. 10200004 BEQ AT,R0,+4
  4140. 00000000 NOP
  4141. AFA20028 SW V0,0028 (SP)
  4142. 0C001120 JAL 80004480
  4143. 00002025 OR A0,R0,R0
  4144. 0C00144C JAL 80005130 # V0 = True if interrupts disabled; disable interrupts in Status
  4145. 00000000 NOP
  4146. 24190001 ADDIU T9,R0,0001
  4147. 3C01801E LUI AT,801E
  4148. 3C04801E LUI A0,801E
  4149. AFA2002C SW V0,002C (SP)
  4150. AC398D64 SW T9,8D64 (AT)
  4151. 24845DE8 ADDIU A0,A0,5DE8 # queue = 801E5DE8
  4152. 8FA50038 LW A1,0038 (SP)
  4153. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4154. 8FA6003C LW A2,003C (SP)
  4155. 3C04801E LUI A0,801E
  4156. 3C05801E LUI A1,801E
  4157. 24A55E64 ADDIU A1,A1,5E64 # msgs = 801E5E64
  4158. 24845E18 ADDIU A0,A0,5E18 # queue = 801E5E18
  4159. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4160. 24060001 ADDIU A2,R0,0001 # 1 msg
  4161. 3C04801E LUI A0,801E
  4162. 3C05801E LUI A1,801E
  4163. 24A55E60 ADDIU A1,A1,5E60 # msgs = 801E5E60
  4164. 24845E00 ADDIU A0,A0,5E00 # queue = 801E5E00
  4165. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1: cart interrupt callback
  4166. 24060001 ADDIU A2,R0,0001 # 1 msg
  4167. 3C04801E LUI A0,801E
  4168. 3C05801E LUI A1,801E
  4169. 24A55E68 ADDIU A1,A1,5E68 # msgs = 801E5E68
  4170. 24845E30 ADDIU A0,A0,5E30 # queue = 801E5E30
  4171. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4172. 24060002 ADDIU A2,R0,0002 # 2 msgs
  4173. 3C04801E LUI A0,801E
  4174. 3C05801E LUI A1,801E
  4175. 24A55E70 ADDIU A1,A1,5E70 # msgs = 801E5E70
  4176. 24845E48 ADDIU A0,A0,5E48 # queue = 801E5E48
  4177. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4178. 24060001 ADDIU A2,R0,0001 # 1 msg
  4179. 3C04801E LUI A0,801E
  4180. 3C05801E LUI A1,801E
  4181. 24A55198 ADDIU A1,A1,5198 # msgs = 801E5E98
  4182. 24845180 ADDIU A0,A0,5180 # queue = 801E5E80
  4183. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4184. 24060001 ADDIU A2,R0,0001 # 1 msg
  4185. 8FA90030 LW T1,0030 (SP)
  4186. 3C08801E LUI T0,801E
  4187. 250859E8 ADDIU T0,T0,59E8
  4188. 3C04801E LUI A0,801E
  4189. 3C06801D LUI A2,801D
  4190. 24C6B640 ADDIU A2,A2,B640 # func = 801CB640: Leo Int thread
  4191. 24845288 ADDIU A0,A0,5288 # thread = 801E5288
  4192. AFA80010 SW T0,0010 (SP) # SP = 801D59E8
  4193. 24050001 ADDIU A1,R0,0001 # ID = 1
  4194. 00003825 OR A3,R0,R0 # arg = 0
  4195. 0C000BC8 JAL 80002F20 # create thread A0, ID A1, calling A2(A3) with stack at SP+10, priority SP+14
  4196. AFA90014 SW T1,0014 (SP) # priority = A0 f/caller
  4197. 3C04801E LUI A0,801E
  4198. 0C0017B0 JAL 80005EC0 # start thread A0
  4199. 24845288 ADDIU A0,A0,5288 # thread = 801E5288: Leo Int
  4200. 8FAB0034 LW T3,0034 (SP)
  4201. 3C0A801E LUI T2,801E
  4202. 254A5DE8 ADDIU T2,T2,5DE8
  4203. 3C04801E LUI A0,801E
  4204. 3C06801D LUI A2,801D
  4205. 24C6AC40 ADDIU A2,A2,AC40 # func = 801CAC40: Leo Work thread
  4206. 24845438 ADDIU A0,A0,5438 # thread = 801E5438
  4207. AFAA0010 SW T2,0010 (SP) # SP = 801E5DE8
  4208. 24050001 ADDIU A1,R0,0001 # ID = 1
  4209. 00003825 OR A3,R0,R0 # arg = 0
  4210. 0C000BC8 JAL 80002F20 # create thread A0, ID A1, calling A2(A3) with stack at SP+10, priority SP+14
  4211. AFAB0014 SW T3,0014 (SP) # priority = A1 f/caller
  4212. 3C04801E LUI A0,801E
  4213. 0C0017B0 JAL 80005EC0 # start thread A0
  4214. 24845438 ADDIU A0,A0,5438 # thread = 801E5438: Leo Work
  4215. 3C05801E LUI A1,801E
  4216. 24A55E00 ADDIU A1,A1,5E00 # queue = 801E5E00: cart interrupt callback
  4217. 24040002 ADDIU A0,R0,0002 # event 2: cart interrupt
  4218. 0C000FEC JAL 80003FB0 # create callback for event A0 on queue A1 with msg A2
  4219. 3C060003 LUI A2,0003
  4220. 3C04801E LUI A0,801E
  4221. 24845E48 ADDIU A0,A0,5E48
  4222. 00002825 OR A1,R0,R0
  4223. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4224. 00003025 OR A2,R0,R0
  4225. 0C001468 JAL 800051A0 # Status |= A0
  4226. 8FA4002C LW A0,002C (SP)
  4227. 8FAC0028 LW T4,0028 (SP)
  4228. 2401FFFF ADDIU AT,R0,FFFF
  4229. 00002025 OR A0,R0,R0
  4230. 51810004 BEQL T4,AT,+4
  4231. 8FBF001C LW RA,001C (SP)
  4232. 0C001120 JAL 80004480
  4233. 01802825 OR A1,T4,R0
  4234. 8FBF001C LW RA,001C (SP)
  4235. 27BD0030 ADDIU SP,SP,0030
  4236. 03E00008 JR RA
  4237. 00000000 NOP
  4238.  
  4239. 801CA9A4 0x3B24 send leocmd A0
  4240. accepts: A0=leocmd
  4241. 3C0E801E LUI T6,801E
  4242. 8DCE8D60 LW T6,8D60 (T6)
  4243. 27BDFFE8 ADDIU SP,SP,FFE8
  4244. AFBF0014 SW RA,0014 (SP)
  4245. 11C0000E BEQ T6,R0,+14
  4246. 00803825 OR A3,A0,R0
  4247. 90990002 LBU T9,0002 (A0) # ctrlflgs = leocmd[2]
  4248. 240F0002 ADDIU T7,R0,0002
  4249. 24180025 ADDIU T8,R0,0025
  4250. 33280080 ANDI T0,T9,0080
  4251. A08F0004 SB T7,0004 (A0) # leocmd[4] = 2: check condition
  4252. 11000048 BEQ T0,R0,+72 # skip if not using queue
  4253. A0980005 SB T8,0005 (A0) # leocmd[5] = 0x25: sensecode Waiting on NMI
  4254. @801CA9D8
  4255. 8C840008 LW A0,0008 (A0)
  4256. 24050025 ADDIU A1,R0,0025
  4257. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4258. 24060001 ADDIU A2,R0,0001
  4259. 10000043 BEQ R0,R0,+67 # return
  4260. 8FBF0014 LW RA,0014 (SP)
  4261. @801CA9F0
  4262. 3C04801E LUI A0,801E
  4263. 24845E48 ADDIU A0,A0,5E48
  4264. 00002825 OR A1,R0,R0
  4265. 24060001 ADDIU A2,R0,0001
  4266. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4267. AFA70018 SW A3,0018 (SP)
  4268. 8FA70018 LW A3,0018 (SP)
  4269. 24090008 ADDIU T1,R0,0008
  4270. 24010001 ADDIU AT,R0,0001
  4271. 90E40000 LBU A0,0000 (A3)
  4272. 240A00FF ADDIU T2,R0,00FF
  4273. A0E90004 SB T1,0004 (A3)
  4274. 10810009 BEQ A0,AT,+9
  4275. A0E00005 SB R0,0005 (A3)
  4276. 24010005 ADDIU AT,R0,0005
  4277. 10810019 BEQ A0,AT,+25
  4278. 00E02825 OR A1,A3,R0
  4279. 24010006 ADDIU AT,R0,0006
  4280. 10810016 BEQ A0,AT,+22
  4281. 248FFFFF ADDIU T7,A0,FFFF
  4282. 10000016 BEQ R0,R0,+22
  4283. 2DE1000E SLTIU AT,T7,000E
  4284. 3C0B801E LUI T3,801E
  4285. 256B5E85 ADDIU T3,T3,5E85
  4286. A16A0000 SB T2,0000 (T3)
  4287. 0C0739F8 JAL 801CE7E0 # handle leocmd 1: clear leo queue
  4288. AFA70018 SW A3,0018 (SP)
  4289. 8FA70018 LW A3,0018 (SP)
  4290. 3C0C801E LUI T4,801E
  4291. 258C5E85 ADDIU T4,T4,5E85
  4292. A1800000 SB R0,0000 (T4)
  4293. 90ED0002 LBU T5,0002 (A3)
  4294. 00002825 OR A1,R0,R0
  4295. 24060001 ADDIU A2,R0,0001
  4296. 31AE0080 ANDI T6,T5,0080
  4297. 11C00018 BEQ T6,R0,+24
  4298. A0E00004 SB R0,0004 (A3)
  4299. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4300. 8CE40008 LW A0,0008 (A3)
  4301. 10000014 BEQ R0,R0,+20
  4302. 00000000 NOP
  4303. @801CAA94
  4304. 10000007 BEQ R0,R0,+7
  4305. ACE00018 SW R0,0018 (A3)
  4306. @801CAA9C
  4307. 14200005 BNE AT,R0,+5
  4308. 2418001F ADDIU T8,R0,001F
  4309. 24190002 ADDIU T9,R0,0002
  4310. A0F80005 SB T8,0005 (A3)
  4311. 1000000C BEQ R0,R0,+12
  4312. A0F90004 SB T9,0004 (A3)
  4313. @801CAAB4
  4314. 3C04801E LUI A0,801E
  4315. 24845DE8 ADDIU A0,A0,5DE8
  4316. 00003025 OR A2,R0,R0
  4317. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4318. AFA70018 SW A3,0018 (SP)
  4319. 10400005 BEQ V0,R0,+5
  4320. 8FA70018 LW A3,0018 (SP)
  4321. 24080023 ADDIU T0,R0,0023
  4322. 24090002 ADDIU T1,R0,0002
  4323. A0E80005 SB T0,0005 (A3)
  4324. A0E90004 SB T1,0004 (A3)
  4325. 3C04801E LUI A0,801E
  4326. 24845E48 ADDIU A0,A0,5E48
  4327. 00002825 OR A1,R0,R0
  4328. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4329. 24060001 ADDIU A2,R0,0001
  4330. @801CAAF4
  4331. 8FBF0014 LW RA,0014 (SP)
  4332. 27BD0018 ADDIU SP,SP,0018
  4333. 03E00008 JR RA
  4334. 00000000 NOP
  4335.  
  4336. 801CAB04 0x3C84
  4337. 3C0F801E LUI T7,801E
  4338. 8DEF8D64 LW T7,8D64 (T7)
  4339. 27BDFFE8 ADDIU SP,SP,FFE8
  4340. 240E0001 ADDIU T6,R0,0001
  4341. 3C01801E LUI AT,801E
  4342. AFBF0014 SW RA,0014 (SP)
  4343. 11E00019 BEQ T7,R0,+25
  4344. AC2E8D60 SW T6,8D60 (AT)
  4345. 3C19801E LUI T9,801E
  4346. 27395E85 ADDIU T9,T9,5E85
  4347. 241800FF ADDIU T8,R0,00FF
  4348. 0C0739F8 JAL 801CE7E0 # handle leocmd 1: clear leo queue
  4349. A3380000 SB T8,0000 (T9)
  4350. 3C08801E LUI T0,801E
  4351. 25085E85 ADDIU T0,T0,5E85
  4352. 3C04801E LUI A0,801E
  4353. A1000000 SB R0,0000 (T0)
  4354. 24845E00 ADDIU A0,A0,5E00 # queue = 801E5E00: cart interrupt callback
  4355. 00002825 OR A1,R0,R0
  4356. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4357. 00003025 OR A2,R0,R0 # read
  4358. 3C04801E LUI A0,801E
  4359. 24845E00 ADDIU A0,A0,5E00 # queue = 801E5E00: cart interrupt callback
  4360. 3C05000A LUI A1,000A
  4361. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4362. 24060001 ADDIU A2,R0,0001 # jam
  4363. 3C04801E LUI A0,801E
  4364. 3C05801E LUI A1,801E
  4365. 24A593B0 ADDIU A1,A1,93B0 # msg = 801D93B0
  4366. 24845DE8 ADDIU A0,A0,5DE8 # queue = 801E5DE8
  4367. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4368. 24060001 ADDIU A2,R0,0001
  4369. 8FBF0014 LW RA,0014 (SP)
  4370. 27BD0018 ADDIU SP,SP,0018
  4371. 03E00008 JR RA
  4372. 00000000 NOP
  4373.  
  4374. 801CAB94 0x3D14 V0 = 0; leo reset
  4375. 27BDFFE8 ADDIU SP,SP,FFE8
  4376. AFBF0014 SW RA,0014 (SP)
  4377. 0C073300 JAL 801CCC00 # leo reset
  4378. 00000000 NOP
  4379. 8FBF0014 LW RA,0014 (SP)
  4380. 27BD0018 ADDIU SP,SP,0018
  4381. 00001025 OR V0,R0,R0
  4382. 03E00008 JR RA
  4383. 00000000 NOP
  4384.  
  4385. 801CABB8 0x3D38 V0 = sensecode; test if drive ready (no phase error, communication error, reset occured)
  4386. 27BDFFD8 ADDIU SP,SP,FFD8
  4387. 3C18801E LUI T8,801E
  4388. AFBF0014 SW RA,0014 (SP)
  4389. 240E000F ADDIU T6,R0,000F
  4390. 240F0080 ADDIU T7,R0,0080
  4391. 27185180 ADDIU T8,T8,5180
  4392. 3C04801E LUI A0,801E
  4393. A3AE001C SB T6,001C (SP) # leocmd[0] = 0xF: readystate
  4394. A3AF001E SB T7,001E (SP) # leocmd[2] = 0x80: enable post queue
  4395. A3A00020 SB R0,0020 (SP)
  4396. AFB80024 SW T8,0024 (SP) # leocmd[8] = 801E5180: queue
  4397. 24845DE8 ADDIU A0,A0,5DE8 # queue = 801E5DE8
  4398. 27A5001C ADDIU A1,SP,001C # msg = leocmd
  4399. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4400. 00003025 OR A2,R0,R0 # send
  4401. 10400003 BEQ V0,R0,+3
  4402. 3C04801E LUI A0,801E
  4403. 1000000B BEQ R0,R0,+11
  4404. 24020023 ADDIU V0,R0,0023
  4405. @801CAC04
  4406. 24845180 ADDIU A0,A0,5180 # queue = 801E5180
  4407. 00002825 OR A1,R0,R0
  4408. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4409. 24060001 ADDIU A2,R0,0001 # wait
  4410. 93B90020 LBU T9,0020 (SP) # status = leocmd[4]
  4411. 93A20021 LBU V0,0021 (SP) # sensecode = leocmd[5]
  4412. 17200003 BNE T9,R0,+3 # return sensecode if status else 0
  4413. 00000000 NOP
  4414. 10000001 BEQ R0,R0,+1
  4415. 00001025 OR V0,R0,R0
  4416. @801CAC2C
  4417. 8FBF0014 LW RA,0014 (SP)
  4418. 27BD0028 ADDIU SP,SP,0028
  4419. 03E00008 JR RA
  4420. 00000000 NOP
  4421.  
  4422. 00000000 NOP
  4423.  
  4424. 801CAC40 0x3DC0 Thread: Leo Work thread
  4425. 27BDFFC0 ADDIU SP,SP,FFC0
  4426. AFA40040 SW A0,0040 (SP)
  4427. AFBF003C SW RA,003C (SP)
  4428. 3C04801E LUI A0,801E
  4429. 3C05801E LUI A1,801E
  4430. AFBE0038 SW S8,0038 (SP)
  4431. AFB70034 SW S7,0034 (SP)
  4432. AFB60030 SW S6,0030 (SP)
  4433. AFB5002C SW S5,002C (SP)
  4434. AFB40028 SW S4,0028 (SP)
  4435. AFB30024 SW S3,0024 (SP)
  4436. AFB20020 SW S2,0020 (SP)
  4437. AFB1001C SW S1,001C (SP)
  4438. AFB00018 SW S0,0018 (SP)
  4439. 24A55EA0 ADDIU A1,A1,5EA0 # msg = 801E5EA0
  4440. 24845EA8 ADDIU A0,A0,5EA8 # queue = 801E5EA8
  4441. 0C001088 JAL 80004220 # create queue A0 with A2 msgs at A1
  4442. 24060001 ADDIU A2,R0,0001 # msgs = 1
  4443. 3C17801E LUI S7,801E
  4444. 3C16801E LUI S6,801E
  4445. 3C14801E LUI S4,801E
  4446. 3C13801E LUI S3,801E
  4447. 3C12801E LUI S2,801E
  4448. 3C11801E LUI S1,801E
  4449. 26315E90 ADDIU S1,S1,5E90
  4450. 26525E86 ADDIU S2,S2,5E86
  4451. 26735E78 ADDIU S3,S3,5E78
  4452. 26945E74 ADDIU S4,S4,5E74
  4453. 26D65438 ADDIU S6,S6,5438
  4454. 26F75E18 ADDIU S7,S7,5E18
  4455. 3C1E0009 LUI S8,0009
  4456. 24150001 ADDIU S5,R0,0001
  4457. @801CACC0: loop
  4458. 0C0007DC JAL 80001F70 # stop thread A0
  4459. 02C02025 OR A0,S6,R0 # thread = 801E5438: Leo Work
  4460. 8E620000 LW V0,0000 (S3) # leocmd = @801E5E78
  4461. 8C4E0014 LW T6,0014 (V0)
  4462. 8C500010 LW S0,0010 (V0)
  4463. AE8E0000 SW T6,0000 (S4) # 801E5E74 = @leocmd+14: p->rdram
  4464. 0C0738D0 JAL 801CE340 # fill 801E5E90 with seek info for LBA A0
  4465. 96240000 LHU A0,0000 (S1) # LBA = 801E5E90[0:2]
  4466. 964F0000 LHU T7,0000 (S2)
  4467. 31F88000 ANDI T8,T7,8000
  4468. 13000005 BEQ T8,R0,+5
  4469. 00000000 NOP
  4470. @801CACF0
  4471. 0C07326F JAL 801CC9BC # send seek read or write (A0) request for current location
  4472. 32A4FFFF ANDI A0,S5,FFFF # write
  4473. 10000004 BEQ R0,R0,+4
  4474. 00402825 OR A1,V0,R0
  4475. @801CAD00
  4476. 0C07326F JAL 801CC9BC # send seek read or write (A0) request for current location
  4477. 00002025 OR A0,R0,R0 # read
  4478. 00402825 OR A1,V0,R0
  4479. @801CAD0C
  4480. 5440001F BNEL V0,R0,+31
  4481. 02E02025 OR A0,S7,R0
  4482. 96590000 LHU T9,0000 (S2)
  4483. 32A200FF ANDI V0,S5,00FF
  4484. 00401825 OR V1,V0,R0
  4485. 33282000 ANDI T0,T9,2000
  4486. 51000004 BEQL T0,R0,+4
  4487. 92220009 LBU V0,0009 (S1)
  4488. 10000008 BEQ R0,R0,+8
  4489. A2350009 SB S5,0009 (S1)
  4490. @801CAD34
  4491. 92220009 LBU V0,0009 (S1)
  4492. 0202082B SLTU AT,S0,V0
  4493. 10200004 BEQ AT,R0,+4
  4494. 00401825 OR V1,V0,R0
  4495. 320200FF ANDI V0,S0,00FF
  4496. 00401825 OR V1,V0,R0
  4497. A2300009 SB S0,0009 (S1)
  4498. @801CAD50
  4499. 96290000 LHU T1,0000 (S1)
  4500. 02038023 SUBU S0,S0,V1
  4501. 01225021 ADDU T2,T1,V0
  4502. 0C072B74 JAL 801CADD0
  4503. A62A0000 SH T2,0000 (S1)
  4504. 14400008 BNE V0,R0,+8
  4505. 00402825 OR A1,V0,R0
  4506. @801CAD6C
  4507. 8E620000 LW V0,0000 (S3) # leocmd = @801E5E78
  4508. 8E8B0000 LW T3,0000 (S4)
  4509. 8C4C0014 LW T4,0014 (V0)
  4510. 016C6823 SUBU T5,T3,T4
  4511. 1600FFD6 BNE S0,R0,-42
  4512. AC4D0018 SW T5,0018 (V0)
  4513. 03C02825 OR A1,S8,R0 # msg = 0x90000
  4514. @801CAD88
  4515. 02E02025 OR A0,S7,R0 # queue = 801E5E18
  4516. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4517. 24060001 ADDIU A2,R0,0001 # jam
  4518. 1000FFCA BEQ R0,R0,-54
  4519. 00000000 NOP
  4520. 00000000 NOP
  4521. 8FBF003C LW RA,003C (SP)
  4522. 8FB00018 LW S0,0018 (SP)
  4523. 8FB1001C LW S1,001C (SP)
  4524. 8FB20020 LW S2,0020 (SP)
  4525. 8FB30024 LW S3,0024 (SP)
  4526. 8FB40028 LW S4,0028 (SP)
  4527. 8FB5002C LW S5,002C (SP)
  4528. 8FB60030 LW S6,0030 (SP)
  4529. 8FB70034 LW S7,0034 (SP)
  4530. 8FBE0038 LW S8,0038 (SP)
  4531. 03E00008 JR RA
  4532. 27BD0040 ADDIU SP,SP,0040
  4533.  
  4534. 801CADD0
  4535. 27BDFF88 ADDIU SP,SP,FF88
  4536. AFB30024 SW S3,0024 (SP)
  4537. 3C13801E LUI S3,801E
  4538. 26735E86 ADDIU S3,S3,5E86
  4539. AFB20020 SW S2,0020 (SP)
  4540. 966F0000 LHU T7,0000 (S3)
  4541. 3C12801E LUI S2,801E
  4542. 26525E90 ADDIU S2,S2,5E90
  4543. 924E0006 LBU T6,0006 (S2) # size of transfering sector = 801E5E90[6]
  4544. 31F82000 ANDI T8,T7,2000
  4545. AFBF003C SW RA,003C (SP)
  4546. AFBE0038 SW S8,0038 (SP)
  4547. AFB70034 SW S7,0034 (SP)
  4548. AFB60030 SW S6,0030 (SP)
  4549. AFB5002C SW S5,002C (SP)
  4550. AFB40028 SW S4,0028 (SP)
  4551. AFB1001C SW S1,001C (SP)
  4552. AFB00018 SW S0,0018 (SP)
  4553. 96440004 LHU A0,0004 (S2)
  4554. 13000002 BEQ T8,R0,+2
  4555. A3AE0069 SB T6,0069 (SP)
  4556. 93A40069 LBU A0,0069 (SP)
  4557. 3C03801E LUI V1,801E
  4558. 24635E74 ADDIU V1,V1,5E74
  4559. 8C620000 LW V0,0000 (V1) # rdram buffer base = @801E5E74
  4560. 92480009 LBU T0,0009 (S2)
  4561. 24050002 ADDIU A1,R0,0002
  4562. 0044C821 ADDU T9,V0,A0
  4563. AC790000 SW T9,0000 (V1)
  4564. A7A4006A SH A0,006A (SP)
  4565. 14A80004 BNE A1,T0,+4
  4566. AFA2005C SW V0,005C (SP)
  4567. 03245021 ADDU T2,T9,A0
  4568. AC6A0000 SW T2,0000 (V1)
  4569. A7A4006A SH A0,006A (SP)
  4570. 3C1E801E LUI S8,801E
  4571. 3C16801E LUI S6,801E
  4572. 3C15801E LUI S5,801E
  4573. 0000A025 OR S4,R0,R0
  4574. 26B55EC0 ADDIU S5,S5,5EC0
  4575. 26D66070 ADDIU S6,S6,6070
  4576. 27DE5E7C ADDIU S8,S8,5E7C
  4577. 24170001 ADDIU S7,R0,0001
  4578. 8EAB0000 LW T3,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4579. 24020001 ADDIU V0,R0,0001
  4580. A5620018 SH V0,0018 (T3) # epi[18:1A] = 1: block transfer mode
  4581. 8EAC0000 LW T4,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4582. 240B0003 ADDIU T3,R0,0003
  4583. A580001A SH R0,001A (T4) # epi[1A:1C] = 0: block #0
  4584. 8EAD0000 LW T5,0000 (S5)
  4585. ADA0003C SW R0,003C (T5) # epi+3C = 0: block 1 #C1 errors
  4586. 8EAF0000 LW T7,0000 (S5)
  4587. 93AE0069 LBU T6,0069 (SP)
  4588. ADEE0038 SW T6,0038 (T7) # epi+38 = 801E5E90[6]: block 1 size of transfering sector
  4589. 8EB90000 LW T9,0000 (S5)
  4590. 8FB8005C LW T8,005C (SP)
  4591. AF380030 SW T8,0030 (T9) # epi+30 = @SP+5C: block 1 p->rdram buffer
  4592. 8EA80000 LW T0,0000 (S5)
  4593. AD160034 SW S6,0034 (T0) # epi+34 = 801E6070: block 1 p->C2 buffer
  4594. 96690000 LHU T1,0000 (S3)
  4595. 312A2000 ANDI T2,T1,2000
  4596. 51400006 BEQL T2,R0,+6
  4597. 924D0009 LBU T5,0009 (S2)
  4598. 8EAC0000 LW T4,0000 (S5)
  4599. A2420009 SB V0,0009 (S2)
  4600. 1000001C BEQ R0,R0,+28
  4601. A58B0018 SH T3,0018 (T4)
  4602. 924D0009 LBU T5,0009 (S2)
  4603. 14AD0019 BNE A1,T5,+25
  4604. 00000000 NOP
  4605. 8EAF0000 LW T7,0000 (S5)
  4606. 240E0002 ADDIU T6,R0,0002
  4607. A5EE0018 SH T6,0018 (T7)
  4608. 8EA90000 LW T1,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4609. 01204025 OR T0,T1,R0
  4610. 25390024 ADDIU T9,T1,0024
  4611. 8D01002C LW AT,002C (T0)
  4612. 2508000C ADDIU T0,T0,000C
  4613. 2529000C ADDIU T1,T1,000C
  4614. AD210044 SW AT,0044 (T1)
  4615. 8D010024 LW AT,0024 (T0)
  4616. AD210048 SW AT,0048 (T1)
  4617. 8D010028 LW AT,0028 (T0)
  4618. 1519FFF8 BNE T0,T9,-8 # copy block 1 info to block 2
  4619. AD21004C SW AT,004C (T1)
  4620. 8EAB0000 LW T3,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4621. 3C0A801E LUI T2,801E
  4622. 254A6410 ADDIU T2,T2,6410
  4623. AD6A0058 SW T2,0058 (T3) # epi+58 = 801E6410: block 2 p->C2 buffer
  4624. 8EA40000 LW A0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4625. 97AD006A LHU T5,006A (SP)
  4626. 8C8C0054 LW T4,0054 (A0)
  4627. 018D7021 ADDU T6,T4,T5
  4628. AC8E0054 SW T6,0054 (A0) # advance block 2 p->rdram by block size
  4629. 0C072CF3 JAL 801CB3CC
  4630. 00000000 NOP
  4631. 144000D7 BNE V0,R0,+215
  4632. 00402025 OR A0,V0,R0
  4633. 966F0000 LHU T7,0000 (S3)
  4634. AFA20074 SW V0,0074 (SP)
  4635. 31F88000 ANDI T8,T7,8000
  4636. 13000005 BEQ T8,R0,+5
  4637. 00000000 NOP
  4638. 0C0737A0 JAL 801CDE80
  4639. 24040001 ADDIU A0,R0,0001
  4640. 10000003 BEQ R0,R0,+3
  4641. 00000000 NOP
  4642. 0C0737A0 JAL 801CDE80
  4643. 00002025 OR A0,R0,R0
  4644. 0C072D0D JAL 801CB434
  4645. 00000000 NOP
  4646. 8FD90000 LW T9,0000 (S8)
  4647. 8EA80000 LW T0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4648. 3C09801E LUI T1,801E
  4649. AD190024 SW T9,0024 (T0)
  4650. 8EAA0000 LW T2,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4651. 8D295E80 LW T1,5E80 (T1)
  4652. AD490028 SW T1,0028 (T2)
  4653. 966B0000 LHU T3,0000 (S3)
  4654. 316C8000 ANDI T4,T3,8000
  4655. 51800026 BEQL T4,R0,+38
  4656. 966D0000 LHU T5,0000 (S3)
  4657. 8EAE0000 LW T6,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4658. 240D0001 ADDIU T5,R0,0001
  4659. ADCD0014 SW T5,0014 (T6)
  4660. 92580009 LBU T8,0009 (S2)
  4661. 97AF006A LHU T7,006A (SP)
  4662. 8FA4005C LW A0,005C (SP)
  4663. 01F80019 MULTU T7,T8
  4664. 00002812 MFLO A1
  4665. 0C000D10 JAL 80003440 # cache blah blah
  4666. 00000000 NOP
  4667. 3C05801E LUI A1,801E
  4668. 24A55EC8 ADDIU A1,A1,5EC8
  4669. 8EA40000 LW A0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4670. 0C001030 JAL 800040C0 # send read or write (A2) DMA request A1 using EPI handle A0
  4671. 02E03025 OR A2,S7,R0 # write
  4672. 3C04801E LUI A0,801E
  4673. 24845E30 ADDIU A0,A0,5E30
  4674. 00002825 OR A1,R0,R0
  4675. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4676. 02E03025 OR A2,S7,R0
  4677. 8EA40000 LW A0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4678. 3C01801E LUI AT,801E
  4679. 8C990024 LW T9,0024 (A0)
  4680. AFD90000 SW T9,0000 (S8)
  4681. 8C880028 LW T0,0028 (A0)
  4682. AC285E80 SW T0,5E80 (AT)
  4683. 9483001A LHU V1,001A (A0)
  4684. 000348C0 SLL T1,V1,0x3
  4685. 01234821 ADDU T1,T1,V1
  4686. 00094880 SLL T1,T1,0x2
  4687. 00895021 ADDU T2,A0,T1
  4688. 8D4B002C LW T3,002C (T2)
  4689. 1560009E BNE T3,R0,+158
  4690. AFAB0074 SW T3,0074 (SP)
  4691. 100000D6 BEQ R0,R0,+214
  4692. 01601025 OR V0,T3,R0
  4693. 966D0000 LHU T5,0000 (S3)
  4694. 3C04801E LUI A0,801E
  4695. 00008825 OR S1,R0,R0
  4696. 31AE4000 ANDI T6,T5,4000
  4697. 11C00009 BEQ T6,R0,+9
  4698. 24845EA8 ADDIU A0,A0,5EA8
  4699. 00002825 OR A1,R0,R0
  4700. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4701. 02E03025 OR A2,S7,R0
  4702. 3C04801E LUI A0,801E
  4703. 24845EA8 ADDIU A0,A0,5EA8
  4704. 00002825 OR A1,R0,R0
  4705. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4706. 00003025 OR A2,R0,R0
  4707. 8EAF0000 LW T7,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4708. ADE00014 SW R0,0014 (T7)
  4709. 92590009 LBU T9,0009 (S2)
  4710. 97B8006A LHU T8,006A (SP)
  4711. 8FA4005C LW A0,005C (SP)
  4712. 03190019 MULTU T8,T9
  4713. 00002812 MFLO A1
  4714. 0C001094 JAL 80004250
  4715. 00000000 NOP
  4716. 3C05801E LUI A1,801E
  4717. 24A55EC8 ADDIU A1,A1,5EC8
  4718. 8EA40000 LW A0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4719. 0C001030 JAL 800040C0 # send read or write (A2) DMA request A1 using EPI handle A0
  4720. 00003025 OR A2,R0,R0 # read
  4721. 92480009 LBU T0,0009 (S2)
  4722. 00008025 OR S0,R0,R0
  4723. 11000079 BEQ T0,R0,+121
  4724. 3C04801E LUI A0,801E
  4725. 24845E30 ADDIU A0,A0,5E30 # queue = 801E5E30
  4726. 00002825 OR A1,R0,R0
  4727. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4728. 02E03025 OR A2,S7,R0
  4729. 8EA40000 LW A0,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4730. 3C01801E LUI AT,801E
  4731. 8C890024 LW T1,0024 (A0)
  4732. 00901821 ADDU V1,A0,S0
  4733. AFC90000 SW T1,0000 (S8)
  4734. 8C8A0028 LW T2,0028 (A0)
  4735. AC2A5E80 SW T2,5E80 (AT)
  4736. 8C6B002C LW T3,002C (V1)
  4737. 1560006E BNE T3,R0,+110
  4738. AFAB0074 SW T3,0074 (SP)
  4739. 966D0000 LHU T5,0000 (S3)
  4740. 31AE2000 ANDI T6,T5,2000
  4741. 51C00004 BEQL T6,R0,+4
  4742. 8C6F003C LW T7,003C (V1)
  4743. 100000A2 BEQ R0,R0,+162
  4744. 00001025 OR V0,R0,R0
  4745. 8C6F003C LW T7,003C (V1)
  4746. 51E00043 BEQL T7,R0,+67
  4747. 92430009 LBU V1,0009 (S2)
  4748. 8C780040 LW T8,0040 (V1)
  4749. 2F010055 SLTIU AT,T8,0055
  4750. 1020003C BEQ AT,R0,+60
  4751. 00000000 NOP
  4752. 92590009 LBU T9,0009 (S2)
  4753. 3C050500 LUI A1,0500
  4754. 34A50514 ORI A1,A1,0514
  4755. 16F90009 BNE S7,T9,+9
  4756. 00000000 NOP
  4757. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  4758. 27A60074 ADDIU A2,SP,0074
  4759. 8FA40074 LW A0,0074 (SP)
  4760. 000440C0 SLL T0,A0,0x3
  4761. 05010003 BGEZ T0,+3
  4762. 24040004 ADDIU A0,R0,0004
  4763. 10000054 BEQ R0,R0,+84
  4764. AFA40074 SW A0,0074 (SP)
  4765. 16200003 BNE S1,R0,+3
  4766. 93A20069 LBU V0,0069 (SP)
  4767. 10000003 BEQ R0,R0,+3
  4768. 02C02025 OR A0,S6,R0
  4769. 3C04801E LUI A0,801E
  4770. 24846410 ADDIU A0,A0,6410
  4771. 00022880 SLL A1,V0,0x2
  4772. 00855021 ADDU T2,A0,A1
  4773. 0C001094 JAL 80004250
  4774. AFAA0060 SW T2,0060 (SP) # SP+60 = 801E6410[V0]: block 2 C2 buffer
  4775. 8EAB0000 LW T3,0000 (S5) # p->ASIC EPI handle = @801E5EC0
  4776. 3C04801E LUI A0,801E
  4777. 24845EA8 ADDIU A0,A0,5EA8 # queue = 801E5EA8
  4778. 01701821 ADDU V1,T3,S0
  4779. 8C6C003C LW T4,003C (V1)
  4780. 00002825 OR A1,R0,R0
  4781. 02E03025 OR A2,S7,R0
  4782. A3AC0068 SB T4,0068 (SP) # SP+64[4] = epi[block]+3C: #C1 errors
  4783. 8C6D0040 LW T5,0040 (V1)
  4784. A3AD0064 SB T5,0064 (SP) # SP+64[0] = epi[block]+40: error sector 1
  4785. 8C6E0044 LW T6,0044 (V1)
  4786. A3AE0065 SB T6,0065 (SP) # SP+64[1] = epi[block]+44: error sector 2
  4787. 8C6F0048 LW T7,0048 (V1)
  4788. A3AF0066 SB T7,0066 (SP) # SP+64[2] = epi[block]+48: error sector 3
  4789. 8C78004C LW T8,004C (V1)
  4790. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  4791. A3B80067 SB T8,0067 (SP) # SP+64[3] = epi[block]+4C: error sector 4
  4792. 96790000 LHU T9,0000 (S3)
  4793. 27AA005C ADDIU T2,SP,005C
  4794. 3C09801E LUI T1,801E
  4795. 37284000 ORI T0,T9,4000
  4796. A6680000 SH T0,0000 (S3)
  4797. 8D4C0004 LW T4,0004 (T2)
  4798. 8D410000 LW AT,0000 (T2)
  4799. 252967B0 ADDIU T1,T1,67B0
  4800. AD2C0004 SW T4,0004 (T1)
  4801. AD210000 SW AT,0000 (T1)
  4802. 8D410008 LW AT,0008 (T2)
  4803. 8D4C000C LW T4,000C (T2)
  4804. 3C04801E LUI A0,801E
  4805. 24845E18 ADDIU A0,A0,5E18 # queue = 801E5E18
  4806. 3C050008 LUI A1,0008 # msg = 0x80000
  4807. 02E03025 OR A2,S7,R0
  4808. AD210008 SW AT,0008 (T1)
  4809. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  4810. AD2C000C SW T4,000C (T1)
  4811. 10000014 BEQ R0,R0,+20
  4812. 92430009 LBU V1,0009 (S2)
  4813. 92430009 LBU V1,0009 (S2)
  4814. 001168C0 SLL T5,S1,0x3
  4815. 01B16823 SUBU T5,T5,S1
  4816. 16E3000F BNE S7,V1,+15
  4817. 000D6880 SLL T5,T5,0x2
  4818. 01B16821 ADDU T5,T5,S1
  4819. 000D6940 SLL T5,T5,0x5
  4820. 02CD1021 ADDU V0,S6,T5
  4821. 8C4E000C LW T6,000C (V0)
  4822. 8C4F0000 LW T7,0000 (V0)
  4823. 8C590004 LW T9,0004 (V0)
  4824. 8C4B0008 LW T3,0008 (V0)
  4825. 01CFC025 OR T8,T6,T7
  4826. 03194025 OR T0,T8,T9
  4827. 010B4825 OR T1,T0,T3
  4828. 11200003 BEQ T1,R0,+3
  4829. 24040017 ADDIU A0,R0,0017
  4830. 10000011 BEQ R0,R0,+17
  4831. AFA40074 SW A0,0074 (SP)
  4832. 97A4006A LHU A0,006A (SP)
  4833. 8FAA005C LW T2,005C (SP)
  4834. 924D000A LBU T5,000A (S2)
  4835. 246FFFFF ADDIU T7,V1,FFFF
  4836. 31F800FF ANDI T8,T7,00FF
  4837. 01446021 ADDU T4,T2,A0
  4838. 39AE0001 XORI T6,T5,0001
  4839. 26310001 ADDIU S1,S1,0001
  4840. 26100024 ADDIU S0,S0,0024
  4841. AFAC005C SW T4,005C (SP)
  4842. A24E000A SB T6,000A (S2)
  4843. 1700FF88 BNE T8,R0,-120
  4844. A24F0009 SB T7,0009 (S2)
  4845. 1000003C BEQ R0,R0,+60
  4846. 00001025 OR V0,R0,R0
  4847. AFA40074 SW A0,0074 (SP)
  4848. 8FA40074 LW A0,0074 (SP)
  4849. 24010016 ADDIU AT,R0,0016
  4850. 14810004 BNE A0,AT,+4
  4851. 00000000 NOP
  4852. 0C072D47 JAL 801CB51C
  4853. 00000000 NOP
  4854. 00402025 OR A0,V0,R0
  4855. 0C0732AC JAL 801CCAB0
  4856. AFA40074 SW A0,0074 (SP)
  4857. 1440002F BNE V0,R0,+47
  4858. 3C040003 LUI A0,0003
  4859. 96790000 LHU T9,0000 (S3)
  4860. 3A820040 XORI V0,S4,0040
  4861. 34840001 ORI A0,A0,0001
  4862. 33281000 ANDI T0,T9,1000
  4863. 5500002A BNEL T0,R0,+42
  4864. 8FA20074 LW V0,0074 (SP)
  4865. 10400027 BEQ V0,R0,+39
  4866. 26940001 ADDIU S4,S4,0001
  4867. 328B0007 ANDI T3,S4,0007
  4868. 55600007 BNEL T3,R0,+7
  4869. 8FA40074 LW A0,0074 (SP)
  4870. 0C073208 JAL 801CC820
  4871. 00002825 OR A1,R0,R0
  4872. 00402025 OR A0,V0,R0
  4873. 1440FFED BNE V0,R0,-19
  4874. AFA20074 SW V0,0074 (SP)
  4875. 8FA40074 LW A0,0074 (SP)
  4876. 24010018 ADDIU AT,R0,0018
  4877. 10810006 BEQ A0,AT,+6
  4878. 24010017 ADDIU AT,R0,0017
  4879. 14810009 BNE A0,AT,+9
  4880. AFA40074 SW A0,0074 (SP)
  4881. 24010020 ADDIU AT,R0,0020
  4882. 56810007 BNEL S4,AT,+7
  4883. 96690000 LHU T1,0000 (S3)
  4884. 0C073251 JAL 801CC944
  4885. 00000000 NOP
  4886. 00402025 OR A0,V0,R0
  4887. 1440FFDF BNE V0,R0,-33
  4888. AFA20074 SW V0,0074 (SP)
  4889. 96690000 LHU T1,0000 (S3)
  4890. 312A8000 ANDI T2,T1,8000
  4891. 11400005 BEQ T2,R0,+5
  4892. 00000000 NOP
  4893. 0C07326F JAL 801CC9BC # send seek read or write (A0) request for current location
  4894. 24040001 ADDIU A0,R0,0001 # write
  4895. 10000004 BEQ R0,R0,+4
  4896. 00402025 OR A0,V0,R0
  4897. 0C07326F JAL 801CC9BC # send seek read or write (A0) request for current location
  4898. 00002025 OR A0,R0,R0 # read
  4899. 00402025 OR A0,V0,R0
  4900. 1440FFD2 BNE V0,R0,-46
  4901. 00000000 NOP
  4902. 24050002 ADDIU A1,R0,0002
  4903. 1000FEBA BEQ R0,R0,-326
  4904. AFA40074 SW A0,0074 (SP)
  4905. 8FA20074 LW V0,0074 (SP)
  4906. 8FBF003C LW RA,003C (SP)
  4907. 8FB00018 LW S0,0018 (SP)
  4908. 8FB1001C LW S1,001C (SP)
  4909. 8FB20020 LW S2,0020 (SP)
  4910. 8FB30024 LW S3,0024 (SP)
  4911. 8FB40028 LW S4,0028 (SP)
  4912. 8FB5002C LW S5,002C (SP)
  4913. 8FB60030 LW S6,0030 (SP)
  4914. 8FB70034 LW S7,0034 (SP)
  4915. 8FBE0038 LW S8,0038 (SP)
  4916. 03E00008 JR RA
  4917. 27BD0078 ADDIU SP,SP,0078
  4918.  
  4919. 27BDFFE0 ADDIU SP,SP,FFE0
  4920. AFBF0014 SW RA,0014 (SP)
  4921. 3C040001 LUI A0,0001
  4922. 0C0731F4 JAL 801CC7D0
  4923. 34840001 ORI A0,A0,0001
  4924. 1440000F BNE V0,R0,+15
  4925. 00401825 OR V1,V0,R0
  4926. 3C04801E LUI A0,801E
  4927. 3C050500 LUI A1,0500
  4928. 34A5050C ORI A1,A1,050C
  4929. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  4930. 27A60018 ADDIU A2,SP,0018
  4931. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  4932. AFA2001C SW V0,001C (SP)
  4933. 8FAE0018 LW T6,0018 (SP)
  4934. 3C046000 LUI A0,6000
  4935. 8FA3001C LW V1,001C (SP)
  4936. 01C47824 AND T7,T6,A0
  4937. 508F0003 BEQL A0,T7,+3
  4938. 8FBF0014 LW RA,0014 (SP)
  4939. 24030018 ADDIU V1,R0,0018
  4940. 8FBF0014 LW RA,0014 (SP)
  4941. 27BD0020 ADDIU SP,SP,0020
  4942. 00601025 OR V0,V1,R0
  4943. 03E00008 JR RA
  4944. 00000000 NOP
  4945.  
  4946. 3C02801E LUI V0,801E
  4947. 24425E7C ADDIU V0,V0,5E7C
  4948. 8C460000 LW A2,0000 (V0)
  4949. 27BDFFE8 ADDIU SP,SP,FFE8
  4950. 3C011000 LUI AT,1000
  4951. AFBF0014 SW RA,0014 (SP)
  4952. 3C04801E LUI A0,801E
  4953. 3C050500 LUI A1,0500
  4954. 00C17025 OR T6,A2,AT
  4955. 01C03025 OR A2,T6,R0
  4956. 34A50510 ORI A1,A1,0510
  4957. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  4958. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  4959. 3C02801E LUI V0,801E
  4960. 24425E7C ADDIU V0,V0,5E7C
  4961. 3C04801E LUI A0,801E
  4962. 3C050500 LUI A1,0500
  4963. 34A50510 ORI A1,A1,0510
  4964. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  4965. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  4966. 8C460000 LW A2,0000 (V0)
  4967. 3C03801E LUI V1,801E
  4968. 24635E90 ADDIU V1,V1,5E90
  4969. 906F000A LBU T7,000A (V1)
  4970. 3C02801E LUI V0,801E
  4971. 24425E7C ADDIU V0,V0,5E7C
  4972. 11E00004 BEQ T7,R0,+4
  4973. 3C19801E LUI T9,801E
  4974. 3C18005A LUI T8,005A
  4975. 10000002 BEQ R0,R0,+2
  4976. AC580000 SW T8,0000 (V0)
  4977. AC400000 SW R0,0000 (V0)
  4978. 27395E86 ADDIU T9,T9,5E86
  4979. 97280000 LHU T0,0000 (T9)
  4980. 3C050500 LUI A1,0500
  4981. 34A50510 ORI A1,A1,0510
  4982. 31098000 ANDI T1,T0,8000
  4983. 15200005 BNE T1,R0,+5
  4984. 3C04801E LUI A0,801E
  4985. 8C4A0000 LW T2,0000 (V0)
  4986. 3C014000 LUI AT,4000
  4987. 01415825 OR T3,T2,AT
  4988. AC4B0000 SW T3,0000 (V0)
  4989. 906C0009 LBU T4,0009 (V1)
  4990. 24010002 ADDIU AT,R0,0002
  4991. 15810005 BNE T4,AT,+5
  4992. 00000000 NOP
  4993. 8C4D0000 LW T5,0000 (V0)
  4994. 3C010200 LUI AT,0200
  4995. 01A17025 OR T6,T5,AT
  4996. AC4E0000 SW T6,0000 (V0)
  4997. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  4998. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  4999. 8C460000 LW A2,0000 (V0)
  5000. 8FBF0014 LW RA,0014 (SP)
  5001. 27BD0018 ADDIU SP,SP,0018
  5002. 03E00008 JR RA
  5003. 00000000 NOP
  5004.  
  5005. 27BDFFE0 ADDIU SP,SP,FFE0
  5006. AFBF0014 SW RA,0014 (SP)
  5007. 3C04801E LUI A0,801E
  5008. 3C050500 LUI A1,0500
  5009. 34A50514 ORI A1,A1,0514
  5010. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5011. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5012. 27A6001C ADDIU A2,SP,001C
  5013. 3C06801E LUI A2,801E
  5014. 8CC65E7C LW A2,5E7C (A2)
  5015. 3C011000 LUI AT,1000
  5016. 3C04801E LUI A0,801E
  5017. 3C050500 LUI A1,0500
  5018. 00C17025 OR T6,A2,AT
  5019. 01C03025 OR A2,T6,R0
  5020. 34A50510 ORI A1,A1,0510
  5021. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  5022. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5023. 3C04801E LUI A0,801E
  5024. 3C050500 LUI A1,0500
  5025. 3C06801E LUI A2,801E
  5026. 8CC65E7C LW A2,5E7C (A2)
  5027. 34A50510 ORI A1,A1,0510
  5028. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  5029. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5030. 8FA2001C LW V0,001C (SP)
  5031. 00027940 SLL T7,V0,0x5
  5032. 05E10003 BGEZ T7,+3
  5033. 0002C0C0 SLL T8,V0,0x3
  5034. 10000023 BEQ R0,R0,+35
  5035. 24020031 ADDIU V0,R0,0031
  5036. 07010003 BGEZ T8,+3
  5037. 3C014200 LUI AT,4200
  5038. 1000001F BEQ R0,R0,+31
  5039. 24020004 ADDIU V0,R0,0004
  5040. 0041C824 AND T9,V0,AT
  5041. 1320000B BEQ T9,R0,+11
  5042. 00025800 SLL T3,V0,0x0
  5043. 3C08801E LUI T0,801E
  5044. 25085E86 ADDIU T0,T0,5E86
  5045. 95090000 LHU T1,0000 (T0)
  5046. 312A8000 ANDI T2,T1,8000
  5047. 11400003 BEQ T2,R0,+3
  5048. 00000000 NOP
  5049. 10000014 BEQ R0,R0,+20
  5050. 24020016 ADDIU V0,R0,0016
  5051. 10000012 BEQ R0,R0,+18
  5052. 24020017 ADDIU V0,R0,0017
  5053. 05610003 BGEZ T3,+3
  5054. 3C04801E LUI A0,801E
  5055. 1000000E BEQ R0,R0,+14
  5056. 24020018 ADDIU V0,R0,0018
  5057. 3C050500 LUI A1,0500
  5058. 34A5050C ORI A1,A1,050C
  5059. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5060. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5061. 27A60018 ADDIU A2,SP,0018
  5062. 8FAC0018 LW T4,0018 (SP)
  5063. 3C026000 LUI V0,6000
  5064. 01826824 AND T5,T4,V0
  5065. 544D0004 BNEL V0,T5,+4
  5066. 24020018 ADDIU V0,R0,0018
  5067. 10000002 BEQ R0,R0,+2
  5068. 24020019 ADDIU V0,R0,0019
  5069. 24020018 ADDIU V0,R0,0018
  5070. 8FBF0014 LW RA,0014 (SP)
  5071. 27BD0020 ADDIU SP,SP,0020
  5072. 03E00008 JR RA
  5073. 00000000 NOP
  5074.  
  5075. 00000000 NOP
  5076. 00000000 NOP
  5077. 00000000 NOP
  5078. 00000000 NOP
  5079.  
  5080. 801CB640 0x47C0 Thread: Leo Interrupt thread
  5081. 27BDFFB8 ADDIU SP,SP,FFB8
  5082. AFBF0024 SW RA,0024 (SP)
  5083. AFB30020 SW S3,0020 (SP)
  5084. AFB2001C SW S2,001C (SP)
  5085. AFB10018 SW S1,0018 (SP)
  5086. AFB00014 SW S0,0014 (SP)
  5087. AFA40048 SW A0,0048 (SP)
  5088. 3C0EA000 LUI T6,A000
  5089. 91CF0010 LBU T7,0010 (T6)
  5090. 3C02801E LUI V0,801E
  5091. 24425E9C ADDIU V0,V0,5E9C
  5092. 3C18A000 LUI T8,A000
  5093. A04F0000 SB T7,0000 (V0) # 801E5E9C[0] = A0000010[0]: disk region
  5094. 93190090 LBU T9,0090 (T8)
  5095. 3C08A000 LUI T0,A000
  5096. 3C0AA000 LUI T2,A000
  5097. A0590001 SB T9,0001 (V0) # 801E5E9C[1] = A0000090[0]: disk region
  5098. 91090110 LBU T1,0110 (T0)
  5099. 3C01801E LUI AT,801E
  5100. 3C0C801E LUI T4,801E
  5101. A0490002 SB T1,0002 (V0) # 801E5E9C[2] = A0000110[0]: disk region
  5102. 914B0190 LBU T3,0190 (T2)
  5103. 258C5E85 ADDIU T4,T4,5E85
  5104. A04B0003 SB T3,0003 (V0) # 801E5E9C[3] = A0000190[0]: disk region
  5105. AC205E80 SW R0,5E80 (AT) # 801E5E80 = 0
  5106. 3C01801E LUI AT,801E
  5107. AC205E7C SW R0,5E7C (AT) # 801E5E7C = 0
  5108. 3C01801E LUI AT,801E
  5109. A0205E84 SB R0,5E84 (AT) # 801E5E84 = 0
  5110. 0C073330 JAL 801CCCC0 # 801E5F74 = 1
  5111. A1800000 SB R0,0000 (T4)
  5112. 0C07303C JAL 801CC0F0 # V0 = p->ASIC EPI handle, created if necessary
  5113. 00000000 NOP
  5114. 3C03801E LUI V1,801E
  5115. 3C07801E LUI A3,801E
  5116. 3C0E801E LUI T6,801E
  5117. 24E75EC0 ADDIU A3,A3,5EC0
  5118. 24635EC8 ADDIU V1,V1,5EC8
  5119. 240D0001 ADDIU T5,R0,0001
  5120. 25CE5E30 ADDIU T6,T6,5E30
  5121. @801CB6E0
  5122. 3C050500 LUI A1,0500
  5123. ACE20000 SW V0,0000 (A3) # 801E5EC0 = p->ASIC EPI handle
  5124. A06D0002 SB T5,0002 (V1)
  5125. AC6E0004 SW T6,0004 (V1)
  5126. 34A50508 ORI A1,A1,0508
  5127. 00402025 OR A0,V0,R0
  5128. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5129. 27A60044 ADDIU A2,SP,0044
  5130. 8FA30044 LW V1,0044 (SP)
  5131. 3C010680 LUI AT,0680
  5132. 00037A40 SLL T7,V1,0x9
  5133. 05E00005 BLTZ T7,+5
  5134. 0061C024 AND T8,V1,AT
  5135. 13000003 BEQ T8,R0,+3
  5136. 00000000 NOP
  5137. 0C073300 JAL 801CCC00 # leo reset
  5138. 00000000 NOP
  5139. @801CB724
  5140. 3C11801E LUI S1,801E
  5141. 26315E78 ADDIU S1,S1,5E78
  5142. 2413002B ADDIU S3,R0,002B
  5143. 24120002 ADDIU S2,R0,0002
  5144. 3C04801E LUI A0,801E
  5145. 24845DE8 ADDIU A0,A0,5DE8
  5146. 02202825 OR A1,S1,R0 # msg = 801E5E78: p->leocmd
  5147. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  5148. 24060001 ADDIU A2,R0,0001
  5149. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5150. 3C01801E LUI AT,801E
  5151. 3C040001 LUI A0,0001
  5152. 90790000 LBU T9,0000 (V1)
  5153. AC395EE0 SW T9,5EE0 (AT)
  5154. 90680000 LBU T0,0000 (V1)
  5155. 1500000A BNE T0,R0,+10
  5156. 00000000 NOP
  5157. @801CB768
  5158. 0C073300 JAL 801CCC00 # leo reset
  5159. 00000000 NOP
  5160. 3C04801E LUI A0,801E
  5161. 24845E00 ADDIU A0,A0,5E00 # queue = 801E5E00: cart interrupt callback
  5162. 00002825 OR A1,R0,R0
  5163. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  5164. 00003025 OR A2,R0,R0 # read
  5165. 1000FFEB BEQ R0,R0,-21
  5166. 00000000 NOP
  5167. @801CB78C
  5168. 0C073123 JAL 801CC48C
  5169. 34840001 ORI A0,A0,0001
  5170. 0C07330C JAL 801CCC30 # V0 = @801E5F74
  5171. 00408025 OR S0,V0,R0
  5172. 00401825 OR V1,V0,R0
  5173. 14400005 BNE V0,R0,+5
  5174. AFA20044 SW V0,0044 (SP)
  5175. 16000017 BNE S0,R0,+23
  5176. 00000000 NOP
  5177. 10000043 BEQ R0,R0,+67
  5178. 00000000 NOP
  5179. @801CB7B8
  5180. 24010003 ADDIU AT,R0,0003
  5181. 12010012 BEQ S0,AT,+18
  5182. 24010025 ADDIU AT,R0,0025
  5183. 12010010 BEQ S0,AT,+16
  5184. 24010029 ADDIU AT,R0,0029
  5185. 1201000E BEQ S0,AT,+14
  5186. 00000000 NOP
  5187. 1213000C BEQ S0,S3,+12
  5188. 24010031 ADDIU AT,R0,0031
  5189. 16010007 BNE S0,AT,+7
  5190. 00000000 NOP
  5191. 0C07330F JAL 801CCC3C # V0 = sensecode for flags @801E5F74
  5192. 00000000 NOP
  5193. 14530006 BNE V0,S3,+6
  5194. 00000000 NOP
  5195. 10000004 BEQ R0,R0,+4
  5196. 02608025 OR S0,S3,R0
  5197. @801CB7FC
  5198. 0C07330F JAL 801CCC3C # V0 = sensecode for flags @801E5F74
  5199. 00000000 NOP
  5200. 00408025 OR S0,V0,R0
  5201. 1213001F BEQ S0,S3,+31
  5202. 2401002F ADDIU AT,R0,002F
  5203. 12010005 BEQ S0,AT,+5
  5204. 24010031 ADDIU AT,R0,0031
  5205. 5201000F BEQL S0,AT,+15
  5206. 8E230000 LW V1,0000 (S1)
  5207. 10000037 BEQ R0,R0,+55
  5208. 8E230000 LW V1,0000 (S1)
  5209. @801CB828
  5210. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5211. 90640000 LBU A0,0000 (V1)
  5212. 2489FFFE ADDIU T1,A0,FFFE
  5213. 2D21000E SLTIU AT,T1,000E
  5214. 10200032 BEQ AT,R0,+50
  5215. 00094880 SLL T1,T1,0x2
  5216. 3C01801E LUI AT,801E
  5217. 00290821 ADDU AT,AT,T1
  5218. 8C2993C8 LW T1,93C8 (AT)
  5219. 01200008 JR T1
  5220. 00000000 NOP
  5221. @801CB854
  5222. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5223. 90640000 LBU A0,0000 (V1)
  5224. 248AFFFE ADDIU T2,A0,FFFE
  5225. 2D41000E SLTIU AT,T2,000E
  5226. 10200006 BEQ AT,R0,+6
  5227. 000A5080 SLL T2,T2,0x2
  5228. 3C01801E LUI AT,801E
  5229. 002A0821 ADDU AT,AT,T2
  5230. 8C2A9400 LW T2,9400 (AT)
  5231. 01400008 JR T2
  5232. 00000000 NOP
  5233. @801CB880
  5234. 10000020 BEQ R0,R0,+32
  5235. 2410002A ADDIU S0,R0,002A
  5236. @801CB888
  5237. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5238. 24010002 ADDIU AT,R0,0002
  5239. 90640000 LBU A0,0000 (V1)
  5240. 1081000A BEQ A0,AT,+10
  5241. 00801025 OR V0,A0,R0
  5242. 2401000D ADDIU AT,R0,000D
  5243. 10410007 BEQ V0,AT,+7
  5244. 2401000E ADDIU AT,R0,000E
  5245. 10410005 BEQ V0,AT,+5
  5246. 2401000F ADDIU AT,R0,000F
  5247. 54410015 BNEL V0,AT,+21
  5248. 24010003 ADDIU AT,R0,0003
  5249. 0C07331C JAL 801CCC70 # 801E5F74 &= ~2
  5250. 00000000 NOP
  5251. 3C0B801E LUI T3,801E
  5252. 916B5E84 LBU T3,5E84 (T3)
  5253. 55600055 BNEL T3,R0,+85
  5254. 8E2A0000 LW T2,0000 (S1)
  5255. 8E2C0000 LW T4,0000 (S1) # leocmd = @801E5E78
  5256. 918D0000 LBU T5,0000 (T4)
  5257. 25AEFFFE ADDIU T6,T5,FFFE
  5258. 2DC1000E SLTIU AT,T6,000E
  5259. 10200014 BEQ AT,R0,+20 # only use on cmds 2 - 0xF
  5260. 000E7080 SLL T6,T6,0x2
  5261. 3C01801E LUI AT,801E
  5262. 002E0821 ADDU AT,AT,T6
  5263. 8C2E9438 LW T6,9438 (AT) # call 801D9438[cmd]()
  5264. 01C00008 JR T6
  5265. 00000000 NOP
  5266. @801CB8FC: test unit ready
  5267. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5268. 90640000 LBU A0,0000 (V1)
  5269. 24010003 ADDIU AT,R0,0003
  5270. 54810007 BNEL A0,AT,+7
  5271. A0700005 SB S0,0005 (V1)
  5272. 0C0732F0 JAL 801CCBC0
  5273. 00000000 NOP
  5274. 8E2F0000 LW T7,0000 (S1) # leocmd = @801E5E78
  5275. A1E2000C SB V0,000C (T7) # leocmd[C] = call 801CCBC0(): unit ready flags
  5276. 8E230000 LW V1,0000 (S1)
  5277. A0700005 SB S0,0005 (V1)
  5278. 8E380000 LW T8,0000 (S1)
  5279. 10000043 BEQ R0,R0,+67
  5280. A3120004 SB S2,0004 (T8) # leocmd[4] = 2: check condition
  5281. @801CB934: inquiry
  5282. 3C19801E LUI T9,801E
  5283. 8F395E9C LW T9,5E9C (T9) # region = @801E5E9C
  5284. 3C050500 LUI A1,0500
  5285. 34A50540 ORI A1,A1,0540 # addy = 05000540: ASIC Attrib
  5286. 1720000C BNE T9,R0,+12 # skip test on retail units
  5287. 3C04801E LUI A0,801E
  5288. @801CB94C: development drives
  5289. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5290. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5291. 27A60044 ADDIU A2,SP,0044
  5292. 8FA30044 LW V1,0044 (SP)
  5293. 3C010007 LUI AT,0007
  5294. 00614024 AND T0,V1,AT
  5295. 3C010004 LUI AT,0004
  5296. 11010003 BEQ T0,AT,+3 # if ASIC Attrib device type != 4 (dev), permaloop
  5297. 00000000 NOP
  5298. 1000FFFF BEQ R0,R0,-1
  5299. 00000000 NOP
  5300. @801CB978
  5301. 0C072EAF JAL 801CBABC
  5302. 00000000 NOP
  5303. 10400004 BEQ V0,R0,+4
  5304. 3C05801E LUI A1,801E
  5305. 8E290000 LW T1,0000 (S1) # leocmd = @801E5E78
  5306. 1000002B BEQ R0,R0,+43
  5307. A1320004 SB S2,0004 (T1) # leocmd[4] = 2: check condition
  5308. @801CB994
  5309. 90A551A5 LBU A1,51A5 (A1) # disk type
  5310. 3C04000B LUI A0,000B
  5311. 34840001 ORI A0,A0,0001 # cmd = 0xB0001: submit disk type
  5312. 00055400 SLL T2,A1,0x10
  5313. 0C073208 JAL 801CC820
  5314. 01402825 OR A1,T2,R0
  5315. 8E2B0000 LW T3,0000 (S1) # leocmd = @801E5E78
  5316. 10400004 BEQ V0,R0,+4
  5317. A1620005 SB V0,0005 (T3)
  5318. 8E2C0000 LW T4,0000 (S1)
  5319. 1000001F BEQ R0,R0,+31
  5320. A1920004 SB S2,0004 (T4) # leocmd[4] = 2: check condition
  5321. @801CB9C4
  5322. 3C02801E LUI V0,801E
  5323. 904251A5 LBU V0,51A5 (V0)
  5324. 24010010 ADDIU AT,R0,0010
  5325. 3C0F801E LUI T7,801E
  5326. 304D00F0 ANDI T5,V0,00F0
  5327. 15A10008 BNE T5,AT,+8
  5328. 304E000F ANDI T6,V0,000F
  5329. @801CB9E0
  5330. 3C01801E LUI AT,801E
  5331. A02E5E88 SB T6,5E88 (AT)
  5332. 91EF5E88 LBU T7,5E88 (T7)
  5333. 240900FF ADDIU T1,R0,00FF
  5334. 29E10007 SLTI AT,T7,0007
  5335. 14200007 BNE AT,R0,+7
  5336. 00000000 NOP
  5337. @801CB9FC
  5338. 8E390000 LW T9,0000 (S1) # leocmd = @801E5E78
  5339. 2418000B ADDIU T8,R0,000B
  5340. A3380005 SB T8,0005 (T9) # leocmd[5] = 0xB: incompatible medium installed
  5341. 8E280000 LW T0,0000 (S1)
  5342. 1000000B BEQ R0,R0,+11
  5343. A1120004 SB S2,0004 (T0) # leocmd[4] = 2: check condition
  5344. @801CBA14
  5345. 3C01801E LUI AT,801E
  5346. A0295E84 SB T1,5E84 (AT)
  5347. 8E2A0000 LW T2,0000 (S1) # leocmd = @801E5E78
  5348. 3C19801E LUI T9,801E
  5349. 914B0000 LBU T3,0000 (T2) # cmd = leocmd[0]
  5350. 000B6080 SLL T4,T3,0x2
  5351. 032CC821 ADDU T9,T9,T4
  5352. 8F398D70 LW T9,8D70 (T9) # call 801D8D70[cmd](): leocmd handlers
  5353. 0320F809 JALR RA,T9
  5354. 00000000 NOP
  5355. @801CBA3C
  5356. 8E230000 LW V1,0000 (S1) # leocmd = @801E5E78
  5357. 24060001 ADDIU A2,R0,0001
  5358. 906D0002 LBU T5,0002 (V1)
  5359. 31AE0080 ANDI T6,T5,0080
  5360. 11C00004 BEQ T6,R0,+4 # if enable post queue, send sensecode to queue
  5361. 00000000 NOP
  5362. 8C640008 LW A0,0008 (V1) # queue = @leocmd+8
  5363. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  5364. 90650005 LBU A1,0005 (V1) # msg = sensecode
  5365. 3C0F801E LUI T7,801E
  5366. 25EF5E85 ADDIU T7,T7,5E85
  5367. 91F80000 LBU T8,0000 (T7)
  5368. 1300FF31 BEQ T8,R0,-207
  5369. 00000000 NOP
  5370. @801CBA74
  5371. 0C0739F8 JAL 801CE7E0 # handle leocmd 1: clear leo queue
  5372. 00000000 NOP
  5373. 1000FF2D BEQ R0,R0,-211
  5374. 00000000 NOP
  5375. 00000000 NOP
  5376. 00000000 NOP
  5377. 00000000 NOP
  5378. 00000000 NOP
  5379. 00000000 NOP
  5380. 00000000 NOP
  5381. 00000000 NOP
  5382. 8FBF0024 LW RA,0024 (SP)
  5383. 8FB00014 LW S0,0014 (SP)
  5384. 8FB10018 LW S1,0018 (SP)
  5385. 8FB2001C LW S2,001C (SP)
  5386. 8FB30020 LW S3,0020 (SP)
  5387. 03E00008 JR RA
  5388. 27BD0048 ADDIU SP,SP,0048
  5389.  
  5390. 801CBABC
  5391. 27BDFF88 ADDIU SP,SP,FF88
  5392. 3C05801E LUI A1,801E
  5393. 24A55E78 ADDIU A1,A1,5E78
  5394. 8CAE0000 LW T6,0000 (A1) # leocmd = @801E5E78
  5395. AFB70034 SW S7,0034 (SP)
  5396. AFB5002C SW S5,002C (SP)
  5397. AFB40028 SW S4,0028 (SP)
  5398. AFB30024 SW S3,0024 (SP)
  5399. AFB1001C SW S1,001C (SP)
  5400. AFBE0038 SW S8,0038 (SP)
  5401. AFB60030 SW S6,0030 (SP)
  5402. AFB20020 SW S2,0020 (SP)
  5403. AFB00018 SW S0,0018 (SP)
  5404. 27A3005C ADDIU V1,SP,005C
  5405. 3C110003 LUI S1,0003
  5406. 3C13801E LUI S3,801E
  5407. 3C14801E LUI S4,801E
  5408. 3C15801E LUI S5,801E
  5409. 3C17801E LUI S7,801E
  5410. AFBF003C SW RA,003C (SP)
  5411. ACA30000 SW V1,0000 (A1) # leocmd = @801E5E78
  5412. 00009025 OR S2,R0,R0
  5413. 00008025 OR S0,R0,R0
  5414. 26F78DB0 ADDIU S7,S7,8DB0 # 801D8DB0: leocmd sample for reading one block at system LBA 12
  5415. 26B55E86 ADDIU S5,S5,5E86
  5416. 26945E88 ADDIU S4,S4,5E88
  5417. 267351A0 ADDIU S3,S3,51A0
  5418. 36310001 ORI S1,S1,0001
  5419. 24163000 ADDIU S6,R0,3000
  5420. 241E0017 ADDIU S8,R0,0017
  5421. AFAE0058 SW T6,0058 (SP)
  5422. 8EE10000 LW AT,0000 (S7)
  5423. 8EF80004 LW T8,0004 (S7)
  5424. A2800000 SB R0,0000 (S4)
  5425. AC610000 SW AT,0000 (V1)
  5426. 8EE10008 LW AT,0008 (S7)
  5427. AC780004 SW T8,0004 (V1)
  5428. 8EF8000C LW T8,000C (S7)
  5429. AC610008 SW AT,0008 (V1)
  5430. 8EE10010 LW AT,0010 (S7)
  5431. AC78000C SW T8,000C (V1)
  5432. 8EF80014 LW T8,0014 (S7)
  5433. AC610010 SW AT,0010 (V1)
  5434. 8EE10018 LW AT,0018 (S7)
  5435. AC780014 SW T8,0014 (V1)
  5436. A2600008 SB R0,0008 (S3)
  5437. AC610018 SW AT,0018 (V1)
  5438. A6B60000 SH S6,0000 (S5)
  5439. 16400019 BNE S2,R0,+25
  5440. AFB30070 SW S3,0070 (SP)
  5441. 0C072F57 JAL 801CBD5C # handle read request from base LBA A0
  5442. 00002025 OR A0,R0,R0 # base LBA = 0
  5443. 93A20061 LBU V0,0061 (SP)
  5444. 27A3005C ADDIU V1,SP,005C
  5445. 10400005 BEQ V0,R0,+5
  5446. 00000000 NOP
  5447. 105E000A BEQ V0,S8,+10 # if unrecovered read error, read the disk header
  5448. 27A3005C ADDIU V1,SP,005C
  5449. 10000025 BEQ R0,R0,+37
  5450. 00000000 NOP
  5451. @801CBBAC: LBA 12 is supposed to be unwritten; fatal for retail
  5452. 3C02801E LUI V0,801E
  5453. 8C425E9C LW V0,5E9C (V0) # region = @801E5E9C
  5454. 00008025 OR S0,R0,R0
  5455. 1440FFFF BNE V0,R0,-1 # if retail, permaloop
  5456. 00000000 NOP
  5457. 1000FFDD BEQ R0,R0,-35
  5458. 2652FFFF ADDIU S2,S2,FFFF
  5459. @801CBBC8:
  5460. 3C02801E LUI V0,801E
  5461. 8C425E9C LW V0,5E9C (V0) # region = @801E5E9C
  5462. 00008025 OR S0,R0,R0
  5463. 1040FFFF BEQ V0,R0,-1 # if dev, permaloop
  5464. 00000000 NOP
  5465. 1000FFD6 BEQ R0,R0,-42
  5466. 2652FFFF ADDIU S2,S2,FFFF
  5467. @801CBBE4:
  5468. 32190003 ANDI T9,S0,0003
  5469. 3C02801E LUI V0,801E
  5470. 3C08801E LUI T0,801E
  5471. 8D085E9C LW T0,5E9C (T0) # region = @801E5E9C
  5472. 00591021 ADDU V0,V0,T9
  5473. 904293C0 LBU V0,93C0 (V0) # disk header LBA = 801D93C0[cur]
  5474. 15000003 BNE T0,R0,+3 # if dev, add 2 to the header LBAs
  5475. AFA20068 SW V0,0068 (SP)
  5476. 24420002 ADDIU V0,V0,0002
  5477. AFA20068 SW V0,0068 (SP)
  5478. 0C072F57 JAL 801CBD5C # handle read request from base LBA A0
  5479. 00002025 OR A0,R0,R0 # base LBA = 0
  5480. 93A90060 LBU T1,0060 (SP)
  5481. 15200008 BNE T1,R0,+8
  5482. 3C02801E LUI V0,801E
  5483. 3C03801E LUI V1,801E
  5484. 8C6351A0 LW V1,51A0 (V1)
  5485. 8C425E9C LW V0,5E9C (V0) # region = @801E5E9C
  5486. 1443FFFF BNE V0,V1,-1
  5487. 00000000 NOP
  5488. 10000013 BEQ R0,R0,+19
  5489. 8FAB0058 LW T3,0058 (SP)
  5490. @801CBC3C:
  5491. 0C0732AC JAL 801CCAB0
  5492. 93A40061 LBU A0,0061 (SP)
  5493. 1440000E BNE V0,R0,+14
  5494. 02202025 OR A0,S1,R0
  5495. 2E020040 SLTIU V0,S0,0040
  5496. 38420001 XORI V0,V0,0001
  5497. 1440000A BNE V0,R0,+10
  5498. 26100001 ADDIU S0,S0,0001
  5499. 320A0007 ANDI T2,S0,0007
  5500. 15400005 BNE T2,R0,+5
  5501. 00000000 NOP
  5502. 0C073208 JAL 801CC820
  5503. 00002825 OR A1,R0,R0
  5504. 1440FFF2 BNE V0,R0,-14
  5505. A3A20061 SB V0,0061 (SP)
  5506. 1000FFAF BEQ R0,R0,-81
  5507. 27A3005C ADDIU V1,SP,005C
  5508. @801CBC80:
  5509. 8FAB0058 LW T3,0058 (SP)
  5510. 93A20061 LBU V0,0061 (SP)
  5511. 3C01801E LUI AT,801E
  5512. AC2B5E78 SW T3,5E78 (AT) # 801E5E78 = @SP+58: p->leocmd
  5513. A1620005 SB V0,0005 (T3)
  5514. 8FBF003C LW RA,003C (SP)
  5515. 8FBE0038 LW S8,0038 (SP)
  5516. 8FB70034 LW S7,0034 (SP)
  5517. 8FB60030 LW S6,0030 (SP)
  5518. 8FB5002C LW S5,002C (SP)
  5519. 8FB40028 LW S4,0028 (SP)
  5520. 8FB30024 LW S3,0024 (SP)
  5521. 8FB20020 LW S2,0020 (SP)
  5522. 8FB1001C LW S1,001C (SP)
  5523. 8FB00018 LW S0,0018 (SP)
  5524. 03E00008 JR RA
  5525. 27BD0078 ADDIU SP,SP,0078
  5526.  
  5527. 00000000 NOP
  5528. 00000000 NOP
  5529. 00000000 NOP
  5530.  
  5531. 801CBCD0 0x4E50 V0 = address, A1 = width, A2 = height, A3 = alignment for IPL font image entry A0
  5532. accepts: A0=LeoGetAAdr2 entry, A1=target for width, A2=target for height, A3=target for alignment
  5533. 3C010001 LUI AT,0001
  5534. 0004C3C2 SRL T8,A0,0xF
  5535. 3421FFFE ORI AT,AT,FFFE
  5536. 03011824 AND V1,T8,AT # offset = (upper HW << 1) & 0x1FFFE
  5537. 3C010007 LUI AT,0007
  5538. 3421EE80 ORI AT,AT,EE80
  5539. 00045202 SRL T2,A0,0x8
  5540. 00611020 ADD V0,V1,AT # V0 = offset + 0x7EE80: IPL hardware address for image
  5541. 314B000F ANDI T3,T2,000F
  5542. 308D00FE ANDI T5,A0,00FE
  5543. 216C0001 ADDI T4,T3,0001
  5544. 000D7600 SLL T6,T5,0x18
  5545. 30990001 ANDI T9,A0,0001
  5546. 00041B02 SRL V1,A0,0xC
  5547. ACCC0000 SW T4,0000 (A2)
  5548. 000E7E43 SRA T7,T6,0x19 # alignment = (entry & 0xFE) >> 1
  5549. 0019C100 SLL T8,T9,0x4
  5550. 3069000F ANDI T1,V1,000F
  5551. ACEF0000 SW T7,0000 (A3)
  5552. 01385025 OR T2,T1,T8 # width = ((entry & 1) << 8) | (entry >> 12)
  5553. 03E00008 JR RA
  5554. ACAA0000 SW T2,0000 (A1)
  5555.  
  5556. 00000000 NOP
  5557. 00000000 NOP
  5558.  
  5559. 801CBD30 0x4EB0 handle leocmd 5: read
  5560. 27BDFFE8 ADDIU SP,SP,FFE8
  5561. 3C0E801E LUI T6,801E
  5562. AFBF0014 SW RA,0014 (SP)
  5563. 25CE5E86 ADDIU T6,T6,5E86
  5564. A5C00000 SH R0,0000 (T6) # 801E5E86[0:2] = 0
  5565. 0C072F57 JAL 801CBD5C # handle read request from base LBA A0
  5566. 24040018 ADDIU A0,R0,0018 # base LBA = 24
  5567. 8FBF0014 LW RA,0014 (SP)
  5568. 27BD0018 ADDIU SP,SP,0018
  5569. 03E00008 JR RA
  5570. 00000000 NOP
  5571.  
  5572. 801CBD5C 0x4EDC handle read request from base LBA A0
  5573. accepts: A0=base LBA
  5574. 27BDFFB0 ADDIU SP,SP,FFB0
  5575. AFB60030 SW S6,0030 (SP)
  5576. 3C16801E LUI S6,801E
  5577. 26D65E78 ADDIU S6,S6,5E78
  5578. 8EC50000 LW A1,0000 (S6) # leocmd = @801E5E78
  5579. AFBF0034 SW RA,0034 (SP)
  5580. AFB5002C SW S5,002C (SP)
  5581. AFB40028 SW S4,0028 (SP)
  5582. AFB30024 SW S3,0024 (SP)
  5583. AFB20020 SW S2,0020 (SP)
  5584. AFB1001C SW S1,001C (SP)
  5585. AFB00018 SW S0,0018 (SP)
  5586. 8CA2000C LW V0,000C (A1)
  5587. 8CA30010 LW V1,0010 (A1)
  5588. 24190020 ADDIU T9,R0,0020
  5589. 00437025 OR T6,V0,V1
  5590. 000E7C02 SRL T7,T6,0x10
  5591. 15E00005 BNE T7,R0,+5
  5592. 00441021 ADDU V0,V0,A0
  5593. 0043C021 ADDU T8,V0,V1
  5594. 2F0110DD SLTIU AT,T8,10DD
  5595. 14200006 BNE AT,R0,+6
  5596. 00000000 NOP
  5597. A0B90005 SB T9,0005 (A1)
  5598. 8EC90000 LW T1,0000 (S6) # leocmd = @801E5E78
  5599. 24080002 ADDIU T0,R0,0002
  5600. 1000003F BEQ R0,R0,+63
  5601. A1280004 SB T0,0004 (T1)
  5602. 14600008 BNE V1,R0,+8
  5603. 3C10801E LUI S0,801E
  5604. 2C4110DC SLTIU AT,V0,10DC
  5605. 5020FFF8 BEQL AT,R0,-8
  5606. A0B90005 SB T9,0005 (A1)
  5607. A0A00005 SB R0,0005 (A1)
  5608. 8ECA0000 LW T2,0000 (S6) # leocmd = @801E5E78
  5609. 10000036 BEQ R0,R0,+54
  5610. A1400004 SB R0,0004 (T2)
  5611. 3C01801E LUI AT,801E
  5612. 26105E86 ADDIU S0,S0,5E86
  5613. A4225E90 SH V0,5E90 (AT)
  5614. 960B0000 LHU T3,0000 (S0)
  5615. 3C15801E LUI S5,801E
  5616. 26B55EA8 ADDIU S5,S5,5EA8
  5617. 316C3FFF ANDI T4,T3,3FFF
  5618. A60C0000 SH T4,0000 (S0)
  5619. 02A02025 OR A0,S5,R0
  5620. 00002825 OR A1,R0,R0
  5621. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  5622. 00003025 OR A2,R0,R0
  5623. 3C04801E LUI A0,801E
  5624. 0C0017B0 JAL 80005EC0 # start thread A0
  5625. 24845438 ADDIU A0,A0,5438 # thread = 801E5438: Leo Work
  5626. 3C11801E LUI S1,801E
  5627. 26315E18 ADDIU S1,S1,5E18
  5628. 2414BFFF ADDIU S4,R0,BFFF
  5629. 3C130008 LUI S3,0008
  5630. 27B20044 ADDIU S2,SP,0044
  5631. 02202025 OR A0,S1,R0 # queue = 801E5E18
  5632. 02402825 OR A1,S2,R0
  5633. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  5634. 24060001 ADDIU A2,R0,0001 # wait
  5635. 8FA20044 LW V0,0044 (SP) # msg f/ 801E5E18
  5636. 10530005 BEQ V0,S3,+5
  5637. 3C010009 LUI AT,0009
  5638. 50410016 BEQL V0,AT,+22
  5639. 8EC90000 LW T1,0000 (S6)
  5640. 1000000D BEQ R0,R0,+13
  5641. 8FAF0044 LW T7,0044 (SP)
  5642. @: msg == 0x80000
  5643. 0C073364 JAL 801CCD90
  5644. 00000000 NOP
  5645. 960D0000 LHU T5,0000 (S0)
  5646. 02A02025 OR A0,S5,R0
  5647. 00002825 OR A1,R0,R0
  5648. 01B47024 AND T6,T5,S4
  5649. A60E0000 SH T6,0000 (S0)
  5650. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  5651. 00003025 OR A2,R0,R0
  5652. 1000FFEC BEQ R0,R0,-20
  5653. 02202025 OR A0,S1,R0
  5654. @: all other msgs
  5655. 8FAF0044 LW T7,0044 (SP)
  5656. 8ED80000 LW T8,0000 (S6) # leocmd = @801E5E78
  5657. 24190002 ADDIU T9,R0,0002
  5658. A30F0005 SB T7,0005 (T8)
  5659. 8EC80000 LW T0,0000 (S6)
  5660. 10000005 BEQ R0,R0,+5
  5661. A1190004 SB T9,0004 (T0)
  5662. @: msg == 0x90000
  5663. 8EC90000 LW T1,0000 (S6) # leocmd = @801E5E78
  5664. A1200005 SB R0,0005 (T1)
  5665. 8ECA0000 LW T2,0000 (S6)
  5666. A1400004 SB R0,0004 (T2)
  5667. 8FBF0034 LW RA,0034 (SP)
  5668. 8FB00018 LW S0,0018 (SP)
  5669. 8FB1001C LW S1,001C (SP)
  5670. 8FB20020 LW S2,0020 (SP)
  5671. 8FB30024 LW S3,0024 (SP)
  5672. 8FB40028 LW S4,0028 (SP)
  5673. 8FB5002C LW S5,002C (SP)
  5674. 8FB60030 LW S6,0030 (SP)
  5675. 03E00008 JR RA
  5676. 27BD0050 ADDIU SP,SP,0050
  5677.  
  5678. 00000000 NOP
  5679.  
  5680. 801CBEF0 0x5070 V0 = sensecode; A2 = bytelength of A1 LBAs starting at A0
  5681. accepts: A0=LBA, A1=#blocks, A2=p->target
  5682. 27BDFFC0 ADDIU SP,SP,FFC0
  5683. 3C0E801E LUI T6,801E
  5684. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  5685. AFB1001C SW S1,001C (SP)
  5686. AFB00018 SW S0,0018 (SP)
  5687. 00808025 OR S0,A0,R0
  5688. 00A08825 OR S1,A1,R0
  5689. AFBF0034 SW RA,0034 (SP)
  5690. AFB60030 SW S6,0030 (SP)
  5691. AFB5002C SW S5,002C (SP)
  5692. AFB40028 SW S4,0028 (SP)
  5693. AFB30024 SW S3,0024 (SP)
  5694. AFB20020 SW S2,0020 (SP)
  5695. 15C00003 BNE T6,R0,+3
  5696. AFA60048 SW A2,0048 (SP)
  5697. 10000039 BEQ R0,R0,+57
  5698. 2402FFFF ADDIU V0,R0,FFFF
  5699. 00009825 OR S3,R0,R0
  5700. 24050001 ADDIU A1,R0,0001
  5701. 24020001 ADDIU V0,R0,0001
  5702. 12200031 BEQ S1,R0,+49
  5703. 26100018 ADDIU S0,S0,0018
  5704. 3C16801E LUI S6,801E
  5705. 3C15801E LUI S5,801E
  5706. 3C14801E LUI S4,801E
  5707. 3C12801E LUI S2,801E
  5708. 26525E88 ADDIU S2,S2,5E88
  5709. 26949518 ADDIU S4,S4,9518
  5710. 26B59618 ADDIU S5,S5,9618
  5711. 26D69504 ADDIU S6,S6,9504
  5712. 8FA40038 LW A0,0038 (SP)
  5713. 14400009 BNE V0,R0,+9
  5714. 00000000 NOP
  5715. 924F0000 LBU T7,0000 (S2)
  5716. 00054040 SLL T0,A1,0x1
  5717. 000FC140 SLL T8,T7,0x5
  5718. 0298C821 ADDU T9,S4,T8
  5719. 03284821 ADDU T1,T9,T0
  5720. 952A0000 LHU T2,0000 (T1)
  5721. 560A0013 BNEL S0,T2,+19
  5722. 2631FFFF ADDIU S1,S1,FFFF
  5723. 0C07394D JAL 801CE534 # vzone for LBA A0
  5724. 02002025 OR A0,S0,R0
  5725. 924B0000 LBU T3,0000 (S2)
  5726. 3045FFFF ANDI A1,V0,FFFF
  5727. 000B6100 SLL T4,T3,0x4
  5728. 02AC6821 ADDU T5,S5,T4
  5729. 01A27021 ADDU T6,T5,V0
  5730. 91C30000 LBU V1,0000 (T6)
  5731. 28610008 SLTI AT,V1,0008
  5732. 14200004 BNE AT,R0,+4
  5733. 00602025 OR A0,V1,R0
  5734. 2483FFF9 ADDIU V1,A0,FFF9
  5735. 306FFFFF ANDI T7,V1,FFFF
  5736. 01E01825 OR V1,T7,R0
  5737. 0003C040 SLL T8,V1,0x1
  5738. 02D8C821 ADDU T9,S6,T8
  5739. 97240000 LHU A0,0000 (T9)
  5740. 2631FFFF ADDIU S1,S1,FFFF
  5741. 02649821 ADDU S3,S3,A0
  5742. 12200006 BEQ S1,R0,+6
  5743. 26100001 ADDIU S0,S0,0001
  5744. 2E0110DC SLTIU AT,S0,10DC
  5745. 14200003 BNE AT,R0,+3
  5746. 00000000 NOP
  5747. 10000007 BEQ R0,R0,+7
  5748. 24020020 ADDIU V0,R0,0020
  5749. 1620FFDB BNE S1,R0,-37
  5750. 00001025 OR V0,R0,R0
  5751. AFA40038 SW A0,0038 (SP)
  5752. 8FA80048 LW T0,0048 (SP)
  5753. 00001025 OR V0,R0,R0
  5754. AD130000 SW S3,0000 (T0)
  5755. 8FBF0034 LW RA,0034 (SP)
  5756. 8FB00018 LW S0,0018 (SP)
  5757. 8FB1001C LW S1,001C (SP)
  5758. 8FB20020 LW S2,0020 (SP)
  5759. 8FB30024 LW S3,0024 (SP)
  5760. 8FB40028 LW S4,0028 (SP)
  5761. 8FB5002C LW S5,002C (SP)
  5762. 8FB60030 LW S6,0030 (SP)
  5763. 03E00008 JR RA
  5764. 27BD0040 ADDIU SP,SP,0040
  5765.  
  5766. 00000000 NOP
  5767.  
  5768. 801CC040 0x51C0 handle leocmd 2: inquiry
  5769. 27BDFFE0 ADDIU SP,SP,FFE0
  5770. AFBF0014 SW RA,0014 (SP)
  5771. 3C04801E LUI A0,801E
  5772. 3C050500 LUI A1,0500
  5773. 34A50540 ORI A1,A1,0540 # hardware = 05000540: Leo Attrib
  5774. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5775. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5776. 27A6001C ADDIU A2,SP,001C
  5777. 3C04001B LUI A0,001B # cmd = 0x1B0000: disk inquiry
  5778. 0C073208 JAL 801CC820
  5779. 00002825 OR A1,R0,R0
  5780. 1440000D BNE V0,R0,+13
  5781. 3C04801E LUI A0,801E
  5782. 3C050500 LUI A1,0500
  5783. 34A50500 ORI A1,A1,0500 # hardware = 05000500: Leo Data
  5784. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  5785. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  5786. 27A60018 ADDIU A2,SP,0018
  5787. 8FAE0018 LW T6,0018 (SP) # result of disk inquiry command
  5788. 8FB8001C LW T8,001C (SP) # result of Leo Attrib read
  5789. 3C010010 LUI AT,0010
  5790. 000E7BC0 SLL T7,T6,0xF
  5791. 05E10002 BGEZ T7,+2
  5792. 0301C825 OR T9,T8,AT
  5793. AFB9001C SW T9,001C (SP) # if (Leo Attrib & 0x10000), Leo Attrib |= 0x100000
  5794. 3C02801E LUI V0,801E
  5795. 24425E78 ADDIU V0,V0,5E78
  5796. 8C480000 LW T0,0000 (V0) # leocmd = @801E5E78
  5797. 240C0001 ADDIU T4,R0,0001
  5798. A100000C SB R0,000C (T0) # leocmd[C] = 0: device type
  5799. 8FA9001C LW T1,001C (SP)
  5800. 8C4B0000 LW T3,0000 (V0)
  5801. 00095402 SRL T2,T1,0x10
  5802. A16A000D SB T2,000D (T3) # leocmd[D] = (Leo Attrib >> 16): hardware version
  5803. 8C4D0000 LW T5,0000 (V0)
  5804. A1AC000E SB T4,000E (T5) # leocmd[E] = 1: #devices
  5805. 8C4E0000 LW T6,0000 (V0)
  5806. A1C0000F SB R0,000F (T6) # leocmd[F] = 0: Leo software version < 2.0H
  5807. 8C4F0000 LW T7,0000 (V0)
  5808. A1E00004 SB R0,0004 (T7) # leocmd[4] = 0: clear status
  5809. 8FBF0014 LW RA,0014 (SP)
  5810. 27BD0020 ADDIU SP,SP,0020
  5811. 03E00008 JR RA
  5812. 00000000 NOP
  5813.  
  5814. 801CC0F0 0x5270 V0 = p->ASIC EPI handle, created if necessary
  5815. 27BDFFE0 ADDIU SP,SP,FFE0
  5816. AFB00018 SW S0,0018 (SP)
  5817. 3C10801E LUI S0,801E
  5818. 26105EF0 ADDIU S0,S0,5EF0
  5819. AFBF001C SW RA,001C (SP)
  5820. 24020002 ADDIU V0,R0,0002
  5821. 24030006 ADDIU V1,R0,0006
  5822. 3C0EA500 LUI T6,A500
  5823. 240F0003 ADDIU T7,R0,0003
  5824. 24180001 ADDIU T8,R0,0001
  5825. 3C04801E LUI A0,801E
  5826. A2020004 SB V0,0004 (S0)
  5827. AE0E000C SW T6,000C (S0)
  5828. A20F0005 SB T7,0005 (S0)
  5829. A2030008 SB V1,0008 (S0)
  5830. A2030006 SB V1,0006 (S0)
  5831. A2020007 SB V0,0007 (S0)
  5832. A2180009 SB T8,0009 (S0)
  5833. AE000010 SW R0,0010 (S0)
  5834. 24845F04 ADDIU A0,A0,5F04
  5835. 0C000BA0 JAL 80002E80 # initialize A1 bytes at A0
  5836. 24050060 ADDIU A1,R0,0060
  5837. 0C00144C JAL 80005130 # V0 = True if interrupts disabled; disable interrupts in Status
  5838. 00000000 NOP
  5839. 3C038000 LUI V1,8000
  5840. 2463638C ADDIU V1,V1,638C
  5841. 8C790000 LW T9,0000 (V1)
  5842. AC700000 SW S0,0000 (V1)
  5843. 3C01801E LUI AT,801E
  5844. AE190000 SW T9,0000 (S0)
  5845. AC305F64 SW S0,5F64 (AT)
  5846. 0C001468 JAL 800051A0 # Status |= A0
  5847. 00402025 OR A0,V0,R0
  5848. 8FBF001C LW RA,001C (SP)
  5849. 02001025 OR V0,S0,R0
  5850. 8FB00018 LW S0,0018 (SP)
  5851. 03E00008 JR RA
  5852. 27BD0020 ADDIU SP,SP,0020
  5853.  
  5854. 00000000 NOP
  5855. 00000000 NOP
  5856.  
  5857. 801CC190 0x5310 read disk ID to A1 using leocmd A0, informing queue A2; return 0 if okay, -1 if leo not started
  5858. accepts: A0=p->leocmd, A1=p->target, A2=p->queue or None
  5859. 3C0E801E LUI T6,801E
  5860. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  5861. 27BDFFE8 ADDIU SP,SP,FFE8
  5862. AFBF0014 SW RA,0014 (SP)
  5863. 15C00003 BNE T6,R0,+3
  5864. 240F000C ADDIU T7,R0,000C
  5865. 1000000D BEQ R0,R0,+13
  5866. 2402FFFF ADDIU V0,R0,FFFF
  5867. A08F0000 SB T7,0000 (A0) # leocmd[0:4] = (0xC, 0, 0, 0)
  5868. A0800001 SB R0,0001 (A0)
  5869. A0800002 SB R0,0002 (A0)
  5870. A0800003 SB R0,0003 (A0)
  5871. 10C00004 BEQ A2,R0,+4 # if queue is None, skip
  5872. AC85000C SW A1,000C (A0) # leocmd+C = A1: p->target
  5873. @
  5874. 34190080 ORI T9,R0,0080
  5875. A0990002 SB T9,0002 (A0) # leocmd[2] = 0x80: enable post queue
  5876. AC860008 SW A2,0008 (A0) # leocmd+8 = A2: p->queue
  5877. @
  5878. 0C072A69 JAL 801CA9A4 # send leocmd A0
  5879. 00000000 NOP
  5880. 00001025 OR V0,R0,R0 # return 0
  5881. 8FBF0014 LW RA,0014 (SP)
  5882. 27BD0018 ADDIU SP,SP,0018
  5883. 03E00008 JR RA
  5884. 00000000 NOP
  5885.  
  5886. 801CC1F0 0x5370 handle leocmd 0xC: read diskID
  5887. 27BDFF98 ADDIU SP,SP,FF98
  5888. AFBE0038 SW S8,0038 (SP)
  5889. 3C1E801E LUI S8,801E
  5890. 27DE5E78 ADDIU S8,S8,5E78
  5891. AFB70034 SW S7,0034 (SP)
  5892. AFB5002C SW S5,002C (SP)
  5893. AFB30024 SW S3,0024 (SP)
  5894. AFB20020 SW S2,0020 (SP)
  5895. AFB1001C SW S1,001C (SP)
  5896. AFB00018 SW S0,0018 (SP)
  5897. 27B2004C ADDIU S2,SP,004C
  5898. AFB60030 SW S6,0030 (SP)
  5899. AFB40028 SW S4,0028 (SP)
  5900. 8FD00000 LW S0,0000 (S8) # leocmd = @801E5E78
  5901. 3C11801E LUI S1,801E
  5902. 3C13801E LUI S3,801E
  5903. 3C15801E LUI S5,801E
  5904. 3C17801E LUI S7,801E
  5905. AFBF003C SW RA,003C (SP)
  5906. AFD20000 SW S2,0000 (S8) # 801E5E78 = SP+4C: p->leocmd
  5907. 26F79472 ADDIU S7,S7,9472 # 801D9472: end of diskID LBA list
  5908. 26B58DD0 ADDIU S5,S5,8DD0 # 801D8DD0: leocmd sample for reading one block at system LBA 14 (disk ID)
  5909. 26735E86 ADDIU S3,S3,5E86
  5910. 26319470 ADDIU S1,S1,9470 # 801D9470: diskID LBA list
  5911. 24142000 ADDIU S4,R0,2000
  5912. 24160017 ADDIU S6,R0,0017
  5913. @801CC258
  5914. 8EA10000 LW AT,0000 (S5)
  5915. 8EAF0004 LW T7,0004 (S5)
  5916. 92380000 LBU T8,0000 (S1)
  5917. AE410000 SW AT,0000 (S2) # copy base diskID sample to temp leocmd at SP+4C
  5918. 8EA10008 LW AT,0008 (S5)
  5919. AE4F0004 SW T7,0004 (S2)
  5920. 8EAF000C LW T7,000C (S5)
  5921. AE410008 SW AT,0008 (S2)
  5922. 8EA10010 LW AT,0010 (S5)
  5923. AE4F000C SW T7,000C (S2)
  5924. 8EAF0014 LW T7,0014 (S5)
  5925. AE410010 SW AT,0010 (S2)
  5926. 8EA10018 LW AT,0018 (S5)
  5927. AE4F0014 SW T7,0014 (S2)
  5928. A6740000 SH S4,0000 (S3)
  5929. AE410018 SW AT,0018 (S2)
  5930. 00002025 OR A0,R0,R0 # base LBA = 0
  5931. 0C072F57 JAL 801CBD5C # handle read request from base LBA A0
  5932. AFB80058 SW T8,0058 (SP) # diskID = 801D9470[cur]
  5933. 93B90051 LBU T9,0051 (SP)
  5934. 26310001 ADDIU S1,S1,0001
  5935. 0237082B SLTU AT,S1,S7
  5936. 12D90003 BEQ S6,T9,+3 # if sensecode == unrecovered read error, try next LBA
  5937. 00000000 NOP
  5938. 10000004 BEQ R0,R0,+4
  5939. AFD00000 SW S0,0000 (S8)
  5940. @801CC2C0: loop through other entries until one readable
  5941. 5420FFE6 BNEL AT,R0,-26
  5942. 8EA10000 LW AT,0000 (S5)
  5943. @801CC2C8
  5944. AFD00000 SW S0,0000 (S8) # 801E5E78 = orginal p->leocmd
  5945. 3C02801E LUI V0,801E
  5946. 3C03801E LUI V1,801E
  5947. 8E10000C LW S0,000C (S0) # target for diskID = @leocmd+C
  5948. 24635FA0 ADDIU V1,V1,5FA0
  5949. 24425F80 ADDIU V0,V0,5F80
  5950. 8C490000 LW T1,0000 (V0)
  5951. 24420010 ADDIU V0,V0,0010
  5952. 26100010 ADDIU S0,S0,0010
  5953. AE09FFF0 SW T1,FFF0 (S0)
  5954. 8C4AFFF4 LW T2,FFF4 (V0)
  5955. AE0AFFF4 SW T2,FFF4 (S0)
  5956. 8C4BFFF8 LW T3,FFF8 (V0)
  5957. AE0BFFF8 SW T3,FFF8 (S0)
  5958. 8C4CFFFC LW T4,FFFC (V0)
  5959. 1443FFF6 BNE V0,V1,-10 # copy diskID from 801E5F80 to target
  5960. AE0CFFFC SW T4,FFFC (S0)
  5961. @801CC30C
  5962. 93AD0051 LBU T5,0051 (SP)
  5963. 8FCE0000 LW T6,0000 (S8) # leocmd = @801E5E78
  5964. A1CD0005 SB T5,0005 (T6) # leocmd[5] = sensecode
  5965. 8FD80000 LW T8,0000 (S8)
  5966. 93AF0050 LBU T7,0050 (SP)
  5967. A30F0004 SB T7,0004 (T8) # leocmd[4] = status
  5968. 8FD90000 LW T9,0000 (S8)
  5969. 93280004 LBU T0,0004 (T9)
  5970. 15000005 BNE T0,R0,+5 # 801E5F74 |= 1 if status else 801E5F74 &= ~1
  5971. 00000000 NOP
  5972. @801CC334
  5973. 0C073323 JAL 801CCC8C # 801E5F74 &= ~1; diskID read successfully
  5974. 00000000 NOP
  5975. 10000004 BEQ R0,R0,+4
  5976. 8FBF003C LW RA,003C (SP)
  5977. @801CC344
  5978. 0C07332A JAL 801CCCA8 # 801E5F74 |= 1; status error during diskID read
  5979. 00000000 NOP
  5980. 8FBF003C LW RA,003C (SP)
  5981. 8FB00018 LW S0,0018 (SP)
  5982. 8FB1001C LW S1,001C (SP)
  5983. 8FB20020 LW S2,0020 (SP)
  5984. 8FB30024 LW S3,0024 (SP)
  5985. 8FB40028 LW S4,0028 (SP)
  5986. 8FB5002C LW S5,002C (SP)
  5987. 8FB60030 LW S6,0030 (SP)
  5988. 8FB70034 LW S7,0034 (SP)
  5989. 8FBE0038 LW S8,0038 (SP)
  5990. 03E00008 JR RA
  5991. 27BD0068 ADDIU SP,SP,0068
  5992.  
  5993. 00000000 NOP
  5994.  
  5995. 801CC380
  5996. 27BDFFE8 ADDIU SP,SP,FFE8
  5997. AFBF0014 SW RA,0014 (SP)
  5998. 3C04801E LUI A0,801E
  5999. 3C050500 LUI A1,0500
  6000. 3C06801E LUI A2,801E
  6001. 24C65F70 ADDIU A2,A2,5F70 # target = 801E5F70
  6002. 34A50508 ORI A1,A1,0508 # hardware = 05000508: Leo Status
  6003. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  6004. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6005. 3C0E801E LUI T6,801E
  6006. 8DCE5F70 LW T6,5F70 (T6)
  6007. 3C030100 LUI V1,0100
  6008. 3C0101C3 LUI AT,01C3
  6009. 3421FFFF ORI AT,AT,FFFF
  6010. 01C31026 XOR V0,T6,V1
  6011. 00417824 AND T7,V0,AT
  6012. 11E0002D BEQ T7,R0,+45
  6013. 3C0101C1 LUI AT,01C1
  6014. 3421FFFF ORI AT,AT,FFFF
  6015. 0041C024 AND T8,V0,AT
  6016. 13000003 BEQ T8,R0,+3
  6017. 3059FFFF ANDI T9,V0,FFFF
  6018. 3C01801E LUI AT,801E
  6019. A0205E84 SB R0,5E84 (AT)
  6020. 13200003 BEQ T9,R0,+3
  6021. 3C0100C0 LUI AT,00C0
  6022. 10000024 BEQ R0,R0,+36
  6023. 24020029 ADDIU V0,R0,0029
  6024. 00414024 AND T0,V0,AT
  6025. 3C010080 LUI AT,0080
  6026. 15010003 BNE T0,AT,+3
  6027. 00024A40 SLL T1,V0,0x9
  6028. 1000001E BEQ R0,R0,+30
  6029. 24020003 ADDIU V0,R0,0003
  6030. 05230009 BGEZL T1,+9
  6031. 00436024 AND T4,V0,V1
  6032. 3C03801E LUI V1,801E
  6033. 24635F74 ADDIU V1,V1,5F74
  6034. 8C6A0000 LW T2,0000 (V1)
  6035. 2402002B ADDIU V0,R0,002B
  6036. 354B0002 ORI T3,T2,0002
  6037. 10000015 BEQ R0,R0,+21
  6038. AC6B0000 SW T3,0000 (V1)
  6039. 00436024 AND T4,V0,V1
  6040. 51800004 BEQL T4,R0,+4
  6041. 00026BC0 SLL T5,V0,0xF
  6042. 10000010 BEQ R0,R0,+16
  6043. 24020031 ADDIU V0,R0,0031
  6044. 00026BC0 SLL T5,V0,0xF
  6045. 05A10007 BGEZ T5,+7
  6046. 3C03801E LUI V1,801E
  6047. 24635F74 ADDIU V1,V1,5F74
  6048. 8C6E0000 LW T6,0000 (V1)
  6049. 2402002F ADDIU V0,R0,002F
  6050. 35CF0001 ORI T7,T6,0001
  6051. 10000007 BEQ R0,R0,+7
  6052. AC6F0000 SW T7,0000 (V1)
  6053. 0002C380 SLL T8,V0,0xE
  6054. 07030004 BGEZL T8,+4
  6055. 00001025 OR V0,R0,R0
  6056. 10000002 BEQ R0,R0,+2
  6057. 24020015 ADDIU V0,R0,0015
  6058. 00001025 OR V0,R0,R0
  6059. 8FBF0014 LW RA,0014 (SP)
  6060. 27BD0018 ADDIU SP,SP,0018
  6061. 03E00008 JR RA
  6062. 00000000 NOP
  6063.  
  6064. 801CC48C
  6065. 27BDFFE0 ADDIU SP,SP,FFE0
  6066. AFBF0014 SW RA,0014 (SP)
  6067. 0C0730E0 JAL 801CC380
  6068. AFA40020 SW A0,0020 (SP)
  6069. 24010015 ADDIU AT,R0,0015
  6070. 8FA40020 LW A0,0020 (SP)
  6071. 1041002C BEQ V0,AT,+44
  6072. AFA2001C SW V0,001C (SP)
  6073. @801CC4AC
  6074. 2401002B ADDIU AT,R0,002B
  6075. 1041000D BEQ V0,AT,+13
  6076. 3C0E801E LUI T6,801E
  6077. 2401002F ADDIU AT,R0,002F
  6078. 10410005 BEQ V0,AT,+5
  6079. 24010031 ADDIU AT,R0,0031
  6080. 10410022 BEQ V0,AT,+34
  6081. 30980001 ANDI T8,A0,0001
  6082. 10000025 BEQ R0,R0,+37
  6083. 93A2001F LBU V0,001F (SP)
  6084. 3C010008 LUI AT,0008
  6085. 14810003 BNE A0,AT,+3
  6086. 00000000 NOP
  6087. 10000020 BEQ R0,R0,+32
  6088. 00001025 OR V0,R0,R0
  6089. @801CC4E8
  6090. 8DCE5F70 LW T6,5F70 (T6)
  6091. 3C010009 LUI AT,0009
  6092. 000E7A00 SLL T7,T6,0x8
  6093. 05E2001B BLTZL T7,+27
  6094. 93A2001F LBU V0,001F (SP)
  6095. 14810003 BNE A0,AT,+3
  6096. 00000000 NOP
  6097. 10000017 BEQ R0,R0,+23
  6098. 00001025 OR V0,R0,R0
  6099. @801CC50C
  6100. 0C073297 JAL 801CCA5C
  6101. 00002025 OR A0,R0,R0
  6102. 10400003 BEQ V0,R0,+3
  6103. 3C04801E LUI A0,801E
  6104. 10000011 BEQ R0,R0,+17
  6105. 24020025 ADDIU V0,R0,0025
  6106. @801CC524
  6107. 3C050500 LUI A1,0500
  6108. 34A50508 ORI A1,A1,0508
  6109. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6110. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6111. 3C060009 LUI A2,0009
  6112. 0C073297 JAL 801CCA5C
  6113. 24040001 ADDIU A0,R0,0001
  6114. 50400008 BEQL V0,R0,+8
  6115. 93A2001F LBU V0,001F (SP)
  6116. 10000006 BEQ R0,R0,+6
  6117. 24020025 ADDIU V0,R0,0025
  6118. @801CC550
  6119. 57000004 BNEL T8,R0,+4
  6120. 93A2001F LBU V0,001F (SP)
  6121. 10000002 BEQ R0,R0,+2
  6122. 00001025 OR V0,R0,R0
  6123. 93A2001F LBU V0,001F (SP)
  6124. 8FBF0014 LW RA,0014 (SP)
  6125. 27BD0020 ADDIU SP,SP,0020
  6126. 03E00008 JR RA
  6127. 00000000 NOP
  6128.  
  6129. 801CC574
  6130. 27BDFFD8 ADDIU SP,SP,FFD8
  6131. AFBF0014 SW RA,0014 (SP)
  6132. 0C0730E0 JAL 801CC380
  6133. AFA40028 SW A0,0028 (SP)
  6134. 24010015 ADDIU AT,R0,0015
  6135. 10410028 BEQ V0,AT,+40
  6136. 00401825 OR V1,V0,R0
  6137. 2401002B ADDIU AT,R0,002B
  6138. 10410008 BEQ V0,AT,+8
  6139. 3C0E801E LUI T6,801E
  6140. 2401002F ADDIU AT,R0,002F
  6141. 10410005 BEQ V0,AT,+5
  6142. 24010031 ADDIU AT,R0,0031
  6143. 1041001B BEQ V0,AT,+27
  6144. 8FB80028 LW T8,0028 (SP)
  6145. 10000059 BEQ R0,R0,+89
  6146. 306200FF ANDI V0,V1,00FF
  6147. 8DCE5F70 LW T6,5F70 (T6)
  6148. 00002025 OR A0,R0,R0
  6149. 000E7A00 SLL T7,T6,0x8
  6150. 05E20054 BLTZL T7,+84
  6151. 306200FF ANDI V0,V1,00FF
  6152. 0C073297 JAL 801CCA5C
  6153. AFA30020 SW V1,0020 (SP)
  6154. 10400003 BEQ V0,R0,+3
  6155. 8FA30020 LW V1,0020 (SP)
  6156. 1000004E BEQ R0,R0,+78
  6157. 24020025 ADDIU V0,R0,0025
  6158. 3C04801E LUI A0,801E
  6159. 3C050500 LUI A1,0500
  6160. 34A50508 ORI A1,A1,0508
  6161. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6162. 3C060009 LUI A2,0009
  6163. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6164. AFA30020 SW V1,0020 (SP)
  6165. 0C073297 JAL 801CCA5C
  6166. 24040001 ADDIU A0,R0,0001
  6167. 10400042 BEQ V0,R0,+66
  6168. 8FA30020 LW V1,0020 (SP)
  6169. 10000041 BEQ R0,R0,+65
  6170. 24020025 ADDIU V0,R0,0025
  6171. 33190001 ANDI T9,T8,0001
  6172. 5720003E BNEL T9,R0,+62
  6173. 306200FF ANDI V0,V1,00FF
  6174. 1000003C BEQ R0,R0,+60
  6175. 00001025 OR V0,R0,R0
  6176. 3C04801E LUI A0,801E
  6177. 3C050500 LUI A1,0500
  6178. 34A50500 ORI A1,A1,0500
  6179. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6180. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6181. 00003025 OR A2,R0,R0
  6182. 0C073297 JAL 801CCA5C
  6183. 00002025 OR A0,R0,R0
  6184. 10400003 BEQ V0,R0,+3
  6185. 3C04801E LUI A0,801E
  6186. 10000030 BEQ R0,R0,+48
  6187. 24020025 ADDIU V0,R0,0025
  6188. 3C050500 LUI A1,0500
  6189. 34A50508 ORI A1,A1,0508
  6190. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6191. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6192. 3C06000C LUI A2,000C
  6193. 0C073297 JAL 801CCA5C
  6194. 24040001 ADDIU A0,R0,0001
  6195. 10400003 BEQ V0,R0,+3
  6196. 3C04801E LUI A0,801E
  6197. 10000025 BEQ R0,R0,+37
  6198. 24020025 ADDIU V0,R0,0025
  6199. 3C050500 LUI A1,0500
  6200. 34A50500 ORI A1,A1,0500
  6201. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6202. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  6203. 27A60024 ADDIU A2,SP,0024
  6204. 0C073123 JAL 801CC48C
  6205. 3C04000C LUI A0,000C
  6206. 50400004 BEQL V0,R0,+4
  6207. 8FA20024 LW V0,0024 (SP)
  6208. 1000001A BEQ R0,R0,+26
  6209. 304200FF ANDI V0,V0,00FF
  6210. 8FA20024 LW V0,0024 (SP)
  6211. 000243C0 SLL T0,V0,0xF
  6212. 05010003 BGEZ T0,+3
  6213. 00024B80 SLL T1,V0,0xE
  6214. 10000014 BEQ R0,R0,+20
  6215. 24020002 ADDIU V0,R0,0002
  6216. 05210003 BGEZ T1,+3
  6217. 00025340 SLL T2,V0,0xD
  6218. 10000010 BEQ R0,R0,+16
  6219. 24020018 ADDIU V0,R0,0018
  6220. 05410003 BGEZ T2,+3
  6221. 00025B00 SLL T3,V0,0xC
  6222. 1000000C BEQ R0,R0,+12
  6223. 24020001 ADDIU V0,R0,0001
  6224. 05610003 BGEZ T3,+3
  6225. 00026280 SLL T4,V0,0xA
  6226. 10000008 BEQ R0,R0,+8
  6227. 24020015 ADDIU V0,R0,0015
  6228. 05810003 BGEZ T4,+3
  6229. 00000000 NOP
  6230. 10000004 BEQ R0,R0,+4
  6231. 2402000B ADDIU V0,R0,000B
  6232. 10000002 BEQ R0,R0,+2
  6233. 24020029 ADDIU V0,R0,0029
  6234. 306200FF ANDI V0,V1,00FF
  6235. 8FBF0014 LW RA,0014 (SP)
  6236. 27BD0028 ADDIU SP,SP,0028
  6237. 03E00008 JR RA
  6238. 00000000 NOP
  6239.  
  6240. 801CC728 0x58A8
  6241. accepts: A0=ASIC command, A1=data
  6242. 27BDFFE8 ADDIU SP,SP,FFE8
  6243. AFBF0014 SW RA,0014 (SP)
  6244. AFA40018 SW A0,0018 (SP)
  6245. 0C073123 JAL 801CC48C
  6246. AFA5001C SW A1,001C (SP)
  6247. 10400008 BEQ V0,R0,+8
  6248. 304300FF ANDI V1,V0,00FF
  6249. 3C04801E LUI A0,801E
  6250. 24845E78 ADDIU A0,A0,5E78
  6251. 8C8E0000 LW T6,0000 (A0) # leocmd = @801E5E78
  6252. A1C30005 SB V1,0005 (T6)
  6253. 8C8F0000 LW T7,0000 (A0)
  6254. 10000019 BEQ R0,R0,+25
  6255. 91E20005 LBU V0,0005 (T7)
  6256. 3C04801E LUI A0,801E
  6257. 3C050500 LUI A1,0500
  6258. 34A50500 ORI A1,A1,0500 # hardware = 05000500
  6259. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6260. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6261. 8FA6001C LW A2,001C (SP) # value = A1 f/caller
  6262. 0C073297 JAL 801CCA5C
  6263. 00002025 OR A0,R0,R0
  6264. 10400008 BEQ V0,R0,+8
  6265. 3C04801E LUI A0,801E
  6266. 24845E78 ADDIU A0,A0,5E78
  6267. 8C990000 LW T9,0000 (A0) # leocmd = @801E5E78
  6268. 24180025 ADDIU T8,R0,0025
  6269. A3380005 SB T8,0005 (T9)
  6270. 8C880000 LW T0,0000 (A0)
  6271. 10000008 BEQ R0,R0,+8
  6272. 91020005 LBU V0,0005 (T0)
  6273. 3C04801E LUI A0,801E
  6274. 3C050500 LUI A1,0500
  6275. 34A50508 ORI A1,A1,0508
  6276. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6277. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6278. 8FA60018 LW A2,0018 (SP)
  6279. 00001025 OR V0,R0,R0
  6280. 8FBF0014 LW RA,0014 (SP)
  6281. 27BD0018 ADDIU SP,SP,0018
  6282. 03E00008 JR RA
  6283. 00000000 NOP
  6284.  
  6285. 801CC7D0 0x5950
  6286. 27BDFFE8 ADDIU SP,SP,FFE8
  6287. AFBF0014 SW RA,0014 (SP)
  6288. AFA40018 SW A0,0018 (SP)
  6289. 0C073297 JAL 801CCA5C
  6290. 24040001 ADDIU A0,R0,0001
  6291. 10400003 BEQ V0,R0,+3
  6292. 00000000 NOP
  6293. 10000008 BEQ R0,R0,+8
  6294. 24020025 ADDIU V0,R0,0025
  6295. 0C07315D JAL 801CC574
  6296. 8FA40018 LW A0,0018 (SP)
  6297. 50400004 BEQL V0,R0,+4
  6298. 00001025 OR V0,R0,R0
  6299. 10000002 BEQ R0,R0,+2
  6300. 304200FF ANDI V0,V0,00FF
  6301. 00001025 OR V0,R0,R0
  6302. 8FBF0014 LW RA,0014 (SP)
  6303. 27BD0018 ADDIU SP,SP,0018
  6304. 03E00008 JR RA
  6305. 00000000 NOP
  6306.  
  6307. 801CC820 0x59A0
  6308. accepts: A0=ASIC command, A1
  6309. 27BDFFE8 ADDIU SP,SP,FFE8
  6310. AFBF0014 SW RA,0014 (SP)
  6311. 0C0731CA JAL 801CC728
  6312. AFA40018 SW A0,0018 (SP)
  6313. 10400003 BEQ V0,R0,+3
  6314. 00000000 NOP
  6315. 10000003 BEQ R0,R0,+3
  6316. 304200FF ANDI V0,V0,00FF
  6317. 0C0731F4 JAL 801CC7D0
  6318. 8FA40018 LW A0,0018 (SP)
  6319. 8FBF0014 LW RA,0014 (SP)
  6320. 27BD0018 ADDIU SP,SP,0018
  6321. 03E00008 JR RA
  6322. 00000000 NOP
  6323.  
  6324. 801CC858 0x59D8 V0 = sensecode; send command A0, data A1 to ASIC
  6325. accepts: A0=command, A1=data
  6326. 27BDFFE8 ADDIU SP,SP,FFE8
  6327. AFBF0014 SW RA,0014 (SP)
  6328. AFA40018 SW A0,0018 (SP)
  6329. 0C073123 JAL 801CC48C
  6330. AFA5001C SW A1,001C (SP)
  6331. 2401002F ADDIU AT,R0,002F
  6332. 10410009 BEQ V0,AT,+9 # ignore medium may have changed
  6333. 304400FF ANDI A0,V0,00FF
  6334. 10400007 BEQ V0,R0,+7 # if sensecode, set in leocmd and return sensecode
  6335. 3C03801E LUI V1,801E
  6336. 24635E78 ADDIU V1,V1,5E78
  6337. 8C6E0000 LW T6,0000 (V1) # leocmd = @801E5E78
  6338. A1C40005 SB A0,0005 (T6) # leocmd[5] = sensecode
  6339. 8C6F0000 LW T7,0000 (V1)
  6340. 10000028 BEQ R0,R0,+40
  6341. 91E20005 LBU V0,0005 (T7) # return sensecode
  6342. @801CC898: send data
  6343. 3C04801E LUI A0,801E
  6344. 3C050500 LUI A1,0500
  6345. 34A50500 ORI A1,A1,0500 # target = 05000500: ASIC data
  6346. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6347. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6348. 8FA6001C LW A2,001C (SP)
  6349. 0C073297 JAL 801CCA5C
  6350. 00002025 OR A0,R0,R0
  6351. 10400008 BEQ V0,R0,+8
  6352. 3C03801E LUI V1,801E
  6353. 24635E78 ADDIU V1,V1,5E78
  6354. 8C790000 LW T9,0000 (V1) # leocmd = @801E5E78
  6355. 24180025 ADDIU T8,R0,0025
  6356. A3380005 SB T8,0005 (T9) # leocmd[5] = sensecode
  6357. 8C680000 LW T0,0000 (V1)
  6358. 10000017 BEQ R0,R0,+23 # return sensecode
  6359. 91020005 LBU V0,0005 (T0)
  6360. @801CC8DC
  6361. 3C04801E LUI A0,801E
  6362. 3C050500 LUI A1,0500
  6363. 34A50508 ORI A1,A1,0508 # target = 05000508: ASIC command
  6364. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6365. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6366. 8FA60018 LW A2,0018 (SP)
  6367. 0C073297 JAL 801CCA5C
  6368. 24040001 ADDIU A0,R0,0001
  6369. 10400003 BEQ V0,R0,+3
  6370. 00000000 NOP
  6371. 1000000B BEQ R0,R0,+11
  6372. 24020025 ADDIU V0,R0,0025
  6373. @801CC90C
  6374. 0C07315D JAL 801CC574
  6375. 8FA40018 LW A0,0018 (SP)
  6376. 2401002F ADDIU AT,R0,002F
  6377. 50410006 BEQL V0,AT,+6 # ignore medium may have changed
  6378. 00001025 OR V0,R0,R0
  6379. 50400004 BEQL V0,R0,+4
  6380. 00001025 OR V0,R0,R0
  6381. 10000002 BEQ R0,R0,+2 # return sensecode if sensecode else 0
  6382. 304200FF ANDI V0,V0,00FF
  6383. 00001025 OR V0,R0,R0
  6384. 8FBF0014 LW RA,0014 (SP)
  6385. 27BD0018 ADDIU SP,SP,0018
  6386. 03E00008 JR RA
  6387. 00000000 NOP
  6388.  
  6389. 801CC944 0x5AC4 detect index from disk; call 801CC820(0xE0001, 0)
  6390. 27BDFFE8 ADDIU SP,SP,FFE8
  6391. AFBF0014 SW RA,0014 (SP)
  6392. 3C04000E LUI A0,000E
  6393. 34840001 ORI A0,A0,0001
  6394. 0C073208 JAL 801CC820
  6395. 00002825 OR A1,R0,R0
  6396. 8FBF0014 LW RA,0014 (SP)
  6397. 27BD0018 ADDIU SP,SP,0018
  6398. 03E00008 JR RA
  6399. 00000000 NOP
  6400.  
  6401. 801CC96C 0x5AEC call 801CC728(0x30001, 0)
  6402. 27BDFFE8 ADDIU SP,SP,FFE8
  6403. AFBF0014 SW RA,0014 (SP)
  6404. 3C040003 LUI A0,0003
  6405. 34840001 ORI A0,A0,0001
  6406. 0C0731CA JAL 801CC728
  6407. 00002825 OR A1,R0,R0
  6408. 8FBF0014 LW RA,0014 (SP)
  6409. 27BD0018 ADDIU SP,SP,0018
  6410. 03E00008 JR RA
  6411. 00000000 NOP
  6412.  
  6413. 801CC994 0x5B14 call 801CC820(0x30001, 0)
  6414. 27BDFFE8 ADDIU SP,SP,FFE8
  6415. AFBF0014 SW RA,0014 (SP)
  6416. 3C040003 LUI A0,0003
  6417. 34840001 ORI A0,A0,0001
  6418. 0C073208 JAL 801CC820
  6419. 00002825 OR A1,R0,R0
  6420. 8FBF0014 LW RA,0014 (SP)
  6421. 27BD0018 ADDIU SP,SP,0018
  6422. 03E00008 JR RA
  6423. 00000000 NOP
  6424.  
  6425. 801CC9BC 0x5B3C send seek read or write (A0) request for current location
  6426. accepts: A0=mode (0:read, 1:write)
  6427. 3C02801E LUI V0,801E
  6428. 24425E90 ADDIU V0,V0,5E90
  6429. 904F0007 LBU T7,0007 (V0) # head = 801E5E90[7]
  6430. 94590002 LHU T9,0002 (V0) # 801E5E90[2:4]
  6431. 27BDFFE8 ADDIU SP,SP,FFE8
  6432. 000FC300 SLL T8,T7,0xC
  6433. 03192821 ADDU A1,T8,T9
  6434. 308EFFFF ANDI T6,A0,FFFF
  6435. 00054400 SLL T0,A1,0x10
  6436. AFBF0014 SW RA,0014 (SP)
  6437. AFA40018 SW A0,0018 (SP)
  6438. 15C00006 BNE T6,R0,+6 # branch if write
  6439. 01002825 OR A1,T0,R0
  6440. 3C040001 LUI A0,0001
  6441. 0C0731CA JAL 801CC728
  6442. 34840001 ORI A0,A0,0001 # cmd = 0x10001: seek (read)
  6443. 10000005 BEQ R0,R0,+5
  6444. 8FBF0014 LW RA,0014 (SP)
  6445. 3C040002 LUI A0,0002
  6446. 0C0731CA JAL 801CC728
  6447. 34840001 ORI A0,A0,0001 # cmd = 0x20001: seek (write)
  6448. 8FBF0014 LW RA,0014 (SP)
  6449. 27BD0018 ADDIU SP,SP,0018
  6450. 03E00008 JR RA
  6451. 00000000 NOP
  6452.  
  6453. 801CCA20 0x5BA0
  6454. 27BDFFE8 ADDIU SP,SP,FFE8
  6455. AFBF0014 SW RA,0014 (SP)
  6456. 0C07326F JAL 801CC9BC # send seek read or write (A0) request for current location
  6457. 00002025 OR A0,R0,R0 # read
  6458. 10400003 BEQ V0,R0,+3
  6459. 304300FF ANDI V1,V0,00FF
  6460. 10000004 BEQ R0,R0,+4
  6461. 00601025 OR V0,V1,R0
  6462. 3C040001 LUI A0,0001
  6463. 0C0731F4 JAL 801CC7D0
  6464. 34840001 ORI A0,A0,0001
  6465. 8FBF0014 LW RA,0014 (SP)
  6466. 27BD0018 ADDIU SP,SP,0018
  6467. 03E00008 JR RA
  6468. 00000000 NOP
  6469.  
  6470. 801CCA5C 0x5BDC
  6471. accepts: A0=read or wait (0:read, 1:wait)
  6472. 27BDFFE0 ADDIU SP,SP,FFE0
  6473. 00803025 OR A2,A0,R0
  6474. AFBF0014 SW RA,0014 (SP)
  6475. 3C04801E LUI A0,801E
  6476. 24845E00 ADDIU A0,A0,5E00 # queue = 801E5E00: cart interrupt callback
  6477. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  6478. 27A5001C ADDIU A1,SP,001C
  6479. 14400008 BNE V0,R0,+8
  6480. 8FAE001C LW T6,001C (SP)
  6481. 3C01000A LUI AT,000A
  6482. 55C10006 BNEL T6,AT,+6 # if msg == 0xA0000: reset drive
  6483. 00001025 OR V0,R0,R0
  6484. 0C073300 JAL 801CCC00 # leo reset
  6485. 00000000 NOP
  6486. 10000002 BEQ R0,R0,+2 # return 0xFF
  6487. 240200FF ADDIU V0,R0,00FF
  6488. 00001025 OR V0,R0,R0 # return 0
  6489. 8FBF0014 LW RA,0014 (SP)
  6490. 27BD0020 ADDIU SP,SP,0020
  6491. 03E00008 JR RA
  6492. 00000000 NOP
  6493.  
  6494. 801CCAB0 0x5C30
  6495. 3C02801E LUI V0,801E
  6496. 8C425EE0 LW V0,5EE0 (V0)
  6497. 2401000C ADDIU AT,R0,000C
  6498. 10410002 BEQ V0,AT,+2
  6499. 24010008 ADDIU AT,R0,0008
  6500. 1441001B BNE V0,AT,+27
  6501. 2C810004 SLTIU AT,A0,0004
  6502. 14200009 BNE AT,R0,+9
  6503. 248EFFDB ADDIU T6,A0,FFDB
  6504. 2DC1000D SLTIU AT,T6,000D
  6505. 10200036 BEQ AT,R0,+54
  6506. 000E7080 SLL T6,T6,0x2
  6507. 3C01801E LUI AT,801E
  6508. 002E0821 ADDU AT,AT,T6
  6509. 8C2E9480 LW T6,9480 (AT)
  6510. 01C00008 JR T6
  6511. 00000000 NOP
  6512. @801CCAF4
  6513. 24010002 ADDIU AT,R0,0002
  6514. 1081000A BEQ A0,AT,+10
  6515. 24010003 ADDIU AT,R0,0003
  6516. 10810008 BEQ A0,AT,+8
  6517. 00000000 NOP
  6518. 1000002B BEQ R0,R0,+43
  6519. 00001025 OR V0,R0,R0
  6520. @801CCB10
  6521. 3C02801E LUI V0,801E
  6522. 24425F74 ADDIU V0,V0,5F74
  6523. 8C4F0000 LW T7,0000 (V0)
  6524. 35F80002 ORI T8,T7,0002
  6525. AC580000 SW T8,0000 (V0)
  6526. 3C01801E LUI AT,801E
  6527. A0205E84 SB R0,5E84 (AT)
  6528. 03E00008 JR RA
  6529. 2402FFFF ADDIU V0,R0,FFFF
  6530.  
  6531. 801CCB34 0x5CB4
  6532. 2C810004 SLTIU AT,A0,0004
  6533. 14200009 BNE AT,R0,+9
  6534. 2499FFDB ADDIU T9,A0,FFDB
  6535. 2F21000D SLTIU AT,T9,000D
  6536. 1020001B BEQ AT,R0,+27
  6537. 0019C880 SLL T9,T9,0x2
  6538. 3C01801E LUI AT,801E
  6539. 00390821 ADDU AT,AT,T9
  6540. 8C3994B4 LW T9,94B4 (AT) # call 801D94B4[A0 - 0x25]()
  6541. 03200008 JR T9
  6542. 00000000 NOP
  6543. @801CCB60
  6544. 24010002 ADDIU AT,R0,0002
  6545. 1081000F BEQ A0,AT,+15
  6546. 24010003 ADDIU AT,R0,0003
  6547. 1081000D BEQ A0,AT,+13
  6548. 00000000 NOP
  6549. 10000010 BEQ R0,R0,+16
  6550. 00001025 OR V0,R0,R0
  6551. @801CCB7C
  6552. 3C02801E LUI V0,801E
  6553. 24425F74 ADDIU V0,V0,5F74
  6554. 8C480000 LW T0,0000 (V0)
  6555. 35090002 ORI T1,T0,0002
  6556. AC490000 SW T1,0000 (V0)
  6557. 3C02801E LUI V0,801E
  6558. 24425F74 ADDIU V0,V0,5F74
  6559. 8C4A0000 LW T2,0000 (V0)
  6560. 354B0001 ORI T3,T2,0001
  6561. AC4B0000 SW T3,0000 (V0)
  6562. 3C01801E LUI AT,801E
  6563. A0205E84 SB R0,5E84 (AT)
  6564. 03E00008 JR RA
  6565. 2402FFFF ADDIU V0,R0,FFFF
  6566. @801CCBB4
  6567. 00001025 OR V0,R0,R0
  6568. 03E00008 JR RA
  6569. 00000000 NOP
  6570.  
  6571. 801CCBC0 0x5D40
  6572. 3C02801E LUI V0,801E
  6573. 8C425F70 LW V0,5F70 (V0)
  6574. 00001825 OR V1,R0,R0
  6575. 000271C0 SLL T6,V0,0x7
  6576. 05C00002 BLTZ T6,+2
  6577. 00027B00 SLL T7,V0,0xC
  6578. 24030001 ADDIU V1,R0,0001
  6579. 05E10003 BGEZ T7,+3
  6580. 000242C0 SLL T0,V0,0xB
  6581. 34780002 ORI T8,V1,0002
  6582. 330300FF ANDI V1,T8,00FF
  6583. 05010002 BGEZ T0,+2
  6584. 34690004 ORI T1,V1,0004
  6585. 312300FF ANDI V1,T1,00FF
  6586. 03E00008 JR RA
  6587. 00601025 OR V0,V1,R0
  6588.  
  6589. 801CCC00 0x5D80 leo reset
  6590. 27BDFFE8 ADDIU SP,SP,FFE8
  6591. AFBF0014 SW RA,0014 (SP)
  6592. 3C04801E LUI A0,801E
  6593. 3C050500 LUI A1,0500
  6594. 34A50520 ORI A1,A1,0520
  6595. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  6596. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  6597. 3C06AAAA LUI A2,AAAA
  6598. 8FBF0014 LW RA,0014 (SP)
  6599. 27BD0018 ADDIU SP,SP,0018
  6600. 03E00008 JR RA
  6601. 00000000 NOP
  6602.  
  6603. 801CCC30 0x5DB0 V0 = @801E5F74
  6604. 3C02801E LUI V0,801E
  6605. 03E00008 JR RA
  6606. 8C425F74 LW V0,5F74 (V0)
  6607.  
  6608. 801CCC3C 0x5DBC V0 = sensecode for flags @801E5F74
  6609. 3C02801E LUI V0,801E
  6610. 8C425F74 LW V0,5F74 (V0)
  6611. 304E0002 ANDI T6,V0,0002
  6612. 11C00003 BEQ T6,R0,+3
  6613. 304F0001 ANDI T7,V0,0001
  6614. 03E00008 JR RA
  6615. 2402002B ADDIU V0,R0,002B # if @801E5F74 & 2: return sensecode 0x2B (power on or device reset)
  6616. 11E00003 BEQ T7,R0,+3
  6617. 00001025 OR V0,R0,R0
  6618. 03E00008 JR RA
  6619. 2402002F ADDIU V0,R0,002F # if @801E5F74 & 1: return sensecode 0x2F (medium may have changed)
  6620. 03E00008 JR RA
  6621. 00000000 NOP
  6622.  
  6623. 801CCC70 0x5DF0 801E5F74 &= ~2
  6624. 3C02801E LUI V0,801E
  6625. 24425F74 ADDIU V0,V0,5F74
  6626. 8C4E0000 LW T6,0000 (V0)
  6627. 2401FFFD ADDIU AT,R0,FFFD
  6628. 01C17824 AND T7,T6,AT
  6629. 03E00008 JR RA
  6630. AC4F0000 SW T7,0000 (V0)
  6631.  
  6632. 801CCC8C 0x5E0C 801E5F74 &= ~1; diskID read successfully
  6633. 3C02801E LUI V0,801E
  6634. 24425F74 ADDIU V0,V0,5F74
  6635. 8C4E0000 LW T6,0000 (V0)
  6636. 2401FFFE ADDIU AT,R0,FFFE
  6637. 01C17824 AND T7,T6,AT
  6638. 03E00008 JR RA
  6639. AC4F0000 SW T7,0000 (V0)
  6640.  
  6641. 801CCCA8 0x5E28 801E5F74 |= 1; status error during diskID read
  6642. 3C02801E LUI V0,801E
  6643. 24425F74 ADDIU V0,V0,5F74
  6644. 8C4E0000 LW T6,0000 (V0)
  6645. 35CF0001 ORI T7,T6,0001
  6646. 03E00008 JR RA
  6647. AC4F0000 SW T7,0000 (V0)
  6648.  
  6649. 801CCCC0 0x5E40 801E5F74 = 1
  6650. 240E0001 ADDIU T6,R0,0001
  6651. 3C01801E LUI AT,801E
  6652. 03E00008 JR RA
  6653. AC2E5F74 SW T6,5F74 (AT)
  6654.  
  6655. 801CCCD0 0x5E50 send start/stop (A1) leocmd A0, informing queue A2
  6656. accepts: A0=p->leocmd, A1=mode (0:normal, 1:standby, 2:normal, 4:brake on), A2=p->queue or None
  6657. 3C0F801E LUI T7,801E
  6658. 8DEF8DF0 LW T7,8DF0 (T7) # @801D8DF0: True if leo threads started
  6659. 27BDFFE8 ADDIU SP,SP,FFE8
  6660. AFA5001C SW A1,001C (SP)
  6661. 30AE00FF ANDI T6,A1,00FF
  6662. 01C02825 OR A1,T6,R0
  6663. 15E00003 BNE T7,R0,+3
  6664. AFBF0014 SW RA,0014 (SP)
  6665. 10000020 BEQ R0,R0,+32
  6666. 2402FFFF ADDIU V0,R0,FFFF
  6667. @801CCCF8
  6668. 24180008 ADDIU T8,R0,0008
  6669. A0980000 SB T8,0000 (A0) # leocmd[0] = 8: start/stop
  6670. 10A0000B BEQ A1,R0,+11
  6671. A0800001 SB R0,0001 (A0) # if mode == 0: ctrlflgs = 0
  6672. 24010001 ADDIU AT,R0,0001
  6673. 10A1000B BEQ A1,AT,+11 # if mode == 1: ctrlflgs = 2 (standby mode)
  6674. 24080002 ADDIU T0,R0,0002
  6675. 24010002 ADDIU AT,R0,0002
  6676. 10A1000A BEQ A1,AT,+10 # if mode == 2: ctrlflgs = 0
  6677. 24010004 ADDIU AT,R0,0004
  6678. 10A1000A BEQ A1,AT,+10 # if mode == 1: ctrlflgs = 4 (brake on)
  6679. 24090004 ADDIU T1,R0,0004
  6680. 10000009 BEQ R0,R0,+9
  6681. 00000000 NOP
  6682. @801CCD30
  6683. 24190001 ADDIU T9,R0,0001
  6684. 10000006 BEQ R0,R0,+6
  6685. A0990002 SB T9,0002 (A0)
  6686. 10000004 BEQ R0,R0,+4
  6687. A0880002 SB T0,0002 (A0)
  6688. 10000002 BEQ R0,R0,+2
  6689. A0800002 SB R0,0002 (A0)
  6690. A0890002 SB T1,0002 (A0)
  6691. 10C00005 BEQ A2,R0,+5
  6692. A0800003 SB R0,0003 (A0)
  6693. 908A0002 LBU T2,0002 (A0)
  6694. AC860008 SW A2,0008 (A0)
  6695. 354B0080 ORI T3,T2,0080
  6696. A08B0002 SB T3,0002 (A0)
  6697. 0C072A69 JAL 801CA9A4 # send leocmd A0
  6698. 00000000 NOP
  6699. 00001025 OR V0,R0,R0
  6700. 8FBF0014 LW RA,0014 (SP)
  6701. 27BD0018 ADDIU SP,SP,0018
  6702. 03E00008 JR RA
  6703. 00000000 NOP
  6704.  
  6705. 00000000 NOP
  6706. 00000000 NOP
  6707. 00000000 NOP
  6708.  
  6709. 801CCD90 0x5F10
  6710. 3C0E801E LUI T6,801E
  6711. 91CE67BC LBU T6,67BC (T6)
  6712. 27BDFFE8 ADDIU SP,SP,FFE8
  6713. AFBF0014 SW RA,0014 (SP)
  6714. 2DC10005 SLTIU AT,T6,0005
  6715. 10200016 BEQ AT,R0,+22
  6716. 000E7080 SLL T6,T6,0x2
  6717. 3C01801E LUI AT,801E
  6718. 002E0821 ADDU AT,AT,T6
  6719. 8C2E9AD0 LW T6,9AD0 (AT)
  6720. 01C00008 JR T6
  6721. 00000000 NOP
  6722. @801CCDC0
  6723. 0C073387 JAL 801CCE1C
  6724. 00000000 NOP
  6725. 10000010 BEQ R0,R0,+16
  6726. 00001025 OR V0,R0,R0
  6727. @801CCDD0
  6728. 0C0733BC JAL 801CCEF0
  6729. 00000000 NOP
  6730. 1000000C BEQ R0,R0,+12
  6731. 00001025 OR V0,R0,R0
  6732. @801CCDE0
  6733. 0C07345C JAL 801CD170
  6734. 00000000 NOP
  6735. 10000008 BEQ R0,R0,+8
  6736. 00001025 OR V0,R0,R0
  6737. @801CCDF0
  6738. 0C073556 JAL 801CD558
  6739. 00000000 NOP
  6740. 10000004 BEQ R0,R0,+4
  6741. 00001025 OR V0,R0,R0
  6742. @801CCE00
  6743. 10000002 BEQ R0,R0,+2
  6744. 3402FFFF ORI V0,R0,FFFF
  6745. @801CCE08
  6746. 00001025 OR V0,R0,R0
  6747. 8FBF0014 LW RA,0014 (SP)
  6748. 27BD0018 ADDIU SP,SP,0018
  6749. 03E00008 JR RA
  6750. 00000000 NOP
  6751.  
  6752. 801CCE1C 0x5F9C
  6753. 3C06801E LUI A2,801E
  6754. 24C667B0 ADDIU A2,A2,67B0
  6755. 90C20008 LBU V0,0008 (A2)
  6756. 28410055 SLTI AT,V0,0055
  6757. 1020002E BEQ AT,R0,+46
  6758. 00000000 NOP
  6759. 90C3000D LBU V1,000D (A2)
  6760. 244E0001 ADDIU T6,V0,0001
  6761. 8CD80000 LW T8,0000 (A2)
  6762. 01C30019 MULTU T6,V1
  6763. 30620003 ANDI V0,V1,0003
  6764. 00021023 SUBU V0,R0,V0
  6765. 8CC50004 LW A1,0004 (A2)
  6766. 00434821 ADDU T1,V0,V1
  6767. 00007812 MFLO T7
  6768. 01F82021 ADDU A0,T7,T8
  6769. 1040000C BEQ V0,R0,+12
  6770. 24A6FFFC ADDIU A2,A1,FFFC
  6771. 2488FFFF ADDIU T0,A0,FFFF
  6772. 91190000 LBU T9,0000 (T0)
  6773. 90CA0000 LBU T2,0000 (A2)
  6774. 2463FFFF ADDIU V1,V1,FFFF
  6775. 01002025 OR A0,T0,R0
  6776. 032A5826 XOR T3,T9,T2
  6777. A10B0000 SB T3,0000 (T0)
  6778. 1523FFF7 BNE T1,V1,-9
  6779. 00C02825 OR A1,A2,R0
  6780. 10600017 BEQ V1,R0,+23
  6781. 00000000 NOP
  6782. 908CFFFF LBU T4,FFFF (A0)
  6783. 90ADFFFC LBU T5,FFFC (A1)
  6784. 00A03025 OR A2,A1,R0
  6785. 00804025 OR T0,A0,R0
  6786. 018D7026 XOR T6,T4,T5
  6787. A08EFFFF SB T6,FFFF (A0)
  6788. 910FFFFE LBU T7,FFFE (T0)
  6789. 90D8FFF8 LBU T8,FFF8 (A2)
  6790. 910AFFFD LBU T2,FFFD (T0)
  6791. 2504FFFC ADDIU A0,T0,FFFC
  6792. 01F8C826 XOR T9,T7,T8
  6793. A119FFFE SB T9,FFFE (T0)
  6794. 90CBFFF4 LBU T3,FFF4 (A2)
  6795. 24C5FFF0 ADDIU A1,A2,FFF0
  6796. 2463FFFC ADDIU V1,V1,FFFC
  6797. 014B6026 XOR T4,T2,T3
  6798. A10CFFFD SB T4,FFFD (T0)
  6799. 908D0000 LBU T5,0000 (A0)
  6800. 90AE0000 LBU T6,0000 (A1)
  6801. 01AE7826 XOR T7,T5,T6
  6802. 1460FFEB BNE V1,R0,-21
  6803. A08F0000 SB T7,0000 (A0)
  6804. 03E00008 JR RA
  6805. 00000000 NOP
  6806.  
  6807. 801CCEF0 0x6070
  6808. 3C06801E LUI A2,801E
  6809. 24C667B0 ADDIU A2,A2,67B0
  6810. 90CE0008 LBU T6,0008 (A2)
  6811. 90CF0009 LBU T7,0009 (A2)
  6812. 24070058 ADDIU A3,R0,0058
  6813. 3C0B801E LUI T3,801E
  6814. 256B96D0 ADDIU T3,T3,96D0
  6815. 00EE1023 SUBU V0,A3,T6
  6816. 00EF1823 SUBU V1,A3,T7
  6817. 01635021 ADDU T2,T3,V1
  6818. 0162C821 ADDU T9,T3,V0
  6819. 932C0000 LBU T4,0000 (T9)
  6820. 91580000 LBU T8,0000 (T2)
  6821. 27BDFFA0 ADDIU SP,SP,FFA0
  6822. AFBF001C SW RA,001C (SP)
  6823. AFB00018 SW S0,0018 (SP)
  6824. AFAA0024 SW T2,0024 (SP)
  6825. 24040001 ADDIU A0,R0,0001
  6826. 0C07378E JAL 801CDE38
  6827. 030C2826 XOR A1,T8,T4
  6828. 3C06801E LUI A2,801E
  6829. 24C667B0 ADDIU A2,A2,67B0
  6830. 90C50009 LBU A1,0009 (A2)
  6831. 3C08801E LUI T0,801E
  6832. 250898D0 ADDIU T0,T0,98D0
  6833. 01026821 ADDU T5,T0,V0
  6834. 3C0B801E LUI T3,801E
  6835. 28A10055 SLTI AT,A1,0055
  6836. 256B96D0 ADDIU T3,T3,96D0
  6837. 91B00000 LBU S0,0000 (T5)
  6838. 8FAA0024 LW T2,0024 (SP)
  6839. 14200009 BNE AT,R0,+9
  6840. 90C9000D LBU T1,000D (A2)
  6841. 90C20008 LBU V0,0008 (A2)
  6842. 3C04801E LUI A0,801E
  6843. 24846068 ADDIU A0,A0,6068
  6844. 28410055 SLTI AT,V0,0055
  6845. 50200076 BEQL AT,R0,+118
  6846. 8FBF001C LW RA,001C (SP)
  6847. 10000008 BEQ R0,R0,+8
  6848. 8CC30000 LW V1,0000 (A2)
  6849. 24AE0001 ADDIU T6,A1,0001
  6850. 01C90019 MULTU T6,T1
  6851. 8CC30000 LW V1,0000 (A2)
  6852. 90C20008 LBU V0,0008 (A2)
  6853. 00007812 MFLO T7
  6854. 01E32021 ADDU A0,T7,V1
  6855. 00000000 NOP
  6856. 24590001 ADDIU T9,V0,0001
  6857. 03290019 MULTU T9,T1
  6858. 31220001 ANDI V0,T1,0001
  6859. 8CC50004 LW A1,0004 (A2)
  6860. 0000C012 MFLO T8
  6861. 03033821 ADDU A3,T8,V1
  6862. 50020024 BEQL R0,V0,+36
  6863. 90A2FFFC LBU V0,FFFC (A1)
  6864. 90A2FFFC LBU V0,FFFC (A1)
  6865. 24A5FFFC ADDIU A1,A1,FFFC
  6866. 24E7FFFF ADDIU A3,A3,FFFF
  6867. 10400008 BEQ V0,R0,+8
  6868. 00403025 OR A2,V0,R0
  6869. 01026821 ADDU T5,T0,V0
  6870. 91AE0000 LBU T6,0000 (T5)
  6871. 90AC0001 LBU T4,0001 (A1)
  6872. 014E7821 ADDU T7,T2,T6
  6873. 91F90000 LBU T9,0000 (T7)
  6874. 10000002 BEQ R0,R0,+2
  6875. 01991826 XOR V1,T4,T9
  6876. 90A30001 LBU V1,0001 (A1)
  6877. 1060000E BEQ V1,R0,+14
  6878. 2484FFFF ADDIU A0,A0,FFFF
  6879. 0103C021 ADDU T8,T0,V1
  6880. 930D0000 LBU T5,0000 (T8)
  6881. 90EC0000 LBU T4,0000 (A3)
  6882. 016D7021 ADDU T6,T3,T5
  6883. 01D07821 ADDU T7,T6,S0
  6884. 91E20000 LBU V0,0000 (T7)
  6885. 0182C826 XOR T9,T4,V0
  6886. A0F90000 SB T9,0000 (A3)
  6887. 90980000 LBU T8,0000 (A0)
  6888. 00466826 XOR T5,V0,A2
  6889. 030D7026 XOR T6,T8,T5
  6890. 10000004 BEQ R0,R0,+4
  6891. A08E0000 SB T6,0000 (A0)
  6892. 908F0000 LBU T7,0000 (A0)
  6893. 01E66026 XOR T4,T7,A2
  6894. A08C0000 SB T4,0000 (A0)
  6895. 2529FFFF ADDIU T1,T1,FFFF
  6896. 51200043 BEQL T1,R0,+67
  6897. 8FBF001C LW RA,001C (SP)
  6898. 90A2FFFC LBU V0,FFFC (A1)
  6899. 24A5FFFC ADDIU A1,A1,FFFC
  6900. 24E7FFFF ADDIU A3,A3,FFFF
  6901. 10400008 BEQ V0,R0,+8
  6902. 00403025 OR A2,V0,R0
  6903. 0102C021 ADDU T8,T0,V0
  6904. 930D0000 LBU T5,0000 (T8)
  6905. 90B90001 LBU T9,0001 (A1)
  6906. 014D7021 ADDU T6,T2,T5
  6907. 91CF0000 LBU T7,0000 (T6)
  6908. 10000002 BEQ R0,R0,+2
  6909. 032F1826 XOR V1,T9,T7
  6910. 90A30001 LBU V1,0001 (A1)
  6911. 1060000E BEQ V1,R0,+14
  6912. 2484FFFF ADDIU A0,A0,FFFF
  6913. 01036021 ADDU T4,T0,V1
  6914. 91980000 LBU T8,0000 (T4)
  6915. 90F90000 LBU T9,0000 (A3)
  6916. 01786821 ADDU T5,T3,T8
  6917. 01B07021 ADDU T6,T5,S0
  6918. 91C20000 LBU V0,0000 (T6)
  6919. 03227826 XOR T7,T9,V0
  6920. A0EF0000 SB T7,0000 (A3)
  6921. 908C0000 LBU T4,0000 (A0)
  6922. 0046C026 XOR T8,V0,A2
  6923. 01986826 XOR T5,T4,T8
  6924. 10000004 BEQ R0,R0,+4
  6925. A08D0000 SB T5,0000 (A0)
  6926. 908E0000 LBU T6,0000 (A0)
  6927. 01C6C826 XOR T9,T6,A2
  6928. A0990000 SB T9,0000 (A0)
  6929. 90A2FFFC LBU V0,FFFC (A1)
  6930. 24A5FFFC ADDIU A1,A1,FFFC
  6931. 24E7FFFF ADDIU A3,A3,FFFF
  6932. 10400008 BEQ V0,R0,+8
  6933. 00403025 OR A2,V0,R0
  6934. 01026021 ADDU T4,T0,V0
  6935. 91980000 LBU T8,0000 (T4)
  6936. 90AF0001 LBU T7,0001 (A1)
  6937. 01586821 ADDU T5,T2,T8
  6938. 91AE0000 LBU T6,0000 (T5)
  6939. 10000002 BEQ R0,R0,+2
  6940. 01EE1826 XOR V1,T7,T6
  6941. 90A30001 LBU V1,0001 (A1)
  6942. 1060000E BEQ V1,R0,+14
  6943. 2484FFFF ADDIU A0,A0,FFFF
  6944. 0103C821 ADDU T9,T0,V1
  6945. 932C0000 LBU T4,0000 (T9)
  6946. 90EF0000 LBU T7,0000 (A3)
  6947. 016CC021 ADDU T8,T3,T4
  6948. 03106821 ADDU T5,T8,S0
  6949. 91A20000 LBU V0,0000 (T5)
  6950. 01E27026 XOR T6,T7,V0
  6951. A0EE0000 SB T6,0000 (A3)
  6952. 90990000 LBU T9,0000 (A0)
  6953. 00466026 XOR T4,V0,A2
  6954. 032CC026 XOR T8,T9,T4
  6955. 10000004 BEQ R0,R0,+4
  6956. A0980000 SB T8,0000 (A0)
  6957. 908D0000 LBU T5,0000 (A0)
  6958. 01A67826 XOR T7,T5,A2
  6959. A08F0000 SB T7,0000 (A0)
  6960. 2529FFFE ADDIU T1,T1,FFFE
  6961. 5520FFC1 BNEL T1,R0,-63
  6962. 90A2FFFC LBU V0,FFFC (A1)
  6963. 8FBF001C LW RA,001C (SP)
  6964. 8FB00018 LW S0,0018 (SP)
  6965. 27BD0060 ADDIU SP,SP,0060
  6966. 03E00008 JR RA
  6967. 00000000 NOP
  6968.  
  6969. 801CD170 0x62F0
  6970. 3C07801E LUI A3,801E
  6971. 24E767B0 ADDIU A3,A3,67B0
  6972. 27BDFF68 ADDIU SP,SP,FF68
  6973. 90EE0008 LBU T6,0008 (A3)
  6974. 90EF0009 LBU T7,0009 (A3)
  6975. 90F8000A LBU T8,000A (A3)
  6976. AFB00014 SW S0,0014 (SP)
  6977. 24060058 ADDIU A2,R0,0058
  6978. 3C10801E LUI S0,801E
  6979. 261096D0 ADDIU S0,S0,96D0
  6980. 00CE1023 SUBU V0,A2,T6
  6981. 00CF1823 SUBU V1,A2,T7
  6982. 00D82023 SUBU A0,A2,T8
  6983. 02047821 ADDU T7,S0,A0
  6984. 91E40000 LBU A0,0000 (T7)
  6985. 0202C821 ADDU T9,S0,V0
  6986. 02037021 ADDU T6,S0,V1
  6987. 93220000 LBU V0,0000 (T9)
  6988. 91C30000 LBU V1,0000 (T6)
  6989. AFBF0034 SW RA,0034 (SP)
  6990. AFB70030 SW S7,0030 (SP)
  6991. AFB6002C SW S6,002C (SP)
  6992. AFB50028 SW S5,0028 (SP)
  6993. AFB40024 SW S4,0024 (SP)
  6994. AFB30020 SW S3,0020 (SP)
  6995. AFB2001C SW S2,001C (SP)
  6996. AFB10018 SW S1,0018 (SP)
  6997. AFA4006C SW A0,006C (SP)
  6998. 00802825 OR A1,A0,R0
  6999. AFA20074 SW V0,0074 (SP)
  7000. 0C07377D JAL 801CDDF4
  7001. AFA30070 SW V1,0070 (SP)
  7002. 8FA40070 LW A0,0070 (SP)
  7003. 00408825 OR S1,V0,R0
  7004. 0C07377D JAL 801CDDF4
  7005. 00802825 OR A1,A0,R0
  7006. 8FA40074 LW A0,0074 (SP)
  7007. 00409025 OR S2,V0,R0
  7008. 0C07377D JAL 801CDDF4
  7009. 00802825 OR A1,A0,R0
  7010. 00409825 OR S3,V0,R0
  7011. 0232A826 XOR S5,S1,S2
  7012. 0222B026 XOR S6,S1,V0
  7013. 0242B826 XOR S7,S2,V0
  7014. 8FA40070 LW A0,0070 (SP)
  7015. 0C07377D JAL 801CDDF4
  7016. 02202825 OR A1,S1,R0
  7017. AFA2003C SW V0,003C (SP)
  7018. 8FA4006C LW A0,006C (SP)
  7019. 0C07377D JAL 801CDDF4
  7020. 02402825 OR A1,S2,R0
  7021. 8FB8003C LW T8,003C (SP)
  7022. 8FA4006C LW A0,006C (SP)
  7023. 02602825 OR A1,S3,R0
  7024. 0058F826 XOR RA,V0,T8
  7025. AFBF0050 SW RA,0050 (SP)
  7026. 0C07377D JAL 801CDDF4
  7027. 00000000 NOP
  7028. AFA2003C SW V0,003C (SP)
  7029. 8FA40074 LW A0,0074 (SP)
  7030. 0C07377D JAL 801CDDF4
  7031. 02202825 OR A1,S1,R0
  7032. 8FB9003C LW T9,003C (SP)
  7033. 8FA40070 LW A0,0070 (SP)
  7034. 02602825 OR A1,S3,R0
  7035. 0C07377D JAL 801CDDF4
  7036. 0059A026 XOR S4,V0,T9
  7037. AFA2003C SW V0,003C (SP)
  7038. 8FA40074 LW A0,0074 (SP)
  7039. 0C07377D JAL 801CDDF4
  7040. 02402825 OR A1,S2,R0
  7041. 8FBF0050 LW RA,0050 (SP)
  7042. 8FAE003C LW T6,003C (SP)
  7043. 24040001 ADDIU A0,R0,0001
  7044. 03F47826 XOR T7,RA,S4
  7045. 004E1826 XOR V1,V0,T6
  7046. 01E32826 XOR A1,T7,V1
  7047. 0C07378E JAL 801CDE38
  7048. AFA30048 SW V1,0048 (SP)
  7049. 8FBF0050 LW RA,0050 (SP)
  7050. 3C07801E LUI A3,801E
  7051. 8FAE0070 LW T6,0070 (SP)
  7052. 8FAF006C LW T7,006C (SP)
  7053. 24E798D0 ADDIU A3,A3,98D0
  7054. 00FFC021 ADDU T8,A3,RA
  7055. 931F0000 LBU RA,0000 (T8)
  7056. 00F5C821 ADDU T9,A3,S5
  7057. 93350000 LBU S5,0000 (T9)
  7058. 01CFC026 XOR T8,T6,T7
  7059. 00F8C821 ADDU T9,A3,T8
  7060. 00F6C021 ADDU T8,A3,S6
  7061. 93160000 LBU S6,0000 (T8)
  7062. 8FB80074 LW T8,0074 (SP)
  7063. 93310000 LBU S1,0000 (T9)
  7064. 00F4C821 ADDU T9,A3,S4
  7065. 8FAD0048 LW T5,0048 (SP)
  7066. 93340000 LBU S4,0000 (T9)
  7067. 01F8C826 XOR T9,T7,T8
  7068. 3C04801E LUI A0,801E
  7069. 00F97821 ADDU T7,A3,T9
  7070. 248467B0 ADDIU A0,A0,67B0
  7071. 00EDC821 ADDU T9,A3,T5
  7072. 9083000A LBU V1,000A (A0)
  7073. 91F20000 LBU S2,0000 (T7)
  7074. 932D0000 LBU T5,0000 (T9)
  7075. 00F77821 ADDU T7,A3,S7
  7076. 030EC826 XOR T9,T8,T6
  7077. 91F70000 LBU S7,0000 (T7)
  7078. 00F97821 ADDU T7,A3,T9
  7079. 00E2C021 ADDU T8,A3,V0
  7080. 28610055 SLTI AT,V1,0055
  7081. 91F30000 LBU S3,0000 (T7)
  7082. 930C0000 LBU T4,0000 (T8)
  7083. 14200014 BNE AT,R0,+20
  7084. 908B000D LBU T3,000D (A0)
  7085. 3C04801E LUI A0,801E
  7086. 908467B9 LBU A0,67B9 (A0)
  7087. 3C02801E LUI V0,801E
  7088. 24426068 ADDIU V0,V0,6068
  7089. 28810055 SLTI AT,A0,0055
  7090. 10200004 BEQ AT,R0,+4
  7091. 00404825 OR T1,V0,R0
  7092. 3C02801E LUI V0,801E
  7093. 10000013 BEQ R0,R0,+19
  7094. 8C4267B0 LW V0,67B0 (V0)
  7095. 3C03801E LUI V1,801E
  7096. 906367B8 LBU V1,67B8 (V1)
  7097. 00405025 OR T2,V0,R0
  7098. 3C02801E LUI V0,801E
  7099. 28610055 SLTI AT,V1,0055
  7100. 5020006D BEQL AT,R0,+109
  7101. 8FBF0034 LW RA,0034 (SP)
  7102. 10000011 BEQ R0,R0,+17
  7103. 8C4267B0 LW V0,67B0 (V0)
  7104. 246E0001 ADDIU T6,V1,0001
  7105. 01CB0019 MULTU T6,T3
  7106. 3C02801E LUI V0,801E
  7107. 8C4267B0 LW V0,67B0 (V0)
  7108. 3C04801E LUI A0,801E
  7109. 908467B9 LBU A0,67B9 (A0)
  7110. 0000C812 MFLO T9
  7111. 03224821 ADDU T1,T9,V0
  7112. 00000000 NOP
  7113. 248F0001 ADDIU T7,A0,0001
  7114. 01EB0019 MULTU T7,T3
  7115. 3C03801E LUI V1,801E
  7116. 906367B8 LBU V1,67B8 (V1)
  7117. 0000C012 MFLO T8
  7118. 03025021 ADDU T2,T8,V0
  7119. 00000000 NOP
  7120. 246E0001 ADDIU T6,V1,0001
  7121. 01CB0019 MULTU T6,T3
  7122. 3C06801E LUI A2,801E
  7123. 8CC667B4 LW A2,67B4 (A2)
  7124. 0000C812 MFLO T9
  7125. 03224021 ADDU T0,T9,V0
  7126. 00000000 NOP
  7127. 90C2FFFC LBU V0,FFFC (A2)
  7128. 24C6FFFC ADDIU A2,A2,FFFC
  7129. 2508FFFF ADDIU T0,T0,FFFF
  7130. 1040000C BEQ V0,R0,+12
  7131. 254AFFFF ADDIU T2,T2,FFFF
  7132. 00E27821 ADDU T7,A3,V0
  7133. 91E20000 LBU V0,0000 (T7)
  7134. 0202C021 ADDU T8,S0,V0
  7135. 031F7021 ADDU T6,T8,RA
  7136. 91C30000 LBU V1,0000 (T6)
  7137. 0202C821 ADDU T9,S0,V0
  7138. 03347821 ADDU T7,T9,S4
  7139. 030D7021 ADDU T6,T8,T5
  7140. 91E40000 LBU A0,0000 (T7)
  7141. 10000004 BEQ R0,R0,+4
  7142. 91C50000 LBU A1,0000 (T6)
  7143. 00002825 OR A1,R0,R0
  7144. 00002025 OR A0,R0,R0
  7145. 00001825 OR V1,R0,R0
  7146. 90C20001 LBU V0,0001 (A2)
  7147. 256BFFFF ADDIU T3,T3,FFFF
  7148. 1040000E BEQ V0,R0,+14
  7149. 00E2C821 ADDU T9,A3,V0
  7150. 93220000 LBU V0,0000 (T9)
  7151. 02027821 ADDU T7,S0,V0
  7152. 01F5C021 ADDU T8,T7,S5
  7153. 930E0000 LBU T6,0000 (T8)
  7154. 0202C821 ADDU T9,S0,V0
  7155. 03367821 ADDU T7,T9,S6
  7156. 006E1826 XOR V1,V1,T6
  7157. 02027021 ADDU T6,S0,V0
  7158. 91F80000 LBU T8,0000 (T7)
  7159. 01D7C821 ADDU T9,T6,S7
  7160. 932F0000 LBU T7,0000 (T9)
  7161. 00982026 XOR A0,A0,T8
  7162. 00AF2826 XOR A1,A1,T7
  7163. 90C20002 LBU V0,0002 (A2)
  7164. 1040000E BEQ V0,R0,+14
  7165. 00E2C021 ADDU T8,A3,V0
  7166. 93020000 LBU V0,0000 (T8)
  7167. 02027021 ADDU T6,S0,V0
  7168. 01D1C821 ADDU T9,T6,S1
  7169. 932F0000 LBU T7,0000 (T9)
  7170. 0202C021 ADDU T8,S0,V0
  7171. 03127021 ADDU T6,T8,S2
  7172. 006F1826 XOR V1,V1,T7
  7173. 02027821 ADDU T7,S0,V0
  7174. 91D90000 LBU T9,0000 (T6)
  7175. 01F3C021 ADDU T8,T7,S3
  7176. 930E0000 LBU T6,0000 (T8)
  7177. 00992026 XOR A0,A0,T9
  7178. 00AE2826 XOR A1,A1,T6
  7179. 10600009 BEQ V1,R0,+9
  7180. 2529FFFF ADDIU T1,T1,FFFF
  7181. 00E37821 ADDU T7,A3,V1
  7182. 91F80000 LBU T8,0000 (T7)
  7183. 91190000 LBU T9,0000 (T0)
  7184. 02187021 ADDU T6,S0,T8
  7185. 01CC7821 ADDU T7,T6,T4
  7186. 91F80000 LBU T8,0000 (T7)
  7187. 03387026 XOR T6,T9,T8
  7188. A10E0000 SB T6,0000 (T0)
  7189. 10800008 BEQ A0,R0,+8
  7190. 00E4C821 ADDU T9,A3,A0
  7191. 93380000 LBU T8,0000 (T9)
  7192. 914F0000 LBU T7,0000 (T2)
  7193. 02187021 ADDU T6,S0,T8
  7194. 01CCC821 ADDU T9,T6,T4
  7195. 93380000 LBU T8,0000 (T9)
  7196. 01F87026 XOR T6,T7,T8
  7197. A14E0000 SB T6,0000 (T2)
  7198. 10A00008 BEQ A1,R0,+8
  7199. 00E57821 ADDU T7,A3,A1
  7200. 91F80000 LBU T8,0000 (T7)
  7201. 91390000 LBU T9,0000 (T1)
  7202. 02187021 ADDU T6,S0,T8
  7203. 01CC7821 ADDU T7,T6,T4
  7204. 91F80000 LBU T8,0000 (T7)
  7205. 03387026 XOR T6,T9,T8
  7206. A12E0000 SB T6,0000 (T1)
  7207. 5560FFB0 BNEL T3,R0,-80
  7208. 90C2FFFC LBU V0,FFFC (A2)
  7209. 8FBF0034 LW RA,0034 (SP)
  7210. 8FB00014 LW S0,0014 (SP)
  7211. 8FB10018 LW S1,0018 (SP)
  7212. 8FB2001C LW S2,001C (SP)
  7213. 8FB30020 LW S3,0020 (SP)
  7214. 8FB40024 LW S4,0024 (SP)
  7215. 8FB50028 LW S5,0028 (SP)
  7216. 8FB6002C LW S6,002C (SP)
  7217. 8FB70030 LW S7,0030 (SP)
  7218. 03E00008 JR RA
  7219. 27BD0098 ADDIU SP,SP,0098
  7220.  
  7221. 801CD558 0x66D8
  7222. 3C08801E LUI T0,801E
  7223. 250867B0 ADDIU T0,T0,67B0
  7224. 27BDFF30 ADDIU SP,SP,FF30
  7225. AFB00018 SW S0,0018 (SP)
  7226. 3C10801E LUI S0,801E
  7227. 24020058 ADDIU V0,R0,0058
  7228. 910E0008 LBU T6,0008 (T0)
  7229. 910F0009 LBU T7,0009 (T0)
  7230. 9118000A LBU T8,000A (T0)
  7231. 9119000B LBU T9,000B (T0)
  7232. 261096D0 ADDIU S0,S0,96D0
  7233. 004E2823 SUBU A1,V0,T6
  7234. 004F1823 SUBU V1,V0,T7
  7235. 00583023 SUBU A2,V0,T8
  7236. 00593823 SUBU A3,V0,T9
  7237. 02057021 ADDU T6,S0,A1
  7238. 02037821 ADDU T7,S0,V1
  7239. 0206C021 ADDU T8,S0,A2
  7240. 0207C821 ADDU T9,S0,A3
  7241. 91C50000 LBU A1,0000 (T6)
  7242. 91E30000 LBU V1,0000 (T7)
  7243. 93060000 LBU A2,0000 (T8)
  7244. 93270000 LBU A3,0000 (T9)
  7245. 92040000 LBU A0,0000 (S0)
  7246. AFBF001C SW RA,001C (SP)
  7247. AFA50084 SW A1,0084 (SP)
  7248. AFA30080 SW V1,0080 (SP)
  7249. AFA6007C SW A2,007C (SP)
  7250. AFA70088 SW A3,0088 (SP)
  7251. 0C07378E JAL 801CDE38
  7252. AFA40074 SW A0,0074 (SP)
  7253. AFA200A8 SW V0,00A8 (SP)
  7254. 8FA40074 LW A0,0074 (SP)
  7255. 0C07378E JAL 801CDE38
  7256. 8FA50080 LW A1,0080 (SP)
  7257. AFA200A4 SW V0,00A4 (SP)
  7258. 8FA40074 LW A0,0074 (SP)
  7259. 0C07378E JAL 801CDE38
  7260. 8FA5007C LW A1,007C (SP)
  7261. AFA2009C SW V0,009C (SP)
  7262. 8FA40074 LW A0,0074 (SP)
  7263. 0C07378E JAL 801CDE38
  7264. 8FA50088 LW A1,0088 (SP)
  7265. AFA200A0 SW V0,00A0 (SP)
  7266. 8FA400A4 LW A0,00A4 (SP)
  7267. 0C07377D JAL 801CDDF4
  7268. 8FA5009C LW A1,009C (SP)
  7269. AFA20070 SW V0,0070 (SP)
  7270. 8FA4009C LW A0,009C (SP)
  7271. 0C07377D JAL 801CDDF4
  7272. 8FA500A0 LW A1,00A0 (SP)
  7273. AFA2006C SW V0,006C (SP)
  7274. 8FA400A0 LW A0,00A0 (SP)
  7275. 0C07377D JAL 801CDDF4
  7276. 8FA500A4 LW A1,00A4 (SP)
  7277. AFA20068 SW V0,0068 (SP)
  7278. 8FA400A0 LW A0,00A0 (SP)
  7279. 0C07377D JAL 801CDDF4
  7280. 8FA500A8 LW A1,00A8 (SP)
  7281. AFA20064 SW V0,0064 (SP)
  7282. 8FA400A8 LW A0,00A8 (SP)
  7283. 0C07377D JAL 801CDDF4
  7284. 8FA5009C LW A1,009C (SP)
  7285. AFA20060 SW V0,0060 (SP)
  7286. 8FA400A8 LW A0,00A8 (SP)
  7287. 0C07377D JAL 801CDDF4
  7288. 8FA500A4 LW A1,00A4 (SP)
  7289. 8FA8006C LW T0,006C (SP)
  7290. 8FAA0070 LW T2,0070 (SP)
  7291. 8FAB0064 LW T3,0064 (SP)
  7292. 8FA70068 LW A3,0068 (SP)
  7293. 8FA90060 LW T1,0060 (SP)
  7294. 01487026 XOR T6,T2,T0
  7295. 010BC026 XOR T8,T0,T3
  7296. 01C77826 XOR T7,T6,A3
  7297. 0309C826 XOR T9,T8,T1
  7298. 8FA300A0 LW V1,00A0 (SP)
  7299. 8FA400A4 LW A0,00A4 (SP)
  7300. 8FA5009C LW A1,009C (SP)
  7301. 8FA600A8 LW A2,00A8 (SP)
  7302. AFAF0044 SW T7,0044 (SP)
  7303. AFB90040 SW T9,0040 (SP)
  7304. 004AC026 XOR T8,V0,T2
  7305. 01627026 XOR T6,T3,V0
  7306. 01C77826 XOR T7,T6,A3
  7307. 0309C826 XOR T9,T8,T1
  7308. AFAF003C SW T7,003C (SP)
  7309. AFB90038 SW T9,0038 (SP)
  7310. 00857026 XOR T6,A0,A1
  7311. 01C36026 XOR T4,T6,V1
  7312. 00A37826 XOR T7,A1,V1
  7313. 0066C026 XOR T8,V1,A2
  7314. 00C4C826 XOR T9,A2,A0
  7315. 03043826 XOR A3,T8,A0
  7316. 03257026 XOR T6,T9,A1
  7317. 01E64026 XOR T0,T7,A2
  7318. AFAE0064 SW T6,0064 (SP)
  7319. AFA8006C SW T0,006C (SP)
  7320. AFA70068 SW A3,0068 (SP)
  7321. AFAC0070 SW T4,0070 (SP)
  7322. 0C07377D JAL 801CDDF4
  7323. AFAC0020 SW T4,0020 (SP)
  7324. 00402025 OR A0,V0,R0
  7325. 0C07377D JAL 801CDDF4
  7326. 8FA500A0 LW A1,00A0 (SP)
  7327. AFA20060 SW V0,0060 (SP)
  7328. 8FA4009C LW A0,009C (SP)
  7329. 0C07377D JAL 801CDDF4
  7330. 8FA500A0 LW A1,00A0 (SP)
  7331. 00402025 OR A0,V0,R0
  7332. 0C07377D JAL 801CDDF4
  7333. 8FA500A8 LW A1,00A8 (SP)
  7334. AFA2005C SW V0,005C (SP)
  7335. 8FA400A0 LW A0,00A0 (SP)
  7336. 0C07377D JAL 801CDDF4
  7337. 8FA500A8 LW A1,00A8 (SP)
  7338. 00402025 OR A0,V0,R0
  7339. 0C07377D JAL 801CDDF4
  7340. 8FA500A4 LW A1,00A4 (SP)
  7341. AFA20058 SW V0,0058 (SP)
  7342. 8FA400A8 LW A0,00A8 (SP)
  7343. 0C07377D JAL 801CDDF4
  7344. 8FA500A4 LW A1,00A4 (SP)
  7345. 00402025 OR A0,V0,R0
  7346. 0C07377D JAL 801CDDF4
  7347. 8FA5009C LW A1,009C (SP)
  7348. AFA20054 SW V0,0054 (SP)
  7349. 8FA40084 LW A0,0084 (SP)
  7350. 0C07378E JAL 801CDE38
  7351. 8FA50080 LW A1,0080 (SP)
  7352. AFA20024 SW V0,0024 (SP)
  7353. 8FA40084 LW A0,0084 (SP)
  7354. 0C07378E JAL 801CDE38
  7355. 8FA5007C LW A1,007C (SP)
  7356. 8FA40024 LW A0,0024 (SP)
  7357. 38450001 XORI A1,V0,0001
  7358. 388F0001 XORI T7,A0,0001
  7359. 0C07377D JAL 801CDDF4
  7360. 01E02025 OR A0,T7,R0
  7361. AFA2002C SW V0,002C (SP)
  7362. 8FA40084 LW A0,0084 (SP)
  7363. 0C07378E JAL 801CDE38
  7364. 8FA50088 LW A1,0088 (SP)
  7365. 8FA4002C LW A0,002C (SP)
  7366. 0C07377D JAL 801CDDF4
  7367. 38450001 XORI A1,V0,0001
  7368. 24040001 ADDIU A0,R0,0001
  7369. 0C07378E JAL 801CDE38
  7370. 00402825 OR A1,V0,R0
  7371. AFA20074 SW V0,0074 (SP)
  7372. 8FA40080 LW A0,0080 (SP)
  7373. 0C07378E JAL 801CDE38
  7374. 8FA50084 LW A1,0084 (SP)
  7375. AFA20024 SW V0,0024 (SP)
  7376. 8FA40080 LW A0,0080 (SP)
  7377. 0C07378E JAL 801CDE38
  7378. 8FA5007C LW A1,007C (SP)
  7379. 8FA40024 LW A0,0024 (SP)
  7380. 38450001 XORI A1,V0,0001
  7381. 38980001 XORI T8,A0,0001
  7382. 0C07377D JAL 801CDDF4
  7383. 03002025 OR A0,T8,R0
  7384. AFA2002C SW V0,002C (SP)
  7385. 8FA40080 LW A0,0080 (SP)
  7386. 0C07378E JAL 801CDE38
  7387. 8FA50088 LW A1,0088 (SP)
  7388. 8FA4002C LW A0,002C (SP)
  7389. 0C07377D JAL 801CDDF4
  7390. 38450001 XORI A1,V0,0001
  7391. 24040001 ADDIU A0,R0,0001
  7392. 0C07378E JAL 801CDE38
  7393. 00402825 OR A1,V0,R0
  7394. AFA20050 SW V0,0050 (SP)
  7395. 8FA4007C LW A0,007C (SP)
  7396. 0C07378E JAL 801CDE38
  7397. 8FA50084 LW A1,0084 (SP)
  7398. AFA20024 SW V0,0024 (SP)
  7399. 8FA4007C LW A0,007C (SP)
  7400. 0C07378E JAL 801CDE38
  7401. 8FA50080 LW A1,0080 (SP)
  7402. 8FA40024 LW A0,0024 (SP)
  7403. 38450001 XORI A1,V0,0001
  7404. 38990001 XORI T9,A0,0001
  7405. 0C07377D JAL 801CDDF4
  7406. 03202025 OR A0,T9,R0
  7407. AFA2002C SW V0,002C (SP)
  7408. 8FA4007C LW A0,007C (SP)
  7409. 0C07378E JAL 801CDE38
  7410. 8FA50088 LW A1,0088 (SP)
  7411. 8FA4002C LW A0,002C (SP)
  7412. 0C07377D JAL 801CDDF4
  7413. 38450001 XORI A1,V0,0001
  7414. 24040001 ADDIU A0,R0,0001
  7415. 0C07378E JAL 801CDE38
  7416. 00402825 OR A1,V0,R0
  7417. AFA2004C SW V0,004C (SP)
  7418. 8FA40088 LW A0,0088 (SP)
  7419. 0C07378E JAL 801CDE38
  7420. 8FA50084 LW A1,0084 (SP)
  7421. AFA20024 SW V0,0024 (SP)
  7422. 8FA40088 LW A0,0088 (SP)
  7423. 0C07378E JAL 801CDE38
  7424. 8FA50080 LW A1,0080 (SP)
  7425. 8FA40024 LW A0,0024 (SP)
  7426. 38450001 XORI A1,V0,0001
  7427. 388E0001 XORI T6,A0,0001
  7428. 0C07377D JAL 801CDDF4
  7429. 01C02025 OR A0,T6,R0
  7430. AFA2002C SW V0,002C (SP)
  7431. 8FA40088 LW A0,0088 (SP)
  7432. 0C07378E JAL 801CDE38
  7433. 8FA5007C LW A1,007C (SP)
  7434. 8FA4002C LW A0,002C (SP)
  7435. 0C07377D JAL 801CDDF4
  7436. 38450001 XORI A1,V0,0001
  7437. 24040001 ADDIU A0,R0,0001
  7438. 0C07378E JAL 801CDE38
  7439. 00402825 OR A1,V0,R0
  7440. AFA20048 SW V0,0048 (SP)
  7441. 8FA40020 LW A0,0020 (SP)
  7442. 0C07377D JAL 801CDDF4
  7443. 8FA50074 LW A1,0074 (SP)
  7444. 3C0A801E LUI T2,801E
  7445. 254A98D0 ADDIU T2,T2,98D0
  7446. 01427821 ADDU T7,T2,V0
  7447. 91F80000 LBU T8,0000 (T7)
  7448. 8FA40044 LW A0,0044 (SP)
  7449. 8FA50074 LW A1,0074 (SP)
  7450. 0C07377D JAL 801CDDF4
  7451. AFB800A8 SW T8,00A8 (SP)
  7452. 3C0A801E LUI T2,801E
  7453. 254A98D0 ADDIU T2,T2,98D0
  7454. 0142C821 ADDU T9,T2,V0
  7455. 932E0000 LBU T6,0000 (T9)
  7456. 8FA40060 LW A0,0060 (SP)
  7457. 8FA50074 LW A1,0074 (SP)
  7458. 0C07377D JAL 801CDDF4
  7459. AFAE00A4 SW T6,00A4 (SP)
  7460. AFA20060 SW V0,0060 (SP)
  7461. 8FA4006C LW A0,006C (SP)
  7462. 0C07377D JAL 801CDDF4
  7463. 8FA50050 LW A1,0050 (SP)
  7464. 3C0A801E LUI T2,801E
  7465. 254A98D0 ADDIU T2,T2,98D0
  7466. 01427821 ADDU T7,T2,V0
  7467. 91F80000 LBU T8,0000 (T7)
  7468. 8FA40040 LW A0,0040 (SP)
  7469. 8FA50050 LW A1,0050 (SP)
  7470. 0C07377D JAL 801CDDF4
  7471. AFB8009C SW T8,009C (SP)
  7472. 3C0A801E LUI T2,801E
  7473. 254A98D0 ADDIU T2,T2,98D0
  7474. 0142C821 ADDU T9,T2,V0
  7475. 932E0000 LBU T6,0000 (T9)
  7476. 8FA4005C LW A0,005C (SP)
  7477. 8FA50050 LW A1,0050 (SP)
  7478. 0C07377D JAL 801CDDF4
  7479. AFAE00A0 SW T6,00A0 (SP)
  7480. AFA2005C SW V0,005C (SP)
  7481. 8FA40068 LW A0,0068 (SP)
  7482. 0C07377D JAL 801CDDF4
  7483. 8FA5004C LW A1,004C (SP)
  7484. 3C0A801E LUI T2,801E
  7485. 254A98D0 ADDIU T2,T2,98D0
  7486. 01427821 ADDU T7,T2,V0
  7487. 91F80000 LBU T8,0000 (T7)
  7488. 8FA4003C LW A0,003C (SP)
  7489. 8FA5004C LW A1,004C (SP)
  7490. 0C07377D JAL 801CDDF4
  7491. AFB80098 SW T8,0098 (SP)
  7492. 3C0A801E LUI T2,801E
  7493. 254A98D0 ADDIU T2,T2,98D0
  7494. 0142C821 ADDU T9,T2,V0
  7495. 932E0000 LBU T6,0000 (T9)
  7496. 8FA40058 LW A0,0058 (SP)
  7497. 8FA5004C LW A1,004C (SP)
  7498. 0C07377D JAL 801CDDF4
  7499. AFAE0094 SW T6,0094 (SP)
  7500. AFA20058 SW V0,0058 (SP)
  7501. 8FA40064 LW A0,0064 (SP)
  7502. 0C07377D JAL 801CDDF4
  7503. 8FA50048 LW A1,0048 (SP)
  7504. 3C0A801E LUI T2,801E
  7505. 254A98D0 ADDIU T2,T2,98D0
  7506. 01427821 ADDU T7,T2,V0
  7507. 91F80000 LBU T8,0000 (T7)
  7508. 8FA40038 LW A0,0038 (SP)
  7509. 8FA50048 LW A1,0048 (SP)
  7510. 0C07377D JAL 801CDDF4
  7511. AFB80090 SW T8,0090 (SP)
  7512. 3C0A801E LUI T2,801E
  7513. 254A98D0 ADDIU T2,T2,98D0
  7514. 0142C821 ADDU T9,T2,V0
  7515. 932E0000 LBU T6,0000 (T9)
  7516. 8FA40054 LW A0,0054 (SP)
  7517. 8FA50048 LW A1,0048 (SP)
  7518. 0C07377D JAL 801CDDF4
  7519. AFAE008C SW T6,008C (SP)
  7520. 8FAF0074 LW T7,0074 (SP)
  7521. 3C0A801E LUI T2,801E
  7522. 254A98D0 ADDIU T2,T2,98D0
  7523. 014FC021 ADDU T8,T2,T7
  7524. 93190000 LBU T9,0000 (T8)
  7525. 8FAE0060 LW T6,0060 (SP)
  7526. 3C05801E LUI A1,801E
  7527. AFB90074 SW T9,0074 (SP)
  7528. 014E7821 ADDU T7,T2,T6
  7529. 91F80000 LBU T8,0000 (T7)
  7530. 8FB90050 LW T9,0050 (SP)
  7531. 24A567B0 ADDIU A1,A1,67B0
  7532. AFB80060 SW T8,0060 (SP)
  7533. 01597021 ADDU T6,T2,T9
  7534. 91CF0000 LBU T7,0000 (T6)
  7535. 8FB8005C LW T8,005C (SP)
  7536. 90A4000B LBU A0,000B (A1)
  7537. AFAF0050 SW T7,0050 (SP)
  7538. 0158C821 ADDU T9,T2,T8
  7539. 932E0000 LBU T6,0000 (T9)
  7540. 8FAF004C LW T7,004C (SP)
  7541. 28810055 SLTI AT,A0,0055
  7542. AFAE005C SW T6,005C (SP)
  7543. 014FC021 ADDU T8,T2,T7
  7544. 93190000 LBU T9,0000 (T8)
  7545. 8FAE0058 LW T6,0058 (SP)
  7546. 90BF000D LBU RA,000D (A1)
  7547. AFB9004C SW T9,004C (SP)
  7548. 014E7821 ADDU T7,T2,T6
  7549. 91F80000 LBU T8,0000 (T7)
  7550. 8FB90048 LW T9,0048 (SP)
  7551. AFB80058 SW T8,0058 (SP)
  7552. 01597021 ADDU T6,T2,T9
  7553. 0142C021 ADDU T8,T2,V0
  7554. 91CF0000 LBU T7,0000 (T6)
  7555. 93190000 LBU T9,0000 (T8)
  7556. AFAF0048 SW T7,0048 (SP)
  7557. 14200018 BNE AT,R0,+24
  7558. AFB90054 SW T9,0054 (SP)
  7559. 90A3000A LBU V1,000A (A1)
  7560. 3C02801E LUI V0,801E
  7561. 24426068 ADDIU V0,V0,6068
  7562. 28610055 SLTI AT,V1,0055
  7563. 10200003 BEQ AT,R0,+3
  7564. 00406825 OR T5,V0,R0
  7565. 10000017 BEQ R0,R0,+23
  7566. 8CA20000 LW V0,0000 (A1)
  7567. 90A40009 LBU A0,0009 (A1)
  7568. 00405825 OR T3,V0,R0
  7569. 28810055 SLTI AT,A0,0055
  7570. 10200003 BEQ AT,R0,+3
  7571. 00000000 NOP
  7572. 10000016 BEQ R0,R0,+22
  7573. 8CA20000 LW V0,0000 (A1)
  7574. 3C03801E LUI V1,801E
  7575. 906367B8 LBU V1,67B8 (V1)
  7576. 00406025 OR T4,V0,R0
  7577. 28610055 SLTI AT,V1,0055
  7578. 102000BD BEQ AT,R0,+189
  7579. 3C02801E LUI V0,801E
  7580. 10000015 BEQ R0,R0,+21
  7581. 8C4267B0 LW V0,67B0 (V0)
  7582. 248E0001 ADDIU T6,A0,0001
  7583. 01DF0019 MULTU T6,RA
  7584. 8CA20000 LW V0,0000 (A1)
  7585. 90A3000A LBU V1,000A (A1)
  7586. 00007812 MFLO T7
  7587. 01E26821 ADDU T5,T7,V0
  7588. 00000000 NOP
  7589. 24780001 ADDIU T8,V1,0001
  7590. 031F0019 MULTU T8,RA
  7591. 90A40009 LBU A0,0009 (A1)
  7592. 0000C812 MFLO T9
  7593. 03225821 ADDU T3,T9,V0
  7594. 00000000 NOP
  7595. 248E0001 ADDIU T6,A0,0001
  7596. 01DF0019 MULTU T6,RA
  7597. 3C03801E LUI V1,801E
  7598. 906367B8 LBU V1,67B8 (V1)
  7599. 00007812 MFLO T7
  7600. 01E26021 ADDU T4,T7,V0
  7601. 00000000 NOP
  7602. 24780001 ADDIU T8,V1,0001
  7603. 031F0019 MULTU T8,RA
  7604. 3C08801E LUI T0,801E
  7605. 8D0867B4 LW T0,67B4 (T0)
  7606. 0000C812 MFLO T9
  7607. 03224821 ADDU T1,T9,V0
  7608. 00000000 NOP
  7609. 9102FFFC LBU V0,FFFC (T0)
  7610. 2508FFFC ADDIU T0,T0,FFFC
  7611. 2529FFFF ADDIU T1,T1,FFFF
  7612. 14400006 BNE V0,R0,+6
  7613. 258CFFFF ADDIU T4,T4,FFFF
  7614. 00003025 OR A2,R0,R0
  7615. 00003825 OR A3,R0,R0
  7616. 00002025 OR A0,R0,R0
  7617. 10000013 BEQ R0,R0,+19
  7618. 00002825 OR A1,R0,R0
  7619. 01427021 ADDU T6,T2,V0
  7620. 91C20000 LBU V0,0000 (T6)
  7621. 8FB80074 LW T8,0074 (SP)
  7622. 02027821 ADDU T7,S0,V0
  7623. 01F8C821 ADDU T9,T7,T8
  7624. 8FAF0050 LW T7,0050 (SP)
  7625. 02027021 ADDU T6,S0,V0
  7626. 93250000 LBU A1,0000 (T9)
  7627. 01CFC021 ADDU T8,T6,T7
  7628. 8FAE004C LW T6,004C (SP)
  7629. 0202C821 ADDU T9,S0,V0
  7630. 93040000 LBU A0,0000 (T8)
  7631. 032E7821 ADDU T7,T9,T6
  7632. 8FB90048 LW T9,0048 (SP)
  7633. 0202C021 ADDU T8,S0,V0
  7634. 91E70000 LBU A3,0000 (T7)
  7635. 03197021 ADDU T6,T8,T9
  7636. 91C60000 LBU A2,0000 (T6)
  7637. 91020001 LBU V0,0001 (T0)
  7638. 8FB80070 LW T8,0070 (SP)
  7639. 256BFFFF ADDIU T3,T3,FFFF
  7640. 10400029 BEQ V0,R0,+41
  7641. 27FFFFFF ADDIU RA,RA,FFFF
  7642. 01427821 ADDU T7,T2,V0
  7643. 17000003 BNE T8,R0,+3
  7644. 91E20000 LBU V0,0000 (T7)
  7645. 10000005 BEQ R0,R0,+5
  7646. 00001825 OR V1,R0,R0
  7647. 8FAE00A8 LW T6,00A8 (SP)
  7648. 0202C821 ADDU T9,S0,V0
  7649. 032E7821 ADDU T7,T9,T6
  7650. 91E30000 LBU V1,0000 (T7)
  7651. 8FB8006C LW T8,006C (SP)
  7652. 00A32826 XOR A1,A1,V1
  7653. 8FAE009C LW T6,009C (SP)
  7654. 57000004 BNEL T8,R0,+4
  7655. 0202C821 ADDU T9,S0,V0
  7656. 10000004 BEQ R0,R0,+4
  7657. 00001825 OR V1,R0,R0
  7658. 0202C821 ADDU T9,S0,V0
  7659. 032E7821 ADDU T7,T9,T6
  7660. 91E30000 LBU V1,0000 (T7)
  7661. 8FB80068 LW T8,0068 (SP)
  7662. 00832026 XOR A0,A0,V1
  7663. 8FAE0098 LW T6,0098 (SP)
  7664. 57000004 BNEL T8,R0,+4
  7665. 0202C821 ADDU T9,S0,V0
  7666. 10000004 BEQ R0,R0,+4
  7667. 00001825 OR V1,R0,R0
  7668. 0202C821 ADDU T9,S0,V0
  7669. 032E7821 ADDU T7,T9,T6
  7670. 91E30000 LBU V1,0000 (T7)
  7671. 8FB80064 LW T8,0064 (SP)
  7672. 00E33826 XOR A3,A3,V1
  7673. 8FAE0090 LW T6,0090 (SP)
  7674. 57000004 BNEL T8,R0,+4
  7675. 0202C821 ADDU T9,S0,V0
  7676. 10000004 BEQ R0,R0,+4
  7677. 00001825 OR V1,R0,R0
  7678. 0202C821 ADDU T9,S0,V0
  7679. 032E7821 ADDU T7,T9,T6
  7680. 91E30000 LBU V1,0000 (T7)
  7681. 00C33026 XOR A2,A2,V1
  7682. 91020002 LBU V0,0002 (T0)
  7683. 8FB90044 LW T9,0044 (SP)
  7684. 10400028 BEQ V0,R0,+40
  7685. 0142C021 ADDU T8,T2,V0
  7686. 17200003 BNE T9,R0,+3
  7687. 93020000 LBU V0,0000 (T8)
  7688. 10000005 BEQ R0,R0,+5
  7689. 00001825 OR V1,R0,R0
  7690. 8FAF00A4 LW T7,00A4 (SP)
  7691. 02027021 ADDU T6,S0,V0
  7692. 01CFC021 ADDU T8,T6,T7
  7693. 93030000 LBU V1,0000 (T8)
  7694. 8FB90040 LW T9,0040 (SP)
  7695. 00A32826 XOR A1,A1,V1
  7696. 8FAF00A0 LW T7,00A0 (SP)
  7697. 57200004 BNEL T9,R0,+4
  7698. 02027021 ADDU T6,S0,V0
  7699. 10000004 BEQ R0,R0,+4
  7700. 00001825 OR V1,R0,R0
  7701. 02027021 ADDU T6,S0,V0
  7702. 01CFC021 ADDU T8,T6,T7
  7703. 93030000 LBU V1,0000 (T8)
  7704. 8FB9003C LW T9,003C (SP)
  7705. 00832026 XOR A0,A0,V1
  7706. 8FAF0094 LW T7,0094 (SP)
  7707. 57200004 BNEL T9,R0,+4
  7708. 02027021 ADDU T6,S0,V0
  7709. 10000004 BEQ R0,R0,+4
  7710. 00001825 OR V1,R0,R0
  7711. 02027021 ADDU T6,S0,V0
  7712. 01CFC021 ADDU T8,T6,T7
  7713. 93030000 LBU V1,0000 (T8)
  7714. 8FB90038 LW T9,0038 (SP)
  7715. 00E33826 XOR A3,A3,V1
  7716. 8FAF008C LW T7,008C (SP)
  7717. 57200004 BNEL T9,R0,+4
  7718. 02027021 ADDU T6,S0,V0
  7719. 10000004 BEQ R0,R0,+4
  7720. 00001825 OR V1,R0,R0
  7721. 02027021 ADDU T6,S0,V0
  7722. 01CFC021 ADDU T8,T6,T7
  7723. 93030000 LBU V1,0000 (T8)
  7724. 00C33026 XOR A2,A2,V1
  7725. 91020003 LBU V0,0003 (T0)
  7726. 10400013 BEQ V0,R0,+19
  7727. 0142C821 ADDU T9,T2,V0
  7728. 93220000 LBU V0,0000 (T9)
  7729. 8FAF0060 LW T7,0060 (SP)
  7730. 02027021 ADDU T6,S0,V0
  7731. 01CFC021 ADDU T8,T6,T7
  7732. 8FAF005C LW T7,005C (SP)
  7733. 93190000 LBU T9,0000 (T8)
  7734. 01CFC021 ADDU T8,T6,T7
  7735. 8FAF0058 LW T7,0058 (SP)
  7736. 00B92826 XOR A1,A1,T9
  7737. 93190000 LBU T9,0000 (T8)
  7738. 01CFC021 ADDU T8,T6,T7
  7739. 8FAF0054 LW T7,0054 (SP)
  7740. 00992026 XOR A0,A0,T9
  7741. 93190000 LBU T9,0000 (T8)
  7742. 01CFC021 ADDU T8,T6,T7
  7743. 00F93826 XOR A3,A3,T9
  7744. 93190000 LBU T9,0000 (T8)
  7745. 00D93026 XOR A2,A2,T9
  7746. 10A00004 BEQ A1,R0,+4
  7747. 25ADFFFF ADDIU T5,T5,FFFF
  7748. 912E0000 LBU T6,0000 (T1)
  7749. 01C57826 XOR T7,T6,A1
  7750. A12F0000 SB T7,0000 (T1)
  7751. 10800004 BEQ A0,R0,+4
  7752. 00000000 NOP
  7753. 91980000 LBU T8,0000 (T4)
  7754. 0304C826 XOR T9,T8,A0
  7755. A1990000 SB T9,0000 (T4)
  7756. 10E00004 BEQ A3,R0,+4
  7757. 00000000 NOP
  7758. 916E0000 LBU T6,0000 (T3)
  7759. 01C77826 XOR T7,T6,A3
  7760. A16F0000 SB T7,0000 (T3)
  7761. 10C00004 BEQ A2,R0,+4
  7762. 00000000 NOP
  7763. 91B80000 LBU T8,0000 (T5)
  7764. 0306C826 XOR T9,T8,A2
  7765. A1B90000 SB T9,0000 (T5)
  7766. 57E0FF63 BNEL RA,R0,-157
  7767. 9102FFFC LBU V0,FFFC (T0)
  7768. 8FBF001C LW RA,001C (SP)
  7769. 8FB00018 LW S0,0018 (SP)
  7770. 27BD00D0 ADDIU SP,SP,00D0
  7771. 03E00008 JR RA
  7772. 00000000 NOP
  7773.  
  7774. 801CDDF4 0x6F74
  7775. 10800003 BEQ A0,R0,+3
  7776. 00000000 NOP
  7777. 14A00003 BNE A1,R0,+3
  7778. 3C03801E LUI V1,801E
  7779. 03E00008 JR RA
  7780. 00001025 OR V0,R0,R0
  7781. 246398D0 ADDIU V1,V1,98D0
  7782. 00657021 ADDU T6,V1,A1
  7783. 0064C021 ADDU T8,V1,A0
  7784. 93190000 LBU T9,0000 (T8)
  7785. 91CF0000 LBU T7,0000 (T6)
  7786. 3C02801E LUI V0,801E
  7787. 01F94021 ADDU T0,T7,T9
  7788. 00481021 ADDU V0,V0,T0
  7789. 904296D0 LBU V0,96D0 (V0)
  7790. 03E00008 JR RA
  7791. 00000000 NOP
  7792.  
  7793. 801CDE38 0x6FB8
  7794. 10800003 BEQ A0,R0,+3
  7795. 00000000 NOP
  7796. 14A00003 BNE A1,R0,+3
  7797. 3C03801E LUI V1,801E
  7798. 03E00008 JR RA
  7799. 00001025 OR V0,R0,R0
  7800. 246398D0 ADDIU V1,V1,98D0
  7801. 0065C021 ADDU T8,V1,A1
  7802. 93190000 LBU T9,0000 (T8)
  7803. 00647021 ADDU T6,V1,A0
  7804. 91CF0000 LBU T7,0000 (T6)
  7805. 00194023 SUBU T0,R0,T9
  7806. 3C02801E LUI V0,801E
  7807. 01E84821 ADDU T1,T7,T0
  7808. 00491021 ADDU V0,V0,T1
  7809. 904297CF LBU V0,97CF (V0)
  7810. 03E00008 JR RA
  7811. 00000000 NOP
  7812.  
  7813. 801CDE80 0x7000
  7814. 27BDFFC8 ADDIU SP,SP,FFC8
  7815. AFB1001C SW S1,001C (SP)
  7816. 3C11801E LUI S1,801E
  7817. 26315E80 ADDIU S1,S1,5E80
  7818. 8E2E0000 LW T6,0000 (S1)
  7819. AFB20020 SW S2,0020 (SP)
  7820. 3C01BFFF LUI AT,BFFF
  7821. 3C12801E LUI S2,801E
  7822. AFB00018 SW S0,0018 (SP)
  7823. 3421FFFF ORI AT,AT,FFFF
  7824. 3090FFFF ANDI S0,A0,FFFF
  7825. 26525EC0 ADDIU S2,S2,5EC0
  7826. AFBF0024 SW RA,0024 (SP)
  7827. AFA40038 SW A0,0038 (SP)
  7828. 3C050500 LUI A1,0500
  7829. 01C13024 AND A2,T6,AT
  7830. AE260000 SW A2,0000 (S1)
  7831. 34A50518 ORI A1,A1,0518
  7832. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  7833. 8E440000 LW A0,0000 (S2) # p->ASIC EPI handle = @801E5EC0
  7834. 24010001 ADDIU AT,R0,0001
  7835. 16010004 BNE S0,AT,+4
  7836. 00001025 OR V0,R0,R0
  7837. 3C03801E LUI V1,801E
  7838. 10000003 BEQ R0,R0,+3
  7839. 24639B30 ADDIU V1,V1,9B30
  7840. 3C03801E LUI V1,801E
  7841. 24639AF0 ADDIU V1,V1,9AF0
  7842. 3C07801E LUI A3,801E
  7843. 24E767C0 ADDIU A3,A3,67C0
  7844. 0002C880 SLL T9,V0,0x2
  7845. 24420001 ADDIU V0,V0,0001
  7846. 8C780000 LW T8,0000 (V1)
  7847. 304900FF ANDI T1,V0,00FF
  7848. 29210010 SLTI AT,T1,0010
  7849. 00F94021 ADDU T0,A3,T9
  7850. 01201025 OR V0,T1,R0
  7851. 24630004 ADDIU V1,V1,0004
  7852. 1420FFF7 BNE AT,R0,-9
  7853. AD180000 SW T8,0000 (T0)
  7854. 3C02801E LUI V0,801E
  7855. 90425E96 LBU V0,5E96 (V0)
  7856. 8CEB0010 LW T3,0010 (A3)
  7857. 00E02025 OR A0,A3,R0
  7858. 2450FFFF ADDIU S0,V0,FFFF
  7859. 00105200 SLL T2,S0,0x8
  7860. 26020007 ADDIU V0,S0,0007
  7861. 016A6025 OR T4,T3,T2
  7862. 01408025 OR S0,T2,R0
  7863. ACEC0010 SW T4,0010 (A3)
  7864. AFA2002C SW V0,002C (SP)
  7865. 0C000D10 JAL 80003440 # cache blah blah
  7866. 24050040 ADDIU A1,R0,0040
  7867. 3C05801E LUI A1,801E
  7868. 24A55EC8 ADDIU A1,A1,5EC8 # req = 801E5EC8
  7869. 8E590000 LW T9,0000 (S2) # p->ASIC EPI handle = @801E5EC0
  7870. 3C07801E LUI A3,801E
  7871. 3C0D0500 LUI T5,0500
  7872. 24E767C0 ADDIU A3,A3,67C0
  7873. 35AD0580 ORI T5,T5,0580
  7874. 240E0040 ADDIU T6,R0,0040
  7875. ACA70008 SW A3,0008 (A1) # req+8 = 801E67C0
  7876. ACAD000C SW T5,000C (A1) # req+C = 05000580: ASIC sequence data
  7877. ACAE0010 SW T6,0010 (A1) # req+10 = length
  7878. 240F0002 ADDIU T7,R0,0002
  7879. AF2F0014 SW T7,0014 (T9) # EPI handle+14 = 2
  7880. 8E440000 LW A0,0000 (S2)
  7881. 0C001030 JAL 800040C0 # send read or write (A2) DMA request A1 using EPI handle A0
  7882. 24060001 ADDIU A2,R0,0001 # write
  7883. 3C04801E LUI A0,801E
  7884. 24845E30 ADDIU A0,A0,5E30
  7885. 00002825 OR A1,R0,R0
  7886. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  7887. 24060001 ADDIU A2,R0,0001
  7888. 8FA2002C LW V0,002C (SP)
  7889. 3C050500 LUI A1,0500
  7890. 34A50530 ORI A1,A1,0530 # target = 05000530: sector byte reg
  7891. 34465900 ORI A2,V0,5900
  7892. 0006C400 SLL T8,A2,0x10
  7893. 03003025 OR A2,T8,R0
  7894. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  7895. 8E440000 LW A0,0000 (S2) # p->ASIC EPI handle = @801E5EC0
  7896. 3C08801E LUI T0,801E
  7897. 25085E86 ADDIU T0,T0,5E86
  7898. 95090000 LHU T1,0000 (T0)
  7899. 3C050500 LUI A1,0500
  7900. 34A50528 ORI A1,A1,0528
  7901. 312A0800 ANDI T2,T1,0800
  7902. 51400003 BEQL T2,R0,+3
  7903. 8E440000 LW A0,0000 (S2)
  7904. 26100100 ADDIU S0,S0,0100
  7905. 8E440000 LW A0,0000 (S2) # p->ASIC EPI handle = @801E5EC0
  7906. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  7907. 00103200 SLL A2,S0,0x8
  7908. 8E2B0000 LW T3,0000 (S1)
  7909. 3C014000 LUI AT,4000
  7910. 3C050500 LUI A1,0500
  7911. 01613025 OR A2,T3,AT
  7912. AE260000 SW A2,0000 (S1)
  7913. 34A50518 ORI A1,A1,0518
  7914. 0C001600 JAL 80005800 # write word A2 to hardware offset A1 using EPI handle A0
  7915. 8E440000 LW A0,0000 (S2) # p->ASIC EPI handle = @801E5EC0
  7916. 8FBF0024 LW RA,0024 (SP)
  7917. 8FB00018 LW S0,0018 (SP)
  7918. 8FB1001C LW S1,001C (SP)
  7919. 8FB20020 LW S2,0020 (SP)
  7920. 03E00008 JR RA
  7921. 27BD0038 ADDIU SP,SP,0038
  7922.  
  7923. 801CE030 0x71B0 handle leocmd 8: start/stop
  7924. 27BDFFD0 ADDIU SP,SP,FFD0
  7925. AFB30020 SW S3,0020 (SP)
  7926. AFB2001C SW S2,001C (SP)
  7927. AFB50028 SW S5,0028 (SP)
  7928. AFB40024 SW S4,0024 (SP)
  7929. AFB00014 SW S0,0014 (SP)
  7930. 3C12801E LUI S2,801E
  7931. 3C130005 LUI S3,0005
  7932. AFBF002C SW RA,002C (SP)
  7933. AFB10018 SW S1,0018 (SP)
  7934. 24100008 ADDIU S0,R0,0008
  7935. 36730001 ORI S3,S3,0001
  7936. 26525E78 ADDIU S2,S2,5E78
  7937. 3C14000D LUI S4,000D
  7938. 3C150001 LUI S5,0001
  7939. 8E4E0000 LW T6,0000 (S2) # leocmd = @801E5E78
  7940. 00002825 OR A1,R0,R0
  7941. 91C20002 LBU V0,0002 (T6)
  7942. 304F0001 ANDI T7,V0,0001 # True if starting
  7943. 11E00003 BEQ T7,R0,+3
  7944. 30580002 ANDI T8,V0,0002 # True if standby mode
  7945. 10000008 BEQ R0,R0,+8
  7946. 02602025 OR A0,S3,R0
  7947. 13000003 BEQ T8,R0,+3
  7948. 30590004 ANDI T9,V0,0004 # True if brake on
  7949. 10000004 BEQ R0,R0,+4
  7950. 02802025 OR A0,S4,R0
  7951. 13200002 BEQ T9,R0,+2
  7952. 3C040004 LUI A0,0004
  7953. 02A02825 OR A1,S5,R0
  7954. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  7955. 00000000 NOP
  7956. 14400004 BNE V0,R0,+4
  7957. 305100FF ANDI S1,V0,00FF
  7958. 8E480000 LW T0,0000 (S2) # leocmd = @801E5E78
  7959. 1000000E BEQ R0,R0,+14
  7960. A1000004 SB R0,0004 (T0)
  7961. 0C0732AC JAL 801CCAB0
  7962. 02202025 OR A0,S1,R0
  7963. 14400005 BNE V0,R0,+5
  7964. 02001025 OR V0,S0,R0
  7965. 2610FFFF ADDIU S0,S0,FFFF
  7966. 320900FF ANDI T1,S0,00FF
  7967. 1440FFE3 BNE V0,R0,-29
  7968. 01208025 OR S0,T1,R0
  7969. 8E4A0000 LW T2,0000 (S2) # leocmd = @801E5E78
  7970. 240B0002 ADDIU T3,R0,0002
  7971. A1510005 SB S1,0005 (T2)
  7972. 8E4C0000 LW T4,0000 (S2)
  7973. A18B0004 SB T3,0004 (T4)
  7974. 8FBF002C LW RA,002C (SP)
  7975. 8FB00014 LW S0,0014 (SP)
  7976. 8FB10018 LW S1,0018 (SP)
  7977. 8FB2001C LW S2,001C (SP)
  7978. 8FB30020 LW S3,0020 (SP)
  7979. 8FB40024 LW S4,0024 (SP)
  7980. 8FB50028 LW S5,0028 (SP)
  7981. 03E00008 JR RA
  7982. 27BD0030 ADDIU SP,SP,0030
  7983.  
  7984. 00000000 NOP
  7985.  
  7986. 801CE120 0x72A0 V0 = True if IPL valid else False
  7987. 27BDFFE0 ADDIU SP,SP,FFE0
  7988. AFBF0014 SW RA,0014 (SP)
  7989. 0C00076C JAL 80001DB0 # wait for PI I/O to complete; creates queue 80008948 if not created
  7990. 00000000 NOP
  7991. 3C03A460 LUI V1,A460
  7992. 34630010 ORI V1,V1,0010
  7993. 8C620000 LW V0,0000 (V1)
  7994. 3C06A460 LUI A2,A460
  7995. 34C60014 ORI A2,A2,0014
  7996. 304E0003 ANDI T6,V0,0003
  7997. 11C00005 BEQ T6,R0,+5
  7998. 3C07A460 LUI A3,A460
  7999. 8C620000 LW V0,0000 (V1)
  8000. 304F0003 ANDI T7,V0,0003
  8001. 55E0FFFE BNEL T7,R0,-2 # while PI Status & 3: pass
  8002. 8C620000 LW V0,0000 (V1)
  8003. 8CC20000 LW V0,0000 (A2) # PI Domain 1 Latency = @A4600014
  8004. 34E7001C ORI A3,A3,001C
  8005. 3C08A460 LUI T0,A460
  8006. 8CE30000 LW V1,0000 (A3) # PI Domain 1 Page Size = @A460001C
  8007. 35080020 ORI T0,T0,0020
  8008. 3C09A460 LUI T1,A460
  8009. 8D040000 LW A0,0000 (T0) # PI Domain 1 Release = @A4600020
  8010. 35290018 ORI T1,T1,0018
  8011. 8D250000 LW A1,0000 (T1) # PI Domain 1 Page Width = @A4600018
  8012. 240A00FF ADDIU T2,R0,00FF
  8013. ACCA0000 SW T2,0000 (A2) # latency = 0xFF
  8014. ACE00000 SW R0,0000 (A3) # page size = 0
  8015. 24180003 ADDIU T8,R0,0003
  8016. AD180000 SW T8,0000 (T0) # release = 3
  8017. AD2A0000 SW T2,0000 (T1) # width = 0xFF
  8018. 3C19A600 LUI T9,A600
  8019. 8F2B1010 LW T3,1010 (T9)
  8020. AFAB001C SW T3,001C (SP) # SP+1C = @A6001010: IPL secondary confirmation test
  8021. ACC20000 SW V0,0000 (A2)
  8022. ACE30000 SW V1,0000 (A3)
  8023. AD040000 SW A0,0000 (T0)
  8024. 0C00077D JAL 80001DF4 # signal PI I/O complete; send msg 0 to queue 80008948
  8025. AD250000 SW A1,0000 (T1)
  8026. 8FAC001C LW T4,001C (SP)
  8027. 3C012129 LUI AT,2129
  8028. 3421FFF8 ORI AT,AT,FFF8
  8029. 15810003 BNE T4,AT,+3 # return True if @A6001010 == 0x2129FFF8 else False
  8030. 8FBF0014 LW RA,0014 (SP)
  8031. 10000002 BEQ R0,R0,+2
  8032. 24020001 ADDIU V0,R0,0001
  8033. 00001025 OR V0,R0,R0
  8034. 03E00008 JR RA
  8035. 27BD0020 ADDIU SP,SP,0020
  8036.  
  8037. 00000000 NOP
  8038. 00000000 NOP
  8039. 00000000 NOP
  8040.  
  8041. 801CE1F0 0x7370 handle leocmd 0xB: select
  8042. 27BDFFE0 ADDIU SP,SP,FFE0
  8043. AFB00018 SW S0,0018 (SP)
  8044. 3C10801E LUI S0,801E
  8045. 26105E78 ADDIU S0,S0,5E78
  8046. 8E0E0000 LW T6,0000 (S0) # leocmd = @801E5E78
  8047. AFBF001C SW RA,001C (SP)
  8048. 3C040006 LUI A0,0006
  8049. 91C5000E LBU A1,000E (T6) # standby time = leocmd[E]
  8050. 00057C00 SLL T7,A1,0x10
  8051. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8052. 01E02825 OR A1,T7,R0
  8053. 54400010 BNEL V0,R0,+16
  8054. 8E090000 LW T1,0000 (S0)
  8055. 8E180000 LW T8,0000 (S0) # leocmd = @801E5E78
  8056. 3C040007 LUI A0,0007
  8057. 9305000F LBU A1,000F (T8) # sleep time = leocmd[F]
  8058. 0005CC00 SLL T9,A1,0x10
  8059. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8060. 03202825 OR A1,T9,R0
  8061. 54400008 BNEL V0,R0,+8
  8062. 8E090000 LW T1,0000 (S0)
  8063. 8E080000 LW T0,0000 (S0) # leocmd = @801E5E78
  8064. 3C040015 LUI A0,0015
  8065. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8066. 8D050010 LW A1,0010 (T0) # LED on/off time = @leocmd+10
  8067. 50400008 BEQL V0,R0,+8
  8068. 8E0C0000 LW T4,0000 (S0)
  8069. 8E090000 LW T1,0000 (S0) # leocmd = @801E5E78
  8070. 240A0002 ADDIU T2,R0,0002
  8071. A1220005 SB V0,0005 (T1) # leocmd[5] = sensecode
  8072. 8E0B0000 LW T3,0000 (S0)
  8073. 10000005 BEQ R0,R0,+5
  8074. A16A0004 SB T2,0004 (T3) # leocmd[4] = 2: check condition
  8075. 8E0C0000 LW T4,0000 (S0) # leocmd = @801E5E78
  8076. A1820005 SB V0,0005 (T4) # leocmd[5] = sensecode
  8077. 8E0D0000 LW T5,0000 (S0)
  8078. A1A00004 SB R0,0004 (T5) # leocmd[4] = 0
  8079. 8FBF001C LW RA,001C (SP)
  8080. 8FB00018 LW S0,0018 (SP)
  8081. 27BD0020 ADDIU SP,SP,0020
  8082. 03E00008 JR RA
  8083. 00000000 NOP
  8084.  
  8085. 00000000 NOP
  8086. 00000000 NOP
  8087.  
  8088. 801CE2A0 0x7420 handle leocmd 9: read capacity
  8089. 3C03801E LUI V1,801E
  8090. 24635E78 ADDIU V1,V1,5E78
  8091. 8C620000 LW V0,0000 (V1) # leocmd = @801E5E78
  8092. 3C04801E LUI A0,801E
  8093. 24845E88 ADDIU A0,A0,5E88
  8094. 904E0002 LBU T6,0002 (V0)
  8095. 31CF0001 ANDI T7,T6,0001
  8096. 51E00014 BEQL T7,R0,+20 # if leocmd[2] & 1: development disk
  8097. AC40000C SW R0,000C (V0)
  8098. @801CE2C4: retail disk
  8099. 90980000 LBU T8,0000 (A0) # disk type = 801E5E88[0]
  8100. 3C08801E LUI T0,801E
  8101. 240A10C3 ADDIU T2,R0,10C3
  8102. 0018C840 SLL T9,T8,0x1
  8103. 01194021 ADDU T0,T0,T9
  8104. 95089698 LHU T0,9698 (T0) # 801D9698[disk]: highest unwritable LBA for disk type
  8105. 3C0E801E LUI T6,801E
  8106. 2509FFE8 ADDIU T1,T0,FFE8
  8107. AC49000C SW T1,000C (V0) # leocmd+C = highest LBA - 24: start LBA
  8108. 8C6B0000 LW T3,0000 (V1)
  8109. AD6A0010 SW T2,0010 (T3) # leocmd+10 = 0x10C3: end LBA
  8110. 908C0000 LBU T4,0000 (A0)
  8111. 8C6F0000 LW T7,0000 (V1)
  8112. 000C6880 SLL T5,T4,0x2
  8113. 01CD7021 ADDU T6,T6,T5
  8114. 8DCE96A8 LW T6,96A8 (T6)
  8115. 10000009 BEQ R0,R0,+9
  8116. ADEE0014 SW T6,0014 (T7)
  8117. @801CE30C: dev disk
  8118. AC40000C SW R0,000C (V0) # leocmd+C = 0: start LBA
  8119. 8C790000 LW T9,0000 (V1)
  8120. 241810C3 ADDIU T8,R0,10C3
  8121. 3C0803D7 LUI T0,03D7
  8122. AF380010 SW T8,0010 (T9) # leocmd+10 = 0x10C3: end LBA
  8123. 8C690000 LW T1,0000 (V1)
  8124. 35088F40 ORI T0,T0,8F40
  8125. AD280014 SW T0,0014 (T1) # leocmd+14 = 0x3D78F40: size in bytes
  8126. 8C6A0000 LW T2,0000 (V1)
  8127. 03E00008 JR RA
  8128. A1400004 SB R0,0004 (T2) # leocmd[4] = 0
  8129.  
  8130. 00000000 NOP
  8131. 00000000 NOP
  8132.  
  8133. 801CE340 0x74C0 fill 801E5E90 with seek info for LBA A0
  8134. accepts: A0=LBA
  8135. 3C08801E LUI T0,801E
  8136. 308E0001 ANDI T6,A0,0001
  8137. 240F0002 ADDIU T7,R0,0002
  8138. 25085E90 ADDIU T0,T0,5E90
  8139. 27BDFFE8 ADDIU SP,SP,FFE8
  8140. 01EEC023 SUBU T8,T7,T6
  8141. 30820003 ANDI V0,A0,0003
  8142. AFBF0014 SW RA,0014 (SP)
  8143. 10400006 BEQ V0,R0,+6 # if (A0 & 3) in (0, 3): 801E5E90[A] = 0
  8144. A1180009 SB T8,0009 (T0) # 801E5E90[9] = 2 - (A0 & 1)
  8145. 24010003 ADDIU AT,R0,0003
  8146. 10410003 BEQ V0,AT,+3 # else: 801E5E90[A] = 1
  8147. 24190001 ADDIU T9,R0,0001
  8148. 10000002 BEQ R0,R0,+2
  8149. A119000A SB T9,000A (T0)
  8150. @801CE37C
  8151. A100000A SB R0,000A (T0)
  8152. @801CE380
  8153. 0C07394D JAL 801CE534 # vzone for LBA A0
  8154. AFA40018 SW A0,0018 (SP)
  8155. 3C05801E LUI A1,801E
  8156. 90A55E88 LBU A1,5E88 (A1) # disk type = 801E5E88[0]
  8157. 3C04801E LUI A0,801E
  8158. 3C08801E LUI T0,801E
  8159. 00056100 SLL T4,A1,0x4
  8160. 01826821 ADDU T5,T4,V0
  8161. 008D2021 ADDU A0,A0,T5
  8162. 90849618 LBU A0,9618 (A0) # logical zone assignments for disk type = 801D9618[disk][vzone]
  8163. 25085E90 ADDIU T0,T0,5E90
  8164. 8FAB0018 LW T3,0018 (SP)
  8165. 308A00FF ANDI T2,A0,00FF
  8166. 29410008 SLTI AT,T2,0008
  8167. A1000007 SB R0,0007 (T0) # 801E5E90[7] = 0: head
  8168. 01401825 OR V1,T2,R0
  8169. 14200006 BNE AT,R0,+6
  8170. A1040008 SB A0,0008 (T0) # 801E5E90[8] = pzone same as lzone
  8171. @801CE3C8: logical zone needs conversion to physical if over 7
  8172. 246FFFF9 ADDIU T7,V1,FFF9
  8173. 240E0001 ADDIU T6,R0,0001
  8174. A10F0008 SB T7,0008 (T0) # 801E5E90[8] = lzone - 7: pzone
  8175. A10E0007 SB T6,0007 (T0) # 801E5E90[7] = 1: head
  8176. 31EA00FF ANDI T2,T7,00FF
  8177. @801CE3DC
  8178. 0004C040 SLL T8,A0,0x1
  8179. 3C09801E LUI T1,801E
  8180. 01384821 ADDU T1,T1,T8
  8181. 10400008 BEQ V0,R0,+8
  8182. 952995F8 LHU T1,95F8 (T1) # initial track for zone = 801D95F8[lzone]
  8183. @801CE3F0
  8184. 0005C940 SLL T9,A1,0x5
  8185. 00026040 SLL T4,V0,0x1
  8186. 032C6821 ADDU T5,T9,T4
  8187. 3C03801E LUI V1,801E
  8188. 006D1821 ADDU V1,V1,T5
  8189. 10000002 BEQ R0,R0,+2
  8190. 94639516 LHU V1,9516 (V1) # initial LBA for zone = 801D9518[disk][vzone-1]
  8191. @801CE40C
  8192. 00001825 OR V1,R0,R0 # initial LBA = 0 if vzone == 0
  8193. @801CE410
  8194. 910F0007 LBU T7,0007 (T0) T7 = head
  8195. 01637023 SUBU T6,T3,V1
  8196. 000EC842 SRL T9,T6,0x1 # T9 = (LBA - initial LBA) >> 1
  8197. 11E00009 BEQ T7,R0,+9
  8198. 3C01801E LUI AT,801E
  8199. @801CE424: head 1 - count backward
  8200. 01396023 SUBU T4,T1,T9
  8201. 3C09801E LUI T1,801E
  8202. 000A6840 SLL T5,T2,0x1
  8203. 3C01801E LUI AT,801E
  8204. 012D4821 ADDU T1,T1,T5
  8205. A42C5E92 SH T4,5E92 (AT) # 801E5E90[0:2] = initial track - ((LBA - initial LBA) >> 1)
  8206. 10000005 BEQ R0,R0,+5
  8207. 95299686 LHU T1,9686 (T1) # initial track for physical zone = 801D9688[pzone - 1]
  8208. @801CE444: head 0 - count forward
  8209. 01637823 SUBU T7,T3,V1
  8210. 000FC042 SRL T8,T7,0x1
  8211. 0138C821 ADDU T9,T1,T8
  8212. A4395E92 SH T9,5E92 (AT) # 801E5E90[0:2] = initial track + ((LBA - initial LBA) >> 1)
  8213. @801CE454
  8214. 10800005 BEQ A0,R0,+5
  8215. 3C07801E LUI A3,801E
  8216. @801CE45C
  8217. 24E751A0 ADDIU A3,A3,51A0
  8218. 00E46021 ADDU T4,A3,A0
  8219. 10000004 BEQ R0,R0,+4
  8220. 91850007 LBU A1,0007 (T4) # A1 = 801E51A0[7 + lzone]
  8221. @801CE46C
  8222. 3C07801E LUI A3,801E
  8223. 24E751A0 ADDIU A3,A3,51A0
  8224. 00002825 OR A1,R0,R0 # if not lzone, A1 = 0
  8225. @801CE478
  8226. 00E46821 ADDU T5,A3,A0
  8227. 91AF0008 LBU T7,0008 (T5) # T7 = 801E51A0[8 + lzone]
  8228. 01203025 OR A2,T1,R0
  8229. 01E51823 SUBU V1,T7,A1
  8230. 306EFFFF ANDI T6,V1,FFFF
  8231. 11C00011 BEQ T6,R0,+17
  8232. 01C01825 OR V1,T6,R0
  8233. @801CE494
  8234. 00E5C021 ADDU T8,A3,A1
  8235. 93190020 LBU T9,0020 (T8) # T9 = 801E51A0[A1]
  8236. 95040002 LHU A0,0002 (T0)
  8237. 24A50001 ADDIU A1,A1,0001
  8238. 03261021 ADDU V0,T9,A2
  8239. 304CFFFF ANDI T4,V0,FFFF
  8240. 008C082A SLT AT,A0,T4
  8241. 14200008 BNE AT,R0,+8
  8242. 248D0001 ADDIU T5,A0,0001
  8243. 2463FFFF ADDIU V1,V1,FFFF
  8244. 30AFFFFF ANDI T7,A1,FFFF
  8245. 306EFFFF ANDI T6,V1,FFFF
  8246. A50D0002 SH T5,0002 (T0) # 801E9E90[2:4] += 1
  8247. 01E02825 OR A1,T7,R0
  8248. 15C0FFF1 BNE T6,R0,-15
  8249. 01C01825 OR V1,T6,R0
  8250. @801CE4D4
  8251. 3C18801E LUI T8,801E
  8252. 030AC021 ADDU T8,T8,T2
  8253. 931894F8 LBU T8,94F8 (T8)
  8254. 000AC840 SLL T9,T2,0x1
  8255. 3C0C801E LUI T4,801E
  8256. 01996021 ADDU T4,T4,T9
  8257. A1180006 SB T8,0006 (T0) # 801E5E90[6:8] = 801D94F8[pzone]: pzone track length
  8258. 958C9504 LHU T4,9504 (T4)
  8259. 3C0D801E LUI T5,801E
  8260. 2D61000C SLTIU AT,T3,000C
  8261. A50C0004 SH T4,0004 (T0) # 801E5E90[4:6] = 801D9504[pzone]: pzone block size
  8262. 8DAD5E9C LW T5,5E9C (T5) # region = @801E5E9C
  8263. 55A00007 BNEL T5,R0,+7 # return if retail
  8264. 8FBF0014 LW RA,0014 (SP)
  8265. 10200004 BEQ AT,R0,+4 # return if a system LBA < 12
  8266. 240F00C0 ADDIU T7,R0,00C0
  8267. 240E3FC0 ADDIU T6,R0,3FC0
  8268. A10F0006 SB T7,0006 (T0) # 801E5E90[6:8] = 0xC0: dev system area track length
  8269. A50E0004 SH T6,0004 (T0) # 801E5E90[4:6] = 0x3FC0: dev system area block size
  8270. 8FBF0014 LW RA,0014 (SP)
  8271. 27BD0018 ADDIU SP,SP,0018
  8272. 00001025 OR V0,R0,R0
  8273. 03E00008 JR RA
  8274. 00000000 NOP
  8275.  
  8276. 801CE534 0x76B4 vzone for LBA A0
  8277. accepts: A0=LBA
  8278. 3C0E801E LUI T6,801E
  8279. 91CE5E88 LBU T6,5E88 (T6) # 801E5E88[0]: disk type
  8280. 3C18801E LUI T8,801E
  8281. 27189518 ADDIU T8,T8,9518
  8282. 000E7940 SLL T7,T6,0x5
  8283. 01F81021 ADDU V0,T7,T8
  8284. 00001825 OR V1,R0,R0
  8285. 94590000 LHU T9,0000 (V0) # LBAs per zone = 801D9518[disk type]
  8286. 24420002 ADDIU V0,V0,0002
  8287. 0099082B SLTU AT,A0,T9
  8288. 50200004 BEQL AT,R0,+4 # continue until zone found
  8289. 24630001 ADDIU V1,V1,0001
  8290. 03E00008 JR RA
  8291. 00601025 OR V0,V1,R0
  8292. @801CE56C
  8293. 24630001 ADDIU V1,V1,0001
  8294. 3068FFFF ANDI T0,V1,FFFF
  8295. 29010010 SLTI AT,T0,0010
  8296. 1420FFF5 BNE AT,R0,-11
  8297. 01001825 OR V1,T0,R0
  8298. 240200FF ADDIU V0,R0,00FF
  8299. 03E00008 JR RA
  8300. 00000000 NOP
  8301.  
  8302. 00000000 NOP
  8303.  
  8304. 801CE590 0x7710 handle leocmd 4: rezero
  8305. 27BDFFE0 ADDIU SP,SP,FFE0
  8306. AFB00014 SW S0,0014 (SP)
  8307. AFBF001C SW RA,001C (SP)
  8308. AFB10018 SW S1,0018 (SP)
  8309. 24100008 ADDIU S0,R0,0008
  8310. 0C073265 JAL 801CC994
  8311. 00000000 NOP
  8312. 1440000B BNE V0,R0,+11
  8313. 305100FF ANDI S1,V0,00FF
  8314. 3C02801E LUI V0,801E
  8315. 24425E90 ADDIU V0,V0,5E90
  8316. 3C03801E LUI V1,801E
  8317. 24635E78 ADDIU V1,V1,5E78
  8318. 8C6E0000 LW T6,0000 (V1) # leocmd = @801E5E78
  8319. A4400002 SH R0,0002 (V0) # 801E5E90[2:4] = 0
  8320. A0400007 SB R0,0007 (V0) # 801E5E90[7] = 0
  8321. A0400008 SB R0,0008 (V0) # 801E5E90[8] = 0
  8322. 10000010 BEQ R0,R0,+16
  8323. A1C00004 SB R0,0004 (T6) # 801E5E90[4] = 0
  8324. 0C0732AC JAL 801CCAB0
  8325. 02202025 OR A0,S1,R0
  8326. 14400005 BNE V0,R0,+5
  8327. 02001025 OR V0,S0,R0
  8328. 2610FFFF ADDIU S0,S0,FFFF
  8329. 320F00FF ANDI T7,S0,00FF
  8330. 1440FFEB BNE V0,R0,-21
  8331. 01E08025 OR S0,T7,R0
  8332. 3C03801E LUI V1,801E
  8333. 24635E78 ADDIU V1,V1,5E78
  8334. 8C780000 LW T8,0000 (V1) # leocmd = @801E5E78
  8335. 24190002 ADDIU T9,R0,0002
  8336. A3110005 SB S1,0005 (T8) # leocmd[5] = sensecode
  8337. 8C680000 LW T0,0000 (V1)
  8338. A1190004 SB T9,0004 (T0) # leocmd[4] = 2: check condition
  8339. 8FBF001C LW RA,001C (SP)
  8340. 8FB00014 LW S0,0014 (SP)
  8341. 8FB10018 LW S1,0018 (SP)
  8342. 03E00008 JR RA
  8343. 27BD0020 ADDIU SP,SP,0020
  8344.  
  8345. 00000000 NOP
  8346.  
  8347. 801CE630 0x77B0 clear leocmd queue
  8348. 3C0E801E LUI T6,801E
  8349. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  8350. 27BDFFD8 ADDIU SP,SP,FFD8
  8351. AFBF0014 SW RA,0014 (SP)
  8352. 15C00003 BNE T6,R0,+3
  8353. 240F0001 ADDIU T7,R0,0001
  8354. 10000008 BEQ R0,R0,+8
  8355. 2402FFFF ADDIU V0,R0,FFFF
  8356. A3AF001C SB T7,001C (SP) # leocmd[0] = 1: clear queue
  8357. A3A0001D SB R0,001D (SP)
  8358. A3A0001E SB R0,001E (SP)
  8359. A3A0001F SB R0,001F (SP)
  8360. 0C072A69 JAL 801CA9A4 # send leocmd A0
  8361. 27A4001C ADDIU A0,SP,001C
  8362. 00001025 OR V0,R0,R0 # return 0
  8363. 8FBF0014 LW RA,0014 (SP)
  8364. 27BD0028 ADDIU SP,SP,0028
  8365. 03E00008 JR RA
  8366. 00000000 NOP
  8367.  
  8368. 00000000 NOP
  8369.  
  8370. 801CE680 0x7800 V0=sensecode; A2 = #LBAs for A1 bytes at LBA A0
  8371. accepts: A0=LBA, A1=length, A2=p->target
  8372. 27BDFFC0 ADDIU SP,SP,FFC0
  8373. 3C0E801E LUI T6,801E
  8374. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  8375. AFB1001C SW S1,001C (SP)
  8376. AFB00018 SW S0,0018 (SP)
  8377. 00A08025 OR S0,A1,R0
  8378. 00808825 OR S1,A0,R0
  8379. AFBF0034 SW RA,0034 (SP)
  8380. AFB60030 SW S6,0030 (SP)
  8381. AFB5002C SW S5,002C (SP)
  8382. AFB40028 SW S4,0028 (SP)
  8383. AFB30024 SW S3,0024 (SP)
  8384. AFB20020 SW S2,0020 (SP)
  8385. 15C00003 BNE T6,R0,+3
  8386. AFA60048 SW A2,0048 (SP)
  8387. 1000003D BEQ R0,R0,+61
  8388. 2402FFFF ADDIU V0,R0,FFFF
  8389. @801CE6C4
  8390. 00009825 OR S3,R0,R0
  8391. 24050001 ADDIU A1,R0,0001
  8392. 24020001 ADDIU V0,R0,0001
  8393. 12000035 BEQ S0,R0,+53
  8394. 26310018 ADDIU S1,S1,0018 # LBA += 24: add system LBAs
  8395. @801CE6D8
  8396. 3C16801E LUI S6,801E
  8397. 3C15801E LUI S5,801E
  8398. 3C14801E LUI S4,801E
  8399. 3C12801E LUI S2,801E
  8400. 26525E88 ADDIU S2,S2,5E88 # 801E5E88
  8401. 26949518 ADDIU S4,S4,9518 # 801D9518
  8402. 26B59618 ADDIU S5,S5,9618 # 801D9618
  8403. 26D69504 ADDIU S6,S6,9504 # 801D9504
  8404. 8FA40038 LW A0,0038 (SP)
  8405. 14400009 BNE V0,R0,+9 # skip on first run
  8406. 00000000 NOP
  8407. @801CE704
  8408. 924F0000 LBU T7,0000 (S2) # 801E5E88[0]: disk type
  8409. 00054040 SLL T0,A1,0x1
  8410. 000FC140 SLL T8,T7,0x5
  8411. 0298C821 ADDU T9,S4,T8
  8412. 03284821 ADDU T1,T9,T0
  8413. 952A0000 LHU T2,0000 (T1) # LBAs for zone = 801D9518[disk][i]
  8414. 562A0013 BNEL S1,T2,+19
  8415. 0204082B SLTU AT,S0,A0
  8416. @801CE724
  8417. 0C07394D JAL 801CE534 # vzone for LBA A0
  8418. 02202025 OR A0,S1,R0 # LBA
  8419. 924B0000 LBU T3,0000 (S2) # 801E5E88[0]: disk type
  8420. 3045FFFF ANDI A1,V0,FFFF
  8421. 000B6100 SLL T4,T3,0x4
  8422. 02AC6821 ADDU T5,S5,T4
  8423. 01A27021 ADDU T6,T5,V0
  8424. 91C30000 LBU V1,0000 (T6) # lzone = 801D9618[disk][vzone]: logical zone for disk type
  8425. 28610008 SLTI AT,V1,0008
  8426. 14200004 BNE AT,R0,+4 # pzone = zone if zone < 8 else zone - 7
  8427. 00602025 OR A0,V1,R0
  8428. 2483FFF9 ADDIU V1,A0,FFF9
  8429. 306FFFFF ANDI T7,V1,FFFF
  8430. 01E01825 OR V1,T7,R0
  8431. 0003C040 SLL T8,V1,0x1
  8432. 02D8C821 ADDU T9,S6,T8
  8433. 97240000 LHU A0,0000 (T9) # A0 = 801D9504[pzone]: block size
  8434. @801CE768: length = min(0, length - block size)
  8435. 0204082B SLTU AT,S0,A0
  8436. 10200003 BEQ AT,R0,+3
  8437. 26730001 ADDIU S3,S3,0001
  8438. 10000002 BEQ R0,R0,+2
  8439. 00008025 OR S0,R0,R0 # if block size > length, length = 0
  8440. @801CE77C
  8441. 02048023 SUBU S0,S0,A0 # length -= block size
  8442. @801CE780
  8443. 12000006 BEQ S0,R0,+6
  8444. 26310001 ADDIU S1,S1,0001
  8445. 2E2110DC SLTIU AT,S1,10DC
  8446. 14200003 BNE AT,R0,+3
  8447. 00000000 NOP
  8448. 10000007 BEQ R0,R0,+7 # if LBA > 0x10DC, return 0x20: LBA out of range
  8449. 24020020 ADDIU V0,R0,0020
  8450. @801CE79C
  8451. 1600FFD7 BNE S0,R0,-41 # while more LBAs remain and length > 0, loop
  8452. 00001025 OR V0,R0,R0
  8453. AFA40038 SW A0,0038 (SP)
  8454. 8FA80048 LW T0,0048 (SP)
  8455. 00001025 OR V0,R0,R0
  8456. AD130000 SW S3,0000 (T0) # A2 = #blocks
  8457. 8FBF0034 LW RA,0034 (SP)
  8458. 8FB00018 LW S0,0018 (SP)
  8459. 8FB1001C LW S1,001C (SP)
  8460. 8FB20020 LW S2,0020 (SP)
  8461. 8FB30024 LW S3,0024 (SP)
  8462. 8FB40028 LW S4,0028 (SP)
  8463. 8FB5002C LW S5,002C (SP)
  8464. 8FB60030 LW S6,0030 (SP)
  8465. 03E00008 JR RA
  8466. 27BD0040 ADDIU SP,SP,0040
  8467.  
  8468. 00000000 NOP
  8469.  
  8470. 801CE7E0 0x7960 handle leocmd 1: clear leo queue
  8471. 27BDFFD0 ADDIU SP,SP,FFD0
  8472. AFB2001C SW S2,001C (SP)
  8473. 3C12801E LUI S2,801E
  8474. AFB30020 SW S3,0020 (SP)
  8475. 27B3002C ADDIU S3,SP,002C
  8476. 26525DE8 ADDIU S2,S2,5DE8
  8477. AFBF0024 SW RA,0024 (SP)
  8478. AFB10018 SW S1,0018 (SP)
  8479. AFB00014 SW S0,0014 (SP)
  8480. 02402025 OR A0,S2,R0 # queue = 801E5DE8
  8481. 02602825 OR A1,S3,R0 # target = SP+2C: p->leocmd
  8482. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  8483. 00003025 OR A2,R0,R0 # read
  8484. 14400015 BNE V0,R0,+21
  8485. 24110002 ADDIU S1,R0,0002
  8486. @801CE81C
  8487. 24100022 ADDIU S0,R0,0022
  8488. 8FAE002C LW T6,002C (SP)
  8489. 24050022 ADDIU A1,R0,0022 # msg = 0x22: command terminated
  8490. 24060001 ADDIU A2,R0,0001 # jam
  8491. A1D00005 SB S0,0005 (T6) # leocmd[5] = 0x22: command terminated
  8492. 8FAF002C LW T7,002C (SP)
  8493. A1F10004 SB S1,0004 (T7) # leocmd[4] = 2: check condition
  8494. 8FB8002C LW T8,002C (SP)
  8495. 93190002 LBU T9,0002 (T8)
  8496. 33280080 ANDI T0,T9,0080
  8497. 51000004 BEQL T0,R0,+4 # if status & 0x80, post to queue
  8498. 02402025 OR A0,S2,R0
  8499. @801CE84C
  8500. 0C000788 JAL 80001E20 # send or jam (A2) msg A1 to queue A0
  8501. 8F040008 LW A0,0008 (T8) # queue = @leocmd+8
  8502. 02402025 OR A0,S2,R0 # queue = 801E5DE8
  8503. 02602825 OR A1,S3,R0 # target = SP+2C: p->leocmd
  8504. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  8505. 00003025 OR A2,R0,R0 # read
  8506. 5040FFEF BEQL V0,R0,-17
  8507. 8FAE002C LW T6,002C (SP)
  8508. @801CE86C
  8509. 8FBF0024 LW RA,0024 (SP)
  8510. 8FB00014 LW S0,0014 (SP)
  8511. 8FB10018 LW S1,0018 (SP)
  8512. 8FB2001C LW S2,001C (SP)
  8513. 8FB30020 LW S3,0020 (SP)
  8514. 03E00008 JR RA
  8515. 27BD0030 ADDIU SP,SP,0030
  8516.  
  8517. 801CE888 0x7A08 handle leocmd 0xF: diagnostics catching LEO_SENSE_COMMAND_PHASE_ERROR, LEO_SENSE_DEVICE_COMMUNICATION_FAILURE, LEO_SENSE_POWERONRESET_DEVICERESET_OCCURED
  8518. 27BDFFE8 ADDIU SP,SP,FFE8
  8519. AFBF0014 SW RA,0014 (SP)
  8520. 0C0730E0 JAL 801CC380
  8521. 00000000 NOP
  8522. 24010003 ADDIU AT,R0,0003
  8523. 10410005 BEQ V0,AT,+5
  8524. 3C03801E LUI V1,801E
  8525. 24010029 ADDIU AT,R0,0029
  8526. 10410002 BEQ V0,AT,+2
  8527. 2401002B ADDIU AT,R0,002B
  8528. 14410007 BNE V0,AT,+7
  8529. 24635E78 ADDIU V1,V1,5E78
  8530. 8C6E0000 LW T6,0000 (V1) # leocmd = @801E5E78
  8531. 240F0002 ADDIU T7,R0,0002
  8532. A1C20005 SB V0,0005 (T6) # leocmd[5] = sensecode
  8533. 8C780000 LW T8,0000 (V1)
  8534. 10000007 BEQ R0,R0,+7
  8535. A30F0004 SB T7,0004 (T8) # leocmd[4] = 2: check condition
  8536. 3C03801E LUI V1,801E
  8537. 24635E78 ADDIU V1,V1,5E78
  8538. 8C790000 LW T9,0000 (V1) # leocmd = @801E5E78
  8539. A3200005 SB R0,0005 (T9)
  8540. 8C680000 LW T0,0000 (V1)
  8541. A1000004 SB R0,0004 (T0) # leocmd[4:6] = (0, 0)
  8542. 8FBF0014 LW RA,0014 (SP)
  8543. 27BD0018 ADDIU SP,SP,0018
  8544. 03E00008 JR RA
  8545. 00000000 NOP
  8546.  
  8547. 00000000 NOP
  8548. 00000000 NOP
  8549.  
  8550. 801CE900 0x7A80 handle leocmd 0xA: translate
  8551. 27BDFFB8 ADDIU SP,SP,FFB8
  8552. 3C03801E LUI V1,801E
  8553. 8C635E78 LW V1,5E78 (V1) # leocmd = @801E5E78
  8554. AFBF0034 SW RA,0034 (SP)
  8555. AFB60030 SW S6,0030 (SP)
  8556. AFB5002C SW S5,002C (SP)
  8557. AFB40028 SW S4,0028 (SP)
  8558. AFB30024 SW S3,0024 (SP)
  8559. AFB20020 SW S2,0020 (SP)
  8560. AFB1001C SW S1,001C (SP)
  8561. AFB00018 SW S0,0018 (SP)
  8562. 8C64000C LW A0,000C (V1) # LBA = @leocmd+C
  8563. 240E0020 ADDIU T6,R0,0020
  8564. 00009025 OR S2,R0,R0
  8565. 2C8110C4 SLTIU AT,A0,10C4
  8566. 14200007 BNE AT,R0,+7
  8567. 24900018 ADDIU S0,A0,0018
  8568. A06E0005 SB T6,0005 (V1) # leocmd[5] = 0x20: LBA out of range
  8569. 3C18801E LUI T8,801E
  8570. 8F185E78 LW T8,5E78 (T8)
  8571. 240F0002 ADDIU T7,R0,0002
  8572. 10000085 BEQ R0,R0,+133
  8573. A30F0004 SB T7,0004 (T8) # leocmd[4] = 2: check condition
  8574. 90790002 LBU T9,0002 (V1)
  8575. 00008825 OR S1,R0,R0
  8576. 24050001 ADDIU A1,R0,0001
  8577. 33280001 ANDI T0,T9,0001
  8578. 11000041 BEQ T0,R0,+65
  8579. 24020001 ADDIU V0,R0,0001
  8580. 8C710010 LW S1,0010 (V1)
  8581. 3C16801E LUI S6,801E
  8582. 26D69504 ADDIU S6,S6,9504
  8583. 1220003A BEQ S1,R0,+58
  8584. 3C15801E LUI S5,801E
  8585. 3C14801E LUI S4,801E
  8586. 3C13801E LUI S3,801E
  8587. 26735E88 ADDIU S3,S3,5E88
  8588. 26949518 ADDIU S4,S4,9518
  8589. 26B59618 ADDIU S5,S5,9618
  8590. 8FA30038 LW V1,0038 (SP)
  8591. 14400009 BNE V0,R0,+9
  8592. 00000000 NOP
  8593. 92690000 LBU T1,0000 (S3)
  8594. 00056040 SLL T4,A1,0x1
  8595. 00095140 SLL T2,T1,0x5
  8596. 028A5821 ADDU T3,S4,T2
  8597. 016C6821 ADDU T5,T3,T4
  8598. 95AE0000 LHU T6,0000 (T5)
  8599. 560E0013 BNEL S0,T6,+19
  8600. 0223082B SLTU AT,S1,V1
  8601. 0C07394D JAL 801CE534 # vzone for LBA A0
  8602. 02002025 OR A0,S0,R0
  8603. 926F0000 LBU T7,0000 (S3)
  8604. 3045FFFF ANDI A1,V0,FFFF
  8605. 000FC100 SLL T8,T7,0x4
  8606. 02B8C821 ADDU T9,S5,T8
  8607. 03224021 ADDU T0,T9,V0
  8608. 91040000 LBU A0,0000 (T0)
  8609. 28810008 SLTI AT,A0,0008
  8610. 14200004 BNE AT,R0,+4
  8611. 00801825 OR V1,A0,R0
  8612. 2464FFF9 ADDIU A0,V1,FFF9
  8613. 3089FFFF ANDI T1,A0,FFFF
  8614. 01202025 OR A0,T1,R0
  8615. 00045040 SLL T2,A0,0x1
  8616. 02CA5821 ADDU T3,S6,T2
  8617. 95630000 LHU V1,0000 (T3)
  8618. 0223082B SLTU AT,S1,V1
  8619. 10200003 BEQ AT,R0,+3
  8620. 26520001 ADDIU S2,S2,0001
  8621. 10000002 BEQ R0,R0,+2
  8622. 00008825 OR S1,R0,R0
  8623. 02238823 SUBU S1,S1,V1
  8624. 1220000C BEQ S1,R0,+12
  8625. 26100001 ADDIU S0,S0,0001
  8626. 2E0110DC SLTIU AT,S0,10DC
  8627. 14200009 BNE AT,R0,+9
  8628. 3C0D801E LUI T5,801E
  8629. 8DAD5E78 LW T5,5E78 (T5) # leocmd = @801E5E78
  8630. 240C0020 ADDIU T4,R0,0020
  8631. 3C0F801E LUI T7,801E
  8632. A1AC0005 SB T4,0005 (T5)
  8633. 8DEF5E78 LW T7,5E78 (T7) # leocmd = @801E5E78
  8634. 240E0002 ADDIU T6,R0,0002
  8635. 10000046 BEQ R0,R0,+70
  8636. A1EE0004 SB T6,0004 (T7)
  8637. 1620FFD1 BNE S1,R0,-47
  8638. 00001025 OR V0,R0,R0
  8639. AFA30038 SW V1,0038 (SP)
  8640. 3C03801E LUI V1,801E
  8641. 8C635E78 LW V1,5E78 (V1) # leocmd = @801E5E78
  8642. 1000003C BEQ R0,R0,+60
  8643. AC720014 SW S2,0014 (V1)
  8644. 8C720010 LW S2,0010 (V1)
  8645. 3C16801E LUI S6,801E
  8646. 26D69504 ADDIU S6,S6,9504
  8647. 12400036 BEQ S2,R0,+54
  8648. 3C15801E LUI S5,801E
  8649. 3C14801E LUI S4,801E
  8650. 3C13801E LUI S3,801E
  8651. 26735E88 ADDIU S3,S3,5E88
  8652. 26949518 ADDIU S4,S4,9518
  8653. 26B59618 ADDIU S5,S5,9618
  8654. 8FA30038 LW V1,0038 (SP)
  8655. 14400009 BNE V0,R0,+9
  8656. 00000000 NOP
  8657. 92780000 LBU T8,0000 (S3)
  8658. 00054840 SLL T1,A1,0x1
  8659. 0018C940 SLL T9,T8,0x5
  8660. 02994021 ADDU T0,S4,T9
  8661. 01095021 ADDU T2,T0,T1
  8662. 954B0000 LHU T3,0000 (T2)
  8663. 560B0013 BNEL S0,T3,+19
  8664. 2652FFFF ADDIU S2,S2,FFFF
  8665. 0C07394D JAL 801CE534 # vzone for LBA A0
  8666. 02002025 OR A0,S0,R0
  8667. 926C0000 LBU T4,0000 (S3)
  8668. 3045FFFF ANDI A1,V0,FFFF
  8669. 000C6900 SLL T5,T4,0x4
  8670. 02AD7021 ADDU T6,S5,T5
  8671. 01C27821 ADDU T7,T6,V0
  8672. 91E40000 LBU A0,0000 (T7)
  8673. 28810008 SLTI AT,A0,0008
  8674. 14200004 BNE AT,R0,+4
  8675. 00801825 OR V1,A0,R0
  8676. 2464FFF9 ADDIU A0,V1,FFF9
  8677. 3098FFFF ANDI T8,A0,FFFF
  8678. 03002025 OR A0,T8,R0
  8679. 0004C840 SLL T9,A0,0x1
  8680. 02D94021 ADDU T0,S6,T9
  8681. 95030000 LHU V1,0000 (T0)
  8682. 2652FFFF ADDIU S2,S2,FFFF
  8683. 02238821 ADDU S1,S1,V1
  8684. 1240000C BEQ S2,R0,+12
  8685. 26100001 ADDIU S0,S0,0001
  8686. 2E0110DC SLTIU AT,S0,10DC
  8687. 14200009 BNE AT,R0,+9
  8688. 3C0A801E LUI T2,801E
  8689. 8D4A5E78 LW T2,5E78 (T2) # leocmd = @801E5E78
  8690. 24090020 ADDIU T1,R0,0020
  8691. 3C0C801E LUI T4,801E
  8692. A1490005 SB T1,0005 (T2)
  8693. 8D8C5E78 LW T4,5E78 (T4) # leocmd = @801E5E78
  8694. 240B0002 ADDIU T3,R0,0002
  8695. 1000000A BEQ R0,R0,+10
  8696. A18B0004 SB T3,0004 (T4)
  8697. 1640FFD5 BNE S2,R0,-43
  8698. 00001025 OR V0,R0,R0
  8699. AFA30038 SW V1,0038 (SP)
  8700. 3C03801E LUI V1,801E
  8701. 8C635E78 LW V1,5E78 (V1) # leocmd = @801E5E78
  8702. AC710014 SW S1,0014 (V1)
  8703. 3C0D801E LUI T5,801E
  8704. 8DAD5E78 LW T5,5E78 (T5) # leocmd = @801E5E78
  8705. A1A00004 SB R0,0004 (T5)
  8706. 8FBF0034 LW RA,0034 (SP)
  8707. 8FB00018 LW S0,0018 (SP)
  8708. 8FB1001C LW S1,001C (SP)
  8709. 8FB20020 LW S2,0020 (SP)
  8710. 8FB30024 LW S3,0024 (SP)
  8711. 8FB40028 LW S4,0028 (SP)
  8712. 8FB5002C LW S5,002C (SP)
  8713. 8FB60030 LW S6,0030 (SP)
  8714. 03E00008 JR RA
  8715. 27BD0048 ADDIU SP,SP,0048
  8716.  
  8717. 00000000 NOP
  8718. 00000000 NOP
  8719. 00000000 NOP
  8720.  
  8721. 801CEBA0 0x7D20 handle leocmd 0xD: read time
  8722. 27BDFFD0 ADDIU SP,SP,FFD0
  8723. AFBF0014 SW RA,0014 (SP)
  8724. 0C073BA5 JAL 801CEE94 # read time from RTC to A0
  8725. 27A40020 ADDIU A0,SP,0020
  8726. 3C03801E LUI V1,801E
  8727. 24635E78 ADDIU V1,V1,5E78
  8728. 8C6F0000 LW T7,0000 (V1) # leocmd = @801E5E78
  8729. 93AE0020 LBU T6,0020 (SP)
  8730. A1EE000E SB T6,000E (T7)
  8731. 8C790000 LW T9,0000 (V1)
  8732. 93B80021 LBU T8,0021 (SP)
  8733. A338000F SB T8,000F (T9)
  8734. 8C690000 LW T1,0000 (V1)
  8735. 93A80022 LBU T0,0022 (SP)
  8736. A1280010 SB T0,0010 (T1)
  8737. 8C6B0000 LW T3,0000 (V1)
  8738. 93AA0023 LBU T2,0023 (SP)
  8739. A16A0011 SB T2,0011 (T3)
  8740. 8C6D0000 LW T5,0000 (V1)
  8741. 93AC0024 LBU T4,0024 (SP)
  8742. A1AC0012 SB T4,0012 (T5)
  8743. 8C6F0000 LW T7,0000 (V1)
  8744. 93AE0025 LBU T6,0025 (SP)
  8745. 10400007 BEQ V0,R0,+7
  8746. A1EE0013 SB T6,0013 (T7)
  8747. 8C780000 LW T8,0000 (V1)
  8748. 24190002 ADDIU T9,R0,0002
  8749. A3020005 SB V0,0005 (T8)
  8750. 8C680000 LW T0,0000 (V1)
  8751. 1000000D BEQ R0,R0,+13
  8752. A1190004 SB T9,0004 (T0)
  8753. 8C620000 LW V0,0000 (V1)
  8754. 240A0019 ADDIU T2,R0,0019
  8755. 240B0020 ADDIU T3,R0,0020
  8756. 9049000E LBU T1,000E (V0)
  8757. 2D210096 SLTIU AT,T1,0096
  8758. 54200004 BNEL AT,R0,+4
  8759. A04B000D SB T3,000D (V0)
  8760. 10000002 BEQ R0,R0,+2
  8761. A04A000D SB T2,000D (V0)
  8762. A04B000D SB T3,000D (V0)
  8763. 8C6C0000 LW T4,0000 (V1)
  8764. A1800004 SB R0,0004 (T4)
  8765. 8FBF0014 LW RA,0014 (SP)
  8766. 27BD0030 ADDIU SP,SP,0030
  8767. 03E00008 JR RA
  8768. 00000000 NOP
  8769.  
  8770. 801CEC5C 0x7DDC handle leocmd 0xE: set time
  8771. 3C0D801E LUI T5,801E
  8772. 25AD5E78 ADDIU T5,T5,5E78
  8773. 8DA80000 LW T0,0000 (T5) # leocmd = @801E5E78
  8774. 27BDFFA8 ADDIU SP,SP,FFA8
  8775. 3C0A801E LUI T2,801E
  8776. AFBF0014 SW RA,0014 (SP)
  8777. 254A9B78 ADDIU T2,T2,9B78
  8778. 8FA60038 LW A2,0038 (SP)
  8779. 8FA4003C LW A0,003C (SP)
  8780. 00001825 OR V1,R0,R0
  8781. 240C0002 ADDIU T4,R0,0002
  8782. 240B001D ADDIU T3,R0,001D
  8783. 24090001 ADDIU T1,R0,0001
  8784. 24070006 ADDIU A3,R0,0006
  8785. 2505000E ADDIU A1,T0,000E
  8786. 90A20000 LBU V0,0000 (A1)
  8787. 3C0F801E LUI T7,801E
  8788. 24A50001 ADDIU A1,A1,0001
  8789. 304E000F ANDI T6,V0,000F
  8790. 2DC1000A SLTIU AT,T6,000A
  8791. 14200006 BNE AT,R0,+6
  8792. 0002C902 SRL T9,V0,0x4
  8793. 240F0024 ADDIU T7,R0,0024
  8794. A10F0005 SB T7,0005 (T0)
  8795. 8DB80000 LW T8,0000 (T5)
  8796. 10000070 BEQ R0,R0,+112
  8797. A30C0004 SB T4,0004 (T8)
  8798. 03270019 MULTU T9,A3
  8799. 25EF9B70 ADDIU T7,T7,9B70
  8800. 00007012 MFLO T6
  8801. 004E1023 SUBU V0,V0,T6
  8802. 10690015 BEQ V1,T1,+21
  8803. 00000000 NOP
  8804. 106C0005 BEQ V1,T4,+5
  8805. 0146C021 ADDU T8,T2,A2
  8806. 3C0F801E LUI T7,801E
  8807. 25EF9B70 ADDIU T7,T7,9B70 # 801D9B70: maximums for each RTC element
  8808. 10000016 BEQ R0,R0,+22
  8809. 006F2021 ADDU A0,V1,T7
  8810. 93190000 LBU T9,0000 (T8)
  8811. 308E0003 ANDI T6,A0,0003
  8812. 0322082B SLTU AT,T9,V0
  8813. 1020000A BEQ AT,R0,+10
  8814. 00000000 NOP
  8815. 544B0004 BNEL V0,T3,+4
  8816. 240F0024 ADDIU T7,R0,0024
  8817. 11C00006 BEQ T6,R0,+6
  8818. 00000000 NOP
  8819. 240F0024 ADDIU T7,R0,0024
  8820. A10F0005 SB T7,0005 (T0)
  8821. 8DB80000 LW T8,0000 (T5)
  8822. 10000056 BEQ R0,R0,+86
  8823. A30C0004 SB T4,0004 (T8)
  8824. 14400006 BNE V0,R0,+6
  8825. 006F2021 ADDU A0,V1,T7
  8826. 24190024 ADDIU T9,R0,0024
  8827. A1190005 SB T9,0005 (T0)
  8828. 8DAE0000 LW T6,0000 (T5)
  8829. 1000004F BEQ R0,R0,+79
  8830. A1CC0004 SB T4,0004 (T6)
  8831. 90980000 LBU T8,0000 (A0)
  8832. 24630001 ADDIU V1,V1,0001
  8833. 00C02025 OR A0,A2,R0
  8834. 0302082B SLTU AT,T8,V0
  8835. 10200005 BEQ AT,R0,+5
  8836. 24190024 ADDIU T9,R0,0024
  8837. A1190005 SB T9,0005 (T0)
  8838. 8DAE0000 LW T6,0000 (T5)
  8839. 10000045 BEQ R0,R0,+69
  8840. A1CC0004 SB T4,0004 (T6)
  8841. 1467FFC8 BNE V1,A3,-56
  8842. 00403025 OR A2,V0,R0
  8843. AFA20038 SW V0,0038 (SP)
  8844. AFA4003C SW A0,003C (SP)
  8845. 910F000E LBU T7,000E (T0)
  8846. 27A40028 ADDIU A0,SP,0028
  8847. A3AF0028 SB T7,0028 (SP)
  8848. 9118000F LBU T8,000F (T0)
  8849. A3B80029 SB T8,0029 (SP)
  8850. 91190010 LBU T9,0010 (T0)
  8851. A3B9002A SB T9,002A (SP)
  8852. 910E0011 LBU T6,0011 (T0)
  8853. A3AE002B SB T6,002B (SP)
  8854. 910F0012 LBU T7,0012 (T0)
  8855. A3AF002C SB T7,002C (SP)
  8856. 91180013 LBU T8,0013 (T0)
  8857. 0C073C01 JAL 801CF004 # write time from A0 to RTC
  8858. A3B8002D SB T8,002D (SP)
  8859. 3C0D801E LUI T5,801E
  8860. 25AD5E78 ADDIU T5,T5,5E78
  8861. 10400006 BEQ V0,R0,+6
  8862. 240C0002 ADDIU T4,R0,0002
  8863. 8DB90000 LW T9,0000 (T5) # leocmd = @801E5E78
  8864. A3220005 SB V0,0005 (T9)
  8865. 8DAE0000 LW T6,0000 (T5)
  8866. 1000002A BEQ R0,R0,+42
  8867. A1CC0004 SB T4,0004 (T6)
  8868. 0C073BA5 JAL 801CEE94 # read time from RTC to A0
  8869. 27A40028 ADDIU A0,SP,0028
  8870. 3C0D801E LUI T5,801E
  8871. 25AD5E78 ADDIU T5,T5,5E78
  8872. 10400006 BEQ V0,R0,+6
  8873. 240C0002 ADDIU T4,R0,0002
  8874. 8DAF0000 LW T7,0000 (T5) # leocmd = @801E5E78
  8875. A1E20005 SB V0,0005 (T7)
  8876. 8DB80000 LW T8,0000 (T5)
  8877. 1000001F BEQ R0,R0,+31
  8878. A30C0004 SB T4,0004 (T8)
  8879. 8DA80000 LW T0,0000 (T5)
  8880. 93AE0028 LBU T6,0028 (SP)
  8881. 93B80029 LBU T8,0029 (SP)
  8882. 9119000E LBU T9,000E (T0)
  8883. 572E0014 BNEL T9,T6,+20
  8884. 24190024 ADDIU T9,R0,0024
  8885. 910F000F LBU T7,000F (T0)
  8886. 93AE002A LBU T6,002A (SP)
  8887. 55F80010 BNEL T7,T8,+16
  8888. 24190024 ADDIU T9,R0,0024
  8889. 91190010 LBU T9,0010 (T0)
  8890. 93B8002B LBU T8,002B (SP)
  8891. 572E000C BNEL T9,T6,+12
  8892. 24190024 ADDIU T9,R0,0024
  8893. 910F0011 LBU T7,0011 (T0)
  8894. 93AE002C LBU T6,002C (SP)
  8895. 55F80008 BNEL T7,T8,+8
  8896. 24190024 ADDIU T9,R0,0024
  8897. 91190012 LBU T9,0012 (T0)
  8898. 93B8002D LBU T8,002D (SP)
  8899. 572E0004 BNEL T9,T6,+4
  8900. 24190024 ADDIU T9,R0,0024
  8901. 910F0013 LBU T7,0013 (T0)
  8902. 11F80005 BEQ T7,T8,+5
  8903. 24190024 ADDIU T9,R0,0024
  8904. A1190005 SB T9,0005 (T0)
  8905. 8DAE0000 LW T6,0000 (T5)
  8906. 10000002 BEQ R0,R0,+2
  8907. A1CC0004 SB T4,0004 (T6)
  8908. A1000004 SB R0,0004 (T0)
  8909. 8FBF0014 LW RA,0014 (SP)
  8910. 27BD0058 ADDIU SP,SP,0058
  8911. 03E00008 JR RA
  8912. 00000000 NOP
  8913.  
  8914. 801CEE94 0x8014 read time from RTC to A0
  8915. accepts: A0=p->target
  8916. 27BDFFD0 ADDIU SP,SP,FFD0
  8917. AFB00018 SW S0,0018 (SP)
  8918. 00808025 OR S0,A0,R0
  8919. AFBF001C SW RA,001C (SP)
  8920. 3C040014 LUI A0,0014
  8921. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8922. 00002825 OR A1,R0,R0 # read month/year from RTC
  8923. 10400003 BEQ V0,R0,+3
  8924. 304300FF ANDI V1,V0,00FF
  8925. 1000004D BEQ R0,R0,+77 # if sensecode, return sensecode
  8926. 00601025 OR V0,V1,R0
  8927. 3C04801E LUI A0,801E
  8928. 3C050500 LUI A1,0500
  8929. 34A50500 ORI A1,A1,0500 # target = 05000500: ASIC data
  8930. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  8931. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  8932. 27A6002C ADDIU A2,SP,002C
  8933. 8FAE002C LW T6,002C (SP) # month/year
  8934. 3C01FF00 LUI AT,FF00
  8935. 3C040013 LUI A0,0013
  8936. 01C17824 AND T7,T6,AT
  8937. 000FC602 SRL T8,T7,0x18
  8938. A2180004 SB T8,0004 (S0)
  8939. 8FB9002C LW T9,002C (SP)
  8940. 3C0100FF LUI AT,00FF
  8941. 00002825 OR A1,R0,R0 # read hour/day from RTC
  8942. 03214024 AND T0,T9,AT
  8943. 00084C02 SRL T1,T0,0x10
  8944. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8945. A2090005 SB T1,0005 (S0)
  8946. 10400006 BEQ V0,R0,+6
  8947. 304300FF ANDI V1,V0,00FF
  8948. 920A0004 LBU T2,0004 (S0)
  8949. 00601025 OR V0,V1,R0
  8950. 314BFF7F ANDI T3,T2,FF7F
  8951. 10000033 BEQ R0,R0,+51
  8952. A20B0004 SB T3,0004 (S0)
  8953. 3C04801E LUI A0,801E
  8954. 3C050500 LUI A1,0500
  8955. 34A50500 ORI A1,A1,0500
  8956. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  8957. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  8958. 27A6002C ADDIU A2,SP,002C
  8959. 8FAC002C LW T4,002C (SP)
  8960. 3C01FF00 LUI AT,FF00
  8961. 3C040012 LUI A0,0012
  8962. 01816824 AND T5,T4,AT
  8963. 000D7602 SRL T6,T5,0x18
  8964. A20E0002 SB T6,0002 (S0)
  8965. 8FAF002C LW T7,002C (SP)
  8966. 3C0100FF LUI AT,00FF
  8967. 00002825 OR A1,R0,R0
  8968. 01E1C024 AND T8,T7,AT
  8969. 0018CC02 SRL T9,T8,0x10
  8970. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  8971. A2190003 SB T9,0003 (S0)
  8972. 10400006 BEQ V0,R0,+6
  8973. 304300FF ANDI V1,V0,00FF
  8974. 92080004 LBU T0,0004 (S0)
  8975. 00601025 OR V0,V1,R0
  8976. 3109FF7F ANDI T1,T0,FF7F
  8977. 10000019 BEQ R0,R0,+25
  8978. A2090004 SB T1,0004 (S0)
  8979. 3C04801E LUI A0,801E
  8980. 3C050500 LUI A1,0500
  8981. 34A50500 ORI A1,A1,0500
  8982. 8C845EC0 LW A0,5EC0 (A0) # p->ASIC EPI handle = @801E5EC0
  8983. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  8984. 27A6002C ADDIU A2,SP,002C
  8985. 8FAA002C LW T2,002C (SP)
  8986. 3C01FF00 LUI AT,FF00
  8987. 92030004 LBU V1,0004 (S0)
  8988. 01415824 AND T3,T2,AT
  8989. 000B6602 SRL T4,T3,0x18
  8990. A20C0000 SB T4,0000 (S0)
  8991. 8FAD002C LW T5,002C (SP)
  8992. 3C0100FF LUI AT,00FF
  8993. 30780080 ANDI T8,V1,0080
  8994. 01A17024 AND T6,T5,AT
  8995. 000E7C02 SRL T7,T6,0x10
  8996. 13000005 BEQ T8,R0,+5
  8997. A20F0001 SB T7,0001 (S0)
  8998. 3079FF7F ANDI T9,V1,FF7F
  8999. A2190004 SB T9,0004 (S0)
  9000. 10000002 BEQ R0,R0,+2
  9001. 24020005 ADDIU V0,R0,0005
  9002. 00001025 OR V0,R0,R0
  9003. 8FBF001C LW RA,001C (SP)
  9004. 8FB00018 LW S0,0018 (SP)
  9005. 27BD0030 ADDIU SP,SP,0030
  9006. 03E00008 JR RA
  9007. 00000000 NOP
  9008.  
  9009. 801CF004 0x8184 write time from A0 to RTC
  9010. accepts: A0=p->time
  9011. 27BDFFD8 ADDIU SP,SP,FFD8
  9012. AFBF0014 SW RA,0014 (SP)
  9013. 908A0003 LBU T2,0003 (A0)
  9014. 90880002 LBU T0,0002 (A0)
  9015. 90980001 LBU T8,0001 (A0)
  9016. 908E0000 LBU T6,0000 (A0)
  9017. 000A5C00 SLL T3,T2,0x10
  9018. 00084E00 SLL T1,T0,0x18
  9019. 012B6021 ADDU T4,T1,T3
  9020. AFAC0020 SW T4,0020 (SP)
  9021. 0018CC00 SLL T9,T8,0x10
  9022. 90980005 LBU T8,0005 (A0)
  9023. 908D0004 LBU T5,0004 (A0)
  9024. 000E7E00 SLL T7,T6,0x18
  9025. 01F92821 ADDU A1,T7,T9
  9026. 00187C00 SLL T7,T8,0x10
  9027. 000D7600 SLL T6,T5,0x18
  9028. 01CFC821 ADDU T9,T6,T7
  9029. AFB9001C SW T9,001C (SP)
  9030. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  9031. 3C04000F LUI A0,000F
  9032. 1440000B BNE V0,R0,+11
  9033. 304300FF ANDI V1,V0,00FF
  9034. 3C040010 LUI A0,0010
  9035. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  9036. 8FA50020 LW A1,0020 (SP)
  9037. 14400006 BNE V0,R0,+6
  9038. 304300FF ANDI V1,V0,00FF
  9039. 3C040011 LUI A0,0011
  9040. 0C073216 JAL 801CC858 # V0 = sensecode; send command A0, data A1 to ASIC
  9041. 8FA5001C LW A1,001C (SP)
  9042. 10400003 BEQ V0,R0,+3
  9043. 304300FF ANDI V1,V0,00FF
  9044. 10000002 BEQ R0,R0,+2
  9045. 00601025 OR V0,V1,R0
  9046. 00001025 OR V0,R0,R0
  9047. 8FBF0014 LW RA,0014 (SP)
  9048. 27BD0028 ADDIU SP,SP,0028
  9049. 03E00008 JR RA
  9050. 00000000 NOP
  9051.  
  9052. 00000000 NOP
  9053. 00000000 NOP
  9054. 00000000 NOP
  9055.  
  9056. 801CF0B0 0x8230 V0 = offset in IPL font to wchar A0's image (shift-jis)
  9057. accepts: A0=wchar (shift-jis)
  9058. 34018140 ORI AT,R0,8140
  9059. 0081082A SLT AT,A0,AT
  9060. 14200029 BNE AT,R0,+41
  9061. 34019873 ORI AT,R0,9873
  9062. 0081082A SLT AT,A0,AT
  9063. 10200026 BEQ AT,R0,+38
  9064. 34018800 ORI AT,R0,8800
  9065. 0081082A SLT AT,A0,AT
  9066. 14200010 BNE AT,R0,+16
  9067. 240600BC ADDIU A2,R0,00BC
  9068. 00042A02 SRL A1,A0,0x8
  9069. 20A5FF78 ADDI A1,A1,FF78
  9070. 00C50019 MULTU A2,A1
  9071. 308700FF ANDI A3,A0,00FF
  9072. 20E7FFC0 ADDI A3,A3,FFC0
  9073. 28E10040 SLTI AT,A3,0040
  9074. 00003012 MFLO A2
  9075. 54200003 BNEL AT,R0,+3
  9076. 00003012 MFLO A2
  9077. 20E7FFFF ADDI A3,A3,FFFF
  9078. 00003012 MFLO A2
  9079. 20E7030A ADDI A3,A3,030A
  9080. 00E63820 ADD A3,A3,A2
  9081. 03E00008 JR RA
  9082. 000711C0 SLL V0,A3,0x7
  9083. @
  9084. 00042A02 SRL A1,A0,0x8
  9085. 20A5FF7F ADDI A1,A1,FF7F
  9086. 00C50019 MULTU A2,A1
  9087. 308700FF ANDI A3,A0,00FF
  9088. 20E7FFC0 ADDI A3,A3,FFC0
  9089. 28E10040 SLTI AT,A3,0040
  9090. 00003012 MFLO A2
  9091. 54200003 BNEL AT,R0,+3
  9092. 00003012 MFLO A2
  9093. 20E7FFFF ADDI A3,A3,FFFF
  9094. 00003012 MFLO A2
  9095. 00E63820 ADD A3,A3,A2
  9096. 3C06801D LUI A2,801D
  9097. 00073840 SLL A3,A3,0x1
  9098. 24C6F168 ADDIU A2,A2,F168
  9099. 00E63820 ADD A3,A3,A2
  9100. 84E60000 LH A2,0000 (A3)
  9101. 03E00008 JR RA
  9102. 000611C0 SLL V0,A2,0x7
  9103. @
  9104. 03E00008 JR RA
  9105. 2402FFFF ADDIU V0,R0,FFFF
  9106.  
  9107. 801CF168 0x82E8 shift-jis to font index table
  9108. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
  9109. 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
  9110. 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
  9111. 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
  9112. 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
  9113. 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
  9114. 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 0000 0000 0000 0000
  9115. 0000 0000 0000 0000 0000 0000 0000 006C 006D 006E 006F 0070 0071 0072 0073 0000
  9116. 0000 0000 0000 0000 0000 0000 0000 0074 0075 0076 0077 0078 0079 007A 0000 0000
  9117. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007B 007C 007D 007E 007F 0080
  9118. 0081 0082 0083 0084 0085 0086 0087 0088 0000 0000 0000 0000 0000 0000 0000 0089
  9119. 008A 008B 008C 008D 008E 008F 0090 0000 0000 0000 0000 0091 0000 0000 0000 0000
  9120. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0092 0093 0094 0095 0096
  9121. 0097 0098 0099 009A 009B 0000 0000 0000 0000 0000 0000 0000 009C 009D 009E 009F
  9122. 00A0 00A1 00A2 00A3 00A4 00A5 00A6 00A7 00A8 00A9 00AA 00AB 00AC 00AD 00AE 00AF
  9123. 00B0 00B1 00B2 00B3 00B4 00B5 0000 0000 0000 0000 0000 0000 00B6 00B7 00B8 00B9
  9124. 00BA 00BB 00BC 00BD 00BE 00BF 00C0 00C1 00C2 00C3 00C4 00C5 00C6 00C7 00C8 00C9
  9125. 00CA 00CB 00CC 00CD 00CE 00CF 0000 0000 0000 0000 00D0 00D1 00D2 00D3 00D4 00D5
  9126. 00D6 00D7 00D8 00D9 00DA 00DB 00DC 00DD 00DE 00DF 00E0 00E1 00E2 00E3 00E4 00E5
  9127. 00E6 00E7 00E8 00E9 00EA 00EB 00EC 00ED 00EE 00EF 00F0 00F1 00F2 00F3 00F4 00F5
  9128. 00F6 00F7 00F8 00F9 00FA 00FB 00FC 00FD 00FE 00FF 0100 0101 0102 0103 0104 0105
  9129. 0106 0107 0108 0109 010A 010B 010C 010D 010E 010F 0110 0111 0112 0113 0114 0115
  9130. 0116 0117 0118 0119 011A 011B 011C 011D 011E 011F 0120 0121 0122 0123 0000 0000
  9131. 0000 0000 0000 0000 0000 0000 0000 0000 0124 0125 0126 0127 0128 0129 012A 012B
  9132. 012C 012D 012E 012F 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 013A 013B
  9133. 013C 013D 013E 013F 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 014A 014B
  9134. 014C 014D 014E 014F 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 015A 015B
  9135. 015C 015D 015E 015F 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 016A 016B
  9136. 016C 016D 016E 016F 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0000 0000
  9137. 0000 0000 0000 0000 0000 0000 017A 017B 017C 017D 017E 017F 0180 0181 0182 0183
  9138. 0184 0185 0186 0187 0188 0189 018A 018B 018C 018D 018E 018F 0190 0191 0000 0000
  9139. 0000 0000 0000 0000 0000 0000 0192 0193 0194 0195 0196 0197 0198 0199 019A 019B
  9140. 019C 019D 019E 019F 01A0 01A1 01A2 01A3 01A4 01A5 01A6 01A7 01A8 01A9 01AA 0000
  9141. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9142. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9143. 0000 0000 0000 0000 01AB 01AC 01AD 01AE 01AF 01B0 01B1 01B2 01B3 01B4 01B5 01B6
  9144. 01B7 01B8 01B9 01BA 01BB 01BC 01BD 01BE 01BF 01C0 01C1 01C2 01C3 01C4 01C5 01C6
  9145. 01C7 01C8 01C9 01CA 01CB 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9146. 0000 0000 0000 0000 01CC 01CD 01CE 01CF 01D0 01D1 01D2 01D3 01D4 01D5 01D6 01D7
  9147. 01D8 01D9 01DA 01DB 01DC 01DD 01DE 01DF 01E0 01E1 01E2 01E3 01E4 01E5 01E6 01E7
  9148. 01E8 01E9 01EA 01EB 01EC 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9149. 0000 0000 01ED 01EE 01EF 01F0 01F1 01F2 01F3 01F4 01F5 01F6 01F7 01F8 01F9 01FA
  9150. 01FB 01FC 01FD 01FE 01FF 0200 0201 0202 0203 0204 0205 0206 0207 0208 0209 020A
  9151. 020B 020C 020D 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9152. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9153. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9154. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9155. 020E 020F 0210 0211 0212 0213 0214 0215 0216 0217 0218 0219 021A 021B 021C 021D
  9156. 021E 021F 0220 0221 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0222 0223
  9157. 0224 0225 0226 0227 0228 0229 022A 022B 022C 022D 022E 022F 0230 0231 0232 0233
  9158. 0234 0235 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0236 0237 0238 0239
  9159. 023A 023B 023C 023D 023E 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9160. 023F 0240 0241 0242 0243 0244 0245 0246 0247 0248 0000 0000 0000 0000 0249 024A
  9161. 024B 024C 024D 024E 024F 0250 0251 0252 0253 0254 0255 0256 0257 0000 0000 0000
  9162. 0000 0000 0258 0259 025A 025B 025C 025D 025E 025F 0260 0261 0262 0263 0264 0265
  9163. 0266 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9164. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0267 0268 0269 026A 026B 026C
  9165. 026D 026E 026F 0270 0271 0272 0273 0274 0275 0276 0277 0278 0279 027A 027B 027C
  9166. 027D 027E 027F 0280 0281 0000 0000 0000 0000 0000 0000 0000 0282 0283 0284 0285
  9167. 0286 0287 0288 0289 028A 028B 028C 028D 028E 028F 0290 0291 0292 0293 0294 0295
  9168. 0296 0297 0298 0299 029A 029B 029C 029D 029E 029F 0000 0000 0000 0000 0000 0000
  9169. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9170. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9171. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9172. 0000 0000 0000 0000 0000 0000 02A0 02A1 02A2 02A3 02A4 02A5 02A6 02A7 02A8 02A9
  9173. 02AA 02AB 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 02AC 02AD
  9174. 02AE 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9175. 0000 0000 02AF 02B0 02B1 02B2 02B3 02B4 02B5 02B6 02B7 02B8 02B9 02BA 02BB 02BC
  9176. 02BD 02BE 02BF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9177. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9178. 0000 0000 0000 0000 0000 0000 0000 0000 02C0 02C1 02C2 02C3 02C4 02C5 02C6 02C7
  9179. 02C8 02C9 02CA 02CB 02CC 02CD 02CE 02CF 02D0 02D1 02D2 02D3 02D4 02D5 02D6 02D7
  9180. 02D8 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9181. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9182. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9183. 0000 0000 0000 0000 0000 0000 0000 0000 02D9 02DA 02DB 02DC 02DD 02DE 02DF 02E0
  9184. 02E1 02E2 02E3 02E4 02E5 02E6 02E7 02E8 02E9 02EA 02EB 02EC 02ED 02EE 02EF 02F0
  9185. 02F1 02F2 02F3 02F4 02F5 02F6 02F7 02F8 02F9 02FA 02FB 02FC 02FD 0000 0000 0000
  9186. 0000 0000 0000 0000 02FE 02FF 0300 0301 0302 0000 0000 0000 0000 0000 0000 0000
  9187. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9188. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0303 0304 0305 0306
  9189. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  9190. 0000 0307 0308 0309
  9191.  
  9192. 801CFBB0 0x8D30 V0 = IPL hardware address of image for char A0 - 32; A1 = width, A2 = height, A3 = alignment
  9193. accepts: A0=char - 32
  9194. 04800019 BLTZ A0,+25
  9195. 28810908 SLTI AT,A0,0908
  9196. 10200017 BEQ AT,R0,+23
  9197. 00000000 NOP
  9198. 3C03801D LUI V1,801D
  9199. 00044080 SLL T0,A0,0x2
  9200. 2463FC20 ADDIU V1,V1,FC20
  9201. 01034820 ADD T1,T0,V1 # LeoGetAAdr2 entry = 801CFC20[A0]
  9202. 91380002 LBU T8,0002 (T1)
  9203. 95390000 LHU T9,0000 (T1)
  9204. 3C010007 LUI AT,0007
  9205. 330A000F ANDI T2,T8,000F
  9206. 214B0001 ADDI T3,T2,0001
  9207. ACCB0000 SW T3,0000 (A2) # A2 = height
  9208. 81280003 LB T0,0003 (T1)
  9209. 00186102 SRL T4,T8,0x4
  9210. 3421EE80 ORI AT,AT,EE80
  9211. 310D0001 ANDI T5,T0,0001
  9212. 000D7100 SLL T6,T5,0x4
  9213. 01CC7825 OR T7,T6,T4
  9214. ACAF0000 SW T7,0000 (A1)
  9215. 00191040 SLL V0,T9,0x1
  9216. 00081843 SRA V1,T0,0x1
  9217. ACE30000 SW V1,0000 (A3)
  9218. 03E00008 JR RA
  9219. 00411020 ADDU V0,V0,AT # V0 = 0x7EE80 + LeoGetAAdr2[0:2] << 1
  9220. 03E00008 JR RA
  9221. 2402FFFF ADDIU V0,R0,FFFF
  9222.  
  9223. 801CFC20 0x8DA0 copy of LeoGetAAdr2
  9224. 0000 9D 14 0023 2A 14 0029 63 14 002F 8A 14 0045 7E 18 0063 CA 14 0084 AA 14 00A0 33 14
  9225. 00A4 5E 14 00BB 4E 14 00CA 65 14 00D3 77 0E 00E3 33 02 00E7 81 08 00EB 21 02 00EC 6C 14
  9226. 0100 8A 14 0116 3A 14 0121 7A 14 0137 7A 14 014D 8A 14 0163 8A 14 0179 8A 14 018F 7A 14
  9227. 01A5 8A 14 01BB 8A 14 01D1 17 0E 01D5 49 0E 01DF 77 0E 01EF 74 0A 01F9 77 0E 0209 7A 14
  9228. 021F DC 16 024D BA 14 026E 7A 14 0284 BA 14 02A5 9A 14 02C1 6A 14 02D2 6A 14 02E3 BA 14
  9229. 0304 8A 14 031A 1A 14 0320 6A 14 0331 8A 14 0347 6A 14 0358 CA 14 0379 9A 14 0395 CA 14
  9230. 03B6 7A 14 03CC CA 14 03ED 8A 14 0403 7A 14 0419 6A 14 042A 8A 14 0440 AA 14 045C DA 14
  9231. 0483 9A 14 049F 9A 14 04BB 7A 14 04D1 4D 14 04DF 5C 14 04F3 3D 14 0501 52 16 0506 81 FA
  9232. 050A 9D 14 052D 98 10 0544 9A 14 0560 98 10 0577 9A 14 0593 98 10 05AA 5A 14 05BB 9C 10
  9233. 05DC 7A 14 05F2 2A 14 05F8 3D 14 0606 7A 14 061C 2A 14 0622 D8 10 0642 78 10 0654 98 10
  9234. 066B 9B 10 0689 9B 10 06A7 48 10 06B0 68 10 06BE 5A 14 06CF 77 0E 06DF 87 0E 06EF B7 0E
  9235. 0707 67 0E 0713 8A 0E 0729 67 0E 0735 6D 14 074A 1F 16 0752 6D 14 0767 52 16 076C 9D 14
  9236. 078F 9D 14 07B2 2A 0E 07B8 8B 14 07D0 8A 14 07E6 98 16 07FD 9A 14 0819 3F 16 0829 6C 14
  9237. 083D 51 14 0840 CA 14 0861 66 14 086C 65 0C 0875 83 0A 087D 9D 14 08A0 CA 14 08C1 41 14
  9238. 08C3 53 18 08C9 88 10 08DB 9D 14 08FE 9D 14 0921 32 16 0924 9A 0E 0940 7A 14 0956 44 0E
  9239. 095B 33 02 095F 9D 14 0982 66 14 098D 65 0C 0996 0A 15 09C2 C5 14 09D4 07 0F 09F4 7A 0E
  9240. 0A0A BE 1C 0A37 BE 1C 0A64 BE 1C 0A91 BD 1A 0ABB BD 1A 0AE5 BE 1C 0B12 FA 14 0B3E BE 14
  9241. 0B6B 7E 1C 0B89 7E 1C 0BA7 7E 1C 0BC5 7D 1A 0BE1 3E 1C 0BF0 4E 1C 0BFF 4E 1C 0C0E 5D 1A
  9242. 0C23 9D 14 0C46 9D 1A 0C69 BE 1C 0C96 BE 1C 0CC3 BE 1C 0CF0 BD 1A 0D1A BD 1A 0D44 77 0E
  9243. 0D54 CC 16 0D7B 8E 1C 0D99 8E 1C 0DB7 7E 1C 0DD5 7D 1A 0DF1 9D 14 0E14 9D 14 0E37 9A 14
  9244. 0E53 9B 16 0E71 9B 16 0E8F 9B 16 0EAD 9B 16 0ECB 9A 14 0EE7 9B 16 0F05 08 11 0F29 9B 10
  9245. 0F47 9B 16 0F65 9B 16 0F83 9B 16 0FA1 9A 14 0FBD 3B 16 0FC9 3A 16 0FD4 4B 16 0FE0 4A 14
  9246. 0FEB 79 12 0FFF 8B 16 1017 9B 16 1035 9B 16 1053 9B 16 1071 9B 16 108F 9A 14 10AB 76 0C
  9247. 10B9 99 10 10D2 8B 16 10EA 8B 16 1102 8B 16 111A 8A 14 1130 9D 14 1153 9D 14 1176 9D 14
  9248. 1199 6F 18 11B1 3A 14 11BC 75 14 11C8 89 12 11DC 9D 16 11FF EA 14 1226 CA 14 1247 45 14
  9249. 124D 4D 14 125B 4D 14 1269 66 14 1274 87 0E 1284 34 04 1289 91 08 128E 42 04 1291 6C 14
  9250. 12A5 AA 14 12C1 7A 14 12D7 9A 14 12F3 AA 14 130F AA 14 132B 9B 16 1349 AA 14 1365 AA 14
  9251. 1381 AA 14 139D AA 14 13B9 37 0E 13C1 39 0E 13CB 77 0E 13DB 75 0C 13E7 77 0E 13F7 9A 14
  9252. 1413 CC 14 143A CA 14 145B BA 14 147C BA 14 149D BA 14 14BE BA 14 14DF BA 14 1500 BA 14
  9253. 1521 CA 14 1542 6A 14 1553 AA 14 156F CA 14 1590 AA 14 15AC FA 14 15D8 CA 14 15F9 BA 14
  9254. 161A AA 14 1636 CE 14 1663 CA 14 1684 9A 14 16A0 CA 14 16C1 BA 14 16E2 CA 14 1703 EA 14
  9255. 172A CA 14 174B CA 14 176C AA 14 1788 3D 14 1796 6C 14 17AA 3D 14 17B8 52 14 17BD 92 FC
  9256. 17C5 5F 1A 17DD 87 0E 17ED AA 14 1809 87 0E 1819 9A 14 1835 97 0E 1849 7A 14 185F 9C 10
  9257. 1880 BA 14 18A1 5A 14 18B2 6E 14 18C9 AA 14 18E5 5A 14 18F6 F7 0E 1916 A7 0E 192A 97 0E
  9258. 193E AB 0E 195C 9B 0E 197A 77 0E 198A 77 0E 199A 69 12 19A9 A7 0E 19BD A6 0E 19CF D7 0E
  9259. 19EB A7 0E 19FF AB 0E 1A1D 87 0E 1A2D 6D 14 1A42 3F 16 1A52 6D 14 1A67 52 14 1A6C 6F 18
  9260. 1A84 6F 16 1A9C 3A 0E 1AA7 8B 14 1ABF AA 14 1ADB 86 14 1AE9 BA 14 1B0A 2F 16 1B12 8A 14
  9261. 1B28 52 14 1B2D BB 14 1B51 66 14 1B5C 86 0C 1B6A 73 0A 1B72 6E 16 1B89 BB 14 1BAD 50 12
  9262. 1BAF 53 16 1BB5 89 10 1BC9 5F 18 1BE1 5F 18 1BF9 53 16 1BFF A9 0C 1C18 8A 14 1C2E 54 0E
  9263. 1C36 34 04 1C3B 6D 14 1C50 66 14 1C5B 86 0C 1C69 09 13 1C91 C5 12 1CA3 D7 0E 1CBF 9A 0E
  9264. 1CDB CD 1A 1D05 CD 1A 1D2F CD 1A 1D59 CD 1A 1D83 CD 1A 1DAD CE 1C 1DDA 2A 15 1E0C BD 14
  9265. 1E36 BD 1A 1E60 BD 1A 1E8A BD 1A 1EB4 BC 18 1EDB 6D 1A 1EF0 6D 1A 1F05 6D 1A 1F1A 6D 1A
  9266. 1F2F 5F 1A 1F47 BD 1A 1F71 CD 1A 1F9B CD 1A 1FC5 CD 1A 1FEF CD 1A 2019 CD 1A 2043 97 0E
  9267. 2057 CB 14 207B AD 1A 209E BD 1A 20C8 BD 1A 20F2 BD 1A 211C 6F 1A 2134 5F 1A 214C AA 14
  9268. 2168 9B 16 2186 9B 16 21A4 9A 14 21C0 AA 14 21DC 9A 14 21F8 9B 16 2216 D7 0E 2232 9B 0E
  9269. 2250 8B 16 2268 9B 16 2286 9A 14 22A2 9A 14 22BE 5B 16 22D0 5B 16 22E2 5A 14 22F3 5A 14
  9270. 2304 89 12 2318 AA 14 2334 9B 16 2352 9B 16 2370 9A 14 238C 9A 14 23A8 9A 14 23C4 99 10
  9271. 23DD 9A 10 23F9 AB 16 2417 AB 16 2435 AA 14 2451 AA 14 246D 5F 18 2485 5F 18 249D AE 14
  9272. 24C3 9D 14 24E6 2A 14 24EC 53 14 24F2 89 12 2506 8D 16 2522 CA 14 2543 CA 14 2564 23 14
  9273. 2566 3C 14 2573 3C 14 2580 65 14 2589 77 0E 2599 33 02 259D 90 06 25A0 31 02 25A2 6C 14
  9274. 25B6 9A 14 25D2 6A 14 25E3 8A 14 25F9 9A 14 2615 9A 14 2631 8A 14 2647 8A 14 265D 99 12
  9275. 2676 9A 14 2692 8A 14 26A8 26 0C 26AC 48 0C 26B5 87 0E 26C5 74 0A 26CF 77 0E 26DF 8A 14
  9276. 26F5 DC 14 2723 CA 14 2744 A9 12 275D AA 14 2779 B9 12 2797 A9 12 27B0 A9 12 27C9 BA 14
  9277. 27EA C9 12 2808 59 12 2817 99 12 2830 B9 12 284E 99 12 2867 D9 12 288A B9 12 28A8 CA 14
  9278. 28C9 99 12 28E2 CD 14 290C B9 12 292A 9A 14 2946 A9 12 295F B9 12 297D C9 12 299B 09 13
  9279. 29C3 C9 12 29E1 B9 12 29FF 99 12 2A18 3B 12 2A24 6C 14 2A38 3B 12 2A44 52 14 2A49 81 FA
  9280. 2A4D 9D 14 2A70 97 0E 2A84 9A 14 2AA0 77 0E 2AB0 9A 14 2ACC 87 0E 2ADC 6A 14 2AED 9C 10
  9281. 2B0E 9A 14 2B2A 49 12 2B34 6D 12 2B49 9A 14 2B65 5A 14 2B76 F7 0E 2B96 A7 0E 2BAA 97 0E
  9282. 2BBE 9B 0E 2BDC AB 0E 2BFA 77 0E 2C0A 77 0E 2C1A 69 12 2C29 A7 0E 2C3D 97 0E 2C51 C7 0E
  9283. 2C69 A7 0E 2C7D 9B 0E 2C9B 77 0E 2CAB 5C 12 2CBF 2F 16 2CC7 6C 12 2CDB 52 14 2CE0 8D 14
  9284. 2CFC 9D 14 2D1F 2A 0E 2D25 7B 14 2D3D 9A 14 2D59 97 14 2D6D B9 12 2D8B 2F 16 2D93 7A 14
  9285. 2DA9 51 12 2DAC CB 14 2DD0 77 14 2DE0 76 0C 2DEE 73 0A 2DF6 9D 14 2E19 BB 14 2E3D 51 12
  9286. 2E40 53 16 2E46 88 10 2E58 9D 14 2E7B 9D 14 2E9E 42 14 2EA1 9A 0C 2EBD 7A 14 2ED3 44 0E
  9287. 2ED8 23 02 2EDA 8D 14 2EF6 67 14 2F02 76 0C 2F10 0A 15 2F3C C6 14 2F51 C7 0E 2F69 8A 0E
  9288. 2F7F CD 1A 2FA9 CD 1A 2FD3 BD 1A 2FFD CD 1A 3027 CC 18 304E CE 1C 307B 09 13 30A3 BD 14
  9289. 30CD AD 1A 30F0 BD 1A 311A BD 1A 3144 AC 18 3165 4D 1A 3173 4D 1A 3181 4D 1A 318F 5C 18
  9290. 31A3 9D 14 31C6 BD 1A 31F0 CD 1A 321A CD 1A 3244 CD 1A 326E CD 1A 3298 CC 18 32BF A7 0E
  9291. 32D3 BB 14 32F7 BD 1A 3321 CD 1A 334B BD 1A 3375 BC 18 339C 8D 14 33B8 8D 14 33D4 9A 14
  9292. 33F0 9A 14 340C 9A 14 3428 9A 14 3444 9A 14 3460 99 12 3479 9B 16 3497 C7 0E 34AF 7A 0E
  9293. 34C5 8A 14 34DB 8A 14 34F1 7A 14 3507 79 12 351B 5A 14 352C 5A 14 353D 5A 14 354E 69 12
  9294. 355D 79 12 3571 9A 14 358D 8A 14 35A3 8A 14 35B9 8A 14 35CF 8A 14 35E5 89 12 35F9 87 0E
  9295. 3609 99 10 3622 AA 14 363E AA 14 365A AA 14 3676 99 12 368F 8D 14 36AB 8D 14 36C7 9D 12
  9296. 36EA 6F 18 3702 49 12 370C 74 12 3716 6B 14 3728 8C 14 3742 79 12 3756 88 10 3768 44 12
  9297. 376D 5C 12 3781 5C 12 3795 76 12 37A3 97 10 37B7 44 04 37BC A1 08 37C1 33 06 37C5 7B 14
  9298. 37DD 89 12 37F1 79 12 3805 79 12 3819 89 12 382D 89 12 3841 79 12 3855 79 12 3869 79 12
  9299. 387D 89 12 3891 89 12 38A5 37 0E 38AD 48 0C 38B6 97 10 38CA 94 0E 38D7 97 10 38EB 79 12
  9300. 38FF 8B 14 3917 A9 12 3930 99 12 3949 89 12 395D 89 12 3971 99 12 398A 99 12 39A3 99 12
  9301. 39BC 99 12 39D5 79 12 39E9 99 12 3A02 99 12 3A1B 99 12 3A34 A9 12 3A4D 99 12 3A66 99 12
  9302. 3A7F 89 12 3A93 9B 12 3AB1 99 12 3ACA 89 12 3ADE 89 12 3AF2 99 12 3B0B 99 12 3B24 A9 12
  9303. 3B3D 89 12 3B51 89 12 3B65 79 12 3B79 4C 12 3B86 7B 14 3B9E 4C 12 3BAB 62 14 3BB0 A2 FC
  9304. 3BB8 5F 1A 3BD0 87 0E 3BE0 99 12 3BF9 87 0E 3C09 89 12 3C1D 87 0E 3C2D 89 12 3C41 9A 0E
  9305. 3C5D 89 12 3C71 8A 14 3C87 7D 14 3CA3 99 12 3CBC 89 12 3CD0 A7 0E 3CE4 97 0E 3CF8 97 0E
  9306. 3D0C 9B 0E 3D2A AB 0E 3D48 97 0E 3D5C 77 0E 3D6C 89 12 3D80 97 0E 3D94 97 0E 3DA8 A7 0E
  9307. 3DBC 87 0E 3DCC 9A 0E 3DE8 77 0E 3DF8 6D 12 3E0D 2F 16 3E15 6D 12 3E2A 62 12 3E2F 6F 16
  9308. 3E47 6F 16 3E5F 49 12 3E69 7A 14 3E7F 79 12 3E93 86 12 3EA1 99 12 3EBA 3F 16 3ECA 8A 12
  9309. 3EE0 61 12 3EE3 A8 12 3EFA 77 12 3F0A 55 0C 3F13 95 0E 3F22 6E 16 3F39 98 12 3F50 61 12
  9310. 3F53 43 16 3F57 88 12 3F69 5F 18 3F81 5F 18 3F99 52 14 3F9E 9A 0E 3FBA 79 12 3FCE 32 0C
  9311. 3FD1 44 04 3FD6 6D 14 3FEB 77 12 3FFB 65 0C 4004 87 10 4014 83 10 401C 86 0E 402A 79 12
  9312. 403E AC 18 405F AC 18 4080 AC 18 40A1 AB 16 40BF AB 16 40DD AD 1A 4100 B9 12 411E 8C 12
  9313. 4138 8C 18 4152 9C 18 4173 9C 18 4194 8B 16 41AC 7C 18 41C6 7C 18 41E0 7C 18 41FA 7B 16
  9314. 4212 5F 1A 422A AB 16 4248 9C 18 4269 9C 18 428A 9C 18 42AB 9B 16 42C9 9B 16 42E7 87 0E
  9315. 42F7 9A 12 4313 9C 18 4334 9C 18 4355 AC 18 4376 AB 16 4394 6F 1A 43AC 5F 1A 43C4 89 12
  9316. 43D8 8A 14 43EE 8A 14 4404 9A 14 4420 99 12 4439 89 12 444D 8B 16 4465 97 0E 4479 8A 0E
  9317. 448F 8A 14 44A5 8A 14 44BB 9A 14 44D7 99 12 44F0 8A 14 4506 8A 14 451C 7A 14 4532 79 12
  9318. 4546 89 12 455A 99 12 4573 8A 14 4589 8A 14 459F 99 12 45B8 99 12 45D1 99 12 45EA A9 12
  9319. 4603 99 10 461C 9A 14 4638 9A 14 4654 8A 14 466A 99 12 4683 5F 18 469B 5F 18 46B3 8C 12
  9320. 46CD 3C 16 46DA 3C 16 46E7 75 16 46F3 9A 14 470F 7E 18 472D DC 16 475B BC 16 4782 45 16
  9321. 4788 4F 18 4798 4F 18 47A8 55 16 47B1 87 0E 47C1 55 04 47CA 81 0A 47CE 43 04 47D2 8F 18
  9322. 47F2 9C 16 4813 4B 16 481F 8B 16 4837 8C 16 4851 9B 16 486F 8C 16 4889 8C 16 48A3 8B 16
  9323. 48BB 8C 16 48D5 8C 16 48EF 38 0E 48F8 4A 0E 4903 97 0E 4917 85 0C 4923 87 0E 4933 7C 16
  9324. 494D CC 16 4974 BB 16 4998 8B 16 49B0 9C 16 49D1 AB 16 49EF 7B 16 4A07 7B 16 4A1F BC 16
  9325. 4A46 AB 16 4A64 3B 16 4A70 6C 16 4A84 9B 16 4AA2 6B 16 4AB4 DC 16 4AE2 AC 16 4B03 CC 16
  9326. 4B2A 8B 16 4B42 CC 16 4B69 8B 16 4B81 8C 16 4B9B 7B 16 4BB3 9C 16 4BD4 BC 16 4BFB FC 16
  9327. 4C2F AB 16 4C4D AB 16 4C6B 9B 16 4C89 3E 18 4C98 8C 18 4CB2 4E 18 4CC1 63 16 4CC7 81 FC
  9328. 4CCB 3C 16 4CD8 88 0E 4CEA 8D 18 4D06 68 0E 4D14 9D 18 4D37 88 0E 4D49 5C 18 4D5D 8B 0E
  9329. 4D75 7C 18 4D8F 3B 16 4D9B 3F 16 4DAB 8C 18 4DC5 3C 18 4DD2 B7 0E 4DEA 77 0E 4DFA 98 0E
  9330. 4E11 9B 0E 4E2F 9B 0E 4E4D 67 0E 4E59 68 0E 4E67 49 12 4E71 78 0E 4E83 98 0E 4E9A D8 0E
  9331. 4EBA A7 0E 4ECE 9B 0E 4EEC 77 0E 4EFC 5F 18 4F14 2C 18 4F1B 4F 18 4F2B 71 14 4F2F 3C 16
  9332. 4F3C 3C 10 4F49 3B 0E 4F55 6A 14 4F66 9C 16 4F87 98 10 4F9E 9B 16 4FBC 2C 18 4FC3 8E 18
  9333. 4FE1 62 16 4FE6 DC 16 5014 66 16 501F 77 10 502F 84 0C 5039 3C 1A 5046 DC 16 5074 71 16
  9334. 5078 43 16 507C 89 12 5090 3C 14 509D 3C 14 50AA 43 16 50AE 7B 0E 50C6 AE 16 50EC 66 10
  9335. 50F7 55 04 5100 3C 18 510D 66 16 5118 87 10 5128 FC 16 515C E6 16 5175 D8 0E 5195 8B 0E
  9336. 51AD CC 18 51D4 BC 18 51FB BC 18 5222 BC 18 5249 CC 18 5270 BC 18 5297 FB 16 52C7 9E 16
  9337. 52ED 6C 18 5301 6C 18 5315 7C 18 532F 7C 18 5349 4C 18 5356 4C 18 5363 6C 18 5377 7C 18
  9338. 5391 3C 18 539E AD 18 53C1 CD 18 53EB CD 18 5415 CD 18 543F CD 18 5469 CC 18 5490 97 0E
  9339. 54A4 CC 16 54CB 9D 18 54EE 9D 18 5511 9D 18 5534 9D 18 5557 3C 18 5564 3C 18 5571 9D 18
  9340. 5594 8C 16 55AE 9C 16 55CF 8C 16 55E9 9B 14 5607 8C 16 5621 9C 16 5642 C8 0E 565D 6A 0E
  9341. 566E 8C 16 5688 7C 16 56A2 8C 16 56BC 7C 16 56D6 4B 16 56E2 4B 16 56EE 6B 16 5700 7B 16
  9342. 5718 7B 16 5730 7A 14 5746 9C 16 5767 8C 16 5781 8C 16 579B 9B 14 57B9 9C 16 57DA 88 0E
  9343. 57EC 98 0E 5803 8C 16 581D 8C 16 5837 8C 16 5851 8C 16 586B 3C 16 5878 3C 16 5885 9F 16
  9344. 58AD 6F 18 58C5 5C 16 58D9 85 16 58E5 9B 14 5903 8E 18 5921 BC 16 5948 AC 16 5969 55 16
  9345. 5972 4F 18 5982 5F 18 599A 65 16 59A3 97 0E 59B7 55 04 59C0 81 0A 59C4 33 04 59C8 AF 18
  9346. 59F0 9C 16 5A11 5B 16 5A23 9B 16 5A41 8C 16 5A5B 9B 16 5A79 9C 16 5A9A 9C 16 5ABB AC 16
  9347. 5ADC 8C 16 5AF6 9C 16 5B17 48 0E 5B20 6A 0E 5B31 97 0E 5B45 95 0C 5B54 97 0E 5B68 7C 16
  9348. 5B82 CC 16 5BA9 BB 16 5BCD 9B 16 5BEB 9C 16 5C0C BB 16 5C30 9B 16 5C4E 9B 16 5C6C BC 16
  9349. 5C93 BB 16 5CB7 5B 16 5CC9 8C 16 5CE3 BB 16 5D07 7B 16 5D1F DC 16 5D4D CC 16 5D74 DC 16
  9350. 5DA2 9B 16 5DC0 CC 16 5DE7 9B 16 5E05 9C 16 5E26 8B 16 5E3E AC 16 5E5F BC 16 5E86 0C 17
  9351. 5EBA BB 16 5EDE AB 16 5EFC BB 16 5F20 5E 18 5F37 6E 18 5F4E 6E 18 5F65 53 16 5F6B 91 FC
  9352. 5F70 6F 1A 5F88 98 0E 5F9F 9D 18 5FC2 68 0E 5FD0 AD 18 5FF3 88 0E 6005 6C 18 6019 9B 0E
  9353. 6037 8C 18 6051 5B 16 6063 6F 16 607B 9C 18 609C 5C 18 60B0 C7 0E 60C8 87 0E 60D8 88 0E
  9354. 60EA 9B 0E 6108 9B 0E 6126 77 0E 6136 68 0E 6144 69 12 6153 78 0E 6165 98 0E 617C D8 0E
  9355. 619C A7 0E 61B0 AB 0E 61CE A7 0E 61E2 6F 18 61FA 4C 18 6207 6F 18 621F 71 14 6223 6F 18
  9356. 623B 6F 16 6253 4B 0E 625F 7A 14 6275 AC 16 6296 A8 10 62AD AB 16 62CB 4C 18 62D8 8E 18
  9357. 62F6 62 16 62FB DC 16 6329 76 16 6337 87 10 6347 94 0C 6354 6F 18 636C DC 16 639A 61 16
  9358. 639D 43 16 63A1 99 12 63BA 6F 18 63D2 6F 18 63EA 53 16 63F0 9B 0E 640E 9E 16 6434 66 10
  9359. 643F 55 04 6448 6F 18 6460 76 16 646E 87 10 647E FA 14 64AA D5 14 64BF C6 0C 64D4 7B 0E
  9360. 64EC CC 18 6513 BC 18 653A BC 18 6561 CC 18 6588 CC 18 65AF BC 18 65D6 FB 16 6606 AE 16
  9361. 662C 8C 18 6646 8C 18 6660 9C 18 6681 9C 18 66A2 5C 18 66B6 6C 18 66CA 7C 18 66E4 7C 18
  9362. 66FE 6F 1A 6716 CD 18 6740 DD 18 6771 CD 18 679B CD 18 67C5 CD 18 67EF DD 18 6820 A7 0E
  9363. 6834 FC 16 6868 AD 18 688B AD 18 68AE AD 18 68D1 AD 18 68F4 6F 1A 690C 6F 1A 6924 9D 18
  9364. 6947 9C 16 6968 9C 16 6989 9C 16 69AA 9B 14 69C8 9C 16 69E9 9C 16 6A0A D8 0E 6A2A 7A 0E
  9365. 6A40 8C 16 6A5A 8C 16 6A74 8C 16 6A8E 8C 16 6AA8 5B 16 6ABA 5B 16 6ACC 6B 16 6ADE 6B 16
  9366. 6AF0 7B 16 6B08 9A 14 6B24 8C 16 6B3E 9C 16 6B5F 9C 16 6B80 8B 14 6B98 8C 16 6BB2 98 0E
  9367. 6BC9 98 0E 6BE0 8C 16 6BFA 8C 16 6C14 8C 16 6C2E 8C 16 6C48 6F 18 6C60 6F 18 6C78 AF 16
  9368. 6CA0 6F 18 6CB8 2A 14 6CBE 43 14 6CC2 9A 14 6CDE 8D 16 6CFA DB 14 6D24 9B 14 6D42 23 14
  9369. 6D44 5D 14 6D59 4D 14 6D67 54 14 6D6F 87 0E 6D7F 24 02 6D82 91 08 6D87 21 02 6D88 5A 14
  9370. 6D99 8B 14 6DB1 5A 14 6DC2 8A 14 6DD8 8B 14 6DF0 8A 14 6E06 8B 14 6E1E 8B 14 6E36 8A 14
  9371. 6E4C 8B 14 6E64 8B 14 6E7C 27 0E 6E80 2A 0E 6E86 97 0E 6E9A 85 0C 6EA6 97 0E 6EBA 7A 14
  9372. 6ED0 DB 14 6EFA AA 14 6F16 9A 14 6F32 AB 14 6F50 9A 14 6F6C 9A 14 6F88 9A 14 6FA4 AB 14
  9373. 6FC2 AA 14 6FDE 2A 14 6FE4 7B 14 6FFC 9A 14 7018 8A 14 702E BA 14 704F 9A 14 706B BB 14
  9374. 708F 9A 14 70AB BB 14 70CF 9A 14 70EB 9B 14 7109 AA 14 7125 9B 14 7143 AA 14 715F EA 14
  9375. 7186 AA 14 71A2 AA 14 71BE 9A 14 71DA 3D 14 71E8 7A 14 71FE 4D 14 720C 52 14 7211 90 FC
  9376. 7214 5F 1A 722C 89 10 7240 8B 14 7258 89 10 726C 7C 16 7286 89 10 729A 6A 14 72AB 8C 10
  9377. 72C5 7A 14 72DB 2A 14 72E1 4E 14 72F0 7A 14 7306 2A 14 730C B8 10 7327 78 10 7339 89 10
  9378. 734D 8C 10 7367 8C 10 7381 58 10 738F 79 10 73A3 4A 12 73AE 78 0E 73C0 87 0E 73D0 B7 0E
  9379. 73E8 77 0E 73F8 8B 0E 7410 77 0E 7420 5D 14 7435 2A 14 743B 6D 14 7450 61 14 7453 6F 18
  9380. 746B 6F 16 7483 2A 0E 7489 8B 12 74A1 8B 14 74B9 87 10 74C9 9A 14 74E5 2A 14 74EB 7E 14
  9381. 7509 41 14 750B BA 14 752C 54 14 7534 65 0C 753D 84 0A 7547 6E 16 755E BA 14 757F 61 14
  9382. 7582 33 16 7586 87 0E 7596 5F 18 75AE 5F 18 75C6 42 14 75C9 9B 0E 75E7 8D 14 7603 43 0C
  9383. 7607 24 02 760A 6D 14 761F 54 14 7627 55 0C 7630 FB 14 7660 C5 14 7672 E8 0E 7692 8A 0E
  9384. 76A8 AD 1A 76CB AD 1A 76EE AD 1A 7711 AD 1A 7734 AD 1A 7757 AE 1C 777D FA 14 77A9 AD 14
  9385. 77CC 8D 1A 77E8 8D 1A 7804 8D 1A 7820 8C 18 783A 4D 1A 7848 3D 1A 7856 5D 1A 786B 5D 1A
  9386. 7880 5F 1A 7898 AD 1A 78BB CE 1A 78E8 BE 1A 7915 BE 1A 7942 BE 1A 796F CD 18 7999 87 0E
  9387. 79A9 BB 14 79CD 9E 1A 79F3 9E 1A 7A19 9E 1A 7A3F AE 1A 7A65 6F 1A 7A7D 5F 1A 7A95 8B 14
  9388. 7AAD 8C 16 7AC7 8C 16 7AE1 8C 16 7AFB 8B 14 7B13 8B 14 7B2B 8C 16 7B45 D9 10 7B68 7C 10
  9389. 7B82 8C 16 7B9C 8C 16 7BB6 8C 16 7BD0 8B 14 7BE8 4B 16 7BF4 4B 16 7C00 5B 16 7C12 4B 16
  9390. 7C1E 7B 14 7C36 7A 14 7C4C 8C 16 7C66 8C 16 7C80 8C 16 7C9A 8B 14 7CB2 8B 14 7CCA 87 0E
  9391. 7CDA 89 10 7CEE 7C 16 7D08 8C 16 7D22 7C 16 7D3C 7B 14 7D54 5F 18 7D6C 5F 18 7D84 8E 14
  9392. 7DA2 6F 16 7DBA 3A 14 7DC5 64 14 7DCD 9A 14 7DE9 8D 16 7E05 EB 14 7E2F BB 14 7E53 34 14
  9393. 7E58 4D 14 7E66 4D 14 7E74 64 14 7E7C 87 0E 7E8C 34 02 7E91 92 0A 7E99 31 02 7E9B 7A 14
  9394. 7EB1 8B 14 7EC9 5A 14 7EDA 8A 14 7EF0 8B 14 7F08 8A 14 7F1E 8B 14 7F36 8B 14 7F4E 8A 14
  9395. 7F64 8B 14 7F7C 9B 14 7F9A 37 0E 7FA2 3A 0E 7FAD A8 0E 7FC4 96 0C 7FD6 98 0E 7FED 9A 14
  9396. 8009 DC 16 8037 BA 14 8058 AA 14 8074 BB 14 8098 AA 14 80B4 9A 14 80D0 9A 14 80EC BB 14
  9397. 8110 AA 14 812C 3A 14 8137 8B 14 814F AA 14 816B 9A 14 8187 BA 14 81A8 AA 14 81C4 BB 14
  9398. 81E8 9A 14 8204 BB 14 8228 AA 14 8244 AB 14 8262 AA 14 827E 9B 14 829C AA 14 82B8 FA 14
  9399. 82E4 AA 14 8300 AA 14 831C 9A 14 8338 4D 14 8346 6A 14 8357 5D 14 836C 62 16 8371 90 FC
  9400. 8374 5F 18 838C 89 10 83A0 9B 14 83BE 89 10 83D2 9B 14 83F0 99 10 8409 5A 14 841A 8C 10
  9401. 8434 8A 14 844A 3A 14 8455 4E 14 8464 8A 14 847A 2A 14 8480 C8 10 849B 88 10 84AD 99 10
  9402. 84C6 8C 10 84E0 9C 10 8501 58 10 850F 89 10 8523 5A 14 8534 88 0E 8546 87 0E 8556 C7 0E
  9403. 856E 87 0E 857E 8B 0E 8596 87 0E 85A6 5D 14 85BB 3A 14 85C6 6D 14 85DB 72 16 85E1 6F 18
  9404. 85F9 6F 14 8611 3A 0E 861C 8B 12 8634 8B 14 864C 87 10 865C 9A 14 8678 3A 14 8683 8D 14
  9405. 869F 61 14 86A2 BA 14 86C3 65 14 86CC 75 0C 86D8 95 0C 86E7 5F 16 86FF BA 14 8720 61 14
  9406. 8723 43 18 8727 97 0E 873B 5F 16 8753 5F 16 876B 41 14 876D AB 0E 878B 9D 14 87AE 43 0C
  9407. 87B2 34 02 87B7 6F 16 87CF 65 14 87D8 65 0C 87E1 EC 14 880F C5 12 8821 E9 0E 8844 8A 0E
  9408. 885A AD 1A 887D BD 1A 88A7 BD 1A 88D1 BD 1A 88FB AD 1A 891E BE 1C 894B FA 14 8977 AE 14
  9409. 899D 9D 1A 89C0 9D 1A 89E3 9D 1A 8A06 9D 1A 8A29 4D 1A 8A37 4D 1A 8A45 6D 1A 8A5A 6D 1A
  9410. 8A6F 5F 18 8A87 AD 1A 8AAA BE 1A 8AD7 BE 1A 8B04 BE 1A 8B31 BE 1A 8B5E BE 1A 8B8B 87 0E
  9411. 8B9B BB 14 8BBF 9E 1A 8BE5 9E 1A 8C0B AE 1A 8C31 AE 1A 8C57 5F 18 8C6F 5F 18 8C87 8B 14
  9412. 8C9F 8B 14 8CB7 9B 14 8CD5 8C 16 8CEF 8C 16 8D09 8B 14 8D21 9D 18 8D44 D9 10 8D67 8C 10
  9413. 8D81 8B 14 8D99 9B 14 8DB7 9C 16 8DD8 8B 14 8DF0 5A 14 8E01 5A 14 8E12 5A 14 8E23 6A 14
  9414. 8E34 8B 14 8E4C 8B 16 8E64 9B 14 8E82 9B 14 8EA0 9C 16 8EC1 9C 16 8EE2 9B 14 8F00 87 0E
  9415. 8F10 A9 10 8F29 8B 14 8F41 8B 14 8F59 8C 16 8F73 8C 16 8F8D 5F 18 8FA5 5F 18 8FBD 8F 16
  9416. 8FDD 6F 16 8FF5 4A 12 9000 43 12 9004 9A 12 9020 9C 14 9041 BA 12 9062 8A 12 9078 23 12
  9417. 907A 6C 12 908E 5C 12 90A2 54 12 90AA 87 0C 90BA 33 00 90BE 80 06 90C0 21 00 90C1 7A 12
  9418. 90D7 8A 12 90ED 5A 12 90FE 9A 12 911A 8A 12 9130 8A 12 9146 9A 12 9162 8A 12 9178 8A 12
  9419. 918E 8A 12 91A4 7A 12 91BA 37 0E 91C2 4A 0E 91CD 98 0E 91E4 94 0A 91F1 98 0E 9208 7A 12
  9420. 921E CB 14 9242 AA 12 925E 9A 12 927A BB 14 929E AA 12 92BA BA 12 92DB AA 12 92F7 BB 14
  9421. 931B BA 12 933C 4A 12 9347 8A 12 935D BA 12 937E 8A 12 9394 CA 12 93B5 AA 12 93D1 BB 14
  9422. 93F5 AA 12 9411 BB 14 9435 AA 12 9451 9B 14 946F 9A 12 948B AA 12 94A7 AA 12 94C3 DA 12
  9423. 94EA BA 12 950B 9A 12 9527 BA 12 9548 5C 12 955C 3A 12 9567 5C 12 957B 51 12 957E 80 FC
  9424. 9580 3F 18 9590 78 0E 95A2 9A 12 95BE 88 0E 95D0 9A 12 95EC 88 0E 95FE 5A 12 960F 9B 0E
  9425. 962D 8A 12 9643 4A 12 964E 6D 12 9663 8A 12 9679 4A 12 9684 C8 0E 969F 88 0E 96B1 88 0E
  9426. 96C3 9B 0E 96E1 8B 0E 96F9 68 0E 9707 78 0E 9719 5A 12 972A 88 0E 973C 88 0E 974E A8 0E
  9427. 9765 98 0E 977C 9B 0E 979A 88 0E 97AC 7C 12 97C6 3A 12 97D1 6C 12 97E5 61 12 97E8 6F 18
  9428. 9800 4F 14 9810 4A 0E 981B 8A 10 9831 9A 12 984D 86 0E 985B 9A 12 9877 4A 12 9882 7D 12
  9429. 989E 51 12 98A1 BA 12 98C2 55 14 98CB 74 0A 98D5 84 0A 98DF 5F 14 98F7 BA 12 9918 51 12
  9430. 991B 32 14 991E 87 0C 992E 5F 16 9946 5F 16 995E 31 12 9960 BB 0E 9984 8C 12 999E 33 0C
  9431. 99A2 23 00 99A4 6F 16 99BC 55 14 99C5 64 0A 99CD FB 14 99FD B4 12 9A0C D8 0E 9A2C 7A 0E
  9432. 9A42 AD 18 9A65 AD 18 9A88 9D 18 9AAB AD 18 9ACE AD 18 9AF1 AE 1A 9B17 FA 12 9B43 BE 14
  9433. 9B70 BD 18 9B9A AD 18 9BBD AD 18 9BE0 AD 18 9C03 5D 18 9C18 6D 18 9C2D 6D 18 9C42 6D 18
  9434. 9C57 3F 18 9C67 BD 18 9C91 BD 18 9CBB BD 18 9CE5 BD 18 9D0F BD 18 9D39 BD 18 9D63 98 0E
  9435. 9D7A DB 14 9DA4 AD 18 9DC7 AD 18 9DEA AD 18 9E0D AD 18 9E30 5F 18 9E48 5F 18 9E60 8A 12
  9436. 9E76 8B 14 9E8E 8B 14 9EA6 8B 14 9EBE 8B 14 9ED6 8A 12 9EEC 8C 16 9F06 D8 0E 9F26 7B 0E
  9437. 9F3E 8B 14 9F56 7B 14 9F6E 8B 14 9F86 8A 12 9F9C 3B 14 9FA8 5B 14 9FBA 5B 14 9FCC 5A 12
  9438. 9FDD 8A 12 9FF3 8B 14 A00B 8B 14 A023 8B 14 A03B 8B 14 A053 8B 14 A06B 8A 12 A081 86 0C
  9439. A08F 98 0E A0A6 7B 14 A0BE 8B 14 A0D6 8B 14 A0EE 8A 12 A104 5E 16 A11B 5E 16 A132 9D 12
  9440. A155 6F 1A A16D 1B 16 A173 53 16 A179 7B 16 A191 5D 18 A1A6 7B 16 A1BE 5B 16 A1D0 23 16
  9441. A1D2 2F 18 A1DA 2F 18 A1E2 33 16 A1E6 54 0C A1EE 24 04 A1F1 50 08 A1F3 12 04 A1F5 3A 16
  9442. A200 4B 16 A20C 2B 16 A212 4B 16 A21E 5B 16 A230 4B 16 A23C 5B 16 A24E 4B 16 A25A 5B 16
  9443. A26C 4B 16 A278 5B 16 A28A 17 10 A28E 28 0E A293 68 10 A2A1 53 0C A2A7 58 10 A2B5 4B 16
  9444. A2C1 7C 18 A2DB 5B 16 A2ED 4B 16 A2F9 6C 18 A30D 5B 16 A31F 5B 16 A331 5C 18 A345 6C 18
  9445. A359 5B 16 A36B 2A 16 A371 4B 16 A37D 6B 16 A38F 5B 16 A3A1 7B 16 A3B9 6B 16 A3CB 6C 18
  9446. A3DF 5B 16 A3F1 6D 18 A406 5C 18 A41A 6C 18 A42E 6A 16 A43F 5B 16 A451 6B 16 A463 8C 18
  9447. A47D 5B 16 A48F 5B 16 A4A1 5B 16 A4B3 2E 16 A4BB 3A 16 A4C6 2E 16 A4CE 53 1A A4D4 70 FC
  9448. A4D6 5F 1C A4EE 48 10 A4F7 5B 16 A509 59 12 A518 5B 16 A52A 58 10 A538 3C 18 A545 4B 10
  9449. A551 4B 16 A55D 2B 16 A563 2E 16 A56B 4B 16 A577 2B 16 A57D 68 10 A58B 48 10 A594 59 12
  9450. A5A3 4B 10 A5AF 5B 10 A5C1 38 10 A5CA 59 12 A5D9 3A 14 A5E4 48 10 A5ED 58 10 A5FB 68 10
  9451. A609 48 10 A612 5B 10 A624 58 10 A632 4E 16 A641 2E 16 A649 4E 16 A658 61 16 A65B 6C 18
  9452. A66F 5E 16 A686 2B 10 A68C 5C 14 A6A0 4B 16 A6AC 57 12 A6B8 4A 16 A6C3 2B 16 A6C9 4E 16
  9453. A6D8 31 16 A6DA 7B 16 A6F2 36 18 A6F9 65 0E A702 44 0C A707 6B 16 A719 7B 16 A731 70 16
  9454. A733 22 18 A735 57 0E A741 5F 1A A759 5F 1A A771 21 16 A772 5B 10 A784 5E 16 A79B 23 0E
  9455. A79D 23 00 A79F 6D 16 A7B4 36 18 A7BB 64 0C A7C3 8B 16 A7DB 75 16 A7E7 88 10 A7F9 5B 10
  9456. A80B 5E 1C A822 5E 1C A839 5E 1C A850 6E 1C A867 5D 1A A87C 5F 1E A894 8B 16 A8AC 6F 18
  9457. A8C4 5F 1E A8DC 5E 1C A8F3 5F 1E A90B 5D 1A A920 2E 1C A928 2E 1C A930 5F 1E A948 4D 1A
  9458. A956 5F 1C A96E 6E 1C A985 7E 1C A9A3 7E 1C A9C1 7F 1E A9E1 7E 1C A9FF 7D 1A AA1B 48 10
  9459. AA24 6C 18 AA38 6E 1C AA4F 6E 1C AA66 6F 1E AA7E 6D 1A AA93 6F 1C AAAB 5F 1C AAC3 4B 16
  9460. AACF 5B 16 AAE1 5B 16 AAF3 5C 18 AB07 6B 16 AB19 4A 14 AB24 5C 18 AB38 78 10 AB4A 4B 10
  9461. AB56 5B 16 AB68 5B 16 AB7A 5C 18 AB8E 4A 14 AB99 2B 16 AB9F 2B 16 ABA5 5B 16 ABB7 4A 14
  9462. ABC2 4B 16 ABCE 6B 16 ABE0 5B 16 ABF2 5B 16 AC04 5C 18 AC18 6B 16 AC2A 4A 14 AC35 56 0E
  9463. AC40 58 10 AC4E 5B 16 AC60 4B 16 AC6C 5C 18 AC80 4A 14 AC8B 5F 1A ACA3 6F 1A ACBB 4D 14
  9464. ACC9 6F 1A ACE1 2C 18 ACE8 53 18 ACEE 8C 18 AD08 7E 18 AD26 6B 16 AD38 8C 18 AD52 23 18
  9465. AD54 3F 18 AD64 3F 18 AD74 53 18 AD7A 87 10 AD8A 23 02 AD8C 71 0A AD90 21 02 AD91 5E 1A
  9466. ADA8 5B 16 ADBA 4B 16 ADC6 5B 16 ADD8 5B 16 ADEA 7B 16 AE02 5B 16 AE14 5B 16 AE26 7B 16
  9467. AE3E 5B 16 AE50 5B 16 AE62 27 10 AE66 29 10 AE6B 7A 12 AE81 74 0C AE8B 7A 12 AEA1 6C 18
  9468. AEB5 8C 18 AECF 7C 18 AEE9 6C 18 AEFD 6C 18 AF11 6C 18 AF25 5C 18 AF39 5C 18 AF4D 6C 18
  9469. AF61 6C 18 AF75 2C 18 AF7C 6C 18 AF90 8C 18 AFAA 5C 18 AFBE 8C 18 AFD8 7C 18 AFF2 6C 18
  9470. B006 6C 18 B01A 7C 18 B034 6C 18 B048 6C 18 B05C 6C 18 B070 6C 18 B084 7C 18 B09E AC 18
  9471. B0BF 8C 18 B0D9 8C 18 B0F3 6C 18 B107 3F 1C B117 5E 1A B12E 3F 1C B13E 52 16 B143 80 FC
  9472. B145 5F 1C B15D 59 12 B16C 5C 18 B180 58 10 B18E 5C 18 B1A2 59 12 B1B1 4C 18 B1BE 5C 12
  9473. B1D2 5C 18 B1E6 2C 18 B1ED 4F 18 B1FD 6C 18 B211 2C 18 B218 79 12 B22C 59 12 B23B 59 12
  9474. B24A 5C 12 B25E 5C 12 B272 59 12 B281 5A 14 B292 4B 16 B29E 58 10 B2AC 78 10 B2BE 88 10
  9475. B2D0 78 10 B2E2 7A 10 B2F8 58 10 B306 5E 16 B31D 1C 18 B324 5E 16 B33B 61 16 B33E 6C 18
  9476. B352 5E 16 B369 2B 10 B36F 6C 14 B383 7B 16 B39B 79 14 B3AF 8B 16 B3C7 1C 18 B3CE 7D 16
  9477. B3EA 40 16 B3EB 7B 16 B403 36 18 B40A A9 12 B423 82 0C B429 6B 16 B43B 7B 16 B453 80 16
  9478. B455 32 18 B458 8A 14 B46E 34 18 B473 34 18 B478 31 18 B47A 8A 10 B490 6E 16 B4A7 43 0E
  9479. B4AB 23 02 B4AD 34 18 B4B2 36 18 B4B9 A9 12 B4D2 8B 16 B4EA 82 16 B4F0 89 10 B504 6B 10
  9480. B516 7E 1C B534 7E 1C B552 7F 1E B572 7E 1C B590 7E 1C B5AE 7F 1E B5CE 8C 18 B5E8 6E 18
  9481. B5FF 5F 1E B617 5F 1E B62F 5F 1E B647 5E 1C B65E 3F 1E B66E 3F 1E B67E 5F 1E B696 4E 1C
  9482. B6A5 7C 18 B6BF 7E 1C B6DD 6F 1E B6F5 6F 1E B70D 6F 1E B725 6F 1E B73D 6E 1C B754 78 12
  9483. B766 8C 18 B780 6E 1C B797 6E 1C B7AE 6E 1C B7C5 6D 1A B7DA 8D 1A B7F6 8E 1C B814 6D 1A
  9484. B829 5B 16 B83B 5B 16 B84D 5C 18 B861 6B 16 B873 5A 14 B884 5C 18 B898 89 12 B8AC 5D 12
  9485. B8C1 5B 16 B8D3 5B 16 B8E5 5B 16 B8F7 5A 14 B908 3B 16 B914 3B 16 B920 5B 16 B932 4A 14
  9486. B93D 5B 16 B94F 6B 16 B961 5B 16 B973 5B 16 B985 5C 18 B999 6B 16 B9AB 5A 14 B9BC 87 10
  9487. B9CC 7B 14 B9E4 5B 16 B9F6 5B 16 BA08 5B 16 BA1A 5A 14 BA2B 7C 16 BA45 5C 16 BA59 7B 14
  9488. BA71 6F 18 BA89 3B 16 BA95 64 14 BA9D 69 12 BAAC 6D 16 BAC1 7B 14 BAD9 7B 14 BAF1 44 14
  9489. BAF6 4D 16 BB04 3D 16 BB12 79 12 BB26 69 12 BB35 33 02 BB39 61 0A BB3C 32 02 BB3F 8D 16
  9490. BB5B 6B 16 BB6D 5B 16 BB7F 7B 16 BB97 6B 16 BBA9 7B 16 BBC1 7B 16 BBD9 7B 16 BBF1 6B 16
  9491. BC03 7B 16 BC1B 7B 16 BC33 38 10 BC3C 39 10 BC46 7C 18 BC60 73 0E BC68 7C 18 BC82 6B 16
  9492. BC94 7B 16 BCAC 7B 16 BCC4 7B 16 BCDC 6B 16 BCEE 7B 16 BD06 7B 16 BD1E 7B 16 BD36 7B 16
  9493. BD4E 8B 16 BD66 5B 16 BD78 6B 16 BD8A 8B 16 BDA2 7B 16 BDBA 7B 16 BDD2 7B 16 BDEA 6B 16
  9494. BDFC 8B 16 BE14 7C 16 BE2E 7B 16 BE46 6B 16 BE58 7B 16 BE70 7B 16 BE88 7B 16 BEA0 8B 16
  9495. BEB8 7B 16 BED0 7B 16 BEE8 7B 16 BF00 3D 18 BF0E 8D 16 BF2A 3D 18 BF38 71 14 BF3C A0 FA
  9496. BF3F 6F 1A BF57 78 10 BF69 AB 16 BF87 88 10 BF99 7B 16 BFB1 78 10 BFC3 6B 16 BFD5 89 10
  9497. BFE9 7B 16 C001 5B 16 C013 4C 16 C020 8B 16 C038 4B 16 C044 78 10 C056 78 10 C068 68 10
  9498. C076 79 10 C08A 79 10 C09E 68 10 C0AC 68 10 C0BA 5A 14 C0CB 78 10 C0DD 78 10 C0EF 88 10
  9499. C101 88 10 C113 79 10 C127 68 10 C135 4D 18 C143 2D 18 C14A 4D 18 C158 51 16 C15B 6F 1C
  9500. C227 6F 16 C23F 6F 16 C173 8A 16 C189 AB 16 C257 6F 16 C1A7 C9 14 C1C5 2D 16 C1CC 6A 16
  9501. C1DD 61 16 C26F 6F 16 C287 6F 16 C1E0 7D 18 C1FC C4 0C C20B 7D 18 C29F 6F 16 C2B7 6F 16
  9502. C2CF 43 18 C2D3 A9 14 C2EC A9 12 C305 AB 16 C412 6F 18 C323 A9 10 C33C 89 14 C350 43 0E
  9503. C354 34 04 C359 DB 14 C383 A0 16 C386 DB 16 C3B0 ED 18 C3E1 ED 18 C42A 6F 18 C442 6F 18
  9504. C45A A2 0E C462 43 06 C466 6D 18 C47B A8 10 C492 5A 18 C4A3 5A 12 C4B4 6A 18 C4C5 7A 12
  9505. C4DB 5D 18 C4F0 5D 18 C505 5D 18 C51A 6D 18 C52F D9 14 C552 D9 14 C575 B9 14 C593 E5 10
  9506. C5A8 F5 0E C5C0 7D 16 C5DC 6D 16 C5F1 EB 14 C61B EB 14 C645 D9 12 C668 D9 12 C68B AD 16
  9507. C6AE AD 16 C6D1 FA 14 C6FD 9C 16 C71E 6F 16 C736 6F 16 C74E 6F 16 C766 6F 16 C77E 6F 16
  9508. C796 E6 12 C7AF A8 10 C7C6 51 18 C7C9 63 18 C7CF 34 18 C7D4 48 10 C7DD D3 0E C7EB A3 0E
  9509. C7F5 5D 18 C80A C2 0E C813 8B 16 C82B B9 12 C849 6F 1A C861 6F 1A C879 6F 1A C891 6F 1A
  9510. C8A9 0F 17 C8E9 96 0E C8FB 78 10 C90D 96 0E C91F 78 10 C931 9E 14 C957 F8 10 C97B 9E 16
  9511. C9A1 F8 10 C9C5 CC 14 C9EC DC 16 CA1A DC 14 CA48 DC 14 CA76 EF 16 CAAE 07 0F CACE 07 0F
  9512. CAEE 8F 16 CB0E ED 14 CB3F ED 14 CB70 ED 14 CBA1 EF 16 CBD9 CB 12 CBFD CB 12 CC21 CB 12
  9513.  
  9514. 801D2040 0xB1C0 handle leocmd 6: write
  9515. 3C07801E LUI A3,801E
  9516. 24E75E78 ADDIU A3,A3,5E78
  9517. 8CE40000 LW A0,0000 (A3) # leocmd = @801E5E78
  9518. 27BDFFD0 ADDIU SP,SP,FFD0
  9519. AFBF0014 SW RA,0014 (SP)
  9520. 8C82000C LW V0,000C (A0) # LBA = leocmd+C
  9521. 8C830010 LW V1,0010 (A0) # length = leocmd+10
  9522. 24190020 ADDIU T9,R0,0020
  9523. 00437025 OR T6,V0,V1
  9524. 000E7C02 SRL T7,T6,0x10
  9525. 15E00007 BNE T7,R0,+7
  9526. 24420018 ADDIU V0,V0,0018 # LBA += 24: add on system LBAs
  9527. 2C4110DC SLTIU AT,V0,10DC
  9528. 10200004 BEQ AT,R0,+4
  9529. 0043C021 ADDU T8,V0,V1
  9530. 2F0110DD SLTIU AT,T8,10DD
  9531. 14200006 BNE AT,R0,+6 # branch if initial LBA and final LBA both valid
  9532. 3C0A801E LUI T2,801E
  9533. A0990005 SB T9,0005 (A0) # leocmd[5] = 0x20: LBA out of range
  9534. 8CE90000 LW T1,0000 (A3) # leocmd = @801E5E78
  9535. 24080002 ADDIU T0,R0,0002
  9536. 10000030 BEQ R0,R0,+48
  9537. A1280004 SB T0,0004 (T1) # leocmd[4] = 2: check condition
  9538. @801D209C
  9539. 914A5E88 LBU T2,5E88 (T2) # 801E5E88[0]: disk type
  9540. 3C0C801E LUI T4,801E
  9541. 240D0021 ADDIU T5,R0,0021
  9542. 000A5840 SLL T3,T2,0x1
  9543. 018B6021 ADDU T4,T4,T3
  9544. 958C9698 LHU T4,9698 (T4) # 801D9698[disk]: highest unwritable LBA for disk type
  9545. 004C082B SLTU AT,V0,T4
  9546. 10200006 BEQ AT,R0,+6 # branch if LBAs fall in writable region
  9547. 00000000 NOP
  9548. A08D0005 SB T5,0005 (A0) # leocmd[5] = 0x21: write protext error
  9549. 8CEF0000 LW T7,0000 (A3) # leocmd = @801E5E78
  9550. 240E0002 ADDIU T6,R0,0002
  9551. 10000022 BEQ R0,R0,+34
  9552. A1EE0004 SB T6,0004 (T7) # leocmd[4] = 2: check condition
  9553. @801D20D4
  9554. 14600005 BNE V1,R0,+5 # if nothing to write, return no error or status
  9555. 34198000 ORI T9,R0,8000
  9556. A0800005 SB R0,0005 (A0) # leocmd[5] = 0
  9557. 8CF80000 LW T8,0000 (A3)
  9558. 1000001C BEQ R0,R0,+28
  9559. A3000004 SB R0,0004 (T8) # leocmd[4] = 0
  9560. @801D20EC
  9561. 3C01801E LUI AT,801E
  9562. A4395E86 SH T9,5E86 (AT) # 801E5E86[0:2] = 0x8000
  9563. 3C01801E LUI AT,801E
  9564. 3C04801E LUI A0,801E
  9565. A4225E90 SH V0,5E90 (AT) # 801E5E90[0:2] = LBA
  9566. 0C0017B0 JAL 80005EC0 # start thread A0
  9567. 24845438 ADDIU A0,A0,5438 # thread = 801E5438: Leo Work
  9568. 3C04801E LUI A0,801E
  9569. 24845E18 ADDIU A0,A0,5E18 # queue = 801E5E18
  9570. 27A5002C ADDIU A1,SP,002C
  9571. 0C00080C JAL 80002030 # read or wait (A2) to write msg from queue A0 to A1
  9572. 24060001 ADDIU A2,R0,0001 # wait
  9573. 8FA8002C LW T0,002C (SP)
  9574. 3C07801E LUI A3,801E
  9575. 3C010009 LUI AT,0009
  9576. 11010007 BEQ T0,AT,+7 # if msg == 0x90000, return no error or status
  9577. 24E75E78 ADDIU A3,A3,5E78
  9578. 8CE90000 LW T1,0000 (A3) # leocmd = @801E5E78
  9579. 240A0002 ADDIU T2,R0,0002
  9580. A1280005 SB T0,0005 (T1) # leocmd[5] = sensecode
  9581. 8CEB0000 LW T3,0000 (A3)
  9582. 10000005 BEQ R0,R0,+5
  9583. A16A0004 SB T2,0004 (T3) # leocmd[4] = 2: check condition
  9584. 8CEC0000 LW T4,0000 (A3) # leocmd = @801E5E78
  9585. A1800005 SB R0,0005 (T4)
  9586. 8CED0000 LW T5,0000 (A3)
  9587. A1A00004 SB R0,0004 (T5) # leocmd[4:6] = (0, 0)
  9588. 8FBF0014 LW RA,0014 (SP)
  9589. 27BD0030 ADDIU SP,SP,0030
  9590. 03E00008 JR RA
  9591. 00000000 NOP
  9592.  
  9593. 00000000 NOP
  9594. 00000000 NOP
  9595.  
  9596. 801D2170 0xB2F0 Japanese-start leo threads
  9597. 27BDFF78 ADDIU SP,SP,FF78
  9598. 3C0E801E LUI T6,801E
  9599. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  9600. AFBF0014 SW RA,0014 (SP)
  9601. AFA40088 SW A0,0088 (SP)
  9602. AFA5008C SW A1,008C (SP)
  9603. AFA60090 SW A2,0090 (SP)
  9604. 11C00003 BEQ T6,R0,+3
  9605. AFA70094 SW A3,0094 (SP)
  9606. 1000007F BEQ R0,R0,+127
  9607. 00001025 OR V0,R0,R0
  9608. 0C073848 JAL 801CE120 # V0 = True if IPL valid else False
  9609. 00000000 NOP
  9610. 14400003 BNE V0,R0,+3
  9611. 00000000 NOP
  9612. 10000079 BEQ R0,R0,+121
  9613. 24020029 ADDIU V0,R0,0029
  9614. 0C07303C JAL 801CC0F0 # V0 = p->ASIC EPI handle, created if necessary
  9615. 00000000 NOP
  9616. 0C000580 JAL 80001600 # V0 = p->EPI handle, created if necessary
  9617. 00000000 NOP
  9618. 240F0001 ADDIU T7,R0,0001
  9619. 3C01801E LUI AT,801E
  9620. 3C05801D LUI A1,801D
  9621. 3C06801E LUI A2,801E
  9622. AFA20084 SW V0,0084 (SP)
  9623. AC2F8DF0 SW T7,8DF0 (AT) # 801D8DF0 = True: leo threads started
  9624. 24C67800 ADDIU A2,A2,7800 # 801E7800
  9625. 24A523B0 ADDIU A1,A1,23B0 # 801D23B0
  9626. 0C001804 JAL 80006010
  9627. 24040001 ADDIU A0,R0,0001
  9628. 8FA40088 LW A0,0088 (SP)
  9629. 8FA5008C LW A1,008C (SP)
  9630. 8FA60090 LW A2,0090 (SP)
  9631. 0C0729F4 JAL 801CA7D0 # create and start leo threads with priority (A0, A1) with A3 msgs at A2
  9632. 8FA70094 LW A3,0094 (SP)
  9633. 3C188000 LUI T8,8000
  9634. 8F18030C LW T8,030C (T8)
  9635. 24010001 ADDIU AT,R0,0001
  9636. 57010004 BNEL T8,AT,+4 # if game was reset, do a leo reset
  9637. 24190002 ADDIU T9,R0,0002
  9638. 0C072AE5 JAL 801CAB94 # V0 = 0; leo reset
  9639. 00000000 NOP
  9640. 24190002 ADDIU T9,R0,0002
  9641. A3B9006C SB T9,006C (SP) # leocmd[0] = 2: inquiry
  9642. A3A0006D SB R0,006D (SP)
  9643. A3A0006E SB R0,006E (SP)
  9644. A3A0006F SB R0,006F (SP)
  9645. 0C072A69 JAL 801CA9A4 # send leocmd A0
  9646. 27A4006C ADDIU A0,SP,006C
  9647. 3C0100FF LUI AT,00FF
  9648. 3421FFFF ORI AT,AT,FFFF
  9649. 27A7006C ADDIU A3,SP,006C
  9650. 00E14024 AND T0,A3,AT
  9651. AFA80024 SW T0,0024 (SP)
  9652. 8FA90024 LW T1,0024 (SP) # T1 = SP+6C & 0xFFFFFF
  9653. 3C02801D LUI V0,801D
  9654. 2442AB94 ADDIU V0,V0,AB94
  9655. 1920000C BLTZ T1,+12
  9656. 3C0100FF LUI AT,00FF
  9657. 3421FFFF ORI AT,AT,FFFF
  9658. 00415024 AND T2,V0,AT # T2 = 0x1CAB94
  9659. 3C010040 LUI AT,0040
  9660. 34213DF4 ORI AT,AT,3DF4
  9661. 01411025 OR V0,T2,AT # V0 = 0x1CAB94 | 0x403DF4: 0x5CBFF4
  9662. 8FAC0024 LW T4,0024 (SP)
  9663. 01826823 SUBU T5,T4,V0
  9664. AFAD0024 SW T5,0024 (SP) # while T2 >= 0: T2 -= 0x5CBFF4: weird and pointless timeout
  9665. 8FAE0024 LW T6,0024 (SP)
  9666. 5DC0FFFC BGTZL T6,-4
  9667. 8FAC0024 LW T4,0024 (SP)
  9668. @
  9669. 93AF0070 LBU T7,0070 (SP)
  9670. 24020008 ADDIU V0,R0,0008
  9671. 24090006 ADDIU T1,R0,0006
  9672. 144F0004 BNE V0,T7,+4
  9673. 24010004 ADDIU AT,R0,0004
  9674. 93B80070 LBU T8,0070 (SP)
  9675. 5058FFFF BEQL V0,T8,-1
  9676. 93B80070 LBU T8,0070 (SP)
  9677. 93B90070 LBU T9,0070 (SP) # status = leocmd[4]
  9678. 3C02801E LUI V0,801E
  9679. 24426800 ADDIU V0,V0,6800
  9680. 53200004 BEQL T9,R0,+4
  9681. 93A80079 LBU T0,0079 (SP)
  9682. 10000034 BEQ R0,R0,+52
  9683. 93A20071 LBU V0,0071 (SP)
  9684. 93A80079 LBU T0,0079 (SP) # hardware version = leocmd[D]
  9685. 93AA0078 LBU T2,0078 (SP) # device type = leocmd[C]
  9686. 93AB007A LBU T3,007A (SP) # #devices = leocmd[E]
  9687. A0480000 SB T0,0000 (V0) # 801E6800[0:4] = (hardware version, 6, device type, #devices)
  9688. 90430000 LBU V1,0000 (V0)
  9689. A0490001 SB T1,0001 (V0)
  9690. A04A0002 SB T2,0002 (V0)
  9691. 306C000F ANDI T4,V1,000F
  9692. 01801825 OR V1,T4,R0
  9693. 15810004 BNE T4,AT,+4 # region = dev if (hardware version & 0xF) == 4 else japanese
  9694. A04B0003 SB T3,0003 (V0)
  9695. 3C01801E LUI AT,801E
  9696. 10000025 BEQ R0,R0,+37
  9697. AC205E9C SW R0,5E9C (AT) # 801E5E9C = 0: "region code" for dev 64DDs
  9698. 24010003 ADDIU AT,R0,0003
  9699. 10610003 BEQ V1,AT,+3
  9700. 8FA40084 LW A0,0084 (SP) # p->IPL EPI handle
  9701. 24010001 ADDIU AT,R0,0001
  9702. 1461001D BNE V1,AT,+29
  9703. 3C050009 LUI A1,0009
  9704. 34A5FF00 ORI A1,A1,FF00 # 0x9FF00
  9705. 27A60028 ADDIU A2,SP,0028
  9706. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  9707. AFA7001C SW A3,001C (SP)
  9708. 8FA30028 LW V1,0028 (SP)
  9709. 3C01FF00 LUI AT,FF00
  9710. 3C0F3ED9 LUI T7,3ED9
  9711. 00616824 AND T5,V1,AT
  9712. 000D1E02 SRL V1,T5,0x18 # check value from IPL 0x9FF00 (0xC3 for Japan)
  9713. 35EF8F23 ORI T7,T7,8F23
  9714. 240100C3 ADDIU AT,R0,00C3
  9715. 8FA7001C LW A3,001C (SP)
  9716. 10610003 BEQ V1,AT,+3 # set region code if IPL+9FF00 == 0xC3 else sit&spin
  9717. AFAF0020 SW T7,0020 (SP)
  9718. 1000FFFF BEQ R0,R0,-1
  9719. 00000000 NOP
  9720. 8FB80020 LW T8,0020 (SP)
  9721. 3C0AE848 LUI T2,E848
  9722. 354AD316 ORI T2,T2,D316
  9723. 03030019 MULTU T8,V1
  9724. 3C01801E LUI AT,801E
  9725. AC2A5E9C SW T2,5E9C (AT) # 801E5E9C = 0xE848D316: "region code" for Japanese retail
  9726. 0000C812 MFLO T9
  9727. AFB90020 SW T9,0020 (SP) # SP+20 = 0xE848D316 * 0xC3 = 0xF03BC9C2: VALUE IS UNUSED
  9728. 8FA80020 LW T0,0020 (SP)
  9729. 01074823 SUBU T1,T0,A3
  9730. 10000003 BEQ R0,R0,+3
  9731. AFA90020 SW T1,0020 (SP)
  9732. 1000FFFF BEQ R0,R0,-1
  9733. 00000000 NOP
  9734. 00001025 OR V0,R0,R0
  9735. 8FBF0014 LW RA,0014 (SP)
  9736. 27BD0088 ADDIU SP,SP,0088
  9737. 03E00008 JR RA
  9738. 00000000 NOP
  9739.  
  9740. 00000000 NOP
  9741. 00000000 NOP
  9742. 00000000 NOP
  9743.  
  9744. 801D23B0 0xB530
  9745. 3C0A801E LUI T2,801E
  9746. 254A5F64 ADDIU T2,T2,5F64
  9747. 8D480000 LW T0,0000 (T2) # @801E5F64
  9748. 27BDFFC8 ADDIU SP,SP,FFC8
  9749. AFBF001C SW RA,001C (SP)
  9750. 3C03A460 LUI V1,A460
  9751. 34630010 ORI V1,V1,0010
  9752. 8C780000 LW T8,0000 (V1)
  9753. 950E001A LHU T6,001A (T0)
  9754. 25080014 ADDIU T0,T0,0014
  9755. AFB80030 SW T8,0030 (SP)
  9756. 8FB90030 LW T9,0030 (SP)
  9757. 000E78C0 SLL T7,T6,0x3
  9758. 01EE7821 ADDU T7,T7,T6
  9759. 000F7880 SLL T7,T7,0x2
  9760. 010F4821 ADDU T1,T0,T7
  9761. 332D0001 ANDI T5,T9,0001
  9762. 11A0000C BEQ T5,R0,+12 # return if PI I/O busy
  9763. 25290018 ADDIU T1,T1,0018
  9764. @801D23FC
  9765. 3C048000 LUI A0,8000
  9766. 24846360 ADDIU A0,A0,6360
  9767. 8C8E0000 LW T6,0000 (A0)
  9768. 2401F7FF ADDIU AT,R0,F7FF
  9769. 2418001D ADDIU T8,R0,001D
  9770. 01C17824 AND T7,T6,AT
  9771. AC8F0000 SW T7,0000 (A0) # 80006360 &= ~0x800
  9772. 0C074A71 JAL 801D29C4
  9773. AD380000 SW T8,0000 (T1)
  9774. 10000137 BEQ R0,R0,+311
  9775. 24020001 ADDIU V0,R0,0001
  9776. @801D2428
  9777. 8C790000 LW T9,0000 (V1)
  9778. 3C04A500 LUI A0,A500
  9779. 34840508 ORI A0,A0,0508
  9780. AFB90030 SW T9,0030 (SP)
  9781. 8FAD0030 LW T5,0030 (SP)
  9782. 3C010100 LUI AT,0100
  9783. 31AE0003 ANDI T6,T5,0003
  9784. 51C00008 BEQL T6,R0,+8
  9785. 8C850000 LW A1,0000 (A0)
  9786. 8C6F0000 LW T7,0000 (V1)
  9787. AFAF0030 SW T7,0030 (SP)
  9788. 8FB80030 LW T8,0030 (SP)
  9789. 33190003 ANDI T9,T8,0003
  9790. 5720FFFC BNEL T9,R0,-4
  9791. 8C6F0000 LW T7,0000 (V1)
  9792. 8C850000 LW A1,0000 (A0)
  9793. 3C0B0200 LUI T3,0200
  9794. 00056980 SLL T5,A1,0x6
  9795. 05A30015 BGEZL T5,+21
  9796. 8D020000 LW V0,0000 (T0)
  9797. 8C6E0000 LW T6,0000 (V1)
  9798. AFAE0030 SW T6,0030 (SP)
  9799. 8FAF0030 LW T7,0030 (SP)
  9800. 31F80003 ANDI T8,T7,0003
  9801. 53000008 BEQL T8,R0,+8
  9802. 8D0F0010 LW T7,0010 (T0)
  9803. 8C790000 LW T9,0000 (V1)
  9804. AFB90030 SW T9,0030 (SP)
  9805. 8FAD0030 LW T5,0030 (SP)
  9806. 31AE0003 ANDI T6,T5,0003
  9807. 55C0FFFC BNEL T6,R0,-4
  9808. 8C790000 LW T9,0000 (V1)
  9809. 8D0F0010 LW T7,0010 (T0)
  9810. 3C19A500 LUI T9,A500
  9811. 00001025 OR V0,R0,R0
  9812. 01E1C025 OR T8,T7,AT
  9813. AF380510 SW T8,0510 (T9)
  9814. 10000110 BEQ R0,R0,+272
  9815. AD200000 SW R0,0000 (T1)
  9816. 8D020000 LW V0,0000 (T0)
  9817. 24060002 ADDIU A2,R0,0002
  9818. 00056900 SLL T5,A1,0x4
  9819. 14C20003 BNE A2,V0,+3
  9820. 00000000 NOP
  9821. 10000109 BEQ R0,R0,+265
  9822. 24020001 ADDIU V0,R0,0001
  9823. 05A3001E BGEZL T5,+30
  9824. 240C0001 ADDIU T4,R0,0001
  9825. 8C6E0000 LW T6,0000 (V1)
  9826. AFAE0030 SW T6,0030 (SP)
  9827. 8FAF0030 LW T7,0030 (SP)
  9828. 31F80003 ANDI T8,T7,0003
  9829. 13000007 BEQ T8,R0,+7
  9830. 240F0016 ADDIU T7,R0,0016
  9831. 8C790000 LW T9,0000 (V1)
  9832. AFB90030 SW T9,0030 (SP)
  9833. 8FAD0030 LW T5,0030 (SP)
  9834. 31AE0003 ANDI T6,T5,0003
  9835. 55C0FFFC BNEL T6,R0,-4
  9836. 8C790000 LW T9,0000 (V1)
  9837. 8C800000 LW R0,0000 (A0)
  9838. 0C074A71 JAL 801D29C4
  9839. AD2F0000 SW T7,0000 (T1)
  9840. 3C03A460 LUI V1,A460
  9841. 34630010 ORI V1,V1,0010
  9842. 3C048000 LUI A0,8000
  9843. 24060002 ADDIU A2,R0,0002
  9844. 24846360 ADDIU A0,A0,6360
  9845. AC660000 SW A2,0000 (V1)
  9846. 8C980000 LW T8,0000 (A0)
  9847. 3C010010 LUI AT,0010
  9848. 34210401 ORI AT,AT,0401
  9849. 0301C825 OR T9,T8,AT
  9850. AC990000 SW T9,0000 (A0) # 80006360 |= 0x100401
  9851. 100000EB BEQ R0,R0,+235
  9852. 24020001 ADDIU V0,R0,0001
  9853. 240C0001 ADDIU T4,R0,0001
  9854. 1582002F BNE T4,V0,+47
  9855. 00056840 SLL T5,A1,0x1
  9856. 05A2001D BLTZL T5,+29
  9857. 8D2F0004 LW T7,0004 (T1)
  9858. 950E0004 LHU T6,0004 (T0)
  9859. 8D180008 LW T8,0008 (T0)
  9860. 3C048000 LUI A0,8000
  9861. 000E7880 SLL T7,T6,0x2
  9862. 01EE7821 ADDU T7,T7,T6
  9863. 000F7880 SLL T7,T7,0x2
  9864. 01EE7821 ADDU T7,T7,T6
  9865. 000F7880 SLL T7,T7,0x2
  9866. 01EE7821 ADDU T7,T7,T6
  9867. 27190001 ADDIU T9,T8,0001
  9868. 11F90006 BEQ T7,T9,+6
  9869. 24846360 ADDIU A0,A0,6360
  9870. 240D0018 ADDIU T5,R0,0018
  9871. 0C074A44 JAL 801D2910
  9872. AD2D0000 SW T5,0000 (T1)
  9873. 100000D5 BEQ R0,R0,+213
  9874. 24020001 ADDIU V0,R0,0001
  9875. AC660000 SW A2,0000 (V1)
  9876. 8C8E0000 LW T6,0000 (A0)
  9877. 3C010010 LUI AT,0010
  9878. 34210401 ORI AT,AT,0401
  9879. 01C1C025 OR T8,T6,AT
  9880. AC980000 SW T8,0000 (A0) # 80006360 |= 0x100401
  9881. 0C074A71 JAL 801D29C4
  9882. AD200000 SW R0,0000 (T1)
  9883. 100000CB BEQ R0,R0,+203
  9884. 24020001 ADDIU V0,R0,0001
  9885. 8D2F0004 LW T7,0004 (T1)
  9886. 8D39000C LW T9,000C (T1)
  9887. 3C060500 LUI A2,0500
  9888. 34C60400 ORI A2,A2,0400
  9889. 01F96821 ADDU T5,T7,T9
  9890. AD2D0004 SW T5,0004 (T1)
  9891. 8D0E0008 LW T6,0008 (T0)
  9892. 24050001 ADDIU A1,R0,0001
  9893. 25D80001 ADDIU T8,T6,0001
  9894. AD180008 SW T8,0008 (T0)
  9895. 8D2F000C LW T7,000C (T1)
  9896. 8D270004 LW A3,0004 (T1)
  9897. 8D440000 LW A0,0000 (T2)
  9898. 0C0011B8 JAL 800046E0
  9899. AFAF0010 SW T7,0010 (SP)
  9900. 100000BA BEQ R0,R0,+186
  9901. 24020001 ADDIU V0,R0,0001
  9902. 144000B5 BNE V0,R0,+181
  9903. 24180004 ADDIU T8,R0,0004
  9904. 95190004 LHU T9,0004 (T0)
  9905. 24070003 ADDIU A3,R0,0003
  9906. 54F90013 BNEL A3,T9,+19
  9907. 8D2E0004 LW T6,0004 (T1)
  9908. 8D2E0010 LW T6,0010 (T1)
  9909. 8D0D0008 LW T5,0008 (T0)
  9910. 00057840 SLL T7,A1,0x1
  9911. 25D80011 ADDIU T8,T6,0011
  9912. 030D082A SLT AT,T8,T5
  9913. 10200005 BEQ AT,R0,+5
  9914. 00000000 NOP
  9915. 0C074A44 JAL 801D2910
  9916. AD200000 SW R0,0000 (T1)
  9917. 100000A9 BEQ R0,R0,+169
  9918. 24020001 ADDIU V0,R0,0001
  9919. 05E00009 BLTZ T7,+9
  9920. 24190017 ADDIU T9,R0,0017
  9921. 0C074A44 JAL 801D2910
  9922. AD390000 SW T9,0000 (T1)
  9923. 100000A3 BEQ R0,R0,+163
  9924. 24020001 ADDIU V0,R0,0001
  9925. 8D2E0004 LW T6,0004 (T1)
  9926. 8D2D000C LW T5,000C (T1)
  9927. 01CDC021 ADDU T8,T6,T5
  9928. AD380004 SW T8,0004 (T1)
  9929. 3C0FA500 LUI T7,A500
  9930. 8DE20510 LW V0,0510 (T7)
  9931. 0002CA80 SLL T9,V0,0xA
  9932. 07210002 BGEZ T9,+2
  9933. 00027240 SLL T6,V0,0x9
  9934. 05C00003 BLTZ T6,+3
  9935. 004B6824 AND T5,V0,T3
  9936. 51A0001A BEQL T5,R0,+26
  9937. 000570C0 SLL T6,A1,0x3
  9938. 8D240010 LW A0,0010 (T1)
  9939. 2C810004 SLTIU AT,A0,0004
  9940. 5420000E BNEL AT,R0,+14
  9941. 8D0E0008 LW T6,0008 (T0)
  9942. 95180004 LHU T8,0004 (T0)
  9943. 24190017 ADDIU T9,R0,0017
  9944. 14F80005 BNE A3,T8,+5
  9945. 00000000 NOP
  9946. 8D0F0008 LW T7,0008 (T0)
  9947. 29E10053 SLTI AT,T7,0053
  9948. 5420000C BNEL AT,R0,+12
  9949. 24990001 ADDIU T9,A0,0001
  9950. 0C074A44 JAL 801D2910
  9951. AD390000 SW T9,0000 (T1)
  9952. 10000086 BEQ R0,R0,+134
  9953. 24020001 ADDIU V0,R0,0001
  9954. 8D0E0008 LW T6,0008 (T0)
  9955. 0004C080 SLL T8,A0,0x2
  9956. 01387821 ADDU T7,T1,T8
  9957. 25CD0001 ADDIU T5,T6,0001
  9958. ADED0014 SW T5,0014 (T7)
  9959. 8D240010 LW A0,0010 (T1)
  9960. 24990001 ADDIU T9,A0,0001
  9961. AD390010 SW T9,0010 (T1)
  9962. 000570C0 SLL T6,A1,0x3
  9963. 05C1002C BGEZ T6,+44
  9964. 8D020008 LW V0,0008 (T0)
  9965. 24010057 ADDIU AT,R0,0057
  9966. 10410006 BEQ V0,AT,+6
  9967. 00002825 OR A1,R0,R0
  9968. 24180018 ADDIU T8,R0,0018
  9969. 0C074A44 JAL 801D2910
  9970. AD380000 SW T8,0000 (T1)
  9971. 10000073 BEQ R0,R0,+115
  9972. 24020001 ADDIU V0,R0,0001
  9973. 950D0004 LHU T5,0004 (T0)
  9974. 24010002 ADDIU AT,R0,0002
  9975. 3C048000 LUI A0,8000
  9976. 15A1000E BNE T5,AT,+14
  9977. 24846360 ADDIU A0,A0,6360
  9978. 950F0006 LHU T7,0006 (T0)
  9979. 2419FFFF ADDIU T9,R0,FFFF
  9980. 55E0000B BNEL T7,R0,+11
  9981. AC660000 SW A2,0000 (V1)
  9982. 8D0E0040 LW T6,0040 (T0)
  9983. 8D180048 LW T8,0048 (T0)
  9984. A50C0006 SH T4,0006 (T0)
  9985. AD190008 SW T9,0008 (T0)
  9986. 01D86823 SUBU T5,T6,T8
  9987. AD0D0040 SW T5,0040 (T0)
  9988. 240F0016 ADDIU T7,R0,0016
  9989. 10000009 BEQ R0,R0,+9
  9990. AD2F0000 SW T7,0000 (T1)
  9991. AC660000 SW A2,0000 (V1)
  9992. 8C990000 LW T9,0000 (A0)
  9993. 3C010010 LUI AT,0010
  9994. 34210401 ORI AT,AT,0401
  9995. 03217025 OR T6,T9,AT
  9996. AC8E0000 SW T6,0000 (A0) # 80006360 |= 0x100401
  9997. AD060000 SW A2,0000 (T0)
  9998. AD200000 SW R0,0000 (T1)
  9999. 8D38000C LW T8,000C (T1)
  10000. 8D270008 LW A3,0008 (T1)
  10001. 8D440000 LW A0,0000 (T2)
  10002. 00186880 SLL T5,T8,0x2
  10003. AFAD0010 SW T5,0010 (SP)
  10004. 0C0011B8 JAL 800046E0
  10005. 3C060500 LUI A2,0500
  10006. 10000050 BEQ R0,R0,+80
  10007. 24020001 ADDIU V0,R0,0001
  10008. 2401FFFF ADDIU AT,R0,FFFF
  10009. 54410028 BNEL V0,AT,+40
  10010. 24590001 ADDIU T9,V0,0001
  10011. 950F0004 LHU T7,0004 (T0)
  10012. 24010002 ADDIU AT,R0,0002
  10013. 55E10024 BNEL T7,AT,+36
  10014. 24590001 ADDIU T9,V0,0001
  10015. 95190006 LHU T9,0006 (T0)
  10016. 24010001 ADDIU AT,R0,0001
  10017. 57210020 BNEL T9,AT,+32
  10018. 24590001 ADDIU T9,V0,0001
  10019. 8D0E0028 LW T6,0028 (T0)
  10020. 25030018 ADDIU V1,T0,0018
  10021. 55C00011 BNEL T6,R0,+17
  10022. AD000018 SW R0,0018 (T0)
  10023. 8C620008 LW V0,0008 (V1)
  10024. 8C58000C LW T8,000C (V0)
  10025. 8C4D0000 LW T5,0000 (V0)
  10026. 8C590004 LW T9,0004 (V0)
  10027. 030D7825 OR T7,T8,T5
  10028. 8C580008 LW T8,0008 (V0)
  10029. 01F97025 OR T6,T7,T9
  10030. 240F0017 ADDIU T7,R0,0017
  10031. 01D86825 OR T5,T6,T8
  10032. 51A00006 BEQL T5,R0,+6
  10033. AD000018 SW R0,0018 (T0)
  10034. 0C074A44 JAL 801D2910
  10035. AC6F0000 SW T7,0000 (V1)
  10036. 10000032 BEQ R0,R0,+50
  10037. 24020001 ADDIU V0,R0,0001
  10038. AD000018 SW R0,0018 (T0)
  10039. AFA90024 SW T1,0024 (SP)
  10040. AFA80028 SW T0,0028 (SP)
  10041. 0C074A71 JAL 801D29C4
  10042. AFA50034 SW A1,0034 (SP)
  10043. 8FA80028 LW T0,0028 (SP)
  10044. 3C0A801E LUI T2,801E
  10045. 254A5F64 ADDIU T2,T2,5F64
  10046. 8FA50034 LW A1,0034 (SP)
  10047. 8FA90024 LW T1,0024 (SP)
  10048. 8D020008 LW V0,0008 (T0)
  10049. 24590001 ADDIU T9,V0,0001
  10050. 00057040 SLL T6,A1,0x1
  10051. 05C10015 BGEZ T6,+21
  10052. AD190008 SW T9,0008 (T0)
  10053. 2B210055 SLTI AT,T9,0055
  10054. 14200006 BNE AT,R0,+6
  10055. 00002825 OR A1,R0,R0
  10056. 240D0018 ADDIU T5,R0,0018
  10057. 0C074A44 JAL 801D2910
  10058. AD2D0000 SW T5,0000 (T1)
  10059. 1000001B BEQ R0,R0,+27
  10060. 24020001 ADDIU V0,R0,0001
  10061. 8D2F000C LW T7,000C (T1)
  10062. 3C060500 LUI A2,0500
  10063. 8D270004 LW A3,0004 (T1)
  10064. AFA90024 SW T1,0024 (SP)
  10065. 34C60400 ORI A2,A2,0400
  10066. 8D440000 LW A0,0000 (T2)
  10067. 0C0011B8 JAL 800046E0
  10068. AFAF0010 SW T7,0010 (SP)
  10069. 8FA90024 LW T1,0024 (SP)
  10070. 24020001 ADDIU V0,R0,0001
  10071. 1000000F BEQ R0,R0,+15
  10072. AD200000 SW R0,0000 (T1)
  10073. 8D190008 LW T9,0008 (T0)
  10074. 240E0018 ADDIU T6,R0,0018
  10075. 2B210055 SLTI AT,T9,0055
  10076. 10200005 BEQ AT,R0,+5
  10077. 00000000 NOP
  10078. 0C074A44 JAL 801D2910
  10079. AD2E0000 SW T6,0000 (T1)
  10080. 10000006 BEQ R0,R0,+6
  10081. 24020001 ADDIU V0,R0,0001
  10082. 10000004 BEQ R0,R0,+4
  10083. 24020001 ADDIU V0,R0,0001
  10084. 0C074A44 JAL 801D2910
  10085. AD380000 SW T8,0000 (T1)
  10086. 24020001 ADDIU V0,R0,0001
  10087. 8FBF001C LW RA,001C (SP)
  10088. 27BD0038 ADDIU SP,SP,0038
  10089. 03E00008 JR RA
  10090. 00000000 NOP
  10091.  
  10092. 801D2910 0xBA90
  10093. 27BDFFE8 ADDIU SP,SP,FFE8
  10094. 3C03A460 LUI V1,A460
  10095. 34630010 ORI V1,V1,0010
  10096. AFBF0014 SW RA,0014 (SP)
  10097. 8C620000 LW V0,0000 (V1)
  10098. 3C04801E LUI A0,801E
  10099. 8C845F64 LW A0,5F64 (A0) # @801E5F64
  10100. 304E0003 ANDI T6,V0,0003
  10101. 11C00005 BEQ T6,R0,+5
  10102. 24840014 ADDIU A0,A0,0014
  10103. 8C620000 LW V0,0000 (V1)
  10104. 304F0003 ANDI T7,V0,0003
  10105. 55E0FFFE BNEL T7,R0,-2
  10106. 8C620000 LW V0,0000 (V1)
  10107. 8C980010 LW T8,0010 (A0)
  10108. 3C05A500 LUI A1,A500
  10109. 3C011000 LUI AT,1000
  10110. 34A50510 ORI A1,A1,0510
  10111. 0301C825 OR T9,T8,AT
  10112. ACB90000 SW T9,0000 (A1)
  10113. 8C620000 LW V0,0000 (V1)
  10114. 30480003 ANDI T0,V0,0003
  10115. 51000006 BEQL T0,R0,+6
  10116. 8C8A0010 LW T2,0010 (A0)
  10117. 8C620000 LW V0,0000 (V1)
  10118. 30490003 ANDI T1,V0,0003
  10119. 5520FFFE BNEL T1,R0,-2
  10120. 8C620000 LW V0,0000 (V1)
  10121. 8C8A0010 LW T2,0010 (A0)
  10122. 0C074A71 JAL 801D29C4
  10123. ACAA0000 SW T2,0000 (A1)
  10124. 3C03A460 LUI V1,A460
  10125. 34630010 ORI V1,V1,0010
  10126. 3C028000 LUI V0,8000
  10127. 240B0002 ADDIU T3,R0,0002
  10128. 24426360 ADDIU V0,V0,6360
  10129. AC6B0000 SW T3,0000 (V1)
  10130. 8C4C0000 LW T4,0000 (V0)
  10131. 8FBF0014 LW RA,0014 (SP)
  10132. 3C010010 LUI AT,0010
  10133. 34210401 ORI AT,AT,0401
  10134. 01816825 OR T5,T4,AT
  10135. AC4D0000 SW T5,0000 (V0) # 80006360 |= 0x100401
  10136. 03E00008 JR RA
  10137. 27BD0018 ADDIU SP,SP,0018
  10138.  
  10139. 801D29C4 0xBB44
  10140. 3C048001 LUI A0,8001
  10141. 8C849E20 LW A0,9E20 (A0) # @80009E20
  10142. 27BDFFE8 ADDIU SP,SP,FFE8
  10143. AFBF0014 SW RA,0014 (SP)
  10144. 50800027 BEQL A0,R0,+39
  10145. 8FBF0014 LW RA,0014 (SP)
  10146. 8C830008 LW V1,0008 (A0)
  10147. 8C850010 LW A1,0010 (A0)
  10148. 3C188001 LUI T8,8001
  10149. 0065082A SLT AT,V1,A1
  10150. 50200021 BEQL AT,R0,+33
  10151. 8FBF0014 LW RA,0014 (SP)
  10152. 8C8E000C LW T6,000C (A0)
  10153. 8C990014 LW T9,0014 (A0)
  10154. 8F189E24 LW T8,9E24 (T8)
  10155. 01C37821 ADDU T7,T6,V1
  10156. 01E5001A DIV T7,A1
  10157. 00001010 MFHI V0
  10158. 00024080 SLL T0,V0,0x2
  10159. 03284821 ADDU T1,T9,T0
  10160. AD380000 SW T8,0000 (T1)
  10161. 8C8A0008 LW T2,0008 (A0)
  10162. 8C8C0000 LW T4,0000 (A0)
  10163. 14A00002 BNE A1,R0,+2
  10164. 00000000 NOP
  10165. 0007000D BREAK 0x1C00
  10166. 2401FFFF ADDIU AT,R0,FFFF
  10167. 14A10004 BNE A1,AT,+4
  10168. 3C018000 LUI AT,8000
  10169. 15E10002 BNE T7,AT,+2
  10170. 00000000 NOP
  10171. 0006000D BREAK 0x1800
  10172. 254B0001 ADDIU T3,T2,0001
  10173. AC8B0008 SW T3,0008 (A0)
  10174. 8D8D0000 LW T5,0000 (T4)
  10175. 51A00008 BEQL T5,R0,+8
  10176. 8FBF0014 LW RA,0014 (SP)
  10177. 0C000AE5 JAL 80002B94
  10178. 00000000 NOP
  10179. 3C048000 LUI A0,8000
  10180. 24846338 ADDIU A0,A0,6338
  10181. 0C000AD3 JAL 80002B4C
  10182. 00402825 OR A1,V0,R0
  10183. 8FBF0014 LW RA,0014 (SP)
  10184. 27BD0018 ADDIU SP,SP,0018
  10185. 03E00008 JR RA
  10186. 00000000 NOP
  10187.  
  10188. 801D2A80 0xBC00 English+Debug-start leo threads
  10189. 27BDFF78 ADDIU SP,SP,FF78
  10190. 3C0E801E LUI T6,801E
  10191. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  10192. AFBF0014 SW RA,0014 (SP)
  10193. AFA40088 SW A0,0088 (SP)
  10194. AFA5008C SW A1,008C (SP)
  10195. AFA60090 SW A2,0090 (SP)
  10196. 11C00003 BEQ T6,R0,+3
  10197. AFA70094 SW A3,0094 (SP)
  10198. 1000007C BEQ R0,R0,+124
  10199. 00001025 OR V0,R0,R0
  10200. 0C073848 JAL 801CE120 # V0 = True if IPL valid else False
  10201. 00000000 NOP
  10202. 14400003 BNE V0,R0,+3
  10203. 00000000 NOP
  10204. 10000076 BEQ R0,R0,+118
  10205. 24020029 ADDIU V0,R0,0029
  10206. @801D2AC4
  10207. 0C07303C JAL 801CC0F0 # V0 = p->ASIC EPI handle, created if necessary
  10208. 00000000 NOP
  10209. 0C000580 JAL 80001600 # V0 = p->EPI handle, created if necessary
  10210. 00000000 NOP
  10211. 240F0001 ADDIU T7,R0,0001
  10212. 3C01801E LUI AT,801E
  10213. 3C05801D LUI A1,801D
  10214. 3C06801E LUI A2,801E
  10215. AFA20084 SW V0,0084 (SP)
  10216. AC2F8DF0 SW T7,8DF0 (AT) # 801D8DF0 = True: leo threads started
  10217. 24C67800 ADDIU A2,A2,7800
  10218. 24A523B0 ADDIU A1,A1,23B0
  10219. 0C001804 JAL 80006010
  10220. 24040001 ADDIU A0,R0,0001
  10221. 8FA40088 LW A0,0088 (SP)
  10222. 8FA5008C LW A1,008C (SP)
  10223. 8FA60090 LW A2,0090 (SP)
  10224. 0C0729F4 JAL 801CA7D0 # create and start leo threads with priority (A0, A1) with A3 msgs at A2
  10225. 8FA70094 LW A3,0094 (SP)
  10226. 3C188000 LUI T8,8000
  10227. 8F18030C LW T8,030C (T8) # osResetType = @8000030C
  10228. 24010001 ADDIU AT,R0,0001
  10229. 57010004 BNEL T8,AT,+4 # reset leo if reset via NMI (not cold or hooked)
  10230. 24190002 ADDIU T9,R0,0002
  10231. @801D2B24
  10232. 0C072AE5 JAL 801CAB94 # V0 = 0; leo reset
  10233. 00000000 NOP
  10234. @801D2B2C
  10235. 24190002 ADDIU T9,R0,0002
  10236. A3B9006C SB T9,006C (SP) # leocmd[0] = 2: inquiry
  10237. A3A0006D SB R0,006D (SP)
  10238. A3A0006E SB R0,006E (SP)
  10239. A3A0006F SB R0,006F (SP)
  10240. 0C072A69 JAL 801CA9A4 # send leocmd A0
  10241. 27A4006C ADDIU A0,SP,006C
  10242. 3C088000 LUI T0,8000
  10243. 3C0100A4 LUI AT,00A4
  10244. 34218D3C ORI AT,AT,8D3C
  10245. 25086010 ADDIU T0,T0,6010
  10246. 01014824 AND T1,T0,AT
  10247. AFA90024 SW T1,0024 (SP)
  10248. 8FAA0024 LW T2,0024 (SP)
  10249. 3C0300E0 LUI V1,00E0
  10250. 3C02801D LUI V0,801D
  10251. 0143082A SLT AT,T2,V1
  10252. 1020000B BEQ AT,R0,+11
  10253. 2442A9A4 ADDIU V0,V0,A9A4
  10254. 304B00FF ANDI T3,V0,00FF
  10255. 356C008A ORI T4,T3,008A
  10256. 000C1400 SLL V0,T4,0x10
  10257. 8FAE0024 LW T6,0024 (SP)
  10258. 01C27821 ADDU T7,T6,V0
  10259. AFAF0024 SW T7,0024 (SP)
  10260. 8FB80024 LW T8,0024 (SP)
  10261. 0303082A SLT AT,T8,V1
  10262. 5420FFFB BNEL AT,R0,-5
  10263. 8FAE0024 LW T6,0024 (SP)
  10264. 93B90070 LBU T9,0070 (SP) # leocmd[4]: status
  10265. 24020008 ADDIU V0,R0,0008
  10266. 240B0006 ADDIU T3,R0,0006
  10267. 14590004 BNE V0,T9,+4
  10268. 24010004 ADDIU AT,R0,0004
  10269. 93A80070 LBU T0,0070 (SP)
  10270. 5048FFFF BEQL V0,T0,-1 # while status is busy: pass
  10271. 93A80070 LBU T0,0070 (SP)
  10272. 93A90070 LBU T1,0070 (SP)
  10273. 3C02801E LUI V0,801E
  10274. 24426800 ADDIU V0,V0,6800
  10275. 51200004 BEQL T1,R0,+4
  10276. 93AA0079 LBU T2,0079 (SP)
  10277. 10000030 BEQ R0,R0,+48
  10278. 93A20071 LBU V0,0071 (SP) # if status: return sensecode
  10279. @801D2BDC: development 64DD
  10280. 93AA0079 LBU T2,0079 (SP) # leocmd[D] = hardware version
  10281. 93AC0078 LBU T4,0078 (SP) # leocmd[C] = device type
  10282. 93AD007A LBU T5,007A (SP) # leocmd[E] = #devices
  10283. A04A0000 SB T2,0000 (V0)
  10284. 90430000 LBU V1,0000 (V0)
  10285. A04B0001 SB T3,0001 (V0)
  10286. A04C0002 SB T4,0002 (V0)
  10287. 306E000F ANDI T6,V1,000F
  10288. 01C01825 OR V1,T6,R0
  10289. 15C10004 BNE T6,AT,+4 # region = dev if (hardware version & 0xF) == 4 else english
  10290. A04D0003 SB T5,0003 (V0) # 801E6800[0:4] = (hardware version, 6, device type, #devices)
  10291. 3C01801E LUI AT,801E
  10292. 10000021 BEQ R0,R0,+33
  10293. AC205E9C SW R0,5E9C (AT) # 801E5E9C = 0: "region code" for dev 64DDs
  10294. @801D2C14: North American 64DD
  10295. 24010003 ADDIU AT,R0,0003
  10296. 10610003 BEQ V1,AT,+3
  10297. 8FA40084 LW A0,0084 (SP)
  10298. 24010001 ADDIU AT,R0,0001
  10299. 14610019 BNE V1,AT,+25 # if (hardware version & 0xF) not in (1, 3): inf. loop
  10300. 3C050009 LUI A1,0009
  10301. 34A5FF00 ORI A1,A1,FF00
  10302. 0C00158C JAL 80005630 # read word from hardware offset A1 to A2 using EPI handle A0
  10303. 27A60028 ADDIU A2,SP,0028
  10304. 8FA30028 LW V1,0028 (SP)
  10305. 3C01FF00 LUI AT,FF00
  10306. 3C1932F8 LUI T9,32F8
  10307. 00617824 AND T7,V1,AT
  10308. 000FC602 SRL T8,T7,0x18
  10309. 24010004 ADDIU AT,R0,0004
  10310. 13010003 BEQ T8,AT,+3 # if IPL+9FF00[0] != 4: inf. loop
  10311. 3739EB20 ORI T9,T9,EB20
  10312. 1000FFFF BEQ R0,R0,-1
  10313. 00000000 NOP
  10314. @801D2C94
  10315. AFB90020 SW T9,0020 (SP)
  10316. 8FA90020 LW T1,0020 (SP)
  10317. 3C0A801E LUI T2,801E
  10318. 3C082263 LUI T0,2263
  10319. 254A8DF0 ADDIU T2,T2,8DF0
  10320. 3508EE56 ORI T0,T0,EE56
  10321. 3C01801E LUI AT,801E
  10322. 012A5821 ADDU T3,T1,T2
  10323. AC285E9C SW T0,5E9C (AT) # 801E5E9C = 0x2263EE56: "region code" for USA
  10324. 10000003 BEQ R0,R0,+3
  10325. AFAB0020 SW T3,0020 (SP) # SP+20 = 801D8DF0 + 0x32F8EB20: completely pointless value
  10326. 1000FFFF BEQ R0,R0,-1
  10327. 00000000 NOP
  10328. 00001025 OR V0,R0,R0
  10329. 8FBF0014 LW RA,0014 (SP)
  10330. 27BD0088 ADDIU SP,SP,0088
  10331. 03E00008 JR RA
  10332. 00000000 NOP
  10333.  
  10334. 00000000 NOP
  10335. 00000000 NOP
  10336.  
  10337. 801D2CB0 0xBE30 V0 = sensecode; A0 = motor state (1: disk removed, 2:head retracted, 4:spindle stopped)
  10338. accepts: A0=p->target
  10339. 3C0E801E LUI T6,801E
  10340. 8DCE8DF0 LW T6,8DF0 (T6) # @801D8DF0: True if leo threads started
  10341. 27BDFFD8 ADDIU SP,SP,FFD8
  10342. AFBF0014 SW RA,0014 (SP)
  10343. 15C00003 BNE T6,R0,+3
  10344. AFA40028 SW A0,0028 (SP)
  10345. 1000001A BEQ R0,R0,+26
  10346. 2402FFFF ADDIU V0,R0,FFFF
  10347. 3C0FA460 LUI T7,A460
  10348. 8DF80010 LW T8,0010 (T7)
  10349. 24080003 ADDIU T0,R0,0003
  10350. 27A40018 ADDIU A0,SP,0018
  10351. 33190001 ANDI T9,T8,0001
  10352. 53200004 BEQL T9,R0,+4
  10353. A3A80018 SB T0,0018 (SP)
  10354. 10000011 BEQ R0,R0,+17 # return 8 if PI busy
  10355. 24020008 ADDIU V0,R0,0008
  10356. A3A80018 SB T0,0018 (SP) # leocmd[0] = 3: test unit ready
  10357. A3A00019 SB R0,0019 (SP)
  10358. A3A0001A SB R0,001A (SP)
  10359. 0C072A69 JAL 801CA9A4 # send leocmd A0
  10360. A3A0001B SB R0,001B (SP)
  10361. 93A9001C LBU T1,001C (SP)
  10362. 24020008 ADDIU V0,R0,0008
  10363. 8FAC0028 LW T4,0028 (SP)
  10364. 54490005 BNEL V0,T1,+5
  10365. 93AB0024 LBU T3,0024 (SP)
  10366. 93AA001C LBU T2,001C (SP)
  10367. 504AFFFF BEQL V0,T2,-1 # while status busy: pass
  10368. 93AA001C LBU T2,001C (SP)
  10369. 93AB0024 LBU T3,0024 (SP) # state = leocmd[C]
  10370. A18B0000 SB T3,0000 (T4)
  10371. 93A2001D LBU V0,001D (SP) # return sensecode
  10372. 8FBF0014 LW RA,0014 (SP)
  10373. 27BD0028 ADDIU SP,SP,0028
  10374. 03E00008 JR RA
  10375. 00000000 NOP
  10376.  
  10377. 00000000 NOP
  10378. 00000000 NOP
  10379. 00000000 NOP
  10380.  
  10381. 801D2D50 0xBED0 handle leocmd 3: test unit ready
  10382. 27BDFFE8 ADDIU SP,SP,FFE8
  10383. AFBF0014 SW RA,0014 (SP)
  10384. 0C0732F0 JAL 801CCBC0
  10385. 00000000 NOP
  10386. 3C03801E LUI V1,801E
  10387. 24635E78 ADDIU V1,V1,5E78
  10388. 8C6E0000 LW T6,0000 (V1) # leocmd = @801E5E78
  10389. A1C2000C SB V0,000C (T6) # leocmd[C] = call 801CCBC0(): unit ready flags
  10390. 8C6F0000 LW T7,0000 (V1)
  10391. A1E00005 SB R0,0005 (T7)
  10392. 8C780000 LW T8,0000 (V1)
  10393. A3000004 SB R0,0004 (T8) # leocmd[4:6] = (0, 0)
  10394. 8FBF0014 LW RA,0014 (SP)
  10395. 27BD0018 ADDIU SP,SP,0018
  10396. 03E00008 JR RA
  10397. 00000000 NOP
  10398.  
  10399. 801D2D90 0xBF10 handle leocmd 7: seek
  10400. 3C05801E LUI A1,801E
  10401. 24A55E78 ADDIU A1,A1,5E78
  10402. 27BDFFE0 ADDIU SP,SP,FFE0
  10403. 8CA20000 LW V0,0000 (A1) # leocmd = @801E5E78
  10404. AFBF001C SW RA,001C (SP)
  10405. AFB10018 SW S1,0018 (SP)
  10406. AFB00014 SW S0,0014 (SP)
  10407. 8C43000C LW V1,000C (V0) # LBA = @leocmd+C
  10408. 24100014 ADDIU S0,R0,0014
  10409. 240E0020 ADDIU T6,R0,0020
  10410. 2C6110C4 SLTIU AT,V1,10C4
  10411. 14200006 BNE AT,R0,+6
  10412. 00000000 NOP
  10413. A04E0005 SB T6,0005 (V0) # leocmd[5] = 0x20: LBA out of range
  10414. 8CB80000 LW T8,0000 (A1)
  10415. 240F0002 ADDIU T7,R0,0002
  10416. 1000001A BEQ R0,R0,+26
  10417. A30F0004 SB T7,0004 (T8) # leocmd[4] = 2: check condition
  10418. @801D2DD8
  10419. 0C0738D0 JAL 801CE340 # fill 801E5E90 with seek info for LBA A0
  10420. 24640018 ADDIU A0,V1,0018 # LBA + 24: add on system LBAs
  10421. 0C073288 JAL 801CCA20
  10422. 00000000 NOP
  10423. 14400005 BNE V0,R0,+5
  10424. 305100FF ANDI S1,V0,00FF
  10425. 3C19801E LUI T9,801E
  10426. 8F395E78 LW T9,5E78 (T9) # leocmd = @801E5E78
  10427. 10000010 BEQ R0,R0,+16
  10428. A3200004 SB R0,0004 (T9)
  10429. @801D2E00
  10430. 0C0732AC JAL 801CCAB0
  10431. 02202025 OR A0,S1,R0
  10432. 14400005 BNE V0,R0,+5
  10433. 02001025 OR V0,S0,R0
  10434. 2610FFFF ADDIU S0,S0,FFFF
  10435. 320800FF ANDI T0,S0,00FF
  10436. 1440FFF1 BNE V0,R0,-15
  10437. 01008025 OR S0,T0,R0
  10438. 3C02801E LUI V0,801E
  10439. 24425E78 ADDIU V0,V0,5E78
  10440. 8C490000 LW T1,0000 (V0) # leocmd = @801E5E78
  10441. 240A0002 ADDIU T2,R0,0002
  10442. A1310005 SB S1,0005 (T1) # leocmd[5] = sensecode
  10443. 8C4B0000 LW T3,0000 (V0)
  10444. A16A0004 SB T2,0004 (T3) # leocmd[4] = 2: check condition
  10445. 8FBF001C LW RA,001C (SP)
  10446. 8FB00014 LW S0,0014 (SP)
  10447. 8FB10018 LW S1,0018 (SP)
  10448. 03E00008 JR RA
  10449. 27BD0020 ADDIU SP,SP,0020
  10450.  
  10451. 801D2E50 0xBFD0
  10452. 801DC000 801C7A1C
  10453. 801D2E58 default 0
  10454. 801D2E5C default 0
  10455. 801D2E60 default 0
  10456. 801D2E64 default 0
  10457. 801D2E68 0xBFE8
  10458. 801C81EC 801C91E0 start leo threads; test rdram size and read diskID(?)
  10459. 801C832C 801C9260 read requested (A0) bytelength from LBA; handle sensecode in struct A0
  10460. 801C83A0 801C9260 write requested (A0) bytelength to LBA; handle sensecode in struct A0
  10461. 801C8414 801C9334 set msg for request A0 to 9;
  10462. 801C8414 801C93C4 set msg for request A0 to 9;
  10463. 801D2E90 0xC010
  10464. 00000000 00000000 00000000 00000000
  10465. 00000000 00000000 00000000 00000000
  10466. 00000000 00000000 00000000 00000000
  10467. 00000000 00000000 00000000 00000000
  10468. # leo error message pointers
  10469. 801D2ED0 0xC050
  10470. 801D8F40 801D8F54 00000000 00000000
  10471. # leo japanese error message pointers
  10472. 801D2EE0 0xC060
  10473. 801D8F70 801D8F98 00000000 00000000
  10474. 801D8FC0 801D8FE8 801D9010 00000000
  10475. 801D9038 801D9060 801D9088 00000000
  10476. 801D90B0 801D90D8 00000000 00000000
  10477. 801D9100 00000000 00000000 00000000
  10478. 801D9128 00000000 00000000 00000000
  10479. 801D9150 00000000 00000000 00000000
  10480. 00000000 00000000 00000000 00000000
  10481. # leo english error message pointers
  10482. 801D2F60 0xC0E0
  10483. 801D9178 801D919C 00000000 00000000
  10484. 801D91C4 801D91E8 801D9204 801D922C
  10485. 801D9244 801D9268 801D9290 801D92B8
  10486. 801D92D4 801D92FC 00000000 00000000
  10487. 801D9318 00000000 00000000 00000000
  10488. 801D933C 00000000 00000000 00000000
  10489. 801D9364 00000000 00000000 00000000
  10490. 00000000 00000000 00000000 00000000
  10491. 801D2FE0 0xC160 "エラー番号 41.192x16.ci4"
  10492. 801D35E0 0xC760 "Error Number 41.192x16.ci4"
  10493. 801D3BE0 0xCD60 "詳しくは、取扱説明書をお読みください。.320x64.ci4"
  10494. 801D63E0 0xF560 "Please read the instruction manual for details.320x64.ci4"
  10495. 801D8BE0 0x11D60
  10496. 00009D14 00232A14 00296314 002F8A14 00457E18 0063CA14 0084AA14 00A03314
  10497. 00A45E14 00BB4E14 00CA6514 00D3770E 00E33302 00E78108 00EB2102 00EC6C14
  10498. 01008A14 01163A14 01217A14 01377A14 014D8A14 01638A14 01798A14 018F7A14
  10499. 01A58A14 01BB8A14 01D1170E 01D5490E 01DF770E 01EF740A 01F9770E 02097A14
  10500. 021FDC16 024DBA14 026E7A14 0284BA14 02A59A14 02C16A14 02D26A14 02E3BA14
  10501. 03048A14 031A1A14 03206A14 03318A14 03476A14 0358CA14 03799A14 0395CA14
  10502. 03B67A14 03CCCA14 03ED8A14 04037A14 04196A14 042A8A14 0440AA14 045CDA14
  10503. 04839A14 049F9A14 04BB7A14 04D14D14 04DF5C14 04F33D14 05015216 050681FA
  10504. 050A9D14 052D9810 05449A14 05609810 05779A14 05939810 05AA5A14 05BB9C10
  10505. 05DC7A14 05F22A14 05F83D14 06067A14 061C2A14 0622D810 06427810 06549810
  10506. 066B9B10 06899B10 06A74810 06B06810 06BE5A14 06CF770E 06DF870E 06EFB70E
  10507. 0707670E 07138A0E 0729670E 07356D14 074A1F16 07526D14 07675216
  10508.  
  10509. 801D8D5C 0x11EDC
  10510. 801D8D70 0x11EF0 leocmd handlers
  10511. 00000000 801CE7E0 801CC040 801D2D50
  10512. 801CE590 801CBD30 801D2040 801D2D90
  10513. 801CE030 801CE2A0 801CE900 801CE1F0
  10514. 801CC1F0 801CEBA0 801CEC5C 801CE888
  10515. 801D8DB0 0x11F30 leocmd sample for reading one block at system LBA 12
  10516. 05000000 00000000 00000000 0000000C
  10517. 00000001 00000000 00000000 00000000
  10518. 801D8DD0 0x11F50 leocmd sample for reading one block at system LBA 14 (disk ID)
  10519. 05000000 00000000 00000000 0000000E
  10520. 00000001 801E5F80 00000000 00000000
  10521. 801D8DF0 0x11F70
  10522.  
  10523. 801D8E00 0x11F80 ../z_n64dd.c
  10524. 801D8E10 0x11F90 ddmsg
  10525. 801D8E18 0x11F98 n64dd
  10526. 801D8E20 0x11FA0 EZLJ
  10527. 801D8E28 0x11FA8 EZLE
  10528. 801D8E30 0x11FB0 function pointers f/ 801C8000
  10529. 801C8034 801C805C 801C8080 801C8098
  10530. 801C80C8 801C80F8 801C811C 801C810C
  10531. 801C812C 801C813C 801C814C 801C815C
  10532. 801C816C 801C8178
  10533. 801D8E70 0x11FF0 function pointers f/ 801C9260
  10534. 801C930C 801C931C 801C92BC 801C931C
  10535. 801C931C 801C931C 801C931C 801C931C
  10536. 801C931C 801C931C 801C931C 801C931C
  10537. 801C931C 801C931C 801C931C 801C931C
  10538. 801C931C 801C931C 801C931C 801C931C
  10539. 801C931C 801C931C 801C931C 801C928C
  10540. 801C931C 801C931C 801C931C 801C931C
  10541. 801C931C 801C931C 801C931C 801C931C
  10542. 801C931C 801C931C 801C92CC 801C9314
  10543. 801C931C 801C931C 801C931C 801C931C
  10544. 801C931C 801C931C 801C92FC 801C931C
  10545. 801C931C 801C931C 801C931C 801C92EC
  10546. 801C931C 801C92DC
  10547. # Leo error strings
  10548. 801D8F40 0x120C0 エラー番号
  10549. 801D8F54 0x120D4 Error Number
  10550. 801D8F68 0x120E8
  10551. 801D8F6C 0x120EC
  10552. 801D8F70 0x120F0 メモリー拡張パックが正しく差し込
  10553. 801D8F98 0x12118 んでありますか?
  10554. 801D8FC0 0x12140 間違ったディスクが差し込まれてい
  10555. 801D8FE8 0x12168 る可能性があります。正しいディス
  10556. 801D9010 0x12190 クに交換してください。
  10557. 801D9038 0x121B8 注意:アクセスランプ点滅中にディ
  10558. 801D9060 0x121E0 スクを抜かないでください。詳しく
  10559. 801D9088 0x12208 は、取扱説明書をお読みください。
  10560. 801D90B0 0x12230 詳しくは、取扱説明書をお読みくだ
  10561. 801D90D8 0x12258 さい。
  10562. 801D9100 0x12280 ディスクを差し込んでください。
  10563. 801D9128 0x122A8 ディスクを差し込み直してください。
  10564. 801D9150 0x122D0 ディスクを取り出してください。
  10565. 801D9178 0x122F8 Are you sure the Expansion
  10566. 801D919C 0x1231C Pak is inserted correctly?
  10567. 801D91C4 0x12344 Check to see if the proper
  10568. 801D91E8 0x12368 disk is inserted.
  10569. 801D9204 0x12384 Please insert the disk the
  10570. 801D922C 0x123AC correct disk.
  10571. 801D9244 0x123C4 Do not remove the disk when
  10572. 801D9268 0x123E8 the access light is flashing.
  10573. 801D9290 0x12410 Please read the instruction
  10574. 801D92B8 0x12438 manual for details.
  10575. 801D92D4 0x12454 Please read the instruction
  10576. 801D92FC 0x1247C manual for details.
  10577. 801D9318 0x12498 Please insert a disk.
  10578. 801D933C 0x124BC Please insert the disk again.
  10579. 801D9364 0x124E4 Please remove the disk.
  10580. 801D9388 0x12508
  10581. 801D9390 0x12510 palette for error messages
  10582. 0001 1085 2109 318D 4211 5295 6319 739D 8C63 9CE7 AD6B BDEF CE73 DEF7 EF7B FFFF
  10583. 801D93B0 0x12530
  10584. 00000000 00000000 00000000 00000000
  10585. 801D93C0 0x12540 disk header LBAs 00 01 08 09
  10586. 801D93C8 0x12548
  10587. 801CB8C0 801CB904 801CB904 801CB904
  10588. 801CB904 801CB904 801CB8C0 801CB904
  10589. 801CB904 801CB8C0 801CB8C0 801CB8C0
  10590. 801CB8C0 801CB8C0 801CB8C0 801CB880
  10591. 801CB880 801CB880 801CB880 801CB880
  10592. 801CB880 801CB880 801CB880 801CB8C0
  10593. 801CB880 801CB8C0 801CB8C0 801CB8C0
  10594. 801D9438 0x125B8 correction functions for leo commands 2-0xF
  10595. 801CBA1C 801CBA1C 801CB934 801CB934
  10596. 801CB934 801CB934 801CBA1C 801CB934
  10597. 801CB934 801CBA1C 801CB934 801CBA1C
  10598. 801CBA1C 801CBA1C
  10599. 801D9470 0x125F0 disk ID LBAs 0E 0F
  10600. 801D9480 0x12600
  10601. 801CCB24 801CCBB4 801CCBB4 801CCBB4
  10602. 801CCB24 801CCB24 801CCB10 801CCBB4
  10603. 801CCBB4 801CCBB4 801CCBB4 801CCBB4
  10604. 801CCB24 801CCBA4 801CCBB4 801CCBB4
  10605. 801CCBB4 801CCBA4 801CCBA4 801CCB7C
  10606. 801CCBB4 801CCBB4 801CCBB4 801CCB90
  10607. 801CCBB4 801CCBA4
  10608. 801D94F0 0x12670 leo library version string B014A26
  10609. 801D94F8 0x12678 track lengths per zone
  10610. E8 D8 D0 C0 B0 A0 90 80 70
  10611. 801D9504 0x12684 block sizes per zone
  10612. 4D08 47B8 4510 3FC0 3A70 3520 2FD0 2A80 2530
  10613. 801D9518 0x12698 LBA zone map for disk types; 0x20 each
  10614. 801D95F8 0x12778 initial track for logical zone
  10615. 0000 009E 013C 01D1 0266 02FB 0390 0425
  10616. 0091 012F 01C4 0259 02EE 0383 0418 048A
  10617. 801D9618 0x12798 logical zone assignments for each disk type; 0x10 each
  10618. 801D9688 0x12808 initial track for physical zone
  10619. 0000 009E 013C 01D1 0266 02FB 0390 0425
  10620. 801D9698 0x12818 highest unwritable LBAs for each disk type
  10621. 801D96A8 0x12828 RAM area size for each disk type
  10622. 801D96C4 0x12844
  10623. 801D96D0 0x12850 C1 decryption table 1 for "error correction", aka intentional encryption
  10624. 801D97D0 0x12950 C1 decryption table 1, offset right 1 byte, for "error correction", aka intentional encryption
  10625. 801D98D0 0x12A50 C1 decryption table 2 for "error correction", aka intentional encryption
  10626. 801D99D0 0x12B50 C1 decryption table 2, offset right 1 byte, for "error correction", aka intentional encryption
  10627. 801D9AD0 0x12C50
  10628.  
  10629. 801D9B70 0x12CF0 maximums for each RTC element
  10630. 63 0C 1F 17 3B 3B
  10631. 801D9B78 0x12CF8
  10632.  
  10633. 801D9B90 0x12D10 EOF!!!
  10634.  
  10635. +_+
  10636.  
  10637. Other addresses:
  10638.  
  10639. 801D9C30 target for 0x118 table read from LBA 1 + 0x1060
  10640. 801D9D48 p->target for write to 801D9C30
  10641.  
  10642. 801D9D80 queue, 1 msg at 801D9DB0
  10643. 801D9D98 queue, 1 msg at 801D9DB4
  10644. 801D9DB0 1 msg for queue 801D9D80
  10645. 801D9DB4 1 msg for queue 801D9D98
  10646. 801D9DB8
  10647.  
  10648. 801D9DCC p->error# image
  10649. 801D9DD0 p->error text image
  10650. 801D9DD4 p->disk insertion/removal image
  10651. 801D9DD8 thread: ddmsg
  10652. 801D9F88 stack for thread 801D9DD8: ddmsg
  10653. 801DAF88 profiler entry for ddmsg stack
  10654. 801DAFA8 stack for thread : n64dd
  10655. 801DBFA8 profiler entry for n64dd stack
  10656. 801DBFC8
  10657.  
  10658. 801DBFD0 copy of original diskID
  10659. 801DBFF0 True if diskID has been verified and copied to 801DBFD0
  10660.  
  10661. 801DC000 target for LBA
  10662.  
  10663. 801E0D18 struct
  10664. 0x1C 4 p->queue
  10665.  
  10666. 0x38 0x20 diskID
  10667.  
  10668. 0x68 4 sensecode
  10669.  
  10670. 801E0DB0 thread
  10671. 801E0F60
  10672.  
  10673. 801E0F80 image for Error number
  10674. 801E1580 image for error message
  10675. 801E3D80 image for (two lines)
  10676. 801E5180
  10677.  
  10678.  
  10679. 801E5288 thread: Leo Int
  10680. 801E5438 thread: Leo Work
  10681. 801E55E8 stack for Leo Int thread at 801E5288
  10682. 801D59E8 stack for Leo Work thread at 801E5438
  10683. 801E5DE8 queue, [8] msgs at [801E0D90]: 64dd queue
  10684. 801E5E00 queue, 1 msg at 801E5E60: cart interrupt callback
  10685. 801E5E18 queue, 1 msg at 801E5E64
  10686. 801E5E30 queue, 2 msgs at 801E5E68
  10687. 801E5E48 queue, 1 msg at 801E5E70
  10688. 801E5E60 1 msg for queue 801E5E00
  10689. 801E5E64 1 msg for queue 801E5E18
  10690. 801E5E68 2 msgs for queue 801E5E30
  10691. 801E5E70 1 msg for queue 801E5E48
  10692. 801E5E74 p->rdram target for block transfer
  10693. 801E5E78 p->leocmd
  10694. 801E5E7C
  10695. 801E5E80 queue, 1 msg at 801E5E98
  10696. 801E5E88 1 disk type
  10697. 801E5E98 1 msg for queue 801E5E80
  10698. 801E5E9C region code ("Japanese":0xE848D316, "English":0x2263EE56, "Dev":0)
  10699.  
  10700. 801E5EA0 1 msg for queue 801E5EA8
  10701. 801E5EA4
  10702. 801E5EA8 queue, 1 msg at 801E5EA0
  10703. 801E5EC0
  10704.  
  10705. 801E5EC8 E/PI request buffer for ASIC DMAs
  10706. 801E5EE0
  10707.  
  10708. 801E6070 block 1 C2 buffer
  10709.  
  10710. 801E6410 block 2 C2 buffer
  10711.  
  10712. 801E67C0 buffer for microsequencer data
  10713. 801E6800 result of inquiry (hardware version, 6, device type, #devices)
  10714. 801E6804
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement