diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/dooyong.cpp | 129 | ||||
-rw-r--r-- | src/mame/includes/dooyong.h | 131 | ||||
-rw-r--r-- | src/mame/video/dooyong.cpp | 298 |
3 files changed, 294 insertions, 264 deletions
diff --git a/src/mame/drivers/dooyong.cpp b/src/mame/drivers/dooyong.cpp index 6839b57452a..bbe3dbbd544 100644 --- a/src/mame/drivers/dooyong.cpp +++ b/src/mame/drivers/dooyong.cpp @@ -123,7 +123,7 @@ static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) 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(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xd000, 0xdfff) AM_READWRITE(lastday_tx_r, lastday_tx_w) AM_RANGE(0xe000, 0xefff) AM_RAM AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("spriteram") ADDRESS_MAP_END @@ -133,7 +133,7 @@ static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state ) 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(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xe000, 0xefff) AM_READWRITE(lastday_tx_r, lastday_tx_w) 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") @@ -151,7 +151,7 @@ static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state 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(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xe000, 0xefff) AM_READWRITE(lastday_tx_r, lastday_tx_w) AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") AM_RANGE(0xf000, 0xf000) AM_WRITE(bankswitch_w) AM_RANGE(0xf001, 0xf001) AM_READ_PORT("DSWB") @@ -180,7 +180,7 @@ static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state ) AM_RANGE(0xc040, 0xc047) AM_DEVWRITE("bg", dooyong_rom_tilemap_device, ctrl_w) AM_RANGE(0xc048, 0xc04f) AM_DEVWRITE("fg", dooyong_rom_tilemap_device, ctrl_w) AM_RANGE(0xc800, 0xcfff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xd000, 0xdfff) AM_READWRITE(bluehawk_tx_r, bluehawk_tx_w) AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xf000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -201,7 +201,7 @@ static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state ) AM_RANGE(0xe030, 0xe037) AM_DEVWRITE("bg", dooyong_rom_tilemap_device, ctrl_w) AM_RANGE(0xe040, 0xe047) AM_DEVWRITE("fg", dooyong_rom_tilemap_device, ctrl_w) AM_RANGE(0xe800, 0xefff) AM_READWRITE(paletteram_flytiger_r, paletteram_flytiger_w) - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xf000, 0xffff) AM_READWRITE(lastday_tx_r, lastday_tx_w) ADDRESS_MAP_END static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state ) @@ -209,7 +209,7 @@ static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state ) 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(txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xe000, 0xefff) AM_READWRITE(bluehawk_tx_r, bluehawk_tx_w) 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 */ @@ -843,6 +843,7 @@ static MACHINE_CONFIG_START( lastday, dooyong_z80_ym2203_state ) MCFG_DOOYONG_ROM_TILEMAP_ADD("bg", "gfxdecode", 2, "gfx5", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg", "gfxdecode", 3, "gfx6", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, lastday) @@ -894,6 +895,7 @@ static MACHINE_CONFIG_START( gulfstrm, dooyong_z80_ym2203_state ) MCFG_DOOYONG_ROM_TILEMAP_ADD("bg", "gfxdecode", 2, "gfx5", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg", "gfxdecode", 3, "gfx6", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, gulfstrm) @@ -932,6 +934,7 @@ static MACHINE_CONFIG_START( pollux, dooyong_z80_ym2203_state ) MCFG_DOOYONG_ROM_TILEMAP_ADD("bg", "gfxdecode", 2, "gfx5", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg", "gfxdecode", 3, "gfx6", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, pollux) @@ -971,6 +974,7 @@ static MACHINE_CONFIG_START( bluehawk, dooyong_z80_state ) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg2", "gfxdecode", 4, "gfx5", 0x1c000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, bluehawk) @@ -1009,6 +1013,7 @@ static MACHINE_CONFIG_START( flytiger, dooyong_z80_state ) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg", "gfxdecode", 3, "gfx4", 0x3c000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, flytiger) @@ -1045,6 +1050,7 @@ static MACHINE_CONFIG_START( primella, dooyong_z80_state ) MCFG_DOOYONG_ROM_TILEMAP_ADD("fg", "gfxdecode", 2, "gfx3", -0x4000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15) MCFG_DOOYONG_ROM_TILEMAP_PRIMELLA_CODE_BITS(10) + MCFG_DOOYONG_RAM_TILEMAP_ADD("tx", "gfxdecode", 0) MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, primella) @@ -1065,31 +1071,31 @@ TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline) } -static MACHINE_CONFIG_START( rshark, dooyong_68k_state ) +static MACHINE_CONFIG_START( dooyong_68k, rshark_state ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68000, 8000000) /* measured on super-x */ - MCFG_CPU_PROGRAM_MAP(rshark_map) + // basic machine hardware + MCFG_CPU_ADD("maincpu", M68000, XTAL_8MHz) // 8MHz measured on Super-X 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_ADD("audiocpu", Z80, XTAL_8MHz/2) // 4MHz measured on Super-X MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - /* video hardware */ + // video hardware MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + 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_68k_state, screen_update_rshark) + MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1) + MCFG_SCREEN_UPDATE_DRIVER(rshark_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_RSHARK_ROM_TILEMAP_ADD("bg", "gfxdecode", 4, "gfx5", 0x00000, "gfx6", 0x60000) MCFG_RSHARK_ROM_TILEMAP_ADD("bg2", "gfxdecode", 3, "gfx4", 0x00000, "gfx6", 0x40000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15); @@ -1098,87 +1104,60 @@ static MACHINE_CONFIG_START( rshark, dooyong_68k_state ) MCFG_RSHARK_ROM_TILEMAP_ADD("fg2", "gfxdecode", 1, "gfx2", 0x00000, "gfx6", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15); - MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark) + MCFG_VIDEO_START_OVERRIDE(rshark_state, rshark) - /* sound hardware */ - MCFG_FRAGMENT_ADD( sound_2151_4mhz ) + // sound hardware + MCFG_FRAGMENT_ADD(sound_2151_4mhz) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( superx, dooyong_68k_state ) // dif mem map +static MACHINE_CONFIG_DERIVED( rshark, dooyong_68k ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(rshark_map) +MACHINE_CONFIG_END - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68000, XTAL_8MHz) /* 8MHz measured */ +static MACHINE_CONFIG_DERIVED( superx, dooyong_68k ) + MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(superx_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1) - - MCFG_CPU_ADD("audiocpu", Z80, XTAL_8MHz/2) /* 4MHz measured */ - MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - - /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - 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_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_RSHARK_ROM_TILEMAP_ADD("bg", "gfxdecode", 4, "gfx5", 0x00000, "gfx6", 0x60000) - MCFG_RSHARK_ROM_TILEMAP_ADD("bg2", "gfxdecode", 3, "gfx4", 0x00000, "gfx6", 0x40000) - MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15); - MCFG_RSHARK_ROM_TILEMAP_ADD("fg", "gfxdecode", 2, "gfx3", 0x00000, "gfx6", 0x20000) - MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15); - MCFG_RSHARK_ROM_TILEMAP_ADD("fg2", "gfxdecode", 1, "gfx2", 0x00000, "gfx6", 0x00000) - MCFG_DOOYONG_ROM_TILEMAP_TRANSPARENT_PEN(15); - - MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark) - - /* sound hardware */ - MCFG_FRAGMENT_ADD( sound_2151_4mhz ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( popbingo, dooyong_68k_state ) +static MACHINE_CONFIG_START( popbingo, popbingo_state ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* 10MHz measured */ + // basic machine hardware + MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) // 10MHz measured MCFG_CPU_PROGRAM_MAP(popbingo_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1) - MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) /* 4MHz measured */ + MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) // 4MHz measured MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map) - /* video hardware */ + // video hardware MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + 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_68k_state, screen_update_popbingo) + MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1) + MCFG_SCREEN_UPDATE_DRIVER(popbingo_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_DOOYONG_ROM_TILEMAP_ADD("bg", "gfxdecode", 1, "gfx2", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_PRIMELLA_CODE_BITS(11) MCFG_DOOYONG_ROM_TILEMAP_ADD("bg2", "gfxdecode", 2, "gfx3", 0x00000) MCFG_DOOYONG_ROM_TILEMAP_PRIMELLA_CODE_BITS(11) - MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, popbingo) + MCFG_VIDEO_START_OVERRIDE(popbingo_state, popbingo) - /* sound hardware */ - MCFG_FRAGMENT_ADD( sound_2151_4mhz ) + // sound hardware + MCFG_FRAGMENT_ADD(sound_2151_4mhz) MACHINE_CONFIG_END + /*************************************************************************** ROM definition(s) @@ -2109,9 +2088,9 @@ ROM_END /* The differences between the two lastday sets are only in the sound program and graphics. The main program is the same. */ -GAME( 1990, lastday, 0, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, lastdaya, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, ddaydoo, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "Chulgyeok D-Day (Korea)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, lastday, 0, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, lastdaya, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, ddaydoo, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "Chulgyeok D-Day (Korea)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, gulfstrm, 0, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, gulfstrma,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (set 2)", MACHINE_SUPPORTS_SAVE ) @@ -2119,10 +2098,10 @@ GAME( 1991, gulfstrmb,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "D GAME( 1991, gulfstrmm,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong (Media Shoji license)", "Gulf Storm (Media Shoji)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, gulfstrmk,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (Korea)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, pollux, 0, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, polluxa, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, polluxa2, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 3)", MACHINE_SUPPORTS_SAVE ) /* Original Dooyong Board distributed by TCH */ -GAME( 1991, polluxn, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong (NTC / Atlus license)", "Pollux (Japan, NTC license, distributed by Atlus)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, pollux, 0, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, polluxa, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, polluxa2, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 3)", MACHINE_SUPPORTS_SAVE ) // Original Dooyong Board distributed by TCH +GAME( 1991, polluxn, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong (NTC / Atlus license)", "Pollux (Japan, NTC license, distributed by Atlus)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, flytiger, 0, flytiger, flytiger, driver_device, 0, ROT270, "Dooyong", "Flying Tiger (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, flytigera,flytiger, flytiger, flytiger, driver_device, 0, ROT270, "Dooyong", "Flying Tiger (set 2)", MACHINE_SUPPORTS_SAVE ) @@ -2130,14 +2109,14 @@ GAME( 1992, flytigera,flytiger, flytiger, flytiger, driver_device, 0, ROT270, "D GAME( 1993, bluehawk, 0, bluehawk, bluehawk, driver_device, 0, ROT270, "Dooyong", "Blue Hawk", MACHINE_SUPPORTS_SAVE ) GAME( 1993, bluehawkn,bluehawk, bluehawk, bluehawk, driver_device, 0, ROT270, "Dooyong (NTC license)", "Blue Hawk (NTC)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, sadari, 0, primella, sadari, driver_device, 0, ROT0, "Dooyong (NTC license)", "Sadari", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, sadari, 0, primella, sadari, driver_device, 0, ROT0, "Dooyong (NTC license)", "Sadari", MACHINE_SUPPORTS_SAVE ) GAME( 1994, gundl94, 0, primella, primella, driver_device, 0, ROT0, "Dooyong", "Gun Dealer '94", MACHINE_SUPPORTS_SAVE ) GAME( 1994, primella, gundl94, primella, primella, driver_device, 0, ROT0, "Dooyong (NTC license)", "Primella", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, superx, 0, superx, superx, driver_device, 0, ROT270, "Dooyong (NTC license)", "Super-X (NTC)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, superxm, superx, superx, superx, driver_device, 0, ROT270, "Dooyong (Mitchell license)", "Super-X (Mitchell)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, superx, 0, superx, superx, driver_device, 0, ROT270, "Dooyong (NTC license)", "Super-X (NTC)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, superxm, superx, superx, superx, driver_device, 0, ROT270, "Dooyong (Mitchell license)", "Super-X (Mitchell)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, rshark, 0, rshark, rshark, driver_device, 0, ROT270, "Dooyong", "R-Shark", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, rshark, 0, rshark, rshark, driver_device, 0, ROT270, "Dooyong", "R-Shark", MACHINE_SUPPORTS_SAVE ) GAME( 1996, popbingo, 0, popbingo, popbingo, driver_device, 0, ROT0, "Dooyong", "Pop Bingo", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/dooyong.h b/src/mame/includes/dooyong.h index b862287a96d..b272ae74afe 100644 --- a/src/mame/includes/dooyong.h +++ b/src/mame/includes/dooyong.h @@ -23,27 +23,58 @@ rshark_rom_tilemap_device::static_set_colorrom_tag(*device, "^" rom2); \ rshark_rom_tilemap_device::static_set_colorrom_offset(*device, (offset2)); +#define MCFG_DOOYONG_RAM_TILEMAP_ADD(tag, gfx, num) \ + MCFG_DEVICE_ADD(tag, DOOYONG_RAM_TILEMAP, 0) \ + dooyong_rom_tilemap_device::static_set_gfxdecode_tag(*device, "^" gfx); \ + dooyong_rom_tilemap_device::static_set_gfxnum(*device, (num)); + extern device_type const DOOYONG_ROM_TILEMAP; extern device_type const RSHARK_ROM_TILEMAP; +extern device_type const DOOYONG_RAM_TILEMAP; -class dooyong_rom_tilemap_device : public device_t +class dooyong_tilemap_device_base : public device_t +{ +public: + static void static_set_gfxdecode_tag(device_t &device, char const *tag); + static void static_set_gfxnum(device_t &device, int gfxnum); + + void draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, UINT32 flags, UINT8 priority); + + void set_palette_bank(UINT16 bank); + +protected: + dooyong_tilemap_device_base( + machine_config const &mconfig, + device_type type, + char const *name, + char const *tag, + device_t *owner, + UINT32 clock, + char const *shortname, + char const *source); + + gfx_element const &gfx() const { return *m_gfxdecode->gfx(m_gfxnum); } + + required_device<gfxdecode_device> m_gfxdecode; + int m_gfxnum; + + tilemap_t *m_tilemap; + UINT16 m_palette_bank; +}; + +class dooyong_rom_tilemap_device : public dooyong_tilemap_device_base { public: dooyong_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock); - static void static_set_gfxdecode_tag(device_t &device, char const *tag); static void static_set_tilerom_tag(device_t &device, char const *tag); - static void static_set_gfxnum(device_t &device, int gfxnum); static void static_set_tilerom_offset(device_t &device, int offset); static void static_set_transparent_pen(device_t &device, unsigned pen); static void static_set_primella_code_bits(device_t &device, unsigned bits); - void draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, UINT32 flags, UINT8 priority); - DECLARE_WRITE8_MEMBER(ctrl_w); - void set_palette_bank(UINT16 bank); protected: dooyong_rom_tilemap_device( @@ -60,31 +91,22 @@ protected: virtual TILE_GET_INFO_MEMBER(tile_info); - gfx_element const &gfx() const - { return *m_gfxdecode->gfx(m_gfxnum); } - tilemap_memory_index adjust_tile_index(tilemap_memory_index tile_index) const { return tile_index + ((unsigned(m_registers[1]) * 256U / gfx().width()) * m_rows); } int m_rows; private: - required_device<gfxdecode_device> m_gfxdecode; required_region_ptr<UINT16> m_tilerom; - int m_gfxnum; int m_tilerom_offset; unsigned m_transparent_pen; unsigned m_primella_code_mask; unsigned m_primella_color_mask; unsigned m_primella_color_shift; - tilemap_t *m_tilemap; - UINT8 m_registers[0x10]; - UINT16 m_palette_bank; }; - class rshark_rom_tilemap_device : public dooyong_rom_tilemap_device { public: @@ -103,6 +125,24 @@ private: int m_colorrom_offset; }; +class dooyong_ram_tilemap_device : public dooyong_tilemap_device_base +{ +public: + dooyong_ram_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock); + + DECLARE_READ16_MEMBER(tileram_r) { return m_tileram[offset & ((64U * 32U) - 1)]; } + DECLARE_WRITE16_MEMBER(tileram_w); + void set_scrolly(int value) { m_tilemap->set_scrolly(value); } + +protected: + virtual void device_start() override; + +private: + TILE_GET_INFO_MEMBER(tile_info); + + std::unique_ptr<UINT16[]> m_tileram; +}; + class dooyong_state : public driver_device { @@ -117,9 +157,8 @@ public: , m_bg2(*this, "bg2") , m_fg(*this, "fg") , m_fg2(*this, "fg2") - { } - - tilemap_t *m_tx_tilemap = nullptr; + { + } required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; @@ -136,9 +175,10 @@ 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_tx(*this, "tx") , m_spriteram(*this, "spriteram") - { } + { + } enum { @@ -150,7 +190,10 @@ public: DECLARE_WRITE8_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(bankswitch_w); - DECLARE_WRITE8_MEMBER(txvideoram_w); + DECLARE_READ8_MEMBER(lastday_tx_r); + DECLARE_WRITE8_MEMBER(lastday_tx_w); + DECLARE_READ8_MEMBER(bluehawk_tx_r); + DECLARE_WRITE8_MEMBER(bluehawk_tx_w); DECLARE_WRITE8_MEMBER(primella_ctrl_w); DECLARE_READ8_MEMBER(paletteram_flytiger_r); DECLARE_WRITE8_MEMBER(paletteram_flytiger_w); @@ -165,14 +208,13 @@ public: DECLARE_VIDEO_START(flytiger); DECLARE_VIDEO_START(primella); - required_shared_ptr<UINT8> m_txvideoram; std::unique_ptr<UINT8[]> m_paletteram_flytiger; UINT8 m_sprites_disabled = 0; UINT8 m_flytiger_pri = 0; UINT8 m_tx_pri = 0; UINT8 m_palette_bank = 0; - int m_tx_tilemap_mode = 0; + required_device<dooyong_ram_tilemap_device> m_tx; optional_device<buffered_spriteram8_device> m_spriteram; }; @@ -181,7 +223,8 @@ 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); @@ -205,25 +248,49 @@ 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_bg_bitmap() - , m_bg2_bitmap() - , m_screen(*this, "screen") , m_spriteram(*this, "spriteram") - { } + { + } DECLARE_WRITE16_MEMBER(ctrl_w); TIMER_DEVICE_CALLBACK_MEMBER(scanline); + +protected: void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + UINT16 m_bg2_priority = 0; + required_device<buffered_spriteram16_device> m_spriteram; +}; + +class rshark_state : public dooyong_68k_state +{ +public: + rshark_state(const machine_config &mconfig, device_type type, const char *tag) + : dooyong_68k_state(mconfig, type, tag) + { + } + 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); +}; - UINT16 m_bg2_priority = 0; +class popbingo_state : public dooyong_68k_state +{ +public: + popbingo_state(const machine_config &mconfig, device_type type, const char *tag) + : dooyong_68k_state(mconfig, type, tag) + , m_bg_bitmap() + , m_bg2_bitmap() + , m_screen(*this, "screen") + { + } + UINT32 screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_VIDEO_START(popbingo); + +protected: bitmap_ind16 m_bg_bitmap; bitmap_ind16 m_bg2_bitmap; required_device<screen_device> m_screen; - required_device<buffered_spriteram16_device> m_spriteram; }; diff --git a/src/mame/video/dooyong.cpp b/src/mame/video/dooyong.cpp index dc70f88e502..fe8603bb825 100644 --- a/src/mame/video/dooyong.cpp +++ b/src/mame/video/dooyong.cpp @@ -16,6 +16,49 @@ device_type const DOOYONG_ROM_TILEMAP = &device_creator<dooyong_rom_tilemap_device>; device_type const RSHARK_ROM_TILEMAP = &device_creator<rshark_rom_tilemap_device>; +device_type const DOOYONG_RAM_TILEMAP = &device_creator<dooyong_ram_tilemap_device>; + + +dooyong_tilemap_device_base::dooyong_tilemap_device_base( + machine_config const &mconfig, + device_type type, + char const *name, + char const *tag, + device_t *owner, + UINT32 clock, + char const *shortname, + char const *source) + : device_t(mconfig, type, name, tag, owner, clock, shortname, source) + , m_gfxdecode(*this, finder_base::DUMMY_TAG) + , m_gfxnum(0) + , m_tilemap(nullptr) + , m_palette_bank(0) +{ +} + +void dooyong_tilemap_device_base::static_set_gfxdecode_tag(device_t &device, char const *tag) +{ + downcast<dooyong_tilemap_device_base &>(device).m_gfxdecode.set_tag(tag); +} + +void dooyong_tilemap_device_base::static_set_gfxnum(device_t &device, int gfxnum) +{ + downcast<dooyong_tilemap_device_base &>(device).m_gfxnum = gfxnum; +} + +void dooyong_tilemap_device_base::draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, UINT32 flags, UINT8 priority) +{ + m_tilemap->draw(screen, dest, cliprect, flags, priority); +} + +void dooyong_tilemap_device_base::set_palette_bank(UINT16 bank) +{ + if (bank != m_palette_bank) + { + m_palette_bank = bank; + m_tilemap->mark_all_dirty(); + } +} dooyong_rom_tilemap_device::dooyong_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock) @@ -32,25 +75,16 @@ dooyong_rom_tilemap_device::dooyong_rom_tilemap_device( UINT32 clock, char const *shortname, char const *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source) + : dooyong_tilemap_device_base(mconfig, type, name, tag, owner, clock, shortname, source) , m_rows(8) - , m_gfxdecode(*this, finder_base::DUMMY_TAG) , m_tilerom(*this, finder_base::DUMMY_TAG) - , m_gfxnum(0) , m_tilerom_offset(0) , m_transparent_pen(~0U) , m_primella_code_mask(0x03ff) , m_primella_color_mask(0x3c00) , m_primella_color_shift(10) - , m_tilemap(nullptr) , m_registers{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - , m_palette_bank(0) -{ -} - -void dooyong_rom_tilemap_device::static_set_gfxdecode_tag(device_t &device, char const *tag) { - downcast<dooyong_rom_tilemap_device &>(device).m_gfxdecode.set_tag(tag); } void dooyong_rom_tilemap_device::static_set_tilerom_tag(device_t &device, char const *tag) @@ -58,11 +92,6 @@ void dooyong_rom_tilemap_device::static_set_tilerom_tag(device_t &device, char c downcast<dooyong_rom_tilemap_device &>(device).m_tilerom.set_tag(tag); } -void dooyong_rom_tilemap_device::static_set_gfxnum(device_t &device, int gfxnum) -{ - downcast<dooyong_rom_tilemap_device &>(device).m_gfxnum = gfxnum; -} - void dooyong_rom_tilemap_device::static_set_tilerom_offset(device_t &device, int offset) { downcast<dooyong_rom_tilemap_device &>(device).m_tilerom_offset = offset; @@ -81,13 +110,9 @@ void dooyong_rom_tilemap_device::static_set_primella_code_bits(device_t &device, tilemap_device.m_primella_color_shift = bits; } -void dooyong_rom_tilemap_device::draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, UINT32 flags, UINT8 priority) -{ - m_tilemap->draw(screen, dest, cliprect, flags, priority); -} - WRITE8_MEMBER(dooyong_rom_tilemap_device::ctrl_w) { + offset &= 0x07U; UINT8 const old = m_registers[offset]; if (old != data) { @@ -118,15 +143,6 @@ WRITE8_MEMBER(dooyong_rom_tilemap_device::ctrl_w) } } -void dooyong_rom_tilemap_device::set_palette_bank(UINT16 bank) -{ - if (bank != m_palette_bank) - { - m_palette_bank = bank; - m_tilemap->mark_all_dirty(); - } -} - void dooyong_rom_tilemap_device::device_start() { if (!m_gfxdecode->started()) @@ -146,7 +162,7 @@ void dooyong_rom_tilemap_device::device_start() if (0 > m_tilerom_offset) m_tilerom_offset = m_tilerom.length() + m_tilerom_offset; - std::fill(std::begin(m_registers), std::end(m_registers), 0); + std::fill(std::begin(m_registers), std::end(m_registers), 0U); m_palette_bank = 0U; save_item(NAME(m_registers)); @@ -182,7 +198,7 @@ TILE_GET_INFO_MEMBER(dooyong_rom_tilemap_device::tile_info) // X = x flip // Y = y flip // ? = unused? - color = (attr & m_primella_color_mask) >> m_primella_color_shift; + color = m_palette_bank | ((attr & m_primella_color_mask) >> m_primella_color_shift); flags = TILE_FLIPYX((attr >> 14) & 0x03U); code = attr & m_primella_code_mask; } @@ -226,18 +242,83 @@ TILE_GET_INFO_MEMBER(rshark_rom_tilemap_device::tile_info) } -WRITE8_MEMBER(dooyong_z80_state::txvideoram_w) +dooyong_ram_tilemap_device::dooyong_ram_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock) + : dooyong_tilemap_device_base(mconfig, DOOYONG_RAM_TILEMAP, "Dooyong RAM Tilemap", tag, owner, clock, "dooyong_ram_tilemap", __FILE__) + , m_tileram() +{ +} + +WRITE16_MEMBER(dooyong_ram_tilemap_device::tileram_w) { - if (m_txvideoram[offset] != data) + offset &= (64U * 32U) - 1U; + UINT16 value(m_tileram[offset]); + COMBINE_DATA(&value); + if (value != m_tileram[offset]) { - m_txvideoram[offset] = data; - if (m_tx_tilemap_mode == 0) - m_tx_tilemap->mark_tile_dirty(offset & 0x07ff); - else - m_tx_tilemap->mark_tile_dirty(offset >> 1); + m_tileram[offset] = value; + m_tilemap->mark_tile_dirty(offset); } } +void dooyong_ram_tilemap_device::device_start() +{ + if (!m_gfxdecode->started()) + throw device_missing_dependencies(); + + m_tilemap = &machine().tilemap().create( + *m_gfxdecode, + tilemap_get_info_delegate(FUNC(dooyong_ram_tilemap_device::tile_info), this), + TILEMAP_SCAN_COLS, + 8, + 8, + 64, + 32); + m_tilemap->set_transparent_pen(15); + + m_tileram.reset(new UINT16[64 * 32]); + std::fill(m_tileram.get(), m_tileram.get() + (64 * 32), 0U); + m_palette_bank = 0U; + + save_pointer(NAME(m_tileram.get()), 64 * 32); + save_item(NAME(m_palette_bank)); +} + +TILE_GET_INFO_MEMBER(dooyong_ram_tilemap_device::tile_info) +{ + // Each tile takes one word of memory: + // MSB LSB + // CCCC cccc cccc cccc (bits 3-0 of color code, bits 11-0 of gfx code) + // c = gfx code + // C = color code + unsigned const attr(m_tileram[tile_index]); + tileinfo.set(m_gfxnum, attr & 0x0fffU, m_palette_bank | ((attr >> 12) & 0x0fU), 0); +} + + +READ8_MEMBER(dooyong_z80_state::lastday_tx_r) +{ + bool const lane(BIT(offset, 11)); + return m_tx->tileram_r(space, offset & 0x07ffU) >> (lane ? 8 : 0); +} + +WRITE8_MEMBER(dooyong_z80_state::lastday_tx_w) +{ + bool const lane(BIT(offset, 11)); + m_tx->tileram_w(space, offset & 0x07ffU, UINT16(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU); +} + +READ8_MEMBER(dooyong_z80_state::bluehawk_tx_r) +{ + bool const lane(BIT(offset, 0)); + return m_tx->tileram_r(space, offset >> 1) >> (lane ? 8 : 0); +} + +WRITE8_MEMBER(dooyong_z80_state::bluehawk_tx_w) +{ + bool const lane(BIT(offset, 0)); + m_tx->tileram_w(space, offset >> 1, UINT16(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU); +} + /* Control registers seem to be different on every game */ @@ -274,7 +355,7 @@ WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w) { m_bg->set_palette_bank(m_palette_bank << 6); m_fg->set_palette_bank(m_palette_bank << 6); - m_tx_tilemap->mark_all_dirty(); + m_tx->set_palette_bank(m_palette_bank << 6); } /* bit 2 is continuously toggled (unknown) */ @@ -332,7 +413,7 @@ WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w) { m_bg->set_palette_bank(m_palette_bank << 6); m_fg->set_palette_bank(m_palette_bank << 6); - m_tx_tilemap->mark_all_dirty(); + m_tx->set_palette_bank(m_palette_bank << 6); } /* bit 4 changes tilemaps priority */ @@ -340,32 +421,6 @@ WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w) } -TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info) -{ - /* Each tile takes two bytes of memory: - MSB LSB - [offs + 0x00] cccc cccc (bits 7-0 of gfx code) - [offs + 0x01] CCCC cccc (bits 3-0 of color code, bits 11-8 of gfx code) - c = gfx code - C = color code */ - unsigned offs, attr; - if (m_tx_tilemap_mode == 0) - { /* lastday/gulfstrm/pollux/flytiger */ - offs = tile_index; - attr = m_txvideoram[offs | 0x0800]; - } - else - { /* bluehawk/primella */ - offs = tile_index * 2; - attr = m_txvideoram[offs + 1]; - } - int const code = m_txvideoram[offs] | ((attr & 0x0f) << 8); - int const color = (attr & 0xf0) >> 4; - - tileinfo.set(0, code, color | (m_palette_bank << 6), 0); -} - - void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions) { /* Sprites take 32 bytes each in memory: @@ -458,14 +513,11 @@ UINT32 dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bi screen.priority().fill(0, cliprect); /* Text layer is offset on this machine */ - if (!flip_screen()) - m_tx_tilemap->set_scrolly(0, 8); - else - m_tx_tilemap->set_scrolly(0, -8); + m_tx->set_scrolly(flip_screen() ? -8 : 8); m_bg->draw(screen, bitmap, cliprect, 0, 1); m_fg->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx->draw(screen, bitmap, cliprect, 0, 4); if (!m_sprites_disabled) draw_sprites(screen, bitmap, cliprect); @@ -479,14 +531,11 @@ UINT32 dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, b screen.priority().fill(0, cliprect); /* Text layer is offset on this machine */ - if (!flip_screen()) - m_tx_tilemap->set_scrolly(0, 8); - else - m_tx_tilemap->set_scrolly(0, -8); + m_tx->set_scrolly(flip_screen() ? -8 : 8); m_bg->draw(screen, bitmap, cliprect, 0, 1); m_fg->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx->draw(screen, bitmap, cliprect, 0, 4); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT); @@ -500,7 +549,7 @@ UINT32 dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bit m_bg->draw(screen, bitmap, cliprect, 0, 1); m_fg->draw(screen, bitmap, cliprect, 0, 2); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx->draw(screen, bitmap, cliprect, 0, 4); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT); @@ -522,7 +571,7 @@ UINT32 dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_i m_bg->draw(screen, bitmap, cliprect, 0, 1); m_fg->draw(screen, bitmap, cliprect, 0, 2); } - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx->draw(screen, bitmap, cliprect, 0, 4); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_FLYTIGER); @@ -538,7 +587,7 @@ UINT32 dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_i m_bg->draw(screen, bitmap, cliprect, 0, 1); m_fg->draw(screen, bitmap, cliprect, 0, 2); m_fg2->draw(screen, bitmap, cliprect, 0, 4); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + m_tx->draw(screen, bitmap, cliprect, 0, 4); draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_BLUEHAWK); @@ -550,9 +599,9 @@ UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_i bitmap.fill(m_palette->black_pen(), cliprect); m_bg->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->draw(screen, bitmap, cliprect, 0, 0); m_fg->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->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -561,17 +610,6 @@ UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_i VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); - /* Register for save/restore */ save_item(NAME(m_sprites_disabled)); save_item(NAME(m_interrupt_line_1)); @@ -580,17 +618,6 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday) VIDEO_START_MEMBER(dooyong_z80_ym2203_state, gulfstrm) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 0; - - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); - m_palette_bank = 0; /* Register for save/restore */ @@ -601,20 +628,9 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, gulfstrm) VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 0; - m_paletteram_flytiger = make_unique_clear<UINT8[]>(0x1000); save_pointer(NAME(m_paletteram_flytiger.get()), 0x1000); - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); - m_palette_bank = 0; /* Register for save/restore */ @@ -625,34 +641,13 @@ VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux) VIDEO_START_MEMBER(dooyong_z80_state, bluehawk) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 1; - - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); } VIDEO_START_MEMBER(dooyong_z80_state, flytiger) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 0; - m_paletteram_flytiger = make_unique_clear<UINT8[]>(0x1000); save_pointer(NAME(m_paletteram_flytiger.get()), 0x1000); - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); - m_palette_bank = 0; /* Register for save/restore */ @@ -662,17 +657,6 @@ VIDEO_START_MEMBER(dooyong_z80_state, flytiger) VIDEO_START_MEMBER(dooyong_z80_state, primella) { - /* Configure tilemap callbacks */ - m_tx_tilemap_mode = 1; - - /* Create tilemaps */ - 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_tx_tilemap->set_transparent_pen(15); - /* Register for save/restore */ save_item(NAME(m_tx_pri)); } @@ -757,7 +741,8 @@ void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap } } -UINT32 dooyong_68k_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) + +UINT32 rshark_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); @@ -772,7 +757,14 @@ UINT32 dooyong_68k_state::screen_update_rshark(screen_device &screen, bitmap_ind return 0; } -UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +VIDEO_START_MEMBER(rshark_state, rshark) +{ + /* Register for save/restore */ + save_item(NAME(m_bg2_priority)); +} + + +UINT32 popbingo_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); @@ -797,15 +789,7 @@ UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_i return 0; } - - -VIDEO_START_MEMBER(dooyong_68k_state, rshark) -{ - /* Register for save/restore */ - save_item(NAME(m_bg2_priority)); -} - -VIDEO_START_MEMBER(dooyong_68k_state, popbingo) +VIDEO_START_MEMBER(popbingo_state, popbingo) { m_screen->register_screen_bitmap(m_bg_bitmap); m_screen->register_screen_bitmap(m_bg2_bitmap); |