diff --git a/src/mame/drivers/bionicc.c b/src/mame/drivers/bionicc.c index d0a5ae960b6..7b50e17bbe7 100644 --- a/src/mame/drivers/bionicc.c +++ b/src/mame/drivers/bionicc.c @@ -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") diff --git a/src/mame/includes/bionicc.h b/src/mame/includes/bionicc.h index 1fd57dd5e7c..67912af61ab 100644 --- a/src/mame/includes/bionicc.h +++ b/src/mame/includes/bionicc.h @@ -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 m_txvideoram; required_shared_ptr m_fgvideoram; required_shared_ptr m_bgvideoram; - required_shared_ptr 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 m_maincpu; diff --git a/src/mame/video/bionicc.c b/src/mame/video/bionicc.c index 6f61d0ff32b..9c6b38a053c 100644 --- a/src/mame/video/bionicc.c +++ b/src/mame/video/bionicc.c @@ -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]);