Diff for /np2/pccore.c between versions 1.46 and 1.52

version 1.46, 2004/01/22 08:40:30 version 1.52, 2004/01/25 05:41:28
Line 5 Line 5
 #include        "sysmng.h"  #include        "sysmng.h"
 #include        "timemng.h"  #include        "timemng.h"
 #include        "cpucore.h"  #include        "cpucore.h"
 #include        "np2ver.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "cbuscore.h"  #include        "cbuscore.h"
Line 29 Line 28
 #include        "fddfile.h"  #include        "fddfile.h"
 #include        "fdd_mtr.h"  #include        "fdd_mtr.h"
 #include        "sxsi.h"  #include        "sxsi.h"
 #include        "calendar.h"  
 #include        "timing.h"  
 #include        "debugsub.h"  
 #if defined(SUPPORT_HOSTDRV)  #if defined(SUPPORT_HOSTDRV)
 #include        "hostdrv.h"  #include        "hostdrv.h"
 #endif  #endif
   #include        "np2ver.h"
   #include        "calendar.h"
   #include        "timing.h"
   #include        "debugsub.h"
   
   
         const char      np2version[] = NP2VER_CORE;          const char      np2version[] = NP2VER_CORE;
Line 76  static const BYTE msw_default[8] = Line 76  static const BYTE msw_default[8] =
         int             soundrenewal = 0;          int             soundrenewal = 0;
         BOOL    drawframe;          BOOL    drawframe;
         UINT    drawcount = 0;          UINT    drawcount = 0;
           BOOL    hardwarereset = FALSE;
   
   
 // ---------------------------------------------------------------------------  // ---------------------------------------------------------------------------
