diff options
Diffstat (limited to '')
32 files changed, 1611 insertions, 846 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/confswitch.cpp b/src/frontend/mame/ui/confswitch.cpp index cf69bb7cfbb..27340eda2ba 100644 --- a/src/frontend/mame/ui/confswitch.cpp +++ b/src/frontend/mame/ui/confswitch.cpp @@ -356,19 +356,19 @@ void menu_settings_dip_switches::custom_render(uint32_t flags, void *selectedref // calculate optimal width float const maxwidth(1.0f - (lr_border() * 2.0f)); + float const separation(0.5F * line_height() * x_aspect()); m_single_width = (line_height() * SINGLE_TOGGLE_SWITCH_FIELD_WIDTH * x_aspect()); - float width(0.0f); unsigned maxswitches(0U); + float maxnamewidth(0.0f); for (switch_group_descriptor const &group : switch_groups()) { if (group.mask) { maxswitches = (std::max)(group.switch_count(), maxswitches); - float const namewidth(get_string_width(group.name)); - float const switchwidth(m_single_width * maxswitches); - width = (std::min)((std::max)(namewidth + switchwidth + (line_height() * x_aspect()), width), maxwidth); + maxnamewidth = (std::max)(get_string_width(group.name), maxnamewidth); } } + float const width((std::min)(maxnamewidth + (m_single_width * maxswitches) + separation, maxwidth)); // draw extra menu area float const boxwidth((std::max)(width + (lr_border() * 2.0f), origx2 - origx1)); @@ -378,7 +378,7 @@ void menu_settings_dip_switches::custom_render(uint32_t flags, void *selectedref // calculate centred layout float const nameleft((1.0f - width) * 0.5f); float const switchleft(nameleft + width - (m_single_width * maxswitches)); - float const namewidth(width - (m_single_width * maxswitches) - (line_height() * x_aspect())); + float const namewidth(width - (m_single_width * maxswitches) - separation); // iterate over switch groups ioport_field *const field((uintptr_t(selectedref) != 1U) ? reinterpret_cast<ioport_field *>(selectedref) : nullptr); diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp index 8db48046bc4..7bfbcc8f9f0 100644 --- a/src/frontend/mame/ui/info.cpp +++ b/src/frontend/mame/ui/info.cpp @@ -343,7 +343,7 @@ machine_static_info::machine_static_info(const ui_options &options, machine_conf bool machine_static_info::has_warnings() const noexcept { return - (machine_flags() & (MACHINE_ERRORS | MACHINE_WARNINGS)) || + (machine_flags() & (MACHINE_ERRORS | MACHINE_WARNINGS | MACHINE_BTANB)) || (emulation_flags() & DEVICE_ERRORS) || unemulated_features() || imperfect_features() || 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/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index 5b94ac115a4..ad45533a3c3 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -88,8 +88,19 @@ private: required_shared_ptr<uint16_t> m_layerctrl; required_shared_ptr<uint16_t> m_backpen; - // Protection + required_ioport_array<4> m_dsw; + optional_ioport_array<5> m_key; + required_ioport m_inputs; + + tilemap_t *m_tilemap[2]{}; + bitmap_ind16 m_pixbitmap; + uint16_t m_prot_val = 0; + uint8_t m_mux = 0; + uint8_t m_irq_enable = 0; + uint8_t m_pixpal = 0; + + // Protection uint16_t bmcpokr_prot_r(); uint16_t fengyunh_prot_r(); uint16_t shendeng_prot_r(); @@ -98,10 +109,6 @@ private: uint16_t unk_r(); // I/O - uint8_t m_mux = 0; - required_ioport_array<4> m_dsw; - optional_ioport_array<5> m_key; - required_ioport m_inputs; void mux_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); uint16_t mahjong_key_r(); uint16_t dsw_r(); @@ -109,19 +116,15 @@ private: uint16_t xyddzhh_dsw_r(); // Interrupts - uint8_t m_irq_enable = 0; void irq_enable_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); void irq_ack_w(uint8_t data); TIMER_DEVICE_CALLBACK_MEMBER(interrupt); // Video - tilemap_t *m_tilemap[2]{}; template<unsigned N> TILE_GET_INFO_MEMBER(get_tile_info); template<unsigned N> void videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - std::unique_ptr<bitmap_ind16> m_pixbitmap; void pixbitmap_redraw(); - uint8_t m_pixpal = 0; void pixram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void pixpal_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); @@ -169,7 +172,7 @@ void bmcpokr_state::video_start() m_tilemap[0]->set_scroll_cols(1); m_tilemap[1]->set_scroll_cols(1); - m_pixbitmap = std::make_unique<bitmap_ind16>(0x400, 0x200); + m_pixbitmap.allocate(0x400, 0x200); } // 1024 x 512 bitmap. 4 bits per pixel (every byte encodes 2 pixels) + palette register @@ -186,13 +189,13 @@ void bmcpokr_state::pixram_w(offs_t offset, uint16_t data, uint16_t mem_mask) uint16_t pen; if (ACCESSING_BITS_8_15) { - pen = (data >> 12) & 0xf; m_pixbitmap->pix(y, x + 0) = pen ? pixpal + pen : 0; - pen = (data >> 8) & 0xf; m_pixbitmap->pix(y, x + 1) = pen ? pixpal + pen : 0; + pen = (data >> 12) & 0xf; m_pixbitmap.pix(y, x + 0) = pen ? (pixpal + pen) : 0; + pen = (data >> 8) & 0xf; m_pixbitmap.pix(y, x + 1) = pen ? (pixpal + pen) : 0; } if (ACCESSING_BITS_0_7) { - pen = (data >> 4) & 0xf; m_pixbitmap->pix(y, x + 2) = pen ? pixpal + pen : 0; - pen = (data >> 0) & 0xf; m_pixbitmap->pix(y, x + 3) = pen ? pixpal + pen : 0; + pen = (data >> 4) & 0xf; m_pixbitmap.pix(y, x + 2) = pen ? (pixpal + pen) : 0; + pen = (data >> 0) & 0xf; m_pixbitmap.pix(y, x + 3) = pen ? (pixpal + pen) : 0; } } @@ -206,10 +209,10 @@ void bmcpokr_state::pixbitmap_redraw() { uint16_t const data = m_pixram[offset++]; uint16_t pen; - pen = (data >> 12) & 0xf; m_pixbitmap->pix(y, x + 0) = pen ? pixpal + pen : 0; - pen = (data >> 8) & 0xf; m_pixbitmap->pix(y, x + 1) = pen ? pixpal + pen : 0; - pen = (data >> 4) & 0xf; m_pixbitmap->pix(y, x + 2) = pen ? pixpal + pen : 0; - pen = (data >> 0) & 0xf; m_pixbitmap->pix(y, x + 3) = pen ? pixpal + pen : 0; + pen = (data >> 12) & 0xf; m_pixbitmap.pix(y, x + 0) = pen ? (pixpal + pen) : 0; + pen = (data >> 8) & 0xf; m_pixbitmap.pix(y, x + 1) = pen ? (pixpal + pen) : 0; + pen = (data >> 4) & 0xf; m_pixbitmap.pix(y, x + 2) = pen ? (pixpal + pen) : 0; + pen = (data >> 0) & 0xf; m_pixbitmap.pix(y, x + 3) = pen ? (pixpal + pen) : 0; } } } @@ -270,7 +273,7 @@ void bmcpokr_state::draw_layer(screen_device &screen, bitmap_ind16 &bitmap, cons { sx = -sx; sy = -sy; - copyscrollbitmap_trans(bitmap, *m_pixbitmap, 1, &sx, 1, &sy, cliprect, 0); + copyscrollbitmap_trans(bitmap, m_pixbitmap, 1, &sx, 1, &sy, cliprect, 0); } if (!linescroll) diff --git a/src/mame/bmc/koftball.cpp b/src/mame/bmc/koftball.cpp index b840a2471ee..c4e74b498e3 100644 --- a/src/mame/bmc/koftball.cpp +++ b/src/mame/bmc/koftball.cpp @@ -159,12 +159,13 @@ private: optional_device<hopper_device> m_hopper; tilemap_t *m_tilemap[4]{}; + bitmap_ind16 m_pixbitmap; + u16 m_prot_data = 0; u8 m_irq_enable = 0; u8 m_gfx_ctrl = 0; u8 m_priority = 0; u8 m_backpen = 0; - bitmap_ind16 m_pixbitmap; u8 m_pixpal = 0; void irq_ack_w(u8 data); @@ -177,7 +178,6 @@ private: void pixpal_w(offs_t offset, u8 data, u8 mem_mask = ~0); template <u8 Which> void videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - template <u8 Which> TILE_GET_INFO_MEMBER(get_tile_info); void draw_pixlayer(bitmap_ind16 &bitmap, const rectangle &cliprect); u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/dataeast/brkthru.cpp b/src/mame/dataeast/brkthru.cpp index 7ee85f602b1..c5da348ca4e 100644 --- a/src/mame/dataeast/brkthru.cpp +++ b/src/mame/dataeast/brkthru.cpp @@ -808,6 +808,45 @@ void brkthru_state::darwin(machine_config &config) ROM_START( brkthru ) ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "1.f9", 0x04000, 0x4000, CRC(0f21b4c5) SHA1(e5ef67006394d475571196dcdc181d28a0831bdf) ) + ROM_LOAD( "2.f11", 0x08000, 0x8000, CRC(51c7c378) SHA1(b779df719b89bb41e342c472b38e20d8fc71ca6d) ) + ROM_LOAD( "4.f14", 0x10000, 0x8000, CRC(209484c2) SHA1(da7311768b675b833066a7403fd507969d74699e) ) + ROM_LOAD( "3.f12", 0x18000, 0x8000, CRC(2f2c40c2) SHA1(fcb78941453520a3a07f272127dae7c2cc1999ea) ) + + ROM_REGION( 0x02000, "chars", 0 ) + ROM_LOAD( "12.bin", 0x00000, 0x2000, CRC(58c0b29b) SHA1(9dc075f8afae7e8fe164a9fe325e9948cdc7e4bb) ) + + ROM_REGION( 0x20000, "tiles", 0 ) + // background + // we do a lot of scatter loading here, to place the data in a format which can be decoded by MAME's standard functions + ROM_LOAD( "7.b6", 0x00000, 0x4000, CRC(920cc56a) SHA1(c75806691073f1f3bd54dcaca4c14155ecf4471d) ) // bitplanes 1,2 for bank 1,2 + ROM_CONTINUE( 0x08000, 0x4000 ) // bitplanes 1,2 for bank 3,4 + ROM_LOAD( "6.b4", 0x10000, 0x4000, CRC(fd3cee40) SHA1(3308b96bb69e0fa6dffbdff296273fafa16d5e70) ) // bitplanes 1,2 for bank 5,6 + ROM_CONTINUE( 0x18000, 0x4000 ) // bitplanes 1,2 for bank 7,8 + ROM_LOAD( "8.b7", 0x04000, 0x1000, CRC(f67ee64e) SHA1(75634bd481ae44b8aa02acb4f9b4d7ff973a4c71) ) // bitplane 3 for bank 1,2 + ROM_CONTINUE( 0x06000, 0x1000 ) + ROM_CONTINUE( 0x0c000, 0x1000 ) // bitplane 3 for bank 3,4 + ROM_CONTINUE( 0x0e000, 0x1000 ) + ROM_CONTINUE( 0x14000, 0x1000 ) // bitplane 3 for bank 5,6 + ROM_CONTINUE( 0x16000, 0x1000 ) + ROM_CONTINUE( 0x1c000, 0x1000 ) // bitplane 3 for bank 7,8 + ROM_CONTINUE( 0x1e000, 0x1000 ) + + ROM_REGION( 0x18000, "sprites", 0 ) + ROM_LOAD( "9.bin", 0x00000, 0x8000, CRC(f54e50a7) SHA1(eccf4d859c26944271ec6586644b4730a72851fd) ) + ROM_LOAD( "10.bin", 0x08000, 0x8000, CRC(fd156945) SHA1(a0575a4164217e63317886176ab7e59d255fc771) ) + ROM_LOAD( "11.bin", 0x10000, 0x8000, CRC(c152a99b) SHA1(f96133aa01219eda357b9e906bd9577dbfe359c0) ) + + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "13.bin", 0x0000, 0x0100, CRC(aae44269) SHA1(7c66aeb93577104109d264ee8b848254256c81eb) ) // red and green component + ROM_LOAD( "14.bin", 0x0100, 0x0100, CRC(f2d4822a) SHA1(f535e91b87ff01f2a73662856fd3f72907ca62e9) ) // blue component + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "5.d6", 0x8000, 0x8000, CRC(c309435f) SHA1(82914004c2b169a7c31aa49af83a699ebbc7b33f) ) +ROM_END + +ROM_START( brkthruu ) + ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "brkthru.1", 0x04000, 0x4000, CRC(cfb4265f) SHA1(4cd748fa06fd2727de1694196912d605672d4883) ) ROM_LOAD( "brkthru.2", 0x08000, 0x8000, CRC(fa8246d9) SHA1(d6da03b2a3d8a83411191351ee110b89352a3ead) ) ROM_LOAD( "brkthru.4", 0x10000, 0x8000, CRC(8cabf252) SHA1(45e8847b2e6b278989f67e0b27b827a9b3b92581) ) @@ -1069,7 +1108,8 @@ ROM_END * *************************************/ -GAME( 1986, brkthru, 0, brkthru, brkthru, brkthru_state, empty_init, ROT0, "Data East USA", "Break Thru (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, brkthru, 0, brkthru, brkthru, brkthru_state, empty_init, ROT0, "Data East Corporation", "Break Thru (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, brkthruu, brkthru, brkthru, brkthru, brkthru_state, empty_init, ROT0, "Data East USA", "Break Thru (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, brkthruj, brkthru, brkthru, brkthruj, brkthru_state, empty_init, ROT0, "Data East Corporation", "Kyohkoh-Toppa (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, brkthrut, brkthru, brkthru, brkthruj, brkthru_state, empty_init, ROT0, "Data East Corporation (Tecfri license)", "Break Thru (Tecfri license)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, forcebrk, brkthru, brkthru, brkthruj, brkthru_state, empty_init, ROT0, "bootleg", "Force Break (bootleg)", MACHINE_SUPPORTS_SAVE ) 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/gaelco/mastboy.cpp b/src/mame/gaelco/mastboy.cpp index bcb1ae21643..db2fb2cc9ea 100644 --- a/src/mame/gaelco/mastboy.cpp +++ b/src/mame/gaelco/mastboy.cpp @@ -243,201 +243,9 @@ Color bit 1 is 1K ohms Color bit 2 is 500 ohms Color bit 3 is 250 ohms - - About the dump - - Bytes that were 0x7F or 0x5C couldn't be dumped, and read as 0x23. - The ROM has been patched with the correct data, this is just for reference - in case something seems wrong. The address checking and patching was - automatic so there aren't any human errors: - - Potential bad addresses that are either 0x7F or 0x5C: - - 0x0300, - 0x0534, - 0x05B1, - 0x05B5, - 0x0E4E, - 0x1090, - 0x10E0, - 0x110F, - 0x11B5, - 0x1259, - 0x1271, - 0x1278, - 0x14AC, - 0x14CC, - 0x14DC, - 0x15D9, - 0x178D, - 0x17AA, - 0x17B4, - 0x186C, - 0x1884, - 0x1A0A, - 0x1A66, - 0x1ABB, - 0x1AE9, - 0x1CAD, - 0x1CB9, - 0x1CC1, - 0x1CCF, - 0x1CD5, - 0x1CE3, - 0x1CF3, - 0x1D85, - 0x1DC7, - 0x1E00, - 0x1E26, - 0x1E2A, - 0x1E5E, - 0x1E6F, - 0x1E89, - 0x1EA2, - 0x1EC9, - 0x1F14, - 0x1F23, - 0x1F33, - 0x1F4D, - 0x1F61, - 0x1FE3, - 0x1FEA, - 0x1FFD, - 0x200D, - 0x2046, - 0x2054, - 0x2069, - 0x206F, - 0x207D, - 0x208A, - 0x20A2, - 0x20BA, - 0x2149, - 0x215D, - 0x2179, - 0x2189, - 0x21A7, - 0x21D7, - 0x21F2, - 0x2211, - 0x23E6, - 0x23EA, - 0x23F4, - 0x2442, - 0x2558, - 0x2559, - 0x2569, - 0x2586, - 0x258C, - 0x2592, - 0x2612, - 0x2613, - 0x26BF, - 0x26FF, - 0x2706, - 0x27A7, - 0x27AB, - 0x27BE, - 0x2867, - 0x2896, - 0x2977, - 0x29E2, - 0x2A03, - 0x2A79, - 0x2AA3, - 0x2ACA, - 0x2AE9, - 0x2C1A, - 0x2C30, - 0x2C41, - 0x2C4A, - 0x2C8D, - 0x2CAC, - 0x2D3A, - 0x2D88, - 0x2DAC, - 0x2E09, - 0x2EBD, - 0x2EF2, - 0x2F26, - 0x2F8B, - 0x2FA6, - 0x2FB1, - 0x2FC9, - 0x2FDA, - 0x2FE6, - 0x30FE, - 0x3101, - 0x31A3, - 0x31C0, - 0x31C7, - 0x3213, - 0x323D, - 0x3247, - 0x3271, - 0x32B3, - 0x332D, - 0x333A, - 0x334F, - 0x33C7, - 0x33F1, - 0x3430, - 0x345D, - 0x3467, - 0x3478, - 0x351D, - 0x353F, - 0x3540, - 0x36CC, - 0x36D1, - 0x37C5, - 0x37C9, - 0x3806, - 0x3944, - 0x394C, - 0x39CD, - 0x3A39, - 0x3A99, - 0x3A9F, - 0x3AC8, - 0x3B05, - 0x3B08, - 0x3B15, - 0x3B4A, - 0x3B62, - 0x3B8F, - 0x3C5F, - 0x3D36, - 0x3D8B, - 0x3E62 - - Addresses from the above which were determined to be 0x5C: - - 0x05B1, // 0x5C, newline - 0x0E4E, // 0x5C, newline - 0x1259, // 0x5C, newline - 0x1271, // 0x5C, newline - 0x1278, // 0x5C, newline - 0x1D85, // 0x5C, newline - 0x2189, // 0x5C, newline - 0x21D7, // 0x5C, newline - 0x23EA, // 0x5C, newline - 0x2442, // 0x5C, newline - 0x2559, // 0x5C, newline - 0x2586, // 0x5C, newline - 0x258C, // 0x5C, newline - 0x2592, // 0x5C, newline - 0x2613, // 0x5C, newline - 0x3101, // 0x5C, newline - 0x351D, // 0x5C, newline - 0x3540, // 0x5C, newline - 0x394C, // 0x5C, newline - 0x3D8B, // 0x5C, newline - - - */ + #include "emu.h" #include "cpu/z180/hd647180x.h" @@ -572,7 +380,7 @@ void mastboy_state::tileram_w(offs_t offset, uint8_t data) void mastboy_state::bank_w(uint8_t data) { - // controls access to banked ram / rom + // controls access to banked RAM / ROM m_bank_c000->set_bank(data); } @@ -824,134 +632,517 @@ void mastboy_state::mastboy(machine_config &config) // Romsets +// On the test screen at boot, most games show an error on "3 RAMM" until NVRAM is recorded after a full demo loop. + +/* Gaelco had an internal version of this set with no internal ROM for the MCU, having the first 0x4000 bytes of the EPROM with actual code, and this hash: + CRC(50a8feaf) SHA1(bf912fbc6883f06aaccbe5e5e71553976fd836d3) */ ROM_START( mastboy ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! - ROM_LOAD( "3.ic77", 0x04000, 0x4000, CRC(64a712ba) SHA1(a8318fa6f5b3fe1aaff4cef07aced927e3503542) ) // data (1ST AND 2ND HALF IDENTICAL) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters + ROM_LOAD( "hd647180.bin", 0x0000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! + ROM_LOAD( "3.ic77", 0x4000, 0x4000, CRC(64a712ba) SHA1(a8318fa6f5b3fe1aaff4cef07aced927e3503542) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip ROM_LOAD( "04.bin", 0x00000, 0x10000, CRC(565932f4) SHA1(4b184aa445b5671072031ad4a2ccb13868d6d3a4) ) ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots - ROM_LOAD( "01.bin", 0x000000, 0x040000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx - ROM_LOAD( "02.bin", 0x040000, 0x020000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data - ROM_RELOAD( 0x060000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "01.bin", 0x00000, 0x40000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx + ROM_LOAD( "02.bin", 0x40000, 0x20000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored /* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 SOCIALES - HISTORIA 110691 7635 0428 ESPECTACULOS - CINE 110691 7455 0318 CIENCIAS - GENERAL 110691 7482 0347 */ - ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions - ROM_RELOAD( 0x0a0000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored /* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 VARIOS - CULTURA GENERAL 110691 7419 0352 */ - ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions - ROM_RELOAD( 0x0e0000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored /* DEPORTES - GENERAL 011091 9700 1045 */ - ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions - ROM_RELOAD( 0x120000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored /* VARIOS - CULTURA GENERAL 041091 5970 0585 VARIOS - CULTURA GENERAL 061091 5300 0245 CIENCIAS - GENERAL 041091 5630 0275 */ - ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions - ROM_RELOAD( 0x160000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored - /* 0x180000 to 0x1bffff EMPTY */ - /* 0x1c0000 tt 0x1fffff EMPTY */ + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 to 0x1fffff EMPTY - ROM_REGION( 0x00345, "plds", 0 ) - ROM_LOAD( "gal16v8-25.ic32", 0x000000, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic49", 0x000117, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic84", 0x00022e, 0x000117, NO_DUMP ) + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) ROM_END // this set has a number of strings used in the boot-up display intentionally terminated at the first character so they don't display ROM_START( mastboya ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! - ROM_LOAD( "03.bin", 0x04000, 0x4000, CRC(5020a37f) SHA1(8bc75623232f3ab457b47d5af6cd1c3fb24c0d0e) ) // data (1ST AND 2ND HALF IDENTICAL) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters + ROM_LOAD( "hd647180.bin", 0x0000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! + ROM_LOAD( "03.bin", 0x4000, 0x4000, CRC(5020a37f) SHA1(8bc75623232f3ab457b47d5af6cd1c3fb24c0d0e) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip ROM_LOAD( "04.bin", 0x00000, 0x10000, CRC(565932f4) SHA1(4b184aa445b5671072031ad4a2ccb13868d6d3a4) ) ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots - ROM_LOAD( "01.bin", 0x000000, 0x040000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx - ROM_LOAD( "02.bin", 0x040000, 0x020000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data - ROM_RELOAD( 0x060000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "01.bin", 0x00000, 0x40000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx + ROM_LOAD( "02.bin", 0x40000, 0x20000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +/* No internal ROM on the MCU, all the code is on the EPROM. + Romset labeled "MB ESPANYA ORIGINAL - *CUSTOM I PROG. NOV". */ +ROM_START( mastboyb ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "mboy_espana_programa_tablas_27-oct-92.bin", 0x0000, 0x8000, CRC(8280774c) SHA1(0a850647a9ffe728e800efba8bea033e11b4d559) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x0000, 0x8000 ) + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "4.bin", 0x000000, 0x10000, CRC(565932f4) SHA1(4b184aa445b5671072031ad4a2ccb13868d6d3a4) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "s.master.bin", 0x00000, 0x40000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx + ROM_LOAD( "montajes_sonido_colores.bin", 0x40000, 0x20000, CRC(ad54e36e) SHA1(8d29319937c7594ec360c9fa71e1101f2351f444) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +/* No internal ROM on the MCU, all the code is on the EPROM. + Romset labeled "MASTER BOY. 2.". */ +ROM_START( mastboyc ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "3_mb_23-10-91_27c512.bin", 0x0000, 0x8000, CRC(c0bbddf6) SHA1(02759bbe2ad2699c5e0f71cdaf3d0e8d877ef601) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x0000, 0x8000 ) + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "original_4_27c512.bin", 0x000000, 0x10000, CRC(eb5fa30d) SHA1(e4acedb70691985fe0de1b4429325d18b791fb90) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "original_1_27c020.bin", 0x00000, 0x40000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx + ROM_LOAD( "original_2_27c010.bin", 0x40000, 0x20000, CRC(ad54e36e) SHA1(8d29319937c7594ec360c9fa71e1101f2351f444) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "mb_0_preg_5_27c010.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "mb_1_preg_6_27c010.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "mb_2_preg_7_27c010.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "mb_3_preg_8_27c010.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +ROM_START( mastboyv2 ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_sp_v2.bin", 0x0000, 0x4000, CRC(f4c4ae83) SHA1(b131dcf1e4f2a274aed515054d43b316628a3c58) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_espana_tablas.bin", 0x4000, 0x4000, CRC(3dcd71bd) SHA1(67ceee75c8329c51cf83b56ddfd37c5257f8d8dd) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "fi6_esp_4.bin", 0x000000, 0x10000, CRC(eb5fa30d) SHA1(e4acedb70691985fe0de1b4429325d18b791fb90) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "fi6_esp_3.bin", 0x00000, 0x40000, CRC(c491998d) SHA1(10cd8855391d24fc09831e7e812dda3de24b789b) ) // 99% gfx + ROM_LOAD( "mont_sonid_esp_color.bin", 0x40000, 0x20000, CRC(514b1c71) SHA1(cbdd8cef90afe547ead34d6f71c092ed07d7781d) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +ROM_START( mastboyv2a ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_sp_v2.bin", 0x0000, 0x4000, CRC(f4c4ae83) SHA1(b131dcf1e4f2a274aed515054d43b316628a3c58) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_espana_tablas_alt.bin", 0x4000, 0x4000, CRC(71ac5623) SHA1(53a6ca20745a92a40e6168804164903bec2c2bbd) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "fi6_esp_4.bin", 0x000000, 0x10000, CRC(eb5fa30d) SHA1(e4acedb70691985fe0de1b4429325d18b791fb90) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "fi6_esp_3.bin", 0x00000, 0x40000, CRC(c491998d) SHA1(10cd8855391d24fc09831e7e812dda3de24b789b) ) // 99% gfx + ROM_LOAD( "mont_sonid_esp_color.bin", 0x40000, 0x20000, CRC(514b1c71) SHA1(cbdd8cef90afe547ead34d6f71c092ed07d7781d) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored /* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 SOCIALES - HISTORIA 110691 7635 0428 ESPECTACULOS - CINE 110691 7455 0318 CIENCIAS - GENERAL 110691 7482 0347 */ - ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions - ROM_RELOAD( 0x0a0000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "05.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +/* Romset labeled "MB ESPANYA OLIMPIADES". + Gaelco had an internal version of this set with no internal ROM for the MCU, having the first 0x4000 bytes of the EPROM with actual code, and this hash: + CRC(ce6f4be5) SHA1(8190f0d7579cedf4f995edbc4632d74a1af218be) */ +ROM_START( mastboyol ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_sp.bin", 0x0000, 0x4000, CRC(826f56fb) SHA1(70ee8ff1d7a87ac6425327a93ac51a9e34d9ebef) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_espana_tablas_18-oct-92.bin", 0x4000, 0x4000, CRC(a463b5f9) SHA1(87348613d4200c485b66f98184a8c0cc2ce23883) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "mb_4a_fig_esp_18-oct-92.bin", 0x000000, 0x10000, CRC(eb5fa30d) SHA1(e4acedb70691985fe0de1b4429325d18b791fb90) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "mb_1a_fig_esp-18-oct-92.bin", 0x00000, 0x40000, CRC(2dde3ae0) SHA1(b7f771340d7ce207e75c6c77f8bc93ffc54f649b) ) // 99% gfx + ROM_LOAD( "mb_2a_montaje_sonido_colores_18-oct-92.bin", 0x40000, 0x20000, CRC(523789d5) SHA1(db29debda088f9ad35f5cfdb51b21c0eb8642593) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "mb_0_preg_5_27c010.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 + VARIOS - CULTURA GENERAL 110691 7419 0352 */ + ROM_LOAD( "mb_1_preg_6_27c010.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - GENERAL 011091 9700 1045 */ + ROM_LOAD( "mb_2_preg_7_27c010.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* VARIOS - CULTURA GENERAL 041091 5970 0585 + VARIOS - CULTURA GENERAL 061091 5300 0245 + CIENCIAS - GENERAL 041091 5630 0275 */ + ROM_LOAD( "mb_3_preg_8_27c010.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - BARCELONA'92 011092 6526 0385 */ + ROM_LOAD( "mb_9b_pregunt_espana_6-11-92.bin", 0x180000, 0x020000, CRC(60b52d6b) SHA1(29eda481bce073ae0555bb75a72c7ec3926d499f) ) // questions + ROM_RELOAD( 0x1A0000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x1c0000 tt 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +// Romset labeled "MB ESPANYA OLIMPIADES *". +ROM_START( mastboyola ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_sp.bin", 0x0000, 0x4000, CRC(826f56fb) SHA1(70ee8ff1d7a87ac6425327a93ac51a9e34d9ebef) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_espana_tablas_alt_18-oct_92.bin", 0x4000, 0x4000, CRC(e2691a11) SHA1(f624e7f92c3f6b88bb9f008a8f00970815c7910e) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "mb_4a_fig_esp_18-oct-92.bin", 0x000000, 0x10000, CRC(eb5fa30d) SHA1(e4acedb70691985fe0de1b4429325d18b791fb90) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // banked data - 8 banks, 6 'question' slots + ROM_LOAD( "mb_1a_fig_esp-18-oct-92.bin", 0x00000, 0x40000, CRC(2dde3ae0) SHA1(b7f771340d7ce207e75c6c77f8bc93ffc54f649b) ) // 99% gfx + ROM_LOAD( "mb_2a_montaje_sonido_colores_18-oct-92.bin", 0x40000, 0x20000, CRC(523789d5) SHA1(db29debda088f9ad35f5cfdb51b21c0eb8642593) ) // data + ROM_RELOAD( 0x060000, 0x020000 ) // 128kb ROMs are mirrored + +/* SOCIALES - GEOGRAFIA ESP. 110691 7659 0412 + SOCIALES - HISTORIA 110691 7635 0428 + ESPECTACULOS - CINE 110691 7455 0318 + CIENCIAS - GENERAL 110691 7482 0347 */ + ROM_LOAD( "mb_0_preg_5_27c010.bin", 0x080000, 0x020000, CRC(394cb674) SHA1(1390c666772f1e1e2da8866b960a3d24dc660e68) ) // questions + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored /* SOCIALES - GEOGRAFIA MUN. 110691 7054 0513 VARIOS - CULTURA GENERAL 110691 7419 0352 */ - ROM_LOAD( "06.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions - ROM_RELOAD( 0x0e0000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "mb_1_preg_6_27c010.bin", 0x0c0000, 0x020000, CRC(aace7120) SHA1(5655b56a7c241bc7908081088042601174c0a0b2) ) // questions + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored /* DEPORTES - GENERAL 011091 9700 1045 */ - ROM_LOAD( "07.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions - ROM_RELOAD( 0x120000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "mb_2_preg_7_27c010.bin", 0x100000, 0x020000, CRC(6618b002) SHA1(79942350da335a3362b6fc43527b6568ce134ceb) ) // questions + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored /* VARIOS - CULTURA GENERAL 041091 5970 0585 VARIOS - CULTURA GENERAL 061091 5300 0245 CIENCIAS - GENERAL 041091 5630 0275 */ - ROM_LOAD( "08.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions - ROM_RELOAD( 0x160000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "mb_3_preg_8_27c010.bin", 0x140000, 0x020000, CRC(6a4870dd) SHA1(f8ca94a5bc4ba3f512767901e4ae3579c2c6355a) ) // questions + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* DEPORTES - BARCELONA'92 011092 6526 0385 */ + ROM_LOAD( "mb_9b_alt_pregunt_espana_10-10-92.bin", 0x180000, 0x020000, CRC(eeaf0a6d) SHA1(4e4ce87b9e4e552bab9c41c767fe5f4b32e0eb73) ) // questions + ROM_RELOAD( 0x1A0000, 0x020000 ) // 128kb ROMs are mirrored - /* 0x180000 to 0x1bffff EMPTY */ - /* 0x1c0000 tt 0x1fffff EMPTY */ + // 0x1c0000 tt 0x1fffff EMPTY - ROM_REGION( 0x00345, "plds", 0 ) - ROM_LOAD( "gal16v8-25.ic32", 0x000000, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic49", 0x000117, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic84", 0x00022e, 0x000117, NO_DUMP ) + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) ROM_END -/* The internal ROM should be different on the Italian sets, as it indexes the wrong strings on the startup screens, + +// Italian sets + +/* The internal ROM should be different on the (v1) Italian sets, as it indexes the wrong strings on the startup screens, showing MARK instead of PLAY MARK etc. So, marked as BAD_DUMP on these sets */ -// PCB dated 03/02/92 -ROM_START( mastboyiv2 ) +ROM_START( mastboyi ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_i.bin", 0x0000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! + ROM_LOAD( "3-mem-a.ic77", 0x4000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "4.ic91", 0x00000, 0x10000, CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets + ROM_LOAD( "1-mem-c.ic75", 0x00000, 0x40000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx + ROM_LOAD( "2-mem-b.ic76", 0x40000, 0x20000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - HOBBY GIOCHI 011091 5457 0300 + SCIENZA - NATURA 011091 5657 0400 + SPORT - MONDIALI-90 011091 5999 0212 + MUSICA - AUTORI CANZONI 011091 5496 0314 */ + ROM_LOAD( "5-rom.ic95", 0x080000, 0x020000, CRC(adc07f12) SHA1(2e0b46ac5884ad459bc354f56ff384ff1932f147) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPORT- GENERALE 011091 5294 0713 + SPETTACOLO - CINE-TV 011091 5657 0400 */ + ROM_LOAD( "6-rom.ic96", 0x0c0000, 0x020000, CRC(2c52cb1e) SHA1(d58f21c09bd3983497f74ab6c5a37977d9e30f0c) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - STORIA 011091 5430 0375 + SCIENZA - GEOGRAFIA 011091 5010 0565 */ + ROM_LOAD( "7-rom.ic97", 0x100000, 0x020000, CRC(7818408f) SHA1(2a69688b6cda5baf2a45966dd86f10b2fcd54b66) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x140000 to 0x17ffff EMPTY + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 to 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +// Only one of the question ROMs differs from 'mastboyi' (minor wording / spelling changes in most cases). +ROM_START( mastboyia ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! - ROM_LOAD( "13_mem-a.ic77", 0x04000, 0x4000, CRC(06465aa5) SHA1(c2958197cf5d0f36efb1654d9d0f7c660768f4d1) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters + ROM_LOAD( "hd647180_i.bin", 0x0000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! + ROM_LOAD( "3-mem-a.ic77", 0x4000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip - ROM_LOAD( "14.ic91", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) // RAMM err. + ROM_LOAD( "4.ic91", 0x00000, 0x10000, CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets - ROM_LOAD( "11_mem-c.ic75", 0x000000, 0x040000, CRC(4030846a) SHA1(8782bae43d506f8b9e584087d9325a88f7020f4f) ) // 99% gfx - ROM_LOAD( "12_mem-b.ic76", 0x040000, 0x020000, CRC(a38293eb) SHA1(07be32df7dd689b6262f0da2e4e0500bf29d4428) ) // data - ROM_RELOAD( 0x060000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "1-mem-c.ic75", 0x00000, 0x40000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx + ROM_LOAD( "2-mem-b.ic76", 0x40000, 0x20000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - HOBBY GIOCHI 011091 5457 0300 + SCIENZA - NATURA 011091 5657 0400 + SPORT - MONDIALI-90 011091 5999 0212 + MUSICA - AUTORI CANZONI 011091 5496 0314 */ + ROM_LOAD( "5-alt.ic95", 0x080000, 0x020000, CRC(efa442fa) SHA1(5211ea122083120028348418e33cb71b4ce52b8f) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPORT- GENERALE 011091 5294 0713 + SPETTACOLO - CINE-TV 011091 5657 0400 */ + ROM_LOAD( "6-rom.ic96", 0x0c0000, 0x020000, CRC(2c52cb1e) SHA1(d58f21c09bd3983497f74ab6c5a37977d9e30f0c) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - STORIA 011091 5430 0375 + SCIENZA - GEOGRAFIA 011091 5010 0565 */ + ROM_LOAD( "7-rom.ic97", 0x100000, 0x020000, CRC(7818408f) SHA1(2a69688b6cda5baf2a45966dd86f10b2fcd54b66) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x140000 to 0x17ffff EMPTY + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 to 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +ROM_START( mastboyib ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_ia.bin", 0x0000, 0x4000, CRC(a0556932) SHA1(0fc3cd8ff497002f22fcb236c8b77ec840bf1bb3) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_italia_tablas_27-oct-92_27c512.bin", 0x4000, 0x4000, CRC(21e1fd0a) SHA1(71ab677f6af5cb2c4a40a156289f5af29c6c4a9a) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "figuras_mboy_italia_18-3-92_27c512.bin", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets + ROM_LOAD( "figuras_mboy_italia_18-3-92_27c020.bin", 0x00000, 0x40000, CRC(cecbde31) SHA1(5fbe5fbceb9864ede0cf9c593b66df1c9ff88822) ) // 99% gfx + ROM_LOAD( "montajes_parlante_mboy_italia_20-ene-92_27c010.bin", 0x40000, 0x20000, CRC(439ad40a) SHA1(9235bb1c63f852a26a9467fec8c029a2974ef51b) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored /* SPORT - GENERALE 011092 7515 1329 */ ROM_LOAD( "15_domande-rom.ic92", 0x080000, 0x020000, CRC(45dd77e3) SHA1(856fbd1b7f888e1768abceb2465d5bb97a685332) ) - ROM_RELOAD( 0x0a0000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored /* SCIENZA - STORIA 011092 6361 0808 MUSICA - GENERALE 011092 6875 0719 */ ROM_LOAD( "16_domande-rom.ic93", 0x0c0000, 0x020000, CRC(31ececb2) SHA1(a62b1ecdedf8c587afefef4a7d5cdc9746abb093) ) - ROM_RELOAD( 0x0e0000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored /* SCIENZA - GEOGRAFIA 011092 6756 0565 SPETTACOLOS - CINE-TV 011092 6171 0918 */ ROM_LOAD( "17_domande-rom.ic94", 0x100000, 0x020000, CRC(bdce54df) SHA1(b30a3adcdeba26f91f7de8e174f54a158d173dba) ) - ROM_RELOAD( 0x120000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored /* TEMPO LIBERO - CULTURA 011092 6913 0424 SCIENZA - NATURA 011092 6969 0400 @@ -959,114 +1150,295 @@ ROM_START( mastboyiv2 ) SPORT - WC_90 011092 6072 0212 SCIENZA - SESSUOLOGIA 011092 6098 0276 */ ROM_LOAD( "18_domande-rom.ic95", 0x140000, 0x020000, CRC(3ea4dd86) SHA1(6db92010ab6d6adbdf6bea9b257423bb7607c7f2) ) - ROM_RELOAD( 0x160000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored /* SPETTACOLOS - FUMETTI 011092 6938 0496 TEMPO LIBERO - PAROLE 011092 6075 0219 */ ROM_LOAD( "19_domande-rom.ic96", 0x180000, 0x020000, CRC(146c46f9) SHA1(a6b09ffb98146ed2eb67a9d43465abc076758d60) ) - ROM_RELOAD( 0x1a0000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x1a0000, 0x020000 ) // 128kb ROMs are mirrored - /* 0x1c0000 to 0x1fffff EMPTY */ + // 0x1c0000 to 0x1fffff EMPTY - ROM_REGION( 0x00345, "plds", 0 ) - ROM_LOAD( "gal16v8-25.ic32", 0x000000, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic49", 0x000117, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic84", 0x00022e, 0x000117, NO_DUMP ) + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) ROM_END -ROM_START( mastboyi ) +// No internal ROM on the MCU, all the code is on the EPROM. +ROM_START( mastboyic ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "mboy_italia_programa_tablas_27-oct-92_27c512.bin", 0x0000, 0x8000, CRC(1d14ea03) SHA1(c521d3a640db72e350452ab293e04c56271825de) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x0000, 0x8000 ) + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "figuras_mboy_italia_18-3-92_27c512.bin", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets + ROM_LOAD( "figuras_mboy_italia_18-3-92_27c020.bin", 0x00000, 0x40000, CRC(cecbde31) SHA1(5fbe5fbceb9864ede0cf9c593b66df1c9ff88822) ) // 99% gfx + ROM_LOAD( "montajes_parlante_mboy_italia_20-ene-92_27c010.bin", 0x40000, 0x20000, CRC(439ad40a) SHA1(9235bb1c63f852a26a9467fec8c029a2974ef51b) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* SPORT - GENERALE 011092 7515 1329 */ + ROM_LOAD( "15_domande-rom.ic92", 0x080000, 0x020000, CRC(45dd77e3) SHA1(856fbd1b7f888e1768abceb2465d5bb97a685332) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - STORIA 011092 6361 0808 + MUSICA - GENERALE 011092 6875 0719 */ + ROM_LOAD( "16_domande-rom.ic93", 0x0c0000, 0x020000, CRC(31ececb2) SHA1(a62b1ecdedf8c587afefef4a7d5cdc9746abb093) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - GEOGRAFIA 011092 6756 0565 + SPETTACOLOS - CINE-TV 011092 6171 0918 */ + ROM_LOAD( "17_domande-rom.ic94", 0x100000, 0x020000, CRC(bdce54df) SHA1(b30a3adcdeba26f91f7de8e174f54a158d173dba) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - CULTURA 011092 6913 0424 + SCIENZA - NATURA 011092 6969 0400 + TEMPO LIBERO - HOBBY 011092 6569 0300 + SPORT - WC_90 011092 6072 0212 + SCIENZA - SESSUOLOGIA 011092 6098 0276 */ + ROM_LOAD( "18_domande-rom.ic95", 0x140000, 0x020000, CRC(3ea4dd86) SHA1(6db92010ab6d6adbdf6bea9b257423bb7607c7f2) ) + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPETTACOLOS - FUMETTI 011092 6938 0496 + TEMPO LIBERO - PAROLE 011092 6075 0219 */ + ROM_LOAD( "19_domande-rom.ic96", 0x180000, 0x020000, CRC(146c46f9) SHA1(a6b09ffb98146ed2eb67a9d43465abc076758d60) ) + ROM_RELOAD( 0x1a0000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x1c0000 to 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +ROM_START( mastboyiol ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_ia.bin", 0x0000, 0x4000, CRC(a0556932) SHA1(0fc3cd8ff497002f22fcb236c8b77ec840bf1bb3) ) // game code is internal to the CPU! + ROM_LOAD( "3a_i.bin", 0x4000, 0x4000, CRC(b0c424f8) SHA1(b1f71298acd5b6fea4088a7c9db9f32cb06c54d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "4a_i.bin", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets + ROM_LOAD( "1a_i.bin", 0x00000, 0x40000, CRC(67d07e14) SHA1(ce198facd05948010f104f52e30ce8103ec4fff9) ) // 99% gfx + ROM_LOAD( "2a_i_bin", 0x40000, 0x20000, CRC(c8840f36) SHA1(38393988ef1ab440043aa9728fd8687ed67f3910) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* SPORT - GENERALE 011092 7515 1329 */ + ROM_LOAD( "5a_i_preg_ita_0_18-oct-92.bin", 0x080000, 0x020000, CRC(45dd77e3) SHA1(856fbd1b7f888e1768abceb2465d5bb97a685332) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - STORIA 011092 6361 0808 + MUSICA - GENERALE 011092 6875 0719 */ + ROM_LOAD( "6a_i_preg_ita_1_18-oct-92.bin", 0x0c0000, 0x020000, CRC(31ececb2) SHA1(a62b1ecdedf8c587afefef4a7d5cdc9746abb093) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - GEOGRAFIA 011092 6756 0565 + SPETTACOLOS - CINE-TV 011092 6171 0918 */ + ROM_LOAD( "7a_i_preg_ita_2_18-oct-92.bin", 0x100000, 0x020000, CRC(bdce54df) SHA1(b30a3adcdeba26f91f7de8e174f54a158d173dba) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - CULTURA 011092 6913 0424 + SCIENZA - NATURA 011092 6969 0400 + TEMPO LIBERO - HOBBY 011092 6569 0300 + SPORT - WC_90 011092 6072 0212 + SCIENZA - SESSUOLOGIA 011092 6098 0276 */ + ROM_LOAD( "8a_i_preg_ita_3_18-oct-92.bin", 0x140000, 0x020000, CRC(3ea4dd86) SHA1(6db92010ab6d6adbdf6bea9b257423bb7607c7f2) ) + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPETTACOLOS - FUMETTI 011092 6938 0496 + TEMPO LIBERO - PAROLE 011092 6075 0219 */ + ROM_LOAD( "9a_i_preg_ita_4_18-oct-92.bin", 0x180000, 0x020000, CRC(146c46f9) SHA1(a6b09ffb98146ed2eb67a9d43465abc076758d60) ) + ROM_RELOAD( 0x1a0000, 0x020000 ) // 128kb ROMs are mirrored + +// Missing the Italian questions about the Olympic Games ?? + //ROM_LOAD( "olympic_questions_it.bin", 0x180000, 0x020000, NO_DUMP ) // questions about Olympic Games + //ROM_RELOAD( 0x1A0000, 0x020000 ) // 128kb ROMs are mirrored + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + +// No internal ROM on the MCU, all the code is on the EPROM. +ROM_START( mastboyitst ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! - ROM_LOAD( "3-mem-a.ic77", 0x04000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters + ROM_LOAD( "mb_test.bin", 0x0000, 0x8000, CRC(bd6f5c2e) SHA1(e5822f480c24f43c1f0a455174d4187e8db5a8a8) ) // data (1ST AND 2ND HALF IDENTICAL) + ROM_CONTINUE( 0x0000, 0x8000 ) ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip ROM_LOAD( "4.ic91", 0x00000, 0x10000, CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets - ROM_LOAD( "1-mem-c.ic75", 0x000000, 0x040000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx - ROM_LOAD( "2-mem-b.ic76", 0x040000, 0x020000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data - ROM_RELOAD( 0x060000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "1-mem-c.ic75", 0x00000, 0x40000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx + ROM_LOAD( "2-mem-b.ic76", 0x40000, 0x20000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored /* TEMPO LIBERO - HOBBY GIOCHI 011091 5457 0300 SCIENZA - NATURA 011091 5657 0400 SPORT - MONDIALI-90 011091 5999 0212 MUSICA - AUTORI CANZONI 011091 5496 0314 */ ROM_LOAD( "5-rom.ic95", 0x080000, 0x020000, CRC(adc07f12) SHA1(2e0b46ac5884ad459bc354f56ff384ff1932f147) ) - ROM_RELOAD( 0x0a0000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored /* SPORT- GENERALE 011091 5294 0713 SPETTACOLO - CINE-TV 011091 5657 0400 */ ROM_LOAD( "6-rom.ic96", 0x0c0000, 0x020000, CRC(2c52cb1e) SHA1(d58f21c09bd3983497f74ab6c5a37977d9e30f0c) ) - ROM_RELOAD( 0x0e0000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored /* SCIENZA - STORIA 011091 5430 0375 SCIENZA - GEOGRAFIA 011091 5010 0565 */ ROM_LOAD( "7-rom.ic97", 0x100000, 0x020000, CRC(7818408f) SHA1(2a69688b6cda5baf2a45966dd86f10b2fcd54b66) ) - ROM_RELOAD( 0x120000, 0x020000) // 128kb ROMs are mirrored + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored - /* 0x140000 to 0x17ffff EMPTY */ - /* 0x180000 to 0x1bffff EMPTY */ - /* 0x1c0000 to 0x1fffff EMPTY */ + // 0x140000 to 0x17ffff EMPTY + // 0x180000 to 0x1bffff EMPTY + // 0x1c0000 to 0x1fffff EMPTY - ROM_REGION( 0x00345, "plds", 0 ) - ROM_LOAD( "gal16v8-25.ic32", 0x000000, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic49", 0x000117, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic84", 0x00022e, 0x000117, NO_DUMP ) + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) ROM_END -// Only one of the question roms differs (minor wording / spelling changes in most cases) -ROM_START( mastboyia ) +/* Gaelco had an internal version of this set with no internal ROM for the MCU, having the first 0x4000 bytes of the EPROM with actual code, and this hash: + CRC(06465aa5) SHA1(c2958197cf5d0f36efb1654d9d0f7c660768f4d1) */ +ROM_START( mastboyiv2 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU! - ROM_LOAD( "3-mem-a.ic77", 0x04000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters + ROM_LOAD( "hd647180_it_v2.bin", 0x0000, 0x4000, CRC(55a499cc) SHA1(3bd7a175de00f7b102b990bb09b040adf08520f6) ) // game code is internal to the CPU! + ROM_LOAD( "mboy_3_italia_tablas_27-oct-92_27c512.bin", 0x4000, 0x4000, CRC(5fa0f502) SHA1(05d7464b2fec2705bc38b80b09e58ee5d08ee974) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip - ROM_LOAD( "4.ic91", 0x00000, 0x10000, BAD_DUMP CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) // RAMM err. + ROM_LOAD( "14.ic91", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets - ROM_LOAD( "1-mem-c.ic75", 0x000000, 0x040000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx - ROM_LOAD( "2-mem-b.ic76", 0x040000, 0x020000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data - ROM_RELOAD( 0x060000, 0x020000) // 128kb ROMs are mirrored + ROM_LOAD( "11_mem-c.ic75", 0x00000, 0x40000, CRC(4030846a) SHA1(8782bae43d506f8b9e584087d9325a88f7020f4f) ) // 99% gfx + ROM_LOAD( "12_mem-b.ic76", 0x40000, 0x20000, CRC(a38293eb) SHA1(07be32df7dd689b6262f0da2e4e0500bf29d4428) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored -/* TEMPO LIBERO - HOBBY GIOCHI 011091 5457 0300 - SCIENZA - NATURA 011091 5657 0400 - SPORT - MONDIALI-90 011091 5999 0212 - MUSICA - AUTORI CANZONI 011091 5496 0314 */ - ROM_LOAD( "5-alt.ic95", 0x080000, 0x020000, CRC(efa442fa) SHA1(5211ea122083120028348418e33cb71b4ce52b8f) ) - ROM_RELOAD( 0x0a0000, 0x020000) // 128kb ROMs are mirrored +/* SPORT - GENERALE 011092 7515 1329 */ + ROM_LOAD( "15_domande-rom.ic92", 0x080000, 0x020000, CRC(45dd77e3) SHA1(856fbd1b7f888e1768abceb2465d5bb97a685332) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored -/* SPORT- GENERALE 011091 5294 0713 - SPETTACOLO - CINE-TV 011091 5657 0400 */ - ROM_LOAD( "6-rom.ic96", 0x0c0000, 0x020000, CRC(2c52cb1e) SHA1(d58f21c09bd3983497f74ab6c5a37977d9e30f0c) ) - ROM_RELOAD( 0x0e0000, 0x020000) // 128kb ROMs are mirrored +/* SCIENZA - STORIA 011092 6361 0808 + MUSICA - GENERALE 011092 6875 0719 */ + ROM_LOAD( "16_domande-rom.ic93", 0x0c0000, 0x020000, CRC(31ececb2) SHA1(a62b1ecdedf8c587afefef4a7d5cdc9746abb093) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored -/* SCIENZA - STORIA 011091 5430 0375 - SCIENZA - GEOGRAFIA 011091 5010 0565 */ - ROM_LOAD( "7-rom.ic97", 0x100000, 0x020000, CRC(7818408f) SHA1(2a69688b6cda5baf2a45966dd86f10b2fcd54b66) ) - ROM_RELOAD( 0x120000, 0x020000) // 128kb ROMs are mirrored +/* SCIENZA - GEOGRAFIA 011092 6756 0565 + SPETTACOLOS - CINE-TV 011092 6171 0918 */ + ROM_LOAD( "17_domande-rom.ic94", 0x100000, 0x020000, CRC(bdce54df) SHA1(b30a3adcdeba26f91f7de8e174f54a158d173dba) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - CULTURA 011092 6913 0424 + SCIENZA - NATURA 011092 6969 0400 + TEMPO LIBERO - HOBBY 011092 6569 0300 + SPORT - WC_90 011092 6072 0212 + SCIENZA - SESSUOLOGIA 011092 6098 0276 */ + ROM_LOAD( "18_domande-rom.ic95", 0x140000, 0x020000, CRC(3ea4dd86) SHA1(6db92010ab6d6adbdf6bea9b257423bb7607c7f2) ) + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPETTACOLOS - FUMETTI 011092 6938 0496 + TEMPO LIBERO - PAROLE 011092 6075 0219 */ + ROM_LOAD( "19_domande-rom.ic96", 0x180000, 0x020000, CRC(146c46f9) SHA1(a6b09ffb98146ed2eb67a9d43465abc076758d60) ) + ROM_RELOAD( 0x1a0000, 0x020000 ) // 128kb ROMs are mirrored - /* 0x140000 to 0x17ffff EMPTY */ - /* 0x180000 to 0x1bffff EMPTY */ - /* 0x1c0000 to 0x1fffff EMPTY */ + // 0x1c0000 to 0x1fffff EMPTY - ROM_REGION( 0x00345, "plds", 0 ) - ROM_LOAD( "gal16v8-25.ic32", 0x000000, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic49", 0x000117, 0x000117, NO_DUMP ) - ROM_LOAD( "gal16v8-25.ic84", 0x00022e, 0x000117, NO_DUMP ) + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) ROM_END +// PCB dated 03/02/92 +ROM_START( mastboyiv2a) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "hd647180_it_v2.bin", 0x0000, 0x4000, CRC(55a499cc) SHA1(3bd7a175de00f7b102b990bb09b040adf08520f6) ) // game code is internal to the CPU! + ROM_LOAD( "13_mem-a.ic77", 0x4000, 0x4000, CRC(06465aa5) SHA1(c2958197cf5d0f36efb1654d9d0f7c660768f4d1) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) + ROM_CONTINUE( 0x4000, 0x4000 ) // only the last 16kb matters + + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) // ROM accessed by the video chip + ROM_LOAD( "14.ic91", 0x00000, 0x10000, CRC(388beade) SHA1(2161ac884d5537293e2dd9786b3556bbc8ebdce6) ) + + ROM_REGION( 0x200000, "bankedrom", 0 ) // question data - 6 sockets + ROM_LOAD( "11_mem-c.ic75", 0x00000, 0x40000, CRC(4030846a) SHA1(8782bae43d506f8b9e584087d9325a88f7020f4f) ) // 99% gfx + ROM_LOAD( "12_mem-b.ic76", 0x40000, 0x20000, CRC(a38293eb) SHA1(07be32df7dd689b6262f0da2e4e0500bf29d4428) ) // data + ROM_RELOAD( 0x60000, 0x20000 ) // 128kb ROMs are mirrored + +/* SPORT - GENERALE 011092 7515 1329 */ + ROM_LOAD( "15_domande-rom.ic92", 0x080000, 0x020000, CRC(45dd77e3) SHA1(856fbd1b7f888e1768abceb2465d5bb97a685332) ) + ROM_RELOAD( 0x0a0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - STORIA 011092 6361 0808 + MUSICA - GENERALE 011092 6875 0719 */ + ROM_LOAD( "16_domande-rom.ic93", 0x0c0000, 0x020000, CRC(31ececb2) SHA1(a62b1ecdedf8c587afefef4a7d5cdc9746abb093) ) + ROM_RELOAD( 0x0e0000, 0x020000 ) // 128kb ROMs are mirrored + +/* SCIENZA - GEOGRAFIA 011092 6756 0565 + SPETTACOLOS - CINE-TV 011092 6171 0918 */ + ROM_LOAD( "17_domande-rom.ic94", 0x100000, 0x020000, CRC(bdce54df) SHA1(b30a3adcdeba26f91f7de8e174f54a158d173dba) ) + ROM_RELOAD( 0x120000, 0x020000 ) // 128kb ROMs are mirrored + +/* TEMPO LIBERO - CULTURA 011092 6913 0424 + SCIENZA - NATURA 011092 6969 0400 + TEMPO LIBERO - HOBBY 011092 6569 0300 + SPORT - WC_90 011092 6072 0212 + SCIENZA - SESSUOLOGIA 011092 6098 0276 */ + ROM_LOAD( "18_domande-rom.ic95", 0x140000, 0x020000, CRC(3ea4dd86) SHA1(6db92010ab6d6adbdf6bea9b257423bb7607c7f2) ) + ROM_RELOAD( 0x160000, 0x020000 ) // 128kb ROMs are mirrored + +/* SPETTACOLOS - FUMETTI 011092 6938 0496 + TEMPO LIBERO - PAROLE 011092 6075 0219 */ + ROM_LOAD( "19_domande-rom.ic96", 0x180000, 0x020000, CRC(146c46f9) SHA1(a6b09ffb98146ed2eb67a9d43465abc076758d60) ) + ROM_RELOAD( 0x1a0000, 0x020000 ) // 128kb ROMs are mirrored + + // 0x1c0000 to 0x1fffff EMPTY + + ROM_REGION( 0x117, "plds", 0 ) + ROM_LOAD( "gal16v8-25.ic32", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic49", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8-25.ic84", 0x000, 0x117, NO_DUMP ) +ROM_END + + } // anonymous namespace -GAME( 1991, mastboy, 0, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spanish, rev A)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, mastboya, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spanish, rev A, hack?)", MACHINE_SUPPORTS_SAVE ) +// Every known PCB has the MCU sub-PCB silkscreened as "REV- A". The dates on the comments are from the program ROM sticker. + +GAME( 1991, mastboy, 0, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spain, set 1, checksum E49B)", MACHINE_SUPPORTS_SAVE ) // 27-Nov-1992 +GAME( 1991, mastboya, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spain, set 2, checksum E5AD)", MACHINE_SUPPORTS_SAVE ) // No text on license box at boot +GAME( 1991, mastboyb, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spain, set 3, checksum 6070)", MACHINE_SUPPORTS_SAVE ) // 27-Nov-1992 +GAME( 1991, mastboyc, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Spain, set 4, checksum CC6D)", MACHINE_SUPPORTS_SAVE ) // 23-Oct-1992 + +GAME( 1992, mastboyol, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy Olympic (Spain, set 1, checksum 7309)", MACHINE_SUPPORTS_SAVE ) // 18-Oct-1992 +GAME( 1992, mastboyola, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy Olympic (Spain, set 2, checksum 741B)", MACHINE_SUPPORTS_SAVE ) // 18-Oct-1992. No text on license box at boot + +GAME( 1991, mastboyv2, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy Version II (Spain, set 1, checksum 5A0B)", MACHINE_SUPPORTS_SAVE ) // 17-Oct-1992 +GAME( 1991, mastboyv2a, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy Version II (Spain, set 2, checksum 5B1D)", MACHINE_SUPPORTS_SAVE ) // 17-Oct-1992. No text on license box at boot // There were specific Gaelco Master Boy PCBs for the Italian market, silkcreened in Italian instead of in Spanish ("DOMANDE ROMS", "MASTER-BOY VERSIONE", etc.). -GAME( 1992, mastboyiv2, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy Version II (Italian, rev A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Questions from 1992, needs a different MCU program -GAME( 1991, mastboyi, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italian, rev A, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, mastboyia, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italian, rev A, set 2)", MACHINE_SUPPORTS_SAVE ) + +GAME( 1991, mastboyi, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italy, set 1, checksum E7C5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, mastboyia, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italy, set 2, checksum E7C5)", MACHINE_SUPPORTS_SAVE ) // Same checksum as 'mastboyi', only the questions are different +GAME( 1991, mastboyib, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italy, set 3, checksum 6918)", MACHINE_SUPPORTS_SAVE ) // 27-Oct-1992 +GAME( 1991, mastboyic, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy (Italy, set 4, checksum 680C)", MACHINE_SUPPORTS_SAVE ) // 27-Oct-1992 + +GAME( 1991, mastboyiol, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy Olympic (Italy, set 1, checksum 77A8)", MACHINE_SUPPORTS_SAVE ) // 18-Oct-1992 + +GAME( 1991, mastboyitst, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco", "Master Boy (Italy, test version)", MACHINE_SUPPORTS_SAVE ) + +GAME( 1992, mastboyiv2, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy Version II (Italy, set 1, checksum 618F)", MACHINE_SUPPORTS_SAVE ) // 27-Oct-1992 +GAME( 1992, mastboyiv2a, mastboy, mastboy, mastboy, mastboy_state, empty_init, ROT0, "Gaelco (Playmark license)", "Master Boy Version II (Italy, set 2, checksum 629B)", MACHINE_SUPPORTS_SAVE ) // 27-Oct-1992. No text on license box at boot diff --git a/src/mame/gaelco/mastboyo.cpp b/src/mame/gaelco/mastboyo.cpp index 67bcb2db399..1c4890e95ef 100644 --- a/src/mame/gaelco/mastboyo.cpp +++ b/src/mame/gaelco/mastboyo.cpp @@ -338,6 +338,26 @@ ROM_START( mastboyoc ) // PCB marked 'MMV-1 FABRICADO POR GAELCO' ROM_LOAD( "l_82s129.ic40", 0x000, 0x100, CRC(4d061216) SHA1(1abf9320da75a3fd23c6bdbcc4088d18e133c4e5) ) ROM_END +// The distributor text is empty on this set +ROM_START( mastboyod ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "mb_p1.ic14", 0x0000, 0x4000, CRC(9ff8d386) SHA1(4bf0df6d5cb605f2a4c9ef3cf0ece229ce8cbb40) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "fij_6_27128.bin", 0x0000, 0x4000, CRC(66ebd96b) SHA1(efd836cae7428131d653aa218c28d73b0afc020c) ) + + ROM_REGION( 0x80000, "questions", ROMREGION_ERASEFF ) + ROM_LOAD( "mb_3-4_27c512.bin", 0x60000, 0x10000, CRC(b2819e38) SHA1(e4dd036747221926d0f9f86e00e28f578decc942) ) + ROM_LOAD( "mb_1-2_27c512.bin", 0x70000, 0x10000, CRC(98fd79d2) SHA1(7a12d57abe7738d6ba0d0cdfe367544990c8bc6a) ) + + ROM_REGION( 0x100, "proms", 0 ) // timing or memory mapping? + ROM_LOAD( "d_82s129.ic23", 0x000, 0x100, CRC(d5fd2dfd) SHA1(66e3afa9e73507db0647d125c0be992b27d08adc) ) + + ROM_REGION( 0x200, "palette", 0 ) + ROM_LOAD( "h_82s129.ic39", 0x100, 0x100, CRC(8e965fc3) SHA1(b52c8e505438937c7a5d3e1393d54f0ad0425e78) ) + ROM_LOAD( "l_82s129.ic40", 0x000, 0x100, CRC(4d061216) SHA1(1abf9320da75a3fd23c6bdbcc4088d18e133c4e5) ) +ROM_END + } // anonymous namespace @@ -345,3 +365,4 @@ GAME( 1987, mastboyo, 0, mastboyo, mastboyo, mastboyo_state, empty_init, GAME( 1987, mastboyoa, mastboyo, mastboyo, mastboyo, mastboyo_state, empty_init, ROT0, "Gaelco (Covielsa license)", "Master Boy (1987, Z80 hardware, Covielsa, set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, mastboyob, mastboyo, mastboyo, mastboyo, mastboyo_state, empty_init, ROT0, "Gaelco (Ichi-Funtel license)", "Master Boy (1987, Z80 hardware, Ichi-Funtel, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, mastboyoc, mastboyo, mastboyo, mastboyo, mastboyo_state, empty_init, ROT0, "Gaelco (Ichi-Funtel license)", "Master Boy (1987, Z80 hardware, Ichi-Funtel, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, mastboyod, mastboyo, mastboyo, mastboyo, mastboyo_state, empty_init, ROT0, "Gaelco", "Master Boy (1987, Z80 hardware)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/galaxian/galaxian.cpp b/src/mame/galaxian/galaxian.cpp index 12030b97837..1f34a394a08 100644 --- a/src/mame/galaxian/galaxian.cpp +++ b/src/mame/galaxian/galaxian.cpp @@ -1785,6 +1785,12 @@ void pisces_state::pisces_map(address_map &map) map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); // coin lockout replaced by graphics bank } +void pisces_state::ladybugg2_opcodes_map(address_map &map) +{ + map(0x0000, 0x0fff).rom().region("maincpu", 0x4000); + map(0x1000, 0x3fff).rom().region("maincpu", 0x1000); +} + void galaxian_state::frogg_map(address_map &map) { galaxian_map(map); @@ -7668,6 +7674,12 @@ void pisces_state::pisces(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::pisces_map); } +void pisces_state::ladybugg2(machine_config &config) +{ + pisces(config); + m_maincpu->set_addrmap(AS_OPCODES, &pisces_state::ladybugg2_opcodes_map); +} + void galaxian_state::victoryc(machine_config &config) { galaxian(config); @@ -8676,10 +8688,9 @@ void galaxian_state::decode_dingoe() void galaxian_state::decode_frogger_sound() { uint8_t *rombase = memregion("audiocpu")->base(); - uint32_t offs; // the first ROM of the sound CPU has data lines D0 and D1 swapped - for (offs = 0; offs < 0x800; offs++) + for (uint32_t offs = 0; offs < 0x800; offs++) rombase[offs] = bitswap<8>(rombase[offs], 7,6,5,4,3,2,0,1); } @@ -8687,10 +8698,9 @@ void galaxian_state::decode_frogger_sound() void galaxian_state::decode_froggermc_sound() { uint8_t *rombase = memregion("audiocpu")->base(); - uint32_t offs; // the first ROM of the sound CPU has data lines D0 and D1 swapped - for (offs = 0; offs < 0x1000; offs++) + for (uint32_t offs = 0; offs < 0x1000; offs++) rombase[offs] = bitswap<8>(rombase[offs], 7,6,5,4,3,2,0,1); } @@ -8698,10 +8708,9 @@ void galaxian_state::decode_froggermc_sound() void galaxian_state::decode_frogger_gfx() { uint8_t *rombase = memregion("gfx1")->base(); - uint32_t offs; // the 2nd gfx ROM has data lines D0 and D1 swapped - for (offs = 0x0800; offs < 0x1000; offs++) + for (uint32_t offs = 0x0800; offs < 0x1000; offs++) rombase[offs] = bitswap<8>(rombase[offs], 7,6,5,4,3,2,0,1); } @@ -8929,6 +8938,20 @@ void galaxian_state::init_batman2() common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info); } +void galaxian_state::init_ladybugg2() +{ + init_batman2(); + + uint8_t *romdata = memregion("maincpu")->base(); + + // descramble the content of each 0x100 block + for (int i = 0; i < 0x10000; i += 0x100) + { + using std::swap; + for (int j = 0; j < (0x100 / 2); j++) + swap(romdata[i | j], romdata[i | (j ^ 0xff)]); + } +} void galaxian_state::init_frogg() { @@ -11781,6 +11804,29 @@ ROM_START( ladybugg ) // Arctic Multi-System? ROM_LOAD( "lbuggx.clr", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) ) ROM_END +/* Standard Galaxian bootleg PCB with a small sub-board with the five program ROMs, a PAL16L8, a 74540 and two more ICs + with their surfaces scratched-out (and five empty ROM sockets). */ +ROM_START( ladybugg2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "5", 0x0000, 0x1000, CRC(78264eab) SHA1(0e59fa4b4c0340d083b13603bde70aa3a4144829) ) // data for first 0x1000 + ROM_LOAD( "2", 0x1000, 0x1000, CRC(eb359d27) SHA1(3109eddf1d1532362fb4862a471ac14323cdbe52) ) + ROM_LOAD( "3", 0x2000, 0x1000, CRC(72eef4f2) SHA1(e04d6b422df232881455a658c0a9e54bc316b435) ) + ROM_LOAD( "4", 0x3000, 0x1000, CRC(887c95dd) SHA1(2109c455a91ccc022d8dfd90393a83d7a24b4460) ) + ROM_LOAD( "1", 0x4000, 0x1000, CRC(e5b777ca) SHA1(6c833e696bc672829aa4bf6a1dd1860a45db8648) ) // opcodes for first 0x1000 + + ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_LOAD( "lbuggx.a", 0x0800, 0x0800, CRC(7efb9dc5) SHA1(5e02ea8cd1a1c8efa6708a8615cc2dc9da65a455) ) + ROM_CONTINUE( 0x0000, 0x0800 ) + ROM_LOAD( "lbuggx.b", 0x1800, 0x0800, CRC(351d4ddc) SHA1(048e8a60e57c6eb0a4d7c2175ddd46c4273756c5) ) + ROM_CONTINUE( 0x1000, 0x0800 ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "prom.bin", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) ) + + ROM_REGION( 0x0117, "pld", 0 ) + ROM_LOAD( "pal16l8.bin", 0x0000, 0x0117, BAD_DUMP CRC(13ca9897) SHA1(de8dcea2a2a17aa65ac02e389322113320f8d26b) ) // On the program ROMs PCB. Bruteforced (compiled for a GAL16V8), but not verified +ROM_END + ROM_START( atlantisb ) // Artic Multi-System ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "1", 0x0000, 0x0800, CRC(2b612351) SHA1(cfd244946190c062146716c0417c35be216943e4) ) // aka "subfury" @@ -16759,7 +16805,8 @@ GAME( 1982, crazym, puckman, galaxian, pacmanblb, galaxian_state, init_ GAME( 1981, ghostmun, puckman, pacmanbl, streakng, galaxian_state, init_ghostmun, ROT90, "bootleg (Leisure and Allied)", "Ghost Muncher", MACHINE_SUPPORTS_SAVE ) GAME( 1981, phoenxp2, phoenix, pisces, phoenxp2, pisces_state, init_batman2, ROT270, "bootleg", "Phoenix Part 2", MACHINE_SUPPORTS_SAVE ) GAME( 1981, batman2, phoenix, pisces, batman2, pisces_state, init_batman2, ROT270, "bootleg", "Batman Part 2", MACHINE_SUPPORTS_SAVE ) // Similar to pisces, but with different video banking characteristics -GAME( 1983, ladybugg, ladybug, pisces, ladybugg, pisces_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, ladybugg, ladybug, pisces, ladybugg, pisces_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware, unencrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, ladybugg2, ladybug, ladybugg2, ladybugg, pisces_state, init_ladybugg2, ROT270, "bootleg (TAI / DLI)", "Lady Bug (bootleg on Galaxian hardware, encrypted)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, atlantisb, atlantis, galaxian, atlantib, galaxian_state, init_galaxian, ROT270, "bootleg", "Battle of Atlantis (bootleg)", MACHINE_SUPPORTS_SAVE ) // I don't know if this should have a starfield... GAME( 1982, tenspot, 0, tenspot, tenspot, tenspot_state, init_tenspot, ROT270, "Thomas Automatics", "Ten Spot", MACHINE_NOT_WORKING ) // Work out how menu works diff --git a/src/mame/galaxian/galaxian.h b/src/mame/galaxian/galaxian.h index 3800c993c30..d112ced970c 100644 --- a/src/mame/galaxian/galaxian.h +++ b/src/mame/galaxian/galaxian.h @@ -151,56 +151,57 @@ public: void theend_coin_counter_w(uint8_t data); uint8_t explorer_sound_latch_r(); uint8_t frogger_sound_timer_r(); - void init_galaxian(); - void init_nolock(); - void init_azurian(); - void init_batman2(); - void init_highroll(); - void init_frogg(); - void init_mooncrst(); - void init_mooncrsu(); - void init_mooncrgx(); - void init_moonqsr(); - void init_pacmanbl(); - void init_devilfshg(); - void init_jumpbug(); - void init_jumpbugbc(); - void init_checkman(); - void init_checkmaj(); - void init_dingo(); - void init_dingoe(); - void init_kong(); - void init_fantastc(); - void init_timefgtr(); - void init_theend(); - void init_scramble(); - void init_explorer(); - void init_mandinga(); - void init_mandingaeg(); - void init_atlantis(); - void init_scobra(); - void init_scobrae(); - void init_losttomb(); - void init_frogger(); - void init_froggermc(); - void init_froggers(); - void init_quaak(); - void init_turtles(); - void init_ckongs(); - void init_ckonggx(); - void init_anteater(); - void init_anteateruk(); - void init_superbon(); - void init_calipso(); - void init_ghostmun(); - void init_froggrs(); - void init_warofbugg(); - void init_jungsub(); - void init_mimonkey(); - void init_mimonkeyb(); - void init_victoryc(); - void init_bigkonggx(); - void init_crazym(); + void init_galaxian() ATTR_COLD; + void init_nolock() ATTR_COLD; + void init_azurian() ATTR_COLD; + void init_batman2() ATTR_COLD; + void init_ladybugg2() ATTR_COLD; + void init_highroll() ATTR_COLD; + void init_frogg() ATTR_COLD; + void init_mooncrst() ATTR_COLD; + void init_mooncrsu() ATTR_COLD; + void init_mooncrgx() ATTR_COLD; + void init_moonqsr() ATTR_COLD; + void init_pacmanbl() ATTR_COLD; + void init_devilfshg() ATTR_COLD; + void init_jumpbug() ATTR_COLD; + void init_jumpbugbc() ATTR_COLD; + void init_checkman() ATTR_COLD; + void init_checkmaj() ATTR_COLD; + void init_dingo() ATTR_COLD; + void init_dingoe() ATTR_COLD; + void init_kong() ATTR_COLD; + void init_fantastc() ATTR_COLD; + void init_timefgtr() ATTR_COLD; + void init_theend() ATTR_COLD; + void init_scramble() ATTR_COLD; + void init_explorer() ATTR_COLD; + void init_mandinga() ATTR_COLD; + void init_mandingaeg() ATTR_COLD; + void init_atlantis() ATTR_COLD; + void init_scobra() ATTR_COLD; + void init_scobrae() ATTR_COLD; + void init_losttomb() ATTR_COLD; + void init_frogger() ATTR_COLD; + void init_froggermc() ATTR_COLD; + void init_froggers() ATTR_COLD; + void init_quaak() ATTR_COLD; + void init_turtles() ATTR_COLD; + void init_ckongs() ATTR_COLD; + void init_ckonggx() ATTR_COLD; + void init_anteater() ATTR_COLD; + void init_anteateruk() ATTR_COLD; + void init_superbon() ATTR_COLD; + void init_calipso() ATTR_COLD; + void init_ghostmun() ATTR_COLD; + void init_froggrs() ATTR_COLD; + void init_warofbugg() ATTR_COLD; + void init_jungsub() ATTR_COLD; + void init_mimonkey() ATTR_COLD; + void init_mimonkeyb() ATTR_COLD; + void init_victoryc() ATTR_COLD; + void init_bigkonggx() ATTR_COLD; + void init_crazym() ATTR_COLD; TILE_GET_INFO_MEMBER(bg_get_tile_info); void galaxian_palette(palette_device &palette); @@ -265,66 +266,66 @@ public: draw_background_func draw_background, extend_tile_info_func extend_tile_info, extend_sprite_info_func extend_sprite_info); - void galaxian_base(machine_config &config); - void sidam_bootleg_base(machine_config &config); - void konami_base(machine_config &config); - void konami_sound_1x_ay8910(machine_config &config); - void konami_sound_2x_ay8910(machine_config &config); - void scramble_base(machine_config &config); - void timefgtr(machine_config &config); - void moonqsr(machine_config &config); - void frogger(machine_config &config); - void anteatergg(machine_config &config); - void ozon1(machine_config &config); - void theend(machine_config &config); - void turtles(machine_config &config); - void fantastc(machine_config &config); - void jumpbug(machine_config &config); - void jumpbugbrf(machine_config &config); - void checkmaj(machine_config &config); - void pacmanbl(machine_config &config); - void quaak(machine_config &config); - void galaxian(machine_config &config); - void highroll(machine_config &config); - void devilfshg(machine_config &config); - void froggers(machine_config &config); - void froggervd(machine_config &config); - void anteateruk(machine_config &config); - void anteaterg(machine_config &config); - void anteater(machine_config &config); - void turpins(machine_config &config); - void explorer(machine_config &config); - void scramble(machine_config &config); - void scobra(machine_config &config); - void froggermc(machine_config &config); - void froggeram(machine_config &config); - void spactrai(machine_config &config); - void takeoff(machine_config &config); - void mooncrst(machine_config &config); - void eagle(machine_config &config); - void ckongs(machine_config &config); - void frogf(machine_config &config); - void amigo2(machine_config &config); - void checkman(machine_config &config); - void jungsub(machine_config &config); - void victoryc(machine_config &config); - void frogg(machine_config &config); - void mandingarf(machine_config &config); - void mandinka(machine_config &config); - void thepitm(machine_config &config); - void kong(machine_config &config); - void bongo(machine_config &config); - void bongog(machine_config &config); - void scorpnmc(machine_config &config); - void ckongg(machine_config &config); - void ckongmc(machine_config &config); - void astroamb(machine_config &config); - void mimonkey(machine_config &config); - void mimonscr(machine_config &config); - void galartic(machine_config &config); - void bigkonggx(machine_config &config); - void scrammr(machine_config &config); - void turpinnv(machine_config &config); + void galaxian_base(machine_config &config) ATTR_COLD; + void sidam_bootleg_base(machine_config &config) ATTR_COLD; + void konami_base(machine_config &config) ATTR_COLD; + void konami_sound_1x_ay8910(machine_config &config) ATTR_COLD; + void konami_sound_2x_ay8910(machine_config &config) ATTR_COLD; + void scramble_base(machine_config &config) ATTR_COLD; + void timefgtr(machine_config &config) ATTR_COLD; + void moonqsr(machine_config &config) ATTR_COLD; + void frogger(machine_config &config) ATTR_COLD; + void anteatergg(machine_config &config) ATTR_COLD; + void ozon1(machine_config &config) ATTR_COLD; + void theend(machine_config &config) ATTR_COLD; + void turtles(machine_config &config) ATTR_COLD; + void fantastc(machine_config &config) ATTR_COLD; + void jumpbug(machine_config &config) ATTR_COLD; + void jumpbugbrf(machine_config &config) ATTR_COLD; + void checkmaj(machine_config &config) ATTR_COLD; + void pacmanbl(machine_config &config) ATTR_COLD; + void quaak(machine_config &config) ATTR_COLD; + void galaxian(machine_config &config) ATTR_COLD; + void highroll(machine_config &config) ATTR_COLD; + void devilfshg(machine_config &config) ATTR_COLD; + void froggers(machine_config &config) ATTR_COLD; + void froggervd(machine_config &config) ATTR_COLD; + void anteateruk(machine_config &config) ATTR_COLD; + void anteaterg(machine_config &config) ATTR_COLD; + void anteater(machine_config &config) ATTR_COLD; + void turpins(machine_config &config) ATTR_COLD; + void explorer(machine_config &config) ATTR_COLD; + void scramble(machine_config &config) ATTR_COLD; + void scobra(machine_config &config) ATTR_COLD; + void froggermc(machine_config &config) ATTR_COLD; + void froggeram(machine_config &config) ATTR_COLD; + void spactrai(machine_config &config) ATTR_COLD; + void takeoff(machine_config &config) ATTR_COLD; + void mooncrst(machine_config &config) ATTR_COLD; + void eagle(machine_config &config) ATTR_COLD; + void ckongs(machine_config &config) ATTR_COLD; + void frogf(machine_config &config) ATTR_COLD; + void amigo2(machine_config &config) ATTR_COLD; + void checkman(machine_config &config) ATTR_COLD; + void jungsub(machine_config &config) ATTR_COLD; + void victoryc(machine_config &config) ATTR_COLD; + void frogg(machine_config &config) ATTR_COLD; + void mandingarf(machine_config &config) ATTR_COLD; + void mandinka(machine_config &config) ATTR_COLD; + void thepitm(machine_config &config) ATTR_COLD; + void kong(machine_config &config) ATTR_COLD; + void bongo(machine_config &config) ATTR_COLD; + void bongog(machine_config &config) ATTR_COLD; + void scorpnmc(machine_config &config) ATTR_COLD; + void ckongg(machine_config &config) ATTR_COLD; + void ckongmc(machine_config &config) ATTR_COLD; + void astroamb(machine_config &config) ATTR_COLD; + void mimonkey(machine_config &config) ATTR_COLD; + void mimonscr(machine_config &config) ATTR_COLD; + void galartic(machine_config &config) ATTR_COLD; + void bigkonggx(machine_config &config) ATTR_COLD; + void scrammr(machine_config &config) ATTR_COLD; + void turpinnv(machine_config &config) ATTR_COLD; template <int Mask> ioport_value ckongg_coinage_r(); template <int Mask> int ckongs_coinage_r(); @@ -470,8 +471,8 @@ public: { } - void bagmanmc(machine_config &config); - void init_bagmanmc(); + void bagmanmc(machine_config &config) ATTR_COLD; + void init_bagmanmc() ATTR_COLD; protected: void bagmanmc_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); @@ -494,12 +495,12 @@ public: , m_rombank(*this, "rombank") { } - void gmgalax(machine_config &config); + void gmgalax(machine_config &config) ATTR_COLD; DECLARE_INPUT_CHANGED_MEMBER(game_changed); template <int N> ioport_value port_r(); - void init_gmgalax(); + void init_gmgalax() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -524,11 +525,12 @@ public: { } - void pisces(machine_config &config); - void porter(machine_config &config); - void skybase(machine_config &config); + void ladybugg2(machine_config &config) ATTR_COLD; + void pisces(machine_config &config) ATTR_COLD; + void porter(machine_config &config) ATTR_COLD; + void skybase(machine_config &config) ATTR_COLD; - void init_pisces(); + void init_pisces() ATTR_COLD; protected: void pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); @@ -538,6 +540,7 @@ private: void pisces_map(address_map &map) ATTR_COLD; void skybase_map(address_map &map) ATTR_COLD; void porter_map(address_map &map) ATTR_COLD; + void ladybugg2_opcodes_map (address_map &map) ATTR_COLD; }; @@ -550,8 +553,8 @@ public: { } - void fourplay(machine_config &config); - void init_fourplay(); + void fourplay(machine_config &config) ATTR_COLD; + void init_fourplay() ATTR_COLD; private: void fourplay_rombank_w(offs_t offset, uint8_t data); @@ -569,10 +572,10 @@ public: { } - void mshuttle(machine_config &config); + void mshuttle(machine_config &config) ATTR_COLD; - void init_mshuttle(); - void init_mshuttlj(); + void init_mshuttle() ATTR_COLD; + void init_mshuttlj() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -606,7 +609,7 @@ public: int muxbit_r(); int noise_r(); - void kingball(machine_config &config); + void kingball(machine_config &config) ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -638,8 +641,8 @@ public: { } - void namenayo(machine_config &config); - void init_namenayo(); + void namenayo(machine_config &config) ATTR_COLD; + void init_namenayo() ATTR_COLD; private: void namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -665,9 +668,8 @@ public: DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake); - void tenspot(machine_config &config); - - void init_tenspot(); + void tenspot(machine_config &config) ATTR_COLD; + void init_tenspot() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -699,8 +701,8 @@ public: { } - void zigzag(machine_config &config); - void init_zigzag(); + void zigzag(machine_config &config) ATTR_COLD; + void init_zigzag() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -724,8 +726,8 @@ public: { } - void videight(machine_config &config); - void init_videight(); + void videight(machine_config &config) ATTR_COLD; + void init_videight() ATTR_COLD; private: void videight_rombank_w(offs_t offset, uint8_t data); @@ -747,10 +749,10 @@ public: { } - void guttangt(machine_config &config); - void guttangts3(machine_config &config); - void init_guttangt(); - void init_guttangts3(); + void guttangt(machine_config &config) ATTR_COLD; + void guttangts3(machine_config &config) ATTR_COLD; + void init_guttangt() ATTR_COLD; + void init_guttangts3() ATTR_COLD; private: void guttangt_map(address_map &map) ATTR_COLD; @@ -770,8 +772,8 @@ public: { } - void scorpion(machine_config &config); - void init_scorpion(); + void scorpion(machine_config &config) ATTR_COLD; + void init_scorpion() ATTR_COLD; private: uint8_t ay8910_r(offs_t offset); @@ -799,9 +801,8 @@ public: { } - void sfx(machine_config &config); - - void init_sfx(); + void sfx(machine_config &config) ATTR_COLD; + void init_sfx() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -834,8 +835,7 @@ public: } void monsterz(machine_config& config); - - void init_monsterz(); + void init_monsterz() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -867,7 +867,7 @@ public: ioport_value dial_r(); - void moonwar(machine_config &config); + void moonwar(machine_config &config) ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -896,8 +896,8 @@ public: { } - void sbhoei(machine_config &config); - void init_sbhoei(); + void sbhoei(machine_config &config) ATTR_COLD; + void init_sbhoei() ATTR_COLD; void sbhoei_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void sbhoei_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); @@ -932,8 +932,8 @@ public: { } - void bmxstunts(machine_config &config); - void init_bmxstunts(); + void bmxstunts(machine_config &config) ATTR_COLD; + void init_bmxstunts() ATTR_COLD; void bmxstunts_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); private: 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/konami/rollerg.cpp b/src/mame/konami/rollerg.cpp index 2b003a5684c..5d8cfc21f88 100644 --- a/src/mame/konami/rollerg.cpp +++ b/src/mame/konami/rollerg.cpp @@ -54,7 +54,7 @@ public: m_zoomroms_view(*this, "zoomroms_view") { } - void rollerg(machine_config &config); + void rollerg(machine_config &config) ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -79,7 +79,6 @@ private: void sound_arm_nmi_w(uint8_t data); void z80_nmi_w(int state); uint8_t pip_r(); - void irq_ack_w(int state); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); K05324X_CB_MEMBER(sprite_callback); K051316_CB_MEMBER(zoom_callback); @@ -320,11 +319,6 @@ INPUT_PORTS_END ***************************************************************************/ -void rollerg_state::irq_ack_w(int state) -{ - m_maincpu->set_input_line(0, CLEAR_LINE); -} - void rollerg_state::machine_start() { uint8_t *ROM = memregion("maincpu")->base(); @@ -378,8 +372,8 @@ void rollerg_state::rollerg(machine_config &config) m_k051316->set_offsets(22, 1); m_k051316->set_zoom_callback(FUNC(rollerg_state::zoom_callback)); - k053252_device &k053252(K053252(config, "k053252", 3000000 * 2)); - k053252.int1_ack().set(FUNC(rollerg_state::irq_ack_w)); + k053252_device &k053252(K053252(config, "k053252", 3'000'000 * 2)); + k053252.int1_ack().set_inputline(m_maincpu, INPUT_LINE_IRQ0, CLEAR_LINE); k053252.set_offsets(14*8, 2*8); // sound hardware @@ -438,6 +432,25 @@ ROM_START( rollergj ) ROM_LOAD( "999h09.c5", 0x000000, 0x080000, CRC(c5188783) SHA1(d9ab69e4197ba2b42e3b0bb713236c8037fc2ab3) ) ROM_END +ROM_START( rollerga ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "g7", 0x00000, 0x20000, CRC(5475c39a) SHA1(7867173245c90b6196dd1c3618217735f81e963f) ) // blank label + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "e11", 0x0000, 0x8000, CRC(1fcfb22f) SHA1(ef058a7de6ba7cf310b91975345113acc6078f8a) ) // blank label + + ROM_REGION( 0x200000, "k053244", 0 ) // sprites + ROM_LOAD32_WORD( "999h06.k2", 0x000000, 0x100000, CRC(eda05130) SHA1(b52073a4a4651035d5f1e112601ceb2d004b2143) ) + ROM_LOAD32_WORD( "999h05.k8", 0x000002, 0x100000, CRC(5f321c7d) SHA1(d60a3480891b83ac109f2fecfe2b958bac310c15) ) + + ROM_REGION( 0x080000, "k051316", 0 ) // zoom + ROM_LOAD( "999h03.d23", 0x000000, 0x040000, CRC(ea1edbd2) SHA1(a17d19f873384287e1e47222d46274e7408b40d4) ) + ROM_LOAD( "999h04.f23", 0x040000, 0x040000, CRC(c1a35355) SHA1(615606d30500a8f2be19171893e985b085fff2fc) ) + + ROM_REGION( 0x80000, "k053260", 0 ) // samples + ROM_LOAD( "999h09.c5", 0x000000, 0x080000, CRC(c5188783) SHA1(d9ab69e4197ba2b42e3b0bb713236c8037fc2ab3) ) +ROM_END + } // anonymous namespace @@ -449,3 +462,4 @@ ROM_END GAME( 1991, rollerg, 0, rollerg, rollerg, rollerg_state, empty_init, ROT0, "Konami", "Rollergames (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, rollergj, rollerg, rollerg, rollerg, rollerg_state, empty_init, ROT0, "Konami", "Rollergames (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, rollerga, rollerg, rollerg, rollerg, rollerg_state, empty_init, ROT0, "Konami", "Rollergames (Asia)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2c3441fc434..70ec12aa4db 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -16859,6 +16859,7 @@ brkthru brkthrubl brkthruj brkthrut +brkthruu darwin forcebrk @@ -18065,6 +18066,7 @@ dream9 @source:excellent/es9501.cpp d9flower +d9flowera specd9 @source:excellent/gcpinbal.cpp @@ -18690,15 +18692,27 @@ goldartp @source:gaelco/mastboy.cpp mastboy mastboya +mastboyb +mastboyc mastboyi mastboyia +mastboyib +mastboyic +mastboyiol +mastboyitst mastboyiv2 +mastboyiv2a +mastboyol +mastboyola +mastboyv2 +mastboyv2a @source:gaelco/mastboyo.cpp mastboyo mastboyoa mastboyob mastboyoc +mastboyod @source:gaelco/radikaldarts.cpp radikaldrt @@ -18889,6 +18903,7 @@ kingballj komemokos kong ladybugg +ladybugg2 levers losttomb losttombh @@ -20521,6 +20536,7 @@ drgnwrldv30 drgnwrldv40k lhb lhb2 +lhb2cpgs lhb3 lhbv33c nkishusp @@ -25075,6 +25091,7 @@ ropeman @source:konami/rollerg.cpp rollerg +rollerga rollergj @source:konami/rungun.cpp @@ -32750,6 +32767,7 @@ twinbskt saiyukip umipoker umipokera +vparadis @source:misc/unkgolf.cpp unkgolf @@ -42659,10 +42677,10 @@ boo1000 @source:skeleton/boramz80.cpp pkboram pkrboram +pkts tpkboram tpkborama tpkg2 -unkboram @source:skeleton/bpmmicro.cpp bp1200 @@ -47602,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 5a9616af42a..50ad5cd4c23 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -64,25 +64,23 @@ 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. - +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 -- work out how payout 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) +- 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) +- 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) -- complete inputs for baile, yyhm, jinpaish, ssanguoj, cjdlz (needs someone who understands - Chinese and knows how to play) -- game logic seems broken in mahjong games (reach permitted when it shouldn't be, chi not - permitted when it should be, other issues) -- game logic in baile seems broken (you always win), maybe due to the patches? +- 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?) -- older games don't show key-out/payout in input test - game bug or emulation bug? - the newer games seem to use range 0x9e1000-0x9e1fff during gameplay Video references: @@ -97,6 +95,7 @@ super555: https://www.youtube.com/watch?v=CCUKdbQ5O-U #include "cpu/mcs51/mcs51.h" #include "cpu/pic16x8x/pic16x8x.h" #include "machine/eepromser.h" +#include "machine/ticket.h" #include "sound/okim6295.h" #include "sound/ymopl.h" #include "sound/ymopm.h" @@ -134,6 +133,7 @@ public: , m_palette(*this, "palette") , m_oki(*this, "oki") , m_ymsnd(*this, "ymsnd") + , m_counters(*this, "COUNTERS") , m_dsw(*this, "DSW%u", 1U) , m_key(*this, "KEY%u", 0U) { @@ -156,6 +156,7 @@ public: void init_super555() ATTR_COLD; template <unsigned Shift> ioport_value keyboard_r(); + template <unsigned N> void counter_w(int state); protected: virtual void video_start() override ATTR_COLD; @@ -171,6 +172,8 @@ protected: required_device<palette_device> m_palette; required_device<okim6295_device> m_oki; optional_device<ym2151_device> m_ymsnd; + + required_ioport m_counters; optional_ioport_array<4> m_dsw; optional_ioport_array<5> m_key; @@ -195,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); @@ -237,7 +240,7 @@ template <unsigned Shift> ioport_value gms_2layers_state::keyboard_r() { unsigned const select = bitswap<5>(m_input_matrix, 6, 1, 5, 0, 4); - ioport_value result = 0x3f; + ioport_value result = 0x7f; for (unsigned i = 0; 5 > i; ++i) { if (BIT(select, i)) @@ -246,21 +249,29 @@ ioport_value gms_2layers_state::keyboard_r() return result >> Shift; } +template <unsigned N> +void gms_2layers_state::counter_w(int state) +{ + machine().bookkeeping().coin_counter_w(N, state); +} + 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) @@ -307,6 +318,8 @@ void gms_2layers_state::reelram_w(offs_t offset, uint16_t data, uint16_t mem_mas void gms_2layers_state::input_matrix_w(uint16_t data) { + m_counters->write(data); + m_input_matrix = data & 0x7fff; m_oki->set_rom_bank(BIT(data, 15)); @@ -341,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? @@ -354,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)); @@ -392,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? @@ -407,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 @@ -478,20 +491,31 @@ void gms_2layers_state::mcu_io(address_map &map) #define GMS_MAHJONG_KEYBOARD(dsw_port, dsw_bit, dsw_on) \ + PORT_START("COUNTERS") \ + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) /* key-out */ \ + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) /* coin in */ \ + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) /* coin out */ \ + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) \ + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) /* key-in */ \ + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<1>)) /* key-in */ \ + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<0>)) /* coin in */ \ + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w)) \ + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<3>)) /* key-out */ \ + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_WRITE_LINE_MEMBER(FUNC(gms_2layers_state::counter_w<2>)) /* coin out */ \ PORT_START("IN1") \ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) \ PORT_BIT( 0x00fc, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) /* something to do with payout and maybe flip flop, possibly scanned in matrix */ \ - PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<0>)) \ + PORT_BIT( 0xf800, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_2layers_state::keyboard_r<0>)) \ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_START("IN2") \ - PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<4>)) \ + PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_2layers_state::keyboard_r<5>)) \ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x0ff8, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) \ + PORT_BIT( 0x1ff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ 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) \ @@ -499,46 +523,52 @@ void gms_2layers_state::mcu_io(address_map &map) 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) \ + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) \ PORT_START("KEY0") \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_START("KEY1") \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_START("KEY2") \ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ PORT_START("KEY3") \ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ - PORT_START("KEY4") \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY4") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) /* newer games show this as both Flip Flop and Payout in input test */ \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) #define GMS_MAHJONG_COMMON(dsw_port, dsw_bit, dsw_on) \ GMS_MAHJONG_KEYBOARD(dsw_port, dsw_bit, dsw_on) \ @@ -609,7 +639,6 @@ static INPUT_PORTS_START( rbmk ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) PORT_MODIFY("IN2") // 16bit - 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_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) @@ -771,7 +800,6 @@ static INPUT_PORTS_START( ssanguoj ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, NOTEQUALS, 0x0000) PORT_MODIFY("IN2") // 16bit - 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_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) @@ -917,6 +945,13 @@ 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( 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 ) @@ -1035,15 +1070,22 @@ 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( 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_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 ) @@ -1056,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 ) @@ -1158,69 +1200,69 @@ static INPUT_PORTS_START( super555 ) INPUT_PORTS_END static INPUT_PORTS_START( sscs ) - PORT_START("IN1") // TODO: PORT_NAMEs are machine translated, should be checked and adapted - 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_BUTTON3 ) PORT_NAME( "Open card" ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME( "1 key" ) // also used for up in the 'secret' test mode - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) // used for down in the 'secret' test mode - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "Abandon" ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "Look at the card" ) - 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 ) + // Mahjong keyboard controls: + // A Raise × 1 Double Up × 2 Big down in bookkeeping + // C Raise × 5 Double Up × 1 up in bookkeeping + // E Raise × 10 Double Up × ½ Small + // K Big + // M Small + // N Deal Call Take Score + // Kan Showdown + // Chi Fold + // Ron View Hole Card + // Take Score Double Up × 2 Big + // Double Up Double Up × 1 + // Big Double Up × ½ Small + // Small Take Score + GMS_MAHJONG_KEYBOARD("DSW2", 0x80, 0x80) - 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_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( 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_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(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 ) 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 PCB, but only 3 are shown in test mode. // DIP switch settings as per test mode. 'Secret' test mode shows all 4 banks. PORT_START("DSW1") - PORT_DIPNAME( 0x0003, 0x0000, "Main Game Pay Out 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( 0x000c, 0x0000, "Double-Up Game Pay Out Rate" ) PORT_DIPLOCATION("SW1:3,4") // 比倍遊戲機率 - disabled if SW1:5 is off - PORT_DIPSETTING( 0x000c, DEF_STR( Easy ) ) // 易 - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) // 中 - PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) ) // 難 - PORT_DIPSETTING( 0x0004, DEF_STR( Hardest ) ) // 最難 - PORT_DIPNAME( 0x0010, 0x0000, "Double-Up On/Off" ) PORT_DIPLOCATION("SW1:5") // 比倍有無 - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) // 無 - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // 有 - PORT_DIPNAME( 0x0020, 0x0000, "Double-Up Nudity" ) PORT_DIPLOCATION("SW1:6") // 比倍脫衣 - disabled if SW1:5 is off - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) // 正常 - PORT_DIPSETTING( 0x0020, "Nudity" ) // 脫衣 - PORT_DIPNAME( 0x0040, 0x0000, "Double-Up Win Points" ) PORT_DIPLOCATION("SW1:7") // 比倍爆機分數 - disabled if SW1:5 is off + 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( 0x000c, 0x0000, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("SW1:3,4") // 比倍遊戲機率 (disabled if SW1:5 is off) + PORT_DIPSETTING( 0x000c, DEF_STR(Easy) ) // 易 + PORT_DIPSETTING( 0x0000, DEF_STR(Normal) ) // 中 + PORT_DIPSETTING( 0x0008, DEF_STR(Hard) ) // 難 + PORT_DIPSETTING( 0x0004, DEF_STR(Hardest) ) // 最難 + 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 Nudity" ) PORT_DIPLOCATION("SW1:6") // 比倍脫衣 (disabled if SW1:5 is off) + PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 正常 + PORT_DIPSETTING( 0x0020, DEF_STR(On) ) // 脫衣 + PORT_DIPNAME( 0x0040, 0x0000, "Double Up Game Jackpot" ) PORT_DIPLOCATION("SW1:7") // 比倍爆機分數 (disabled if SW1:5 is off) PORT_DIPSETTING( 0x0000, "10,000" ) PORT_DIPSETTING( 0x0040, "30,000" ) - PORT_DIPNAME( 0x0080, 0x0000, "Main Game Background Music") PORT_DIPLOCATION("SW1:8") // 主遊戲背景音樂 - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) // 無 - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // 有 + PORT_DIPNAME( 0x0080, 0x0000, "Main Game Background Music" ) 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" ) @@ -1231,55 +1273,92 @@ static INPUT_PORTS_START( sscs ) 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 Rate x Key In Multiplier" ) PORT_DIPLOCATION("SW2:4,5") // 投幣比例x開分倍率 - Key In rate as a multiple of coin rate - PORT_DIPSETTING( 0x0000, "2" ) - PORT_DIPSETTING( 0x0008, "5" ) - PORT_DIPSETTING( 0x0010, "10" ) - PORT_DIPSETTING( 0x0018, "20" ) - PORT_DIPNAME( 0x0020, 0x0000, "Show Title" ) PORT_DIPLOCATION("SW2:6") // 片頭名稱 - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) // 無 - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // 有 - PORT_DIPNAME( 0x0040, 0x0000, "Double-Up Win Points Method" ) PORT_DIPLOCATION("SW2:7") // 比倍爆機得分方式 - PORT_DIPSETTING( 0x0000, "By Key Out" ) // 按洗分键 - PORT_DIPSETTING( 0x0040, "By Pressing Button" ) // 按得键 - PORT_DIPNAME( 0x0080, 0x0000, "Control Panel" ) PORT_DIPLOCATION("SW2:8") // 操作介面 - PORT_DIPSETTING( 0x0000, "Amusement/Poker Panel" ) // 娛樂/撲克介面 - PORT_DIPSETTING( 0x0080, "Mahjong Panel" ) // 麻將介面 + 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, "Key-In Rate" ) PORT_DIPLOCATION("SW2:4,5") // 投幣比例×開分倍率 (Key-In rate as a multiple of coin rate) + 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, "Show Title" ) PORT_DIPLOCATION("SW2:6") // 片頭名稱 + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0040, 0x0000, "Double Up Jackpot Mode" ) PORT_DIPLOCATION("SW2:7") // 比倍爆機得分方式 + PORT_DIPSETTING( 0x0000, "By Key-Out" ) // 按洗分键 + PORT_DIPSETTING( 0x0040, "By Pressing Button" ) // 按得键 + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR(Controls) ) PORT_DIPLOCATION("SW2:8") // 操作介面 + PORT_DIPSETTING( 0x0000, "Amusement/Poker" ) // 娛樂/撲克介面 + PORT_DIPSETTING( 0x0080, "Mahjong" ) // 麻將介面 + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW3") - PORT_DIPNAME( 0x0003, 0x0000, "Ante Points" ) PORT_DIPLOCATION("SW3:1,2") // 底注分數 + PORT_DIPNAME( 0x0003, 0x0000, "Ante Points" ) PORT_DIPLOCATION("SW3:1,2") // 底注分數 PORT_DIPSETTING( 0x0000, "10" ) PORT_DIPSETTING( 0x0001, "20" ) PORT_DIPSETTING( 0x0002, "50" ) PORT_DIPSETTING( 0x0003, "80" ) - PORT_DIPNAME( 0x000c, 0x0000, "Main Game Win Points" ) PORT_DIPLOCATION("SW3:3,4") // 主遊戲爆機分數 + PORT_DIPNAME( 0x000c, 0x0000, "Main Game Jackpot" ) PORT_DIPLOCATION("SW3:3,4") // 主遊戲爆機分數 PORT_DIPSETTING( 0x0004, "10,000" ) PORT_DIPSETTING( 0x0000, "20,000" ) PORT_DIPSETTING( 0x0008, "50,000" ) PORT_DIPSETTING( 0x000c, "100.000" ) - PORT_DIPNAME( 0x0010, 0x0000, "Score Upper Limit" ) PORT_DIPLOCATION("SW3:5") // 進分上限 + PORT_DIPNAME( 0x0010, 0x0000, "Credit Limit" ) PORT_DIPLOCATION("SW3:5") // 進分上限 PORT_DIPSETTING( 0x0000, "10,000" ) PORT_DIPSETTING( 0x0010, "20,000" ) - PORT_DIPNAME( 0x0020, 0x0000, "Mahjong Numbers" ) PORT_DIPLOCATION("SW3:6") // 麻將數字 - only affects display when SW3:7,8 set to Mahjong Cards - PORT_DIPSETTING( 0x0020, "Don't Show" ) // 不顯示 - only shows characters for winds - PORT_DIPSETTING( 0x0000, "Show" ) // 顯示 - additionally shows numeric values for winds - PORT_DIPNAME( 0x00c0, 0x0000, "Card Display" ) PORT_DIPLOCATION("SW3:7,8") // 畫面顯示 - changes in-game card face style - PORT_DIPSETTING( 0x0000, "Poker Cards" ) // 撲克畫面 - playing cards - PORT_DIPSETTING( 0x0040, "Mahjong Cards" ) // 麻將畫面 - mahjong numbers and winds - PORT_DIPSETTING( 0x0080, "Caishen Cards" ) // 財神財神 - plain coloured numbers - PORT_DIPSETTING( 0x00c0, "Poker Cards" ) // 撲克畫面 - playing cards + PORT_DIPNAME( 0x0020, 0x0000, "Mahjong Wind Numbers" ) PORT_DIPLOCATION("SW3:6") // 麻將數字 (only affects display when SW3:7,8 set to Mahjong Tiles) + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 不顯示 (only shows characters for winds) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 顯示 (additionally shows numeric values for winds) + PORT_DIPNAME( 0x00c0, 0x0000, "Card Display" ) PORT_DIPLOCATION("SW3:7,8") // 畫面顯示 (changes in-game card face style) + PORT_DIPSETTING( 0x0000, "Poker Cards" ) // 撲克畫面 (playing cards) + PORT_DIPSETTING( 0x0040, "Mahjong Tiles" ) // 麻將畫面 (mahjong numbers and winds) + PORT_DIPSETTING( 0x0080, "Caishen Cards" ) // 財神財神 (plain coloured numbers) + PORT_DIPSETTING( 0x00c0, "Poker Cards" ) // 撲克畫面 (playing cards) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( sc2in1 ) + 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 + PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) @@ -1337,42 +1416,62 @@ static INPUT_PORTS_START( sc2in1 ) INPUT_PORTS_END static INPUT_PORTS_START( jinpaish ) - PORT_INCLUDE( sc2in1 ) + // Mahjong keyboard controls: + // A Select Opponent + // B Select Opponent + // C Select Opponent + // Start Start Take Score Select Opponent + // Bet Bet Select Opponent + // Kan Bet Select Opponent + // Pon Start Take Score Select Opponent + // Chi Select/Confirm Take Score Big Select Opponent + // Reach Down Double Up Select Opponent + // Ron View Hole Card Small Select Opponent + // Take Score Select Take Score Select Opponent + // 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. + GMS_MAHJONG_KEYBOARD("DSW1", 0x80, 0x80) - PORT_MODIFY("IN1") // TODO: likely incomplete - 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_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Select" ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "Show Card" ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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 / Take Score") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) // 開始鍵 + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Up") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Down / Double Up") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) // (would be left, seems to be unused) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) // (would be right, seems to be unused) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) // 押分鍵 + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Select / Confirm / Big") PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) // 選擇鍵 / 確認鍵 + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("View Hole Card / Small") 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) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + + PORT_MODIFY("IN2") 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 - // Only 1 8-DIP bank on PCB. Dips' effects as per test mode. - PORT_MODIFY("DSW1") - PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW1:1") // first 5 seem hardcoded to Single Player / No connection + // Only 1 8-DIP bank on PCB. DIPs' effects as per test mode. + PORT_START("DSW1") + PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW1:1") // first 5 seem hardcoded to Single Player / No connection (單機/無連線) PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW1:2") PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW1:3") PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW1:4") PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW1:5") - PORT_DIPNAME( 0x0020, 0x0000, "Display Game Title" ) PORT_DIPLOCATION("SW1:6") - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0000, "Game Password" ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0040, "Power On" ) - PORT_DIPNAME( 0x0080, 0x0000, "Connector" ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x0000, "Joystick" ) - PORT_DIPSETTING( 0x0080, "Mahjong" ) + PORT_DIPNAME( 0x0020, 0x0000, "Show Title" ) PORT_DIPLOCATION("SW1:6") // 遊戲名稱 + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 無 + 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_DIPNAME( 0x0080, 0x0000, DEF_STR(Controls) ) PORT_DIPLOCATION("SW1:8") // 操作介面 + PORT_DIPSETTING( 0x0000, DEF_STR(Joystick) ) // 娛樂 + PORT_DIPSETTING( 0x0080, "Mahjong" ) // 麻將 INPUT_PORTS_END static INPUT_PORTS_START( baile ) @@ -1391,23 +1490,22 @@ static INPUT_PORTS_START( baile ) GMS_MAHJONG_KEYBOARD("DSW1", 0x80, 0x80) PORT_MODIFY("IN1") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Draw / Take Score" ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) 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( 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( 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) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + 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_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_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) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x80, NOTEQUALS, 0x80) PORT_MODIFY("IN2") - 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 ) @@ -1439,11 +1537,7 @@ static INPUT_PORTS_START( yyhm ) PORT_BIT( 0xf800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) PORT_MODIFY("IN2") - PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "P:10" ) - PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "P:11" ) - PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "P:12" ) - PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "P:13" ) - //PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xe000, 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 // Only 1 8-DIP bank on PCB. DIPs' effects as per test mode. @@ -1469,6 +1563,13 @@ static INPUT_PORTS_START( yyhm ) INPUT_PORTS_END static INPUT_PORTS_START( ballch ) + 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 + PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) @@ -1586,6 +1687,13 @@ static INPUT_PORTS_START( ballch ) INPUT_PORTS_END static INPUT_PORTS_START( cots ) + 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 + PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) @@ -1706,6 +1814,13 @@ INPUT_PORTS_END static INPUT_PORTS_START( sball2k1 ) // default password for accessing game settings is all Start + 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 + PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) @@ -1812,7 +1927,6 @@ static INPUT_PORTS_START( cjdlz ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) PORT_MODIFY("IN2") // 16bit - 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_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) @@ -1922,6 +2036,13 @@ 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 + PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) @@ -2291,6 +2412,8 @@ void gms_2layers_state::rbmk(machine_config &config) EEPROM_93C46_16BIT(config, m_eeprom); + HOPPER(config, "hopper", attotime::from_msec(50)); + SPEAKER(config, "speaker", 2).front(); OKIM6295(config, m_oki, 22_MHz_XTAL / 20, okim6295_device::PIN7_HIGH); // pin 7 not verified, but seems to match recordings @@ -2337,6 +2460,7 @@ void gms_2layers_state::super555(machine_config &config) void gms_3layers_state::magslot(machine_config &config) { super555(config); + m_maincpu->set_addrmap(AS_PROGRAM, &gms_3layers_state::magslot_mem); m_gfxdecode->set_info(gfx_magslot); @@ -2724,7 +2848,7 @@ ROM_START( ballch ) ROM_END /* -皇冠樂園 Huáng Guàn Lè Yuán (Crown Amusement Park), GMS, 1999 +皇冠樂園 Huángguàn Lèyuán (Crown Amusement Park), GMS, 1999 超级大连庄 Chāojí Dà Liánzhuāng, GMS, 1999 Hardware info by Guru --------------------- @@ -3020,6 +3144,6 @@ GAME( 2005, baile, 0, magslot, baile, gms_3layers_state, init_baile, R GAME( 2003, magslot, 0, magslot, magslot, gms_3layers_state, empty_init, ROT0, "GMS", "Magic Slot (normal 1.0C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // reel / tilemaps priorities are wrong, inputs to be verified. Also needs EEPROM support. // train games -GAME( 1999, hgly, 0, super555, hgly, gms_2layers_state, init_hgly, ROT0, "GMS", "Huang Guan Le Yuan (990726 CRG1.1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // stops during boot, patched for now. Also needs EEPROM support. +GAME( 1999, hgly, 0, super555, hgly, gms_2layers_state, init_hgly, ROT0, "GMS", "Huangguan Leyuan (990726 CRG1.1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // stops during boot, patched for now. Also needs EEPROM support. GAME( 2002, ballch, 0, super555, ballch, gms_2layers_state, init_ballch, ROT0, "TVE", "Ball Challenge (20020607 1.0 OVERSEA)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // stops during boot, patched for now. Also needs EEPROM support. GAME( 2005, cots, 0, super555, cots, gms_2layers_state, init_cots, ROT0, "ECM", "Creatures of the Sea (20050328 USA 6.3)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // stops during boot, patched for now. Also needs EEPROM support. 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/skeleton/boramz80.cpp b/src/mame/skeleton/boramz80.cpp index 841f9b80ccf..c0dcd978cd9 100644 --- a/src/mame/skeleton/boramz80.cpp +++ b/src/mame/skeleton/boramz80.cpp @@ -17,6 +17,14 @@ on 0211 PCB: 2x 8-DIP banks on 0300 III PCB: 4x 8-DIP banks Some PCBs have been seen mixing different sets of GFX ROMs with the same program ROM. + +TODO: +- black screen after first attract cycle (interrupts?) +- colors +- inputs +- outputs +- decryption for tpkborama +- are the tpkg2 GFX ROMs correct for that set? */ @@ -48,7 +56,7 @@ public: void pk(machine_config &config) ATTR_COLD; - void init_tpkborama(); + void init_tpkborama() ATTR_COLD; protected: virtual void video_start() override ATTR_COLD; @@ -60,7 +68,14 @@ private: required_shared_ptr<uint8_t> m_char_ram; required_shared_ptr<uint8_t> m_tile_ram; + tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_fg_tilemap = nullptr; + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void charram_w(offs_t offset, uint8_t data); + void tileram_w(offs_t offset, uint8_t data); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); void program_map(address_map &map) ATTR_COLD; void io_map(address_map &map) ATTR_COLD; @@ -69,12 +84,47 @@ private: void boramz80_state::video_start() { + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(boramz80_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 40, 25); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(boramz80_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 40, 25); + + m_fg_tilemap->set_transparent_pen(0); +} + +TILE_GET_INFO_MEMBER(boramz80_state::get_bg_tile_info) +{ + int const tile = m_tile_ram[2 * tile_index] | (m_tile_ram[2 * tile_index + 1] << 8); + //int const color =; // TODO + + tileinfo.set(1, tile, 0, 0); +} + +TILE_GET_INFO_MEMBER(boramz80_state::get_fg_tile_info) +{ + int const tile = m_char_ram[2 * tile_index] | ((m_char_ram[2 * tile_index + 1] & 0x03) << 8); + //int const color =; // TODO + + tileinfo.set(0, tile, 2, 0); +} + +void boramz80_state::charram_w(offs_t offset, uint8_t data) +{ + m_char_ram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset / 2); +} + +void boramz80_state::tileram_w(offs_t offset, uint8_t data) +{ + m_tile_ram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset / 2); } uint32_t boramz80_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(rgb_t::black(), cliprect); + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; } @@ -83,8 +133,8 @@ void boramz80_state::program_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x8fff).ram(); // TODO: only 0x800 for pkboram - map(0xa000, 0xa7ff).ram().share(m_char_ram); - map(0xc000, 0xc7ff).ram().share(m_tile_ram); + map(0xa000, 0xa7ff).ram().w(FUNC(boramz80_state::charram_w)).share(m_char_ram); + map(0xc000, 0xc7ff).ram().w(FUNC(boramz80_state::tileram_w)).share(m_tile_ram); map(0xe000, 0xe3ff).ram().w("palette", FUNC(palette_device::write8)).share("palette"); map(0xf000, 0xf3ff).ram().w("palette", FUNC(palette_device::write8_ext)).share("palette_ext"); } @@ -182,9 +232,9 @@ static INPUT_PORTS_START( tpkboram ) INPUT_PORTS_END -static GFXDECODE_START( gfx_boram ) - GFXDECODE_ENTRY( "chars", 0, gfx_8x8x2_planar, 0, 16 ) - GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_planar, 0, 16 ) // probably wrong +static GFXDECODE_START( gfx_boram ) // TODO + GFXDECODE_ENTRY( "chars", 0, gfx_8x8x2_planar, 0x000, 8 ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_planar, 0x200, 8 ) GFXDECODE_END @@ -194,7 +244,6 @@ void boramz80_state::pk(machine_config &config) Z80(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &boramz80_state::program_map); m_maincpu->set_addrmap(AS_IO, &boramz80_state::io_map); - //m_maincpu->set_vblank_int("screen", FUNC(boramz80_state::irq0_line_hold)); i8255_device &ppi(I8255A(config, "ppi")); ppi.in_pa_callback().set([this] () { logerror("%s: PPI port A read\n", machine().describe_context()); return ioport("IN0")->read(); }); @@ -205,7 +254,7 @@ void boramz80_state::pk(machine_config &config) screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: everything screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(32*8, 32*8); + screen.set_size(40*8, 25*8); screen.set_visarea_full(); screen.set_screen_update(FUNC(boramz80_state::screen_update)); @@ -213,15 +262,16 @@ void boramz80_state::pk(machine_config &config) crtc.set_screen("screen"); crtc.set_show_border_area(false); crtc.set_char_width(8); + crtc.out_vsync_callback().set_inputline(m_maincpu, 0); GFXDECODE(config, "gfxdecode", "palette", gfx_boram); - PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x400); // TODO: verify once it works + PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x400); // TODO: wrong format SPEAKER(config, "mono").front_center(); ay8910_device &aysnd(AY8910(config, "aysnd", 4_MHz_XTAL / 4)); // not sure, could derive from 13 MHz XTAL - aysnd.port_a_read_callback().set_ioport("DSW1"); // TODO: verify once it works - aysnd.port_b_read_callback().set_ioport("DSW2"); // TODO: verify once it works + aysnd.port_a_read_callback().set([this] () { logerror("%s: AY port A read\n", machine().describe_context()); return 0; }); + aysnd.port_b_read_callback().set([this] () { logerror("%s: AY port B read\n", machine().describe_context()); return 0; }); aysnd.port_a_write_callback().set([this] (uint8_t data) { logerror("%s: AY port A write %02x\n", machine().describe_context(), data); }); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); } @@ -332,7 +382,7 @@ ROM_START( tpkg2 ) // ATPK-BORAM PK-0500 PCB, same GFX as pkrboram ROM_LOAD( "10.pg8", 0x70000, 0x10000, CRC(2c810312) SHA1(df055c7828da2b49bcbd22721309011b7d2143f9) ) ROM_END -ROM_START( unkboram ) // ATPK-BORAM PK-0500 PCB +ROM_START( pkts ) // ATPK-BORAM PK-0500 PCB ROM_REGION( 0x8000, "maincpu", 0 ) ROM_LOAD( "11.rom", 0x0000, 0x8000, CRC(822af541) SHA1(621c88bdc2ddca90127eb7ab10ca4ef6ec0cded0) ) @@ -366,9 +416,9 @@ void boramz80_state::init_tpkborama() } // anonymous namespace -GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK - New Exciting Poker!", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // PK-BORAM 0211 aug.04.1987. BORAM CORP -GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Turbo", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // PK-TURBO jan.29.1988. BORAM CORP. -GAME( 1998, tpkborama, tpkboram, pk, tpkboram, boramz80_state, init_tpkborama, ROT0, "Boram", "PK Turbo (Ver 2.3B2, encrypted)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // dep inctype-23B1998 0519Ver 2.3B2 -GAME( 1990, pkrboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Rainbow (v 1.5)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // PK RAINBOW v1.5 BORAM Corp. 1990.11.06� -GAME( 1992, tpkg2, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Turbo Great 2", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // PK TURBO GREAT2 1992.06.04 BORAM CORP. -GAME( 19??, unkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "unknown Boram poker game", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // PKS v100 BORAM CORP +GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK - New Exciting Poker!", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // PK-BORAM 0211 aug.04.1987. BORAM CORP +GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Turbo", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // PK-TURBO jan.29.1988. BORAM CORP. +GAME( 1998, tpkborama, tpkboram, pk, tpkboram, boramz80_state, init_tpkborama, ROT0, "Boram", "PK Turbo (Ver 2.3B2, encrypted)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // dep inctype-23B1998 0519Ver 2.3B2 +GAME( 1990, pkrboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Rainbow (v 1.5)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // PK RAINBOW v1.5 BORAM Corp. 1990.11.06� +GAME( 1992, tpkg2, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Turbo Great 2", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // PK TURBO GREAT2 1992.06.04 BORAM CORP. +GAME( 19??, pkts, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "PK Turbo Special", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // PKS v100 BORAM CORP 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); |