summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/nmk/nmk16.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/nmk/nmk16.cpp')
-rw-r--r--src/mame/nmk/nmk16.cpp2734
1 files changed, 2174 insertions, 560 deletions
diff --git a/src/mame/nmk/nmk16.cpp b/src/mame/nmk/nmk16.cpp
index 4a747a8a601..6ffdec810df 100644
--- a/src/mame/nmk/nmk16.cpp
+++ b/src/mame/nmk/nmk16.cpp
@@ -3,34 +3,36 @@
// thanks-to:Richard Bush
/********************************************************************
-Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295
-Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295
-Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295
-Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
-Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295
-Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295
-Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
-Hacha Mecha Fighter proto 1991 NMK 68000 NMK004 YM2203 2xOKIM6295
-Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295
-Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295
-GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295
-Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295
-Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295
-Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295
-
-S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
-Air Attack 1996 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon)
-
-Mustang (bootleg) 68000 Z80 YM3812 OKIM6295
-Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295
-
-Thunder Dragon 3 (bootleg) 1996 Conny 68000 Z80 (Unknown, Single OKIM6295 identified)
-
-Saboten Bombers 1992 NMK/Tecmo 68000 2xOKIM6295
-Bombjack Twin 1993 NMK 68000 2xOKIM6295
-Nouryoku Koujou Iinkai 1995 Tecmo 68000 2xOKIM6295
+Task Force Harrier 1989 UPL 68000 Z80 YM2203 2xOKIM6295 Low-Res
+Many Block 1991 Bee-Oh 68000 Z80 YM2203 2xOKIM6295 Low-Res (hack of "Slot Gal" by UPL)
+Mustang 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Bio-ship Paladin 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Vandyke 1990 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Black Heart 1991 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Acrobat Mission 1991 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Strahl 1992 UPL 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Thunder Dragon 1991 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Hacha Mecha Fighter proto 1991 NMK 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Hacha Mecha Fighter 1991 NMK 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+Macross 1992 Banpresto 68000 NMK004 YM2203 2xOKIM6295 Low-Res
+GunNail 1993 NMK/Tecmo 68000 NMK004 YM2203 2xOKIM6295 Hi-Res
+Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295 Hi-Res
+Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295 Hi-Res
+Power Instinct 1993 Atlus 68000 Z80 YM2203 2xOKIM6295 Mid-Res
+Arcadia / Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295 Hi-Res
+
+S.S. Mission 1992 Comad 68000 Z80 OKIM6295 Low-Res (hack of Thunder Dragon)
+Air Attack 1996 Comad 68000 Z80 OKIM6295 Low-Res (hack of Thunder Dragon)
+
+Acrobat Mission (bootleg) 68000 Z80 YM3812 OKIM6295 Low-Res
+Mustang (bootleg) 68000 Z80 YM3812 OKIM6295 Low-Res
+Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295 Low-Res
+
+Thunder Dragon 3 (bootleg) 1996 Conny 68000 Z80 Hi-Res (Unknown, Single OKIM6295 identified)
+
+Saboten Bombers 1992 NMK/Tecmo 68000 2xOKIM6295 Hi-Res
+Bombjack Twin 1993 NMK 68000 2xOKIM6295 Hi-Res
+Nouryoku Koujou Iinkai 1995 Tecmo 68000 2xOKIM6295 Hi-Res
driver by Mirko Buffoni, Richard Bush, Nicola Salmoria, Bryan McPhail,
David Haywood, R. Belmont, Alex Marshal and Luca Elia.
@@ -94,7 +96,8 @@ tharrier test mode:
1) Press player 2 buttons 1+2 during reset. "Are you ready?" will appear
2) Press player 1 buttons in this sequence:
2,1,2,2,1,1,↓,↓
-Note: this doesn't currently work, the message never appears (most likely an error in the protection simulation).
+Note: this only works in the bootleg, the message never appears in the original
+because of incomplete MCU simulation
tdragon and hachamf test mode:
@@ -151,6 +154,8 @@ Questions / Notes
'manybloc' :
+ - This is a bootleg / hack of Slot Gal by UPL
+ - The MCU code was patched to use standard IO, it may be running code that is no longer used.
- There are writes to 0x080010.w and 0x080012.w (MCU ?) in code between
0x005000 to 0x005690, but I see no call to "main" routine at 0x005504 !
- There are writes to 0x08001c.w and 0x08001e.w but I can't tell what
@@ -164,7 +169,7 @@ Questions / Notes
Sound notes for games with a Z80:
-mustangb, strahljb and tdragonb use the Seibu Raiden sound hardware and a modified
+acrobatmbl, mustangb, strahljb and tdragonb use the Seibu Raiden sound hardware and a modified
Z80 program (but the music is intact and recognizable). See audio/seibu.cpp
for more info on this.
@@ -208,6 +213,7 @@ Reference of music tempo:
#include "sound/ymopn.h"
#include "sound/ymopl.h"
+#include "multibyte.h"
#include "screen.h"
#include "speaker.h"
@@ -278,15 +284,54 @@ void nmk16_state::mainram_swapped_w(offs_t offset, u16 data, u16 mem_mask)
COMBINE_DATA(&m_mainram[bitswap<16>(offset, 15, 14, 13, 12, 11, 7, 9, 8, 10, 6, 5, 4, 3, 2, 1, 0)]);
}
-void nmk16_state::ssmissin_soundbank_w(u8 data)
+/***************************************************************************
+
+ Sound Handlers
+
+***************************************************************************/
+void nmk16_state::macross2_sound_reset_w(u16 data)
+{
+ /* PCB behaviour verified by Corrado Tomaselli at MAME Italia Forum:
+ every time music changes Z80 is reset */
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
+}
+
+void nmk16_state::macross2_audiobank_w(u8 data)
+{
+ m_audiobank->set_entry(data & 0x7);
+}
+
+void nmk16_state::ssmissin_okibank_w(u8 data)
{
m_okibank[0]->set_entry(data & 0x3);
}
+void nmk16_state::powerinsa_okibank_w(u8 data)
+{
+ m_okibank[0]->set_entry(data & 0x7);
+}
+template<unsigned Chip>
+void nmk16_state::tharrier_okibank_w(u8 data)
+{
+ data &= 0x3;
+ if (data != 0x3)
+ m_okibank[Chip]->set_entry(data);
+}
+
+u8 nmk16_state::powerins_bootleg_fake_ym2203_r()
+{
+ return 0x01;
+}
+
+/***************************************************************************
+
+ tharrier MCU handlers
+
+***************************************************************************/
void nmk16_state::tharrier_mcu_control_w(u16 data)
{
-// LOG("%04x: mcu_control_w %02x\n",m_maincpu->pc(),data);
+// LOG("%06x: mcu_control_w %02x\n", m_maincpu->pc(), data);
}
u16 nmk16_state::tharrier_mcu_r(offs_t offset, u16 mem_mask)
@@ -302,13 +347,17 @@ u16 nmk16_state::tharrier_mcu_r(offs_t offset, u16 mem_mask)
int res;
- if (m_maincpu->pc()==0x8aa) res = (m_mainram[0x9064/2])|0x20; // Task Force Harrier
- else if (m_maincpu->pc()==0x8ce) res = (m_mainram[0x9064/2])|0x60; // Task Force Harrier
+ if (m_maincpu->pc() == 0x8aa) res = (m_mainram[0x9064/2]) | 0x20; // Task Force Harrier
+ else if (m_maincpu->pc() == 0x8ce) res = (m_mainram[0x9064/2]) | 0x60; // Task Force Harrier
else
{
- res = to_main[m_prot_count++];
- if (m_prot_count == sizeof(to_main))
- m_prot_count = 0;
+ res = to_main[m_prot_count];
+ if (!machine().side_effects_disabled())
+ {
+ m_prot_count++;
+ if (m_prot_count == sizeof(to_main))
+ m_prot_count = 0;
+ }
}
return res << 8;
@@ -322,26 +371,88 @@ u16 nmk16_state::tharrier_mcu_r(offs_t offset, u16 mem_mask)
}
}
-void nmk16_state::macross2_sound_reset_w(u16 data)
+
+/***************************************************************************
+
+ tharrierb MCU emulation
+
+***************************************************************************/
+
+u16 tharrierb_state::mcu_status_r(offs_t offset, u16 mem_mask)
{
- /* PCB behaviour verified by Corrado Tomaselli at MAME Italia Forum:
- every time music changes Z80 is reset */
- m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
+ u16 data = 0;
+
+ // bit 15 mcu status? other bits unused?
+ if (ACCESSING_BITS_8_15)
+ data |= 0x8000;
+
+ return data;
+}
+
+u16 tharrierb_state::mcu_data_r(offs_t offset, u16 mem_mask)
+{
+ u16 data = 0;
+
+ if (ACCESSING_BITS_0_7)
+ data |= m_mcu_out_latch_lsb << 0;
+
+ if (ACCESSING_BITS_8_15)
+ data |= m_mcu_out_latch_msb << 8;
+
+ return data;
}
-void nmk16_state::macross2_sound_bank_w(u8 data)
+void tharrierb_state::mcu_control_w(offs_t offset, u16 data, u16 mem_mask)
{
- m_audiobank->set_entry(data & 0x07);
+ // bit 0 mcu interrupt. other bits unused?
+ if (ACCESSING_BITS_0_7)
+ m_mcu->set_input_line(M68705_IRQ_LINE, BIT(~data, 0));
}
-template<unsigned Chip>
-void nmk16_state::tharrier_oki_bankswitch_w(u8 data)
+void tharrierb_state::mcu_data_w(offs_t offset, u16 data, u16 mem_mask)
{
- data &= 3;
- if (data != 3)
- m_okibank[Chip]->set_entry(data);
+ if (ACCESSING_BITS_0_7)
+ m_mcu_in_latch = data;
+}
+
+void tharrierb_state::mcu_porta_w(u8 data)
+{
+ m_mcu_out_latch_msb = data;
+}
+
+void tharrierb_state::mcu_portb_w(u8 data)
+{
+ m_mcu_out_latch_lsb = data;
+}
+
+u8 tharrierb_state::mcu_portb_r()
+{
+ return m_mcu_in_latch;
+}
+
+void tharrierb_state::mcu_portc_w(u8 data)
+{
+ // 7------- set at start of mcu ack function, unset at end
+ // -6------ unset to enable read for port b latch
+ // --5----- unset at mcu reset and set after mcu memory init
+ // ---4---- toggled after mcu reset and in mcu int
+ // ----3--- unused
+ // -----210 port d data source (inputs)
+
+ m_mcu_portc = data;
+}
+
+u8 tharrierb_state::mcu_portd_r()
+{
+ const u8 select = m_mcu_portc & 0x07;
+
+ if (select < 5)
+ return m_inputs[select]->read();
+ else
+ return 0;
}
+
/***************************************************************************
VRAM handlers
@@ -367,15 +478,15 @@ void nmk16_state::scroll_w(offs_t offset, u8 data)
{
m_scroll[Layer][offset] = data;
- if (offset & 2)
+ if (BIT(offset, 1))
{
- m_bg_tilemap[Layer]->set_scrolly(0,((m_scroll[Layer][2] << 8) | m_scroll[Layer][3]));
+ m_bg_tilemap[Layer]->set_scrolly(0, ((m_scroll[Layer][2] << 8) | m_scroll[Layer][3]));
}
else
{
if ((m_bgvideoram[Layer].bytes() > 0x4000) && (offset == 0))
{
- int newbank = (m_scroll[Layer][0] >> 4) & ((m_bgvideoram[Layer].bytes() >> 14) - 1);
+ const int newbank = (m_scroll[Layer][0] >> 4) & ((m_bgvideoram[Layer].bytes() >> 14) - 1);
if (m_tilerambank != newbank)
{
m_tilerambank = newbank;
@@ -384,7 +495,7 @@ void nmk16_state::scroll_w(offs_t offset, u8 data)
}
}
- m_bg_tilemap[Layer]->set_scrollx(0,(m_scroll[Layer][0] << 8) | m_scroll[Layer][1]);
+ m_bg_tilemap[Layer]->set_scrollx(0, (m_scroll[Layer][0] << 8) | m_scroll[Layer][1]);
}
}
@@ -399,15 +510,16 @@ void nmk16_state::vandyke_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(0x080015, 0x080015).w(FUNC(nmk16_state::vandyke_flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk004_x0016_w));
map(0x080019, 0x080019).w(FUNC(nmk16_state::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));
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
map(0x094000, 0x097fff).ram(); // what is this?
- map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::vandykeb_map(address_map &map)
@@ -419,15 +531,16 @@ void nmk16_state::vandykeb_map(address_map &map)
map(0x08000a, 0x08000b).portr("DSW2");
// 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(0x080015, 0x080015).w(FUNC(nmk16_state::vandyke_flipscreen_w));
map(0x080016, 0x080017).nopw(); // IRQ enable?
map(0x080019, 0x080019).w(FUNC(nmk16_state::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...
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
map(0x094000, 0x097fff).ram(); // what is this?
- map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::manybloc_map(address_map &map)
@@ -442,10 +555,10 @@ void nmk16_state::manybloc_map(address_map &map)
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");
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09cfff).ram().w(FUNC(nmk16_state::manybloc_scroll_w)).share("scrollram");
- map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09cfff).ram().w(FUNC(nmk16_state::manybloc_scroll_w)).share(m_gunnail_scrollram);
+ map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram);
}
void nmk16_tomagic_state::tomagic_map(address_map &map)
@@ -459,26 +572,26 @@ void nmk16_tomagic_state::tomagic_map(address_map &map)
map(0x080018, 0x080019).w(FUNC(nmk16_tomagic_state::tilebank_w));
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");
- map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
- map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_tomagic_state::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x08c000, 0x08c1ff).writeonly().share(m_gunnail_scrollram);
+ map(0x08c200, 0x08c3ff).writeonly().share(m_gunnail_scrollramy);
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_tomagic_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
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_tomagic_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().share("mainram");
+ map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_tomagic_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram);
}
void nmk16_tomagic_state::tomagic_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("audiocpu", 0);
- map(0x8000, 0xbfff).bankr("audiobank");
+ map(0x8000, 0xbfff).bankr(m_audiobank);
map(0xc000, 0xdfff).ram();
}
void nmk16_tomagic_state::tomagic_sound_io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).w(FUNC(nmk16_tomagic_state::macross2_sound_bank_w));
+ map(0x00, 0x00).w(FUNC(nmk16_tomagic_state::macross2_audiobank_w));
map(0x02, 0x03).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
map(0x06, 0x06).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
@@ -494,14 +607,34 @@ void nmk16_state::tharrier_map(address_map &map)
map(0x080012, 0x080013).nopw();
// map(0x080015, 0x080015).w(FUNC(nmk16_state::flipscreen_w));
// map(0x080019, 0x080019).w(FUNC(nmk16_state::tilebank_w));
+// map(0x08001c, 0x08001d) sound reset
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::scroll_w<0>)).umask16(0x00ff);
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
map(0x09c000, 0x09c7ff).ram(); // Unused txvideoram area?
- map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x09d000, 0x09d7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
+}
+
+void tharrierb_state::tharrierb_map(address_map &map)
+{
+ map(0x000000, 0x03ffff).rom();
+ map(0x080000, 0x080001).mirror(0xf00).r(FUNC(tharrierb_state::mcu_status_r));
+ map(0x080002, 0x080003).mirror(0xf00).r(FUNC(tharrierb_state::mcu_data_r));
+ map(0x08000f, 0x08000f).r("soundlatch2", FUNC(generic_latch_8_device::read));
+ map(0x080010, 0x080011).mirror(0xf00).nopr().w(FUNC(tharrierb_state::mcu_control_w));
+ map(0x080012, 0x080013).mirror(0xf00).nopr().w(FUNC(tharrierb_state::mcu_data_w));
+ map(0x080014, 0x080015).unmaprw(); // flipscreen
+ map(0x08001c, 0x08001d).unmaprw(); // sound cpu reset
+ map(0x08001f, 0x08001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x088000, 0x0883ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x090000, 0x093fff).ram().w(FUNC(tharrierb_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09cfff).ram(); // verified in test mode
+ map(0x09d000, 0x09d7ff).ram().w(FUNC(tharrierb_state::txvideoram_w)).share(m_txvideoram);
+ map(0x09d800, 0x09dfff).ram(); // verified in test mode
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(tharrierb_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::tharrier_sound_map(address_map &map)
@@ -511,8 +644,8 @@ void nmk16_state::tharrier_sound_map(address_map &map)
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_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_oki_bankswitch_w<0>));
- map(0xf700, 0xf700).w(FUNC(nmk16_state::tharrier_oki_bankswitch_w<1>));
+ map(0xf600, 0xf600).w(FUNC(nmk16_state::tharrier_okibank_w<0>));
+ map(0xf700, 0xf700).w(FUNC(nmk16_state::tharrier_okibank_w<1>));
}
void nmk16_state::tharrier_sound_io_map(address_map &map)
@@ -538,9 +671,9 @@ void nmk16_state::mustang_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c001).w(FUNC(nmk16_state::mustang_scroll_w));
map(0x08c002, 0x08c087).nopw(); // ??
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::mustangb_map(address_map &map)
@@ -556,9 +689,9 @@ void nmk16_state::mustangb_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c001).w(FUNC(nmk16_state::mustang_scroll_w));
map(0x08c002, 0x08c087).nopw(); // ??
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::mustangb3_map(address_map &map)
@@ -576,9 +709,9 @@ void nmk16_state::mustangb3_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c001).w(FUNC(nmk16_state::mustang_scroll_w));
map(0x08c002, 0x08c087).nopw();
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::mustangb3_sound_map(address_map &map)
@@ -603,15 +736,15 @@ void nmk16_state::twinactn_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c001).w(FUNC(nmk16_state::mustang_scroll_w));
map(0x08c002, 0x08c087).nopw(); // ??
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::acrobatm_map(address_map &map)
{
map(0x00000, 0x3ffff).rom();
- map(0x80000, 0x8ffff).ram().share("mainram");
+ map(0x80000, 0x8ffff).ram().share(m_mainram);
map(0xc0000, 0xc0001).portr("IN0");
map(0xc0002, 0xc0003).portr("IN1");
map(0xc0008, 0xc0009).portr("DSW1");
@@ -623,14 +756,14 @@ void nmk16_state::acrobatm_map(address_map &map)
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::scroll_w<0>)).umask16(0x00ff);
- map(0xcc000, 0xcffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0xd4000, 0xd47ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
+ map(0xcc000, 0xcffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0xd4000, 0xd47ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
}
void nmk16_state::acrobatmbl_map(address_map &map)
{
map(0x00000, 0x3ffff).rom();
- map(0x80000, 0x8ffff).ram().share("mainram");
+ map(0x80000, 0x8ffff).ram().share(m_mainram);
map(0xc0000, 0xc0001).portr("IN0");
map(0xc0002, 0xc0003).portr("IN1");
map(0xc0008, 0xc0009).portr("DSW1");
@@ -640,8 +773,8 @@ void nmk16_state::acrobatmbl_map(address_map &map)
map(0xc001e, 0xc001f).w("seibu_sound", FUNC(seibu_sound_device::main_mustb_w));
map(0xc4000, 0xc45ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xc8000, 0xc8007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
- map(0xcc000, 0xcffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0xd4000, 0xd47ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
+ map(0xcc000, 0xcffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0xd4000, 0xd47ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
}
void nmk16_state::bioship_map(address_map &map)
@@ -652,7 +785,7 @@ 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(0xc0015, 0xc0015).w(FUNC(nmk16_state::flipscreen_w));
+ map(0x080015, 0x080015).w(FUNC(nmk16_state::flipscreen_w));
map(0x080016, 0x080017).w(FUNC(nmk16_state::nmk004_bioship_x0016_w));
map(0x08001f, 0x08001f).w(m_nmk004, FUNC(nmk004_device::write));
map(0x084001, 0x084001).w(FUNC(nmk16_state::bioship_bank_w));
@@ -660,14 +793,14 @@ void nmk16_state::bioship_map(address_map &map)
map(0x08c000, 0x08c007).ram().w(FUNC(nmk16_state::scroll_w<1>)).umask16(0xff00);
map(0x08c010, 0x08c017).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0xff00);
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<1>)).share("bgvideoram1");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::hachamf_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- // I/O Region
+
map(0x080000, 0x080001).portr("IN0");
map(0x080002, 0x080003).portr("IN1");
map(0x080008, 0x080009).portr("DSW1");
@@ -678,25 +811,19 @@ void nmk16_state::hachamf_map(address_map &map)
map(0x080019, 0x080019).w(FUNC(nmk16_state::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::scroll_w<0>)).umask16(0x00ff);
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- // Main RAM, inc sprites, shared with MCU
-
- map(0x0f0000, 0x0fffff).ram().share("mainram"); // ram is shared with MCU
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram); // Main RAM, inc sprites, shared with MCU
}
-
-
void nmk16_state::tdragon_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x044022, 0x044023).nopr(); // No Idea (ROM mirror? - does this even exist on originals?)
- map(0x080000, 0x08ffff).mirror(0x030000).ram().share("mainram");
+ map(0x080000, 0x08ffff).mirror(0x030000).ram().share(m_mainram);
map(0x0c0000, 0x0c0001).mirror(0x020000).portr("IN0");
map(0x0c0002, 0x0c0003).mirror(0x020000).portr("IN1");
@@ -710,8 +837,8 @@ void nmk16_state::tdragon_map(address_map &map)
map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::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::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
+ map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
}
// No sprites without this. Is it actually protection?
@@ -724,7 +851,7 @@ void nmk16_state::tdragonb_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x044022, 0x044023).r(FUNC(nmk16_state::tdragonb_prot_r));
- map(0x0b0000, 0x0bffff).ram().share("mainram");
+ map(0x0b0000, 0x0bffff).ram().share(m_mainram);
map(0x0c0000, 0x0c0001).portr("IN0");
map(0x0c0002, 0x0c0003).portr("IN1");
map(0x0c0008, 0x0c0009).portr("DSW1");
@@ -734,8 +861,8 @@ void nmk16_state::tdragonb_map(address_map &map)
map(0x0c001e, 0x0c001f).w("seibu_sound", FUNC(seibu_sound_device::main_mustb_w));
map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::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::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
+ map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
}
void nmk16_state::tdragonb3_map(address_map &map)
@@ -749,25 +876,32 @@ void nmk16_state::tdragonb3_map(address_map &map)
void nmk16_state::tdragonb2_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x0b0000, 0x0bffff).ram().share("mainram");
+ map(0x0b0000, 0x0bffff).ram().share(m_mainram);
+ map(0x08e294, 0x08e925).portr("IN1");
map(0x0c0000, 0x0c0001).portr("IN0");
- map(0x0c0002, 0x0c0003).portr("IN1");
- map(0x0c0008, 0x0c0009).portr("DSW1"); // .w TODO oki banking?
+ map(0x0c0002, 0x0c0003).nopr(); // leftover from the original?
+ map(0x0c0008, 0x0c0009).portr("DSW1");
+ map(0x0c0009, 0x0c0009).lw8(NAME([this] (uint8_t data) { m_okibank[0]->set_entry(data & 0x03); }));
map(0x0c000a, 0x0c000b).portr("DSW2");
- //map(0x0c000e, 0x0c000f).r; TODO: what's this?
- map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::flipscreen_w)); // Maybe
+ map(0x0c000e, 0x0c000f).nopr(); // ??
+ map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::flipscreen_w));
+ map(0x0c0018, 0x0c0019).nopr(); // ??
map(0x0c0019, 0x0c0019).w(FUNC(nmk16_state::tilebank_w)); // Tile Bank
map(0x0c001f, 0x0c001f).w("oki", FUNC(okim6295_device::write));
- map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
+ map(0x0c4000, 0x0c4001).lw16(NAME([this] (uint16_t data) { m_bg_tilemap[0]->set_scrollx(0, data); } ));
+ map(0x0c4002, 0x0c4003).nopw(); // duplicate value of the above
+ map(0x0c4004, 0x0c4005).lw16(NAME([this] (uint16_t data) { m_bg_tilemap[0]->set_scrolly(0, data); } ));
+ map(0x0c4006, 0x0c4007).nopw(); // duplicate value of the above
+ map(0x0c4018, 0x0c4019).nopr(); // ??
map(0x0c8000, 0x0c87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
+ map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x0d0000, 0x0d07ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
}
void nmk16_state::ssmissin_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x0b0000, 0x0bffff).ram().share("mainram");
+ map(0x0b0000, 0x0bffff).ram().share(m_mainram);
map(0x0c0000, 0x0c0001).portr("IN0");
map(0x0c0004, 0x0c0005).portr("IN1");
map(0x0c0006, 0x0c0007).portr("DSW1");
@@ -777,15 +911,15 @@ void nmk16_state::ssmissin_map(address_map &map)
map(0x0c001f, 0x0c001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x0c4000, 0x0c4007).ram().w(FUNC(nmk16_state::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::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x0d0000, 0x0d07ff).mirror(0x1800).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram"); //mirror for airattck
+ map(0x0cc000, 0x0cffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x0d0000, 0x0d07ff).mirror(0x1800).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram); //mirror for airattck
}
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(0x9000, 0x9000).w(FUNC(nmk16_state::ssmissin_okibank_w));
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));
}
@@ -793,13 +927,13 @@ void nmk16_state::ssmissin_sound_map(address_map &map)
void nmk16_state::oki1_map(address_map &map)
{
map(0x00000, 0x1ffff).rom().region("oki1", 0);
- map(0x20000, 0x3ffff).bankr("okibank1");
+ map(0x20000, 0x3ffff).bankr(m_okibank[0]);
}
void nmk16_state::oki2_map(address_map &map)
{
map(0x00000, 0x1ffff).rom().region("oki2", 0);
- map(0x20000, 0x3ffff).bankr("okibank2");
+ map(0x20000, 0x3ffff).bankr(m_okibank[1]);
}
void nmk16_state::strahl_map(address_map &map)
@@ -816,10 +950,10 @@ void nmk16_state::strahl_map(address_map &map)
map(0x84000, 0x84007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
map(0x88000, 0x88007).ram().w(FUNC(nmk16_state::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::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x90000, 0x93fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
map(0x94000, 0x97fff).ram().w(FUNC(nmk16_state::bgvideoram_w<1>)).share("bgvideoram1");
- map(0x9c000, 0x9c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0xf0000, 0xfffff).ram().share("mainram");
+ map(0x9c000, 0x9c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0xf0000, 0xfffff).ram().share(m_mainram);
}
void nmk16_state::strahljbl_map(address_map &map)
@@ -834,10 +968,10 @@ void nmk16_state::strahljbl_map(address_map &map)
map(0x84000, 0x84007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
map(0x88000, 0x88007).ram().w(FUNC(nmk16_state::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::bgvideoram_w<0>)).share("bgvideoram0");
+ map(0x90000, 0x93fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
map(0x94000, 0x97fff).ram().w(FUNC(nmk16_state::bgvideoram_w<1>)).share("bgvideoram1");
- map(0x9c000, 0x9c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0xf0000, 0xfffff).ram().share("mainram");
+ map(0x9c000, 0x9c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0xf0000, 0xfffff).ram().share(m_mainram);
}
void nmk16_state::macross_map(address_map &map)
@@ -854,9 +988,9 @@ void nmk16_state::macross_map(address_map &map)
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::scroll_w<0>)).umask16(0x00ff);
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(nmk16_state::mainram_strange_w)).share(m_mainram);
}
void nmk16_state::gunnail_map(address_map &map)
@@ -872,12 +1006,12 @@ void nmk16_state::gunnail_map(address_map &map)
map(0x080019, 0x080019).w(FUNC(nmk16_state::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");
- map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
+ map(0x08c000, 0x08c1ff).writeonly().share(m_gunnail_scrollram);
+ map(0x08c200, 0x08c3ff).writeonly().share(m_gunnail_scrollramy);
map(0x08c400, 0x08c7ff).nopw(); // unknown
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram);
}
void nmk16_state::gunnailb_map(address_map &map)
@@ -893,26 +1027,26 @@ void nmk16_state::gunnailb_map(address_map &map)
map(0x080019, 0x080019).w(FUNC(nmk16_state::tilebank_w));
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");
- map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
- map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
+ map(0x08c000, 0x08c1ff).writeonly().share(m_gunnail_scrollram);
+ map(0x08c200, 0x08c3ff).writeonly().share(m_gunnail_scrollramy);
map(0x08c400, 0x08c7ff).nopw(); // unknown
- map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x0f0000, 0x0fffff).ram().share("mainram");
+ map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram);
map(0x194001, 0x194001).w(m_oki[0], FUNC(okim6295_device::write));
}
void nmk16_state::gunnailb_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("audiobank");
+ map(0x8000, 0xbfff).bankr(m_audiobank);
map(0xc000, 0xdfff).ram();
}
void nmk16_state::gunnailb_sound_io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).w(FUNC(nmk16_state::macross2_sound_bank_w));
+ map(0x00, 0x00).w(FUNC(nmk16_state::macross2_audiobank_w));
map(0x02, 0x03).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0x04, 0x04).noprw(); // since the bootleggers used the same audio CPU ROM as airbustr but a different Oki ROM, they connected the Oki to the main CPU
map(0x06, 0x06).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write));
@@ -932,15 +1066,15 @@ void nmk16_state::macross2_map(address_map &map)
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, 0x130007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
- map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x1f0000, 0x1fffff).ram().share("mainram");
+ map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x1f0000, 0x1fffff).ram().share(m_mainram);
}
void nmk16_state::tdragon2_map(address_map &map)
{ // mainram address scrambled
macross2_map(map);
- map(0x1f0000, 0x1fffff).rw(FUNC(nmk16_state::mainram_swapped_r), FUNC(nmk16_state::mainram_swapped_w)).share("mainram");
+ map(0x1f0000, 0x1fffff).rw(FUNC(nmk16_state::mainram_swapped_r), FUNC(nmk16_state::mainram_swapped_w)).share(m_mainram);
}
void nmk16_state::tdragon3h_map(address_map &map)
@@ -963,23 +1097,23 @@ void nmk16_state::raphero_map(address_map &map)
map(0x100019, 0x100019).w(FUNC(nmk16_state::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().w(FUNC(nmk16_state::raphero_scroll_w)).share("scrollram");
- map(0x130200, 0x1303ff).ram().share("scrollramy");
+ map(0x130000, 0x1301ff).ram().w(FUNC(nmk16_state::raphero_scroll_w)).share(m_gunnail_scrollram);
+ map(0x130200, 0x1303ff).ram().share(m_gunnail_scrollramy);
map(0x130400, 0x1307ff).ram();
- map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
- map(0x1f0000, 0x1fffff).rw(FUNC(nmk16_state::mainram_swapped_r), FUNC(nmk16_state::mainram_swapped_w)).share("mainram");
+ map(0x140000, 0x14ffff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x1f0000, 0x1fffff).rw(FUNC(nmk16_state::mainram_swapped_r), FUNC(nmk16_state::mainram_swapped_w)).share(m_mainram);
}
void nmk16_state::raphero_sound_mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("audiobank");
+ map(0x8000, 0xbfff).bankr(m_audiobank);
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_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(0xd000, 0xd000).w(FUNC(nmk16_state::macross2_audiobank_w));
map(0xd800, 0xd800).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write)); // main cpu
map(0xe000, 0xffff).ram();
}
@@ -987,10 +1121,10 @@ void nmk16_state::raphero_sound_mem_map(address_map &map)
void nmk16_state::macross2_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("audiobank"); // banked ROM
+ map(0x8000, 0xbfff).bankr(m_audiobank); // banked ROM
map(0xa000, 0xa000).nopr(); // IRQ ack? watchdog?
map(0xc000, 0xdfff).ram();
- map(0xe001, 0xe001).w(FUNC(nmk16_state::macross2_sound_bank_w));
+ map(0xe001, 0xe001).w(FUNC(nmk16_state::macross2_audiobank_w));
map(0xf000, 0xf000).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write)); // from 68000
}
@@ -1026,8 +1160,65 @@ void nmk16_state::bjtwin_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x094001, 0x094001).w(FUNC(nmk16_state::tilebank_w));
map(0x094003, 0x094003).w(FUNC(nmk16_state::bjtwin_scroll_w)); // sabotenb specific?
- map(0x09c000, 0x09cfff).mirror(0x1000).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
- map(0x0f0000, 0x0fffff).ram().share("mainram");
+ map(0x09c000, 0x09cfff).mirror(0x1000).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x0f0000, 0x0fffff).ram().share(m_mainram);
+}
+
+void nmk16_state::powerins_map(address_map &map)
+{
+ map(0x000000, 0x0fffff).rom();
+ map(0x100000, 0x100001).portr("SYSTEM");
+ map(0x100002, 0x100003).portr("P1_P2");
+ map(0x100008, 0x100009).portr("DSW1");
+ map(0x10000a, 0x10000b).portr("DSW2");
+ map(0x100015, 0x100015).w(FUNC(nmk16_state::flipscreen_w));
+ map(0x100016, 0x100017).nopw(); // IRQ enable or Z80 sound reset like in Macross 2?
+ map(0x100019, 0x100019).w(FUNC(nmk16_state::tilebank_w));
+ map(0x10001f, 0x10001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x120000, 0x120fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x130000, 0x130007).ram().w(FUNC(nmk16_state::scroll_w<0>)).umask16(0x00ff);
+ map(0x140000, 0x143fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share(m_bgvideoram[0]);
+ map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(nmk16_state::txvideoram_w)).share(m_txvideoram);
+ map(0x180000, 0x18ffff).ram().share(m_mainram);
+}
+
+// powerinsa: same as the original one but without the sound CPU (and inferior sound HW)
+void nmk16_state::powerinsa_map(address_map &map)
+{
+ powerins_map(map);
+ map(0x100031, 0x100031).w(FUNC(nmk16_state::powerinsa_okibank_w));
+ map(0x10003f, 0x10003f).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+}
+
+void nmk16_state::powerins_sound_map(address_map &map)
+{
+ map(0x0000, 0xbfff).rom();
+ map(0xc000, 0xdfff).ram();
+ map(0xe000, 0xe000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
+// map(0xe000, 0xe000).nopw(); // ? written only once ?
+// map(0xe001, 0xe001).nopw(); // ?
+}
+
+void nmk16_state::powerins_bootleg_audio_io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x00).r(FUNC(nmk16_state::powerins_bootleg_fake_ym2203_r)).nopw();
+ map(0x01, 0x01).noprw();
+ 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));
+}
+
+void nmk16_state::powerinsa_oki_map(address_map &map)
+{
+ map(0x00000, 0x2ffff).rom().region("oki1", 0);
+ map(0x30000, 0x3ffff).bankr(m_okibank[0]);
+}
+
+void nmk16_state::tdragonb2_oki_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).rom().region("oki", 0);
+ map(0x20000, 0x3ffff).bankr(m_okibank[0]);
}
static INPUT_PORTS_START( vandyke )
@@ -1452,6 +1643,81 @@ static INPUT_PORTS_START( tharrier )
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) //coin ?
INPUT_PORTS_END
+static INPUT_PORTS_START( tharrierb )
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("BUTTONS")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 ) // COIN2 in test mode
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 ) // COIN1 in test mode (not supported by game?)
+ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("DSW1") // DIP2 in test mode
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:!1,!2")
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x01, "2" )
+ PORT_DIPSETTING( 0x02, "4" )
+ PORT_DIPSETTING( 0x03, "5" )
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("DSW1:!4,!3")
+ PORT_DIPSETTING( 0x00, "200k" )
+ PORT_DIPSETTING( 0x04, DEF_STR( None ) )
+ PORT_DIPSETTING( 0x08, "200k/1000k" )
+ PORT_DIPSETTING( 0x0c, "200k/500k/1000k/2000k/3000k/5000k" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:!6,!5")
+ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Hardest ) )
+ PORT_DIPUNUSED_DIPLOC(0x40, 0x00, "DSW1:!7")
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW1:!8")
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
+
+ PORT_START("DSW2") // DIP1 in test mode
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("DSW2:!1,!2,!3")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("DSW2:!4,!5,!6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x28, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x38, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:!7")
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPUNUSED_DIPLOC(0x80, 0x00, "DSW2:!8")
+INPUT_PORTS_END
static INPUT_PORTS_START( mustang )
PORT_START("IN0")
@@ -1529,9 +1795,6 @@ static INPUT_PORTS_START( mustang )
PORT_DIPSETTING( 0xc000, "3" )
PORT_DIPSETTING( 0x8000, "4" )
PORT_DIPSETTING( 0x0000, "5" )
-
- PORT_START("COIN") // referenced by Seibu sound board
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( hachamf_prot )
@@ -1826,13 +2089,6 @@ static INPUT_PORTS_START( strahl )
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
INPUT_PORTS_END
-static INPUT_PORTS_START( strahljbl )
- PORT_INCLUDE(strahl)
-
- PORT_START("COIN") // referenced by Seibu sound board
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
-INPUT_PORTS_END
-
static INPUT_PORTS_START( acrobatm )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@@ -1939,9 +2195,6 @@ static INPUT_PORTS_START( acrobatmbl )
PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x2000, DEF_STR( 1C_4C ) )
-
- PORT_START("COIN") // referenced by Seibu sound board
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( bioship )
@@ -2205,9 +2458,38 @@ static INPUT_PORTS_START( tdragonb )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8") // The manual states this dip is "Unused"
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
- PORT_START("COIN") // referenced by Seibu sound board
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+static INPUT_PORTS_START( tdragonb2 )
+ PORT_INCLUDE(tdragon)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Up / P1 Start")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Button 1 / P2 Start")
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( ssmissin )
@@ -3040,6 +3322,106 @@ static INPUT_PORTS_START( nouryoku )
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:1" )
INPUT_PORTS_END
+static INPUT_PORTS_START( powerins )
+ PORT_START("SYSTEM") // $100000
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("P1_P2") // $100002
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+
+ PORT_START("DSW1") // $100008
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,6,5")
+ PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0000, "2 Coins/1 Credit (1 to continue)" )
+ PORT_DIPSETTING( 0x000e, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x000a, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:4,3,2")
+ PORT_DIPSETTING( 0x0040, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0060, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0000, "2 Coins/1 Credit (1 to continue)" )
+ PORT_DIPSETTING( 0x0070, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0050, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START("DSW2") // $10000a
+ PORT_DIPNAME( 0x0001, 0x0001, "Coin Chutes" ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x0001, "1 Chute" )
+ PORT_DIPSETTING( 0x0000, "2 Chutes" )
+ PORT_DIPNAME( 0x0002, 0x0002, "Join In Mode" ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+/*
+ In "Join In" mode, a second player can join even if one player has already
+ begun to play. Please refer to chart below:
+
+ Join In Mode Credit Join In Game Over
+ -----------------------------------------------------------------------------------------------
+ Join In OFF 1C per Player Anytime Winner of VS Plays Computer
+ Join In ON 1C = VS Mode 2 players Cannot After win VS Game Over for both players
+
+*/
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Blood Color" ) PORT_DIPLOCATION("SW2:4")
+ PORT_DIPSETTING( 0x0010, "Red" )
+ PORT_DIPSETTING( 0x0000, "Blue" )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, "Short" )
+ PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:2,1")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00c0, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( powerinj )
+ PORT_INCLUDE(powerins)
+
+ PORT_MODIFY("DSW2")
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
@@ -3739,6 +4121,13 @@ static INPUT_PORTS_START( dolmen )
PORT_DIPSETTING( 0x0000, "Credits Don't Register" )
INPUT_PORTS_END
+static INPUT_PORTS_START( dolmenk )
+ PORT_INCLUDE( dolmen )
+
+ PORT_MODIFY("IN1") // $080002.w
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Tested at boot
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Tested at boot
+INPUT_PORTS_END
static GFXDECODE_START( gfx_tharrier )
GFXDECODE_ENTRY( "fgtile", 0, gfx_8x8x4_packed_msb, 0x000, 16 ) // color 0x000-0x0ff
@@ -3768,16 +4157,282 @@ static GFXDECODE_START( gfx_bioship )
GFXDECODE_ENTRY( "fgtile", 0, gfx_8x8x4_packed_msb, 0x300, 16 ) // color 0x300-0x3ff
GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x100, 16 ) // color 0x100-0x1ff
GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x200, 16 ) // color 0x200-0x2ff
- GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x000, 16 ) // color 0x000-0x0ff
+ GFXDECODE_ENTRY( "bg2tile", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x000, 16 ) // color 0x000-0x0ff
GFXDECODE_END
static GFXDECODE_START( gfx_strahl )
GFXDECODE_ENTRY( "fgtile", 0, gfx_8x8x4_packed_msb, 0x000, 16 ) // color 0x000-0x0ff
GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x300, 16 ) // color 0x300-0x3ff
GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x100, 16 ) // color 0x100-0x1ff
- GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x200, 16 ) // color 0x200-0x2ff
+ GFXDECODE_ENTRY( "bg2tile", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x200, 16 ) // color 0x200-0x2ff
GFXDECODE_END
+static GFXDECODE_START( gfx_powerins )
+ GFXDECODE_ENTRY( "fgtile", 0, gfx_8x8x4_packed_msb, 0x200, 0x10 ) // TODO: confirm values (is it same that macross2 one?)
+ GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x000, 0x20 )
+ GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x400, 0x40 )
+GFXDECODE_END
+
+static GFXDECODE_START( gfx_powerinsc )
+ GFXDECODE_ENTRY( "bgtile", 0x280000, gfx_8x8x4_packed_lsb, 0x200, 0x10 )
+ GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x000, 0x20 )
+ GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x400, 0x40 ) // TODO: wrong decode and ROM loading
+GFXDECODE_END
+
+
+void nmk16_state::machine_start()
+{
+ save_item(NAME(m_vtiming_val));
+}
+
+void nmk16_state::machine_reset()
+{
+ m_vtiming_val = 0xff;
+}
+
+void tharrierb_state::machine_start()
+{
+ nmk16_state::machine_start();
+
+ save_item(NAME(m_mcu_out_latch_msb));
+ save_item(NAME(m_mcu_out_latch_lsb));
+ save_item(NAME(m_mcu_in_latch));
+ save_item(NAME(m_mcu_portc));
+}
+
+
+/***************************************************************************
+
+ Screen Configurations
+
+***************************************************************************/
+/*
+ This hardware relies on two counters and the contents of two PROMs for the timing signals generation.
+ The counters are implemented inside NMK902 custom chip (except tharrier) for all "low-res" games and are used to
+ address the entries on each PROM in a sequential way. On "mid-res" and "hi-res" games, one of the counters is
+ implemented outside the custom chip, due to they decided to boost up the horizontal resolution, and the initial
+ configuration is hardwired inside the chip.
+
+ - "Horizontal" signals, such as HBlank, HSync... are generated using one of the counters and a 256x4bit PROM, and
+ each step on the counter takes 2 pixel clock cycles:
+ - For "low-res" games the counter starts on 0x40 and goes to 0xFF having 192 steps. As each step is 2 px, the total
+ H-size is 384px wide. PROM entries from 0x00 to 0x39 address are never used.
+ - For "mid-res" games the counter starts on 0x20 and goes to 0xFF having 224 steps. As each step is 2 px, the total
+ H-size is 448px wide. PROM entries from 0x00 to 0x19 address are never used.
+ - For "hi-res" games the counter starts on 0x00 and goes to 0xFF having 256 steps. As each step is 2 px, the total
+ H-size is 512px wide. All PROM entries are used.
+
+ - "Vertical" signals, such as VBlank, Interrupt requests... are generated using the other counter and a 256x8bit PROM,
+ and each step on the counter takes 2 scanlines.
+ - In this case, for all games the counter starts on 0x75 and goes to 0xFF having 139 steps. As each step is 2 lines,
+ the total V-size is 278 lines high. PROM entries from 0x00 address to 0x74 are never used.
+
+ Going into more detail:
+
+ The H-timing PROMs is a 82S129 (256x4bit) (first 64 entries are not used in "low-res", and first 32 entries are not
+ used in "mid-res"). The format is:
+
+ Offset Bits Description
+ 3210
+ 0 ---x Line counter trigger (active low)
+ 1 --x- HSYNC (active low)
+ 2 -x-- HBLANK (active low)
+ 3 x--- unused on almost all games (only used in gunnail and raphero, purpose unknown)
+
+ Considering that and looking at the contents of the PROMs, the horizontal timings are below:
+
+ - For "low-res" (6MHz pixel clock):
+ 0.....31.........91.....................................................................348.....366.....383
+ /LINE-END (2 px): ----------------------------------------------------------------------------------------------------------X
+ HSYNC (32 px): XXXXXXXX---------------------------------------------------------------------------------------------------
+ HBLANK (92 + 36 px): XXXXXXXXXXXXXXXXXXX------------------------------256-wide-------------------------------XXXXXXXXXXXXXXXXXXX // HBlank ends 92 pixels after 'start of line'
+ ^
+ |
+ 'start of line' (pixel 0)
+ Each line: ( 6MHz / 384 pixels per line ) = 15625Hz = 64 usec
+
+
+ - For "mid-res" (7MHz pixel clock):
+ 0........59..........................................................................380...400...416....447
+ /LINE-END (2 px): ----------------------------------------------------------------------------------------------------------X
+ HSYNC (32 px): -------------------------------------------------------------------------------------------------XXXXXXXXXX
+ HBLANK (60 + 68 px): XXXXXXXXXXX--------------------------------------320-wide----------------------------XXXXXXXXXXXXXXXXXXXXXX // HBlank ends 60 pixels after 'start of line'
+ ^
+ |
+ 'start of line' (pixel 0)
+ Each line: ( 7MHz / 448 pixels per line ) = 15625Hz = 64 usec
+
+
+ - For "hi-res" (8MHz pixel clock):
+ 0...27............................................................................412...432...448.479...511
+ /LINE-END (2 px): ----------------------------------------------------------------------------------------------------------X
+ HSYNC (32 px): ----------------------------------------------------------------------------------------------XXXXXXX------
+ HBLANK (28 + 100 px): XXXXXX-------------------------------------------384-wide-------------------------XXXXXXXXXXXXXXXXXXXXXXXXX // HBlank ends 28 pixels after 'start of line'
+ ^
+ |
+ 'start of line' (pixel 0)
+ Each line: ( 8MHz / 512 pixels per line ) = 15625Hz = 64 usec
+
+
+ For V-timing PROM, it's tipically a 82S135 (256x8bit) (first 117 entries are not used). Some games (such as Comad
+ ones) use a 82S147 (512x8bit) with A5 tied to GND, using only half of the total space.
+ The format is:
+
+ Offset Bits Description
+ 76543210
+ 0 -------x Sprite DMA trigger (active low)
+ 1 ------x- VSYNC (active low)
+ 2 -----x-- VBLANK (active low)
+ 3 ----x--- unused
+ 4 ---x---- IPL0 (active high)
+ 5 --x----- IPL1 (active high)
+ 6 -x------ IPL2 (active high)
+ 7 x------- Interrupt Trigger (active low and effective on the very next PROM entry (2 scanlines), the interrupt is triggered on 0 to 1 transition)
+
+ Considering that and looking at the content of the PROM, the vertical timings are below:
+
+ 0.8.13..22.37.....................................................................................262...277
+ /SPR-DMA-START (2 lines):--------------------------------------------------------------------------------------------------X--------
+ VSYNC (6 lines): --XXXX-----------------------------------------------------------------------------------------------------
+ VBLANK (38 + 16 lines): XXXXXXXXXXXXX------------------------------------224-high-----------------------------------------XXXXXXXXX // VBlank ends 16 lines after 'start of frame'
+
+ (Showing timings for tdragon and other games. Some others has the IRQs a bit shifted or not all of them actually used):
+ 0.9...21.....38..53......90..103..................................................218.231.........262...277
+ IPL0 (15 + 15 lines): -------------------------XXXXXXX-----------------128-gap--------------------------XXXXXXX------------------ // some games like bioship and vandyke have this interrupt a bit shifted, will be fixed in the next PR
+ IPL1 (16 lines): -------------XXXXXX---------------------------------------------------------------------------------------- // sometimes not present, i.e. tdragon2, macross2...
+ IPL2 (26 lines): XXX-----------------------------------------------------------------------------------------------XXXXXXXXX
+ /FRAME-END (22 lines): XXXXXXXX--------------------------------------------------------------------------------------------------- // This signal is low on last 22 lines of each frame and goes high on the first line of the next one
+ ^
+ |
+ 'start of frame' (line 22)
+
+ VBLANK time: ( 6MHz / 384 pixels per line ) / 54 lines per VBlank = 289.35185185Hz = 3456 usec
+ Active video time: ( 6MHz / 384 pixels per line ) / 224 lines per Active = 69.75446428Hz = 14336 usec
+ Time between IPL0: ( 6MHz / 384 pixels per line ) / 128 lines between IPL0s = 122.0703125Hz = 8192 usec
+
+*/
+void nmk16_state::set_screen_lowres(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(12'000'000)/2, 384, 92, 348, 278, 16, 240); // confirmed
+ m_screen->set_palette(m_palette);
+
+ NMK_16BIT_SPRITE(config, m_spritegen, XTAL(12'000'000)/2);
+ m_spritegen->set_screen_size(92+348, 16+240);
+ m_spritegen->set_max_sprite_clock(384 * 263); // from hardware manual
+ m_spritegen->set_videoshift(92);
+}
+
+// only used for powerins and (original) clones
+void nmk16_state::set_screen_midres(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(14'000'000)/2, 448, 60, 380, 278, 16, 240); // confirmed
+ m_screen->set_palette(m_palette);
+
+ NMK_16BIT_SPRITE(config, m_spritegen, XTAL(14'000'000)/2);
+ m_spritegen->set_mask(0x3ff, 0x3ff);
+ m_spritegen->set_screen_size(60+380, 16+240);
+ m_spritegen->set_max_sprite_clock(448 * 263); // not verified?
+ m_spritegen->set_videoshift(60+32);
+}
+
+void nmk16_state::set_screen_hires(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(16'000'000)/2, 512, 28, 412, 278, 16, 240); // confirmed
+ m_screen->set_palette(m_palette);
+
+ NMK_16BIT_SPRITE(config, m_spritegen, XTAL(16'000'000)/2);
+ m_spritegen->set_screen_size(28+412, 16+240);
+ m_spritegen->set_max_sprite_clock(512 * 263); // not verified?
+ m_spritegen->set_videoshift(28+64);
+}
+
+/***************************************************************************
+
+ Interrupt Handlers
+
+***************************************************************************/
+/*
+ While there are only 3 different H-timing PROMs (one for each screen resolution and ignoring the 4th bit used in
+ some games), multiple V-timings PROMs exists on games using this hardware.
+
+ The differences in these V-PROMs exists mainly because each game is configured to have own interrupt timing.
+ VSYNC, VBLANK, SPRITE-DMA timings are the same for all variants, though.
+
+ Summary of triggered IRQs on different games:
+
+ - IRQ1:
+ - At 68 and 196 scanlines on most games
+ - 'tharrier' only at 146 scanline
+ - 'vandyke', 'bioship' and 'blkheart' only at 102 scanline (also 'ddealer' outside this driver).
+ 'vandyke' permanently inhibits it by software.
+ - 'powerins' only at 16 scanline (looks like it's always inhibited by software)
+
+ - IRQ2:
+ - At 16 scanline on most games (VBIN = end of VBLANK = start of active video)
+ - 'tdragon', 'macross2', 'tdragon2' and 'raphero' lack it
+ - 'tharrier' at 54 scanline
+ - 'powerins' at 128 scanline (looks like it's always inhibited by software)
+
+ - IRQ3:
+ - Only triggered by 'powerins' at 90 and 166 scanlines (looks like it's always inhibited by software)
+
+ - IRQ4: (VBOUT)
+ - At 240 scanline for all games (VBOUT = start of VBLANK = end of active video)
+*/
+TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::nmk16_scanline)
+{
+ constexpr int SPRDMA_INDEX = 0;
+// constexpr int VSYNC_INDEX = 1; // not used in emulation
+// constexpr int VBLANK_INDEX = 2; // not used in emulation
+// constexpr int NOT_USED = 3; // not used in emulation
+ constexpr int IPL0_INDEX = 4;
+ constexpr int IPL1_INDEX = 5;
+ constexpr int IPL2_INDEX = 6;
+ constexpr int TRIGG_INDEX = 7;
+
+ constexpr int PROM_START_OFFSET = 0x75; // previous entries are never addressed
+ constexpr int PROM_FRAME_OFFSET = 0x0b; // first 11 "used" entries (from 0x75 to 0x7f: 0xb entries) are prior to start of frame, which occurs on 0x80 address (128 entry)
+
+ u8 const *const prom = m_vtiming_prom->base();
+ const int len = m_vtiming_prom->bytes();
+
+ const int scanline = param;
+
+ // every PROM entry is addressed each 2 scanlines, so only even lines are actually addressing it:
+ if ((scanline & 0x1) == 0x0)
+ {
+ const u8 address = ((((scanline / 2) + PROM_FRAME_OFFSET) % (0x100 - PROM_START_OFFSET)) + PROM_START_OFFSET) % len;
+
+ LOG("nmk16_scanline: Scanline: %03d - Current PROM entry: %03d\n", scanline, address);
+
+ const u8 val = prom[address];
+
+ // Interrupt requests are triggered at rising edge of bit 7:
+ if (BIT(val & ~m_vtiming_val, TRIGG_INDEX))
+ {
+ const u8 int_level = bitswap<3>(val, IPL2_INDEX, IPL1_INDEX, IPL0_INDEX);
+ if (int_level > 0)
+ {
+ LOG("nmk16_scanline: Triggered interrupt: IRQ%d at scanline: %03d\n", int_level, scanline);
+ m_maincpu->set_input_line(int_level, HOLD_LINE);
+ }
+ }
+
+ // Sprite DMA, as per UPL docs, 256 usec after VBOUT = 4 lines, but index on the PROM says otherwise:
+ if (BIT(val & ~m_vtiming_val, SPRDMA_INDEX))
+ sprite_dma();
+
+ m_vtiming_val = val;
+ }
+}
+
+void nmk16_state::set_interrupt_timing(machine_config &config)
+{
+ TIMER(config, "scantimer").configure_scanline(FUNC(nmk16_state::nmk16_scanline), "screen", 0, 1);
+}
/*
----
@@ -3797,88 +4452,76 @@ Timing:
LV4 LV2 LV1 LV1
| DISPLAY
|<->|<--->| |
- |256| 694 | |
+ |128| 694 | |
| us| usec| |
| | DMA | |
CPU is stopped during DMA
- */
+ - 1 line = 1 / (6MHz / 384 px) = 64 usec
+ - 1 frame = 278 lines * 64 usec = 17792 usec
+ - VBlank = 54 lines * 64 usec = 3456 usec
+ - Active = 224 lines * 64 usec = 14336 usec
+ - IRQ1 gap = 128 lines * 64 usec = 8192 usec
-// todo:total scanlines is 263, adjust according to that!
-// todo: replace with raw screen timings
-TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::nmk16_scanline)
+ The following code is used for bootleg, Afega, Comad and NMK games that PROMs are still undumped, on which the
+ interrupt triggering cannot be relied on the PROMs contents.
+ */
+TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::nmk16_hacky_scanline)
{
- const int NUM_SCANLINES = 256;
- const int IRQ1_SCANLINE = 25; // guess
- const int VBIN_SCANLINE = 0;
- const int VBOUT_SCANLINE = 240;
- const int SPRDMA_SCANLINE = 241; // 256 USEC after VBOUT
+ const int VBIN_SCANLINE = 16;
+ const int VBOUT_SCANLINE = VBIN_SCANLINE + 224; // VBIN + 224 lines high of active video
+ const int SPRDMA_SCANLINE = VBOUT_SCANLINE + 2; // 2 lines after VBOUT
+ const int IRQ1_SCANLINE_1 = VBIN_SCANLINE + 52; // 52 lines after VBIN and 68 from the start of frame
+ const int IRQ1_SCANLINE_2 = IRQ1_SCANLINE_1 + 128; // 128 lines after IRQ1_SCANLINE_1
- int scanline = param;
+ const int scanline = param;
if (scanline == VBOUT_SCANLINE) // vblank-out irq
- {
m_maincpu->set_input_line(4, HOLD_LINE);
- m_dma_timer->adjust(m_screen->time_until_pos(SPRDMA_SCANLINE)/*attotime::from_usec(256)*/);
- }
+
+ // sprite DMA after VBOUT
+ if (scanline == SPRDMA_SCANLINE)
+ sprite_dma();
/* Vblank-in irq, Vandyke definitely relies that irq fires at scanline ~0 instead of 112 (as per previous
cpu_getiloops function implementation), mostly noticeable with sword collisions and related attract mode behaviour. */
if (scanline == VBIN_SCANLINE)
m_maincpu->set_input_line(2, HOLD_LINE);
- // time from IRQ2 to first IRQ1 fire. is not stated, 25 is a guess
- if (scanline == IRQ1_SCANLINE)
+ // time from IRQ2 to first IRQ1 fire
+ if (scanline == IRQ1_SCANLINE_1)
m_maincpu->set_input_line(1, HOLD_LINE);
- // 8.9ms from first IRQ1 to second IRQ1 fire. approx 128 lines (half frame time)
- if (scanline == IRQ1_SCANLINE+(NUM_SCANLINES/2)) // if this happens too late bioship sprites will glitch on the left edge
+ // 8.192ms from first IRQ1 to second IRQ1 fire. 128 lines
+ if (scanline == IRQ1_SCANLINE_2) // if this happens too late bioship sprites will glitch on the left edge
m_maincpu->set_input_line(1, HOLD_LINE);
}
-TIMER_CALLBACK_MEMBER(nmk16_state::dma_callback)
-{
- // 2 buffers confirmed on PCB, 1 on sabotenb
- memcpy(m_spriteram_old2.get(),m_spriteram_old.get(), 0x1000);
- memcpy(m_spriteram_old.get(), m_mainram + m_sprdma_base / 2, 0x1000);
- //m_maincpu->spin_until_time(attotime::from_usec(694)); // stop cpu during DMA?
-}
-
void nmk16_state::set_hacky_interrupt_timing(machine_config &config)
{
- TIMER(config, "scantimer").configure_scanline(FUNC(nmk16_state::nmk16_scanline), "screen", 0, 1);
+ TIMER(config, "scantimer").configure_scanline(FUNC(nmk16_state::nmk16_hacky_scanline), "screen", 0, 1);
}
-void nmk16_state::set_hacky_screen_lowres(machine_config &config)
+void nmk16_state::sprite_dma()
{
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- //m_screen->set_raw(XTAL(12'000'000)/2, 384, 0, 256, 278, 16, 240); // confirmed
- m_screen->set_refresh_hz(56.18);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3450));
- m_screen->set_size(256, 256);
- m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
- m_screen->set_palette(m_palette);
-
- NMK_16BIT_SPRITE(config, m_spritegen, XTAL(12'000'000)/2);
- m_spritegen->set_screen_size(384, 256);
- m_spritegen->set_max_sprite_clock(384 * 263); // from hardware manual
+ // 2 buffers confirmed on PCB, 1 on sabotenb
+ memcpy(m_spriteram_old2.get(), m_spriteram_old.get(), 0x1000);
+ memcpy(m_spriteram_old.get(), m_mainram + m_sprdma_base / 2, 0x1000);
+ //m_maincpu->spin_until_time(attotime::from_usec(694)); // stop cpu during DMA?
}
-void nmk16_state::set_hacky_screen_hires(machine_config &config)
+void nmk16_state::configure_nmk004(machine_config &config)
{
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- //m_screen->set_raw(XTAL(16'000'000)/2, 512, 0, 384, 278, 16, 240); // confirmed
- m_screen->set_refresh_hz(56.18);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3450));
- m_screen->set_size(512, 256);
- m_screen->set_visarea(0*8, 48*8-1, 2*8, 30*8-1);
- m_screen->set_palette(m_palette);
-
- NMK_16BIT_SPRITE(config, m_spritegen, XTAL(16'000'000)/2);
- m_spritegen->set_screen_size(384, 256);
- m_spritegen->set_max_sprite_clock(512 * 263); // not verified?
- m_spritegen->set_videoshift(64);
+ m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ m_nmk004->set_rom_tag("oki1", "oki2");
+ m_nmk004->set_rombank_tag(m_okibank[0], m_okibank[1]);
+ m_nmk004->ym_read_callback().set("ymsnd", FUNC(ym2203_device::read));
+ m_nmk004->ym_write_callback().set("ymsnd", FUNC(ym2203_device::write));
+ m_nmk004->oki_read_callback<0>().set(m_oki[0], FUNC(okim6295_device::read));
+ m_nmk004->oki_write_callback<0>().set(m_oki[0], FUNC(okim6295_device::write));
+ m_nmk004->oki_read_callback<1>().set(m_oki[1], FUNC(okim6295_device::read));
+ m_nmk004->oki_write_callback<1>().set(m_oki[1], FUNC(okim6295_device::write));
}
// OSC : 10MHz, 12MHz, 4MHz, 4.9152MHz
@@ -3887,14 +4530,14 @@ void nmk16_state::tharrier(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // TMP68000P-12, 10 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::tharrier_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
Z80(config, m_audiocpu, XTAL(4'915'200)); // Z0840006PSC, 4.9152 MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::tharrier_sound_map);
m_audiocpu->set_addrmap(AS_IO, &nmk16_state::tharrier_sound_io_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_spritegen->set_ext_callback(FUNC(nmk16_state::get_sprite_flip));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_tharrier));
@@ -3925,15 +4568,31 @@ void nmk16_state::tharrier(machine_config &config)
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.10);
}
+void tharrierb_state::tharrierb(machine_config &config)
+{
+ tharrier(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &tharrierb_state::tharrierb_map);
+
+ M68705R3(config, m_mcu, XTAL(4'915'200) / 2); // unknown clock
+ m_mcu->porta_w().set(FUNC(tharrierb_state::mcu_porta_w));
+ m_mcu->portb_r().set(FUNC(tharrierb_state::mcu_portb_r));
+ m_mcu->portb_w().set(FUNC(tharrierb_state::mcu_portb_w));
+ m_mcu->portc_w().set(FUNC(tharrierb_state::mcu_portc_w));
+ m_mcu->portd_r().set(FUNC(tharrierb_state::mcu_portd_r));
+
+ config.set_perfect_quantum(m_maincpu);
+}
+
void nmk16_state::mustang(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000); // 10 MHz ?
+ M68000(config, m_maincpu, XTAL(8'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::mustang_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -3945,7 +4604,7 @@ void nmk16_state::mustang(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", 1500000));
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -3966,7 +4625,7 @@ void nmk16_state::mustang(machine_config &config)
void nmk16_state::mustangb(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000); // 10 MHz ?
+ M68000(config, m_maincpu, XTAL(8'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::mustangb_map);
set_hacky_interrupt_timing(config);
@@ -3975,7 +4634,7 @@ void nmk16_state::mustangb(machine_config &config)
m_audiocpu->set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb));
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -3994,8 +4653,9 @@ void nmk16_state::mustangb(machine_config &config)
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
+ seibu_sound.coin_io_callback().set_constant(0xff); // unused
seibu_sound.set_rom_tag("audiocpu");
- seibu_sound.set_rombank_tag("seibu_bank1");
+ seibu_sound.set_rombank_tag("seibu_bank");
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
}
@@ -4003,7 +4663,7 @@ void nmk16_state::mustangb(machine_config &config)
void nmk16_state::mustangb3(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000); // 10 MHz ?
+ M68000(config, m_maincpu, XTAL(8'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::mustangb3_map);
set_hacky_interrupt_timing(config);
@@ -4012,7 +4672,7 @@ void nmk16_state::mustangb3(machine_config &config)
m_audiocpu->set_addrmap(AS_IO, &nmk16_state::tharrier_sound_io_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4045,10 +4705,10 @@ void nmk16_state::bioship(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // 10.0 MHz (verified)
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::bioship_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_strahl));
@@ -4060,7 +4720,7 @@ void nmk16_state::bioship(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, XTAL(8'000'000));
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000) / 8)); // 1.5 Mhz (verified)
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4083,10 +4743,10 @@ void nmk16_state::vandyke(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // 68000p12 running at 10Mhz, verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::vandyke_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4098,7 +4758,7 @@ void nmk16_state::vandyke(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4126,7 +4786,7 @@ void nmk16_state::vandykeb(machine_config &config)
PIC16C57(config, "mcu", 12000000).set_disable(); // 3MHz
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4147,10 +4807,10 @@ void nmk16_state::acrobatm(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // 10 MHz (verified on PCB)
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::acrobatm_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4162,7 +4822,7 @@ void nmk16_state::acrobatm(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, XTAL(16'000'000)/2);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4194,7 +4854,7 @@ void nmk16_state::acrobatmbl(machine_config &config)
PIC16C57(config, "mcu", 8_MHz_XTAL / 2).set_disable(); // divider not verified
// video hardware
- set_hacky_screen_lowres(config); // TODO: video XTAL is 12 MHz
+ set_screen_lowres(config); // TODO: video XTAL is 12 MHz
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4213,8 +4873,9 @@ void nmk16_state::acrobatmbl(machine_config &config)
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
+ seibu_sound.coin_io_callback().set_constant(0xff); // unused
seibu_sound.set_rom_tag("audiocpu");
- seibu_sound.set_rombank_tag("seibu_bank1");
+ seibu_sound.set_rombank_tag("seibu_bank");
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
}
@@ -4231,7 +4892,7 @@ void nmk16_state::tdragonb(machine_config &config) // bootleg using Raiden so
m_audiocpu->set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb));
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4250,8 +4911,9 @@ void nmk16_state::tdragonb(machine_config &config) // bootleg using Raiden so
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
+ seibu_sound.coin_io_callback().set_constant(0xff); // unused
seibu_sound.set_rom_tag("audiocpu");
- seibu_sound.set_rombank_tag("seibu_bank1");
+ seibu_sound.set_rombank_tag("seibu_bank");
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
}
@@ -4266,12 +4928,12 @@ void nmk16_state::tdragonb3(machine_config &config)
void nmk16_state::tdragonb2(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000);
+ M68000(config, m_maincpu, 10'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::tdragonb2_map);
set_hacky_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4282,7 +4944,9 @@ void nmk16_state::tdragonb2(machine_config &config)
// sound hardware
SPEAKER(config, "mono").front_center();
- OKIM6295(config, "oki", 1320000, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.40);
+ okim6295_device &oki(OKIM6295(config, "oki", 1'320'000, okim6295_device::PIN7_LOW));
+ oki.set_addrmap(0, &nmk16_state::tdragonb2_oki_map);
+ oki.add_route(ALL_OUTPUTS, "mono", 0.40);
}
void nmk16_state::tdragon(machine_config &config)
@@ -4290,10 +4954,10 @@ void nmk16_state::tdragon(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(8'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::tdragon_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4305,7 +4969,7 @@ void nmk16_state::tdragon(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4358,14 +5022,43 @@ u8 tdragon_prot_state::mcu_port6_r()
void tdragon_prot_state::machine_start()
{
+ nmk16_state::machine_start();
+
save_item(NAME(m_bus_status));
}
void tdragon_prot_state::machine_reset()
{
+ nmk16_state::machine_reset();
+
m_bus_status = 0x04;
}
+void macross_prot_state::device_post_load()
+{
+ tdragon_prot_state::device_post_load();
+
+ if (m_gfx_unscramble_enabled && !m_gfx_decoded)
+ {
+ // Loaded a state saved after graphics were decoded before decoding graphics
+ // Force graphics unscrambling now
+ decode_nmk214();
+ m_gfxdecode->gfx(1)->mark_all_dirty(); // background tiles
+ m_gfxdecode->gfx(2)->mark_all_dirty(); // sprites
+ m_bg_tilemap[0]->mark_all_dirty();
+ m_gfx_decoded = true;
+ }
+}
+
+void macross_prot_state::machine_start()
+{
+ tdragon_prot_state::machine_start();
+
+ save_item(NAME(m_init_data_nmk214));
+ save_item(NAME(m_init_clock_nmk214));
+ save_item(NAME(m_gfx_unscramble_enabled));
+}
+
void tdragon_prot_state::mcu_side_shared_w(offs_t offset, u8 data)
{
LOG("%s: mcu_side_shared_w offset %08x (data %02x)\n", machine().describe_context(), offset, data);
@@ -4374,8 +5067,9 @@ void tdragon_prot_state::mcu_side_shared_w(offs_t offset, u8 data)
u8 tdragon_prot_state::mcu_side_shared_r(offs_t offset)
{
- u8 retval = m_maincpu->space(AS_PROGRAM).read_byte((offset));
- LOG("%s: mcu_side_shared_r offset %08x (retval %02x)\n", machine().describe_context(), offset, retval);
+ const u8 retval = m_maincpu->space(AS_PROGRAM).read_byte(offset);
+ if (!machine().side_effects_disabled())
+ LOG("%s: mcu_side_shared_r offset %08x (retval %02x)\n", machine().describe_context(), offset, retval);
return retval;
}
@@ -4403,13 +5097,13 @@ void nmk16_state::ssmissin(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, 8000000); // 8 Mhz
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::ssmissin_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
Z80(config, m_audiocpu, 8000000/2); // 4 Mhz
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::ssmissin_sound_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4436,7 +5130,7 @@ void nmk16_state::strahl(machine_config &config)
set_hacky_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_strahl));
@@ -4448,7 +5142,7 @@ void nmk16_state::strahl(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", 1500000));
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4476,7 +5170,7 @@ void nmk16_state::strahljbl(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::seibu_sound_map);
m_audiocpu->set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb));
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_strahl));
@@ -4494,21 +5188,23 @@ void nmk16_state::strahljbl(machine_config &config)
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
+ seibu_sound.coin_io_callback().set_constant(0xff); // unused
seibu_sound.set_rom_tag("audiocpu");
- seibu_sound.set_rombank_tag("seibu_bank1");
+ seibu_sound.set_rombank_tag("seibu_bank");
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
}
+// OSC : 10MHz, 12MHz, 16MHz
void nmk16_state::hachamf(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000); // 10 MHz ?
+ M68000(config, m_maincpu, 10000000); // MC68000P10, 10 MHz ?
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::hachamf_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4520,7 +5216,7 @@ void nmk16_state::hachamf(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", 1500000));
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4538,8 +5234,16 @@ void nmk16_state::hachamf(machine_config &config)
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.10);
}
-u8 tdragon_prot_state::mcu_port7_r()
+void tdragon_prot_state::hachamf_prot(machine_config &config)
{
+ hachamf(config);
+
+ TMP91640(config, m_protcpu, 4000000); // Toshiba TMP91640 marked as NMK-113, with 16Kbyte internal ROM, 512bytes internal RAM
+ m_protcpu->set_addrmap(AS_PROGRAM, &tdragon_prot_state::tdragon_prot_map);
+ m_protcpu->port_write<6>().set(FUNC(tdragon_prot_state::mcu_port6_w));
+ m_protcpu->port_read<5>().set(FUNC(tdragon_prot_state::mcu_port5_r));
+ m_protcpu->port_read<6>().set(FUNC(tdragon_prot_state::mcu_port6_r));
+
// The NMK-113 code contains multiple different codepaths, which appear to be for different games
// a value is read from port 7, and masked with 0xf
// This happens in various places in the code, with 5 different possible startup programs, and
@@ -4563,20 +5267,7 @@ u8 tdragon_prot_state::mcu_port7_r()
// 0x0d - unknown
// 0x0e - Double Dealer (but we use the single game 110 found on a Double Dealer PCB)
// 0x0f - Thunder Dragon (but we use the single game 110 found on a Thunder Dragon PCB)
-
- return 0x0c;
-}
-
-void tdragon_prot_state::hachamf_prot(machine_config &config)
-{
- hachamf(config);
-
- TMP91640(config, m_protcpu, 4000000); // Toshiba TMP91640 marked as NMK-113, with 16Kbyte internal ROM, 512bytes internal RAM
- m_protcpu->set_addrmap(AS_PROGRAM, &tdragon_prot_state::tdragon_prot_map);
- m_protcpu->port_write<6>().set(FUNC(tdragon_prot_state::mcu_port6_w));
- m_protcpu->port_read<5>().set(FUNC(tdragon_prot_state::mcu_port5_r));
- m_protcpu->port_read<6>().set(FUNC(tdragon_prot_state::mcu_port6_r));
- m_protcpu->port_read<7>().set(FUNC(tdragon_prot_state::mcu_port7_r));
+ m_protcpu->port_read<7>().set_constant(0x0c);
config.set_maximum_quantum(attotime::from_hz(6000));
}
@@ -4585,12 +5276,12 @@ void tdragon_prot_state::hachamf_prot(machine_config &config)
void nmk16_state::macross(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, 10000000); // 10 MHz ?
+ M68000(config, m_maincpu, XTAL(10'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::macross_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4601,21 +5292,21 @@ void nmk16_state::macross(machine_config &config)
// sound hardware
SPEAKER(config, "mono").front_center();
- NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ NMK004(config, m_nmk004, XTAL(16'000'000)/2); // verified on PCB
+ configure_nmk004(config);
- ym2203_device &ymsnd(YM2203(config, "ymsnd", 1500000));
+ ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
ymsnd.add_route(0, "mono", 0.50);
ymsnd.add_route(1, "mono", 0.50);
ymsnd.add_route(2, "mono", 0.50);
ymsnd.add_route(3, "mono", 1.20);
- OKIM6295(config, m_oki[0], 16000000/4, okim6295_device::PIN7_LOW);
+ OKIM6295(config, m_oki[0], XTAL(16'000'000)/4, okim6295_device::PIN7_LOW); // verified on PCB
m_oki[0]->set_addrmap(0, &nmk16_state::oki1_map);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.10);
- OKIM6295(config, m_oki[1], 16000000/4, okim6295_device::PIN7_LOW);
+ OKIM6295(config, m_oki[1], XTAL(16'000'000)/4, okim6295_device::PIN7_LOW); // verified on PCB
m_oki[1]->set_addrmap(0, &nmk16_state::oki2_map);
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.10);
}
@@ -4625,10 +5316,10 @@ void nmk16_state::blkheart(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(8'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::macross_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4640,7 +5331,7 @@ void nmk16_state::blkheart(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, 8000000);
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4663,10 +5354,9 @@ void nmk16_state::gunnail(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::gunnail_map);
- set_hacky_interrupt_timing(config);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4678,7 +5368,7 @@ void nmk16_state::gunnail(machine_config &config)
SPEAKER(config, "mono").front_center();
NMK004(config, m_nmk004, XTAL(16'000'000)/2); // verified on PCB
- m_nmk004->reset_cb().set_inputline(m_maincpu, INPUT_LINE_RESET);
+ configure_nmk004(config);
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/8)); // verified on PCB
ymsnd.irq_handler().set("nmk004", FUNC(nmk004_device::ym2203_irq_handler));
@@ -4701,6 +5391,7 @@ void nmk16_state::gunnailb(machine_config &config)
gunnail(config);
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::gunnailb_map);
+ set_hacky_interrupt_timing(config);
Z80(config, m_audiocpu, 6000000); // 6 MHz ?
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::gunnailb_sound_map);
@@ -4725,14 +5416,14 @@ void nmk16_state::macross2(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // MC68000P12 10 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::macross2_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
Z80(config, m_audiocpu, 4000000); // Z8400B PS 4 MHz ?
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::macross2_sound_map);
m_audiocpu->set_addrmap(AS_IO, &nmk16_state::macross2_sound_io_map);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_5bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4769,14 +5460,14 @@ void nmk16_state::tdragon2(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // TMP68000P-12 10 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::tdragon2_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
Z80(config, m_audiocpu, 4000000); // Z0840006PSC 4? MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::macross2_sound_map);
m_audiocpu->set_addrmap(AS_IO, &nmk16_state::macross2_sound_io_map);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_5bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4831,13 +5522,13 @@ void nmk16_state::raphero(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(14'000'000)); // MC68HC000P12 or MC68000P12F or TMP68HC000P-16 14 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::raphero_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
TMP90841(config, m_audiocpu, XTAL(16'000'000) / 2); // TMP90C841AN 8 MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::raphero_sound_mem_map);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_5bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -4874,10 +5565,10 @@ void nmk16_state::bjtwin(machine_config &config)
// basic machine hardware
M68000(config, m_maincpu, XTAL(10'000'000)); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::bjtwin_map);
- set_hacky_interrupt_timing(config);
+ set_interrupt_timing(config);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_bjtwin));
@@ -4899,36 +5590,238 @@ void nmk16_state::bjtwin(machine_config &config)
nmk112.set_rom1_tag("oki2");
}
-// the 215 writes minimal data here, probably only enables the decryption logic, rather than supplying the decryption table
-void tdragon_prot_state::mcu_port3_to_214_w(u8 data)
+void nmk16_state::cactus(machine_config &config)
{
- // startup only
- logerror("%s: mcu_port3_to_214_w (data %02x)\n", machine().describe_context(), data);
+ bjtwin(config);
+
+ config.device_remove("scantimer");
+ set_hacky_interrupt_timing(config);
}
-void tdragon_prot_state::mcu_port7_to_214_w(u8 data)
+// The 215 writes minimal data here to select an unscrambling configuration hardwired inside the NMK214 chip.
+void macross_prot_state::mcu_port3_to_214_w(u8 data)
{
- // startup only
- logerror("%s: mcu_port7_to_214_w (data %02x)\n", machine().describe_context(), data);
+ LOG("%s: mcu_port3_to_214_w (data %02x)\n", machine().describe_context(), data);
+
+ // Startup only. Bit 2 on Port 3 of MCU (NMK215) acts as strobe/clock (rising edge) for storing the byte previously set on the Port 7
+ // of MCU (NMK215) into the internal registers of both NMK214 devices
+ if (m_init_clock_nmk214 == 0 && BIT(data, 2) == 1)
+ {
+ // Value is sent to both devices at the same time. Internally, each one evaluates if the value should be stored or not based on
+ // bit 3 of the incoming value matches to the operation mode configured on each device:
+ m_nmk214[0]->set_init_config(m_init_data_nmk214);
+ m_nmk214[1]->set_init_config(m_init_data_nmk214);
+
+ // Force decode gfx after setting both nmk214 init config, just for testing purposes. Real devices perform the decoding on the fly
+ // for each byte/word fetch from GFX ROMs
+ if (!m_gfx_unscramble_enabled && m_nmk214[0]->is_device_initialized() && m_nmk214[1]->is_device_initialized())
+ {
+ m_gfx_unscramble_enabled = true;
+ if (!m_gfx_decoded)
+ {
+ decode_nmk214();
+ m_gfxdecode->gfx(1)->mark_all_dirty(); // background tiles
+ m_gfxdecode->gfx(2)->mark_all_dirty(); // sprites
+ m_bg_tilemap[0]->mark_all_dirty();
+ m_gfx_decoded = true;
+ }
+ }
+ }
+
+ m_init_clock_nmk214 = BIT(data, 2);
}
-void tdragon_prot_state::saboten_prot(machine_config &config)
+void macross_prot_state::mcu_port7_to_214_w(u8 data)
{
- bjtwin(config);
+ LOG("%s: mcu_port7_to_214_w (data %02x)\n", machine().describe_context(), data);
- TMP90840(config, m_protcpu, 4000000); // Toshiba TMP90840 marked as NMK-215, with 8Kbyte internal ROM, 256bytes internal RAM
- m_protcpu->set_addrmap(AS_PROGRAM, &tdragon_prot_state::tdragon_prot_map);
- m_protcpu->port_write<6>().set(FUNC(tdragon_prot_state::mcu_port6_w));
- m_protcpu->port_read<5>().set(FUNC(tdragon_prot_state::mcu_port5_r));
- m_protcpu->port_read<6>().set(FUNC(tdragon_prot_state::mcu_port6_r));
+ // Startup only. Value written here is kept as outputs on Port 7 of MCU (NMK215) in order to be read by the NMK214 devices when the
+ // clock signal is sent (Bit 2 of Port 3)
+ m_init_data_nmk214 = data;
+}
+
+// Bitswaps that represent how the address bus of the NMK214s (13 bits) are hooked up related to the address bus of the ROMs.
+// Every element represents the bit number in the ROM address bus that should be taken for each NMK214 address bus position, starting by the LSB
+static const std::array<u8, 13> nmk214_sprites_address_bitswap = {0, 1, 2, 3, 10, 12, 13, 14, 15, 16, 17, 18, 19};
+static const std::array<u8, 13> nmk214_bg_address_bitswap = {0, 1, 2, 3, 11, 13, 14, 15, 16, 17, 18, 19, 20};
+
+void macross_prot_state::base_nmk214_215(machine_config &config)
+{
+ TMP90840(config, m_protcpu, XTAL(16'000'000)/4); // Toshiba TMP90840 marked as NMK-215, with 8Kbyte internal ROM, 256bytes internal RAM
+ m_protcpu->set_addrmap(AS_PROGRAM, &macross_prot_state::tdragon_prot_map);
+ m_protcpu->port_write<6>().set(FUNC(macross_prot_state::mcu_port6_w));
+ m_protcpu->port_read<5>().set(FUNC(macross_prot_state::mcu_port5_r));
+ m_protcpu->port_read<6>().set(FUNC(macross_prot_state::mcu_port6_r));
// the 215 has these hooked up, going to the 214
- m_protcpu->port_write<3>().set(FUNC(tdragon_prot_state::mcu_port3_to_214_w));
- m_protcpu->port_write<7>().set(FUNC(tdragon_prot_state::mcu_port7_to_214_w));
+ m_protcpu->port_write<3>().set(FUNC(macross_prot_state::mcu_port3_to_214_w));
+ m_protcpu->port_write<7>().set(FUNC(macross_prot_state::mcu_port7_to_214_w));
+
+ NMK214(config, m_nmk214[0], 0); // Descrambling device for sprite GFX data
+ m_nmk214[0]->set_mode(0);
+ m_nmk214[0]->set_input_address_bitswap(nmk214_sprites_address_bitswap);
+
+ NMK214(config, m_nmk214[1], 0); // Descrambling device for BG GFX data
+ m_nmk214[1]->set_mode(1);
+ m_nmk214[1]->set_input_address_bitswap(nmk214_bg_address_bitswap);
+}
+
+void macross_prot_state::macross_prot(machine_config &config)
+{
+ macross(config);
+ base_nmk214_215(config);
+
+ config.set_maximum_quantum(attotime::from_hz(6000));
+}
+
+void macross_prot_state::gunnail_prot(machine_config &config)
+{
+ gunnail(config);
+ set_interrupt_timing(config);
+ base_nmk214_215(config);
+
+ config.set_maximum_quantum(attotime::from_hz(6000));
+}
+
+void macross_prot_state::bjtwin_prot(machine_config &config)
+{
+ bjtwin(config);
+ base_nmk214_215(config);
config.set_maximum_quantum(attotime::from_hz(6000));
}
+void nmk16_state::powerins(machine_config &config)
+{
+ // basic machine hardware
+ M68000(config, m_maincpu, XTAL(12'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::powerins_map);
+ set_interrupt_timing(config);
+
+ Z80(config, m_audiocpu, XTAL(12'000'000) / 2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::powerins_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &nmk16_state::macross2_sound_io_map);
+
+ // video hardware
+ set_screen_midres(config);
+ m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_6bit));
+ m_spritegen->set_ext_callback(FUNC(nmk16_state::get_flip_extcode_powerins));
+ m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_powerins);
+ PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 2048);
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,powerins)
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+
+ GENERIC_LATCH_8(config, m_soundlatch);
+
+ ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000) / 8));
+ ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 2.0);
+
+ OKIM6295(config, m_oki[0], XTAL(16'000'000) / 4, okim6295_device::PIN7_LOW); // verified on PCB
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.15);
+
+ OKIM6295(config, m_oki[1], XTAL(16'000'000) / 4, okim6295_device::PIN7_LOW); // verified on PCB
+ m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.15);
+
+ nmk112_device &nmk112(NMK112(config, "nmk112", 0));
+ nmk112.set_rom0_tag("oki1");
+ nmk112.set_rom1_tag("oki2");
+}
+
+void nmk16_state::powerinsa(machine_config &config)
+{
+ // basic machine hardware
+ M68000(config, m_maincpu, XTAL(12'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::powerinsa_map);
+
+ // video hardware
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(14'318'181) / 2, 456, 60, 380, 262, 16, 240); // ~60hz, XTAL verified, correct params?
+ m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
+ m_screen->screen_vblank().set(FUNC(nmk16_state::screen_vblank_powerins_bootleg));
+ m_screen->set_palette(m_palette);
+
+ NMK_16BIT_SPRITE(config, m_spritegen, XTAL(14'000'000) / 2);
+ m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_6bit));
+ m_spritegen->set_ext_callback(FUNC(nmk16_state::get_flip_extcode_powerins));
+ m_spritegen->set_mask(0x3ff, 0x3ff);
+ m_spritegen->set_screen_size(60+380, 16+240);
+ m_spritegen->set_max_sprite_clock(448 * 263); // not verified?
+ m_spritegen->set_videoshift(60+32);
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_powerins);
+ PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 2048);
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,powerins)
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+
+ GENERIC_LATCH_8(config, m_soundlatch);
+
+ OKIM6295(config, m_oki[0], 990'000, okim6295_device::PIN7_LOW); // pin7 not verified
+ m_oki[0]->set_addrmap(0, &nmk16_state::powerinsa_oki_map);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.15);
+}
+
+void nmk16_state::powerinsb(machine_config &config)
+{
+ // basic machine hardware
+ M68000(config, m_maincpu, XTAL(12'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &nmk16_state::powerins_map);
+
+ Z80(config, m_audiocpu, XTAL(12'000'000) / 2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::powerins_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &nmk16_state::powerins_bootleg_audio_io_map);
+ m_audiocpu->set_periodic_int(FUNC(nmk16_state::irq0_line_hold), attotime::from_hz(120)); // YM2203 rate is at 150??
+
+ // video hardware
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(14'318'181) / 2, 456, 60, 380, 262, 16, 240); // ~60hz, XTAL verified, correct params?
+ m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
+ m_screen->screen_vblank().set(FUNC(nmk16_state::screen_vblank_powerins_bootleg));
+ m_screen->set_palette(m_palette);
+
+ NMK_16BIT_SPRITE(config, m_spritegen, XTAL(14'000'000) / 2);
+ m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_6bit));
+ m_spritegen->set_ext_callback(FUNC(nmk16_state::get_flip_extcode_powerins));
+ m_spritegen->set_mask(0x3ff, 0x3ff);
+ m_spritegen->set_screen_size(60+380, 16+240);
+ m_spritegen->set_max_sprite_clock(448 * 263); // not verified?
+ m_spritegen->set_videoshift(60+32);
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_powerins);
+ PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 2048);
+ MCFG_VIDEO_START_OVERRIDE(nmk16_state,powerins)
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+
+ GENERIC_LATCH_8(config, m_soundlatch);
+
+ OKIM6295(config, m_oki[0], XTAL(16'000'000) / 4, okim6295_device::PIN7_LOW);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.15);
+
+ OKIM6295(config, m_oki[1], XTAL(16'000'000) / 4, okim6295_device::PIN7_LOW);
+ m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.15);
+
+ nmk112_device &nmk112(NMK112(config, "nmk112", 0));
+ nmk112.set_rom0_tag("oki1");
+ nmk112.set_rom1_tag("oki2");
+
+ // Sound code talks to one YM2203, but it's not fitted on the board
+}
+
+void nmk16_state::powerinsc(machine_config &config)
+{
+ powerinsb(config);
+
+ m_gfxdecode->set_info(gfx_powerinsc);
+}
+
TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::manybloc_scanline)
{
int scanline = param;
@@ -5013,7 +5906,7 @@ void nmk16_tomagic_state::tomagic(machine_config &config)
m_audiocpu->set_addrmap(AS_IO, &nmk16_tomagic_state::tomagic_sound_io_map);
// video hardware
- set_hacky_screen_hires(config);
+ set_screen_hires(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_tomagic_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_tomagic_state::screen_update_macross));
@@ -5118,6 +6011,32 @@ void nmk16_state::decode_gfx()
}
}
+void macross_prot_state::decode_nmk214()
+{
+ u8 *rom;
+ int len;
+
+ // background tiles
+ rom = memregion("bgtile")->base();
+ len = memregion("bgtile")->bytes();
+ for (int A = 0; A < len; A++)
+ {
+ rom[A] = m_nmk214[1]->decode_byte(A, rom[A]);
+ }
+
+ // sprites
+ rom = memregion("sprites")->base();
+ len = memregion("sprites")->bytes();
+ for (int A = 0; A < (len - 1); A += 2)
+ {
+ // sprite ROM is 16-bit big Endian
+ u16 word = get_u16be(&rom[A]);
+
+ // A is a byte address, divide by 2 to give word address for NMK214
+ put_u16be(&rom[A], m_nmk214[0]->decode_word(A/2, word));
+ }
+}
+
void nmk16_state::decode_tdragonb()
{
/* Descrambling Info Again Taken from Raine, Huge Thanks to Antiriad and the Raine Team for
@@ -5188,6 +6107,18 @@ void nmk16_state::decode_ssmissin()
{
rom[A] = decode_byte(rom[A], decode_data_ssmissingfx[0]);
}
+
+ // Vertical timing ROM is half empty
+ rom = memregion("vtiming")->base();
+ len = memregion("vtiming")->bytes();
+ assert(len == 0x200);
+ for (int A = 0; A < len; A++)
+ {
+ if (A < 0x100)
+ rom[A] = rom[(A & 0x1f) | (A << 1 & 0x1c0)];
+ else
+ rom[A] = 0;
+ }
}
void nmk16_state::init_nmk()
@@ -5213,6 +6144,11 @@ void nmk16_state::init_tdragonb()
decode_tdragonb();
}
+void nmk16_state::init_tdragonb2()
+{
+ m_okibank[0]->configure_entries(0, 4, memregion("oki")->base(), 0x20000);
+}
+
void nmk16_state::init_ssmissin()
{
decode_ssmissin();
@@ -5225,6 +6161,11 @@ void nmk16_state::init_twinactn()
m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base(), 0x20000);
}
+void nmk16_state::init_powerinsa()
+{
+ m_okibank[0]->configure_entries(0, 5, memregion("oki1")->base() + 0x30000, 0x10000);
+}
+
void nmk16_state::init_bjtwin()
{
// Patch ROM to enable test mode
@@ -5338,13 +6279,13 @@ void afega_state::afega_map(address_map &map)
map(0x084000, 0x084003).ram().w(FUNC(afega_state::afega_scroll_w<0>)); // Scroll on redhawkb (mirror or changed?..)
map(0x084004, 0x084007).ram().w(FUNC(afega_state::afega_scroll_w<1>)); // Scroll on redhawkb (mirror or changed?..)
map(0x088000, 0x0885ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
- map(0x08c000, 0x08c003).ram().w(FUNC(afega_state::afega_scroll_w<0>)).share("afega_scroll_0"); // Scroll
- map(0x08c004, 0x08c007).ram().w(FUNC(afega_state::afega_scroll_w<1>)).share("afega_scroll_1"); //
- map(0x090000, 0x093fff).ram().w(FUNC(afega_state::bgvideoram_w<0>)).share("bgvideoram0"); // Layer 0 // ?
- map(0x09c000, 0x09c7ff).ram().w(FUNC(afega_state::txvideoram_w)).share("txvideoram"); // Layer 1
+ map(0x08c000, 0x08c003).ram().w(FUNC(afega_state::afega_scroll_w<0>)).share(m_afega_scroll[0]); // Scroll
+ map(0x08c004, 0x08c007).ram().w(FUNC(afega_state::afega_scroll_w<1>)).share(m_afega_scroll[1]); //
+ map(0x090000, 0x093fff).ram().w(FUNC(afega_state::bgvideoram_w<0>)).share(m_bgvideoram[0]); // Layer 0 // ?
+ map(0x09c000, 0x09c7ff).ram().w(FUNC(afega_state::txvideoram_w)).share(m_txvideoram); // Layer 1
- map(0x0c0000, 0x0cffff).ram().w(FUNC(afega_state::mainram_strange_w)).share("mainram");
- map(0x0f0000, 0x0fffff).ram().w(FUNC(afega_state::mainram_strange_w)).share("mainram");
+ map(0x0c0000, 0x0cffff).ram().w(FUNC(afega_state::mainram_strange_w)).share(m_mainram);
+ map(0x0f0000, 0x0fffff).ram().w(FUNC(afega_state::mainram_strange_w)).share(m_mainram);
}
// firehawk has 0x100000 bytes of program ROM (at least the switchable version) so the above can't work.
@@ -5360,13 +6301,13 @@ void afega_state::firehawk_map(address_map &map)
map(0x284000, 0x284003).ram().w(FUNC(afega_state::afega_scroll_w<0>)); // Scroll on redhawkb (mirror or changed?..)
map(0x284004, 0x284007).ram().w(FUNC(afega_state::afega_scroll_w<1>)); // Scroll on redhawkb (mirror or changed?..)
map(0x288000, 0x2885ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
- map(0x28c000, 0x28c003).ram().w(FUNC(afega_state::afega_scroll_w<0>)).share("afega_scroll_0"); // Scroll
- map(0x28c004, 0x28c007).ram().w(FUNC(afega_state::afega_scroll_w<1>)).share("afega_scroll_1"); //
- map(0x290000, 0x293fff).ram().w(FUNC(afega_state::bgvideoram_w<0>)).share("bgvideoram0"); // Layer 0 // ?
- map(0x29c000, 0x29c7ff).ram().w(FUNC(afega_state::txvideoram_w)).share("txvideoram"); // Layer 1
+ map(0x28c000, 0x28c003).ram().w(FUNC(afega_state::afega_scroll_w<0>)).share(m_afega_scroll[0]); // Scroll
+ map(0x28c004, 0x28c007).ram().w(FUNC(afega_state::afega_scroll_w<1>)).share(m_afega_scroll[1]); //
+ map(0x290000, 0x293fff).ram().w(FUNC(afega_state::bgvideoram_w<0>)).share(m_bgvideoram[0]); // Layer 0 // ?
+ map(0x29c000, 0x29c7ff).ram().w(FUNC(afega_state::txvideoram_w)).share(m_txvideoram); // Layer 1
- map(0x3c0000, 0x3cffff).ram().w(FUNC(afega_state::mainram_strange_w)).share("mainram");
- map(0x3f0000, 0x3fffff).ram().w(FUNC(afega_state::mainram_strange_w)).share("mainram");
+ map(0x3c0000, 0x3cffff).ram().w(FUNC(afega_state::mainram_strange_w)).share(m_mainram);
+ map(0x3f0000, 0x3fffff).ram().w(FUNC(afega_state::mainram_strange_w)).share(m_mainram);
}
@@ -5385,7 +6326,7 @@ void afega_state::spec2k_oki1_banking_w(u8 data)
m_oki[1]->set_rom_bank(1);
}
-void afega_state::afega_sound_cpu(address_map &map)
+void afega_state::afega_sound_map(address_map &map)
{
map(0x0003, 0x0003).nopw(); // bug in sound prg?
map(0x0004, 0x0004).nopw(); // bug in sound prg?
@@ -5396,7 +6337,7 @@ void afega_state::afega_sound_cpu(address_map &map)
map(0xf80a, 0xf80a).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295
}
-void afega_state::firehawk_sound_cpu(address_map &map)
+void afega_state::firehawk_sound_map(address_map &map)
{
map(0x0000, 0xefff).rom();
map(0xf000, 0xf7ff).ram();
@@ -5457,10 +6398,10 @@ void afega_state::stagger1(machine_config &config)
set_hacky_interrupt_timing(config);
Z80(config, m_audiocpu, XTAL(4'000'000)); // verified on PCB
- m_audiocpu->set_addrmap(AS_PROGRAM, &afega_state::afega_sound_cpu);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &afega_state::afega_sound_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(afega_state::get_colour_4bit));
m_spritegen->set_ext_callback(FUNC(afega_state::get_sprite_flip));
m_screen->set_screen_update(FUNC(afega_state::screen_update_afega));
@@ -5540,10 +6481,10 @@ void afega_state::firehawk(machine_config &config)
set_hacky_interrupt_timing(config);
Z80(config, m_audiocpu, 4000000);
- m_audiocpu->set_addrmap(AS_PROGRAM, &afega_state::firehawk_sound_cpu);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &afega_state::firehawk_sound_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(afega_state::get_colour_4bit));
m_spritegen->set_ext_callback(FUNC(afega_state::get_sprite_flip));
m_screen->set_screen_update(FUNC(afega_state::screen_update_firehawk));
@@ -5583,7 +6524,7 @@ void nmk16_state::twinactn(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &nmk16_state::ssmissin_sound_map);
// video hardware
- set_hacky_screen_lowres(config);
+ set_screen_lowres(config);
m_spritegen->set_colpri_callback(FUNC(nmk16_state::get_colour_4bit));
m_screen->set_screen_update(FUNC(nmk16_state::screen_update_macross));
@@ -5635,7 +6576,7 @@ ROM_START( vandyke )
ROM_LOAD16_BYTE( "vdk-1.16", 0x00000, 0x20000, CRC(c1d01c59) SHA1(04a7fd31ca4d87d078070390660edf08bf1d96b5) )
ROM_LOAD16_BYTE( "vdk-2.15", 0x00001, 0x20000, CRC(9d741cc2) SHA1(2d101044fba5fc5b7d63869a0a053c42fdc2598b) )
- ROM_REGION(0x10000, "audiocpu", 0 ) // 64k for sound CPU code
+ ROM_REGION(0x10000, "nmk004", 0 ) // 64k for sound CPU code
ROM_LOAD( "vdk-4.127", 0x00000, 0x10000, CRC(eba544f0) SHA1(36f6d048d15a392542a9220a244d8a7049aaff8b) )
ROM_REGION( 0x010000, "fgtile", 0 )
@@ -5656,9 +6597,11 @@ ROM_START( vandyke )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // V-sync hw (unused)
- ROM_LOAD( "ic101.bpr", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // H-sync hw (unused)
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "ic101.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
ROM_END
ROM_START( vandykejal )
@@ -5666,7 +6609,7 @@ ROM_START( vandykejal )
ROM_LOAD16_BYTE( "vdk-1.16", 0x00000, 0x20000, CRC(c1d01c59) SHA1(04a7fd31ca4d87d078070390660edf08bf1d96b5) )
ROM_LOAD16_BYTE( "jaleco2.15", 0x00001, 0x20000, CRC(170e4d2e) SHA1(6009d19d30e345fea93e039d165061e2b20ff058) )
- ROM_REGION(0x10000, "audiocpu", 0 ) // 64k for sound CPU code
+ ROM_REGION(0x10000, "nmk004", 0 ) // 64k for sound CPU code
ROM_LOAD( "vdk-4.127", 0x00000, 0x10000, CRC(eba544f0) SHA1(36f6d048d15a392542a9220a244d8a7049aaff8b) )
ROM_REGION( 0x010000, "fgtile", 0 )
@@ -5687,9 +6630,11 @@ ROM_START( vandykejal )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // V-sync hw (unused)
- ROM_LOAD( "ic101.bpr", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // H-sync hw (unused)
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "ic101.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
ROM_END
ROM_START( vandykejal2 )
@@ -5697,7 +6642,7 @@ ROM_START( vandykejal2 )
ROM_LOAD16_BYTE( "vdk-even.16", 0x00000, 0x20000, CRC(cde05a84) SHA1(dab5981d7dad9abe86cfe011da8ca0b11d484a3f) ) // Hand written labels, dated 2/12
ROM_LOAD16_BYTE( "vdk-odd.15", 0x00001, 0x20000, CRC(0f6fea40) SHA1(3acbe72c251d51b028d8c66274263a2b39b042ea) )
- ROM_REGION(0x10000, "audiocpu", 0 ) // 64k for sound CPU code
+ ROM_REGION(0x10000, "nmk004", 0 ) // 64k for sound CPU code
ROM_LOAD( "vdk-4.127", 0x00000, 0x10000, CRC(eba544f0) SHA1(36f6d048d15a392542a9220a244d8a7049aaff8b) )
ROM_REGION( 0x010000, "fgtile", 0 )
@@ -5718,9 +6663,11 @@ ROM_START( vandykejal2 )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // V-sync hw (unused)
- ROM_LOAD( "ic101.bpr", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // H-sync hw (unused)
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "ic101.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
ROM_END
ROM_START( vandykeb )
@@ -5782,13 +6729,17 @@ ROM_START( tharrier )
ROM_REGION(0x80000, "oki2", 0 ) // Oki sample data
ROM_LOAD( "89050-10.14j", 0x00000, 0x80000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x140, "proms", 0 )
- ROM_LOAD( "21.bpr", 0x00000, 0x100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) )
- ROM_LOAD( "22.bpr", 0x00000, 0x100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) )
- ROM_LOAD( "23.bpr", 0x00000, 0x020, CRC(fc3569f4) SHA1(e1c498085e4ae9d0a995c94530544b0a5b760fbf) )
- ROM_LOAD( "24.bpr", 0x00000, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) )
- ROM_LOAD( "25.bpr", 0x00000, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // same as 24.bin
- ROM_LOAD( "26.bpr", 0x00120, 0x020, CRC(0cbfb33e) SHA1(5dfee031a0a14bcd667fe2af2fa9cdfac3941d22) )
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "22.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.bpr", 0x0000, 0x0100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) ) // 82S135
+
+ ROM_REGION( 0x0240, "proms", 0 )
+ ROM_LOAD( "23.bpr", 0x00000, 0x020, CRC(fc3569f4) SHA1(e1c498085e4ae9d0a995c94530544b0a5b760fbf) ) // ???
+ ROM_LOAD( "24.bpr", 0x00020, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // ???
+ ROM_LOAD( "25.bpr", 0x00120, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // ???, same as 24.bin
+ ROM_LOAD( "26.bpr", 0x00220, 0x020, CRC(0cbfb33e) SHA1(5dfee031a0a14bcd667fe2af2fa9cdfac3941d22) ) // ???
ROM_END
ROM_START( tharrieru )
@@ -5818,13 +6769,17 @@ ROM_START( tharrieru )
ROM_REGION(0x80000, "oki2", 0 ) // Oki sample data
ROM_LOAD( "89050-10.14j", 0x00000, 0x80000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x140, "proms", 0 )
- ROM_LOAD( "21.bpr", 0x00000, 0x100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) )
- ROM_LOAD( "22.bpr", 0x00000, 0x100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) )
- ROM_LOAD( "23.bpr", 0x00000, 0x020, CRC(fc3569f4) SHA1(e1c498085e4ae9d0a995c94530544b0a5b760fbf) )
- ROM_LOAD( "24.bpr", 0x00000, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) )
- ROM_LOAD( "25.bpr", 0x00000, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // same as 24.bin
- ROM_LOAD( "26.bpr", 0x00120, 0x020, CRC(0cbfb33e) SHA1(5dfee031a0a14bcd667fe2af2fa9cdfac3941d22) )
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "22.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.bpr", 0x0000, 0x0100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) ) // 82S135
+
+ ROM_REGION( 0x0240, "proms", 0 )
+ ROM_LOAD( "23.bpr", 0x00000, 0x020, CRC(fc3569f4) SHA1(e1c498085e4ae9d0a995c94530544b0a5b760fbf) ) // ???
+ ROM_LOAD( "24.bpr", 0x00020, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // ???
+ ROM_LOAD( "25.bpr", 0x00120, 0x100, CRC(e0a009fe) SHA1(a66a27bb405d4ff8e4c0062273ee9b11e76ee520) ) // ???, same as 24.bin
+ ROM_LOAD( "26.bpr", 0x00220, 0x020, CRC(0cbfb33e) SHA1(5dfee031a0a14bcd667fe2af2fa9cdfac3941d22) ) // ???
ROM_END
ROM_START( tharrierb )
@@ -5836,7 +6791,7 @@ ROM_START( tharrierb )
ROM_LOAD( "s1.512", 0x00000, 0x10000, CRC(b959f837) SHA1(073b14935e7d5b0cad19a3471fd26e9e3a363827) )
ROM_REGION( 0x1000, "mcu", 0 )
- ROM_LOAD( "mc68705r35", 0x0000, 0x1000, NO_DUMP ) // doesn't seem to be used by the game. Possibly empty or leftover from a conversion?
+ ROM_LOAD( "mc68705r35.bin", 0x0000, 0x1000, CRC(c560798b) SHA1(aae2a04914f0253102024e1af76bcf68637f3aba) )
ROM_REGION( 0x8000, "fgtile", 0 )
ROM_LOAD( "t.256", 0x0000, 0x8000, CRC(4e9a7e0b) SHA1(ff143d1e01e865a62ecc695fe3359a2a0eacee05) ) // half size if compared to the original
@@ -5888,6 +6843,12 @@ ROM_START( tharrierb )
ROM_LOAD( "18h.512", 0x50000, 0x10000, CRC(370a2fbd) SHA1(9cdf8a6155a8afb4472f23df9d62f6a4e62fff30) )
ROM_LOAD( "19h.512", 0x60000, 0x10000, CRC(64e58cfe) SHA1(0310f5504513a8b0be20cfc337a038fcf7925131) )
ROM_LOAD( "20h.512", 0x70000, 0x10000, CRC(5ccd9205) SHA1(6e5443d6af5a896d6dd4b4e06d5c3151826bf8b5) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "22.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.bpr", 0x0000, 0x0100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) ) // 82S135
ROM_END
@@ -5964,7 +6925,7 @@ ROM_START( mustang )
ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(bd9f7c89) SHA1(a0af46a8ff82b90bece2515e1bd74e7a7ddf5379) )
ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(0eec36a5) SHA1(c549fbcd3e2741a6d0f2633ded6a85909d37f633) )
- ROM_REGION(0x10000, "audiocpu", 0 ) // 64k for sound CPU code
+ ROM_REGION(0x10000, "nmk004", 0 ) // 64k for sound CPU code
ROM_LOAD( "90058-7", 0x00000, 0x10000, CRC(920a93c8) SHA1(7660ca419e2fd98848ae7f5994994eaed023151e) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -5983,9 +6944,11 @@ ROM_START( mustang )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "90058-6", 0x00000, 0x80000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x200, "proms", 0 )
- ROM_LOAD( "10.bpr", 0x00000, 0x100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "90058-11", 0x00100, 0x100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "90058-11", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
ROM_START( mustangs )
@@ -5993,7 +6956,7 @@ ROM_START( mustangs )
ROM_LOAD16_BYTE( "90058-2", 0x00000, 0x20000, CRC(833aa458) SHA1(a9924f7044397e3a36c674b064173ffae80a79ec) )
ROM_LOAD16_BYTE( "90058-3", 0x00001, 0x20000, CRC(e4b80f06) SHA1(ce589cebb5ea85c89eb44796b821a4bd0c44b9a8) )
- ROM_REGION(0x10000, "audiocpu", 0 ) // 64k for sound CPU code
+ ROM_REGION(0x10000, "nmk004", 0 ) // 64k for sound CPU code
ROM_LOAD( "90058-7", 0x00000, 0x10000, CRC(920a93c8) SHA1(7660ca419e2fd98848ae7f5994994eaed023151e) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6012,9 +6975,11 @@ ROM_START( mustangs )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "90058-6", 0x00000, 0x80000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x200, "proms", 0 )
- ROM_LOAD( "90058-10", 0x00000, 0x100, CRC(de156d99) SHA1(07b70deca74e23bab7c13e5e9aee32d0dbb06509) ) // unknown
- ROM_LOAD( "90058-11", 0x00100, 0x100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "90058-11", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "90058-10", 0x0000, 0x0100, CRC(de156d99) SHA1(07b70deca74e23bab7c13e5e9aee32d0dbb06509) ) // 82S135
ROM_END
ROM_START( mustangb )
@@ -6193,7 +7158,7 @@ ROM_START( acrobatm )
ROM_LOAD( "am-01.ic42", 0x000000, 0x100000, CRC(5672bdaa) SHA1(5401a104d72904de19b73125451767bc63d36809) ) // Sprites
ROM_LOAD( "am-02.ic29", 0x100000, 0x080000, CRC(b4c0ace3) SHA1(5d638781d588cfbf4025d002d5a2309049fe1ee5) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "4.ic74", 0x00000, 0x10000, CRC(176905fb) SHA1(135a184f44bedd93b293b9124fa0bd725e0ee93b) )
ROM_REGION( 0x80000, "oki1", 0 ) // OKIM6295 samples
@@ -6202,9 +7167,11 @@ ROM_START( acrobatm )
ROM_REGION( 0x80000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "am-04.ic53", 0x00000, 0x80000, CRC(c1517cd4) SHA1(5a91ddc608c7a6fbdd9f93e503d39eac02ef04a4) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "10.ic81", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129, unknown purpose
- ROM_LOAD( "11.ic80", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135, unknown purpose
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "10.ic81", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "11.ic80", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
ROM_START( acrobatmbl ) // this bootleg has a PIC performing simple protection checks and Raiden sounds
@@ -6237,7 +7204,7 @@ ROM_END
/*
-S.B.S. Gomorrah / Bio-ship Paladin (UPL, 1993)
+S.B.S. Gomorrah / Bio-ship Paladin (UPL, 1990)
Hardware info by Guru
PCB Layout
@@ -6296,14 +7263,14 @@ ROM_START( bioship )
ROM_REGION( 0x80000, "sprites", 0 )
ROM_LOAD( "sbs-g_03.ic194", 0x000000, 0x80000, CRC(60e00d7b) SHA1(36fd02a7842ce1e79b8c4cfbe9c97052bef4aa62) ) // Sprites
- ROM_REGION( 0x80000, "gfx4", 0 )
+ ROM_REGION( 0x80000, "bg2tile", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) // Background
ROM_REGION16_BE(0x20000, "tilerom", 0 ) // Background tilemaps (used at runtime)
ROM_LOAD16_BYTE( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "6.ic120", 0x00000, 0x10000, CRC(5f39a980) SHA1(2a440f86685249f9c317634cad8cdedc8a8f1491) )
ROM_REGION(0x80000, "oki1", 0 ) // Oki sample data
@@ -6312,10 +7279,14 @@ ROM_START( bioship )
ROM_REGION(0x80000, "oki2", 0 ) // Oki sample data
ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x80000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // V-sync hw (unused)
- ROM_LOAD( "82s129.ic69", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // H-sync hw (unused)
- ROM_LOAD( "82s123.ic154",0x0200, 0x0020, CRC(0f789fc7) SHA1(31936c21720802da20e39b4cb030e448353e7f19) ) // ??
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic69", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "82s123.ic154", 0x0000, 0x0020, CRC(0f789fc7) SHA1(31936c21720802da20e39b4cb030e448353e7f19) ) // 82S123
ROM_END
ROM_START( sbsgomo )
@@ -6332,14 +7303,14 @@ ROM_START( sbsgomo )
ROM_REGION( 0x80000, "sprites", 0 )
ROM_LOAD( "sbs-g_03.ic194", 0x000000, 0x80000, CRC(60e00d7b) SHA1(36fd02a7842ce1e79b8c4cfbe9c97052bef4aa62) ) // Sprites
- ROM_REGION( 0x80000, "gfx4", 0 )
+ ROM_REGION( 0x80000, "bg2tile", 0 )
ROM_LOAD( "sbs-g_02.ic4", 0x000000, 0x80000, CRC(f31eb668) SHA1(67d6d56ea203edfbae4db658399bf61f14134206) ) // Background
ROM_REGION16_BE(0x20000, "tilerom", 0 ) // Background tilemaps (used at runtime)
ROM_LOAD16_BYTE( "8.ic27", 0x00000, 0x10000, CRC(75a46fea) SHA1(3d78cfc482b42779bb5aedb722c4a39cbc71bd10) )
ROM_LOAD16_BYTE( "9.ic26", 0x00001, 0x10000, CRC(d91448ee) SHA1(7f84ca3605edcab4bf226dab8dd7218cd5c3e5a4) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "6.ic120", 0x00000, 0x10000, CRC(5f39a980) SHA1(2a440f86685249f9c317634cad8cdedc8a8f1491) )
ROM_REGION(0x80000, "oki1", 0 ) // Oki sample data
@@ -6348,10 +7319,14 @@ ROM_START( sbsgomo )
ROM_REGION(0x80000, "oki2", 0 ) // Oki sample data
ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x80000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // V-sync hw (unused)
- ROM_LOAD( "82s129.ic69", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // H-sync hw (unused)
- ROM_LOAD( "82s123.ic154",0x0200, 0x0020, CRC(0f789fc7) SHA1(31936c21720802da20e39b4cb030e448353e7f19) ) // ??
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic69", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "82s123.ic154", 0x0000, 0x0020, CRC(0f789fc7) SHA1(31936c21720802da20e39b4cb030e448353e7f19) ) // 82S123
ROM_END
ROM_START( blkheart )
@@ -6359,7 +7334,7 @@ ROM_START( blkheart )
ROM_LOAD16_BYTE( "blkhrt.7", 0x00000, 0x20000, CRC(5bd248c0) SHA1(0649f4f8682404aeb3fc80643fcabc2d7836bb23) )
ROM_LOAD16_BYTE( "blkhrt.6", 0x00001, 0x20000, CRC(6449e50d) SHA1(d8cd126d921c95478346da96c20da01212395d77) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // Code for (unknown?) CPU
+ ROM_REGION( 0x10000, "nmk004", 0 ) // Code for NMK004 CPU
ROM_LOAD( "4.bin", 0x00000, 0x10000, CRC(7cefa295) SHA1(408f46613b3620cee31dec43281688d231b47ddd) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6377,9 +7352,11 @@ ROM_START( blkheart )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "90068-1.bin", 0x00000, 0x80000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
ROM_END
ROM_START( blkheartj )
@@ -6387,7 +7364,7 @@ ROM_START( blkheartj )
ROM_LOAD16_BYTE( "7.bin", 0x00000, 0x20000, CRC(e0a5c667) SHA1(3ef39b2dc1f7ffdddf586f0b3080ecd1f362ec37) )
ROM_LOAD16_BYTE( "6.bin", 0x00001, 0x20000, CRC(7cce45e8) SHA1(72491e30d1f9be2eede21fdde5a7484d4f65cfbf) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // Code for (unknown?) CPU
+ ROM_REGION( 0x10000, "nmk004", 0 ) // Code for NMK004 CPU
ROM_LOAD( "4.bin", 0x00000, 0x10000, CRC(7cefa295) SHA1(408f46613b3620cee31dec43281688d231b47ddd) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6405,9 +7382,11 @@ ROM_START( blkheartj )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "90068-1.bin", 0x00000, 0x80000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) // 82S135
ROM_END
ROM_START( tdragon )
@@ -6424,7 +7403,7 @@ ROM_START( tdragon )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "91070.4", 0x000000, 0x100000, CRC(3eedc2fe) SHA1(9f48986c231a8fbc07f2b39b2017d1e967b2ed3c) ) // Sprites
- ROM_REGION( 0x010000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x010000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "91070.1", 0x00000, 0x10000, CRC(bf493d74) SHA1(6f8f5eff4b71fb6cabda10075cfa88a3f607859e) )
ROM_REGION( 0x080000, "oki1", 0 ) // OKIM6295 samples
@@ -6433,9 +7412,11 @@ ROM_START( tdragon )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "91070.2", 0x00000, 0x80000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "91070.10", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "91070.10", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( tdragon1 )
@@ -6443,7 +7424,7 @@ ROM_START( tdragon1 )
ROM_LOAD16_BYTE( "thund.8", 0x00000, 0x20000, CRC(edd02831) SHA1(d6bc8d2c37707768a8bf666090f33eea12dda336) )
ROM_LOAD16_BYTE( "thund.7", 0x00001, 0x20000, CRC(52192fe5) SHA1(9afef197410e7feb71dc48003e181fbbaf5c99b2) )
- ROM_REGION( 0x04000, "protcpu", ROMREGION_ERASE00 )
+ ROM_REGION( 0x04000, "protcpu", 0 )
ROM_LOAD( "nmk-110-tdragon.bin", 0x00000, 0x4000, CRC(cf66a660) SHA1(a1d3346f7688e9bf5513194a2890a9a6aaf28742) ) // 910527 and "SLASH META" for game name string (Slash Metal was an earlier name for the game, tiles still exist in ROM)
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6455,7 +7436,7 @@ ROM_START( tdragon1 )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "91070.4", 0x000000, 0x100000, CRC(3eedc2fe) SHA1(9f48986c231a8fbc07f2b39b2017d1e967b2ed3c) ) // Sprites
- ROM_REGION( 0x010000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x010000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "91070.1", 0x00000, 0x10000, CRC(bf493d74) SHA1(6f8f5eff4b71fb6cabda10075cfa88a3f607859e) )
ROM_REGION( 0x080000, "oki1", 0 ) // OKIM6295 samples
@@ -6464,9 +7445,11 @@ ROM_START( tdragon1 )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "91070.2", 0x00000, 0x80000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "91070.10", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "91070.10", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( tdragonb )
@@ -6567,9 +7550,11 @@ ROM_START( ssmissin )
ROM_LOAD( "ssm13.190", 0x00000, 0x20000, CRC(618f66f0) SHA1(97637a03d9fd82305e872e9bfa489862c974bb6c) )
ROM_LOAD( "ssm12.189", 0x80000, 0x80000, CRC(e8219c83) SHA1(68673d071a58ca2bfd2de344a830417d10bc5757) ) // banked
- ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "ssm-pr2.113", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "ssm-pr1.114", 0x0100, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "ssm-pr2.113", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0200, "vtiming", 0 )
+ ROM_LOAD( "ssm-pr1.114", 0x0000, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // 82S147 - only half space used. A5 tied to GND
ROM_END
/*
@@ -6617,9 +7602,11 @@ ROM_START( airattck )
ROM_LOAD( "2.su12", 0x000000, 0x20000, CRC(93ab615b) SHA1(f670ac60f5f88148e55200e5e3591aa18b81c325) )
ROM_LOAD( "1.su13", 0x080000, 0x80000, CRC(09a836bb) SHA1(43fbd35c2ef3d201a4c82b0d3b7d7b971b385a14) )
- ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "82s129.ug6", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "82s147.uh6", 0x0100, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ug6", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0200, "vtiming", 0 )
+ ROM_LOAD( "82s147.uh6", 0x0000, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // 82S147 - only half space used. A5 tied to GND
ROM_END
ROM_START( airattcka )
@@ -6645,12 +7632,14 @@ ROM_START( airattcka )
ROM_LOAD( "2.su12", 0x000000, 0x20000, CRC(93ab615b) SHA1(f670ac60f5f88148e55200e5e3591aa18b81c325) )
ROM_LOAD( "1.su13", 0x080000, 0x80000, CRC(09a836bb) SHA1(43fbd35c2ef3d201a4c82b0d3b7d7b971b385a14) )
- ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "82s129.ug6", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "82s147.uh6", 0x0100, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ug6", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0200, "vtiming", 0 )
+ ROM_LOAD( "82s147.uh6", 0x0000, 0x0200, CRC(ed0bd072) SHA1(66a6d435d8587c82ae96dd09c39ed5749fe00e24) ) // 82S147 - only half space used. A5 tied to GND
ROM_END
-ROM_START( strahl )
+ROM_START( strahl ) // UPL 91074 PCB
ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE( "strahl-02.ic82", 0x00000, 0x20000, CRC(e6709a0d) SHA1(ec5741f6a708ac2a6831fb65198d81dc7e6c5aea) )
ROM_LOAD16_BYTE( "strahl-01.ic83", 0x00001, 0x20000, CRC(bfd021cf) SHA1(fcf252c42a58e2f7e9982869931447ee8aa5baaa) )
@@ -6666,10 +7655,10 @@ ROM_START( strahl )
ROM_LOAD( "strl4-02.57", 0x080000, 0x80000, CRC(2a38552b) SHA1(82335fc6aa3de9145dd84952e5ed423493bf7141) )
ROM_LOAD( "strl5-03.58", 0x100000, 0x80000, CRC(a0e7d210) SHA1(96a762a3a1cdeaa91bde50429e0ac665fb81190b) )
- ROM_REGION( 0x80000, "gfx4", 0 )
+ ROM_REGION( 0x80000, "bg2tile", 0 )
ROM_LOAD( "str6b1w1.776", 0x000000, 0x80000, CRC(bb1bb155) SHA1(83a02e89180e15f0e7817e0e92b4bf4e209bb69a) ) // Tiles
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "strahl-4.66", 0x00000, 0x10000, CRC(60a799c4) SHA1(8ade3cf827a389f7cb4080957dc4d67077ea4166) )
ROM_REGION( 0xa0000, "oki1", 0 ) // Oki sample data
@@ -6703,10 +7692,10 @@ ROM_START( strahlj )
ROM_LOAD( "strl4-02.57", 0x080000, 0x80000, CRC(2a38552b) SHA1(82335fc6aa3de9145dd84952e5ed423493bf7141) )
ROM_LOAD( "strl5-03.58", 0x100000, 0x80000, CRC(a0e7d210) SHA1(96a762a3a1cdeaa91bde50429e0ac665fb81190b) )
- ROM_REGION( 0x80000, "gfx4", 0 )
+ ROM_REGION( 0x80000, "bg2tile", 0 )
ROM_LOAD( "str6b1w1.776", 0x000000, 0x80000, CRC(bb1bb155) SHA1(83a02e89180e15f0e7817e0e92b4bf4e209bb69a) ) // Tiles
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "strahl-4.66", 0x00000, 0x10000, CRC(60a799c4) SHA1(8ade3cf827a389f7cb4080957dc4d67077ea4166) )
ROM_REGION( 0xa0000, "oki1", 0 ) // Oki sample data
@@ -6740,10 +7729,10 @@ ROM_START( strahlja )
ROM_LOAD( "strl4-02.57", 0x080000, 0x80000, CRC(2a38552b) SHA1(82335fc6aa3de9145dd84952e5ed423493bf7141) )
ROM_LOAD( "strl5-03.58", 0x100000, 0x80000, CRC(a0e7d210) SHA1(96a762a3a1cdeaa91bde50429e0ac665fb81190b) )
- ROM_REGION( 0x80000, "gfx4", 0 )
+ ROM_REGION( 0x80000, "bg2tile", 0 )
ROM_LOAD( "str6b1w1.776", 0x000000, 0x80000, CRC(bb1bb155) SHA1(83a02e89180e15f0e7817e0e92b4bf4e209bb69a) ) // Tiles
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "nmk004", 0 )
ROM_LOAD( "strahl-4.66", 0x00000, 0x10000, CRC(60a799c4) SHA1(8ade3cf827a389f7cb4080957dc4d67077ea4166) )
ROM_REGION( 0xa0000, "oki1", 0 ) // Oki sample data
@@ -6776,7 +7765,7 @@ ROM_START( strahljbl ) // N0 892 PCB, this bootleg uses SEIBU sound system
ROM_LOAD( "d.8m", 0x000000, 0x100000, CRC(09ede4d4) SHA1(5c5dcc57f78145b9c6e711a32afc0aab7a5a0450) )
ROM_LOAD( "5.4m", 0x100000, 0x080000, CRC(a0e7d210) SHA1(96a762a3a1cdeaa91bde50429e0ac665fb81190b) )
- ROM_REGION( 0x80000, "gfx4", 0 ) // same as original
+ ROM_REGION( 0x80000, "bg2tile", 0 ) // same as original
ROM_LOAD( "4.4m", 0x000000, 0x80000, CRC(bb1bb155) SHA1(83a02e89180e15f0e7817e0e92b4bf4e209bb69a) ) // Tiles
ROM_REGION(0x20000, "audiocpu", 0 )
@@ -6800,7 +7789,7 @@ ROM_START( hachamf )
// has 'WAKAUS' for the game name string, and appears to have programs for multiple games, depending on port 7 reads
ROM_LOAD( "nmk-113.bin", 0x00000, 0x04000, CRC(f3072715) SHA1(cee6534de6645c41cbbb1450ad3e5207e44460c7) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x10000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "1.70", 0x00000, 0x10000, CRC(9e6f48fc) SHA1(aeb5bfecc025b5478f6de874792fc0f7f54932be) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6819,6 +7808,12 @@ ROM_START( hachamf )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "91076-3.45", 0x00000, 0x80000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) // 1st & 2nd half identical, needs verifying
// 0x20000 - 0x80000 banked
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic51", 0x0000, 0x0100, BAD_DUMP CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129 - Used the dump from hachamfp
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic50", 0x0000, 0x0100, BAD_DUMP CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135 - Used the dump from hachamfp
ROM_END
ROM_START( hachamfa) // reportedly a Korean PCB / version
@@ -6830,7 +7825,7 @@ ROM_START( hachamfa) // reportedly a Korean PCB / version
// has 'WAKAUS' for the game name string, and appears to have programs for multiple games, depending on port 7 reads
ROM_LOAD( "nmk-113.bin", 0x00000, 0x04000, CRC(f3072715) SHA1(cee6534de6645c41cbbb1450ad3e5207e44460c7) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x10000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "1.70", 0x00000, 0x10000, CRC(9e6f48fc) SHA1(aeb5bfecc025b5478f6de874792fc0f7f54932be) )
ROM_REGION( 0x020000, "fgtile", 0 ) // Smaller NMK logo plus alternate Distributed by UPL Company Limited starting at tile 0xF80
@@ -6849,6 +7844,12 @@ ROM_START( hachamfa) // reportedly a Korean PCB / version
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "91076-3.45", 0x00000, 0x80000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) // 1st & 2nd half identical, needs verifying
// 0x20000 - 0x80000 banked
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic51", 0x0000, 0x0100, BAD_DUMP CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129 - Used the dump from hachamfp
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic50", 0x0000, 0x0100, BAD_DUMP CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135 - Used the dump from hachamfp
ROM_END
ROM_START( hachamfb ) // Thunder Dragon conversion - unprotected prototype or bootleg?
@@ -6856,7 +7857,7 @@ ROM_START( hachamfb ) // Thunder Dragon conversion - unprotected prototype or bo
ROM_LOAD16_BYTE( "8.bin", 0x00000, 0x20000, CRC(14845b65) SHA1(5cafd07a8a6f5ccbb36de7a90571f8b33ecf273e) ) // internally reports as 19th Sep. 1991
ROM_LOAD16_BYTE( "7.bin", 0x00001, 0x20000, CRC(069ca579) SHA1(0db4c3c41e17fca613d11de89b388a4af206ec6b) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x10000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "1.70", 0x00000, 0x10000, CRC(9e6f48fc) SHA1(aeb5bfecc025b5478f6de874792fc0f7f54932be) )
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6875,6 +7876,12 @@ ROM_START( hachamfb ) // Thunder Dragon conversion - unprotected prototype or bo
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "91076-3.45", 0x00000, 0x80000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) // 1st & 2nd half identical, needs verifying
// 0x20000 - 0x80000 banked
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic51", 0x0000, 0x0100, BAD_DUMP CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129 - Used the dump from hachamfp
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic50", 0x0000, 0x0100, BAD_DUMP CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135 - Used the dump from hachamfp
ROM_END
ROM_START( hachamfp ) // Protoype Location Test Release; Hand-written labels with various dates. 68K program ROM has 19th Sep. 1991 string.
@@ -6882,7 +7889,7 @@ ROM_START( hachamfp ) // Protoype Location Test Release; Hand-written labels wit
ROM_LOAD16_BYTE( "kf-68-pe-b.ic7", 0x00000, 0x20000, CRC(b98a525e) SHA1(161c3b3360068e606e4d4104cc172b9736a52eeb) ) // Label says "KF 9/25 II 68 PE B"
ROM_LOAD16_BYTE( "kf-68-po-b.ic6", 0x00001, 0x20000, CRC(b62ad179) SHA1(60a66fb9eb3fc792d172e1f4507a806ac2ad4217) ) // Label says "KF 9/25 II 68 PO B"
- ROM_REGION( 0x10000, "audiocpu", 0 ) // NMK004 sound data
+ ROM_REGION( 0x10000, "nmk004", 0 ) // NMK004 sound data
ROM_LOAD( "kf-snd.ic4", 0x00000, 0x10000, CRC(f7cace47) SHA1(599f6406f5bea69d77f39847d5d5fa361cdb7d00) ) // Label says "KF 9/20 SND"
ROM_REGION( 0x020000, "fgtile", 0 )
@@ -6902,21 +7909,27 @@ ROM_START( hachamfp ) // Protoype Location Test Release; Hand-written labels wit
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "kf-a1.ic1", 0x00000, 0x80000, CRC(d945aabb) SHA1(3c73bc47b79a8498f68a4b25d9c0f3d21eb0a432) ) // Label says "KF ??? A1"; corner is ripped off containing date
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "82s135.ic50", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // On main board near NMK 902
- ROM_LOAD( "82s129.ic51", 0x0100, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // On main board near NMK 902
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "82s129.ic51", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "82s135.ic50", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
ROM_START( macross )
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_WORD_SWAP( "921a03", 0x00000, 0x80000, CRC(33318d55) SHA1(c99f85e09bd334dc8ce138b08cbed2331b0d67dd) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // sound program (unknown CPU)
+ ROM_REGION( 0x10000, "nmk004", 0 ) // sound program (NMK004)
ROM_LOAD( "921a02", 0x00000, 0x10000, CRC(77c082c7) SHA1(be07aa14d0116f830f98e11a19f1debb48a5230e) )
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "921a01", 0x000000, 0x020000, CRC(bbd8242d) SHA1(7cf4897be1278e1190f499f00bc78384817a5160) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x200000, "bgtile", 0 )
ROM_LOAD( "921a04", 0x000000, 0x200000, CRC(4002e4bb) SHA1(281433d798ac85c84d4f1f3751a3032e8a3b5cd4) ) // 16x16 tiles
@@ -6929,10 +7942,14 @@ ROM_START( macross )
ROM_REGION( 0x80000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "921a06", 0x00000, 0x80000, CRC(89461d0f) SHA1(b7d27d0ee0b7ab44c20ab710b567f64fc3afb90c) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "921a08", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // unknown
- ROM_LOAD( "921a09", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "921a10", 0x0200, 0x0020, CRC(8371e42d) SHA1(6cfd70dfa00e85ec1df8832d41df331cc3e3733a) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "921a08", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "921a09", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "921a10", 0x0000, 0x0020, CRC(8371e42d) SHA1(6cfd70dfa00e85ec1df8832d41df331cc3e3733a) ) // 82S123
ROM_END
@@ -7008,12 +8025,16 @@ ROM_START( gunnail )
ROM_LOAD16_BYTE( "3e.u131", 0x00000, 0x40000, CRC(61d985b2) SHA1(96daca603f18accb47f98a3e584b2c84fc5a2ca4) )
ROM_LOAD16_BYTE( "3o.u133", 0x00001, 0x40000, CRC(f114e89c) SHA1(a12f5278167f446bb5277e87289c41b5aa365c86) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // Code for NMK004 CPU
+ ROM_REGION( 0x10000, "nmk004", 0 ) // Code for NMK004 CPU
ROM_LOAD( "92077_2.u101", 0x00000, 0x10000, CRC(cd4e55f8) SHA1(92182767ca0ec37ec4949bd1a88c2efdcdcb60ed) )
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "1.u21", 0x000000, 0x020000, CRC(3d00a9f4) SHA1(91a82e3e74c8774d7f8b2adceb228b97010facfd) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x100000, "bgtile", 0 )
ROM_LOAD( "92077-4.u19", 0x000000, 0x100000, CRC(a9ea2804) SHA1(14dbdb3c7986db5e44dc7c5be6fcf39f3d1e50b0) ) // 16x16 tiles
@@ -7026,22 +8047,31 @@ ROM_START( gunnail )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "92077-6.u57", 0x00000, 0x80000, CRC(6d133f0d) SHA1(8a5e6e27a297196f20e4de0d060f1188115809bb) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // unknown
- ROM_LOAD( "9_82s135.u72", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "10_82s123.u96", 0x0200, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "9_82s135.u72", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "10_82s123.u96", 0x0000, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) // 82S123
+
ROM_END
ROM_START( gunnailp )
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_WORD_SWAP( "3.u132", 0x00000, 0x80000, CRC(93570f03) SHA1(54fb203b5bfceb0ac86627bff3e67863f460fe73) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) // Code for NMK004 CPU
+ ROM_REGION( 0x10000, "nmk004", 0 ) // Code for NMK004 CPU
ROM_LOAD( "92077_2.u101", 0x00000, 0x10000, CRC(cd4e55f8) SHA1(92182767ca0ec37ec4949bd1a88c2efdcdcb60ed) )
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "1.u21", 0x000000, 0x020000, CRC(bdf427e4) SHA1(e9cd178d1d9e2ed72f0fb013385d935f334b8fe3) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x100000, "bgtile", 0 )
ROM_LOAD( "92077-4.u19", 0x000000, 0x100000, CRC(a9ea2804) SHA1(14dbdb3c7986db5e44dc7c5be6fcf39f3d1e50b0) ) // 16x16 tiles
@@ -7054,10 +8084,14 @@ ROM_START( gunnailp )
ROM_REGION( 0x080000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "92077-6.u57", 0x00000, 0x80000, CRC(6d133f0d) SHA1(8a5e6e27a297196f20e4de0d060f1188115809bb) ) // 0x20000 - 0x80000 banked
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // unknown
- ROM_LOAD( "9_82s135.u72", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "10_82s123.u96", 0x0200, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "9_82s135.u72", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "10_82s123.u96", 0x0000, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) // 82S123
ROM_END
// bootleg board labeled 'GT ELEKTRONIK 16.04.93' with only 1 OKI and no NMK custom chips. Only sprites and bgtile ROMs are identical to the original.
@@ -7105,9 +8139,11 @@ ROM_START( macross2 ) // Title screen shows Kanji characters & Macross II
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "bp932an.a05", 0x040000, 0x100000, CRC(b5335abb) SHA1(f4eaf4e465eeca31741d432ee46ed39ffcd92cca) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "mcrs2bpr.10", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "mcrs2bpr.10", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( macross2k ) // Title screen only shows Macross II, no Kanji. Suspected Korean version - Language dip still used for Stage info screens
@@ -7133,9 +8169,11 @@ ROM_START( macross2k ) // Title screen only shows Macross II, no Kanji. Suspect
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "bp932an.a05", 0x040000, 0x100000, CRC(b5335abb) SHA1(f4eaf4e465eeca31741d432ee46ed39ffcd92cca) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "mcrs2bpr.10", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "mcrs2bpr.10", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( macross2g )
@@ -7161,9 +8199,11 @@ ROM_START( macross2g )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "bp932an.a05", 0x040000, 0x100000, CRC(b5335abb) SHA1(f4eaf4e465eeca31741d432ee46ed39ffcd92cca) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "mcrs2bpr.10", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "mcrs2bpr.9", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "mcrs2bpr.10", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( tdragon2 )
@@ -7189,9 +8229,11 @@ ROM_START( tdragon2 )
ROM_REGION( 0x240000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ww930915.3", 0x040000, 0x200000, CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( tdragon3h )
@@ -7220,9 +8262,11 @@ ROM_START( tdragon3h )
ROM_LOAD( "conny.6", 0x040000, 0x100000, CRC(564f87ed) SHA1(010dd001fda28d9c15ca09a0d12cac438a46cd54) ) // all banked
ROM_LOAD( "conny.7", 0x140000, 0x100000, CRC(2e767f6f) SHA1(34e3f747716eb7a585340791c2cfbfde57681d69) )
- ROM_REGION( 0x0200, "proms", 0 ) // not dumped for this set
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, BAD_DUMP CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, BAD_DUMP CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 ) // not dumped for this set
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, BAD_DUMP CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 ) // not dumped for this set
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, BAD_DUMP CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( tdragon2a )
@@ -7248,9 +8292,11 @@ ROM_START( tdragon2a )
ROM_REGION( 0x240000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ww930915.3", 0x040000, 0x200000, CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( bigbang )
@@ -7276,9 +8322,11 @@ ROM_START( bigbang )
ROM_REGION( 0x240000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ww930915.3", 0x040000, 0x200000, CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
ROM_START( bigbanga )
@@ -7304,9 +8352,11 @@ ROM_START( bigbanga )
ROM_REGION( 0x240000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ww930915.3", 0x040000, 0x200000, CRC(82025bab) SHA1(ac6053700326ea730d00ec08193e2c8a2a019f0b) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
- ROM_LOAD( "10.bpr", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "10.bpr", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
ROM_END
/*
@@ -7401,6 +8451,15 @@ ROM_START( arcadian )
ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // unknown
ROM_LOAD( "prom2.u53", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
ROM_LOAD( "prom3.u60", 0x0200, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // unknown
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "prom2.u53", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
+
+ ROM_REGION( 0x0100, "color", 0 )
+ ROM_LOAD( "prom3.u60", 0x0000, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // 82S135
ROM_END
ROM_START( raphero )
@@ -7429,10 +8488,14 @@ ROM_START( raphero )
ROM_LOAD( "rhp94099.5", 0x040000, 0x200000, CRC(515eba93) SHA1(c35cb5f31f4bc7327be5777624af168f9fb364a5) ) // all banked
ROM_LOAD( "rhp94099.6", 0x240000, 0x200000, CRC(f1a80e5a) SHA1(218bd7b0c3d8b283bf96b95bf888228810699370) ) // all banked
- ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // unknown
- ROM_LOAD( "prom2.u53", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
- ROM_LOAD( "prom3.u60", 0x0200, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "prom2.u53", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
+
+ ROM_REGION( 0x0100, "color", 0 )
+ ROM_LOAD( "prom3.u60", 0x0000, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // 82S135
ROM_END
ROM_START( rapheroa )
@@ -7461,10 +8524,14 @@ ROM_START( rapheroa )
ROM_LOAD( "rhp94099.5", 0x040000, 0x200000, CRC(515eba93) SHA1(c35cb5f31f4bc7327be5777624af168f9fb364a5) ) // all banked
ROM_LOAD( "rhp94099.6", 0x240000, 0x200000, CRC(f1a80e5a) SHA1(218bd7b0c3d8b283bf96b95bf888228810699370) ) // all banked
- ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // unknown
- ROM_LOAD( "prom2.u53", 0x0100, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // unknown
- ROM_LOAD( "prom3.u60", 0x0200, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "prom1.u19", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "prom2.u53", 0x0000, 0x0100, CRC(e6ead349) SHA1(6d81b1c0233580aa48f9718bade42d640e5ef3dd) ) // 82S135
+
+ ROM_REGION( 0x0100, "color", 0 )
+ ROM_LOAD( "prom3.u60", 0x0000, 0x0100, CRC(304f98c6) SHA1(8dfd9bf719087ec30c83efe95c4561666c7d1801) ) // 82S135
ROM_END
ROM_START( sabotenb )
@@ -7476,7 +8543,7 @@ ROM_START( sabotenb )
ROM_LOAD( "ic35.sb3", 0x000000, 0x010000, CRC(eb7bc99d) SHA1(b3063afd58025a441d4750c22483e9129da402e7) ) // 8x8 tiles
ROM_REGION( 0x02000, "protcpu", 0 )
- // has 'SABOTEN' for the game name string, uploads data to '214' for sprite decryption
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
ROM_REGION( 0x200000, "bgtile", 0 )
@@ -7491,9 +8558,12 @@ ROM_START( sabotenb )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ic27.sb7", 0x040000, 0x100000, CRC(43e33a7e) SHA1(51068b63f4415712eaa25dcf1ee6b0cc2850974e) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
- ROM_LOAD( "9.ic51", 0x0100, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
ROM_END
ROM_START( sabotenba )
@@ -7502,7 +8572,7 @@ ROM_START( sabotenba )
ROM_LOAD16_BYTE( "sb2.75", 0x00001, 0x40000, CRC(0d2c1ab8) SHA1(abb43a8c5398195c0ad48d8d772ef47635bf25c2) )
ROM_REGION( 0x02000, "protcpu", 0 )
- // has 'SABOTEN' for the game name string, uploads data to '214' for sprite decryption
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
ROM_REGION( 0x010000, "fgtile", 0 )
@@ -7520,9 +8590,11 @@ ROM_START( sabotenba )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ic27.sb7", 0x040000, 0x100000, CRC(43e33a7e) SHA1(51068b63f4415712eaa25dcf1ee6b0cc2850974e) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
- ROM_LOAD( "9.ic51", 0x0100, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
ROM_END
ROM_START( cactus )
@@ -7556,6 +8628,10 @@ ROM_START( bjtwin )
ROM_REGION( 0x010000, "fgtile", 0 )
ROM_LOAD( "93087-3.bin", 0x000000, 0x010000, CRC(aa13df7c) SHA1(162d4f12364c68028e86fe97ee75c262daa4c699) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x100000, "bgtile", 0 )
ROM_LOAD( "93087-4.bin", 0x000000, 0x100000, CRC(8a4f26d0) SHA1(be057a2b6d28c623ac1f16cf02ddbe12ca430b4a) ) // 8x8 tiles
@@ -7568,9 +8644,11 @@ ROM_START( bjtwin )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "93087-7.bin", 0x040000, 0x100000, CRC(8da67808) SHA1(f042574c097f5a8c2684fcc23f2c817c168254ef) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "8.bpr", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "9.bpr", 0x0100, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
ROM_START( bjtwina )
@@ -7581,6 +8659,10 @@ ROM_START( bjtwina )
ROM_REGION( 0x010000, "fgtile", 0 )
ROM_LOAD( "93087-3.bin", 0x000000, 0x010000, CRC(aa13df7c) SHA1(162d4f12364c68028e86fe97ee75c262daa4c699) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x100000, "bgtile", 0 )
ROM_LOAD( "93087-4.bin", 0x000000, 0x100000, CRC(8a4f26d0) SHA1(be057a2b6d28c623ac1f16cf02ddbe12ca430b4a) ) // 8x8 tiles
@@ -7593,9 +8675,11 @@ ROM_START( bjtwina )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "93087-7.bin", 0x040000, 0x100000, CRC(8da67808) SHA1(f042574c097f5a8c2684fcc23f2c817c168254ef) ) // all banked
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "8.bpr", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // unknown
- ROM_LOAD( "9.bpr", 0x0100, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // unknown
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
@@ -7623,6 +8707,12 @@ ROM_START( bjtwinp )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "top.ic27", 0x040000, 0x80000, CRC(adb2f256) SHA1(ab7bb6683799203d0f46705f2fd241c6de914e77) ) // all banked
ROM_LOAD( "bottom.ic27", 0x0c0000, 0x80000, CRC(6ebeb9e4) SHA1(b547b2fbcc0a35d6183dd4f19684b04839690a2b) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
@@ -7634,6 +8724,10 @@ ROM_START( bjtwinpa )
ROM_REGION( 0x010000, "fgtile", 0 )
ROM_LOAD( "ic35.bin", 0x000000, 0x010000, CRC(aa13df7c) SHA1(162d4f12364c68028e86fe97ee75c262daa4c699) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x200000, "bgtile", 0 )
ROM_LOAD( "ic32_1.bin", 0x000000, 0x080000, CRC(e2d2b331) SHA1(d8fdbff497303a00fc866f0ef07ba74b369c0636) )
ROM_LOAD( "ic32_2.bin", 0x080000, 0x080000, CRC(28a3a845) SHA1(4daf71dce5e598ee7ee7e09bb08ec1b2f06f2b01) )
@@ -7650,6 +8744,12 @@ ROM_START( bjtwinpa )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "top.ic27", 0x040000, 0x80000, CRC(adb2f256) SHA1(ab7bb6683799203d0f46705f2fd241c6de914e77) ) // all banked
ROM_LOAD( "bottom.ic27", 0x0c0000, 0x80000, CRC(6ebeb9e4) SHA1(b547b2fbcc0a35d6183dd4f19684b04839690a2b) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135
ROM_END
ROM_START( nouryoku )
@@ -7660,6 +8760,10 @@ ROM_START( nouryoku )
ROM_REGION( 0x010000, "fgtile", 0 )
ROM_LOAD( "ic35.3", 0x000000, 0x010000, CRC(03d0c3b1) SHA1(4d5427c324e2141d0a953cc5133d10b327827e0b) ) // 8x8 tiles
+ ROM_REGION( 0x02000, "protcpu", 0 )
+ // has 'SABOTEN' for the game name string, sends commands to '214' to configure graphics unscrambling
+ ROM_LOAD( "nmk-215.bin", 0x00000, 0x02000, CRC(d355a06f) SHA1(ebb7b1ff35a97599550f6f3524124246f2d718c5) )
+
ROM_REGION( 0x200000, "bgtile", 0 )
ROM_LOAD( "ic32.4", 0x000000, 0x200000, CRC(88d454fd) SHA1(c79c48d9b3602266499a5dd0b15fd2fb032809be) ) // 8x8 tiles
@@ -7671,6 +8775,12 @@ ROM_START( nouryoku )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD( "ic27.7", 0x040000, 0x100000, CRC(8a69fded) SHA1(ee73f1789bcc672232606a4b3b28087fea1c5c69) ) // all banked
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, BAD_DUMP CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129 - taken from bjtwin
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, BAD_DUMP CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135 - taken from bjtwin
ROM_END
ROM_START( nouryokup )
@@ -7701,6 +8811,476 @@ ROM_START( nouryokup )
ROM_REGION( 0x140000, "oki2", 0 ) // OKIM6295 samples
ROM_LOAD("soundpcm2.top.ic27", 0x040000, 0x080000, CRC(29d0a15d) SHA1(a235eec225dd5006dd1f4e21d78fd647335f45dc) )
ROM_LOAD("soundpcm3.bottom.ic27", 0x0c0000, 0x080000, CRC(c764e749) SHA1(8399d3b6807bd263eee607c5625618d19688b394) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "9.ic51", 0x0000, 0x0100, BAD_DUMP CRC(435653a2) SHA1(575b4a46ea65179de3042614da438d2f6d8b572e) ) // 82S129 - taken from bjtwin
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "8.ic37", 0x0000, 0x0100, BAD_DUMP CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) // 82S135 - taken from bjtwin
+ROM_END
+
+/*
+
+Gouketsuji Ichizoku (Power Instinct Japan)
+Atlus, 1993
+
+PCB Layout
+----------
+
+OS93095 (C) ATLUS 1993 MADE IN JAPAN
+|---------------------------------------------------------------|
+|LA4460 VOL YM2203 Z80 93095-2 12MHz AAA64K1P-35(x8) |
+|4558 YM3014 M6295 6264 |
+| 93095-11 |------| CXK58258BP-35L(x8)|
+| M6295 93095-10 |NMK112| |
+| 93095-9 | | |
+| 16MHz 93095-8 |------| |------||------| |
+| DSW1 DSW2 |------| 22 |NMK009||NMK009| |
+|J |NMK005| | || | |
+|A | | |------||------| |
+|M |------| |------| |
+|M 6116 |NMK008| 93095-19 |
+|A |------|6116 6116 | | |
+| |NMK111|6116 |------| 93095-18 |
+| | | |------| |
+| |------| |NMK901| 62256 93095-4 93095-17 |
+| 6264 | | 62256 93095-3J |
+| 6264 93095-7 |------| |------------| 93095-16 |
+||------| 20 | 68000 | |
+||NMK111| 93095-6 |---| |---| |------------| 93095-15 |
+|| | |NMK| |NMK| |
+||------| 93095-5 |903| |903| 93095-14 |
+||------| |---| |---||---| 21 |
+||NMK111| 93095-1 |NMK| 93095-13 |
+|| | 6116 |902| 14MHz |
+||------| 6116 |---| 93095-12 |
+|---------------------------------------------------------------|
+Notes:
+ 68000 clock - 12.000MHz
+ Z80 clock - 6.000MHz [12/2]
+ 6295 clocks - 4.000MHz [16/4], sample rate = 4000000 / 165
+ YM2203 clock- 1.500MHz [12/8]
+ VSync - 56Hz
+ HSync - 15.35kHz
+
+ ROMs -
+ -1, -2 : 27C1001 EPROM
+ -3, -4 : 27C4096 EPROM
+ -5, -6 : 8M 42 pin mask ROM (578200)
+ -7 : 4M 40 pin mask ROM (574200)
+ -8 to -19: 8M 42 pin mask ROM (578200)
+ 20 : 82S129 PROM
+ 21 : 82S135 PROM
+ 22 : 82S123 PROM
+
+*/
+
+ROM_START( powerins )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "93095-3a.u108", 0x00000, 0x80000, CRC(9825ea3d) SHA1(567fd8e3d866a58a68608ea20c5d3fc16cf9f444) )
+ ROM_LOAD16_WORD_SWAP( "93095-4.u109", 0x80000, 0x80000, CRC(d3d7a782) SHA1(7846de0ebb09bd9b2534cd451ff9aa5175e60647) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "93095-2.u90", 0x00000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "93095-5.u16", 0x000000, 0x100000, CRC(b1371808) SHA1(15fca313314ff2e0caff35841a2fdda97f6235a8) )
+ ROM_LOAD( "93095-6.u17", 0x100000, 0x100000, CRC(29c85d80) SHA1(abd54f9c8bade21ea918a426627199da04193165) )
+ ROM_LOAD( "93095-7.u18", 0x200000, 0x080000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "93095-1.u15", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_WORD_SWAP( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
+ ROM_LOAD16_WORD_SWAP( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
+ ROM_LOAD16_WORD_SWAP( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
+ ROM_LOAD16_WORD_SWAP( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
+ ROM_LOAD16_WORD_SWAP( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
+ ROM_LOAD16_WORD_SWAP( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
+ ROM_LOAD16_WORD_SWAP( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
+ ROM_LOAD16_WORD_SWAP( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "93095-10.u48", 0x040000, 0x100000, CRC(329ac6c5) SHA1(e809b94e2623141f5a48995cfa97fe1ead7ab40b) )
+ ROM_LOAD( "93095-11.u49", 0x140000, 0x100000, CRC(75d6097c) SHA1(3c89a7c9b12087e2d969b822419d3e5f98f5cb1d) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "93095-8.u46", 0x040000, 0x100000, CRC(f019bedb) SHA1(4b6e10f85671c75b666e547887d403d6e607cec8) )
+ ROM_LOAD( "93095-9.u47", 0x140000, 0x100000, CRC(adc83765) SHA1(9e760443f9de21c1bb7e33eaa1541023fcdc60ab) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "20.u54", 0x0000, 0x0100, CRC(38bd0e2f) SHA1(20d311869642cd96bb831fdf4a458e0d872f03eb) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.u71", 0x0000, 0x0100, CRC(182cd81f) SHA1(3a76bea81b34ea7ccf56044206721058aa5b03e6) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "22.u81", 0x0000, 0x0020, CRC(67d5ec4b) SHA1(87d32948a0c88277dcdd0eaa035bde40fc7db5fe) ) // 82S123
+ROM_END
+
+ROM_START( powerinsj )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "93095-3j.u108", 0x00000, 0x80000, CRC(3050a3fb) SHA1(e7e729bf62266e2e78ccd84cf937abb99de18ad5) )
+ ROM_LOAD16_WORD_SWAP( "93095-4.u109", 0x80000, 0x80000, CRC(d3d7a782) SHA1(7846de0ebb09bd9b2534cd451ff9aa5175e60647) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "93095-2.u90", 0x00000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "93095-5.u16", 0x000000, 0x100000, CRC(b1371808) SHA1(15fca313314ff2e0caff35841a2fdda97f6235a8) )
+ ROM_LOAD( "93095-6.u17", 0x100000, 0x100000, CRC(29c85d80) SHA1(abd54f9c8bade21ea918a426627199da04193165) )
+ ROM_LOAD( "93095-7.u18", 0x200000, 0x080000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "93095-1.u15", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_WORD_SWAP( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
+ ROM_LOAD16_WORD_SWAP( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
+ ROM_LOAD16_WORD_SWAP( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
+ ROM_LOAD16_WORD_SWAP( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
+ ROM_LOAD16_WORD_SWAP( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
+ ROM_LOAD16_WORD_SWAP( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
+ ROM_LOAD16_WORD_SWAP( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
+ ROM_LOAD16_WORD_SWAP( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "93095-10.u48", 0x040000, 0x100000, CRC(329ac6c5) SHA1(e809b94e2623141f5a48995cfa97fe1ead7ab40b) )
+ ROM_LOAD( "93095-11.u49", 0x140000, 0x100000, CRC(75d6097c) SHA1(3c89a7c9b12087e2d969b822419d3e5f98f5cb1d) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "93095-8.u46", 0x040000, 0x100000, CRC(f019bedb) SHA1(4b6e10f85671c75b666e547887d403d6e607cec8) )
+ ROM_LOAD( "93095-9.u47", 0x140000, 0x100000, CRC(adc83765) SHA1(9e760443f9de21c1bb7e33eaa1541023fcdc60ab) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "20.u54", 0x0000, 0x0100, CRC(38bd0e2f) SHA1(20d311869642cd96bb831fdf4a458e0d872f03eb) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.u71", 0x0000, 0x0100, CRC(182cd81f) SHA1(3a76bea81b34ea7ccf56044206721058aa5b03e6) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "22.u81", 0x0000, 0x0020, CRC(67d5ec4b) SHA1(87d32948a0c88277dcdd0eaa035bde40fc7db5fe) ) // 82S123
+ROM_END
+
+ROM_START( powerinspu )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "3.p000.v4.0a.u116.27c240", 0x000000, 0x80000, CRC(d1dd5a3f) SHA1(b2a52a2bbdf63eddc04bae2b4322d6d320f35e89) )
+ ROM_LOAD16_WORD_SWAP( "4.p000.v3.8.u117.27c4096", 0x080000, 0x80000, CRC(9c0f23cf) SHA1(9ac78939a743c340aa51ff1b05817866124acd34) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "2.sound 9.20.u74.27c1001", 0x000000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "ba0.s0.27c040", 0x000000, 0x80000, CRC(1975b4b8) SHA1(cb400967744fa602df1bd2d88950dfdbdc77073f) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ba1.s1.27c040", 0x080000, 0x80000, CRC(376e4919) SHA1(12baa17382c176838df1b5ef86f1fa6dbcb978dd) )
+ ROM_LOAD( "ba2.s2.27c040", 0x100000, 0x80000, CRC(0d5ff532) SHA1(4febdb9cdacd85903a4a28e8df945dee0ce85558) )
+ ROM_LOAD( "ba3.s3.27c040", 0x180000, 0x80000, CRC(99b25791) SHA1(82f4bb5780826773d2e5f7143afb3ba209f57652) )
+ ROM_LOAD( "ba4.s4.27c040", 0x200000, 0x80000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "1.text 1080.u16.27c010", 0x000000, 0x20000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "fo0.mo0.27c040", 0x000001, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD16_BYTE( "fe0.me0.27c040", 0x000000, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
+ ROM_LOAD16_BYTE( "fo1.mo1.27c040", 0x100001, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
+ ROM_LOAD16_BYTE( "fe1.me1.27c040", 0x100000, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
+ ROM_LOAD16_BYTE( "fo2.mo2.27c040", 0x200001, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
+ ROM_LOAD16_BYTE( "fe2.me2.27c040", 0x200000, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
+ ROM_LOAD16_BYTE( "fo3.mo3.27c040", 0x300001, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
+ ROM_LOAD16_BYTE( "fe3.me3.27c040", 0x300000, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
+ ROM_LOAD16_BYTE( "fo4.mo4.27c040", 0x400001, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
+ ROM_LOAD16_BYTE( "fe4.me4.27c040", 0x400000, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
+ ROM_LOAD16_BYTE( "fo5.mo5.27c040", 0x500001, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
+ ROM_LOAD16_BYTE( "fe5.me5.27c040", 0x500000, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
+ ROM_LOAD16_BYTE( "fo6.mo6.27c040", 0x600001, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
+ ROM_LOAD16_BYTE( "fe6.me6.27c040", 0x600000, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
+ ROM_LOAD16_BYTE( "fo7.mo7.27c040", 0x700001, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
+ ROM_LOAD16_BYTE( "fe7.me7.27c040", 0x700000, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "ao0.ad00.27c040", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ao1.ad01.27c040", 0x0c0000, 0x80000, CRC(e31ae04d) SHA1(c08d58a4250d8bdb68b8e5012624f345936520e1) )
+ ROM_LOAD( "ao2.ad02.27c040", 0x140000, 0x80000, CRC(c4c9f599) SHA1(1d74acd626406052bec533a918ca24e14a2578f2) )
+ ROM_LOAD( "ao3.ad03.27c040", 0x1c0000, 0x80000, CRC(f0a9f0e1) SHA1(4221e0824cdc8bcd6ea1c3811f4e3b7cd99478f2) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "ad10.ad10.27c040", 0x040000, 0x80000, CRC(62557502) SHA1(d72abdaec1c6f55f9b0099b7a8a297e0e14f920c) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ad11.ad11.27c040", 0x0c0000, 0x80000, CRC(dbc86bd7) SHA1(6f1bc3c7e6976fdcd4b2341cea07002fb0cefb14) )
+ ROM_LOAD( "ad12.ad12.27c040", 0x140000, 0x80000, CRC(5839a2bd) SHA1(53988086ef97b2671044f6da9d97b1886900b64d) )
+ ROM_LOAD( "ad13.ad13.27c040", 0x1c0000, 0x80000, CRC(446f9dc3) SHA1(5c81eb9a7cbea995db9a10d3b6460d02e104825f) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "20.u54", 0x0000, 0x0100, CRC(38bd0e2f) SHA1(20d311869642cd96bb831fdf4a458e0d872f03eb) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.u71", 0x0000, 0x0100, CRC(182cd81f) SHA1(3a76bea81b34ea7ccf56044206721058aa5b03e6) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "22.u81", 0x0000, 0x0020, CRC(67d5ec4b) SHA1(87d32948a0c88277dcdd0eaa035bde40fc7db5fe) ) // 82S123
+ROM_END
+
+ROM_START( powerinspj )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "3.p000.pc_j_12-1_155e.u116", 0x000000, 0x80000, CRC(4ea18490) SHA1(6b933b7ee11c65adf15430c8b185feaddb1c0bb0) ) // labeled: PC J 12/1 155E
+ ROM_LOAD16_WORD_SWAP( "4.p000.f_p4.u117", 0x080000, 0x80000, CRC(9c0f23cf) SHA1(9ac78939a743c340aa51ff1b05817866124acd34) ) // labeled: F P4
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "2.sound 9.20.u74.27c1001", 0x000000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "ba0.s0.27c040", 0x000000, 0x80000, CRC(1975b4b8) SHA1(cb400967744fa602df1bd2d88950dfdbdc77073f) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ba1.s1.27c040", 0x080000, 0x80000, CRC(376e4919) SHA1(12baa17382c176838df1b5ef86f1fa6dbcb978dd) )
+ ROM_LOAD( "ba2.s2.27c040", 0x100000, 0x80000, CRC(0d5ff532) SHA1(4febdb9cdacd85903a4a28e8df945dee0ce85558) )
+ ROM_LOAD( "ba3.s3.27c040", 0x180000, 0x80000, CRC(99b25791) SHA1(82f4bb5780826773d2e5f7143afb3ba209f57652) )
+ ROM_LOAD( "ba4.s4.27c040", 0x200000, 0x80000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "1.text 1080.u16.27c010", 0x000000, 0x20000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "fo0.mo0.27c040", 0x000001, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD16_BYTE( "fe0.me0.27c040", 0x000000, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
+ ROM_LOAD16_BYTE( "fo1.mo1.27c040", 0x100001, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
+ ROM_LOAD16_BYTE( "fe1.me1.27c040", 0x100000, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
+ ROM_LOAD16_BYTE( "fo2.mo2.27c040", 0x200001, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
+ ROM_LOAD16_BYTE( "fe2.me2.27c040", 0x200000, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
+ ROM_LOAD16_BYTE( "fo3.mo3.27c040", 0x300001, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
+ ROM_LOAD16_BYTE( "fe3.me3.27c040", 0x300000, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
+ ROM_LOAD16_BYTE( "fo4.mo4.27c040", 0x400001, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
+ ROM_LOAD16_BYTE( "fe4.me4.27c040", 0x400000, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
+ ROM_LOAD16_BYTE( "fo5.mo5.27c040", 0x500001, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
+ ROM_LOAD16_BYTE( "fe5.me5.27c040", 0x500000, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
+ ROM_LOAD16_BYTE( "fo6.mo6.27c040", 0x600001, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
+ ROM_LOAD16_BYTE( "fe6.me6.27c040", 0x600000, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
+ ROM_LOAD16_BYTE( "fo7.mo7.27c040", 0x700001, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
+ ROM_LOAD16_BYTE( "fe7.me7.27c040", 0x700000, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "ao0.ad00.27c040", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ao1.ad01.27c040", 0x0c0000, 0x80000, CRC(e31ae04d) SHA1(c08d58a4250d8bdb68b8e5012624f345936520e1) )
+ ROM_LOAD( "ao2.ad02.27c040", 0x140000, 0x80000, CRC(c4c9f599) SHA1(1d74acd626406052bec533a918ca24e14a2578f2) )
+ ROM_LOAD( "ao3.ad03.27c040", 0x1c0000, 0x80000, CRC(f0a9f0e1) SHA1(4221e0824cdc8bcd6ea1c3811f4e3b7cd99478f2) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "ad10.ad10.27c040", 0x040000, 0x80000, CRC(62557502) SHA1(d72abdaec1c6f55f9b0099b7a8a297e0e14f920c) ) // located on OS93089 SUB daughterboard
+ ROM_LOAD( "ad11.ad11.27c040", 0x0c0000, 0x80000, CRC(dbc86bd7) SHA1(6f1bc3c7e6976fdcd4b2341cea07002fb0cefb14) )
+ ROM_LOAD( "ad12.ad12.27c040", 0x140000, 0x80000, CRC(5839a2bd) SHA1(53988086ef97b2671044f6da9d97b1886900b64d) )
+ ROM_LOAD( "ad13.ad13.27c040", 0x1c0000, 0x80000, CRC(446f9dc3) SHA1(5c81eb9a7cbea995db9a10d3b6460d02e104825f) )
+
+ ROM_REGION( 0x0100, "htiming", 0 )
+ ROM_LOAD( "20.u54", 0x0000, 0x0100, CRC(38bd0e2f) SHA1(20d311869642cd96bb831fdf4a458e0d872f03eb) ) // 82S129
+
+ ROM_REGION( 0x0100, "vtiming", 0 )
+ ROM_LOAD( "21.u71", 0x0000, 0x0100, CRC(182cd81f) SHA1(3a76bea81b34ea7ccf56044206721058aa5b03e6) ) // 82S135
+
+ ROM_REGION( 0x0020, "color", 0 )
+ ROM_LOAD( "22.u81", 0x0000, 0x0020, CRC(67d5ec4b) SHA1(87d32948a0c88277dcdd0eaa035bde40fc7db5fe) ) // 82S123
+ROM_END
+
+/***************************************************************************
+
+ Power Instinct
+
+Location Device File ID Checksum
+----------------------------------------------
+ 27C240 ROM1 4EA1 [ MAIN PROGRAM ]
+ 27C240 ROM2 FE60 [ PROGRAM DATA ]
+ 27C010 ROM3 B9F7 [ CHARACTER ]
+ 27C040 ROM4 2780 [ BACKGROUND ]
+ 27C040 ROM5 98E0 [ PCM DATA ]
+ 23C1600 ROM6 D9E9 [ BACKGROUND ]
+ 23C1600 ROM7 8B04 [ MOTION OBJ ]
+ 23C1600 ROM8 54B2 [ MOTION OBJ ]
+ 23C1600 ROM9 C7C8 [ MOTION OBJ ]
+ 23C1600 ROM10 852A [ MOTION OBJ ]
+
+Notes: This archive is of a bootleg version
+
+Brief hardware overview
+-----------------------
+
+Main processor - 68000
+ - TPC1020AFN-084C (CPLD)
+
+Sound processor - Main processor
+ - K-665-9249 (M6295)
+
+***************************************************************************/
+
+ROM_START( powerinsa )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "rom1", 0x000000, 0x080000, CRC(b86c84d6) SHA1(2ec0933130925dfae859ea6abe62a8c92385aee8) )
+ ROM_LOAD16_WORD_SWAP( "rom2", 0x080000, 0x080000, CRC(d3d7a782) SHA1(7846de0ebb09bd9b2534cd451ff9aa5175e60647) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "rom6", 0x000000, 0x200000, CRC(b6c10f80) SHA1(feece0aeaa01a455d0c4885a3699f8bda14fe00f) )
+ ROM_LOAD( "rom4", 0x200000, 0x080000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "rom3", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_WORD_SWAP( "rom10", 0x000000, 0x200000, CRC(efad50e8) SHA1(89e8c307b927e987a32d22ab4ab7f3be037cca03) )
+ ROM_LOAD16_WORD_SWAP( "rom9", 0x200000, 0x200000, CRC(08229592) SHA1(759679e89832b475adfdc783630d9ee2c105b0f3) )
+ ROM_LOAD16_WORD_SWAP( "rom8", 0x400000, 0x200000, CRC(b02fdd6d) SHA1(1e2c52b4e9999f0b564fcf13ff41b097ad7d0c39) )
+ ROM_LOAD16_WORD_SWAP( "rom7", 0x600000, 0x200000, CRC(92ab9996) SHA1(915ec8f383cc3652c3816a9b56ee54e22e104a5c) )
+
+ ROM_REGION( 0x080000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "rom5", 0x000000, 0x080000, CRC(88579c8f) SHA1(13083934ab294c9b08d3e36f55c00a6a2e5a0507) )
+ROM_END
+
+/***************************************************************************
+
+Power Instinct
+Atlus, 1993
+
+This is a bootleg US version with different sound hardware to the existing bootleg set.
+The PCB is very large and has 2 plug-in daughterboards and many mask ROMs.
+The addition of the contents of the mask ROMs would probably equal the contents of presumably
+larger mask ROMs found on the original PCB....
+
+PCB Layout
+
+|-------------------------------------------------------------|
+| M6295 4A 5A 62256 62256 |
+| M6295 4B 5B 62256 62256 |
+| 4C 5C 62256 62256 |
+| 4D 5D 62256 62256 |
+| Z80 16MHz 62256 62256 |
+| 1F 62256 62256 |
+| 6264 6116 62256 62256 |
+| 6116 62256 62256 |
+|J |
+|A |
+|M |
+|M |
+|A 82S123 11G 12G 13G 14G|
+| 11I |
+| TPC1020 6116 11J |
+|DSW1 6116 6N 6116 11K 13K |
+|DSW2 6116 6264 11L 13L 14M|
+| 82S147 6264 11O 13O 14N|
+| 11P 12P 13P 14P|
+| 2Q 62256 11Q 13Q |
+| 2R 62256 13R |
+| 68000 |
+| 12MHz 14.31818MHz |
+|-------------------------------------------------------------|
+
+Notes:
+ 68000 clock: 12.000MHz
+ Z80 clock : 6.000MHz
+ M6295 clock: 4.000MHz (both); sample rate = 4000000/165 (both)
+ VSync : 60Hz
+
+ ROMs 1F and 6N are 1M mask (MX27C1000), all other ROMs are 4M mask (MX27C4000).
+ ROMS at 5* are located on a plug-in daughterboard.
+ ROMS at 11*, 12*, 13G, 13P and 14* are located on a plug-in daughterboard.
+ 82S123 and 82S147 are PROMs.
+
+***************************************************************************/
+
+ROM_START( powerinsb )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "2q.bin", 0x000000, 0x80000, CRC(11bf3f2a) SHA1(c840add78da9b19839c667f9bbd77e0a7c560ed7) )
+ ROM_LOAD16_BYTE( "2r.bin", 0x000001, 0x80000, CRC(d8d621be) SHA1(91d501ac661c1ff52c85eee96c455c008a7dad1c) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "1f.bin", 0x000000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x280000, "bgtile", 0 )
+ ROM_LOAD( "13k.bin", 0x000000, 0x80000, CRC(1975b4b8) SHA1(cb400967744fa602df1bd2d88950dfdbdc77073f) )
+ ROM_LOAD( "13l.bin", 0x080000, 0x80000, CRC(376e4919) SHA1(12baa17382c176838df1b5ef86f1fa6dbcb978dd) )
+ ROM_LOAD( "13o.bin", 0x100000, 0x80000, CRC(0d5ff532) SHA1(4febdb9cdacd85903a4a28e8df945dee0ce85558) )
+ ROM_LOAD( "13q.bin", 0x180000, 0x80000, CRC(99b25791) SHA1(82f4bb5780826773d2e5f7143afb3ba209f57652) )
+ ROM_LOAD( "13r.bin", 0x200000, 0x80000, CRC(2dd76149) SHA1(975e4d371fdfbbd9a568da4d4c91ffd3f0ae636e) )
+
+ ROM_REGION( 0x100000, "fgtile", 0 )
+ ROM_LOAD( "6n.bin", 0x000000, 0x20000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
+
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "14g.bin", 0x000001, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) )
+ ROM_LOAD16_BYTE( "11g.bin", 0x000000, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
+ ROM_LOAD16_BYTE( "13g.bin", 0x100001, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
+ ROM_LOAD16_BYTE( "11i.bin", 0x100000, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
+ ROM_LOAD16_BYTE( "12g.bin", 0x200001, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
+ ROM_LOAD16_BYTE( "11j.bin", 0x200000, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
+ ROM_LOAD16_BYTE( "14m.bin", 0x300001, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
+ ROM_LOAD16_BYTE( "11k.bin", 0x300000, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
+ ROM_LOAD16_BYTE( "14n.bin", 0x400001, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
+ ROM_LOAD16_BYTE( "11l.bin", 0x400000, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
+ ROM_LOAD16_BYTE( "14p.bin", 0x500001, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
+ ROM_LOAD16_BYTE( "11o.bin", 0x500000, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
+ ROM_LOAD16_BYTE( "13p.bin", 0x600001, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
+ ROM_LOAD16_BYTE( "11p.bin", 0x600000, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
+ ROM_LOAD16_BYTE( "12p.bin", 0x700001, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
+ ROM_LOAD16_BYTE( "11q.bin", 0x700000, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "4a.bin", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) )
+ ROM_LOAD( "4b.bin", 0x0c0000, 0x80000, CRC(e31ae04d) SHA1(c08d58a4250d8bdb68b8e5012624f345936520e1) )
+ ROM_LOAD( "4c.bin", 0x140000, 0x80000, CRC(c4c9f599) SHA1(1d74acd626406052bec533a918ca24e14a2578f2) )
+ ROM_LOAD( "4d.bin", 0x1c0000, 0x80000, CRC(f0a9f0e1) SHA1(4221e0824cdc8bcd6ea1c3811f4e3b7cd99478f2) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "5a.bin", 0x040000, 0x80000, CRC(62557502) SHA1(d72abdaec1c6f55f9b0099b7a8a297e0e14f920c) )
+ ROM_LOAD( "5b.bin", 0x0c0000, 0x80000, CRC(dbc86bd7) SHA1(6f1bc3c7e6976fdcd4b2341cea07002fb0cefb14) )
+ ROM_LOAD( "5c.bin", 0x140000, 0x80000, CRC(5839a2bd) SHA1(53988086ef97b2671044f6da9d97b1886900b64d) )
+ ROM_LOAD( "5d.bin", 0x1c0000, 0x80000, CRC(446f9dc3) SHA1(5c81eb9a7cbea995db9a10d3b6460d02e104825f) )
+
+ ROM_REGION( 0x0220, "proms", 0 ) // unknown
+ ROM_LOAD( "82s123.bin", 0x0000, 0x0020, CRC(67d5ec4b) SHA1(87d32948a0c88277dcdd0eaa035bde40fc7db5fe) )
+ ROM_LOAD( "82s147.bin", 0x0020, 0x0200, CRC(d7818542) SHA1(e94f8004c804f260874a117d59dfa0637c5d3d73) )
+ROM_END
+
+ROM_START( powerinsc )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "10.040.u41", 0x000000, 0x80000, CRC(88e1244b) SHA1(595a560b807eab9576ed057a7e532c83860e9c40) )
+ ROM_LOAD16_BYTE( "11.040.u39", 0x000001, 0x80000, CRC(46cd506f) SHA1(4585824f65e2b7da9f815fee92bb5f6d250a286d) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "1.010.u2", 0x000000, 0x20000, CRC(4b123cc6) SHA1(ed61d3a2ab20c86b91fd7bafa717be3ce26159be) )
+
+ ROM_REGION( 0x300000, "bgtile", 0 )
+ ROM_LOAD16_BYTE( "33.040.u99", 0x000000, 0x80000, CRC(9b56a394) SHA1(f9451d8d5a911f4daa0f57af496dae08d320b3b2) )
+ ROM_LOAD16_BYTE( "22.040.u97", 0x000001, 0x80000, CRC(1e693f05) SHA1(049eeabd9b4f55f2f314f4f6871b1a0e1ec39517) )
+ ROM_LOAD16_BYTE( "32.040.u100", 0x100000, 0x80000, CRC(7749bc80) SHA1(ceee996e694865dfbc48b5365731f4903ca674f1) )
+ ROM_LOAD16_BYTE( "21.040.u98", 0x100001, 0x80000, CRC(e1586a71) SHA1(29df13a35a0c679bad0955961e7e0e70f93482c9) )
+ ROM_LOAD16_BYTE( "31.040.u102", 0x200000, 0x80000, CRC(ac5a2952) SHA1(1b15873045cd65aa823c81b293b20ef6c20c6aef) )
+ ROM_LOAD16_BYTE( "20.040.u101", 0x200001, 0x80000, CRC(e4b2823c) SHA1(1ef41ff625ad82dcc85994f87e1d82fc11e26dd8) )
+
+ // TODO: check sprites' ROM loading
+ ROM_REGION( 0x800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "30.040.u82", 0x000000, 0x80000, CRC(6668d29d) SHA1(41b7ab49b72a1ffc7618c3fc45a1c1bbe1d84d21) )
+ ROM_LOAD16_BYTE( "19.040.u91", 0x000001, 0x80000, CRC(17659d0c) SHA1(394b5dbb4461d0c05599d1ecd9fe92de999970fa) )
+ ROM_LOAD16_BYTE( "29.040.u85", 0x100000, 0x80000, CRC(c349e556) SHA1(a89d4292a6f3b3cfd5b85f8db6de207831e779e6) )
+ ROM_LOAD16_BYTE( "18.040.u84", 0x100001, 0x80000, CRC(8716f8d3) SHA1(469a967784b5ab44d91839ff0dd2b361f664ad7e) )
+ ROM_LOAD16_BYTE( "28.040.u88", 0x200000, 0x80000, CRC(f93f10ce) SHA1(de254d7c904de95d676cd283276ef8a5cafde588) )
+ ROM_LOAD16_BYTE( "17.040.u87", 0x200001, 0x80000, CRC(fa1ef844) SHA1(be11c84186f5e0a7990c005ed27b5f71e50bc450) )
+ ROM_LOAD16_BYTE( "27.040.u91", 0x300000, 0x80000, CRC(962f3455) SHA1(3637cd6047f94bc4fc8dd8d7fbc1a48b99993b0b) )
+ ROM_LOAD16_BYTE( "16.040.u90", 0x300001, 0x80000, CRC(e1a37b42) SHA1(37aa82ba166ff6549c9428e42bbad10f252d14f8) )
+ ROM_LOAD16_BYTE( "26.040.u93", 0x400000, 0x80000, CRC(6e65099c) SHA1(5c261367f086d52ec5680a0a9c0f85992c4473b9) )
+ ROM_LOAD16_BYTE( "15.040.u81", 0x400001, 0x80000, CRC(035316d3) SHA1(c1c6f243213f05a53f0fc4f3df530895c34355a9) )
+ ROM_LOAD16_BYTE( "25.040.u94", 0x500000, 0x80000, CRC(a250dea8) SHA1(6b4c5ad35f4f4cdab516118a21c58617044c3208) )
+ ROM_LOAD16_BYTE( "14.040.u96", 0x500001, 0x80000, CRC(dd976689) SHA1(ba7e80a94e6c6bb7a5b569fb5440e774cd89b79d) )
+ ROM_LOAD16_BYTE( "24.040.u95", 0x600000, 0x80000, CRC(851008f4) SHA1(cd6e5d8e6807fc3224022ca53f02f390e1232b06) )
+ ROM_LOAD16_BYTE( "13.040.u89", 0x600001, 0x80000, CRC(867262d6) SHA1(bf0b13a5bb818741150d09be44968779c55c5b96) )
+ ROM_LOAD16_BYTE( "23.040.u96", 0x700000, 0x80000, CRC(625c5b7b) SHA1(ddac164cd92459bdce5905b31eccded9b1c06086) )
+ ROM_LOAD16_BYTE( "12.040.u92", 0x700001, 0x80000, CRC(08c4e478) SHA1(172dd9532a9240014afb4817b61a3e8122be8f0c) )
+
+ ROM_REGION( 0x240000, "oki1", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "9.040.u32", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) )
+ ROM_LOAD( "8.040.u30", 0x0c0000, 0x80000, CRC(e31ae04d) SHA1(c08d58a4250d8bdb68b8e5012624f345936520e1) )
+ ROM_LOAD( "7.040.u33", 0x140000, 0x80000, CRC(c4c9f599) SHA1(1d74acd626406052bec533a918ca24e14a2578f2) )
+ ROM_LOAD( "6.040.u31", 0x1c0000, 0x80000, CRC(f0a9f0e1) SHA1(4221e0824cdc8bcd6ea1c3811f4e3b7cd99478f2) )
+
+ ROM_REGION( 0x240000, "oki2", 0 ) // 8 bit ADPCM (banked)
+ ROM_LOAD( "5.040.u36", 0x040000, 0x80000, CRC(62557502) SHA1(d72abdaec1c6f55f9b0099b7a8a297e0e14f920c) )
+ ROM_LOAD( "4.040.u34", 0x0c0000, 0x80000, CRC(dbc86bd7) SHA1(6f1bc3c7e6976fdcd4b2341cea07002fb0cefb14) )
+ ROM_LOAD( "3.040.u37", 0x140000, 0x80000, CRC(5839a2bd) SHA1(53988086ef97b2671044f6da9d97b1886900b64d) )
+ ROM_LOAD( "2.040.u35", 0x1c0000, 0x80000, CRC(446f9dc3) SHA1(5c81eb9a7cbea995db9a10d3b6460d02e104825f) )
ROM_END
ROM_START( manybloc )
@@ -8320,7 +9900,7 @@ ROM_START( redfoxwp2a )
ROM_LOAD( "afega_af1-b2.uc8", 0x000000, 0x200000, CRC(d68588c2) SHA1(c5f397d74a6ecfd2e375082f82e37c5a330fba62) )
ROM_LOAD( "afega_af1-b1.uc3", 0x200000, 0x200000, CRC(f8b200a8) SHA1(a6c43dd57b752d87138d7125b47dc0df83df8987) )
- ROM_REGION( 0x10000, "fgtile", ROMREGION_ERASEFF ) // Layer 1, 8x8x4
+ ROM_REGION( 0x10000, "fgtile", 0 ) // Layer 1, 8x8x4
ROM_LOAD( "afega_3.u4", 0x000000, 0x10000, CRC(64608687) SHA1(c13e55429171653437c8e8c7c8e9c6c5ffa2d2dc) )
ROM_REGION( 0x40000, "oki1", 0 ) // Samples
@@ -8677,6 +10257,30 @@ ROM_START( dolmen ) // Original source of the caveman concept for Bubble 2000 /
ROM_LOAD( "afega3.su13", 0x040000, 0x40000, CRC(d3531018) SHA1(940067a8634339258666c89319cb0e1b43f2af56) )
ROM_END
+ROM_START( dolmenk )
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "afega_6.uj3", 0x00000, 0x20000, CRC(834cc396) SHA1(c811e655f7058360409a961c0efe810a83266662) ) // 1xxxxxxxxxxxxxxxx = 0x00
+ ROM_LOAD16_BYTE( "afega_5.uj2", 0x00001, 0x20000, CRC(38491cad) SHA1(09aaaf05e77876978a623789c79e4267ca88e1d5) ) // 1xxxxxxxxxxxxxxxx = 0x00
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code
+ ROM_LOAD( "afega_1.su6", 0x00000, 0x10000, CRC(3d52d5f4) SHA1(cdb2ca923bca83fe0281a4f49c6b65f16c5abdd2) ) // 1ST AND 2ND HALF IDENTICAL, identical to the World version if split
+
+ ROM_REGION( 0x100000, "sprites", 0 ) // Sprites, 16x16x4
+ ROM_LOAD16_BYTE( "afega_7.ub11", 0x00000, 0x80000, CRC(f32554d4) SHA1(3199b14b9b2792fdffcbf03e15637d975fe9e585) )
+ ROM_LOAD16_BYTE( "afega_8.ub13", 0x00001, 0x80000, CRC(65f85cfe) SHA1(267960e1a1cc3bf9e9dee8d2c0d03825cead4302) )
+
+ ROM_REGION( 0x80000, "bgtile", 0 ) // Layer 0, 16x16x8
+ ROM_LOAD( "afega_9.ui20", 0x00000, 0x80000, CRC(b3fa7be6) SHA1(7ef8d902bd954960fbae727aae02dce9750f740e) )
+ // second empty socket
+
+ ROM_REGION( 0x20000, "fgtile", 0 ) // Layer 1, 8x8x4
+ ROM_LOAD( "afega_4.uj11", 0x00000, 0x20000, CRC(13fa4415) SHA1(193524ebccbaae6b8c00893c42399c38cafdbd79) )
+
+ ROM_REGION( 0x80000, "oki1", 0 ) // Samples
+ ROM_LOAD( "afega_2.su12", 0x000000, 0x20000, CRC(1a2ce1c2) SHA1(ae6991fbfe57d35f32b541367d3b31244456713e) )
+ ROM_RELOAD( 0x020000, 0x20000 )
+ ROM_LOAD( "afega_3.su13", 0x040000, 0x40000, CRC(d3531018) SHA1(940067a8634339258666c89319cb0e1b43f2af56) )
+ROM_END
/***************************************************************************
@@ -8840,7 +10444,7 @@ ROM_START( spec2kh )
ROM_LOAD( "u153.bin", 0x000000, 0x200000, CRC(a00bbf8f) SHA1(622f52ef50d52cdd5e6b250d68439caae5c13404) ) // UC2 MX29F1610ML Flash ROM
ROM_LOAD( "u152.bin", 0x200000, 0x200000, CRC(f6423fab) SHA1(253e0791eb58efa1df42e9c74d397e6e65c8c252) ) // UC3 MX29F1610ML Flash ROM
- ROM_REGION( 0x20000, "fgtile", ROMREGION_ERASEFF ) // Layer 1, 8x8x4
+ ROM_REGION( 0x20000, "fgtile", 0 ) // Layer 1, 8x8x4
ROM_LOAD( "yonatech4.u3", 0x00000, 0x20000, CRC(5626b08e) SHA1(63207ed6b4fc8684690bf3fe1991a4f3babd73e8) )
ROM_REGION( 0x40000, "oki1", 0 ) // Samples
@@ -8865,7 +10469,7 @@ ROM_START( spec2k )
ROM_LOAD( "uc3", 0x000000, 0x200000, CRC(1d087122) SHA1(9e82c5f26c1387c6006cbd9248b333921388146c) )
ROM_LOAD( "uc2", 0x200000, 0x200000, CRC(998dc05c) SHA1(cadf8bb0b8944372fbce9934b93684749ebc3ba0) )
- ROM_REGION( 0x20000, "fgtile", ROMREGION_ERASEFF ) // Layer 1, 8x8x4
+ ROM_REGION( 0x20000, "fgtile", 0 ) // Layer 1, 8x8x4
ROM_LOAD( "u3", 0x00000, 0x20000, CRC(921503b8) SHA1(dea6e9d47c9db83e79907bc0609a64176aff26bc) )
ROM_REGION( 0x40000, "oki1", 0 ) // Samples
@@ -8920,6 +10524,7 @@ ROM_START( twinactn )
ROM_LOAD( "afega.su13", 0x040000, 0x40000, CRC(30e1c306) SHA1(c859f11fd329793b11e96264e91c79a557b488a4) )
ROM_END
+
/***************************************************************************
@@ -8928,70 +10533,78 @@ ROM_END
***************************************************************************/
+GAME( 1989, tharrier, 0, tharrier, tharrier, nmk16_state, init_tharrier, ROT270, "UPL", "Task Force Harrier", MACHINE_NO_COCKTAIL )
+GAME( 1989, tharrieru, tharrier, tharrier, tharrier, nmk16_state, init_tharrier, ROT270, "UPL (American Sammy license)", "Task Force Harrier (US)", MACHINE_NO_COCKTAIL ) // US version but no regional notice
-GAME( 1989, tharrier, 0, tharrier, tharrier, nmk16_state, init_tharrier, ROT270, "UPL", "Task Force Harrier", 0 )
-GAME( 1989, tharrieru, tharrier, tharrier, tharrier, nmk16_state, init_tharrier, ROT270, "UPL (American Sammy license)", "Task Force Harrier (US)", 0 ) // US version but no regional notice
-
-GAME( 1990, mustang, 0, mustang, mustang, nmk16_state, empty_init, ROT0, "UPL", "US AAF Mustang (25th May. 1990)", 0 )
-GAME( 1990, mustangs, mustang, mustang, mustang, nmk16_state, empty_init, ROT0, "UPL (Seoul Trading license)", "US AAF Mustang (25th May. 1990 / Seoul Trading)", 0 )
+GAME( 1990, mustang, 0, mustang, mustang, nmk16_state, empty_init, ROT0, "UPL", "US AAF Mustang (25th May. 1990)", 0 )
+GAME( 1990, mustangs, mustang, mustang, mustang, nmk16_state, empty_init, ROT0, "UPL (Seoul Trading license)", "US AAF Mustang (25th May. 1990 / Seoul Trading)", 0 )
-GAME( 1990, bioship, 0, bioship, bioship, nmk16_state, empty_init, ROT0, "UPL (American Sammy license)", "Bio-ship Paladin", 0 ) // US version but no regional notice
-GAME( 1990, sbsgomo, bioship, bioship, bioship, nmk16_state, empty_init, ROT0, "UPL", "Space Battle Ship Gomorrah", 0 )
+GAME( 1990, bioship, 0, bioship, bioship, nmk16_state, empty_init, ROT0, "UPL (American Sammy license)", "Bio-ship Paladin", 0 ) // US version but no regional notice
+GAME( 1990, sbsgomo, bioship, bioship, bioship, nmk16_state, empty_init, ROT0, "UPL", "Space Battle Ship Gomorrah", 0 )
-GAME( 1990, vandyke, 0, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL", "Vandyke (Japan)", 0 )
-GAME( 1990, vandykejal, vandyke, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, set 1)", 0 )
-GAME( 1990, vandykejal2,vandyke, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, set 2)", 0 )
-GAME( 1990, vandykeb, vandyke, vandykeb, vandykeb, nmk16_state, init_vandykeb, ROT270, "bootleg", "Vandyke (bootleg with PIC16c57)", MACHINE_NO_SOUND )
+GAME( 1990, vandyke, 0, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL", "Vandyke (Japan)", 0 )
+GAME( 1990, vandykejal, vandyke, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, set 1)", 0 )
+GAME( 1990, vandykejal2,vandyke, vandyke, vandyke, nmk16_state, empty_init, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, set 2)", 0 )
+GAME( 1990, vandykeb, vandyke, vandykeb, vandykeb, nmk16_state, init_vandykeb, ROT270, "bootleg", "Vandyke (bootleg with PIC16c57)", MACHINE_NO_SOUND )
-GAME( 1991, blkheart, 0, blkheart, blkheart, nmk16_state, empty_init, ROT0, "UPL", "Black Heart", 0 )
-GAME( 1991, blkheartj, blkheart, blkheart, blkheart, nmk16_state, empty_init, ROT0, "UPL", "Black Heart (Japan)", 0 )
+GAME( 1991, blkheart, 0, blkheart, blkheart, nmk16_state, empty_init, ROT0, "UPL", "Black Heart", 0 )
+GAME( 1991, blkheartj, blkheart, blkheart, blkheart, nmk16_state, empty_init, ROT0, "UPL", "Black Heart (Japan)", 0 )
-GAME( 1991, acrobatm, 0, acrobatm, acrobatm, nmk16_state, empty_init, ROT270, "UPL (Taito license)", "Acrobat Mission", 0 )
+GAME( 1991, acrobatm, 0, acrobatm, acrobatm, nmk16_state, empty_init, ROT270, "UPL (Taito license)", "Acrobat Mission", 0 )
-GAME( 1992, strahl, 0, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (World)", 0 )
-GAME( 1992, strahlj, strahl, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 1)", 0 )
-GAME( 1992, strahlja, strahl, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 2)", 0 )
+GAME( 1992, strahl, 0, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (World)", 0 )
+GAME( 1992, strahlj, strahl, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 1)", 0 )
+GAME( 1992, strahlja, strahl, strahl, strahl, nmk16_state, empty_init, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 2)", 0 )
-GAME( 1991, tdragon, 0, tdragon, tdragon, nmk16_state, empty_init, ROT270, "NMK (Tecmo license)", "Thunder Dragon (8th Jan. 1992, unprotected)", 0 )
-GAME( 1991, tdragon1, tdragon, tdragon_prot, tdragon_prot, tdragon_prot_state, empty_init, ROT270, "NMK (Tecmo license)", "Thunder Dragon (4th Jun. 1991, protected)", 0 )
+GAME( 1991, tdragon, 0, tdragon, tdragon, nmk16_state, empty_init, ROT270, "NMK (Tecmo license)", "Thunder Dragon (8th Jan. 1992, unprotected)", 0 )
+GAME( 1991, tdragon1, tdragon, tdragon_prot, tdragon_prot, tdragon_prot_state, empty_init, ROT270, "NMK (Tecmo license)", "Thunder Dragon (4th Jun. 1991, protected)", 0 )
-GAME( 1991, hachamf, 0, hachamf_prot, hachamf_prot, tdragon_prot_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991, protected, set 1)", 0 )
-GAME( 1991, hachamfa, hachamf, hachamf_prot, hachamf_prot, tdragon_prot_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991, protected, set 2)", 0 )
-GAME( 1991, hachamfb, hachamf, hachamf, hachamfb, nmk16_state, empty_init, ROT0, "bootleg", "Hacha Mecha Fighter (19th Sep. 1991, unprotected, bootleg Thunder Dragon conversion)", 0 ) // appears to be a Thunder Dragon conversion, could be bootleg?
-GAME( 1991, hachamfp, hachamf, hachamf, hachamfp, nmk16_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (Location Test Prototype, 19th Sep. 1991)", 0 ) // Prototype with hand-written labels showing dates of 9/9, 9/13, 9/24, 9/25. The ROM contains the same 19th Sep. 1991 build string as all the prior releases, so that string was likely never updated in later builds.
+GAME( 1991, hachamf, 0, hachamf_prot, hachamf_prot, tdragon_prot_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991, protected, set 1)", 0 )
+GAME( 1991, hachamfa, hachamf, hachamf_prot, hachamf_prot, tdragon_prot_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991, protected, set 2)", 0 )
+GAME( 1991, hachamfb, hachamf, hachamf, hachamfb, nmk16_state, empty_init, ROT0, "bootleg", "Hacha Mecha Fighter (19th Sep. 1991, unprotected, bootleg Thunder Dragon conversion)", 0 ) // appears to be a Thunder Dragon conversion, could be bootleg?
+GAME( 1991, hachamfp, hachamf, hachamf, hachamfp, nmk16_state, empty_init, ROT0, "NMK", "Hacha Mecha Fighter (Location Test Prototype, 19th Sep. 1991)", 0 ) // Prototype with hand-written labels showing dates of 9/9, 9/13, 9/24, 9/25. The ROM contains the same 19th Sep. 1991 build string as all the prior releases, so that string was likely never updated in later builds.
-GAME( 1992, macross, 0, macross, macross, nmk16_state, init_nmk, ROT270, "Banpresto", "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", 0 )
+GAME( 1992, macross, 0, macross_prot, macross, macross_prot_state, empty_init, ROT270, "Banpresto", "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", 0 )
-GAME( 1993, gunnail, 0, gunnail, gunnail, nmk16_state, init_nmk, ROT270, "NMK / Tecmo", "GunNail (28th May. 1992)", 0 ) // Tecmo is displayed only when set to Japan
-GAME( 1992, gunnailp, gunnail, gunnail, gunnail, nmk16_state, init_nmk, ROT270, "NMK", "GunNail (location test)", 0 ) // still has the 28th May. 1992 string, so unlikely that was the release date for either version.
+GAME( 1993, gunnail, 0, gunnail_prot, gunnail, macross_prot_state, empty_init, ROT270, "NMK / Tecmo", "GunNail (28th May. 1992)", 0 ) // Tecmo is displayed only when set to Japan
+GAME( 1992, gunnailp, gunnail, gunnail_prot, gunnail, macross_prot_state, empty_init, ROT270, "NMK", "GunNail (location test)", 0 ) // still has the 28th May. 1992 string, so unlikely that was the release date for either version.
// a 1992 version of Gunnail exists, see https://www.youtube.com/watch?v=tf15Wz0zUiA 3:10; is this bootleg version 'gunnailb'?
-GAME( 1993, macross2, 0, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", MACHINE_NO_COCKTAIL )
-GAME( 1993, macross2g, macross2, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II (Gamest review build)", MACHINE_NO_COCKTAIL ) // Service switch pauses game
-GAME( 1993, macross2k, macross2, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Macross II (Korea)", MACHINE_NO_COCKTAIL ) // Title screen only shows Macross II
+GAME( 1993, macross2, 0, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", 0 )
+GAME( 1993, macross2g, macross2, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II (Gamest review build)", 0 ) // Service switch pauses game
+GAME( 1993, macross2k, macross2, macross2, macross2, nmk16_state, init_banked_audiocpu, ROT0, "Banpresto", "Macross II (Korea)", 0 ) // Title screen only shows Macross II
-GAME( 1993, tdragon2, 0, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
-GAME( 1993, tdragon2a, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (1st Oct. 1993)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bigbang, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993, set 1)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bigbanga, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993, set 2)", MACHINE_NO_COCKTAIL )
-GAME( 1996, tdragon3h, tdragon2, tdragon3h, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "bootleg (Conny Co Ltd.)", "Thunder Dragon 3 (bootleg of Thunder Dragon 2)", MACHINE_NO_SOUND | MACHINE_NO_COCKTAIL ) // based on 1st Oct. 1993 set, needs emulation of the mechanism used to simulate the missing YM2203' IRQs
+GAME( 1993, tdragon2, 0, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (9th Nov. 1993)", 0 )
+GAME( 1993, tdragon2a, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (1st Oct. 1993)", 0 )
+GAME( 1993, bigbang, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993, set 1)", 0 )
+GAME( 1993, bigbanga, tdragon2, tdragon2, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993, set 2)", 0 )
+GAME( 1996, tdragon3h, tdragon2, tdragon3h, tdragon2, nmk16_state, init_banked_audiocpu, ROT270, "bootleg (Conny Co Ltd.)", "Thunder Dragon 3 (bootleg of Thunder Dragon 2)", MACHINE_NO_SOUND | 0 ) // based on 1st Oct. 1993 set, needs emulation of the mechanism used to simulate the missing YM2203' IRQs
-GAME( 1994, arcadian, 0, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Arcadia (NMK)", 0 ) // 23rd July 1993 in test mode, (c)1994 on title screen
-GAME( 1994, raphero, arcadian, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Rapid Hero (NMK)", 0 ) // ^^
-GAME( 1994, rapheroa, arcadian, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK (Media Trading license)", "Rapid Hero (Media Trading)", 0 ) // ^^ - note that all ROM sets have Media Trading(aka Media Shoji) in the tile graphics, but this is the only set that shows it on the titlescreen
+GAME( 1994, arcadian, 0, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Arcadia (NMK)", 0 ) // 23rd July 1993 in test mode, (c)1994 on title screen
+GAME( 1994, raphero, arcadian, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK", "Rapid Hero (NMK)", 0 ) // ^^
+GAME( 1994, rapheroa, arcadian, raphero, raphero, nmk16_state, init_banked_audiocpu, ROT270, "NMK (Media Trading license)", "Rapid Hero (Media Trading)", 0 ) // ^^ - note that all ROM sets have Media Trading(aka Media Shoji) in the tile graphics, but this is the only set that shows it on the titlescreen
// both sets of both these games show a date of 9th Mar 1992 in the test mode, they look like different revisions so I doubt this is accurate
-GAME( 1992, sabotenb, 0, saboten_prot, sabotenb, tdragon_prot_state, init_nmk, ROT0, "NMK / Tecmo", "Saboten Bombers (set 1)", MACHINE_NO_COCKTAIL )
-GAME( 1992, sabotenba, sabotenb, saboten_prot, sabotenb, tdragon_prot_state, init_nmk, ROT0, "NMK / Tecmo", "Saboten Bombers (set 2)", MACHINE_NO_COCKTAIL )
-GAME( 1992, cactus, sabotenb, bjtwin, sabotenb, nmk16_state, init_nmk, ROT0, "bootleg", "Cactus (bootleg of Saboten Bombers)", MACHINE_NO_COCKTAIL ) // PCB marked 'Cactus', no title screen
-
-GAME( 1993, bjtwin, 0, bjtwin, bjtwin, nmk16_state, init_bjtwin, ROT270, "NMK", "Bombjack Twin (set 1)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bjtwina, bjtwin, bjtwin, bjtwin, nmk16_state, init_bjtwin, ROT270, "NMK", "Bombjack Twin (set 2)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bjtwinp, bjtwin, bjtwin, bjtwin, nmk16_state, empty_init, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 1)", MACHINE_NO_COCKTAIL ) // Cheap looking PCB, but Genuine NMK PCB, GFX aren't encrypted (maybe Korean version not proto?)
-GAME( 1993, bjtwinpa, bjtwin, bjtwin, bjtwin, nmk16_state, init_bjtwin, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 2)", MACHINE_NO_COCKTAIL ) // same PCB as above, different program revision, GFX are encrypted
-
-GAME( 1995, nouryoku, 0, bjtwin, nouryoku, nmk16_state, init_nmk, ROT0, "Tecmo", "Nouryoku Koujou Iinkai", MACHINE_NO_COCKTAIL )
-GAME( 1995, nouryokup, nouryoku, bjtwin, nouryoku, nmk16_state, empty_init, ROT0, "Tecmo", "Nouryoku Koujou Iinkai (prototype)", MACHINE_NO_COCKTAIL ) // GFX aren't encrypted
+GAME( 1992, sabotenb, 0, bjtwin_prot, sabotenb, macross_prot_state, empty_init, ROT0, "NMK / Tecmo", "Saboten Bombers (set 1)", 0 )
+GAME( 1992, sabotenba, sabotenb, bjtwin_prot, sabotenb, macross_prot_state, empty_init, ROT0, "NMK / Tecmo", "Saboten Bombers (set 2)", 0 )
+GAME( 1992, cactus, sabotenb, cactus, sabotenb, nmk16_state, init_nmk, ROT0, "bootleg", "Cactus (bootleg of Saboten Bombers)", 0 ) // PCB marked 'Cactus', no title screen
+
+GAME( 1993, bjtwin, 0, bjtwin_prot, bjtwin, macross_prot_state, empty_init, ROT270, "NMK", "Bombjack Twin (set 1)", 0 )
+GAME( 1993, bjtwina, bjtwin, bjtwin_prot, bjtwin, macross_prot_state, empty_init, ROT270, "NMK", "Bombjack Twin (set 2)", 0 )
+GAME( 1993, bjtwinp, bjtwin, bjtwin, bjtwin, nmk16_state, empty_init, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 1)", 0 ) // Cheap looking PCB, but Genuine NMK PCB, GFX aren't encrypted (maybe Korean version not proto?)
+GAME( 1993, bjtwinpa, bjtwin, bjtwin_prot, bjtwin, macross_prot_state, empty_init, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 2)", 0 ) // same PCB as above, different program revision, GFX are encrypted
+
+GAME( 1995, nouryoku, 0, bjtwin_prot, nouryoku, macross_prot_state, empty_init, ROT0, "Tecmo", "Nouryoku Koujou Iinkai", 0 )
+GAME( 1995, nouryokup, nouryoku, bjtwin, nouryoku, nmk16_state, empty_init, ROT0, "Tecmo", "Nouryoku Koujou Iinkai (prototype)", 0 ) // GFX aren't encrypted
+
+// all supported sets give a 93.10.20 date
+GAME( 1993, powerins, 0, powerins, powerins, nmk16_state, empty_init, ROT0, "Atlus", "Power Instinct (USA)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, powerinsj, powerins, powerins, powerinj, nmk16_state, empty_init, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, powerinspu, powerins, powerins, powerinj, nmk16_state, empty_init, ROT0, "Atlus", "Power Instinct (USA, prototype)", MACHINE_SUPPORTS_SAVE ) // boots as 93.10.20 just like the other sets, but code is different
+GAME( 1993, powerinspj, powerins, powerins, powerinj, nmk16_state, empty_init, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan, prototype)", MACHINE_SUPPORTS_SAVE ) // boots as 93.10.20 just like the other sets, but code is different
+GAME( 1993, powerinsa, powerins, powerinsa, powerins, nmk16_state, init_powerinsa, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, powerinsb, powerins, powerinsb, powerins, nmk16_state, empty_init, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, powerinsc, powerins, powerinsc, powerins, nmk16_state, empty_init, ROT0, "bootleg (Electronic Devices)", "Power Instinct (USA, bootleg set 3)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different sprites' format not implemented
// Non NMK boards
@@ -8999,7 +10612,7 @@ GAME( 1995, nouryokup, nouryoku, bjtwin, nouryoku, nmk16_state, empty
GAME( 1991, manybloc, 0, manybloc, manybloc, nmk16_state, init_tharrier, ROT270, "Bee-Oh", "Many Block", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
// clone board, different sound / bg hardware, but similar memory maps, same tx layer, sprites etc.
-GAME( 1997, tomagic, 0, tomagic, tomagic, nmk16_tomagic_state, init_tomagic, ROT0, "Hobbitron T.K.Trading Co. Ltd.", "Tom Tom Magic", 0 )
+GAME( 1997, tomagic, 0, tomagic, tomagic, nmk16_tomagic_state, init_tomagic, ROT0, "Hobbitron T.K.Trading Co. Ltd.", "Tom Tom Magic", 0 )
// these use the Seibu sound system (sound / music stolen from Raiden) rather than the bootleggers copying the nmk004
GAME( 1990, mustangb, mustang, mustangb, mustang, nmk16_state, empty_init, ROT0, "bootleg", "US AAF Mustang (bootleg, set 1)", 0 )
@@ -9007,30 +10620,31 @@ GAME( 1990, mustangb2, mustang, mustangb, mustang, nmk16_state, empty
GAME( 1991, acrobatmbl, acrobatm, acrobatmbl, acrobatmbl, nmk16_state, init_acrobatmbl, ROT270, "bootleg", "Acrobat Mission (bootleg with Raiden sounds)", 0 )
GAME( 1991, tdragonb, tdragon, tdragonb, tdragonb, nmk16_state, init_tdragonb, ROT270, "bootleg", "Thunder Dragon (bootleg with Raiden sounds, encrypted)", 0 )
GAME( 1991, tdragonb3, tdragon, tdragonb3, tdragonb, nmk16_state, empty_init, ROT270, "bootleg", "Thunder Dragon (bootleg with Raiden sounds, unencrypted)", 0 )
-GAME( 1992, strahljbl, strahl, strahljbl, strahljbl, nmk16_state, empty_init, ROT0, "bootleg", "Koutetsu Yousai Strahl (Japan, bootleg)", 0 )
+GAME( 1992, strahljbl, strahl, strahljbl, strahl, nmk16_state, empty_init, ROT0, "bootleg", "Koutetsu Yousai Strahl (Japan, bootleg)", 0 )
// these are bootlegs with tharrier like sound hw
-GAME( 1990, mustangb3, mustang, mustangb3, mustang, nmk16_state, empty_init, ROT0, "bootleg (Lettering)", "US AAF Mustang (Lettering bootleg)", 0 )
-GAME( 1989, tharrierb, tharrier, tharrier, tharrier, nmk16_state, init_tharrier, ROT270, "bootleg (Lettering)", "Task Force Harrier (Lettering bootleg)", 0 )
+GAME( 1990, mustangb3, mustang, mustangb3, mustang, nmk16_state, empty_init, ROT0, "bootleg (Lettering)", "US AAF Mustang (Lettering bootleg)", 0 )
+GAME( 1989, tharrierb, tharrier, tharrierb, tharrierb, tharrierb_state, init_tharrier, ROT270, "bootleg (Lettering)", "Task Force Harrier (Lettering bootleg)", 0 )
// bootleg with no audio CPU and only 1 Oki
-GAME( 1991, tdragonb2, tdragon, tdragonb2, tdragon, nmk16_state, empty_init, ROT270, "bootleg", "Thunder Dragon (bootleg with reduced sound system)", MACHINE_NOT_WORKING ) // GFX and input problems. IRQs related?
+GAME( 1991, tdragonb2, tdragon, tdragonb2, tdragonb2, nmk16_state, init_tdragonb2, ROT270, "bootleg", "Thunder Dragon (bootleg with reduced sound system)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // runs too quickly, Oki sounds terrible (IRQ problems? works better commenting out IRQ1_SCANLINE_2)
// bootleg with cloned airbustr sound hardware
-GAME( 1992, gunnailb, gunnail, gunnailb, gunnail, nmk16_state, init_gunnailb, ROT270, "bootleg", "GunNail (bootleg)", MACHINE_IMPERFECT_SOUND ) // crappy sound, unknown how much of it is incomplete emulation and how much bootleg quality
+GAME( 1992, gunnailb, gunnail, gunnailb, gunnail, nmk16_state, init_gunnailb, ROT270, "bootleg", "GunNail (bootleg)", MACHINE_IMPERFECT_SOUND ) // crappy sound, unknown how much of it is incomplete emulation and how much bootleg quality
// these are from Comad, based on the Thunder Dragon code?
-GAME( 1992, ssmissin, 0, ssmissin, ssmissin, nmk16_state, init_ssmissin, ROT270, "Comad", "S.S. Mission", MACHINE_NO_COCKTAIL )
+GAME( 1992, ssmissin, 0, ssmissin, ssmissin, nmk16_state, init_ssmissin, ROT270, "Comad", "S.S. Mission", 0 )
-GAME( 1996, airattck, 0, ssmissin, airattck, nmk16_state, init_ssmissin, ROT270, "Comad", "Air Attack (set 1)", MACHINE_NO_COCKTAIL )
-GAME( 1996, airattcka, airattck, ssmissin, airattck, nmk16_state, init_ssmissin, ROT270, "Comad", "Air Attack (set 2)", MACHINE_NO_COCKTAIL )
+GAME( 1996, airattck, 0, ssmissin, airattck, nmk16_state, init_ssmissin, ROT270, "Comad", "Air Attack (set 1)", 0 )
+GAME( 1996, airattcka, airattck, ssmissin, airattck, nmk16_state, init_ssmissin, ROT270, "Comad", "Air Attack (set 2)", 0 )
// afega & clones
GAME( 1995, twinactn, 0, twinactn, twinactn, nmk16_state, init_twinactn, ROT0, "Afega", "Twin Action", 0 ) // hacked from USSAF Mustang
GAME( 1995, dolmen, 0, twinactn, dolmen, nmk16_state, init_twinactn, ROT0, "Afega", "Dolmen", 0 )
+GAME( 1995, dolmenk, dolmen, twinactn, dolmenk, nmk16_state, init_twinactn, ROT0, "Afega", "Goindol (Afega)", 0 )
-GAME( 1998, stagger1, 0, stagger1, stagger1, afega_state, empty_init, ROT270, "Afega", "Stagger I (Japan)", 0 )
+GAME( 1998, stagger1, 0, stagger1, stagger1, afega_state, empty_init, ROT270, "Afega", "Stagger I (Japan)", 0 ) // flip-screen doesn't work on sprites for all sets
GAME( 1997, redhawk, stagger1, stagger1, stagger1, afega_state, init_redhawk, ROT270, "Afega (New Vision Ent. license)", "Red Hawk (USA, Canada & South America)", 0 )
GAME( 1997, redhawki, stagger1, redhawki, stagger1, afega_state, init_redhawki, ROT0, "Afega (Hae Dong Corp license)", "Red Hawk (horizontal, Italy)", 0 ) // bootleg? strange scroll regs
GAME( 1997, redhawks, stagger1, redhawki, stagger1, afega_state, empty_init, ROT0, "Afega (Hae Dong Corp license)", "Red Hawk (horizontal, Spain, set 1)", 0 )
@@ -9040,7 +10654,7 @@ GAME( 1997, redhawke, stagger1, stagger1, stagger1, afega_state, empty
GAME( 1997, redhawkk, stagger1, stagger1, stagger1, afega_state, empty_init, ROT270, "Afega", "Red Hawk (Korea)", 0 )
GAME( 1997, redhawkb, stagger1, redhawkb, redhawkb, afega_state, empty_init, ROT0, "bootleg (Vince)", "Red Hawk (horizontal, bootleg)", 0 )
-GAME( 1998, grdnstrm, 0, grdnstrm, grdnstrm, afega_state, empty_init, ORIENTATION_FLIP_Y, "Afega (Apples Industries license)", "Guardian Storm (horizontal, not encrypted)", 0 )
+GAME( 1998, grdnstrm, 0, grdnstrm, grdnstrm, afega_state, empty_init, ORIENTATION_FLIP_Y, "Afega (Apples Industries license)", "Guardian Storm (horizontal, not encrypted)", 0 ) // flip-screen doesn't work on sprites for all sets
GAME( 1998, grdnstrmv, grdnstrm, grdnstrmk, grdnstrk, afega_state, init_grdnstrm, ROT270, "Afega (Apples Industries license)", "Guardian Storm (vertical)", 0 )
GAME( 1998, grdnstrmj, grdnstrm, grdnstrmk, grdnstrk, afega_state, init_grdnstrmg, ROT270, "Afega", "Sen Jing - Guardian Storm (Japan)", 0 )
GAME( 1998, grdnstrmk, grdnstrm, grdnstrmk, grdnstrk, afega_state, init_grdnstrm, ROT270, "Afega", "Jeon Sin - Guardian Storm (Korea)", 0 )