diff --git a/src/mame/drivers/nmk16.c b/src/mame/drivers/nmk16.c index 3c3f29dc3ed..1f07cbbfd44 100644 --- a/src/mame/drivers/nmk16.c +++ b/src/mame/drivers/nmk16.c @@ -329,7 +329,7 @@ static ADDRESS_MAP_START( vandyke_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08001e, 0x08001f) AM_WRITE(NMK004_w) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c007) AM_WRITE(vandyke_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x094000, 0x097fff) AM_RAM /* what is this? */ AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) @@ -346,7 +346,7 @@ static ADDRESS_MAP_START( manybloc_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08001c, 0x08001d) AM_WRITENOP /* See notes at the top of the driver */ AM_RANGE(0x08001e, 0x08001f) AM_READWRITE(soundlatch2_word_r,soundlatch_word_w) AM_RANGE(0x088000, 0x0883ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09cfff) AM_RAM_WRITE(manybloc_scroll_w) AM_BASE(&gunnail_scrollram) AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) @@ -366,7 +366,7 @@ static ADDRESS_MAP_START( tharrier_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x080202, 0x080203) AM_READ_PORT("IN2") AM_RANGE(0x088000, 0x0883ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) // AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM /* Unused txvideoram area? */ AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) @@ -402,7 +402,7 @@ static ADDRESS_MAP_START( mustang_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -419,7 +419,7 @@ static ADDRESS_MAP_START( mustangb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -437,7 +437,7 @@ static ADDRESS_MAP_START( twinactn_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -457,7 +457,7 @@ static ADDRESS_MAP_START( acrobatm_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc001e, 0xc001f) AM_WRITE(NMK004_w) AM_RANGE(0xc4000, 0xc45ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE(&paletteram16) AM_RANGE(0xc8000, 0xc8007) AM_RAM_WRITE(nmk_scroll_w) - AM_RANGE(0xcc000, 0xcffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0xcc000, 0xcffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0xd4000, 0xd47ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) ADDRESS_MAP_END @@ -474,7 +474,7 @@ static ADDRESS_MAP_START( bioship_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(bioshipbg_scroll_w) AM_RANGE(0x08c010, 0x08c017) AM_RAM_WRITE(bioship_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -653,7 +653,7 @@ static ADDRESS_MAP_START( hachamf_map, ADDRESS_SPACE_PROGRAM, 16 ) /* Video Region */ AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) /* Main RAM, inc sprites, shared with MCU */ AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(hachamf_mainram_w) AM_BASE(&nmk16_mainram) // ram is shared with MCU @@ -887,7 +887,7 @@ static ADDRESS_MAP_START( tdragon_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(NMK004_w) AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w) AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) ADDRESS_MAP_END @@ -904,7 +904,7 @@ static ADDRESS_MAP_START( tdragonb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(seibu_main_mustb_w) AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w) AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) ADDRESS_MAP_END @@ -920,7 +920,7 @@ static ADDRESS_MAP_START( ssmissin_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(ssmissin_sound_w) AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w) AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x0d0000, 0x0d07ff) AM_MIRROR(0x1800) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) //mirror for airattck ADDRESS_MAP_END @@ -945,7 +945,7 @@ static ADDRESS_MAP_START( strahl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x84000, 0x84007) AM_RAM_WRITE(nmk_scroll_w) AM_RANGE(0x88000, 0x88007) AM_RAM_WRITE(nmk_scroll_2_w) AM_RANGE(0x8c000, 0x8c7ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x90000, 0x93fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x90000, 0x93fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x94000, 0x97fff) AM_RAM_WRITE(nmk_fgvideoram_w) AM_BASE(&nmk_fgvideoram) AM_RANGE(0x9c000, 0x9c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0xf0000, 0xfffff) AM_RAM AM_BASE(&nmk16_mainram) @@ -964,7 +964,7 @@ static ADDRESS_MAP_START( macross_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08001e, 0x08001f) AM_WRITE(NMK004_w) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(nmk_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -984,7 +984,7 @@ static ADDRESS_MAP_START( gunnail_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08c000, 0x08c1ff) AM_WRITEONLY AM_BASE(&gunnail_scrollram) AM_RANGE(0x08c200, 0x08c3ff) AM_WRITEONLY AM_BASE(&gunnail_scrollramy) AM_RANGE(0x08c400, 0x08c7ff) AM_WRITEONLY // unknown - AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x001000) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -1001,9 +1001,16 @@ static ADDRESS_MAP_START( macross2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x10001e, 0x10001f) AM_WRITE(macross2_sound_command_w) /* to Z80 */ AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x130000, 0x130007) AM_RAM_WRITE(nmk_scroll_w) - AM_RANGE(0x130008, 0x1307ff) AM_WRITENOP /* 0 only? */ - AM_RANGE(0x140000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + + AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_BASE(&gunnail_scrollram) + AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_BASE(&gunnail_scrollramy) + AM_RANGE(0x130400, 0x1307ff) AM_RAM + + AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) + AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_BASE(&nmk_bgvideoram1) + AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_BASE(&nmk_bgvideoram2) + AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_BASE(&nmk_bgvideoram3) + AM_RANGE(0x170000, 0x170fff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -1020,8 +1027,17 @@ static ADDRESS_MAP_START( raphero_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x10001e, 0x10001f) AM_WRITE(macross2_sound_command_w) /* to Z80 */ AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x130000, 0x1307ff) AM_RAM_WRITE(nmk_scroll_3_w) AM_BASE(&gunnail_scrollram) - AM_RANGE(0x140000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + + AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_BASE(&gunnail_scrollram) + AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_BASE(&gunnail_scrollramy) + AM_RANGE(0x130400, 0x1307ff) AM_RAM + + AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) + AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_BASE(&nmk_bgvideoram1) + AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_BASE(&nmk_bgvideoram2) + AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_BASE(&nmk_bgvideoram3) + + AM_RANGE(0x170000, 0x170fff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -1089,7 +1105,7 @@ static ADDRESS_MAP_START( bjtwin_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x094002, 0x094003) AM_WRITENOP /* IRQ enable? */ - AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -3716,7 +3732,7 @@ static MACHINE_DRIVER_START( bioship ) MDRV_CPU_ADD("maincpu", M68000, BIOSHIP_CRYSTAL1 ) /* 10.0 MHz (verified) */ MDRV_CPU_PROGRAM_MAP(bioship_map) MDRV_CPU_VBLANK_INT_HACK(nmk_interrupt,2) - MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_CPU_PERIODIC_INT(irq1_line_hold,100)/* 112 breaks the title screen */ MDRV_MACHINE_RESET(NMK004) @@ -4247,7 +4263,7 @@ static MACHINE_DRIVER_START( macross2 ) MDRV_VIDEO_START(macross2) MDRV_VIDEO_EOF(nmk) - MDRV_VIDEO_UPDATE(macross) + MDRV_VIDEO_UPDATE(gunnail) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -4290,9 +4306,9 @@ static MACHINE_DRIVER_START( tdragon2 ) MDRV_GFXDECODE(macross2) MDRV_PALETTE_LENGTH(1024) - MDRV_VIDEO_START(tdragon2) + MDRV_VIDEO_START(macross2) MDRV_VIDEO_EOF(nmk) - MDRV_VIDEO_UPDATE(macross) + MDRV_VIDEO_UPDATE(gunnail) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -4334,9 +4350,9 @@ static MACHINE_DRIVER_START( raphero ) MDRV_GFXDECODE(macross2) MDRV_PALETTE_LENGTH(1024) - MDRV_VIDEO_START(macross2) + MDRV_VIDEO_START(raphero) MDRV_VIDEO_EOF(nmk) - MDRV_VIDEO_UPDATE(macross) + MDRV_VIDEO_UPDATE(gunnail) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -4687,8 +4703,8 @@ static ADDRESS_MAP_START( afega, ADDRESS_SPACE_PROGRAM, 16 ) /**/AM_RANGE(0x08c000, 0x08c003) AM_RAM_WRITE(afega_scroll0_w) AM_BASE(&afega_scroll_0) // Scroll /**/AM_RANGE(0x08c004, 0x08c007) AM_RAM_WRITE(afega_scroll1_w) AM_BASE(&afega_scroll_1) // AM_RANGE(0x08c008, 0x08ffff) AM_WRITE(SMH_RAM) // -/**/AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(afega_vram_0_w) AM_BASE(&afega_vram_0) // Layer 0 // ? -/**/AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(afega_vram_1_w) AM_BASE(&afega_vram_1) // Layer 1 +/**/AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_BASE(&nmk_bgvideoram0) // Layer 0 // ? +/**/AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) // Layer 1 AM_RANGE(0x0c0000, 0x0cffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE(1) AM_BASE(&nmk16_mainram) AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE(1) @@ -4830,20 +4846,20 @@ static const gfx_layout layout_16x16x4_swapped = }; static GFXDECODE_START( grdnstrm ) - GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x8, 256*0, 1 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x8, 256*0, 1 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites GFXDECODE_END static GFXDECODE_START( stagger1 ) - GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 256*0, 16 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 256*0, 16 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites GFXDECODE_END static GFXDECODE_START( redhawkb ) - GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4_swapped, 256*0, 16 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4_swapped, 256*0, 16 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4_swapped, 256*1, 16 ) // [0] Sprites GFXDECODE_END @@ -4937,9 +4953,6 @@ static MACHINE_DRIVER_START( grdnstrmk ) /* basic machine hardware */ MDRV_IMPORT_FROM(stagger1) - - MDRV_CPU_MODIFY("maincpu") - MDRV_CPU_VBLANK_INT_HACK(nmk_interrupt,2) /* video hardware */ MDRV_GFXDECODE(grdnstrm) diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h index 6ed44af985b..946de7910a8 100644 --- a/src/mame/includes/nmk16.h +++ b/src/mame/includes/nmk16.h @@ -1,12 +1,21 @@ /*----------- defined in video/nmk16.c -----------*/ -extern UINT16 *nmk_bgvideoram,*nmk_fgvideoram,*nmk_txvideoram; +extern UINT16 *nmk_bgvideoram0; +extern UINT16 *nmk_bgvideoram1; +extern UINT16 *nmk_bgvideoram2; +extern UINT16 *nmk_bgvideoram3; + +extern UINT16 *nmk_fgvideoram,*nmk_txvideoram; extern UINT16 *gunnail_scrollram, *gunnail_scrollramy; -extern UINT16 *afega_vram_0, *afega_scroll_0; -extern UINT16 *afega_vram_1, *afega_scroll_1; +extern UINT16 *nmk_bgvideoram0, *afega_scroll_0; +extern UINT16 *nmk_txvideoram, *afega_scroll_1; -WRITE16_HANDLER( nmk_bgvideoram_w ); +WRITE16_HANDLER( nmk_bgvideoram0_w ); +WRITE16_HANDLER( nmk_bgvideoram1_w ); +WRITE16_HANDLER( nmk_bgvideoram2_w ); +WRITE16_HANDLER( nmk_bgvideoram3_w ); + WRITE16_HANDLER( nmk_fgvideoram_w ); WRITE16_HANDLER( nmk_txvideoram_w ); WRITE16_HANDLER( nmk_scroll_w ); @@ -25,7 +34,7 @@ VIDEO_START( macross ); VIDEO_UPDATE( manybloc ); VIDEO_START( gunnail ); VIDEO_START( macross2 ); -VIDEO_START( tdragon2 ); +VIDEO_START( raphero ); VIDEO_START( bjtwin ); VIDEO_START( bioship ); VIDEO_START( strahl ); @@ -40,9 +49,6 @@ VIDEO_UPDATE( tdragon ); VIDEO_EOF( nmk ); VIDEO_EOF( strahl ); -WRITE16_HANDLER( afega_vram_0_w ); -WRITE16_HANDLER( afega_vram_1_w ); - VIDEO_START( afega ); VIDEO_START( grdnstrm ); VIDEO_START( firehawk ); diff --git a/src/mame/video/nmk16.c b/src/mame/video/nmk16.c index a120102bdb2..48ef14c20a3 100644 --- a/src/mame/video/nmk16.c +++ b/src/mame/video/nmk16.c @@ -10,8 +10,21 @@ #include "driver.h" #include "includes/nmk16.h" -UINT16 *nmk_bgvideoram,*nmk_fgvideoram,*nmk_txvideoram; +// the larger tilemaps on macross2, rapid hero and thunder dragon 2 appear to act like 4 'banks' +// of the smaller tilemaps, rather than being able to scroll into each other (not verified on real hw, +// but see raphero intro / 1st level cases) +UINT16 *nmk_bgvideoram0; +UINT16 *nmk_bgvideoram1; +UINT16 *nmk_bgvideoram2; +UINT16 *nmk_bgvideoram3; + +static int nmk16_simple_scroll = 1; + +UINT16 *nmk_fgvideoram,*nmk_txvideoram; UINT16 *gunnail_scrollram, *gunnail_scrollramy; +UINT16 *afega_scroll_0; +UINT16 *afega_scroll_1; + static int redraw_bitmap; @@ -21,8 +34,16 @@ static int videoshift; static int bioship_background_bank; static UINT8 bioship_scroll[4]; -static tilemap *bg_tilemap,*fg_tilemap,*tx_tilemap; -static bitmap_t *background_bitmap; +static tilemap *bg_tilemap0; +static tilemap *bg_tilemap1; +static tilemap *bg_tilemap2; +static tilemap *bg_tilemap3; + +static tilemap *tx_tilemap; + +static tilemap *fg_tilemap; // strahl +static bitmap_t *background_bitmap; // bioship + extern UINT16* nmk16_mainram; /*************************************************************************** @@ -31,33 +52,26 @@ extern UINT16* nmk16_mainram; ***************************************************************************/ -//not 100% right yet (check attract mode in raphero) -static TILEMAP_MAPPER( bg_scan ) +#define TILES_PER_PAGE_X (0x10) +#define TILES_PER_PAGE_Y (0x10) +#define PAGES_PER_TMAP_X (0x10) +#define PAGES_PER_TMAP_Y (0x02) + +static TILEMAP_MAPPER( afega_tilemap_scan_pages ) { - /* logical (col,row) -> memory offset */ + return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X + + (row % TILES_PER_PAGE_Y) + - col = (col & 0xff) | ((col & 0x300)<<1); - - return (row & 0x0f) + ((col & 0x6ff) << 4) + ((row & 0x70) << 8); + (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + + (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; } -static TILEMAP_MAPPER( bg_scan_td2 ) -{ - /* logical (col,row) -> memory offset */ - return (row & 0x0f) + ((col & 0x3ff) << 4) + ((row & 0x70) << 10); -} +static TILE_GET_INFO( macross_get_bg0_tile_info ) { int code = nmk_bgvideoram0[tile_index]; SET_TILE_INFO(1,(code & 0xfff) + (bgbank << 12),code >> 12,0);} +static TILE_GET_INFO( macross_get_bg1_tile_info ) { int code = nmk_bgvideoram1[tile_index]; SET_TILE_INFO(1,(code & 0xfff) + (bgbank << 12),code >> 12,0);} +static TILE_GET_INFO( macross_get_bg2_tile_info ) { int code = nmk_bgvideoram2[tile_index]; SET_TILE_INFO(1,(code & 0xfff) + (bgbank << 12),code >> 12,0);} +static TILE_GET_INFO( macross_get_bg3_tile_info ) { int code = nmk_bgvideoram3[tile_index]; SET_TILE_INFO(1,(code & 0xfff) + (bgbank << 12),code >> 12,0);} -static TILE_GET_INFO( macross_get_bg_tile_info ) -{ - int code = nmk_bgvideoram[tile_index]; - SET_TILE_INFO( - 1, - (code & 0xfff) + (bgbank << 12), - code >> 12, - 0); -} - static TILE_GET_INFO( strahl_get_fg_tile_info ) { int code = nmk_fgvideoram[tile_index]; @@ -80,7 +94,7 @@ static TILE_GET_INFO( macross_get_tx_tile_info ) static TILE_GET_INFO( bjtwin_get_bg_tile_info ) { - int code = nmk_bgvideoram[tile_index]; + int code = nmk_bgvideoram0[tile_index]; int bank = (code & 0x800) ? 1 : 0; SET_TILE_INFO( bank, @@ -89,6 +103,15 @@ static TILE_GET_INFO( bjtwin_get_bg_tile_info ) 0); } +static TILE_GET_INFO( get_tile_info_0_8bit ) +{ + UINT16 code = nmk_bgvideoram0[tile_index]; + SET_TILE_INFO( + 1, + code, + 0, + 0); +} /*************************************************************************** @@ -99,13 +122,13 @@ static TILE_GET_INFO( bjtwin_get_bg_tile_info ) VIDEO_START( bioship ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan,16,16,256,32); + bg_tilemap0 = tilemap_create(machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,32,32); spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); background_bitmap = auto_bitmap_alloc(machine,8192,512,video_screen_get_format(machine->primary_screen)); - tilemap_set_transparent_pen(bg_tilemap,15); + tilemap_set_transparent_pen(bg_tilemap0,15); tilemap_set_transparent_pen(tx_tilemap,15); bioship_background_bank=0; redraw_bitmap = 1; @@ -115,8 +138,8 @@ VIDEO_START( bioship ) VIDEO_START( strahl ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan,16,16,256,32); - fg_tilemap = tilemap_create(machine, strahl_get_fg_tile_info, bg_scan,16,16,256,32); + bg_tilemap0 = tilemap_create(machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + fg_tilemap = tilemap_create(machine, strahl_get_fg_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,32,32); spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); @@ -130,7 +153,7 @@ VIDEO_START( strahl ) VIDEO_START( macross ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan,16,16,256,32); + bg_tilemap0 = tilemap_create(machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,32,32); spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); @@ -143,50 +166,51 @@ VIDEO_START( macross ) VIDEO_START( gunnail ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan,16,16,256,32); + bg_tilemap0 = tilemap_create(machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,64,32); spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); tilemap_set_transparent_pen(tx_tilemap,15); - tilemap_set_scroll_rows(bg_tilemap,512); + tilemap_set_scroll_rows(bg_tilemap0,512); videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ background_bitmap = NULL; + + nmk16_simple_scroll = 0; } VIDEO_START( macross2 ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan,16,16,1024,128); + bg_tilemap0 = tilemap_create(machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + bg_tilemap1 = tilemap_create(machine, macross_get_bg1_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + bg_tilemap2 = tilemap_create(machine, macross_get_bg2_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + bg_tilemap3 = tilemap_create(machine, macross_get_bg3_tile_info, afega_tilemap_scan_pages,16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,64,32); spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); tilemap_set_transparent_pen(tx_tilemap,15); - + videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ background_bitmap = NULL; + + nmk16_simple_scroll = 1; } -VIDEO_START( tdragon2 ) +VIDEO_START( raphero ) { - bg_tilemap = tilemap_create(machine, macross_get_bg_tile_info,bg_scan_td2,16,16,1024,32); - tx_tilemap = tilemap_create(machine, macross_get_tx_tile_info,tilemap_scan_cols,8,8,64,32); - spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); - spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); - - tilemap_set_transparent_pen(tx_tilemap,15); - - videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ - /* from the other side of the tilemap (!) */ - background_bitmap = NULL; + VIDEO_START_CALL( macross2 ); + nmk16_simple_scroll = 0; } VIDEO_START( bjtwin ) { - bg_tilemap = tilemap_create(machine, bjtwin_get_bg_tile_info,tilemap_scan_cols,8,8,64,32); + bg_tilemap0 = tilemap_create(machine, bjtwin_get_bg_tile_info,tilemap_scan_cols,8,8,64,32); + spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); @@ -203,11 +227,11 @@ VIDEO_START( bjtwin ) ***************************************************************************/ -WRITE16_HANDLER( nmk_bgvideoram_w ) -{ - COMBINE_DATA(&nmk_bgvideoram[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset); -} +WRITE16_HANDLER( nmk_bgvideoram0_w ) { COMBINE_DATA(&nmk_bgvideoram0[offset]); tilemap_mark_tile_dirty(bg_tilemap0,offset); } +WRITE16_HANDLER( nmk_bgvideoram1_w ) { COMBINE_DATA(&nmk_bgvideoram1[offset]); tilemap_mark_tile_dirty(bg_tilemap1,offset); } +WRITE16_HANDLER( nmk_bgvideoram2_w ) { COMBINE_DATA(&nmk_bgvideoram2[offset]); tilemap_mark_tile_dirty(bg_tilemap2,offset); } +WRITE16_HANDLER( nmk_bgvideoram3_w ) { COMBINE_DATA(&nmk_bgvideoram3[offset]); tilemap_mark_tile_dirty(bg_tilemap3,offset); } + WRITE16_HANDLER( nmk_fgvideoram_w ) { @@ -247,7 +271,7 @@ WRITE16_HANDLER( mustang_scroll_w ) break; } - tilemap_set_scrollx(bg_tilemap,0,mustang_bg_xscroll - videoshift); + tilemap_set_scrollx(bg_tilemap0,0,mustang_bg_xscroll - videoshift); } WRITE16_HANDLER( bioshipbg_scroll_w ) @@ -259,14 +283,14 @@ WRITE16_HANDLER( bioshipbg_scroll_w ) scroll[offset] = (data >> 8) & 0xff; if (offset & 2) - tilemap_set_scrolly(bg_tilemap,0,scroll[2] * 256 + scroll[3]); + tilemap_set_scrolly(bg_tilemap0,0,scroll[2] * 256 + scroll[3]); else - tilemap_set_scrollx(bg_tilemap,0,scroll[0] * 256 + scroll[1] - videoshift); + tilemap_set_scrollx(bg_tilemap0,0,scroll[0] * 256 + scroll[1] - videoshift); } } WRITE16_HANDLER( nmk_scroll_w ) -{ +{ if (ACCESSING_BITS_0_7) { static UINT8 scroll[4]; @@ -274,9 +298,9 @@ WRITE16_HANDLER( nmk_scroll_w ) scroll[offset] = data & 0xff; if (offset & 2) - tilemap_set_scrolly(bg_tilemap,0,scroll[2] * 256 + scroll[3]); + tilemap_set_scrolly(bg_tilemap0,0,scroll[2] * 256 + scroll[3]); else - tilemap_set_scrollx(bg_tilemap,0,scroll[0] * 256 + scroll[1] - videoshift); + tilemap_set_scrollx(bg_tilemap0,0,scroll[0] * 256 + scroll[1] - videoshift); } } @@ -295,33 +319,22 @@ WRITE16_HANDLER( nmk_scroll_2_w ) } } -WRITE16_HANDLER( nmk_scroll_3_w ) -{ - COMBINE_DATA(&gunnail_scrollram[offset]); - -// popmessage( "scroll %04x, %04x", gunnail_scrollram[0], gunnail_scrollram[0x100]); - - tilemap_set_scrollx(bg_tilemap,0,gunnail_scrollram[0]-videoshift); - tilemap_set_scrolly(bg_tilemap,0,gunnail_scrollram[0x100]); -} - - WRITE16_HANDLER( vandyke_scroll_w ) { static UINT16 scroll[4]; scroll[offset] = data; - tilemap_set_scrollx(bg_tilemap,0,scroll[0] * 256 + (scroll[1] >> 8)); - tilemap_set_scrolly(bg_tilemap,0,scroll[2] * 256 + (scroll[3] >> 8)); + tilemap_set_scrollx(bg_tilemap0,0,scroll[0] * 256 + (scroll[1] >> 8)); + tilemap_set_scrolly(bg_tilemap0,0,scroll[2] * 256 + (scroll[3] >> 8)); } WRITE16_HANDLER( manybloc_scroll_w ) { COMBINE_DATA(&gunnail_scrollram[offset]); - tilemap_set_scrollx(bg_tilemap,0,gunnail_scrollram[0x82/2]-videoshift); - tilemap_set_scrolly(bg_tilemap,0,gunnail_scrollram[0xc2/2]); + tilemap_set_scrollx(bg_tilemap0,0,gunnail_scrollram[0x82/2]-videoshift); + tilemap_set_scrolly(bg_tilemap0,0,gunnail_scrollram[0xc2/2]); } WRITE16_HANDLER( nmk_flipscreen_w ) @@ -337,7 +350,7 @@ WRITE16_HANDLER( nmk_tilebank_w ) if (bgbank != (data & 0xff)) { bgbank = data & 0xff; - tilemap_mark_all_tiles_dirty(bg_tilemap); + tilemap_mark_all_tiles_dirty(bg_tilemap0); } } } @@ -487,7 +500,7 @@ VIDEO_UPDATE( macross ) { tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites(screen->machine, bitmap,cliprect,2); @@ -504,7 +517,7 @@ VIDEO_UPDATE( tdragon ) tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites(screen->machine, bitmap,cliprect,2); @@ -521,7 +534,7 @@ VIDEO_UPDATE( hachamf ) tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites(screen->machine, bitmap,cliprect,2); @@ -536,7 +549,7 @@ VIDEO_UPDATE( manybloc ) { tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,2); @@ -553,8 +566,8 @@ VIDEO_UPDATE( tharrier ) UINT16 tharrier_scroll = nmk16_mainram[0x9f00/2]; tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_set_scrollx(bg_tilemap,0,tharrier_scroll); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_set_scrollx(bg_tilemap0,0,tharrier_scroll); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,2); @@ -567,32 +580,70 @@ VIDEO_UPDATE( tharrier ) VIDEO_UPDATE( gunnail ) { - int y1, i; + int y1; + int i=16; rectangle bgclip = *cliprect; // the hardware supports per-scanline X *and* Y scroll which isn't // supported by tilemaps so we have to draw the tilemap one line at a time y1 = cliprect->min_y; - while (y1 <= cliprect->max_y) - { - int const yscroll = gunnail_scrollramy[0] + gunnail_scrollramy[y1]; - int y2; - // group all consecutive lines with the same y scroll to reduce overhead - y2 = y1+1; - while (y2 <= cliprect->max_y && gunnail_scrollramy[y2] == gunnail_scrollramy[y1]) - y2++; + if (!nmk16_simple_scroll) + { + while (y1 <= cliprect->max_y) + { + int const yscroll = gunnail_scrollramy[0] + gunnail_scrollramy[y1]; + int tilemap_bank_select; + tilemap* bg_tilemap = bg_tilemap0; + + bgclip.min_y = y1; + bgclip.max_y = y1; - bgclip.min_y = y1; - bgclip.max_y = y2-1; - - tilemap_set_scrolly(bg_tilemap, 0, yscroll); - for (i = y1; i < y2; i++) + + tilemap_bank_select = (gunnail_scrollram[0]&0x3000)>>12; + switch (tilemap_bank_select) + { + case 0: if (bg_tilemap0) bg_tilemap = bg_tilemap0; break; + case 1: if (bg_tilemap1) bg_tilemap = bg_tilemap1; break; + case 2: if (bg_tilemap2) bg_tilemap = bg_tilemap2; break; + case 3: if (bg_tilemap3) bg_tilemap = bg_tilemap3; break; + } + + tilemap_set_scroll_rows(bg_tilemap,512); + + tilemap_set_scrolly(bg_tilemap, 0, yscroll); tilemap_set_scrollx(bg_tilemap,(i + yscroll) & 0x1ff, gunnail_scrollram[0] + gunnail_scrollram[i] - videoshift); - tilemap_draw(bitmap,&bgclip,bg_tilemap,0,0); + tilemap_draw(bitmap,&bgclip,bg_tilemap,0,0); - y1 = y2; + y1++; + i++; + } + } + else + { + UINT16 yscroll = ((gunnail_scrollram[2]&0xff)<<8) | ((gunnail_scrollram[3]&0xff)<<0); + UINT16 xscroll = ((gunnail_scrollram[0]&0xff)<<8) | ((gunnail_scrollram[1]&0xff)<<0); + int tilemap_bank_select; + tilemap* bg_tilemap = bg_tilemap0; + + //popmessage( "scroll %04x, %04x", yscroll,xscroll); + + tilemap_bank_select = (xscroll&0x3000)>>12; + switch (tilemap_bank_select) + { + case 0: if (bg_tilemap0) bg_tilemap = bg_tilemap0; break; + case 1: if (bg_tilemap1) bg_tilemap = bg_tilemap1; break; + case 2: if (bg_tilemap2) bg_tilemap = bg_tilemap2; break; + case 3: if (bg_tilemap3) bg_tilemap = bg_tilemap3; break; + } + + tilemap_set_scroll_rows(bg_tilemap,1); + + tilemap_set_scrolly(bg_tilemap, 0, yscroll); + tilemap_set_scrollx(bg_tilemap, 0, xscroll - videoshift); + + tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); } nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); @@ -646,7 +697,7 @@ VIDEO_UPDATE( bioship ) } copyscrollbitmap(bitmap,background_bitmap,1,&scrollx,1,&scrolly,cliprect); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites(screen->machine, bitmap,cliprect,2); @@ -661,7 +712,7 @@ VIDEO_UPDATE( strahl ) { tilemap_set_scrollx(tx_tilemap,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); @@ -675,9 +726,9 @@ VIDEO_UPDATE( strahl ) VIDEO_UPDATE( bjtwin ) { - tilemap_set_scrollx(bg_tilemap,0,-videoshift); + tilemap_set_scrollx(bg_tilemap0,0,-videoshift); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites(screen->machine, bitmap,cliprect,2); @@ -714,84 +765,6 @@ VIDEO_EOF( strahl ) -/* Variables needed by drivers: */ - -UINT16 *afega_vram_0, *afega_scroll_0; -UINT16 *afega_vram_1, *afega_scroll_1; - - -/*************************************************************************** - - Tilemaps - - Offset: Bits: Value: - - 2.w fedc ---- ---- ---- Color - ---- ba98 7654 3210 Code - -***************************************************************************/ - -#define TILES_PER_PAGE_X (0x10) -#define TILES_PER_PAGE_Y (0x10) -#define PAGES_PER_TMAP_X (0x10) -#define PAGES_PER_TMAP_Y (0x2) -#define TWINACTN_TILES_PER_PAGE_X (0x100) -#define TWINACTN_TILES_PER_PAGE_Y (0x10) -#define TWINACTN_PAGES_PER_TMAP_X (0x1) -#define TWINACTN_PAGES_PER_TMAP_Y (0x1) - - -static TILEMAP_MAPPER( afega_tilemap_scan_pages ) -{ - return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X + - (row % TILES_PER_PAGE_Y) + - - (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + - (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; -} - -static tilemap *tilemap_0, *tilemap_1; - -static TILE_GET_INFO( get_tile_info_0_4bit ) -{ - UINT16 code = afega_vram_0[tile_index]; - SET_TILE_INFO( - 0, - code, - (code & 0xf000) >> 12, - 0); -} -static TILE_GET_INFO( get_tile_info_0_8bit ) -{ - UINT16 code = afega_vram_0[tile_index]; - SET_TILE_INFO( - 0, - code, - 0, - 0); -} -static TILE_GET_INFO( get_tile_info_1 ) -{ - UINT16 code = afega_vram_1[tile_index]; - SET_TILE_INFO( - 1, - code, - (code & 0xf000) >> 12, - 0); -} - -WRITE16_HANDLER( afega_vram_0_w ) -{ - COMBINE_DATA(&afega_vram_0[offset]); - tilemap_mark_tile_dirty(tilemap_0,offset); -} -WRITE16_HANDLER( afega_vram_1_w ) -{ - COMBINE_DATA(&afega_vram_1[offset]); - tilemap_mark_tile_dirty(tilemap_1,offset); -} - - /*************************************************************************** @@ -805,17 +778,17 @@ VIDEO_START( afega ) spriteram_old = auto_alloc_array_clear(machine, UINT16, 0x1000/2); spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); - tilemap_0 = tilemap_create( machine, get_tile_info_0_4bit, afega_tilemap_scan_pages, + bg_tilemap0 = tilemap_create( machine, macross_get_bg0_tile_info, afega_tilemap_scan_pages, 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); - tilemap_1 = tilemap_create( machine, get_tile_info_1, tilemap_scan_cols, + tx_tilemap = tilemap_create( machine, macross_get_tx_tile_info, tilemap_scan_cols, 8,8, 32,32); - tilemap_set_transparent_pen(tilemap_1,0xf); + tilemap_set_transparent_pen(tx_tilemap,0xf); } @@ -825,17 +798,17 @@ VIDEO_START( grdnstrm ) spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); - tilemap_0 = tilemap_create( machine, get_tile_info_0_8bit, afega_tilemap_scan_pages, + bg_tilemap0 = tilemap_create( machine, get_tile_info_0_8bit, afega_tilemap_scan_pages, 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); - tilemap_1 = tilemap_create( machine, get_tile_info_1, tilemap_scan_cols, + tx_tilemap = tilemap_create( machine, macross_get_tx_tile_info, tilemap_scan_cols, 8,8, 32,32); - tilemap_set_transparent_pen(tilemap_1,0xf); + tilemap_set_transparent_pen(tx_tilemap,0xf); } @@ -845,17 +818,17 @@ VIDEO_START( firehawk ) spriteram_old2 = auto_alloc_array_clear(machine, UINT16, 0x1000/2); - tilemap_0 = tilemap_create( machine, get_tile_info_0_8bit, afega_tilemap_scan_pages, + bg_tilemap0 = tilemap_create( machine, get_tile_info_0_8bit, afega_tilemap_scan_pages, 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); - tilemap_1 = tilemap_create( machine, get_tile_info_1, tilemap_scan_cols, + tx_tilemap = tilemap_create( machine, macross_get_tx_tile_info, tilemap_scan_cols, 8,8, 32,32); - tilemap_set_transparent_pen(tilemap_1,0xf); + tilemap_set_transparent_pen(tx_tilemap,0xf); } @@ -869,7 +842,7 @@ VIDEO_START( firehawk ) static void video_update(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int dsw_flipscreen, // 1 = Horizontal and vertical screen flip are hardwired to 2 dip switches - int xoffset, int yoffset, // tilemap_0 offsets + int xoffset, int yoffset, // bg_tilemap0 offsets int attr_mask // "sprite active" mask ) { @@ -884,31 +857,31 @@ static void video_update(running_machine *machine, bitmap_t *bitmap, const recta } - tilemap_set_scrollx(tilemap_0, 0, afega_scroll_0[1] + xoffset); - tilemap_set_scrolly(tilemap_0, 0, afega_scroll_0[0] + yoffset); + tilemap_set_scrollx(bg_tilemap0, 0, afega_scroll_0[1] + xoffset); + tilemap_set_scrolly(bg_tilemap0, 0, afega_scroll_0[0] + yoffset); - tilemap_set_scrollx(tilemap_1, 0, afega_scroll_1[1]); - tilemap_set_scrolly(tilemap_1, 0, afega_scroll_1[0]); + tilemap_set_scrollx(tx_tilemap, 0, afega_scroll_1[1]); + tilemap_set_scrolly(tx_tilemap, 0, afega_scroll_1[0]); - tilemap_draw(bitmap,cliprect,tilemap_0,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,1); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,0); - tilemap_draw(bitmap,cliprect,tilemap_1,0,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); } static void redhawki_video_update(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - tilemap_set_scrollx(tilemap_0, 0, afega_scroll_1[0]&0xff); - tilemap_set_scrolly(tilemap_0, 0, afega_scroll_1[1]&0xff); + tilemap_set_scrollx(bg_tilemap0, 0, afega_scroll_1[0]&0xff); + tilemap_set_scrolly(bg_tilemap0, 0, afega_scroll_1[1]&0xff); - tilemap_draw(bitmap,cliprect,tilemap_0,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); @@ -923,19 +896,17 @@ VIDEO_UPDATE( redhawki ) { redhawki_video_update(screen->machine,bitmap,cliprect VIDEO_UPDATE( firehawk ) { + tilemap_set_scrolly(bg_tilemap0, 0, afega_scroll_1[1] + 0x100); + tilemap_set_scrollx(bg_tilemap0, 0, afega_scroll_1[0]); - - tilemap_set_scrolly(tilemap_0, 0, afega_scroll_1[1] + 0x100); - tilemap_set_scrollx(tilemap_0, 0, afega_scroll_1[0]); - - tilemap_draw(bitmap,cliprect,tilemap_0,0,0); + tilemap_draw(bitmap,cliprect,bg_tilemap0,0,0); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,3); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,2); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,1); nmk16_draw_sprites_flipsupported(screen->machine, bitmap,cliprect,0); - tilemap_draw(bitmap,cliprect,tilemap_1,0,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; }