Line 175  static void pccore_set(void) { Line 176  static void pccore_set(void) {
         pccore.midiclock = pccore.realclock / 3125;          pccore.midiclock = pccore.realclock / 3125;
   
         // 拡張メモリ          // 拡張メモリ
         pccore.extmem = 0;          if (!(np2cfg.dipsw[2] & 0x80)) {
                   pccore.extmem = np2cfg.EXTMEM;
           }
   
         // HDDの接続 (I/Oの使用状態が変わるので..          // HDDの接続 (I/Oの使用状態が変わるので..
 //      if (np2cfg.dipsw[1] & 0x20) {          if (np2cfg.dipsw[1] & 0x20) {
                 pccore.hddif |= PCHDD_IDE;                  pccore.hddif |= PCHDD_IDE;
 //      }          }
         pccore.hddif |= PCHDD_SCSI;          pccore.hddif |= PCHDD_SCSI;
   
         // サウンドボードの接続          // サウンドボードの接続
Line 281  void pccore_term(void) { Line 284  void pccore_term(void) {
         fdd_eject(2);          fdd_eject(2);
         fdd_eject(3);          fdd_eject(3);
   
         extmemmng_clear();  
   
         iocore_destroy();          iocore_destroy();
   
         pc9861k_destruct();          pc9861k_destruct();
Line 290  void pccore_term(void) { Line 291  void pccore_term(void) {
         mpu98ii_destruct();          mpu98ii_destruct();
   
         sxsi_trash();          sxsi_trash();
   
           CPU_DEINITIALIZE();
 }  }
   
   
Line 314  void pccore_reset(void) { Line 317  void pccore_reset(void) {
   
         int             i;          int             i;
   
         ZeroMemory(mem, 0x10fff0);                                                                      // ver0.28          soundmng_stop();
           if (soundrenewal) {
                   soundrenewal = 0;
                   sound_term();
                   sound_init();
           }
   
           ZeroMemory(mem, 0x110000);                                                                      // ver0.28
         ZeroMemory(mem + VRAM1_B, 0x18000);          ZeroMemory(mem + VRAM1_B, 0x18000);
         ZeroMemory(mem + VRAM1_E, 0x08000);          ZeroMemory(mem + VRAM1_E, 0x08000);
         ZeroMemory(mem + FONT_ADRS, 0x08000);          ZeroMemory(mem + FONT_ADRS, 0x08000);
   
         CPU_RESET();  
         CPU_TYPE = 0;  
         if (np2cfg.dipsw[2] & 0x80) {  
                 CPU_TYPE = CPUTYPE_V30;  
         }  
   
         //メモリスイッチ          //メモリスイッチ
         for (i=0; i<8; i++) {          for (i=0; i<8; i++) {
                 mem[0xa3fe2 + i*4] = np2cfg.memsw[i];                  mem[0xa3fe2 + i*4] = np2cfg.memsw[i];
         }          }
   
         fddfile_reset2dmode();          pccore_set();
         bios0x18_16(0x20, 0xe1);          nevent_init();
   
         soundmng_stop();          CPU_RESET();
         if (soundrenewal) {          CPU_SETEXTSIZE((UINT32)pccore.extmem);
                 soundrenewal = 0;  
                 sound_term();  
                 sound_init();  
         }  
   
         pccore_set();          CPU_TYPE = 0;
           if (np2cfg.dipsw[2] & 0x80) {
                   CPU_TYPE = CPUTYPE_V30;
           }
           if (pccore.model & PCMODEL_EPSON) {                     // RAM ctrl
                   CPU_RAM_D000 = 0xffff;
           }
   
         sound_changeclock();          sound_changeclock();
         beep_changeclock();          beep_changeclock();
         nevent_init();  
   
         sound_reset();          sound_reset();
 #if defined(SUPPORT_WAVEMIX)  #if defined(SUPPORT_WAVEMIX)
         wavemix_bind();          wavemix_bind();
 #endif  #endif
   
         if (pccore.model & PCMODEL_EPSON) {                     // RAM ctrl          fddfile_reset2dmode();
                 CPU_RAM_D000 = 0xffff;          bios0x18_16(0x20, 0xe1);
         }  
   
         iocore_reset();                                                         // サウンドでpicを呼ぶので…          iocore_reset();                                                         // サウンドでpicを呼ぶので…
         cbuscore_reset();          cbuscore_reset();
         fmboard_reset(np2cfg.SOUND_SW);          fmboard_reset(pccore.sound);
   
         i286_memorymap((pccore.model & PCMODEL_EPSON)?1:0);          i286_memorymap((pccore.model & PCMODEL_EPSON)?1:0);
         iocore_build();          iocore_build();
Line 365  void pccore_reset(void) { Line 368  void pccore_reset(void) {
         cbuscore_bind();          cbuscore_bind();
         fmboard_bind();          fmboard_bind();
   
         timing_reset();  
         fddmtr_init();          fddmtr_init();
         calendar_init();          calendar_init();
         vram_init();          vram_init();
Line 391  void pccore_reset(void) { Line 393  void pccore_reset(void) {
         CPU_CLEARPREFETCH();          CPU_CLEARPREFETCH();
         sysmng_cpureset();          sysmng_cpureset();
   
         soundmng_play();  
   
 #if defined(SUPPORT_HOSTDRV)  #if defined(SUPPORT_HOSTDRV)
         hostdrv_reset();          hostdrv_reset();
 #endif  #endif
   
           timing_reset();
           soundmng_play();
 }  }
   
 static void drawscreen(void) {  static void drawscreen(void) {
Line 568  void screenvsync(NEVENTITEM item) { Line 571  void screenvsync(NEVENTITEM item) {
   
 // ---------------------------------------------------------------------------  // ---------------------------------------------------------------------------
   
 // #define      IPTRACE                 (1 << 16)  // #define      IPTRACE                 (1 << 12)
   
 #if IPTRACE  #if defined(TRACE) && IPTRACE
 static UINT             trpos;  static UINT             trpos = 0;
 static UINT32   treip[IPTRACE];  static UINT32   treip[IPTRACE];
   
 void iptrace_out(void) {  void iptrace_out(void) {
Line 605  static int resetcnt = 0; Line 608  static int resetcnt = 0;
 static int execcnt = 0;  static int execcnt = 0;
 int piccnt = 0;  int piccnt = 0;
 int tr = 0;  int tr = 0;
   UINT    cflg;
 #endif  #endif
   
         UINT    cflg;  
   
 void pccore_exec(BOOL draw) {  void pccore_exec(BOOL draw) {
   
Line 661  void pccore_exec(BOOL draw) { Line 664  void pccore_exec(BOOL draw) {
                         treip[trpos & (IPTRACE - 1)] = (CPU_CS << 16) + CPU_IP;                          treip[trpos & (IPTRACE - 1)] = (CPU_CS << 16) + CPU_IP;
                         trpos++;                          trpos++;
 #endif  #endif
   #if 0
                         if (tr) {                          if (tr) {
                                 TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));                                  if ((CPU_CS == 0xf760) || (CPU_CS == 0xf990)) {
                                           TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));
                                   }
                         }                          }
   #endif
 #if 0  #if 0
                         if ((tr & 2) && (mem[0x0471e] == '\\')) {                          if ((tr & 2) && (mem[0x0471e] == '\\')) {
                                 TRACEOUT(("DTA BREAK %.4x:%.4x", CPU_CS, CPU_IP));                                  TRACEOUT(("DTA BREAK %.4x:%.4x", CPU_CS, CPU_IP));
Line 682  void pccore_exec(BOOL draw) { Line 689  void pccore_exec(BOOL draw) {
                                 }                                  }
                         }                          }
 #endif  #endif
 //                      i286x_step();  #if 0
                         i286c_step();                          if ((CPU_CS == 0x0620) || (CPU_CS == 0x08a0)) {
                                   TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));
                           }
   #endif
                           i286x_step();
   //                      i286c_step();
                 }                  }
 #endif  #endif
                 nevent_progress();                  nevent_progress();
Line 695  void pccore_exec(BOOL draw) { Line 707  void pccore_exec(BOOL draw) {
         S98_sync();          S98_sync();
         sound_sync();                                                                                                   // happy!          sound_sync();                                                                                                   // happy!
   
           if (hardwarereset) {
                   hardwarereset = FALSE;
                   pccore_cfgupdate();
                   pccore_reset();
           }
   
 #if defined(TRACE)  #if defined(TRACE)
         execcnt++;          execcnt++;
         if (execcnt >= 60) {          if (execcnt >= 60) {

Removed from v.1.46  
changed lines
  Added in v.1.52


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