Diff for /np2/statsave.c between versions 1.13 and 1.25

version 1.13, 2003/10/25 09:08:24 version 1.25, 2004/01/05 09:31:24
Line 4 Line 4
 #include        "scrnmng.h"  #include        "scrnmng.h"
 #include        "soundmng.h"  #include        "soundmng.h"
 #include        "timemng.h"  #include        "timemng.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "memory.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "cbuscore.h"  #include        "cbuscore.h"
 #include        "pc9861k.h"  #include        "pc9861k.h"
 #include        "mpu98ii.h"  #include        "mpu98ii.h"
 #include        "board14.h"  #include        "board14.h"
   #include        "amd98.h"
 #include        "bios.h"  #include        "bios.h"
 #include        "vram.h"  #include        "vram.h"
 #include        "palettes.h"  #include        "palettes.h"
Line 28 Line 28
 #include        "keydisp.h"  #include        "keydisp.h"
   
   
   #if defined(MACOS)
   #define CRLITERAL       "\r"
   #define CRCONST         str_cr
   #elif defined(WIN32) || defined(X11) || defined(SLZAURUS)
   #define CRLITERAL       "\n"
   #define CRCONST         str_lf
   #else
   #define CRLITERAL       "\r\n"
   #define CRCONST         str_crlf
   #endif
   
   
 typedef struct {  typedef struct {
         char    name[16];          char    name[16];
         char    vername[28];          char    vername[28];
Line 43  typedef struct { Line 55  typedef struct {
 enum {  enum {
         NP2FLAG_BIN                     = 0,          NP2FLAG_BIN                     = 0,
         NP2FLAG_TERM,          NP2FLAG_TERM,
   #if defined(CGWND_FONTPTR)
           NP2FLAG_CGW,
   #endif
         NP2FLAG_CLOCK,          NP2FLAG_CLOCK,
           NP2FLAG_COM,
           NP2FLAG_DISK,
         NP2FLAG_DMA,          NP2FLAG_DMA,
         NP2FLAG_EGC,          NP2FLAG_EGC,
         NP2FLAG_EXT,          NP2FLAG_EPSON,
         NP2FLAG_EVT,          NP2FLAG_EVT,
         NP2FLAG_GIJ,          NP2FLAG_EXT,
         NP2FLAG_FM,          NP2FLAG_FM,
         NP2FLAG_COM,          NP2FLAG_GIJ,
         NP2FLAG_DISK          NP2FLAG_MEM
 };  };
   
 typedef struct {  typedef struct {
Line 89  typedef struct { Line 106  typedef struct {
   
 static void err_append(ERR_BUF *e, char *buf) {  static void err_append(ERR_BUF *e, char *buf) {
   
           int             len;
   
         if ((e) && (buf)) {          if ((e) && (buf)) {
                 if (e->buf) {                  if (e->buf) {
                         int len;  
                         len = strlen(buf);                          len = strlen(buf);
                         if (e->remain >= len) {                          if (e->remain >= len) {
                                 CopyMemory(e->buf, buf, len);                                  CopyMemory(e->buf, buf, len);
Line 323  static int flagsave_term(NP2FFILE f, con Line 341  static int flagsave_term(NP2FFILE f, con
 }  }
   
   
 // ----  // ---- common
   
 static int flagsave_common(NP2FFILE f, const STENTRY *t) {  static int flagsave_common(NP2FFILE f, const STENTRY *t) {
   
Line 343  static int flagload_common(NP2FFILE f, c Line 361  static int flagload_common(NP2FFILE f, c
 }  }
   
   
 // -----  // ----- clock
   
 static int flagload_clock(NP2FFILE f, const STENTRY *t) {  static int flagload_clock(NP2FFILE f, const STENTRY *t) {
   
Line 356  static int flagload_clock(NP2FFILE f, co Line 374  static int flagload_clock(NP2FFILE f, co
 }  }
   
   
 // -----  // ---- memory
   
   static int flagsave_mem(NP2FFILE f, const STENTRY *t) {
   
           int             ret;
   
           ret = flagsave_create(f, t);
           if (ret != NP2FLAG_FAILURE) {
                   ret |= flagsave_save(f, mem, 0x110000);
                   ret |= flagsave_save(f, mem + VRAM1_B, 0x18000);
                   ret |= flagsave_save(f, mem + VRAM1_E, 0x8000);
                   ret |= flagsave_close(f);
           }
           return(ret);
   }
   
   static int flagload_mem(NP2FFILE f, const STENTRY *t) {
   
           int             ret;
   
           ret = flagload_load(f, mem, 0x110000);
           ret |= flagload_load(f, mem + VRAM1_B, 0x18000);
           ret |= flagload_load(f, mem + VRAM1_E, 0x8000);
           (void)t;
           return(ret);
   }
   
   
   // ---- ext memory
   
   static int flagsave_ext(NP2FFILE f, const STENTRY *t) {
   
           int             ret;
   
           ret = flagsave_create(f, t);
           if (ret != NP2FLAG_FAILURE) {
                   ret |= flagsave_save(f, &extmem, sizeof(extmem));
                   if (CPU_EXTMEM) {
                           ret |= flagsave_save(f, CPU_EXTMEM, CPU_EXTMEMSIZE);
                   }
                   ret |= flagsave_close(f);
           }
           return(ret);
   }
   
   static int flagload_ext(NP2FFILE f, const STENTRY *t) {
   
           int             ret;
           int             i;
           UINT    pagemax = 0;
   
           ret = flagload_load(f, &extmem, sizeof(extmem));
           if (extmem.maxmem) {
                   if (extmem.maxmem > (13+1)) {
                           extmem.maxmem = (13+1);
                   }
                   if (!extmemmng_realloc(extmem.maxmem - 1)) {
                           pagemax = (extmem.maxmem - 1) << 8;
                           if (CPU_EXTMEM) {
                                   ret |= flagload_load(f, CPU_EXTMEM, CPU_EXTMEMSIZE);
                           }
                   }
                   else {
                           extmem.maxmem = 0;
                   }
           }
           for (i=0; i<4; i++) {
                   if (extmem.page[i] < pagemax) {
                           extmem.pageptr[i] = CPU_EXTMEM + (extmem.page[i] << 12);
                   }
                   else {
                           extmem.pageptr[i] = mem + 0xc0000 + (i << 14);
                   }
           }
           (void)t;
           return(ret);
   }
   
   
   // ---- cg window
   
   #if defined(CGWND_FONTPTR)
   static int flagsave_cgwnd(NP2FFILE f, const STENTRY *t) {
   
           int                     ret;
           _CGWINDOW       cgwnd;
   
           cgwnd = cgwindow;
           cgwnd.fontlow -= (long)fontrom;
           cgwnd.fonthigh -= (long)fontrom;
           ret = flagsave_create(f, t);
           if (ret != NP2FLAG_FAILURE) {
                   ret |= flagsave_save(f, &cgwindow, sizeof(cgwindow));
                   ret |= flagsave_close(f);
           }
           return(ret);
   }
   
   static int flagload_cgwnd(NP2FFILE f, const STENTRY *t) {
   
           int             ret;
   
           ret = flagload_load(f, &cgwindow, sizeof(cgwindow));
           cgwindow.fontlow += (long)fontrom;
           cgwindow.fonthigh += (long)fontrom;
           (void)t;
           return(ret);
   }
   #endif
   
   
   // ---- dma
   
 static int flagsave_dma(NP2FFILE f, const STENTRY *t) {  static int flagsave_dma(NP2FFILE f, const STENTRY *t) {
   
Line 366  static int flagsave_dma(NP2FFILE f, cons Line 495  static int flagsave_dma(NP2FFILE f, cons
   
         dmabak = dmac;          dmabak = dmac;
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 if ((PROC2NUM(dmabak.dmach[i].outproc, dmaproc)) ||                  if ((PROC2NUM(dmabak.dmach[i].proc.outproc, dmaproc)) ||
                         (PROC2NUM(dmabak.dmach[i].inproc, dmaproc)) ||                          (PROC2NUM(dmabak.dmach[i].proc.inproc, dmaproc)) ||
                         (PROC2NUM(dmabak.dmach[i].extproc, dmaproc))) {                          (PROC2NUM(dmabak.dmach[i].proc.extproc, dmaproc))) {
                         return(NP2FLAG_FAILURE);                          return(NP2FLAG_FAILURE);
                 }                  }
         }          }
Line 388  static int flagload_dma(NP2FFILE f, cons Line 517  static int flagload_dma(NP2FFILE f, cons
         ret = flagload_load(f, &dmac, sizeof(dmac));          ret = flagload_load(f, &dmac, sizeof(dmac));
   
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 if (NUM2PROC(dmac.dmach[i].outproc, dmaproc)) {                  if (NUM2PROC(dmac.dmach[i].proc.outproc, dmaproc)) {
                         dmac.dmach[i].outproc = dma_dummyout;                          dmac.dmach[i].proc.outproc = dma_dummyout;
                         ret |= NP2FLAG_WARNING;                          ret |= NP2FLAG_WARNING;
                 }                  }
                 if (NUM2PROC(dmac.dmach[i].inproc, dmaproc)) {                  if (NUM2PROC(dmac.dmach[i].proc.inproc, dmaproc)) {
                         dmac.dmach[i].inproc = dma_dummyin;                          dmac.dmach[i].proc.inproc = dma_dummyin;
                         ret |= NP2FLAG_WARNING;                          ret |= NP2FLAG_WARNING;
                 }                  }
                 if (NUM2PROC(dmac.dmach[i].extproc, dmaproc)) {                  if (NUM2PROC(dmac.dmach[i].proc.extproc, dmaproc)) {
                         dmac.dmach[i].extproc = dma_dummyproc;                          dmac.dmach[i].proc.extproc = dma_dummyproc;
                         ret |= NP2FLAG_WARNING;                          ret |= NP2FLAG_WARNING;
                 }                  }
         }          }
Line 406  static int flagload_dma(NP2FFILE f, cons Line 535  static int flagload_dma(NP2FFILE f, cons
 }  }
   
   
 // -----  // ---- egc
   
 static int flagsave_egc(NP2FFILE f, const STENTRY *t) {  static int flagsave_egc(NP2FFILE f, const STENTRY *t) {
   
Line 437  static int flagload_egc(NP2FFILE f, cons Line 566  static int flagload_egc(NP2FFILE f, cons
 }  }
   
   
 // -----  // ---- epson
   
 static int flagsave_ext(NP2FFILE f, const STENTRY *t) {  static int flagsave_epson(NP2FFILE f, const STENTRY *t) {
   
         int             ret;          int             ret;
   
           if (!(pc.model & PCMODEL_EPSON)) {
                   return(NP2FLAG_SUCCESS);
           }
         ret = flagsave_create(f, t);          ret = flagsave_create(f, t);
         if (ret != NP2FLAG_FAILURE) {          if (ret != NP2FLAG_FAILURE) {
                 ret |= flagsave_save(f, &extmem, sizeof(extmem));                  ret |= flagsave_save(f, &epsonio, sizeof(epsonio));
                 if (extmemmng_size) {                  ret |= flagsave_save(f, mem + 0x1c0000, 0x8000);
                         ret |= flagsave_save(f, extmemmng_ptr, extmemmng_size);                  ret |= flagsave_save(f, mem + 0x1e8000, 0x18000);
                 }  
                 ret |= flagsave_close(f);                  ret |= flagsave_close(f);
         }          }
         return(ret);          return(ret);
 }  }
   
 static int flagload_ext(NP2FFILE f, const STENTRY *t) {  static int flagload_epson(NP2FFILE f, const STENTRY *t) {
   
         int             ret;          int             ret;
         int             i;  
         UINT    pagemax = 0;  
   
         ret = flagload_load(f, &extmem, sizeof(extmem));          ret = flagload_load(f, &epsonio, sizeof(epsonio));
         if (extmem.maxmem) {          ret |= flagload_load(f, mem + 0x1c0000, 0x8000);
                 if (extmem.maxmem > (13+1)) {          ret |= flagload_load(f, mem + 0x1e8000, 0x18000);
                         extmem.maxmem = (13+1);  
                 }  
                 if (!extmemmng_realloc(extmem.maxmem - 1)) {  
                         pagemax = (extmem.maxmem - 1) << 8;  
                         if (extmemmng_size) {  
                                 ret |= flagload_load(f, extmemmng_ptr, extmemmng_size);  
                         }  
                 }  
                 else {  
                         extmem.maxmem = 0;  
                 }  
         }  
         for (i=0; i<4; i++) {  
                 if (extmem.page[i] < pagemax) {  
                         extmem.pageptr[i] = extmemmng_ptr + (extmem.page[i] << 12);  
                 }  
                 else {  
                         extmem.pageptr[i] = mem + 0xc0000 + (i << 14);  
                 }  
         }  
         (void)t;          (void)t;
         return(ret);          return(ret);
 }  }
   
   
 // -----  // ---- event
   
 typedef struct {  typedef struct {
         UINT            readyevents;          UINT            readyevents;
Line 601  static int flagload_evt(NP2FFILE f, cons Line 710  static int flagload_evt(NP2FFILE f, cons
 }  }
   
   
 // ----  // ---- gaiji
   
 static int flagsave_gij(NP2FFILE f, const STENTRY *t) {  static int flagsave_gij(NP2FFILE f, const STENTRY *t) {
   
Line 613  static int flagsave_gij(NP2FFILE f, cons Line 722  static int flagsave_gij(NP2FFILE f, cons
         ret = flagsave_create(f, t);          ret = flagsave_create(f, t);
         if (ret != NP2FLAG_FAILURE) {          if (ret != NP2FLAG_FAILURE) {
                 for (i=0; i<2; i++) {                  for (i=0; i<2; i++) {
                         fnt = font + ((0x56 + (i << 7)) << 4);                          fnt = fontrom + ((0x56 + (i << 7)) << 4);
                         for (j=0; j<0x80; j++) {                          for (j=0; j<0x80; j++) {
                                 ret |= flagsave_save(f, fnt, 32);                                  ret |= flagsave_save(f, fnt, 32);
                                 fnt += 0x1000;                                  fnt += 0x1000;
Line 633  static int flagload_gij(NP2FFILE f, cons Line 742  static int flagload_gij(NP2FFILE f, cons
   
         ret = 0;          ret = 0;
         for (i=0; i<2; i++) {          for (i=0; i<2; i++) {
                 fnt = font + ((0x56 + (i << 7)) << 4);                  fnt = fontrom + ((0x56 + (i << 7)) << 4);
                 for (j=0; j<0x80; j++) {                  for (j=0; j<0x80; j++) {
                         ret |= flagload_load(f, fnt, 32);                          ret |= flagload_load(f, fnt, 32);
                         fnt += 0x1000;                          fnt += 0x1000;
Line 644  static int flagload_gij(NP2FFILE f, cons Line 753  static int flagload_gij(NP2FFILE f, cons
 }  }
   
   
 // -----  // ---- FM
   
 enum {  enum {
         FLAG_MG                 = 0x0001,          FLAG_MG                 = 0x0001,
Line 654  enum { Line 763  enum {
         FLAG_FM2B               = 0x0010,          FLAG_FM2B               = 0x0010,
         FLAG_PSG1               = 0x0020,          FLAG_PSG1               = 0x0020,
         FLAG_PSG2               = 0x0040,          FLAG_PSG2               = 0x0040,
         FLAG_RHYTHM             = 0x0080,          FLAG_PSG3               = 0x0080,
         FLAG_ADPCM              = 0x0100,          FLAG_RHYTHM             = 0x0100,
         FLAG_PCM86              = 0x0200,          FLAG_ADPCM              = 0x0200,
         FLAG_CS4231             = 0x0400          FLAG_PCM86              = 0x0400,
           FLAG_CS4231             = 0x0800
 };  };
   
 typedef struct {  typedef struct {
Line 710  static int flagsave_fm(NP2FFILE f, const Line 820  static int flagsave_fm(NP2FFILE f, const
                                                                                 FLAG_PSG1 | FLAG_RHYTHM | FLAG_ADPCM;                                                                                  FLAG_PSG1 | FLAG_RHYTHM | FLAG_ADPCM;
                         break;                          break;
   
                   case 0x80:
                           saveflg = FLAG_PSG1 | FLAG_PSG2 | FLAG_PSG3;
                           break;
   
                 default:                  default:
                         saveflg = 0;                          saveflg = 0;
                         break;                          break;
Line 738  static int flagsave_fm(NP2FFILE f, const Line 852  static int flagsave_fm(NP2FFILE f, const
                 if (saveflg & FLAG_PSG2) {                  if (saveflg & FLAG_PSG2) {
                         ret |= flagsave_save(f, &psg2.reg, sizeof(PSGREG));                          ret |= flagsave_save(f, &psg2.reg, sizeof(PSGREG));
                 }                  }
                   if (saveflg & FLAG_PSG3) {
                           ret |= flagsave_save(f, &psg3.reg, sizeof(PSGREG));
                   }
                 if (saveflg & FLAG_ADPCM) {                  if (saveflg & FLAG_ADPCM) {
                         ret |= flagsave_save(f, &adpcm, sizeof(adpcm));                          ret |= flagsave_save(f, &adpcm, sizeof(adpcm));
                 }                  }
Line 752  static int flagsave_fm(NP2FFILE f, const Line 869  static int flagsave_fm(NP2FFILE f, const
         return(ret);          return(ret);
 }  }
   
 static void play_fmreg(BYTE num) {  static void play_fmreg(BYTE num, UINT reg) {
   
         UINT    chbase;          UINT    chbase;
         UINT    reg;  
         UINT    i;          UINT    i;
   
         chbase = num * 3;          chbase = num * 3;
         reg = num * 0x100;  
         for (i=0x30; i<0xa0; i++) {          for (i=0x30; i<0xa0; i++) {
                 opngen_setreg((BYTE)chbase, (BYTE)i, opn.reg[reg + i]);                  opngen_setreg((BYTE)chbase, (BYTE)i, opn.reg[reg + i]);
         }          }
Line 785  static int flagload_fm(NP2FFILE f, const Line 900  static int flagload_fm(NP2FFILE f, const
         int             ret;          int             ret;
         UINT    saveflg;          UINT    saveflg;
         OPNKEY  opnkey;          OPNKEY  opnkey;
           UINT    fmreg1a;
           UINT    fmreg1b;
           UINT    fmreg2a;
           UINT    fmreg2b;
   
         opngen_reset();          opngen_reset();
         psggen_reset(&psg1);          psggen_reset(&psg1);
Line 798  static int flagload_fm(NP2FFILE f, const Line 917  static int flagload_fm(NP2FFILE f, const
         ret = flagload_load(f, &usesound, sizeof(usesound));          ret = flagload_load(f, &usesound, sizeof(usesound));
         fmboard_reset((BYTE)usesound);          fmboard_reset((BYTE)usesound);
   
           fmreg1a = 0x000;
           fmreg1b = 0x100;
           fmreg2a = 0x200;
           fmreg2b = 0x300;
         switch(usesound) {          switch(usesound) {
                 case 0x01:                  case 0x01:
                         saveflg = FLAG_MG;                          saveflg = FLAG_MG;
Line 815  static int flagload_fm(NP2FFILE f, const Line 938  static int flagload_fm(NP2FFILE f, const
                 case 0x06:                  case 0x06:
                         saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_FM2A | FLAG_PSG1 |                          saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_FM2A | FLAG_PSG1 |
                                                                                 FLAG_PSG2 | FLAG_RHYTHM | FLAG_PCM86;                                                                                  FLAG_PSG2 | FLAG_RHYTHM | FLAG_PCM86;
                           fmreg1a = 0x200;        // 逆転してるのん…
                           fmreg1b = 0x000;
                           fmreg2a = 0x100;
                         break;                          break;
   
                 case 0x08:                  case 0x08:
Line 837  static int flagload_fm(NP2FFILE f, const Line 963  static int flagload_fm(NP2FFILE f, const
                                                                                 FLAG_PSG1 | FLAG_RHYTHM | FLAG_ADPCM;                                                                                  FLAG_PSG1 | FLAG_RHYTHM | FLAG_ADPCM;
                         break;                          break;
   
                   case 0x80:
                           saveflg = FLAG_PSG1 | FLAG_PSG2 | FLAG_PSG3;
                           break;
   
                 default:                  default:
                         saveflg = 0;                          saveflg = 0;
                         break;                          break;
Line 863  static int flagload_fm(NP2FFILE f, const Line 993  static int flagload_fm(NP2FFILE f, const
         if (saveflg & FLAG_PSG2) {          if (saveflg & FLAG_PSG2) {
                 ret |= flagload_load(f, &psg2.reg, sizeof(PSGREG));                  ret |= flagload_load(f, &psg2.reg, sizeof(PSGREG));
         }          }
           if (saveflg & FLAG_PSG3) {
                   ret |= flagload_load(f, &psg3.reg, sizeof(PSGREG));
           }
         if (saveflg & FLAG_ADPCM) {          if (saveflg & FLAG_ADPCM) {
                 ret |= flagload_load(f, &adpcm, sizeof(adpcm));                  ret |= flagload_load(f, &adpcm, sizeof(adpcm));
         }          }
Line 886  static int flagload_fm(NP2FFILE f, const Line 1019  static int flagload_fm(NP2FFILE f, const
         }          }
   
         if (saveflg & FLAG_FM1A) {          if (saveflg & FLAG_FM1A) {
                 play_fmreg(0);                  play_fmreg(0, fmreg1a);
         }          }
         if (saveflg & FLAG_FM1B) {          if (saveflg & FLAG_FM1B) {
                 play_fmreg(1);                  play_fmreg(1, fmreg1b);
         }          }
         if (saveflg & FLAG_FM2A) {          if (saveflg & FLAG_FM2A) {
                 play_fmreg(2);                  play_fmreg(2, fmreg2a);
         }          }
         if (saveflg & FLAG_FM2B) {          if (saveflg & FLAG_FM2B) {
                 play_fmreg(3);                  play_fmreg(3, fmreg2b);
         }          }
         if (saveflg & FLAG_PSG1) {          if (saveflg & FLAG_PSG1) {
                 play_psgreg(&psg1);                  play_psgreg(&psg1);
Line 903  static int flagload_fm(NP2FFILE f, const Line 1036  static int flagload_fm(NP2FFILE f, const
         if (saveflg & FLAG_PSG2) {          if (saveflg & FLAG_PSG2) {
                 play_psgreg(&psg2);                  play_psgreg(&psg2);
         }          }
           if (saveflg & FLAG_PSG3) {
                   play_psgreg(&psg3);
           }
         (void)t;          (void)t;
         return(ret);          return(ret);
 }  }
Line 917  typedef struct { Line 1053  typedef struct {
         DOSTIME time;          DOSTIME time;
 } STATDISK;  } STATDISK;
   
   static const char str_fddx[] = "FDD%u";
   static const char str_sasix[] = "SASI%u";
   static const char str_scsix[] = "SCSI%u";
   static const char str_updated[] = "%s: updated" CRLITERAL;
   static const char str_notfound[] = "%s: not found" CRLITERAL;
   
 static int disksave(NP2FFILE f, const char *path, int readonly) {  static int disksave(NP2FFILE f, const char *path, int readonly) {
   
         STATDISK        st;          STATDISK        st;
Line 975  static int diskcheck(NP2FFILE f, const c Line 1117  static int diskcheck(NP2FFILE f, const c
                         if ((memcmp(&st.date, &date, sizeof(date))) ||                          if ((memcmp(&st.date, &date, sizeof(date))) ||
                                 (memcmp(&st.time, &time, sizeof(time)))) {                                  (memcmp(&st.time, &time, sizeof(time)))) {
                                 ret |= NP2FLAG_DISKCHG;                                  ret |= NP2FLAG_DISKCHG;
                                 SPRINTF(buf, "%s: updated\n", name);                                  SPRINTF(buf, str_updated, name);
                                 err_append(e, buf);                                  err_append(e, buf);
                         }                          }
                 }                  }
                 else {                  else {
                         ret |= NP2FLAG_DISKCHG;                          ret |= NP2FLAG_DISKCHG;
                         SPRINTF(buf, "%s: not found\n", name);                          SPRINTF(buf, str_notfound, name);
                         err_append(e, buf);                          err_append(e, buf);
                 }                  }
         }          }
Line 996  static int flagcheck_disk(NP2FFILE f, co Line 1138  static int flagcheck_disk(NP2FFILE f, co
   
         ret = 0;          ret = 0;
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 SPRINTF(buf, "FDD%d", i+1);                  SPRINTF(buf, str_fddx, i+1);
                 ret |= diskcheck(f, buf, e);                  ret |= diskcheck(f, buf, e);
         }          }
         sxsi_flash();          sxsi_flash();
         for (i=0; i<2; i++) {          for (i=0; i<2; i++) {
                 SPRINTF(buf, "SASI%u", i+1);                  SPRINTF(buf, str_sasix, i+1);
                 ret |= diskcheck(f, buf, e);                  ret |= diskcheck(f, buf, e);
         }          }
         for (i=0; i<2; i++) {          for (i=0; i<2; i++) {
                 SPRINTF(buf, "SCSI%d", i+1);                  SPRINTF(buf, str_scsix, i+1);
                 ret |= diskcheck(f, buf, e);                  ret |= diskcheck(f, buf, e);
         }          }
         (void)t;          (void)t;
Line 1045  static int flagload_disk(NP2FFILE f, con Line 1187  static int flagload_disk(NP2FFILE f, con
 }  }
   
   
 // -----  // ---- com
   
 static int flagsave_com(NP2FFILE f, const STENTRY *t) {  static int flagsave_com(NP2FFILE f, const STENTRY *t) {
   
Line 1171  int statsave_save(const char *filename)  Line 1313  int statsave_save(const char *filename) 
   
         _NP2FFILE       f;          _NP2FFILE       f;
         int                     ret;          int                     ret;
         UINT            i;  const STENTRY   *tbl;
   const STENTRY   *tblterm;
   
         ret = flagcreate(&f, filename);          ret = flagcreate(&f, filename);
         if (ret == NP2FLAG_FAILURE) {          if (ret == NP2FLAG_FAILURE) {
                 return(ret);                  return(ret);
         }          }
         for (i=0; i<sizeof(np2tbl)/sizeof(STENTRY); i++) {          tbl = np2tbl;
                 switch(np2tbl[i].type) {          tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY));
           while(tbl < tblterm) {
                   switch(tbl->type) {
                         case NP2FLAG_BIN:                          case NP2FLAG_BIN:
                         case NP2FLAG_CLOCK:                          case NP2FLAG_CLOCK:
                                 ret |= flagsave_common(&f, &np2tbl[i]);                                  ret |= flagsave_common(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_TERM:                          case NP2FLAG_TERM:
                                 ret |= flagsave_term(&f, &np2tbl[i]);                                  ret |= flagsave_term(&f, tbl);
                                   break;
   
   #if defined(CGWND_FONTPTR)
                           case NP2FLAG_CGW:
                                   ret |= flagsave_cgwnd(&f, tbl);
                                   break;
   #endif
   
                           case NP2FLAG_COM:
                                   ret |= flagsave_com(&f, tbl);
                                   break;
   
                           case NP2FLAG_DISK:
                                   ret |= flagsave_disk(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_DMA:                          case NP2FLAG_DMA:
                                 ret |= flagsave_dma(&f, &np2tbl[i]);                                  ret |= flagsave_dma(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_EGC:                          case NP2FLAG_EGC:
                                 ret |= flagsave_egc(&f, &np2tbl[i]);                                  ret |= flagsave_egc(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_EXT:                          case NP2FLAG_EPSON:
                                 ret |= flagsave_ext(&f, &np2tbl[i]);                                  ret |= flagsave_epson(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_EVT:                          case NP2FLAG_EVT:
                                 ret |= flagsave_evt(&f, &np2tbl[i]);                                  ret |= flagsave_evt(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_GIJ:                          case NP2FLAG_EXT:
                                 ret |= flagsave_gij(&f, &np2tbl[i]);                                  ret |= flagsave_ext(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_FM:                          case NP2FLAG_FM:
                                 ret |= flagsave_fm(&f, &np2tbl[i]);                                  ret |= flagsave_fm(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_DISK:                          case NP2FLAG_GIJ:
                                 ret |= flagsave_disk(&f, &np2tbl[i]);                                  ret |= flagsave_gij(&f, tbl);
                                 break;                                  break;
   
                         case NP2FLAG_COM:                          case NP2FLAG_MEM:
                                 ret |= flagsave_com(&f, &np2tbl[i]);                                  ret |= flagsave_mem(&f, tbl);
                                 break;                                  break;
                 }                  }
                   tbl++;
         }          }
         flagclose(&f);          flagclose(&f);
         return(ret);          return(ret);
Line 1227  int statsave_save(const char *filename)  Line 1387  int statsave_save(const char *filename) 
   
 int statsave_check(const char *filename, char *buf, int size) {  int statsave_check(const char *filename, char *buf, int size) {
   
           ERR_BUF         e;
         _NP2FFILE       f;          _NP2FFILE       f;
         int                     ret;          int                     ret;
         UINT            i;  
         BOOL            done;          BOOL            done;
         ERR_BUF         e;  const STENTRY   *tbl;
   const STENTRY   *tblterm;
   
         e.buf = buf;          e.buf = buf;
         e.remain = size;          e.remain = size;
Line 1253  int statsave_check(const char *filename, Line 1414  int statsave_check(const char *filename,
                         ret |= flagload_create(&f);                          ret |= flagload_create(&f);
                         CopyMemory(index, f.p.index, sizeof(f.p.index));                          CopyMemory(index, f.p.index, sizeof(f.p.index));
                         index[10] = 0;                          index[10] = 0;
                         for (i=0; i<sizeof(np2tbl)/sizeof(STENTRY); i++) {                          tbl = np2tbl;
                                 if (!strcmp(index, np2tbl[i].index)) {                          tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY));
                           while(tbl < tblterm) {
                                   if (!strcmp(index, tbl->index)) {
                                         break;                                          break;
                                 }                                  }
                                   tbl++;
                         }                          }
                         if (i < (sizeof(np2tbl)/sizeof(STENTRY))) {                          if (tbl < tblterm) {
                                 switch(np2tbl[i].type) {                                  switch(tbl->type) {
                                         case NP2FLAG_BIN:                                          case NP2FLAG_BIN:
   #if defined(CGWND_FONTPTR)
                                           case NP2FLAG_CGW:
   #endif
                                         case NP2FLAG_CLOCK:                                          case NP2FLAG_CLOCK:
                                                 ret |= flagcheck_versize(&f, &np2tbl[i], &e);                                          case NP2FLAG_MEM:
                                                   ret |= flagcheck_versize(&f, tbl, &e);
                                                 break;                                                  break;
   
                                         case NP2FLAG_TERM:                                          case NP2FLAG_TERM:
                                                 done = TRUE;                                                  done = TRUE;
                                                 break;                                                  break;
   
                                           case NP2FLAG_COM:
                                         case NP2FLAG_DMA:                                          case NP2FLAG_DMA:
                                         case NP2FLAG_EGC:                                          case NP2FLAG_EGC:
                                         case NP2FLAG_EXT:                                          case NP2FLAG_EPSON:
                                         case NP2FLAG_EVT:                                          case NP2FLAG_EVT:
                                           case NP2FLAG_EXT:
                                         case NP2FLAG_GIJ:                                          case NP2FLAG_GIJ:
                                         case NP2FLAG_COM:                                          case NP2FLAG_FM:
                                                 ret |= flagcheck_veronly(&f, &np2tbl[i], &e);                                                  ret |= flagcheck_veronly(&f, tbl, &e);
                                                 break;                                                  break;
   
                                         case NP2FLAG_DISK:                                          case NP2FLAG_DISK:
                                                 ret |= flagcheck_disk(&f, &np2tbl[i], &e);                                                  ret |= flagcheck_disk(&f, tbl, &e);
                                                 break;  
   
                                         case NP2FLAG_FM:                                                        // ver0.31  
                                                 break;                                                  break;
   
                                         default:                                          default:
Line 1307  int statsave_load(const char *filename)  Line 1474  int statsave_load(const char *filename) 
   
         _NP2FFILE       f;          _NP2FFILE       f;
         int                     ret;          int                     ret;
         UINT            i;  
         BOOL            done;          BOOL            done;
   const STENTRY   *tbl;
   const STENTRY   *tblterm;
   
         ret = flagopen(&f, filename, NULL);          ret = flagopen(&f, filename, NULL);
         if (ret == NP2FLAG_FAILURE) {          if (ret == NP2FLAG_FAILURE) {
Line 1328  int statsave_load(const char *filename)  Line 1496  int statsave_load(const char *filename) 
                 ret |= flagload_create(&f);                  ret |= flagload_create(&f);
                 CopyMemory(index, f.p.index, sizeof(f.p.index));                  CopyMemory(index, f.p.index, sizeof(f.p.index));
                 index[10] = 0;                  index[10] = 0;
                 for (i=0; i<sizeof(np2tbl)/sizeof(STENTRY); i++) {                  tbl = np2tbl;
                         if (!strcmp(index, np2tbl[i].index)) {                  tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY));
                   while(tbl < tblterm) {
                           if (!strcmp(index, tbl->index)) {
                                 break;                                  break;
                         }                          }
                           tbl++;
                 }                  }
                 if (i < (sizeof(np2tbl)/sizeof(STENTRY))) {                  if (tbl < tblterm) {
                         switch(np2tbl[i].type) {                          switch(tbl->type) {
                                 case NP2FLAG_BIN:                                  case NP2FLAG_BIN:
                                         ret |= flagload_common(&f, &np2tbl[i]);                                          ret |= flagload_common(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_TERM:                                  case NP2FLAG_TERM:
                                         done = TRUE;                                          done = TRUE;
                                         break;                                          break;
   
   #if defined(CGWND_FONTPTR)
                                   case NP2FLAG_CGW:
                                           ret |= flagload_cgwnd(&f, tbl);
                                           break;
   #endif
   
                                 case NP2FLAG_CLOCK:                                  case NP2FLAG_CLOCK:
                                         ret |= flagload_clock(&f, &np2tbl[i]);                                          ret |= flagload_clock(&f, tbl);
                                           break;
   
                                   case NP2FLAG_COM:
                                           ret |= flagload_com(&f, tbl);
                                           break;
   
                                   case NP2FLAG_DISK:
                                           ret |= flagload_disk(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_DMA:                                  case NP2FLAG_DMA:
                                         ret |= flagload_dma(&f, &np2tbl[i]);                                          ret |= flagload_dma(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_EGC:                                  case NP2FLAG_EGC:
                                         ret |= flagload_egc(&f, &np2tbl[i]);                                          ret |= flagload_egc(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_EXT:                                  case NP2FLAG_EPSON:
                                         ret |= flagload_ext(&f, &np2tbl[i]);                                          ret |= flagload_epson(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_EVT:                                  case NP2FLAG_EVT:
                                         ret |= flagload_evt(&f, &np2tbl[i]);                                          ret |= flagload_evt(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_GIJ:                                  case NP2FLAG_EXT:
                                         ret |= flagload_gij(&f, &np2tbl[i]);                                          ret |= flagload_ext(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_FM:                                  case NP2FLAG_FM:
                                         ret |= flagload_fm(&f, &np2tbl[i]);                                          ret |= flagload_fm(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_DISK:                                  case NP2FLAG_GIJ:
                                         ret |= flagload_disk(&f, &np2tbl[i]);                                          ret |= flagload_gij(&f, tbl);
                                         break;                                          break;
   
                                 case NP2FLAG_COM:                                  case NP2FLAG_MEM:
                                         ret |= flagload_com(&f, &np2tbl[i]);                                          ret |= flagload_mem(&f, tbl);
                                         break;                                          break;
   
                                 default:                                  default:
Line 1392  int statsave_load(const char *filename)  Line 1577  int statsave_load(const char *filename) 
         flagclose(&f);          flagclose(&f);
   
         // I/O作り直し          // I/O作り直し
           i286_memorymap((pc.model & PCMODEL_EPSON)?1:0);
         iocore_build();          iocore_build();
         iocore_bind();          iocore_bind();
         cbuscore_bind();          cbuscore_bind();
Line 1404  int statsave_load(const char *filename)  Line 1590  int statsave_load(const char *filename) 
         gdcs.palchange = GDCSCRN_REDRAW;          gdcs.palchange = GDCSCRN_REDRAW;
         tramflag.renewal = 1;          tramflag.renewal = 1;
         cgwindow.writable |= 0x80;          cgwindow.writable |= 0x80;
   #if defined(CPUSTRUC_FONTPTR)
           FONTPTR_LOW = fontrom + cgwindow.low;
           FONTPTR_HIGH = fontrom + cgwindow.high;
   #endif
         i286_vram_dispatch(vramop.operate);          i286_vram_dispatch(vramop.operate);
         soundmng_play();          soundmng_play();
   

Removed from v.1.13  
changed lines
  Added in v.1.25


RetroPC.NET-CVS <cvs@retropc.net>