New not working machine added

--------
Mephisto Mirage [hap, Berger]
This commit is contained in:
hap 2019-08-12 01:26:32 +02:00
parent 0e478d4318
commit f1958b7128
3 changed files with 102 additions and 8 deletions

View File

@ -430,6 +430,8 @@ void brikett_state::mephisto(machine_config &config)
void brikett_state::mephisto2(machine_config &config) void brikett_state::mephisto2(machine_config &config)
{ {
mephisto(config); mephisto(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephisto2_map); m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephisto2_map);
} }

View File

@ -20,8 +20,19 @@ Hardware notes:
It supports the HG 170 opening book module. It supports the HG 170 opening book module.
LCD module is assumed to be same as MM II and others. 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: 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) m_inputs(*this, "IN.%u", 0)
{ } { }
DECLARE_INPUT_CHANGED_MEMBER(mirage_switch_sensor_type);
// machine drivers // machine drivers
void mirage(machine_config &config);
void mm1(machine_config &config); void mm1(machine_config &config);
protected: protected:
@ -67,6 +81,7 @@ private:
required_ioport_array<8> m_inputs; required_ioport_array<8> m_inputs;
// address maps // address maps
void mirage_map(address_map &map);
void mm1_map(address_map &map); void mm1_map(address_map &map);
void mm1_io(address_map &map); void mm1_io(address_map &map);
@ -76,6 +91,7 @@ private:
DECLARE_READ_LINE_MEMBER(clear_r); DECLARE_READ_LINE_MEMBER(clear_r);
DECLARE_WRITE_LINE_MEMBER(q_w); DECLARE_WRITE_LINE_MEMBER(q_w);
DECLARE_WRITE8_MEMBER(sound_w); DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_WRITE8_MEMBER(unknown_w);
DECLARE_WRITE8_MEMBER(lcd_w); DECLARE_WRITE8_MEMBER(lcd_w);
DECLARE_WRITE8_MEMBER(board_w); DECLARE_WRITE8_MEMBER(board_w);
DECLARE_WRITE8_MEMBER(led_w); DECLARE_WRITE8_MEMBER(led_w);
@ -169,6 +185,11 @@ WRITE8_MEMBER(mm1_state::sound_w)
m_dac->write(~data & 1); m_dac->write(~data & 1);
} }
WRITE8_MEMBER(mm1_state::unknown_w)
{
// mmirage: unused serial device?
}
void mm1_state::update_display() void mm1_state::update_display()
{ {
// 64 chessboard leds // 64 chessboard leds
@ -226,12 +247,18 @@ READ_LINE_MEMBER(mm1_state::keypad_r)
Address Maps Address Maps
******************************************************************************/ ******************************************************************************/
void mm1_state::mm1_map(address_map &map) void mm1_state::mirage_map(address_map &map)
{ {
map(0x0000, 0x7fff).rom().nopw(); map(0x0000, 0x7fff).rom().nopw();
map(0xd000, 0xdfff).mirror(0x2000).ram(); 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) void mm1_state::mm1_io(address_map &map)
{ {
map(0x01, 0x01).w(FUNC(mm1_state::sound_w)); 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(0x04, 0x04).w(FUNC(mm1_state::board_w));
map(0x05, 0x05).w(FUNC(mm1_state::led_w)); map(0x05, 0x05).w(FUNC(mm1_state::led_w));
map(0x06, 0x06).w(FUNC(mm1_state::lcd_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 PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // b2
INPUT_PORTS_END 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 Machine Drivers
******************************************************************************/ ******************************************************************************/
void mm1_state::mm1(machine_config &config) void mm1_state::mirage(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
CDP1802(config, m_maincpu, 8_MHz_XTAL); 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->set_addrmap(AS_IO, &mm1_state::mm1_io);
m_maincpu->clear_cb().set(FUNC(mm1_state::clear_r)); 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->ef3_cb().set(FUNC(mm1_state::keypad_r<0>));
m_maincpu->ef4_cb().set(FUNC(mm1_state::keypad_r<1>)); 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 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->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(200)); 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); 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_LOAD("214", 0x4000, 0x4000, CRC(93734e49) SHA1(9ad6c191074c4122300f059e2ef9cfeff7b81463) ) // "
ROM_END 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 } // anonymous namespace
@ -336,5 +425,7 @@ ROM_END
Drivers Drivers
******************************************************************************/ ******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS // 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( 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 )

View File

@ -21432,6 +21432,7 @@ roma32 // Roma
@source:mephisto_mm1.cpp @source:mephisto_mm1.cpp
mm1 mm1
mmirage
@source:mephisto_mm2.cpp @source:mephisto_mm2.cpp
mm2 // Mephisto MM II mm2 // Mephisto MM II