diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 5f735665c25..ea6c27e1722 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2065,6 +2065,7 @@ createMESSProjects(_target, _subtarget, "hegener") files { MAME_DIR .. "src/mame/drivers/glasgow.cpp", MAME_DIR .. "src/mame/drivers/mephisto.cpp", + MAME_DIR .. "src/mame/drivers/mephisto_montec.cpp", MAME_DIR .. "src/mame/drivers/mmodular.cpp", MAME_DIR .. "src/mame/drivers/polgar.cpp", MAME_DIR .. "src/mame/drivers/risc2500.cpp", diff --git a/src/mame/drivers/mephisto_montec.cpp b/src/mame/drivers/mephisto_montec.cpp new file mode 100644 index 00000000000..f50d12a307c --- /dev/null +++ b/src/mame/drivers/mephisto_montec.cpp @@ -0,0 +1,344 @@ +// license:BSD-3-Clause +// copyright-holders:Sandro Ronco +/************************************************************************************************** + + Mephisto Monte Carlo + Mephisto Mega IV + Mephisto Monte Carlo IV LE + +**************************************************************************************************/ + + +#include "emu.h" +#include "cpu/m6502/m65c02.h" +#include "machine/nvram.h" +#include "machine/mmboard.h" +#include "screen.h" +#include "speaker.h" + + +#include "mephisto_montec.lh" +#include "mephisto_megaiv.lh" + + +class mephisto_montec_state : public driver_device +{ +public: + mephisto_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_beeper(*this, "beeper") + , m_keys(*this, "KEY.%u", 0) + { } + + + DECLARE_READ8_MEMBER(montec_input_r); + DECLARE_READ8_MEMBER(montec_nmi_ack_r); + DECLARE_WRITE8_MEMBER(montec_nmi_ack_w); + DECLARE_WRITE8_MEMBER(montec_mux_w); + DECLARE_WRITE8_MEMBER(montec_led_w); + DECLARE_WRITE8_MEMBER(montec_beeper_w); + DECLARE_WRITE8_MEMBER(montec_lcd_data_w); + DECLARE_WRITE8_MEMBER(montec_ldc_cs0_w); + DECLARE_WRITE8_MEMBER(montec_ldc_cs1_w); + DECLARE_WRITE8_MEMBER(montec_lcd_clk_w); + + DECLARE_READ8_MEMBER(megaiv_input_r); + DECLARE_WRITE8_MEMBER(megaiv_led_w); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_device m_board; + required_device m_beeper; + optional_ioport_array<2> m_keys; + + uint8_t m_lcd_mux; + uint8_t m_input_mux; + uint8_t m_leds_mux; + + struct display_t + { + uint8_t pos; + int8_t shift; + uint8_t data; + uint8_t bit; + } m_display; +}; + + +void mephisto_montec_state::machine_start() +{ + save_item(NAME(m_lcd_mux)); + save_item(NAME(m_input_mux)); + save_item(NAME(m_leds_mux)); + save_item(NAME(m_display.pos)); + save_item(NAME(m_display.shift)); + save_item(NAME(m_display.data)); + save_item(NAME(m_display.bit)); +} + +void mephisto_montec_state::machine_reset() +{ + m_lcd_mux = 0x00; + m_input_mux = 0x00; + m_leds_mux = 0x00; + + m_display.pos = 0; + m_display.shift = 0; + m_display.data = 0; + m_display.bit = 0; +} + +WRITE8_MEMBER(mephisto_montec_state::montec_led_w) +{ + for(int i=0; i<4; i++) + for(int j=0; j<4; j++) + if (BIT(data, i)) + output().set_led_value(100 + i * 4 + j, BIT(data, 4 + j) ? 0 : 1); +} + + +WRITE8_MEMBER(mephisto_montec_state::montec_lcd_data_w) +{ + m_display.bit = BIT(data, 7); +} + +WRITE8_MEMBER(mephisto_montec_state::montec_ldc_cs0_w) +{ + if (data) + m_lcd_mux |= 0x01; + else + m_lcd_mux &= ~0x01; + + m_display.pos = 0; + m_display.shift = -1; + m_display.data = 0; +} + +WRITE8_MEMBER(mephisto_montec_state::montec_ldc_cs1_w) +{ + if (data) + m_lcd_mux |= 0x02; + else + m_lcd_mux &= ~0x02; + + m_display.pos = 0; + m_display.shift = -1; + m_display.data = 0; +} + +WRITE8_MEMBER(mephisto_montec_state::montec_lcd_clk_w) +{ + if (data) + { + m_display.data <<= 1; + m_display.data |= m_display.bit; + m_display.shift++; + } + + if (m_display.shift == 8) + { + if (m_lcd_mux & 0x01) output().set_digit_value(0 + m_display.pos, BITSWAP8(m_display.data, 0,3,2,7,6,5,4,1)); + if (m_lcd_mux & 0x02) output().set_digit_value(4 + m_display.pos, BITSWAP8(m_display.data, 0,3,2,7,6,5,4,1)); + + m_display.shift = 0; + m_display.pos = (m_display.pos + 1) & 3; + m_display.data = 0; + } +} + + +WRITE8_MEMBER(mephisto_montec_state::montec_mux_w) +{ + if (data) + m_input_mux &= ~(1 << offset); + else + m_input_mux |= (1 << offset); +} + +READ8_MEMBER(mephisto_montec_state::montec_input_r) +{ + if (m_input_mux & 0x01) return m_keys[1]->read(); + else if (m_input_mux & 0x02) return m_keys[0]->read(); + + return m_board->input_r(space, offset) ^ 0xff; +} + +READ8_MEMBER(mephisto_montec_state::montec_nmi_ack_r) +{ + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + return 0; +} + +WRITE8_MEMBER(mephisto_montec_state::montec_nmi_ack_w) +{ + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + +WRITE8_MEMBER(mephisto_montec_state::montec_beeper_w) +{ + m_beeper->set_state(BIT(data, 7) ? 0 : 1); +} + +WRITE8_MEMBER(mephisto_montec_state::megaiv_led_w) +{ + if (m_leds_mux != m_board->mux_r(space, offset)) + { + m_leds_mux = m_board->mux_r(space, offset); + for (int i=0; i<8; i++) + { + if (!BIT(m_leds_mux, i)) + { + output().set_led_value(100 + i, BIT(data, 0) | BIT(data, 1)); + output().set_led_value(0 + i, BIT(data, 2) | BIT(data, 3)); + output().set_led_value(8 + i, BIT(data, 4) | BIT(data, 5)); + } + } + } + + m_beeper->set_state(BIT(data, 7)); +} + +READ8_MEMBER(mephisto_montec_state::megaiv_input_r) +{ + if (m_input_mux & 0x01) return BIT(m_keys[1]->read(), 0 + offset) << 7; + else if (m_input_mux & 0x02) return BIT(m_keys[1]->read(), 4 + offset) << 7; + else if (m_input_mux & 0x04) return BIT(m_keys[0]->read(), 0 + offset) << 7; + else if (m_input_mux & 0x08) return BIT(m_keys[0]->read(), 4 + offset) << 7; + + return BIT(m_board->input_r(space, offset), offset) << 7; +} + + +static ADDRESS_MAP_START(montec_mem , AS_PROGRAM, 8, mephisto_montec_state ) + AM_RANGE( 0x0000, 0x1fff ) AM_RAM AM_SHARE("nvram") + AM_RANGE( 0x2400, 0x2400 ) AM_READ(montec_input_r) + AM_RANGE( 0x2800, 0x2800 ) AM_DEVWRITE("board", mephisto_board_device, mux_w) + AM_RANGE( 0x2c00, 0x2c00 ) AM_DEVWRITE("board", mephisto_board_device, led_w) + AM_RANGE( 0x3400, 0x3400 ) AM_WRITE(montec_led_w) + AM_RANGE( 0x3000, 0x3001 ) AM_WRITE(montec_mux_w) + AM_RANGE( 0x3002, 0x3002 ) AM_WRITE(montec_beeper_w) + AM_RANGE( 0x3004, 0x3004 ) AM_WRITE(montec_lcd_data_w) + AM_RANGE( 0x3005, 0x3005 ) AM_WRITE(montec_ldc_cs1_w) + AM_RANGE( 0x3006, 0x3006 ) AM_WRITE(montec_lcd_clk_w) + AM_RANGE( 0x3007, 0x3007 ) AM_WRITE(montec_ldc_cs0_w) + AM_RANGE( 0x2000, 0x2000 ) AM_READWRITE(montec_nmi_ack_r, montec_nmi_ack_w) + AM_RANGE( 0x8000, 0xffff ) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START(megaiv_mem , AS_PROGRAM, 8, mephisto_montec_state ) + AM_RANGE( 0x0000, 0x1fff ) AM_RAM AM_SHARE("nvram") + AM_RANGE( 0x2400, 0x2400 ) AM_WRITE(megaiv_led_w) + AM_RANGE( 0x2800, 0x2800 ) AM_DEVWRITE("board", mephisto_board_device, mux_w) + AM_RANGE( 0x2c00, 0x2c03 ) AM_WRITE(montec_mux_w) AM_READNOP + AM_RANGE( 0x2c04, 0x2c04 ) AM_WRITE(montec_lcd_data_w) + AM_RANGE( 0x2c05, 0x2c05 ) AM_WRITE(montec_ldc_cs1_w) + AM_RANGE( 0x2c06, 0x2c06 ) AM_WRITE(montec_lcd_clk_w) + AM_RANGE( 0x2c07, 0x2c07 ) AM_WRITE(montec_ldc_cs0_w) + AM_RANGE( 0x3000, 0x3007 ) AM_READ(megaiv_input_r) + AM_RANGE( 0x8000, 0xffff ) AM_ROM +ADDRESS_MAP_END + +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_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) +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 MACHINE_CONFIG_START( montec ) + MCFG_CPU_ADD("maincpu", M65C02, XTAL_4MHz) + MCFG_CPU_PROGRAM_MAP( montec_mem ) + MCFG_CPU_PERIODIC_INT_DRIVER(mephisto_montec_state, nmi_line_assert, (double)XTAL_4MHz / (1 << 13)) + + MCFG_NVRAM_ADD_0FILL("nvram") + + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("beeper", BEEP, 3250) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_MEPHISTO_SENSORS_BOARD_ADD("board") + + MCFG_DEFAULT_LAYOUT(layout_mephisto_montec) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( monteciv, montec ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_CLOCK( XTAL_8MHz ) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( megaiv, montec ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_CLOCK( XTAL_4_9152MHz ) + MCFG_CPU_PROGRAM_MAP(megaiv_mem) + MCFG_CPU_PERIODIC_INT_DRIVER(mephisto_montec_state, nmi_line_pulse, (double)XTAL_4_9152MHz / (1 << 13)) + + MCFG_DEVICE_REMOVE("board") + MCFG_MEPHISTO_BUTTONS_BOARD_ADD("board") + MCFG_DEFAULT_LAYOUT(layout_mephisto_megaiv) +MACHINE_CONFIG_END + + +ROM_START(megaiv) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("megaiv.bin", 0x8000, 0x8000, CRC(dee355d2) SHA1(6bc79c0fb169020f017412f5f9696b9ecafbf99f)) +ROM_END + +ROM_START(monteciv) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("mciv.bin", 0x8000, 0x8000, CRC(c4887694) SHA1(7f482d2a40fcb3125266e7a5407da315b4f9b49c)) +ROM_END + +ROM_START(montec) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("mc.bin", 0x08000, 0x08000, CRC(05524da9) SHA1(bee2ffe09a27095f733584e0fb1203b95c23e17e)) +ROM_END + + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1987, montec, 0, 0, montec, montec, mephisto_montec_state, 0, "Hegener & Glaser", "Mephisto Monte Carlo", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1989, megaiv, 0, 0, megaiv, megaiv, mephisto_montec_state, 0, "Hegener & Glaser", "Mephisto Mega IV", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, monteciv, montec, 0, monteciv, montec, mephisto_montec_state, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV LE", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/polgar.cpp b/src/mame/drivers/polgar.cpp index 79032829f60..22982355367 100644 --- a/src/mame/drivers/polgar.cpp +++ b/src/mame/drivers/polgar.cpp @@ -19,6 +19,7 @@ #include "mephisto_lcd.lh" #include "mephisto_academy.lh" #include "mephisto_milano.lh" +#include "mephisto_modena.lh" class mephisto_polgar_state : public driver_device @@ -87,6 +88,7 @@ public: protected: virtual void machine_reset() override; + virtual void machine_start() override; private: required_device m_board; @@ -94,6 +96,31 @@ private: uint8_t m_led_latch; }; +class mephisto_modena_state : public mephisto_polgar_state +{ +public: + mephisto_modena_state(const machine_config &mconfig, device_type type, const char *tag) + : mephisto_polgar_state(mconfig, type, tag) + , m_board(*this, "board") + , m_beeper(*this, "beeper") + { } + + DECLARE_READ8_MEMBER(modena_input_r); + DECLARE_WRITE8_MEMBER(modena_digits_w); + DECLARE_WRITE8_MEMBER(modena_io_w); + DECLARE_WRITE8_MEMBER(modena_led_w); + +protected: + virtual void machine_reset() override; + virtual void machine_start() override; + +private: + required_device m_board; + required_device m_beeper; + uint8_t m_digits_idx; + uint8_t m_io_ctrl; +}; + class mephisto_academy_state : public mephisto_polgar_state { public: @@ -272,6 +299,51 @@ static ADDRESS_MAP_START(milano_mem, AS_PROGRAM, 8, mephisto_milano_state) ADDRESS_MAP_END +READ8_MEMBER(mephisto_modena_state::modena_input_r) +{ + if (m_board->mux_r(space, offset) == 0xff) + return m_keys->read(); + else + return m_board->input_r(space, offset) ^ 0xff; +} + +WRITE8_MEMBER(mephisto_modena_state::modena_led_w) +{ + m_board->mux_w(space, offset, data); + + if (m_io_ctrl & 0x0e) + { + for(int i=0; i<8; i++) + { + if (m_io_ctrl & 0x02) output().set_led_value(100 + i, BIT(data, i) ? 0 : 1); + if (m_io_ctrl & 0x04) output().set_led_value(0 + i, BIT(data, i) ? 0 : 1); + if (m_io_ctrl & 0x08) output().set_led_value(8 + i, BIT(data, i) ? 0 : 1); + } + } +} + +WRITE8_MEMBER(mephisto_modena_state::modena_io_w) +{ + m_io_ctrl = data; + m_beeper->set_state(BIT(data, 6)); +} + +WRITE8_MEMBER(mephisto_modena_state::modena_digits_w) +{ + output().set_digit_value(m_digits_idx, data ^ ((m_io_ctrl & 0x10) ? 0xff : 0x00)); + m_digits_idx = (m_digits_idx + 1) & 3; +} + +static ADDRESS_MAP_START(modena_mem, AS_PROGRAM, 8, mephisto_modena_state) + AM_RANGE( 0x0000, 0x1fff ) AM_RAM AM_SHARE("nvram") + AM_RANGE( 0x4000, 0x4000 ) AM_WRITE(modena_digits_w) + AM_RANGE( 0x5000, 0x5000 ) AM_WRITE(modena_led_w) + AM_RANGE( 0x6000, 0x6000 ) AM_WRITE(modena_io_w) + AM_RANGE( 0x7000, 0x7fff ) AM_READ(modena_input_r) + AM_RANGE( 0x8000, 0xffff ) AM_ROM +ADDRESS_MAP_END + + INTERRUPT_GEN_MEMBER(mephisto_academy_state::academy_irq) { if (m_enable_nmi) @@ -321,18 +393,6 @@ static ADDRESS_MAP_START(academy_mem, AS_PROGRAM, 8, mephisto_academy_state ) AM_RANGE( 0x4000, 0xffff ) AM_ROM ADDRESS_MAP_END - -static ADDRESS_MAP_START(monteciv_mem, AS_PROGRAM, 8, mephisto_polgar_state ) - AM_RANGE( 0x0000, 0x1fff ) AM_RAM - AM_RANGE( 0x8000, 0xffff ) AM_ROM -ADDRESS_MAP_END - -static ADDRESS_MAP_START(megaiv_mem, AS_PROGRAM, 8, mephisto_polgar_state ) - AM_RANGE( 0x0000, 0x1fff ) AM_RAM - AM_RANGE( 0x8000, 0xffff ) AM_ROM -ADDRESS_MAP_END - - static INPUT_PORTS_START( polgar ) PORT_START("KEY") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Trn") PORT_CODE(KEYCODE_T) @@ -345,26 +405,16 @@ static INPUT_PORTS_START( polgar ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) INPUT_PORTS_END -static INPUT_PORTS_START( monteciv ) - 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_START("KEY.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9 Book") PORT_CODE(KEYCODE_9) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0 Pos") PORT_CODE(KEYCODE_0) - 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) +static INPUT_PORTS_START( modena ) + PORT_START("KEY") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("BOOK") PORT_CODE(KEYCODE_B) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEMORY") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POSITION") PORT_CODE(KEYCODE_O) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEVEL") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FUNCTION") PORT_CODE(KEYCODE_F) + 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("CLEAR") PORT_CODE(KEYCODE_BACKSPACE) INPUT_PORTS_END void mephisto_risc_state::machine_start() @@ -394,11 +444,28 @@ void mephisto_risc_state::machine_reset() m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } +void mephisto_milano_state::machine_start() +{ + save_item(NAME(m_led_latch)); +} + void mephisto_milano_state::machine_reset() { m_led_latch = 0; } +void mephisto_modena_state::machine_start() +{ + save_item(NAME(m_digits_idx)); + save_item(NAME(m_io_ctrl)); +} + +void mephisto_modena_state::machine_reset() +{ + m_digits_idx = 0; + m_io_ctrl = 0; +} + void mephisto_academy_state::machine_reset() { m_enable_nmi = true; @@ -456,21 +523,21 @@ static MACHINE_CONFIG_DERIVED( academy, polgar ) MCFG_DEFAULT_LAYOUT(layout_mephisto_academy) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( monteciv ) - MCFG_CPU_ADD("maincpu", M65C02, XTAL_8MHz) - MCFG_CPU_PROGRAM_MAP( monteciv_mem ) - MCFG_CPU_PERIODIC_INT_DRIVER(mephisto_polgar_state, nmi_line_pulse, XTAL_4_9152MHz / (1 << 13)) +static MACHINE_CONFIG_DERIVED( modena, milano ) + MCFG_CPU_MODIFY("maincpu") // W65C02SP + MCFG_CPU_CLOCK(XTAL_4_194304Mhz) + MCFG_CPU_PROGRAM_MAP(modena_mem) + MCFG_CPU_PERIODIC_INT_DRIVER(mephisto_modena_state, nmi_line_pulse, (double)XTAL_4_194304Mhz / (1 << 13)) + MCFG_DEVICE_REMOVE("display") + MCFG_DEFAULT_LAYOUT(layout_mephisto_modena) + + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("beeper", BEEP, 3250) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( megaiv, monteciv ) - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_CLOCK( XTAL_4_9152MHz ) - MCFG_CPU_PROGRAM_MAP(megaiv_mem) -MACHINE_CONFIG_END ROM_START(polgar) ROM_REGION(0x10000, "maincpu", 0) @@ -530,16 +597,14 @@ ROM_START(nshort) ROM_LOAD("nshort.bin", 0x00000, 0x10000, CRC(4bd51e23) SHA1(3f55cc1c55dae8818b7e9384b6b8d43dc4f0a1af)) ROM_END - -ROM_START(megaiv) +ROM_START(modena) ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD("megaiv.bin", 0x8000, 0x8000, CRC(dee355d2) SHA1(6bc79c0fb169020f017412f5f9696b9ecafbf99f)) + ROM_SYSTEM_BIOS( 0, "v1", "v1" ) + ROMX_LOAD("modena 12aug1992.bin", 0x8000, 0x8000, CRC(dd7b4920) SHA1(4606b9d1f8a30180aabedfc0ed3cca0c96618524), ROM_BIOS(1)) + ROM_SYSTEM_BIOS( 1, "v1alt", "v1alt" ) + ROMX_LOAD("27C256 (457F).bin", 0x8000, 0x8000, CRC(2889082c) SHA1(b63f0d856793b4f87471837e2219ce2a42fe18de), ROM_BIOS(2)) ROM_END -ROM_START(monteciv) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD("mciv.bin", 0x8000, 0x8000, CRC(c4887694) SHA1(7f482d2a40fcb3125266e7a5407da315b4f9b49c)) -ROM_END /*************************************************************************** Game driver(s) @@ -555,5 +620,4 @@ CONS( 1994, mrisc2, mrisc, 0, mrisc, polgar, mephisto_risc_state, CONS( 1989, academy, 0, 0, academy, polgar, mephisto_academy_state, 0, "Hegener & Glaser", "Mephisto Academy", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1991, milano, 0, 0, milano, polgar, mephisto_milano_state, 0, "Hegener & Glaser", "Mephisto Milano", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1993, nshort, milano, 0, milano, polgar, mephisto_milano_state, 0, "Hegener & Glaser", "Mephisto Nigel Short", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, megaiv, 0, 0, megaiv, monteciv, mephisto_polgar_state, 0, "Hegener & Glaser", "Mephisto Mega IV", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -CONS( 1990, monteciv, 0, 0, monteciv, monteciv, mephisto_polgar_state, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV LE",MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +CONS( 1992, modena, 0, 0, modena, modena, mephisto_modena_state, 0, "Hegener & Glaser", "Mephisto Modena", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay index ba295c09b64..b29cb6289c4 100644 --- a/src/mame/layout/mephisto_academy.lay +++ b/src/mame/layout/mephisto_academy.lay @@ -22,39 +22,102 @@ - + - + - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -270,60 +333,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/src/mame/layout/mephisto_lcd.lay b/src/mame/layout/mephisto_lcd.lay index 9f0e7980c46..3652fdaac6b 100644 --- a/src/mame/layout/mephisto_lcd.lay +++ b/src/mame/layout/mephisto_lcd.lay @@ -50,10 +50,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -270,48 +322,10 @@ - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + diff --git a/src/mame/layout/mephisto_megaiv.lay b/src/mame/layout/mephisto_megaiv.lay new file mode 100644 index 00000000000..29fe5e2b1c4 --- /dev/null +++ b/src/mame/layout/mephisto_megaiv.lay @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/mephisto_milano.lay b/src/mame/layout/mephisto_milano.lay index 8906c9cf1d0..da24ec3f20e 100644 --- a/src/mame/layout/mephisto_milano.lay +++ b/src/mame/layout/mephisto_milano.lay @@ -30,30 +30,83 @@ - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -216,48 +269,10 @@ - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + diff --git a/src/mame/layout/mephisto_modena.lay b/src/mame/layout/mephisto_modena.lay new file mode 100644 index 00000000000..bceba757d25 --- /dev/null +++ b/src/mame/layout/mephisto_modena.lay @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/mephisto_montec.lay b/src/mame/layout/mephisto_montec.lay new file mode 100644 index 00000000000..5c557f7f471 --- /dev/null +++ b/src/mame/layout/mephisto_montec.lay @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 98324446dff..005c1448038 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20428,6 +20428,11 @@ mm50 // Mephisto 5.0 ROM mm5tk // Mephisto 5.1 ROM Turbo Kit Speed rebel5 // Mephisto 5 +@source:mephisto_montec.cpp +montec // 1987 Mephisto Monte Carlo +megaiv // 1989 Mephisto Mega IV +monteciv // 1990 Mephisto Monte Carlo IV LE + @source:mephistp.cpp mephistp // mephistp1 // @@ -31585,9 +31590,8 @@ mrisc // 1992 Mephisto RISC 1MB mrisc2 // 1994 Mephisto RISC II academy // 1989 Mephisto Academy milano // 1991 Mephisto Milano +modena // 1992 Mephisto Modena nshort // 1993 Mephisto Nigel Short -megaiv // 1989 Mephisto Mega IV -monteciv // 1990 Mephisto Monte Carlo IV LE @source:policetr.cpp policetr // (c) 1996 P&P Marketing