diff options
author | hap <happppp@users.noreply.github.com> | 2019-08-12 01:26:32 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2019-08-12 01:26:32 +0200 |
commit | f1958b7128c192085ee9f7f6510001cb7c23a13b (patch) | |
tree | 5e42eb832d419b88c78d19fb871f4a87b255ff81 | |
parent | 0e478d4318edf2fdba72dc87964502d2102b299c (diff) |
New not working machine added
--------
Mephisto Mirage [hap, Berger]
-rw-r--r-- | src/mame/drivers/mephisto_brikett.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/mephisto_mm1.cpp | 107 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 |
3 files changed, 102 insertions, 8 deletions
diff --git a/src/mame/drivers/mephisto_brikett.cpp b/src/mame/drivers/mephisto_brikett.cpp index 7d363f5bd86..f641009a008 100644 --- a/src/mame/drivers/mephisto_brikett.cpp +++ b/src/mame/drivers/mephisto_brikett.cpp @@ -430,6 +430,8 @@ void brikett_state::mephisto(machine_config &config) void brikett_state::mephisto2(machine_config &config) { mephisto(config); + + /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephisto2_map); } diff --git a/src/mame/drivers/mephisto_mm1.cpp b/src/mame/drivers/mephisto_mm1.cpp index 1e157ba7b4b..a76c7235ef1 100644 --- a/src/mame/drivers/mephisto_mm1.cpp +++ b/src/mame/drivers/mephisto_mm1.cpp @@ -20,8 +20,19 @@ Hardware notes: It supports the HG 170 opening book module. LCD module is assumed to be same as MM II and others. +Mephisto Mirage is on similar hardware, but it's a single module (LCD is included +on the main PCB). Like MM I, the module by itself didn't have a name at first. +The boards that were included with the product were either Mephisto Mobil, or +Mephisto Mirage (both ledless, push-sensory). The module also works on the more +expensive wooden chessboards like Modular Exclusive or Muenchen, as long as it +supports the higher voltage. + TODO: -- doesn't work, MAME doesn't emulate 1806 CPU +- doesn't work, MAME doesn't emulate 1806 CPU (it uses RLDI, RLXA, RSXD, and + counter interrupt opcodes) +- mmirage unknown_w +- add mm1 opening book +- add mm1 STP/ON buttons? (they're off/on, with RAM chips remaining powered) ******************************************************************************/ @@ -51,7 +62,10 @@ public: m_inputs(*this, "IN.%u", 0) { } + DECLARE_INPUT_CHANGED_MEMBER(mirage_switch_sensor_type); + // machine drivers + void mirage(machine_config &config); void mm1(machine_config &config); protected: @@ -67,6 +81,7 @@ private: required_ioport_array<8> m_inputs; // address maps + void mirage_map(address_map &map); void mm1_map(address_map &map); void mm1_io(address_map &map); @@ -76,6 +91,7 @@ private: DECLARE_READ_LINE_MEMBER(clear_r); DECLARE_WRITE_LINE_MEMBER(q_w); DECLARE_WRITE8_MEMBER(sound_w); + DECLARE_WRITE8_MEMBER(unknown_w); DECLARE_WRITE8_MEMBER(lcd_w); DECLARE_WRITE8_MEMBER(board_w); DECLARE_WRITE8_MEMBER(led_w); @@ -169,6 +185,11 @@ WRITE8_MEMBER(mm1_state::sound_w) m_dac->write(~data & 1); } +WRITE8_MEMBER(mm1_state::unknown_w) +{ + // mmirage: unused serial device? +} + void mm1_state::update_display() { // 64 chessboard leds @@ -226,12 +247,18 @@ READ_LINE_MEMBER(mm1_state::keypad_r) Address Maps ******************************************************************************/ -void mm1_state::mm1_map(address_map &map) +void mm1_state::mirage_map(address_map &map) { map(0x0000, 0x7fff).rom().nopw(); map(0xd000, 0xdfff).mirror(0x2000).ram(); } +void mm1_state::mm1_map(address_map &map) +{ + mirage_map(map); + map(0xc000, 0xcfff).unmapr(); // bookrom? +} + void mm1_state::mm1_io(address_map &map) { map(0x01, 0x01).w(FUNC(mm1_state::sound_w)); @@ -240,6 +267,7 @@ void mm1_state::mm1_io(address_map &map) map(0x04, 0x04).w(FUNC(mm1_state::board_w)); map(0x05, 0x05).w(FUNC(mm1_state::led_w)); map(0x06, 0x06).w(FUNC(mm1_state::lcd_w)); + map(0x07, 0x07).w(FUNC(mm1_state::unknown_w)); } @@ -282,26 +310,70 @@ static INPUT_PORTS_START( mm1 ) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // b2 INPUT_PORTS_END +static INPUT_PORTS_START( mirage ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) // cl? + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) // list? + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) // a1 + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) // e5 + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) // ent + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) // white? + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) // b2 + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) // f6 + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) // sta? + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) // black? + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) // c3 + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // g7 + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) // lev + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) // rev? + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) // d4 + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // h8 + + 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, nullptr) + PORT_CONFSETTING( 0x00, "Buttons" ) + PORT_CONFSETTING( 0x01, "Magnets" ) +INPUT_PORTS_END + +INPUT_CHANGED_MEMBER(mm1_state::mirage_switch_sensor_type) +{ + m_board->set_type(newval ? sensorboard_device::MAGNETS : sensorboard_device::BUTTONS); +} + /****************************************************************************** Machine Drivers ******************************************************************************/ -void mm1_state::mm1(machine_config &config) +void mm1_state::mirage(machine_config &config) { /* basic machine hardware */ CDP1802(config, m_maincpu, 8_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &mm1_state::mm1_map); + m_maincpu->set_addrmap(AS_PROGRAM, &mm1_state::mirage_map); m_maincpu->set_addrmap(AS_IO, &mm1_state::mm1_io); m_maincpu->clear_cb().set(FUNC(mm1_state::clear_r)); - m_maincpu->q_cb().set(FUNC(mm1_state::q_w)); + m_maincpu->q_cb().set(FUNC(mm1_state::q_w)).invert(); m_maincpu->ef3_cb().set(FUNC(mm1_state::keypad_r<0>)); m_maincpu->ef4_cb().set(FUNC(mm1_state::keypad_r<1>)); m_maincpu->set_periodic_int(FUNC(mm1_state::interrupt), attotime::from_hz(150)); // fake - SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); + SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(200)); @@ -316,6 +388,17 @@ void mm1_state::mm1(machine_config &config) VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } +void mm1_state::mm1(machine_config &config) +{ + mirage(config); + + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &mm1_state::mm1_map); + m_maincpu->q_cb().set(FUNC(mm1_state::q_w)); + + m_board->set_type(sensorboard_device::MAGNETS); +} + /****************************************************************************** @@ -328,6 +411,12 @@ ROM_START( mm1 ) ROM_LOAD("214", 0x4000, 0x4000, CRC(93734e49) SHA1(9ad6c191074c4122300f059e2ef9cfeff7b81463) ) // " ROM_END + +ROM_START( mmirage ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("g79", 0x0000, 0x8000, CRC(8cbaff40) SHA1(693086ae179f1ada4ac403b3a6bc7ea718b4e71e) ) // HN613256P, 2nd half empty +ROM_END + } // anonymous namespace @@ -336,5 +425,7 @@ ROM_END Drivers ******************************************************************************/ -// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS -CONS( 1983, mm1, 0, 0, mm1, mm1, mm1_state, empty_init, "Hegener + Glaser", "Mephisto MM I", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS +CONS( 1983, mm1, 0, 0, mm1, mm1, mm1_state, empty_init, "Hegener + Glaser", "Mephisto MM I", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) + +CONS( 1984, mmirage, 0, 0, mirage, mirage, mm1_state, empty_init, "Hegener + Glaser", "Mephisto Mirage", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index dd917158478..e636ff5c143 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -21432,6 +21432,7 @@ roma32 // Roma @source:mephisto_mm1.cpp mm1 +mmirage @source:mephisto_mm2.cpp mm2 // Mephisto MM II |