void Sh4_int_Reset(bool Manual)
{
	if (sh4_int_bCpuRun)
	{
		printf("Sh4 Is running, can't Reset\n");
	}
	else
	{
		next_pc = 0xA0000000;

		memset(r,0,sizeof(r));
		memset(r_bank,0,sizeof(r_bank));

		gbr=ssr=spc=sgr=dbr=vbr=0;
		mac.full=pr=fpul=0;

		sr.SetFull(0x700000F0);
		old_sr.status=sr.status;
		UpdateSR();

		fpscr.full = 0x0004001;
		old_fpscr=fpscr;
		UpdateFPSCR();

		//Any more registers have default value ?
		printf("Sh4 Reset\n");
	}
}
static bool Do_Interrupt(u32 intEvn)
{
	CCN_INTEVT = intEvn;

	ssr = sh4_sr_GetFull();
	spc = next_pc;
	sgr = r[15];
	sr.BL = 1;
	sr.MD = 1;
	sr.RB = 1;
	UpdateSR();
	next_pc = vbr + 0x600;

	return true;
}
Beispiel #3
0
bool Do_Exeption(u32 epc, u32 expEvn, u32 CallVect)
{
    CCN_EXPEVT = expEvn;

    ssr = sr.GetFull();
    spc = epc;
    sgr = r[15];
    sr.BL = 1;
    sr.MD = 1;
    sr.RB = 1;
    UpdateSR();

    next_pc = vbr + CallVect;

    return true;
}
bool Do_Exception(u32 epc, u32 expEvn, u32 CallVect)
{
	verify(sr.BL == 0);
	CCN_EXPEVT = expEvn;

	ssr = sh4_sr_GetFull();
	spc = epc;
	sgr = r[15];
	sr.BL = 1;
	sr.MD = 1;
	sr.RB = 1;
	UpdateSR();

	next_pc = vbr + CallVect;

#ifndef NDEBUG
	printf("RaiseException: from %08X , pc errh %08X, %08X vect\n", spc, epc, next_pc);
#endif
	return true;
}