summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--docs/source/advanced/bgfx.rst5
-rw-r--r--docs/source/luascript/ref-devices.rst4
-rw-r--r--docs/source/usingmame/defaultkeys.rst23
-rw-r--r--src/emu/debug/debugvw.cpp18
-rw-r--r--src/emu/emuopts.cpp2
-rw-r--r--src/emu/emuopts.h4
-rw-r--r--src/emu/inpttype.ipp10
-rw-r--r--src/frontend/mame/ui/mainmenu.cpp7
-rw-r--r--src/frontend/mame/ui/sndmenu.cpp13
-rw-r--r--src/frontend/mame/ui/sndmenu.h3
-rw-r--r--src/mame/dynax/ddenlovr.cpp50
-rw-r--r--src/mame/dynax/dynax.cpp30
-rw-r--r--src/mame/dynax/royalmah.cpp2
-rw-r--r--src/mame/excellent/es9501.cpp28
-rw-r--r--src/mame/igs/igs011.cpp17
-rw-r--r--src/mame/mame.lst4
-rw-r--r--src/mame/misc/gms.cpp100
-rw-r--r--src/mame/misc/umipoker.cpp24
-rw-r--r--src/mame/wing/luckgrln.cpp27
-rw-r--r--src/osd/modules/sound/pipewire_sound.cpp17
-rw-r--r--src/osd/modules/sound/sdl_sound.cpp9
21 files changed, 239 insertions, 158 deletions
diff --git a/docs/source/advanced/bgfx.rst b/docs/source/advanced/bgfx.rst
index bb6e4205fa3..2b492265d84 100644
--- a/docs/source/advanced/bgfx.rst
+++ b/docs/source/advanced/bgfx.rst
@@ -86,8 +86,8 @@ bgfx_path
the *bgfx* folder in your MAME installation folder.
bgfx_backend
Selects a rendering backend for BGFX to use. Possible choices include
- ``d3d9``, ``d3d11``, ``d3d12``, ``opengl``, ``gles``, ``metal``, and
- ```vulkan``. The default is ``**auto**``, which will let MAME choose the
+ ``auto``, ``d3d9``, ``d3d11``, ``d3d12``, ``opengl``, ``gles``, ``metal``, and
+ ``vulkan``. The default is ``auto``, which will let MAME choose the
best selection for you.
* ``d3d9`` -- Direct3D 9.0 Renderer (Requires Windows XP or higher)
@@ -101,6 +101,7 @@ bgfx_backend
newer)
* ``vulkan`` -- Vulkan Renderer (Requires Windows or Linux with compatible
GPU drivers.
+ * ``auto`` -- MAME will automatically choose the best selection for you.
bgfx_debug
Enables BGFX debugging features. Most users will not need to use this.
bgfx_screen_chains
diff --git a/docs/source/luascript/ref-devices.rst b/docs/source/luascript/ref-devices.rst
index fe25e0b0591..e4e4ba9f328 100644
--- a/docs/source/luascript/ref-devices.rst
+++ b/docs/source/luascript/ref-devices.rst
@@ -630,7 +630,7 @@ image.device (read-only)
.. _luascript-ref-disound:
Sound device interface
----------------------
+----------------------
Wraps MAME’s ``device_sound_interface`` class which is a mix-in implemented by
devices that input and/or output sound.
@@ -664,7 +664,7 @@ sound.io_positions[] (read-only)
sound.io_names[] (read-only)
Non-empty only for microphones and speakers, indicates the positions of
the inputs or outputs as strings (e.g. Front Left)
-
+
sound.hook
A boolean indicating whether to tap the output samples of this device in
the global sound hook.
diff --git a/docs/source/usingmame/defaultkeys.rst b/docs/source/usingmame/defaultkeys.rst
index 9892c86cb1f..947a4ce5d00 100644
--- a/docs/source/usingmame/defaultkeys.rst
+++ b/docs/source/usingmame/defaultkeys.rst
@@ -538,7 +538,7 @@ This list shows the standard keyboard configuration.
Player 1 Hanafuda No
**O**
Player 1 Taiwanese Mahjong O
-**Semicolon**
+**P**
Player 1 Taiwanese Mahjong P
**Q**
Player 1 Taiwanese Mahjong Q
@@ -582,6 +582,7 @@ buttons.
navigate the internal operator service menus)
**0** *(not numeric keypad)*
Service 2
+
Book-Keeping (for machines that have this functionality)
**-** *(not numeric keypad)*
Service 3
@@ -595,25 +596,25 @@ buttons.
Deal
**L**
Stand
-**4** *(not numeric keypad)*
- Take Score
-
- For games that allow gambling winnings in a double-or-nothing bonus game,
- this takes the winnings from the main game.
-**3** *(not numeric keypad)*
+**D**
Double Up
For games that allow gambling winnings in a double-or-nothing bonus game,
this gambles the winnings from the main game in the bonus game.
-**D**
+**F**
Half Gamble
Used by games that allow gambling half or all of the winnings from the main
- game in the bonus game.
+ game in the bonus game, this stakes half the winnings from the main game.
+**G**
+ Take Score
+
+ For games that allow gambling winnings in a double-or-nothing bonus game,
+ this stakes the winnings from the main game.
**A**
- High
+ High/big
**S**
- Low
+ Low/small
**O**
Door
diff --git a/src/emu/debug/debugvw.cpp b/src/emu/debug/debugvw.cpp
index 7412ddd2f60..fe997596137 100644
--- a/src/emu/debug/debugvw.cpp
+++ b/src/emu/debug/debugvw.cpp
@@ -509,9 +509,21 @@ bool debug_view_expression::recompute()
{
m_parsed.parse(m_string);
}
- catch (expression_error &)
+ catch (expression_error const &)
{
- m_parsed.parse(oldstring);
+ try
+ {
+ // If we got here because the user typed in a new expression,
+ // then going back to the previous expression should work
+ m_parsed.parse(oldstring);
+ }
+ catch (expression_error const &)
+ {
+ // If that didn't work, perhaps the user switched sources
+ // and the previous expression doesn't evaluate with the
+ // new symbol table. Try "0" as last resort
+ m_parsed.parse("0");
+ }
}
}
@@ -528,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..50ad5cd4c23 100644
--- a/src/mame/misc/gms.cpp
+++ b/src/mame/misc/gms.cpp
@@ -64,22 +64,22 @@ 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.
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)
+- 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)
+- 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
@@ -198,7 +198,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 +260,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)
@@ -352,7 +354,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 +367,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 +405,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,7 +420,7 @@ 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
@@ -1079,11 +1081,11 @@ static INPUT_PORTS_START( super555 )
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( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
@@ -1096,17 +1098,17 @@ 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 )
@@ -1215,20 +1217,20 @@ static INPUT_PORTS_START( sscs )
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( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -1490,12 +1492,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)
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),
&params, 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),
&params, 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);