X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fstate.c;h=a1ceac2c729b9c8483bea0c9dacad3342eecb98b;hb=a6523294e28d7e6c119a578eb65b91af8da77f8d;hp=a3695970d8d540934022016987a98880948bf162;hpb=ae214f1c37e5b02b6413040649a40f8ba3874e1b;p=picodrive.git diff --git a/pico/state.c b/pico/state.c index a369597..a1ceac2 100644 --- a/pico/state.c +++ b/pico/state.c @@ -175,12 +175,13 @@ typedef enum { CHUNK_32X_LAST = CHUNK_32X_EVT, // add new stuff here CHUNK_CD_EVT = 50, + CHUNK_CD_GFX, // CHUNK_DEFAULT_COUNT, CHUNK_CARTHW_ = CHUNK_CARTHW, // 64 (defined in PicoInt) } chunk_name_e; -static const char * const chunk_names[] = { +static const char * const chunk_names[CHUNK_DEFAULT_COUNT] = { "INVALID!", "M68K state", "RAM", @@ -237,7 +238,7 @@ static int write_chunk(chunk_name_e name, int len, void *data, void *file) } #define CHECKED_WRITE(name,len,data) { \ - if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT) { \ + if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT && chunk_names[name]) { \ strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \ PicoStateProgressCB(sbuff); \ } \ @@ -245,7 +246,7 @@ static int write_chunk(chunk_name_e name, int len, void *data, void *file) } #define CHECKED_WRITE_BUFF(name,buff) { \ - if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT) { \ + if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT && chunk_names[name]) { \ strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \ PicoStateProgressCB(sbuff); \ } \ @@ -258,6 +259,7 @@ static int state_save(void *file) unsigned char buff[0x60], buff_z80[Z80_STATE_SIZE]; void *ym2612_regs = YM2612GetRegs(); int ver = 0x0170; // not really used.. + int len; areaWrite("PicoSEXT", 1, 8, file); areaWrite(&ver, 1, 4, file); @@ -305,11 +307,12 @@ static int state_save(void *file) CHECKED_WRITE_BUFF(CHUNK_CDD, Pico_mcd->cdd); CHECKED_WRITE_BUFF(CHUNK_CDC, Pico_mcd->cdc); CHECKED_WRITE_BUFF(CHUNK_SCD, Pico_mcd->scd); - CHECKED_WRITE_BUFF(CHUNK_RC, Pico_mcd->rot_comp); CHECKED_WRITE_BUFF(CHUNK_MISC_CD, Pico_mcd->m); memset(buff, 0, 0x40); memcpy(buff, pcd_event_times, sizeof(pcd_event_times)); CHECKED_WRITE(CHUNK_CD_EVT, 0x40, buff); + len = gfx_context_save(buff); + CHECKED_WRITE(CHUNK_CD_GFX, len, buff); if (Pico_mcd->s68k_regs[3] & 4) // convert back wram_2M_to_1M(Pico_mcd->word_ram2M); @@ -464,7 +467,6 @@ static int state_load(void *file) case CHUNK_CDD: CHECKED_READ_BUFF(Pico_mcd->cdd); break; case CHUNK_CDC: CHECKED_READ_BUFF(Pico_mcd->cdc); break; case CHUNK_SCD: CHECKED_READ_BUFF(Pico_mcd->scd); break; - case CHUNK_RC: CHECKED_READ_BUFF(Pico_mcd->rot_comp); break; case CHUNK_MISC_CD: CHECKED_READ_BUFF(Pico_mcd->m); break; case CHUNK_CD_EVT: @@ -472,6 +474,11 @@ static int state_load(void *file) memcpy(pcd_event_times, buff, sizeof(pcd_event_times)); break; + case CHUNK_CD_GFX: + CHECKED_READ2(0x18, buff); + gfx_context_load(buff); + break; + // 32x stuff #ifndef NO_32X case CHUNK_MSH2: