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[] = { 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 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); }