Diff for /xmil/vram/palettes.c between versions 1.5 and 1.8

version 1.5, 2004/08/07 07:19:56 version 1.8, 2004/08/08 09:12:06
Line 67  void pal_makegrad(RGB32 *pal, int pals,  Line 67  void pal_makegrad(RGB32 *pal, int pals, 
         }          }
 }  }
   
 void pals_cnv16pal(RGB16 *dst, const RGB32 *src, UINT pals) {  
   
         while(pals--) {  
                 *dst++ = scrnmng_makepal16(*src++);  
         }  
 }  
   
   
 // ----  // ----
   
 static  WORD    halfgrp = 0;  
 static  WORD    halftxt = 0;  
   
   
 typedef struct {  typedef struct {
         UINT8   blankcol;          UINT8   blankcol;
         UINT8   padding[3];          UINT8   padding;
         RGB32   text[24];          UINT16  skipline;
           RGB32   text[16];
         RGB32   grph[2][16];          RGB32   grph[2][16];
         RGB32   grph64[2][64];          RGB32   grph64[2][64];
 } PALS;  } PALS;
Line 124  void pal_settext(REG8 num) { Line 114  void pal_settext(REG8 num) {
                 x1z_pal16[4096 + num] = scrnmng_makepal16(rgb);                  x1z_pal16[4096 + num] = scrnmng_makepal16(rgb);
         }          }
 #endif  #endif
   
         pals.text[num].d = rgb.d;          pals.text[num].d = rgb.d;
         pals.text[num].p.e = num + START_EXT;          pals.text[num+8].p.b = (UINT8)((pals.skipline * rgb.p.b) >> 8);
           pals.text[num+8].p.g = (UINT8)((pals.skipline * rgb.p.g) >> 8);
         pals.text[num+8].p.b = (halftxt * rgb.p.b) / 255;          pals.text[num+8].p.r = (UINT8)((pals.skipline * rgb.p.r) >> 8);
         pals.text[num+8].p.g = (halftxt * rgb.p.g) / 255;  
         pals.text[num+8].p.r = (halftxt * rgb.p.r) / 255;  
         pals.text[num+8].p.e = num + START_EXT + 0x08;  
   
         pals.text[num+16].p.b = (halfgrp * rgb.p.b) / 255;  
         pals.text[num+16].p.g = (halfgrp * rgb.p.g) / 255;  
         pals.text[num+16].p.r = (halfgrp * rgb.p.r) / 255;  
         pals.text[num+16].p.e = num + START_EXT + 0x10;  
   
         makescrn.palandply = 1;          makescrn.palandply = 1;
 }  }
   
