More dooyong cleanup

This commit is contained in:
Vas Crabb 2014-11-15 14:31:30 +11:00
parent edeaa1ff6c
commit 35cdfafc11
3 changed files with 140 additions and 181 deletions

View File

@ -235,13 +235,13 @@ static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW") AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW")
AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2") AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2")
AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM") AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM")
AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w) AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE8(bgscroll_w, 0x00ff)
AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w) AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE8(bg2scroll_w, 0x00ff)
AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w) AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w)
AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */ AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */
AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w) AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE8(fgscroll_w, 0x00ff)
AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w) AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE8(fg2scroll_w, 0x00ff)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state ) static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
@ -253,13 +253,13 @@ static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW") AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW")
AM_RANGE(0x080004, 0x080005) AM_READ_PORT("P1_P2") AM_RANGE(0x080004, 0x080005) AM_READ_PORT("P1_P2")
AM_RANGE(0x080006, 0x080007) AM_READ_PORT("SYSTEM") AM_RANGE(0x080006, 0x080007) AM_READ_PORT("SYSTEM")
AM_RANGE(0x084000, 0x08400f) AM_WRITE(bgscroll_w) AM_RANGE(0x084000, 0x08400f) AM_WRITE8(bgscroll_w, 0x00ff)
AM_RANGE(0x084010, 0x08401f) AM_WRITE(bg2scroll_w) AM_RANGE(0x084010, 0x08401f) AM_WRITE8(bg2scroll_w, 0x00ff)
AM_RANGE(0x088000, 0x088fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x088000, 0x088fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x080012, 0x080013) AM_WRITE(soundlatch_word_w) AM_RANGE(0x080012, 0x080013) AM_WRITE(soundlatch_word_w)
AM_RANGE(0x080014, 0x080015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */ AM_RANGE(0x080014, 0x080015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */
AM_RANGE(0x08c000, 0x08c00f) AM_WRITE(fgscroll_w) AM_RANGE(0x08c000, 0x08c00f) AM_WRITE8(fgscroll_w, 0x00ff)
AM_RANGE(0x08c010, 0x08c01f) AM_WRITE(fg2scroll_w) AM_RANGE(0x08c010, 0x08c01f) AM_WRITE8(fg2scroll_w, 0x00ff)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state ) static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
@ -274,11 +274,11 @@ static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w) AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w)
AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w) AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w)
AM_RANGE(0x0c0018, 0x0c001b) AM_WRITENOP // ? AM_RANGE(0x0c0018, 0x0c001b) AM_WRITENOP // ?
AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w) AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE8(bgscroll_w, 0x00ff)
AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w) // not used atm AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE8(bg2scroll_w, 0x00ff) // not used atm
AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w) // not used atm AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE8(fgscroll_w, 0x00ff) // not used atm
AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w) // not used atm AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE8(fg2scroll_w, 0x00ff) // not used atm
AM_RANGE(0x0dc000, 0x0dc01f) AM_RAM // registers of some kind? AM_RANGE(0x0dc000, 0x0dc01f) AM_RAM // registers of some kind?
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -11,7 +11,15 @@ public:
m_palette(*this, "palette") m_palette(*this, "palette")
{ } { }
inline void lastday_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom, UINT8 *scroll, int graphics); DECLARE_WRITE8_MEMBER(bgscroll_w);
DECLARE_WRITE8_MEMBER(bg2scroll_w);
DECLARE_WRITE8_MEMBER(fgscroll_w);
DECLARE_WRITE8_MEMBER(fg2scroll_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_bg2_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_fg2_tile_info);
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); inline void scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map);
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
@ -48,22 +56,22 @@ public:
m_spriteram(*this, "spriteram") m_spriteram(*this, "spriteram")
{ } { }
DECLARE_WRITE8_MEMBER(bgscroll_w); enum
DECLARE_WRITE8_MEMBER(bg2scroll_w); {
DECLARE_WRITE8_MEMBER(fgscroll_w); SPRITE_12BIT = 0x01,
DECLARE_WRITE8_MEMBER(fg2scroll_w); SPRITE_HEIGHT = 0x02,
SPRITE_YSHIFT_BLUEHAWK = 0x04,
SPRITE_YSHIFT_FLYTIGER = 0x08
};
DECLARE_WRITE8_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(flip_screen_w);
DECLARE_WRITE8_MEMBER(bankswitch_w); DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE8_MEMBER(txvideoram_w); DECLARE_WRITE8_MEMBER(txvideoram_w);
DECLARE_WRITE8_MEMBER(primella_ctrl_w); DECLARE_WRITE8_MEMBER(primella_ctrl_w);
DECLARE_WRITE8_MEMBER(paletteram_flytiger_w); DECLARE_WRITE8_MEMBER(paletteram_flytiger_w);
DECLARE_WRITE8_MEMBER(flytiger_ctrl_w); DECLARE_WRITE8_MEMBER(flytiger_ctrl_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_bg2_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_fg2_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions = 0);
UINT32 screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -115,17 +123,13 @@ public:
m_spriteram(*this, "spriteram") m_spriteram(*this, "spriteram")
{ } { }
DECLARE_WRITE16_MEMBER(bgscroll_w);
DECLARE_WRITE16_MEMBER(bg2scroll_w);
DECLARE_WRITE16_MEMBER(fgscroll_w);
DECLARE_WRITE16_MEMBER(fg2scroll_w);
DECLARE_WRITE16_MEMBER(ctrl_w); DECLARE_WRITE16_MEMBER(ctrl_w);
TIMER_DEVICE_CALLBACK_MEMBER(scanline); TIMER_DEVICE_CALLBACK_MEMBER(scanline);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(rshark_get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_bg2_tile_info); TILE_GET_INFO_MEMBER(rshark_get_bg2_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(rshark_get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_fg2_tile_info); TILE_GET_INFO_MEMBER(rshark_get_fg2_tile_info);
inline void rshark_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics); inline void rshark_get_tile_info(tile_data &tileinfo, int tile_index, UINT8 const *tilerom1, UINT8 const *tilerom2, UINT8 const *scroll, int graphics);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

