Previous 199869 Revisions Next

r36125 Friday 27th February, 2015 at 17:09:39 UTC by Couriersud
Fix resizing on windows. (nw)
[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
[src/osd/sdl]window.c
[src/osd/windows]window.c

trunk/src/build/makelist.py
r244636r244637
33from __future__ import with_statement
44
55import sys
6import os
67
78drivlist = []
89
trunk/src/build/verinfo.py
r244636r244637
22
33from __future__ import with_statement
44
5import os
56import re
67import sys
78
r244636r244637
8485
8586if build == "mess":
8687    # 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"
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";
9495    bundle_identifier = "org.mamedev.mess"
9596elif build == "ume":
9697    # UME
trunk/src/emu/drivers/xtal.h
r244636r244637
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,
237236   XTAL_455kHz         = 455000,       /* OKI MSM5205 on Gladiator h/w */
238237   XTAL_512kHz         = 512000,       /* Toshiba TC8830F */
239238   XTAL_640kHz         = 640000,       /* NEC UPD7759, Texas Instruments Speech Chips @ 8khz */
trunk/src/mame/drivers/neogeo.c
r244636r244637
238238    . NEO-AEG CHA42G-3
239239    . NEO-AEG CHA42G-4
240240    . NEO-AEG CHA256
241    . NEO-AEG CHA256 B
242241    . NEO-AEG CHA256[B]
243    . NEO-AEG CHA256BY
244242    . NEO-AEG CHA256RY
245243    . NEO-AEG CHA512Y
246244    . NEO-AEG CHAFIO (1999.8.10) - used with NEO-CMC 90G06C7042 or NEO-CMC 90G06C7050
r244636r244637
263261    . NEO-AEG PROG4096 B
264262    . NEO-AEG PROGGS
265263    . NEO-AEG PROGTOP2
266    . NEO-AEG PROGTOP2Y
267264    . NEO-AEG PROGEOP (1999.4.2)
268265    . NEO-AEG PROGLBA (1999.7.6)
269266    . NEO-AEG PROGRK
r244636r244637
310307    GIGA PROG Board 1.0
311308    GIGA PROG Board 1.5
312309
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   
310
323311    Neo-Geo game PCB infos by Johnboy
324312
325313
trunk/src/mame/drivers/neogeo_noslot.c
r244636r244637
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
683682****************************************/
684683
685684ROM_START( alpham2 ) /* MVS AND AES VERSION */
r244636r244637
735734
736735/****************************************
737736 ID-0008
738 Sun Shine (prototype) 1990 SNK / Alpha
737 Sunshine (prototype) 1990 SNK
739738****************************************/
740739
741740/****************************************
r244636r244637
771770   ROM_LOAD16_BYTE( "009-c6.c6", 0x200001, 0x80000, CRC(2eca8b19) SHA1(16764ef10e404325ba0a1a2ad3a4c0af287be21f) ) /* Plane 2,3 */ /* TC534200 */
772771ROM_END
773772
774ROM_START( ncombath ) /* MVS AND AES VERSION */
773ROM_START( ncombath ) /* AES VERSION */
775774   ROM_REGION( 0x100000, "maincpu", 0 )
776775   ROM_LOAD16_WORD_SWAP( "009-pg1.p1", 0x000000, 0x080000, CRC(8e9f0add) SHA1(d0b908a86a58f2537eea73a431038f1cd74a5a2f) ) /* TC534200 */
777776
r244636r244637
801800 . NGM-010
802801 NEO-MVS PROG-EP / NEO-MVS CHA-32
803802 . NGH-010
804 NEO-AEG PROG-B / NEO-AEG CHA-32
805803****************************************/
806804
807805ROM_START( cyberlip )
r244636r244637
912910 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
913911 . NGH-016
914912 NEO-AEG PROG42G / NEO-AEG CHA42G
915 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
916913****************************************/
917914
918915ROM_START( kotm ) /* MVS VERSION */
r244636r244637
965962 NEO-MVS PROG42G / NEO-MVS CHA42G
966963 . NGH-017
967964 NEO-AEG PROG42G / NEO-AEG CHA42G
968 NEO-AEG  PRO42G-1 / NEO-AEG CHA42G-1
969965****************************************/
970966
971967ROM_START( sengoku ) /* MVS AND AES VERSION */
r244636r244637
12371233 ID-0023
12381234 . NGM-023
12391235 NEO-MVS PROG42G / NEO-MVS CHA42G
1240 NEO-MVS PROGTOP / NEO-MVS CHA-256
1241 Boards used for the Korean release
12421236 . NGH-023
12431237 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
12441238****************************************/
r244636r244637
13741368
13751369/****************************************
13761370 ID-0028
1377 Dunk Star (prototype) 1991 Sammy
1371 Dunk Star (prototype) Sammy
13781372****************************************/
13791373
13801374/****************************************
r244636r244637
16241618 ID-0036
16251619 . MOM-002
16261620 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
1627 NEO-MVS PROG42G-COM / NEO-MVS CHA42G-1
16281621 . MOH-002
16291622 NEO-AEG PROG42G / NEO-AEG CHA42G
16301623****************************************/
r244636r244637
17821775 . NGM-040
17831776 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
17841777 . NGH-040
1785 NEO-AEG PROG16 / NEO-AEG CHA42G-1
17861778****************************************/
17871779
17881780ROM_START( sengoku2 )
r244636r244637
18131805 . NGM-041
18141806 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
18151807 . NGH-041
1816 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
18171808****************************************/
18181809
18191810ROM_START( bstars2 )
r244636r244637
18711862 ID-0043
18721863 . NGM-043
18731864 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
1874 NEO-MVS PROG-G2 / NEO-MVS CHA 42G-2
18751865 . NGH-043
18761866 NEO-AEG PROG16 / NEO-AEG CHA42G-1
18771867****************************************/
r244636r244637
19061896 ID-0044
19071897 . NGM-044
19081898 NEO-MVS PROG16 / NEO-MVS CHA42G-1
1909 NEO-MVS PROG4096 / NEO-MVS CHA42G-1
19101899 . NGH-044
19111900 NEO-AEG PROG16 / NEO-AEG CHA42G-1
19121901****************************************/
r244636r244637
19141903ROM_START( aof ) /* MVS AND AES VERSION */
19151904   ROM_REGION( 0x100000, "maincpu", 0 )
19161905   ROM_LOAD16_WORD_SWAP( "044-p1.p1", 0x000000, 0x080000, CRC(ca9f7a6d) SHA1(4d28ef86696f7e832510a66d3e8eb6c93b5b91a1) ) /* TC534200 */
1917   /* also found sets with ep1 or p1 on eprom. */
1918   
1906
19191907   NEO_SFIX_128K( "044-s1.s1", CRC(89903f39) SHA1(a04a0c244a5d5c7a595fcf649107969635a6a8b6) ) /* TC531000 */
19201908
19211909   NEO_BIOS_AUDIO_128K( "044-m1.m1", CRC(0987e4bb) SHA1(8fae4b7fac09d46d4727928e609ed9d3711dbded) ) /* TC531001 */
r244636r244637
19491937   ROM_REGION( 0x200000, "maincpu", 0 )
19501938   ROM_LOAD16_WORD_SWAP( "045-p1.p1",   0x000000, 0x100000, CRC(dfe51bf0) SHA1(2243af3770a516ae698b69bcd9daf53632d9128d) ) /* TC538200 */
19511939   ROM_LOAD16_WORD_SWAP( "045-pg2.sp2", 0x100000, 0x100000, CRC(46745b94) SHA1(d9e959fd1f88c9402915c1d0dcdb4a9e3d49cdcb) ) /* TC538200 */
1952   /* also found set with ep1 / ep2 on eprom and sp2 on maskrom; same rom data as samshoh is used. */
1953   
1940
19541941   NEO_SFIX_128K( "045-s1.s1", CRC(9142a4d3) SHA1(54088e99fcfd75fd0f94852890a56350066a05a3) ) /* TC531000 */
19551942
19561943   NEO_BIOS_AUDIO_128K( "045-m1.m1", CRC(95170640) SHA1(125c502db0693e8d11cef619b090081c14a9a300) ) /* TC531001 */
r244636r244637
20642051 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-1
20652052 . NGH-047
20662053 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B
2067 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2
20682054****************************************/
20692055
20702056ROM_START( fatfury2 ) /* MVS AND AES VERSION */
r244636r244637
21512137 . ALM-004
21522138 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
21532139 . ALH-004
2154 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
21552140****************************************/
21562141
21572142ROM_START( ncommand )
r244636r244637
21792164 ID-0051
21802165 . AIM-051
21812166 NEO-MVS PROG-G2 / NEO-MVS CHA42G-1
2182 NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2
21832167 . AIH-051
21842168****************************************/
21852169
r244636r244637
22102194 . NGM-052
22112195 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA 42G-2
22122196 . NGH-052
2213 NEO-AEG PROG-G2 (SNK-9201) / NEO-AEG CHA42G-2
22142197****************************************/
22152198
22162199ROM_START( ssideki )
r244636r244637
22392222 NEO-MVS PROG16 / NEO-MVS CHA42G-1
22402223 . ALH-005
22412224 NEO-AEG PROG16 / NEO-AEG CHA42G-1
2242 NEO-AEG PROG-G2 / NEO-AEG CHA42G-2C
22432225****************************************/
22442226
22452227ROM_START( wh1 ) /* MVS VERSION */
r244636r244637
22712253   ROM_REGION( 0x100000, "maincpu", 0 )
22722254   ROM_LOAD16_WORD_SWAP( "053-p1.p1", 0x000000, 0x080000, CRC(95b574cb) SHA1(b7b7af6a04c3d902e7f8852897741ecaf0b1062c) ) /* TC534200 */
22732255   ROM_LOAD16_WORD_SWAP( "053-p2.p2", 0x080000, 0x080000, CRC(f198ed45) SHA1(24ccc091e97f63796562bb5b30df51f39bd504ef) ) /* TC534200 */
2274     
2256
22752257   NEO_SFIX_128K( "053-s1.s1", CRC(8c2c2d6b) SHA1(87fa79611c6f8886dcc8766814829c669c65b40f) ) /* TC531000 */
22762258
22772259   NEO_BIOS_AUDIO_128K( "053-m1.m1", CRC(1bd9d04b) SHA1(65cd7b002123ed1a3111e3d942608d0082799ff3) ) /* TC531001 */
r244636r244637
23252307 ID-0055
23262308 . NGM-055
23272309 NEO-MVS PROGTOP / NEO-MVS CHA256
2328 NEO-MVS PROGTOP / NEO-MVS CHA256B
23292310 . NGH-055
23302311 NEO-AEG PROGRK / NEO-AEG CHA256
23312312****************************************/
r244636r244637
24562437/****************************************
24572438 ID-0058
24582439 . NGM-058
2459 NEO-MVS PROGGSC / NEO-MVS CHA42G-3B
2460 NEO-MVS PROGGSC / NEO-MVS CHA 42G-3
2440 NEO-MVS PROGGSC / NEO-MVS CHA 42G-3B
24612441 . NGH-058
24622442 NEO-AEG PROGGS / NEO-AEG CHA42G-4
24632443****************************************/
r244636r244637
25192499 ID-0059
25202500 . NGM-059
25212501 NEO-MVS PROGTOP / NEO-MVS CHA256
2522 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
25232502 . NGH-059
25242503****************************************/
25252504
r244636r244637
26052584 ID-0061
26062585 . NGM-061
26072586 NEO-MVS PROGGSC / NEO-MVS CHA256
2608 NEO-MVS PROGTOP / NEO-MVS CHA256
2609 NEO-MVS PROG 4096 B / NEO-MVS CHA256
26102587 . NGH-061
26112588 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
26122589****************************************/
r244636r244637
26142591ROM_START( ssideki2 ) /* MVS AND AES VERSION */
26152592   ROM_REGION( 0x100000, "maincpu", 0 )
26162593   ROM_LOAD16_WORD_SWAP( "061-p1.p1", 0x000000, 0x100000, CRC(5969e0dc) SHA1(78abea880c125ec5a85bef6404478512a34b5513) ) /* mask rom TC538200 */
2617   /* also found MVS sets with ep1 / ep2 on eprom; correct chip label unknown. */
2618   
2594
26192595   NEO_SFIX_128K( "061-s1.s1", CRC(226d1b68) SHA1(de010f6fda3ddadb181fe37daa6105f22e78b970) ) /* mask rom TC531000 */
26202596
26212597   NEO_BIOS_AUDIO_128K( "061-m1.m1", CRC(156f6951) SHA1(49686f615f109a02b4f23931f1c84fee13872ffd) ) /* mask rom TC531001 */
r244636r244637
26782654   ROM_REGION( 0x200000, "maincpu", 0 )
26792655   ROM_LOAD16_WORD_SWAP( "063-p1.p1", 0x100000, 0x100000, CRC(22368892) SHA1(0997f8284aa0f57a333be8a0fdea777d0d01afd6) ) /* TC5316200 */
26802656   ROM_CONTINUE( 0x000000, 0x100000 )
2681   /* also found MVS sets with ep1 / ep2 on eprom and p1 / sp2 on maskrom; correct chip label unknown */
2682   
2657
26832658   NEO_SFIX_128K( "063-s1.s1", CRC(64a5cd66) SHA1(12cdfb27bf9ccd5a8df6ddd4628ef7cf2c6d4964) ) /* TC531000 */
26842659
26852660   NEO_BIOS_AUDIO_128K( "063-m1.m1", CRC(56675098) SHA1(90429fc40d056d480d0e2bbefbc691d9fa260fc4) ) /* TC531001 */
r244636r244637
27412716 NEO-MVS PROGGSC / NEO-MVS CHA256
27422717 . ADH-007
27432718 NEO-AEG PROGRK / NEO-AEG CHA256
2744 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
27452719****************************************/
27462720
27472721ROM_START( wh2j ) /* MVS AND AES VERSION */
r244636r244637
27602734   NO_DELTAT_REGION
27612735
27622736   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. */
27642737   ROM_LOAD16_BYTE( "064-c1.c1", 0x000000, 0x200000, CRC(2ec87cea) SHA1(e713ec7839a7665edee6ee3f82a6e530b3b4bd7c) ) /* Plane 0,1 */ /* TC5316200 */
27652738   ROM_LOAD16_BYTE( "064-c2.c2", 0x000001, 0x200000, CRC(526b81ab) SHA1(b5f0a2f04489539ed6b9d0810b12787356c64b23) ) /* Plane 2,3 */ /* TC5316200 */
27662739   ROM_LOAD16_BYTE( "064-c3.c3", 0x400000, 0x200000, CRC(436d1b31) SHA1(059776d77b91377ed0bcfc278802d659c917fc0f) ) /* Plane 0,1 */ /* TC5316200 */
r244636r244637
27762749 . DEM-002
27772750 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1
27782751 . DEH-002
2779 NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1
27802752****************************************/
27812753
27822754ROM_START( wjammers )
r244636r244637
28352807 ID-0067
28362808 . ??M-067
28372809 NEO-MVS PROG16 / NEO-MVS CHA256B
2838 NEO-MVS PROG16 / NEO-MVS CHA256
28392810****************************************/
28402811
28412812ROM_START( gururin ) /* MVS ONLY RELEASE */
r244636r244637
29542925/****************************************
29552926 ID-0071
29562927 Bang Bang Busters (prototype) 1994 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)
2928 Released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO)
29592929
29602930 Reported UNIVERSE BIOS CRC32:
29612931  ROM     EC861CAF
r244636r244637
29652935  BANK 3  NOT USED
29662936 ****************************************/
29672937
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
29852938/****************************************
29862939 ID-0072
29872940 Last Odyssey Pinball Fantasia (prototype) 1995 Monolith
r244636r244637
30523005 . NGM-075
30533006 NEO-MVS PROGGSC / NEO-MVS CHA256
30543007 . NGH-075
3055 NEO-AEG PROGRK / NEO-AEG CHA256
30563008****************************************/
30573009
30583010ROM_START( sonicwi2 )
r244636r244637
31073059
31083060/****************************************
31093061 ID-0077
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.
3062 The Warlocks of the Fates (prototype) 1995 Astec
31123063****************************************/
31133064
31143065/****************************************
r244636r244637
31793130 ID-0080
31803131 . SAM-080
31813132 NEO-MVS PROGGSC / NEO-MVS CHA256
3182 NEO-MVS PROGTOP / NEO-MVS CHA256
3183 Boards used for the Korean release
31843133 . SAH-080
31853134 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B
31863135****************************************/
r244636r244637
32363185 . NGM-081
32373186 NEO-MVS PROGTOP / NEO-MVS CHA42G-3B
32383187 NEO-MVS PROGTOP / NEO-MVS CHA256
3239 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
3240 NEO-MVS PROGBK1 / NEO-MVS CHA256B
32413188 . NGH-081
3242 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B
32433189****************************************/
32443190
32453191ROM_START( ssideki3 )
r244636r244637
32733219 NEO-MVS PROGTOP / NEO-MVS CHA256
32743220 NEO-MVS PROGTOP / NEO-MVS CHA 42G-3
32753221 NEO-MVS PROGBK1 / NEO-MVS CHA256
3276 NEO-MVS PROGTOP / NEO-MVS CHA256B
3277 NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3
32783222 . NGH-082
32793223****************************************/
32803224
r244636r244637
34733417 ID-0087
34743418 . NGM-087
34753419 NEO-MVS PROGSS3 / NEO-MVS CHA256
3476 NEO-MVS PROGBK1 / NEO-MVS CHA256
34773420 . NGH-087
34783421 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
34793422****************************************/
r244636r244637
35653508 . NGM-088
35663509 NEO-MVS PROGBK1 / NEO-MVS CHA42-3B
35673510 . NGH-088
3568 NEO-AEG PROGRKB / NEO-AEG CHA256[B]
35693511****************************************/
35703512
35713513ROM_START( stakwin )
r244636r244637
35943536 . NGM-089
35953537 NEO-MVS PROGBK1 / NEO-MVS CHA256
35963538 . NGH-089
3597 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
35983539****************************************/
35993540
36003541ROM_START( pulstar )
r244636r244637
36273568 ID-0090
36283569 . ADM-009
36293570 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
36333571 . ADH-009
36343572****************************************/
36353573
r244636r244637
36643602
36653603/****************************************
36663604 ID-0091
3667 ADK World / ADK Special 1995 ADK (CD only)
3605 unknown
36683606****************************************/
36693607
36703608/****************************************
36713609 ID-0092
36723610 . NGM-092
36733611 NEO-MVS PROGBK1 / NEO-MVS CHA256
3674 NEO-MVS PROGTOP / NEO-MVS CHA256
36753612 . NGH-092
36763613****************************************/
36773614
r244636r244637
38933830 . NGM-097
38943831 NEO-MVS PROGBK1 / NEO-MVS CHA256
38953832 . NGH-097
3896 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
38973833****************************************/
38983834
38993835ROM_START( sonicwi3 )
r244636r244637
39503886 ID-0200
39513887 . NGM-200
39523888 NEO-MVS PROGBK1 / NEO-MVS CHA256B
3953 NEO-MVS PROGBK1 / NEO-MVS CHA256
39543889 . NGH-200
39553890****************************************/
39563891
r244636r244637
39803915 ID-0201
39813916 . NGM-201
39823917 NEO-MVS PROGBK1 / NEO-MVS CHA256
3983 NEO-MVS PROGBK1 / NEO-MVS CHA256B
39843918 . NGH-201
39853919****************************************/
39863920
r244636r244637
40573991
40583992/****************************************
40593993 ID-0204
4060 QP (prototype) 1997 Success
3994 QP (prototype)
40613995****************************************/
40623996
40633997/****************************************
r244636r244637
40974031 ID-0207
40984032 . ??M-207
40994033 NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B
4100 NEO-MVS PROG 4096 / NEO-MVS CHA42G-3B
41014034****************************************/
41024035
41034036ROM_START( neomrdo ) /* MVS ONLY RELEASE */
r244636r244637
42424175 ID-0214
42434176 . NGM-214
42444177 NEO-MVS PROGBK1 / NEO-MVS CHA256
4245 NEO-MVS PROGSS3 / NEO-MVS CHA256
42464178 . NGH-214
4247 NEO-AEG PROGBK1Y / NEO-GEO AEG CHA256RY
42484179****************************************/
42494180
42504181ROM_START( kof96 ) /* MVS VERSION */
42514182   ROM_REGION( 0x300000, "maincpu", 0 )
42524183   ROM_LOAD16_WORD_SWAP( "214-p1.p1",  0x000000, 0x100000, CRC(52755d74) SHA1(4232d627f1d2e6ea9fc8cf01571d77d4d5b8a1bb) ) /* TC538200 */
42534184   ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */
4254   /* also found sets with ep1 / ep2 / ep3 / ep4 on eprom and 214-P5 on TC5316200; correct chip labels for eproms is unknown */
4255   
4185
42564186   NEO_SFIX_128K( "214-s1.s1", CRC(1254cbdb) SHA1(fce5cf42588298711a3633e9c9c1d4dcb723ac76) ) /* TC531000 */
42574187
42584188   NEO_BIOS_AUDIO_128K( "214-m1.m1", CRC(dabc427c) SHA1(b76722ed142ee7addceb4757424870dbd003e8b3) ) /* TC531001 */
r244636r244637
42754205   ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) ) /* Plane 2,3 */ /* TC5332205 */
42764206ROM_END
42774207
4278ROM_START( kof96h ) /* AES VERSION */
4208ROM_START( kof96h )
42794209   ROM_REGION( 0x300000, "maincpu", 0 )
42804210   ROM_LOAD16_WORD_SWAP( "214-pg1.p1", 0x000000, 0x100000, CRC(bd3757c9) SHA1(35392a044117e46c088ff0fdd07d69a3faa4f96e) )
42814211   ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */
r244636r244637
43074237 . NGM-215
43084238 NEO-MVS PROGBK1 / NEO-MVS CHA256
43094239 . NGH-215
4310 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
43114240****************************************/
43124241
43134242ROM_START( ssideki4 )
r244636r244637
43394268 . ??M-216
43404269 NEO-MVS PROGTOP / NEO-MVS CHA256
43414270 . ??H-216
4342 NEO-AEG PROGTOP2Y / NEO-AEG CHA256BY
43434271****************************************/
43444272
43454273ROM_START( kizuna )
r244636r244637
44184346 . ADM-012
44194347 NEO-MVS PROGBK1 / NEO-MVS CHA256
44204348 . ADH-012
4421 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
44224349****************************************/
44234350
44244351ROM_START( ninjamas )
r244636r244637
45584485 ID-0221
45594486 . NGM-221
45604487 NEO-MVS PROGBK1 / NEO-MVS CHA256B
4561 NEO-MVS PROGBK1 / NEO-MVS CHA256
45624488 . NGH-221
45634489****************************************/
45644490
r244636r244637
46474573 . NGM-223
46484574 NEO-MVS PROGBK1 / NEO-MVS CHA256B
46494575 . NGH-223
4650 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
46514576****************************************/
46524577
46534578ROM_START( rbffspec )
r244636r244637
46804605ROM_START( rbffspeck ) /* KOREAN VERSION */
46814606   ROM_REGION( 0x500000, "maincpu", 0 )
46824607   ROM_LOAD16_WORD_SWAP( "223-p1k.p1", 0x000000, 0x100000, CRC(b78c8391) SHA1(936b356ac135331b10a37bc10882ec2e4f6b400b) )
4683   /* Chip label is correct. They used Cart ID 0124 as 0123 was already used by quizdaisk */
4608   /* Chip label is correct. They used Cart ID 0124 as 0123 was allready used by quizdaisk */
46844609   ROM_LOAD16_WORD_SWAP( "223-p2.sp2", 0x100000, 0x400000, CRC(addd8f08) SHA1(abaf5b86c8ec915c07ef2d83fce9ad03acaa4817) ) /* TC5332205 */
46854610
46864611   NEO_SFIX_128K( "223-s1.s1", CRC(7ecd6e8c) SHA1(465455afc4d83cbb118142be4671b2539ffafd79) ) /* TC531000 */
r244636r244637
47104635 . ADM-013
47114636 NEO-MVS PROGBK1 / NEO-MVS CHA256B
47124637 . ADH-013
4713 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
47144638****************************************/
47154639
47164640ROM_START( twinspri )
r244636r244637
47764700 . NGM-227
47774701 NEO-MVS PROGBK1 / NEO-MVS CHA256
47784702 . NGH-227
4779 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
47804703****************************************/
47814704
47824705ROM_START( stakwin2 )
r244636r244637
48384761 . NGM-2300
48394762 NEO-MVS PROGBK1 / NEO-MVS CHA256B
48404763 . NGH-2300
4841 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
48424764****************************************/
48434765
48444766ROM_START( breakers )
r244636r244637
49774899 . NGM-2330
49784900 NEO-MVS PROGBK1 / NEO-MVS CHA256
49794901 . NGH-2330
4980 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
49814902****************************************/
49824903
49834904ROM_START( magdrop3 )
r244636r244637
50134934   ROM_REGION( 0x500000, "maincpu", 0 )
50144935   ROM_LOAD16_WORD_SWAP( "234-p1.p1",  0x000000, 0x100000, CRC(e123a5a3) SHA1(a3ddabc00feeb54272b145246612ad4632b0e413) ) /* TC538200 */
50154936   ROM_LOAD16_WORD_SWAP( "234-p2.sp2", 0x100000, 0x400000, CRC(0fdc289e) SHA1(1ff31c0b0f4f9ddbedaf4bcf927faaae81892ec7) ) /* TC5332205 */
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   
4937
50194938   NEO_SFIX_128K( "234-s1.s1", CRC(95561412) SHA1(995de272f572fd08d909d3d0af4251b9957b3640) ) /* TC531000 */
50204939
50214940   NEO_BIOS_AUDIO_128K( "234-m1.m1", CRC(087628ea) SHA1(48dcf739bb16699af4ab8ed632b7dcb25e470e06) ) /* TC531001 */
r244636r244637
52325151 . NGM-2390
52335152 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
52345153 . NGH-2390
5235 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
52365154****************************************/
52375155
52385156ROM_START( blazstar )
r244636r244637
53515269 ID-0241
53525270 . NGM-2410
53535271 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
5354 NEO-MVS PROGBK1 / NEO-MVS CHA256
53555272 . NGH-2410
53565273 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
53575274****************************************/
r244636r244637
53725289   NO_DELTAT_REGION
53735290
53745291   ROM_REGION( 0x2000000, "sprites", 0 )
5375   /* Different layout with 8xC (16 mbit) also exists; naming sheme 241-Cx */
53765292   ROM_LOAD16_BYTE( "241-c1.c1", 0x0000000, 0x800000, CRC(394b5e0d) SHA1(4549926f5054ee6aa7689cf920be0327e3908a50) ) /* Plane 0,1 */ /* TC5364205 */
53775293   ROM_LOAD16_BYTE( "241-c2.c2", 0x0000001, 0x800000, CRC(e5806221) SHA1(1e5475cfab129c77acc610f09369ca42ba5aafa5) ) /* Plane 2,3 */ /* TC5364205 */
53785294   ROM_LOAD16_BYTE( "241-c3.c3", 0x1000000, 0x800000, CRC(9f6bfa6f) SHA1(a4319b48004e723f81a980887678e3e296049a53) ) /* Plane 0,1 */ /* TC5364205 */
r244636r244637
53825298/****************************************
53835299 ID-0242
53845300 . NGM-2420
5385 NEO-MVS PROGSF1 (1998.6.17) (protected board) / NEO-MVS CHA512Y
5386 NEO-MVS PROGSF1E (1998.6.18) (protected board) / NEO-MVS CHA512Y
5301 NEO-MVS PROGSF1 (protected board) / NEO-MVS CHA512Y
5302 NEO-MVS PROGSF1E (protected board) / NEO-MVS CHA512Y
53875303 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
53885304 . NGH-2420
53895305 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
r244636r244637
55065422   ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) ) /* Plane 2,3 */ /* TC5364205 */
55075423ROM_END
55085424
5509ROM_START( kof98h ) /* MVS AND AES VERSION */
5425ROM_START( kof98h ) /* AES VERSION */
55105426   ROM_REGION( 0x500000, "maincpu", 0 )
55115427   ROM_LOAD16_WORD_SWAP( "242-pn1.p1", 0x000000, 0x100000, CRC(61ac868a) SHA1(26577264aa72d6af272952a876fcd3775f53e3fa) ) /* TC538200 */
55125428   ROM_LOAD16_WORD_SWAP( "242-p2.sp2", 0x100000, 0x400000, CRC(980aba4c) SHA1(5e735929ec6c3ca5b2efae3c7de47bcbb8ade2c5) ) /* TC5332205 */
r244636r244637
57735689 ID-0251
57745690 . NGM-2510
57755691 SMA protected version found on:
5776 NEO-MVS PROGLBA (NEO-SMA) (1999.4.12) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
5692 NEO-MVS PROGLBA (NEO-SMA) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
57775693 Non SMA protected version found on:
57785694 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
57795695 . NGH-2510
5780 NEO-AEG PROGLBA (1999.7.6) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
5696 NEO-AEG PROGLBA / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
57815697****************************************/
57825698
57835699ROM_START( kof99 ) /* Original Version - Encrypted Code & GFX */ /* MVS VERSION */
r244636r244637
59925908/****************************************
59935909 ID-0253
59945910 . NGM-2530
5995 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
5911 NEO-MVS PROGLBA (NEO-SMA) (LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
59965912 . NGH-2530
5997 NEO-AEG PROGLBA (1999.7.6) (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
5913 NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
59985914****************************************/
59995915
60005916ROM_START( garou ) /* Original Version - Encrypted GFX */ /* MVS VERSION - later revision */
r244636r244637
61806096 ID-0256
61816097 . NGM-2560
61826098 SMA protected version found on:
6183 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
6099 NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
61846100 Non SMA protected version found on:
61856101 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
61866102 . NGH-2560
6187 NEO-AEG PROGLBA (1999.7.6) (NEO-SMA)(LBA-SUB) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
61886103****************************************/
61896104
61906105ROM_START( mslug3 ) /* Original Version - Encrypted Code & GFX */ /* revision 2000.4.1 */ /* MVS VERSION */
r244636r244637
61936108   /* The SMA for this release has a green colour marking; the older revision has a white colour marking */
61946109   ROM_LOAD16_WORD_SWAP( "256-pg1.p1", 0x100000, 0x400000, CRC(b07edfd5) SHA1(dcbd9e500bfae98d754e55cdbbbbf9401013f8ee) ) /* TC5332202 */
61956110   ROM_LOAD16_WORD_SWAP( "256-pg2.p2", 0x500000, 0x400000, CRC(6097c26b) SHA1(248ec29d21216f29dc6f5f3f0e1ad1601b3501b6) ) /* TC5332202 */
6196     
6111
61976112   ROM_Y_ZOOM
61986113
61996114   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244636r244637
62286143   ROM_REGION( 0x500000, "maincpu", 0 )
62296144   ROM_LOAD16_WORD_SWAP( "256-ph1.p1",  0x000000, 0x100000, CRC(9c42ca85) SHA1(7a8f77a89867b889295ae9b9dfd4ba28f02d234d) )
62306145   ROM_LOAD16_WORD_SWAP( "256-ph2.sp2", 0x100000, 0x400000, CRC(1f3d8ce8) SHA1(08b05a8abfb86ec09a5e758d6273acf1489961f9) )
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   
6146
62346147   ROM_Y_ZOOM
62356148
62366149   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244636r244637
62656178 ID-0257
62666179 . NGM-2570
62676180 SMA protected version found on:
6268 NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6181 NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
62696182 Non SMA protected version found on:
62706183 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
62716184 . NGH-2570
r244636r244637
64176330 . NGM-2610
64186331 NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
64196332 . NGH-2610
6420 NEO-AEG PROGBK1F / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
64216333****************************************/
64226334
64236335ROM_START( sengoku3 ) /* Original Version - Encrypted GFX */
r244636r244637
65376449 . NGM-2630
65386450 NEO-MVS PROGBK2 (NEO-PCM2 SNK)/ NEO-MVS CHAFIO (NEO-CMC 7050)
65396451 . NGH-2630
6540 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6452 NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
65416453****************************************/
65426454
65436455ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */
r244636r244637
66126524/****************************************
66136525 ID-0264
66146526 . NGM-264?
6615 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6527 NEO-MVS PROGBK2 (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
66166528 . NGH-2641
6617 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6529 NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
66186530  - Distribution by BrezzaSoft
66196531****************************************/
66206532
r244636r244637
66556567/****************************************
66566568 ID-0265
66576569 . NGM-2650
6658 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6570 NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
66596571 . NGH-2650
66606572 NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
66616573****************************************/
r244636r244637
66986610/****************************************
66996611 ID-0266
67006612 . NGM-2660
6701 NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
6613 NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
67026614 . NGH-2660
6703 NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
6615 NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050)
67046616****************************************/
67056617
67066618ROM_START( matrim ) /* Encrypted Set */ /* MVS AND AES VERSION */
r244636r244637
67476659ROM_START( pnyaa ) /* Encrypted Set */ /* MVS ONLY RELEASE */
67486660   ROM_REGION( 0x100000, "maincpu", 0 )
67496661   ROM_LOAD16_WORD_SWAP( "267-p1.p1", 0x000000, 0x100000, CRC(112fe2c0) SHA1(01420e051f0bdbd4f68ce306a3738161b96f8ba8) ) /* mask rom TC538200 */
6750   /* also found set with p1 and m1 on eprom with sticker; chip labels is PN 2.02 and M1 */
6751   
6662
67526663   ROM_Y_ZOOM
67536664
67546665   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244636r244637
67756686/****************************************
67766687 ID-0268
67776688 . NGM-2680
6778 NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6689 NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
67796690 . NGH-2680
6780 NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
67816691****************************************/
67826692
67836693ROM_START( mslug5 ) /* Encrypted Set */ /* MVS VERSION */
r244636r244637
68196729   ROM_REGION( 0x800000, "maincpu", 0 )
68206730   ROM_LOAD32_WORD_SWAP( "268-p1c.p1", 0x000000, 0x400000, CRC(3636690a) SHA1(e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3) )
68216731   ROM_LOAD32_WORD_SWAP( "268-p2c.p2", 0x000002, 0x400000, CRC(8dfc47a2) SHA1(27d618cfbd0107a4d2a836797e967b39d2eb4851) )
6822   /* also found AES set with p1 / p2 on maskrom; chip labels is 268-P1CR2 and 268-P2CR2 */
6823   
6732
68246733   ROM_Y_ZOOM
68256734
68266735   /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */
r244636r244637
68956804/****************************************
68966805 ID-0270
68976806 . NGM-2700
6898 NEO-MVS PROGBK2R (2003.8.26) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6807 NEO-MVS PROGBK2R (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
68996808 . NGH-2700
6900 NEO-AEG PROGBK2S (2003.10.16) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
6809 NEO-AEG PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
69016810****************************************/
69026811
69036812ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */
r244636r244637
69736882/****************************************
69746883 ID-0271
69756884 . NGM-2710
6976 NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6885 NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
69776886 . NGH-2710
6978 NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
6887 NEO-AEG PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
69796888****************************************/
69806889
69816890ROM_START( kof2003 ) /* Encrypted Code + Sound + GFX Roms */ /* MVS VERSION */
r244636r244637
70546963/****************************************
70556964 ID-0272
70566965 . NGM-2720
7057 NEO-MVS PROGBK2S (2003.10.18) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
6966 NEO-MVS PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050)
70586967 . NGH-2720
70596968****************************************/
70606969
r244636r244637
71887097/****************************************
71897098 B-J-02
71907099 . ???-????
7191 MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050)
7100 MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14)
71927101****************************************/
71937102
71947103ROM_START( jockeygp ) /* MVS ONLY RELEASE */
r244636r244637
98719780GAME( 1999, ctomaday,   neogeo,   neogeo_noslot,   neogeo, neogeo_state,   neogeo,   ROT0, "Visco", "Captain Tomaday", GAME_SUPPORTS_SAVE )
98729781GAME( 1999, ganryu,     neogeo,   neogeo_noslot,   neogeo, neogeo_noslot_state,   ganryu,   ROT0, "Visco", "Ganryu / Musashi Ganryuki" , GAME_SUPPORTS_SAVE ) /* Encrypted GFX */
98739782GAME( 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 )
98759783
98769784/* Mega Enterprise */
98779785GAME( 2002, mslug4,     neogeo,   neogeo_noslot,   neogeo, neogeo_noslot_state,   mslug4,   ROT0, "Mega / Playmore", "Metal Slug 4 (NGM-2630)", GAME_SUPPORTS_SAVE )
r244636r244637
99059813// Fast Striker (c)2010 - MVS/AES
99069814// Fast Striker 1.5 (c)2010 - MVS/AES
99079815// GunLord (c)2012 - MVS/AES
9908// Neo XYX (c)2013 - MVS/AES
9909// Razion (c)2014 - MVS/AES?
99109816
99119817/* N.C.I - LE CORTEX */
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
9818// Bang Bang Busters (c)2010 - MVS?/AES
9819// Treasure of the Caribbean (c)2011 - MVS?/AES
trunk/src/mame/drivers/opwolf.c
r244636r244637
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( 0x10000, "audiocpu", 0 )      /* sound cpu */
829   ROM_LOAD( "b20-07.10",  0x00000, 0x10000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) )
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 */
830831
831832   ROM_REGION( 0x80000, "gfx1", 0 )
832833   ROM_LOAD( "b20-13.13",  0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) )    /* SCR tiles (8 x 8) */
trunk/src/mame/mame.lst
r244636r244637
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)
77087707nitd            // 0260 (c) 2000 Eleven / Gavaking
77097708nitdbl          // bootleg
77107709sengoku3        // 0261 (c) 2001 Noise Factory / SNK
trunk/src/mess/drivers/cnsector.c
r0r244637
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
r0r244637
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
r244636r244637
1414#include "sound/speaker.h"
1515
1616#include "amaztron.lh"
17#include "bankshot.lh"
18#include "cnsector.lh"
1917#include "ebball.lh"
20#include "elecdet.lh"
2118#include "comp4.lh"
22#include "mathmagi.lh"
23#include "merlin.lh"
2419#include "simon.lh"
25#include "splitsec.lh"
26#include "starwbc.lh"
27#include "stopthie.lh"
28#include "tandy12.lh"
2920#include "tc4.lh"
3021
3122
r244636r244637
3728      m_maincpu(*this, "maincpu"),
3829      m_inp_matrix(*this, "IN"),
3930      m_speaker(*this, "speaker"),
40      m_display_wait(33),
4131      m_display_maxy(1),
42      m_display_maxx(0)
32      m_display_maxx(0),
33      m_display_wait(50)
4334   { }
4435
45   // devices
4636   required_device<cpu_device> m_maincpu;
4737   optional_ioport_array<7> m_inp_matrix; // max 7
4838   optional_device<speaker_sound_device> m_speaker;
4939   
50   // misc common
5140   UINT16 m_r;
5241   UINT16 m_o;
5342   UINT16 m_inp_mux;
54   bool m_power_on;
5543
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;
6544   int m_display_maxy;
6645   int m_display_maxx;
46   int m_display_wait;
6747   
6848   UINT32 m_display_state[0x20];
6949   UINT32 m_display_cache[0x20];
r244636r244637
7151   UINT16 m_7seg_mask[0x20];
7252
7353   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
54   bool index_is_7segled(int index);
7455   void display_update();
7556   
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);
57   UINT8 read_inputs(int columns);
8158
59   // game-specific handlers
8260   void amaztron_display();
8361   DECLARE_READ8_MEMBER(amaztron_read_k);
84   DECLARE_WRITE16_MEMBER(amaztron_write_r);
8562   DECLARE_WRITE16_MEMBER(amaztron_write_o);
63   DECLARE_WRITE16_MEMBER(amaztron_write_r);
8664
8765   void tc4_display();
8866   DECLARE_READ8_MEMBER(tc4_read_k);
89   DECLARE_WRITE16_MEMBER(tc4_write_r);
9067   DECLARE_WRITE16_MEMBER(tc4_write_o);
68   DECLARE_WRITE16_MEMBER(tc4_write_r);
9169
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
10170   DECLARE_READ8_MEMBER(comp4_read_k);
102   DECLARE_WRITE16_MEMBER(comp4_write_r);
10371   DECLARE_WRITE16_MEMBER(comp4_write_o);
72   DECLARE_WRITE16_MEMBER(comp4_write_r);
10473
10574   DECLARE_READ8_MEMBER(simon_read_k);
106   DECLARE_WRITE16_MEMBER(simon_write_r);
10775   DECLARE_WRITE16_MEMBER(simon_write_o);
76   DECLARE_WRITE16_MEMBER(simon_write_r);
10877
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);
78   virtual void machine_start();
13979};
14080
14181
r244636r244637
14686   memset(m_display_cache, 0, sizeof(m_display_cache));
14787   memset(m_display_decay, 0, sizeof(m_display_decay));
14888   memset(m_7seg_mask, 0, sizeof(m_7seg_mask));
149   
89
15090   m_o = 0;
15191   m_r = 0;
15292   m_inp_mux = 0;
153   m_power_on = false;
15493
15594   // register for savestates
15695   save_item(NAME(m_display_maxy));
r244636r244637
165104   save_item(NAME(m_o));
166105   save_item(NAME(m_r));
167106   save_item(NAME(m_inp_mux));
168   save_item(NAME(m_power_on));
169107}
170108
171109
172void hh_tms1k_state::machine_reset()
173{
174   m_power_on = true;
175}
176
177110/***************************************************************************
178111
179112  Helper Functions
180113
181114***************************************************************************/
182115
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};
195116
196117// The device strobes the outputs very fast, it is unnoticeable to the user.
197118// To prevent flickering here, we need to simulate a decay.
r244636r244637
208129      for (int x = 0; x < m_display_maxx; x++)
209130      {
210131         // turn on powered segments
211         if (m_power_on && m_display_state[y] >> x & 1)
132         if (m_display_state[y] >> x & 1)
212133            m_display_decay[y][x] = m_display_wait;
213134
214135         // determine active state
r244636r244637
256177   return k;
257178}
258179
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}
264180
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}
274181
275182/***************************************************************************
276183
r244636r244637
280187
281188/***************************************************************************
282189
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
462190  Coleco Amaze-A-Tron, by Ralph Baer
463191  * TMS1100 MCU, labeled MP3405(die label too)
464192
r244636r244637
481209      m_display_state[y] = (m_r >> (y + 8) & 1) ? m_o : 0;
482210   }
483211   
484   // R6,R7: lamps (-> lamp20,21)
212   // R6,R7: lamps -> lamp20, lamp21
485213   m_display_state[2] = m_r >> 6 & 3;
486214   
487215   display_update();
r244636r244637
568296   /* basic machine hardware */
569297   MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K?, C=100pf -> ~350kHz
570298   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))
572299   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))
573301
574302   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
303
575304   MCFG_DEFAULT_LAYOUT(layout_amaztron)
576305
577306   /* no video! */
r244636r244637
625354
626355void hh_tms1k_state::tc4_display()
627356{
628   m_display_wait = 50;
629357   m_display_maxy = 10;
630358   m_display_maxx = 9;
631359   
r244636r244637
652380   return k;
653381}
654382
383WRITE16_MEMBER(hh_tms1k_state::tc4_write_o)
384{
385   // O0-O7: leds/7segment
386   m_o = data;
387   tc4_display();
388}
389
655390WRITE16_MEMBER(hh_tms1k_state::tc4_write_r)
656391{
657392   // R10: speaker out
r244636r244637
667402   tc4_display();
668403}
669404
670WRITE16_MEMBER(hh_tms1k_state::tc4_write_o)
671{
672   // O0-O7: leds/7segment
673   m_o = data;
674   tc4_display();
675}
676405
677
678406static INPUT_PORTS_START( tc4 )
679407   PORT_START("IN.0") // R0
680408   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Pass/Shoot Button 3") // right
r244636r244637
725453   /* basic machine hardware */
726454   MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf, but unknown RC curve
727455   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))
729456   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))
730458
731459   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
460
732461   MCFG_DEFAULT_LAYOUT(layout_tc4)
733462
734463   /* no video! */
r244636r244637
740469MACHINE_CONFIG_END
741470
742471
743/***************************************************************************
744472
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
772473/***************************************************************************
773474
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
1021475  Milton Bradley Comp IV
1022476  * TMC0904NL CP0904A (die labeled 4A0970D-04A)
1023477
r244636r244637
1088542   /* basic machine hardware */
1089543   MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq
1090544   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))
1092545   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))
1093547
1094548   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
549
1095550   MCFG_DEFAULT_LAYOUT(layout_comp4)
1096551
1097552   /* no video! */
r244636r244637
1117572
1118573***************************************************************************/
1119574
575
576
577
578
579/***************************************************************************
580
581  I/O
582
583***************************************************************************/
584
1120585READ8_MEMBER(hh_tms1k_state::simon_read_k)
1121586{
1122587   return read_inputs(4);
r244636r244637
1182647   /* basic machine hardware */
1183648   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
1184649   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))
1186650   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))
1187652
1188653   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
654
1189655   MCFG_DEFAULT_LAYOUT(layout_simon)
1190656
1191657   /* no video! */
r244636r244637
1199665
1200666
1201667
1202/***************************************************************************
1203668
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
1303669/***************************************************************************
1304670
1305  Parker Bros Merlin handheld computer game, by Bob Doyle
1306  * TMS1100NLL MP3404A-N2
671  Entex Baseball
672  * TMS1000NLP MP0914 (die labeled MP0914A)
1307673
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
1324674***************************************************************************/
1325675
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")
676// inputs
677static INPUT_PORTS_START( ebball )
1383678INPUT_PORTS_END
1384679
680// machine config
681static MACHINE_CONFIG_START( ebball, hh_tms1k_state )
1385682
1386static const INT16 merlin_speaker_levels[] = { 0, 10922, 21845, 32767 };
1387
1388
1389static MACHINE_CONFIG_START( merlin, hh_tms1k_state )
1390
1391683   /* basic machine hardware */
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))
684   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz
1396685
1397   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
1398   MCFG_DEFAULT_LAYOUT(layout_merlin)
686   MCFG_DEFAULT_LAYOUT(layout_ebball)
1399687
1400688   /* no video! */
1401689
1402690   /* sound hardware */
1403691   MCFG_SPEAKER_STANDARD_MONO("mono")
1404692   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
1405   MCFG_SPEAKER_LEVELS(4, merlin_speaker_levels)
1406693   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1407694MACHINE_CONFIG_END
1408695
1409696
1410/***************************************************************************
1411697
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
1518698/***************************************************************************
1519699
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
1982700  Game driver(s)
1983701
1984702***************************************************************************/
1985703
1986704
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
1998705ROM_START( amaztron )
1999706   ROM_REGION( 0x0800, "maincpu", 0 )
2000707   ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) )
r244636r244637
2030737ROM_END
2031738
2032739
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
2070740ROM_START( comp4 )
2071741   ROM_REGION( 0x0400, "maincpu", 0 )
2072742   ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) )
r244636r244637
2092762   ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) )
2093763ROM_END
2094764
2095ROM_START( cnsector )
2096   ROM_REGION( 0x0400, "maincpu", 0 )
2097   ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
2098765
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
2108766
2109767
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
2200768CONS( 1979, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", GAME_SUPPORTS_SAVE )
2201769CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", GAME_SUPPORTS_SAVE )
2202770
2203771CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Entex", "Baseball (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
2204772
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
2210773CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
2211774CONS( 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
r244636r244637
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
r0r244637
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
r0r244637
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
r0r244637
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
r0r244637
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
r0r244637
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
r0r244637
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
r0r244637
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
r244636r244637
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="lamp60" element="lamp">
118      <bezel name="lamp0" element="lamp">
119119         <bounds x="42" y="62" width="8" height="8" />
120120      </bezel>
121      <bezel name="lamp61" element="lamp">
121      <bezel name="lamp1" element="lamp">
122122         <bounds x="42" y="126" width="8" height="8" />
123123      </bezel>
124      <bezel name="lamp62" element="lamp">
124      <bezel name="lamp2" element="lamp">
125125         <bounds x="74" y="94" width="8" height="8" />
126126      </bezel>
127      <bezel name="lamp63" element="lamp">
127      <bezel name="lamp3" element="lamp">
128128         <bounds x="10" y="94" width="8" height="8" />
129129      </bezel>
130130
trunk/src/mess/layout/tmpacman.lay
r244636r244637
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
r244636r244637
26172617edracula
26182618tc4
26192619ebball
2620tmpacman
trunk/src/mess/mess.mak
r244636r244637
735735   $(MESSOBJ)/homebrew.a \
736736   $(MESSOBJ)/homelab.a \
737737   $(MESSOBJ)/hp.a \
738   $(MESSOBJ)/ideal.a \
738739   $(MESSOBJ)/imp.a \
739740   $(MESSOBJ)/intel.a \
740741   $(MESSOBJ)/interton.a \
741742   $(MESSOBJ)/intv.a \
742743   $(MESSOBJ)/isc.a \
743744   $(MESSOBJ)/kaypro.a \
745   $(MESSOBJ)/kenner.a \
744746   $(MESSOBJ)/koei.a \
745747   $(MESSOBJ)/kyocera.a \
746748   $(MESSOBJ)/luxor.a \
r244636r244637
10021004
10031005$(MESSOBJ)/apf.a:               \
10041006   $(MESS_DRIVERS)/apf.o       \
1007   $(MESS_DRIVERS)/mathmagi.o  \
10051008
10061009$(MESSOBJ)/apollo.a:            \
10071010   $(MESS_DRIVERS)/apollo.o $(MESS_MACHINE)/apollo.o $(MESS_MACHINE)/apollo_dbg.o $(MESS_MACHINE)/apollo_kbd.o $(MESS_VIDEO)/apollo.o \
r244636r244637
13301333   $(MESS_DRIVERS)/sdk85.o     \
13311334   $(MESS_DRIVERS)/sdk86.o     \
13321335
1336$(MESSOBJ)/ideal.a:             \
1337   $(MESS_DRIVERS)/elecdet.o   \
1338
13331339$(MESSOBJ)/imp.a:               \
13341340   $(MESS_DRIVERS)/tim011.o    \
13351341   $(MESS_DRIVERS)/tim100.o    \
r244636r244637
13461352$(MESSOBJ)/kaypro.a:            \
13471353   $(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \
13481354
1355$(MESSOBJ)/kenner.a:            \
1356   $(MESS_DRIVERS)/starwbc.o   \
1357
13491358$(MESSOBJ)/koei.a:              \
13501359   $(MESS_DRIVERS)/pasogo.o    \
13511360
r244636r244637
14351444   $(MESS_DRIVERS)/pc100.o     \
14361445   $(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 \
14371446   $(MESS_DRIVERS)/tk80bs.o    \
1438   $(MESS_DRIVERS)/hh_ucom4.o  \
14391447
14401448$(MESSOBJ)/netronic.a:          \
14411449   $(MESS_DRIVERS)/elf.o       \
r244636r244637
14881496   $(MESS_DRIVERS)/palmz22.o   \
14891497
14901498$(MESSOBJ)/parker.a:            \
1499   $(MESS_DRIVERS)/cnsector.o  \
1500   $(MESS_DRIVERS)/merlin.o    \
1501   $(MESS_DRIVERS)/splitsec.o  \
1502   $(MESS_DRIVERS)/stopthie.o  \
14911503   $(MESS_DRIVERS)/wildfire.o  \
14921504
14931505$(MESSOBJ)/pitronic.a:          \
r244636r244637
18131825   $(MESS_MACHINE)/dragon.o    \
18141826   $(MESS_MACHINE)/dgnalpha.o  \
18151827   $(MESS_VIDEO)/gime.o        \
1828   $(MESS_DRIVERS)/tandy12.o   \
18161829   $(MESS_DRIVERS)/trs80.o $(MESS_MACHINE)/trs80.o $(MESS_VIDEO)/trs80.o \
18171830   $(MESS_DRIVERS)/trs80m2.o $(MESS_MACHINE)/trs80m2kb.o \
18181831   $(MESS_DRIVERS)/tandy2k.o $(MESS_MACHINE)/tandy2kb.o \
r244636r244637
20042017   $(MESS_DRIVERS)/ti630.o     \
20052018   $(MESS_DRIVERS)/tsispch.o   \
20062019   $(MESS_DRIVERS)/unistar.o   \
2020   $(MESS_DRIVERS)/unk3403.o   \
20072021   $(MESS_DRIVERS)/v6809.o     \
20082022   $(MESS_DRIVERS)/vector4.o   \
20092023   $(MESS_DRIVERS)/vii.o       \
r244636r244637
21032117$(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh
21042118$(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \
21052119                     $(MESS_LAYOUT)/borisdpl.lh
2120$(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh
21062121$(MESS_DRIVERS)/comp4.o:    $(MESS_LAYOUT)/comp4.lh
21072122$(MESS_DRIVERS)/cp1.o:      $(MESS_LAYOUT)/cp1.lh
21082123$(MESS_DRIVERS)/cvicny.o:   $(MESS_LAYOUT)/cvicny.lh
r244636r244637
21142129$(MESS_DRIVERS)/dolphunk.o: $(MESS_LAYOUT)/dolphunk.lh
21152130$(MESS_DRIVERS)/eacc.o:     $(MESS_LAYOUT)/eacc.lh
21162131$(MESS_DRIVERS)/edracula.o: $(MESS_LAYOUT)/edracula.lh
2132$(MESS_DRIVERS)/elecdet.o:  $(MESS_LAYOUT)/elecdet.lh
21172133$(MESS_DRIVERS)/elekscmp.o: $(MESS_LAYOUT)/elekscmp.lh
21182134$(MESS_DRIVERS)/elf.o:      $(MESS_LAYOUT)/elf2.lh
21192135$(MESS_MACHINE)/esqvfd.o:   $(MESS_LAYOUT)/esq2by40.lh \
r244636r244637
21272143$(MESS_DRIVERS)/glasgow.o:  $(MESS_LAYOUT)/glasgow.lh
21282144$(MESS_DRIVERS)/h8.o:       $(MESS_LAYOUT)/h8.lh
21292145$(MESS_DRIVERS)/hh_tms1k.o: $(MESS_LAYOUT)/amaztron.lh \
2130                            $(MESS_LAYOUT)/bankshot.lh \
2131                            $(MESS_LAYOUT)/cnsector.lh \
21322146                            $(MESS_LAYOUT)/comp4.lh \
21332147                            $(MESS_LAYOUT)/ebball.lh \
2134                            $(MESS_LAYOUT)/elecdet.lh \
2135                            $(MESS_LAYOUT)/mathmagi.lh \
2136                            $(MESS_LAYOUT)/merlin.lh \
21372148                            $(MESS_LAYOUT)/simon.lh \
2138                            $(MESS_LAYOUT)/splitsec.lh \
2139                            $(MESS_LAYOUT)/starwbc.lh \
2140                            $(MESS_LAYOUT)/stopthie.lh \
2141                            $(MESS_LAYOUT)/tandy12.lh \
21422149                            $(MESS_LAYOUT)/tc4.lh
2143$(MESS_DRIVERS)/hh_ucom4.o: $(MESS_LAYOUT)/tmpacman.lh
21442150$(MESS_DRIVERS)/ie15.o:     $(MESS_LAYOUT)/ie15.lh
21452151$(MESS_DRIVERS)/instruct.o: $(MESS_LAYOUT)/instruct.lh
21462152$(MESS_DRIVERS)/k1003.o:    $(MESS_LAYOUT)/k1003.lh
r244636r244637
21502156$(MESS_DRIVERS)/llc.o:      $(MESS_LAYOUT)/llc1.lh
21512157$(MESS_DRIVERS)/lynx.o:     $(MESS_LAYOUT)/lynx.lh
21522158$(MESS_DRIVERS)/mac.o:      $(MESS_LAYOUT)/mac.lh
2159$(MESS_DRIVERS)/mathmagi.o: $(MESS_LAYOUT)/mathmagi.lh
21532160$(MESS_MACHINE)/megacd.o:   $(MESS_LAYOUT)/megacd.lh
21542161$(MESS_DRIVERS)/mekd2.o:    $(MESS_LAYOUT)/mekd2.lh
21552162$(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh
2163$(MESS_DRIVERS)/merlin.o:   $(MESS_LAYOUT)/merlin.lh
21562164$(MESS_DRIVERS)/minicom.o:  $(MESS_LAYOUT)/minicom.lh
21572165$(MESS_DRIVERS)/mirage.o:   $(MESS_LAYOUT)/mirage.lh
21582166$(MESS_DRIVERS)/mk1.o:      $(MESS_LAYOUT)/mk1.lh
r244636r244637
21882196$(MESS_DRIVERS)/sitcom.o:   $(MESS_LAYOUT)/sitcom.lh
21892197$(MESS_DRIVERS)/slc1.o:     $(MESS_LAYOUT)/slc1.lh
21902198$(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
21912203$(MESS_DRIVERS)/super80.o:  $(MESS_LAYOUT)/super80.lh
21922204$(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh
21932205$(MESS_DRIVERS)/svision.o:  $(MESS_LAYOUT)/svision.lh
21942206$(MESS_DRIVERS)/svmu.o:     $(MESS_LAYOUT)/svmu.lh
21952207$(MESS_DRIVERS)/sym1.o:     $(MESS_LAYOUT)/sym1.lh
2208$(MESS_DRIVERS)/tandy12.o:  $(MESS_LAYOUT)/tandy12.lh
21962209$(MESS_DRIVERS)/tavernie.o: $(MESS_LAYOUT)/tavernie.lh
21972210$(MESS_DRIVERS)/tb303.o:    $(MESS_LAYOUT)/tb303.lh
21982211$(MESS_DRIVERS)/tc4.o:      $(MESS_LAYOUT)/tc4.lh
trunk/src/osd/sdl/window.c
r244636r244637
14721472         break;
14731473
14741474      case WMSZ_BOTTOMLEFT:
1475         ret = rect.move_by(-adjwidth, 0).resize(rect.width(), rect.height() + adjheight);
1475         ret = rect.move_by(-adjwidth, 0).resize(rect.width() + adjwidth, rect.height() + adjheight);
14761476         break;
14771477
14781478      case WMSZ_LEFT:
14791479      case WMSZ_TOPLEFT:
14801480      case WMSZ_TOP:
1481         ret = rect.move_by(-adjwidth, -adjheight);
1481         ret = rect.move_by(-adjwidth, -adjheight).resize(rect.width() + adjwidth, rect.height() + adjheight);
14821482         break;
14831483
14841484      case WMSZ_TOPRIGHT:
1485         ret = rect.move_by(0, -adjheight).resize(rect.width() + adjwidth, rect.height());
1485         ret = rect.move_by(0, -adjheight).resize(rect.width() + adjwidth, rect.height() + adjheight);
14861486         break;
14871487}
14881488   return ret;
r244636r244637
14991499{
15001500   INT32 minwidth, minheight;
15011501
1502   //assert(GetCurrentThreadId() == window_threadid);
1503
15021504   // get the minimum target size
15031505   m_target->compute_minimum_size(minwidth, minheight);
15041506
r244636r244637
15481550
15491551osd_dim sdl_window_info::get_max_bounds(int constrain)
15501552{
1553   //assert(GetCurrentThreadId() == window_threadid);
1554
15511555   // compute the maximum client area
1556   // m_monitor->refresh();
1557   osd_rect maximum = m_monitor->usuable_position_size();
15521558
1553   osd_rect maximum = m_monitor->position_size();
1554
15551559   // clamp to the window's max
15561560   int tempw = maximum.width();
15571561   int temph = maximum.height();
trunk/src/osd/windows/window.c
r244636r244637
16051605         break;
16061606
16071607      case WMSZ_BOTTOMLEFT:
1608         ret = rect.move_by(-adjwidth, 0).resize(rect.width(), rect.height() + adjheight);
1608         ret = rect.move_by(-adjwidth, 0).resize(rect.width() + adjwidth, rect.height() + adjheight);
16091609         break;
16101610
16111611      case WMSZ_LEFT:
16121612      case WMSZ_TOPLEFT:
16131613      case WMSZ_TOP:
1614         ret = rect.move_by(-adjwidth, -adjheight);
1614         ret = rect.move_by(-adjwidth, -adjheight).resize(rect.width() + adjwidth, rect.height() + adjheight);
16151615         break;
16161616
16171617      case WMSZ_TOPRIGHT:
1618         ret = rect.move_by(0, -adjheight).resize(rect.width() + adjwidth, rect.height());
1618         ret = rect.move_by(0, -adjheight).resize(rect.width() + adjwidth, rect.height() + adjheight);
16191619         break;
16201620   }
16211621   return ret;
r244636r244637
16321632{
16331633   INT32 minwidth, minheight;
16341634
1635   assert(GetCurrentThreadId() == window_threadid);
1635   //assert(GetCurrentThreadId() == window_threadid);
16361636
16371637   // get the minimum target size
16381638   m_target->compute_minimum_size(minwidth, minheight);
r244636r244637
16831683
16841684osd_dim win_window_info::get_max_bounds(int constrain)
16851685{
1686   assert(GetCurrentThreadId() == window_threadid);
1686   //assert(GetCurrentThreadId() == window_threadid);
16871687
16881688   // compute the maximum client area
16891689   m_monitor->refresh();


Previous 199869 Revisions Next


© 1997-2024 The MAME Team