pollux bombs now cause brightness change

This commit is contained in:
David Haywood 2015-12-13 20:03:38 +00:00
parent 7fd4bcb471
commit e5a3d63abe
3 changed files with 46 additions and 18 deletions

View File

@ -731,17 +731,17 @@ static const gfx_layout popbingo_tilelayout =
};
static GFXDECODE_START( lastday )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 16 )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16+64 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16+64 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16+64 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 16+64 )
GFXDECODE_END
static GFXDECODE_START( flytiger )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 32 )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16+64 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16+64 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16+64 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 32+64 )
GFXDECODE_END
static GFXDECODE_START( bluehawk )

View File

@ -10,7 +10,8 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
m_palette(*this, "palette"),
m_palette_bank(0)
{ }
DECLARE_WRITE8_MEMBER(bgscroll_w);
@ -24,6 +25,7 @@ public:
inline void get_tile_info(tile_data &tileinfo, int tile_index, UINT8 const *tilerom, UINT8 const *scroll, int graphics);
inline void scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map);
tilemap_t *m_bg_tilemap;
tilemap_t *m_bg2_tilemap;
tilemap_t *m_fg_tilemap;
@ -46,6 +48,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
UINT8 m_palette_bank;
};
class dooyong_z80_state : public dooyong_state
@ -84,7 +87,6 @@ public:
required_shared_ptr<UINT8> m_txvideoram;
UINT8* m_paletteram_flytiger;
UINT8 m_sprites_disabled;
UINT8 m_flytiger_palette_bank;
UINT8 m_flytiger_pri;
UINT8 m_tx_pri;
int m_tx_tilemap_mode;

View File

@ -101,6 +101,8 @@ WRITE8_MEMBER(dooyong_z80_ym2203_state::lastday_ctrl_w)
WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w)
{
// printf("pollux_ctrl_w %02x\n", data);
/* bit 0 is flip screen */
flip_screen_set(data & 0x01);
@ -108,11 +110,20 @@ WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w)
coin_counter_w(machine(), 0, data & 0x80);
coin_counter_w(machine(), 1, data & 0x40);
/* bit 1 is used but unknown - possibly palette banking */
m_flytiger_palette_bank = (data & 0x02);
/* bit 1 is used but unknown - palette banking (both write and display based on pollux bombs) */
int last_palbank = m_palette_bank;
m_palette_bank = (data & 0x02)>>1;
if (last_palbank != m_palette_bank)
{
m_bg_tilemap->mark_all_dirty();
m_fg_tilemap->mark_all_dirty();
m_tx_tilemap->mark_all_dirty();
}
/* bit 2 is continuously toggled (unknown) */
/* bit 4 is used but unknown */
/* bit 4 is used but unknown - display disable? */
}
@ -135,7 +146,7 @@ WRITE8_MEMBER(dooyong_z80_state::primella_ctrl_w)
WRITE8_MEMBER(dooyong_z80_state::paletteram_flytiger_w)
{
if (!m_flytiger_palette_bank) offset+= 0x800;
if (m_palette_bank) offset+= 0x800;
m_paletteram_flytiger[offset] = data;
UINT16 const value = m_paletteram_flytiger[offset & ~1] | (m_paletteram_flytiger[offset | 1] << 8);
@ -150,8 +161,16 @@ WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w)
/* bits 1, 2 used but unknown */
/* bit 3 fg palette banking: trash protection? */
m_flytiger_palette_bank = data & 0x08;
/* bit 3 palette banking */
int last_palbank = m_palette_bank;
m_palette_bank = (data & 0x08)>>3;
if (last_palbank != m_palette_bank)
{
m_bg_tilemap->mark_all_dirty();
m_fg_tilemap->mark_all_dirty();
m_tx_tilemap->mark_all_dirty();
}
/* bit 4 changes tilemaps priority */
m_flytiger_pri = data & 0x10;
@ -186,6 +205,7 @@ inline void dooyong_state::get_tile_info(tile_data &tileinfo, int tile_index,
Y = y flip */
code = tilerom[offs + 1] | ((attr & 0x01) << 8) | ((attr & 0x80) << 2);
color = (attr & 0x78) >> 3;
color += m_palette_bank * 0x40;
flags = TILE_FLIPYX((attr & 0x06) >> 1);
}
else
@ -257,7 +277,7 @@ TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info)
int const code = m_txvideoram[offs] | ((attr & 0x0f) << 8);
int const color = (attr & 0xf0) >> 4;
tileinfo.set(0, code, color, 0);
tileinfo.set(0, code, color + m_palette_bank *0x40, 0);
}
@ -292,7 +312,8 @@ void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
int sx = buffered_spriteram[offs+3] | ((buffered_spriteram[offs+1] & 0x10) << 4);
int sy = buffered_spriteram[offs+2];
int code = buffered_spriteram[offs] | ((buffered_spriteram[offs+1] & 0xe0) << 3);
int const color = buffered_spriteram[offs+1] & 0x0f;
int color = buffered_spriteram[offs+1] & 0x0f;
//TODO: This priority mechanism works for known games, but seems a bit strange.
//Are we missing something? (The obvious spare palette bit isn't it.)
int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
@ -330,6 +351,8 @@ void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
flipy = !flipy;
}
color += m_palette_bank * 0x40;
for (int y = 0; y <= height; y++)
{
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
@ -449,6 +472,8 @@ UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_i
return 0;
}
VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday)
{
/* Configure tilemap callbacks */
@ -806,6 +831,7 @@ UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_i
}
VIDEO_START_MEMBER(dooyong_68k_state, rshark)
{
/* Configure tilemap callbacks */