New working systems

-------------------
Bridge Computer (Diamond) [hap, Sean Riddle]
Pocket Micro De-Luxe [hap, Sean Riddle]
This commit is contained in:
hap 2024-10-02 22:35:47 +02:00
parent 7611f7c18a
commit 974e8f75ce
9 changed files with 783 additions and 13 deletions

View File

@ -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<hmcs40_cpu_device> m_maincpu;
required_device<pwm_display_device> m_display;
required_device<dac_1bit_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<int N> 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<int N>
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 )

View File

@ -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<hmcs40_cpu_device> m_maincpu;
required_device<pwm_display_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<int N> void lcd1_w(u8 data);
void lcd2_w(u16 data);
u8 read_buttons();
void refresh_irq();
u16 input_r();
template<int N> 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<int N>
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<int N>
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 )

View File

@ -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)

View File

@ -0,0 +1,82 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
authors:hap
-->
<mamelayout version="2">
<!-- NOTE: no chesspieces simulation here -->
<!-- define elements -->
<element name="gray"><rect><color red="0.2" green="0.2" blue="0.2" /></rect></element>
<element name="lcdm"><rect><color red="0.54" green="0.57" blue="0.58" /></rect></element>
<element name="hlb" defstate="0">
<rect state="1"><color red="1" green="1" blue="1" /></rect>
</element>
<element name="text_b1"><text string="LV"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_b2"><text string="CE"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_b3"><text string="TB"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_b4"><text string="EN"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_ba"><text string="A1"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bb"><text string="B2"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bc"><text string="C3"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bd"><text string="D4"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_be"><text string="E5"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bf"><text string="F6"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bg"><text string="G7"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<element name="text_bh"><text string="H8"><color red="0.8" green="0.78" blue="0.35" /></text></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-1" right="8" top="-1" bottom="8" />
<screen index="0"><bounds xc="3.5" yc="1.5" width="4" height="1.773" /></screen>
<element ref="lcdm" blend="multiply"><bounds xc="3.5" yc="1.5" width="5" height="2" /></element>
<!-- buttons -->
<element ref="gray"><bounds x="0" y="0" width="1" height="1" /></element>
<element ref="gray"><bounds x="6" y="0" width="1" height="1" /></element>
<element ref="gray"><bounds x="0" y="2" width="1" height="1" /></element>
<element ref="gray"><bounds x="6" y="2" width="1" height="1" /></element>
<element ref="gray"><bounds x="0" y="4" width="1" height="1" /></element>
<element ref="gray"><bounds x="2" y="4" width="1" height="1" /></element>
<element ref="gray"><bounds x="4" y="4" width="1" height="1" /></element>
<element ref="gray"><bounds x="6" y="4" width="1" height="1" /></element>
<element ref="gray"><bounds x="0" y="6" width="1" height="1" /></element>
<element ref="gray"><bounds x="2" y="6" width="1" height="1" /></element>
<element ref="gray"><bounds x="4" y="6" width="1" height="1" /></element>
<element ref="gray"><bounds x="6" y="6" width="1" height="1" /></element>
<element ref="text_b1"><bounds xc="0.5" yc="0.5" width="0.9" height="0.85" /></element>
<element ref="text_b2"><bounds xc="6.5" yc="0.5" width="0.9" height="0.85" /></element>
<element ref="text_b3"><bounds xc="0.5" yc="2.5" width="0.9" height="0.85" /></element>
<element ref="text_b4"><bounds xc="6.5" yc="2.5" width="0.9" height="0.85" /></element>
<element ref="text_ba"><bounds xc="0.5" yc="4.5" width="0.9" height="0.85" /></element>
<element ref="text_bb"><bounds xc="2.5" yc="4.5" width="0.9" height="0.85" /></element>
<element ref="text_bc"><bounds xc="4.5" yc="4.5" width="0.9" height="0.85" /></element>
<element ref="text_bd"><bounds xc="6.5" yc="4.5" width="0.9" height="0.85" /></element>
<element ref="text_be"><bounds xc="0.5" yc="6.5" width="0.9" height="0.85" /></element>
<element ref="text_bf"><bounds xc="2.5" yc="6.5" width="0.9" height="0.85" /></element>
<element ref="text_bg"><bounds xc="4.5" yc="6.5" width="0.9" height="0.85" /></element>
<element ref="text_bh"><bounds xc="6.5" yc="6.5" width="0.9" height="0.85" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="0" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.3" inputmask="0x04"><bounds x="6" y="0" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.1" inputmask="0x04"><bounds x="0" y="2" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.2" inputmask="0x04"><bounds x="6" y="2" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x01"><bounds x="0" y="4" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.1" inputmask="0x01"><bounds x="2" y="4" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.2" inputmask="0x01"><bounds x="4" y="4" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.3" inputmask="0x01"><bounds x="6" y="4" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="6" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.1" inputmask="0x02"><bounds x="2" y="6" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.2" inputmask="0x02"><bounds x="4" y="6" width="1" height="1" /><color alpha="0.12" /></element>
<element ref="hlb" inputtag="IN.3" inputmask="0x02"><bounds x="6" y="6" width="1" height="1" /><color alpha="0.12" /></element>
</view>
</mamelayout>

