예제 #1
0
        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);
        }
예제 #2
0
        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);
        }