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); }
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); }
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); }
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); }
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); }
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; } }
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(); } }
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); }
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); }
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); }
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; } }
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; } }
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); }