Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
}