Diff for /xmil/vram/make24.c between versions 1.1 and 1.6

version 1.1, 2004/08/07 07:19:56 version 1.6, 2005/02/04 06:42:12
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "scrnmng.h"  #include        "scrnmng.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  
 #include        "vram.h"  #include        "vram.h"
 #include        "scrndraw.h"  #include        "scrndraw.h"
 #include        "makescrn.h"  #include        "makescrn.h"
Line 9 Line 8
 #include        "font.h"  #include        "font.h"
   
   
 extern  BYTE    dispflg;  
 extern  BYTE    *dispp;  
   
   
 void width80x25_200h(void) {                                                            // 80x25 200line  void width80x25_200h(void) {                                                            // 80x25 200line
   
         UINT    fontcy;          UINT    fontcy;
Line 23  void width80x25_200h(void) {        // 8 Line 18  void width80x25_200h(void) {        // 8
         UINT8   *lp;          UINT8   *lp;
         UINT    x;          UINT    x;
         REG8    udtmp;          REG8    udtmp;
           REG8    dirty;
         UINT8   work[MAKETEXT_STEP * 2];          UINT8   work[MAKETEXT_STEP * 2];
 const UINT8     *src;  const UINT8     *src;
         UINT    lines;          UINT    lines;
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 37  const UINT8 *src; Line 33  const UINT8 *src;
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & dispflg) {                          dirty = udtmp & makescrn.dispflag;
                                 updatetmp[pos] = (UINT8)(udtmp & (~dispflg));                          if (dirty) {
                                   TRAMUPDATE(pos) = (UINT8)(udtmp ^ dirty);
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  if (dirty & UPDATE_TRAM) {
                                 makechr16(work, pos, fontcy, udtmp);                                          ZeroMemory(work, sizeof(work));
                                 src = dispp + (pos << 5);                                          makechr16(work, pos, fontcy, udtmp);
                                 makemix_mix(dst, SURFACE_WIDTH * 2, work, src, fontcy);                                          makemix_mixtext(dst, SURFACE_WIDTH * 2, work, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH, SURFACE_WIDTH * 2,                                          makemix_mixtext(dst + SURFACE_WIDTH, SURFACE_WIDTH * 2,
                                                                         work + MAKETEXT_STEP, src, fontcy);                                                                                          work + MAKETEXT_STEP, fontcy);
                                   }
                                   if (dirty & UPDATE_VRAM) {
                                           src = makescrn.disp1 + TRAM2GRAM(pos);
                                           makemix_mixgrph(dst, SURFACE_WIDTH * 2, src, fontcy);
                                           makemix_mixgrph(dst + SURFACE_WIDTH, SURFACE_WIDTH * 2,
                                                                                                                           src, fontcy);
                                   }
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 2, makescrn.fontcy * 2);                                          makemix_cpy400(dst, fontcy * 2, makescrn.fontcy * 2);
                                 }                                  }
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
Line 56  const UINT8 *src; Line 60  const UINT8 *src;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {
Line 91  const UINT8 *src; Line 95  const UINT8 *src;
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 99  const UINT8 *src; Line 103  const UINT8 *src;
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & UPDATE_VRAM) {                          if (udtmp & UPDATE_TVRAM) {
                                 updatetmp[pos] = (UINT8)(udtmp & (~UPDATE_VRAM));                                  TRAMUPDATE(pos) = (UINT8)(udtmp & (~UPDATE_TVRAM));
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  if (udtmp & UPDATE_TRAM) {
                                 makechr16(work, pos, fontcy, udtmp);                                          ZeroMemory(work, sizeof(work));
                                 src = GRP_RAM + (pos << 5);                                          makechr16(work, pos, fontcy, udtmp);
                                 makemix_mix(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 2,                                          makemix_mixtext(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 2,
                                                         work, src + GRAM_BANK0, fontcy);                                                                                                  work, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 2,                                          makemix_mixtext(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 2,
                                                         work + MAKETEXT_STEP, src + GRAM_BANK1, fontcy);                                                                                                  work + MAKETEXT_STEP, fontcy);
                                   }
                                   src = gram + TRAM2GRAM(pos);
                                   if (udtmp & UPDATE_VRAM0) {
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 2,
                                                                                                   src + GRAM_BANK0, fontcy);
                                   }
                                   if (udtmp & UPDATE_VRAM1) {
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 2,
                                                                                                   src + GRAM_BANK1, fontcy);
                                   }
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 2, makescrn.fontcy * 2);                                          makemix_cpy400(dst, fontcy * 2, makescrn.fontcy * 2);
                                 }                                  }
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
Line 119  const UINT8 *src; Line 133  const UINT8 *src;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {
Line 148  void width80x12_200h(void) {        // 8 Line 162  void width80x12_200h(void) {        // 8
         UINT8   *lp;          UINT8   *lp;
         UINT    x;          UINT    x;
         REG8    udtmp;          REG8    udtmp;
           REG8    dirty;
         UINT8   work[MAKETEXT_STEP * 2];          UINT8   work[MAKETEXT_STEP * 2];
 const UINT8     *src;  const UINT8     *src;
         UINT    lines;          UINT    lines;
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 162  const UINT8 *src; Line 177  const UINT8 *src;
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & dispflg) {                          dirty = udtmp & makescrn.dispflag;
                                 updatetmp[pos] = (UINT8)(udtmp & (~dispflg));                          if (dirty) {
                                   TRAMUPDATE(pos) = (UINT8)(udtmp ^ dirty);
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  if (dirty & UPDATE_TRAM) {
                                 makechr16(work, pos, fontcy, udtmp);                                          ZeroMemory(work, sizeof(work));
                                 src = dispp + (LOW10(pos) << 5);                                          makechr16(work, pos, fontcy, udtmp);
                                 makemix_mix(dst, SURFACE_WIDTH * 4, work, src, fontcy);                                          makemix_mixtext(dst, SURFACE_WIDTH * 4, work, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,                                          makemix_mixtext(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,
                                                 work + MAKETEXT_STEP, src + GRAM_HALFSTEP, fontcy);                                                                                          work + MAKETEXT_STEP, fontcy);
                                 makemix_doubler(dst, fontcy * 2, 0);                                  }
                                   if (dirty & UPDATE_VRAM) {
                                           src = makescrn.disp1 + TRAM2GRAM(LOW10(pos));
                                           makemix_mixgrph(dst, SURFACE_WIDTH * 4, src, fontcy);
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,
                                                                                           src + GRAM_HALFSTEP, fontcy);
                                   }
                           //      makemix_doubler(dst, fontcy * 2, 0);
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 4, makescrn.fontcy * 4);                                          makemix_cpy200(dst, fontcy * 2, makescrn.fontcy * 2);
                                 }                                  }
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
Line 182  const UINT8 *src; Line 205  const UINT8 *src;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {
Line 217  const UINT8 *src; Line 240  const UINT8 *src;
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 225  const UINT8 *src; Line 248  const UINT8 *src;
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & UPDATE_VRAM) {                          if (udtmp & UPDATE_TVRAM) {
                                 updatetmp[pos] = (UINT8)(udtmp & (~UPDATE_VRAM));                                  TRAMUPDATE(pos) = (UINT8)(udtmp & (~UPDATE_TVRAM));
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  if (udtmp & UPDATE_TRAM) {
                                 makechr16(work, pos, fontcy, udtmp);                                          ZeroMemory(work, sizeof(work));
                                 src = GRP_RAM + (LOW10(pos) << 5);                                          makechr16(work, pos, fontcy, udtmp);
                                 makemix_mix(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 4,                                          makemix_mixtext(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 4,
                                                         work, src + GRAM_BANK0L, fontcy);                                                                                          work, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 4,                                          makemix_mixtext(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 4,
                                                         work, src + GRAM_BANK1L, fontcy);                                                                                          work, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,                                          makemix_mixtext(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,
                                                         work + MAKETEXT_STEP, src + GRAM_BANK0H, fontcy);                                                                                          work + MAKETEXT_STEP, fontcy);
                                 makemix_mix(dst + SURFACE_WIDTH * 3, SURFACE_WIDTH * 4,                                          makemix_mixtext(dst + SURFACE_WIDTH * 3, SURFACE_WIDTH * 4,
                                                         work + MAKETEXT_STEP, src + GRAM_BANK1H, fontcy);                                                                                          work + MAKETEXT_STEP, fontcy);
                                   }
                                   src = gram + TRAM2GRAM(LOW10(pos));
                                   if (udtmp & UPDATE_VRAM0) {
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 0, SURFACE_WIDTH * 4,
                                                                                                   src + GRAM_BANK0L, fontcy);
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,
                                                                                                   src + GRAM_BANK0H, fontcy);
                                   }
                                   if (udtmp & UPDATE_VRAM1) {
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 1, SURFACE_WIDTH * 4,
                                                                                                   src + GRAM_BANK1L, fontcy);
                                           makemix_mixgrph(dst + SURFACE_WIDTH * 3, SURFACE_WIDTH * 4,
                                                                                                   src + GRAM_BANK1H, fontcy);
                                   }
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 4, makescrn.fontcy * 4);                                          makemix_cpy400(dst, fontcy * 4, makescrn.fontcy * 4);
                                 }                                  }
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
Line 249  const UINT8 *src; Line 286  const UINT8 *src;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {
Line 283  void width80x20h(void) { Line 320  void width80x20h(void) {
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 291  void width80x20h(void) { Line 328  void width80x20h(void) {
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & UPDATE_TRAM) {                          if (udtmp & UPDATE_TRAM) {
                                 updatetmp[pos] = (UINT8)(udtmp & (~UPDATE_TRAM));                                  TRAMUPDATE(pos) = (UINT8)(udtmp & (~UPDATE_TRAM));
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  ZeroMemory(work, sizeof(work));
                                 makechr16(work, pos, fontcy, udtmp);                                  makechr16(work, pos, fontcy, udtmp);
                                 makemix_txt(dst, SURFACE_WIDTH * 2, work, fontcy);                                  makemix_settext(dst, SURFACE_WIDTH * 2, work, fontcy);
                                 makemix_txt(dst + SURFACE_WIDTH, SURFACE_WIDTH * 2,                                  makemix_settext(dst + SURFACE_WIDTH, SURFACE_WIDTH * 2,
                                                                                                 work + MAKETEXT_STEP, fontcy);                                                                                                  work + MAKETEXT_STEP, fontcy);
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 2, makescrn.fontcy * 2);                                          makemix_cpy400(dst, fontcy * 2, makescrn.fontcy * 2);
                                 }                                  }
                                 makemix_ul20(dst + SURFACE_WIDTH * makescrn.fontcy * 2,                                  makemix_ul20(dst + SURFACE_WIDTH * makescrn.fontcy * 2, pos);
                                                                                                                                         pos, 0);  
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
                         dst += 8;                          dst += 8;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {
Line 345  void width80x10h(void) { Line 381  void width80x10h(void) {
         UINT    i;          UINT    i;
   
         fontcy = min(makescrn.fontcy, MAKETEXT_ROW);          fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
         pos = crtc.s.TXT_TOP;          pos = makescrn.vramtop;
         dst = screenmap;          dst = screenmap;
         newline = FALSE;          newline = FALSE;
         y = makescrn.surfcy;          y = makescrn.surfcy;
Line 353  void width80x10h(void) { Line 389  void width80x10h(void) {
         do {          do {
                 x = makescrn.surfcx;                  x = makescrn.surfcx;
                 do {                  do {
                         udtmp = updatetmp[pos];                          udtmp = TRAMUPDATE(pos);
                         if (udtmp & UPDATE_TRAM) {                          if (udtmp & UPDATE_TRAM) {
                                 updatetmp[pos] = (UINT8)(udtmp & (~UPDATE_TRAM));                                  TRAMUPDATE(pos) = (UINT8)(udtmp & (~UPDATE_TRAM));
                                 newline = TRUE;                                  newline = TRUE;
                                 ZeroMemory(work, sizeof(work));                                  ZeroMemory(work, sizeof(work));
                                 makechr16(work, pos, fontcy, udtmp);                                  makechr16(work, pos, fontcy, udtmp);
                                 makemix_txt(dst, SURFACE_WIDTH * 4, work, fontcy);                                  makemix_settext(dst, SURFACE_WIDTH * 4, work, fontcy);
                                 makemix_txt(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,                                  makemix_settext(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4,
                                                                                         work + MAKETEXT_STEP, fontcy);                                                                                          work + MAKETEXT_STEP, fontcy);
                                 makemix_doubler(dst, fontcy * 2, 0);  
                                 if (fontcy < makescrn.fontcy) {                                  if (fontcy < makescrn.fontcy) {
                                         makemix_remcpy(dst, fontcy * 4, makescrn.fontcy * 4);                                          makemix_cpy200(dst, fontcy * 2, makescrn.fontcy * 2);
                                 }                                  }
                                 makemix_ul10(dst + SURFACE_WIDTH * makescrn.fontcy * 4,                                  makemix_ul10(dst + SURFACE_WIDTH * makescrn.fontcy * 4, pos);
                                                                                                                                         pos, 0);  
                         }                          }
                         pos = LOW11(pos + 1);                          pos = LOW11(pos + 1);
                         dst += 8;                          dst += 8;
                 } while(--x);                  } while(--x);
   
                 pos = LOW11(pos + makescrn.surfrx);                  pos = LOW11(pos + makescrn.surfrx);
                 if (updatetmp[LOW11(pos - 1)] & 4) {                    // 縦倍角描画だったら                  if (TRAMUPDATE(LOW11(pos - 1)) & 4) {                   // 縦倍角描画だったら
                         makescrn.fontycnt += makescrn.charcy;                          makescrn.fontycnt += makescrn.charcy;
                 }                  }
                 else {                  else {

Removed from v.1.1  
changed lines
  Added in v.1.6


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