bionicc: update palette handling

This commit is contained in:
Dirk Best 2015-08-13 01:20:09 +02:00
parent bd9acd656a
commit 83f2c9fa33
3 changed files with 21 additions and 25 deletions

View File

@ -148,7 +148,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, bionicc_state )
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(bionicc_txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(bionicc_fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(bionicc_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(bionicc_paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xffc000, 0xfffff7) AM_RAM /* working RAM */
AM_RANGE(0xfffff8, 0xfffff9) AM_READWRITE(hacked_soundcommand_r, hacked_soundcommand_w) /* hack */
AM_RANGE(0xfffffa, 0xffffff) AM_READWRITE(hacked_controls_r, hacked_controls_w) /* hack */
@ -372,6 +372,7 @@ static MACHINE_CONFIG_START( bionicc, bionicc_state )
MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT_CLASS(2, bionicc_state, RRRRGGGGBBBBIIII)
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")

View File

@ -18,7 +18,6 @@ public:
m_txvideoram(*this, "txvideoram"),
m_fgvideoram(*this, "fgvideoram"),
m_bgvideoram(*this, "bgvideoram"),
m_paletteram(*this, "paletteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@ -30,7 +29,6 @@ public:
required_shared_ptr<UINT16> m_txvideoram;
required_shared_ptr<UINT16> m_fgvideoram;
required_shared_ptr<UINT16> m_bgvideoram;
required_shared_ptr<UINT16> m_paletteram;
/* video-related */
tilemap_t *m_tx_tilemap;
@ -49,7 +47,6 @@ public:
DECLARE_WRITE16_MEMBER(bionicc_bgvideoram_w);
DECLARE_WRITE16_MEMBER(bionicc_fgvideoram_w);
DECLARE_WRITE16_MEMBER(bionicc_txvideoram_w);
DECLARE_WRITE16_MEMBER(bionicc_paletteram_w);
DECLARE_WRITE16_MEMBER(bionicc_scroll_w);
DECLARE_WRITE16_MEMBER(bionicc_gfxctrl_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
@ -58,6 +55,7 @@ public:
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
DECLARE_PALETTE_DECODER(RRRRGGGGBBBBIIII);
UINT32 screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(bionicc_scanline);
required_device<cpu_device> m_maincpu;

View File

@ -97,6 +97,24 @@ void bionicc_state::video_start()
m_bg_tilemap->set_transparent_pen(15);
}
PALETTE_DECODER_MEMBER( bionicc_state, RRRRGGGGBBBBIIII )
{
UINT8 bright = (raw & 0x0f);
UINT8 r = ((raw >> 12) & 0x0f) * 0x11;
UINT8 g = ((raw >> 8) & 0x0f) * 0x11;
UINT8 b = ((raw >> 4) & 0x0f) * 0x11;
if ((bright & 0x08) == 0)
{
r = r * (0x07 + bright) / 0x0e;
g = g * (0x07 + bright) / 0x0e;
b = b * (0x07 + bright) / 0x0e;
}
return rgb_t(r, g, b);
}
/***************************************************************************
@ -123,27 +141,6 @@ WRITE16_MEMBER(bionicc_state::bionicc_txvideoram_w)
m_tx_tilemap->mark_tile_dirty(offset & 0x3ff);
}
WRITE16_MEMBER(bionicc_state::bionicc_paletteram_w)
{
int r, g, b, bright;
data = COMBINE_DATA(&m_paletteram[offset]);
bright = (data & 0x0f);
r = ((data >> 12) & 0x0f) * 0x11;
g = ((data >> 8 ) & 0x0f) * 0x11;
b = ((data >> 4 ) & 0x0f) * 0x11;
if ((bright & 0x08) == 0)
{
r = r * (0x07 + bright) / 0x0e;
g = g * (0x07 + bright) / 0x0e;
b = b * (0x07 + bright) / 0x0e;
}
m_palette->set_pen_color (offset, rgb_t(r, g, b));
}
WRITE16_MEMBER(bionicc_state::bionicc_scroll_w)
{
data = COMBINE_DATA(&m_scroll[offset]);