Esempio n. 1
0
void PS_CPU::Power(void)
{
 memset(GPR, 0, sizeof(GPR));
 memset(&CP0, 0, sizeof(CP0));
 LO = 0;
 HI = 0;

 gte_ts_done = 0;

 BACKED_PC = 0xBFC00000;
 BACKED_new_PC = 4;
 BACKED_new_PC_mask = ~0U;

 BACKED_LDWhich = 0x20;
 BACKED_LDValue = 0;
 
 CP0.SR |= (1 << 22);	// BEV
 CP0.SR |= (1 << 21);	// TS

 CP0.PRID = 0x300;	// PRId: FIXME(test on real thing)

 RecalcIPCache();

 GTE_Power();
}
Esempio n. 2
0
void PS_CPU::AssertIRQ(int which, bool asserted)
{
 assert(which >= 0 && which <= 5);

 CP0.CAUSE &= ~(1 << (10 + which));

 if(asserted)
  CP0.CAUSE |= 1 << (10 + which);

 RecalcIPCache();
}
Esempio n. 3
0
void PS_CPU::Power(void)
{
 memset(GPR, 0, sizeof(GPR));
 memset(&CP0, 0, sizeof(CP0));
 LO = 0;
 HI = 0;

 gte_ts_done = 0;

 BACKED_PC = 0xBFC00000;
 BACKED_new_PC = 4;
 BACKED_new_PC_mask = ~0U;

 BACKED_LDWhich = 0x20;
 BACKED_LDValue = 0;
 
 CP0.SR |= (1 << 22);	// BEV
 CP0.SR |= (1 << 21);	// TS

 CP0.PRID = 0x2;

 RecalcIPCache();


 BIU = 0;

#if PS_CPU_EMULATE_ICACHE
 // Not quite sure about these poweron/reset values:
 for(unsigned i = 0; i < 1024; i++)
 {
  ICache[i].TV = 0x2 | ((BIU & 0x800) ? 0x0 : 0x1);
  ICache[i].Data = 0;
 }
#endif

 GTE_Power();
}
Esempio n. 4
0
void PS_CPU::SetHalt(bool status)
{
 Halted = status;
 RecalcIPCache();
}