Previous 199869 Revisions Next

r36126 Friday 27th February, 2015 at 17:09:54 UTC by Couriersud
Merge branch 'master' of https://github.com/mamedev/mame.git
[src/build]makelist.py verinfo.py
[src/emu/drivers]xtal.h
[src/mame]mame.lst
[src/mame/drivers]neogeo.c neogeo_noslot.c opwolf.c
[src/mess]mess.lst mess.mak
[src/mess/drivers]cnsector.c elecdet.c hh_tms1k.c hh_ucom4.c* mathmagi.c merlin.c splitsec.c starwbc.c stopthie.c tandy12.c unk3403.c
[src/mess/layout]cnsector.lay tmpacman.lay*

trunk/src/build/makelist.py
r244637r244638
33from __future__ import with_statement
44
55import sys
6import os
76
87drivlist = []
98
trunk/src/build/verinfo.py
r244637r244638
22
33from __future__ import with_statement
44
5import os
65import re
76import sys
87
r244637r244638
8584
8685if build == "mess":
8786    # MESS
88    author = "MESS Team";
89    comments = "Multi Emulation Super System";
90    company_name = "MESS Team";
91    file_description = "Multi Emulation Super System";
92    internal_name = "MESS";
93    original_filename = "MESS";
94    product_name = "MESS";
87    author = "MESS Team"
88    comments = "Multi Emulation Super System"
89    company_name = "MESS Team"
90    file_description = "Multi Emulation Super System"
91    internal_name = "MESS"
92    original_filename = "MESS"
93    product_name = "MESS"
9594    bundle_identifier = "org.mamedev.mess"
9695elif build == "ume":
9796    # UME
trunk/src/emu/drivers/xtal.h
r244637r244638
233233
234234   XTAL_384kHz         = 384000,       /* Commonly used for driving OKI MSM5205 */
235235   XTAL_400kHz         = 400000,       /* OKI MSM5205 on Great Swordman h/w */
236   XTAL_430kHz         = 430000,
236237   XTAL_455kHz         = 455000,       /* OKI MSM5205 on Gladiator h/w */
237238   XTAL_512kHz         = 512000,       /* Toshiba TC8830F */
238239   XTAL_640kHz         = 640000,       /* NEC UPD7759, Texas Instruments Speech Chips @ 8khz */
trunk/src/mame/drivers/neogeo.c
r244637r244638
238238    . NEO-AEG CHA42G-3
239239    . NEO-AEG CHA42G-4
240240    . NEO-AEG CHA256
241    . NEO-AEG CHA256 B
241242    . NEO-AEG CHA256[B]
243    . NEO-AEG CHA256BY
242244    . NEO-AEG CHA256RY
243245    . NEO-AEG CHA512Y
244246    . NEO-AEG CHAFIO (1999.8.10) - used with NEO-CMC 90G06C7042 or NEO-CMC 90G06C7050
r244637r244638
261263    . NEO-AEG PROG4096 B
262264    . NEO-AEG PROGGS
263265    . NEO-AEG PROGTOP2
266    . NEO-AEG PROGTOP2Y
264267    . NEO-AEG PROGEOP (1999.4.2)
265268    . NEO-AEG PROGLBA (1999.7.6)
266269    . NEO-AEG PROGRK
r244637r244638
307310    GIGA PROG Board 1.0
308311    GIGA PROG Board 1.5
309312
310
313   
314   Unofficial pcb's from NEOBITZ:
315   
316   MVS CHA:
317   CHARBITZ1 2013.12.01
318   
319   MVS PROG:
320   PROGBITZ1 2013.12.01
321   
322   
311323    Neo-Geo game PCB infos by Johnboy
312324
313325
trunk/src/mame/drivers/neogeo_noslot.c
r244637r244638
679679 NEO-MVS PROG42G / NEO-MVS CHA42G
680680 . NGH-007
681681 NEO-AEG PROG42G / NEO-AEG CHA42G
682 NEO-AEG PROG42G / NEO-AEG CHA-8M
682683****************************************/
683684
684685ROM_START( alpham2 ) /* MVS AND AES VERSION */
r244637r244638
734735
735736/****************************************
736737 ID-0008
737 Sunshine (prototype) 1990 SNK
738 Sun Shine (prototype) 1990 SNK / Alpha
738739****************************************/
739740
740741/****************************************
r244637r244638
770771   ROM_LOAD16_BYTE( "009-c6.c6", 0x200001, 0x80000, CRC(2eca8b19) SHA1(16764ef10e404325ba0a1a2ad3a4c0af287be21f) ) /* Plane 2,3 */ /* TC534200 */
771772ROM_END
772773
773ROM_START( ncombath ) /* AES VERSION */
774ROM_START( ncombath ) /* MVS AND AES VERSION */
774775   ROM_REGION( 0x100000, "maincpu", 0 )
775776   ROM_LOAD16_WORD_SWAP( "009-pg1.p1", 0x000000, 0x080000, CRC(8e9f0add) SHA1(d0b908a86a58f2537eea73a431038f1cd74a5a2f) ) /* TC534200 */
776777
r244637r244638
800801 . NGM-010
801802 NEO-MVS PROG-EP / NEO-MVS CHA-32
802803 . NGH-010
804 NEO-AEG PROG-B / NEO-AEG CHA-32
803805****************************************/
804806
805807ROM_START( cyberlip )
r244637r244638
910912 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
911913 . NGH-016
912914 NEO-AEG PROG42G / NEO-AEG CHA42G
915 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
913916****************************************/
914917
915918ROM_START( kotm ) /* MVS VERSION */
r244637r244638
962965 NEO-MVS PROG42G / NEO-MVS CHA42G
963966 . NGH-017
964967 NEO-AEG PROG42G / NEO-AEG CHA42G
968 NEO-AEG  PRO42G-1 / NEO-AEG CHA42G-1
965969****************************************/
966970
967971ROM_START( sengoku ) /* MVS AND AES VERSION */
r244637r244638
12331237 ID-0023
12341238 . NGM-023
12351239 NEO-MVS PROG42G / NEO-MVS CHA42G
1240 NEO-MVS PROGTOP / NEO-MVS CHA-256
1241 Boards used for the Korean release
12361242 . NGH-023
12371243 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
12381244****************************************/
r244637r244638
13681374
13691375/****************************************
13701376 ID-0028
1371 Dunk Star (prototype) Sammy
1377 Dunk Star (prototype) 1991 Sammy
13721378****************************************/
13731379
13741380/****************************************
r244637r244638
16181624 ID-0036
16191625 . MOM-002
16201626 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
1627 NEO-MVS PROG42G-COM / NEO-MVS CHA42G-1
16211628 . MOH-002
16221629 NEO-AEG PROG42G / NEO-AEG CHA42G
16231630****************************************/
r244637r244638
17751782 . NGM-040
17761783 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
17771784 . NGH-040
1785 NEO-AEG PROG16 / NEO-AEG CHA42G-1
17781786****************************************/
17791787
17801788ROM_START( sengoku2 )
r244637r244638
18051813 . NGM-041
18061814 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
18071815 . NGH-041
1816 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
18081817****************************************/
18091818
18101819ROM_START( bstars2 )
r244637r244638
18621871 ID-0043
18631872 . NGM-043
18641873 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
1874 NEO-MVS PROG-G2 / NEO-MVS CHA 42G-2
18651875 . NGH-043
18661876 NEO-AEG PROG16 / NEO-AEG CHA42G-1
18671877****************************************/
r244637r244638
18961906 ID-0044
18971907 . NGM-044
18981908 NEO-MVS PROG16 / NEO-MVS CHA42G-1
1909 NEO-MVS PROG4096 / NEO-MVS CHA42G-1
18991910 . NGH-044
19001911 NEO-AEG PROG16 / NEO-AEG CHA42G-1
19011912****************************************/
r244637r244638
19031914ROM_START( aof ) /* MVS AND AES VERSION */
19041915   ROM_REGION( 0x100000, "maincpu", 0 )
19051916   ROM_LOAD16_WORD_SWAP( "044-p1.p1", 0x000000, 0x080000, CRC(ca9f7a6d) SHA1(4d28ef86696f7e832510a66d3e8eb6c93b5b91a1) ) /* TC534200 */
1906
1917   /* also found sets with ep1 or p1 on eprom. */
1918   
19071919   NEO_SFIX_128K( "044-s1.s1", CRC(89903f39) SHA1(a04a0c244a5d5c7a595fcf649107969635a6a8b6) ) /* TC531000 */
19081920
19091921   NEO_BIOS_AUDIO_128K( "044-m1.m1", CRC(0987e4bb) SHA1(8fae4b7fac09d46d4727928e609ed9d3711dbded) ) /* TC531001 */
r244637r244638
19371949   ROM_REGION( 0x200000, "maincpu", 0 )
19381950   ROM_LOAD16_WORD_SWAP( "045-p1.p1",   0x000000, 0x100000, CRC(dfe51bf0) SHA1(2243af3770a516ae698b69bcd9daf53632d9128d) ) /* TC538200 */
19391951   ROM_LOAD16_WORD_SWAP( "045-pg2.sp2", 0x100000, 0x100000, CRC(46745b94) SHA1(d9e959fd1f88c9402915c1d0dcdb4a9e3d49cdcb) ) /* TC538200 */
1940
1952   /* also found set with ep1 / ep2 on eprom and sp2 on maskrom; same rom data as samshoh is used. */
1953   
19411954   NEO_SFIX_128K( "045-s1.s1", CRC(9142a4d3) SHA1(54088e99fcfd75fd0f94852890a56350066a05a3) ) /* TC531000 */
19421955
19431956   NEO_BIOS_AUDIO_128K( "045-m1.m1", CRC(95170640) SHA1(125c502db0693e8d11cef619b090081c14a9a300) ) /* TC531001 */
r244637r244638
20512064 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-1
20522065 . NGH-047
20532066 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B
2067 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2
20542068****************************************/
20552069
20562070ROM_START( fatfury2 ) /* MVS AND AES VERSION */
r244637r244638
21372151 . ALM-004
21382152 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
21392153 . ALH-004
2154 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
21402155****************************************/
21412156
21422157ROM_START( ncommand )
r244637r244638
21642179 ID-0051
21652180 . AIM-051
21662181 NEO-MVS PROG-G2 / NEO-MVS CHA42G-1
2182 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
21672183 . AIH-051
21682184****************************************/
21692185
r244637r244638
21942210 . NGM-052
21952211 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA 42G-2
21962212 . NGH-052
2213 NEO-AEG PROG-G2 (SNK-9201) / NEO-AEG CHA42G-2
21972214****************************************/
21982215
21992216ROM_START( ssideki )
r244637r244638
22222239 NEO-MVS PROG16 / NEO-MVS CHA42G-1
22232240 . ALH-005
22242241 NEO-AEG PROG16 / NEO-AEG CHA42G-1
2242 NEO-AEG PROG-G2 / NEO-AEG CHA42G-2C
22252243****************************************/
22262244
22272245ROM_START( wh1 ) /* MVS VERSION */
r244637r244638
22532271   ROM_REGION( 0x100000, "maincpu", 0 )
22542272   ROM_LOAD16_WORD_SWAP( "053-p1.p1", 0x000000, 0x080000, CRC(95b574cb) SHA1(b7b7af6a04c3d902e7f8852897741ecaf0b1062c) ) /* TC534200 */
22552273   ROM_LOAD16_WORD_SWAP( "053-p2.p2", 0x080000, 0x080000, CRC(f198ed45) SHA1(24ccc091e97f63796562bb5b30df51f39bd504ef) ) /* TC534200 */
2256
2274     
22572275   NEO_SFIX_128K( "053-s1.s1", CRC(8c2c2d6b) SHA1(87fa79611c6f8886dcc8766814829c669c65b40f) ) /* TC531000 */
22582276
22592277   NEO_BIOS_AUDIO_128K( "053-m1.m1", CRC(1bd9d04b) SHA1(65cd7b002123ed1a3111e3d942608d0082799ff3) ) /* TC531001 */
r244637r244638
23072325 ID-0055
23082326 . NGM-055
23092327 NEO-MVS PROGTOP / NEO-MVS CHA256
2328 NEO-MVS PROGTOP / NEO-MVS CHA256B
23102329 . NGH-055
23112330 NEO-AEG PROGRK / NEO-AEG CHA256
23122331****************************************/
r244637r244638
24372456/****************************************
24382457 ID-0058
24392458 . NGM-058
2440 NEO-MVS PROGGSC / NEO-MVS CHA 42G-3B
2459 NEO-MVS PROGGSC / NEO-MVS CHA42G-3B
2460 NEO-MVS PROGGSC / NEO-MVS CHA 42G-3
24412461 . NGH-058
24422462 NEO-AEG PROGGS / NEO-AEG CHA42G-4
24432463****************************************/
r244637r244638
24992519 ID-0059
25002520 . NGM-059
25012521 NEO-MVS PROGTOP / NEO-MVS CHA256
2522 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
25022523 . NGH-059
25032524****************************************/
25042525
r244637r244638
25842605 ID-0061
25852606 . NGM-061
25862607 NEO-MVS PROGGSC / NEO-MVS CHA256
2608 NEO-MVS PROGTOP / NEO-MVS CHA256
2609 NEO-MVS PROG 4096 B / NEO-MVS CHA256
25872610 . NGH-061
25882611 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
25892612****************************************/
r244637r244638
25912614ROM_START( ssideki2 ) /* MVS AND AES VERSION */
25922615   ROM_REGION( 0x100000, "maincpu", 0 )
25932616   ROM_LOAD16_WORD_SWAP( "061-p1.p1", 0x000000, 0x100000, CRC(5969e0dc) SHA1(78abea880c125ec5a85bef6404478512a34b5513) ) /* mask rom TC538200 */
2594
2617   /* also found MVS sets with ep1 / ep2 on eprom; correct chip label unknown. */
2618   
25952619   NEO_SFIX_128K( "061-s1.s1", CRC(226d1b68) SHA1(de010f6fda3ddadb181fe37daa6105f22e78b970) ) /* mask rom TC531000 */
25962620
25972621   NEO_BIOS_AUDIO_128K( "061-m1.m1", CRC(156f6951) SHA1(49686f615f109a02b4f23931f1c84fee13872ffd) ) /* mask rom TC531001 */
r244637r244638
26542678   ROM_REGION( 0x200000, "maincpu", 0 )
26552679   ROM_LOAD16_WORD_SWAP( "063-p1.p1", 0x100000, 0x100000, CRC(22368892) SHA1(0997f8284aa0f57a333be8a0fdea777d0d01afd6) ) /* TC5316200 */
26562680   ROM_CONTINUE( 0x000000, 0x100000 )
2657
2681   /* also found MVS sets with ep1 / ep2 on eprom and p1 / sp2 on maskrom; correct chip label unknown */
2682   
26582683   NEO_SFIX_128K( "063-s1.s1", CRC(64a5cd66) SHA1(12cdfb27bf9ccd5a8df6ddd4628ef7cf2c6d4964) ) /* TC531000 */
26592684
26602685   NEO_BIOS_AUDIO_128K( "063-m1.m1", CRC(56675098) SHA1(90429fc40d056d480d0e2bbefbc691d9fa260fc4) ) /* TC531001 */
r244637r244638
27162741 NEO-MVS PROGGSC / NEO-MVS CHA256
27172742 . ADH-007
27182743 NEO-AEG PROGRK / NEO-AEG CHA256
2744 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
27192745****************************************/
27202746
27212747ROM_START( wh2j ) /* MVS AND AES VERSION */
r244637r244638
27342760   NO_DELTAT_REGION
27352761
27362762   ROM_REGION( 0x1000000, "sprites", 0 )
2763   /* Different layout with 4xC (32 mbit) also exists; chip labels are 064-C13, 064-C24, 064-C57 and 064-c68. */
27372764   ROM_LOAD16_BYTE( "064-c1.c1", 0x000000, 0x200000, CRC(2ec87cea) SHA1(e713ec7839a7665edee6ee3f82a6e530b3b4bd7c) ) /* Plane 0,1 */ /* TC5316200 */
27382765   ROM_LOAD16_BYTE( "064-c2.c2", 0x000001, 0x200000, CRC(526b81ab) SHA1(b5f0a2f04489539ed6b9d0810b12787356c64b23) ) /* Plane 2,3 */ /* TC5316200 */
27392766   ROM_LOAD16_BYTE( "064-c3.c3", 0x400000, 0x200000, CRC(436d1b31) SHA1(059776d77b91377ed0bcfc278802d659c917fc0f) ) /* Plane 0,1 */ /* TC5316200 */
r244637r244638
27492776 . DEM-002
27502777 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
27512778 . DEH-002
2779 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
27522780****************************************/
27532781
27542782ROM_START( wjammers )
r244637r244638
28072835 ID-0067
28082836 . ??M-067
28092837 NEO-MVS PROG16 / NEO-MVS CHA256B
2838 NEO-MVS PROG16 / NEO-MVS CHA256
28102839****************************************/
28112840
28122841ROM_START( gururin ) /* MVS ONLY RELEASE */
r244637r244638
29252954/****************************************
29262955 ID-0071
29272956 Bang Bang Busters (prototype) 1994 Visco
2928 Released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO)
2957 Prepared for release in 2000/2001, but apparently Zupapa was favored
2958 The 2000 version was released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO)
29292959
29302960 Reported UNIVERSE BIOS CRC32:
29312961  ROM     EC861CAF
r244637r244638
29352965  BANK 3  NOT USED
29362966 ****************************************/
29372967
2968 ROM_START( b2b )
2969   ROM_REGION( 0x100000, "maincpu", 0 )
2970   ROM_LOAD16_WORD_SWAP( "071.p1", 0x000000, 0x080000, CRC(7687197d) SHA1(4bb9cb7819807f7a7e1f85f1c4faac4a2f8761e8) )
2971
2972   NEO_SFIX_128K( "071.s1", CRC(44e5f154) SHA1(b3f80051789e60e5d8c5df0408f1aba51616e92d) )
2973
2974   NEO_BIOS_AUDIO_128K( "071.m1", CRC(6da739ad) SHA1(cbf5f55c54b4ee00943e2a411eeee4e465ce9c34) )
2975
2976   ROM_REGION( 0x100000, "ymsnd", 0 )
2977   ROM_LOAD( "071.v1", 0x000000, 0x100000, CRC(50feffb0) SHA1(00127dae0130889995bfa7560bc4b0662f74fba5) )
2978
2979   ROM_REGION( 0x400000, "sprites", 0 )
2980   ROM_LOAD16_BYTE( "071.c1", 0x000000, 0x200000, CRC(23d84a7a) SHA1(9034658ad40e2c45558abc3db312aa2764102fc4) ) /* Plane 0,1 */
2981   ROM_LOAD16_BYTE( "071.c2", 0x000001, 0x200000, CRC(ce7b6248) SHA1(ad1cd5adae5c151e183ff88b68afe10f7009f48e) ) /* Plane 2,3 */
2982ROM_END
2983
2984
29382985/****************************************
29392986 ID-0072
29402987 Last Odyssey Pinball Fantasia (prototype) 1995 Monolith
r244637r244638
30053052 . NGM-075
30063053 NEO-MVS PROGGSC / NEO-MVS CHA256
30073054 . NGH-075
3055 NEO-AEG PROGRK / NEO-AEG CHA256
30083056****************************************/
30093057
30103058ROM_START( sonicwi2 )
r244637r244638
30593107
30603108/****************************************
30613109 ID-0077
3062 The Warlocks of the Fates (prototype) 1995 Astec
3110 The Warlocks of the Fates / Shinryu Senki (prototype) 1995 SNK/Astec21
3111 a video of intro and full gameplay was on youtube in 2014.
30633112****************************************/
30643113
30653114/****************************************
r244637r244638
31303179 ID-0080
31313180 . SAM-080
31323181 NEO-MVS PROGGSC / NEO-MVS CHA256
3182 NEO-MVS PROGTOP / NEO-MVS CHA256
3183 Boards used for the Korean release
31333184 . SAH-080
31343185 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B
31353186****************************************/
r244637r244638
31853236 . NGM-081
31863237 NEO-MVS PROGTOP / NEO-MVS CHA42G-3B
31873238 NEO-MVS PROGTOP / NEO-MVS CHA256
3239 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
3240 NEO-MVS PROGBK1 / NEO-MVS CHA256B
31883241 . NGH-081
3242 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B
31893243****************************************/
31903244
31913245ROM_START( ssideki3 )
r244637r244638
32193273 NEO-MVS PROGTOP / NEO-MVS CHA256
32203274 NEO-MVS PROGTOP / NEO-MVS CHA 42G-3
32213275 NEO-MVS PROGBK1 / NEO-MVS CHA256
3276 NEO-MVS PROGTOP / NEO-MVS CHA256B
3277 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
32223278 . NGH-082
32233279****************************************/
32243280
r244637r244638
34173473 ID-0087
34183474 . NGM-087
34193475 NEO-MVS PROGSS3 / NEO-MVS CHA256
3476 NEO-MVS PROGBK1 / NEO-MVS CHA256
34203477 . NGH-087
34213478 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
34223479****************************************/
r244637r244638
35083565 . NGM-088
35093566 NEO-MVS PROGBK1 / NEO-MVS CHA42-3B
35103567 . NGH-088
3568 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
35113569****************************************/
35123570
35133571ROM_START( stakwin )
r244637r244638
35363594 . NGM-089
35373595 NEO-MVS PROGBK1 / NEO-MVS CHA256
35383596 . NGH-089
3597 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
35393598****************************************/
35403599
35413600ROM_START( pulstar )
r244637r244638
35683627 ID-0090
35693628 . ADM-009
35703629 NEO-MVS PROGTOP / NEO-MVS CHA256
3630 NEO-MVS PROGGSC / NEO-MVS CHA256
3631 NEO-MVS PROGGSC / NEO-MVS CHA256B
3632 NEO-MVS PROGBK1 / NEO-MVS CHA256B
35713633 . ADH-009
35723634****************************************/
35733635
r244637r244638
36023664
36033665/****************************************
36043666 ID-0091
3605 unknown
3667 ADK World / ADK Special 1995 ADK (CD only)
36063668****************************************/
36073669
36083670/****************************************
36093671 ID-0092
36103672 . NGM-092
36113673 NEO-MVS PROGBK1 / NEO-MVS CHA256
3674 NEO-MVS PROGTOP / NEO-MVS CHA256
36123675 . NGH-092
36133676****************************************/
36143677
r244637r244638
38303893 . NGM-097
38313894 NEO-MVS PROGBK1 / NEO-MVS CHA256
38323895 . NGH-097
3896 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
38333897****************************************/
38343898
38353899ROM_START( sonicwi3 )
r244637r244638
38863950 ID-0200
38873951 . NGM-200
38883952 NEO-MVS PROGBK1 / NEO-MVS CHA256B
3953 NEO-MVS PROGBK1 / NEO-MVS CHA256
38893954 . NGH-200
38903955****************************************/
38913956
r244637r244638
39153980 ID-0201
39163981 . NGM-201
39173982 NEO-MVS PROGBK1 / NEO-MVS CHA256
3983 NEO-MVS PROGBK1 / NEO-MVS CHA256B
39183984 . NGH-201
39193985****************************************/
39203986
r244637r244638
39914057
39924058/****************************************
39934059 ID-0204
3994 QP (prototype)
4060 QP (prototype) 1997 Success
39954061****************************************/
39964062
39974063/****************************************
r244637r244638
40314097 ID-0207
40324098 . ??M-207
40334099 NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B
4100 NEO-MVS PROG 4096 / NEO-MVS CHA42G-3B
40344101****************************************/
40354102
40364103ROM_START( neomrdo ) /* MVS ONLY RELEASE */
r244637r244638
41754242 ID-0214
41764243 . NGM-214
41774244 NEO-MVS PROGBK1 / NEO-MVS CHA256
4245 NEO-MVS PROGSS3 / NEO-MVS CHA256
41784246 . NGH-214
4247 NEO-AEG PROGBK1Y / NEO-GEO AEG CHA256RY
41794248****************************************/
41804249
41814250ROM_START( kof96 ) /* MVS VERSION */
41824251   ROM_REGION( 0x300000, "maincpu", 0 )
41834252   ROM_LOAD16_WORD_SWAP( "214-p1.p1",  0x000000, 0x100000, CRC(52755d74) SHA1(4232d627f1d2e6ea9fc8cf01571d77d4d5b8a1bb) ) /* TC538200 */
41844253   ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */
4185
4254   /* also found sets with ep1 / ep2 / ep3 / ep4 on eprom and 214-P5 on TC5316200; correct chip labels for eproms is unknown */
4255   
41864256   NEO_SFIX_128K( "214-s1.s1", CRC(1254cbdb) SHA1(fce5cf42588298711a3633e9c9c1d4dcb723ac76) ) /* TC531000 */
41874257
41884258   NEO_BIOS_AUDIO_128K( "214-m1.m1", CRC(dabc427c) SHA1(b76722ed142ee7addceb4757424870dbd003e8b3) ) /* TC531001 */
r244637r244638
42054275   ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) ) /* Plane 2,3 */ /* TC5332205 */
42064276ROM_END
42074277
4208ROM_START( kof96h )
4278ROM_START( kof96h ) /* AES VERSION */
42094279   ROM_REGION( 0x300000, "maincpu", 0 )
42104280   ROM_LOAD16_WORD_SWAP( "214-pg1.p1", 0x000000, 0x100000, CRC(bd3757c9) SHA1(35392a044117e46c088ff0fdd07d69a3faa4f96e) )
42114281   ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */
r244637r244638
42374307 . NGM-215
42384308 NEO-MVS PROGBK1 / NEO-MVS CHA256
42394309 . NGH-215
4310 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
42404311****************************************/
42414312
42424313ROM_START( ssideki4 )
r244637r244638
42684339 . ??M-216
42694340 NEO-MVS PROGTOP / NEO-MVS CHA256
42704341 . ??H-216
4342 NEO-AEG PROGTOP2Y / NEO-AEG CHA256BY
42714343****************************************/
42724344
42734345ROM_START( kizuna )
r244637r244638
43464418 . ADM-012
43474419 NEO-MVS PROGBK1 / NEO-MVS CHA256
43484420 . ADH-012
4421 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
43494422****************************************/
43504423
43514424ROM_START( ninjamas )
r244637r244638
44854558 ID-0221
44864559 . NGM-221
44874560 NEO-MVS PROGBK1 / NEO-MVS CHA256B
4561 NEO-MVS PROGBK1 / NEO-MVS CHA256
44884562 . NGH-221
44894563****************************************/
44904564
r244637r244638
45734647 . NGM-223
45744648 NEO-MVS PROGBK1 / NEO-MVS CHA256B
45754649 . NGH-223
4650 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
45764651****************************************/
45774652
45784653ROM_START( rbffspec )
r244637r244638
46054680ROM_START( rbffspeck ) /* KOREAN VERSION */
46064681   ROM_REGION( 0x500000, "maincpu", 0 )
46074682   ROM_LOAD16_WORD_SWAP( "223-p1k.p1", 0x000000, 0x100000, CRC(b78c8391) SHA1(936b356ac135331b10a37bc10882ec2e4f6b400b) )
4608   /* Chip label is correct. They used Cart ID 0124 as 0123 was allready used by quizdaisk */
4683   /* Chip label is correct. They used Cart ID 0124 as 0123 was already used by quizdaisk */
46094684   ROM_LOAD16_WORD_SWAP( "223-p2.sp2", 0x100000, 0x400000, CRC(addd8f08) SHA1(abaf5b86c8ec915c07ef2d83fce9ad03acaa4817) ) /* TC5332205 */
46104685
46114686   NEO_SFIX_128K( "223-s1.s1", CRC(7ecd6e8c) SHA1(465455afc4d83cbb118142be4671b2539ffafd79) ) /* TC531000 */
r244637r244638
46354710 . ADM-013
46364711 NEO-MVS PROGBK1 / NEO-MVS CHA256B
46374712 . ADH-013
4713 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
46384714****************************************/
46394715
46404716ROM_START( twinspri )
r244637r244638
47004776 . NGM-227
47014777 NEO-MVS PROGBK1 / NEO-MVS CHA256
47024778 . NGH-227
4779 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
47034780****************************************/
47044781
47054782ROM_START( stakwin2 )
r244637r244638
47614838 . NGM-2300
47624839 NEO-MVS PROGBK1 / NEO-MVS CHA256B
47634840 . NGH-2300
4841 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
47644842****************************************/
47654843
47664844ROM_START( breakers )
r244637r244638
48994977 . NGM-2330
49004978 NEO-MVS PROGBK1 / NEO-MVS CHA256
49014979 . NGH-2330
4980 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
49024981****************************************/
49034982
49044983ROM_START( magdrop3 )
r244637r244638
49345013   ROM_REGION( 0x500000, "maincpu", 0 )
49355014   ROM_LOAD16_WORD_SWAP( "234-p1.p1",  0x000000, 0x100000, CRC(e123a5a3) SHA1(a3ddabc00feeb54272b145246612ad4632b0e413) ) /* TC538200 */
49365015   ROM_LOAD16_WORD_SWAP( "234-p2.sp2", 0x100000, 0x400000, CRC(0fdc289e) SHA1(1ff31c0b0f4f9ddbedaf4bcf927faaae81892ec7) ) /* TC5332205 */
4937
5016   /* also found sets with p1 / sp2 / ep1 / ep2 / m1 on eprom with sticker */
5017   /* chip label is 0234-P1, 0234-SP2, 0234-EP1, 0234-EP2 and 0234-M1 */
5018   
49385019   NEO_SFIX_128K( "234-s1.s1", CRC(95561412) SHA1(995de272f572fd08d909d3d0af4251b9957b3640) ) /* TC531000 */
49395020
49405021   NEO_BIOS_AUDIO_128K( "234-m1.m1", CRC(087628ea) SHA1(48dcf739bb16699af4ab8ed632b7dcb25e470e06) ) /* TC531001 */
r244637r244638
51515232 . NGM-2390
51525233 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
51535234 . NGH-2390
5235 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
51545236****************************************/
51555237
51565238ROM_START( blazstar )
r244637r244638
52695351 ID-0241
52705352 . NGM-2410
52715353 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
5354 NEO-MVS PROGBK1 / NEO-MVS CHA256
52725355 . NGH-2410
52735356 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
52745357****************************************/
r244637r244638
52895372   NO_DELTAT_REGION
52905373
52915374   ROM_REGION( 0x2000000, "sprites", 0 )
5375   /* Different layout with 8xC (16 mbit) also exists; naming sheme 241-Cx */
52925376   ROM_LOAD16_BYTE( "241-c1.c1", 0x0000000, 0x800000, CRC(394b5e0d) SHA1(4549926f5054ee6aa7689cf920be0327e3908a50) ) /* Plane 0,1 */ /* TC5364205 */
52935377   ROM_LOAD16_BYTE( "241-c2.c2", 0x0000001, 0x800000, CRC(e5806221) SHA1(1e5475cfab129c77acc610f09369ca42ba5aafa5) ) /* Plane 2,3 */ /* TC5364205 */
52945378   ROM_LOAD16_BYTE( "241-c3.c3", 0x1000000, 0x800000, CRC(9f6bfa6f) SHA1(a4319b48004e723f81a980887678e3e296049a53) ) /* Plane 0,1 */ /* TC5364205 */
r244637r244638
52985382/****************************************
52995383 ID-0242
53005384 . NGM-2420
5301 NEO-MVS PROGSF1 (protected board) / NEO-MVS CHA512Y
5302 NEO-MVS PROGSF1E (protected board) / NEO-MVS CHA512Y
5385 NEO-MVS PROGSF1 (1998.6.17) (protected board) / NEO-MVS CHA512Y
5386 NEO-MVS PROGSF1E (1998.6.18) (protected board) / NEO-MVS CHA512Y
53035387 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
53045388 . NGH-2420
53055389 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
r244637r244638
54225506   ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) ) /* Plane 2,3 */ /* TC5364205 */
54235507ROM_END
54245508
5425ROM_START( kof98h ) /* AES VERSION */
5509ROM_START( kof98h ) /* MVS AND AES VERSION */
54265510   ROM_REGION( 0x500000, "maincpu", 0 )
54275511   ROM_LOAD16_WORD_SWAP( "242-pn1.p1", 0x000000, 0x100000, CRC(61ac868a) SHA1(26577264aa72d6af272952a876fcd3775f53e3fa) ) /* TC538200 */
54285512   ROM_LOAD16_WORD_SWAP( "242-p2.sp2", 0x100000, 0x400000, CRC(980aba4c) SHA1(5e735929ec6c3ca5b2efae3c7de47bcbb8ade2c5) ) /* TC5332205 */
r244637r244638
56895773 ID-0251
56905774 . NGM-2510
56915775 SMA protected version found on:
5692 NEO-MVS PROGLBA (NEO-SMA) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
5776 NEO-MVS PROGLBA (NEO-SMA) (1999.4.12) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
56935777 Non SMA protected version found on:
56945778 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
56955779 . NGH-2510
5696 NEO-AEG PROGLBA / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
5780 NEO-AEG PROGLBA (1999.7.6) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
56975781****************************************/
56985782
56995783ROM_START( kof99 ) /* Original Version - Encrypted Code & GFX */ /* MVS VERSION */
r244637r244638
59085992/****************************************
59095993 ID-0253
59105994 . NGM-2530
5911 NEO-MVS PROGLBA (NEO-SMA) (LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
5995 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
59125996 . NGH-2530
5913 NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
5997 NEO-AEG PROGLBA (1999.7.6) (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
59145998****************************************/
59155999
59166000ROM_START( garou ) /* Original Version - Encrypted GFX */ /* MVS VERSION - later revision */
r244637r244638
60966180 ID-0256
60976181 . NGM-2560
60986182 SMA protected version found on:
6099 NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
6183 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
61006184 Non SMA protected version found on:
61016185 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
61026186 . NGH-2560
6187 NEO-AEG PROGLBA (1999.7.6) (NEO-SMA)(LBA-SUB) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
61036188****************************************/
61046189
61056190ROM_START( mslug3 ) /* Original Version - Encrypted Code & GFX */ /* revision 2000.4.1 */ /* MVS VERSION */
r244637r244638
61086193   /* The SMA for this release has a green colour marking; the older revision has a white colour marking */
61096194   ROM_LOAD16_WORD_SWAP( "256-pg1.p1", 0x100000, 0x400000, CRC(b07edfd5) SHA1(dcbd9e500bfae98d754e55cdbbbbf9401013f8ee) ) /* TC5332202 */
61106195   ROM_LOAD16_WORD_SWAP( "256-pg2.p2", 0x500000, 0x400000, CRC(6097c26b) SHA1(248ec29d21216f29dc6f5f3f0e1ad1601b3501b6) ) /* TC5332202 */
6111
6196     
61126197   ROM_Y_ZOOM
61136198
61146199   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244637r244638
61436228   ROM_REGION( 0x500000, "maincpu", 0 )
61446229   ROM_LOAD16_WORD_SWAP( "256-ph1.p1",  0x000000, 0x100000, CRC(9c42ca85) SHA1(7a8f77a89867b889295ae9b9dfd4ba28f02d234d) )
61456230   ROM_LOAD16_WORD_SWAP( "256-ph2.sp2", 0x100000, 0x400000, CRC(1f3d8ce8) SHA1(08b05a8abfb86ec09a5e758d6273acf1489961f9) )
6146
6231   /* also found AES set with p1 / p2 on maskrom on NEO-AEG PROGLBA (NEO-SMA); chip labels is 256-PG1 and 256-PG2 */
6232   /* The SMA for this release has a pink color marking */
6233   
61476234   ROM_Y_ZOOM
61486235
61496236   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244637r244638
61786265 ID-0257
61796266 . NGM-2570
61806267 SMA protected version found on:
6181 NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6268 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
61826269 Non SMA protected version found on:
61836270 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
61846271 . NGH-2570
r244637r244638
63306417 . NGM-2610
63316418 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
63326419 . NGH-2610
6420 NEO-AEG PROGBK1F / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
63336421****************************************/
63346422
63356423ROM_START( sengoku3 ) /* Original Version - Encrypted GFX */
r244637r244638
64496537 . NGM-2630
64506538 NEO-MVS PROGBK2 (NEO-PCM2 SNK)/ NEO-MVS CHAFIO (NEO-CMC 7050)
64516539 . NGH-2630
6452 NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6540 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
64536541****************************************/
64546542
64556543ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */
r244637r244638
65246612/****************************************
65256613 ID-0264
65266614 . NGM-264?
6527 NEO-MVS PROGBK2 (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6615 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
65286616 . NGH-2641
6529 NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6617 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
65306618  - Distribution by BrezzaSoft
65316619****************************************/
65326620
r244637r244638
65676655/****************************************
65686656 ID-0265
65696657 . NGM-2650
6570 NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6658 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
65716659 . NGH-2650
65726660 NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
65736661****************************************/
r244637r244638
66106698/****************************************
66116699 ID-0266
66126700 . NGM-2660
6613 NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6701 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
66146702 . NGH-2660
6615 NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6703 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
66166704****************************************/
66176705
66186706ROM_START( matrim ) /* Encrypted Set */ /* MVS AND AES VERSION */
r244637r244638
66596747ROM_START( pnyaa ) /* Encrypted Set */ /* MVS ONLY RELEASE */
66606748   ROM_REGION( 0x100000, "maincpu", 0 )
66616749   ROM_LOAD16_WORD_SWAP( "267-p1.p1", 0x000000, 0x100000, CRC(112fe2c0) SHA1(01420e051f0bdbd4f68ce306a3738161b96f8ba8) ) /* mask rom TC538200 */
6662
6750   /* also found set with p1 and m1 on eprom with sticker; chip labels is PN 2.02 and M1 */
6751   
66636752   ROM_Y_ZOOM
66646753
66656754   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244637r244638
66866775/****************************************
66876776 ID-0268
66886777 . NGM-2680
6689 NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6778 NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
66906779 . NGH-2680
6780 NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
66916781****************************************/
66926782
66936783ROM_START( mslug5 ) /* Encrypted Set */ /* MVS VERSION */
r244637r244638
67296819   ROM_REGION( 0x800000, "maincpu", 0 )
67306820   ROM_LOAD32_WORD_SWAP( "268-p1c.p1", 0x000000, 0x400000, CRC(3636690a) SHA1(e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3) )
67316821   ROM_LOAD32_WORD_SWAP( "268-p2c.p2", 0x000002, 0x400000, CRC(8dfc47a2) SHA1(27d618cfbd0107a4d2a836797e967b39d2eb4851) )
6732
6822   /* also found AES set with p1 / p2 on maskrom; chip labels is 268-P1CR2 and 268-P2CR2 */
6823   
67336824   ROM_Y_ZOOM
67346825
67356826   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244637r244638
68046895/****************************************
68056896 ID-0270
68066897 . NGM-2700
6807 NEO-MVS PROGBK2R (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6898 NEO-MVS PROGBK2R (2003.8.26) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
68086899 . NGH-2700
6809 NEO-AEG PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
6900 NEO-AEG PROGBK2S (2003.10.16) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
68106901****************************************/
68116902
68126903ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */
r244637r244638
68826973/****************************************
68836974 ID-0271
68846975 . NGM-2710
6885 NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6976 NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
68866977 . NGH-2710
6887 NEO-AEG PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
6978 NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
68886979****************************************/
68896980
68906981ROM_START( kof2003 ) /* Encrypted Code + Sound + GFX Roms */ /* MVS VERSION */
r244637r244638
69637054/****************************************
69647055 ID-0272
69657056 . NGM-2720
6966 NEO-MVS PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
7057 NEO-MVS PROGBK2S (2003.10.18) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
69677058 . NGH-2720
69687059****************************************/
69697060
r244637r244638
70977188/****************************************
70987189 B-J-02
70997190 . ???-????
7100 MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14)
7191 MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
71017192****************************************/
71027193
71037194ROM_START( jockeygp ) /* MVS ONLY RELEASE */
r244637r244638
97809871GAME( 1999, ctomaday,   neogeo,   neogeo_noslot,   neogeo, neogeo_state,   neogeo,   ROT0, "Visco", "Captain Tomaday", GAME_SUPPORTS_SAVE )
97819872GAME( 1999, ganryu,     neogeo,   neogeo_noslot,   neogeo, neogeo_noslot_state,   ganryu,   ROT0, "Visco", "Ganryu / Musashi Ganryuki" , GAME_SUPPORTS_SAVE ) /* Encrypted GFX */
97829873GAME( 2000, bangbead,   neogeo,   neogeo_noslot,   neogeo, neogeo_noslot_state,   bangbead, ROT0, "Visco", "Bang Bead", GAME_SUPPORTS_SAVE )
9874GAME( 2000, b2b,        neogeo,   neogeo_noslot,   neogeo, neogeo_state,   neogeo,   ROT0, "Visco", "Bang Bang Busters (2010 NCI release)" , GAME_SUPPORTS_SAVE )
97839875
97849876/* Mega Enterprise */
97859877GAME( 2002, mslug4,     neogeo,   neogeo_noslot,   neogeo, neogeo_noslot_state,   mslug4,   ROT0, "Mega / Playmore", "Metal Slug 4 (NGM-2630)", GAME_SUPPORTS_SAVE )
r244637r244638
98139905// Fast Striker (c)2010 - MVS/AES
98149906// Fast Striker 1.5 (c)2010 - MVS/AES
98159907// GunLord (c)2012 - MVS/AES
9908// Neo XYX (c)2013 - MVS/AES
9909// Razion (c)2014 - MVS/AES?
98169910
98179911/* N.C.I - LE CORTEX */
9818// Bang Bang Busters (c)2010 - MVS?/AES
9819// Treasure of the Caribbean (c)2011 - MVS?/AES
9912// Treasure of the Caribbean (c)2011 - AES only (no credits system if ran on an MVS, Freeplay)
9913
9914/* NEOBITZ */
9915// Knight's Chance (c)2014 - MVS/AES
trunk/src/mame/drivers/opwolf.c
r244637r244638
825825   ROM_LOAD16_BYTE( "b20-04.39",     0x20000, 0x10000, CRC(216b4838) SHA1(2851cae00bb3e32e20f35fdab8ed6f149e658363) )
826826   ROM_LOAD16_BYTE( "b20-20.29",     0x20001, 0x10000, CRC(d244431a) SHA1(cb6c1d330a526f05c205f68247328161b8d4a1ba) )
827827
828   ROM_REGION( 0x20000, "audiocpu", 0 )      /* sound cpu */
829   ROM_LOAD( "b20-07.10",  0x00000, 0x04000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) )
830   ROM_CONTINUE(           0x10000, 0x0c000 ) /* banked stuff */
828   ROM_REGION( 0x10000, "audiocpu", 0 )      /* sound cpu */
829   ROM_LOAD( "b20-07.10",  0x00000, 0x10000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) )
831830
832831   ROM_REGION( 0x80000, "gfx1", 0 )
833832   ROM_LOAD( "b20-13.13",  0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) )    /* SCR tiles (8 x 8) */
trunk/src/mame/mame.lst
r244637r244638
77047704kof2000n        // 0257 (c) 2000 SNK
77057705            // 0258 SNK vs. Capcom?
77067706bangbead        // 0259 (c) 2000 Visco
7707b2b            // 0071 (c) 2000 Visco (released by NCI in 2010)
77077708nitd            // 0260 (c) 2000 Eleven / Gavaking
77087709nitdbl          // bootleg
77097710sengoku3        // 0261 (c) 2001 Noise Factory / SNK
trunk/src/mess/drivers/cnsector.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Parker Brothers Code Name: Sector, by Bob Doyle
6  * MP0905BNL ZA0379 (die labeled 0970F-05B)
7
8  This is a tabletop submarine pursuit game. A grid board and small toy
9  boats are used to remember your locations (a Paint app should be ok too).
10  Refer to the official manual for more information, it is not a simple game.
11
12
13  TODO:
14  - MCU clock is unknown
15
16***************************************************************************/
17
18#include "emu.h"
19#include "cpu/tms0980/tms0980.h"
20
21#include "cnsector.lh"
22
23// master clock is unknown, the value below is an approximation
24#define MASTER_CLOCK (250000)
25
26
27class cnsector_state : public driver_device
28{
29public:
30   cnsector_state(const machine_config &mconfig, device_type type, const char *tag)
31      : driver_device(mconfig, type, tag),
32      m_maincpu(*this, "maincpu"),
33      m_button_matrix(*this, "IN")
34   { }
35
36   required_device<cpu_device> m_maincpu;
37   required_ioport_array<5> m_button_matrix;
38
39   UINT16 m_o;
40
41   UINT16 m_display_state[0x10];
42   UINT16 m_display_cache[0x10];
43   UINT8 m_display_decay[0x100];
44
45   DECLARE_READ8_MEMBER(read_k);
46   DECLARE_WRITE16_MEMBER(write_o);
47   DECLARE_WRITE16_MEMBER(write_r);
48
49   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
50   void display_update();
51
52   virtual void machine_start();
53};
54
55
56
57/***************************************************************************
58
59  LED Display
60
61***************************************************************************/
62
63// The device strobes the outputs very fast, it is unnoticeable to the user.
64// To prevent flickering here, we need to simulate a decay.
65
66// decay time, in steps of 1ms
67#define DISPLAY_DECAY_TIME 40
68
69void cnsector_state::display_update()
70{
71   UINT16 active_state[0x10];
72
73   for (int i = 0; i < 0x10; i++)
74   {
75      active_state[i] = 0;
76
77      for (int j = 0; j < 0x10; j++)
78      {
79         int di = j << 4 | i;
80
81         // turn on powered segments
82         if (m_display_state[i] >> j & 1)
83            m_display_decay[di] = DISPLAY_DECAY_TIME;
84
85         // determine active state
86         int ds = (m_display_decay[di] != 0) ? 1 : 0;
87         active_state[i] |= (ds << j);
88      }
89   }
90
91   // on difference, send to output
92   for (int i = 0; i < 0x10; i++)
93      if (m_display_cache[i] != active_state[i])
94         output_set_digit_value(i, active_state[i]);
95
96   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
97}
98
99TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::display_decay_tick)
100{
101   // slowly turn off unpowered segments
102   for (int i = 0; i < 0x100; i++)
103      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
104         m_display_decay[i]--;
105
106   display_update();
107}
108
109
110
111/***************************************************************************
112
113  I/O
114
115***************************************************************************/
116
117READ8_MEMBER(cnsector_state::read_k)
118{
119   UINT8 k = 0;
120
121   // read selected button rows
122   for (int i = 0; i < 5; i++)
123      if (m_o >> i & 1)
124         k |= m_button_matrix[i]->read();
125
126   return k;
127}
128
129WRITE16_MEMBER(cnsector_state::write_r)
130{
131   // R0-R5: select digit (right-to-left)
132   for (int i = 0; i < 6; i++)
133      m_display_state[i] = (data >> i & 1) ? m_o : 0;
134   display_update();
135
136   // R6-R9: direction leds
137   for (int i = 6; i < 10; i++)
138      output_set_lamp_value(i - 6, data >> i & 1);
139}
140
141WRITE16_MEMBER(cnsector_state::write_o)
142{
143   // O0-O4: input mux
144   // O0-O7: digit segments
145   m_o = data;
146}
147
148
149
150/***************************************************************************
151
152  Inputs
153
154***************************************************************************/
155
156static INPUT_PORTS_START( cnsector )
157   PORT_START("IN.0") // O0
158   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship")
159   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left")
160   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
161   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range")
162
163   PORT_START("IN.1") // O1
164   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim")
165   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right")
166   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
167   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
168
169   PORT_START("IN.2") // O2
170   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire")
171   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button
172   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
173   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall")
174
175   PORT_START("IN.3") // O3
176   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button
177   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower")
178   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
179   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
180
181   PORT_START("IN.4") // O4
182   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode")
183   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster")
184   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
185   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship")
186INPUT_PORTS_END
187
188
189
190/***************************************************************************
191
192  Machine Config
193
194***************************************************************************/
195
196void cnsector_state::machine_start()
197{
198   // zerofill
199   memset(m_display_state, 0, sizeof(m_display_state));
200   memset(m_display_cache, 0, sizeof(m_display_cache));
201   memset(m_display_decay, 0, sizeof(m_display_decay));
202
203   m_o = 0;
204
205   // register for savestates
206   save_item(NAME(m_display_state));
207   save_item(NAME(m_display_cache));
208   save_item(NAME(m_display_decay));
209
210   save_item(NAME(m_o));
211}
212
213
214static MACHINE_CONFIG_START( cnsector, cnsector_state )
215
216   /* basic machine hardware */
217   MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
218   MCFG_TMS1XXX_READ_K_CB(READ8(cnsector_state, read_k))
219   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o))
220   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r))
221
222   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", cnsector_state, display_decay_tick, attotime::from_msec(1))
223
224   MCFG_DEFAULT_LAYOUT(layout_cnsector)
225
226   /* no video! */
227
228   /* no sound! */
229MACHINE_CONFIG_END
230
231
232
233/***************************************************************************
234
235  Game driver(s)
236
237***************************************************************************/
238
239ROM_START( cnsector )
240   ROM_REGION( 0x0400, "maincpu", 0 )
241   ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
242
243   ROM_REGION( 782, "maincpu:ipla", 0 )
244   ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
245   ROM_REGION( 860, "maincpu:mpla", 0 )
246   ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) )
247   ROM_REGION( 352, "maincpu:opla", 0 )
248   ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) )
249   ROM_REGION( 157, "maincpu:spla", 0 )
250   ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
251ROM_END
252
253
254CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
trunk/src/mess/drivers/elecdet.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Ideal Electronic Detective
6  * TMS0980NLL MP6100A (die labeled 0980B-00)
7  hardware (and concept) is very similar to Parker Bros Stop Thief
8
9  This is an electronic board game. It requires game cards with suspect info,
10  and good old pen and paper to record game progress. To start the game, enter
11  difficulty(1-3), then number of players(1-4), then [ENTER]. Refer to the
12  manual for more information.
13
14
15  TODO:
16  - MCU clock is unknown
17
18***************************************************************************/
19
20#include "emu.h"
21#include "cpu/tms0980/tms0980.h"
22#include "sound/speaker.h"
23
24#include "elecdet.lh"
25
26// master clock is unknown, the value below is an approximation
27#define MASTER_CLOCK (425000)
28
29
30class elecdet_state : public driver_device
31{
32public:
33   elecdet_state(const machine_config &mconfig, device_type type, const char *tag)
34      : driver_device(mconfig, type, tag),
35      m_maincpu(*this, "maincpu"),
36      m_button_matrix(*this, "IN"),
37      m_speaker(*this, "speaker")
38   { }
39
40   required_device<cpu_device> m_maincpu;
41   required_ioport_array<5> m_button_matrix;
42   required_device<speaker_sound_device> m_speaker;
43
44   UINT16 m_o;
45   bool m_power_on;
46
47   UINT16 m_display_state[0x10];
48   UINT16 m_display_cache[0x10];
49   UINT8 m_display_decay[0x100];
50
51   DECLARE_READ8_MEMBER(read_k);
52   DECLARE_WRITE16_MEMBER(write_o);
53   DECLARE_WRITE16_MEMBER(write_r);
54
55   DECLARE_INPUT_CHANGED_MEMBER(power_button);
56   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
57
58   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
59   void display_update();
60
61   virtual void machine_reset();
62   virtual void machine_start();
63};
64
65
66
67/***************************************************************************
68
69  LED Display
70
71***************************************************************************/
72
73// The device strobes the outputs very fast, it is unnoticeable to the user.
74// To prevent flickering here, we need to simulate a decay.
75
76// decay time, in steps of 1ms
77#define DISPLAY_DECAY_TIME 40
78
79void elecdet_state::display_update()
80{
81   UINT16 active_state[0x10];
82
83   for (int i = 0; i < 0x10; i++)
84   {
85      active_state[i] = 0;
86
87      for (int j = 0; j < 0x10; j++)
88      {
89         int di = j << 4 | i;
90
91         // turn on powered segments
92         if (m_power_on && m_display_state[i] >> j & 1)
93            m_display_decay[di] = DISPLAY_DECAY_TIME;
94
95         // determine active state
96         int ds = (m_display_decay[di] != 0) ? 1 : 0;
97         active_state[i] |= (ds << j);
98      }
99   }
100
101   // on difference, send to output
102   for (int i = 0; i < 0x10; i++)
103      if (m_display_cache[i] != active_state[i])
104         output_set_digit_value(i, active_state[i]);
105
106   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
107}
108
109TIMER_DEVICE_CALLBACK_MEMBER(elecdet_state::display_decay_tick)
110{
111   // slowly turn off unpowered segments
112   for (int i = 0; i < 0x100; i++)
113      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
114         m_display_decay[i]--;
115
116   display_update();
117}
118
119
120
121/***************************************************************************
122
123  I/O
124
125***************************************************************************/
126
127READ8_MEMBER(elecdet_state::read_k)
128{
129   // the Vss row is always on
130   UINT8 k = m_button_matrix[4]->read();
131
132   // read selected button rows
133   for (int i = 0; i < 4; i++)
134   {
135      const int ki[4] = { 0, 1, 4, 6 };
136      if (m_o >> ki[i] & 1)
137         k |= m_button_matrix[i]->read();
138   }
139
140   return k;
141}
142
143WRITE16_MEMBER(elecdet_state::write_r)
144{
145   // R0-R6: select digit
146   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3) & 0x7f;
147   for (int i = 0; i < 7; i++)
148      m_display_state[i] = (data >> i & 1) ? o : 0;
149
150   display_update();
151
152   // R7,R8: speaker on
153   m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
154}
155
156WRITE16_MEMBER(elecdet_state::write_o)
157{
158   // O0,O1,O4,O6: input mux
159   // O0-O6: led segments A-G
160   // O7: speaker out
161   m_o = data;
162}
163
164
165
166/***************************************************************************
167
168  Inputs
169
170***************************************************************************/
171
172INPUT_CHANGED_MEMBER(elecdet_state::power_button)
173{
174   m_power_on = (bool)(FPTR)param;
175   m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
176}
177
178/* physical button layout and labels is like this:
179
180    [1]   [2]   [3]   [SUSPECT]
181    [4]   [5]   [6]   [PRIVATE QUESTION]
182    [7]   [8]   [9]   [I ACCUSE]
183                [0]   [ENTER]
184    [ON]  [OFF]       [END TURN]
185*/
186
187static INPUT_PORTS_START( elecdet )
188   PORT_START("IN.0") // O0 pin18
189   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
190   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
191   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
192   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question")
193   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
194
195   PORT_START("IN.1") // O1 pin17
196   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
197   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
198   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
199   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
200   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
201
202   PORT_START("IN.2") // O4 pin14
203   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
204   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
205   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
206   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse")
207   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
208
209   PORT_START("IN.3") // O6 pin12
210   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
211   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
212   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
213   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Suspect")
214   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
215
216   // note: even though power buttons are on the matrix, they are not CPU-controlled
217   PORT_START("IN.4") // Vss!
218   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)
219   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
220   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
221   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("End Turn")
222   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)
223INPUT_PORTS_END
224
225
226
227/***************************************************************************
228
229  Machine Config
230
231***************************************************************************/
232
233WRITE_LINE_MEMBER(elecdet_state::auto_power_off)
234{
235   // TMS0980 auto power-off opcode
236   if (state)
237   {
238      m_power_on = false;
239      m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
240   }
241}
242
243
244void elecdet_state::machine_reset()
245{
246   m_power_on = true;
247}
248
249void elecdet_state::machine_start()
250{
251   // zerofill
252   memset(m_display_state, 0, sizeof(m_display_state));
253   memset(m_display_cache, 0, sizeof(m_display_cache));
254   memset(m_display_decay, 0, sizeof(m_display_decay));
255
256   m_o = 0;
257   m_power_on = false;
258
259   // register for savestates
260   save_item(NAME(m_display_state));
261   save_item(NAME(m_display_cache));
262   save_item(NAME(m_display_decay));
263
264   save_item(NAME(m_o));
265   save_item(NAME(m_power_on));
266}
267
268
269static MACHINE_CONFIG_START( elecdet, elecdet_state )
270
271   /* basic machine hardware */
272   MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK)
273   MCFG_TMS1XXX_READ_K_CB(READ8(elecdet_state, read_k))
274   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecdet_state, write_o))
275   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecdet_state, write_r))
276   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(elecdet_state, auto_power_off))
277
278   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", elecdet_state, display_decay_tick, attotime::from_msec(1))
279
280   MCFG_DEFAULT_LAYOUT(layout_elecdet)
281
282   /* no video! */
283
284   /* sound hardware */
285   MCFG_SPEAKER_STANDARD_MONO("mono")
286   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
287   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
288MACHINE_CONFIG_END
289
290
291
292/***************************************************************************
293
294  Game driver(s)
295
296***************************************************************************/
297
298ROM_START( elecdet )
299   ROM_REGION( 0x1000, "maincpu", 0 )
300   ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) )
301
302   ROM_REGION( 1246, "maincpu:ipla", 0 )
303   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
304   ROM_REGION( 1982, "maincpu:mpla", 0 )
305   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
306   ROM_REGION( 352, "maincpu:opla", 0 )
307   ROM_LOAD( "tms0980_elecdet_opla.pla", 0, 352, CRC(652d19c3) SHA1(75550c2b293453b6b9efed88c8cc77195a53161f) )
308   ROM_REGION( 157, "maincpu:spla", 0 )
309   ROM_LOAD( "tms0980_elecdet_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
310ROM_END
311
312
313CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/hh_tms1k.c
r244637r244638
1414#include "sound/speaker.h"
1515
1616#include "amaztron.lh"
17#include "bankshot.lh"
18#include "cnsector.lh"
1719#include "ebball.lh"
20#include "elecdet.lh"
1821#include "comp4.lh"
22#include "mathmagi.lh"
23#include "merlin.lh"
1924#include "simon.lh"
25#include "splitsec.lh"
26#include "starwbc.lh"
27#include "stopthie.lh"
28#include "tandy12.lh"
2029#include "tc4.lh"
2130
2231
r244637r244638
2837      m_maincpu(*this, "maincpu"),
2938      m_inp_matrix(*this, "IN"),
3039      m_speaker(*this, "speaker"),
40      m_display_wait(33),
3141      m_display_maxy(1),
32      m_display_maxx(0),
33      m_display_wait(50)
42      m_display_maxx(0)
3443   { }
3544
45   // devices
3646   required_device<cpu_device> m_maincpu;
3747   optional_ioport_array<7> m_inp_matrix; // max 7
3848   optional_device<speaker_sound_device> m_speaker;
3949   
50   // misc common
4051   UINT16 m_r;
4152   UINT16 m_o;
4253   UINT16 m_inp_mux;
54   bool m_power_on;
4355
56   UINT8 read_inputs(int columns);
57   DECLARE_INPUT_CHANGED_MEMBER(tms0980_power_button);
58   DECLARE_WRITE_LINE_MEMBER(tms0980_auto_power_off);
59
60   virtual void machine_start();
61   virtual void machine_reset();
62
63   // display common
64   int m_display_wait;
4465   int m_display_maxy;
4566   int m_display_maxx;
46   int m_display_wait;
4767   
4868   UINT32 m_display_state[0x20];
4969   UINT32 m_display_cache[0x20];
r244637r244638
5171   UINT16 m_7seg_mask[0x20];
5272
5373   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
54   bool index_is_7segled(int index);
5574   void display_update();
5675   
57   UINT8 read_inputs(int columns);
76   // game-specific handlers
77   void mathmagi_display();
78   DECLARE_READ8_MEMBER(mathmagi_read_k);
79   DECLARE_WRITE16_MEMBER(mathmagi_write_r);
80   DECLARE_WRITE16_MEMBER(mathmagi_write_o);
5881
59   // game-specific handlers
6082   void amaztron_display();
6183   DECLARE_READ8_MEMBER(amaztron_read_k);
84   DECLARE_WRITE16_MEMBER(amaztron_write_r);
6285   DECLARE_WRITE16_MEMBER(amaztron_write_o);
63   DECLARE_WRITE16_MEMBER(amaztron_write_r);
6486
6587   void tc4_display();
6688   DECLARE_READ8_MEMBER(tc4_read_k);
89   DECLARE_WRITE16_MEMBER(tc4_write_r);
6790   DECLARE_WRITE16_MEMBER(tc4_write_o);
68   DECLARE_WRITE16_MEMBER(tc4_write_r);
6991
92   DECLARE_READ8_MEMBER(elecdet_read_k);
93   DECLARE_WRITE16_MEMBER(elecdet_write_r);
94   DECLARE_WRITE16_MEMBER(elecdet_write_o);
95
96   void starwbc_display();
97   DECLARE_READ8_MEMBER(starwbc_read_k);
98   DECLARE_WRITE16_MEMBER(starwbc_write_r);
99   DECLARE_WRITE16_MEMBER(starwbc_write_o);
100
70101   DECLARE_READ8_MEMBER(comp4_read_k);
102   DECLARE_WRITE16_MEMBER(comp4_write_r);
71103   DECLARE_WRITE16_MEMBER(comp4_write_o);
72   DECLARE_WRITE16_MEMBER(comp4_write_r);
73104
74105   DECLARE_READ8_MEMBER(simon_read_k);
106   DECLARE_WRITE16_MEMBER(simon_write_r);
75107   DECLARE_WRITE16_MEMBER(simon_write_o);
76   DECLARE_WRITE16_MEMBER(simon_write_r);
77108
78   virtual void machine_start();
109   DECLARE_READ8_MEMBER(cnsector_read_k);
110   DECLARE_WRITE16_MEMBER(cnsector_write_r);
111   DECLARE_WRITE16_MEMBER(cnsector_write_o);
112
113   DECLARE_READ8_MEMBER(merlin_read_k);
114   DECLARE_WRITE16_MEMBER(merlin_write_r);
115   DECLARE_WRITE16_MEMBER(merlin_write_o);
116
117   DECLARE_READ8_MEMBER(stopthief_read_k);
118   DECLARE_WRITE16_MEMBER(stopthief_write_r);
119   DECLARE_WRITE16_MEMBER(stopthief_write_o);
120
121   void bankshot_display();
122   DECLARE_READ8_MEMBER(bankshot_read_k);
123   DECLARE_WRITE16_MEMBER(bankshot_write_r);
124   DECLARE_WRITE16_MEMBER(bankshot_write_o);
125
126   void splitsec_display();
127   DECLARE_READ8_MEMBER(splitsec_read_k);
128   DECLARE_WRITE16_MEMBER(splitsec_write_r);
129   DECLARE_WRITE16_MEMBER(splitsec_write_o);
130
131   void tandy12_display();
132   DECLARE_READ8_MEMBER(tandy12_read_k);
133   DECLARE_WRITE16_MEMBER(tandy12_write_r);
134   DECLARE_WRITE16_MEMBER(tandy12_write_o);
135
136   DECLARE_READ8_MEMBER(unk3403_read_k);
137   DECLARE_WRITE16_MEMBER(unk3403_write_r);
138   DECLARE_WRITE16_MEMBER(unk3403_write_o);
79139};
80140
81141
r244637r244638
86146   memset(m_display_cache, 0, sizeof(m_display_cache));
87147   memset(m_display_decay, 0, sizeof(m_display_decay));
88148   memset(m_7seg_mask, 0, sizeof(m_7seg_mask));
89
149   
90150   m_o = 0;
91151   m_r = 0;
92152   m_inp_mux = 0;
153   m_power_on = false;
93154
94155   // register for savestates
95156   save_item(NAME(m_display_maxy));
r244637r244638
104165   save_item(NAME(m_o));
105166   save_item(NAME(m_r));
106167   save_item(NAME(m_inp_mux));
168   save_item(NAME(m_power_on));
107169}
108170
109171
172void hh_tms1k_state::machine_reset()
173{
174   m_power_on = true;
175}
176
110177/***************************************************************************
111178
112179  Helper Functions
113180
114181***************************************************************************/
115182
183// LED segments
184enum
185{
186   lA = 0x01,
187   lB = 0x02,
188   lC = 0x04,
189   lD = 0x08,
190   lE = 0x10,
191   lF = 0x20,
192   lG = 0x40,
193   lDP = 0x80
194};
116195
117196// The device strobes the outputs very fast, it is unnoticeable to the user.
118197// To prevent flickering here, we need to simulate a decay.
r244637r244638
129208      for (int x = 0; x < m_display_maxx; x++)
130209      {
131210         // turn on powered segments
132         if (m_display_state[y] >> x & 1)
211         if (m_power_on && m_display_state[y] >> x & 1)
133212            m_display_decay[y][x] = m_display_wait;
134213
135214         // determine active state
r244637r244638
177256   return k;
178257}
179258
259INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button)
260{
261   m_power_on = (bool)(FPTR)param;
262   m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
263}
180264
265WRITE_LINE_MEMBER(hh_tms1k_state::tms0980_auto_power_off)
266{
267   // TMS0980 auto power-off opcode
268   if (state)
269   {
270      m_power_on = false;
271      m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
272   }
273}
181274
182275/***************************************************************************
183276
r244637r244638
187280
188281/***************************************************************************
189282
283  APF Mathemagician
284  * TMS1100 MCU, labeled MP1030
285  * 2 x DS8870N - Hex LED Digit Driver
286  * 2 x DS8861N - MOS-to-LED 5-Segment Driver
287
288  This is a tabletop educational calculator. It came with plastic overlays
289  for playing different kind of games. Refer to the manual on how to use it.
290  In short, to start from scratch, press [SEL]. By default the device is in
291  calculator teaching mode. If [SEL] is followed with 1-6 and then [NXT],
292  one of the games is started.
293
294  1) Number Machine
295  2) Countin' On
296  3) Walk The Plank
297  4) Gooey Gumdrop
298  5) Football
299  6) Lunar Lander
300
301
302  TODO:
303  - some of the led symbols are probably wrong, output PLA is unknown
304  - microinstructions PLA is not verified
305
306***************************************************************************/
307
308void hh_tms1k_state::mathmagi_display()
309{
310   m_display_maxy = 11;
311   m_display_maxx = 8;
312
313   // R0-R7: 7seg leds
314   for (int y = 0; y < 8; y++)
315   {
316      m_7seg_mask[y] = 0x7f;
317      m_display_state[y] = (m_r >> y & 1) ? ((m_o >> 1 & 0x7f) | (m_o << 7 & 0x80)) : 0;
318   }
319
320   // R8: custom math symbols digit
321   // R9: custom equals digit
322   // R10: misc lamps
323   for (int y = 8; y < 11; y++)
324      m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
325
326   display_update();
327}
328
329READ8_MEMBER(hh_tms1k_state::mathmagi_read_k)
330{
331   return read_inputs(6);
332}
333
334
335WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_r)
336{
337   // R3,R5-R7,R9,R10: input mux
338   m_inp_mux = (data >> 3 & 1) | (data >> 4 & 0xe) | (data >> 5 & 0x30);
339   
340   // +others:
341   m_r = data;
342   mathmagi_display();
343}
344
345WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_o)
346{
347   // O1-O7: led segments A-G
348   // O0: N/C
349   data = (data << 1 & 0xfe) | (data >> 7 & 1); // because opla is unknown
350   m_o = data;
351}
352
353/* physical button layout and labels is like this:
354
355    ON     ONE       [SEL] [NXT] [?]   [/]
356     |      |        [7]   [8]   [9]   [x]
357    OFF    TWO       [4]   [5]   [6]   [-]
358         PLAYERS     [1]   [2]   [3]   [+]
359                     [0]   [_]   [r]   [=]
360*/
361
362static INPUT_PORTS_START( mathmagi )
363   PORT_START("IN.0") // R3
364   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
365   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
366   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
367   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
368
369   PORT_START("IN.1") // R5
370   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
371   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("_") // blank
372   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("r")
373   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
374
375   PORT_START("IN.2") // R6
376   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
377   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
378   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
379   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
380
381   PORT_START("IN.3") // R7
382   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL")
383   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("NXT")
384   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("?") // check
385   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
386
387   PORT_START("IN.4") // R9
388   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
389   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
390   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
391   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
392
393   PORT_START("IN.5") // R10
394   PORT_CONFNAME( 0x01, 0x00, "Players")
395   PORT_CONFSETTING(    0x00, "1" )
396   PORT_CONFSETTING(    0x01, "2" )
397   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
398   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
399   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
400INPUT_PORTS_END
401
402static const UINT16 mathmagi_output_pla[0x20] =
403{
404   lA+lB+lC+lD+lE+lF,      // 0
405   lB+lC,                  // 1
406   lA+lB+lG+lE+lD,         // 2
407   lA+lB+lG+lC+lD,         // 3
408   lF+lB+lG+lC,            // 4
409   lA+lF+lG+lC+lD,         // 5
410   lA+lF+lG+lC+lD+lE,      // 6
411   lA+lB+lC,               // 7
412   lA+lB+lC+lD+lE+lF+lG,   // 8
413   lA+lB+lG+lF+lC+lD,      // 9
414   lA+lB+lG+lE,            // question mark
415   lE+lG,                  // r
416   lD,                     // underscore?
417   lA+lF+lG+lE+lD,         // E
418   lG,                     // -
419   0,                      // empty
420   0,                      // empty
421   lG,                     // lamp 4 or MATH -
422   lD,                     // lamp 3
423   lF+lE+lD+lC+lG,         // b
424   lB,                     // lamp 2
425   lB+lG,                  // MATH +
426   lB+lC,                  // MATH mul
427   lF+lG+lB+lC+lD,         // y
428   lA,                     // lamp 1
429   lA+lG,                  // MATH div
430   lA+lD,                  // EQUALS
431   0,                      // ?
432   0,                      // ?
433   lE+lD+lC+lG,            // o
434   0,                      // ?
435   lA+lF+lE+lD+lC          // G
436};
437
438
439static MACHINE_CONFIG_START( mathmagi, hh_tms1k_state )
440
441   /* basic machine hardware */
442   MCFG_CPU_ADD("maincpu", TMS1100, 175000) // RC osc. R=68K, C=82pf -> ~175kHz
443   MCFG_TMS1XXX_OUTPUT_PLA(mathmagi_output_pla)
444   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, mathmagi_read_k))
445   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, mathmagi_write_r))
446   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, mathmagi_write_o))
447
448   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
449   MCFG_DEFAULT_LAYOUT(layout_mathmagi)
450
451   /* no video! */
452
453   /* no sound! */
454MACHINE_CONFIG_END
455
456
457
458
459
460/***************************************************************************
461
190462  Coleco Amaze-A-Tron, by Ralph Baer
191463  * TMS1100 MCU, labeled MP3405(die label too)
192464
r244637r244638
209481      m_display_state[y] = (m_r >> (y + 8) & 1) ? m_o : 0;
210482   }
211483   
212   // R6,R7: lamps -> lamp20, lamp21
484   // R6,R7: lamps (-> lamp20,21)
213485   m_display_state[2] = m_r >> 6 & 3;
214486   
215487   display_update();
r244637r244638
296568   /* basic machine hardware */
297569   MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K?, C=100pf -> ~350kHz
298570   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, amaztron_read_k))
571   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, amaztron_write_r))
299572   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, amaztron_write_o))
300   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, amaztron_write_r))
301573
302574   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
303
304575   MCFG_DEFAULT_LAYOUT(layout_amaztron)
305576
306577   /* no video! */
r244637r244638
354625
355626void hh_tms1k_state::tc4_display()
356627{
628   m_display_wait = 50;
357629   m_display_maxy = 10;
358630   m_display_maxx = 9;
359631   
r244637r244638
380652   return k;
381653}
382654
383WRITE16_MEMBER(hh_tms1k_state::tc4_write_o)
384{
385   // O0-O7: leds/7segment
386   m_o = data;
387   tc4_display();
388}
389
390655WRITE16_MEMBER(hh_tms1k_state::tc4_write_r)
391656{
392657   // R10: speaker out
r244637r244638
402667   tc4_display();
403668}
404669
670WRITE16_MEMBER(hh_tms1k_state::tc4_write_o)
671{
672   // O0-O7: leds/7segment
673   m_o = data;
674   tc4_display();
675}
405676
677
406678static INPUT_PORTS_START( tc4 )
407679   PORT_START("IN.0") // R0
408680   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Pass/Shoot Button 3") // right
r244637r244638
453725   /* basic machine hardware */
454726   MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf, but unknown RC curve
455727   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, tc4_read_k))
728   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, tc4_write_r))
456729   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, tc4_write_o))
457   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, tc4_write_r))
458730
459731   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
460
461732   MCFG_DEFAULT_LAYOUT(layout_tc4)
462733
463734   /* no video! */
r244637r244638
469740MACHINE_CONFIG_END
470741
471742
743/***************************************************************************
472744
745  Entex Baseball
746  * TMS1000NLP MP0914 (die labeled MP0914A)
747
748***************************************************************************/
749
750// inputs
751static INPUT_PORTS_START( ebball )
752INPUT_PORTS_END
753
754// machine config
755static MACHINE_CONFIG_START( ebball, hh_tms1k_state )
756
757   /* basic machine hardware */
758   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz
759
760   MCFG_DEFAULT_LAYOUT(layout_ebball)
761
762   /* no video! */
763
764   /* sound hardware */
765   MCFG_SPEAKER_STANDARD_MONO("mono")
766   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
767   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
768MACHINE_CONFIG_END
769
770
771
473772/***************************************************************************
474773
774  Ideal Electronic Detective
775  * TMS0980NLL MP6100A (die labeled 0980B-00)
776  hardware (and concept) is very similar to Parker Bros Stop Thief
777
778  This is an electronic board game. It requires game cards with suspect info,
779  and good old pen and paper to record game progress. To start the game, enter
780  difficulty(1-3), then number of players(1-4), then [ENTER]. Refer to the
781  manual for more information.
782
783
784  TODO:
785  - MCU clock is unknown
786
787***************************************************************************/
788
789
790READ8_MEMBER(hh_tms1k_state::elecdet_read_k)
791{
792   // note: the Vss row is always on
793   return m_inp_matrix[4]->read() | read_inputs(4);
794}
795
796WRITE16_MEMBER(hh_tms1k_state::elecdet_write_r)
797{
798   m_display_maxy = 7;
799   m_display_maxx = 7;
800
801   // R0-R6: select digit
802   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
803   for (int y = 0; y < m_display_maxy; y++)
804   {
805      m_7seg_mask[y] = 0x7f;
806      m_display_state[y] = (data >> y & 1) ? o : 0;
807   }
808
809   display_update();
810
811   // R7,R8: speaker on
812   m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
813}
814
815WRITE16_MEMBER(hh_tms1k_state::elecdet_write_o)
816{
817   // O0,O1,O4,O6: input mux
818   m_inp_mux = (data & 3) | (data >> 2 & 4) | (data >> 3 & 8);
819   
820   // O0-O6: led segments A-G
821   // O7: speaker out
822   m_o = data;
823}
824
825
826/* physical button layout and labels is like this:
827
828    [1]   [2]   [3]   [SUSPECT]
829    [4]   [5]   [6]   [PRIVATE QUESTION]
830    [7]   [8]   [9]   [I ACCUSE]
831                [0]   [ENTER]
832    [ON]  [OFF]       [END TURN]
833*/
834
835static INPUT_PORTS_START( elecdet )
836   PORT_START("IN.0") // O0 pin18
837   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
838   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
839   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
840   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question")
841   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
842
843   PORT_START("IN.1") // O1 pin17
844   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
845   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
846   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
847   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
848   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
849
850   PORT_START("IN.2") // O4 pin14
851   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
852   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
853   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
854   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse")
855   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
856
857   PORT_START("IN.3") // O6 pin12
858   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
859   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
860   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
861   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Suspect")
862   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
863
864   // note: even though power buttons are on the matrix, they are not CPU-controlled
865   PORT_START("IN.4") // Vss!
866   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)
867   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
868   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
869   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("End Turn")
870   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)
871INPUT_PORTS_END
872
873
874static MACHINE_CONFIG_START( elecdet, hh_tms1k_state )
875
876   /* basic machine hardware */
877   MCFG_CPU_ADD("maincpu", TMS0980, 425000) // approximation - unknown freq
878   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, elecdet_read_k))
879   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, elecdet_write_r))
880   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, elecdet_write_o))
881   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off))
882
883   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
884   MCFG_DEFAULT_LAYOUT(layout_elecdet)
885
886   /* no video! */
887
888   /* sound hardware */
889   MCFG_SPEAKER_STANDARD_MONO("mono")
890   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
891   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
892MACHINE_CONFIG_END
893
894
895
896
897
898/***************************************************************************
899
900  Kenner Star Wars - Electronic Battle Command
901  * TMS1100 MCU, labeled MP3438A
902
903  This is a small tabletop space-dogfighting game. To start the game,
904  press BASIC/INTER/ADV and enter P#(number of players), then
905  START TURN. Refer to the official manual for more information.
906
907***************************************************************************/
908
909void hh_tms1k_state::starwbc_display()
910{
911   m_display_maxy = 10;
912   m_display_maxx = 8;
913
914   UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f);
915   for (int y = 0; y < m_display_maxy; y+=2)
916   {
917      m_display_state[y] = (m_r >> y & 1) ? o : 0;
918     
919      // R6,R8 are 7segs
920      if (y == 6 || y == 8)
921         m_7seg_mask[y] = 0x7f;
922   }
923
924   display_update();
925}
926
927READ8_MEMBER(hh_tms1k_state::starwbc_read_k)
928{
929   return read_inputs(5);
930}
931
932WRITE16_MEMBER(hh_tms1k_state::starwbc_write_r)
933{
934   // R0,R1,R3,R5,R7: input mux
935   m_inp_mux = (data & 3) | (data >> 1 & 4) | (data >> 2 & 8) | (data >> 3 & 0x10);
936
937   // R9: piezo speaker
938   m_speaker->level_w(data >> 9 & 1);
939
940   // R0,R2,R4,R6,R8: leds
941   m_r = data;
942   starwbc_display();
943}
944
945WRITE16_MEMBER(hh_tms1k_state::starwbc_write_o)
946{
947   // O0-O7: leds state
948   m_o = data;
949   starwbc_display();
950}
951
952
953
954/* physical button layout and labels is like this:
955
956    (reconnnaissance=yellow)        (tactical reaction=green)
957    [MAGNA] [ENEMY]                 [EM]       [BS]   [SCR]
958
959    [BASIC] [INTER]    [START TURN] [END TURN] [MOVE] [FIRE]
960    [ADV]   [P#]       [<]          [^]        [>]    [v]
961    (game=blue)        (maneuvers=red)
962*/
963
964static INPUT_PORTS_START( starwbc )
965   PORT_START("IN.0") // R0
966   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
967   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
968   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
969   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number")
970
971   PORT_START("IN.1") // R1
972   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
973   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
974   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
975   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
976
977   PORT_START("IN.2") // R3
978   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
979   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
980   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
981   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
982
983   PORT_START("IN.3") // R5
984   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
985   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
986   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
987   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
988
989   PORT_START("IN.4") // R7
990   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
991   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
992   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
993   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
994INPUT_PORTS_END
995
996static MACHINE_CONFIG_START( starwbc, hh_tms1k_state )
997
998   /* basic machine hardware */
999   MCFG_CPU_ADD("maincpu", TMS1100, 300000) // RC osc. R=51K, C=47pf -> ~300kHz
1000   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, starwbc_read_k))
1001   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, starwbc_write_r))
1002   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, starwbc_write_o))
1003
1004   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1005   MCFG_DEFAULT_LAYOUT(layout_starwbc)
1006
1007   /* no video! */
1008
1009   /* sound hardware */
1010   MCFG_SPEAKER_STANDARD_MONO("mono")
1011   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1012   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1013MACHINE_CONFIG_END
1014
1015
1016
1017
1018
1019/***************************************************************************
1020
4751021  Milton Bradley Comp IV
4761022  * TMC0904NL CP0904A (die labeled 4A0970D-04A)
4771023
r244637r244638
5421088   /* basic machine hardware */
5431089   MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq
5441090   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, comp4_read_k))
1091   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, comp4_write_r))
5451092   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, comp4_write_o))
546   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, comp4_write_r))
5471093
5481094   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
549
5501095   MCFG_DEFAULT_LAYOUT(layout_comp4)
5511096
5521097   /* no video! */
r244637r244638
5721117
5731118***************************************************************************/
5741119
575
576
577
578
579/***************************************************************************
580
581  I/O
582
583***************************************************************************/
584
5851120READ8_MEMBER(hh_tms1k_state::simon_read_k)
5861121{
5871122   return read_inputs(4);
r244637r244638
6471182   /* basic machine hardware */
6481183   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
6491184   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, simon_read_k))
1185   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, simon_write_r))
6501186   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, simon_write_o))
651   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, simon_write_r))
6521187
6531188   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
654
6551189   MCFG_DEFAULT_LAYOUT(layout_simon)
6561190
6571191   /* no video! */
r244637r244638
6651199
6661200
6671201
1202/***************************************************************************
6681203
1204  Parker Brothers Code Name: Sector, by Bob Doyle
1205  * MP0905BNL ZA0379 (die labeled 0970F-05B)
1206
1207  This is a tabletop submarine pursuit game. A grid board and small toy
1208  boats are used to remember your locations (a Paint app should be ok too).
1209  Refer to the official manual for more information, it is not a simple game.
1210
1211
1212  TODO:
1213  - MCU clock is unknown
1214
1215***************************************************************************/
1216
1217READ8_MEMBER(hh_tms1k_state::cnsector_read_k)
1218{
1219   return read_inputs(5);
1220}
1221
1222WRITE16_MEMBER(hh_tms1k_state::cnsector_write_r)
1223{
1224   m_display_maxy = 7;
1225   m_display_maxx = 8;
1226
1227   // R0-R5: select digit (right-to-left)
1228   for (int y = 0; y < 6; y++)
1229   {
1230      m_7seg_mask[y] = 0xff;
1231      m_display_state[y] = (data >> y & 1) ? m_o : 0;
1232   }
1233
1234   // R6-R9: direction leds (-> lamp60-63)
1235   m_display_state[6] = data >> 6 & 0xf;
1236   
1237   display_update();
1238}
1239
1240WRITE16_MEMBER(hh_tms1k_state::cnsector_write_o)
1241{
1242   // O0-O4: input mux
1243   m_inp_mux = data & 0x1f;
1244   
1245   // O0-O7: digit segments
1246   m_o = data;
1247}
1248
1249
1250
1251static INPUT_PORTS_START( cnsector )
1252   PORT_START("IN.0") // O0
1253   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship")
1254   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left")
1255   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1256   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range")
1257
1258   PORT_START("IN.1") // O1
1259   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim")
1260   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right")
1261   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1262   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1263
1264   PORT_START("IN.2") // O2
1265   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire")
1266   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button
1267   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1268   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall")
1269
1270   PORT_START("IN.3") // O3
1271   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button
1272   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower")
1273   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1274   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1275
1276   PORT_START("IN.4") // O4
1277   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode")
1278   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster")
1279   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1280   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship")
1281INPUT_PORTS_END
1282
1283
1284static MACHINE_CONFIG_START( cnsector, hh_tms1k_state )
1285
1286   /* basic machine hardware */
1287   MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq
1288   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, cnsector_read_k))
1289   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, cnsector_write_r))
1290   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, cnsector_write_o))
1291
1292   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1293   MCFG_DEFAULT_LAYOUT(layout_cnsector)
1294
1295   /* no video! */
1296
1297   /* no sound! */
1298MACHINE_CONFIG_END
1299
1300
1301
1302
6691303/***************************************************************************
6701304
671  Entex Baseball
672  * TMS1000NLP MP0914 (die labeled MP0914A)
1305  Parker Bros Merlin handheld computer game, by Bob Doyle
1306  * TMS1100NLL MP3404A-N2
6731307
1308  To start a game, press NEW GAME, followed by a number:
1309  1: Tic-Tac-Toe
1310  2: Music Machine
1311  3: Echo
1312  4: Blackjack 13
1313  5: Magic Square
1314  6: Mindbender
1315
1316  Refer to the official manual for more information on the games.
1317
1318
1319  Other handhelds assumed to be on similar hardware:
1320  - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
1321    let's assume for now that the ROM contents is identical)
1322  - Master Merlin
1323
6741324***************************************************************************/
6751325
676// inputs
677static INPUT_PORTS_START( ebball )
1326READ8_MEMBER(hh_tms1k_state::merlin_read_k)
1327{
1328   return read_inputs(4);
1329}
1330
1331WRITE16_MEMBER(hh_tms1k_state::merlin_write_r)
1332{
1333   /* leds:
1334
1335        R0
1336   R1   R2   R3
1337   R4   R5   R6
1338   R7   R8   R9
1339        R10
1340   */
1341   m_display_maxx = 11;
1342   m_display_state[0] = data;
1343   display_update();
1344}
1345
1346WRITE16_MEMBER(hh_tms1k_state::merlin_write_o)
1347{
1348   // O4-O6: speaker out (paralleled for increased current driving capability)
1349   static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 };
1350   m_speaker->level_w(count[data >> 4 & 7]);
1351
1352   // O0-O3: input mux
1353   // O7: N/C
1354   m_inp_mux = data & 0xf;
1355}
1356
1357
1358
1359static INPUT_PORTS_START( merlin )
1360   PORT_START("IN.0") // O0
1361   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
1362   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
1363   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
1364   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
1365
1366   PORT_START("IN.1") // O1
1367   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
1368   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
1369   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
1370   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
1371
1372   PORT_START("IN.2") // O2
1373   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
1374   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
1375   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
1376   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
1377
1378   PORT_START("IN.3") // O3
1379   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
1380   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
1381   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
1382   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")
6781383INPUT_PORTS_END
6791384
680// machine config
681static MACHINE_CONFIG_START( ebball, hh_tms1k_state )
6821385
1386static const INT16 merlin_speaker_levels[] = { 0, 10922, 21845, 32767 };
1387
1388
1389static MACHINE_CONFIG_START( merlin, hh_tms1k_state )
1390
6831391   /* basic machine hardware */
684   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz
1392   MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
1393   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, merlin_read_k))
1394   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, merlin_write_r))
1395   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, merlin_write_o))
6851396
686   MCFG_DEFAULT_LAYOUT(layout_ebball)
1397   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1398   MCFG_DEFAULT_LAYOUT(layout_merlin)
6871399
6881400   /* no video! */
6891401
6901402   /* sound hardware */
6911403   MCFG_SPEAKER_STANDARD_MONO("mono")
6921404   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1405   MCFG_SPEAKER_LEVELS(4, merlin_speaker_levels)
6931406   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
6941407MACHINE_CONFIG_END
6951408
6961409
1410/***************************************************************************
6971411
1412  Parker Brothers Stop Thief, by Bob Doyle
1413  * TMS0980NLL MP6101B (die labeled 0980B-01A)
1414
1415  Stop Thief is actually a board game, the electronic device emulated here
1416  (called Electronic Crime Scanner) is an accessory. To start a game, press
1417  the ON button. Otherwise, it is in test-mode where you can hear all sounds.
1418
1419
1420  TODO:
1421  - MCU clock is unknown
1422  - stopthiep: unable to start a game (may be intentional?)
1423
1424***************************************************************************/
1425
1426READ8_MEMBER(hh_tms1k_state::stopthief_read_k)
1427{
1428   // note: the Vss row is always on
1429   return m_inp_matrix[2]->read() | read_inputs(2);
1430}
1431
1432WRITE16_MEMBER(hh_tms1k_state::stopthief_write_r)
1433{
1434   m_display_maxy = 3;
1435   m_display_maxx = 7;
1436
1437   // R0-R2: select digit
1438   UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7);
1439   for (int y = 0; y < m_display_maxy; y++)
1440   {
1441      m_7seg_mask[y] = 0x7f;
1442      m_display_state[y] = (data >> y & 1) ? o : 0;
1443   }
1444
1445   display_update();
1446
1447   // R3-R8: speaker on
1448   m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
1449}
1450
1451WRITE16_MEMBER(hh_tms1k_state::stopthief_write_o)
1452{
1453   // O0,O6: input mux
1454   m_inp_mux = (data & 1) | (data >> 5 & 2);
1455   
1456   // O3: speaker out
1457   // O0-O2,O4-O7: led segments A-G
1458   m_o = data;
1459}
1460
1461
1462/* physical button layout and labels is like this:
1463
1464    [1] [2] [OFF]
1465    [3] [4] [ON]
1466    [5] [6] [T, TIP]
1467    [7] [8] [A, ARREST]
1468    [9] [0] [C, CLUE]
1469*/
1470
1471static INPUT_PORTS_START( stopthief )
1472   PORT_START("IN.0") // O0
1473   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
1474   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
1475   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
1476   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
1477   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
1478
1479   PORT_START("IN.1") // O6
1480   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
1481   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
1482   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
1483   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
1484   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
1485
1486   // note: even though power buttons are on the matrix, they are not CPU-controlled
1487   PORT_START("IN.2") // Vss!
1488   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)
1489   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip")
1490   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest")
1491   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue")
1492   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)
1493INPUT_PORTS_END
1494
1495static MACHINE_CONFIG_START( stopthief, hh_tms1k_state )
1496
1497   /* basic machine hardware */
1498   MCFG_CPU_ADD("maincpu", TMS0980, 425000) // approximation - unknown freq
1499   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, stopthief_read_k))
1500   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, stopthief_write_r))
1501   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, stopthief_write_o))
1502   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off))
1503
1504   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1505   MCFG_DEFAULT_LAYOUT(layout_stopthie)
1506
1507   /* no video! */
1508
1509   /* sound hardware */
1510   MCFG_SPEAKER_STANDARD_MONO("mono")
1511   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1512   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1513MACHINE_CONFIG_END
1514
1515
1516
1517
6981518/***************************************************************************
6991519
1520  Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen
1521  * TMS1400NLL MP7313-N2 (die labeled MP7313)
1522
1523  Bank Shot is an electronic pool game. To select a game, repeatedly press
1524  the [SELECT] button, then press [CUE UP] to start. Refer to the official
1525  manual for more information. The game selections are:
1526  1: Straight Pool (1 player)
1527  2: Straight Pool (2 players)
1528  3: Poison Pool
1529  4: Trick Shots
1530
1531
1532  TODO:
1533  - bankshot: the cue ball led is strobed more often than other leds,
1534    making it look brighter. We need more accurate led decay simulation
1535    for this to work.
1536  - MCU clock is unknown
1537
1538***************************************************************************/
1539
1540void hh_tms1k_state::bankshot_display()
1541{
1542   m_display_maxy = 11;
1543   m_display_maxx = 7;
1544   
1545   // update current state
1546   for (int y = 0; y < m_display_maxy; y++)
1547      m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
1548   
1549   display_update();
1550}
1551
1552READ8_MEMBER(hh_tms1k_state::bankshot_read_k)
1553{
1554   return read_inputs(2);
1555}
1556
1557
1558WRITE16_MEMBER(hh_tms1k_state::bankshot_write_r)
1559{
1560   // R0: speaker out
1561   m_speaker->level_w(data & 1);
1562
1563   // R2,R3: input mux
1564   m_inp_mux = data >> 2 & 3;
1565
1566   // R2-R10: led rows
1567   m_r = data & ~3;
1568   bankshot_display();
1569}
1570
1571WRITE16_MEMBER(hh_tms1k_state::bankshot_write_o)
1572{
1573   // O0-O6: led columns
1574   // O7: N/C
1575   m_o = data;
1576   bankshot_display();
1577}
1578
1579
1580
1581
1582/* physical button layout and labels is like this:
1583  (note: remember that you can rotate the display in MESS)
1584
1585    [SELECT  [BALL UP] [BALL OVER]
1586     SCORE]
1587
1588    ------  led display  ------
1589
1590    [ANGLE]  [AIM]     [CUE UP
1591                        SHOOT]
1592*/
1593
1594static INPUT_PORTS_START( bankshot )
1595   PORT_START("IN.0") // R2
1596   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Angle")
1597   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Aim")
1598   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Cue Up / Shoot")
1599   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1600
1601   PORT_START("IN.1") // R3
1602   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Select / Score")
1603   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Ball Up")
1604   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Ball Over")
1605   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1606INPUT_PORTS_END
1607
1608
1609static MACHINE_CONFIG_START( bankshot, hh_tms1k_state )
1610
1611   /* basic machine hardware */
1612   MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve
1613   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, bankshot_read_k))
1614   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, bankshot_write_r))
1615   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, bankshot_write_o))
1616
1617   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1618   MCFG_DEFAULT_LAYOUT(layout_bankshot)
1619
1620   /* no video! */
1621
1622   /* sound hardware */
1623   MCFG_SPEAKER_STANDARD_MONO("mono")
1624   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1625   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1626MACHINE_CONFIG_END
1627
1628
1629
1630
1631/***************************************************************************
1632
1633  Parker Brothers Split Second
1634  * TMS1400NLL MP7314-N2 (die labeled MP7314)
1635
1636  This is an electronic handheld reflex gaming device, it's straightforward
1637  to use. The included mini-games are:
1638  1, 2, 3: Mad Maze*
1639  4, 5: Space Attack*
1640  6: Auto Cross
1641  7: Stomp
1642  8: Speedball
1643
1644  *: higher number indicates higher difficulty
1645
1646***************************************************************************/
1647
1648
1649/* display layout, where number xy is lamp R(x),O(y)
1650
1651       00    02    04
1652    10 01 12 03 14 05 16
1653       11    13    15
1654    20 21 22 23 24 25 26
1655       31    33    35
1656    30 41 32 43 34 45 36
1657       51    53    55
1658    40 61 42 63 44 65 46
1659       71    73    75
1660    50 60 52 62 54 64 56
1661       70    72    74
1662*/
1663
1664void hh_tms1k_state::splitsec_display()
1665{
1666   m_display_maxy = 8;
1667   m_display_maxx = 7;
1668   
1669   // update current state
1670   for (int y = 0; y < m_display_maxy; y++)
1671      m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
1672   
1673   display_update();
1674}
1675
1676READ8_MEMBER(hh_tms1k_state::splitsec_read_k)
1677{
1678   return read_inputs(2);
1679}
1680
1681WRITE16_MEMBER(hh_tms1k_state::splitsec_write_r)
1682{
1683   // R8: speaker out
1684   m_speaker->level_w(data >> 8 & 1);
1685
1686   // R9,R10: input mux
1687   m_inp_mux = data >> 9 & 3;
1688
1689   // R0-R7: led rows
1690   m_r = data;
1691   display_update();
1692}
1693
1694WRITE16_MEMBER(hh_tms1k_state::splitsec_write_o)
1695{
1696   // O0-O6: led columns
1697   // O7: N/C
1698   m_o = data;
1699   splitsec_display();
1700}
1701
1702static INPUT_PORTS_START( splitsec )
1703   PORT_START("IN.0") // R9
1704   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // 4 separate directional buttons, hence 16way
1705   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
1706   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
1707   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1708
1709   PORT_START("IN.1") // R10
1710   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
1711   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select")
1712   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start")
1713   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1714INPUT_PORTS_END
1715
1716static MACHINE_CONFIG_START( splitsec, hh_tms1k_state )
1717
1718   /* basic machine hardware */
1719   MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve
1720   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, splitsec_read_k))
1721   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, splitsec_write_r))
1722   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, splitsec_write_o))
1723
1724   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1725   MCFG_DEFAULT_LAYOUT(layout_splitsec)
1726
1727   /* no video! */
1728
1729   /* sound hardware */
1730   MCFG_SPEAKER_STANDARD_MONO("mono")
1731   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1732   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1733MACHINE_CONFIG_END
1734
1735
1736
1737
1738
1739
1740
1741/***************************************************************************
1742
1743  Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
1744  * TMS1100 CD7282SL
1745
1746  This handheld contains 12 minigames. It looks and plays like "Fabulous Fred"
1747  by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin
1748  and Simon. Unlike Merlin and Simon, spin-offs like these were not successful.
1749  There were releases with and without the prefix "Tandy-12", I don't know
1750  which name was more common. Also not worth noting is that it needed five
1751  batteries; 4 C-cells and a 9-volt.
1752
1753  Some of the games require accessories included with the toy (eg. the Baseball
1754  game is played with a board representing the playing field). To start a game,
1755  hold the [SELECT] button, then press [START] when the game button lights up.
1756  As always, refer to the official manual for more information.
1757
1758  See below at the input defs for a list of the games.
1759
1760
1761  TODO:
1762  - output PLA is not verified
1763  - microinstructions PLA is not verified
1764
1765***************************************************************************/
1766
1767void hh_tms1k_state::tandy12_display()
1768{
1769   m_display_maxx = 13;
1770   
1771   // O0-O7: button lamps 1-8, R0-R3: button lamps 9-12
1772   m_display_state[0] = (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00);
1773   display_update();
1774}
1775
1776READ8_MEMBER(hh_tms1k_state::tandy12_read_k)
1777{
1778   return read_inputs(5);
1779}
1780
1781WRITE16_MEMBER(hh_tms1k_state::tandy12_write_r)
1782{
1783   // R10: speaker out
1784   m_speaker->level_w(data >> 10 & 1);
1785
1786   // R5-R9: input mux
1787   m_inp_mux = data >> 5 & 0x1f;
1788
1789   // other bits:
1790   m_r = data;
1791   tandy12_display();
1792}
1793
1794WRITE16_MEMBER(hh_tms1k_state::tandy12_write_o)
1795{
1796   m_o = data;
1797   tandy12_display();
1798}
1799
1800
1801/* physical button layout and labels is like this:
1802
1803        REPEAT-2              SPACE-2
1804          [O]     OFF--ON       [O]
1805
1806    [purple]1     [blue]5       [l-green]9
1807    ORGAN         TAG-IT        TREASURE HUNT
1808
1809    [l-orange]2   [turquoise]6  [red]10
1810    SONG WRITER   ROULETTE      COMPETE
1811
1812    [pink]3       [yellow]7     [violet]11
1813    REPEAT        BASEBALL      FIRE AWAY
1814
1815    [green]4      [orange]8     [brown]12
1816    TORPEDO       REPEAT PLUS   HIDE 'N SEEK
1817
1818          [O]        [O]        [O]
1819         START      SELECT    PLAY-2/HIT-7
1820*/
1821
1822static INPUT_PORTS_START( tandy12 )
1823   PORT_START("IN.0") // R5
1824   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("12")
1825   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("11")
1826   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("10")
1827   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
1828
1829   PORT_START("IN.1") // R6
1830   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Space-2")
1831   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Play-2/Hit-7")
1832   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Select")
1833   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Start")
1834
1835   PORT_START("IN.2") // R7
1836   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat-2")
1837   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
1838   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1839   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
1840
1841   PORT_START("IN.3") // R8
1842   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
1843   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
1844   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
1845   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
1846
1847   PORT_START("IN.4") // R9
1848   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
1849   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
1850   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
1851   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
1852INPUT_PORTS_END
1853
1854
1855static const UINT16 tandy12_output_pla[0x20] =
1856{
1857   // these are certain
1858   0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
1859   0x80, 0x00, 0x00, 0x00, 0x00,
1860
1861   // rest is unused?
1862   0x00, 0x00, 0x00,
1863   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1864   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1865};
1866
1867
1868static MACHINE_CONFIG_START( tandy12, hh_tms1k_state )
1869
1870   /* basic machine hardware */
1871   MCFG_CPU_ADD("maincpu", TMS1100, 400000) // RC osc. R=39K, C=47pf -> ~400kHz
1872   MCFG_TMS1XXX_OUTPUT_PLA(tandy12_output_pla)
1873   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, tandy12_read_k))
1874   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, tandy12_write_r))
1875   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, tandy12_write_o))
1876
1877   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1878   MCFG_DEFAULT_LAYOUT(layout_tandy12)
1879
1880   /* no video! */
1881
1882   /* sound hardware */
1883   MCFG_SPEAKER_STANDARD_MONO("mono")
1884   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1885   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1886MACHINE_CONFIG_END
1887
1888
1889
1890/***************************************************************************
1891
1892  TMS1100NLL MP3403 DBS 7836 SINGAPORE some game board with 7-segs.
1893
1894  What old electronic game is this?
1895
1896  some clues:
1897  - it's from 1978
1898  - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403
1899  - it plays some short jingles (you need to be lucky with button mashing),
1900    jingles feel like maybe a horse racing game, or casino
1901
1902***************************************************************************/
1903
1904READ8_MEMBER(hh_tms1k_state::unk3403_read_k)
1905{
1906   return read_inputs(4);
1907}
1908
1909WRITE16_MEMBER(hh_tms1k_state::unk3403_write_r)
1910{
1911   // R4-R7: input mux
1912   m_inp_mux = data >> 4 & 0xf;
1913
1914   // R9: speaker out
1915   m_speaker->level_w(data >> 9 & 1);
1916
1917   // R10: maybe a switch or other button row?
1918   // others: ?
1919}
1920
1921WRITE16_MEMBER(hh_tms1k_state::unk3403_write_o)
1922{
1923   // ?
1924}
1925
1926static INPUT_PORTS_START( unk3403 )
1927   PORT_START("IN.0") // R4
1928   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
1929   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
1930   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
1931   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
1932
1933   PORT_START("IN.1") // R5
1934   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
1935   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
1936   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
1937   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
1938
1939   PORT_START("IN.2") // R6
1940   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
1941   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
1942   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
1943   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame?
1944
1945   PORT_START("IN.3") // R7
1946   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
1947   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
1948   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
1949   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)
1950INPUT_PORTS_END
1951
1952static const UINT16 unk3403_output_pla[0x20] =
1953{
1954   /* O output PLA configuration currently unknown */
1955   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1956   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1957   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1958   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
1959};
1960
1961
1962static MACHINE_CONFIG_START( unk3403, hh_tms1k_state )
1963
1964   /* basic machine hardware */
1965   MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - unknown freq
1966   MCFG_TMS1XXX_OUTPUT_PLA(unk3403_output_pla)
1967   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, unk3403_read_k))
1968   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, unk3403_write_r))
1969   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, unk3403_write_o))
1970
1971   /* no video! */
1972
1973   /* sound hardware */
1974   MCFG_SPEAKER_STANDARD_MONO("mono")
1975   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1976   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1977MACHINE_CONFIG_END
1978
1979
1980/***************************************************************************
1981
7001982  Game driver(s)
7011983
7021984***************************************************************************/
7031985
7041986
1987ROM_START( mathmagi )
1988   ROM_REGION( 0x800, "maincpu", 0 )
1989   ROM_LOAD( "mp1030", 0x0000, 0x800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) )
1990
1991   ROM_REGION( 867, "maincpu:mpla", 0 )
1992   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
1993   ROM_REGION( 365, "maincpu:opla", 0 )
1994   ROM_LOAD( "tms1100_mathmagi_opla.pla", 0, 365, NO_DUMP )
1995ROM_END
1996
1997
7051998ROM_START( amaztron )
7061999   ROM_REGION( 0x0800, "maincpu", 0 )
7072000   ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) )
r244637r244638
7372030ROM_END
7382031
7392032
2033ROM_START( elecdet )
2034   ROM_REGION( 0x1000, "maincpu", 0 )
2035   ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) )
2036
2037   ROM_REGION( 1246, "maincpu:ipla", 0 )
2038   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
2039   ROM_REGION( 1982, "maincpu:mpla", 0 )
2040   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
2041   ROM_REGION( 352, "maincpu:opla", 0 )
2042   ROM_LOAD( "tms0980_elecdet_opla.pla", 0, 352, CRC(652d19c3) SHA1(75550c2b293453b6b9efed88c8cc77195a53161f) )
2043   ROM_REGION( 157, "maincpu:spla", 0 )
2044   ROM_LOAD( "tms0980_elecdet_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
2045ROM_END
2046
2047
2048ROM_START( starwbc )
2049   ROM_REGION( 0x0800, "maincpu", 0 )
2050   ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) )
2051
2052   ROM_REGION( 867, "maincpu:mpla", 0 )
2053   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
2054   ROM_REGION( 365, "maincpu:opla", 0 )
2055   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
2056ROM_END
2057
2058ROM_START( starwbcp )
2059   ROM_REGION( 0x0800, "maincpu", 0 )
2060   ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors
2061
2062   ROM_REGION( 867, "maincpu:mpla", 0 )
2063   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
2064   ROM_REGION( 365, "maincpu:opla", 0 )
2065   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
2066ROM_END
2067
2068
2069
7402070ROM_START( comp4 )
7412071   ROM_REGION( 0x0400, "maincpu", 0 )
7422072   ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) )
r244637r244638
7622092   ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) )
7632093ROM_END
7642094
2095ROM_START( cnsector )
2096   ROM_REGION( 0x0400, "maincpu", 0 )
2097   ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
7652098
2099   ROM_REGION( 782, "maincpu:ipla", 0 )
2100   ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
2101   ROM_REGION( 860, "maincpu:mpla", 0 )
2102   ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) )
2103   ROM_REGION( 352, "maincpu:opla", 0 )
2104   ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) )
2105   ROM_REGION( 157, "maincpu:spla", 0 )
2106   ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
2107ROM_END
7662108
7672109
2110ROM_START( merlin )
2111   ROM_REGION( 0x800, "maincpu", 0 )
2112   ROM_LOAD( "mp3404", 0x0000, 0x800, CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
2113
2114   ROM_REGION( 867, "maincpu:mpla", 0 )
2115   ROM_LOAD( "tms1100_merlin_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
2116   ROM_REGION( 365, "maincpu:opla", 0 )
2117   ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, CRC(3921b074) SHA1(12bd58e4d6676eb8c7059ef53598279e4f1a32ea) )
2118ROM_END
2119
2120
2121ROM_START( stopthie )
2122   ROM_REGION( 0x1000, "maincpu", 0 )
2123   ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
2124
2125   ROM_REGION( 1246, "maincpu:ipla", 0 )
2126   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
2127   ROM_REGION( 1982, "maincpu:mpla", 0 )
2128   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
2129   ROM_REGION( 352, "maincpu:opla", 0 )
2130   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
2131   ROM_REGION( 157, "maincpu:spla", 0 )
2132   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
2133ROM_END
2134
2135ROM_START( stopthiep )
2136   ROM_REGION( 0x1000, "maincpu", 0 )
2137   ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums)
2138
2139   ROM_REGION( 1246, "maincpu:ipla", 0 )
2140   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
2141   ROM_REGION( 1982, "maincpu:mpla", 0 )
2142   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
2143   ROM_REGION( 352, "maincpu:opla", 0 )
2144   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
2145   ROM_REGION( 157, "maincpu:spla", 0 )
2146   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
2147ROM_END
2148
2149ROM_START( bankshot )
2150   ROM_REGION( 0x1000, "maincpu", 0 )
2151   ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) )
2152
2153   ROM_REGION( 867, "maincpu:mpla", 0 )
2154   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
2155   ROM_REGION( 557, "maincpu:opla", 0 )
2156   ROM_LOAD( "tms1400_bankshot_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) )
2157ROM_END
2158
2159
2160ROM_START( splitsec )
2161   ROM_REGION( 0x1000, "maincpu", 0 )
2162   ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) )
2163
2164   ROM_REGION( 867, "maincpu:mpla", 0 )
2165   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
2166   ROM_REGION( 557, "maincpu:opla", 0 )
2167   ROM_LOAD( "tms1400_splitsec_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) )
2168ROM_END
2169
2170
2171ROM_START( tandy12 )
2172   ROM_REGION( 0x800, "maincpu", 0 )
2173   ROM_LOAD( "cd7282sl", 0x0000, 0x800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) )
2174
2175   ROM_REGION( 867, "maincpu:mpla", 0 )
2176   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
2177   ROM_REGION( 365, "maincpu:opla", 0 )
2178   ROM_LOAD( "tms1100_tandy12_opla.pla", 0, 365, NO_DUMP )
2179ROM_END
2180
2181ROM_START( unk3403 )
2182   ROM_REGION( 0x0800, "maincpu", 0 )
2183   ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
2184
2185   ROM_REGION( 867, "maincpu:mpla", 0 )
2186   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
2187   ROM_REGION( 365, "maincpu:opla", 0 )
2188   ROM_LOAD( "tms1100_xxx_opla.pla", 0, 365, NO_DUMP )
2189ROM_END
2190
2191
2192
2193
2194
2195
2196
2197
2198CONS( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
2199
7682200CONS( 1979, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", GAME_SUPPORTS_SAVE )
7692201CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", GAME_SUPPORTS_SAVE )
7702202
7712203CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Entex", "Baseball (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
7722204
2205CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE )
2206
2207CONS( 1979, starwbc,  0,       0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE )
2208CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE )
2209
7732210CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
7742211CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", GAME_SUPPORTS_SAVE )
2212
2213
2214CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
2215CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE )
2216CONS( 1979, stopthie,  0,        0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE )
2217CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
2218CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE )
2219CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE )
2220
2221CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE )
2222
2223CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
trunk/src/mess/drivers/hh_ucom4.c
r0r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  NEC uCOM4 MCU handhelds
6
7
8***************************************************************************/
9
10#include "emu.h"
11#include "cpu/ucom4/ucom4.h"
12#include "sound/speaker.h"
13
14#include "tmpacman.lh"
15
16
17class hh_ucom4_state : public driver_device
18{
19public:
20   hh_ucom4_state(const machine_config &mconfig, device_type type, const char *tag)
21      : driver_device(mconfig, type, tag),
22      m_maincpu(*this, "maincpu"),
23      m_inp_matrix(*this, "IN"),
24      m_speaker(*this, "speaker"),
25      m_display_wait(33),
26      m_display_maxy(1),
27      m_display_maxx(0)
28   { }
29
30   // devices
31   required_device<cpu_device> m_maincpu;
32   optional_ioport_array<4> m_inp_matrix; // max 4
33   optional_device<speaker_sound_device> m_speaker;
34   
35   // misc common
36   UINT16 m_inp_mux;
37
38   virtual void machine_start();
39   virtual void machine_reset();
40
41   // display common
42   int m_display_wait;
43   int m_display_maxy;
44   int m_display_maxx;
45   
46   UINT32 m_grid;
47   UINT32 m_plate;
48   
49   UINT32 m_display_state[0x20];
50   UINT32 m_display_cache[0x20];
51   UINT8 m_display_decay[0x20][0x20];
52   UINT16 m_7seg_mask[0x20];
53
54   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
55   void display_update();
56
57   // game-specific handlers
58   
59};
60
61
62void hh_ucom4_state::machine_start()
63{
64   // zerofill
65   memset(m_display_state, 0, sizeof(m_display_state));
66   memset(m_display_cache, 0, sizeof(m_display_cache));
67   memset(m_display_decay, 0, sizeof(m_display_decay));
68   memset(m_7seg_mask, 0, sizeof(m_7seg_mask));
69   
70   m_inp_mux = 0;
71   m_grid = 0;
72   m_plate = 0;
73
74   // register for savestates
75   save_item(NAME(m_display_maxy));
76   save_item(NAME(m_display_maxx));
77   save_item(NAME(m_display_wait));
78
79   save_item(NAME(m_display_state));
80   save_item(NAME(m_display_cache));
81   save_item(NAME(m_display_decay));
82   save_item(NAME(m_7seg_mask));
83
84   save_item(NAME(m_inp_mux));
85   save_item(NAME(m_grid));
86   save_item(NAME(m_plate));
87}
88
89
90void hh_ucom4_state::machine_reset()
91{
92}
93
94/***************************************************************************
95
96  Helper Functions
97
98***************************************************************************/
99
100// LED segments
101#if 0
102enum
103{
104   lA = 0x01,
105   lB = 0x02,
106   lC = 0x04,
107   lD = 0x08,
108   lE = 0x10,
109   lF = 0x20,
110   lG = 0x40,
111   lDP = 0x80
112};
113#endif
114
115// The device strobes the outputs very fast, it is unnoticeable to the user.
116// To prevent flickering here, we need to simulate a decay.
117
118
119void hh_ucom4_state::display_update()
120{
121   UINT32 active_state[0x20];
122
123   for (int y = 0; y < m_display_maxy; y++)
124   {
125      active_state[y] = 0;
126
127      for (int x = 0; x < m_display_maxx; x++)
128      {
129         // turn on powered segments
130         if (m_display_state[y] >> x & 1)
131            m_display_decay[y][x] = m_display_wait;
132
133         // determine active state
134         int ds = (m_display_decay[y][x] != 0) ? 1 : 0;
135         active_state[y] |= (ds << x);
136      }
137   }
138
139   // on difference, send to output
140   for (int y = 0; y < m_display_maxy; y++)
141      if (m_display_cache[y] != active_state[y])
142      {
143         if (m_7seg_mask[y] != 0)
144            output_set_digit_value(y, active_state[y] & m_7seg_mask[y]);
145
146         const int mul = (m_display_maxx <= 10) ? 10 : 100;
147         for (int x = 0; x < m_display_maxx; x++)
148            output_set_lamp_value(y * mul + x, active_state[y] >> x & 1);
149      }
150
151   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
152}
153
154TIMER_DEVICE_CALLBACK_MEMBER(hh_ucom4_state::display_decay_tick)
155{
156   // slowly turn off unpowered segments
157   for (int y = 0; y < m_display_maxy; y++)
158      for (int x = 0; x < m_display_maxx; x++)
159         if (!(m_display_state[y] >> x & 1) && m_display_decay[y][x] != 0)
160            m_display_decay[y][x]--;
161   
162   display_update();
163}
164
165
166
167/***************************************************************************
168
169  Minidrivers (I/O, Inputs, Machine Config)
170
171***************************************************************************/
172
173/***************************************************************************
174
175  Tomytronic Pac-Man (manufactured in Japan)
176  * boards are labeled TN-08 2E108E01
177  * NEC uCOM-43 MCU, labeled D553C 160
178  * cyan/red/green VFD display NEC FIP8AM18T
179  * bright yellow round casing
180
181  known releases:
182  - Japan: Puck Man
183  - USA: Pac Man
184  - UK: Puckman (Tomy), and also as Munchman, published by Grandstand
185  - Australia: Pac Man-1, published by Futuretronics
186
187***************************************************************************/
188
189static INPUT_PORTS_START( tmpacman )
190INPUT_PORTS_END
191
192
193static MACHINE_CONFIG_START( tmpacman, hh_ucom4_state )
194
195   /* basic machine hardware */
196   MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_430kHz)
197
198   MCFG_DEFAULT_LAYOUT(layout_tmpacman)
199
200   /* no video! */
201
202   /* sound hardware */
203   MCFG_SPEAKER_STANDARD_MONO("mono")
204   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
205   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
206MACHINE_CONFIG_END
207
208
209
210
211
212
213
214/***************************************************************************
215
216  Game driver(s)
217
218***************************************************************************/
219
220ROM_START( tmpacman )
221   ROM_REGION( 0x0800, "maincpu", 0 )
222   ROM_LOAD( "d553c-160", 0x0000, 0x0800, CRC(b21a8af7) SHA1(e3122be1873ce76a4067386bf250802776f0c2f9) )
223ROM_END
224
225
226CONS( 1981, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
trunk/src/mess/drivers/mathmagi.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  APF Mathemagician
6  * TMS1100 MP1030 - MCU
7  * 2 x DS8870N - Hex LED Digit Driver
8  * 2 x DS8861N - MOS-to-LED 5-Segment Driver
9
10  This is a tabletop educational calculator. It came with plastic overlays
11  for playing different kind of games. Refer to the manual on how to use it.
12  In short, to start from scratch, press [SEL]. By default the device is in
13  calculator teaching mode. If [SEL] is followed with 1-6 and then [NXT],
14  one of the games is started.
15
16  1) Number Machine
17  2) Countin' On
18  3) Walk The Plank
19  4) Gooey Gumdrop
20  5) Football
21  6) Lunar Lander
22
23
24  TODO:
25  - some of the led symbols are probably wrong, output PLA is unknown
26  - microinstructions PLA is not verified
27
28***************************************************************************/
29
30#include "emu.h"
31#include "cpu/tms0980/tms0980.h"
32
33#include "mathmagi.lh"
34
35// master clock is a single stage RC oscillator: R=68K, C=82pf,
36// according to the TMS 1000 series data manual this is around 200kHz
37#define MASTER_CLOCK (200000)
38
39
40class mathmagi_state : public driver_device
41{
42public:
43   mathmagi_state(const machine_config &mconfig, device_type type, const char *tag)
44      : driver_device(mconfig, type, tag),
45      m_maincpu(*this, "maincpu"),
46      m_button_matrix(*this, "IN")
47   { }
48
49   required_device<tms1xxx_cpu_device> m_maincpu;
50   required_ioport_array<6> m_button_matrix;
51
52   UINT16 m_o;
53   UINT16 m_r;
54
55   DECLARE_READ8_MEMBER(read_k);
56   DECLARE_WRITE16_MEMBER(write_o);
57   DECLARE_WRITE16_MEMBER(write_r);
58
59   virtual void machine_start();
60};
61
62
63/***************************************************************************
64
65  I/O
66
67***************************************************************************/
68
69READ8_MEMBER(mathmagi_state::read_k)
70{
71   UINT8 k = 0;
72
73   // read selected button rows
74   for (int i = 0; i < 6; i++)
75   {
76      const int ki[6] = { 3, 5, 6, 7, 9, 10 };
77      if (m_r >> ki[i] & 1)
78         k |= m_button_matrix[i]->read();
79   }
80
81   return k;
82}
83
84WRITE16_MEMBER(mathmagi_state::write_o)
85{
86   // O1-O7: led segments A-G
87   // O0: N/C
88   m_o = data;
89}
90
91WRITE16_MEMBER(mathmagi_state::write_r)
92{
93   // R3,R5-R7,R9,R10: input mux
94   // and outputs:
95   for (int i = 0; i < 11; i++)
96   {
97      if (data >> i & 1)
98      {
99         // R8: custom math symbols digit
100         // R9: custom equals digit
101         // R10: lamps
102         if (i >= 8)
103            for (int j = 0; j < 8; j++)
104               output_set_lamp_value(i*10 + j, m_o >> j & 1);
105
106         // R0-R7: 7seg leds
107         else
108            output_set_digit_value(i, m_o >> 1 & 0x7f);
109      }
110   }
111
112   m_r = data;
113}
114
115
116
117/***************************************************************************
118
119  Inputs
120
121***************************************************************************/
122
123/* physical button layout and labels is like this:
124
125    ON     ONE       [SEL] [NXT] [?]   [/]
126     |      |        [7]   [8]   [9]   [x]
127    OFF    TWO       [4]   [5]   [6]   [-]
128         PLAYERS     [1]   [2]   [3]   [+]
129                     [0]   [_]   [r]   [=]
130*/
131
132static INPUT_PORTS_START( mathmagi )
133   PORT_START("IN.0") // R3
134   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
135   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
136   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
137   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
138
139   PORT_START("IN.1") // R5
140   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
141   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("_") // blank
142   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("r")
143   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
144
145   PORT_START("IN.2") // R6
146   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
147   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
148   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
149   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
150
151   PORT_START("IN.3") // R7
152   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL")
153   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("NXT")
154   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("?") // check
155   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
156
157   PORT_START("IN.4") // R9
158   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
159   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
160   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
161   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
162
163   PORT_START("IN.5") // R10
164   PORT_CONFNAME( 0x01, 0x00, "Players")
165   PORT_CONFSETTING(    0x00, "1" )
166   PORT_CONFSETTING(    0x01, "2" )
167   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
168   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
169   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
170INPUT_PORTS_END
171
172
173
174/***************************************************************************
175
176  Machine Config
177
178***************************************************************************/
179
180void mathmagi_state::machine_start()
181{
182   m_o = 0;
183   m_r = 0;
184
185   save_item(NAME(m_o));
186   save_item(NAME(m_r));
187}
188
189// LED segments A-G
190enum
191{
192   lA = 0x02,
193   lB = 0x04,
194   lC = 0x08,
195   lD = 0x10,
196   lE = 0x20,
197   lF = 0x40,
198   lG = 0x80
199};
200
201static const UINT16 mathmagi_output_pla[0x20] =
202{
203   lA+lB+lC+lD+lE+lF,      // 0
204   lB+lC,                  // 1
205   lA+lB+lG+lE+lD,         // 2
206   lA+lB+lG+lC+lD,         // 3
207   lF+lB+lG+lC,            // 4
208   lA+lF+lG+lC+lD,         // 5
209   lA+lF+lG+lC+lD+lE,      // 6
210   lA+lB+lC,               // 7
211   lA+lB+lC+lD+lE+lF+lG,   // 8
212   lA+lB+lG+lF+lC+lD,      // 9
213   lA+lB+lG+lE,            // question mark
214   lE+lG,                  // r
215   lD,                     // underscore?
216   lA+lF+lG+lE+lD,         // E
217   lG,                     // -
218   0,                      // empty
219   0,                      // empty
220   lG,                     // lamp 4 or MATH -
221   lD,                     // lamp 3
222   lF+lE+lD+lC+lG,         // b
223   lB,                     // lamp 2
224   lB+lG,                  // MATH +
225   lB+lC,                  // MATH mul
226   lF+lG+lB+lC+lD,         // y
227   lA,                     // lamp 1
228   lA+lG,                  // MATH div
229   lA+lD,                  // EQUALS
230   0,                      // ?
231   0,                      // ?
232   lE+lD+lC+lG,            // o
233   0,                      // ?
234   lA+lF+lE+lD+lC          // G
235};
236
237
238static MACHINE_CONFIG_START( mathmagi, mathmagi_state )
239
240   /* basic machine hardware */
241   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
242   MCFG_TMS1XXX_OUTPUT_PLA(mathmagi_output_pla)
243   MCFG_TMS1XXX_READ_K_CB(READ8(mathmagi_state, read_k))
244   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mathmagi_state, write_o))
245   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mathmagi_state, write_r))
246
247   MCFG_DEFAULT_LAYOUT(layout_mathmagi)
248
249   /* no video! */
250
251   /* no sound! */
252MACHINE_CONFIG_END
253
254
255
256/***************************************************************************
257
258  Game driver(s)
259
260***************************************************************************/
261
262ROM_START( mathmagi )
263   ROM_REGION( 0x800, "maincpu", 0 )
264   ROM_LOAD( "mp1030", 0x0000, 0x800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) )
265
266   ROM_REGION( 867, "maincpu:mpla", 0 )
267   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
268   ROM_REGION( 365, "maincpu:opla", 0 )
269   ROM_LOAD( "tms1100_mathmagi_opla.pla", 0, 365, NO_DUMP )
270ROM_END
271
272
273COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
trunk/src/mess/drivers/merlin.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:Wilbert Pol, hap
3/***************************************************************************
4
5  Parker Bros Merlin handheld computer game, by Bob Doyle
6  * TMS1100NLL MP3404A-N2 (has internal ROM)
7
8  To start a game, press NEW GAME, followed by a number:
9  1: Tic-Tac-Toe
10  2: Music Machine
11  3: Echo
12  4: Blackjack 13
13  5: Magic Square
14  6: Mindbender
15
16  Refer to the official manual for more information on the games.
17
18
19  Other handhelds assumed to be on similar hardware:
20  - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
21    let's assume for now that the ROM contents is identical)
22  - Master Merlin
23
24
25***************************************************************************/
26
27#include "emu.h"
28#include "cpu/tms0980/tms0980.h"
29#include "sound/speaker.h"
30
31#include "merlin.lh" // clickable
32
33// master clock is a single stage RC oscillator: R=33K, C=100pf,
34// according to the TMS 1000 series data manual this is around 350kHz
35#define MASTER_CLOCK (350000)
36
37
38class merlin_state : public driver_device
39{
40public:
41   merlin_state(const machine_config &mconfig, device_type type, const char *tag)
42      : driver_device(mconfig, type, tag),
43      m_maincpu(*this, "maincpu"),
44      m_button_matrix(*this, "IN"),
45      m_speaker(*this, "speaker")
46   { }
47
48   DECLARE_READ8_MEMBER(read_k);
49   DECLARE_WRITE16_MEMBER(write_o);
50   DECLARE_WRITE16_MEMBER(write_r);
51
52   virtual void machine_start();
53
54protected:
55   required_device<cpu_device> m_maincpu;
56   required_ioport_array<4> m_button_matrix;
57   required_device<speaker_sound_device> m_speaker;
58
59   UINT16 m_o;
60};
61
62
63/***************************************************************************
64
65  I/O
66
67***************************************************************************/
68
69READ8_MEMBER(merlin_state::read_k)
70{
71   UINT8 k = 0;
72
73   // read selected button rows
74   for (int i = 0; i < 4; i++)
75      if (m_o >> i & 1)
76         k |= m_button_matrix[i]->read();
77
78   return k;
79}
80
81WRITE16_MEMBER(merlin_state::write_o)
82{
83   /* The speaker is connected to O4 through O6.  The 3 outputs are paralleled for
84   increased current driving capability.  They are passed thru a 220 ohm resistor
85   and then to the speaker, which has the other side grounded.  The software then
86   toggles these lines to make sounds and noises. (There is no audio generator
87   other than toggling it with a software delay between to make tones). */
88   static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 };
89   m_speaker->level_w(count[data >> 4 & 7]);
90
91   // O0-O3: input mux
92   // O7: N/C
93   m_o = data;
94}
95
96WRITE16_MEMBER(merlin_state::write_r)
97{
98   /* LEDs:
99
100        R0
101   R1   R2   R3
102   R4   R5   R6
103   R7   R8   R9
104        R10
105   */
106   for (int i = 0; i < 11; i++)
107      output_set_lamp_value(i, data >> i & 1);
108}
109
110
111
112/***************************************************************************
113
114  Inputs
115
116***************************************************************************/
117
118static INPUT_PORTS_START( merlin )
119   PORT_START("IN.0") // O0
120   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
121   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
122   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
123   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
124
125   PORT_START("IN.1") // O1
126   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
127   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
128   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
129   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
130
131   PORT_START("IN.2") // O2
132   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
133   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
134   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
135   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
136
137   PORT_START("IN.3") // O3
138   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
139   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
140   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
141   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")
142INPUT_PORTS_END
143
144
145
146/***************************************************************************
147
148  Machine Config
149
150***************************************************************************/
151
152void merlin_state::machine_start()
153{
154   m_o = 0;
155   save_item(NAME(m_o));
156}
157
158static const INT16 speaker_levels[] = { 0, 10922, 21845, 32767 };
159
160
161static MACHINE_CONFIG_START( merlin, merlin_state )
162
163   /* basic machine hardware */
164   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
165   MCFG_TMS1XXX_READ_K_CB(READ8(merlin_state, read_k))
166   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(merlin_state, write_o))
167   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(merlin_state, write_r))
168
169   MCFG_DEFAULT_LAYOUT(layout_merlin)
170
171   /* no video! */
172
173   /* sound hardware */
174   MCFG_SPEAKER_STANDARD_MONO("mono")
175   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
176   MCFG_SPEAKER_LEVELS(4, speaker_levels)
177   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
178MACHINE_CONFIG_END
179
180
181
182/***************************************************************************
183
184  Game driver(s)
185
186***************************************************************************/
187
188ROM_START( merlin )
189   ROM_REGION( 0x800, "maincpu", 0 )
190   ROM_LOAD( "mp3404", 0x0000, 0x800, CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
191
192   ROM_REGION( 867, "maincpu:mpla", 0 )
193   ROM_LOAD( "tms1100_merlin_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
194   ROM_REGION( 365, "maincpu:opla", 0 )
195   ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, CRC(3921b074) SHA1(12bd58e4d6676eb8c7059ef53598279e4f1a32ea) )
196ROM_END
197
198
199CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/splitsec.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Parker Brothers Split Second
6  * TMS1400NLL MP7314-N2 (die labeled MP7314)
7
8  This is an electronic handheld reflex gaming device, it's straightforward
9  to use. The included mini-games are:
10  1, 2, 3: Mad Maze*
11  4, 5: Space Attack*
12  6: Auto Cross
13  7: Stomp
14  8: Speedball
15
16  *: higher number indicates higher difficulty
17
18
19----------------------------------------------------------------------------
20
21  Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen
22  * TMS1400NLL MP7313-N2 (die labeled MP7313)
23
24  Bank Shot is an electronic pool game. To select a game, repeatedly press
25  the [SELECT] button, then press [CUE UP] to start. Refer to the official
26  manual for more information. The game selections are:
27  1: Straight Pool (1 player)
28  2: Straight Pool (2 players)
29  3: Poison Pool
30  4: Trick Shots
31
32
33  TODO:
34  - bankshot: the cue ball led is strobed more often than other leds,
35    making it look brighter. We need more accurate led decay simulation
36    for this to work.
37  - MCU clock is unknown
38
39***************************************************************************/
40
41#include "emu.h"
42#include "cpu/tms0980/tms0980.h"
43#include "sound/speaker.h"
44
45#include "splitsec.lh"
46#include "bankshot.lh"
47
48// The master clock is a single stage RC oscillator: R=24K, C=100pf,
49// according to the TMS 1000 series data manual this is around 375kHz.
50// However, this sounds too low-pitched and runs too slow when compared
51// to recordings, maybe the RC osc curve is different for TMS1400?
52
53// so for now, the value below is an approximation
54#define MASTER_CLOCK (475000)
55
56
57class splitsec_state : public driver_device
58{
59public:
60   splitsec_state(const machine_config &mconfig, device_type type, const char *tag)
61      : driver_device(mconfig, type, tag),
62      m_maincpu(*this, "maincpu"),
63      m_button_matrix(*this, "IN"),
64      m_speaker(*this, "speaker")
65   { }
66
67   required_device<cpu_device> m_maincpu;
68   required_ioport_array<2> m_button_matrix;
69   required_device<speaker_sound_device> m_speaker;
70
71   UINT8 m_input_mux;
72   UINT16 m_r;
73   UINT16 m_o;
74
75   UINT16 m_display_state[0x10];
76   UINT16 m_display_cache[0x10];
77   UINT8 m_display_decay[0x100];
78
79   DECLARE_READ8_MEMBER(read_k);
80   DECLARE_WRITE16_MEMBER(write_o);
81   DECLARE_WRITE16_MEMBER(splitsec_write_r);
82   DECLARE_WRITE16_MEMBER(bankshot_write_r);
83
84   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
85   void display_update();
86
87   virtual void machine_start();
88};
89
90
91
92/***************************************************************************
93
94  LED Display
95
96***************************************************************************/
97
98// The device strobes the outputs very fast, it is unnoticeable to the user.
99// To prevent flickering here, we need to simulate a decay.
100
101// decay time, in steps of 1ms
102#define DISPLAY_DECAY_TIME 40
103
104/* display layout, where number xy is lamp R(x),O(y)
105
106  Split Second:
107
108       00    02    04
109    10 01 12 03 14 05 16
110       11    13    15
111    20 21 22 23 24 25 26
112       31    33    35
113    30 41 32 43 34 45 36
114       51    53    55
115    40 61 42 63 44 65 46
116       71    73    75
117    50 60 52 62 54 64 56
118       70    72    74
119
120
121  Bank Shot: pretty much linear, see bankshot.lay
122
123*/
124
125void splitsec_state::display_update()
126{
127   UINT16 active_state[0x10];
128
129   for (int i = 0; i < 0x10; i++)
130   {
131      // update current state
132      m_display_state[i] = (m_r >> i & 1) ? m_o : 0;
133
134      active_state[i] = 0;
135
136      for (int j = 0; j < 0x10; j++)
137      {
138         int di = j << 4 | i;
139
140         // turn on powered segments
141         if (m_display_state[i] >> j & 1)
142            m_display_decay[di] = DISPLAY_DECAY_TIME;
143
144         // determine active state
145         int ds = (m_display_decay[di] != 0) ? 1 : 0;
146         active_state[i] |= (ds << j);
147      }
148   }
149
150   // on difference, send to output
151   for (int i = 0; i < 0x10; i++)
152      if (m_display_cache[i] != active_state[i])
153      {
154         for (int j = 0; j < 8; j++)
155            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
156      }
157
158   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
159}
160
161TIMER_DEVICE_CALLBACK_MEMBER(splitsec_state::display_decay_tick)
162{
163   // slowly turn off unpowered segments
164   for (int i = 0; i < 0x100; i++)
165      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
166         m_display_decay[i]--;
167
168   display_update();
169}
170
171
172
173/***************************************************************************
174
175  I/O
176
177***************************************************************************/
178
179READ8_MEMBER(splitsec_state::read_k)
180{
181   UINT8 k = 0;
182
183   // read selected button rows
184   for (int i = 0; i < 2; i++)
185      if (m_input_mux >> i & 1)
186         k |= m_button_matrix[i]->read();
187
188   return k;
189}
190
191WRITE16_MEMBER(splitsec_state::write_o)
192{
193   // O0-O6: led columns
194   // O7: N/C
195   m_o = data;
196   display_update();
197}
198
199WRITE16_MEMBER(splitsec_state::splitsec_write_r)
200{
201   // R8: speaker out
202   m_speaker->level_w(data >> 8 & 1);
203
204   // R9,R10: input mux
205   m_input_mux = data >> 9 & 3;
206
207   // R0-R7: led rows
208   m_r = data & 0xff;
209   display_update();
210}
211
212WRITE16_MEMBER(splitsec_state::bankshot_write_r)
213{
214   // R0: speaker out
215   m_speaker->level_w(data & 1);
216
217   // R2,R3: input mux
218   m_input_mux = data >> 2 & 3;
219
220   // R2-R10: led rows
221   m_r = data & ~3;
222   display_update();
223}
224
225
226
227/***************************************************************************
228
229  Inputs
230
231***************************************************************************/
232
233static INPUT_PORTS_START( splitsec )
234   PORT_START("IN.0") // R9
235   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // 4 separate directional buttons, hence 16way
236   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
237   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
238   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
239
240   PORT_START("IN.1") // R10
241   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
242   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select")
243   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start")
244   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
245INPUT_PORTS_END
246
247
248/* bankshot physical button layout and labels is like this:
249  (note: remember that you can rotate the display in MESS)
250
251    [SELECT  [BALL UP] [BALL OVER]
252     SCORE]
253
254    ------  led display  ------
255
256    [ANGLE]  [AIM]     [CUE UP
257                        SHOOT]
258*/
259
260static INPUT_PORTS_START( bankshot )
261   PORT_START("IN.0") // R2
262   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Angle")
263   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Aim")
264   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Cue Up / Shoot")
265   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
266
267   PORT_START("IN.1") // R3
268   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Select / Score")
269   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Ball Up")
270   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Ball Over")
271   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
272INPUT_PORTS_END
273
274
275
276/***************************************************************************
277
278  Machine Config
279
280***************************************************************************/
281
282void splitsec_state::machine_start()
283{
284   // zerofill
285   memset(m_display_state, 0, sizeof(m_display_state));
286   memset(m_display_cache, 0, sizeof(m_display_cache));
287   memset(m_display_decay, 0, sizeof(m_display_decay));
288
289   m_input_mux = 0;
290   m_r = 0;
291   m_o = 0;
292
293   // register for savestates
294   save_item(NAME(m_display_state));
295   save_item(NAME(m_display_cache));
296   save_item(NAME(m_display_decay));
297
298   save_item(NAME(m_input_mux));
299   save_item(NAME(m_r));
300   save_item(NAME(m_o));
301}
302
303
304static MACHINE_CONFIG_START( splitsec, splitsec_state )
305
306   /* basic machine hardware */
307   MCFG_CPU_ADD("maincpu", TMS1400, MASTER_CLOCK)
308   MCFG_TMS1XXX_READ_K_CB(READ8(splitsec_state, read_k))
309   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(splitsec_state, write_o))
310   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, splitsec_write_r))
311
312   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", splitsec_state, display_decay_tick, attotime::from_msec(1))
313
314   MCFG_DEFAULT_LAYOUT(layout_splitsec)
315
316   /* no video! */
317
318   /* sound hardware */
319   MCFG_SPEAKER_STANDARD_MONO("mono")
320   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
321   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
322MACHINE_CONFIG_END
323
324static MACHINE_CONFIG_DERIVED( bankshot, splitsec )
325
326   /* basic machine hardware */
327   MCFG_CPU_MODIFY("maincpu")
328   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, bankshot_write_r))
329
330   MCFG_DEFAULT_LAYOUT(layout_bankshot)
331MACHINE_CONFIG_END
332
333
334
335/***************************************************************************
336
337  Game driver(s)
338
339***************************************************************************/
340
341ROM_START( splitsec )
342   ROM_REGION( 0x1000, "maincpu", 0 )
343   ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) )
344
345   ROM_REGION( 867, "maincpu:mpla", 0 )
346   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
347   ROM_REGION( 557, "maincpu:opla", 0 )
348   ROM_LOAD( "tms1400_splitsec_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) )
349ROM_END
350
351ROM_START( bankshot )
352   ROM_REGION( 0x1000, "maincpu", 0 )
353   ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) )
354
355   ROM_REGION( 867, "maincpu:mpla", 0 )
356   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
357   ROM_REGION( 557, "maincpu:opla", 0 )
358   ROM_LOAD( "tms1400_bankshot_opla.pla", 0, 557, CRC(7539283b) SHA1(f791fa98259fc10c393ff1961d4c93040f1a2932) )
359ROM_END
360
361
362CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE )
363CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/starwbc.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Kenner Star Wars - Electronic Battle Command
6  * TMS1100 MCU, labeled MP3438A
7
8  This is a small tabletop space-dogfighting game. To start the game,
9  press BASIC/INTER/ADV and enter P#(number of players), then
10  START TURN. Refer to the official manual for more information.
11
12***************************************************************************/
13
14#include "emu.h"
15#include "cpu/tms0980/tms0980.h"
16#include "sound/speaker.h"
17
18#include "starwbc.lh"
19
20// master clock is a single stage RC oscillator: R=51K, C=47pf,
21// according to the TMS 1000 series data manual this is around 350kHz
22#define MASTER_CLOCK (350000)
23
24
25class starwbc_state : public driver_device
26{
27public:
28   starwbc_state(const machine_config &mconfig, device_type type, const char *tag)
29      : driver_device(mconfig, type, tag),
30      m_maincpu(*this, "maincpu"),
31      m_button_matrix(*this, "IN"),
32      m_speaker(*this, "speaker")
33   { }
34
35   required_device<cpu_device> m_maincpu;
36   required_ioport_array<5> m_button_matrix;
37   required_device<speaker_sound_device> m_speaker;
38
39   UINT16 m_r;
40   UINT16 m_o;
41
42   UINT16 m_display_state[0x10];
43   UINT16 m_display_cache[0x10];
44   UINT8 m_display_decay[0x100];
45
46   DECLARE_READ8_MEMBER(read_k);
47   DECLARE_WRITE16_MEMBER(write_o);
48   DECLARE_WRITE16_MEMBER(write_r);
49
50   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
51   void display_update();
52   void prepare_and_update();
53
54   virtual void machine_start();
55};
56
57
58
59/***************************************************************************
60
61  LED Display
62
63***************************************************************************/
64
65// The device strobes the outputs very fast, it is unnoticeable to the user.
66// To prevent flickering here, we need to simulate a decay.
67
68// decay time, in steps of 1ms
69#define DISPLAY_DECAY_TIME 40
70
71void starwbc_state::display_update()
72{
73   UINT16 active_state[0x10];
74
75   for (int i = 0; i < 0x10; i++)
76   {
77      active_state[i] = 0;
78
79      for (int j = 0; j < 0x10; j++)
80      {
81         int di = j << 4 | i;
82
83         // turn on powered segments
84         if (m_display_state[i] >> j & 1)
85            m_display_decay[di] = DISPLAY_DECAY_TIME;
86
87         // determine active state
88         int ds = (m_display_decay[di] != 0) ? 1 : 0;
89         active_state[i] |= (ds << j);
90      }
91   }
92
93   // on difference, send to output
94   for (int i = 0; i < 0x10; i++)
95      if (m_display_cache[i] != active_state[i])
96      {
97         output_set_digit_value(i, active_state[i]);
98
99         for (int j = 0; j < 8; j++)
100            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
101      }
102
103   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
104}
105
106TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::display_decay_tick)
107{
108   // slowly turn off unpowered segments
109   for (int i = 0; i < 0x100; i++)
110      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
111         m_display_decay[i]--;
112
113   display_update();
114}
115
116void starwbc_state::prepare_and_update()
117{
118   UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f);
119   const UINT8 mask[5] = { 0x30, 0xff, 0xff, 0x7f, 0x7f };
120
121   // R0,R2,R4,R6,R8
122   for (int i = 0; i < 5; i++)
123      m_display_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0;
124
125   display_update();
126}
127
128
129
130/***************************************************************************
131
132  I/O
133
134***************************************************************************/
135
136READ8_MEMBER(starwbc_state::read_k)
137{
138   UINT8 k = 0;
139
140   // read selected button rows
141   for (int i = 0; i < 5; i++)
142   {
143      const int ki[5] = { 0, 1, 3, 5, 7 };
144      if (m_r >> ki[i] & 1)
145         k |= m_button_matrix[i]->read();
146   }
147
148   return k;
149}
150
151WRITE16_MEMBER(starwbc_state::write_r)
152{
153   // R0,R2,R4: select lamp row
154   // R6,R8: select digit
155   // R0,R1,R3,R5,R7: input mux
156   // R9: piezo speaker
157   m_speaker->level_w(data >> 9 & 1);
158
159   m_r = data;
160   prepare_and_update();
161}
162
163WRITE16_MEMBER(starwbc_state::write_o)
164{
165   // O0-O7: leds state
166   m_o = data;
167   prepare_and_update();
168}
169
170
171
172/***************************************************************************
173
174  Inputs
175
176***************************************************************************/
177
178/* physical button layout and labels is like this:
179
180    (reconnnaissance=yellow)        (tactical reaction=green)
181    [MAGNA] [ENEMY]                 [EM]       [BS]   [SCR]
182
183    [BASIC] [INTER]    [START TURN] [END TURN] [MOVE] [FIRE]
184    [ADV]   [P#]       [<]          [^]        [>]    [v]
185    (game=blue)        (maneuvers=red)                       */
186
187static INPUT_PORTS_START( starwbc )
188   PORT_START("IN.0") // R0
189   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
190   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
191   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
192   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number")
193
194   PORT_START("IN.1") // R1
195   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
196   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
197   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
198   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
199
200   PORT_START("IN.2") // R3
201   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
202   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
203   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
204   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
205
206   PORT_START("IN.3") // R5
207   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
208   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
209   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
210   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
211
212   PORT_START("IN.4") // R7
213   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
214   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
215   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
216   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
217INPUT_PORTS_END
218
219
220
221/***************************************************************************
222
223  Machine Config
224
225***************************************************************************/
226
227void starwbc_state::machine_start()
228{
229   // zerofill
230   memset(m_display_state, 0, sizeof(m_display_state));
231   memset(m_display_cache, 0, sizeof(m_display_cache));
232   memset(m_display_decay, 0, sizeof(m_display_decay));
233
234   m_r = 0;
235   m_o = 0;
236
237   // register for savestates
238   save_item(NAME(m_display_state));
239   save_item(NAME(m_display_cache));
240   save_item(NAME(m_display_decay));
241
242   save_item(NAME(m_r));
243   save_item(NAME(m_o));
244}
245
246
247static MACHINE_CONFIG_START( starwbc, starwbc_state )
248
249   /* basic machine hardware */
250   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
251   MCFG_TMS1XXX_READ_K_CB(READ8(starwbc_state, read_k))
252   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
253   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
254
255   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", starwbc_state, display_decay_tick, attotime::from_msec(1))
256
257   MCFG_DEFAULT_LAYOUT(layout_starwbc)
258
259   /* no video! */
260
261   /* sound hardware */
262   MCFG_SPEAKER_STANDARD_MONO("mono")
263   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
264   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
265MACHINE_CONFIG_END
266
267
268
269/***************************************************************************
270
271  Game driver(s)
272
273***************************************************************************/
274
275ROM_START( starwbc )
276   ROM_REGION( 0x0800, "maincpu", 0 )
277   ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) )
278
279   ROM_REGION( 867, "maincpu:mpla", 0 )
280   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
281   ROM_REGION( 365, "maincpu:opla", 0 )
282   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
283ROM_END
284
285ROM_START( starwbcp )
286   ROM_REGION( 0x0800, "maincpu", 0 )
287   ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors
288
289   ROM_REGION( 867, "maincpu:mpla", 0 )
290   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
291   ROM_REGION( 365, "maincpu:opla", 0 )
292   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
293ROM_END
294
295
296CONS( 1979, starwbc,  0,       0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE )
297CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/stopthie.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Parker Brothers Stop Thief, by Bob Doyle
6  * TMS0980NLL MP6101B (die labeled 0980B-01A)
7
8  Stop Thief is actually a board game, the electronic device emulated here
9  (called Electronic Crime Scanner) is an accessory. To start a game, press
10  the ON button. Otherwise, it is in test-mode where you can hear all sounds.
11
12
13  TODO:
14  - MCU clock is unknown
15  - stopthiep: unable to start a game (may be intentional?)
16
17***************************************************************************/
18
19#include "emu.h"
20#include "cpu/tms0980/tms0980.h"
21#include "sound/speaker.h"
22
23#include "stopthie.lh"
24
25// master clock is unknown, the value below is an approximation
26#define MASTER_CLOCK (425000)
27
28
29class stopthief_state : public driver_device
30{
31public:
32   stopthief_state(const machine_config &mconfig, device_type type, const char *tag)
33      : driver_device(mconfig, type, tag),
34      m_maincpu(*this, "maincpu"),
35      m_button_matrix(*this, "IN"),
36      m_speaker(*this, "speaker")
37   { }
38
39   required_device<cpu_device> m_maincpu;
40   required_ioport_array<3> m_button_matrix;
41   required_device<speaker_sound_device> m_speaker;
42
43   UINT16 m_o;
44   bool m_power_on;
45
46   UINT16 m_display_state[0x10];
47   UINT16 m_display_cache[0x10];
48   UINT8 m_display_decay[0x100];
49
50   DECLARE_READ8_MEMBER(read_k);
51   DECLARE_WRITE16_MEMBER(write_o);
52   DECLARE_WRITE16_MEMBER(write_r);
53
54   DECLARE_INPUT_CHANGED_MEMBER(power_button);
55   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
56
57   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
58   void display_update();
59
60   virtual void machine_reset();
61   virtual void machine_start();
62};
63
64
65
66/***************************************************************************
67
68  LED Display
69
70***************************************************************************/
71
72// The device strobes the outputs very fast, it is unnoticeable to the user.
73// To prevent flickering here, we need to simulate a decay.
74
75// decay time, in steps of 1ms
76#define DISPLAY_DECAY_TIME 40
77
78void stopthief_state::display_update()
79{
80   UINT16 active_state[0x10];
81
82   for (int i = 0; i < 0x10; i++)
83   {
84      active_state[i] = 0;
85
86      for (int j = 0; j < 0x10; j++)
87      {
88         int di = j << 4 | i;
89
90         // turn on powered segments
91         if (m_power_on && m_display_state[i] >> j & 1)
92            m_display_decay[di] = DISPLAY_DECAY_TIME;
93
94         // determine active state
95         int ds = (m_display_decay[di] != 0) ? 1 : 0;
96         active_state[i] |= (ds << j);
97      }
98   }
99
100   // on difference, send to output
101   for (int i = 0; i < 0x10; i++)
102      if (m_display_cache[i] != active_state[i])
103         output_set_digit_value(i, active_state[i]);
104
105   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
106}
107
108TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::display_decay_tick)
109{
110   // slowly turn off unpowered segments
111   for (int i = 0; i < 0x100; i++)
112      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
113         m_display_decay[i]--;
114
115   display_update();
116}
117
118
119
120/***************************************************************************
121
122  I/O
123
124***************************************************************************/
125
126READ8_MEMBER(stopthief_state::read_k)
127{
128   // the Vss row is always on
129   UINT8 k = m_button_matrix[2]->read();
130
131   // read selected button rows
132   for (int i = 0; i < 2; i++)
133   {
134      const int ki[2] = { 0, 6 };
135      if (m_o >> ki[i] & 1)
136         k |= m_button_matrix[i]->read();
137   }
138
139   return k;
140}
141
142WRITE16_MEMBER(stopthief_state::write_r)
143{
144   // R0-R2: select digit
145   UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f;
146   for (int i = 0; i < 3; i++)
147      m_display_state[i] = (data >> i & 1) ? o : 0;
148
149   display_update();
150
151   // R3-R8: speaker on
152   m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
153}
154
155WRITE16_MEMBER(stopthief_state::write_o)
156{
157   // O0,O6: input mux
158   // O3: speaker out
159   // O0-O2,O4-O7: led segments A-G
160   m_o = data;
161}
162
163
164
165/***************************************************************************
166
167  Inputs
168
169***************************************************************************/
170
171INPUT_CHANGED_MEMBER(stopthief_state::power_button)
172{
173   m_power_on = (bool)(FPTR)param;
174   m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
175}
176
177/* physical button layout and labels is like this:
178
179    [1] [2] [OFF]
180    [3] [4] [ON]
181    [5] [6] [T, TIP]
182    [7] [8] [A, ARREST]
183    [9] [0] [C, CLUE]
184*/
185
186static INPUT_PORTS_START( stopthief )
187   PORT_START("IN.0") // O0
188   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
189   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
190   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
191   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
192   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
193
194   PORT_START("IN.1") // O6
195   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
196   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
197   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
198   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
199   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
200
201   // note: even though power buttons are on the matrix, they are not CPU-controlled
202   PORT_START("IN.2") // Vss!
203   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)
204   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip")
205   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest")
206   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue")
207   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)
208INPUT_PORTS_END
209
210
211
212/***************************************************************************
213
214  Machine Config
215
216***************************************************************************/
217
218WRITE_LINE_MEMBER(stopthief_state::auto_power_off)
219{
220   // TMS0980 auto power-off opcode
221   if (state)
222   {
223      m_power_on = false;
224      m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
225   }
226}
227
228
229void stopthief_state::machine_reset()
230{
231   m_power_on = true;
232}
233
234void stopthief_state::machine_start()
235{
236   // zerofill
237   memset(m_display_state, 0, sizeof(m_display_state));
238   memset(m_display_cache, 0, sizeof(m_display_cache));
239   memset(m_display_decay, 0, sizeof(m_display_decay));
240
241   m_o = 0;
242   m_power_on = false;
243
244   // register for savestates
245   save_item(NAME(m_display_state));
246   save_item(NAME(m_display_cache));
247   save_item(NAME(m_display_decay));
248
249   save_item(NAME(m_o));
250   save_item(NAME(m_power_on));
251}
252
253
254static MACHINE_CONFIG_START( stopthief, stopthief_state )
255
256   /* basic machine hardware */
257   MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK)
258   MCFG_TMS1XXX_READ_K_CB(READ8(stopthief_state, read_k))
259   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(stopthief_state, write_o))
260   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(stopthief_state, write_r))
261   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(stopthief_state, auto_power_off))
262
263   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", stopthief_state, display_decay_tick, attotime::from_msec(1))
264
265   MCFG_DEFAULT_LAYOUT(layout_stopthie)
266
267   /* no video! */
268
269   /* sound hardware */
270   MCFG_SPEAKER_STANDARD_MONO("mono")
271   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
272   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
273MACHINE_CONFIG_END
274
275
276
277/***************************************************************************
278
279  Game driver(s)
280
281***************************************************************************/
282
283ROM_START( stopthie )
284   ROM_REGION( 0x1000, "maincpu", 0 )
285   ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
286
287   ROM_REGION( 1246, "maincpu:ipla", 0 )
288   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
289   ROM_REGION( 1982, "maincpu:mpla", 0 )
290   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
291   ROM_REGION( 352, "maincpu:opla", 0 )
292   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
293   ROM_REGION( 157, "maincpu:spla", 0 )
294   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
295ROM_END
296
297ROM_START( stopthiep )
298   ROM_REGION( 0x1000, "maincpu", 0 )
299   ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums)
300
301   ROM_REGION( 1246, "maincpu:ipla", 0 )
302   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
303   ROM_REGION( 1982, "maincpu:mpla", 0 )
304   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
305   ROM_REGION( 352, "maincpu:opla", 0 )
306   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
307   ROM_REGION( 157, "maincpu:spla", 0 )
308   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
309ROM_END
310
311
312CONS( 1979, stopthie,  0,        0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE )
313CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
trunk/src/mess/drivers/tandy12.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
6  * TMS1100 CD7282SL
7
8  This handheld contains 12 minigames. It looks and plays like "Fabulous Fred"
9  by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin
10  and Simon. Unlike Merlin and Simon, spin-offs like these were not successful.
11  There were releases with and without the prefix "Tandy-12", I don't know
12  which name was more common. Also not worth noting is that it needed five
13  batteries; 4 C-cells and a 9-volt.
14
15  Some of the games require accessories included with the toy (eg. the Baseball
16  game is played with a board representing the playing field). To start a game,
17  hold the [SELECT] button, then press [START] when the game button lights up.
18  As always, refer to the official manual for more information.
19
20  See below at the input defs for a list of the games.
21
22
23  TODO:
24  - output PLA is not verified
25  - microinstructions PLA is not verified
26
27***************************************************************************/
28
29#include "emu.h"
30#include "cpu/tms0980/tms0980.h"
31#include "sound/speaker.h"
32
33#include "tandy12.lh" // clickable
34
35// master clock is a single stage RC oscillator: R=39K, C=47pf,
36// according to the TMS 1000 series data manual this is around 400kHz
37#define MASTER_CLOCK (400000)
38
39
40class tandy12_state : public driver_device
41{
42public:
43   tandy12_state(const machine_config &mconfig, device_type type, const char *tag)
44      : driver_device(mconfig, type, tag),
45      m_maincpu(*this, "maincpu"),
46      m_button_matrix(*this, "IN"),
47      m_speaker(*this, "speaker")
48   { }
49
50   required_device<tms1xxx_cpu_device> m_maincpu;
51   required_ioport_array<5> m_button_matrix;
52   required_device<speaker_sound_device> m_speaker;
53
54   UINT16 m_r;
55
56   DECLARE_READ8_MEMBER(read_k);
57   DECLARE_WRITE16_MEMBER(write_o);
58   DECLARE_WRITE16_MEMBER(write_r);
59
60   virtual void machine_start();
61};
62
63
64/***************************************************************************
65
66  I/O
67
68***************************************************************************/
69
70READ8_MEMBER(tandy12_state::read_k)
71{
72   UINT8 k = 0;
73
74   // read selected button rows
75   for (int i = 0; i < 5; i++)
76      if (m_r >> (i+5) & 1)
77         k |= m_button_matrix[i]->read();
78
79   return k;
80}
81
82WRITE16_MEMBER(tandy12_state::write_o)
83{
84   // O0-O7: button lamps 1-8
85   for (int i = 0; i < 8; i++)
86      output_set_lamp_value(i+1, data >> i & 1);
87}
88
89WRITE16_MEMBER(tandy12_state::write_r)
90{
91   // R0-R3: button lamps 9-12
92   for (int i = 0; i < 4; i++)
93      output_set_lamp_value(i+1 + 8, data >> i & 1);
94
95   // R10: speaker out
96   m_speaker->level_w(data >> 10 & 1);
97
98   // R5-R9: input mux
99   m_r = data;
100}
101
102
103
104/***************************************************************************
105
106  Inputs
107
108***************************************************************************/
109
110/* physical button layout and labels is like this:
111
112        REPEAT-2              SPACE-2
113          [O]     OFF--ON       [O]
114
115    [purple]1     [blue]5       [l-green]9
116    ORGAN         TAG-IT        TREASURE HUNT
117
118    [l-orange]2   [turquoise]6  [red]10
119    SONG WRITER   ROULETTE      COMPETE
120
121    [pink]3       [yellow]7     [violet]11
122    REPEAT        BASEBALL      FIRE AWAY
123
124    [green]4      [orange]8     [brown]12
125    TORPEDO       REPEAT PLUS   HIDE 'N SEEK
126
127          [O]        [O]        [O]
128         START      SELECT    PLAY-2/HIT-7
129*/
130
131static INPUT_PORTS_START( tandy12 )
132   PORT_START("IN.0") // R5
133   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("12")
134   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("11")
135   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("10")
136   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
137
138   PORT_START("IN.1") // R6
139   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Space-2")
140   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Play-2/Hit-7")
141   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Select")
142   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Start")
143
144   PORT_START("IN.2") // R7
145   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat-2")
146   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
147   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
148   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
149
150   PORT_START("IN.3") // R8
151   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
152   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
153   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
154   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
155
156   PORT_START("IN.4") // R9
157   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
158   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
159   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
160   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
161INPUT_PORTS_END
162
163
164
165/***************************************************************************
166
167  Machine Config
168
169***************************************************************************/
170
171void tandy12_state::machine_start()
172{
173   m_r = 0;
174   save_item(NAME(m_r));
175}
176
177
178static const UINT16 tandy12_output_pla[0x20] =
179{
180   // these are certain
181   0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
182   0x80, 0x00, 0x00, 0x00, 0x00,
183
184   // rest is unused?
185   0x00, 0x00, 0x00,
186   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
188};
189
190
191static MACHINE_CONFIG_START( tandy12, tandy12_state )
192
193   /* basic machine hardware */
194   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
195   MCFG_TMS1XXX_OUTPUT_PLA(tandy12_output_pla)
196   MCFG_TMS1XXX_READ_K_CB(READ8(tandy12_state, read_k))
197   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tandy12_state, write_o))
198   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tandy12_state, write_r))
199
200   MCFG_DEFAULT_LAYOUT(layout_tandy12)
201
202   /* no video! */
203
204   /* sound hardware */
205   MCFG_SPEAKER_STANDARD_MONO("mono")
206   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
207   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
208MACHINE_CONFIG_END
209
210
211
212/***************************************************************************
213
214  Game driver(s)
215
216***************************************************************************/
217
218ROM_START( tandy12 )
219   ROM_REGION( 0x800, "maincpu", 0 )
220   ROM_LOAD( "cd7282sl", 0x0000, 0x800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) )
221
222   ROM_REGION( 867, "maincpu:mpla", 0 )
223   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
224   ROM_REGION( 365, "maincpu:opla", 0 )
225   ROM_LOAD( "tms1100_tandy12_opla.pla", 0, 365, NO_DUMP )
226ROM_END
227
228
229CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/unk3403.c
r244637r244638
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  TMS1100NLL MP3403 DBS 7836 SINGAPORE some game board with 7-segs.
6
7  What old electronic game is this?
8
9  some clues:
10  - it's from 1978
11  - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403
12  - it plays some short jingles (you need to be lucky with button mashing),
13    jingles feel like maybe a horse racing game
14
15***************************************************************************/
16
17#include "emu.h"
18#include "cpu/tms0980/tms0980.h"
19#include "sound/speaker.h"
20
21// master clock is unknown, the value below is an approximation
22#define MASTER_CLOCK (350000)
23
24
25class unk3403_state : public driver_device
26{
27public:
28   unk3403_state(const machine_config &mconfig, device_type type, const char *tag)
29      : driver_device(mconfig, type, tag),
30      m_maincpu(*this, "maincpu"),
31      m_button_matrix(*this, "IN"),
32      m_speaker(*this, "speaker")
33   { }
34
35   required_device<cpu_device> m_maincpu;
36   required_ioport_array<4> m_button_matrix;
37   required_device<speaker_sound_device> m_speaker;
38
39   UINT16 m_r;
40   UINT16 m_o;
41
42   DECLARE_READ8_MEMBER(read_k);
43   DECLARE_WRITE16_MEMBER(write_o);
44   DECLARE_WRITE16_MEMBER(write_r);
45
46   void leds_update();
47
48   virtual void machine_start();
49};
50
51
52
53/***************************************************************************
54
55  I/O
56
57***************************************************************************/
58
59void unk3403_state::leds_update()
60{
61   // show debug clues
62   static UINT8 leds[0x10] = { 0 };
63   char msg[0x100] = { 0 };
64   char dig[0x100] = { 0 };
65   sprintf(msg, "R,  *R,  O[R]");
66
67   for (int i = 0; i < 11; i++)
68   {
69      if (m_r >> i & 1)
70      {
71         leds[i]=m_o;
72      }
73      sprintf(dig, "\n  %X   %c   %02X",i, (m_r >> i & 1) ? 'X' : '_', leds[i]);
74      strcat(msg, dig);
75   }
76
77   popmessage("%s", msg);
78}
79
80READ8_MEMBER(unk3403_state::read_k)
81{
82   UINT8 k = 0;
83
84   // read selected button rows
85   for (int i = 0; i < 4; i++)
86   {
87      if (m_r >> (i + 4) & 1)
88         k |= m_button_matrix[i]->read();
89   }
90
91   return k;
92}
93
94WRITE16_MEMBER(unk3403_state::write_r)
95{
96   // R4-R7: input mux
97   // R10: maybe a switch or other button row?
98   // R9: speaker out
99   m_speaker->level_w(data >> 9 & 1);
100
101   // others: ?
102   m_r = data;
103   leds_update();
104}
105
106WRITE16_MEMBER(unk3403_state::write_o)
107{
108   // ?
109   m_o = data;
110   leds_update();
111}
112
113
114
115/***************************************************************************
116
117  Inputs
118
119***************************************************************************/
120
121static INPUT_PORTS_START( unk3403 )
122   PORT_START("IN.0") // R4
123   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
124   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
125   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
126   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
127
128   PORT_START("IN.1") // R5
129   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
130   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
131   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
132   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
133
134   PORT_START("IN.2") // R6
135   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
136   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
137   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
138   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame?
139
140   PORT_START("IN.3") // R7
141   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
142   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
143   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
144   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)
145INPUT_PORTS_END
146
147
148
149/***************************************************************************
150
151  Machine Config
152
153***************************************************************************/
154
155void unk3403_state::machine_start()
156{
157   m_r = 0;
158   m_o = 0;
159
160   save_item(NAME(m_r));
161   save_item(NAME(m_o));
162}
163
164
165static const UINT16 unk3403_output_pla[0x20] =
166{
167   /* O output PLA configuration currently unknown */
168   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
169   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
170   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
171   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
172};
173
174
175static MACHINE_CONFIG_START( unk3403, unk3403_state )
176
177   /* basic machine hardware */
178   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
179   MCFG_TMS1XXX_OUTPUT_PLA(unk3403_output_pla)
180   MCFG_TMS1XXX_READ_K_CB(READ8(unk3403_state, read_k))
181   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(unk3403_state, write_o))
182   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(unk3403_state, write_r))
183
184   /* no video! */
185
186   /* sound hardware */
187   MCFG_SPEAKER_STANDARD_MONO("mono")
188   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
189   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
190MACHINE_CONFIG_END
191
192
193
194/***************************************************************************
195
196  Game driver(s)
197
198***************************************************************************/
199
200ROM_START( unk3403 )
201   ROM_REGION( 0x0800, "maincpu", 0 )
202   ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
203
204   ROM_REGION( 867, "maincpu:mpla", 0 )
205   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
206   ROM_REGION( 365, "maincpu:opla", 0 )
207   ROM_LOAD( "tms1100_xxx_opla.pla", 0, 365, NO_DUMP )
208ROM_END
209
210
211CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
trunk/src/mess/layout/cnsector.lay
r244637r244638
115115      <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel>
116116      <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel>
117117
118      <bezel name="lamp0" element="lamp">
118      <bezel name="lamp60" element="lamp">
119119         <bounds x="42" y="62" width="8" height="8" />
120120      </bezel>
121      <bezel name="lamp1" element="lamp">
121      <bezel name="lamp61" element="lamp">
122122         <bounds x="42" y="126" width="8" height="8" />
123123      </bezel>
124      <bezel name="lamp2" element="lamp">
124      <bezel name="lamp62" element="lamp">
125125         <bounds x="74" y="94" width="8" height="8" />
126126      </bezel>
127      <bezel name="lamp3" element="lamp">
127      <bezel name="lamp63" element="lamp">
128128         <bounds x="10" y="94" width="8" height="8" />
129129      </bezel>
130130
trunk/src/mess/layout/tmpacman.lay
r0r244638
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- define elements -->
5
6   <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
7
8   <element name="led" defstate="0">
9      <disk state="0"><color red="0.1" green="0.2" blue="0.2" /></disk>
10      <disk state="1"><color red="0.5" green="1.0" blue="1.0" /></disk>
11   </element>
12
13
14<!-- build screen -->
15
16   <view name="Test Layout">
17      <bounds left="0" right="64" top="0" bottom="64" />
18      <bezel element="static_black">
19         <bounds left="0" right="64" top="0" bottom="64" />
20      </bezel>
21
22   <!-- 8*19 matrix -->
23
24      <bezel name="lamp0" element="led"><bounds x="0" y="0" width="1" height="1" /></bezel>
25      <bezel name="lamp1" element="led"><bounds x="0" y="2" width="1" height="1" /></bezel>
26      <bezel name="lamp2" element="led"><bounds x="0" y="4" width="1" height="1" /></bezel>
27      <bezel name="lamp3" element="led"><bounds x="0" y="6" width="1" height="1" /></bezel>
28      <bezel name="lamp4" element="led"><bounds x="0" y="8" width="1" height="1" /></bezel>
29      <bezel name="lamp5" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel>
30      <bezel name="lamp6" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel>
31      <bezel name="lamp7" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel>
32      <bezel name="lamp8" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel>
33      <bezel name="lamp9" element="led"><bounds x="0" y="18" width="1" height="1" /></bezel>
34      <bezel name="lamp10" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
35      <bezel name="lamp11" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel>
36      <bezel name="lamp12" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel>
37      <bezel name="lamp13" element="led"><bounds x="0" y="26" width="1" height="1" /></bezel>
38      <bezel name="lamp14" element="led"><bounds x="0" y="28" width="1" height="1" /></bezel>
39      <bezel name="lamp15" element="led"><bounds x="0" y="30" width="1" height="1" /></bezel>
40      <bezel name="lamp16" element="led"><bounds x="0" y="32" width="1" height="1" /></bezel>
41      <bezel name="lamp17" element="led"><bounds x="0" y="34" width="1" height="1" /></bezel>
42      <bezel name="lamp18" element="led"><bounds x="0" y="36" width="1" height="1" /></bezel>
43
44      <bezel name="lamp100" element="led"><bounds x="2" y="0" width="1" height="1" /></bezel>
45      <bezel name="lamp101" element="led"><bounds x="2" y="2" width="1" height="1" /></bezel>
46      <bezel name="lamp102" element="led"><bounds x="2" y="4" width="1" height="1" /></bezel>
47      <bezel name="lamp103" element="led"><bounds x="2" y="6" width="1" height="1" /></bezel>
48      <bezel name="lamp104" element="led"><bounds x="2" y="8" width="1" height="1" /></bezel>
49      <bezel name="lamp105" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel>
50      <bezel name="lamp106" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel>
51      <bezel name="lamp107" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel>
52      <bezel name="lamp108" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel>
53      <bezel name="lamp109" element="led"><bounds x="2" y="18" width="1" height="1" /></bezel>
54      <bezel name="lamp110" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
55      <bezel name="lamp111" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
56      <bezel name="lamp112" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel>
57      <bezel name="lamp113" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel>
58      <bezel name="lamp114" element="led"><bounds x="2" y="28" width="1" height="1" /></bezel>
59      <bezel name="lamp115" element="led"><bounds x="2" y="30" width="1" height="1" /></bezel>
60      <bezel name="lamp116" element="led"><bounds x="2" y="32" width="1" height="1" /></bezel>
61      <bezel name="lamp117" element="led"><bounds x="2" y="34" width="1" height="1" /></bezel>
62      <bezel name="lamp118" element="led"><bounds x="2" y="36" width="1" height="1" /></bezel>
63
64      <bezel name="lamp200" element="led"><bounds x="4" y="0" width="1" height="1" /></bezel>
65      <bezel name="lamp201" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel>
66      <bezel name="lamp202" element="led"><bounds x="4" y="4" width="1" height="1" /></bezel>
67      <bezel name="lamp203" element="led"><bounds x="4" y="6" width="1" height="1" /></bezel>
68      <bezel name="lamp204" element="led"><bounds x="4" y="8" width="1" height="1" /></bezel>
69      <bezel name="lamp205" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel>
70      <bezel name="lamp206" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel>
71      <bezel name="lamp207" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel>
72      <bezel name="lamp208" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel>
73      <bezel name="lamp209" element="led"><bounds x="4" y="18" width="1" height="1" /></bezel>
74      <bezel name="lamp210" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
75      <bezel name="lamp211" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel>
76      <bezel name="lamp212" element="led"><bounds x="4" y="24" width="1" height="1" /></bezel>
77      <bezel name="lamp213" element="led"><bounds x="4" y="26" width="1" height="1" /></bezel>
78      <bezel name="lamp214" element="led"><bounds x="4" y="28" width="1" height="1" /></bezel>
79      <bezel name="lamp215" element="led"><bounds x="4" y="30" width="1" height="1" /></bezel>
80      <bezel name="lamp216" element="led"><bounds x="4" y="32" width="1" height="1" /></bezel>
81      <bezel name="lamp217" element="led"><bounds x="4" y="34" width="1" height="1" /></bezel>
82      <bezel name="lamp218" element="led"><bounds x="4" y="36" width="1" height="1" /></bezel>
83
84      <bezel name="lamp300" element="led"><bounds x="6" y="0" width="1" height="1" /></bezel>
85      <bezel name="lamp301" element="led"><bounds x="6" y="2" width="1" height="1" /></bezel>
86      <bezel name="lamp302" element="led"><bounds x="6" y="4" width="1" height="1" /></bezel>
87      <bezel name="lamp303" element="led"><bounds x="6" y="6" width="1" height="1" /></bezel>
88      <bezel name="lamp304" element="led"><bounds x="6" y="8" width="1" height="1" /></bezel>
89      <bezel name="lamp305" element="led"><bounds x="6" y="10" width="1" height="1" /></bezel>
90      <bezel name="lamp306" element="led"><bounds x="6" y="12" width="1" height="1" /></bezel>
91      <bezel name="lamp307" element="led"><bounds x="6" y="14" width="1" height="1" /></bezel>
92      <bezel name="lamp308" element="led"><bounds x="6" y="16" width="1" height="1" /></bezel>
93      <bezel name="lamp309" element="led"><bounds x="6" y="18" width="1" height="1" /></bezel>
94      <bezel name="lamp310" element="led"><bounds x="6" y="20" width="1" height="1" /></bezel>
95      <bezel name="lamp311" element="led"><bounds x="6" y="22" width="1" height="1" /></bezel>
96      <bezel name="lamp312" element="led"><bounds x="6" y="24" width="1" height="1" /></bezel>
97      <bezel name="lamp313" element="led"><bounds x="6" y="26" width="1" height="1" /></bezel>
98      <bezel name="lamp314" element="led"><bounds x="6" y="28" width="1" height="1" /></bezel>
99      <bezel name="lamp315" element="led"><bounds x="6" y="30" width="1" height="1" /></bezel>
100      <bezel name="lamp316" element="led"><bounds x="6" y="32" width="1" height="1" /></bezel>
101      <bezel name="lamp317" element="led"><bounds x="6" y="34" width="1" height="1" /></bezel>
102      <bezel name="lamp318" element="led"><bounds x="6" y="36" width="1" height="1" /></bezel>
103
104      <bezel name="lamp400" element="led"><bounds x="8" y="0" width="1" height="1" /></bezel>
105      <bezel name="lamp401" element="led"><bounds x="8" y="2" width="1" height="1" /></bezel>
106      <bezel name="lamp402" element="led"><bounds x="8" y="4" width="1" height="1" /></bezel>
107      <bezel name="lamp403" element="led"><bounds x="8" y="6" width="1" height="1" /></bezel>
108      <bezel name="lamp404" element="led"><bounds x="8" y="8" width="1" height="1" /></bezel>
109      <bezel name="lamp405" element="led"><bounds x="8" y="10" width="1" height="1" /></bezel>
110      <bezel name="lamp406" element="led"><bounds x="8" y="12" width="1" height="1" /></bezel>
111      <bezel name="lamp407" element="led"><bounds x="8" y="14" width="1" height="1" /></bezel>
112      <bezel name="lamp408" element="led"><bounds x="8" y="16" width="1" height="1" /></bezel>
113      <bezel name="lamp409" element="led"><bounds x="8" y="18" width="1" height="1" /></bezel>
114      <bezel name="lamp410" element="led"><bounds x="8" y="20" width="1" height="1" /></bezel>
115      <bezel name="lamp411" element="led"><bounds x="8" y="22" width="1" height="1" /></bezel>
116      <bezel name="lamp412" element="led"><bounds x="8" y="24" width="1" height="1" /></bezel>
117      <bezel name="lamp413" element="led"><bounds x="8" y="26" width="1" height="1" /></bezel>
118      <bezel name="lamp414" element="led"><bounds x="8" y="28" width="1" height="1" /></bezel>
119      <bezel name="lamp415" element="led"><bounds x="8" y="30" width="1" height="1" /></bezel>
120      <bezel name="lamp416" element="led"><bounds x="8" y="32" width="1" height="1" /></bezel>
121      <bezel name="lamp417" element="led"><bounds x="8" y="34" width="1" height="1" /></bezel>
122      <bezel name="lamp418" element="led"><bounds x="8" y="36" width="1" height="1" /></bezel>
123
124      <bezel name="lamp500" element="led"><bounds x="10" y="0" width="1" height="1" /></bezel>
125      <bezel name="lamp501" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel>
126      <bezel name="lamp502" element="led"><bounds x="10" y="4" width="1" height="1" /></bezel>
127      <bezel name="lamp503" element="led"><bounds x="10" y="6" width="1" height="1" /></bezel>
128      <bezel name="lamp504" element="led"><bounds x="10" y="8" width="1" height="1" /></bezel>
129      <bezel name="lamp505" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel>
130      <bezel name="lamp506" element="led"><bounds x="10" y="12" width="1" height="1" /></bezel>
131      <bezel name="lamp507" element="led"><bounds x="10" y="14" width="1" height="1" /></bezel>
132      <bezel name="lamp508" element="led"><bounds x="10" y="16" width="1" height="1" /></bezel>
133      <bezel name="lamp509" element="led"><bounds x="10" y="18" width="1" height="1" /></bezel>
134      <bezel name="lamp510" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel>
135      <bezel name="lamp511" element="led"><bounds x="10" y="22" width="1" height="1" /></bezel>
136      <bezel name="lamp512" element="led"><bounds x="10" y="24" width="1" height="1" /></bezel>
137      <bezel name="lamp513" element="led"><bounds x="10" y="26" width="1" height="1" /></bezel>
138      <bezel name="lamp514" element="led"><bounds x="10" y="28" width="1" height="1" /></bezel>
139      <bezel name="lamp515" element="led"><bounds x="10" y="30" width="1" height="1" /></bezel>
140      <bezel name="lamp516" element="led"><bounds x="10" y="32" width="1" height="1" /></bezel>
141      <bezel name="lamp517" element="led"><bounds x="10" y="34" width="1" height="1" /></bezel>
142      <bezel name="lamp518" element="led"><bounds x="10" y="36" width="1" height="1" /></bezel>
143
144      <bezel name="lamp600" element="led"><bounds x="12" y="0" width="1" height="1" /></bezel>
145      <bezel name="lamp601" element="led"><bounds x="12" y="2" width="1" height="1" /></bezel>
146      <bezel name="lamp602" element="led"><bounds x="12" y="4" width="1" height="1" /></bezel>
147      <bezel name="lamp603" element="led"><bounds x="12" y="6" width="1" height="1" /></bezel>
148      <bezel name="lamp604" element="led"><bounds x="12" y="8" width="1" height="1" /></bezel>
149      <bezel name="lamp605" element="led"><bounds x="12" y="10" width="1" height="1" /></bezel>
150      <bezel name="lamp606" element="led"><bounds x="12" y="12" width="1" height="1" /></bezel>
151      <bezel name="lamp607" element="led"><bounds x="12" y="14" width="1" height="1" /></bezel>
152      <bezel name="lamp608" element="led"><bounds x="12" y="16" width="1" height="1" /></bezel>
153      <bezel name="lamp609" element="led"><bounds x="12" y="18" width="1" height="1" /></bezel>
154      <bezel name="lamp610" element="led"><bounds x="12" y="20" width="1" height="1" /></bezel>
155      <bezel name="lamp611" element="led"><bounds x="12" y="22" width="1" height="1" /></bezel>
156      <bezel name="lamp612" element="led"><bounds x="12" y="24" width="1" height="1" /></bezel>
157      <bezel name="lamp613" element="led"><bounds x="12" y="26" width="1" height="1" /></bezel>
158      <bezel name="lamp614" element="led"><bounds x="12" y="28" width="1" height="1" /></bezel>
159      <bezel name="lamp615" element="led"><bounds x="12" y="30" width="1" height="1" /></bezel>
160      <bezel name="lamp616" element="led"><bounds x="12" y="32" width="1" height="1" /></bezel>
161      <bezel name="lamp617" element="led"><bounds x="12" y="34" width="1" height="1" /></bezel>
162      <bezel name="lamp618" element="led"><bounds x="12" y="36" width="1" height="1" /></bezel>
163
164      <bezel name="lamp700" element="led"><bounds x="14" y="0" width="1" height="1" /></bezel>
165      <bezel name="lamp701" element="led"><bounds x="14" y="2" width="1" height="1" /></bezel>
166      <bezel name="lamp702" element="led"><bounds x="14" y="4" width="1" height="1" /></bezel>
167      <bezel name="lamp703" element="led"><bounds x="14" y="6" width="1" height="1" /></bezel>
168      <bezel name="lamp704" element="led"><bounds x="14" y="8" width="1" height="1" /></bezel>
169      <bezel name="lamp705" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel>
170      <bezel name="lamp706" element="led"><bounds x="14" y="12" width="1" height="1" /></bezel>
171      <bezel name="lamp707" element="led"><bounds x="14" y="14" width="1" height="1" /></bezel>
172      <bezel name="lamp708" element="led"><bounds x="14" y="16" width="1" height="1" /></bezel>
173      <bezel name="lamp709" element="led"><bounds x="14" y="18" width="1" height="1" /></bezel>
174      <bezel name="lamp710" element="led"><bounds x="14" y="20" width="1" height="1" /></bezel>
175      <bezel name="lamp711" element="led"><bounds x="14" y="22" width="1" height="1" /></bezel>
176      <bezel name="lamp712" element="led"><bounds x="14" y="24" width="1" height="1" /></bezel>
177      <bezel name="lamp713" element="led"><bounds x="14" y="26" width="1" height="1" /></bezel>
178      <bezel name="lamp714" element="led"><bounds x="14" y="28" width="1" height="1" /></bezel>
179      <bezel name="lamp715" element="led"><bounds x="14" y="30" width="1" height="1" /></bezel>
180      <bezel name="lamp716" element="led"><bounds x="14" y="32" width="1" height="1" /></bezel>
181      <bezel name="lamp717" element="led"><bounds x="14" y="34" width="1" height="1" /></bezel>
182      <bezel name="lamp718" element="led"><bounds x="14" y="36" width="1" height="1" /></bezel>
183
184
185   </view>
186</mamelayout>
trunk/src/mess/mess.lst
r244637r244638
26172617edracula
26182618tc4
26192619ebball
2620tmpacman
trunk/src/mess/mess.mak
r244637r244638
735735   $(MESSOBJ)/homebrew.a \
736736   $(MESSOBJ)/homelab.a \
737737   $(MESSOBJ)/hp.a \
738   $(MESSOBJ)/ideal.a \
739738   $(MESSOBJ)/imp.a \
740739   $(MESSOBJ)/intel.a \
741740   $(MESSOBJ)/interton.a \
742741   $(MESSOBJ)/intv.a \
743742   $(MESSOBJ)/isc.a \
744743   $(MESSOBJ)/kaypro.a \
745   $(MESSOBJ)/kenner.a \
746744   $(MESSOBJ)/koei.a \
747745   $(MESSOBJ)/kyocera.a \
748746   $(MESSOBJ)/luxor.a \
r244637r244638
10041002
10051003$(MESSOBJ)/apf.a:               \
10061004   $(MESS_DRIVERS)/apf.o       \
1007   $(MESS_DRIVERS)/mathmagi.o  \
10081005
10091006$(MESSOBJ)/apollo.a:            \
10101007   $(MESS_DRIVERS)/apollo.o $(MESS_MACHINE)/apollo.o $(MESS_MACHINE)/apollo_dbg.o $(MESS_MACHINE)/apollo_kbd.o $(MESS_VIDEO)/apollo.o \
r244637r244638
13331330   $(MESS_DRIVERS)/sdk85.o     \
13341331   $(MESS_DRIVERS)/sdk86.o     \
13351332
1336$(MESSOBJ)/ideal.a:             \
1337   $(MESS_DRIVERS)/elecdet.o   \
1338
13391333$(MESSOBJ)/imp.a:               \
13401334   $(MESS_DRIVERS)/tim011.o    \
13411335   $(MESS_DRIVERS)/tim100.o    \
r244637r244638
13521346$(MESSOBJ)/kaypro.a:            \
13531347   $(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \
13541348
1355$(MESSOBJ)/kenner.a:            \
1356   $(MESS_DRIVERS)/starwbc.o   \
1357
13581349$(MESSOBJ)/koei.a:              \
13591350   $(MESS_DRIVERS)/pasogo.o    \
13601351
r244637r244638
14441435   $(MESS_DRIVERS)/pc100.o     \
14451436   $(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 \
14461437   $(MESS_DRIVERS)/tk80bs.o    \
1438   $(MESS_DRIVERS)/hh_ucom4.o  \
14471439
14481440$(MESSOBJ)/netronic.a:          \
14491441   $(MESS_DRIVERS)/elf.o       \
r244637r244638
14961488   $(MESS_DRIVERS)/palmz22.o   \
14971489
14981490$(MESSOBJ)/parker.a:            \
1499   $(MESS_DRIVERS)/cnsector.o  \
1500   $(MESS_DRIVERS)/merlin.o    \
1501   $(MESS_DRIVERS)/splitsec.o  \
1502   $(MESS_DRIVERS)/stopthie.o  \
15031491   $(MESS_DRIVERS)/wildfire.o  \
15041492
15051493$(MESSOBJ)/pitronic.a:          \
r244637r244638
18251813   $(MESS_MACHINE)/dragon.o    \
18261814   $(MESS_MACHINE)/dgnalpha.o  \
18271815   $(MESS_VIDEO)/gime.o        \
1828   $(MESS_DRIVERS)/tandy12.o   \
18291816   $(MESS_DRIVERS)/trs80.o $(MESS_MACHINE)/trs80.o $(MESS_VIDEO)/trs80.o \
18301817   $(MESS_DRIVERS)/trs80m2.o $(MESS_MACHINE)/trs80m2kb.o \
18311818   $(MESS_DRIVERS)/tandy2k.o $(MESS_MACHINE)/tandy2kb.o \
r244637r244638
20172004   $(MESS_DRIVERS)/ti630.o     \
20182005   $(MESS_DRIVERS)/tsispch.o   \
20192006   $(MESS_DRIVERS)/unistar.o   \
2020   $(MESS_DRIVERS)/unk3403.o   \
20212007   $(MESS_DRIVERS)/v6809.o     \
20222008   $(MESS_DRIVERS)/vector4.o   \
20232009   $(MESS_DRIVERS)/vii.o       \
r244637r244638
21172103$(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh
21182104$(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \
21192105                     $(MESS_LAYOUT)/borisdpl.lh
2120$(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh
21212106$(MESS_DRIVERS)/comp4.o:    $(MESS_LAYOUT)/comp4.lh
21222107$(MESS_DRIVERS)/cp1.o:      $(MESS_LAYOUT)/cp1.lh
21232108$(MESS_DRIVERS)/cvicny.o:   $(MESS_LAYOUT)/cvicny.lh
r244637r244638
21292114$(MESS_DRIVERS)/dolphunk.o: $(MESS_LAYOUT)/dolphunk.lh
21302115$(MESS_DRIVERS)/eacc.o:     $(MESS_LAYOUT)/eacc.lh
21312116$(MESS_DRIVERS)/edracula.o: $(MESS_LAYOUT)/edracula.lh
2132$(MESS_DRIVERS)/elecdet.o:  $(MESS_LAYOUT)/elecdet.lh
21332117$(MESS_DRIVERS)/elekscmp.o: $(MESS_LAYOUT)/elekscmp.lh
21342118$(MESS_DRIVERS)/elf.o:      $(MESS_LAYOUT)/elf2.lh
21352119$(MESS_MACHINE)/esqvfd.o:   $(MESS_LAYOUT)/esq2by40.lh \
r244637r244638
21432127$(MESS_DRIVERS)/glasgow.o:  $(MESS_LAYOUT)/glasgow.lh
21442128$(MESS_DRIVERS)/h8.o:       $(MESS_LAYOUT)/h8.lh
21452129$(MESS_DRIVERS)/hh_tms1k.o: $(MESS_LAYOUT)/amaztron.lh \
2130                            $(MESS_LAYOUT)/bankshot.lh \
2131                            $(MESS_LAYOUT)/cnsector.lh \
21462132                            $(MESS_LAYOUT)/comp4.lh \
21472133                            $(MESS_LAYOUT)/ebball.lh \
2134                            $(MESS_LAYOUT)/elecdet.lh \
2135                            $(MESS_LAYOUT)/mathmagi.lh \
2136                            $(MESS_LAYOUT)/merlin.lh \
21482137                            $(MESS_LAYOUT)/simon.lh \
2138                            $(MESS_LAYOUT)/splitsec.lh \
2139                            $(MESS_LAYOUT)/starwbc.lh \
2140                            $(MESS_LAYOUT)/stopthie.lh \
2141                            $(MESS_LAYOUT)/tandy12.lh \
21492142                            $(MESS_LAYOUT)/tc4.lh
2143$(MESS_DRIVERS)/hh_ucom4.o: $(MESS_LAYOUT)/tmpacman.lh
21502144$(MESS_DRIVERS)/ie15.o:     $(MESS_LAYOUT)/ie15.lh
21512145$(MESS_DRIVERS)/instruct.o: $(MESS_LAYOUT)/instruct.lh
21522146$(MESS_DRIVERS)/k1003.o:    $(MESS_LAYOUT)/k1003.lh
r244637r244638
21562150$(MESS_DRIVERS)/llc.o:      $(MESS_LAYOUT)/llc1.lh
21572151$(MESS_DRIVERS)/lynx.o:     $(MESS_LAYOUT)/lynx.lh
21582152$(MESS_DRIVERS)/mac.o:      $(MESS_LAYOUT)/mac.lh
2159$(MESS_DRIVERS)/mathmagi.o: $(MESS_LAYOUT)/mathmagi.lh
21602153$(MESS_MACHINE)/megacd.o:   $(MESS_LAYOUT)/megacd.lh
21612154$(MESS_DRIVERS)/mekd2.o:    $(MESS_LAYOUT)/mekd2.lh
21622155$(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh
2163$(MESS_DRIVERS)/merlin.o:   $(MESS_LAYOUT)/merlin.lh
21642156$(MESS_DRIVERS)/minicom.o:  $(MESS_LAYOUT)/minicom.lh
21652157$(MESS_DRIVERS)/mirage.o:   $(MESS_LAYOUT)/mirage.lh
21662158$(MESS_DRIVERS)/mk1.o:      $(MESS_LAYOUT)/mk1.lh
r244637r244638
21962188$(MESS_DRIVERS)/sitcom.o:   $(MESS_LAYOUT)/sitcom.lh
21972189$(MESS_DRIVERS)/slc1.o:     $(MESS_LAYOUT)/slc1.lh
21982190$(MESS_DRIVERS)/sms.o:      $(MESS_LAYOUT)/sms1.lh
2199$(MESS_DRIVERS)/splitsec.o: $(MESS_LAYOUT)/bankshot.lh \
2200                     $(MESS_LAYOUT)/splitsec.lh
2201$(MESS_DRIVERS)/starwbc.o:  $(MESS_LAYOUT)/starwbc.lh
2202$(MESS_DRIVERS)/stopthie.o: $(MESS_LAYOUT)/stopthie.lh
22032191$(MESS_DRIVERS)/super80.o:  $(MESS_LAYOUT)/super80.lh
22042192$(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh
22052193$(MESS_DRIVERS)/svision.o:  $(MESS_LAYOUT)/svision.lh
22062194$(MESS_DRIVERS)/svmu.o:     $(MESS_LAYOUT)/svmu.lh
22072195$(MESS_DRIVERS)/sym1.o:     $(MESS_LAYOUT)/sym1.lh
2208$(MESS_DRIVERS)/tandy12.o:  $(MESS_LAYOUT)/tandy12.lh
22092196$(MESS_DRIVERS)/tavernie.o: $(MESS_LAYOUT)/tavernie.lh
22102197$(MESS_DRIVERS)/tb303.o:    $(MESS_LAYOUT)/tb303.lh
22112198$(MESS_DRIVERS)/tc4.o:      $(MESS_LAYOUT)/tc4.lh


Previous 199869 Revisions Next


© 1997-2024 The MAME Team