From ba646af6d82b1604ed4eeeb2adc77ed06e3b2104 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 11 Apr 2021 00:02:39 +0200 Subject: mephisto_glasgow.cpp: split driver file into glasgow/amsterdam --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/mephisto_amsterdam.cpp | 263 ++++++++++++++++++++++++ src/mame/drivers/mephisto_glasgow.cpp | 349 ++++++++------------------------ src/mame/drivers/mephisto_mm1.cpp | 94 +++------ src/mame/drivers/mephisto_mm2.cpp | 29 ++- src/mame/layout/mephisto_amsterdam.lay | 39 ++-- src/mame/layout/mephisto_glasgow.lay | 33 ++- src/mame/layout/mephisto_mirage.lay | 28 +-- src/mame/layout/mephisto_mm1.lay | 28 +-- src/mame/mame.lst | 12 +- src/mame/mess.flt | 1 + 11 files changed, 465 insertions(+), 412 deletions(-) create mode 100644 src/mame/drivers/mephisto_amsterdam.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 1cb299e8302..a0a657086f2 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2534,6 +2534,7 @@ files { createMESSProjects(_target, _subtarget, "hegener") files { MAME_DIR .. "src/mame/drivers/mephisto_academy.cpp", + MAME_DIR .. "src/mame/drivers/mephisto_amsterdam.cpp", MAME_DIR .. "src/mame/drivers/mephisto_berlin.cpp", MAME_DIR .. "src/mame/drivers/mephisto_brikett.cpp", MAME_DIR .. "src/mame/drivers/mephisto_glasgow.cpp", diff --git a/src/mame/drivers/mephisto_amsterdam.cpp b/src/mame/drivers/mephisto_amsterdam.cpp new file mode 100644 index 00000000000..eb0ad914b60 --- /dev/null +++ b/src/mame/drivers/mephisto_amsterdam.cpp @@ -0,0 +1,263 @@ +// license:BSD-3-Clause +// copyright-holders:Dirk Verwiebe, Cowering, hap +/****************************************************************************** + +Mephisto Amsterdam (2-ROM hardware version) + +The base hardware components are the same as Glasgow, but the 32-bit versions +have more RAM and a faster CPU. + +TODO: +- waitstates, same as mephisto_glasgow.cpp + +******************************************************************************/ + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "machine/mmboard.h" +#include "sound/dac.h" +#include "video/mmdisplay1.h" + +#include "speaker.h" + +// internal artwork +#include "mephisto_amsterdam.lh" + + +namespace { + +class amsterdam_state : public driver_device +{ +public: + amsterdam_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_display(*this, "display") + , m_dac(*this, "dac") + , m_keys(*this, "KEY.%u", 0) + { } + + DECLARE_INPUT_CHANGED_MEMBER(reset_button); + + void amsterdam(machine_config &config); + void dallas32(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_device m_board; + required_device m_display; + required_device m_dac; + required_ioport_array<2> m_keys; + + void amsterd_mem(address_map &map); + void dallas32_mem(address_map &map); + + void led_w(offs_t offset, u8 data); + void dac_w(u8 data); + u8 keys_r(); + + u8 m_kp_select = 0; +}; + +void amsterdam_state::machine_start() +{ + save_item(NAME(m_kp_select)); +} + +void amsterdam_state::machine_reset() +{ + m_display->reset(); +} + +INPUT_CHANGED_MEMBER(amsterdam_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(); + } +} + + + +/****************************************************************************** + I/O +******************************************************************************/ + +void amsterdam_state::led_w(offs_t offset, u8 data) +{ + m_board->led_w(data); + + // lcd strobe is shared with keypad select + m_kp_select = offset >> 7; + m_display->strobe_w(m_kp_select); +} + +void amsterdam_state::dac_w(u8 data) +{ + // d0: speaker out + m_dac->write(BIT(data, 0)); +} + +u8 amsterdam_state::keys_r() +{ + return m_keys[m_kp_select & 1]->read(); +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void amsterdam_state::amsterd_mem(address_map &map) +{ + map(0x000000, 0x00ffff).rom(); + map(0x800002, 0x800002).w(m_display, FUNC(mephisto_display1_device::data_w)); + map(0x800004, 0x800004).w(FUNC(amsterdam_state::dac_w)); + map(0x800008, 0x800009).nopr(); // clr.b + map(0x800008, 0x800008).select(0x80).w(FUNC(amsterdam_state::led_w)); + map(0x800010, 0x800010).w(m_board, FUNC(mephisto_board_device::mux_w)); + map(0x800020, 0x800020).r(m_board, FUNC(mephisto_board_device::input_r)); + map(0x800040, 0x800040).r(FUNC(amsterdam_state::keys_r)); + map(0xffc000, 0xffffff).ram(); // 16KB +} + +void amsterdam_state::dallas32_mem(address_map &map) +{ + map(0x000000, 0x00ffff).rom(); + map(0x010000, 0x01ffff).ram(); // 64KB + map(0x800002, 0x800002).w(m_display, FUNC(mephisto_display1_device::data_w)); + map(0x800004, 0x800004).w(FUNC(amsterdam_state::dac_w)); + map(0x800008, 0x800008).select(0x80).w(FUNC(amsterdam_state::led_w)); + map(0x800010, 0x800010).w(m_board, FUNC(mephisto_board_device::mux_w)); + map(0x800020, 0x800020).r(m_board, FUNC(mephisto_board_device::input_r)); + map(0x800040, 0x800040).r(FUNC(amsterdam_state::keys_r)); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( amsterdam ) + PORT_START("KEY.0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B / 2 / Pawn") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C / 3 / Knight") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D / 4 / Bishop") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E / 5 / Rook") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F / 6 / Queen") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) + + PORT_START("KEY.1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) + 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("LEV") PORT_CODE(KEYCODE_L) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) + 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("G / 7 / King") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_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, amsterdam_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, amsterdam_state, reset_button, 0) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Configs +******************************************************************************/ + +void amsterdam_state::amsterdam(machine_config &config) +{ + /* basic machine hardware */ + M68000(config, m_maincpu, 12_MHz_XTAL); + m_maincpu->set_periodic_int(FUNC(amsterdam_state::irq5_line_hold), attotime::from_hz(50)); + m_maincpu->set_addrmap(AS_PROGRAM, &amsterdam_state::amsterd_mem); + + MEPHISTO_SENSORS_BOARD(config, m_board); + m_board->set_delay(attotime::from_msec(200)); + + /* video hardware */ + MEPHISTO_DISPLAY_MODULE1(config, m_display); + config.set_default_layout(layout_mephisto_amsterdam); + + /* sound hardware */ + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + +void amsterdam_state::dallas32(machine_config &config) +{ + amsterdam(config); + + /* basic machine hardware */ + M68020(config.replace(), m_maincpu, 14_MHz_XTAL); + m_maincpu->set_periodic_int(FUNC(amsterdam_state::irq5_line_hold), attotime::from_hz(50)); + m_maincpu->set_addrmap(AS_PROGRAM, &amsterdam_state::dallas32_mem); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( amsterd ) + ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) + ROM_LOAD16_BYTE("amsterda-u.bin", 0x00000, 0x08000, CRC(0a75514e) SHA1(27daf78b0aba4d7a293b96b3c1fa92f6ee9bcb59) ) + ROM_LOAD16_BYTE("amsterda-l.bin", 0x00001, 0x08000, CRC(6e17d8fa) SHA1(e0f9e57aaa445f6ff7cbe868658ed7bcfa7e31fb) ) +ROM_END + + +ROM_START( dallas32 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("dallas32.epr", 0x000000, 0x10000, CRC(83b9ff3f) SHA1(97bf4cb3c61f8ec328735b3c98281bba44b30a28) ) +ROM_END + +ROM_START( dallas16 ) + ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) + ROM_LOAD16_BYTE("dallas-u.bin", 0x00000, 0x08000, CRC(70b741f7) SHA1(23d55ed0fea127b727d725c367ee1932ff5af39f) ) + ROM_LOAD16_BYTE("dallas-l.bin", 0x00001, 0x08000, CRC(69300ad3) SHA1(57ec1b955b1ddfe722011ff5da68a0cd71af9251) ) +ROM_END + + +ROM_START( roma32 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("roma32.bin", 0x000000, 0x10000, CRC(587d03bf) SHA1(504e9ff958084700076d633f9c306fc7baf64ffd) ) +ROM_END + +ROM_START( roma16 ) + ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) + ROM_LOAD16_BYTE("roma16-u.bin", 0x00000, 0x08000, CRC(111d030f) SHA1(e027f7e7018d28ab794e7730392506056809db6b) ) + ROM_LOAD16_BYTE("roma16-l.bin", 0x00001, 0x08000, CRC(8245ddd2) SHA1(ab048b60fdc4358913a5d07b6fee863b66dd6734) ) +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1985, amsterd, 0, 0, amsterdam, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Amsterdam", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1986, dallas32, 0, 0, dallas32, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68020", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, dallas16, dallas32, 0, amsterdam, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1987, roma32, 0, 0, dallas32, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68020", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, roma16, roma32, 0, amsterdam, amsterdam, amsterdam_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_glasgow.cpp b/src/mame/drivers/mephisto_glasgow.cpp index 794fa4da8db..f4ab6e85c5a 100644 --- a/src/mame/drivers/mephisto_glasgow.cpp +++ b/src/mame/drivers/mephisto_glasgow.cpp @@ -1,15 +1,23 @@ // license:BSD-3-Clause -// copyright-holders:Dirk Verwiebe, Cowering -/*************************************************************************** +// copyright-holders:Dirk Verwiebe, Cowering, hap +// thanks-to:Berger +/****************************************************************************** Mephisto Glasgow 3 S chess computer Dirk V. sp_rinter@gmx.de -68000 CPU -64 KB ROM -16 KB RAM -4 Digit LCD +TODO: +- add waitstates, CPU is 12MHz but with DTACK waitstates for slow EPROMs, + effective speed is less than 10MHz + +=============================================================================== + +Hardware notes: +- 68000 CPU +- 64 KB ROM +- 16 KB RAM +- 4 Digit LCD 3*74LS138 Decoder/Multiplexer 1*74LS74 Dual positive edge triggered D Flip Flop @@ -23,34 +31,18 @@ sp_rinter@gmx.de 1*74LS367 3 State Hex Buffers 1*SG-10 Seiko 4-pin plastic XTAL chip "50H", to IPL0+2 - -How to play (quick guide) -1. You are the white player. -2. Click on the piece to move (LED starts flashing), then click where it goes -3. Computer plays black, it will work out its move and beep. -4. Read the move in the display, or look for the flashing LEDs. -5. Move the computer's piece in the same way you moved yours. -6. You'll need to read the official user manual for advanced features, or if - you get messages such as "Err1". - -TODO: -- add waitstates(applies to glasgow, amsterd, others?), CPU is 12MHz but with DTACK - waitstates for slow EPROMs, effective speed is less than 10MHz -- use mmdisplay1 device -- split driver (glasgow/amsterdam) - -***************************************************************************/ +******************************************************************************/ #include "emu.h" #include "cpu/m68000/m68000.h" #include "machine/mmboard.h" #include "sound/dac.h" +#include "video/mmdisplay1.h" #include "speaker.h" // internal artwork -#include "mephisto_amsterdam.lh" #include "mephisto_glasgow.lh" @@ -62,150 +54,71 @@ public: glasgow_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_dac(*this, "dac") , m_board(*this, "board") - , m_keyboard(*this, "LINE%u", 0) - , m_digits(*this, "digit%u", 0U) + , m_display(*this, "display") + , m_dac(*this, "dac") + , m_keys(*this, "KEY.%u", 0) { } void glasgow(machine_config &config); protected: - void glasgow_lcd_w(u8 data); - void glasgow_lcd_flag_w(u8 data); - u8 glasgow_keys_r(); - void glasgow_keys_w(u8 data); - virtual void machine_start() override; - virtual void machine_reset() override; - - void glasgow_mem(address_map &map); +private: required_device m_maincpu; - required_device m_dac; required_device m_board; - required_ioport_array<2> m_keyboard; - output_finder<4> m_digits; - - u8 m_lcd_shift_counter; - u8 m_led7; - u8 m_key_select; -}; + required_device m_display; + required_device m_dac; + required_ioport_array<2> m_keys; -class amsterd_state : public glasgow_state -{ -public: - using glasgow_state::glasgow_state; + void glasgow_mem(address_map &map); - void amsterd(machine_config &config); - void dallas32(machine_config &config); + void control_w(u8 data); + u8 keys_r(); + void keys_w(u8 data); -protected: - void write_lcd(u8 data); - void write_lcd_flag(u8 data); - void write_beeper(u8 data); - void write_board(u8 data); - u8 read_newkeys(); - - void amsterd_mem(address_map &map); - void dallas32_mem(address_map &map); + u8 m_kp_mux = 0; }; - - -/****************************************************************************** - I/O -******************************************************************************/ - -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 &= 3; -} - -void glasgow_state::glasgow_lcd_flag_w(u8 data) -{ - u8 const lcd_flag = data & 0x81; - - m_dac->write(BIT(lcd_flag, 0)); - - if (lcd_flag) - m_led7 = 255; - else - m_led7 = 0; -} - -u8 glasgow_state::glasgow_keys_r() +void glasgow_state::machine_start() { - // See if any keys pressed - u8 data = 3; - - if (m_key_select == m_keyboard[0]->read()) - data &= 1; - - if (m_key_select == m_keyboard[1]->read()) - data &= 2; - - return data; + save_item(NAME(m_kp_mux)); } -void glasgow_state::glasgow_keys_w(u8 data) -{ - m_key_select = data; -} -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 &= 7; -} +/****************************************************************************** + I/O +******************************************************************************/ -void amsterd_state::write_lcd_flag(u8 data) +void glasgow_state::control_w(u8 data) { - // The key function in the rom expects a value from the - // second key row after writing to here - m_key_select = 1; - - m_led7 = data ? 255 : 0; -} + // d0: speaker out + m_dac->write(BIT(data, 0)); -void amsterd_state::write_board(u8 data) -{ - m_key_select = 0; - m_board->led_w(0); - m_board->mux_w(data); + // d7: lcd strobe + m_display->strobe_w(BIT(data, 7)); } -void amsterd_state::write_beeper(u8 data) +u8 glasgow_state::keys_r() { - m_dac->write(BIT(data, 0)); -} + u8 data = 0; -u8 amsterd_state::read_newkeys() -{ - return m_keyboard[m_key_select & 1]->read(); -} + // d0,d1: multiplexed inputs + for (int i = 0; i < 2; i++) + if (m_kp_mux & m_keys[i]->read()) + data |= 1 << i; -void glasgow_state::machine_start() -{ - m_digits.resolve(); + // reading keypad also clears irq + m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); - save_item(NAME(m_lcd_shift_counter)); - save_item(NAME(m_led7)); - save_item(NAME(m_key_select)); + return ~data; } -void glasgow_state::machine_reset() +void glasgow_state::keys_w(u8 data) { - m_lcd_shift_counter = 0; - m_key_select = 0; - m_led7 = 0; + m_kp_mux = ~data; } @@ -218,38 +131,12 @@ void glasgow_state::glasgow_mem(address_map &map) { map.global_mask(0x1ffff); map(0x000000, 0x00ffff).rom(); - map(0x010000, 0x010000).w(FUNC(glasgow_state::glasgow_lcd_w)); - map(0x010002, 0x010002).rw(FUNC(glasgow_state::glasgow_keys_r), FUNC(glasgow_state::glasgow_keys_w)); - map(0x010004, 0x010004).w(FUNC(glasgow_state::glasgow_lcd_flag_w)); - map(0x010006, 0x010006).rw("board", FUNC(mephisto_board_device::input_r), FUNC(mephisto_board_device::led_w)); - map(0x010008, 0x010008).w("board", FUNC(mephisto_board_device::mux_w)); - map(0x01c000, 0x01ffff).ram(); // 16KB -} - -void amsterd_state::amsterd_mem(address_map &map) -{ - map(0x000000, 0x00ffff).rom(); - map(0x800002, 0x800002).w(FUNC(amsterd_state::write_lcd)); - 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)); - map(0x800088, 0x800088).w("board", FUNC(mephisto_board_device::led_w)); - map(0xffc000, 0xffffff).ram(); // 16KB -} - -void amsterd_state::dallas32_mem(address_map &map) -{ - map(0x000000, 0x00ffff).rom(); - map(0x010000, 0x01ffff).ram(); // 64KB - map(0x800002, 0x800002).w(FUNC(amsterd_state::write_lcd)); - 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)); - map(0x800088, 0x800088).w("board", FUNC(mephisto_board_device::led_w)); + map(0x010000, 0x010000).w(m_display, FUNC(mephisto_display1_device::data_w)); + map(0x010002, 0x010002).rw(FUNC(glasgow_state::keys_r), FUNC(glasgow_state::keys_w)); + map(0x010004, 0x010004).w(FUNC(glasgow_state::control_w)); + map(0x010006, 0x010006).rw(m_board, FUNC(mephisto_board_device::input_r), FUNC(mephisto_board_device::led_w)); + map(0x010008, 0x010008).w(m_board, FUNC(mephisto_board_device::mux_w)); + map(0x01c000, 0x01ffff).ram(); } @@ -258,48 +145,26 @@ void amsterd_state::dallas32_mem(address_map &map) Input Ports ******************************************************************************/ -static INPUT_PORTS_START( new_keyboard ) - PORT_START("LINE0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B / 2 / Pawn") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) +static INPUT_PORTS_START( glasgow ) + PORT_START("KEY.0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C / 3 / Knight") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D / 4 / Bishop") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E / 5 / Rook") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F / 6 / Queen") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) - - PORT_START("LINE1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) - 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("LEV") PORT_CODE(KEYCODE_L) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D / 4 / Bishop") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F / 6 / Queen") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B / 2 / Pawn") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + + PORT_START("KEY.1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E / 5 / Rook") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + 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("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) + 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("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("LEV") PORT_CODE(KEYCODE_L) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G / 7 / King") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) -INPUT_PORTS_END - -static INPUT_PORTS_START( old_keyboard ) - PORT_START("LINE0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Left / Black / 9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C / 3 / Knight") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D / 4 / Bishop") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F / 6 / Queen") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B / 2 / Pawn") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) - - PORT_START("LINE1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E / 5 / Rook") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Right / White / 0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("G / 7 / King") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) INPUT_PORTS_END @@ -312,13 +177,14 @@ void glasgow_state::glasgow(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12_MHz_XTAL); - m_maincpu->set_periodic_int(FUNC(glasgow_state::irq5_line_hold), attotime::from_hz(50)); + m_maincpu->set_periodic_int(FUNC(glasgow_state::irq5_line_assert), attotime::from_hz(50)); m_maincpu->set_addrmap(AS_PROGRAM, &glasgow_state::glasgow_mem); MEPHISTO_SENSORS_BOARD(config, m_board); m_board->set_delay(attotime::from_msec(200)); /* video hardware */ + MEPHISTO_DISPLAY_MODULE1(config, m_display); config.set_default_layout(layout_mephisto_glasgow); /* sound hardware */ @@ -326,26 +192,6 @@ void glasgow_state::glasgow(machine_config &config) DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } -void amsterd_state::amsterd(machine_config &config) -{ - glasgow(config); - - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &amsterd_state::amsterd_mem); - - config.set_default_layout(layout_mephisto_amsterdam); -} - -void amsterd_state::dallas32(machine_config &config) -{ - amsterd(config); - - /* basic machine hardware */ - M68020(config.replace(), m_maincpu, 14_MHz_XTAL); - m_maincpu->set_periodic_int(FUNC(amsterd_state::irq5_line_hold), attotime::from_hz(50)); - m_maincpu->set_addrmap(AS_PROGRAM, &amsterd_state::dallas32_mem); -} - /****************************************************************************** @@ -360,11 +206,6 @@ ROM_START( glasgow ) ROM_LOAD16_BYTE("me3_2_2l.410", 0x08001, 0x04000, CRC(b3f27827) SHA1(864ba897d24024592d08c4ae090aa70a2cc5f213) ) ROM_END -ROM_START( amsterd ) - ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) - ROM_LOAD16_BYTE("amsterda-u.bin", 0x00000, 0x08000, CRC(0a75514e) SHA1(27daf78b0aba4d7a293b96b3c1fa92f6ee9bcb59) ) - ROM_LOAD16_BYTE("amsterda-l.bin", 0x00001, 0x08000, CRC(6e17d8fa) SHA1(e0f9e57aaa445f6ff7cbe868658ed7bcfa7e31fb) ) -ROM_END ROM_START( amsterda ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -374,17 +215,6 @@ ROM_START( amsterda ) ROM_LOAD16_BYTE("bl_4_1", 0x08001, 0x04000, CRC(533e584a) SHA1(0e4510977dc627125c278920492bc137793a9554) ) ROM_END -ROM_START( dallas32 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("dallas32.epr", 0x000000, 0x10000, CRC(83b9ff3f) SHA1(97bf4cb3c61f8ec328735b3c98281bba44b30a28) ) -ROM_END - -ROM_START( dallas16 ) - ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) - ROM_LOAD16_BYTE("dallas-u.bin", 0x00000, 0x08000, CRC(70b741f7) SHA1(23d55ed0fea127b727d725c367ee1932ff5af39f) ) - ROM_LOAD16_BYTE("dallas-l.bin", 0x00001, 0x08000, CRC(69300ad3) SHA1(57ec1b955b1ddfe722011ff5da68a0cd71af9251) ) -ROM_END - ROM_START( dallas16a ) ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) ROM_LOAD16_BYTE("dal_g_pr", 0x00000, 0x04000, CRC(66deade9) SHA1(07ec6b923f2f053172737f1fc94aec84f3ea8da1) ) @@ -393,17 +223,6 @@ ROM_START( dallas16a ) ROM_LOAD16_BYTE("dal_g_bl", 0x08001, 0x04000, CRC(144a15e2) SHA1(c4fcc23d55fa5262f5e01dbd000644a7feb78f32) ) ROM_END -ROM_START( roma32 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("roma32.bin", 0x000000, 0x10000, CRC(587d03bf) SHA1(504e9ff958084700076d633f9c306fc7baf64ffd) ) -ROM_END - -ROM_START( roma16 ) - ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) - ROM_LOAD16_BYTE("roma16-u.bin", 0x00000, 0x08000, CRC(111d030f) SHA1(e027f7e7018d28ab794e7730392506056809db6b) ) - ROM_LOAD16_BYTE("roma16-l.bin", 0x00001, 0x08000, CRC(8245ddd2) SHA1(ab048b60fdc4358913a5d07b6fee863b66dd6734) ) -ROM_END - ROM_START( roma16a ) ROM_REGION16_BE( 0x1000000, "maincpu", 0 ) ROM_LOAD16_BYTE("roma_r_low", 0x00000, 0x04000, CRC(f2312170) SHA1(82a50ba59f74365aa77478adaadbbace6693dcc1) ) @@ -420,16 +239,10 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1984, glasgow, 0, 0, glasgow, old_keyboard, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto III-S Glasgow", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) - -CONS( 1985, amsterd, 0, 0, amsterd, new_keyboard, amsterd_state, empty_init, "Hegener + Glaser", "Mephisto Amsterdam", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1985, amsterda, amsterd, 0, glasgow, old_keyboard, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Amsterdam (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) - -CONS( 1986, dallas32, 0, 0, dallas32, new_keyboard, amsterd_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68020", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, dallas16, dallas32, 0, amsterd, new_keyboard, amsterd_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, dallas16a, dallas32, 0, glasgow, old_keyboard, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68000 (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1984, glasgow, 0, 0, glasgow, glasgow, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto III-S Glasgow", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, roma32, 0, 0, dallas32, new_keyboard, amsterd_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68020", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, roma16, roma32, 0, amsterd, new_keyboard, amsterd_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, roma16a, roma32, 0, glasgow, old_keyboard, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68000 (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +// newer chesscomputers on 4-ROM hardware (see mephisto_amsterdam.cpp for parent sets) +CONS( 1985, amsterda, amsterd, 0, glasgow, glasgow, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Amsterdam (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, dallas16a, dallas32, 0, glasgow, glasgow, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Dallas 68000 (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, roma16a, roma32, 0, glasgow, glasgow, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto Roma 68000 (Glasgow hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/mephisto_mm1.cpp b/src/mame/drivers/mephisto_mm1.cpp index 7464f87d0c3..2d71be6895b 100644 --- a/src/mame/drivers/mephisto_mm1.cpp +++ b/src/mame/drivers/mephisto_mm1.cpp @@ -83,7 +83,7 @@ private: required_device m_maincpu; required_device m_board; required_device m_dac; - required_ioport_array<8> m_inputs; + required_ioport_array<2> m_inputs; // address maps void mirage_map(address_map &map); @@ -97,7 +97,7 @@ private: void sound_w(u8 data); void unknown_w(u8 data); void keypad_w(u8 data); - template DECLARE_READ_LINE_MEMBER(keypad_r); + template DECLARE_READ_LINE_MEMBER(keypad_r); bool m_reset = false; u8 m_kp_mux = 0; @@ -151,17 +151,11 @@ void mm1_state::keypad_w(u8 data) m_kp_mux = ~data; } -template +template READ_LINE_MEMBER(mm1_state::keypad_r) { - u8 data = 0; - // EF3,EF4: multiplexed inputs (keypad) - for (int i = 0; i < 8; i++) - if (BIT(m_kp_mux, i)) - data |= m_inputs[i]->read(); - - return data >> P & 1; + return (m_inputs[N]->read() & m_kp_mux) ? 1 : 0; } @@ -203,69 +197,45 @@ void mm1_state::mm1_io(address_map &map) static INPUT_PORTS_START( mm1 ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E / 5 / Rook") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left / Black / 9") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INFO") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right / White / 0") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("POS") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LEV") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G / 7 / King") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MEM") PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INFO") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left / Black / 9") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right / White / 0") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C / 3 / Knight") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("POS") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("ENT") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D / 4 / Bishop") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LEV") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A / 1") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G / 7 / King") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F / 6 / Queen") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MEM") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B / 2 / Pawn") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C / 3 / Knight") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("ENT") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D / 4 / Bishop") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A / 1") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F / 6 / Queen") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B / 2 / Pawn") INPUT_PORTS_END static INPUT_PORTS_START( mirage ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("LIST") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A / 1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("ENT") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B / 2 / Pawn") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("STA") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C / 3 / Knight") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LEV") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D / 4 / Bishop") PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A / 1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("LIST") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E / 5 / Rook") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("ENT") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Black / 9") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B / 2 / Pawn") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F / 6 / Queen") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("STA") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("White / 0") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C / 3 / Knight") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G / 7 / King") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LEV") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("REV") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D / 4 / Bishop") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Black / 9") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F / 6 / Queen") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("White / 0") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G / 7 / King") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("REV") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8") PORT_START("FAKE") // module came with buttons sensorboard by default PORT_CONFNAME( 0x01, 0x00, "Board Sensors" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mm1_state, mirage_switch_sensor_type, 0) diff --git a/src/mame/drivers/mephisto_mm2.cpp b/src/mame/drivers/mephisto_mm2.cpp index d6f5768d7d1..63b8bd01515 100644 --- a/src/mame/drivers/mephisto_mm2.cpp +++ b/src/mame/drivers/mephisto_mm2.cpp @@ -5,11 +5,18 @@ 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 +TODO: +- need to emulate TurboKit properly, also for mm5p (it's not as simple as a CPU + overclock plus ROM patch) + +=============================================================================== + +Hardware notes: +- CPU: G65SC02P-4 or R65C02P3/R65C02P4 +- Clock: 4.9152 MHz +- NMI CLK: 600 Hz +- IRQ Line is set to VSS +- 8 KByte SRAM Sony CXK5864-15L 1-CD74HC4060E: 14 Bit Counter 1-CD74HC166E @@ -52,6 +59,8 @@ $3000 // Chess Board $4000-7FFF Opening Modul HG550 $8000-$FFF ROM +=============================================================================== + Mephisto 4 Turbo Kit 18mhz - (mm4tk) This is a replacement rom combining the turbo kit initial rom with the original MM IV. The Turbo Kit powers up to it's tiny rom, copies itself to ram, banks in normal rom, @@ -70,11 +79,6 @@ http://chesseval.com/ChessEvalJournal/PrototypeMMV.htm 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) - ******************************************************************************/ #include "emu.h" @@ -120,7 +124,6 @@ public: void bup(machine_config &config); protected: - virtual void machine_start() override; virtual void machine_reset() override; private: @@ -140,10 +143,6 @@ private: u8 keys_r(offs_t offset); }; -void mm2_state::machine_start() -{ -} - void mm2_state::machine_reset() { m_display->reset(); diff --git a/src/mame/layout/mephisto_amsterdam.lay b/src/mame/layout/mephisto_amsterdam.lay index 1e75b7afcb6..51f2378c647 100644 --- a/src/mame/layout/mephisto_amsterdam.lay +++ b/src/mame/layout/mephisto_amsterdam.lay @@ -493,55 +493,60 @@ license:CC0 - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + diff --git a/src/mame/layout/mephisto_glasgow.lay b/src/mame/layout/mephisto_glasgow.lay index f3a94062cef..4ec926a6368 100644 --- a/src/mame/layout/mephisto_glasgow.lay +++ b/src/mame/layout/mephisto_glasgow.lay @@ -491,55 +491,54 @@ license:CC0 - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/mame/layout/mephisto_mirage.lay b/src/mame/layout/mephisto_mirage.lay index 3fbda7f1e4e..92c83696c1f 100644 --- a/src/mame/layout/mephisto_mirage.lay +++ b/src/mame/layout/mephisto_mirage.lay @@ -491,23 +491,23 @@ license:CC0 - - - + + + - - - - - - + + + + + + - - - - - + + + + + diff --git a/src/mame/layout/mephisto_mm1.lay b/src/mame/layout/mephisto_mm1.lay index 1d7b4c35f14..6aa2032d05f 100644 --- a/src/mame/layout/mephisto_mm1.lay +++ b/src/mame/layout/mephisto_mm1.lay @@ -529,26 +529,26 @@ license:CC0 - - - - + + + + - + - - - - + + + + - - - - - + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 889cb6efd2f..e26298c49a7 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -22690,6 +22690,13 @@ academy academyg academyga +@source:mephisto_amsterdam.cpp +amsterd // Amsterdam +dallas16 // Dallas +dallas32 // Dallas +roma16 // Roma +roma32 // Roma + @source:mephisto_berlin.cpp berl16 // 1992 Mephisto Berlin 68000 berl16a // 1992 Mephisto Berlin 68000 @@ -22710,15 +22717,10 @@ mephisto3c mephistoj @source:mephisto_glasgow.cpp -amsterd // Amsterdam amsterda // Amsterdam -dallas16 // Dallas dallas16a // Dallas -dallas32 // Dallas glasgow // Glasgow -roma16 // Roma roma16a // Roma -roma32 // Roma @source:mephisto_milano.cpp milano // 1991 Mephisto Milano diff --git a/src/mame/mess.flt b/src/mame/mess.flt index f691348a3c8..b4221afab8f 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -576,6 +576,7 @@ mekd3.cpp mekd4.cpp mekd5.cpp mephisto_academy.cpp +mephisto_amsterdam.cpp mephisto_berlin.cpp mephisto_brikett.cpp mephisto_glasgow.cpp -- cgit v1.2.3