Line 149  void pal_setgrph(REG8 bank, REG8 num) { Line 129  void pal_setgrph(REG8 bank, REG8 num) {
   
         grphpal = crtc_GRPHPAL[bank][num];          grphpal = crtc_GRPHPAL[bank][num];
         black = 0;          black = 0;
           rgb.p.e = 0;
         rgb.p.b = ((grphpal >> 0) & 0x0f) * 0x11;          rgb.p.b = ((grphpal >> 0) & 0x0f) * 0x11;
         if (rgb.p.b < pals.blankcol) {          if (rgb.p.b < pals.blankcol) {
                 black |= 1;                  black |= 1;
Line 167  void pal_setgrph(REG8 bank, REG8 num) { Line 148  void pal_setgrph(REG8 bank, REG8 num) {
                 rgb.p.r = pals.blankcol;                  rgb.p.r = pals.blankcol;
         }          }
         pals.grph64[bank][num].d = rgb.d;          pals.grph64[bank][num].d = rgb.d;
         pals.grph64[bank][num].p.e = num + START_PAL;  
         if (!(((num >> 3) ^ num) & 7)) {          if (!(((num >> 3) ^ num) & 7)) {
                 num &= 7;                  num &= 7;
                 pals.grph[bank][num+0].d = rgb.d;                  pals.grph[bank][num+0].d = rgb.d;
                 pals.grph[bank][num+0].p.e = num + START_EXT + 0x18;                  pals.grph[bank][num+8].p.b = (UINT8)((pals.skipline * rgb.p.b) >> 8);
                 pals.grph[bank][num+8].p.b = (halfgrp * rgb.p.b) / 0xff;                  pals.grph[bank][num+8].p.g = (UINT8)((pals.skipline * rgb.p.g) >> 8);
                 pals.grph[bank][num+8].p.g = (halfgrp * rgb.p.g) / 0xff;                  pals.grph[bank][num+8].p.r = (UINT8)((pals.skipline * rgb.p.r) >> 8);
                 pals.grph[bank][num+8].p.r = (halfgrp * rgb.p.r) / 0xff;  
                 pals.grph[bank][num+8].p.e = num + START_EXT + 0x20;  
         }          }
         makescrn.palandply = 1;          makescrn.palandply = 1;
 }  }
Line 229  static void pal4096to64(RGB32 *pal, cons Line 207  static void pal4096to64(RGB32 *pal, cons
         } while(--r);          } while(--r);
 }  }
   
 void palettes(void) {  void pal_update(void) {
   
         int             i, j;          UINT    i;
         BYTE    bit;          UINT    j;
         BYTE    c;          REG8    bit;
         BYTE    skip8 = 0;          UINT    c;
         BYTE    skip16 = 0;          UINT    skip8;
           UINT    bcnt;
   
           skip8 = 0;
         if (pal_disp & PAL_4096) {          if (pal_disp & PAL_4096) {
                 switch(pal_disp & 0xf) {                  switch(pal_disp & 0xf) {
                         case PAL_4096H:                          case PAL_4096H:
Line 269  void palettes(void) { Line 249  void palettes(void) {
                 }                  }
         }          }
         else if ((dispmode & SCRN64_MASK) == SCRN64_INVALID) {          else if ((dispmode & SCRN64_MASK) == SCRN64_INVALID) {
                 if ((xmilcfg.SKIP_LINE) && (!(crtc.s.SCRN_BITS & SCRN_24KHZ))) {                  if (!(crtc.s.SCRN_BITS & SCRN_24KHZ)) {
                         skip8 = 8;                          skip8 = 8;
                         skip16 = 16;  
                 }                  }
                 for (i=0, bit=1; i<8; i++, bit<<=1) {                  for (i=0, bit=1; i<8; i++, bit<<=1) {
                         if (!(crtc.s.EXTPALMODE & 0x80)) {                          if (!(crtc.s.EXTPALMODE & 0x80)) {
Line 290  void palettes(void) { Line 269  void palettes(void) {
                                 c = i;                                  c = i;
                         }                          }
                         x1n_pal32[i].d = pals.grph[pal_disp][c].d;                          x1n_pal32[i].d = pals.grph[pal_disp][c].d;
                         x1n_pal32[i+64].d = x1n_pal32[i+128].d                          x1n_pal32[i+64].d = pals.grph[pal_disp][c + skip8].d;
                                                                                 = pals.grph[pal_disp][c+skip8].d;  
                         if (crtc.s.PLY & bit) {                          if (crtc.s.PLY & bit) {
                                 for (j=i+8; j<64; j+=8) {                                  for (j=i+8; j<64; j+=8) {
                                         x1n_pal32[j].d = x1n_pal32[i].d;                                          x1n_pal32[j].d = x1n_pal32[i].d;
                                         x1n_pal32[j+64].d = x1n_pal32[j+128].d                                          x1n_pal32[j+64].d = x1n_pal32[i + 64].d;
                                                                                                         = x1n_pal32[i+64].d;  
                                 }                                  }
                         }                          }
                         else {                          else {
                                 BYTE cnt = (crtc.s.BLACKPAL & 15) - 8;                                  bcnt = (crtc.s.BLACKPAL & 15) - 8;
                                 for (j=i+8; j<64; j+=8) {                                  for (j=i+8; j<64; j+=8) {
                                         if (--cnt) {                                          bcnt--;
                                                 c = crtc.s.TEXT_PAL[j>>3];                                          if (bcnt) {
                                                   c = crtc.s.TEXT_PAL[j >> 3];
                                         }                                          }
                                         else {                                          else {
                                                 c = 0;                                                  c = 0;
                                         }                                          }
                                         x1n_pal32[j].d = pals.text[c].d;                                          x1n_pal32[j].d = pals.text[c].d;
                                         x1n_pal32[j+64].d = pals.text[c+skip8].d;                                          x1n_pal32[j+64].d = pals.text[c + skip8].d;
                                         x1n_pal32[j+128].d = pals.text[c+skip16].d;  
                                 }                                  }
                         }                          }
                 }                  }
                 for (i=0; i<24; i++) {                  xm_palettes = 64 + 64;
                         x1n_pal32[i+192].d = pals.text[i].d;  
                 }  
                 for (i=0; i<16; i++) {  
                         x1n_pal32[i+192+24].d = pals.grph[pal_disp][i].d;  
                 }  
                 xm_palettes = 64+64+64+24+16;  
         }          }
         else {          else {
                 for (i=0; i<64; i++) {                  for (i=0; i<64; i++) {
Line 329  void palettes(void) { Line 300  void palettes(void) {
                 for (i=0; i<8; i++) {                  for (i=0; i<8; i++) {
                         x1n_pal32[i+64].d = pals.text[i].d;                          x1n_pal32[i+64].d = pals.text[i].d;
                 }                  }
                 xm_palettes = 64+8;                  xm_palettes = 64 + 8;
         }          }
   #if defined(SUPPORT_16BPP)
           if (scrnmng_getbpp() == 16) {
                   int i;
                   for (i=0; i<xm_palettes; i++) {
                           x1n_pal16[i] = scrnmng_makepal16(x1n_pal32[i]);
                   }
           }
   #endif
         scrndraw_changepalette();          scrndraw_changepalette();
 }  }
   
   
 // ----  // ----
   
 void reflesh_palette(void) {  void pal_reset(void) {
   
         REG8    i;          REG8    i;
         REG8    j;          REG8    j;
         UINT    k;          UINT    k;
   
         pals.blankcol = xmilcfg.BLKLIGHT;          pals.blankcol = 0;
         if ((!xmilcfg.SKIP_LINE) || (crtc.s.SCRN_BITS & SCRN_24KHZ)) {          pals.skipline = (xmilcfg.skipline)?xmilcfg.skiplight:0;
                 pals.blankcol >>= 1;  
         }  
         halfgrp = xmilcfg.LINEDEPTH;  
         switch(xmilcfg.TEXT400L) {  
                 case 0:  
                         halftxt = xmilcfg.LINEDEPTH;  
                         break;  
   
                 case 1:  
                         halftxt = 0xff;  
                         break;  
   
                 default:  
                         halftxt = xmilcfg.LINETEXT;  
                         break;  
         }  
   
         for (i=0; i<8; i++) {          for (i=0; i<8; i++) {
                 pal_settext(i);                  pal_settext(i);
         }          }

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


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