From 19da62b983628b2f246d6c53f84722ce9c0d21bd Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 14 Jan 2023 08:31:34 +0100 Subject: - dataeast/cbuster.cpp, dataeast/metlclsh.cpp: consolidated drivers in single files - konami/konmedal.cpp: updated dsw definitions for pikkaric - misc/majorpkr.cpp: enabled save state support --- src/mame/dataeast/cbuster.cpp | 374 ++++++++++++++++++++++---------- src/mame/dataeast/cbuster.h | 70 ------ src/mame/dataeast/cbuster_v.cpp | 81 ------- src/mame/dataeast/metlclsh.cpp | 446 ++++++++++++++++++++++++++++++++++----- src/mame/dataeast/metlclsh.h | 72 ------- src/mame/dataeast/metlclsh_v.cpp | 252 ---------------------- src/mame/konami/konamigs.cpp | 1 - src/mame/konami/konmedal68k.cpp | 14 +- src/mame/misc/majorpkr.cpp | 14 +- 9 files changed, 670 insertions(+), 654 deletions(-) delete mode 100644 src/mame/dataeast/cbuster.h delete mode 100644 src/mame/dataeast/cbuster_v.cpp delete mode 100644 src/mame/dataeast/metlclsh.h delete mode 100644 src/mame/dataeast/metlclsh_v.cpp diff --git a/src/mame/dataeast/cbuster.cpp b/src/mame/dataeast/cbuster.cpp index 5241bab2a8a..f2386d32095 100644 --- a/src/mame/dataeast/cbuster.cpp +++ b/src/mame/dataeast/cbuster.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Bryan McPhail +// copyright-holders: Bryan McPhail + /*************************************************************************** Crude Buster (World version FX) (c) 1990 Data East Corporation @@ -7,12 +8,12 @@ Crude Buster (Japanese version) (c) 1990 Data East Corporation Two Crude (USA version) (c) 1990 Data East USA - The 'FX' board is filled with 'FU' roms except for the 4 program roms, + The 'FX' board is filled with 'FU' ROMs except for the 4 program ROMs, both boards have 'export' stickers which usually indicates a World version. - Maybe one is a UK or European version. Some boards exist with 'FU-1' roms - which are binary identical to the FX roms. + Maybe one is a UK or European version. Some boards exist with 'FU-1' ROMs + which are binary identical to the FX ROMs. - The FX/FU-1 roms are largely translation corrections from the first revision: + The FX/FU-1 ROMs are largely translation corrections from the first revision: THEIR SOLDIERS ARE ARMED WITH THE ADVANCED AND BIZARRE WEAPONS -> THEIR SOLDIERS ARE ARMED WITH THE MOST ADVANCED AND BIZARRE WEAPONS. @@ -39,16 +40,160 @@ ***************************************************************************/ #include "emu.h" -#include "cbuster.h" +#include "deco16ic.h" +#include "decospr.h" + +#include "cpu/h6280/h6280.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "sound/ymopm.h" #include "sound/ymopn.h" +#include "video/bufsprite.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +// configurable logging +#define LOG_PROT (1U << 1) + +//#define VERBOSE (LOG_GENERAL | LOG_PROT) + +#include "logmacro.h" + +#define LOGPROT(...) LOGMASKED(LOG_PROT, __VA_ARGS__) + + +namespace { + +class cbuster_state : public driver_device +{ +public: + cbuster_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_deco_tilegen(*this, "tilegen%u", 1U) + , m_palette(*this, "palette") + , m_spriteram(*this, "spriteram") + , m_soundlatch(*this, "soundlatch") + , m_sprgen(*this, "spritegen") + , m_pf_rowscroll(*this, "pf%u_rowscroll", 1U) + { } + + void init_twocrude(); + + void twocrude(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: + // devices + required_device m_maincpu; + required_device m_audiocpu; + required_device_array m_deco_tilegen; + required_device m_palette; + required_device m_spriteram; + required_device m_soundlatch; + required_device m_sprgen; + + // memory pointers + required_shared_ptr_array m_pf_rowscroll; + + // misc + u16 m_prot = 0U; + u8 m_pri = 0U; + + void prot_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 prot_r(); + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECO16IC_BANK_CB_MEMBER(bank_callback); + static rgb_t xbgr_888(u32 raw); + void main_map(address_map &map); + void sound_map(address_map &map); +}; + + +// video + +/******************************************************************************/ + +void cbuster_state::video_start() +{ + m_sprgen->alloc_sprite_bitmap(); +} + +/* + Crude Buster palette is a little strange compared to other Data East games + of this period. Although the digital palette is 8 bits per channel, the + analog 'white' level is set at 0x8e. In hardware this is done at the + final resistors before the JAMMA connector. It also suggests that if the + game were to use any values above 0x8e (it doesn't) then the final output + voltage would be out of spec. + + I suspect this setup is actually software compensating for a hardware + design problem. +*/ +rgb_t cbuster_state::xbgr_888(u32 raw) +{ + int r = (raw >> 0) & 0xff; + int g = (raw >> 8) & 0xff; + int b = (raw >> 16) & 0xff; + + if (r > 0x8e) r = 0x8e; + if (g > 0x8e) g = 0x8e; + if (b > 0x8e) b = 0x8e; + + r = (r * 255) / 0x8e; + g = (g * 255) / 0x8e; + b = (b * 255) / 0x8e; + + return rgb_t(r, g, b); +} + +u32 cbuster_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + const u16 flip = m_deco_tilegen[0]->pf_control_r(0); + + flip_screen_set(!BIT(flip, 7)); + m_sprgen->set_flip_screen(!BIT(flip, 7)); + + m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), 0x400); + + m_deco_tilegen[0]->pf_update(m_pf_rowscroll[0], m_pf_rowscroll[1]); + m_deco_tilegen[1]->pf_update(m_pf_rowscroll[2], m_pf_rowscroll[3]); + + // Draw playfields & sprites + m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0800, 0x0900, 0x100, 0x0ff); + m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0900, 0x0900, 0x500, 0x0ff); + + if (m_pri) + { + m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); + m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); + } + else + { + m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); + m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); + } + + m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0000, 0x0900, 0x100, 0x0ff); + m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0100, 0x0900, 0x500, 0x0ff); + m_deco_tilegen[0]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + + +// machine + void cbuster_state::prot_w(offs_t offset, u16 data, u16 mem_mask) { data &= mem_mask; @@ -75,18 +220,18 @@ void cbuster_state::prot_w(offs_t offset, u16 data, u16 mem_mask) if ((data & 0xffff) == 0x0200) m_prot = 0x63 << 8; if ((data & 0xffff) == 0x9a) m_prot = 0xe; if ((data & 0xffff) == 0x55) m_prot = 0x1e; - if ((data & 0xffff) == 0x0e) {m_prot = 0x0e; m_pri = 0;} /* start */ - if ((data & 0xffff) == 0x00) {m_prot = 0x0e; m_pri = 0;} /* level 0 */ - if ((data & 0xffff) == 0xf1) {m_prot = 0x36; m_pri = 1;} /* level 1 */ - if ((data & 0xffff) == 0x80) {m_prot = 0x2e; m_pri = 1;} /* level 2 */ - if ((data & 0xffff) == 0x40) {m_prot = 0x1e; m_pri = 1;} /* level 3 */ - if ((data & 0xffff) == 0xc0) {m_prot = 0x3e; m_pri = 0;} /* level 4 */ - if ((data & 0xffff) == 0xff) {m_prot = 0x76; m_pri = 1;} /* level 5 */ + if ((data & 0xffff) == 0x0e) {m_prot = 0x0e; m_pri = 0;} // start + if ((data & 0xffff) == 0x00) {m_prot = 0x0e; m_pri = 0;} // level 0 + if ((data & 0xffff) == 0xf1) {m_prot = 0x36; m_pri = 1;} // level 1 + if ((data & 0xffff) == 0x80) {m_prot = 0x2e; m_pri = 1;} // level 2 + if ((data & 0xffff) == 0x40) {m_prot = 0x1e; m_pri = 1;} // level 3 + if ((data & 0xffff) == 0xc0) {m_prot = 0x3e; m_pri = 0;} // level 4 + if ((data & 0xffff) == 0xff) {m_prot = 0x76; m_pri = 1;} // level 5 } u16 cbuster_state::prot_r() { - logerror("%04x : protection control read at 0bc004\n", m_maincpu->pc()); + LOGPROT("%04x : protection control read at 0bc004\n", m_maincpu->pc()); return m_prot; } @@ -99,13 +244,13 @@ void cbuster_state::main_map(address_map &map) map(0x0a0000, 0x0a1fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); map(0x0a2000, 0x0a2fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); - map(0x0a4000, 0x0a47ff).ram().share("pf1_rowscroll"); - map(0x0a6000, 0x0a67ff).ram().share("pf2_rowscroll"); + map(0x0a4000, 0x0a47ff).ram().share(m_pf_rowscroll[0]); + map(0x0a6000, 0x0a67ff).ram().share(m_pf_rowscroll[1]); map(0x0a8000, 0x0a8fff).rw(m_deco_tilegen[1], FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); map(0x0aa000, 0x0aafff).rw(m_deco_tilegen[1], FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); - map(0x0ac000, 0x0ac7ff).ram().share("pf3_rowscroll"); - map(0x0ae000, 0x0ae7ff).ram().share("pf4_rowscroll"); + map(0x0ac000, 0x0ac7ff).ram().share(m_pf_rowscroll[2]); + map(0x0ae000, 0x0ae7ff).ram().share(m_pf_rowscroll[3]); map(0x0b0000, 0x0b07ff).ram().share("spriteram"); map(0x0b4000, 0x0b4001).nopw(); @@ -187,7 +332,7 @@ static INPUT_PORTS_START( twocrude ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" ) /* Manual says OFF "Don't Change" */ + PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" ) // Manual says OFF "Don't Change" PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x0100, "1" ) @@ -199,8 +344,8 @@ static INPUT_PORTS_START( twocrude ) PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPUNUSED_DIPLOC( 0x1000, 0x1000, "SW2:5" ) /* Manual says OFF "Don't Change" */ - PORT_DIPUNUSED_DIPLOC( 0x2000, 0x2000, "SW2:6" ) /* Manual says OFF "Don't Change" */ + PORT_DIPUNUSED_DIPLOC( 0x1000, 0x1000, "SW2:5" ) // Manual says OFF "Don't Change" + PORT_DIPUNUSED_DIPLOC( 0x2000, 0x2000, "SW2:6" ) // Manual says OFF "Don't Change" PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) ) @@ -234,10 +379,10 @@ static const gfx_layout tilelayout = }; static GFXDECODE_START( gfx_cbuster ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */ - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0x100, 80 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "tiles1", 0, charlayout, 0, 128 ) // Characters 8x8 + GFXDECODE_ENTRY( "tiles1", 0, tilelayout, 0, 128 ) // Tiles 16x16 + GFXDECODE_ENTRY( "tiles2", 0, tilelayout, 0, 128 ) // Tiles 16x16 + GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0x100, 80 ) // Sprites 16x16 GFXDECODE_END /******************************************************************************/ @@ -261,12 +406,12 @@ void cbuster_state::machine_reset() void cbuster_state::twocrude(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 @ 12MHz Verified */ + // basic machine hardware + M68000(config, m_maincpu, XTAL(24'000'000) / 2); // Custom chip 59 @ 12MHz Verified m_maincpu->set_addrmap(AS_PROGRAM, &cbuster_state::main_map); - m_maincpu->set_vblank_int("screen", FUNC(cbuster_state::irq4_line_assert)); /* VBL */ + m_maincpu->set_vblank_int("screen", FUNC(cbuster_state::irq4_line_assert)); // VBL - H6280(config, m_audiocpu, XTAL(24'000'000)/4); /* Custom chip 45, 6MHz Verified */ + H6280(config, m_audiocpu, XTAL(24'000'000) / 4); // Custom chip 45, 6MHz Verified m_audiocpu->set_addrmap(AS_PROGRAM, &cbuster_state::sound_map); m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused m_audiocpu->set_timer_scale(2); @@ -279,7 +424,7 @@ void cbuster_state::twocrude(machine_config &config) screen.set_screen_update(FUNC(cbuster_state::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_cbuster); - PALETTE(config, m_palette).set_format(4, &cbuster_state::cbuster_XBGR_888, 2048); + PALETTE(config, m_palette).set_format(4, &cbuster_state::xbgr_888, 2048); BUFFERED_SPRITERAM16(config, m_spriteram); @@ -313,236 +458,239 @@ void cbuster_state::twocrude(machine_config &config) m_sprgen->set_gfx_region(3); m_sprgen->set_gfxdecode_tag("gfxdecode"); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); // YM2203_PITCH_HACK - Pitch is too low at 1.3425MHz (see also stfight.cpp) - YM2203(config, "ym1", XTAL(32'220'000)/24 * 3).add_route(ALL_OUTPUTS, "mono", 0.60); /* 1.3425MHz Verified */ + YM2203(config, "ym1", XTAL(32'220'000) / 24 * 3).add_route(ALL_OUTPUTS, "mono", 0.60); // 1.3425MHz Verified - ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); /* 3.58MHz Verified */ - ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ + ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9)); // 3.58MHz Verified + ym2.irq_handler().set_inputline(m_audiocpu, 1); // IRQ2 ym2.add_route(ALL_OUTPUTS, "mono", 0.45); - OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); /* 1.0068MHz Verified */ + OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); // 1.0068MHz Verified - OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* 2.01375MHz Verified */ + OKIM6295(config, "oki2", XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); // 2.01375MHz Verified } /******************************************************************************/ ROM_START( cbuster ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "fx01.7l", 0x00000, 0x20000, CRC(ddae6d83) SHA1(ce3fed1393b71821730fb8d87869a89c8e07c456) ) // Same data exists with label fu01-1 ROM_LOAD16_BYTE( "fx00.4l", 0x00001, 0x20000, CRC(5bc2c0de) SHA1(fa9c357ae4a5c814b7113df3b2f12982077f3e6b) ) // Same data exists with label fu00-1 ROM_LOAD16_BYTE( "fx03.9l", 0x40000, 0x20000, CRC(c3d65bf9) SHA1(99dd650fd4b427bca25a0776fbd6221f93504106) ) ROM_LOAD16_BYTE( "fx02.6l", 0x40001, 0x20000, CRC(b875266b) SHA1(a76f8e061392e17394a3f975584823ad39e0097e) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "fu11-.19h", 0x00000, 0x10000, CRC(65f20f10) SHA1(cf914893edd98a0f39bbf7068a469ed7d34bd90e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) - ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) /* Tiles */ - ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ + ROM_REGION( 0x100000, "tiles1", 0 ) + ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) // Tiles + ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) // Chars ROM_LOAD16_BYTE( "fu06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x080000, "gfx2", 0 ) - ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ + ROM_REGION( 0x080000, "tiles2", 0 ) + ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) - ROM_REGION( 0x140000, "gfx3", 0 ) - ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_REGION( 0x140000, "sprites", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) ROM_LOAD32_BYTE( "fu08-.5a", 0x100001, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) ROM_LOAD32_BYTE( "fu09-.7a", 0x100002, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) ROM_LOAD32_BYTE( "fu10-.8a", 0x100003, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki1", 0 ) // ADPCM samples ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) - ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki2", 0 ) // ADPCM samples ROM_LOAD( "fu13-.21e", 0x00000, 0x20000, CRC(b8525622) SHA1(4a6ec5e3f64256b1383bfbab4167cbd2ec11b5c5) ) ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) /* Priority (not used) */ + ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) // Priority (not used) ROM_END ROM_START( cbusterw ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "fu01-.7l", 0x00000, 0x20000, CRC(0203e0f8) SHA1(7709636429f2cab43caba3422122dba970dfb50b) ) ROM_LOAD16_BYTE( "fu00-.4l", 0x00001, 0x20000, CRC(9c58626d) SHA1(6bc950929391221755972658258937a1ef96c244) ) ROM_LOAD16_BYTE( "fu03-.9l", 0x40000, 0x20000, CRC(def46956) SHA1(e1f71a440430f8f9351ee9e1826ca2d0d5a372f8) ) ROM_LOAD16_BYTE( "fu02-.6l", 0x40001, 0x20000, CRC(649c3338) SHA1(06373b364283706f0b00ab6d014c674e4b9818fa) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "fu11-.19h", 0x00000, 0x10000, CRC(65f20f10) SHA1(cf914893edd98a0f39bbf7068a469ed7d34bd90e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) - ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) /* Tiles */ - ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ + ROM_REGION( 0x100000, "tiles1", 0 ) + ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) // Tiles + ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) // Chars ROM_LOAD16_BYTE( "fu06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x080000, "gfx2", 0 ) - ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ + ROM_REGION( 0x080000, "tiles2", 0 ) + ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) - ROM_REGION( 0x140000, "gfx3", 0 ) - ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_REGION( 0x140000, "sprites", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) ROM_LOAD32_BYTE( "fu08-.5a", 0x100001, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) ROM_LOAD32_BYTE( "fu09-.7a", 0x100002, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) ROM_LOAD32_BYTE( "fu10-.8a", 0x100003, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki1", 0 ) // ADPCM samples ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) - ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki2", 0 ) // ADPCM samples ROM_LOAD( "fu13-.21e", 0x00000, 0x20000, CRC(b8525622) SHA1(4a6ec5e3f64256b1383bfbab4167cbd2ec11b5c5) ) ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) /* Priority (not used) */ + ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) // Priority (not used) ROM_END ROM_START( cbusterj ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "fr01-1.7l", 0x00000, 0x20000, CRC(af3c014f) SHA1(a7724c48f73e52b19f3688a413e2ed013e226c6b) ) ROM_LOAD16_BYTE( "fr00-1.4l", 0x00001, 0x20000, CRC(f666ad52) SHA1(6f7325bc3bb79fd8112df677250c4bae572dfa43) ) ROM_LOAD16_BYTE( "fr03.9l", 0x40000, 0x20000, CRC(02c06118) SHA1(a251f936f80d8a9af033fe6d0d42e1e17ebbbf98) ) ROM_LOAD16_BYTE( "fr02.6l", 0x40001, 0x20000, CRC(b6c34332) SHA1(c1215c72a03b368655e20f4557475a2fc4c46c9e) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "fu11-.19h", 0x00000, 0x10000, CRC(65f20f10) SHA1(cf914893edd98a0f39bbf7068a469ed7d34bd90e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) - ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) /* Tiles */ - /* Note: Revision 01 fixes some Japanese fonts: see characters 0x118a / 0x118b / 0x11f9 (16x16) */ - ROM_LOAD16_BYTE( "fr05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) /* Chars */ + ROM_REGION( 0x100000, "tiles1", 0 ) + ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) // Tiles + // Note: Revision 01 fixes some Japanese fonts: see characters 0x118a / 0x118b / 0x11f9 (16x16) + ROM_LOAD16_BYTE( "fr05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) // Chars ROM_LOAD16_BYTE( "fr06-1.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x080000, "gfx2", 0 ) - ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ + ROM_REGION( 0x080000, "tiles2", 0 ) + ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) - ROM_REGION( 0x140000, "gfx3", 0 ) - ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_REGION( 0x140000, "sprites", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - ROM_LOAD32_BYTE( "fr07.4a", 0x100000, 0x10000, CRC(52c85318) SHA1(74032dac7cb7e7d3028aab4c5f5b0a4e2a7caa03) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fr07.4a", 0x100000, 0x10000, CRC(52c85318) SHA1(74032dac7cb7e7d3028aab4c5f5b0a4e2a7caa03) ) ROM_LOAD32_BYTE( "fr08.5a", 0x100001, 0x10000, CRC(ea25fbac) SHA1(d00dce24e94ffc212ab3880c00fcadb7b2116f01) ) ROM_LOAD32_BYTE( "fr09.7a", 0x100002, 0x10000, CRC(f8363424) SHA1(6a6b143a3474965ef89f75e9d7b15946ae26d0d4) ) ROM_LOAD32_BYTE( "fr10.8a", 0x100003, 0x10000, CRC(241d5760) SHA1(cd216ecf7e88939b91a6e0f02a23c8b875ac24dc) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki1", 0 ) // ADPCM samples ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) - ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki2", 0 ) // ADPCM samples ROM_LOAD( "fu13-.21e", 0x00000, 0x20000, CRC(b8525622) SHA1(4a6ec5e3f64256b1383bfbab4167cbd2ec11b5c5) ) ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) /* Priority (not used) */ + ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) // Priority (not used) ROM_END ROM_START( twocrude ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ft01-1.7l", 0x00000, 0x20000, CRC(7342ffc4) SHA1(dcf611552f0d085f0b552985970f66d1bd6e51e9) ) ROM_LOAD16_BYTE( "ft00-1.4l", 0x00001, 0x20000, CRC(3f5f535f) SHA1(f5d2b12f98bfcc3426dd2596baaaeca775835e6b) ) ROM_LOAD16_BYTE( "ft03.9l", 0x40000, 0x20000, CRC(28002c99) SHA1(6397b05a1a237bb17657bee6c8185f61c60c6a2c) ) ROM_LOAD16_BYTE( "ft02.6l", 0x40001, 0x20000, CRC(37ea0626) SHA1(ec1822eda83829c599cad217b6d5dd34fb970101) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ft11-.19h", 0x00000, 0x10000, CRC(65f20f10) SHA1(cf914893edd98a0f39bbf7068a469ed7d34bd90e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) - ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) /* Tiles */ - /* Note: Revision 01 fixes some Japanese fonts: see characters 0x118a / 0x118b / 0x11f9 (16x16) */ - ROM_LOAD16_BYTE( "ft05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) /* Chars */ + ROM_REGION( 0x100000, "tiles1", 0 ) + ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) // Tiles + // Note: Revision 01 fixes some Japanese fonts: see characters 0x118a / 0x118b / 0x11f9 (16x16) + ROM_LOAD16_BYTE( "ft05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) // Chars ROM_LOAD16_BYTE( "ft06-1.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x080000, "gfx2", 0 ) - ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ + ROM_REGION( 0x080000, "tiles2", 0 ) + ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) // Tiles - ROM_REGION( 0x140000, "gfx3", 0 ) - ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_REGION( 0x140000, "sprites", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) ROM_LOAD32_BYTE( "ft08-.5a", 0x100001, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) ROM_LOAD32_BYTE( "ft09-.7a", 0x100002, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) ROM_LOAD32_BYTE( "ft10-.8a", 0x100003, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki1", 0 ) // ADPCM samples ROM_LOAD( "ft12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) - ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki2", 0 ) // ADPCM samples ROM_LOAD( "ft13-.21e", 0x00000, 0x20000, CRC(b8525622) SHA1(4a6ec5e3f64256b1383bfbab4167cbd2ec11b5c5) ) ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) /* Priority (not used) */ + ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) // Priority (not used) ROM_END ROM_START( twocrudea ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ft01.7l", 0x00000, 0x20000, CRC(08e96489) SHA1(1e75893cc086d6d6b428ca055851b51d0bc367aa) ) ROM_LOAD16_BYTE( "ft00.4l", 0x00001, 0x20000, CRC(6765c445) SHA1(b2bbb86414eafe32ed66f3f8ab095a2bce3a1a4b) ) ROM_LOAD16_BYTE( "ft03.9l", 0x40000, 0x20000, CRC(28002c99) SHA1(6397b05a1a237bb17657bee6c8185f61c60c6a2c) ) ROM_LOAD16_BYTE( "ft02.6l", 0x40001, 0x20000, CRC(37ea0626) SHA1(ec1822eda83829c599cad217b6d5dd34fb970101) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ft11-.19h", 0x00000, 0x10000, CRC(65f20f10) SHA1(cf914893edd98a0f39bbf7068a469ed7d34bd90e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) - ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) /* Tiles */ - ROM_LOAD16_BYTE( "ft05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ + ROM_REGION( 0x100000, "tiles1", 0 ) + ROM_LOAD( "mab-00.4c", 0x00000, 0x80000, CRC(660eaabd) SHA1(e3d614e13fdb9af159d9758a869d9dae3dbe14e0) ) // Tiles + ROM_LOAD16_BYTE( "ft05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) // Chars ROM_LOAD16_BYTE( "ft06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x080000, "gfx2", 0 ) - ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ + ROM_REGION( 0x080000, "tiles2", 0 ) + ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) // Tiles - ROM_REGION( 0x140000, "gfx3", 0 ) - ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_REGION( 0x140000, "sprites", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) ROM_LOAD32_BYTE( "ft08-.5a", 0x100001, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) ROM_LOAD32_BYTE( "ft09-.7a", 0x100002, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) ROM_LOAD32_BYTE( "ft10-.8a", 0x100003, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki1", 0 ) // ADPCM samples ROM_LOAD( "ft12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) - ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki2", 0 ) // ADPCM samples ROM_LOAD( "ft13-.21e", 0x00000, 0x20000, CRC(b8525622) SHA1(4a6ec5e3f64256b1383bfbab4167cbd2ec11b5c5) ) ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) /* Priority (not used) */ + ROM_LOAD( "mb7114h.18e", 0x0000, 0x0100, CRC(3645b70f) SHA1(7d3831867362037892b43efb007e27d3bd5f6488) ) // Priority (not used) ROM_END /******************************************************************************/ void cbuster_state::init_twocrude() { - u8 *RAM = memregion("maincpu")->base(); + u8 *ram = memregion("maincpu")->base(); - /* Main cpu decrypt */ + // Main CPU decrypt for (int i = 0x00000; i < 0x80000; i += 2) { int h = i + NATIVE_ENDIAN_VALUE_LE_BE(1,0), l = i + NATIVE_ENDIAN_VALUE_LE_BE(0,1); - RAM[h] = (RAM[h] & 0xcf) | ((RAM[h] & 0x10) << 1) | ((RAM[h] & 0x20) >> 1); - RAM[h] = (RAM[h] & 0x5f) | ((RAM[h] & 0x20) << 2) | ((RAM[h] & 0x80) >> 2); + ram[h] = (ram[h] & 0xcf) | ((ram[h] & 0x10) << 1) | ((ram[h] & 0x20) >> 1); + ram[h] = (ram[h] & 0x5f) | ((ram[h] & 0x20) << 2) | ((ram[h] & 0x80) >> 2); - RAM[l] = (RAM[l] & 0xbd) | ((RAM[l] & 0x2) << 5) | ((RAM[l] & 0x40) >> 5); - RAM[l] = (RAM[l] & 0xf5) | ((RAM[l] & 0x2) << 2) | ((RAM[l] & 0x8) >> 2); + ram[l] = (ram[l] & 0xbd) | ((ram[l] & 0x2) << 5) | ((ram[l] & 0x40) >> 5); + ram[l] = (ram[l] & 0xf5) | ((ram[l] & 0x2) << 2) | ((ram[l] & 0x8) >> 2); } } +} // anonymous namespace + + /******************************************************************************/ -GAME( 1990, cbuster, 0, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East Corporation", "Crude Buster (World FX version)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, cbusterw, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East Corporation", "Crude Buster (World FU version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, cbuster, 0, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East Corporation", "Crude Buster (World FX version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, cbusterw, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East Corporation", "Crude Buster (World FU version)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, cbusterj, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East Corporation", "Crude Buster (Japan FR revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, twocrude, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East USA", "Two Crude (US FT revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, twocrudea, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East USA", "Two Crude (US FT version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, twocrude, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East USA", "Two Crude (US FT revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, twocrudea, cbuster, twocrude, twocrude, cbuster_state, init_twocrude, ROT0, "Data East USA", "Two Crude (US FT version)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dataeast/cbuster.h b/src/mame/dataeast/cbuster.h deleted file mode 100644 index 3391c35e375..00000000000 --- a/src/mame/dataeast/cbuster.h +++ /dev/null @@ -1,70 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Bryan McPhail -/************************************************************************* - - Crude Buster - -*************************************************************************/ -#ifndef MAME_INCLUDES_CBUSTER_H -#define MAME_INCLUDES_CBUSTER_H - -#pragma once - -#include "machine/gen_latch.h" -#include "cpu/h6280/h6280.h" -#include "video/bufsprite.h" -#include "decospr.h" -#include "deco16ic.h" -#include "emupal.h" - -class cbuster_state : public driver_device -{ -public: - cbuster_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_deco_tilegen(*this, "tilegen%u", 1U) - , m_palette(*this, "palette") - , m_spriteram(*this, "spriteram") - , m_soundlatch(*this, "soundlatch") - , m_sprgen(*this, "spritegen") - , m_pf_rowscroll(*this, "pf%u_rowscroll", 1U) - { } - - void init_twocrude(); - - void twocrude(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - -private: - /* devices */ - required_device m_maincpu; - required_device m_audiocpu; - required_device_array m_deco_tilegen; - required_device m_palette; - required_device m_spriteram; - required_device m_soundlatch; - required_device m_sprgen; - - /* memory pointers */ - required_shared_ptr_array m_pf_rowscroll; - - /* misc */ - u16 m_prot = 0U; - int m_pri = 0; - - void prot_w(offs_t offset, u16 data, u16 mem_mask = ~0); - u16 prot_r(); - u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECO16IC_BANK_CB_MEMBER(bank_callback); - static rgb_t cbuster_XBGR_888(u32 raw); - void main_map(address_map &map); - void sound_map(address_map &map); -}; - -#endif // MAME_INCLUDES_CBUSTER_H diff --git a/src/mame/dataeast/cbuster_v.cpp b/src/mame/dataeast/cbuster_v.cpp deleted file mode 100644 index 0dd30279438..00000000000 --- a/src/mame/dataeast/cbuster_v.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Bryan McPhail -/*************************************************************************** - - Crude Buster Video emulation - Bryan McPhail, mish@tendril.co.uk - -***************************************************************************/ - -#include "emu.h" -#include "cbuster.h" - -/******************************************************************************/ - -/******************************************************************************/ - -void cbuster_state::video_start() -{ - m_sprgen->alloc_sprite_bitmap(); -} - -/* - Crude Buster palette is a little strange compared to other Data East games - of this period. Although the digital palette is 8 bits per channel, the - analog 'white' level is set at 0x8e. In hardware this is done at the - final resistors before the JAMMA connector. It also suggests that if the - game were to use any values above 0x8e (it doesn't) then the final output - voltage would be out of spec. - - I suspect this setup is actually software compensating for a hardware - design problem. -*/ -rgb_t cbuster_state::cbuster_XBGR_888(u32 raw) -{ - int r = (raw >> 0) & 0xff; - int g = (raw >> 8) & 0xff; - int b = (raw >> 16) & 0xff; - - if (r > 0x8e) r = 0x8e; - if (g > 0x8e) g = 0x8e; - if (b > 0x8e) b = 0x8e; - - r = (r * 255) / 0x8e; - g = (g * 255) / 0x8e; - b = (b * 255) / 0x8e; - - return rgb_t(r, g, b); -} - -u32 cbuster_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - const u16 flip = m_deco_tilegen[0]->pf_control_r(0); - - flip_screen_set(!BIT(flip, 7)); - m_sprgen->set_flip_screen(!BIT(flip, 7)); - - m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), 0x400); - - m_deco_tilegen[0]->pf_update(m_pf_rowscroll[0], m_pf_rowscroll[1]); - m_deco_tilegen[1]->pf_update(m_pf_rowscroll[2], m_pf_rowscroll[3]); - - /* Draw playfields & sprites */ - m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0800, 0x0900, 0x100, 0x0ff); - m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0900, 0x0900, 0x500, 0x0ff); - - if (m_pri) - { - m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); - m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); - } - else - { - m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); - m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); - } - - m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0000, 0x0900, 0x100, 0x0ff); - m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0100, 0x0900, 0x500, 0x0ff); - m_deco_tilegen[0]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); - return 0; -} diff --git a/src/mame/dataeast/metlclsh.cpp b/src/mame/dataeast/metlclsh.cpp index 749e209cc75..3d3e0ecdada 100644 --- a/src/mame/dataeast/metlclsh.cpp +++ b/src/mame/dataeast/metlclsh.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Luca Elia +// copyright-holders: Luca Elia + /*************************************************************************** -= Metal Clash =- @@ -19,7 +20,7 @@ Year + Game Boards Notes: -- Similar hardware to that in brkthru.c +- Similar hardware to that in dataeast/brkthru.cpp - Screenshots here: www.ne.jp/asahi/cc-sakura/akkun/bekkan/metal.html To Do: @@ -28,20 +29,346 @@ metlclsh: - Clocks are all unknown - Text on the title screen has wrong colors the first time around (uninitialized foreground palette 1, will be initialized shortly) -- The background tilemap ram is bankswitched with other (not understood) ram +- The background tilemap RAM is bankswitched with other (not understood) RAM - There are a few unknown writes ***************************************************************************/ #include "emu.h" -#include "metlclsh.h" #include "cpu/m6809/m6809.h" -#include "sound/ymopn.h" #include "sound/ymopl.h" +#include "sound/ymopn.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +// configurable logging +#define LOG_SCROLLX (1U << 1) + +//#define VERBOSE (LOG_GENERAL | LOG_SCROLLX) +#include "logmacro.h" + +#define LOGSCROLLX(...) LOGMASKED(LOG_SCROLLX, __VA_ARGS__) + + +namespace { + +class metlclsh_state : public driver_device +{ +public: + metlclsh_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_fgram(*this, "fgram"), + m_spriteram(*this, "spriteram"), + m_bgram(*this, "bgram"), + m_scrollx(*this, "scrollx"), + m_rambank(*this, "rambank"), + m_otherram(*this, "otherram", 0x800, ENDIANNESS_BIG), // banked RAM + m_maincpu(*this, "maincpu"), + m_subcpu(*this, "sub"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette") { } + + void metlclsh(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: + // memory pointers + required_shared_ptr m_fgram; + required_shared_ptr m_spriteram; + required_shared_ptr m_bgram; + required_shared_ptr m_scrollx; + required_memory_bank m_rambank; + memory_share_creator m_otherram; + + // video-related + tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_fg_tilemap = nullptr; + uint8_t m_write_mask = 0; + uint8_t m_gfxbank = 0; + + // devices + required_device m_maincpu; + required_device m_subcpu; + required_device m_gfxdecode; + required_device m_palette; + + void cause_irq(uint8_t data); + void ack_nmi(uint8_t data); + void cause_nmi2(uint8_t data); + void ack_irq2(uint8_t data); + void ack_nmi2(uint8_t data); + void flipscreen_w(uint8_t data); + void rambank_w(uint8_t data); + void gfxbank_w(uint8_t data); + void bgram_w(offs_t offset, uint8_t data); + void fgram_w(offs_t offset, uint8_t data); + TILEMAP_MAPPER_MEMBER(bgtilemap_scan); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void master_map(address_map &map); + void slave_map(address_map &map); +}; + + +// video + +/*************************************************************************** + + -= Metal Clash =- + + Sprites: + 16x16 tiles with 8 pens and 2 color codes, + each sprite can be 1 or 2 tiles tall + + Background: + size is 512x256 (scrolling, peculiar memory layout), + 16x16 tiles with 8 pens and no color code, + 1 byte per tile (tiles are banked) + + Foreground: + size is 256x256 (no scrolling), + 8x8 tiles with 4 pens and 4 color codes, + 2 bytes per tile, low and high per tile priority + +***************************************************************************/ + + +void metlclsh_state::rambank_w(uint8_t data) +{ + m_rambank->set_entry(data & 1); + if (data & 1) + m_write_mask = 0; + else + m_write_mask = 1 << (data >> 1); +} + +void metlclsh_state::gfxbank_w(uint8_t data) +{ + if (!(data & 4) && (m_gfxbank != data)) + { + m_bg_tilemap->mark_all_dirty(); + m_gfxbank = data & 3; + } +} + +/*************************************************************************** + + Background tilemap + + memory offset of each tile of the tilemap: + + 00 08 .. 78 100 108 .. 178 + . . . . . . + . . . . . . + 07 0f .. 7f 107 10f .. 17f + 80 88 .. f8 180 188 .. 1f8 + . . . . . . + . . . . . . + 87 8f .. ff 187 18f .. 1ff + +***************************************************************************/ + +TILEMAP_MAPPER_MEMBER(metlclsh_state::bgtilemap_scan) +{ + return (row & 7) + ((row & ~7) << 4) + ((col & 0xf) << 3) + ((col & ~0xf) << 4); +} + +TILE_GET_INFO_MEMBER(metlclsh_state::get_bg_tile_info) +{ + tileinfo.set(1, m_bgram[tile_index] + (m_gfxbank << 7), 0, 0); +} + +void metlclsh_state::bgram_w(offs_t offset, uint8_t data) +{ + /* This RAM is banked: it's either the tilemap (e401 = 1) + or bit n of another area (e401 = n << 1)? (that I don't understand) */ + if (m_write_mask) + { + // unknown area - the following is almost surely wrong + // 405b (e401 = e c a 8 6 4 2 0) writes d400++ + // 4085 (e401 = e c a 8 6 4 2 0) writes d400++ + // 4085 (e401 = e a 6 2) writes d000++ + // 405b (e401 = e a 6 2) writes d000++ + +// m_otherram[offset] |= (data & m_write_mask); + m_otherram[offset] = (m_otherram[offset] & ~m_write_mask) | (data & m_write_mask); + } + else + { + // tilemap + m_bgram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset & 0x1ff); + } +} + +/*************************************************************************** + + Foreground tilemap + + Offset: Bits: Value: + + 0x000 Code + 0x400 7--- ---- Priority (0/1 -> over/below sprites and background) + -65- ---- Color + ---- --10 Code + +***************************************************************************/ + +TILE_GET_INFO_MEMBER(metlclsh_state::get_fg_tile_info) +{ + uint8_t const code = m_fgram[tile_index + 0x000]; + uint8_t const attr = m_fgram[tile_index + 0x400]; + tileinfo.set(2, code + ((attr & 0x03) << 8), (attr >> 5) & 3, 0); + tileinfo.category = ((attr & 0x80) ? 1 : 2); +} + +void metlclsh_state::fgram_w(offs_t offset, uint8_t data) +{ + m_fgram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset & 0x3ff); +} + + +/*************************************************************************** + + Video Hardware Init + +***************************************************************************/ + +void metlclsh_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(metlclsh_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(metlclsh_state::bgtilemap_scan)), 16, 16, 32, 16); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(metlclsh_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + + m_bg_tilemap->set_transparent_pen(0); + m_fg_tilemap->set_transparent_pen(0); + + m_rambank->configure_entry(0, m_otherram); + m_rambank->configure_entry(1, m_bgram.target()); + m_rambank->set_entry(0); +} + + +/*************************************************************************** + + Sprites Drawing + + Offset: Bits: Value: + + 0 7--- ---- 0 + -65- ---- Code (high bits) + ---4 ---- Double height (2 tiles) + ---- 3--- Color + ---- -2-- Flip X + ---- --1- Flip Y + ---- ---0 Enable + + 1 Code (low bits) + 2 Y (bottom -> top) + 3 X (right -> left) + +***************************************************************************/ + +void metlclsh_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + gfx_element *gfx = m_gfxdecode->gfx(0); + + for (int offs = 0; offs < m_spriteram.bytes(); offs += 4) + { + int const attr = m_spriteram[offs]; + if (!(attr & 0x01)) + continue; // enable + + int flipy = (attr & 0x02); + int flipx = (attr & 0x04); + int const color = (attr & 0x08) >> 3; + int const sizey = (attr & 0x10); // double height + int const code = ((attr & 0x60) << 3) + m_spriteram[offs + 1]; + + int sx = 240 - m_spriteram[offs + 3]; + if (sx < -7) + sx += 256; + + int sy = 240 - m_spriteram[offs + 2]; + + if (flip_screen()) + { + sx = 240 - sx; flipx = !flipx; + sy = 240 - sy; flipy = !flipy; + if (sizey) sy += 16; + if (sy > 240) sy -= 256; + } + + // Draw twice, at sy and sy + 256 (wrap around) + for (int wrapy = 0; wrapy <= 256; wrapy += 256) + { + if (sizey) + { + gfx->transpen(bitmap, cliprect, code & ~1, color, flipx, flipy, + sx, sy + (flipy ? 0 : -16) + wrapy, 0); + + gfx->transpen(bitmap, cliprect, code | 1, color, flipx, flipy, + sx, sy + (flipy ? -16 : 0) + wrapy, 0); + } + else + { + gfx->transpen(bitmap, cliprect, code, color, flipx, flipy, + sx, sy + wrapy, 0); + } + } + } +} + +/*************************************************************************** + + Screen Drawing + + Video register e402 (metlclsh seems to only use the values 0,8,9,b): + + 7654 ---- 0 + ---- 3--- Background enable + ---- -2-- 0 + ---- --1- Background scroll x high bit + ---- ---0 ? (not bg flipx!) + +***************************************************************************/ + +uint32_t metlclsh_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(0x10, cliprect); + + m_fg_tilemap->draw(screen, bitmap, cliprect, 1, 0); // low priority tiles of foreground + + if (m_scrollx[0] & 0x08) // background (if enabled) + { + // The background seems to be always flipped along x + m_bg_tilemap->set_flip((flip_screen() ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0) ^ TILEMAP_FLIPX); + m_bg_tilemap->set_scrollx(0, m_scrollx[1] + ((m_scrollx[0] & 0x02) << 7)); + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + } + draw_sprites(bitmap, cliprect); // sprites + m_fg_tilemap->draw(screen, bitmap, cliprect, 2, 0); // high priority tiles of foreground + + LOGSCROLLX("%02x", m_scrollx[0]); + return 0; +} + + +// machine /*************************************************************************** @@ -49,35 +376,35 @@ metlclsh: ***************************************************************************/ -void metlclsh_state::metlclsh_cause_irq(uint8_t data) +void metlclsh_state::cause_irq(uint8_t data) { m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); } -void metlclsh_state::metlclsh_ack_nmi(uint8_t data) +void metlclsh_state::ack_nmi(uint8_t data) { m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -void metlclsh_state::metlclsh_master_map(address_map &map) +void metlclsh_state::master_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram().share("share1"); + map(0x8000, 0x9fff).ram().share("shared"); map(0xa000, 0xbfff).rom(); map(0xc000, 0xc000).portr("IN0"); map(0xc001, 0xc001).portr("IN1"); map(0xc002, 0xc002).portr("IN2"); map(0xc003, 0xc003).portr("DSW"); - map(0xc080, 0xc080).nopw(); // ? 0 - map(0xc0c2, 0xc0c2).w(FUNC(metlclsh_state::metlclsh_cause_irq)); // cause irq on cpu #2 - map(0xc0c3, 0xc0c3).w(FUNC(metlclsh_state::metlclsh_ack_nmi)); // nmi ack -/**/map(0xc800, 0xc82f).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); -/**/map(0xcc00, 0xcc2f).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); + map(0xc080, 0xc080).nopw(); // ? 0 + map(0xc0c2, 0xc0c2).w(FUNC(metlclsh_state::cause_irq)); // cause irq on cpu #2 + map(0xc0c3, 0xc0c3).w(FUNC(metlclsh_state::ack_nmi)); + map(0xc800, 0xc82f).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); + map(0xcc00, 0xcc2f).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); map(0xd000, 0xd001).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); -/**/map(0xd800, 0xdfff).ram().w(FUNC(metlclsh_state::metlclsh_fgram_w)).share("fgram"); + map(0xd800, 0xdfff).ram().w(FUNC(metlclsh_state::fgram_w)).share(m_fgram); map(0xe000, 0xe001).w("ym2", FUNC(ym3526_device::write)); - map(0xe800, 0xe9ff).ram().share("spriteram"); - map(0xfff0, 0xffff).rom(); // Reset/IRQ vectors + map(0xe800, 0xe9ff).ram().share(m_spriteram); + map(0xfff0, 0xffff).rom(); // Reset/IRQ vectors } @@ -87,44 +414,44 @@ void metlclsh_state::metlclsh_master_map(address_map &map) ***************************************************************************/ -void metlclsh_state::metlclsh_cause_nmi2(uint8_t data) +void metlclsh_state::cause_nmi2(uint8_t data) { m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } -void metlclsh_state::metlclsh_ack_irq2(uint8_t data) +void metlclsh_state::ack_irq2(uint8_t data) { m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void metlclsh_state::metlclsh_ack_nmi2(uint8_t data) +void metlclsh_state::ack_nmi2(uint8_t data) { m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -void metlclsh_state::metlclsh_flipscreen_w(uint8_t data) +void metlclsh_state::flipscreen_w(uint8_t data) { flip_screen_set(data & 1); } -void metlclsh_state::metlclsh_slave_map(address_map &map) +void metlclsh_state::slave_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram().share("share1"); - map(0xc000, 0xc000).portr("IN0").w(FUNC(metlclsh_state::metlclsh_gfxbank_w)); // bg tiles bank + map(0x8000, 0x9fff).ram().share("shared"); + map(0xc000, 0xc000).portr("IN0").w(FUNC(metlclsh_state::gfxbank_w)); // bg tiles bank map(0xc001, 0xc001).portr("IN1"); map(0xc002, 0xc002).portr("IN2"); map(0xc003, 0xc003).portr("DSW"); - map(0xc0c0, 0xc0c0).w(FUNC(metlclsh_state::metlclsh_cause_nmi2)); // cause nmi on cpu #1 - map(0xc0c1, 0xc0c1).w(FUNC(metlclsh_state::metlclsh_ack_irq2)); // irq ack - map(0xd000, 0xd7ff).bankr("rambank").w(FUNC(metlclsh_state::metlclsh_bgram_w)).share("bgram"); // this is banked - map(0xe301, 0xe301).w(FUNC(metlclsh_state::metlclsh_flipscreen_w)); // 0/1 - map(0xe401, 0xe401).w(FUNC(metlclsh_state::metlclsh_rambank_w)); - map(0xe402, 0xe403).writeonly().share("scrollx"); -// map(0xe404, 0xe404).nopw(); // ? 0 -// map(0xe410, 0xe410).nopw(); // ? 0 on startup only - map(0xe417, 0xe417).w(FUNC(metlclsh_state::metlclsh_ack_nmi2)); // nmi ack - map(0xfff0, 0xffff).rom(); // Reset/IRQ vectors + map(0xc0c0, 0xc0c0).w(FUNC(metlclsh_state::cause_nmi2)); // cause nmi on cpu #1 + map(0xc0c1, 0xc0c1).w(FUNC(metlclsh_state::ack_irq2)); + map(0xd000, 0xd7ff).bankr("rambank").w(FUNC(metlclsh_state::bgram_w)).share(m_bgram); // this is banked + map(0xe301, 0xe301).w(FUNC(metlclsh_state::flipscreen_w)); + map(0xe401, 0xe401).w(FUNC(metlclsh_state::rambank_w)); + map(0xe402, 0xe403).writeonly().share(m_scrollx); +// map(0xe404, 0xe404).nopw(); // ? 0 +// map(0xe410, 0xe410).nopw(); // ? 0 on startup only + map(0xe417, 0xe417).w(FUNC(metlclsh_state::ack_nmi2)); + map(0xfff0, 0xffff).rom(); // Reset/IRQ vectors } @@ -142,7 +469,7 @@ INPUT_CHANGED_MEMBER(metlclsh_state::coin_inserted) } static INPUT_PORTS_START( metlclsh ) - PORT_START("IN0") /* c000 */ + PORT_START("IN0") // c000 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) @@ -167,7 +494,7 @@ static INPUT_PORTS_START( metlclsh ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("IN1") /* c001 */ + PORT_START("IN1") // c001 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) @@ -177,17 +504,17 @@ static INPUT_PORTS_START( metlclsh ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) - PORT_START("IN2") /* c002 */ + PORT_START("IN2") // c002 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state,coin_inserted, 0) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state,coin_inserted, 0) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state, coin_inserted, 0) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state, coin_inserted, 0) - PORT_START("DSW") /* c003 */ + PORT_START("DSW") // c003 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0x01, "3" ) @@ -204,7 +531,7 @@ static INPUT_PORTS_START( metlclsh ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // cpu2 will clr c040 on startup forever - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state,coin_inserted, 0) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, metlclsh_state, coin_inserted, 0) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") INPUT_PORTS_END @@ -249,9 +576,9 @@ static const gfx_layout tilelayout8 = }; static GFXDECODE_START( gfx_metlclsh ) - GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0x00, 2 ) // [0] Sprites - GFXDECODE_ENTRY( "gfx2", 0, tilelayout16, 0x10, 1 ) // [1] Background - GFXDECODE_ENTRY( "gfx3", 0, tilelayout8, 0x20, 4 ) // [2] Foreground + GFXDECODE_ENTRY( "sprites", 0, spritelayout, 0x00, 2 ) + GFXDECODE_ENTRY( "bgtiles", 0, tilelayout16, 0x10, 1 ) + GFXDECODE_ENTRY( "fgtiles", 0, tilelayout8, 0x20, 4 ) GFXDECODE_END @@ -277,37 +604,37 @@ void metlclsh_state::machine_reset() void metlclsh_state::metlclsh(machine_config &config) { - /* basic machine hardware */ - M6809(config, m_maincpu, 1500000); // ? - m_maincpu->set_addrmap(AS_PROGRAM, &metlclsh_state::metlclsh_master_map); + // basic machine hardware + M6809(config, m_maincpu, 1'500'000); // ? + m_maincpu->set_addrmap(AS_PROGRAM, &metlclsh_state::master_map); // IRQ by YM3526, NMI by CPU #2 - M6809(config, m_subcpu, 1500000); // ? - m_subcpu->set_addrmap(AS_PROGRAM, &metlclsh_state::metlclsh_slave_map); + M6809(config, m_subcpu, 1'500'000); // ? + m_subcpu->set_addrmap(AS_PROGRAM, &metlclsh_state::slave_map); // IRQ by CPU #1, NMI by coin insertion - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ // we're using PORT_VBLANK + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate. We're using PORT_VBLANK screen.set_size(32*8, 32*8); screen.set_visarea(0*8, 32*8-1, 1*8, 30*8-1); - screen.set_screen_update(FUNC(metlclsh_state::screen_update_metlclsh)); + screen.set_screen_update(FUNC(metlclsh_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_metlclsh); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 3 * 16); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); ym1.add_route(0, "mono", 0.10); ym1.add_route(1, "mono", 0.10); ym1.add_route(2, "mono", 0.10); ym1.add_route(3, "mono", 0.50); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); + ym3526_device &ym2(YM3526(config, "ym2", 3'000'000)); ym2.irq_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); ym2.add_route(ALL_OUTPUTS, "mono", 0.50); } @@ -385,12 +712,12 @@ ROM_START( metlclsh ) ROM_LOAD( "cs03.bin", 0x00000, 0x8000, CRC(51c4720c) SHA1(7fd93bdcf029e7d2509b73b32f61fddf85f3453f) ) ROM_COPY( "sub", 0x7ff0, 0xfff0, 0x10 ) - ROM_REGION( 0x18000, "gfx1", 0 ) // Sprites + ROM_REGION( 0x18000, "sprites", 0 ) ROM_LOAD( "cs06.bin", 0x00000, 0x8000, CRC(9f61403f) SHA1(0ebb1cb9d4983746b6b32ec948e7b9efd90783d1) ) ROM_LOAD( "cs07.bin", 0x08000, 0x8000, CRC(d0610ea5) SHA1(3dfa16cbe93a4c08993111f78a8dd22c874fdd28) ) ROM_LOAD( "cs08.bin", 0x10000, 0x8000, CRC(a8b02125) SHA1(145a22b2910b2fbfb28925f58968ee2bdeae1dda) ) - ROM_REGION( 0x10000, "gfx2", 0 ) // Background + ROM_REGION( 0x10000, "bgtiles", 0 ) ROM_LOAD( "cs01.bin", 0x00000, 0x1000, CRC(9c72343d) SHA1(c5618be7874ab6c930b0e68935c93f1958a1916d) ) ROM_CONTINUE( 0x04000, 0x1000 ) ROM_CONTINUE( 0x08000, 0x1000 ) @@ -408,7 +735,7 @@ ROM_START( metlclsh ) ROM_CONTINUE( 0x0b000, 0x1000 ) ROM_CONTINUE( 0x0f000, 0x1000 ) - ROM_REGION( 0x04000, "gfx3", 0 ) // Foreground + ROM_REGION( 0x04000, "fgtiles", 0 ) ROM_LOAD( "cs05.bin", 0x00000, 0x4000, CRC(f90c9c6b) SHA1(ca8e497e9c388078343dd1303beef6ee38748d6a) ) ROM_CONTINUE( 0x00000, 0x4000 ) // first half is empty @@ -416,4 +743,7 @@ ROM_START( metlclsh ) ROM_LOAD( "82s123.prm", 0x0000, 0x20, CRC(6844cc88) SHA1(89d23367aa6ff541205416e82781fe938dfeeb52) ) ROM_END +} // anonymous namespace + + GAME( 1985, metlclsh, 0, metlclsh, metlclsh, metlclsh_state, empty_init, ROT0, "Data East", "Metal Clash (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dataeast/metlclsh.h b/src/mame/dataeast/metlclsh.h deleted file mode 100644 index b4b2fa195a3..00000000000 --- a/src/mame/dataeast/metlclsh.h +++ /dev/null @@ -1,72 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia -/************************************************************************* - - Metal Clash - -*************************************************************************/ - -#include "emupal.h" -#include "tilemap.h" - -class metlclsh_state : public driver_device -{ -public: - metlclsh_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_fgram(*this, "fgram"), - m_spriteram(*this, "spriteram"), - m_bgram(*this, "bgram"), - m_scrollx(*this, "scrollx"), - m_rambank(*this, "rambank"), - m_maincpu(*this, "maincpu"), - m_subcpu(*this, "sub"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } - - void metlclsh(machine_config &config); - - DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); - -private: - /* memory pointers */ - required_shared_ptr m_fgram; - required_shared_ptr m_spriteram; - required_shared_ptr m_bgram; - required_shared_ptr m_scrollx; - required_memory_bank m_rambank; - std::unique_ptr m_otherram; - - /* video-related */ - tilemap_t *m_bg_tilemap = nullptr; - tilemap_t *m_fg_tilemap = nullptr; - uint8_t m_write_mask = 0; - uint8_t m_gfxbank = 0; - - /* devices */ - required_device m_maincpu; - required_device m_subcpu; - required_device m_gfxdecode; - required_device m_palette; - - void metlclsh_cause_irq(uint8_t data); - void metlclsh_ack_nmi(uint8_t data); - void metlclsh_cause_nmi2(uint8_t data); - void metlclsh_ack_irq2(uint8_t data); - void metlclsh_ack_nmi2(uint8_t data); - void metlclsh_flipscreen_w(uint8_t data); - void metlclsh_rambank_w(uint8_t data); - void metlclsh_gfxbank_w(uint8_t data); - void metlclsh_bgram_w(offs_t offset, uint8_t data); - void metlclsh_fgram_w(offs_t offset, uint8_t data); - TILEMAP_MAPPER_MEMBER(metlclsh_bgtilemap_scan); - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_metlclsh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void metlclsh_master_map(address_map &map); - void metlclsh_slave_map(address_map &map); -}; diff --git a/src/mame/dataeast/metlclsh_v.cpp b/src/mame/dataeast/metlclsh_v.cpp deleted file mode 100644 index 523e5fbd44b..00000000000 --- a/src/mame/dataeast/metlclsh_v.cpp +++ /dev/null @@ -1,252 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia -/*************************************************************************** - - -= Metal Clash =- - - Sprites: - 16x16 tiles with 8 pens and 2 color codes, - each sprite can be 1 or 2 tiles tall - - Background: - size is 512x256 (scrolling, peculiar memory layout), - 16x16 tiles with 8 pens and no color code, - 1 byte per tile (tiles are banked) - - Foreground: - size is 256x256 (no scrolling), - 8x8 tiles with 4 pens and 4 color codes, - 2 bytes per tile, low and high per tile priority - -***************************************************************************/ - -#include "emu.h" -#include "metlclsh.h" - - -void metlclsh_state::metlclsh_rambank_w(uint8_t data) -{ - m_rambank->set_entry(data & 1); - if (data & 1) - m_write_mask = 0; - else - m_write_mask = 1 << (data >> 1); -} - -void metlclsh_state::metlclsh_gfxbank_w(uint8_t data) -{ - if (!(data & 4) && (m_gfxbank != data)) - { - m_bg_tilemap->mark_all_dirty(); - m_gfxbank = data & 3; - } -} - -/*************************************************************************** - - Background tilemap - - memory offset of each tile of the tilemap: - - 00 08 .. 78 100 108 .. 178 - . . . . . . - . . . . . . - 07 0f .. 7f 107 10f .. 17f - 80 88 .. f8 180 188 .. 1f8 - . . . . . . - . . . . . . - 87 8f .. ff 187 18f .. 1ff - -***************************************************************************/ - -TILEMAP_MAPPER_MEMBER(metlclsh_state::metlclsh_bgtilemap_scan) -{ - return (row & 7) + ((row & ~7) << 4) + ((col & 0xf) << 3) + ((col & ~0xf) << 4); -} - -TILE_GET_INFO_MEMBER(metlclsh_state::get_bg_tile_info) -{ - tileinfo.set(1, m_bgram[tile_index] + (m_gfxbank << 7), 0, 0); -} - -void metlclsh_state::metlclsh_bgram_w(offs_t offset, uint8_t data) -{ - /* This ram is banked: it's either the tilemap (e401 = 1) - or bit n of another area (e401 = n << 1)? (that I don't understand) */ - if (m_write_mask) - { - /* unknown area - the following is almost surely wrong */ -// 405b (e401 = e c a 8 6 4 2 0) writes d400++ -// 4085 (e401 = e c a 8 6 4 2 0) writes d400++ -// 4085 (e401 = e a 6 2) writes d000++ -// 405b (e401 = e a 6 2) writes d000++ - -// m_otherram[offset] |= (data & m_write_mask); - m_otherram[offset] = (m_otherram[offset] & ~m_write_mask) | (data & m_write_mask); - } - else - { - /* tilemap */ - m_bgram[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset & 0x1ff); - } -} - -/*************************************************************************** - - Foreground tilemap - - Offset: Bits: Value: - - 0x000 Code - 0x400 7--- ---- Priority (0/1 -> over/below sprites and background) - -65- ---- Color - ---- --10 Code - -***************************************************************************/ - -TILE_GET_INFO_MEMBER(metlclsh_state::get_fg_tile_info) -{ - uint8_t code = m_fgram[tile_index + 0x000]; - uint8_t attr = m_fgram[tile_index + 0x400]; - tileinfo.set(2, code + ((attr & 0x03) << 8), (attr >> 5) & 3, 0); - tileinfo.category = ((attr & 0x80) ? 1 : 2); -} - -void metlclsh_state::metlclsh_fgram_w(offs_t offset, uint8_t data) -{ - m_fgram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset & 0x3ff); -} - - -/*************************************************************************** - - Video Hardware Init - -***************************************************************************/ - -void metlclsh_state::video_start() -{ - m_otherram = std::make_unique(0x800); // banked ram - - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(metlclsh_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(metlclsh_state::metlclsh_bgtilemap_scan)), 16, 16, 32, 16); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(metlclsh_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - - m_bg_tilemap->set_transparent_pen(0); - m_fg_tilemap->set_transparent_pen(0); - - m_rambank->configure_entry(0, m_otherram.get()); - m_rambank->configure_entry(1, m_bgram.target()); - m_rambank->set_entry(0); - - save_pointer(NAME(m_otherram), 0x800); -} - - -/*************************************************************************** - - Sprites Drawing - - Offset: Bits: Value: - - 0 7--- ---- 0 - -65- ---- Code (high bits) - ---4 ---- Double height (2 tiles) - ---- 3--- Color - ---- -2-- Flip X - ---- --1- Flip Y - ---- ---0 Enable - - 1 Code (low bits) - 2 Y (bottom -> top) - 3 X (right -> left) - -***************************************************************************/ - -void metlclsh_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ - uint8_t *spriteram = m_spriteram; - gfx_element *gfx = m_gfxdecode->gfx(0); - int offs; - - for (offs = 0; offs < m_spriteram.bytes(); offs += 4) - { - int attr, code, color, sx, sy, flipx, flipy, wrapy, sizey; - - attr = spriteram[offs]; - if (!(attr & 0x01)) - continue; // enable - - flipy = (attr & 0x02); - flipx = (attr & 0x04); - color = (attr & 0x08) >> 3; - sizey = (attr & 0x10); // double height - code = ((attr & 0x60) << 3) + spriteram[offs + 1]; - - sx = 240 - spriteram[offs + 3]; - if (sx < -7) - sx += 256; - - sy = 240 - spriteram[offs + 2]; - - if (flip_screen()) - { - sx = 240 - sx; flipx = !flipx; - sy = 240 - sy; flipy = !flipy; if (sizey) sy += 16; - if (sy > 240) sy -= 256; - } - - /* Draw twice, at sy and sy + 256 (wrap around) */ - for (wrapy = 0; wrapy <= 256; wrapy += 256) - { - if (sizey) - { - gfx->transpen(bitmap,cliprect, code & ~1, color, flipx,flipy, - sx, sy + (flipy ? 0 : -16) + wrapy,0); - - gfx->transpen(bitmap,cliprect, code | 1, color, flipx,flipy, - sx,sy + (flipy ? -16 : 0) + wrapy,0); - } - else - { - gfx->transpen(bitmap,cliprect, code, color, flipx,flipy, - sx,sy + wrapy,0); - } - } - } -} - -/*************************************************************************** - - Screen Drawing - - Video register e402 (metlclsh seems to only use the values 0,8,9,b): - - 7654 ---- 0 - ---- 3--- Background enable - ---- -2-- 0 - ---- --1- Background scroll x high bit - ---- ---0 ? (not bg flipx!) - -***************************************************************************/ - -uint32_t metlclsh_state::screen_update_metlclsh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(0x10, cliprect); - - m_fg_tilemap->draw(screen, bitmap, cliprect, 1, 0); // low priority tiles of foreground - - if (m_scrollx[0] & 0x08) // background (if enabled) - { - /* The background seems to be always flipped along x */ - m_bg_tilemap->set_flip((flip_screen() ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0) ^ TILEMAP_FLIPX); - m_bg_tilemap->set_scrollx(0, m_scrollx[1] + ((m_scrollx[0] & 0x02) << 7) ); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - } - draw_sprites(bitmap, cliprect); // sprites - m_fg_tilemap->draw(screen, bitmap, cliprect, 2, 0); // high priority tiles of foreground - -// popmessage("%02X", m_scrollx[0]); - return 0; -} diff --git a/src/mame/konami/konamigs.cpp b/src/mame/konami/konamigs.cpp index 8ba75464563..783adaf93ed 100644 --- a/src/mame/konami/konamigs.cpp +++ b/src/mame/konami/konamigs.cpp @@ -20,7 +20,6 @@ *Muscle Ranking Spray Hitter Muscle Ranking Struck Out Neratte Don Don - Pikkari Chance *Run Run Puppy / らんらんぱぴぃ Soreike! Hanapuu diff --git a/src/mame/konami/konmedal68k.cpp b/src/mame/konami/konmedal68k.cpp index 3d50a977ae4..217fe15ba5d 100644 --- a/src/mame/konami/konmedal68k.cpp +++ b/src/mame/konami/konmedal68k.cpp @@ -456,6 +456,18 @@ static INPUT_PORTS_START( spcpokan ) PORT_DIPSETTING( 0x3000, "18 sec" ) INPUT_PORTS_END +static INPUT_PORTS_START( pikkaric ) + PORT_INCLUDE( kzaurus ) + + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x1000, 0x1000, "Chance Game" ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, "Play Timer" ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x0000, "15" ) + PORT_DIPSETTING( 0x2000, "20" ) +INPUT_PORTS_END + static INPUT_PORTS_START( crossmg2 ) PORT_START("IN0") PORT_DIPNAME( 0x0001, 0x0001, "IN0") @@ -880,7 +892,7 @@ GAME( 1998, kattobas, 0, koropens, kattobas, konmedal68k_state, empty_init, ROT0 GAME( 1999, pwrchanc, 0, pwrchanc, kzaurus, konmedal68k_state, empty_init, ROT0, "Konami", "Powerful Chance", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1999, ymcapsul, 0, kzaurus, kzaurus, konmedal68k_state, empty_init, ROT0, "Konami", "Yu-Gi-Oh Monster Capsule", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1999, spcpokan, 0, spcpokan, spcpokan, konmedal68k_state, empty_init, ROT0, "Konami", "Space Pokan", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS) -GAME( 2000, pikkaric, 0, kzaurus, kzaurus, konmedal68k_state, empty_init, ROT0, "Konami", "Pikkari Chance", MACHINE_IMPERFECT_GRAPHICS) +GAME( 2000, pikkaric, 0, kzaurus, pikkaric, konmedal68k_state, empty_init, ROT0, "Konami", "Pikkari Chance", MACHINE_IMPERFECT_GRAPHICS) // Higher resolution display. These are Pachinko / Pachislot machines, will require simulation of mechanical parts / ball sensors. GAME( 1996, crossmg2, 0, slot, crossmg2, konmedal68k_slot_state, empty_init, ROT0, "Konami", "Cross Magic Mark 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_MECHANICAL ) diff --git a/src/mame/misc/majorpkr.cpp b/src/mame/misc/majorpkr.cpp index 722de92b061..46b4c06dcbe 100644 --- a/src/mame/misc/majorpkr.cpp +++ b/src/mame/misc/majorpkr.cpp @@ -775,6 +775,8 @@ void majorpkr_state::machine_start() uint8_t *rom = memregion("maincpu")->base(); m_rom_bank->configure_entries(0, 4, &rom[0xe000], 0x800); + + save_item(NAME(m_mux_data)); } /************************* @@ -1204,9 +1206,9 @@ ROM_END * Game Drivers * *************************/ -// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT -GAMEL( 1994, majorpkr, 0, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System", "Major Poker (set 1, v2.0)", 0, layout_majorpkr ) -GAMEL( 1994, majorpkra, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 2, Micro Manufacturing intro)", 0, layout_majorpkr ) -GAMEL( 1994, majorpkrb, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 3, Micro Manufacturing intro)", 0, layout_majorpkr ) -GAMEL( 1994, majorpkrc, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 4, Micro Manufacturing intro)", 0, layout_majorpkr ) -GAMEL( 1994, luckypkr, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "bootleg", "Lucky Poker (bootleg/hack of Major Poker)", 0, layout_majorpkr ) +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAMEL( 1994, majorpkr, 0, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System", "Major Poker (set 1, v2.0)", MACHINE_SUPPORTS_SAVE, layout_majorpkr ) +GAMEL( 1994, majorpkra, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 2, Micro Manufacturing intro)", MACHINE_SUPPORTS_SAVE, layout_majorpkr ) +GAMEL( 1994, majorpkrb, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 3, Micro Manufacturing intro)", MACHINE_SUPPORTS_SAVE, layout_majorpkr ) +GAMEL( 1994, majorpkrc, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 4, Micro Manufacturing intro)", MACHINE_SUPPORTS_SAVE, layout_majorpkr ) +GAMEL( 1994, luckypkr, majorpkr, majorpkr, majorpkr, majorpkr_state, empty_init, ROT0, "bootleg", "Lucky Poker (bootleg/hack of Major Poker)", MACHINE_SUPPORTS_SAVE, layout_majorpkr ) -- cgit v1.2.3