public static void SaveStateBinaryC(BinaryWriter writer) { int i; writer.Write(dswa); writer.Write(dswb); writer.Write(dswc); writer.Write(basebanksnd); for (i = 0; i < 0x20; i++) { writer.Write(cps_a_regs[i]); } for (i = 0; i < 0x20; i++) { writer.Write(cps_b_regs[i]); } for (i = 0; i < 0xc00; i++) { writer.Write(Palette.entry_color[i]); } writer.Write(Memory.mainram, 0, 0x10000); writer.Write(gfxram, 0, 0x30000); MC68000.m1.SaveStateBinary(writer); writer.Write(Memory.audioram, 0, 0x800); Z80A.z1.SaveStateBinary(writer); Cpuint.SaveStateBinary(writer); writer.Write(Timer.global_basetime.seconds); writer.Write(Timer.global_basetime.attoseconds); writer.Write(Video.screenstate.frame_number); writer.Write(Sound.last_update_second); for (i = 0; i < 2; i++) { writer.Write(Cpuexec.cpu[i].suspend); writer.Write(Cpuexec.cpu[i].nextsuspend); writer.Write(Cpuexec.cpu[i].eatcycles); writer.Write(Cpuexec.cpu[i].nexteatcycles); writer.Write(Cpuexec.cpu[i].localtime.seconds); writer.Write(Cpuexec.cpu[i].localtime.attoseconds); } Timer.SaveStateBinary(writer); writer.Write(Memory.audioram, 0, 0x800); YM2151.SaveStateBinary(writer); OKI6295.SaveStateBinary(writer); for (i = 0; i < 2; i++) { writer.Write(Sound.latched_value[i]); } for (i = 0; i < 2; i++) { writer.Write(Sound.utempdata[i]); } writer.Write(Sound.ym2151stream.output_sampindex); writer.Write(Sound.ym2151stream.output_base_sampindex); writer.Write(Sound.okistream.output_sampindex); writer.Write(Sound.okistream.output_base_sampindex); writer.Write(Sound.mixerstream.output_sampindex); writer.Write(Sound.mixerstream.output_base_sampindex); }
public static void SaveStateBinary(BinaryWriter writer) { int i, j; for (i = 0; i < 0x800; i++) { writer.Write(Palette.entry_color[i]); } writer.Write(Generic.generic_nvram, 0, 0x4000); for (i = 0; i < 0x800; i++) { writer.Write(priority_ram[i]); } for (i = 0; i < 0x1000; i++) { writer.Write(paletteram16[i]); } writer.Write(prot1); writer.Write(prot2); writer.Write(prot1_swap); writer.Write(prot1_addr); for (i = 0; i < 2; i++) { writer.Write(igs003_reg[i]); } for (i = 0; i < 2; i++) { writer.Write(vbowl_trackball[i]); } writer.Write(priority); writer.Write(igs_dips_sel); writer.Write(igs_input_sel); writer.Write(lhb_irq_enable); writer.Write(igs012_prot); writer.Write(igs012_prot_swap); writer.Write(igs012_prot_mode); for (i = 0; i < 8; i++) { for (j = 0; j < 0x20000; j++) { writer.Write(layer[i][j]); } } writer.Write(lhb2_pen_hi); writer.Write(blitter.x); writer.Write(blitter.y); writer.Write(blitter.w); writer.Write(blitter.h); writer.Write(blitter.gfx_lo); writer.Write(blitter.gfx_hi); writer.Write(blitter.depth); writer.Write(blitter.pen); writer.Write(blitter.flags); MC68000.m1.SaveStateBinary(writer); Cpuint.SaveStateBinary(writer); writer.Write(Timer.global_basetime.seconds); writer.Write(Timer.global_basetime.attoseconds); writer.Write(Video.screenstate.frame_number); writer.Write(Sound.last_update_second); writer.Write(Cpuexec.cpu[0].localtime.seconds); writer.Write(Cpuexec.cpu[0].localtime.attoseconds); Timer.SaveStateBinary(writer); OKI6295.SaveStateBinary(writer); for (i = 0; i < 9; i++) { writer.Write(FMOpl.OPL.P_CH[i].block_fnum); writer.Write(FMOpl.OPL.P_CH[i].kcode); for (j = 0; j < 2; j++) { writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].ar); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].dr); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].rr); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].KSR); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].ksl); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].ksr); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].mul); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].Cnt); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].FB); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].op1_out[0]); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].op1_out[1]); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].CON); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].eg_type); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].state); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].TL); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].volume); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].sl); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].key); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].AMmask); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].vib); writer.Write(FMOpl.OPL.P_CH[i].SLOT[j].wavetable); } } writer.Write(FMOpl.OPL.eg_cnt); writer.Write(FMOpl.OPL.eg_timer); writer.Write(FMOpl.OPL.rhythm); writer.Write(FMOpl.OPL.lfo_am_depth); writer.Write(FMOpl.OPL.lfo_pm_depth_range); writer.Write(FMOpl.OPL.lfo_am_cnt); writer.Write(FMOpl.OPL.lfo_pm_cnt); writer.Write(FMOpl.OPL.noise_rng); writer.Write(FMOpl.OPL.noise_p); writer.Write(FMOpl.OPL.wavesel); for (i = 0; i < 2; i++) { writer.Write(FMOpl.OPL.T[i]); } for (i = 0; i < 2; i++) { writer.Write(FMOpl.OPL.st[i]); } writer.Write(FMOpl.OPL.address); writer.Write(FMOpl.OPL.status); writer.Write(FMOpl.OPL.statusmask); writer.Write(FMOpl.OPL.mode); writer.Write(Sound.okistream.output_sampindex); writer.Write(Sound.okistream.output_base_sampindex); writer.Write(Sound.ym3812stream.output_sampindex); writer.Write(Sound.ym3812stream.output_base_sampindex); writer.Write(Sound.mixerstream.output_sampindex); writer.Write(Sound.mixerstream.output_base_sampindex); }