New working machines

--------------------
Mini Chess [hap, Sean Riddle]
This commit is contained in:
hap 2020-05-01 14:39:26 +02:00
parent e30ab9be9a
commit 516f80e31d
14 changed files with 498 additions and 78 deletions

View File

@ -3350,6 +3350,7 @@ files {
MAME_DIR .. "src/mame/drivers/saitek_exchess.cpp",
MAME_DIR .. "src/mame/drivers/saitek_leonardo.cpp",
MAME_DIR .. "src/mame/drivers/saitek_mark5.cpp",
MAME_DIR .. "src/mame/drivers/saitek_minichess.cpp",
MAME_DIR .. "src/mame/drivers/saitek_prschess.cpp",
MAME_DIR .. "src/mame/drivers/saitek_renaissance.cpp",
MAME_DIR .. "src/mame/drivers/saitek_risc2500.cpp",

View File

@ -386,27 +386,28 @@ void chessmst_state::chessmstdm(machine_config &config)
/* ROM definition */
ROM_START( chessmst )
ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "056.bin", 0x0000, 0x0400, CRC(2b90e5d3) SHA1(c47445964b2e6cb11bd1f27e395cf980c97af196) )
ROM_LOAD( "057.bin", 0x0400, 0x0400, CRC(e666fc56) SHA1(3fa75b82cead81973bea94191a5c35f0acaaa0e6) )
ROM_LOAD( "058.bin", 0x0800, 0x0400, CRC(6a17fbec) SHA1(019051e93a5114477c50eaa87e1ff01b02eb404d) )
ROM_LOAD( "059.bin", 0x0c00, 0x0400, CRC(e96e3d07) SHA1(20fab75f206f842231f0414ebc473ce2a7371e7f) )
ROM_LOAD( "060.bin", 0x1000, 0x0400, CRC(0e31f000) SHA1(daac924b79957a71a4b276bf2cef44badcbe37d3) )
ROM_LOAD( "061.bin", 0x1400, 0x0400, CRC(69ad896d) SHA1(25d999b59d4cc74bd339032c26889af00e64df60) )
ROM_LOAD( "062.bin", 0x1800, 0x0400, CRC(c42925fe) SHA1(c42d8d7c30a9b6d91ac994cec0cc2723f41324e9) )
ROM_LOAD( "063.bin", 0x1c00, 0x0400, CRC(86be4cdb) SHA1(741f984c15c6841e227a8722ba30cf9e6b86d878) )
ROM_LOAD( "064.bin", 0x2000, 0x0400, CRC(e82f5480) SHA1(38a939158052f5e6484ee3725b86e522541fe4aa) )
ROM_LOAD( "065.bin", 0x2400, 0x0400, CRC(4ec0e92c) SHA1(0b748231a50777391b04c1778750fbb46c21bee8) )
ROM_LOAD("056.bin", 0x0000, 0x0400, CRC(2b90e5d3) SHA1(c47445964b2e6cb11bd1f27e395cf980c97af196) )
ROM_LOAD("057.bin", 0x0400, 0x0400, CRC(e666fc56) SHA1(3fa75b82cead81973bea94191a5c35f0acaaa0e6) )
ROM_LOAD("058.bin", 0x0800, 0x0400, CRC(6a17fbec) SHA1(019051e93a5114477c50eaa87e1ff01b02eb404d) )
ROM_LOAD("059.bin", 0x0c00, 0x0400, CRC(e96e3d07) SHA1(20fab75f206f842231f0414ebc473ce2a7371e7f) )
ROM_LOAD("060.bin", 0x1000, 0x0400, CRC(0e31f000) SHA1(daac924b79957a71a4b276bf2cef44badcbe37d3) )
ROM_LOAD("061.bin", 0x1400, 0x0400, CRC(69ad896d) SHA1(25d999b59d4cc74bd339032c26889af00e64df60) )
ROM_LOAD("062.bin", 0x1800, 0x0400, CRC(c42925fe) SHA1(c42d8d7c30a9b6d91ac994cec0cc2723f41324e9) )
ROM_LOAD("063.bin", 0x1c00, 0x0400, CRC(86be4cdb) SHA1(741f984c15c6841e227a8722ba30cf9e6b86d878) )
ROM_LOAD("064.bin", 0x2000, 0x0400, CRC(e82f5480) SHA1(38a939158052f5e6484ee3725b86e522541fe4aa) )
ROM_LOAD("065.bin", 0x2400, 0x0400, CRC(4ec0e92c) SHA1(0b748231a50777391b04c1778750fbb46c21bee8) )
ROM_END
ROM_START( chessmsta )
ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "2764.bin", 0x0000, 0x2000, CRC(6be28876) SHA1(fd7d77b471e7792aef3b2b3f7ff1de4cdafc94c9) )
ROM_LOAD( "u2616bm108.bin", 0x2000, 0x0800, BAD_DUMP CRC(6e69ace3) SHA1(e099b6b6cc505092f64b8d51ab9c70aa64f58f70) )
ROM_LOAD("2764.bin", 0x0000, 0x2000, CRC(6be28876) SHA1(fd7d77b471e7792aef3b2b3f7ff1de4cdafc94c9) )
ROM_LOAD("u2616bm108.bin", 0x2000, 0x0800, BAD_DUMP CRC(6e69ace3) SHA1(e099b6b6cc505092f64b8d51ab9c70aa64f58f70) )
ROM_END
ROM_START( chessmstdm )
ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD("cmd_bm002_bm201.bin", 0x0000, 0x4000, CRC(47858079) SHA1(eeae1126b514e4853d056690e72e7f5c6dfb3008))
ROM_LOAD("002", 0x0000, 0x2000, CRC(bed56fef) SHA1(dad0f8ddbd9b10013a5bdcc09ee6db39cfb26b78) ) // U2364D45
ROM_LOAD("201", 0x2000, 0x2000, CRC(c9dc7f29) SHA1(a3e1b66d0e15ffe83a9165d15c4a83013852c2fe) ) // "
ROM_END

