diff options
Diffstat (limited to 'src/mame/drivers/mephisto_modular.cpp')
-rw-r--r-- | src/mame/drivers/mephisto_modular.cpp | 622 |
1 files changed, 0 insertions, 622 deletions
diff --git a/src/mame/drivers/mephisto_modular.cpp b/src/mame/drivers/mephisto_modular.cpp deleted file mode 100644 index 6ae4c9bcdf0..00000000000 --- a/src/mame/drivers/mephisto_modular.cpp +++ /dev/null @@ -1,622 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Dirk Verwiebe, Cowering, Sandro Ronco, hap -/****************************************************************************** - -Hegener + Glaser Mephisto chesscomputers with plugin modules -3rd generation (2nd gen is Glasgow/Amsterdam, 1st gen is MM series) - -After Roma, H+G started naming the different versions 16 Bit/32 Bit instead of 68000/68020. -With Genius and the TM versions, they still applied "68030". - -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. The engine is the same as -Saitek's 1996 Mephisto London 68030 (limited release TM version). - -Hardware notes: - -Almeria 16 Bit, Lyon 16 Bit: -- MC68HC000FN12, 12.288MHz XTAL -- 128KB ROM (2*27C512) -- 512KB RAM (4*TC514256AP-10, or equivalent) - -Portorose 32 Bit: -- MC68020RC12E, 12.288MHz XTAL -- 128KB ROM (TC5710000-20) -- 1MB RAM (8*TC514256AP-70) - -Genius 68030: -- M68EC030RP40B, 33.3330MHz XTAL, 6.144MHz XTAL -- 256KB ROM (M27C2001) -- 512+256 KB RAM (TC518512PL-10, 8*TC55465P-20) - -Display Modul: -- HD44780, 2-line LCD display -- 8KB RAM (TC5565APL-15L), battery -- piezo speaker - -For the dedicated tournament machines, see mephisto_modular_tm.cpp - -Undocumented buttons: -- holding ENTER and LEFT cursor on boot runs diagnostics -- holding CLEAR on boot will clear the battery backed RAM - -TODO: -- match I/S= diag speed test with real hardware (good test for proper waitstates), - especially gen32 is way too fast when comparing sound pitch - -=============================================================================== - -Bavaria piece recognition board: - _______________________________________________ -| | -| 74HC21 74HC74 74HC238 | -| 74HC4040 74HC574 74HC173 74HC374 | -| ROM XTAL 74HC368 74HC374 | -| 74HC4024 74HC32 74HC139 74HC374 | -|_______________________________________________| - -XTAL = 7.37280MHz -ROM = TC57256AD-12, sine table (not used in MAME) - -Only usable with Weltmeister modules, Portorose until London (aka this MAME driver). -It does not work on Portorose 1.01, even though it detects the Bavaria board. -See German patent DE4207534 for detailed description. - -Each piece has a Tank circuit, and in each square of the board there is a coil. -By scanning all the squares at different frequencies, the resonance frequency -of every piece is obtained in order to identify it. - -Coil resonance frequency: -wJ, bJ, wK, bK, wQ, bQ, wP, bP, wB, bB, wN, bN, wR, bR (J = Joker) -460, 421, 381, 346, 316, 289, 259, 238, 217, 203, 180, 167, 154, 138 kHz -14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 piece ID - -In MAME, to switch between the magnets chessboard and the Bavaria board, there's -a configuration port. It's also doable by clicking on the sensorboard UI header -(where it says "SB.MAGNETS" or "SB.BAVARIA"). The board gets detected at boot, -so restart or reset(F3) afterwards. - -Reminder: unsupported on Almeria and Portorose 1.01, this is not a bug. - -******************************************************************************/ - -#include "emu.h" - -#include "cpu/m68000/m68000.h" -#include "machine/bankdev.h" -#include "machine/nvram.h" -#include "machine/timer.h" -#include "machine/mmboard.h" -#include "video/mmdisplay2.h" - -// internal artwork -#include "mephisto_alm16.lh" // clickable -#include "mephisto_alm32.lh" // clickable -#include "mephisto_gen32.lh" // clickable - - -namespace { - -class mmodular_state : public driver_device -{ -public: - mmodular_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_board(*this, "board"), - m_bav_busy(*this, "bav_busy"), - m_fake(*this, "FAKE") - { } - - // machine configs - void alm16(machine_config &config); - void alm32(machine_config &config); - void port16(machine_config &config); - void port32(machine_config &config); - void van16(machine_config &config); - void van32(machine_config &config); - void gen32(machine_config &config); - - DECLARE_INPUT_CHANGED_MEMBER(switch_sensor_type) { set_sbtype(newval); } - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - -private: - // devices/pointers - 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); - void alm32_mem(address_map &map); - void port16_mem(address_map &map); - void port32_mem(address_map &map); - void van16_mem(address_map &map); - void van32_mem(address_map &map); - void gen32_mem(address_map &map); - void nvram_map(address_map &map); - - // I/O handlers - void bavaria_w(u8 data); - u8 bavaria1_r(); - u8 bavaria2_r(); - - u8 spawn_cb(offs_t offset); - void set_sbtype(ioport_value newval); - - u8 m_bav_data = 0; -}; - -void mmodular_state::machine_start() -{ - save_item(NAME(m_bav_data)); -} - -void mmodular_state::machine_reset() -{ - m_bav_data = 0; - set_sbtype(m_fake.read_safe(0) & 1); -} - - - -/****************************************************************************** - 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; -} - -void mmodular_state::bavaria_w(u8 data) -{ - if (!m_board->get()->is_inductive()) - return; - - // d0-d5: select square - // d6: no function? - // d7: start search - if (m_bav_data & ~data & 0x80) - m_bav_busy->adjust(attotime::from_usec(3000)); - - m_bav_data = data; -} - -u8 mmodular_state::bavaria1_r() -{ - if (!m_board->get()->is_inductive()) - return 0; - - // d0-d3: piece id - // other: unused? - static const u8 piece_id[0x10] = - { 0, 8, 4, 6, 2, 10, 12, 7, 3, 5, 1, 9, 11, 14, 13, 0 }; - - int x = m_bav_data >> 3 & 7; - int y = m_bav_data & 7; - - return piece_id[m_board->get()->read_sensor(x, y) & 0xf]; -} - -u8 mmodular_state::bavaria2_r() -{ - if (!m_board->get()->is_inductive()) - return 0; - - // d7: busy signal - // other: unused? - return m_bav_busy->enabled() ? 0x80 : 0; -} - - - -/****************************************************************************** - Address Maps -******************************************************************************/ - -void mmodular_state::nvram_map(address_map &map) -{ - // nvram is 8-bit (8KB) - map(0x0000, 0x1fff).ram().share("nvram"); -} - -void mmodular_state::alm16_mem(address_map &map) -{ - map(0x000000, 0x01ffff).rom(); - map(0x400000, 0x47ffff).ram(); - map(0x800000, 0x803fff).m("nvram_map", FUNC(address_map_bank_device::amap8)).umask16(0xff00); - map(0xc00000, 0xc00000).r("board", FUNC(mephisto_board_device::input_r)); // 0xff on Bavaria - map(0xc80000, 0xc80000).w("board", FUNC(mephisto_board_device::mux_w)); - map(0xd00000, 0xd00000).w("board", FUNC(mephisto_board_device::led_w)); - map(0xd00000, 0xd00001).nopr(); // clr.b - map(0xf00000, 0xf00003).portr("KEY1"); - map(0xf00004, 0xf00007).portr("KEY2"); - map(0xf00008, 0xf0000b).portr("KEY3"); - 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) -{ - alm16_mem(map); - - map(0xe80002, 0xe80002).r(FUNC(mmodular_state::bavaria1_r)); - map(0xe80004, 0xe80004).w(FUNC(mmodular_state::bavaria_w)); - map(0xe80006, 0xe80006).r(FUNC(mmodular_state::bavaria2_r)); -} - -void mmodular_state::van16_mem(address_map &map) -{ - port16_mem(map); - - map(0x020000, 0x03ffff).rom(); -} - - -void mmodular_state::alm32_mem(address_map &map) -{ - map(0x00000000, 0x0001ffff).rom(); - map(0x40000000, 0x400fffff).ram(); - map(0x800000ec, 0x800000ef).portr("KEY1"); - map(0x800000f4, 0x800000f7).portr("KEY2"); - map(0x800000f8, 0x800000fb).portr("KEY3"); - 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_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); -} - -void mmodular_state::port32_mem(address_map &map) -{ - alm32_mem(map); - - map(0x98000004, 0x98000004).r(FUNC(mmodular_state::bavaria1_r)); - map(0x98000008, 0x98000008).w(FUNC(mmodular_state::bavaria_w)); - map(0x9800000c, 0x9800000c).r(FUNC(mmodular_state::bavaria2_r)); -} - -void mmodular_state::van32_mem(address_map &map) -{ - port32_mem(map); - - map(0x00020000, 0x0003ffff).rom(); -} - - -void mmodular_state::gen32_mem(address_map &map) -{ - map(0x00000000, 0x0003ffff).rom(); - 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)); - map(0xd800000c, 0xd800000c).r(FUNC(mmodular_state::bavaria2_r)); - 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"); - map(0xf0000010, 0xf0000013).portr("KEY3"); -} - - - -/****************************************************************************** - Input Ports -******************************************************************************/ - -static INPUT_PORTS_START( bavaria ) - PORT_START("FAKE") - 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 - -static INPUT_PORTS_START( gen32 ) - PORT_INCLUDE( bavaria ) - - PORT_START("KEY1") - PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) - - PORT_START("KEY2") - PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) - PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) - - PORT_START("KEY3") - PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) - PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) -INPUT_PORTS_END - -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) - - PORT_START("KEY2") - PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) - PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) - - PORT_START("KEY3") - PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) - 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( 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) - - PORT_START("KEY2") - PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) - PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) - - PORT_START("KEY3") - PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) - PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) -INPUT_PORTS_END - -static INPUT_PORTS_START( port16 ) - PORT_INCLUDE( bavaria ) - PORT_INCLUDE( alm16 ) -INPUT_PORTS_END - -static INPUT_PORTS_START( port32 ) - PORT_INCLUDE( bavaria ) - PORT_INCLUDE( alm32 ) -INPUT_PORTS_END - - - -/****************************************************************************** - Machine Configs -******************************************************************************/ - -void mmodular_state::alm16(machine_config &config) -{ - /* basic machine hardware */ - M68000(config, m_maincpu, 12.288_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm16_mem); - m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), attotime::from_hz(600)); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - ADDRESS_MAP_BANK(config, "nvram_map").set_map(&mmodular_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13); - - MEPHISTO_SENSORS_BOARD(config, m_board); - subdevice<sensorboard_device>("board:board")->set_spawnpoints(12+2); // 2 jokers - subdevice<sensorboard_device>("board:board")->spawn_cb().set(FUNC(mmodular_state::spawn_cb)); - subdevice<sensorboard_device>("board:board")->set_nvram_enable(true); - - TIMER(config, "bav_busy").configure_generic(nullptr); - - /* video hardware */ - MEPHISTO_DISPLAY_MODULE2(config, "display"); - config.set_default_layout(layout_mephisto_alm16); -} - -void mmodular_state::port16(machine_config &config) -{ - alm16(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::port16_mem); -} - -void mmodular_state::van16(machine_config &config) -{ - port16(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::van16_mem); -} - -void mmodular_state::alm32(machine_config &config) -{ - alm16(config); - - /* basic machine hardware */ - M68020(config.replace(), m_maincpu, 12.288_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm32_mem); - - const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x4000); // 750Hz - m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), irq_period); - - config.set_default_layout(layout_mephisto_alm32); -} - -void mmodular_state::port32(machine_config &config) -{ - alm32(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::port32_mem); -} - -void mmodular_state::van32(machine_config &config) -{ - port32(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::van32_mem); -} - -void mmodular_state::gen32(machine_config &config) -{ - van32(config); - - /* basic machine hardware */ - M68EC030(config.replace(), m_maincpu, 33.333_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::gen32_mem); - - 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); // problem with waitstates - config.set_default_layout(layout_mephisto_gen32); -} - - - -/****************************************************************************** - ROM Definitions -******************************************************************************/ - -// sinus table lookup ROM for Mephisto Bavaria chessboard (unused on MAME) -#define BAVARIA_BOARD_ROM() \ - ROM_REGION( 0x8000, "bavaria", 0 ) \ - ROM_LOAD("sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) ) - -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( alm16 ) // U013 65CE 2FCE - ROM_REGION16_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD16_BYTE("almeria_16bit_v013_even", 0x00000, 0x10000, CRC(ee5b6ec4) SHA1(30920c1b9e16ffae576da5afa0b56da59ada3dbb) ) - ROM_LOAD16_BYTE("almeria_16bit_v013_odd", 0x00001, 0x10000, CRC(d0be4ee4) SHA1(d36c074802d2c9099cd44e75f9de3fc7d1fd9908) ) -ROM_END - -ROM_START( port32 ) // V104 3F63 1CD7 - ROM_REGION32_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD("portorose_32bit_v104", 0x00000, 0x20000, CRC(66a6c84c) SHA1(b71035f91a452901e1765e351fb36c3f18888e42) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( port32a ) // V103 C734 1CD7 - ROM_REGION32_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD("portorose_32bit_v103", 0x00000, 0x20000, CRC(02c091b3) SHA1(f1d48e73b24093288dbb8a06617bb62420c07508) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( port32b ) // V101 7805 1CD7 - ROM_REGION32_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD("portorose_32bit_v101", 0x00000, 0x20000, CRC(405bd668) SHA1(8c6eacff7f6784fa1d38344d594c7e52ac828a23) ) - - BAVARIA_BOARD_ROM() -ROM_END - -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) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( lyon32 ) // V207 AE64 5805 - ROM_REGION32_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD("lyon32.bin", 0x00000, 0x20000, CRC(5c128b06) SHA1(954c8f0d3fae29900cb1e9c14a41a9a07a8e185f) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( lyon16 ) // V207 EC82 5805 - ROM_REGION16_BE( 0x20000, "maincpu", 0 ) - ROM_LOAD16_BYTE("lyon_16bit_even_v207", 0x00000, 0x10000, CRC(497bd41a) SHA1(3ffefeeac694f49997c10d248ec6a7aa932898a4) ) - ROM_LOAD16_BYTE("lyon_16bit_odd_v207", 0x00001, 0x10000, CRC(f9de3f54) SHA1(4060e29566d2f40122ccde3c1f84c94a9c1ed54f) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( van32 ) // V309 3FD3 18D3 - ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD("vanc32.bin", 0x00000, 0x40000, CRC(f872beb5) SHA1(9919f207264f74e2b634b723b048ae9ca2cefbc7) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( van16 ) // V309 C8F3 18D3 - ROM_REGION16_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD16_BYTE("vancouver_16_even_v309", 0x00000, 0x20000, CRC(e87602d5) SHA1(90cb2767b4ae9e1b265951eb2569b9956b9f7f44) ) - ROM_LOAD16_BYTE("vancouver_16_odd_v309", 0x00001, 0x20000, CRC(585f3bdd) SHA1(90bb94a12d3153a91e3760020e1ea2a9eaa7ec0a) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( gen32 ) // V401 D1BB 5A88 - ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD("genius_68030_version_4.01", 0x00000, 0x40000, CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( gen32a ) // V400 3B95 5A88 - ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD("gen32_4.bin", 0x00000, 0x40000, CRC(6cc4da88) SHA1(ea72acf9c67ed17c6ac8de56a165784aa629c4a1) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( gen32l ) // V500 EDC1 B0D1 - ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD("gen32l.bin", 0x00000, 0x40000, CRC(853baa4e) SHA1(946951081d4e91e5bdd9e93d0769568a7fe79bad) ) - - BAVARIA_BOARD_ROM() -ROM_END - -ROM_START( lond32 ) // V500 DF8B B0D1 - ROM_REGION32_BE( 0x40000, "maincpu", 0 ) - ROM_LOAD("london_program_68020_module", 0x00000, 0x40000, CRC(3225b8da) SHA1(fd8f6f4e9c03b6cdc86d8405e856c26041bfad12) ) - - BAVARIA_BOARD_ROM() -ROM_END - -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) ) - - BAVARIA_BOARD_ROM() -ROM_END - -} // anonymous namespace - - - -/****************************************************************************** - Drivers -******************************************************************************/ - -/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1988, alm32, 0, 0, alm32, alm32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Almeria 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, alm16, alm32, 0, alm16, alm16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Almeria 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) - -CONS( 1989, port32, 0, 0, port32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 32 Bit (v1.04)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, port32a, port32, 0, port32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 32 Bit (v1.03)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, port32b, port32, 0, port32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 32 Bit (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, port16, port32, 0, port16, port16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 16 Bit (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) - -CONS( 1990, lyon32, 0, 0, port32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Lyon 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -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, empty_init, "Hegener + Glaser", "Mephisto Genius 68030 (v4.01)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1993, gen32a, gen32, 0, gen32, gen32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Genius 68030 (v4.00)", 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 |