Diff for /np2/pccore.c between versions 1.53 and 1.63

version 1.53, 2004/01/25 06:01:31 version 1.63, 2004/02/07 21:23:21
Line 42 Line 42
         NP2CFG  np2cfg = {          NP2CFG  np2cfg = {
                                 0, 1, 0, 32, 0, 0, 0x40,                                  0, 1, 0, 32, 0, 0, 0x40,
                                 0, 0, 0, 0,                                  0, 0, 0, 0,
                                 {0x3e, 0x63, 0x7a}, 0,                                  {0x3e, 0x73, 0x7b}, 0,
                                 0, 0, {1, 1, 6, 1, 8, 1},                                  0, 0, {1, 1, 6, 1, 8, 1},
   
                                 "VX", PCBASECLOCK25, 4,                                  "VX", PCBASECLOCK25, 4,
Line 57 Line 57
                                 {"", ""}, {"", "", "", ""}, "", "", ""};                                  {"", ""}, {"", "", "", ""}, "", "", ""};
   
         PCCORE  pccore = {      PCBASECLOCK25, 4,          PCCORE  pccore = {      PCBASECLOCK25, 4,
                                                 0, PCMODEL_VX, 0, 0,                                                  0, PCMODEL_VX, 0, 0, {0x3e, 0x73, 0x7b}, 0,
                                                 0, 0,                                                  0, 0,
                                                 4 * PCBASECLOCK25,                                                  4 * PCBASECLOCK25};
                                                 4 * PCBASECLOCK25 * 50 / 3104,  
                                                 4 * PCBASECLOCK25 * 5 / 3104,  
                                                 4 * PCBASECLOCK25 / 1920,  
                                                 4 * PCBASECLOCK25 / 3125,  
                                                 100, 20};  
   
                                                                         // on=0, off=1  
 //      BYTE    dip_default[3] = {0x3e, 0x63, 0x7a};  
 static const BYTE msw_default[8] =  static const BYTE msw_default[8] =
                                                         {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e};                                                          {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e};
   
Line 99  const char *p; Line 92  const char *p;
   
 // ----  // ----
   
 static void setvsyncclock(void) {  
   
         UINT    vfp;  
         UINT    vbp;  
         UINT    lf;  
         UINT    disp;  
         UINT    vs;  
         UINT    maxy;  
         UINT    cnt;  
   
         vfp = gdc.m.para[GDC_SYNC + 5] & 0x3f;  
         if (!vfp) {  
                 vfp = 1;  
         }  
         vbp = gdc.m.para[GDC_SYNC + 7] >> 2;  
         if (!vbp) {  
                 vbp = 1;  
         }  
         lf = LOADINTELWORD(gdc.m.para + GDC_SYNC + 6);  
         lf &= 0x3ff;  
         if (!lf) {  
                 lf = 1024;  
         }  
         disp = vfp + vbp + lf;  
         vs = LOADINTELWORD(gdc.m.para + GDC_SYNC + 4);  
         vs = (vs >> 5) & 0x1f;  
         if (!vs) {  
                 vs = 1;  
         }  
         maxy = disp + vs;  
         cnt = (pccore.realclock * 5) / 282;  
         pccore.raster = cnt / maxy;  
         pccore.hsync = (pccore.raster * 4) / 5;  
         pccore.dispclock = pccore.raster * disp;  
         pccore.vsyncclock = cnt - pccore.dispclock;  
 }  
   
 static void pccore_set(void) {  static void pccore_set(void) {
   
         UINT8   model;          UINT8   model;
         UINT32  multiple;          UINT32  multiple;
           UINT8   extsize;
   
         ZeroMemory(&pccore, sizeof(pccore));          ZeroMemory(&pccore, sizeof(pccore));
         model = PCMODEL_VX;          model = PCMODEL_VX;
Line 168  static void pccore_set(void) { Line 125  static void pccore_set(void) {
         }          }
         pccore.multiple = multiple;          pccore.multiple = multiple;
         pccore.realclock = pccore.baseclock * multiple;          pccore.realclock = pccore.baseclock * multiple;
         pccore.raster = pccore.realclock / 24816;  #if 0
         pccore.hsync = (pccore.raster * 4) / 5;          keybrd.xferclock = pccore.realclock / 1920;
         pccore.dispclock = pccore.realclock * 50 / 3102;          gdc.rasterclock = pccore.realclock / 24816;
         pccore.vsyncclock = pccore.realclock * 5 / 3102;          gdc.hsyncclock = (gdc.rasterclock * 4) / 5;
         pccore.keyboardclock = pccore.realclock / 1920;          gdc.dispclock = pccore.realclock * 50 / 3102;
         pccore.midiclock = pccore.realclock / 3125;          gdc.vsyncclock = pccore.realclock * 5 / 3102;
   #endif
         // 拡張メモリ  
         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;
         }          }
 #if defined(SUPPORT_SCSI)  
         pccore.hddif |= PCHDD_SCSI;          // 拡張メモリ
 #endif          extsize = 0;
           if (!(np2cfg.dipsw[2] & 0x80)) {
                   extsize = min(np2cfg.EXTMEM, 13);
           }
           pccore.extmem = extsize;
           CopyMemory(pccore.dipsw, np2cfg.dipsw, 3);
   
         // サウンドボードの接続          // サウンドボードの接続
         pccore.sound = np2cfg.SOUND_SW;          pccore.sound = np2cfg.SOUND_SW;
