From e56f56d624e2ce4b5ef663eb9e78971a8ed1eee0 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 10 Apr 2021 17:20:56 +0200 Subject: added device for 1st version of mephisto display module --- scripts/target/mame/mess.lua | 2 + src/mame/drivers/fidel_csc.cpp | 2 +- src/mame/drivers/galivan.cpp | 4 +- src/mame/drivers/mephisto_academy.cpp | 18 +- src/mame/drivers/mephisto_berlin.cpp | 20 +- src/mame/drivers/mephisto_brikett.cpp | 74 ++------ src/mame/drivers/mephisto_glasgow.cpp | 14 +- src/mame/drivers/mephisto_milano.cpp | 24 +-- src/mame/drivers/mephisto_mm1.cpp | 125 +++---------- src/mame/drivers/mephisto_mm2.cpp | 303 ++++++++++++------------------- src/mame/drivers/mephisto_modena.cpp | 52 +++--- src/mame/drivers/mephisto_modular.cpp | 12 +- src/mame/drivers/mephisto_modular_tm.cpp | 4 +- src/mame/drivers/mephisto_mondial.cpp | 7 +- src/mame/drivers/mephisto_mondial2.cpp | 5 +- src/mame/drivers/mephisto_montec.cpp | 2 +- src/mame/drivers/mephisto_polgar.cpp | 34 ++-- src/mame/drivers/mephisto_risc.cpp | 28 +-- src/mame/layout/mephisto_1.lay | 23 ++- src/mame/layout/mephisto_3.lay | 25 ++- src/mame/layout/mephisto_academy.lay | 96 +++++----- src/mame/layout/mephisto_alm16.lay | 2 +- src/mame/layout/mephisto_alm32.lay | 2 +- src/mame/layout/mephisto_amsterdam.lay | 61 +++++-- src/mame/layout/mephisto_bup.lay | 98 ++++++---- src/mame/layout/mephisto_esb2.lay | 25 ++- src/mame/layout/mephisto_gen32.lay | 2 +- src/mame/layout/mephisto_glasgow.lay | 61 +++++-- src/mame/layout/mephisto_junior.lay | 23 ++- src/mame/layout/mephisto_mirage.lay | 103 ++++++----- src/mame/layout/mephisto_mm1.lay | 113 +++++++----- src/mame/layout/mephisto_mm2.lay | 98 ++++++---- src/mame/layout/mephisto_modena.lay | 71 +++++--- src/mame/layout/mephisto_modular_tm.lay | 2 +- src/mame/layout/mephisto_montec.lay | 104 +++++------ src/mame/layout/mephisto_polgar.lay | 2 +- src/mame/layout/mephisto_risc.lay | 2 +- src/mame/machine/mmboard.cpp | 3 + src/mame/machine/mmboard.h | 2 +- src/mame/video/mmdisplay1.cpp | 92 ++++++++++ src/mame/video/mmdisplay1.h | 45 +++++ src/mame/video/mmdisplay2.cpp | 25 ++- src/mame/video/mmdisplay2.h | 14 +- 43 files changed, 977 insertions(+), 847 deletions(-) create mode 100644 src/mame/video/mmdisplay1.cpp create mode 100644 src/mame/video/mmdisplay1.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 67a3de1f14c..1cb299e8302 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2551,6 +2551,8 @@ files { MAME_DIR .. "src/mame/drivers/mephisto_risc.cpp", MAME_DIR .. "src/mame/machine/mmboard.cpp", MAME_DIR .. "src/mame/machine/mmboard.h", + MAME_DIR .. "src/mame/video/mmdisplay1.cpp", + MAME_DIR .. "src/mame/video/mmdisplay1.h", MAME_DIR .. "src/mame/video/mmdisplay2.cpp", MAME_DIR .. "src/mame/video/mmdisplay2.h", } diff --git a/src/mame/drivers/fidel_csc.cpp b/src/mame/drivers/fidel_csc.cpp index 3c99441987c..4aa2a0519c4 100644 --- a/src/mame/drivers/fidel_csc.cpp +++ b/src/mame/drivers/fidel_csc.cpp @@ -823,7 +823,7 @@ ROM_END // YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS CONS( 1981, csc, 0, 0, csc, csc, csc_state, empty_init, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", u8"Elite Champion Challenger (Travemünde version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", u8"Elite Champion Challenger (Travemünde TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1983, super9cc, 0, 0, su9, su9, su9_state, empty_init, "Fidelity Electronics", "Super \"9\" Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp index f4f89f09b6a..0e5dcb70bcf 100644 --- a/src/mame/drivers/galivan.cpp +++ b/src/mame/drivers/galivan.cpp @@ -868,10 +868,10 @@ ROM_START( ninjemak ) ROM_LOAD( "ninjemak.pr1", 0x0000, 0x0100, CRC(8a62d4e4) SHA1(99ca4da01ea1b5585f6e3ebf162c3f988ab317e5) ) /* red */ ROM_LOAD( "ninjemak.pr2", 0x0100, 0x0100, CRC(2ccf976f) SHA1(b804ee761793697087fbe3372352f301a22feeab) ) /* green */ ROM_LOAD( "ninjemak.pr3", 0x0200, 0x0100, CRC(16b2a7a4) SHA1(53c410b439c8a835447f15f2ab250b363b3f7888) ) /* blue */ - ROM_LOAD( "yncp-2d.bin", 0x0300, 0x0100, BAD_DUMP CRC(23bade78) SHA1(7e2de5eb08d888f97830807b6dbe85d09bb3b7f8) ) /* sprite lookup table */ + ROM_LOAD( "yncp-2d.bin", 0x0300, 0x0100, CRC(23bade78) SHA1(7e2de5eb08d888f97830807b6dbe85d09bb3b7f8) ) /* sprite lookup table */ ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "yncp-7f.bin", 0x0000, 0x0100, BAD_DUMP CRC(262d0809) SHA1(a67281af02cef082023c0d7d57e3824aeef67450) ) /* sprite palette bank */ + ROM_LOAD( "yncp-7f.bin", 0x0000, 0x0100, CRC(262d0809) SHA1(a67281af02cef082023c0d7d57e3824aeef67450) ) /* sprite palette bank */ ROM_END ROM_START( youma ) diff --git a/src/mame/drivers/mephisto_academy.cpp b/src/mame/drivers/mephisto_academy.cpp index 4ffff24d3d5..41222786920 100644 --- a/src/mame/drivers/mephisto_academy.cpp +++ b/src/mame/drivers/mephisto_academy.cpp @@ -108,14 +108,14 @@ void academy_state::main_map(address_map &map) static INPUT_PORTS_START( academy ) PORT_START("KEY") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TRAIN") PORT_CODE(KEYCODE_T) - 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("MEM") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FCT") PORT_CODE(KEYCODE_F) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TRAIN") PORT_CODE(KEYCODE_T) + 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("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FCT") PORT_CODE(KEYCODE_F) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " INPUT_PORTS_END @@ -129,7 +129,7 @@ void academy_state::academy(machine_config &config) M65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &academy_state::main_map); - const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / (1 << 13)); + const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); m_maincpu->set_periodic_int(FUNC(academy_state::nmi_line_pulse), nmi_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/mephisto_berlin.cpp b/src/mame/drivers/mephisto_berlin.cpp index 5567e78800f..fcf8f29a648 100644 --- a/src/mame/drivers/mephisto_berlin.cpp +++ b/src/mame/drivers/mephisto_berlin.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Sandro Ronco +// copyright-holders:Sandro Ronco, hap /****************************************************************************** Mephisto Berlin 68000 / Berlin Professional 68020 @@ -41,16 +41,16 @@ public: void berlinp(machine_config &config); private: - u8 input_r(); + required_device m_maincpu; + required_device m_board; + required_device m_display; + required_ioport m_keys; void berlin_mem(address_map &map); void berlinp_mem(address_map &map); void nvram_map(address_map &map); - required_device m_maincpu; - required_device m_board; - required_device m_display; - required_ioport m_keys; + u8 input_r(); }; @@ -85,8 +85,8 @@ void berlin_state::berlin_mem(address_map &map) map(0x900000, 0x903fff).m("nvram_map", FUNC(address_map_bank_device::amap8)).umask16(0xff00); map(0xa00000, 0xa00000).r(FUNC(berlin_state::input_r)); map(0xb00000, 0xb00000).w(m_board, FUNC(mephisto_board_device::mux_w)); - map(0xc00000, 0xc00000).w(m_display, FUNC(mephisto_display_module2_device::latch_w)); - map(0xd00008, 0xd00008).w(m_display, FUNC(mephisto_display_module2_device::io_w)); + map(0xc00000, 0xc00000).w(m_display, FUNC(mephisto_display2_device::latch_w)); + map(0xd00008, 0xd00008).w(m_display, FUNC(mephisto_display2_device::io_w)); map(0xe00000, 0xe00000).w(m_board, FUNC(mephisto_board_device::led_w)); } @@ -97,8 +97,8 @@ void berlin_state::berlinp_mem(address_map &map) map(0x800000, 0x800000).r(FUNC(berlin_state::input_r)); map(0x900000, 0x900000).w(m_board, FUNC(mephisto_board_device::mux_w)); map(0xa00000, 0xa00000).w(m_board, FUNC(mephisto_board_device::led_w)); - map(0xb00000, 0xb00000).w(m_display, FUNC(mephisto_display_module2_device::io_w)); - map(0xc00000, 0xc00000).w(m_display, FUNC(mephisto_display_module2_device::latch_w)); + map(0xb00000, 0xb00000).w(m_display, FUNC(mephisto_display2_device::io_w)); + map(0xc00000, 0xc00000).w(m_display, FUNC(mephisto_display2_device::latch_w)); map(0xd00000, 0xd07fff).m("nvram_map", FUNC(address_map_bank_device::amap8)).umask32(0xff000000); } diff --git a/src/mame/drivers/mephisto_brikett.cpp b/src/mame/drivers/mephisto_brikett.cpp index 575b1e6ba9c..e398ab9e2cc 100644 --- a/src/mame/drivers/mephisto_brikett.cpp +++ b/src/mame/drivers/mephisto_brikett.cpp @@ -69,12 +69,15 @@ is completely different, based on a 68000. ******************************************************************************/ #include "emu.h" + #include "cpu/cosmac/cosmac.h" #include "machine/cdp1852.h" #include "machine/sensorboard.h" #include "machine/timer.h" #include "sound/dac.h" +#include "video/mmdisplay1.h" #include "video/pwm.h" + #include "speaker.h" // internal artwork @@ -95,6 +98,7 @@ public: m_extport(*this, "extport"), m_board(*this, "board"), m_display(*this, "display"), + m_led_pwm(*this, "led_pwm"), m_dac(*this, "dac"), m_speaker_off(*this, "speaker_off"), m_inputs(*this, "IN.%u", 0) @@ -119,7 +123,8 @@ private: required_device m_maincpu; optional_device m_extport; optional_device m_board; - required_device m_display; + required_device m_display; + optional_device m_led_pwm; required_device m_dac; required_device m_speaker_off; optional_ioport_array<4+2> m_inputs; @@ -138,8 +143,6 @@ private: // I/O handlers INTERRUPT_GEN_MEMBER(interrupt); DECLARE_READ_LINE_MEMBER(clear_r); - DECLARE_WRITE_LINE_MEMBER(q_w); - void lcd_w(u8 data); u8 input_r(offs_t offset); u8 sound_r(); @@ -148,34 +151,16 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); } - bool m_reset; - u8 m_lcd_mask; - u8 m_digit_idx; - u8 m_digit_data[4]; - - u8 m_esb_led; - u8 m_esb_row; - u8 m_esb_select; + bool m_reset = false; + u8 m_esb_led = 0; + u8 m_esb_row = 0; + u8 m_esb_select = 0; }; void brikett_state::machine_start() { - // zerofill - m_reset = false; - m_lcd_mask = 0; - m_digit_idx = 0; - memset(m_digit_data, 0, sizeof(m_digit_data)); - - m_esb_led = 0; - m_esb_row = 0; - m_esb_select = 0; - // register for savestates save_item(NAME(m_reset)); - save_item(NAME(m_lcd_mask)); - save_item(NAME(m_digit_idx)); - save_item(NAME(m_digit_data)); - save_item(NAME(m_esb_led)); save_item(NAME(m_esb_row)); save_item(NAME(m_esb_select)); @@ -184,8 +169,6 @@ void brikett_state::machine_start() void brikett_state::machine_reset() { m_reset = true; - m_digit_idx = 0; - set_cpu_freq(); } @@ -222,28 +205,6 @@ READ_LINE_MEMBER(brikett_state::clear_r) return ret; } -WRITE_LINE_MEMBER(brikett_state::q_w) -{ - // Q: LCD digit data mask - // also assume LCD update on rising edge - if (state && !m_lcd_mask) - { - for (int i = 0; i < 4; i++) - m_display->write_row(i, m_digit_data[i]); - m_display->update(); - } - - m_lcd_mask = state ? 0xff : 0; -} - -void brikett_state::lcd_w(u8 data) -{ - // d0-d7: write/shift LCD digit (4*CD4015) - // note: last digit "dp" is the colon in the middle - m_digit_data[m_digit_idx] = data ^ m_lcd_mask; - m_digit_idx = (m_digit_idx + 1) & 3; -} - u8 brikett_state::sound_r() { // port 1 read enables the speaker @@ -274,7 +235,7 @@ void brikett_state::esb_w(u8 data) if (!m_inputs[5].read_safe(0)) { // chessboard disabled - m_display->matrix_partial(4, 8, 0, 0); + m_led_pwm->clear(); return; } @@ -296,7 +257,7 @@ void brikett_state::esb_w(u8 data) m_esb_row = data; // update chessboard leds - m_display->matrix_partial(4, 8, ~m_esb_row, m_esb_led); + m_led_pwm->matrix(~m_esb_row, m_esb_led); } READ_LINE_MEMBER(brikett_state::esb_r) @@ -318,7 +279,7 @@ void brikett_state::mephisto_map(address_map &map) { map(0x0000, 0x17ff).rom(); map(0xf400, 0xf7ff).ram(); - map(0xfb00, 0xfb00).mirror(0x00ff).w(FUNC(brikett_state::lcd_w)); + map(0xfb00, 0xfb00).mirror(0x00ff).w(m_display, FUNC(mephisto_display1_device::data_w)); map(0xfff0, 0xffff).r(FUNC(brikett_state::input_r)); } @@ -459,14 +420,13 @@ void brikett_state::mephistoj(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephistoj_map); m_maincpu->set_addrmap(AS_IO, &brikett_state::mephistoj_io); m_maincpu->clear_cb().set(FUNC(brikett_state::clear_r)); - m_maincpu->q_cb().set(FUNC(brikett_state::q_w)).invert(); + m_maincpu->q_cb().set(m_display, FUNC(mephisto_display1_device::strobe_w)).invert(); const attotime irq_period = attotime::from_hz(4.194304_MHz_XTAL / 0x10000); // through SAJ300T m_maincpu->set_periodic_int(FUNC(brikett_state::interrupt), irq_period); /* video hardware */ - PWM_DISPLAY(config, m_display).set_size(4, 8); - m_display->set_segmask(0xf, 0x7f); + MEPHISTO_DISPLAY_MODULE1(config, m_display); // internal config.set_default_layout(layout_mephisto_junior); /* sound hardware */ @@ -519,7 +479,7 @@ void brikett_state::mephisto2e(machine_config &config) m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(250)); - m_display->set_size(4+8, 8); + PWM_DISPLAY(config, m_led_pwm).set_size(8, 8); config.set_default_layout(layout_mephisto_esb2); } @@ -530,7 +490,7 @@ void brikett_state::mephisto3(machine_config &config) /* basic machine hardware */ m_maincpu->set_clock(6.144_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephisto3_map); - m_maincpu->q_cb().set(FUNC(brikett_state::q_w)); + m_maincpu->q_cb().set(m_display, FUNC(mephisto_display1_device::strobe_w)); config.set_default_layout(layout_mephisto_3); } diff --git a/src/mame/drivers/mephisto_glasgow.cpp b/src/mame/drivers/mephisto_glasgow.cpp index 6fd353da8a7..794fa4da8db 100644 --- a/src/mame/drivers/mephisto_glasgow.cpp +++ b/src/mame/drivers/mephisto_glasgow.cpp @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Dirk Verwiebe, Cowering /*************************************************************************** + Mephisto Glasgow 3 S chess computer Dirk V. sp_rinter@gmx.de @@ -35,7 +36,8 @@ How to play (quick guide) TODO: - add waitstates(applies to glasgow, amsterd, others?), CPU is 12MHz but with DTACK waitstates for slow EPROMs, effective speed is less than 10MHz -- LCD module is 8.8.:8.8 like mephisto_brikett/mm1 (so, add ":" in the middle) +- use mmdisplay1 device +- split driver (glasgow/amsterdam) ***************************************************************************/ @@ -90,7 +92,6 @@ protected: u8 m_key_select; }; - class amsterd_state : public glasgow_state { public: @@ -121,7 +122,7 @@ void glasgow_state::glasgow_lcd_w(u8 data) if (m_led7 == 0) m_digits[m_lcd_shift_counter] = data; - m_lcd_shift_counter--; + m_lcd_shift_counter++; m_lcd_shift_counter &= 3; } @@ -161,7 +162,7 @@ void amsterd_state::write_lcd(u8 data) if (m_lcd_shift_counter & 4) m_digits[m_lcd_shift_counter & 3] = data; - m_lcd_shift_counter--; + m_lcd_shift_counter++; m_lcd_shift_counter &= 7; } @@ -200,10 +201,9 @@ void glasgow_state::machine_start() save_item(NAME(m_key_select)); } - void glasgow_state::machine_reset() { - m_lcd_shift_counter = 3; + m_lcd_shift_counter = 0; m_key_select = 0; m_led7 = 0; } @@ -230,8 +230,8 @@ void amsterd_state::amsterd_mem(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x800002, 0x800002).w(FUNC(amsterd_state::write_lcd)); - map(0x800008, 0x800008).w(FUNC(amsterd_state::write_lcd_flag)); map(0x800004, 0x800004).w(FUNC(amsterd_state::write_beeper)); + map(0x800008, 0x800008).w(FUNC(amsterd_state::write_lcd_flag)); map(0x800010, 0x800010).w(FUNC(amsterd_state::write_board)); map(0x800020, 0x800020).r("board", FUNC(mephisto_board_device::input_r)); map(0x800040, 0x800040).r(FUNC(amsterd_state::read_newkeys)); diff --git a/src/mame/drivers/mephisto_milano.cpp b/src/mame/drivers/mephisto_milano.cpp index ea5851f9f0a..c1385fa3d47 100644 --- a/src/mame/drivers/mephisto_milano.cpp +++ b/src/mame/drivers/mephisto_milano.cpp @@ -50,7 +50,7 @@ protected: private: required_device m_maincpu; required_device m_board; - required_device m_display; + required_device m_display; required_device m_led_pwm; required_ioport m_keys; @@ -125,7 +125,7 @@ u8 milano_state::keys_r(offs_t offset) void milano_state::milano_mem(address_map &map) { map(0x0000, 0x1fbf).ram().share("nvram"); - map(0x1fc0, 0x1fc0).w(m_display, FUNC(mephisto_display_module2_device::latch_w)); + map(0x1fc0, 0x1fc0).w(m_display, FUNC(mephisto_display2_device::latch_w)); map(0x1fd0, 0x1fd0).w(FUNC(milano_state::board_w)); map(0x1fe0, 0x1fe0).r(FUNC(milano_state::board_r)); map(0x1fe8, 0x1fef).w("outlatch", FUNC(hc259_device::write_d7)).nopr(); @@ -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_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) // " INPUT_PORTS_END @@ -163,7 +163,9 @@ void milano_state::milano(machine_config &config) /* basic machine hardware */ R65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &milano_state::milano_mem); - m_maincpu->set_periodic_int(FUNC(milano_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13))); + + const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(milano_state::nmi_line_pulse), nmi_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/mephisto_mm1.cpp b/src/mame/drivers/mephisto_mm1.cpp index ff23d7891c9..7464f87d0c3 100644 --- a/src/mame/drivers/mephisto_mm1.cpp +++ b/src/mame/drivers/mephisto_mm1.cpp @@ -16,7 +16,9 @@ Hardware notes: - 32KB ROM (2*D27128, or HN613256P) - 4KB RAM (2*HM6116LP-3) - CDP1853CE, CD4011BE, 3*40373BP, 4556BE -- modular slot, 18-button keypad, beeper +- Mephisto modular display module +- Mephisto modular chessboard +- 18-button keypad, beeper It supports the HG 170 opening book module. LCD module is assumed to be same as MM II and others. @@ -38,12 +40,12 @@ TODO: #include "emu.h" -#include "cpu/cosmac/cosmac.h" -#include "machine/sensorboard.h" -#include "sound/dac.h" -#include "video/pwm.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" +#include "cpu/cosmac/cosmac.h" +#include "machine/mmboard.h" +#include "sound/dac.h" +#include "video/mmdisplay1.h" #include "softlist.h" #include "speaker.h" @@ -62,7 +64,6 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_board(*this, "board"), - m_display(*this, "display"), m_dac(*this, "dac"), m_inputs(*this, "IN.%u", 0) { } @@ -80,8 +81,7 @@ protected: private: // devices/pointers required_device m_maincpu; - required_device m_board; - required_device m_display; + required_device m_board; required_device m_dac; required_ioport_array<8> m_inputs; @@ -94,53 +94,25 @@ private: INTERRUPT_GEN_MEMBER(interrupt); void update_display(); DECLARE_READ_LINE_MEMBER(clear_r); - DECLARE_WRITE_LINE_MEMBER(q_w); void sound_w(u8 data); void unknown_w(u8 data); - void lcd_w(u8 data); - void board_w(u8 data); - void led_w(u8 data); void keypad_w(u8 data); - u8 board_r(); template DECLARE_READ_LINE_MEMBER(keypad_r); - bool m_reset; - u8 m_lcd_mask; - u8 m_digit_idx; - u8 m_digit_data[4]; - - u8 m_kp_mux; - u8 m_cb_mux; - u8 m_led_data; + bool m_reset = false; + u8 m_kp_mux = 0; }; void mm1_state::machine_start() { - // zerofill - m_reset = false; - m_lcd_mask = 0; - m_digit_idx = 0; - memset(m_digit_data, 0, sizeof(m_digit_data)); - - m_kp_mux = 0; - m_cb_mux = 0; - m_led_data = 0; - // register for savestates save_item(NAME(m_reset)); - save_item(NAME(m_lcd_mask)); - save_item(NAME(m_digit_idx)); - save_item(NAME(m_digit_data)); - save_item(NAME(m_kp_mux)); - save_item(NAME(m_cb_mux)); - save_item(NAME(m_led_data)); } void mm1_state::machine_reset() { m_reset = true; - m_digit_idx = 0; } @@ -162,28 +134,6 @@ READ_LINE_MEMBER(mm1_state::clear_r) return ret; } -WRITE_LINE_MEMBER(mm1_state::q_w) -{ - // Q: LCD digit data mask - // also assume LCD update on rising edge - if (state && !m_lcd_mask) - { - for (int i = 0; i < 4; i++) - m_display->write_row(i, m_digit_data[i]); - m_display->update(); - } - - m_lcd_mask = state ? 0xff : 0; -} - -void mm1_state::lcd_w(u8 data) -{ - // d0-d7: write/shift LCD digit (4*CD4015) - // note: last digit "dp" is the colon in the middle - m_digit_data[m_digit_idx] = data ^ m_lcd_mask; - m_digit_idx = (m_digit_idx + 1) & 3; -} - void mm1_state::sound_w(u8 data) { // d0: speaker out @@ -195,38 +145,6 @@ void mm1_state::unknown_w(u8 data) // mmirage: unused serial device? } -void mm1_state::update_display() -{ - // 64 chessboard leds - m_display->matrix_partial(4, 8, m_cb_mux, m_led_data); -} - -void mm1_state::led_w(u8 data) -{ - // d0-d7: chessboard led data - m_led_data = data; - update_display(); -} - -void mm1_state::board_w(u8 data) -{ - // d0-d7: chessboard input/led mux - m_cb_mux = ~data; - update_display(); -} - -u8 mm1_state::board_r() -{ - u8 data = 0; - - // d0-d7: multiplexed inputs (chessboard) - for (int i = 0; i < 8; i++) - if (BIT(m_cb_mux, i)) - data |= m_board->read_rank(i); - - return ~data; -} - void mm1_state::keypad_w(u8 data) { // d0-d7: keypad input mux @@ -269,10 +187,10 @@ void mm1_state::mm1_io(address_map &map) { map(0x01, 0x01).w(FUNC(mm1_state::sound_w)); map(0x02, 0x02).w(FUNC(mm1_state::keypad_w)); - map(0x03, 0x03).r(FUNC(mm1_state::board_r)); - map(0x04, 0x04).w(FUNC(mm1_state::board_w)); - map(0x05, 0x05).w(FUNC(mm1_state::led_w)); - map(0x06, 0x06).w(FUNC(mm1_state::lcd_w)); + map(0x03, 0x03).r(m_board, FUNC(mephisto_board_device::input_r)); + map(0x04, 0x04).w(m_board, FUNC(mephisto_board_device::mux_w)); + map(0x05, 0x05).w(m_board, FUNC(mephisto_board_device::led_w)); + map(0x06, 0x06).w("display", FUNC(mephisto_display1_device::data_w)); map(0x07, 0x07).w(FUNC(mm1_state::unknown_w)); } @@ -357,7 +275,7 @@ INPUT_PORTS_END INPUT_CHANGED_MEMBER(mm1_state::mirage_switch_sensor_type) { - m_board->set_type(newval ? sensorboard_device::MAGNETS : sensorboard_device::BUTTONS); + m_board->get()->set_type(newval ? sensorboard_device::MAGNETS : sensorboard_device::BUTTONS); } @@ -373,7 +291,7 @@ void mm1_state::mirage(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mm1_state::mirage_map); m_maincpu->set_addrmap(AS_IO, &mm1_state::mm1_io); m_maincpu->clear_cb().set(FUNC(mm1_state::clear_r)); - m_maincpu->q_cb().set(FUNC(mm1_state::q_w)).invert(); + m_maincpu->q_cb().set("display", FUNC(mephisto_display1_device::strobe_w)).invert(); m_maincpu->ef3_cb().set(FUNC(mm1_state::keypad_r<0>)); m_maincpu->ef4_cb().set(FUNC(mm1_state::keypad_r<1>)); @@ -381,13 +299,11 @@ void mm1_state::mirage(machine_config &config) const attotime irq_period = attotime::from_ticks(8 * 32 * 0x71, 8_MHz_XTAL); // LDC = 0x71 m_maincpu->set_periodic_int(FUNC(mm1_state::interrupt), irq_period); - SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); - m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + MEPHISTO_BUTTONS_BOARD(config, m_board); // see mirage_switch_sensor_type m_board->set_delay(attotime::from_msec(200)); /* video hardware */ - PWM_DISPLAY(config, m_display).set_size(4+8, 8); - m_display->set_segmask(0xf, 0x7f); + MEPHISTO_DISPLAY_MODULE1(config, "display"); config.set_default_layout(layout_mephisto_mirage); /* sound hardware */ @@ -401,13 +317,14 @@ void mm1_state::mm1(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &mm1_state::mm1_map); - m_maincpu->q_cb().set(FUNC(mm1_state::q_w)); + m_maincpu->q_cb().set("display", FUNC(mephisto_display1_device::strobe_w)); // wrong! uses internal timer interrupt const attotime irq_period = attotime::from_ticks(8 * 32 * 0xfa, 8_MHz_XTAL); // LDC = 0xFA m_maincpu->set_periodic_int(FUNC(mm1_state::interrupt), irq_period); - m_board->set_type(sensorboard_device::MAGNETS); + MEPHISTO_SENSORS_BOARD(config.replace(), m_board); + m_board->set_delay(attotime::from_msec(200)); config.set_default_layout(layout_mephisto_mm1); diff --git a/src/mame/drivers/mephisto_mm2.cpp b/src/mame/drivers/mephisto_mm2.cpp index 89409b9a5c9..d6f5768d7d1 100644 --- a/src/mame/drivers/mephisto_mm2.cpp +++ b/src/mame/drivers/mephisto_mm2.cpp @@ -1,16 +1,17 @@ // license:BSD-3-Clause -// copyright-holders:Dirk Verwiebe, Cowering +// copyright-holders:Dirk Verwiebe, Cowering, hap /****************************************************************************** - Mephisto 4 + 5 Chess Computer - 2007 Dirk V. -CPU 65C02 P4 (also seen: R65C02P3, G65SC02P-4) -Clock 4.9152 MHz -NMI CLK 600 Hz +Mephisto 4 + 5 Chess Computer +2007 Dirk V. + +CPU: G65SC02P-4 or R65C02P3 +Clock: 4.9152 MHz +NMI CLK: 600 Hz IRQ Line is set to VSS -8 KByte SRAM Sony CXK5864-15l +8 KByte SRAM Sony CXK5864-15L -1-CD74HC4060E 14 Bit Counter +1-CD74HC4060E: 14 Bit Counter 1-CD74HC166E 1-CD74HC251E 1-SN74HC138N TI @@ -25,7 +26,7 @@ PCB label HGS 10 122 01 1-CD4011 4-CD4015 -$0000-$1fff S-RAM +$0000-$1fff S-RAM $2000 LCD 4 Byte Shift Register writeonly right to left every 2nd char xor'd by $FF @@ -73,19 +74,18 @@ MM VI (Saitek, 1994) is on different hardware, H8 CPU. TODO: - need to emulate TurboKit properly, also for mm5p (it's not as simple as a CPU overclock plus ROM patch) -- LCD module is 8.8.:8.8 like mephisto_brikett/mm1 (so, add ":" in the middle) ******************************************************************************/ #include "emu.h" -#include "cpu/m6502/m65c02.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" +#include "cpu/m6502/m65sc02.h" #include "machine/74259.h" #include "machine/mmboard.h" -#include "machine/timer.h" #include "sound/dac.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" +#include "video/mmdisplay1.h" #include "softlist.h" #include "speaker.h" @@ -104,10 +104,9 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_outlatch(*this, "outlatch") + , m_display(*this, "display") , m_dac(*this, "dac") - , m_key1(*this, "KEY1_%u", 0U) - , m_key2(*this, "KEY2_%u", 0U) - , m_digits(*this, "digit%u", 0U) + , m_keys(*this, "KEY.%u", 0) { } DECLARE_INPUT_CHANGED_MEMBER(reset_button); @@ -120,104 +119,64 @@ public: void mm2(machine_config &config); void bup(machine_config &config); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: - required_device m_maincpu; + required_device m_maincpu; required_device m_outlatch; + required_device m_display; required_device m_dac; - required_ioport_array<8> m_key1; - required_ioport_array<8> m_key2; - output_finder<4> m_digits; - - void write_lcd(u8 data); - void mephisto_nmi_w(u8 data); - u8 read_keys(offs_t offset); - DECLARE_WRITE_LINE_MEMBER(write_led7); - u8 m_lcd_shift_counter; - u8 m_led7; - u8 m_allowNMI; - virtual void machine_start() override; - virtual void machine_reset() override; - TIMER_DEVICE_CALLBACK_MEMBER(update_nmi); - TIMER_DEVICE_CALLBACK_MEMBER(update_nmi_r5); + required_ioport_array<2> m_keys; void bup_mem(address_map &map); void mm2_mem(address_map &map); void mm4_mem(address_map &map); void mm5p_mem(address_map &map); void rebel5_mem(address_map &map); + + void lcd_irqack_w(u8 data); + u8 keys_r(offs_t offset); }; void mm2_state::machine_start() { - m_digits.resolve(); - - save_item(NAME(m_lcd_shift_counter)); - save_item(NAME(m_led7)); - save_item(NAME(m_allowNMI)); } void mm2_state::machine_reset() { - m_lcd_shift_counter = 3; - m_allowNMI = 1; - m_led7 = 0xff; + m_display->reset(); + m_maincpu->set_input_line(0, CLEAR_LINE); } - - -/****************************************************************************** - I/O -******************************************************************************/ - -TIMER_DEVICE_CALLBACK_MEMBER(mm2_state::update_nmi) +INPUT_CHANGED_MEMBER(mm2_state::reset_button) { - if (m_allowNMI) + // RES buttons in serial tied to CPU RESET + if (ioport("RESET")->read() == 3) { - m_allowNMI = 0; - m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); + m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); + machine_reset(); } } -TIMER_DEVICE_CALLBACK_MEMBER(mm2_state::update_nmi_r5) -{ - m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - -void mm2_state::write_lcd(u8 data) -{ - if (m_led7 == 0) - m_digits[m_lcd_shift_counter] = data; // 0x109 MM IV // 0x040 MM V - m_lcd_shift_counter--; - m_lcd_shift_counter &= 3; - m_maincpu->set_input_line(0, CLEAR_LINE); -} - -void mm2_state::mephisto_nmi_w(u8 data) -{ - m_allowNMI = 1; -} +/****************************************************************************** + I/O +******************************************************************************/ -u8 mm2_state::read_keys(offs_t offset) +void mm2_state::lcd_irqack_w(u8 data) { - u8 data = 0; - - if (!m_outlatch->q7_r()) - { - data = m_key1[offset]->read(); - } - else - { - data = m_key2[offset]->read(); - } + m_display->data_w(data); - return data | 0x7f; + // writing to 0x2800 also clears irq + m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE_LINE_MEMBER(mm2_state::write_led7) +u8 mm2_state::keys_r(offs_t offset) { - m_led7 = state ? 0x00 : 0xff; + return ~(BIT(m_keys[m_outlatch->q7_r()]->read(), offset) << 7); } @@ -230,9 +189,9 @@ void mm2_state::bup_mem(address_map &map) { map(0x0000, 0x0fff).ram(); map(0x1000, 0x1007).w("outlatch", FUNC(hc259_device::write_d7)); - map(0x1800, 0x1807).r(FUNC(mm2_state::read_keys)); + map(0x1800, 0x1807).r(FUNC(mm2_state::keys_r)); map(0x2000, 0x2000).r("board", FUNC(mephisto_board_device::input_r)); - map(0x2800, 0x2800).w(FUNC(mm2_state::write_lcd)); + map(0x2800, 0x2800).w(FUNC(mm2_state::lcd_irqack_w)); map(0x3000, 0x3000).w("board", FUNC(mephisto_board_device::led_w)); map(0x3800, 0x3800).w("board", FUNC(mephisto_board_device::mux_w)); map(0x8000, 0xffff).rom(); @@ -249,8 +208,8 @@ 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(0x3000, 0x3007).r(FUNC(mm2_state::read_keys)); - map(0x5000, 0x5000).w(FUNC(mm2_state::write_lcd)); + map(0x3000, 0x3007).r(FUNC(mm2_state::keys_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)); map(0x8000, 0xffff).rom(); @@ -259,13 +218,13 @@ void mm2_state::rebel5_mem(address_map &map) void mm2_state::mm5p_mem(address_map &map) { map(0x0000, 0x1fff).ram(); - map(0x2000, 0x2000).w(FUNC(mm2_state::write_lcd)); + 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(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w)); - map(0x2c00, 0x2c07).r(FUNC(mm2_state::read_keys)); + map(0x2c00, 0x2c07).r(FUNC(mm2_state::keys_r)); map(0x3000, 0x3000).r("board", FUNC(mephisto_board_device::input_r)); map(0x3400, 0x3407).w("outlatch", FUNC(hc259_device::write_d7)).nopr(); - map(0x3800, 0x3800).w(FUNC(mm2_state::mephisto_nmi_w)); + map(0x3800, 0x3800).nopw(); // N/C map(0x4000, 0xffff).rom(); } @@ -281,40 +240,26 @@ void mm2_state::mm4_mem(address_map &map) Input Ports ******************************************************************************/ -static INPUT_PORTS_START( mephisto ) - PORT_START("KEY1_0") //Port $2c00 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) - PORT_START("KEY1_1") //Port $2c01 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) - PORT_START("KEY1_2") //Port $2c02 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) - PORT_START("KEY1_3") //Port $2c03 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) - PORT_START("KEY1_4") //Port $2c04 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_START("KEY1_5") //Port $2c05 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) - PORT_START("KEY1_6") //Port $2c06 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) - PORT_START("KEY1_7") //Port $2c07 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) - - PORT_START("KEY2_0") //Port $2c08 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E / 5 / Queen") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) - PORT_START("KEY2_1") //Port $2c09 - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F / 6 / King") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) - PORT_START("KEY2_2") //Port $2c0a - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("G / 7") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) - PORT_START("KEY2_3") //Port $2c0b - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A / 1 / Pawn") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) - PORT_START("KEY2_4") //Port $2c0c - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) - PORT_START("KEY2_5") //Port $2c0d - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B / 2 / Knight") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) - PORT_START("KEY2_6") //Port $2c0e - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C / 3 / Bishop") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) - PORT_START("KEY2_7") //Port $2c0f - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D / 4 / Rook") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) +static INPUT_PORTS_START( mm2 ) + PORT_START("KEY.0") + 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("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("LEV") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) + + PORT_START("KEY.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E / 5 / Queen") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F / 6 / King") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G / 7") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A / 1 / Pawn") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B / 2 / Knight") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C / 3 / Bishop") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D / 4 / Rook") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_START("RESET") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0) @@ -322,55 +267,31 @@ static INPUT_PORTS_START( mephisto ) INPUT_PORTS_END static INPUT_PORTS_START( bup ) - PORT_START("KEY1_0") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1 / Pawn") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) - PORT_START("KEY1_1") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2 / Knight") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) - PORT_START("KEY1_2") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 / Bishop") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) - PORT_START("KEY1_3") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4 / Rook") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) - PORT_START("KEY1_4") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 / Queen") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) - PORT_START("KEY1_5") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 / King") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) - PORT_START("KEY1_6") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("White") PORT_CODE(KEYCODE_W) - PORT_START("KEY1_7") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Black") PORT_CODE(KEYCODE_B) - - PORT_START("KEY2_0") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) - PORT_START("KEY2_1") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) - PORT_START("KEY2_2") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("BEST") PORT_CODE(KEYCODE_S) - PORT_START("KEY2_3") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) - PORT_START("KEY2_4") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MON") PORT_CODE(KEYCODE_N) - PORT_START("KEY2_5") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) - PORT_START("KEY2_6") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_START("KEY2_7") - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_START("KEY.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1 / Pawn") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2 / Knight") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3 / Bishop") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4 / Rook") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5 / Queen") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6 / King") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("White") PORT_CODE(KEYCODE_W) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Black") PORT_CODE(KEYCODE_B) + + PORT_START("KEY.1") + 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("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("BEST") PORT_CODE(KEYCODE_S) + 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("MON") PORT_CODE(KEYCODE_N) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) PORT_START("RESET") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 2") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(mm2_state::reset_button) -{ - // RES buttons in serial tied to CPU RESET - if (ioport("RESET")->read() == 3) - { - m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); - machine_reset(); - } -} - /****************************************************************************** @@ -380,10 +301,11 @@ INPUT_CHANGED_MEMBER(mm2_state::reset_button) void mm2_state::rebel5(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, 9.8304_MHz_XTAL / 2); + M65SC02(config, m_maincpu, 9.8304_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::rebel5_mem); - TIMER(config, "nmi_timer").configure_periodic(FUNC(mm2_state::update_nmi_r5), attotime::from_hz(600)); + const attotime nmi_period = attotime::from_hz(9.8304_MHz_XTAL / 2 / 0x2000); // 600Hz + m_maincpu->set_periodic_int(FUNC(mm2_state::nmi_line_pulse), nmi_period); HC259(config, m_outlatch); m_outlatch->q_out_cb<0>().set_output("led100"); @@ -393,9 +315,10 @@ void mm2_state::rebel5(machine_config &config) m_outlatch->q_out_cb<4>().set_output("led104"); m_outlatch->q_out_cb<5>().set_output("led105"); m_outlatch->q_out_cb<6>().set(m_dac, FUNC(dac_bit_interface::write)); - m_outlatch->q_out_cb<7>().set(FUNC(mm2_state::write_led7)); + m_outlatch->q_out_cb<7>().set(m_display, FUNC(mephisto_display1_device::strobe_w)).invert(); MEPHISTO_SENSORS_BOARD(config, "board"); + MEPHISTO_DISPLAY_MODULE1(config, m_display); config.set_default_layout(layout_mephisto_mm2); /* sound hardware */ @@ -411,7 +334,8 @@ void mm2_state::mm5p(machine_config &config) m_maincpu->set_clock(4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::mm5p_mem); - TIMER(config.replace(), "nmi_timer").configure_periodic(FUNC(mm2_state::update_nmi), attotime::from_hz(600)); + const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); // 600Hz + m_maincpu->set_periodic_int(FUNC(mm2_state::nmi_line_pulse), nmi_period); } void mm2_state::mm4(machine_config &config) @@ -445,11 +369,10 @@ void mm2_state::bup(machine_config &config) m_maincpu->set_clock(7.3728_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::bup_mem); - config.device_remove("nmi_timer"); const attotime irq_period = attotime::from_hz(7.3728_MHz_XTAL / 2 / 0x2000); // 450Hz from 4020 Q13 m_maincpu->set_periodic_int(FUNC(mm2_state::irq0_line_assert), irq_period); - m_outlatch->q_out_cb<7>().set(FUNC(mm2_state::write_led7)).invert(); + m_outlatch->q_out_cb<7>().set(m_display, FUNC(mephisto_display1_device::strobe_w)); config.set_default_layout(layout_mephisto_bup); } @@ -571,24 +494,24 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1984, mm2, 0, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 1, v4.00 1 EPROM)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1984, mm2a, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 2, v4.00 2 EPROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1984, mm2b, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 3, v3.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1984, mm2c, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1984, mm2d, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ +CONS( 1984, mm2, 0, 0, mm2, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 1, v4.00 1 EPROM)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, mm2a, mm2, 0, mm2, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 2, v4.00 2 EPROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, mm2b, mm2, 0, mm2, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 3, v3.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, mm2c, mm2, 0, mm2, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, mm2d, mm2, 0, mm2, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1985, bup, 0, 0, bup, bup, mm2_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -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( 1985, bup, 0, 0, bup, bup, mm2_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +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, mephisto, 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, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (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( 1987, mm4, 0, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, mm4a, mm4, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, mm4b, mm4, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mm2_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +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 ) +CONS( 1987, mm4b, mm4, 0, mm4, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, mm4tk, mm4, 0, mm4tk, mm2, mm2_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) -CONS( 1990, mm5, 0, 0, mm5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, mm5a, mm5, 0, mm5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, mm5p, mm5, 0, mm5p, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1989, mm5p, mm5, 0, mm5p, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (Portorose TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) diff --git a/src/mame/drivers/mephisto_modena.cpp b/src/mame/drivers/mephisto_modena.cpp index 2d2fc59804e..c073b7bb31a 100644 --- a/src/mame/drivers/mephisto_modena.cpp +++ b/src/mame/drivers/mephisto_modena.cpp @@ -12,7 +12,7 @@ Hardware notes: - PCB label: MODENA-A-2 - W65C02SP or RP65C02G @ 4.19MHz - 8KB RAM (battery-backed), 32KB ROM -- 8*8 chessboard buttons, 16+6 leds, piezo +- 8*8 chessboard buttons, 16+6 leds, 7seg lcd, piezo **************************************************************************************************/ @@ -24,6 +24,7 @@ Hardware notes: #include "machine/sensorboard.h" #include "machine/timer.h" #include "sound/dac.h" +#include "video/mmdisplay1.h" #include "video/pwm.h" #include "speaker.h" @@ -42,9 +43,9 @@ public: , m_maincpu(*this, "maincpu") , m_board(*this, "board") , m_display(*this, "display") + , m_led_pwm(*this, "led_pwm") , m_dac(*this, "dac") , m_keys(*this, "KEY") - , m_digits(*this, "digit%u", 0U) { } void modena(machine_config &config); @@ -55,30 +56,25 @@ protected: private: required_device m_maincpu; required_device m_board; - required_device m_display; + required_device m_display; + required_device m_led_pwm; required_device m_dac; required_ioport m_keys; - output_finder<4> m_digits; void modena_mem(address_map &map); u8 input_r(); - void digits_w(u8 data); void io_w(u8 data); void led_w(u8 data); void update_display(); u8 m_board_mux = 0; - u8 m_digits_idx = 0; u8 m_io_ctrl = 0; }; void modena_state::machine_start() { - m_digits.resolve(); - save_item(NAME(m_board_mux)); - save_item(NAME(m_digits_idx)); save_item(NAME(m_io_ctrl)); } @@ -90,7 +86,7 @@ void modena_state::machine_start() void modena_state::update_display() { - m_display->matrix(m_io_ctrl >> 1 & 7, m_board_mux); + m_led_pwm->matrix(m_io_ctrl >> 1 & 7, m_board_mux); } u8 modena_state::input_r() @@ -120,17 +116,14 @@ void modena_state::io_w(u8 data) { // d0: button select // d1-d3: led select - // d4: lcd polarity - // d6: speaker out m_io_ctrl = data; update_display(); - m_dac->write(BIT(data, 6)); -} -void modena_state::digits_w(u8 data) -{ - m_digits[m_digits_idx] = data ^ ((m_io_ctrl & 0x10) ? 0xff : 0x00); - m_digits_idx = (m_digits_idx + 1) & 3; + // d4: lcd strobe + m_display->strobe_w(BIT(data, 4)); + + // d6: speaker out + m_dac->write(BIT(data, 6)); } @@ -142,7 +135,7 @@ void modena_state::digits_w(u8 data) void modena_state::modena_mem(address_map &map) { map(0x0000, 0x1fff).ram().share("nvram"); - map(0x4000, 0x4000).w(FUNC(modena_state::digits_w)); + map(0x4000, 0x4000).w(m_display, FUNC(mephisto_display1_device::data_w)); map(0x5000, 0x5000).w(FUNC(modena_state::led_w)); map(0x6000, 0x6000).w(FUNC(modena_state::io_w)); map(0x7000, 0x7000).r(FUNC(modena_state::input_r)); @@ -158,14 +151,14 @@ void modena_state::modena_mem(address_map &map) static INPUT_PORTS_START( modena ) PORT_START("KEY") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Book / Pawn") PORT_CODE(KEYCODE_B) - 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) // " + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Book / Pawn") PORT_CODE(KEYCODE_B) + 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 @@ -180,7 +173,7 @@ void modena_state::modena(machine_config &config) M65C02(config, m_maincpu, 4.194304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &modena_state::modena_mem); - clock_device &nmi_clock(CLOCK(config, "nmi_clock", 4.194304_MHz_XTAL / (1 << 13))); // active for 975us + clock_device &nmi_clock(CLOCK(config, "nmi_clock", 4.194304_MHz_XTAL / 0x2000)); // active for 975us nmi_clock.signal_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -191,7 +184,8 @@ void modena_state::modena(machine_config &config) m_board->set_nvram_enable(true); /* video hardware */ - PWM_DISPLAY(config, m_display).set_size(3, 8); + MEPHISTO_DISPLAY_MODULE1(config, m_display); // internal + PWM_DISPLAY(config, m_led_pwm).set_size(3, 8); config.set_default_layout(layout_mephisto_modena); /* sound hardware */ diff --git a/src/mame/drivers/mephisto_modular.cpp b/src/mame/drivers/mephisto_modular.cpp index 0114d305ad4..6ae4c9bcdf0 100644 --- a/src/mame/drivers/mephisto_modular.cpp +++ b/src/mame/drivers/mephisto_modular.cpp @@ -252,8 +252,8 @@ void mmodular_state::alm16_mem(address_map &map) map(0xf00000, 0xf00003).portr("KEY1"); map(0xf00004, 0xf00007).portr("KEY2"); map(0xf00008, 0xf0000b).portr("KEY3"); - map(0xd80000, 0xd80000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0xd80008, 0xd80008).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0xd80000, 0xd80000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0xd80008, 0xd80008).w("display", FUNC(mephisto_display2_device::io_w)); } void mmodular_state::port16_mem(address_map &map) @@ -283,8 +283,8 @@ void mmodular_state::alm32_mem(address_map &map) map(0x800000fc, 0x800000fc).r("board", FUNC(mephisto_board_device::input_r)); map(0x88000000, 0x88000007).w("board", FUNC(mephisto_board_device::mux_w)).umask32(0xff000000); map(0x90000000, 0x90000007).w("board", FUNC(mephisto_board_device::led_w)).umask32(0xff000000); - map(0xa0000000, 0xa0000000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0xa0000010, 0xa0000010).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0xa0000000, 0xa0000000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0xa0000010, 0xa0000010).w("display", FUNC(mephisto_display2_device::io_w)); map(0xa8000000, 0xa8007fff).m("nvram_map", FUNC(address_map_bank_device::amap8)).umask32(0xff000000); } @@ -318,8 +318,8 @@ void mmodular_state::gen32_mem(address_map &map) map(0xd8000004, 0xd8000004).r(FUNC(mmodular_state::bavaria1_r)); map(0xd8000008, 0xd8000008).w(FUNC(mmodular_state::bavaria_w)); map(0xd800000c, 0xd800000c).r(FUNC(mmodular_state::bavaria2_r)); - map(0xe0000000, 0xe0000000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0xe0000010, 0xe0000010).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0xe0000000, 0xe0000000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0xe0000010, 0xe0000010).w("display", FUNC(mephisto_display2_device::io_w)); map(0xe8000000, 0xe8007fff).m("nvram_map", FUNC(address_map_bank_device::amap8)).umask32(0xff000000); map(0xf0000004, 0xf0000007).portr("KEY1"); map(0xf0000008, 0xf000000b).portr("KEY2"); diff --git a/src/mame/drivers/mephisto_modular_tm.cpp b/src/mame/drivers/mephisto_modular_tm.cpp index d485d7cf5a7..fadca7622bb 100644 --- a/src/mame/drivers/mephisto_modular_tm.cpp +++ b/src/mame/drivers/mephisto_modular_tm.cpp @@ -147,8 +147,8 @@ void mmtm_state::mmtm_2m_map(address_map &map) map(0xfc020004, 0xfc020007).portr("KEY1"); map(0xfc020008, 0xfc02000b).portr("KEY2"); map(0xfc020010, 0xfc020013).portr("KEY3"); - map(0xfc040000, 0xfc040000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0xfc060000, 0xfc060000).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0xfc040000, 0xfc040000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0xfc060000, 0xfc060000).w("display", FUNC(mephisto_display2_device::io_w)); map(0xfc080000, 0xfc080000).w("board", FUNC(mephisto_board_device::mux_w)); map(0xfc0a0000, 0xfc0a0000).w("board", FUNC(mephisto_board_device::led_w)); map(0xfc0c0000, 0xfc0c0000).r("board", FUNC(mephisto_board_device::input_r)); diff --git a/src/mame/drivers/mephisto_mondial.cpp b/src/mame/drivers/mephisto_mondial.cpp index 8142dc91e7f..71338294db7 100644 --- a/src/mame/drivers/mephisto_mondial.cpp +++ b/src/mame/drivers/mephisto_mondial.cpp @@ -7,12 +7,13 @@ Mephisto Mondial Hardware notes: - G65SC02-1 @ 2MHz - 2KB RAM(TC5517AP), 16KB ROM +- expansion slot at underside - 8*8 chessboard buttons, 24 leds, active buzzer TODO: - verify XTAL (or maybe RC or LC circuit), 2MHz is correct - unknown read from 0x2000 -- add MM 1000 module +- dump/add MM 1000 module ******************************************************************************/ @@ -156,7 +157,9 @@ void mondial_state::mondial(machine_config &config) /* basic machine hardware */ M65SC02(config, m_maincpu, 2000000); m_maincpu->set_addrmap(AS_PROGRAM, &mondial_state::mondial_mem); - m_maincpu->set_periodic_int(FUNC(mondial_state::irq0_line_hold), attotime::from_hz(2000000 / (1 << 12))); + + const attotime irq_period = attotime::from_hz(2000000 / 0x1000); + m_maincpu->set_periodic_int(FUNC(mondial_state::irq0_line_hold), 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 b7a64f5945d..42621bb3f43 100644 --- a/src/mame/drivers/mephisto_mondial2.cpp +++ b/src/mame/drivers/mephisto_mondial2.cpp @@ -8,6 +8,7 @@ Mephisto Mondial II Hardware notes: - G65SC02 @ 2MHz (unsure about rating) - 2KB RAM, 32KB ROM +- expansion slot at underside (not used) - 8*8 chessboard buttons, 24 leds, piezo ******************************************************************************/ @@ -177,7 +178,9 @@ void mondial2_state::mondial2(machine_config &config) /* basic machine hardware */ M65SC02(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mondial2_state::mondial2_mem); - m_maincpu->set_periodic_int(FUNC(mondial2_state::nmi_line_pulse), attotime::from_hz(2_MHz_XTAL / (1 << 12))); + + const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x1000); + m_maincpu->set_periodic_int(FUNC(mondial2_state::nmi_line_pulse), nmi_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_montec.cpp b/src/mame/drivers/mephisto_montec.cpp index e2cb1923872..6b4d5a5bc90 100644 --- a/src/mame/drivers/mephisto_montec.cpp +++ b/src/mame/drivers/mephisto_montec.cpp @@ -190,7 +190,7 @@ void mephisto_montec_state::montec_mem(address_map &map) 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)); + 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(); } diff --git a/src/mame/drivers/mephisto_polgar.cpp b/src/mame/drivers/mephisto_polgar.cpp index 97c23edfd21..9cafe14136c 100644 --- a/src/mame/drivers/mephisto_polgar.cpp +++ b/src/mame/drivers/mephisto_polgar.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Sandro Ronco +// copyright-holders:Sandro Ronco, hap /****************************************************************************** Mephisto Polgar @@ -8,7 +8,7 @@ Hardware notes: - RP65C02G @ 4.91MHz - 64KB ROM (25% unused) - Mephisto modular display module -- Mephisto Exclusive/Muenchen chessboard +- Mephisto modular chessboard The 10MHz version has a W65C02P-8 @ 9.83MHz. @@ -58,7 +58,7 @@ private: u8 polgar_state::keys_r(offs_t offset) { - return (BIT(m_keys->read(), offset) << 7) | 0x7f; + return ~(BIT(m_keys->read(), offset) << 7); } @@ -70,8 +70,8 @@ u8 polgar_state::keys_r(offs_t offset) void polgar_state::polgar_mem(address_map &map) { map(0x0000, 0x1fff).ram().share("nvram"); - map(0x2000, 0x2000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0x2004, 0x2004).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0x2000, 0x2000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0x2004, 0x2004).w("display", FUNC(mephisto_display2_device::io_w)); 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(polgar_state::keys_r)); @@ -88,14 +88,14 @@ void polgar_state::polgar_mem(address_map &map) static INPUT_PORTS_START( polgar ) PORT_START("KEY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("TRN / 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("MEM / Bishop") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("POS / Rook") PORT_CODE(KEYCODE_O) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEV / Queen") PORT_CODE(KEYCODE_L) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("FCT / King") PORT_CODE(KEYCODE_F) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TRN / 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("MEM / Bishop") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS / Rook") PORT_CODE(KEYCODE_O) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV / Queen") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FCT / King") PORT_CODE(KEYCODE_F) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " INPUT_PORTS_END @@ -108,7 +108,9 @@ void polgar_state::polgar(machine_config &config) { R65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem); - m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13))); + + const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), nmi_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -131,7 +133,9 @@ void polgar_state::polgar10(machine_config &config) M65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem); - m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), attotime::from_hz(9.8304_MHz_XTAL / (1 << 13))); + + const attotime nmi_period = attotime::from_hz(9.8304_MHz_XTAL / 0x2000); + m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), nmi_period); } diff --git a/src/mame/drivers/mephisto_risc.cpp b/src/mame/drivers/mephisto_risc.cpp index d4e07536f3b..7c1483fbede 100644 --- a/src/mame/drivers/mephisto_risc.cpp +++ b/src/mame/drivers/mephisto_risc.cpp @@ -12,7 +12,7 @@ Hardware notes: - 128KB ROM - Tasc ChessMachine EC PCB - Mephisto modular display module -- Mephisto Exclusive/Muenchen chessboard +- Mephisto modular chessboard ******************************************************************************/ @@ -73,7 +73,7 @@ void risc_state::machine_start() u8 risc_state::keys_r(offs_t offset) { - return (BIT(m_keys->read(), offset) << 7) | 0x7f; + return ~(BIT(m_keys->read(), offset) << 7); } u8 risc_state::chessm_r() @@ -102,8 +102,8 @@ void risc_state::mrisc_mem(address_map &map) { map.unmap_value_high(); map(0x0000, 0x1fff).ram().share("nvram"); - map(0x2000, 0x2000).w("display", FUNC(mephisto_display_module2_device::latch_w)); - map(0x2004, 0x2004).w("display", FUNC(mephisto_display_module2_device::io_w)); + map(0x2000, 0x2000).w("display", FUNC(mephisto_display2_device::latch_w)); + map(0x2004, 0x2004).w("display", FUNC(mephisto_display2_device::io_w)); map(0x2c00, 0x2c07).r(FUNC(risc_state::keys_r)); map(0x2400, 0x2400).w("board", FUNC(mephisto_board_device::led_w)); map(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w)); @@ -123,14 +123,14 @@ void risc_state::mrisc_mem(address_map &map) static INPUT_PORTS_START( mrisc ) PORT_START("KEY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("TRN / 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("MEM / Bishop") PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("POS / Rook") PORT_CODE(KEYCODE_O) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEV / Queen") PORT_CODE(KEYCODE_L) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("FCT / King") PORT_CODE(KEYCODE_F) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TRN / 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("MEM / Bishop") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS / Rook") PORT_CODE(KEYCODE_O) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV / Queen") PORT_CODE(KEYCODE_L) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FCT / King") PORT_CODE(KEYCODE_F) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT / New Game") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL / New Game") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // " INPUT_PORTS_END @@ -143,7 +143,9 @@ void risc_state::mrisc(machine_config &config) { M65SC02(config, m_maincpu, 10_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &risc_state::mrisc_mem); - m_maincpu->set_periodic_int(FUNC(risc_state::irq0_line_hold), attotime::from_hz(10_MHz_XTAL / (1 << 14))); + + const attotime irq_period = attotime::from_hz(10_MHz_XTAL / 0x4000); + m_maincpu->set_periodic_int(FUNC(risc_state::irq0_line_hold), irq_period); CHESSMACHINE(config, m_chessm, 14'000'000); // Mephisto manual says 14MHz (no XTAL) config.set_perfect_quantum(m_maincpu); diff --git a/src/mame/layout/mephisto_1.lay b/src/mame/layout/mephisto_1.lay index 19643f73e97..c093656d5be 100644 --- a/src/mame/layout/mephisto_1.lay +++ b/src/mame/layout/mephisto_1.lay @@ -47,13 +47,14 @@ license:CC0 + - - - + + + @@ -66,12 +67,18 @@ license:CC0 - - - + + + + + - - + + + + + + diff --git a/src/mame/layout/mephisto_3.lay b/src/mame/layout/mephisto_3.lay index 922297fbef6..61432fceea5 100644 --- a/src/mame/layout/mephisto_3.lay +++ b/src/mame/layout/mephisto_3.lay @@ -205,7 +205,7 @@ license:CC0 - + @@ -423,13 +423,14 @@ license:CC0 + - - - + + + @@ -442,12 +443,18 @@ license:CC0 - - - + + + + + - - + + + + + + diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay index faaf5de2340..fabca06d644 100644 --- a/src/mame/layout/mephisto_academy.lay +++ b/src/mame/layout/mephisto_academy.lay @@ -47,44 +47,44 @@ license:CC0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -121,8 +121,8 @@ license:CC0 - - + + @@ -210,7 +210,7 @@ license:CC0 - + @@ -266,34 +266,34 @@ license:CC0 - + - + - + - + - + - + - + diff --git a/src/mame/layout/mephisto_alm16.lay b/src/mame/layout/mephisto_alm16.lay index 255e64639e8..e74f8ca549b 100644 --- a/src/mame/layout/mephisto_alm16.lay +++ b/src/mame/layout/mephisto_alm16.lay @@ -181,7 +181,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_alm32.lay b/src/mame/layout/mephisto_alm32.lay index b690df7f65b..e141fc81c1c 100644 --- a/src/mame/layout/mephisto_alm32.lay +++ b/src/mame/layout/mephisto_alm32.lay @@ -181,7 +181,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_amsterdam.lay b/src/mame/layout/mephisto_amsterdam.lay index 8e94c4f3b04..1e75b7afcb6 100644 --- a/src/mame/layout/mephisto_amsterdam.lay +++ b/src/mame/layout/mephisto_amsterdam.lay @@ -4,11 +4,7 @@ license:CC0 --> - - - - - + @@ -169,7 +165,7 @@ license:CC0 - + @@ -348,14 +344,41 @@ license:CC0 - + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -531,15 +554,10 @@ license:CC0 - - - - - - + @@ -557,6 +575,11 @@ license:CC0 + + + + + diff --git a/src/mame/layout/mephisto_bup.lay b/src/mame/layout/mephisto_bup.lay index c00c6086a52..8b718a333e7 100644 --- a/src/mame/layout/mephisto_bup.lay +++ b/src/mame/layout/mephisto_bup.lay @@ -3,13 +3,8 @@ license:CC0 --> - - - - - - + @@ -170,7 +165,7 @@ license:CC0 - + @@ -349,14 +344,41 @@ license:CC0 - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -371,7 +393,7 @@ license:CC0 - + @@ -479,41 +501,41 @@ license:CC0 - + - + - + - + - + - + - + - + - + - + - + - + @@ -523,16 +545,16 @@ license:CC0 - + - + - + - + @@ -545,15 +567,10 @@ license:CC0 - - - - - - + @@ -571,6 +588,13 @@ license:CC0 + + + + + + + diff --git a/src/mame/layout/mephisto_esb2.lay b/src/mame/layout/mephisto_esb2.lay index 80db84a285d..92f7261edad 100644 --- a/src/mame/layout/mephisto_esb2.lay +++ b/src/mame/layout/mephisto_esb2.lay @@ -205,7 +205,7 @@ license:CC0 - + @@ -423,13 +423,14 @@ license:CC0 + - - - + + + @@ -442,12 +443,18 @@ license:CC0 - - - + + + + + - - + + + + + + diff --git a/src/mame/layout/mephisto_gen32.lay b/src/mame/layout/mephisto_gen32.lay index d3255899625..498fbecc855 100644 --- a/src/mame/layout/mephisto_gen32.lay +++ b/src/mame/layout/mephisto_gen32.lay @@ -181,7 +181,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_glasgow.lay b/src/mame/layout/mephisto_glasgow.lay index 459436a977f..f3a94062cef 100644 --- a/src/mame/layout/mephisto_glasgow.lay +++ b/src/mame/layout/mephisto_glasgow.lay @@ -4,11 +4,7 @@ license:CC0 --> - - - - - + @@ -169,7 +165,7 @@ license:CC0 - + @@ -348,14 +344,41 @@ license:CC0 - + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -529,8 +552,10 @@ license:CC0 - + + + @@ -549,11 +574,9 @@ license:CC0 - - + + + - - - diff --git a/src/mame/layout/mephisto_junior.lay b/src/mame/layout/mephisto_junior.lay index 2c0d9c8d294..a12e1f2bc50 100644 --- a/src/mame/layout/mephisto_junior.lay +++ b/src/mame/layout/mephisto_junior.lay @@ -47,13 +47,14 @@ license:CC0 + - - - + + + @@ -66,12 +67,18 @@ license:CC0 - - - + + + + + - - + + + + + + diff --git a/src/mame/layout/mephisto_mirage.lay b/src/mame/layout/mephisto_mirage.lay index b79ea6dac30..3fbda7f1e4e 100644 --- a/src/mame/layout/mephisto_mirage.lay +++ b/src/mame/layout/mephisto_mirage.lay @@ -161,26 +161,36 @@ license:CC0 - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -289,8 +299,8 @@ license:CC0 - - + + @@ -310,18 +320,18 @@ license:CC0 - - - - - - - - - - - - + + + + + + + + + + + + @@ -330,7 +340,7 @@ license:CC0 - + @@ -343,10 +353,10 @@ license:CC0 - - - - + + + + @@ -357,13 +367,14 @@ license:CC0 + - - - + + + @@ -376,12 +387,18 @@ license:CC0 - - - + + + + + + + + + - - + + diff --git a/src/mame/layout/mephisto_mm1.lay b/src/mame/layout/mephisto_mm1.lay index 47becf67cb4..1d7b4c35f14 100644 --- a/src/mame/layout/mephisto_mm1.lay +++ b/src/mame/layout/mephisto_mm1.lay @@ -200,14 +200,24 @@ license:CC0 - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -215,14 +225,14 @@ license:CC0 - - - - - - - - + + + + + + + + @@ -304,8 +314,8 @@ license:CC0 - - + + @@ -325,18 +335,18 @@ license:CC0 - - - - - - - - - - - - + + + + + + + + + + + + @@ -345,7 +355,7 @@ license:CC0 - + @@ -358,10 +368,10 @@ license:CC0 - - - - + + + + @@ -372,13 +382,14 @@ license:CC0 + - - - + + + @@ -391,12 +402,18 @@ license:CC0 - - - + + + + + - - + + + + + + @@ -545,10 +562,7 @@ license:CC0 - - - - + @@ -566,5 +580,10 @@ license:CC0 + + + + + diff --git a/src/mame/layout/mephisto_mm2.lay b/src/mame/layout/mephisto_mm2.lay index 4ac73ef50c6..4d76871cb0d 100644 --- a/src/mame/layout/mephisto_mm2.lay +++ b/src/mame/layout/mephisto_mm2.lay @@ -3,13 +3,8 @@ license:CC0 --> - - - - - - + @@ -170,7 +165,7 @@ license:CC0 - + @@ -349,14 +344,41 @@ license:CC0 - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -371,7 +393,7 @@ license:CC0 - + @@ -488,41 +510,41 @@ license:CC0 - + - + - + - + - + - + - + - + - + - + - + - + @@ -532,16 +554,16 @@ license:CC0 - + - + - + - + @@ -554,15 +576,10 @@ license:CC0 - - - - - - + @@ -580,6 +597,13 @@ license:CC0 + + + + + + + diff --git a/src/mame/layout/mephisto_modena.lay b/src/mame/layout/mephisto_modena.lay index 4157e98de34..dd0b91f0903 100644 --- a/src/mame/layout/mephisto_modena.lay +++ b/src/mame/layout/mephisto_modena.lay @@ -3,15 +3,11 @@ license:CC0 --> + - - - - - @@ -353,17 +349,47 @@ license:CC0 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - + + + + @@ -408,8 +434,11 @@ license:CC0 - + + + + @@ -428,9 +457,7 @@ license:CC0 - - - + @@ -449,11 +476,9 @@ license:CC0 - - - - - - + + + + diff --git a/src/mame/layout/mephisto_modular_tm.lay b/src/mame/layout/mephisto_modular_tm.lay index bc0d5748edd..6eb92e690e0 100644 --- a/src/mame/layout/mephisto_modular_tm.lay +++ b/src/mame/layout/mephisto_modular_tm.lay @@ -155,7 +155,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_montec.lay b/src/mame/layout/mephisto_montec.lay index 94921db26c0..d86b683554d 100644 --- a/src/mame/layout/mephisto_montec.lay +++ b/src/mame/layout/mephisto_montec.lay @@ -40,48 +40,48 @@ license:CC0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -117,8 +117,8 @@ license:CC0 - - + + @@ -206,7 +206,7 @@ license:CC0 - + @@ -262,34 +262,34 @@ license:CC0 - + - + - + - + - + - + - + diff --git a/src/mame/layout/mephisto_polgar.lay b/src/mame/layout/mephisto_polgar.lay index 5a953ab4d17..e45d884e6b9 100644 --- a/src/mame/layout/mephisto_polgar.lay +++ b/src/mame/layout/mephisto_polgar.lay @@ -187,7 +187,7 @@ license:CC0 - + diff --git a/src/mame/layout/mephisto_risc.lay b/src/mame/layout/mephisto_risc.lay index 5a953ab4d17..e45d884e6b9 100644 --- a/src/mame/layout/mephisto_risc.lay +++ b/src/mame/layout/mephisto_risc.lay @@ -187,7 +187,7 @@ license:CC0 - + diff --git a/src/mame/machine/mmboard.cpp b/src/mame/machine/mmboard.cpp index abb794b8fcb..6e916aeae8b 100644 --- a/src/mame/machine/mmboard.cpp +++ b/src/mame/machine/mmboard.cpp @@ -76,6 +76,9 @@ void mephisto_board_device::device_start() { m_led_out.resolve(); + m_mux = 0xff; + m_led_data = 0; + save_item(NAME(m_mux)); save_item(NAME(m_led_data)); diff --git a/src/mame/machine/mmboard.h b/src/mame/machine/mmboard.h index 6c77b2109cb..3b4bd828e14 100644 --- a/src/mame/machine/mmboard.h +++ b/src/mame/machine/mmboard.h @@ -2,7 +2,7 @@ // copyright-holders:Sandro Ronco /********************************************************************** - Mephisto Sensors Board + Mephisto Modular Sensors Board *********************************************************************/ diff --git a/src/mame/video/mmdisplay1.cpp b/src/mame/video/mmdisplay1.cpp new file mode 100644 index 00000000000..09346fb2b67 --- /dev/null +++ b/src/mame/video/mmdisplay1.cpp @@ -0,0 +1,92 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/********************************************************************** + +Hegener + Glaser Mephisto Display Module for modular chesscomputers, +the 1st version with a 4*7seg LCD. There is no LCD chip, it's handled +with 4 4015 dual shift registers. + +*********************************************************************/ + +#include "emu.h" + +#include "mmdisplay1.h" + + +DEFINE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE1, mephisto_display1_device, "mdisplay1", "Mephisto Display Module 1") + +//------------------------------------------------- +// constructor +//------------------------------------------------- + +mephisto_display1_device::mephisto_display1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, MEPHISTO_DISPLAY_MODULE1, tag, owner, clock), + m_digits(*this, "digit%u", 0U), + m_output_digit(*this) +{ } + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mephisto_display1_device::device_start() +{ + m_output_digit.resolve(); + if (m_output_digit.isnull()) + m_digits.resolve(); + + // register for savestates + save_item(NAME(m_strobe)); + save_item(NAME(m_digit_idx)); + save_item(NAME(m_digit_data)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void mephisto_display1_device::device_reset() +{ + m_strobe = 0; + m_digit_idx = 0; + + // clear display + for (int i = 0; i < 4; i++) + m_digit_data[i] = 0; + update_lcd(); +} + + +//------------------------------------------------- +// I/O handlers +//------------------------------------------------- + +void mephisto_display1_device::update_lcd() +{ + for (int i = 0; i < 4; i++) + { + if (m_output_digit.isnull()) + m_digits[i] = m_digit_data[i]; + else + m_output_digit(i, m_digit_data[i]); + } +} + +void mephisto_display1_device::strobe_w(int state) +{ + state = state ? 1 : 0; + + // update lcd on rising edge + if (state && ~m_strobe) + update_lcd(); + + m_strobe = state; +} + +void mephisto_display1_device::data_w(u8 data) +{ + m_digit_data[m_digit_idx] = m_strobe ? ~data : data; + m_digit_idx = (m_digit_idx + 1) & 3; +} diff --git a/src/mame/video/mmdisplay1.h b/src/mame/video/mmdisplay1.h new file mode 100644 index 00000000000..4dab1527955 --- /dev/null +++ b/src/mame/video/mmdisplay1.h @@ -0,0 +1,45 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/********************************************************************** + + Mephisto Modular Display Module (1st version) + +*********************************************************************/ + +#ifndef MAME_VIDEO_MMDISPLAY1_H +#define MAME_VIDEO_MMDISPLAY1_H + +#pragma once + + +class mephisto_display1_device : public device_t +{ +public: + mephisto_display1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + + // callback is optional, it will output to digitx when not used + auto output_digit() { return m_output_digit.bind(); } + + void strobe_w(int state); + void data_w(u8 data); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + output_finder<4> m_digits; + devcb_write8 m_output_digit; + + void update_lcd(); + + int m_strobe = 0; + u8 m_digit_idx = 0; + u8 m_digit_data[4] = { 0, 0, 0, 0 }; +}; + + +DECLARE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE1, mephisto_display1_device) + +#endif // MAME_VIDEO_MMDISPLAY1_H diff --git a/src/mame/video/mmdisplay2.cpp b/src/mame/video/mmdisplay2.cpp index 2171c571680..0692c5d9c30 100644 --- a/src/mame/video/mmdisplay2.cpp +++ b/src/mame/video/mmdisplay2.cpp @@ -6,9 +6,6 @@ Hegener + Glaser Mephisto Display Module for modular chesscomputers, the 2nd version with 2 LCD lines. The 16/32bit module also includes 8KB NVRAM, but that part is emulated in the driver. -TODO: -- add mmdisplay1.cpp, the one with shift registers and 4-digit lcd - *********************************************************************/ #include "emu.h" @@ -16,13 +13,13 @@ TODO: #include "mmdisplay2.h" -DEFINE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE2, mephisto_display_module2_device, "mdisplay2", "Mephisto Display Module 2") +DEFINE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE2, mephisto_display2_device, "mdisplay2", "Mephisto Display Module 2") //------------------------------------------------- // constructor //------------------------------------------------- -mephisto_display_module2_device::mephisto_display_module2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +mephisto_display2_device::mephisto_display2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MEPHISTO_DISPLAY_MODULE2, tag, owner, clock) , m_lcd(*this, "hd44780") , m_dac(*this, "dac") @@ -34,7 +31,7 @@ mephisto_display_module2_device::mephisto_display_module2_device(const machine_c // device_add_mconfig //------------------------------------------------- -void mephisto_display_module2_device::device_add_mconfig(machine_config &config) +void mephisto_display2_device::device_add_mconfig(machine_config &config) { /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); @@ -45,25 +42,25 @@ void mephisto_display_module2_device::device_add_mconfig(machine_config &config) screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update)); screen.set_palette("palette"); - PALETTE(config, "palette", FUNC(mephisto_display_module2_device::lcd_palette), 3); + PALETTE(config, "palette", FUNC(mephisto_display2_device::lcd_palette), 3); HD44780(config, m_lcd, 0); m_lcd->set_lcd_size(2, 16); - m_lcd->set_pixel_update_cb(FUNC(mephisto_display_module2_device::lcd_pixel_update)); + m_lcd->set_pixel_update_cb(FUNC(mephisto_display2_device::lcd_pixel_update)); /* sound hardware */ SPEAKER(config, "speaker").front_center(); DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } -void mephisto_display_module2_device::lcd_palette(palette_device &palette) const +void mephisto_display2_device::lcd_palette(palette_device &palette) const { palette.set_pen_color(0, rgb_t(0xff, 0xff, 0xff)); // background palette.set_pen_color(1, rgb_t(0x00, 0x00, 0x00)); // lcd pixel on palette.set_pen_color(2, rgb_t(0xe8, 0xe8, 0xe8)); // lcd pixel off } -HD44780_PIXEL_UPDATE(mephisto_display_module2_device::lcd_pixel_update) +HD44780_PIXEL_UPDATE(mephisto_display2_device::lcd_pixel_update) { if (x < 5 && y < 8 && line < 2 && pos < 16) bitmap.pix(line*9 + 1 + y, 1 + pos*6 + x) = state ? 1 : 2; @@ -74,7 +71,7 @@ HD44780_PIXEL_UPDATE(mephisto_display_module2_device::lcd_pixel_update) // device_start - device-specific startup //------------------------------------------------- -void mephisto_display_module2_device::device_start() +void mephisto_display2_device::device_start() { save_item(NAME(m_latch)); save_item(NAME(m_ctrl)); @@ -85,7 +82,7 @@ void mephisto_display_module2_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void mephisto_display_module2_device::device_reset() +void mephisto_display2_device::device_reset() { m_latch = 0; m_ctrl = 0; @@ -96,12 +93,12 @@ void mephisto_display_module2_device::device_reset() // I/O handlers //------------------------------------------------- -void mephisto_display_module2_device::latch_w(uint8_t data) +void mephisto_display2_device::latch_w(uint8_t data) { m_latch = data; } -void mephisto_display_module2_device::io_w(uint8_t data) +void mephisto_display2_device::io_w(uint8_t data) { if (BIT(data, 1) && !BIT(m_ctrl, 1)) m_lcd->write(BIT(data, 0), m_latch); diff --git a/src/mame/video/mmdisplay2.h b/src/mame/video/mmdisplay2.h index 03f16ea2e07..b4d188d898c 100644 --- a/src/mame/video/mmdisplay2.h +++ b/src/mame/video/mmdisplay2.h @@ -2,7 +2,7 @@ // copyright-holders:Sandro Ronco /********************************************************************** - Mephisto Display Module (2nd version) + Mephisto Modular Display Module (2nd version) *********************************************************************/ @@ -19,13 +19,13 @@ #include "speaker.h" -// ======================> mephisto_display_module2_device +// ======================> mephisto_display2_device -class mephisto_display_module2_device : public device_t +class mephisto_display2_device : public device_t { public: // construction/destruction - mephisto_display_module2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + mephisto_display2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); hd44780_device *get() { return m_lcd; } @@ -46,12 +46,12 @@ private: void lcd_palette(palette_device &palette) const; HD44780_PIXEL_UPDATE(lcd_pixel_update); - uint8_t m_latch; - uint8_t m_ctrl; + uint8_t m_latch = 0; + uint8_t m_ctrl = 0; }; // device type definition -DECLARE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE2, mephisto_display_module2_device) +DECLARE_DEVICE_TYPE(MEPHISTO_DISPLAY_MODULE2, mephisto_display2_device) #endif // MAME_VIDEO_MMDISPLAY2_H -- cgit v1.2.3