void psxReset() { psxCpu->Reset(); psxMemReset(); memset(&psxRegs, 0, sizeof(psxRegs)); psxRegs.pc = 0xbfc00000; // Start in bootstrap psxRegs.CP0.r[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1 psxRegs.CP0.r[15] = 0x00000002; // PRevID = Revision ID, same as R3000A psxHwReset(); psxBiosInit(); }
void psxReset() { psxCpu->Reset(); printf("Reset\n"); psxMemReset(); printf("psxMemReset\n"); memset(&psxRegs, 0, sizeof(psxRegs)); psxRegs.pc = 0xbfc00000; // Start in bootstrap psxRegs.CP0.r[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1 psxRegs.CP0.r[15] = 0x00000002; // PRevID = Revision ID, same as R3000A printf("psxHwReset\n"); psxHwReset(); psxBiosInit(); printf("psxBiosInit\n"); if (!Config.HLE){ printf("psxExecuteBios\n"); psxExecuteBios(); printf("psxExecuteBios Ok\n"); } #ifdef EMU_LOG EMU_LOG("*BIOS END*\n"); #endif Log = 0; }
int LoadState(const char *file) { void *f; GPUFreeze_t *gpufP; SPUFreeze_t *spufP; int Size; char header[32]; u32 version; boolean hle; f = SaveFuncs.open(file, "rb"); if (f == NULL) return -1; SaveFuncs.read(f, header, sizeof(header)); SaveFuncs.read(f, &version, sizeof(u32)); SaveFuncs.read(f, &hle, sizeof(boolean)); if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion) { SaveFuncs.close(f); return -1; } Config.HLE = hle; if (Config.HLE) psxBiosInit(); psxCpu->Reset(); SaveFuncs.seek(f, 128 * 96 * 3, SEEK_CUR); SaveFuncs.read(f, psxM, 0x00200000); SaveFuncs.read(f, psxR, 0x00080000); SaveFuncs.read(f, psxH, 0x00010000); SaveFuncs.read(f, (void *)&psxRegs, sizeof(psxRegs)); if (Config.HLE) psxBiosFreeze(0); // gpu gpufP = (GPUFreeze_t *)malloc(sizeof(GPUFreeze_t)); SaveFuncs.read(f, gpufP, sizeof(GPUFreeze_t)); GPU_freeze(0, gpufP); free(gpufP); if (HW_GPU_STATUS == 0) HW_GPU_STATUS = GPU_readStatus(); // spu SaveFuncs.read(f, &Size, 4); spufP = (SPUFreeze_t *)malloc(Size); SaveFuncs.read(f, spufP, Size); SPU_freeze(0, spufP); free(spufP); sioFreeze(f, 0); cdrFreeze(f, 0); psxHwFreeze(f, 0); psxRcntFreeze(f, 0); mdecFreeze(f, 0); SaveFuncs.close(f); new_dyna_restore(); return 0; }