From 2922dc82a55f181869531549cfbfb10484a270eb Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 27 Sep 2022 16:52:45 +0200 Subject: New clones marked as NOT_WORKING -------------------------------- Magic Bomb (Ver. NB6.1, 26/04/04) [Ioannis Bampoulas] X-Men (4 Players ver AEA, bootleg) [aussiekanga] --- src/mame/konami/xmen.cpp | 775 +++++++++++++++++++++++++++++++++------------ src/mame/konami/xmen.h | 89 ------ src/mame/konami/xmen_v.cpp | 192 ----------- src/mame/mame.lst | 2 + src/mame/misc/astrcorp.cpp | 97 +++++- 5 files changed, 651 insertions(+), 504 deletions(-) delete mode 100644 src/mame/konami/xmen.h delete mode 100644 src/mame/konami/xmen_v.cpp diff --git a/src/mame/konami/xmen.cpp b/src/mame/konami/xmen.cpp index 8766e88d712..9ee01cd69b1 100644 --- a/src/mame/konami/xmen.cpp +++ b/src/mame/konami/xmen.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Nicola Salmoria +// copyright-holders: Nicola Salmoria + /*************************************************************************** X-Men @@ -16,26 +17,329 @@ but in-game is not. Buffer the left screen and then in-game is correct, but the intro is not. The board only has one of each gfx chip, the only additional chip not found -on the 2/4p board is 053253. This chip is also on Run n Gun which is +on the 2/4p board is 053253. This chip is also on Run n Gun which is likewise a 2 screen game. ***************************************************************************/ #include "emu.h" -#include "xmen.h" + +#include "k052109.h" +#include "k053246_k053247_k055673.h" +#include "k053251.h" +#include "konami_helper.h" #include "konamipt.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/eepromser.h" +#include "machine/gen_latch.h" +#include "machine/k054321.h" +#include "machine/timer.h" #include "machine/watchdog.h" +#include "sound/k054539.h" +#include "sound/okim6295.h" #include "sound/ymopm.h" + #include "emupal.h" +#include "screen.h" #include "speaker.h" #include "layout/generic.h" +// configurable logging +#define LOG_EEPROMW (1U << 1) +#define LOG_SOUNDIRQ (1U << 2) +#define LOG_OKI (1U << 3) + +//#define VERBOSE (LOG_GENERAL | LOG_EEPROMW | LOG_SOUNDIRQ | LOG_OKI) + +#include "logmacro.h" + +#define LOGEEPROMW(...) LOGMASKED(LOG_EEPROMW, __VA_ARGS__) +#define LOGSOUNDIRQ(...) LOGMASKED(LOG_SOUNDIRQ, __VA_ARGS__) +#define LOGOKI(...) LOGMASKED(LOG_OKI, __VA_ARGS__) + + +namespace { + +class xmen_state : public driver_device +{ +public: + xmen_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_k052109(*this, "k052109"), + m_k053246(*this, "k053246"), + m_k053251(*this, "k053251"), + m_screen(*this, "screen"), + m_z80bank(*this, "z80bank"), + m_okibank(*this, "okibank"), + m_eeprom_out(*this, "EEPROMOUT") + { } + + void xmen(machine_config &config); + void xmenabl(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + + // video-related + uint8_t m_layer_colorbase[3]{}; + uint8_t m_sprite_colorbase = 0; + int m_layerpri[3]{}; + bool m_tilemap_select; + + // devices + required_device m_maincpu; + optional_device m_audiocpu; + required_device m_k052109; + required_device m_k053246; + required_device m_k053251; + required_device m_screen; + + void eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void _18fa00_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + + void base(machine_config &config); + void sound_hardware(machine_config &config); + +private: + optional_memory_bank m_z80bank; + optional_memory_bank m_okibank; + + required_ioport m_eeprom_out; + + // misc + uint8_t m_vblank_irq_mask = 0; + + void sound_bankswitch_w(uint8_t data); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(scanline); + K052109_CB_MEMBER(tile_callback); + K053246_CB_MEMBER(sprite_callback); + + void base_main_map(address_map &map); + void bootleg_main_map(address_map &map); + void main_map(address_map &map); + void oki_map(address_map &map); + void sound_map(address_map &map); + + void bootleg_sound_hardware(machine_config &config); +}; + +class xmen6p_state : public xmen_state +{ +public: + xmen6p_state(const machine_config &mconfig, device_type type, const char *tag) : + xmen_state(mconfig, type, tag), + m_spriteram(*this, "spriteram%u", 0), + m_tilemap(*this, "tilemap%u", 0) + { } + + void xmen6p(machine_config &config); + + DECLARE_READ_LINE_MEMBER(frame_r); + +protected: + virtual void video_start() override; + +private: + std::unique_ptr m_screen_bitmap[2]; // 0 left screen, 1 right screen + required_shared_ptr_array m_spriteram; + required_shared_ptr_array m_tilemap; + uint16_t *m_k053247_ram; + + template uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + + void main_map(address_map &map); +}; + + +// video + +/*************************************************************************** + + Callbacks for the K052109 + +***************************************************************************/ + +K052109_CB_MEMBER(xmen_state::tile_callback) +{ + // (color & 0x02) is flip y handled internally by the 052109 + if (layer == 0) + *color = m_layer_colorbase[layer] + ((*color & 0xf0) >> 4); + else + *color = m_layer_colorbase[layer] + ((*color & 0x7c) >> 2); +} + +/*************************************************************************** + + Callbacks for the K053247 + +***************************************************************************/ + +K053246_CB_MEMBER(xmen_state::sprite_callback) +{ + int const pri = (*color & 0x00e0) >> 4; // ??????? + + if (pri <= m_layerpri[2]) + *priority_mask = 0; + else if (pri > m_layerpri[2] && pri <= m_layerpri[1]) + *priority_mask = 0xf0; + else if (pri > m_layerpri[1] && pri <= m_layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = m_sprite_colorbase + (*color & 0x001f); +} + + + +/*************************************************************************** + + Start the video hardware emulation. + +***************************************************************************/ + +void xmen6p_state::video_start() +{ + m_k053246->k053247_get_ram(&m_k053247_ram); + + m_screen_bitmap[0] = std::make_unique(64 * 8, 32 * 8); + m_screen_bitmap[1] = std::make_unique(64 * 8, 32 * 8); + + save_item(NAME(*m_screen_bitmap[0])); + save_item(NAME(*m_screen_bitmap[1])); +} + + +/*************************************************************************** + + Display refresh + +***************************************************************************/ + +uint32_t xmen_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int const bg_colorbase = m_k053251->get_palette_index(k053251_device::CI4); + m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1); + m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI3); + m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI0); + m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI2); + + m_k052109->tilemap_update(); + + int layer[3]; + + layer[0] = 0; + m_layerpri[0] = m_k053251->get_priority(k053251_device::CI3); + layer[1] = 1; + m_layerpri[1] = m_k053251->get_priority(k053251_device::CI0); + layer[2] = 2; + m_layerpri[2] = m_k053251->get_priority(k053251_device::CI2); + + konami_sortlayers3(layer, m_layerpri); + + screen.priority().fill(0, cliprect); + // note the '+1' in the background color!!! + bitmap.fill(16 * bg_colorbase + 1, cliprect); + m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[0], 0, 1); + m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 2); + m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4); + + /* this isn't supported anymore and it is unsure if still needed; keeping here for reference + pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ + m_k053246->k053247_sprites_draw(bitmap, cliprect); + return 0; +} + + +template +uint32_t xmen6p_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + for (int y = 0; y < 32 * 8; y++) + { + uint16_t *const line_dest = &bitmap.pix(y); + uint16_t const *const line_src = &m_screen_bitmap[Which]->pix(y); + + for (int x = 12 * 8; x < 52 * 8; x++) + line_dest[x] = line_src[x]; + } + + return 0; +} + +// my lefts and rights are mixed up in several places.. +WRITE_LINE_MEMBER(xmen6p_state::screen_vblank) +{ + // rising edge + if (state) + { + rectangle cliprect; + + // const rectangle *visarea = m_screen->visible_area(); + // cliprect = *visarea; + cliprect.set(0, 64 * 8 - 1, 2 * 8, 30 * 8 - 1); + + int index = m_screen->frame_number() & 1; + bitmap_ind16 *renderbitmap = m_screen_bitmap[index].get(); + + // copy the desired spritelist to the chip + memcpy(m_k053247_ram, m_spriteram[index], 0x1000); + + /* we write the entire content of the tileram to the chip to ensure + everything gets marked as dirty and the desired tilemap is rendered + this is not very efficient! + */ + index += m_tilemap_select ? 2 : 0; + for (int offset = 0; offset < (0xc000 / 2); offset++) + { + if (index == 0 || (offset != 0x1c80 && offset != 0x1e80)) + m_k052109->write(offset, m_tilemap[index][offset] & 0x00ff); + } + + int const bg_colorbase = m_k053251->get_palette_index(k053251_device::CI4); + m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1); + m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI3); + m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI0); + m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI2); + + m_k052109->tilemap_update(); + + int layer[3]; + + m_layerpri[0] = m_k053251->get_priority(k053251_device::CI3); + layer[0] = 0; + m_layerpri[1] = m_k053251->get_priority(k053251_device::CI0); + layer[1] = 1; + m_layerpri[2] = m_k053251->get_priority(k053251_device::CI2); + layer[2] = 2; + + konami_sortlayers3(layer, m_layerpri); + + m_screen->priority().fill(0, cliprect); + // note the '+1' in the background color!!! + renderbitmap->fill(16 * bg_colorbase + 1, cliprect); + m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[0], 0, 1); + m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[1], 0, 2); + m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[2], 0, 4); + + /* this isn't supported anymore and it is unsure if still needed; keeping here for reference + pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ + m_k053246->k053247_sprites_draw(*renderbitmap, cliprect); + } +} + + +// machine + /*************************************************************************** EEPROM @@ -44,40 +348,42 @@ likewise a 2 screen game. void xmen_state::eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - logerror("%06x: write %04x to 108000\n", m_maincpu->pc(),data); + LOGEEPROMW("%06x: write %04x to 108000\n", m_maincpu->pc(), data); if (ACCESSING_BITS_0_7) { - /* bit 0 = coin counter */ + // bit 0 = coin counter machine().bookkeeping().coin_counter_w(0, data & 0x01); - /* bit 2 is data */ - /* bit 3 is clock (active high) */ - /* bit 4 is cs (active low) */ - ioport("EEPROMOUT")->write(data, 0xff); + // bit 2 is data + // bit 3 is clock (active high) + // bit 4 is cs (active low) + m_eeprom_out->write(data, 0xff); - /* bit 5 is enabled in IRQ3, disabled in IRQ5 (sprite DMA start?) */ - /* bit 7 used in xmen6p to select other tilemap bank (see halfway level 5) */ - m_xmen6p_tilemap_select = BIT(data, 7); + // bit 5 is enabled in IRQ3, disabled in IRQ5 (sprite DMA start?) + // bit 7 used in xmen6p to select other tilemap bank (see halfway level 5) + m_tilemap_select = BIT(data, 7); } if (ACCESSING_BITS_8_15) { - /* bit 8 = enable sprite ROM reading */ - m_k053246->k053246_set_objcha_line( (data & 0x0100) ? ASSERT_LINE : CLEAR_LINE); - /* bit 9 = enable char ROM reading through the video RAM */ - /* bit 10 = sound irq, but with some kind of hold */ + // bit 8 = enable sprite ROM reading + m_k053246->k053246_set_objcha_line((data & 0x0100) ? ASSERT_LINE : CLEAR_LINE); + // bit 9 = enable char ROM reading through the video RAM + // bit 10 = sound irq, but with some kind of hold m_k052109->set_rmrd_line((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); - if(data & 0x400) { - logerror("tick!\n"); - m_audiocpu->set_input_line(0, HOLD_LINE); + if (data & 0x400) + { + LOGSOUNDIRQ("tick!\n"); + if (m_audiocpu) + m_audiocpu->set_input_line(0, HOLD_LINE); } } } -void xmen_state::xmen_18fa00_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void xmen_state::_18fa00_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if(ACCESSING_BITS_0_7) + if (ACCESSING_BITS_0_7) { - /* bit 2 is interrupt enable */ + // bit 2 is interrupt enable m_vblank_irq_mask = data & 0x04; } } @@ -88,60 +394,79 @@ void xmen_state::sound_bankswitch_w(uint8_t data) } -void xmen_state::main_map(address_map &map) +void xmen_state::base_main_map(address_map &map) { - map(0x000000, 0x03ffff).rom(); - map(0x080000, 0x0fffff).rom(); + map(0x000000, 0x0fffff).rom(); map(0x100000, 0x100fff).rw(m_k053246, FUNC(k053247_device::k053247_word_r), FUNC(k053247_device::k053247_word_w)); map(0x101000, 0x101fff).ram(); map(0x104000, 0x104fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x108000, 0x108001).w(FUNC(xmen_state::eeprom_w)); map(0x108020, 0x108027).w(m_k053246, FUNC(k053247_device::k053246_w)); - map(0x108040, 0x10805f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0x00ff); map(0x108060, 0x10807f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff); map(0x10a000, 0x10a001).portr("P2_P4").w("watchdog", FUNC(watchdog_timer_device::reset16_w)); map(0x10a002, 0x10a003).portr("P1_P3"); map(0x10a004, 0x10a005).portr("EEPROM"); map(0x10a00c, 0x10a00d).r(m_k053246, FUNC(k053247_device::k053246_r)); - map(0x110000, 0x113fff).ram(); /* main RAM */ + map(0x110000, 0x113fff).ram(); // main RAM map(0x18c000, 0x197fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write)).umask16(0x00ff); - map(0x18fa00, 0x18fa01).w(FUNC(xmen_state::xmen_18fa00_w)); + map(0x18fa00, 0x18fa01).w(FUNC(xmen_state::_18fa00_w)); +} + +void xmen_state::main_map(address_map &map) +{ + base_main_map(map); + + map(0x108040, 0x10805f).m("k054321", FUNC(k054321_device::main_map)).umask16(0x00ff); +} + +void xmen_state::bootleg_main_map(address_map &map) +{ + base_main_map(map); + + // map(0x103ffe, 0x103fff) // sound related, too? + map(0x10804d, 0x10804d).lw8(NAME([this] (uint8_t data) { m_okibank->set_entry(data & 0x0f); LOGOKI("oki bank :%02x\n", data); })); // TODO: verify once oki ROM 1 is redumped / confirmed + map(0x10804f, 0x10804f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); } void xmen_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("z80bank"); + map(0x8000, 0xbfff).bankr(m_z80bank); map(0xc000, 0xdfff).ram(); - map(0xe000, 0xe22f).rw(m_k054539, FUNC(k054539_device::read), FUNC(k054539_device::write)); + map(0xe000, 0xe22f).rw("k054539", FUNC(k054539_device::read), FUNC(k054539_device::write)); map(0xe800, 0xe801).mirror(0x0400).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); - map(0xf000, 0xf003).m(m_k054321, FUNC(k054321_device::sound_map)); + map(0xf000, 0xf003).m("k054321", FUNC(k054321_device::sound_map)); map(0xf800, 0xf800).w(FUNC(xmen_state::sound_bankswitch_w)); } +void xmen_state::oki_map(address_map &map) +{ + map(0x00000, 0x2ffff).rom(); + map(0x30000, 0x3ffff).bankr(m_okibank); +} -void xmen_state::_6p_main_map(address_map &map) +void xmen6p_state::main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x080000, 0x0fffff).rom(); - map(0x100000, 0x100fff).ram().share("spriteram0"); // left screen + map(0x100000, 0x100fff).ram().share(m_spriteram[0]); // left screen map(0x101000, 0x101fff).ram(); - map(0x102000, 0x102fff).ram().share("spriteram1"); // right screen - map(0x103000, 0x103fff).ram(); /* 6p - a buffer? */ + map(0x102000, 0x102fff).ram().share(m_spriteram[1]); // right screen + map(0x103000, 0x103fff).ram(); // 6p - a buffer? map(0x104000, 0x104fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); - map(0x108000, 0x108001).w(FUNC(xmen_state::eeprom_w)); - map(0x108020, 0x108027).w(m_k053246, FUNC(k053247_device::k053246_w)); /* sprites */ - map(0x108040, 0x10805f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0x00ff); + map(0x108000, 0x108001).w(FUNC(xmen6p_state::eeprom_w)); + map(0x108020, 0x108027).w(m_k053246, FUNC(k053247_device::k053246_w)); // sprites + map(0x108040, 0x10805f).m("k054321", FUNC(k054321_device::main_map)).umask16(0x00ff); map(0x108060, 0x10807f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff); map(0x10a000, 0x10a001).portr("P2_P4").w("watchdog", FUNC(watchdog_timer_device::reset16_w)); map(0x10a002, 0x10a003).portr("P1_P3"); map(0x10a004, 0x10a005).portr("EEPROM"); map(0x10a006, 0x10a007).portr("P5_P6"); - map(0x10a00c, 0x10a00d).r(m_k053246, FUNC(k053247_device::k053246_r)); /* sprites */ - map(0x110000, 0x113fff).ram(); /* main RAM */ -/* map(0x18c000, 0x197fff).w("k052109", FUNC(k052109_device:write)).umask16(0x00ff).share("tilemapleft"); */ - map(0x18c000, 0x197fff).ram().share("tilemap0"); // left screen - map(0x18fa00, 0x18fa01).w(FUNC(xmen_state::xmen_18fa00_w)); + map(0x10a00c, 0x10a00d).r(m_k053246, FUNC(k053247_device::k053246_r)); // sprites + map(0x110000, 0x113fff).ram(); // main RAM +// map(0x18c000, 0x197fff).w("k052109", FUNC(k052109_device:write)).umask16(0x00ff).share("tilemapleft"); + map(0x18c000, 0x197fff).ram().share(m_tilemap[0]); // left screen + map(0x18fa00, 0x18fa01).w(FUNC(xmen6p_state::_18fa00_w)); /* map(0x1ac000, 0x1af7ff).readonly(); map(0x1ac000, 0x1af7ff).writeonly(); @@ -152,9 +477,9 @@ void xmen_state::_6p_main_map(address_map &map) map(0x1b4000, 0x1b77ff).readonly(); map(0x1b4000, 0x1b77ff).writeonly(); */ - map(0x1ac000, 0x1b7fff).ram().share("tilemap1"); // right screen + map(0x1ac000, 0x1b7fff).ram().share(m_tilemap[1]); // right screen - /* what are the regions below buffers? (used by hw or software?) */ + // what are the regions below buffers? (used by hw or software?) /* map(0x1cc000, 0x1cf7ff).readonly(); map(0x1cc000, 0x1cf7ff).writeonly(); @@ -162,9 +487,9 @@ void xmen_state::_6p_main_map(address_map &map) map(0x1d0000, 0x1d37ff).readonly(); map(0x1d0000, 0x1d37ff).writeonly(); */ - map(0x1cc000, 0x1d7fff).ram().share("tilemap2"); // left screen + map(0x1cc000, 0x1d7fff).ram().share(m_tilemap[2]); // left screen - /* whats the stuff below, buffers? */ + // whats the stuff below, buffers? /* map(0x1ec000, 0x1ef7ff).readonly(); map(0x1ec000, 0x1ef7ff).writeonly(); @@ -173,7 +498,7 @@ void xmen_state::_6p_main_map(address_map &map) map(0x1f4000, 0x1f77ff).readonly(); map(0x1f4000, 0x1f77ff).writeonly(); */ - map(0x1ec000, 0x1f7fff).ram().share("tilemap3"); // right screen + map(0x1ec000, 0x1f7fff).ram().share(m_tilemap[3]); // right screen } @@ -187,16 +512,16 @@ static INPUT_PORTS_START( xmen ) KONAMI16_MSB_UDLR(4, IPT_BUTTON3, IPT_COIN4 ) PORT_START("EEPROM") - PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_START4 ) - PORT_BIT( 0x3000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x3000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_SERVICE_NO_TOGGLE( 0x4000, IP_ACTIVE_LOW ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_START( "EEPROMOUT" ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) @@ -216,16 +541,16 @@ static INPUT_PORTS_START( xmen2p ) PORT_START("EEPROM") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE2 ) - PORT_BIT( 0x003c, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x003c, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x3000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x3000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_SERVICE_NO_TOGGLE( 0x4000, IP_ACTIVE_LOW ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_START( "EEPROMOUT" ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) @@ -233,7 +558,7 @@ static INPUT_PORTS_START( xmen2p ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) INPUT_PORTS_END -READ_LINE_MEMBER(xmen_state::xmen_frame_r) +READ_LINE_MEMBER(xmen6p_state::frame_r) { return m_screen->frame_number() & 1; } @@ -252,17 +577,17 @@ static INPUT_PORTS_START( xmen6p ) KONAMI16_MSB_UDLR(6, IPT_BUTTON3, IPT_COIN6 ) PORT_START("EEPROM") - PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ + PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_START4 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START5 ) /* not verified */ - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START6 ) /* not verified */ + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START5 ) // not verified + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START6 ) // not verified PORT_SERVICE_NO_TOGGLE( 0x4000, IP_ACTIVE_LOW ) - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xmen_state, xmen_frame_r) // screen indicator? + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xmen6p_state, frame_r) // screen indicator? PORT_START( "EEPROMOUT" ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) @@ -273,14 +598,23 @@ INPUT_PORTS_END void xmen_state::machine_start() { - m_z80bank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); - m_z80bank->set_entry(0); + if (m_z80bank) + { + m_z80bank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); + m_z80bank->set_entry(0); + } + + if (m_okibank) + { + m_okibank->configure_entries(0, 16, memregion("oki")->base(), 0x10000); + m_okibank->set_entry(0); + } save_item(NAME(m_sprite_colorbase)); save_item(NAME(m_layer_colorbase)); save_item(NAME(m_layerpri)); save_item(NAME(m_vblank_irq_mask)); - save_item(NAME(m_xmen6p_tilemap_select)); + save_item(NAME(m_tilemap_select)); } void xmen_state::machine_reset() @@ -295,39 +629,64 @@ void xmen_state::machine_reset() m_vblank_irq_mask = 0; } -TIMER_DEVICE_CALLBACK_MEMBER(xmen_state::xmen_scanline) +TIMER_DEVICE_CALLBACK_MEMBER(xmen_state::scanline) { - int scanline = param; + int const scanline = param; - if(scanline == 240 && m_vblank_irq_mask) // vblank-out irq + if (scanline == 240 && m_vblank_irq_mask) // vblank-out irq m_maincpu->set_input_line(3, HOLD_LINE); - if(scanline == 0) // sprite DMA irq? + if (scanline == 0) // sprite DMA irq? m_maincpu->set_input_line(5, HOLD_LINE); } -void xmen_state::xmen(machine_config &config) +void xmen_state::sound_hardware(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, XTAL(16'000'000)); /* verified on pcb */ - m_maincpu->set_addrmap(AS_PROGRAM, &xmen_state::main_map); + Z80(config, m_audiocpu, XTAL(16'000'000) / 2); // verified on PCB + m_audiocpu->set_addrmap(AS_PROGRAM, &xmen_state::sound_map); - TIMER(config, "scantimer").configure_scanline(FUNC(xmen_state::xmen_scanline), "screen", 0, 1); + // sound hardware + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); - Z80(config, m_audiocpu, XTAL(16'000'000)/2); /* verified on pcb */ - m_audiocpu->set_addrmap(AS_PROGRAM, &xmen_state::sound_map); + K054321(config, "k054321", "lspeaker", "rspeaker"); + + YM2151(config, "ymsnd", XTAL(16'000'000) / 4).add_route(0, "lspeaker", 0.20).add_route(1, "rspeaker", 0.20); // verified on PCB + + k054539_device &k054539(K054539(config, "k054539", XTAL(18'432'000))); + k054539.add_route(0, "rspeaker", 1.00); + k054539.add_route(1, "lspeaker", 1.00); +} + +void xmen_state::bootleg_sound_hardware(machine_config &config) +{ + // sound hardware + SPEAKER(config, "mono").front_center(); + + okim6295_device &oki(OKIM6295(config, "oki", 1'000'000, okim6295_device::PIN7_HIGH)); // clock and pin7 not verified + oki.set_addrmap(0, &xmen_state::oki_map); + oki.add_route(ALL_OUTPUTS, "mono", 1.0); +} + +void xmen_state::base(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, XTAL(16'000'000)); // verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &xmen_state::main_map); + + TIMER(config, "scantimer").configure_scanline(FUNC(xmen_state::scanline), "screen", 0, 1); EEPROM_ER5911_8BIT(config, "eeprom"); WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(59.17); /* verified on pcb */ + m_screen->set_refresh_hz(59.17); // verified on PCB m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(64*8, 32*8); - m_screen->set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1 ); /* correct, same issue of tmnt2 */ - m_screen->set_screen_update(FUNC(xmen_state::screen_update_xmen)); + m_screen->set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1 ); // correct, same issue of tmnt2 + m_screen->set_screen_update(FUNC(xmen_state::screen_update)); m_screen->set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows(); @@ -343,45 +702,40 @@ void xmen_state::xmen(machine_config &config) m_k053246->set_palette("palette"); K053251(config, m_k053251, 0); +} - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - - K054321(config, m_k054321, "lspeaker", "rspeaker"); - - YM2151(config, "ymsnd", XTAL(16'000'000)/4).add_route(0, "lspeaker", 0.20).add_route(1, "rspeaker", 0.20); /* verified on pcb */ +void xmen_state::xmen(machine_config &config) +{ + base(config); - K054539(config, m_k054539, XTAL(18'432'000)); - m_k054539->add_route(0, "rspeaker", 1.00); - m_k054539->add_route(1, "lspeaker", 1.00); + sound_hardware(config); } -void xmen_state::xmen6p(machine_config &config) +void xmen_state::xmenabl(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, XTAL(16'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &xmen_state::_6p_main_map); + base(config); - TIMER(config, "scantimer").configure_scanline(FUNC(xmen_state::xmen_scanline), "screen", 0, 1); + m_maincpu->set_addrmap(AS_PROGRAM, &xmen_state::bootleg_main_map); - Z80(config, m_audiocpu, XTAL(16'000'000)/2); - m_audiocpu->set_addrmap(AS_PROGRAM, &xmen_state::sound_map); + bootleg_sound_hardware(config); +} - EEPROM_ER5911_8BIT(config, "eeprom"); +void xmen6p_state::xmen6p(machine_config &config) +{ + xmen(config); - WATCHDOG_TIMER(config, "watchdog"); + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &xmen6p_state::main_map); - /* video hardware */ - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows(); + // video hardware config.set_default_layout(layout_dualhsxs); - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + SCREEN(config.replace(), m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(64*8, 32*8); m_screen->set_visarea(12*8, 48*8-1, 2*8, 30*8-1); - m_screen->set_screen_update(FUNC(xmen_state::screen_update_xmen6p_left)); + m_screen->set_screen_update(FUNC(xmen6p_state::screen_update<0>)); m_screen->set_palette("palette"); screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER)); @@ -389,36 +743,11 @@ void xmen_state::xmen6p(machine_config &config) screen2.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen2.set_size(64*8, 32*8); screen2.set_visarea(16*8, 52*8-1, 2*8, 30*8-1); - screen2.set_screen_update(FUNC(xmen_state::screen_update_xmen6p_right)); - screen2.screen_vblank().set(FUNC(xmen_state::screen_vblank_xmen6p)); + screen2.set_screen_update(FUNC(xmen6p_state::screen_update<1>)); + screen2.screen_vblank().set(FUNC(xmen6p_state::screen_vblank)); screen2.set_palette("palette"); - MCFG_VIDEO_START_OVERRIDE(xmen_state,xmen6p) - - K052109(config, m_k052109, 0); - m_k052109->set_palette("palette"); - m_k052109->set_screen(nullptr); - m_k052109->set_tile_callback(FUNC(xmen_state::tile_callback)); - - K053246(config, m_k053246, 0); - m_k053246->set_sprite_callback(FUNC(xmen_state::sprite_callback)); - m_k053246->set_config(NORMAL_PLANE_ORDER, 53, -2); m_k053246->set_screen(m_screen); - m_k053246->set_palette("palette"); - - K053251(config, m_k053251, 0); - - K054321(config, m_k054321, "lspeaker", "rspeaker"); - - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - - YM2151(config, "ymsnd", XTAL(16'000'000)/4).add_route(0, "lspeaker", 0.20).add_route(1, "rspeaker", 0.20); - - K054539(config, m_k054539, XTAL(18'432'000)); - m_k054539->add_route(0, "rspeaker", 1.00); - m_k054539->add_route(1, "lspeaker", 1.00); } @@ -480,7 +809,7 @@ void xmen_state::xmen6p(machine_config &config) ROM_START( xmen ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-eba04.10d", 0x00000, 0x20000, CRC(3588c5ec) SHA1(7966e7259038468845dafd19e5f7fc576c2901fa) ) /* Europe 4 Player version */ + ROM_LOAD16_BYTE( "065-eba04.10d", 0x00000, 0x20000, CRC(3588c5ec) SHA1(7966e7259038468845dafd19e5f7fc576c2901fa) ) // Europe 4 Player version ROM_LOAD16_BYTE( "065-eba05.10f", 0x00001, 0x20000, CRC(79ce32f8) SHA1(1a21b38d4a82103d78e246aca68ed3e4afaf60f3) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -488,17 +817,17 @@ ROM_START( xmen ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -507,7 +836,7 @@ ROM_END ROM_START( xmenu ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-ubb04.10d", 0x00000, 0x20000, CRC(f896c93b) SHA1(0bee89fe4d36a9b2ded864770198eb2df6903580) ) /* US 4 Player version */ + ROM_LOAD16_BYTE( "065-ubb04.10d", 0x00000, 0x20000, CRC(f896c93b) SHA1(0bee89fe4d36a9b2ded864770198eb2df6903580) ) // US 4 Player version ROM_LOAD16_BYTE( "065-ubb05.10f", 0x00001, 0x20000, CRC(e02e5d64) SHA1(9838c1cf9862db3ca70a23ef5f3c5883729c4e0c) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -515,17 +844,17 @@ ROM_START( xmenu ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -534,7 +863,7 @@ ROM_END ROM_START( xmenua ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-ueb04.10d", 0x00000, 0x20000, CRC(eee4e7ef) SHA1(72fe588bc58c692e7f9891f3e89c7d6fcc28c480) ) /* US 4 Player version */ + ROM_LOAD16_BYTE( "065-ueb04.10d", 0x00000, 0x20000, CRC(eee4e7ef) SHA1(72fe588bc58c692e7f9891f3e89c7d6fcc28c480) ) // US 4 Player version ROM_LOAD16_BYTE( "065-ueb05.10f", 0x00001, 0x20000, CRC(c3b2ffde) SHA1(27b32429c8c35cf15d1e5437535c4c335eee2118) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -542,17 +871,17 @@ ROM_START( xmenua ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -561,7 +890,7 @@ ROM_END ROM_START( xmenj ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-jba04.10d", 0x00000, 0x20000, CRC(d86cf5eb) SHA1(8bf67eb6cdb7187142557c27b058282886984a61) ) /* Japan 4 Player version */ + ROM_LOAD16_BYTE( "065-jba04.10d", 0x00000, 0x20000, CRC(d86cf5eb) SHA1(8bf67eb6cdb7187142557c27b058282886984a61) ) // Japan 4 Player version ROM_LOAD16_BYTE( "065-jba05.10f", 0x00001, 0x20000, CRC(abbc8126) SHA1(482a3c9be45b9d77460bd3df94e3c6cf285e63a2) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -569,17 +898,17 @@ ROM_START( xmenj ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -588,7 +917,7 @@ ROM_END ROM_START( xmenja ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-jea04.10d", 0x00000, 0x20000, CRC(655a61d6) SHA1(30a50b0a13205252d1cec6b6a6300e25c2f376c6) ) /* Japan 4 Player version */ + ROM_LOAD16_BYTE( "065-jea04.10d", 0x00000, 0x20000, CRC(655a61d6) SHA1(30a50b0a13205252d1cec6b6a6300e25c2f376c6) ) // Japan 4 Player version ROM_LOAD16_BYTE( "065-jea05.10f", 0x00001, 0x20000, CRC(7ea9fc84) SHA1(767f957c0c2f6a2d938d9e37388a17a6bce01dd8) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -596,17 +925,17 @@ ROM_START( xmenja ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -615,7 +944,7 @@ ROM_END ROM_START( xmena ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-aea04.10d", 0x00000, 0x20000, CRC(0e8d2e98) SHA1(f58613bd8719566ae04d4b5f03864524a7c86a65) ) /* Asia 4 Player version */ + ROM_LOAD16_BYTE( "065-aea04.10d", 0x00000, 0x20000, CRC(0e8d2e98) SHA1(f58613bd8719566ae04d4b5f03864524a7c86a65) ) // Asia 4 Player version ROM_LOAD16_BYTE( "065-aea05.10f", 0x00001, 0x20000, CRC(0b742a4e) SHA1(ed9c986261e72af7a80b44f9c2c576c265807e90) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -623,17 +952,17 @@ ROM_START( xmena ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -642,7 +971,7 @@ ROM_END ROM_START( xmenaa ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-ada04.10d", 0x00000, 0x20000, CRC(b8276624) SHA1(5b601393faa4bf578d84b590eb2360ad400368a5) ) /* Asia 4 Player version */ + ROM_LOAD16_BYTE( "065-ada04.10d", 0x00000, 0x20000, CRC(b8276624) SHA1(5b601393faa4bf578d84b590eb2360ad400368a5) ) // Asia 4 Player version ROM_LOAD16_BYTE( "065-ada05.10f", 0x00001, 0x20000, CRC(c68582ad) SHA1(d2ca23cc0ad08e7f3d5c533f6fe43d4c215c114e) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -650,17 +979,17 @@ ROM_START( xmenaa ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -669,7 +998,7 @@ ROM_END ROM_START( xmen2pe ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-eaa04.10d", 0x00000, 0x20000, CRC(502861e7) SHA1(f96aab2d2006703065de5bd7e341f929d04f5f60) ) /* Europe 2 Player version */ + ROM_LOAD16_BYTE( "065-eaa04.10d", 0x00000, 0x20000, CRC(502861e7) SHA1(f96aab2d2006703065de5bd7e341f929d04f5f60) ) // Europe 2 Player version ROM_LOAD16_BYTE( "065-eaa05.10f", 0x00001, 0x20000, CRC(ca6071bf) SHA1(454ddc3b598389e960e87e577a01a7de71d1f591) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -677,17 +1006,17 @@ ROM_START( xmen2pe ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -696,7 +1025,7 @@ ROM_END ROM_START( xmen2pu ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-uab04.10d", 0x00000, 0x20000, CRC(ff003db1) SHA1(b8aeb98dc0a38f0bda152d893fb60679bbdbadb3) ) /* US 2 Player version */ + ROM_LOAD16_BYTE( "065-uab04.10d", 0x00000, 0x20000, CRC(ff003db1) SHA1(b8aeb98dc0a38f0bda152d893fb60679bbdbadb3) ) // US 2 Player version ROM_LOAD16_BYTE( "065-uab05.10f", 0x00001, 0x20000, CRC(4e99a943) SHA1(66b47de497a116b2002cc5496c1a3f4173a55bc5) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -704,17 +1033,17 @@ ROM_START( xmen2pu ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -723,7 +1052,7 @@ ROM_END ROM_START( xmen2pj ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-jaa04.10d", 0x00000, 0x20000, CRC(66746339) SHA1(8cc5f5deb4178b0444ffc5974940a30cb003114e) ) /* Japan 2 Player version */ + ROM_LOAD16_BYTE( "065-jaa04.10d", 0x00000, 0x20000, CRC(66746339) SHA1(8cc5f5deb4178b0444ffc5974940a30cb003114e) ) // Japan 2 Player version ROM_LOAD16_BYTE( "065-jaa05.10f", 0x00001, 0x20000, CRC(1215b706) SHA1(b746dedab9c509b5cd941f0f4ddd3709e8a58cce) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -731,17 +1060,17 @@ ROM_START( xmen2pj ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -750,7 +1079,7 @@ ROM_END ROM_START( xmen2pa ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-aaa04.10d", 0x00000, 0x20000, CRC(7f8b27c2) SHA1(052db1f47671564a440544a41fc397a19d1aff3a) ) /* Asia 2 Player version */ + ROM_LOAD16_BYTE( "065-aaa04.10d", 0x00000, 0x20000, CRC(7f8b27c2) SHA1(052db1f47671564a440544a41fc397a19d1aff3a) ) // Asia 2 Player version ROM_LOAD16_BYTE( "065-aaa05.10f", 0x00001, 0x20000, CRC(841ed636) SHA1(33f96022ce3dae9b49eb51fd4e8f7387a1777002) ) ROM_LOAD16_BYTE( "065-a02.9d", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.9f", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -758,17 +1087,17 @@ ROM_START( xmen2pa ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.6f", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -831,7 +1160,7 @@ ROM_END ROM_START( xmen6p ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-ecb04.18g", 0x00000, 0x20000, CRC(258eb21f) SHA1(f1a22a880245f28195e5b6519822c0aa3b166541) ) /* Euro 6 Player version */ + ROM_LOAD16_BYTE( "065-ecb04.18g", 0x00000, 0x20000, CRC(258eb21f) SHA1(f1a22a880245f28195e5b6519822c0aa3b166541) ) // Euro 6 Player version ROM_LOAD16_BYTE( "065-ecb05.18j", 0x00001, 0x20000, CRC(25997bcd) SHA1(86fb1c64e133b7ca59ffb3910b62b61ee372c71a) ) ROM_LOAD16_BYTE( "065-a02.17g", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.17j", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -839,17 +1168,17 @@ ROM_START( xmen6p ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.7b", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.1l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.1h", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.12l", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.12l", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.17l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.22h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.22l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) @@ -858,7 +1187,7 @@ ROM_END ROM_START( xmen6pu ) ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "065-ucb04.18g", 0x00000, 0x20000, CRC(0f09b8e0) SHA1(79f4d86d8ec45b39e34ddf45860bea0c74dae183) ) /* US 6 Player version */ + ROM_LOAD16_BYTE( "065-ucb04.18g", 0x00000, 0x20000, CRC(0f09b8e0) SHA1(79f4d86d8ec45b39e34ddf45860bea0c74dae183) ) // US 6 Player version ROM_LOAD16_BYTE( "065-ucb05.18j", 0x00001, 0x20000, CRC(867becbf) SHA1(3f81f4dbd289f98b78d7821a8925598c771f01ef) ) ROM_LOAD16_BYTE( "065-a02.17g", 0x80000, 0x40000, CRC(b31dc44c) SHA1(4bdac05826b4d6d4fe46686ede5190e2f73eefc5) ) ROM_LOAD16_BYTE( "065-a03.17j", 0x80001, 0x40000, CRC(13842fe6) SHA1(b61f094eb94336edb8708d3437ead9b853b2d6e6) ) @@ -866,23 +1195,54 @@ ROM_START( xmen6pu ) ROM_REGION( 0x20000, "audiocpu", 0 ) ROM_LOAD( "065-a01.7b", 0x00000, 0x20000, CRC(147d3a4d) SHA1(a14409fe991e803b9e7812303e3a9ebd857d8b01) ) - ROM_REGION( 0x200000, "k052109", 0 ) /* tiles */ + ROM_REGION( 0x200000, "k052109", 0 ) // tiles ROM_LOAD32_WORD( "065-a08.1l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) ROM_LOAD32_WORD( "065-a07.1h", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) - ROM_REGION( 0x400000, "k053246", 0 ) /* graphics (addressable by the main CPU) */ - ROM_LOAD64_WORD( "065-a09.12l", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) /* sprites */ + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU) + ROM_LOAD64_WORD( "065-a09.12l", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites ROM_LOAD64_WORD( "065-a10.17l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) ROM_LOAD64_WORD( "065-a12.22h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD64_WORD( "065-a11.22l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) // samples ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_REGION( 0x80, "eeprom", 0 ) ROM_LOAD( "xmen_ucb.nv", 0x0000, 0x0080, CRC(f3d0f682) SHA1(b0d4655c651238ae028ffb59a704acba798f93f8) ) ROM_END +// PCB with no Konami custom chips but 4x TPC1020AFN instead. Has M6295 instead of Z80 + YM2151 + K054539. All labels peeled off / unreadable. GFX ROMs are identical to the original. +ROM_START( xmenabl ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "rom1", 0x00000, 0x80000, CRC(c895fdc1) SHA1(e7e6908374310ef0e71d9541402a18818ea10134) ) + ROM_LOAD16_BYTE( "rom2", 0x00001, 0x80000, CRC(50d56da7) SHA1(7ae0748f65d9de62be8c0cd1b41dceb1ea91ba3e) ) + + ROM_REGION( 0x200000, "k052109", 0 ) // tiles, k052109 non really present + ROM_LOAD32_WORD( "gfx15l", 0x000000, 0x100000, CRC(6b649aca) SHA1(2595f314517738e8614facf578cc951a6c36a180) ) + ROM_LOAD32_WORD( "gfx16l", 0x000002, 0x100000, CRC(c5dc8fc4) SHA1(9887cb002c8b72be7ce933cb397f00cdc5506c8c) ) + + ROM_REGION( 0x400000, "k053246", 0 ) // graphics (addressable by the main CPU), k053246 non really present + ROM_LOAD64_WORD( "gfx2h", 0x000000, 0x100000, CRC(ea05d52f) SHA1(7f2c14f907355856fb94e3a67b73aa1919776835) ) // sprites + ROM_LOAD64_WORD( "gfx2l", 0x000002, 0x100000, CRC(96b91802) SHA1(641943557b59b91f0edd49ec8a73cef7d9268b32) ) + ROM_LOAD64_WORD( "gfx1h", 0x000004, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) + ROM_LOAD64_WORD( "gfx1l", 0x000006, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) + + ROM_REGION( 0x100000, "oki", 0 ) + ROM_LOAD( "oki1", 0x00000, 0x80000, CRC(ded562e0) SHA1(e67daae3e8e4a3a4979d3debf085f9c332404dd4) ) // xx1xxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD( "oki2", 0x80000, 0x80000, CRC(74a12d1e) SHA1(b5e23e8efea2cf19385c081cfe8088bead132c21) ) + + ROM_REGION( 0x80, "eeprom", 0 ) + ROM_LOAD( "xmen_aea.nv", 0x0000, 0x0080, CRC(d73d4f20) SHA1(b39906eb59ecf8f1e8141b467021e0a581186d47) ) + + ROM_REGION( 0x400, "plds", 0 ) + ROM_LOAD( "gal16v8b", 0x000, 0x117, NO_DUMP ) // near the sprite hw and ROMs + ROM_LOAD( "gal16v8d", 0x200, 0x117, NO_DUMP ) // near the M6295 +ROM_END + +} // anonymous namespace + + /* Second "version" letter denotes cabinet type: @@ -895,18 +1255,19 @@ E = 4 players, 2 coin slots, can set coin/credit by coin slot, FREE PLAY option, */ -GAME( 1992, xmen, 0, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver EBA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmenu, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver UBB)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmenua, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver UEB)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmenj, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver JBA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmenja, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver JEA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmena, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver AEA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmenaa, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver ADA)", MACHINE_SUPPORTS_SAVE ) - -GAME( 1992, xmen2pe, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver EAA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmen2pu, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver UAB)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmen2pj, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver JAA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmen2pa, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver AAA)", MACHINE_SUPPORTS_SAVE ) - -GAME( 1992, xmen6p, xmen, xmen6p, xmen6p, xmen_state, empty_init, ROT0, "Konami", "X-Men (6 Players ver ECB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1992, xmen6pu, xmen, xmen6p, xmen6p, xmen_state, empty_init, ROT0, "Konami", "X-Men (6 Players ver UCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmen, 0, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver EBA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenu, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver UBB)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenua, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver UEB)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenj, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver JBA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenja, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver JEA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmena, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver AEA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenaa, xmen, xmen, xmen, xmen_state, empty_init, ROT0, "Konami", "X-Men (4 Players ver ADA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmenabl, xmen, xmenabl, xmen, xmen_state, empty_init, ROT0, "bootleg", "X-Men (4 Players ver AEA, bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // sprites are wrong, one oki ROM may be bad or the banking not correct (or both) + +GAME( 1992, xmen2pe, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver EAA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmen2pu, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver UAB)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmen2pj, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver JAA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmen2pa, xmen, xmen, xmen2p, xmen_state, empty_init, ROT0, "Konami", "X-Men (2 Players ver AAA)", MACHINE_SUPPORTS_SAVE ) + +GAME( 1992, xmen6p, xmen, xmen6p, xmen6p, xmen6p_state, empty_init, ROT0, "Konami", "X-Men (6 Players ver ECB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1992, xmen6pu, xmen, xmen6p, xmen6p, xmen6p_state, empty_init, ROT0, "Konami", "X-Men (6 Players ver UCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/konami/xmen.h b/src/mame/konami/xmen.h deleted file mode 100644 index 8bd55ce3a17..00000000000 --- a/src/mame/konami/xmen.h +++ /dev/null @@ -1,89 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria -#ifndef MAME_INCLUDES_XMEN_H -#define MAME_INCLUDES_XMEN_H - -#pragma once - -#include "machine/gen_latch.h" -#include "machine/timer.h" -#include "sound/k054539.h" -#include "k053246_k053247_k055673.h" -#include "k053251.h" -#include "k052109.h" -#include "konami_helper.h" -#include "machine/k054321.h" -#include "screen.h" - -class xmen_state : public driver_device -{ -public: - xmen_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_xmen6p_spriteram(*this, "spriteram%u", 0), - m_xmen6p_tilemap(*this, "tilemap%u", 0), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_k054539(*this, "k054539"), - m_k052109(*this, "k052109"), - m_k053246(*this, "k053246"), - m_k053251(*this, "k053251"), - m_screen(*this, "screen"), - m_k054321(*this, "k054321"), - m_z80bank(*this, "z80bank") - { } - - void xmen(machine_config &config); - void xmen6p(machine_config &config); - - DECLARE_READ_LINE_MEMBER(xmen_frame_r); - -private: - /* video-related */ - int m_layer_colorbase[3]{}; - int m_sprite_colorbase = 0; - int m_layerpri[3]{}; - - /* for xmen6p */ - std::unique_ptr m_screen_right; - std::unique_ptr m_screen_left; - optional_shared_ptr_array m_xmen6p_spriteram; - optional_shared_ptr_array m_xmen6p_tilemap; - uint16_t * m_k053247_ram; - bool m_xmen6p_tilemap_select; - - /* misc */ - uint8_t m_vblank_irq_mask = 0; - - /* devices */ - required_device m_maincpu; - required_device m_audiocpu; - required_device m_k054539; - required_device m_k052109; - required_device m_k053246; - required_device m_k053251; - required_device m_screen; - required_device m_k054321; - - required_memory_bank m_z80bank; - void eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void xmen_18fa00_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void sound_bankswitch_w(uint8_t data); - - virtual void machine_start() override; - virtual void machine_reset() override; - DECLARE_VIDEO_START(xmen6p); - uint32_t screen_update_xmen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_xmen6p_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_xmen6p_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_xmen6p); - TIMER_DEVICE_CALLBACK_MEMBER(xmen_scanline); - K052109_CB_MEMBER(tile_callback); - K053246_CB_MEMBER(sprite_callback); - - void _6p_main_map(address_map &map); - void main_map(address_map &map); - void sound_map(address_map &map); -}; - -#endif // MAME_INCLUDES_XMEN_H diff --git a/src/mame/konami/xmen_v.cpp b/src/mame/konami/xmen_v.cpp deleted file mode 100644 index 198b1d1f755..00000000000 --- a/src/mame/konami/xmen_v.cpp +++ /dev/null @@ -1,192 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria -#include "emu.h" -#include "xmen.h" - - -/*************************************************************************** - - Callbacks for the K052109 - -***************************************************************************/ - -K052109_CB_MEMBER(xmen_state::tile_callback) -{ - /* (color & 0x02) is flip y handled internally by the 052109 */ - if (layer == 0) - *color = m_layer_colorbase[layer] + ((*color & 0xf0) >> 4); - else - *color = m_layer_colorbase[layer] + ((*color & 0x7c) >> 2); -} - -/*************************************************************************** - - Callbacks for the K053247 - -***************************************************************************/ - -K053246_CB_MEMBER(xmen_state::sprite_callback) -{ - int pri = (*color & 0x00e0) >> 4; /* ??????? */ - - if (pri <= m_layerpri[2]) - *priority_mask = 0; - else if (pri > m_layerpri[2] && pri <= m_layerpri[1]) - *priority_mask = 0xf0; - else if (pri > m_layerpri[1] && pri <= m_layerpri[0]) - *priority_mask = 0xf0 | 0xcc; - else - *priority_mask = 0xf0 | 0xcc | 0xaa; - - *color = m_sprite_colorbase + (*color & 0x001f); -} - - - -/*************************************************************************** - - Start the video hardware emulation. - -***************************************************************************/ - -VIDEO_START_MEMBER(xmen_state,xmen6p) -{ - m_k053246->k053247_get_ram( &m_k053247_ram); - - m_screen_left = std::make_unique(64 * 8, 32 * 8); - m_screen_right = std::make_unique(64 * 8, 32 * 8); - - save_item(NAME(*m_screen_left)); - save_item(NAME(*m_screen_right)); -} - - -/*************************************************************************** - - Display refresh - -***************************************************************************/ - -uint32_t xmen_state::screen_update_xmen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int layer[3], bg_colorbase; - - bg_colorbase = m_k053251->get_palette_index(k053251_device::CI4); - m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1); - m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI3); - m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI0); - m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI2); - - m_k052109->tilemap_update(); - - layer[0] = 0; - m_layerpri[0] = m_k053251->get_priority(k053251_device::CI3); - layer[1] = 1; - m_layerpri[1] = m_k053251->get_priority(k053251_device::CI0); - layer[2] = 2; - m_layerpri[2] = m_k053251->get_priority(k053251_device::CI2); - - konami_sortlayers3(layer, m_layerpri); - - screen.priority().fill(0, cliprect); - /* note the '+1' in the background color!!! */ - bitmap.fill(16 * bg_colorbase + 1, cliprect); - m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[0], 0, 1); - m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 2); - m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4); - - /* this isn't supported anymore and it is unsure if still needed; keeping here for reference - pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ - m_k053246->k053247_sprites_draw( bitmap, cliprect); - return 0; -} - - -uint32_t xmen_state::screen_update_xmen6p_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - for(int y = 0; y < 32 * 8; y++) - { - uint16_t *const line_dest = &bitmap.pix(y); - uint16_t const *const line_src = &m_screen_left->pix(y); - - for (int x = 12 * 8; x < 52 * 8; x++) - line_dest[x] = line_src[x]; - } - - return 0; -} - -uint32_t xmen_state::screen_update_xmen6p_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - for(int y = 0; y < 32 * 8; y++) - { - uint16_t *const line_dest = &bitmap.pix(y); - uint16_t const *const line_src = &m_screen_right->pix(y); - - for (int x = 12 * 8; x < 52 * 8; x++) - line_dest[x] = line_src[x]; - } - - return 0; -} - -/* my lefts and rights are mixed up in several places.. */ -WRITE_LINE_MEMBER(xmen_state::screen_vblank_xmen6p) -{ - // rising edge - if (state) - { - int layer[3], bg_colorbase; - bitmap_ind16 * renderbitmap; - rectangle cliprect; - - // const rectangle *visarea = m_screen->visible_area(); - // cliprect = *visarea; - cliprect.set(0, 64 * 8 - 1, 2 * 8, 30 * 8 - 1); - - int index = m_screen->frame_number() & 1; - renderbitmap = index ? m_screen_right.get() : m_screen_left.get(); - - /* copy the desired spritelist to the chip */ - memcpy(m_k053247_ram, m_xmen6p_spriteram[index], 0x1000); - - /* we write the entire content of the tileram to the chip to ensure - everything gets marked as dirty and the desired tilemap is rendered - this is not very efficient! - */ - index += m_xmen6p_tilemap_select ? 2 : 0; - for (int offset = 0; offset < (0xc000 / 2); offset++) - { - if (index == 0 || (offset != 0x1c80 && offset != 0x1e80)) - m_k052109->write(offset, m_xmen6p_tilemap[index][offset] & 0x00ff); - } - - bg_colorbase = m_k053251->get_palette_index(k053251_device::CI4); - m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1); - m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI3); - m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI0); - m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI2); - - m_k052109->tilemap_update(); - - layer[0] = 0; - m_layerpri[0] = m_k053251->get_priority(k053251_device::CI3); - layer[1] = 1; - m_layerpri[1] = m_k053251->get_priority(k053251_device::CI0); - layer[2] = 2; - m_layerpri[2] = m_k053251->get_priority(k053251_device::CI2); - - konami_sortlayers3(layer, m_layerpri); - - m_screen->priority().fill(0, cliprect); - /* note the '+1' in the background color!!! */ - renderbitmap->fill(16 * bg_colorbase + 1, cliprect); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[0], 0, 1); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[1], 0, 2); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[2], 0, 4); - - /* this isn't supported anymore and it is unsure if still needed; keeping here for reference - pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ - m_k053246->k053247_sprites_draw(*renderbitmap, cliprect); - } -} diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 9d7662b678a..10c4326bed8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -2459,6 +2459,7 @@ magibombc // (c) 2001 Astro Corp. magibombd // (c) 2005 Astro Corp. magibombe // (c) 2001? Astro Corp. magibombf // (c) 2002 Astro Corp. +magibombg // (c) 2004 Astro Corp. showhanc // (c) 2000 Astro Corp. showhand // (c) 2000 Astro Corp. skilldrp // (c) 2002 Astro Corp. @@ -44367,6 +44368,7 @@ xmen6p // GX065 (c) 1992 (World) xmen6pu // GX065 (c) 1992 (US) xmena // GX065 (c) 1992 (Asia) xmenaa // GX065 (c) 1992 (Asia) +xmenabl // bootleg xmenj // GX065 (c) 1992 (Japan) xmenja // GX065 (c) 1992 (Japan) xmenu // GX065 (c) 1992 (US) diff --git a/src/mame/misc/astrcorp.cpp b/src/mame/misc/astrcorp.cpp index 4abadbf51f6..c4a004a6936 100644 --- a/src/mame/misc/astrcorp.cpp +++ b/src/mame/misc/astrcorp.cpp @@ -14,22 +14,23 @@ OTHER: EEPROM, Battery 512 sprites, each made of N x M tiles. Tiles are 16x16x8 (16x32x8 in Stone Age) ------------------------------------------------------------------------------------------------------------------------------- -Year + Game PCB ID CPU Video Chips Notes ------------------------------------------------------------------------------------------------------------------------------- -00 Show Hand CHE-B50-4002A MC68HC000FN12 ASTRO V01 pLSI1016-60LJ, ASTRO 0001B MCU? (28 pins) -00 Wangpai Duijue CHE-B50-4002A MC68HC000FN12 ASTRO V01 pLSI1016, MDT2020AP MCU (28 pins) -01 Magic Bomb (NB4.5) None ASTRO V03 ASTRO V02 pLSI1016 Encrypted -02 Skill Drop GA None JX-1689F1028N ASTRO V02 pLSI1016-60LJ -02? Keno 21 ? ASTRO V102? ASTRO V05 ASTRO F02? not dumped -03 Speed Drop None JX-1689HP ASTRO V05 pLSI1016-60LJ -04 Zoo M1.1 ASTRO V102PX-005? ASTRO V06 ASTRO F02 2005-02-18 Encrypted -05 Dino Dino T-3802A ASTRO V102PX-010? ASTRO V05 ASTRO F02 2003-03-12 Encrypted -05 Stone Age L1 ASTRO V102PX-012? ASTRO V05(x2) ASTRO F02 2004-09-04 Encrypted -05? Hacher (hack) M1.2 ? ? ASTRO F02 2005-02-18 Encrypted -06 Win Win Bingo M1.2 ASTRO V102PX-006? ASTRO V06 ASTRO F02 2005-09-17 Encrypted -07? Western Venture O (CS350P032) ASTRO V102? ASTRO V07 ASTRO F01 2007-06-03 Encrypted ------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- +Year + Game PCB ID CPU Video Chips Notes +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- +00 Show Hand CHE-B50-4002A MC68HC000FN12 ASTRO V01 pLSI1016-60LJ, ASTRO 0001B MCU? (28 pins) +00 Wangpai Duijue CHE-B50-4002A MC68HC000FN12 ASTRO V01 pLSI1016, MDT2020AP MCU (28 pins) +01 Magic Bomb (NB4.5) None ASTRO V03 ASTRO V02 pLSI1016 Encrypted +02 Skill Drop GA None JX-1689F1028N ASTRO V02 pLSI1016-60LJ +02? Keno 21 ? ASTRO V102? ASTRO V05 ASTRO F02? not dumped +03 Speed Drop None JX-1689HP ASTRO V05 pLSI1016-60LJ +04 Zoo M1.1 ASTRO V102PX-005? ASTRO V06 ASTRO F02 2005-02-18 Encrypted +04 Magic Bomb (NB6.1) J (CS350P001 + CS350P033) ASTRO V102PX-014? ASTRO V07 ?, Encrypted, select CGA / VGA via jumper +05 Dino Dino T-3802A ASTRO V102PX-010? ASTRO V05 ASTRO F02 2003-03-12 Encrypted +05 Stone Age L1 ASTRO V102PX-012? ASTRO V05(x2) ASTRO F02 2004-09-04 Encrypted +05? Hacher (hack) M1.2 ? ? ASTRO F02 2005-02-18 Encrypted +06 Win Win Bingo M1.2 ASTRO V102PX-006? ASTRO V06 ASTRO F02 2005-09-17 Encrypted +07? Western Venture O (CS350P032) ASTRO V102? ASTRO V07 ASTRO F01 2007-06-03 Encrypted +---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - astoneag, magibomb, winbingo, etc.: to initialize EEPROM (and self test in some games), keep keyout (W) pressed during boot. Needs ticket (or reserve switch) and hopper lines to be 0 though (disconnected?). @@ -54,6 +55,7 @@ TODO: - magibomba, westvent: need a redump of one of the program ROMs. - magibombd, hacher: need a redump of the sprite ROMs. - astoneag, dinodino, magibombd: exiting from test menu goes haywire (requires a soft-reset with F3). +- magibombg: needs RE of the CPU code and correct EEPROM. *************************************************************************************************************/ @@ -278,12 +280,14 @@ public: void hacher(machine_config &config); void dinodino(machine_config &config); void magibombd(machine_config &config); + void magibombg(machine_config &config); void winbingo(machine_config &config); void zoo(machine_config &config); void init_dinodino(); void init_hacher(); void init_magibombd(); + void init_magibombg(); void init_winbingo(); void init_winbingoa(); void init_zoo(); @@ -319,6 +323,7 @@ private: void dinodino_map(address_map &map); void hacher_map(address_map &map); void magibombd_map(address_map &map); + void magibombg_map(address_map &map); void winbingo_map(address_map &map); void zoo_map(address_map &map); @@ -795,6 +800,23 @@ void zoo_state::magibombd_map(address_map &map) // map(0x??0001, 0x??0001).w(FUNC(zoo_state::screen_enable_w)); // unknown location } +void zoo_state::magibombg_map(address_map &map) +{ + map(0x000000, 0x03ffff).rom().mirror(0x800000); // POST checks for ROM checksum at mirror + map(0xa00000, 0xa00fff).ram().share("spriteram"); + map(0xa02000, 0xa02001).nopr().w(FUNC(zoo_state::draw_sprites_w)); + map(0xa04000, 0xa04001).portr("INPUTS"); + map(0xa08001, 0xa08001).w(FUNC(zoo_state::eeprom_w)); + map(0xa0a000, 0xa0a001).w(FUNC(zoo_state::magibomb_outputs_w)); + map(0xa0e000, 0xa0e001).portr("EEPROM_IN"); + map(0xb80000, 0xb80001).portr("CPUCODE_IN"); + map(0xc00000, 0xc03fff).ram().share("nvram"); // battery + map(0xd00000, 0xd001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0xd80000, 0xd80000).w(FUNC(zoo_state::oki_bank_w)); + map(0xe00001, 0xe00001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); +// map(0x??0001, 0x??0001).w(FUNC(zoo_state::screen_enable_w)); // unknown location +} + void zoo_state::winbingo_map(address_map &map) { map(0x000000, 0x03ffff).rom().mirror(0x800000); // POST checks for ROM checksum at mirror @@ -1221,6 +1243,13 @@ void zoo_state::magibombd(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &zoo_state::magibombd_map); } +void zoo_state::magibombg(machine_config &config) +{ + zoo(config); + m_maincpu->set_addrmap(AS_PROGRAM, &zoo_state::magibombg_map); + TIMER(config.replace(), "scantimer").configure_scanline(FUNC(zoo_state::irq_2_4_scanline_cb), "screen", 0, 1); +} + void zoo_state::winbingo(machine_config &config) { zoo(config); @@ -1628,6 +1657,25 @@ ROM_START( magibombf ) ROM_LOAD( "93c46.u6", 0x00, 0x80, CRC(a01e5ce7) SHA1(77213c0b426ca1806bb8a4c55e9e7f4f2db66962) ) // factory default ROM_END +ROM_START( magibombg ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "1 magic bomb nb.6.1.u20", 0x00000, 0x10000, CRC(8aaa14c3) SHA1(44ade91596b8cd907c7556f3c5f977e2c7b4029d) ) + ROM_LOAD16_BYTE( "2 magic bomb nb.6.1.u19", 0x00001, 0x10000, CRC(d371c3ab) SHA1(3f63883ad2735a772e9dbc958346b692420667dc) ) + ROM_FILL( 0x20000, 0x20000, 0xff ) + + ROM_REGION( 0x200000, "sprites", 0 ) + ROM_LOAD( "mx29f1610mc.u26", 0x000000, 0x200000, BAD_DUMP CRC(042f7992) SHA1(2e175994d0b14200a92bdb46e82847b1a1c88265) ) // wasn't dumped, different from the Ver. A3.1 set! + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "5 magic bomb", 0x00000, 0x80000, CRC(c9edbf1b) SHA1(8e3a96a38aea23950d6add66a5a3d079013bc217) ) + + ROM_REGION16_LE( 0x80, "eeprom", 0 ) + ROM_LOAD( "93c46.u10", 0x00, 0x80, BAD_DUMP CRC(a01e5ce7) SHA1(77213c0b426ca1806bb8a4c55e9e7f4f2db66962) ) // TODO: this is correct for magibombf, create good one + + ROM_REGION16_LE( 0x02, "astro_cpucode", ROMREGION_ERASE00 ) + ROM_LOAD( "magibombg_cpucode.key", 0x00, 0x02, NO_DUMP ) // TODO: RE correct one +ROM_END + /*************************************************************************** Western Venture @@ -2185,6 +2233,22 @@ void zoo_state::init_magibombd() #endif } +void zoo_state::init_magibombg() +{ + decrypt_rom(magibombd_table); +#if 1 + // TODO: There's more stuff happening for addresses < 0x400... + // override reset vector for now + u16 * const rom = (u16 *)memregion("maincpu")->base(); + rom[0x00004/2] = 0x0000; + rom[0x00006/2] = 0x043e; + + rom[0x00400/2] = 0x4e75; // overlay!? + + rom[0x00f26/2] = 0x4e75; // Mirror ROM word checksum (it expects 0) +#endif +} + const zoo_state::decryption_info zoo_state::winbingo_table = { { { @@ -2439,6 +2503,7 @@ GAMEL( 2004, zoo, 0, zoo, magibombd, zoo_state, init_z GAMEL( 2005, dinodino, 0, dinodino, dinodino, zoo_state, init_dinodino, ROT0, "Astro Corp.", "Dino Dino (Ver. A1.1, 01/13/2005)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION, layout_dinodino ) // 13/01.2005 10:59 GAMEL( 2005, astoneag, 0, astoneag, astoneag, astoneag_state, init_astoneag, ROT0, "Astro Corp.", "Stone Age (Astro, Ver. EN.03.A, 2005/02/21)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION, layout_astoneag ) GAMEL( 2005, magibombd, magibomb, magibombd, magibombd, zoo_state, init_magibombd, ROT0, "Astro Corp.", "Magic Bomb (Ver. AA.72.D, 14/11/05)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_magibombb ) // 15/11/05 09:31. Undumped sprite ROM +GAMEL( 2004, magibombg, magibomb, magibombg, magibombd, zoo_state, init_magibombg, ROT0, "Astro Corp.", "Magic Bomb (Ver. NB6.1, 26/04/04)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_magibomb ) // 26/04/04. Undumped sprite ROM GAMEL( 2006, winbingo, 0, winbingo, winbingo, zoo_state, init_winbingo, ROT0, "Astro Corp.", "Win Win Bingo (Ver. GM.03.3, Feb 23 2006)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION, layout_winbingo ) // 15:47:48 Feb 23 2006 GAMEL( 2006, winbingoa, winbingo, winbingo, winbingo, zoo_state, init_winbingoa, ROT0, "Astro Corp.", "Win Win Bingo (Ver. GM.05.1, May 11 2006)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_winbingo ) // 11:02:07 May 11 2006. Undumped sprite ROMs GAMEL( 2005, hacher, winbingo, hacher, winbingo, zoo_state, init_hacher, ROT0, "bootleg (Gametron)", "Hacher (hack of Win Win Bingo EN.01.6)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS, layout_winbingo ) // 14:25:46 Mar 10 2005. One bad sprite ROM -- cgit v1.2.3