From 974e8f75ceb118b0fb3af828a3656b8e8a4db4e6 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 2 Oct 2024 22:35:47 +0200 Subject: New working systems ------------------- Bridge Computer (Diamond) [hap, Sean Riddle] Pocket Micro De-Luxe [hap, Sean Riddle] --- src/mame/chessking/pmicrodx.cpp | 246 +++++++++++++++++++++++++++++++++++ src/mame/handheld/dbridgec.cpp | 257 +++++++++++++++++++++++++++++++++++++ src/mame/handheld/hh_hmcs40.cpp | 6 +- src/mame/layout/cking_pmicrodx.lay | 82 ++++++++++++ src/mame/layout/dbridgec.lay | 178 +++++++++++++++++++++++++ src/mame/mame.lst | 6 + src/mame/saitek/minichess.cpp | 10 +- src/mame/saitek/superstar.cpp | 5 +- src/mame/saitek/turbo16k.cpp | 6 +- 9 files changed, 783 insertions(+), 13 deletions(-) create mode 100644 src/mame/chessking/pmicrodx.cpp create mode 100644 src/mame/handheld/dbridgec.cpp create mode 100644 src/mame/layout/cking_pmicrodx.lay create mode 100644 src/mame/layout/dbridgec.lay diff --git a/src/mame/chessking/pmicrodx.cpp b/src/mame/chessking/pmicrodx.cpp new file mode 100644 index 00000000000..75bad506e0c --- /dev/null +++ b/src/mame/chessking/pmicrodx.cpp @@ -0,0 +1,246 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/******************************************************************************* + +Chess King Pocket Micro De-Luxe + +Hardware notes: +- Hitachi HD44868 @ ~800kHz (33K resistor) +- LCD with 4 7segs and custom segments, piezo + +HD44868A07 MCU is used in: +- Chess King Pocket Micro De-Luxe +- Chess King Mighty Midget De-Luxe +- Mephisto Teufelchen (H+G brand Pocket Micro De-Luxe) + +TODO: +- dump/add the first version (Pocket Micro), does it fit in this driver? + +*******************************************************************************/ + +#include "emu.h" + +#include "cpu/hmcs40/hmcs40.h" +#include "sound/dac.h" +#include "video/pwm.h" + +#include "screen.h" +#include "speaker.h" + +// internal artwork +#include "cking_pmicrodx.lh" + + +namespace { + +class pmicrodx_state : public driver_device +{ +public: + pmicrodx_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_display(*this, "display"), + m_dac(*this, "dac"), + m_inputs(*this, "IN.%u", 0) + { } + + void pmicrodx(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { refresh_irq(1 << param); } + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD { refresh_irq(); } + +private: + // devices/pointers + required_device m_maincpu; + required_device m_display; + required_device m_dac; + required_ioport_array<5> m_inputs; + + u8 m_inp_mux = 0; + u8 m_lcd_com = 0; + u64 m_lcd_segs = 0; + + void update_lcd(); + template void seg_w(u8 data); + u8 read_buttons(); + void refresh_irq(u8 mask = ~0); + u16 input_r(); + void control_w(u16 data); +}; + +void pmicrodx_state::machine_start() +{ + save_item(NAME(m_inp_mux)); + save_item(NAME(m_lcd_com)); + save_item(NAME(m_lcd_segs)); +} + + + +/******************************************************************************* + I/O +*******************************************************************************/ + +void pmicrodx_state::update_lcd() +{ + // LCD common is analog (voltage level) + const u8 com = population_count_32(m_lcd_com & 3); + const u64 data = (com == 0) ? m_lcd_segs : (com == 2) ? ~m_lcd_segs : 0; + m_display->write_row(0, data); +} + +template +void pmicrodx_state::seg_w(u8 data) +{ + // R0x-R6x: LCD segments + const u8 shift = N * 4; + m_lcd_segs = (m_lcd_segs & ~(u64(0xf << shift))) | (u64(data) << shift); + update_lcd(); +} + +u8 pmicrodx_state::read_buttons() +{ + u8 data = 0; + + for (int i = 0; i < 4; i++) + if (m_inp_mux & m_inputs[i]->read()) + data |= 1 << i; + + return data; +} + +void pmicrodx_state::refresh_irq(u8 mask) +{ + // half of the buttons are tied to MCU interrupt pins + mask &= read_buttons(); + for (int i = 0; i < 2; i++) + m_maincpu->set_input_line(i, BIT(mask, i) ? CLEAR_LINE : ASSERT_LINE); +} + +u16 pmicrodx_state::input_r() +{ + // D0: battery status + u16 data = m_inputs[4]->read() & 1; + + // D2,D3: read buttons + data |= read_buttons() & 0xc; + return ~data; +} + +void pmicrodx_state::control_w(u16 data) +{ + // D1: speaker out + m_dac->write(BIT(data, 1)); + + // D4-D6: input mux + m_inp_mux = ~data >> 4 & 7; + refresh_irq(); + + // D7,D8: LCD common + m_lcd_com = data >> 7 & 3; + + // D9-D15: more LCD segments + m_lcd_segs = (m_lcd_segs & 0x0fff'ffffULL) | (u64(data & 0xfe00) << 19); + update_lcd(); +} + + + +/******************************************************************************* + Input Ports +*******************************************************************************/ + +#define INPUT_CHANGED(x) \ + PORT_CHANGED_MEMBER(DEVICE_SELF, pmicrodx_state, input_changed, x) + +static INPUT_PORTS_START( pmicrodx ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(0) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A1") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(0) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E5") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(0) PORT_CODE(KEYCODE_L) PORT_NAME("LV") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(1) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B2") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(1) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F6") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) INPUT_CHANGED(1) PORT_CODE(KEYCODE_T) PORT_NAME("TB") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C3") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("EN") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D4") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H8") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") + + PORT_START("IN.4") + PORT_CONFNAME( 0x01, 0x01, "Battery Status" ) + PORT_CONFSETTING( 0x00, "Low" ) + PORT_CONFSETTING( 0x01, DEF_STR( Normal ) ) +INPUT_PORTS_END + + + +/******************************************************************************* + Machine Configs +*******************************************************************************/ + +void pmicrodx_state::pmicrodx(machine_config &config) +{ + // basic machine hardware + HD44868(config, m_maincpu, 800'000); // approximation + m_maincpu->write_r<0>().set(FUNC(pmicrodx_state::seg_w<0>)); + m_maincpu->write_r<1>().set(FUNC(pmicrodx_state::seg_w<1>)); + m_maincpu->write_r<2>().set(FUNC(pmicrodx_state::seg_w<2>)); + m_maincpu->write_r<3>().set(FUNC(pmicrodx_state::seg_w<3>)); + m_maincpu->write_r<4>().set(FUNC(pmicrodx_state::seg_w<4>)); + m_maincpu->write_r<5>().set(FUNC(pmicrodx_state::seg_w<5>)); + m_maincpu->write_r<6>().set(FUNC(pmicrodx_state::seg_w<6>)); + m_maincpu->write_d().set(FUNC(pmicrodx_state::control_w)); + m_maincpu->read_d().set(FUNC(pmicrodx_state::input_r)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(1, 35); + m_display->set_bri_levels(0.05); + config.set_default_layout(layout_cking_pmicrodx); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_refresh_hz(60); + screen.set_size(1920/3, 851/3); + screen.set_visarea_full(); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + + + +/******************************************************************************* + ROM Definitions +*******************************************************************************/ + +ROM_START( pmicrodx ) + ROM_REGION( 0x2000, "maincpu", 0 ) + ROM_LOAD("chessking_mark_2_hd44868a07", 0x0000, 0x2000, CRC(aef47e60) SHA1(97cb7b51ce354c54c6f0faa903d5bd70d5a108ba) ) + ROM_IGNORE( 0x2000 ) // ignore factory test banks + + ROM_REGION( 74477, "screen", 0 ) + ROM_LOAD("pmicrodx.svg", 0, 74477, CRC(34563496) SHA1(dcca2223cc35d54955caead8ff14e6f96b4155ce) ) +ROM_END + +} // anonymous namespace + + + +/******************************************************************************* + Drivers +*******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1984, pmicrodx, 0, 0, pmicrodx, pmicrodx, pmicrodx_state, empty_init, "Chess King / Intelligent Software", "Pocket Micro De-Luxe", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/handheld/dbridgec.cpp b/src/mame/handheld/dbridgec.cpp new file mode 100644 index 00000000000..21cb3d6cfb8 --- /dev/null +++ b/src/mame/handheld/dbridgec.cpp @@ -0,0 +1,257 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/******************************************************************************* + +Diamond Bridge Computer (model M1011) +Also sold by Nu Vations as Nu Va Bridge Computer (model NV211) + +Hardware notes: +- PCB label: MCL, M1011 +- Hitachi HD44860 @ ~800kHz (33K resistor) +- LCD with custom segments, no sound +- comms jack for playing against another Bridge Computer + +TODO: +- add comms port +- is Diamond Bridge Computer II (model M1021) on similar hardware? + +*******************************************************************************/ + +#include "emu.h" + +#include "cpu/hmcs40/hmcs40.h" +#include "video/pwm.h" + +#include "screen.h" + +// internal artwork +#include "dbridgec.lh" + + +namespace { + +class dbridgec_state : public driver_device +{ +public: + dbridgec_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_display(*this, "display"), + m_inputs(*this, "IN.%u", 0) + { } + + void dbridgec(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(in0_changed) { refresh_irq(); } + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD { refresh_irq(); } + +private: + // devices/pointers + required_device m_maincpu; + required_device m_display; + required_ioport_array<4> m_inputs; + + u8 m_inp_mux = 0; + u8 m_lcd_com = 0; + u64 m_lcd_segs = 0; + + // I/O handlers + void update_lcd(); + template void lcd1_w(u8 data); + void lcd2_w(u16 data); + + u8 read_buttons(); + void refresh_irq(); + u16 input_r(); + template void input_w(u8 data); +}; + +void dbridgec_state::machine_start() +{ + save_item(NAME(m_inp_mux)); + save_item(NAME(m_lcd_com)); + save_item(NAME(m_lcd_segs)); +} + + + +/******************************************************************************* + I/O +*******************************************************************************/ + +void dbridgec_state::update_lcd() +{ + const u8 com1 = BIT(m_lcd_com, 4); + const u8 com2 = m_lcd_com & 0xf; + const u64 data = com1 ? m_lcd_segs : ~m_lcd_segs; + + for (int i = 0; i < 4; i++) + m_display->write_row(i, (BIT(com2, i) == com1) ? data : 0); +} + +template +void dbridgec_state::lcd1_w(u8 data) +{ + // R0x-R6x: LCD segments + const u8 shift = N * 4; + m_lcd_segs = (m_lcd_segs & ~(u64(0xf << shift))) | (u64(data) << shift); + update_lcd(); +} + +void dbridgec_state::lcd2_w(u16 data) +{ + // D0-D4: LCD common + m_lcd_com = data & 0x1f; + + // D9,D10,D12-D15: more LCD segments + const u8 segs = (data >> 9 & 3) | (data >> 10 & 0x3c); + m_lcd_segs = (m_lcd_segs & 0x0fff'ffffULL) | u64(segs) << 28; + update_lcd(); + + // D5: comms port +} + +u8 dbridgec_state::read_buttons() +{ + u8 data = 0; + + for (int i = 0; i < 4; i++) + if (m_inp_mux & m_inputs[i]->read()) + data |= 1 << i; + + return data; +} + +void dbridgec_state::refresh_irq() +{ + // right button column goes to MCU INT0 + m_maincpu->set_input_line(0, (read_buttons() & 1) ? CLEAR_LINE : ASSERT_LINE); +} + +u16 dbridgec_state::input_r() +{ + // D6-D8: read buttons + u16 data = read_buttons() << 5 & 0x1c0; + return ~data; + + // D5: comms port +} + +template +void dbridgec_state::input_w(u8 data) +{ + // R4x,R5x: input mux + const u8 shift = N * 4; + m_inp_mux = (m_inp_mux & ~(0xf << shift)) | ((data ^ 0xf) << shift); + refresh_irq(); +} + + + +/******************************************************************************* + Input Ports +*******************************************************************************/ + +#define IN0_CHANGED(x) \ + PORT_CHANGED_MEMBER(DEVICE_SELF, dbridgec_state, in0_changed, 0) + +static INPUT_PORTS_START( dbridgec ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_U) PORT_NAME("Dummy") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_T) PORT_NAME("Partner") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_L) PORT_NAME("Level") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_H) PORT_NAME("Change Side") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_S) PORT_NAME("Score") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_R) PORT_NAME("New Rubber") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) IN0_CHANGED() PORT_CODE(KEYCODE_D) PORT_NAME("Deal") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_P) PORT_NAME("Pass") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Double") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("No Trump") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Clubs") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Diamonds") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Hearts") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Spades") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("A") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("K") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("J") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("10") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") +INPUT_PORTS_END + + + +/******************************************************************************* + Machine Configs +*******************************************************************************/ + +void dbridgec_state::dbridgec(machine_config &config) +{ + // basic machine hardware + HD44860(config, m_maincpu, 800'000); // approximation + m_maincpu->write_r<0>().set(FUNC(dbridgec_state::lcd1_w<0>)); + m_maincpu->write_r<1>().set(FUNC(dbridgec_state::lcd1_w<1>)); + m_maincpu->write_r<2>().set(FUNC(dbridgec_state::lcd1_w<2>)); + m_maincpu->write_r<3>().set(FUNC(dbridgec_state::lcd1_w<3>)); + m_maincpu->write_r<4>().set(FUNC(dbridgec_state::lcd1_w<4>)); + m_maincpu->write_r<4>().append(FUNC(dbridgec_state::input_w<0>)); + m_maincpu->write_r<5>().set(FUNC(dbridgec_state::lcd1_w<5>)); + m_maincpu->write_r<5>().append(FUNC(dbridgec_state::input_w<1>)); + m_maincpu->write_r<6>().set(FUNC(dbridgec_state::lcd1_w<6>)); + m_maincpu->write_d().set(FUNC(dbridgec_state::lcd2_w)); + m_maincpu->read_d().set(FUNC(dbridgec_state::input_r)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(4, 34); + m_display->set_bri_levels(0.1); + config.set_default_layout(layout_dbridgec); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_refresh_hz(60); + screen.set_size(1920/1.5, 1068/1.5); + screen.set_visarea_full(); +} + + + +/******************************************************************************* + ROM Definitions +*******************************************************************************/ + +ROM_START( dbridgec ) + ROM_REGION( 0x2000, "maincpu", 0 ) + ROM_LOAD("hd44860_b29.u1", 0x0000, 0x2000, CRC(9ebb51e0) SHA1(0e99f4247ba516cd93bec889faebf1b6ba22f361) ) + ROM_IGNORE( 0x2000 ) // ignore factory test banks + + ROM_REGION( 234761, "screen", 0 ) + ROM_LOAD("dbridgec.svg", 0, 234761, CRC(24834e57) SHA1(3e10afefa6ef112cf1bb339bf9dd25ed0ca4c150) ) +ROM_END + +} // anonymous namespace + + + +/******************************************************************************* + Drivers +*******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1987, dbridgec, 0, 0, dbridgec, dbridgec, dbridgec_state, empty_init, "Diamond", "Bridge Computer (Diamond)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NODEVICE_LAN ) diff --git a/src/mame/handheld/hh_hmcs40.cpp b/src/mame/handheld/hh_hmcs40.cpp index 7dfb606089d..cf5738aff21 100644 --- a/src/mame/handheld/hh_hmcs40.cpp +++ b/src/mame/handheld/hh_hmcs40.cpp @@ -88,13 +88,13 @@ known chips: *A13 HD44840 1982, CXG Computachess II *A14 HD44840 1982, CXG Computachess II / Advanced Portachess - *B29 HD44860 1987, Diamond Bridge Computer (M1011) + B29 HD44860 1987, Diamond Bridge Computer -> handheld/dbridgec.cpp *B55 HD44860 1987, Saitek Pro Bridge 100 *A04 HD44868 1984, SciSys Rapier - *A07 HD44868 1984, Chess King Pocket Micro Deluxe / Mephisto Teufelchen + A07 HD44868 1984, Chess King Pocket Micro De-Luxe -> chessking/pmicrodx.cpp *A12 HD44868 1985, SciSys Travel Mate II / Pocket Chess / MK 10 / Electronic Trio - *A14 HD44868 1985, SciSys Kasparov Plus + *A14 HD44868 1985, SciSys Kasparov Plus / MK 12 *A16 HD44868 1988, Saitek Pocket Checkers (* means undumped unless noted, @ denotes it's in this driver) diff --git a/src/mame/layout/cking_pmicrodx.lay b/src/mame/layout/cking_pmicrodx.lay new file mode 100644 index 00000000000..817fa634450 --- /dev/null +++ b/src/mame/layout/cking_pmicrodx.lay @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/dbridgec.lay b/src/mame/layout/dbridgec.lay new file mode 100644 index 00000000000..7ec66d15d79 --- /dev/null +++ b/src/mame/layout/dbridgec.lay @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 769b4157a8e..4384691b129 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -16239,6 +16239,9 @@ tascr30g @source:chessking/master.cpp master +@source:chessking/pmicrodx.cpp +pmicrodx + @source:chessking/triomphe.cpp triomphe @@ -19025,6 +19028,9 @@ newbrainmd // @source:handheld/chessking.cpp chesskng // +@source:handheld/dbridgec.cpp +dbridgec + @source:handheld/gameking.cpp gamekin3 // gameking // diff --git a/src/mame/saitek/minichess.cpp b/src/mame/saitek/minichess.cpp index 4512f00ccdc..1377e5c304c 100644 --- a/src/mame/saitek/minichess.cpp +++ b/src/mame/saitek/minichess.cpp @@ -76,7 +76,7 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(computing) { m_computing = 1; } - void update_display(); + void update_lcd(); template void seg_w(u8 data); void mux_w(u16 data); u16 input_r(); @@ -98,7 +98,7 @@ void mini_state::machine_start() I/O *******************************************************************************/ -void mini_state::update_display() +void mini_state::update_lcd() { u8 data = (m_lcd_select & 1) ? (m_lcd_data ^ 0xff) : m_lcd_data; data = bitswap<8>(data,2,4,6,7,5,1,0,3); @@ -108,9 +108,9 @@ void mini_state::update_display() template void mini_state::seg_w(u8 data) { - // R2x,R3x: lcd segment data + // R2x,R3x: LCD segment data m_lcd_data = (m_lcd_data & ~(0xf << (N*4))) | (data << (N*4)); - update_display(); + update_lcd(); } void mini_state::mux_w(u16 data) @@ -129,7 +129,7 @@ void mini_state::mux_w(u16 data) } m_lcd_select = sel; - update_display(); + update_lcd(); } u16 mini_state::input_r() diff --git a/src/mame/saitek/superstar.cpp b/src/mame/saitek/superstar.cpp index 1df185ea3c7..a1e9ed0d2d3 100644 --- a/src/mame/saitek/superstar.cpp +++ b/src/mame/saitek/superstar.cpp @@ -28,8 +28,9 @@ Superstar 36K: - 32KB ROM (custom label, same program as tstar432), extension ROM slot - piezo is very low pitch, this is normal -There are 2 versions of Turbostar 432, the 2nd one has a lighter shade and -the top-right is gray instead of red. It came with the KSO ROM included. +There are 2 versions of Turbostar 432, the 2nd Kasparov brand version has +a lighter shade and the top-right is gray instead of red. It came with the +KSO ROM included. I.C.D. (a reseller in USA, NY) also sold a version overclocked to 5.53MHz, and named it Turbostar 540+. The ROM is unmodified, so the internal chess diff --git a/src/mame/saitek/turbo16k.cpp b/src/mame/saitek/turbo16k.cpp index d09637013cc..c9bdc9ca65a 100644 --- a/src/mame/saitek/turbo16k.cpp +++ b/src/mame/saitek/turbo16k.cpp @@ -3,7 +3,7 @@ // thanks-to:Sean Riddle /******************************************************************************* -SciSys Turbo 16K family +SciSys Kasparov Turbo 16K family These chesscomputers are all on similar hardware. The chess engine is by Julio Kaplan and Craig Barnes. @@ -515,8 +515,8 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1986, turbo16k, 0, 0, turbo16k, turbo16k, turbo16k_state, empty_init, "SciSys / Heuristic Software", "Turbo 16K", MACHINE_SUPPORTS_SAVE ) -SYST( 1986, compan3, turbo16k, 0, compan3, compan3, turbo16k_state, empty_init, "SciSys / Heuristic Software", "Companion III", MACHINE_SUPPORTS_SAVE ) +SYST( 1986, turbo16k, 0, 0, turbo16k, turbo16k, turbo16k_state, empty_init, "SciSys / Heuristic Software", "Kasparov Turbo 16K", MACHINE_SUPPORTS_SAVE ) +SYST( 1986, compan3, turbo16k, 0, compan3, compan3, turbo16k_state, empty_init, "SciSys / Heuristic Software", "Kasparov Companion III", MACHINE_SUPPORTS_SAVE ) SYST( 1988, conquist, 0, 0, conquist, conquist, conquist_state, empty_init, "Saitek / Heuristic Software", "Kasparov Conquistador", MACHINE_SUPPORTS_SAVE ) SYST( 1988, tmate, conquist, 0, tmate, tmate, conquist_state, empty_init, "Saitek / Heuristic Software", "Kasparov Team-Mate", MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3