summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/mephisto_mm2.xml2
-rw-r--r--src/devices/machine/smartboard.cpp2
-rw-r--r--src/devices/video/hd61603.cpp6
-rw-r--r--src/devices/video/hd61603.h1
-rw-r--r--src/mame/chess/yeno_532xl.cpp275
-rw-r--r--src/mame/handheld/rzone.cpp2
-rw-r--r--src/mame/handheld/tispeak.cpp2
-rw-r--r--src/mame/handheld/tispellb.cpp2
-rw-r--r--src/mame/hegenerglaser/mm2.cpp5
-rw-r--r--src/mame/hegenerglaser/polgar.cpp10
-rw-r--r--src/mame/mame.lst3
-rw-r--r--src/mame/mess.flt1
12 files changed, 297 insertions, 14 deletions
diff --git a/hash/mephisto_mm2.xml b/hash/mephisto_mm2.xml
index 6510b98dd86..38d292b4ba0 100644
--- a/hash/mephisto_mm2.xml
+++ b/hash/mephisto_mm2.xml
@@ -6,7 +6,7 @@ license:CC0
<softwarelist name="mephisto_mm2" description="Mephisto MM II Modules">
-<!-- HG 240 module is exclusively used with MM II -->
+<!-- HG 240 module is exclusively used with MM II, it is 100% identical to Conchess L16 -->
<software name="hg240">
<description>Mephisto HG 240 Opening Library</description>
diff --git a/src/devices/machine/smartboard.cpp b/src/devices/machine/smartboard.cpp
index 5ac68fea89e..2e34c1ec241 100644
--- a/src/devices/machine/smartboard.cpp
+++ b/src/devices/machine/smartboard.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Sandro Ronco, hap
/******************************************************************************
-Tasc SmartBoard SB30
+Tasc SmartBoard SB30 (analog)
Chessboard controller for use with Tasc R30 chesscomputer, or as PC peripheral.
diff --git a/src/devices/video/hd61603.cpp b/src/devices/video/hd61603.cpp
index 92bdd006e5a..70864d49272 100644
--- a/src/devices/video/hd61603.cpp
+++ b/src/devices/video/hd61603.cpp
@@ -9,7 +9,6 @@ TODO:
- OSC pin (input is resistor)
- SB pin, halts internal clock
- SYNC pin for chip cascading
-- RE pin, resets count
- READY pin
*/
@@ -46,6 +45,11 @@ void hd61603_device::device_start()
save_item(NAME(m_ram));
}
+void hd61603_device::device_reset()
+{
+ m_count = 0;
+}
+
//-------------------------------------------------
// handlers
diff --git a/src/devices/video/hd61603.h b/src/devices/video/hd61603.h
index 9fcdae37600..5b4d31e5ec7 100644
--- a/src/devices/video/hd61603.h
+++ b/src/devices/video/hd61603.h
@@ -47,6 +47,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_reset() override;
private:
u8 m_count = 0;
diff --git a/src/mame/chess/yeno_532xl.cpp b/src/mame/chess/yeno_532xl.cpp
new file mode 100644
index 00000000000..e828478cab5
--- /dev/null
+++ b/src/mame/chess/yeno_532xl.cpp
@@ -0,0 +1,275 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Lars Hjorth
+/******************************************************************************
+
+Yeno 532 XL
+
+This is the only Yeno chesscomputer that has a common CPU with external EPROM,
+others are based on a 1-chip MCU. The 532 XL chess engine is by Ulf Rathsman.
+
+Hardware notes:
+- R65C02P4 @ 4 MHz
+- 32KB ROM (MBM27C256H-10)
+- 8KB battery-backed RAM (HY6264LP-10)
+- HD61603, 2 4*7seg LCD screens
+- TTL, piezo, 8*8+7 LEDs, button sensors
+
+TODO:
+- WIP (internal artwork, mostly)
+
+******************************************************************************/
+
+#include "emu.h"
+
+#include "cpu/m6502/r65c02.h"
+#include "machine/sensorboard.h"
+#include "sound/dac.h"
+#include "video/hd61603.h"
+#include "video/pwm.h"
+
+#include "speaker.h"
+
+// internal artwork
+//#include "yeno_532xl.lh" // clickable
+
+
+namespace {
+
+class y532xl_state : public driver_device
+{
+public:
+ y532xl_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_lcd(*this, "lcd"),
+ m_display(*this, "display"),
+ m_board(*this, "board"),
+ m_dac(*this, "dac"),
+ m_inputs(*this, "IN.%u", 0),
+ m_out_digit(*this, "digit%u", 0U),
+ m_out_lcd(*this, "lcd%u", 0U)
+ { }
+
+ // machine configs
+ void y532xl(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<hd61603_device> m_lcd;
+ required_device<pwm_display_device> m_display;
+ required_device<sensorboard_device> m_board;
+ required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
+ required_ioport_array<3> m_inputs;
+ output_finder<8> m_out_digit;
+ output_finder<64> m_out_lcd;
+
+ // address maps
+ void main_map(address_map &map);
+
+ // I/O handlers
+ void update_display();
+ void lcd_seg_w(u64 data);
+ u8 input_r();
+ void cb_w(u8 data);
+ void led_w(u8 data);
+ void control_w(offs_t offset, u8 data);
+
+ u8 m_led_data = 0;
+ u8 m_cb_mux = 0xff;
+ u8 m_control = 0xff;
+};
+
+void y532xl_state::machine_start()
+{
+ m_out_digit.resolve();
+ m_out_lcd.resolve();
+
+ // register for savestates
+ save_item(NAME(m_led_data));
+ save_item(NAME(m_cb_mux));
+ save_item(NAME(m_control));
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+void y532xl_state::update_display()
+{
+ m_display->matrix(~(m_control << 8 | m_cb_mux), m_led_data);
+}
+
+void y532xl_state::lcd_seg_w(u64 data)
+{
+ // output individual segments
+ for (int i = 0; i < 64; i++)
+ m_out_lcd[i] = BIT(data, i);
+
+ // output digits
+ for (int i = 0; i < 8; i++)
+ {
+ u8 digit_data = bitswap<8>(data,7,3,2,4,5,6,0,1);
+ m_out_digit[i] = (i & 3) ? digit_data : digit_data & 0x7f; // no DP for last digit
+ data >>= 8;
+ }
+}
+
+u8 y532xl_state::input_r()
+{
+ u8 data = 0;
+
+ // read side panel buttons
+ for (int i = 0; i < 3; i++)
+ if (BIT(~m_control, i))
+ data |= m_inputs[i]->read();
+
+ // read chessboard sensors
+ for (int i = 0; i < 8; i++)
+ if (BIT(~m_cb_mux, i))
+ data |= m_board->read_file(i);
+
+ return data;
+}
+
+void y532xl_state::cb_w(u8 data)
+{
+ // d0-d7: chessboard input mux
+ m_cb_mux = data;
+ update_display();
+}
+
+void y532xl_state::led_w(u8 data)
+{
+ // d0-d7: led data
+ m_led_data = data;
+ update_display();
+}
+
+void y532xl_state::control_w(offs_t offset, u8 data)
+{
+ u8 prev = m_control;
+
+ // a0-a2,d0: 74259
+ u8 mask = 1 << offset;
+ m_control = (m_control & ~mask) | ((data & 1) ? mask : 0);
+
+ // Q0-Q2: button input mux
+ // Q0: select side leds
+ update_display();
+
+ // Q3,Q4: speaker out
+ m_dac->write(m_control >> 3 & 3);
+
+ // Q7 rising edge: write to lcd
+ if (~prev & m_control & 0x80)
+ m_lcd->data_w(m_cb_mux & 0xf);
+
+}
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void y532xl_state::main_map(address_map &map)
+{
+ map(0x0000, 0x1fff).ram();
+ map(0x2000, 0x2000).w(FUNC(y532xl_state::cb_w));
+ map(0x2080, 0x2080).w(FUNC(y532xl_state::led_w));
+ map(0x2100, 0x2100).r(FUNC(y532xl_state::input_r));
+ map(0x2180, 0x2187).w(FUNC(y532xl_state::control_w));
+ map(0x8000, 0xffff).rom();
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( y532xl )
+ PORT_START("IN.0")
+ PORT_BIT(0x3f, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Show Move")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Play")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game / Clear Board")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Set Up")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Multi Move")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Teach")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9 / Take Back")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0 / Forward")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A / 1 / Pawn")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B / 2 / Knight")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C / 3 / Bishop")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D / 4 / Rook")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E / 5 / Queen")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F / 6 / King")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G / 7 / Black")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8 / White")
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
+
+void y532xl_state::y532xl(machine_config &config)
+{
+ /* basic machine hardware */
+ R65C02(config, m_maincpu, 4_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &y532xl_state::main_map);
+
+ const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000);
+ m_maincpu->set_periodic_int(FUNC(y532xl_state::nmi_line_pulse), nmi_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(150));
+
+ /* video hardware */
+ HD61603(config, m_lcd, 0);
+ m_lcd->write_segs().set(FUNC(y532xl_state::lcd_seg_w));
+
+ PWM_DISPLAY(config, m_display).set_size(9, 8);
+ //config.set_default_layout(layout_yeno_532xl);
+
+ /* sound hardware */
+ SPEAKER(config, "speaker").front_center();
+ DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( y532xl )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("532xl_00674.u9", 0x8000, 0x8000, CRC(8ded1df6) SHA1(6bcbebb8e1fde472e1ccd0036cb3f00b27f72d89) )
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1989, y532xl, 0, 0, y532xl, y532xl, y532xl_state, empty_init, "Yeno", "532 XL (Yeno)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )
diff --git a/src/mame/handheld/rzone.cpp b/src/mame/handheld/rzone.cpp
index abae24156fb..f5b89883ad9 100644
--- a/src/mame/handheld/rzone.cpp
+++ b/src/mame/handheld/rzone.cpp
@@ -3,7 +3,7 @@
// thanks-to:Sean Riddle
/***************************************************************************
- ** subclass of hh_sm510_state (includes/hh_sm510.h, drivers/hh_sm510.cpp) **
+ ** subclass of hh_sm510_state (hh_sm510.h, hh_sm510.cpp) **
Tiger R-Zone driver
diff --git a/src/mame/handheld/tispeak.cpp b/src/mame/handheld/tispeak.cpp
index 667647474f1..b184eab0a0f 100644
--- a/src/mame/handheld/tispeak.cpp
+++ b/src/mame/handheld/tispeak.cpp
@@ -3,7 +3,7 @@
// thanks-to:Sean Riddle, David Viens, Kevin Horton
/***************************************************************************
- ** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
+ ** subclass of hh_tms1k_state (hh_tms1k.h, hh_tms1k.cpp) **
Texas Instruments 1st-gen. handheld speech devices.
diff --git a/src/mame/handheld/tispellb.cpp b/src/mame/handheld/tispellb.cpp
index 3826fcae96c..ddb447b5301 100644
--- a/src/mame/handheld/tispellb.cpp
+++ b/src/mame/handheld/tispellb.cpp
@@ -3,7 +3,7 @@
// thanks-to:Sean Riddle
/***************************************************************************
- ** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
+ ** subclass of hh_tms1k_state (hh_tms1k.h, hh_tms1k.cpp) **
Texas Instruments Spelling B hardware
diff --git a/src/mame/hegenerglaser/mm2.cpp b/src/mame/hegenerglaser/mm2.cpp
index 94a2f652341..35a4d7dba33 100644
--- a/src/mame/hegenerglaser/mm2.cpp
+++ b/src/mame/hegenerglaser/mm2.cpp
@@ -66,9 +66,8 @@ $8000-$FFF ROM
For rebel5 and newer, the chess engine is by Ed Schröder. Older chesscomputers in
this driver were authored by Ulf Rathsman.
-The MM II program was also licensed to Daimler-Benz, who manufactured several custom
-chesscomputers as a parting gift to retiring executives. The hardware seems identical to
-MM II, except on one of them it looks like an 8MHz XTAL was used instead of 7.3728MHz.
+The MM II program was also licensed to Daimler-Benz, who gave away several custom
+chesscomputers as a parting gift to retiring executives. The hardware is same as MM II.
see(1): http://chesseval.com/ChessEvalJournal/DaimlerBenz.htm
see(2): http://chesseval.com/RareBoard/DaimlerBenzBoard.htm
diff --git a/src/mame/hegenerglaser/polgar.cpp b/src/mame/hegenerglaser/polgar.cpp
index 3f9aa1749ce..5cd97a3d795 100644
--- a/src/mame/hegenerglaser/polgar.cpp
+++ b/src/mame/hegenerglaser/polgar.cpp
@@ -154,14 +154,14 @@ ROM_START( polgara )
ROM_LOAD("polgar_1.10_04.08.1989", 0x0000, 0x10000, CRC(a4519c55) SHA1(35463a4cbcf20ebbd5ac5bc7664a862b1557c65f) ) // TC57512AD-15
ROM_END
-ROM_START( polgar10 )
+ROM_START( polgar101 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("polg.10mhz_v_10.0", 0x00000, 0x10000, CRC(7c1960d4) SHA1(4d15b51f9e6f7943815945cd56078ca512a964d4) )
+ ROM_LOAD("polg_101.bin", 0x00000, 0x10000, CRC(8fb6afa4) SHA1(d1cf868302a665ff351686b26a149ced0045fc81) )
ROM_END
-ROM_START( polgar101 )
+ROM_START( polgar10 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("polg_101.bin", 0x00000, 0x10000, CRC(8fb6afa4) SHA1(d1cf868302a665ff351686b26a149ced0045fc81) )
+ ROM_LOAD("polg.10mhz_v_10.0", 0x00000, 0x10000, CRC(7c1960d4) SHA1(4d15b51f9e6f7943815945cd56078ca512a964d4) )
ROM_END
} // anonymous namespace
@@ -175,5 +175,5 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1990, polgar, 0, 0, polgar, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.50)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, polgara, polgar, 0, polgar, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, polgar10, polgar, 0, polgar10, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, polgar101, polgar, 0, polgar10, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, polgar10, polgar, 0, polgar10, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 30682520bea..2767c872683 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -44236,6 +44236,9 @@ higurashi // (c)2009 AQ Interactive
kof2002um // (c)2009 SNK Playmore / New Channel
kof2002umj // (c)2009 SNK Playmore / New Channel
+@source:chess/yeno_532xl.cpp
+y532xl
+
@source:philips/yes.cpp
yes //
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index def6ff96f66..c1b3653cfd4 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -140,6 +140,7 @@ chess/conic_cchess2.cpp
chess/conic_cchess3.cpp
chess/regence.cpp
chess/tasc.cpp
+chess/yeno_532xl.cpp
chromatics/cgc7900.cpp
citoh/cit101.cpp
citoh/cit101xl.cpp