Diff for /xmil/pccore.c between versions 1.19 and 1.35

version 1.19, 2004/08/10 08:28:48 version 1.35, 2004/08/20 23:01:13
Line 8 Line 8
 #include        "z80core.h"  #include        "z80core.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
   #include        "nevent.h"
   #include        "ievent.h"
 #include        "timing.h"  #include        "timing.h"
 #include        "calendar.h"  #include        "calendar.h"
 #include        "keystat.h"  #include        "keystat.h"
Line 22 Line 24
   
 const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE);  const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE);
   
         XMILCFG         xmilcfg = { 2, 0, 1,          XMILCFG         xmilcfg = { 2, 1, 0x03,
                                                         1, 0, 0, 0,                                                          1, 0, 0, 0,
                                                         22050, 500, 0, 0, 80,                                                          22050, 500, 0, 64, 64, 0, 80,
                                                         0, 0, 0, 0};                                                          0, 0, 0, 0};
   
         PCCORE          pccore = {250, 0, 1, 0};          PCCORE          pccore;
         CORESTAT        corestat;          CORESTAT        corestat;
         BYTE            mMAIN[0x10000];  
         BYTE            mBIOS[0x8000];  
 #if defined(SUPPORT_BANKMEM)  
         UINT8           mBANK[16][0x8000];  
 #endif  
         UINT            v_cnt;  
         UINT            s_cnt;  
   
         BYTE            *RAM0r;  
         BYTE            *RAM0w;  
         DWORD           h_cntbase;  
   
   
   
 /***********************************************************************  // ----
         IPL-ROM LOAD  
 ***********************************************************************/  
   
 static void ipl_load(void) {  static void ipl_load(void) {
   
         FILEH   hdl;          FILEH   hdl;
   
         ZeroMemory(mBIOS, sizeof(mBIOS));          ZeroMemory(biosmem, 0x8000);
         CopyMemory(mBIOS, DEFROM, sizeof(DEFROM));          CopyMemory(biosmem, DEFROM, sizeof(DEFROM));
   
         if (pccore.ROM_TYPE >= 2) {          if (pccore.ROM_TYPE >= 2) {
                 if ((hdl = file_open_c(OEMTEXT("IPLROM.X1T"))) != FILEH_INVALID) {                  if ((hdl = file_open_c(OEMTEXT("IPLROM.X1T"))) != FILEH_INVALID) {
                         file_read(hdl, mBIOS, 0x8000);                          file_read(hdl, biosmem, 0x8000);
                         file_close(hdl);                          file_close(hdl);
                 }                  }
         }          }
         else if (pccore.ROM_TYPE == 1) {          else if (pccore.ROM_TYPE == 1) {
                 if ((hdl = file_open_c(OEMTEXT("IPLROM.X1"))) != FILEH_INVALID) {                  if ((hdl = file_open_c(OEMTEXT("IPLROM.X1"))) != FILEH_INVALID) {
                         file_read(hdl, mBIOS, 0x8000);                          file_read(hdl, biosmem, 0x8000);
                         file_close(hdl);                          file_close(hdl);
                 }                  }
         }          }
 }  }
   
   
 /***********************************************************************  // ----
         初期化  
 ***********************************************************************/  
   
 static BRESULT reset_x1(BYTE ROM_TYPE, BYTE SOUND_SW, BYTE DIP_SW) {  
   
         pccore.HSYNC_CLK = 250;  
         pccore.ROM_TYPE = ROM_TYPE;  
         pccore.SOUND_SW = SOUND_SW;  
         pccore.DIP_SW = DIP_SW;  
   
         // スクリーンモードの変更...  
         if (pccore.ROM_TYPE >= 3) {  
                 if (scrnmng_setcolormode(TRUE) != SUCCESS) {  
                         pccore.ROM_TYPE = 2;  
                 }  
         }  
         else {  
                 scrnmng_setcolormode(FALSE);  
         }  
   
         ipl_load();  
   
         Z80_RESET();  
         iocore_reset();  
   
         RAM0r = mBIOS;  
         RAM0w = mMAIN;  
         h_cntbase = 0;  
         sysmng_cpureset();  
   
         calendar_initialize();  
   
         cgrom_reset();  
         cmt_reset();  
         crtc_reset();  
         ctc_reset();  
         dmac_reset();  
         fdc_reset();  
         memio_reset();  
         pcg_reset();  
         ppi_reset();  
         sio_reset();  
         sndboard_reset();  
         subcpu_reset();  
         vramio_reset();  
   
         pal_reset();  
         makescrn_reset();  
         timing_reset();  
         return(SUCCESS);  
 }  
   
   
   
 /***********************************************************************  
         実行/終了  
 ***********************************************************************/  
   
 static  BYTE    keyintcnt = 0;  
   
 void pccore_initialize(void) {  void pccore_initialize(void) {
   
           Z80_INITIALIZE();
         fddfile_initialize();          fddfile_initialize();
         sndctrl_initialize();          sndctrl_initialize();
         makescrn_initialize();          makescrn_initialize();
Line 143  void pccore_initialize(void) { Line 73  void pccore_initialize(void) {
         ppi_initialize();          ppi_initialize();
 }  }
   
   void pccore_deinitialize(void) {
   
           sndctrl_deinitialize();
   
           fddfile_eject(0);
           fddfile_eject(1);
           fddfile_eject(2);
           fddfile_eject(3);
   }
   
 void pccore_reset(void) {  void pccore_reset(void) {
   
         soundmng_stop();          soundmng_stop();
Line 151  void pccore_reset(void) { Line 91  void pccore_reset(void) {
                 sndctrl_deinitialize();                  sndctrl_deinitialize();
                 sndctrl_initialize();                  sndctrl_initialize();
         }          }
         sound_reset();  
   
         reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW);          pccore.baseclock = 2000000;
         soundmng_play();          pccore.multiple = 2;
 }          pccore.realclock = pccore.baseclock * pccore.multiple;
   
           pccore.ROM_TYPE = xmilcfg.ROM_TYPE;
           pccore.SOUND_SW = xmilcfg.SOUND_SW;
           pccore.DIP_SW = xmilcfg.DIP_SW;
   
 void pccore_deinitialize(void) {          // スクリーンモードの変更...
           if (pccore.ROM_TYPE >= 3) {
                   if (scrnmng_setcolormode(TRUE) != SUCCESS) {
                           pccore.ROM_TYPE = 2;
                   }
           }
           else {
                   scrnmng_setcolormode(FALSE);
           }
   
         sndctrl_deinitialize();          sysmng_cpureset();
   
 //      keyboard_term();          sound_changeclock();
           sound_reset();
   
         fddfile_eject(0);          Z80_RESET();
         fddfile_eject(1);          nevent_allreset();
         fddfile_eject(2);          ievent_reset();
         fddfile_eject(3);          calendar_reset();
           iocore_reset();
   
           ipl_load();
   
           pal_reset();
           makescrn_reset();
           timing_reset();
   
           soundmng_play();
 }  }
   
   
Line 203  void iptrace_out(void) { Line 164  void iptrace_out(void) {
 }  }
 #endif  #endif
   
   
   void neitem_disp(UINT id) {
   
           corestat.vsync = 1;
           if (xmilcfg.DISPSYNC & 1) {
                   scrnupdate();
           }
           nevent_set(id, corestat.syncclock, neitem_vsync, NEVENT_RELATIVE);
   }
   
   void neitem_vsync(UINT id) {
   
           corestat.vsync = 2;
           (void)id;
   }
   
   
   // ----
   
   // #define      SINGLESTEPONLY
   
   
 void pccore_exec(BRESULT draw) {  void pccore_exec(BRESULT draw) {
   
         REG8    inttiming;          SINT32  frameclock;
           SINT32  dispclock;
   
         corestat.drawframe = draw;          corestat.drawframe = draw;
           pal_eventclear();
         soundmng_sync();          soundmng_sync();
   
         v_cnt = 0;          timing_setrate(crtc.e.frameclock);
         s_cnt = 0;          frameclock = crtc.e.frameclock * pccore.multiple / 2;
         inttiming = xmilcfg.CPU8MHz & 1;          dispclock = min(frameclock, crtc.e.dispclock);
           corestat.dispclock = dispclock;
         while(s_cnt < 266) {          corestat.syncclock = frameclock - dispclock;
                 while(h_cnt < pccore.HSYNC_CLK) {          corestat.vsync = 0;
           nevent_set(NEVENT_FRAMES, dispclock, neitem_disp, NEVENT_RELATIVE);
           do {
   #if !defined(SINGLESTEPONLY)
                   if (CPU_REMCLOCK > 0) {
                           Z80_EXECUTE();
                   }
   #else
                   while(CPU_REMCLOCK > 0) {
                   //      TRACEOUT(("%.4x", Z80_PC));
 #if defined(TRACE) && IPTRACE  #if defined(TRACE) && IPTRACE
                         treip[trpos & (IPTRACE - 1)] = Z80_PC;                          treip[trpos & (IPTRACE - 1)] = Z80_PC;
                         trpos++;                          trpos++;
 #endif  #endif
                         Z80_EXECUTE();                          Z80_STEP();
                         z80dmap();  
                 }                  }
                 fdcisbusy();  #endif
                 h_cnt -= pccore.HSYNC_CLK;                  nevent_progress();
                 h_cntbase += pccore.HSYNC_CLK;                  ievent_progress();
                 inttiming ^= 2;          } while(corestat.vsync < 2);
                 if (inttiming != 3) {  
                         sound_makesample(pcmbufsize[s_cnt]);  
 //                      if (xmilcfg.SOUNDPLY) {  
 //                              juliet2_exec();  
 //                      }  
                         s_cnt++;  
                         x1_ctc_int();  
                         if (!((++keyintcnt) & 15)) {  
                                 x1_sub_int();  
                                 if (xmilcfg.MOUSE_SW) {  
                                         sio_int();  
                                 }  
                         }  
                 }  
                 v_cnt++;  
                 if (crtc.s.CRT_YL == v_cnt) {  
                         pcg.r.vsync = 1;  
                         if (xmilcfg.DISPSYNC & 1) {  
                                 scrnupdate();  
                         }  
                 }  
         }  
         scrnupdate();          scrnupdate();
         calendar_inc();  
         sound_sync();          sound_sync();
           fdc_callback();
 }  }
   

Removed from v.1.19  
changed lines
  Added in v.1.35


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