View File

@ -18,7 +18,7 @@ inline void dooyong_state::scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, t
break; break;
case 3: /* Low byte of y scroll */ case 3: /* Low byte of y scroll */
case 4: /* High byte of y scroll */ case 4: /* High byte of y scroll */
map->set_scrolly(0, (int)scroll[3] | ((int)scroll[4] << 8)); map->set_scrolly(0, (unsigned)scroll[3] | ((unsigned)scroll[4] << 8));
break; break;
case 6: /* Tilemap enable and mode control */ case 6: /* Tilemap enable and mode control */
map->enable(!(data & 0x10)); map->enable(!(data & 0x10));
@ -43,25 +43,25 @@ inline void dooyong_state::scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, t
} }
/* These handle writes to the tilemap scroll registers in 8-bit machines. /* These handle writes to the tilemap scroll registers.
There is one per tilemap, wrapping the above function that does the work. */ There is one per tilemap, wrapping the above function that does the work. */
WRITE8_MEMBER(dooyong_z80_state::bgscroll_w) WRITE8_MEMBER(dooyong_state::bgscroll_w)
{ {
scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap); scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap);
} }
WRITE8_MEMBER(dooyong_z80_state::bg2scroll_w) WRITE8_MEMBER(dooyong_state::bg2scroll_w)
{ {
scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap); scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap);
} }
WRITE8_MEMBER(dooyong_z80_state::fgscroll_w) WRITE8_MEMBER(dooyong_state::fgscroll_w)
{ {
scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap); scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap);
} }
WRITE8_MEMBER(dooyong_z80_state::fg2scroll_w) WRITE8_MEMBER(dooyong_state::fg2scroll_w)
{ {
scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap); scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap);
} }
@ -164,8 +164,8 @@ WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w)
when the x scroll moves out of range (trying to decode the whole lot when the x scroll moves out of range (trying to decode the whole lot
at once uses hundreds of megabytes of RAM). */ at once uses hundreds of megabytes of RAM). */
inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_index, inline void dooyong_state::get_tile_info(tile_data &tileinfo, int tile_index,
const UINT8 *tilerom, UINT8 *scroll, int graphics) UINT8 const *tilerom, UINT8 const *scroll, int graphics)
{ {
int const offs = (tile_index + ((int)scroll[1] << 6)) * 2; int const offs = (tile_index + ((int)scroll[1] << 6)) * 2;
int const attr = tilerom[offs]; int const attr = tilerom[offs];
@ -185,8 +185,7 @@ inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_i
flags = TILE_FLIPYX((attr & 0x06) >> 1); flags = TILE_FLIPYX((attr & 0x06) >> 1);
} }
else else
{ { /* primella/popbingo */
/* primella */
/* Tiles take two bytes in ROM: /* Tiles take two bytes in ROM:
MSB LSB MSB LSB
[offs + 0x00] YXCC CCcc (Y flip, X flip, bits 3-0 of color code, bits 9-8 of gfx code) [offs + 0x00] YXCC CCcc (Y flip, X flip, bits 3-0 of color code, bits 9-8 of gfx code)
@ -212,24 +211,24 @@ inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_i
tileinfo.set(graphics, code, color, flags); tileinfo.set(graphics, code, color, flags);
} }
TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(dooyong_state::get_bg_tile_info)
{ {
lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx); get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg2_tile_info) TILE_GET_INFO_MEMBER(dooyong_state::get_bg2_tile_info)
{ {
lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx); get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(dooyong_state::get_fg_tile_info)
{ {
lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx); get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg2_tile_info) TILE_GET_INFO_MEMBER(dooyong_state::get_fg2_tile_info)
{ {
lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx); get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info) TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info)
@ -240,7 +239,7 @@ TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info)
[offs + 0x01] CCCC cccc (bits 3-0 of color code, bits 11-8 of gfx code) [offs + 0x01] CCCC cccc (bits 3-0 of color code, bits 11-8 of gfx code)
c = gfx code c = gfx code
C = color code */ C = color code */
int offs, attr; unsigned offs, attr;
if (m_tx_tilemap_mode == 0) if (m_tx_tilemap_mode == 0)
{ /* lastday/gulfstrm/pollux/flytiger */ { /* lastday/gulfstrm/pollux/flytiger */
offs = tile_index; offs = tile_index;
@ -258,7 +257,7 @@ TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info)
} }
void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions) void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions)
{ {
/* Sprites take 32 bytes each in memory: /* Sprites take 32 bytes each in memory:
MSB LSB MSB LSB
@ -278,53 +277,45 @@ void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
w = width w = width
X = x flip X = x flip
Y = y flip Y = y flip
* = alters y position in pollux and flytiger - see code below * = alters y position in bluehawk and flytiger - see code below
bit 11 of gfx code only used by gulfstrm, pollux, bluehawk and flytiger bit 11 of gfx code only used by gulfstrm, pollux, bluehawk and flytiger
height only used by pollux, bluehawk and flytiger height only used by pollux, bluehawk and flytiger
x flip and y flip only used by pollux and flytiger */ x flip and y flip only used by pollux and flytiger */
UINT8 *buffered_spriteram = m_spriteram->buffer(); UINT8 const *const buffered_spriteram = m_spriteram->buffer();
int offs; for (int offs = 0; offs < m_spriteram->bytes(); offs += 32)
for (offs = 0; offs < m_spriteram->bytes(); offs += 32)
{ {
int sx, sy, code, color, pri; int sx = buffered_spriteram[offs+3] | ((buffered_spriteram[offs+1] & 0x10) << 4);
int flipx = 0, flipy = 0, height = 0, y; int sy = buffered_spriteram[offs+2];
int code = buffered_spriteram[offs] | ((buffered_spriteram[offs+1] & 0xe0) << 3);
sx = buffered_spriteram[offs+3] | ((buffered_spriteram[offs+1] & 0x10) << 4); int const color = buffered_spriteram[offs+1] & 0x0f;
sy = buffered_spriteram[offs+2];
code = buffered_spriteram[offs] | ((buffered_spriteram[offs+1] & 0xe0) << 3);
color = buffered_spriteram[offs+1] & 0x0f;
//TODO: This priority mechanism works for known games, but seems a bit strange. //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.) //Are we missing something? (The obvious spare palette bit isn't it.)
pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0); int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
if (pollux_extensions) bool flipx = false, flipy = false;
int height = 0;
if (extensions)
{ {
/* gulfstrm, pollux, bluehawk, flytiger */ UINT8 const ext = buffered_spriteram[offs+0x1c];
code |= ((buffered_spriteram[offs+0x1c] & 0x01) << 11);
if (pollux_extensions >= 2) if (extensions & SPRITE_12BIT)
code |= ((ext & 0x01) << 11);
if (extensions & SPRITE_HEIGHT)
{ {
/* pollux, bluehawk, flytiger */ height = (ext & 0x70) >> 4;
height = (buffered_spriteram[offs+0x1c] & 0x70) >> 4;
code &= ~height; code &= ~height;
flipx = buffered_spriteram[offs+0x1c] & 0x08; flipx = ext & 0x08;
flipy = buffered_spriteram[offs+0x1c] & 0x04; flipy = ext & 0x04;
if (pollux_extensions == 3)
{
/* bluehawk */
sy += 6 - ((~buffered_spriteram[offs+0x1c] & 0x02) << 7);
}
if (pollux_extensions == 4)
{
/* flytiger */
sy -=(buffered_spriteram[offs+0x1c] & 0x02) << 7;
}
} }
if (extensions & SPRITE_YSHIFT_BLUEHAWK)
sy += 6 - ((~ext & 0x02) << 7);
if (extensions & SPRITE_YSHIFT_FLYTIGER)
sy -=(ext & 0x02) << 7;
} }
if (flip_screen()) if (flip_screen())
@ -335,7 +326,7 @@ void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
flipy = !flipy; flipy = !flipy;
} }
for (y = 0; y <= height; y++) for (int y = 0; y <= height; y++)
{ {
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect, m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
code + y, code + y,
@ -359,7 +350,8 @@ UINT32 dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bi
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
if (!m_sprites_disabled) if (!m_sprites_disabled)
draw_sprites(screen, bitmap, cliprect, 0); draw_sprites(screen, bitmap, cliprect);
return 0; return 0;
} }
@ -372,7 +364,8 @@ UINT32 dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, b
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
draw_sprites(screen, bitmap, cliprect, 1); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT);
return 0; return 0;
} }
@ -385,7 +378,8 @@ UINT32 dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bit
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
draw_sprites(screen, bitmap, cliprect, 2); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT);
return 0; return 0;
} }
@ -406,7 +400,8 @@ UINT32 dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_i
} }
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
draw_sprites(screen, bitmap, cliprect, 4); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_FLYTIGER);
return 0; return 0;
} }
@ -421,7 +416,8 @@ UINT32 dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_i
m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 4);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
draw_sprites(screen, bitmap, cliprect, 3); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_BLUEHAWK);
return 0; return 0;
} }
@ -433,6 +429,7 @@ UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_i
if (m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); if (m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
if (!m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); if (!m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0; return 0;
} }
@ -446,9 +443,9 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday)
m_tx_tilemap_mode = 0; m_tx_tilemap_mode = 0;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -483,9 +480,9 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, gulfstrm)
m_tx_tilemap_mode = 0; m_tx_tilemap_mode = 0;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -519,9 +516,9 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux)
m_tx_tilemap_mode = 0; m_tx_tilemap_mode = 0;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -542,7 +539,7 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux)
save_item(NAME(m_interrupt_line_2)); save_item(NAME(m_interrupt_line_2));
} }
VIDEO_START_MEMBER(dooyong_z80_state,bluehawk) VIDEO_START_MEMBER(dooyong_z80_state, bluehawk)
{ {
/* Configure tilemap callbacks */ /* Configure tilemap callbacks */
m_bg_tilerom = memregion("gfx3")->base() + 0x78000; m_bg_tilerom = memregion("gfx3")->base() + 0x78000;
@ -554,11 +551,11 @@ VIDEO_START_MEMBER(dooyong_z80_state,bluehawk)
m_tx_tilemap_mode = 1; m_tx_tilemap_mode = 1;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS, m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -579,7 +576,7 @@ VIDEO_START_MEMBER(dooyong_z80_state,bluehawk)
save_item(NAME(m_fg2scroll8)); save_item(NAME(m_fg2scroll8));
} }
VIDEO_START_MEMBER(dooyong_z80_state,flytiger) VIDEO_START_MEMBER(dooyong_z80_state, flytiger)
{ {
/* Configure tilemap callbacks */ /* Configure tilemap callbacks */
m_bg_tilerom = memregion("gfx3")->base() + 0x78000; m_bg_tilerom = memregion("gfx3")->base() + 0x78000;
@ -589,9 +586,9 @@ VIDEO_START_MEMBER(dooyong_z80_state,flytiger)
m_tx_tilemap_mode = 0; m_tx_tilemap_mode = 0;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -612,7 +609,7 @@ VIDEO_START_MEMBER(dooyong_z80_state,flytiger)
save_item(NAME(m_flytiger_pri)); save_item(NAME(m_flytiger_pri));
} }
VIDEO_START_MEMBER(dooyong_z80_state,primella) VIDEO_START_MEMBER(dooyong_z80_state, primella)
{ {
/* Configure tilemap callbacks */ /* Configure tilemap callbacks */
m_bg_tilerom = memregion("gfx2")->base() + memregion("gfx2")->bytes() - 0x8000; m_bg_tilerom = memregion("gfx2")->base() + memregion("gfx2")->bytes() - 0x8000;
@ -622,9 +619,9 @@ VIDEO_START_MEMBER(dooyong_z80_state,primella)
m_tx_tilemap_mode = 1; m_tx_tilemap_mode = 1;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
8, 8, 64, 32); 8, 8, 64, 32);
@ -645,31 +642,7 @@ VIDEO_START_MEMBER(dooyong_z80_state,primella)
} }
/* These handle writes to the tilemap scroll registers in 16-bit machines.
This is just an 8-bit peripheral in a 16-bit machine. */
WRITE16_MEMBER(dooyong_68k_state::bgscroll_w)
{
if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_bgscroll8, m_bg_tilemap);
}
WRITE16_MEMBER(dooyong_68k_state::bg2scroll_w)
{
if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_bg2scroll8, m_bg2_tilemap);
}
WRITE16_MEMBER(dooyong_68k_state::fgscroll_w)
{
if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_fgscroll8, m_fg_tilemap);
}
WRITE16_MEMBER(dooyong_68k_state::fg2scroll_w)
{
if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_fg2scroll8, m_fg2_tilemap);
}
WRITE16_MEMBER(dooyong_68k_state::ctrl_w) WRITE16_MEMBER(dooyong_68k_state::ctrl_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
@ -685,7 +658,7 @@ WRITE16_MEMBER(dooyong_68k_state::ctrl_w)
inline void dooyong_68k_state::rshark_get_tile_info(tile_data &tileinfo, int tile_index, inline void dooyong_68k_state::rshark_get_tile_info(tile_data &tileinfo, int tile_index,
const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics) UINT8 const *tilerom1, UINT8 const *tilerom2, UINT8 const *scroll, int graphics)
{ {
/* Tiles take two bytes in tile ROM 1: /* Tiles take two bytes in tile ROM 1:
MSB LSB MSB LSB
@ -704,43 +677,29 @@ inline void dooyong_68k_state::rshark_get_tile_info(tile_data &tileinfo, int til
tileinfo.set(graphics, code, color, flags); tileinfo.set(graphics, code, color, flags);
} }
TILE_GET_INFO_MEMBER(dooyong_68k_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(dooyong_68k_state::rshark_get_bg_tile_info)
{ {
if (m_bg_tilerom2 != NULL) rshark_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bg_tilerom2, m_bgscroll8, m_bg_gfx);
rshark_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bg_tilerom2, m_bgscroll8, m_bg_gfx);
else
lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_68k_state::get_bg2_tile_info) TILE_GET_INFO_MEMBER(dooyong_68k_state::rshark_get_bg2_tile_info)
{ {
if (m_bg2_tilerom2 != NULL) rshark_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2_tilerom2, m_bg2scroll8, m_bg2_gfx);
rshark_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2_tilerom2, m_bg2scroll8, m_bg2_gfx);
else
lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_68k_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(dooyong_68k_state::rshark_get_fg_tile_info)
{ {
if (m_fg_tilerom2 != NULL) rshark_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fg_tilerom2, m_fgscroll8, m_fg_gfx);
rshark_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fg_tilerom2, m_fgscroll8, m_fg_gfx);
else
lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx);
} }
TILE_GET_INFO_MEMBER(dooyong_68k_state::get_fg2_tile_info) TILE_GET_INFO_MEMBER(dooyong_68k_state::rshark_get_fg2_tile_info)
{ {
if (m_fg2_tilerom2 != NULL) rshark_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2_tilerom2, m_fg2scroll8, m_fg2_gfx);
rshark_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2_tilerom2, m_fg2scroll8, m_fg2_gfx);
else
lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx);
} }
void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
UINT16 *buffered_spriteram = m_spriteram->buffer();
/* Sprites take 8 16-bit words each in memory: /* Sprites take 8 16-bit words each in memory:
MSB LSB MSB LSB
[offs + 0] ???? ???? ???? ???E [offs + 0] ???? ???? ???? ???E
@ -760,44 +719,39 @@ void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
w = width w = width
h = height */ h = height */
int offs; UINT16 const *const buffered_spriteram = m_spriteram->buffer();
for (int offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8)
for (offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8)
{ {
if (buffered_spriteram[offs] & 0x0001) /* enable */ if (buffered_spriteram[offs] & 0x0001) /* enable */
{ {
int sx, sy, code, color, pri; int code = buffered_spriteram[offs+3];
int flipx = 0, flipy = 0, width, height, x, y; int const color = buffered_spriteram[offs+7] & 0x000f;
sx = buffered_spriteram[offs+4] & 0x01ff;
sy = (INT16)buffered_spriteram[offs+6] & 0x01ff;
if (sy & 0x0100) sy |= ~(int)0x01ff; // Correctly sign-extend 9-bit number
code = buffered_spriteram[offs+3];
color = buffered_spriteram[offs+7] & 0x000f;
//TODO: This priority mechanism works for known games, but seems a bit strange. //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.) //Are we missing something? (The obvious spare palette bit isn't it.)
pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0); int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
width = buffered_spriteram[offs+1] & 0x000f; int const width = buffered_spriteram[offs+1] & 0x000f;
height = (buffered_spriteram[offs+1] & 0x00f0) >> 4; int const height = (buffered_spriteram[offs+1] & 0x00f0) >> 4;
if (flip_screen()) bool const flip = flip_screen();
int sx = buffered_spriteram[offs+4] & 0x01ff;
int sy = (INT16)buffered_spriteram[offs+6] & 0x01ff;
if (sy & 0x0100) sy |= ~(int)0x01ff; // Correctly sign-extend 9-bit number
if (flip)
{ {
sx = 498 - (16 * width) - sx; sx = 498 - (16 * width) - sx;
sy = 240 - (16 * height) - sy; sy = 240 - (16 * height) - sy;
flipx = !flipx;
flipy = !flipy;
} }
for (y = 0; y <= height; y++) for (int y = 0; y <= height; y++)
{ {
int _y = sy + (16 * (flipy ? (height - y) : y)); int const _y = sy + (16 * (flip ? (height - y) : y));
for (x = 0; x <= width; x++) for (int x = 0; x <= width; x++)
{ {
int _x = sx + (16 * (flipx ? (width - x) : x)); int const _x = sx + (16 * (flip ? (width - x) : x));
m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect,
code, code,
color, color,
flipx, flipy, flip, flip,
_x, _y, _x, _y,
screen.priority(), screen.priority(),
pri, 15); pri, 15);
@ -819,6 +773,7 @@ UINT32 dooyong_68k_state::screen_update_rshark(screen_device &screen, bitmap_ind
m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 2); m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 2);
draw_sprites(screen, bitmap, cliprect); draw_sprites(screen, bitmap, cliprect);
return 0; return 0;
} }
@ -830,6 +785,7 @@ UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_i
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
draw_sprites(screen, bitmap, cliprect); draw_sprites(screen, bitmap, cliprect);
return 0; return 0;
} }
@ -851,13 +807,13 @@ VIDEO_START_MEMBER(dooyong_68k_state, rshark)
m_fg2_gfx = 1; m_fg2_gfx = 1;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::rshark_get_bg_tile_info),this), TILEMAP_SCAN_COLS,
16, 16, 64, 32); 16, 16, 64, 32);
m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg2_tile_info),this), TILEMAP_SCAN_COLS, m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::rshark_get_bg2_tile_info),this), TILEMAP_SCAN_COLS,
16, 16, 64, 32); 16, 16, 64, 32);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::rshark_get_fg_tile_info),this), TILEMAP_SCAN_COLS,
16, 16, 64, 32); 16, 16, 64, 32);
m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS, m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::rshark_get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
16, 16, 64, 32); 16, 16, 64, 32);
/* Configure tilemap transparency */ /* Configure tilemap transparency */
@ -882,11 +838,10 @@ VIDEO_START_MEMBER(dooyong_68k_state, popbingo)
{ {
/* Configure tilemap callbacks */ /* Configure tilemap callbacks */
m_bg_tilerom = memregion("gfx2")->base(); m_bg_tilerom = memregion("gfx2")->base();
m_bg_tilerom2 = NULL;
m_bg_gfx = 1; m_bg_gfx = 1;
/* Create tilemaps */ /* Create tilemaps */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
32, 32, 32, 8); 32, 32, 32, 8);
m_bg2_tilemap = m_fg_tilemap = m_fg2_tilemap = NULL; /* Stop scroll handler from crashing on these */ m_bg2_tilemap = m_fg_tilemap = m_fg2_tilemap = NULL; /* Stop scroll handler from crashing on these */