|
|
| version 1.5, 2004/08/07 07:19:56 | version 1.11, 2004/08/11 12:08:17 |
|---|---|
| Line 20 | Line 20 |
| int xm_palettes = 0; | int xm_palettes = 0; |
| extern BYTE dispmode; | |
| extern BYTE pal_disp; | |
| static const UINT16 pal4096banktbl[2][64] = { | static const UINT16 pal4096banktbl[2][64] = { |
| { 0x000, 0x008, 0x080, 0x088, 0x800, 0x808, 0x880, 0x888, | { 0x000, 0x008, 0x080, 0x088, 0x800, 0x808, 0x880, 0x888, |
| 0x004, 0x00C, 0x084, 0x08C, 0x804, 0x80C, 0x884, 0x88C, | 0x004, 0x00C, 0x084, 0x08C, 0x804, 0x80C, 0x884, 0x88C, |
| Line 67 void pal_makegrad(RGB32 *pal, int pals, | Line 63 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 98 void pal_settext(REG8 num) { | Line 84 void pal_settext(REG8 num) { |
| REG8 black; | REG8 black; |
| RGB32 rgb; | RGB32 rgb; |
| textpal = crtc_TEXTPAL[num]; | textpal = crtc.p.text[num]; |
| black = 0; | black = 0; |
| rgb.p.e = 0; | rgb.p.e = 0; |
| rgb.p.b = ((textpal >> 0) & 3) * 0x55; | rgb.p.b = ((textpal >> 0) & 3) * 0x55; |
| Line 124 void pal_settext(REG8 num) { | Line 110 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 147 void pal_setgrph(REG8 bank, REG8 num) { | Line 123 void pal_setgrph(REG8 bank, REG8 num) { |
| REG8 black; | REG8 black; |
| RGB32 rgb; | RGB32 rgb; |
| grphpal = crtc_GRPHPAL[bank][num]; | grphpal = crtc.p.grph[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 144 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 186 void pal_setgrph4096(UINT num) { | Line 160 void pal_setgrph4096(UINT num) { |
| REG8 black; | REG8 black; |
| RGB32 rgb; | RGB32 rgb; |
| grphpal = crtc_PAL4096[num]; | grphpal = crtc.p.grph4096[num]; |
| black = 0; | black = 0; |
| rgb.p.e = 0; | rgb.p.e = 0; |
| rgb.p.b = ((grphpal >> 0) & 0x0f) * 0x11; | rgb.p.b = ((grphpal >> 0) & 0x0f) * 0x11; |
| Line 229 static void pal4096to64(RGB32 *pal, cons | Line 203 static void pal4096to64(RGB32 *pal, cons |
| } while(--r); | } while(--r); |
| } | } |
| void palettes(void) { | void pal_update(void) { |
| int i, j; | |
| BYTE bit; | |
| BYTE c; | |
| BYTE skip8 = 0; | |
| BYTE skip16 = 0; | |
| if (pal_disp & PAL_4096) { | UINT i; |
| switch(pal_disp & 0xf) { | UINT j; |
| REG8 bit; | |
| UINT c; | |
| UINT skip8; | |
| UINT bcnt; | |
| skip8 = 0; | |
| if (crtc.e.pal_disp & PAL_4096) { | |
| switch(crtc.e.pal_disp & 0xf) { | |
| case PAL_4096H: | case PAL_4096H: |
| pal4096to64(x1n_pal32, pal4096banktbl[0]); | pal4096to64(x1n_pal32, pal4096banktbl[0]); |
| xm_palettes = 64; | xm_palettes = 64; |
| Line 268 void palettes(void) { | Line 244 void palettes(void) { |
| x1n_pal32[xm_palettes++].d = pals.text[i].d; | x1n_pal32[xm_palettes++].d = pals.text[i].d; |
| } | } |
| } | } |
| else if ((dispmode & SCRN64_MASK) == SCRN64_INVALID) { | else if ((crtc.e.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)) { |
| c = 0; | c = 0; |
| if (crtc.s.PAL_B & bit) { | if (crtc.s.rgbp[CRTC_PALB] & bit) { |
| c |= 1; | c += 1; |
| } | } |
| if (crtc.s.PAL_R & bit) { | if (crtc.s.rgbp[CRTC_PALR] & bit) { |
| c |= 2; | c += 2; |
| } | } |
| if (crtc.s.PAL_G & bit) { | if (crtc.s.rgbp[CRTC_PALG] & bit) { |
| c |= 4; | c += 4; |
| } | } |
| } | } |
| else { | else { |
| c = i; | c = i; |
| } | } |
| x1n_pal32[i].d = pals.grph[pal_disp][c].d; | x1n_pal32[i].d = pals.grph[crtc.e.pal_disp][c].d; |
| x1n_pal32[i+64].d = x1n_pal32[i+128].d | x1n_pal32[i+64].d = pals.grph[crtc.e.pal_disp][c + skip8].d; |
| = pals.grph[pal_disp][c+skip8].d; | if (crtc.s.rgbp[CRTC_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 = 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++) { |
| x1n_pal32[i].d = pals.grph64[pal_disp][i].d; | x1n_pal32[i].d = pals.grph64[crtc.e.pal_disp][i].d; |
| } | } |
| 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); |
| } | } |