diff --git a/src/mame/drivers/dooyong.c b/src/mame/drivers/dooyong.c index b3d90b13dc1..5f210b8bc3f 100644 --- a/src/mame/drivers/dooyong.c +++ b/src/mame/drivers/dooyong.c @@ -84,27 +84,27 @@ be verified on real PCB. #include "sound/okim6295.h" #include "includes/dooyong.h" -WRITE8_MEMBER(dooyong_state::lastday_bankswitch_w) +WRITE8_MEMBER(dooyong_z80_state::bankswitch_w) { membank("bank1")->set_entry(data & 0x07); if (data & 0xf8) popmessage("bankswitch %02x",data); } -MACHINE_START_MEMBER(dooyong_state,lastday) +MACHINE_START_MEMBER(dooyong_z80_state, cpu_z80) { membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); } -WRITE8_MEMBER(dooyong_state::flip_screen_w) +WRITE8_MEMBER(dooyong_z80_state::flip_screen_w) { flip_screen_set(data); } -MACHINE_RESET_MEMBER(dooyong_state,sound_ym2203) +MACHINE_RESET_MEMBER(dooyong_z80_ym2203_state, sound_ym2203) { - m_interrupt_line_1=0; - m_interrupt_line_2=0; + m_interrupt_line_1 = 0; + m_interrupt_line_2 = 0; } /*************************************************************************** @@ -113,63 +113,63 @@ MACHINE_RESET_MEMBER(dooyong_state,sound_ym2203) ***************************************************************************/ -static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xc007) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xc008, 0xc00f) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xc000, 0xc007) AM_WRITE(bgscroll_w) + AM_RANGE(0xc008, 0xc00f) AM_WRITE(fgscroll_w) AM_RANGE(0xc010, 0xc010) AM_READ_PORT("SYSTEM") AM_RANGE(0xc010, 0xc010) AM_WRITE(lastday_ctrl_w) /* coin counter, flip screen */ AM_RANGE(0xc011, 0xc011) AM_READ_PORT("P1") - AM_RANGE(0xc011, 0xc011) AM_WRITE(lastday_bankswitch_w) + AM_RANGE(0xc011, 0xc011) AM_WRITE(bankswitch_w) AM_RANGE(0xc012, 0xc012) AM_READ_PORT("P2") AM_RANGE(0xc012, 0xc012) AM_WRITE(soundlatch_byte_w) AM_RANGE(0xc013, 0xc013) AM_READ_PORT("DSWA") AM_RANGE(0xc014, 0xc014) AM_READ_PORT("DSWB") AM_RANGE(0xc800, 0xcfff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") + AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xe000, 0xefff) AM_RAM AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("spriteram") ADDRESS_MAP_END -static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") - AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") AM_WRITE(lastday_bankswitch_w) + AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") AM_WRITE(bankswitch_w) AM_RANGE(0xf001, 0xf001) AM_READ_PORT("DSWB") AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P1") AM_RANGE(0xf003, 0xf003) AM_READ_PORT("P2") AM_RANGE(0xf004, 0xf004) AM_READ_PORT("SYSTEM") AM_RANGE(0xf008, 0xf008) AM_WRITE(pollux_ctrl_w) /* coin counter, flip screen */ AM_RANGE(0xf010, 0xf010) AM_WRITE(soundlatch_byte_w) - AM_RANGE(0xf018, 0xf01f) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xf020, 0xf027) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xf018, 0xf01f) AM_WRITE(bgscroll_w) + AM_RANGE(0xf020, 0xf027) AM_WRITE(fgscroll_w) AM_RANGE(0xf800, 0xffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") ADDRESS_MAP_END -static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") + AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") - AM_RANGE(0xf000, 0xf000) AM_WRITE(lastday_bankswitch_w) + AM_RANGE(0xf000, 0xf000) AM_WRITE(bankswitch_w) AM_RANGE(0xf001, 0xf001) AM_READ_PORT("DSWB") AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2") AM_RANGE(0xf003, 0xf003) AM_READ_PORT("P1") AM_RANGE(0xf004, 0xf004) AM_READ_PORT("SYSTEM") AM_RANGE(0xf008, 0xf008) AM_WRITE(pollux_ctrl_w) /* coin counter, flip screen */ AM_RANGE(0xf010, 0xf010) AM_WRITE(soundlatch_byte_w) - AM_RANGE(0xf018, 0xf01f) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xf020, 0xf027) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xf018, 0xf01f) AM_WRITE(bgscroll_w) + AM_RANGE(0xf020, 0xf027) AM_WRITE(fgscroll_w) AM_RANGE(0xf800, 0xffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") ADDRESS_MAP_END -static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xc000) AM_READ_PORT("DSWA") @@ -178,42 +178,42 @@ static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_state ) AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P1") AM_RANGE(0xc003, 0xc003) AM_READ_PORT("P2") AM_RANGE(0xc004, 0xc004) AM_READ_PORT("SYSTEM") - AM_RANGE(0xc008, 0xc008) AM_WRITE(lastday_bankswitch_w) + AM_RANGE(0xc008, 0xc008) AM_WRITE(bankswitch_w) AM_RANGE(0xc010, 0xc010) AM_WRITE(soundlatch_byte_w) - AM_RANGE(0xc018, 0xc01f) AM_WRITE(dooyong_fg2scroll8_w) - AM_RANGE(0xc040, 0xc047) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xc048, 0xc04f) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xc018, 0xc01f) AM_WRITE(fg2scroll_w) + AM_RANGE(0xc040, 0xc047) AM_WRITE(bgscroll_w) + AM_RANGE(0xc048, 0xc04f) AM_WRITE(fgscroll_w) AM_RANGE(0xc800, 0xcfff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") + AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xf000, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xd000, 0xdfff) AM_RAM AM_RANGE(0xe000, 0xe000) AM_READ_PORT("P1") - AM_RANGE(0xe000, 0xe000) AM_WRITE(lastday_bankswitch_w) + AM_RANGE(0xe000, 0xe000) AM_WRITE(bankswitch_w) AM_RANGE(0xe002, 0xe002) AM_READ_PORT("P2") AM_RANGE(0xe004, 0xe004) AM_READ_PORT("SYSTEM") AM_RANGE(0xe006, 0xe006) AM_READ_PORT("DSWA") AM_RANGE(0xe008, 0xe008) AM_READ_PORT("DSWB") AM_RANGE(0xe010, 0xe010) AM_WRITE(flytiger_ctrl_w) /* coin counter, flip screen */ AM_RANGE(0xe020, 0xe020) AM_WRITE(soundlatch_byte_w) - AM_RANGE(0xe030, 0xe037) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xe040, 0xe047) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xe030, 0xe037) AM_WRITE(bgscroll_w) + AM_RANGE(0xe040, 0xe047) AM_WRITE(fgscroll_w) AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(paletteram_flytiger_w) AM_SHARE("flytiger_palram") - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") + AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") ADDRESS_MAP_END -static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xd000, 0xd3ff) AM_RAM /* what is this? looks like a palette? scratchpad RAM maybe? */ - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram") + AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xf000, 0xf7ff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSWA") AM_RANGE(0xf800, 0xf800) AM_WRITE(primella_ctrl_w) /* bank switch, flip screen etc */ @@ -222,67 +222,67 @@ static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_state ) AM_RANGE(0xf820, 0xf820) AM_READ_PORT("P1") AM_RANGE(0xf830, 0xf830) AM_READ_PORT("P2") AM_RANGE(0xf840, 0xf840) AM_READ_PORT("SYSTEM") - AM_RANGE(0xfc00, 0xfc07) AM_WRITE(dooyong_bgscroll8_w) - AM_RANGE(0xfc08, 0xfc0f) AM_WRITE(dooyong_fgscroll8_w) + AM_RANGE(0xfc00, 0xfc07) AM_WRITE(bgscroll_w) + AM_RANGE(0xfc08, 0xfc0f) AM_WRITE(fgscroll_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_state ) +static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state ) ADDRESS_MAP_GLOBAL_MASK(0xfffff) /* super-x needs this and is similar */ AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x04cfff) AM_RAM - AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram16") + AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x04e000, 0x04ffff) AM_RAM AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW") AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2") AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM") - AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(dooyong_bgscroll16_w) - AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(dooyong_bg2scroll16_w) + AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w) + AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w) AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w) - AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(rshark_ctrl_w) /* flip screen + unknown stuff */ - AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(dooyong_fgscroll16_w) - AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(dooyong_fg2scroll16_w) + AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */ + AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w) + AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_state ) +static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state ) ADDRESS_MAP_GLOBAL_MASK(0xfffff) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x0d0000, 0x0dcfff) AM_RAM - AM_RANGE(0x0dd000, 0x0ddfff) AM_RAM AM_SHARE("spriteram16") + AM_RANGE(0x0dd000, 0x0ddfff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x0de000, 0x0dffff) AM_RAM AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW") AM_RANGE(0x080004, 0x080005) AM_READ_PORT("P1_P2") AM_RANGE(0x080006, 0x080007) AM_READ_PORT("SYSTEM") - AM_RANGE(0x084000, 0x08400f) AM_WRITE(dooyong_bgscroll16_w) - AM_RANGE(0x084010, 0x08401f) AM_WRITE(dooyong_bg2scroll16_w) + AM_RANGE(0x084000, 0x08400f) AM_WRITE(bgscroll_w) + AM_RANGE(0x084010, 0x08401f) AM_WRITE(bg2scroll_w) AM_RANGE(0x088000, 0x088fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x080012, 0x080013) AM_WRITE(soundlatch_word_w) - AM_RANGE(0x080014, 0x080015) AM_WRITE(rshark_ctrl_w) /* flip screen + unknown stuff */ - AM_RANGE(0x08c000, 0x08c00f) AM_WRITE(dooyong_fgscroll16_w) - AM_RANGE(0x08c010, 0x08c01f) AM_WRITE(dooyong_fg2scroll16_w) + AM_RANGE(0x080014, 0x080015) AM_WRITE(ctrl_w) /* flip screen + unknown stuff */ + AM_RANGE(0x08c000, 0x08c00f) AM_WRITE(fgscroll_w) + AM_RANGE(0x08c010, 0x08c01f) AM_WRITE(fg2scroll_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_state ) +static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state ) ADDRESS_MAP_GLOBAL_MASK(0xfffff) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x04cfff) AM_RAM - AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram16") + AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x04e000, 0x04ffff) AM_RAM AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW") AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2") AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM") AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w) - AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(rshark_ctrl_w) + AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w) AM_RANGE(0x0c0018, 0x0c001b) AM_WRITENOP // ? - AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(dooyong_bgscroll16_w) - AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(dooyong_bg2scroll16_w) // not used atm + AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w) + AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w) // not used atm AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(dooyong_fgscroll16_w) // not used atm - AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(dooyong_fg2scroll16_w) // not used atm + AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w) // not used atm + AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w) // not used atm AM_RANGE(0x0dc000, 0x0dc01f) AM_RAM // registers of some kind? ADDRESS_MAP_END -static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_RANGE(0xc800, 0xc800) AM_READ(soundlatch_byte_r) @@ -290,7 +290,7 @@ static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_state ) AM_RANGE(0xf002, 0xf003) AM_DEVREADWRITE("ym2", ym2203_device, read, write) ADDRESS_MAP_END -static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_state ) +static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) @@ -772,18 +772,18 @@ static GFXDECODE_START( popbingo ) GFXDECODE_ENTRY( "gfx2", 0, popbingo_tilelayout, 256, 1 ) GFXDECODE_END -READ8_MEMBER(dooyong_state::unk_r) +READ8_MEMBER(dooyong_z80_ym2203_state::unk_r) { return 0; } -WRITE_LINE_MEMBER(dooyong_state::irqhandler_2203_1) +WRITE_LINE_MEMBER(dooyong_z80_ym2203_state::irqhandler_2203_1) { m_interrupt_line_1=state; m_audiocpu->set_input_line(0, (m_interrupt_line_1 | m_interrupt_line_2) ? ASSERT_LINE : CLEAR_LINE); } -WRITE_LINE_MEMBER(dooyong_state::irqhandler_2203_2) +WRITE_LINE_MEMBER(dooyong_z80_ym2203_state::irqhandler_2203_2) { m_interrupt_line_2=state; m_audiocpu->set_input_line(0, (m_interrupt_line_1 | m_interrupt_line_2) ? ASSERT_LINE : CLEAR_LINE); @@ -800,13 +800,13 @@ static MACHINE_CONFIG_FRAGMENT( sound_2203 ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym1", YM2203, 1500000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state,irqhandler_2203_1)) - MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r)) + MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_1)) + MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_SOUND_ADD("ym2", YM2203, 1500000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state, irqhandler_2203_2)) - MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r)) + MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_2)) + MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_CONFIG_END @@ -834,7 +834,7 @@ static MACHINE_CONFIG_FRAGMENT( sound_2151_m68k ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( lastday, dooyong_state ) +static MACHINE_CONFIG_START( lastday, dooyong_z80_ym2203_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -844,8 +844,8 @@ static MACHINE_CONFIG_START( lastday, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(lastday_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) - MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) + MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203) /* video hardware */ @@ -856,7 +856,7 @@ static MACHINE_CONFIG_START( lastday, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_lastday) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_lastday) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -864,24 +864,24 @@ static MACHINE_CONFIG_START( lastday, dooyong_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,lastday) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, lastday) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym1", YM2203, 4000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state,irqhandler_2203_1)) - MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r)) + MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_1)) + MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_SOUND_ADD("ym2", YM2203, 4000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state, irqhandler_2203_2)) - MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r)) + MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_2)) + MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( gulfstrm, dooyong_state ) +static MACHINE_CONFIG_START( gulfstrm, dooyong_z80_ym2203_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -891,8 +891,8 @@ static MACHINE_CONFIG_START( gulfstrm, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(lastday_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) - MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) + MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203) /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") @@ -902,7 +902,7 @@ static MACHINE_CONFIG_START( gulfstrm, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_gulfstrm) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_gulfstrm) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -910,13 +910,13 @@ static MACHINE_CONFIG_START( gulfstrm, dooyong_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,gulfstrm) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, gulfstrm) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2203 ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( pollux, dooyong_state ) +static MACHINE_CONFIG_START( pollux, dooyong_z80_ym2203_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -926,8 +926,8 @@ static MACHINE_CONFIG_START( pollux, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(pollux_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) - MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) + MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203) /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") @@ -937,7 +937,7 @@ static MACHINE_CONFIG_START( pollux, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_pollux) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_pollux) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -945,13 +945,13 @@ static MACHINE_CONFIG_START( pollux, dooyong_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,pollux) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, pollux) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2203 ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( bluehawk, dooyong_state ) +static MACHINE_CONFIG_START( bluehawk, dooyong_z80_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -961,7 +961,7 @@ static MACHINE_CONFIG_START( bluehawk, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") @@ -971,7 +971,7 @@ static MACHINE_CONFIG_START( bluehawk, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_bluehawk) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_bluehawk) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -979,13 +979,13 @@ static MACHINE_CONFIG_START( bluehawk, dooyong_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,bluehawk) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, bluehawk) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151 ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( flytiger, dooyong_state ) +static MACHINE_CONFIG_START( flytiger, dooyong_z80_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -995,7 +995,7 @@ static MACHINE_CONFIG_START( flytiger, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") @@ -1005,7 +1005,7 @@ static MACHINE_CONFIG_START( flytiger, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_flytiger) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_flytiger) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -1013,13 +1013,13 @@ static MACHINE_CONFIG_START( flytiger, dooyong_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,flytiger) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, flytiger) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151 ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( primella, dooyong_state ) +static MACHINE_CONFIG_START( primella, dooyong_z80_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */ @@ -1029,7 +1029,7 @@ static MACHINE_CONFIG_START( primella, dooyong_state ) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* ??? */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday) + MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1037,122 +1037,123 @@ static MACHINE_CONFIG_START( primella, dooyong_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 0*8, 32*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_primella) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_primella) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", primella) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,primella) + MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, primella) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151 ) MACHINE_CONFIG_END -TIMER_DEVICE_CALLBACK_MEMBER(dooyong_state::rshark_scanline) + +TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline) { int scanline = param; - if(scanline == 248) // vblank-out irq + if (scanline == 248) // vblank-out irq m_maincpu->set_input_line(5, HOLD_LINE); - if(scanline == 120) // timer irq? + if (scanline == 120) // timer irq? m_maincpu->set_input_line(6, HOLD_LINE); } -static MACHINE_CONFIG_START( rshark, dooyong_state ) +static MACHINE_CONFIG_START( rshark, dooyong_68k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* measured on super-x */ MCFG_CPU_PROGRAM_MAP(rshark_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* measured on super-x */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_rshark) - MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_rshark) + MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", rshark) MCFG_PALETTE_ADD("palette", 2048) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,rshark) + MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151_m68k ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( superx, dooyong_state ) // dif mem map +static MACHINE_CONFIG_START( superx, dooyong_68k_state ) // dif mem map /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* measured on super-x */ MCFG_CPU_PROGRAM_MAP(superx_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* measured on super-x */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_rshark) - MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_rshark) + MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", rshark) MCFG_PALETTE_ADD("palette", 2048) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,rshark) + MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151_m68k ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( popbingo, dooyong_state ) +static MACHINE_CONFIG_START( popbingo, dooyong_68k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, 10000000) MCFG_CPU_PROGRAM_MAP(popbingo_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* measured on super-x */ MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_popbingo) - MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising) + MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_popbingo) + MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", popbingo) MCFG_PALETTE_ADD("palette", 2048) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_VIDEO_START_OVERRIDE(dooyong_state,popbingo) + MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, popbingo) /* sound hardware */ MCFG_FRAGMENT_ADD( sound_2151_m68k ) diff --git a/src/mame/includes/dooyong.h b/src/mame/includes/dooyong.h index a4b519c4413..ffe1d1f0369 100644 --- a/src/mame/includes/dooyong.h +++ b/src/mame/includes/dooyong.h @@ -5,24 +5,15 @@ class dooyong_state : public driver_device public: dooyong_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_spriteram(*this, "spriteram"), - m_spriteram16(*this, "spriteram16") , - m_txvideoram(*this, "txvideoram"), - m_paletteram_flytiger(*this, "flytiger_palram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - 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); + inline void scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map); - optional_device m_spriteram; - optional_device m_spriteram16; - optional_shared_ptr m_txvideoram; - optional_shared_ptr m_paletteram_flytiger; - UINT8 m_sprites_disabled; - UINT8 m_flytiger_palette_bank; - UINT8 m_flytiger_pri; - UINT8 m_tx_pri; - UINT16 m_rshark_pri; tilemap_t *m_bg_tilemap; tilemap_t *m_bg2_tilemap; tilemap_t *m_fg_tilemap; @@ -36,71 +27,116 @@ public: UINT8 *m_bg2_tilerom; UINT8 *m_fg_tilerom; UINT8 *m_fg2_tilerom; - UINT8 *m_bg_tilerom2; - UINT8 *m_bg2_tilerom2; - UINT8 *m_fg_tilerom2; - UINT8 *m_fg2_tilerom2; int m_bg_gfx; int m_bg2_gfx; int m_fg_gfx; int m_fg2_gfx; - int m_tx_tilemap_mode; - int m_interrupt_line_1; - int m_interrupt_line_2; - - DECLARE_WRITE8_MEMBER(lastday_bankswitch_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); - DECLARE_WRITE8_MEMBER(dooyong_bgscroll8_w); - DECLARE_WRITE8_MEMBER(dooyong_bg2scroll8_w); - DECLARE_WRITE8_MEMBER(dooyong_fgscroll8_w); - DECLARE_WRITE8_MEMBER(dooyong_fg2scroll8_w); - DECLARE_WRITE16_MEMBER(dooyong_bgscroll16_w); - DECLARE_WRITE16_MEMBER(dooyong_bg2scroll16_w); - DECLARE_WRITE16_MEMBER(dooyong_fgscroll16_w); - DECLARE_WRITE16_MEMBER(dooyong_fg2scroll16_w); - DECLARE_WRITE8_MEMBER(dooyong_txvideoram8_w); - DECLARE_WRITE8_MEMBER(lastday_ctrl_w); - DECLARE_WRITE8_MEMBER(pollux_ctrl_w); - DECLARE_WRITE8_MEMBER(primella_ctrl_w); - DECLARE_WRITE8_MEMBER(paletteram_flytiger_w); - DECLARE_WRITE8_MEMBER(flytiger_ctrl_w); - DECLARE_WRITE16_MEMBER(rshark_ctrl_w); - DECLARE_READ8_MEMBER(unk_r); - 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(flytiger_get_fg_tile_info); - TILE_GET_INFO_MEMBER(get_tx_tile_info); - inline void lastday_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom, UINT8 *scroll, int graphics); - inline void rshark_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics); - DECLARE_MACHINE_START(lastday); - DECLARE_MACHINE_RESET(sound_ym2203); - DECLARE_VIDEO_START(lastday); - DECLARE_VIDEO_START(gulfstrm); - DECLARE_VIDEO_START(pollux); - DECLARE_VIDEO_START(bluehawk); - DECLARE_VIDEO_START(flytiger); - DECLARE_VIDEO_START(primella); - DECLARE_VIDEO_START(rshark); - DECLARE_VIDEO_START(popbingo); - UINT32 screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - UINT32 screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - UINT32 screen_update_pollux(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_primella(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); - TIMER_DEVICE_CALLBACK_MEMBER(rshark_scanline); - inline void dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map); - void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions); - void rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_1); - DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_2); required_device m_maincpu; required_device m_audiocpu; required_device m_gfxdecode; required_device m_palette; }; + +class dooyong_z80_state : public dooyong_state +{ +public: + dooyong_z80_state(const machine_config &mconfig, device_type type, const char *tag) + : dooyong_state(mconfig, type, tag), + m_txvideoram(*this, "txvideoram"), + m_paletteram_flytiger(*this, "flytiger_palram"), + m_spriteram(*this, "spriteram") + { } + + DECLARE_WRITE8_MEMBER(bgscroll_w); + DECLARE_WRITE8_MEMBER(bg2scroll_w); + DECLARE_WRITE8_MEMBER(fgscroll_w); + DECLARE_WRITE8_MEMBER(fg2scroll_w); + DECLARE_WRITE8_MEMBER(flip_screen_w); + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE8_MEMBER(txvideoram_w); + DECLARE_WRITE8_MEMBER(primella_ctrl_w); + DECLARE_WRITE8_MEMBER(paletteram_flytiger_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); + void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions); + 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_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_MACHINE_START(cpu_z80); + DECLARE_VIDEO_START(bluehawk); + DECLARE_VIDEO_START(flytiger); + DECLARE_VIDEO_START(primella); + + required_shared_ptr m_txvideoram; + optional_shared_ptr 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; + + optional_device m_spriteram; +}; + +class dooyong_z80_ym2203_state : public dooyong_z80_state +{ +public: + dooyong_z80_ym2203_state(const machine_config &mconfig, device_type type, const char *tag) + : dooyong_z80_state(mconfig, type, tag) + { } + + DECLARE_WRITE8_MEMBER(lastday_ctrl_w); + DECLARE_WRITE8_MEMBER(pollux_ctrl_w); + DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_1); + DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_2); + DECLARE_READ8_MEMBER(unk_r); + DECLARE_MACHINE_RESET(sound_ym2203); + UINT32 screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_VIDEO_START(lastday); + DECLARE_VIDEO_START(gulfstrm); + DECLARE_VIDEO_START(pollux); + + int m_interrupt_line_1; + int m_interrupt_line_2; +}; + +class dooyong_68k_state : public dooyong_state +{ +public: + dooyong_68k_state(const machine_config &mconfig, device_type type, const char *tag) + : dooyong_state(mconfig, type, tag), + 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); + TIMER_DEVICE_CALLBACK_MEMBER(scanline); + 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 rshark_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics); + 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_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_VIDEO_START(rshark); + DECLARE_VIDEO_START(popbingo); + + UINT8 *m_bg_tilerom2; + UINT8 *m_bg2_tilerom2; + UINT8 *m_fg_tilerom2; + UINT8 *m_fg2_tilerom2; + UINT16 m_bg2_priority; + + required_device m_spriteram; +}; diff --git a/src/mame/video/dooyong.c b/src/mame/video/dooyong.c index 96c913041dd..a6bc6b85202 100644 --- a/src/mame/video/dooyong.c +++ b/src/mame/video/dooyong.c @@ -2,7 +2,7 @@ #include "includes/dooyong.h" -inline void dooyong_state::dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map) +inline void dooyong_state::scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map) { UINT8 old = scroll[offset]; if (old != data) @@ -46,52 +46,28 @@ inline void dooyong_state::dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *s /* These handle writes to the tilemap scroll registers in 8-bit machines. There is one per tilemap, wrapping the above function that does the work. */ -WRITE8_MEMBER(dooyong_state::dooyong_bgscroll8_w) +WRITE8_MEMBER(dooyong_z80_state::bgscroll_w) { - dooyong_scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap); + scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap); } -WRITE8_MEMBER(dooyong_state::dooyong_bg2scroll8_w) +WRITE8_MEMBER(dooyong_z80_state::bg2scroll_w) { - dooyong_scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap); + scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap); } -WRITE8_MEMBER(dooyong_state::dooyong_fgscroll8_w) +WRITE8_MEMBER(dooyong_z80_state::fgscroll_w) { - dooyong_scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap); + scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap); } -WRITE8_MEMBER(dooyong_state::dooyong_fg2scroll8_w) +WRITE8_MEMBER(dooyong_z80_state::fg2scroll_w) { - dooyong_scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap); + scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap); } -/* 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_state::dooyong_bgscroll16_w) -{ - if (ACCESSING_BITS_0_7) dooyong_bgscroll8_w(space, offset, data & 0x00ff); -} - -WRITE16_MEMBER(dooyong_state::dooyong_bg2scroll16_w) -{ - if (ACCESSING_BITS_0_7) dooyong_bg2scroll8_w(space, offset, data & 0x00ff); -} - -WRITE16_MEMBER(dooyong_state::dooyong_fgscroll16_w) -{ - if (ACCESSING_BITS_0_7) dooyong_fgscroll8_w(space, offset, data & 0x00ff); -} - -WRITE16_MEMBER(dooyong_state::dooyong_fg2scroll16_w) -{ - if (ACCESSING_BITS_0_7) dooyong_fg2scroll8_w(space, offset, data & 0x00ff); -} - - -WRITE8_MEMBER(dooyong_state::dooyong_txvideoram8_w) +WRITE8_MEMBER(dooyong_z80_state::txvideoram_w) { if (m_txvideoram[offset] != data) { @@ -106,7 +82,7 @@ WRITE8_MEMBER(dooyong_state::dooyong_txvideoram8_w) /* Control registers seem to be different on every game */ -WRITE8_MEMBER(dooyong_state::lastday_ctrl_w) +WRITE8_MEMBER(dooyong_z80_ym2203_state::lastday_ctrl_w) { /* bits 0 and 1 are coin counters */ coin_counter_w(machine(), 0, data & 0x01); @@ -121,7 +97,7 @@ WRITE8_MEMBER(dooyong_state::lastday_ctrl_w) flip_screen_set(data & 0x40); } -WRITE8_MEMBER(dooyong_state::pollux_ctrl_w) +WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w) { /* bit 0 is flip screen */ flip_screen_set(data & 0x01); @@ -136,7 +112,7 @@ WRITE8_MEMBER(dooyong_state::pollux_ctrl_w) /* bit 4 is used but unknown */ } -WRITE8_MEMBER(dooyong_state::primella_ctrl_w) +WRITE8_MEMBER(dooyong_z80_state::primella_ctrl_w) { /* bits 0-2 select ROM bank */ membank("bank1")->set_entry(data & 0x07); @@ -152,7 +128,7 @@ WRITE8_MEMBER(dooyong_state::primella_ctrl_w) // logerror("%04x: bankswitch = %02x\n",space.device().safe_pc(),data&0xe0); } -WRITE8_MEMBER(dooyong_state::paletteram_flytiger_w) +WRITE8_MEMBER(dooyong_z80_state::paletteram_flytiger_w) { if (m_flytiger_palette_bank) { @@ -163,7 +139,7 @@ WRITE8_MEMBER(dooyong_state::paletteram_flytiger_w) } } -WRITE8_MEMBER(dooyong_state::flytiger_ctrl_w) +WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w) { /* bit 0 is flip screen */ flip_screen_set(data & 0x01); @@ -177,21 +153,6 @@ WRITE8_MEMBER(dooyong_state::flytiger_ctrl_w) m_flytiger_pri = data & 0x10; } -WRITE16_MEMBER(dooyong_state::rshark_ctrl_w) - -{ - if (ACCESSING_BITS_0_7) - { - /* bit 0 flips screen */ - flip_screen_set(data & 0x0001); - - /* bit 4 changes tilemaps priority */ - m_rshark_pri = data & 0x0010; - - /* bit 5 used but unknown */ - } -} - /* These games all have ROM-based tilemaps for the backgrounds, title screens and sometimes "bosses" and special attacks. There are three @@ -206,8 +167,8 @@ WRITE16_MEMBER(dooyong_state::rshark_ctrl_w) inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom, UINT8 *scroll, int graphics) { - int offs = (tile_index + ((int)scroll[1] << 6)) * 2; - int attr = tilerom[offs]; + int const offs = (tile_index + ((int)scroll[1] << 6)) * 2; + int const attr = tilerom[offs]; int code, color, flags; if (scroll[6] & 0x20) { /* lastday/gulfstrm/pollux/flytiger */ @@ -221,7 +182,7 @@ inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_i Y = y flip */ code = tilerom[offs + 1] | ((attr & 0x01) << 8) | ((attr & 0x80) << 2); color = (attr & 0x78) >> 3; - flags = ((attr & 0x02) ? TILE_FLIPX : 0) | ((attr & 0x04) ? TILE_FLIPY : 0); + flags = TILE_FLIPYX((attr & 0x06) >> 1); } else { @@ -245,80 +206,33 @@ inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_i code = tilerom[offs + 1] | ((attr & codemask) << 8); color = (attr & palmask) >> 2; - flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); + flags = TILE_FLIPYX((attr & 0xC0) >> 6); } - SET_TILE_INFO_MEMBER(graphics, code, color, flags); + tileinfo.set(graphics, code, color, flags); } -inline void dooyong_state::rshark_get_tile_info(tile_data &tileinfo, int tile_index, - const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics) +TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg_tile_info) { - /* Tiles take two bytes in tile ROM 1: - MSB LSB - [offs + 0x00] YX?c cccc (Y flip, X flip, bits 12-8 of gfx code) - [offs + 0x01] cccc cccc (bits 7-0 of gfx code) - ? = unused/unknown - c = gfx code - X = x flip - Y = y flip */ - int offs = tile_index + ((int)scroll[1] << 9); - int attr = tilerom1[offs * 2]; - int code = tilerom1[(offs * 2) + 1] | ((attr & 0x1f) << 8); - int color = tilerom2[offs] & 0x0f; - int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); - - SET_TILE_INFO_MEMBER(graphics, code, color, flags); + lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx); } -TILE_GET_INFO_MEMBER(dooyong_state::get_bg_tile_info) +TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg2_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); - else - lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx); + lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx); } -TILE_GET_INFO_MEMBER(dooyong_state::get_bg2_tile_info) +TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg_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); - else - lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx); + lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx); } -TILE_GET_INFO_MEMBER(dooyong_state::get_fg_tile_info) +TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg2_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); - else - lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx); + lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx); } -TILE_GET_INFO_MEMBER(dooyong_state::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); - else - lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx); -} - -/* flytiger uses some palette banking technique or something maybe a trash protection */ - -TILE_GET_INFO_MEMBER(dooyong_state::flytiger_get_fg_tile_info) -{ - const UINT8 *tilerom = m_fg_tilerom; - - int offs = (tile_index + (m_fgscroll8[1] << 6)) * 2; - int attr = tilerom[offs]; - int code = tilerom[offs + 1] | ((attr & 0x01) << 8) | ((attr & 0x80) << 2); - int color = (attr & 0x78) >> 3; - int flags = ((attr & 0x02) ? TILE_FLIPX : 0) | ((attr & 0x04) ? TILE_FLIPY : 0); - - SET_TILE_INFO_MEMBER(m_fg_gfx, code, color, flags); -} - -TILE_GET_INFO_MEMBER(dooyong_state::get_tx_tile_info) +TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info) { /* Each tile takes two bytes of memory: MSB LSB @@ -326,7 +240,7 @@ TILE_GET_INFO_MEMBER(dooyong_state::get_tx_tile_info) [offs + 0x01] CCCC cccc (bits 3-0 of color code, bits 11-8 of gfx code) c = gfx code C = color code */ - int offs, attr, code, color; + int offs, attr; if (m_tx_tilemap_mode == 0) { /* lastday/gulfstrm/pollux/flytiger */ offs = tile_index; @@ -337,14 +251,14 @@ TILE_GET_INFO_MEMBER(dooyong_state::get_tx_tile_info) offs = tile_index * 2; attr = m_txvideoram[offs + 1]; } - code = m_txvideoram[offs] | ((attr & 0x0f) << 8); - color = (attr & 0xf0) >> 4; + int const code = m_txvideoram[offs] | ((attr & 0x0f) << 8); + int const color = (attr & 0xf0) >> 4; - SET_TILE_INFO_MEMBER(0, code, color, 0); + tileinfo.set(0, code, color, 0); } -void dooyong_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, int pollux_extensions) { /* Sprites take 32 bytes each in memory: MSB LSB @@ -434,9 +348,398 @@ void dooyong_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co } } -void dooyong_state::rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) + +UINT32 dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - UINT16 *buffered_spriteram16 = m_spriteram16->buffer(); + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0, cliprect); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + if (!m_sprites_disabled) + draw_sprites(screen, bitmap, cliprect, 0); + return 0; +} + +UINT32 dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0, cliprect); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + draw_sprites(screen, bitmap, cliprect, 1); + return 0; +} + +UINT32 dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0, cliprect); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + draw_sprites(screen, bitmap, cliprect, 2); + return 0; +} + +UINT32 dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0, cliprect); + + if (m_flytiger_pri) + { + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + } + else + { + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + } + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + draw_sprites(screen, bitmap, cliprect, 4); + return 0; +} + + +UINT32 dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0, cliprect); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + draw_sprites(screen, bitmap, cliprect, 3); + return 0; +} + +UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + + m_bg_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); + if (!m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + +VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx5")->base(); + m_fg_tilerom = memregion("gfx6")->base(); + m_bg_gfx = 2; + m_fg_gfx = 3; + m_tx_tilemap_mode = 0; + + /* 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + /* Text layer is offset on this machine */ + m_tx_tilemap->set_scrolly(0, 8); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_sprites_disabled)); + save_item(NAME(m_interrupt_line_1)); + save_item(NAME(m_interrupt_line_2)); +} + +VIDEO_START_MEMBER(dooyong_z80_ym2203_state, gulfstrm) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx5")->base(); + m_fg_tilerom = memregion("gfx6")->base(); + m_bg_gfx = 2; + m_fg_gfx = 3; + m_tx_tilemap_mode = 0; + + /* 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + /* Text layer is offset on this machine */ + m_tx_tilemap->set_scrolly(0, 8); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_interrupt_line_1)); + save_item(NAME(m_interrupt_line_2)); +} + +VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx5")->base(); + m_fg_tilerom = memregion("gfx6")->base(); + m_bg_gfx = 2; + m_fg_gfx = 3; + m_tx_tilemap_mode = 0; + + /* 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_interrupt_line_1)); + save_item(NAME(m_interrupt_line_2)); +} + +VIDEO_START_MEMBER(dooyong_z80_state,bluehawk) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx3")->base() + 0x78000; + m_fg_tilerom = memregion("gfx4")->base() + 0x78000; + m_fg2_tilerom = memregion("gfx5")->base() + 0x38000; + m_bg_gfx = 2; + m_fg_gfx = 3; + m_fg2_gfx = 4; + m_tx_tilemap_mode = 1; + + /* 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, + 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_fg_tilemap->set_transparent_pen(15); + m_fg2_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_fg2scroll8)); +} + +VIDEO_START_MEMBER(dooyong_z80_state,flytiger) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx3")->base() + 0x78000; + m_fg_tilerom = memregion("gfx4")->base() + 0x78000; + m_bg_gfx = 2; + m_fg_gfx = 3; + m_tx_tilemap_mode = 0; + + /* 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_bg_tilemap->set_transparent_pen(15); + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_flytiger_pri)); +} + +VIDEO_START_MEMBER(dooyong_z80_state,primella) +{ + /* Configure tilemap callbacks */ + m_bg_tilerom = memregion("gfx2")->base() + memregion("gfx2")->bytes() - 0x8000; + m_fg_tilerom = memregion("gfx3")->base() + memregion("gfx3")->bytes() - 0x8000; + m_bg_gfx = 1; + m_fg_gfx = 2; + m_tx_tilemap_mode = 1; + + /* 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, + 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, + 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, + 8, 8, 64, 32); + + /* Configure tilemap transparency */ + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); + + memset(m_bgscroll8, 0, 0x10); + memset(m_bg2scroll8, 0, 0x10); + memset(m_fgscroll8, 0, 0x10); + memset(m_fg2scroll8, 0, 0x10); + + /* Register for save/restore */ + save_item(NAME(m_bgscroll8)); + save_item(NAME(m_fgscroll8)); + save_item(NAME(m_tx_pri)); +} + + +/* 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) + +{ + if (ACCESSING_BITS_0_7) + { + /* bit 0 flips screen */ + flip_screen_set(data & 0x0001); + + /* bit 4 changes tilemaps priority */ + m_bg2_priority = data & 0x0010; + + /* bit 5 used but unknown */ + } +} + + +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) +{ + /* Tiles take two bytes in tile ROM 1: + MSB LSB + [offs + 0x00] YX?c cccc (Y flip, X flip, bits 12-8 of gfx code) + [offs + 0x01] cccc cccc (bits 7-0 of gfx code) + ? = unused/unknown + c = gfx code + X = x flip + Y = y flip */ + int const offs = tile_index + ((int)scroll[1] << 9); + int const attr = tilerom1[offs * 2]; + int const code = tilerom1[(offs * 2) + 1] | ((attr & 0x1f) << 8); + int const color = tilerom2[offs] & 0x0f; + int const flags = TILE_FLIPYX((attr & 0xC0) >> 6); + + tileinfo.set(graphics, code, color, flags); +} + +TILE_GET_INFO_MEMBER(dooyong_68k_state::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); + 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) +{ + if (m_bg2_tilerom2 != NULL) + 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) +{ + if (m_fg_tilerom2 != NULL) + 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) +{ + if (m_fg2_tilerom2 != NULL) + 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) +{ + UINT16 *buffered_spriteram = m_spriteram->buffer(); /* Sprites take 8 16-bit words each in memory: MSB LSB @@ -459,23 +762,23 @@ void dooyong_state::rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bit int offs; - for (offs = (m_spriteram16->bytes() / 2) - 8; offs >= 0; offs -= 8) + for (offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8) { - if (buffered_spriteram16[offs] & 0x0001) /* enable */ + if (buffered_spriteram[offs] & 0x0001) /* enable */ { int sx, sy, code, color, pri; int flipx = 0, flipy = 0, width, height, x, y; - sx = buffered_spriteram16[offs+4] & 0x01ff; - sy = (INT16)buffered_spriteram16[offs+6] & 0x01ff; + 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_spriteram16[offs+3]; - color = buffered_spriteram16[offs+7] & 0x000f; + code = buffered_spriteram[offs+3]; + color = buffered_spriteram[offs+7] & 0x000f; //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.) pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0); - width = buffered_spriteram16[offs+1] & 0x000f; - height = (buffered_spriteram16[offs+1] & 0x00f0) >> 4; + width = buffered_spriteram[offs+1] & 0x000f; + height = (buffered_spriteram[offs+1] & 0x00f0) >> 4; if (flip_screen()) { @@ -505,342 +808,33 @@ void dooyong_state::rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bit } } - -UINT32 dooyong_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 dooyong_68k_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->black_pen(), cliprect); screen.priority().fill(0, cliprect); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - if (!m_sprites_disabled) - draw_sprites(screen, bitmap, cliprect, 0); - return 0; -} - -UINT32 dooyong_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0, cliprect); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - draw_sprites(screen, bitmap, cliprect, 1); - return 0; -} - -UINT32 dooyong_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0, cliprect); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - draw_sprites(screen, bitmap, cliprect, 2); - return 0; -} - -UINT32 dooyong_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0, cliprect); - - if (m_flytiger_pri) - { - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - } - else - { - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - } - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - draw_sprites(screen, bitmap, cliprect, 4); - return 0; -} - - -UINT32 dooyong_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0, cliprect); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); - m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 4); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - draw_sprites(screen, bitmap, cliprect, 3); - return 0; -} - -UINT32 dooyong_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - - m_bg_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); - if (!m_tx_pri) m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); - return 0; -} - -UINT32 dooyong_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0, cliprect); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - m_bg2_tilemap->draw(screen, bitmap, cliprect, 0, (m_rshark_pri ? 2 : 1)); + m_bg2_tilemap->draw(screen, bitmap, cliprect, 0, (m_bg2_priority ? 2 : 1)); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 2); - rshark_draw_sprites(screen, bitmap, cliprect); + draw_sprites(screen, bitmap, cliprect); return 0; } -UINT32 dooyong_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->black_pen(), cliprect); screen.priority().fill(0, cliprect); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1); - rshark_draw_sprites(screen, bitmap, cliprect); + draw_sprites(screen, bitmap, cliprect); return 0; } -VIDEO_START_MEMBER(dooyong_state,lastday) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx5")->base(); - m_fg_tilerom = memregion("gfx6")->base(); - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_bg_gfx = 2; - m_fg_gfx = 3; - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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); - 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); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - /* Text layer is offset on this machine */ - m_tx_tilemap->set_scrolly(0, 8); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_sprites_disabled)); - save_item(NAME(m_interrupt_line_1)); - save_item(NAME(m_interrupt_line_2)); -} - -VIDEO_START_MEMBER(dooyong_state,gulfstrm) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx5")->base(); - m_fg_tilerom = memregion("gfx6")->base(); - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_bg_gfx = 2; - m_fg_gfx = 3; - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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); - 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); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - /* Text layer is offset on this machine */ - m_tx_tilemap->set_scrolly(0, 8); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_interrupt_line_1)); - save_item(NAME(m_interrupt_line_2)); -} - -VIDEO_START_MEMBER(dooyong_state,pollux) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx5")->base(); - m_fg_tilerom = memregion("gfx6")->base(); - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_bg_gfx = 2; - m_fg_gfx = 3; - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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); - 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); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_interrupt_line_1)); - save_item(NAME(m_interrupt_line_2)); -} - -VIDEO_START_MEMBER(dooyong_state,bluehawk) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx3")->base() + 0x78000; - m_fg_tilerom = memregion("gfx4")->base() + 0x78000; - m_fg2_tilerom = memregion("gfx5")->base() + 0x38000; - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_fg2_tilerom2 = NULL; - m_bg_gfx = 2; - m_fg_gfx = 3; - m_fg2_gfx = 4; - m_tx_tilemap_mode = 1; - - /* Create tilemaps */ - 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); - 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); - 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); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_fg_tilemap->set_transparent_pen(15); - m_fg2_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_fg2scroll8)); -} - -VIDEO_START_MEMBER(dooyong_state,flytiger) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx3")->base() + 0x78000; - m_fg_tilerom = memregion("gfx4")->base() + 0x78000; - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_bg_gfx = 2; - m_fg_gfx = 3; - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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); - m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::flytiger_get_fg_tile_info),this), TILEMAP_SCAN_COLS, - 32, 32, 32, 8); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_bg_tilemap->set_transparent_pen(15); - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_flytiger_pri)); -} - -VIDEO_START_MEMBER(dooyong_state,primella) -{ - /* Configure tilemap callbacks */ - m_bg_tilerom = memregion("gfx2")->base() + memregion("gfx2")->bytes() - 0x8000; - m_fg_tilerom = memregion("gfx3")->base() + memregion("gfx3")->bytes() - 0x8000; - m_bg_tilerom2 = NULL; - m_fg_tilerom2 = NULL; - m_bg_gfx = 1; - m_fg_gfx = 2; - m_tx_tilemap_mode = 1; - - /* Create tilemaps */ - 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); - 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); - m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS, - 8, 8, 64, 32); - - /* Configure tilemap transparency */ - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); - - memset(m_bgscroll8, 0, 0x10); - memset(m_bg2scroll8, 0, 0x10); - memset(m_fgscroll8, 0, 0x10); - memset(m_fg2scroll8, 0, 0x10); - - /* Register for save/restore */ - save_item(NAME(m_bgscroll8)); - save_item(NAME(m_fgscroll8)); - save_item(NAME(m_tx_pri)); -} - -VIDEO_START_MEMBER(dooyong_state,rshark) +VIDEO_START_MEMBER(dooyong_68k_state, rshark) { /* Configure tilemap callbacks */ m_bg_tilerom = memregion("gfx5")->base(); @@ -857,13 +851,13 @@ VIDEO_START_MEMBER(dooyong_state,rshark) m_fg2_gfx = 1; /* Create tilemaps */ - m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_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::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32); - m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_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::get_bg2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32); - m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_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::get_fg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32); - m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_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::get_fg2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32); /* Configure tilemap transparency */ @@ -881,17 +875,18 @@ VIDEO_START_MEMBER(dooyong_state,rshark) save_item(NAME(m_bg2scroll8)); save_item(NAME(m_fgscroll8)); save_item(NAME(m_fg2scroll8)); - save_item(NAME(m_rshark_pri)); + save_item(NAME(m_bg2_priority)); } -VIDEO_START_MEMBER(dooyong_state,popbingo) +VIDEO_START_MEMBER(dooyong_68k_state, popbingo) { /* Configure tilemap callbacks */ m_bg_tilerom = memregion("gfx2")->base(); + m_bg_tilerom2 = NULL; m_bg_gfx = 1; /* Create tilemaps */ - m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_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::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 32, 32, 32, 8); m_bg2_tilemap = m_fg_tilemap = m_fg2_tilemap = NULL; /* Stop scroll handler from crashing on these */ @@ -905,5 +900,5 @@ VIDEO_START_MEMBER(dooyong_state,popbingo) save_item(NAME(m_bg2scroll8)); // Not used atm save_item(NAME(m_fgscroll8)); // Not used atm save_item(NAME(m_fg2scroll8)); // Not used atm - save_item(NAME(m_rshark_pri)); + save_item(NAME(m_bg2_priority)); }