X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fstate.c;h=cb340695eaa1e7724d28c7482b7fe79d92d03ef3;hb=7d025f8ad02a4b890f3a194f277628e5c4332044;hp=60a6f72523f67cb5473cb0a85ab20268e39fa8b7;hpb=b4db550e41b2aa277f570d7bff890c8e8ee1831f;p=picodrive.git diff --git a/pico/state.c b/pico/state.c index 60a6f72..cb34069 100644 --- a/pico/state.c +++ b/pico/state.c @@ -1,9 +1,10 @@ -// (c) Copyright 2004 Dave, All rights reserved. -// (c) Copyright 2006-2010 notaz, All rights reserved. -// Free for non-commercial use. - -// For commercial use, separate licencing terms must be obtained. - +/* + * PicoDrive + * (C) notaz, 2010 + * + * This work is licensed under the terms of MAME license. + * See COPYING file in the top-level directory. + */ #include "pico_int.h" #include @@ -308,6 +309,7 @@ static int state_save(void *file) wram_2M_to_1M(Pico_mcd->word_ram2M); } +#ifndef NO_32X if (PicoAHW & PAHW_32X) { unsigned char cpubuff[SH2_STATE_SIZE]; @@ -332,6 +334,7 @@ static int state_save(void *file) CHECKED_WRITE_BUFF(CHUNK_DRAM, Pico32xMem->dram); CHECKED_WRITE_BUFF(CHUNK_32XPAL, Pico32xMem->pal); } +#endif if (carthw_chunks != NULL) { @@ -384,6 +387,10 @@ static int state_load(void *file) char header[8]; int ver, len; + memset(buff_m68k, 0, sizeof(buff_m68k)); + memset(buff_s68k, 0, sizeof(buff_s68k)); + memset(buff_z80, 0, sizeof(buff_z80)); + g_read_offs = 0; CHECKED_READ(8, header); if (strncmp(header, "PicoSMCD", 8) && strncmp(header, "PicoSEXT", 8)) @@ -408,7 +415,6 @@ static int state_load(void *file) case CHUNK_Z80: CHECKED_READ_BUFF(buff_z80); - z80_unpack(buff_z80); break; case CHUNK_RAM: CHECKED_READ_BUFF(Pico.ram); break; @@ -448,6 +454,7 @@ static int state_load(void *file) case CHUNK_MISC_CD: CHECKED_READ_BUFF(Pico_mcd->m); break; // 32x stuff +#ifndef NO_32X case CHUNK_MSH2: CHECKED_READ_BUFF(buff_sh2); sh2_unpack(&sh2s[0], buff_sh2); @@ -469,7 +476,7 @@ static int state_load(void *file) case CHUNK_SDRAM: CHECKED_READ_BUFF(Pico32xMem->sdram); break; case CHUNK_DRAM: CHECKED_READ_BUFF(Pico32xMem->dram); break; case CHUNK_32XPAL: CHECKED_READ_BUFF(Pico32xMem->pal); break; - +#endif default: if (carthw_chunks != NULL) { @@ -499,13 +506,15 @@ readend: if (!(Pico_mcd->s68k_regs[0x36] & 1) && (Pico_mcd->scd.Status_CDC & 1)) cdda_start_play(); - // must unpack after mem is set up SekUnpackCpu(buff_s68k, 1); } + // must unpack 68k and z80 after banks are set up if (!(PicoAHW & PAHW_SMS)) SekUnpackCpu(buff_m68k, 0); + z80_unpack(buff_z80); + if (PicoAHW & PAHW_32X) Pico32xStateLoaded(); @@ -541,6 +550,7 @@ static int state_load_gfx(void *file) case CHUNK_VSRAM: CHECKED_READ_BUFF(Pico.vsram); found++; break; case CHUNK_VIDEO: CHECKED_READ_BUFF(Pico.video); found++; break; +#ifndef NO_32X case CHUNK_DRAM: if (Pico32xMem != NULL) CHECKED_READ_BUFF(Pico32xMem->dram); @@ -555,7 +565,7 @@ static int state_load_gfx(void *file) case CHUNK_32XSYS: CHECKED_READ_BUFF(Pico32x); break; - +#endif default: areaSeek(file, len, SEEK_CUR); break; @@ -647,11 +657,13 @@ void *PicoTmpStateSave(void) memcpy(t->vsram, Pico.vsram, sizeof(Pico.vsram)); memcpy(&t->video, &Pico.video, sizeof(Pico.video)); +#ifndef NO_32X if (PicoAHW & PAHW_32X) { memcpy(&t->t32x.p32x, &Pico32x, sizeof(Pico32x)); memcpy(t->t32x.dram, Pico32xMem->dram, sizeof(Pico32xMem->dram)); memcpy(t->t32x.pal, Pico32xMem->pal, sizeof(Pico32xMem->pal)); } +#endif return t; } @@ -668,12 +680,14 @@ void PicoTmpStateRestore(void *data) memcpy(&Pico.video, &t->video, sizeof(Pico.video)); Pico.m.dirtyPal = 1; +#ifndef NO_32X if (PicoAHW & PAHW_32X) { memcpy(&Pico32x, &t->t32x.p32x, sizeof(Pico32x)); memcpy(Pico32xMem->dram, t->t32x.dram, sizeof(Pico32xMem->dram)); memcpy(Pico32xMem->pal, t->t32x.pal, sizeof(Pico32xMem->pal)); Pico32x.dirty_pal = 1; } +#endif } // vim:shiftwidth=2:expandtab