New working systems

-------------------
Constellation Junior [hap, Mychess]
This commit is contained in:
hap 2023-12-08 11:14:28 +01:00
parent 20b2f08fb5
commit 06980c1e1d
9 changed files with 742 additions and 17 deletions

View File

@ -13,7 +13,7 @@ TRAP interrupt for the beeper routine. Very strange.
Hardware notes:
- PCB label: WSE 8108A
- Hitachi HD63B01X0, 8MHz XTAL
- Hitachi HD63B01X0P, 8MHz XTAL
- 8*8 chessboard buttons, 16+1 LEDs, piezo
Yeno 309 XT is on the same PCB, and has the same MCU ROM.
@ -67,7 +67,6 @@ private:
required_ioport_array<2> m_inputs;
emu_timer *m_standbytimer;
bool m_power = false;
u16 m_inp_mux = 0;
// I/O handlers
@ -83,7 +82,6 @@ void y301xl_state::machine_start()
m_standbytimer = timer_alloc(FUNC(y301xl_state::set_standby), this);
// register for savestates
save_item(NAME(m_power));
save_item(NAME(m_inp_mux));
}
@ -95,8 +93,6 @@ void y301xl_state::machine_start()
void y301xl_state::machine_reset()
{
m_power = true;
m_maincpu->set_input_line(HD6301_IRQ_LINE, CLEAR_LINE);
m_maincpu->set_input_line(M6801_STBY_LINE, CLEAR_LINE);
}
@ -108,13 +104,11 @@ TIMER_CALLBACK_MEMBER(y301xl_state::set_standby)
INPUT_CHANGED_MEMBER(y301xl_state::power_off)
{
if (newval && m_power)
if (newval && !m_maincpu->standby())
{
m_power = false;
// IRQ1 when power switch is set to SAVE, followed by STBY after a short delay
m_maincpu->set_input_line(HD6301_IRQ_LINE, ASSERT_LINE);
m_standbytimer->adjust(attotime::from_msec(100), M6801_STBY_LINE);
m_standbytimer->adjust(attotime::from_msec(50), M6801_STBY_LINE);
}
}

View File

@ -17,7 +17,7 @@ TODO:
Hardware notes:
- PCB label (Super Crown): CXG 218-600-001
- Hitachi HD6301Y0 (mode 2), 8MHz XTAL
- Hitachi HD6301Y0P (mode 2), 8MHz XTAL
- 2KB battery-backed RAM (HM6116LP-3)
- chessboard buttons, 24 LEDs, piezo

View File

@ -12,7 +12,7 @@ NVRAM won't save properly.
Hardware notes:
- PCB label: 957&958-2, europa.H+G
- Hitachi HD63B01Y0, 8MHz resonator
- Hitachi HD63B01Y0F, 8MHz resonator
- 8*8 chessboard buttons, 24 LEDs, piezo
Mephisto Europa A and Mephisto Marco Polo have the exact same MCU.

View File

