diff options
Diffstat (limited to '')
-rw-r--r-- | src/emu/debug/debugvw.cpp | 6 | ||||
-rw-r--r-- | src/emu/emuopts.cpp | 2 | ||||
-rw-r--r-- | src/emu/emuopts.h | 4 | ||||
-rw-r--r-- | src/emu/inpttype.ipp | 10 | ||||
-rw-r--r-- | src/frontend/mame/ui/mainmenu.cpp | 7 | ||||
-rw-r--r-- | src/frontend/mame/ui/sndmenu.cpp | 13 | ||||
-rw-r--r-- | src/frontend/mame/ui/sndmenu.h | 3 | ||||
-rw-r--r-- | src/mame/dynax/ddenlovr.cpp | 50 | ||||
-rw-r--r-- | src/mame/dynax/dynax.cpp | 30 | ||||
-rw-r--r-- | src/mame/dynax/royalmah.cpp | 2 | ||||
-rw-r--r-- | src/mame/excellent/es9501.cpp | 28 | ||||
-rw-r--r-- | src/mame/igs/igs011.cpp | 17 | ||||
-rw-r--r-- | src/mame/mame.lst | 4 | ||||
-rw-r--r-- | src/mame/misc/gms.cpp | 803 | ||||
-rw-r--r-- | src/mame/misc/umipoker.cpp | 24 | ||||
-rw-r--r-- | src/mame/wing/luckgrln.cpp | 27 | ||||
-rw-r--r-- | src/osd/modules/sound/pipewire_sound.cpp | 17 | ||||
-rw-r--r-- | src/osd/modules/sound/sdl_sound.cpp | 9 |
18 files changed, 603 insertions, 453 deletions
diff --git a/src/emu/debug/debugvw.cpp b/src/emu/debug/debugvw.cpp index 2cae08f733d..fe997596137 100644 --- a/src/emu/debug/debugvw.cpp +++ b/src/emu/debug/debugvw.cpp @@ -509,7 +509,7 @@ bool debug_view_expression::recompute() { m_parsed.parse(m_string); } - catch (expression_error &) + catch (expression_error const &) { try { @@ -517,7 +517,7 @@ bool debug_view_expression::recompute() // then going back to the previous expression should work m_parsed.parse(oldstring); } - catch (expression_error &) + catch (expression_error const &) { // If that didn't work, perhaps the user switched sources // and the previous expression doesn't evaluate with the @@ -540,7 +540,7 @@ bool debug_view_expression::recompute() changed = true; } } - catch (expression_error &) + catch (expression_error const &) { } } diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp index 18b37734465..ba8fa0ec265 100644 --- a/src/emu/emuopts.cpp +++ b/src/emu/emuopts.cpp @@ -144,8 +144,6 @@ const options_entry emu_options::s_option_entries[] = { OPTION_SAMPLERATE ";sr(1000-1000000)", "48000", core_options::option_type::INTEGER, "set sound output sample rate" }, { OPTION_SAMPLES, "1", core_options::option_type::BOOLEAN, "enable the use of external samples if available" }, { OPTION_VOLUME ";vol", "0", core_options::option_type::INTEGER, "sound volume in decibels (-32 min, 0 max)" }, - { OPTION_COMPRESSOR, "1", core_options::option_type::BOOLEAN, "enable compressor for sound" }, - { OPTION_SPEAKER_REPORT "(0-4)", "0", core_options::option_type::INTEGER, "print report of speaker ouput maxima (0=none, or 1-4 for more detail)" }, // input options { nullptr, nullptr, core_options::option_type::HEADER, "CORE INPUT OPTIONS" }, diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h index 0a1b1dcf413..a4db1e0e57e 100644 --- a/src/emu/emuopts.h +++ b/src/emu/emuopts.h @@ -119,8 +119,6 @@ #define OPTION_SAMPLERATE "samplerate" #define OPTION_SAMPLES "samples" #define OPTION_VOLUME "volume" -#define OPTION_COMPRESSOR "compressor" -#define OPTION_SPEAKER_REPORT "speaker_report" // core input options #define OPTION_COIN_LOCKOUT "coin_lockout" @@ -405,8 +403,6 @@ public: int sample_rate() const { return int_value(OPTION_SAMPLERATE); } bool samples() const { return bool_value(OPTION_SAMPLES); } int volume() const { return int_value(OPTION_VOLUME); } - bool compressor() const { return bool_value(OPTION_COMPRESSOR); } - int speaker_report() const { return int_value(OPTION_SPEAKER_REPORT); } // core input options bool coin_lockout() const { return bool_value(OPTION_COIN_LOCKOUT); } diff --git a/src/emu/inpttype.ipp b/src/emu/inpttype.ipp index c51afa8ce31..dbf1250347f 100644 --- a/src/emu/inpttype.ipp +++ b/src/emu/inpttype.ipp @@ -105,13 +105,13 @@ namespace { INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_SERVICE, N_p("input-name", "Service"), input_seq(KEYCODE_9) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BOOK, N_p("input-name", "Book-Keeping"), input_seq(KEYCODE_0) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DOOR, N_p("input-name", "Door"), input_seq(KEYCODE_O) ) \ - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_PAYOUT, N_p("input-name", "Payout"), input_seq(KEYCODE_I) ) \ + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_PAYOUT, N_p("input-name", "Payout"), input_seq(KEYCODE_4) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BET, N_p("input-name", "Bet"), input_seq(KEYCODE_M) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DEAL, N_p("input-name", "Deal"), input_seq(KEYCODE_2) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_STAND, N_p("input-name", "Stand"), input_seq(KEYCODE_L) ) \ - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_TAKE, N_p("input-name", "Take Score"), input_seq(KEYCODE_4) ) \ - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_D_UP, N_p("input-name", "Double Up"), input_seq(KEYCODE_3) ) \ - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HALF, N_p("input-name", "Half Gamble"), input_seq(KEYCODE_D) ) \ + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_TAKE, N_p("input-name", "Take Score"), input_seq(KEYCODE_G) ) \ + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_D_UP, N_p("input-name", "Double Up"), input_seq(KEYCODE_D) ) \ + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HALF, N_p("input-name", "Half Gamble"), input_seq(KEYCODE_F) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HIGH, N_p("input-name", "High"), input_seq(KEYCODE_A) ) \ INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_LOW, N_p("input-name", "Low"), input_seq(KEYCODE_S) ) \ CORE_INPUT_TYPES_END() @@ -187,7 +187,7 @@ namespace { INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_M, N_p("input-name", "%p Mahjong M"), input_seq(KEYCODE_M_INDEXED(1)) ) \ INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_N, N_p("input-name", "%p Mahjong N"), input_seq(KEYCODE_N_INDEXED(1)) ) \ INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_O, N_p("input-name", "%p Mahjong O"), input_seq(KEYCODE_O_INDEXED(1)) ) \ - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_P, N_p("input-name", "%p Mahjong P"), input_seq(KEYCODE_COLON_INDEXED(1)) ) \ + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_P, N_p("input-name", "%p Mahjong P"), input_seq(KEYCODE_P_INDEXED(1)) ) \ INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_Q, N_p("input-name", "%p Mahjong Q"), input_seq(KEYCODE_Q_INDEXED(1)) ) \ INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_KAN, N_p("input-name", "%p Mahjong Kan"), input_seq(KEYCODE_LCONTROL_INDEXED(1)) ) \ INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_PON, N_p("input-name", "%p Mahjong Pon"), input_seq(KEYCODE_LALT_INDEXED(1)) ) \ diff --git a/src/frontend/mame/ui/mainmenu.cpp b/src/frontend/mame/ui/mainmenu.cpp index 84eee41f239..bef3b5a2bfb 100644 --- a/src/frontend/mame/ui/mainmenu.cpp +++ b/src/frontend/mame/ui/mainmenu.cpp @@ -161,9 +161,12 @@ void menu_main::populate() if (network_interface_enumerator(machine().root_device()).first() != nullptr) item_append(_("menu-main", "Network Devices"), 0, (void*)NETWORK_DEVICES); - item_append(_("menu-main", "Audio Mixer"), 0, (void *)AUDIO_MIXER); + if (sound_interface_enumerator(machine().root_device()).first() != nullptr) + { + item_append(_("menu-main", "Audio Mixer"), 0, (void *)AUDIO_MIXER); - item_append(_("menu-main", "Audio Effects"), 0, (void *)AUDIO_EFFECTS); + item_append(_("menu-main", "Audio Effects"), 0, (void *)AUDIO_EFFECTS); + } if (!ui().get_slider_list().empty()) item_append(_("menu-main", "Slider Controls"), 0, (void *)SLIDERS); diff --git a/src/frontend/mame/ui/sndmenu.cpp b/src/frontend/mame/ui/sndmenu.cpp index 32a590b9730..0b05d4148ad 100644 --- a/src/frontend/mame/ui/sndmenu.cpp +++ b/src/frontend/mame/ui/sndmenu.cpp @@ -34,7 +34,6 @@ menu_sound_options::menu_sound_options(mame_ui_manager &mui, render_container &c m_sample_rate = mui.machine().options().sample_rate(); m_sound = (strcmp(options.sound(), OSDOPTVAL_NONE) && strcmp(options.sound(), "0")); m_samples = mui.machine().options().samples(); - m_compressor = mui.machine().options().compressor(); int total = std::size(m_sound_rate); @@ -57,9 +56,6 @@ void menu_sound_options::menu_dismissed() if (strcmp(moptions.value(OSDOPTION_SOUND), m_sound ? OSDOPTVAL_AUTO : OSDOPTVAL_NONE)) moptions.set_value(OSDOPTION_SOUND, m_sound ? OSDOPTVAL_AUTO : OSDOPTVAL_NONE, OPTION_PRIORITY_CMDLINE); - if (moptions.bool_value(OPTION_COMPRESSOR) != m_compressor) - moptions.set_value(OPTION_COMPRESSOR, m_compressor, OPTION_PRIORITY_CMDLINE); - if (moptions.int_value(OPTION_SAMPLERATE) != m_sound_rate[m_cur_rates]) moptions.set_value(OPTION_SAMPLERATE, m_sound_rate[m_cur_rates], OPTION_PRIORITY_CMDLINE); @@ -88,14 +84,6 @@ bool menu_sound_options::handle(event const *ev) } break; - case ENABLE_COMPRESSOR: - if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT || ev->iptkey == IPT_UI_SELECT) - { - m_compressor = !m_compressor; - changed = true; - } - break; - case SAMPLE_RATE: if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT) { @@ -146,7 +134,6 @@ void menu_sound_options::populate() // add options items item_append_on_off(_("Sound"), m_sound, 0, (void *)(uintptr_t)ENABLE_SOUND); - item_append_on_off(_("Compressor"), m_compressor, 0, (void *)(uintptr_t)ENABLE_COMPRESSOR); item_append(_("Sample Rate"), string_format("%d", m_sample_rate), arrow_flags, (void *)(uintptr_t)SAMPLE_RATE); item_append_on_off(_("Use External Samples"), m_samples, 0, (void *)(uintptr_t)ENABLE_SAMPLES); item_append(menu_item_type::SEPARATOR); diff --git a/src/frontend/mame/ui/sndmenu.h b/src/frontend/mame/ui/sndmenu.h index 01d69f6d8ff..4a5eadfc581 100644 --- a/src/frontend/mame/ui/sndmenu.h +++ b/src/frontend/mame/ui/sndmenu.h @@ -33,7 +33,6 @@ private: enum { ENABLE_SOUND = 1, - ENABLE_COMPRESSOR, SAMPLE_RATE, ENABLE_SAMPLES }; @@ -44,7 +43,7 @@ private: uint16_t m_cur_rates; static const int m_sound_rate[]; int m_sample_rate; - bool m_samples, m_sound, m_compressor; + bool m_samples, m_sound; }; } // namespace ui diff --git a/src/mame/dynax/ddenlovr.cpp b/src/mame/dynax/ddenlovr.cpp index bfa90f002c4..d2061d5a95b 100644 --- a/src/mame/dynax/ddenlovr.cpp +++ b/src/mame/dynax/ddenlovr.cpp @@ -5048,8 +5048,8 @@ static INPUT_PORTS_START( htengoku ) // SW 4 OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x00) // pay - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x10) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x00) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x10) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) PORT_TOGGLE PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -5644,7 +5644,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( hanakanz ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("BET",0x40,EQUALS,0x00) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("BET",0x40,EQUALS,0x00) // pay PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("BET",0x40,EQUALS,0x40) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) // Test @@ -5815,9 +5815,9 @@ static INPUT_PORTS_START( hkagerou ) // SW 4 ON ON OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) // Test + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // data clear PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key-in @@ -6195,7 +6195,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjreach1 ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -6350,7 +6350,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( jongtei ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -6561,7 +6561,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjchuuka ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -6716,7 +6716,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjschuka ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -6979,9 +6979,9 @@ static INPUT_PORTS_START( mjmyster ) // SW 4 Off On On On On Off Off Off Off Off On On On On On Off Off Off Off Off On On On On On Off Off Off Off Off PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x02) // pay - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x03) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x02, EQUALS, 0x00) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x02) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x03) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x02, EQUALS, 0x00) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -7139,9 +7139,9 @@ static INPUT_PORTS_START( hginga ) // SW 4 ON OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x02) // pay - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x03) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x02, EQUALS, 0x00) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x02) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x03) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x02, EQUALS, 0x00) // PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -7377,9 +7377,9 @@ INPUT_PORTS_END static INPUT_PORTS_START( hgokou ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // data clear PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) @@ -7526,9 +7526,9 @@ static INPUT_PORTS_START( mjmyornt ) // SW 4 OFF ON ON ON ON ON OFF OFF OFF OFF ON ON ON ON ON ON OFF OFF OFF OFF ON ON ON ON ON ON OFF OFF OFF OFF PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE PORT_NAME(DEF_STR( Test )) // Test + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE PORT_NAME(DEF_STR(Test)) // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // data clear PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BILL1 ) PORT_CODE(KEYCODE_6) // note @@ -8014,7 +8014,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( sryudens ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -8169,7 +8169,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( seljan2 ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -8324,7 +8324,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( janshinp ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -8478,7 +8478,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( dtoyoken ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE(0x04, IP_ACTIVE_LOW) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -8641,7 +8641,7 @@ static INPUT_PORTS_START( daimyojn ) // SW 4 OFF ON ON ON ON OFF OFF OFF OFF OFF OFF ON ON ON ON OFF OFF OFF OFF OFF OFF OFF ON ON ON OFF OFF OFF ON OFF OFF OFF ON ON ON OFF OFF OFF ON OFF PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_TOGGLE PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer @@ -8775,7 +8775,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( hnrose ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer diff --git a/src/mame/dynax/dynax.cpp b/src/mame/dynax/dynax.cpp index 86796b4a35c..056e4af83a5 100644 --- a/src/mame/dynax/dynax.cpp +++ b/src/mame/dynax/dynax.cpp @@ -1586,7 +1586,7 @@ INPUT_PORTS_END #define MAHJONG_COIN_TEST(ct, cm) \ PORT_START("COINS") \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION(ct, cm, EQUALS, 0) /* Pay */ \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION(ct, cm, EQUALS, 0) /* Pay */ \ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION(ct, cm, EQUALS, cm) \ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 18B */ \ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE /* Test */ \ @@ -1793,12 +1793,12 @@ static INPUT_PORTS_START( hnkochou ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // Pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW ) // Test (there isn't a dip switch) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 ) // Note + PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW ) // Test (there isn't a DIP switch) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 ) // Note PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2019,7 +2019,7 @@ static INPUT_PORTS_START( hjingi ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIPSW 4:8") // OFF固定 PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // Pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE4 ) // 18B PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer @@ -3104,7 +3104,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjelctrn ) PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // Pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer @@ -3199,7 +3199,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( majxtal7 ) PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION("DSW0", 0x40, EQUALS, 0x00) // Pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW0", 0x40, EQUALS, 0x00) // Pay PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW0", 0x40, EQUALS, 0x40) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test @@ -3748,13 +3748,13 @@ static INPUT_PORTS_START( gekisha ) PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // Pay PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_INCLUDE( mahjong_matrix_2p_bet_wup ) diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index f377d4f3c85..e0013695d5e 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -1687,7 +1687,7 @@ static INPUT_PORTS_START( mjctrl2 ) PORT_INCLUDE( mjctrl1 ) PORT_MODIFY("KEY0") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END diff --git a/src/mame/excellent/es9501.cpp b/src/mame/excellent/es9501.cpp index 627d5675102..2b4fc9a09d9 100644 --- a/src/mame/excellent/es9501.cpp +++ b/src/mame/excellent/es9501.cpp @@ -3,6 +3,7 @@ /* Excellent System's ES-9501 PCB +Also seen as ES9901 with same components / locations Main components: TMP68HC000-P16 CPU @@ -173,8 +174,7 @@ void es9501_state::es9501(machine_config &config) ymz.add_route(1, "speaker", 1.0, 1); ymz284_device & ymz284(YMZ284(config, "ymz284", 28.636363_MHz_XTAL / 8)); // divider not verified - ymz284.add_route(0, "speaker", 1.0, 0); - ymz284.add_route(1, "speaker", 1.0, 1); + ymz284.add_route(ALL_OUTPUTS, "speaker", 1.0); } @@ -197,6 +197,25 @@ ROM_START( d9flower ) // Dream 9 Flower string, but images seem more Flower 9 Dr ROM_LOAD( "3.u37", 0x000, 0x117, BAD_DUMP CRC(bea4cb24) SHA1(09987e6b903cc3bd202a9d933474b36bdbb99d9a) ) // not dumped for this set, but marked same ROM_END +ROM_START( d9flowera ) // same GFX / sound ROMs as d9flower, updated program (but version string unchanged) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "2.u33", 0x00000, 0x40000, CRC(803efc2d) SHA1(1e9c6b4c8adb2c8c837fe36f8c9c7c2aa3e675d8) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "1.u31", 0x00001, 0x40000, CRC(37186597) SHA1(b67c9fd057b7cc115866f73ecfdd57bb8dd09d7b) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x200000, "gfx", ROMREGION_ERASE00 ) + ROM_LOAD( "j3.u50", 0x000000, 0x080000, CRC(0f1f8b61) SHA1(d33d73dcdbf06a84e6be28ac1c3273dd21d0ad17) ) + ROM_LOAD( "j4.u51", 0x080000, 0x080000, CRC(c2a06ed5) SHA1(ffb07982f9ad91ce28bf3eacb8deedcc957bbbc1) ) + + ROM_REGION( 0x200000, "ymz", ROMREGION_ERASE00 ) + ROM_LOAD( "j5.u23", 0x000000, 0x080000, CRC(b6ad2e58) SHA1(84c0cdc155f641d4e5d8ae99acbfa5b297762418) ) + + ROM_REGION16_BE( 0x100, "eeprom", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "93c56.u12", 0x000, 0x100, NO_DUMP ) + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "003.u37", 0x000, 0x117, BAD_DUMP CRC(bea4cb24) SHA1(09987e6b903cc3bd202a9d933474b36bdbb99d9a) ) // not dumped for this set, but probably same +ROM_END + ROM_START( specd9 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_BYTE( "3.u33", 0x00000, 0x40000, CRC(e4b00f37) SHA1(4c33912b7c38399ba2ca5e4dc0335458d929bd52) ) @@ -219,5 +238,6 @@ ROM_END } // anonymous namespace -GAME( 1998, d9flower, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) -GAME( 1997, specd9, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.5G)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 1998, d9flower, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 1)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 1998, d9flowera, d9flower, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 2)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 1997, specd9, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.5G)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/igs/igs011.cpp b/src/mame/igs/igs011.cpp index a10619ea2b5..93ccbd5d338 100644 --- a/src/mame/igs/igs011.cpp +++ b/src/mame/igs/igs011.cpp @@ -64,6 +64,8 @@ To do: - xymga: stop during attract mode with 'RECORD ERROR 3' +- lhb2cpgs: decryption and protection simulation + Notes: - In most games, keep test button pressed during boot for another test mode @@ -4871,6 +4873,20 @@ ROM_START( lhb2 ) ROM_LOAD( "igss0503.u38", 0x00000, 0x80000, CRC(c9609c9c) SHA1(f036e682b792033409966e84292a69275eaa05e5) ) // 2 banks ROM_END +ROM_START( lhb2cpgs ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "v127c.u29", 0x00000, 0x80000, CRC(c9609c9c) SHA1(f036e682b792033409966e84292a69275eaa05e5) ) + + ROM_REGION( 0x200000, "blitter", 0 ) + ROM_LOAD( "igsm0501.u7", 0x00000, 0x200000, CRC(1c952bd6) SHA1(a6b6f1cdfb29647e81c032ffe59c94f1a10ceaf8) ) + + ROM_REGION( 0x80000, "blitter_hi", 0 ) + ROM_LOAD( "igsm0502.u4", 0x00000, 0x80000, CRC(5d73ae99) SHA1(7283aa3d6b15ceb95db80756892be46eb997ef15) ) + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "igss0503.u38", 0x00000, 0x80000, CRC(c9609c9c) SHA1(f036e682b792033409966e84292a69275eaa05e5) ) // 2 banks +ROM_END + ROM_START( lhb3 ) // 龍虎榜III 搓牌高手 (Lóng Hǔ Bǎng III Cuō Pái Gāoshǒu) very similar to lhb2's, but not original? ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "rom.u29", 0x00000, 0x80000, CRC(c5985452) SHA1(f1f0c2b1b8c509b2a0a72a4f3387eccb0f25008a) ) @@ -5139,6 +5155,7 @@ GAME( 1995, lhbv33c, lhb, lhb, lhb, igs011_state, i GAME( 1995, dbc, lhb, lhb, lhb, igs011_state, init_dbc, ROT0, "IGS", "Daai Baan Sing (Hong Kong, V027H)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, ryukobou, lhb, lhb, lhb, igs011_state, init_ryukobou, ROT0, "IGS / Alta", "Mahjong Ryukobou (Japan, V030J)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, lhb2, 0, lhb2, lhb2, igs011_state, init_lhb2, ROT0, "IGS", "Lung Fu Bong II (Hong Kong, V185H)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, lhb2cpgs, lhb2, lhb2, lhb2, igs011_state, empty_init, ROT0, "IGS", "Long Hu Bang II: Cuo Pai Gaoshou (China, V127C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // missing decryption / protection simulation GAME( 1996, tygn, lhb2, tygn, tygn, igs011_state, init_tygn, ROT0, "IGS", "Te Yi Gong Neng (China, V632C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // ROM patches GAME( 1996, lhb3, lhb2, nkishusp, lhb2, igs011_state, init_lhb3, ROT0, "IGS", "Long Hu Bang III: Cuo Pai Gaoshou (China, V242C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // ROM patches GAME( 1996, xymg, 0, xymg, xymg, igs011_state, init_xymg, ROT0, "IGS", "Xingyun Manguan (China, V651C, set 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 659f86c2ac8..70ec12aa4db 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -18066,6 +18066,7 @@ dream9 @source:excellent/es9501.cpp d9flower +d9flowera specd9 @source:excellent/gcpinbal.cpp @@ -20535,6 +20536,7 @@ drgnwrldv30 drgnwrldv40k lhb lhb2 +lhb2cpgs lhb3 lhbv33c nkishusp @@ -32765,6 +32767,7 @@ twinbskt saiyukip umipoker umipokera +vparadis @source:misc/unkgolf.cpp unkgolf @@ -47617,6 +47620,7 @@ wicat 7smash luckgrln luckstrn +luckstrna @source:wing/lucky37.cpp bingo75 diff --git a/src/mame/misc/gms.cpp b/src/mame/misc/gms.cpp index 8d9e7b48137..9c6f93d435a 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -64,24 +64,32 @@ Notes: B1/M1 - 26C1000 / 27C1001 (PRG/data for 89C51?) S1 - 27C2000 / 232000 mask ROM (OKI samples) -Hold test (F2) and reset (F3) to enter service mode. - -The default assignments for Mahjong I and Payout are identical. This can -cause the games to ignore Payout if they see Mahjong I first (in mahjong -keyboard mode). You can work around this by reassigning Payout. +Hold test (F2) and press reset (F3) to enter service mode. +The default password is usually Start eight times. TODO: - work out how Flip Flop input is read in mahjong games in mahjong keyboard mode -- correct EEPROM hookup for all games (this would get rid of a lot of ROM patches) +- in baile, Payout key doesn't work in mahjong keyboard mode (input test + recognises it as both Payout and Flip Flop) +- sc2in1 recognises the Payout key in the input test but it appears to have no + effect in the game +- correct EEPROM hookup for all games (this would get rid of a lot of ROM + patches) - hookup MCU and YM2151 / YM3812 sound for the mahjong games - hookup PIC16F84 for rbspm - emulate protection devices correctly instead of patching -- hookup lamps and do layouts -- use real values for reel tilemaps offsets instead of hardcoded ones (would fix magslot) -- game logic seems broken in mahjong games (reach permitted when it shouldn't be, chi not - permitted when it should be, other issues) +- work out remaining magslot lamps +- work out remaining sball2k1 I/O +- complete inputs and work out lamps for ballch and cots +- do layouts +- use real values for reel tilemaps offsets instead of hardcoded ones (would fix + magslot) +- game logic seems broken in mahjong games (Reach permitted when it shouldn't + be, Chi not permitted when it should be, other issues) - broken title GFX in yyhm (transparent pen problem?) - the newer games seem to use range 0x9e1000-0x9e1fff during gameplay +- if sball2k1 "Comma" DIP switch is set to "No. 6", the game will give a hopper + error on start - probably expects hopper on a different bit Video references: rbspm: https://www.youtube.com/watch?v=pPk-6N1wXoE @@ -136,6 +144,7 @@ public: , m_counters(*this, "COUNTERS") , m_dsw(*this, "DSW%u", 1U) , m_key(*this, "KEY%u", 0U) + , m_lamps(*this, "lamp%u", 1U) { } @@ -159,6 +168,7 @@ public: template <unsigned N> void counter_w(int state); protected: + virtual void machine_start() override ATTR_COLD; virtual void video_start() override ATTR_COLD; optional_shared_ptr_array<uint16_t, 2> m_vidram; @@ -177,6 +187,8 @@ protected: optional_ioport_array<4> m_dsw; optional_ioport_array<5> m_key; + output_finder<8> m_lamps; + uint16_t m_reels_toggle = 0; uint16_t m_tilebank = 0; tilemap_t *m_reel_tilemap[4]; @@ -184,6 +196,7 @@ protected: void super555_mem(address_map &map) ATTR_COLD; + void lamps_w(uint16_t data); template <uint8_t Which> void vram_w(offs_t offset, uint16_t data, uint16_t mem_mask); template <uint8_t Which> void reelram_w(offs_t offset, uint16_t data, uint16_t mem_mask); @@ -198,7 +211,7 @@ private: void ssanguoj_mem(address_map &map) ATTR_COLD; uint16_t unk_r(); - uint16_t input_matrix_r(); + uint16_t dipsw_matrix_r(); void input_matrix_w(uint16_t data); void tilebank_w(uint16_t data); void reels_toggle_w(uint16_t data); @@ -260,16 +273,18 @@ uint16_t gms_2layers_state::unk_r() return machine().rand(); } -uint16_t gms_2layers_state::input_matrix_r() +uint16_t gms_2layers_state::dipsw_matrix_r() { - uint16_t res = 0xffff; + uint16_t result = 0xffff; - // TODO: & 0x00ff are the inputs for keyboard mode in rbmk - if (m_input_matrix & 0x1000) res &= m_dsw[0]->read(); - if (m_input_matrix & 0x2000) res &= m_dsw[1].read_safe(0xffff); - if (m_input_matrix & 0x4000) res &= m_dsw[2].read_safe(0xffff); + if (m_input_matrix & 0x1000) + result &= m_dsw[0]->read(); + if (m_input_matrix & 0x2000) + result &= m_dsw[1].read_safe(0xffff); + if (m_input_matrix & 0x4000) + result &= m_dsw[2].read_safe(0xffff); - return res; + return result; } void gms_2layers_state::tilebank_w(uint16_t data) @@ -323,6 +338,32 @@ void gms_2layers_state::input_matrix_w(uint16_t data) m_oki->set_rom_bank(BIT(data, 15)); } +void gms_2layers_state::lamps_w(uint16_t data) +{ + // There seem to be eight lamps on the low eight bits (active high): + // +------+----------------------+----------+------------------+ + // | lamp | sball2k1 | sc2in1 | magslot | + // +------+----------------------+----------+------------------+ + // | 1 | Start | Start | Start | + // | 2 | Hold 2 | Hold 2 | ? | + // | 3 | Hold 4 | Hold 4 | ? | + // | 4 | Hold 1 | Hold 1 | ? | + // | 5 | Hold 3 | Hold 3 | ? | + // | 6 | Hold 5 | Hold 5 | Stop Reel 3 | + // | 7 | used in attract mode | credited | ? | + // | 8 | | Bet | ? | + // +------+----------------------+----------+------------------+ + // sball2k1 attract mode "chase" is 4, 2, 5, 3, 6, 7 + // magslot lamp 2 is Stop Reel 4, Stop Reel 5, Bet or Bet Max + // magslot lamp 3 is Stop Reel 4, Stop Reel 5, Bet or Bet Max + // magslot lamp 4 is Stop Reel 4, Stop Reel 5, Bet or Bet Max + // magslot lamp 5 is Stop Reel 1 or Stop Reel 2 + // magslot lamp 7 is Stop Reel 1 or Stop Reel 2 + // magslot lamp 8 is Stop Reel 4, Stop Reel 5, Bet or Bet Max + for (unsigned i = 0; 8 > i; ++i) + m_lamps[i] = BIT(data, i); +} + void gms_2layers_state::eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask) { if (ACCESSING_BITS_0_7) @@ -352,7 +393,7 @@ void gms_2layers_state::rbmk_mem(address_map &map) map(0x980380, 0x9803ff).ram().share(m_scrolly[3]); map(0x9c0000, 0x9c0fff).ram().w(FUNC(gms_2layers_state::vram_w<0>)).share(m_vidram[0]); map(0xb00000, 0xb00001).w(FUNC(gms_2layers_state::eeprom_w)); - map(0xc00000, 0xc00001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); + map(0xc00000, 0xc00001).rw(FUNC(gms_2layers_state::dipsw_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0xc08000, 0xc08001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); map(0xc10000, 0xc10001).portr("IN2"); map(0xc18080, 0xc18081).r(FUNC(gms_2layers_state::unk_r)); // TODO: from MCU? @@ -365,7 +406,7 @@ void gms_2layers_state::rbspm_mem(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x200001).w(FUNC(gms_2layers_state::reels_toggle_w)); - map(0x300000, 0x300001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); + map(0x300000, 0x300001).rw(FUNC(gms_2layers_state::dipsw_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0x308000, 0x308001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); // ok map(0x310000, 0x310001).portr("IN2"); map(0x318080, 0x318081).r(FUNC(gms_2layers_state::unk_r)); @@ -403,7 +444,7 @@ void gms_2layers_state::ssanguoj_mem(address_map &map) map(0x980300, 0x98037f).ram().share(m_scrolly[2]); map(0x980380, 0x9803ff).ram().share(m_scrolly[3]); map(0x9c0000, 0x9c0fff).ram().w(FUNC(gms_2layers_state::vram_w<0>)).share(m_vidram[0]); - map(0xa00000, 0xa00001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); + map(0xa00000, 0xa00001).rw(FUNC(gms_2layers_state::dipsw_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0xa08000, 0xa08001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); map(0xa10000, 0xa10001).portr("IN2"); map(0xa18080, 0xa18081).r(FUNC(gms_2layers_state::unk_r)); // TODO: from MCU? @@ -418,14 +459,14 @@ void gms_2layers_state::super555_mem(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); map(0x300000, 0x300001).w(FUNC(gms_2layers_state::reels_toggle_w)); - map(0x600000, 0x600001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); + map(0x600000, 0x600001).rw(FUNC(gms_2layers_state::dipsw_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0x608000, 0x608001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); // ok map(0x610000, 0x610001).portr("IN2"); map(0x618080, 0x618081).nopr();//.lr16(NAME([this] () -> uint16_t { return m_prot_data; })); // reads something here from below, if these are hooked up booting stops with '0x09 U64 ERROR', like it's failing some checksum test map(0x620000, 0x620000).r(m_oki, FUNC(okim6295_device::read)); // Oki controlled through a GAL at 18C // map(0x620080, 0x620081).lw16(NAME([this] (uint16_t data) { m_prot_data = data; })); // writes something here that expects to read above map(0x628000, 0x628000).w(m_oki, FUNC(okim6295_device::write)); - map(0x638000, 0x638001).nopw(); // lamps / outputs? + map(0x638000, 0x638001).w(FUNC(gms_2layers_state::lamps_w)); map(0x900000, 0x900fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x940000, 0x9403ff).ram().w(FUNC(gms_2layers_state::reelram_w<0>)).share(m_reelram[0]); map(0x940400, 0x9407ff).ram().w(FUNC(gms_2layers_state::reelram_w<1>)).share(m_reelram[1]); @@ -517,7 +558,6 @@ void gms_2layers_state::mcu_io(address_map &map) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ - PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0600, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ @@ -578,7 +618,9 @@ void gms_2layers_state::mcu_io(address_map &map) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_MODIFY("IN2") \ + PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) #define GMS_MAHJONG_COINAGE(tag, loc) \ PORT_DIPNAME( 0x0007, 0x0000, DEF_STR(Coinage) ) PORT_DIPLOCATION(loc ":1,2,3") /* 投幣比例 */ \ @@ -944,49 +986,49 @@ INPUT_PORTS_END static INPUT_PORTS_START( magslot ) PORT_START("COUNTERS") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // key-in - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin in + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // coin 2 in + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin 1 in PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) // key-out PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // coin out PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Bet Max") // seems to be used to bet the allowed maximum + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Stop All / Take Score") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL ) PORT_NAME("Bet Max") // seems to be used to bet the allowed maximum PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Show Info") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("9 Lines") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("3 Lines") - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("5 Lines") - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("1 Line") - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("7 Lines") - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Show Odds") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SLOT_STOP5 ) PORT_NAME("Stop 5 / Bet on 9 Lines") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Stop 2 / Bet on 3 Lines") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Stop 3 / Bet on 5 Lines / Double Up") + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Stop 1 / Bet on 1 Line") + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SLOT_STOP4 ) PORT_NAME("Stop 4 / Bet on 7 Lines") + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_START("IN2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_TOGGLE - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_TOGGLE + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // TODO: verify - // 3 8-dip banks on PCB + // 3 8-switch banks on PCB PORT_START("DSW1") // Game setup is password protected, needs reverse engineering of the password PORT_DIPNAME( 0x0001, 0x0000, "Game Password" ) PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) @@ -1069,23 +1111,23 @@ INPUT_PORTS_END static INPUT_PORTS_START( super555 ) PORT_START("COUNTERS") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // key-in - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin in + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // note in + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // credit in PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) // key-out - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // coin out + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // credit out PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME( "Start / Take" ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME( "Hold 2 / Double Up" ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Paytable" ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME( "Hold 1 / Double Up / Big" ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME( "Hold 3 / Double Up / Small" ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take Score") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME(u8"Hold 2 / Double Up × 1") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Show Odds") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME(u8"Hold 1 / Double Up × 2 / Big") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME(u8"Hold 3 / Double Up × ½ / Small") PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Draw Again") PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1096,48 +1138,48 @@ static INPUT_PORTS_START( super555 ) PORT_START("IN2") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BILL1 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) //PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // TODO: verify - - // There are 4 banks of 8 DIP switches on the PCB but only 3 are shown in test mode. DIP switch settings as per test mode. + // There are 4 banks of 8 DIP switches on the PCB but only 3 are shown in test mode. + // DIP switch settings as per test mode. PORT_START("DSW1") - PORT_DIPNAME( 0x0003, 0x0000, "Main Game Rate" ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x0003, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x0004, 0x0000, "Limit Over Score" ) PORT_DIPLOCATION("SW1:3") - PORT_DIPSETTING( 0x0000, "100.000" ) - PORT_DIPSETTING( 0x0004, "200.000" ) - PORT_DIPNAME( 0x0008, 0x0000, "Coin/Key In Over Score" ) PORT_DIPLOCATION("SW1:4") - PORT_DIPSETTING( 0x0000, "30.000" ) - PORT_DIPSETTING( 0x0008, "50.000" ) - PORT_DIPNAME( 0x0010, 0x0000, "W-Up Game" ) PORT_DIPLOCATION("SW1:5") - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0000, "W-Up Game Rate" ) PORT_DIPLOCATION("SW1:6") // only has effect if the above one is on. - PORT_DIPSETTING( 0x0020, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPNAME( 0x0040, 0x0000, "Auto Mode" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPNAME( 0x0003, 0x0000, "Main Game Payout Rate" ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x0003, DEF_STR(Easy) ) + PORT_DIPSETTING( 0x0000, DEF_STR(Normal) ) + PORT_DIPSETTING( 0x0002, DEF_STR(Hard) ) + PORT_DIPSETTING( 0x0001, DEF_STR(Hardest) ) + PORT_DIPNAME( 0x0004, 0x0000, "Score Limit" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x0000, "100,000" ) + PORT_DIPSETTING( 0x0004, "200,000" ) + PORT_DIPNAME( 0x0008, 0x0000, "Credit Limit" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x0000, "30,000" ) + PORT_DIPSETTING( 0x0008, "50,000" ) + PORT_DIPNAME( 0x0010, 0x0000, "Double Up Game" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x0010, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_DIPNAME( 0x0020, 0x0000, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("SW1:6") // only has effect if the above one is on. + PORT_DIPSETTING( 0x0020, DEF_STR(Easy) ) + PORT_DIPSETTING( 0x0000, DEF_STR(Normal) ) + PORT_DIPNAME( 0x0040, 0x0000, "Auto Mode" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x0040, "Good" ) PORT_DIPSETTING( 0x0000, "Hits" ) - PORT_DIPNAME( 0x0080, 0x0000, "Five Bars" ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Five Bars" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0000, "SW4:1" ) PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0000, "SW4:2" ) PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0000, "SW4:3" ) @@ -1148,53 +1190,81 @@ static INPUT_PORTS_START( super555 ) PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x0000, "SW4:8" ) PORT_START("DSW2") - PORT_DIPNAME( 0x0007, 0x0000, "Coin Rate" ) PORT_DIPLOCATION("SW2:1,2,3") - PORT_DIPSETTING( 0x0001, "5" ) - PORT_DIPSETTING( 0x0002, "10" ) - PORT_DIPSETTING( 0x0003, "20" ) - PORT_DIPSETTING( 0x0004, "30" ) - PORT_DIPSETTING( 0x0000, "50" ) - PORT_DIPSETTING( 0x0005, "100" ) - PORT_DIPSETTING( 0x0006, "200" ) - PORT_DIPSETTING( 0x0007, "300" ) - PORT_DIPNAME( 0x0018, 0x0000, "Coin x Times Rate" ) PORT_DIPLOCATION("SW2:4,5") - PORT_DIPSETTING( 0x0000, "2" ) - PORT_DIPSETTING( 0x0008, "5" ) - PORT_DIPSETTING( 0x0010, "10" ) - PORT_DIPSETTING( 0x0018, "20" ) - PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:6") - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0000, "Counter Jumping" ) PORT_DIPLOCATION("SW2:7") + PORT_DIPNAME( 0x0007, 0x0000, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW2:1,2,3") + PORT_DIPSETTING( 0x0001, DEF_STR(1C_5C) ) + PORT_DIPSETTING( 0x0002, "1 Coin/10 Credits" ) + PORT_DIPSETTING( 0x0003, "1 Coin/20 Credits" ) + PORT_DIPSETTING( 0x0004, "1 Coin/30 Credits" ) + PORT_DIPSETTING( 0x0000, "1 Coin/50 Credits" ) + PORT_DIPSETTING( 0x0005, "1 Coin/100 Credits" ) + PORT_DIPSETTING( 0x0006, "1 Coin/200 Credits" ) + PORT_DIPSETTING( 0x0007, "1 Coin/300 Credits" ) + PORT_DIPNAME( 0x0018, 0x0000, "Credits Per Note" ) PORT_DIPLOCATION("SW2:4,5") + PORT_DIPSETTING( 0x0018, "10" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0000, "25" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0008, "50" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0010, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0018, "20" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0000, "50" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0008, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0010, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0018, "40" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0000, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0008, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0010, "400" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0018, "60" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0000, "150" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0008, "300" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0010, "600" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0018, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0000, "250" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0008, "500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0010, "1000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0018, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0000, "500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0008, "1000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0010, "2000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0018, "400" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0000, "1000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0008, "2000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0010, "4000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0018, "600" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0000, "1500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0008, "3000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0010, "6000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_DIPNAME( 0x0040, 0x0000, "Counter Jumping" ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x0040, "By Keyin Rate" ) PORT_DIPSETTING( 0x0000, "By Coin Rate" ) - PORT_DIPNAME( 0x0080, 0x0000, "Cards Voice" ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Gal Voice" ) PORT_DIPLOCATION("SW2:8") // announces winning hands + PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) PORT_START("DSW3") - PORT_DIPNAME( 0x0003, 0x0000, "Min. Bet" ) PORT_DIPLOCATION("SW3:1,2") + PORT_DIPNAME( 0x0003, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("SW3:1,2") PORT_DIPSETTING( 0x0000, "10" ) PORT_DIPSETTING( 0x0001, "20" ) PORT_DIPSETTING( 0x0002, "30" ) PORT_DIPSETTING( 0x0003, "50" ) - PORT_DIPNAME( 0x000c, 0x0000, "Max. Bet" ) PORT_DIPLOCATION("SW3:3,4") + PORT_DIPNAME( 0x000c, 0x0000, "Maximum Bet" ) PORT_DIPLOCATION("SW3:3,4") PORT_DIPSETTING( 0x0000, "50" ) PORT_DIPSETTING( 0x0004, "100" ) PORT_DIPSETTING( 0x0008, "150" ) PORT_DIPSETTING( 0x000c, "200" ) - PORT_DIPNAME( 0x0010, 0x0000, "Connector" ) PORT_DIPLOCATION("SW3:5") // Hardcoded to JAMMA + PORT_DIPNAME( 0x0010, 0x0000, "Connector" ) PORT_DIPLOCATION("SW3:5") // hard-coded to JAMMA (no suport for mahjong matrix) PORT_DIPSETTING( 0x0010, "JAMMA" ) PORT_DIPSETTING( 0x0000, "JAMMA" ) - PORT_DIPNAME( 0x0020, 0x0000, "Card Choice" ) PORT_DIPLOCATION("SW3:6") // also changes title screen - PORT_DIPSETTING( 0x0020, "Car" ) // city skyline title screen - PORT_DIPSETTING( 0x0000, "Poker" ) // lady in red with card title screen - PORT_DIPNAME( 0x0040, 0x0000, "Last Game Mode" ) PORT_DIPLOCATION("SW3:7") - PORT_DIPSETTING( 0x0040, "Rechoice Card" ) - PORT_DIPSETTING( 0x0000, "Only 6 Card" ) - PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:8") // not shown in test mode - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, "Card Display" ) PORT_DIPLOCATION("SW3:6") // also changes title screen + PORT_DIPSETTING( 0x0020, "Car Cards" ) // city skyline title screen + PORT_DIPSETTING( 0x0000, "Poker Cards" ) // lady in red with card title screen + PORT_DIPNAME( 0x0040, 0x0000, "Draw Again Mode" ) PORT_DIPLOCATION("SW3:7") // controls what happens if you press Hold 5 (LAST) with a winning hand + PORT_DIPSETTING( 0x0040, "Discard and Draw" ) // choose cards to hold and deal replacements + PORT_DIPSETTING( 0x0000, "Deal Sixth Card" ) // deal one additional card + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW3:8") // not shown in test mode + PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) INPUT_PORTS_END static INPUT_PORTS_START( sscs ) @@ -1212,25 +1282,27 @@ static INPUT_PORTS_START( sscs ) // Double Up Double Up × 1 // Big Double Up × ½ Small // Small Take Score + // Counters are credit in, key-in, credit out, key-out GMS_MAHJONG_KEYBOARD("DSW2", 0x80, 0x80) PORT_MODIFY("IN1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Showdown / Take Score") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 開牌鍵 - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Raise × 5 / Double Up × 1") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // ×5 (up in bookkeeping, up in test mode) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // (down in test mode) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Raise × 1 / Double Up × 2 / Big") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // ×1 (down in bookkeeping) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Raise × 10 / Double Up × ½ / Small") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 加押 - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Call / Bet / Take Score") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 跟/押鍵 - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Fold") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 放棄 - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Hole Card") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 看牌 (select in test mode) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Showdown / Take Score") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 開牌鍵 + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME(u8"Raise × 5 / Double Up × 1") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // ×5 (up in bookkeeping, up in test mode) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // (down in test mode) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME(u8"Raise × 1 / Double Up × 2 / Big") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // ×1 (down in bookkeeping) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME(u8"Raise × 10 / Double Up × ½ / Small") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 加押 + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Call / Bet / Take Score") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 跟/押鍵 + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Fold") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 放棄 + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Hole Card") PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) // 看牌 (select in test mode) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) PORT_MODIFY("IN2") + PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1350,6 +1422,15 @@ static INPUT_PORTS_START( sscs ) INPUT_PORTS_END static INPUT_PORTS_START( sc2in1 ) + // Controls for the games (double up game is the same for both games): + // Show Hand 5 Poker Double Up + // Start Start Start Deal Take Score Take Score + // Bet Bet Bet + // Hold 1 Exit Exit Hold 1 + // Hold 2 Up Hold 2 Up + // Hold 3 Select/Confirm Hold 3 Big + // Hold 4 Down Hold 4 Double Up Down + // Hold 5 View Hole Card Hold 5 Draw Again Small PORT_START("COUNTERS") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // key-in PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin in @@ -1361,12 +1442,12 @@ static INPUT_PORTS_START( sc2in1 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME( "Start / Take" ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME( "Hold 2 / Double Up" ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME( "Hold 1 / Double Up / Big" ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME( "Hold 3 / Double Up / Small" ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take Score" ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Up" ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Down / Double Up") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Exit" ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Select / Big" ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / View Hole Card / Draw Again / Small") PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1378,17 +1459,17 @@ static INPUT_PORTS_START( sc2in1 ) PORT_START("IN2") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1429,7 +1510,7 @@ static INPUT_PORTS_START( jinpaish ) // Double Up Down Double Up Select Opponent // Big View Hole Card Small Select Opponent // Small Take Score Select Opponent - // Seems to be no Up control in mahjong keyboard mode. + // There seems to be no Up control in mahjong keyboard mode. GMS_MAHJONG_KEYBOARD("DSW1", 0x80, 0x80) PORT_MODIFY("IN1") @@ -1449,6 +1530,7 @@ static INPUT_PORTS_START( jinpaish ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_MODIFY("IN2") + PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1466,7 +1548,7 @@ static INPUT_PORTS_START( jinpaish ) PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 PORT_DIPNAME( 0x0040, 0x0000, DEF_STR(Service_Mode) ) PORT_DIPLOCATION("SW1:7") // 遊戲設定 PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 正常 - PORT_DIPSETTING( 0x0040, "Power On" ) // 開機進入 (boots to setup menu - default password is Start eight times) + PORT_DIPSETTING( 0x0040, "Power On" ) // 開機進入 (boots to setup menu) PORT_DIPNAME( 0x0080, 0x0000, DEF_STR(Controls) ) PORT_DIPLOCATION("SW1:8") // 操作介面 PORT_DIPSETTING( 0x0000, DEF_STR(Joystick) ) // 娛樂 PORT_DIPSETTING( 0x0080, "Mahjong" ) // 麻將 @@ -1490,12 +1572,12 @@ static INPUT_PORTS_START( baile ) PORT_MODIFY("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Draw / Take Score") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet on Tie") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Bet on Tie") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet on Player / Big") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bet on Banker / Small") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Bet Multiplier") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Peek at Card / Show Odds") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Bet on Player / Big") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Bet on Banker / Small") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet Multiplier") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Peek at Card / Show Odds") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel Bets") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) @@ -1504,6 +1586,7 @@ static INPUT_PORTS_START( baile ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_MODIFY("IN2") + PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1549,7 +1632,7 @@ static INPUT_PORTS_START( yyhm ) PORT_DIPNAME( 0x0004, 0x0004, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:3") // 示範音樂 PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 PORT_DIPSETTING( 0x0004, DEF_STR(On) ) // 有 - PORT_DIPNAME( 0x0008, 0x0008, "Score Display" ) PORT_DIPLOCATION("SW1:4") // 計分方式 + PORT_DIPNAME( 0x0008, 0x0008, "Score Display Mode" ) PORT_DIPLOCATION("SW1:4") // 計分方式 PORT_DIPSETTING( 0x0008, "Numbers" ) // 數字計分 PORT_DIPSETTING( 0x0000, "Circle Tiles" ) // 筒子計分 PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5") // No effect listed in test mode @@ -1811,34 +1894,39 @@ static INPUT_PORTS_START( cots ) INPUT_PORTS_END -static INPUT_PORTS_START( sball2k1 ) // default password for accessing game settings is all Start +static INPUT_PORTS_START( sball2k1 ) + // Recognises payout/key-out in input test, but doesn't seem to use them (probably an "amusement only" game). + // TODO: the game shows a 7th button, but when is it used and which bit is it? + // TODO: IN1 0x0008 and IN1 0x0400 in attract mode cause the game to show top 10 and last 10 score lists - what are these inputs for? PORT_START("COUNTERS") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // key-in - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin in + //PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) what is this? high when "PARTITE" (games/credits) is 9 or lower + //PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) what is this? used for something PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) // key-out - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // coin out + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // coin out + //PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) what is this? high when "PARTITE" (games/credits) is 10 or higher + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin 1 in + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // coin 2 in PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // input test calls this "TEST" but it functions as bookkeeping PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what is this? shows top ten and last ten scores in attract mode + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double Up") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Big") PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Bet / Draw Again") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take Score") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what is this? shows top ten and last ten scores in attract mode + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN2") - PORT_SERVICE_NO_TOGGLE(0x01, IP_ACTIVE_LOW) + PORT_SERVICE_NO_TOGGLE(0x01, IP_ACTIVE_LOW) // input test calls this "ANALYZER" but it functions as test PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1846,31 +1934,31 @@ static INPUT_PORTS_START( sball2k1 ) // default password for accessing game sett PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) //PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // TODO: verify - - // There are 4 banks of 8 DIP switches on the PCB but only 1 is shown in test mode. DIP switch settings as per test mode. Other settings seem to be determined by software. + // There are 4 banks of 8 DIP switches on the PCB but only 1 is shown in test mode. + // DIP switch settings as per test mode. Other settings seem to be determined by software. PORT_START("DSW1") - PORT_DIPNAME( 0x0001, 0x0000, "Play Mode" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPNAME( 0x0001, 0x0000, "Play Mode" ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0001, "Games" ) - PORT_DIPSETTING( 0x0000, DEF_STR( Lives ) ) - PORT_DIPNAME( 0x0002, 0x0000, DEF_STR ( Unused ) ) PORT_DIPLOCATION("SW1:2") // 'No Use' according to test mode - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0000, "Ability Game" ) PORT_DIPLOCATION("SW1:3") - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0000, "Reg. Ability" ) PORT_DIPLOCATION("SW1:4") // sic. Regulate? - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x0000, DEF_STR(Lives) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR(Unused) ) PORT_DIPLOCATION("SW1:2") // 'No Use' according to test mode + PORT_DIPSETTING( 0x0002, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_DIPNAME( 0x0004, 0x0000, "Ability Game" ) PORT_DIPLOCATION("SW1:3") // controls whether the "hit the red ball" game is required when starting + PORT_DIPSETTING( 0x0004, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_DIPNAME( 0x0008, 0x0000, "Double Up Game" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x0008, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) PORT_DIPNAME( 0x0010, 0x0000, "One Game" ) PORT_DIPLOCATION("SW1:5") // "One Partite" in test mode, seems a mix of English and Italian PORT_DIPSETTING( 0x0000, "10 Lives" ) PORT_DIPSETTING( 0x0010, "20 Lives" ) @@ -2034,197 +2122,190 @@ static INPUT_PORTS_START( cjdlz ) INPUT_PORTS_END static INPUT_PORTS_START( hgly ) - PORT_START("COUNTERS") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) // key-in - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) // coin in - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) // key-out - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) // coin out + // Mahjong keyboard controls: + // A Hold Reel 1 Stop Reel 1 + // B Hold Reel 2 Stop Reel 2 + // C Hold Reel 3 Stop Reel 3 + // Start Start Stop All Reels Take Score + // Bet Bet + // Take Score Double Up × 2 Big + // Double Up Double Up × 1 + // Big Double Up × ½ Small + // Small Take Score + // There seems to be no Show Odds control in mahjong keyboard mode. + // Counters are credit in, key-in, credit out, key-out + GMS_MAHJONG_KEYBOARD("DSW3", 0x0040, 0x0040) - PORT_START("IN1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) // start in test mode - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "Paytable" ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Start Slot" ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no evident effect + PORT_MODIFY("IN1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Stop All") PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) // also functions as Take Score + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL ) PORT_NAME("Show Odds") PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) - PORT_START("IN2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_MODIFY("IN2") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME(u8"Double Up × 1") PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME(u8"Double Up × 2 / Big") PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME(u8"Double Up × ½ / Small") PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3", 0x0040, NOTEQUALS, 0x0040) //PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // TODO: verify // Only 4 DIP banks are actually populated on PCBs but test mode reads all 6. - // TODO: DIPs - PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as dsw1, second 8 as dsw4. - PORT_DIPNAME( 0x0007, 0x0000, "Card Play Rate" ) PORT_DIPLOCATION("DSW1:1,2,3") - PORT_DIPSETTING( 0x0001, "91" ) - PORT_DIPSETTING( 0x0002, "92" ) - PORT_DIPSETTING( 0x0003, "93" ) - PORT_DIPSETTING( 0x0004, "94" ) - PORT_DIPSETTING( 0x0005, "95" ) - PORT_DIPSETTING( 0x0000, "96" ) - PORT_DIPSETTING( 0x0006, "97" ) - PORT_DIPSETTING( 0x0007, "98" ) - PORT_DIPNAME( 0x0008, 0x0000, "Hold Card" ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0000, "Direct Double Up" ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0000, "Double Up Option" ) PORT_DIPLOCATION("DSW1:6") - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x0000, "Double Up Probability" ) PORT_DIPLOCATION("DSW1:7,8") - PORT_DIPSETTING( 0x0040, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Medium ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Difficult ) ) - PORT_DIPSETTING( 0x00c0, DEF_STR( Very_Difficult ) ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW4:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0e00, 0x0000, "Break Taiwan Restrictions" ) PORT_DIPLOCATION("DSW4:2,3,4") // TODO: fishy machine translations - PORT_DIPSETTING( 0x0600, "5000" ) - PORT_DIPSETTING( 0x0800, "10000" ) - PORT_DIPSETTING( 0x0a00, "20000" ) - PORT_DIPSETTING( 0x0000, "30000" ) - PORT_DIPSETTING( 0x0c00, "50000" ) - PORT_DIPSETTING( 0x0e00, "90000" ) - PORT_DIPSETTING( 0x0200, "200000" ) - PORT_DIPSETTING( 0x0400, "500000" ) - PORT_DIPNAME( 0x3000, 0x0000, "Score Limit" ) PORT_DIPLOCATION("DSW4:5,6") - PORT_DIPSETTING( 0x0000, "5000" ) - PORT_DIPSETTING( 0x1000, "10000" ) - PORT_DIPSETTING( 0x2000, "30000" ) - PORT_DIPSETTING( 0x3000, "50000" ) - PORT_DIPNAME( 0x4000, 0x0000, "Double-Up Game Jackpot" ) PORT_DIPLOCATION("DSW4:7") - PORT_DIPSETTING( 0x4000, "10000" ) - PORT_DIPSETTING( 0x0000, "Unlimited" ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:8") // not defined in test mode - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - + PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as DSW1, second 8 as DSW4. + PORT_DIPNAME( 0x0007, 0x0000, "Payout Rate" ) PORT_DIPLOCATION("DSW1:1,2,3") // 出牌率 + PORT_DIPSETTING( 0x0001, "91%" ) + PORT_DIPSETTING( 0x0002, "92%" ) + PORT_DIPSETTING( 0x0003, "93%" ) + PORT_DIPSETTING( 0x0004, "94%" ) + PORT_DIPSETTING( 0x0005, "95%" ) + PORT_DIPSETTING( 0x0000, "96%" ) + PORT_DIPSETTING( 0x0006, "97%" ) + PORT_DIPSETTING( 0x0007, "98%" ) + PORT_DIPNAME( 0x0008, 0x0000, "Hold Function" ) PORT_DIPLOCATION("DSW1:4") // HOLD 牌功能 + PORT_DIPSETTING( 0x0008, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0010, 0x0000, "Direct Double Up" ) PORT_DIPLOCATION("DSW1:5") // 直接比倍 + PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0010, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0020, 0x0000, "Double Up Game" ) PORT_DIPLOCATION("DSW1:6") // 比倍有無 + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x00c0, 0x0000, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DSW1:7,8") // 比倍機率 + PORT_DIPSETTING( 0x0040, DEF_STR(Easy) ) // 易 + PORT_DIPSETTING( 0x0000, DEF_STR(Medium) ) // 中 + PORT_DIPSETTING( 0x0080, DEF_STR(Difficult) ) // 難 + PORT_DIPSETTING( 0x00c0, DEF_STR(Very_Difficult) ) // 困難 + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DSW4:1") // 示範音樂 + PORT_DIPSETTING( 0x0100, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0e00, 0x0000, "Jackpot Limit" ) PORT_DIPLOCATION("DSW4:2,3,4") // 破台限制 + PORT_DIPSETTING( 0x0600, "5,000" ) + PORT_DIPSETTING( 0x0800, "10,000" ) + PORT_DIPSETTING( 0x0a00, "20,000" ) + PORT_DIPSETTING( 0x0000, "30,000" ) + PORT_DIPSETTING( 0x0c00, "50,000" ) + PORT_DIPSETTING( 0x0e00, "90,000" ) + PORT_DIPSETTING( 0x0200, "200,000" ) + PORT_DIPSETTING( 0x0400, "500,000" ) + PORT_DIPNAME( 0x3000, 0x0000, "Credit Limit" ) PORT_DIPLOCATION("DSW4:5,6") // 進分上限 + PORT_DIPSETTING( 0x0000, "5,000" ) + PORT_DIPSETTING( 0x1000, "1,0000" ) + PORT_DIPSETTING( 0x2000, "30,000" ) + PORT_DIPSETTING( 0x3000, "50,000" ) + PORT_DIPNAME( 0x4000, 0x0000, "Double Up Game Jackpot" ) PORT_DIPLOCATION("DSW4:7") // 比倍爆機 + PORT_DIPSETTING( 0x4000, "10,000" ) + PORT_DIPSETTING( 0x0000, "Unlimited" ) // 無限制 + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR(Unknown) ) PORT_DIPLOCATION("DSW4:8") // not defined in test mode + PORT_DIPSETTING( 0x8000, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) - PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as dsw2, second 8 as dsw5 - PORT_DIPNAME( 0x0007, 0x0000, "Coin Ratio" ) PORT_DIPLOCATION("DSW2:1,2,3") - PORT_DIPSETTING( 0x0001, "1" ) - PORT_DIPSETTING( 0x0002, "2" ) - PORT_DIPSETTING( 0x0003, "5" ) - PORT_DIPSETTING( 0x0000, "10" ) - PORT_DIPSETTING( 0x0004, "20" ) - PORT_DIPSETTING( 0x0005, "50" ) - PORT_DIPSETTING( 0x0006, "100" ) - PORT_DIPSETTING( 0x0007, "300" ) - PORT_DIPNAME( 0x0018, 0x0000, "Coin x Score Multiplier" ) PORT_DIPLOCATION("DSW2:4,5") - PORT_DIPSETTING( 0x0008, "2" ) - PORT_DIPSETTING( 0x0010, "5" ) - PORT_DIPSETTING( 0x0000, "10" ) - PORT_DIPSETTING( 0x0018, "20" ) - PORT_DIPNAME( 0x0020, 0x0000, "Bonus Minimum Bet" ) PORT_DIPLOCATION("DSW2:6") + PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as DSW2, second 8 as DSW5 + PORT_DIPNAME( 0x0007, 0x0000, DEF_STR(Coinage) ) PORT_DIPLOCATION("DSW2:1,2,3") // 投幣比例 + PORT_DIPSETTING( 0x0001, DEF_STR(1C_1C) ) + PORT_DIPSETTING( 0x0002, DEF_STR(1C_2C) ) + PORT_DIPSETTING( 0x0003, DEF_STR(1C_5C) ) + PORT_DIPSETTING( 0x0000, "1 Coin/10 Credits" ) + PORT_DIPSETTING( 0x0004, "1 Coin/20 Credits" ) + PORT_DIPSETTING( 0x0005, "1 Coin/50 Credits" ) + PORT_DIPSETTING( 0x0006, "1 Coin/100 Credits" ) + PORT_DIPSETTING( 0x0007, "1 Coin/300 Credits" ) + PORT_DIPNAME( 0x0018, 0x0000, "Key-In Rate" ) PORT_DIPLOCATION("DSW2:4,5") // 投幣×開分倍率 + PORT_DIPSETTING( 0x0008, "2" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0010, "5" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0000, "10" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0018, "20" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0001) + PORT_DIPSETTING( 0x0008, "4" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0010, "10" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0000, "20" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0018, "40" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0002) + PORT_DIPSETTING( 0x0008, "10" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0010, "25" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0000, "50" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0018, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0003) + PORT_DIPSETTING( 0x0008, "20" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0010, "50" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0000, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0018, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0008, "40" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0010, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0000, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0018, "400" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0004) + PORT_DIPSETTING( 0x0008, "100" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0010, "250" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0000, "500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0018, "1000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0005) + PORT_DIPSETTING( 0x0008, "200" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0010, "500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0000, "1000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0018, "2000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0006) + PORT_DIPSETTING( 0x0008, "600" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0010, "1500" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0000, "3000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPSETTING( 0x0018, "6000" ) PORT_CONDITION("DSW2", 0x0007, EQUALS, 0x0007) + PORT_DIPNAME( 0x0020, 0x0000, "Minimum Bet for Bonus" ) PORT_DIPLOCATION("DSW2:6") // BONUS 最小押分 PORT_DIPSETTING( 0x0000, "32" ) PORT_DIPSETTING( 0x0020, "64" ) - PORT_DIPNAME( 0x0040, 0x0000, "Payout Model" ) PORT_DIPLOCATION("DSW2:7") - PORT_DIPSETTING( 0x0040, "Key Out" ) - PORT_DIPSETTING( 0x0000, "Coin" ) - PORT_DIPNAME( 0x0080, 0x0000, "Pool Initial Score" ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPNAME( 0x0040, 0x0000, "Payout Mode" ) PORT_DIPLOCATION("DSW2:7") // 退幣退票方式 + PORT_DIPSETTING( 0x0000, "Return Coins" ) // 以投幣計 + PORT_DIPSETTING( 0x0040, "Key-Out" ) // 以開分計 + PORT_DIPNAME( 0x0080, 0x0000, "Initial Pool Points" ) PORT_DIPLOCATION("DSW2:8") // POOL 起始分數 PORT_DIPSETTING( 0x0080, "500" ) PORT_DIPSETTING( 0x0000, "1000" ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:2") - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:3") - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:4") - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:5") - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:6") - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:7") - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) // DSW5 shown in input test but not physically present + //PORT_DIPUNUSED_DIPLOC( 0x0100, 0x0000, "DSW5:1") + //PORT_DIPUNUSED_DIPLOC( 0x0200, 0x0000, "DSW5:2") + //PORT_DIPUNUSED_DIPLOC( 0x0400, 0x0000, "DSW5:3") + //PORT_DIPUNUSED_DIPLOC( 0x0800, 0x0000, "DSW5:4") + //PORT_DIPUNUSED_DIPLOC( 0x1000, 0x0000, "DSW5:5") + //PORT_DIPUNUSED_DIPLOC( 0x2000, 0x0000, "DSW5:6") + //PORT_DIPUNUSED_DIPLOC( 0x4000, 0x0000, "DSW5:7") + //PORT_DIPUNUSED_DIPLOC( 0x8000, 0x0000, "DSW5:8") - PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as dsw3, second 8 as dsw6 - PORT_DIPNAME( 0x0003, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:1,2") // hard-coded + PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as DSW3, second 8 as DSW6 + PORT_DIPNAME( 0x0003, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:1,2") // 最小押分 (only one setting) PORT_DIPSETTING( 0x0000, "32" ) - PORT_DIPSETTING( 0x0001, "32 (duplicate)" ) - PORT_DIPSETTING( 0x0002, "32 (duplicate)" ) - PORT_DIPSETTING( 0x0003, "32 (duplicate)" ) - PORT_DIPNAME( 0x000c, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:3,4") // semi hard-coded + PORT_DIPSETTING( 0x0001, "32" ) + PORT_DIPSETTING( 0x0002, "32" ) + PORT_DIPSETTING( 0x0003, "32" ) + PORT_DIPNAME( 0x000c, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:3,4") // 最大押分 (only two settings) PORT_DIPSETTING( 0x0000, "200" ) - PORT_DIPSETTING( 0x0004, "200 (duplicate)" ) - PORT_DIPSETTING( 0x0008, "200 (duplicate)" ) + PORT_DIPSETTING( 0x0004, "200" ) + PORT_DIPSETTING( 0x0008, "200" ) PORT_DIPSETTING( 0x000c, "360" ) - PORT_DIPNAME( 0x0010, 0x0000, "Bet Every Time" ) PORT_DIPLOCATION("DSW3:5") // hard-coded + PORT_DIPNAME( 0x0010, 0x0000, "Bet Increment" ) PORT_DIPLOCATION("DSW3:5") // 每次押分 (only one setting) + PORT_DIPSETTING( 0x0000, "4" ) PORT_DIPSETTING( 0x0010, "4" ) - PORT_DIPSETTING( 0x0000, "4 (duplicate)" ) - PORT_DIPNAME( 0x0020, 0x0000, "Scoring" ) PORT_DIPLOCATION("DSW3:6") - PORT_DIPSETTING( 0x0020, "Numbers" ) - PORT_DIPSETTING( 0x0000, "Circle Tiles" ) - PORT_DIPNAME( 0x0040, 0x0000, "Controls" ) PORT_DIPLOCATION("DSW3:7") - PORT_DIPSETTING( 0x0000, DEF_STR( Joystick ) ) - PORT_DIPSETTING( 0x0040, "Keyboard" ) - PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:8") // not defined in test mode - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:2") - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:3") - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:4") - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:5") - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:6") - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:7") - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, "Score Display Mode" ) PORT_DIPLOCATION("DSW3:6") // 計分方式 + PORT_DIPSETTING( 0x0020, "Numbers" ) // 數字 + PORT_DIPSETTING( 0x0000, "Circle Tiles" ) // 筒子 + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR(Controls) ) PORT_DIPLOCATION("DSW3:7") // 操作介面 + PORT_DIPSETTING( 0x0000, DEF_STR(Joystick) ) // 娛樂 + PORT_DIPSETTING( 0x0040, "Mahjong" ) // 麻將 + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR(Unknown) ) PORT_DIPLOCATION("DSW3:8") // not defined in test mode + PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) // DSW6 shown in input test but not physically present + //PORT_DIPUNUSED_DIPLOC( 0x0100, 0x0000, "DSW6:1") + //PORT_DIPUNUSED_DIPLOC( 0x0200, 0x0000, "DSW6:2") + //PORT_DIPUNUSED_DIPLOC( 0x0400, 0x0000, "DSW6:3") + //PORT_DIPUNUSED_DIPLOC( 0x0800, 0x0000, "DSW6:4") + //PORT_DIPUNUSED_DIPLOC( 0x1000, 0x0000, "DSW6:5") + //PORT_DIPUNUSED_DIPLOC( 0x2000, 0x0000, "DSW6:6") + //PORT_DIPUNUSED_DIPLOC( 0x4000, 0x0000, "DSW6:7") + //PORT_DIPUNUSED_DIPLOC( 0x8000, 0x0000, "DSW6:8") INPUT_PORTS_END @@ -2264,6 +2345,16 @@ static GFXDECODE_START( gfx_magslot ) GFXDECODE_ENTRY( "gfx3", 0, gfx_8x8x4_packed_lsb, 0x400, 16 ) GFXDECODE_END +void gms_2layers_state::machine_start() +{ + m_lamps.resolve(); + + save_item(NAME(m_reels_toggle)); + save_item(NAME(m_tilebank)); + save_item(NAME(m_mux_data)); + save_item(NAME(m_input_matrix)); +} + void gms_2layers_state::video_start() { m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gms_2layers_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); @@ -2280,11 +2371,6 @@ void gms_2layers_state::video_start() //m_tilemap[0]->set_transparent_pen(0); m_tilemap[0]->set_transparent_pen(0); - - save_item(NAME(m_reels_toggle)); - save_item(NAME(m_tilebank)); - save_item(NAME(m_mux_data)); - save_item(NAME(m_input_matrix)); } void gms_3layers_state::video_start() @@ -3101,7 +3187,6 @@ void gms_2layers_state::init_cjdlz() { uint16_t *rom = (uint16_t *)memregion("maincpu")->base(); - rom[0x00518 / 2] = 0x4e71; // 0xD REPAIR rom[0x0c628 / 2] = 0x6000; // 0x99 REPAIR rom[0x0c8e6 / 2] = 0x4e71; // loop diff --git a/src/mame/misc/umipoker.cpp b/src/mame/misc/umipoker.cpp index 2b264d9ca7a..69537f50642 100644 --- a/src/mame/misc/umipoker.cpp +++ b/src/mame/misc/umipoker.cpp @@ -15,8 +15,10 @@ TODO: - Verify clocks (XTALs are 14.3181 and 2.000MHz) + - vparais stops at 'renewal is necessary' screen. Find out + how / where it checks the expiration - TMP68HC000-16 + z80 + YM3812 + OKI6295 + TMP68HC000-16 + Z80 + YM3812 + OKI6295 ***************************************************************************/ @@ -736,6 +738,25 @@ ROM_START( saiyukip ) ROM_CONTINUE( 0x000000, 0x040000 ) ROM_END +ROM_START( vparadis ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "vp8.u61", 0x00000, 0x20000, CRC(90fdd735) SHA1(45cf9f4cba66edd504fdb6bb80ca55a718258001) ) + ROM_LOAD16_BYTE( "vp7.u60", 0x00001, 0x20000, CRC(8142c769) SHA1(d40321f0b0186b87b7c3502919e094afd279b7d7) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "vp6.u8", 0x00000, 0x10000, CRC(97b37149) SHA1(592e5f451d3417961c64b49a32eb863fc9d7d9b9) ) // 11xxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "vp1.u39", 0x00000, 0x20000, CRC(6c969a60) SHA1(b9ef74840f88de23e97e3ef26f8a478187e8cdf1) ) + ROM_LOAD( "vp2.u40", 0x20000, 0x20000, CRC(cd915bad) SHA1(37752f94cc0edbca666b8a6f231513e1e9ac3eeb) ) + ROM_LOAD( "vp3.u41", 0x40000, 0x20000, CRC(383e74ad) SHA1(662c57756df43ef6455b0bf56c3e170bd7dd8733) ) + ROM_LOAD( "vp4.u42", 0x60000, 0x20000, CRC(7bdeba05) SHA1(3add05d409caf4474bd2912a97109e00e6711827) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "vp5.u17", 0x00000, 0x40000, CRC(3826a230) SHA1(f55c565dc105dfb11668936ca86b1b84d0dd1610) ) + ROM_IGNORE( 0x40000 ) // 1ST AND 2ND HALF IDENTICAL +ROM_END + } // anonymous namespace @@ -747,3 +768,4 @@ ROM_END GAME( 1997, umipoker, 0, umipoker, umipoker, umipoker_state, empty_init, ROT0, "World Station Co.,LTD", "Umi de Poker / Marine Paradise (Japan, newer)", MACHINE_SUPPORTS_SAVE ) // title screen is toggleable thru a dsw GAME( 1997, umipokera, umipoker, umipoker, umipoker, umipoker_state, empty_init, ROT0, "World Station Co.,LTD", "Umi de Poker / Marine Paradise (Japan, older)", MACHINE_SUPPORTS_SAVE ) // title screen is toggleable thru a dsw GAMEL( 1998, saiyukip, 0, saiyukip, saiyukip, saiyukip_state, empty_init, ROT0, "World Station Co.,LTD", "Slot Poker Saiyuki (Japan)", MACHINE_SUPPORTS_SAVE, layout_saiyukip ) +GAME( 2002, vparadis, 0, umipoker, umipoker, umipoker_state, empty_init, ROT0, "Paradise", "Victory Paradise (V9)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/wing/luckgrln.cpp b/src/mame/wing/luckgrln.cpp index 40a805d52a6..899721fc066 100644 --- a/src/mame/wing/luckgrln.cpp +++ b/src/mame/wing/luckgrln.cpp @@ -940,6 +940,24 @@ ROM_START( luckstrn ) ROM_LOAD( "6.r1", 0x40000, 0x20000, CRC(16823fb7) SHA1(e62b5fbf7a105df128dd9dd6d45e59f0ffef5bb8) ) ROM_END +ROM_START( luckstrna ) + ROM_REGION( 0x4000, "maincpu", 0 ) // internal Z180 ROM + ROM_LOAD( "internal_rom", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x20000, "rom_data", 0 ) // external data / CPU ROM + ROM_LOAD( "16.t1", 0x00000, 0x20000, CRC(1906dd3e) SHA1(35c7d5a6f2dc6291ab5e40ab56951ac7b384ff16) ) + + ROM_REGION( 0x60000, "reels", 0 ) + ROM_LOAD( "1.c1", 0x00000, 0x20000, CRC(1fca2f4f) SHA1(e54595e387c3a742ebf777a2c2795c2d64ec166b) ) // 1ST AND 2ND HALF IDENTICAL, half unused, 5bpp + ROM_LOAD( "2.e1", 0x20000, 0x20000, CRC(311a1801) SHA1(ed822dc5b38408221dfbde767abd675c53a766f8) ) + ROM_LOAD( "3.h1", 0x40000, 0x20000, CRC(ae557bbd) SHA1(4b4ddb5fbb36019c4bd0cfab6a229f3ad09ac95a) ) + + ROM_REGION( 0x60000, "gfx2", 0 ) + ROM_LOAD( "4.l1", 0x00000, 0x20000, CRC(00a1b66d) SHA1(107306689032d5a56fc9337e22a447bad4c371e4) ) // half unused, 5bpp + ROM_LOAD( "5.n1", 0x20000, 0x20000, CRC(df29763e) SHA1(5468cccae98aa7e5b141cdb1fc899f418c79f6e7) ) + ROM_LOAD( "6.r1", 0x40000, 0x20000, CRC(16823fb7) SHA1(e62b5fbf7a105df128dd9dd6d45e59f0ffef5bb8) ) +ROM_END + ROM_START( 7smash ) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "eagle.8", 0x000000, 0x020000, CRC(b115c5d5) SHA1(3f80613886b7f8092ec914c9bfb416078aca82a3) ) @@ -967,7 +985,8 @@ ROM_END * Game Drivers * **********************************************/ -// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULL NAME FLAGS LAYOUT -GAMEL( 1991, luckgrln, 0, luckgrln, luckgrln, luckgrln_state, init_luckgrln, ROT0, "Wing Co., Ltd.", "Lucky Girl (newer Z180-based hardware)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_luckgrln ) -GAMEL( 1991, luckstrn, 0, luckgrln, luckgrln, luckgrln_state, init_luckgrln, ROT0, "Wing Co., Ltd.", "Lucky Star (newer Z180-based hardware)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_luckgrln ) // missing internal ROM dump -GAMEL( 1993, 7smash, 0, _7smash, _7smash, luckgrln_state, empty_init, ROT0, "Sovic", "7 Smash", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_7smash ) +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULL NAME FLAGS LAYOUT +GAMEL( 1991, luckgrln, 0, luckgrln, luckgrln, luckgrln_state, init_luckgrln, ROT0, "Wing Co., Ltd.", "Lucky Girl (newer Z180-based hardware)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_luckgrln ) +GAMEL( 1991, luckstrn, 0, luckgrln, luckgrln, luckgrln_state, init_luckgrln, ROT0, "Wing Co., Ltd.", "Lucky Star (newer Z180-based hardware, set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_luckgrln ) // missing internal ROM dump +GAMEL( 1991, luckstrna, luckstrn, luckgrln, luckgrln, luckgrln_state, init_luckgrln, ROT0, "Wing Co., Ltd.", "Lucky Star (newer Z180-based hardware, set 2)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_luckgrln ) // missing internal ROM dump +GAMEL( 1993, 7smash, 0, _7smash, _7smash, luckgrln_state, empty_init, ROT0, "Sovic", "7 Smash", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_7smash ) diff --git a/src/osd/modules/sound/pipewire_sound.cpp b/src/osd/modules/sound/pipewire_sound.cpp index 8bf5b8e0afa..c597a81fdb3 100644 --- a/src/osd/modules/sound/pipewire_sound.cpp +++ b/src/osd/modules/sound/pipewire_sound.cpp @@ -90,6 +90,7 @@ private: struct stream_info { sound_pipewire *m_wire; bool m_is_output; + bool m_wait_stream; uint32_t m_osdid; uint32_t m_node_id; node_info *m_node; @@ -98,7 +99,7 @@ private: std::vector<float> m_volumes; abuffer m_buffer; - stream_info(sound_pipewire *wire, bool is_output, uint32_t osdid, uint32_t channels) : m_wire(wire), m_is_output(is_output), m_osdid(osdid), m_channels(channels), m_stream(nullptr), m_buffer(channels) {} + stream_info(sound_pipewire *wire, bool is_output, uint32_t osdid, uint32_t channels) : m_wire(wire), m_is_output(is_output), m_wait_stream(true), m_osdid(osdid), m_channels(channels), m_stream(nullptr), m_buffer(channels) {} }; static const pw_core_events core_events; @@ -127,7 +128,7 @@ private: uint32_t m_node_current_id, m_stream_current_id; uint32_t m_generation; - bool m_wait_sync, m_wait_stream; + bool m_wait_sync; void sync(); @@ -483,7 +484,6 @@ int sound_pipewire::init(osd_interface &osd, osd_options const &options) m_generation = 1; m_wait_sync = false; - m_wait_stream = false; pw_init(nullptr, nullptr); m_loop = pw_thread_loop_new(nullptr, nullptr); @@ -630,15 +630,14 @@ void sound_pipewire::stream_event_param_changed(stream_info *stream, uint32_t id if(id == SPA_PARAM_Props) { const spa_pod_prop *vols = spa_pod_find_prop(param, nullptr, SPA_PROP_channelVolumes); if(vols) { - bool initial = stream->m_volumes.empty(); stream->m_volumes.clear(); float *entry; SPA_POD_ARRAY_FOREACH((spa_pod_array *)(&vols->value), entry) { stream->m_volumes.push_back(osd::linear_to_db(*entry)); } if(!stream->m_volumes.empty()) { - if(initial) { - m_wait_stream = false; + if(stream->m_wait_stream) { + stream->m_wait_stream = false; pw_thread_loop_signal(m_loop, false); } else m_generation++; @@ -697,8 +696,7 @@ uint32_t sound_pipewire::stream_sink_open(uint32_t node, std::string name, uint3 pw_stream_flags(PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS | PW_STREAM_FLAG_RT_PROCESS), ¶ms, 1); - m_wait_stream = true; - while(m_wait_stream) + while(stream.m_wait_stream) pw_thread_loop_wait(m_loop); stream.m_node_id = pw_stream_get_node_id(stream.m_stream); @@ -751,8 +749,7 @@ uint32_t sound_pipewire::stream_source_open(uint32_t node, std::string name, uin pw_stream_flags(PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS | PW_STREAM_FLAG_RT_PROCESS), ¶ms, 1); - m_wait_stream = true; - while(m_wait_stream) + while(stream.m_wait_stream) pw_thread_loop_wait(m_loop); stream.m_node_id = pw_stream_get_node_id(stream.m_stream); diff --git a/src/osd/modules/sound/sdl_sound.cpp b/src/osd/modules/sound/sdl_sound.cpp index 35c11eae86d..6fbbbf14f4b 100644 --- a/src/osd/modules/sound/sdl_sound.cpp +++ b/src/osd/modules/sound/sdl_sound.cpp @@ -58,7 +58,8 @@ private: std::string m_name; int m_freq; uint8_t m_channels; - device_info(const char *name, int freq, uint8_t channels) : m_name(name), m_freq(freq), m_channels(channels) {} + bool m_def; + device_info(const char *name, int freq, uint8_t channels, bool def = false) : m_name(name), m_freq(freq), m_channels(channels), m_def(def) {} }; struct stream_info { @@ -100,6 +101,7 @@ int sound_sdl::init(osd_interface &osd, const osd_options &options) for(int i=0; i != dev_count; i++) { SDL_AudioSpec spec; const char *name = SDL_GetAudioDeviceName(i, 0); + fprintf(stderr, "Device name %s\n", name); int err = SDL_GetAudioDeviceSpec(i, 0, &spec); if(!err) m_devices.emplace_back(name, spec.freq, spec.channels); @@ -107,10 +109,11 @@ int sound_sdl::init(osd_interface &osd, const osd_options &options) char *def_name; SDL_AudioSpec def_spec; if(!SDL_GetDefaultAudioInfo(&def_name, &def_spec, 0)) { + fprintf(stderr, "Default name %s\n", def_name); uint32_t idx; for(idx = 0; idx != m_devices.size() && m_devices[idx].m_name != def_name; idx++); if(idx == m_devices.size()) - m_devices.emplace_back(def_name, def_spec.freq, def_spec.channels); + m_devices.emplace_back(def_name, def_spec.freq, def_spec.channels, true); m_default_sink = idx+1; SDL_free(def_name); } else @@ -190,7 +193,7 @@ uint32_t sound_sdl::stream_sink_open(uint32_t node, std::string name, uint32_t r dspec.callback = sink_callback; dspec.userdata = stream.get(); - stream->m_sdl_id = SDL_OpenAudioDevice(dev.m_name.c_str(), 0, &dspec, &ospec, 0); + stream->m_sdl_id = SDL_OpenAudioDevice(dev.m_def ? nullptr : dev.m_name.c_str(), 0, &dspec, &ospec, 0); if(!stream->m_sdl_id) return 0; SDL_PauseAudioDevice(stream->m_sdl_id, 0); |