Diff for /np2/pccore.c between versions 1.86 and 1.102

version 1.86, 2004/04/16 22:20:03 version 1.102, 2005/03/16 06:05:17
Line 41 Line 41
 #include        "debugsub.h"  #include        "debugsub.h"
   
   
         const char      np2version[] = NP2VER_CORE;  const OEMCHAR np2version[] = OEMTEXT(NP2VER_CORE);
   
   #if defined(_WIN32_WCE)
   #define PCBASEMULTIPLE  2
   #else
   #define PCBASEMULTIPLE  4
   #endif
   
   
         NP2CFG  np2cfg = {          NP2CFG  np2cfg = {
                                 0, 1, 0, 32, 0, 0, 0x40,                                  0, 1, 0, 32, 0, 0, 0x40,
Line 49 Line 56
                                 {0x3e, 0x73, 0x7b}, 0,                                  {0x3e, 0x73, 0x7b}, 0,
                                 0, 0, {1, 1, 6, 1, 8, 1},                                  0, 0, {1, 1, 6, 1, 8, 1},
   
                                 "VX", PCBASECLOCK25, 4,                                  OEMTEXT("VX"), PCBASECLOCK25, PCBASEMULTIPLE,
                                 {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e},                                  {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e},
                                 1, 1, 2, 1, 0x000000, 0xffffff,                                  1, 1, 2, 1, 0x000000, 0xffffff,
                                 22050, 500, 4, 0,                                  22050, 500, 4, 0,
Line 58 Line 65
                                 1, 0x82,                                  1, 0x82,
                                 0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f},                                  0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f},
                                 3, 1, 80, 0, 0,                                  3, 1, 80, 0, 0,
                                 {"", ""},                                  {OEMTEXT(""), OEMTEXT("")},
 #if defined(SUPPORT_SCSI)  #if defined(SUPPORT_SCSI)
                                 {"", "", "", ""},                                  {OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")},
 #endif  #endif
                                 "", "", ""};                                  OEMTEXT(""), OEMTEXT(""), OEMTEXT("")};
   
         PCCORE  pccore = {      PCBASECLOCK25, 4,          PCCORE  pccore = {      PCBASECLOCK25, PCBASEMULTIPLE,
                                                 0, PCMODEL_VX, 0, 0, {0x3e, 0x73, 0x7b}, 0,                                                  0, PCMODEL_VX, 0, 0, {0x3e, 0x73, 0x7b}, 0,
                                                 0, 0,                                                  0, 0,
                                                 4 * PCBASECLOCK25};                                                  PCBASECLOCK25 * PCBASEMULTIPLE};
   
         BYTE    screenupdate = 3;          UINT8   screenupdate = 3;
         int             screendispflag = 1;          int             screendispflag = 1;
         int             soundrenewal = 0;          int             soundrenewal = 0;
         BOOL    drawframe;          BOOL    drawframe;
