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); }
void CMemMap::StateAction(StateMem *sm, const unsigned load, const bool data_only) { SFORMAT MemMapRegs[] = { SFVAR(mMikieEnabled), SFVAR(mSusieEnabled), SFVAR(mRomEnabled), SFVAR(mVectorsEnabled), SFEND }; MDFNSS_StateAction(sm, load, data_only, MemMapRegs, "MMAP"); if(load) { // The peek will give us the correct value to put back uint8 mystate=Peek(0); // Now set to un-initialised so the poke will set correctly mSusieEnabled=-1; mMikieEnabled=-1; mRomEnabled=-1; mVectorsEnabled=-1; // Set banks correctly Poke(0,mystate); } }
void InputDevice_Gamepad::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) { SFORMAT StateRegs[] = { SFVAR(dtr), SFARRAY(buttons, sizeof(buttons)), SFVAR(command_phase), SFVAR(bitpos), SFVAR(receive_buffer), SFVAR(command), SFARRAY(transmit_buffer, sizeof(transmit_buffer)), SFVAR(transmit_pos), SFVAR(transmit_count), SFEND }; char section_name[32]; trio_snprintf(section_name, sizeof(section_name), "%s_Gamepad", sname_prefix); if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) Power(); else if(load) { if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) { transmit_pos = 0; transmit_count = 0; } } }
int GBZ80_StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFVAR(PC.W), SFVAR(SP.W), SFVAR(AF.W), SFVAR(BC.W), SFVAR(DE.W), SFVAR(HL.W), SFVAR(IFF), SFVAR(InHALT), SFVAR(RepeatNextByte), SFVAR(EI_Delayed), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "CPU"); if(load) { } return(ret); }
int HuC_StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY(PopRAM, IsPopulous ? 32768 : 0), SFARRAY(TsushinRAM, IsTsushin ? 32768 : 0), SFARRAY(SaveRAM, (IsPopulous || IsTsushin || BRAM_Disabled) ? 0 : 2048), SFARRAY(CDRAM, CDRAM ? (8192 * 8) : 0), SFARRAY(SysCardRAM, SysCardRAM ? (8192 * 24) : 0), SFVAR(HuCSF2Latch), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "HuC"); if(load) HuCSF2Latch &= 0xF; if(PCE_IsCD) { if(arcade_card) ret &= arcade_card->StateAction(sm, load, data_only); ret &= PCECD_StateAction(sm, load, data_only); } if(mcg) ret &= mcg->StateAction(sm, load, data_only); return(ret); }
int PS_CPU::StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY32(GPR, 32), SFVAR(LO), SFVAR(HI), SFVAR(BACKED_PC), SFVAR(BACKED_new_PC), SFVAR(BACKED_new_PC_mask), SFVAR(IPCache), SFVAR(Halted), SFVAR(BACKED_LDWhich), SFVAR(BACKED_LDValue), SFVAR(next_event_ts), SFVAR(gte_ts_done), SFARRAY32(CP0.Regs, 32), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "CPU"); ret &= GTE_StateAction(sm, load, data_only); if(load) { } return(ret); }
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); }
int StateAction(StateMem *sm, int load, int data_only, const char *sname) { SFORMAT StateRegs[] = { SFARRAY(mem, mem_size), SFVAR(prev_sda_in), SFVAR(prev_scl_in), SFVAR(phase), SFVAR(buf), SFVAR(bitpos), SFVAR(sda_out), SFVAR(slave_addr), SFVAR(rw_bit), SFVAR(mem_addr), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, sname); if(load) { mem_addr &= (mem_size - 1); } return(ret); }
static int StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[]={ {&cmd, 1, "CMD"}, {&mir, 1, "MIR"}, {&rmode, 1, "RMOD"}, {&IRQmode, 1, "IRQM"}, {&IRQCount, 1, "IRQC"}, {&IRQa, 1, "IRQA"}, {&IRQLatch, 1, "IRQL"}, {DRegs, 11, "DREG"}, SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR"); if(load) { Synco(); if(!nomirror) setmirror(mir^1); } return(ret); }
static int StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY(BaseRAM, IsSGX? 32768 : 8192), SFVAR(PCEIODataBuffer), SFEND }; //for(int i = 8192; i < 32768; i++) // if(BaseRAM[i] != 0xFF) // printf("%d %02x\n", i, BaseRAM[i]); int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN"); ret &= HuC6280_StateAction(sm, load, data_only); ret &= VDC_StateAction(sm, load, data_only); ret &= psg->StateAction(sm, load, data_only); ret &= INPUT_StateAction(sm, load, data_only); ret &= HuC_StateAction(sm, load, data_only); if(load) { } return(ret); }
void HuC_StateAction(StateMem *sm, const unsigned load, const bool data_only) { SFORMAT StateRegs[] = { SFARRAY(PopRAM, IsPopulous ? 32768 : 0), SFARRAY(TsushinRAM, IsTsushin ? 32768 : 0), SFARRAY(SaveRAM, (IsPopulous || IsTsushin || BRAM_Disabled) ? 0 : 2048), SFARRAY(CDRAM, CDRAM ? (8192 * 8) : 0), SFARRAY(SysCardRAM, SysCardRAM ? (8192 * 24) : 0), SFVAR(HuCSF2Latch), SFEND }; MDFNSS_StateAction(sm, load, data_only, StateRegs, "HuC"); if(load) HuCSF2Latch &= 0xF; if(PCE_IsCD) { if(arcade_card) arcade_card->StateAction(sm, load, data_only); PCECD_StateAction(sm, load, data_only); } if(mcg) mcg->StateAction(sm, load, data_only); }
int InputDevice_Multitap::StateAction(StateMem* sm, int load, int data_only, const char* section_name) { SFORMAT StateRegs[] = { SFVAR(dtr), SFVAR(selected_device), SFVAR(full_mode_setting), SFVAR(full_mode), SFVAR(mc_mode), SFVAR(fm_dp), SFARRAY(&fm_buffer[0][0], sizeof(fm_buffer) / sizeof(fm_buffer[0][0])), SFVAR(fm_deferred_error_temp), SFVAR(fm_deferred_error), SFVAR(fm_command_error), SFVAR(command), SFVAR(receive_buffer), SFVAR(bit_counter), SFVAR(byte_counter), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); if(load) { } return(ret); }
int InputDevice_Gamepad::StateAction(StateMem* sm, int load, int data_only, const char* section_name) { SFORMAT StateRegs[] = { SFVAR(dtr), SFARRAY(buttons, sizeof(buttons)), SFVAR(command_phase), SFVAR(bitpos), SFVAR(receive_buffer), SFVAR(command), SFARRAY(transmit_buffer, sizeof(transmit_buffer)), SFVAR(transmit_pos), SFVAR(transmit_count), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); if(load) { if(((uint64_t)transmit_pos + transmit_count) > sizeof(transmit_buffer)) { transmit_pos = 0; transmit_count = 0; } } 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 void StateAction(StateMem *sm, const unsigned load, const bool data_only) { SFORMAT StateRegs[] = { SFARRAY(BaseRAM, IsSGX? 32768 : 8192), SFVAR(PCEIODataBuffer), SFEND }; //for(int i = 8192; i < 32768; i++) // if(BaseRAM[i] != 0xFF) // printf("%d %02x\n", i, BaseRAM[i]); MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAIN"); HuC6280_StateAction(sm, load, data_only); VDC_StateAction(sm, load, data_only); psg->StateAction(sm, load, data_only); INPUT_StateAction(sm, load, data_only); HuC_StateAction(sm, load, data_only); if(load) { } }
int MDINPUT_StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY(PortData, 3), SFARRAY(PortCtrl, 3), SFARRAY(PortTxData, 3), SFARRAY(PortSCtrl, 3), SFARRAY(PortDataBus, 3), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "IO"); ret &= port[0]->StateAction(sm, load, data_only, "PRTA"); ret &= port[1]->StateAction(sm, load, data_only, "PRTB"); ret &= port[2]->StateAction(sm, load, data_only, "PRTC"); if(load) { } return(ret); }
static int StateAction(StateMem *sm, int load, int data_only) { //uint32 NWCIRQCount; //uint8 NWCRec; SFORMAT StateRegs[] = { SFARRAY(WRAM, WRAM_Size), SFARRAY(CHRRAM, 8192), SFARRAY(DRegs, 4), SFVAR(lreset), SFVAR(Buffer), SFVAR(BufferShift), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR"); if(load) { MMC1MIRROR(); MMC1CHR(); MMC1PRG(); lreset=0; /* timestamp(base) is not stored in save states. */ } return(ret); }
int HuC_StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY(ROMSpace + 0x40 * 8192, IsPopulous ? 32768 : 0), SFARRAY(TsushinRAM, IsTsushin ? 32768 : 0), SFARRAY(SaveRAM, (IsPopulous || IsTsushin) ? 0 : 2048), SFARRAY(ROMSpace + 0x68 * 8192, PCE_IsCD ? 262144 : 0), SFVAR(HuCSF2Latch), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "HuC"); if(load) HuCSF2Latch &= 0x3; if(PCE_IsCD) { ret &= PCECD_StateAction(sm, load, data_only); if(arcade_card) ret &= arcade_card->StateAction(sm, load, data_only); } 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); }
void CCart::StateAction(StateMem *sm, const unsigned load, const bool data_only) { SFORMAT CartRegs[] = { SFVAR(mCounter), SFVAR(mShifter), SFVAR(mAddrData), SFVAR(mStrobe), SFVAR(mShiftCount0), SFVAR(mCountMask0), SFVAR(mShiftCount1), SFVAR(mCountMask1), SFVAR(mBank), SFVAR(mWriteEnableBank0), SFVAR(mWriteEnableBank1), SFVAR(last_strobe), SFARRAYN(mCartBank1.get(), mCartRAM ? mMaskBank1 + 1 : 0, "mCartBank1"), SFEND }; MDFNSS_StateAction(sm, load, data_only, CartRegs, "CART"); if(load) { } }
int MDFNSS_StateAction(StateMem *st, int load, int data_only, SFORMAT *sf, const char *name, bool optional) { std::vector <SSDescriptor> love; love.push_back(SSDescriptor(sf, name, optional)); return(MDFNSS_StateAction(st, load, data_only, love)); }
int CMemMap::StateAction(StateMem *sm, int load, int data_only) { SFORMAT MemMapRegs[] = { SFVAR(mMikieEnabled), SFVAR(mSusieEnabled), SFVAR(mRomEnabled), SFVAR(mVectorsEnabled), SFEND }; std::vector <SSDescriptor> love; love.push_back(SSDescriptor(MemMapRegs, "MMAP")); int ret = MDFNSS_StateAction(sm, load, data_only, love); if(load) { // The peek will give us the correct value to put back uint8 mystate=Peek(0); // Now set to un-initialised so the poke will set correctly mSusieEnabled=-1; mMikieEnabled=-1; mRomEnabled=-1; mVectorsEnabled=-1; // Set banks correctly Poke(0,mystate); } return ret; }
int MDEC_StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFVAR(ClockCounter), SFVAR(MDRPhase), #define SFFIFO32(fifoobj) SFARRAY32(&fifoobj.data[0], fifoobj.data.size()), \ SFVAR(fifoobj.read_pos), \ SFVAR(fifoobj.write_pos), \ SFVAR(fifoobj.in_count) SFFIFO32(InFIFO), SFFIFO32(OutFIFO), #undef SFFIFO SFARRAY(&block_y[0][0], sizeof(block_y) / sizeof(block_y[0][0])), SFARRAY(&block_cb[0][0], sizeof(block_cb) / sizeof(block_cb[0][0])), SFARRAY(&block_cr[0][0], sizeof(block_cr) / sizeof(block_cr[0][0])), SFVAR(Control), SFVAR(Command), SFVAR(InCommand), SFARRAY(&QMatrix[0][0], sizeof(QMatrix) / sizeof(QMatrix[0][0])), SFVAR(QMIndex), SFARRAY16(&IDCTMatrix[0], sizeof(IDCTMatrix) / sizeof(IDCTMatrix[0])), SFVAR(IDCTMIndex), SFVAR(QScale), SFARRAY16(&Coeff[0], sizeof(Coeff) / sizeof(Coeff[0])), SFVAR(CoeffIndex), SFVAR(DecodeWB), SFARRAY32(&PixelBuffer.pix32[0], sizeof(PixelBuffer.pix32) / sizeof(PixelBuffer.pix32[0])), SFVAR(PixelBufferReadOffset), SFVAR(PixelBufferCount32), SFVAR(InCounter), SFVAR(RAMOffsetY), SFVAR(RAMOffsetCounter), SFVAR(RAMOffsetWWS), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MDEC"); if(load) { InFIFO.SaveStatePostLoad(); OutFIFO.SaveStatePostLoad(); } 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; } }
int MCGenjin::StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFVAR(bank_select), SFVAR(dlr), SFEND }; int ret = 1; ret &= MDFNSS_StateAction(sm, load, data_only, StateRegs, "MCGENJIN"); for(unsigned i = 0; i < 2; i++) ret &= MDFNSS_StateAction(sm, load, data_only, StateRegs, i ? "MCGENJIN_CS1" : "MCGENJIN_CS0"); return ret; }
void MDFNNES_VSUNIStateAction(StateMem *sm, const unsigned load, const bool data_only) { SFORMAT StateRegs[]= { SFVAR(vsdip), SFVAR(coinon), SFVAR(VSindex), SFEND }; MDFNSS_StateAction(sm, load, data_only, StateRegs, "VSUN"); }
static int StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFVAR(latch), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR"); if(load) Sync(); return(ret); }
static void FDS_StateAction(StateMem *sm, const unsigned load, const bool data_only) { unsigned int x; SFORMAT StateRegs[] = { SFARRAY(diskdata[0], 65500), SFARRAY(diskdata[1], 65500), SFARRAY(diskdata[2], 65500), SFARRAY(diskdata[3], 65500), SFARRAY(diskdata[4], 65500), SFARRAY(diskdata[5], 65500), SFARRAY(diskdata[6], 65500), SFARRAY(diskdata[7], 65500), SFARRAY(FDSRAM, 32768), SFARRAY(CHRRAM, 8192), SFVAR(V4023), SFVAR(ExLatch), SFVAR(Control), SFVAR(IRQCounter), SFVAR(IRQReload), SFVAR(IRQControl), SFVAR(writeskip), SFVAR(DiskPtr), SFVAR(DiskSeekIRQ), SFVAR(DiskWritten), SFEND }; if(!load) { for(x=0;x<TotalSides;x++) { int b; for(b=0; b<65500; b++) diskdata[x][b] ^= diskdatao[x][b]; } } MDFNSS_StateAction(sm, load, data_only, StateRegs, "FDS"); if(load) { setmirror(((Control & 8)>>3)^1); for(x=0;x<TotalSides;x++) { int b; for(b=0; b<65500; b++) diskdata[x][b] ^= diskdatao[x][b]; } } else { for(x=0;x<TotalSides;x++)
virtual void StateAction(StateMem *sm, const unsigned load, const bool data_only, const char *section_name) override { SFORMAT StateRegs[] = { SFVAR(buttons), SFEND }; if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) Power(); }
static int StateAction(StateMem *sm, int load, int data_only) { SFORMAT StateRegs[] = { SFARRAY(WRAM, 2048), SFEND }; int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "MAPR"); return(ret); }