summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Brian Troha <briantro@users.noreply.github.com>2009-08-02 00:38:21 +0000
committer Brian Troha <briantro@users.noreply.github.com>2009-08-02 00:38:21 +0000
commitef069cefdde67cd93a17c4cd6fd4e67de21408b8 (patch)
tree94bdc57c2c5984d9906c42f9ecc89945b5e69fcc
parent19b9ab7ed543315bc8fbe591ce24237cb76551f1 (diff)
NMK16 driver clean ups.
Merging some of the duplicated code in nmk16.c, and attempting to handle the larger tilemaps used by Thunder Dragon 2, Rapid Hero and Macross 2 in a more correct way. This has fixed some glitches in the intro of Rapid Hero without breaking the ingame graphics. [David Haywood]
-rw-r--r--src/mame/drivers/nmk16.c83
-rw-r--r--src/mame/includes/nmk16.h22
-rw-r--r--src/mame/video/nmk16.c375
3 files changed, 235 insertions, 245 deletions
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_bgvideoram0_w );
+WRITE16_HANDLER( nmk_bgvideoram1_w );
+WRITE16_HANDLER( nmk_bgvideoram2_w );
+WRITE16_HANDLER( nmk_bgvideoram3_w );
-WRITE16_HANDLER( nmk_bgvideoram_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,32 +52,25 @@ 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 */
-
- col = (col & 0xff) | ((col & 0x300)<<1);
-
- return (row & 0x0f) + ((col & 0x6ff) << 4) + ((row & 0x70) << 8);
-}
+ return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X +
+ (row % TILES_PER_PAGE_Y) +
-static TILEMAP_MAPPER( bg_scan_td2 )
-{
- /* logical (col,row) -> memory offset */
- return (row & 0x0f) + ((col & 0x3ff) << 4) + ((row & 0x70) << 10);
+ (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y +
+ (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y;
}
+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 )
{
@@ -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;
+
+
+ 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);
- bgclip.min_y = y1;
- bgclip.max_y = y2-1;
+ tilemap_draw(bitmap,&bgclip,bg_tilemap,0,0);
+ 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);
- for (i = y1; i < y2; i++)
- tilemap_set_scrollx(bg_tilemap,(i + yscroll) & 0x1ff, gunnail_scrollram[0] + gunnail_scrollram[i] - videoshift);
+ tilemap_set_scrollx(bg_tilemap, 0, xscroll - videoshift);
- tilemap_draw(bitmap,&bgclip,bg_tilemap,0,0);
-
- y1 = y2;
+ 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;
}