--- np2/vram/palettes.c 2003/10/16 17:58:15 1.1 +++ np2/vram/palettes.c 2007/11/11 12:46:07 1.7 @@ -6,25 +6,33 @@ #include "palettes.h" - RGB32 np2_pal32[256]; +#if defined(SUPPORT_PC9821) + RGB32 np2_pal32[NP2PAL_EXTEND]; #if defined(SUPPORT_16BPP) - UINT16 np2_pal16[256]; + RGB16 np2_pal16[NP2PAL_EXTEND]; #endif +#else + RGB32 np2_pal32[NP2PAL_NORMAL]; +#if defined(SUPPORT_16BPP) + RGB16 np2_pal16[NP2PAL_NORMAL]; +#endif +#endif + PALEVENT palevent; static RGB32 degpal1[8]; static RGB32 degpal2[8]; -static BYTE anapal1[16]; -static BYTE anapal2[16]; +static UINT8 anapal1[16]; +static UINT8 anapal2[16]; static RGB32 lcdpal[15]; -static BYTE lcdtbl[0x1000]; - BYTE pal_monotable[16] = {0, 0, 0, 0, 1, 1, 1, 1, +static UINT8 lcdtbl[0x1000]; + UINT8 pal_monotable[16] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1}; -static const BYTE lcdpal_a[27] = {0, 1, 2, 3, 5, 2, 4, 4, 6, +static const UINT8 lcdpal_a[27] = { 0, 1, 2, 3, 5, 2, 4, 4, 6, 7, 9, 2,11,13, 2, 4, 4, 6, 8, 8,10, 8, 8,10,12,12,14}; -static const BYTE deftbl[4] = {0x04, 0x15, 0x26, 0x37}; +static const UINT8 deftbl[4] = {0x04, 0x15, 0x26, 0x37}; void pal_makegrad(RGB32 *pal, int pals, UINT32 bg, UINT32 fg) { @@ -34,13 +42,13 @@ void pal_makegrad(RGB32 *pal, int pals, if (pals >= 2) { pals--; for (i=0; i<=pals; i++) { - pal[i].p.b = (BYTE) + pal[i].p.b = (UINT8) ((((fg >> 0) & 0x0000ff) * i + ((bg >> 0) & 0x0000ff) * (pals-i)) / pals); - pal[i].p.g = (BYTE) + pal[i].p.g = (UINT8) ((((fg >> 8) & 0x0000ff) * i + ((bg >> 8) & 0x0000ff) * (pals-i)) / pals); - pal[i].p.r = (BYTE) + pal[i].p.r = (UINT8) ((((fg >> 16) & 0x0000ff) * i + ((bg >> 16) & 0x0000ff) * (pals-i)) / pals); pal[i].p.e = 0; @@ -94,18 +102,20 @@ void pal_makeskiptable(void) { int i; RGB32 pal; + UINT8 ana; for (i=0; i<8; i++) { - pal.p.b = (BYTE)(i & 1); - pal.p.r = (BYTE)((i >> 1) & 1); - pal.p.g = (BYTE)((i >> 2) & 1); + pal.p.b = (UINT8)(i & 1); + pal.p.r = (UINT8)((i >> 1) & 1); + pal.p.g = (UINT8)((i >> 2) & 1); pal.p.e = 0; degpal1[i].d = pal.d * 255; degpal2[i].d = pal.d * np2cfg.skiplight; } for (i=0; i<16; i++) { - anapal1[i] = (BYTE)(i * 0x11); - anapal2[i] = (BYTE)((np2cfg.skiplight * anapal1[i]) / 255); + ana = (UINT8)(i * 0x11); + anapal1[i] = ana; + anapal2[i] = (UINT8)((np2cfg.skiplight * anapal1[i]) / 255); } } @@ -142,7 +152,7 @@ void pal_makeanalog(RGB32 *pal, UINT16 b #endif } -static void pal_makedegital(const BYTE *paltbl) { +static void pal_makedegital(const UINT8 *paltbl) { UINT i; @@ -213,12 +223,12 @@ void pal_makeanalog_lcd(RGB32 *pal, UINT #endif } -static void pal_makedegital_lcd(const BYTE *paltbl) { +static void pal_makedegital_lcd(const UINT8 *paltbl) { UINT i; UINT32 pal32; #if defined(SUPPORT_16BPP) - UINT16 pal16; + RGB16 pal16; #endif for (i=0; i<4; i++) { @@ -267,7 +277,7 @@ static void pal_maketext(void) { UINT j; UINT k; #if defined(SUPPORT_16BPP) - UINT16 pal16; + RGB16 pal16; #endif k = NP2PAL_TEXT2; @@ -301,7 +311,7 @@ static void pal_maketext_lcd(void) { UINT j; UINT k; #if defined(SUPPORT_16BPP) - UINT16 pal16; + RGB16 pal16; #endif k = NP2PAL_TEXT2; @@ -329,6 +339,30 @@ static void pal_maketext_lcd(void) { #endif } +#if defined(SUPPORT_PC9821) +static void pal_maketext256(void) { + + UINT i; +#if defined(SUPPORT_16BPP) + RGB16 pal16; +#endif + + for (i=0; i<8; i++) { + np2_pal32[i+1+NP2PAL_TEXTEX].d = degpal1[i].d; + np2_pal32[i+1+NP2PAL_TEXTEX3].d = degpal1[i].d; + } +#if defined(SUPPORT_16BPP) + if (scrnmng_getbpp() == 16) { + for (i=0; i<8; i++) { + pal16 = scrnmng_makepal16(degpal1[i]); + np2_pal16[i+1+NP2PAL_TEXTEX] = pal16; + np2_pal16[i+1+NP2PAL_TEXTEX3] = pal16; + } + } +#endif +} +#endif + static void pal_makeingmono(void) { // ver0.28/pr4 int i; @@ -348,7 +382,33 @@ static void pal_makeingmono(void) { } } -void pal_change(BYTE textpalset) { + +#if defined(SUPPORT_PC9821) +static void pal_make9821(const UINT8 *pal) { + + int i; + RGB32 *p; + + p = np2_pal32 + NP2PAL_GRPHEX; + for (i=0; i<256; i++) { + p[i].p.g = pal[i*4+0]; + p[i].p.r = pal[i*4+1]; + p[i].p.b = pal[i*4+2]; + } + np2_pal32[NP2PAL_TEXTEX3].d = np2_pal32[NP2PAL_GRPHEX].d; +#if defined(SUPPORT_16BPP) + if (scrnmng_getbpp() == 16) { + for (i=0; i<256; i++) { + np2_pal16[i + NP2PAL_GRPHEX] = + scrnmng_makepal16(np2_pal32[i + NP2PAL_GRPHEX]); + } + np2_pal16[NP2PAL_TEXTEX3] = np2_pal16[NP2PAL_GRPHEX]; + } +#endif +} +#endif + +void pal_change(UINT8 textpalset) { if (textpalset) { if (!(np2cfg.LCD_MODE & 1)) { @@ -361,9 +421,19 @@ void pal_change(BYTE textpalset) { #if defined(SUPPORT_16BPP) np2_pal16[NP2PAL_TEXT] = np2_pal16[NP2PAL_TEXT2]; #endif +#if defined(SUPPORT_PC9821) + pal_maketext256(); +#endif } +#if defined(SUPPORT_PC9821) + if (gdc.analog & 2) { + pal_make9821(gdc.anareg + (16 * 3)); + scrndraw_changepalette(); + return; + } +#endif if (!(np2cfg.LCD_MODE & 1)) { - if (gdc.mode1 & 2) { // ver0.28/pr4 + if (gdc.mode1 & 2) { pal_makedegital(deftbl); pal_makeingmono(); } @@ -377,7 +447,7 @@ void pal_change(BYTE textpalset) { } } else { - if (gdc.mode1 & 2) { // ver0.28/pr4 + if (gdc.mode1 & 2) { pal_makedegital_lcd(deftbl); pal_makeingmono(); } @@ -403,11 +473,12 @@ void pal_eventclear(void) { palevent.anabit = 0; palevent.events = 0; - if ((!drawframe) || (!np2cfg.RASTER) || (scrnmng_getbpp() == 8)) { + if ((!pcstat.drawframe) || (!np2cfg.RASTER) || (scrnmng_getbpp() == 8)) { palevent.events--; // 0xffffffff ¤Ë¤¹¤ë... } else { CopyMemory(palevent.pal, gdc.anapal, sizeof(gdc.anapal)); + palevent.vsyncpal = 0; } }