View File

@ -19,13 +19,13 @@ Hardware notes:
Sensor Computachess:
- PCB label WA 001 600 002
- 44801A50 MCU @ ~400kHz
- 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
Advanced Star Chess, extra led row unused here)
- HD44801C89 MCU @ ~400kHz (serial 202: from Portachess 1985 version)
- Hitachi HD44801C89 MCU @ ~400kHz (serial 202: from Portachess 1985 version)
- rest same as above
HD44801A50 used in:

View File

@ -83,9 +83,9 @@ private:
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_READ8_MEMBER(input_r);
int m_numbanks;
u8 m_speech_bank;
u8 m_select;
int m_numbanks = 0;
u8 m_speech_bank = 0;
u8 m_select = 0;
};
void chesster_state::init_chesster()
@ -96,10 +96,6 @@ void chesster_state::init_chesster()
void chesster_state::machine_start()
{
// zerofill
m_speech_bank = 0;
m_select = 0;
// register for savestates
save_item(NAME(m_speech_bank));
save_item(NAME(m_select));

View File

@ -65,15 +65,16 @@
@A88 HD38820 1984, Bandai Pair Match (PT-460) (1/2)
@A89 HD38820 1984, Bandai Pair Match (PT-460) (2/2)
*A34 HD44801 1981, Scisys Mini Chess / Graduate Chess / Chesspartner 3000/4000
A34 HD44801 1981, SciSys Mini Chess -> saitek_minichess.cpp
A50 HD44801 1981, CXG Sensor Computachess -> cxg_scptchess.cpp
A75 HD44801 1982, Alpha 8201 protection MCU -> machine/alpha8201.*
*A85 HD44801 1982, Scisys Travel Sensor / Travel Mate / Chesspartner 5000/6000
*A85 HD44801 1982, SciSys Travel Sensor / Travel Mate / Chesspartner 5000/6000
*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)
*B43 HD44801 1983, Alpha 8304 protection MCU (see 8201)
C57 HD44801 1985, Alpha 8505 protection MCU (see 8201)
C89 HD44801 1985, CXG Portachess II / Computachess IV -> cxg_scptchess.cpp
C89 HD44801 1985, CXG Portachess (1985 version) -> cxg_scptchess.cpp
*A86 HD44820 1983, Chess King Pocket Micro
*B63 HD44820 1985, CXG Pocket Chess (12 buttons)

View File

@ -128,9 +128,11 @@ INPUT_PORTS_END
void berlin_state::berlin(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 12_MHz_XTAL);
M68000(config, m_maincpu, 12.288_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &berlin_state::berlin_mem);
m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), attotime::from_hz(750));
const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x4000); // 750Hz
m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), irq_period);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
ADDRESS_MAP_BANK(config, "nvram_map").set_map(&berlin_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13);

