mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
New working machine added
--------- Great Game Machine [hap, bataais]
This commit is contained in:
parent
b5d3b29d16
commit
8b018d198c
18
hash/arb.xml
18
hash/arb.xml
@ -3,7 +3,7 @@
|
||||
|
||||
<softwarelist name="arb" description="ARB Modules">
|
||||
|
||||
<!-- AVE Micro Systems Auto Response Board (ARB) chess program modules -->
|
||||
<!-- AVE Micro Systems Auto Response Board (ARB) game modules -->
|
||||
|
||||
<software name="sargon25">
|
||||
<description>Sargon 2.5</description>
|
||||
@ -11,10 +11,10 @@
|
||||
<publisher>AVE Micro Systems</publisher>
|
||||
<part name="cart" interface="arb">
|
||||
<dataarea name="rom" size="0x8000">
|
||||
<rom name="4000-4800_ea_8332a161-1" size="0x1000" crc="00460848" sha1="ac4fe2232028bd42506a24457882296e7d3a8f54" offset="0x4000" />
|
||||
<rom size="0x1000" offset="0x6000" loadflag="reload" />
|
||||
<rom name="5000-5800_ea_8332a160-1" size="0x1000" crc="aac1dff2" sha1="9a7fc6dc98e53120e511d266304ad07f248f415a" offset="0x5000" />
|
||||
<rom size="0x1000" offset="0x7000" loadflag="reload" />
|
||||
<rom name="4000-4800_ea_8332a161-1" offset="0x4000" size="0x1000" crc="00460848" sha1="ac4fe2232028bd42506a24457882296e7d3a8f54" />
|
||||
<rom offset="0x6000" size="0x1000" loadflag="reload" />
|
||||
<rom name="5000-5800_ea_8332a160-1" offset="0x5000" size="0x1000" crc="aac1dff2" sha1="9a7fc6dc98e53120e511d266304ad07f248f415a" />
|
||||
<rom offset="0x7000" size="0x1000" loadflag="reload" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -26,10 +26,10 @@
|
||||
<part name="cart" interface="arb">
|
||||
<feature name="ram" value="1" />
|
||||
<dataarea name="rom" size="0x8000">
|
||||
<rom name="1.bin" size="0x1000" crc="26e57f38" sha1="b37364dd567018e5aebaecbcc47af3bd43e36032" offset="0x2000" />
|
||||
<rom size="0x1000" offset="0x3000" loadflag="reload" />
|
||||
<rom name="2.bin" size="0x2000" crc="3b1b26a2" sha1="0b59f6c344c9996a06e63e61e91a195b0eb1dd32" offset="0x4000" />
|
||||
<rom name="3.bin" size="0x2000" crc="b90f7f80" sha1="71ffd2d56e1f44e7c4e1d13364e43fc6ac1a4f99" offset="0x6000" />
|
||||
<rom name="1.bin" offset="0x2000" size="0x1000" crc="26e57f38" sha1="b37364dd567018e5aebaecbcc47af3bd43e36032" />
|
||||
<rom offset="0x3000" size="0x1000" loadflag="reload" />
|
||||
<rom name="2.bin" offset="0x4000" size="0x2000" crc="3b1b26a2" sha1="0b59f6c344c9996a06e63e61e91a195b0eb1dd32" />
|
||||
<rom name="3.bin" offset="0x6000" size="0x2000" crc="b90f7f80" sha1="71ffd2d56e1f44e7c4e1d13364e43fc6ac1a4f99" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
@ -11,7 +11,7 @@
|
||||
<publisher>Fidelity Electronics</publisher>
|
||||
<part name="cart" interface="fidel_scc">
|
||||
<dataarea name="rom" size="0x2000">
|
||||
<rom name="cb9.bin" size="0x2000" crc="421147e8" sha1="ccf62f6f218e8992baf30973fe41b35e14a1cc1a" offset="0x0000" />
|
||||
<rom name="cb9.bin" offset="0x0000" size="0x2000" crc="421147e8" sha1="ccf62f6f218e8992baf30973fe41b35e14a1cc1a" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -22,8 +22,8 @@
|
||||
<publisher>Fidelity Electronics</publisher>
|
||||
<part name="cart" interface="fidel_scc">
|
||||
<dataarea name="rom" size="0x4000">
|
||||
<rom name="101-1042a01" size="0x2000" crc="591b3e4a" sha1="f75ae850f2f70808b5423f847ff12ee890752bf8" offset="0x0000" />
|
||||
<rom name="101-1042a02" size="0x2000" crc="1bdf0a21" sha1="1c6f673c0bf846e705d15c802f433ac1dc9b153c" offset="0x2000" />
|
||||
<rom name="101-1042a01" offset="0x0000" size="0x2000" crc="591b3e4a" sha1="f75ae850f2f70808b5423f847ff12ee890752bf8" />
|
||||
<rom name="101-1042a02" offset="0x2000" size="0x2000" crc="1bdf0a21" sha1="1c6f673c0bf846e705d15c802f433ac1dc9b153c" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
22
hash/ggm.xml
Normal file
22
hash/ggm.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
|
||||
<softwarelist name="ggm" description="GGM Cartridges">
|
||||
|
||||
<!-- Applied Concepts Great Game Machine (GGM) / Chafitz Modular Game System (MGS) game cartridges -->
|
||||
|
||||
<software name="boris25">
|
||||
<description>Boris 2.5 / Sargon 2.5</description>
|
||||
<year>1980</year>
|
||||
<publisher>Applied Concepts</publisher>
|
||||
<part name="cart" interface="ggm">
|
||||
<dataarea name="rom" size="0x8000">
|
||||
<rom name="10.bin" offset="0x4000" size="0x1000" crc="0db2e277" sha1="9f8823739d28b0a0e3857b7c672aa2514cd6816b" />
|
||||
<rom offset="0x6000" size="0x1000" loadflag="reload" />
|
||||
<rom name="11.bin" offset="0x5000" size="0x1000" crc="980fa10f" sha1="5ec814bbaf583031acbe2c0199a6195c2849ef5e" />
|
||||
<rom offset="0x7000" size="0x1000" loadflag="reload" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
@ -10,10 +10,10 @@
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="cart" interface="lantutor">
|
||||
<dataarea name="rom" size="0x10000">
|
||||
<rom name="cd2311.vsm" size="0x4000" crc="7bab7f7c" sha1="e89cfa7ae9d5ce09ff19b9474ecd70fb5982ccb9" offset="0x0000" />
|
||||
<rom name="cd2312.vsm" size="0x4000" crc="6acb9c72" sha1="09817f1e0b1683d90edada38ac70ce738af6417f" offset="0x4000" />
|
||||
<rom name="cd2313.vsm" size="0x4000" crc="ed979cc9" sha1="414457c6359e64c48cd1b80f47098dc2438f0b93" offset="0x8000" />
|
||||
<rom name="cd2314.vsm" size="0x4000" crc="0454d5fb" sha1="347d0d5f39e2e31f93773bad9e62d121f1d40d3c" offset="0xc000" />
|
||||
<rom name="cd2311.vsm" offset="0x0000" size="0x4000" crc="7bab7f7c" sha1="e89cfa7ae9d5ce09ff19b9474ecd70fb5982ccb9" />
|
||||
<rom name="cd2312.vsm" offset="0x4000" size="0x4000" crc="6acb9c72" sha1="09817f1e0b1683d90edada38ac70ce738af6417f" />
|
||||
<rom name="cd2313.vsm" offset="0x8000" size="0x4000" crc="ed979cc9" sha1="414457c6359e64c48cd1b80f47098dc2438f0b93" />
|
||||
<rom name="cd2314.vsm" offset="0xc000" size="0x4000" crc="0454d5fb" sha1="347d0d5f39e2e31f93773bad9e62d121f1d40d3c" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -24,10 +24,10 @@
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="cart" interface="lantutor">
|
||||
<dataarea name="rom" size="0x10000">
|
||||
<rom name="cd2315.vsm" size="0x4000" crc="cd44490f" sha1="7b62e9fb0cc30fa81c23ef3361bb579c8794f178" offset="0x0000" />
|
||||
<rom name="cd2316.vsm" size="0x4000" crc="c5464edf" sha1="0f028cb5e8445216dd45fa641e5751b08a637f5c" offset="0x4000" />
|
||||
<rom name="cd2317.vsm" size="0x4000" crc="53231c0b" sha1="472117c3d0e28437fa8faa054f98088e06efc2a1" offset="0x8000" />
|
||||
<rom name="cd2318.vsm" size="0x4000" crc="6c0727bc" sha1="132e39755b122f2cbec6f3e767f5d256a9c1e7ae" offset="0xc000" />
|
||||
<rom name="cd2315.vsm" offset="0x0000" size="0x4000" crc="cd44490f" sha1="7b62e9fb0cc30fa81c23ef3361bb579c8794f178" />
|
||||
<rom name="cd2316.vsm" offset="0x4000" size="0x4000" crc="c5464edf" sha1="0f028cb5e8445216dd45fa641e5751b08a637f5c" />
|
||||
<rom name="cd2317.vsm" offset="0x8000" size="0x4000" crc="53231c0b" sha1="472117c3d0e28437fa8faa054f98088e06efc2a1" />
|
||||
<rom name="cd2318.vsm" offset="0xc000" size="0x4000" crc="6c0727bc" sha1="132e39755b122f2cbec6f3e767f5d256a9c1e7ae" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -38,10 +38,10 @@
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="cart" interface="lantutor">
|
||||
<dataarea name="rom" size="0x10000">
|
||||
<rom name="cd2327.vsm" size="0x4000" crc="207aa27d" sha1="e5012c48b20f9b49a00f6fe8ee5719df1cbf04b4" offset="0x0000" />
|
||||
<rom name="cd2328.vsm" size="0x4000" crc="768980d0" sha1="085ba873c83d25790b090a9a8797183c6664d03c" offset="0x4000" />
|
||||
<rom name="cd2329.vsm" size="0x4000" crc="c8583a4b" sha1="3a4f2e42b4ab63e5bfdbd98eb40706f940491015" offset="0x8000" />
|
||||
<rom name="cd2330.vsm" size="0x4000" crc="52ac969f" sha1="3a9e3db62f2ef3aedd5f4cd4bd21dccecfecf02f" offset="0xc000" />
|
||||
<rom name="cd2327.vsm" offset="0x0000" size="0x4000" crc="207aa27d" sha1="e5012c48b20f9b49a00f6fe8ee5719df1cbf04b4" />
|
||||
<rom name="cd2328.vsm" offset="0x4000" size="0x4000" crc="768980d0" sha1="085ba873c83d25790b090a9a8797183c6664d03c" />
|
||||
<rom name="cd2329.vsm" offset="0x8000" size="0x4000" crc="c8583a4b" sha1="3a4f2e42b4ab63e5bfdbd98eb40706f940491015" />
|
||||
<rom name="cd2330.vsm" offset="0xc000" size="0x4000" crc="52ac969f" sha1="3a9e3db62f2ef3aedd5f4cd4bd21dccecfecf02f" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -52,10 +52,10 @@
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="cart" interface="lantutor">
|
||||
<dataarea name="rom" size="0x10000">
|
||||
<rom name="cd2331.vsm" size="0x4000" crc="a1e9290b" sha1="1163f7695e0727c6058684ea7f7c52d432f3fb7c" offset="0x0000" />
|
||||
<rom name="cd2332.vsm" size="0x4000" crc="b8ef4eed" sha1="0eccd98c81498caa166f7164c9563ef95412ffd7" offset="0x4000" />
|
||||
<rom name="cd2333.vsm" size="0x4000" crc="c989eaf2" sha1="26e644523b318cefb0fe46c7886cd0746afa438c" offset="0x8000" />
|
||||
<rom name="cd2334.vsm" size="0x4000" crc="54bbb9c8" sha1="32fb22397b2cd30490cecf3d978a24b4def389db" offset="0xc000" />
|
||||
<rom name="cd2331.vsm" offset="0x0000" size="0x4000" crc="a1e9290b" sha1="1163f7695e0727c6058684ea7f7c52d432f3fb7c" />
|
||||
<rom name="cd2332.vsm" offset="0x4000" size="0x4000" crc="b8ef4eed" sha1="0eccd98c81498caa166f7164c9563ef95412ffd7" />
|
||||
<rom name="cd2333.vsm" offset="0x8000" size="0x4000" crc="c989eaf2" sha1="26e644523b318cefb0fe46c7886cd0746afa438c" />
|
||||
<rom name="cd2334.vsm" offset="0xc000" size="0x4000" crc="54bbb9c8" sha1="32fb22397b2cd30490cecf3d978a24b4def389db" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -66,10 +66,10 @@
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="cart" interface="lantutor">
|
||||
<dataarea name="rom" size="0x10000">
|
||||
<rom name="cd3526.vsm" size="0x4000" crc="58fae847" sha1="ee9c0f4dbd7101a1f8f276e60e77403d01a9b36f" offset="0x0000" />
|
||||
<rom name="cd3527.vsm" size="0x4000" crc="aa9f5334" sha1="a363aaf4fb9194995431a9dc1d78446ef510e7be" offset="0x4000" />
|
||||
<rom name="cd3528.vsm" size="0x4000" crc="e21919ea" sha1="b0edd35d5de29ac2f61a1dc7dc0a7fab20914fbe" offset="0x8000" />
|
||||
<rom name="cd3529.vsm" size="0x4000" crc="dc06f09d" sha1="946868b4748d93c918bbe33c9b1a40a723dbf410" offset="0xc000" />
|
||||
<rom name="cd3526.vsm" offset="0x0000" size="0x4000" crc="58fae847" sha1="ee9c0f4dbd7101a1f8f276e60e77403d01a9b36f" />
|
||||
<rom name="cd3527.vsm" offset="0x4000" size="0x4000" crc="aa9f5334" sha1="a363aaf4fb9194995431a9dc1d78446ef510e7be" />
|
||||
<rom name="cd3528.vsm" offset="0x8000" size="0x4000" crc="e21919ea" sha1="b0edd35d5de29ac2f61a1dc7dc0a7fab20914fbe" />
|
||||
<rom name="cd3529.vsm" offset="0xc000" size="0x4000" crc="dc06f09d" sha1="946868b4748d93c918bbe33c9b1a40a723dbf410" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
@ -3783,6 +3783,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/aceex.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aci_boris.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aci_borisdpl.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aci_ggm.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/adm23.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/adm31.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/adm36.cpp",
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Juergen Buchmueller
|
||||
/*****************************************************************************
|
||||
*
|
||||
* z80.c
|
||||
* z80.cpp
|
||||
* Portable Z80 emulator V3.9
|
||||
*
|
||||
* TODO:
|
||||
@ -17,8 +17,9 @@
|
||||
* - OUT (C),0 outputs 0 on NMOS Z80, $FF on CMOS Z80
|
||||
* - SCF/CCF X/Y flags is ((flags | A) & 0x28) on SGS/SHARP/ZiLOG NMOS Z80,
|
||||
* (flags & A & 0x28) on NEC NMOS Z80, other models unknown.
|
||||
* However, people from the Speccy scene mention that SCF/CCF X/Y results
|
||||
* are inconsistant and may be influenced by I and R registers.
|
||||
* However, recent findings say that SCF/CCF X/Y results depend on whether
|
||||
* or not the previous instruction touched the flag register. And the exact
|
||||
* behaviour on NEC Z80 is still unknown.
|
||||
* This Z80 emulator assumes a ZiLOG NMOS model.
|
||||
*
|
||||
* Changes in 3.9:
|
||||
|
@ -1457,7 +1457,7 @@ ioport_field *ioport_port::field(ioport_value mask) const
|
||||
{
|
||||
// if we got the port, look for the field
|
||||
for (ioport_field &field : fields())
|
||||
if ((field.mask() & mask) != 0)
|
||||
if ((field.mask() & mask) != 0 && field.enabled())
|
||||
return &field;
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -44,10 +44,11 @@ public:
|
||||
|
||||
void boris(machine_config &config);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch) { update_reset(newval); }
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
@ -59,6 +60,7 @@ private:
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
void update_reset(ioport_value state);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(delay_display);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
@ -85,13 +87,18 @@ void boris_state::machine_start()
|
||||
save_item(NAME(m_4042));
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(boris_state::reset_switch)
|
||||
void boris_state::machine_reset()
|
||||
{
|
||||
update_reset(ioport("RESET")->read());
|
||||
}
|
||||
|
||||
void boris_state::update_reset(ioport_value state)
|
||||
{
|
||||
// reset switch is tied to MK3850 RESET pin
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// clear display
|
||||
if (newval)
|
||||
if (state)
|
||||
{
|
||||
for (int i = 0; i < 8; i++)
|
||||
m_delay_display[i]->adjust(attotime::zero, i);
|
||||
@ -211,7 +218,7 @@ static INPUT_PORTS_START( boris )
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, boris_state, reset_switch, nullptr) PORT_NAME("Reset Switch")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, boris_state, reset_switch, nullptr) PORT_NAME("Reset Switch")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
@ -181,7 +181,7 @@ static INPUT_PORTS_START( borisdpl )
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") // clear entry
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, borisdpl_state, reset_button, nullptr) PORT_NAME("Reset")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, borisdpl_state, reset_button, nullptr) PORT_NAME("Reset")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
412
src/mame/drivers/aci_ggm.cpp
Normal file
412
src/mame/drivers/aci_ggm.cpp
Normal file
@ -0,0 +1,412 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
|
||||
Applied Concepts Great Game Machine (GGM), electronic board game computer.
|
||||
2nd source distribution: Modular Game System (MGS), by Chafitz.
|
||||
|
||||
TODO:
|
||||
- what's VIA PB0 for? game toggles it once per irq
|
||||
- identify XTAL (2MHz CPU/VIA is correct, compared to video reference)
|
||||
- add display DP segment (unused in boris25), and what about AP segment?
|
||||
- verify cartridge pinout, right now assume A0-A14 (max known cart size is 24KB)
|
||||
- auto-switch keypad overlays? no need for it yet
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Hardware notes:
|
||||
- 6502A 2MHz (unknown XTAL, label "5-80"), SYP6522 VIA
|
||||
- 2KB RAM(4*HM472114AP-2), no ROM on main PCB
|
||||
- 2*74164 shift register, 3*6118P VFD driver
|
||||
- 8-digit 14seg VFD panel (same one as in Speak & Spell)
|
||||
- 5*4 keypad(unlabeled by default), 1-bit sound
|
||||
|
||||
Games are on separate cartridges, each came with a keypad overlay.
|
||||
There were also some standalone machines, eg. Morphy Encore, Odin Encore.
|
||||
|
||||
Known chess cartridges (*denotes not dumped):
|
||||
- Chess/Boris 2.5 (aka Sargon 2.5)
|
||||
- *Gruenfeld Edition - Master Chess Openings
|
||||
- *Morphy Edition - Master Chess (aka Sandy Edition?)
|
||||
- *Capablanca Edition - Master Chess Endgame
|
||||
- *Steinitz Edition-4 - Master Chess
|
||||
- *Monitor Edition - Master Kriegspiel
|
||||
|
||||
The opening/endgame cartridges are meant to be ejected/inserted while
|
||||
playing (put the power switch in "MEM" first).
|
||||
|
||||
Other games:
|
||||
- *Borchek Edition - Master Checkers
|
||||
- *Odin Edition - Master Reversi
|
||||
- *Las Vegas 21
|
||||
- *Wits End (unreleased?)
|
||||
- *Lunar Lander (unreleased?)
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "softlist.h"
|
||||
|
||||
// internal artwork
|
||||
#include "aci_ggm.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class ggm_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ggm_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_via(*this, "via"),
|
||||
m_dac(*this, "dac"),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_ca1_off(*this, "ca1_off"),
|
||||
m_delay_update(*this, "delay_update"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void ggm(machine_config &config);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch) { update_reset(newval); }
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<via6522_device> m_via;
|
||||
required_device<dac_bit_interface> m_dac;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
required_device<timer_device> m_ca1_off;
|
||||
required_device<timer_device> m_delay_update;
|
||||
required_ioport_array<6> m_inp_matrix;
|
||||
output_finder<8> m_out_digit;
|
||||
|
||||
void main_map(address_map &map);
|
||||
|
||||
void update_reset(ioport_value state);
|
||||
void update_display();
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(delay_update) { update_display(); }
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(ca1_off) { m_via->write_ca1(0); }
|
||||
|
||||
u8 m_digit_select;
|
||||
u16 m_digit_data;
|
||||
u8 m_shift_data;
|
||||
u8 m_shift_clock;
|
||||
u32 m_cart_mask;
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
|
||||
DECLARE_READ8_MEMBER(cartridge_r);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(select_w);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(shift_clock_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(shift_data_w);
|
||||
};
|
||||
|
||||
void ggm_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
m_digit_select = 0;
|
||||
m_digit_data = 0;
|
||||
m_shift_data = 0;
|
||||
m_shift_clock = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_digit_select));
|
||||
save_item(NAME(m_digit_data));
|
||||
save_item(NAME(m_shift_data));
|
||||
save_item(NAME(m_shift_clock));
|
||||
}
|
||||
|
||||
void ggm_state::machine_reset()
|
||||
{
|
||||
// it determines whether it's a cold boot or warm boot ("MEM" switch), with CA1
|
||||
if (~m_inp_matrix[4]->read() & 2)
|
||||
{
|
||||
m_via->write_ca1(1);
|
||||
m_ca1_off->adjust(attotime::from_msec(10));
|
||||
}
|
||||
else
|
||||
update_reset(1);
|
||||
}
|
||||
|
||||
void ggm_state::update_reset(ioport_value state)
|
||||
{
|
||||
// assume that the MEM switch puts the system in reset state (just like Boris)
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
if (state)
|
||||
{
|
||||
m_via->reset();
|
||||
|
||||
// clear display
|
||||
m_digit_data = 0;
|
||||
m_digit_select = 0xff;
|
||||
update_display();
|
||||
m_digit_select = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// cartridge
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(ggm_state, cartridge)
|
||||
{
|
||||
u32 size = m_cart->common_get_size("rom");
|
||||
m_cart_mask = ((1 << (31 - count_leading_zeros(size))) - 1) & 0x7fff;
|
||||
|
||||
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
|
||||
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
READ8_MEMBER(ggm_state::cartridge_r)
|
||||
{
|
||||
return m_cart->read_rom(offset & m_cart_mask);
|
||||
}
|
||||
|
||||
|
||||
// 6522 ports
|
||||
|
||||
void ggm_state::update_display()
|
||||
{
|
||||
u16 data = bitswap<16>(m_digit_data,15,7,2,11,10,3,1,9,6,14,12,5,0,4,13,8);
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
if (BIT(m_digit_select, i))
|
||||
m_out_digit[i] = data & 0x3fff;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ggm_state::shift_clock_w)
|
||||
{
|
||||
// shift display segment data on rising edge
|
||||
if (state && !m_shift_clock)
|
||||
m_digit_data = m_digit_data << 1 | (m_shift_data & 1);
|
||||
|
||||
m_shift_clock = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ggm_state::shift_data_w)
|
||||
{
|
||||
m_shift_data = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ggm_state::select_w)
|
||||
{
|
||||
// update display on rising edge, but delay a bit until shifter is ready
|
||||
if (~m_digit_select & data && !m_delay_update->enabled())
|
||||
m_delay_update->adjust(attotime::from_usec(50));
|
||||
|
||||
// input mux, digit select
|
||||
m_digit_select = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ggm_state::control_w)
|
||||
{
|
||||
// PB0: ?
|
||||
|
||||
// PB7: speaker out
|
||||
m_dac->write(BIT(data, 7));
|
||||
|
||||
}
|
||||
|
||||
READ8_MEMBER(ggm_state::input_r)
|
||||
{
|
||||
u16 data = 0;
|
||||
|
||||
// PB1-PB5: multiplexed inputs
|
||||
for (int i = 0; i < 4; i++)
|
||||
if (BIT(m_digit_select, i))
|
||||
data |= m_inp_matrix[i]->read();
|
||||
|
||||
data |= data >> 8;
|
||||
data = ~data << 1 & 0x3e;
|
||||
|
||||
|
||||
// PB6: hardware version
|
||||
return 0x81 | data | (m_inp_matrix[4]->read() << 6 & 0x40);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void ggm_state::main_map(address_map &map)
|
||||
{
|
||||
// external slot has potential bus conflict with RAM/VIA
|
||||
map(0x0000, 0x7fff).mirror(0x8000).r(FUNC(ggm_state::cartridge_r));
|
||||
map(0x0000, 0x07ff).ram().share("nvram");
|
||||
map(0x8000, 0x800f).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
#define OVERLAY(val) \
|
||||
PORT_CONDITION("IN.5", 0x01, EQUALS, val)
|
||||
|
||||
static INPUT_PORTS_START( overlay_boris ) // actually most of the Chess games have a similar overlay
|
||||
PORT_MODIFY("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A.1 / Pawn")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B.2 / Knight")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C.3 / Bishop")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D.4 / Rook")
|
||||
|
||||
PORT_MODIFY("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E.5 / Queen")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F.6 / King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G.7")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H.8")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
|
||||
|
||||
PORT_MODIFY("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_W) PORT_NAME("B/W")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_K) PORT_NAME("Rank")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_T) PORT_NAME("Time")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE")
|
||||
|
||||
PORT_MODIFY("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_H) PORT_NAME("Halt / Hint")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_S) PORT_NAME("Best")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_R) PORT_NAME("Restore")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x01) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ggm )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_X) PORT_NAME("Keypad 4-2")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_S) PORT_NAME("Keypad 3-2")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_D) PORT_NAME("Keypad 3-3")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_F) PORT_NAME("Keypad 3-4")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_W) PORT_NAME("Keypad 2-2")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_E) PORT_NAME("Keypad 2-3")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_R) PORT_NAME("Keypad 2-4")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_2) PORT_NAME("Keypad 1-2")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_3) PORT_NAME("Keypad 1-3")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_4) PORT_NAME("Keypad 1-4")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_C) PORT_NAME("Keypad 4-3")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_V) PORT_NAME("Keypad 4-4")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_G) PORT_NAME("Keypad 3-5")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_T) PORT_NAME("Keypad 2-5")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_5) PORT_NAME("Keypad 1-5")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_Z) PORT_NAME("Keypad 4-1")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_Q) PORT_NAME("Keypad 2-1")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_A) PORT_NAME("Keypad 3-1")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_1) PORT_NAME("Keypad 1-1")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) OVERLAY(0x00) PORT_CODE(KEYCODE_B) PORT_NAME("Keypad 4-5")
|
||||
|
||||
PORT_INCLUDE( overlay_boris )
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_CONFNAME( 0x01, 0x00, "Version" ) // factory-set
|
||||
PORT_CONFSETTING( 0x00, "GGS (Applied Concepts)" )
|
||||
PORT_CONFSETTING( 0x01, "MGS (Chafitz)" )
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, ggm_state, reset_switch, nullptr) PORT_NAME("Memory Switch")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_CONFNAME( 0x01, 0x01, "Keypad Overlay" )
|
||||
PORT_CONFSETTING( 0x00, "None" )
|
||||
PORT_CONFSETTING( 0x01, "Boris 2.5" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Configs
|
||||
******************************************************************************/
|
||||
|
||||
void ggm_state::ggm(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, 2000000);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ggm_state::main_map);
|
||||
|
||||
VIA6522(config, m_via, 2000000); // DDRA = 0xff, DDRB = 0x81
|
||||
m_via->writepa_handler().set(FUNC(ggm_state::select_w));
|
||||
m_via->writepb_handler().set(FUNC(ggm_state::control_w));
|
||||
m_via->readpb_handler().set(FUNC(ggm_state::input_r));
|
||||
m_via->irq_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
|
||||
m_via->cb1_handler().set(FUNC(ggm_state::shift_clock_w));
|
||||
m_via->cb2_handler().set(FUNC(ggm_state::shift_data_w));
|
||||
TIMER(config, m_ca1_off).configure_generic(FUNC(ggm_state::ca1_off));
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
/* video hardware */
|
||||
TIMER(config, m_delay_update).configure_generic(FUNC(ggm_state::delay_update));
|
||||
config.set_default_layout(layout_aci_ggm);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
|
||||
/* cartridge */
|
||||
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "ggm", "bin");
|
||||
m_cart->set_device_load(device_image_load_delegate(&ggm_state::device_image_load_cartridge, this));
|
||||
m_cart->set_must_be_loaded(true);
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("ggm");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( ggm )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
|
||||
// nothing here, ROM is on cartridge
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
|
||||
COMP( 1980, ggm, 0, 0, ggm, ggm, ggm_state, empty_init, "Applied Concepts", "Great Game Machine", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
@ -23,12 +23,15 @@ The electronic magnetic chessboard is the first of is kind. AVE later licensed
|
||||
it to Fidelity (see fidel_elite.cpp).
|
||||
ARB is a romless system, the program ROM is on a cartridge.
|
||||
|
||||
Known modules (*denotes not dumped yet):
|
||||
Known chess modules (*denotes not dumped yet):
|
||||
- Sargon 2.5
|
||||
- *Grand Master Series 3
|
||||
- *Grand Master Series 3.5
|
||||
- Grand Master Series 4.0
|
||||
|
||||
Other games:
|
||||
- *Avelan (checkers)
|
||||
|
||||
Newer modules included button label stickers for OPTIONS, Verify, Take Back, Clear.
|
||||
|
||||
Around 2012, Steve Braid(aka Trilobyte/Steve UK) started manufacturing ARB V2 boards
|
||||
|
@ -20,11 +20,17 @@ This is the world's 1st released dedicated chess computer. Oddly, the rows/colum
|
||||
are reversed: left to right is 1-8, bottom to top is A-H, eg. pawn from D2 to D4
|
||||
is 4B to 4D here.
|
||||
|
||||
PCB label PC-P-86, P179 C-2 7.77
|
||||
NEC 8080AF @ 2MHz(18MHz XTAL through a 8224)
|
||||
Everything goes via a NEC B8228, its special features are unused.
|
||||
NEC 2316A ROM(2KB), 4*2101AL RAM(0.5KB total)
|
||||
8255C for I/O, 4*7seg display + 2 extra leds, 12-key keypad
|
||||
The CC1 patent(US4235442) refers to a Hewlett Packard chess program. It was eventually
|
||||
found out that it was written for a HP-9810A by Alan A. Wray in 1974, and CC1 is very
|
||||
similar to it. Ron C. Nelson must have ported the algorithms to 8080 when he wrote
|
||||
his Altair 8800 chess program, and this is what made it into CC1.
|
||||
|
||||
CC1 hardware overview:
|
||||
- PCB label PC-P-86, P179 C-2 7.77
|
||||
- NEC 8080AF @ 2MHz(18MHz XTAL through a 8224)
|
||||
- Everything goes via a NEC B8228, its special features are unused.
|
||||
- NEC 2316A ROM(2KB), 4*2101AL RAM(0.5KB total)
|
||||
- 8255C for I/O, 4*7seg display + 2 extra leds, 12-key keypad
|
||||
|
||||
Chess Challenger 3 is on the same hardware, but with double ROM size, and they
|
||||
corrected the reversed chess notation. It was also offered as an upgrade to CC1.
|
||||
|
@ -6,7 +6,7 @@
|
||||
Интеллект-02 (Intellect-02) driver
|
||||
|
||||
This is a Soviet electronic board game console, a dozen or so cartridge games were
|
||||
made for it(can't say for certain how many released). PCB labels have prefix ДМП,
|
||||
announced(can't say for certain how many released). PCB labels have prefix ДМП,
|
||||
it's assumed to have been designed by НИИ БРЭА (SRI BREA). First shown in 1983,
|
||||
produced during around 1985-1992.
|
||||
|
||||
@ -218,7 +218,7 @@ WRITE8_MEMBER(intel02_state::control_w)
|
||||
if (!m_delay_update->enabled())
|
||||
m_delay_update->adjust(attotime::from_usec(15));
|
||||
|
||||
// d6: N/C
|
||||
// d6: N/C (it's a delay timer on CC3)
|
||||
|
||||
// d7: enable beeper
|
||||
m_beeper->set_state(BIT(data, 7));
|
||||
|
@ -7,8 +7,7 @@ Driver file to handle emulation of the Novag/Videomaster Chess Champion MK I
|
||||
Initial version by PeT mess@utanet.at 2000,2001.
|
||||
|
||||
TODO:
|
||||
- verify cncchess beeper duration/frequency
|
||||
- cncchess middle leds
|
||||
- cncchess sound is wrong, it should be a long dual-tone alarm sound
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
@ -89,17 +88,20 @@ public:
|
||||
m_beeper(*this, "beeper"),
|
||||
m_keypad(*this, "LINE%u", 1U),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_out_led(*this, "led%u", 0U),
|
||||
m_out_leda(*this, "led%ua", 0U)
|
||||
{ }
|
||||
|
||||
void cmpchess(machine_config &config);
|
||||
void mk1(machine_config &config);
|
||||
void cnc(machine_config &config);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch) { update_reset(newval); }
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
@ -109,6 +111,8 @@ private:
|
||||
required_ioport_array<4> m_keypad;
|
||||
required_device_array<timer_device, 4> m_delay_display;
|
||||
output_finder<4> m_out_digit;
|
||||
output_finder<4> m_out_led;
|
||||
output_finder<4> m_out_leda;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
@ -117,7 +121,9 @@ private:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; update_display(); }
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(delay_display);
|
||||
void clear_digit(int i);
|
||||
void update_display();
|
||||
void update_reset(ioport_value state);
|
||||
|
||||
DECLARE_READ8_MEMBER(beeper_r);
|
||||
DECLARE_WRITE8_MEMBER(input_w);
|
||||
@ -139,6 +145,8 @@ void mk1_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_digit.resolve();
|
||||
m_out_led.resolve();
|
||||
m_out_leda.resolve();
|
||||
|
||||
// zerofill
|
||||
m_inp_mux = 0;
|
||||
@ -153,17 +161,30 @@ void mk1_state::machine_start()
|
||||
save_item(NAME(m_blink));
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(mk1_state::reset_switch)
|
||||
void mk1_state::machine_reset()
|
||||
{
|
||||
update_reset(ioport("RESET")->read());
|
||||
}
|
||||
|
||||
void mk1_state::clear_digit(int i)
|
||||
{
|
||||
// clear digit + connected leds
|
||||
m_out_digit[i] = 0;
|
||||
m_out_led[i] = 0;
|
||||
m_out_leda[i] = 0;
|
||||
}
|
||||
|
||||
void mk1_state::update_reset(ioport_value state)
|
||||
{
|
||||
// reset switch is tied to F3850 RESET pin
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// clear display
|
||||
if (newval)
|
||||
if (state)
|
||||
{
|
||||
m_digit_select = 0xff;
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_out_digit[i] = 0;
|
||||
clear_digit(i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -179,7 +200,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk1_state::delay_display)
|
||||
{
|
||||
// clear digits if inactive
|
||||
if (BIT(m_digit_select, param))
|
||||
m_out_digit[param] = 0;
|
||||
clear_digit(param);
|
||||
}
|
||||
|
||||
void mk1_state::update_display()
|
||||
@ -189,11 +210,15 @@ void mk1_state::update_display()
|
||||
{
|
||||
if (!BIT(m_digit_select, i))
|
||||
{
|
||||
// display panel goes into automated blink mode if DP segment is held high
|
||||
// and DP segment itself only appears to be active if no other segments are
|
||||
u8 mask = (m_digit_data == 1) ? 0x80 : 0x7f;
|
||||
mask = (m_blink && m_digit_data & 1) ? 0 : mask;
|
||||
m_out_digit[i] = bitswap<8>(m_digit_data,0,2,1,3,4,5,6,7) & mask;
|
||||
// display panel goes into automated blink mode if DP segment is held high,
|
||||
// and DP segment itself by default only appears to be active if no other segments are
|
||||
u8 dmask = (m_digit_data == 1) ? 0x80 : 0x7f;
|
||||
u8 bmask = (m_blink && m_digit_data & 1) ? 0 : 0xff;
|
||||
m_out_digit[i] = bitswap<8>(m_digit_data,0,2,1,3,4,5,6,7) & dmask & bmask;
|
||||
|
||||
// output led separately too
|
||||
m_out_led[i] = (m_out_digit[i] & 0x80) ? 1 : 0;
|
||||
m_out_leda[i] = m_digit_data & bmask & 1; // for ignoring dmask above
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -207,7 +232,7 @@ READ8_MEMBER(mk1_state::beeper_r)
|
||||
if (!machine().side_effects_disabled() && m_beeper != nullptr)
|
||||
{
|
||||
m_beeper->set_state(1);
|
||||
m_beeper_off->adjust(attotime::from_msec(50)); // guessed
|
||||
m_beeper_off->adjust(attotime::from_msec(50)); // wrong, see TODO
|
||||
}
|
||||
|
||||
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
|
||||
@ -318,7 +343,7 @@ static INPUT_PORTS_START( cmpchess )
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8 / ep") // enter piece(position)
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset Switch") // L.S. switch on the MK I
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset Switch") // L.S. switch on the MK I
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( cncchess )
|
||||
@ -347,7 +372,7 @@ static INPUT_PORTS_START( cncchess )
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("H / GO")
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -397,7 +422,7 @@ void mk1_state::cnc(machine_config &config)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
BEEP(config, m_beeper, 2000); // guessed
|
||||
BEEP(config, m_beeper, 2000); // wrong, see TODO
|
||||
m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
TIMER(config, "beeper_off").configure_generic(FUNC(mk1_state::beeper_off));
|
||||
}
|
||||
@ -436,4 +461,4 @@ ROM_END
|
||||
CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, mk1_state, empty_init, "Data Cash Systems", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1978, ccmk1, cmpchess, 0, mk1, cmpchess, mk1_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
CONS( 1979, cncchess, 0, 0, cnc, cncchess, mk1_state, empty_init, "Conic", "Computer Chess (Conic)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, cncchess, 0, 0, cnc, cncchess, mk1_state, empty_init, "Conic", "Computer Chess (Conic)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
294
src/mame/layout/aci_ggm.lay
Normal file
294
src/mame/layout/aci_ggm.lay
Normal file
@ -0,0 +1,294 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="black"><rect><color red="0.16" green="0.16" blue="0.16" /></rect></element>
|
||||
<element name="disk_white"><disk><color red="0.73" green="0.73" blue="0.73" /></disk></element>
|
||||
<element name="brown"><rect><color red="0.25" green="0.1" blue="0.05" /></rect></element>
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
||||
<element name="seg_disk" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
|
||||
</element>
|
||||
<element name="seg_rect" defstate="0">
|
||||
<rect state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></rect>
|
||||
<rect state="1"><color red="0.2" green="1.0" blue="0.85" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="reset" defstate="0">
|
||||
<text string=" ">
|
||||
<bounds x="0.0" y="0.0" width="1.8" height="3.7" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</text>
|
||||
<disk state="0">
|
||||
<bounds x="0.0" y="1.9" width="1.8" height="1.8" />
|
||||
<color red="0.4" green="0.4" blue="0.4" />
|
||||
</disk>
|
||||
<disk state="1">
|
||||
<bounds x="0.0" y="0.0" width="1.8" height="1.8" />
|
||||
<color red="0.4" green="0.4" blue="0.4" />
|
||||
</disk>
|
||||
</element>
|
||||
|
||||
<element name="hl" defstate="0">
|
||||
<text string=" ">
|
||||
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</text>
|
||||
<rect state="1">
|
||||
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="text_r1"><text string="MEM"><color red="0.3" green="0.3" blue="0.3" /></text></element>
|
||||
<element name="text_r2"><text string="ON"><color red="0.3" green="0.3" blue="0.3" /></text></element>
|
||||
|
||||
<element name="text_boris01">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="RESTORE"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris02">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="G.7"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris03">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="H.8"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris04">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="9"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris05">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="CE"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris06a">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="HALT /" align="1"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris06b">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="HINT" align="1"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris07">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="D.4"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris08">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="E.5"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris09">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="F.6"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris10">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="TIME"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris11">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string=".BEST"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris12">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="A.1"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris13">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="B.2"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris14">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="C.3"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris15">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="RANK"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris16">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="LEVEL"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris17">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="0"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris18">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="-"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris19">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="B/W"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
<element name="text_boris20">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="ENTER"><color red="0.8" green="0.7" blue="0.4" /></text>
|
||||
</element>
|
||||
|
||||
<element name="text_borisp">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[P]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_borisn">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[N]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_borisb">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[B]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_borisr">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[R]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_borisq">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[Q]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_borisk">
|
||||
<rect><color red="0.25" green="0.1" blue="0.05" /></rect>
|
||||
<text string="[K]"><color red="0.8" green="0.1" blue="0.15" /></text>
|
||||
</element>
|
||||
|
||||
<!-- groups -->
|
||||
|
||||
<group name="display">
|
||||
<bounds x="0" y="0" width="88" height="19" />
|
||||
|
||||
<repeat count="8">
|
||||
<param name="i" start="7" increment="-1" />
|
||||
<param name="digit_x" start="0" increment="11" />
|
||||
<param name="dp_x" start="8.8" increment="11" />
|
||||
<param name="ap1_x" start="10.1" increment="11" />
|
||||
<param name="ap2_x" start="10.5" increment="11" />
|
||||
<param name="dot_x" start="3.5" increment="11" />
|
||||
|
||||
<bezel name="digit~i~" element="digit"><bounds x="~digit_x~" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="~i~.14" element="seg_disk"><bounds x="~dp_x~" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_disk"><bounds x="~ap1_x~" y="0" width="1" height="1.6" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_rect"><bounds x="~ap2_x~" y="0" width="0.7" height="3.5" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="~dot_x~" y="17.1" width="1.9" height="1.9" /></bezel>
|
||||
</repeat>
|
||||
</group>
|
||||
|
||||
<group name="buttons_base">
|
||||
<bounds x="0" y="0" width="19.5" height="13.5" />
|
||||
|
||||
<repeat count="4">
|
||||
<param name="y" start="0" increment="3.5" />
|
||||
<repeat count="5">
|
||||
<param name="x" start="0" increment="4" />
|
||||
<bezel element="~basecolor~"><bounds x="~x~" y="~y~" width="3.5" height="3" /></bezel>
|
||||
</repeat>
|
||||
</repeat>
|
||||
</group>
|
||||
|
||||
<group name="buttons_boris">
|
||||
<bounds x="0" y="0" width="19.5" height="13.5" />
|
||||
|
||||
<bezel element="text_boris01"><bounds x="0.1" y="0.9" width="3.3" height="1" /></bezel>
|
||||
<bezel element="text_boris02"><bounds x="4.1" y="0.01" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris03"><bounds x="8.1" y="0.01" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris04"><bounds x="12.1" y="0.4" width="3.3" height="1.9" /></bezel>
|
||||
<bezel element="text_boris05"><bounds x="16.1" y="0.6" width="3.3" height="1.5" /></bezel>
|
||||
|
||||
<bezel element="text_boris06a"><bounds x="0.6" y="4.0" width="2.8" height="1" /></bezel>
|
||||
<bezel element="text_boris06b"><bounds x="0.6" y="5.0" width="2.8" height="1" /></bezel>
|
||||
<bezel element="text_boris07"><bounds x="4.1" y="3.51" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris08"><bounds x="8.1" y="3.51" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris09"><bounds x="12.1" y="3.51" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris10"><bounds x="16.1" y="4.4" width="3.3" height="1" /></bezel>
|
||||
|
||||
<bezel element="text_boris11"><bounds x="0.1" y="7.9" width="3.3" height="1" /></bezel>
|
||||
<bezel element="text_boris12"><bounds x="4.1" y="7.01" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris13"><bounds x="8.1" y="7.01" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris14"><bounds x="12.1" y="7.01" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris15"><bounds x="16.1" y="7.9" width="3.3" height="1" /></bezel>
|
||||
|
||||
<bezel element="text_boris16"><bounds x="0.1" y="11.4" width="3.3" height="1" /></bezel>
|
||||
<bezel element="text_boris17"><bounds x="4.1" y="10.9" width="3.3" height="1.9" /></bezel>
|
||||
<bezel element="text_boris18"><bounds x="8.1" y="10.9" width="3.3" height="1.9" /></bezel>
|
||||
<bezel element="text_boris19"><bounds x="12.1" y="11.1" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_boris20"><bounds x="16.1" y="11.4" width="3.3" height="1" /></bezel>
|
||||
|
||||
<bezel element="text_borisp"><bounds x="4.1" y="8.3" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_borisn"><bounds x="8.1" y="8.3" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_borisb"><bounds x="12.1" y="8.3" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_borisr"><bounds x="4.1" y="4.8" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_borisq"><bounds x="8.1" y="4.8" width="3.3" height="1.5" /></bezel>
|
||||
<bezel element="text_borisk"><bounds x="12.1" y="4.8" width="3.3" height="1.5" /></bezel>
|
||||
</group>
|
||||
|
||||
<group name="buttons_click">
|
||||
<bounds x="0" y="0" width="19.5" height="13.5" />
|
||||
|
||||
<bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="0" y="0" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4" y="0" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="8" y="0" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="12" y="0" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="16" y="0" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="0" y="3.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="4" y="3.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="8" y="3.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="12" y="3.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="16" y="3.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="0" y="7" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="4" y="7" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="8" y="7" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="12" y="7" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="16" y="7" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="0" y="10.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="4" y="10.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="8" y="10.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="12" y="10.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
<bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="16" y="10.5" width="3.5" height="3" /><color alpha="0.22" /></bezel>
|
||||
</group>
|
||||
|
||||
<group name="mem_switch">
|
||||
<bounds x="0" y="0" width="6" height="6.4" />
|
||||
|
||||
<bezel element="black"><bounds x="2.5" y="2" width="1" height="2.5" /></bezel>
|
||||
<bezel element="text_r1"><bounds x="0" y="0" width="6" height="1.8" /></bezel>
|
||||
<bezel element="text_r2"><bounds x="0" y="4.6" width="6" height="1.8" /></bezel>
|
||||
<bezel element="reset" inputtag="IN.4" inputmask="0x02"><bounds x="2.345" y="1.9" width="1.31" height="2.7" /></bezel>
|
||||
</group>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout, Boris 2.5">
|
||||
<bounds left="-5" right="104" top="-2" bottom="93" />
|
||||
<group ref="display"><bounds x="0" y="0" width="88" height="19" /></group>
|
||||
<bezel element="black"><bounds x="-6" y="23" width="111" height="1.5" /></bezel>
|
||||
|
||||
<param name="basecolor" value="brown" />
|
||||
<group ref="buttons_base"><bounds x="0" y="30" width="88" height="60.92" /></group>
|
||||
<group ref="buttons_boris"><bounds x="0" y="30" width="88" height="60.92" /></group>
|
||||
<group ref="buttons_click"><bounds x="0" y="30" width="88" height="60.92" /></group>
|
||||
<group ref="mem_switch"><bounds x="87" y="28" width="18" height="19.2" /></group>
|
||||
</view>
|
||||
|
||||
<view name="Internal Layout, No Overlay">
|
||||
<bounds left="-5" right="104" top="-2" bottom="93" />
|
||||
<group ref="display"><bounds x="0" y="0" width="88" height="19" /></group>
|
||||
<bezel element="black"><bounds x="-6" y="23" width="111" height="1.5" /></bezel>
|
||||
|
||||
<param name="basecolor" value="brown" />
|
||||
<group ref="buttons_base"><bounds x="0" y="30" width="88" height="60.92" /></group>
|
||||
<group ref="buttons_click"><bounds x="0" y="30" width="88" height="60.92" /></group>
|
||||
<group ref="mem_switch"><bounds x="87" y="28" width="18" height="19.2" /></group>
|
||||
</view>
|
||||
|
||||
</mamelayout>
|
@ -195,8 +195,12 @@
|
||||
<bezel name="digit1" element="digit"><bounds x="31.3" y="23" width="3" height="4.5" /></bezel>
|
||||
<bezel name="digit2" element="digit"><bounds x="36.3" y="23" width="3" height="4.5" /></bezel>
|
||||
<bezel name="digit3" element="digit"><bounds x="39.3" y="23" width="3" height="4.5" /></bezel>
|
||||
<bezel name="ledx" element="led"><bounds x="35.15" y="24.0" width="0.45" height="0.45" /></bezel>
|
||||
<bezel name="ledx" element="led"><bounds x="35.0" y="26.05" width="0.45" height="0.45" /></bezel>
|
||||
<bezel element="disk_blackb"><bounds x="30.82" y="27.0" width="0.55" height="0.55" /></bezel>
|
||||
<bezel element="disk_blackb"><bounds x="33.82" y="27.0" width="0.55" height="0.55" /></bezel>
|
||||
<bezel element="disk_blackb"><bounds x="38.82" y="27.0" width="0.55" height="0.55" /></bezel>
|
||||
<bezel element="disk_blackb"><bounds x="41.82" y="27.0" width="0.55" height="0.55" /></bezel>
|
||||
<bezel name="led1a" element="led"><bounds x="35.15" y="24.0" width="0.45" height="0.45" /></bezel>
|
||||
<bezel name="led0a" element="led"><bounds x="35.0" y="26.05" width="0.45" height="0.45" /></bezel>
|
||||
<bezel element="red"><bounds x="25.3" y="22" width="20" height="6.5" /><color alpha="0.15" /></bezel>
|
||||
|
||||
<!-- button panel -->
|
||||
@ -270,7 +274,7 @@
|
||||
<bezel element="hl" inputtag="LINE2" inputmask="0x10"><bounds x="48" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
|
||||
|
||||
<bezel element="orange"><bounds x="10.8" y="37.15" width="4.5" height="2.6" /></bezel>
|
||||
<bezel element="text_br"><bounds x="10.9" y="37.6" width="4.3" height="1.5" /></bezel>
|
||||
<bezel element="text_br"><bounds x="10.9" y="37.65" width="4.3" height="1.5" /></bezel>
|
||||
<bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="10.8" y="37.15" width="4.5" height="2.6" /><color alpha="0.25" /></bezel>
|
||||
|
||||
</view>
|
||||
|
@ -3,8 +3,6 @@
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<!-- note: TI's alphanumeric 14seg digits look different from MAME's default, most notably the right half is wider -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
@ -3,25 +3,22 @@
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<!-- note: TI's alphanumeric 14seg digits look different from MAME's default, most notably the right half is wider -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
||||
<!-- add our own for DP(display point) and the custom AP(apostrophe) segments -->
|
||||
|
||||
<element name="lamp_dp" defstate="0">
|
||||
<element name="seg_disk" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
|
||||
</element>
|
||||
<element name="lamp_ap" defstate="0">
|
||||
<element name="seg_rect" defstate="0">
|
||||
<rect state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></rect>
|
||||
<rect state="1"><color red="0.2" green="1.0" blue="0.85" /></rect>
|
||||
</element>
|
||||
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
@ -29,37 +26,18 @@
|
||||
|
||||
<!-- 8 digits -->
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="0.14" element="lamp_dp"><bounds x="9" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="0.15" element="lamp_ap"><bounds x="10.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
<repeat count="8">
|
||||
<param name="i" start="0" increment="1" />
|
||||
<param name="digit_x" start="0" increment="11" />
|
||||
<param name="dp_x" start="8.8" increment="11" />
|
||||
<param name="ap1_x" start="10.1" increment="11" />
|
||||
<param name="ap2_x" start="10.5" increment="11" />
|
||||
|
||||
<bezel name="digit1" element="digit"><bounds x="11" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="1.14" element="lamp_dp"><bounds x="20" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="1.15" element="lamp_ap"><bounds x="21.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit2" element="digit"><bounds x="22" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="2.14" element="lamp_dp"><bounds x="31" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="2.15" element="lamp_ap"><bounds x="32.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit3" element="digit"><bounds x="33" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="3.14" element="lamp_dp"><bounds x="42" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="3.15" element="lamp_ap"><bounds x="43.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit4" element="digit"><bounds x="44" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="4.14" element="lamp_dp"><bounds x="53" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="4.15" element="lamp_ap"><bounds x="54.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit5" element="digit"><bounds x="55" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="5.14" element="lamp_dp"><bounds x="64" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="5.15" element="lamp_ap"><bounds x="65.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit6" element="digit"><bounds x="66" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="6.14" element="lamp_dp"><bounds x="75" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="6.15" element="lamp_ap"><bounds x="76.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit7" element="digit"><bounds x="77" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="7.14" element="lamp_dp"><bounds x="86" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="7.15" element="lamp_ap"><bounds x="87.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
<bezel name="digit~i~" element="digit"><bounds x="~digit_x~" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="~i~.14" element="seg_disk"><bounds x="~dp_x~" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_disk"><bounds x="~ap1_x~" y="0" width="1" height="1.6" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_rect"><bounds x="~ap2_x~" y="0" width="0.7" height="3.5" /></bezel>
|
||||
</repeat>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
@ -3,8 +3,6 @@
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<!-- note: TI's alphanumeric 14seg digits look different from MAME's default, most notably the right half is wider -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
@ -3,21 +3,17 @@
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<!-- file is copied from, and identical to snspell.lay -->
|
||||
|
||||
<!-- note: TI's alphanumeric 14seg digits look different from MAME's default, most notably the right half is wider -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
||||
<!-- add our own for DP(display point) and the custom AP(apostrophe) segments -->
|
||||
|
||||
<element name="lamp_dp" defstate="0">
|
||||
<element name="seg_disk" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
|
||||
</element>
|
||||
<element name="lamp_ap" defstate="0">
|
||||
<element name="seg_rect" defstate="0">
|
||||
<rect state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></rect>
|
||||
<rect state="1"><color red="0.2" green="1.0" blue="0.85" /></rect>
|
||||
</element>
|
||||
@ -26,41 +22,22 @@
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="0" right="89" top="0" bottom="15" />
|
||||
<bounds left="0" right="88.5" top="0" bottom="15" />
|
||||
|
||||
<!-- 8 digits -->
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="0.14" element="lamp_dp"><bounds x="9" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="0.15" element="lamp_ap"><bounds x="10.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
<repeat count="8">
|
||||
<param name="i" start="0" increment="1" />
|
||||
<param name="digit_x" start="0" increment="11" />
|
||||
<param name="dp_x" start="8.8" increment="11" />
|
||||
<param name="ap1_x" start="10.1" increment="11" />
|
||||
<param name="ap2_x" start="10.5" increment="11" />
|
||||
|
||||
<bezel name="digit1" element="digit"><bounds x="11" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="1.14" element="lamp_dp"><bounds x="20" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="1.15" element="lamp_ap"><bounds x="21.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit2" element="digit"><bounds x="22" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="2.14" element="lamp_dp"><bounds x="31" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="2.15" element="lamp_ap"><bounds x="32.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit3" element="digit"><bounds x="33" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="3.14" element="lamp_dp"><bounds x="42" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="3.15" element="lamp_ap"><bounds x="43.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit4" element="digit"><bounds x="44" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="4.14" element="lamp_dp"><bounds x="53" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="4.15" element="lamp_ap"><bounds x="54.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit5" element="digit"><bounds x="55" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="5.14" element="lamp_dp"><bounds x="64" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="5.15" element="lamp_ap"><bounds x="65.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit6" element="digit"><bounds x="66" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="6.14" element="lamp_dp"><bounds x="75" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="6.15" element="lamp_ap"><bounds x="76.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
|
||||
<bezel name="digit7" element="digit"><bounds x="77" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="7.14" element="lamp_dp"><bounds x="86" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="7.15" element="lamp_ap"><bounds x="87.5" y="0" width="0.5" height="3.5" /></bezel>
|
||||
<bezel name="digit~i~" element="digit"><bounds x="~digit_x~" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="~i~.14" element="seg_disk"><bounds x="~dp_x~" y="13.5" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_disk"><bounds x="~ap1_x~" y="0" width="1" height="1.6" /></bezel>
|
||||
<bezel name="~i~.15" element="seg_rect"><bounds x="~ap2_x~" y="0" width="0.7" height="3.5" /></bezel>
|
||||
</repeat>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
@ -879,6 +879,9 @@ borisa //
|
||||
@source:aci_borisdpl.cpp
|
||||
borisdpl //
|
||||
|
||||
@source:aci_ggm.cpp
|
||||
ggm
|
||||
|
||||
@source:acommand.cpp
|
||||
acommand // (c) 1990
|
||||
|
||||
|
@ -18,6 +18,7 @@ acd.cpp
|
||||
aceex.cpp
|
||||
aci_boris.cpp
|
||||
aci_borisdpl.cpp
|
||||
aci_ggm.cpp
|
||||
acrnsys1.cpp
|
||||
acrnsys.cpp
|
||||
acvirus.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user