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
This commit is contained in:
cam900 2018-02-18 04:28:01 +09:00 committed by ajrhacker
parent 511aa0aac7
commit 1915a475cc
3 changed files with 241 additions and 319 deletions

View File

@ -3,31 +3,33 @@
// thanks-to:Richard Bush // thanks-to:Richard Bush
/******************************************************************** /********************************************************************
Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295 Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295
Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295 Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295
Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295 Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295 Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295 Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295
Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295 Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295 Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295
Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295 Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295
GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295 GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295 Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295
Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295 Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295
Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295 Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295
S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon) S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
Air Attack 1996 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 Mustang (bootleg) 68000 Z80 YM3812 OKIM6295
Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295 Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295
Saboten Bombers 1992 NMK/Tecmo 68000 2xOKIM6295 Thunder Dragon 3 (bootleg) 1996 Conny 68000 Z80 (Unknown, Single OKIM6295 identified)
Bombjack Twin 1993 NMK 68000 2xOKIM6295
Nouryoku Koujou Iinkai 1995 Tecmo 68000 2xOKIM6295 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, driver by Mirko Buffoni, Richard Bush, Nicola Salmoria, Bryan McPhail,
David Haywood, R. Belmont, Alex Marshal and Luca Elia. 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) 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. 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: NOT BUGS:
- Hacha Mecha Fighter: (BTANB) the bomb graphics are pretty weird when the game - 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. 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) 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); 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) 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; data &= 3;
if (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; COMBINE_DATA(&m_nmk_bgvideoram[Bank][offset]);
if (data != 3) m_bg_tilemap[Bank]->mark_tile_dirty(offset);
membank("okibank2")->set_entry(data);
} }
WRITE16_MEMBER(nmk16_state::afega_soundlatch_w) WRITE16_MEMBER(nmk16_state::nmk_fgvideoram_w)
{ {
if (ACCESSING_BITS_0_7) COMBINE_DATA(&m_nmk_fgvideoram[offset]);
{ m_fg_tilemap->mark_tile_dirty(offset);
m_soundlatch->write(space, 0, data&0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
} }
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) 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(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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_WRITE(vandyke_scroll_w) 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(0x094000, 0x097fff) AM_RAM /* what is this? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") 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(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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_WRITENOP /* just in case... */ 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(0x094000, 0x097fff) AM_RAM /* what is this? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") 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(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(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(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(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(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") 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(0x080202, 0x080203) AM_READ_PORT("IN2")
AM_RANGE(0x088000, 0x0883ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") 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(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(0x09c000, 0x09c7ff) AM_RAM /* Unused txvideoram area? */
AM_RANGE(0x09d000, 0x09d7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") 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") 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(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(0xf400, 0xf400) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xf500, 0xf500) AM_DEVREADWRITE("oki2", 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(0xf600, 0xf600) AM_WRITE(tharrier_oki6295_bankswitch_w<0>)
AM_RANGE(0xf700, 0xf700) AM_WRITE(tharrier_oki6295_bankswitch_1_w) AM_RANGE(0xf700, 0xf700) AM_WRITE(tharrier_oki6295_bankswitch_w<1>)
ADDRESS_MAP_END ADDRESS_MAP_END
ADDRESS_MAP_START(nmk16_state::tharrier_sound_io_map) 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? 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(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") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? 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(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") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END ADDRESS_MAP_END
@ -456,11 +455,11 @@ ADDRESS_MAP_START(nmk16_state::twinactn_map)
AM_RANGE(0x08000e, 0x08000f) AM_NOP AM_RANGE(0x08000e, 0x08000f) AM_NOP
AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w)
AM_RANGE(0x080016, 0x080017) AM_WRITENOP // frame number? 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w)
AM_RANGE(0x08c002, 0x08c087) AM_WRITENOP // ?? 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(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") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END 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(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(0xc4000, 0xc45ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0xc8000, 0xc8007) AM_RAM_WRITE(nmk_scroll_w) 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") AM_RANGE(0xd4000, 0xd47ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(bioshipbg_scroll_w) AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(bioshipbg_scroll_w)
AM_RANGE(0x08c010, 0x08c017) AM_RAM_WRITE(bioship_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(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END ADDRESS_MAP_END
@ -677,7 +676,7 @@ ADDRESS_MAP_START(nmk16_state::hachamf_map)
/* Video Region */ /* Video Region */
AM_RANGE(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") 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(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") AM_RANGE(0x09c000, 0x09c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
/* Main RAM, inc sprites, shared with MCU */ /* Main RAM, inc sprites, shared with MCU */
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") // ram is 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(0x0c001e, 0x0c001f) AM_DEVWRITE8("nmk004", nmk004_device, write, 0x00ff)
AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_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(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") AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END 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(0x0c001e, 0x0c001f) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_mustb_w)
AM_RANGE(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_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(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") AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
ADDRESS_MAP_END ADDRESS_MAP_END
@ -945,10 +944,10 @@ ADDRESS_MAP_START(nmk16_state::ssmissin_map)
// AM_RANGE(0x0c000e, 0x0c000f) AM_READ(??) // AM_RANGE(0x0c000e, 0x0c000f) AM_READ(??)
AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */ AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */
AM_RANGE(0x0c0018, 0x0c0019) AM_WRITE(nmk_tilebank_w) /* Tile Bank ? */ 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(0x0c4000, 0x0c4007) AM_RAM_WRITE(nmk_scroll_w)
AM_RANGE(0x0c8000, 0x0c87ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") 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 AM_RANGE(0x0d0000, 0x0d07ff) AM_MIRROR(0x1800) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram") //mirror for airattck
ADDRESS_MAP_END 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(0x84000, 0x84007) AM_RAM_WRITE(nmk_scroll_w)
AM_RANGE(0x88000, 0x88007) AM_RAM_WRITE(nmk_scroll_2_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(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(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(0x9c000, 0x9c7ff) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0xf0000, 0xfffff) AM_RAM AM_SHARE("mainram") 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(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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x08c000, 0x08c007) AM_RAM_WRITE(nmk_scroll_w) 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(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") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM_WRITE(nmk16_mainram_strange_w) AM_SHARE("mainram")
ADDRESS_MAP_END 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(0x08c000, 0x08c1ff) AM_WRITEONLY AM_SHARE("scrollram")
AM_RANGE(0x08c200, 0x08c3ff) AM_WRITEONLY AM_SHARE("scrollramy") AM_RANGE(0x08c200, 0x08c3ff) AM_WRITEONLY AM_SHARE("scrollramy")
AM_RANGE(0x08c400, 0x08c7ff) AM_WRITEONLY // unknown 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(0x09c000, 0x09cfff) AM_MIRROR(0x001000) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END 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(0x100014, 0x100015) AM_WRITE(nmk_flipscreen_w)
AM_RANGE(0x100016, 0x100017) AM_WRITE(macross2_sound_reset_w) /* Z80 reset */ AM_RANGE(0x100016, 0x100017) AM_WRITE(macross2_sound_reset_w) /* Z80 reset */
AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w) 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(0x120000, 0x1207ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram") AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram")
AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy") AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy")
AM_RANGE(0x130400, 0x1307ff) AM_RAM AM_RANGE(0x130400, 0x1307ff) AM_RAM
AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_SHARE("nmk_bgvideoram1") AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram_w<1>) AM_SHARE("nmk_bgvideoram1")
AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_SHARE("nmk_bgvideoram2") AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram_w<2>) AM_SHARE("nmk_bgvideoram2")
AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_SHARE("nmk_bgvideoram3") 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(0x170000, 0x170fff) AM_MIRROR(0x1000) AM_RAM_WRITE(nmk_txvideoram_w) AM_SHARE("nmk_txvideoram")
AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_SHARE("mainram") 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(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(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(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(0x120000, 0x1207ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram") AM_RANGE(0x130000, 0x1301ff) AM_RAM AM_SHARE("scrollram")
AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy") AM_RANGE(0x130200, 0x1303ff) AM_RAM AM_SHARE("scrollramy")
AM_RANGE(0x130400, 0x1307ff) AM_RAM AM_RANGE(0x130400, 0x1307ff) AM_RAM
AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(nmk_bgvideoram_w<0>) AM_SHARE("nmk_bgvideoram0")
AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram1_w) AM_SHARE("nmk_bgvideoram1") AM_RANGE(0x144000, 0x147fff) AM_RAM_WRITE(nmk_bgvideoram_w<1>) AM_SHARE("nmk_bgvideoram1")
AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram2_w) AM_SHARE("nmk_bgvideoram2") AM_RANGE(0x148000, 0x14bfff) AM_RAM_WRITE(nmk_bgvideoram_w<2>) AM_SHARE("nmk_bgvideoram2")
AM_RANGE(0x14c000, 0x14ffff) AM_RAM_WRITE(nmk_bgvideoram3_w) AM_SHARE("nmk_bgvideoram3") 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(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) ADDRESS_MAP_START(nmk16_state::raphero_sound_mem_map)
AM_RANGE(0x0000, 0x7fff) AM_ROM 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(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
AM_RANGE(0xc800, 0xc800) AM_DEVREADWRITE("oki1", okim6295_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) 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) ADDRESS_MAP_START(nmk16_state::macross2_sound_map)
AM_RANGE(0x0000, 0x7fff) AM_ROM 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(0xa000, 0xa000) AM_READNOP /* IRQ ack? watchdog? */
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe001, 0xe001) AM_WRITE(macross2_sound_bank_w) 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w)
AM_RANGE(0x094002, 0x094003) AM_WRITENOP /* IRQ enable? */ 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") AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END 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(0x088000, 0x0887ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w)
AM_RANGE(0x094002, 0x094003) AM_WRITENOP /* IRQ enable? */ 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(0x0c2010, 0x0c2011) AM_READ_PORT("IN0")
AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1") AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1")
AM_RANGE(0x0c2014, 0x0c2015) AM_READ(atombjt_unkr_r) AM_RANGE(0x0c2014, 0x0c2015) AM_READ(atombjt_unkr_r)
@ -4106,8 +4105,9 @@ MACHINE_CONFIG_START(nmk16_state::vandykeb)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") 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_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
MACHINE_CONFIG_START(nmk16_state::acrobatm) MACHINE_CONFIG_START(nmk16_state::acrobatm)
@ -4259,6 +4259,7 @@ MACHINE_CONFIG_START(nmk16_state::ssmissin)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") 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_OKIM6295_ADD("oki1", 8000000/8, PIN7_HIGH) /* 1 Mhz, pin 7 high */
MCFG_DEVICE_ADDRESS_MAP(0, oki1_map) MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
@ -4562,6 +4563,7 @@ MACHINE_CONFIG_START(nmk16_state::tdragon2)
MCFG_NMK112_ROM1("oki2") MCFG_NMK112_ROM1("oki2")
MACHINE_CONFIG_END MACHINE_CONFIG_END
// TODO : Sound system is different
MACHINE_CONFIG_START(nmk16_state::tdragon3h) MACHINE_CONFIG_START(nmk16_state::tdragon3h)
tdragon2(config); tdragon2(config);
MCFG_CPU_MODIFY("maincpu") 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_OKIM6295_ADD("oki1", 10000000/8, PIN7_LOW) // divider and pin not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -4912,13 +4915,13 @@ DRIVER_INIT_MEMBER(nmk16_state,nmk)
DRIVER_INIT_MEMBER(nmk16_state,banked_audiocpu) 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) DRIVER_INIT_MEMBER(nmk16_state,tharrier)
{ {
membank("okibank1")->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000); m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
membank("okibank2")->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000); m_okibank[1]->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000);
} }
DRIVER_INIT_MEMBER(nmk16_state,hachamf_prot) DRIVER_INIT_MEMBER(nmk16_state,hachamf_prot)
@ -4957,7 +4960,7 @@ DRIVER_INIT_MEMBER(nmk16_state,ssmissin)
{ {
decode_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) 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 */ /* NO NMK004, it has a PIC instead */
READ16_MEMBER(nmk16_state::vandykeb_r){ return 0x0000; } READ16_MEMBER(nmk16_state::vandykeb_r){ return 0x0000; }
DRIVER_INIT_MEMBER(nmk16_state,vandykeb) 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).install_read_handler(0x08000e, 0x08000f, read16_delegate(FUNC(nmk16_state::vandykeb_r),this));
m_maincpu->space(AS_PROGRAM).nop_write(0x08001e, 0x08001f); m_maincpu->space(AS_PROGRAM).nop_write(0x08001e, 0x08001f);
} }
@ -5011,15 +5020,10 @@ READ16_MEMBER(nmk16_state::afega_unknown_r)
} }
template<int Scroll>
WRITE16_MEMBER(nmk16_state::afega_scroll0_w) WRITE16_MEMBER(nmk16_state::afega_scroll_w)
{ {
COMBINE_DATA(&m_afega_scroll_0[offset]); COMBINE_DATA(&m_afega_scroll[Scroll][offset]);
}
WRITE16_MEMBER(nmk16_state::afega_scroll1_w)
{
COMBINE_DATA(&m_afega_scroll_1[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(0x080004, 0x080005) AM_READ_PORT("DSW1") // 2 x DSW
AM_RANGE(0x080012, 0x080013) AM_READ(afega_unknown_r) AM_RANGE(0x080012, 0x080013) AM_READ(afega_unknown_r)
AM_RANGE(0x080000, 0x08001d) AM_WRITEONLY // 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(0x080020, 0x087fff) AM_WRITEONLY //
/**/AM_RANGE(0x084000, 0x084003) AM_RAM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..) 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_scroll1_w) // 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(0x088000, 0x0885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
AM_RANGE(0x088600, 0x08bfff) AM_WRITEONLY // AM_RANGE(0x088600, 0x08bfff) AM_WRITEONLY //
/**/AM_RANGE(0x08c000, 0x08c003) AM_RAM_WRITE(afega_scroll0_w) AM_SHARE("afega_scroll_0") // Scroll 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_scroll1_w) AM_SHARE("afega_scroll_1") // AM_RANGE(0x08c004, 0x08c007) AM_RAM_WRITE(afega_scroll_w<1>) AM_SHARE("afega_scroll_1") //
AM_RANGE(0x08c008, 0x08ffff) AM_WRITEONLY // AM_RANGE(0x08c008, 0x08ffff) AM_WRITEONLY //
/**/AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ? 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(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(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") 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(0x280004, 0x280005) AM_READ_PORT("DSW1") // 2 x DSW
AM_RANGE(0x280012, 0x280013) AM_READ(afega_unknown_r) AM_RANGE(0x280012, 0x280013) AM_READ(afega_unknown_r)
AM_RANGE(0x280000, 0x28001d) AM_WRITEONLY // 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(0x280020, 0x287fff) AM_WRITEONLY //
/**/AM_RANGE(0x284000, 0x284003) AM_RAM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..) 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_scroll1_w) // 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(0x288000, 0x2885ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // Palette
AM_RANGE(0x288600, 0x28bfff) AM_WRITEONLY // AM_RANGE(0x288600, 0x28bfff) AM_WRITEONLY //
/**/AM_RANGE(0x28c000, 0x28c003) AM_RAM_WRITE(afega_scroll0_w) AM_SHARE("afega_scroll_0") // Scroll 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_scroll1_w) AM_SHARE("afega_scroll_1") // AM_RANGE(0x28c004, 0x28c007) AM_RAM_WRITE(afega_scroll_w<1>) AM_SHARE("afega_scroll_1") //
AM_RANGE(0x28c008, 0x28ffff) AM_WRITEONLY // AM_RANGE(0x28c008, 0x28ffff) AM_WRITEONLY //
/**/AM_RANGE(0x290000, 0x293fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") // Layer 0 // ? 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(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(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") 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_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") 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_ADD("ymsnd", XTAL(4'000'000)) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
@ -5327,6 +5332,7 @@ MACHINE_CONFIG_START(nmk16_state::firehawk)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH) MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
@ -5367,6 +5373,7 @@ MACHINE_CONFIG_START(nmk16_state::twinactn)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH) MCFG_OKIM6295_ADD("oki1", 1000000, PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) 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( "10.bin", 0x140000, 0x020000, CRC(388b1abc) SHA1(9d1c43070130672a5e1a41807d796c944b0676ae) ) /* Sprites */
ROM_LOAD16_BYTE( "14.bin", 0x140001, 0x020000, CRC(32eeba37) SHA1(0d0218e864ed647bd33bbe379f0ef76ccefbd06c) ) /* 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( "9.bin", 0x000000, 0x020000, CRC(56bf774f) SHA1(5ece618fff22483adb5dff062dd4ec212aab0f01) )
ROM_LOAD( "8.bin", 0x000000, 0x020000, CRC(89851fcf) SHA1(7b6284cb929059371dd2b5410cd18373834ba76b) ) ROM_LOAD( "8.bin", 0x020000, 0x020000, CRC(89851fcf) SHA1(7b6284cb929059371dd2b5410cd18373834ba76b) )
ROM_LOAD( "7.bin", 0x000000, 0x020000, CRC(d7bf0f6a) SHA1(413713576692676a831949e0d4dc5574da338380) ) ROM_LOAD( "7.bin", 0x040000, 0x020000, CRC(d7bf0f6a) SHA1(413713576692676a831949e0d4dc5574da338380) )
ROM_LOAD( "6.bin", 0x000000, 0x020000, CRC(a7fcf709) SHA1(dc6298b43a472e92e99b8286bd4d26f7e72fd278) ) ROM_LOAD( "6.bin", 0x060000, 0x020000, CRC(a7fcf709) SHA1(dc6298b43a472e92e99b8286bd4d26f7e72fd278) )
ROM_END ROM_END
ROM_START( tharrier ) ROM_START( tharrier )
@ -5800,7 +5807,7 @@ ROM_START( bioship )
ROM_REGION( 0x80000, "gfx4", 0 ) ROM_REGION( 0x80000, "gfx4", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) /* Background */ 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( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) ) ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) )
@ -5836,7 +5843,7 @@ ROM_START( sbsgomo )
ROM_REGION( 0x80000, "gfx4", 0 ) ROM_REGION( 0x80000, "gfx4", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) /* Background */ 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( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) ) 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( "H.27C2001", 0x00000, 0x40000, CRC(0091f4a3) SHA1(025e5f7ff12eaa90c5cfe757c71d58ba7040cba7) )
ROM_LOAD16_BYTE( "L.27C020", 0x00001, 0x40000, CRC(4699c313) SHA1(1851a4b5ad9c2bac230126d195e239a5ebe827f9) ) ROM_LOAD16_BYTE( "L.27C020", 0x00001, 0x40000, CRC(4699c313) SHA1(1851a4b5ad9c2bac230126d195e239a5ebe827f9) )
// Not from this PCB
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
ROM_LOAD( "1.27C1000", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */ ROM_LOAD( "1.27C1000", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
@ -6481,6 +6489,7 @@ ROM_START( tdragon3h )
ROM_LOAD16_WORD_SWAP( "ww930917.7", 0x000000, 0x200000, CRC(b98873cb) SHA1(cc19200865176e940ff68e12de81f029b51c2084) ) /* Sprites */ 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) ) ROM_LOAD16_WORD_SWAP( "ww930918.8", 0x200000, 0x200000, CRC(baee84b2) SHA1(b325b00e6147266dbdc840e03556004531dc2038) )
// Not from this PCB
ROM_REGION( 0x240000, "oki1", 0 ) /* OKIM6295 samples */ ROM_REGION( 0x240000, "oki1", 0 ) /* OKIM6295 samples */
ROM_LOAD( "ww930916.4", 0x040000, 0x200000, CRC(07c35fe6) SHA1(33547bd88764704310f2ef8cf3bfe21ceb56d5b7) ) /* all banked */ 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, 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, 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( 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 */ /* 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 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, 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, 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, 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 ) GAME( 1995, nouryoku, 0, bjtwin, nouryoku, nmk16_state, nmk, ROT0, "Tecmo", "Nouryoku Koujou Iinkai", MACHINE_NO_COCKTAIL )

View File

@ -22,18 +22,17 @@ public:
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_nmk004(*this, "nmk004"), m_nmk004(*this, "nmk004"),
m_soundlatch(*this, "soundlatch"), 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_nmk_txvideoram(*this, "nmk_txvideoram"),
m_mainram(*this, "mainram"), m_mainram(*this, "mainram"),
m_gunnail_scrollram(*this, "scrollram"), m_gunnail_scrollram(*this, "scrollram"),
m_spriteram(*this, "spriteram"), m_spriteram(*this, "spriteram"),
m_nmk_fgvideoram(*this, "nmk_fgvideoram"), m_nmk_fgvideoram(*this, "nmk_fgvideoram"),
m_gunnail_scrollramy(*this, "scrollramy"), m_gunnail_scrollramy(*this, "scrollramy"),
m_nmk_bgvideoram1(*this, "nmk_bgvideoram1"), m_afega_scroll(*this, "afega_scroll_%u", 0),
m_nmk_bgvideoram2(*this, "nmk_bgvideoram2"), m_tilemap_rom(*this, "tilerom"),
m_nmk_bgvideoram3(*this, "nmk_bgvideoram3"), m_audiobank(*this, "audiobank"),
m_afega_scroll_0(*this, "afega_scroll_0"), m_okibank(*this, "okibank%u", 1),
m_afega_scroll_1(*this, "afega_scroll_1"),
m_sprdma_base(0x8000) m_sprdma_base(0x8000)
{} {}
@ -46,19 +45,18 @@ public:
optional_device<nmk004_device> m_nmk004; optional_device<nmk004_device> m_nmk004;
optional_device<generic_latch_8_device> m_soundlatch; 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; optional_shared_ptr<uint16_t> m_nmk_txvideoram;
required_shared_ptr<uint16_t> m_mainram; required_shared_ptr<uint16_t> m_mainram;
optional_shared_ptr<uint16_t> m_gunnail_scrollram; optional_shared_ptr<uint16_t> m_gunnail_scrollram;
optional_shared_ptr<uint8_t> m_spriteram; optional_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint16_t> m_nmk_fgvideoram; optional_shared_ptr<uint16_t> m_nmk_fgvideoram;
optional_shared_ptr<uint16_t> m_gunnail_scrollramy; optional_shared_ptr<uint16_t> m_gunnail_scrollramy;
optional_shared_ptr<uint16_t> m_nmk_bgvideoram1; optional_shared_ptr_array<uint16_t, 2> m_afega_scroll;
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_region_ptr<uint16_t> m_tilemap_rom;
optional_memory_bank m_audiobank;
optional_memory_bank_array<2> m_okibank;
int m_sprdma_base; int m_sprdma_base;
int mask[4*2]; int mask[4*2];
@ -70,10 +68,7 @@ public:
int m_videoshift; int m_videoshift;
int m_bioship_background_bank; int m_bioship_background_bank;
uint8_t m_bioship_scroll[4]; uint8_t m_bioship_scroll[4];
tilemap_t *m_bg_tilemap0; tilemap_t *m_bg_tilemap[4];
tilemap_t *m_bg_tilemap1;
tilemap_t *m_bg_tilemap2;
tilemap_t *m_bg_tilemap3;
tilemap_t *m_tx_tilemap; tilemap_t *m_tx_tilemap;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
std::unique_ptr<bitmap_ind16> m_background_bitmap; std::unique_ptr<bitmap_ind16> m_background_bitmap;
@ -87,27 +82,19 @@ public:
uint8_t m_coin_count[2]; uint8_t m_coin_count[2];
uint8_t m_coin_count_frac[2]; uint8_t m_coin_count_frac[2];
DECLARE_WRITE16_MEMBER(nmk16_mainram_strange_w); DECLARE_WRITE16_MEMBER(nmk16_mainram_strange_w);
DECLARE_WRITE16_MEMBER(ssmissin_sound_w);
DECLARE_WRITE8_MEMBER(ssmissin_soundbank_w); DECLARE_WRITE8_MEMBER(ssmissin_soundbank_w);
DECLARE_WRITE16_MEMBER(tharrier_mcu_control_w); DECLARE_WRITE16_MEMBER(tharrier_mcu_control_w);
DECLARE_READ16_MEMBER(tharrier_mcu_r); DECLARE_READ16_MEMBER(tharrier_mcu_r);
DECLARE_WRITE16_MEMBER(macross2_sound_reset_w); DECLARE_WRITE16_MEMBER(macross2_sound_reset_w);
DECLARE_WRITE16_MEMBER(macross2_sound_command_w);
DECLARE_WRITE8_MEMBER(macross2_sound_bank_w); DECLARE_WRITE8_MEMBER(macross2_sound_bank_w);
DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_0_w); template<int Chip> DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_w);
DECLARE_WRITE8_MEMBER(tharrier_oki6295_bankswitch_1_w);
DECLARE_WRITE16_MEMBER(afega_soundlatch_w);
DECLARE_WRITE16_MEMBER(hachamf_mainram_w); DECLARE_WRITE16_MEMBER(hachamf_mainram_w);
DECLARE_WRITE16_MEMBER(tdragon_mainram_w); DECLARE_WRITE16_MEMBER(tdragon_mainram_w);
DECLARE_READ16_MEMBER(vandykeb_r); DECLARE_READ16_MEMBER(vandykeb_r);
DECLARE_READ16_MEMBER(tdragonb_prot_r); DECLARE_READ16_MEMBER(tdragonb_prot_r);
DECLARE_READ16_MEMBER(afega_unknown_r); DECLARE_READ16_MEMBER(afega_unknown_r);
DECLARE_WRITE16_MEMBER(afega_scroll0_w); template<int Scroll> DECLARE_WRITE16_MEMBER(afega_scroll_w);
DECLARE_WRITE16_MEMBER(afega_scroll1_w); template<int Bank> DECLARE_WRITE16_MEMBER(nmk_bgvideoram_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);
DECLARE_WRITE16_MEMBER(nmk_fgvideoram_w); DECLARE_WRITE16_MEMBER(nmk_fgvideoram_w);
DECLARE_WRITE16_MEMBER(nmk_txvideoram_w); DECLARE_WRITE16_MEMBER(nmk_txvideoram_w);
DECLARE_WRITE16_MEMBER(mustang_scroll_w); DECLARE_WRITE16_MEMBER(mustang_scroll_w);
@ -141,13 +128,11 @@ public:
DECLARE_DRIVER_INIT(redfoxwp2a); DECLARE_DRIVER_INIT(redfoxwp2a);
DECLARE_DRIVER_INIT(grdnstrmg); DECLARE_DRIVER_INIT(grdnstrmg);
DECLARE_DRIVER_INIT(bjtwin); DECLARE_DRIVER_INIT(bjtwin);
TILEMAP_MAPPER_MEMBER(afega_tilemap_scan_pages); DECLARE_DRIVER_INIT(atombjt);
TILE_GET_INFO_MEMBER(macross_get_bg0_tile_info); TILEMAP_MAPPER_MEMBER(tilemap_scan_pages);
TILE_GET_INFO_MEMBER(macross_get_bg1_tile_info); template<int Bank> TILE_GET_INFO_MEMBER(common_get_bg_tile_info);
TILE_GET_INFO_MEMBER(macross_get_bg2_tile_info);
TILE_GET_INFO_MEMBER(macross_get_bg3_tile_info);
TILE_GET_INFO_MEMBER(strahl_get_fg_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(bjtwin_get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info_0_8bit); TILE_GET_INFO_MEMBER(get_tile_info_0_8bit);
DECLARE_VIDEO_START(macross); DECLARE_VIDEO_START(macross);

View File

@ -29,7 +29,7 @@
#define PAGES_PER_TMAP_X (0x10) #define PAGES_PER_TMAP_X (0x10)
#define PAGES_PER_TMAP_Y (0x02) #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 + return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X +
(row % TILES_PER_PAGE_Y) + (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; (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]; int code = m_nmk_bgvideoram[Bank][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];
SET_TILE_INFO_MEMBER(1,(code & 0xfff) + (m_bgbank << 12),code >> 12,0); 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); 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]; int code = m_nmk_txvideoram[tile_index];
SET_TILE_INFO_MEMBER(0, 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) 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; int bank = (code & 0x800) ? 1 : 0;
SET_TILE_INFO_MEMBER(bank, SET_TILE_INFO_MEMBER(bank,
(code & 0x7ff) + ((bank) ? (m_bgbank << 11) : 0), (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) 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, SET_TILE_INFO_MEMBER(1,
code, code,
0, 0,
@ -120,10 +103,10 @@ void nmk16_state::nmk16_video_init()
VIDEO_START_MEMBER(nmk16_state,bioship) 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_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::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,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,32,32);
m_bg_tilemap0->set_transparent_pen(15); m_bg_tilemap[0]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15); m_tx_tilemap->set_transparent_pen(15);
nmk16_video_init(); nmk16_video_init();
@ -135,9 +118,9 @@ VIDEO_START_MEMBER(nmk16_state,bioship)
VIDEO_START_MEMBER(nmk16_state,strahl) 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_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::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::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_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_fg_tilemap->set_transparent_pen(15);
m_tx_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) 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_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::macross_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,32,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,32,32);
m_tx_tilemap->set_transparent_pen(15); m_tx_tilemap->set_transparent_pen(15);
@ -159,11 +142,11 @@ VIDEO_START_MEMBER(nmk16_state,macross)
VIDEO_START_MEMBER(nmk16_state,gunnail) 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_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::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); 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(); nmk16_video_init();
m_videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ 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) 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_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_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_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_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_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_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[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); m_tx_tilemap->set_transparent_pen(15);
@ -195,7 +178,7 @@ VIDEO_START_MEMBER(nmk16_state,raphero)
VIDEO_START_MEMBER(nmk16_state,bjtwin) 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(); nmk16_video_init();
m_videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ 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) WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
{ {
// osd_printf_debug("mustang %04x %04x %04x\n",offset,data,mem_mask); // osd_printf_debug("mustang %04x %04x %04x\n",offset,data,mem_mask);
@ -271,7 +210,7 @@ WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
break; 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) WRITE16_MEMBER(nmk16_state::bioshipbg_scroll_w)
@ -281,9 +220,9 @@ WRITE16_MEMBER(nmk16_state::bioshipbg_scroll_w)
m_scroll[offset] = (data >> 8) & 0xff; m_scroll[offset] = (data >> 8) & 0xff;
if (offset & 2) 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 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; m_scroll[offset] = data & 0xff;
if (offset & 2) 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 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_vscroll[offset] = data;
m_bg_tilemap0->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8)); m_bg_tilemap[0]->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_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
} }
WRITE16_MEMBER(nmk16_state::vandykeb_scroll_w) 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; case 6: COMBINE_DATA(&m_vscroll[0]); break;
} }
m_bg_tilemap0->set_scrollx(0,m_vscroll[0] * 256 + (m_vscroll[1] >> 8)); m_bg_tilemap[0]->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_scrolly(0,m_vscroll[2] * 256 + (m_vscroll[3] >> 8));
} }
WRITE16_MEMBER(nmk16_state::manybloc_scroll_w) WRITE16_MEMBER(nmk16_state::manybloc_scroll_w)
{ {
COMBINE_DATA(&m_gunnail_scrollram[offset]); COMBINE_DATA(&m_gunnail_scrollram[offset]);
m_bg_tilemap0->set_scrollx(0,m_gunnail_scrollram[0x82/2]-m_videoshift); m_bg_tilemap[0]->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_scrolly(0,m_gunnail_scrollram[0xc2/2]);
} }
WRITE16_MEMBER(nmk16_state::nmk_flipscreen_w) WRITE16_MEMBER(nmk16_state::nmk_flipscreen_w)
@ -356,10 +295,9 @@ WRITE16_MEMBER(nmk16_state::nmk_tilebank_w)
if (m_bgbank != (data & 0xff)) if (m_bgbank != (data & 0xff))
{ {
m_bgbank = data & 0xff; m_bgbank = data & 0xff;
if (m_bg_tilemap0) m_bg_tilemap0->mark_all_dirty(); for (int bank = 0; bank < 4; bank++)
if (m_bg_tilemap1) m_bg_tilemap1->mark_all_dirty(); if (m_bg_tilemap[bank]) m_bg_tilemap[bank]->mark_all_dirty();
if (m_bg_tilemap2) m_bg_tilemap2->mark_all_dirty();
if (m_bg_tilemap3) m_bg_tilemap3->mark_all_dirty();
} }
} }
} }
@ -397,12 +335,12 @@ inline void nmk16_state::nmk16_draw_sprite(bitmap_ind16 &bitmap, const rectangle
if(!(spr[0] & 0x0001)) if(!(spr[0] & 0x0001))
return; return;
int sx = (spr[4] & 0x1FF) + m_videoshift; int sx = (spr[4] & 0x1ff) + m_videoshift;
int sy = spr[6] & 0x1FF; int sy = spr[6] & 0x1ff;
int code = spr[3]; int code = spr[3];
int color = spr[7]; int color = spr[7];
int w = spr[1] & 0x00F; int w = spr[1] & 0x00f;
int h = (spr[1] & 0x0F0) >> 4; int h = (spr[1] & 0x0f0) >> 4;
int xx,yy,x; int xx,yy,x;
int delta = 16; int delta = 16;
@ -424,7 +362,7 @@ inline void nmk16_state::nmk16_draw_sprite(bitmap_ind16 &bitmap, const rectangle
code, code,
color, color,
flip_screen(), flip_screen(), flip_screen(), flip_screen(),
((x + 16) & 0x1FF) - 16,sy & 0x1FF,15); ((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
code++; code++;
x += delta; x += delta;
} while (--xx >= 0); } while (--xx >= 0);
@ -438,12 +376,12 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
if(!(spr[0] & 0x0001)) if(!(spr[0] & 0x0001))
return; return;
int sx = (spr[4] & 0x1FF) + m_videoshift; int sx = (spr[4] & 0x1ff) + m_videoshift;
int sy = spr[6] & 0x1FF; int sy = spr[6] & 0x1ff;
int code = spr[3]; int code = spr[3];
int color = spr[7]; int color = spr[7];
int w = spr[1] & 0x00F; int w = spr[1] & 0x00f;
int h = (spr[1] & 0x0F0) >> 4; int h = (spr[1] & 0x0f0) >> 4;
int flipy = (spr[1] & 0x200) >> 9; int flipy = (spr[1] & 0x200) >> 9;
int flipx = (spr[1] & 0x100) >> 8; int flipx = (spr[1] & 0x100) >> 8;
@ -472,7 +410,7 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
code, code,
color, color,
flipx, flipy, flipx, flipy,
((x + 16) & 0x1FF) - 16,sy & 0x1FF,15); ((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
code++; code++;
x += delta * (flipx ? -1 : 1); x += delta * (flipx ? -1 : 1);
} while (--xx >= 0); } 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) 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); nmk16_draw_sprites(bitmap,cliprect);
return 0; 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_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); m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
nmk16_draw_sprites(bitmap,cliprect); 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_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); 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_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); 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) 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 scrollx=-(m_bioship_scroll[1] + m_bioship_scroll[0]*256);
int scrolly=-(m_bioship_scroll[3] + m_bioship_scroll[2]*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 */ /* Draw background from tile rom */
for (offs = 0;offs <0x1000;offs++) { 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 numtile = data&0xfff;
int color = (data&0xf000)>>12; 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 */ 0,0, /* no flip */
16*sx,16*sy); 16*sx,16*sy);
data = tilerom[offs+0x1000+bank]; data = m_tilemap_rom[offs+0x1000+bank];
numtile = data&0xfff; numtile = data&0xfff;
color = (data&0xf000)>>12; color = (data&0xf000)>>12;
m_gfxdecode->gfx(3)->opaque(*m_background_bitmap,m_background_bitmap->cliprect(), 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); 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); 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_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); 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_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); 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) while (y1 <= cliprect.max_y)
{ {
int const yscroll = m_gunnail_scrollramy[0] + m_gunnail_scrollramy[y1]; int const yscroll = m_gunnail_scrollramy[0] + m_gunnail_scrollramy[y1];
int tilemap_bank_select; tilemap_t* bg_tilemap = m_bg_tilemap[0];
tilemap_t* bg_tilemap = m_bg_tilemap0;
bgclip.min_y = y1; bgclip.min_y = y1;
bgclip.max_y = y1; bgclip.max_y = y1;
if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
switch (tilemap_bank_select)
{ {
case 0: if (m_bg_tilemap0) bg_tilemap = m_bg_tilemap0; break; int tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
case 1: if (m_bg_tilemap1) bg_tilemap = m_bg_tilemap1; break; bg_tilemap = m_bg_tilemap[tilemap_bank_select];
case 2: if (m_bg_tilemap2) bg_tilemap = m_bg_tilemap2; break;
case 3: if (m_bg_tilemap3) bg_tilemap = m_bg_tilemap3; break;
} }
bg_tilemap->set_scroll_rows(512); 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 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); 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_tilemap[0];
tilemap_t* bg_tilemap = m_bg_tilemap0;
//popmessage( "scroll %04x, %04x", yscroll,xscroll); //popmessage( "scroll %04x, %04x", yscroll,xscroll);
tilemap_bank_select = (xscroll&0x3000)>>12; if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
switch (tilemap_bank_select)
{ {
case 0: if (m_bg_tilemap0) bg_tilemap = m_bg_tilemap0; break; int tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
case 1: if (m_bg_tilemap1) bg_tilemap = m_bg_tilemap1; break; bg_tilemap = m_bg_tilemap[tilemap_bank_select];
case 2: if (m_bg_tilemap2) bg_tilemap = m_bg_tilemap2; break;
case 3: if (m_bg_tilemap3) bg_tilemap = m_bg_tilemap3; break;
} }
bg_tilemap->set_scroll_rows(1); 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... */ /* I think the protection device probably copies this to the regs... */
uint16_t tharrier_scroll = m_mainram[0x9f00/2]; 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); 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_old = make_unique_clear<uint16_t[]>(0x1000/2);
m_spriteram_old2 = 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, *m_gfxdecode,
tilemap_get_info_delegate(FUNC(nmk16_state::macross_get_bg0_tile_info),this), tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),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); 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_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode, *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, TILEMAP_SCAN_COLS,
8,8, 32,32); 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_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
m_bg_tilemap0 = &machine().tilemap().create( m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode, *m_gfxdecode,
tilemap_get_info_delegate(FUNC(nmk16_state::get_tile_info_0_8bit),this), 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); 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_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode, *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, TILEMAP_SCAN_COLS,
8,8, 32,32); 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_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
m_bg_tilemap0 = &machine().tilemap().create( m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode, *m_gfxdecode,
tilemap_get_info_delegate(FUNC(nmk16_state::get_tile_info_0_8bit),this), 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); 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_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode, *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, TILEMAP_SCAN_COLS,
8,8, 32,32); 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_tilemap[0]->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_scrolly(0, m_afega_scroll[0][0] + yoffset);
m_tx_tilemap->set_scrollx(0, m_afega_scroll_1[1]); 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_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); 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 ) 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_tilemap[0]->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_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); 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) 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_tilemap[0]->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_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); nmk16_draw_sprites_flipsupported(bitmap,cliprect);