예제 #1
0
static int StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] =
 {
  SFVAR(SoftResetCount),
  SFVAR(sms.cycle_counter),
  SFARRAYN(sms.wram, 0x2000, "RAM"),

  SFVAR(sms.paused),

  SFVAR(input.pad[0]),
  SFVAR(input.pad[1]),

  SFVAR(input.analog[0]),
  SFVAR(input.analog[1]),

  SFVAR(input.system),

  SFVAR(sms.fm_detect),
  SFVAR(sms.memctrl),

  //SFVAR(z80_runtime),
  //SFARRAY(CPUExRAM, 16384),
  //SFVAR(FlashStatusEnable),
  SFEND
 };
 int ret = 1;

 ret &= MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN");
 ret &= z80_state_action(sm, load, data_only, "Z80");
 ret &= SMS_CartStateAction(sm, load, data_only);
 ret &= SMS_PIOStateAction(sm, load, data_only);
 ret &= SMS_SoundStateAction(sm, load, data_only);
 ret &= SMS_VDPStateAction(sm, load, data_only);

 if(load)
 {
  if(sms.cycle_counter > 1000)
  {
   sms.cycle_counter = 1000;
   puts("sms.cycle_counter sanity failed");
  }
 } 

 return(ret);
}
예제 #2
0
int MDFNNGPCZ80_StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] =
 {
  SFVAR(CommByte),
  SFVAR(Z80Enabled),
  SFEND
 };

 if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, "Z80X"))
 {
  return(0);
 }

 if(!z80_state_action(sm, load, data_only, "Z80"))
  return(0);

 return(1);
}
예제 #3
0
static int StateAction(StateMem *sm, int load, int data_only)
{
 int ret = 1;
 unsigned int c68k_state_len = C68k_Get_State_Max_Len();
 uint8 c68k_state[c68k_state_len];

 C68k_Save_State(&Main68K, c68k_state);

 SFORMAT StateRegs[] =
 {
  SFARRAY(work_ram, 65536),
  SFARRAY(zram, 8192),
  SFVAR(zbusreq),
  SFVAR(zreset),
  SFVAR(zbusack),
  SFVAR(zirq),
  SFVAR(zbank),

  SFVAR(md_timestamp),
  SFVAR(suspend68k),
  SFVAR(z80_cycle_counter),

  SFARRAY(c68k_state, c68k_state_len),
  SFEND
 };


 ret &= MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN");
 ret &= z80_state_action(sm, load, data_only, "Z80");
 ret &= MDINPUT_StateAction(sm, load, data_only);
 ret &= MainVDP.StateAction(sm, load, data_only);
 ret &= MDSound_StateAction(sm, load, data_only);
 ret &= MDCart_StateAction(sm, load, data_only);

 if(load)
 {
  C68k_Load_State(&Main68K, c68k_state);
  z80_set_interrupt(zirq);
 }

 return(ret);
}