summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2019-05-23 12:58:45 -0400
committer GitHub <noreply@github.com>2019-05-23 12:58:45 -0400
commiteb05b851488522ca04bebc9b72f06ddb53edb5aa (patch)
treec393b4ec53aee5c971f6f5b558f3dba15afef5e9
parentfedb4e64389bd9cdc8e79e59c8a6006b955dd640 (diff)
parentbad8ba8589a0b886383898ca0bb8e2b71fa38d9f (diff)
Merge pull request #5096 from cam900/jaguar_pallookup
jaguar.cpp : Updates
-rw-r--r--src/mame/drivers/jaguar.cpp4
-rw-r--r--src/mame/includes/jaguar.h8
-rw-r--r--src/mame/video/jaguar.cpp81
3 files changed, 49 insertions, 44 deletions
diff --git a/src/mame/drivers/jaguar.cpp b/src/mame/drivers/jaguar.cpp
index b070819cebe..8632e02cf1c 100644
--- a/src/mame/drivers/jaguar.cpp
+++ b/src/mame/drivers/jaguar.cpp
@@ -1849,6 +1849,8 @@ void jaguar_state::cojagr3k(machine_config &config)
m_screen->set_raw(COJAG_PIXEL_CLOCK/2, 456, 42, 402, 262, 17, 257);
m_screen->set_screen_update(FUNC(jaguar_state::screen_update));
+ PALETTE(config, m_palette, FUNC(jaguar_state::jagpal_ycc), 65536);
+
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -1904,6 +1906,8 @@ void jaguar_state::jaguar(machine_config &config)
m_screen->set_raw(JAGUAR_CLOCK, 456, 42, 402, 262, 17, 257);
m_screen->set_screen_update(FUNC(jaguar_state::screen_update));
+ PALETTE(config, m_palette, FUNC(jaguar_state::jagpal_ycc), 65536);
+
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h
index e60b3608c61..1b4de2ecee8 100644
--- a/src/mame/includes/jaguar.h
+++ b/src/mame/includes/jaguar.h
@@ -15,6 +15,7 @@
#include "cdrom.h"
#include "imagedev/chd_cd.h"
#include "screen.h"
+#include "emupal.h"
#ifndef ENABLE_SPEEDUP_HACKS
#define ENABLE_SPEEDUP_HACKS 1
@@ -75,6 +76,7 @@ public:
, m_eeprom(*this, "eeprom")
, m_ide(*this, "ide")
, m_screen(*this, "screen")
+ , m_palette(*this, "palette")
{
}
@@ -250,20 +252,21 @@ private:
DECLARE_READ32_MEMBER(butch_regs_r);
DECLARE_WRITE32_MEMBER(butch_regs_w);
- // from audio/jaguar.c
+ // from audio/jaguar.cpp
DECLARE_READ16_MEMBER( jerry_regs_r );
DECLARE_WRITE16_MEMBER( jerry_regs_w );
DECLARE_READ32_MEMBER( serial_r );
DECLARE_WRITE32_MEMBER( serial_w );
void serial_update();
- // from video/jaguar.c
+ // from video/jaguar.cpp
DECLARE_READ32_MEMBER( blitter_r );
DECLARE_WRITE32_MEMBER( blitter_w );
DECLARE_READ16_MEMBER( tom_regs_r );
DECLARE_WRITE16_MEMBER( tom_regs_w );
DECLARE_READ32_MEMBER( cojag_gun_input_r );
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void jagpal_ycc(palette_device &palette) const;
DECLARE_WRITE_LINE_MEMBER( gpu_cpu_int );
DECLARE_WRITE_LINE_MEMBER( dsp_cpu_int );
@@ -386,4 +389,5 @@ private:
optional_device<eeprom_serial_93cxx_device> m_eeprom;
optional_device<vt83c461_device> m_ide;
required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
};
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;