Diff for /xmil/pccore.c between versions 1.16 and 1.20

version 1.16, 2004/08/08 12:32:58 version 1.20, 2004/08/11 12:08:16
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 27  const OEMCHAR xmilversion[] = OEMTEXT(XM Line 29  const OEMCHAR xmilversion[] = OEMTEXT(XM
                                                         22050, 500, 0, 0, 80,                                                          22050, 500, 0, 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            mMAIN[0x10000];
         BYTE            mBIOS[0x8000];          BYTE            mBIOS[0x8000];
         BYTE            mBANK[16][0x8000];  #if defined(SUPPORT_BANKMEM)
         WORD            v_cnt;          UINT8           mBANK[16][0x8000];
         int                     s_cnt;  #endif
   
         BYTE            *RAM0r;          BYTE            *RAM0r;
         BYTE            *RAM0w;          BYTE            *RAM0w;
         DWORD           h_cntbase;  
   
   
   
 /***********************************************************************  /***********************************************************************
Line 73  static void ipl_load(void) { Line 72  static void ipl_load(void) {
   
 static BRESULT reset_x1(BYTE ROM_TYPE, BYTE SOUND_SW, BYTE DIP_SW) {  static BRESULT reset_x1(BYTE ROM_TYPE, BYTE SOUND_SW, BYTE DIP_SW) {
   
           pccore.baseclock = 2000000;
           pccore.multiple = 2;
           pccore.realclock = pccore.baseclock * pccore.multiple;
         pccore.HSYNC_CLK = 250;          pccore.HSYNC_CLK = 250;
         pccore.ROM_TYPE = ROM_TYPE;          pccore.ROM_TYPE = ROM_TYPE;
         pccore.SOUND_SW = SOUND_SW;          pccore.SOUND_SW = SOUND_SW;
Line 87  static BRESULT reset_x1(BYTE ROM_TYPE, B Line 89  static BRESULT reset_x1(BYTE ROM_TYPE, B
         else {          else {
                 scrnmng_setcolormode(FALSE);                  scrnmng_setcolormode(FALSE);
         }          }
           sound_changeclock();
   
         ipl_load();          ipl_load();
   
Line 95  static BRESULT reset_x1(BYTE ROM_TYPE, B Line 98  static BRESULT reset_x1(BYTE ROM_TYPE, B
   
         RAM0r = mBIOS;          RAM0r = mBIOS;
         RAM0w = mMAIN;          RAM0w = mMAIN;
         h_cntbase = 0;  
         sysmng_cpureset();          sysmng_cpureset();
   
         calendar_initialize();          calendar_initialize();
Line 126  static BRESULT reset_x1(BYTE ROM_TYPE, B Line 128  static BRESULT reset_x1(BYTE ROM_TYPE, B
         実行/終了          実行/終了
 ***********************************************************************/  ***********************************************************************/
   
 static  BYTE    keyintcnt = 0;  
   
 void pccore_initialize(void) {  void pccore_initialize(void) {
   
           fddfile_initialize();
         sndctrl_initialize();          sndctrl_initialize();
         makescrn_initialize();          makescrn_initialize();
   
Line 150  void pccore_reset(void) { Line 151  void pccore_reset(void) {
         }          }
         sound_reset();          sound_reset();
   
           nevent_allreset();
           ievent_reset();
         reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW);          reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW);
         soundmng_play();          soundmng_play();
 }  }
Line 160  void pccore_deinitialize(void) { Line 163  void pccore_deinitialize(void) {
   
 //      keyboard_term();  //      keyboard_term();
   
         fdd_eject(0);          fddfile_eject(0);
         fdd_eject(1);          fddfile_eject(1);
         fdd_eject(2);          fddfile_eject(2);
         fdd_eject(3);          fddfile_eject(3);
 }  }
   
   
Line 200  void iptrace_out(void) { Line 203  void iptrace_out(void) {
 }  }
 #endif  #endif
   
 void pccore_exec(BRESULT draw) {  
   
         REG8    inttiming;  #if 0
   void nvitem_raster(UINT id) {
   
           nevent_repeat(id);
           sound_makesample(pcmbufsize[v_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();
                   }
           }
   }
   #endif
   
   UINT pccore_getraster(UINT *h) {
   
           SINT32  work;
           UINT    vl;
   
           work = nevent_getwork(NEVENT_FRAMES);
           vl = work / 250;
           if (h) {
                   *h = work - (vl * 250);
           }
           if (corestat.vsync) {
                   vl += corestat.vl;
           }
           return(vl);
   }
   
   void nvitem_vdisp(UINT id) {
   
           corestat.vsync = 1;
           pcg.r.vsync = 1;
           if (xmilcfg.DISPSYNC & 1) {
                   scrnupdate();
           }
           nevent_set(NEVENT_FRAMES, (corestat.tl - corestat.vl) * 250,
                                                                                           nvitem_vsync, NEVENT_RELATIVE);
   }
   
   void nvitem_vsync(UINT id) {
   
           corestat.vsync = 2;
   }
   
   
   // #define      SINGLESTEPONLY
   
   void pccore_exec(BRESULT draw) {
   
         corestat.drawframe = draw;          corestat.drawframe = draw;
         soundmng_sync();          soundmng_sync();
   
         v_cnt = 0;          corestat.tl = 266 * pccore.multiple / 2;
         s_cnt = 0;          corestat.vl = min(corestat.tl, crtc.s.CRT_YL);
         inttiming = xmilcfg.CPU8MHz & 1;          corestat.vsync = 0;
           nevent_set(NEVENT_FRAMES, corestat.vl * 250,
         while(s_cnt < 266) {                                                                                          nvitem_vdisp, NEVENT_RELATIVE);
                 while(h_cnt < pccore.HSYNC_CLK) {          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();  
                 }                  }
                 h_cnt -= pccore.HSYNC_CLK;  #endif
                 h_cntbase += pccore.HSYNC_CLK;                  nevent_progress();
                 inttiming ^= 2;                  ievent_progress();
                 if (inttiming != 3) {          } while(corestat.vsync < 2);
                         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();          calendar_inc();
         sound_sync();          sound_sync();

Removed from v.1.16  
changed lines
  Added in v.1.20


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