Diff for /np2/lio/gline.c between versions 1.10 and 1.15

version 1.10, 2004/02/22 00:05:56 version 1.15, 2005/05/20 13:59:47
Line 7 Line 7
   
   
 typedef struct {  typedef struct {
         BYTE    x1[2];          UINT8   x1[2];
         BYTE    y1[2];          UINT8   y1[2];
         BYTE    x2[2];          UINT8   x2[2];
         BYTE    y2[2];          UINT8   y2[2];
         BYTE    pal;          UINT8   pal;
         BYTE    type;          UINT8   type;
         BYTE    sw;          UINT8   sw;
         BYTE    style[2];          UINT8   style[2];
         BYTE    patleng;          UINT8   patleng;
         BYTE    off[2];          UINT8   off[2];
         BYTE    seg[2];          UINT8   seg[2];
 } GLINE;  } GLINE;
   
 typedef struct {  typedef struct {
Line 178  static void glineb(const _GLIO *lio, con Line 178  static void glineb(const _GLIO *lio, con
   
 // ----  // ----
   
 static void gbox(const _GLIO *lio, const LINEPT *lp, BYTE *tile, UINT leng) {  static void gbox(const _GLIO *lio, const LINEPT *lp, UINT8 *tile, UINT leng) {
   
         int             x1;          int             x1;
         int             y1;          int             y1;
Line 187  static void gbox(const _GLIO *lio, const Line 187  static void gbox(const _GLIO *lio, const
         int             tmp;          int             tmp;
         UINT32  csrw;          UINT32  csrw;
         GDCVECT vect;          GDCVECT vect;
         UINT16  pat[4];          UINT    planes;
           UINT    adrs[4];
           UINT8   ope[4];
           UINT16  pat;
           UINT8   *tterm;
           UINT    r;
   
         x1 = lp->x1;          x1 = lp->x1;
         y1 = lp->y1;          y1 = lp->y1;
Line 212  static void gbox(const _GLIO *lio, const Line 217  static void gbox(const _GLIO *lio, const
         y1 = max(y1, lio->draw.y1);          y1 = max(y1, lio->draw.y1);
         x2 = min(x2, lio->draw.x2);          x2 = min(x2, lio->draw.x2);
         y2 = min(y2, lio->draw.y2);          y2 = min(y2, lio->draw.y2);
         pat[0] = 0xffff;  
         pat[1] = 0xffff;          csrw = 0;
         pat[2] = 0xffff;          if (lio->draw.flag & LIODRAW_UPPER) {
         pat[3] = 0xffff;                  csrw += 16000 >> 1;
         if (leng != 0) {  
         }          }
         if (!(lio->draw.flag & LIODRAW_MONO)) {          if (!(lio->draw.flag & LIODRAW_MONO)) {
                 while(y1 <= y2) {                  planes = (lio->draw.flag & LIODRAW_4BPP)?4:3;
                         gdcsub_setvectl(&vect, x1, y1, x2, y1);                  adrs[0] = csrw + 0x4000;
                         csrw = (y1 * 40) + (x1 >> 4) + ((x1 & 0xf) << 20);                  adrs[1] = csrw + 0x8000;
                         if (lio->draw.flag & LIODRAW_UPPER) {                  adrs[2] = csrw + 0xc000;
                                 csrw += 16000 >> 1;                  adrs[3] = csrw + 0x0000;
                         }                  ope[0] = (lp->pal & 1)?GDCOPE_SET:GDCOPE_CLEAR;
                         gdcsub_vectl(csrw + 0x4000, &vect, pat[0],                  ope[1] = (lp->pal & 2)?GDCOPE_SET:GDCOPE_CLEAR;
                                                         (REG8)((lp->pal & 1)?GDCOPE_SET:GDCOPE_CLEAR));                  ope[2] = (lp->pal & 4)?GDCOPE_SET:GDCOPE_CLEAR;
                         gdcsub_vectl(csrw + 0x8000, &vect, pat[1],                  ope[3] = (lp->pal & 8)?GDCOPE_SET:GDCOPE_CLEAR;
                                                         (REG8)((lp->pal & 2)?GDCOPE_SET:GDCOPE_CLEAR));          }
                         gdcsub_vectl(csrw + 0xc000, &vect, pat[2],          else {
                                                         (REG8)((lp->pal & 4)?GDCOPE_SET:GDCOPE_CLEAR));                  planes = 1;
                         if (lio->draw.flag & LIODRAW_4BPP) {                  adrs[0] = csrw + (((lio->draw.flag + 1) & LIODRAW_PMASK) << 12);
                                 gdcsub_vectl(csrw, &vect, pat[3],                  ope[0] = (lp->pal)?GDCOPE_SET:GDCOPE_CLEAR;
                                                         (REG8)((lp->pal & 8)?GDCOPE_SET:GDCOPE_CLEAR));          }
                         }  
                         y1++;          if (leng == 0) {
                 }                  tile = NULL;
                   tterm = NULL;
         }          }
         else {          else {
                 while(y1 <= y2) {                  tterm = tile + leng;
                         gdcsub_setvectl(&vect, x1, y1, x2, y1);                  tmp = (x1 - lio->draw.x1) & 7;
                         csrw = (y1 * 40) + (x1 >> 4) + ((x1 & 0xf) << 20);                  do {
                         if (lio->draw.flag & LIODRAW_UPPER) {                          r = GDCPATREVERSE(*tile);
                                 csrw += 16000 >> 1;                          *tile = (UINT8)((r << tmp) | (r >> (8 - tmp)));
                   } while(++tile < tterm);
                   tile -= leng;
                   tmp = (y1 - lio->draw.y1) * planes;
                   tile += tmp % leng;
           }
   
           pat = 0xffff;
           while(y1 <= y2) {
                   gdcsub_setvectl(&vect, x1, y1, x2, y1);
                   csrw = (y1 * 40) + (x1 >> 4) + ((x1 & 0xf) << 20);
                   r = 0;
                   do {
                           if (tile) {
                                   pat = (*tile << 8) | *tile;
                                   if (++tile >= tterm) {
                                           tile -= leng;
                                   }
                         }                          }
                         csrw += ((lio->draw.flag + 1) & LIODRAW_PMASK) << 12;                          gdcsub_vectl(csrw + adrs[r], &vect, pat, ope[r]);
                         gdcsub_vectl(csrw, &vect, pat[0],                  } while(++r < planes);
                                                                 (REG8)((lp->pal)?GDCOPE_SET:GDCOPE_CLEAR));                  y1++;
                         y1++;  
                 }  
         }          }
 }  }
   
Line 279  REG8 lio_gline(GLIO lio) { Line 299  REG8 lio_gline(GLIO lio) {
         LINEPT  lp;          LINEPT  lp;
         UINT16  pat;          UINT16  pat;
         UINT    leng;          UINT    leng;
         UINT    lengmin;  //      UINT    lengmin;
         BYTE    tile[256];          UINT8   tile[256];
   
         lio_updatedraw(lio);          lio_updatedraw(lio);
         i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat));          MEMR_READS(CPU_DS, CPU_BX, &dat, sizeof(dat));
         lp.x1 = (SINT16)LOADINTELWORD(dat.x1);          lp.x1 = (SINT16)LOADINTELWORD(dat.x1);
         lp.y1 = (SINT16)LOADINTELWORD(dat.y1);          lp.y1 = (SINT16)LOADINTELWORD(dat.y1);
         lp.x2 = (SINT16)LOADINTELWORD(dat.x2);          lp.x2 = (SINT16)LOADINTELWORD(dat.x2);
         lp.y2 = (SINT16)LOADINTELWORD(dat.y2);          lp.y2 = (SINT16)LOADINTELWORD(dat.y2);
   
           TRACEOUT(("lio_gline %d,%d-%d,%d [%d]", lp.x1, lp.y1, lp.x2, lp.y2, dat.type));
   
         if (dat.pal == 0xff) {          if (dat.pal == 0xff) {
                 lp.pal = lio->work.fgcolor;                  dat.pal = lio->work.fgcolor;
         }          }
         else {          if (dat.pal >= lio->draw.palmax) {
                 lp.pal = dat.pal;  
         }  
         if (lp.pal >= lio->draw.palmax) {  
                 goto gline_err;                  goto gline_err;
         }          }
         pat = 0xffff;          pat = 0xffff;
Line 303  REG8 lio_gline(GLIO lio) { Line 323  REG8 lio_gline(GLIO lio) {
                         pat = (GDCPATREVERSE(dat.style[0]) << 8) +                          pat = (GDCPATREVERSE(dat.style[0]) << 8) +
                                                                                         GDCPATREVERSE(dat.style[1]);                                                                                          GDCPATREVERSE(dat.style[1]);
                 }                  }
                   lp.pal = dat.pal;
                 if (dat.type == 0) {                  if (dat.type == 0) {
                         gline(lio, &lp, pat);                          gline(lio, &lp, pat);
                 }                  }
Line 312  REG8 lio_gline(GLIO lio) { Line 333  REG8 lio_gline(GLIO lio) {
         }          }
         else if (dat.type == 2) {          else if (dat.type == 2) {
                 leng = 0;                  leng = 0;
                 if (dat.sw != 2) {                  if (dat.sw == 2) {
                         leng = dat.patleng;                          leng = dat.patleng;
                         if (leng == 0) {                          if (leng == 0) {
                                 goto gline_err;                                  goto gline_err;
                         }                          }
                         i286_memstr_read(LOADINTELWORD(dat.seg), LOADINTELWORD(dat.off),                          MEMR_READS(LOADINTELWORD(dat.seg), LOADINTELWORD(dat.off),
                                                                                                                                 tile, leng);                                                                                                                                  tile, leng);
                 }                  }
                 gbox(lio, &lp, tile, leng);                  if (dat.sw != 1) {
                           lp.pal = dat.pal;
                           gbox(lio, &lp, tile, leng);
                   }
                   else {
                           lp.pal = dat.style[0];
                           gbox(lio, &lp, tile, leng);
                           lp.pal = dat.pal;
                           glineb(lio, &lp, 0xffff);
                   }
         }          }
         else {          else {
                 goto gline_err;                  goto gline_err;

Removed from v.1.10  
changed lines
  Added in v.1.15


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