Diff for /xmil/vram/makescrn.c between versions 1.4 and 1.8

version 1.4, 2004/08/08 16:39:04 version 1.8, 2004/08/12 17:57:36
Line 12 Line 12
                 MAKESCRN        makescrn;                  MAKESCRN        makescrn;
   
                 BYTE    scrnallflash;                  BYTE    scrnallflash;
                 BYTE    blinktest = 0;  
   
 static  BYTE    lastdisp = 0;  static  BYTE    lastdisp = 0;
                 BYTE    dispflg;  
                 BYTE    *dispp = &GRP_RAM[GRAM_BANK0];  
                 BYTE    *dispp2 = &GRP_RAM[GRAM_BANK1];  
 static  BYTE    blinktime = 1;  static  BYTE    blinktime = 1;
                   UINT    drawtime = 0;
                 DWORD   drawtime = 0;  
   
   
 static void fillupdatetmp(void) {  static void fillupdatetmp(void) {
Line 48  static void flashupdatetmp(void) { Line 42  static void flashupdatetmp(void) {
         REG16   udtbase;          REG16   udtbase;
         REG16   udt;          REG16   udt;
   
           if (!makescrn.vramsize) {
                   return;
           }
         posl = crtc.s.TXT_TOP;          posl = crtc.s.TXT_TOP;
         y = crtc.s.TXT_YL;          y = crtc.s.TXT_YL;
         do {          do {
Line 212  static BRESULT updateblink(void) { Line 209  static BRESULT updateblink(void) {
         else {          else {
                 blinktime = 30 - 1;                  blinktime = 30 - 1;
                 pos = makescrn.vramtop;                  pos = makescrn.vramtop;
                 blinktest ^= 0x10;                  makescrn.blinktest ^= 0x10;
                 update = 0;                  update = 0;
                 r = makescrn.vramsize;                  r = makescrn.vramsize;
                 while(r) {                  while(r) {
Line 240  static void changemodes(void) { Line 237  static void changemodes(void) {
   
         lastdisp = crtc.e.dispmode;          lastdisp = crtc.e.dispmode;
         if (!(lastdisp & SCRN_BANK1)) {          if (!(lastdisp & SCRN_BANK1)) {
                 dispp = GRP_RAM + GRAM_BANK0;                  makescrn.disp1 = gram + GRAM_BANK0;
                 dispp2 = GRP_RAM + GRAM_BANK1;                  makescrn.disp2 = gram + GRAM_BANK1;
                 dispflg = UPDATE_TRAM | UPDATE_VRAM0;                  makescrn.dispflag = UPDATE_TRAM | UPDATE_VRAM0;
         }          }
         else {          else {
                 dispp = GRP_RAM + GRAM_BANK1;                  makescrn.disp1 = gram + GRAM_BANK1;
                 dispp2 = GRP_RAM + GRAM_BANK0;                  makescrn.disp2 = gram + GRAM_BANK0;
                 dispflg = UPDATE_TRAM | UPDATE_VRAM1;                  makescrn.dispflag = UPDATE_TRAM | UPDATE_VRAM1;
         }          }
         scrnallflash = 1;          scrnallflash = 1;
         makescrn.palandply = 1;          makescrn.palandply = 1;
Line 255  static void changemodes(void) { Line 252  static void changemodes(void) {
   
 static void changecrtc(void) {  static void changecrtc(void) {
   
           UINT    scrnxmax;
           UINT    scrnymax;
           UINT    textxl;
           UINT    surfcx;
         REG8    widthmode;          REG8    widthmode;
         UINT    fontcy;          UINT    fontcy;
         UINT    underlines;          UINT    underlines;
         REG8    y2;          REG8    y2;
         UINT    charcy;          UINT    charcy;
         UINT    surfcy;          UINT    surfcy;
           UINT    x;
           UINT    y;
           UINT8   *p;
   
         makescrn.vramtop = LOW11(crtc.s.TXT_TOP);          makescrn.vramtop = LOW11(crtc.s.TXT_TOP);
   
           scrnxmax = (crtc.s.TXT_XL <= 40)?40:80;
           scrnymax = 200;
         if (crtc.s.TXT_XL <= 40) {          if (crtc.s.TXT_XL <= 40) {
                 if (lastdisp & SCRN_DRAW4096) {                  if (lastdisp & SCRN_DRAW4096) {
                         widthmode = SCRNWIDTHMODE_4096;                          widthmode = SCRNWIDTHMODE_4096;
Line 277  static void changecrtc(void) { Line 283  static void changecrtc(void) {
         }          }
         scrndraw_changewidth(widthmode);          scrndraw_changewidth(widthmode);
   
         makescrn.surfcx = min(80, crtc.s.TXT_XL);          textxl = crtc.s.TXT_XL;
         makescrn.surfrx = crtc.s.TXT_XL - makescrn.surfcx;          surfcx = min(scrnxmax, textxl);
   
         fontcy = crtc.s.FNT_YL;          fontcy = crtc.e.fonty;
         if (crtc.s.SCRN_BITS & SCRN_24KHZ) {  
                 fontcy >>= 1;  
         }  
         underlines = (crtc.s.SCRN_BITS & SCRN_UNDERLINE)?2:0;          underlines = (crtc.s.SCRN_BITS & SCRN_UNDERLINE)?2:0;
         if (fontcy > underlines) {          if (fontcy > underlines) {
                 fontcy -= underlines;                  fontcy -= underlines;
Line 307  static void changecrtc(void) { Line 310  static void changecrtc(void) {
         charcy = fontcy + underlines;          charcy = fontcy + underlines;
         makescrn.fontcy = fontcy;          makescrn.fontcy = fontcy;
         makescrn.charcy = charcy;          makescrn.charcy = charcy;
   
         charcy <<= y2;          charcy <<= y2;
         surfcy = 200 / charcy;          surfcy = scrnymax / charcy;
         if (surfcy > crtc.s.TXT_YL) {          if (surfcy > crtc.s.TXT_YL) {
                 surfcy = crtc.s.TXT_YL;                  surfcy = crtc.s.TXT_YL;
         }          }
   
           x = min(scrnxmax, makescrn.surfcx);
           if (surfcx < x) {                                                               // 小さくなった
                   x = (x - surfcx) * 8;
                   p = screenmap + (surfcx * 8);
                   y = surfcy * 2;
                   while(y) {
                           y--;
                           ZeroMemory(p, x);
                           p += SURFACE_WIDTH;
                   }
           }
           if (surfcy < makescrn.surfcy) {
                   ZeroMemory(screenmap + (SURFACE_WIDTH * surfcy * 2),
                                                           SURFACE_WIDTH * (makescrn.surfcy - surfcy) * 2);
           }
           makescrn.surfcx = surfcx;
           makescrn.surfrx = textxl - surfcx;
         makescrn.surfcy = surfcy;          makescrn.surfcy = surfcy;
         makescrn.surfstep = (SURFACE_WIDTH * charcy * 2) - (makescrn.surfcx * 8);          makescrn.surfstep = (SURFACE_WIDTH * charcy * 2) - (surfcx * 8);
         makescrn.vramsize = min(0x800, surfcy * crtc.s.TXT_XL);          makescrn.vramsize = min(0x800, surfcy * textxl);
         scrnmng_setheight(0, charcy * surfcy * 2);  //      scrnmng_setheight(0, charcy * surfcy * 2);
 }  }
   
   
Line 340  static const DRAWFN screendraw2[8] = { Line 360  static const DRAWFN screendraw2[8] = {
 void scrnupdate(void) {  void scrnupdate(void) {
   
         BRESULT ddrawflash;          BRESULT ddrawflash;
           BRESULT allflash;
   
         if (!corestat.drawframe) {          if (!corestat.drawframe) {
                 return;                  return;
Line 347  void scrnupdate(void) { Line 368  void scrnupdate(void) {
         corestat.drawframe = 0;          corestat.drawframe = 0;
   
         ddrawflash = FALSE;          ddrawflash = FALSE;
           allflash = FALSE;
         if (lastdisp != crtc.e.dispmode) {          if (lastdisp != crtc.e.dispmode) {
                 changemodes();                  changemodes();
         }          }
Line 354  void scrnupdate(void) { Line 376  void scrnupdate(void) {
                 scrnallflash = 0;                  scrnallflash = 0;
                 fillupdatetmp();                  fillupdatetmp();
                 changecrtc();                  changecrtc();
                   allflash = TRUE;
                 makescrn.scrnflash = 1;                  makescrn.scrnflash = 1;
         }          }
         if (makescrn.remakeattr) {          if (makescrn.remakeattr) {
Line 371  void scrnupdate(void) { Line 394  void scrnupdate(void) {
   
         if (makescrn.scrnflash) {          if (makescrn.scrnflash) {
                 makescrn.scrnflash = 0;                  makescrn.scrnflash = 0;
                 makescrn.fontycnt = 0;                  if (makescrn.vramsize) {
                 switch(lastdisp & SCRN64_MASK) {                          makescrn.fontycnt = 0;
                         case SCRN64_320x200:                          switch(lastdisp & SCRN64_MASK) {
 //                              width40x25_64s();                                  case SCRN64_320x200:
                                 break;  //                                      width40x25_64s();
                                           break;
                         case SCRN64_L320x200x2:  
 //                              width40x25_64x2();                                  case SCRN64_L320x200x2:
                                 break;  //                                      width40x25_64x2();
                                           break;
                         case SCRN64_L640x200:  
 //                              width80x25_64s();                                  case SCRN64_L640x200:
                                 break;  //                                      width80x25_64s();
                                           break;
                         case SCRN64_H320x400:  
 //                              width40x25_64h();                                  case SCRN64_H320x400:
                                 break;  //                                      width40x25_64h();
                                           break;
                         case SCRN64_320x200x4096:  
 //                              width40x25_4096();                                  case SCRN64_320x200x4096:
                                 break;  //                                      width40x25_4096();
                                           break;
                         case SCRN64_320x100:  
 //                              width40x12_64l();                                  case SCRN64_320x100:
                                 break;  //                                      width40x12_64l();
                                           break;
                         case SCRN64_320x100x2:  
 //                              width40x12_64x2();                                  case SCRN64_320x100x2:
                                 break;  //                                      width40x12_64x2();
                                           break;
                         case SCRN64_L640x100:  
 //                              width80x12_64s();                                  case SCRN64_L640x100:
                                 break;  //                                      width80x12_64s();
                                           break;
                         case SCRN64_H320x200:  
 //                              width40x12_64h();                                  case SCRN64_H320x200:
                                 break;  //                                      width40x12_64h();
                                           break;
                         case SCRN64_320x100x4096:  
 //                              width40x12_4096();                                  case SCRN64_320x100x4096:
                                 break;  //                                      width40x12_4096();
                                           break;
 //                      case SCRN64_INVALID:  
                         default:  //                              case SCRN64_INVALID:
                                 if (!(crtc.s.SCRN_BITS & SCRN_UNDERLINE)) {                                  default:
                                         screendraw[crtc.s.SCRN_BITS & 7]();                                          if (!(crtc.s.SCRN_BITS & SCRN_UNDERLINE)) {
                                 }                                                  screendraw[crtc.s.SCRN_BITS & 7]();
                                 else {                                          }
                                         screendraw2[crtc.s.SCRN_BITS & 7]();                                          else {
                                 }                                                  screendraw2[crtc.s.SCRN_BITS & 7]();
                                 break;                                          }
                                           break;
                           }
                           ddrawflash = 1;
                 }                  }
                 ddrawflash = 1;  
         }          }
   
         if (ddrawflash) {          if (ddrawflash) {
                 ddrawflash = 0;                  ddrawflash = 0;
                 scrndraw_draw(FALSE);                  scrndraw_draw(allflash);
                 drawtime++;                  drawtime++;
         }          }
 }  }
Line 441  void makescrn_initialize(void) { Line 466  void makescrn_initialize(void) {
   
 void makescrn_reset(void) {  void makescrn_reset(void) {
   
         fillupdatetmp();  
         changemodes();          changemodes();
         changecrtc();          changecrtc();
           flashupdatetmp();
 }  }
   

Removed from v.1.4  
changed lines
  Added in v.1.8


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