CHUNK_32X_EVT,\r
CHUNK_32X_FIRST = CHUNK_MSH2,\r
CHUNK_32X_LAST = CHUNK_32X_EVT,\r
+ // add new stuff here\r
+ CHUNK_CD_EVT = 50,\r
//\r
CHUNK_DEFAULT_COUNT,\r
- CHUNK_CARTHW_ = CHUNK_CARTHW, // defined in PicoInt\r
+ CHUNK_CARTHW_ = CHUNK_CARTHW, // 64 (defined in PicoInt)\r
} chunk_name_e;\r
\r
-static const char * const chunk_names[] = {\r
+static const char * const chunk_names[CHUNK_DEFAULT_COUNT] = {\r
"INVALID!",\r
"M68K state",\r
"RAM",\r
}\r
\r
#define CHECKED_WRITE(name,len,data) { \\r
- if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT) { \\r
+ if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT && chunk_names[name]) { \\r
strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \\r
PicoStateProgressCB(sbuff); \\r
} \\r
}\r
\r
#define CHECKED_WRITE_BUFF(name,buff) { \\r
- if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT) { \\r
+ if (PicoStateProgressCB && name < CHUNK_DEFAULT_COUNT && chunk_names[name]) { \\r
strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \\r
PicoStateProgressCB(sbuff); \\r
} \\r
SekPackCpu(buff, 1);\r
if (Pico_mcd->s68k_regs[3] & 4) // 1M mode?\r
wram_1M_to_2M(Pico_mcd->word_ram2M);\r
- Pico_mcd->m.hint_vector = *(unsigned short *)(Pico_mcd->bios + 0x72);\r
+ memcpy(&Pico_mcd->m.hint_vector, Pico_mcd->bios + 0x72,\r
+ sizeof(Pico_mcd->m.hint_vector));\r
\r
CHECKED_WRITE_BUFF(CHUNK_S68K, buff);\r
CHECKED_WRITE_BUFF(CHUNK_PRG_RAM, Pico_mcd->prg_ram);\r
CHECKED_WRITE_BUFF(CHUNK_SCD, Pico_mcd->scd);\r
CHECKED_WRITE_BUFF(CHUNK_RC, Pico_mcd->rot_comp);\r
CHECKED_WRITE_BUFF(CHUNK_MISC_CD, Pico_mcd->m);\r
+ memset(buff, 0, 0x40);\r
+ memcpy(buff, pcd_event_times, sizeof(pcd_event_times));\r
+ CHECKED_WRITE(CHUNK_CD_EVT, 0x40, buff);\r
\r
if (Pico_mcd->s68k_regs[3] & 4) // convert back\r
wram_2M_to_1M(Pico_mcd->word_ram2M);\r
CHECKED_WRITE_BUFF(CHUNK_32XPAL, Pico32xMem->pal);\r
\r
memset(buff, 0, 0x40);\r
- memcpy(buff, event_times, sizeof(event_times));\r
+ memcpy(buff, p32x_event_times, sizeof(p32x_event_times));\r
CHECKED_WRITE(CHUNK_32X_EVT, 0x40, buff);\r
}\r
#endif\r
R_ERROR_RETURN("bad header");\r
CHECKED_READ(4, &ver);\r
\r
+ memset(pcd_event_times, 0, sizeof(pcd_event_times));\r
+ memset(p32x_event_times, 0, sizeof(p32x_event_times));\r
+\r
while (!areaEof(file))\r
{\r
CHECKED_READ(1, &chunk);\r
case CHUNK_RC: CHECKED_READ_BUFF(Pico_mcd->rot_comp); break;\r
case CHUNK_MISC_CD: CHECKED_READ_BUFF(Pico_mcd->m); break;\r
\r
+ case CHUNK_CD_EVT:\r
+ CHECKED_READ_BUFF(buff);\r
+ memcpy(pcd_event_times, buff, sizeof(pcd_event_times));\r
+ break;\r
+\r
// 32x stuff\r
#ifndef NO_32X\r
case CHUNK_MSH2:\r
\r
case CHUNK_32X_EVT:\r
CHECKED_READ_BUFF(buff);\r
- memcpy(event_times, buff, sizeof(event_times));\r
+ memcpy(p32x_event_times, buff, sizeof(p32x_event_times));\r
break;\r
#endif\r
default:\r
if (PicoAHW & PAHW_SMS)\r
PicoStateLoadedMS();\r
\r
- if (PicoAHW & PAHW_MCD)\r
- {\r
- PicoMemStateLoaded();\r
-\r
- if (!(Pico_mcd->s68k_regs[0x36] & 1) && (Pico_mcd->scd.Status_CDC & 1))\r
- cdda_start_play();\r
- }\r
-\r
if (PicoAHW & PAHW_32X)\r
Pico32xStateLoaded(1);\r
\r
z80_unpack(buff_z80);\r
\r
// due to dep from 68k cycles..\r
+ SekCycleAim = SekCycleCnt;\r
if (PicoAHW & PAHW_32X)\r
Pico32xStateLoaded(0);\r
+ if (PicoAHW & PAHW_MCD)\r
+ {\r
+ SekCycleAimS68k = SekCycleCntS68k;\r
+ pcd_state_loaded();\r
+\r
+ if (!(Pico_mcd->s68k_regs[0x36] & 1) && (Pico_mcd->scd.Status_CDC & 1))\r
+ cdda_start_play();\r
+ }\r
\r
return 0;\r
}\r