From 21e2da218c3f6dd90087a4deac9e0445edb22a70 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 11 Dec 2024 21:55:28 +0100 Subject: [PATCH] New working systems ------------------- Wonder Circus (Japan, v1.1.1) [nnap] --- src/mame/excellent/lastbank.cpp | 143 +++++++++++++++++++++++++++++++- src/mame/mame.lst | 1 + 2 files changed, 143 insertions(+), 1 deletion(-) diff --git a/src/mame/excellent/lastbank.cpp b/src/mame/excellent/lastbank.cpp index ba5be39e663..0e230bc91b2 100644 --- a/src/mame/excellent/lastbank.cpp +++ b/src/mame/excellent/lastbank.cpp @@ -18,6 +18,7 @@ Undumped games on similar hardware (ES-9402 or ES-9410): TODO: - lastbank: sprites should be clip masked during gameplay (verify); - fever13: OKI sound volume overdrives a lot; +- wcircus: sound flags / latches are somewhat different, need correct implementation - hookup hopper device; **************************************************************************************************/ @@ -83,7 +84,7 @@ class lastbank_state : public driver_device void key_select_w(uint8_t data); TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb); - void audio_map(address_map &map) ATTR_COLD; + virtual void audio_map(address_map &map) ATTR_COLD; void tc0091lvc_map(address_map &map) ATTR_COLD; }; @@ -99,6 +100,17 @@ class fever13_state : public lastbank_state virtual void audio_io(address_map &map) override ATTR_COLD; }; +class wcircus_state : public fever13_state +{ +public: + wcircus_state(const machine_config &mconfig, device_type type, const char *tag) + : fever13_state(mconfig, type, tag) + { } + +protected: + virtual void audio_map(address_map &map) override ATTR_COLD; +}; + void lastbank_state::machine_start() { @@ -229,6 +241,13 @@ void fever13_state::audio_io(address_map &map) map(0xc0, 0xc0).r("soundlatch1", FUNC(generic_latch_8_device::read)).w(FUNC(fever13_state::sound_flags_w)); } +void wcircus_state::audio_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); // TODO: partly banked? + map(0x8000, 0x87ff).ram(); +} + + static INPUT_PORTS_START( lastbank ) PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CODE(KEYCODE_M) @@ -608,6 +627,110 @@ static INPUT_PORTS_START( mir7hg ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( wcircus ) + PORT_INCLUDE( fever13 ) + + PORT_MODIFY("DSW1") + PORT_DIPNAME( 0x03, 0x03, "Max Bet" ) PORT_DIPLOCATION("DSW1:1,2") + PORT_DIPSETTING( 0x03, "5" ) + PORT_DIPSETTING( 0x02, "10" ) + PORT_DIPSETTING( 0x01, "50" ) + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPNAME( 0x0c, 0x0c, "Min Bet" ) PORT_DIPLOCATION("DSW1:3,4") + PORT_DIPSETTING( 0x0c, "1" ) + PORT_DIPSETTING( 0x08, "5" ) + PORT_DIPSETTING( 0x04, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x10, 0x10, "Double Up Game" ) PORT_DIPLOCATION("DSW1:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Payout Rate Type" ) PORT_DIPLOCATION("DSW1:6") + PORT_DIPSETTING( 0x00, "Credit In / Out" ) + PORT_DIPSETTING( 0x20, "Game In / Out" ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7") // no effect in test mode + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8") // no effect in test mode + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x07, 0x07, "Credit Limit" ) PORT_DIPLOCATION("DSW2:1,2,3") + PORT_DIPSETTING( 0x07, "1000" ) + PORT_DIPSETTING( 0x06, "2000" ) + PORT_DIPSETTING( 0x05, "3000" ) + PORT_DIPSETTING( 0x04, "5000" ) + PORT_DIPSETTING( 0x03, "10000" ) + PORT_DIPSETTING( 0x02, "20000" ) + PORT_DIPSETTING( 0x01, "30000" ) + PORT_DIPSETTING( 0x00, "50000" ) + PORT_DIPNAME( 0x38, 0x38, "Win Percentage" ) PORT_DIPLOCATION("DSW2:4,5,6") + PORT_DIPSETTING( 0x00, "55" ) + PORT_DIPSETTING( 0x08, "60" ) + PORT_DIPSETTING( 0x10, "65" ) + PORT_DIPSETTING( 0x18, "70" ) + PORT_DIPSETTING( 0x20, "75" ) + PORT_DIPSETTING( 0x28, "80" ) + PORT_DIPSETTING( 0x30, "85" ) + PORT_DIPSETTING( 0x38, "90" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_MODIFY("DSW3") + PORT_DIPNAME( 0x01, 0x01, "Hopper Motor" ) PORT_DIPLOCATION("DSW3:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Hopper Switch" ) PORT_DIPLOCATION("DSW3:2") + PORT_DIPSETTING( 0x02, "Micro" ) + PORT_DIPSETTING( 0x00, "Sensor" ) + PORT_DIPNAME( 0x1c, 0x1c, "Coin A / Coin C" ) PORT_DIPLOCATION("DSW3:3,4,5") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x14, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x0c, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("DSW3:6,7,8") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0xa0, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x80, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x60, "1 Coin / 100 Credits" ) + + PORT_MODIFY("DSW4") + PORT_DIPNAME( 0x03, 0x03, "Key In" ) PORT_DIPLOCATION("DSW4:1,2") + PORT_DIPSETTING( 0x03, "50 Credits" ) + PORT_DIPSETTING( 0x02, "100 Credits" ) + PORT_DIPSETTING( 0x01, "500 Credits" ) + PORT_DIPSETTING( 0x00, "1000 Credits" ) + PORT_DIPNAME( 0x1c, 0x1c, "Pay Out" ) PORT_DIPLOCATION("DSW4:3,4,5") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x14, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x0c, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:6") // no effect in test mode + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Left / Center / Right Stop Buttons" ) PORT_DIPLOCATION("DSW4:7,8") + PORT_DIPSETTING( 0xc0, "Take / Small / Big" ) + PORT_DIPSETTING( 0x80, "W-Up / Small / Big" ) + PORT_DIPSETTING( 0x40, "Small / Big / Take" ) + PORT_DIPSETTING( 0x00, "Small / Big / W-Up" ) +INPUT_PORTS_END + TIMER_DEVICE_CALLBACK_MEMBER(lastbank_state::scanline_cb) { @@ -758,6 +881,23 @@ ROM_START( mir7hg ) // v1.0.2 Feb 19 1996 15:05:17 ROM_LOAD( "5.u60", 0x00000, 0x80000, CRC(13d8c30a) SHA1(1a2dc0c97992e9e1d73c5f3f713db8599d2d2285) ) // 11xxxxxxxxxxxxxxxxx = 0xFF ROM_END +ROM_START( wcircus ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD( "6.u9", 0x00000, 0x40000, CRC(6cb29023) SHA1(e1a980f789d4c66ddd80e819d0a94991a5ad1f2b) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "3.u48", 0x00000, 0x10000, CRC(ec8a0ccc) SHA1(84ffb5c9614764500f41cff8f0d6d5ad9f0d8084) ) + + ROM_REGION( 0x200000, "maincpu:gfx", ROMREGION_ERASEFF ) + ROM_LOAD( "27c802.u11", 0x000000, 0x100000, CRC(fefee118) SHA1(21c81e4a7d5ac86e1ebb452647a1908fd4ee9600) ) // 1xxxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "5.u55", 0x00000, 0x40000, CRC(390911e9) SHA1(10ed6fca1a0d183f47c231503a3077faab0d593e) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x80000, "essnd", 0 ) // Samples + ROM_LOAD( "7.u60", 0x00000, 0x80000, CRC(d018ed97) SHA1(02eb6559805f81f371d39b9c0660cd6d9d392656) ) +ROM_END + } // anonymous namespace @@ -765,3 +905,4 @@ GAME( 1994, lastbank, 0, lastbank, lastbank, lastbank_state, empty_init, R GAME( 1995, fever13, 0, lastbank, fever13, fever13_state, empty_init, ROT0, "Excellent System", "Fever 13 (Japan, v1.3)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) GAME( 1995, ukiyobox, fever13, lastbank, ukiyobox, fever13_state, empty_init, ROT0, "Excellent System", "Ukiyo Box (Japan, v1.3.7)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) GAME( 1996, mir7hg, 0, lastbank, mir7hg, fever13_state, empty_init, ROT0, "Excellent System", "Miracle Seven - Heaven's Gate (Japan, v1.0.2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 199?, wcircus, 0, lastbank, wcircus, wcircus_state, empty_init, ROT0, "Cobra", "Wonder Circus (Japan, v1.1.1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 8dc4d85078f..a0e4ddb9650 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17943,6 +17943,7 @@ fever13 // (c) 1995 Excellent System lastbank // (c) 1994 Excellent System mir7hg // (c) 1996 Excellent System ukiyobox // (c) 1995 Excellent System +wcircus // (c) 199? Cobra @source:excellent/witch.cpp keirinou // (c) 1987 Excellent System