diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/emuopts.cpp | 2 | ||||
-rw-r--r-- | src/emu/emuopts.h | 4 | ||||
-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/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 | 703 | ||||
-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 |
13 files changed, 503 insertions, 355 deletions
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/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/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 50ad5cd4c23..9c6f93d435a 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -65,23 +65,31 @@ Notes: S1 - 27C2000 / 232000 mask ROM (OKI samples) 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 - 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 +- 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); @@ -325,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) @@ -427,7 +466,7 @@ void gms_2layers_state::super555_mem(address_map &map) 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]); @@ -519,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) \ @@ -580,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") /* 投幣比例 */ \ @@ -946,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 ) ) @@ -1071,11 +1111,11 @@ 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 ) @@ -1087,7 +1127,7 @@ static INPUT_PORTS_START( super555 ) 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 ) @@ -1114,32 +1154,32 @@ static INPUT_PORTS_START( super555 ) 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" ) @@ -1150,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 ) @@ -1214,6 +1282,7 @@ 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") @@ -1233,6 +1302,7 @@ static INPUT_PORTS_START( sscs ) 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 ) @@ -1352,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 @@ -1363,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 ) @@ -1380,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 ) @@ -1431,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") @@ -1451,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 ) @@ -1468,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" ) // 麻將 @@ -1506,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 ) @@ -1551,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 @@ -1813,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 ) @@ -1848,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" ) @@ -2036,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 @@ -2266,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); @@ -2282,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() @@ -3103,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); |