@ -0,0 +1,487 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
-->
<mamelayout version="2">
<!-- define elements -->
<element name="red"><rect><color red="0.7" green="0.13" blue="0.12" /></rect></element>
<element name="whitew"><rect><color red="1" green="1" blue="1" /></rect></element>
<element name="whitem"><rect><color red="0.31" green="0.43" blue="0.49" /></rect></element>
<element name="ledr" defstate="0">
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.17" green="0.015" blue="0.02" /></disk>
</element>
<element name="ledg" defstate="0">
<disk state="1"><color red="0.1" green="0.95" blue="0.05" /></disk>
<disk state="0"><color red="0.015" green="0.16" blue="0.01" /></disk>
</element>
<element name="hlb" defstate="0">
<rect state="1"><color red="0" green="0" blue="0" /></rect>
</element>
<element name="text_1"><text string="1"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_2"><text string="2"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_3"><text string="3"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_4"><text string="4"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_5"><text string="5"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_6"><text string="6"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_7"><text string="7"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_8"><text string="8"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_a"><text string="A"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_b"><text string="B"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_c"><text string="C"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_d"><text string="D"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_e"><text string="E"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_f"><text string="F"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_g"><text string="G"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_h"><text string="H"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_l1"><text string="Mate"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_l2"><text string="Stale"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_l3"><text string="Check"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_l7"><text string="Error"><color red="0.9" green="0.9" blue="0.9" /></text></element>
<element name="text_r1">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Black/White"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Verify"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Set Up"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="New Game"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r5">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Set Level"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r6">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Sound"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r7">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Take Back"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_r8">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Go"><color red="0.5" green="0.37" blue="0.3" /></text>
</element>
<element name="text_p1"><image file="chess/bk.svg"></image></element>
<element name="text_p2"><image file="chess/bq.svg"></image></element>
<element name="text_p3"><image file="chess/bb.svg"></image></element>
<element name="text_p4"><image file="chess/bn.svg"></image></element>
<element name="text_p5"><image file="chess/br.svg"></image></element>
<element name="text_p6"><image file="chess/bp.svg"></image></element>
<!-- sb board -->
<element name="cblack"><rect><color red="0.5" green="0.37" blue="0.3" /></rect></element>
<element name="cwhite"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="hlbb" defstate="0">
<text string=" "><bounds x="0" y="0" width="1" height="1" /></text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="0" green="0" blue="0" />
</disk>
</element>
<element name="piece" defstate="0">
<image file="chess/wp.svg" state="1"/>
<image file="chess/wn.svg" state="2"/>
<image file="chess/wb.svg" state="3"/>
<image file="chess/wr.svg" state="4"/>
<image file="chess/wq.svg" state="5"/>
<image file="chess/wk.svg" state="6"/>
<image file="chess/bp.svg" state="7"/>
<image file="chess/bn.svg" state="8"/>
<image file="chess/bb.svg" state="9"/>
<image file="chess/br.svg" state="10"/>
<image file="chess/bq.svg" state="11"/>
<image file="chess/bk.svg" state="12"/>
<!-- selected pieces -->
<image file="chess/wp.svg" state="13"><color alpha="0.5" /></image>
<image file="chess/wn.svg" state="14"><color alpha="0.5" /></image>
<image file="chess/wb.svg" state="15"><color alpha="0.5" /></image>
<image file="chess/wr.svg" state="16"><color alpha="0.5" /></image>
<image file="chess/wq.svg" state="17"><color alpha="0.5" /></image>
<image file="chess/wk.svg" state="18"><color alpha="0.5" /></image>
<image file="chess/bp.svg" state="19"><color alpha="0.5" /></image>
<image file="chess/bn.svg" state="20"><color alpha="0.5" /></image>
<image file="chess/bb.svg" state="21"><color alpha="0.5" /></image>
<image file="chess/br.svg" state="22"><color alpha="0.5" /></image>
<image file="chess/bq.svg" state="23"><color alpha="0.5" /></image>
<image file="chess/bk.svg" state="24"><color alpha="0.5" /></image>
</element>
<group name="sb_board">
<bounds x="0" y="0" width="80" height="80" />
<!-- squares (avoid seams) -->
<element ref="cwhite"><bounds x="0" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="0" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="10" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="20" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="30" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="40" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="50" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="60" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="10" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="20" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="30" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="40" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="50" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="60" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="70" y="70" width="10" height="10" /></element>
<!-- sensors, pieces -->
<repeat count="8">
<param name="y" start="0" increment="10" />
<param name="i" start="8" increment="-1" />
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element name="piece_a~i~" ref="piece"><bounds x="0" y="~y~" width="10" height="10" /></element>
<element name="piece_b~i~" ref="piece"><bounds x="10" y="~y~" width="10" height="10" /></element>
<element name="piece_c~i~" ref="piece"><bounds x="20" y="~y~" width="10" height="10" /></element>
<element name="piece_d~i~" ref="piece"><bounds x="30" y="~y~" width="10" height="10" /></element>
<element name="piece_e~i~" ref="piece"><bounds x="40" y="~y~" width="10" height="10" /></element>
<element name="piece_f~i~" ref="piece"><bounds x="50" y="~y~" width="10" height="10" /></element>
<element name="piece_g~i~" ref="piece"><bounds x="60" y="~y~" width="10" height="10" /></element>
<element name="piece_h~i~" ref="piece"><bounds x="70" y="~y~" width="10" height="10" /></element>
</repeat>
</group>
<!-- sb ui -->
<element name="hlub" defstate="0">
<rect state="1"><color red="0" green="0" blue="0" /></rect>
</element>
<element name="text_uit1"><text string="S.BOARD"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uib3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uiu2a">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2b">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2c">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2d">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu3a" defstate="0">
<simplecounter maxstate="999" digits="1" align="2">
<color red="0.81" green="0.8" blue="0.79" />
</simplecounter>
</element>
<element name="text_uiu3b"><text string="/"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uiu3c" defstate="0">
<simplecounter maxstate="999" digits="1" align="1">
<color red="0.81" green="0.8" blue="0.79" />
</simplecounter>
</element>
<group name="sb_ui">
<bounds x="0" y="0" width="10" height="80" />
<element ref="cblack"><bounds x="0" y="0" width="10" height="1" /></element>
<element ref="cblack"><bounds x="0" y="7" width="10" height="1" /></element>
<element ref="cblack"><bounds x="0" y="79" width="10" height="1" /></element>
<element ref="text_uit1"><bounds x="0" y="2" width="10" height="2" /></element>
<element ref="text_uit2"><bounds x="0" y="4" width="10" height="2" /></element>
<!-- board -->
<element ref="text_uib1"><bounds x="0" y="9" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></element>
<element ref="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></element>
<element ref="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></element>
<element ref="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- spawn -->
<element ref="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="23" width="8" height="12" /></element>
<element ref="cwhite"><bounds x="1" y="36" width="8" height="12" /></element>
<element name="piece_ui1" ref="piece"><bounds x="1" y="23" width="4" height="4" /></element>
<element name="piece_ui2" ref="piece"><bounds x="1" y="27" width="4" height="4" /></element>
<element name="piece_ui3" ref="piece"><bounds x="1" y="31" width="4" height="4" /></element>
<element name="piece_ui4" ref="piece"><bounds x="5" y="23" width="4" height="4" /></element>
<element name="piece_ui5" ref="piece"><bounds x="5" y="27" width="4" height="4" /></element>
<element name="piece_ui6" ref="piece"><bounds x="5" y="31" width="4" height="4" /></element>
<element name="piece_ui7" ref="piece"><bounds x="1" y="36" width="4" height="4" /></element>
<element name="piece_ui8" ref="piece"><bounds x="1" y="40" width="4" height="4" /></element>
<element name="piece_ui9" ref="piece"><bounds x="1" y="44" width="4" height="4" /></element>
<element name="piece_ui10" ref="piece"><bounds x="5" y="36" width="4" height="4" /></element>
<element name="piece_ui11" ref="piece"><bounds x="5" y="40" width="4" height="4" /></element>
<element name="piece_ui12" ref="piece"><bounds x="5" y="44" width="4" height="4" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<!-- hand -->
<element ref="text_uih1"><bounds x="0" y="51" width="10" height="2" /></element>
<element ref="cblack"><bounds x="1" y="53.5" width="8" height="6" /></element>
<element name="piece_ui0" ref="piece"><bounds x="2" y="53.5" width="6" height="6" /></element>
<element ref="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></element>
<element ref="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- undo -->
<element ref="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></element>
<element ref="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element name="count_ui0" ref="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></element>
<element name="count_ui1" ref="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></element>
<element ref="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></element>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-16" right="99.5" top="-1" bottom="88" />
<element ref="cblack"><bounds x="3" y="3" width="90" height="80" /></element>
<group ref="sb_board"><bounds x="3" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-14.5" y="3" width="10" height="80" /></group>
<!-- chessboard coords -->
<element ref="text_8"><bounds x="-1.75" y="9" width="2" height="2" /></element>
<element ref="text_7"><bounds x="-1.75" y="19" width="2" height="2" /></element>
<element ref="text_6"><bounds x="-1.75" y="29" width="2" height="2" /></element>
<element ref="text_5"><bounds x="-1.75" y="39" width="2" height="2" /></element>
<element ref="text_4"><bounds x="-1.75" y="49" width="2" height="2" /></element>
<element ref="text_3"><bounds x="-1.75" y="59" width="2" height="2" /></element>
<element ref="text_2"><bounds x="-1.75" y="69" width="2" height="2" /></element>
<element ref="text_1"><bounds x="-1.75" y="79" width="2" height="2" /></element>
<element ref="text_l1"><bounds x="-5" y="74.75" width="8" height="2" /></element>
<element ref="text_l2"><bounds x="-5" y="64.75" width="8" height="2" /></element>
<element ref="text_l3"><bounds x="-5" y="54.75" width="8" height="2" /></element>
<element ref="text_l7"><bounds x="-5" y="14.75" width="8" height="2" /></element>
<element ref="text_a"><bounds x="8" y="83.75" width="2" height="2" /></element>
<element ref="text_b"><bounds x="18" y="83.75" width="2" height="2" /></element>
<element ref="text_c"><bounds x="28" y="83.75" width="2" height="2" /></element>
<element ref="text_d"><bounds x="38" y="83.75" width="2" height="2" /></element>
<element ref="text_e"><bounds x="48" y="83.75" width="2" height="2" /></element>
<element ref="text_f"><bounds x="58" y="83.75" width="2" height="2" /></element>
<element ref="text_g"><bounds x="68" y="83.75" width="2" height="2" /></element>
<element ref="text_h"><bounds x="78" y="83.75" width="2" height="2" /></element>
<!-- chessboard leds -->
<element name="2.7" ref="ledr"><bounds x="-1.5" y="7.25" width="1.5" height="1.5" /></element>
<element name="2.6" ref="ledr"><bounds x="-1.5" y="17.25" width="1.5" height="1.5" /></element>
<element name="2.5" ref="ledr"><bounds x="-1.5" y="27.25" width="1.5" height="1.5" /></element>
<element name="2.4" ref="ledr"><bounds x="-1.5" y="37.25" width="1.5" height="1.5" /></element>
<element name="2.3" ref="ledr"><bounds x="-1.5" y="47.25" width="1.5" height="1.5" /></element>
<element name="2.2" ref="ledr"><bounds x="-1.5" y="57.25" width="1.5" height="1.5" /></element>
<element name="2.1" ref="ledr"><bounds x="-1.5" y="67.25" width="1.5" height="1.5" /></element>
<element name="2.0" ref="ledr"><bounds x="-1.5" y="77.25" width="1.5" height="1.5" /></element>
<element name="1.0" ref="ledr"><bounds x="6" y="84" width="1.5" height="1.5" /></element>
<element name="1.1" ref="ledr"><bounds x="16" y="84" width="1.5" height="1.5" /></element>
<element name="1.2" ref="ledr"><bounds x="26" y="84" width="1.5" height="1.5" /></element>
<element name="1.3" ref="ledr"><bounds x="36" y="84" width="1.5" height="1.5" /></element>
<element name="1.4" ref="ledr"><bounds x="46" y="84" width="1.5" height="1.5" /></element>
<element name="1.5" ref="ledr"><bounds x="56" y="84" width="1.5" height="1.5" /></element>
<element name="1.6" ref="ledr"><bounds x="66" y="84" width="1.5" height="1.5" /></element>
<element name="1.7" ref="ledr"><bounds x="76" y="84" width="1.5" height="1.5" /></element>
<element name="0.0" ref="ledr"><bounds x="90.5" y="84" width="1.5" height="1.5" /></element>
<element name="0.1" ref="ledg"><bounds x="86" y="84" width="1.5" height="1.5" /></element>
<element name="0.2" ref="ledg"><bounds x="96" y="70.7" width="1.5" height="1.5" /></element>
<element name="0.3" ref="ledg"><bounds x="96" y="60.7" width="1.5" height="1.5" /></element>
<!-- right side buttons -->
<element ref="cwhite"><bounds x="84" y="3" width="10" height="80" /></element>
<element ref="text_r8"><bounds x="84.5" y="10.7" width="9" height="1.5" /></element>
<element ref="text_r7"><bounds x="84.5" y="20.7" width="9" height="1.5" /></element>
<element ref="text_r6"><bounds x="84.5" y="30.7" width="9" height="1.5" /></element>
<element ref="text_r5"><bounds x="84.5" y="40.7" width="9" height="1.5" /></element>
<element ref="text_r4"><bounds x="84.5" y="50.7" width="9" height="1.5" /></element>
<element ref="text_r3"><bounds x="84.5" y="60.7" width="9" height="1.5" /></element>
<element ref="text_r2"><bounds x="84.5" y="70.7" width="9" height="1.5" /></element>
<element ref="text_r1"><bounds x="84.5" y="80.7" width="9" height="1.5" /></element>
<element ref="cblack"><bounds x="85.5" y="5.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="15.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="25.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="35.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="45.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="55.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="65.5" width="7" height="5" /></element>
<element ref="cblack"><bounds x="85.5" y="75.5" width="7" height="5" /></element>
<element ref="red"><bounds x="86" y="6" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="16" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="26" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="36" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="46" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="56" width="6" height="4" /></element>
<element ref="whitew"><bounds x="86" y="66" width="6" height="4" /></element>
<element ref="cwhite"><bounds x="89" y="76" width="3" height="4" /></element>
<element ref="text_p1"><bounds x="87.55" y="16.45" width="2.9" height="2.9" /></element>
<element ref="text_p2"><bounds x="87.55" y="26.45" width="2.9" height="2.9" /></element>
<element ref="text_p3"><bounds x="87.55" y="36.45" width="2.9" height="2.9" /></element>
<element ref="text_p4"><bounds x="87.55" y="46.45" width="2.9" height="2.9" /></element>
<element ref="text_p5"><bounds x="87.55" y="56.45" width="2.9" height="2.9" /></element>
<element ref="text_p6"><bounds x="87.55" y="66.45" width="2.9" height="2.9" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="16" width="6" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="26" width="6" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="36" width="6" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="46" width="6" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="56" width="6" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="86" y="66" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="16" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="26" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="36" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="46" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="56" width="6" height="4" /></element>
<element ref="cblack" blend="add"><bounds x="86" y="66" width="6" height="4" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x01"><bounds x="85.5" y="5.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x02"><bounds x="85.5" y="15.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x04"><bounds x="85.5" y="25.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x08"><bounds x="85.5" y="35.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x10"><bounds x="85.5" y="45.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x20"><bounds x="85.5" y="55.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x40"><bounds x="85.5" y="65.5" width="7" height="5" /><color alpha="0.15" /></element>
<element ref="hlb" inputtag="IN.0" inputmask="0x80"><bounds x="85.5" y="75.5" width="7" height="5" /><color alpha="0.15" /></element>
</view>
</mamelayout>

