Beispiel #1
0
int SMS_SoundStateAction(StateMem *sm, int load, int data_only)
{
 Sms_ApuState sn_state;
 int ret = 1;

 memset(&sn_state, 0, sizeof(Sms_ApuState));

 if(!load)
 {
  apu.save_state(&sn_state);
 }

 SFORMAT StateRegs[] =
 {
  SFARRAY32N(sn_state.volume, 4, "Volume"),
  SFARRAY32N(sn_state.sq_period, 3, "SQPeriod"),
  SFARRAY32N(sn_state.sq_phase, 3, "SQPhase"),
  SFVARN(sn_state.noise_period, "NPeriod"),
  SFVARN(sn_state.noise_shifter, "NShifter"),
  SFVARN(sn_state.noise_feedback, "NFeedback"),
  SFVARN(sn_state.latch, "Latch"),
  SFVARN(sn_state.ggstereo, "GGStereo"),
  SFEND
 };

 if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, "PSG"))
  ret = 0;
 else if(load)
 {
  apu.load_state(&sn_state);
 }
 return(ret);
}
Beispiel #2
0
static int StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] =
 {
        SFVARN(reg_select, "FM7S"),
        SFVARN(wram_control, "FM7W"),
        SFARRAYN(sr, 0x10, "FM7SR"),
        SFVARN(sr_index, "FM7I"),
	SFARRAY(PRGRegs, 3),
	SFARRAY(CHRRegs, 8),
	SFVAR(Mirroring),
	SFARRAY32(vcount, 3),
	SFARRAY32(dcount, 3),

	SFVAR(IRQa),
	SFVAR(IRQCount),
	
	SFARRAY(WRAM, 8192),

	SFEND
 };

 int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR");

 if(load)
 {
  SyncCHR();
  SyncPRG();
  SyncMirroring();
 }

 return(ret);
}
static int StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] =
 {
  SFVAR(z80_runtime),
  SFARRAY(CPUExRAM, 16384),
  SFVAR(FlashStatusEnable),
  SFEND
 };

 SFORMAT TLCS_StateRegs[] =
 {
  SFVARN(pc, "PC"),
  SFVARN(sr, "SR"),
  SFVARN(f_dash, "F_DASH"),
  SFARRAY32N(gpr, 4, "GPR"),
  SFARRAY32N(gprBank[0], 4, "GPRB0"),
  SFARRAY32N(gprBank[1], 4, "GPRB1"),
  SFARRAY32N(gprBank[2], 4, "GPRB2"),
  SFARRAY32N(gprBank[3], 4, "GPRB3"),
  SFEND
 };

 if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN"))
  return(0);

 if(!MDFNSS_StateAction(sm, load, data_only, TLCS_StateRegs, "TLCS"))
  return(0);

 if(!MDFNNGPCDMA_StateAction(sm, load, data_only))
  return(0);

 if(!MDFNNGPCSOUND_StateAction(sm, load, data_only))
  return(0);

 if(!NGPGfx->StateAction(sm, load, data_only))
  return(0);

 if(!MDFNNGPCZ80_StateAction(sm, load, data_only))
  return(0);

 if(!int_timer_StateAction(sm, load, data_only))
  return(0);

 if(!BIOSHLE_StateAction(sm, load, data_only))
  return(0);

 if(!FLASH_StateAction(sm, load, data_only))
  return(0);

 if(load)
 {
  RecacheFRM();
  changedSP();
 }
 return(1);
}
Beispiel #4
0
static int M96_StateAction(StateMem *sm, int load, int data_only)
{
    SFORMAT StateRegs[]=
    {
        SFVARN(latche, "LATC"),
        SFVARN(M96LA, "LAVA"),
        SFEND
    };
    int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR");

    if(load)
        M96Sync();

    return(ret);
}
Beispiel #5
0
int MDFNGBSOUND_StateAction(StateMem *sm, int load, int data_only)
{
 gb_apu_state_t gb_state;
 int ret = 1;

 //if(!load) // always save state, in case there is none to load
 {
  gb_apu.save_state(&gb_state);
 }

 SFORMAT StateRegs[] =
 {
  SFVARN(gb_state, "apu_state"),
  SFEND
 };

 if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, "APU"))
  ret = 0;
 else if(load)
 {
  // TODO: set hardware mode to mode_dmg, mode_cgb, or mode_agb
  // (latter if you're running classic GB game on Game Boy Advance)
  gb_apu.reset();
  gb_apu.load_state(gb_state);
 }
 return(ret);
}
Beispiel #6
0
static int StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[]={
        SFARRAYN(DRegs, 8, "DREG"),
	SFVARN(cmd, "CMD"),
	SFVARN(lastA, "LAST"),
	SFVAR(lastmc),
	SFEND
 };


 int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR");

 if(load)
  DBSync();

 return(ret);
}
Beispiel #7
0
void MDEC_StateAction(StateMem *sm, const unsigned load, const bool data_only)
{
 SFORMAT StateRegs[] =
 {
  SFVAR(ClockCounter),
  SFVAR(MDRPhase),

#define SFFIFO32(fifoobj)  SFPTR32(&fifoobj.data[0], sizeof(fifoobj.data) / sizeof(fifoobj.data[0])),	\
			 SFVAR(fifoobj.read_pos),				\
			 SFVAR(fifoobj.write_pos),				\
			 SFVAR(fifoobj.in_count)

  SFFIFO32(InFIFO),
  SFFIFO32(OutFIFO),
#undef SFFIFO

  SFVARN(block_y, "&block_y[0][0]"),
  SFVARN(block_cb, "&block_cb[0][0]"),
  SFVARN(block_cr, "&block_cr[0][0]"),

  SFVAR(Control),
  SFVAR(Command),
  SFVAR(InCommand),

  SFVARN(QMatrix, "&QMatrix[0][0]"),
  SFVAR(QMIndex),

  SFVARN(IDCTMatrix, "&IDCTMatrix[0]"),
  SFVAR(IDCTMIndex),

  SFVAR(QScale),

  SFVARN(Coeff, "&Coeff[0]"),
  SFVAR(CoeffIndex),
  SFVAR(DecodeWB),

  SFVARN(PixelBuffer.pix32, "&PixelBuffer.pix32[0]"),
  SFVAR(PixelBufferReadOffset),
  SFVAR(PixelBufferCount32),

  SFVAR(InCounter),

  SFVAR(RAMOffsetY),
  SFVAR(RAMOffsetCounter),
  SFVAR(RAMOffsetWWS),

  SFEND
 };

 MDFNSS_StateAction(sm, load, data_only, StateRegs, "MDEC");

 if(load)
 {
  InFIFO.SaveStatePostLoad();
  OutFIFO.SaveStatePostLoad();

  PixelBufferCount32 %= (sizeof(PixelBuffer.pix32) / sizeof(PixelBuffer.pix32[0])) + 1;
 }
}
Beispiel #8
0
static void StateAction(StateMem *sm, const unsigned load, const bool data_only)
{
 SFORMAT StateRegs[] =
 {
  SFVAR(z80_runtime),
  SFARRAY(CPUExRAM, 16384),
  SFVAR(FlashStatusEnable),
  SFEND
 };

 SFORMAT TLCS_StateRegs[] =
 {
  SFVARN(pc, "PC"),
  SFVARN(sr, "SR"),
  SFVARN(f_dash, "F_DASH"),
  SFARRAY32N(gpr, 4, "GPR"),
  SFARRAY32N(gprBank[0], 4, "GPRB0"),
  SFARRAY32N(gprBank[1], 4, "GPRB1"),
  SFARRAY32N(gprBank[2], 4, "GPRB2"),
  SFARRAY32N(gprBank[3], 4, "GPRB3"),
  SFEND
 };

 MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN");
 MDFNSS_StateAction(sm, load, data_only, TLCS_StateRegs, "TLCS");
 MDFNNGPCDMA_StateAction(sm, load, data_only);
 MDFNNGPCSOUND_StateAction(sm, load, data_only);
 NGPGfx->StateAction(sm, load, data_only);
 MDFNNGPCZ80_StateAction(sm, load, data_only);
 int_timer_StateAction(sm, load, data_only);
 BIOSHLE_StateAction(sm, load, data_only);
 FLASH_StateAction(sm, load, data_only);

 if(load)
 {
  RecacheFRM();
  changedSP();
 }
}
Beispiel #9
0
int MDSound_StateAction(StateMem *sm, int load, int data_only)
{
 Sms_ApuState sn_state;
 unsigned int fm_state_len = FMUnit.get_state_max_len();
 uint8 fm_state[fm_state_len];

 //if(!load)
 //{
 apu.save_state(&sn_state);
 FMUnit.save_state(fm_state);
 //}

 SFORMAT StateRegs[] =
 {
  SFVAR(fm_last_timestamp),
  SFVAR(FMReset),
  SFVAR(fm_div),
  SFARRAY(fm_state, fm_state_len),

  SFARRAY32N(sn_state.volume, 4, "Volume"),
  SFARRAY32N(sn_state.sq_period, 3, "SQPeriod"),
  SFARRAY32N(sn_state.sq_phase, 3, "SQPhase"),
  SFVARN(sn_state.noise_period, "NPeriod"),
  SFVARN(sn_state.noise_shifter, "NShifter"),
  SFVARN(sn_state.noise_feedback, "NFeedback"),
  SFVARN(sn_state.latch, "Latch"),
  SFEND
 };

 int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "SND");

 if(load)
 {
  FMUnit.load_state(fm_state);
  apu.load_state(&sn_state);
 }

 return(ret);
}
Beispiel #10
0
static int MMC4_StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] =
 {
  SFARRAYN(CHRBanks, 4, "CHRBanks"),
  SFVARN(PRGBank, "PRGBank"),
  SFARRAYN(latches, 2, "latches"),
  SFARRAYN(MMC4_WRAM, 8192, "WRAM"),
  SFEND
 };

 int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MMC2");
 if(load)
 {
  CHRSync();
  setmirror(Mirroring ^ 1);
  setprg16(0x8000, PRGBank);
 }

 return(ret);
}
Beispiel #11
0
static int StateAction(StateMem *sm, int load, int data_only)
{
 SFORMAT StateRegs[] = 
 {
  SFARRAYN(CHRRAM, 8192, "CHRR"),
  SFARRAYN(DRegBuf, 8, "DREG"),
  SFVARN(IRQCount, "IRQC"),
  SFVARN(IRQLatch, "IQL1"),
  SFVARN(IRQa, "IRQA"),
  SFVARN(sizer, "SIZA"),
  SFVARN(bigbank, "BIG1"),
  SFVARN(bigbank2, "BIG2"),
  SFEND
 };
 int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR");

 if(load)
 {
  FixMMC3PRG(MMC3_cmd);
  FixMMC3CHR(MMC3_cmd);
  setmirror((mbia & 1) ^ 1);
 }
 return(ret);
}
Beispiel #12
0
void z80_state_action(StateMem *sm, const unsigned load, const bool data_only, const char *section_name)
{
 uint8 r_register;

 SFORMAT StateRegs[] =
 {
  SFVARN(z80.af.w, "AF"),
  SFVARN(z80.bc.w, "BC"),
  SFVARN(z80.de.w, "DE"),
  SFVARN(z80.hl.w, "HL"),
  SFVARN(z80.af_.w, "AF_"),
  SFVARN(z80.bc_.w, "BC_"),
  SFVARN(z80.de_.w, "DE_"),
  SFVARN(z80.hl_.w, "HL_"),
  SFVARN(z80.ix.w, "IX"),
  SFVARN(z80.iy.w, "IY"),
  SFVARN(z80.i, "I"),
  SFVARN(z80.sp.w, "SP"),
  SFVARN(z80.pc.w, "PC"),
  SFVARN(z80.iff1, "IFF1"),
  SFVARN(z80.iff2, "IFF2"),
  SFVARN(z80.im, "IM"),
  SFVARN(r_register, "R"),

  SFVARN(z80.interrupts_enabled_at, "interrupts_enabled_at"),
  SFVARN(z80.halted, "halted"),

  SFVAR(z80_tstates),
  SFVAR(last_z80_tstates),

  SFEND
 };

 if(!load)
  r_register = (z80.r7 & 0x80) | (z80.r & 0x7f);

 MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name);

 if(load)
 {
  z80.r7 = r_register & 0x80;
  z80.r = r_register & 0x7F;
 }
}
Beispiel #13
0
void z80_state_action(StateMem *sm, const unsigned load, const bool data_only, const char *section_name)
{
 uint8 r_register;

 SFORMAT StateRegs[] =
 {
  SFVARN(z80.af.w, "AF"),
  SFVARN(z80.bc.w, "BC"),
  SFVARN(z80.de.w, "DE"),
  SFVARN(z80.hl.w, "HL"),
  SFVARN(z80.af_.w, "AF_"),
  SFVARN(z80.bc_.w, "BC_"),
  SFVARN(z80.de_.w, "DE_"),
  SFVARN(z80.hl_.w, "HL_"),
  SFVARN(z80.ix.w, "IX"),
  SFVARN(z80.iy.w, "IY"),
  SFVARN(z80.i, "I"),
  SFVARN(z80.sp.w, "SP"),
  SFVARN(z80.pc.w, "PC"),
  SFVARN(z80.iff1, "IFF1"),
  SFVARN(z80.iff2, "IFF2"),
  SFVARN(z80.im, "IM"),
  SFVARN(r_register, "R"),

  SFVARN(z80.interrupts_enabled_at, "interrupts_enabled_at"),
  SFVARN(z80.halted, "halted"),

  SFVAR(z80_tstates),
  SFVAR(last_z80_tstates),

  SFEND
 };

 if(!load)
  r_register = (z80.r7 & 0x80) | (z80.r & 0x7f);

 MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name);

 if(load)
 {
  if(load < 0x00093902)
   z80.interrupts_enabled_at = z80_tstates;

  // TODO: Maybe adjust this check if we ever add emulation of a Z80-utilizing system with long wait-stating.
  if((z80_tstates - last_z80_tstates) > 1000)
   last_z80_tstates = z80_tstates - 1000;

  z80.r7 = r_register & 0x80;
  z80.r = r_register & 0x7F;
 }
}
Beispiel #14
0
int MDFNNGPCZ80_StateAction(StateMem *sm, int load, int data_only)
{
 uint8 r_register;

 SFORMAT StateRegs[] =
 {
  SFVAR(CommByte),
  SFVAR(Z80Enabled),
  SFVARN(z80.af.w, "AF"),
  SFVARN(z80.bc, "BC"),
  SFVARN(z80.de, "DE"),
  SFVARN(z80.hl, "HL"),
  SFVARN(z80.af_, "AF_"),
  SFVARN(z80.bc_, "BC_"),
  SFVARN(z80.de_, "DE_"),
  SFVARN(z80.hl_, "HL_"),
  SFVARN(z80.ix, "IX"),
  SFVARN(z80.iy, "IY"),
  SFVARN(z80.sp, "SP"),
  SFVARN(z80.pc, "PC"),
  SFVARN(z80.iff1, "IFF1"),
  SFVARN(z80.iff2, "IFF2"),
  SFVARN(z80.im, "IM"),
  SFVARN(r_register, "R"),
  SFEND
 };

 if(!load)
  r_register = (z80.r7 & 0x80) | (z80.r & 0x7f);

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

 if(load)
 {
  z80.r7 = r_register & 0x80;
  z80.r = r_register & 0x7F;
 }

 return(1);
}