summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-06-27 00:24:14 +0900
committer Vas Crabb <cuavas@users.noreply.github.com>2018-06-27 01:24:14 +1000
commitd1356cd5c1eba47a05187dbdd266519079b096f5 (patch)
tree7650e3d4eee8cbb7f73bd96356b7f277b635b21e
parentafa66e6b8d32113a66e819236ff4eca0a0557537 (diff)
nmk16.cpp Updates/Cleanups (#3589)
* nmk16.cpp Updates/Cleanups Cleanup duplicates Move tilemap ram bankswitching into seperated value Add save states Reduce unnecessary routines Implement sprite limitation Simpler bit manipulations Add BAD_DUMP for tdragon3h ROMs when not from PCB Fix acrobatm palette size related to palette RAM size * nmk16.cpp : Add save state for protection values * nmk16.cpp : Reduce some runtime tag lookup * nmk16.cpp : Fix build, Fix naming * nmk16.cpp : Minor cleanup * nmk16.cpp : Sync to current master
-rw-r--r--src/mame/drivers/nmk16.cpp253
-rw-r--r--src/mame/includes/nmk16.h75
-rw-r--r--src/mame/video/nmk16.cpp468
3 files changed, 297 insertions, 499 deletions
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index 4c1c285afdd..f7f51c092ef 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -70,6 +70,8 @@ TODO:
- Thunder Dragon 3 (bootleg of Thunder Dragon 2) :
Sound System isn't hooked up correctly for this set.
+- Verify sprite limits for games when resolution is 384x224
+
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.
@@ -78,6 +80,9 @@ NOT BUGS:
rate limit for making their sound effect. This is normal, it's like this on all
PCB recordings.
+- Sprite number is limited related to screen size and each sprite size.
+ reference : http://upl-gravedigger.boo.jp/pcb_info/pcb_manual_7.jpg
+
----
@@ -268,7 +273,7 @@ READ16_MEMBER(nmk16_state::tharrier_mcu_r)
// the above statement appears to be incorrect, it should also read DSW1 from here, almost certainly
// through the MCU. The weird 0x080202 address where we read IN2 is also probably just a mirror of 0x080002 (here)
- return ~ioport("IN1")->read();
+ return ~m_in_io[1]->read();
}
}
@@ -298,17 +303,12 @@ WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_w)
***************************************************************************/
-template<int Bank>
+template<int Layer>
WRITE16_MEMBER(nmk16_state::nmk_bgvideoram_w)
{
- COMBINE_DATA(&m_nmk_bgvideoram[Bank][offset]);
- m_bg_tilemap[Bank]->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_fgvideoram_w)
-{
- COMBINE_DATA(&m_nmk_fgvideoram[offset]);
- m_fg_tilemap->mark_tile_dirty(offset);
+ COMBINE_DATA(&m_nmk_bgvideoram[Layer][offset]);
+ if ((offset >> 13) == m_tilerambank)
+ m_bg_tilemap[Layer]->mark_tile_dirty(offset & 0x1fff);
}
WRITE16_MEMBER(nmk16_state::nmk_txvideoram_w)
@@ -317,6 +317,28 @@ WRITE16_MEMBER(nmk16_state::nmk_txvideoram_w)
m_tx_tilemap->mark_tile_dirty(offset);
}
+template<int Layer>
+WRITE8_MEMBER(nmk16_state::nmk_scroll_w)
+{
+ m_scroll[Layer][offset] = data;
+
+ if (offset & 2)
+ {
+ m_bg_tilemap[Layer]->set_scrolly(0,((m_scroll[Layer][2] << 8) | m_scroll[Layer][3]));
+ }
+ else
+ {
+ if ((m_nmk_bgvideoram[Layer].bytes() > 0x4000) && (offset == 0))
+ {
+ int newbank = (m_scroll[Layer][0] >> 4) & ((m_nmk_bgvideoram[Layer].bytes() >> 14)-1);
+ if (m_tilerambank != newbank)
+ m_tilerambank = newbank;
+
+ }
+ m_bg_tilemap[Layer]->set_scrollx(0,((m_scroll[Layer][0] << 8) | m_scroll[Layer][1]) - m_videoshift);
+ }
+}
+
/***************************************************************************/
@@ -329,7 +351,7 @@ void nmk16_state::vandyke_map(address_map &map)
map(0x08000a, 0x08000b).portr("DSW2");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c007).w(FUNC(nmk16_state::vandyke_scroll_w));
@@ -349,7 +371,7 @@ void nmk16_state::vandykeb_map(address_map &map)
// map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
map(0x080010, 0x08001d).w(FUNC(nmk16_state::vandykeb_scroll_w)); /* 10, 12, 1a, 1c */
map(0x080016, 0x080017).nopw(); /* IRQ enable? */
- map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
// map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c007).nopw(); /* just in case... */
@@ -367,7 +389,7 @@ void nmk16_state::manybloc_map(address_map &map)
map(0x080004, 0x080005).portr("DSW1");
map(0x080010, 0x080011).nopw(); /* See notes at the top of the driver */
map(0x080012, 0x080013).nopw(); /* See notes at the top of the driver */
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x08001c, 0x08001d).nopw(); /* See notes at the top of the driver */
map(0x08001f, 0x08001f).r("soundlatch2", FUNC(generic_latch_8_device::read)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
map(0x088000, 0x0883ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -391,8 +413,8 @@ void nmk16_tomagic_state::tomagic_map(address_map &map)
map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
- map(0x094001, 0x094001).w("oki1", FUNC(okim6295_device::write));
- map(0x094003, 0x094003).r("oki1", FUNC(okim6295_device::read));
+ map(0x094001, 0x094001).w(m_oki[0], FUNC(okim6295_device::write));
+ map(0x094003, 0x094003).r(m_oki[0], FUNC(okim6295_device::read));
map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0x0f0000, 0x0fffff).ram().share("mainram");
}
@@ -421,12 +443,12 @@ void nmk16_state::tharrier_map(address_map &map)
map(0x08000f, 0x08000f).r("soundlatch2", FUNC(generic_latch_8_device::read)); /* from Z80 */
map(0x080010, 0x080011).w(FUNC(nmk16_state::tharrier_mcu_control_w));
map(0x080012, 0x080013).nopw();
-// map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
-// map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+// map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+// map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x08001f, 0x08001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x080202, 0x080203).portr("IN2");
map(0x088000, 0x0883ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
-// map(0x08c000, 0x08c007).w(FUNC(nmk16_state::nmk_scroll_w));
+// map(0x08c000, 0x08c007).w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x09c000, 0x09c7ff).ram(); /* Unused txvideoram area? */
map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
@@ -438,8 +460,8 @@ void nmk16_state::tharrier_sound_map(address_map &map)
map(0x0000, 0xbfff).rom();
map(0xc000, 0xc7ff).ram();
map(0xf000, 0xf000).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write));
- map(0xf400, 0xf400).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0xf500, 0xf500).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xf400, 0xf400).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xf500, 0xf500).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xf600, 0xf600).w(FUNC(nmk16_state::tharrier_oki6295_bankswitch_w<0>));
map(0xf700, 0xf700).w(FUNC(nmk16_state::tharrier_oki6295_bankswitch_w<1>));
}
@@ -461,7 +483,7 @@ void nmk16_state::mustang_map(address_map &map)
map(0x080004, 0x080005).portr("DSW1");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
map(0x08000e, 0x08000f).nopw();
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_x0016_w)); // frame number?
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -479,7 +501,7 @@ void nmk16_state::mustangb_map(address_map &map)
map(0x080002, 0x080003).portr("IN1");
map(0x080004, 0x080005).portr("DSW1");
map(0x08000e, 0x08000f).noprw();
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).nopw(); // frame number?
map(0x08001e, 0x08001f).w("seibu_sound", FUNC(seibu_sound_device::main_mustb_w));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -490,7 +512,6 @@ void nmk16_state::mustangb_map(address_map &map)
map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::nmk16_mainram_strange_w)).share("mainram");
}
-
void nmk16_state::twinactn_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
@@ -498,7 +519,7 @@ void nmk16_state::twinactn_map(address_map &map)
map(0x080002, 0x080003).portr("IN1");
map(0x080004, 0x080005).portr("DSW1");
map(0x08000e, 0x08000f).noprw();
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).nopw(); // frame number?
map(0x08001f, 0x08001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -509,7 +530,6 @@ void nmk16_state::twinactn_map(address_map &map)
map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::nmk16_mainram_strange_w)).share("mainram");
}
-
void nmk16_state::acrobatm_map(address_map &map)
{
map(0x00000, 0x3ffff).rom();
@@ -519,12 +539,12 @@ void nmk16_state::acrobatm_map(address_map &map)
map(0xc0008, 0xc0009).portr("DSW1");
map(0xc000a, 0xc000b).portr("DSW2");
map(0xc000f, 0xc000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0xc0014, 0xc0015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0xc0015, 0xc0015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0xc0016, 0xc0017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0xc0018, 0xc0019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0xc0019, 0xc0019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0xc001f, 0xc001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0xc4000, 0xc45ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0xc8000, 0xc8007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0xc8000, 0xc8007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0xcc000, 0xcffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0xd4000, 0xd47ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
}
@@ -537,14 +557,14 @@ void nmk16_state::bioship_map(address_map &map)
map(0x080008, 0x080009).portr("DSW1");
map(0x08000a, 0x08000b).portr("DSW2");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
-// map(0xc0014, 0xc0015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+// map(0xc0015, 0xc0015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_bioship_x0016_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
- map(0x084000, 0x084001).w(FUNC(nmk16_state::bioship_bank_w));
+ map(0x084001, 0x084001).w(FUNC(nmk16_state::bioship_bank_w));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x08c000, 0x08c007).ram().w(FUNC(nmk16_state::bioshipbg_scroll_w));
- map(0x08c010, 0x08c017).ram().w(FUNC(nmk16_state::bioship_scroll_w));
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
+ map(0x08c000, 0x08c007).ram().w(FUNC(nmk16_state::nmk_scroll_w<1>)).umask16(0xff00);
+ map(0x08c010, 0x08c017).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0xff00);
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<1>)).share("nmk_bgvideoram1");
map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0x0f0000, 0x0fffff).ram().share("mainram");
}
@@ -717,13 +737,13 @@ void nmk16_state::hachamf_map(address_map &map)
map(0x080008, 0x080009).portr("DSW1");
map(0x08000a, 0x08000b).portr("DSW2");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
/* Video Region */
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x08c000, 0x08c007).w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0x08c000, 0x08c007).w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
/* Main RAM, inc sprites, shared with MCU */
@@ -809,8 +829,8 @@ void nmk16_state::mcu_run(uint8_t dsw_setting)
/*needed because of the uncompatibility of the dsw settings.*/
if(dsw_setting) // Thunder Dragon
{
- dsw[0] = (ioport("DSW2")->read() & 0x7);
- dsw[1] = (ioport("DSW2")->read() & 0x38) >> 3;
+ dsw[0] = (m_dsw_io[1]->read() & 0x7);
+ dsw[1] = (m_dsw_io[1]->read() & 0x38) >> 3;
for(i=0;i<2;i++)
{
switch(dsw[i] & 7)
@@ -828,8 +848,8 @@ void nmk16_state::mcu_run(uint8_t dsw_setting)
}
else // Hacha Mecha Fighter
{
- dsw[0] = (ioport("DSW1")->read() & 0x0700) >> 8;
- dsw[1] = (ioport("DSW1")->read() & 0x3800) >> 11;
+ dsw[0] = (m_dsw_io[0]->read() & 0x0700) >> 8;
+ dsw[1] = (m_dsw_io[0]->read() & 0x3800) >> 11;
for(i=0;i<2;i++)
{
switch(dsw[i] & 7)
@@ -847,7 +867,7 @@ void nmk16_state::mcu_run(uint8_t dsw_setting)
}
/*read the coin port*/
- coin_input = (~(ioport("IN0")->read()));
+ coin_input = (~(m_in_io[0]->read()));
if(coin_input & 0x01)//coin 1
{
@@ -951,11 +971,11 @@ void nmk16_state::tdragon_map(address_map &map)
map(0x0c0008, 0x0c0009).portr("DSW1");
map(0x0c000a, 0x0c000b).portr("DSW2");
map(0x0c000f, 0x0c000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0x0c0014, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
+ map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
map(0x0c0016, 0x0c0017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0x0c0018, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
+ map(0x0c0019, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
map(0x0c001f, 0x0c001f).w(m_nmk004, FUNC(nmk004_device::write));
- map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x0c8000, 0x0c87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
@@ -976,10 +996,10 @@ void nmk16_state::tdragonb_map(address_map &map)
map(0x0c0002, 0x0c0003).portr("IN1");
map(0x0c0008, 0x0c0009).portr("DSW1");
map(0x0c000a, 0x0c000b).portr("DSW2");
- map(0x0c0014, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
- map(0x0c0018, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
+ map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
+ map(0x0c0019, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
map(0x0c001e, 0x0c001f).w("seibu_sound", FUNC(seibu_sound_device::main_mustb_w));
- map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x0c8000, 0x0c87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
@@ -993,10 +1013,10 @@ void nmk16_state::ssmissin_map(address_map &map)
map(0x0c0004, 0x0c0005).portr("IN1");
map(0x0c0006, 0x0c0007).portr("DSW1");
// AM_RANGE(0x0c000e, 0x0c000f) AM_READ(??)
- map(0x0c0014, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
- map(0x0c0018, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
+ map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::nmk_flipscreen_w)); /* Maybe */
+ map(0x0c0019, 0x0c0019).w(FUNC(nmk16_state::nmk_tilebank_w)); /* Tile Bank ? */
map(0x0c001f, 0x0c001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
- map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x0c8000, 0x0c87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x0d0000, 0x0d07ff).mirror(0x1800).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram"); //mirror for airattck
@@ -1007,7 +1027,7 @@ void nmk16_state::ssmissin_sound_map(address_map &map)
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0x9000, 0x9000).w(FUNC(nmk16_state::ssmissin_soundbank_w));
- map(0x9800, 0x9800).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x9800, 0x9800).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xa000, 0xa000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
@@ -1031,14 +1051,14 @@ void nmk16_state::strahl_map(address_map &map)
map(0x80008, 0x80009).portr("DSW1");
map(0x8000a, 0x8000b).portr("DSW2");
map(0x8000f, 0x8000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0x80014, 0x80015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x80015, 0x80015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x80016, 0x80017).w(FUNC(nmk16_state::nmk16_x0016_w));
map(0x8001f, 0x8001f).w(m_nmk004, FUNC(nmk004_device::write));
- map(0x84000, 0x84007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
- map(0x88000, 0x88007).ram().w(FUNC(nmk16_state::nmk_scroll_2_w));
+ map(0x84000, 0x84007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
+ map(0x88000, 0x88007).ram().w(FUNC(nmk16_state::nmk_scroll_w<1>)).umask16(0x00ff);
map(0x8c000, 0x8c7ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x90000, 0x93fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
- map(0x94000, 0x97fff).ram().w(FUNC(nmk16_state::nmk_fgvideoram_w)).share("nmk_fgvideoram");
+ map(0x94000, 0x97fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<1>)).share("nmk_bgvideoram1");
map(0x9c000, 0x9c7ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0xf0000, 0xfffff).ram().share("mainram");
}
@@ -1051,12 +1071,12 @@ void nmk16_state::macross_map(address_map &map)
map(0x080008, 0x080009).portr("DSW1");
map(0x08000a, 0x08000b).portr("DSW2");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x08c000, 0x08c007).ram().w(FUNC(nmk16_state::nmk_scroll_w));
+ map(0x08c000, 0x08c007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::nmk16_mainram_strange_w)).share("mainram");
@@ -1070,9 +1090,9 @@ void nmk16_state::gunnail_map(address_map &map)
map(0x080008, 0x080009).portr("DSW1");
map(0x08000a, 0x08000b).portr("DSW2");
map(0x08000f, 0x08000f).r(m_nmk004, FUNC(nmk004_device::read));
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk16_x0016_w));
- map(0x080018, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
@@ -1091,21 +1111,13 @@ void nmk16_state::macross2_map(address_map &map)
map(0x100008, 0x100009).portr("DSW1");
map(0x10000a, 0x10000b).portr("DSW2");
map(0x10000f, 0x10000f).r("soundlatch2", FUNC(generic_latch_8_device::read)); /* from Z80 */
- map(0x100014, 0x100015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x100015, 0x100015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x100016, 0x100017).w(FUNC(nmk16_state::macross2_sound_reset_w)); /* Z80 reset */
- map(0x100018, 0x100019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x100019, 0x100019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x10001f, 0x10001f).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* to Z80 */
map(0x120000, 0x1207ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
-
- map(0x130000, 0x1301ff).ram().share("scrollram");
- map(0x130200, 0x1303ff).ram().share("scrollramy");
- map(0x130400, 0x1307ff).ram();
-
- map(0x140000, 0x143fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
- map(0x144000, 0x147fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<1>)).share("nmk_bgvideoram1");
- map(0x148000, 0x14bfff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<2>)).share("nmk_bgvideoram2");
- map(0x14c000, 0x14ffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<3>)).share("nmk_bgvideoram3");
-
+ map(0x130000, 0x130007).ram().w(FUNC(nmk16_state::nmk_scroll_w<0>)).umask16(0x00ff);
+ map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0x1f0000, 0x1fffff).ram().share("mainram");
}
@@ -1125,22 +1137,15 @@ void nmk16_state::raphero_map(address_map &map)
map(0x100008, 0x100009).portr("DSW1");
map(0x10000a, 0x10000b).portr("DSW2");
map(0x10000f, 0x10000f).r("soundlatch2", FUNC(generic_latch_8_device::read)); /* from Z80 */
- map(0x100014, 0x100015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x100015, 0x100015).w(FUNC(nmk16_state::nmk_flipscreen_w));
map(0x100016, 0x100017).nopw(); /* IRQ enable or z80 sound reset like in Macross 2? */
- map(0x100018, 0x100019).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x100019, 0x100019).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x10001f, 0x10001f).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* to Z80 */
map(0x120000, 0x1207ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
-
- map(0x130000, 0x1301ff).ram().share("scrollram");
+ map(0x130000, 0x1301ff).ram().w(FUNC(nmk16_state::raphero_scroll_w)).share("scrollram");
map(0x130200, 0x1303ff).ram().share("scrollramy");
map(0x130400, 0x1307ff).ram();
-
- map(0x140000, 0x143fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
- map(0x144000, 0x147fff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<1>)).share("nmk_bgvideoram1");
- map(0x148000, 0x14bfff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<2>)).share("nmk_bgvideoram2");
- map(0x14c000, 0x14ffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<3>)).share("nmk_bgvideoram3");
-
-
+ map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::nmk_txvideoram_w)).share("nmk_txvideoram");
map(0x1f0000, 0x1fffff).ram().share("mainram");
}
@@ -1150,8 +1155,8 @@ void nmk16_state::raphero_sound_mem_map(address_map &map)
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("audiobank");
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
- map(0xc800, 0xc800).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0xc808, 0xc808).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xc800, 0xc800).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xc808, 0xc808).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xc810, 0xc817).w("nmk112", FUNC(nmk112_device::okibank_w));
map(0xd000, 0xd000).w(FUNC(nmk16_state::macross2_sound_bank_w));
map(0xd800, 0xd800).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write)); // main cpu
@@ -1172,8 +1177,8 @@ void nmk16_state::macross2_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
- map(0x80, 0x80).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x88, 0x88).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x80, 0x80).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x88, 0x88).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x90, 0x97).w("nmk112", FUNC(nmk112_device::okibank_w));
}
@@ -1184,12 +1189,12 @@ void nmk16_state::bjtwin_map(address_map &map)
map(0x080002, 0x080003).portr("IN1");
map(0x080008, 0x080009).portr("DSW1");
map(0x08000a, 0x08000b).portr("DSW2");
- map(0x080014, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
- map(0x084001, 0x084001).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x084011, 0x084011).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::nmk_flipscreen_w));
+ map(0x084001, 0x084001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x084011, 0x084011).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x084020, 0x08402f).w("nmk112", FUNC(nmk112_device::okibank_w)).umask16(0x00ff);
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x094000, 0x094001).w(FUNC(nmk16_state::nmk_tilebank_w));
+ map(0x094001, 0x094001).w(FUNC(nmk16_state::nmk_tilebank_w));
map(0x094002, 0x094003).nopw(); /* IRQ enable? */
map(0x09c000, 0x09cfff).mirror(0x1000).ram().w(FUNC(nmk16_state::nmk_bgvideoram_w<0>)).share("nmk_bgvideoram0");
map(0x0f0000, 0x0fffff).ram().share("mainram");
@@ -3813,7 +3818,6 @@ static INPUT_PORTS_START( dolmen )
INPUT_PORTS_END
-
static const gfx_layout charlayout =
{
8,8,
@@ -3861,8 +3865,6 @@ static GFXDECODE_START( gfx_bjtwin )
GFXDECODE_END
-
-
static GFXDECODE_START( gfx_bioship )
GFXDECODE_ENTRY( "fgtile", 0, charlayout, 0x300, 16 ) /* color 0x300-0x3ff */
GFXDECODE_ENTRY( "bgtile", 0, tilelayout, 0x100, 16 ) /* color 0x100-0x1ff */
@@ -3959,8 +3961,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::nmk16_scanline)
MCFG_SCREEN_PALETTE("palette")
-
-
MACHINE_CONFIG_START(nmk16_state::tharrier)
/* basic machine hardware */
@@ -3976,7 +3976,6 @@ MACHINE_CONFIG_START(nmk16_state::tharrier)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_tharrier)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tharrier)
MCFG_PALETTE_ADD("palette", 512)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4015,7 +4014,6 @@ MACHINE_CONFIG_START(nmk16_state::mustang)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4058,7 +4056,6 @@ MACHINE_CONFIG_START(nmk16_state::mustangb)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4094,8 +4091,7 @@ MACHINE_CONFIG_START(nmk16_state::bioship)
/* video hardware */
NMK_HACKY_SCREEN_LOWRES
- MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_bioship)
-
+ MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_strahl)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_bioship)
MCFG_PALETTE_ADD("palette", 1024)
@@ -4136,7 +4132,6 @@ MACHINE_CONFIG_START(nmk16_state::vandyke)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4179,7 +4174,6 @@ MACHINE_CONFIG_START(nmk16_state::vandykeb)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4205,9 +4199,8 @@ MACHINE_CONFIG_START(nmk16_state::acrobatm)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
- MCFG_PALETTE_ADD("palette", 1024)
+ MCFG_PALETTE_ADD("palette", 768)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx)
MCFG_VIDEO_START_OVERRIDE(nmk16_state,macross)
@@ -4249,7 +4242,6 @@ MACHINE_CONFIG_START(nmk16_state::tdragonb) /* bootleg using Raiden sound har
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4284,7 +4276,6 @@ MACHINE_CONFIG_START(nmk16_state::tdragon)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4332,7 +4323,6 @@ MACHINE_CONFIG_START(nmk16_state::ssmissin)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4401,7 +4391,6 @@ MACHINE_CONFIG_START(nmk16_state::hachamf)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4447,7 +4436,6 @@ MACHINE_CONFIG_START(nmk16_state::macross)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4487,7 +4475,6 @@ MACHINE_CONFIG_START(nmk16_state::blkheart)
NMK_HACKY_SCREEN_LOWRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4525,7 +4512,7 @@ MACHINE_CONFIG_START(nmk16_state::gunnail)
/* video hardware */
NMK_HACKY_SCREEN_HIRES
- MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_gunnail)
+ MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
@@ -4568,8 +4555,7 @@ MACHINE_CONFIG_START(nmk16_state::macross2)
/* video hardware */
NMK_HACKY_SCREEN_HIRES
- MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_gunnail)
-
+ MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross2)
MCFG_PALETTE_ADD("palette", 1024)
@@ -4616,7 +4602,6 @@ MACHINE_CONFIG_START(nmk16_state::tdragon2)
NMK_HACKY_SCREEN_HIRES
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_tdragon2)
-
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross2)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@@ -4674,7 +4659,7 @@ MACHINE_CONFIG_START(nmk16_state::raphero)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
- MCFG_VIDEO_START_OVERRIDE(nmk16_state,raphero)
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,gunnail)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4817,7 +4802,7 @@ MACHINE_CONFIG_START(nmk16_tomagic_state::tomagic)
/* video hardware */
NMK_HACKY_SCREEN_HIRES
- MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_gunnail)
+ MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_macross)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_macross)
MCFG_PALETTE_ADD("palette", 1024)
@@ -4998,6 +4983,13 @@ void nmk16_state::decode_ssmissin()
}
}
+void nmk16_state::save_protregs()
+{
+ save_item(NAME(m_input_pressed));
+ save_item(NAME(m_start_helper));
+ save_item(NAME(m_coin_count));
+ save_item(NAME(m_coin_count_frac));
+}
void nmk16_state::init_nmk()
{
@@ -5013,6 +5005,7 @@ void nmk16_state::init_tharrier()
{
m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
m_okibank[1]->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000);
+ save_item(NAME(m_prot_count));
}
void nmk16_state::init_hachamf_prot()
@@ -5026,6 +5019,7 @@ void nmk16_state::init_hachamf_prot()
rom[0x04aa/2] = 0x4e71;
m_maincpu->space(AS_PROGRAM).install_write_handler(0x0f0000, 0x0fffff, write16_delegate(FUNC(nmk16_state::hachamf_mainram_w),this));
+ save_protregs();
}
void nmk16_state::init_tdragonb()
@@ -5045,6 +5039,7 @@ void nmk16_state::init_tdragon_prot()
rom[0x04aa/2] = 0x4e71;
m_maincpu->space(AS_PROGRAM).install_write_handler(0x0b0000, 0x0bffff, write16_delegate(FUNC(nmk16_state::tdragon_mainram_w),this));
+ save_protregs();
}
void nmk16_state::init_ssmissin()
@@ -5192,9 +5187,9 @@ void nmk16_state::firehawk_map(address_map &map)
WRITE8_MEMBER(nmk16_state::spec2k_oki1_banking_w)
{
if(data == 0xfe)
- m_oki2->set_rom_bank(0);
+ m_oki[1]->set_rom_bank(0);
else if(data == 0xff)
- m_oki2->set_rom_bank(1);
+ m_oki[1]->set_rom_bank(1);
}
void nmk16_state::afega_sound_cpu(address_map &map)
@@ -5205,7 +5200,7 @@ void nmk16_state::afega_sound_cpu(address_map &map)
map(0xf000, 0xf7ff).ram(); // RAM
map(0xf800, 0xf800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU
map(0xf808, 0xf809).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); // YM2151
- map(0xf80a, 0xf80a).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295
+ map(0xf80a, 0xf80a).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295
}
void nmk16_state::firehawk_sound_cpu(address_map &map)
@@ -5215,14 +5210,14 @@ void nmk16_state::firehawk_sound_cpu(address_map &map)
map(0xf800, 0xffff).ram(); // not used, only tested
map(0xfff0, 0xfff0).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xfff2, 0xfff2).w(FUNC(nmk16_state::spec2k_oki1_banking_w));
- map(0xfff8, 0xfff8).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0xfffa, 0xfffa).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xfff8, 0xfff8).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xfffa, 0xfffa).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
WRITE8_MEMBER(nmk16_state::twinactn_oki_bank_w)
{
- m_oki1->set_rom_bank(data & 3);
+ m_oki[0]->set_rom_bank(data & 3);
if (data & (~3))
logerror("%s: invalid oki bank %02x\n", machine().describe_context(), data);
@@ -5235,7 +5230,7 @@ void nmk16_state::twinactn_sound_cpu(address_map &map)
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0x9000, 0x9000).w(FUNC(nmk16_state::twinactn_oki_bank_w));
- map(0x9800, 0x9800).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x9800, 0x9800).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xa000, 0xa000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU
}
@@ -5383,7 +5378,7 @@ MACHINE_CONFIG_START(nmk16_state::grdnstrm)
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_grdnstrm)
- MCFG_VIDEO_START_OVERRIDE(nmk16_state,firehawk)
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,grdnstrm)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_firehawk)
MACHINE_CONFIG_END
@@ -5429,7 +5424,7 @@ MACHINE_CONFIG_START(nmk16_state::firehawk)
MCFG_PALETTE_ADD("palette", 768)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
- MCFG_VIDEO_START_OVERRIDE(nmk16_state,firehawk)
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,grdnstrm)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6578,7 +6573,7 @@ ROM_START( tdragon3h )
// Not from this PCB
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "1.27c1000", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
+ ROM_LOAD( "1.27c1000", 0x00000, 0x20000, BAD_DUMP CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "12.27c1000", 0x000000, 0x020000, CRC(f809d616) SHA1(c6a4d776fee770ec197204b855b85bcc719469a5) ) /* 8x8 tiles */
@@ -6594,10 +6589,10 @@ ROM_START( tdragon3h )
// Not from this PCB
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, BAD_DUMP CRC(07c35fe6) SHA1(33547bd88764704310f2ef8cf3bfe21ceb56d5b7) ) /* all banked */
ROM_REGION( 0x240000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "ww930915.3", 0x040000, 0x200000, CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) /* all banked */
+ ROM_LOAD( "ww930915.3", 0x040000, 0x200000, BAD_DUMP CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) /* all banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) /* unknown */
diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h
index c10d57c0540..efd277820ae 100644
--- a/src/mame/includes/nmk16.h
+++ b/src/mame/includes/nmk16.h
@@ -13,45 +13,42 @@
class nmk16_state : public driver_device, protected seibu_sound_common
{
public:
- nmk16_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ nmk16_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_oki1(*this, "oki1"),
- m_oki2(*this, "oki2"),
+ m_oki(*this, "oki%u", 1U),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_nmk004(*this, "nmk004"),
m_soundlatch(*this, "soundlatch"),
- m_nmk_bgvideoram(*this, "nmk_bgvideoram%u", 0),
+ m_nmk_bgvideoram(*this, "nmk_bgvideoram%u", 0U),
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_afega_scroll(*this, "afega_scroll_%u", 0),
+ m_afega_scroll(*this, "afega_scroll_%u", 0U),
m_tilemap_rom(*this, "tilerom"),
m_audiobank(*this, "audiobank"),
- m_okibank(*this, "okibank%u", 1),
- m_sprdma_base(0x8000)
- {}
+ m_okibank(*this, "okibank%u", 1U),
+ m_dsw_io(*this, "DSW%u", 1U),
+ m_in_io(*this, "IN%u", 0U),
+ m_sprdma_base(0x8000) { }
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
- optional_device<okim6295_device> m_oki1;
- optional_device<okim6295_device> m_oki2;
+ optional_device_array<okim6295_device, 2> m_oki;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<nmk004_device> m_nmk004;
optional_device<generic_latch_8_device> m_soundlatch;
- optional_shared_ptr_array<uint16_t, 4> m_nmk_bgvideoram;
+ optional_shared_ptr_array<uint16_t, 2> 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_array<uint16_t, 2> m_afega_scroll;
@@ -59,23 +56,23 @@ public:
optional_memory_bank m_audiobank;
optional_memory_bank_array<2> m_okibank;
+ optional_ioport_array<2> m_dsw_io;
+ optional_ioport_array<3> m_in_io;
+
+ int m_sprclk;
+ int m_sprlimit;
+ int m_tilerambank;
int m_sprdma_base;
int mask[4*2];
- int m_simple_scroll;
- int m_redraw_bitmap;
std::unique_ptr<uint16_t[]> m_spriteram_old;
std::unique_ptr<uint16_t[]> m_spriteram_old2;
int m_bgbank;
int m_videoshift;
int m_bioship_background_bank;
- uint8_t m_bioship_scroll[4];
- tilemap_t *m_bg_tilemap[4];
+ tilemap_t *m_bg_tilemap[2];
tilemap_t *m_tx_tilemap;
- tilemap_t *m_fg_tilemap;
- std::unique_ptr<bitmap_ind16> m_background_bitmap;
int m_mustang_bg_xscroll;
- uint8_t m_scroll[4];
- uint8_t m_scroll_2[4];
+ uint8_t m_scroll[2][4];
uint16_t m_vscroll[4];
int m_prot_count;
uint8_t m_input_pressed;
@@ -95,24 +92,22 @@ public:
DECLARE_READ16_MEMBER(tdragonb_prot_r);
DECLARE_READ16_MEMBER(afega_unknown_r);
template<int Scroll> DECLARE_WRITE16_MEMBER(afega_scroll_w);
- template<int Bank> DECLARE_WRITE16_MEMBER(nmk_bgvideoram_w);
- DECLARE_WRITE16_MEMBER(nmk_fgvideoram_w);
+ template<int Layer> DECLARE_WRITE16_MEMBER(nmk_bgvideoram_w);
DECLARE_WRITE16_MEMBER(nmk_txvideoram_w);
DECLARE_WRITE16_MEMBER(mustang_scroll_w);
- DECLARE_WRITE16_MEMBER(bioshipbg_scroll_w);
- DECLARE_WRITE16_MEMBER(nmk_scroll_w);
- DECLARE_WRITE16_MEMBER(nmk_scroll_2_w);
+ DECLARE_WRITE16_MEMBER(raphero_scroll_w);
+ template<int Layer> DECLARE_WRITE8_MEMBER(nmk_scroll_w);
DECLARE_WRITE16_MEMBER(vandyke_scroll_w);
DECLARE_WRITE16_MEMBER(vandykeb_scroll_w);
DECLARE_WRITE16_MEMBER(manybloc_scroll_w);
- DECLARE_WRITE16_MEMBER(nmk_flipscreen_w);
- DECLARE_WRITE16_MEMBER(nmk_tilebank_w);
- DECLARE_WRITE16_MEMBER(bioship_scroll_w);
- DECLARE_WRITE16_MEMBER(bioship_bank_w);
+ DECLARE_WRITE8_MEMBER(nmk_flipscreen_w);
+ DECLARE_WRITE8_MEMBER(nmk_tilebank_w);
+ DECLARE_WRITE8_MEMBER(bioship_bank_w);
DECLARE_WRITE8_MEMBER(spec2k_oki1_banking_w);
DECLARE_WRITE8_MEMBER(twinactn_oki_bank_w);
DECLARE_WRITE16_MEMBER(nmk16_x0016_w);
DECLARE_WRITE16_MEMBER(nmk16_bioship_x0016_w);
+ void save_protregs();
void init_nmk();
void init_tharrier();
void init_vandykeb();
@@ -130,9 +125,9 @@ public:
void init_bjtwin();
void 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);
+ template<int Layer, int Gfx> TILE_GET_INFO_MEMBER(common_get_bg_tile_info);
TILE_GET_INFO_MEMBER(common_get_tx_tile_info);
+ TILE_GET_INFO_MEMBER(bioship_get_bg_tile_info);
TILE_GET_INFO_MEMBER(bjtwin_get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info_0_8bit);
DECLARE_VIDEO_START(macross);
@@ -140,17 +135,13 @@ public:
DECLARE_VIDEO_START(strahl);
DECLARE_VIDEO_START(gunnail);
DECLARE_VIDEO_START(macross2);
- DECLARE_VIDEO_START(raphero);
DECLARE_VIDEO_START(bjtwin);
DECLARE_VIDEO_START(afega);
- DECLARE_VIDEO_START(firehawk);
DECLARE_VIDEO_START(grdnstrm);
uint32_t screen_update_tharrier(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_manybloc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_macross(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_bioship(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_strahl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_gunnail(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_tdragon2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_bjtwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_afega(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -169,14 +160,8 @@ public:
void nmk16_draw_sprites_swap_flipsupported(bitmap_ind16 &bitmap, const rectangle &cliprect, int *bittbl);
void nmk16_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void nmk16_draw_sprites_flipsupported(bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bg_spr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bg_fg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- int nmk16_bg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8]);
- int nmk16_bg_sprswapflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8]);
- int nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8]);
+ void nmk16_bg_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer = 0);
+ void nmk16_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void video_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect,int dsw_flipscreen,int xoffset, int yoffset,int attr_mask);
void redhawki_video_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
void mcu_run(uint8_t dsw_setting);
diff --git a/src/mame/video/nmk16.cpp b/src/mame/video/nmk16.cpp
index f806a7765e9..061fcf39509 100644
--- a/src/mame/video/nmk16.cpp
+++ b/src/mame/video/nmk16.cpp
@@ -24,35 +24,23 @@
***************************************************************************/
+/*
#define TILES_PER_PAGE_X (0x10)
#define TILES_PER_PAGE_Y (0x10)
#define PAGES_PER_TMAP_X (0x10)
#define PAGES_PER_TMAP_Y (0x02)
+*/
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) +
-
- (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y +
- (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y;
+ return (row & 0xf) | ((col & 0xff) << 4) | ((row & 0x10) << 8);
}
-template<int Bank>
+template<int Layer, int Gfx>
TILE_GET_INFO_MEMBER(nmk16_state::common_get_bg_tile_info)
{
- 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::strahl_get_fg_tile_info)
-{
- int code = m_nmk_fgvideoram[tile_index];
- SET_TILE_INFO_MEMBER(3,
- (code & 0xfff),
- code >> 12,
- 0);
+ int code = m_nmk_bgvideoram[Layer][(m_tilerambank << 13)|tile_index];
+ SET_TILE_INFO_MEMBER(Gfx,(code & 0xfff) | (m_bgbank << 12),code >> 12,0);
}
TILE_GET_INFO_MEMBER(nmk16_state::common_get_tx_tile_info)
@@ -64,6 +52,12 @@ TILE_GET_INFO_MEMBER(nmk16_state::common_get_tx_tile_info)
0);
}
+TILE_GET_INFO_MEMBER(nmk16_state::bioship_get_bg_tile_info)
+{
+ int code = m_tilemap_rom[(m_bioship_background_bank << 13) | tile_index]; // ROM Based
+ SET_TILE_INFO_MEMBER(3,(code & 0xfff),code >> 12,0);
+}
+
TILE_GET_INFO_MEMBER(nmk16_state::bjtwin_get_bg_tile_info)
{
int code = m_nmk_bgvideoram[0][tile_index];
@@ -96,43 +90,41 @@ void nmk16_state::nmk16_video_init()
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
m_videoshift = 0; /* 256x224 screen, no shift */
- m_background_bitmap = nullptr;
- m_simple_scroll = 1;
+ m_tilerambank = 0;
+ m_sprclk = 0;
+
+ save_pointer(NAME(m_spriteram_old), 0x1000/2);
+ save_pointer(NAME(m_spriteram_old2), 0x1000/2);
+ save_item(NAME(m_bgbank));
+ save_item(NAME(m_mustang_bg_xscroll));
+ save_item(NAME(m_scroll[0]));
+ save_item(NAME(m_scroll[1]));
+ save_item(NAME(m_vscroll));
+ save_item(NAME(m_tilerambank));
+ save_item(NAME(m_sprclk));
}
VIDEO_START_MEMBER(nmk16_state,bioship)
{
- 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_sprlimit = 384 * 263;
+ // ROM Based Tilemap
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(nmk16_state::bioship_get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,256,32);
+ m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&nmk16_state::common_get_bg_tile_info<1, 1>, "bg1_gfx1",this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,256,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_tilemap[0]->set_transparent_pen(15);
+ m_bg_tilemap[1]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15);
nmk16_video_init();
- m_background_bitmap = std::make_unique<bitmap_ind16>(8192,512);
m_bioship_background_bank=0;
- m_redraw_bitmap = 1;
-
-}
-
-VIDEO_START_MEMBER(nmk16_state,strahl)
-{
- 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);
-
- m_sprdma_base = 0xf000;
-
- nmk16_video_init();
+ save_item(NAME(m_bioship_background_bank));
}
VIDEO_START_MEMBER(nmk16_state,macross)
{
- 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_sprlimit = 384 * 263;
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&nmk16_state::common_get_bg_tile_info<0, 1>, "bg0_gfx1",this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,256,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);
@@ -140,27 +132,19 @@ VIDEO_START_MEMBER(nmk16_state,macross)
nmk16_video_init();
}
-VIDEO_START_MEMBER(nmk16_state,gunnail)
+VIDEO_START_MEMBER(nmk16_state,strahl)
{
- 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);
+ VIDEO_START_CALL_MEMBER( macross );
+ m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&nmk16_state::common_get_bg_tile_info<1, 3>, "bg1_gfx3",this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,256,32);
+ m_bg_tilemap[1]->set_transparent_pen(15);
- m_tx_tilemap->set_transparent_pen(15);
- m_bg_tilemap[0]->set_scroll_rows(512);
-
- nmk16_video_init();
- m_videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */
- /* from the other side of the tilemap (!) */
- m_simple_scroll = 0;
+ m_sprdma_base = 0xf000;
}
VIDEO_START_MEMBER(nmk16_state,macross2)
{
- 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_sprlimit = 512 * 263; // not verified
+ m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&nmk16_state::common_get_bg_tile_info<0, 1>, "bg0_gfx1",this), tilemap_mapper_delegate(FUNC(nmk16_state::tilemap_scan_pages),this),16,16,256,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);
@@ -170,14 +154,15 @@ VIDEO_START_MEMBER(nmk16_state,macross2)
/* from the other side of the tilemap (!) */
}
-VIDEO_START_MEMBER(nmk16_state,raphero)
+VIDEO_START_MEMBER(nmk16_state,gunnail)
{
VIDEO_START_CALL_MEMBER( macross2 );
- m_simple_scroll = 0;
+ m_bg_tilemap[0]->set_scroll_rows(512);
}
VIDEO_START_MEMBER(nmk16_state,bjtwin)
{
+ m_sprlimit = 512 * 263; // not verified
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();
@@ -185,7 +170,6 @@ VIDEO_START_MEMBER(nmk16_state,bjtwin)
/* from the other side of the tilemap (!) */
}
-
WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
{
// osd_printf_debug("mustang %04x %04x %04x\n",offset,data,mem_mask);
@@ -213,45 +197,6 @@ WRITE16_MEMBER(nmk16_state::mustang_scroll_w)
m_bg_tilemap[0]->set_scrollx(0,m_mustang_bg_xscroll - m_videoshift);
}
-WRITE16_MEMBER(nmk16_state::bioshipbg_scroll_w)
-{
- if (ACCESSING_BITS_8_15)
- {
- m_scroll[offset] = (data >> 8) & 0xff;
-
- if (offset & 2)
- m_bg_tilemap[0]->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
- else
- m_bg_tilemap[0]->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
- }
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_scroll_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_scroll[offset] = data & 0xff;
-
- if (offset & 2)
- m_bg_tilemap[0]->set_scrolly(0,m_scroll[2] * 256 + m_scroll[3]);
- else
- m_bg_tilemap[0]->set_scrollx(0,m_scroll[0] * 256 + m_scroll[1] - m_videoshift);
- }
-}
-
-WRITE16_MEMBER(nmk16_state::nmk_scroll_2_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_scroll_2[offset] = data & 0xff;
-
- if (offset & 2)
- m_fg_tilemap->set_scrolly(0,m_scroll_2[2] * 256 + m_scroll_2[3]);
- else
- m_fg_tilemap->set_scrollx(0,m_scroll_2[0] * 256 + m_scroll_2[1] - m_videoshift);
- }
-}
-
WRITE16_MEMBER(nmk16_state::vandyke_scroll_w)
{
m_vscroll[offset] = data;
@@ -282,41 +227,41 @@ WRITE16_MEMBER(nmk16_state::manybloc_scroll_w)
m_bg_tilemap[0]->set_scrolly(0,m_gunnail_scrollram[0xc2/2]);
}
-WRITE16_MEMBER(nmk16_state::nmk_flipscreen_w)
+WRITE8_MEMBER(nmk16_state::nmk_flipscreen_w)
{
- if (ACCESSING_BITS_0_7)
- flip_screen_set(data & 0x01);
+ flip_screen_set(data & 0x01);
}
-WRITE16_MEMBER(nmk16_state::nmk_tilebank_w)
+WRITE8_MEMBER(nmk16_state::nmk_tilebank_w)
{
- if (ACCESSING_BITS_0_7)
+ if (m_bgbank != data)
{
- if (m_bgbank != (data & 0xff))
- {
- m_bgbank = data & 0xff;
- for (int bank = 0; bank < 4; bank++)
- if (m_bg_tilemap[bank]) m_bg_tilemap[bank]->mark_all_dirty();
+ m_bgbank = data;
+ for (int layer = 0; layer < 2; layer++)
+ if (m_bg_tilemap[layer]) m_bg_tilemap[layer]->mark_all_dirty();
- }
}
}
-WRITE16_MEMBER(nmk16_state::bioship_scroll_w)
+WRITE16_MEMBER(nmk16_state::raphero_scroll_w)
{
- if (ACCESSING_BITS_8_15)
- m_bioship_scroll[offset]=data>>8;
+ COMBINE_DATA(&m_gunnail_scrollram[offset]);
+ if ((m_nmk_bgvideoram[0].bytes() > 0x4000) && (offset == 0))
+ {
+ int newbank = (m_gunnail_scrollram[0] >> 12) & ((m_nmk_bgvideoram[0].bytes() >> 14)-1);
+ if (m_tilerambank != newbank)
+ {
+ m_tilerambank = newbank;
+ }
+ }
}
-WRITE16_MEMBER(nmk16_state::bioship_bank_w)
+WRITE8_MEMBER(nmk16_state::bioship_bank_w)
{
- if (ACCESSING_BITS_0_7)
+ if (m_bioship_background_bank != data)
{
- if (m_bioship_background_bank != data)
- {
- m_bioship_background_bank = data;
- m_redraw_bitmap=1;
- }
+ m_bioship_background_bank = data;
+ m_bg_tilemap[0]->mark_all_dirty();
}
}
@@ -363,6 +308,10 @@ inline void nmk16_state::nmk16_draw_sprite(bitmap_ind16 &bitmap, const rectangle
color,
flip_screen(), flip_screen(),
((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
+ m_sprclk += 128; // 128 clock per each 16x16 tile
+ if (m_sprclk >= m_sprlimit)
+ return;
+
code++;
x += delta;
} while (--xx >= 0);
@@ -411,6 +360,10 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
color,
flipx, flipy,
((x + 16) & 0x1ff) - 16,sy & 0x1ff,15);
+ m_sprclk += 128; // 128 clock per each 16x16 tile
+ if (m_sprclk >= m_sprlimit)
+ return;
+
code++;
x += delta * (flipx ? -1 : 1);
} while (--xx >= 0);
@@ -420,10 +373,15 @@ inline void nmk16_state::nmk16_draw_sprite_flipsupported(bitmap_ind16 &bitmap, c
void nmk16_state::nmk16_draw_sprites_swap(bitmap_ind16 &bitmap, const rectangle &cliprect, int *bittbl)
{
+ m_sprclk = 0;
int i;
for (i = 0; i < 0x100; i++)
{
+ m_sprclk += 16; // 16 clock per each reading
+ if (m_sprclk >= m_sprlimit)
+ return;
+
int spr = bitswap<8>(i, bittbl[0], bittbl[1], bittbl[2], bittbl[3], bittbl[4], bittbl[5], bittbl[6], bittbl[7]);
nmk16_draw_sprite(bitmap, cliprect, m_spriteram_old2.get() + (spr * 16/2));
}
@@ -431,10 +389,15 @@ void nmk16_state::nmk16_draw_sprites_swap(bitmap_ind16 &bitmap, const rectangle
void nmk16_state::nmk16_draw_sprites_swap_flipsupported(bitmap_ind16 &bitmap, const rectangle &cliprect, int *bittbl)
{
+ m_sprclk = 0;
int i;
for ( i = 0; i < 0x100; i++ )
{
+ m_sprclk += 16; // 16 clock per each reading
+ if (m_sprclk >= m_sprlimit)
+ return;
+
int spr = bitswap<8>(i, bittbl[0], bittbl[1], bittbl[2], bittbl[3], bittbl[4], bittbl[5], bittbl[6], bittbl[7]);
nmk16_draw_sprite_flipsupported(bitmap, cliprect, m_spriteram_old2.get() + (spr * 16/2));
}
@@ -442,20 +405,30 @@ void nmk16_state::nmk16_draw_sprites_swap_flipsupported(bitmap_ind16 &bitmap, co
void nmk16_state::nmk16_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
+ m_sprclk = 0;
int offs;
for (offs = 0; offs < 0x1000/2; offs += 8)
{
+ m_sprclk += 16; // 16 clock per each reading
+ if (m_sprclk >= m_sprlimit)
+ return;
+
nmk16_draw_sprite(bitmap, cliprect, m_spriteram_old2.get() + offs);
}
}
void nmk16_state::nmk16_draw_sprites_flipsupported(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
+ m_sprclk = 0;
int offs;
for (offs = 0; offs < 0x1000/2; offs += 8)
{
+ m_sprclk += 16; // 16 clock per each reading
+ if (m_sprclk >= m_sprlimit)
+ return;
+
nmk16_draw_sprite_flipsupported(bitmap, cliprect, m_spriteram_old2.get() + offs);
}
}
@@ -468,157 +441,29 @@ 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_tilemap[0]->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites(bitmap,cliprect);
- return 0;
-}
-
-int nmk16_state::nmk16_bg_fg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
- m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites(bitmap,cliprect);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_bg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites(bitmap,cliprect);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_bg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites_flipsupported(bitmap,cliprect);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+void nmk16_state::nmk16_bg_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
{
- int scrollx=-(m_bioship_scroll[1] + m_bioship_scroll[0]*256);
- int scrolly=-(m_bioship_scroll[3] + m_bioship_scroll[2]*256);
-
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- if (m_redraw_bitmap)
+ if (m_gunnail_scrollram && m_gunnail_scrollramy)
{
- int bank = m_bioship_background_bank * 0x2000;
- int sx=0, sy=0, offs;
- m_redraw_bitmap=0;
-
- /* Draw background from tile rom */
- for (offs = 0;offs <0x1000;offs++) {
- uint16_t data = m_tilemap_rom[offs+bank];
- int numtile = data&0xfff;
- int color = (data&0xf000)>>12;
-
- m_gfxdecode->gfx(3)->opaque(*m_background_bitmap,m_background_bitmap->cliprect(),
- numtile,
- color,
- 0,0, /* no flip */
- 16*sx,16*sy);
-
- 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(),
- numtile,
- color,
- 0,0, /* no flip */
- 16*sx,(16*sy)+256);
-
- sy++;
- if (sy==16) {sy=0; sx++;}
- }
- }
-
- copyscrollbitmap(bitmap,*m_background_bitmap,1,&scrollx,1,&scrolly,cliprect);
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites(bitmap,cliprect);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_bg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites_swap(bitmap,cliprect, bittbl);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_bg_sprswapflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
-
- nmk16_draw_sprites_swap_flipsupported(bitmap,cliprect, bittbl);
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
-}
-
-int nmk16_state::nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
-{
- m_tx_tilemap->set_scrollx(0,-m_videoshift);
-
- // the hardware supports per-scanline X *and* Y scroll which isn't
- // supported by tilemaps so we have to draw the tilemap one line at a time
- if (!m_simple_scroll)
- {
- int i=16;
- int y1;
- rectangle bgclip = cliprect;
- y1 = cliprect.min_y;
+ // the hardware supports per-scanline X *and* Y scroll which isn't
+ // supported by tilemaps so we have to draw the tilemap one line at a time
+ int i=16;
+ int y1;
+ rectangle bgclip = cliprect;
+ y1 = cliprect.min_y;
while (y1 <= cliprect.max_y)
{
int const yscroll = m_gunnail_scrollramy[0] + m_gunnail_scrollramy[y1];
- tilemap_t* bg_tilemap = m_bg_tilemap[0];
bgclip.min_y = y1;
bgclip.max_y = y1;
- if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
- {
- int tilemap_bank_select = (m_gunnail_scrollram[0]&0x3000)>>12;
- bg_tilemap = m_bg_tilemap[tilemap_bank_select];
- }
+ m_bg_tilemap[layer]->set_scroll_rows(512);
- bg_tilemap->set_scroll_rows(512);
+ m_bg_tilemap[layer]->set_scrolly(0, yscroll);
+ m_bg_tilemap[layer]->set_scrollx((i + yscroll) & 0x1ff, m_gunnail_scrollram[0] + m_gunnail_scrollram[i] - m_videoshift);
- bg_tilemap->set_scrolly(0, yscroll);
- bg_tilemap->set_scrollx((i + yscroll) & 0x1ff, m_gunnail_scrollram[0] + m_gunnail_scrollram[i] - m_videoshift);
-
- bg_tilemap->draw(screen, bitmap, bgclip, 0,0);
+ m_bg_tilemap[layer]->draw(screen, bitmap, bgclip, 0,0);
y1++;
i++;
@@ -626,30 +471,14 @@ int nmk16_state::nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap
}
else
{
- 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);
- tilemap_t* bg_tilemap = m_bg_tilemap[0];
-
- //popmessage( "scroll %04x, %04x", yscroll,xscroll);
-
- if (m_bg_tilemap[1] && m_bg_tilemap[2] && m_bg_tilemap[3])
- {
- int tilemap_bank_select = (xscroll&0x3000)>>12;
- bg_tilemap = m_bg_tilemap[tilemap_bank_select];
- }
-
- bg_tilemap->set_scroll_rows(1);
-
- bg_tilemap->set_scrolly(0, yscroll);
- bg_tilemap->set_scrollx(0, xscroll - m_videoshift);
-
- bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
+ m_bg_tilemap[layer]->draw(screen, bitmap, cliprect, 0,0);
}
+}
- nmk16_draw_sprites_swap(bitmap,cliprect, bittbl);
-
+void nmk16_state::nmk16_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ m_tx_tilemap->set_scrollx(0,-m_videoshift);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
- return 0;
}
/***************************************************************************
@@ -662,12 +491,18 @@ int nmk16_state::nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap
uint32_t nmk16_state::screen_update_macross(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- return nmk16_bg_spr_tx_update(screen, bitmap, cliprect);
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_draw_sprites(bitmap,cliprect);
+ nmk16_tx_update(screen,bitmap,cliprect);
+ return 0;
}
uint32_t nmk16_state::screen_update_manybloc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- return nmk16_bg_sprflip_tx_update(screen, bitmap, cliprect);
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_draw_sprites_flipsupported(bitmap,cliprect);
+ nmk16_tx_update(screen,bitmap,cliprect);
+ return 0;
}
uint32_t nmk16_state::screen_update_tharrier(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -677,7 +512,10 @@ uint32_t nmk16_state::screen_update_tharrier(screen_device &screen, bitmap_ind16
m_bg_tilemap[0]->set_scrollx(0,tharrier_scroll);
- return nmk16_bg_sprflip_tx_update(screen, bitmap, cliprect);
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_draw_sprites_flipsupported(bitmap,cliprect);
+ nmk16_tx_update(screen,bitmap,cliprect);
+ return 0;
}
uint32_t nmk16_state::screen_update_tdragon2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -686,31 +524,28 @@ uint32_t nmk16_state::screen_update_tdragon2(screen_device &screen, bitmap_ind16
4, 6, 5, 7, 3, 2, 1, 0
};
- return nmk16_complexbg_sprswap_tx_update(screen, bitmap, cliprect, bittbl);
-}
-
-uint32_t nmk16_state::screen_update_gunnail(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- static int bittbl[8] = {
- 7, 6, 5, 4, 3, 2, 1, 0
- };
-
- return nmk16_complexbg_sprswap_tx_update(screen, bitmap, cliprect, bittbl);
-}
-
-uint32_t nmk16_state::screen_update_bioship(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- return nmk16_bioshipbg_sprflip_tx_update(screen, bitmap, cliprect);
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_draw_sprites_swap(bitmap,cliprect, bittbl);
+ nmk16_tx_update(screen,bitmap,cliprect);
+ return 0;
}
uint32_t nmk16_state::screen_update_strahl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- return nmk16_bg_fg_spr_tx_update(screen, bitmap, cliprect);
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_bg_update(screen,bitmap,cliprect,1);
+ nmk16_draw_sprites(bitmap,cliprect);
+ nmk16_tx_update(screen,bitmap,cliprect);
+ return 0;
}
uint32_t nmk16_state::screen_update_bjtwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- return nmk16_bg_spr_update(screen, bitmap, cliprect);
+ m_bg_tilemap[0]->set_scrollx(0,-m_videoshift);
+
+ nmk16_bg_update(screen,bitmap,cliprect,0);
+ nmk16_draw_sprites(bitmap,cliprect);
+ return 0;
}
@@ -724,14 +559,15 @@ uint32_t nmk16_state::screen_update_bjtwin(screen_device &screen, bitmap_ind16 &
VIDEO_START_MEMBER(nmk16_state,afega)
{
+ m_sprlimit = 384 * 263;
m_spriteram_old = make_unique_clear<uint16_t[]>(0x1000/2);
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
m_bg_tilemap[0] = &machine().tilemap().create(
*m_gfxdecode,
- tilemap_get_info_delegate(FUNC(nmk16_state::common_get_bg_tile_info<0>),this),
+ tilemap_get_info_delegate(&nmk16_state::common_get_bg_tile_info<0, 1>, "bg0_gfx1",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, 256,32);
m_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode,
@@ -740,42 +576,22 @@ VIDEO_START_MEMBER(nmk16_state,afega)
8,8, 32,32);
m_tx_tilemap->set_transparent_pen(0xf);
+ save_pointer(NAME(m_spriteram_old), 0x1000/2);
+ save_pointer(NAME(m_spriteram_old2), 0x1000/2);
}
VIDEO_START_MEMBER(nmk16_state,grdnstrm)
{
+ m_sprlimit = 384 * 263;
m_spriteram_old = make_unique_clear<uint16_t[]>(0x1000/2);
m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
-
- 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::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(0xf);
-}
-
-
-VIDEO_START_MEMBER(nmk16_state,firehawk)
-{
- m_spriteram_old = make_unique_clear<uint16_t[]>(0x1000/2);
- m_spriteram_old2 = make_unique_clear<uint16_t[]>(0x1000/2);
-
-
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::tilemap_scan_pages),this),
- 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
+ 16,16, 256,32);
m_tx_tilemap = &machine().tilemap().create(
*m_gfxdecode,
@@ -784,6 +600,8 @@ VIDEO_START_MEMBER(nmk16_state,firehawk)
8,8, 32,32);
m_tx_tilemap->set_transparent_pen(0xf);
+ save_pointer(NAME(m_spriteram_old), 0x1000/2);
+ save_pointer(NAME(m_spriteram_old2), 0x1000/2);
}