Diff for /xmil/pccore.c between versions 1.7 and 1.24

version 1.7, 2004/08/04 17:09:25 version 1.24, 2004/08/12 14:03:14
Line 4 Line 4
 #include        "soundmng.h"  #include        "soundmng.h"
 #include        "sysmng.h"  #include        "sysmng.h"
 #include        "timemng.h"  #include        "timemng.h"
   #include        "xmilver.h"
 #include        "z80core.h"  #include        "z80core.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "draw.h"  #include        "nevent.h"
   #include        "ievent.h"
   #include        "timing.h"
   #include        "calendar.h"
   #include        "keystat.h"
   #include        "palettes.h"
   #include        "makescrn.h"
 #include        "sound.h"  #include        "sound.h"
 #include        "sndctrl.h"  #include        "sndctrl.h"
 #include        "menu.h"  
 #include        "font.h"  #include        "font.h"
 #include        "juliet.h"  
 #include        "xmilver.h"  
 #include        "fddfile.h"  #include        "fddfile.h"
 #include        "calendar.h"  
 #include        "timing.h"  
 #include        "defrom.res"  #include        "defrom.res"
 #include        "keystat.h"  
   
   
 const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE);  const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE);
   
         XMILCFG         xmilcfg = {     0, 0, 1, 0, 1, 2, 0, 1,          XMILCFG         xmilcfg = { 2, 1, 0x03,
                                                         22050, 1000, 0, 80,                                                          1, 0, 0, 0,
                                                         0, 0,                                                          22050, 500, 0, 0, 80,
                                                         0, 0,                                                          0, 0, 0, 0};
                                                         0, 0, 0,  
                                                         1,  
                                                         1, 0};  
   
         PCCORE          pccore = {250, 0, 1, 1, 0};          PCCORE          pccore;
           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;
         BYTE            lastmem;  
         DWORD           h_cntbase;  
         BRESULT         soundrenewal;  
   
   
   
 /***********************************************************************  // ----
         IPL-ROM LOAD  
 ***********************************************************************/  
   
 void ipl_load(void) {  static void ipl_load(void) {
   
         FILEH   hdl;          FILEH   hdl;
   
Line 72  void ipl_load(void) { Line 64  void ipl_load(void) {
 }  }
   
   
 /***********************************************************************  // ----
         FONT-ROM LOAD  
 ***********************************************************************/  void pccore_initialize(void) {
   
 void fnt_load(void) {          fddfile_initialize();
           sndctrl_initialize();
           makescrn_initialize();
   
         font_load(NULL, TRUE);          font_load(NULL, TRUE);
   
           crtc_initialize();
           pcg_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) {
   
           soundmng_stop();
           if (corestat.soundrenewal) {
                   corestat.soundrenewal = 0;
                   sndctrl_deinitialize();
                   sndctrl_initialize();
           }
           sound_reset();
   
   
           pccore.baseclock = 2000000;
           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;
   
 BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_SW, BYTE DIP_SW) {  
   
         pccore.HSYNC_CLK = 250;  
         pccore.ROM_SW = 1;  
         pccore.ROM_TYPE = ROM_TYPE;  
         pccore.SOUND_SW = SOUND_SW;  
         pccore.DIP_SW = DIP_SW;  
   
         // スクリーンモードの変更...          // スクリーンモードの変更...
         if (pccore.ROM_TYPE >= 3) {          if (pccore.ROM_TYPE >= 3) {
Line 104  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_ Line 118  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_
                 scrnmng_setcolormode(FALSE);                  scrnmng_setcolormode(FALSE);
         }          }
   
         textdrawproc_renewal();          sound_changeclock();
         ipl_load();          sysmng_cpureset();
   
         Z80_RESET();          Z80_RESET();
           nevent_allreset();
           ievent_reset();
           iocore_reset();
   
           ipl_load();
   
         lastmem = 0x78;  
         RAM0r = mBIOS;          RAM0r = mBIOS;
         RAM0w = mMAIN;          RAM0w = mMAIN;
         h_cntbase = 0;  
         sysmng_cpureset();  
   
         calendar_initialize();  
   
         cgrom_reset();          cgrom_reset();
         cmt_reset();          cmt_reset();
Line 123  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_ Line 137  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_
         ctc_reset();          ctc_reset();
         dmac_reset();          dmac_reset();
         fdc_reset();          fdc_reset();
           memio_reset();
         pcg_reset();          pcg_reset();
         ppi_reset();          ppi_reset();
         sio_reset();          sio_reset();
Line 130  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_ Line 145  BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_
         subcpu_reset();          subcpu_reset();
         vramio_reset();          vramio_reset();
   
           calendar_reset();
           pal_reset();
           makescrn_reset();
         timing_reset();          timing_reset();
         return(SUCCESS);  
 }  
   
   
   
 /***********************************************************************  
         実行/終了  
 ***********************************************************************/  
   
 static  BYTE    keyintcnt = 0;  
 static  BYTE    flame = 0;  
 static  BYTE    inttiming = 0;  
   
 void pccore_initialize(void) {  
   
         sndctrl_initialize();  
   
         init_draw();  
         fnt_load();  
   
         pcg_initialize();  
         ppi_initialize();  
   
         reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW);  
   
 //      keystat_initialize();  
 //      keystat_reset();  
 }  
   
 void pccore_reset(void) {  
   
         soundmng_stop();  
         if (soundrenewal) {  
                 soundrenewal = 0;  
                 sndctrl_deinitialize();  
                 sndctrl_initialize();  
         }  
         reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW);  
         soundmng_play();          soundmng_play();
 }  }
   
 void pccore_deinitialize(void) {  
   
         sndctrl_deinitialize();  
   
 //      keyboard_term();  
   
         fdd_eject(0);  
         fdd_eject(1);  
         fdd_eject(2);  
         fdd_eject(3);  
 }  
   
   
 // ----  // ----
   
