diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 41e8e558a34..046d2e1a328 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1919,10 +1919,8 @@ files { MAME_DIR .. "src/mame/machine/novagbase.cpp", MAME_DIR .. "src/mame/includes/novagbase.h", MAME_DIR .. "src/mame/drivers/novag_cforte.cpp", - MAME_DIR .. "src/mame/drivers/novag_delta1.cpp", MAME_DIR .. "src/mame/drivers/novag_diablo.cpp", MAME_DIR .. "src/mame/drivers/novag_presto.cpp", - MAME_DIR .. "src/mame/drivers/novag_scon.cpp", MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp", } @@ -2818,9 +2816,11 @@ files { createMESSProjects(_target, _subtarget, "novag") files { + MAME_DIR .. "src/mame/drivers/novag_delta1.cpp", MAME_DIR .. "src/mame/drivers/novag_mk1.cpp", MAME_DIR .. "src/mame/drivers/novag_mk2.cpp", MAME_DIR .. "src/mame/drivers/novag_savant.cpp", + MAME_DIR .. "src/mame/drivers/novag_scon.cpp", MAME_DIR .. "src/mame/drivers/ssystem3.cpp", MAME_DIR .. "src/mame/includes/ssystem3.h", MAME_DIR .. "src/mame/video/ssystem3.cpp", diff --git a/src/mame/drivers/cking_master.cpp b/src/mame/drivers/cking_master.cpp index ea18a88d145..1e8f1a6e67f 100644 --- a/src/mame/drivers/cking_master.cpp +++ b/src/mame/drivers/cking_master.cpp @@ -3,7 +3,9 @@ // thanks-to:Berger /****************************************************************************** -Chess King Master overview (yes, it's plainly named "Master"): +Chess King Master (yes, it's plainly named "Master") + +Hardware notes: - Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer - 8KB ROM(NEC D2764C-3), 2KB RAM(NEC D4016C), ROM is scrambled for easy PCB placement - simple I/O via 2*74373 and a 74145 diff --git a/src/mame/drivers/cxg_ch2001.cpp b/src/mame/drivers/cxg_ch2001.cpp index 872d3963115..35d3d852625 100644 --- a/src/mame/drivers/cxg_ch2001.cpp +++ b/src/mame/drivers/cxg_ch2001.cpp @@ -3,7 +3,9 @@ // thanks-to:Berger /****************************************************************************** -CXG Chess 2001 overview: +CXG Chess 2001, also sold by Hanimex as HCG 1900 + +Hardware notes: - Zilog Z8400APS @ 4 MHz (8MHz XTAL) - 2KB RAM HM6116, 16KB ROM D27128D - TTL, piezo, 8*8+9 LEDs, magnetic sensors diff --git a/src/mame/drivers/novag_scon.cpp b/src/mame/drivers/novag_scon.cpp index c54cc25af15..174d98a2660 100644 --- a/src/mame/drivers/novag_scon.cpp +++ b/src/mame/drivers/novag_scon.cpp @@ -2,26 +2,25 @@ // copyright-holders:hap /****************************************************************************** -* novag_scon.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp +Novag Super Constellation Chess Computer (model 844) -TODO: -- verify IRQ and beeper frequency - -******************************************************************************* - -Novag Super Constellation Chess Computer (model 844) overview: +Hardware notes: - UMC UM6502C @ 4 MHz (8MHz XTAL), 600Hz? IRQ(source unknown?) - 2*2KB RAM TC5516APL-2 battery-backed, 2*32KB ROM custom label - TTL, buzzer, 24 LEDs, 8*8 chessboard buttons - external ports for clock and printer, not emulated here +TODO: +- verify IRQ and beeper frequency + ******************************************************************************/ #include "emu.h" -#include "includes/novagbase.h" - #include "cpu/m6502/m6502.h" +#include "video/pwm.h" +#include "machine/sensorboard.h" #include "machine/nvram.h" +#include "sound/beep.h" #include "speaker.h" // internal artwork @@ -30,27 +29,58 @@ Novag Super Constellation Chess Computer (model 844) overview: namespace { -class scon_state : public novagbase_state +class scon_state : public driver_device { public: scon_state(const machine_config &mconfig, device_type type, const char *tag) : - novagbase_state(mconfig, type, tag) + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_display(*this, "display"), + m_board(*this, "board"), + m_beeper(*this, "beeper"), + m_inputs(*this, "IN.%u", 0) { } // machine drivers void scon(machine_config &config); +protected: + virtual void machine_start() override; + private: + // devices/pointers + required_device m_maincpu; + required_device m_display; + required_device m_board; + required_device m_beeper; + required_ioport_array<8> m_inputs; + // address maps void main_map(address_map &map); // I/O handlers + void update_display(); DECLARE_WRITE8_MEMBER(mux_w); DECLARE_WRITE8_MEMBER(control_w); DECLARE_READ8_MEMBER(input1_r); DECLARE_READ8_MEMBER(input2_r); + + u8 m_inp_mux; + u8 m_led_select; }; +void scon_state::machine_start() +{ + // zerofill + m_inp_mux = 0; + m_led_select = 0; + + // register for savestates + save_item(NAME(m_inp_mux)); + save_item(NAME(m_led_select)); +} + + /****************************************************************************** Devices, I/O @@ -58,11 +88,16 @@ private: // TTL +void scon_state::update_display() +{ + m_display->matrix(m_led_select, m_inp_mux); +} + WRITE8_MEMBER(scon_state::mux_w) { // d0-d7: input mux, led data - m_inp_mux = m_led_data = data; - display_matrix(8, 3, m_led_data, m_led_select); + m_inp_mux = data; + update_display(); } WRITE8_MEMBER(scon_state::control_w) @@ -70,7 +105,7 @@ WRITE8_MEMBER(scon_state::control_w) // d0-d3: ? // d4-d6: select led row m_led_select = data >> 4 & 7; - display_matrix(8, 3, m_led_data, m_led_select); + update_display(); // d7: enable beeper m_beeper->set_state(data >> 7 & 1); @@ -78,15 +113,27 @@ WRITE8_MEMBER(scon_state::control_w) READ8_MEMBER(scon_state::input1_r) { + u8 data = 0; + // d0-d7: multiplexed inputs (chessboard squares) - return ~read_inputs(8) & 0xff; + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_board->read_rank(i ^ 7, true); + + return ~data; } READ8_MEMBER(scon_state::input2_r) { + u8 data = 0; + // d0-d5: ? // d6,d7: multiplexed inputs (side panel) - return (read_inputs(8) >> 2 & 0xc0) ^ 0xff; + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_inputs[i]->read() << 6; + + return ~data; } @@ -112,39 +159,37 @@ void scon_state::main_map(address_map &map) ******************************************************************************/ static INPUT_PORTS_START( scon ) - PORT_INCLUDE( generic_cb_buttons ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Multi Move / Player/Player / King") - PORT_MODIFY("IN.0") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Multi Move / Player/Player / King") + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify / Set Up") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Best Move/Random / Training Level / Queen") - PORT_MODIFY("IN.1") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify / Set Up") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Best Move/Random / Training Level / Queen") + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Sound / Depth Search / Bishop") - PORT_MODIFY("IN.2") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Sound / Depth Search / Bishop") + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Solve Mate / Knight") - PORT_MODIFY("IN.3") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Solve Mate / Knight") + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Print Board / Rook") - PORT_MODIFY("IN.4") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Print Board / Rook") + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Form Size") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Print List / Acc. Time / Pawn") - PORT_MODIFY("IN.5") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Form Size") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Print List / Acc. Time / Pawn") + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level") - PORT_MODIFY("IN.6") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level") - - PORT_MODIFY("IN.7") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go") - PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back") + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back") INPUT_PORTS_END @@ -162,7 +207,12 @@ void scon_state::scon(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); - TIMER(config, "display_decay").configure_periodic(FUNC(scon_state::display_decay_tick), attotime::from_msec(1)); + 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(150)); + + /* video hardware */ + PWM_DISPLAY(config, m_display).set_size(3, 8); config.set_default_layout(layout_novag_supercon); /* sound hardware */ @@ -192,4 +242,4 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS -CONS( 1984, supercon, 0, 0, scon, scon, scon_state, empty_init, "Novag", "Super Constellation", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1984, supercon, 0, 0, scon, scon, scon_state, empty_init, "Novag", "Super Constellation", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/ave_arb.lay b/src/mame/layout/ave_arb.lay index 123c978890e..3a61711018e 100644 --- a/src/mame/layout/ave_arb.lay +++ b/src/mame/layout/ave_arb.lay @@ -272,14 +272,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/mame/layout/ck_master.lay b/src/mame/layout/ck_master.lay index 0d79dfbb5aa..deadeba78b5 100644 --- a/src/mame/layout/ck_master.lay +++ b/src/mame/layout/ck_master.lay @@ -206,14 +206,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/mame/layout/cxg_ch2001.lay b/src/mame/layout/cxg_ch2001.lay index bd65b463708..49cb4c4c9b3 100644 --- a/src/mame/layout/cxg_ch2001.lay +++ b/src/mame/layout/cxg_ch2001.lay @@ -274,14 +274,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/mame/layout/novag_supercon.lay b/src/mame/layout/novag_supercon.lay index 09cedc163ad..99b9d037159 100644 --- a/src/mame/layout/novag_supercon.lay +++ b/src/mame/layout/novag_supercon.lay @@ -7,6 +7,9 @@ + + + @@ -16,16 +19,6 @@ - - - - - - - - - - @@ -37,9 +30,6 @@ - - - @@ -155,10 +145,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + @@ -170,6 +443,8 @@ + + @@ -215,125 +490,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -386,14 +542,14 @@ - - - - - - - - + + + + + + + + @@ -404,14 +560,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/mame/layout/scisys_cp2000.lay b/src/mame/layout/scisys_cp2000.lay index 9c1cf6f2ec4..de2ac7fa740 100644 --- a/src/mame/layout/scisys_cp2000.lay +++ b/src/mame/layout/scisys_cp2000.lay @@ -440,14 +440,14 @@ - - - - - - - - + + + + + + + +