summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-02-18 04:28:01 +0900
committer ajrhacker <ajrhacker@users.noreply.github.com>2018-02-17 14:28:01 -0500
commit1915a475cc779ef2169e2365a4579ff8a51177be (patch)
tree0a30b5df659d2381915bc0761f0890febc6f7f72
parent511aa0aac70da820fa3372d0f71e8ed05795ce3c (diff)
nmk16 : Cleanup duplicates, Update documents (#3227)
* nmk16 : Cleanup duplicates, Update documents vandykeb : Verified OKI Bankswitching, Correct OKI clock atombjt : Verified OKI Bankswitching * nmk16 : Build fixes
-rw-r--r--src/mame/drivers/nmk16.cpp265
-rw-r--r--src/mame/includes/nmk16.h53
-rw-r--r--src/mame/video/nmk16.cpp248
3 files changed, 244 insertions, 322 deletions
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index e48fde61e47..d192eb263e6 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -3,31 +3,33 @@
// thanks-to:Richard Bush
/********************************************************************
-Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295
-Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295
-Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
-Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
-Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295
-Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
-Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295
-Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295
-GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
-Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295
-Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295
-Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295
-
-S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
-Air Attack 1996 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
-
-Mustang (bootleg) 68000 Z80 YM3812 OKIM6295
-Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295
-
-Saboten Bombers 1992 NMK/Tecmo 68000 2xOKIM6295
-Bombjack Twin 1993 NMK 68000 2xOKIM6295
-Nouryoku Koujou Iinkai 1995 Tecmo 68000 2xOKIM6295
+Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295
+Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295
+Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
+Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
+Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
+Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
+Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
+Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295
+Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
+Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295
+Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295
+GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
+Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295
+Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295
+Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295
+
+S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
+Air Attack 1996 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
+
+Mustang (bootleg) 68000 Z80 YM3812 OKIM6295
+Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295
+
+Thunder Dragon 3 (bootleg) 1996 Conny 68000 Z80 (Unknown, Single OKIM6295 identified)
+
+Saboten Bombers 1992 NMK/Tecmo 68000 2xOKIM6295
+Bombjack Twin 1993 NMK 68000 2xOKIM6295
+Nouryoku Koujou Iinkai 1995 Tecmo 68000 2xOKIM6295
driver by Mirko Buffoni, Richard Bush, Nicola Salmoria, Bryan McPhail,
David Haywood, R. Belmont, Alex Marshal and Luca Elia.
@@ -65,6 +67,9 @@ TODO:
it doesn't matter if this is drawn with the TX layer (some sets) or the sprites (others)
so it's probably something else funky with the memory access.
+- Thunder Dragon 3 (bootleg of Thunder Dragon 2) :
+ Sound System isn't hooked up correctly for this set.
+
NOT BUGS:
- Hacha Mecha Fighter: (BTANB) the bomb graphics are pretty weird when the game
is in japanese mode, but it's like this on the original game.
@@ -222,20 +227,9 @@ WRITE16_MEMBER(nmk16_state::nmk16_mainram_strange_w)
}
-WRITE16_MEMBER(nmk16_state::ssmissin_sound_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_soundlatch->write(space, 0, data & 0xff);
- m_audiocpu->set_input_line(0, HOLD_LINE);
- }
-}
-
-
-
WRITE8_MEMBER(nmk16_state::ssmissin_soundbank_w)
{
- membank("okibank1")->set_entry(data & 0x3);
+ m_okibank[0]->set_entry(data & 0x3);
}
@@ -285,40 +279,45 @@ WRITE16_MEMBER(nmk16_state::macross2_sound_reset_w)
m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
}
-WRITE16_MEMBER(nmk16_state::macross2_sound_command_w)
-{
- if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space,0,data & 0xff);
-}
-
WRITE8_MEMBER(nmk16_state::macross2_sound_bank_w)
{
- membank("bank1")->set_entry(data & 0x07);
+ m_audiobank->set_entry(data & 0x07);
}
-WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_0_w)
+template<int Chip>
+WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_w)
{
data &= 3;
if (data != 3)
- membank("okibank1")->set_entry(data);
+ m_okibank[Chip]->set_entry(data);
}
-WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_1_w)
+/***************************************************************************
+
+ VRAM handlers
+
+***************************************************************************/
+
+template<int Bank>
+WRITE16_MEMBER(nmk16_state::nmk_bgvideoram_w)
{
- data &= 3;
- if (data != 3)
- membank("okibank2")->set_entry(data);
+ COMBINE_DATA(&m_nmk_bgvideoram[Bank][offset]);
+ m_bg_tilemap[Bank]->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(nmk16_state::afega_soundlatch_w)
+WRITE16_MEMBER(nmk16_state::nmk_fgvideoram_w)
{
- if (ACCESSING_BITS_0_7)
- {
- m_soundlatch->write(space, 0, data&0xff);
- m_audiocpu->set_input_line(0, HOLD_LINE);
- }
+ COMBINE_DATA(&m_nmk_fgvideoram[offset]);
+ m_fg_tilemap->mark_tile_dirty(offset);
+}
+
+WRITE16_MEMBER(nmk16_state::nmk_txvideoram_w)
+{
+ COMBINE_DATA(&m_nmk_txvideoram[offset]);
+ m_tx_tilemap->mark_tile_dirty(offset);
}
+
/***************************************************************************/
ADDRESS_MAP_START(nmk16_state::vandyke_map)
@@ -333,7 +332,7 @@ ADDRESS_MAP_START(nmk16_state::vandyke_map)
AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_WRITE(vandyke_scroll_w)
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x094000, 0x097fff) AM_RAM /* what is this? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
@@ -352,7 +351,7 @@ ADDRESS_MAP_START(nmk16_state::vandykeb_map)
// AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_WRITENOP /* just in case... */
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x094000, 0x097fff) AM_RAM /* what is this? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
@@ -369,7 +368,7 @@ ADDRESS_MAP_START(nmk16_state::manybloc_map)
AM_RANGE(0x08001c, 0x08001d) AM_WRITENOP /* See notes at the top of the driver */
AM_RANGE(0x08001e, 0x08001f) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x088000, 0x0883ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09cfff) AM_RAM_WRITE(manybloc_scroll_w) AM_SHARE("scrollram")
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
@@ -389,7 +388,7 @@ ADDRESS_MAP_START(nmk16_state::tharrier_map)
AM_RANGE(0x080202, 0x080203) AM_READ_PORT("IN2")
AM_RANGE(0x088000, 0x0883ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
// AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w)
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM /* Unused txvideoram area? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
@@ -401,8 +400,8 @@ ADDRESS_MAP_START(nmk16_state::tharrier_sound_map)
AM_RANGE(0xf000, 0xf000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
AM_RANGE(0xf400, 0xf400) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xf500, 0xf500) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0xf600, 0xf600) AM_WRITE(tharrier_oki6295_bankswitch_0_w)
- AM_RANGE(0xf700, 0xf700) AM_WRITE(tharrier_oki6295_bankswitch_1_w)
+ AM_RANGE(0xf600, 0xf600) AM_WRITE(tharrier_oki6295_bankswitch_w<0>)
+ AM_RANGE(0xf700, 0xf700) AM_WRITE(tharrier_oki6295_bankswitch_w<1>)
ADDRESS_MAP_END
ADDRESS_MAP_START(nmk16_state::tharrier_sound_io_map)
@@ -425,7 +424,7 @@ ADDRESS_MAP_START(nmk16_state::mustang_map)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ??
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -442,7 +441,7 @@ ADDRESS_MAP_START(nmk16_state::mustangb_map)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ??
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -456,11 +455,11 @@ ADDRESS_MAP_START(nmk16_state::twinactn_map)
AM_RANGE(0x08000e, 0x08000f) AM_NOP
AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w)
AM_RANGE(0x080016, 0x080017) AM_WRITENOP // frame number?
- AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w)
+ AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ??
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -480,7 +479,7 @@ ADDRESS_MAP_START(nmk16_state::acrobatm_map)
AM_RANGE(0xc001e, 0xc001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0xc4000, 0xc45ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0xc8000, 0xc8007) AM_RAM_WRITE(nmk_scroll_w)
- AM_RANGE(0xcc000, 0xcffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0xcc000, 0xcffff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0xd4000, 0xd47ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END
@@ -498,7 +497,7 @@ ADDRESS_MAP_START(nmk16_state::bioship_map)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
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_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -677,7 +676,7 @@ ADDRESS_MAP_START(nmk16_state::hachamf_map)
/* Video Region */
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w)
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
/* Main RAM, inc sprites, shared with MCU */
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") // ram is shared with MCU
@@ -909,7 +908,7 @@ ADDRESS_MAP_START(nmk16_state::tdragon_map)
AM_RANGE(0x0c001e, 0x0c001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w)
AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END
@@ -932,7 +931,7 @@ ADDRESS_MAP_START(nmk16_state::tdragonb_map)
AM_RANGE(0x0c001e, 0x0c001f) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_mustb_w)
AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w)
AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END
@@ -945,10 +944,10 @@ ADDRESS_MAP_START(nmk16_state::ssmissin_map)
// AM_RANGE(0x0c000e, 0x0c000f) AM_READ(??)
AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */
AM_RANGE(0x0c0018, 0x0c0019) AM_WRITE(nmk_tilebank_w) /* Tile Bank ? */
- AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(ssmissin_sound_w)
+ AM_RANGE(0x0c001e, 0x0c001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w)
AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x0cc000, 0x0cffff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x0d0000, 0x0d07ff) AM_MIRROR(0x1800) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") //mirror for airattck
ADDRESS_MAP_END
@@ -983,7 +982,7 @@ ADDRESS_MAP_START(nmk16_state::strahl_map)
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_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x90000, 0x93fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x90000, 0x93fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x94000, 0x97fff) AM_RAM_WRITE(nmk_fgvideoram_w) AM_SHARE("nmk_fgvideoram")
AM_RANGE(0x9c000, 0x9c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0xf0000, 0xfffff) AM_RAM AM_SHARE("mainram")
@@ -1002,7 +1001,7 @@ ADDRESS_MAP_START(nmk16_state::macross_map)
AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(nmk_scroll_w)
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -1022,7 +1021,7 @@ ADDRESS_MAP_START(nmk16_state::gunnail_map)
AM_RANGE(0x08c000, 0x08c1ff) AM_WRITEONLY AM_SHARE("scrollram")
AM_RANGE(0x08c200, 0x08c3ff) AM_WRITEONLY AM_SHARE("scrollramy")
AM_RANGE(0x08c400, 0x08c7ff) AM_WRITEONLY // unknown
- AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x001000) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -1037,17 +1036,17 @@ ADDRESS_MAP_START(nmk16_state::macross2_map)
AM_RANGE(0x100014, 0x100015) AM_WRITE(nmk_flipscreen_w)
AM_RANGE(0x100016, 0x100017) AM_WRITE(macross2_sound_reset_w) /* Z80 reset */
AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w)
- AM_RANGE(0x10001e, 0x10001f) AM_WRITE(macross2_sound_command_w) /* to Z80 */
+ AM_RANGE(0x10001e, 0x10001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff) /* to Z80 */
AM_RANGE(0x120000, 0x1207ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram")
AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy")
AM_RANGE(0x130400, 0x1307ff) AM_RAM
- AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
- AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_SHARE("nmk_bgvideoram1")
- AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_SHARE("nmk_bgvideoram2")
- AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_SHARE("nmk_bgvideoram3")
+ AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram_w<1>) AM_SHARE("nmk_bgvideoram1")
+ AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram_w<2>) AM_SHARE("nmk_bgvideoram2")
+ AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram_w<3>) AM_SHARE("nmk_bgvideoram3")
AM_RANGE(0x170000, 0x170fff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_SHARE("mainram")
@@ -1069,17 +1068,17 @@ ADDRESS_MAP_START(nmk16_state::raphero_map)
AM_RANGE(0x100014, 0x100015) AM_WRITE(nmk_flipscreen_w)
AM_RANGE(0x100016, 0x100017) AM_WRITENOP /* IRQ enable or z80 sound reset like in Macross 2? */
AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w)
- AM_RANGE(0x10001e, 0x10001f) AM_WRITE(macross2_sound_command_w) /* to Z80 */
+ AM_RANGE(0x10001e, 0x10001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff) /* to Z80 */
AM_RANGE(0x120000, 0x1207ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram")
AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy")
AM_RANGE(0x130400, 0x1307ff) AM_RAM
- AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
- AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_SHARE("nmk_bgvideoram1")
- AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_SHARE("nmk_bgvideoram2")
- AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_SHARE("nmk_bgvideoram3")
+ AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram_w<1>) AM_SHARE("nmk_bgvideoram1")
+ AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram_w<2>) AM_SHARE("nmk_bgvideoram2")
+ AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram_w<3>) AM_SHARE("nmk_bgvideoram3")
AM_RANGE(0x170000, 0x170fff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
@@ -1088,7 +1087,7 @@ ADDRESS_MAP_END
ADDRESS_MAP_START(nmk16_state::raphero_sound_mem_map)
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("audiobank")
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
AM_RANGE(0xc800, 0xc800) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xc808, 0xc808) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
@@ -1100,7 +1099,7 @@ ADDRESS_MAP_END
ADDRESS_MAP_START(nmk16_state::macross2_sound_map)
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") /* banked ROM */
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("audiobank") /* banked ROM */
AM_RANGE(0xa000, 0xa000) AM_READNOP /* IRQ ack? watchdog? */
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe001, 0xe001) AM_WRITE(macross2_sound_bank_w)
@@ -1128,7 +1127,7 @@ ADDRESS_MAP_START(nmk16_state::bjtwin_map)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
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_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -1138,7 +1137,7 @@ ADDRESS_MAP_START(nmk16_state::atombjt_map)
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
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_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0")
+ AM_RANGE(0x09c000, 0x09cfff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x0c2010, 0x0c2011) AM_READ_PORT("IN0")
AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1")
AM_RANGE(0x0c2014, 0x0c2015) AM_READ(atombjt_unkr_r)
@@ -4106,8 +4105,9 @@ MACHINE_CONFIG_START(nmk16_state::vandykeb)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_OKIM6295_ADD("oki1", 16000000/4, PIN7_LOW)
+ MCFG_OKIM6295_ADD("oki1", 16000000/16, PIN7_LOW)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
+ MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(nmk16_state::acrobatm)
@@ -4259,6 +4259,7 @@ MACHINE_CONFIG_START(nmk16_state::ssmissin)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_OKIM6295_ADD("oki1", 8000000/8, PIN7_HIGH) /* 1 Mhz, pin 7 high */
MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
@@ -4562,6 +4563,7 @@ MACHINE_CONFIG_START(nmk16_state::tdragon2)
MCFG_NMK112_ROM1("oki2")
MACHINE_CONFIG_END
+// TODO : Sound system is different
MACHINE_CONFIG_START(nmk16_state::tdragon3h)
tdragon2(config);
MCFG_CPU_MODIFY("maincpu")
@@ -4672,6 +4674,7 @@ MACHINE_CONFIG_START(nmk16_state::atombjt)
MCFG_OKIM6295_ADD("oki1", 10000000/8, PIN7_LOW) // divider and pin not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
+ MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
MACHINE_CONFIG_END
@@ -4912,13 +4915,13 @@ DRIVER_INIT_MEMBER(nmk16_state,nmk)
DRIVER_INIT_MEMBER(nmk16_state,banked_audiocpu)
{
- membank("bank1")->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
+ m_audiobank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
}
DRIVER_INIT_MEMBER(nmk16_state,tharrier)
{
- membank("okibank1")->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
- membank("okibank2")->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000);
+ m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
+ m_okibank[1]->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000);
}
DRIVER_INIT_MEMBER(nmk16_state,hachamf_prot)
@@ -4957,7 +4960,7 @@ DRIVER_INIT_MEMBER(nmk16_state,ssmissin)
{
decode_ssmissin();
- membank("okibank1")->configure_entries(0, 4, memregion("oki1")->base() + 0x80000, 0x20000);
+ m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x80000, 0x20000);
}
DRIVER_INIT_MEMBER(nmk16_state,bjtwin)
@@ -4987,10 +4990,16 @@ DRIVER_INIT_MEMBER(nmk16_state,bjtwin)
}
+DRIVER_INIT_MEMBER(nmk16_state,atombjt)
+{
+ m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
+}
+
/* NO NMK004, it has a PIC instead */
READ16_MEMBER(nmk16_state::vandykeb_r){ return 0x0000; }
DRIVER_INIT_MEMBER(nmk16_state,vandykeb)
{
+ m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x08000e, 0x08000f, read16_delegate(FUNC(nmk16_state::vandykeb_r),this));
m_maincpu->space(AS_PROGRAM).nop_write(0x08001e, 0x08001f);
}
@@ -5011,15 +5020,10 @@ READ16_MEMBER(nmk16_state::afega_unknown_r)
}
-
-WRITE16_MEMBER(nmk16_state::afega_scroll0_w)
+template<int Scroll>
+WRITE16_MEMBER(nmk16_state::afega_scroll_w)
{
- COMBINE_DATA(&m_afega_scroll_0[offset]);
-}
-
-WRITE16_MEMBER(nmk16_state::afega_scroll1_w)
-{
- COMBINE_DATA(&m_afega_scroll_1[offset]);
+ COMBINE_DATA(&m_afega_scroll[Scroll][offset]);
}
/*
@@ -5037,17 +5041,17 @@ ADDRESS_MAP_START(nmk16_state::afega_map)
AM_RANGE(0x080004, 0x080005) AM_READ_PORT("DSW1") // 2 x DSW
AM_RANGE(0x080012, 0x080013) AM_READ(afega_unknown_r)
AM_RANGE(0x080000, 0x08001d) AM_WRITEONLY //
- AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w) // To Sound CPU
+ AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff) // To Sound CPU
AM_RANGE(0x080020, 0x087fff) AM_WRITEONLY //
-/**/AM_RANGE(0x084000, 0x084003) AM_RAM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..)
-/**/AM_RANGE(0x084004, 0x084007) AM_RAM_WRITE(afega_scroll1_w) // Scroll on redhawkb (mirror or changed?..)
-/**/AM_RANGE(0x088000, 0x0885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
+ AM_RANGE(0x084000, 0x084003) AM_RAM_WRITE(afega_scroll_w<0>) // Scroll on redhawkb (mirror or changed?..)
+ AM_RANGE(0x084004, 0x084007) AM_RAM_WRITE(afega_scroll_w<1>) // Scroll on redhawkb (mirror or changed?..)
+ AM_RANGE(0x088000, 0x0885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
AM_RANGE(0x088600, 0x08bfff) AM_WRITEONLY //
-/**/AM_RANGE(0x08c000, 0x08c003) AM_RAM_WRITE(afega_scroll0_w) AM_SHARE("afega_scroll_0") // Scroll
-/**/AM_RANGE(0x08c004, 0x08c007) AM_RAM_WRITE(afega_scroll1_w) AM_SHARE("afega_scroll_1") //
+ AM_RANGE(0x08c000, 0x08c003) AM_RAM_WRITE(afega_scroll_w<0>) AM_SHARE("afega_scroll_0") // Scroll
+ AM_RANGE(0x08c004, 0x08c007) AM_RAM_WRITE(afega_scroll_w<1>) AM_SHARE("afega_scroll_1") //
AM_RANGE(0x08c008, 0x08ffff) AM_WRITEONLY //
-/**/AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ?
-/**/AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") // Layer 1
+ AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ?
+ AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") // Layer 1
AM_RANGE(0x0c0000, 0x0cffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
@@ -5062,17 +5066,17 @@ ADDRESS_MAP_START(nmk16_state::firehawk_map)
AM_RANGE(0x280004, 0x280005) AM_READ_PORT("DSW1") // 2 x DSW
AM_RANGE(0x280012, 0x280013) AM_READ(afega_unknown_r)
AM_RANGE(0x280000, 0x28001d) AM_WRITEONLY //
- AM_RANGE(0x28001e, 0x28001f) AM_WRITE(afega_soundlatch_w) // To Sound CPU
+ AM_RANGE(0x28001e, 0x28001f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write, 0x00ff) // To Sound CPU
AM_RANGE(0x280020, 0x287fff) AM_WRITEONLY //
-/**/AM_RANGE(0x284000, 0x284003) AM_RAM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..)
-/**/AM_RANGE(0x284004, 0x284007) AM_RAM_WRITE(afega_scroll1_w) // Scroll on redhawkb (mirror or changed?..)
-/**/AM_RANGE(0x288000, 0x2885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
+ AM_RANGE(0x284000, 0x284003) AM_RAM_WRITE(afega_scroll_w<0>) // Scroll on redhawkb (mirror or changed?..)
+ AM_RANGE(0x284004, 0x284007) AM_RAM_WRITE(afega_scroll_w<1>) // Scroll on redhawkb (mirror or changed?..)
+ AM_RANGE(0x288000, 0x2885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
AM_RANGE(0x288600, 0x28bfff) AM_WRITEONLY //
-/**/AM_RANGE(0x28c000, 0x28c003) AM_RAM_WRITE(afega_scroll0_w) AM_SHARE("afega_scroll_0") // Scroll
-/**/AM_RANGE(0x28c004, 0x28c007) AM_RAM_WRITE(afega_scroll1_w) AM_SHARE("afega_scroll_1") //
+ AM_RANGE(0x28c000, 0x28c003) AM_RAM_WRITE(afega_scroll_w<0>) AM_SHARE("afega_scroll_0") // Scroll
+ AM_RANGE(0x28c004, 0x28c007) AM_RAM_WRITE(afega_scroll_w<1>) AM_SHARE("afega_scroll_1") //
AM_RANGE(0x28c008, 0x28ffff) AM_WRITEONLY //
-/**/AM_RANGE(0x290000, 0x293fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ?
-/**/AM_RANGE(0x29c000, 0x29c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") // Layer 1
+ AM_RANGE(0x290000, 0x293fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ?
+ AM_RANGE(0x29c000, 0x29c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") // Layer 1
AM_RANGE(0x3c0000, 0x3cffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
AM_RANGE(0x3f0000, 0x3fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
@@ -5238,6 +5242,7 @@ MACHINE_CONFIG_START(nmk16_state::stagger1)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_YM2151_ADD("ymsnd", XTAL(4'000'000)) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
@@ -5327,6 +5332,7 @@ MACHINE_CONFIG_START(nmk16_state::firehawk)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
@@ -5367,6 +5373,7 @@ MACHINE_CONFIG_START(nmk16_state::twinactn)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
@@ -5519,11 +5526,11 @@ ROM_START( vandykeb )
ROM_LOAD16_BYTE( "10.bin", 0x140000, 0x020000, CRC(388b1abc) SHA1(9d1c43070130672a5e1a41807d796c944b0676ae) ) /* Sprites */
ROM_LOAD16_BYTE( "14.bin", 0x140001, 0x020000, CRC(32eeba37) SHA1(0d0218e864ed647bd33bbe379f0ef76ccefbd06c) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
ROM_LOAD( "9.bin", 0x000000, 0x020000, CRC(56bf774f) SHA1(5ece618fff22483adb5dff062dd4ec212aab0f01) )
- ROM_LOAD( "8.bin", 0x000000, 0x020000, CRC(89851fcf) SHA1(7b6284cb929059371dd2b5410cd18373834ba76b) )
- ROM_LOAD( "7.bin", 0x000000, 0x020000, CRC(d7bf0f6a) SHA1(413713576692676a831949e0d4dc5574da338380) )
- ROM_LOAD( "6.bin", 0x000000, 0x020000, CRC(a7fcf709) SHA1(dc6298b43a472e92e99b8286bd4d26f7e72fd278) )
+ ROM_LOAD( "8.bin", 0x020000, 0x020000, CRC(89851fcf) SHA1(7b6284cb929059371dd2b5410cd18373834ba76b) )
+ ROM_LOAD( "7.bin", 0x040000, 0x020000, CRC(d7bf0f6a) SHA1(413713576692676a831949e0d4dc5574da338380) )
+ ROM_LOAD( "6.bin", 0x060000, 0x020000, CRC(a7fcf709) SHA1(dc6298b43a472e92e99b8286bd4d26f7e72fd278) )
ROM_END
ROM_START( tharrier )
@@ -5800,7 +5807,7 @@ ROM_START( bioship )
ROM_REGION( 0x80000, "gfx4", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) /* Background */
- ROM_REGION16_BE(0x20000, "gfx5", 0 ) /* Background tilemaps (used at runtime) */
+ ROM_REGION16_BE(0x20000, "tilerom", 0 ) /* Background tilemaps (used at runtime) */
ROM_LOAD16_BYTE( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) )
@@ -5836,7 +5843,7 @@ ROM_START( sbsgomo )
ROM_REGION( 0x80000, "gfx4", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) /* Background */
- ROM_REGION16_BE(0x20000, "gfx5", 0 ) /* Background tilemaps (used at runtime) */
+ ROM_REGION16_BE(0x20000, "tilerom", 0 ) /* Background tilemaps (used at runtime) */
ROM_LOAD16_BYTE( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) )
@@ -6466,6 +6473,7 @@ ROM_START( tdragon3h )
ROM_LOAD16_BYTE( "H.27C2001", 0x00000, 0x40000, CRC(0091f4a3) SHA1(025e5f7ff12eaa90c5cfe757c71d58ba7040cba7) )
ROM_LOAD16_BYTE( "L.27C020", 0x00001, 0x40000, CRC(4699c313) SHA1(1851a4b5ad9c2bac230126d195e239a5ebe827f9) )
+ // Not from this PCB
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
ROM_LOAD( "1.27C1000", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
@@ -6480,7 +6488,8 @@ ROM_START( tdragon3h )
ROM_REGION( 0x400000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "ww930917.7", 0x000000, 0x200000, CRC(b98873cb) SHA1(cc19200865176e940ff68e12de81f029b51c2084) ) /* Sprites */
ROM_LOAD16_WORD_SWAP( "ww930918.8", 0x200000, 0x200000, CRC(baee84b2) SHA1(b325b00e6147266dbdc840e03556004531dc2038) )
-
+
+ // Not from this PCB
ROM_REGION( 0x240000, "oki1", 0 ) /* OKIM6295 samples */
ROM_LOAD( "ww930916.4", 0x040000, 0x200000, CRC(07c35fe6) SHA1(33547bd88764704310f2ef8cf3bfe21ceb56d5b7) ) /* all banked */
@@ -8062,7 +8071,7 @@ GAME( 1993, macross2k, macross2, macross2, macross2, nmk16_state, bank
GAME( 1993, tdragon2, 0, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
GAME( 1993, tdragon2a, tdragon2, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (1st Oct. 1993)", MACHINE_NO_COCKTAIL )
GAME( 1993, bigbang, tdragon2, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
-GAME( 1996, tdragon3h, tdragon2, tdragon3h, tdragon2, nmk16_state, banked_audiocpu, ROT270, "bootleg (Conny Co Ltd.)", "Thunder Dragon 3 (bootleg of Thunder Dragon 2)", MACHINE_NO_COCKTAIL ) // based on 1st Oct. 1993 set
+GAME( 1996, tdragon3h, tdragon2, tdragon3h, tdragon2, nmk16_state, banked_audiocpu, ROT270, "bootleg (Conny Co Ltd.)", "Thunder Dragon 3 (bootleg of Thunder Dragon 2)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL ) // based on 1st Oct. 1993 set, Sound system isn't hooked up correctly for this set
/* arcadia was a name conflict to the Emerson Arcadia 2001 in mess */
GAME( 1994, arcadian, 0, raphero, raphero, nmk16_state, banked_audiocpu, ROT270, "NMK", "Arcadia (NMK)", 0 ) // 23rd July 1993 in test mode, (c)1994 on title screen
@@ -8077,7 +8086,7 @@ GAME( 1993, bjtwin, 0, bjtwin, bjtwin, nmk16_state, bjtwin, ROT27
GAME( 1993, bjtwina, bjtwin, bjtwin, bjtwin, nmk16_state, bjtwin, ROT270, "NMK", "Bombjack Twin (set 2)", MACHINE_NO_COCKTAIL )
GAME( 1993, bjtwinp, bjtwin, bjtwin, bjtwin, nmk16_state, 0, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 1)", MACHINE_NO_COCKTAIL ) // Cheap looking PCB, but Genuine NMK PCB, GFX aren't encrypted (maybe Korean version not proto?)
GAME( 1993, bjtwinpa, bjtwin, bjtwin, bjtwin, nmk16_state, bjtwin, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 2)", MACHINE_NO_COCKTAIL ) // same PCB as above, different program revision, GFX are encrypted
-GAME( 1993, atombjt, bjtwin, atombjt, atombjt, nmk16_state, 0, ROT270, "bootleg (Kyon K.)", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // some non-trivial mods to the gfx and sound hw (playmark hardware?)
+GAME( 1993, atombjt, bjtwin, atombjt, atombjt, nmk16_state, atombjt, ROT270, "bootleg (Kyon K.)", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // some non-trivial mods to the gfx and sound hw (playmark hardware?)
GAME( 1995, nouryoku, 0, bjtwin, nouryoku, nmk16_state, nmk, ROT0, "Tecmo", "Nouryoku Koujou Iinkai", MACHINE_NO_COCKTAIL )
diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h
index e16bde44ec8..392f388537f 100644
--- a/src/mame/includes/nmk16.h
+++ b/src/mame/includes/nmk16.h
@@ -22,18 +22,17 @@ public:
m_palette(*this, "palette"),
m_nmk004(*this, "nmk004"),
m_soundlatch(*this, "soundlatch"),
- m_nmk_bgvideoram0(*this, "nmk_bgvideoram0"),
+ m_nmk_bgvideoram(*this, "nmk_bgvideoram%u", 0),
m_nmk_txvideoram(*this, "nmk_txvideoram"),
m_mainram(*this, "mainram"),
m_gunnail_scrollram(*this, "scrollram"),
m_spriteram(*this, "spriteram"),
m_nmk_fgvideoram(*this, "nmk_fgvideoram"),
m_gunnail_scrollramy(*this, "scrollramy"),
- m_nmk_bgvideoram1(*this, "nmk_bgvideoram1"),
- m_nmk_bgvideoram2(*this, "nmk_bgvideoram2"),
- m_nmk_bgvideoram3(*this, "nmk_bgvideoram3"),
- m_afega_scroll_0(*this, "afega_scroll_0"),
- m_afega_scroll_1(*this, "afega_scroll_1"),
+ m_afega_scroll(*this, "afega_scroll_%u", 0),
+ m_tilemap_rom(*this, "tilerom"),
+ m_audiobank(*this, "audiobank"),
+ m_okibank(*this, "okibank%u", 1),
m_sprdma_base(0x8000)
{}
@@ -46,19 +45,18 @@ public:
optional_device<nmk004_device> m_nmk004;
optional_device<generic_latch_8_device> m_soundlatch;
- required_shared_ptr<uint16_t> m_nmk_bgvideoram0;
+ optional_shared_ptr_array<uint16_t, 4> m_nmk_bgvideoram;
optional_shared_ptr<uint16_t> m_nmk_txvideoram;
required_shared_ptr<uint16_t> m_mainram;
optional_shared_ptr<uint16_t> m_gunnail_scrollram;
optional_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint16_t> m_nmk_fgvideoram;
optional_shared_ptr<uint16_t> m_gunnail_scrollramy;
- optional_shared_ptr<uint16_t> m_nmk_bgvideoram1;
- optional_shared_ptr<uint16_t> m_nmk_bgvideoram2;
- optional_shared_ptr<uint16_t> m_nmk_bgvideoram3;
- optional_shared_ptr<uint16_t> m_afega_scroll_0;
- optional_shared_ptr<uint16_t> m_afega_scroll_1;
-
+ optional_shared_ptr_array<uint16_t, 2> m_afega_scroll;
+
+ optional_region_ptr<uint16_t> m_tilemap_rom;
+ optional_memory_bank m_audiobank;
+ optional_memory_bank_array<2> m_okibank;
int m_sprdma_base;
int mask[4*2];
@@ -70,10 +68,7 @@ public:
int m_videoshift;
int m_bioship_background_bank;
uint8_t m_bioship_scroll[4];
- tilemap_t *m_bg_tilemap0;
- tilemap_t *m_bg_tilemap1;
- tilemap_t *m_bg_tilemap2;
- tilemap_t *m_bg_tilemap3;
+ tilemap_t *m_bg_tilemap[4];
tilemap_t *m_tx_tilemap;
tilemap_t *m_fg_tilemap;
std::unique_ptr<bitmap_ind16> m_background_bitmap;
@@ -87,27 +82,19 @@ public:
uint8_t m_coin_count[2];
uint8_t m_coin_count_frac[2];
DECLARE_WRITE16_MEMBER(nmk16_mainram_strange_w);
- DECLARE_WRITE16_MEMBER(ssmissin_sound_w);
DECLARE_WRITE8_MEMBER(ssmissin_soundbank_w);
DECLARE_WRITE16_MEMBER(tharrier_mcu_control_w);
DECLARE_READ16_MEMBER(tharrier_mcu_r);
DECLARE_WRITE16_MEMBER(macross2_sound_reset_w);
- DECLARE_WRITE16_MEMBER(macross2_sound_command_w);
DECLARE_WRITE8_MEMBER(macross2_sound_bank_w);
- DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_0_w);
- DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_1_w);
- DECLARE_WRITE16_MEMBER(afega_soundlatch_w);
+ template<int Chip> DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_w);
DECLARE_WRITE16_MEMBER(hachamf_mainram_w);
DECLARE_WRITE16_MEMBER(tdragon_mainram_w);
DECLARE_READ16_MEMBER(vandykeb_r);
DECLARE_READ16_MEMBER(tdragonb_prot_r);
DECLARE_READ16_MEMBER(afega_unknown_r);
- DECLARE_WRITE16_MEMBER(afega_scroll0_w);
- DECLARE_WRITE16_MEMBER(afega_scroll1_w);
- DECLARE_WRITE16_MEMBER(nmk_bgvideoram0_w);
- DECLARE_WRITE16_MEMBER(nmk_bgvideoram1_w);
- DECLARE_WRITE16_MEMBER(nmk_bgvideoram2_w);
- DECLARE_WRITE16_MEMBER(nmk_bgvideoram3_w);
+ template<int Scroll> DECLARE_WRITE16_MEMBER(afega_scroll_w);
+ template<int Bank> DECLARE_WRITE16_MEMBER(nmk_bgvideoram_w);
DECLARE_WRITE16_MEMBER(nmk_fgvideoram_w);
DECLARE_WRITE16_MEMBER(nmk_txvideoram_w);
DECLARE_WRITE16_MEMBER(mustang_scroll_w);
@@ -141,13 +128,11 @@ public:
DECLARE_DRIVER_INIT(redfoxwp2a);
DECLARE_DRIVER_INIT(grdnstrmg);
DECLARE_DRIVER_INIT(bjtwin);
- TILEMAP_MAPPER_MEMBER(afega_tilemap_scan_pages);
- TILE_GET_INFO_MEMBER(macross_get_bg0_tile_info);
- TILE_GET_INFO_MEMBER(macross_get_bg1_tile_info);
- TILE_GET_INFO_MEMBER(macross_get_bg2_tile_info);
- TILE_GET_INFO_MEMBER(macross_get_bg3_tile_info);
+ DECLARE_DRIVER_INIT(atombjt);
+ TILEMAP_MAPPER_MEMBER(tilemap_scan_pages);
+ template<int Bank> TILE_GET_INFO_MEMBER(common_get_bg_tile_info);
TILE_GET_INFO_MEMBER(strahl_get_fg_tile_info);
- TILE_GET_INFO_MEMBER(macross_get_tx_tile_info);
+ TILE_GET_INFO_MEMBER(common_get_tx_tile_info);
TILE_GET_INFO_MEMBER(bjtwin_get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info_0_8bit);
DECLARE_VIDEO_START(macross);
diff --git a/src/mame/video/nmk16.cpp b/src/mame/video/nmk16.cpp
index b48d678b225..6416edaf964 100644
--- a/src/mame/video/nmk16.cpp
+++ b/src/mame/video/nmk16.cpp
@@ -29,7 +29,7 @@
#define PAGES_PER_TMAP_X (0x10)
#define PAGES_PER_TMAP_Y (0x02)
-TILEMAP_MAPPER_MEMBER(nmk16_state::afega_tilemap_scan_pages)
+TILEMAP_MAPPER_MEMBER(nmk16_state::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) +
@@ -38,27 +38,10 @@ TILEMAP_MAPPER_MEMBER(nmk16_state::afega_tilemap_scan_pages)
(col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y;
}
-TILE_GET_INFO_MEMBER(nmk16_state::macross_get_bg0_tile_info)
+template<int Bank>
+TILE_GET_INFO_MEMBER(nmk16_state::common_get_bg_tile_info)
{
- int code = m_nmk_bgvideoram0[tile_index];
- SET_TILE_INFO_MEMBER(1,(code & 0xfff) + (m_bgbank << 12),code >> 12,0);
-}
-
-TILE_GET_INFO_MEMBER(nmk16_state::macross_get_bg1_tile_info)
-{
- int code = m_nmk_bgvideoram1[tile_index];
- SET_TILE_INFO_MEMBER(1,(code & 0xfff) + (m_bgbank << 12),code >> 12,0);
-}
-
-TILE_GET_INFO_MEMBER(nmk16_state::macross_get_bg2_tile_info)
-{
- int code = m_nmk_bgvideoram2[tile_index];
- SET_TILE_INFO_MEMBER(1,(code & 0xfff) + (m_bgbank << 12),code >> 12,0);
-}
-
-TILE_GET_INFO_MEMBER(nmk16_state::macross_get_bg3_tile_info)
-{
- int code = m_nmk_bgvideoram3[tile_index];
+ int code = m_nmk_bgvideoram[Bank][tile_index];
SET_TILE_INFO_MEMBER(1,(code & 0xfff) + (m_bgbank << 12),code >> 12,0);
}
@@ -72,7 +55,7 @@ TILE_GET_INFO_MEMBER(nmk16_state::strahl_get_fg_tile_info)
0);
}
-TILE_GET_INFO_MEMBER(nmk16_state::macross_get_tx_tile_info)
+TILE_GET_INFO_MEMBER(nmk16_state::common_get_tx_tile_info)
{
int code = m_nmk_txvideoram[tile_index];
SET_TILE_INFO_MEMBER(0,
@@ -83,7 +66,7 @@ TILE_GET_INFO_MEMBER(nmk16_state::macross_get_tx_tile_info)
TILE_GET_INFO_MEMBER(nmk16_state::bjtwin_get_bg_tile_info)
{
- int code = m_nmk_bgvideoram0[tile_index];
+ int code = m_nmk_bgvideoram[0][tile_index];
int bank = (code & 0x800) ? 1 : 0;
SET_TILE_INFO_MEMBER(bank,
(code & 0x7ff) + ((bank) ? (m_bgbank << 11) : 0),
@@ -93,7 +76,7 @@ TILE_GET_INFO_MEMBER(nmk16_state::bjtwin_get_bg_tile_info)
TILE_GET_INFO_MEMBER(nmk16_state::get_tile_info_0_8bit)
{
- uint16_t code = m_nmk_bgvideoram0[tile_index];
+ uint16_t code = m_nmk_bgvideoram[0][tile_index];
SET_TILE_INFO_MEMBER(1,
code,
0,
@@ -120,10 +103,10 @@ void nmk16_state::nmk16_video_init()
VIDEO_START_MEMBER(nmk16_state,bioship)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
- m_bg_tilemap0->set_transparent_pen(15);
+ m_bg_tilemap[0]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15);
nmk16_video_init();
@@ -135,9 +118,9 @@ VIDEO_START_MEMBER(nmk16_state,bioship)
VIDEO_START_MEMBER(nmk16_state,strahl)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::strahl_get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::strahl_get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
m_fg_tilemap->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15);
@@ -149,8 +132,8 @@ VIDEO_START_MEMBER(nmk16_state,strahl)
VIDEO_START_MEMBER(nmk16_state,macross)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,32);
m_tx_tilemap->set_transparent_pen(15);
@@ -159,11 +142,11 @@ VIDEO_START_MEMBER(nmk16_state,macross)
VIDEO_START_MEMBER(nmk16_state,gunnail)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
m_tx_tilemap->set_transparent_pen(15);
- m_bg_tilemap0->set_scroll_rows(512);
+ m_bg_tilemap[0]->set_scroll_rows(512);
nmk16_video_init();
m_videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */
@@ -173,12 +156,12 @@ VIDEO_START_MEMBER(nmk16_state,gunnail)
VIDEO_START_MEMBER(nmk16_state,macross2)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_bg_tilemap1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_bg_tilemap2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg2_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_bg_tilemap3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg3_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<1>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_bg_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<2>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ m_bg_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<3>),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
m_tx_tilemap->set_transparent_pen(15);
@@ -195,7 +178,7 @@ VIDEO_START_MEMBER(nmk16_state,raphero)
VIDEO_START_MEMBER(nmk16_state,bjtwin)
{
- m_bg_tilemap0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::bjtwin_get_bg_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::bjtwin_get_bg_tile_info),this),TILEMAP_SCAN_COLS,8,8,64,32);
nmk16_video_init();
m_videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */
@@ -203,50 +186,6 @@ VIDEO_START_MEMBER(nmk16_state,bjtwin)
}
-
-/***************************************************************************
-
- Memory handlers
-
-***************************************************************************/
-
-WRITE16_MEMBER(nmk16_state::nmk_bgvideoram0_w)
-{
- COMBINE_DATA(&m_nmk_bgvideoram0[offset]);
- m_bg_tilemap0->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_bgvideoram1_w)
-{
- COMBINE_DATA(&m_nmk_bgvideoram1[offset]);
- m_bg_tilemap1->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_bgvideoram2_w)
-{
- COMBINE_DATA(&m_nmk_bgvideoram2[offset]);
- m_bg_tilemap2->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_bgvideoram3_w)
-{
- COMBINE_DATA(&m_nmk_bgvideoram3[offset]);
- m_bg_tilemap3->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_fgvideoram_w)
-{
- COMBINE_DATA(&m_nmk_fgvideoram[offset]);
- m_fg_tilemap->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_txvideoram_w)
-{
- COMBINE_DATA(&m_nmk_txvideoram[offset]);
- m_tx_tilemap->mark_tile_dirty(offset);
-}
-
-
WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
{
// osd_printf_debug("mustang %04x %04x %04x\n",offset,data,mem_mask);
@@ -271,7 +210,7 @@ WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
break;
}
- m_bg_tilemap0->set_scrollx(0,m_mustang_bg_xscroll - m_videoshift);
+ m_bg_tilemap[0]->set_scrollx(0,m_mustang_bg_xscroll - m_videoshift);
}
WRITE16_MEMBER(nmk16_state::bioshipbg_scroll_w)
@@ -281,9 +220,9 @@ WRITE16_MEMBER(nmk16_state::bioshipbg_scroll_w)
m_scroll[offset] = (data >> 8) & 0xff;
if (offset & 2)
- m_bg_tilemap0->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
+ m_bg_tilemap[0]->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
else
- m_bg_tilemap0->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
+ m_bg_tilemap[0]->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
}
}
@@ -294,9 +233,9 @@ WRITE16_MEMBER(nmk16_state::nmk_scroll_w)
m_scroll[offset] = data & 0xff;
if (offset & 2)
- m_bg_tilemap0->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
+ m_bg_tilemap[0]->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
else
- m_bg_tilemap0->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
+ m_bg_tilemap[0]->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
}
}
@@ -317,8 +256,8 @@ WRITE16_MEMBER(nmk16_state::vandyke_scroll_w)
{
m_vscroll[offset] = data;
- m_bg_tilemap0->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8));
- m_bg_tilemap0->set_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
+ m_bg_tilemap[0]->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8));
+ m_bg_tilemap[0]->set_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
}
WRITE16_MEMBER(nmk16_state::vandykeb_scroll_w)
@@ -331,16 +270,16 @@ WRITE16_MEMBER(nmk16_state::vandykeb_scroll_w)
case 6: COMBINE_DATA(&m_vscroll[0]); break;
}
- m_bg_tilemap0->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8));
- m_bg_tilemap0->set_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
+ m_bg_tilemap[0]->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8));
+ m_bg_tilemap[0]->set_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
}
WRITE16_MEMBER(nmk16_state::manybloc_scroll_w)
{
COMBINE_DATA(&m_gunnail_scrollram[offset]);
- m_bg_tilemap0->set_scrollx(0,m_gunnail_scrollram[0x82/2]-m_videoshift);
- m_bg_tilemap0->set_scrolly(0,m_gunnail_scrollram[0xc2/2]);
+ m_bg_tilemap[0]->set_scrollx(0,m_gunnail_scrollram[0x82/2]-m_videoshift);
+ m_bg_tilemap[0]->set_scrolly(0,m_gunnail_scrollram[0xc2/2]);
}
WRITE16_MEMBER(nmk16_state::nmk_flipscreen_w)
@@ -356,10 +295,9 @@ WRITE16_MEMBER(nmk16_state::nmk_tilebank_w)
if (m_bgbank != (data & 0xff))
{
m_bgbank = data & 0xff;
- if (m_bg_tilemap0) m_bg_tilemap0->mark_all_dirty();
- if (m_bg_tilemap1) m_bg_tilemap1->mark_all_dirty();
- if (m_bg_tilemap2) m_bg_tilemap2->mark_all_dirty();
- if (m_bg_tilemap3) m_bg_tilemap3->mark_all_dirty();
+ for (int bank = 0; bank < 4; bank++)
+ if (m_bg_tilemap[bank]) m_bg_tilemap[bank]->mark_all_dirty();
+
}
}
}
@@ -397,12 +335,12 @@ inline void nmk16_state::nmk16_draw_sprite(bitmap_ind16 &bitmap, const rectangle
if(!(spr[0] & 0x0001))
return;
- int sx = (spr[4] & 0x1FF) + m_videoshift;
- int sy = spr[6] & 0x1FF;
+ int sx = (spr[4] & 0x1ff) + m_videoshift;
+ int sy = spr[6] & 0x1ff;
int code = spr[3];
int color = spr[7];
- int w = spr[1] & 0x00F;
- int h = (spr[1] & 0x0F0) >> 4;
+ int w = spr[1] & 0x00f;
+ int h = (spr[1] & 0x0f0) >> 4;
int xx,yy,x;
int delta = 16;
@@ -424,7 +362,7 @@ inline void nmk16_state::nmk16_draw_sprite(bitmap_ind16 &bitmap, const rectangle
code,
color,
flip_screen(), flip_screen(),
- ((x + 16) & 0x1FF) - 16,sy & 0x1FF,15);
+ ((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
code++;
x += delta;
} while (--xx >= 0);
@@ -438,12 +376,12 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
if(!(spr[0] & 0x0001))
return;
- int sx = (spr[4] & 0x1FF) + m_videoshift;
- int sy = spr[6] & 0x1FF;
+ int sx = (spr[4] & 0x1ff) + m_videoshift;
+ int sy = spr[6] & 0x1ff;
int code = spr[3];
int color = spr[7];
- int w = spr[1] & 0x00F;
- int h = (spr[1] & 0x0F0) >> 4;
+ int w = spr[1] & 0x00f;
+ int h = (spr[1] & 0x0f0) >> 4;
int flipy = (spr[1] & 0x200) >> 9;
int flipx = (spr[1] & 0x100) >> 8;
@@ -472,7 +410,7 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
code,
color,
flipx, flipy,
- ((x + 16) & 0x1FF) - 16,sy & 0x1FF,15);
+ ((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
code++;
x += delta * (flipx ? -1 : 1);
} while (--xx >= 0);
@@ -532,9 +470,9 @@ void nmk16_state::nmk16_draw_sprites_flipsupported(bitmap_ind16 &bitmap, const r
int nmk16_state::nmk16_bg_spr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_bg_tilemap0->set_scrollx(0,-m_videoshift);
+ m_bg_tilemap[0]->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites(bitmap,cliprect);
return 0;
@@ -544,7 +482,7 @@ int nmk16_state::nmk16_bg_fg_spr_tx_update(screen_device &screen, bitmap_ind16 &
{
m_tx_tilemap->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites(bitmap,cliprect);
@@ -557,7 +495,7 @@ int nmk16_state::nmk16_bg_spr_tx_update(screen_device &screen, bitmap_ind16 &bit
{
m_tx_tilemap->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites(bitmap,cliprect);
@@ -569,7 +507,7 @@ int nmk16_state::nmk16_bg_sprflip_tx_update(screen_device &screen, bitmap_ind16
{
m_tx_tilemap->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_flipsupported(bitmap,cliprect);
@@ -579,7 +517,6 @@ int nmk16_state::nmk16_bg_sprflip_tx_update(screen_device &screen, bitmap_ind16
int nmk16_state::nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint16_t *tilerom = (uint16_t *)memregion("gfx5")->base();
int scrollx=-(m_bioship_scroll[1] + m_bioship_scroll[0]*256);
int scrolly=-(m_bioship_scroll[3] + m_bioship_scroll[2]*256);
@@ -593,7 +530,7 @@ int nmk16_state::nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap
/* Draw background from tile rom */
for (offs = 0;offs <0x1000;offs++) {
- uint16_t data = tilerom[offs+bank];
+ uint16_t data = m_tilemap_rom[offs+bank];
int numtile = data&0xfff;
int color = (data&0xf000)>>12;
@@ -603,7 +540,7 @@ int nmk16_state::nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap
0,0, /* no flip */
16*sx,16*sy);
- data = tilerom[offs+0x1000+bank];
+ data = m_tilemap_rom[offs+0x1000+bank];
numtile = data&0xfff;
color = (data&0xf000)>>12;
m_gfxdecode->gfx(3)->opaque(*m_background_bitmap,m_background_bitmap->cliprect(),
@@ -618,7 +555,7 @@ int nmk16_state::nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap
}
copyscrollbitmap(bitmap,*m_background_bitmap,1,&scrollx,1,&scrolly,cliprect);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites(bitmap,cliprect);
@@ -630,7 +567,7 @@ int nmk16_state::nmk16_bg_sprswap_tx_update(screen_device &screen, bitmap_ind16
{
m_tx_tilemap->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_swap(bitmap,cliprect, bittbl);
@@ -642,7 +579,7 @@ int nmk16_state::nmk16_bg_sprswapflip_tx_update(screen_device &screen, bitmap_in
{
m_tx_tilemap->set_scrollx(0,-m_videoshift);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_swap_flipsupported(bitmap,cliprect, bittbl);
@@ -665,20 +602,15 @@ int nmk16_state::nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap
while (y1 <= cliprect.max_y)
{
int const yscroll = m_gunnail_scrollramy[0] + m_gunnail_scrollramy[y1];
- int tilemap_bank_select;
- tilemap_t* bg_tilemap = m_bg_tilemap0;
+ tilemap_t* bg_tilemap = m_bg_tilemap[0];
bgclip.min_y = y1;
bgclip.max_y = y1;
-
- tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
- switch (tilemap_bank_select)
+ if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
{
- case 0: if (m_bg_tilemap0) bg_tilemap = m_bg_tilemap0; break;
- case 1: if (m_bg_tilemap1) bg_tilemap = m_bg_tilemap1; break;
- case 2: if (m_bg_tilemap2) bg_tilemap = m_bg_tilemap2; break;
- case 3: if (m_bg_tilemap3) bg_tilemap = m_bg_tilemap3; break;
+ int tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
+ bg_tilemap = m_bg_tilemap[tilemap_bank_select];
}
bg_tilemap->set_scroll_rows(512);
@@ -696,18 +628,14 @@ int nmk16_state::nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap
{
uint16_t yscroll = ((m_gunnail_scrollram[2]&0xff)<<8) | ((m_gunnail_scrollram[3]&0xff)<<0);
uint16_t xscroll = ((m_gunnail_scrollram[0]&0xff)<<8) | ((m_gunnail_scrollram[1]&0xff)<<0);
- int tilemap_bank_select;
- tilemap_t* bg_tilemap = m_bg_tilemap0;
+ tilemap_t* bg_tilemap = m_bg_tilemap[0];
//popmessage( "scroll %04x, %04x", yscroll,xscroll);
- tilemap_bank_select = (xscroll&0x3000)>>12;
- switch (tilemap_bank_select)
+ if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
{
- case 0: if (m_bg_tilemap0) bg_tilemap = m_bg_tilemap0; break;
- case 1: if (m_bg_tilemap1) bg_tilemap = m_bg_tilemap1; break;
- case 2: if (m_bg_tilemap2) bg_tilemap = m_bg_tilemap2; break;
- case 3: if (m_bg_tilemap3) bg_tilemap = m_bg_tilemap3; break;
+ int tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
+ bg_tilemap = m_bg_tilemap[tilemap_bank_select];
}
bg_tilemap->set_scroll_rows(1);
@@ -747,7 +675,7 @@ uint32_t nmk16_state::screen_update_tharrier(screen_device &screen, bitmap_ind16
/* I think the protection device probably copies this to the regs... */
uint16_t tharrier_scroll = m_mainram[0x9f00/2];
- m_bg_tilemap0->set_scrollx(0,tharrier_scroll);
+ m_bg_tilemap[0]->set_scrollx(0,tharrier_scroll);
return nmk16_bg_sprflip_tx_update(screen, bitmap, cliprect);
}
@@ -799,15 +727,15 @@ VIDEO_START_MEMBER(nmk16_state,afega)
m_spriteram_old = make_unique_clear<uint16_t[]>(0x1000/2);
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
- m_bg_tilemap0 = &machine().tilemap().create(
+ m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode,
- tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this),
- tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),
+ tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this),
+ tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode,
- tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),
+ tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),
TILEMAP_SCAN_COLS,
8,8, 32,32);
@@ -821,15 +749,15 @@ VIDEO_START_MEMBER(nmk16_state,grdnstrm)
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
- m_bg_tilemap0 = &machine().tilemap().create(
+ m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode,
tilemap_get_info_delegate(FUNC(nmk16_state::get_tile_info_0_8bit),this),
- tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),
+ tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode,
- tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),
+ tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),
TILEMAP_SCAN_COLS,
8,8, 32,32);
@@ -843,15 +771,15 @@ VIDEO_START_MEMBER(nmk16_state,firehawk)
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
- m_bg_tilemap0 = &machine().tilemap().create(
+ m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode,
tilemap_get_info_delegate(FUNC(nmk16_state::get_tile_info_0_8bit),this),
- tilemap_mapper_delegate(FUNC(nmk16_state::afega_tilemap_scan_pages),this),
+ tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode,
- tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_tx_tile_info),this),
+ tilemap_get_info_delegate(FUNC(nmk16_state::common_get_tx_tile_info),this),
TILEMAP_SCAN_COLS,
8,8, 32,32);
@@ -880,14 +808,14 @@ void nmk16_state::video_update(screen_device &screen, bitmap_ind16 &bitmap, cons
}
- m_bg_tilemap0->set_scrollx(0, m_afega_scroll_0[1] + xoffset);
- m_bg_tilemap0->set_scrolly(0, m_afega_scroll_0[0] + yoffset);
+ m_bg_tilemap[0]->set_scrollx(0, m_afega_scroll[0][1] + xoffset);
+ m_bg_tilemap[0]->set_scrolly(0, m_afega_scroll[0][0] + yoffset);
- m_tx_tilemap->set_scrollx(0, m_afega_scroll_1[1]);
- m_tx_tilemap->set_scrolly(0, m_afega_scroll_1[0]);
+ m_tx_tilemap->set_scrollx(0, m_afega_scroll[1][1]);
+ m_tx_tilemap->set_scrolly(0, m_afega_scroll[1][0]);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_flipsupported(bitmap,cliprect);
@@ -896,10 +824,10 @@ void nmk16_state::video_update(screen_device &screen, bitmap_ind16 &bitmap, cons
void nmk16_state::redhawki_video_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
- m_bg_tilemap0->set_scrollx(0, m_afega_scroll_1[0]&0xff);
- m_bg_tilemap0->set_scrolly(0, m_afega_scroll_1[1]&0xff);
+ m_bg_tilemap[0]->set_scrollx(0, m_afega_scroll[1][0]&0xff);
+ m_bg_tilemap[0]->set_scrolly(0, m_afega_scroll[1][1]&0xff);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_flipsupported(bitmap,cliprect);
}
@@ -911,10 +839,10 @@ uint32_t nmk16_state::screen_update_redhawki(screen_device &screen, bitmap_ind16
uint32_t nmk16_state::screen_update_firehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_bg_tilemap0->set_scrolly(0, m_afega_scroll_1[1] + 0x100);
- m_bg_tilemap0->set_scrollx(0, m_afega_scroll_0[1] - 0x100);
+ m_bg_tilemap[0]->set_scrolly(0, m_afega_scroll[1][1] + 0x100);
+ m_bg_tilemap[0]->set_scrollx(0, m_afega_scroll[0][1] - 0x100);
- m_bg_tilemap0->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites_flipsupported(bitmap,cliprect);