Guest User

Untitled

a guest
Oct 18th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 53.57 KB | None | 0 0
  1. #include <pspsdk.h>
  2. #include "dmacman.h"
  3.  
  4. /*
  5. * Imports from library: InterruptManagerForKernel
  6. */
  7. extern int sceKernelCpuSuspendIntr ();
  8. extern void sceKernelCpuResumeIntrWithSync (int arg1);
  9. extern int sceKernelEnableIntr (int arg1);
  10. extern int sceKernelRegisterIntrHandler (int arg1, int arg2, int arg3, int arg4, int arg5);
  11. extern void sceKernelCpuResumeIntr (int arg1);
  12. extern void sceKernelDisableIntr (int arg1);
  13. extern int sceKernelReleaseIntrHandler (int arg1);
  14.  
  15. /*
  16. * Imports from library: SysclibForKernel
  17. */
  18. extern void memset (int arg1, int arg2, int arg3);
  19.  
  20. /*
  21. * Imports from library: ThreadManForKernel
  22. */
  23. extern void sceKernelSetEventFlag (int arg1, int arg2);
  24. extern int sceKernelWaitEventFlag (int arg1, int arg2, int arg3, int arg4, int arg5);
  25. extern int sceKernelCreateEventFlag (int arg1);
  26. extern void sceKernelDeleteEventFlag (int arg1);
  27.  
  28. /*
  29. * Imports from library: sceSuspendForKernel
  30. */
  31. extern void sceKernelRegisterSuspendHandler (int arg1, int arg2, int arg3);
  32. extern void sceKernelRegisterResumeHandler (int arg1, int arg2, int arg3);
  33.  
  34. /*
  35. * Imports from library: KDebugForKernel
  36. */
  37. extern void Kprintf (int arg1);
  38.  
  39. /**
  40. * Subroutine at address 0x00000000
  41. */
  42. void module_start ()
  43. {
  44. sp = sp + 0xFFFFFFE0;
  45. ((int *) sp)[5] = ra;
  46. ((int *) sp)[4] = s4;
  47. ((int *) sp)[1] = s1;
  48. ((int *) sp)[3] = s3;
  49. ((int *) sp)[2] = s2;
  50. ((int *) sp)[0] = s0;
  51. var3 = sceKernelCpuSuspendIntr ();
  52. memset (0x00002040, 0x00000000, 0x00002000);
  53. var6 = 0x00002040;
  54. *((int *) 0x0000404C) = 0x00002040;
  55. *((int *) 0x00002040) = 0x00002080;
  56. var7 = 0x000020C0;
  57. var8 = 0x00000002;
  58. while (1) {
  59. ((int *) var6)[16] = var7;
  60. var7 = var7 + 0x00000040;
  61. ((int *) var6)[17] = var6;
  62. var6 = var6 + 0x00000040;
  63. ((short *) (var6 + 0x00000010))[6] = 0x00001000;
  64. var8 = var8 + 0x00000001;
  65. if (((var8 < 0x00000080)) != 0x00000000)
  66. continue;
  67. break;
  68. }
  69. *((short *) 0x0000401C) = 0x00001000;
  70. *((int *) 0x00004054) = 0x00000000;
  71. *((int *) 0x00004000) = 0x00000000;
  72. var9 = 0x00000000;
  73. var10 = 0x00000000;
  74. *((int *) 0x00004050) = 0x00000000;
  75. sceKernelRegisterSuspendHandler (0x00000014, 0x00001AF0, 0x00000000);
  76. sceKernelRegisterResumeHandler (0x00000014, 0x00001B80, 0x00000000);
  77. while (1) {
  78. var15 = var10 + 0x00000016;
  79. var18 = sceKernelRegisterIntrHandler (var15, 0x00000002, 0x000010E4, var10, 0x00000000);
  80. var10 = var10 + 0x00000001;
  81. var21 = sceKernelEnableIntr (var15);
  82. var9 = (var9 | var18) | var21;
  83. if (((var10 < 0x00000002)) != 0x00000000)
  84. continue;
  85. break;
  86. }
  87. var22 = 0x00000000;
  88. if (var9 < 0)
  89. {
  90. while (1) {
  91. var22 = var22 + 0x00000001;
  92. var34 = sceKernelReleaseIntrHandler (0x00000016);
  93. if (((var22 < 0x00000002)) != 0x00000000)
  94. continue;
  95. break;
  96. }
  97. var9 = 0x800202BC;
  98. }
  99. DmacManForKernel_32757C57 (0x00001C00);
  100. sceKernelCpuResumeIntr (var3);
  101. ra = ((int *) sp)[5];
  102. var27 = ((int *) sp)[4];
  103. var28 = ((int *) sp)[3];
  104. var29 = ((int *) sp)[2];
  105. var30 = ((int *) sp)[1];
  106. var31 = ((int *) sp)[0];
  107. sp = sp + 0x00000020;
  108. return;
  109. }
  110.  
  111. /**
  112. * Subroutine at address 0x00000168
  113. */
  114. void sceKernelDmaExit ()
  115. {
  116. sp = sp + 0xFFFFFFE0;
  117. ((int *) sp)[4] = s4;
  118. ((int *) sp)[0] = s0;
  119. var1 = 0x00000000;
  120. ((int *) sp)[5] = ra;
  121. ((int *) sp)[3] = s3;
  122. ((int *) sp)[2] = s2;
  123. ((int *) sp)[1] = s1;
  124. var4 = sceKernelCpuSuspendIntr ();
  125. while (1) {
  126. var6 = 0x00000000 << 0x00000005;
  127. while (1) {
  128. var7 = (var1) ? (var6 + 0xBCA00100) : (var6 + 0xBC900100);
  129. var8 = ((int *) var7)[4];
  130. ((int *) var7)[4] = (var8 | 0x00040000);
  131. while (1) {
  132. var9 = ((int *) var7)[4];
  133. if ((var9 & 0x00020000) != 0x00000000)
  134. continue;
  135. break;
  136. }
  137. var10 = ((int *) var7)[4];
  138. var5 = var5 + 0x00000001;
  139. ((int *) var7)[4] = (var10 & 0xFFFF3FFE);
  140. var6 = var5 << 0x00000005;
  141. if (((var5 < 0x00000008)) != 0x00000000)
  142. continue;
  143. break;
  144. }
  145. var1 = var1 + 0x00000001;
  146. if (!(((var1 < 0x00000002)) != 0x00000000))
  147. break;
  148. continue;
  149. }
  150. var11 = 0x00000000;
  151. sceKernelDmaOpAllCancel ();
  152. var14 = 0x00000000;
  153. while (1) {
  154. var15 = (var14) ? 0xBCA00000 : 0xBC900000;
  155. var16 = ((int *) var15)[12];
  156. ((int *) var15)[12] = ((var16 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
  157. ((int *) var15)[2] = 0x000000FF;
  158. ((int *) var15)[4] = 0x000000FF;
  159. var19 = sceKernelReleaseIntrHandler ((var14 + 0x00000016));
  160. var11 = var11 | var19;
  161. var22 = sceKernelCpuSuspendIntr ();
  162. var23 = *((int *) 0xBC100050);
  163. var14 = var14 + 0x00000001;
  164. *((int *) 0xBC100050) = (var23 & (!(0x00000020 << var14)));
  165. sceKernelCpuResumeIntr (var22);
  166. if (((var14 < 0x00000002)) != 0x00000000)
  167. continue;
  168. break;
  169. }
  170. sceKernelCpuResumeIntr (var4);
  171. ra = ((int *) sp)[5];
  172. var28 = ((int *) sp)[4];
  173. var29 = ((int *) sp)[3];
  174. var30 = ((int *) sp)[2];
  175. var31 = ((int *) sp)[1];
  176. var32 = ((int *) sp)[0];
  177. sp = sp + 0x00000020;
  178. return;
  179. }
  180.  
  181. /**
  182. * Subroutine at address 0x000002C0
  183. */
  184. void DmacManForKernel_32757C57 (int arg1)
  185. {
  186. if (arg1 == 0x00000000)
  187. {
  188. *((int *) 0x00004058) = 0x00001C00;
  189. }
  190. else
  191. {
  192. *((int *) 0x00004058) = arg1;
  193. }
  194. return;
  195. }
  196.  
  197. /**
  198. * Subroutine at address 0x000002E8
  199. */
  200. void sceKernelDmaSoftRequest (int arg1, int arg2, int arg3, int arg4)
  201. {
  202. var1 = (arg1) ? 0xBCA00000 : 0xBC900000;
  203. if (arg4 != 0x00000000)
  204. {
  205. if (arg3 == 0x00000000)
  206. {
  207. ((int *) var1)[11] = (0x00000001 << arg2);
  208. }
  209. else
  210. {
  211. ((int *) var1)[10] = (0x00000001 << arg2);
  212. }
  213. }
  214. else
  215. {
  216. if (arg3 == 0x00000000)
  217. {
  218. ((int *) var1)[9] = (0x00000001 << arg2);
  219. }
  220. else
  221. {
  222. ((int *) var1)[8] = (0x00000001 << arg2);
  223. }
  224. }
  225. __asm__ ("sync;");
  226. return;
  227. }
  228.  
  229. /**
  230. * Subroutine at address 0x00000348
  231. */
  232. void sceKernelDmaOpFree (int arg1)
  233. {
  234. sp = sp + 0xFFFFFFF0;
  235. ((int *) sp)[2] = s2;
  236. ((int *) sp)[1] = s1;
  237. var1 = 0x800202CF;
  238. ((int *) sp)[0] = s0;
  239. ((int *) sp)[3] = ra;
  240. var2 = arg1;
  241. var5 = sceKernelCpuSuspendIntr ();
  242. if (var2 == 0x00000000)
  243. {
  244.  
  245. label16:
  246. sceKernelCpuResumeIntr (var5);
  247. }
  248. else
  249. {
  250. var6 = ((unsigned short *) var2)[14];
  251. var1 = 0x800202C3;
  252. if ((var6 & 0x00001000) != 0x00000000)
  253. goto label16;
  254. var7 = ((unsigned short *) var2)[14];
  255. var1 = 0x800202BE;
  256. if ((var7 & 0x00000001) != 0x00000000)
  257. goto label16;
  258. var8 = ((unsigned short *) var2)[14];
  259. if ((var8 & 0x00000002) == 0x00000000)
  260. {
  261. var14 = *((int *) 0x0000404C);
  262. ((int *) var2)[1] = 0x00000000;
  263. ((int *) var2)[0] = var14;
  264. var15 = *((int *) 0x0000404C);
  265. ((short *) var2)[15] = 0xFFFFFFFF;
  266. ((int *) var2)[14] = 0x00000000;
  267. ((int *) var2)[8] = 0x00000000;
  268. ((int *) var2)[4] = 0x00000000;
  269. ((int *) var2)[9] = 0x00000000;
  270. ((int *) var2)[10] = 0x00000000;
  271. ((int *) var2)[11] = 0x00000000;
  272. ((int *) var2)[12] = 0x00000000;
  273. if (var15 != 0x00000000)
  274. {
  275. ((int *) var15)[1] = var2;
  276. }
  277. ((short *) var2)[14] = 0x00001000;
  278. var16 = ((int *) var2)[6];
  279. *((int *) 0x0000404C) = var2;
  280. sceKernelDeleteEventFlag (var16);
  281. sceKernelCpuResumeIntr (var5);
  282. }
  283. else
  284. {
  285. var1 = 0x800202C0;
  286. goto label16;
  287. }
  288. }
  289. ra = ((int *) sp)[3];
  290. var11 = ((int *) sp)[2];
  291. var12 = ((int *) sp)[1];
  292. var13 = ((int *) sp)[0];
  293. sp = sp + 0x00000010;
  294. return;
  295. }
  296.  
  297. /**
  298. * Subroutine at address 0x00000440
  299. */
  300. void sceKernelDmaOpEnQueue (int arg1)
  301. {
  302. sp = sp + 0xFFFFFFE0;
  303. ((int *) sp)[2] = s2;
  304. var1 = 0x800202CF;
  305. var2 = arg1;
  306. ((int *) sp)[1] = s1;
  307. var3 = 0x00000000;
  308. ((int *) sp)[0] = s0;
  309. var4 = arg1;
  310. ((int *) sp)[4] = ra;
  311. ((int *) sp)[3] = s3;
  312. if (!(arg1 == 0x00000000))
  313. {
  314. var5 = ((int *) arg1)[2];
  315. var1 = 0x800202CD;
  316. if (!(var5 != 0x00000000))
  317. {
  318. var8 = sceKernelCpuSuspendIntr ();
  319. var9 = var8;
  320. while (1) {
  321. var10 = ((unsigned short *) var4)[14];
  322. if ((var10 & 0x00000001) != 0x00000000)
  323. {
  324. var3 = 0x800202BE;
  325. goto label17;
  326. }
  327. else
  328. {
  329. var11 = ((unsigned short *) var4)[14];
  330. if ((var11 & 0x00001000) != 0x00000000)
  331. {
  332. var3 = 0x800202C3;
  333. goto label17;
  334. }
  335. else
  336. {
  337. var12 = ((unsigned short *) var4)[14];
  338. if ((var12 & 0x00000100) == 0x00000000)
  339. {
  340. var3 = 0x800202C1;
  341. goto label17;
  342. }
  343. else
  344. {
  345. var13 = ((unsigned short *) var4)[14];
  346. if ((var13 & 0x00000002) != 0x00000000)
  347. {
  348. var3 = 0x800202C0;
  349. goto label17;
  350. }
  351. else
  352. {
  353. var14 = ((unsigned short *) var4)[14];
  354. var3 = ((var14 & 0x00000070)) ? 0x800202C4 : var3;
  355. if (var3 < 0)
  356. break;
  357. var4 = ((int *) var4)[3];
  358. if (var4 != 0x00000000)
  359. continue;
  360. var15 = *((int *) 0x00004050);
  361. if (var15 == 0x00000000)
  362. {
  363. *((int *) 0x00004050) = var2;
  364. }
  365. ((int *) var2)[0] = 0x00000000;
  366. var16 = *((int *) 0x00004054);
  367. ((int *) var2)[1] = var16;
  368. if (!(var16 == 0x00000000))
  369. {
  370. ((int *) var16)[0] = var2;
  371. }
  372. var17 = ((unsigned short *) var2)[14];
  373. *((int *) 0x00004054) = var2;
  374. ((short *) var2)[14] = (var17 | 0x00000001);
  375. sub_01490 ();
  376. sceKernelCpuResumeIntr (var9);
  377. var1 = 0x00000000;
  378. }
  379. }
  380. }
  381. }
  382. goto label30;
  383. }
  384.  
  385. label17:
  386. sceKernelCpuResumeIntr (var9);
  387. var1 = var3;
  388. }
  389. }
  390.  
  391. label30:
  392. ra = ((int *) sp)[4];
  393. var22 = ((int *) sp)[3];
  394. var23 = ((int *) sp)[2];
  395. var24 = ((int *) sp)[1];
  396. var25 = ((int *) sp)[0];
  397. sp = sp + 0x00000020;
  398. return;
  399. }
  400.  
  401. /**
  402. * Subroutine at address 0x0000058C
  403. */
  404. void sceKernelDmaOpDeQueue (int arg1)
  405. {
  406. sp = sp + 0xFFFFFFF0;
  407. ((int *) sp)[1] = s1;
  408. var1 = arg1;
  409. ((int *) sp)[0] = s0;
  410. ((int *) sp)[2] = ra;
  411. var2 = 0x800202CF;
  412. var5 = sceKernelCpuSuspendIntr ();
  413. var6 = var5;
  414. if (var1 == 0x00000000)
  415. {
  416.  
  417. label25:
  418. sceKernelCpuResumeIntr (var6);
  419. }
  420. else
  421. {
  422. var7 = ((unsigned short *) var1)[14];
  423. var2 = 0x800202C3;
  424. if ((var7 & 0x00001000) != 0x00000000)
  425. goto label25;
  426. var8 = ((unsigned short *) var1)[14];
  427. var2 = 0x800202C1;
  428. if ((var8 & 0x00000100) == 0x00000000)
  429. goto label25;
  430. var9 = ((unsigned short *) var1)[14];
  431. var2 = 0x800202C0;
  432. if ((var9 & 0x00000002) != 0x00000000)
  433. goto label25;
  434. var10 = ((unsigned short *) var1)[14];
  435. if ((var10 & 0x00000001) != 0x00000000)
  436. {
  437. var15 = ((int *) var1)[1];
  438. if (var15 == 0x00000000)
  439. {
  440. var17 = ((int *) var1)[0];
  441. }
  442. else
  443. {
  444. var16 = ((int *) var1)[0];
  445. ((int *) var15)[0] = var16;
  446. var17 = ((int *) var1)[0];
  447. }
  448. if (var17 != 0x00000000)
  449. {
  450. ((int *) var17)[1] = var15;
  451. }
  452. var18 = *((int *) 0x00004054);
  453. if (var18 == var1)
  454. {
  455. var24 = ((int *) var1)[1];
  456. *((int *) 0x00004054) = var24;
  457. }
  458. var19 = *((int *) 0x00004050);
  459. if (var19 == var1)
  460. {
  461. var23 = ((int *) var1)[0];
  462. *((int *) 0x00004050) = var23;
  463. }
  464. var20 = ((unsigned short *) var1)[14];
  465. ((int *) var1)[1] = 0x00000000;
  466. ((short *) var1)[14] = ((var20 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
  467. ((int *) var1)[0] = 0x00000000;
  468. sceKernelCpuResumeIntr (var6);
  469. }
  470. else
  471. {
  472. var2 = 0x800202BF;
  473. goto label25;
  474. }
  475. }
  476. ra = ((int *) sp)[2];
  477. var13 = ((int *) sp)[1];
  478. var14 = ((int *) sp)[0];
  479. sp = sp + 0x00000010;
  480. return;
  481. }
  482.  
  483. /**
  484. * Subroutine at address 0x00000694
  485. */
  486. void sceKernelDmaOpAllCancel ()
  487. {
  488. sp = sp + 0xFFFFFFF0;
  489. ((int *) sp)[1] = s1;
  490. ((int *) sp)[0] = s0;
  491. var1 = 0x800202BF;
  492. var2 = *((int *) 0x00004050);
  493. ((int *) sp)[2] = ra;
  494. if (!(var2 == 0x00000000))
  495. {
  496. var5 = sceKernelCpuSuspendIntr ();
  497. var6 = var5;
  498. var7 = 0x00002000;
  499. var8 = 0x00000000;
  500. var9 = *((int *) 0x00002000);
  501. while (1) {
  502. var8 = var8 + 0x00000001;
  503. var7 = var7 + 0x00000004;
  504. if (var9 != 0x00000000)
  505. break;
  506. if (((var8 < 0x00000010)) != 0x00000000)
  507. {
  508. var9 = ((int *) var7)[0];
  509. continue;
  510. }
  511. else
  512. {
  513. var10 = *((int *) 0x00004050);
  514. if (var10 == 0x00000000)
  515. {
  516. }
  517. else
  518. {
  519. while (1) {
  520. var11 = var10;
  521. var10 = ((int *) var10)[0];
  522. ((int *) var11)[1] = 0x00000000;
  523. ((int *) var11)[0] = 0x00000000;
  524. if (var10 != 0x00000000)
  525. continue;
  526. break;
  527. }
  528. }
  529. *((int *) 0x00004054) = 0x00000000;
  530. *((int *) 0x00004050) = 0x00000000;
  531. sceKernelCpuResumeIntr (var6);
  532. var1 = 0x00000000;
  533. }
  534. goto label19;
  535. }
  536. sceKernelCpuResumeIntr (var6);
  537. var1 = 0x800202C0;
  538. }
  539.  
  540. label19:
  541. ra = ((int *) sp)[2];
  542. var14 = ((int *) sp)[1];
  543. var15 = ((int *) sp)[0];
  544. sp = sp + 0x00000010;
  545. return;
  546. }
  547.  
  548. /**
  549. * Subroutine at address 0x00000750
  550. */
  551. void sceKernelDmaOpSetCallback (int arg1, int arg2, int arg3)
  552. {
  553. var1 = 0x800202CF;
  554. if (!(arg1 == 0x00000000))
  555. {
  556. var2 = ((unsigned short *) arg1)[14];
  557. var1 = 0x800202C3;
  558. if (!((var2 & 0x00001000) != 0x00000000))
  559. {
  560. var3 = ((unsigned short *) arg1)[14];
  561. var1 = 0x800202C1;
  562. if (!((var3 & 0x00000100) == 0x00000000))
  563. {
  564. var4 = ((unsigned short *) arg1)[14];
  565. var1 = 0x800202C0;
  566. if (!((var4 & 0x00000002) != 0x00000000))
  567. {
  568. var5 = ((unsigned short *) arg1)[14];
  569. var1 = 0x800202C4;
  570. if (!((var5 & 0x00000070) != 0x00000000))
  571. {
  572. ((int *) arg1)[5] = arg3;
  573. var1 = 0x00000000;
  574. ((int *) arg1)[4] = arg2;
  575. }
  576. }
  577. }
  578. }
  579. }
  580. return;
  581. }
  582.  
  583. /**
  584. * Subroutine at address 0x000007C0
  585. */
  586. void sceKernelDmaOpSetupMemcpy (int arg1, int arg2, int arg3, int arg4)
  587. {
  588. var1 = 0x800202CF;
  589. if (!(arg1 == 0x00000000))
  590. {
  591. var2 = ((unsigned short *) arg1)[14];
  592. var1 = 0x800202C3;
  593. if (!((var2 & 0x00001000) != 0x00000000))
  594. {
  595. var3 = ((unsigned short *) arg1)[14];
  596. var1 = 0x800202C1;
  597. if (!((var3 & 0x00000100) == 0x00000000))
  598. {
  599. var4 = ((unsigned short *) arg1)[14];
  600. var1 = 0x800202C0;
  601. if (!((var4 & 0x00000002) != 0x00000000))
  602. {
  603. var5 = ((unsigned short *) arg1)[14];
  604. var1 = 0x800202C4;
  605. if (!((var5 & 0x00000070) != 0x00000000))
  606. {
  607. var1 = 0x800202CE;
  608. if (!(((arg4 < 0x00001000)) == 0x00000000))
  609. {
  610. ((int *) arg1)[8] = arg3;
  611. var1 = 0x00000000;
  612. ((int *) arg1)[9] = arg2;
  613. ((int *) arg1)[10] = 0x00000000;
  614. ((int *) arg1)[11] = (arg4 | 0x8C4BF000);
  615. var6 = ((int *) arg1)[12];
  616. ((int *) arg1)[12] = (var6 | 0x0000C001);
  617. }
  618. }
  619. }
  620. }
  621. }
  622. }
  623. return;
  624. }
  625.  
  626. /**
  627. * Subroutine at address 0x00000860
  628. */
  629. void sceKernelDmaOpSetupNormal (int arg1, int arg2, int arg3, int arg4, int arg5)
  630. {
  631. var1 = 0x800202CF;
  632. if (!(arg1 == 0x00000000))
  633. {
  634. var2 = ((unsigned short *) arg1)[14];
  635. var1 = 0x800202C3;
  636. if (!((var2 & 0x00001000) != 0x00000000))
  637. {
  638. var3 = ((unsigned short *) arg1)[14];
  639. var1 = 0x800202C1;
  640. if (!((var3 & 0x00000100) == 0x00000000))
  641. {
  642. var4 = ((unsigned short *) arg1)[14];
  643. var1 = 0x800202C0;
  644. if (!((var4 & 0x00000002) != 0x00000000))
  645. {
  646. var5 = ((unsigned short *) arg1)[14];
  647. var1 = 0x800202C4;
  648. if (!((var5 & 0x00000070) != 0x00000000))
  649. {
  650. ((int *) arg1)[8] = arg4;
  651. var1 = 0x00000000;
  652. ((int *) arg1)[9] = arg3;
  653. ((int *) arg1)[10] = 0x00000000;
  654. ((int *) arg1)[11] = (arg5 | 0x80000000);
  655. var6 = ((int *) arg1)[12];
  656. ((int *) arg1)[12] = ((var6 | arg2) | 0x0000C001);
  657. }
  658. }
  659. }
  660. }
  661. }
  662. return;
  663. }
  664.  
  665. /**
  666. * Subroutine at address 0x000008F0
  667. */
  668. void sceKernelDmaOpSetupLink (int arg1, int arg2, int arg3)
  669. {
  670. sp = sp + 0xFFFFFFF0;
  671. ((int *) sp)[1] = s1;
  672. var1 = arg1;
  673. ((int *) sp)[2] = ra;
  674. var2 = 0x800202CF;
  675. ((int *) sp)[0] = s0;
  676. if (!(var1 == 0x00000000))
  677. {
  678. var3 = ((unsigned short *) var1)[14];
  679. var2 = 0x800202C3;
  680. if (!((var3 & 0x00001000) != 0x00000000))
  681. {
  682. var4 = ((unsigned short *) var1)[14];
  683. var2 = 0x800202C1;
  684. if (!((var4 & 0x00000100) == 0x00000000))
  685. {
  686. var5 = ((unsigned short *) var1)[14];
  687. var2 = 0x800202C0;
  688. if (!((var5 & 0x00000002) != 0x00000000))
  689. {
  690. var6 = ((unsigned short *) var1)[14];
  691. var2 = 0x800202C4;
  692. if (!((var6 & 0x00000070) != 0x00000000))
  693. {
  694. var7 = (0xA0000000 & 0xE0000000) | (((arg3 & 0xFFFFFFFC) | (0x00000000 & 0x00000003)) & 0x1FFFFFFF);
  695. var8 = ((int *) var7)[0];
  696. ((int *) var1)[14] = var7;
  697. ((int *) var1)[8] = var8;
  698. var9 = ((int *) var7)[1];
  699. ((int *) var1)[9] = var9;
  700. var10 = ((int *) var7)[2];
  701. ((int *) var1)[10] = var10;
  702. var11 = ((int *) var7)[3];
  703. ((int *) var1)[11] = var11;
  704. var12 = ((int *) var1)[12];
  705. var13 = var12 | arg2;
  706. var14 = var13 | 0x0000C001;
  707. ((int *) var1)[12] = var14;
  708. var15 = ((int *) var7)[2];
  709. if (var15 == 0x00000000)
  710. {
  711. }
  712. else
  713. {
  714. var16 = ((int *) var7)[2];
  715. while (1) {
  716. var7 = (0xA0000000 & 0xE0000000) | (var16 & 0x1FFFFFFF);
  717. var17 = ((int *) var7)[2];
  718. if (!(var17 != 0x00000000))
  719. break;
  720. var16 = ((int *) var7)[2];
  721. continue;
  722. }
  723. }
  724. var18 = ((int *) var7)[3];
  725. ((int *) var7)[3] = (var18 | 0x80000000);
  726. var19 = *((int *) 0x00004058);
  727. var22 var23 = (*var19) (0x00000004, var14, var13, var10, 0xA0000000, var17, var16, 0x00000000);
  728. ((int *) var1)[15] = var7;
  729. var2 = 0x00000000;
  730. }
  731. }
  732. }
  733. }
  734. }
  735. ra = ((int *) sp)[2];
  736. var24 = ((int *) sp)[1];
  737. var25 = ((int *) sp)[0];
  738. sp = sp + 0x00000010;
  739. return;
  740. }
  741.  
  742. /**
  743. * Subroutine at address 0x00000A08
  744. */
  745. void sceKernelDmaOpSync (int arg1, int arg2, int arg3)
  746. {
  747. sp = sp + 0xFFFFFFE0;
  748. ((int *) sp)[4] = s0;
  749. var1 = arg1;
  750. ((int *) sp)[5] = ra;
  751. var2 = 0x800202CF;
  752. if (!(arg1 == 0x00000000))
  753. {
  754. var3 = ((unsigned short *) arg1)[14];
  755. var2 = 0x800202C3;
  756. if (!((var3 & 0x00001000) != 0x00000000))
  757. {
  758. var4 = ((unsigned short *) var1)[14];
  759. var2 = 0x800202C1;
  760. if (!((var4 & 0x00000100) == 0x00000000))
  761. {
  762. var5 = ((unsigned short *) var1)[14];
  763. var2 = 0x800202C6;
  764. if (!((var5 & 0x00000020) != 0x00000000))
  765. {
  766. if (arg2 == 0x00000001)
  767. {
  768. var18 = ((int *) var1)[6];
  769. var21 = sceKernelWaitEventFlag (var18, 0x00000006, 0x00000011, 0x00000000, 0x00000000);
  770. var2 = !(var21) ? 0x00000000 : 0x80020001;
  771. }
  772. else
  773. {
  774. if (((arg2 < 0x00000002)) != 0x00000000)
  775. {
  776. if (arg2 != 0x00000000)
  777. {
  778.  
  779. label27:
  780. var2 = 0x80020001;
  781. }
  782. else
  783. {
  784. var14 = ((unsigned short *) var1)[14];
  785. var2 = 0x00000000;
  786. if (!((var14 & 0x00000040) != 0x00000000))
  787. {
  788. var15 = ((unsigned short *) var1)[14];
  789. var2 = 0x800202C7;
  790. if (!((var15 & 0x00000010) != 0x00000000))
  791. {
  792. var16 = ((unsigned short *) var1)[14];
  793. var2 = 0x800202BE;
  794. if (!((var16 & 0x00000001) != 0x00000000))
  795. {
  796. var17 = ((unsigned short *) var1)[14];
  797. var2 = !((var17 & 0x00000002)) ? 0x800202BF : 0x800202C0;
  798. }
  799. }
  800. }
  801. }
  802. }
  803. else
  804. {
  805. if (arg2 == 0x00000002)
  806. {
  807. var7 = ((int *) var1)[6];
  808. var8 = sp;
  809. ((int *) sp)[0] = arg3;
  810. var11 = sceKernelWaitEventFlag (var7, 0x00000006, 0x00000010, 0x00000000, var8);
  811. var2 = 0x00000000;
  812. if (!(var11 == 0x00000000))
  813. {
  814. if (var11 != 0x800201A8)
  815. goto label27;
  816. sub_00B68 (var1);
  817. var2 = 0x800202C2;
  818. }
  819. }
  820. else
  821. {
  822. goto label27;
  823. }
  824. }
  825. }
  826. }
  827. }
  828. }
  829. }
  830. ra = ((int *) sp)[5];
  831. var6 = ((int *) sp)[4];
  832. sp = sp + 0x00000020;
  833. return;
  834. }
  835.  
  836. /**
  837. * Subroutine at address 0x00000B68
  838. */
  839. void sub_00B68 (int arg1)
  840. {
  841. var1 = arg1;
  842. var2 = ((unsigned short *) arg1)[15];
  843. var3 = (char) var2;
  844. var4 = var3 & 0x00000007;
  845. var5 = var4 << 0x00000005;
  846. var6 = var3 >> 0x00000003;
  847. var7 = var5 + 0xBC900100;
  848. if (!(var6 == 0x00000000))
  849. {
  850. var7 = var5 + 0xBCA00100;
  851. }
  852. var8 = ((int *) var7)[4];
  853. ((int *) var7)[4] = ((var8 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
  854. while (1) {
  855. var9 = ((int *) var7)[4];
  856. if ((var9 & 0x00000001) != 0x00000000)
  857. continue;
  858. break;
  859. }
  860. var10 = *((int *) 0x00004048);
  861. var11 = (var6) ? 0xBCA00000 : 0xBC900000;
  862. var12 = 0x00000001 << var4;
  863. ((short *) var1)[14] = 0x00000020;
  864. *((int *) 0x00004048) = (var10 & (!(0x00000001 << var3)));
  865. ((short *) var1)[15] = 0xFFFFFFFF;
  866. ((int *) ((var3 << 0x00000002) + 0x00002000))[0] = 0x00000000;
  867. ((int *) var11)[2] = var12;
  868. ((int *) var11)[4] = var12;
  869. return;
  870. }
  871.  
  872. /**
  873. * Subroutine at address 0x00000C0C
  874. */
  875. void sceKernelDmaOpQuit (int arg1)
  876. {
  877. sp = sp + 0xFFFFFFF0;
  878. ((int *) sp)[2] = s2;
  879. ((int *) sp)[1] = s1;
  880. var1 = 0x00000000;
  881. ((int *) sp)[0] = s0;
  882. ((int *) sp)[3] = ra;
  883. var2 = arg1;
  884. var5 = sceKernelCpuSuspendIntr ();
  885. if (var2 == 0x00000000)
  886. {
  887. var1 = 0x800202CF;
  888. }
  889. else
  890. {
  891. var6 = ((unsigned short *) var2)[14];
  892. if ((var6 & 0x00001000) == 0x00000000)
  893. {
  894. var12 = ((unsigned short *) var2)[14];
  895. if ((var12 & 0x00000100) != 0x00000000)
  896. {
  897. var13 = ((unsigned short *) var2)[14];
  898. if ((var13 & 0x00000040) == 0x00000000)
  899. {
  900. var14 = ((unsigned short *) var2)[14];
  901. if ((var14 & 0x00000001) == 0x00000000)
  902. {
  903. var15 = ((unsigned short *) var2)[14];
  904. if ((var15 & 0x00000010) == 0x00000000)
  905. {
  906. var16 = ((unsigned short *) var2)[14];
  907. if ((var16 & 0x00000020) == 0x00000000)
  908. {
  909. var17 = ((unsigned short *) var2)[14];
  910. if ((var17 & 0x00000002) != 0x00000000)
  911. {
  912. sub_00B68 (var2);
  913. }
  914. else
  915. {
  916. var1 = 0x80020001;
  917. }
  918. }
  919. else
  920. {
  921. var1 = 0x800202C6;
  922. }
  923. }
  924. else
  925. {
  926. var1 = 0x800202C7;
  927. }
  928. }
  929. else
  930. {
  931. var1 = 0x800202BE;
  932. }
  933. }
  934. else
  935. {
  936. var1 = 0x800202BF;
  937. }
  938. }
  939. else
  940. {
  941. var1 = 0x800202C1;
  942. }
  943. }
  944. else
  945. {
  946. var1 = 0x800202C3;
  947. }
  948. }
  949. sceKernelCpuResumeIntrWithSync (var5);
  950. ra = ((int *) sp)[3];
  951. var9 = ((int *) sp)[2];
  952. var10 = ((int *) sp)[1];
  953. var11 = ((int *) sp)[0];
  954. sp = sp + 0x00000010;
  955. return;
  956. }
  957.  
  958. /**
  959. * Subroutine at address 0x00000D1C
  960. */
  961. void DmacManForKernel_E18A93A5 (int arg1, int arg2)
  962. {
  963. sp = sp + 0xFFFFFFE0;
  964. ((int *) sp)[2] = s2;
  965. var1 = arg2;
  966. ((int *) sp)[1] = s1;
  967. var2 = arg1;
  968. ((int *) sp)[5] = ra;
  969. ((int *) sp)[4] = s4;
  970. ((int *) sp)[3] = s3;
  971. ((int *) sp)[0] = s0;
  972. if (!(arg1 == 0x00000000))
  973. {
  974. var3 = (0xA0000000 & 0xE0000000) | (arg2 & 0x1FFFFFFF);
  975. var4 = ((int *) var3)[2];
  976. if (var4 == 0x00000000)
  977. {
  978. var7 = ((int *) var3)[3];
  979. }
  980. else
  981. {
  982. var5 = ((int *) var3)[2];
  983. while (1) {
  984. var3 = (0xA0000000 & 0xE0000000) | (var5 & 0x1FFFFFFF);
  985. var6 = ((int *) var3)[2];
  986. if (!(var6 != 0x00000000))
  987. break;
  988. var5 = ((int *) var3)[2];
  989. continue;
  990. }
  991. var7 = ((int *) var3)[3];
  992. }
  993. ((int *) var3)[3] = (var7 | 0x80000000);
  994. var10 = sceKernelCpuSuspendIntr ();
  995. var11 = ((unsigned short *) var2)[14];
  996. var12 = var11 & 0x0000FFFF;
  997. if ((var12 & 0x00001170) != 0x00000100)
  998. {
  999. sceKernelCpuResumeIntr (var10);
  1000. }
  1001. else
  1002. {
  1003. var13 = 0x00000000;
  1004. if ((var12 & 0x00000002) == 0x00000000)
  1005. {
  1006. if ((var12 & 0x00000001) != 0x00000000)
  1007. {
  1008. var42 = ((int *) var2)[15];
  1009. ((int *) var2)[15] = var3;
  1010. ((int *) var42)[2] = var1;
  1011. }
  1012. else
  1013. {
  1014. var13 = 0x80020001;
  1015. }
  1016. }
  1017. else
  1018. {
  1019. var14 = ((unsigned short *) var2)[15];
  1020. var15 = ((unsigned short *) var2)[15];
  1021. var16 = (var14 & 0x00000007) << 0x00000005;
  1022. var17 = var16 + 0xBC900100;
  1023. if (!((((char) var15) >> 0x00000003) == 0x00000000))
  1024. {
  1025. var17 = var16 + 0xBCA00100;
  1026. }
  1027. var18 = ((int *) var17)[4];
  1028. var19 = var18 | 0x00040000;
  1029. ((int *) var17)[4] = var19;
  1030. var20 = ((int *) var17)[2];
  1031. if (var20 == 0x00000000)
  1032. {
  1033. var36 = var19 & 0x01003800;
  1034. if (((((var36 ^ 0x01000000) < 0x00000001)) | (((var36 ^ 0x01001000) < 0x00000001))) != 0x00000000)
  1035. {
  1036.  
  1037. label26:
  1038. var13 = 0x800202BC;
  1039. }
  1040. else
  1041. {
  1042. if (var36 == 0x01003000)
  1043. {
  1044. goto label26;
  1045. }
  1046. else
  1047. {
  1048. while (1) {
  1049. var37 = ((int *) var17)[4];
  1050. if ((var37 & 0x00020000) != 0x00000000)
  1051. continue;
  1052. break;
  1053. }
  1054. var38 = ((int *) var17)[3];
  1055. if ((var38 & 0x00000FFF) == 0x00000000)
  1056. {
  1057. var13 = 0x800202C4;
  1058. }
  1059. else
  1060. {
  1061. var39 = ((int *) var17)[4];
  1062. ((int *) var17)[4] = ((var39 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
  1063. while (1) {
  1064. var40 = ((int *) var17)[4];
  1065. if ((var40 & 0x00000001) != 0x00000000)
  1066. continue;
  1067. break;
  1068. }
  1069. ((int *) var17)[2] = var1;
  1070. var41 = ((int *) var17)[4];
  1071. ((int *) var2)[15] = var3;
  1072. ((int *) var17)[4] = (var41 | 0x00000001);
  1073. }
  1074. }
  1075. }
  1076. }
  1077. else
  1078. {
  1079. var21 = ((int *) var2)[15];
  1080. ((int *) var2)[15] = var3;
  1081. ((int *) var21)[2] = var1;
  1082. }
  1083. var22 = ((int *) var17)[4];
  1084. var23 = (var22 & 0xFFFBFFFF) | (0x00000000 & 0x00000001);
  1085. ((int *) var17)[4] = var23;
  1086. }
  1087. var24 = *((int *) 0x00004058);
  1088. var27 var28 = (*var24) (0x00000004, var19, var21, var23, var14, 0x00000000, var20, 0x00040000);
  1089. sceKernelCpuResumeIntrWithSync (var10);
  1090. }
  1091. }
  1092. ra = ((int *) sp)[5];
  1093. var31 = ((int *) sp)[4];
  1094. var32 = ((int *) sp)[3];
  1095. var33 = ((int *) sp)[2];
  1096. var34 = ((int *) sp)[1];
  1097. var35 = ((int *) sp)[0];
  1098. sp = sp + 0x00000020;
  1099. return;
  1100. }
  1101.  
  1102. /**
  1103. * Subroutine at address 0x00000F5C
  1104. */
  1105. void sceKernelDmaOpAssignMultiple (int arg1, int arg2)
  1106. {
  1107. sp = sp + 0xFFFFFFF0;
  1108. ((int *) sp)[2] = s2;
  1109. var1 = arg2;
  1110. ((int *) sp)[1] = s1;
  1111. var2 = arg1;
  1112. ((int *) sp)[3] = ra;
  1113. ((int *) sp)[0] = s0;
  1114. if ((((arg2 + 0xFFFFFFFE) < 0x0000000F)) == 0x00000000)
  1115. {
  1116.  
  1117. label25:
  1118. var7 = 0x800202BD;
  1119. }
  1120. else
  1121. {
  1122. var3 = ((int *) arg1)[0];
  1123. var4 = 0x00000000;
  1124. var5 = ((unsigned short *) var3)[26];
  1125. while (1) {
  1126. var4 = var4 + 0x00000001;
  1127. arg2 = arg2 - ((var5 >> var4) & 0x00000001);
  1128. if (((var4 < 0x00000010)) != 0x00000000)
  1129. continue;
  1130. break;
  1131. }
  1132. var6 = var1 + 0xFFFFFFFF;
  1133. if (!(arg2 >= 0))
  1134. goto label25;
  1135. var11 = 0x00000000;
  1136. if (var6 == 0x00000000)
  1137. {
  1138.  
  1139. label16:
  1140. var21 = sceKernelCpuSuspendIntr ();
  1141. var22 = 0x00000000;
  1142. if (var6 == 0x00000000)
  1143. {
  1144. var30 = ((int *) var2)[0];
  1145. }
  1146. else
  1147. {
  1148. var23 = var2;
  1149. while (1) {
  1150. var24 = ((int *) var23)[0];
  1151. var25 = ((int *) var23)[1];
  1152. var22 = var22 + 0x00000001;
  1153. ((int *) var24)[3] = var25;
  1154. var26 = ((int *) var23)[1];
  1155. var27 = ((int *) var23)[0];
  1156. ((int *) var26)[2] = var27;
  1157. var28 = ((int *) var23)[0];
  1158. ((int *) var28)[0] = 0x00000000;
  1159. var29 = ((int *) var23)[0];
  1160. ((int *) var29)[1] = 0x00000000;
  1161. var30 = ((int *) var2)[0];
  1162. var31 = ((int *) var23)[1];
  1163. var23 = var23 + 0x00000004;
  1164. var32 = ((unsigned short *) var30)[26];
  1165. ((short *) var31)[26] = var32;
  1166. if (((var22 < var6)) != 0x00000000)
  1167. continue;
  1168. break;
  1169. }
  1170. }
  1171. ((short *) var30)[27] = var1;
  1172. sceKernelCpuResumeIntr (var21);
  1173. var7 = 0x00000000;
  1174. }
  1175. else
  1176. {
  1177. var12 = var2;
  1178. var13 = ((int *) var12)[0];
  1179. while (1) {
  1180. var11 = var11 + 0x00000001;
  1181. var12 = var12 + 0x00000004;
  1182. var7 = 0x800202CF;
  1183. if (var13 == 0x00000000)
  1184. break;
  1185. var14 = ((unsigned short *) var13)[14];
  1186. var7 = 0x800202C3;
  1187. if ((var14 & 0x00001000) != 0x00000000)
  1188. break;
  1189. var15 = ((unsigned short *) var13)[14];
  1190. var7 = 0x800202C1;
  1191. if ((var15 & 0x00000100) == 0x00000000)
  1192. break;
  1193. var16 = ((unsigned short *) var13)[14];
  1194. var7 = 0x800202BE;
  1195. if ((var16 & 0x00000001) != 0x00000000)
  1196. break;
  1197. var17 = ((unsigned short *) var13)[14];
  1198. var7 = 0x800202C0;
  1199. if ((var17 & 0x00000002) != 0x00000000)
  1200. break;
  1201. var18 = ((unsigned short *) var13)[14];
  1202. var7 = 0x800202C4;
  1203. if ((var18 & 0x00000070) != 0x00000000)
  1204. break;
  1205. if (!(((var11 < var6)) != 0x00000000))
  1206. goto label16;
  1207. var13 = ((int *) var12)[0];
  1208. continue;
  1209. }
  1210. }
  1211. }
  1212. ra = ((int *) sp)[3];
  1213. var8 = ((int *) sp)[2];
  1214. var9 = ((int *) sp)[1];
  1215. var10 = ((int *) sp)[0];
  1216. sp = sp + 0x00000010;
  1217. return;
  1218. }
  1219.  
  1220. /**
  1221. * Subroutine at address 0x000010E4
  1222. */
  1223. void sub_010E4 (int arg1, int arg2)
  1224. {
  1225. sp = sp + 0xFFFFFFC0;
  1226. ((int *) sp)[12] = fp;
  1227. ((int *) sp)[11] = s7;
  1228. ((int *) sp)[10] = s6;
  1229. var1 = arg2;
  1230. ((int *) sp)[9] = s5;
  1231. ((int *) sp)[6] = s2;
  1232. var2 = 0x00000000;
  1233. ((int *) sp)[13] = ra;
  1234. ((int *) sp)[8] = s4;
  1235. ((int *) sp)[7] = s3;
  1236. ((int *) sp)[5] = s1;
  1237. ((int *) sp)[4] = s0;
  1238. var5 = sceKernelCpuSuspendIntr ();
  1239. ((int *) sp)[0] = var5;
  1240. var6 = (var1) ? 0xBCA00000 : 0xBC900000;
  1241. var7 = ((int *) var6)[1];
  1242. var8 = ((int *) var6)[3];
  1243. ((int *) sp)[1] = var7;
  1244. var9 = (var8 | var7) & 0x000000FF;
  1245.  
  1246. label5:
  1247. while (1) {
  1248. var10 = 0x00000001 << var2;
  1249. if ((var9 & var10) != 0x00000000)
  1250. {
  1251. var42 = (var1 << 0x00000003) + var2;
  1252. var43 = var42 << 0x00000002;
  1253. var44 = ((int *) (var43 + 0x00002000))[0];
  1254. if (var44 == 0x00000000)
  1255. {
  1256. var86 = *((int *) 0x00004040);
  1257. if ((var86 & (0x00000001 << var42)) != 0x00000000)
  1258. {
  1259. var2 = var2 + 0x00000001;
  1260. continue;
  1261. }
  1262. else
  1263. {
  1264. Kprintf ("Fatal error: Stray interrupt occurred\n");
  1265. var2 = var2 + 0x00000001;
  1266. continue;
  1267. }
  1268. }
  1269. else
  1270. {
  1271. var45 = var2 << 0x00000005;
  1272. var46 = var45 + 0xBC900100;
  1273. if (!(var1 == 0x00000000))
  1274. {
  1275. var46 = var45 + 0xBCA00100;
  1276. }
  1277. var47 = ((int *) var46)[0];
  1278. var48 = ((int *) sp)[1];
  1279. ((int *) var44)[8] = var47;
  1280. var49 = ((int *) var46)[1];
  1281. ((int *) var44)[9] = var49;
  1282. var50 = ((int *) var46)[2];
  1283. ((int *) var44)[10] = var50;
  1284. var51 = ((int *) var46)[3];
  1285. ((int *) var44)[11] = var51;
  1286. var52 = ((int *) var46)[4];
  1287. ((int *) var44)[12] = var52;
  1288. if ((var48 & var10) == 0x00000000)
  1289. {
  1290. var76 = ((int *) var46)[2];
  1291. if (!(var76 == 0x00000000))
  1292. {
  1293. var77 = ((int *) var46)[4];
  1294. if ((var77 & 0x00000001) != 0x00000000)
  1295. {
  1296. sub_00B68 (var44);
  1297. }
  1298. }
  1299. var78 = ((unsigned short *) var44)[14];
  1300. var79 = *((int *) 0x00004048);
  1301. ((short *) var44)[14] = (var78 | 0x00000010);
  1302. *((int *) 0x00004048) = (var79 & (!(0x00000001 << var42)));
  1303. var80 = ((unsigned short *) var44)[14];
  1304. var81 = ((int *) var44)[6];
  1305. ((int *) (var43 + 0x00002000))[0] = 0x00000000;
  1306. ((short *) var44)[14] = ((var80 & 0xFFFFFFFD) | (0x00000000 & 0x00000001));
  1307. ((short *) var44)[15] = 0xFFFFFFFF;
  1308. if (!(var81 <= 0))
  1309. {
  1310. sceKernelSetEventFlag (var81, 0x00000004);
  1311. }
  1312. ((int *) ((var1) ? 0xBCA00000 : 0xBC900000))[4] = var10;
  1313. var61 = 0xFFFFFFFF;
  1314. }
  1315. else
  1316. {
  1317. var53 = ((int *) var46)[2];
  1318. if (var53 != 0x00000000)
  1319. {
  1320. }
  1321. else
  1322. {
  1323. var54 = ((int *) var46)[4];
  1324. if (!((var54 & 0x00000001) != 0x00000000))
  1325. {
  1326. var55 = *((int *) 0x00004048);
  1327. *((int *) 0x00004048) = (var55 & (!(0x00000001 << var42)));
  1328. var56 = ((unsigned short *) var44)[14];
  1329. var57 = ((int *) var44)[6];
  1330. ((int *) (var43 + 0x00002000))[0] = 0x00000000;
  1331. ((short *) var44)[14] = (((var56 | 0x00000040) & 0xFFFFFFFD) | (0x00000000 & 0x00000001));
  1332. ((short *) var44)[15] = 0xFFFFFFFF;
  1333. if (!(var57 <= 0))
  1334. {
  1335. sceKernelSetEventFlag (var57, 0x00000002);
  1336. }
  1337. }
  1338. }
  1339. var60 = (var1) ? 0xBCA00000 : 0xBC900000;
  1340. ((int *) var60)[2] = var10;
  1341. var61 = 0x00000000;
  1342. }
  1343. var62 = ((int *) var44)[4];
  1344. if (var62 == 0x00000000)
  1345. {
  1346.  
  1347. label69:
  1348. var2 = var2 + 0x00000001;
  1349. continue;
  1350. }
  1351. else
  1352. {
  1353. var63 = ((int *) var44)[5];
  1354. var66 var67 = (*var62) (var44, var61, var42, var63);
  1355. if (var66 != 0x00000001)
  1356. {
  1357. var2 = var2 + 0x00000001;
  1358. continue;
  1359. }
  1360. else
  1361. {
  1362. var68 = ((int *) var44)[14];
  1363. if (!(var68 == 0x00000000))
  1364. {
  1365. var69 = ((int *) var68)[2];
  1366. ((int *) var44)[10] = var69;
  1367. var70 = ((int *) var68)[0];
  1368. ((int *) var44)[8] = var70;
  1369. var71 = ((int *) var68)[1];
  1370. ((int *) var44)[9] = var71;
  1371. var72 = ((int *) var68)[3];
  1372. ((int *) var44)[11] = var72;
  1373. }
  1374. var73 = *((int *) 0x00004050);
  1375. if (var73 == 0x00000000)
  1376. {
  1377. *((int *) 0x00004050) = var44;
  1378. }
  1379. ((int *) var44)[0] = 0x00000000;
  1380. var74 = *((int *) 0x00004054);
  1381. ((int *) var44)[1] = var74;
  1382. if (!(var74 == 0x00000000))
  1383. {
  1384. ((int *) var74)[0] = var44;
  1385. }
  1386. var75 = ((unsigned short *) var44)[14];
  1387. *((int *) 0x00004054) = var44;
  1388. ((short *) var44)[14] = (var75 | 0x00000001);
  1389. var2 = var2 + 0x00000001;
  1390. continue;
  1391. }
  1392. }
  1393. }
  1394. goto label5;
  1395. }
  1396. if (((var9 < var10)) != 0x00000000)
  1397. break;
  1398. goto label69;
  1399. }
  1400. var11 = *((int *) 0x00004050);
  1401. if (var11 == 0x00000000)
  1402. {
  1403. sub_01490 ();
  1404. var12 = *((int *) 0x00004048);
  1405. }
  1406. else
  1407. {
  1408. var12 = *((int *) 0x00004048);
  1409. }
  1410. var13 = *((int *) 0x00004040);
  1411. var14 = var13 | var12;
  1412. if ((var14 & 0x000000FF) == 0x00000000)
  1413. {
  1414. var36 = sceKernelCpuSuspendIntr ();
  1415. var37 = *((int *) 0xBC100050);
  1416. *((int *) 0xBC100050) = ((var37 & 0xFFFFFFDF) | (0x00000000 & 0x00000001));
  1417. var15 = var14 & 0x0000FF00;
  1418. sceKernelCpuResumeIntr (var36);
  1419. }
  1420. else
  1421. {
  1422. var15 = var14 & 0x0000FF00;
  1423. }
  1424. if (var15 == 0x00000000)
  1425. {
  1426. var30 = sceKernelCpuSuspendIntr ();
  1427. var31 = *((int *) 0xBC100050);
  1428. *((int *) 0xBC100050) = ((var31 & 0xFFFFFFBF) | (0x00000000 & 0x00000001));
  1429. sceKernelCpuResumeIntr (var30);
  1430. }
  1431. var16 = ((int *) sp)[0];
  1432. sceKernelCpuResumeIntr (var16);
  1433. ra = ((int *) sp)[13];
  1434. var19 = ((int *) sp)[12];
  1435. var20 = ((int *) sp)[11];
  1436. var21 = ((int *) sp)[10];
  1437. var22 = ((int *) sp)[9];
  1438. var23 = ((int *) sp)[8];
  1439. var24 = ((int *) sp)[7];
  1440. var25 = ((int *) sp)[6];
  1441. var26 = ((int *) sp)[5];
  1442. var27 = ((int *) sp)[4];
  1443. sp = sp + 0x00000040;
  1444. return;
  1445. }
  1446.  
  1447. /**
  1448. * Subroutine at address 0x00001490
  1449. */
  1450. void sub_01490 ()
  1451. {
  1452. sp = sp + 0xFFFFFFF0;
  1453. ((int *) sp)[2] = s2;
  1454. ((int *) sp)[1] = s1;
  1455. ((int *) sp)[0] = s0;
  1456. var1 = *((int *) 0x00004040);
  1457. var2 = *((int *) 0x00004048);
  1458. var3 = *((int *) 0x00004050);
  1459. var4 = var1 | var2;
  1460. var5 = var4 ^ 0x0000FFFF;
  1461. if ((((0x00000000 < var3)) & ((0x00000000 < var5))) == 0x00000000)
  1462. {
  1463.  
  1464. label53:
  1465. }
  1466. else
  1467. {
  1468. var6 = ((int *) var3)[3];
  1469. while (1) {
  1470. if (var6 == 0x00000000)
  1471. {
  1472.  
  1473. label16:
  1474. var26 = var3;
  1475. while (1) {
  1476. var27 = ((unsigned short *) var26)[15];
  1477. var28 = (char) var27;
  1478. if (var28 < 0)
  1479. {
  1480. var55 = ((unsigned short *) var26)[26];
  1481. var28 = CLZ ((BITREV ((var55 & (!var4)))));
  1482. if (((var28 < 0x00000010)) == 0x00000000)
  1483. break;
  1484. ((int *) ((var28 << 0x00000002) + 0x00002000))[0] = var26;
  1485. var4 = var4 | (0x00000001 << var28);
  1486. ((short *) var26)[15] = var28;
  1487.  
  1488. label21:
  1489. var29 = *((int *) 0xBC100050);
  1490. var30 = var28 >> 0x00000003;
  1491. var31 = 0x00000020 << var30;
  1492. if ((var29 & var31) != 0x00000000)
  1493. {
  1494. var36 = var28 & 0x00000007;
  1495. }
  1496. else
  1497. {
  1498. *((int *) 0xBC100050) = (var29 | var31);
  1499. var32 = (var30) ? 0xBCA00000 : 0xBC900000;
  1500. var33 = ((int *) var32)[12];
  1501. var34 = var32;
  1502. var35 = 0x00000007;
  1503. ((int *) var32)[12] = (var33 | 0x00000001);
  1504. ((int *) var32)[13] = 0x00000000;
  1505. while (1) {
  1506. var35 = var35 + 0xFFFFFFFF;
  1507. ((int *) var34)[64] = 0x00000000;
  1508. ((int *) var34)[65] = 0x00000000;
  1509. ((int *) var34)[66] = 0x00000000;
  1510. ((int *) var34)[67] = 0x00000000;
  1511. ((int *) var34)[68] = 0x00000000;
  1512. var34 = var34 + 0x00000020;
  1513. if (var35 >= 0)
  1514. continue;
  1515. break;
  1516. }
  1517. ((int *) var32)[2] = 0x000000FF;
  1518. ((int *) var32)[4] = 0x000000FF;
  1519. var36 = var28 & 0x00000007;
  1520. }
  1521. var37 = var36 << 0x00000005;
  1522. var38 = ((int *) var26)[8];
  1523. var39 = (var30) ? (var37 + 0xBCA00100) : (var37 + 0xBC900100);
  1524. ((int *) var39)[0] = var38;
  1525. var40 = ((int *) var26)[9];
  1526. var41 = ((int *) var26)[2];
  1527. ((int *) var39)[1] = var40;
  1528. var42 = ((int *) var26)[10];
  1529. ((int *) var39)[2] = var42;
  1530. var43 = ((int *) var26)[11];
  1531. ((int *) var39)[3] = var43;
  1532. var44 = ((unsigned short *) var26)[14];
  1533. ((short *) var26)[14] = (var44 | 0x00000002);
  1534. var45 = ((int *) var26)[12];
  1535. ((int *) var39)[4] = var45;
  1536. if (var41 != 0x00000000)
  1537. {
  1538. var26 = ((int *) var26)[3];
  1539. }
  1540. else
  1541. {
  1542. var46 = ((unsigned short *) var26)[14];
  1543. var47 = *((int *) 0x00004054);
  1544. ((short *) var26)[14] = ((var46 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
  1545. if (var47 == var26)
  1546. {
  1547. var54 = ((int *) var26)[1];
  1548. *((int *) 0x00004054) = var54;
  1549. }
  1550. var48 = *((int *) 0x00004050);
  1551. if (var48 == var26)
  1552. {
  1553. var53 = ((int *) var26)[0];
  1554. *((int *) 0x00004050) = var53;
  1555. }
  1556. var49 = ((int *) var26)[1];
  1557. if (var49 == 0x00000000)
  1558. {
  1559. var51 = ((int *) var26)[0];
  1560. }
  1561. else
  1562. {
  1563. var50 = ((int *) var26)[0];
  1564. ((int *) var26)[1] = 0x00000000;
  1565. ((int *) var49)[0] = var50;
  1566. var51 = ((int *) var26)[0];
  1567. }
  1568. if (var51 == 0x00000000)
  1569. {
  1570. var26 = ((int *) var26)[3];
  1571. }
  1572. else
  1573. {
  1574. var52 = ((int *) var26)[1];
  1575. ((int *) var26)[0] = 0x00000000;
  1576. ((int *) var51)[1] = var52;
  1577. var26 = ((int *) var26)[3];
  1578. }
  1579. }
  1580. if (var26 != 0x00000000)
  1581. continue;
  1582. break;
  1583. }
  1584. else
  1585. goto label21;
  1586. }
  1587. var3 = ((int *) var3)[0];
  1588. var5 = var4 ^ 0x0000FFFF;
  1589.  
  1590. label51:
  1591. if (!((((0x00000000 < var3)) & ((0x00000000 < var5))) != 0x00000000))
  1592. break;
  1593. var6 = ((int *) var3)[3];
  1594. continue;
  1595. }
  1596. else
  1597. {
  1598. var7 = ((int *) var3)[2];
  1599. if (var7 != 0x00000000)
  1600. {
  1601. goto label16;
  1602. }
  1603. else
  1604. {
  1605. var8 = ((unsigned short *) var3)[26];
  1606. var9 = ((unsigned short *) var3)[27];
  1607. var10 = var8 & (!var4);
  1608. var11 = 0x00000000;
  1609. while (1) {
  1610. var11 = var11 + 0x00000001;
  1611. var9 = var9 - ((var10 >> var11) & 0x00000001);
  1612. if (((var11 < 0x00000010)) != 0x00000000)
  1613. continue;
  1614. break;
  1615. }
  1616. var12 = var3;
  1617. if (var9 >= 0)
  1618. {
  1619. var23 = 0x00001FFC;
  1620. var24 = 0x00000000;
  1621. while (1) {
  1622. var25 = 0x00000001 << var24;
  1623. var23 = var23 + 0x00000004;
  1624. if ((var10 & var25) != 0x00000000)
  1625. {
  1626. ((int *) var23)[0] = var12;
  1627. var4 = var4 | var25;
  1628. ((short *) var12)[15] = var24;
  1629. var12 = ((int *) var12)[3];
  1630. }
  1631. var24 = var24 + 0x00000001;
  1632. if (var12 != 0x00000000)
  1633. continue;
  1634. break;
  1635. }
  1636. goto label16;
  1637. }
  1638. else
  1639. {
  1640. var13 = ((int *) var3)[0];
  1641. if (var13 == 0x00000000)
  1642. {
  1643. }
  1644. else
  1645. {
  1646. var14 = ((int *) var3)[1];
  1647. var15 = ((int *) var13)[0];
  1648. ((int *) var13)[1] = var14;
  1649. ((int *) var3)[1] = var13;
  1650. var16 = ((int *) var13)[1];
  1651. ((int *) var3)[0] = var15;
  1652. if (var16 == 0x00000000)
  1653. {
  1654. *((int *) 0x00004050) = var13;
  1655. }
  1656. else
  1657. {
  1658. ((int *) var16)[0] = var13;
  1659. }
  1660. var17 = ((int *) var13)[0];
  1661. if (var17 == 0x00000000)
  1662. {
  1663. *((int *) 0x00004054) = var3;
  1664. }
  1665. else
  1666. {
  1667. var18 = ((int *) var3)[0];
  1668. ((int *) var18)[1] = var3;
  1669. }
  1670. ((int *) var13)[0] = var3;
  1671. var3 = var13;
  1672. goto label51;
  1673. }
  1674. }
  1675. }
  1676. }
  1677. goto label54;
  1678. }
  1679. goto label53;
  1680. }
  1681.  
  1682. label54:
  1683. var19 = *((int *) 0x00004040);
  1684. var20 = ((int *) sp)[2];
  1685. var21 = ((int *) sp)[1];
  1686. var22 = ((int *) sp)[0];
  1687. *((int *) 0x00004048) = (var4 & (!var19));
  1688. sp = sp + 0x00000010;
  1689. return;
  1690. }
  1691.  
  1692. /**
  1693. * Subroutine at address 0x000017A0
  1694. */
  1695. void sceKernelDmaChExclude (int arg1, int arg2)
  1696. {
  1697. sp = sp + 0xFFFFFFE0;
  1698. ((int *) sp)[0] = s0;
  1699. var1 = arg1;
  1700. ((int *) sp)[1] = s1;
  1701. var2 = 0x00000001 << var1;
  1702. ((int *) sp)[2] = s2;
  1703. ((int *) sp)[4] = ra;
  1704. ((int *) sp)[3] = s3;
  1705. if (!(((var1 < 0x00000010)) == 0x00000000))
  1706. {
  1707. var5 = sceKernelCpuSuspendIntr ();
  1708. var6 = var5;
  1709. var7 = *((int *) 0x00004044);
  1710. if ((var7 & var2) != 0x00000000)
  1711. {
  1712. sceKernelCpuResumeIntr (var6);
  1713. }
  1714. else
  1715. {
  1716. if (arg2 != 0x00000000)
  1717. {
  1718. var15 = *((int *) 0x00004040);
  1719. *((int *) 0x00004040) = (var15 | var2);
  1720. sub_01C20 ((var1 >> 0x00000003));
  1721. }
  1722. else
  1723. {
  1724. var8 = *((int *) 0x00004040);
  1725. *((int *) 0x00004040) = (var8 & (!var2));
  1726. }
  1727. sceKernelCpuResumeIntr (var6);
  1728. }
  1729. }
  1730. ra = ((int *) sp)[4];
  1731. var11 = ((int *) sp)[3];
  1732. var12 = ((int *) sp)[2];
  1733. var13 = ((int *) sp)[1];
  1734. var14 = ((int *) sp)[0];
  1735. sp = sp + 0x00000020;
  1736. return;
  1737. }
  1738.  
  1739. /**
  1740. * Subroutine at address 0x00001868
  1741. */
  1742. void sceKernelDmaChReserve (int arg1, int arg2)
  1743. {
  1744. sp = sp + 0xFFFFFFF0;
  1745. ((int *) sp)[1] = s1;
  1746. ((int *) sp)[0] = s0;
  1747. ((int *) sp)[2] = ra;
  1748. var3 = sceKernelCpuSuspendIntr ();
  1749. var4 = *((int *) 0x00004040);
  1750. var5 = 0x00000001 << arg1;
  1751. if ((var4 & var5) != 0x00000000)
  1752. {
  1753. sceKernelCpuResumeIntr (var3);
  1754. }
  1755. else
  1756. {
  1757. if (arg2 < 0)
  1758. {
  1759. var12 = *((int *) 0x00004044);
  1760. var7 = var12 & (!var5);
  1761. }
  1762. else
  1763. {
  1764. var6 = *((int *) 0x00004044);
  1765. var7 = var6 | var5;
  1766. }
  1767. *((int *) 0x00004044) = var7;
  1768. sceKernelCpuResumeIntr (var3);
  1769. }
  1770. ra = ((int *) sp)[2];
  1771. var10 = ((int *) sp)[1];
  1772. var11 = ((int *) sp)[0];
  1773. sp = sp + 0x00000010;
  1774. return;
  1775. }
  1776.  
  1777. /**
  1778. * Subroutine at address 0x00001900
  1779. */
  1780. void sceKernelDmaOpAlloc ()
  1781. {
  1782. sp = sp + 0xFFFFFFF0;
  1783. ((int *) sp)[2] = s2;
  1784. ((int *) sp)[1] = s1;
  1785. ((int *) sp)[0] = s0;
  1786. ((int *) sp)[3] = ra;
  1787. var3 = sceKernelCpuSuspendIntr ();
  1788. var4 = *((int *) 0x0000404C);
  1789. var5 = var3;
  1790. if (var4 == 0x00000000)
  1791. {
  1792.  
  1793. label7:
  1794. sceKernelCpuResumeIntr (var5);
  1795. }
  1796. else
  1797. {
  1798. var6 = ((unsigned short *) var4)[14];
  1799. if ((var6 & 0x00001000) == 0x00000000)
  1800. {
  1801. goto label7;
  1802. }
  1803. else
  1804. {
  1805. ((short *) var4)[26] = 0xFFFFFFFF;
  1806. ((short *) var4)[14] = 0x00000000;
  1807. ((int *) var4)[4] = 0x00000000;
  1808. ((short *) var4)[15] = 0xFFFFFFFF;
  1809. var9 = sceKernelCreateEventFlag ("SceDmacmanEvflag");
  1810. var10 = ((int *) var4)[0];
  1811. ((int *) var4)[6] = var9;
  1812. *((int *) 0x0000404C) = var10;
  1813. ((int *) var4)[3] = 0x00000000;
  1814. ((int *) var4)[2] = 0x00000000;
  1815. sceKernelCpuResumeIntr (var5);
  1816. }
  1817. }
  1818. ra = ((int *) sp)[3];
  1819. var13 = ((int *) sp)[2];
  1820. var14 = ((int *) sp)[1];
  1821. var15 = ((int *) sp)[0];
  1822. sp = sp + 0x00000010;
  1823. return;
  1824. }
  1825.  
  1826. /**
  1827. * Subroutine at address 0x000019B8
  1828. */
  1829. void sceKernelDmaOpAssign (int arg1, int arg2, int arg3, int arg4)
  1830. {
  1831. var1 = arg1;
  1832. var2 = 0x800202CF;
  1833. if (!(arg1 == 0x00000000))
  1834. {
  1835. var3 = ((unsigned short *) arg1)[14];
  1836. var2 = 0x800202C3;
  1837. if (!((var3 & 0x00001000) != 0x00000000))
  1838. {
  1839. var4 = ((unsigned short *) var1)[14];
  1840. var2 = 0x800202BE;
  1841. if (!((var4 & 0x00000001) != 0x00000000))
  1842. {
  1843. var5 = ((unsigned short *) var1)[14];
  1844. var2 = 0x800202C0;
  1845. if (!((var5 & 0x00000002) != 0x00000000))
  1846. {
  1847. ((int *) var1)[12] = arg4;
  1848. var2 = 0x00000000;
  1849. ((short *) var1)[26] = (((arg3 & 0x000000FF) << 0x00000008) | (arg2 & 0x000000FF));
  1850. ((short *) var1)[14] = 0x00000100;
  1851. }
  1852. }
  1853. }
  1854. }
  1855. return;
  1856. }
  1857.  
  1858. /**
  1859. * Subroutine at address 0x00001A30
  1860. */
  1861. void DmacManForKernel_1FC036B7 (int arg1, int arg2)
  1862. {
  1863. sp = sp + 0xFFFFFFF0;
  1864. ((int *) sp)[1] = s1;
  1865. var1 = arg1;
  1866. ((int *) sp)[0] = s0;
  1867. ((int *) sp)[2] = ra;
  1868. var2 = ((int *) arg1)[15];
  1869. var3 = *((int *) 0x00004058);
  1870. ((int *) var2)[2] = arg2;
  1871. var6 var7 = (*var3) (0x00000004, arg2, 0x00000000, arg4, arg5, arg6, arg7, arg8);
  1872. var8 = (0xA0000000 & 0xE0000000) | (arg2 & 0x1FFFFFFF);
  1873. var9 = ((int *) var8)[2];
  1874. if (var9 == 0x00000000)
  1875. {
  1876. ((int *) var1)[15] = var8;
  1877. }
  1878. else
  1879. {
  1880. var10 = ((int *) var8)[2];
  1881. while (1) {
  1882. var11 = (0xA0000000 & 0xE0000000) | (var10 & 0x1FFFFFFF);
  1883. var12 = ((int *) var11)[2];
  1884. if (!(var12 != 0x00000000))
  1885. break;
  1886. var10 = ((int *) var11)[2];
  1887. continue;
  1888. }
  1889. ((int *) var1)[15] = var11;
  1890. }
  1891. ra = ((int *) sp)[2];
  1892. var13 = ((int *) sp)[1];
  1893. var14 = ((int *) sp)[0];
  1894. sp = sp + 0x00000010;
  1895. return;
  1896. }
  1897.  
  1898. /**
  1899. * Subroutine at address 0x00001AAC
  1900. */
  1901. void sceKernelDmaOnDebugMode ()
  1902. {
  1903. return;
  1904. }
  1905.  
  1906. /**
  1907. * Subroutine at address 0x00001AB4
  1908. */
  1909. void sceKernelDmaOpFreeLink (int arg1)
  1910. {
  1911. var1 = 0x800202CF;
  1912. if (!(arg1 == 0x00000000))
  1913. {
  1914. var2 = ((unsigned short *) arg1)[14];
  1915. var1 = 0x800202C3;
  1916. if (!((var2 & 0x00001000) != 0x00000000))
  1917. {
  1918. var3 = ((unsigned short *) arg1)[14];
  1919. var1 = ((var3 & 0x00000100)) ? 0x00000000 : 0x800202C1;
  1920. }
  1921. }
  1922. return;
  1923. }
  1924.  
  1925. /**
  1926. * Subroutine at address 0x00001AF0
  1927. */
  1928. void sub_01AF0 ()
  1929. {
  1930. sp = sp + 0xFFFFFFF0;
  1931. ((int *) sp)[3] = ra;
  1932. ((int *) sp)[2] = s2;
  1933. ((int *) sp)[1] = s1;
  1934. var1 = 0x00002000;
  1935. ((int *) sp)[0] = s0;
  1936. var2 = 0x0000000F;
  1937. var3 = *((int *) 0x00002000);
  1938. while (1) {
  1939. var2 = var2 + 0xFFFFFFFF;
  1940. var1 = var1 + 0x00000004;
  1941. if (var3 != 0x00000000)
  1942. {
  1943. sub_00B68 (var3);
  1944. }
  1945. if (!(var2 >= 0))
  1946. break;
  1947. var3 = ((int *) var1)[0];
  1948. continue;
  1949. }
  1950. *((int *) 0x00004048) = 0x00000000;
  1951. var4 = 0x00000000;
  1952. sceKernelDmaOpAllCancel ();
  1953. while (1) {
  1954. var4 = var4 + 0x00000001;
  1955. sceKernelDisableIntr (0x00000016);
  1956. if (((var4 < 0x00000002)) != 0x00000000)
  1957. continue;
  1958. break;
  1959. }
  1960. ra = ((int *) sp)[3];
  1961. var9 = ((int *) sp)[2];
  1962. var10 = ((int *) sp)[1];
  1963. var11 = ((int *) sp)[0];
  1964. sp = sp + 0x00000010;
  1965. return;
  1966. }
  1967.  
  1968. /**
  1969. * Subroutine at address 0x00001B80
  1970. */
  1971. void sub_01B80 ()
  1972. {
  1973. sp = sp + 0xFFFFFFF0;
  1974. ((int *) sp)[0] = s0;
  1975. ((int *) sp)[1] = ra;
  1976. var1 = *((int *) 0x00004040);
  1977. if ((var1 & 0x0000FF00) != 0x00000000)
  1978. {
  1979. sub_01C20 (0x00000001);
  1980. var1 = *((int *) 0x00004040);
  1981. }
  1982. if ((var1 & 0x000000FF) != 0x00000000)
  1983. {
  1984. sub_01C20 (0x00000000);
  1985. }
  1986. else
  1987. {
  1988. }
  1989. while (1) {
  1990. var2 = var2 + 0x00000001;
  1991. var5 = sceKernelEnableIntr (0x00000016);
  1992. if (((var2 < 0x00000002)) != 0x00000000)
  1993. continue;
  1994. break;
  1995. }
  1996. ra = ((int *) sp)[1];
  1997. var6 = ((int *) sp)[0];
  1998. sp = sp + 0x00000010;
  1999. return;
  2000. }
  2001.  
  2002. /**
  2003. * Subroutine at address 0x00001C00
  2004. */
  2005. void sub_01C00 ()
  2006. {
  2007. __asm__ ("sync;");
  2008. var1 = ra >> 0x0000001F;
  2009. var2 = ((var1 + 0x00000002) << 0x0000001D) | ra;
  2010. var3 = ((int *) var2)[0];
  2011. return;
  2012. }
  2013.  
  2014. /**
  2015. * Subroutine at address 0x00001C20
  2016. */
  2017. void sub_01C20 (int arg1)
  2018. {
  2019. var1 = *((int *) 0xBC100050);
  2020. var2 = 0x00000020 << arg1;
  2021. if (!((var1 & var2) != 0x00000000))
  2022. {
  2023. *((int *) 0xBC100050) = (var1 | var2);
  2024. var3 = (arg1) ? 0xBCA00000 : 0xBC900000;
  2025. var4 = ((int *) var3)[12];
  2026. var5 = var3;
  2027. var6 = 0x00000007;
  2028. ((int *) var3)[12] = (var4 | 0x00000001);
  2029. ((int *) var3)[13] = 0x00000000;
  2030. while (1) {
  2031. var6 = var6 + 0xFFFFFFFF;
  2032. ((int *) var5)[64] = 0x00000000;
  2033. ((int *) var5)[65] = 0x00000000;
  2034. ((int *) var5)[66] = 0x00000000;
  2035. ((int *) var5)[67] = 0x00000000;
  2036. ((int *) var5)[68] = 0x00000000;
  2037. var5 = var5 + 0x00000020;
  2038. if (var6 >= 0)
  2039. continue;
  2040. break;
  2041. }
  2042. ((int *) var3)[2] = 0x000000FF;
  2043. ((int *) var3)[4] = 0x000000FF;
  2044. }
  2045. return;
  2046. }
Add Comment
Please, Sign In to add comment