New working machine added

---------
Great Game Machine [hap, bataais]
This commit is contained in:
hap 2019-04-15 00:56:46 +02:00
parent b5d3b29d16
commit 8b018d198c
22 changed files with 878 additions and 148 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -879,6 +879,9 @@ borisa //
@source:aci_borisdpl.cpp
borisdpl //
@source:aci_ggm.cpp
ggm
@source:acommand.cpp
acommand // (c) 1990

View File

@ -18,6 +18,7 @@ acd.cpp
aceex.cpp
aci_boris.cpp
aci_borisdpl.cpp
aci_ggm.cpp
acrnsys1.cpp
acrnsys.cpp
acvirus.cpp