summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mephisto_modular.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mephisto_modular.cpp')
-rw-r--r--src/mame/drivers/mephisto_modular.cpp140
1 files changed, 62 insertions, 78 deletions
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<cpu_device> m_maincpu;
required_device<mephisto_board_device> m_board;
required_device<timer_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<hd44780_device>("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