| Previous | 199869 Revisions | Next |
| r36126 Friday 27th February, 2015 at 17:09:54 UTC by Couriersud |
|---|
| Merge branch 'master' of https://github.com/mamedev/mame.git |
| [src/build] | makelist.py verinfo.py |
| [src/emu/drivers] | xtal.h |
| [src/mame] | mame.lst |
| [src/mame/drivers] | neogeo.c neogeo_noslot.c opwolf.c |
| [src/mess] | mess.lst mess.mak |
| [src/mess/drivers] | |
| [src/mess/layout] | cnsector.lay tmpacman.lay* |
| r244637 | r244638 | |
|---|---|---|
| 3 | 3 | from __future__ import with_statement |
| 4 | 4 | |
| 5 | 5 | import sys |
| 6 | import os | |
| 7 | 6 | |
| 8 | 7 | drivlist = [] |
| 9 | 8 |
| r244637 | r244638 | |
|---|---|---|
| 2 | 2 | |
| 3 | 3 | from __future__ import with_statement |
| 4 | 4 | |
| 5 | import os | |
| 6 | 5 | import re |
| 7 | 6 | import sys |
| 8 | 7 | |
| r244637 | r244638 | |
| 85 | 84 | |
| 86 | 85 | if build == "mess": |
| 87 | 86 | # MESS |
| 88 | author = "MESS Team"; | |
| 89 | comments = "Multi Emulation Super System"; | |
| 90 | company_name = "MESS Team"; | |
| 91 | file_description = "Multi Emulation Super System"; | |
| 92 | internal_name = "MESS"; | |
| 93 | original_filename = "MESS"; | |
| 94 | product_name = "MESS"; | |
| 87 | author = "MESS Team" | |
| 88 | comments = "Multi Emulation Super System" | |
| 89 | company_name = "MESS Team" | |
| 90 | file_description = "Multi Emulation Super System" | |
| 91 | internal_name = "MESS" | |
| 92 | original_filename = "MESS" | |
| 93 | product_name = "MESS" | |
| 95 | 94 | bundle_identifier = "org.mamedev.mess" |
| 96 | 95 | elif build == "ume": |
| 97 | 96 | # UME |
| r244637 | r244638 | |
|---|---|---|
| 233 | 233 | |
| 234 | 234 | XTAL_384kHz = 384000, /* Commonly used for driving OKI MSM5205 */ |
| 235 | 235 | XTAL_400kHz = 400000, /* OKI MSM5205 on Great Swordman h/w */ |
| 236 | XTAL_430kHz = 430000, | |
| 236 | 237 | XTAL_455kHz = 455000, /* OKI MSM5205 on Gladiator h/w */ |
| 237 | 238 | XTAL_512kHz = 512000, /* Toshiba TC8830F */ |
| 238 | 239 | XTAL_640kHz = 640000, /* NEC UPD7759, Texas Instruments Speech Chips @ 8khz */ |
| r244637 | r244638 | |
|---|---|---|
| 238 | 238 | . NEO-AEG CHA42G-3 |
| 239 | 239 | . NEO-AEG CHA42G-4 |
| 240 | 240 | . NEO-AEG CHA256 |
| 241 | . NEO-AEG CHA256 B | |
| 241 | 242 | . NEO-AEG CHA256[B] |
| 243 | . NEO-AEG CHA256BY | |
| 242 | 244 | . NEO-AEG CHA256RY |
| 243 | 245 | . NEO-AEG CHA512Y |
| 244 | 246 | . NEO-AEG CHAFIO (1999.8.10) - used with NEO-CMC 90G06C7042 or NEO-CMC 90G06C7050 |
| r244637 | r244638 | |
| 261 | 263 | . NEO-AEG PROG4096 B |
| 262 | 264 | . NEO-AEG PROGGS |
| 263 | 265 | . NEO-AEG PROGTOP2 |
| 266 | . NEO-AEG PROGTOP2Y | |
| 264 | 267 | . NEO-AEG PROGEOP (1999.4.2) |
| 265 | 268 | . NEO-AEG PROGLBA (1999.7.6) |
| 266 | 269 | . NEO-AEG PROGRK |
| r244637 | r244638 | |
| 307 | 310 | GIGA PROG Board 1.0 |
| 308 | 311 | GIGA PROG Board 1.5 |
| 309 | 312 | |
| 310 | ||
| 313 | ||
| 314 | Unofficial pcb's from NEOBITZ: | |
| 315 | ||
| 316 | MVS CHA: | |
| 317 | CHARBITZ1 2013.12.01 | |
| 318 | ||
| 319 | MVS PROG: | |
| 320 | PROGBITZ1 2013.12.01 | |
| 321 | ||
| 322 | ||
| 311 | 323 | Neo-Geo game PCB infos by Johnboy |
| 312 | 324 | |
| 313 | 325 |
| r244637 | r244638 | |
|---|---|---|
| 679 | 679 | NEO-MVS PROG42G / NEO-MVS CHA42G |
| 680 | 680 | . NGH-007 |
| 681 | 681 | NEO-AEG PROG42G / NEO-AEG CHA42G |
| 682 | NEO-AEG PROG42G / NEO-AEG CHA-8M | |
| 682 | 683 | ****************************************/ |
| 683 | 684 | |
| 684 | 685 | ROM_START( alpham2 ) /* MVS AND AES VERSION */ |
| r244637 | r244638 | |
| 734 | 735 | |
| 735 | 736 | /**************************************** |
| 736 | 737 | ID-0008 |
| 737 | Sun | |
| 738 | Sun Shine (prototype) 1990 SNK / Alpha | |
| 738 | 739 | ****************************************/ |
| 739 | 740 | |
| 740 | 741 | /**************************************** |
| r244637 | r244638 | |
| 770 | 771 | ROM_LOAD16_BYTE( "009-c6.c6", 0x200001, 0x80000, CRC(2eca8b19) SHA1(16764ef10e404325ba0a1a2ad3a4c0af287be21f) ) /* Plane 2,3 */ /* TC534200 */ |
| 771 | 772 | ROM_END |
| 772 | 773 | |
| 773 | ROM_START( ncombath ) /* AES VERSION */ | |
| 774 | ROM_START( ncombath ) /* MVS AND AES VERSION */ | |
| 774 | 775 | ROM_REGION( 0x100000, "maincpu", 0 ) |
| 775 | 776 | ROM_LOAD16_WORD_SWAP( "009-pg1.p1", 0x000000, 0x080000, CRC(8e9f0add) SHA1(d0b908a86a58f2537eea73a431038f1cd74a5a2f) ) /* TC534200 */ |
| 776 | 777 | |
| r244637 | r244638 | |
| 800 | 801 | . NGM-010 |
| 801 | 802 | NEO-MVS PROG-EP / NEO-MVS CHA-32 |
| 802 | 803 | . NGH-010 |
| 804 | NEO-AEG PROG-B / NEO-AEG CHA-32 | |
| 803 | 805 | ****************************************/ |
| 804 | 806 | |
| 805 | 807 | ROM_START( cyberlip ) |
| r244637 | r244638 | |
| 910 | 912 | NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 |
| 911 | 913 | . NGH-016 |
| 912 | 914 | NEO-AEG PROG42G / NEO-AEG CHA42G |
| 915 | NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 | |
| 913 | 916 | ****************************************/ |
| 914 | 917 | |
| 915 | 918 | ROM_START( kotm ) /* MVS VERSION */ |
| r244637 | r244638 | |
| 962 | 965 | NEO-MVS PROG42G / NEO-MVS CHA42G |
| 963 | 966 | . NGH-017 |
| 964 | 967 | NEO-AEG PROG42G / NEO-AEG CHA42G |
| 968 | NEO-AEG PRO42G-1 / NEO-AEG CHA42G-1 | |
| 965 | 969 | ****************************************/ |
| 966 | 970 | |
| 967 | 971 | ROM_START( sengoku ) /* MVS AND AES VERSION */ |
| r244637 | r244638 | |
| 1233 | 1237 | ID-0023 |
| 1234 | 1238 | . NGM-023 |
| 1235 | 1239 | NEO-MVS PROG42G / NEO-MVS CHA42G |
| 1240 | NEO-MVS PROGTOP / NEO-MVS CHA-256 | |
| 1241 | Boards used for the Korean release | |
| 1236 | 1242 | . NGH-023 |
| 1237 | 1243 | NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 |
| 1238 | 1244 | ****************************************/ |
| r244637 | r244638 | |
| 1368 | 1374 | |
| 1369 | 1375 | /**************************************** |
| 1370 | 1376 | ID-0028 |
| 1371 | Dunk Star (prototype) Sammy | |
| 1377 | Dunk Star (prototype) 1991 Sammy | |
| 1372 | 1378 | ****************************************/ |
| 1373 | 1379 | |
| 1374 | 1380 | /**************************************** |
| r244637 | r244638 | |
| 1618 | 1624 | ID-0036 |
| 1619 | 1625 | . MOM-002 |
| 1620 | 1626 | NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 |
| 1627 | NEO-MVS PROG42G-COM / NEO-MVS CHA42G-1 | |
| 1621 | 1628 | . MOH-002 |
| 1622 | 1629 | NEO-AEG PROG42G / NEO-AEG CHA42G |
| 1623 | 1630 | ****************************************/ |
| r244637 | r244638 | |
| 1775 | 1782 | . NGM-040 |
| 1776 | 1783 | NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 |
| 1777 | 1784 | . NGH-040 |
| 1785 | NEO-AEG PROG16 / NEO-AEG CHA42G-1 | |
| 1778 | 1786 | ****************************************/ |
| 1779 | 1787 | |
| 1780 | 1788 | ROM_START( sengoku2 ) |
| r244637 | r244638 | |
| 1805 | 1813 | . NGM-041 |
| 1806 | 1814 | NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 |
| 1807 | 1815 | . NGH-041 |
| 1816 | NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 | |
| 1808 | 1817 | ****************************************/ |
| 1809 | 1818 | |
| 1810 | 1819 | ROM_START( bstars2 ) |
| r244637 | r244638 | |
| 1862 | 1871 | ID-0043 |
| 1863 | 1872 | . NGM-043 |
| 1864 | 1873 | NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 |
| 1874 | NEO-MVS PROG-G2 / NEO-MVS CHA 42G-2 | |
| 1865 | 1875 | . NGH-043 |
| 1866 | 1876 | NEO-AEG PROG16 / NEO-AEG CHA42G-1 |
| 1867 | 1877 | ****************************************/ |
| r244637 | r244638 | |
| 1896 | 1906 | ID-0044 |
| 1897 | 1907 | . NGM-044 |
| 1898 | 1908 | NEO-MVS PROG16 / NEO-MVS CHA42G-1 |
| 1909 | NEO-MVS PROG4096 / NEO-MVS CHA42G-1 | |
| 1899 | 1910 | . NGH-044 |
| 1900 | 1911 | NEO-AEG PROG16 / NEO-AEG CHA42G-1 |
| 1901 | 1912 | ****************************************/ |
| r244637 | r244638 | |
| 1903 | 1914 | ROM_START( aof ) /* MVS AND AES VERSION */ |
| 1904 | 1915 | ROM_REGION( 0x100000, "maincpu", 0 ) |
| 1905 | 1916 | ROM_LOAD16_WORD_SWAP( "044-p1.p1", 0x000000, 0x080000, CRC(ca9f7a6d) SHA1(4d28ef86696f7e832510a66d3e8eb6c93b5b91a1) ) /* TC534200 */ |
| 1906 | ||
| 1917 | /* also found sets with ep1 or p1 on eprom. */ | |
| 1918 | ||
| 1907 | 1919 | NEO_SFIX_128K( "044-s1.s1", CRC(89903f39) SHA1(a04a0c244a5d5c7a595fcf649107969635a6a8b6) ) /* TC531000 */ |
| 1908 | 1920 | |
| 1909 | 1921 | NEO_BIOS_AUDIO_128K( "044-m1.m1", CRC(0987e4bb) SHA1(8fae4b7fac09d46d4727928e609ed9d3711dbded) ) /* TC531001 */ |
| r244637 | r244638 | |
| 1937 | 1949 | ROM_REGION( 0x200000, "maincpu", 0 ) |
| 1938 | 1950 | ROM_LOAD16_WORD_SWAP( "045-p1.p1", 0x000000, 0x100000, CRC(dfe51bf0) SHA1(2243af3770a516ae698b69bcd9daf53632d9128d) ) /* TC538200 */ |
| 1939 | 1951 | ROM_LOAD16_WORD_SWAP( "045-pg2.sp2", 0x100000, 0x100000, CRC(46745b94) SHA1(d9e959fd1f88c9402915c1d0dcdb4a9e3d49cdcb) ) /* TC538200 */ |
| 1940 | ||
| 1952 | /* also found set with ep1 / ep2 on eprom and sp2 on maskrom; same rom data as samshoh is used. */ | |
| 1953 | ||
| 1941 | 1954 | NEO_SFIX_128K( "045-s1.s1", CRC(9142a4d3) SHA1(54088e99fcfd75fd0f94852890a56350066a05a3) ) /* TC531000 */ |
| 1942 | 1955 | |
| 1943 | 1956 | NEO_BIOS_AUDIO_128K( "045-m1.m1", CRC(95170640) SHA1(125c502db0693e8d11cef619b090081c14a9a300) ) /* TC531001 */ |
| r244637 | r244638 | |
| 2051 | 2064 | NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-1 |
| 2052 | 2065 | . NGH-047 |
| 2053 | 2066 | NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B |
| 2067 | NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2 | |
| 2054 | 2068 | ****************************************/ |
| 2055 | 2069 | |
| 2056 | 2070 | ROM_START( fatfury2 ) /* MVS AND AES VERSION */ |
| r244637 | r244638 | |
| 2137 | 2151 | . ALM-004 |
| 2138 | 2152 | NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 |
| 2139 | 2153 | . ALH-004 |
| 2154 | NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 | |
| 2140 | 2155 | ****************************************/ |
| 2141 | 2156 | |
| 2142 | 2157 | ROM_START( ncommand ) |
| r244637 | r244638 | |
| 2164 | 2179 | ID-0051 |
| 2165 | 2180 | . AIM-051 |
| 2166 | 2181 | NEO-MVS PROG-G2 / NEO-MVS CHA42G-1 |
| 2182 | NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 | |
| 2167 | 2183 | . AIH-051 |
| 2168 | 2184 | ****************************************/ |
| 2169 | 2185 | |
| r244637 | r244638 | |
| 2194 | 2210 | . NGM-052 |
| 2195 | 2211 | NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA 42G-2 |
| 2196 | 2212 | . NGH-052 |
| 2213 | NEO-AEG PROG-G2 (SNK-9201) / NEO-AEG CHA42G-2 | |
| 2197 | 2214 | ****************************************/ |
| 2198 | 2215 | |
| 2199 | 2216 | ROM_START( ssideki ) |
| r244637 | r244638 | |
| 2222 | 2239 | NEO-MVS PROG16 / NEO-MVS CHA42G-1 |
| 2223 | 2240 | . ALH-005 |
| 2224 | 2241 | NEO-AEG PROG16 / NEO-AEG CHA42G-1 |
| 2242 | NEO-AEG PROG-G2 / NEO-AEG CHA42G-2C | |
| 2225 | 2243 | ****************************************/ |
| 2226 | 2244 | |
| 2227 | 2245 | ROM_START( wh1 ) /* MVS VERSION */ |
| r244637 | r244638 | |
| 2253 | 2271 | ROM_REGION( 0x100000, "maincpu", 0 ) |
| 2254 | 2272 | ROM_LOAD16_WORD_SWAP( "053-p1.p1", 0x000000, 0x080000, CRC(95b574cb) SHA1(b7b7af6a04c3d902e7f8852897741ecaf0b1062c) ) /* TC534200 */ |
| 2255 | 2273 | ROM_LOAD16_WORD_SWAP( "053-p2.p2", 0x080000, 0x080000, CRC(f198ed45) SHA1(24ccc091e97f63796562bb5b30df51f39bd504ef) ) /* TC534200 */ |
| 2256 | ||
| 2274 | ||
| 2257 | 2275 | NEO_SFIX_128K( "053-s1.s1", CRC(8c2c2d6b) SHA1(87fa79611c6f8886dcc8766814829c669c65b40f) ) /* TC531000 */ |
| 2258 | 2276 | |
| 2259 | 2277 | NEO_BIOS_AUDIO_128K( "053-m1.m1", CRC(1bd9d04b) SHA1(65cd7b002123ed1a3111e3d942608d0082799ff3) ) /* TC531001 */ |
| r244637 | r244638 | |
| 2307 | 2325 | ID-0055 |
| 2308 | 2326 | . NGM-055 |
| 2309 | 2327 | NEO-MVS PROGTOP / NEO-MVS CHA256 |
| 2328 | NEO-MVS PROGTOP / NEO-MVS CHA256B | |
| 2310 | 2329 | . NGH-055 |
| 2311 | 2330 | NEO-AEG PROGRK / NEO-AEG CHA256 |
| 2312 | 2331 | ****************************************/ |
| r244637 | r244638 | |
| 2437 | 2456 | /**************************************** |
| 2438 | 2457 | ID-0058 |
| 2439 | 2458 | . NGM-058 |
| 2440 | NEO-MVS PROGGSC / NEO-MVS CHA 42G-3B | |
| 2459 | NEO-MVS PROGGSC / NEO-MVS CHA42G-3B | |
| 2460 | NEO-MVS PROGGSC / NEO-MVS CHA 42G-3 | |
| 2441 | 2461 | . NGH-058 |
| 2442 | 2462 | NEO-AEG PROGGS / NEO-AEG CHA42G-4 |
| 2443 | 2463 | ****************************************/ |
| r244637 | r244638 | |
| 2499 | 2519 | ID-0059 |
| 2500 | 2520 | . NGM-059 |
| 2501 | 2521 | NEO-MVS PROGTOP / NEO-MVS CHA256 |
| 2522 | NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 | |
| 2502 | 2523 | . NGH-059 |
| 2503 | 2524 | ****************************************/ |
| 2504 | 2525 | |
| r244637 | r244638 | |
| 2584 | 2605 | ID-0061 |
| 2585 | 2606 | . NGM-061 |
| 2586 | 2607 | NEO-MVS PROGGSC / NEO-MVS CHA256 |
| 2608 | NEO-MVS PROGTOP / NEO-MVS CHA256 | |
| 2609 | NEO-MVS PROG 4096 B / NEO-MVS CHA256 | |
| 2587 | 2610 | . NGH-061 |
| 2588 | 2611 | NEO-AEG PROGRKB / NEO-AEG CHA256[B] |
| 2589 | 2612 | ****************************************/ |
| r244637 | r244638 | |
| 2591 | 2614 | ROM_START( ssideki2 ) /* MVS AND AES VERSION */ |
| 2592 | 2615 | ROM_REGION( 0x100000, "maincpu", 0 ) |
| 2593 | 2616 | ROM_LOAD16_WORD_SWAP( "061-p1.p1", 0x000000, 0x100000, CRC(5969e0dc) SHA1(78abea880c125ec5a85bef6404478512a34b5513) ) /* mask rom TC538200 */ |
| 2594 | ||
| 2617 | /* also found MVS sets with ep1 / ep2 on eprom; correct chip label unknown. */ | |
| 2618 | ||
| 2595 | 2619 | NEO_SFIX_128K( "061-s1.s1", CRC(226d1b68) SHA1(de010f6fda3ddadb181fe37daa6105f22e78b970) ) /* mask rom TC531000 */ |
| 2596 | 2620 | |
| 2597 | 2621 | NEO_BIOS_AUDIO_128K( "061-m1.m1", CRC(156f6951) SHA1(49686f615f109a02b4f23931f1c84fee13872ffd) ) /* mask rom TC531001 */ |
| r244637 | r244638 | |
| 2654 | 2678 | ROM_REGION( 0x200000, "maincpu", 0 ) |
| 2655 | 2679 | ROM_LOAD16_WORD_SWAP( "063-p1.p1", 0x100000, 0x100000, CRC(22368892) SHA1(0997f8284aa0f57a333be8a0fdea777d0d01afd6) ) /* TC5316200 */ |
| 2656 | 2680 | ROM_CONTINUE( 0x000000, 0x100000 ) |
| 2657 | ||
| 2681 | /* also found MVS sets with ep1 / ep2 on eprom and p1 / sp2 on maskrom; correct chip label unknown */ | |
| 2682 | ||
| 2658 | 2683 | NEO_SFIX_128K( "063-s1.s1", CRC(64a5cd66) SHA1(12cdfb27bf9ccd5a8df6ddd4628ef7cf2c6d4964) ) /* TC531000 */ |
| 2659 | 2684 | |
| 2660 | 2685 | NEO_BIOS_AUDIO_128K( "063-m1.m1", CRC(56675098) SHA1(90429fc40d056d480d0e2bbefbc691d9fa260fc4) ) /* TC531001 */ |
| r244637 | r244638 | |
| 2716 | 2741 | NEO-MVS PROGGSC / NEO-MVS CHA256 |
| 2717 | 2742 | . ADH-007 |
| 2718 | 2743 | NEO-AEG PROGRK / NEO-AEG CHA256 |
| 2744 | NEO-AEG PROGRKB / NEO-AEG CHA256[B] | |
| 2719 | 2745 | ****************************************/ |
| 2720 | 2746 | |
| 2721 | 2747 | ROM_START( wh2j ) /* MVS AND AES VERSION */ |
| r244637 | r244638 | |
| 2734 | 2760 | NO_DELTAT_REGION |
| 2735 | 2761 | |
| 2736 | 2762 | 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. */ | |
| 2737 | 2764 | ROM_LOAD16_BYTE( "064-c1.c1", 0x000000, 0x200000, CRC(2ec87cea) SHA1(e713ec7839a7665edee6ee3f82a6e530b3b4bd7c) ) /* Plane 0,1 */ /* TC5316200 */ |
| 2738 | 2765 | ROM_LOAD16_BYTE( "064-c2.c2", 0x000001, 0x200000, CRC(526b81ab) SHA1(b5f0a2f04489539ed6b9d0810b12787356c64b23) ) /* Plane 2,3 */ /* TC5316200 */ |
| 2739 | 2766 | ROM_LOAD16_BYTE( "064-c3.c3", 0x400000, 0x200000, CRC(436d1b31) SHA1(059776d77b91377ed0bcfc278802d659c917fc0f) ) /* Plane 0,1 */ /* TC5316200 */ |
| r244637 | r244638 | |
| 2749 | 2776 | . DEM-002 |
| 2750 | 2777 | NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 |
| 2751 | 2778 | . DEH-002 |
| 2779 | NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 | |
| 2752 | 2780 | ****************************************/ |
| 2753 | 2781 | |
| 2754 | 2782 | ROM_START( wjammers ) |
| r244637 | r244638 | |
| 2807 | 2835 | ID-0067 |
| 2808 | 2836 | . ??M-067 |
| 2809 | 2837 | NEO-MVS PROG16 / NEO-MVS CHA256B |
| 2838 | NEO-MVS PROG16 / NEO-MVS CHA256 | |
| 2810 | 2839 | ****************************************/ |
| 2811 | 2840 | |
| 2812 | 2841 | ROM_START( gururin ) /* MVS ONLY RELEASE */ |
| r244637 | r244638 | |
| 2925 | 2954 | /**************************************** |
| 2926 | 2955 | ID-0071 |
| 2927 | 2956 | Bang Bang Busters (prototype) 1994 Visco |
| 2928 | Released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO) | |
| 2957 | Prepared for release in 2000/2001, but apparently Zupapa was favored | |
| 2958 | The 2000 version was released in 2010 for MVS and AES (Releaser claims that it is officially licensed by VISCO) | |
| 2929 | 2959 | |
| 2930 | 2960 | Reported UNIVERSE BIOS CRC32: |
| 2931 | 2961 | ROM EC861CAF |
| r244637 | r244638 | |
| 2935 | 2965 | BANK 3 NOT USED |
| 2936 | 2966 | ****************************************/ |
| 2937 | 2967 | |
| 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 */ | |
| 2982 | ROM_END | |
| 2983 | ||
| 2984 | ||
| 2938 | 2985 | /**************************************** |
| 2939 | 2986 | ID-0072 |
| 2940 | 2987 | Last Odyssey Pinball Fantasia (prototype) 1995 Monolith |
| r244637 | r244638 | |
| 3005 | 3052 | . NGM-075 |
| 3006 | 3053 | NEO-MVS PROGGSC / NEO-MVS CHA256 |
| 3007 | 3054 | . NGH-075 |
| 3055 | NEO-AEG PROGRK / NEO-AEG CHA256 | |
| 3008 | 3056 | ****************************************/ |
| 3009 | 3057 | |
| 3010 | 3058 | ROM_START( sonicwi2 ) |
| r244637 | r244638 | |
| 3059 | 3107 | |
| 3060 | 3108 | /**************************************** |
| 3061 | 3109 | ID-0077 |
| 3062 | The Warlocks of the Fates (prototype) 1995 Astec | |
| 3110 | The Warlocks of the Fates / Shinryu Senki (prototype) 1995 SNK/Astec21 | |
| 3111 | a video of intro and full gameplay was on youtube in 2014. | |
| 3063 | 3112 | ****************************************/ |
| 3064 | 3113 | |
| 3065 | 3114 | /**************************************** |
| r244637 | r244638 | |
| 3130 | 3179 | ID-0080 |
| 3131 | 3180 | . SAM-080 |
| 3132 | 3181 | NEO-MVS PROGGSC / NEO-MVS CHA256 |
| 3182 | NEO-MVS PROGTOP / NEO-MVS CHA256 | |
| 3183 | Boards used for the Korean release | |
| 3133 | 3184 | . SAH-080 |
| 3134 | 3185 | NEO-AEG PROGTOP2 / NEO-AEG CHA256 B |
| 3135 | 3186 | ****************************************/ |
| r244637 | r244638 | |
| 3185 | 3236 | . NGM-081 |
| 3186 | 3237 | NEO-MVS PROGTOP / NEO-MVS CHA42G-3B |
| 3187 | 3238 | NEO-MVS PROGTOP / NEO-MVS CHA256 |
| 3239 | NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 | |
| 3240 | NEO-MVS PROGBK1 / NEO-MVS CHA256B | |
| 3188 | 3241 | . NGH-081 |
| 3242 | NEO-AEG PROGTOP2 / NEO-AEG CHA256 B | |
| 3189 | 3243 | ****************************************/ |
| 3190 | 3244 | |
| 3191 | 3245 | ROM_START( ssideki3 ) |
| r244637 | r244638 | |
| 3219 | 3273 | NEO-MVS PROGTOP / NEO-MVS CHA256 |
| 3220 | 3274 | NEO-MVS PROGTOP / NEO-MVS CHA 42G-3 |
| 3221 | 3275 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 3276 | NEO-MVS PROGTOP / NEO-MVS CHA256B | |
| 3277 | NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 | |
| 3222 | 3278 | . NGH-082 |
| 3223 | 3279 | ****************************************/ |
| 3224 | 3280 | |
| r244637 | r244638 | |
| 3417 | 3473 | ID-0087 |
| 3418 | 3474 | . NGM-087 |
| 3419 | 3475 | NEO-MVS PROGSS3 / NEO-MVS CHA256 |
| 3476 | NEO-MVS PROGBK1 / NEO-MVS CHA256 | |
| 3420 | 3477 | . NGH-087 |
| 3421 | 3478 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY |
| 3422 | 3479 | ****************************************/ |
| r244637 | r244638 | |
| 3508 | 3565 | . NGM-088 |
| 3509 | 3566 | NEO-MVS PROGBK1 / NEO-MVS CHA42-3B |
| 3510 | 3567 | . NGH-088 |
| 3568 | NEO-AEG PROGRKB / NEO-AEG CHA256[B] | |
| 3511 | 3569 | ****************************************/ |
| 3512 | 3570 | |
| 3513 | 3571 | ROM_START( stakwin ) |
| r244637 | r244638 | |
| 3536 | 3594 | . NGM-089 |
| 3537 | 3595 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 3538 | 3596 | . NGH-089 |
| 3597 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 3539 | 3598 | ****************************************/ |
| 3540 | 3599 | |
| 3541 | 3600 | ROM_START( pulstar ) |
| r244637 | r244638 | |
| 3568 | 3627 | ID-0090 |
| 3569 | 3628 | . ADM-009 |
| 3570 | 3629 | 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 | |
| 3571 | 3633 | . ADH-009 |
| 3572 | 3634 | ****************************************/ |
| 3573 | 3635 | |
| r244637 | r244638 | |
| 3602 | 3664 | |
| 3603 | 3665 | /**************************************** |
| 3604 | 3666 | ID-0091 |
| 3605 | | |
| 3667 | ADK World / ADK Special 1995 ADK (CD only) | |
| 3606 | 3668 | ****************************************/ |
| 3607 | 3669 | |
| 3608 | 3670 | /**************************************** |
| 3609 | 3671 | ID-0092 |
| 3610 | 3672 | . NGM-092 |
| 3611 | 3673 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 3674 | NEO-MVS PROGTOP / NEO-MVS CHA256 | |
| 3612 | 3675 | . NGH-092 |
| 3613 | 3676 | ****************************************/ |
| 3614 | 3677 | |
| r244637 | r244638 | |
| 3830 | 3893 | . NGM-097 |
| 3831 | 3894 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 3832 | 3895 | . NGH-097 |
| 3896 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 3833 | 3897 | ****************************************/ |
| 3834 | 3898 | |
| 3835 | 3899 | ROM_START( sonicwi3 ) |
| r244637 | r244638 | |
| 3886 | 3950 | ID-0200 |
| 3887 | 3951 | . NGM-200 |
| 3888 | 3952 | NEO-MVS PROGBK1 / NEO-MVS CHA256B |
| 3953 | NEO-MVS PROGBK1 / NEO-MVS CHA256 | |
| 3889 | 3954 | . NGH-200 |
| 3890 | 3955 | ****************************************/ |
| 3891 | 3956 | |
| r244637 | r244638 | |
| 3915 | 3980 | ID-0201 |
| 3916 | 3981 | . NGM-201 |
| 3917 | 3982 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 3983 | NEO-MVS PROGBK1 / NEO-MVS CHA256B | |
| 3918 | 3984 | . NGH-201 |
| 3919 | 3985 | ****************************************/ |
| 3920 | 3986 | |
| r244637 | r244638 | |
| 3991 | 4057 | |
| 3992 | 4058 | /**************************************** |
| 3993 | 4059 | ID-0204 |
| 3994 | QP (prototype) | |
| 4060 | QP (prototype) 1997 Success | |
| 3995 | 4061 | ****************************************/ |
| 3996 | 4062 | |
| 3997 | 4063 | /**************************************** |
| r244637 | r244638 | |
| 4031 | 4097 | ID-0207 |
| 4032 | 4098 | . ??M-207 |
| 4033 | 4099 | NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B |
| 4100 | NEO-MVS PROG 4096 / NEO-MVS CHA42G-3B | |
| 4034 | 4101 | ****************************************/ |
| 4035 | 4102 | |
| 4036 | 4103 | ROM_START( neomrdo ) /* MVS ONLY RELEASE */ |
| r244637 | r244638 | |
| 4175 | 4242 | ID-0214 |
| 4176 | 4243 | . NGM-214 |
| 4177 | 4244 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 4245 | NEO-MVS PROGSS3 / NEO-MVS CHA256 | |
| 4178 | 4246 | . NGH-214 |
| 4247 | NEO-AEG PROGBK1Y / NEO-GEO AEG CHA256RY | |
| 4179 | 4248 | ****************************************/ |
| 4180 | 4249 | |
| 4181 | 4250 | ROM_START( kof96 ) /* MVS VERSION */ |
| 4182 | 4251 | ROM_REGION( 0x300000, "maincpu", 0 ) |
| 4183 | 4252 | ROM_LOAD16_WORD_SWAP( "214-p1.p1", 0x000000, 0x100000, CRC(52755d74) SHA1(4232d627f1d2e6ea9fc8cf01571d77d4d5b8a1bb) ) /* TC538200 */ |
| 4184 | 4253 | ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */ |
| 4185 | ||
| 4254 | /* also found sets with ep1 / ep2 / ep3 / ep4 on eprom and 214-P5 on TC5316200; correct chip labels for eproms is unknown */ | |
| 4255 | ||
| 4186 | 4256 | NEO_SFIX_128K( "214-s1.s1", CRC(1254cbdb) SHA1(fce5cf42588298711a3633e9c9c1d4dcb723ac76) ) /* TC531000 */ |
| 4187 | 4257 | |
| 4188 | 4258 | NEO_BIOS_AUDIO_128K( "214-m1.m1", CRC(dabc427c) SHA1(b76722ed142ee7addceb4757424870dbd003e8b3) ) /* TC531001 */ |
| r244637 | r244638 | |
| 4205 | 4275 | ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) ) /* Plane 2,3 */ /* TC5332205 */ |
| 4206 | 4276 | ROM_END |
| 4207 | 4277 | |
| 4208 | ROM_START( kof96h ) | |
| 4278 | ROM_START( kof96h ) /* AES VERSION */ | |
| 4209 | 4279 | ROM_REGION( 0x300000, "maincpu", 0 ) |
| 4210 | 4280 | ROM_LOAD16_WORD_SWAP( "214-pg1.p1", 0x000000, 0x100000, CRC(bd3757c9) SHA1(35392a044117e46c088ff0fdd07d69a3faa4f96e) ) |
| 4211 | 4281 | ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) ) /* TC5316200 */ |
| r244637 | r244638 | |
| 4237 | 4307 | . NGM-215 |
| 4238 | 4308 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 4239 | 4309 | . NGH-215 |
| 4310 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4240 | 4311 | ****************************************/ |
| 4241 | 4312 | |
| 4242 | 4313 | ROM_START( ssideki4 ) |
| r244637 | r244638 | |
| 4268 | 4339 | . ??M-216 |
| 4269 | 4340 | NEO-MVS PROGTOP / NEO-MVS CHA256 |
| 4270 | 4341 | . ??H-216 |
| 4342 | NEO-AEG PROGTOP2Y / NEO-AEG CHA256BY | |
| 4271 | 4343 | ****************************************/ |
| 4272 | 4344 | |
| 4273 | 4345 | ROM_START( kizuna ) |
| r244637 | r244638 | |
| 4346 | 4418 | . ADM-012 |
| 4347 | 4419 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 4348 | 4420 | . ADH-012 |
| 4421 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4349 | 4422 | ****************************************/ |
| 4350 | 4423 | |
| 4351 | 4424 | ROM_START( ninjamas ) |
| r244637 | r244638 | |
| 4485 | 4558 | ID-0221 |
| 4486 | 4559 | . NGM-221 |
| 4487 | 4560 | NEO-MVS PROGBK1 / NEO-MVS CHA256B |
| 4561 | NEO-MVS PROGBK1 / NEO-MVS CHA256 | |
| 4488 | 4562 | . NGH-221 |
| 4489 | 4563 | ****************************************/ |
| 4490 | 4564 | |
| r244637 | r244638 | |
| 4573 | 4647 | . NGM-223 |
| 4574 | 4648 | NEO-MVS PROGBK1 / NEO-MVS CHA256B |
| 4575 | 4649 | . NGH-223 |
| 4650 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4576 | 4651 | ****************************************/ |
| 4577 | 4652 | |
| 4578 | 4653 | ROM_START( rbffspec ) |
| r244637 | r244638 | |
| 4605 | 4680 | ROM_START( rbffspeck ) /* KOREAN VERSION */ |
| 4606 | 4681 | ROM_REGION( 0x500000, "maincpu", 0 ) |
| 4607 | 4682 | ROM_LOAD16_WORD_SWAP( "223-p1k.p1", 0x000000, 0x100000, CRC(b78c8391) SHA1(936b356ac135331b10a37bc10882ec2e4f6b400b) ) |
| 4608 | /* Chip label is correct. They used Cart ID 0124 as 0123 was al | |
| 4683 | /* Chip label is correct. They used Cart ID 0124 as 0123 was already used by quizdaisk */ | |
| 4609 | 4684 | ROM_LOAD16_WORD_SWAP( "223-p2.sp2", 0x100000, 0x400000, CRC(addd8f08) SHA1(abaf5b86c8ec915c07ef2d83fce9ad03acaa4817) ) /* TC5332205 */ |
| 4610 | 4685 | |
| 4611 | 4686 | NEO_SFIX_128K( "223-s1.s1", CRC(7ecd6e8c) SHA1(465455afc4d83cbb118142be4671b2539ffafd79) ) /* TC531000 */ |
| r244637 | r244638 | |
| 4635 | 4710 | . ADM-013 |
| 4636 | 4711 | NEO-MVS PROGBK1 / NEO-MVS CHA256B |
| 4637 | 4712 | . ADH-013 |
| 4713 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4638 | 4714 | ****************************************/ |
| 4639 | 4715 | |
| 4640 | 4716 | ROM_START( twinspri ) |
| r244637 | r244638 | |
| 4700 | 4776 | . NGM-227 |
| 4701 | 4777 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 4702 | 4778 | . NGH-227 |
| 4779 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4703 | 4780 | ****************************************/ |
| 4704 | 4781 | |
| 4705 | 4782 | ROM_START( stakwin2 ) |
| r244637 | r244638 | |
| 4761 | 4838 | . NGM-2300 |
| 4762 | 4839 | NEO-MVS PROGBK1 / NEO-MVS CHA256B |
| 4763 | 4840 | . NGH-2300 |
| 4841 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4764 | 4842 | ****************************************/ |
| 4765 | 4843 | |
| 4766 | 4844 | ROM_START( breakers ) |
| r244637 | r244638 | |
| 4899 | 4977 | . NGM-2330 |
| 4900 | 4978 | NEO-MVS PROGBK1 / NEO-MVS CHA256 |
| 4901 | 4979 | . NGH-2330 |
| 4980 | NEO-AEG PROGBK1Y / NEO-AEG CHA256RY | |
| 4902 | 4981 | ****************************************/ |
| 4903 | 4982 | |
| 4904 | 4983 | ROM_START( magdrop3 ) |
| r244637 | r244638 | |
| 4934 | 5013 | ROM_REGION( 0x500000, "maincpu", 0 ) |
| 4935 | 5014 | ROM_LOAD16_WORD_SWAP( "234-p1.p1", 0x000000, 0x100000, CRC(e123a5a3) SHA1(a3ddabc00feeb54272b145246612ad4632b0e413) ) /* TC538200 */ |
| 4936 | 5015 | ROM_LOAD16_WORD_SWAP( "234-p2.sp2", 0x100000, 0x400000, CRC(0fdc289e) SHA1(1ff31c0b0f4f9ddbedaf4bcf927faaae81892ec7) ) /* TC5332205 */ |
| 4937 | ||
| 5016 | /* also found sets with p1 / sp2 / ep1 / ep2 / m1 on eprom with sticker */ | |
| 5017 | /* chip label is 0234-P1, 0234-SP2, 0234-EP1, 0234-EP2 and 0234-M1 */ | |
| 5018 | ||
| 4938 | 5019 | NEO_SFIX_128K( "234-s1.s1", CRC(95561412) SHA1(995de272f572fd08d909d3d0af4251b9957b3640) ) /* TC531000 */ |
| 4939 | 5020 | |
| 4940 | 5021 | NEO_BIOS_AUDIO_128K( "234-m1.m1", CRC(087628ea) SHA1(48dcf739bb16699af4ab8ed632b7dcb25e470e06) ) /* TC531001 */ |
| r244637 | r244638 | |
| 5151 | 5232 | . NGM-2390 |
| 5152 | 5233 | NEO-MVS PROGBK1 / NEO-MVS CHA512Y |
| 5153 | 5234 | . NGH-2390 |
| 5235 | NEO-AEG PROGBK1Y / NEO-AEG CHA512Y | |
| 5154 | 5236 | ****************************************/ |
| 5155 | 5237 | |
| 5156 | 5238 | ROM_START( blazstar ) |
| r244637 | r244638 | |
| 5269 | 5351 | ID-0241 |
| 5270 | 5352 | . NGM-2410 |
| 5271 | 5353 | NEO-MVS PROGBK1 / NEO-MVS CHA512Y |
| 5354 | NEO-MVS PROGBK1 / NEO-MVS CHA256 | |
| 5272 | 5355 | . NGH-2410 |
| 5273 | 5356 | NEO-AEG PROGBK1Y / NEO-AEG CHA512Y |
| 5274 | 5357 | ****************************************/ |
| r244637 | r244638 | |
| 5289 | 5372 | NO_DELTAT_REGION |
| 5290 | 5373 | |
| 5291 | 5374 | ROM_REGION( 0x2000000, "sprites", 0 ) |
| 5375 | /* Different layout with 8xC (16 mbit) also exists; naming sheme 241-Cx */ | |
| 5292 | 5376 | ROM_LOAD16_BYTE( "241-c1.c1", 0x0000000, 0x800000, CRC(394b5e0d) SHA1(4549926f5054ee6aa7689cf920be0327e3908a50) ) /* Plane 0,1 */ /* TC5364205 */ |
| 5293 | 5377 | ROM_LOAD16_BYTE( "241-c2.c2", 0x0000001, 0x800000, CRC(e5806221) SHA1(1e5475cfab129c77acc610f09369ca42ba5aafa5) ) /* Plane 2,3 */ /* TC5364205 */ |
| 5294 | 5378 | ROM_LOAD16_BYTE( "241-c3.c3", 0x1000000, 0x800000, CRC(9f6bfa6f) SHA1(a4319b48004e723f81a980887678e3e296049a53) ) /* Plane 0,1 */ /* TC5364205 */ |
| r244637 | r244638 | |
| 5298 | 5382 | /**************************************** |
| 5299 | 5383 | ID-0242 |
| 5300 | 5384 | . NGM-2420 |
| 5301 | NEO-MVS PROGSF1 (protected board) / NEO-MVS CHA512Y | |
| 5302 | NEO-MVS PROGSF1E (protected board) / NEO-MVS CHA512Y | |
| 5385 | NEO-MVS PROGSF1 (1998.6.17) (protected board) / NEO-MVS CHA512Y | |
| 5386 | NEO-MVS PROGSF1E (1998.6.18) (protected board) / NEO-MVS CHA512Y | |
| 5303 | 5387 | NEO-MVS PROGBK1 / NEO-MVS CHA512Y |
| 5304 | 5388 | . NGH-2420 |
| 5305 | 5389 | NEO-AEG PROGBK1Y / NEO-AEG CHA512Y |
| r244637 | r244638 | |
| 5422 | 5506 | ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) ) /* Plane 2,3 */ /* TC5364205 */ |
| 5423 | 5507 | ROM_END |
| 5424 | 5508 | |
| 5425 | ROM_START( kof98h ) /* AES VERSION */ | |
| 5509 | ROM_START( kof98h ) /* MVS AND AES VERSION */ | |
| 5426 | 5510 | ROM_REGION( 0x500000, "maincpu", 0 ) |
| 5427 | 5511 | ROM_LOAD16_WORD_SWAP( "242-pn1.p1", 0x000000, 0x100000, CRC(61ac868a) SHA1(26577264aa72d6af272952a876fcd3775f53e3fa) ) /* TC538200 */ |
| 5428 | 5512 | ROM_LOAD16_WORD_SWAP( "242-p2.sp2", 0x100000, 0x400000, CRC(980aba4c) SHA1(5e735929ec6c3ca5b2efae3c7de47bcbb8ade2c5) ) /* TC5332205 */ |
| r244637 | r244638 | |
| 5689 | 5773 | ID-0251 |
| 5690 | 5774 | . NGM-2510 |
| 5691 | 5775 | SMA protected version found on: |
| 5692 | NEO-MVS PROGLBA (NEO-SMA) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) | |
| 5776 | NEO-MVS PROGLBA (NEO-SMA) (1999.4.12) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) | |
| 5693 | 5777 | Non SMA protected version found on: |
| 5694 | 5778 | NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) |
| 5695 | 5779 | . NGH-2510 |
| 5696 | NEO-AEG PROGLBA / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 5780 | NEO-AEG PROGLBA (1999.7.6) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 5697 | 5781 | ****************************************/ |
| 5698 | 5782 | |
| 5699 | 5783 | ROM_START( kof99 ) /* Original Version - Encrypted Code & GFX */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 5908 | 5992 | /**************************************** |
| 5909 | 5993 | ID-0253 |
| 5910 | 5994 | . NGM-2530 |
| 5911 | NEO-MVS PROGLBA (NEO-SMA) | |
| 5995 | NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) | |
| 5912 | 5996 | . NGH-2530 |
| 5913 | NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 5997 | NEO-AEG PROGLBA (1999.7.6) (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 5914 | 5998 | ****************************************/ |
| 5915 | 5999 | |
| 5916 | 6000 | ROM_START( garou ) /* Original Version - Encrypted GFX */ /* MVS VERSION - later revision */ |
| r244637 | r244638 | |
| 6096 | 6180 | ID-0256 |
| 6097 | 6181 | . NGM-2560 |
| 6098 | 6182 | SMA protected version found on: |
| 6099 | NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) | |
| 6183 | NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) | |
| 6100 | 6184 | Non SMA protected version found on: |
| 6101 | 6185 | NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) |
| 6102 | 6186 | . NGH-2560 |
| 6187 | NEO-AEG PROGLBA (1999.7.6) (NEO-SMA)(LBA-SUB) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 6103 | 6188 | ****************************************/ |
| 6104 | 6189 | |
| 6105 | 6190 | ROM_START( mslug3 ) /* Original Version - Encrypted Code & GFX */ /* revision 2000.4.1 */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 6108 | 6193 | /* The SMA for this release has a green colour marking; the older revision has a white colour marking */ |
| 6109 | 6194 | ROM_LOAD16_WORD_SWAP( "256-pg1.p1", 0x100000, 0x400000, CRC(b07edfd5) SHA1(dcbd9e500bfae98d754e55cdbbbbf9401013f8ee) ) /* TC5332202 */ |
| 6110 | 6195 | ROM_LOAD16_WORD_SWAP( "256-pg2.p2", 0x500000, 0x400000, CRC(6097c26b) SHA1(248ec29d21216f29dc6f5f3f0e1ad1601b3501b6) ) /* TC5332202 */ |
| 6111 | ||
| 6196 | ||
| 6112 | 6197 | ROM_Y_ZOOM |
| 6113 | 6198 | |
| 6114 | 6199 | /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ |
| r244637 | r244638 | |
| 6143 | 6228 | ROM_REGION( 0x500000, "maincpu", 0 ) |
| 6144 | 6229 | ROM_LOAD16_WORD_SWAP( "256-ph1.p1", 0x000000, 0x100000, CRC(9c42ca85) SHA1(7a8f77a89867b889295ae9b9dfd4ba28f02d234d) ) |
| 6145 | 6230 | ROM_LOAD16_WORD_SWAP( "256-ph2.sp2", 0x100000, 0x400000, CRC(1f3d8ce8) SHA1(08b05a8abfb86ec09a5e758d6273acf1489961f9) ) |
| 6146 | ||
| 6231 | /* also found AES set with p1 / p2 on maskrom on NEO-AEG PROGLBA (NEO-SMA); chip labels is 256-PG1 and 256-PG2 */ | |
| 6232 | /* The SMA for this release has a pink color marking */ | |
| 6233 | ||
| 6147 | 6234 | ROM_Y_ZOOM |
| 6148 | 6235 | |
| 6149 | 6236 | /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ |
| r244637 | r244638 | |
| 6178 | 6265 | ID-0257 |
| 6179 | 6266 | . NGM-2570 |
| 6180 | 6267 | SMA protected version found on: |
| 6181 | NEO-MVS PROGLBA (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6268 | NEO-MVS PROGLBA (1999.4.12) (NEO-SMA)(LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6182 | 6269 | Non SMA protected version found on: |
| 6183 | 6270 | NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) |
| 6184 | 6271 | . NGH-2570 |
| r244637 | r244638 | |
| 6330 | 6417 | . NGM-2610 |
| 6331 | 6418 | NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) |
| 6332 | 6419 | . NGH-2610 |
| 6420 | NEO-AEG PROGBK1F / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) | |
| 6333 | 6421 | ****************************************/ |
| 6334 | 6422 | |
| 6335 | 6423 | ROM_START( sengoku3 ) /* Original Version - Encrypted GFX */ |
| r244637 | r244638 | |
| 6449 | 6537 | . NGM-2630 |
| 6450 | 6538 | NEO-MVS PROGBK2 (NEO-PCM2 SNK)/ NEO-MVS CHAFIO (NEO-CMC 7050) |
| 6451 | 6539 | . NGH-2630 |
| 6452 | NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6540 | NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6453 | 6541 | ****************************************/ |
| 6454 | 6542 | |
| 6455 | 6543 | ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 6524 | 6612 | /**************************************** |
| 6525 | 6613 | ID-0264 |
| 6526 | 6614 | . NGM-264? |
| 6527 | NEO-MVS PROGBK2 (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6615 | NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6528 | 6616 | . NGH-2641 |
| 6529 | NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6617 | NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6530 | 6618 | - Distribution by BrezzaSoft |
| 6531 | 6619 | ****************************************/ |
| 6532 | 6620 | |
| r244637 | r244638 | |
| 6567 | 6655 | /**************************************** |
| 6568 | 6656 | ID-0265 |
| 6569 | 6657 | . NGM-2650 |
| 6570 | NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6658 | NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6571 | 6659 | . NGH-2650 |
| 6572 | 6660 | NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) |
| 6573 | 6661 | ****************************************/ |
| r244637 | r244638 | |
| 6610 | 6698 | /**************************************** |
| 6611 | 6699 | ID-0266 |
| 6612 | 6700 | . NGM-2660 |
| 6613 | NEO-MVS PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6701 | NEO-MVS PROGBK2 (2000.3.21) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 6614 | 6702 | . NGH-2660 |
| 6615 | NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6703 | NEO-AEG PROGBK2 (2002.4.1) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) | |
| 6616 | 6704 | ****************************************/ |
| 6617 | 6705 | |
| 6618 | 6706 | ROM_START( matrim ) /* Encrypted Set */ /* MVS AND AES VERSION */ |
| r244637 | r244638 | |
| 6659 | 6747 | ROM_START( pnyaa ) /* Encrypted Set */ /* MVS ONLY RELEASE */ |
| 6660 | 6748 | ROM_REGION( 0x100000, "maincpu", 0 ) |
| 6661 | 6749 | ROM_LOAD16_WORD_SWAP( "267-p1.p1", 0x000000, 0x100000, CRC(112fe2c0) SHA1(01420e051f0bdbd4f68ce306a3738161b96f8ba8) ) /* mask rom TC538200 */ |
| 6662 | ||
| 6750 | /* also found set with p1 and m1 on eprom with sticker; chip labels is PN 2.02 and M1 */ | |
| 6751 | ||
| 6663 | 6752 | ROM_Y_ZOOM |
| 6664 | 6753 | |
| 6665 | 6754 | /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ |
| r244637 | r244638 | |
| 6686 | 6775 | /**************************************** |
| 6687 | 6776 | ID-0268 |
| 6688 | 6777 | . NGM-2680 |
| 6689 | NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6778 | NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6690 | 6779 | . NGH-2680 |
| 6780 | NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6691 | 6781 | ****************************************/ |
| 6692 | 6782 | |
| 6693 | 6783 | ROM_START( mslug5 ) /* Encrypted Set */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 6729 | 6819 | ROM_REGION( 0x800000, "maincpu", 0 ) |
| 6730 | 6820 | ROM_LOAD32_WORD_SWAP( "268-p1c.p1", 0x000000, 0x400000, CRC(3636690a) SHA1(e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3) ) |
| 6731 | 6821 | ROM_LOAD32_WORD_SWAP( "268-p2c.p2", 0x000002, 0x400000, CRC(8dfc47a2) SHA1(27d618cfbd0107a4d2a836797e967b39d2eb4851) ) |
| 6732 | ||
| 6822 | /* also found AES set with p1 / p2 on maskrom; chip labels is 268-P1CR2 and 268-P2CR2 */ | |
| 6823 | ||
| 6733 | 6824 | ROM_Y_ZOOM |
| 6734 | 6825 | |
| 6735 | 6826 | /* The Encrypted Boards do not have an s1 rom, data for it comes from the Cx ROMs */ |
| r244637 | r244638 | |
| 6804 | 6895 | /**************************************** |
| 6805 | 6896 | ID-0270 |
| 6806 | 6897 | . NGM-2700 |
| 6807 | NEO-MVS PROGBK2R (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6898 | NEO-MVS PROGBK2R (2003.8.26) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6808 | 6899 | . NGH-2700 |
| 6809 | NEO-AEG PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6900 | NEO-AEG PROGBK2S (2003.10.16) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6810 | 6901 | ****************************************/ |
| 6811 | 6902 | |
| 6812 | 6903 | ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 6882 | 6973 | /**************************************** |
| 6883 | 6974 | ID-0271 |
| 6884 | 6975 | . NGM-2710 |
| 6885 | NEO-MVS PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6976 | NEO-MVS PROGBK3S (2003.10.1) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6886 | 6977 | . NGH-2710 |
| 6887 | NEO-AEG PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6978 | NEO-AEG PROGBK3S (2003.10.6) (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6888 | 6979 | ****************************************/ |
| 6889 | 6980 | |
| 6890 | 6981 | ROM_START( kof2003 ) /* Encrypted Code + Sound + GFX Roms */ /* MVS VERSION */ |
| r244637 | r244638 | |
| 6963 | 7054 | /**************************************** |
| 6964 | 7055 | ID-0272 |
| 6965 | 7056 | . NGM-2720 |
| 6966 | NEO-MVS PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 7057 | NEO-MVS PROGBK2S (2003.10.18) (NEO-PCM2 PLAYMORE) / NEO-MVS CHAFIO (2003.7.24) (NEO-CMC 7050) | |
| 6967 | 7058 | . NGH-2720 |
| 6968 | 7059 | ****************************************/ |
| 6969 | 7060 | |
| r244637 | r244638 | |
| 7097 | 7188 | /**************************************** |
| 7098 | 7189 | B-J-02 |
| 7099 | 7190 | . ???-???? |
| 7100 | MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) | |
| 7191 | MVS PROGV (2000.11.17) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) | |
| 7101 | 7192 | ****************************************/ |
| 7102 | 7193 | |
| 7103 | 7194 | ROM_START( jockeygp ) /* MVS ONLY RELEASE */ |
| r244637 | r244638 | |
| 9780 | 9871 | GAME( 1999, ctomaday, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Visco", "Captain Tomaday", GAME_SUPPORTS_SAVE ) |
| 9781 | 9872 | GAME( 1999, ganryu, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, ganryu, ROT0, "Visco", "Ganryu / Musashi Ganryuki" , GAME_SUPPORTS_SAVE ) /* Encrypted GFX */ |
| 9782 | 9873 | GAME( 2000, bangbead, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, bangbead, ROT0, "Visco", "Bang Bead", GAME_SUPPORTS_SAVE ) |
| 9874 | GAME( 2000, b2b, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Visco", "Bang Bang Busters (2010 NCI release)" , GAME_SUPPORTS_SAVE ) | |
| 9783 | 9875 | |
| 9784 | 9876 | /* Mega Enterprise */ |
| 9785 | 9877 | GAME( 2002, mslug4, neogeo, neogeo_noslot, neogeo, neogeo_noslot_state, mslug4, ROT0, "Mega / Playmore", "Metal Slug 4 (NGM-2630)", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
| 9813 | 9905 | // Fast Striker (c)2010 - MVS/AES |
| 9814 | 9906 | // Fast Striker 1.5 (c)2010 - MVS/AES |
| 9815 | 9907 | // GunLord (c)2012 - MVS/AES |
| 9908 | // Neo XYX (c)2013 - MVS/AES | |
| 9909 | // Razion (c)2014 - MVS/AES? | |
| 9816 | 9910 | |
| 9817 | 9911 | /* N.C.I - LE CORTEX */ |
| 9818 | // Bang Bang Busters (c)2010 - MVS?/AES | |
| 9819 | // Treasure of the Caribbean (c)2011 - MVS?/AES | |
| 9912 | // Treasure of the Caribbean (c)2011 - AES only (no credits system if ran on an MVS, Freeplay) | |
| 9913 | ||
| 9914 | /* NEOBITZ */ | |
| 9915 | // Knight's Chance (c)2014 - MVS/AES |
| r244637 | r244638 | |
|---|---|---|
| 825 | 825 | ROM_LOAD16_BYTE( "b20-04.39", 0x20000, 0x10000, CRC(216b4838) SHA1(2851cae00bb3e32e20f35fdab8ed6f149e658363) ) |
| 826 | 826 | ROM_LOAD16_BYTE( "b20-20.29", 0x20001, 0x10000, CRC(d244431a) SHA1(cb6c1d330a526f05c205f68247328161b8d4a1ba) ) |
| 827 | 827 | |
| 828 | ROM_REGION( 0x20000, "audiocpu", 0 ) /* sound cpu */ | |
| 829 | ROM_LOAD( "b20-07.10", 0x00000, 0x04000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) ) | |
| 830 | ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ | |
| 828 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ | |
| 829 | ROM_LOAD( "b20-07.10", 0x00000, 0x10000, CRC(45c7ace3) SHA1(06f7393f6b973b7735c27e8380cb4148650cfc16) ) | |
| 831 | 830 | |
| 832 | 831 | ROM_REGION( 0x80000, "gfx1", 0 ) |
| 833 | 832 | ROM_LOAD( "b20-13.13", 0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) ) /* SCR tiles (8 x 8) */ |
| r244637 | r244638 | |
|---|---|---|
| 7704 | 7704 | kof2000n // 0257 (c) 2000 SNK |
| 7705 | 7705 | // 0258 SNK vs. Capcom? |
| 7706 | 7706 | bangbead // 0259 (c) 2000 Visco |
| 7707 | b2b // 0071 (c) 2000 Visco (released by NCI in 2010) | |
| 7707 | 7708 | nitd // 0260 (c) 2000 Eleven / Gavaking |
| 7708 | 7709 | nitdbl // bootleg |
| 7709 | 7710 | sengoku3 // 0261 (c) 2001 Noise Factory / SNK |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 27 | class cnsector_state : public driver_device | |
| 28 | { | |
| 29 | public: | |
| 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 | ||
| 69 | void 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 | ||
| 99 | TIMER_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 | ||
| 117 | READ8_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 | ||
| 129 | WRITE16_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 | ||
| 141 | WRITE16_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 | ||
| 156 | static 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") | |
| 186 | INPUT_PORTS_END | |
| 187 | ||
| 188 | ||
| 189 | ||
| 190 | /*************************************************************************** | |
| 191 | ||
| 192 | Machine Config | |
| 193 | ||
| 194 | ***************************************************************************/ | |
| 195 | ||
| 196 | void 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 | ||
| 214 | static 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! */ | |
| 229 | MACHINE_CONFIG_END | |
| 230 | ||
| 231 | ||
| 232 | ||
| 233 | /*************************************************************************** | |
| 234 | ||
| 235 | Game driver(s) | |
| 236 | ||
| 237 | ***************************************************************************/ | |
| 238 | ||
| 239 | ROM_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) ) | |
| 251 | ROM_END | |
| 252 | ||
| 253 | ||
| 254 | CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 30 | class elecdet_state : public driver_device | |
| 31 | { | |
| 32 | public: | |
| 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 | ||
| 79 | void 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 | ||
| 109 | TIMER_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 | ||
| 127 | READ8_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 | ||
| 143 | WRITE16_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 | ||
| 156 | WRITE16_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 | ||
| 172 | INPUT_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 | ||
| 187 | static 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) | |
| 223 | INPUT_PORTS_END | |
| 224 | ||
| 225 | ||
| 226 | ||
| 227 | /*************************************************************************** | |
| 228 | ||
| 229 | Machine Config | |
| 230 | ||
| 231 | ***************************************************************************/ | |
| 232 | ||
| 233 | WRITE_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 | ||
| 244 | void elecdet_state::machine_reset() | |
| 245 | { | |
| 246 | m_power_on = true; | |
| 247 | } | |
| 248 | ||
| 249 | void 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 | ||
| 269 | static 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) | |
| 288 | MACHINE_CONFIG_END | |
| 289 | ||
| 290 | ||
| 291 | ||
| 292 | /*************************************************************************** | |
| 293 | ||
| 294 | Game driver(s) | |
| 295 | ||
| 296 | ***************************************************************************/ | |
| 297 | ||
| 298 | ROM_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) ) | |
| 310 | ROM_END | |
| 311 | ||
| 312 | ||
| 313 | CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
|---|---|---|
| 14 | 14 | #include "sound/speaker.h" |
| 15 | 15 | |
| 16 | 16 | #include "amaztron.lh" |
| 17 | #include "bankshot.lh" | |
| 18 | #include "cnsector.lh" | |
| 17 | 19 | #include "ebball.lh" |
| 20 | #include "elecdet.lh" | |
| 18 | 21 | #include "comp4.lh" |
| 22 | #include "mathmagi.lh" | |
| 23 | #include "merlin.lh" | |
| 19 | 24 | #include "simon.lh" |
| 25 | #include "splitsec.lh" | |
| 26 | #include "starwbc.lh" | |
| 27 | #include "stopthie.lh" | |
| 28 | #include "tandy12.lh" | |
| 20 | 29 | #include "tc4.lh" |
| 21 | 30 | |
| 22 | 31 | |
| r244637 | r244638 | |
| 28 | 37 | m_maincpu(*this, "maincpu"), |
| 29 | 38 | m_inp_matrix(*this, "IN"), |
| 30 | 39 | m_speaker(*this, "speaker"), |
| 40 | m_display_wait(33), | |
| 31 | 41 | m_display_maxy(1), |
| 32 | m_display_maxx(0), | |
| 33 | m_display_wait(50) | |
| 42 | m_display_maxx(0) | |
| 34 | 43 | { } |
| 35 | 44 | |
| 45 | // devices | |
| 36 | 46 | required_device<cpu_device> m_maincpu; |
| 37 | 47 | optional_ioport_array<7> m_inp_matrix; // max 7 |
| 38 | 48 | optional_device<speaker_sound_device> m_speaker; |
| 39 | 49 | |
| 50 | // misc common | |
| 40 | 51 | UINT16 m_r; |
| 41 | 52 | UINT16 m_o; |
| 42 | 53 | UINT16 m_inp_mux; |
| 54 | bool m_power_on; | |
| 43 | 55 | |
| 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; | |
| 44 | 65 | int m_display_maxy; |
| 45 | 66 | int m_display_maxx; |
| 46 | int m_display_wait; | |
| 47 | 67 | |
| 48 | 68 | UINT32 m_display_state[0x20]; |
| 49 | 69 | UINT32 m_display_cache[0x20]; |
| r244637 | r244638 | |
| 51 | 71 | UINT16 m_7seg_mask[0x20]; |
| 52 | 72 | |
| 53 | 73 | TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); |
| 54 | bool index_is_7segled(int index); | |
| 55 | 74 | void display_update(); |
| 56 | 75 | |
| 57 | UINT8 read_inputs(int columns); | |
| 76 | // game-specific handlers | |
| 77 | void mathmagi_display(); | |
| 78 | DECLARE_READ8_MEMBER(mathmagi_read_k); | |
| 79 | DECLARE_WRITE16_MEMBER(mathmagi_write_r); | |
| 80 | DECLARE_WRITE16_MEMBER(mathmagi_write_o); | |
| 58 | 81 | |
| 59 | // game-specific handlers | |
| 60 | 82 | void amaztron_display(); |
| 61 | 83 | DECLARE_READ8_MEMBER(amaztron_read_k); |
| 84 | DECLARE_WRITE16_MEMBER(amaztron_write_r); | |
| 62 | 85 | DECLARE_WRITE16_MEMBER(amaztron_write_o); |
| 63 | DECLARE_WRITE16_MEMBER(amaztron_write_r); | |
| 64 | 86 | |
| 65 | 87 | void tc4_display(); |
| 66 | 88 | DECLARE_READ8_MEMBER(tc4_read_k); |
| 89 | DECLARE_WRITE16_MEMBER(tc4_write_r); | |
| 67 | 90 | DECLARE_WRITE16_MEMBER(tc4_write_o); |
| 68 | DECLARE_WRITE16_MEMBER(tc4_write_r); | |
| 69 | 91 | |
| 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 | ||
| 70 | 101 | DECLARE_READ8_MEMBER(comp4_read_k); |
| 102 | DECLARE_WRITE16_MEMBER(comp4_write_r); | |
| 71 | 103 | DECLARE_WRITE16_MEMBER(comp4_write_o); |
| 72 | DECLARE_WRITE16_MEMBER(comp4_write_r); | |
| 73 | 104 | |
| 74 | 105 | DECLARE_READ8_MEMBER(simon_read_k); |
| 106 | DECLARE_WRITE16_MEMBER(simon_write_r); | |
| 75 | 107 | DECLARE_WRITE16_MEMBER(simon_write_o); |
| 76 | DECLARE_WRITE16_MEMBER(simon_write_r); | |
| 77 | 108 | |
| 78 | virtual void machine_start(); | |
| 109 | DECLARE_READ8_MEMBER(cnsector_read_k); | |
| 110 | DECLARE_WRITE16_MEMBER(cnsector_write_r); | |
| 111 | DECLARE_WRITE16_MEMBER(cnsector_write_o); | |
| 112 | ||
| 113 | DECLARE_READ8_MEMBER(merlin_read_k); | |
| 114 | DECLARE_WRITE16_MEMBER(merlin_write_r); | |
| 115 | DECLARE_WRITE16_MEMBER(merlin_write_o); | |
| 116 | ||
| 117 | DECLARE_READ8_MEMBER(stopthief_read_k); | |
| 118 | DECLARE_WRITE16_MEMBER(stopthief_write_r); | |
| 119 | DECLARE_WRITE16_MEMBER(stopthief_write_o); | |
| 120 | ||
| 121 | void bankshot_display(); | |
| 122 | DECLARE_READ8_MEMBER(bankshot_read_k); | |
| 123 | DECLARE_WRITE16_MEMBER(bankshot_write_r); | |
| 124 | DECLARE_WRITE16_MEMBER(bankshot_write_o); | |
| 125 | ||
| 126 | void splitsec_display(); | |
| 127 | DECLARE_READ8_MEMBER(splitsec_read_k); | |
| 128 | DECLARE_WRITE16_MEMBER(splitsec_write_r); | |
| 129 | DECLARE_WRITE16_MEMBER(splitsec_write_o); | |
| 130 | ||
| 131 | void tandy12_display(); | |
| 132 | DECLARE_READ8_MEMBER(tandy12_read_k); | |
| 133 | DECLARE_WRITE16_MEMBER(tandy12_write_r); | |
| 134 | DECLARE_WRITE16_MEMBER(tandy12_write_o); | |
| 135 | ||
| 136 | DECLARE_READ8_MEMBER(unk3403_read_k); | |
| 137 | DECLARE_WRITE16_MEMBER(unk3403_write_r); | |
| 138 | DECLARE_WRITE16_MEMBER(unk3403_write_o); | |
| 79 | 139 | }; |
| 80 | 140 | |
| 81 | 141 | |
| r244637 | r244638 | |
| 86 | 146 | memset(m_display_cache, 0, sizeof(m_display_cache)); |
| 87 | 147 | memset(m_display_decay, 0, sizeof(m_display_decay)); |
| 88 | 148 | memset(m_7seg_mask, 0, sizeof(m_7seg_mask)); |
| 89 | ||
| 149 | ||
| 90 | 150 | m_o = 0; |
| 91 | 151 | m_r = 0; |
| 92 | 152 | m_inp_mux = 0; |
| 153 | m_power_on = false; | |
| 93 | 154 | |
| 94 | 155 | // register for savestates |
| 95 | 156 | save_item(NAME(m_display_maxy)); |
| r244637 | r244638 | |
| 104 | 165 | save_item(NAME(m_o)); |
| 105 | 166 | save_item(NAME(m_r)); |
| 106 | 167 | save_item(NAME(m_inp_mux)); |
| 168 | save_item(NAME(m_power_on)); | |
| 107 | 169 | } |
| 108 | 170 | |
| 109 | 171 | |
| 172 | void hh_tms1k_state::machine_reset() | |
| 173 | { | |
| 174 | m_power_on = true; | |
| 175 | } | |
| 176 | ||
| 110 | 177 | /*************************************************************************** |
| 111 | 178 | |
| 112 | 179 | Helper Functions |
| 113 | 180 | |
| 114 | 181 | ***************************************************************************/ |
| 115 | 182 | |
| 183 | // LED segments | |
| 184 | enum | |
| 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 | }; | |
| 116 | 195 | |
| 117 | 196 | // The device strobes the outputs very fast, it is unnoticeable to the user. |
| 118 | 197 | // To prevent flickering here, we need to simulate a decay. |
| r244637 | r244638 | |
| 129 | 208 | for (int x = 0; x < m_display_maxx; x++) |
| 130 | 209 | { |
| 131 | 210 | // turn on powered segments |
| 132 | if (m_display_state[y] >> x & 1) | |
| 211 | if (m_power_on && m_display_state[y] >> x & 1) | |
| 133 | 212 | m_display_decay[y][x] = m_display_wait; |
| 134 | 213 | |
| 135 | 214 | // determine active state |
| r244637 | r244638 | |
| 177 | 256 | return k; |
| 178 | 257 | } |
| 179 | 258 | |
| 259 | INPUT_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 | } | |
| 180 | 264 | |
| 265 | WRITE_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 | } | |
| 181 | 274 | |
| 182 | 275 | /*************************************************************************** |
| 183 | 276 | |
| r244637 | r244638 | |
| 187 | 280 | |
| 188 | 281 | /*************************************************************************** |
| 189 | 282 | |
| 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 | ||
| 308 | void 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 | ||
| 329 | READ8_MEMBER(hh_tms1k_state::mathmagi_read_k) | |
| 330 | { | |
| 331 | return read_inputs(6); | |
| 332 | } | |
| 333 | ||
| 334 | ||
| 335 | WRITE16_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 | ||
| 345 | WRITE16_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 | ||
| 362 | static 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 ) | |
| 400 | INPUT_PORTS_END | |
| 401 | ||
| 402 | static 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 | ||
| 439 | static 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! */ | |
| 454 | MACHINE_CONFIG_END | |
| 455 | ||
| 456 | ||
| 457 | ||
| 458 | ||
| 459 | ||
| 460 | /*************************************************************************** | |
| 461 | ||
| 190 | 462 | Coleco Amaze-A-Tron, by Ralph Baer |
| 191 | 463 | * TMS1100 MCU, labeled MP3405(die label too) |
| 192 | 464 | |
| r244637 | r244638 | |
| 209 | 481 | m_display_state[y] = (m_r >> (y + 8) & 1) ? m_o : 0; |
| 210 | 482 | } |
| 211 | 483 | |
| 212 | // R6,R7: lamps -> lamp20, | |
| 484 | // R6,R7: lamps (-> lamp20,21) | |
| 213 | 485 | m_display_state[2] = m_r >> 6 & 3; |
| 214 | 486 | |
| 215 | 487 | display_update(); |
| r244637 | r244638 | |
| 296 | 568 | /* basic machine hardware */ |
| 297 | 569 | MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K?, C=100pf -> ~350kHz |
| 298 | 570 | 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)) | |
| 299 | 572 | 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)) | |
| 301 | 573 | |
| 302 | 574 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 303 | ||
| 304 | 575 | MCFG_DEFAULT_LAYOUT(layout_amaztron) |
| 305 | 576 | |
| 306 | 577 | /* no video! */ |
| r244637 | r244638 | |
| 354 | 625 | |
| 355 | 626 | void hh_tms1k_state::tc4_display() |
| 356 | 627 | { |
| 628 | m_display_wait = 50; | |
| 357 | 629 | m_display_maxy = 10; |
| 358 | 630 | m_display_maxx = 9; |
| 359 | 631 | |
| r244637 | r244638 | |
| 380 | 652 | return k; |
| 381 | 653 | } |
| 382 | 654 | |
| 383 | WRITE16_MEMBER(hh_tms1k_state::tc4_write_o) | |
| 384 | { | |
| 385 | // O0-O7: leds/7segment | |
| 386 | m_o = data; | |
| 387 | tc4_display(); | |
| 388 | } | |
| 389 | ||
| 390 | 655 | WRITE16_MEMBER(hh_tms1k_state::tc4_write_r) |
| 391 | 656 | { |
| 392 | 657 | // R10: speaker out |
| r244637 | r244638 | |
| 402 | 667 | tc4_display(); |
| 403 | 668 | } |
| 404 | 669 | |
| 670 | WRITE16_MEMBER(hh_tms1k_state::tc4_write_o) | |
| 671 | { | |
| 672 | // O0-O7: leds/7segment | |
| 673 | m_o = data; | |
| 674 | tc4_display(); | |
| 675 | } | |
| 405 | 676 | |
| 677 | ||
| 406 | 678 | static INPUT_PORTS_START( tc4 ) |
| 407 | 679 | PORT_START("IN.0") // R0 |
| 408 | 680 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Pass/Shoot Button 3") // right |
| r244637 | r244638 | |
| 453 | 725 | /* basic machine hardware */ |
| 454 | 726 | MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf, but unknown RC curve |
| 455 | 727 | 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)) | |
| 456 | 729 | 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)) | |
| 458 | 730 | |
| 459 | 731 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 460 | ||
| 461 | 732 | MCFG_DEFAULT_LAYOUT(layout_tc4) |
| 462 | 733 | |
| 463 | 734 | /* no video! */ |
| r244637 | r244638 | |
| 469 | 740 | MACHINE_CONFIG_END |
| 470 | 741 | |
| 471 | 742 | |
| 743 | /*************************************************************************** | |
| 472 | 744 | |
| 745 | Entex Baseball | |
| 746 | * TMS1000NLP MP0914 (die labeled MP0914A) | |
| 747 | ||
| 748 | ***************************************************************************/ | |
| 749 | ||
| 750 | // inputs | |
| 751 | static INPUT_PORTS_START( ebball ) | |
| 752 | INPUT_PORTS_END | |
| 753 | ||
| 754 | // machine config | |
| 755 | static 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) | |
| 768 | MACHINE_CONFIG_END | |
| 769 | ||
| 770 | ||
| 771 | ||
| 473 | 772 | /*************************************************************************** |
| 474 | 773 | |
| 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 | ||
| 790 | READ8_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 | ||
| 796 | WRITE16_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 | ||
| 815 | WRITE16_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 | ||
| 835 | static 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) | |
| 871 | INPUT_PORTS_END | |
| 872 | ||
| 873 | ||
| 874 | static 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) | |
| 892 | MACHINE_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 | ||
| 909 | void 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 | ||
| 927 | READ8_MEMBER(hh_tms1k_state::starwbc_read_k) | |
| 928 | { | |
| 929 | return read_inputs(5); | |
| 930 | } | |
| 931 | ||
| 932 | WRITE16_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 | ||
| 945 | WRITE16_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 | ||
| 964 | static 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") | |
| 994 | INPUT_PORTS_END | |
| 995 | ||
| 996 | static 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) | |
| 1013 | MACHINE_CONFIG_END | |
| 1014 | ||
| 1015 | ||
| 1016 | ||
| 1017 | ||
| 1018 | ||
| 1019 | /*************************************************************************** | |
| 1020 | ||
| 475 | 1021 | Milton Bradley Comp IV |
| 476 | 1022 | * TMC0904NL CP0904A (die labeled 4A0970D-04A) |
| 477 | 1023 | |
| r244637 | r244638 | |
| 542 | 1088 | /* basic machine hardware */ |
| 543 | 1089 | MCFG_CPU_ADD("maincpu", TMS0970, 250000) // approximation - unknown freq |
| 544 | 1090 | 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)) | |
| 545 | 1092 | 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)) | |
| 547 | 1093 | |
| 548 | 1094 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 549 | ||
| 550 | 1095 | MCFG_DEFAULT_LAYOUT(layout_comp4) |
| 551 | 1096 | |
| 552 | 1097 | /* no video! */ |
| r244637 | r244638 | |
| 572 | 1117 | |
| 573 | 1118 | ***************************************************************************/ |
| 574 | 1119 | |
| 575 | ||
| 576 | ||
| 577 | ||
| 578 | ||
| 579 | /*************************************************************************** | |
| 580 | ||
| 581 | I/O | |
| 582 | ||
| 583 | ***************************************************************************/ | |
| 584 | ||
| 585 | 1120 | READ8_MEMBER(hh_tms1k_state::simon_read_k) |
| 586 | 1121 | { |
| 587 | 1122 | return read_inputs(4); |
| r244637 | r244638 | |
| 647 | 1182 | /* basic machine hardware */ |
| 648 | 1183 | MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=33K, C=100pf -> ~350kHz |
| 649 | 1184 | 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)) | |
| 650 | 1186 | 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)) | |
| 652 | 1187 | |
| 653 | 1188 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 654 | ||
| 655 | 1189 | MCFG_DEFAULT_LAYOUT(layout_simon) |
| 656 | 1190 | |
| 657 | 1191 | /* no video! */ |
| r244637 | r244638 | |
| 665 | 1199 | |
| 666 | 1200 | |
| 667 | 1201 | |
| 1202 | /*************************************************************************** | |
| 668 | 1203 | |
| 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 | ||
| 1217 | READ8_MEMBER(hh_tms1k_state::cnsector_read_k) | |
| 1218 | { | |
| 1219 | return read_inputs(5); | |
| 1220 | } | |
| 1221 | ||
| 1222 | WRITE16_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 | ||
| 1240 | WRITE16_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 | ||
| 1251 | static 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") | |
| 1281 | INPUT_PORTS_END | |
| 1282 | ||
| 1283 | ||
| 1284 | static 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! */ | |
| 1298 | MACHINE_CONFIG_END | |
| 1299 | ||
| 1300 | ||
| 1301 | ||
| 1302 | ||
| 669 | 1303 | /*************************************************************************** |
| 670 | 1304 | |
| 671 | Entex Baseball | |
| 672 | * TMS1000NLP MP0914 (die labeled MP0914A) | |
| 1305 | Parker Bros Merlin handheld computer game, by Bob Doyle | |
| 1306 | * TMS1100NLL MP3404A-N2 | |
| 673 | 1307 | |
| 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 | ||
| 674 | 1324 | ***************************************************************************/ |
| 675 | 1325 | |
| 676 | // inputs | |
| 677 | static INPUT_PORTS_START( ebball ) | |
| 1326 | READ8_MEMBER(hh_tms1k_state::merlin_read_k) | |
| 1327 | { | |
| 1328 | return read_inputs(4); | |
| 1329 | } | |
| 1330 | ||
| 1331 | WRITE16_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 | ||
| 1346 | WRITE16_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 | ||
| 1359 | static 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") | |
| 678 | 1383 | INPUT_PORTS_END |
| 679 | 1384 | |
| 680 | // machine config | |
| 681 | static MACHINE_CONFIG_START( ebball, hh_tms1k_state ) | |
| 682 | 1385 | |
| 1386 | static const INT16 merlin_speaker_levels[] = { 0, 10922, 21845, 32767 }; | |
| 1387 | ||
| 1388 | ||
| 1389 | static MACHINE_CONFIG_START( merlin, hh_tms1k_state ) | |
| 1390 | ||
| 683 | 1391 | /* basic machine hardware */ |
| 684 | MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz | |
| 1392 | MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz | |
| 1393 | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, merlin_read_k)) | |
| 1394 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, merlin_write_r)) | |
| 1395 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, merlin_write_o)) | |
| 685 | 1396 | |
| 686 | MCFG_DEFAULT_LAYOUT(layout_ebball) | |
| 1397 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) | |
| 1398 | MCFG_DEFAULT_LAYOUT(layout_merlin) | |
| 687 | 1399 | |
| 688 | 1400 | /* no video! */ |
| 689 | 1401 | |
| 690 | 1402 | /* sound hardware */ |
| 691 | 1403 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 692 | 1404 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 1405 | MCFG_SPEAKER_LEVELS(4, merlin_speaker_levels) | |
| 693 | 1406 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 694 | 1407 | MACHINE_CONFIG_END |
| 695 | 1408 | |
| 696 | 1409 | |
| 1410 | /*************************************************************************** | |
| 697 | 1411 | |
| 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 | ||
| 1426 | READ8_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 | ||
| 1432 | WRITE16_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 | ||
| 1451 | WRITE16_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 | ||
| 1471 | static 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) | |
| 1493 | INPUT_PORTS_END | |
| 1494 | ||
| 1495 | static 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) | |
| 1513 | MACHINE_CONFIG_END | |
| 1514 | ||
| 1515 | ||
| 1516 | ||
| 1517 | ||
| 698 | 1518 | /*************************************************************************** |
| 699 | 1519 | |
| 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 | ||
| 1540 | void 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 | ||
| 1552 | READ8_MEMBER(hh_tms1k_state::bankshot_read_k) | |
| 1553 | { | |
| 1554 | return read_inputs(2); | |
| 1555 | } | |
| 1556 | ||
| 1557 | ||
| 1558 | WRITE16_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 | ||
| 1571 | WRITE16_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 | ||
| 1594 | static 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 ) | |
| 1606 | INPUT_PORTS_END | |
| 1607 | ||
| 1608 | ||
| 1609 | static 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) | |
| 1626 | MACHINE_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 | ||
| 1664 | void 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 | ||
| 1676 | READ8_MEMBER(hh_tms1k_state::splitsec_read_k) | |
| 1677 | { | |
| 1678 | return read_inputs(2); | |
| 1679 | } | |
| 1680 | ||
| 1681 | WRITE16_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 | ||
| 1694 | WRITE16_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 | ||
| 1702 | static 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 ) | |
| 1714 | INPUT_PORTS_END | |
| 1715 | ||
| 1716 | static 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) | |
| 1733 | MACHINE_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 | ||
| 1767 | void 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 | ||
| 1776 | READ8_MEMBER(hh_tms1k_state::tandy12_read_k) | |
| 1777 | { | |
| 1778 | return read_inputs(5); | |
| 1779 | } | |
| 1780 | ||
| 1781 | WRITE16_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 | ||
| 1794 | WRITE16_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 | ||
| 1822 | static 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") | |
| 1852 | INPUT_PORTS_END | |
| 1853 | ||
| 1854 | ||
| 1855 | static 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 | ||
| 1868 | static 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) | |
| 1886 | MACHINE_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 | ||
| 1904 | READ8_MEMBER(hh_tms1k_state::unk3403_read_k) | |
| 1905 | { | |
| 1906 | return read_inputs(4); | |
| 1907 | } | |
| 1908 | ||
| 1909 | WRITE16_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 | ||
| 1921 | WRITE16_MEMBER(hh_tms1k_state::unk3403_write_o) | |
| 1922 | { | |
| 1923 | // ? | |
| 1924 | } | |
| 1925 | ||
| 1926 | static 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) | |
| 1950 | INPUT_PORTS_END | |
| 1951 | ||
| 1952 | static 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 | ||
| 1962 | static 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) | |
| 1977 | MACHINE_CONFIG_END | |
| 1978 | ||
| 1979 | ||
| 1980 | /*************************************************************************** | |
| 1981 | ||
| 700 | 1982 | Game driver(s) |
| 701 | 1983 | |
| 702 | 1984 | ***************************************************************************/ |
| 703 | 1985 | |
| 704 | 1986 | |
| 1987 | ROM_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 ) | |
| 1995 | ROM_END | |
| 1996 | ||
| 1997 | ||
| 705 | 1998 | ROM_START( amaztron ) |
| 706 | 1999 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 707 | 2000 | ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) ) |
| r244637 | r244638 | |
| 737 | 2030 | ROM_END |
| 738 | 2031 | |
| 739 | 2032 | |
| 2033 | ROM_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) ) | |
| 2045 | ROM_END | |
| 2046 | ||
| 2047 | ||
| 2048 | ROM_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) ) | |
| 2056 | ROM_END | |
| 2057 | ||
| 2058 | ROM_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) ) | |
| 2066 | ROM_END | |
| 2067 | ||
| 2068 | ||
| 2069 | ||
| 740 | 2070 | ROM_START( comp4 ) |
| 741 | 2071 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 742 | 2072 | ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) ) |
| r244637 | r244638 | |
| 762 | 2092 | ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) ) |
| 763 | 2093 | ROM_END |
| 764 | 2094 | |
| 2095 | ROM_START( cnsector ) | |
| 2096 | ROM_REGION( 0x0400, "maincpu", 0 ) | |
| 2097 | ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) ) | |
| 765 | 2098 | |
| 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) ) | |
| 2107 | ROM_END | |
| 766 | 2108 | |
| 767 | 2109 | |
| 2110 | ROM_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) ) | |
| 2118 | ROM_END | |
| 2119 | ||
| 2120 | ||
| 2121 | ROM_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) ) | |
| 2133 | ROM_END | |
| 2134 | ||
| 2135 | ROM_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) ) | |
| 2147 | ROM_END | |
| 2148 | ||
| 2149 | ROM_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) ) | |
| 2157 | ROM_END | |
| 2158 | ||
| 2159 | ||
| 2160 | ROM_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) ) | |
| 2168 | ROM_END | |
| 2169 | ||
| 2170 | ||
| 2171 | ROM_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 ) | |
| 2179 | ROM_END | |
| 2180 | ||
| 2181 | ROM_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 ) | |
| 2189 | ROM_END | |
| 2190 | ||
| 2191 | ||
| 2192 | ||
| 2193 | ||
| 2194 | ||
| 2195 | ||
| 2196 | ||
| 2197 | ||
| 2198 | CONS( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) | |
| 2199 | ||
| 768 | 2200 | CONS( 1979, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", GAME_SUPPORTS_SAVE ) |
| 769 | 2201 | CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", GAME_SUPPORTS_SAVE ) |
| 770 | 2202 | |
| 771 | 2203 | CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Entex", "Baseball (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) |
| 772 | 2204 | |
| 2205 | CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE ) | |
| 2206 | ||
| 2207 | CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE ) | |
| 2208 | CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE ) | |
| 2209 | ||
| 773 | 2210 | CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 774 | 2211 | CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", GAME_SUPPORTS_SAVE ) |
| 2212 | ||
| 2213 | ||
| 2214 | CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) | |
| 2215 | CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE ) | |
| 2216 | CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE ) | |
| 2217 | CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) | |
| 2218 | CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE ) | |
| 2219 | CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE ) | |
| 2220 | ||
| 2221 | CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE ) | |
| 2222 | ||
| 2223 | CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) |
| r0 | r244638 | |
|---|---|---|
| 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 | ||
| 17 | class hh_ucom4_state : public driver_device | |
| 18 | { | |
| 19 | public: | |
| 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 | ||
| 62 | void 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 | ||
| 90 | void hh_ucom4_state::machine_reset() | |
| 91 | { | |
| 92 | } | |
| 93 | ||
| 94 | /*************************************************************************** | |
| 95 | ||
| 96 | Helper Functions | |
| 97 | ||
| 98 | ***************************************************************************/ | |
| 99 | ||
| 100 | // LED segments | |
| 101 | #if 0 | |
| 102 | enum | |
| 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 | ||
| 119 | void 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 | ||
| 154 | TIMER_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 | ||
| 189 | static INPUT_PORTS_START( tmpacman ) | |
| 190 | INPUT_PORTS_END | |
| 191 | ||
| 192 | ||
| 193 | static 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) | |
| 206 | MACHINE_CONFIG_END | |
| 207 | ||
| 208 | ||
| 209 | ||
| 210 | ||
| 211 | ||
| 212 | ||
| 213 | ||
| 214 | /*************************************************************************** | |
| 215 | ||
| 216 | Game driver(s) | |
| 217 | ||
| 218 | ***************************************************************************/ | |
| 219 | ||
| 220 | ROM_START( tmpacman ) | |
| 221 | ROM_REGION( 0x0800, "maincpu", 0 ) | |
| 222 | ROM_LOAD( "d553c-160", 0x0000, 0x0800, CRC(b21a8af7) SHA1(e3122be1873ce76a4067386bf250802776f0c2f9) ) | |
| 223 | ROM_END | |
| 224 | ||
| 225 | ||
| 226 | CONS( 1981, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 40 | class mathmagi_state : public driver_device | |
| 41 | { | |
| 42 | public: | |
| 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 | ||
| 69 | READ8_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 | ||
| 84 | WRITE16_MEMBER(mathmagi_state::write_o) | |
| 85 | { | |
| 86 | // O1-O7: led segments A-G | |
| 87 | // O0: N/C | |
| 88 | m_o = data; | |
| 89 | } | |
| 90 | ||
| 91 | WRITE16_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 | ||
| 132 | static 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 ) | |
| 170 | INPUT_PORTS_END | |
| 171 | ||
| 172 | ||
| 173 | ||
| 174 | /*************************************************************************** | |
| 175 | ||
| 176 | Machine Config | |
| 177 | ||
| 178 | ***************************************************************************/ | |
| 179 | ||
| 180 | void 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 | |
| 190 | enum | |
| 191 | { | |
| 192 | lA = 0x02, | |
| 193 | lB = 0x04, | |
| 194 | lC = 0x08, | |
| 195 | lD = 0x10, | |
| 196 | lE = 0x20, | |
| 197 | lF = 0x40, | |
| 198 | lG = 0x80 | |
| 199 | }; | |
| 200 | ||
| 201 | static 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 | ||
| 238 | static 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! */ | |
| 252 | MACHINE_CONFIG_END | |
| 253 | ||
| 254 | ||
| 255 | ||
| 256 | /*************************************************************************** | |
| 257 | ||
| 258 | Game driver(s) | |
| 259 | ||
| 260 | ***************************************************************************/ | |
| 261 | ||
| 262 | ROM_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 ) | |
| 270 | ROM_END | |
| 271 | ||
| 272 | ||
| 273 | COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 38 | class merlin_state : public driver_device | |
| 39 | { | |
| 40 | public: | |
| 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 | ||
| 54 | protected: | |
| 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 | ||
| 69 | READ8_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 | ||
| 81 | WRITE16_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 | ||
| 96 | WRITE16_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 | ||
| 118 | static 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") | |
| 142 | INPUT_PORTS_END | |
| 143 | ||
| 144 | ||
| 145 | ||
| 146 | /*************************************************************************** | |
| 147 | ||
| 148 | Machine Config | |
| 149 | ||
| 150 | ***************************************************************************/ | |
| 151 | ||
| 152 | void merlin_state::machine_start() | |
| 153 | { | |
| 154 | m_o = 0; | |
| 155 | save_item(NAME(m_o)); | |
| 156 | } | |
| 157 | ||
| 158 | static const INT16 speaker_levels[] = { 0, 10922, 21845, 32767 }; | |
| 159 | ||
| 160 | ||
| 161 | static 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) | |
| 178 | MACHINE_CONFIG_END | |
| 179 | ||
| 180 | ||
| 181 | ||
| 182 | /*************************************************************************** | |
| 183 | ||
| 184 | Game driver(s) | |
| 185 | ||
| 186 | ***************************************************************************/ | |
| 187 | ||
| 188 | ROM_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) ) | |
| 196 | ROM_END | |
| 197 | ||
| 198 | ||
| 199 | CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 57 | class splitsec_state : public driver_device | |
| 58 | { | |
| 59 | public: | |
| 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 | ||
| 125 | void 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 | ||
| 161 | TIMER_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 | ||
| 179 | READ8_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 | ||
| 191 | WRITE16_MEMBER(splitsec_state::write_o) | |
| 192 | { | |
| 193 | // O0-O6: led columns | |
| 194 | // O7: N/C | |
| 195 | m_o = data; | |
| 196 | display_update(); | |
| 197 | } | |
| 198 | ||
| 199 | WRITE16_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 | ||
| 212 | WRITE16_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 | ||
| 233 | static 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 ) | |
| 245 | INPUT_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 | ||
| 260 | static 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 ) | |
| 272 | INPUT_PORTS_END | |
| 273 | ||
| 274 | ||
| 275 | ||
| 276 | /*************************************************************************** | |
| 277 | ||
| 278 | Machine Config | |
| 279 | ||
| 280 | ***************************************************************************/ | |
| 281 | ||
| 282 | void 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 | ||
| 304 | static 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) | |
| 322 | MACHINE_CONFIG_END | |
| 323 | ||
| 324 | static 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) | |
| 331 | MACHINE_CONFIG_END | |
| 332 | ||
| 333 | ||
| 334 | ||
| 335 | /*************************************************************************** | |
| 336 | ||
| 337 | Game driver(s) | |
| 338 | ||
| 339 | ***************************************************************************/ | |
| 340 | ||
| 341 | ROM_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) ) | |
| 349 | ROM_END | |
| 350 | ||
| 351 | ROM_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) ) | |
| 359 | ROM_END | |
| 360 | ||
| 361 | ||
| 362 | CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE ) | |
| 363 | CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 25 | class starwbc_state : public driver_device | |
| 26 | { | |
| 27 | public: | |
| 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 | ||
| 71 | void 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 | ||
| 106 | TIMER_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 | ||
| 116 | void 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 | ||
| 136 | READ8_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 | ||
| 151 | WRITE16_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 | ||
| 163 | WRITE16_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 | ||
| 187 | static 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") | |
| 217 | INPUT_PORTS_END | |
| 218 | ||
| 219 | ||
| 220 | ||
| 221 | /*************************************************************************** | |
| 222 | ||
| 223 | Machine Config | |
| 224 | ||
| 225 | ***************************************************************************/ | |
| 226 | ||
| 227 | void 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 | ||
| 247 | static 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) | |
| 265 | MACHINE_CONFIG_END | |
| 266 | ||
| 267 | ||
| 268 | ||
| 269 | /*************************************************************************** | |
| 270 | ||
| 271 | Game driver(s) | |
| 272 | ||
| 273 | ***************************************************************************/ | |
| 274 | ||
| 275 | ROM_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) ) | |
| 283 | ROM_END | |
| 284 | ||
| 285 | ROM_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) ) | |
| 293 | ROM_END | |
| 294 | ||
| 295 | ||
| 296 | CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE ) | |
| 297 | CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 29 | class stopthief_state : public driver_device | |
| 30 | { | |
| 31 | public: | |
| 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 | ||
| 78 | void 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 | ||
| 108 | TIMER_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 | ||
| 126 | READ8_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 | ||
| 142 | WRITE16_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 | ||
| 155 | WRITE16_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 | ||
| 171 | INPUT_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 | ||
| 186 | static 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) | |
| 208 | INPUT_PORTS_END | |
| 209 | ||
| 210 | ||
| 211 | ||
| 212 | /*************************************************************************** | |
| 213 | ||
| 214 | Machine Config | |
| 215 | ||
| 216 | ***************************************************************************/ | |
| 217 | ||
| 218 | WRITE_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 | ||
| 229 | void stopthief_state::machine_reset() | |
| 230 | { | |
| 231 | m_power_on = true; | |
| 232 | } | |
| 233 | ||
| 234 | void 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 | ||
| 254 | static 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) | |
| 273 | MACHINE_CONFIG_END | |
| 274 | ||
| 275 | ||
| 276 | ||
| 277 | /*************************************************************************** | |
| 278 | ||
| 279 | Game driver(s) | |
| 280 | ||
| 281 | ***************************************************************************/ | |
| 282 | ||
| 283 | ROM_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) ) | |
| 295 | ROM_END | |
| 296 | ||
| 297 | ROM_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) ) | |
| 309 | ROM_END | |
| 310 | ||
| 311 | ||
| 312 | CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE ) | |
| 313 | CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 40 | class tandy12_state : public driver_device | |
| 41 | { | |
| 42 | public: | |
| 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 | ||
| 70 | READ8_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 | ||
| 82 | WRITE16_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 | ||
| 89 | WRITE16_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 | ||
| 131 | static 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") | |
| 161 | INPUT_PORTS_END | |
| 162 | ||
| 163 | ||
| 164 | ||
| 165 | /*************************************************************************** | |
| 166 | ||
| 167 | Machine Config | |
| 168 | ||
| 169 | ***************************************************************************/ | |
| 170 | ||
| 171 | void tandy12_state::machine_start() | |
| 172 | { | |
| 173 | m_r = 0; | |
| 174 | save_item(NAME(m_r)); | |
| 175 | } | |
| 176 | ||
| 177 | ||
| 178 | static 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 | ||
| 191 | static 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) | |
| 208 | MACHINE_CONFIG_END | |
| 209 | ||
| 210 | ||
| 211 | ||
| 212 | /*************************************************************************** | |
| 213 | ||
| 214 | Game driver(s) | |
| 215 | ||
| 216 | ***************************************************************************/ | |
| 217 | ||
| 218 | ROM_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 ) | |
| 226 | ROM_END | |
| 227 | ||
| 228 | ||
| 229 | CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE ) |
| r244637 | r244638 | |
|---|---|---|
| 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 | ||
| 25 | class unk3403_state : public driver_device | |
| 26 | { | |
| 27 | public: | |
| 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 | ||
| 59 | void 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 | ||
| 80 | READ8_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 | ||
| 94 | WRITE16_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 | ||
| 106 | WRITE16_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 | ||
| 121 | static 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) | |
| 145 | INPUT_PORTS_END | |
| 146 | ||
| 147 | ||
| 148 | ||
| 149 | /*************************************************************************** | |
| 150 | ||
| 151 | Machine Config | |
| 152 | ||
| 153 | ***************************************************************************/ | |
| 154 | ||
| 155 | void 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 | ||
| 165 | static 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 | ||
| 175 | static 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) | |
| 190 | MACHINE_CONFIG_END | |
| 191 | ||
| 192 | ||
| 193 | ||
| 194 | /*************************************************************************** | |
| 195 | ||
| 196 | Game driver(s) | |
| 197 | ||
| 198 | ***************************************************************************/ | |
| 199 | ||
| 200 | ROM_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 ) | |
| 208 | ROM_END | |
| 209 | ||
| 210 | ||
| 211 | CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) |
| r244637 | r244638 | |
|---|---|---|
| 115 | 115 | <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel> |
| 116 | 116 | <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel> |
| 117 | 117 | |
| 118 | <bezel name="lamp0" element="lamp"> | |
| 118 | <bezel name="lamp60" element="lamp"> | |
| 119 | 119 | <bounds x="42" y="62" width="8" height="8" /> |
| 120 | 120 | </bezel> |
| 121 | <bezel name="lamp1" element="lamp"> | |
| 121 | <bezel name="lamp61" element="lamp"> | |
| 122 | 122 | <bounds x="42" y="126" width="8" height="8" /> |
| 123 | 123 | </bezel> |
| 124 | <bezel name="lamp2" element="lamp"> | |
| 124 | <bezel name="lamp62" element="lamp"> | |
| 125 | 125 | <bounds x="74" y="94" width="8" height="8" /> |
| 126 | 126 | </bezel> |
| 127 | <bezel name="lamp3" element="lamp"> | |
| 127 | <bezel name="lamp63" element="lamp"> | |
| 128 | 128 | <bounds x="10" y="94" width="8" height="8" /> |
| 129 | 129 | </bezel> |
| 130 | 130 |
| r0 | r244638 | |
|---|---|---|
| 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> |
| r244637 | r244638 | |
|---|---|---|
| 2617 | 2617 | edracula |
| 2618 | 2618 | tc4 |
| 2619 | 2619 | ebball |
| 2620 | tmpacman |
| r244637 | r244638 | |
|---|---|---|
| 735 | 735 | $(MESSOBJ)/homebrew.a \ |
| 736 | 736 | $(MESSOBJ)/homelab.a \ |
| 737 | 737 | $(MESSOBJ)/hp.a \ |
| 738 | $(MESSOBJ)/ideal.a \ | |
| 739 | 738 | $(MESSOBJ)/imp.a \ |
| 740 | 739 | $(MESSOBJ)/intel.a \ |
| 741 | 740 | $(MESSOBJ)/interton.a \ |
| 742 | 741 | $(MESSOBJ)/intv.a \ |
| 743 | 742 | $(MESSOBJ)/isc.a \ |
| 744 | 743 | $(MESSOBJ)/kaypro.a \ |
| 745 | $(MESSOBJ)/kenner.a \ | |
| 746 | 744 | $(MESSOBJ)/koei.a \ |
| 747 | 745 | $(MESSOBJ)/kyocera.a \ |
| 748 | 746 | $(MESSOBJ)/luxor.a \ |
| r244637 | r244638 | |
| 1004 | 1002 | |
| 1005 | 1003 | $(MESSOBJ)/apf.a: \ |
| 1006 | 1004 | $(MESS_DRIVERS)/apf.o \ |
| 1007 | $(MESS_DRIVERS)/mathmagi.o \ | |
| 1008 | 1005 | |
| 1009 | 1006 | $(MESSOBJ)/apollo.a: \ |
| 1010 | 1007 | $(MESS_DRIVERS)/apollo.o $(MESS_MACHINE)/apollo.o $(MESS_MACHINE)/apollo_dbg.o $(MESS_MACHINE)/apollo_kbd.o $(MESS_VIDEO)/apollo.o \ |
| r244637 | r244638 | |
| 1333 | 1330 | $(MESS_DRIVERS)/sdk85.o \ |
| 1334 | 1331 | $(MESS_DRIVERS)/sdk86.o \ |
| 1335 | 1332 | |
| 1336 | $(MESSOBJ)/ideal.a: \ | |
| 1337 | $(MESS_DRIVERS)/elecdet.o \ | |
| 1338 | ||
| 1339 | 1333 | $(MESSOBJ)/imp.a: \ |
| 1340 | 1334 | $(MESS_DRIVERS)/tim011.o \ |
| 1341 | 1335 | $(MESS_DRIVERS)/tim100.o \ |
| r244637 | r244638 | |
| 1352 | 1346 | $(MESSOBJ)/kaypro.a: \ |
| 1353 | 1347 | $(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \ |
| 1354 | 1348 | |
| 1355 | $(MESSOBJ)/kenner.a: \ | |
| 1356 | $(MESS_DRIVERS)/starwbc.o \ | |
| 1357 | ||
| 1358 | 1349 | $(MESSOBJ)/koei.a: \ |
| 1359 | 1350 | $(MESS_DRIVERS)/pasogo.o \ |
| 1360 | 1351 | |
| r244637 | r244638 | |
| 1444 | 1435 | $(MESS_DRIVERS)/pc100.o \ |
| 1445 | 1436 | $(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 \ |
| 1446 | 1437 | $(MESS_DRIVERS)/tk80bs.o \ |
| 1438 | $(MESS_DRIVERS)/hh_ucom4.o \ | |
| 1447 | 1439 | |
| 1448 | 1440 | $(MESSOBJ)/netronic.a: \ |
| 1449 | 1441 | $(MESS_DRIVERS)/elf.o \ |
| r244637 | r244638 | |
| 1496 | 1488 | $(MESS_DRIVERS)/palmz22.o \ |
| 1497 | 1489 | |
| 1498 | 1490 | $(MESSOBJ)/parker.a: \ |
| 1499 | $(MESS_DRIVERS)/cnsector.o \ | |
| 1500 | $(MESS_DRIVERS)/merlin.o \ | |
| 1501 | $(MESS_DRIVERS)/splitsec.o \ | |
| 1502 | $(MESS_DRIVERS)/stopthie.o \ | |
| 1503 | 1491 | $(MESS_DRIVERS)/wildfire.o \ |
| 1504 | 1492 | |
| 1505 | 1493 | $(MESSOBJ)/pitronic.a: \ |
| r244637 | r244638 | |
| 1825 | 1813 | $(MESS_MACHINE)/dragon.o \ |
| 1826 | 1814 | $(MESS_MACHINE)/dgnalpha.o \ |
| 1827 | 1815 | $(MESS_VIDEO)/gime.o \ |
| 1828 | $(MESS_DRIVERS)/tandy12.o \ | |
| 1829 | 1816 | $(MESS_DRIVERS)/trs80.o $(MESS_MACHINE)/trs80.o $(MESS_VIDEO)/trs80.o \ |
| 1830 | 1817 | $(MESS_DRIVERS)/trs80m2.o $(MESS_MACHINE)/trs80m2kb.o \ |
| 1831 | 1818 | $(MESS_DRIVERS)/tandy2k.o $(MESS_MACHINE)/tandy2kb.o \ |
| r244637 | r244638 | |
| 2017 | 2004 | $(MESS_DRIVERS)/ti630.o \ |
| 2018 | 2005 | $(MESS_DRIVERS)/tsispch.o \ |
| 2019 | 2006 | $(MESS_DRIVERS)/unistar.o \ |
| 2020 | $(MESS_DRIVERS)/unk3403.o \ | |
| 2021 | 2007 | $(MESS_DRIVERS)/v6809.o \ |
| 2022 | 2008 | $(MESS_DRIVERS)/vector4.o \ |
| 2023 | 2009 | $(MESS_DRIVERS)/vii.o \ |
| r244637 | r244638 | |
| 2117 | 2103 | $(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh |
| 2118 | 2104 | $(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \ |
| 2119 | 2105 | $(MESS_LAYOUT)/borisdpl.lh |
| 2120 | $(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh | |
| 2121 | 2106 | $(MESS_DRIVERS)/comp4.o: $(MESS_LAYOUT)/comp4.lh |
| 2122 | 2107 | $(MESS_DRIVERS)/cp1.o: $(MESS_LAYOUT)/cp1.lh |
| 2123 | 2108 | $(MESS_DRIVERS)/cvicny.o: $(MESS_LAYOUT)/cvicny.lh |
| r244637 | r244638 | |
| 2129 | 2114 | $(MESS_DRIVERS)/dolphunk.o: $(MESS_LAYOUT)/dolphunk.lh |
| 2130 | 2115 | $(MESS_DRIVERS)/eacc.o: $(MESS_LAYOUT)/eacc.lh |
| 2131 | 2116 | $(MESS_DRIVERS)/edracula.o: $(MESS_LAYOUT)/edracula.lh |
| 2132 | $(MESS_DRIVERS)/elecdet.o: $(MESS_LAYOUT)/elecdet.lh | |
| 2133 | 2117 | $(MESS_DRIVERS)/elekscmp.o: $(MESS_LAYOUT)/elekscmp.lh |
| 2134 | 2118 | $(MESS_DRIVERS)/elf.o: $(MESS_LAYOUT)/elf2.lh |
| 2135 | 2119 | $(MESS_MACHINE)/esqvfd.o: $(MESS_LAYOUT)/esq2by40.lh \ |
| r244637 | r244638 | |
| 2143 | 2127 | $(MESS_DRIVERS)/glasgow.o: $(MESS_LAYOUT)/glasgow.lh |
| 2144 | 2128 | $(MESS_DRIVERS)/h8.o: $(MESS_LAYOUT)/h8.lh |
| 2145 | 2129 | $(MESS_DRIVERS)/hh_tms1k.o: $(MESS_LAYOUT)/amaztron.lh \ |
| 2130 | $(MESS_LAYOUT)/bankshot.lh \ | |
| 2131 | $(MESS_LAYOUT)/cnsector.lh \ | |
| 2146 | 2132 | $(MESS_LAYOUT)/comp4.lh \ |
| 2147 | 2133 | $(MESS_LAYOUT)/ebball.lh \ |
| 2134 | $(MESS_LAYOUT)/elecdet.lh \ | |
| 2135 | $(MESS_LAYOUT)/mathmagi.lh \ | |
| 2136 | $(MESS_LAYOUT)/merlin.lh \ | |
| 2148 | 2137 | $(MESS_LAYOUT)/simon.lh \ |
| 2138 | $(MESS_LAYOUT)/splitsec.lh \ | |
| 2139 | $(MESS_LAYOUT)/starwbc.lh \ | |
| 2140 | $(MESS_LAYOUT)/stopthie.lh \ | |
| 2141 | $(MESS_LAYOUT)/tandy12.lh \ | |
| 2149 | 2142 | $(MESS_LAYOUT)/tc4.lh |
| 2143 | $(MESS_DRIVERS)/hh_ucom4.o: $(MESS_LAYOUT)/tmpacman.lh | |
| 2150 | 2144 | $(MESS_DRIVERS)/ie15.o: $(MESS_LAYOUT)/ie15.lh |
| 2151 | 2145 | $(MESS_DRIVERS)/instruct.o: $(MESS_LAYOUT)/instruct.lh |
| 2152 | 2146 | $(MESS_DRIVERS)/k1003.o: $(MESS_LAYOUT)/k1003.lh |
| r244637 | r244638 | |
| 2156 | 2150 | $(MESS_DRIVERS)/llc.o: $(MESS_LAYOUT)/llc1.lh |
| 2157 | 2151 | $(MESS_DRIVERS)/lynx.o: $(MESS_LAYOUT)/lynx.lh |
| 2158 | 2152 | $(MESS_DRIVERS)/mac.o: $(MESS_LAYOUT)/mac.lh |
| 2159 | $(MESS_DRIVERS)/mathmagi.o: $(MESS_LAYOUT)/mathmagi.lh | |
| 2160 | 2153 | $(MESS_MACHINE)/megacd.o: $(MESS_LAYOUT)/megacd.lh |
| 2161 | 2154 | $(MESS_DRIVERS)/mekd2.o: $(MESS_LAYOUT)/mekd2.lh |
| 2162 | 2155 | $(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh |
| 2163 | $(MESS_DRIVERS)/merlin.o: $(MESS_LAYOUT)/merlin.lh | |
| 2164 | 2156 | $(MESS_DRIVERS)/minicom.o: $(MESS_LAYOUT)/minicom.lh |
| 2165 | 2157 | $(MESS_DRIVERS)/mirage.o: $(MESS_LAYOUT)/mirage.lh |
| 2166 | 2158 | $(MESS_DRIVERS)/mk1.o: $(MESS_LAYOUT)/mk1.lh |
| r244637 | r244638 | |
| 2196 | 2188 | $(MESS_DRIVERS)/sitcom.o: $(MESS_LAYOUT)/sitcom.lh |
| 2197 | 2189 | $(MESS_DRIVERS)/slc1.o: $(MESS_LAYOUT)/slc1.lh |
| 2198 | 2190 | $(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 | |
| 2203 | 2191 | $(MESS_DRIVERS)/super80.o: $(MESS_LAYOUT)/super80.lh |
| 2204 | 2192 | $(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh |
| 2205 | 2193 | $(MESS_DRIVERS)/svision.o: $(MESS_LAYOUT)/svision.lh |
| 2206 | 2194 | $(MESS_DRIVERS)/svmu.o: $(MESS_LAYOUT)/svmu.lh |
| 2207 | 2195 | $(MESS_DRIVERS)/sym1.o: $(MESS_LAYOUT)/sym1.lh |
| 2208 | $(MESS_DRIVERS)/tandy12.o: $(MESS_LAYOUT)/tandy12.lh | |
| 2209 | 2196 | $(MESS_DRIVERS)/tavernie.o: $(MESS_LAYOUT)/tavernie.lh |
| 2210 | 2197 | $(MESS_DRIVERS)/tb303.o: $(MESS_LAYOUT)/tb303.lh |
| 2211 | 2198 | $(MESS_DRIVERS)/tc4.o: $(MESS_LAYOUT)/tc4.lh |
| https://github.com/mamedev/mame/commit/dfbb61232cebe6f3e5a00c2d8b916874d8e99eac |
| Previous | 199869 Revisions | Next |