Diff for /xmil/vram/makescrn.c between versions 1.14 and 1.16

version 1.14, 2004/08/18 08:08:13 version 1.16, 2005/02/04 06:42:12
Line 11 Line 11
   
   
         MAKESCRN        makescrn;          MAKESCRN        makescrn;
           UINT            drawtime = 0;
         UINT8   scrnallflash;  
         UINT    drawtime = 0;  
   
   
 static void fillupdatetmp(void) {  static void fillupdatetmp(void) {
   
         UINT32  *p;  
         UINT    i;          UINT    i;
   
         p = (UINT32 *)updatetmp;          for (i=0; i<0x800; i++) {
         for (i=0; i<0x200; i++) {                  TRAMUPDATE(i) |= UPDATE_TVRAM;
                 p[i] |= (UPDATE_TVRAM << 24) | (UPDATE_TVRAM << 16) |  
                                                                                 (UPDATE_TVRAM << 8) | UPDATE_TVRAM;  
         }          }
 }  }
   
Line 47  static void flashupdatetmp(void) { Line 42  static void flashupdatetmp(void) {
         y = crtc.e.yl;          y = crtc.e.yl;
         do {          do {
                 for (x=0; x<crtc.s.reg[CRTCREG_HDISP]; x++) {                  for (x=0; x<crtc.s.reg[CRTCREG_HDISP]; x++) {
                         if (!(tram[TRAM_ATR + LOW11(posl + x)] & TRAMATR_Yx2)) {                          if (!(TRAM_ATR(LOW11(posl + x)) & TRAMATR_Yx2)) {
                                 break;                                  break;
                         }                          }
                 }                  }
Line 56  static void flashupdatetmp(void) { Line 51  static void flashupdatetmp(void) {
                 r = (crtc.s.reg[CRTCREG_HDISP] + 1) >> 1;                  r = (crtc.s.reg[CRTCREG_HDISP] + 1) >> 1;
                 do {                  do {
                         posr = LOW11(posl + 1);                          posr = LOW11(posl + 1);
                         atr = (tram[TRAM_ATR + posl] << 8) | tram[TRAM_ATR + posr];                          atr = (TRAM_ATR(posl) << 8) | TRAM_ATR(posr);
                         udt = udtbase;                          udt = udtbase;
                         if (!y2) {                          if (!y2) {
                                 if (atr & (TRAMATR_Yx2 << 8)) {                                  if (atr & (TRAMATR_Yx2 << 8)) {
Line 80  static void flashupdatetmp(void) { Line 75  static void flashupdatetmp(void) {
                         if (atr & (TRAMATR_Xx2 << 0)) {                         // 右側倍角?                          if (atr & (TRAMATR_Xx2 << 0)) {                         // 右側倍角?
                                 udt |= 0x0008;                                  udt |= 0x0008;
                         }                          }
                         if ((updatetmp[posl] ^ (udt >> 8)) & 0x1f) {                          if ((TRAMUPDATE(posl) ^ (udt >> 8)) & 0x1f) {
                                 updatetmp[posl] = (UINT8)((udt >> 8) | UPDATE_TVRAM);                                  TRAMUPDATE(posl) = (UINT8)((udt >> 8) | UPDATE_TRAM);
                         }                          }
                         if ((updatetmp[posr] ^ (udt >> 0)) & 0x1f) {                          if ((TRAMUPDATE(posr) ^ (udt >> 0)) & 0x1f) {
                                 updatetmp[posr] = (UINT8)((udt >> 0) | UPDATE_TVRAM);                                  TRAMUPDATE(posr) = (UINT8)((udt >> 0) | UPDATE_TRAM);
                         }                          }
                         posl = LOW11(posl + 2);                          posl = LOW11(posl + 2);
                 } while(--r);                  } while(--r);
Line 100  static BRESULT updateblink(void) { Line 95  static BRESULT updateblink(void) {
         REG8    update;          REG8    update;
         UINT    r;          UINT    r;
   
         if (makescrn.blinktime) {          pos = makescrn.vramtop;
                 makescrn.blinktime--;          makescrn.blinktest ^= 0x10;
                 return(FALSE);          update = 0;
           r = makescrn.vramsize;
           while(r) {
                   r--;
                   if (TRAM_ATR(pos) & 0x10) {
                           TRAMUPDATE(pos) |= UPDATE_TRAM;
                           update = UPDATE_TRAM;
                   }
                   pos = LOW11(pos + 1);
           }
           if (update) {
                   return(TRUE);
         }          }
         else {          else {
                 makescrn.blinktime = 30 - 1;                  return(FALSE);
                 pos = makescrn.vramtop;  
                 makescrn.blinktest ^= 0x10;  
                 update = 0;  
                 r = makescrn.vramsize;  
                 while(r) {  
                         r--;  
                         if (tram[TRAM_ATR + pos] & 0x10) {  
                                 updatetmp[pos] |= UPDATE_TRAM;  
                                 update = UPDATE_TRAM;  
                         }  
                         pos = LOW11(pos + 1);  
                 }  
                 if (update) {  
                         makescrn.existblink = 1;  
                         return(TRUE);  
                 }  
                 else {  
                         return(FALSE);  
                 }  
         }          }
 }  }
   
Line 206  static void changemodes(void) { Line 193  static void changemodes(void) {
                 makescrn.disp2 = gram + GRAM_BANK0;                  makescrn.disp2 = gram + GRAM_BANK0;
                 makescrn.dispflag = UPDATE_TRAM + UPDATE_VRAM1;                  makescrn.dispflag = UPDATE_TRAM + UPDATE_VRAM1;
         }          }
         scrnallflash = 1;  
         makescrn.palandply = 1;  
 }  }
   
 static void changecrtc(void) {  static void changecrtc(void) {
Line 265  static void changecrtc(void) { Line 250  static void changecrtc(void) {
         }          }
   
         surfsy = charcy * surfcy * 2;          surfsy = charcy * surfcy * 2;
           // ハイドライド3で画面が消えないのでロジックを修正すべし
         x = min(scrnxmax, makescrn.surfcx);          x = min(scrnxmax, makescrn.surfcx);
         if (surfcx < x) {                                                               // 小さくなった          if (surfcx < x) {                                                               // 小さくなった
                 x = (x - surfcx) * 8;                  x = (x - surfcx) * 8;
Line 291  static void changecrtc(void) { Line 277  static void changecrtc(void) {
   
 void scrnupdate(void) {  void scrnupdate(void) {
   
         BRESULT ddrawflash;          REG8    flag;
         BRESULT allflash;          REG8    existblink;
   
         if (!corestat.drawframe) {          if (!corestat.drawframe) {
                 return;                  return;
         }          }
         corestat.drawframe = 0;          corestat.drawframe = 0;
   
         ddrawflash = makescrn.nextdraw;          flag = makescrn.nextdraw;
         allflash = FALSE;          if (crtc.e.scrnflash) {
                   crtc.e.scrnflash = 0;
                   flag |= SCRNUPD_FLASH;
           }
           if (crtc.e.scrnallflash) {
                   crtc.e.scrnallflash = 0;
                   flag |= SCRNUPD_ALLFLASH;
           }
           if (crtc.e.palandply) {
                   crtc.e.palandply = 0;
                   flag |= SCRNUPD_PALANDPLY;
           }
   
         if (makescrn.dispmode != crtc.e.dispmode) {          if (makescrn.dispmode != crtc.e.dispmode) {
                   TRACEOUT(("change mode!"));
                 changemodes();                  changemodes();
                   flag |= SCRNUPD_ALLFLASH | SCRNUPD_PALANDPLY;
         }          }
         if (scrnallflash) {          if (flag & SCRNUPD_ALLFLASH) {
                 scrnallflash = 0;  
                 fillupdatetmp();  
                 changecrtc();                  changecrtc();
                 ddrawflash = TRUE;                  TRACEOUT(("flash! %dx%d", makescrn.surfcx, makescrn.surfcy));
                 allflash = TRUE;                  fillupdatetmp();
                 makescrn.scrnflash = 1;                  flag |= SCRNUPD_FLASH;
         }          }
         if (makescrn.remakeattr) {          if (crtc.e.remakeattr) {
                 makescrn.remakeattr = 0;                  crtc.e.remakeattr = 0;
                 flashupdatetmp();                  flashupdatetmp();
         }          }
         if (makescrn.palandply) {          if (flag & SCRNUPD_PALANDPLY) {
                 makescrn.palandply = 0;  
                 pal_update();                  pal_update();
                 ddrawflash = TRUE;  
         }          }
         if (makescrn.existblink) {  
                 makescrn.scrnflash |= updateblink();          if (crtc.e.blinktime) {
                   crtc.e.blinktime--;
           }
           else {
                   crtc.e.blinktime = 30 - 1;
                   if (crtc.e.existblink) {
                           existblink = updateblink();
                           crtc.e.existblink = existblink;
                           flag |= existblink;
                   }
         }          }
   
         if (makescrn.scrnflash) {          if (flag & SCRNUPD_FLASH) {
                 makescrn.scrnflash = 0;  
                 if (makescrn.vramsize) {                  if (makescrn.vramsize) {
                         makescrn.fontycnt = 0;                          makescrn.fontycnt = 0;
                         screenmake[makescrn.dispmode & DISPMODE_MASKMODE]();                          screenmake[makescrn.dispmode & DISPMODE_MASKMODE]();
Line 383  void scrnupdate(void) { Line 387  void scrnupdate(void) {
                                         break;                                          break;
                         }                          }
 #endif  #endif
                         ddrawflash = TRUE;  
                 }                  }
         }          }
   
         if (ddrawflash) {          if (flag) {
                 makescrn.nextdraw = scrndraw_draw(allflash);                  makescrn.nextdraw = scrndraw_draw(flag & SCRNUPD_ALLFLASH);
                 drawtime++;                  drawtime++;
         }          }
 }  }

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


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