diff options
Diffstat (limited to 'src/mame/video/jaguar.cpp')
-rw-r--r-- | src/mame/video/jaguar.cpp | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/src/mame/video/jaguar.cpp b/src/mame/video/jaguar.cpp index 4c0d5da2323..9876ed0e972 100644 --- a/src/mame/video/jaguar.cpp +++ b/src/mame/video/jaguar.cpp @@ -295,13 +295,14 @@ WRITE_LINE_MEMBER( jaguar_state::dsp_cpu_int ) * *************************************/ -void jaguar_state::set_palette(uint16_t vmode) +void jaguar_state::jagpal_ycc(palette_device &palette) const { + // construct YCC Color lookup static const uint8_t red_lookup[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 19, 0, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 64, 43, 21, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 19, 0, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 64, 43, 21, 0, 102,102,102,102,102,102,102,102,102,102,102, 95, 71, 47, 23, 0, 135,135,135,135,135,135,135,135,135,135,130,104, 78, 52, 26, 0, 169,169,169,169,169,169,169,169,169,170,141,113, 85, 56, 28, 0, @@ -319,22 +320,22 @@ void jaguar_state::set_palette(uint16_t vmode) static const uint8_t grn_lookup[256] = { - 0, 17, 34, 51, 68, 85,102,119,136,153,170,187,204,221,238,255, - 0, 19, 38, 57, 77, 96,115,134,154,173,182,211,231,250,255,255, - 0, 21, 43, 64, 86,107,129,150,172,193,215,236,255,255,255,255, - 0, 23, 47, 71, 96,119,142,166,190,214,238,255,255,255,255,255, - 0, 26, 52, 78,104,130,156,182,208,234,255,255,255,255,255,255, - 0, 28, 56, 85,113,141,170,198,226,255,255,255,255,255,255,255, - 0, 30, 61, 91,122,153,183,214,244,255,255,255,255,255,255,255, - 0, 32, 65, 98,131,164,197,230,255,255,255,255,255,255,255,255, - 0, 32, 65, 98,131,164,197,230,255,255,255,255,255,255,255,255, - 0, 30, 61, 91,122,153,183,214,244,255,255,255,255,255,255,255, - 0, 28, 56, 85,113,141,170,198,226,255,255,255,255,255,255,255, - 0, 26, 52, 78,104,130,156,182,208,234,255,255,255,255,255,255, - 0, 23, 47, 71, 96,119,142,166,190,214,238,255,255,255,255,255, - 0, 21, 43, 64, 86,107,129,150,172,193,215,236,255,255,255,255, - 0, 19, 38, 57, 77, 96,115,134,154,173,182,211,231,250,255,255, - 0, 17, 34, 51, 68, 85,102,119,136,153,170,187,204,221,238,255 + 0, 17, 34, 51, 68, 85,102,119,136,153,170,187,204,221,238,255, + 0, 19, 38, 57, 77, 96,115,134,154,173,182,211,231,250,255,255, + 0, 21, 43, 64, 86,107,129,150,172,193,215,236,255,255,255,255, + 0, 23, 47, 71, 96,119,142,166,190,214,238,255,255,255,255,255, + 0, 26, 52, 78,104,130,156,182,208,234,255,255,255,255,255,255, + 0, 28, 56, 85,113,141,170,198,226,255,255,255,255,255,255,255, + 0, 30, 61, 91,122,153,183,214,244,255,255,255,255,255,255,255, + 0, 32, 65, 98,131,164,197,230,255,255,255,255,255,255,255,255, + 0, 32, 65, 98,131,164,197,230,255,255,255,255,255,255,255,255, + 0, 30, 61, 91,122,153,183,214,244,255,255,255,255,255,255,255, + 0, 28, 56, 85,113,141,170,198,226,255,255,255,255,255,255,255, + 0, 26, 52, 78,104,130,156,182,208,234,255,255,255,255,255,255, + 0, 23, 47, 71, 96,119,142,166,190,214,238,255,255,255,255,255, + 0, 21, 43, 64, 86,107,129,150,172,193,215,236,255,255,255,255, + 0, 19, 38, 57, 77, 96,115,134,154,173,182,211,231,250,255,255, + 0, 17, 34, 51, 68, 85,102,119,136,153,170,187,204,221,238,255 }; static const uint8_t blu_lookup[256] = @@ -352,11 +353,22 @@ void jaguar_state::set_palette(uint16_t vmode) 169,169,169,169,169,169,169,169,169,170,141,113, 85, 56, 28, 0, 135,135,135,135,135,135,135,135,135,135,130,104, 78, 52, 26, 0, 102,102,102,102,102,102,102,102,102,102,102, 95, 71, 47, 23, 0, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 64, 43, 21, 0, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 64, 43, 21, 0, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + for (int i = 0; i < 65536; i++) + { + const u8 r = (red_lookup[i >> 8] * (i & 0xff)) / 0xff; + const u8 g = (grn_lookup[i >> 8] * (i & 0xff)) / 0xff; + const u8 b = (blu_lookup[i >> 8] * (i & 0xff)) / 0xff; + palette.set_pen_color(i, rgb_t(r, g, b)); + } +} + +void jaguar_state::set_palette(uint16_t vmode) +{ int i; /* switch off the mode */ @@ -367,33 +379,18 @@ void jaguar_state::set_palette(uint16_t vmode) /* RGB24 */ case 0x002: for (i = 0; i < 65536; i++) - { - uint8_t r = (red_lookup[i >> 8] * (i & 0xff)) >> 8; - uint8_t g = (grn_lookup[i >> 8] * (i & 0xff)) >> 8; - uint8_t b = (blu_lookup[i >> 8] * (i & 0xff)) >> 8; - m_pen_table[i] = rgb_t(r, g, b); - } + m_pen_table[i] = m_palette->pen(i); break; /* YCC VARMOD */ case 0x100: for (i = 0; i < 65536; i++) { - uint8_t r = (red_lookup[i >> 8] * (i & 0xff)) >> 8; - uint8_t g = (grn_lookup[i >> 8] * (i & 0xff)) >> 8; - uint8_t b = (blu_lookup[i >> 8] * (i & 0xff)) >> 8; - /* if the low bit is set, treat it as 5-5-5 RGB instead */ if (i & 1) - { - r = (i >> 11) & 31; - g = (i >> 1) & 31; - b = (i >> 6) & 31; - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - } - m_pen_table[i] = rgb_t(r, g, b); + m_pen_table[i] = rgb_t(pal5bit(i >> 11), pal5bit(i >> 1), pal5bit(i >> 6)); + else + m_pen_table[i] = m_palette->pen((i & ~0xff) | pal7bit(i >> 1)); } break; |