int sub_16389() { volatile int *hwAddress = (int*)0xbfc00700; *hwAddress = -1; int* meTable = (int*)0xbfc00600; meTable[0] = 399;//copy sceKernelGetMEeDramSaveSize() bytes on me main memory to sceKernelGetMEeDramSaveAddr() then halt me meTable[2] = sceKernelGetMEeDramSaveAddr(); meTable[3] = sceKernelGetMEeDramSaveSize(); meTable[4] = 0; meTable[5] = 0; meTable[6] = 0; meTable[7] = 0; meTable[8] = 0; meTable[9] = 0; sceDdrFlush(5); sceSysregInterruptToOther(); while (*hwAddress != -2) ; sceDdrFlush(8); sceSysregMeResetEnable(); sceSysregMeBusClockDisable(); *(int*)0xbfc00718 = *(int*)0xbc100070 & 4; sceKernelClearEventFlag(meRpc.event, 0); return 0; }
void KillME(volatile struct me_struct *mei, int devkitVersion) { unsigned int k1; k1 = pspSdkSetK1(0); if (mei == 0) { pspSdkSetK1(k1); return; } mei->init = 0; if (devkitVersion == 0x03070110){ sceSysregVmeResetEnable371(); sceSysregAvcResetEnable371(); sceSysregMeResetEnable371(); sceSysregMeBusClockDisable371(); } else{ sceSysregVmeResetEnable(); sceSysregAvcResetEnable(); sceSysregMeResetEnable(); sceSysregMeBusClockDisable(); } pspSdkSetK1(k1); }