View File

@ -34739,6 +34739,9 @@ constq
ssensor4
supercon
@source:novag/constjr.cpp
constjr
@source:novag/diablo.cpp
diablo68
diablo68a

240
src/mame/novag/constjr.cpp Normal file
View File

@ -0,0 +1,240 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Mychess
/*******************************************************************************
Novag Constellation Junior (aka Constellation Jr.)
NOTE: It triggers an NMI at power-off (or power-failure). If this isn't done,
NVRAM won't work properly.
The interface and look are very similar to Novag Presto (Micro II program).
The chess engine is by David Kittinger.
Constellation Junior model number is 852, but the MCU label says 846, and the MCU
datestamp is from 1984. There is no known Novag model 846, so perhaps they intended
to sell it in 1984, but changed their mind and delayed it until early 1985.
Hardware notes:
- PCB label: 100040/100039
- Hitachi HD6301V1P @ ~4MHz (LC oscillator)
- 8*8 chessboard buttons, 16+4 leds, piezo
TODO:
- if/when MAME supports an exit callback, hook up power-off NMI to that
BATANB:
- slower chessboard button response when a piece moves 1 square vertically between
the 4th and the 5th ranks, hence the 350ms set_delay
*******************************************************************************/
#include "emu.h"
#include "cpu/m6800/m6801.h"
#include "machine/sensorboard.h"
#include "sound/dac.h"
#include "video/pwm.h"
#include "speaker.h"
// internal artwork
#include "novag_constjr.lh"
namespace {
class constjr_state : public driver_device
{
public:
constjr_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_board(*this, "board"),
m_display(*this, "display"),
m_dac(*this, "dac"),
m_inputs(*this, "IN.0")
{ }
DECLARE_INPUT_CHANGED_MEMBER(power_off);
void constjr(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
// devices/pointers
required_device<hd6301v1_cpu_device> m_maincpu;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
required_ioport m_inputs;
emu_timer *m_standbytimer;
u16 m_inp_mux = 0;
// I/O handlers
void board_w(u8 data);
void control_w(u8 data);
void ledsel_w(u8 data);
u8 input_r();
TIMER_CALLBACK_MEMBER(set_standby);
};
void constjr_state::machine_start()
{
m_standbytimer = timer_alloc(FUNC(constjr_state::set_standby), this);
// register for savestates
save_item(NAME(m_inp_mux));
}
/*******************************************************************************
Power
*******************************************************************************/
void constjr_state::machine_reset()
{
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
m_maincpu->set_input_line(M6801_STBY_LINE, CLEAR_LINE);
}
TIMER_CALLBACK_MEMBER(constjr_state::set_standby)
{
m_maincpu->set_input_line(M6801_STBY_LINE, ASSERT_LINE);
}
INPUT_CHANGED_MEMBER(constjr_state::power_off)
{
if (newval && !m_maincpu->standby())
{
// NMI when power goes off, followed by STBY after a short delay
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
m_standbytimer->adjust(attotime::from_msec(50), M6801_STBY_LINE);
}
}
/*******************************************************************************
I/O
*******************************************************************************/
void constjr_state::board_w(u8 data)
{
// P10-P17: input mux (chessboard), led data
m_inp_mux = (m_inp_mux & 0x100) | (data ^ 0xff);
m_display->write_mx(~data);
}
void constjr_state::control_w(u8 data)
{
// P22: speaker out
m_dac->write(BIT(~data, 2));
// P24: input mux (buttons)
m_inp_mux = (m_inp_mux & 0xff) | (~data << 4 & 0x100);
}
void constjr_state::ledsel_w(u8 data)
{
// P35-P37: led select
m_display->write_my(~data >> 5 & 7);
}
u8 constjr_state::input_r()
{
// P40-P47: multiplexed inputs
u8 data = 0;
// read buttons
if (m_inp_mux & 0x100)
data |= m_inputs->read();
// read chessboard
for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))
data |= m_board->read_rank(i, true);
return ~data;
}
/*******************************************************************************
Input Ports
*******************************************************************************/
static INPUT_PORTS_START( constjr )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_B) PORT_NAME("Black/White")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_V) PORT_NAME("Verify / Pawn")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_U) PORT_NAME("Set Up / Rook")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game / Knight")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_L) PORT_NAME("Set Level / Bishop")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_S) PORT_NAME("Sound / Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back / King")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_G) PORT_NAME("Go")
PORT_START("POWER") // needs to be triggered for nvram to work
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, constjr_state, power_off, 0) PORT_NAME("Power Off")
INPUT_PORTS_END
/*******************************************************************************
Machine Configs
*******************************************************************************/
void constjr_state::constjr(machine_config &config)
{
// basic machine hardware
HD6301V1(config, m_maincpu, 4'000'000); // approximation, no XTAL
m_maincpu->nvram_enable_backup(true);
m_maincpu->standby_cb().set(m_maincpu, FUNC(hd6301v1_cpu_device::nvram_set_battery));
m_maincpu->standby_cb().append([this](int state) { if (state) m_display->clear(); });
m_maincpu->out_p1_cb().set(FUNC(constjr_state::board_w));
m_maincpu->out_p2_cb().set(FUNC(constjr_state::control_w));
m_maincpu->out_p3_cb().set(FUNC(constjr_state::ledsel_w));
m_maincpu->in_p4_cb().set(FUNC(constjr_state::input_r));
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(350));
m_board->set_nvram_enable(true);
// video hardware
PWM_DISPLAY(config, m_display).set_size(3, 8);
config.set_default_layout(layout_novag_constjr);
// sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
}
/*******************************************************************************
ROM Definitions
*******************************************************************************/
ROM_START( constjr )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD("hd6301v1p_d24_ucc-846", 0x0000, 0x1000, CRC(e73703e4) SHA1(03eb889a9981a6bdfca129ea84f984fbf7858d47) )
ROM_END
} // anonymous namespace
/*******************************************************************************
Drivers
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1985, constjr, 0, 0, constjr, constjr, constjr_state, empty_init, "Novag", "Constellation Junior", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -12,9 +12,10 @@ This program was used in several Novag chesscomputers:
- Novag Octo
suspected, to be confirmed:
- Novag Allegro
- Novag Allegro (not Allegro 4)
- Novag Piccolo
- Novag Alto
The chess engine is by Julio Kaplan, not David Kittinger.
Hardware notes:

View File

@ -11,7 +11,7 @@ NVRAM won't work properly (supremo doesn't have NVRAM).
TODO:
- beeps are glitchy, as if interrupted for too long
- if/when MAME supports an exit callback, hook up power-off NMI to that
- if/when MAME supports an exit callback, hook up nsnova power-off NMI to that
- nsnova serial port isn't working, MCU emulation problem?
- nsnova unmapped reads from 0x33/0x34
- is "Aquamarine / Super Nova" the same rom as nsnova and just a redesign?

View File

@ -22,7 +22,7 @@ Hardware notes:
Chess Companion II:
- PCB label: YO1B-01 REV.B
- Hitachi HD6301V1 (0609V171) @ ~4MHz (LC oscillator)
- Hitachi HD6301V1P (0609V171) @ ~4MHz (LC oscillator)
- chessboard buttons, 16+5 leds, piezo
Explorer Chess:
@ -57,7 +57,7 @@ CXG Enterprise "S" / Star Chess is on very similar hardware, so it's emulated
in this driver too.
Hardware notes:
- Hitachi HD6301V1 (HD6301V1C42P), 7.15909MHz XTAL
- Hitachi HD6301V1P (HD6301V1C42P), 7.15909MHz XTAL
- port 2 I/O is changed a bit, rest is same as compan2
HD6301V1C42P MCU is used in:
@ -179,7 +179,7 @@ INPUT_CHANGED_MEMBER(compan2_state::power_off)
m_power = false;
// when power switch is set to MEMORY, it triggers an NMI after a short delay
attotime delay = attotime::from_msec(100);
attotime delay = attotime::from_msec(50);
m_nmitimer->adjust(delay, INPUT_LINE_NMI);
// afterwards, MCU STBY pin is asserted after a short delay