From b560193d56b796b244154e3a04b27b79b8afed4c Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 4 Jan 2020 00:33:12 +0100 Subject: New working clones ------------------ Mephisto Portorose 68030 [hap, anonymous] Mephisto Lyon 68030 [hap, anonymous] Mephisto TM Lyon [hap, anonymous] Mephisto Vancouver 68030 [hap, anonymous] Mephisto TM Vancouver [hap, anonymous] Mephisto TM Berlin (prototype) [hap, anonymous] Mephisto London 68030 [hap, anonymous] Mephisto TM London [hap, anonymous] --- scripts/target/mame/mess.lua | 1 + src/devices/video/hd44780.cpp | 9 +- src/devices/video/hd44780.h | 2 + src/mame/drivers/mephisto_berlin.cpp | 17 +- src/mame/drivers/mephisto_modular.cpp | 140 +++++----- src/mame/drivers/mephisto_modular_tm.cpp | 285 ++++++++++++++++++++ src/mame/drivers/novag_supremo.cpp | 1 + src/mame/layout/mephisto_alm16.lay | 8 +- src/mame/layout/mephisto_alm32.lay | 8 +- src/mame/layout/mephisto_gen32.lay | 8 +- src/mame/layout/mephisto_modular_tm.lay | 435 +++++++++++++++++++++++++++++++ src/mame/machine/mmboard.cpp | 5 +- src/mame/machine/mmboard.h | 3 + src/mame/mame.lst | 10 + src/mame/mess.flt | 1 + 15 files changed, 832 insertions(+), 101 deletions(-) create mode 100644 src/mame/drivers/mephisto_modular_tm.cpp create mode 100644 src/mame/layout/mephisto_modular_tm.lay diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index b3cf53060a4..f8a5ee92952 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2375,6 +2375,7 @@ files { MAME_DIR .. "src/mame/drivers/mephisto_mm2.cpp", MAME_DIR .. "src/mame/drivers/mephisto_modena.cpp", MAME_DIR .. "src/mame/drivers/mephisto_modular.cpp", + MAME_DIR .. "src/mame/drivers/mephisto_modular_tm.cpp", MAME_DIR .. "src/mame/drivers/mephisto_mondial68k.cpp", MAME_DIR .. "src/mame/drivers/mephisto_montec.cpp", MAME_DIR .. "src/mame/drivers/mephisto_polgar.cpp", diff --git a/src/devices/video/hd44780.cpp b/src/devices/video/hd44780.cpp index f914cee1616..46291961f7b 100644 --- a/src/devices/video/hd44780.cpp +++ b/src/devices/video/hd44780.cpp @@ -6,7 +6,8 @@ TODO: - dump internal CGROM - - emulate osc pin, determine video timings and busy flag duration from it + - emulate osc pin, determine video timings and busy flag duration from it, + and if possible, remove m_busy_factor ***************************************************************************/ @@ -56,6 +57,7 @@ hd44780_device::hd44780_device(const machine_config &mconfig, const char *tag, d hd44780_device::hd44780_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) , m_pixel_update_cb(*this) + , m_busy_factor(1.0) , m_cgrom(nullptr) , m_cgrom_region(*this, DEVICE_SELF) , m_rs_input(0) @@ -102,6 +104,7 @@ void hd44780_device::device_start() m_blink_timer->adjust(attotime::from_msec(409), 0, attotime::from_msec(409)); // state saving + save_item(NAME(m_busy_factor)); save_item(NAME(m_busy_flag)); save_item(NAME(m_ac)); save_item(NAME(m_dr)); @@ -191,7 +194,9 @@ void hd44780_device::set_charset_type(int type) void hd44780_device::set_busy_flag(uint16_t usec) { m_busy_flag = true; - m_busy_timer->adjust( attotime::from_usec( usec ) ); + + usec = float(usec) * m_busy_factor + 0.5; + m_busy_timer->adjust(attotime::from_usec(usec)); } void hd44780_device::correct_ac() diff --git a/src/devices/video/hd44780.h b/src/devices/video/hd44780.h index ec45d0005d1..71b88f6f6b4 100644 --- a/src/devices/video/hd44780.h +++ b/src/devices/video/hd44780.h @@ -32,6 +32,7 @@ public: // static configuration helpers void set_lcd_size(int lines, int chars) { m_lines = lines; m_chars = chars; } template void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward(args)...); } + void set_busy_factor(float f) { m_busy_factor = f; } // it's a workaround for inaccurate busy flag emulation // device interface void write(offs_t offset, u8 data); @@ -103,6 +104,7 @@ private: u8 m_chars; // chars for line pixel_update_delegate m_pixel_update_cb; // pixel update callback + float m_busy_factor; bool m_busy_flag; // busy flag u8 m_ddram[0x80]; // internal display data RAM u8 m_cgram[0x40]; // internal chargen RAM diff --git a/src/mame/drivers/mephisto_berlin.cpp b/src/mame/drivers/mephisto_berlin.cpp index d7bbf0ebdb3..622d932dbc5 100644 --- a/src/mame/drivers/mephisto_berlin.cpp +++ b/src/mame/drivers/mephisto_berlin.cpp @@ -2,7 +2,8 @@ // copyright-holders:Sandro Ronco /****************************************************************************** -Mephisto Berlin / Berlin Professional +Mephisto Berlin 68000 / Berlin Professional 68020 +Berlin Professional has the same engine as Mephisto Genius. TODO: - does it have ROM waitstates like mephisto_modular? @@ -148,7 +149,9 @@ void berlin_state::berlinp(machine_config &config) /* basic machine hardware */ M68EC020(config.replace(), m_maincpu, 24.576_MHz_XTAL); // M68EC020RP25 m_maincpu->set_addrmap(AS_PROGRAM, &berlin_state::berlinp_mem); - m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), attotime::from_hz(750)); + + const attotime irq_period = attotime::from_hz(24.576_MHz_XTAL / 0x8000); // 750Hz + m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), irq_period); } @@ -159,26 +162,26 @@ void berlin_state::berlinp(machine_config &config) ROM_START( berl16 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) - ROM_SYSTEM_BIOS( 0, "v003", "V0.03" ) + ROM_SYSTEM_BIOS( 0, "v003", "V0.03" ) // B003 8C60 CA47 ROMX_LOAD("berlin_68000_even.bin", 0x00000, 0x10000, CRC(31337f15) SHA1(0dcacb153a6f8376e6f1c2f3e57e60aad4370740), ROM_SKIP(1) | ROM_BIOS(0) ) ROMX_LOAD("berlin_68000_odd_b003.bin", 0x00001, 0x10000, CRC(cc146819) SHA1(e4b2c6e496eff4a657a0718be292f563fb4e5688), ROM_SKIP(1) | ROM_BIOS(0) ) - ROM_SYSTEM_BIOS( 1, "v002", "V0.02" ) + ROM_SYSTEM_BIOS( 1, "v002", "V0.02" ) // B002 8C59 CA47 ROMX_LOAD("berlin_68000_even.bin", 0x00000, 0x10000, CRC(31337f15) SHA1(0dcacb153a6f8376e6f1c2f3e57e60aad4370740), ROM_SKIP(1) | ROM_BIOS(1) ) ROMX_LOAD("berlin_68000_odd_b002.bin", 0x00001, 0x10000, CRC(513a95f2) SHA1(cbaef0078a119163577e76a78b2110939b17be6b), ROM_SKIP(1) | ROM_BIOS(1) ) ROM_END -ROM_START( berlinp ) +ROM_START( berlinp ) // B400 8AA1 E785 ROM_REGION32_BE( 0x40000, "maincpu", 0 ) ROM_LOAD("berlin_020_v400.u2", 0x00000, 0x40000, CRC(82fbaf6e) SHA1(729b7cef3dfaecc4594a6178fc4ba6015afa6202) ) ROM_END -ROM_START( berl16l ) +ROM_START( berl16l ) // B500 ABD5 CA47 ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("berlin_68000_london_even.bin", 0x00000, 0x10000, CRC(0ccddbc6) SHA1(90effdc9f2811a24d450b74ccfb24995ce896b86) ) ROM_LOAD16_BYTE("berlin_68000_london_odd.bin", 0x00001, 0x10000, CRC(5edac658) SHA1(18ebebc5ceffd9a01798d8a3709875120bd096f7) ) ROM_END -ROM_START( berlinpl ) +ROM_START( berlinpl ) // B500 53CA 3DCE ROM_REGION32_BE( 0x40000, "maincpu", 0 ) ROM_LOAD("berlin_020_london.u2", 0x00000, 0x40000, CRC(d75e170f) SHA1(ac0ebdaa114abd4fef87361a03df56928768b1ae) ) ROM_END diff --git a/src/mame/drivers/mephisto_modular.cpp b/src/mame/drivers/mephisto_modular.cpp index 6b13a1c3de9..e749278f42f 100644 --- a/src/mame/drivers/mephisto_modular.cpp +++ b/src/mame/drivers/mephisto_modular.cpp @@ -21,13 +21,14 @@ Genius 68030 33.3330MHz The London program (1994 competition) is not a dedicated module, but an EPROM upgrade released by Richard Lang for Almeria, Lyon, Portorose and Vancouver modules, and also available as upgrades for Berlin/Berlin Pro and Genius. -No Mephisto modules were released anymore after Saitek took over H+G, engine is assumed -to be same as Saitek's 1996 Mephisto London 68030 (limited release TM version). +No Mephisto modules were released anymore after Saitek took over H+G, engine is the +same as Saitek's 1996 Mephisto London 68030 (limited release TM version). + +For the dedicated tournament machines, see mephisto_modular_tm.cpp TODO: -- add the missing very rare 'TM' Tournament Machines -- match I/S= diag speed test with real hardware (good test for proper waitstates) -- remove gen32/gen32l ROM patch, also related to waitstates +- match I/S= diag speed test with real hardware (good test for proper waitstates), + especially gen32 is way too fast when comparing sound pitch Undocumented buttons: - holding ENTER and LEFT cursor on boot runs diagnostics @@ -74,12 +75,8 @@ Reminder: unsupported on Almeria and Portorose 1.01, this is not a bug. #include "machine/bankdev.h" #include "machine/nvram.h" #include "machine/timer.h" -#include "machine/sensorboard.h" #include "machine/mmboard.h" -#include "screen.h" -#include "speaker.h" - // internal artwork #include "mephisto_alm16.lh" // clickable #include "mephisto_alm32.lh" // clickable @@ -95,7 +92,8 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_board(*this, "board"), - m_bav_busy(*this, "bav_busy") + m_bav_busy(*this, "bav_busy"), + m_fake(*this, "FAKE") { } // machine configs @@ -107,8 +105,6 @@ public: void van32(machine_config &config); void gen32(machine_config &config); - void init_gen32(); - DECLARE_INPUT_CHANGED_MEMBER(switch_sensor_type) { set_sbtype(newval); } protected: @@ -120,6 +116,7 @@ private: required_device m_maincpu; required_device m_board; required_device m_bav_busy; + optional_ioport m_fake; // address maps void alm16_mem(address_map &map); @@ -144,22 +141,13 @@ private: void mmodular_state::machine_start() { - // register for savestates save_item(NAME(m_bav_data)); } void mmodular_state::machine_reset() { - set_sbtype(ioport("FAKE")->read() & 1); m_bav_data = 0; -} - -void mmodular_state::init_gen32() -{ - // patch LCD delay loop - uint8_t *rom = memregion("maincpu")->base(); - if (rom[0x870] == 0x0c && rom[0x871] == 0x78) - rom[0x870] = 0x38; + set_sbtype(m_fake.read_safe(0) & 1); } @@ -168,6 +156,25 @@ void mmodular_state::init_gen32() I/O ******************************************************************************/ +// Bavaria board + +void mmodular_state::set_sbtype(ioport_value newval) +{ + m_board->get()->set_type(newval ? sensorboard_device::INDUCTIVE : sensorboard_device::MAGNETS); + + if (machine().phase() == machine_phase::RUNNING) + { + m_board->get()->cancel_hand(); + m_board->get()->refresh(); + } +} + +u8 mmodular_state::spawn_cb(offs_t offset) +{ + // ignore jokers + return (!m_board->get()->is_inductive() && offset > 12) ? 0 : offset; +} + WRITE8_MEMBER(mmodular_state::bavaria_w) { if (!m_board->get()->is_inductive()) @@ -208,12 +215,6 @@ READ8_MEMBER(mmodular_state::bavaria2_r) return m_bav_busy->enabled() ? 0x80 : 0; } -u8 mmodular_state::spawn_cb(offs_t offset) -{ - // ignore jokers - return (!m_board->get()->is_inductive() && offset > 12) ? 0 : offset; -} - /****************************************************************************** @@ -255,7 +256,7 @@ void mmodular_state::van16_mem(address_map &map) { port16_mem(map); - map(0x000000, 0x03ffff).rom(); + map(0x020000, 0x03ffff).rom(); } @@ -287,7 +288,7 @@ void mmodular_state::van32_mem(address_map &map) { port32_mem(map); - map(0x00000000, 0x0003ffff).rom(); + map(0x00020000, 0x0003ffff).rom(); } @@ -297,7 +298,9 @@ void mmodular_state::gen32_mem(address_map &map) map(0x40000000, 0x4007ffff).ram(); map(0x80000000, 0x8003ffff).ram(); map(0xc0000000, 0xc0000000).r("board", FUNC(mephisto_board_device::input_r)); + map(0xc8000000, 0xc8000003).nopw(); map(0xc8000004, 0xc8000004).w("board", FUNC(mephisto_board_device::mux_w)); + map(0xd0000000, 0xd0000003).nopw(); map(0xd0000004, 0xd0000004).w("board", FUNC(mephisto_board_device::led_w)); map(0xd8000004, 0xd8000004).r(FUNC(mmodular_state::bavaria1_r)); map(0xd8000008, 0xd8000008).w(FUNC(mmodular_state::bavaria_w)); @@ -318,23 +321,11 @@ void mmodular_state::gen32_mem(address_map &map) static INPUT_PORTS_START( bavaria ) PORT_START("FAKE") - PORT_CONFNAME( 0x01, 0x01, "Board Sensors" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmodular_state, switch_sensor_type, 0) - PORT_CONFSETTING( 0x01, "Magnets (Exclusive)" ) // or Muenchen/Modular - PORT_CONFSETTING( 0x00, "Induction (Bavaria)" ) + PORT_CONFNAME( 0x01, 0x00, "Board Sensors" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmodular_state, switch_sensor_type, 0) + PORT_CONFSETTING( 0x00, "Magnets (Exclusive)" ) // or Muenchen/Modular + PORT_CONFSETTING( 0x01, "Induction (Bavaria)" ) INPUT_PORTS_END -void mmodular_state::set_sbtype(ioport_value newval) -{ - m_board->get()->set_type(newval ? sensorboard_device::MAGNETS : sensorboard_device::INDUCTIVE); - - if (machine().phase() == machine_phase::RUNNING) - { - m_board->get()->cancel_hand(); - m_board->get()->refresh(); - } -} - - static INPUT_PORTS_START( gen32 ) PORT_INCLUDE( bavaria ) @@ -351,9 +342,7 @@ static INPUT_PORTS_START( gen32 ) PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) INPUT_PORTS_END -static INPUT_PORTS_START( port16 ) - PORT_INCLUDE( bavaria ) - +static INPUT_PORTS_START( alm16 ) PORT_START("KEY1") PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) @@ -367,9 +356,7 @@ static INPUT_PORTS_START( port16 ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) INPUT_PORTS_END -static INPUT_PORTS_START( port32 ) - PORT_INCLUDE( bavaria ) - +static INPUT_PORTS_START( alm32 ) PORT_START("KEY1") PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) @@ -383,18 +370,14 @@ static INPUT_PORTS_START( port32 ) PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) INPUT_PORTS_END -static INPUT_PORTS_START( alm16 ) - PORT_INCLUDE( port16 ) - - PORT_MODIFY("FAKE") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) +static INPUT_PORTS_START( port16 ) + PORT_INCLUDE( bavaria ) + PORT_INCLUDE( alm16 ) INPUT_PORTS_END -static INPUT_PORTS_START( alm32 ) - PORT_INCLUDE( port32 ) - - PORT_MODIFY("FAKE") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) +static INPUT_PORTS_START( port32 ) + PORT_INCLUDE( bavaria ) + PORT_INCLUDE( alm32 ) INPUT_PORTS_END @@ -443,7 +426,7 @@ void mmodular_state::alm32(machine_config &config) /* basic machine hardware */ M68020(config.replace(), m_maincpu, 12_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm32_mem); - m_maincpu->set_periodic_int(FUNC(mmodular_state::irq6_line_hold), attotime::from_hz(750)); + m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), attotime::from_hz(750)); config.set_default_layout(layout_mephisto_alm32); } @@ -471,6 +454,7 @@ void mmodular_state::gen32(machine_config &config) const attotime irq_period = attotime::from_hz(6.144_MHz_XTAL / 0x4000); // through 4060, 375Hz m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), irq_period); + subdevice("display:hd44780")->set_busy_factor(0.25); config.set_default_layout(layout_mephisto_gen32); } @@ -480,18 +464,18 @@ void mmodular_state::gen32(machine_config &config) ROM Definitions ******************************************************************************/ -ROM_START( alm16 ) +ROM_START( alm16 ) // U013 65CE 2FCE ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000, CRC(ee5b6ec4) SHA1(30920c1b9e16ffae576da5afa0b56da59ada3dbb) ) ROM_LOAD16_BYTE("alm16odd.bin", 0x00001, 0x10000, CRC(d0be4ee4) SHA1(d36c074802d2c9099cd44e75f9de3fc7d1fd9908) ) ROM_END -ROM_START( alm32 ) +ROM_START( alm32 ) // U012 D21A 2FCE ROM_REGION32_BE( 0x20000, "maincpu", 0 ) ROM_LOAD("alm32.bin", 0x00000, 0x20000, CRC(38f4b305) SHA1(43459a057ff29248c74d656a036ac325202b9c15) ) ROM_END -ROM_START( port16 ) +ROM_START( port16 ) // V101 630D 1CD7 ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("port16ev.bin", 0x00000, 0x10000, CRC(68e4a37d) SHA1(33e7216db664174a8448e455bba97738a29c0f31) ) ROM_LOAD16_BYTE("port16od.bin", 0x00001, 0x10000, CRC(cae77a05) SHA1(9a0ca8bb37325698f8d208f64a340690b9a933b5) ) @@ -502,16 +486,16 @@ ROM_END ROM_START( port32 ) ROM_REGION32_BE( 0x20000, "maincpu", 0 ) - ROM_SYSTEM_BIOS( 0, "v103", "V1.03" ) + ROM_SYSTEM_BIOS( 0, "v103", "V1.03" ) // V103 C734 1CD7 ROMX_LOAD("portorose_32bit_v103", 0x00000, 0x20000, CRC(02c091b3) SHA1(f1d48e73b24093288dbb8a06617bb62420c07508), ROM_BIOS(0) ) - ROM_SYSTEM_BIOS( 1, "v101", "V1.01" ) + ROM_SYSTEM_BIOS( 1, "v101", "V1.01" ) // V101 7805 1CD7 ROMX_LOAD("portorose_32bit_v101", 0x00000, 0x20000, CRC(405bd668) SHA1(8c6eacff7f6784fa1d38344d594c7e52ac828a23), ROM_BIOS(1) ) ROM_REGION( 0x8000, "bavaria", 0 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( lyon16 ) +ROM_START( lyon16 ) // V207 EC82 5805 ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000, CRC(497bd41a) SHA1(3ffefeeac694f49997c10d248ec6a7aa932898a4) ) ROM_LOAD16_BYTE("lyon16od.bin", 0x00001, 0x10000, CRC(f9de3f54) SHA1(4060e29566d2f40122ccde3c1f84c94a9c1ed54f) ) @@ -520,7 +504,7 @@ ROM_START( lyon16 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( lyon32 ) +ROM_START( lyon32 ) // V207 AE64 5805 ROM_REGION32_BE( 0x20000, "maincpu", 0 ) ROM_LOAD("lyon32.bin", 0x00000, 0x20000, CRC(5c128b06) SHA1(954c8f0d3fae29900cb1e9c14a41a9a07a8e185f) ) @@ -528,7 +512,7 @@ ROM_START( lyon32 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( van16 ) +ROM_START( van16 ) // V309 C8F3 18D3 ROM_REGION16_BE( 0x40000, "maincpu", 0 ) ROM_LOAD16_BYTE("va16even.bin", 0x00000, 0x20000, CRC(e87602d5) SHA1(90cb2767b4ae9e1b265951eb2569b9956b9f7f44) ) ROM_LOAD16_BYTE("va16odd.bin", 0x00001, 0x20000, CRC(585f3bdd) SHA1(90bb94a12d3153a91e3760020e1ea2a9eaa7ec0a) ) @@ -537,7 +521,7 @@ ROM_START( van16 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( van32 ) +ROM_START( van32 ) // V309 3FD3 18D3 ROM_REGION32_BE( 0x40000, "maincpu", 0 ) ROM_LOAD("vanc32.bin", 0x00000, 0x40000, CRC(f872beb5) SHA1(9919f207264f74e2b634b723b048ae9ca2cefbc7) ) @@ -547,16 +531,16 @@ ROM_END ROM_START( gen32 ) ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_SYSTEM_BIOS( 0, "v401", "V4.01" ) + ROM_SYSTEM_BIOS( 0, "v401", "V4.01" ) // V401 D1BB 5A88 ROMX_LOAD("gen32_41.bin", 0x00000, 0x40000, CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c), ROM_BIOS(0) ) - ROM_SYSTEM_BIOS( 1, "v400", "V4.00" ) + ROM_SYSTEM_BIOS( 1, "v400", "V4.00" ) // V400 3B95 5A88 ROMX_LOAD("gen32_4.bin", 0x00000, 0x40000, CRC(6cc4da88) SHA1(ea72acf9c67ed17c6ac8de56a165784aa629c4a1), ROM_BIOS(1) ) ROM_REGION( 0x8000, "bavaria", 0 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( gen32l ) +ROM_START( gen32l ) // V500 EDC1 B0D1 ROM_REGION32_BE( 0x40000, "maincpu", 0 ) ROM_LOAD("gen32l.bin", 0x00000, 0x40000, CRC(853baa4e) SHA1(946951081d4e91e5bdd9e93d0769568a7fe79bad) ) @@ -564,7 +548,7 @@ ROM_START( gen32l ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( lond16 ) +ROM_START( lond16 ) // V500 5ED1 B0D1 ROM_REGION16_BE( 0x40000, "maincpu", 0 ) ROM_LOAD16_BYTE("london_program_68000_module_even", 0x00000, 0x20000, CRC(68cfc2de) SHA1(93b551180f01f8ed6991c082795cd9ead922179a) ) ROM_LOAD16_BYTE("london_program_68000_module_odd", 0x00001, 0x20000, CRC(2d75e2cf) SHA1(2ec9222c95f4be9667fb3b4be1b6f90fd4ad11c4) ) @@ -573,7 +557,7 @@ ROM_START( lond16 ) ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) ROM_END -ROM_START( lond32 ) +ROM_START( lond32 ) // V500 DF8B B0D1 ROM_REGION32_BE( 0x40000, "maincpu", 0 ) ROM_LOAD("london_program_68020_module", 0x00000, 0x40000, CRC(3225b8da) SHA1(fd8f6f4e9c03b6cdc86d8405e856c26041bfad12) ) @@ -598,7 +582,7 @@ CONS( 1990, lyon32, 0, 0, port32, port32, mmodular_state, empty_ini CONS( 1990, lyon16, lyon32, 0, port16, port16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Lyon 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1991, van32, 0, 0, van32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1991, van16, van32, 0, van16, port16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1993, gen32, 0, 0, gen32, gen32, mmodular_state, init_gen32, "Hegener + Glaser", "Mephisto Genius 68030", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1996, gen32l, gen32, 0, gen32, gen32, mmodular_state, init_gen32, "Richard Lang", "Mephisto Genius 68030 (London upgrade)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1993, gen32, 0, 0, gen32, gen32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Genius 68030", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1996, gen32l, gen32, 0, gen32, gen32, mmodular_state, empty_init, "Richard Lang", "Mephisto Genius 68030 (London upgrade)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1996, lond32, 0, 0, van32, port32, mmodular_state, empty_init, "Richard Lang", "Mephisto London 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) // for alm32/port32/lyon32/van32 CONS( 1996, lond16, lond32, 0, van16, port16, mmodular_state, empty_init, "Richard Lang", "Mephisto London 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) // for alm16/port16/lyon16/van16 diff --git a/src/mame/drivers/mephisto_modular_tm.cpp b/src/mame/drivers/mephisto_modular_tm.cpp new file mode 100644 index 00000000000..473bff3e715 --- /dev/null +++ b/src/mame/drivers/mephisto_modular_tm.cpp @@ -0,0 +1,285 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** + +Mephisto Turniermaschinen (dedicated in-house chesscomputers used at tournaments), +and their limited-release home versions. These are mephisto_modular hardware +generation, see that driver for more information. + +The Bavaria board does not work on these. Not only does it not have the connector +for it, but no software 'driver' either. + +Mephisto TM Almeria is not on this hardware. + +Mephisto Berlin 68030 is an unreleased dev version, an update to Vancouver, +not used in any tournament. Internal string and version matches Vancouver 68030, +but ROM has many differences. + +Hardware notes: + +V(Verkauf?) home version: +- 68030 @ 36MHz (not sure about type, big heatsink in the way) +- 256KB SRAM (8*TC55465P-25), 128KB or 256KB ROM +- 2MB DRAM (16*TC514256AP-70) +- 8KB battery-backed SRAM (TC5565PL-15) +- 8*8 LEDs, magnets chessboard + +T(Turnier) tournament version: (differences) +- XC68030RC50B, CPU frequency tuned for tournament (see set_cpu_freq) +- 3 more 2MB DRAM rows + +After boot, it copies ROM to RAM, probably to circumvent waitstates on slow ROM. + +******************************************************************************/ + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "machine/bankdev.h" +#include "machine/nvram.h" +#include "machine/timer.h" +#include "machine/mmboard.h" + +// internal artwork +#include "mephisto_modular_tm.lh" // clickable + + +namespace { + +class mmtm_state : public driver_device +{ +public: + mmtm_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_rom(*this, "maincpu"), + m_mainram(*this, "mainram"), + m_disable_bootrom(*this, "disable_bootrom"), + m_fake(*this, "FAKE") + { } + + // machine drivers + void mmtm_v(machine_config &config); + void mmtm_t(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); } + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + // devices/pointers + required_device m_maincpu; + required_region_ptr m_rom; + required_shared_ptr m_mainram; + required_device m_disable_bootrom; + optional_ioport m_fake; + + // address maps + void mmtm_2m_map(address_map &map); + void mmtm_8m_map(address_map &map); + void nvram_map(address_map &map); + + bool m_bootrom_enabled; + TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { m_bootrom_enabled = false; } + DECLARE_READ32_MEMBER(bootrom_r) { return (m_bootrom_enabled) ? m_rom[offset] : m_mainram[offset]; } + + void set_cpu_freq(); +}; + +void mmtm_state::machine_start() +{ + save_item(NAME(m_bootrom_enabled)); +} + +void mmtm_state::machine_reset() +{ + set_cpu_freq(); + + // disable bootrom after reset + m_bootrom_enabled = true; + m_disable_bootrom->adjust(m_maincpu->cycles_to_attotime(50)); +} + +void mmtm_state::set_cpu_freq() +{ + // "Mephisto X" were usually overclocked at tournaments + // rare versions sold to fans seen overclocked at 60MHz or 66MHz + // default frequency of TM version is 50MHz (also matches beeper pitch with V version) + ioport_value val = m_fake.read_safe(0); + + static const XTAL xtal[] = { 36_MHz_XTAL, 50_MHz_XTAL, 60_MHz_XTAL, 66_MHz_XTAL }; + m_maincpu->set_unscaled_clock(xtal[val]); + + // lcd busy flag timing problem when overclocked + subdevice("display:hd44780")->set_busy_factor((val > 1) ? 0.75 : 1.0); +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void mmtm_state::nvram_map(address_map &map) +{ + // nvram is 8-bit (8KB) - this makes sure that endianness is correct + map(0x0000, 0x1fff).ram().share("nvram"); +} + +void mmtm_state::mmtm_2m_map(address_map &map) +{ + map(0x00000000, 0x0003ffff).ram().share("mainram"); + map(0x00000000, 0x0000000b).r(FUNC(mmtm_state::bootrom_r)); + map(0x80000000, 0x801fffff).ram(); + map(0xf0000000, 0xf003ffff).rom().region("maincpu", 0); + map(0xfc000000, 0xfc001fff).m("nvram_map", FUNC(address_map_bank_device::amap8)); + map(0xfc020004, 0xfc020007).portr("KEY1"); + map(0xfc020008, 0xfc02000b).portr("KEY2"); + map(0xfc020010, 0xfc020013).portr("KEY3"); + map(0xfc040000, 0xfc040000).w("display", FUNC(mephisto_display_modul_device::latch_w)); + map(0xfc060000, 0xfc060000).w("display", FUNC(mephisto_display_modul_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)); +} + +void mmtm_state::mmtm_8m_map(address_map &map) +{ + mmtm_2m_map(map); + map(0x80200000, 0x803fffff).ram(); + map(0x80400000, 0x805fffff).ram(); + map(0x80600000, 0x807fffff).ram(); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( mmtm_v ) + PORT_START("KEY1") + PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) + PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) + + PORT_START("KEY2") + PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) + PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) + + PORT_START("KEY3") + PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) + PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) +INPUT_PORTS_END + +static INPUT_PORTS_START( mmtm_t ) + PORT_INCLUDE( mmtm_v ) + + PORT_START("FAKE") + PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmtm_state, cpu_freq, 0) + PORT_CONFSETTING( 0x01, "50MHz" ) + PORT_CONFSETTING( 0x02, "60MHz" ) + PORT_CONFSETTING( 0x03, "66MHz" ) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Drivers +******************************************************************************/ + +void mmtm_state::mmtm_v(machine_config &config) +{ + /* basic machine hardware */ + M68030(config, m_maincpu, 36_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &mmtm_state::mmtm_2m_map); + + const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x8000); // through 4060, 375Hz + m_maincpu->set_periodic_int(FUNC(mmtm_state::irq2_line_hold), irq_period); + + TIMER(config, "disable_bootrom").configure_generic(FUNC(mmtm_state::disable_bootrom)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + ADDRESS_MAP_BANK(config, "nvram_map").set_map(&mmtm_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13); + + MEPHISTO_SENSORS_BOARD(config, "board"); + MEPHISTO_DISPLAY_MODUL(config, "display"); + config.set_default_layout(layout_mephisto_modular_tm); +} + +void mmtm_state::mmtm_t(machine_config &config) +{ + mmtm_v(config); + + /* basic machine hardware */ + m_maincpu->set_clock(50_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &mmtm_state::mmtm_8m_map); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( port32t ) // V101 FA1D 1CD7 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("portorose_68030_tournament.bin", 0x00000, 0x20000, CRC(31f4c916) SHA1(d22572d224b7308d0d03617997a1ad90e63403c5) ) +ROM_END + +ROM_START( lyon32t ) // V207 6D28 5805 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("lyon_68030_tournament.bin", 0x00000, 0x20000, CRC(f07856af) SHA1(a1d5191a4ab4518f2df22f10e6e1305bea8afb37) ) +ROM_END + +ROM_START( lyon32t8 ) // T207 3C9F 5805 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("lyon_68030_tournament_8mb.bin", 0x00000, 0x20000, CRC(7b3e6db5) SHA1(28ce87c2d12d92e1a534aaa8dd5489fcf1b42964) ) +ROM_END + +ROM_START( van32t ) // V309 15C8 18D3 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("vancouver_68030_tournament.bin", 0x00000, 0x40000, CRC(7b25c9ec) SHA1(bf955b9521f52341754814a7c0bf5941989c8be6) ) +ROM_END + +ROM_START( van32t8 ) // T309 E04C 18D3 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("vancouver_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(d9f0190b) SHA1(7631d2499baad7b8075a1ca2c49f6544d7020c95) ) +ROM_END + +ROM_START( berl32t8p ) // T309 B138 C981 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("berlin_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(4fa6d99d) SHA1(4cda1ce11136e5055f5307f3de3a29b1d98d4f00) ) +ROM_END + +ROM_START( lond32t ) // V500 BAC6 B0D1 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("london_68030_tournament.bin", 0x00000, 0x40000, CRC(cc7a1a19) SHA1(860b84ac354280cec1cfcc36627e0a6e1d80c108) ) +ROM_END + +ROM_START( lond32t8 ) // T500 854A B0D1 + ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD("london_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(1ef51242) SHA1(7d4ffec7d80789aaf0a9e796baa8dac7ef2c2f1b) ) +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +CONS( 1989, port32t, port32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1990, lyon32t, lyon32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Lyon 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, lyon32t8, lyon32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Lyon", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1991, van32t, van32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1991, van32t8, van32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Vancouver", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1991, berl32t8p, van32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Berlin (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1996, lond32t, lond32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Saitek", "Mephisto London 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // after Saitek took over H+G +CONS( 1996, lond32t8, lond32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Saitek", "Mephisto TM London", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // " diff --git a/src/mame/drivers/novag_supremo.cpp b/src/mame/drivers/novag_supremo.cpp index 1846cd301fa..21c80901770 100644 --- a/src/mame/drivers/novag_supremo.cpp +++ b/src/mame/drivers/novag_supremo.cpp @@ -49,6 +49,7 @@ public: protected: virtual void machine_start() override; +private: // devices/pointers required_device m_maincpu; required_device m_board; diff --git a/src/mame/layout/mephisto_alm16.lay b/src/mame/layout/mephisto_alm16.lay index 5bd9d9b6ffe..dc335c3aa8f 100644 --- a/src/mame/layout/mephisto_alm16.lay +++ b/src/mame/layout/mephisto_alm16.lay @@ -226,8 +226,8 @@ - - + + @@ -238,8 +238,8 @@ - - + + diff --git a/src/mame/layout/mephisto_alm32.lay b/src/mame/layout/mephisto_alm32.lay index cd71d3be41e..01c2b467290 100644 --- a/src/mame/layout/mephisto_alm32.lay +++ b/src/mame/layout/mephisto_alm32.lay @@ -226,8 +226,8 @@ - - + + @@ -238,8 +238,8 @@ - - + + diff --git a/src/mame/layout/mephisto_gen32.lay b/src/mame/layout/mephisto_gen32.lay index caef9774c86..5690e4b4f65 100644 --- a/src/mame/layout/mephisto_gen32.lay +++ b/src/mame/layout/mephisto_gen32.lay @@ -226,8 +226,8 @@ - - + + @@ -238,8 +238,8 @@ - - + + diff --git a/src/mame/layout/mephisto_modular_tm.lay b/src/mame/layout/mephisto_modular_tm.lay new file mode 100644 index 00000000000..fe0e54f2439 --- /dev/null +++ b/src/mame/layout/mephisto_modular_tm.lay @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/machine/mmboard.cpp b/src/mame/machine/mmboard.cpp index a4d5d7fcd63..b85c7c56e38 100644 --- a/src/mame/machine/mmboard.cpp +++ b/src/mame/machine/mmboard.cpp @@ -114,6 +114,7 @@ void mephisto_board_device::device_reset() { m_mux = 0x00; m_led_data = 0x00; + update_led_pwm(); } WRITE8_MEMBER( mephisto_board_device::refresh_leds_w ) @@ -141,13 +142,13 @@ READ8_MEMBER( mephisto_board_device::mux_r ) WRITE8_MEMBER( mephisto_board_device::mux_w ) { m_mux = data; - m_led_pwm->matrix(~m_mux, m_led_data); + update_led_pwm(); } WRITE8_MEMBER( mephisto_board_device::led_w ) { m_led_data = data; - m_led_pwm->matrix(~m_mux, m_led_data); + update_led_pwm(); } diff --git a/src/mame/machine/mmboard.h b/src/mame/machine/mmboard.h index 0670acdd6e1..425495dc9d5 100644 --- a/src/mame/machine/mmboard.h +++ b/src/mame/machine/mmboard.h @@ -52,6 +52,7 @@ protected: void set_config(machine_config &config, sensorboard_device::sb_type board_type); DECLARE_WRITE8_MEMBER(refresh_leds_w); + void update_led_pwm() { m_led_pwm->matrix(~m_mux, m_led_data); } required_device m_board; required_device m_led_pwm; @@ -98,6 +99,8 @@ public: // construction/destruction mephisto_display_modul_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + hd44780_device *get() { return m_lcdc; } + DECLARE_WRITE8_MEMBER(latch_w); DECLARE_WRITE8_MEMBER(io_w); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 9d80163b498..66024c230c9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -21883,6 +21883,16 @@ gen32l // 1996 Mephisto Genius 68030 London Upgrade lond16 // 1996 Mephisto London 16 Bit lond32 // 1996 Mephisto London 32 Bit +@source:mephisto_modular_tm.cpp +port32t +lyon32t +lyon32t8 +van32t +van32t8 +berl32t8p +lond32t +lond32t8 + @source:mephisto_mondial68k.cpp mondl68k // 1988 Mephisto Mondial 68000XL diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 089bbe480cb..f097889c05e 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -494,6 +494,7 @@ mephisto_mm1.cpp mephisto_mm2.cpp mephisto_modena.cpp mephisto_modular.cpp +mephisto_modular_tm.cpp mephisto_mondial68k.cpp mephisto_montec.cpp mephisto_polgar.cpp -- cgit v1.2.3