From 599c33e83908b647e0c530231a681455e89c33a5 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 29 May 2021 07:13:58 +0200 Subject: [PATCH] New machines marked as NOT_WORKING ---------------------------------- Fortune Wheel [coolmod] --- scripts/target/mame/arcade.lua | 1 + src/mame/arcade.flt | 1 + src/mame/drivers/deco32.cpp | 6 +- src/mame/drivers/fwheel.cpp | 211 +++++++++++++++++++++++++++++++ src/mame/drivers/sms_bootleg.cpp | 88 ++++++++----- src/mame/includes/sms_bootleg.h | 20 --- src/mame/mame.lst | 3 + 7 files changed, 273 insertions(+), 57 deletions(-) create mode 100644 src/mame/drivers/fwheel.cpp delete mode 100644 src/mame/includes/sms_bootleg.h diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index ff079beb04e..0e94d9d7da3 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3470,6 +3470,7 @@ files { MAME_DIR .. "src/mame/includes/deniam.h", MAME_DIR .. "src/mame/video/deniam.cpp", MAME_DIR .. "src/mame/drivers/dotrikun.cpp", + MAME_DIR .. "src/mame/drivers/fwheel.cpp", MAME_DIR .. "src/mame/drivers/gpworld.cpp", MAME_DIR .. "src/mame/drivers/hikaru.cpp", MAME_DIR .. "src/mame/drivers/hshavoc.cpp", diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index 080643e517c..2c900a22227 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -440,6 +440,7 @@ funworld.cpp funybubl.cpp fuukifg2.cpp fuukifg3.cpp +fwheel.cpp g627.cpp gaelco.cpp gaelco2.cpp diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 54f9c95df2f..df36f5819ac 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -3925,6 +3925,6 @@ GAME( 1994, tattassa, tattass, tattass, tattass, nslasher_state, init_tatt GAME( 1993, dragngun, 0, dragngun, dragngun, dragngun_state, init_dragngun, ROT0, "Data East Corporation", "Dragon Gun (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // OKI3 Bankswitching aren't verified GAME( 1993, dragngunj, dragngun, dragngun, dragngun, dragngun_state, init_dragngunj, ROT0, "Data East Corporation", "Dragon Gun (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // "" -GAME( 1994, lockload, 0, lockload, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Locked 'n Loaded (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1994, gunhard, lockload, lockload, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Gun Hard (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1994, lockloadu, lockload, lockloadu, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Locked 'n Loaded (US, Dragon Gun conversion)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1994, lockload, 0, lockload, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Locked 'n Loaded (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hangs during attract mode if let running for a while without coining up; shooting in the lower corners during calibration of player's 2 gun hangs the game +GAME( 1994, gunhard, lockload, lockload, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Gun Hard (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // " +GAME( 1994, lockloadu, lockload, lockloadu, lockload, dragngun_state, init_lockload, ROT0, "Data East Corporation", "Locked 'n Loaded (US, Dragon Gun conversion)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // " diff --git a/src/mame/drivers/fwheel.cpp b/src/mame/drivers/fwheel.cpp new file mode 100644 index 00000000000..167727c3497 --- /dev/null +++ b/src/mame/drivers/fwheel.cpp @@ -0,0 +1,211 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Fortune Wheel, Sega 1984? + +This game came on (at least) 3 PCBs: + +1) +IC BOARD M4J MAIN, one '837-6553' sticker, one '837-6899 FORTUNE WHEEL' sticker +NEC D780C-1 main CPU +SEGA 315-5124 custom +SEGA 315-5297 custom +27C512 ROM +3x NEC D4168C-15-SG RAM (1 near the CPU, 2 near the 315-5124) +XTAL (value not readable) + +2) +one '837-6900 FORTUNE WHEEL' sticker, one '880324 0508 H' sticker +NEC D780C-1 audio CPU +2x YM2413 +D4364CX RAM +4.000 MHz XTAL +27512 ROM + +3) +MADE IN JAPAN @SEGA 1984, one '837-6898 FORTUNE WHEEL' sticker, one '880322 0311 H' sticker +NEC D780C-1 CPU (wheel?) +OKI M2128-15 RAM +9x4 NEC 2501 +2x 27128 ROMs +8-dip bank +4-dip bank +4.000 MHz XTAL +*/ + +#include "emu.h" +#include "speaker.h" + +#include "includes/sms.h" + +#include "cpu/z80/z80.h" +#include "sound/ymopl.h" + + +namespace { + +class fwheel_state : public sms_state +{ +public: + fwheel_state(const machine_config &mconfig, device_type type, const char *tag) + : sms_state(mconfig, type, tag) + {} + + void fwheel(machine_config &config); + +private: + void main_io_map(address_map &map); + void main_prg_map(address_map &map); + void sound_prg_map(address_map &map); + void sound_io_map(address_map &map); + void wheel_prg_map(address_map &map); +}; + + +void fwheel_state::main_prg_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); + map(0xc000, 0xdfff).ram(); +} + +void fwheel_state::main_io_map(address_map &map) +{ + map.global_mask(0xff); + + map(0x80, 0x80).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::data_read), FUNC(sega315_5124_device::data_write)); + map(0x81, 0x81).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::control_read), FUNC(sega315_5124_device::control_write)); + map(0xdc, 0xdc).portr("IN0"); +} + +void fwheel_state::sound_prg_map(address_map &map) +{ + map(0x0000, 0x8fff).rom(); + map(0xf800, 0xffff).ram(); +} + +void fwheel_state::sound_io_map(address_map &map) +{ + map.global_mask(0xff); + + map(0x00, 0x01).w("ym1", FUNC(ym2413_device::write)); + map(0x40, 0x41).w("ym2", FUNC(ym2413_device::write)); +} + +void fwheel_state::wheel_prg_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x47ff).ram(); +} + + +static INPUT_PORTS_START( fwheel ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW0") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW1") // 4 dip bank + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + +void fwheel_state::fwheel(machine_config &config) +{ + // on 837-6899 PCB + Z80(config, m_maincpu, 4'000'000); // not verified + m_maincpu->set_addrmap(AS_PROGRAM, &fwheel_state::main_prg_map); + m_maincpu->set_addrmap(AS_IO, &fwheel_state::main_io_map); + + config.set_maximum_quantum(attotime::from_hz(60)); + + SPEAKER(config, "mono").front_center(); + + SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER); + m_main_scr->set_raw(XTAL(10'738'635)/2, \ + sega315_5124_device::WIDTH , sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH - 2, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256 + 10, \ + sega315_5124_device::HEIGHT_NTSC, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT + 224); + m_main_scr->set_refresh_hz(XTAL(10'738'635)/2 / (sega315_5124_device::WIDTH * sega315_5124_device::HEIGHT_NTSC)); + m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms)); + + SEGA315_5124(config, m_vdp, 10'738'635); // not verified + m_vdp->set_screen(m_main_scr); + m_vdp->set_is_pal(false); + m_vdp->n_int().set_inputline(m_maincpu, 0); + m_vdp->n_nmi().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_vdp->add_route(ALL_OUTPUTS, "mono", 1.00); + + // on 837-6900 PCB + z80_device &audiocpu(Z80(config, "audiocpu", 4_MHz_XTAL)); + audiocpu.set_addrmap(AS_PROGRAM, &fwheel_state::sound_prg_map); + audiocpu.set_addrmap(AS_IO, &fwheel_state::sound_io_map); + + YM2413(config, "ym1", 4_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 0.30); + + YM2413(config, "ym2", 4_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 0.30); + + // on 837-6898 PCB + z80_device &wheelcpu(Z80(config, "wheelcpu", 4_MHz_XTAL)); + wheelcpu.set_addrmap(AS_PROGRAM, &fwheel_state::wheel_prg_map); +} + + +ROM_START( fwheel ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "epr-12198.ic2", 0x00000, 0x10000, CRC(673e9aac) SHA1(62bec711b86a70988b80a74f440768b1460e46ac) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "epr-12199.ic2", 0x00000, 0x10000, CRC(e5f31387) SHA1(20269210031880b971ab46a194f16e42027d3d6a) ) + + ROM_REGION( 0x8000, "wheelcpu", 0) // function unverified + ROM_LOAD( "epr-12196.ic28", 0x0000, 0x4000, CRC(3a072a1e) SHA1(ede2b481930ba87a50f738941c9ceaffc09ea4bd) ) + ROM_LOAD( "epr-12197.ic21", 0x4000, 0x4000, CRC(289b3c75) SHA1(55a099633063f80b7d40469c2cc777401794a0bd) ) +ROM_END + +} // Anonymous namespace + + +GAME( 1984?, fwheel, 0, fwheel, fwheel, fwheel_state, empty_init, ROT0, "Sega", "Fortune Wheel", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/sms_bootleg.cpp b/src/mame/drivers/sms_bootleg.cpp index edf57ffeaad..e6abb0a9cdc 100644 --- a/src/mame/drivers/sms_bootleg.cpp +++ b/src/mame/drivers/sms_bootleg.cpp @@ -229,18 +229,39 @@ A Korean version has been seen too (unless this can be switched?) */ #include "emu.h" -#include "includes/sms_bootleg.h" +#include "includes/sms.h" #include "cpu/z80/z80.h" #include "speaker.h" +namespace { + +class smsbootleg_state : public sms_state +{ +public: + smsbootleg_state(const machine_config &mconfig, device_type type, const char *tag) + : sms_state(mconfig, type, tag) + {} + + void sms_supergame(machine_config &config); + + void init_sms_supergame(); + +private: + void port08_w(uint8_t data); + void port18_w(uint8_t data); + + void sms_supergame_io(address_map &map); + void sms_supergame_map(address_map &map); +}; + void smsbootleg_state::sms_supergame_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xfff7).ram(); -// map(0xfffc, 0xffff).rw(FUNC(smsbootleg_state::sms_mapper_r), FUNC(smsbootleg_state::sms_mapper_w)); /* Bankswitch control */ +// map(0xfffc, 0xffff).rw(FUNC(smsbootleg_state::sms_mapper_r), FUNC(smsbootleg_state::sms_mapper_w)); // Bankswitch control } void smsbootleg_state::port08_w(uint8_t data) @@ -272,38 +293,6 @@ void smsbootleg_state::sms_supergame_io(address_map &map) } - -void smsbootleg_state::sms_supergame(machine_config &config) -{ - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(10'738'635)/3); - m_maincpu->set_addrmap(AS_PROGRAM, &smsbootleg_state::sms_supergame_map); - m_maincpu->set_addrmap(AS_IO, &smsbootleg_state::sms_supergame_io); - - config.set_maximum_quantum(attotime::from_hz(60)); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - - SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER); - m_main_scr->set_raw(XTAL(10'738'635)/2, \ - sega315_5124_device::WIDTH , sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH - 2, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256 + 10, \ - sega315_5124_device::HEIGHT_NTSC, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT + 224); - m_main_scr->set_refresh_hz(XTAL(10'738'635)/2 / (sega315_5124_device::WIDTH * sega315_5124_device::HEIGHT_NTSC)); - m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms)); - - SEGA315_5246(config, m_vdp, XTAL(10'738'635)); - m_vdp->set_screen(m_main_scr); - m_vdp->set_is_pal(false); - m_vdp->n_int().set_inputline(m_maincpu, 0); - m_vdp->n_nmi().set_inputline(m_maincpu, INPUT_LINE_NMI); - m_vdp->add_route(ALL_OUTPUTS, "mono", 1.00); -} - - - - - static INPUT_PORTS_START( sms_supergame ) PORT_START("PAUSE") PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -372,6 +361,35 @@ static INPUT_PORTS_START( sms_supergame ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END + +void smsbootleg_state::sms_supergame(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, XTAL(10'738'635)/3); + m_maincpu->set_addrmap(AS_PROGRAM, &smsbootleg_state::sms_supergame_map); + m_maincpu->set_addrmap(AS_IO, &smsbootleg_state::sms_supergame_io); + + config.set_maximum_quantum(attotime::from_hz(60)); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER); + m_main_scr->set_raw(XTAL(10'738'635)/2, \ + sega315_5124_device::WIDTH , sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH - 2, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256 + 10, \ + sega315_5124_device::HEIGHT_NTSC, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT + 224); + m_main_scr->set_refresh_hz(XTAL(10'738'635)/2 / (sega315_5124_device::WIDTH * sega315_5124_device::HEIGHT_NTSC)); + m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms)); + + SEGA315_5246(config, m_vdp, XTAL(10'738'635)); + m_vdp->set_screen(m_main_scr); + m_vdp->set_is_pal(false); + m_vdp->n_int().set_inputline(m_maincpu, 0); + m_vdp->n_nmi().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_vdp->add_route(ALL_OUTPUTS, "mono", 1.00); +} + + void smsbootleg_state::init_sms_supergame() { uint8_t* rom = memregion("maincpu")->base(); @@ -430,6 +448,8 @@ ROM_START( smssgamea ) // there seems to be some kind of MCU for the timer? ROM_END +} // Anonymous namespace + // these haven't been set as clones because they contain different games GAME( 199?, smssgame, 0, sms_supergame, sms_supergame, smsbootleg_state, init_sms_supergame, ROT0, "Sono Corp Japan", "Super Game (Sega Master System Multi-game bootleg)", MACHINE_NOT_WORKING ) diff --git a/src/mame/includes/sms_bootleg.h b/src/mame/includes/sms_bootleg.h deleted file mode 100644 index 71ccabf2c34..00000000000 --- a/src/mame/includes/sms_bootleg.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "sms.h" - -class smsbootleg_state : public sms_state -{ -public: - smsbootleg_state(const machine_config &mconfig, device_type type, const char *tag) - : sms_state(mconfig, type, tag) - {} - - void sms_supergame(machine_config &config); - - void init_sms_supergame(); - -private: - void port08_w(uint8_t data); - void port18_w(uint8_t data); - - void sms_supergame_io(address_map &map); - void sms_supergame_map(address_map &map); -}; diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 5383f5dc798..1583531640c 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14161,6 +14161,9 @@ asurabld // (c) 1998 (Japan) asurabus // (c) 2000 (Japan) asurabusa // review build +@source:fwheel.cpp +fwheel // + @source:g627.cpp rota_101 // rota_115 //