mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
pollux bombs now cause brightness change
This commit is contained in:
parent
7fd4bcb471
commit
e5a3d63abe
@ -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 )
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user