mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
More dooyong cleanup
This commit is contained in:
parent
edeaa1ff6c
commit
35cdfafc11
@ -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
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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 */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user