Line 262  void pccore_init(void) { Line 219  void pccore_init(void) {
   
         sound_init();          sound_init();
   
         mpu98ii_construct();  
         rs232c_construct();          rs232c_construct();
         pc9861k_construct();          mpu98ii_construct();
           pc9861k_initialize();
   
         iocore_create();          iocore_create();
   
Line 288  void pccore_term(void) { Line 245  void pccore_term(void) {
   
         iocore_destroy();          iocore_destroy();
   
         pc9861k_destruct();          pc9861k_deinitialize();
         rs232c_destruct();  
         mpu98ii_destruct();          mpu98ii_destruct();
           rs232c_destruct();
   
         sxsi_trash();          sxsi_trash();
   
Line 350  void pccore_reset(void) { Line 307  void pccore_reset(void) {
                 CPU_RAM_D000 = 0xffff;                  CPU_RAM_D000 = 0xffff;
         }          }
   
           // HDDセット
           sxsi_open();
   #if defined(SUPPORT_SASI)
           if (sxsi_issasi()) {
                   pccore.hddif &= ~PCHDD_IDE;
                   pccore.hddif |= PCHDD_SASI;
                   TRACEOUT(("supported SASI"));
           }
   #endif
   #if defined(SUPPORT_SCSI)
           if (sxsi_isscsi()) {
                   pccore.hddif |= PCHDD_SCSI;
                   TRACEOUT(("supported SCSI"));
           }
   #endif
   
         sound_changeclock();          sound_changeclock();
         beep_changeclock();          beep_changeclock();
         sound_reset();          sound_reset();
Line 377  void pccore_reset(void) { Line 350  void pccore_reset(void) {
         pal_change(1);          pal_change(1);
   
         bios_init();          bios_init();
         sxsi_open();  
   
         if (np2cfg.ITF_WORK) {          if (np2cfg.ITF_WORK) {
                 CS_BASE = 0xf0000;                  CS_BASE = 0xf0000;
Line 421  static void drawscreen(void) { Line 393  static void drawscreen(void) {
   
         if ((gdcs.textdisp & GDCSCRN_EXT) ||                                            // ver0.28          if ((gdcs.textdisp & GDCSCRN_EXT) ||                                            // ver0.28
                 (gdcs.grphdisp & GDCSCRN_EXT)) {                  (gdcs.grphdisp & GDCSCRN_EXT)) {
                 setvsyncclock();                  gdc_updateclock();
         }          }
   
         if (drawframe) {          if (drawframe) {
Line 561  void screenvsync(NEVENTITEM item) { Line 533  void screenvsync(NEVENTITEM item) {
                 gdc.vsyncint = 0;                  gdc.vsyncint = 0;
                 pic_setirq(2);                  pic_setirq(2);
         }          }
         nevent_set(NEVENT_FLAMES, pccore.vsyncclock, screendisp, NEVENT_RELATIVE);          nevent_set(NEVENT_FLAMES, gdc.vsyncclock, screendisp, NEVENT_RELATIVE);
   
         // drawscreenで pccore.vsyncclockが変更される可能性があります          // drawscreenで pccore.vsyncclockが変更される可能性があります
         if (np2cfg.DISPSYNC) {                                                                                  // ver0.29          if (np2cfg.DISPSYNC) {                                                                                  // ver0.29
Line 627  void pccore_exec(BOOL draw) { Line 599  void pccore_exec(BOOL draw) {
         MEMWAIT_TRAM = np2cfg.wait[0];          MEMWAIT_TRAM = np2cfg.wait[0];
         MEMWAIT_VRAM = np2cfg.wait[2];          MEMWAIT_VRAM = np2cfg.wait[2];
         MEMWAIT_GRCG = np2cfg.wait[4];          MEMWAIT_GRCG = np2cfg.wait[4];
         nevent_set(NEVENT_FLAMES, pccore.dispclock, screenvsync, NEVENT_RELATIVE);          nevent_set(NEVENT_FLAMES, gdc.dispclock, screenvsync, NEVENT_RELATIVE);
   
 //      nevent_get1stevent();  //      nevent_get1stevent();
   
Line 666  void pccore_exec(BOOL draw) { Line 638  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 1
                         if (tr) {                          if ((CPU_CS == 0xf800) && (CPU_IP == 0x0B5B)) {
                                 if ((CPU_CS == 0xf760) || (CPU_CS == 0xf990)) {                                  TRACEOUT(("%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x",
                                         TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));                                                          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  #endif
 #if 0  #if 0
Line 696  void pccore_exec(BOOL draw) { Line 675  void pccore_exec(BOOL draw) {
                                 TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));                                  TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));
                         }                          }
 #endif  #endif
   #if 1           // VX LIO
                           if (CPU_CS == 0xf990) {
                                   if (CPU_IP == 0x07BE) {
                                           TRACEOUT(("%d,%d - %d,%d", CPU_BP, CPU_DX, CPU_SI, CPU_DI));
                                   }
                           }
   #endif
                         i286x_step();                          i286x_step();
 //                      i286c_step();  //                      i286c_step();
                 }                  }

Removed from v.1.53  
changed lines
  Added in v.1.63


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