X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fstate.c;h=761b64c7b4daa030de7be42e7b937bc0f18f8430;hb=bc3aea8e705ec38bdeca7f31fa069c37dd7217d3;hp=27c58a755fe287bd9790c4a4d6c785748300c6b3;hpb=03065bb617aa86e7a4dfb943781fecb8db8836fb;p=picodrive.git diff --git a/pico/state.c b/pico/state.c index 27c58a7..761b64c 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 @@ -173,6 +174,7 @@ typedef enum { CHUNK_SDRAM, CHUNK_DRAM, CHUNK_32XPAL, + CHUNK_32X_EVT, // CHUNK_DEFAULT_COUNT, CHUNK_CARTHW_ = CHUNK_CARTHW, // defined in PicoInt @@ -221,6 +223,7 @@ static const char * const chunk_names[] = { "SDRAM", "DRAM", "PAL", + "events", }; static int write_chunk(chunk_name_e name, int len, void *data, void *file) @@ -308,6 +311,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]; @@ -331,7 +335,12 @@ static int state_save(void *file) CHECKED_WRITE_BUFF(CHUNK_SDRAM, Pico32xMem->sdram); CHECKED_WRITE_BUFF(CHUNK_DRAM, Pico32xMem->dram); CHECKED_WRITE_BUFF(CHUNK_32XPAL, Pico32xMem->pal); + + memset(buff, 0, 0x40); + memcpy(buff, event_times, sizeof(event_times)); + CHECKED_WRITE(CHUNK_32X_EVT, 0x40, buff); } +#endif if (carthw_chunks != NULL) { @@ -379,6 +388,7 @@ static int state_load(void *file) unsigned char buff_m68k[0x60], buff_s68k[0x60]; unsigned char buff_z80[Z80_STATE_SIZE]; unsigned char buff_sh2[SH2_STATE_SIZE]; + unsigned char buff[0x40]; unsigned char chunk; void *ym2612_regs; char header[8]; @@ -451,6 +461,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); @@ -473,6 +484,11 @@ static int state_load(void *file) case CHUNK_DRAM: CHECKED_READ_BUFF(Pico32xMem->dram); break; case CHUNK_32XPAL: CHECKED_READ_BUFF(Pico32xMem->pal); break; + case CHUNK_32X_EVT: + CHECKED_READ_BUFF(buff); + memcpy(event_times, buff, sizeof(event_times)); + break; +#endif default: if (carthw_chunks != NULL) { @@ -546,6 +562,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); @@ -560,7 +577,7 @@ static int state_load_gfx(void *file) case CHUNK_32XSYS: CHECKED_READ_BUFF(Pico32x); break; - +#endif default: areaSeek(file, len, SEEK_CUR); break; @@ -652,11 +669,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; } @@ -673,12 +692,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 +// vim:shiftwidth=2:ts=2:expandtab