From 5a031920f6344ea0d72c46927a83fdbb95be7dcc Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 12 Sep 2024 11:00:07 +0200 Subject: scptchess: swap parent/clone sets, saitek*: small cleanup, update company strings New working systems ------------------- Travel Sensor Chess [hap, Sean Riddle] --- src/mame/cxg/computachess.cpp | 51 ++-- src/mame/handheld/hh_hmcs40.cpp | 4 +- src/mame/layout/cxg_scptchess.lay | 34 +-- src/mame/layout/cxg_scptchessa.lay | 34 +-- src/mame/layout/intchess.lay | 243 +++++++++++++++++++ src/mame/layout/saitek_expchess.lay | 97 ++++---- src/mame/layout/saitek_intchess.lay | 243 ------------------- src/mame/layout/saitek_tschess.lay | 464 ++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/saitek/chesstrv.cpp | 4 +- src/mame/saitek/companion2.cpp | 2 +- src/mame/saitek/cp2000.cpp | 47 ++-- src/mame/saitek/delta1.cpp | 3 +- src/mame/saitek/exechess.cpp | 2 +- src/mame/saitek/intchess.cpp | 44 ++-- src/mame/saitek/minichess.cpp | 6 +- src/mame/saitek/prschess.cpp | 1 + src/mame/saitek/ssystem3.cpp | 18 +- src/mame/saitek/tschess.cpp | 199 ++++++++++++++++ 19 files changed, 1067 insertions(+), 432 deletions(-) create mode 100644 src/mame/layout/intchess.lay delete mode 100644 src/mame/layout/saitek_intchess.lay create mode 100644 src/mame/layout/saitek_tschess.lay create mode 100644 src/mame/saitek/tschess.cpp diff --git a/src/mame/cxg/computachess.cpp b/src/mame/cxg/computachess.cpp index 59d05d14882..83bc1f3fb18 100644 --- a/src/mame/cxg/computachess.cpp +++ b/src/mame/cxg/computachess.cpp @@ -22,12 +22,12 @@ switch which puts the MCU in halt state. Hardware notes: Sensor Computachess: -- PCB label WA 001 600 002 +- PCB label: WA 001 600 002 - Hitachi 44801A50 MCU @ ~400kHz - buzzer, 16 leds, button sensors chessboard Portachess II: -- PCB label CXG223-600-001 (main pcb), CXG 211 600 101 (led pcb taken from +- PCB label: CXG223-600-001 (main pcb), CXG 211 600 101 (led pcb taken from Advanced Star Chess, extra led row unused here) - Hitachi HD44801C89 MCU @ ~400kHz (serial 202: from Portachess 1985 version) - rest same as above @@ -102,18 +102,15 @@ private: required_ioport m_inputs; u8 m_inp_mux = 0; - u8 m_led_data = 0; - void update_display(); template void mux_w(u8 data); - void leds_w(u16 data); + void control_w(u16 data); u16 input_r(); }; void computachess_state::machine_start() { save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_data)); } @@ -122,27 +119,21 @@ void computachess_state::machine_start() I/O *******************************************************************************/ -void computachess_state::update_display() -{ - m_display->matrix(m_inp_mux, m_led_data); -} - template void computachess_state::mux_w(u8 data) { - // R2x,R3x: input mux, led select + // R2x,R3x: input mux, led data m_inp_mux = (m_inp_mux & ~(0xf << (N*4))) | (data << (N*4)); - update_display(); + m_display->write_mx(m_inp_mux); } -void computachess_state::leds_w(u16 data) +void computachess_state::control_w(u16 data) { - // D2,D3: led data - m_led_data = ~data >> 2 & 3; - update_display(); - // D0: speaker out m_dac->write(data & 1); + + // D2,D3: led select + m_display->write_my(~data >> 2 & 3); } u16 computachess_state::input_r() @@ -169,19 +160,21 @@ u16 computachess_state::input_r() static INPUT_PORTS_START( scptchess ) PORT_START("IN.0") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Sound") // only hooked up on 1st version PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Reverse Play") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level") + + PORT_START("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, computachess_state, reset_button, 0) PORT_NAME("New Game") INPUT_PORTS_END static INPUT_PORTS_START( scptchessa ) PORT_INCLUDE( scptchess ) PORT_MODIFY("IN.0") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Sound") // only hooked up on 1st version - PORT_START("RESET") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, computachess_state, reset_button, 0) PORT_NAME("New Game") + PORT_MODIFY("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END @@ -193,10 +186,10 @@ INPUT_PORTS_END void computachess_state::scptchess(machine_config &config) { // basic machine hardware - HD44801(config, m_maincpu, 400'000); + HD44801(config, m_maincpu, 400'000); // approximation m_maincpu->write_r<2>().set(FUNC(computachess_state::mux_w<0>)); m_maincpu->write_r<3>().set(FUNC(computachess_state::mux_w<1>)); - m_maincpu->write_d().set(FUNC(computachess_state::leds_w)); + m_maincpu->write_d().set(FUNC(computachess_state::control_w)); m_maincpu->read_d().set(FUNC(computachess_state::input_r)); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); @@ -204,7 +197,7 @@ void computachess_state::scptchess(machine_config &config) m_board->set_delay(attotime::from_msec(150)); // video hardware - PWM_DISPLAY(config, m_display).set_size(8, 2); + PWM_DISPLAY(config, m_display).set_size(2, 8); config.set_default_layout(layout_cxg_scptchess); // sound hardware @@ -226,12 +219,12 @@ void computachess_state::scptchessa(machine_config &config) ROM_START( scptchess ) ROM_REGION( 0x2000, "maincpu", 0 ) - ROM_LOAD("white_allcock_44801a50", 0x0000, 0x2000, CRC(c5c53e05) SHA1(8fa9b8e48ca54f08585afd83ae78fb1970fbd382) ) + ROM_LOAD("202_newcrest_16_hd44801c89", 0x0000, 0x2000, CRC(56b48f70) SHA1(84ec62323c6d3314e0515bccfde2f65f6d753e99) ) ROM_END ROM_START( scptchessa ) ROM_REGION( 0x2000, "maincpu", 0 ) - ROM_LOAD("202_newcrest_16_hd44801c89", 0x0000, 0x2000, CRC(56b48f70) SHA1(84ec62323c6d3314e0515bccfde2f65f6d753e99) ) + ROM_LOAD("white_allcock_44801a50", 0x0000, 0x2000, CRC(c5c53e05) SHA1(8fa9b8e48ca54f08585afd83ae78fb1970fbd382) ) ROM_END } // anonymous namespace @@ -243,5 +236,5 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, scptchess, 0, 0, scptchess, scptchess, computachess_state, empty_init, "CXG Systems / White and Allcock / Intelligent Software", "Sensor Computachess (1981 version)", MACHINE_SUPPORTS_SAVE ) -SYST( 1985, scptchessa, scptchess, 0, scptchessa, scptchessa, computachess_state, empty_init, "CXG Systems / Newcrest Technology / Intelligent Software", "Sensor Computachess (1985 version)", MACHINE_SUPPORTS_SAVE ) +SYST( 1985, scptchess, 0, 0, scptchess, scptchess, computachess_state, empty_init, "CXG Systems / Newcrest Technology / Intelligent Software", "Sensor Computachess (1985 version)", MACHINE_SUPPORTS_SAVE ) +SYST( 1981, scptchessa, scptchess, 0, scptchessa, scptchessa, computachess_state, empty_init, "CXG Systems / White and Allcock / Intelligent Software", "Sensor Computachess (1981 version)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/handheld/hh_hmcs40.cpp b/src/mame/handheld/hh_hmcs40.cpp index 6aa1d9a1cb5..45fd4c9b756 100644 --- a/src/mame/handheld/hh_hmcs40.cpp +++ b/src/mame/handheld/hh_hmcs40.cpp @@ -73,7 +73,7 @@ known chips: A34 HD44801 1981, SciSys Mini Chess -> saitek/minichess.cpp A50 HD44801 1981, CXG Sensor Computachess -> cxg/computachess.cpp A75 HD44801 1982, Alpha 8201 protection MCU -> alpha/alpha8201.* - *A85 HD44801 1982, SciSys Travel Sensor / Travel Mate / Chesspartner 5000/6000 + A85 HD44801 1982, SciSys Travel Sensor Chess -> saitek/tschess.cpp *A92 HD44801 1982, SciSys Play Bridge Computer B35 HD44801 1983, Alpha 8302 protection MCU (see 8201) B42 HD44801 1983, Alpha 8303 protection MCU (see 8201) @@ -92,7 +92,7 @@ known chips: *A04 HD44868 1984, SciSys Rapier *A07 HD44868 1984, Chess King Pocket Micro Deluxe / Mephisto Teufelchen - *A12 HD44868 1985, SciSys MK 10 / Pocket Chess / Electronic Trio + *A12 HD44868 1985, SciSys Travel Mate II / Pocket Chess / MK 10 / Electronic Trio *A14 HD44868 1985, SciSys Kasparov Plus *A16 HD44868 1988, Saitek Pocket Checkers diff --git a/src/mame/layout/cxg_scptchess.lay b/src/mame/layout/cxg_scptchess.lay index d93d571e433..56b2ffaa52b 100644 --- a/src/mame/layout/cxg_scptchess.lay +++ b/src/mame/layout/cxg_scptchess.lay @@ -41,7 +41,7 @@ authors:hap - + @@ -333,22 +333,22 @@ authors:hap - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -363,7 +363,7 @@ authors:hap - + diff --git a/src/mame/layout/cxg_scptchessa.lay b/src/mame/layout/cxg_scptchessa.lay index 4287783e8aa..7107cab77bd 100644 --- a/src/mame/layout/cxg_scptchessa.lay +++ b/src/mame/layout/cxg_scptchessa.lay @@ -41,7 +41,7 @@ authors:hap - + @@ -333,22 +333,22 @@ authors:hap - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -363,7 +363,7 @@ authors:hap - + diff --git a/src/mame/layout/intchess.lay b/src/mame/layout/intchess.lay new file mode 100644 index 00000000000..1080bcc131c --- /dev/null +++ b/src/mame/layout/intchess.lay @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/saitek_expchess.lay b/src/mame/layout/saitek_expchess.lay index b2f329a3d65..6ee786435a0 100644 --- a/src/mame/layout/saitek_expchess.lay +++ b/src/mame/layout/saitek_expchess.lay @@ -8,7 +8,6 @@ authors:hap - @@ -43,38 +42,6 @@ authors:hap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -337,6 +304,32 @@ authors:hap + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -387,8 +380,16 @@ authors:hap + + + + + + + + - + @@ -396,18 +397,18 @@ authors:hap - - - - - - - - - - - - + + + + + + + + + + + + @@ -458,8 +459,8 @@ authors:hap - - + + diff --git a/src/mame/layout/saitek_intchess.lay b/src/mame/layout/saitek_intchess.lay deleted file mode 100644 index 1080bcc131c..00000000000 --- a/src/mame/layout/saitek_intchess.lay +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/layout/saitek_tschess.lay b/src/mame/layout/saitek_tschess.lay new file mode 100644 index 00000000000..8dc069c75d8 --- /dev/null +++ b/src/mame/layout/saitek_tschess.lay @@ -0,0 +1,464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 844738887f0..d762882e652 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -38998,6 +38998,9 @@ tstar432b tatrain tatraina +@source:saitek/tschess.cpp +tschess + @source:saitek/turbo16k.cpp compan3 conquist diff --git a/src/mame/saitek/chesstrv.cpp b/src/mame/saitek/chesstrv.cpp index 5cb2e1fbd67..e0c4f66d162 100644 --- a/src/mame/saitek/chesstrv.cpp +++ b/src/mame/saitek/chesstrv.cpp @@ -313,5 +313,5 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "SciSys / Novag Industries", "Chess Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) -SYST( 1982, chesstrvi, 0, 0, chesstrvi, chesstrvi, chesstrv_state, empty_init, "SciSys", "Chess Intercontinental Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +SYST( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "SciSys / Novag Industries / Philidor Software", "Chess Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +SYST( 1982, chesstrvi, 0, 0, chesstrvi, chesstrvi, chesstrv_state, empty_init, "SciSys / Philidor Software", "Chess Intercontinental Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/saitek/companion2.cpp b/src/mame/saitek/companion2.cpp index b98f23d7f0a..a87a268d9d5 100644 --- a/src/mame/saitek/companion2.cpp +++ b/src/mame/saitek/companion2.cpp @@ -16,7 +16,7 @@ TODO: ================================================================================ -Hardware notes: +SciSys Chess Companion II family hardware notes: Chess Companion II: - PCB label: YO1B-01 REV.B diff --git a/src/mame/saitek/cp2000.cpp b/src/mame/saitek/cp2000.cpp index d2ede7c7c1c..f75e74f7e60 100644 --- a/src/mame/saitek/cp2000.cpp +++ b/src/mame/saitek/cp2000.cpp @@ -6,22 +6,24 @@ SciSys Chess Partner 2000, also sold by Novag with the same name. It's probably the last SciSys / Novag collaboration. +Entering moves is not as friendly as newer sensory games. The player is expected +to press ENTER after their own move, but if they (accidentally) press it after +doing the computer's move, the computer takes your turn. + +Capturing pieces is also unintuitive, having to press the destination square twice. + Hardware notes: - 3850PK CPU at ~2.77MHz(averaged), 3853PK memory interface - 4KB ROM, 256 bytes RAM(2*2111N) - 4-digit 7seg panel, sensory chessboard 3850 is officially rated 2MHz, and even the CP2000 manual says it runs at 2MHz, -but tests show that the chesscomputer runs at a much higher speed. Three individual -CP2000 were measured, by timing move calculation, and one recording to verify -beeper pitch and display blinking rate. Real CP2000 CPU frequency is in the -2.63MHz to 2.91MHz range. - -Entering moves is not as friendly as newer sensory games. The player is expected -to press ENTER after their own move, but if they (accidentally) press it after -doing the computer's move, the computer takes your turn. +but tests show that it runs at a much higher speed. Three individual CP2000 were +measured, by timing move calculation, and one recording to verify beeper pitch and +display blinking rate. Real CP2000 CPU frequency is in the 2.63MHz-2.91MHz range. -Capturing pieces is also unintuitive, having to press the destination square twice. +The 'sequels' CP3000-CP6000 are on HMCS40 (see minichess.cpp and trsensor.cpp), +Chess Partner 1000 does not exist. *******************************************************************************/ @@ -53,7 +55,6 @@ public: m_inputs(*this, "IN.%u", 0) { } - // machine configs void cp2000(machine_config &config); protected: @@ -67,16 +68,14 @@ private: required_device m_dac; required_ioport_array<4> m_inputs; - u16 m_inp_mux = 0; u8 m_select = 0; - u8 m_7seg_data = 0; + u16 m_inp_mux = 0; // address maps void main_map(address_map &map); void main_io(address_map &map); // I/O handlers - void update_display(); void control_w(u8 data); void digit_w(u8 data); u8 input_r(); @@ -87,7 +86,6 @@ void cp2000_state::machine_start() // register for savestates save_item(NAME(m_select)); save_item(NAME(m_inp_mux)); - save_item(NAME(m_7seg_data)); } @@ -96,20 +94,12 @@ void cp2000_state::machine_start() I/O *******************************************************************************/ -// 3850 ports - -void cp2000_state::update_display() -{ - m_display->matrix(m_select, m_7seg_data); -} - void cp2000_state::control_w(u8 data) { // d0-d3: digit select - m_select = ~data; - update_display(); - // d4: keypad/chessboard select + m_select = ~data; + m_display->write_my(m_select); // d5: speaker out m_dac->write(BIT(~data, 5)); @@ -133,13 +123,13 @@ u8 cp2000_state::input_r() { // d0-d3: multiplexed inputs from d4-d7 for (int i = 0; i < 4; i++) - if (BIT(m_inp_mux, i+4)) + if (BIT(m_inp_mux, i + 4)) data |= m_inputs[i]->read(); // d4-d7: multiplexed inputs from d0-d3 for (int i = 0; i < 4; i++) if (m_inp_mux & m_inputs[i]->read()) - data |= 1 << (i+4); + data |= 0x10 << i; } return data; @@ -152,8 +142,7 @@ void cp2000_state::digit_w(u8 data) m_inp_mux = data; // also digit segment data - m_7seg_data = bitswap<8>(data,0,2,1,3,4,5,6,7); - update_display(); + m_display->write_mx(bitswap<8>(data,0,2,1,3,4,5,6,7)); } @@ -258,4 +247,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1980, cp2000, 0, 0, cp2000, cp2000, cp2000_state, empty_init, "SciSys / Novag Industries", "Chess Partner 2000", MACHINE_SUPPORTS_SAVE ) +SYST( 1980, cp2000, 0, 0, cp2000, cp2000, cp2000_state, empty_init, "SciSys / Novag Industries / Philidor Software", "Chess Partner 2000", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/saitek/delta1.cpp b/src/mame/saitek/delta1.cpp index 9699c794443..62ce5615527 100644 --- a/src/mame/saitek/delta1.cpp +++ b/src/mame/saitek/delta1.cpp @@ -31,6 +31,7 @@ In the Delta-1 ROM is even some fragmented code remaining of the message: *******************************************************************************/ #include "emu.h" + #include "cpu/f8/f8.h" #include "machine/f3853.h" #include "machine/timer.h" @@ -107,8 +108,6 @@ void delta1_state::machine_start() I/O *******************************************************************************/ -// 3850 ports - void delta1_state::update_display() { m_display->matrix(m_led_select, (m_blink && m_7seg_rc) ? 0 : m_7seg_data); diff --git a/src/mame/saitek/exechess.cpp b/src/mame/saitek/exechess.cpp index c5e87b7294b..c16c0f0372d 100644 --- a/src/mame/saitek/exechess.cpp +++ b/src/mame/saitek/exechess.cpp @@ -268,4 +268,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, exechess, 0, 0, exechess, exechess, exechess_state, empty_init, "SciSys", "Executive Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +SYST( 1981, exechess, 0, 0, exechess, exechess, exechess_state, empty_init, "SciSys / Philidor Software", "Executive Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/saitek/intchess.cpp b/src/mame/saitek/intchess.cpp index 58e85f99d86..706dd028422 100644 --- a/src/mame/saitek/intchess.cpp +++ b/src/mame/saitek/intchess.cpp @@ -3,13 +3,18 @@ // thanks-to:Berger, Achim /******************************************************************************* -SciSys Intelligent Chess +Intelligent Games / SciSys Intelligent Chess +Developed by Intelligent Games, the same group of people that worked on SciSys +Super System III and Mark V. Manufactured by SciSys, their main business partner +at the time. The visual interface is an evolution of "Tolinka". + +It was advertised in a 1980 brochure by SciSys, but it looks like SciSys didn't +sell this chess computer. It was marketed by Intelligent Games themselves. The UK version wasn't widely released, the German version was more common. -Development by Intelligent Games, the same group of people that worked on the -Super System III and Mark V. The visual interface is an evolution of "Tolinka". Hardware notes: +- PCB label: INTELLIGENT GAMES Ltd, (C) 1980, IG3 - Synertek 6502A @ ~1.1MHz - Synertek 6522 VIA - 2*4KB ROM(Synertek 2332), 2KB RAM(4*M5L2114LP) @@ -26,6 +31,7 @@ TODO: *******************************************************************************/ #include "emu.h" + #include "cpu/m6502/m6502.h" #include "imagedev/cassette.h" #include "machine/6522via.h" @@ -39,7 +45,7 @@ TODO: #include "speaker.h" // internal artwork -#include "saitek_intchess.lh" +#include "intchess.lh" namespace { @@ -65,9 +71,6 @@ public: void intchess(machine_config &config); -protected: - virtual void machine_start() override; - private: // devices/pointers required_device m_maincpu; @@ -81,14 +84,9 @@ private: required_device m_palette; required_device m_cass; - u8 m_select = 0; - u8 m_7seg_data = 0; - - // address maps void main_map(address_map &map); // I/O handlers - void update_display(); void seg_w(u8 data); void control_w(u8 data); u8 control_r(); @@ -100,13 +98,6 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(cass_input); }; -void intchess_state::machine_start() -{ - // register for savestates - save_item(NAME(m_select)); - save_item(NAME(m_7seg_data)); -} - INPUT_CHANGED_MEMBER(intchess_state::reset_button) { // assume that reset button is tied to 6502/6522 @@ -164,24 +155,17 @@ void intchess_state::vram_w(offs_t offset, u8 data) I/O *******************************************************************************/ -void intchess_state::update_display() -{ - m_display->matrix(m_select, m_7seg_data); -} - void intchess_state::seg_w(u8 data) { // PA1-PA7: 7seg data // PA0: ? - m_7seg_data = bitswap<8>(~data,0,1,2,3,4,5,6,7); - update_display(); + m_display->write_mx(bitswap<8>(~data,0,1,2,3,4,5,6,7)); } void intchess_state::control_w(u8 data) { // PB0-PB3: digit select - m_select = data & 0xf; - update_display(); + m_display->write_my(data & 0xf); // PB5-PB7 to cassette deck // PB5: speaker @@ -321,7 +305,7 @@ void intchess_state::intchess(machine_config &config) PWM_DISPLAY(config, m_display).set_size(4, 8); m_display->set_segmask(0xf, 0x7f); - config.set_default_layout(layout_saitek_intchess); + config.set_default_layout(layout_intchess); // sound hardware SPEAKER(config, "speaker").front_center(); @@ -358,4 +342,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1980, intchess, 0, 0, intchess, intchess, intchess_state, empty_init, "SciSys / Intelligent Games", "Intelligent Chess", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS ) +SYST( 1980, intchess, 0, 0, intchess, intchess, intchess_state, empty_init, "Intelligent Games / SciSys", "Intelligent Chess", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/saitek/minichess.cpp b/src/mame/saitek/minichess.cpp index 261d34eb780..ab4ebf609db 100644 --- a/src/mame/saitek/minichess.cpp +++ b/src/mame/saitek/minichess.cpp @@ -9,7 +9,7 @@ It's the first chess program on HMCS40. The engine was written by Mark Taylor with assistance from David Levy. Hardware notes: -- Hitachi 44801A34 MCU @ ~400kHz +- Hitachi 44801A34 MCU @ ~500kHz - 4-digit LCD screen Excluding resellers with same title, this MCU was used in: @@ -182,7 +182,7 @@ INPUT_PORTS_END void mini_state::smchess(machine_config &config) { // basic machine hardware - HD44801(config, m_maincpu, 400'000); + HD44801(config, m_maincpu, 500'000); // approximation, R=62K m_maincpu->write_r<2>().set(FUNC(mini_state::seg_w<0>)); m_maincpu->write_r<3>().set(FUNC(mini_state::seg_w<1>)); m_maincpu->write_d().set(FUNC(mini_state::mux_w)); @@ -225,4 +225,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, smchess, 0, 0, smchess, smchess, mini_state, empty_init, "SciSys", "Mini Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +SYST( 1981, smchess, 0, 0, smchess, smchess, mini_state, empty_init, "SciSys / Philidor Software", "Mini Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/saitek/prschess.cpp b/src/mame/saitek/prschess.cpp index a3c83921018..3628de1e3e2 100644 --- a/src/mame/saitek/prschess.cpp +++ b/src/mame/saitek/prschess.cpp @@ -24,6 +24,7 @@ TODO: *******************************************************************************/ #include "emu.h" + #include "cpu/m6502/m6502.h" #include "machine/sensorboard.h" #include "sound/dac.h" diff --git a/src/mame/saitek/ssystem3.cpp b/src/mame/saitek/ssystem3.cpp index 6885e4d8da3..b1001a59c0c 100644 --- a/src/mame/saitek/ssystem3.cpp +++ b/src/mame/saitek/ssystem3.cpp @@ -3,14 +3,15 @@ // thanks-to:Berger /******************************************************************************* -SciSys / Novag Chess Champion: Super System III (aka MK III), distributed by -both SciSys and Novag. Which company was responsible for which part of the -manufacturing chain is unknown. The software is by SciSys (no mention of Novag -in the ROM, it has "COPYRIGHT SCISYS LTD 1979"). +SciSys / Novag Chess Champion: Super System III (aka MK III) + +It was distributed by both SciSys and Novag. Which company was responsible for +which part of the production chain is unknown. The copyright was assigned to SciSys +(no mention of Novag in the ROM, it has "COPYRIGHT SCISYS LTD 1979"). This is their 1st original product. MK II was licensed from Peter Jennings, and -MK I was, to put it bluntly, a bootleg. The chess engine is by Mike Johnson, -with support from David Levy. +MK I was, to put it bluntly, a bootleg. The chess engine is by Mike Johnson, with +support from David Levy, Philidor Software. Hardware notes: @@ -572,5 +573,6 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1979, ssystem3, 0, 0, ssystem3, ssystem3, ssystem3_state, init_ssystem3, "SciSys / Novag Industries", "Chess Champion: Super System III", MACHINE_SUPPORTS_SAVE ) -SYST( 1980, ssystem4, 0, 0, ssystem4, ssystem4, ssystem3_state, empty_init, "SciSys", "Chess Champion: Super System IV", MACHINE_SUPPORTS_SAVE ) +SYST( 1979, ssystem3, 0, 0, ssystem3, ssystem3, ssystem3_state, init_ssystem3, "SciSys / Novag Industries / Philidor Software", "Chess Champion: Super System III", MACHINE_SUPPORTS_SAVE ) + +SYST( 1980, ssystem4, 0, 0, ssystem4, ssystem4, ssystem3_state, empty_init, "SciSys / Philidor Software", "Chess Champion: Super System IV", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/saitek/tschess.cpp b/src/mame/saitek/tschess.cpp new file mode 100644 index 00000000000..c0ce125346d --- /dev/null +++ b/src/mame/saitek/tschess.cpp @@ -0,0 +1,199 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/******************************************************************************* + +SciSys Travel Sensor Chess (aka Travel Sensor) + +The chess engine was written by Mark Taylor, employee at Intelligent Software +(formerly known as Philidor Software). The I/O is very similar to CXG Sensor +Computachess (see cxg/computachess.cpp). + +Hardware notes: +- PCB label: SCISYS TC-A, 201148 +- Hitachi 44801A85 MCU @ ~350kHz +- piezo, 21 leds, button sensors chessboard + +44801A85 MCU is used in: +- SciSys Travel Sensor Chess +- SciSys Travel Mate Chess +- SciSys Chess Partner 5000 +- SciSys Chess Partner 6000 + +TODO: +- add memory switch (it goes to the HLT pin) + +*******************************************************************************/ + +#include "emu.h" + +#include "cpu/hmcs40/hmcs40.h" +#include "machine/sensorboard.h" +#include "sound/dac.h" +#include "video/pwm.h" + +#include "speaker.h" + +// internal artwork +#include "saitek_tschess.lh" + + +namespace { + +class tschess_state : public driver_device +{ +public: + tschess_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_inputs(*this, "IN.%u", 0) + { } + + void tschess(machine_config &config); + + // New Game button is directly tied to MCU reset + DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } + +protected: + virtual void machine_start() override; + +private: + // devices/pointers + required_device m_maincpu; + required_device m_board; + required_device m_display; + required_device m_dac; + required_ioport_array<2> m_inputs; + + u8 m_inp_mux = 0; + + template void mux_w(u8 data); + void control_w(u16 data); + u16 input_r(); +}; + +void tschess_state::machine_start() +{ + save_item(NAME(m_inp_mux)); +} + + + +/******************************************************************************* + I/O +*******************************************************************************/ + +template +void tschess_state::mux_w(u8 data) +{ + // R2x,R3x: input mux, led data + m_inp_mux = (m_inp_mux & ~(0xf << (N*4))) | ((data ^ 0xf) << (N*4)); + m_display->write_mx(m_inp_mux); +} + +void tschess_state::control_w(u16 data) +{ + // D1-D3: led select + m_display->write_my(~data >> 1 & 7); + + // D4: speaker out + m_dac->write(data >> 4 & 1); +} + +u16 tschess_state::input_r() +{ + u16 data = 0; + + // D6,D7: read buttons + for (int i = 0; i < 2; i++) + if (m_inp_mux & m_inputs[i]->read()) + data |= 0x40 << i; + + // D8-D15: read chessboard + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_board->read_file(i ^ 7) << 8; + + return ~data; +} + + + +/******************************************************************************* + Input Ports +*******************************************************************************/ + +static INPUT_PORTS_START( tschess ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("White/Black") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Queen") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Rook") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Knight") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Pawn") + + PORT_START("IN.1") + PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Compute") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Set Up") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Sound") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level") + + PORT_START("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, tschess_state, reset_button, 0) PORT_NAME("New Game") +INPUT_PORTS_END + + + +/******************************************************************************* + Machine Configs +*******************************************************************************/ + +void tschess_state::tschess(machine_config &config) +{ + // basic machine hardware + HD44801(config, m_maincpu, 350'000); // approximation, R=150K + m_maincpu->write_r<2>().set(FUNC(tschess_state::mux_w<0>)); + m_maincpu->write_r<3>().set(FUNC(tschess_state::mux_w<1>)); + m_maincpu->write_d().set(FUNC(tschess_state::control_w)); + m_maincpu->read_d().set(FUNC(tschess_state::input_r)); + + 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_saitek_tschess); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + + + +/******************************************************************************* + ROM Definitions +*******************************************************************************/ + +ROM_START( tschess ) + ROM_REGION( 0x2000, "maincpu", 0 ) + ROM_LOAD("44801a85_scisys_tc-1982.u1", 0x0000, 0x2000, CRC(3ed0253a) SHA1(a3352758285292cfb0ad66e095cc951113332ced) ) +ROM_END + +} // anonymous namespace + + + +/******************************************************************************* + Drivers +*******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1982, tschess, 0, 0, tschess, tschess, tschess_state, empty_init, "SciSys / Intelligent Software", "Travel Sensor Chess", MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3