From f498f612958817f3c03454252523299747f5f9d7 Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 12 Apr 2021 00:36:41 +0200 Subject: mephisto_montec.cpp: split driver file into montec/smondial --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/fidel_eag68k.cpp | 5 +- src/mame/drivers/fidel_excel.cpp | 14 +- src/mame/drivers/fidel_phantom.cpp | 3 + src/mame/drivers/mephisto_academy.cpp | 8 +- src/mame/drivers/mephisto_amsterdam.cpp | 2 +- src/mame/drivers/mephisto_glasgow.cpp | 5 +- src/mame/drivers/mephisto_milano.cpp | 18 +- src/mame/drivers/mephisto_mm2.cpp | 17 +- src/mame/drivers/mephisto_mondial.cpp | 58 ++-- src/mame/drivers/mephisto_mondial2.cpp | 58 ++-- src/mame/drivers/mephisto_mondial68k.cpp | 44 +-- src/mame/drivers/mephisto_montec.cpp | 485 +++++++++--------------------- src/mame/drivers/mephisto_smondial.cpp | 407 +++++++++++++++++++++++++ src/mame/layout/mephisto_academy.lay | 4 +- src/mame/layout/mephisto_alm16.lay | 2 +- src/mame/layout/mephisto_alm32.lay | 2 +- src/mame/layout/mephisto_amsterdam.lay | 2 +- src/mame/layout/mephisto_berlin.lay | 2 +- src/mame/layout/mephisto_bup.lay | 2 +- src/mame/layout/mephisto_gen32.lay | 2 +- src/mame/layout/mephisto_glasgow.lay | 2 +- src/mame/layout/mephisto_megaiv.lay | 497 ------------------------------- src/mame/layout/mephisto_milano.lay | 4 +- src/mame/layout/mephisto_mm2.lay | 2 +- src/mame/layout/mephisto_modena.lay | 4 +- src/mame/layout/mephisto_modular_tm.lay | 2 +- src/mame/layout/mephisto_mondial.lay | 2 +- src/mame/layout/mephisto_mondial2.lay | 2 +- src/mame/layout/mephisto_mondial68k.lay | 2 +- src/mame/layout/mephisto_montec.lay | 82 +++-- src/mame/layout/mephisto_polgar.lay | 2 +- src/mame/layout/mephisto_risc.lay | 2 +- src/mame/layout/mephisto_smondial.lay | 208 ++++++++----- src/mame/layout/mephisto_smondial2.lay | 204 ++++++++----- src/mame/mame.lst | 16 +- src/mame/mess.flt | 1 + 37 files changed, 1026 insertions(+), 1147 deletions(-) create mode 100644 src/mame/drivers/mephisto_smondial.cpp delete mode 100644 src/mame/layout/mephisto_megaiv.lay diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index a0a657086f2..9a559d057fe 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2550,6 +2550,7 @@ files { MAME_DIR .. "src/mame/drivers/mephisto_montec.cpp", MAME_DIR .. "src/mame/drivers/mephisto_polgar.cpp", MAME_DIR .. "src/mame/drivers/mephisto_risc.cpp", + MAME_DIR .. "src/mame/drivers/mephisto_smondial.cpp", MAME_DIR .. "src/mame/machine/mmboard.cpp", MAME_DIR .. "src/mame/machine/mmboard.h", MAME_DIR .. "src/mame/video/mmdisplay1.cpp", diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp index ff6018052c7..333d2f28136 100644 --- a/src/mame/drivers/fidel_eag68k.cpp +++ b/src/mame/drivers/fidel_eag68k.cpp @@ -161,6 +161,9 @@ B0000x-xxxxxx: see V7, -800000 ******************************************************************************/ #include "emu.h" + +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" #include "cpu/m68000/m68000.h" #include "machine/gen_latch.h" #include "machine/ram.h" @@ -169,8 +172,6 @@ B0000x-xxxxxx: see V7, -800000 #include "machine/sensorboard.h" #include "sound/dac.h" #include "video/pwm.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" #include "softlist.h" #include "speaker.h" diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp index b165d719f52..8fd4f8ef3c2 100644 --- a/src/mame/drivers/fidel_excel.cpp +++ b/src/mame/drivers/fidel_excel.cpp @@ -205,20 +205,14 @@ private: void ttl_w(offs_t offset, u8 data); u8 ttl_r(offs_t offset); - u8 m_select; - u8 m_7seg_data; - u8 m_speech_data; - u8 m_speech_bank; + u8 m_select = 0; + u8 m_7seg_data = 0; + u8 m_speech_data = 0; + u8 m_speech_bank = 0; }; void excel_state::machine_start() { - // zerofill - m_select = 0; - m_7seg_data = 0; - m_speech_data = 0; - m_speech_bank = 0; - // register for savestates save_item(NAME(m_select)); save_item(NAME(m_7seg_data)); diff --git a/src/mame/drivers/fidel_phantom.cpp b/src/mame/drivers/fidel_phantom.cpp index 66e98bf11a0..240298d2aed 100644 --- a/src/mame/drivers/fidel_phantom.cpp +++ b/src/mame/drivers/fidel_phantom.cpp @@ -142,6 +142,7 @@ void phantom_state::init_fphantom() } + /****************************************************************************** Motor Sim ******************************************************************************/ @@ -206,6 +207,7 @@ void phantom_state::update_pieces_position(int state) } + /****************************************************************************** I/O ******************************************************************************/ @@ -336,6 +338,7 @@ u8 phantom_state::vmotor_ff_clear_r() } + /****************************************************************************** Address Maps ******************************************************************************/ diff --git a/src/mame/drivers/mephisto_academy.cpp b/src/mame/drivers/mephisto_academy.cpp index 41222786920..ee192750b48 100644 --- a/src/mame/drivers/mephisto_academy.cpp +++ b/src/mame/drivers/mephisto_academy.cpp @@ -1,7 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Sandro Ronco, hap // thanks-to:yoyo_chessboard -/*************************************************************************** +/****************************************************************************** Mephisto Academy @@ -18,7 +18,7 @@ Since the program is on an external module, it appears it was meant to be a modular chesscomputer. However, no extra modules were sold separately. Module PCB is the same as Super Mondial II College, label HGS 10 116 05. -***************************************************************************/ +******************************************************************************/ #include "emu.h" @@ -126,6 +126,7 @@ INPUT_PORTS_END void academy_state::academy(machine_config &config) { + /* basic machine hardware */ M65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &academy_state::main_map); @@ -140,6 +141,7 @@ void academy_state::academy(machine_config &config) MEPHISTO_SENSORS_BOARD(config, "board"); // internal MEPHISTO_DISPLAY_MODULE2(config, "display"); // internal + /* video hardware */ PWM_DISPLAY(config, m_led_pwm).set_size(4, 4); config.set_default_layout(layout_mephisto_academy); } @@ -176,7 +178,7 @@ ROM_END Game Drivers ***************************************************************************/ -/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ CONS( 1989, academy, 0, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, academyg, academy, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 06-03-89)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, academyga, academy, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 04-10-88)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_amsterdam.cpp b/src/mame/drivers/mephisto_amsterdam.cpp index eb0ad914b60..82d7dd86160 100644 --- a/src/mame/drivers/mephisto_amsterdam.cpp +++ b/src/mame/drivers/mephisto_amsterdam.cpp @@ -253,7 +253,7 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ CONS( 1985, amsterd, 0, 0, amsterdam, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Amsterdam", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1986, dallas32, 0, 0, dallas32, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68020", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_glasgow.cpp b/src/mame/drivers/mephisto_glasgow.cpp index f4ab6e85c5a..6031ddccbbd 100644 --- a/src/mame/drivers/mephisto_glasgow.cpp +++ b/src/mame/drivers/mephisto_glasgow.cpp @@ -111,7 +111,8 @@ u8 glasgow_state::keys_r() data |= 1 << i; // reading keypad also clears irq - m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); + if (!machine().side_effects_disabled()) + m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); return ~data; } @@ -239,7 +240,7 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ CONS( 1984, glasgow, 0, 0, glasgow, glasgow, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto III-S Glasgow", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // newer chesscomputers on 4-ROM hardware (see mephisto_amsterdam.cpp for parent sets) diff --git a/src/mame/drivers/mephisto_milano.cpp b/src/mame/drivers/mephisto_milano.cpp index c1385fa3d47..2eed4fecdb2 100644 --- a/src/mame/drivers/mephisto_milano.cpp +++ b/src/mame/drivers/mephisto_milano.cpp @@ -113,7 +113,7 @@ u8 milano_state::board_r() u8 milano_state::keys_r(offs_t offset) { - return (BIT(m_keys->read(), offset) << 7) | 0x7f; + return ~(BIT(m_keys->read(), offset) << 7); } @@ -142,14 +142,14 @@ void milano_state::milano_mem(address_map &map) static INPUT_PORTS_START( milano ) PORT_START("KEY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Training / Pawn") PORT_CODE(KEYCODE_T) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Info / Knight") PORT_CODE(KEYCODE_I) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Memory / Bishop") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Position / Rook") PORT_CODE(KEYCODE_O) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Level / Queen") PORT_CODE(KEYCODE_L) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Function / King") PORT_CODE(KEYCODE_F) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Clear / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Training / Pawn") PORT_CODE(KEYCODE_T) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Info / Knight") PORT_CODE(KEYCODE_I) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Memory / Bishop") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Position / Rook") PORT_CODE(KEYCODE_O) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level / Queen") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Function / King") PORT_CODE(KEYCODE_F) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Enter / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Clear / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " INPUT_PORTS_END diff --git a/src/mame/drivers/mephisto_mm2.cpp b/src/mame/drivers/mephisto_mm2.cpp index 63b8bd01515..2299218ec0f 100644 --- a/src/mame/drivers/mephisto_mm2.cpp +++ b/src/mame/drivers/mephisto_mm2.cpp @@ -6,13 +6,14 @@ Mephisto 4 + 5 Chess Computer 2007 Dirk V. TODO: +- rebel5 unknown read from 0x4002, looks like leftover bookrom check - need to emulate TurboKit properly, also for mm5p (it's not as simple as a CPU overclock plus ROM patch) =============================================================================== Hardware notes: -- CPU: G65SC02P-4 or R65C02P3/R65C02P4 +- CPU: R65C02P3/R65C02P4 or G65SC02P-4 - Clock: 4.9152 MHz - NMI CLK: 600 Hz - IRQ Line is set to VSS @@ -85,7 +86,7 @@ MM VI (Saitek, 1994) is on different hardware, H8 CPU. #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/r65c02.h" #include "machine/74259.h" #include "machine/mmboard.h" #include "sound/dac.h" @@ -169,7 +170,7 @@ void mm2_state::lcd_irqack_w(u8 data) { m_display->data_w(data); - // writing to 0x2800 also clears irq + // accessing 0x2800 also clears irq m_maincpu->set_input_line(0, CLEAR_LINE); } @@ -205,9 +206,9 @@ void mm2_state::mm2_mem(address_map &map) void mm2_state::rebel5_mem(address_map &map) { map(0x0000, 0x1fff).ram(); - map(0x2000, 0x2007).w("outlatch", FUNC(hc259_device::write_d7)); - map(0x3000, 0x4000).r("board", FUNC(mephisto_board_device::input_r)); + map(0x2000, 0x2007).w("outlatch", FUNC(hc259_device::write_d7)).nopr(); map(0x3000, 0x3007).r(FUNC(mm2_state::keys_r)); + map(0x4000, 0x4000).r("board", FUNC(mephisto_board_device::input_r)); map(0x5000, 0x5000).w(m_display, FUNC(mephisto_display1_device::data_w)); map(0x6000, 0x6000).w("board", FUNC(mephisto_board_device::led_w)); map(0x7000, 0x7000).w("board", FUNC(mephisto_board_device::mux_w)); @@ -218,7 +219,7 @@ void mm2_state::mm5p_mem(address_map &map) { map(0x0000, 0x1fff).ram(); map(0x2000, 0x2000).w(m_display, FUNC(mephisto_display1_device::data_w)); - map(0x2400, 0x2407).w("board", FUNC(mephisto_board_device::led_w)).nopr(); + map(0x2400, 0x2400).w("board", FUNC(mephisto_board_device::led_w)); map(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w)); map(0x2c00, 0x2c07).r(FUNC(mm2_state::keys_r)); map(0x3000, 0x3000).r("board", FUNC(mephisto_board_device::input_r)); @@ -300,7 +301,7 @@ INPUT_PORTS_END void mm2_state::rebel5(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, 9.8304_MHz_XTAL / 2); + R65C02(config, m_maincpu, 9.8304_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::rebel5_mem); const attotime nmi_period = attotime::from_hz(9.8304_MHz_XTAL / 2 / 0x2000); // 600Hz @@ -504,7 +505,7 @@ CONS( 1985, bup, 0, 0, bup, bup, mm2_state, empty_init, "He CONS( 1985, bupa, bup, 0, bup, bup, mm2_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1986, rebel5, 0, 0, rebel5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka MM III -CONS( 1986, rebel5a, rebel5, 0, rebel5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, rebel5a, rebel5, 0, rebel5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // " CONS( 1987, mm4, 0, 0, mm4, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1987, mm4a, mm4, 0, mm4, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_mondial.cpp b/src/mame/drivers/mephisto_mondial.cpp index 71338294db7..5c40498252c 100644 --- a/src/mame/drivers/mephisto_mondial.cpp +++ b/src/mame/drivers/mephisto_mondial.cpp @@ -12,7 +12,6 @@ Hardware notes: TODO: - verify XTAL (or maybe RC or LC circuit), 2MHz is correct -- unknown read from 0x2000 - dump/add MM 1000 module ******************************************************************************/ @@ -61,6 +60,7 @@ private: void mondial_mem(address_map &map); void control_w(u8 data); + u8 irq_ack_r(); u8 input_r(offs_t offset); u8 m_inp_mux = 0; @@ -77,6 +77,25 @@ void mondial_state::machine_start() I/O ******************************************************************************/ +void mondial_state::control_w(u8 data) +{ + // d0-d3: input mux, led select + // d4-d6: led data + m_inp_mux = data & 0xf; + m_led_pwm->matrix(1 << m_inp_mux, ~data >> 4 & 7); + + // d7: enable beeper + m_beeper->set_state(BIT(data, 7)); +} + +u8 mondial_state::irq_ack_r() +{ + if (!machine().side_effects_disabled()) + m_maincpu->set_input_line(0, CLEAR_LINE); + + return 0; +} + u8 mondial_state::input_r(offs_t offset) { u8 data = 0; @@ -92,17 +111,6 @@ u8 mondial_state::input_r(offs_t offset) return ~(BIT(data, offset) << 7); } -void mondial_state::control_w(u8 data) -{ - // d0-d3: input mux, led select - // d4-d6: led data - m_inp_mux = data & 0xf; - m_led_pwm->matrix(1 << m_inp_mux, ~data >> 4 & 7); - - // d7: enable beeper - m_beeper->set_state(BIT(data, 7)); -} - /****************************************************************************** @@ -114,7 +122,7 @@ void mondial_state::mondial_mem(address_map &map) map(0x0000, 0x07ff).ram(); map(0x1000, 0x1000).w(FUNC(mondial_state::control_w)); map(0x1800, 0x1807).r(FUNC(mondial_state::input_r)); - map(0x2000, 0x2000).nopr(); // ? + map(0x2000, 0x2000).r(FUNC(mondial_state::irq_ack_r)); map(0xc000, 0xffff).rom(); } @@ -126,24 +134,24 @@ void mondial_state::mondial_mem(address_map &map) static INPUT_PORTS_START( mondial ) PORT_START("KEY.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_START("KEY.1") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PLAY") PORT_CODE(KEYCODE_Y) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_DEL) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) INPUT_PORTS_END @@ -159,7 +167,7 @@ void mondial_state::mondial(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mondial_state::mondial_mem); const attotime irq_period = attotime::from_hz(2000000 / 0x1000); - m_maincpu->set_periodic_int(FUNC(mondial_state::irq0_line_hold), irq_period); + m_maincpu->set_periodic_int(FUNC(mondial_state::irq0_line_assert), irq_period); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); diff --git a/src/mame/drivers/mephisto_mondial2.cpp b/src/mame/drivers/mephisto_mondial2.cpp index 42621bb3f43..2d6a79b7c2d 100644 --- a/src/mame/drivers/mephisto_mondial2.cpp +++ b/src/mame/drivers/mephisto_mondial2.cpp @@ -55,9 +55,9 @@ private: void mondial2_mem(address_map &map); void update_leds(); - u8 input_r(offs_t offset); void control_w(u8 data); void board_w(u8 data); + u8 input_r(offs_t offset); u8 m_keypad_mux = 0; u8 m_board_mux = 0; @@ -83,23 +83,6 @@ void mondial2_state::update_leds() m_led_pwm->matrix(m_board_mux, m_led_data); } -u8 mondial2_state::input_r(offs_t offset) -{ - u8 data = 0; - - // read chessboard sensors - for (int i = 0; i < 8; i++) - if (BIT(m_board_mux, i)) - data |= BIT(m_board->read_rank(i), offset); - - // read keypad - for (int i = 0; i < 4; i++) - if (BIT(m_keypad_mux, i)) - data |= BIT(m_keys[i]->read(), offset & 3); - - return ~(data << 7); -} - void mondial2_state::control_w(u8 data) { // d0-d3: keypad mux @@ -120,6 +103,23 @@ void mondial2_state::board_w(u8 data) update_leds(); } +u8 mondial2_state::input_r(offs_t offset) +{ + u8 data = 0; + + // read chessboard sensors + for (int i = 0; i < 8; i++) + if (BIT(m_board_mux, i)) + data |= BIT(m_board->read_rank(i), offset); + + // read keypad + for (int i = 0; i < 4; i++) + if (BIT(m_keypad_mux, i)) + data |= BIT(m_keys[i]->read(), offset & 3); + + return ~(data << 7); +} + /****************************************************************************** @@ -143,16 +143,16 @@ void mondial2_state::mondial2_mem(address_map &map) static INPUT_PORTS_START( mondial2 ) PORT_START("KEY.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_START("KEY.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_START("KEY.2") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PLAY") PORT_CODE(KEYCODE_Y) @@ -161,10 +161,10 @@ static INPUT_PORTS_START( mondial2 ) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) PORT_START("KEY.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_DEL) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) INPUT_PORTS_END diff --git a/src/mame/drivers/mephisto_mondial68k.cpp b/src/mame/drivers/mephisto_mondial68k.cpp index 68f05d5cd82..2f8cf8637b2 100644 --- a/src/mame/drivers/mephisto_mondial68k.cpp +++ b/src/mame/drivers/mephisto_mondial68k.cpp @@ -6,7 +6,7 @@ Mephisto Mondial 68000XL The chess engine is actually the one from Mephisto Dallas. -Hardware: +Hardware notes: - TS68000CP12 @ 12MHz - 64KB ROM - 16KB RAM @@ -38,7 +38,8 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_board(*this, "board") - , m_display(*this, "display") + , m_lcd_latch(*this, "lcd_latch") + , m_led_pwm(*this, "led_pwm") , m_lcd(*this, "lcd") , m_inputs(*this, "IN.%u", 0) , m_digits(*this, "digit%u", 0U) @@ -51,15 +52,16 @@ protected: void mondial68k_mem(address_map &map); - void lcd_s_w(u32 data); + void update_leds(); + void lcd_output_w(u32 data); void input_mux_w(u8 data); void board_mux_w(u8 data); u8 inputs_r(); - void update_display(); required_device m_maincpu; required_device m_board; - required_device m_display; + required_device m_lcd_latch; + required_device m_led_pwm; required_device m_lcd; required_ioport_array<4> m_inputs; output_finder<4> m_digits; @@ -83,12 +85,12 @@ void mondial68k_state::machine_start() I/O ******************************************************************************/ -void mondial68k_state::update_display() +void mondial68k_state::update_leds() { - m_display->matrix(m_input_mux >> 6, ~m_board_mux); + m_led_pwm->matrix(m_input_mux >> 6, ~m_board_mux); } -void mondial68k_state::lcd_s_w(u32 data) +void mondial68k_state::lcd_output_w(u32 data) { // output LCD digits (note: last digit DP segment is unused) for (int i = 0; i < 4; i++) @@ -99,7 +101,7 @@ void mondial68k_state::board_mux_w(u8 data) { // d0-d7: chessboard mux, led data m_board_mux = data; - update_display(); + update_leds(); } void mondial68k_state::input_mux_w(u8 data) @@ -107,7 +109,7 @@ void mondial68k_state::input_mux_w(u8 data) // d0-d3: button mux // d6,d7: led select m_input_mux = data; - update_display(); + update_leds(); } u8 mondial68k_state::inputs_r() @@ -137,7 +139,7 @@ void mondial68k_state::mondial68k_mem(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x800000, 0x800000).r(FUNC(mondial68k_state::inputs_r)); - map(0x820000, 0x82000f).nopr().w("outlatch", FUNC(hc259_device::write_d0)).umask16(0xff00); + map(0x820000, 0x82000f).nopr().w(m_lcd_latch, FUNC(hc259_device::write_d0)).umask16(0xff00); map(0x840000, 0x840000).w(FUNC(mondial68k_state::input_mux_w)); map(0x860000, 0x860000).w(FUNC(mondial68k_state::board_mux_w)); map(0xc00000, 0xc03fff).ram(); @@ -188,12 +190,12 @@ void mondial68k_state::mondial68k(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mondial68k_state::mondial68k_mem); m_maincpu->set_periodic_int(FUNC(mondial68k_state::irq5_line_hold), attotime::from_hz(128)); - hc259_device &outlatch(HC259(config, "outlatch")); - outlatch.q_out_cb<0>().set(m_lcd, FUNC(pcf2112_device::clb_w)); - outlatch.q_out_cb<1>().set(m_lcd, FUNC(pcf2112_device::data_w)); - outlatch.q_out_cb<2>().set(m_lcd, FUNC(pcf2112_device::dlen_w)); - outlatch.q_out_cb<6>().set_nop(); // another DAC input? - outlatch.q_out_cb<7>().set("dac", FUNC(dac_1bit_device::write)); + HC259(config, m_lcd_latch); + m_lcd_latch->q_out_cb<0>().set(m_lcd, FUNC(pcf2112_device::clb_w)); + m_lcd_latch->q_out_cb<1>().set(m_lcd, FUNC(pcf2112_device::data_w)); + m_lcd_latch->q_out_cb<2>().set(m_lcd, FUNC(pcf2112_device::dlen_w)); + m_lcd_latch->q_out_cb<6>().set_nop(); // another DAC input? + m_lcd_latch->q_out_cb<7>().set("dac", FUNC(dac_1bit_device::write)); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); @@ -201,9 +203,9 @@ void mondial68k_state::mondial68k(machine_config &config) /* video hardware */ PCF2112(config, m_lcd, 50); // frequency guessed - m_lcd->write_segs().set(FUNC(mondial68k_state::lcd_s_w)); + m_lcd->write_segs().set(FUNC(mondial68k_state::lcd_output_w)); - PWM_DISPLAY(config, m_display).set_size(2, 8); + PWM_DISPLAY(config, m_led_pwm).set_size(2, 8); config.set_default_layout(layout_mephisto_mondial68k); /* sound hardware */ @@ -231,5 +233,5 @@ ROM_END Game Drivers ***************************************************************************/ -/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1988, mondl68k, 0, 0, mondial68k, mondial68k, mondial68k_state, empty_init, "Hegener + Glaser", "Mephisto Mondial 68000XL", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1988, mondl68k, 0, 0, mondial68k, mondial68k, mondial68k_state, empty_init, "Hegener + Glaser", "Mephisto Mondial 68000XL", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_montec.cpp b/src/mame/drivers/mephisto_montec.cpp index 6b4d5a5bc90..3f07fb08e0b 100644 --- a/src/mame/drivers/mephisto_montec.cpp +++ b/src/mame/drivers/mephisto_montec.cpp @@ -1,435 +1,240 @@ // license:BSD-3-Clause -// copyright-holders:Sandro Ronco -// thanks-to:yoyo_chessboard -/************************************************************************************************** +// copyright-holders:Sandro Ronco, hap +/****************************************************************************** - Mephisto Monte Carlo - Mephisto Mega IV - Mephisto Monte Carlo IV LE - Mephisto Super Mondial - Mephisto Super Mondial II +Mephisto Monte Carlo +Mephisto Monte Carlo IV +Mephisto Monte Carlo IV - Limited Edition - smondialb notes: - - holding CL+INFO+BOOK on boot load the test mode +The chess engine is by Frans Morsch, but for the IV version it's by Ed Schroeder. +Limited Edition has a twice faster CPU. - TODO: - - split driver into several files? - - megaiv/smondial leds are tri-color - - why are megaiv/smondial2 beeps noisy? - - what is montec 0x2000? (it can't be nmi ack) - - add Monte Carlo IV (non-LE) +Hardware notes: +- R65C02P4 @ 4MHz +- 8KB RAM(battery-backed), 32KB ROM +- expansion slot at underside (not used) +- 2*PCF2112, 2 7seg LCD screens +- 8 tri-color leds (like academy, always 6 red and 2 green?) +- magnetic chessboard with 64 leds, piezo -**************************************************************************************************/ +TODO: +- dump/add the standard Monte Carlo IV +******************************************************************************/ #include "emu.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" #include "cpu/m6502/m65c02.h" +#include "cpu/m6502/r65c02.h" #include "machine/74259.h" #include "machine/nvram.h" #include "machine/mmboard.h" #include "sound/dac.h" #include "video/pcf2100.h" +#include "video/pwm.h" -#include "screen.h" #include "speaker.h" -#include "softlist.h" +// internal artwork #include "mephisto_montec.lh" -#include "mephisto_megaiv.lh" -#include "mephisto_smondial.lh" -#include "mephisto_smondial2.lh" -class mephisto_montec_state : public driver_device +namespace { + +class montec_state : public driver_device { public: - mephisto_montec_state(const machine_config &mconfig, device_type type, const char *tag) + montec_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_board(*this, "board") - , m_muxlatch(*this, "muxlatch") + , m_lcd_latch(*this, "lcd_latch") + , m_led_pwm(*this, "led_pwm") , m_lcd(*this, "lcd%u", 0) , m_dac(*this, "dac") , m_keys(*this, "KEY.%u", 0) , m_digits(*this, "digit%u", 0U) - , m_low_leds(*this, "led%u", 0U) - , m_high_leds(*this, "led%u", 100U) { } - void smondial2(machine_config &config); void montec(machine_config &config); - void monteciv(machine_config &config); - void megaiv(machine_config &config); + void montec4le(machine_config &config); protected: - uint8_t montec_input_r(); - void montec_led_w(uint8_t data); - template void montec_lcd_s_w(uint32_t data); - - uint8_t megaiv_input_r(offs_t offset); - void megaiv_led_w(uint8_t data); - - void megaiv_mem(address_map &map); - void montec_mem(address_map &map); - void smondial2_mem(address_map &map); - virtual void machine_start() override; - virtual void machine_reset() override; +private: required_device m_maincpu; required_device m_board; - required_device m_muxlatch; + required_device m_lcd_latch; + required_device m_led_pwm; required_device_array m_lcd; required_device m_dac; required_ioport_array<2> m_keys; output_finder<8> m_digits; - output_finder<16> m_low_leds, m_high_leds; - - uint8_t m_leds_mux; -}; - -class mephisto_smondial_state : public mephisto_montec_state -{ -public: - mephisto_smondial_state(const machine_config &mconfig, device_type type, const char *tag) - : mephisto_montec_state(mconfig, type, tag) - , m_ledlatch(*this, "ledlatch") - , m_boardlatch(*this, "boardlatch") - { } - - void smondial(machine_config &config); -private: - template DECLARE_WRITE_LINE_MEMBER(led_mux_w); - DECLARE_WRITE_LINE_MEMBER(leds_a_w); - DECLARE_WRITE_LINE_MEMBER(leds_b_w); - DECLARE_WRITE_LINE_MEMBER(leds_c_w); - - void smondial_mem(address_map &map); + void montec_mem(address_map &map); - required_device m_ledlatch; - required_device m_boardlatch; + template void lcd_output_w(u32 data); + void led_w(u8 data); + void irq_ack_w(u8 data) { irq_ack_r(); } + u8 irq_ack_r(); + u8 input_r(); }; - -void mephisto_montec_state::machine_start() +void montec_state::machine_start() { m_digits.resolve(); - m_low_leds.resolve(); - m_high_leds.resolve(); - - save_item(NAME(m_leds_mux)); } -void mephisto_montec_state::machine_reset() -{ - m_leds_mux = 0x00; -} -void mephisto_montec_state::montec_led_w(uint8_t data) -{ - for(int i=0; i<4; i++) - for(int j=0; j<4; j++) - if (BIT(data, i)) - m_high_leds[(i << 2) | j] = BIT(~data, 4 + j); -} + +/****************************************************************************** + I/O +******************************************************************************/ template -void mephisto_montec_state::montec_lcd_s_w(uint32_t data) +void montec_state::lcd_output_w(u32 data) { - for (int i=0; i<4; i++) + // lcd segment outputs + for (int i = 0; i < 4; i++) m_digits[i + N*4] = bitswap<8>(data >> (8 * i), 7,4,5,0,1,2,3,6); } - -uint8_t mephisto_montec_state::montec_input_r() +void montec_state::led_w(u8 data) { - if (!m_muxlatch->q0_r()) return m_keys[1]->read(); - else if (!m_muxlatch->q1_r()) return m_keys[0]->read(); - - return m_board->input_r() ^ 0xff; + // d0-d3: keypad led select + // d4-d7: keypad led data + m_led_pwm->matrix(data & 0xf, ~data >> 4 & 0xf); } -void mephisto_montec_state::megaiv_led_w(uint8_t data) +u8 montec_state::irq_ack_r() { - if (m_leds_mux != m_board->mux_r()) - { - m_leds_mux = m_board->mux_r(); - for (int i=0; i<8; i++) - { - if (!BIT(m_leds_mux, i)) - { - m_high_leds[i] = BIT(data, 0) | BIT(data, 1); - m_low_leds[0 + i] = BIT(data, 2) | BIT(data, 3); - m_low_leds[8 + i] = BIT(data, 4) | BIT(data, 5); - } - } - } - - m_dac->write(BIT(data, 7)); + if (!machine().side_effects_disabled()) + m_maincpu->set_input_line(0, CLEAR_LINE); + + return 0; } -uint8_t mephisto_montec_state::megaiv_input_r(offs_t offset) +u8 montec_state::input_r() { - if (!m_muxlatch->q0_r()) return BIT(m_keys[1]->read(), 0 + offset) << 7; - else if (!m_muxlatch->q1_r()) return BIT(m_keys[1]->read(), 4 + offset) << 7; - else if (!m_muxlatch->q2_r()) return BIT(m_keys[0]->read(), 0 + offset) << 7; - else if (!m_muxlatch->q3_r()) return BIT(m_keys[0]->read(), 4 + offset) << 7; + u8 data = 0; + + // 74259 q0/q1 selects keypad + for (int i = 0; i < 2; i++) + if (!BIT(m_lcd_latch->output_state(), i)) + data |= m_keys[i]->read(); - return BIT(m_board->input_r(), offset) << 7; + return ~m_board->input_r() | data; } -void mephisto_montec_state::montec_mem(address_map &map) -{ - map(0x0000, 0x1fff).ram().share("nvram"); - map(0x2000, 0x2000).nopr(); // ? - map(0x2400, 0x2400).r(FUNC(mephisto_montec_state::montec_input_r)); - map(0x2800, 0x2800).w(m_board, FUNC(mephisto_board_device::mux_w)); - map(0x2c00, 0x2c00).w(m_board, FUNC(mephisto_board_device::led_w)); - map(0x3000, 0x3007).w(m_muxlatch, FUNC(hc259_device::write_d7)).nopr(); - map(0x3400, 0x3400).w(FUNC(mephisto_montec_state::montec_led_w)); - map(0x8000, 0xffff).rom(); -} -void mephisto_montec_state::megaiv_mem(address_map &map) +/****************************************************************************** + Address Maps +******************************************************************************/ + +void montec_state::montec_mem(address_map &map) { map(0x0000, 0x1fff).ram().share("nvram"); - map(0x2400, 0x2400).w(FUNC(mephisto_montec_state::megaiv_led_w)); + map(0x2000, 0x2000).rw(FUNC(montec_state::irq_ack_r), FUNC(montec_state::irq_ack_w)); + map(0x2400, 0x2400).r(FUNC(montec_state::input_r)); map(0x2800, 0x2800).w(m_board, FUNC(mephisto_board_device::mux_w)); - map(0x2c00, 0x2c07).w(m_muxlatch, FUNC(hc259_device::write_d7)).nopr(); - map(0x3000, 0x3007).r(FUNC(mephisto_montec_state::megaiv_input_r)); + map(0x2c00, 0x2c00).w(m_board, FUNC(mephisto_board_device::led_w)); + map(0x3000, 0x3007).w(m_lcd_latch, FUNC(hc259_device::write_d7)).nopr(); + map(0x3400, 0x3400).w(FUNC(montec_state::led_w)); map(0x8000, 0xffff).rom(); } -void mephisto_montec_state::smondial2_mem(address_map &map) -{ - megaiv_mem(map); - map(0x4000, 0x7fff).r("cartslot", FUNC(generic_slot_device::read_rom)); -} - - -template -WRITE_LINE_MEMBER(mephisto_smondial_state::led_mux_w) -{ - uint8_t leds_mux = ~m_ledlatch->output_state(); - if (leds_mux & 0x03) m_high_leds[N] = state; - if (leds_mux & 0x0c) m_low_leds[8 + N] = state; - if (leds_mux & 0x30) m_low_leds[0 + N] = state; -} - -WRITE_LINE_MEMBER(mephisto_smondial_state::leds_a_w) -{ - if (!m_ledlatch->q0_r() || !m_ledlatch->q1_r()) - for (int i = 0; i < 8; i++) - m_high_leds[i] = BIT(m_boardlatch->output_state(), i); -} -WRITE_LINE_MEMBER(mephisto_smondial_state::leds_b_w) -{ - if (!m_ledlatch->q2_r() || !m_ledlatch->q3_r()) - for (int i = 0; i < 8; i++) - m_low_leds[8 + i] = BIT(m_boardlatch->output_state(), i); -} - -WRITE_LINE_MEMBER(mephisto_smondial_state::leds_c_w) -{ - if (!m_ledlatch->q4_r() || !m_ledlatch->q5_r()) - for (int i = 0; i < 8; i++) - m_low_leds[0 + i] = BIT(m_boardlatch->output_state(), i); -} - -void mephisto_smondial_state::smondial_mem(address_map &map) -{ - map(0x0000, 0x1fff).ram().share("nvram"); - map(0x4000, 0x4007).r(FUNC(mephisto_smondial_state::megaiv_input_r)); - map(0x6400, 0x6407).w(m_ledlatch, FUNC(hc259_device::write_d7)); - map(0x6800, 0x6807).w(m_boardlatch, FUNC(hc259_device::write_d7)); - map(0x6c00, 0x6c07).w(m_muxlatch, FUNC(hc259_device::write_d7)); - map(0x8000, 0xffff).rom(); -} +/****************************************************************************** + Input Ports +******************************************************************************/ static INPUT_PORTS_START( montec ) PORT_START("KEY.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1 Pawn") PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2 Knight") PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3 Bishop") PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4 Rook") PORT_CODE(KEYCODE_4) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5 Queen") PORT_CODE(KEYCODE_5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6 King") PORT_CODE(KEYCODE_6) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("7 Black") PORT_CODE(KEYCODE_7) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8 White") PORT_CODE(KEYCODE_8) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("BOOK / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_B) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_O) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_START("KEY.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9 Book") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_B) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0 Pos") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_O) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Mem") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Info") PORT_CODE(KEYCODE_I) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Clear") PORT_CODE(KEYCODE_BACKSPACE) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level") PORT_CODE(KEYCODE_L) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_DEL) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) INPUT_PORTS_END -static INPUT_PORTS_START( megaiv ) - PORT_START("KEY.0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 Bishop") PORT_CODE(KEYCODE_3) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7 Black") PORT_CODE(KEYCODE_7) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Mem") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4 Rook") PORT_CODE(KEYCODE_4) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8 White") PORT_CODE(KEYCODE_8) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Info") PORT_CODE(KEYCODE_I) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_DEL) - - PORT_START("KEY.1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1 Pawn") PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 Queen") PORT_CODE(KEYCODE_5) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9 Book") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_B) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Clear") PORT_CODE(KEYCODE_BACKSPACE) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2 Knight") PORT_CODE(KEYCODE_2) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 King") PORT_CODE(KEYCODE_6) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("0 Pos") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_O) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Level") PORT_CODE(KEYCODE_L) -INPUT_PORTS_END -static INPUT_PORTS_START( smondial2 ) - PORT_START("KEY.0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 Bishop") PORT_CODE(KEYCODE_3) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7 Black") PORT_CODE(KEYCODE_7) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Pos") PORT_CODE(KEYCODE_O) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4 Rook") PORT_CODE(KEYCODE_4) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8 White") PORT_CODE(KEYCODE_8) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Mem") PORT_CODE(KEYCODE_M) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_DEL) - PORT_START("KEY.1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1 Pawn") PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 Queen") PORT_CODE(KEYCODE_5) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9 Help") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_H) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Level") PORT_CODE(KEYCODE_L) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2 Knight") PORT_CODE(KEYCODE_2) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 King") PORT_CODE(KEYCODE_6) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("0 Info") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_I) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Clear") PORT_CODE(KEYCODE_BACKSPACE) -INPUT_PORTS_END +/****************************************************************************** + Machine Configs +******************************************************************************/ -void mephisto_montec_state::montec(machine_config &config) +void montec_state::montec(machine_config &config) { - M65C02(config, m_maincpu, XTAL(8'000'000) / 2); // R65C02P4 - m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_montec_state::montec_mem); - m_maincpu->set_periodic_int(FUNC(mephisto_montec_state::nmi_line_pulse), attotime::from_hz(XTAL(8'000'000) / (1 << 14))); + /* basic machine hardware */ + R65C02(config, m_maincpu, 8_MHz_XTAL / 2); // R65C02P4 + m_maincpu->set_addrmap(AS_PROGRAM, &montec_state::montec_mem); + + const attotime irq_period = attotime::from_hz(8_MHz_XTAL / 2 / 0x2000); + m_maincpu->set_periodic_int(FUNC(montec_state::irq0_line_assert), irq_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - HC259(config, m_muxlatch); - m_muxlatch->q_out_cb<2>().set(m_dac, FUNC(dac_bit_interface::write)); - m_muxlatch->q_out_cb<4>().set(m_lcd[0], FUNC(pcf2112_device::data_w)); - m_muxlatch->q_out_cb<4>().append(m_lcd[1], FUNC(pcf2112_device::data_w)); - m_muxlatch->q_out_cb<5>().set(m_lcd[1], FUNC(pcf2112_device::dlen_w)); - m_muxlatch->q_out_cb<6>().set(m_lcd[0], FUNC(pcf2112_device::clb_w)); - m_muxlatch->q_out_cb<6>().append(m_lcd[1], FUNC(pcf2112_device::clb_w)); - m_muxlatch->q_out_cb<7>().set(m_lcd[0], FUNC(pcf2112_device::dlen_w)); + HC259(config, m_lcd_latch); + m_lcd_latch->q_out_cb<2>().set(m_dac, FUNC(dac_bit_interface::write)).invert(); + m_lcd_latch->q_out_cb<4>().set(m_lcd[0], FUNC(pcf2112_device::data_w)); + m_lcd_latch->q_out_cb<4>().append(m_lcd[1], FUNC(pcf2112_device::data_w)); + m_lcd_latch->q_out_cb<5>().set(m_lcd[1], FUNC(pcf2112_device::dlen_w)); + m_lcd_latch->q_out_cb<6>().set(m_lcd[0], FUNC(pcf2112_device::clb_w)); + m_lcd_latch->q_out_cb<6>().append(m_lcd[1], FUNC(pcf2112_device::clb_w)); + m_lcd_latch->q_out_cb<7>().set(m_lcd[0], FUNC(pcf2112_device::dlen_w)); + + MEPHISTO_SENSORS_BOARD(config, m_board); // internal + m_board->set_delay(attotime::from_msec(300)); + /* video hardware */ PCF2112(config, m_lcd[0], 50); // frequency guessed - m_lcd[0]->write_segs().set(FUNC(mephisto_montec_state::montec_lcd_s_w<0>)); + m_lcd[0]->write_segs().set(FUNC(montec_state::lcd_output_w<0>)); PCF2112(config, m_lcd[1], 50); // " - m_lcd[1]->write_segs().set(FUNC(mephisto_montec_state::montec_lcd_s_w<1>)); - - SPEAKER(config, "speaker").front_center(); - DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); - - MEPHISTO_SENSORS_BOARD(config, m_board); - m_board->set_delay(attotime::from_msec(300)); + m_lcd[1]->write_segs().set(FUNC(montec_state::lcd_output_w<1>)); + PWM_DISPLAY(config, m_led_pwm).set_size(4, 4); config.set_default_layout(layout_mephisto_montec); -} -void mephisto_montec_state::monteciv(machine_config &config) -{ - montec(config); - m_maincpu->set_clock(XTAL(8'000'000)); - m_board->set_delay(attotime::from_msec(150)); + /* sound hardware */ + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } -void mephisto_montec_state::megaiv(machine_config &config) +void montec_state::montec4le(machine_config &config) { montec(config); - m_maincpu->set_clock(XTAL(4'915'200)); - m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_montec_state::megaiv_mem); - m_maincpu->set_periodic_int(FUNC(mephisto_montec_state::nmi_line_pulse), attotime::from_hz(XTAL(4'915'200) / (1 << 13))); - - m_muxlatch->q_out_cb<2>().set_nop(); - - MEPHISTO_BUTTONS_BOARD(config.replace(), m_board); - m_board->set_delay(attotime::from_msec(250)); - m_board->set_disable_leds(true); - config.set_default_layout(layout_mephisto_megaiv); -} -void mephisto_smondial_state::smondial(machine_config &config) -{ - megaiv(config); - m_maincpu->set_clock(XTAL(4'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_smondial_state::smondial_mem); - m_maincpu->set_periodic_int(FUNC(mephisto_montec_state::nmi_line_pulse), attotime::from_hz(XTAL(4'000'000) / (1 << 13))); - - HC259(config, m_ledlatch); - m_ledlatch->q_out_cb<0>().set(FUNC(mephisto_smondial_state::leds_a_w)); - m_ledlatch->q_out_cb<1>().set(FUNC(mephisto_smondial_state::leds_a_w)); - m_ledlatch->q_out_cb<2>().set(FUNC(mephisto_smondial_state::leds_b_w)); - m_ledlatch->q_out_cb<3>().set(FUNC(mephisto_smondial_state::leds_b_w)); - m_ledlatch->q_out_cb<4>().set(FUNC(mephisto_smondial_state::leds_c_w)); - m_ledlatch->q_out_cb<5>().set(FUNC(mephisto_smondial_state::leds_c_w)); - m_ledlatch->q_out_cb<7>().set(m_dac, FUNC(dac_bit_interface::write)); - - HC259(config, m_boardlatch); - m_boardlatch->parallel_out_cb().set(m_board, FUNC(mephisto_board_device::mux_w)).invert(); - m_boardlatch->q_out_cb<0>().set(FUNC(mephisto_smondial_state::led_mux_w<0>)); - m_boardlatch->q_out_cb<1>().set(FUNC(mephisto_smondial_state::led_mux_w<1>)); - m_boardlatch->q_out_cb<2>().set(FUNC(mephisto_smondial_state::led_mux_w<2>)); - m_boardlatch->q_out_cb<3>().set(FUNC(mephisto_smondial_state::led_mux_w<3>)); - m_boardlatch->q_out_cb<4>().set(FUNC(mephisto_smondial_state::led_mux_w<4>)); - m_boardlatch->q_out_cb<5>().set(FUNC(mephisto_smondial_state::led_mux_w<5>)); - m_boardlatch->q_out_cb<6>().set(FUNC(mephisto_smondial_state::led_mux_w<6>)); - m_boardlatch->q_out_cb<7>().set(FUNC(mephisto_smondial_state::led_mux_w<7>)); - - config.set_default_layout(layout_mephisto_smondial); -} - -void mephisto_montec_state::smondial2(machine_config &config) -{ - megaiv(config); - m_maincpu->set_clock(XTAL(4'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_montec_state::smondial2_mem); - m_maincpu->set_periodic_int(FUNC(mephisto_montec_state::nmi_line_pulse), attotime::from_hz(XTAL(4'000'000) / (1 << 13))); + /* basic machine hardware */ + M65C02(config.replace(), m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &montec_state::montec_mem); - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "smondial2_cart"); - SOFTWARE_LIST(config, "cart_list").set_original("mephisto_smondial2"); + const attotime irq_period = attotime::from_hz(8_MHz_XTAL / 0x4000); + m_maincpu->set_periodic_int(FUNC(montec_state::irq0_line_assert), irq_period); - config.set_default_layout(layout_mephisto_smondial2); + m_board->set_delay(attotime::from_msec(150)); } -ROM_START( megaiv ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("megaiv.bin", 0x8000, 0x8000, CRC(dee355d2) SHA1(6bc79c0fb169020f017412f5f9696b9ecafbf99f) ) -ROM_END - -ROM_START( megaiva ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("mega_iv_17.03.88", 0x8000, 0x8000, CRC(85267e82) SHA1(654c9cf84bf2165fc94f8c4cf9c662786ef3283b) ) -ROM_END -ROM_START( monteciv ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("mciv.bin", 0x8000, 0x8000, CRC(c4887694) SHA1(7f482d2a40fcb3125266e7a5407da315b4f9b49c) ) -ROM_END +/****************************************************************************** + ROM Definitions +******************************************************************************/ ROM_START( montec ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -441,36 +246,22 @@ ROM_START( monteca ) ROM_LOAD("mc2_20.7.87", 0x8000, 0x8000, CRC(05524da9) SHA1(bee2ffe09a27095f733584e0fb1203b95c23e17e) ) ROM_END -ROM_START( smondial ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("supermondial_a.bin", 0x8000, 0x8000, CRC(c1d7d0a5) SHA1(d7f0da6938458c06925f0936e63915319144d7e0) ) -ROM_END -ROM_START( smondialab ) +ROM_START( montec4le ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("supermondial_ab.bin", 0x8000, 0x8000, CRC(a8781685) SHA1(fd4c97e13bd398dc4c85e3e1778bf7e59fccd71e) ) + ROM_LOAD("mc4le.bin", 0x8000, 0x8000, CRC(c4887694) SHA1(7f482d2a40fcb3125266e7a5407da315b4f9b49c) ) ROM_END -ROM_START( smondialb ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("supermondial_b.bin", 0x8000, 0x8000, CRC(6fb89e97) SHA1(b001e657b4fdc097322b28a25c31814f3da7b124) ) -ROM_END +} // anonymous namespace -ROM_START( smondial2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("supermondial_ii.bin", 0x8000, 0x8000, CRC(cd73df4a) SHA1(bad786074be613d7f48bf98b6fdf8178a4a85f5b) ) -ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1988, megaiv, 0, 0, megaiv, megaiv, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Mega IV (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, megaiva, megaiv, 0, megaiv, megaiv, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Mega IV (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/*************************************************************************** + Game Drivers +***************************************************************************/ -CONS( 1986, smondial, 0, 0, smondial, megaiv, mephisto_smondial_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. A)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, smondialab, smondial, 0, smondial, megaiv, mephisto_smondial_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. AB)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, smondialb, smondial, 0, megaiv, megaiv, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, smondial2, 0, 0, smondial2, smondial2, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1987, montec, 0, 0, montec, montec, montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo (ver. MC3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, monteca, montec, 0, montec, montec, montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo (ver. MC2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, montec, 0, 0, montec, montec, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo (ver. MC3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, monteca, montec, 0, montec, montec, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo (ver. MC2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, monteciv, 0, 0, monteciv, montec, mephisto_montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo IV - Limited Edition", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, montec4le, 0, 0, montec4le, montec, montec_state, empty_init, "Hegener + Glaser", "Mephisto Monte Carlo IV - Limited Edition", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_smondial.cpp b/src/mame/drivers/mephisto_smondial.cpp new file mode 100644 index 00000000000..a1f119ba28e --- /dev/null +++ b/src/mame/drivers/mephisto_smondial.cpp @@ -0,0 +1,407 @@ +// license:BSD-3-Clause +// copyright-holders:Sandro Ronco, hap +// thanks-to:yoyo_chessboard +/****************************************************************************** + +Mephisto Super Mondial +Mephisto Super Mondial II +Mephisto Mega IV + +Hardware notes: +- G65SC02P-4 @ 4MHz +- 8KB RAMbattery-backed), 32KB ROM +- expansion slot at underside (only used for smondial2) +- 2*PCF2112, 2 7seg LCD screens +- 8*8 chessboard buttons, 24 tri-color leds, piezo + +Undocumented buttons: +- smondialb: holding CL+INFO on boot runs diagnostics + +******************************************************************************/ + +#include "emu.h" + +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" +#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/r65c02.h" +#include "machine/74259.h" +#include "machine/nvram.h" +#include "machine/sensorboard.h" +#include "sound/dac.h" +#include "video/pcf2100.h" +#include "video/pwm.h" + +#include "softlist.h" +#include "speaker.h" + +// internal artwork +#include "mephisto_smondial.lh" +#include "mephisto_smondial2.lh" + + +namespace { + +// Super Mondial B / shared + +class smondialb_state : public driver_device +{ +public: + smondialb_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_board(*this, "board") + , m_lcd_latch(*this, "lcd_latch") + , m_led_pwm(*this, "led_pwm") + , m_lcd(*this, "lcd%u", 0) + , m_dac(*this, "dac") + , m_keys(*this, "KEY.%u", 0) + , m_digits(*this, "digit%u", 0U) + { } + + // machine configs + void smondial2(machine_config &config); + void mega4(machine_config &config); + void smondialb(machine_config &config); + +protected: + virtual void machine_start() override; + + // devices/pointers + required_device m_maincpu; + required_device m_board; + required_device m_lcd_latch; + required_device m_led_pwm; + required_device_array m_lcd; + required_device m_dac; + required_ioport_array<4> m_keys; + output_finder<8> m_digits; + + // address maps + void smondialb_mem(address_map &map); + void smondial2_mem(address_map &map); + + // I/O handlers + template void lcd_output_w(u32 data); + void update_leds(); + u8 input_r(offs_t offset); + virtual void led_w(u8 data); + void board_w(u8 data); + INTERRUPT_GEN_MEMBER(nmi_handler); + + u8 m_led_data = 0; + u8 m_board_mux = 0; +}; + +void smondialb_state::machine_start() +{ + m_digits.resolve(); + + save_item(NAME(m_led_data)); + save_item(NAME(m_board_mux)); +} + +// Super Mondial A + +class smondiala_state : public smondialb_state +{ +public: + smondiala_state(const machine_config &mconfig, device_type type, const char *tag) : + smondialb_state(mconfig, type, tag) + { } + + void smondiala(machine_config &config); + +private: + void smondiala_mem(address_map &map); + + // led row/column is switched around, do a trampoline here instead of making a different .lay file + virtual void led_w(u8 data) override { smondialb_state::led_w(bitswap<8>(data, 7,6,3,2,5,4,1,0)); } + + void irq_ack_w(u8 data); +}; + + + +/****************************************************************************** + I/O +******************************************************************************/ + +template +void smondialb_state::lcd_output_w(u32 data) +{ + // lcd segment outputs + for (int i = 0; i < 4; i++) + m_digits[i + N*4] = bitswap<8>(data >> (8 * i), 7,4,5,0,1,2,3,6); +} + +void smondialb_state::update_leds() +{ + m_led_pwm->matrix(m_board_mux, m_led_data); +} + +void smondialb_state::board_w(u8 data) +{ + m_board_mux = ~data; + update_leds(); +} + +void smondialb_state::led_w(u8 data) +{ + // d0-d5: led data + m_led_data = data; + update_leds(); + + // d6: nmi enable (does not apply to smondiala) + // d7: speaker out + m_dac->write(BIT(data, 7)); +} + +u8 smondialb_state::input_r(offs_t offset) +{ + u8 data = 0; + + // read keypad + for (int i = 0; i < 4; i++) + if (!BIT(m_lcd_latch->output_state(), i)) + data |= BIT(m_keys[i]->read(), offset & 3); + + // read chessboard sensors + for (int i = 0; i < 8; i++) + if (BIT(m_board_mux, i)) + data |= BIT(m_board->read_rank(i), offset); + + return ~(data << 7); +} + +INTERRUPT_GEN_MEMBER(smondialb_state::nmi_handler) +{ + if (m_led_data & 0x40) + m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + +void smondiala_state::irq_ack_w(u8 data) +{ + m_maincpu->set_input_line(0, CLEAR_LINE); +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void smondialb_state::smondialb_mem(address_map &map) +{ + map(0x0000, 0x1fff).ram().share("nvram"); + map(0x2400, 0x2400).w(FUNC(smondialb_state::led_w)); + map(0x2800, 0x2800).w(FUNC(smondialb_state::board_w)); + map(0x2c00, 0x2c07).w(m_lcd_latch, FUNC(hc259_device::write_d7)).nopr(); + map(0x3000, 0x3007).r(FUNC(smondialb_state::input_r)); + map(0x8000, 0xffff).rom(); +} + +void smondialb_state::smondial2_mem(address_map &map) +{ + smondialb_mem(map); + map(0x4000, 0x7fff).r("cartslot", FUNC(generic_slot_device::read_rom)); +} + +void smondiala_state::smondiala_mem(address_map &map) +{ + map(0x0000, 0x1fff).ram().share("nvram"); + map(0x4000, 0x4007).r(FUNC(smondiala_state::input_r)); + map(0x6000, 0x6000).w(FUNC(smondiala_state::irq_ack_w)); + map(0x6400, 0x6407).w("led_latch", FUNC(hc259_device::write_d7)).nopr(); + map(0x6800, 0x6807).w("board_latch", FUNC(hc259_device::write_d7)).nopr(); + map(0x6c00, 0x6c07).w(m_lcd_latch, FUNC(hc259_device::write_d7)).nopr(); + map(0x8000, 0xffff).rom(); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( smondial ) + PORT_START("KEY.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn / 1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen / 5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("BOOK / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_B) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("KEY.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight / 2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King / 6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_O) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) + + PORT_START("KEY.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop / 3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black / 7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + + PORT_START("KEY.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook / 4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White / 8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) +INPUT_PORTS_END + +static INPUT_PORTS_START( smondial2 ) + PORT_INCLUDE( smondial ) + + PORT_MODIFY("KEY.0") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("HELP / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_H) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) + + PORT_MODIFY("KEY.1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_I) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_MODIFY("KEY.2") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) + + PORT_MODIFY("KEY.3") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Configs +******************************************************************************/ + +void smondialb_state::smondialb(machine_config &config) +{ + /* basic machine hardware */ + M65SC02(config, m_maincpu, 4_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondialb_mem); + + const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(smondialb_state::nmi_handler), nmi_period); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + HC259(config, m_lcd_latch); + m_lcd_latch->q_out_cb<4>().set(m_lcd[0], FUNC(pcf2112_device::data_w)); + m_lcd_latch->q_out_cb<4>().append(m_lcd[1], FUNC(pcf2112_device::data_w)); + m_lcd_latch->q_out_cb<5>().set(m_lcd[1], FUNC(pcf2112_device::dlen_w)); + m_lcd_latch->q_out_cb<6>().set(m_lcd[0], FUNC(pcf2112_device::clb_w)); + m_lcd_latch->q_out_cb<6>().append(m_lcd[1], FUNC(pcf2112_device::clb_w)); + m_lcd_latch->q_out_cb<7>().set(m_lcd[0], FUNC(pcf2112_device::dlen_w)); + + SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); + m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + m_board->set_delay(attotime::from_msec(250)); + + /* video hardware */ + PCF2112(config, m_lcd[0], 50); // frequency guessed + m_lcd[0]->write_segs().set(FUNC(smondialb_state::lcd_output_w<0>)); + PCF2112(config, m_lcd[1], 50); // " + m_lcd[1]->write_segs().set(FUNC(smondialb_state::lcd_output_w<1>)); + + PWM_DISPLAY(config, m_led_pwm).set_size(8, 6); + config.set_default_layout(layout_mephisto_smondial); + + /* sound hardware */ + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + +void smondiala_state::smondiala(machine_config &config) +{ + smondialb(config); + + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &smondiala_state::smondiala_mem); + + const attotime irq_period = attotime::from_hz(4_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(smondiala_state::irq0_line_assert), irq_period); + + HC259(config, "led_latch").parallel_out_cb().set(FUNC(smondiala_state::led_w)).invert(); + HC259(config, "board_latch").parallel_out_cb().set(FUNC(smondiala_state::board_w)).invert(); +} + +void smondialb_state::smondial2(machine_config &config) +{ + smondialb(config); + + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondial2_mem); + + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "smondial2_cart"); + SOFTWARE_LIST(config, "cart_list").set_original("mephisto_smondial2"); + + config.set_default_layout(layout_mephisto_smondial2); +} + +void smondialb_state::mega4(machine_config &config) +{ + smondialb(config); + + /* basic machine hardware */ + R65C02(config.replace(), m_maincpu, 4.9152_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondialb_mem); + + const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(smondialb_state::nmi_handler), nmi_period); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( smondial ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("supermondial_a.bin", 0x8000, 0x8000, CRC(c1d7d0a5) SHA1(d7f0da6938458c06925f0936e63915319144d7e0) ) +ROM_END + +ROM_START( smondialab ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("supermondial_ab.bin", 0x8000, 0x8000, CRC(a8781685) SHA1(fd4c97e13bd398dc4c85e3e1778bf7e59fccd71e) ) +ROM_END + +ROM_START( smondialb ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("supermondial_b.bin", 0x8000, 0x8000, CRC(6fb89e97) SHA1(b001e657b4fdc097322b28a25c31814f3da7b124) ) +ROM_END + + +ROM_START( smondial2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("supermondial_ii.bin", 0x8000, 0x8000, CRC(cd73df4a) SHA1(bad786074be613d7f48bf98b6fdf8178a4a85f5b) ) +ROM_END + + +ROM_START( mega4 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("mega_iv.bin", 0x8000, 0x8000, CRC(dee355d2) SHA1(6bc79c0fb169020f017412f5f9696b9ecafbf99f) ) +ROM_END + +ROM_START( mega4a ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("mega_iv_17.03.88", 0x8000, 0x8000, CRC(85267e82) SHA1(654c9cf84bf2165fc94f8c4cf9c662786ef3283b) ) +ROM_END + +} // anonymous namespace + + + +/*************************************************************************** + Game Drivers +***************************************************************************/ + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1986, smondial, 0, 0, smondiala, smondial, smondiala_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. A)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, smondialab, smondial, 0, smondiala, smondial, smondiala_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. AB)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, smondialb, smondial, 0, smondialb, smondial, smondialb_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial (ver. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1988, smondial2, 0, 0, smondial2, smondial2, smondialb_state, empty_init, "Hegener + Glaser", "Mephisto Super Mondial II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1988, mega4, 0, 0, mega4, smondial, smondialb_state, empty_init, "Hegener + Glaser", "Mephisto Mega IV (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1988, mega4a, mega4, 0, mega4, smondial, smondialb_state, empty_init, "Hegener + Glaser", "Mephisto Mega IV (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay index fabca06d644..d9f923498a7 100644 --- a/src/mame/layout/mephisto_academy.lay +++ b/src/mame/layout/mephisto_academy.lay @@ -20,10 +20,10 @@ license:CC0 - + - + diff --git a/src/mame/layout/mephisto_alm16.lay b/src/mame/layout/mephisto_alm16.lay index e74f8ca549b..4cebb32edd6 100644 --- a/src/mame/layout/mephisto_alm16.lay +++ b/src/mame/layout/mephisto_alm16.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_alm32.lay b/src/mame/layout/mephisto_alm32.lay index e141fc81c1c..fe82c2b9431 100644 --- a/src/mame/layout/mephisto_alm32.lay +++ b/src/mame/layout/mephisto_alm32.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_amsterdam.lay b/src/mame/layout/mephisto_amsterdam.lay index 51f2378c647..5cdc50483d0 100644 --- a/src/mame/layout/mephisto_amsterdam.lay +++ b/src/mame/layout/mephisto_amsterdam.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_berlin.lay b/src/mame/layout/mephisto_berlin.lay index 1ea3103a18f..d77ad3c87f3 100644 --- a/src/mame/layout/mephisto_berlin.lay +++ b/src/mame/layout/mephisto_berlin.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_bup.lay b/src/mame/layout/mephisto_bup.lay index 8b718a333e7..80caabb1f61 100644 --- a/src/mame/layout/mephisto_bup.lay +++ b/src/mame/layout/mephisto_bup.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_gen32.lay b/src/mame/layout/mephisto_gen32.lay index 498fbecc855..85eed4e009a 100644 --- a/src/mame/layout/mephisto_gen32.lay +++ b/src/mame/layout/mephisto_gen32.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_glasgow.lay b/src/mame/layout/mephisto_glasgow.lay index 4ec926a6368..3b161ef2592 100644 --- a/src/mame/layout/mephisto_glasgow.lay +++ b/src/mame/layout/mephisto_glasgow.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_megaiv.lay b/src/mame/layout/mephisto_megaiv.lay deleted file mode 100644 index 59bf904bebe..00000000000 --- a/src/mame/layout/mephisto_megaiv.lay +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/layout/mephisto_milano.lay b/src/mame/layout/mephisto_milano.lay index ad4c4b74f10..dff38a17dc5 100644 --- a/src/mame/layout/mephisto_milano.lay +++ b/src/mame/layout/mephisto_milano.lay @@ -14,7 +14,7 @@ license:CC0 - + @@ -22,7 +22,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_mm2.lay b/src/mame/layout/mephisto_mm2.lay index 4d76871cb0d..52e5535e18f 100644 --- a/src/mame/layout/mephisto_mm2.lay +++ b/src/mame/layout/mephisto_mm2.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_modena.lay b/src/mame/layout/mephisto_modena.lay index dd0b91f0903..043921ccd28 100644 --- a/src/mame/layout/mephisto_modena.lay +++ b/src/mame/layout/mephisto_modena.lay @@ -14,7 +14,7 @@ license:CC0 - + @@ -22,7 +22,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_modular_tm.lay b/src/mame/layout/mephisto_modular_tm.lay index 6eb92e690e0..208344434a6 100644 --- a/src/mame/layout/mephisto_modular_tm.lay +++ b/src/mame/layout/mephisto_modular_tm.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_mondial.lay b/src/mame/layout/mephisto_mondial.lay index 6ba3f4c0498..23f1d454190 100644 --- a/src/mame/layout/mephisto_mondial.lay +++ b/src/mame/layout/mephisto_mondial.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_mondial2.lay b/src/mame/layout/mephisto_mondial2.lay index b9ccca1f879..493e8c0f69e 100644 --- a/src/mame/layout/mephisto_mondial2.lay +++ b/src/mame/layout/mephisto_mondial2.lay @@ -11,7 +11,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_mondial68k.lay b/src/mame/layout/mephisto_mondial68k.lay index ae5695df054..79bb8780067 100644 --- a/src/mame/layout/mephisto_mondial68k.lay +++ b/src/mame/layout/mephisto_mondial68k.lay @@ -15,7 +15,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_montec.lay b/src/mame/layout/mephisto_montec.lay index d86b683554d..02d13f9594b 100644 --- a/src/mame/layout/mephisto_montec.lay +++ b/src/mame/layout/mephisto_montec.lay @@ -10,12 +10,24 @@ license:CC0 + + + + + + + + + + + + - + - + @@ -400,14 +412,32 @@ license:CC0 - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -434,22 +464,22 @@ license:CC0 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/mephisto_polgar.lay b/src/mame/layout/mephisto_polgar.lay index e45d884e6b9..e3618b188a8 100644 --- a/src/mame/layout/mephisto_polgar.lay +++ b/src/mame/layout/mephisto_polgar.lay @@ -14,7 +14,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_risc.lay b/src/mame/layout/mephisto_risc.lay index e45d884e6b9..e3618b188a8 100644 --- a/src/mame/layout/mephisto_risc.lay +++ b/src/mame/layout/mephisto_risc.lay @@ -14,7 +14,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_smondial.lay b/src/mame/layout/mephisto_smondial.lay index de095c6b923..a82503ba114 100644 --- a/src/mame/layout/mephisto_smondial.lay +++ b/src/mame/layout/mephisto_smondial.lay @@ -10,12 +10,24 @@ license:CC0 + + + + + + + + + + + + - + @@ -201,14 +213,14 @@ license:CC0 - - - - - - - - + + + + + + + + @@ -290,8 +302,8 @@ license:CC0 - - + + @@ -311,18 +323,18 @@ license:CC0 - - - - - - - - - - - - + + + + + + + + + + + + @@ -331,7 +343,7 @@ license:CC0 - + @@ -344,10 +356,10 @@ license:CC0 - - - - + + + + @@ -371,14 +383,32 @@ license:CC0 - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -394,7 +424,7 @@ license:CC0 - + @@ -422,22 +452,22 @@ license:CC0 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -448,7 +478,7 @@ license:CC0 - + @@ -470,23 +500,59 @@ license:CC0 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/mephisto_smondial2.lay b/src/mame/layout/mephisto_smondial2.lay index a67d5d3fc2a..7daf3e2d41e 100644 --- a/src/mame/layout/mephisto_smondial2.lay +++ b/src/mame/layout/mephisto_smondial2.lay @@ -10,12 +10,24 @@ license:CC0 + + + + + + + + + + + + - + @@ -204,14 +216,14 @@ license:CC0 - - - - - - - - + + + + + + + + @@ -293,8 +305,8 @@ license:CC0 - - + + @@ -314,18 +326,18 @@ license:CC0 - - - - - - - - - - - - + + + + + + + + + + + + @@ -334,7 +346,7 @@ license:CC0 - + @@ -347,10 +359,10 @@ license:CC0 - - - - + + + + @@ -374,14 +386,32 @@ license:CC0 - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -425,22 +455,22 @@ license:CC0 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -473,23 +503,59 @@ license:CC0 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index e26298c49a7..1e106a1ef79 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -22792,15 +22792,9 @@ mondial2 // 1987 Mephisto Mondial II mondl68k // 1988 Mephisto Mondial 68000XL @source:mephisto_montec.cpp -smondial // 1986 Mephisto Super Mondial (Ver A) -smondialab // 1986 Mephisto Super Mondial (Ver AB) -smondialb // 1986 Mephisto Super Mondial (Ver B) montec // 1987 Mephisto Monte Carlo monteca // 1987 Mephisto Monte Carlo -smondial2 // 1989 Mephisto Super Mondial II -megaiv // 1989 Mephisto Mega IV -megaiva // 1989 Mephisto Mega IV -monteciv // 1990 Mephisto Monte Carlo IV LE +montec4le // 1990 Mephisto Monte Carlo IV LE @source:mephisto_polgar.cpp polgar // 1990 Mephisto Polgar @@ -22812,6 +22806,14 @@ polgar101 // 1990 Mephisto Polgar 10MHz mrisc // 1992 Mephisto RISC 1MB mrisc2 // 1994 Mephisto RISC II +@source:mephisto_smondial.cpp +mega4 // 1989 Mephisto Mega IV +mega4a // 1989 Mephisto Mega IV +smondial // 1986 Mephisto Super Mondial (Ver A) +smondialab // 1986 Mephisto Super Mondial (Ver AB) +smondialb // 1986 Mephisto Super Mondial (Ver B) +smondial2 // 1989 Mephisto Super Mondial II + @source:mephistp.cpp mephistp // mephistp1 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index b4221afab8f..a5acf920536 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -592,6 +592,7 @@ mephisto_mondial68k.cpp mephisto_montec.cpp mephisto_polgar.cpp mephisto_risc.cpp +mephisto_smondial.cpp meritum.cpp mes.cpp mfabfz.cpp -- cgit v1.2.3