\r
#include "../cpu/sh2/sh2.h"\r
#include "sound/ym2612.h"\r
+#include "state.h"\r
\r
// sn76496\r
extern int *sn76496_regs;\r
\r
-typedef size_t (arearw)(void *p, size_t _size, size_t _n, void *file);\r
-typedef size_t (areaeof)(void *file);\r
-typedef int (areaseek)(void *file, long offset, int whence);\r
-typedef int (areaclose)(void *file);\r
-\r
static arearw *areaRead;\r
static arearw *areaWrite;\r
static areaeof *areaEof;\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
- 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
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
return 0;\r
}\r
\r
-int PicoState(const char *fname, int is_save)\r
+static int pico_state_internal(void *afile, int is_save)\r
{\r
- void *afile = NULL;\r
int ret;\r
\r
- afile = open_save_file(fname, is_save);\r
- if (afile == NULL)\r
- return -1;\r
-\r
if (is_save)\r
ret = state_save(afile);\r
else {\r
Pico.m.dirtyPal = 1;\r
}\r
\r
+ return ret;\r
+}\r
+\r
+int PicoState(const char *fname, int is_save)\r
+{\r
+ void *afile = NULL;\r
+ int ret;\r
+\r
+ afile = open_save_file(fname, is_save);\r
+ if (afile == NULL)\r
+ return -1;\r
+\r
+ ret = pico_state_internal(afile, is_save);\r
areaClose(afile);\r
return ret;\r
}\r
\r
+int PicoStateFP(void *afile, int is_save,\r
+ arearw *read, arearw *write, areaeof *eof, areaseek *seek)\r
+{\r
+ areaRead = read;\r
+ areaWrite = write;\r
+ areaEof = eof;\r
+ areaSeek = seek;\r
+ areaClose = NULL;\r
+\r
+ return pico_state_internal(afile, is_save);\r
+}\r
+\r
int PicoStateLoadGfx(const char *fname)\r
{\r
void *afile;\r