diff options
Diffstat (limited to 'src/mame/drivers/fidel_excel.cpp')
-rw-r--r-- | src/mame/drivers/fidel_excel.cpp | 143 |
1 files changed, 34 insertions, 109 deletions
diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp index 6d05c0220d7..635195e92d2 100644 --- a/src/mame/drivers/fidel_excel.cpp +++ b/src/mame/drivers/fidel_excel.cpp @@ -132,6 +132,7 @@ Designer 2100 (model 6103): exactly same, but running at 5MHz #include "emu.h" #include "cpu/m6502/r65c02.h" #include "cpu/m6502/m65sc02.h" +#include "machine/sensorboard.h" #include "machine/timer.h" #include "sound/s14001a.h" #include "sound/dac.h" @@ -142,7 +143,9 @@ Designer 2100 (model 6103): exactly same, but running at 5MHz // internal artwork #include "fidel_des.lh" // clickable #include "fidel_ex.lh" // clickable +#include "fidel_exb.lh" // clickable #include "fidel_exd.lh" // clickable +#include "fidel_exv.lh" // clickable namespace { @@ -154,6 +157,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), + m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), m_speech(*this, "speech"), @@ -181,11 +185,12 @@ private: // devices/pointers required_device<cpu_device> m_maincpu; required_device<timer_device> m_irq_on; + required_device<sensorboard_device> m_board; required_device<pwm_display_device> m_display; required_device<dac_bit_interface> m_dac; optional_device<s14001a_device> m_speech; optional_region_ptr<u8> m_speech_rom; - optional_ioport_array<11> m_inputs; + optional_ioport_array<3> m_inputs; // address maps void fexcel_map(address_map &map); @@ -295,20 +300,20 @@ READ8_MEMBER(excel_state::ttl_r) u8 data = 0; // 74259(1) Q7 + 74251 I0: battery status - if (m_inputs[10] != nullptr && sel == 0 && ~m_select & 0x80) - d7 = m_inputs[10]->read() & 0x80; + if (m_inputs[2] != nullptr && sel == 0 && ~m_select & 0x80) + d7 = m_inputs[2]->read() & 0x80; // a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC - u8 d6 = (m_inputs[9].read_safe(0xff) >> offset & 1) ? 0x40 : 0; + u8 d6 = (m_inputs[1].read_safe(0xff) >> offset & 1) ? 0x40 : 0; // a0-a2,d7: multiplexed inputs (active low) // read chessboard sensors if (sel < 8) - data = m_inputs[sel]->read(); + data = m_board->read_file(sel); // read button panel else if (sel == 8) - data = m_inputs[8]->read(); + data = m_inputs[0]->read(); return ((data >> offset & 1) ? 0 : d7) | d6 | 0x3f; } @@ -340,92 +345,8 @@ void excel_state::fexcelb_map(address_map &map) Input Ports ******************************************************************************/ -INPUT_PORTS_START( generic_cb_buttons ) - PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") -INPUT_PORTS_END - static INPUT_PORTS_START( fexcelb ) - PORT_INCLUDE( generic_cb_buttons ) - - PORT_START("IN.8") + PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move / Pawn") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint / Knight") @@ -439,7 +360,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( fexcelv ) PORT_INCLUDE( fexcelb ) - PORT_START("IN.9") + PORT_START("IN.1") PORT_CONFNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, excel_state, speech_bankswitch, 0) PORT_CONFSETTING( 0x00, DEF_STR( English ) ) PORT_CONFSETTING( 0x01, DEF_STR( German ) ) @@ -452,7 +373,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( fexcel ) PORT_INCLUDE( fexcelb ) - PORT_START("IN.10") + PORT_START("IN.2") PORT_CONFNAME( 0x80, 0x00, "Battery Status" ) PORT_CONFSETTING( 0x80, "Low" ) PORT_CONFSETTING( 0x00, DEF_STR( Normal ) ) @@ -461,7 +382,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( fdes ) PORT_INCLUDE( fexcel ) - PORT_MODIFY("IN.10") + PORT_MODIFY("IN.2") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) // no low-voltage detection circuit (still works in software though) INPUT_PORTS_END @@ -482,6 +403,10 @@ void excel_state::fexcel(machine_config &config) m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us TIMER(config, "irq_off").configure_periodic(FUNC(excel_state::irq_off<M6502_IRQ_LINE>), irq_period); + 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(100)); + /* video hardware */ PWM_DISPLAY(config, m_display).set_size(2+4, 8); m_display->set_segmask(0x3c, 0x7f); @@ -508,6 +433,7 @@ void excel_state::fexcelb(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map); + config.set_default_layout(layout_fidel_exb); } void excel_state::fexcelp(machine_config &config) @@ -556,6 +482,7 @@ void excel_state::fdes2000(machine_config &config) void excel_state::fexcelv(machine_config &config) { fexcelb(config); + config.set_default_layout(layout_fidel_exv); /* sound hardware */ S14001A(config, m_speech, 25000); // R/C circuit, around 25khz @@ -566,8 +493,6 @@ void excel_state::fexcelv(machine_config &config) void excel_state::fexceld(machine_config &config) { fexcelb(config); - - /* basic machine hardware */ config.set_default_layout(layout_fidel_exd); } @@ -644,16 +569,16 @@ ROM_END Drivers ******************************************************************************/ -// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS -CONS( 1987, fexcel, 0, 0, fexcelb, fexcelb, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, excel_state, empty_init, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, excel_state, empty_init, "Fidelity Electronics", "Excel Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1985, fexcel12, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // 1st version of The Excellence -CONS( 1985, fexcel124, fexcel, 0, fexcel4, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) - -CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS +CONS( 1987, fexcel, 0, 0, fexcelb, fexcelb, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, excel_state, empty_init, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, excel_state, empty_init, "Fidelity Electronics", "Excel Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1985, fexcel12, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // 1st version of The Excellence +CONS( 1985, fexcel124, fexcel, 0, fexcel4, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) |