View File

@ -8,43 +8,54 @@ Hegener + Glaser Mephisto chesscomputers with plugin modules
After Roma, H+G started naming the different versions 16 Bit/32 Bit instead of 68000/68020.
With Genius and the TM versions, they still applied "68030".
Almeria 16 Bit 12MHz
Almeria 32 Bit 12MHz
Portorose 16 Bit 12MHz
Portorose 32 Bit 12MHz
Lyon 16 Bit 12MHz
Lyon 32 Bit 12MHz
Vancouver 16 Bit 12MHz
Vancouver 32 Bit 12MHz
Genius 68030 33.3330MHz
The London program (1994 competition) is not a dedicated module, but an EPROM upgrade
released by Richard Lang for Almeria, Lyon, Portorose and Vancouver modules, and also
available as upgrades for Berlin/Berlin Pro and Genius.
No Mephisto modules were released anymore after Saitek took over H+G, engine is the
same as Saitek's 1996 Mephisto London 68030 (limited release TM version).
available as upgrades for Berlin/Berlin Pro and Genius. The engine is the same as
Saitek's 1996 Mephisto London 68030 (limited release TM version).
Hardware notes:
Almeria 16 Bit, Lyon 16 Bit:
- MC68HC000FN12, 12.288MHz XTAL
- 128KB ROM (2*27C512)
- 512KB RAM (4*TC514256AP-10, or equivalent)
Portorose 32 Bit:
- MC68020RC12E, 12.288MHz XTAL
- 128KB ROM (TC5710000-20)
- 1MB RAM (8*TC514256AP-70)
Genius 68030:
- M68EC030RP40B, 33.3330MHz XTAL, 6.144MHz XTAL
- 256KB ROM (M27C2001)
- 512+256 KB RAM (TC518512PL-10, 8*TC55465P-20)
Display Modul:
- HD44780, 2-line LCD display
- 8KB RAM (TC5565APL-15L), battery
- piezo speaker
For the dedicated tournament machines, see mephisto_modular_tm.cpp
TODO:
- match I/S= diag speed test with real hardware (good test for proper waitstates),
especially gen32 is way too fast when comparing sound pitch
Undocumented buttons:
- holding ENTER and LEFT cursor on boot runs diagnostics
- holding CLEAR on boot will clear the battery backed RAM
TODO:
- match I/S= diag speed test with real hardware (good test for proper waitstates),
especially gen32 is way too fast when comparing sound pitch
===============================================================================
Bavaria piece recognition board:
-------------------------------------------------
_______________________________________________
| |
| 74HC21 74HC74 74HC238 |
| 74HC4040 74HC574 74HC173 74HC374 |
| ROM XTAL 74HC368 74HC374 |
| 74HC4024 74HC32 74HC139 74HC374 |
| |
-------------------------------------------------
|_______________________________________________|
XTAL = 7.37280MHz
ROM = TC57256AD-12, sine table (not used in MAME)
@ -391,7 +402,7 @@ INPUT_PORTS_END
void mmodular_state::alm16(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 12_MHz_XTAL);
M68000(config, m_maincpu, 12.288_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm16_mem);
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), attotime::from_hz(600));
@ -426,9 +437,11 @@ void mmodular_state::alm32(machine_config &config)
alm16(config);
/* basic machine hardware */
M68020(config.replace(), m_maincpu, 12_MHz_XTAL);
M68020(config.replace(), m_maincpu, 12.288_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm32_mem);
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), attotime::from_hz(750));
const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x4000); // 750Hz
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), irq_period);
config.set_default_layout(layout_mephisto_alm32);
}
@ -450,7 +463,7 @@ void mmodular_state::gen32(machine_config &config)
van32(config);
/* basic machine hardware */
M68EC030(config.replace(), m_maincpu, 33.333_MHz_XTAL); // M68EC030RP40B
M68EC030(config.replace(), m_maincpu, 33.333_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::gen32_mem);
const attotime irq_period = attotime::from_hz(6.144_MHz_XTAL / 0x4000); // through 4060, 375Hz
@ -473,8 +486,8 @@ ROM_END
ROM_START( alm16 ) // U013 65CE 2FCE
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000, CRC(ee5b6ec4) SHA1(30920c1b9e16ffae576da5afa0b56da59ada3dbb) )
ROM_LOAD16_BYTE("alm16odd.bin", 0x00001, 0x10000, CRC(d0be4ee4) SHA1(d36c074802d2c9099cd44e75f9de3fc7d1fd9908) )
ROM_LOAD16_BYTE("almeria_16bit_v013_even", 0x00000, 0x10000, CRC(ee5b6ec4) SHA1(30920c1b9e16ffae576da5afa0b56da59ada3dbb) )
ROM_LOAD16_BYTE("almeria_16bit_v013_odd", 0x00001, 0x10000, CRC(d0be4ee4) SHA1(d36c074802d2c9099cd44e75f9de3fc7d1fd9908) )
ROM_END
ROM_START( port32 ) // V103 C734 1CD7
@ -512,8 +525,8 @@ ROM_END
ROM_START( lyon16 ) // V207 EC82 5805
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000, CRC(497bd41a) SHA1(3ffefeeac694f49997c10d248ec6a7aa932898a4) )
ROM_LOAD16_BYTE("lyon16od.bin", 0x00001, 0x10000, CRC(f9de3f54) SHA1(4060e29566d2f40122ccde3c1f84c94a9c1ed54f) )
ROM_LOAD16_BYTE("lyon_16bit_even_v207", 0x00000, 0x10000, CRC(497bd41a) SHA1(3ffefeeac694f49997c10d248ec6a7aa932898a4) )
ROM_LOAD16_BYTE("lyon_16bit_odd_v207", 0x00001, 0x10000, CRC(f9de3f54) SHA1(4060e29566d2f40122ccde3c1f84c94a9c1ed54f) )
ROM_REGION( 0x8000, "bavaria", 0 )
ROM_LOAD("sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
@ -529,8 +542,8 @@ ROM_END
ROM_START( van16 ) // V309 C8F3 18D3
ROM_REGION16_BE( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE("va16even.bin", 0x00000, 0x20000, CRC(e87602d5) SHA1(90cb2767b4ae9e1b265951eb2569b9956b9f7f44) )
ROM_LOAD16_BYTE("va16odd.bin", 0x00001, 0x20000, CRC(585f3bdd) SHA1(90bb94a12d3153a91e3760020e1ea2a9eaa7ec0a) )
ROM_LOAD16_BYTE("vancouver_16_even_v309", 0x00000, 0x20000, CRC(e87602d5) SHA1(90cb2767b4ae9e1b265951eb2569b9956b9f7f44) )
ROM_LOAD16_BYTE("vancouver_16_odd_v309", 0x00001, 0x20000, CRC(585f3bdd) SHA1(90bb94a12d3153a91e3760020e1ea2a9eaa7ec0a) )
ROM_REGION( 0x8000, "bavaria", 0 )
ROM_LOAD("sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )

View File

@ -42,10 +42,12 @@ Expansion modules released:
- Sparc (SPARClite, Spracklen's)
TODO:
- game locks up when you get checkmated
- 1.4 version: It locks up a short time after you make an input error (eg. on
computer's turn, enter the wrong move so it will give a low pitch error beep,
then hold INS to fast forward and it will lock up)
- It locks up a short time after you make an input error (eg. on computer's
turn, enter the wrong move so it will give a low pitch error beep, then hold
INS to fast-forward and it will lock up) - happens with leonardoa too, but
after a longer delay. At first glance, it looks like it's caused by inaccurate
6801 timer emulation. It also locks up when you get checkmated, seems to be
the same problem as above.
- OSA module support (softwarelist, devices/bus)
- OSA PC link (probably uses MCU serial interface)
- unsure about white/black/check/end/module/comm leds
@ -192,7 +194,7 @@ void leo_state::p2_w(u8 data)
u8 leo_state::p5_r()
{
// ?
return 0xff;
return 0xff ^ 0x10;
}
void leo_state::p5_w(u8 data)

View File

@ -0,0 +1,217 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Sean Riddle
/******************************************************************************
SciSys Mini Chess, pocket calculator style chesscomputer
It's the first chess program on HMCS40, the engine was written by Mark Taylor.
Hardware notes:
- Hitachi 44801A34 MCU @ ~400kHz
- 4-digit LCD screen
Excluding resellers with same title, this MCU was used in:
- SciSys Mini Chess - 1st use
- SciSys Junior Chess
- SciSys Graduate Chess
- SciSys Chess Partner 3000
- SciSys Chess Partner 4000
On CP3000/4000 they added a level slider. This will oscillate the level switch
input pin, so the highest level setting is the same as level 2 on Mini Chess.
It works on the old A34 MCU because the game keeps reading D0 while computing.
******************************************************************************/
#include "emu.h"
#include "cpu/hmcs40/hmcs40.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "video/pwm.h"
#include "speaker.h"
// internal artwork
#include "saitek_minichess.lh" // clickable
namespace {
class mini_state : public driver_device
{
public:
mini_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_comp_timer(*this, "comp_timer"),
m_computing(*this, "computing"),
m_inputs(*this, "IN.%u", 0)
{ }
void smchess(machine_config &config);
protected:
virtual void machine_start() override;
private:
// devices/pointers
required_device<hmcs40_cpu_device> m_maincpu;
required_device<pwm_display_device> m_display;
required_device<timer_device> m_comp_timer;
output_finder<> m_computing;
required_ioport_array<5> m_inputs;
TIMER_DEVICE_CALLBACK_MEMBER(computing) { m_computing = 1; }
void update_display();
template<int N> void seg_w(u8 data);
void mux_w(u16 data);
u16 input_r(offs_t offset);
u8 m_inp_mux = 0;
u8 m_lcd_select = 0;
u8 m_lcd_data = 0;
};
void mini_state::machine_start()
{
m_computing.resolve();
// register for savestates
save_item(NAME(m_inp_mux));
save_item(NAME(m_lcd_select));
save_item(NAME(m_lcd_data));
}
/******************************************************************************
I/O
******************************************************************************/
void mini_state::update_display()
{
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);
m_display->matrix(m_lcd_select >> 2, data);
}
template<int N>
void mini_state::seg_w(u8 data)
{
// R2x,R3x: lcd segment data
m_lcd_data = (m_lcd_data & ~(0xf << (N*4))) | (data << (N*4));
update_display();
}
void mini_state::mux_w(u16 data)
{
// D9-D12: input mux
m_inp_mux = ~data >> 9 & 0xf;
// D3,D5-D8: CD4066 to LCD
u8 sel = data >> 3 & 0x3f;
// "computing" segment goes on when LCD isn't driven
if (~m_lcd_select & sel & 1)
{
m_computing = 0;
m_comp_timer->adjust(attotime::from_msec(100));
}
m_lcd_select = sel;
update_display();
}
u16 mini_state::input_r(offs_t offset)
{
// D0,D2: switches
u16 data = m_inputs[4]->read() & 5;
// D13-D15: multiplexed inputs
for (int i = 0; i < 4; i++)
if (BIT(m_inp_mux, i))
data |= m_inputs[i]->read() << 13;
return ~data;
}
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( smchess )
PORT_START("IN.0")
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_START("IN.1")
PORT_BIT(0x01, 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(0x02, 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(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F 6 / King")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G 7 / White")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H 8 / Black")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("FP") // find position
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") // clear entry
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_TOGGLE PORT_CODE(KEYCODE_L) PORT_NAME("Level")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_TOGGLE PORT_CODE(KEYCODE_M) PORT_NAME("MM") // multi move
INPUT_PORTS_END
/******************************************************************************
Machine Configs
******************************************************************************/
void mini_state::smchess(machine_config &config)
{
/* basic machine hardware */
HD44801(config, m_maincpu, 400000);
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));
m_maincpu->read_d().set(FUNC(mini_state::input_r));
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(4, 8);
m_display->set_segmask(0xf, 0x7f);
m_display->set_refresh(attotime::from_hz(30));
TIMER(config, m_comp_timer).configure_generic(FUNC(mini_state::computing));
config.set_default_layout(layout_saitek_minichess);
}
/******************************************************************************
ROM Definitions
******************************************************************************/
ROM_START( smchess )
ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD("44801a34_proj_t", 0x0000, 0x2000, CRC(be71f1c0) SHA1(6b4d5c8f8491c82bdec1938bd83c14e826ff3e30) )
ROM_END
} // anonymous namespace
/******************************************************************************
Drivers
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1981, smchess, 0, 0, smchess, smchess, mini_state, empty_init, "SciSys", "Mini Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -12,7 +12,7 @@ Hardware notes:
- 6301Y0(mode 1) or HD6303YP MCU @ 10MHz
- 8KB RAM, 32KB ROM
- "HELIOS" I/O (NEC gate array)
- LCD screen
- Seiko Epson SED1502F, LCD screen
- magnet sensors chessboard with 81 leds
The 6301Y0 seen on one of them, was a SX8A 6301Y0G84P, this is in fact the
@ -22,7 +22,6 @@ The LCD screen is fairly large, it's the same one as in Saitek Simultano,
so a chessboard display + 7seg info.
TODO:
- unknown LCD hardware, possibly MCU?
- WIP
******************************************************************************/

View File

@ -20,22 +20,16 @@ license:CC0
<element name="text_l01a"><text string="A" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l01b"><text string="1" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l01c"><text string="[P]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l02a"><text string="B" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l02b"><text string="2" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l02c"><text string="[N]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l03a"><text string="C" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l03b"><text string="3" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l03c"><text string="[B]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l04a"><text string="D" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l04b"><text string="4" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l04c"><text string="[R]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l05a"><text string="E" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l05b"><text string="5" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l05c"><text string="[Q]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l06a"><text string="F" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l06b"><text string="6" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l06c"><text string="[K]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l07a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l07b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l08a"><text string="H" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
@ -49,6 +43,13 @@ license:CC0
<element name="text_l14"><text string="CE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l15"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_p1"><image file="chess/wk.png"><color alpha="0.87" /></image></element>
<element name="text_p2"><image file="chess/wq.png"><color alpha="0.87" /></image></element>
<element name="text_p3"><image file="chess/wr.png"><color alpha="0.87" /></image></element>
<element name="text_p4"><image file="chess/wb.png"><color alpha="0.87" /></image></element>
<element name="text_p5"><image file="chess/wn.png"><color alpha="0.87" /></image></element>
<element name="text_p6"><image file="chess/wp.png"><color alpha="0.87" /></image></element>
<element name="text_cl00">
<rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string="A" align="1"><color red="0.17" green="0.15" blue="0.15" /></text>
@ -505,6 +506,14 @@ license:CC0
<group name="buttons">
<bounds x="-1" y="28.5" width="32" height="10.1" />
<bezel element="text_p6"><bounds x="0.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="text_p5"><bounds x="4.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="text_p4"><bounds x="8.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="text_p3"><bounds x="12.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="text_p2"><bounds x="16.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="text_p1"><bounds x="20.7" y="32.18" width="1.6" height="1.6" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x01"><bounds x="0" y="30" width="3" height="2.2" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x02"><bounds x="4" y="30" width="3" height="2.2" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x04"><bounds x="8" y="30" width="3" height="2.2" /></bezel>
@ -539,13 +548,6 @@ license:CC0
<bezel element="text_l08a"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
<bezel element="text_l08b"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
<bezel element="text_l01c"><bounds x="0" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="text_l02c"><bounds x="4" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="text_l03c"><bounds x="8" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="text_l04c"><bounds x="12" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="text_l05c"><bounds x="16" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="text_l06c"><bounds x="20" y="32.3" width="3" height="1.3" /></bezel>
<bezel element="white"><bounds x="25" y="32.55" width="1" height="1" /></bezel>
<bezel element="white"><bounds x="29" y="32.55" width="1" height="1" /></bezel>
<bezel element="blackb"><bounds x="29.15" y="32.7" width="0.7" height="0.7" /></bezel>
@ -578,7 +580,7 @@ license:CC0
<group ref="digits"><bounds x="8" y="21" width="15" height="5" /></group>
<group ref="buttons"><bounds x="-1" y="28.5" width="32" height="10.1" /></group>
<bezel element="white"><bounds x="-0.775" y="27.1875" width="32.55" height="0.3875" /></bezel>
<bezel element="cblack"><bounds x="-0.775" y="27.1875" width="32.55" height="0.3875" /></bezel>
</view>
</mamelayout>

View File

@ -0,0 +1,182 @@
<?xml version="1.0"?>
<!--
license:CC0
-->
<mamelayout version="2">
<!-- define elements -->
<element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="button" defstate="0">
<rect state="0"><color red="0.8" green="0.8" blue="0.8" /></rect>
<rect state="1"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element>
<element name="text_l01a"><text string="A" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l01b"><text string="1" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l02a"><text string="B" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l02b"><text string="2" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l03a"><text string="C" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l03b"><text string="3" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l04a"><text string="D" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l04b"><text string="4" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l05a"><text string="E" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l05b"><text string="5" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l06a"><text string="F" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l06b"><text string="6" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l07a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l07b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l08a"><text string="H" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l08b"><text string="8" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l09"><text string="FP"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l10a"><text string="NEW"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l10b"><text string="GAME"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l11"><text string="CE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l12"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l13"><text string="LEVEL"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l14"><text string="MM"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_sw" defstate="0">
<text state="0" string="&#x25ba;" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
<text state="1" string="&#x25ba;" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_sw1" defstate="0">
<text state="0" string="1" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
<text state="1" string="2" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_sw2" defstate="0">
<text state="0" string="OFF" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
<text state="1" string="ON" align="1"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_p1"><image file="chess/wk.png"><color alpha="0.87" /></image></element>
<element name="text_p2"><image file="chess/wq.png"><color alpha="0.87" /></image></element>
<element name="text_p3"><image file="chess/wr.png"><color alpha="0.87" /></image></element>
<element name="text_p4"><image file="chess/wb.png"><color alpha="0.87" /></image></element>
<element name="text_p5"><image file="chess/wn.png"><color alpha="0.87" /></image></element>
<element name="text_p6"><image file="chess/wp.png"><color alpha="0.87" /></image></element>
<!-- lcd -->
<element name="lcd_bg"><rect><color red="0.54" green="0.57" blue="0.58" /></rect></element>
<element name="digit" defstate="0">
<led7seg><color red="0.2" green="0.16" blue="0.16" /></led7seg>
</element>
<element name="seg0" defstate="0">
<rect><color red="0.54" green="0.57" blue="0.58" /></rect>
<text state="1" string="COMPUTING"><color red="0.2" green="0.16" blue="0.16" /></text>
<text state="0" string="COMPUTING"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
</element>
<element name="seg1" defstate="0">
<rect><color red="0.54" green="0.57" blue="0.58" /></rect>
<text state="1" string="FIND POSITION" align="2"><color red="0.2" green="0.16" blue="0.16" /></text>
<text state="0" string="FIND POSITION" align="2"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
</element>
<element name="seg2" defstate="0">
<rect><color red="0.54" green="0.57" blue="0.58" /></rect>
<text state="1" string="x"><color red="0.2" green="0.16" blue="0.16" /></text>
<text state="0" string="x"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
</element>
<element name="seg3" defstate="0">
<rect><color red="0.54" green="0.57" blue="0.58" /></rect>
<text state="1" string="+"><color red="0.2" green="0.16" blue="0.16" /></text>
<text state="0" string="+"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
</element>
<element name="seg4" defstate="0">
<rect><color red="0.54" green="0.57" blue="0.58" /></rect>
<text state="1" string="I LOSE" align="1"><color red="0.2" green="0.16" blue="0.16" /></text>
<text state="0" string="I LOSE" align="1"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
</element>
<group name="lcd">
<bounds x="18" y="23.5" width="74" height="27.5" />
<bezel element="lcd_bg"><bounds x="18" y="23.5" width="74" height="27.5" /></bezel>
<!-- note: it also has a lightning symbol for low-battery at the left, but is unused -->
<bezel name="1.7" element="seg2"><bounds x="50.1" y="31.4" width="10" height="15" /></bezel>
<bezel name="3.7" element="seg3"><bounds x="81.1" y="28.1" width="10" height="16" /></bezel>
<bezel name="0.7" element="seg1"><bounds x="22" y="44.3" width="28" height="4" /></bezel>
<bezel name="2.7" element="seg4"><bounds x="71" y="44.3" width="13" height="4" /></bezel>
<bezel name="computing" element="seg0"><bounds x="40" y="25.7" width="30" height="4" /></bezel>
<bezel name="digit0" element="digit"><bounds x="29.5" y="30" width="10" height="14" /></bezel>
<bezel name="digit1" element="digit"><bounds x="40" y="30" width="10" height="14" /></bezel>
<bezel name="digit2" element="digit"><bounds x="60" y="30" width="10" height="14" /></bezel>
<bezel name="digit3" element="digit"><bounds x="70.5" y="30" width="10" height="14" /></bezel>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="8" right="27.6" top="15.5" bottom="46.9" />
<group ref="lcd"><bounds x="8" y="15.5" width="19.6" height="7.28378" /></group>
<!-- buttons -->
<bezel element="text_sw" inputtag="IN.4" inputmask="0x01"><bounds x="11.2" y="26.1" width="1.5" height="1.9" /></bezel>
<bezel element="text_sw1" inputtag="IN.4" inputmask="0x01"><bounds x="12.8" y="26.4" width="1" height="1.3" /></bezel>
<bezel element="text_l13"><bounds x="10" y="25" width="3.6" height="1.3" /></bezel>
<bezel element="text_sw" inputtag="IN.4" inputmask="0x04"><bounds x="17.2" y="26.1" width="1.5" height="1.9" /></bezel>
<bezel element="text_sw2" inputtag="IN.4" inputmask="0x04"><bounds x="18.8" y="26.4" width="2" height="1.3" /></bezel>
<bezel element="text_l14"><bounds x="16" y="25" width="3.6" height="1.3" /></bezel>
<bezel element="text_p6"><bounds x="10.925" y="31.85" width="1.75" height="1.75" /></bezel>
<bezel element="text_p5"><bounds x="16.925" y="31.85" width="1.75" height="1.75" /></bezel>
<bezel element="text_p4"><bounds x="22.925" y="31.85" width="1.75" height="1.75" /></bezel>
<bezel element="text_p3"><bounds x="10.925" y="35.85" width="1.75" height="1.75" /></bezel>
<bezel element="text_p2"><bounds x="16.925" y="35.85" width="1.75" height="1.75" /></bezel>
<bezel element="text_p1"><bounds x="22.925" y="35.85" width="1.75" height="1.75" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x01"><bounds x="10" y="30" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x02"><bounds x="16" y="30" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x04"><bounds x="22" y="30" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.1" inputmask="0x01"><bounds x="10" y="34" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.1" inputmask="0x02"><bounds x="16" y="34" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.1" inputmask="0x04"><bounds x="22" y="34" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.2" inputmask="0x01"><bounds x="10" y="38" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.2" inputmask="0x02"><bounds x="16" y="38" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.2" inputmask="0x04"><bounds x="22" y="38" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.3" inputmask="0x01"><bounds x="10" y="42" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.3" inputmask="0x02"><bounds x="16" y="42" width="3.6" height="1.9" /></bezel>
<bezel element="button" inputtag="IN.3" inputmask="0x04"><bounds x="22" y="42" width="3.6" height="1.9" /></bezel>
<bezel element="text_l01a"><bounds x="10" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l01b"><bounds x="10" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l02a"><bounds x="16" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l02b"><bounds x="16" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l03a"><bounds x="22" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l03b"><bounds x="22" y="32" width="3.6" height="1.3" /></bezel>
<bezel element="text_l04a"><bounds x="10" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l04b"><bounds x="10" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l05a"><bounds x="16" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l05b"><bounds x="16" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l06a"><bounds x="22" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l06b"><bounds x="22" y="36" width="3.6" height="1.3" /></bezel>
<bezel element="text_l07a"><bounds x="10" y="40" width="3.6" height="1.3" /></bezel>
<bezel element="text_l07b"><bounds x="10" y="40" width="3.6" height="1.3" /></bezel>
<bezel element="text_l08a"><bounds x="16" y="40" width="3.6" height="1.3" /></bezel>
<bezel element="text_l08b"><bounds x="16" y="40" width="3.6" height="1.3" /></bezel>
<bezel element="text_l09"><bounds x="22" y="40" width="3.6" height="1.3" /></bezel>
<bezel element="text_l10a"><bounds x="10" y="44" width="3.6" height="1.3" /></bezel>
<bezel element="text_l10b"><bounds x="10" y="45.2" width="3.6" height="1.3" /></bezel>
<bezel element="text_l11"><bounds x="16" y="44" width="3.6" height="1.3" /></bezel>
<bezel element="text_l12"><bounds x="22" y="44" width="3.6" height="1.3" /></bezel>
<bezel element="white"><bounds x="11.35" y="40.25" width="0.9" height="0.9" /></bezel>
<bezel element="white"><bounds x="17.35" y="40.25" width="0.9" height="0.9" /></bezel>
<bezel element="blackb"><bounds x="17.5" y="40.4" width="0.6" height="0.6" /></bezel>
</view>
</mamelayout>

View File

@ -35156,6 +35156,9 @@ leonardoa
ccmk5
ccmk6
@source:saitek_minichess.cpp
smchess
@source:saitek_prschess.cpp
prschess

View File

@ -796,6 +796,7 @@ saitek_delta1.cpp
saitek_exchess.cpp
saitek_leonardo.cpp
saitek_mark5.cpp
saitek_minichess.cpp
saitek_prschess.cpp
saitek_renaissance.cpp
saitek_risc2500.cpp