Line 79 Line 86
   
 // ---------------------------------------------------------------------------  // ---------------------------------------------------------------------------
   
 void getbiospath(char *path, const char *fname, int maxlen) {  void getbiospath(OEMCHAR *path, const OEMCHAR *fname, int maxlen) {
   
 const char      *p;  const OEMCHAR   *p;
   
         p = np2cfg.biospath;          p = np2cfg.biospath;
         if (p[0]) {          if (p[0]) {
Line 139  static void pccore_set(void) { Line 146  static void pccore_set(void) {
         // 拡張メモリ          // 拡張メモリ
         extsize = 0;          extsize = 0;
         if (!(np2cfg.dipsw[2] & 0x80)) {          if (!(np2cfg.dipsw[2] & 0x80)) {
                 extsize = min(np2cfg.EXTMEM, 13);                  extsize = np2cfg.EXTMEM;
   #if defined(CPUCORE_IA32)
                   extsize = min(extsize, 63);
   #else
                   extsize = min(extsize, 13);
   #endif
         }          }
         pccore.extmem = extsize;          pccore.extmem = extsize;
         CopyMemory(pccore.dipsw, np2cfg.dipsw, 3);          CopyMemory(pccore.dipsw, np2cfg.dipsw, 3);
Line 160  static void pccore_set(void) { Line 172  static void pccore_set(void) {
   
 // --------------------------------------------------------------------------  // --------------------------------------------------------------------------
   
   #if !defined(DISABLE_SOUND)
 static void sound_init(void) {  static void sound_init(void) {
   
         UINT    rate;          UINT    rate;
Line 193  static void sound_term(void) { Line 206  static void sound_term(void) {
         soundmng_stop();          soundmng_stop();
         amd98_deinitialize();          amd98_deinitialize();
         rhythm_deinitialize();          rhythm_deinitialize();
           beep_deinitialize();
         fddmtrsnd_deinitialize();          fddmtrsnd_deinitialize();
         sound_destroy();          sound_destroy();
 }  }
   #endif
   
 void pccore_init(void) {  void pccore_init(void) {
   
Line 207  void pccore_init(void) { Line 222  void pccore_init(void) {
         dispsync_initialize();          dispsync_initialize();
         sxsi_initialize();          sxsi_initialize();
   
           // CDドライブの接続
   #if defined(SUPPORT_IDEIO)
           sxsi_setdevtype(0x02, SXSIDEV_CDROM);
   #endif
   
         font_initialize();          font_initialize();
         font_load(np2cfg.fontfile, TRUE);          font_load(np2cfg.fontfile, TRUE);
         maketext_initialize();          maketext_initialize();
Line 214  void pccore_init(void) { Line 234  void pccore_init(void) {
         gdcsub_initialize();          gdcsub_initialize();
         fddfile_initialize();          fddfile_initialize();
   
   #if !defined(DISABLE_SOUND)
         sound_init();          sound_init();
   #endif
   
         rs232c_construct();          rs232c_construct();
         mpu98ii_construct();          mpu98ii_construct();
Line 233  void pccore_term(void) { Line 255  void pccore_term(void) {
         hostdrv_deinitialize();          hostdrv_deinitialize();
 #endif  #endif
   
   #if !defined(DISABLE_SOUND)
         sound_term();          sound_term();
   #endif
   
         fdd_eject(0);          fdd_eject(0);
         fdd_eject(1);          fdd_eject(1);
Line 246  void pccore_term(void) { Line 270  void pccore_term(void) {
         mpu98ii_destruct();          mpu98ii_destruct();
         rs232c_destruct();          rs232c_destruct();
   
         sxsi_trash();          sxsi_alltrash();
   
         CPU_DEINITIALIZE();          CPU_DEINITIALIZE();
 }  }
Line 259  void pccore_cfgupdate(void) { Line 283  void pccore_cfgupdate(void) {
   
         renewal = FALSE;          renewal = FALSE;
         for (i=0; i<8; i++) {          for (i=0; i<8; i++) {
                 if (np2cfg.memsw[i] != mem[MEMB_MSW + i*4]) {                  if (np2cfg.memsw[i] != mem[MEMX_MSW + i*4]) {
                         np2cfg.memsw[i] = mem[MEMB_MSW + i*4];                          np2cfg.memsw[i] = mem[MEMX_MSW + i*4];
                         renewal = TRUE;                          renewal = TRUE;
                 }                  }
         }          }
Line 274  void pccore_reset(void) { Line 298  void pccore_reset(void) {
         int             i;          int             i;
   
         soundmng_stop();          soundmng_stop();
   #if !defined(DISABLE_SOUND)
         if (soundrenewal) {          if (soundrenewal) {
                 soundrenewal = 0;                  soundrenewal = 0;
                 sound_term();                  sound_term();
                 sound_init();                  sound_init();
         }          }
   #endif
         ZeroMemory(mem, 0x110000);          ZeroMemory(mem, 0x110000);
         ZeroMemory(mem + VRAM1_B, 0x18000);          ZeroMemory(mem + VRAM1_B, 0x18000);
         ZeroMemory(mem + VRAM1_E, 0x08000);          ZeroMemory(mem + VRAM1_E, 0x08000);
Line 305  void pccore_reset(void) { Line 330  void pccore_reset(void) {
         }          }
   
         // HDDセット          // HDDセット
         sxsi_open();          sxsihdd_allbind();
           // SASI/IDEどっち?
 #if defined(SUPPORT_SASI)  #if defined(SUPPORT_SASI)
         if (sxsi_issasi()) {          if (sxsi_issasi()) {
                 pccore.hddif &= ~PCHDD_IDE;                  pccore.hddif &= ~PCHDD_IDE;
Line 359  void pccore_reset(void) { Line 385  void pccore_reset(void) {
   
         timing_reset();          timing_reset();
         soundmng_play();          soundmng_play();
   
   #if 0 && defined(SUPPORT_IDEIO) // Test!
           sxsi_devopen(0x02, OEMTEXT("e:\\pn\\pn.iso"));
   #endif
 }  }
   
 static void drawscreen(void) {  static void drawscreen(void) {
Line 487  static void drawscreen(void) { Line 517  static void drawscreen(void) {
                 }                  }
         }          }
         if (screenupdate) {          if (screenupdate) {
                 screenupdate = scrndraw_draw((BYTE)(screenupdate & 2));                  screenupdate = scrndraw_draw((UINT8)(screenupdate & 2));
                 drawcount++;                  drawcount++;
         }          }
 }  }
Line 533  void screenvsync(NEVENTITEM item) { Line 563  void screenvsync(NEVENTITEM item) {
   
 // ---------------------------------------------------------------------------  // ---------------------------------------------------------------------------
   
 // #define      IPTRACE                 (1 << 12)  
   
 #if defined(TRACE) && IPTRACE  
 static  UINT    trpos = 0;  
 static  UINT32  treip[IPTRACE];  
   
 void iptrace_out(void) {  
   
         FILEH   fh;  
         UINT    s;  
         UINT32  eip;  
         char    buf[32];  
   
         s = trpos;  
         if (s > IPTRACE) {  
                 s -= IPTRACE;  
         }  
         else {  
                 s = 0;  
         }  
         fh = file_create_c("his.txt");  
         while(s < trpos) {  
                 eip = treip[s & (IPTRACE - 1)];  
                 s++;  
                 SPRINTF(buf, "%.4x:%.4x\r\n", (eip >> 16), eip & 0xffff);  
                 file_write(fh, buf, strlen(buf));  
         }  
         file_close(fh);  
 }  
 #endif  
   
   
 #if defined(TRACE)  #if defined(TRACE)
 static int resetcnt = 0;  static int resetcnt = 0;
 static int execcnt = 0;  static int execcnt = 0;
 int piccnt = 0;  int piccnt = 0;
 int tr = 0;  
 UINT    cflg;  
 #endif  #endif
   
   
Line 598  void pccore_exec(BOOL draw) { Line 594  void pccore_exec(BOOL draw) {
   
         while(screendispflag) {          while(screendispflag) {
 #if defined(TRACE)  #if defined(TRACE)
         resetcnt++;                  resetcnt++;
 #endif  #endif
                 pic_irq();                  pic_irq();
                 if (CPU_RESETREQ) {                  if (CPU_RESETREQ) {
                         CPU_RESETREQ = 0;                          CPU_RESETREQ = 0;
 #if 1  
                         CPU_SHUT();                          CPU_SHUT();
 #else  
                         CPU_CS = 0xf000;  
                         CS_BASE = 0xf0000;  
                         CPU_IP = 0xfff0;  
 #if defined(CPUCORE_IA32)  
                         CPU_DX = 0x0300;  
 #endif  
                         CPU_CLEARPREFETCH();  
 #endif  
                 }                  }
   
 #if 1 // ndef TRACE  
                 if (CPU_REMCLOCK > 0) {                  if (CPU_REMCLOCK > 0) {
                         if (!(CPU_TYPE & CPUTYPE_V30)) {                          if (!(CPU_TYPE & CPUTYPE_V30)) {
                                 CPU_EXEC();                                  CPU_EXEC();
Line 625  void pccore_exec(BOOL draw) { Line 609  void pccore_exec(BOOL draw) {
                                 CPU_EXECV30();                                  CPU_EXECV30();
                         }                          }
                 }                  }
 #else  
                 while(CPU_REMCLOCK > 0) {  
 #if IPTRACE  
                         treip[trpos & (IPTRACE - 1)] = (CPU_CS << 16) + CPU_IP;  
                         trpos++;  
 #endif  
 #if 0  
                         if ((CPU_CS == 0xf800) && (CPU_IP == 0x0B5B)) {  
                                 TRACEOUT(("%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x",  
                                                         mem[0x9000], mem[0x9001],  
                                                         mem[0x9002], mem[0x9003],  
                                                         mem[0x9004], mem[0x9005],  
                                                         mem[0x9006], mem[0x9007],  
                                                         mem[0x9008], mem[0x9009]));  
                         }  
                         if ((CPU_CS == 0xf800) && (CPU_IP == 0x15FF)) {  
                                 TRACEOUT(("DX = %.4x / DS:DI = %.4x:%.4x [%.2x]",  
                                                                         CPU_DX, CPU_DS, CPU_DI, mem[0xa3fe0]));  
                         }  
 #endif  
 #if 0  
                         if (CPU_IP == 0x2E4F) {  
                                 TRACEOUT(("CS = %.4x - 0x2e4f", CPU_CS));  
                         }  
 #endif  
                         if (CPU_CS == 0x8b6) {  
                                 TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));  
                         }  
                         i286x_step();  
 //                      i286c_step();  
                 }  
 #endif  
                 nevent_progress();                  nevent_progress();
         }          }
         artic_callback();          artic_callback();

Removed from v.1.86  
changed lines
  Added in v.1.102


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