Merge pull request #4854 from cam900/xbgrbbbbggggrrrr_bit0

emupal.cpp : Add xBGRBBBBGGGGRRRR case of palette format
This commit is contained in:
ajrhacker 2019-04-04 07:43:09 -04:00 committed by GitHub
commit 32f29d8eb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 22 additions and 17 deletions

View File

@ -349,6 +349,12 @@ palette_device &palette_device::set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries)
return *this;
}
palette_device &palette_device::set_format(xbgrbbbbggggrrrr_bit0_t, u32 entries)
{
set_format(2, &raw_to_rgb_converter::xBGRBBBBGGGGRRRR_bit0_decoder, entries);
return *this;
}
//**************************************************************************
// GENERIC WRITE HANDLERS
@ -773,3 +779,11 @@ rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder(u32 raw)
u8 const b = pal5bit(((raw >> 0) & 0x0f) | ((raw >> 8) & 0x10));
return rgb_t(r, g, b);
}
rgb_t raw_to_rgb_converter::xBGRBBBBGGGGRRRR_bit0_decoder(u32 raw)
{
u8 const r = pal5bit(((raw << 1) & 0x1e) | ((raw >> 12) & 0x01));
u8 const g = pal5bit(((raw >> 3) & 0x1e) | ((raw >> 13) & 0x01));
u8 const b = pal5bit(((raw >> 7) & 0x1e) | ((raw >> 14) & 0x01));
return rgb_t(r, g, b);
}

View File

@ -160,6 +160,7 @@ public:
static rgb_t RRRRGGGGBBBBRGBx_decoder(u32 raw); // bits 3/2/1 are LSb
static rgb_t xRGBRRRRGGGGBBBB_bit0_decoder(u32 raw); // bits 14/13/12 are LSb
static rgb_t xRGBRRRRGGGGBBBB_bit4_decoder(u32 raw); // bits 14/13/12 are MSb
static rgb_t xBGRBBBBGGGGRRRR_bit0_decoder(u32 raw); // bits 12/13/14 are LSb
private:
// internal data
@ -246,6 +247,7 @@ public:
enum rrrrggggbbbbrgbx_t { RRRRGGGGBBBBRGBx };
enum xrgbrrrrggggbbbb_bit0_t { xRGBRRRRGGGGBBBB_bit0 };
enum xrgbrrrrggggbbbb_bit4_t { xRGBRRRRGGGGBBBB_bit4 };
enum xbgrbbbbggggrrrr_bit0_t { xBGRBBBBGGGGRRRR_bit0 };
// construction/destruction
palette_device(const machine_config &mconfig, const char *tag, device_t *owner, init_delegate &&init, u32 entries = 0U, u32 indirect = 0U);
@ -332,6 +334,7 @@ public:
palette_device &set_format(rrrrggggbbbbrgbx_t, u32 entries);
palette_device &set_format(xrgbrrrrggggbbbb_bit0_t, u32 entries);
palette_device &set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries);
palette_device &set_format(xbgrbbbbggggrrrr_bit0_t, u32 entries);
template <typename T> palette_device &set_format(T x, u32 entries, u32 indirect) { set_format(x, entries); set_indirect_entries(indirect); return *this; }
palette_device &set_membits(int membits) { m_membits = membits; m_membits_supplied = true; return *this; }
palette_device &set_endianness(endianness_t endianness) { m_endianness = endianness; m_endianness_supplied = true; return *this; }

View File

@ -79,7 +79,7 @@ void deniam_state::deniam16b_map(address_map &map)
map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::deniam_videoram_w)).share("videoram");
map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::deniam_textram_w)).share("textram");
map(0x440000, 0x4407ff).writeonly().share("spriteram");
map(0x840000, 0x840fff).w(FUNC(deniam_state::deniam_palette_w)).share("paletteram");
map(0x840000, 0x840fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xc40000, 0xc40000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xc40002, 0xc40003).rw(FUNC(deniam_state::deniam_coinctrl_r), FUNC(deniam_state::deniam_coinctrl_w));
map(0xc40004, 0xc40005).w(FUNC(deniam_state::deniam_irq_ack_w));
@ -113,7 +113,7 @@ void deniam_state::deniam16c_map(address_map &map)
map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::deniam_videoram_w)).share("videoram");
map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::deniam_textram_w)).share("textram");
map(0x440000, 0x4407ff).writeonly().share("spriteram");
map(0x840000, 0x840fff).w(FUNC(deniam_state::deniam_palette_w)).share("paletteram");
map(0x840000, 0x840fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xc40001, 0xc40001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xc40002, 0xc40003).rw(FUNC(deniam_state::deniam_coinctrl_r), FUNC(deniam_state::deniam_coinctrl_w));
map(0xc40004, 0xc40005).w(FUNC(deniam_state::deniam_irq_ack_w));
@ -272,7 +272,7 @@ void deniam_state::deniam16b(machine_config &config)
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_deniam);
PALETTE(config, m_palette).set_entries(2048);
PALETTE(config, m_palette).set_format(palette_device::xBGRBBBBGGGGRRRR_bit0, 2048); // bit 15 is toggle shadow / hilight?
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -306,7 +306,7 @@ void deniam_state::deniam16c(machine_config &config)
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_deniam);
PALETTE(config, m_palette).set_entries(2048);
PALETTE(config, m_palette).set_format(palette_device::xBGRBBBBGGGGRRRR_bit0, 2048); // bit 15 is toggle shadow / hilight?
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -1469,7 +1469,7 @@ void taitol_state::l_system_video(machine_config &config)
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, taito_l);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::xBGR_444, 256);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::xBGRBBBBGGGGRRRR_bit0, 256);
TIMER(config, "scantimer").configure_scanline(FUNC(taitol_state::vbl_interrupt), "screen", 0, 1);
}

View File

@ -19,7 +19,6 @@ public:
m_videoram(*this, "videoram"),
m_textram(*this, "textram"),
m_spriteram(*this, "spriteram"),
m_paletteram(*this, "paletteram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_oki(*this, "oki"),
@ -38,7 +37,6 @@ private:
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_textram;
required_shared_ptr<uint16_t> m_spriteram;
required_shared_ptr<uint16_t> m_paletteram;
/* video-related */
tilemap_t *m_fg_tilemap;
@ -63,7 +61,6 @@ private:
DECLARE_WRITE16_MEMBER(deniam_irq_ack_w);
DECLARE_WRITE16_MEMBER(deniam_videoram_w);
DECLARE_WRITE16_MEMBER(deniam_textram_w);
DECLARE_WRITE16_MEMBER(deniam_palette_w);
DECLARE_READ16_MEMBER(deniam_coinctrl_r);
DECLARE_WRITE16_MEMBER(deniam_coinctrl_w);
DECLARE_WRITE8_MEMBER(deniam16b_oki_rom_bank_w);

View File

@ -135,15 +135,6 @@ WRITE16_MEMBER(deniam_state::deniam_textram_w)
}
WRITE16_MEMBER(deniam_state::deniam_palette_w)
{
data = COMBINE_DATA(&m_paletteram[offset]);
int r = ((data << 1) & 0x1e) | ((data >> 12) & 0x01);
int g = ((data >> 3) & 0x1e) | ((data >> 13) & 0x01);
int b = ((data >> 7) & 0x1e) | ((data >> 14) & 0x01);
m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
}
READ16_MEMBER(deniam_state::deniam_coinctrl_r)
{
return m_coinctrl;