notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
new timing for main and cd
[picodrive.git]
/
pico
/
state.c
diff --git
a/pico/state.c
b/pico/state.c
index
de2d8ab
..
a369597
100644
(file)
--- a/
pico/state.c
+++ b/
pico/state.c
@@
-173,9
+173,11
@@
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
//
\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
static const char * const chunk_names[] = {
\r
} chunk_name_e;
\r
\r
static const char * const chunk_names[] = {
\r
@@
-290,7
+292,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
@@
-304,6
+307,9
@@
static int state_save(void *file)
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_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
\r
if (Pico_mcd->s68k_regs[3] & 4) // convert back
\r
wram_2M_to_1M(Pico_mcd->word_ram2M);
\r
@@
-335,7
+341,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
+408,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
@@
-458,6
+467,11
@@
static int state_load(void *file)
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_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
// 32x stuff
\r
#ifndef NO_32X
\r
case CHUNK_MSH2:
\r
@@
-484,7
+498,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
+523,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
+535,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