notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cd: prefer model2 bios
[picodrive.git]
/
pico
/
state.c
diff --git
a/pico/state.c
b/pico/state.c
index
3969e18
..
a1ceac2
100644
(file)
--- a/
pico/state.c
+++ b/
pico/state.c
@@
-173,12
+173,15
@@
typedef enum {
CHUNK_32X_EVT,
\r
CHUNK_32X_FIRST = CHUNK_MSH2,
\r
CHUNK_32X_LAST = CHUNK_32X_EVT,
\r
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
+ CHUNK_CD_GFX,
\r
//
\r
CHUNK_DEFAULT_COUNT,
\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
} 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
"INVALID!",
\r
"M68K state",
\r
"RAM",
\r
@@
-235,7
+238,7
@@
static int write_chunk(chunk_name_e name, int len, void *data, void *file)
}
\r
\r
#define CHECKED_WRITE(name,len,data) { \
\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
strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \
\r
PicoStateProgressCB(sbuff); \
\r
} \
\r
@@
-243,7
+246,7
@@
static int write_chunk(chunk_name_e name, int len, void *data, void *file)
}
\r
\r
#define CHECKED_WRITE_BUFF(name,buff) { \
\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
strncpy(sbuff + 9, chunk_names[name], sizeof(sbuff) - 9); \
\r
PicoStateProgressCB(sbuff); \
\r
} \
\r
@@
-256,6
+259,7
@@
static int state_save(void *file)
unsigned char buff[0x60], buff_z80[Z80_STATE_SIZE];
\r
void *ym2612_regs = YM2612GetRegs();
\r
int ver = 0x0170; // not really used..
\r
unsigned char buff[0x60], buff_z80[Z80_STATE_SIZE];
\r
void *ym2612_regs = YM2612GetRegs();
\r
int ver = 0x0170; // not really used..
\r
+ int len;
\r
\r
areaWrite("PicoSEXT", 1, 8, file);
\r
areaWrite(&ver, 1, 4, file);
\r
\r
areaWrite("PicoSEXT", 1, 8, file);
\r
areaWrite(&ver, 1, 4, file);
\r
@@
-290,7
+294,8
@@
static int state_save(void *file)
SekPackCpu(buff, 1);
\r
if (Pico_mcd->s68k_regs[3] & 4) // 1M mode?
\r
wram_1M_to_2M(Pico_mcd->word_ram2M);
\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
\r
CHECKED_WRITE_BUFF(CHUNK_S68K, buff);
\r
CHECKED_WRITE_BUFF(CHUNK_PRG_RAM, Pico_mcd->prg_ram);
\r
@@
-302,8
+307,12
@@
static int state_save(void *file)
CHECKED_WRITE_BUFF(CHUNK_CDD, Pico_mcd->cdd);
\r
CHECKED_WRITE_BUFF(CHUNK_CDC, Pico_mcd->cdc);
\r
CHECKED_WRITE_BUFF(CHUNK_SCD, Pico_mcd->scd);
\r
CHECKED_WRITE_BUFF(CHUNK_CDD, Pico_mcd->cdd);
\r
CHECKED_WRITE_BUFF(CHUNK_CDC, Pico_mcd->cdc);
\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
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
+ len = gfx_context_save(buff);
\r
+ CHECKED_WRITE(CHUNK_CD_GFX, len, buff);
\r
\r
if (Pico_mcd->s68k_regs[3] & 4) // convert back
\r
wram_2M_to_1M(Pico_mcd->word_ram2M);
\r
\r
if (Pico_mcd->s68k_regs[3] & 4) // convert back
\r
wram_2M_to_1M(Pico_mcd->word_ram2M);
\r
@@
-318,13
+327,13
@@
static int state_save(void *file)
\r
sh2_pack(&sh2s[0], cpubuff);
\r
CHECKED_WRITE_BUFF(CHUNK_MSH2, cpubuff);
\r
\r
sh2_pack(&sh2s[0], cpubuff);
\r
CHECKED_WRITE_BUFF(CHUNK_MSH2, cpubuff);
\r
- CHECKED_WRITE_BUFF(CHUNK_MSH2_DATA,
Pico32xMem->data_array[0]
);
\r
- CHECKED_WRITE_BUFF(CHUNK_MSH2_PERI,
Pico32xMem->sh2_peri_regs[0]
);
\r
+ CHECKED_WRITE_BUFF(CHUNK_MSH2_DATA,
sh2s[0].data_array
);
\r
+ CHECKED_WRITE_BUFF(CHUNK_MSH2_PERI,
sh2s[0].peri_regs
);
\r
\r
sh2_pack(&sh2s[1], cpubuff);
\r
CHECKED_WRITE_BUFF(CHUNK_SSH2, cpubuff);
\r
\r
sh2_pack(&sh2s[1], cpubuff);
\r
CHECKED_WRITE_BUFF(CHUNK_SSH2, cpubuff);
\r
- CHECKED_WRITE_BUFF(CHUNK_SSH2_DATA,
Pico32xMem->data_array[1]
);
\r
- CHECKED_WRITE_BUFF(CHUNK_SSH2_PERI,
Pico32xMem->sh2_peri_regs[1]
);
\r
+ CHECKED_WRITE_BUFF(CHUNK_SSH2_DATA,
sh2s[1].data_array
);
\r
+ CHECKED_WRITE_BUFF(CHUNK_SSH2_PERI,
sh2s[1].peri_regs
);
\r
\r
CHECKED_WRITE_BUFF(CHUNK_32XSYS, Pico32x);
\r
CHECKED_WRITE_BUFF(CHUNK_M68K_BIOS, Pico32xMem->m68k_rom);
\r
\r
CHECKED_WRITE_BUFF(CHUNK_32XSYS, Pico32x);
\r
CHECKED_WRITE_BUFF(CHUNK_M68K_BIOS, Pico32xMem->m68k_rom);
\r
@@
-335,7
+344,7
@@
static int state_save(void *file)
CHECKED_WRITE_BUFF(CHUNK_32XPAL, Pico32xMem->pal);
\r
\r
memset(buff, 0, 0x40);
\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
CHECKED_WRITE(CHUNK_32X_EVT, 0x40, buff);
\r
}
\r
#endif
\r
@@
-402,6
+411,9
@@
static int state_load(void *file)
R_ERROR_RETURN("bad header");
\r
CHECKED_READ(4, &ver);
\r
\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
while (!areaEof(file))
\r
{
\r
CHECKED_READ(1, &chunk);
\r
@@
-455,9
+467,18
@@
static int state_load(void *file)
case CHUNK_CDD: CHECKED_READ_BUFF(Pico_mcd->cdd); break;
\r
case CHUNK_CDC: CHECKED_READ_BUFF(Pico_mcd->cdc); break;
\r
case CHUNK_SCD: CHECKED_READ_BUFF(Pico_mcd->scd); break;
\r
case CHUNK_CDD: CHECKED_READ_BUFF(Pico_mcd->cdd); break;
\r
case CHUNK_CDC: CHECKED_READ_BUFF(Pico_mcd->cdc); break;
\r
case CHUNK_SCD: CHECKED_READ_BUFF(Pico_mcd->scd); break;
\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_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
+ case CHUNK_CD_GFX:
\r
+ CHECKED_READ2(0x18, buff);
\r
+ gfx_context_load(buff);
\r
+ break;
\r
+
\r
// 32x stuff
\r
#ifndef NO_32X
\r
case CHUNK_MSH2:
\r
// 32x stuff
\r
#ifndef NO_32X
\r
case CHUNK_MSH2:
\r
@@
-470,10
+491,10
@@
static int state_load(void *file)
sh2_unpack(&sh2s[1], buff_sh2);
\r
break;
\r
\r
sh2_unpack(&sh2s[1], buff_sh2);
\r
break;
\r
\r
- case CHUNK_MSH2_DATA: CHECKED_READ_BUFF(
Pico32xMem->data_array[0]
); break;
\r
- case CHUNK_MSH2_PERI: CHECKED_READ_BUFF(
Pico32xMem->sh2_peri_regs[0]
); break;
\r
- case CHUNK_SSH2_DATA: CHECKED_READ_BUFF(
Pico32xMem->data_array[1]
); break;
\r
- case CHUNK_SSH2_PERI: CHECKED_READ_BUFF(
Pico32xMem->sh2_peri_regs[1]
); break;
\r
+ case CHUNK_MSH2_DATA: CHECKED_READ_BUFF(
sh2s[0].data_array
); break;
\r
+ case CHUNK_MSH2_PERI: CHECKED_READ_BUFF(
sh2s[0].peri_regs
); break;
\r
+ case CHUNK_SSH2_DATA: CHECKED_READ_BUFF(
sh2s[1].data_array
); break;
\r
+ case CHUNK_SSH2_PERI: CHECKED_READ_BUFF(
sh2s[1].peri_regs
); break;
\r
case CHUNK_32XSYS: CHECKED_READ_BUFF(Pico32x); break;
\r
case CHUNK_M68K_BIOS: CHECKED_READ_BUFF(Pico32xMem->m68k_rom); break;
\r
case CHUNK_MSH2_BIOS: CHECKED_READ_BUFF(Pico32xMem->sh2_rom_m); break;
\r
case CHUNK_32XSYS: CHECKED_READ_BUFF(Pico32x); break;
\r
case CHUNK_M68K_BIOS: CHECKED_READ_BUFF(Pico32xMem->m68k_rom); break;
\r
case CHUNK_MSH2_BIOS: CHECKED_READ_BUFF(Pico32xMem->sh2_rom_m); break;
\r
@@
-484,7
+505,7
@@
static int state_load(void *file)
\r
case CHUNK_32X_EVT:
\r
CHECKED_READ_BUFF(buff);
\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
break;
\r
#endif
\r
default:
\r
@@
-509,14
+530,6
@@
readend:
if (PicoAHW & PAHW_SMS)
\r
PicoStateLoadedMS();
\r
\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
if (PicoAHW & PAHW_32X)
\r
Pico32xStateLoaded(1);
\r
\r
@@
-529,8
+542,17
@@
readend:
z80_unpack(buff_z80);
\r
\r
// due to dep from 68k cycles..
\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_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
\r
return 0;
\r
}
\r