/** * Save * @param[in] opna The instance * @param[in] sfh The handle of statsave * @param[in] tbl The item of statsave * @return Error */ int opna_sfsave(PCOPNA opna, STFLAGH sfh, const SFENTRY *tbl) { int ret = statflag_write(sfh, &opna->s, sizeof(opna->s)); if (opna->s.cCaps & OPNA_HAS_ADPCM) { ret |= statflag_write(sfh, &opna->adpcm, sizeof(opna->adpcm)); } return ret; }
static int flagsave_mem(STFLAGH sfh, const SFENTRY *tbl) { int ret; ret = statflag_write(sfh, mem, 0x110000); ret |= statflag_write(sfh, mem + VRAM1_B, 0x18000); ret |= statflag_write(sfh, mem + VRAM1_E, 0x8000); (void)tbl; return(ret); }
static int flagsave_epson(STFLAGH sfh, const SFENTRY *tbl) { int ret; if (!(pccore.model & PCMODEL_EPSON)) { return(STATFLAG_SUCCESS); } ret = statflag_write(sfh, &epsonio, sizeof(epsonio)); ret |= statflag_write(sfh, mem + 0x1c0000, 0x8000); ret |= statflag_write(sfh, mem + 0x1e8000, 0x18000); (void)tbl; return(ret); }
static int flagsave_com(STFLAGH sfh, const SFENTRY *tbl) { UINT device; COMMNG cm; int ret; COMFLAG flag; device = (UINT)(INTPTR)tbl->arg1; switch(device) { case 0: cm = cm_mpu98; break; case 1: cm = cm_rs232c; break; default: cm = NULL; break; } ret = STATFLAG_SUCCESS; if (cm) { flag = (COMFLAG)cm->msg(cm, COMMSG_GETFLAG, 0); if (flag) { ret |= statflag_write(sfh, flag, flag->size); _MFREE(flag); } } return(ret); }
static int flagsave_sxsi(STFLAGH sfh, const SFENTRY *tbl) { int ret; UINT i; SXSIDEVS sds; const OEMCHAR *path; sxsi_allflash(); ret = STATFLAG_SUCCESS; for (i=0; i<NELEMENTS(sds.ide); i++) { sds.ide[i] = sxsi_getdevtype((REG8)i); } for (i=0; i<NELEMENTS(sds.scsi); i++) { sds.scsi[i] = sxsi_getdevtype((REG8)(i + 0x20)); } ret = statflag_write(sfh, &sds, sizeof(sds)); for (i=0; i<NELEMENTS(sds.ide); i++) { if (sds.ide[i] != SXSIDEV_NC) { path = sxsi_getfilename((REG8)i); ret |= statflag_writepath(sfh, path, FTYPE_NONE, 0); } } for (i=0; i<NELEMENTS(sds.scsi); i++) { if (sds.scsi[i] != SXSIDEV_NC) { path = sxsi_getfilename((REG8)(i + 0x20)); ret |= statflag_writepath(sfh, path, FTYPE_NONE, 0); } } (void)tbl; return(ret); }
static int flagsave_egc(STFLAGH sfh, const SFENTRY *tbl) { _EGC egcbak; egcbak = egc; egcbak.inptr -= (INTPTR)egc.buf; egcbak.outptr -= (INTPTR)egc.buf; (void)tbl; return(statflag_write(sfh, &egcbak, sizeof(egcbak))); }
static int flagsave_cgwnd(STFLAGH sfh, const SFENTRY *tbl) { _CGWINDOW cgwnd; cgwnd = cgwindow; cgwnd.fontlow -= (long)fontrom; cgwnd.fonthigh -= (long)fontrom; (void)tbl; return(statflag_write(sfh, &cgwindow, sizeof(cgwindow))); }
static int flagsave_ext(STFLAGH sfh, const SFENTRY *tbl) { int ret; ret = STATFLAG_SUCCESS; if (CPU_EXTMEM) { ret = statflag_write(sfh, CPU_EXTMEM, CPU_EXTMEMSIZE); } (void)tbl; return(ret); }
static int flagsave_dma(STFLAGH sfh, const SFENTRY *tbl) { int i; _DMAC dmabak; dmabak = dmac; for (i=0; i<4; i++) { if ((PROC2NUM(dmabak.dmach[i].proc.outproc, dmaproc)) || (PROC2NUM(dmabak.dmach[i].proc.inproc, dmaproc)) || (PROC2NUM(dmabak.dmach[i].proc.extproc, dmaproc))) { return(STATFLAG_FAILURE); } } (void)tbl; return(statflag_write(sfh, &dmabak, sizeof(dmabak))); }
static int flagsave_gij(STFLAGH sfh, const SFENTRY *tbl) { int ret; int i; int j; const UINT8 *fnt; ret = STATFLAG_SUCCESS; for (i=0; i<2; i++) { fnt = fontrom + ((0x56 + (i << 7)) << 4); for (j=0; j<0x80; j++) { ret |= statflag_write(sfh, fnt, 32); fnt += 0x1000; } } (void)tbl; return(ret); }
static int flagsave_evt(STFLAGH sfh, const SFENTRY *tbl) { NEVTSAVE nevt; int ret; UINT i; nevt.readyevents = g_nevent.readyevents; nevt.waitevents = g_nevent.waitevents; ret = statflag_write(sfh, &nevt, sizeof(nevt)); for (i=0; i<nevt.readyevents; i++) { ret |= nevent_write(sfh, g_nevent.level[i]); } for (i=0; i<nevt.waitevents; i++) { ret |= nevent_write(sfh, g_nevent.waitevent[i]); } (void)tbl; return(ret); }
static int statflag_writepath(STFLAGH sfh, const OEMCHAR *path, UINT ftype, int readonly) { STATPATH sp; FILEH fh; ZeroMemory(&sp, sizeof(sp)); if ((path) && (path[0])) { file_cpyname(sp.path, path, NELEMENTS(sp.path)); sp.ftype = ftype; sp.readonly = readonly; fh = file_open_rb(path); if (fh != FILEH_INVALID) { file_getdatetime(fh, &sp.date, &sp.time); file_close(fh); } } return(statflag_write(sfh, &sp, sizeof(sp))); }
static int nevent_write(STFLAGH sfh, int num) { NEVTITEM nit; UINT i; ZeroMemory(&nit, sizeof(nit)); for (i=0; i<NELEMENTS(evtnum); i++) { if (evtnum[i].num == num) { nit.id = evtnum[i].id; break; } } nit.clock = g_nevent.item[num].clock; nit.flag = g_nevent.item[num].flag; nit.proc = g_nevent.item[num].proc; if (PROC2NUM(nit.proc, evtproc)) { nit.proc = NULL; } return(statflag_write(sfh, &nit, sizeof(nit))); }
static int flagsave_fm(STFLAGH sfh, const SFENTRY *tbl) { int ret; UINT saveflg; OPNKEY opnkey; UINT i; switch(g_usesound) { case 0x01: saveflg = FLAG_MG; break; case 0x02: saveflg = FLAG_FM1A; break; case 0x04: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_RHYTHM | FLAG_PCM86; break; case 0x06: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_FM2A | FLAG_RHYTHM | FLAG_PCM86; break; case 0x08: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_RHYTHM | FLAG_CS4231; break; case 0x14: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_RHYTHM | FLAG_ADPCM | FLAG_PCM86; break; case 0x20: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_RHYTHM | FLAG_ADPCM; break; case 0x40: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_FM2A | FLAG_FM2B | FLAG_RHYTHM | FLAG_ADPCM; break; case 0x80: saveflg = FLAG_PSG1 | FLAG_PSG2 | FLAG_PSG3; break; default: saveflg = 0; break; } ret = statflag_write(sfh, &g_usesound, sizeof(g_usesound)); if (saveflg & FLAG_MG) { ret |= statflag_write(sfh, &g_musicgen, sizeof(g_musicgen)); } if (saveflg & FLAG_FM1A) { ret |= statflag_write(sfh, &g_fmtimer, sizeof(g_fmtimer)); ret |= statflag_write(sfh, &g_opn, sizeof(g_opn)); for (i = 0; i < OPNCH_MAX; i++) { opnkey.keyreg[i] = g_opngen.opnch[i].keyreg; } opnkey.extop[0] = g_opngen.opnch[2].extop; opnkey.extop[1] = g_opngen.opnch[5].extop; opnkey.extop[2] = g_opngen.opnch[8].extop; opnkey.extop[3] = g_opngen.opnch[11].extop; ret |= statflag_write(sfh, &opnkey, sizeof(opnkey)); } if (saveflg & FLAG_PSG1) { ret |= statflag_write(sfh, &g_psg1.reg, sizeof(PSGREG)); } if (saveflg & FLAG_PSG2) { ret |= statflag_write(sfh, &g_psg2.reg, sizeof(PSGREG)); } if (saveflg & FLAG_PSG3) { ret |= statflag_write(sfh, &g_psg3.reg, sizeof(PSGREG)); } if (saveflg & FLAG_ADPCM) { ret |= statflag_write(sfh, &g_adpcm, sizeof(g_adpcm)); } if (saveflg & FLAG_PCM86) { ret |= statflag_write(sfh, &pcm86, sizeof(pcm86)); } if (saveflg & FLAG_CS4231) { ret |= statflag_write(sfh, &cs4231, sizeof(cs4231)); } (void)tbl; return(ret); }
static int flagsave_common(STFLAGH sfh, const SFENTRY *tbl) { return(statflag_write(sfh, tbl->arg1, tbl->arg2)); }