diff options
Diffstat (limited to 'src/mame/nmk/nmk16.cpp')
-rw-r--r-- | src/mame/nmk/nmk16.cpp | 2734 |
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, ¯oss_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 ) |