mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
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
This commit is contained in:
parent
afa66e6b8d
commit
d1356cd5c1
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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::raphero_scroll_w)
|
||||
{
|
||||
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_scroll_w)
|
||||
WRITE8_MEMBER(nmk16_state::bioship_bank_w)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
m_bioship_scroll[offset]=data>>8;
|
||||
}
|
||||
|
||||
WRITE16_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)
|
||||
void nmk16_state::nmk16_bg_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user