diff options
author | hap <happppp@users.noreply.github.com> | 2019-04-15 00:56:46 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2019-04-15 00:59:26 +0200 |
commit | 8b018d198c8d6986e3f988ad087c87e080a08868 (patch) | |
tree | 2456f7d8c901db0d768143bd51b9b436f3b801f7 | |
parent | b5d3b29d1604bd12ced8014f20cad2126f71a098 (diff) |
New working machine added
---------
Great Game Machine [hap, bataais]
-rw-r--r-- | hash/arb.xml | 18 | ||||
-rw-r--r-- | hash/fidel_scc.xml | 6 | ||||
-rw-r--r-- | hash/ggm.xml | 22 | ||||
-rw-r--r-- | hash/lantutor.xml | 40 | ||||
-rw-r--r-- | scripts/target/mame/mess.lua | 1 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.cpp | 7 | ||||
-rw-r--r-- | src/emu/ioport.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/aci_boris.cpp | 17 | ||||
-rw-r--r-- | src/mame/drivers/aci_borisdpl.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/aci_ggm.cpp | 412 | ||||
-rw-r--r-- | src/mame/drivers/ave_arb.cpp | 5 | ||||
-rw-r--r-- | src/mame/drivers/fidel_cc1.cpp | 16 | ||||
-rw-r--r-- | src/mame/drivers/intellect02.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/mk1.cpp | 63 | ||||
-rw-r--r-- | src/mame/layout/aci_ggm.lay | 294 | ||||
-rw-r--r-- | src/mame/layout/cncchess.lay | 10 | ||||
-rw-r--r-- | src/mame/layout/snread.lay | 2 | ||||
-rw-r--r-- | src/mame/layout/snspell.lay | 50 | ||||
-rw-r--r-- | src/mame/layout/snspellsp.lay | 2 | ||||
-rw-r--r-- | src/mame/layout/spellb.lay | 53 | ||||
-rw-r--r-- | src/mame/mame.lst | 3 | ||||
-rw-r--r-- | src/mame/mess.flt | 1 |
22 files changed, 880 insertions, 150 deletions
diff --git a/hash/arb.xml b/hash/arb.xml index 591e97ad15a..e3d303cdd87 100644 --- a/hash/arb.xml +++ b/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> diff --git a/hash/fidel_scc.xml b/hash/fidel_scc.xml index 26f8155a46e..69f0807d57e 100644 --- a/hash/fidel_scc.xml +++ b/hash/fidel_scc.xml @@ -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> diff --git a/hash/ggm.xml b/hash/ggm.xml new file mode 100644 index 00000000000..eddd1aa0432 --- /dev/null +++ b/hash/ggm.xml @@ -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> diff --git a/hash/lantutor.xml b/hash/lantutor.xml index 46710493b2b..859a67f9b66 100644 --- a/hash/lantutor.xml +++ b/hash/lantutor.xml @@ -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> diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index c5beded26ca..43e756cd296 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -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", diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp index 3454f6773e3..8e1e29a8a1f 100644 --- a/src/devices/cpu/z80/z80.cpp +++ b/src/devices/cpu/z80/z80.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: diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index a589abe982e..b2208523b0c 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -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; } diff --git a/src/mame/drivers/aci_boris.cpp b/src/mame/drivers/aci_boris.cpp index 457a9807166..c369acc4787 100644 --- a/src/mame/drivers/aci_boris.cpp +++ b/src/mame/drivers/aci_boris.cpp @@ -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 diff --git a/src/mame/drivers/aci_borisdpl.cpp b/src/mame/drivers/aci_borisdpl.cpp index d2210d63df8..d54104c1097 100644 --- a/src/mame/drivers/aci_borisdpl.cpp +++ b/src/mame/drivers/aci_borisdpl.cpp @@ -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 diff --git a/src/mame/drivers/aci_ggm.cpp b/src/mame/drivers/aci_ggm.cpp new file mode 100644 index 00000000000..bd24f9ad525 --- /dev/null +++ b/src/mame/drivers/aci_ggm.cpp @@ -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 ) diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp index 638c5533549..8e75c684d9a 100644 --- a/src/mame/drivers/ave_arb.cpp +++ b/src/mame/drivers/ave_arb.cpp @@ -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 diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp index 8bd68cf38b8..53d06cc985e 100644 --- a/src/mame/drivers/fidel_cc1.cpp +++ b/src/mame/drivers/fidel_cc1.cpp @@ -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. diff --git a/src/mame/drivers/intellect02.cpp b/src/mame/drivers/intellect02.cpp index 019a46b244b..a87a0367b02 100644 --- a/src/mame/drivers/intellect02.cpp +++ b/src/mame/drivers/intellect02.cpp @@ -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)); diff --git a/src/mame/drivers/mk1.cpp b/src/mame/drivers/mk1.cpp index 4fa70565fed..a5650714cc9 100644 --- a/src/mame/drivers/mk1.cpp +++ b/src/mame/drivers/mk1.cpp @@ -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 ) diff --git a/src/mame/layout/aci_ggm.lay b/src/mame/layout/aci_ggm.lay new file mode 100644 index 00000000000..7894cc36315 --- /dev/null +++ b/src/mame/layout/aci_ggm.lay @@ -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> diff --git a/src/mame/layout/cncchess.lay b/src/mame/layout/cncchess.lay index 0546d2e8a0e..432c6146365 100644 --- a/src/mame/layout/cncchess.lay +++ b/src/mame/layout/cncchess.lay @@ -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> diff --git a/src/mame/layout/snread.lay b/src/mame/layout/snread.lay index 23b285b751c..26da6cf2c80 100644 --- a/src/mame/layout/snread.lay +++ b/src/mame/layout/snread.lay @@ -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> diff --git a/src/mame/layout/snspell.lay b/src/mame/layout/snspell.lay index 78a50fea709..752e81ab234 100644 --- a/src/mame/layout/snspell.lay +++ b/src/mame/layout/snspell.lay @@ -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> - - <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> + <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="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> diff --git a/src/mame/layout/snspellsp.lay b/src/mame/layout/snspellsp.lay index a13712b7ea1..7e9b48a05e5 100644 --- a/src/mame/layout/snspellsp.lay +++ b/src/mame/layout/snspellsp.lay @@ -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> diff --git a/src/mame/layout/spellb.lay b/src/mame/layout/spellb.lay index 0398108caff..752e81ab234 100644 --- a/src/mame/layout/spellb.lay +++ b/src/mame/layout/spellb.lay @@ -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> - - <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> + <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="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> diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d062a8aa3fb..ce99ae93328 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -879,6 +879,9 @@ borisa // @source:aci_borisdpl.cpp borisdpl // +@source:aci_ggm.cpp +ggm + @source:acommand.cpp acommand // (c) 1990 diff --git a/src/mame/mess.flt b/src/mame/mess.flt index c874689ea3f..c4c4621cac5 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -18,6 +18,7 @@ acd.cpp aceex.cpp aci_boris.cpp aci_borisdpl.cpp +aci_ggm.cpp acrnsys1.cpp acrnsys.cpp acvirus.cpp |