diff options
author | couriersud <couriersud@arcor.de> | 2015-02-27 18:09:54 +0100 |
---|---|---|
committer | couriersud <couriersud@arcor.de> | 2015-02-27 18:09:54 +0100 |
commit | dfbb61232cebe6f3e5a00c2d8b916874d8e99eac (patch) | |
tree | 5b9c9f68d830df959acd170da003d4d7e3312ee6 | |
parent | 218c388088596393c94bcca6257993f65f904bd8 (diff) | |
parent | 7e79ecf59de0266f68d94489dd5266b495c89624 (diff) |
Merge branch 'master' of https://github.com/mamedev/mame.git
-rw-r--r-- | src/build/makelist.py | 1 | ||||
-rw-r--r-- | src/build/verinfo.py | 15 | ||||
-rw-r--r-- | src/emu/drivers/xtal.h | 1 | ||||
-rw-r--r-- | src/mame/drivers/neogeo.c | 14 | ||||
-rw-r--r-- | src/mame/drivers/neogeo_noslot.c | 186 | ||||
-rw-r--r-- | src/mame/drivers/opwolf.c | 5 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 | ||||
-rw-r--r-- | src/mess/drivers/cnsector.c | 254 | ||||
-rw-r--r-- | src/mess/drivers/elecdet.c | 313 | ||||
-rw-r--r-- | src/mess/drivers/hh_tms1k.c | 1543 | ||||
-rw-r--r-- | src/mess/drivers/hh_ucom4.c | 226 | ||||
-rw-r--r-- | src/mess/drivers/mathmagi.c | 273 | ||||
-rw-r--r-- | src/mess/drivers/merlin.c | 199 | ||||
-rw-r--r-- | src/mess/drivers/splitsec.c | 363 | ||||
-rw-r--r-- | src/mess/drivers/starwbc.c | 297 | ||||
-rw-r--r-- | src/mess/drivers/stopthie.c | 313 | ||||
-rw-r--r-- | src/mess/drivers/tandy12.c | 229 | ||||
-rw-r--r-- | src/mess/drivers/unk3403.c | 211 | ||||
-rw-r--r-- | src/mess/layout/cnsector.lay | 8 | ||||
-rw-r--r-- | src/mess/layout/tmpacman.lay | 186 | ||||
-rw-r--r-- | src/mess/mess.lst | 1 | ||||
-rw-r--r-- | src/mess/mess.mak | 35 |
22 files changed, 2089 insertions, 2585 deletions
diff --git a/src/build/makelist.py b/src/build/makelist.py index d58abce0c1d..190f0aad9e3 100644 --- a/src/build/makelist.py +++ b/src/build/makelist.py @@ -3,7 +3,6 @@ from __future__ import with_statement import sys -import os drivlist = [] diff --git a/src/build/verinfo.py b/src/build/verinfo.py index b6bb2f65e80..dfd4cc2f889 100644 --- a/src/build/verinfo.py +++ b/src/build/verinfo.py @@ -2,7 +2,6 @@ from __future__ import with_statement -import os import re import sys @@ -85,13 +84,13 @@ else: if build == "mess": # MESS - author = "MESS Team"; - comments = "Multi Emulation Super System"; - company_name = "MESS Team"; - file_description = "Multi Emulation Super System"; - internal_name = "MESS"; - original_filename = "MESS"; - product_name = "MESS"; + author = "MESS Team" + comments = "Multi Emulation Super System" + company_name = "MESS Team" + file_description = "Multi Emulation Super System" + internal_name = "MESS" + original_filename = "MESS" + product_name = "MESS" bundle_identifier = "org.mamedev.mess" elif build == "ume": # UME diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index 7487c434db1..495db259a71 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -233,6 +233,7 @@ enum XTAL_384kHz = 384000, /* Commonly used for driving OKI MSM5205 */ XTAL_400kHz = 400000, /* OKI MSM5205 on Great Swordman h/w */ + XTAL_430kHz = 430000, XTAL_455kHz = 455000, /* OKI MSM5205 on Gladiator h/w */ XTAL_512kHz = 512000, /* Toshiba TC8830F */ XTAL_640kHz = 640000, /* NEC UPD7759, Texas Instruments Speech Chips @ 8khz */ diff --git a/src/mame/drivers/neogeo.c b/src/mame/drivers/neogeo.c index de21769c8b8..52918dd89b1 100644 --- a/src/mame/drivers/neogeo.c +++ b/src/mame/drivers/neogeo.c @@ -238,7 +238,9 @@ . NEO-AEG CHA42G-3 . NEO-AEG CHA42G-4 . NEO-AEG CHA256 + . NEO-AEG CHA256 B . NEO-AEG CHA256[B] + . NEO-AEG CHA256BY . NEO-AEG CHA256RY . NEO-AEG CHA512Y . NEO-AEG CHAFIO (1999.8.10) - used with NEO-CMC 90G06C7042 or NEO-CMC 90G06C7050 @@ -261,6 +263,7 @@ . NEO-AEG PROG4096 B . NEO-AEG PROGGS . NEO-AEG PROGTOP2 + . NEO-AEG PROGTOP2Y . NEO-AEG PROGEOP (1999.4.2) . NEO-AEG PROGLBA (1999.7.6) . NEO-AEG PROGRK @@ -307,7 +310,16 @@ GIGA PROG Board 1.0 GIGA PROG Board 1.5 - + + Unofficial pcb's from NEOBITZ: + + MVS CHA: + CHARBITZ1 2013.12.01 + + MVS PROG: + PROGBITZ1 2013.12.01 + + Neo-Geo game PCB infos by Johnboy diff --git a/src/mame/drivers/neogeo_noslot.c b/src/mame/drivers/neogeo_noslot.c index f44878f9476..dea6d008728 100644 --- a/src/mame/drivers/neogeo_noslot.c +++ b/src/mame/drivers/neogeo_noslot.c @@ -679,6 +679,7 @@ ROM_END NEO-MVS PROG42G / NEO-MVS CHA42G . NGH-007 NEO-AEG PROG42G / NEO-AEG CHA42G + NEO-AEG PROG42G / NEO-AEG CHA-8M ****************************************/ ROM_START( alpham2 ) /* MVS AND AES VERSION */ @@ -734,7 +735,7 @@ ROM_END /**************************************** ID-0008 - Sunshine (prototype) 1990 SNK + Sun Shine (prototype) 1990 SNK / Alpha ****************************************/ /**************************************** @@ -770,7 +771,7 @@ ROM_START( ncombat ) /* MVS VERSION */ ROM_LOAD16_BYTE( "009-c6.c6", 0x200001, 0x80000, CRC(2eca8b19) SHA1(16764ef10e404325ba0a1a2ad3a4c0af287be21f) ) /* Plane 2,3 */ /* TC534200 */ ROM_END -ROM_START( ncombath ) /* AES VERSION */ +ROM_START( ncombath ) /* MVS AND AES VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "009-pg1.p1", 0x000000, 0x080000, CRC(8e9f0add) SHA1(d0b908a86a58f2537eea73a431038f1cd74a5a2f) ) /* TC534200 */ @@ -800,6 +801,7 @@ ROM_END . NGM-010 NEO-MVS PROG-EP / NEO-MVS CHA-32 . NGH-010 + NEO-AEG PROG-B / NEO-AEG CHA-32 ****************************************/ ROM_START( cyberlip ) @@ -910,6 +912,7 @@ ROM_END NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 . NGH-016 NEO-AEG PROG42G / NEO-AEG CHA42G + NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( kotm ) /* MVS VERSION */ @@ -962,6 +965,7 @@ ROM_END NEO-MVS PROG42G / NEO-MVS CHA42G . NGH-017 NEO-AEG PROG42G / NEO-AEG CHA42G + NEO-AEG PRO42G-1 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( sengoku ) /* MVS AND AES VERSION */ @@ -1233,6 +1237,8 @@ ROM_END ID-0023 . NGM-023 NEO-MVS PROG42G / NEO-MVS CHA42G + NEO-MVS PROGTOP / NEO-MVS CHA-256 + Boards used for the Korean release . NGH-023 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ****************************************/ @@ -1368,7 +1374,7 @@ ROM_END /**************************************** ID-0028 - Dunk Star (prototype) Sammy + Dunk Star (prototype) 1991 Sammy ****************************************/ /**************************************** @@ -1618,6 +1624,7 @@ ROM_END ID-0036 . MOM-002 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 + NEO-MVS PROG42G-COM / NEO-MVS CHA42G-1 . MOH-002 NEO-AEG PROG42G / NEO-AEG CHA42G ****************************************/ @@ -1775,6 +1782,7 @@ ROM_END . NGM-040 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 . NGH-040 + NEO-AEG PROG16 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( sengoku2 ) @@ -1805,6 +1813,7 @@ ROM_END . NGM-041 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 . NGH-041 + NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( bstars2 ) @@ -1862,6 +1871,7 @@ ROM_END ID-0043 . NGM-043 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 + NEO-MVS PROG-G2 / NEO-MVS CHA 42G-2 . NGH-043 NEO-AEG PROG16 / NEO-AEG CHA42G-1 ****************************************/ @@ -1896,6 +1906,7 @@ ROM_END ID-0044 . NGM-044 NEO-MVS PROG16 / NEO-MVS CHA42G-1 + NEO-MVS PROG4096 / NEO-MVS CHA42G-1 . NGH-044 NEO-AEG PROG16 / NEO-AEG CHA42G-1 ****************************************/ @@ -1903,7 +1914,8 @@ ROM_END ROM_START( aof ) /* MVS AND AES VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "044-p1.p1", 0x000000, 0x080000, CRC(ca9f7a6d) SHA1(4d28ef86696f7e832510a66d3e8eb6c93b5b91a1) ) /* TC534200 */ - + /* also found sets with ep1 or p1 on eprom. */ + NEO_SFIX_128K( "044-s1.s1", CRC(89903f39) SHA1(a04a0c244a5d5c7a595fcf649107969635a6a8b6) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "044-m1.m1", CRC(0987e4bb) SHA1(8fae4b7fac09d46d4727928e609ed9d3711dbded) ) /* TC531001 */ @@ -1937,7 +1949,8 @@ ROM_START( samsho ) /* MVS VERSION */ ROM_REGION( 0x200000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "045-p1.p1", 0x000000, 0x100000, CRC(dfe51bf0) SHA1(2243af3770a516ae698b69bcd9daf53632d9128d) ) /* TC538200 */ ROM_LOAD16_WORD_SWAP( "045-pg2.sp2", 0x100000, 0x100000, CRC(46745b94) SHA1(d9e959fd1f88c9402915c1d0dcdb4a9e3d49cdcb) ) /* TC538200 */ - + /* also found set with ep1 / ep2 on eprom and sp2 on maskrom; same rom data as samshoh is used. */ + NEO_SFIX_128K( "045-s1.s1", CRC(9142a4d3) SHA1(54088e99fcfd75fd0f94852890a56350066a05a3) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "045-m1.m1", CRC(95170640) SHA1(125c502db0693e8d11cef619b090081c14a9a300) ) /* TC531001 */ @@ -2051,6 +2064,7 @@ ROM_END NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-1 . NGH-047 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B + NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2 ****************************************/ ROM_START( fatfury2 ) /* MVS AND AES VERSION */ @@ -2137,6 +2151,7 @@ ROM_END . ALM-004 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 . ALH-004 + NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( ncommand ) @@ -2164,6 +2179,7 @@ ROM_END ID-0051 . AIM-051 NEO-MVS PROG-G2 / NEO-MVS CHA42G-1 + NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 . AIH-051 ****************************************/ @@ -2194,6 +2210,7 @@ ROM_END . NGM-052 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA 42G-2 . NGH-052 + NEO-AEG PROG-G2 (SNK-9201) / NEO-AEG CHA42G-2 ****************************************/ ROM_START( ssideki ) @@ -2222,6 +2239,7 @@ ROM_END NEO-MVS PROG16 / NEO-MVS CHA42G-1 . ALH-005 NEO-AEG PROG16 / NEO-AEG CHA42G-1 + NEO-AEG PROG-G2 / NEO-AEG CHA42G-2C ****************************************/ ROM_START( wh1 ) /* MVS VERSION */ @@ -2253,7 +2271,7 @@ ROM_START( wh1h ) /* AES VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "053-p1.p1", 0x000000, 0x080000, CRC(95b574cb) SHA1(b7b7af6a04c3d902e7f8852897741ecaf0b1062c) ) /* TC534200 */ ROM_LOAD16_WORD_SWAP( "053-p2.p2", 0x080000, 0x080000, CRC(f198ed45) SHA1(24ccc091e97f63796562bb5b30df51f39bd504ef) ) /* TC534200 */ - + NEO_SFIX_128K( "053-s1.s1", CRC(8c2c2d6b) SHA1(87fa79611c6f8886dcc8766814829c669c65b40f) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "053-m1.m1", CRC(1bd9d04b) SHA1(65cd7b002123ed1a3111e3d942608d0082799ff3) ) /* TC531001 */ @@ -2307,6 +2325,7 @@ ROM_END ID-0055 . NGM-055 NEO-MVS PROGTOP / NEO-MVS CHA256 + NEO-MVS PROGTOP / NEO-MVS CHA256B . NGH-055 NEO-AEG PROGRK / NEO-AEG CHA256 ****************************************/ @@ -2437,7 +2456,8 @@ ROM_END /**************************************** ID-0058 . NGM-058 - NEO-MVS PROGGSC / NEO-MVS CHA 42G-3B + NEO-MVS PROGGSC / NEO-MVS CHA42G-3B + NEO-MVS PROGGSC / NEO-MVS CHA 42G-3 . NGH-058 NEO-AEG PROGGS / NEO-AEG CHA42G-4 ****************************************/ @@ -2499,6 +2519,7 @@ ROM_END ID-0059 . NGM-059 NEO-MVS PROGTOP / NEO-MVS CHA256 + NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 . NGH-059 ****************************************/ @@ -2584,6 +2605,8 @@ ROM_END ID-0061 . NGM-061 NEO-MVS PROGGSC / NEO-MVS CHA256 + NEO-MVS PROGTOP / NEO-MVS CHA256 + NEO-MVS PROG 4096 B / NEO-MVS CHA256 . NGH-061 NEO-AEG PROGRKB / NEO-AEG CHA256[B] ****************************************/ @@ -2591,7 +2614,8 @@ ROM_END ROM_START( ssideki2 ) /* MVS AND AES VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "061-p1.p1", 0x000000, 0x100000, CRC(5969e0dc) SHA1(78abea880c125ec5a85bef6404478512a34b5513) ) /* mask rom TC538200 */ - + /* also found MVS sets with ep1 / ep2 on eprom; correct chip label unknown. */ + NEO_SFIX_128K( "061-s1.s1", CRC(226d1b68) SHA1(de010f6fda3ddadb181fe37daa6105f22e78b970) ) /* mask rom TC531000 */ NEO_BIOS_AUDIO_128K( "061-m1.m1", CRC(156f6951) SHA1(49686f615f109a02b4f23931f1c84fee13872ffd) ) /* mask rom TC531001 */ @@ -2654,7 +2678,8 @@ ROM_START( samsho2 ) /* MVS AND AES VERSION */ ROM_REGION( 0x200000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "063-p1.p1", 0x100000, 0x100000, CRC(22368892) SHA1(0997f8284aa0f57a333be8a0fdea777d0d01afd6) ) /* TC5316200 */ ROM_CONTINUE( 0x000000, 0x100000 ) - + /* also found MVS sets with ep1 / ep2 on eprom and p1 / sp2 on maskrom; correct chip label unknown */ + NEO_SFIX_128K( "063-s1.s1", CRC(64a5cd66) SHA1(12cdfb27bf9ccd5a8df6ddd4628ef7cf2c6d4964) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "063-m1.m1", CRC(56675098) SHA1(90429fc40d056d480d0e2bbefbc691d9fa260fc4) ) /* TC531001 */ @@ -2716,6 +2741,7 @@ ROM_END NEO-MVS PROGGSC / NEO-MVS CHA256 . ADH-007 NEO-AEG PROGRK / NEO-AEG CHA256 + NEO-AEG PROGRKB / NEO-AEG CHA256[B] ****************************************/ ROM_START( wh2j ) /* MVS AND AES VERSION */ @@ -2734,6 +2760,7 @@ ROM_START( wh2j ) /* MVS AND AES VERSION */ NO_DELTAT_REGION ROM_REGION( 0x1000000, "sprites", 0 ) + /* Different layout with 4xC (32 mbit) also exists; chip labels are 064-C13, 064-C24, 064-C57 and 064-c68. */ ROM_LOAD16_BYTE( "064-c1.c1", 0x000000, 0x200000, CRC(2ec87cea) SHA1(e713ec7839a7665edee6ee3f82a6e530b3b4bd7c) ) /* Plane 0,1 */ /* TC5316200 */ ROM_LOAD16_BYTE( "064-c2.c2", 0x000001, 0x200000, CRC(526b81ab) SHA1(b5f0a2f04489539ed6b9d0810b12787356c64b23) ) /* Plane 2,3 */ /* TC5316200 */ ROM_LOAD16_BYTE( "064-c3.c3", 0x400000, 0x200000, CRC(436d1b31) SHA1(059776d77b91377ed0bcfc278802d659c917fc0f) ) /* Plane 0,1 */ /* TC5316200 */ @@ -2749,6 +2776,7 @@ ROM_END . DEM-002 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 . DEH-002 + NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ****************************************/ ROM_START( wjammers ) @@ -2807,6 +2835,7 @@ ROM_END ID-0067 . ??M-067 NEO-MVS PROG16 / NEO-MVS CHA256B + NEO-MVS PROG16 / NEO-MVS CHA256 ****************************************/ ROM_START( gururin ) /* MVS ONLY RELEASE */ @@ -2925,7 +2954,8 @@ ROM_END /**************************************** ID-0071 Bang Bang Busters (prototype) 1994 Visco - Released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO) + Prepared for release in 2000/2001, but apparently Zupapa was favored + The 2000 version was released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO) Reported UNIVERSE BIOS CRC32: ROM EC861CAF @@ -2935,6 +2965,23 @@ ROM_END BANK 3 NOT USED ****************************************/ + ROM_START( b2b ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "071.p1", 0x000000, 0x080000, CRC(7687197d) SHA1(4bb9cb7819807f7a7e1f85f1c4faac4a2f8761e8) ) + + NEO_SFIX_128K( "071.s1", CRC(44e5f154) SHA1(b3f80051789e60e5d8c5df0408f1aba51616e92d) ) + + NEO_BIOS_AUDIO_128K( "071.m1", CRC(6da739ad) SHA1(cbf5f55c54b4ee00943e2a411eeee4e465ce9c34) ) + + ROM_REGION( 0x100000, "ymsnd", 0 ) + ROM_LOAD( "071.v1", 0x000000, 0x100000, CRC(50feffb0) SHA1(00127dae0130889995bfa7560bc4b0662f74fba5) ) + + ROM_REGION( 0x400000, "sprites", 0 ) + ROM_LOAD16_BYTE( "071.c1", 0x000000, 0x200000, CRC(23d84a7a) SHA1(9034658ad40e2c45558abc3db312aa2764102fc4) ) /* Plane 0,1 */ + ROM_LOAD16_BYTE( "071.c2", 0x000001, 0x200000, CRC(ce7b6248) SHA1(ad1cd5adae5c151e183ff88b68afe10f7009f48e) ) /* Plane 2,3 */ +ROM_END + + /**************************************** ID-0072 Last Odyssey Pinball Fantasia (prototype) 1995 Monolith @@ -3005,6 +3052,7 @@ ROM_END . NGM-075 NEO-MVS PROGGSC / NEO-MVS CHA256 . NGH-075 + NEO-AEG PROGRK / NEO-AEG CHA256 ****************************************/ ROM_START( sonicwi2 ) @@ -3059,7 +3107,8 @@ ROM_END /**************************************** ID-0077 - The Warlocks of the Fates (prototype) 1995 Astec + The Warlocks of the Fates / Shinryu Senki (prototype) 1995 SNK/Astec21 + a video of intro and full gameplay was on youtube in 2014. ****************************************/ /**************************************** @@ -3130,6 +3179,8 @@ ROM_END ID-0080 . SAM-080 NEO-MVS PROGGSC / NEO-MVS CHA256 + NEO-MVS PROGTOP / NEO-MVS CHA256 + Boards used for the Korean release . SAH-080 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B ****************************************/ @@ -3185,7 +3236,10 @@ ROM_END . NGM-081 NEO-MVS PROGTOP / NEO-MVS CHA42G-3B NEO-MVS PROGTOP / NEO-MVS CHA256 + NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 + NEO-MVS PROGBK1 / NEO-MVS CHA256B . NGH-081 + NEO-AEG PROGTOP2 / NEO-AEG CHA256 B ****************************************/ ROM_START( ssideki3 ) @@ -3219,6 +3273,8 @@ ROM_END NEO-MVS PROGTOP / NEO-MVS CHA256 NEO-MVS PROGTOP / NEO-MVS CHA 42G-3 NEO-MVS PROGBK1 / NEO-MVS CHA256 + NEO-MVS PROGTOP / NEO-MVS CHA256B + NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 . NGH-082 ****************************************/ @@ -3417,6 +3473,7 @@ ROM_END ID-0087 . NGM-087 NEO-MVS PROGSS3 / NEO-MVS CHA256 + NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-087 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ @@ -3508,6 +3565,7 @@ ROM_END . NGM-088 NEO-MVS PROGBK1 / NEO-MVS CHA42-3B . NGH-088 + NEO-AEG PROGRKB / NEO-AEG CHA256[B] ****************************************/ ROM_START( stakwin ) @@ -3536,6 +3594,7 @@ ROM_END . NGM-089 NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-089 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( pulstar ) @@ -3568,6 +3627,9 @@ ROM_END ID-0090 . ADM-009 NEO-MVS PROGTOP / NEO-MVS CHA256 + NEO-MVS PROGGSC / NEO-MVS CHA256 + NEO-MVS PROGGSC / NEO-MVS CHA256B + NEO-MVS PROGBK1 / NEO-MVS CHA256B . ADH-009 ****************************************/ @@ -3602,13 +3664,14 @@ ROM_END /**************************************** ID-0091 - unknown + ADK World / ADK Special 1995 ADK (CD only) ****************************************/ /**************************************** ID-0092 . NGM-092 NEO-MVS PROGBK1 / NEO-MVS CHA256 + NEO-MVS PROGTOP / NEO-MVS CHA256 . NGH-092 ****************************************/ @@ -3830,6 +3893,7 @@ ROM_END . NGM-097 NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-097 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( sonicwi3 ) @@ -3886,6 +3950,7 @@ ROM_END ID-0200 . NGM-200 NEO-MVS PROGBK1 / NEO-MVS CHA256B + NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-200 ****************************************/ @@ -3915,6 +3980,7 @@ ROM_END ID-0201 . NGM-201 NEO-MVS PROGBK1 / NEO-MVS CHA256 + NEO-MVS PROGBK1 / NEO-MVS CHA256B . NGH-201 ****************************************/ @@ -3991,7 +4057,7 @@ ROM_END /**************************************** ID-0204 - QP (prototype) + QP (prototype) 1997 Success ****************************************/ /**************************************** @@ -4031,6 +4097,7 @@ ROM_END ID-0207 . ??M-207 NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B + NEO-MVS PROG 4096 / NEO-MVS CHA42G-3B ****************************************/ ROM_START( neomrdo ) /* MVS ONLY RELEASE */ @@ -4175,14 +4242,17 @@ ROM_END ID-0214 . NGM-214 NEO-MVS PROGBK1 / NEO-MVS CHA256 + NEO-MVS PROGSS3 / NEO-MVS CHA256 . NGH-214 + NEO-AEG PROGBK1Y / NEO-GEO AEG CHA256RY ****************************************/ ROM_START( kof96 ) /* MVS VERSION */ ROM_REGION( 0x300000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "214-p1.p1", 0x000000, 0x100000, CRC(52755d74) SHA1(4232d627f1d2e6ea9fc8cf01571d77d4d5b8a1bb) ) /* TC538200 */ ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */ - + /* also found sets with ep1 / ep2 / ep3 / ep4 on eprom and 214-P5 on TC5316200; correct chip labels for eproms is unknown */ + NEO_SFIX_128K( "214-s1.s1", CRC(1254cbdb) SHA1(fce5cf42588298711a3633e9c9c1d4dcb723ac76) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "214-m1.m1", CRC(dabc427c) SHA1(b76722ed142ee7addceb4757424870dbd003e8b3) ) /* TC531001 */ @@ -4205,7 +4275,7 @@ ROM_START( kof96 ) /* MVS VERSION */ ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) ) /* Plane 2,3 */ /* TC5332205 */ ROM_END -ROM_START( kof96h ) +ROM_START( kof96h ) /* AES VERSION */ ROM_REGION( 0x300000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "214-pg1.p1", 0x000000, 0x100000, CRC(bd3757c9) SHA1(35392a044117e46c088ff0fdd07d69a3faa4f96e) ) ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */ @@ -4237,6 +4307,7 @@ ROM_END . NGM-215 NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-215 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( ssideki4 ) @@ -4268,6 +4339,7 @@ ROM_END . ??M-216 NEO-MVS PROGTOP / NEO-MVS CHA256 . ??H-216 + NEO-AEG PROGTOP2Y / NEO-AEG CHA256BY ****************************************/ ROM_START( kizuna ) @@ -4346,6 +4418,7 @@ ROM_END . ADM-012 NEO-MVS PROGBK1 / NEO-MVS CHA256 . ADH-012 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( ninjamas ) @@ -4485,6 +4558,7 @@ ROM_END ID-0221 . NGM-221 NEO-MVS PROGBK1 / NEO-MVS CHA256B + NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-221 ****************************************/ @@ -4573,6 +4647,7 @@ ROM_END . NGM-223 NEO-MVS PROGBK1 / NEO-MVS CHA256B . NGH-223 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( rbffspec ) @@ -4605,7 +4680,7 @@ ROM_END ROM_START( rbffspeck ) /* KOREAN VERSION */ ROM_REGION( 0x500000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "223-p1k.p1", 0x000000, 0x100000, CRC(b78c8391) SHA1(936b356ac135331b10a37bc10882ec2e4f6b400b) ) - /* Chip label is correct. They used Cart ID 0124 as 0123 was allready used by quizdaisk */ + /* Chip label is correct. They used Cart ID 0124 as 0123 was already used by quizdaisk */ ROM_LOAD16_WORD_SWAP( "223-p2.sp2", 0x100000, 0x400000, CRC(addd8f08) SHA1(abaf5b86c8ec915c07ef2d83fce9ad03acaa4817) ) /* TC5332205 */ NEO_SFIX_128K( "223-s1.s1", CRC(7ecd6e8c) SHA1(465455afc4d83cbb118142be4671b2539ffafd79) ) /* TC531000 */ @@ -4635,6 +4710,7 @@ ROM_END . ADM-013 NEO-MVS PROGBK1 / NEO-MVS CHA256B . ADH-013 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( twinspri ) @@ -4700,6 +4776,7 @@ ROM_END . NGM-227 NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-227 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( stakwin2 ) @@ -4761,6 +4838,7 @@ ROM_END . NGM-2300 NEO-MVS PROGBK1 / NEO-MVS CHA256B . NGH-2300 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( breakers ) @@ -4899,6 +4977,7 @@ ROM_END . NGM-2330 NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-2330 + NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ ROM_START( magdrop3 ) @@ -4934,7 +5013,9 @@ ROM_START( lastblad ) /* MVS VERSION */ ROM_REGION( 0x500000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "234-p1.p1", 0x000000, 0x100000, CRC(e123a5a3) SHA1(a3ddabc00feeb54272b145246612ad4632b0e413) ) /* TC538200 */ ROM_LOAD16_WORD_SWAP( "234-p2.sp2", 0x100000, 0x400000, CRC(0fdc289e) SHA1(1ff31c0b0f4f9ddbedaf4bcf927faaae81892ec7) ) /* TC5332205 */ - + /* also found sets with p1 / sp2 / ep1 / ep2 / m1 on eprom with sticker */ + /* chip label is 0234-P1, 0234-SP2, 0234-EP1, 0234-EP2 and 0234-M1 */ + NEO_SFIX_128K( "234-s1.s1", CRC(95561412) SHA1(995de272f572fd08d909d3d0af4251b9957b3640) ) /* TC531000 */ NEO_BIOS_AUDIO_128K( "234-m1.m1", CRC(087628ea) SHA1(48dcf739bb16699af4ab8ed632b7dcb25e470e06) ) /* TC531001 */ @@ -5151,6 +5232,7 @@ ROM_END . NGM-2390 NEO-MVS PROGBK1 / NEO-MVS CHA512Y . NGH-2390 + NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ****************************************/ ROM_START( blazstar ) @@ -5269,6 +5351,7 @@ ROM_END ID-0241 . NGM-2410 NEO-MVS PROGBK1 / NEO-MVS CHA512Y + NEO-MVS PROGBK1 / NEO-MVS CHA256 . NGH-2410 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ****************************************/ @@ -5289,6 +5372,7 @@ ROM_START( mslug2 ) /* MVS AND AES VERSION */ NO_DELTAT_REGION ROM_REGION( 0x2000000, "sprites", 0 ) + /* Different layout with 8xC (16 mbit) also exists; naming sheme 241-Cx */ ROM_LOAD16_BYTE( "241-c1.c1", 0x0000000, 0x800000, CRC(394b5e0d) SHA1(4549926f5054ee6aa7689cf920be0327e3908a50) ) /* Plane 0,1 */ /* TC5364205 */ ROM_LOAD16_BYTE( "241-c2.c2", 0x0000001, 0x800000, CRC(e5806221) SHA1(1e5475cfab129c77acc610f09369ca42ba5aafa5) ) /* Plane 2,3 */ /* TC5364205 */ ROM_LOAD16_BYTE( "241-c3.c3", 0x1000000, 0x800000, CRC(9f6bfa6f) SHA1(a4319b48004e723f81a980887678e3e296049a53) ) /* Plane 0,1 */ /* TC5364205 */ @@ -5298,8 +5382,8 @@ ROM_END /**************************************** ID-0242 . NGM-2420 - NEO-MVS PROGSF1 (protected board) / NEO-MVS CHA512Y - NEO-MVS PROGSF1E (protected board) / NEO-MVS CHA512Y + NEO-MVS PROGSF1 (1998.6.17) (protected board) / NEO-MVS CHA512Y + NEO-MVS PROGSF1E (1998.6.18) (protected board) / NEO-MVS CHA512Y NEO-MVS PROGBK1 / NEO-MVS CHA512Y . NGH-2420 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y @@ -5422,7 +5506,7 @@ ROM_START( kof98ka ) /* encrypted code + protection, only z80 rom is different t ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) ) /* Plane 2,3 */ /* TC5364205 */ ROM_END -ROM_START( kof98h ) /* AES VERSION */ +ROM_START( kof98h ) /* MVS AND AES VERSION */ ROM_REGION( 0x500000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "242-pn1.p1", 0x000000, 0x100000, CRC(61ac868a) SHA1(26577264aa72d6af272952a876fcd3775f53e3fa) ) /* TC538200 */ ROM_LOAD16_WORD_SWAP( "242-p2.sp2", 0x100000, 0x400000, CRC(980aba4c) SHA1(5e735929ec6c3ca5b2efae3c7de47bcbb8ade2c5) ) /* TC5332205 */ @@ -5689,11 +5773,11 @@ ROM_END ID-0251 . NGM-2510 SMA protected version found on: - NEO-MVS PROGLBA (NEO-SMA) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) + NEO-MVS PROGLBA (NEO-SMA) (1999.4.12) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) Non SMA protected version found on: NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) . NGH-2510 - NEO-AEG PROGLBA / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) + NEO-AEG PROGLBA (1999.7.6) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ****************************************/ ROM_START( kof99 ) /* Original Version - Encrypted Code & GFX */ /* MVS VERSION */ @@ -5908,9 +5992,9 @@ ROM_END /**************************************** ID-0253 . NGM-2530 - NEO-MVS PROGLBA (NEO-SMA) (LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) + NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) . NGH-2530 - NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) + NEO-AEG PROGLBA (1999.7.6) (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ****************************************/ ROM_START( garou ) /* Original Version - Encrypted GFX */ /* MVS VERSION - later revision */ @@ -6096,10 +6180,11 @@ ROM_END ID-0256 . NGM-2560 SMA protected version found on: - NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) + NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) Non SMA protected version found on: NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) . NGH-2560 + NEO-AEG PROGLBA (1999.7.6) (NEO-SMA)(LBA-SUB) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ****************************************/ ROM_START( mslug3 ) /* Original Version - Encrypted Code & GFX */ /* revision 2000.4.1 */ /* MVS VERSION */ @@ -6108,7 +6193,7 @@ ROM_START( mslug3 ) /* Original Version - Encrypted Code & GFX */ /* revision 20 /* The SMA for this release has a green colour marking; the older revision has a white colour marking */ ROM_LOAD16_WORD_SWAP( "256-pg1.p1", 0x100000, 0x400000, CRC(b07edfd5) SHA1(dcbd9e500bfae98d754e55cdbbbbf9401013f8ee) ) /* TC5332202 */ ROM_LOAD16_WORD_SWAP( "256-pg2.p2", 0x500000, 0x400000, CRC(6097c26b) SHA1(248ec29d21216f29dc6f5f3f0e1ad1601b3501b6) ) /* TC5332202 */ - + ROM_Y_ZOOM /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ @@ -6143,7 +6228,9 @@ ROM_START( mslug3h ) /* Original Version - Encrypted GFX */ /* revision 2000.3.1 ROM_REGION( 0x500000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "256-ph1.p1", 0x000000, 0x100000, CRC(9c42ca85) SHA1(7a8f77a89867b889295ae9b9dfd4ba28f02d234d) ) ROM_LOAD16_WORD_SWAP( "256-ph2.sp2", 0x100000, 0x400000, CRC(1f3d8ce8) SHA1(08b05a8abfb86ec09a5e758d6273acf1489961f9) ) - + /* also found AES set with p1 / p2 on maskrom on NEO-AEG PROGLBA (NEO-SMA); chip labels is 256-PG1 and 256-PG2 */ + /* The SMA for this release has a pink color marking */ + ROM_Y_ZOOM /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ @@ -6178,7 +6265,7 @@ ROM_END ID-0257 . NGM-2570 SMA protected version found on: - NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) + NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) Non SMA protected version found on: NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) . NGH-2570 @@ -6330,6 +6417,7 @@ ROM_END . NGM-2610 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) . NGH-2610 + NEO-AEG PROGBK1F / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ****************************************/ ROM_START( sengoku3 ) /* Original Version - Encrypted GFX */ @@ -6449,7 +6537,7 @@ ROM_END . NGM-2630 NEO-MVS PROGBK2 (NEO-PCM2 SNK)/ NEO-MVS CHAFIO (NEO-CMC 7050) . NGH-2630 - NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) + NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ****************************************/ ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */ @@ -6524,9 +6612,9 @@ ROM_END /**************************************** ID-0264 . NGM-264? - NEO-MVS PROGBK2 (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) + NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) . NGH-2641 - NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) + NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) - Distribution by BrezzaSoft ****************************************/ @@ -6567,7 +6655,7 @@ ROM_END /**************************************** ID-0265 . NGM-2650 - NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) + NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) . NGH-2650 NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ****************************************/ @@ -6610,9 +6698,9 @@ ROM_END /**************************************** ID-0266 . NGM-2660 - NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) + NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) . NGH-2660 - NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) + NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ****************************************/ ROM_START( matrim ) /* Encrypted Set */ /* MVS AND AES VERSION */ @@ -6659,7 +6747,8 @@ ROM_END ROM_START( pnyaa ) /* Encrypted Set */ /* MVS ONLY RELEASE */ ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "267-p1.p1", 0x000000, 0x100000, CRC(112fe2c0) SHA1(01420e051f0bdbd4f68ce306a3738161b96f8ba8) ) /* mask rom TC538200 */ - + /* also found set with p1 and m1 on eprom with sticker; chip labels is PN 2.02 and M1 */ + ROM_Y_ZOOM /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ @@ -6686,8 +6775,9 @@ ROM_END /**************************************** ID-0268 . NGM-2680 - NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) . NGH-2680 + NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ****************************************/ ROM_START( mslug5 ) /* Encrypted Set */ /* MVS VERSION */ @@ -6729,7 +6819,8 @@ ROM_START( mslug5h ) /* Encrypted Set */ /* AES release of the game but is also ROM_REGION( 0x800000, "maincpu", 0 ) ROM_LOAD32_WORD_SWAP( "268-p1c.p1", 0x000000, 0x400000, CRC(3636690a) SHA1(e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3) ) ROM_LOAD32_WORD_SWAP( "268-p2c.p2", 0x000002, 0x400000, CRC(8dfc47a2) SHA1(27d618cfbd0107a4d2a836797e967b39d2eb4851) ) - + /* also found AES set with p1 / p2 on maskrom; chip labels is 268-P1CR2 and 268-P2CR2 */ + ROM_Y_ZOOM /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ @@ -6804,9 +6895,9 @@ ROM_END /**************************************** ID-0270 . NGM-2700 - NEO-MVS PROGBK2R (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-MVS PROGBK2R (2003.8.26) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) . NGH-2700 - NEO-AEG PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-AEG PROGBK2S (2003.10.16) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ****************************************/ ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */ @@ -6882,9 +6973,9 @@ ROM_END /**************************************** ID-0271 . NGM-2710 - NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) . NGH-2710 - NEO-AEG PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ****************************************/ ROM_START( kof2003 ) /* Encrypted Code + Sound + GFX Roms */ /* MVS VERSION */ @@ -6963,7 +7054,7 @@ ROM_END /**************************************** ID-0272 . NGM-2720 - NEO-MVS PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) + NEO-MVS PROGBK2S (2003.10.18) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) . NGH-2720 ****************************************/ @@ -7097,7 +7188,7 @@ ROM_END /**************************************** B-J-02 . ???-???? - MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) + MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) ****************************************/ ROM_START( jockeygp ) /* MVS ONLY RELEASE */ @@ -9780,6 +9871,7 @@ GAME( 1998, flipshot, neogeo, neogeo_noslot, neogeo, neogeo_state, neoge GAME( 1999, ctomaday, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Visco", "Captain Tomaday", GAME_SUPPORTS_SAVE ) GAME( 1999, ganryu, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, ganryu, ROT0, "Visco", "Ganryu / Musashi Ganryuki" , GAME_SUPPORTS_SAVE ) /* Encrypted GFX */ GAME( 2000, bangbead, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, bangbead, ROT0, "Visco", "Bang Bead", GAME_SUPPORTS_SAVE ) +GAME( 2000, b2b, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Visco", "Bang Bang Busters (2010 NCI release)" , GAME_SUPPORTS_SAVE ) /* Mega Enterprise */ GAME( 2002, mslug4, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, mslug4, ROT0, "Mega / Playmore", "Metal Slug 4 (NGM-2630)", GAME_SUPPORTS_SAVE ) @@ -9813,7 +9905,11 @@ GAME( 2004, sbp, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, // Fast Striker (c)2010 - MVS/AES // Fast Striker 1.5 (c)2010 - MVS/AES // GunLord (c)2012 - MVS/AES +// Neo XYX (c)2013 - MVS/AES +// Razion (c)2014 - MVS/AES? /* N.C.I - LE CORTEX */ -// Bang Bang Busters (c)2010 - MVS?/AES -// Treasure of the Caribbean (c)2011 - MVS?/AES +// Treasure of the Caribbean (c)2011 - AES only (no credits system if ran on an MVS, Freeplay) + +/* NEOBITZ */ +// Knight's Chance (c)2014 - MVS/AES diff --git a/src/mame/drivers/opwolf.c b/src/mame/drivers/opwolf.c index 3d969d47038..4db6ab0d309 100644 --- a/src/mame/drivers/opwolf.c +++ b/src/mame/drivers/opwolf.c @@ -825,9 +825,8 @@ ROM_START( opwolf ) ROM_LOAD16_BYTE( "b20-04.39", 0x20000, 0x10000, CRC(216b4838) SHA1(2851cae00bb3e32e20f35fdab8ed6f149e658363) ) ROM_LOAD16_BYTE( "b20-20.29", 0x20001, 0x10000, CRC(d244431a) SHA1(cb6c1d330a526f05c205f68247328161b8d4a1ba) ) - ROM_REGION( 0x20000, "audiocpu", 0 ) /* sound cpu */ - ROM_LOAD( "b20-07.10", 0x00000, 0x04000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) ) - ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ + ROM_LOAD( "b20-07.10", 0x00000, 0x10000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) ) ROM_REGION( 0x80000, "gfx1", 0 ) ROM_LOAD( "b20-13.13", 0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) ) /* SCR tiles (8 x 8) */ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 32339c6e085..91053b729ce 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -7704,6 +7704,7 @@ kof2000 // 0257 (c) 2000 SNK kof2000n // 0257 (c) 2000 SNK // 0258 SNK vs. Capcom? bangbead // 0259 (c) 2000 Visco +b2b // 0071 (c) 2000 Visco (released by NCI in 2010) nitd // 0260 (c) 2000 Eleven / Gavaking nitdbl // bootleg sengoku3 // 0261 (c) 2001 Noise Factory / SNK diff --git a/src/mess/drivers/cnsector.c b/src/mess/drivers/cnsector.c deleted file mode 100644 index 9153b3a3718..00000000000 --- a/src/mess/drivers/cnsector.c +++ /dev/null @@ -1,254 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Parker Brothers Code Name: Sector, by Bob Doyle - * MP0905BNL ZA0379 (die labeled 0970F-05B) - - This is a tabletop submarine pursuit game. A grid board and small toy - boats are used to remember your locations (a Paint app should be ok too). - Refer to the official manual for more information, it is not a simple game. - - - TODO: - - MCU clock is unknown - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" - -#include "cnsector.lh" - -// master clock is unknown, the value below is an approximation -#define MASTER_CLOCK (250000) - - -class cnsector_state : public driver_device -{ -public: - cnsector_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<5> m_button_matrix; - - UINT16 m_o; - - UINT16 m_display_state[0x10]; - UINT16 m_display_cache[0x10]; - UINT8 m_display_decay[0x100]; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - - virtual void machine_start(); -}; - - - -/*************************************************************************** - - LED Display - -***************************************************************************/ - -// The device strobes the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -void cnsector_state::display_update() -{ - UINT16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) - { - active_state[i] = 0; - - for (int j = 0; j < 0x10; j++) - { - int di = j << 4 | i; - - // turn on powered segments - if (m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; - - // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); - } - } - - // on difference, send to output - for (int i = 0; i < 0x10; i++) - if (m_display_cache[i] != active_state[i]) - output_set_digit_value(i, active_state[i]); - - memcpy(m_display_cache, active_state, sizeof(m_display_cache)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; - - display_update(); -} - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(cnsector_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 5; i++) - if (m_o >> i & 1) - k |= m_button_matrix[i]->read(); - - return k; -} - -WRITE16_MEMBER(cnsector_state::write_r) -{ - // R0-R5: select digit (right-to-left) - for (int i = 0; i < 6; i++) - m_display_state[i] = (data >> i & 1) ? m_o : 0; - display_update(); - - // R6-R9: direction leds - for (int i = 6; i < 10; i++) - output_set_lamp_value(i - 6, data >> i & 1); -} - -WRITE16_MEMBER(cnsector_state::write_o) -{ - // O0-O4: input mux - // O0-O7: digit segments - m_o = data; -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -static INPUT_PORTS_START( cnsector ) - PORT_START("IN.0") // O0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range") - - PORT_START("IN.1") // O1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.2") // O2 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall") - - PORT_START("IN.3") // O3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.4") // O4 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship") -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void cnsector_state::machine_start() -{ - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_cache, 0, sizeof(m_display_cache)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - - m_o = 0; - - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_cache)); - save_item(NAME(m_display_decay)); - - save_item(NAME(m_o)); -} - - -static MACHINE_CONFIG_START( cnsector, cnsector_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(cnsector_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r)) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", cnsector_state, display_decay_tick, attotime::from_msec(1)) - - MCFG_DEFAULT_LAYOUT(layout_cnsector) - - /* no video! */ - - /* no sound! */ -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( cnsector ) - ROM_REGION( 0x0400, "maincpu", 0 ) - ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) ) - - ROM_REGION( 782, "maincpu:ipla", 0 ) - ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) ) - ROM_REGION( 860, "maincpu:mpla", 0 ) - ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) ) - ROM_REGION( 352, "maincpu:opla", 0 ) - ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) ) - ROM_REGION( 157, "maincpu:spla", 0 ) - ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) ) -ROM_END - - -CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) diff --git a/src/mess/drivers/elecdet.c b/src/mess/drivers/elecdet.c deleted file mode 100644 index aab66ebc80e..00000000000 --- a/src/mess/drivers/elecdet.c +++ /dev/null @@ -1,313 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Ideal Electronic Detective - * TMS0980NLL MP6100A (die labeled 0980B-00) - hardware (and concept) is very similar to Parker Bros Stop Thief - - This is an electronic board game. It requires game cards with suspect info, - and good old pen and paper to record game progress. To start the game, enter - difficulty(1-3), then number of players(1-4), then [ENTER]. Refer to the - manual for more information. - - - TODO: - - MCU clock is unknown - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "elecdet.lh" - -// master clock is unknown, the value below is an approximation -#define MASTER_CLOCK (425000) - - -class elecdet_state : public driver_device -{ -public: - elecdet_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<5> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_o; - bool m_power_on; - - UINT16 m_display_state[0x10]; - UINT16 m_display_cache[0x10]; - UINT8 m_display_decay[0x100]; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - DECLARE_INPUT_CHANGED_MEMBER(power_button); - DECLARE_WRITE_LINE_MEMBER(auto_power_off); - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - - virtual void machine_reset(); - virtual void machine_start(); -}; - - - -/*************************************************************************** - - LED Display - -***************************************************************************/ - -// The device strobes the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -void elecdet_state::display_update() -{ - UINT16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) - { - active_state[i] = 0; - - for (int j = 0; j < 0x10; j++) - { - int di = j << 4 | i; - - // turn on powered segments - if (m_power_on && m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; - - // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); - } - } - - // on difference, send to output - for (int i = 0; i < 0x10; i++) - if (m_display_cache[i] != active_state[i]) - output_set_digit_value(i, active_state[i]); - - memcpy(m_display_cache, active_state, sizeof(m_display_cache)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(elecdet_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; - - display_update(); -} - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(elecdet_state::read_k) -{ - // the Vss row is always on - UINT8 k = m_button_matrix[4]->read(); - - // read selected button rows - for (int i = 0; i < 4; i++) - { - const int ki[4] = { 0, 1, 4, 6 }; - if (m_o >> ki[i] & 1) - k |= m_button_matrix[i]->read(); - } - - return k; -} - -WRITE16_MEMBER(elecdet_state::write_r) -{ - // R0-R6: select digit - UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3) & 0x7f; - for (int i = 0; i < 7; i++) - m_display_state[i] = (data >> i & 1) ? o : 0; - - display_update(); - - // R7,R8: speaker on - m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0); -} - -WRITE16_MEMBER(elecdet_state::write_o) -{ - // O0,O1,O4,O6: input mux - // O0-O6: led segments A-G - // O7: speaker out - m_o = data; -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -INPUT_CHANGED_MEMBER(elecdet_state::power_button) -{ - m_power_on = (bool)(FPTR)param; - m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); -} - -/* physical button layout and labels is like this: - - [1] [2] [3] [SUSPECT] - [4] [5] [6] [PRIVATE QUESTION] - [7] [8] [9] [I ACCUSE] - [0] [ENTER] - [ON] [OFF] [END TURN] -*/ - -static INPUT_PORTS_START( elecdet ) - PORT_START("IN.0") // O0 pin18 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") - - PORT_START("IN.1") // O1 pin17 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.2") // O4 pin14 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") - - PORT_START("IN.3") // O6 pin12 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Suspect") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") - - // note: even though power buttons are on the matrix, they are not CPU-controlled - PORT_START("IN.4") // Vss! - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, elecdet_state, power_button, (void *)true) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("End Turn") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, elecdet_state, power_button, (void *)false) -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -WRITE_LINE_MEMBER(elecdet_state::auto_power_off) -{ - // TMS0980 auto power-off opcode - if (state) - { - m_power_on = false; - m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - } -} - - -void elecdet_state::machine_reset() -{ - m_power_on = true; -} - -void elecdet_state::machine_start() -{ - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_cache, 0, sizeof(m_display_cache)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - - m_o = 0; - m_power_on = false; - - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_cache)); - save_item(NAME(m_display_decay)); - - save_item(NAME(m_o)); - save_item(NAME(m_power_on)); -} - - -static MACHINE_CONFIG_START( elecdet, elecdet_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(elecdet_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecdet_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecdet_state, write_r)) - MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(elecdet_state, auto_power_off)) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", elecdet_state, display_decay_tick, attotime::from_msec(1)) - - MCFG_DEFAULT_LAYOUT(layout_elecdet) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( elecdet ) - ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) ) - - ROM_REGION( 1246, "maincpu:ipla", 0 ) - ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) - ROM_REGION( 1982, "maincpu:mpla", 0 ) - ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) - ROM_REGION( 352, "maincpu:opla", 0 ) - ROM_LOAD( "tms0980_elecdet_opla.pla", 0, 352, CRC(652d19c3) SHA1(75550c2b293453b6b9efed88c8cc77195a53161f) ) - ROM_REGION( 157, "maincpu:spla", 0 ) - ROM_LOAD( "tms0980_elecdet_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) -ROM_END - - -CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE ) diff --git a/src/mess/drivers/hh_tms1k.c b/src/mess/drivers/hh_tms1k.c index fe41dd32c4c..3a655fbd309 100644 --- a/src/mess/drivers/hh_tms1k.c +++ b/src/mess/drivers/hh_tms1k.c @@ -14,9 +14,18 @@ #include "sound/speaker.h" #include "amaztron.lh" +#include "bankshot.lh" +#include "cnsector.lh" #include "ebball.lh" +#include "elecdet.lh" #include "comp4.lh" +#include "mathmagi.lh" +#include "merlin.lh" #include "simon.lh" +#include "splitsec.lh" +#include "starwbc.lh" +#include "stopthie.lh" +#include "tandy12.lh" #include "tc4.lh" @@ -28,22 +37,33 @@ public: m_maincpu(*this, "maincpu"), m_inp_matrix(*this, "IN"), m_speaker(*this, "speaker"), + m_display_wait(33), m_display_maxy(1), - m_display_maxx(0), - m_display_wait(50) + m_display_maxx(0) { } + // devices required_device<cpu_device> m_maincpu; optional_ioport_array<7> m_inp_matrix; // max 7 optional_device<speaker_sound_device> m_speaker; + // misc common UINT16 m_r; UINT16 m_o; UINT16 m_inp_mux; + bool m_power_on; + UINT8 read_inputs(int columns); + DECLARE_INPUT_CHANGED_MEMBER(tms0980_power_button); + DECLARE_WRITE_LINE_MEMBER(tms0980_auto_power_off); + + virtual void machine_start(); + virtual void machine_reset(); + + // display common + int m_display_wait; int m_display_maxy; int m_display_maxx; - int m_display_wait; UINT32 m_display_state[0x20]; UINT32 m_display_cache[0x20]; @@ -51,31 +71,71 @@ public: UINT16 m_7seg_mask[0x20]; TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - bool index_is_7segled(int index); void display_update(); - UINT8 read_inputs(int columns); - // game-specific handlers + void mathmagi_display(); + DECLARE_READ8_MEMBER(mathmagi_read_k); + DECLARE_WRITE16_MEMBER(mathmagi_write_r); + DECLARE_WRITE16_MEMBER(mathmagi_write_o); + void amaztron_display(); DECLARE_READ8_MEMBER(amaztron_read_k); - DECLARE_WRITE16_MEMBER(amaztron_write_o); DECLARE_WRITE16_MEMBER(amaztron_write_r); + DECLARE_WRITE16_MEMBER(amaztron_write_o); void tc4_display(); DECLARE_READ8_MEMBER(tc4_read_k); - DECLARE_WRITE16_MEMBER(tc4_write_o); DECLARE_WRITE16_MEMBER(tc4_write_r); + DECLARE_WRITE16_MEMBER(tc4_write_o); + + DECLARE_READ8_MEMBER(elecdet_read_k); + DECLARE_WRITE16_MEMBER(elecdet_write_r); + DECLARE_WRITE16_MEMBER(elecdet_write_o); + + void starwbc_display(); + DECLARE_READ8_MEMBER(starwbc_read_k); + DECLARE_WRITE16_MEMBER(starwbc_write_r); + DECLARE_WRITE16_MEMBER(starwbc_write_o); DECLARE_READ8_MEMBER(comp4_read_k); - DECLARE_WRITE16_MEMBER(comp4_write_o); DECLARE_WRITE16_MEMBER(comp4_write_r); + DECLARE_WRITE16_MEMBER(comp4_write_o); DECLARE_READ8_MEMBER(simon_read_k); - DECLARE_WRITE16_MEMBER(simon_write_o); DECLARE_WRITE16_MEMBER(simon_write_r); + DECLARE_WRITE16_MEMBER(simon_write_o); - virtual void machine_start(); + DECLARE_READ8_MEMBER(cnsector_read_k); + DECLARE_WRITE16_MEMBER(cnsector_write_r); + DECLARE_WRITE16_MEMBER(cnsector_write_o); + + DECLARE_READ8_MEMBER(merlin_read_k); + DECLARE_WRITE16_MEMBER(merlin_write_r); + DECLARE_WRITE16_MEMBER(merlin_write_o); + + DECLARE_READ8_MEMBER(stopthief_read_k); + DECLARE_WRITE16_MEMBER(stopthief_write_r); + DECLARE_WRITE16_MEMBER(stopthief_write_o); + + void bankshot_display(); + DECLARE_READ8_MEMBER(bankshot_read_k); + DECLARE_WRITE16_MEMBER(bankshot_write_r); + DECLARE_WRITE16_MEMBER(bankshot_write_o); + + void splitsec_display(); + DECLARE_READ8_MEMBER(splitsec_read_k); + DECLARE_WRITE16_MEMBER(splitsec_write_r); + DECLARE_WRITE16_MEMBER(splitsec_write_o); + + void tandy12_display(); + DECLARE_READ8_MEMBER(tandy12_read_k); + DECLARE_WRITE16_MEMBER(tandy12_write_r); + DECLARE_WRITE16_MEMBER(tandy12_write_o); + + DECLARE_READ8_MEMBER(unk3403_read_k); + DECLARE_WRITE16_MEMBER(unk3403_write_r); + DECLARE_WRITE16_MEMBER(unk3403_write_o); }; @@ -86,10 +146,11 @@ void hh_tms1k_state::machine_start() memset(m_display_cache, 0, sizeof(m_display_cache)); memset(m_display_decay, 0, sizeof(m_display_decay)); memset(m_7seg_mask, 0, sizeof(m_7seg_mask)); - + m_o = 0; m_r = 0; m_inp_mux = 0; + m_power_on = false; // register for savestates save_item(NAME(m_display_maxy)); @@ -104,15 +165,33 @@ void hh_tms1k_state::machine_start() save_item(NAME(m_o)); save_item(NAME(m_r)); save_item(NAME(m_inp_mux)); + save_item(NAME(m_power_on)); } +void hh_tms1k_state::machine_reset() +{ + m_power_on = true; +} + /*************************************************************************** Helper Functions ***************************************************************************/ +// LED segments +enum +{ + lA = 0x01, + lB = 0x02, + lC = 0x04, + lD = 0x08, + lE = 0x10, + lF = 0x20, + lG = 0x40, + lDP = 0x80 +}; // The device strobes the outputs very fast, it is unnoticeable to the user. // To prevent flickering here, we need to simulate a decay. @@ -129,7 +208,7 @@ void hh_tms1k_state::display_update() for (int x = 0; x < m_display_maxx; x++) { // turn on powered segments - if (m_display_state[y] >> x & 1) + if (m_power_on && m_display_state[y] >> x & 1) m_display_decay[y][x] = m_display_wait; // determine active state @@ -177,7 +256,21 @@ UINT8 hh_tms1k_state::read_inputs(int columns) return k; } +INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button) +{ + m_power_on = (bool)(FPTR)param; + m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); +} +WRITE_LINE_MEMBER(hh_tms1k_state::tms0980_auto_power_off) +{ + // TMS0980 auto power-off opcode + if (state) + { + m_power_on = false; + m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + } +} /*************************************************************************** @@ -187,6 +280,185 @@ UINT8 hh_tms1k_state::read_inputs(int columns) /*************************************************************************** + APF Mathemagician + * TMS1100 MCU, labeled MP1030 + * 2 x DS8870N - Hex LED Digit Driver + * 2 x DS8861N - MOS-to-LED 5-Segment Driver + + This is a tabletop educational calculator. It came with plastic overlays + for playing different kind of games. Refer to the manual on how to use it. + In short, to start from scratch, press [SEL]. By default the device is in + calculator teaching mode. If [SEL] is followed with 1-6 and then [NXT], + one of the games is started. + + 1) Number Machine + 2) Countin' On + 3) Walk The Plank + 4) Gooey Gumdrop + 5) Football + 6) Lunar Lander + + + TODO: + - some of the led symbols are probably wrong, output PLA is unknown + - microinstructions PLA is not verified + +***************************************************************************/ + +void hh_tms1k_state::mathmagi_display() +{ + m_display_maxy = 11; + m_display_maxx = 8; + + // R0-R7: 7seg leds + for (int y = 0; y < 8; y++) + { + m_7seg_mask[y] = 0x7f; + m_display_state[y] = (m_r >> y & 1) ? ((m_o >> 1 & 0x7f) | (m_o << 7 & 0x80)) : 0; + } + + // R8: custom math symbols digit + // R9: custom equals digit + // R10: misc lamps + for (int y = 8; y < 11; y++) + m_display_state[y] = (m_r >> y & 1) ? m_o : 0; + + display_update(); +} + +READ8_MEMBER(hh_tms1k_state::mathmagi_read_k) +{ + return read_inputs(6); +} + + +WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_r) +{ + // R3,R5-R7,R9,R10: input mux + m_inp_mux = (data >> 3 & 1) | (data >> 4 & 0xe) | (data >> 5 & 0x30); + + // +others: + m_r = data; + mathmagi_display(); +} + +WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_o) +{ + // O1-O7: led segments A-G + // O0: N/C + data = (data << 1 & 0xfe) | (data >> 7 & 1); // because opla is unknown + m_o = data; +} + +/* physical button layout and labels is like this: + + ON ONE [SEL] [NXT] [?] [/] + | | [7] [8] [9] [x] + OFF TWO [4] [5] [6] [-] + PLAYERS [1] [2] [3] [+] + [0] [_] [r] [=] +*/ + +static INPUT_PORTS_START( mathmagi ) + PORT_START("IN.0") // R3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") + + PORT_START("IN.1") // R5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("_") // blank + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("r") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") + + PORT_START("IN.2") // R6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) + + PORT_START("IN.3") // R7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("NXT") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("?") // check + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") + + PORT_START("IN.4") // R9 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) + + PORT_START("IN.5") // R10 + PORT_CONFNAME( 0x01, 0x00, "Players") + PORT_CONFSETTING( 0x00, "1" ) + PORT_CONFSETTING( 0x01, "2" ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + +static const UINT16 mathmagi_output_pla[0x20] = +{ + lA+lB+lC+lD+lE+lF, // 0 + lB+lC, // 1 + lA+lB+lG+lE+lD, // 2 + lA+lB+lG+lC+lD, // 3 + lF+lB+lG+lC, // 4 + lA+lF+lG+lC+lD, // 5 + lA+lF+lG+lC+lD+lE, // 6 + lA+lB+lC, // 7 + lA+lB+lC+lD+lE+lF+lG, // 8 + lA+lB+lG+lF+lC+lD, // 9 + lA+lB+lG+lE, // question mark + lE+lG, // r + lD, // underscore? + lA+lF+lG+lE+lD, // E + lG, // - + 0, // empty + 0, // empty + lG, // lamp 4 or MATH - + lD, // lamp 3 + lF+lE+lD+lC+lG, // b + lB, // lamp 2 + lB+lG, // MATH + + lB+lC, // MATH mul + lF+lG+lB+lC+lD, // y + lA, // lamp 1 + lA+lG, // MATH div + lA+lD, // EQUALS + 0, // ? + 0, // ? + lE+lD+lC+lG, // o + 0, // ? + lA+lF+lE+lD+lC // G +}; + + +static MACHINE_CONFIG_START( mathmagi, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1100, 175000) // RC osc. R=68K, C=82pf -> ~175kHz + MCFG_TMS1XXX_OUTPUT_PLA(mathmagi_output_pla) + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, mathmagi_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, mathmagi_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, mathmagi_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_mathmagi) + + /* no video! */ + + /* no sound! */ +MACHINE_CONFIG_END + + + + + +/*************************************************************************** + Coleco Amaze-A-Tron, by Ralph Baer * TMS1100 MCU, labeled MP3405(die label too) @@ -209,7 +481,7 @@ void hh_tms1k_state::amaztron_display() m_display_state[y] = (m_r >> (y + 8) & 1) ? m_o : 0; } - // R6,R7: lamps -> lamp20, lamp21 + // R6,R7: lamps (-> lamp20,21) m_display_state[2] = m_r >> 6 & 3; display_update(); @@ -296,11 +568,10 @@ static MACHINE_CONFIG_START( amaztron, hh_tms1k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K?, C=100pf -> ~350kHz MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, amaztron_read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, amaztron_write_o)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, amaztron_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, amaztron_write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_amaztron) /* no video! */ @@ -354,6 +625,7 @@ MACHINE_CONFIG_END void hh_tms1k_state::tc4_display() { + m_display_wait = 50; m_display_maxy = 10; m_display_maxx = 9; @@ -380,13 +652,6 @@ READ8_MEMBER(hh_tms1k_state::tc4_read_k) return k; } -WRITE16_MEMBER(hh_tms1k_state::tc4_write_o) -{ - // O0-O7: leds/7segment - m_o = data; - tc4_display(); -} - WRITE16_MEMBER(hh_tms1k_state::tc4_write_r) { // R10: speaker out @@ -402,6 +667,13 @@ WRITE16_MEMBER(hh_tms1k_state::tc4_write_r) tc4_display(); } +WRITE16_MEMBER(hh_tms1k_state::tc4_write_o) +{ + // O0-O7: leds/7segment + m_o = data; + tc4_display(); +} + static INPUT_PORTS_START( tc4 ) PORT_START("IN.0") // R0 @@ -453,11 +725,10 @@ static MACHINE_CONFIG_START( tc4, hh_tms1k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf, but unknown RC curve MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, tc4_read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, tc4_write_o)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, tc4_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, tc4_write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_tc4) /* no video! */ @@ -469,6 +740,281 @@ static MACHINE_CONFIG_START( tc4, hh_tms1k_state ) MACHINE_CONFIG_END +/*************************************************************************** + + Entex Baseball + * TMS1000NLP MP0914 (die labeled MP0914A) + +***************************************************************************/ + +// inputs +static INPUT_PORTS_START( ebball ) +INPUT_PORTS_END + +// machine config +static MACHINE_CONFIG_START( ebball, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz + + MCFG_DEFAULT_LAYOUT(layout_ebball) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + +/*************************************************************************** + + Ideal Electronic Detective + * TMS0980NLL MP6100A (die labeled 0980B-00) + hardware (and concept) is very similar to Parker Bros Stop Thief + + This is an electronic board game. It requires game cards with suspect info, + and good old pen and paper to record game progress. To start the game, enter + difficulty(1-3), then number of players(1-4), then [ENTER]. Refer to the + manual for more information. + + + TODO: + - MCU clock is unknown + +***************************************************************************/ + + +READ8_MEMBER(hh_tms1k_state::elecdet_read_k) +{ + // note: the Vss row is always on + return m_inp_matrix[4]->read() | read_inputs(4); +} + +WRITE16_MEMBER(hh_tms1k_state::elecdet_write_r) +{ + m_display_maxy = 7; + m_display_maxx = 7; + + // R0-R6: select digit + UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3); + for (int y = 0; y < m_display_maxy; y++) + { + m_7seg_mask[y] = 0x7f; + m_display_state[y] = (data >> y & 1) ? o : 0; + } + + display_update(); + + // R7,R8: speaker on + m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0); +} + +WRITE16_MEMBER(hh_tms1k_state::elecdet_write_o) +{ + // O0,O1,O4,O6: input mux + m_inp_mux = (data & 3) | (data >> 2 & 4) | (data >> 3 & 8); + + // O0-O6: led segments A-G + // O7: speaker out + m_o = data; +} + + +/* physical button layout and labels is like this: + + [1] [2] [3] [SUSPECT] + [4] [5] [6] [PRIVATE QUESTION] + [7] [8] [9] [I ACCUSE] + [0] [ENTER] + [ON] [OFF] [END TURN] +*/ + +static INPUT_PORTS_START( elecdet ) + PORT_START("IN.0") // O0 pin18 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + + PORT_START("IN.1") // O1 pin17 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // O4 pin14 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + + PORT_START("IN.3") // O6 pin12 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Suspect") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + + // note: even though power buttons are on the matrix, they are not CPU-controlled + PORT_START("IN.4") // Vss! + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)true) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("End Turn") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)false) +INPUT_PORTS_END + + +static MACHINE_CONFIG_START( elecdet, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS0980, 425000) // approximation - unknown freq + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, elecdet_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, elecdet_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, elecdet_write_o)) + MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_elecdet) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + +/*************************************************************************** + + Kenner Star Wars - Electronic Battle Command + * TMS1100 MCU, labeled MP3438A + + This is a small tabletop space-dogfighting game. To start the game, + press BASIC/INTER/ADV and enter P#(number of players), then + START TURN. Refer to the official manual for more information. + +***************************************************************************/ + +void hh_tms1k_state::starwbc_display() +{ + m_display_maxy = 10; + m_display_maxx = 8; + + UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f); + for (int y = 0; y < m_display_maxy; y+=2) + { + m_display_state[y] = (m_r >> y & 1) ? o : 0; + + // R6,R8 are 7segs + if (y == 6 || y == 8) + m_7seg_mask[y] = 0x7f; + } + + display_update(); +} + +READ8_MEMBER(hh_tms1k_state::starwbc_read_k) +{ + return read_inputs(5); +} + +WRITE16_MEMBER(hh_tms1k_state::starwbc_write_r) +{ + // R0,R1,R3,R5,R7: input mux + m_inp_mux = (data & 3) | (data >> 1 & 4) | (data >> 2 & 8) | (data >> 3 & 0x10); + + // R9: piezo speaker + m_speaker->level_w(data >> 9 & 1); + + // R0,R2,R4,R6,R8: leds + m_r = data; + starwbc_display(); +} + +WRITE16_MEMBER(hh_tms1k_state::starwbc_write_o) +{ + // O0-O7: leds state + m_o = data; + starwbc_display(); +} + + + +/* physical button layout and labels is like this: + + (reconnnaissance=yellow) (tactical reaction=green) + [MAGNA] [ENEMY] [EM] [BS] [SCR] + + [BASIC] [INTER] [START TURN] [END TURN] [MOVE] [FIRE] + [ADV] [P#] [<] [^] [>] [v] + (game=blue) (maneuvers=red) +*/ + +static INPUT_PORTS_START( starwbc ) + PORT_START("IN.0") // R0 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number") + + PORT_START("IN.1") // R1 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn") + + PORT_START("IN.2") // R3 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up") + + PORT_START("IN.3") // R5 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations") + + PORT_START("IN.4") // R7 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right") +INPUT_PORTS_END + +static MACHINE_CONFIG_START( starwbc, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1100, 300000) // RC osc. R=51K, C=47pf -> ~300kHz + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, starwbc_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, starwbc_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, starwbc_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_starwbc) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + /*************************************************************************** @@ -542,11 +1088,10 @@ static MACHINE_CONFIG_START( comp4, hh_tms1k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, comp4_read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, comp4_write_o)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, comp4_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, comp4_write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_comp4) /* no video! */ @@ -572,16 +1117,6 @@ MACHINE_CONFIG_END ***************************************************************************/ - - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - READ8_MEMBER(hh_tms1k_state::simon_read_k) { return read_inputs(4); @@ -647,11 +1182,10 @@ static MACHINE_CONFIG_START( simon, hh_tms1k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=33K, C=100pf -> ~350kHz MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, simon_read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, simon_write_o)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, simon_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, simon_write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_simon) /* no video! */ @@ -665,25 +1199,683 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Parker Brothers Code Name: Sector, by Bob Doyle + * MP0905BNL ZA0379 (die labeled 0970F-05B) + + This is a tabletop submarine pursuit game. A grid board and small toy + boats are used to remember your locations (a Paint app should be ok too). + Refer to the official manual for more information, it is not a simple game. + + + TODO: + - MCU clock is unknown + +***************************************************************************/ + +READ8_MEMBER(hh_tms1k_state::cnsector_read_k) +{ + return read_inputs(5); +} + +WRITE16_MEMBER(hh_tms1k_state::cnsector_write_r) +{ + m_display_maxy = 7; + m_display_maxx = 8; + + // R0-R5: select digit (right-to-left) + for (int y = 0; y < 6; y++) + { + m_7seg_mask[y] = 0xff; + m_display_state[y] = (data >> y & 1) ? m_o : 0; + } + + // R6-R9: direction leds (-> lamp60-63) + m_display_state[6] = data >> 6 & 0xf; + + display_update(); +} + +WRITE16_MEMBER(hh_tms1k_state::cnsector_write_o) +{ + // O0-O4: input mux + m_inp_mux = data & 0x1f; + + // O0-O7: digit segments + m_o = data; +} + + + +static INPUT_PORTS_START( cnsector ) + PORT_START("IN.0") // O0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range") + + PORT_START("IN.1") // O1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // O2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall") + + PORT_START("IN.3") // O3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.4") // O4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship") +INPUT_PORTS_END + + +static MACHINE_CONFIG_START( cnsector, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, cnsector_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, cnsector_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, cnsector_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_cnsector) + + /* no video! */ + + /* no sound! */ +MACHINE_CONFIG_END + + + /*************************************************************************** - Entex Baseball - * TMS1000NLP MP0914 (die labeled MP0914A) + Parker Bros Merlin handheld computer game, by Bob Doyle + * TMS1100NLL MP3404A-N2 + + To start a game, press NEW GAME, followed by a number: + 1: Tic-Tac-Toe + 2: Music Machine + 3: Echo + 4: Blackjack 13 + 5: Magic Square + 6: Mindbender + + Refer to the official manual for more information on the games. + + + Other handhelds assumed to be on similar hardware: + - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin, + let's assume for now that the ROM contents is identical) + - Master Merlin ***************************************************************************/ -// inputs -static INPUT_PORTS_START( ebball ) +READ8_MEMBER(hh_tms1k_state::merlin_read_k) +{ + return read_inputs(4); +} + +WRITE16_MEMBER(hh_tms1k_state::merlin_write_r) +{ + /* leds: + + R0 + R1 R2 R3 + R4 R5 R6 + R7 R8 R9 + R10 + */ + m_display_maxx = 11; + m_display_state[0] = data; + display_update(); +} + +WRITE16_MEMBER(hh_tms1k_state::merlin_write_o) +{ + // O4-O6: speaker out (paralleled for increased current driving capability) + static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 }; + m_speaker->level_w(count[data >> 4 & 7]); + + // O0-O3: input mux + // O7: N/C + m_inp_mux = data & 0xf; +} + + + +static INPUT_PORTS_START( merlin ) + PORT_START("IN.0") // O0 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2") + + PORT_START("IN.1") // O1 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6") + + PORT_START("IN.2") // O2 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10") + + PORT_START("IN.3") // O3 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game") INPUT_PORTS_END -// machine config -static MACHINE_CONFIG_START( ebball, hh_tms1k_state ) + +static const INT16 merlin_speaker_levels[] = { 0, 10922, 21845, 32767 }; + + +static MACHINE_CONFIG_START( merlin, hh_tms1k_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz + MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, merlin_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, merlin_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, merlin_write_o)) - MCFG_DEFAULT_LAYOUT(layout_ebball) + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_merlin) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SPEAKER_LEVELS(4, merlin_speaker_levels) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + +/*************************************************************************** + + Parker Brothers Stop Thief, by Bob Doyle + * TMS0980NLL MP6101B (die labeled 0980B-01A) + + Stop Thief is actually a board game, the electronic device emulated here + (called Electronic Crime Scanner) is an accessory. To start a game, press + the ON button. Otherwise, it is in test-mode where you can hear all sounds. + + + TODO: + - MCU clock is unknown + - stopthiep: unable to start a game (may be intentional?) + +***************************************************************************/ + +READ8_MEMBER(hh_tms1k_state::stopthief_read_k) +{ + // note: the Vss row is always on + return m_inp_matrix[2]->read() | read_inputs(2); +} + +WRITE16_MEMBER(hh_tms1k_state::stopthief_write_r) +{ + m_display_maxy = 3; + m_display_maxx = 7; + + // R0-R2: select digit + UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7); + for (int y = 0; y < m_display_maxy; y++) + { + m_7seg_mask[y] = 0x7f; + m_display_state[y] = (data >> y & 1) ? o : 0; + } + + display_update(); + + // R3-R8: speaker on + m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0); +} + +WRITE16_MEMBER(hh_tms1k_state::stopthief_write_o) +{ + // O0,O6: input mux + m_inp_mux = (data & 1) | (data >> 5 & 2); + + // O3: speaker out + // O0-O2,O4-O7: led segments A-G + m_o = data; +} + + +/* physical button layout and labels is like this: + + [1] [2] [OFF] + [3] [4] [ON] + [5] [6] [T, TIP] + [7] [8] [A, ARREST] + [9] [0] [C, CLUE] +*/ + +static INPUT_PORTS_START( stopthief ) + PORT_START("IN.0") // O0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + + PORT_START("IN.1") // O6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") + + // note: even though power buttons are on the matrix, they are not CPU-controlled + PORT_START("IN.2") // Vss! + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)true) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)false) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( stopthief, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS0980, 425000) // approximation - unknown freq + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, stopthief_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, stopthief_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, stopthief_write_o)) + MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_stopthie) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + +/*************************************************************************** + + Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen + * TMS1400NLL MP7313-N2 (die labeled MP7313) + + Bank Shot is an electronic pool game. To select a game, repeatedly press + the [SELECT] button, then press [CUE UP] to start. Refer to the official + manual for more information. The game selections are: + 1: Straight Pool (1 player) + 2: Straight Pool (2 players) + 3: Poison Pool + 4: Trick Shots + + + TODO: + - bankshot: the cue ball led is strobed more often than other leds, + making it look brighter. We need more accurate led decay simulation + for this to work. + - MCU clock is unknown + +***************************************************************************/ + +void hh_tms1k_state::bankshot_display() +{ + m_display_maxy = 11; + m_display_maxx = 7; + + // update current state + for (int y = 0; y < m_display_maxy; y++) + m_display_state[y] = (m_r >> y & 1) ? m_o : 0; + + display_update(); +} + +READ8_MEMBER(hh_tms1k_state::bankshot_read_k) +{ + return read_inputs(2); +} + + +WRITE16_MEMBER(hh_tms1k_state::bankshot_write_r) +{ + // R0: speaker out + m_speaker->level_w(data & 1); + + // R2,R3: input mux + m_inp_mux = data >> 2 & 3; + + // R2-R10: led rows + m_r = data & ~3; + bankshot_display(); +} + +WRITE16_MEMBER(hh_tms1k_state::bankshot_write_o) +{ + // O0-O6: led columns + // O7: N/C + m_o = data; + bankshot_display(); +} + + + + +/* physical button layout and labels is like this: + (note: remember that you can rotate the display in MESS) + + [SELECT [BALL UP] [BALL OVER] + SCORE] + + ------ led display ------ + + [ANGLE] [AIM] [CUE UP + SHOOT] +*/ + +static INPUT_PORTS_START( bankshot ) + PORT_START("IN.0") // R2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Angle") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Aim") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Cue Up / Shoot") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // R3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Select / Score") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Ball Up") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Ball Over") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + + +static MACHINE_CONFIG_START( bankshot, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, bankshot_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, bankshot_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, bankshot_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_bankshot) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + +/*************************************************************************** + + Parker Brothers Split Second + * TMS1400NLL MP7314-N2 (die labeled MP7314) + + This is an electronic handheld reflex gaming device, it's straightforward + to use. The included mini-games are: + 1, 2, 3: Mad Maze* + 4, 5: Space Attack* + 6: Auto Cross + 7: Stomp + 8: Speedball + + *: higher number indicates higher difficulty + +***************************************************************************/ + + +/* display layout, where number xy is lamp R(x),O(y) + + 00 02 04 + 10 01 12 03 14 05 16 + 11 13 15 + 20 21 22 23 24 25 26 + 31 33 35 + 30 41 32 43 34 45 36 + 51 53 55 + 40 61 42 63 44 65 46 + 71 73 75 + 50 60 52 62 54 64 56 + 70 72 74 +*/ + +void hh_tms1k_state::splitsec_display() +{ + m_display_maxy = 8; + m_display_maxx = 7; + + // update current state + for (int y = 0; y < m_display_maxy; y++) + m_display_state[y] = (m_r >> y & 1) ? m_o : 0; + + display_update(); +} + +READ8_MEMBER(hh_tms1k_state::splitsec_read_k) +{ + return read_inputs(2); +} + +WRITE16_MEMBER(hh_tms1k_state::splitsec_write_r) +{ + // R8: speaker out + m_speaker->level_w(data >> 8 & 1); + + // R9,R10: input mux + m_inp_mux = data >> 9 & 3; + + // R0-R7: led rows + m_r = data; + display_update(); +} + +WRITE16_MEMBER(hh_tms1k_state::splitsec_write_o) +{ + // O0-O6: led columns + // O7: N/C + m_o = data; + splitsec_display(); +} + +static INPUT_PORTS_START( splitsec ) + PORT_START("IN.0") // R9 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // 4 separate directional buttons, hence 16way + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // R10 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( splitsec, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, splitsec_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, splitsec_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, splitsec_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_splitsec) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + + + +/*************************************************************************** + + Tandy Radio Shack Computerized Arcade (1981, 1982, 1995) + * TMS1100 CD7282SL + + This handheld contains 12 minigames. It looks and plays like "Fabulous Fred" + by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin + and Simon. Unlike Merlin and Simon, spin-offs like these were not successful. + There were releases with and without the prefix "Tandy-12", I don't know + which name was more common. Also not worth noting is that it needed five + batteries; 4 C-cells and a 9-volt. + + Some of the games require accessories included with the toy (eg. the Baseball + game is played with a board representing the playing field). To start a game, + hold the [SELECT] button, then press [START] when the game button lights up. + As always, refer to the official manual for more information. + + See below at the input defs for a list of the games. + + + TODO: + - output PLA is not verified + - microinstructions PLA is not verified + +***************************************************************************/ + +void hh_tms1k_state::tandy12_display() +{ + m_display_maxx = 13; + + // O0-O7: button lamps 1-8, R0-R3: button lamps 9-12 + m_display_state[0] = (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00); + display_update(); +} + +READ8_MEMBER(hh_tms1k_state::tandy12_read_k) +{ + return read_inputs(5); +} + +WRITE16_MEMBER(hh_tms1k_state::tandy12_write_r) +{ + // R10: speaker out + m_speaker->level_w(data >> 10 & 1); + + // R5-R9: input mux + m_inp_mux = data >> 5 & 0x1f; + + // other bits: + m_r = data; + tandy12_display(); +} + +WRITE16_MEMBER(hh_tms1k_state::tandy12_write_o) +{ + m_o = data; + tandy12_display(); +} + + +/* physical button layout and labels is like this: + + REPEAT-2 SPACE-2 + [O] OFF--ON [O] + + [purple]1 [blue]5 [l-green]9 + ORGAN TAG-IT TREASURE HUNT + + [l-orange]2 [turquoise]6 [red]10 + SONG WRITER ROULETTE COMPETE + + [pink]3 [yellow]7 [violet]11 + REPEAT BASEBALL FIRE AWAY + + [green]4 [orange]8 [brown]12 + TORPEDO REPEAT PLUS HIDE 'N SEEK + + [O] [O] [O] + START SELECT PLAY-2/HIT-7 +*/ + +static INPUT_PORTS_START( tandy12 ) + PORT_START("IN.0") // R5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("12") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("11") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("10") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + + PORT_START("IN.1") // R6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Space-2") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Play-2/Hit-7") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Select") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Start") + + PORT_START("IN.2") // R7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat-2") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.3") // R8 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") + + PORT_START("IN.4") // R9 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") +INPUT_PORTS_END + + +static const UINT16 tandy12_output_pla[0x20] = +{ + // these are certain + 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0x00, 0x00, 0x00, 0x00, + + // rest is unused? + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +static MACHINE_CONFIG_START( tandy12, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1100, 400000) // RC osc. R=39K, C=47pf -> ~400kHz + MCFG_TMS1XXX_OUTPUT_PLA(tandy12_output_pla) + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, tandy12_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, tandy12_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, tandy12_write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_tandy12) /* no video! */ @@ -697,11 +1889,112 @@ MACHINE_CONFIG_END /*************************************************************************** + TMS1100NLL MP3403 DBS 7836 SINGAPORE some game board with 7-segs. + + What old electronic game is this? + + some clues: + - it's from 1978 + - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403 + - it plays some short jingles (you need to be lucky with button mashing), + jingles feel like maybe a horse racing game, or casino + +***************************************************************************/ + +READ8_MEMBER(hh_tms1k_state::unk3403_read_k) +{ + return read_inputs(4); +} + +WRITE16_MEMBER(hh_tms1k_state::unk3403_write_r) +{ + // R4-R7: input mux + m_inp_mux = data >> 4 & 0xf; + + // R9: speaker out + m_speaker->level_w(data >> 9 & 1); + + // R10: maybe a switch or other button row? + // others: ? +} + +WRITE16_MEMBER(hh_tms1k_state::unk3403_write_o) +{ + // ? +} + +static INPUT_PORTS_START( unk3403 ) + PORT_START("IN.0") // R4 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // R5 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) + + PORT_START("IN.2") // R6 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame? + + PORT_START("IN.3") // R7 + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) +INPUT_PORTS_END + +static const UINT16 unk3403_output_pla[0x20] = +{ + /* O output PLA configuration currently unknown */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f +}; + + +static MACHINE_CONFIG_START( unk3403, hh_tms1k_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - unknown freq + MCFG_TMS1XXX_OUTPUT_PLA(unk3403_output_pla) + MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, unk3403_read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, unk3403_write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, unk3403_write_o)) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + +/*************************************************************************** + Game driver(s) ***************************************************************************/ +ROM_START( mathmagi ) + ROM_REGION( 0x800, "maincpu", 0 ) + ROM_LOAD( "mp1030", 0x0000, 0x800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_mathmagi_opla.pla", 0, 365, NO_DUMP ) +ROM_END + + ROM_START( amaztron ) ROM_REGION( 0x0800, "maincpu", 0 ) ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) ) @@ -737,6 +2030,43 @@ ROM_START( ebball ) ROM_END +ROM_START( elecdet ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) ) + + ROM_REGION( 1246, "maincpu:ipla", 0 ) + ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) + ROM_REGION( 1982, "maincpu:mpla", 0 ) + ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) + ROM_REGION( 352, "maincpu:opla", 0 ) + ROM_LOAD( "tms0980_elecdet_opla.pla", 0, 352, CRC(652d19c3) SHA1(75550c2b293453b6b9efed88c8cc77195a53161f) ) + ROM_REGION( 157, "maincpu:spla", 0 ) + ROM_LOAD( "tms0980_elecdet_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) +ROM_END + + +ROM_START( starwbc ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) ) +ROM_END + +ROM_START( starwbcp ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) ) +ROM_END + + + ROM_START( comp4 ) ROM_REGION( 0x0400, "maincpu", 0 ) ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) ) @@ -762,13 +2092,132 @@ ROM_START( simon ) ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) ) ROM_END +ROM_START( cnsector ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) ) + + ROM_REGION( 782, "maincpu:ipla", 0 ) + ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) ) + ROM_REGION( 860, "maincpu:mpla", 0 ) + ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) ) + ROM_REGION( 352, "maincpu:opla", 0 ) + ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) ) + ROM_REGION( 157, "maincpu:spla", 0 ) + ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) ) +ROM_END + + +ROM_START( merlin ) + ROM_REGION( 0x800, "maincpu", 0 ) + ROM_LOAD( "mp3404", 0x0000, 0x800, CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_merlin_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, CRC(3921b074) SHA1(12bd58e4d6676eb8c7059ef53598279e4f1a32ea) ) +ROM_END + + +ROM_START( stopthie ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) ) + + ROM_REGION( 1246, "maincpu:ipla", 0 ) + ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) + ROM_REGION( 1982, "maincpu:mpla", 0 ) + ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) + ROM_REGION( 352, "maincpu:opla", 0 ) + ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) ) + ROM_REGION( 157, "maincpu:spla", 0 ) + ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) +ROM_END + +ROM_START( stopthiep ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums) + + ROM_REGION( 1246, "maincpu:ipla", 0 ) + ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) + ROM_REGION( 1982, "maincpu:mpla", 0 ) + ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) + ROM_REGION( 352, "maincpu:opla", 0 ) + ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) ) + ROM_REGION( 157, "maincpu:spla", 0 ) + ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) +ROM_END + +ROM_START( bankshot ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) + ROM_REGION( 557, "maincpu:opla", 0 ) + ROM_LOAD( "tms1400_bankshot_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) ) +ROM_END + + +ROM_START( splitsec ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) + ROM_REGION( 557, "maincpu:opla", 0 ) + ROM_LOAD( "tms1400_splitsec_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) ) +ROM_END + + +ROM_START( tandy12 ) + ROM_REGION( 0x800, "maincpu", 0 ) + ROM_LOAD( "cd7282sl", 0x0000, 0x800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_tandy12_opla.pla", 0, 365, NO_DUMP ) +ROM_END + +ROM_START( unk3403 ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_xxx_opla.pla", 0, 365, NO_DUMP ) +ROM_END + + + + + +CONS( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) + CONS( 1979, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", GAME_SUPPORTS_SAVE ) CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", GAME_SUPPORTS_SAVE ) CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Entex", "Baseball (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE ) + +CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE ) +CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE ) + CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", GAME_SUPPORTS_SAVE ) + + +CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) +CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE ) +CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE ) +CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE ) +CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE ) + +CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE ) + +CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) diff --git a/src/mess/drivers/hh_ucom4.c b/src/mess/drivers/hh_ucom4.c new file mode 100644 index 00000000000..4a9a736c8cd --- /dev/null +++ b/src/mess/drivers/hh_ucom4.c @@ -0,0 +1,226 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + NEC uCOM4 MCU handhelds + + +***************************************************************************/ + +#include "emu.h" +#include "cpu/ucom4/ucom4.h" +#include "sound/speaker.h" + +#include "tmpacman.lh" + + +class hh_ucom4_state : public driver_device +{ +public: + hh_ucom4_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_inp_matrix(*this, "IN"), + m_speaker(*this, "speaker"), + m_display_wait(33), + m_display_maxy(1), + m_display_maxx(0) + { } + + // devices + required_device<cpu_device> m_maincpu; + optional_ioport_array<4> m_inp_matrix; // max 4 + optional_device<speaker_sound_device> m_speaker; + + // misc common + UINT16 m_inp_mux; + + virtual void machine_start(); + virtual void machine_reset(); + + // display common + int m_display_wait; + int m_display_maxy; + int m_display_maxx; + + UINT32 m_grid; + UINT32 m_plate; + + UINT32 m_display_state[0x20]; + UINT32 m_display_cache[0x20]; + UINT8 m_display_decay[0x20][0x20]; + UINT16 m_7seg_mask[0x20]; + + TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); + void display_update(); + + // game-specific handlers + +}; + + +void hh_ucom4_state::machine_start() +{ + // zerofill + memset(m_display_state, 0, sizeof(m_display_state)); + memset(m_display_cache, 0, sizeof(m_display_cache)); + memset(m_display_decay, 0, sizeof(m_display_decay)); + memset(m_7seg_mask, 0, sizeof(m_7seg_mask)); + + m_inp_mux = 0; + m_grid = 0; + m_plate = 0; + + // register for savestates + save_item(NAME(m_display_maxy)); + save_item(NAME(m_display_maxx)); + save_item(NAME(m_display_wait)); + + save_item(NAME(m_display_state)); + save_item(NAME(m_display_cache)); + save_item(NAME(m_display_decay)); + save_item(NAME(m_7seg_mask)); + + save_item(NAME(m_inp_mux)); + save_item(NAME(m_grid)); + save_item(NAME(m_plate)); +} + + +void hh_ucom4_state::machine_reset() +{ +} + +/*************************************************************************** + + Helper Functions + +***************************************************************************/ + +// LED segments +#if 0 +enum +{ + lA = 0x01, + lB = 0x02, + lC = 0x04, + lD = 0x08, + lE = 0x10, + lF = 0x20, + lG = 0x40, + lDP = 0x80 +}; +#endif + +// The device strobes the outputs very fast, it is unnoticeable to the user. +// To prevent flickering here, we need to simulate a decay. + + +void hh_ucom4_state::display_update() +{ + UINT32 active_state[0x20]; + + for (int y = 0; y < m_display_maxy; y++) + { + active_state[y] = 0; + + for (int x = 0; x < m_display_maxx; x++) + { + // turn on powered segments + if (m_display_state[y] >> x & 1) + m_display_decay[y][x] = m_display_wait; + + // determine active state + int ds = (m_display_decay[y][x] != 0) ? 1 : 0; + active_state[y] |= (ds << x); + } + } + + // on difference, send to output + for (int y = 0; y < m_display_maxy; y++) + if (m_display_cache[y] != active_state[y]) + { + if (m_7seg_mask[y] != 0) + output_set_digit_value(y, active_state[y] & m_7seg_mask[y]); + + const int mul = (m_display_maxx <= 10) ? 10 : 100; + for (int x = 0; x < m_display_maxx; x++) + output_set_lamp_value(y * mul + x, active_state[y] >> x & 1); + } + + memcpy(m_display_cache, active_state, sizeof(m_display_cache)); +} + +TIMER_DEVICE_CALLBACK_MEMBER(hh_ucom4_state::display_decay_tick) +{ + // slowly turn off unpowered segments + for (int y = 0; y < m_display_maxy; y++) + for (int x = 0; x < m_display_maxx; x++) + if (!(m_display_state[y] >> x & 1) && m_display_decay[y][x] != 0) + m_display_decay[y][x]--; + + display_update(); +} + + + +/*************************************************************************** + + Minidrivers (I/O, Inputs, Machine Config) + +***************************************************************************/ + +/*************************************************************************** + + Tomytronic Pac-Man (manufactured in Japan) + * boards are labeled TN-08 2E108E01 + * NEC uCOM-43 MCU, labeled D553C 160 + * cyan/red/green VFD display NEC FIP8AM18T + * bright yellow round casing + + known releases: + - Japan: Puck Man + - USA: Pac Man + - UK: Puckman (Tomy), and also as Munchman, published by Grandstand + - Australia: Pac Man-1, published by Futuretronics + +***************************************************************************/ + +static INPUT_PORTS_START( tmpacman ) +INPUT_PORTS_END + + +static MACHINE_CONFIG_START( tmpacman, hh_ucom4_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_430kHz) + + MCFG_DEFAULT_LAYOUT(layout_tmpacman) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( tmpacman ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "d553c-160", 0x0000, 0x0800, CRC(b21a8af7) SHA1(e3122be1873ce76a4067386bf250802776f0c2f9) ) +ROM_END + + +CONS( 1981, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING ) diff --git a/src/mess/drivers/mathmagi.c b/src/mess/drivers/mathmagi.c deleted file mode 100644 index 2fe46bfaac4..00000000000 --- a/src/mess/drivers/mathmagi.c +++ /dev/null @@ -1,273 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - APF Mathemagician - * TMS1100 MP1030 - MCU - * 2 x DS8870N - Hex LED Digit Driver - * 2 x DS8861N - MOS-to-LED 5-Segment Driver - - This is a tabletop educational calculator. It came with plastic overlays - for playing different kind of games. Refer to the manual on how to use it. - In short, to start from scratch, press [SEL]. By default the device is in - calculator teaching mode. If [SEL] is followed with 1-6 and then [NXT], - one of the games is started. - - 1) Number Machine - 2) Countin' On - 3) Walk The Plank - 4) Gooey Gumdrop - 5) Football - 6) Lunar Lander - - - TODO: - - some of the led symbols are probably wrong, output PLA is unknown - - microinstructions PLA is not verified - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" - -#include "mathmagi.lh" - -// master clock is a single stage RC oscillator: R=68K, C=82pf, -// according to the TMS 1000 series data manual this is around 200kHz -#define MASTER_CLOCK (200000) - - -class mathmagi_state : public driver_device -{ -public: - mathmagi_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN") - { } - - required_device<tms1xxx_cpu_device> m_maincpu; - required_ioport_array<6> m_button_matrix; - - UINT16 m_o; - UINT16 m_r; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - virtual void machine_start(); -}; - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(mathmagi_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 6; i++) - { - const int ki[6] = { 3, 5, 6, 7, 9, 10 }; - if (m_r >> ki[i] & 1) - k |= m_button_matrix[i]->read(); - } - - return k; -} - -WRITE16_MEMBER(mathmagi_state::write_o) -{ - // O1-O7: led segments A-G - // O0: N/C - m_o = data; -} - -WRITE16_MEMBER(mathmagi_state::write_r) -{ - // R3,R5-R7,R9,R10: input mux - // and outputs: - for (int i = 0; i < 11; i++) - { - if (data >> i & 1) - { - // R8: custom math symbols digit - // R9: custom equals digit - // R10: lamps - if (i >= 8) - for (int j = 0; j < 8; j++) - output_set_lamp_value(i*10 + j, m_o >> j & 1); - - // R0-R7: 7seg leds - else - output_set_digit_value(i, m_o >> 1 & 0x7f); - } - } - - m_r = data; -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -/* physical button layout and labels is like this: - - ON ONE [SEL] [NXT] [?] [/] - | | [7] [8] [9] [x] - OFF TWO [4] [5] [6] [-] - PLAYERS [1] [2] [3] [+] - [0] [_] [r] [=] -*/ - -static INPUT_PORTS_START( mathmagi ) - PORT_START("IN.0") // R3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") - - PORT_START("IN.1") // R5 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("_") // blank - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("r") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") - - PORT_START("IN.2") // R6 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) - - PORT_START("IN.3") // R7 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("NXT") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("?") // check - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") - - PORT_START("IN.4") // R9 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) - - PORT_START("IN.5") // R10 - PORT_CONFNAME( 0x01, 0x00, "Players") - PORT_CONFSETTING( 0x00, "1" ) - PORT_CONFSETTING( 0x01, "2" ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void mathmagi_state::machine_start() -{ - m_o = 0; - m_r = 0; - - save_item(NAME(m_o)); - save_item(NAME(m_r)); -} - -// LED segments A-G -enum -{ - lA = 0x02, - lB = 0x04, - lC = 0x08, - lD = 0x10, - lE = 0x20, - lF = 0x40, - lG = 0x80 -}; - -static const UINT16 mathmagi_output_pla[0x20] = -{ - lA+lB+lC+lD+lE+lF, // 0 - lB+lC, // 1 - lA+lB+lG+lE+lD, // 2 - lA+lB+lG+lC+lD, // 3 - lF+lB+lG+lC, // 4 - lA+lF+lG+lC+lD, // 5 - lA+lF+lG+lC+lD+lE, // 6 - lA+lB+lC, // 7 - lA+lB+lC+lD+lE+lF+lG, // 8 - lA+lB+lG+lF+lC+lD, // 9 - lA+lB+lG+lE, // question mark - lE+lG, // r - lD, // underscore? - lA+lF+lG+lE+lD, // E - lG, // - - 0, // empty - 0, // empty - lG, // lamp 4 or MATH - - lD, // lamp 3 - lF+lE+lD+lC+lG, // b - lB, // lamp 2 - lB+lG, // MATH + - lB+lC, // MATH mul - lF+lG+lB+lC+lD, // y - lA, // lamp 1 - lA+lG, // MATH div - lA+lD, // EQUALS - 0, // ? - 0, // ? - lE+lD+lC+lG, // o - 0, // ? - lA+lF+lE+lD+lC // G -}; - - -static MACHINE_CONFIG_START( mathmagi, mathmagi_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) - MCFG_TMS1XXX_OUTPUT_PLA(mathmagi_output_pla) - MCFG_TMS1XXX_READ_K_CB(READ8(mathmagi_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mathmagi_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mathmagi_state, write_r)) - - MCFG_DEFAULT_LAYOUT(layout_mathmagi) - - /* no video! */ - - /* no sound! */ -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( mathmagi ) - ROM_REGION( 0x800, "maincpu", 0 ) - ROM_LOAD( "mp1030", 0x0000, 0x800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_mathmagi_opla.pla", 0, 365, NO_DUMP ) -ROM_END - - -COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) diff --git a/src/mess/drivers/merlin.c b/src/mess/drivers/merlin.c deleted file mode 100644 index f47dfd8ac66..00000000000 --- a/src/mess/drivers/merlin.c +++ /dev/null @@ -1,199 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Wilbert Pol, hap -/*************************************************************************** - - Parker Bros Merlin handheld computer game, by Bob Doyle - * TMS1100NLL MP3404A-N2 (has internal ROM) - - To start a game, press NEW GAME, followed by a number: - 1: Tic-Tac-Toe - 2: Music Machine - 3: Echo - 4: Blackjack 13 - 5: Magic Square - 6: Mindbender - - Refer to the official manual for more information on the games. - - - Other handhelds assumed to be on similar hardware: - - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin, - let's assume for now that the ROM contents is identical) - - Master Merlin - - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "merlin.lh" // clickable - -// master clock is a single stage RC oscillator: R=33K, C=100pf, -// according to the TMS 1000 series data manual this is around 350kHz -#define MASTER_CLOCK (350000) - - -class merlin_state : public driver_device -{ -public: - merlin_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - virtual void machine_start(); - -protected: - required_device<cpu_device> m_maincpu; - required_ioport_array<4> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_o; -}; - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(merlin_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 4; i++) - if (m_o >> i & 1) - k |= m_button_matrix[i]->read(); - - return k; -} - -WRITE16_MEMBER(merlin_state::write_o) -{ - /* The speaker is connected to O4 through O6. The 3 outputs are paralleled for - increased current driving capability. They are passed thru a 220 ohm resistor - and then to the speaker, which has the other side grounded. The software then - toggles these lines to make sounds and noises. (There is no audio generator - other than toggling it with a software delay between to make tones). */ - static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 }; - m_speaker->level_w(count[data >> 4 & 7]); - - // O0-O3: input mux - // O7: N/C - m_o = data; -} - -WRITE16_MEMBER(merlin_state::write_r) -{ - /* LEDs: - - R0 - R1 R2 R3 - R4 R5 R6 - R7 R8 R9 - R10 - */ - for (int i = 0; i < 11; i++) - output_set_lamp_value(i, data >> i & 1); -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -static INPUT_PORTS_START( merlin ) - PORT_START("IN.0") // O0 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2") - - PORT_START("IN.1") // O1 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6") - - PORT_START("IN.2") // O2 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10") - - PORT_START("IN.3") // O3 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game") -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void merlin_state::machine_start() -{ - m_o = 0; - save_item(NAME(m_o)); -} - -static const INT16 speaker_levels[] = { 0, 10922, 21845, 32767 }; - - -static MACHINE_CONFIG_START( merlin, merlin_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(merlin_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(merlin_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(merlin_state, write_r)) - - MCFG_DEFAULT_LAYOUT(layout_merlin) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SPEAKER_LEVELS(4, speaker_levels) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( merlin ) - ROM_REGION( 0x800, "maincpu", 0 ) - ROM_LOAD( "mp3404", 0x0000, 0x800, CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_merlin_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, CRC(3921b074) SHA1(12bd58e4d6676eb8c7059ef53598279e4f1a32ea) ) -ROM_END - - -CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE ) diff --git a/src/mess/drivers/splitsec.c b/src/mess/drivers/splitsec.c deleted file mode 100644 index ced46f6a775..00000000000 --- a/src/mess/drivers/splitsec.c +++ /dev/null @@ -1,363 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Parker Brothers Split Second - * TMS1400NLL MP7314-N2 (die labeled MP7314) - - This is an electronic handheld reflex gaming device, it's straightforward - to use. The included mini-games are: - 1, 2, 3: Mad Maze* - 4, 5: Space Attack* - 6: Auto Cross - 7: Stomp - 8: Speedball - - *: higher number indicates higher difficulty - - ----------------------------------------------------------------------------- - - Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen - * TMS1400NLL MP7313-N2 (die labeled MP7313) - - Bank Shot is an electronic pool game. To select a game, repeatedly press - the [SELECT] button, then press [CUE UP] to start. Refer to the official - manual for more information. The game selections are: - 1: Straight Pool (1 player) - 2: Straight Pool (2 players) - 3: Poison Pool - 4: Trick Shots - - - TODO: - - bankshot: the cue ball led is strobed more often than other leds, - making it look brighter. We need more accurate led decay simulation - for this to work. - - MCU clock is unknown - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "splitsec.lh" -#include "bankshot.lh" - -// The master clock is a single stage RC oscillator: R=24K, C=100pf, -// according to the TMS 1000 series data manual this is around 375kHz. -// However, this sounds too low-pitched and runs too slow when compared -// to recordings, maybe the RC osc curve is different for TMS1400? - -// so for now, the value below is an approximation -#define MASTER_CLOCK (475000) - - -class splitsec_state : public driver_device -{ -public: - splitsec_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<2> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT8 m_input_mux; - UINT16 m_r; - UINT16 m_o; - - UINT16 m_display_state[0x10]; - UINT16 m_display_cache[0x10]; - UINT8 m_display_decay[0x100]; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(splitsec_write_r); - DECLARE_WRITE16_MEMBER(bankshot_write_r); - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - - virtual void machine_start(); -}; - - - -/*************************************************************************** - - LED Display - -***************************************************************************/ - -// The device strobes the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -/* display layout, where number xy is lamp R(x),O(y) - - Split Second: - - 00 02 04 - 10 01 12 03 14 05 16 - 11 13 15 - 20 21 22 23 24 25 26 - 31 33 35 - 30 41 32 43 34 45 36 - 51 53 55 - 40 61 42 63 44 65 46 - 71 73 75 - 50 60 52 62 54 64 56 - 70 72 74 - - - Bank Shot: pretty much linear, see bankshot.lay - -*/ - -void splitsec_state::display_update() -{ - UINT16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) - { - // update current state - m_display_state[i] = (m_r >> i & 1) ? m_o : 0; - - active_state[i] = 0; - - for (int j = 0; j < 0x10; j++) - { - int di = j << 4 | i; - - // turn on powered segments - if (m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; - - // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); - } - } - - // on difference, send to output - for (int i = 0; i < 0x10; i++) - if (m_display_cache[i] != active_state[i]) - { - for (int j = 0; j < 8; j++) - output_set_lamp_value(i*10 + j, active_state[i] >> j & 1); - } - - memcpy(m_display_cache, active_state, sizeof(m_display_cache)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(splitsec_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; - - display_update(); -} - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(splitsec_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 2; i++) - if (m_input_mux >> i & 1) - k |= m_button_matrix[i]->read(); - - return k; -} - -WRITE16_MEMBER(splitsec_state::write_o) -{ - // O0-O6: led columns - // O7: N/C - m_o = data; - display_update(); -} - -WRITE16_MEMBER(splitsec_state::splitsec_write_r) -{ - // R8: speaker out - m_speaker->level_w(data >> 8 & 1); - - // R9,R10: input mux - m_input_mux = data >> 9 & 3; - - // R0-R7: led rows - m_r = data & 0xff; - display_update(); -} - -WRITE16_MEMBER(splitsec_state::bankshot_write_r) -{ - // R0: speaker out - m_speaker->level_w(data & 1); - - // R2,R3: input mux - m_input_mux = data >> 2 & 3; - - // R2-R10: led rows - m_r = data & ~3; - display_update(); -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -static INPUT_PORTS_START( splitsec ) - PORT_START("IN.0") // R9 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // 4 separate directional buttons, hence 16way - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.1") // R10 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - -/* bankshot physical button layout and labels is like this: - (note: remember that you can rotate the display in MESS) - - [SELECT [BALL UP] [BALL OVER] - SCORE] - - ------ led display ------ - - [ANGLE] [AIM] [CUE UP - SHOOT] -*/ - -static INPUT_PORTS_START( bankshot ) - PORT_START("IN.0") // R2 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Angle") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Aim") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Cue Up / Shoot") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.1") // R3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Select / Score") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Ball Up") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Ball Over") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void splitsec_state::machine_start() -{ - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_cache, 0, sizeof(m_display_cache)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - - m_input_mux = 0; - m_r = 0; - m_o = 0; - - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_cache)); - save_item(NAME(m_display_decay)); - - save_item(NAME(m_input_mux)); - save_item(NAME(m_r)); - save_item(NAME(m_o)); -} - - -static MACHINE_CONFIG_START( splitsec, splitsec_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1400, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(splitsec_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(splitsec_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, splitsec_write_r)) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", splitsec_state, display_decay_tick, attotime::from_msec(1)) - - MCFG_DEFAULT_LAYOUT(layout_splitsec) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_DERIVED( bankshot, splitsec ) - - /* basic machine hardware */ - MCFG_CPU_MODIFY("maincpu") - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, bankshot_write_r)) - - MCFG_DEFAULT_LAYOUT(layout_bankshot) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( splitsec ) - ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) - ROM_REGION( 557, "maincpu:opla", 0 ) - ROM_LOAD( "tms1400_splitsec_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) ) -ROM_END - -ROM_START( bankshot ) - ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) - ROM_REGION( 557, "maincpu:opla", 0 ) - ROM_LOAD( "tms1400_bankshot_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) ) -ROM_END - - -CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE ) -CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE ) diff --git a/src/mess/drivers/starwbc.c b/src/mess/drivers/starwbc.c deleted file mode 100644 index 2235a73f9b4..00000000000 --- a/src/mess/drivers/starwbc.c +++ /dev/null @@ -1,297 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Kenner Star Wars - Electronic Battle Command - * TMS1100 MCU, labeled MP3438A - - This is a small tabletop space-dogfighting game. To start the game, - press BASIC/INTER/ADV and enter P#(number of players), then - START TURN. Refer to the official manual for more information. - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "starwbc.lh" - -// master clock is a single stage RC oscillator: R=51K, C=47pf, -// according to the TMS 1000 series data manual this is around 350kHz -#define MASTER_CLOCK (350000) - - -class starwbc_state : public driver_device -{ -public: - starwbc_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<5> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_r; - UINT16 m_o; - - UINT16 m_display_state[0x10]; - UINT16 m_display_cache[0x10]; - UINT8 m_display_decay[0x100]; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - void prepare_and_update(); - - virtual void machine_start(); -}; - - - -/*************************************************************************** - - LED Display - -***************************************************************************/ - -// The device strobes the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -void starwbc_state::display_update() -{ - UINT16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) - { - active_state[i] = 0; - - for (int j = 0; j < 0x10; j++) - { - int di = j << 4 | i; - - // turn on powered segments - if (m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; - - // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); - } - } - - // on difference, send to output - for (int i = 0; i < 0x10; i++) - if (m_display_cache[i] != active_state[i]) - { - output_set_digit_value(i, active_state[i]); - - for (int j = 0; j < 8; j++) - output_set_lamp_value(i*10 + j, active_state[i] >> j & 1); - } - - memcpy(m_display_cache, active_state, sizeof(m_display_cache)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; - - display_update(); -} - -void starwbc_state::prepare_and_update() -{ - UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f); - const UINT8 mask[5] = { 0x30, 0xff, 0xff, 0x7f, 0x7f }; - - // R0,R2,R4,R6,R8 - for (int i = 0; i < 5; i++) - m_display_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0; - - display_update(); -} - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(starwbc_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 5; i++) - { - const int ki[5] = { 0, 1, 3, 5, 7 }; - if (m_r >> ki[i] & 1) - k |= m_button_matrix[i]->read(); - } - - return k; -} - -WRITE16_MEMBER(starwbc_state::write_r) -{ - // R0,R2,R4: select lamp row - // R6,R8: select digit - // R0,R1,R3,R5,R7: input mux - // R9: piezo speaker - m_speaker->level_w(data >> 9 & 1); - - m_r = data; - prepare_and_update(); -} - -WRITE16_MEMBER(starwbc_state::write_o) -{ - // O0-O7: leds state - m_o = data; - prepare_and_update(); -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -/* physical button layout and labels is like this: - - (reconnnaissance=yellow) (tactical reaction=green) - [MAGNA] [ENEMY] [EM] [BS] [SCR] - - [BASIC] [INTER] [START TURN] [END TURN] [MOVE] [FIRE] - [ADV] [P#] [<] [^] [>] [v] - (game=blue) (maneuvers=red) */ - -static INPUT_PORTS_START( starwbc ) - PORT_START("IN.0") // R0 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number") - - PORT_START("IN.1") // R1 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn") - - PORT_START("IN.2") // R3 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up") - - PORT_START("IN.3") // R5 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations") - - PORT_START("IN.4") // R7 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right") -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void starwbc_state::machine_start() -{ - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_cache, 0, sizeof(m_display_cache)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - - m_r = 0; - m_o = 0; - - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_cache)); - save_item(NAME(m_display_decay)); - - save_item(NAME(m_r)); - save_item(NAME(m_o)); -} - - -static MACHINE_CONFIG_START( starwbc, starwbc_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(starwbc_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r)) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", starwbc_state, display_decay_tick, attotime::from_msec(1)) - - MCFG_DEFAULT_LAYOUT(layout_starwbc) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( starwbc ) - ROM_REGION( 0x0800, "maincpu", 0 ) - ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) ) -ROM_END - -ROM_START( starwbcp ) - ROM_REGION( 0x0800, "maincpu", 0 ) - ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) ) -ROM_END - - -CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE ) -CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE ) diff --git a/src/mess/drivers/stopthie.c b/src/mess/drivers/stopthie.c deleted file mode 100644 index f07dd1457f3..00000000000 --- a/src/mess/drivers/stopthie.c +++ /dev/null @@ -1,313 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Parker Brothers Stop Thief, by Bob Doyle - * TMS0980NLL MP6101B (die labeled 0980B-01A) - - Stop Thief is actually a board game, the electronic device emulated here - (called Electronic Crime Scanner) is an accessory. To start a game, press - the ON button. Otherwise, it is in test-mode where you can hear all sounds. - - - TODO: - - MCU clock is unknown - - stopthiep: unable to start a game (may be intentional?) - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "stopthie.lh" - -// master clock is unknown, the value below is an approximation -#define MASTER_CLOCK (425000) - - -class stopthief_state : public driver_device -{ -public: - stopthief_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<3> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_o; - bool m_power_on; - - UINT16 m_display_state[0x10]; - UINT16 m_display_cache[0x10]; - UINT8 m_display_decay[0x100]; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - DECLARE_INPUT_CHANGED_MEMBER(power_button); - DECLARE_WRITE_LINE_MEMBER(auto_power_off); - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - - virtual void machine_reset(); - virtual void machine_start(); -}; - - - -/*************************************************************************** - - LED Display - -***************************************************************************/ - -// The device strobes the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -void stopthief_state::display_update() -{ - UINT16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) - { - active_state[i] = 0; - - for (int j = 0; j < 0x10; j++) - { - int di = j << 4 | i; - - // turn on powered segments - if (m_power_on && m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; - - // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); - } - } - - // on difference, send to output - for (int i = 0; i < 0x10; i++) - if (m_display_cache[i] != active_state[i]) - output_set_digit_value(i, active_state[i]); - - memcpy(m_display_cache, active_state, sizeof(m_display_cache)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; - - display_update(); -} - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(stopthief_state::read_k) -{ - // the Vss row is always on - UINT8 k = m_button_matrix[2]->read(); - - // read selected button rows - for (int i = 0; i < 2; i++) - { - const int ki[2] = { 0, 6 }; - if (m_o >> ki[i] & 1) - k |= m_button_matrix[i]->read(); - } - - return k; -} - -WRITE16_MEMBER(stopthief_state::write_r) -{ - // R0-R2: select digit - UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f; - for (int i = 0; i < 3; i++) - m_display_state[i] = (data >> i & 1) ? o : 0; - - display_update(); - - // R3-R8: speaker on - m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0); -} - -WRITE16_MEMBER(stopthief_state::write_o) -{ - // O0,O6: input mux - // O3: speaker out - // O0-O2,O4-O7: led segments A-G - m_o = data; -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -INPUT_CHANGED_MEMBER(stopthief_state::power_button) -{ - m_power_on = (bool)(FPTR)param; - m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); -} - -/* physical button layout and labels is like this: - - [1] [2] [OFF] - [3] [4] [ON] - [5] [6] [T, TIP] - [7] [8] [A, ARREST] - [9] [0] [C, CLUE] -*/ - -static INPUT_PORTS_START( stopthief ) - PORT_START("IN.0") // O0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") - - PORT_START("IN.1") // O6 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") - - // note: even though power buttons are on the matrix, they are not CPU-controlled - PORT_START("IN.2") // Vss! - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, stopthief_state, power_button, (void *)true) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, stopthief_state, power_button, (void *)false) -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -WRITE_LINE_MEMBER(stopthief_state::auto_power_off) -{ - // TMS0980 auto power-off opcode - if (state) - { - m_power_on = false; - m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - } -} - - -void stopthief_state::machine_reset() -{ - m_power_on = true; -} - -void stopthief_state::machine_start() -{ - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_cache, 0, sizeof(m_display_cache)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - - m_o = 0; - m_power_on = false; - - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_cache)); - save_item(NAME(m_display_decay)); - - save_item(NAME(m_o)); - save_item(NAME(m_power_on)); -} - - -static MACHINE_CONFIG_START( stopthief, stopthief_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK) - MCFG_TMS1XXX_READ_K_CB(READ8(stopthief_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(stopthief_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(stopthief_state, write_r)) - MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(stopthief_state, auto_power_off)) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", stopthief_state, display_decay_tick, attotime::from_msec(1)) - - MCFG_DEFAULT_LAYOUT(layout_stopthie) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( stopthie ) - ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) ) - - ROM_REGION( 1246, "maincpu:ipla", 0 ) - ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) - ROM_REGION( 1982, "maincpu:mpla", 0 ) - ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) - ROM_REGION( 352, "maincpu:opla", 0 ) - ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) ) - ROM_REGION( 157, "maincpu:spla", 0 ) - ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) -ROM_END - -ROM_START( stopthiep ) - ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums) - - ROM_REGION( 1246, "maincpu:ipla", 0 ) - ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) - ROM_REGION( 1982, "maincpu:mpla", 0 ) - ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) - ROM_REGION( 352, "maincpu:opla", 0 ) - ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) ) - ROM_REGION( 157, "maincpu:spla", 0 ) - ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) -ROM_END - - -CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE ) -CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) diff --git a/src/mess/drivers/tandy12.c b/src/mess/drivers/tandy12.c deleted file mode 100644 index cbe5a33038b..00000000000 --- a/src/mess/drivers/tandy12.c +++ /dev/null @@ -1,229 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Tandy Radio Shack Computerized Arcade (1981, 1982, 1995) - * TMS1100 CD7282SL - - This handheld contains 12 minigames. It looks and plays like "Fabulous Fred" - by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin - and Simon. Unlike Merlin and Simon, spin-offs like these were not successful. - There were releases with and without the prefix "Tandy-12", I don't know - which name was more common. Also not worth noting is that it needed five - batteries; 4 C-cells and a 9-volt. - - Some of the games require accessories included with the toy (eg. the Baseball - game is played with a board representing the playing field). To start a game, - hold the [SELECT] button, then press [START] when the game button lights up. - As always, refer to the official manual for more information. - - See below at the input defs for a list of the games. - - - TODO: - - output PLA is not verified - - microinstructions PLA is not verified - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -#include "tandy12.lh" // clickable - -// master clock is a single stage RC oscillator: R=39K, C=47pf, -// according to the TMS 1000 series data manual this is around 400kHz -#define MASTER_CLOCK (400000) - - -class tandy12_state : public driver_device -{ -public: - tandy12_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<tms1xxx_cpu_device> m_maincpu; - required_ioport_array<5> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_r; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - virtual void machine_start(); -}; - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -READ8_MEMBER(tandy12_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 5; i++) - if (m_r >> (i+5) & 1) - k |= m_button_matrix[i]->read(); - - return k; -} - -WRITE16_MEMBER(tandy12_state::write_o) -{ - // O0-O7: button lamps 1-8 - for (int i = 0; i < 8; i++) - output_set_lamp_value(i+1, data >> i & 1); -} - -WRITE16_MEMBER(tandy12_state::write_r) -{ - // R0-R3: button lamps 9-12 - for (int i = 0; i < 4; i++) - output_set_lamp_value(i+1 + 8, data >> i & 1); - - // R10: speaker out - m_speaker->level_w(data >> 10 & 1); - - // R5-R9: input mux - m_r = data; -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -/* physical button layout and labels is like this: - - REPEAT-2 SPACE-2 - [O] OFF--ON [O] - - [purple]1 [blue]5 [l-green]9 - ORGAN TAG-IT TREASURE HUNT - - [l-orange]2 [turquoise]6 [red]10 - SONG WRITER ROULETTE COMPETE - - [pink]3 [yellow]7 [violet]11 - REPEAT BASEBALL FIRE AWAY - - [green]4 [orange]8 [brown]12 - TORPEDO REPEAT PLUS HIDE 'N SEEK - - [O] [O] [O] - START SELECT PLAY-2/HIT-7 -*/ - -static INPUT_PORTS_START( tandy12 ) - PORT_START("IN.0") // R5 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("12") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("11") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("10") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") - - PORT_START("IN.1") // R6 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Space-2") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Play-2/Hit-7") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Select") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Start") - - PORT_START("IN.2") // R7 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat-2") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("IN.3") // R8 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") - - PORT_START("IN.4") // R9 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void tandy12_state::machine_start() -{ - m_r = 0; - save_item(NAME(m_r)); -} - - -static const UINT16 tandy12_output_pla[0x20] = -{ - // these are certain - 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, - 0x80, 0x00, 0x00, 0x00, 0x00, - - // rest is unused? - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - - -static MACHINE_CONFIG_START( tandy12, tandy12_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) - MCFG_TMS1XXX_OUTPUT_PLA(tandy12_output_pla) - MCFG_TMS1XXX_READ_K_CB(READ8(tandy12_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tandy12_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tandy12_state, write_r)) - - MCFG_DEFAULT_LAYOUT(layout_tandy12) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( tandy12 ) - ROM_REGION( 0x800, "maincpu", 0 ) - ROM_LOAD( "cd7282sl", 0x0000, 0x800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_tandy12_opla.pla", 0, 365, NO_DUMP ) -ROM_END - - -CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE ) diff --git a/src/mess/drivers/unk3403.c b/src/mess/drivers/unk3403.c deleted file mode 100644 index cf1fc6391c0..00000000000 --- a/src/mess/drivers/unk3403.c +++ /dev/null @@ -1,211 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - TMS1100NLL MP3403 DBS 7836 SINGAPORE some game board with 7-segs. - - What old electronic game is this? - - some clues: - - it's from 1978 - - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403 - - it plays some short jingles (you need to be lucky with button mashing), - jingles feel like maybe a horse racing game - -***************************************************************************/ - -#include "emu.h" -#include "cpu/tms0980/tms0980.h" -#include "sound/speaker.h" - -// master clock is unknown, the value below is an approximation -#define MASTER_CLOCK (350000) - - -class unk3403_state : public driver_device -{ -public: - unk3403_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_button_matrix(*this, "IN"), - m_speaker(*this, "speaker") - { } - - required_device<cpu_device> m_maincpu; - required_ioport_array<4> m_button_matrix; - required_device<speaker_sound_device> m_speaker; - - UINT16 m_r; - UINT16 m_o; - - DECLARE_READ8_MEMBER(read_k); - DECLARE_WRITE16_MEMBER(write_o); - DECLARE_WRITE16_MEMBER(write_r); - - void leds_update(); - - virtual void machine_start(); -}; - - - -/*************************************************************************** - - I/O - -***************************************************************************/ - -void unk3403_state::leds_update() -{ - // show debug clues - static UINT8 leds[0x10] = { 0 }; - char msg[0x100] = { 0 }; - char dig[0x100] = { 0 }; - sprintf(msg, "R, *R, O[R]"); - - for (int i = 0; i < 11; i++) - { - if (m_r >> i & 1) - { - leds[i]=m_o; - } - sprintf(dig, "\n %X %c %02X",i, (m_r >> i & 1) ? 'X' : '_', leds[i]); - strcat(msg, dig); - } - - popmessage("%s", msg); -} - -READ8_MEMBER(unk3403_state::read_k) -{ - UINT8 k = 0; - - // read selected button rows - for (int i = 0; i < 4; i++) - { - if (m_r >> (i + 4) & 1) - k |= m_button_matrix[i]->read(); - } - - return k; -} - -WRITE16_MEMBER(unk3403_state::write_r) -{ - // R4-R7: input mux - // R10: maybe a switch or other button row? - // R9: speaker out - m_speaker->level_w(data >> 9 & 1); - - // others: ? - m_r = data; - leds_update(); -} - -WRITE16_MEMBER(unk3403_state::write_o) -{ - // ? - m_o = data; - leds_update(); -} - - - -/*************************************************************************** - - Inputs - -***************************************************************************/ - -static INPUT_PORTS_START( unk3403 ) - PORT_START("IN.0") // R4 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) - - PORT_START("IN.1") // R5 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) - - PORT_START("IN.2") // R6 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame? - - PORT_START("IN.3") // R7 - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) -INPUT_PORTS_END - - - -/*************************************************************************** - - Machine Config - -***************************************************************************/ - -void unk3403_state::machine_start() -{ - m_r = 0; - m_o = 0; - - save_item(NAME(m_r)); - save_item(NAME(m_o)); -} - - -static const UINT16 unk3403_output_pla[0x20] = -{ - /* O output PLA configuration currently unknown */ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f -}; - - -static MACHINE_CONFIG_START( unk3403, unk3403_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) - MCFG_TMS1XXX_OUTPUT_PLA(unk3403_output_pla) - MCFG_TMS1XXX_READ_K_CB(READ8(unk3403_state, read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(unk3403_state, write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(unk3403_state, write_r)) - - /* no video! */ - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( unk3403 ) - ROM_REGION( 0x0800, "maincpu", 0 ) - ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) - - ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified - ROM_REGION( 365, "maincpu:opla", 0 ) - ROM_LOAD( "tms1100_xxx_opla.pla", 0, 365, NO_DUMP ) -ROM_END - - -CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) diff --git a/src/mess/layout/cnsector.lay b/src/mess/layout/cnsector.lay index 9c7c22c7baf..5bd9aaa0d48 100644 --- a/src/mess/layout/cnsector.lay +++ b/src/mess/layout/cnsector.lay @@ -115,16 +115,16 @@ <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel> <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel> - <bezel name="lamp0" element="lamp"> + <bezel name="lamp60" element="lamp"> <bounds x="42" y="62" width="8" height="8" /> </bezel> - <bezel name="lamp1" element="lamp"> + <bezel name="lamp61" element="lamp"> <bounds x="42" y="126" width="8" height="8" /> </bezel> - <bezel name="lamp2" element="lamp"> + <bezel name="lamp62" element="lamp"> <bounds x="74" y="94" width="8" height="8" /> </bezel> - <bezel name="lamp3" element="lamp"> + <bezel name="lamp63" element="lamp"> <bounds x="10" y="94" width="8" height="8" /> </bezel> diff --git a/src/mess/layout/tmpacman.lay b/src/mess/layout/tmpacman.lay new file mode 100644 index 00000000000..e0a42256316 --- /dev/null +++ b/src/mess/layout/tmpacman.lay @@ -0,0 +1,186 @@ +<?xml version="1.0"?> +<mamelayout version="2"> + +<!-- define elements --> + + <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element> + + <element name="led" defstate="0"> + <disk state="0"><color red="0.1" green="0.2" blue="0.2" /></disk> + <disk state="1"><color red="0.5" green="1.0" blue="1.0" /></disk> + </element> + + +<!-- build screen --> + + <view name="Test Layout"> + <bounds left="0" right="64" top="0" bottom="64" /> + <bezel element="static_black"> + <bounds left="0" right="64" top="0" bottom="64" /> + </bezel> + + <!-- 8*19 matrix --> + + <bezel name="lamp0" element="led"><bounds x="0" y="0" width="1" height="1" /></bezel> + <bezel name="lamp1" element="led"><bounds x="0" y="2" width="1" height="1" /></bezel> + <bezel name="lamp2" element="led"><bounds x="0" y="4" width="1" height="1" /></bezel> + <bezel name="lamp3" element="led"><bounds x="0" y="6" width="1" height="1" /></bezel> + <bezel name="lamp4" element="led"><bounds x="0" y="8" width="1" height="1" /></bezel> + <bezel name="lamp5" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel> + <bezel name="lamp6" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel> + <bezel name="lamp7" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel> + <bezel name="lamp8" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel> + <bezel name="lamp9" element="led"><bounds x="0" y="18" width="1" height="1" /></bezel> + <bezel name="lamp10" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel> + <bezel name="lamp11" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel> + <bezel name="lamp12" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel> + <bezel name="lamp13" element="led"><bounds x="0" y="26" width="1" height="1" /></bezel> + <bezel name="lamp14" element="led"><bounds x="0" y="28" width="1" height="1" /></bezel> + <bezel name="lamp15" element="led"><bounds x="0" y="30" width="1" height="1" /></bezel> + <bezel name="lamp16" element="led"><bounds x="0" y="32" width="1" height="1" /></bezel> + <bezel name="lamp17" element="led"><bounds x="0" y="34" width="1" height="1" /></bezel> + <bezel name="lamp18" element="led"><bounds x="0" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp100" element="led"><bounds x="2" y="0" width="1" height="1" /></bezel> + <bezel name="lamp101" element="led"><bounds x="2" y="2" width="1" height="1" /></bezel> + <bezel name="lamp102" element="led"><bounds x="2" y="4" width="1" height="1" /></bezel> + <bezel name="lamp103" element="led"><bounds x="2" y="6" width="1" height="1" /></bezel> + <bezel name="lamp104" element="led"><bounds x="2" y="8" width="1" height="1" /></bezel> + <bezel name="lamp105" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel> + <bezel name="lamp106" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel> + <bezel name="lamp107" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel> + <bezel name="lamp108" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel> + <bezel name="lamp109" element="led"><bounds x="2" y="18" width="1" height="1" /></bezel> + <bezel name="lamp110" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel> + <bezel name="lamp111" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel> + <bezel name="lamp112" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel> + <bezel name="lamp113" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel> + <bezel name="lamp114" element="led"><bounds x="2" y="28" width="1" height="1" /></bezel> + <bezel name="lamp115" element="led"><bounds x="2" y="30" width="1" height="1" /></bezel> + <bezel name="lamp116" element="led"><bounds x="2" y="32" width="1" height="1" /></bezel> + <bezel name="lamp117" element="led"><bounds x="2" y="34" width="1" height="1" /></bezel> + <bezel name="lamp118" element="led"><bounds x="2" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp200" element="led"><bounds x="4" y="0" width="1" height="1" /></bezel> + <bezel name="lamp201" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel> + <bezel name="lamp202" element="led"><bounds x="4" y="4" width="1" height="1" /></bezel> + <bezel name="lamp203" element="led"><bounds x="4" y="6" width="1" height="1" /></bezel> + <bezel name="lamp204" element="led"><bounds x="4" y="8" width="1" height="1" /></bezel> + <bezel name="lamp205" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel> + <bezel name="lamp206" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel> + <bezel name="lamp207" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel> + <bezel name="lamp208" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel> + <bezel name="lamp209" element="led"><bounds x="4" y="18" width="1" height="1" /></bezel> + <bezel name="lamp210" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel> + <bezel name="lamp211" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel> + <bezel name="lamp212" element="led"><bounds x="4" y="24" width="1" height="1" /></bezel> + <bezel name="lamp213" element="led"><bounds x="4" y="26" width="1" height="1" /></bezel> + <bezel name="lamp214" element="led"><bounds x="4" y="28" width="1" height="1" /></bezel> + <bezel name="lamp215" element="led"><bounds x="4" y="30" width="1" height="1" /></bezel> + <bezel name="lamp216" element="led"><bounds x="4" y="32" width="1" height="1" /></bezel> + <bezel name="lamp217" element="led"><bounds x="4" y="34" width="1" height="1" /></bezel> + <bezel name="lamp218" element="led"><bounds x="4" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp300" element="led"><bounds x="6" y="0" width="1" height="1" /></bezel> + <bezel name="lamp301" element="led"><bounds x="6" y="2" width="1" height="1" /></bezel> + <bezel name="lamp302" element="led"><bounds x="6" y="4" width="1" height="1" /></bezel> + <bezel name="lamp303" element="led"><bounds x="6" y="6" width="1" height="1" /></bezel> + <bezel name="lamp304" element="led"><bounds x="6" y="8" width="1" height="1" /></bezel> + <bezel name="lamp305" element="led"><bounds x="6" y="10" width="1" height="1" /></bezel> + <bezel name="lamp306" element="led"><bounds x="6" y="12" width="1" height="1" /></bezel> + <bezel name="lamp307" element="led"><bounds x="6" y="14" width="1" height="1" /></bezel> + <bezel name="lamp308" element="led"><bounds x="6" y="16" width="1" height="1" /></bezel> + <bezel name="lamp309" element="led"><bounds x="6" y="18" width="1" height="1" /></bezel> + <bezel name="lamp310" element="led"><bounds x="6" y="20" width="1" height="1" /></bezel> + <bezel name="lamp311" element="led"><bounds x="6" y="22" width="1" height="1" /></bezel> + <bezel name="lamp312" element="led"><bounds x="6" y="24" width="1" height="1" /></bezel> + <bezel name="lamp313" element="led"><bounds x="6" y="26" width="1" height="1" /></bezel> + <bezel name="lamp314" element="led"><bounds x="6" y="28" width="1" height="1" /></bezel> + <bezel name="lamp315" element="led"><bounds x="6" y="30" width="1" height="1" /></bezel> + <bezel name="lamp316" element="led"><bounds x="6" y="32" width="1" height="1" /></bezel> + <bezel name="lamp317" element="led"><bounds x="6" y="34" width="1" height="1" /></bezel> + <bezel name="lamp318" element="led"><bounds x="6" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp400" element="led"><bounds x="8" y="0" width="1" height="1" /></bezel> + <bezel name="lamp401" element="led"><bounds x="8" y="2" width="1" height="1" /></bezel> + <bezel name="lamp402" element="led"><bounds x="8" y="4" width="1" height="1" /></bezel> + <bezel name="lamp403" element="led"><bounds x="8" y="6" width="1" height="1" /></bezel> + <bezel name="lamp404" element="led"><bounds x="8" y="8" width="1" height="1" /></bezel> + <bezel name="lamp405" element="led"><bounds x="8" y="10" width="1" height="1" /></bezel> + <bezel name="lamp406" element="led"><bounds x="8" y="12" width="1" height="1" /></bezel> + <bezel name="lamp407" element="led"><bounds x="8" y="14" width="1" height="1" /></bezel> + <bezel name="lamp408" element="led"><bounds x="8" y="16" width="1" height="1" /></bezel> + <bezel name="lamp409" element="led"><bounds x="8" y="18" width="1" height="1" /></bezel> + <bezel name="lamp410" element="led"><bounds x="8" y="20" width="1" height="1" /></bezel> + <bezel name="lamp411" element="led"><bounds x="8" y="22" width="1" height="1" /></bezel> + <bezel name="lamp412" element="led"><bounds x="8" y="24" width="1" height="1" /></bezel> + <bezel name="lamp413" element="led"><bounds x="8" y="26" width="1" height="1" /></bezel> + <bezel name="lamp414" element="led"><bounds x="8" y="28" width="1" height="1" /></bezel> + <bezel name="lamp415" element="led"><bounds x="8" y="30" width="1" height="1" /></bezel> + <bezel name="lamp416" element="led"><bounds x="8" y="32" width="1" height="1" /></bezel> + <bezel name="lamp417" element="led"><bounds x="8" y="34" width="1" height="1" /></bezel> + <bezel name="lamp418" element="led"><bounds x="8" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp500" element="led"><bounds x="10" y="0" width="1" height="1" /></bezel> + <bezel name="lamp501" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel> + <bezel name="lamp502" element="led"><bounds x="10" y="4" width="1" height="1" /></bezel> + <bezel name="lamp503" element="led"><bounds x="10" y="6" width="1" height="1" /></bezel> + <bezel name="lamp504" element="led"><bounds x="10" y="8" width="1" height="1" /></bezel> + <bezel name="lamp505" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel> + <bezel name="lamp506" element="led"><bounds x="10" y="12" width="1" height="1" /></bezel> + <bezel name="lamp507" element="led"><bounds x="10" y="14" width="1" height="1" /></bezel> + <bezel name="lamp508" element="led"><bounds x="10" y="16" width="1" height="1" /></bezel> + <bezel name="lamp509" element="led"><bounds x="10" y="18" width="1" height="1" /></bezel> + <bezel name="lamp510" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel> + <bezel name="lamp511" element="led"><bounds x="10" y="22" width="1" height="1" /></bezel> + <bezel name="lamp512" element="led"><bounds x="10" y="24" width="1" height="1" /></bezel> + <bezel name="lamp513" element="led"><bounds x="10" y="26" width="1" height="1" /></bezel> + <bezel name="lamp514" element="led"><bounds x="10" y="28" width="1" height="1" /></bezel> + <bezel name="lamp515" element="led"><bounds x="10" y="30" width="1" height="1" /></bezel> + <bezel name="lamp516" element="led"><bounds x="10" y="32" width="1" height="1" /></bezel> + <bezel name="lamp517" element="led"><bounds x="10" y="34" width="1" height="1" /></bezel> + <bezel name="lamp518" element="led"><bounds x="10" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp600" element="led"><bounds x="12" y="0" width="1" height="1" /></bezel> + <bezel name="lamp601" element="led"><bounds x="12" y="2" width="1" height="1" /></bezel> + <bezel name="lamp602" element="led"><bounds x="12" y="4" width="1" height="1" /></bezel> + <bezel name="lamp603" element="led"><bounds x="12" y="6" width="1" height="1" /></bezel> + <bezel name="lamp604" element="led"><bounds x="12" y="8" width="1" height="1" /></bezel> + <bezel name="lamp605" element="led"><bounds x="12" y="10" width="1" height="1" /></bezel> + <bezel name="lamp606" element="led"><bounds x="12" y="12" width="1" height="1" /></bezel> + <bezel name="lamp607" element="led"><bounds x="12" y="14" width="1" height="1" /></bezel> + <bezel name="lamp608" element="led"><bounds x="12" y="16" width="1" height="1" /></bezel> + <bezel name="lamp609" element="led"><bounds x="12" y="18" width="1" height="1" /></bezel> + <bezel name="lamp610" element="led"><bounds x="12" y="20" width="1" height="1" /></bezel> + <bezel name="lamp611" element="led"><bounds x="12" y="22" width="1" height="1" /></bezel> + <bezel name="lamp612" element="led"><bounds x="12" y="24" width="1" height="1" /></bezel> + <bezel name="lamp613" element="led"><bounds x="12" y="26" width="1" height="1" /></bezel> + <bezel name="lamp614" element="led"><bounds x="12" y="28" width="1" height="1" /></bezel> + <bezel name="lamp615" element="led"><bounds x="12" y="30" width="1" height="1" /></bezel> + <bezel name="lamp616" element="led"><bounds x="12" y="32" width="1" height="1" /></bezel> + <bezel name="lamp617" element="led"><bounds x="12" y="34" width="1" height="1" /></bezel> + <bezel name="lamp618" element="led"><bounds x="12" y="36" width="1" height="1" /></bezel> + + <bezel name="lamp700" element="led"><bounds x="14" y="0" width="1" height="1" /></bezel> + <bezel name="lamp701" element="led"><bounds x="14" y="2" width="1" height="1" /></bezel> + <bezel name="lamp702" element="led"><bounds x="14" y="4" width="1" height="1" /></bezel> + <bezel name="lamp703" element="led"><bounds x="14" y="6" width="1" height="1" /></bezel> + <bezel name="lamp704" element="led"><bounds x="14" y="8" width="1" height="1" /></bezel> + <bezel name="lamp705" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel> + <bezel name="lamp706" element="led"><bounds x="14" y="12" width="1" height="1" /></bezel> + <bezel name="lamp707" element="led"><bounds x="14" y="14" width="1" height="1" /></bezel> + <bezel name="lamp708" element="led"><bounds x="14" y="16" width="1" height="1" /></bezel> + <bezel name="lamp709" element="led"><bounds x="14" y="18" width="1" height="1" /></bezel> + <bezel name="lamp710" element="led"><bounds x="14" y="20" width="1" height="1" /></bezel> + <bezel name="lamp711" element="led"><bounds x="14" y="22" width="1" height="1" /></bezel> + <bezel name="lamp712" element="led"><bounds x="14" y="24" width="1" height="1" /></bezel> + <bezel name="lamp713" element="led"><bounds x="14" y="26" width="1" height="1" /></bezel> + <bezel name="lamp714" element="led"><bounds x="14" y="28" width="1" height="1" /></bezel> + <bezel name="lamp715" element="led"><bounds x="14" y="30" width="1" height="1" /></bezel> + <bezel name="lamp716" element="led"><bounds x="14" y="32" width="1" height="1" /></bezel> + <bezel name="lamp717" element="led"><bounds x="14" y="34" width="1" height="1" /></bezel> + <bezel name="lamp718" element="led"><bounds x="14" y="36" width="1" height="1" /></bezel> + + + </view> +</mamelayout> diff --git a/src/mess/mess.lst b/src/mess/mess.lst index c7fbff6fe67..40d6736c581 100644 --- a/src/mess/mess.lst +++ b/src/mess/mess.lst @@ -2617,3 +2617,4 @@ alnchase edracula tc4 ebball +tmpacman diff --git a/src/mess/mess.mak b/src/mess/mess.mak index d62c7546631..a6ff3ea45c1 100644 --- a/src/mess/mess.mak +++ b/src/mess/mess.mak @@ -735,14 +735,12 @@ DRVLIBS += \ $(MESSOBJ)/homebrew.a \ $(MESSOBJ)/homelab.a \ $(MESSOBJ)/hp.a \ - $(MESSOBJ)/ideal.a \ $(MESSOBJ)/imp.a \ $(MESSOBJ)/intel.a \ $(MESSOBJ)/interton.a \ $(MESSOBJ)/intv.a \ $(MESSOBJ)/isc.a \ $(MESSOBJ)/kaypro.a \ - $(MESSOBJ)/kenner.a \ $(MESSOBJ)/koei.a \ $(MESSOBJ)/kyocera.a \ $(MESSOBJ)/luxor.a \ @@ -1004,7 +1002,6 @@ $(MESSOBJ)/amstrad.a: \ $(MESSOBJ)/apf.a: \ $(MESS_DRIVERS)/apf.o \ - $(MESS_DRIVERS)/mathmagi.o \ $(MESSOBJ)/apollo.a: \ $(MESS_DRIVERS)/apollo.o $(MESS_MACHINE)/apollo.o $(MESS_MACHINE)/apollo_dbg.o $(MESS_MACHINE)/apollo_kbd.o $(MESS_VIDEO)/apollo.o \ @@ -1333,9 +1330,6 @@ $(MESSOBJ)/intel.a: \ $(MESS_DRIVERS)/sdk85.o \ $(MESS_DRIVERS)/sdk86.o \ -$(MESSOBJ)/ideal.a: \ - $(MESS_DRIVERS)/elecdet.o \ - $(MESSOBJ)/imp.a: \ $(MESS_DRIVERS)/tim011.o \ $(MESS_DRIVERS)/tim100.o \ @@ -1352,9 +1346,6 @@ $(MESSOBJ)/isc.a: \ $(MESSOBJ)/kaypro.a: \ $(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \ -$(MESSOBJ)/kenner.a: \ - $(MESS_DRIVERS)/starwbc.o \ - $(MESSOBJ)/koei.a: \ $(MESS_DRIVERS)/pasogo.o \ @@ -1444,6 +1435,7 @@ $(MESSOBJ)/nec.a: \ $(MESS_DRIVERS)/pc100.o \ $(MESS_DRIVERS)/pc9801.o $(MESS_MACHINE)/pc9801_26.o $(MESS_MACHINE)/pc9801_86.o $(MESS_MACHINE)/pc9801_118.o $(MESS_MACHINE)/pc9801_cbus.o $(MESS_MACHINE)/pc9801_kbd.o \ $(MESS_DRIVERS)/tk80bs.o \ + $(MESS_DRIVERS)/hh_ucom4.o \ $(MESSOBJ)/netronic.a: \ $(MESS_DRIVERS)/elf.o \ @@ -1496,10 +1488,6 @@ $(MESSOBJ)/palm.a: \ $(MESS_DRIVERS)/palmz22.o \ $(MESSOBJ)/parker.a: \ - $(MESS_DRIVERS)/cnsector.o \ - $(MESS_DRIVERS)/merlin.o \ - $(MESS_DRIVERS)/splitsec.o \ - $(MESS_DRIVERS)/stopthie.o \ $(MESS_DRIVERS)/wildfire.o \ $(MESSOBJ)/pitronic.a: \ @@ -1825,7 +1813,6 @@ $(MESSOBJ)/trs.a: \ $(MESS_MACHINE)/dragon.o \ $(MESS_MACHINE)/dgnalpha.o \ $(MESS_VIDEO)/gime.o \ - $(MESS_DRIVERS)/tandy12.o \ $(MESS_DRIVERS)/trs80.o $(MESS_MACHINE)/trs80.o $(MESS_VIDEO)/trs80.o \ $(MESS_DRIVERS)/trs80m2.o $(MESS_MACHINE)/trs80m2kb.o \ $(MESS_DRIVERS)/tandy2k.o $(MESS_MACHINE)/tandy2kb.o \ @@ -2017,7 +2004,6 @@ $(MESSOBJ)/skeleton.a: \ $(MESS_DRIVERS)/ti630.o \ $(MESS_DRIVERS)/tsispch.o \ $(MESS_DRIVERS)/unistar.o \ - $(MESS_DRIVERS)/unk3403.o \ $(MESS_DRIVERS)/v6809.o \ $(MESS_DRIVERS)/vector4.o \ $(MESS_DRIVERS)/vii.o \ @@ -2117,7 +2103,6 @@ $(MAME_DRIVERS)/cdi.o: $(MAME_LAYOUT)/cdi.lh $(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh $(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \ $(MESS_LAYOUT)/borisdpl.lh -$(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh $(MESS_DRIVERS)/comp4.o: $(MESS_LAYOUT)/comp4.lh $(MESS_DRIVERS)/cp1.o: $(MESS_LAYOUT)/cp1.lh $(MESS_DRIVERS)/cvicny.o: $(MESS_LAYOUT)/cvicny.lh @@ -2129,7 +2114,6 @@ $(MESS_DRIVERS)/dmv.o: $(MESS_LAYOUT)/dmv.lh $(MESS_DRIVERS)/dolphunk.o: $(MESS_LAYOUT)/dolphunk.lh $(MESS_DRIVERS)/eacc.o: $(MESS_LAYOUT)/eacc.lh $(MESS_DRIVERS)/edracula.o: $(MESS_LAYOUT)/edracula.lh -$(MESS_DRIVERS)/elecdet.o: $(MESS_LAYOUT)/elecdet.lh $(MESS_DRIVERS)/elekscmp.o: $(MESS_LAYOUT)/elekscmp.lh $(MESS_DRIVERS)/elf.o: $(MESS_LAYOUT)/elf2.lh $(MESS_MACHINE)/esqvfd.o: $(MESS_LAYOUT)/esq2by40.lh \ @@ -2143,10 +2127,20 @@ $(MESS_DRIVERS)/gamecom.o: $(MESS_LAYOUT)/gamecom.lh $(MESS_DRIVERS)/glasgow.o: $(MESS_LAYOUT)/glasgow.lh $(MESS_DRIVERS)/h8.o: $(MESS_LAYOUT)/h8.lh $(MESS_DRIVERS)/hh_tms1k.o: $(MESS_LAYOUT)/amaztron.lh \ + $(MESS_LAYOUT)/bankshot.lh \ + $(MESS_LAYOUT)/cnsector.lh \ $(MESS_LAYOUT)/comp4.lh \ $(MESS_LAYOUT)/ebball.lh \ + $(MESS_LAYOUT)/elecdet.lh \ + $(MESS_LAYOUT)/mathmagi.lh \ + $(MESS_LAYOUT)/merlin.lh \ $(MESS_LAYOUT)/simon.lh \ + $(MESS_LAYOUT)/splitsec.lh \ + $(MESS_LAYOUT)/starwbc.lh \ + $(MESS_LAYOUT)/stopthie.lh \ + $(MESS_LAYOUT)/tandy12.lh \ $(MESS_LAYOUT)/tc4.lh +$(MESS_DRIVERS)/hh_ucom4.o: $(MESS_LAYOUT)/tmpacman.lh $(MESS_DRIVERS)/ie15.o: $(MESS_LAYOUT)/ie15.lh $(MESS_DRIVERS)/instruct.o: $(MESS_LAYOUT)/instruct.lh $(MESS_DRIVERS)/k1003.o: $(MESS_LAYOUT)/k1003.lh @@ -2156,11 +2150,9 @@ $(MESS_DRIVERS)/lc80.o: $(MESS_LAYOUT)/lc80.lh $(MESS_DRIVERS)/llc.o: $(MESS_LAYOUT)/llc1.lh $(MESS_DRIVERS)/lynx.o: $(MESS_LAYOUT)/lynx.lh $(MESS_DRIVERS)/mac.o: $(MESS_LAYOUT)/mac.lh -$(MESS_DRIVERS)/mathmagi.o: $(MESS_LAYOUT)/mathmagi.lh $(MESS_MACHINE)/megacd.o: $(MESS_LAYOUT)/megacd.lh $(MESS_DRIVERS)/mekd2.o: $(MESS_LAYOUT)/mekd2.lh $(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh -$(MESS_DRIVERS)/merlin.o: $(MESS_LAYOUT)/merlin.lh $(MESS_DRIVERS)/minicom.o: $(MESS_LAYOUT)/minicom.lh $(MESS_DRIVERS)/mirage.o: $(MESS_LAYOUT)/mirage.lh $(MESS_DRIVERS)/mk1.o: $(MESS_LAYOUT)/mk1.lh @@ -2196,16 +2188,11 @@ $(MESS_DRIVERS)/simon.o: $(MESS_LAYOUT)/simon.lh $(MESS_DRIVERS)/sitcom.o: $(MESS_LAYOUT)/sitcom.lh $(MESS_DRIVERS)/slc1.o: $(MESS_LAYOUT)/slc1.lh $(MESS_DRIVERS)/sms.o: $(MESS_LAYOUT)/sms1.lh -$(MESS_DRIVERS)/splitsec.o: $(MESS_LAYOUT)/bankshot.lh \ - $(MESS_LAYOUT)/splitsec.lh -$(MESS_DRIVERS)/starwbc.o: $(MESS_LAYOUT)/starwbc.lh -$(MESS_DRIVERS)/stopthie.o: $(MESS_LAYOUT)/stopthie.lh $(MESS_DRIVERS)/super80.o: $(MESS_LAYOUT)/super80.lh $(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh $(MESS_DRIVERS)/svision.o: $(MESS_LAYOUT)/svision.lh $(MESS_DRIVERS)/svmu.o: $(MESS_LAYOUT)/svmu.lh $(MESS_DRIVERS)/sym1.o: $(MESS_LAYOUT)/sym1.lh -$(MESS_DRIVERS)/tandy12.o: $(MESS_LAYOUT)/tandy12.lh $(MESS_DRIVERS)/tavernie.o: $(MESS_LAYOUT)/tavernie.lh $(MESS_DRIVERS)/tb303.o: $(MESS_LAYOUT)/tb303.lh $(MESS_DRIVERS)/tc4.o: $(MESS_LAYOUT)/tc4.lh |