Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pspsdk.h>
- #include "dmacman.h"
- /*
- * Imports from library: InterruptManagerForKernel
- */
- extern int sceKernelCpuSuspendIntr ();
- extern void sceKernelCpuResumeIntrWithSync (int arg1);
- extern int sceKernelEnableIntr (int arg1);
- extern int sceKernelRegisterIntrHandler (int arg1, int arg2, int arg3, int arg4, int arg5);
- extern void sceKernelCpuResumeIntr (int arg1);
- extern void sceKernelDisableIntr (int arg1);
- extern int sceKernelReleaseIntrHandler (int arg1);
- /*
- * Imports from library: SysclibForKernel
- */
- extern void memset (int arg1, int arg2, int arg3);
- /*
- * Imports from library: ThreadManForKernel
- */
- extern void sceKernelSetEventFlag (int arg1, int arg2);
- extern int sceKernelWaitEventFlag (int arg1, int arg2, int arg3, int arg4, int arg5);
- extern int sceKernelCreateEventFlag (int arg1);
- extern void sceKernelDeleteEventFlag (int arg1);
- /*
- * Imports from library: sceSuspendForKernel
- */
- extern void sceKernelRegisterSuspendHandler (int arg1, int arg2, int arg3);
- extern void sceKernelRegisterResumeHandler (int arg1, int arg2, int arg3);
- /*
- * Imports from library: KDebugForKernel
- */
- extern void Kprintf (int arg1);
- /**
- * Subroutine at address 0x00000000
- */
- void module_start ()
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[5] = ra;
- ((int *) sp)[4] = s4;
- ((int *) sp)[1] = s1;
- ((int *) sp)[3] = s3;
- ((int *) sp)[2] = s2;
- ((int *) sp)[0] = s0;
- var3 = sceKernelCpuSuspendIntr ();
- memset (0x00002040, 0x00000000, 0x00002000);
- var6 = 0x00002040;
- *((int *) 0x0000404C) = 0x00002040;
- *((int *) 0x00002040) = 0x00002080;
- var7 = 0x000020C0;
- var8 = 0x00000002;
- while (1) {
- ((int *) var6)[16] = var7;
- var7 = var7 + 0x00000040;
- ((int *) var6)[17] = var6;
- var6 = var6 + 0x00000040;
- ((short *) (var6 + 0x00000010))[6] = 0x00001000;
- var8 = var8 + 0x00000001;
- if (((var8 < 0x00000080)) != 0x00000000)
- continue;
- break;
- }
- *((short *) 0x0000401C) = 0x00001000;
- *((int *) 0x00004054) = 0x00000000;
- *((int *) 0x00004000) = 0x00000000;
- var9 = 0x00000000;
- var10 = 0x00000000;
- *((int *) 0x00004050) = 0x00000000;
- sceKernelRegisterSuspendHandler (0x00000014, 0x00001AF0, 0x00000000);
- sceKernelRegisterResumeHandler (0x00000014, 0x00001B80, 0x00000000);
- while (1) {
- var15 = var10 + 0x00000016;
- var18 = sceKernelRegisterIntrHandler (var15, 0x00000002, 0x000010E4, var10, 0x00000000);
- var10 = var10 + 0x00000001;
- var21 = sceKernelEnableIntr (var15);
- var9 = (var9 | var18) | var21;
- if (((var10 < 0x00000002)) != 0x00000000)
- continue;
- break;
- }
- var22 = 0x00000000;
- if (var9 < 0)
- {
- while (1) {
- var22 = var22 + 0x00000001;
- var34 = sceKernelReleaseIntrHandler (0x00000016);
- if (((var22 < 0x00000002)) != 0x00000000)
- continue;
- break;
- }
- var9 = 0x800202BC;
- }
- DmacManForKernel_32757C57 (0x00001C00);
- sceKernelCpuResumeIntr (var3);
- ra = ((int *) sp)[5];
- var27 = ((int *) sp)[4];
- var28 = ((int *) sp)[3];
- var29 = ((int *) sp)[2];
- var30 = ((int *) sp)[1];
- var31 = ((int *) sp)[0];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x00000168
- */
- void sceKernelDmaExit ()
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[4] = s4;
- ((int *) sp)[0] = s0;
- var1 = 0x00000000;
- ((int *) sp)[5] = ra;
- ((int *) sp)[3] = s3;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- var4 = sceKernelCpuSuspendIntr ();
- while (1) {
- var6 = 0x00000000 << 0x00000005;
- while (1) {
- var7 = (var1) ? (var6 + 0xBCA00100) : (var6 + 0xBC900100);
- var8 = ((int *) var7)[4];
- ((int *) var7)[4] = (var8 | 0x00040000);
- while (1) {
- var9 = ((int *) var7)[4];
- if ((var9 & 0x00020000) != 0x00000000)
- continue;
- break;
- }
- var10 = ((int *) var7)[4];
- var5 = var5 + 0x00000001;
- ((int *) var7)[4] = (var10 & 0xFFFF3FFE);
- var6 = var5 << 0x00000005;
- if (((var5 < 0x00000008)) != 0x00000000)
- continue;
- break;
- }
- var1 = var1 + 0x00000001;
- if (!(((var1 < 0x00000002)) != 0x00000000))
- break;
- continue;
- }
- var11 = 0x00000000;
- sceKernelDmaOpAllCancel ();
- var14 = 0x00000000;
- while (1) {
- var15 = (var14) ? 0xBCA00000 : 0xBC900000;
- var16 = ((int *) var15)[12];
- ((int *) var15)[12] = ((var16 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
- ((int *) var15)[2] = 0x000000FF;
- ((int *) var15)[4] = 0x000000FF;
- var19 = sceKernelReleaseIntrHandler ((var14 + 0x00000016));
- var11 = var11 | var19;
- var22 = sceKernelCpuSuspendIntr ();
- var23 = *((int *) 0xBC100050);
- var14 = var14 + 0x00000001;
- *((int *) 0xBC100050) = (var23 & (!(0x00000020 << var14)));
- sceKernelCpuResumeIntr (var22);
- if (((var14 < 0x00000002)) != 0x00000000)
- continue;
- break;
- }
- sceKernelCpuResumeIntr (var4);
- ra = ((int *) sp)[5];
- var28 = ((int *) sp)[4];
- var29 = ((int *) sp)[3];
- var30 = ((int *) sp)[2];
- var31 = ((int *) sp)[1];
- var32 = ((int *) sp)[0];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x000002C0
- */
- void DmacManForKernel_32757C57 (int arg1)
- {
- if (arg1 == 0x00000000)
- {
- *((int *) 0x00004058) = 0x00001C00;
- }
- else
- {
- *((int *) 0x00004058) = arg1;
- }
- return;
- }
- /**
- * Subroutine at address 0x000002E8
- */
- void sceKernelDmaSoftRequest (int arg1, int arg2, int arg3, int arg4)
- {
- var1 = (arg1) ? 0xBCA00000 : 0xBC900000;
- if (arg4 != 0x00000000)
- {
- if (arg3 == 0x00000000)
- {
- ((int *) var1)[11] = (0x00000001 << arg2);
- }
- else
- {
- ((int *) var1)[10] = (0x00000001 << arg2);
- }
- }
- else
- {
- if (arg3 == 0x00000000)
- {
- ((int *) var1)[9] = (0x00000001 << arg2);
- }
- else
- {
- ((int *) var1)[8] = (0x00000001 << arg2);
- }
- }
- __asm__ ("sync;");
- return;
- }
- /**
- * Subroutine at address 0x00000348
- */
- void sceKernelDmaOpFree (int arg1)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- var1 = 0x800202CF;
- ((int *) sp)[0] = s0;
- ((int *) sp)[3] = ra;
- var2 = arg1;
- var5 = sceKernelCpuSuspendIntr ();
- if (var2 == 0x00000000)
- {
- label16:
- sceKernelCpuResumeIntr (var5);
- }
- else
- {
- var6 = ((unsigned short *) var2)[14];
- var1 = 0x800202C3;
- if ((var6 & 0x00001000) != 0x00000000)
- goto label16;
- var7 = ((unsigned short *) var2)[14];
- var1 = 0x800202BE;
- if ((var7 & 0x00000001) != 0x00000000)
- goto label16;
- var8 = ((unsigned short *) var2)[14];
- if ((var8 & 0x00000002) == 0x00000000)
- {
- var14 = *((int *) 0x0000404C);
- ((int *) var2)[1] = 0x00000000;
- ((int *) var2)[0] = var14;
- var15 = *((int *) 0x0000404C);
- ((short *) var2)[15] = 0xFFFFFFFF;
- ((int *) var2)[14] = 0x00000000;
- ((int *) var2)[8] = 0x00000000;
- ((int *) var2)[4] = 0x00000000;
- ((int *) var2)[9] = 0x00000000;
- ((int *) var2)[10] = 0x00000000;
- ((int *) var2)[11] = 0x00000000;
- ((int *) var2)[12] = 0x00000000;
- if (var15 != 0x00000000)
- {
- ((int *) var15)[1] = var2;
- }
- ((short *) var2)[14] = 0x00001000;
- var16 = ((int *) var2)[6];
- *((int *) 0x0000404C) = var2;
- sceKernelDeleteEventFlag (var16);
- sceKernelCpuResumeIntr (var5);
- }
- else
- {
- var1 = 0x800202C0;
- goto label16;
- }
- }
- ra = ((int *) sp)[3];
- var11 = ((int *) sp)[2];
- var12 = ((int *) sp)[1];
- var13 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00000440
- */
- void sceKernelDmaOpEnQueue (int arg1)
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[2] = s2;
- var1 = 0x800202CF;
- var2 = arg1;
- ((int *) sp)[1] = s1;
- var3 = 0x00000000;
- ((int *) sp)[0] = s0;
- var4 = arg1;
- ((int *) sp)[4] = ra;
- ((int *) sp)[3] = s3;
- if (!(arg1 == 0x00000000))
- {
- var5 = ((int *) arg1)[2];
- var1 = 0x800202CD;
- if (!(var5 != 0x00000000))
- {
- var8 = sceKernelCpuSuspendIntr ();
- var9 = var8;
- while (1) {
- var10 = ((unsigned short *) var4)[14];
- if ((var10 & 0x00000001) != 0x00000000)
- {
- var3 = 0x800202BE;
- goto label17;
- }
- else
- {
- var11 = ((unsigned short *) var4)[14];
- if ((var11 & 0x00001000) != 0x00000000)
- {
- var3 = 0x800202C3;
- goto label17;
- }
- else
- {
- var12 = ((unsigned short *) var4)[14];
- if ((var12 & 0x00000100) == 0x00000000)
- {
- var3 = 0x800202C1;
- goto label17;
- }
- else
- {
- var13 = ((unsigned short *) var4)[14];
- if ((var13 & 0x00000002) != 0x00000000)
- {
- var3 = 0x800202C0;
- goto label17;
- }
- else
- {
- var14 = ((unsigned short *) var4)[14];
- var3 = ((var14 & 0x00000070)) ? 0x800202C4 : var3;
- if (var3 < 0)
- break;
- var4 = ((int *) var4)[3];
- if (var4 != 0x00000000)
- continue;
- var15 = *((int *) 0x00004050);
- if (var15 == 0x00000000)
- {
- *((int *) 0x00004050) = var2;
- }
- ((int *) var2)[0] = 0x00000000;
- var16 = *((int *) 0x00004054);
- ((int *) var2)[1] = var16;
- if (!(var16 == 0x00000000))
- {
- ((int *) var16)[0] = var2;
- }
- var17 = ((unsigned short *) var2)[14];
- *((int *) 0x00004054) = var2;
- ((short *) var2)[14] = (var17 | 0x00000001);
- sub_01490 ();
- sceKernelCpuResumeIntr (var9);
- var1 = 0x00000000;
- }
- }
- }
- }
- goto label30;
- }
- label17:
- sceKernelCpuResumeIntr (var9);
- var1 = var3;
- }
- }
- label30:
- ra = ((int *) sp)[4];
- var22 = ((int *) sp)[3];
- var23 = ((int *) sp)[2];
- var24 = ((int *) sp)[1];
- var25 = ((int *) sp)[0];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x0000058C
- */
- void sceKernelDmaOpDeQueue (int arg1)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[1] = s1;
- var1 = arg1;
- ((int *) sp)[0] = s0;
- ((int *) sp)[2] = ra;
- var2 = 0x800202CF;
- var5 = sceKernelCpuSuspendIntr ();
- var6 = var5;
- if (var1 == 0x00000000)
- {
- label25:
- sceKernelCpuResumeIntr (var6);
- }
- else
- {
- var7 = ((unsigned short *) var1)[14];
- var2 = 0x800202C3;
- if ((var7 & 0x00001000) != 0x00000000)
- goto label25;
- var8 = ((unsigned short *) var1)[14];
- var2 = 0x800202C1;
- if ((var8 & 0x00000100) == 0x00000000)
- goto label25;
- var9 = ((unsigned short *) var1)[14];
- var2 = 0x800202C0;
- if ((var9 & 0x00000002) != 0x00000000)
- goto label25;
- var10 = ((unsigned short *) var1)[14];
- if ((var10 & 0x00000001) != 0x00000000)
- {
- var15 = ((int *) var1)[1];
- if (var15 == 0x00000000)
- {
- var17 = ((int *) var1)[0];
- }
- else
- {
- var16 = ((int *) var1)[0];
- ((int *) var15)[0] = var16;
- var17 = ((int *) var1)[0];
- }
- if (var17 != 0x00000000)
- {
- ((int *) var17)[1] = var15;
- }
- var18 = *((int *) 0x00004054);
- if (var18 == var1)
- {
- var24 = ((int *) var1)[1];
- *((int *) 0x00004054) = var24;
- }
- var19 = *((int *) 0x00004050);
- if (var19 == var1)
- {
- var23 = ((int *) var1)[0];
- *((int *) 0x00004050) = var23;
- }
- var20 = ((unsigned short *) var1)[14];
- ((int *) var1)[1] = 0x00000000;
- ((short *) var1)[14] = ((var20 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
- ((int *) var1)[0] = 0x00000000;
- sceKernelCpuResumeIntr (var6);
- }
- else
- {
- var2 = 0x800202BF;
- goto label25;
- }
- }
- ra = ((int *) sp)[2];
- var13 = ((int *) sp)[1];
- var14 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00000694
- */
- void sceKernelDmaOpAllCancel ()
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[1] = s1;
- ((int *) sp)[0] = s0;
- var1 = 0x800202BF;
- var2 = *((int *) 0x00004050);
- ((int *) sp)[2] = ra;
- if (!(var2 == 0x00000000))
- {
- var5 = sceKernelCpuSuspendIntr ();
- var6 = var5;
- var7 = 0x00002000;
- var8 = 0x00000000;
- var9 = *((int *) 0x00002000);
- while (1) {
- var8 = var8 + 0x00000001;
- var7 = var7 + 0x00000004;
- if (var9 != 0x00000000)
- break;
- if (((var8 < 0x00000010)) != 0x00000000)
- {
- var9 = ((int *) var7)[0];
- continue;
- }
- else
- {
- var10 = *((int *) 0x00004050);
- if (var10 == 0x00000000)
- {
- }
- else
- {
- while (1) {
- var11 = var10;
- var10 = ((int *) var10)[0];
- ((int *) var11)[1] = 0x00000000;
- ((int *) var11)[0] = 0x00000000;
- if (var10 != 0x00000000)
- continue;
- break;
- }
- }
- *((int *) 0x00004054) = 0x00000000;
- *((int *) 0x00004050) = 0x00000000;
- sceKernelCpuResumeIntr (var6);
- var1 = 0x00000000;
- }
- goto label19;
- }
- sceKernelCpuResumeIntr (var6);
- var1 = 0x800202C0;
- }
- label19:
- ra = ((int *) sp)[2];
- var14 = ((int *) sp)[1];
- var15 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00000750
- */
- void sceKernelDmaOpSetCallback (int arg1, int arg2, int arg3)
- {
- var1 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var2 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C3;
- if (!((var2 & 0x00001000) != 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C1;
- if (!((var3 & 0x00000100) == 0x00000000))
- {
- var4 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C0;
- if (!((var4 & 0x00000002) != 0x00000000))
- {
- var5 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C4;
- if (!((var5 & 0x00000070) != 0x00000000))
- {
- ((int *) arg1)[5] = arg3;
- var1 = 0x00000000;
- ((int *) arg1)[4] = arg2;
- }
- }
- }
- }
- }
- return;
- }
- /**
- * Subroutine at address 0x000007C0
- */
- void sceKernelDmaOpSetupMemcpy (int arg1, int arg2, int arg3, int arg4)
- {
- var1 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var2 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C3;
- if (!((var2 & 0x00001000) != 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C1;
- if (!((var3 & 0x00000100) == 0x00000000))
- {
- var4 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C0;
- if (!((var4 & 0x00000002) != 0x00000000))
- {
- var5 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C4;
- if (!((var5 & 0x00000070) != 0x00000000))
- {
- var1 = 0x800202CE;
- if (!(((arg4 < 0x00001000)) == 0x00000000))
- {
- ((int *) arg1)[8] = arg3;
- var1 = 0x00000000;
- ((int *) arg1)[9] = arg2;
- ((int *) arg1)[10] = 0x00000000;
- ((int *) arg1)[11] = (arg4 | 0x8C4BF000);
- var6 = ((int *) arg1)[12];
- ((int *) arg1)[12] = (var6 | 0x0000C001);
- }
- }
- }
- }
- }
- }
- return;
- }
- /**
- * Subroutine at address 0x00000860
- */
- void sceKernelDmaOpSetupNormal (int arg1, int arg2, int arg3, int arg4, int arg5)
- {
- var1 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var2 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C3;
- if (!((var2 & 0x00001000) != 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C1;
- if (!((var3 & 0x00000100) == 0x00000000))
- {
- var4 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C0;
- if (!((var4 & 0x00000002) != 0x00000000))
- {
- var5 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C4;
- if (!((var5 & 0x00000070) != 0x00000000))
- {
- ((int *) arg1)[8] = arg4;
- var1 = 0x00000000;
- ((int *) arg1)[9] = arg3;
- ((int *) arg1)[10] = 0x00000000;
- ((int *) arg1)[11] = (arg5 | 0x80000000);
- var6 = ((int *) arg1)[12];
- ((int *) arg1)[12] = ((var6 | arg2) | 0x0000C001);
- }
- }
- }
- }
- }
- return;
- }
- /**
- * Subroutine at address 0x000008F0
- */
- void sceKernelDmaOpSetupLink (int arg1, int arg2, int arg3)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[1] = s1;
- var1 = arg1;
- ((int *) sp)[2] = ra;
- var2 = 0x800202CF;
- ((int *) sp)[0] = s0;
- if (!(var1 == 0x00000000))
- {
- var3 = ((unsigned short *) var1)[14];
- var2 = 0x800202C3;
- if (!((var3 & 0x00001000) != 0x00000000))
- {
- var4 = ((unsigned short *) var1)[14];
- var2 = 0x800202C1;
- if (!((var4 & 0x00000100) == 0x00000000))
- {
- var5 = ((unsigned short *) var1)[14];
- var2 = 0x800202C0;
- if (!((var5 & 0x00000002) != 0x00000000))
- {
- var6 = ((unsigned short *) var1)[14];
- var2 = 0x800202C4;
- if (!((var6 & 0x00000070) != 0x00000000))
- {
- var7 = (0xA0000000 & 0xE0000000) | (((arg3 & 0xFFFFFFFC) | (0x00000000 & 0x00000003)) & 0x1FFFFFFF);
- var8 = ((int *) var7)[0];
- ((int *) var1)[14] = var7;
- ((int *) var1)[8] = var8;
- var9 = ((int *) var7)[1];
- ((int *) var1)[9] = var9;
- var10 = ((int *) var7)[2];
- ((int *) var1)[10] = var10;
- var11 = ((int *) var7)[3];
- ((int *) var1)[11] = var11;
- var12 = ((int *) var1)[12];
- var13 = var12 | arg2;
- var14 = var13 | 0x0000C001;
- ((int *) var1)[12] = var14;
- var15 = ((int *) var7)[2];
- if (var15 == 0x00000000)
- {
- }
- else
- {
- var16 = ((int *) var7)[2];
- while (1) {
- var7 = (0xA0000000 & 0xE0000000) | (var16 & 0x1FFFFFFF);
- var17 = ((int *) var7)[2];
- if (!(var17 != 0x00000000))
- break;
- var16 = ((int *) var7)[2];
- continue;
- }
- }
- var18 = ((int *) var7)[3];
- ((int *) var7)[3] = (var18 | 0x80000000);
- var19 = *((int *) 0x00004058);
- var22 var23 = (*var19) (0x00000004, var14, var13, var10, 0xA0000000, var17, var16, 0x00000000);
- ((int *) var1)[15] = var7;
- var2 = 0x00000000;
- }
- }
- }
- }
- }
- ra = ((int *) sp)[2];
- var24 = ((int *) sp)[1];
- var25 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00000A08
- */
- void sceKernelDmaOpSync (int arg1, int arg2, int arg3)
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[4] = s0;
- var1 = arg1;
- ((int *) sp)[5] = ra;
- var2 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var2 = 0x800202C3;
- if (!((var3 & 0x00001000) != 0x00000000))
- {
- var4 = ((unsigned short *) var1)[14];
- var2 = 0x800202C1;
- if (!((var4 & 0x00000100) == 0x00000000))
- {
- var5 = ((unsigned short *) var1)[14];
- var2 = 0x800202C6;
- if (!((var5 & 0x00000020) != 0x00000000))
- {
- if (arg2 == 0x00000001)
- {
- var18 = ((int *) var1)[6];
- var21 = sceKernelWaitEventFlag (var18, 0x00000006, 0x00000011, 0x00000000, 0x00000000);
- var2 = !(var21) ? 0x00000000 : 0x80020001;
- }
- else
- {
- if (((arg2 < 0x00000002)) != 0x00000000)
- {
- if (arg2 != 0x00000000)
- {
- label27:
- var2 = 0x80020001;
- }
- else
- {
- var14 = ((unsigned short *) var1)[14];
- var2 = 0x00000000;
- if (!((var14 & 0x00000040) != 0x00000000))
- {
- var15 = ((unsigned short *) var1)[14];
- var2 = 0x800202C7;
- if (!((var15 & 0x00000010) != 0x00000000))
- {
- var16 = ((unsigned short *) var1)[14];
- var2 = 0x800202BE;
- if (!((var16 & 0x00000001) != 0x00000000))
- {
- var17 = ((unsigned short *) var1)[14];
- var2 = !((var17 & 0x00000002)) ? 0x800202BF : 0x800202C0;
- }
- }
- }
- }
- }
- else
- {
- if (arg2 == 0x00000002)
- {
- var7 = ((int *) var1)[6];
- var8 = sp;
- ((int *) sp)[0] = arg3;
- var11 = sceKernelWaitEventFlag (var7, 0x00000006, 0x00000010, 0x00000000, var8);
- var2 = 0x00000000;
- if (!(var11 == 0x00000000))
- {
- if (var11 != 0x800201A8)
- goto label27;
- sub_00B68 (var1);
- var2 = 0x800202C2;
- }
- }
- else
- {
- goto label27;
- }
- }
- }
- }
- }
- }
- }
- ra = ((int *) sp)[5];
- var6 = ((int *) sp)[4];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x00000B68
- */
- void sub_00B68 (int arg1)
- {
- var1 = arg1;
- var2 = ((unsigned short *) arg1)[15];
- var3 = (char) var2;
- var4 = var3 & 0x00000007;
- var5 = var4 << 0x00000005;
- var6 = var3 >> 0x00000003;
- var7 = var5 + 0xBC900100;
- if (!(var6 == 0x00000000))
- {
- var7 = var5 + 0xBCA00100;
- }
- var8 = ((int *) var7)[4];
- ((int *) var7)[4] = ((var8 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
- while (1) {
- var9 = ((int *) var7)[4];
- if ((var9 & 0x00000001) != 0x00000000)
- continue;
- break;
- }
- var10 = *((int *) 0x00004048);
- var11 = (var6) ? 0xBCA00000 : 0xBC900000;
- var12 = 0x00000001 << var4;
- ((short *) var1)[14] = 0x00000020;
- *((int *) 0x00004048) = (var10 & (!(0x00000001 << var3)));
- ((short *) var1)[15] = 0xFFFFFFFF;
- ((int *) ((var3 << 0x00000002) + 0x00002000))[0] = 0x00000000;
- ((int *) var11)[2] = var12;
- ((int *) var11)[4] = var12;
- return;
- }
- /**
- * Subroutine at address 0x00000C0C
- */
- void sceKernelDmaOpQuit (int arg1)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- var1 = 0x00000000;
- ((int *) sp)[0] = s0;
- ((int *) sp)[3] = ra;
- var2 = arg1;
- var5 = sceKernelCpuSuspendIntr ();
- if (var2 == 0x00000000)
- {
- var1 = 0x800202CF;
- }
- else
- {
- var6 = ((unsigned short *) var2)[14];
- if ((var6 & 0x00001000) == 0x00000000)
- {
- var12 = ((unsigned short *) var2)[14];
- if ((var12 & 0x00000100) != 0x00000000)
- {
- var13 = ((unsigned short *) var2)[14];
- if ((var13 & 0x00000040) == 0x00000000)
- {
- var14 = ((unsigned short *) var2)[14];
- if ((var14 & 0x00000001) == 0x00000000)
- {
- var15 = ((unsigned short *) var2)[14];
- if ((var15 & 0x00000010) == 0x00000000)
- {
- var16 = ((unsigned short *) var2)[14];
- if ((var16 & 0x00000020) == 0x00000000)
- {
- var17 = ((unsigned short *) var2)[14];
- if ((var17 & 0x00000002) != 0x00000000)
- {
- sub_00B68 (var2);
- }
- else
- {
- var1 = 0x80020001;
- }
- }
- else
- {
- var1 = 0x800202C6;
- }
- }
- else
- {
- var1 = 0x800202C7;
- }
- }
- else
- {
- var1 = 0x800202BE;
- }
- }
- else
- {
- var1 = 0x800202BF;
- }
- }
- else
- {
- var1 = 0x800202C1;
- }
- }
- else
- {
- var1 = 0x800202C3;
- }
- }
- sceKernelCpuResumeIntrWithSync (var5);
- ra = ((int *) sp)[3];
- var9 = ((int *) sp)[2];
- var10 = ((int *) sp)[1];
- var11 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00000D1C
- */
- void DmacManForKernel_E18A93A5 (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[2] = s2;
- var1 = arg2;
- ((int *) sp)[1] = s1;
- var2 = arg1;
- ((int *) sp)[5] = ra;
- ((int *) sp)[4] = s4;
- ((int *) sp)[3] = s3;
- ((int *) sp)[0] = s0;
- if (!(arg1 == 0x00000000))
- {
- var3 = (0xA0000000 & 0xE0000000) | (arg2 & 0x1FFFFFFF);
- var4 = ((int *) var3)[2];
- if (var4 == 0x00000000)
- {
- var7 = ((int *) var3)[3];
- }
- else
- {
- var5 = ((int *) var3)[2];
- while (1) {
- var3 = (0xA0000000 & 0xE0000000) | (var5 & 0x1FFFFFFF);
- var6 = ((int *) var3)[2];
- if (!(var6 != 0x00000000))
- break;
- var5 = ((int *) var3)[2];
- continue;
- }
- var7 = ((int *) var3)[3];
- }
- ((int *) var3)[3] = (var7 | 0x80000000);
- var10 = sceKernelCpuSuspendIntr ();
- var11 = ((unsigned short *) var2)[14];
- var12 = var11 & 0x0000FFFF;
- if ((var12 & 0x00001170) != 0x00000100)
- {
- sceKernelCpuResumeIntr (var10);
- }
- else
- {
- var13 = 0x00000000;
- if ((var12 & 0x00000002) == 0x00000000)
- {
- if ((var12 & 0x00000001) != 0x00000000)
- {
- var42 = ((int *) var2)[15];
- ((int *) var2)[15] = var3;
- ((int *) var42)[2] = var1;
- }
- else
- {
- var13 = 0x80020001;
- }
- }
- else
- {
- var14 = ((unsigned short *) var2)[15];
- var15 = ((unsigned short *) var2)[15];
- var16 = (var14 & 0x00000007) << 0x00000005;
- var17 = var16 + 0xBC900100;
- if (!((((char) var15) >> 0x00000003) == 0x00000000))
- {
- var17 = var16 + 0xBCA00100;
- }
- var18 = ((int *) var17)[4];
- var19 = var18 | 0x00040000;
- ((int *) var17)[4] = var19;
- var20 = ((int *) var17)[2];
- if (var20 == 0x00000000)
- {
- var36 = var19 & 0x01003800;
- if (((((var36 ^ 0x01000000) < 0x00000001)) | (((var36 ^ 0x01001000) < 0x00000001))) != 0x00000000)
- {
- label26:
- var13 = 0x800202BC;
- }
- else
- {
- if (var36 == 0x01003000)
- {
- goto label26;
- }
- else
- {
- while (1) {
- var37 = ((int *) var17)[4];
- if ((var37 & 0x00020000) != 0x00000000)
- continue;
- break;
- }
- var38 = ((int *) var17)[3];
- if ((var38 & 0x00000FFF) == 0x00000000)
- {
- var13 = 0x800202C4;
- }
- else
- {
- var39 = ((int *) var17)[4];
- ((int *) var17)[4] = ((var39 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
- while (1) {
- var40 = ((int *) var17)[4];
- if ((var40 & 0x00000001) != 0x00000000)
- continue;
- break;
- }
- ((int *) var17)[2] = var1;
- var41 = ((int *) var17)[4];
- ((int *) var2)[15] = var3;
- ((int *) var17)[4] = (var41 | 0x00000001);
- }
- }
- }
- }
- else
- {
- var21 = ((int *) var2)[15];
- ((int *) var2)[15] = var3;
- ((int *) var21)[2] = var1;
- }
- var22 = ((int *) var17)[4];
- var23 = (var22 & 0xFFFBFFFF) | (0x00000000 & 0x00000001);
- ((int *) var17)[4] = var23;
- }
- var24 = *((int *) 0x00004058);
- var27 var28 = (*var24) (0x00000004, var19, var21, var23, var14, 0x00000000, var20, 0x00040000);
- sceKernelCpuResumeIntrWithSync (var10);
- }
- }
- ra = ((int *) sp)[5];
- var31 = ((int *) sp)[4];
- var32 = ((int *) sp)[3];
- var33 = ((int *) sp)[2];
- var34 = ((int *) sp)[1];
- var35 = ((int *) sp)[0];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x00000F5C
- */
- void sceKernelDmaOpAssignMultiple (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[2] = s2;
- var1 = arg2;
- ((int *) sp)[1] = s1;
- var2 = arg1;
- ((int *) sp)[3] = ra;
- ((int *) sp)[0] = s0;
- if ((((arg2 + 0xFFFFFFFE) < 0x0000000F)) == 0x00000000)
- {
- label25:
- var7 = 0x800202BD;
- }
- else
- {
- var3 = ((int *) arg1)[0];
- var4 = 0x00000000;
- var5 = ((unsigned short *) var3)[26];
- while (1) {
- var4 = var4 + 0x00000001;
- arg2 = arg2 - ((var5 >> var4) & 0x00000001);
- if (((var4 < 0x00000010)) != 0x00000000)
- continue;
- break;
- }
- var6 = var1 + 0xFFFFFFFF;
- if (!(arg2 >= 0))
- goto label25;
- var11 = 0x00000000;
- if (var6 == 0x00000000)
- {
- label16:
- var21 = sceKernelCpuSuspendIntr ();
- var22 = 0x00000000;
- if (var6 == 0x00000000)
- {
- var30 = ((int *) var2)[0];
- }
- else
- {
- var23 = var2;
- while (1) {
- var24 = ((int *) var23)[0];
- var25 = ((int *) var23)[1];
- var22 = var22 + 0x00000001;
- ((int *) var24)[3] = var25;
- var26 = ((int *) var23)[1];
- var27 = ((int *) var23)[0];
- ((int *) var26)[2] = var27;
- var28 = ((int *) var23)[0];
- ((int *) var28)[0] = 0x00000000;
- var29 = ((int *) var23)[0];
- ((int *) var29)[1] = 0x00000000;
- var30 = ((int *) var2)[0];
- var31 = ((int *) var23)[1];
- var23 = var23 + 0x00000004;
- var32 = ((unsigned short *) var30)[26];
- ((short *) var31)[26] = var32;
- if (((var22 < var6)) != 0x00000000)
- continue;
- break;
- }
- }
- ((short *) var30)[27] = var1;
- sceKernelCpuResumeIntr (var21);
- var7 = 0x00000000;
- }
- else
- {
- var12 = var2;
- var13 = ((int *) var12)[0];
- while (1) {
- var11 = var11 + 0x00000001;
- var12 = var12 + 0x00000004;
- var7 = 0x800202CF;
- if (var13 == 0x00000000)
- break;
- var14 = ((unsigned short *) var13)[14];
- var7 = 0x800202C3;
- if ((var14 & 0x00001000) != 0x00000000)
- break;
- var15 = ((unsigned short *) var13)[14];
- var7 = 0x800202C1;
- if ((var15 & 0x00000100) == 0x00000000)
- break;
- var16 = ((unsigned short *) var13)[14];
- var7 = 0x800202BE;
- if ((var16 & 0x00000001) != 0x00000000)
- break;
- var17 = ((unsigned short *) var13)[14];
- var7 = 0x800202C0;
- if ((var17 & 0x00000002) != 0x00000000)
- break;
- var18 = ((unsigned short *) var13)[14];
- var7 = 0x800202C4;
- if ((var18 & 0x00000070) != 0x00000000)
- break;
- if (!(((var11 < var6)) != 0x00000000))
- goto label16;
- var13 = ((int *) var12)[0];
- continue;
- }
- }
- }
- ra = ((int *) sp)[3];
- var8 = ((int *) sp)[2];
- var9 = ((int *) sp)[1];
- var10 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x000010E4
- */
- void sub_010E4 (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFC0;
- ((int *) sp)[12] = fp;
- ((int *) sp)[11] = s7;
- ((int *) sp)[10] = s6;
- var1 = arg2;
- ((int *) sp)[9] = s5;
- ((int *) sp)[6] = s2;
- var2 = 0x00000000;
- ((int *) sp)[13] = ra;
- ((int *) sp)[8] = s4;
- ((int *) sp)[7] = s3;
- ((int *) sp)[5] = s1;
- ((int *) sp)[4] = s0;
- var5 = sceKernelCpuSuspendIntr ();
- ((int *) sp)[0] = var5;
- var6 = (var1) ? 0xBCA00000 : 0xBC900000;
- var7 = ((int *) var6)[1];
- var8 = ((int *) var6)[3];
- ((int *) sp)[1] = var7;
- var9 = (var8 | var7) & 0x000000FF;
- label5:
- while (1) {
- var10 = 0x00000001 << var2;
- if ((var9 & var10) != 0x00000000)
- {
- var42 = (var1 << 0x00000003) + var2;
- var43 = var42 << 0x00000002;
- var44 = ((int *) (var43 + 0x00002000))[0];
- if (var44 == 0x00000000)
- {
- var86 = *((int *) 0x00004040);
- if ((var86 & (0x00000001 << var42)) != 0x00000000)
- {
- var2 = var2 + 0x00000001;
- continue;
- }
- else
- {
- Kprintf ("Fatal error: Stray interrupt occurred\n");
- var2 = var2 + 0x00000001;
- continue;
- }
- }
- else
- {
- var45 = var2 << 0x00000005;
- var46 = var45 + 0xBC900100;
- if (!(var1 == 0x00000000))
- {
- var46 = var45 + 0xBCA00100;
- }
- var47 = ((int *) var46)[0];
- var48 = ((int *) sp)[1];
- ((int *) var44)[8] = var47;
- var49 = ((int *) var46)[1];
- ((int *) var44)[9] = var49;
- var50 = ((int *) var46)[2];
- ((int *) var44)[10] = var50;
- var51 = ((int *) var46)[3];
- ((int *) var44)[11] = var51;
- var52 = ((int *) var46)[4];
- ((int *) var44)[12] = var52;
- if ((var48 & var10) == 0x00000000)
- {
- var76 = ((int *) var46)[2];
- if (!(var76 == 0x00000000))
- {
- var77 = ((int *) var46)[4];
- if ((var77 & 0x00000001) != 0x00000000)
- {
- sub_00B68 (var44);
- }
- }
- var78 = ((unsigned short *) var44)[14];
- var79 = *((int *) 0x00004048);
- ((short *) var44)[14] = (var78 | 0x00000010);
- *((int *) 0x00004048) = (var79 & (!(0x00000001 << var42)));
- var80 = ((unsigned short *) var44)[14];
- var81 = ((int *) var44)[6];
- ((int *) (var43 + 0x00002000))[0] = 0x00000000;
- ((short *) var44)[14] = ((var80 & 0xFFFFFFFD) | (0x00000000 & 0x00000001));
- ((short *) var44)[15] = 0xFFFFFFFF;
- if (!(var81 <= 0))
- {
- sceKernelSetEventFlag (var81, 0x00000004);
- }
- ((int *) ((var1) ? 0xBCA00000 : 0xBC900000))[4] = var10;
- var61 = 0xFFFFFFFF;
- }
- else
- {
- var53 = ((int *) var46)[2];
- if (var53 != 0x00000000)
- {
- }
- else
- {
- var54 = ((int *) var46)[4];
- if (!((var54 & 0x00000001) != 0x00000000))
- {
- var55 = *((int *) 0x00004048);
- *((int *) 0x00004048) = (var55 & (!(0x00000001 << var42)));
- var56 = ((unsigned short *) var44)[14];
- var57 = ((int *) var44)[6];
- ((int *) (var43 + 0x00002000))[0] = 0x00000000;
- ((short *) var44)[14] = (((var56 | 0x00000040) & 0xFFFFFFFD) | (0x00000000 & 0x00000001));
- ((short *) var44)[15] = 0xFFFFFFFF;
- if (!(var57 <= 0))
- {
- sceKernelSetEventFlag (var57, 0x00000002);
- }
- }
- }
- var60 = (var1) ? 0xBCA00000 : 0xBC900000;
- ((int *) var60)[2] = var10;
- var61 = 0x00000000;
- }
- var62 = ((int *) var44)[4];
- if (var62 == 0x00000000)
- {
- label69:
- var2 = var2 + 0x00000001;
- continue;
- }
- else
- {
- var63 = ((int *) var44)[5];
- var66 var67 = (*var62) (var44, var61, var42, var63);
- if (var66 != 0x00000001)
- {
- var2 = var2 + 0x00000001;
- continue;
- }
- else
- {
- var68 = ((int *) var44)[14];
- if (!(var68 == 0x00000000))
- {
- var69 = ((int *) var68)[2];
- ((int *) var44)[10] = var69;
- var70 = ((int *) var68)[0];
- ((int *) var44)[8] = var70;
- var71 = ((int *) var68)[1];
- ((int *) var44)[9] = var71;
- var72 = ((int *) var68)[3];
- ((int *) var44)[11] = var72;
- }
- var73 = *((int *) 0x00004050);
- if (var73 == 0x00000000)
- {
- *((int *) 0x00004050) = var44;
- }
- ((int *) var44)[0] = 0x00000000;
- var74 = *((int *) 0x00004054);
- ((int *) var44)[1] = var74;
- if (!(var74 == 0x00000000))
- {
- ((int *) var74)[0] = var44;
- }
- var75 = ((unsigned short *) var44)[14];
- *((int *) 0x00004054) = var44;
- ((short *) var44)[14] = (var75 | 0x00000001);
- var2 = var2 + 0x00000001;
- continue;
- }
- }
- }
- goto label5;
- }
- if (((var9 < var10)) != 0x00000000)
- break;
- goto label69;
- }
- var11 = *((int *) 0x00004050);
- if (var11 == 0x00000000)
- {
- sub_01490 ();
- var12 = *((int *) 0x00004048);
- }
- else
- {
- var12 = *((int *) 0x00004048);
- }
- var13 = *((int *) 0x00004040);
- var14 = var13 | var12;
- if ((var14 & 0x000000FF) == 0x00000000)
- {
- var36 = sceKernelCpuSuspendIntr ();
- var37 = *((int *) 0xBC100050);
- *((int *) 0xBC100050) = ((var37 & 0xFFFFFFDF) | (0x00000000 & 0x00000001));
- var15 = var14 & 0x0000FF00;
- sceKernelCpuResumeIntr (var36);
- }
- else
- {
- var15 = var14 & 0x0000FF00;
- }
- if (var15 == 0x00000000)
- {
- var30 = sceKernelCpuSuspendIntr ();
- var31 = *((int *) 0xBC100050);
- *((int *) 0xBC100050) = ((var31 & 0xFFFFFFBF) | (0x00000000 & 0x00000001));
- sceKernelCpuResumeIntr (var30);
- }
- var16 = ((int *) sp)[0];
- sceKernelCpuResumeIntr (var16);
- ra = ((int *) sp)[13];
- var19 = ((int *) sp)[12];
- var20 = ((int *) sp)[11];
- var21 = ((int *) sp)[10];
- var22 = ((int *) sp)[9];
- var23 = ((int *) sp)[8];
- var24 = ((int *) sp)[7];
- var25 = ((int *) sp)[6];
- var26 = ((int *) sp)[5];
- var27 = ((int *) sp)[4];
- sp = sp + 0x00000040;
- return;
- }
- /**
- * Subroutine at address 0x00001490
- */
- void sub_01490 ()
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- ((int *) sp)[0] = s0;
- var1 = *((int *) 0x00004040);
- var2 = *((int *) 0x00004048);
- var3 = *((int *) 0x00004050);
- var4 = var1 | var2;
- var5 = var4 ^ 0x0000FFFF;
- if ((((0x00000000 < var3)) & ((0x00000000 < var5))) == 0x00000000)
- {
- label53:
- }
- else
- {
- var6 = ((int *) var3)[3];
- while (1) {
- if (var6 == 0x00000000)
- {
- label16:
- var26 = var3;
- while (1) {
- var27 = ((unsigned short *) var26)[15];
- var28 = (char) var27;
- if (var28 < 0)
- {
- var55 = ((unsigned short *) var26)[26];
- var28 = CLZ ((BITREV ((var55 & (!var4)))));
- if (((var28 < 0x00000010)) == 0x00000000)
- break;
- ((int *) ((var28 << 0x00000002) + 0x00002000))[0] = var26;
- var4 = var4 | (0x00000001 << var28);
- ((short *) var26)[15] = var28;
- label21:
- var29 = *((int *) 0xBC100050);
- var30 = var28 >> 0x00000003;
- var31 = 0x00000020 << var30;
- if ((var29 & var31) != 0x00000000)
- {
- var36 = var28 & 0x00000007;
- }
- else
- {
- *((int *) 0xBC100050) = (var29 | var31);
- var32 = (var30) ? 0xBCA00000 : 0xBC900000;
- var33 = ((int *) var32)[12];
- var34 = var32;
- var35 = 0x00000007;
- ((int *) var32)[12] = (var33 | 0x00000001);
- ((int *) var32)[13] = 0x00000000;
- while (1) {
- var35 = var35 + 0xFFFFFFFF;
- ((int *) var34)[64] = 0x00000000;
- ((int *) var34)[65] = 0x00000000;
- ((int *) var34)[66] = 0x00000000;
- ((int *) var34)[67] = 0x00000000;
- ((int *) var34)[68] = 0x00000000;
- var34 = var34 + 0x00000020;
- if (var35 >= 0)
- continue;
- break;
- }
- ((int *) var32)[2] = 0x000000FF;
- ((int *) var32)[4] = 0x000000FF;
- var36 = var28 & 0x00000007;
- }
- var37 = var36 << 0x00000005;
- var38 = ((int *) var26)[8];
- var39 = (var30) ? (var37 + 0xBCA00100) : (var37 + 0xBC900100);
- ((int *) var39)[0] = var38;
- var40 = ((int *) var26)[9];
- var41 = ((int *) var26)[2];
- ((int *) var39)[1] = var40;
- var42 = ((int *) var26)[10];
- ((int *) var39)[2] = var42;
- var43 = ((int *) var26)[11];
- ((int *) var39)[3] = var43;
- var44 = ((unsigned short *) var26)[14];
- ((short *) var26)[14] = (var44 | 0x00000002);
- var45 = ((int *) var26)[12];
- ((int *) var39)[4] = var45;
- if (var41 != 0x00000000)
- {
- var26 = ((int *) var26)[3];
- }
- else
- {
- var46 = ((unsigned short *) var26)[14];
- var47 = *((int *) 0x00004054);
- ((short *) var26)[14] = ((var46 & 0xFFFFFFFE) | (0x00000000 & 0x00000001));
- if (var47 == var26)
- {
- var54 = ((int *) var26)[1];
- *((int *) 0x00004054) = var54;
- }
- var48 = *((int *) 0x00004050);
- if (var48 == var26)
- {
- var53 = ((int *) var26)[0];
- *((int *) 0x00004050) = var53;
- }
- var49 = ((int *) var26)[1];
- if (var49 == 0x00000000)
- {
- var51 = ((int *) var26)[0];
- }
- else
- {
- var50 = ((int *) var26)[0];
- ((int *) var26)[1] = 0x00000000;
- ((int *) var49)[0] = var50;
- var51 = ((int *) var26)[0];
- }
- if (var51 == 0x00000000)
- {
- var26 = ((int *) var26)[3];
- }
- else
- {
- var52 = ((int *) var26)[1];
- ((int *) var26)[0] = 0x00000000;
- ((int *) var51)[1] = var52;
- var26 = ((int *) var26)[3];
- }
- }
- if (var26 != 0x00000000)
- continue;
- break;
- }
- else
- goto label21;
- }
- var3 = ((int *) var3)[0];
- var5 = var4 ^ 0x0000FFFF;
- label51:
- if (!((((0x00000000 < var3)) & ((0x00000000 < var5))) != 0x00000000))
- break;
- var6 = ((int *) var3)[3];
- continue;
- }
- else
- {
- var7 = ((int *) var3)[2];
- if (var7 != 0x00000000)
- {
- goto label16;
- }
- else
- {
- var8 = ((unsigned short *) var3)[26];
- var9 = ((unsigned short *) var3)[27];
- var10 = var8 & (!var4);
- var11 = 0x00000000;
- while (1) {
- var11 = var11 + 0x00000001;
- var9 = var9 - ((var10 >> var11) & 0x00000001);
- if (((var11 < 0x00000010)) != 0x00000000)
- continue;
- break;
- }
- var12 = var3;
- if (var9 >= 0)
- {
- var23 = 0x00001FFC;
- var24 = 0x00000000;
- while (1) {
- var25 = 0x00000001 << var24;
- var23 = var23 + 0x00000004;
- if ((var10 & var25) != 0x00000000)
- {
- ((int *) var23)[0] = var12;
- var4 = var4 | var25;
- ((short *) var12)[15] = var24;
- var12 = ((int *) var12)[3];
- }
- var24 = var24 + 0x00000001;
- if (var12 != 0x00000000)
- continue;
- break;
- }
- goto label16;
- }
- else
- {
- var13 = ((int *) var3)[0];
- if (var13 == 0x00000000)
- {
- }
- else
- {
- var14 = ((int *) var3)[1];
- var15 = ((int *) var13)[0];
- ((int *) var13)[1] = var14;
- ((int *) var3)[1] = var13;
- var16 = ((int *) var13)[1];
- ((int *) var3)[0] = var15;
- if (var16 == 0x00000000)
- {
- *((int *) 0x00004050) = var13;
- }
- else
- {
- ((int *) var16)[0] = var13;
- }
- var17 = ((int *) var13)[0];
- if (var17 == 0x00000000)
- {
- *((int *) 0x00004054) = var3;
- }
- else
- {
- var18 = ((int *) var3)[0];
- ((int *) var18)[1] = var3;
- }
- ((int *) var13)[0] = var3;
- var3 = var13;
- goto label51;
- }
- }
- }
- }
- goto label54;
- }
- goto label53;
- }
- label54:
- var19 = *((int *) 0x00004040);
- var20 = ((int *) sp)[2];
- var21 = ((int *) sp)[1];
- var22 = ((int *) sp)[0];
- *((int *) 0x00004048) = (var4 & (!var19));
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x000017A0
- */
- void sceKernelDmaChExclude (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFE0;
- ((int *) sp)[0] = s0;
- var1 = arg1;
- ((int *) sp)[1] = s1;
- var2 = 0x00000001 << var1;
- ((int *) sp)[2] = s2;
- ((int *) sp)[4] = ra;
- ((int *) sp)[3] = s3;
- if (!(((var1 < 0x00000010)) == 0x00000000))
- {
- var5 = sceKernelCpuSuspendIntr ();
- var6 = var5;
- var7 = *((int *) 0x00004044);
- if ((var7 & var2) != 0x00000000)
- {
- sceKernelCpuResumeIntr (var6);
- }
- else
- {
- if (arg2 != 0x00000000)
- {
- var15 = *((int *) 0x00004040);
- *((int *) 0x00004040) = (var15 | var2);
- sub_01C20 ((var1 >> 0x00000003));
- }
- else
- {
- var8 = *((int *) 0x00004040);
- *((int *) 0x00004040) = (var8 & (!var2));
- }
- sceKernelCpuResumeIntr (var6);
- }
- }
- ra = ((int *) sp)[4];
- var11 = ((int *) sp)[3];
- var12 = ((int *) sp)[2];
- var13 = ((int *) sp)[1];
- var14 = ((int *) sp)[0];
- sp = sp + 0x00000020;
- return;
- }
- /**
- * Subroutine at address 0x00001868
- */
- void sceKernelDmaChReserve (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[1] = s1;
- ((int *) sp)[0] = s0;
- ((int *) sp)[2] = ra;
- var3 = sceKernelCpuSuspendIntr ();
- var4 = *((int *) 0x00004040);
- var5 = 0x00000001 << arg1;
- if ((var4 & var5) != 0x00000000)
- {
- sceKernelCpuResumeIntr (var3);
- }
- else
- {
- if (arg2 < 0)
- {
- var12 = *((int *) 0x00004044);
- var7 = var12 & (!var5);
- }
- else
- {
- var6 = *((int *) 0x00004044);
- var7 = var6 | var5;
- }
- *((int *) 0x00004044) = var7;
- sceKernelCpuResumeIntr (var3);
- }
- ra = ((int *) sp)[2];
- var10 = ((int *) sp)[1];
- var11 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00001900
- */
- void sceKernelDmaOpAlloc ()
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- ((int *) sp)[0] = s0;
- ((int *) sp)[3] = ra;
- var3 = sceKernelCpuSuspendIntr ();
- var4 = *((int *) 0x0000404C);
- var5 = var3;
- if (var4 == 0x00000000)
- {
- label7:
- sceKernelCpuResumeIntr (var5);
- }
- else
- {
- var6 = ((unsigned short *) var4)[14];
- if ((var6 & 0x00001000) == 0x00000000)
- {
- goto label7;
- }
- else
- {
- ((short *) var4)[26] = 0xFFFFFFFF;
- ((short *) var4)[14] = 0x00000000;
- ((int *) var4)[4] = 0x00000000;
- ((short *) var4)[15] = 0xFFFFFFFF;
- var9 = sceKernelCreateEventFlag ("SceDmacmanEvflag");
- var10 = ((int *) var4)[0];
- ((int *) var4)[6] = var9;
- *((int *) 0x0000404C) = var10;
- ((int *) var4)[3] = 0x00000000;
- ((int *) var4)[2] = 0x00000000;
- sceKernelCpuResumeIntr (var5);
- }
- }
- ra = ((int *) sp)[3];
- var13 = ((int *) sp)[2];
- var14 = ((int *) sp)[1];
- var15 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x000019B8
- */
- void sceKernelDmaOpAssign (int arg1, int arg2, int arg3, int arg4)
- {
- var1 = arg1;
- var2 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var2 = 0x800202C3;
- if (!((var3 & 0x00001000) != 0x00000000))
- {
- var4 = ((unsigned short *) var1)[14];
- var2 = 0x800202BE;
- if (!((var4 & 0x00000001) != 0x00000000))
- {
- var5 = ((unsigned short *) var1)[14];
- var2 = 0x800202C0;
- if (!((var5 & 0x00000002) != 0x00000000))
- {
- ((int *) var1)[12] = arg4;
- var2 = 0x00000000;
- ((short *) var1)[26] = (((arg3 & 0x000000FF) << 0x00000008) | (arg2 & 0x000000FF));
- ((short *) var1)[14] = 0x00000100;
- }
- }
- }
- }
- return;
- }
- /**
- * Subroutine at address 0x00001A30
- */
- void DmacManForKernel_1FC036B7 (int arg1, int arg2)
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[1] = s1;
- var1 = arg1;
- ((int *) sp)[0] = s0;
- ((int *) sp)[2] = ra;
- var2 = ((int *) arg1)[15];
- var3 = *((int *) 0x00004058);
- ((int *) var2)[2] = arg2;
- var6 var7 = (*var3) (0x00000004, arg2, 0x00000000, arg4, arg5, arg6, arg7, arg8);
- var8 = (0xA0000000 & 0xE0000000) | (arg2 & 0x1FFFFFFF);
- var9 = ((int *) var8)[2];
- if (var9 == 0x00000000)
- {
- ((int *) var1)[15] = var8;
- }
- else
- {
- var10 = ((int *) var8)[2];
- while (1) {
- var11 = (0xA0000000 & 0xE0000000) | (var10 & 0x1FFFFFFF);
- var12 = ((int *) var11)[2];
- if (!(var12 != 0x00000000))
- break;
- var10 = ((int *) var11)[2];
- continue;
- }
- ((int *) var1)[15] = var11;
- }
- ra = ((int *) sp)[2];
- var13 = ((int *) sp)[1];
- var14 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00001AAC
- */
- void sceKernelDmaOnDebugMode ()
- {
- return;
- }
- /**
- * Subroutine at address 0x00001AB4
- */
- void sceKernelDmaOpFreeLink (int arg1)
- {
- var1 = 0x800202CF;
- if (!(arg1 == 0x00000000))
- {
- var2 = ((unsigned short *) arg1)[14];
- var1 = 0x800202C3;
- if (!((var2 & 0x00001000) != 0x00000000))
- {
- var3 = ((unsigned short *) arg1)[14];
- var1 = ((var3 & 0x00000100)) ? 0x00000000 : 0x800202C1;
- }
- }
- return;
- }
- /**
- * Subroutine at address 0x00001AF0
- */
- void sub_01AF0 ()
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[3] = ra;
- ((int *) sp)[2] = s2;
- ((int *) sp)[1] = s1;
- var1 = 0x00002000;
- ((int *) sp)[0] = s0;
- var2 = 0x0000000F;
- var3 = *((int *) 0x00002000);
- while (1) {
- var2 = var2 + 0xFFFFFFFF;
- var1 = var1 + 0x00000004;
- if (var3 != 0x00000000)
- {
- sub_00B68 (var3);
- }
- if (!(var2 >= 0))
- break;
- var3 = ((int *) var1)[0];
- continue;
- }
- *((int *) 0x00004048) = 0x00000000;
- var4 = 0x00000000;
- sceKernelDmaOpAllCancel ();
- while (1) {
- var4 = var4 + 0x00000001;
- sceKernelDisableIntr (0x00000016);
- if (((var4 < 0x00000002)) != 0x00000000)
- continue;
- break;
- }
- ra = ((int *) sp)[3];
- var9 = ((int *) sp)[2];
- var10 = ((int *) sp)[1];
- var11 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00001B80
- */
- void sub_01B80 ()
- {
- sp = sp + 0xFFFFFFF0;
- ((int *) sp)[0] = s0;
- ((int *) sp)[1] = ra;
- var1 = *((int *) 0x00004040);
- if ((var1 & 0x0000FF00) != 0x00000000)
- {
- sub_01C20 (0x00000001);
- var1 = *((int *) 0x00004040);
- }
- if ((var1 & 0x000000FF) != 0x00000000)
- {
- sub_01C20 (0x00000000);
- }
- else
- {
- }
- while (1) {
- var2 = var2 + 0x00000001;
- var5 = sceKernelEnableIntr (0x00000016);
- if (((var2 < 0x00000002)) != 0x00000000)
- continue;
- break;
- }
- ra = ((int *) sp)[1];
- var6 = ((int *) sp)[0];
- sp = sp + 0x00000010;
- return;
- }
- /**
- * Subroutine at address 0x00001C00
- */
- void sub_01C00 ()
- {
- __asm__ ("sync;");
- var1 = ra >> 0x0000001F;
- var2 = ((var1 + 0x00000002) << 0x0000001D) | ra;
- var3 = ((int *) var2)[0];
- return;
- }
- /**
- * Subroutine at address 0x00001C20
- */
- void sub_01C20 (int arg1)
- {
- var1 = *((int *) 0xBC100050);
- var2 = 0x00000020 << arg1;
- if (!((var1 & var2) != 0x00000000))
- {
- *((int *) 0xBC100050) = (var1 | var2);
- var3 = (arg1) ? 0xBCA00000 : 0xBC900000;
- var4 = ((int *) var3)[12];
- var5 = var3;
- var6 = 0x00000007;
- ((int *) var3)[12] = (var4 | 0x00000001);
- ((int *) var3)[13] = 0x00000000;
- while (1) {
- var6 = var6 + 0xFFFFFFFF;
- ((int *) var5)[64] = 0x00000000;
- ((int *) var5)[65] = 0x00000000;
- ((int *) var5)[66] = 0x00000000;
- ((int *) var5)[67] = 0x00000000;
- ((int *) var5)[68] = 0x00000000;
- var5 = var5 + 0x00000020;
- if (var6 >= 0)
- continue;
- break;
- }
- ((int *) var3)[2] = 0x000000FF;
- ((int *) var3)[4] = 0x000000FF;
- }
- return;
- }
Add Comment
Please, Sign In to add comment