Line 219  void iptrace_out(void) { Line 188  void iptrace_out(void) {
 #endif  #endif
   
   
   UINT pccore_getraster(UINT *h) {
   
           SINT32  work;
           UINT    vl;
   
 void x1r_exec(void) {          work = nevent_getwork(NEVENT_FRAMES);
           vl = work / 250;
           if (h) {
                   *h = work - (vl * 250);
           }
           if (corestat.vsync) {
                   vl += corestat.vl;
           }
           return(vl);
   }
   
 extern  BYTE    disp_flashscreen;  void nvitem_vdisp(UINT id) {
   
         v_cnt = 0;          corestat.vsync = 1;
         s_cnt = 0;          pcg.r.vsync = 1;
         xmilcfg.DISPSYNC &= 1;          if (xmilcfg.DISPSYNC & 1) {
         inttiming = xmilcfg.CPU8MHz & 1;                  scrnupdate();
 //      TRACEOUT(("*sync"));          }
           nevent_set(id, (corestat.tl - corestat.vl) * 250,
         while(s_cnt < 266) {                                                                                          nvitem_vsync, NEVENT_RELATIVE);
                 while(h_cnt < pccore.HSYNC_CLK) {  }
 #if defined(TRACE)  
 //                      TRACEOUT(("%.4x", Z80_PC));  void nvitem_vsync(UINT id) {
 //                      if (Z80_PC == 0x8198) {  
 //                              TRACEOUT(("---->sound"));          corestat.vsync = 2;
 //                      }          (void)id;
 //                      if (Z80_PC == 0x8188) {  }
 //                              TRACEOUT(("-- poll sound"));  
 //                      }  
 #endif  // #define      SINGLESTEPONLY
 #if IPTRACE  
   void pccore_exec(BRESULT draw) {
   
           corestat.drawframe = draw;
           soundmng_sync();
   
           corestat.tl = 266 * pccore.multiple / 2;
           corestat.vl = min(corestat.tl, crtc.e.dl);
           corestat.vsync = 0;
           nevent_set(NEVENT_FRAMES, corestat.vl * 250,
                                                                                           nvitem_vdisp, 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
                         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);
                         if (xmilcfg.SOUNDPLY) {  
                                 sound_makesample(pcmbufsize[s_cnt]);          scrnupdate();
                                 juliet2_exec();          sound_sync();
                         }  
                         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) {  
 //                      TRACEOUT(("--->sync"));  
                         pcg.r.vsync = 1;  
                         if (xmilcfg.DISPSYNC == 1) {  
                                 xmilcfg.DISPSYNC |= 0x80;  
                                 scrnupdate();  
                         }  
                 }  
         }  
         if (++flame >= 60) {  
                 flame = 0;  
                 calendar_inc();  
         }  
         if (!xmilcfg.SOUNDPLY) {  
                 sound_makesample(framesoundcnt);  
         }  
         if (!(xmilcfg.DISPSYNC & 0x80)) {  
                 scrnupdate();  
         }  
 }  }
   

Removed from v.1.7  
changed lines
  Added in v.1.24


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