View File

@ -0,0 +1,178 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
authors:hap
-->
<mamelayout version="2">
<!-- define elements -->
<element name="white"><rect><color red="0.85" green="0.85" blue="0.86" /></rect></element>
<element name="black"><rect><color red="0.07" green="0.07" blue="0.07" /></rect></element>
<element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="lcdm"><rect><color red="0.7" green="0.71" blue="0.72" /></rect></element>
<!-- button panel -->
<element name="text_l11"><text string="7"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l12"><text string="6"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l13"><text string="5"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l14"><text string="4"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l15"><text string="3"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l16"><text string="2"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l17"><text string="ENTER"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l21"><text string="8"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l22"><text string="9"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l23"><text string="10"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l24"><text string="J"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l25"><text string="Q"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l26"><text string="K"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l27"><text string="A"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l31"><text string=" "><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l32"><text string=" "><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l33"><text string=" "><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l34"><text string=" "><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l35"><text string="NO TRUMP"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l36"><text string="DOUBLE"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l37"><text string="PASS"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l41"><text string="DEAL"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l42"><text string="NEW"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l42a"><text string="RUBBER"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l43"><text string="SCORE"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l44"><text string="CHANGE"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l44a"><text string="SIDE"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l45"><text string="LEVEL"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l46"><text string="PARTNER"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l47"><text string="DUMMY"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l31a"><text string="&#x2660;"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="text_l32a"><text string="&#x2665;"><color red="0.85" green="0.35" blue="0.3" /></text></element>
<element name="text_l33a"><text string="&#x2666;"><color red="0.85" green="0.35" blue="0.3" /></text></element>
<element name="text_l34a"><text string="&#x2663;"><color red="0.05" green="0.05" blue="0.05" /></text></element>
<element name="butg" defstate="0">
<rect>
<bounds xc="0" yc="0" width="2" height="1" />
<color red="0.01" green="0.01" blue="0.01" />
</rect>
<rect>
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="0.5" green="0.5" blue="0.5" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="1" green="1" blue="1" alpha="0.22" />
</rect>
</element>
<element name="butr" defstate="0">
<rect>
<bounds xc="0" yc="0" width="2" height="1" />
<color red="0.01" green="0.01" blue="0.01" />
</rect>
<rect>
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="0.85" green="0.35" blue="0.3" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="1" green="1" blue="1" alpha="0.20" />
</rect>
</element>
<element name="butb" defstate="0">
<rect>
<bounds xc="0" yc="0" width="2" height="1" />
<color red="0.01" green="0.01" blue="0.01" />
</rect>
<rect>
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="0.25" green="0.25" blue="0.25" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="1" green="1" blue="1" alpha="0.16" />
</rect>
</element>
<element name="buty" defstate="0">
<rect>
<bounds xc="0" yc="0" width="2" height="1" />
<color red="0.01" green="0.01" blue="0.01" />
</rect>
<rect>
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="0.85" green="0.72" blue="0.32" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="1.84" height="0.92" />
<color red="0" green="0" blue="0" alpha="0.13" />
</rect>
</element>
<group name="buttons">
<bounds x="0" y="0" width="50" height="50" />
<repeat count="7">
<param name="y" start="2" increment="5" />
<param name="mask" start="0x40" rshift="1" />
<element ref="butg" inputtag="IN.3" inputmask="~mask~"><bounds xc="4" yc="~y~" width="4" height="2" /></element>
<element ref="butg" inputtag="IN.2" inputmask="~mask~"><bounds xc="10" yc="~y~" width="4" height="2" /></element>
<element ref="butg" inputtag="IN.1" inputmask="~mask~"><bounds xc="16" yc="~y~" width="4" height="2" /></element>
</repeat>
<repeat count="7">
<param name="y" start="2" increment="5" />
<param name="mask" start="0x40" rshift="1" />
<element ref="buty" inputtag="IN.0" inputmask="~mask~"><bounds xc="22" yc="~y~" width="4" height="2" /></element>
</repeat>
<element ref="white"><bounds x="1" y="29.5" width="6" height="5" /></element>
<element ref="white"><bounds x="13" y="19.5" width="6" height="15" /></element>
<element ref="butr" inputtag="IN.3" inputmask="0x01"><bounds xc="4" yc="32" width="4" height="2" /></element>
<element ref="butb" inputtag="IN.1" inputmask="0x04"><bounds xc="16" yc="22" width="4" height="2" /></element>
<element ref="butb" inputtag="IN.1" inputmask="0x02"><bounds xc="16" yc="27" width="4" height="2" /></element>
<element ref="butb" inputtag="IN.1" inputmask="0x01"><bounds xc="16" yc="32" width="4" height="2" /></element>
<repeat count="7">
<param name="y" start="3" increment="5" />
<param name="i" start="1" increment="1" />
<element ref="text_l1~i~"><bounds xc="4" y="~y~" width="7" height="1.1" /></element>
<element ref="text_l2~i~"><bounds xc="10" y="~y~" width="7" height="1.1" /></element>
<element ref="text_l3~i~"><bounds xc="16" y="~y~" width="7" height="1.1" /></element>
<element ref="text_l4~i~"><bounds xc="22" y="~y~" width="7" height="1.1" /></element>
</repeat>
<repeat count="4">
<param name="y" start="2.65" increment="5" />
<param name="i" start="1" increment="1" />
<element ref="text_l3~i~a"><bounds xc="16" y="~y~" width="7" height="1.6" /></element>
</repeat>
<element ref="text_l42a"><bounds xc="22" y="9" width="7" height="1.1" /></element>
<element ref="text_l44a"><bounds xc="22" y="19" width="7" height="1.1" /></element>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-3.75" right="73.75" top="-3" bottom="35" />
<element ref="white"><bounds x="-3.75" y="-3" width="77.5" height="38" /></element>
<element ref="black"><bounds xc="20" yc="12.5" width="39.5" height="25" /></element>
<screen index="0"><bounds xc="20" yc="12.5" width="36.854" height="20.5" /></screen>
<element ref="lcdm" blend="multiply"><bounds xc="20" yc="12.5" width="39.5" height="25" /></element>
<element ref="blackb"><bounds xc="43.75" y="-10" width="0.3" height="50" /><color alpha="0.2" /></element>
<group ref="buttons"><bounds x="45.75" y="-1" width="50" height="50" /></group>
</view>
</mamelayout>

View File

@ -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 //

View File

@ -76,7 +76,7 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(computing) { m_computing = 1; }
void update_display();
void update_lcd();
template<int N> 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<int N>
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()

View File

@ -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

View File

@ -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 )