diff --git a/hash/cpc_cass.xml b/hash/cpc_cass.xml index e3a81eed1d7..a5b562bb3d1 100644 --- a/hash/cpc_cass.xml +++ b/hash/cpc_cass.xml @@ -449,6 +449,8 @@ Please stick to using the floppy versions for the time being... 3D Boxing (UK) 1985 Amsoft + + @@ -489,6 +491,8 @@ Please stick to using the floppy versions for the time being... 3D Fight (France) 1985 Loriciels + + @@ -501,6 +505,8 @@ Please stick to using the floppy versions for the time being... 3D Grand Prix (UK) 1985 Amsoft + + @@ -573,6 +579,8 @@ Please stick to using the floppy versions for the time being... 3D Stunt Rider (UK) 1985 Amsoft + + @@ -598,6 +606,8 @@ Please stick to using the floppy versions for the time being... 3D-Invaders (UK) 1985 Amsoft + + @@ -623,6 +633,8 @@ Please stick to using the floppy versions for the time being... 3D-Sub (France) 1985 Loriciels + + @@ -647,6 +659,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 1 (UK) 1991 Atlantis Software + @@ -664,6 +677,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 2 (UK) 1992 Atlantis Software + @@ -681,6 +695,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 3 (UK) 1992 Atlantis Software + @@ -799,7 +814,8 @@ Please stick to using the floppy versions for the time being... 500cc Grand Prix (UK) 1986 - Microids + Microïds + @@ -809,9 +825,11 @@ Please stick to using the floppy versions for the time being... - Le 5eme Axe (France) + Le 5ème Axe (France) 1985 Loriciels + + @@ -915,6 +933,7 @@ Please stick to using the floppy versions for the time being... A 320 (France) 1988 Loriciels + @@ -1227,6 +1246,8 @@ Please stick to using the floppy versions for the time being... Admiral Graf Spee (UK) 1984 Amsoft + + @@ -1240,6 +1261,7 @@ Please stick to using the floppy versions for the time being... Admiral Graf Spee (Spain) 1984 Amsoft + @@ -1250,9 +1272,9 @@ Please stick to using the floppy versions for the time being... - Advanced Destroyer Simulator (Spain) + A.D.S. - Advanced Destroyer Simulator (Spain) 1990 - Loriciels + Futura / Proein Soft Line @@ -1471,6 +1493,8 @@ Please stick to using the floppy versions for the time being... L'Aigle d'Or (France) 1986 Loriciels + + @@ -1485,9 +1509,9 @@ Please stick to using the floppy versions for the time being... - Air Traffic Control (UK) + Heathrow International Air Traffic Control (UK) 1984 - Hewson + Hewson Consultants @@ -1532,6 +1556,8 @@ Please stick to using the floppy versions for the time being... Airwolf (UK) 1985 Amsoft + + @@ -1544,6 +1570,8 @@ Please stick to using the floppy versions for the time being... Airwolf (UK, alt) 1985 Amsoft + + @@ -1636,9 +1664,11 @@ Please stick to using the floppy versions for the time being... - Alex Higgins World Pool (UK) + Alex Higgins' World Pool (UK) 1985 Amsoft + + @@ -1648,9 +1678,11 @@ Please stick to using the floppy versions for the time being... - Alex Higgins World Snooker (UK) + Alex Higgins' World Snooker (UK) 1985 Amsoft + + @@ -1687,6 +1719,8 @@ Please stick to using the floppy versions for the time being... Alien (UK) 1985 Amsoft + + @@ -1723,8 +1757,10 @@ Please stick to using the floppy versions for the time being... Alien Break-In (UK) 1985 Amsoft + + - + @@ -1855,6 +1891,8 @@ Please stick to using the floppy versions for the time being... Alpine Games (UK) 1987 Atlantis Software + + @@ -2098,6 +2136,8 @@ Please stick to using the floppy versions for the time being... American Football (UK) 1984 Amsoft + + @@ -2160,9 +2200,11 @@ Please stick to using the floppy versions for the time being... - Amlettres (France) + Amlettres - Traitement de Textes (France) 1984 Amsoft France + + @@ -2201,9 +2243,10 @@ Please stick to using the floppy versions for the time being... - Amsbase (Spain) + Amsbase - Base de Datos (Spain) 1984 Amsoft + @@ -2242,6 +2285,8 @@ Please stick to using the floppy versions for the time being... AmsGolf (UK) 1984 Amsoft + + @@ -2345,6 +2390,7 @@ Please stick to using the floppy versions for the time being... Amstest 1985 Amsoft + @@ -2537,9 +2583,11 @@ Please stick to using the floppy versions for the time being... - Amstroid (France) + Amstroïd (France) 1985 Sprites + + @@ -2587,7 +2635,7 @@ Please stick to using the floppy versions for the time being... Anarchy (UK) 1988 - Hewson + Hewson Consultants @@ -2693,9 +2741,11 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetable / Mineral (UK) + Animal, Vegetable, Mineral (UK) 1984 Amsoft + + @@ -2705,7 +2755,7 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetal / Mineral (France) + Animal, Vegetal, Mineral (France) 1984 Amsoft @@ -2717,9 +2767,10 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetable / Mineral (Spain) + Animal, Vegetable, Mineral (Spain) 1984 Amsoft + @@ -2872,6 +2923,8 @@ Please stick to using the floppy versions for the time being... L'Apprenti Sorcier (France) 1985 Amsoft + + @@ -3267,6 +3320,8 @@ Please stick to using the floppy versions for the time being... Asalto (Spain) 1985 Amsoft + + @@ -3368,6 +3423,8 @@ Please stick to using the floppy versions for the time being... Astro Attack (UK) 1984 Amsoft + + @@ -3427,7 +3484,7 @@ Please stick to using the floppy versions for the time being... Athlete (France) 1986 - Microids + Microïds @@ -3464,6 +3521,8 @@ Please stick to using the floppy versions for the time being... Atom Smasher (Spain) 1984 Amsoft + + @@ -3476,6 +3535,8 @@ Please stick to using the floppy versions for the time being... Atom Smasher (UK) 1984 Amsoft + + @@ -3488,6 +3549,7 @@ Please stick to using the floppy versions for the time being... Atomic Driver (France) 1988 Loriciels + @@ -3606,6 +3668,9 @@ Please stick to using the floppy versions for the time being... Automec (France) 1985 Loriciels + + + @@ -3795,6 +3860,7 @@ Please stick to using the floppy versions for the time being... Bactron (UK) 1986 Loriciels + @@ -3807,6 +3873,8 @@ Please stick to using the floppy versions for the time being... Bactron (France) 1986 Loriciels + + @@ -4375,7 +4443,7 @@ Please stick to using the floppy versions for the time being... Battle Valley (UK) 1988 - Hewson + Hewson Consultants @@ -4703,6 +4771,8 @@ Please stick to using the floppy versions for the time being... Billar - Snooker (UK) 1984 Amsoft + + @@ -4715,6 +4785,8 @@ Please stick to using the floppy versions for the time being... Billy La Banlieue (France) 1986 Loriciels + + @@ -4726,7 +4798,8 @@ Please stick to using the floppy versions for the time being... Billy La Banlieue (Spain) 1986 - Loriciels + Loriciels / Proein Soft Line + @@ -4848,6 +4921,7 @@ Please stick to using the floppy versions for the time being... Birdie (UK) 1987 Ere Informatique + @@ -4983,6 +5057,8 @@ Please stick to using the floppy versions for the time being... Blagger (UK, AMSoft) 1985 Amsoft + + @@ -5330,6 +5406,8 @@ Please stick to using the floppy versions for the time being... Boinggg! (UK) 1988 Atlantis Software + + @@ -5676,6 +5754,8 @@ Please stick to using the floppy versions for the time being... Braxx Bluff (UK) 1985 Amsoft + + @@ -5773,6 +5853,8 @@ Please stick to using the floppy versions for the time being... Bridge-It (UK) 1984 Amsoft + + @@ -6718,6 +6800,8 @@ Please stick to using the floppy versions for the time being... Catastrophes - Ile Infernale (UK) 1985 Amsoft + + @@ -6802,6 +6886,7 @@ Please stick to using the floppy versions for the time being... Cavemania (UK) 1991 Atlantis Software + @@ -6838,6 +6923,9 @@ Please stick to using the floppy versions for the time being... Centre Court (Spain) 1984 Amsoft + + + @@ -7335,7 +7423,7 @@ Please stick to using the floppy versions for the time being... Chicago 90 (France) 1989 - Microids + Microïds @@ -7360,6 +7448,8 @@ Please stick to using the floppy versions for the time being... Des Chiffres et des Lettres (France) 1987 Loriciels + + @@ -7372,6 +7462,8 @@ Please stick to using the floppy versions for the time being... Les Chiffres Magiques (France) 1984 Amsoft + + @@ -7441,7 +7533,7 @@ Please stick to using the floppy versions for the time being... The Chip Factory Featuring 'Technician Ted' (UK) 1984 - Hewson + Hewson Consultants @@ -7729,7 +7821,7 @@ Please stick to using the floppy versions for the time being... City Slicker (UK) 1986 - Hewson + Hewson Consultants @@ -7742,6 +7834,8 @@ Please stick to using the floppy versions for the time being... Classic Adventure (UK) 1984 Amsoft + + @@ -7868,6 +7962,8 @@ Please stick to using the floppy versions for the time being... Classic Racing (UK) 1985 Amsoft + + @@ -8059,6 +8155,9 @@ Please stick to using the floppy versions for the time being... Codename Mat (UK) 1985 Amsoft + + + @@ -8980,9 +9079,9 @@ Please stick to using the floppy versions for the time being... - Cours de Solfege, Niveau 1 (France) + Cours de Solfège, Niveau 1 (France) 1984 - TMPI + Techni-Musique & Parole Informatique (TMPI) @@ -8992,9 +9091,11 @@ Please stick to using the floppy versions for the time being... - La Course a la Boussole (France) + La Course à la Boussole (France) 1984 Amsoft + + @@ -9089,6 +9190,7 @@ Please stick to using the floppy versions for the time being... Crack-Up (UK) 1989 Atlantis Software + @@ -9173,6 +9275,8 @@ Please stick to using the floppy versions for the time being... Crazy Golf (UK) 1984 Amsoft + + @@ -9196,7 +9300,7 @@ Please stick to using the floppy versions for the time being... Crazy Shot (Spain) 1989 - Loriciels + Loriciels / Proein Soft Line @@ -9291,6 +9395,8 @@ Please stick to using the floppy versions for the time being... Crossfire (UK) 1990 Atlantis Software + + @@ -9385,6 +9491,8 @@ Please stick to using the floppy versions for the time being... Cubit (UK) 1985 Amsoft + + @@ -9556,7 +9664,9 @@ Please stick to using the floppy versions for the time being... Cybernoid (UK) 1988 - Hewson + Hewson Consultants + + @@ -9568,7 +9678,9 @@ Please stick to using the floppy versions for the time being... Cybernoid II (UK) 1988 - Hewson + Hewson Consultants + + @@ -9617,6 +9729,8 @@ Please stick to using the floppy versions for the time being... Cyrus II Chess (UK) 1985 Amsoft + + @@ -10485,7 +10599,7 @@ Please stick to using the floppy versions for the time being... Deliverance (UK) 1990 - Hewson + Hewson Consultants @@ -10498,7 +10612,7 @@ Please stick to using the floppy versions for the time being... Deliverance (Spain) 1990 - Hewson + Hewson Consultants @@ -10691,6 +10805,9 @@ Please stick to using the floppy versions for the time being... Detective (UK) 1984 Amsoft + + + @@ -10763,6 +10880,8 @@ Please stick to using the floppy versions for the time being... DFM 464 (UK) 1984 Amsoft + + @@ -10789,9 +10908,11 @@ Please stick to using the floppy versions for the time being... - Le Diamant de l'Ile Maudite (France) + Le Diamant de l'Île Maudite (France) 1985 Loriciels + + @@ -10833,6 +10954,8 @@ Please stick to using the floppy versions for the time being... Dianne - Mission Rubidiums (France) 1985 Loriciels + + @@ -11360,6 +11483,8 @@ Please stick to using the floppy versions for the time being... Doors of Doom (UK) 1985 Amsoft + + @@ -11691,6 +11816,8 @@ Please stick to using the floppy versions for the time being... Dragon's Gold (UK) 1985 Amsoft + + @@ -11731,7 +11858,8 @@ Please stick to using the floppy versions for the time being... The Dragontorc of Avalon (UK) 1985 - Hewson + Hewson Consultants + @@ -11917,9 +12045,11 @@ Please stick to using the floppy versions for the time being... - Dungeons Amethysts Alchemists (UK) + Dungeons, Amethysts, Alchemists (UK) 1987 Atlantis Software + + @@ -12156,6 +12286,9 @@ Please stick to using the floppy versions for the time being... Easi-Amsword (UK) 1984 Amsoft + + + @@ -12168,6 +12301,9 @@ Please stick to using the floppy versions for the time being... Easi-Amsword (Spain) 1984 Amsoft + + + @@ -12177,9 +12313,11 @@ Please stick to using the floppy versions for the time being... - Easy Topword (Germany) + Easy-Topword - Textverarbeitung (Germany) 1984 - Schneider Computer Software + Schneider Computer Division + + @@ -12273,7 +12411,7 @@ Please stick to using the floppy versions for the time being... Eddie Edwards Super Ski (UK) 1988 - Loriciels + Loriciels / Microïds @@ -12295,9 +12433,12 @@ Please stick to using the floppy versions for the time being... - Edit-Music (France) + Music Edit (France) 1985 Sprites + + + @@ -12426,6 +12567,8 @@ Please stick to using the floppy versions for the time being... Electro Freddy (UK) 1984 Amsoft + + @@ -12485,7 +12628,7 @@ Please stick to using the floppy versions for the time being... Eliminator (UK) 1988 - Hewson + Hewson Consultants @@ -12599,6 +12742,8 @@ Please stick to using the floppy versions for the time being... Empire (France, Loriciels) 1985 Loriciels + + @@ -12898,6 +13043,8 @@ Please stick to using the floppy versions for the time being... Escape From Khoshima (UK) 1986 Atlantis Software + + @@ -13144,7 +13291,8 @@ Please stick to using the floppy versions for the time being... Evening Star (UK) 1987 - Hewson + Hewson Consultants + @@ -13186,7 +13334,7 @@ Please stick to using the floppy versions for the time being... Everyone's A Wally - Meet The Gang (UK, Mikro-Gen) 1985 - Mikro-gen + Mikro-Gen @@ -13234,7 +13382,8 @@ Please stick to using the floppy versions for the time being... Exolon (UK) 1987 - Hewson + Hewson Consultants + @@ -13246,7 +13395,7 @@ Please stick to using the floppy versions for the time being... Exolon (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -13565,7 +13714,8 @@ Please stick to using the floppy versions for the time being... Fantasia Diamond (UK) 1985 - Hewson + Hewson Consultants + @@ -13623,6 +13773,8 @@ Please stick to using the floppy versions for the time being... The Fantastic Voyage (UK) 1985 Amsoft + + @@ -13632,7 +13784,7 @@ Please stick to using the floppy versions for the time being... - Fantome City (France) + Fantôme City (France) 1986 Coktel Vision @@ -13973,7 +14125,8 @@ Please stick to using the floppy versions for the time being... Firelord (UK) 1986 - Hewson + Hewson Consultants + @@ -14114,6 +14267,8 @@ Please stick to using the floppy versions for the time being... Flash (France) 1987 Loriciels + + @@ -14608,6 +14763,8 @@ Please stick to using the floppy versions for the time being... Frank 'N' Stein (UK) 1985 Amsoft + + @@ -14849,6 +15006,8 @@ Please stick to using the floppy versions for the time being... Fruit Machine (UK) 1984 Amsoft + + @@ -14897,6 +15056,8 @@ Please stick to using the floppy versions for the time being... Fu-Kung In Las Vegas (UK) 1985 Amsoft + + @@ -15076,6 +15237,7 @@ Please stick to using the floppy versions for the time being... Fusion II (France) 1988 Loriciels + @@ -15182,6 +15344,8 @@ Please stick to using the floppy versions for the time being... The Galactic Plague (UK) 1984 Amsoft + + @@ -15235,6 +15399,9 @@ Please stick to using the floppy versions for the time being... The Game of Dragons (UK) 1985 Amsoft + + + @@ -15466,6 +15633,9 @@ Please stick to using the floppy versions for the time being... Gatecrasher (UK) 1986 Amsoft + + + @@ -15686,6 +15856,9 @@ Please stick to using the floppy versions for the time being... Gems of Stradus (UK, Amsoft, BASIC 1.0) 1985 Amsoft + + + @@ -15875,9 +16048,11 @@ Please stick to using the floppy versions for the time being... - Gestion de Fichier CPC 464 (France) + Gestion de Fichier (France) 1984 Sprites + + @@ -16080,6 +16255,8 @@ Please stick to using the floppy versions for the time being... Glen Hoddle Soccer (UK) 1985 Amsoft + + @@ -16293,7 +16470,8 @@ Please stick to using the floppy versions for the time being... Grand Prix 500cc (France) 1986 - Microids + Microïds + @@ -16305,7 +16483,7 @@ Please stick to using the floppy versions for the time being... Grand Prix 500cc (Spain) 1986 - Microids + Microïds / Proein Soft Line @@ -16330,6 +16508,8 @@ Please stick to using the floppy versions for the time being... Grand Prix Driver (UK) 1984 Amsoft + + @@ -16484,6 +16664,8 @@ Please stick to using the floppy versions for the time being... Graphisto (France, BASIC 1.0) 1985 Sprites + + @@ -16777,7 +16959,7 @@ Please stick to using the floppy versions for the time being... Guardians (UK) 1991 - Loriciels + Loriciel @@ -16894,6 +17076,8 @@ Please stick to using the floppy versions for the time being... Gunfighter (UK) 1990 Atlantis Software + + @@ -17129,6 +17313,8 @@ Please stick to using the floppy versions for the time being... Happy Letters (UK) 1984 Amsoft + + @@ -17141,6 +17327,8 @@ Please stick to using the floppy versions for the time being... Happy Numbers (UK) 1984 Amsoft + + @@ -17153,6 +17341,8 @@ Please stick to using the floppy versions for the time being... Happy Writing (UK) 1984 Amsoft + + @@ -17200,7 +17390,7 @@ Please stick to using the floppy versions for the time being... Harricana - Raid International Motoneige (France) 1990 - Loriciels + Loriciel @@ -17213,6 +17403,8 @@ Please stick to using the floppy versions for the time being... Harrier Attack (UK) 1984 Amsoft + + @@ -17273,6 +17465,8 @@ Please stick to using the floppy versions for the time being... Haunted Hedges (UK) 1984 Amsoft + + @@ -17501,6 +17695,8 @@ Please stick to using the floppy versions for the time being... Heliot (France) 1984 Sprites + + @@ -17813,7 +18009,7 @@ Please stick to using the floppy versions for the time being... Hit Sports 1991 - Loriciels + Loriciel @@ -18060,11 +18256,13 @@ Please stick to using the floppy versions for the time being... Loriciels + + @@ -18075,13 +18273,16 @@ Please stick to using the floppy versions for the time being... Les Hits 2 de Loriciels (France) 1987 Loriciels + + + @@ -18128,6 +18329,8 @@ Please stick to using the floppy versions for the time being... Hobgoblin (UK) 1991 Atlantis Software + + @@ -18446,6 +18649,8 @@ Please stick to using the floppy versions for the time being... Hunchback (UK, v1) 1985 Amsoft + + @@ -18458,6 +18663,8 @@ Please stick to using the floppy versions for the time being... Hunchback (UK, v2) 1985 Amsoft + + @@ -18562,6 +18769,8 @@ Please stick to using the floppy versions for the time being... Hunter Killer (UK) 1984 Amsoft + + @@ -18855,7 +19064,8 @@ Please stick to using the floppy versions for the time being... Impossaball (UK) 1987 - Hewson + Hewson Consultants + @@ -19044,6 +19254,8 @@ Please stick to using the floppy versions for the time being... Infernal Runner (France) 1985 Loriciels + + @@ -19448,6 +19660,8 @@ Please stick to using the floppy versions for the time being... Isoleur (France) 1985 Sprites + + @@ -19731,6 +19945,8 @@ Please stick to using the floppy versions for the time being... Jammin (UK) 1985 Amsoft + + @@ -19807,6 +20023,8 @@ Please stick to using the floppy versions for the time being... Jet-Boot Jack (UK) 1984 Amsoft + + @@ -20181,6 +20399,7 @@ Please stick to using the floppy versions for the time being... K.Y.A. (France) 1987 Loriciels + @@ -21027,6 +21246,8 @@ Please stick to using the floppy versions for the time being... Laserwarp (UK) 1985 Amsoft + + @@ -21164,6 +21385,8 @@ Please stick to using the floppy versions for the time being... League Challenge (UK) 1987 Atlantis Software + + @@ -22040,6 +22263,8 @@ Please stick to using the floppy versions for the time being... Macrocosmica (UK) 1986 Amsoft + + @@ -22381,6 +22606,8 @@ Please stick to using the floppy versions for the time being... Manic Miner (UK, Amsoft, BASIC 1.0) 1984 Amsoft + + @@ -22466,6 +22693,8 @@ Please stick to using the floppy versions for the time being... Map Rally (UK) 1984 Amsoft + + @@ -22513,7 +22742,7 @@ Please stick to using the floppy versions for the time being... Marauder (UK) 1988 - Hewson + Hewson Consultants @@ -22574,6 +22803,8 @@ Please stick to using the floppy versions for the time being... Marius Tresor Foot (France) 1985 Loriciels + + @@ -22658,6 +22889,8 @@ Please stick to using the floppy versions for the time being... MasterChess (UK, Amsoft) 1984 Amsoft + + @@ -22951,7 +23184,7 @@ Please stick to using the floppy versions for the time being... Maze Mania (Spain) 1989 - Hewson + Hewson Consultants / Erbe Software @@ -23248,7 +23481,7 @@ Please stick to using the floppy versions for the time being... - Menace sur l'Arctique (France) + Les Aventures du Ka 6 - Menace sur l'Arctique (France) 1987 Chip @@ -23460,7 +23693,7 @@ Please stick to using the floppy versions for the time being... - Meurtre a Grande Vitesse (France) + Meurtre à Grande Vitesse (France) 1985 Cobra Soft @@ -24065,6 +24298,7 @@ Please stick to using the floppy versions for the time being... Mobile Man (France) 1990 Loriciels + @@ -24322,7 +24556,7 @@ Please stick to using the floppy versions for the time being... Moon Blaster (UK) 1990 - Loriciels + Loriciel @@ -24340,6 +24574,7 @@ Please stick to using the floppy versions for the time being... Moontorc (UK) 1991 Atlantis Software + @@ -24608,6 +24843,8 @@ Please stick to using the floppy versions for the time being... Mr. Wong's Loopy Laundry (UK, v2) 1984 Amsoft + + @@ -24620,6 +24857,8 @@ Please stick to using the floppy versions for the time being... Mr. Wong's Loopy Laundry (UK) 1984 Amsoft + + @@ -24855,6 +25094,8 @@ Please stick to using the floppy versions for the time being... Mutant Monty (UK) 1984 Amsoft + + @@ -24922,9 +25163,12 @@ Please stick to using the floppy versions for the time being... - Le Mystere de Kikekankoi (France) + Le Mystère de Kikekankoi (France) 1985 Loriciels + + + @@ -25139,7 +25383,7 @@ Please stick to using the floppy versions for the time being... Nebulus (UK) 1988 - Hewson + Hewson Consultants @@ -25211,7 +25455,8 @@ Please stick to using the floppy versions for the time being... Netherworld (UK) 1988 - Hewson + Hewson Consultants + @@ -25812,6 +26057,8 @@ Please stick to using the floppy versions for the time being... Nuclear Defence (UK) 1986 Amsoft + + @@ -25847,7 +26094,8 @@ Please stick to using the floppy versions for the time being... Number Painter (UK) 1984 - ASK + Applied Systems Knowledge (ASK) + @@ -25961,7 +26209,7 @@ Please stick to using the floppy versions for the time being... Ocean Conqueror (UK) 1988 - Hewson + Hewson Consultants @@ -26039,6 +26287,8 @@ Please stick to using the floppy versions for the time being... Oh Mummy (UK) 1984 Amsoft + + @@ -26051,6 +26301,8 @@ Please stick to using the floppy versions for the time being... Oh Mummy (Spain) 1984 Amsoft + + @@ -26121,9 +26373,10 @@ Please stick to using the floppy versions for the time being... - Olympiad (UK) + Olympiad '86 (UK) 1986 Atlantis Software + @@ -26649,7 +26902,7 @@ Please stick to using the floppy versions for the time being... Panza Kick Boxing (France) 1990 - Loriciels + Futura @@ -26666,7 +26919,7 @@ Please stick to using the floppy versions for the time being... Panza Kick Boxing (Spain) 1990 - Loriciels + Futura / Proein Soft Line @@ -26920,9 +27173,11 @@ Please stick to using the floppy versions for the time being... - Pearl Harbour (France, BASIC 1.0) + Pearl Harbor (France, BASIC 1.0) 1985 Sprites + + @@ -27057,6 +27312,7 @@ Please stick to using the floppy versions for the time being... Periscope Up (UK) 1989 Atlantis Software + @@ -27213,11 +27469,13 @@ Please stick to using the floppy versions for the time being... Loriciels + + @@ -27326,7 +27584,7 @@ Please stick to using the floppy versions for the time being... Pinball Magic (France) 1990 - Loriciels + Loriciel @@ -27463,6 +27721,8 @@ Please stick to using the floppy versions for the time being... Pitman Typing Tutor (UK) 1984 Amsoft + + @@ -27475,6 +27735,8 @@ Please stick to using the floppy versions for the time being... La Plaga Galactica (Spain) 1984 Amsoft + + @@ -27559,9 +27821,11 @@ Please stick to using the floppy versions for the time being... - Planete Base (France) + Planète Base (France) 1985 Loriciels + + @@ -27835,6 +28099,8 @@ Please stick to using the floppy versions for the time being... Pouvoir (France) 1986 Loriciels + + @@ -28138,6 +28404,8 @@ Please stick to using the floppy versions for the time being... The Prize (UK) 1985 Amsoft + + @@ -28150,6 +28418,7 @@ Please stick to using the floppy versions for the time being... Pro Golf (UK) 1987 Atlantis Software + @@ -28598,6 +28867,8 @@ Please stick to using the floppy versions for the time being... Punchy (UK) 1985 Amsoft + + @@ -28651,6 +28922,8 @@ Please stick to using the floppy versions for the time being... Pyjamarama (UK, Amsoft) 1984 Amsoft + + @@ -28728,6 +29001,8 @@ Please stick to using the floppy versions for the time being... Qabbalah (UK) 1986 Amsoft + + @@ -28740,6 +29015,8 @@ Please stick to using the floppy versions for the time being... Quack A Jack (UK) 1984 Amsoft + + @@ -28751,7 +29028,9 @@ Please stick to using the floppy versions for the time being... Quad (Spain) 1987 - Microids + Microïds + + @@ -28763,7 +29042,7 @@ Please stick to using the floppy versions for the time being... Quadrel (France) 1991 - Loriciels + Loriciel @@ -28781,6 +29060,8 @@ Please stick to using the floppy versions for the time being... Quaterne (France) 1985 Sprites + + @@ -29099,6 +29380,8 @@ Please stick to using the floppy versions for the time being... Rally II (France) 1985 Loriciels + + @@ -29108,9 +29391,9 @@ Please stick to using the floppy versions for the time being... - Rally II (UK) + Grand Prix Rally II (UK) 1985 - Loriciels + Loriciels / Amsoft @@ -29218,7 +29501,7 @@ Please stick to using the floppy versions for the time being... Ranarama (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -29230,7 +29513,8 @@ Please stick to using the floppy versions for the time being... Ranarama (UK) 1987 - Hewson + Hewson Consultants + @@ -29578,6 +29862,8 @@ Please stick to using the floppy versions for the time being... Relief Action (France) 1987 Loriciels + + @@ -29749,6 +30035,7 @@ Please stick to using the floppy versions for the time being... Revenge of the C5 (UK) 1986 Atlantis Software + @@ -29761,6 +30048,8 @@ Please stick to using the floppy versions for the time being... Reversi Champion (France) 1986 Loriciels + + @@ -30366,6 +30655,8 @@ Please stick to using the floppy versions for the time being... Roland Ahoy! (UK) 1984 Amsoft + + @@ -30378,6 +30669,7 @@ Please stick to using the floppy versions for the time being... Roland en el Espacio (Spain) 1984 Indescomp + @@ -30390,6 +30682,8 @@ Please stick to using the floppy versions for the time being... Roland Goes Digging (UK) 1984 Amsoft + + @@ -30402,6 +30696,8 @@ Please stick to using the floppy versions for the time being... Roland Goes Square Bashing (UK) 1984 Amsoft + + @@ -30413,7 +30709,9 @@ Please stick to using the floppy versions for the time being... Roland in the Caves (UK) 1984 - Indescomp + Amsoft + + @@ -30426,6 +30724,8 @@ Please stick to using the floppy versions for the time being... Roland in Time (UK) 1984 Amsoft + + @@ -30437,7 +30737,9 @@ Please stick to using the floppy versions for the time being... Roland on the Ropes (UK) 1984 - Zigurat + Amsoft + + @@ -30450,6 +30752,8 @@ Please stick to using the floppy versions for the time being... Roland on the Run (UK) 1984 Amsoft + + @@ -30915,6 +31219,7 @@ Please stick to using the floppy versions for the time being... Salut l'Artiste (France) 1984 Amsoft + @@ -30999,6 +31304,8 @@ Please stick to using the floppy versions for the time being... Sapiens (France) 1986 Loriciels + + @@ -31035,6 +31342,7 @@ Please stick to using the floppy versions for the time being... S.A.S. Assault Course. (UK) 1986 Atlantis Software + @@ -31117,6 +31425,8 @@ Please stick to using the floppy versions for the time being... Satellite Warrior (UK) 1985 Amsoft + + @@ -31177,9 +31487,10 @@ Please stick to using the floppy versions for the time being... - Schneider Basic-Lehrbuch Teil 1 (Germany) + Schneider BASIC-Lehrbuch Teil 1 (Germany) 1984 - Amsoft + Schneider Computer Division + @@ -31204,9 +31515,10 @@ Please stick to using the floppy versions for the time being... - Schneider Basic-Lehrbuch Teil 2 (Germany) + Schneider BASIC-Lehrbuch Teil 2 (Germany) 1985 - Amsoft + Schneider Computer Division + @@ -31282,6 +31594,8 @@ Please stick to using the floppy versions for the time being... The Scout Steps Out (UK) 1985 Amsoft + + @@ -31419,6 +31733,8 @@ Please stick to using the floppy versions for the time being... Le Secret du Tombeau (France) 1986 Loriciels + + @@ -31430,7 +31746,8 @@ Please stick to using the floppy versions for the time being... El Secreto de la Tumba (Spain) 1986 - Loriciels + Loriciels / Proein Soft Line + @@ -31793,7 +32110,7 @@ Please stick to using the floppy versions for the time being... Sherman M4 (Spain) 1990 - Loriciels + Loriciel @@ -32279,6 +32596,7 @@ Please stick to using the floppy versions for the time being... Skatin' USA (UK) 1990 Atlantis Software + @@ -32343,7 +32661,7 @@ Please stick to using the floppy versions for the time being... Skweek (Spain) 1989 - Loriciels + Loriciels / Proein Soft Line @@ -32488,6 +32806,7 @@ Please stick to using the floppy versions for the time being... Snoball in Hell! (UK) 1989 Atlantis Software + @@ -32925,7 +33244,8 @@ Please stick to using the floppy versions for the time being... Southern Belle (UK) 1985 - Hewson + Hewson Consultants + @@ -33025,6 +33345,8 @@ Please stick to using the floppy versions for the time being... Space Hawks (UK) 1984 Amsoft + + @@ -33037,6 +33359,7 @@ Please stick to using the floppy versions for the time being... Space Racer (France) 1988 Loriciels + @@ -33108,7 +33431,8 @@ Please stick to using the floppy versions for the time being... Space Trader (UK) 1986 - Amsoft + Atlantis Software + @@ -33335,6 +33659,7 @@ Please stick to using the floppy versions for the time being... Spindrone (UK) 1988 Atlantis Software + @@ -33494,6 +33819,8 @@ Please stick to using the floppy versions for the time being... Spooky Castle (UK) 1990 Atlantis Software + + @@ -34163,6 +34490,8 @@ Please stick to using the floppy versions for the time being... Stock-Aid (Spain) 1984 Amsoft + + @@ -34187,6 +34516,8 @@ Please stick to using the floppy versions for the time being... Stockmarket (UK) 1985 Amsoft + + @@ -34270,7 +34601,8 @@ Please stick to using the floppy versions for the time being... Stormlord (UK) 1989 - Hewson + Hewson Consultants + @@ -34789,6 +35121,8 @@ Please stick to using the floppy versions for the time being... Subterranean Stryker (UK) 1986 Amsoft + + @@ -34813,6 +35147,8 @@ Please stick to using the floppy versions for the time being... Sultan's Maze (Spain) 1984 Amsoft + + @@ -34825,6 +35161,8 @@ Please stick to using the floppy versions for the time being... Sultan's Maze (UK, BASIC 1.0) 1984 Amsoft + + @@ -35035,6 +35373,8 @@ Please stick to using the floppy versions for the time being... Super Pipeline II (UK) 1985 Amsoft + + @@ -35143,7 +35483,9 @@ Please stick to using the floppy versions for the time being... Super Ski (France) 1988 - Microids + Microïds + + @@ -35155,7 +35497,7 @@ Please stick to using the floppy versions for the time being... Super Skweek (France) 1990 - Loriciels + Loriciel @@ -35172,7 +35514,7 @@ Please stick to using the floppy versions for the time being... Super Skweek (Spain) 1990 - Loriciels + Loriciels / Proein Soft Line @@ -35327,6 +35669,7 @@ Please stick to using the floppy versions for the time being... Superkid (UK) 1990 Atlantis Software + @@ -35339,6 +35682,7 @@ Please stick to using the floppy versions for the time being... Superkid in Space (UK) 1991 Atlantis Software + @@ -35494,6 +35838,7 @@ Please stick to using the floppy versions for the time being... The Survivors (UK) 1988 Atlantis Software + @@ -35776,6 +36121,8 @@ Please stick to using the floppy versions for the time being... Tank Commander (UK) 1986 Amsoft + + @@ -35836,6 +36183,7 @@ Please stick to using the floppy versions for the time being... Tapper (UK) 1986 Amsoft + @@ -35908,6 +36256,7 @@ Please stick to using the floppy versions for the time being... Tascopy 464 (Spain) 1984 Microbyte + @@ -35937,6 +36286,7 @@ Please stick to using the floppy versions for the time being... Tasprint 464 (Spain) 1984 Microbyte + @@ -35970,7 +36320,7 @@ Please stick to using the floppy versions for the time being... - Teach Yourself Amstrad Basic Part 1 (UK) + Teach Yourself Amstrad BASIC Part 1 (UK) 1984 Amsoft @@ -35987,7 +36337,7 @@ Please stick to using the floppy versions for the time being... - Teach Yourself Amstrad Basic Part 2 (UK) + Teach Yourself Amstrad BASIC Part 2 (UK) 1985 Amsoft @@ -36185,7 +36535,7 @@ Please stick to using the floppy versions for the time being... Le Temps des Heros (Europe?) 1991 - Loriciels + Loriciel @@ -36228,6 +36578,7 @@ Please stick to using the floppy versions for the time being... Ten-Pin Challenge (UK) 1987 Atlantis Software + @@ -36240,6 +36591,9 @@ Please stick to using the floppy versions for the time being... Tennis 3D (France) 1986 Loriciels + + + @@ -36251,7 +36605,7 @@ Please stick to using the floppy versions for the time being... Tennis Cup (France) 1989 - Loriciels + Loriciel @@ -36983,6 +37337,8 @@ Please stick to using the floppy versions for the time being... Tie Break (France) 1985 Sprites + + @@ -37096,6 +37452,8 @@ Please stick to using the floppy versions for the time being... Timeman One (UK) 1984 Amsoft + + @@ -37108,6 +37466,8 @@ Please stick to using the floppy versions for the time being... Timeman Two (UK) 1984 Amsoft + + @@ -37413,6 +37773,8 @@ Please stick to using the floppy versions for the time being... Tombstowne (UK) 1985 Amsoft + + @@ -37449,6 +37811,8 @@ Please stick to using the floppy versions for the time being... Tony Truand (France) 1985 Loriciels + + @@ -37582,6 +37946,8 @@ Please stick to using the floppy versions for the time being... Torann (France) 1985 Loriciels + + @@ -37765,6 +38131,8 @@ Please stick to using the floppy versions for the time being... Traffic (UK) 1985 Amsoft + + @@ -38874,7 +39242,7 @@ Please stick to using the floppy versions for the time being... Uridium (UK) 1987 - Hewson + Hewson Consultants @@ -38899,6 +39267,8 @@ Please stick to using the floppy versions for the time being... Vagan Attack (UK) 1985 Atlantis Software + + @@ -40177,6 +40547,8 @@ Please stick to using the floppy versions for the time being... Wordhang (UK) 1984 Amsoft + + @@ -40411,6 +40783,8 @@ Please stick to using the floppy versions for the time being... World-Wise (UK) 1984 Amsoft + + @@ -40420,9 +40794,11 @@ Please stick to using the floppy versions for the time being... - World-Wise (France) + Le Géographe - France (France) 1984 Amsoft + + @@ -40599,6 +40975,8 @@ Please stick to using the floppy versions for the time being... Xanagrams (UK) 1984 Amsoft + + @@ -40925,7 +41303,7 @@ Please stick to using the floppy versions for the time being... Zapp (UK) 1985 - Hewson + Hewson Consultants @@ -40973,7 +41351,8 @@ Please stick to using the floppy versions for the time being... Zedis II (Spain) 1984 - Amsoft + Microbyte + @@ -41092,6 +41471,8 @@ Please stick to using the floppy versions for the time being... Zox 2099 (France) 1987 Loriciels + + @@ -41115,7 +41496,7 @@ Please stick to using the floppy versions for the time being... Zynaps (UK) 1987 - Hewson + Hewson Consultants @@ -41127,7 +41508,7 @@ Please stick to using the floppy versions for the time being... Zynaps (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -41139,7 +41520,7 @@ Please stick to using the floppy versions for the time being... Zynaps (UK, alt) 1987 - Hewson + Hewson Consultants diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml index f5ef4cabfbd..df45744489e 100644 --- a/hash/ibm5170.xml +++ b/hash/ibm5170.xml @@ -4415,8 +4415,8 @@ license:CC0-1.0 - Windows NT 3.1 (3.10.511.1) [3.5" floppy] - 1993 + Windows NT 3.1 (3.10.528.1) [3.5" floppy] + 1994 Microsoft @@ -4531,6 +4531,123 @@ license:CC0-1.0 + + Windows NT 3.1 (3.10.511.1) [3.5" floppy] + 1993 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows NT Advanced Server 3.1 (3.10.511.1) [3.5" floppy] 1993 diff --git a/hash/ibm5170_cdrom.xml b/hash/ibm5170_cdrom.xml index cc59d658ead..63870ca2802 100644 --- a/hash/ibm5170_cdrom.xml +++ b/hash/ibm5170_cdrom.xml @@ -7520,7 +7520,7 @@ Installation and Open Circulation CDs are bootable. - + @@ -7537,7 +7537,7 @@ Installation and Open Circulation CDs are bootable. - + @@ -7554,7 +7554,7 @@ Installation and Open Circulation CDs are bootable. - + diff --git a/hash/mac_cdrom.xml b/hash/mac_cdrom.xml index f9746295ab0..a04038bd3af 100644 --- a/hash/mac_cdrom.xml +++ b/hash/mac_cdrom.xml @@ -29,11 +29,13 @@ PPC750 - PowerPC 750 (G3) CPU + Chex Quest 1996 General Mills + @@ -41,24 +43,26 @@ PPC750 - PowerPC 750 (G3) CPU + Hexen: Beyond Heretic 1995 GT Interactive + + + + id Anthology 1996 id Software - @@ -67,6 +71,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.0a9 ("Big Bang" pre-release) 1991 @@ -78,6 +83,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.1 (US English) 1992 @@ -89,6 +95,7 @@ PPC750 - PowerPC 750 (G3) CPU + Performa CD (System 7.1.2P for Quadra 630 and LC/Performa 580) (US English) 1994 @@ -100,6 +107,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.5 (US English) 1994 @@ -111,6 +119,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.5.3 (US English) 1996 @@ -122,6 +131,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6 (US English) 1997 @@ -134,6 +144,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6 (German) 1997 @@ -146,6 +157,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6.1 (US English) 1997 @@ -158,6 +170,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 8 (Japanese) 1997 @@ -170,6 +183,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 8.1 (US English) 1998 @@ -182,6 +196,7 @@ PPC750 - PowerPC 750 (G3) CPU + My First Math Adventure: Adding and Subtracting @@ -194,6 +209,7 @@ PPC750 - PowerPC 750 (G3) CPU + Power Macintosh 6100/7100/8100 CD (System Software 7.1.2P) (US English) 1994 @@ -206,6 +222,7 @@ PPC750 - PowerPC 750 (G3) CPU + The Ultimate Doom 1995 diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml index ede63cf5ad0..bce7a30f176 100644 --- a/hash/spectrum_cass.xml +++ b/hash/spectrum_cass.xml @@ -5335,6 +5335,35 @@ no loading screen, no custom loader + + Bounce Panic + Hangman + 1983 + Poppy Soft + + + + + + + + + + + + + + + + Boxform + 1988 + Boxoft + + + + + + + Brian vs. The Bullies 2012 @@ -6543,9 +6572,11 @@ no loading screen, no custom loader - Commando (Loriciels) + Commando (Sprites) 1984 - Loriciels + Sprites + + @@ -11437,6 +11468,17 @@ Expects you to press a key after the title screen appears, or it will miss the n + + The Final Glide + 1983 + Rickshaw / Softek + + + + + + + Flight Simulation (release 2) 1983 @@ -14531,7 +14573,7 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 2, Endurance Games) 1985 - System 3 Software + Endurance Games @@ -14546,8 +14588,8 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 3) - 19?? - <unknown> + 1985 + System 3 Software @@ -14562,8 +14604,8 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 4, Endurance Games) - 19?? - <unknown> + 1985 + Endurance Games @@ -14623,7 +14665,7 @@ Expects you to press a key after the title screen appears, or it will miss the n Into the Eagle's Nest (Players) 1987 - Pandora / Players + Players Software @@ -14799,8 +14841,8 @@ Expects you to press a key after the title screen appears, or it will miss the n ISO-Copy 2 v2.0 - 19?? - <unknown> + 1984 + Individual Software @@ -14810,8 +14852,8 @@ Expects you to press a key after the title screen appears, or it will miss the n ISO-Copy v1.0 - 19?? - <unknown> + 1984 + Individual Software @@ -15163,7 +15205,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Jet Set Willy Room Designer (Master) + Jet Set Willy Room Designer (master tape) 1985 R.D. Foord Software @@ -15180,8 +15222,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5 - Development Master) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15196,8 +15238,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5, set 1) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15212,8 +15254,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5, set 2) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15223,8 +15265,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v1) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -16455,8 +16497,8 @@ Side B: Laser Shoot (original release) Kokotoni Wilf (Encore) - 1984 - Elite Systems / Encore + 1989 + Encore @@ -16466,7 +16508,7 @@ Side B: Laser Shoot (original release) Kokotoni Wilf (MCM) - 1984 + 1989 MCM Software @@ -16555,8 +16597,9 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 2, Zafiro) - 19?? - <unknown> + 1985 + Zafi Chip + @@ -16566,8 +16609,8 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 3) - 19?? - <unknown> + 1984 + Ocean @@ -16577,8 +16620,9 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 4, Zafiro) - 19?? - <unknown> + 1985 + Zafi Chip + @@ -16588,8 +16632,9 @@ Side B: Laser Shoot (original release) Kliatba Noci (set 1) - 19?? - <unknown> + 1993 + Ultrasoft + @@ -16599,8 +16644,9 @@ Side B: Laser Shoot (original release) Kliatba Noci (set 2) - 19?? - <unknown> + 1993 + Ultrasoft + @@ -17995,6 +18041,22 @@ Side B: Laser Shoot (original release) + + Micro Drivin' (PD) + 1988 + Sprectum PD Adventures + + + + + + + + + + + + Microprose Soccer (release 2 - 128K) 1989 @@ -30454,6 +30516,22 @@ Side B: Laser Shoot (original release) + + TX-3 + 19?? + <unknown> + + + + + + + + + + + + @@ -34015,6 +34093,17 @@ Side B - Game 5 : Grand Prix Drivers + + Crook + 198? + <unknown> + + + + + + + Quattro Adventure @@ -40503,6 +40592,7 @@ Side B - 9 - Confusion (original release) 1987 Hobby Press + @@ -43742,9 +43832,10 @@ Side B: Once Upon a Lily Pad - Abbey of Crime (English Beta) - 19?? + Abbey of Crime (English beta) + 2003 <unknown> + @@ -46949,6 +47040,25 @@ Side B: Once Upon a Lily Pad + + Answer Back Factfile 500 - Super Sports + 1985 + Kosmos Software + + + + + + + + + + + + + + + Answer Back Junior 1985 @@ -46993,7 +47103,7 @@ Side B: Once Upon a Lily Pad - Antennas And Feeders + Antennas and Feeders 1983 PW Publishing @@ -47003,6 +47113,17 @@ Side B: Once Upon a Lily Pad + + Antony and Cleopatra + 1983 + Akadimias + + + + + + + The Anttilis Mission (master tape) 1992 @@ -54426,6 +54547,17 @@ Side B: Once Upon a Lily Pad + + Britain in the Age of Total War + 1984 + Akadimias + + + + + + + Britain Invaded 1985 @@ -65047,6 +65179,22 @@ Side B: Once Upon a Lily Pad + + The Crystal of Chantie (PD) + 198? + Spectrum PD Adventures + + + + + + + + + + + + The Crystal of Power 1989 @@ -72230,6 +72378,18 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) + + + Éditeur de Manoir + 2012 + Gilles Marty + + + + + + + Editor Musical @@ -81657,7 +81817,9 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) Gestion de Stock 1984 Sprites + + @@ -83349,6 +83511,17 @@ Tape 1 - Side B: + + Graph + 1984 + AVC Software + + + + + + + Graphic Creator 1982 @@ -90169,6 +90342,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Inferno (set 1) 1993 Proxima Software + + @@ -90179,7 +90354,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Inferno (set 2, Sintech) 1993 - Proxima Software / Sintech + Sintech + + @@ -90235,11 +90412,13 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) 1982 ACS + + @@ -90248,14 +90427,16 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Infrared (set 2) - 19?? - <unknown> + 1982 + ACS + + @@ -90264,20 +90445,33 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Infrared (set 3) - 19?? - <unknown> + 1982 + ACS + + + + Infrared (Elettronica) + 1983 + Elettronica CS + + + + + + + Ingrid's Back! 1988 @@ -90315,20 +90509,20 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inheritance (Mikro-Gen) + Inheritance (release 2) 1982 - Mikro-Gen + Hessel Software - + - Inheritance - Release 1 - 19?? - <unknown> + Inheritance (release 1) + 1982 + Hessel Software @@ -90337,12 +90531,12 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inheritance - Release 2 - 19?? - <unknown> + Inheritance (Mikro-Gen) + 1982 + Mikro-Gen - + @@ -90446,23 +90640,23 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inside Outing - Double Case (Dro Soft) + Inside Outing 1988 - Dro Soft + The Edge - - + + - - Inside Outing - 19?? - <unknown> + + Inside Outing (Dro Soft, double case) + 1988 + Dro Soft - - + + @@ -90597,33 +90791,35 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Intercepteur Cobalt (Software Center) + Intercepteur Cobalt 1984 - Software Center + ERE Informatique + - - + + - - + + - - Intercepteur Cobalt - 19?? - <unknown> + + Intercepteur Cobalt (Software Center) + 1984 + Software Center + - - + + - - + + @@ -90658,55 +90854,61 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Intermediate English 1 1982 - Rose + Rose Software + + - - Intermediate English 2 - Release 1 - 19?? - <unknown> + + Intermediate English 2 (release 1) + 1982 + Rose Software + + - - Intermediate English 2 - Release 3 - 19?? - <unknown> + + Intermediate English 2 (release 3) + 1982 + Rose Software + + - + Intermediate Level Geography - 19?? - <unknown> + 1985 + Scisoft @@ -90719,10 +90921,10 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - + Intermediate Level Maths - 19?? - <unknown> + 1984 + Scisoft @@ -90959,7 +91161,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) International Manager (set 3, Cult Games) 1986 - D&H Games / Cult Games + Cult Games @@ -91000,7 +91202,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 1) + International Rugby (Artic Computing) 1985 Artic Computing @@ -91011,9 +91213,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 2, Micro Value) + International Rugby (Micro Value) 1985 - Artic Computing Ltd / Micro Value + Micro Value @@ -91022,9 +91224,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 3, Blue Ribbon) + International Rugby (Blue Ribbon) 1985 - Artic Computing Ltd / Blue Ribbon + Blue Ribbon @@ -91142,7 +91344,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Intruder Alert (set 2, Ver.II) + Intruder Alert (set 2, ver.II) 1989 Compass Software @@ -91175,7 +91377,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 1) + Invaders (1982, Artic) 1982 Artic Computing @@ -91186,9 +91388,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 2, Aackosoft) + Invaders (1982, Aackosoft) 1982 - Artic Computing Ltd / Aackosoft + Aackosoft @@ -91197,9 +91399,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 3, ZX Data) + Invaders (1982, ZX Data) 1982 - Artic Computing Ltd / ZX Data + ZX Data @@ -91208,7 +91410,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1983, DK'Tronics Ltd) + Invaders (1983, DK'Tronics) 1983 DK'Tronics @@ -91241,7 +91443,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders From Planet X (set 3, Mastering Tape) + Invaders From Planet X (set 3, master tape) 1991 Compass Software @@ -91456,8 +91658,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Invincible Island - 19?? - <unknown> + 1983 + Richard Shepherd @@ -91588,7 +91790,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Isotopia - +2a + Isotopia (+2a release) 2007 OCTOCOM @@ -91599,9 +91801,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Isotopia - 128k - 19?? - <unknown> + Isotopia (128K release) + 2007 + OCTOCOM @@ -92287,8 +92489,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Jack And The Beanstalk (Zenobi) - 19?? - <unknown> + 1988 + Zenobi Software @@ -92296,10 +92498,10 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - - Jack And The Beanstalk - 19?? - <unknown> + + Jack and the Beanstalk (Thor) + 1984 + Thor Computer Software @@ -94704,8 +94906,8 @@ Created by Mark Jeffries Juggernaut - 19?? - <unknown> + 1985 + CRL Group @@ -94911,10 +95113,10 @@ Created by Mark Jeffries - + Junior Maths Tape 1 - 19?? - <unknown> + 1983 + The Hicks Consortium @@ -95304,7 +95506,7 @@ Created by Mark Jeffries Kat Trap - 1987 + 1986 Streetwise @@ -95315,8 +95517,8 @@ Created by Mark Jeffries Kat Trap (Bug-Byte) - 19?? - <unknown> + 1987 + Bug-Byte Software @@ -95348,8 +95550,8 @@ Created by Mark Jeffries Kempston Toolkit - 19?? - <unknown> + 1987 + Kempston Micro Electronics @@ -95374,7 +95576,7 @@ Created by Mark Jeffries - Kendo Warrior (set 1) + Kendo Warrior 1989 Byte Back @@ -95385,9 +95587,9 @@ Created by Mark Jeffries - Kendo Warrior (set 2, MCM) - 19?? - <unknown> + Kendo Warrior (MCM) + 1989 + MCM Software @@ -95429,7 +95631,7 @@ Created by Mark Jeffries - Kenny Dalglish Soccer Match (set 1) + Kenny Dalglish Soccer Match 1990 Impressions @@ -95440,9 +95642,9 @@ Created by Mark Jeffries - Kenny Dalglish Soccer Match (set 2, EDOS) - 19?? - <unknown> + Kenny Dalglish Soccer Match (EDOS) + 1993 + EDOS @@ -95463,8 +95665,8 @@ Created by Mark Jeffries Kentilla (set 2, Mastertronic) - 19?? - <unknown> + 1986 + Mastertronic @@ -95658,31 +95860,31 @@ Created by Mark Jeffries - Killer Kong (Prism) + Killer Kong (set 2) 1983 - Prism Leisure Corporation + Blaby Computer Games - - + + - - Killer Kong (set 2) - 19?? - <unknown> + + Killer Kong (Prism) + 1983 + Prism Leisure Corporation - - + + Killer Kong - 19?? - <unknown> + 1983 + Blaby Computer Games @@ -95774,8 +95976,8 @@ Created by Mark Jeffries King Otto's Quest - 19?? - <unknown> + 1996 + Stephen Robertson @@ -95795,9 +95997,9 @@ Created by Mark Jeffries - Kingdom (Richard Francis Altwasser) (set 2) - 19?? - <unknown> + Kingdom (type-in from book "Cambridge Colour Collection") + 1982 + Richard Francis Altwasser @@ -95829,8 +96031,8 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 1 - 19?? - <unknown> + 1993 + Proxima Software @@ -95840,8 +96042,8 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 2 - 19?? - <unknown> + 1993 + Proxima Software @@ -95852,7 +96054,7 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 3 1993 - Proxima + Proxima Software @@ -95860,6 +96062,16 @@ Created by Mark Jeffries + + Klub Uzivatelu Desktopu 4 + 1993 + Proxima Software + + + + + + Knight Driver @@ -95873,23 +96085,23 @@ Created by Mark Jeffries - Knight Fall (System 4) + Knight Fall 1987 - System 4 + Pirate Software - - + + - Knight Fall - 19?? - <unknown> + Knight Fall (System 4) + 1987 + System 4 - - + + @@ -95906,23 +96118,23 @@ Created by Mark Jeffries - Knight Life (Zenobi) + Knight Life 1995 - Zenobi Software + Stephen Boyd - - + + - Knight Life - 19?? - <unknown> + Knight Life (Zenobi) + 1995 + Zenobi Software - - + + @@ -95965,8 +96177,8 @@ Created by Mark Jeffries Knockout (Vinsoft) - 19?? - <unknown> + 1989 + Vinsoft @@ -95979,42 +96191,42 @@ Created by Mark Jeffries - - Knockout (Americana) - 19?? - <unknown> + + Knockout (Alligata) + 1985 + Alligata Software - - + + - - + + - - Knockout (Alligata) - 19?? - <unknown> + + Knockout (Americana) + 1985 + Alligata Software - - + + - - + + - + Knockout - 19?? - <unknown> + 1983 + Mikro-Gen @@ -96049,10 +96261,10 @@ Created by Mark Jeffries - + Know Your Own PSI-Q - 19?? - <unknown> + 1985 + Mirrorsoft @@ -96065,10 +96277,10 @@ Created by Mark Jeffries - + Know Your Tables - 19?? - <unknown> + 1983 + Collins Educational @@ -96093,20 +96305,20 @@ Created by Mark Jeffries - Knuckle Busters (Dro Soft) - 1988 - Dro Soft + Knuckle Busters + 1987 + Melbourne House - - + + - + Knuckle Busters (Ricochet) - 19?? - <unknown> + 1987 + Ricochet @@ -96114,13 +96326,13 @@ Created by Mark Jeffries - - Knuckle Busters - 19?? - <unknown> + + Knuckle Busters (Dro Soft) + 1988 + Dro Soft - - + + @@ -96136,21 +96348,21 @@ Created by Mark Jeffries - - Kobyashi Naru (Zenobi) - 19?? - <unknown> + + Kobyashi Naru + 1987 + Mastertronic - - + + - + Kobyashi Naru (set 2) - 19?? - <unknown> + 1987 + Mastertronic @@ -96158,13 +96370,13 @@ Created by Mark Jeffries - - Kobyashi Naru - 19?? - <unknown> + + Kobyashi Naru (Zenobi) + 1992 + Zenobi Software - - + + @@ -96213,10 +96425,10 @@ Created by Mark Jeffries - + Kon - 19?? - <unknown> + 1984 + Anthony P. Hamilton @@ -96242,8 +96454,8 @@ Created by Mark Jeffries Konami's Golf (set 2) - 19?? - <unknown> + 1986 + Imagine Software @@ -96252,6 +96464,17 @@ Created by Mark Jeffries + Konami's Tennis + 1986 + Imagine Software + + + + + + + + Konami's Tennis (The Hit Squad) 1989 The Hit Squad @@ -96262,13 +96485,13 @@ Created by Mark Jeffries - - Konami's Tennis - 19?? - <unknown> + + Konami's Tennis (Erbe) + 1986 + Erbe Software - - + + @@ -96284,7 +96507,7 @@ Created by Mark Jeffries - + Kong (set 2) (Anirog) 1983 Anirog @@ -96295,7 +96518,6 @@ Created by Mark Jeffries - Kong's Revenge 1991 @@ -96356,7 +96578,7 @@ Created by Mark Jeffries - Kopykat - Release 1 + Kopykat (release 1) 1983 Medsoft @@ -96372,9 +96594,9 @@ Created by Mark Jeffries - Kopykat - Release 2 + Kopykat (release 2) 19?? - <unknown> + Medsoft @@ -96388,9 +96610,9 @@ Created by Mark Jeffries - Kopykat - Release 3 (set 2) + Kopykat (release 3, set 2) 19?? - <unknown> + Medsoft @@ -96399,9 +96621,9 @@ Created by Mark Jeffries - Kopykat - Release 3 + Kopykat (release 3, set 1) 19?? - <unknown> + Medsoft @@ -96410,9 +96632,9 @@ Created by Mark Jeffries - Kopykat - Release 4 (set 2) + Kopykat (release 4, set 2) 19?? - <unknown> + Medsoft @@ -96421,9 +96643,9 @@ Created by Mark Jeffries - Kopykat - Release 4 + Kopykat (release 4, set 1) 19?? - <unknown> + Medsoft @@ -96476,31 +96698,20 @@ Created by Mark Jeffries - Krakatoa (Paxman) + Krakatoa 1984 - Paxman Promotions + Abbex Electronics - + - Krakatoa (Profisoft) - 19?? - <unknown> - - - - - - - - - Krakatoa (set 2) - 19?? - <unknown> + Krakatoa (two sides) + 1984 + Abbex Electronics @@ -96513,13 +96724,24 @@ Created by Mark Jeffries - - Krakatoa - 19?? - <unknown> + + Krakatoa (Profisoft) + 1984 + Profisoft - + + + + + + + Krakatoa (Paxman) + 1984 + Paxman Promotions + + + @@ -96585,6 +96807,17 @@ Created by Mark Jeffries + Krazy Kong + 1983 + PSS + + + + + + + + Krazy Kong (Soft & Easy) 1983 Soft & Easy @@ -96595,10 +96828,10 @@ Created by Mark Jeffries - + Krazy Kong (C-Tech) - 19?? - <unknown> + 1982 + C-Tech @@ -96611,17 +96844,6 @@ Created by Mark Jeffries - - Krazy Kong - 19?? - <unknown> - - - - - - - Kriss Kross 19?? @@ -96889,6 +97111,7 @@ Created by Mark Jeffries La Abadia del Crimen (set 1) 1988 Opera Soft + @@ -96900,6 +97123,7 @@ Created by Mark Jeffries La Abadia del Crimen (set 2) 19?? <unknown> + @@ -96911,6 +97135,7 @@ Created by Mark Jeffries La Abadia del Crimen (MCM) 1988 MCM Software + @@ -96922,6 +97147,7 @@ Created by Mark Jeffries La Alhambra 1992 Pepsi Soft + @@ -96933,6 +97159,7 @@ Created by Mark Jeffries La Aventura del Dragon 1991 Pepsi Soft + @@ -96944,6 +97171,7 @@ Created by Mark Jeffries La Aventura Espacial 1990 Aventuras AD + @@ -96960,6 +97188,7 @@ Created by Mark Jeffries La Aventura Espacial (IBSA) 1990 IBSA + @@ -96976,6 +97205,7 @@ Created by Mark Jeffries La Aventura Original 1989 Aventuras AD + @@ -96992,6 +97222,7 @@ Created by Mark Jeffries La Aventura Original (IBSA) 1989 IBSA + @@ -97031,9 +97262,10 @@ Created by Mark Jeffries - La Constitucion Espanola + La Constitucion Española 19?? - <unknown> + Investronica + @@ -97062,6 +97294,7 @@ Created by Mark Jeffries La Corona Magica 1990 OMK Software + @@ -97089,6 +97322,9 @@ Created by Mark Jeffries La Grande Boucle 1985 Sprites + + + @@ -97101,6 +97337,7 @@ Created by Mark Jeffries 198? Club Soft + @@ -97108,10 +97345,12 @@ Created by Mark Jeffries - + La Historia Interminable II (System 4) 1991 System 4 + + @@ -97123,6 +97362,8 @@ Created by Mark Jeffries La Princesa 1985 Software Center + + @@ -97139,6 +97380,7 @@ Created by Mark Jeffries La Pulga 1983 Investronica + @@ -97176,7 +97418,7 @@ Created by Mark Jeffries Labyrinth (Axis) 1983 - Axis + Axis Software @@ -97184,10 +97426,10 @@ Created by Mark Jeffries - + Labyrinth (Christor Buening) - 19?? - <unknown> + 1983 + Christor Buening @@ -97195,8 +97437,8 @@ Created by Mark Jeffries - - Labyrinth + + Labyrinth (unknown) 19?? <unknown> @@ -97255,10 +97497,21 @@ Created by Mark Jeffries - + + Land of Mire Mare (v1.06, 5678 keys) + 2014 + Luca Bordoni + + + + + + + + Land of Mire Mare (v1.03, QAOPM keys) - 19?? - <unknown> + 2014 + Luca Bordoni @@ -97266,10 +97519,10 @@ Created by Mark Jeffries - + Land of Mire Mare (v1.03, WASDM keys) - 19?? - <unknown> + 2014 + Luca Bordoni @@ -97277,10 +97530,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.03) - 19?? - <unknown> + + Land of Mire Mare (v1.03, 5678 keys) + 2014 + Luca Bordoni @@ -97288,10 +97541,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.05) - 19?? - <unknown> + + Land of Mire Mare (v1.05, QAOPM keys) + 2014 + Luca Bordoni @@ -97299,10 +97552,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.06, Special Edition) - 19?? - <unknown> + + Land of Mire Mare (v1.06, Special Edition, 5678 keys) + 2014 + Luca Bordoni @@ -97310,10 +97563,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.06) - 19?? - <unknown> + + Land of Mire Mare (v1.06, cursor keys) + 2014 + Luca Bordoni @@ -97333,9 +97586,9 @@ Created by Mark Jeffries - Lander (R D Foord Software) + Lander (R.D. Foord Software) 19?? - <unknown> + R.D. Foord Software @@ -97435,6 +97688,7 @@ Created by Mark Jeffries Laser Attack 19?? <unknown> + @@ -97534,8 +97788,8 @@ Created by Mark Jeffries Laser Squad (Blade) - 19?? - <unknown> + 1988 + Blade Software @@ -97553,27 +97807,63 @@ Created by Mark Jeffries 1988 Blade Software + + + + + + Laser Squad (System 4, small case) + 1988 + System 4 + + + + + + + + + + + + + + Laser Squad (System 4, large case) + 1990 + System 4 + + + + + + + + + + + + Laser Squad - Expansion Kit One 1988 @@ -97935,9 +98225,9 @@ Created by Mark Jeffries - League Table (Football Follower) - 19?? - <unknown> + League Table (26 Oct) + 1985 + Hobby Software @@ -97946,9 +98236,9 @@ Created by Mark Jeffries - League Table - 19?? - <unknown> + League Table (23 May 85) + 1985 + Hobby Software @@ -98625,8 +98915,12 @@ Lacks game introduction, bad dump or alternate version? Les Diamants de Kheops - 19?? + 198? Sprites + + + + @@ -98691,7 +98985,7 @@ Lacks game introduction, bad dump or alternate version? Letta-Head 1985 - Bradway + Bradway Software @@ -98704,10 +98998,10 @@ Lacks game introduction, bad dump or alternate version? - + Letta-Head Plus (set 2) - 19?? - <unknown> + 1985 + Bradway Software @@ -98720,10 +99014,10 @@ Lacks game introduction, bad dump or alternate version? - + Letta-Head Plus - 19?? - <unknown> + 1985 + Bradway Software @@ -98738,8 +99032,8 @@ Lacks game introduction, bad dump or alternate version? Letters (Chalksoft) - 19?? - <unknown> + 1984 + Chalksoft @@ -98764,9 +99058,9 @@ Lacks game introduction, bad dump or alternate version? - Liberator (PJ Soft) + Liberator (P.J.) 1989 - P.J. + P.J. Software @@ -98774,10 +99068,10 @@ Lacks game introduction, bad dump or alternate version? - - Liberator - 19?? - <unknown> + + Liberator (Lyversoft) + 1984 + Lyversoft @@ -98790,11 +99084,13 @@ Lacks game introduction, bad dump or alternate version? 1989 Domark + + @@ -118021,6 +118317,20 @@ Nothing happens after loading the cassette + + Play for Peace + 1989 + Top Games + + + + + + + + + + Play It Again Sam 1986 @@ -126865,6 +127175,19 @@ Game 4 - Char-Wallah + + Ruleta Parlante + 1985 + Creativos Editoriales + + + + + + + + + Rulett (128K) 2005 @@ -134396,10 +134719,11 @@ Game 4 - Char-Wallah - - Space Raiders - Invasores Galácticos (Portuguese) + + Space Raiders - Invasores Galácticos 1983 - TMX Portugal Ltda + TMX Portugal + @@ -134407,6 +134731,18 @@ Game 4 - Char-Wallah + + Space Raiders - Invasores Galácticos (alt) + 1983 + TMX Portugal + + + + + + + + Space Resque 1982 @@ -140232,6 +140568,8 @@ Game 4 - Char-Wallah Super Sabre 1984 Sprites + + @@ -146463,6 +146801,22 @@ Game 4 - Char-Wallah + + Time Warrior (Guild) + 199? + The Guild + + + + + + + + + + + + Time Watch (alt) 1986 @@ -151402,9 +151756,9 @@ Version without loading screen, maybe a pre-release - Videomaster - Master Tape - 19?? - <unknown> + Videomaster (master tape) + 1991 + Chris Brown @@ -151934,56 +152288,90 @@ Version without loading screen, maybe a pre-release - - Vowels of the Earth - 19?? - <unknown> + + Vowels of the Earth: Part 1 - The Quest for 'A' + 1986 + I.E.C. Software + + - + + + + Vowels of the Earth: Part 2 - In Search of 'E' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 3 - Discovering 'I' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 4 - Go for 'O' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 5 - The Hunt for 'U' + 1987 + I.E.C. Software + + - + + @@ -154270,6 +154658,24 @@ Version without loading screen, maybe a pre-release + + Winning Games on the ZX Spectrum + 1984 + Ellis Horwood + + + + + + + + + + + + + + Winter Olympiad (Micro Value) 1988 @@ -160922,6 +161328,24 @@ Side B - Game 2: Superkid in Space (Atlantis Software) + + A to Z + 1984 + I.E.C. Software + + + + + + + + + + + + + + A Toda Maquina 1989 @@ -166860,16 +167284,18 @@ Tape 2 - Side B: Star Wars - + Ian Botham's Test Match & Superfile - 19?? - <unknown> + 1985 + Tynesoft + + @@ -166903,8 +167329,8 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 001 + + Impuls Cassette 001 1982 Impulsoft @@ -166914,10 +167340,10 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 003 - 19?? - <unknown> + + Impuls Cassette 003 + 1982 + Impulsoft @@ -166925,10 +167351,10 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 007 - 19?? - <unknown> + + Impuls Cassette 007 + 1983 + Impulsoft @@ -166998,13 +167424,15 @@ Tape 2 - Side B: Star Wars Interrupt Sound Effects & Characterset Collection 19?? - <unknown> + Sigmasoft + + @@ -167124,8 +167552,8 @@ Tape 2 - Side B: Star Wars Jega Tape 2 - 19?? - <unknown> + 1982 + Jega Software @@ -167180,10 +167608,11 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - - K'set (Issue 01) - 19?? - <unknown> + + K'set № 1 (Octubre 85) + 1985 + Ediciones y Textos + @@ -167196,10 +167625,11 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - - K'set (Issue 02) - 19?? - <unknown> + + K'set № 1 (Noviembre 85) + 1985 + Ediciones y Textos + @@ -167334,7 +167764,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Konami's Coin-Op Hits +2 + Konami's Coin-Op Hits (Spectrum +2) 1986 Imagine Software @@ -167361,8 +167791,8 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) Konami's Coin-Op Hits - 19?? - <unknown> + 1986 + Imagine Software @@ -167386,9 +167816,9 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Krazy Kong & Panic Island & Rocket Raider + Krazy Kong + Panic Island + Rocket Raider 19?? - <unknown> + C-Tech @@ -167402,7 +167832,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Krazy Kong & Panic Island + Krazy Kong + Panic Island 1982 C-Tech @@ -167427,6 +167857,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) La Rana Z-Man 1984 Ventamatic + @@ -167435,19 +167866,18 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Las Cuatro en Raya & Rescate del Tesoro (set 1) + Las Cuatro en Raya + Rescate del Tesoro (set 1) 1984 Investronica - + + + @@ -167455,19 +167885,18 @@ Side B: Rescate del Tesoro (original release) - Las Cuatro en Raya & Rescate del Tesoro (set 2) - 19?? - <unknown> - + Las Cuatro en Raya + Rescate del Tesoro (set 2) + 1984 + Investronica + + + @@ -167538,26 +167967,30 @@ Side B: Rescate del Tesoro (original release) - + Leaderboard Par 3 - 19?? - <unknown> + 1988 + U.S. Gold + + + + @@ -167710,6 +168143,213 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) + + Libreria de Software Spectrum № 1 (Febrero 85) (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 1 (Febrero 85) (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 2 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 2 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 3 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 3 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape, alt 2) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + Libreria de Software Spectrum № 5 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 5 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + Libreria de Software Spectrum (Issue 11) 1986 @@ -167751,10 +168391,11 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) - - Libreria De Software Spectrum (Issue 26) (Gluman) - 19?? - <unknown> + + Libreria de Software Spectrum № 26 (covertape, Gluman) + 1987 + Grupo de Trabajo Software + @@ -167762,22 +168403,6 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) - - Librería De Software Spectrum (Issue 04) - 19?? - <unknown> - - - - - - - - - - - - Lightgun Games (48K) 1989 @@ -176821,10 +177446,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 01) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 1 (Spanish release, covertape) + 1984 + Geasa + @@ -176837,10 +177463,219 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 10) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 1 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 2 (covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 3 (Spanish release, covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 3 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 4 (Spanish release, covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 4 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 5 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 6 (Spanish release, covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 6 (Portuguese release, covertape) + 1985 + Edições Latinas + + + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 7 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 8 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 9 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 10 (covertape) + 1985 + Geasa + @@ -176853,10 +177688,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 12) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 12 (covertape) + 1985 + Geasa + @@ -176869,10 +177705,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 14) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 14 (covertape) + 1985 + Geasa + @@ -176885,10 +177722,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 15) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 15 (covertape) + 1985 + Geasa + @@ -176901,10 +177739,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 16) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 16 (covertape) + 1985 + Geasa + @@ -176917,10 +177756,28 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 20) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 17 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 20 (covertape) + 1986 + Geasa + @@ -176933,10 +177790,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 21) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 21 (covertape) + 1986 + Geasa + @@ -176949,10 +177807,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 22) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 22 (covertape) + 1986 + Geasa + @@ -176965,10 +177824,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 23) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 23 (covertape) + 1986 + Geasa + @@ -176981,10 +177841,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 24) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 24 (covertape) + 1986 + Geasa + @@ -176997,10 +177858,28 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 26) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 25 (covertape) + 1986 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 26 (covertape) + 1986 + Geasa + @@ -177013,10 +177892,44 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) + + Revista de Software VideoSpectrum № 28 (covertape) + 1986 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 31 (covertape) + 1987 + Geasa + + + + + + + + + + + + + View To A Kill Pack - 19?? - <unknown> + 1988 + Paxman Promotions diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index bee7a595236..32200b92bd1 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -4688,6 +4688,8 @@ if (BUSES["ZORRO"]~=null) then MAME_DIR .. "src/devices/bus/amiga/zorro/action_replay.h", MAME_DIR .. "src/devices/bus/amiga/zorro/buddha.cpp", MAME_DIR .. "src/devices/bus/amiga/zorro/buddha.h", + MAME_DIR .. "src/devices/bus/amiga/zorro/picasso2.cpp", + MAME_DIR .. "src/devices/bus/amiga/zorro/picasso2.h", MAME_DIR .. "src/devices/bus/amiga/zorro/ripple.cpp", MAME_DIR .. "src/devices/bus/amiga/zorro/ripple.h", MAME_DIR .. "src/devices/bus/amiga/zorro/toccata.cpp", diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index f94f56dc077..014c27a25d3 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -1738,6 +1738,7 @@ end -------------------------------------------------- -- MOS Technology 6502 and its many derivatives --@src/devices/cpu/m6502/deco16.h,CPUS["M6502"] = true +--@src/devices/cpu/m6502/g65sc02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/gew7.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/gew12.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m3745x.h,CPUS["M6502"] = true @@ -1754,8 +1755,6 @@ end --@src/devices/cpu/m6502/m6510.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m6510t.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m65ce02.h,CPUS["M6502"] = true ---@src/devices/cpu/m6502/m65c02.h,CPUS["M6502"] = true ---@src/devices/cpu/m6502/m65sc02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m740.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m7501.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m8502.h,CPUS["M6502"] = true @@ -1765,6 +1764,7 @@ end --@src/devices/cpu/m6502/st2xxx.h,CPUS["ST2XXX"] = true --@src/devices/cpu/m6502/st2204.h,CPUS["ST2XXX"] = true --@src/devices/cpu/m6502/st2205u.h,CPUS["ST2XXX"] = true +--@src/devices/cpu/m6502/w65c02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/w65c02s.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/xavix.h,CPUS["XAVIX"] = true --@src/devices/cpu/m6502/xavix.h,CPUS["XAVIX2000"] = true @@ -1775,6 +1775,8 @@ if CPUS["M6502"] then files { MAME_DIR .. "src/devices/cpu/m6502/deco16.cpp", MAME_DIR .. "src/devices/cpu/m6502/deco16.h", + MAME_DIR .. "src/devices/cpu/m6502/g65sc02.cpp", + MAME_DIR .. "src/devices/cpu/m6502/g65sc02.h", MAME_DIR .. "src/devices/cpu/m6502/gew7.cpp", MAME_DIR .. "src/devices/cpu/m6502/gew7.h", MAME_DIR .. "src/devices/cpu/m6502/gew12.cpp", @@ -1807,12 +1809,8 @@ if CPUS["M6502"] then MAME_DIR .. "src/devices/cpu/m6502/m6510.h", MAME_DIR .. "src/devices/cpu/m6502/m6510t.cpp", MAME_DIR .. "src/devices/cpu/m6502/m6510t.h", - MAME_DIR .. "src/devices/cpu/m6502/m65c02.cpp", - MAME_DIR .. "src/devices/cpu/m6502/m65c02.h", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.cpp", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.h", - MAME_DIR .. "src/devices/cpu/m6502/m65sc02.cpp", - MAME_DIR .. "src/devices/cpu/m6502/m65sc02.h", MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", MAME_DIR .. "src/devices/cpu/m6502/m740.h", MAME_DIR .. "src/devices/cpu/m6502/m7501.cpp", @@ -1825,6 +1823,8 @@ if CPUS["M6502"] then MAME_DIR .. "src/devices/cpu/m6502/r65c19.h", MAME_DIR .. "src/devices/cpu/m6502/rp2a03.cpp", MAME_DIR .. "src/devices/cpu/m6502/rp2a03.h", + MAME_DIR .. "src/devices/cpu/m6502/w65c02.cpp", + MAME_DIR .. "src/devices/cpu/m6502/w65c02.h", MAME_DIR .. "src/devices/cpu/m6502/w65c02s.cpp", MAME_DIR .. "src/devices/cpu/m6502/w65c02s.h", } @@ -1833,7 +1833,6 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/odeco16.lst", GEN_DIR .. "emu/cpu/m6502/deco16.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/ddeco16.lst" }, {"@echo Generating deco16 instruction source file...", PYTHON .. " $(1) s deco16 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om4510.lst", GEN_DIR .. "emu/cpu/m6502/m4510.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm4510.lst" }, {"@echo Generating m4510 instruction source file...", PYTHON .. " $(1) s m4510 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6502.lst", GEN_DIR .. "emu/cpu/m6502/m6502.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6502.lst" }, {"@echo Generating m6502 instruction source file...", PYTHON .. " $(1) s m6502 $(<) $(2) $(@)" }}, - { MAME_DIR .. "src/devices/cpu/m6502/om65c02.lst", GEN_DIR .. "emu/cpu/m6502/m65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65c02.lst" }, {"@echo Generating m65c02 instruction source file...", PYTHON .. " $(1) s m65c02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om65ce02.lst", GEN_DIR .. "emu/cpu/m6502/m65ce02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65ce02.lst" }, {"@echo Generating m65ce02 instruction source file...", PYTHON .. " $(1) s m65ce02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6509.lst", GEN_DIR .. "emu/cpu/m6502/m6509.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6509.lst" }, {"@echo Generating m6509 instruction source file...", PYTHON .. " $(1) s m6509 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6510.lst", GEN_DIR .. "emu/cpu/m6502/m6510.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6510.lst" }, {"@echo Generating m6510 instruction source file...", PYTHON .. " $(1) s m6510 $(<) $(2) $(@)" }}, @@ -1841,6 +1840,7 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 instruction source file...", PYTHON .. " $(1) s r65c02 - $(<) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/or65c19.lst", GEN_DIR .. "emu/cpu/m6502/r65c19.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dr65c19.lst" }, {"@echo Generating r65c19 instruction source file...", PYTHON .. " $(1) s r65c19 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/orp2a03.lst", GEN_DIR .. "emu/cpu/m6502/rp2a03.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/drp2a03.lst" }, {"@echo Generating rp2a03 instruction source file...", PYTHON .. " $(1) s rp2a03_core $(<) $(2) $(@)" }}, + { MAME_DIR .. "src/devices/cpu/m6502/ow65c02.lst", GEN_DIR .. "emu/cpu/m6502/w65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02.lst" }, {"@echo Generating w65c02 instruction source file...", PYTHON .. " $(1) s w65c02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/ow65c02s.lst", GEN_DIR .. "emu/cpu/m6502/w65c02s.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02s.lst" }, {"@echo Generating w65c02s instruction source file...", PYTHON .. " $(1) s w65c02s $(<) $(2) $(@)" }}, } @@ -1850,12 +1850,12 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/m6502.cpp", GEN_DIR .. "emu/cpu/m6502/m6502.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m6509.cpp", GEN_DIR .. "emu/cpu/m6502/m6509.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m6510.cpp", GEN_DIR .. "emu/cpu/m6502/m6510.hxx" }, - { MAME_DIR .. "src/devices/cpu/m6502/m65c02.cpp", GEN_DIR .. "emu/cpu/m6502/m65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m65ce02.cpp", GEN_DIR .. "emu/cpu/m6502/m65ce02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", GEN_DIR .. "emu/cpu/m6502/m740.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/r65c02.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/r65c19.cpp", GEN_DIR .. "emu/cpu/m6502/r65c19.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/rp2a03.cpp", GEN_DIR .. "emu/cpu/m6502/rp2a03.hxx" }, + { MAME_DIR .. "src/devices/cpu/m6502/w65c02.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/w65c02s.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02s.hxx" }, } end @@ -1905,7 +1905,6 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/odeco16.lst", GEN_DIR .. "emu/cpu/m6502/deco16d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/ddeco16.lst" }, {"@echo Generating deco16 disassembler source file...", PYTHON .. " $(1) d deco16 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om4510.lst", GEN_DIR .. "emu/cpu/m6502/m4510d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm4510.lst" }, {"@echo Generating m4510 disassembler source file...", PYTHON .. " $(1) d m4510 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6502.lst", GEN_DIR .. "emu/cpu/m6502/m6502d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6502.lst" }, {"@echo Generating m6502 disassembler source file...", PYTHON .. " $(1) d m6502 $(<) $(2) $(@)" }}) - table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om65c02.lst", GEN_DIR .. "emu/cpu/m6502/m65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65c02.lst" }, {"@echo Generating m65c02 disassembler source file...", PYTHON .. " $(1) d m65c02 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om65ce02.lst", GEN_DIR .. "emu/cpu/m6502/m65ce02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65ce02.lst" }, {"@echo Generating m65ce02 disassembler source file...", PYTHON .. " $(1) d m65ce02 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6509.lst", GEN_DIR .. "emu/cpu/m6502/m6509d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6509.lst" }, {"@echo Generating m6509 disassembler source file...", PYTHON .. " $(1) d m6509 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6510.lst", GEN_DIR .. "emu/cpu/m6502/m6510d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6510.lst" }, {"@echo Generating m6510 disassembler source file...", PYTHON .. " $(1) d m6510 $(<) $(2) $(@)" }}) @@ -1913,18 +1912,19 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 disassembler source file...", PYTHON .. " $(1) d r65c02 - $(<) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/or65c19.lst", GEN_DIR .. "emu/cpu/m6502/r65c19d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dr65c19.lst" }, {"@echo Generating r65c19 disassembler source file...", PYTHON .. " $(1) d r65c19 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/orp2a03.lst", GEN_DIR .. "emu/cpu/m6502/rp2a03d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/drp2a03.lst" }, {"@echo Generating rp2a03 disassembler source file...", PYTHON .. " $(1) d rp2a03 $(<) $(2) $(@)" }}) + table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/ow65c02.lst", GEN_DIR .. "emu/cpu/m6502/w65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02.lst" }, {"@echo Generating w65c02 disassembler source file...", PYTHON .. " $(1) d w65c02 $(<) $(2) $(@)" }}) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp", GEN_DIR .. "emu/cpu/m6502/deco16d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m4510d.cpp", GEN_DIR .. "emu/cpu/m6502/m4510d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6502d.cpp", GEN_DIR .. "emu/cpu/m6502/m6502d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6509d.cpp", GEN_DIR .. "emu/cpu/m6502/m6509d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6510d.cpp", GEN_DIR .. "emu/cpu/m6502/m6510d.hxx" }) - table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/m65c02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.cpp", GEN_DIR .. "emu/cpu/m6502/m65ce02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m740d.cpp", GEN_DIR .. "emu/cpu/m6502/m740d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/r65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/r65c19d.cpp", GEN_DIR .. "emu/cpu/m6502/r65c19d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.cpp", GEN_DIR .. "emu/cpu/m6502/rp2a03d.hxx" }) + table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/w65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02d.hxx" }) table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.h") @@ -1936,8 +1936,6 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6509d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6510d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6510d.h") - table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65c02d.cpp") - table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65c02d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m740d.cpp") @@ -1948,6 +1946,8 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/r65c19d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.h") + table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/w65c02d.cpp") + table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/w65c02d.h") end if opt_tool(CPUS, "XAVIX") then diff --git a/src/devices/bus/a2bus/4play.cpp b/src/devices/bus/a2bus/4play.cpp index d267b5c0059..39f77ddd62c 100644 --- a/src/devices/bus/a2bus/4play.cpp +++ b/src/devices/bus/a2bus/4play.cpp @@ -70,14 +70,14 @@ static INPUT_PORTS_START( a24play ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_START("p4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(3) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) INPUT_PORTS_END //------------------------------------------------- diff --git a/src/devices/bus/a2bus/a2superdrive.cpp b/src/devices/bus/a2bus/a2superdrive.cpp index f9ce022a672..922c9bc0403 100644 --- a/src/devices/bus/a2bus/a2superdrive.cpp +++ b/src/devices/bus/a2bus/a2superdrive.cpp @@ -74,11 +74,10 @@ class a2bus_superdrive_device: virtual void write_c800(uint16_t offset, uint8_t data) override; private: + void w65c02_mem(address_map &map) ATTR_COLD; - void m65c02_mem(address_map &map) ATTR_COLD; - - void m65c02_w(offs_t offset, uint8_t value); - uint8_t m65c02_r(offs_t offset); + void w65c02_w(offs_t offset, uint8_t value); + uint8_t w65c02_r(offs_t offset); void phases_w(uint8_t phases); void sel35_w(int sel35); @@ -111,10 +110,10 @@ const tiny_rom_entry *a2bus_superdrive_device::device_rom_region() const return ROM_NAME( superdrive ); } -void a2bus_superdrive_device::m65c02_mem(address_map &map) +void a2bus_superdrive_device::w65c02_mem(address_map &map) { map(0x0000, 0x7fff).ram().share(m_ram); - map(0x0a00, 0x0aff).rw(FUNC(a2bus_superdrive_device::m65c02_r), FUNC(a2bus_superdrive_device::m65c02_w)); + map(0x0a00, 0x0aff).rw(FUNC(a2bus_superdrive_device::w65c02_r), FUNC(a2bus_superdrive_device::w65c02_w)); map(0x8000, 0xffff).rom().region(SUPERDRIVE_ROM_REGION, 0x0000); } @@ -123,7 +122,7 @@ void a2bus_superdrive_device::device_add_mconfig(machine_config &config) { W65C02S(config, m_65c02, DERIVED_CLOCK(2, 7)); /* ~ 2.046 MHz */ - m_65c02->set_addrmap(AS_PROGRAM, &a2bus_superdrive_device::m65c02_mem); + m_65c02->set_addrmap(AS_PROGRAM, &a2bus_superdrive_device::w65c02_mem); SWIM1(config, m_fdc, C16M); @@ -221,7 +220,7 @@ void a2bus_superdrive_device::write_c800(uint16_t offset, uint8_t data) /* uc 65c02 i/o at $0a00 */ -void a2bus_superdrive_device::m65c02_w(offs_t offset, uint8_t value) +void a2bus_superdrive_device::w65c02_w(offs_t offset, uint8_t value) { // $00-$0f = swim registers // $40 = head sel low @@ -265,7 +264,7 @@ void a2bus_superdrive_device::m65c02_w(offs_t offset, uint8_t value) } } -uint8_t a2bus_superdrive_device::m65c02_r(offs_t offset) +uint8_t a2bus_superdrive_device::w65c02_r(offs_t offset) { floppy_image_device *floppy = nullptr; diff --git a/src/devices/bus/a2bus/transwarp.cpp b/src/devices/bus/a2bus/transwarp.cpp index da737f84e2f..34b3a3305b9 100644 --- a/src/devices/bus/a2bus/transwarp.cpp +++ b/src/devices/bus/a2bus/transwarp.cpp @@ -22,7 +22,7 @@ #include "emu.h" #include "transwarp.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" //************************************************************************** @@ -65,7 +65,7 @@ class a2bus_transwarp_device: uint8_t dma_r(offs_t offset); void dma_w(offs_t offset, uint8_t data); - void m65c02_mem(address_map &map) ATTR_COLD; + void w65c02_mem(address_map &map) ATTR_COLD; void hit_slot(int slot); void hit_slot_joy(); @@ -77,7 +77,7 @@ class a2bus_transwarp_device: DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_TRANSWARP, device_a2bus_card_interface, a2bus_transwarp_device, "a2twarp", "Applied Engineering TransWarp") -void a2bus_transwarp_device::m65c02_mem(address_map &map) +void a2bus_transwarp_device::w65c02_mem(address_map &map) { map(0x0000, 0xffff).rw(FUNC(a2bus_transwarp_device::dma_r), FUNC(a2bus_transwarp_device::dma_w)); } @@ -169,8 +169,8 @@ ioport_constructor a2bus_transwarp_device::device_input_ports() const void a2bus_transwarp_device::device_add_mconfig(machine_config &config) { - M65C02(config, m_ourcpu, DERIVED_CLOCK(1, 2)); - m_ourcpu->set_addrmap(AS_PROGRAM, &a2bus_transwarp_device::m65c02_mem); + W65C02(config, m_ourcpu, DERIVED_CLOCK(1, 2)); + m_ourcpu->set_addrmap(AS_PROGRAM, &a2bus_transwarp_device::w65c02_mem); } //************************************************************************** diff --git a/src/devices/bus/amiga/zorro/cards.cpp b/src/devices/bus/amiga/zorro/cards.cpp index 8f90abfaa11..15a530bfb88 100644 --- a/src/devices/bus/amiga/zorro/cards.cpp +++ b/src/devices/bus/amiga/zorro/cards.cpp @@ -16,6 +16,7 @@ #include "a590.h" #include "action_replay.h" #include "buddha.h" +#include "picasso2.h" #include "ripple.h" #include "toccata.h" @@ -47,6 +48,7 @@ void zorro2_cards(device_slot_interface &device) device.option_add("a2091", ZORRO_A2091); device.option_add("a2232", ZORRO_A2232); device.option_add("buddha", ZORRO_BUDDHA); + device.option_add("picasso2p", ZORRO_PICASSO2P); device.option_add("ripple", ZORRO_RIPPLE); device.option_add("toccata", ZORRO_TOCCATA); } @@ -59,6 +61,7 @@ void zorro3_cards(device_slot_interface &device) device.option_add("a2091", ZORRO_A2091); device.option_add("a2232", ZORRO_A2232); device.option_add("buddha", ZORRO_BUDDHA); + device.option_add("picasso2p", ZORRO_PICASSO2P); device.option_add("ripple", ZORRO_RIPPLE); device.option_add("toccata", ZORRO_TOCCATA); } diff --git a/src/devices/bus/amiga/zorro/picasso2.cpp b/src/devices/bus/amiga/zorro/picasso2.cpp new file mode 100644 index 00000000000..9863b954523 --- /dev/null +++ b/src/devices/bus/amiga/zorro/picasso2.cpp @@ -0,0 +1,212 @@ +// license: GPL-2.0+ +// copyright-holders: Dirk Best +/*************************************************************************** + + Village Tronic Picasso II/Picasso II+ + + RTG graphics card for Amiga 2000/3000/4000 + + Hardware: + - Cirrus Logic CL-GD5426 or CL-GD5428 + - 1 or 2 MB RAM + - 25 MHz (only II+) and 14.31818 MHz XTAL + + TODO: + - Not working, VGA core needs work + - Interrupts? + - Segmented mode (jumper setting, autoconfig id 13) + +***************************************************************************/ + +#include "emu.h" +#include "picasso2.h" +#include "screen.h" + +#define VERBOSE (LOG_GENERAL) + +#include "logmacro.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(ZORRO_PICASSO2P, bus::amiga::zorro::picasso2p_device, "zorro_picasso2p", "Picasso II+ RTG") + +namespace bus::amiga::zorro { + +picasso2p_device::picasso2p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, ZORRO_PICASSO2P, tag, owner, clock), + device_memory_interface(mconfig, *this), + device_zorro2_card_interface(mconfig, *this), + m_vga(*this, "vga"), + m_autoconfig_memory_done(false) +{ + m_vga_space_config = address_space_config("vga_regs", ENDIANNESS_BIG, 8, 12, 0, address_map_constructor(FUNC(picasso2p_device::vga_map), this)); +} + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void picasso2p_device::mmio_map(address_map &map) +{ + map(0x0000, 0x0fff).rw(FUNC(picasso2p_device::vga0_r), FUNC(picasso2p_device::vga0_w)).umask16(0xffff); + map(0x1000, 0x1fff).rw(FUNC(picasso2p_device::vga1_r), FUNC(picasso2p_device::vga1_w)).umask16(0xffff); + map(0x46e8, 0x46e8).w(m_vga, FUNC(cirrus_gd5428_vga_device::mode_setup_w)); +} + +void picasso2p_device::vga_map(address_map &map) +{ + map(0x102, 0x102).unmaprw(); // TODO + map(0x3b0, 0x3df).m(m_vga, FUNC(cirrus_gd5428_vga_device::io_map)); +} + + +//************************************************************************** +// MACHINE DEFINITIONS +//************************************************************************** + +void picasso2p_device::device_add_mconfig(machine_config &config) +{ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480); + screen.set_screen_update(m_vga, FUNC(cirrus_gd5428_vga_device::screen_update)); + + CIRRUS_GD5428_VGA(config, m_vga, 0); + m_vga->set_screen("screen"); + m_vga->set_vram_size(0x200000); +} + + +//************************************************************************** +// MACHINE EMULATION +//************************************************************************** + +void picasso2p_device::device_start() +{ +} + +void picasso2p_device::device_reset() +{ + m_autoconfig_memory_done = false; +} + +device_memory_interface::space_config_vector picasso2p_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(0, &m_vga_space_config) + }; +} + +uint8_t picasso2p_device::vga0_r(offs_t offset) +{ + LOG("vga0_r: %04x\n", offset); + return space(0).read_byte(offset); +} + +void picasso2p_device::vga0_w(offs_t offset, uint8_t data) +{ + LOG("vga0_w: %04x = %02x\n", offset, data); + space(0).write_byte(offset, data); +} + +uint8_t picasso2p_device::vga1_r(offs_t offset) +{ + LOG("vga1_r: %04x (%04x)\n", offset, offset | 1); + return space(0).read_byte(offset | 1); +} + +void picasso2p_device::vga1_w(offs_t offset, uint8_t data) +{ + LOG("vga1_w: %04x (%04x) = %02x\n", offset, offset | 1, data); + space(0).write_byte(offset | 1, data); +} + + +//************************************************************************** +// AUTOCONFIG +//************************************************************************** + +void picasso2p_device::autoconfig_base_address(offs_t address) +{ + LOG("autoconfig_base_address received: 0x%06x\n", address); + + if (!m_autoconfig_memory_done) + { + LOG("-> installing picasso2p memory\n"); + + m_slot->space().install_readwrite_handler(address, address + 0x1fffff, + emu::rw_delegate(m_vga, FUNC(cirrus_gd5428_vga_device::mem_r)), + emu::rw_delegate(m_vga, FUNC(cirrus_gd5428_vga_device::mem_w)), 0xffffffff); + + m_autoconfig_memory_done = true; + + // configure next + cfgin_w(0); + } + else + { + LOG("-> installing picasso2p registers\n"); + + // install picasso registers + m_slot->space().install_device(address, address + 0x0ffff, *this, &picasso2p_device::mmio_map); + + // stop responding to default autoconfig + m_slot->space().unmap_readwrite(0xe80000, 0xe8007f); + + // we're done + m_slot->cfgout_w(0); + } +} + +void picasso2p_device::cfgin_w(int state) +{ + LOG("configin_w (%d)\n", state); + + if (state != 0) + return; + + if (!m_autoconfig_memory_done) + { + LOG("autoconfig for memory\n"); + + // setup autoconfig for memory + autoconfig_board_type(BOARD_TYPE_ZORRO2); + autoconfig_board_size(BOARD_SIZE_2M); + autoconfig_link_into_memory(false); + autoconfig_rom_vector_valid(false); + autoconfig_multi_device(false); // ? + autoconfig_8meg_preferred(false); + autoconfig_can_shutup(true); // ? + autoconfig_product(11); + autoconfig_manufacturer(2167); + autoconfig_serial(0x00000000); + autoconfig_rom_vector(0x0000); + + // install autoconfig handler + m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f, + read16_delegate(*this, FUNC(amiga_autoconfig::autoconfig_read)), + write16_delegate(*this, FUNC(amiga_autoconfig::autoconfig_write)), 0xffffffff); + } + else + { + LOG("autoconfig for registers\n"); + + // setup autoconfig for registers + autoconfig_board_type(BOARD_TYPE_ZORRO2); + autoconfig_board_size(BOARD_SIZE_64K); + autoconfig_link_into_memory(false); + autoconfig_rom_vector_valid(false); + autoconfig_multi_device(false); // ? + autoconfig_8meg_preferred(false); + autoconfig_can_shutup(true); // ? + autoconfig_product(12); + autoconfig_manufacturer(2167); + autoconfig_serial(0x00000000); + autoconfig_rom_vector(0x0000); + } +} + +} // namespace bus::amiga::zorro diff --git a/src/devices/bus/amiga/zorro/picasso2.h b/src/devices/bus/amiga/zorro/picasso2.h new file mode 100644 index 00000000000..d75d49b6f7b --- /dev/null +++ b/src/devices/bus/amiga/zorro/picasso2.h @@ -0,0 +1,63 @@ +// license: GPL-2.0+ +// copyright-holders: Dirk Best +/*************************************************************************** + + Village Tronic Picasso II/Picasso II+ + + RTG graphics card for Amiga 2000/3000/4000 + +***************************************************************************/ + +#ifndef MAME_BUS_AMIGA_ZORRO_PICASSO2_H +#define MAME_BUS_AMIGA_ZORRO_PICASSO2_H + +#pragma once + +#include "zorro.h" +#include "machine/autoconfig.h" +#include "video/pc_vga_cirrus.h" + + +namespace bus::amiga::zorro { + +class picasso2p_device : public device_t, public device_memory_interface, public device_zorro2_card_interface, public amiga_autoconfig +{ +public: + picasso2p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + // device_memory_interface + virtual space_config_vector memory_space_config() const override; + + // device_zorro2_card_interface overrides + virtual void cfgin_w(int state) override; + + // amiga_autoconfig overrides + virtual void autoconfig_base_address(offs_t address) override; + +private: + void mmio_map(address_map &map) ATTR_COLD; + void vga_map(address_map &map) ATTR_COLD; + + uint8_t vga0_r(offs_t offset); + void vga0_w(offs_t offset, uint8_t data); + uint8_t vga1_r(offs_t offset); + void vga1_w(offs_t offset, uint8_t data); + + required_device m_vga; + address_space_config m_vga_space_config; + + bool m_autoconfig_memory_done; +}; + +} // namespace bus::amiga::zorro + +// device type declaration +DECLARE_DEVICE_TYPE_NS(ZORRO_PICASSO2P, bus::amiga::zorro, picasso2p_device) + +#endif // MAME_BUS_AMIGA_ZORRO_PICASSO2_H diff --git a/src/devices/bus/amiga/zorro/zorro.cpp b/src/devices/bus/amiga/zorro/zorro.cpp index e83f939760e..ed3c60ee7eb 100644 --- a/src/devices/bus/amiga/zorro/zorro.cpp +++ b/src/devices/bus/amiga/zorro/zorro.cpp @@ -199,6 +199,10 @@ void zorro2_bus_device::device_reset() // call base device zorro_bus_device_base::device_reset(); + // reset zorro cards + for (device_zorro2_card_interface &card : m_dev) + card.device().reset(); + // initiate autoconfig m_autoconfig_device = 0; diff --git a/src/devices/bus/bbc/internal/stl4m32.cpp b/src/devices/bus/bbc/internal/stl4m32.cpp index c875f69b0a4..c6d8903a91a 100644 --- a/src/devices/bus/bbc/internal/stl4m32.cpp +++ b/src/devices/bus/bbc/internal/stl4m32.cpp @@ -59,7 +59,7 @@ ROM_END void bbc_stl4m32_device::device_add_mconfig(machine_config &config) { - //M65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); + //G65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); /* 5 x 32K rom sockets */ BBC_ROMSLOT32(config, m_rom[4], bbc_rom_devices, nullptr); diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 8cb22337e40..360362634f7 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -130,12 +130,12 @@ ROM_END void bbc_tube_6502_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem); TUBE(config, m_ula); - m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE); - m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + m_ula->pnmi_handler().set_inputline(m_maincpu, G65SC02_NMI_LINE); + m_ula->pirq_handler().set_inputline(m_maincpu, G65SC02_IRQ_LINE); m_ula->prst_handler().set(FUNC(bbc_tube_6502_device::prst_w)); RAM(config, m_ram).set_default_size("64K").set_default_value(0); @@ -155,7 +155,7 @@ void bbc_tube_6502e_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - M65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502e_device::tube_6502e_mem); m_ram->set_default_size("256K").set_default_value(0); @@ -165,7 +165,7 @@ void bbc_tube_65c102_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - R65C02(config.replace(), m_maincpu, 16_MHz_XTAL / 4); // R65C102 + R65C102(config.replace(), m_maincpu, 16_MHz_XTAL); // R65C102 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem); } diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h index ddfc337109f..367a6ed1623 100644 --- a/src/devices/bus/bbc/tube/tube_6502.h +++ b/src/devices/bus/bbc/tube/tube_6502.h @@ -18,7 +18,8 @@ #pragma once #include "tube.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" +#include "cpu/m6502/r65c02.h" #include "machine/ram.h" #include "machine/tube.h" diff --git a/src/devices/bus/bbc/tube/tube_matchbox.cpp b/src/devices/bus/bbc/tube/tube_matchbox.cpp index a2cf0bb009b..01999974492 100644 --- a/src/devices/bus/bbc/tube/tube_matchbox.cpp +++ b/src/devices/bus/bbc/tube/tube_matchbox.cpp @@ -20,7 +20,7 @@ #include "cpu/arm/arm.h" #include "cpu/i86/i286.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/r65c02.h" #include "cpu/m6809/m6809.h" #include "cpu/m68000/m68000.h" #include "cpu/ns32000/ns32000.h" @@ -44,10 +44,10 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa , m_ram(*this, "ram") , m_soft_dip(0) , m_prst(0) - , m_m65c102(*this, "m65c102") - , m_m65c102_rom(*this, "m65c102_rom") - , m_m65c102_view(*this, "m65c102_view") - , m_m65c102_bank(*this, "m65c102_bank%u", 0) + , m_r65c102(*this, "r65c102") + , m_r65c102_rom(*this, "r65c102_rom") + , m_r65c102_view(*this, "r65c102_view") + , m_r65c102_bank(*this, "r65c102_bank%u", 0) , m_z80(*this, "z80") , m_z80_rom(*this, "z80_rom") , m_z80_view(*this, "z80_view") @@ -98,15 +98,15 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa int m_prst; // 65C102 - required_device m_m65c102; - required_region_ptr m_m65c102_rom; - memory_passthrough_handler m_m65c102_rom_shadow_tap; - memory_view m_m65c102_view; - required_memory_bank_array<8> m_m65c102_bank; + required_device m_r65c102; + required_region_ptr m_r65c102_rom; + memory_passthrough_handler m_r65c102_rom_shadow_tap; + memory_view m_r65c102_view; + required_memory_bank_array<8> m_r65c102_bank; - void m65c102_mem(address_map &map) ATTR_COLD; - void m65c102_reset(uint8_t dip); - void m65c102_bank_w(offs_t offset, uint8_t data); + void r65c102_mem(address_map &map) ATTR_COLD; + void r65c102_reset(uint8_t dip); + void r65c102_bank_w(offs_t offset, uint8_t data); // Z80 required_device m_z80; @@ -179,23 +179,23 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa //------------------------------------------------- -// ADDRESS_MAP( m65c102_mem ) +// ADDRESS_MAP( r65c102_mem ) //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_mem(address_map &map) +void bbc_tube_matchbox_device::r65c102_mem(address_map &map) { - map(0x0000, 0xffff).view(m_m65c102_view); - m_m65c102_view[0](0x0000, 0xffff).rw(m_ram, FUNC(ram_device::read), FUNC(ram_device::write)); - m_m65c102_view[0](0xf800, 0xffff).rom().region("m65c102_rom", 0); - m_m65c102_view[1](0x0000, 0x1fff).bankrw("m65c102_bank0"); - m_m65c102_view[1](0x2000, 0x3fff).bankrw("m65c102_bank1"); - m_m65c102_view[1](0x4000, 0x5fff).bankrw("m65c102_bank2"); - m_m65c102_view[1](0x6000, 0x7fff).bankrw("m65c102_bank3"); - m_m65c102_view[1](0x8000, 0x9fff).bankrw("m65c102_bank4"); - m_m65c102_view[1](0xa000, 0xbfff).bankrw("m65c102_bank5"); - m_m65c102_view[1](0xc000, 0xdfff).bankrw("m65c102_bank6"); - m_m65c102_view[1](0xe000, 0xffff).bankrw("m65c102_bank7"); - m_m65c102_view[1](0xfee0, 0xfee7).w(FUNC(bbc_tube_matchbox_device::m65c102_bank_w)); + map(0x0000, 0xffff).view(m_r65c102_view); + m_r65c102_view[0](0x0000, 0xffff).rw(m_ram, FUNC(ram_device::read), FUNC(ram_device::write)); + m_r65c102_view[0](0xf800, 0xffff).rom().region("r65c102_rom", 0); + m_r65c102_view[1](0x0000, 0x1fff).bankrw("r65c102_bank0"); + m_r65c102_view[1](0x2000, 0x3fff).bankrw("r65c102_bank1"); + m_r65c102_view[1](0x4000, 0x5fff).bankrw("r65c102_bank2"); + m_r65c102_view[1](0x6000, 0x7fff).bankrw("r65c102_bank3"); + m_r65c102_view[1](0x8000, 0x9fff).bankrw("r65c102_bank4"); + m_r65c102_view[1](0xa000, 0xbfff).bankrw("r65c102_bank5"); + m_r65c102_view[1](0xc000, 0xdfff).bankrw("r65c102_bank6"); + m_r65c102_view[1](0xe000, 0xffff).bankrw("r65c102_bank7"); + m_r65c102_view[1](0xfee0, 0xfee7).w(FUNC(bbc_tube_matchbox_device::r65c102_bank_w)); map(0xfef8, 0xfeff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)); } @@ -353,7 +353,7 @@ ioport_constructor bbc_tube_matchbox_device::device_input_ports() const //------------------------------------------------- ROM_START( matchbox ) - ROM_REGION(0x0800, "m65c102_rom", 0) + ROM_REGION(0x0800, "r65c102_rom", 0) ROM_LOAD("client65v2.bin", 0x0000, 0x0800, CRC(866a5b7b) SHA1(40e2de0443e3447483fe6ee43fe66bac87fed1c4)) // latest from https://mdfs.net/Software/Tube/Matchbox/ ROM_REGION(0x1000, "z80_rom", 0) @@ -402,8 +402,8 @@ void bbc_tube_matchbox_device::device_add_mconfig(machine_config &config) RAM(config, m_ram).set_default_size("2MB"); // 65C102 - M65C02(config, m_m65c102, 32_MHz_XTAL); - m_m65c102->set_addrmap(AS_PROGRAM, &bbc_tube_matchbox_device::m65c102_mem); + R65C102(config, m_r65c102, 32_MHz_XTAL); + m_r65c102->set_addrmap(AS_PROGRAM, &bbc_tube_matchbox_device::r65c102_mem); SOFTWARE_LIST(config, "flop_ls_6502").set_original("bbc_flop_6502"); @@ -472,7 +472,7 @@ void bbc_tube_matchbox_device::device_start() void bbc_tube_matchbox_device::device_reset_after_children() { - m_m65c102->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_r65c102->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_z80->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_i80286->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_m6809->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); @@ -486,8 +486,8 @@ void bbc_tube_matchbox_device::device_reset_after_children() switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m65c102_reset(m_copro); - m_m65c102->set_input_line(INPUT_LINE_RESET, m_prst); + r65c102_reset(m_copro); + m_r65c102->set_input_line(INPUT_LINE_RESET, m_prst); break; case 0x04: case 0x05: case 0x06: case 0x07: @@ -534,15 +534,15 @@ void bbc_tube_matchbox_device::device_reset_after_children() // device_reset - device-specific reset //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_reset(uint8_t copro) +void bbc_tube_matchbox_device::r65c102_reset(uint8_t copro) { - address_space &program = m_m65c102->space(AS_PROGRAM); + address_space &program = m_r65c102->space(AS_PROGRAM); // address map during booting - m_m65c102_view.select(0); + m_r65c102_view.select(0); - m_m65c102_rom_shadow_tap.remove(); - m_m65c102_rom_shadow_tap = program.install_read_tap( + m_r65c102_rom_shadow_tap.remove(); + m_r65c102_rom_shadow_tap = program.install_read_tap( 0x0fef8, 0xfeff, "rom_shadow_r", [this](offs_t offset, u8 &data, u8 mem_mask) @@ -550,119 +550,119 @@ void bbc_tube_matchbox_device::m65c102_reset(uint8_t copro) if (!machine().side_effects_disabled()) { // delete this tap - m_m65c102_rom_shadow_tap.remove(); + m_r65c102_rom_shadow_tap.remove(); // address map after booting - m_m65c102_view.select(1); + m_r65c102_view.select(1); } // return the original data return data; }, - &m_m65c102_rom_shadow_tap); + &m_r65c102_rom_shadow_tap); for (int i = 0; i < 8; i++) { - m_m65c102_bank[i]->set_base(m_ram->pointer() + (i * 0x2000)); + m_r65c102_bank[i]->set_base(m_ram->pointer() + (i * 0x2000)); } switch (copro & 3) { case 0: // 3MHz - m_m65c102->set_clock_scale(1.0 / 11); + m_r65c102->set_clock_scale(1.0 / 11); // original startup banner - m_m65c102_rom[0x06f] = '6'; - m_m65c102_rom[0x070] = '5'; - m_m65c102_rom[0x071] = 'C'; - m_m65c102_rom[0x072] = '1'; - m_m65c102_rom[0x073] = '0'; - m_m65c102_rom[0x074] = '2'; - m_m65c102_rom[0x075] = ' '; - m_m65c102_rom[0x076] = 'C'; - m_m65c102_rom[0x077] = 'o'; - m_m65c102_rom[0x078] = '-'; - m_m65c102_rom[0x079] = 'P'; - m_m65c102_rom[0x07a] = 'r'; - m_m65c102_rom[0x07b] = 'o'; - m_m65c102_rom[0x07c] = 'c'; - m_m65c102_rom[0x07d] = 'e'; - m_m65c102_rom[0x07e] = 's'; - m_m65c102_rom[0x07f] = 's'; - m_m65c102_rom[0x080] = 'o'; - m_m65c102_rom[0x081] = 'r'; + m_r65c102_rom[0x06f] = '6'; + m_r65c102_rom[0x070] = '5'; + m_r65c102_rom[0x071] = 'C'; + m_r65c102_rom[0x072] = '1'; + m_r65c102_rom[0x073] = '0'; + m_r65c102_rom[0x074] = '2'; + m_r65c102_rom[0x075] = ' '; + m_r65c102_rom[0x076] = 'C'; + m_r65c102_rom[0x077] = 'o'; + m_r65c102_rom[0x078] = '-'; + m_r65c102_rom[0x079] = 'P'; + m_r65c102_rom[0x07a] = 'r'; + m_r65c102_rom[0x07b] = 'o'; + m_r65c102_rom[0x07c] = 'c'; + m_r65c102_rom[0x07d] = 'e'; + m_r65c102_rom[0x07e] = 's'; + m_r65c102_rom[0x07f] = 's'; + m_r65c102_rom[0x080] = 'o'; + m_r65c102_rom[0x081] = 'r'; break; case 1: // 4MHz - m_m65c102->set_clock_scale(1.0 / 8); + m_r65c102->set_clock_scale(1.0 / 8); // patch startup banner - m_m65c102_rom[0x06f] = '0'; - m_m65c102_rom[0x070] = '4'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '0'; + m_r65c102_rom[0x070] = '4'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; case 2: // 16MHz - m_m65c102->set_clock_scale(1.0 / 2); + m_r65c102->set_clock_scale(1.0 / 2); // patch startup banner - m_m65c102_rom[0x06f] = '1'; - m_m65c102_rom[0x070] = '6'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '1'; + m_r65c102_rom[0x070] = '6'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; case 3: // 64MHz - m_m65c102->set_clock_scale(1.0 * 2); + m_r65c102->set_clock_scale(1.0 * 2); // patch startup banner - m_m65c102_rom[0x06f] = '6'; - m_m65c102_rom[0x070] = '4'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '6'; + m_r65c102_rom[0x070] = '4'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; } } @@ -872,7 +872,7 @@ void bbc_tube_matchbox_device::pnmi_w(int state) switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m_m65c102->set_input_line(M65C02_NMI_LINE, state); + m_r65c102->set_input_line(R65C02_NMI_LINE, state); break; case 0x04: case 0x05: case 0x06: case 0x07: m_z80->set_input_line(INPUT_LINE_NMI, state); @@ -904,7 +904,7 @@ void bbc_tube_matchbox_device::pirq_w(int state) switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m_m65c102->set_input_line(M65C02_IRQ_LINE, state); + m_r65c102->set_input_line(R65C02_IRQ_LINE, state); break; case 0x04: case 0x05: case 0x06: case 0x07: m_z80->set_input_line(INPUT_LINE_IRQ0, state); @@ -943,12 +943,12 @@ void bbc_tube_matchbox_device::prst_w(int state) // 65C102 //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_bank_w(offs_t offset, uint8_t data) +void bbc_tube_matchbox_device::r65c102_bank_w(offs_t offset, uint8_t data) { if (BIT(data, 7)) - m_m65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x7f) * 0x2000 + 0x100000); // external RAM + m_r65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x7f) * 0x2000 + 0x100000); // external RAM else - m_m65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x07) * 0x2000); // internal RAM + m_r65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x07) * 0x2000); // internal RAM } diff --git a/src/devices/bus/bbc/tube/tube_rc6502.cpp b/src/devices/bus/bbc/tube/tube_rc6502.cpp index 85f3fce1f11..70a0d1ea2d1 100644 --- a/src/devices/bus/bbc/tube/tube_rc6502.cpp +++ b/src/devices/bus/bbc/tube/tube_rc6502.cpp @@ -135,8 +135,8 @@ void bbc_tube_rc6502_device::device_add_mconfig(machine_config &config) add_common_devices(config); TUBE(config, m_ula); - m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE); - m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + m_ula->pnmi_handler().set_inputline(m_maincpu, W65C02_NMI_LINE); + m_ula->pirq_handler().set_inputline(m_maincpu, W65C02_IRQ_LINE); m_ula->prst_handler().set(FUNC(bbc_tube_rc6502_device::prst_w)); } diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp index 484716a0056..96b0c172c12 100644 --- a/src/devices/bus/c64/fcc.cpp +++ b/src/devices/bus/c64/fcc.cpp @@ -42,7 +42,7 @@ void c64_final_chesscard_device::c64_fcc_map(address_map &map) void c64_final_chesscard_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &c64_final_chesscard_device::c64_fcc_map); GENERIC_LATCH_8(config, m_mainlatch).data_pending_callback().set(FUNC(c64_final_chesscard_device::mainlatch_int)); diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h index dffa04c29a0..7123336d64a 100644 --- a/src/devices/bus/c64/fcc.h +++ b/src/devices/bus/c64/fcc.h @@ -12,7 +12,7 @@ #pragma once #include "exp.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/gen_latch.h" @@ -48,7 +48,7 @@ class c64_final_chesscard_device : public device_t, virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp index 4b4834271a1..91b3cc9ae44 100644 --- a/src/devices/bus/cbmiec/fd2000.cpp +++ b/src/devices/bus/cbmiec/fd2000.cpp @@ -219,7 +219,7 @@ void fd2000_device::floppy_formats(format_registration &fr) void fd2000_device::add_common_devices(machine_config &config) { - M65C02(config, m_maincpu, 24_MHz_XTAL / 12); + W65C02(config, m_maincpu, 24_MHz_XTAL / 12); via6522_device &via(R65C22(config, G65SC22P2_TAG, 24_MHz_XTAL / 12)); via.readpa_handler().set(FUNC(fd2000_device::via_pa_r)); diff --git a/src/devices/bus/cbmiec/fd2000.h b/src/devices/bus/cbmiec/fd2000.h index 04ac1264f79..d632e77c11f 100644 --- a/src/devices/bus/cbmiec/fd2000.h +++ b/src/devices/bus/cbmiec/fd2000.h @@ -12,7 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "imagedev/floppy.h" #include "machine/6522via.h" #include "machine/upd765.h" @@ -58,7 +58,7 @@ class fd2000_device : public device_t, void add_common_devices(machine_config &config); - required_device m_maincpu; + required_device m_maincpu; required_device m_fdc; required_device m_floppy0; diff --git a/src/devices/bus/cbmiec/serialbox.cpp b/src/devices/bus/cbmiec/serialbox.cpp index 9d9dcc114cf..950cf46b964 100644 --- a/src/devices/bus/cbmiec/serialbox.cpp +++ b/src/devices/bus/cbmiec/serialbox.cpp @@ -71,7 +71,7 @@ void cbm_serial_box_device::serial_box_mem(address_map &map) void cbm_serial_box_device::device_add_mconfig(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000)/4); + W65C02(config, m_maincpu, XTAL(4'000'000)/4); m_maincpu->set_addrmap(AS_PROGRAM, &cbm_serial_box_device::serial_box_mem); } diff --git a/src/devices/bus/cbmiec/serialbox.h b/src/devices/bus/cbmiec/serialbox.h index 4b51d5752ef..268013ffb45 100644 --- a/src/devices/bus/cbmiec/serialbox.h +++ b/src/devices/bus/cbmiec/serialbox.h @@ -12,7 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" @@ -43,7 +43,7 @@ class cbm_serial_box_device : public device_t, public device_cbm_iec_interface void cbm_iec_reset(int state) override; private: - required_device m_maincpu; + required_device m_maincpu; void serial_box_mem(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index c660cc6f393..e46ac49e379 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -245,7 +245,7 @@ void econet_e01_device::e01_mem(address_map &map) void econet_e01_device::device_add_mconfig(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, XTAL(8'000'000)/4); // Rockwell R65C102P3 + R65C102(config, m_maincpu, XTAL(8'000'000)); // Rockwell R65C102P3 m_maincpu->set_addrmap(AS_PROGRAM, &econet_e01_device::e01_mem); MC146818(config, m_rtc, 32.768_kHz_XTAL); diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h index e99d99c1056..10d556e7700 100644 --- a/src/devices/bus/econet/e01.h +++ b/src/devices/bus/econet/e01.h @@ -14,7 +14,7 @@ #include "econet.h" #include "bus/centronics/ctronics.h" #include "bus/scsi/scsi.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/r65c02.h" #include "imagedev/floppy.h" #include "machine/6522via.h" #include "machine/buffer.h" @@ -81,7 +81,7 @@ class econet_e01_device : public device_t, static void floppy_formats_afs(format_registration &fr); - required_device m_maincpu; + required_device m_maincpu; required_device m_fdc; required_device m_adlc; required_device m_rtc; diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp index 2ee3b169371..6fb49bbf5c6 100644 --- a/src/devices/bus/isa/finalchs.cpp +++ b/src/devices/bus/isa/finalchs.cpp @@ -123,7 +123,7 @@ ioport_constructor isa8_finalchs_device::device_input_ports() const void isa8_finalchs_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &isa8_finalchs_device::finalchs_mem); GENERIC_LATCH_8(config, m_mainlatch); diff --git a/src/devices/bus/isa/finalchs.h b/src/devices/bus/isa/finalchs.h index b7977b901e1..9083f9529a3 100644 --- a/src/devices/bus/isa/finalchs.h +++ b/src/devices/bus/isa/finalchs.h @@ -12,7 +12,7 @@ #pragma once #include "isa.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/gen_latch.h" @@ -35,7 +35,7 @@ class isa8_finalchs_device : virtual ioport_constructor device_input_ports() const override ATTR_COLD; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/cpu/m6502/dm65c02.lst b/src/devices/cpu/m6502/dw65c02.lst similarity index 99% rename from src/devices/cpu/m6502/dm65c02.lst rename to src/devices/cpu/m6502/dw65c02.lst index cb76456593b..d253cfa2774 100644 --- a/src/devices/cpu/m6502/dm65c02.lst +++ b/src/devices/cpu/m6502/dw65c02.lst @@ -1,6 +1,6 @@ # license:BSD-3-Clause # copyright-holders:Olivier Galibert -# m65c02 +# w65c02 brk_c_imp ora_idx nop_imm nop_c_imp tsb_zpg ora_zpg asl_c_zpg nop_c_imp php_imp ora_imm asl_acc nop_c_imp tsb_aba ora_aba asl_c_aba nop_c_imp bpl_rel ora_idy ora_zpi nop_c_imp trb_zpg ora_zpx asl_c_zpx nop_c_imp clc_imp ora_aby inc_acc nop_c_imp trb_aba ora_abx asl_c_abx nop_c_imp jsr_adr and_idx nop_imm nop_c_imp bit_zpg and_zpg rol_c_zpg nop_c_imp plp_imp and_imm rol_acc nop_c_imp bit_aba and_aba rol_c_aba nop_c_imp diff --git a/src/devices/cpu/m6502/g65sc02.cpp b/src/devices/cpu/m6502/g65sc02.cpp new file mode 100644 index 00000000000..e9e62cd4880 --- /dev/null +++ b/src/devices/cpu/m6502/g65sc02.cpp @@ -0,0 +1,46 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + g65sc02.cpp + + 65c02 with internal static registers, making clock stoppable? + + TODO: + - none of the CPU type differences are currently emulated (eg. BE pin, ML pin), + are any of them meaningful to MAME? + +***************************************************************************/ + +#include "emu.h" +#include "g65sc02.h" + +DEFINE_DEVICE_TYPE(G65SC02, g65sc02_device, "g65sc02", "GTE G65SC02") +DEFINE_DEVICE_TYPE(G65SC12, g65sc12_device, "g65sc12", "GTE G65SC12") +DEFINE_DEVICE_TYPE(G65SC102, g65sc102_device, "g65sc102", "GTE G65SC102") +DEFINE_DEVICE_TYPE(G65SC112, g65sc112_device, "g65sc112", "GTE G65SC112") + +g65sc02_device::g65sc02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + w65c02_device(mconfig, type, tag, owner, clock) +{ +} + +g65sc02_device::g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + g65sc02_device(mconfig, G65SC02, tag, owner, clock) +{ +} + +g65sc12_device::g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + g65sc02_device(mconfig, G65SC12, tag, owner, clock) +{ +} + +g65sc102_device::g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + g65sc02_device(mconfig, G65SC102, tag, owner, clock) +{ +} + +g65sc112_device::g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + g65sc02_device(mconfig, G65SC112, tag, owner, clock) +{ +} diff --git a/src/devices/cpu/m6502/g65sc02.h b/src/devices/cpu/m6502/g65sc02.h new file mode 100644 index 00000000000..e98f068b60d --- /dev/null +++ b/src/devices/cpu/m6502/g65sc02.h @@ -0,0 +1,54 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + g65sc02.h + + 65c02 with internal static registers, making clock stoppable? + +***************************************************************************/ + +#ifndef MAME_CPU_M6502_G65SC02_H +#define MAME_CPU_M6502_G65SC02_H + +#include "w65c02.h" + +class g65sc02_device : public w65c02_device { +public: + g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + g65sc02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc12_device : public g65sc02_device { +public: + g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc102_device : public g65sc02_device { +public: + g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; } + virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); } +}; + +class g65sc112_device : public g65sc02_device { +public: + g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +enum { + G65SC02_IRQ_LINE = m6502_device::IRQ_LINE, + G65SC02_NMI_LINE = m6502_device::NMI_LINE, + G65SC02_SET_OVERFLOW = m6502_device::V_LINE +}; + +DECLARE_DEVICE_TYPE(G65SC02, g65sc02_device) +DECLARE_DEVICE_TYPE(G65SC12, g65sc12_device) +DECLARE_DEVICE_TYPE(G65SC102, g65sc102_device) +DECLARE_DEVICE_TYPE(G65SC112, g65sc112_device) + +#endif // MAME_CPU_M6502_G65SC02_H diff --git a/src/devices/cpu/m6502/gew12.cpp b/src/devices/cpu/m6502/gew12.cpp index b087b18f43d..2459bb13517 100644 --- a/src/devices/cpu/m6502/gew12.cpp +++ b/src/devices/cpu/m6502/gew12.cpp @@ -19,7 +19,7 @@ DEFINE_DEVICE_TYPE(GEW12, gew12_device, "gew12", "Yamaha YMW728-F (GEW12)") gew12_device::gew12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : m6502_mcu_device_base(mconfig, GEW12, tag, owner, clock) + : m6502_mcu_device_base(mconfig, GEW12, tag, owner, clock) , device_mixer_interface(mconfig, *this, 2) , m_in_cb(*this, 0xff), m_out_cb(*this) , m_rom(*this, DEVICE_SELF) @@ -36,7 +36,7 @@ void gew12_device::device_add_mconfig(machine_config &config) void gew12_device::device_start() { - m65c02_device::device_start(); + w65c02_device::device_start(); m_bank_mask = device_generic_cart_interface::map_non_power_of_two( unsigned(m_rom->bytes() >> 14), @@ -61,7 +61,7 @@ void gew12_device::device_start() void gew12_device::device_reset() { - m6502_mcu_device_base::device_reset(); + m6502_mcu_device_base::device_reset(); internal_update(); m_irq_pending = 0; @@ -142,9 +142,9 @@ void gew12_device::internal_irq(int num, int state) void gew12_device::irq_update() { if (m_irq_pending & m_irq_enable) - set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); else - set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); } diff --git a/src/devices/cpu/m6502/gew12.h b/src/devices/cpu/m6502/gew12.h index bc4f2a8ac59..101116c6903 100644 --- a/src/devices/cpu/m6502/gew12.h +++ b/src/devices/cpu/m6502/gew12.h @@ -11,9 +11,9 @@ #define MAME_CPU_M6502_GEW12_H #include "m6502mcu.h" -#include "m65c02.h" +#include "w65c02.h" -class gew12_device : public m6502_mcu_device_base, public device_mixer_interface { +class gew12_device : public m6502_mcu_device_base, public device_mixer_interface { public: gew12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -27,7 +27,7 @@ class gew12_device : public m6502_mcu_device_base, public device_ virtual void device_reset() override ATTR_COLD; virtual void internal_update(u64 current_time) override; - using m6502_mcu_device_base::internal_update; + using m6502_mcu_device_base::internal_update; enum { diff --git a/src/devices/cpu/m6502/gew7.cpp b/src/devices/cpu/m6502/gew7.cpp index 7fd85ad2538..2594a2166ef 100644 --- a/src/devices/cpu/m6502/gew7.cpp +++ b/src/devices/cpu/m6502/gew7.cpp @@ -19,7 +19,7 @@ DEFINE_DEVICE_TYPE(GEW7, gew7_device, "gew7", "Yamaha YMW270-F (GEW7)") gew7_device::gew7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : m6502_mcu_device_base(mconfig, GEW7, tag, owner, clock) + : m6502_mcu_device_base(mconfig, GEW7, tag, owner, clock) , device_mixer_interface(mconfig, *this, 2) , m_in_cb(*this, 0xff), m_out_cb(*this) , m_rom(*this, DEVICE_SELF) @@ -43,7 +43,7 @@ void gew7_device::device_add_mconfig(machine_config &config) void gew7_device::device_start() { - m6502_mcu_device_base::device_start(); + m6502_mcu_device_base::device_start(); m_bank_mask = device_generic_cart_interface::map_non_power_of_two( unsigned(m_rom->bytes() >> 14), @@ -68,7 +68,7 @@ void gew7_device::device_start() void gew7_device::device_reset() { - m6502_mcu_device_base::device_reset(); + m6502_mcu_device_base::device_reset(); internal_update(); m_timer_stat = m_timer_en = 0; @@ -117,7 +117,7 @@ void gew7_device::timer_stat_w(u8 data) m_timer_stat &= ~data; if (!(m_timer_stat & 3)) - set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); internal_update(); } @@ -165,7 +165,7 @@ u64 gew7_device::timer_update(int num, u64 current_time) if (elapsed > m_timer_count[num]) { m_timer_stat |= (1 << num); - set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } m_timer_count[num] -= elapsed; diff --git a/src/devices/cpu/m6502/gew7.h b/src/devices/cpu/m6502/gew7.h index 6a2a6de27eb..5c9a891559e 100644 --- a/src/devices/cpu/m6502/gew7.h +++ b/src/devices/cpu/m6502/gew7.h @@ -11,10 +11,10 @@ #define MAME_CPU_M6502_GEW7_H #include "m6502mcu.h" -#include "m65c02.h" +#include "w65c02.h" #include "sound/gew7.h" -class gew7_device : public m6502_mcu_device_base, public device_mixer_interface +class gew7_device : public m6502_mcu_device_base, public device_mixer_interface { public: gew7_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock); @@ -32,7 +32,7 @@ class gew7_device : public m6502_mcu_device_base, public device_m virtual void device_reset() override ATTR_COLD; virtual void internal_update(u64 current_time) override; - using m6502_mcu_device_base::internal_update; + using m6502_mcu_device_base::internal_update; u8 timer_stat_r(); void timer_stat_w(u8 data); diff --git a/src/devices/cpu/m6502/m6502.txt b/src/devices/cpu/m6502/m6502.txt index 788ab6fad3d..2d4564ee0be 100644 --- a/src/devices/cpu/m6502/m6502.txt +++ b/src/devices/cpu/m6502/m6502.txt @@ -86,11 +86,11 @@ several other CMOS variants additional commands atari lynx bastian schicks bll -integrated m65sc02 cpu core -no bbr bbs instructions, else m65c02 compatible +integrated g65sc02 cpu core +no bbr bbs instructions, else w65c02 compatible watara supervision -integrated m65c02 cpu core (or m65sc02 or m65ce02?) +integrated w65c02 cpu core (or g65sc02 or m65ce02?) gte65816 (nintendo snes) diff --git a/src/devices/cpu/m6502/m65ce02.cpp b/src/devices/cpu/m6502/m65ce02.cpp index a787eb9dcef..22e6bd5f3c5 100644 --- a/src/devices/cpu/m6502/m65ce02.cpp +++ b/src/devices/cpu/m6502/m65ce02.cpp @@ -20,7 +20,7 @@ m65ce02_device::m65ce02_device(const machine_config &mconfig, const char *tag, d } m65ce02_device::m65ce02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock), TMP3(0), Z(0), B(0) + w65c02_device(mconfig, type, tag, owner, clock), TMP3(0), Z(0), B(0) { } @@ -31,7 +31,7 @@ std::unique_ptr m65ce02_device::create_disassembler() void m65ce02_device::init() { - m65c02_device::init(); + w65c02_device::init(); state_add(M65CE02_Z, "Z", Z); state_add(M65CE02_B, "B", B).callimport().formatstr("%2s"); save_item(NAME(B)); @@ -51,7 +51,7 @@ void m65ce02_device::device_start() void m65ce02_device::device_reset() { - m65c02_device::device_reset(); + w65c02_device::device_reset(); Z = 0x00; B = 0x0000; } diff --git a/src/devices/cpu/m6502/m65ce02.h b/src/devices/cpu/m6502/m65ce02.h index 3cf488208a1..cf0a48e9a5b 100644 --- a/src/devices/cpu/m6502/m65ce02.h +++ b/src/devices/cpu/m6502/m65ce02.h @@ -12,9 +12,9 @@ #pragma once -#include "m65c02.h" +#include "w65c02.h" -class m65ce02_device : public m65c02_device { +class m65ce02_device : public w65c02_device { public: m65ce02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m65sc02.cpp b/src/devices/cpu/m6502/m65sc02.cpp deleted file mode 100644 index b9245b5fe13..00000000000 --- a/src/devices/cpu/m6502/m65sc02.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Olivier Galibert -/*************************************************************************** - - m65sc02.cpp - - Rockwell-class 65c02 with internal static registers, making clock stoppable? - -***************************************************************************/ - -#include "emu.h" -#include "m65sc02.h" - -DEFINE_DEVICE_TYPE(M65SC02, m65sc02_device, "m65sc02", "GTE G65SC02") - -m65sc02_device::m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, M65SC02, tag, owner, clock) -{ -} diff --git a/src/devices/cpu/m6502/m65sc02.h b/src/devices/cpu/m6502/m65sc02.h deleted file mode 100644 index 686411c0b22..00000000000 --- a/src/devices/cpu/m6502/m65sc02.h +++ /dev/null @@ -1,29 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Olivier Galibert -/*************************************************************************** - - m65sc02.h - - Rockwell-class 65c02 with internal static registers, making clock stoppable? - -***************************************************************************/ - -#ifndef MAME_CPU_M6502_M65SC02_H -#define MAME_CPU_M6502_M65SC02_H - -#include "r65c02.h" - -class m65sc02_device : public r65c02_device { -public: - m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -}; - -enum { - M65SC02_IRQ_LINE = m6502_device::IRQ_LINE, - M65SC02_NMI_LINE = m6502_device::NMI_LINE, - M65SC02_SET_OVERFLOW = m6502_device::V_LINE -}; - -DECLARE_DEVICE_TYPE(M65SC02, m65sc02_device) - -#endif // MAME_CPU_M6502_M65SC02_H diff --git a/src/devices/cpu/m6502/om65c02.lst b/src/devices/cpu/m6502/ow65c02.lst similarity index 99% rename from src/devices/cpu/m6502/om65c02.lst rename to src/devices/cpu/m6502/ow65c02.lst index a3a0d1e6cde..d4debf9f1fc 100644 --- a/src/devices/cpu/m6502/om65c02.lst +++ b/src/devices/cpu/m6502/ow65c02.lst @@ -1,6 +1,6 @@ # license:BSD-3-Clause # copyright-holders:Olivier Galibert -# m65c02 opcodes +# w65c02 opcodes adc_c_aba TMP = read_pc(); diff --git a/src/devices/cpu/m6502/r65c02.cpp b/src/devices/cpu/m6502/r65c02.cpp index 80187c5fb83..9dc65010c8c 100644 --- a/src/devices/cpu/m6502/r65c02.cpp +++ b/src/devices/cpu/m6502/r65c02.cpp @@ -5,6 +5,10 @@ r65c02.cpp Rockwell 65c02, CMOS variant with bitwise instructions + Also licensed to Ricoh, who sold it as RP65C02. + + TODO: + - are any of the CPU subtype differences meaningful to MAME? ***************************************************************************/ @@ -13,14 +17,26 @@ #include "r65c02d.h" DEFINE_DEVICE_TYPE(R65C02, r65c02_device, "r65c02", "Rockwell R65C02") +DEFINE_DEVICE_TYPE(R65C102, r65c102_device, "r65c102", "Rockwell R65C102") +DEFINE_DEVICE_TYPE(R65C112, r65c112_device, "r65c112", "Rockwell R65C112") + +r65c02_device::r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + w65c02_device(mconfig, type, tag, owner, clock) +{ +} r65c02_device::r65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : r65c02_device(mconfig, R65C02, tag, owner, clock) { } -r65c02_device::r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock) +r65c102_device::r65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, R65C102, tag, owner, clock) +{ +} + +r65c112_device::r65c112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, R65C112, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/r65c02.h b/src/devices/cpu/m6502/r65c02.h index a28ccd9d932..d9be47465ee 100644 --- a/src/devices/cpu/m6502/r65c02.h +++ b/src/devices/cpu/m6502/r65c02.h @@ -11,9 +11,9 @@ #ifndef MAME_CPU_M6502_R65C02_H #define MAME_CPU_M6502_R65C02_H -#include "m65c02.h" +#include "w65c02.h" -class r65c02_device : public m65c02_device { +class r65c02_device : public w65c02_device { public: r65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -25,6 +25,20 @@ class r65c02_device : public m65c02_device { r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); }; +class r65c102_device : public r65c02_device { +public: + r65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; } + virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); } +}; + +class r65c112_device : public r65c02_device { +public: + r65c112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + enum { R65C02_IRQ_LINE = m6502_device::IRQ_LINE, R65C02_NMI_LINE = m6502_device::NMI_LINE, @@ -32,5 +46,7 @@ enum { }; DECLARE_DEVICE_TYPE(R65C02, r65c02_device) +DECLARE_DEVICE_TYPE(R65C102, r65c102_device) +DECLARE_DEVICE_TYPE(R65C112, r65c112_device) #endif // MAME_CPU_M6502_R65C02_H diff --git a/src/devices/cpu/m6502/m65c02.cpp b/src/devices/cpu/m6502/w65c02.cpp similarity index 54% rename from src/devices/cpu/m6502/m65c02.cpp rename to src/devices/cpu/m6502/w65c02.cpp index e79380fe83d..c482b31d449 100644 --- a/src/devices/cpu/m6502/m65c02.cpp +++ b/src/devices/cpu/m6502/w65c02.cpp @@ -2,7 +2,7 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02.cpp + w65c02.cpp WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones) @@ -10,24 +10,24 @@ ***************************************************************************/ #include "emu.h" -#include "m65c02.h" -#include "m65c02d.h" +#include "w65c02.h" +#include "w65c02d.h" -DEFINE_DEVICE_TYPE(M65C02, m65c02_device, "m65c02", "WDC W65C02") +DEFINE_DEVICE_TYPE(W65C02, w65c02_device, "w65c02", "WDC W65C02") -m65c02_device::m65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - m6502_device(mconfig, M65C02, tag, owner, clock) +w65c02_device::w65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + m6502_device(mconfig, W65C02, tag, owner, clock) { } -m65c02_device::m65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +w65c02_device::w65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : m6502_device(mconfig, type, tag, owner, clock) { } -std::unique_ptr m65c02_device::create_disassembler() +std::unique_ptr w65c02_device::create_disassembler() { - return std::make_unique(); + return std::make_unique(); } -#include "cpu/m6502/m65c02.hxx" +#include "cpu/m6502/w65c02.hxx" diff --git a/src/devices/cpu/m6502/m65c02.h b/src/devices/cpu/m6502/w65c02.h similarity index 79% rename from src/devices/cpu/m6502/m65c02.h rename to src/devices/cpu/m6502/w65c02.h index 5a89f301236..552565d4203 100644 --- a/src/devices/cpu/m6502/m65c02.h +++ b/src/devices/cpu/m6502/w65c02.h @@ -2,29 +2,29 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02.h + w65c02.h WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones) ***************************************************************************/ -#ifndef MAME_CPU_M6502_M65C02_H -#define MAME_CPU_M6502_M65C02_H +#ifndef MAME_CPU_M6502_W65C02_H +#define MAME_CPU_M6502_W65C02_H #pragma once #include "m6502.h" -class m65c02_device : public m6502_device { +class w65c02_device : public m6502_device { public: - m65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + w65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual std::unique_ptr create_disassembler() override; virtual void do_exec_full() override; virtual void do_exec_partial() override; protected: - m65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + w65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); #define O(o) void o ## _full(); void o ## _partial() @@ -67,11 +67,11 @@ class m65c02_device : public m6502_device { }; enum { - M65C02_IRQ_LINE = m6502_device::IRQ_LINE, - M65C02_NMI_LINE = m6502_device::NMI_LINE, - M65C02_SET_OVERFLOW = m6502_device::V_LINE + W65C02_IRQ_LINE = m6502_device::IRQ_LINE, + W65C02_NMI_LINE = m6502_device::NMI_LINE, + W65C02_SET_OVERFLOW = m6502_device::V_LINE }; -DECLARE_DEVICE_TYPE(M65C02, m65c02_device) +DECLARE_DEVICE_TYPE(W65C02, w65c02_device) -#endif // MAME_CPU_M6502_M65C02_H +#endif // MAME_CPU_M6502_W65C02_H diff --git a/src/devices/cpu/m6502/m65c02d.cpp b/src/devices/cpu/m6502/w65c02d.cpp similarity index 59% rename from src/devices/cpu/m6502/m65c02d.cpp rename to src/devices/cpu/m6502/w65c02d.cpp index 2c7b3b81fc3..919d2ddf6f5 100644 --- a/src/devices/cpu/m6502/m65c02d.cpp +++ b/src/devices/cpu/m6502/w65c02d.cpp @@ -2,17 +2,17 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02d.cpp + w65c02d.cpp - MOS Technology 6502, CMOS variant with some additional instructions + WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones), disassembler ***************************************************************************/ #include "emu.h" -#include "m65c02d.h" -#include "cpu/m6502/m65c02d.hxx" +#include "w65c02d.h" +#include "cpu/m6502/w65c02d.hxx" -m65c02_disassembler::m65c02_disassembler() : m6502_base_disassembler(disasm_entries) +w65c02_disassembler::w65c02_disassembler() : m6502_base_disassembler(disasm_entries) { } diff --git a/src/devices/cpu/m6502/m65c02d.h b/src/devices/cpu/m6502/w65c02d.h similarity index 57% rename from src/devices/cpu/m6502/m65c02d.h rename to src/devices/cpu/m6502/w65c02d.h index 77b134c4b95..1e9edec6a14 100644 --- a/src/devices/cpu/m6502/m65c02d.h +++ b/src/devices/cpu/m6502/w65c02d.h @@ -2,25 +2,25 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02d.h + w65c02d.h - MOS Technology 6502, CMOS variant with some additional instructions + WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones), disassembler ***************************************************************************/ -#ifndef MAME_CPU_M6502_M65C02D_H -#define MAME_CPU_M6502_M65C02D_H +#ifndef MAME_CPU_M6502_W65C02D_H +#define MAME_CPU_M6502_W65C02D_H #pragma once #include "m6502d.h" -class m65c02_disassembler : public m6502_base_disassembler +class w65c02_disassembler : public m6502_base_disassembler { public: - m65c02_disassembler(); - virtual ~m65c02_disassembler() = default; + w65c02_disassembler(); + virtual ~w65c02_disassembler() = default; private: static const disasm_entry disasm_entries[0x100]; diff --git a/src/devices/cpu/m6502/w65c02s.cpp b/src/devices/cpu/m6502/w65c02s.cpp index 171db777dc2..17c61bafc4e 100644 --- a/src/devices/cpu/m6502/w65c02s.cpp +++ b/src/devices/cpu/m6502/w65c02s.cpp @@ -21,7 +21,7 @@ w65c02s_device::w65c02s_device(const machine_config &mconfig, const char *tag, d } w65c02s_device::w65c02s_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock) + w65c02_device(mconfig, type, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/w65c02s.h b/src/devices/cpu/m6502/w65c02s.h index a5848f86e68..7a3da04bcd5 100644 --- a/src/devices/cpu/m6502/w65c02s.h +++ b/src/devices/cpu/m6502/w65c02s.h @@ -12,9 +12,9 @@ #ifndef MAME_CPU_M6502_W65C02S_H #define MAME_CPU_M6502_W65C02S_H -#include "m65c02.h" +#include "w65c02.h" -class w65c02s_device : public m65c02_device { +class w65c02s_device : public w65c02_device { public: w65c02s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6805/hd6305.cpp b/src/devices/cpu/m6805/hd6305.cpp index b81873be608..2cc866c7494 100644 --- a/src/devices/cpu/m6805/hd6305.cpp +++ b/src/devices/cpu/m6805/hd6305.cpp @@ -7,7 +7,6 @@ Hitachi HD6305 series TODO: - HD6305xx has a 14-bit address space, not 13 (memory_access in m6805.h) - add unimplemented opcodes: STOP, WAIT, DAA, and HD63705Z0 also has MUL -- add HD6305Y2 peripherals (nothing to test it with?) - add HD63705Z0 peripherals */ @@ -473,7 +472,20 @@ hd6305y2_device::hd6305y2_device(const machine_config &mconfig, const char *tag, void hd6305y2_device::internal_map(address_map &map) { - // TODO: ports, timer, SCI + map(0x0000, 0x0000).rw(FUNC(hd6305y2_device::port_r<0>), FUNC(hd6305y2_device::port_w<0>)); + map(0x0001, 0x0001).rw(FUNC(hd6305y2_device::port_r<1>), FUNC(hd6305y2_device::port_w<1>)); + map(0x0002, 0x0002).rw(FUNC(hd6305y2_device::port_r<2>), FUNC(hd6305y2_device::port_w<2>)); + map(0x0003, 0x0003).r(FUNC(hd6305y2_device::port_r<3>)); + map(0x0004, 0x0004).w(FUNC(hd6305y2_device::port_ddr_w<0>)); + map(0x0005, 0x0005).w(FUNC(hd6305y2_device::port_ddr_w<1>)); + map(0x0006, 0x0006).w(FUNC(hd6305y2_device::port_ddr_w<2>)); + map(0x0008, 0x0008).rw(FUNC(hd6305y2_device::timer_data_r), FUNC(hd6305y2_device::timer_data_w)); + map(0x0009, 0x0009).rw(FUNC(hd6305y2_device::timer_ctrl_r), FUNC(hd6305y2_device::timer_ctrl_w)); + map(0x000a, 0x000a).rw(FUNC(hd6305y2_device::misc_r), FUNC(hd6305y2_device::misc_w)); + map(0x0010, 0x0010).rw(FUNC(hd6305y2_device::sci_ctrl_r), FUNC(hd6305y2_device::sci_ctrl_w)); + map(0x0011, 0x0011).rw(FUNC(hd6305y2_device::sci_ssr_r), FUNC(hd6305y2_device::sci_ssr_w)); + map(0x0012, 0x0012).rw(FUNC(hd6305y2_device::sci_data_r), FUNC(hd6305y2_device::sci_data_w)); + // All other page zero addresses up to 0x001f are reserved map(0x0040, 0x013f).ram(); } diff --git a/src/devices/cpu/m6805/hd6305.h b/src/devices/cpu/m6805/hd6305.h index 8847d4b2cb7..2d7cc46bfc5 100644 --- a/src/devices/cpu/m6805/hd6305.h +++ b/src/devices/cpu/m6805/hd6305.h @@ -161,6 +161,14 @@ class hd6305y2_device : public hd6305_device // construction/destruction hd6305y2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + auto read_porta() { return m_read_port [0].bind(); } + auto write_porta() { return m_write_port[0].bind(); } + auto read_portb() { return m_read_port [1].bind(); } + auto write_portb() { return m_write_port[1].bind(); } + auto read_portc() { return m_read_port [2].bind(); } + auto write_portc() { return m_write_port[2].bind(); } + auto read_portd() { return m_read_port [3].bind(); } + private: void internal_map(address_map &map) ATTR_COLD; }; diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index a1c8351c856..a81428685c3 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -66,6 +66,7 @@ class mcs51_cpu_device : public cpu_device void program_internal(address_map &map) ATTR_COLD; void data_internal(address_map &map) ATTR_COLD; + protected: // construction/destruction mcs51_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int program_width, int data_width, uint8_t features = 0); @@ -92,7 +93,6 @@ class mcs51_cpu_device : public cpu_device // device_disasm_interface overrides virtual std::unique_ptr create_disassembler() override; -protected: address_space_config m_program_config; address_space_config m_data_config; address_space_config m_io_config; diff --git a/src/devices/cpu/upd177x/upd177xd.cpp b/src/devices/cpu/upd177x/upd177xd.cpp index d3ec79e84c7..d4e9dcd15d7 100644 --- a/src/devices/cpu/upd177x/upd177xd.cpp +++ b/src/devices/cpu/upd177x/upd177xd.cpp @@ -16,9 +16,9 @@ std::string upd177x_disassembler::reg4(u16 opcode) return util::string_format("r%02x", (opcode >> 4) & 0x1f); } -std::string upd177x_disassembler::reg9(u16 opcode) +std::string upd177x_disassembler::reg8(u16 opcode) { - return util::string_format("r%02x", (opcode >> 9) & 0x1f); + return util::string_format("r%02x", (opcode >> 8) & 0x1f); } std::string upd177x_disassembler::imm8(u16 opcode) @@ -72,12 +72,12 @@ std::string upd177x_disassembler::abs4_4(u16 opcode, u16 pc) #define P std::ostream &stream, u16 opcode, u16 pc const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { - { 0x4000, 0xe000, [](P) -> u32 { util::stream_format(stream, "mvi %s, %s", reg9(opcode), imm8(opcode)); return 1; } }, + { 0x4000, 0xe000, [](P) -> u32 { util::stream_format(stream, "mvi %s, %s", reg8(opcode), imm8(opcode)); return 1; } }, { 0x3200, 0xff00, [](P) -> u32 { util::stream_format(stream, "mvi (h), %s", imm8(opcode)); return 1; } }, { 0x3400, 0xff00, [](P) -> u32 { util::stream_format(stream, "mvi a, %s", imm8(opcode)); return 1; } }, { 0x3800, 0xffc0, [](P) -> u32 { util::stream_format(stream, "mvi h, %s", imm6(opcode)); return 1; } }, - { 0x3100, 0xff1f, [](P) -> u32 { util::stream_format(stream, "mvi mdi, %s", imm3_5(opcode)); return 1; } }, - { 0x2100, 0xff80, [](P) -> u32 { util::stream_format(stream, "mvi mdo, %s", imm7(opcode)); return 1; } }, + { 0x3100, 0xff1f, [](P) -> u32 { util::stream_format(stream, "mvi md1, %s", imm3_5(opcode)); return 1; } }, + { 0x2100, 0xff80, [](P) -> u32 { util::stream_format(stream, "mvi md0, %s", imm7(opcode)); return 1; } }, { 0x1201, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "mov %s, a", reg4(opcode)); return 1; } }, { 0x1005, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "mov a, %s", reg4(opcode)); return 1; } }, @@ -105,18 +105,18 @@ const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { { 0x1801, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo a, (%s)", reg4(opcode)); return 1; } }, { 0x1802, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo x, (%s)", reg4(opcode)); return 1; } }, { 0x1804, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo y, (%s)", reg4(opcode)); return 1; } }, - { 0x1808, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "callo (%s)", reg4(opcode)); return 1; } }, + { 0x1808, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "callo (%s)", reg4(opcode)); return 1 | STEP_OVER; } }, { 0x6000, 0xf000, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs12(opcode, pc)); return 1; } }, - { 0x2000, 0xff0f, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs4_4(opcode, pc)); return 1; } }, + { 0x2000, 0xff0f, [](P) -> u32 { util::stream_format(stream, "jpp %s", abs4_4(opcode, pc)); return 1; } }, { 0x0501, 0xffff, [](P) -> u32 { util::stream_format(stream, "jmpa"); return 1; } }, { 0x2400, 0xff00, [](P) -> u32 { util::stream_format(stream, "jmpfz %s", abs8(opcode, pc)); return 1; } }, - { 0x7000, 0xf000, [](P) -> u32 { util::stream_format(stream, "call %s", abs12(opcode, pc)); return 1; } }, + { 0x7000, 0xf000, [](P) -> u32 { util::stream_format(stream, "call %s", abs12(opcode, pc)); return 1 | STEP_OVER; } }, - { 0x0800, 0xffff, [](P) -> u32 { util::stream_format(stream, "ret"); return 1; } }, - { 0x0801, 0xffff, [](P) -> u32 { util::stream_format(stream, "rets"); return 1; } }, - { 0x090f, 0xffff, [](P) -> u32 { util::stream_format(stream, "reti"); return 1; } }, + { 0x0800, 0xffff, [](P) -> u32 { util::stream_format(stream, "ret"); return 1 | STEP_OUT; } }, + { 0x0801, 0xffff, [](P) -> u32 { util::stream_format(stream, "rets"); return 1 | STEP_OUT; } }, + { 0x090f, 0xffff, [](P) -> u32 { util::stream_format(stream, "reti"); return 1 | STEP_OUT; } }, { 0x0005, 0xffff, [](P) -> u32 { util::stream_format(stream, "stf"); return 1; } }, { 0x0602, 0xffff, [](P) -> u32 { util::stream_format(stream, "off"); return 1; } }, @@ -279,7 +279,7 @@ const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { { 0x1a01, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli a, (%s)", reg4(opcode)); return 1; } }, { 0x1a02, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli x, (%s)", reg4(opcode)); return 1; } }, { 0x1a04, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli y, (%s)", reg4(opcode)); return 1; } }, - { 0x1a08, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "calli (%s)", reg4(opcode)); return 1; } }, + { 0x1a08, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "calli (%s)", reg4(opcode)); return 1 | STEP_OVER; } }, { 0x0101, 0xffff, [](P) -> u32 { util::stream_format(stream, "mon"); return 1; } }, diff --git a/src/devices/cpu/upd177x/upd177xd.h b/src/devices/cpu/upd177x/upd177xd.h index 7cefe63aec0..75895fc25be 100644 --- a/src/devices/cpu/upd177x/upd177xd.h +++ b/src/devices/cpu/upd177x/upd177xd.h @@ -27,7 +27,7 @@ class upd177x_disassembler : public util::disasm_interface static const instruction instructions[]; static std::string reg4(u16 opcode); - static std::string reg9(u16 opcode); + static std::string reg8(u16 opcode); static std::string imm8(u16 opcode); static std::string imm7(u16 opcode); static std::string imm6(u16 opcode); diff --git a/src/devices/video/pc_vga.h b/src/devices/video/pc_vga.h index a95642b6e93..d982163bbb0 100644 --- a/src/devices/video/pc_vga.h +++ b/src/devices/video/pc_vga.h @@ -38,7 +38,7 @@ class vga_device : public device_t // $46e8, $56e8, $66e8, $76e8 for ISA bus void mode_setup_w(offs_t offset, uint8_t data); - // $102 / $3c3, MCA bus + // $102 ISA bus / $3c3 MCA bus //void wakeup_w(offs_t offset, uint8_t data); virtual uint8_t mem_r(offs_t offset); diff --git a/src/devices/video/pc_vga_cirrus.cpp b/src/devices/video/pc_vga_cirrus.cpp index 1d669e5d62a..475018b6a87 100644 --- a/src/devices/video/pc_vga_cirrus.cpp +++ b/src/devices/video/pc_vga_cirrus.cpp @@ -8,6 +8,8 @@ * - Original Acumos AVGA1/2 chipsets (Cirrus Logic eventually bought Acumos and rebranded); * - Fix or implement hidden DAC modes (15bpp + mixed, true color, others); * - bebox: logo at startup is squashed; + * - zorro/picasso2: many blitting errors, verify HW cursor; + * - zorro/picasso2: segmentation fault on exit * - Merge with trs/vis.cpp implementation (CL-GD5200 RAMDAC with custom VGA controller) * */ @@ -22,8 +24,9 @@ #define LOG_BLIT (1U << 2) #define LOG_HDAC (1U << 3) // log hidden DAC #define LOG_BANK (1U << 4) // log offset registers +#define LOG_PLL (1U << 5) -#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG) +#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG | LOG_BLIT) //#define LOG_OUTPUT_FUNC osd_printf_info #include "logmacro.h" @@ -101,7 +104,7 @@ void cirrus_gd5428_vga_device::ramdac_hidden_mask_w(offs_t offset, u8 data) // TODO: '5428 reads do not lock the Hidden DAC m_hidden_dac_mode = data; m_hidden_dac_phase = 0; - cirrus_define_video_mode(); + recompute_params(); LOGMASKED(LOG_HDAC, "CL: Hidden DAC write %02x\n", data); return; } @@ -182,7 +185,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) NAME([this] (offs_t offset, u8 data) { vga.crtc.vert_blank_end &= ~0x00ff; vga.crtc.vert_blank_end |= data; - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x19, 0x19).lrw8( @@ -203,7 +206,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) m_cr1a = data; vga.crtc.horz_blank_end = (vga.crtc.horz_blank_end & 0xff3f) | ((data & 0x30) << 2); vga.crtc.vert_blank_end = (vga.crtc.vert_blank_end & 0xfcff) | ((data & 0xc0) << 2); - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x1b, 0x1b).lrw8( @@ -217,7 +220,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) vga.crtc.start_addr_latch |= ((data & 0x01) << 16); vga.crtc.start_addr_latch |= ((data & 0x0c) << 15); vga.crtc.offset = (vga.crtc.offset & 0x00ff) | ((data & 0x10) << 4); - cirrus_define_video_mode(); + recompute_params(); }) ); // map(0x25, 0x25) PSR Part Status (r/o, "factory testing and internal tracking only") @@ -330,6 +333,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_width = (m_blt_width & 0xff00) | data; + LOGMASKED(LOG_BLIT, "CL: blt_width %02x [0] (%04x)\n", data, m_blt_width); }) ); // BLT Width 1 @@ -339,6 +343,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_width = (m_blt_width & 0x00ff) | (data << 8); + LOGMASKED(LOG_BLIT, "CL: blt_width %02x [1] (%04x)\n", data, m_blt_width); }) ); // BLT Height 0 @@ -348,6 +353,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_height = (m_blt_height & 0xff00) | data; + LOGMASKED(LOG_BLIT, "CL: m_blt_height %02x [0] (%04x)\n", data, m_blt_height); }) ); // BLT Height 1 @@ -357,6 +363,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_height = (m_blt_height & 0x00ff) | (data << 8); + LOGMASKED(LOG_BLIT, "CL: m_blt_height %02x [1] (%04x)\n", data, m_blt_height); }) ); // BLT Destination Pitch 0 @@ -435,6 +442,8 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_status = data & ~0xf2; + if (BIT(data, 2)) + m_blt_status &= ~9; if(data & 0x02) { if(m_blt_mode & 0x04) // blit source is system memory @@ -513,7 +522,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) gc_locked = (data & 0x17) != 0x12; LOG("Cirrus register extensions %s\n", gc_locked ? "unlocked" : "locked"); m_lock_reg = data & 0x17; - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x07, 0x07).lw8( @@ -522,7 +531,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) if((data & 0xf0) != 0) popmessage("pc_vga_cirrus: 1MB framebuffer window enabled at %iMB (%02x)",data >> 4,data); vga.sequencer.data[0x07] = data; - cirrus_define_video_mode(); + recompute_params(); }) ); // TODO: check me @@ -549,6 +558,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) }), NAME([this] (offs_t offset, u8 data) { m_vclk_num[offset] = data; + recompute_params(); }) ); map(0x0f, 0x0f).lrw8( @@ -616,12 +626,14 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) }), NAME([this] (offs_t offset, u8 data) { m_vclk_denom[offset] = data; + recompute_params(); }) ); } void cirrus_gd5428_vga_device::device_start() { + svga_device::device_start(); zero(); for (int i = 0; i < 0x100; i++) @@ -631,10 +643,10 @@ void cirrus_gd5428_vga_device::device_start() vga.crtc.maximum_scan_line = 1; // copy over interfaces - vga.memory = std::make_unique(vga.svga_intf.vram_size); - memset(&vga.memory[0], 0, vga.svga_intf.vram_size); + //vga.memory = std::make_unique(vga.svga_intf.vram_size); + //memset(&vga.memory[0], 0, vga.svga_intf.vram_size); - save_pointer(NAME(vga.memory), vga.svga_intf.vram_size); + //save_pointer(NAME(vga.memory), vga.svga_intf.vram_size); save_pointer(vga.crtc.data,"CRTC Registers",0x100); save_pointer(vga.sequencer.data,"Sequencer Registers",0x100); save_pointer(vga.attribute.data,"Attribute Registers", 0x15); @@ -663,7 +675,7 @@ void cirrus_gd5446_vga_device::device_start() void cirrus_gd5428_vga_device::device_reset() { - vga_device::device_reset(); + svga_device::device_reset(); gc_locked = true; gc_mode_ext = 0; gc_bank[0] = gc_bank[1] = 0; @@ -759,10 +771,11 @@ uint32_t cirrus_gd5428_vga_device::screen_update(screen_device &screen, bitmap_r return 0; } -void cirrus_gd5428_vga_device::cirrus_define_video_mode() +void cirrus_gd5428_vga_device::recompute_params() { uint8_t divisor = 1; float clock; + // TODO: coming from OSC, expose as this->clock() const XTAL xtal = XTAL(14'318'181); uint8_t clocksel = (vga.miscellaneous_output & 0xc) >> 2; @@ -774,6 +787,7 @@ void cirrus_gd5428_vga_device::cirrus_define_video_mode() int denominator = (m_vclk_denom[clocksel] & 0x3e) >> 1; int mul = m_vclk_denom[clocksel] & 0x01 ? 2 : 1; clock = (xtal * numerator / denominator / mul).dvalue(); + LOGMASKED(LOG_PLL, "CL: PLL setting %d num %d denom %d mul %d -> %f\n", clocksel, numerator, denominator, mul, clock); } svga.rgb8_en = svga.rgb15_en = svga.rgb16_en = svga.rgb24_en = svga.rgb32_en = 0; @@ -940,7 +954,7 @@ void cirrus_gd5428_vga_device::start_bitblt() m_blt_source_current = m_blt_source + (m_blt_source_pitch*(y+1)); m_blt_dest_current = m_blt_dest + (m_blt_dest_pitch*(y+1)); } - m_blt_status &= ~0x02; + m_blt_status &= ~0x09; } void cirrus_gd5428_vga_device::start_reverse_bitblt() @@ -1015,7 +1029,7 @@ void cirrus_gd5428_vga_device::start_reverse_bitblt() m_blt_source_current = m_blt_source - (m_blt_source_pitch*(y+1)); m_blt_dest_current = m_blt_dest - (m_blt_dest_pitch*(y+1)); } - m_blt_status &= ~0x02; + m_blt_status &= ~0x09; } void cirrus_gd5428_vga_device::start_system_bitblt() @@ -1106,9 +1120,17 @@ void cirrus_gd5428_vga_device::copy_pixel(uint8_t src, uint8_t dst) case 0x0e: // WHITE res = 0xff; break; + case 0x50: // DSna / DPna + // used by picasso2, unknown purpose + res = (dst & (~src)); + break; case 0x59: // SRCINVERT res = src ^ dst; break; + case 0x6d: // SRCPAINT / DSo + // picasso2 on VGA Workbench (upper right icon) + res = src | dst; + break; default: popmessage("pc_vga_cirrus: Unsupported BitBLT ROP mode %02x",m_blt_rop); } @@ -1164,11 +1186,21 @@ uint8_t cirrus_gd5428_vga_device::mem_r(offs_t offset) uint32_t addr; uint8_t cur_mode = pc_vga_choosevideomode(); - if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) - return vga_device::mem_r(offset); - const uint8_t bank = offset_select(offset); + // FIXME: workaround crash behaviour in picasso2 + // it will otherwise provide an offset of 0x1fxxxx in the gc_locked below + // causing a crash during adapter init + if(svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb24_en) + { + return svga_device::mem_linear_r((offset & 0xffff) + bank * 0x10000); + } + + if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + { + return vga_device::mem_r(offset & 0x1ffff); + } + if(gc_mode_ext & 0x20) // 16kB bank granularity addr = bank * 0x4000; else // 4kB bank granularity @@ -1315,13 +1347,20 @@ void cirrus_gd5428_vga_device::mem_w(offs_t offset, uint8_t data) return; } - if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + const uint8_t bank = offset_select(offset); + + // FIXME: as above + if(svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb24_en) { - vga_device::mem_w(offset,data); + svga_device::mem_linear_w((offset + bank * 0x10000), data); return; } - const uint8_t bank = offset_select(offset); + if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + { + vga_device::mem_w(offset & 0x1ffff,data); + return; + } if(gc_mode_ext & 0x20) // 16kB bank granularity addr = bank * 0x4000; diff --git a/src/devices/video/pc_vga_cirrus.h b/src/devices/video/pc_vga_cirrus.h index 13c2053dbfa..b9ed9f225c8 100644 --- a/src/devices/video/pc_vga_cirrus.h +++ b/src/devices/video/pc_vga_cirrus.h @@ -97,9 +97,9 @@ class cirrus_gd5428_vga_device : public svga_device virtual bool get_interlace_mode() override { return BIT(m_cr1a, 0); } uint8_t offset_select(offs_t offset); + virtual void recompute_params() override; private: - void cirrus_define_video_mode(); void start_bitblt(); void start_reverse_bitblt(); diff --git a/src/emu/mconfig.cpp b/src/emu/mconfig.cpp index 310e78f558f..e400f1ba4e3 100644 --- a/src/emu/mconfig.cpp +++ b/src/emu/mconfig.cpp @@ -405,6 +405,6 @@ void machine_config::set_perfect_quantum(device_t &device, std::string tag) m_current_device->tag()); } - m_perfect_quantum_device.first = &device; + m_perfect_quantum_device.first = tag.empty() ? nullptr : &device; m_perfect_quantum_device.second = std::move(tag); } diff --git a/src/mame/acorn/bbc.cpp b/src/mame/acorn/bbc.cpp index 59c81910d97..55e3dd153c2 100644 --- a/src/mame/acorn/bbc.cpp +++ b/src/mame/acorn/bbc.cpp @@ -1624,7 +1624,7 @@ void bbcbp_state::econx25(machine_config &config) void bbcm_state::bbcm(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, 16_MHz_XTAL / 8); + G65SC12(config, m_maincpu, 16_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, &bbcm_state::bbcm_mem); m_maincpu->set_addrmap(AS_OPCODES, &bbcm_state::bbcm_fetch); m_maincpu->set_periodic_int(FUNC(bbc_state::bbcb_keyscan), attotime::from_hz(1000)); /* scan keyboard */ diff --git a/src/mame/acorn/bbc.h b/src/mame/acorn/bbc.h index 23b57f386ed..95bf25373e4 100644 --- a/src/mame/acorn/bbc.h +++ b/src/mame/acorn/bbc.h @@ -12,8 +12,8 @@ #pragma once +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65sc02.h" #include "imagedev/floppy.h" #include "machine/74259.h" #include "machine/6522via.h" diff --git a/src/mame/apple/apple2e.cpp b/src/mame/apple/apple2e.cpp index 9a90dfe8353..dfea6c28acd 100644 --- a/src/mame/apple/apple2e.cpp +++ b/src/mame/apple/apple2e.cpp @@ -128,7 +128,7 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele #include "apple2common.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" #include "imagedev/cassette.h" @@ -4954,7 +4954,7 @@ void apple2e_state::apple2e_common(machine_config &config, bool enhanced, bool r /* basic machine hardware */ if (enhanced) { - M65C02(config, m_maincpu, 1021800); + W65C02(config, m_maincpu, 1021800); } else { @@ -5093,7 +5093,7 @@ void apple2e_state::spectred(machine_config &config) void apple2e_state::tk3000(machine_config &config) { apple2e(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::base_map); // z80_device &subcpu(Z80(config, "subcpu", 1021800)); // schematics are illegible on where the clock comes from, but it *seems* to be the same as the 65C02 clock @@ -5226,7 +5226,7 @@ void apple2e_state::apple2c_mem_pal(machine_config &config) void apple2e_state::laser128(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5261,7 +5261,7 @@ void apple2e_state::laser128(machine_config &config) void apple2e_state::laser128o(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5297,7 +5297,7 @@ void apple2e_state::laser128o(machine_config &config) void apple2e_state::laser128ex2(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5334,7 +5334,7 @@ void apple2e_state::ace500(machine_config &config) apple2e_common(config, true, false); subdevice("flop_a2_orig")->set_filter("A2C"); // Filter list to compatible disks for this machine. - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::ace500_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5376,7 +5376,7 @@ void apple2e_state::ace500(machine_config &config) void apple2e_state::ace2200(machine_config &config) { apple2e_common(config, false, false); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::ace2200_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); diff --git a/src/mame/atari/lynx.cpp b/src/mame/atari/lynx.cpp index 473e96dbfbf..7b8e730278a 100644 --- a/src/mame/atari/lynx.cpp +++ b/src/mame/atari/lynx.cpp @@ -19,7 +19,7 @@ #include "emu.h" #include "lynx.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "softlist_dev.h" #include "speaker.h" @@ -78,7 +78,7 @@ void lynx_state::sound_cb() void lynx_state::lynx(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ + G65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ m_maincpu->set_addrmap(AS_PROGRAM, &lynx_state::cpu_map); config.set_maximum_quantum(attotime::from_hz(60)); diff --git a/src/mame/atari/lynx_m.cpp b/src/mame/atari/lynx_m.cpp index cacb368fa94..15b1f26bb70 100644 --- a/src/mame/atari/lynx_m.cpp +++ b/src/mame/atari/lynx_m.cpp @@ -6,7 +6,7 @@ #include "emu.h" #include "lynx.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "corestr.h" #include "render.h" @@ -1227,7 +1227,7 @@ void lynx_state::interrupt_set(u8 line) void lynx_state::interrupt_update() { - m_maincpu->set_input_line(M65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); } @@ -1877,7 +1877,7 @@ void lynx_state::machine_reset() m_mikey.interrupt = 0; m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - m_maincpu->set_input_line(M65SC02_IRQ_LINE, CLEAR_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, CLEAR_LINE); m_suzy = SUZY(); m_mikey = MIKEY(); diff --git a/src/mame/capcom/gng.cpp b/src/mame/capcom/gng.cpp index ac546934f1d..7271ab3308c 100644 --- a/src/mame/capcom/gng.cpp +++ b/src/mame/capcom/gng.cpp @@ -321,32 +321,29 @@ static INPUT_PORTS_START( gng ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // pin 17 on edge connector PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW1") PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8,7,6,5") diff --git a/src/mame/chess/conchess.cpp b/src/mame/chess/conchess.cpp index 8185c89e4e8..05f858a33ca 100644 --- a/src/mame/chess/conchess.cpp +++ b/src/mame/chess/conchess.cpp @@ -67,8 +67,8 @@ is integrated. #include "bus/generic/carts.h" #include "bus/generic/slot.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/sensorboard.h" #include "sound/beep.h" #include "video/pwm.h" @@ -299,7 +299,7 @@ void conchess_state::concvicp(machine_config &config) concams5(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 12.288_MHz_XTAL/2); + W65C02(config.replace(), m_maincpu, 12.288_MHz_XTAL/2); m_maincpu->set_addrmap(AS_PROGRAM, &conchess_state::main_map); const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x4000); diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index b3e41efafe4..5622dbd39d8 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -1,22 +1,25 @@ // license:BSD-3-Clause -// copyright-holders:Curt Coder,smf,Mike Naberezny +// copyright-holders:Curt Coder, smf, Mike Naberezny /*************************************************************************** - Commodore LCD prototype +Commodore LCD prototype - GTE G65SC102PI-2 - GTE G65SC51P-1 - Rockwell R65C22P2 x 2 - AMI S3530X Bell 103/V.21 Single chip modem +OSC: 4MHz, 1.8432MHz, 3.579545MHz +GTE G65SC102PI-2 +GTE G65SC51P-1 +Rockwell R65C22P2 x 2 +AMI S3530X Bell 103/V.21 Single chip modem +OKI M5260 x 2 ****************************************************************************/ #include "emu.h" + #include "bus/cbmiec/cbmiec.h" #include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/6522via.h" #include "machine/bankdev.h" #include "machine/input_merger.h" @@ -25,6 +28,7 @@ #include "machine/ram.h" #include "machine/nvram.h" #include "sound/spkrdev.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -101,7 +105,7 @@ class clcd_state : public driver_device void clcd_palette(palette_device &palette) const { palette.set_pen_color(0, rgb_t(124, 149, 143)); - palette.set_pen_color(1, rgb_t(54,64,65)); + palette.set_pen_color(1, rgb_t(54, 64, 65)); } uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -405,12 +409,12 @@ class clcd_state : public driver_device if (!m_iec->clk_r()) { - data |= 1<<6; + data |= 1 << 6; } if (!m_iec->data_r()) { - data |= 1<<7; + data |= 1 << 7; } return data; @@ -537,8 +541,9 @@ class clcd_state : public driver_device void clcd(machine_config &config); void clcd_banked_mem(address_map &map) ATTR_COLD; void clcd_mem(address_map &map) ATTR_COLD; + private: - required_device m_maincpu; + required_device m_maincpu; required_device m_acia; required_device m_via0; required_device m_rtc; @@ -716,28 +721,28 @@ INPUT_PORTS_END void clcd_state::clcd(machine_config &config) { - /* basic machine hardware */ - M65C02(config, m_maincpu, 1000000); + // basic machine hardware + G65SC102(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", g65sc102_device::IRQ_LINE); - via6522_device &via0(R65C22(config, "via0", 1000000)); + via6522_device &via0(R65C22(config, "via0", 4_MHz_XTAL / 4)); via0.writepa_handler().set(FUNC(clcd_state::via0_pa_w)); via0.writepb_handler().set(FUNC(clcd_state::via0_pb_w)); via0.readpb_handler().set(FUNC(clcd_state::via0_pb_r)); via0.cb1_handler().set(FUNC(clcd_state::via0_cb1_w)); via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); - via6522_device &via1(R65C22(config, "via1", 1000000)); + via6522_device &via1(R65C22(config, "via1", 4_MHz_XTAL / 4)); via1.writepa_handler().set(FUNC(clcd_state::via1_pa_w)); via1.writepb_handler().set(FUNC(clcd_state::via1_pb_w)); via1.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); via1.ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe)).invert(); via1.cb2_handler().set("speaker", FUNC(speaker_sound_device::level_w)); - MOS6551(config, m_acia, 1000000); - m_acia->set_xtal(XTAL(1'843'200)); + MOS6551(config, m_acia, 4_MHz_XTAL / 4); + m_acia->set_xtal(1.8432_MHz_XTAL); m_acia->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>)); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); @@ -761,7 +766,7 @@ void clcd_state::clcd(machine_config &config) bankdev->set_stride(0x400); } - MSM58321(config, m_rtc, XTAL(32'768)); + MSM58321(config, m_rtc, 32.768_kHz_XTAL); m_rtc->d0_handler().set("via1", FUNC(via6522_device::write_pa0)); m_rtc->d1_handler().set("via1", FUNC(via6522_device::write_pa1)); m_rtc->d2_handler().set("via1", FUNC(via6522_device::write_pa2)); @@ -770,7 +775,7 @@ void clcd_state::clcd(machine_config &config) m_rtc->set_year0(1984); m_rtc->set_default_24h(true); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(80); screen.set_screen_update(FUNC(clcd_state::screen_update)); @@ -794,14 +799,15 @@ void clcd_state::clcd(machine_config &config) ROM_START( clcd ) ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_SYSTEM_BIOS( 0, "apr85", "Bil Herd Prototype" ) - ROMX_LOAD( "ss,calc 13apr.u105", 0x000000, 0x0008000, CRC(88a587a7) SHA1(b08f3169b7cd696bb6a9b6e6e87a077345377ac4), ROM_BIOS(0)) - ROMX_LOAD( "wp,t,m 13apr.u104", 0x008000, 0x0008000, CRC(41028c3c) SHA1(fcab6f0bbeef178eb8e5ecf82d9c348d8f318a8f), ROM_BIOS(0)) - ROMX_LOAD( "s12apr.u103", 0x010000, 0x0008000, CRC(0aa91d9f) SHA1(f0842f370607f95d0a0ec6afafb81bc063c32745), ROM_BIOS(0)) - ROMX_LOAD( "k12apr.u102", 0x018000, 0x0008000, CRC(59103d52) SHA1(e49c20b237a78b54c2cb26b133d5903bb60bd8ef), ROM_BIOS(0)) + ROMX_LOAD( "ss,calc 13apr.u105", 0x000000, 0x008000, CRC(88a587a7) SHA1(b08f3169b7cd696bb6a9b6e6e87a077345377ac4), ROM_BIOS(0) ) + ROMX_LOAD( "wp,t,m 13apr.u104", 0x008000, 0x008000, CRC(41028c3c) SHA1(fcab6f0bbeef178eb8e5ecf82d9c348d8f318a8f), ROM_BIOS(0) ) + ROMX_LOAD( "s12apr.u103", 0x010000, 0x008000, CRC(0aa91d9f) SHA1(f0842f370607f95d0a0ec6afafb81bc063c32745), ROM_BIOS(0) ) + ROMX_LOAD( "k12apr.u102", 0x018000, 0x008000, CRC(59103d52) SHA1(e49c20b237a78b54c2cb26b133d5903bb60bd8ef), ROM_BIOS(0) ) // Patch RTC register table by swapping day & month values - ROMX_FILL(0x1c216, 1, 0x09, ROM_BIOS(0)) - ROMX_FILL(0x1c217, 1, 0x07, ROM_BIOS(0)) + ROMX_FILL( 0x1c216, 1, 0x09, ROM_BIOS(0) ) + ROMX_FILL( 0x1c217, 1, 0x07, ROM_BIOS(0) ) ROM_SYSTEM_BIOS( 1, "may85", "Jeff Porter prototype" ) ROMX_LOAD( "s 3-24-85.u108", 0x000000, 0x008000, CRC(52db0ee9) SHA1(bea1e04fb88d205ebac7a1dbe2f5e98f84e7a3a7), ROM_BIOS(1) ) @@ -823,4 +829,4 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (Prototype)", 0 ) +COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (prototype)", 0 ) diff --git a/src/mame/dataeast/dec0.cpp b/src/mame/dataeast/dec0.cpp index e855d482531..898c107904d 100644 --- a/src/mame/dataeast/dec0.cpp +++ b/src/mame/dataeast/dec0.cpp @@ -370,7 +370,7 @@ DE-0323-4 #include "dec0.h" #include "cpu/m68000/m68000.h" -#include "cpu/m6502/m6502.h" +#include "cpu/m6502/r65c02.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m68705.h" #include "machine/input_merger.h" @@ -1772,14 +1772,17 @@ static GFXDECODE_START( gfx_secretab ) GFXDECODE_ENTRY( "tiles2", 0, automat_tilelayout2, 0x300, 0x10 ) GFXDECODE_END -/******************************************************************************/ - +/******************************************************************************/ // DECO video CRTC, pixel clock is unverified (actually 24MHz/4?) -void dec0_state::set_screen_raw_params_data_east(machine_config &config) +void dec0_state::set_screen_raw_params(machine_config &config) { - m_screen->set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248); +// m_screen->set_refresh_hz(57.41); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); / 57.41 Hz, 529us Vblank +// m_screen->set_size(32*8, 32*8); +// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_raw(XTAL(12'000'000) / 2, 384, 0, 256, 272, 8, 248); } void dec0_state::dec0_base(machine_config &config) @@ -1788,12 +1791,7 @@ void dec0_state::dec0_base(machine_config &config) BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - set_screen_raw_params_data_east(config); - //m_screen->set_refresh_hz(57.41); - //m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */ - //m_screen->set_size(32*8, 32*8); - //m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - //screen update callback differs per game + set_screen_raw_params(config); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dec0); @@ -1826,7 +1824,7 @@ void dec0_state::dec0(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_map); m_maincpu->set_vblank_int("screen", FUNC(dec0_state::irq6_line_assert)); /* VBL */ - M6502(config, m_audiocpu, XTAL(12'000'000) / 8); + R65C02(config, m_audiocpu, XTAL(12'000'000) / 8); m_audiocpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_s_map); input_merger_device &audio_irq(INPUT_MERGER_ANY_HIGH(config, "audio_irq")); @@ -1930,9 +1928,7 @@ void dec0_automat_state::automat(machine_config &config) BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(57.41); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */ - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_automat)); m_screen->set_palette(m_palette); @@ -2006,9 +2002,7 @@ void dec0_automat_state::secretab(machine_config &config) // all clocks verified BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(57.41); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); // 57.41 Hz, 529us Vblank - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_secretab)); m_screen->set_palette(m_palette); @@ -2289,7 +2283,7 @@ void dec0_state::midresb(machine_config &config) midres(config); m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::midresb_map); - M6502(config.replace(), m_audiocpu, 1500000); + R65C02(config.replace(), m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_s_map); M68705R3(config, m_mcu, XTAL(3'579'545)); diff --git a/src/mame/dataeast/dec0.h b/src/mame/dataeast/dec0.h index 2bd8de67110..9126007b9b8 100644 --- a/src/mame/dataeast/dec0.h +++ b/src/mame/dataeast/dec0.h @@ -84,7 +84,7 @@ class dec0_state : public driver_device void robocop_colpri_cb(u32 &colour, u32 &pri_mask); void baddudes_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32 &flags); - void set_screen_raw_params_data_east(machine_config &config); + void set_screen_raw_params(machine_config &config); void h6280_decrypt(const char *cputag); void dec0_map(address_map &map) ATTR_COLD; diff --git a/src/mame/dataeast/dec8.cpp b/src/mame/dataeast/dec8.cpp index d02c8659a9b..d92eb54bb4e 100644 --- a/src/mame/dataeast/dec8.cpp +++ b/src/mame/dataeast/dec8.cpp @@ -4,95 +4,90 @@ Various Data East 8 bit games: - Last Mission (rev 6) (c) 1986 Data East USA (2*6809 + I8751) - Last Mission (rev 5) (c) 1986 Data East USA (2*6809 + I8751) - Last Mission (Japan) (c) 1986 Data East Corporation (2*6809 + I8751) - Shackled (c) 1986 Data East USA (2*6809 + I8751) - Breywood (c) 1986 Data East Corporation (2*6809 + I8751) - Gondomania (c) 1987 Data East USA (6809 + I8751) - Makyou Senshi (c) 1987 Data East Corporation (6809 + I8751) - Garyo Retsuden (c) 1987 Data East Corporation (6809 + I8751) - The Real Ghostbusters (2p) (c) 1987 Data East USA (6809 + I8751) - The Real Ghostbusters (3p) (c) 1987 Data East USA (6809 + I8751) - Meikyuu Hunter G (c) 1987 Data East Corporation (6809 + I8751) - Captain Silver (World) (c) 1987 Data East Corporation (2*6809 + I8751) - Captain Silver (Japan) (c) 1987 Data East Corporation (2*6809 + I8751) - Psycho-Nics Oscar (World) (c) 1987 Data East Corporation (2*6809) - Psycho-Nics Oscar (US) (c) 1988 Data East USA (2*6809) - Psycho-Nics Oscar (Japan) (c) 1987 Data East Corporation (2*6809) - Super Real Darwin (World) (c) 1987 Data East Corporation (6809 + I8751) - Super Real Darwin (Japan) (c) 1987 Data East Corporation (6809 + I8751) - Cobra Command (World) (c) 1988 Data East Corporation (6809) - Cobra Command (Japan) (c) 1988 Data East Corporation (6809) - - All games use a 6502 for sound (some are encrypted), all games except Cobracom - and Oscar use an Intel 8751 for protection & coinage. For the games without - (fake) MCU, the coinage dip switch (sometimes based on the manual) is simulated. - - Meikyuu Hunter G was formerly known as Mazehunter. - - Emulation by Bryan McPhail, mish@tendril.co.uk - -To do: - Super Real Darwin 'Double' sprites appearing from the top of the screen are clipped - Strangely coloured butterfly on Garyo Retsuden water levels! - - Thanks to Jose Miguel Morales Farreras for Super Real Darwin information! +Last Mission (rev 6) (c) 1986 Data East USA (2*6809 + I8751) +Last Mission (rev 5) (c) 1986 Data East USA (2*6809 + I8751) +Last Mission (Japan) (c) 1986 Data East Corporation (2*6809 + I8751) +Shackled (c) 1986 Data East USA (2*6809 + I8751) +Breywood (c) 1986 Data East Corporation (2*6809 + I8751) +Gondomania (c) 1987 Data East USA (6809 + I8751) +Makyou Senshi (c) 1987 Data East Corporation (6809 + I8751) +Garyo Retsuden (c) 1987 Data East Corporation (6809 + I8751) +The Real Ghostbusters (2p) (c) 1987 Data East USA (6809 + I8751) +The Real Ghostbusters (3p) (c) 1987 Data East USA (6809 + I8751) +Meikyuu Hunter G (c) 1987 Data East Corporation (6809 + I8751) +Captain Silver (World) (c) 1987 Data East Corporation (2*6809 + I8751) +Captain Silver (Japan) (c) 1987 Data East Corporation (2*6809 + I8751) +Psycho-Nics Oscar (World) (c) 1987 Data East Corporation (2*6809) +Psycho-Nics Oscar (US) (c) 1988 Data East USA (2*6809) +Psycho-Nics Oscar (Japan) (c) 1987 Data East Corporation (2*6809) +Super Real Darwin (World) (c) 1987 Data East Corporation (6809 + I8751) +Super Real Darwin (Japan) (c) 1987 Data East Corporation (6809 + I8751) +Cobra Command (World) (c) 1988 Data East Corporation (6809) +Cobra Command (Japan) (c) 1988 Data East Corporation (6809) + +All games use a 6502 for sound (some are encrypted), all games except Cobracom +and Oscar use an Intel 8751 for protection & coinage. + +Meikyuu Hunter G was formerly known as Mazehunter. + +Emulation by Bryan McPhail, mish@tendril.co.uk +Thanks to Jose Miguel Morales Farreras for Super Real Darwin information! + +TODO: +- shackled continue after game over does not work, see MT0418. It's not that + big of an issue for user-wise, since credits add more health. For breywood, + it appears to work ok after the 1st level. +- srdarwin 'double' sprites appearing from the top of the screen are clipped +- strangely coloured butterfly on Garyo Retsuden water levels! +- gondo 2nd coin doesn't work, probably due to hacked MCU ROM +- ghostb coinage dipswitch +- how does meikyuhbl circumvent the MCU? It won't boot in MAME if MCU is removed ***************************************************************************/ #include "emu.h" #include "dec8.h" -#include "cpu/m6502/m6502.h" +#include "cpu/m6502/r65c02.h" #include "cpu/m6809/hd6309.h" #include "cpu/m6809/m6809.h" -#include "deco222.h" #include "sound/msm5205.h" #include "sound/ymopn.h" #include "sound/ymopl.h" +#include "deco222.h" #include "speaker.h" /******************************************************************************/ - void dec8_state_base::buffer_spriteram16_w(u8 data) { u8* spriteram = m_spriteram->live(); + // copy to a 16-bit region for the sprite chip - for (int i=0;i<0x800/2;i++) - { - m_buffered_spriteram16[i] = spriteram[(i*2)+1] | (spriteram[(i*2)+0] <<8); - } + for (int i = 0; i < 0x800/2 ; i++) + m_buffered_spriteram16[i] = spriteram[(i * 2) + 1] | (spriteram[(i * 2) + 0] << 8); } -/* Only used by ghostb, gondo, garyoret, other games can control buffering */ -void lastmisn_state::screen_vblank(int state) +// Only used by ghostb, gondo, garyoret, other games can control buffering +void ghostb_state::screen_vblank(int state) { // rising edge if (state) - { buffer_spriteram16_w(0); - } } -u8 dec8_mcu_state_base::i8751_h_r() +u8 dec8_mcu_state_base::i8751_hi_r() { - return m_i8751_return >> 8; /* MSB */ + return m_i8751_return >> 8; // MSB } -u8 dec8_mcu_state_base::i8751_l_r() +u8 dec8_mcu_state_base::i8751_lo_r() { - return m_i8751_return & 0xff; /* LSB */ + return m_i8751_return & 0xff; // LSB } -void dec8_mcu_state_base::i8751_reset_w(u8 data) -{ - // ? reset the actual MCU? - //m_i8751_return = 0; -} /******************************************************************************/ @@ -103,15 +98,14 @@ u8 gondo_state::player_io_r(offs_t offset) switch (offset) { - case 0: /* Rotary low byte */ + case 0: // Rotary low byte return ~(val & 0xff); - case 1: /* Joystick = bottom 4 bits, rotary = top 4 */ + case 1: // Joystick = bottom 4 bits, rotary = top 4 return ((~val >> 4) & 0xf0) | (m_in_io[Which]->read() & 0xf); } return 0xff; } -/******************************************************************************/ /*************************************************** * @@ -119,35 +113,53 @@ u8 gondo_state::player_io_r(offs_t offset) * ***************************************************/ -TIMER_CALLBACK_MEMBER(dec8_mcu_state_base::mcu_irq_clear) +TIMER_CALLBACK_MEMBER(ghostb_state::mcu_irq_clear) { - // The schematics show a clocked LS194 shift register (3A) is used to automatically - // clear the IRQ request. The MCU does not clear it itself. + // Gondomania schematics show a clocked LS194 shift register (3A) is used to + // automatically clear the IRQ request. The MCU does not clear it itself. m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } -TIMER_CALLBACK_MEMBER(dec8_state_base::audiocpu_nmi_clear) +TIMER_CALLBACK_MEMBER(ghostb_state::audiocpu_nmi_clear) { // Gondomania schematics show a LS194 for the sound IRQ, sharing the 6502 clock // S1=H, S0=L, LSI=H, and QA is the only output connected (to NMI) m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -void dec8_mcu_state_base::i8751_w(offs_t offset, u8 data) +void dec8_mcu_state_base::i8751_lo_w(u8 data) { - switch (offset) - { - case 0: /* High byte - SECIRQ is trigged on activating this latch */ - m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + m_i8751_value = (m_i8751_value & 0xff00) | data; +} + +void dec8_mcu_state_base::i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // SECIRQ is triggered on activating this latch + if (m_i8751_p2 & 2) m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); - m_i8751_timer->adjust(m_mcu->clocks_to_attotime(64)); // 64 clocks not confirmed - break; - case 1: /* Low byte */ - m_i8751_value = (m_i8751_value & 0xff00) | data; - break; - } } +void ghostb_state::i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // MCU interrupt is still level-triggered, but no ack? + m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); + m_i8751_timer->adjust(attotime::from_ticks(64, 12_MHz_XTAL / 8)); // 64 clocks not confirmed +} + +void ghostb_state::gondo_i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // MCU interrupt is edge-triggered + m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); + m_i8751_timer->adjust(attotime::from_ticks(4, 12_MHz_XTAL / 8)); +} + + /******************************************************************************/ void oscar_state::bank_w(u8 data) @@ -155,8 +167,8 @@ void oscar_state::bank_w(u8 data) m_mainbank->set_entry(data & 0x0f); } -/* Used by Ghostbusters, Meikyuu Hunter G & Gondomania */ -void lastmisn_state::ghostb_bank_w(u8 data) +// Used by Ghostbusters, Meikyuu Hunter G & Gondomania +void ghostb_state::ghostb_bank_w(u8 data) { /* Bit 0: SECCLR - acknowledge interrupt from I8751 Bit 1: NMI enable/disable @@ -164,7 +176,6 @@ void lastmisn_state::ghostb_bank_w(u8 data) Bit 3: Screen flip Bits 4-7: Bank switch */ - m_mainbank->set_entry(data >> 4); m_secclr = BIT(data, 0); @@ -196,18 +207,18 @@ void csilver_state::control_w(u8 data) m_mainbank->set_entry(data & 0x0f); } -void dec8_state_base::sound_w(u8 data) +void ghostb_state::sound_w(u8 data) { m_soundlatch->write(data); m_audiocpu->set_input_line(m6502_device::NMI_LINE, ASSERT_LINE); - m_m6502_timer->adjust(m_audiocpu->cycles_to_attotime(3)); + m_6502_timer->adjust(m_audiocpu->cycles_to_attotime(4)); } void csilver_state::adpcm_int(int state) { m_toggle ^= 1; if (m_toggle) - m_audiocpu->set_input_line(m6502_device::IRQ_LINE, HOLD_LINE); + m_audiocpu->set_input_line(m6502_device::IRQ_LINE, ASSERT_LINE); m_msm->data_w(m_msm5205next >> 4); m_msm5205next <<= 4; @@ -222,6 +233,7 @@ u8 csilver_state::adpcm_reset_r() void csilver_state::adpcm_data_w(u8 data) { m_msm5205next = data; + m_audiocpu->set_input_line(m6502_device::IRQ_LINE, CLEAR_LINE); } void csilver_state::sound_bank_w(u8 data) @@ -229,6 +241,7 @@ void csilver_state::sound_bank_w(u8 data) m_soundbank->set_entry((data & 0x08) >> 3); } + /******************************************************************************/ void dec8_state_base::main_irq_on_w(u8 data) @@ -241,11 +254,6 @@ void dec8_state_base::main_irq_off_w(u8 data) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void dec8_state_base::main_firq_off_w(u8 data) -{ - m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); -} - void dec8_state_base::sub_irq_on_w(u8 data) { m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); @@ -256,15 +264,15 @@ void dec8_state_base::sub_irq_off_w(u8 data) m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void dec8_state_base::sub_firq_off_w(u8 data) +void dec8_state_base::both_firq_off_w(u8 data) { + m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); m_subcpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); } -/******************************************************************************/ - void dec8_state_base::flip_screen_w(u8 data) { flip_screen_set(data); } + /******************************************************************************/ void lastmisn_state::lastmisn_map(address_map &map) @@ -274,17 +282,18 @@ void lastmisn_state::lastmisn_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::main_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::lastmisn_control_w)); /* Bank switch + Scroll MSB */ - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::lastmisn_control_w)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -300,14 +309,15 @@ void lastmisn_state::lastmisn_sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::main_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)); map(0x2800, 0x2fff).writeonly().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -322,15 +332,15 @@ void lastmisn_state::shackled_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::sub_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); map(0x1807, 0x1807).w(FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); /* Bank switch + Scroll MSB */ + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -346,17 +356,18 @@ void lastmisn_state::shackled_sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::sub_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); /* Bank switch + Scroll MSB */ - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -364,6 +375,32 @@ void lastmisn_state::shackled_sub_map(address_map &map) map(0x4000, 0xffff).rom(); } +void ghostb_state::ghostb_map(address_map &map) +{ + map(0x0000, 0x0fff).ram(); + map(0x1000, 0x17ff).ram(); + map(0x1800, 0x1fff).ram().w(FUNC(ghostb_state::videoram_w)).share(m_videoram); + map(0x2000, 0x27ff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); + map(0x2800, 0x2bff).ram(); // colscroll? mirror? + map(0x2c00, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_rowscroll_8bit_r), FUNC(deco_bac06_device::pf_rowscroll_8bit_w)); + map(0x3000, 0x37ff).ram().share("spriteram"); + map(0x3800, 0x3800).portr("IN0"); + map(0x3800, 0x3800).w(FUNC(ghostb_state::sound_w)); + map(0x3801, 0x3801).portr("IN1"); + map(0x3802, 0x3802).portr("IN2"); + map(0x3803, 0x3803).portr("DSW0"); + map(0x3820, 0x3820).portr("DSW1"); + map(0x3820, 0x3827).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); + map(0x3830, 0x383f).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_r), FUNC(deco_bac06_device::pf_control1_8bit_w)); + map(0x3840, 0x3840).r(FUNC(ghostb_state::i8751_hi_r)); + map(0x3840, 0x3840).w(FUNC(ghostb_state::ghostb_bank_w)); + map(0x3860, 0x3860).r(FUNC(ghostb_state::i8751_lo_r)); + map(0x3860, 0x3860).w(FUNC(ghostb_state::i8751_hi_w)); + map(0x3861, 0x3861).w(FUNC(ghostb_state::i8751_lo_w)); + map(0x4000, 0x7fff).bankr(m_mainbank); + map(0x8000, 0xffff).rom(); +} + void gondo_state::gondo_map(address_map &map) { map(0x0000, 0x17ff).ram(); @@ -371,67 +408,44 @@ void gondo_state::gondo_map(address_map &map) map(0x2000, 0x27ff).rw(FUNC(gondo_state::bg_ram_r), FUNC(gondo_state::bg_ram_w)).share("bg_ram"); map(0x2800, 0x2bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x2c00, 0x2fff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("DSW1"); /* Dip 2 */ - map(0x380a, 0x380b).r(FUNC(gondo_state::player_io_r<0>)); /* Player 1 rotary */ - map(0x380c, 0x380d).r(FUNC(gondo_state::player_io_r<1>)); /* Player 2 rotary */ - map(0x380e, 0x380e).portr("IN3"); /* VBL */ - map(0x380f, 0x380f).portr("IN2"); /* Fire buttons */ + map(0x3000, 0x37ff).ram().share("spriteram"); + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("DSW1"); + map(0x380a, 0x380b).r(FUNC(gondo_state::player_io_r<0>)); + map(0x380c, 0x380d).r(FUNC(gondo_state::player_io_r<1>)); + map(0x380e, 0x380e).portr("IN3"); + map(0x380f, 0x380f).portr("IN2"); map(0x3810, 0x3810).w(FUNC(gondo_state::sound_w)); map(0x3818, 0x382f).w(FUNC(gondo_state::gondo_scroll_w)); - map(0x3830, 0x3830).w(FUNC(gondo_state::ghostb_bank_w)); /* Bank + NMI enable */ - map(0x3838, 0x3838).r(FUNC(gondo_state::i8751_h_r)); - map(0x3839, 0x3839).r(FUNC(gondo_state::i8751_l_r)); - map(0x383a, 0x383b).w(FUNC(gondo_state::i8751_w)); + map(0x3830, 0x3830).w(FUNC(gondo_state::ghostb_bank_w)); + map(0x3838, 0x3838).r(FUNC(gondo_state::i8751_hi_r)); + map(0x3839, 0x3839).r(FUNC(gondo_state::i8751_lo_r)); + map(0x383a, 0x383a).w(FUNC(gondo_state::gondo_i8751_hi_w)); + map(0x383b, 0x383b).w(FUNC(gondo_state::i8751_lo_w)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } -void lastmisn_state::garyoret_map(address_map &map) +void ghostb_state::garyoret_map(address_map &map) { map(0x0000, 0x17ff).ram(); - map(0x1800, 0x1fff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); - map(0x2000, 0x27ff).rw(FUNC(lastmisn_state::bg_ram_r), FUNC(lastmisn_state::bg_ram_w)).share("bg_ram"); + map(0x1800, 0x1fff).ram().w(FUNC(ghostb_state::videoram_w)).share(m_videoram); + map(0x2000, 0x27ff).rw(FUNC(ghostb_state::bg_ram_r), FUNC(ghostb_state::bg_ram_w)).share("bg_ram"); map(0x2800, 0x2bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x2c00, 0x2fff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("DSW1"); /* Dip 2 */ - map(0x3808, 0x3808).nopr(); /* ? */ - map(0x380a, 0x380a).portr("IN1"); /* Player 2 + VBL */ - map(0x380b, 0x380b).portr("IN0"); /* Player 1 */ - map(0x3810, 0x3810).w(FUNC(lastmisn_state::sound_w)); - map(0x3818, 0x382f).w(FUNC(lastmisn_state::gondo_scroll_w)); - map(0x3830, 0x3830).w(FUNC(lastmisn_state::ghostb_bank_w)); /* Bank + NMI enable */ - map(0x3838, 0x3839).w(FUNC(lastmisn_state::i8751_w)); - map(0x383a, 0x383a).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x383b, 0x383b).r(FUNC(lastmisn_state::i8751_l_r)); - map(0x4000, 0x7fff).bankr(m_mainbank); - map(0x8000, 0xffff).rom(); -} - -void lastmisn_state::meikyuh_map(address_map &map) -{ - map(0x0000, 0x0fff).ram(); - map(0x1000, 0x17ff).ram(); - map(0x1800, 0x1fff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); - map(0x2000, 0x27ff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); - map(0x2800, 0x2bff).ram(); // colscroll? mirror? - map(0x2c00, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_rowscroll_8bit_r), FUNC(deco_bac06_device::pf_rowscroll_8bit_w)); map(0x3000, 0x37ff).ram().share("spriteram"); - map(0x3800, 0x3800).portr("IN0"); /* Player 1 */ - map(0x3800, 0x3800).w(FUNC(lastmisn_state::sound_w)); - map(0x3801, 0x3801).portr("IN1"); /* Player 2 */ - map(0x3802, 0x3802).portr("IN2"); /* Player 3 */ - map(0x3803, 0x3803).portr("DSW0"); /* Start buttons + VBL */ - map(0x3820, 0x3820).portr("DSW1"); /* Dip */ - map(0x3820, 0x3827).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); - map(0x3830, 0x383f).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_r), FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3840, 0x3840).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x3840, 0x3840).w(FUNC(lastmisn_state::ghostb_bank_w)); - map(0x3860, 0x3860).r(FUNC(lastmisn_state::i8751_l_r)); - map(0x3860, 0x3861).w(FUNC(lastmisn_state::i8751_w)); + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("DSW1"); + map(0x3808, 0x3808).nopr(); // ? + map(0x380a, 0x380a).portr("IN1"); + map(0x380b, 0x380b).portr("IN0"); + map(0x3810, 0x3810).w(FUNC(ghostb_state::sound_w)); + map(0x3818, 0x382f).w(FUNC(ghostb_state::gondo_scroll_w)); + map(0x3830, 0x3830).w(FUNC(ghostb_state::ghostb_bank_w)); + map(0x3838, 0x3838).w(FUNC(ghostb_state::gondo_i8751_hi_w)); + map(0x3839, 0x3839).w(FUNC(ghostb_state::i8751_lo_w)); + map(0x383a, 0x383a).r(FUNC(ghostb_state::i8751_hi_r)); + map(0x383b, 0x383b).r(FUNC(ghostb_state::i8751_lo_r)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } @@ -443,17 +457,18 @@ void csilver_state::main_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN1").w(FUNC(csilver_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN0").w(FUNC(csilver_state::main_irq_off_w)); - map(0x1802, 0x1802).w(FUNC(csilver_state::main_firq_off_w)); + map(0x1802, 0x1802).w(FUNC(csilver_state::both_firq_off_w)); map(0x1803, 0x1803).portr("IN2").w(FUNC(csilver_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(csilver_state::sub_irq_on_w)); - map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); /* Dip 1, DMA */ + map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); map(0x1807, 0x1807).w(FUNC(csilver_state::flip_screen_w)); map(0x1808, 0x180b).w(FUNC(csilver_state::scroll_w)); - map(0x180c, 0x180c).w(FUNC(csilver_state::sound_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x180d, 0x180d).w(FUNC(csilver_state::control_w)); - map(0x180e, 0x180f).w(FUNC(csilver_state::i8751_w)); - map(0x1c00, 0x1c00).r(FUNC(csilver_state::i8751_h_r)); - map(0x1e00, 0x1e00).r(FUNC(csilver_state::i8751_l_r)); + map(0x180e, 0x180e).w(FUNC(csilver_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(csilver_state::i8751_lo_w)); + map(0x1c00, 0x1c00).r(FUNC(csilver_state::i8751_hi_r)); + map(0x1e00, 0x1e00).r(FUNC(csilver_state::i8751_lo_r)); map(0x2000, 0x27ff).ram().w(FUNC(csilver_state::videoram_w)); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -469,11 +484,11 @@ void csilver_state::sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).w(FUNC(csilver_state::sub_irq_off_w)); map(0x1801, 0x1801).w(FUNC(csilver_state::main_irq_off_w)); - map(0x1802, 0x1802).w(FUNC(csilver_state::main_firq_off_w)); + map(0x1802, 0x1802).w(FUNC(csilver_state::both_firq_off_w)); map(0x1803, 0x1803).portr("IN2").w(FUNC(csilver_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(csilver_state::sub_irq_on_w)); - map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); /* DMA */ - map(0x180c, 0x180c).w(FUNC(csilver_state::sound_w)); + map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x2000, 0x27ff).ram().w(FUNC(csilver_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -488,23 +503,23 @@ void oscar_state::oscar_map(address_map &map) map(0x1000, 0x1fff).ram().share("share2"); map(0x2000, 0x27ff).ram().w(FUNC(oscar_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ + map(0x3000, 0x37ff).ram().share("spriteram"); map(0x3800, 0x3bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x3c00, 0x3c00).portr("IN0"); map(0x3c01, 0x3c01).portr("IN1"); - map(0x3c02, 0x3c02).portr("IN2"); /* VBL & coins */ - map(0x3c03, 0x3c03).portr("DSW0"); /* Dip 1 */ + map(0x3c02, 0x3c02).portr("IN2"); + map(0x3c03, 0x3c03).portr("DSW0"); map(0x3c04, 0x3c04).portr("DSW1"); map(0x3c00, 0x3c07).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3c10, 0x3c1f).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3c80, 0x3c80).w(FUNC(oscar_state::buffer_spriteram16_w)); /* DMA */ - map(0x3d00, 0x3d00).w(FUNC(oscar_state::bank_w)); /* BNKS */ - map(0x3d80, 0x3d80).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* SOUN */ - map(0x3e00, 0x3e00).w(FUNC(oscar_state::coin_clear_w)); /* COINCL */ - map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); /* IRQ 2 */ - map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); /* IRC 1 */ - map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); /* IRQ 1 */ - map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); /* IRC 2 */ + map(0x3c80, 0x3c80).w(FUNC(oscar_state::buffer_spriteram16_w)); // DMA + map(0x3d00, 0x3d00).w(FUNC(oscar_state::bank_w)); // BNKS + map(0x3d80, 0x3d80).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // SOUN + map(0x3e00, 0x3e00).w(FUNC(oscar_state::coin_clear_w)); // COINCL + map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); // IRQ 2 + map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); // IRC 1 + map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); // IRQ 1 + map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); // IRC 2 map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } @@ -514,10 +529,10 @@ void oscar_state::oscar_sub_map(address_map &map) map(0x0000, 0x0eff).ram().share("share1"); map(0x0f00, 0x0fff).ram(); map(0x1000, 0x1fff).ram().share("share2"); - map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); /* IRQ 2 */ - map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); /* IRC 1 */ - map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); /* IRQ 1 */ - map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); /* IRC 2 */ + map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); // IRQ 2 + map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); // IRC 1 + map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); // IRQ 1 + map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); // IRC 2 map(0x4000, 0xffff).rom(); } @@ -528,23 +543,32 @@ void srdarwin_state::main_map(address_map &map) map(0x0800, 0x0fff).ram().w(FUNC(srdarwin_state::srdarwin_videoram_w)).share(m_videoram); map(0x1000, 0x13ff).ram(); map(0x1400, 0x17ff).rw(FUNC(srdarwin_state::bg_ram_r), FUNC(srdarwin_state::bg_ram_w)).share("bg_ram"); - map(0x1800, 0x1801).w(FUNC(srdarwin_state::i8751_w)); - map(0x1802, 0x1802).w(FUNC(srdarwin_state::i8751_reset_w)); /* Maybe.. */ - map(0x1803, 0x1803).nopw(); /* NMI ack */ - map(0x1804, 0x1804).w(m_spriteram, FUNC(buffered_spriteram8_device::write)); /* DMA */ - map(0x1805, 0x1806).w(FUNC(srdarwin_state::control_w)); /* Scroll & Bank */ - map(0x2000, 0x2000).rw(FUNC(srdarwin_state::i8751_h_r), FUNC(srdarwin_state::sound_w)); /* Sound */ - map(0x2001, 0x2001).rw(FUNC(srdarwin_state::i8751_l_r), FUNC(srdarwin_state::flip_screen_w)); /* Flipscreen */ + map(0x1800, 0x1800).w(FUNC(srdarwin_state::i8751_hi_w)); + map(0x1801, 0x1801).w(FUNC(srdarwin_state::i8751_lo_w)); + map(0x1803, 0x1803).nopw(); + map(0x1804, 0x1804).w(m_spriteram, FUNC(buffered_spriteram8_device::write)); + map(0x1805, 0x1806).w(FUNC(srdarwin_state::control_w)); + map(0x2000, 0x2000).r(FUNC(srdarwin_state::i8751_hi_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x2001, 0x2001).rw(FUNC(srdarwin_state::i8751_lo_r), FUNC(srdarwin_state::flip_screen_w)); map(0x2800, 0x288f).w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x3000, 0x308f).w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("IN0"); /* Player 1 */ - map(0x3802, 0x3802).portr("IN1"); /* Player 2 (cocktail) + VBL */ - map(0x3803, 0x3803).portr("DSW1"); /* Dip 2 */ + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("IN0"); + map(0x3802, 0x3802).portr("IN1"); + map(0x3803, 0x3803).portr("DSW1"); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } +void srdarwin_state::srdarwinb_map(address_map &map) +{ + srdarwin_state::main_map(map); + + map(0x1800, 0x1801).nopw(); + map(0x2000, 0x2000).unmapr(); + map(0x2001, 0x2001).portr("COIN"); +} + void oscar_state::cobra_map(address_map &map) { map(0x0000, 0x07ff).ram(); @@ -554,26 +578,27 @@ void oscar_state::cobra_map(address_map &map) map(0x2000, 0x27ff).ram().w(FUNC(oscar_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x31ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); - map(0x3200, 0x37ff).nopw(); /* Unused */ - map(0x3800, 0x3800).portr("IN0"); /* Player 1 */ - map(0x3801, 0x3801).portr("IN1"); /* Player 2 */ - map(0x3802, 0x3802).portr("DSW0"); /* Dip 1 */ - map(0x3803, 0x3803).portr("DSW1"); /* Dip 2 */ + map(0x3200, 0x37ff).nopw(); // Unused + map(0x3800, 0x3800).portr("IN0"); + map(0x3801, 0x3801).portr("IN1"); + map(0x3802, 0x3802).portr("DSW0"); + map(0x3803, 0x3803).portr("DSW1"); map(0x3800, 0x3807).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3810, 0x381f).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3a00, 0x3a00).portr("IN2"); /* VBL & coins */ + map(0x3a00, 0x3a00).portr("IN2"); map(0x3a00, 0x3a07).w(m_tilegen[1], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3a10, 0x3a1f).w(m_tilegen[1], FUNC(deco_bac06_device::pf_control1_8bit_w)); map(0x3c00, 0x3c00).w(FUNC(oscar_state::bank_w)); - map(0x3c02, 0x3c02).w(FUNC(oscar_state::buffer_spriteram16_w)); /* DMA */ - map(0x3e00, 0x3e00).w(FUNC(oscar_state::sound_w)); + map(0x3c02, 0x3c02).w(FUNC(oscar_state::buffer_spriteram16_w)); + map(0x3e00, 0x3e00).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } + /******************************************************************************/ -/* Used for Cobra Command, Maze Hunter, Super Real Darwin etc */ +// Used for Cobra Command, Maze Hunter, Super Real Darwin etc void dec8_state_base::dec8_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -583,7 +608,7 @@ void dec8_state_base::dec8_s_map(address_map &map) map(0x8000, 0xffff).rom(); } -/* Used by Gondomania, Psycho-Nics Oscar & Garyo Retsuden */ +// Used by Gondomania, Psycho-Nics Oscar & Garyo Retsuden void dec8_state_base::oscar_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -599,7 +624,7 @@ void oscar_state::oscarbl_s_opcodes_map(address_map &map) map(0x8000, 0xffff).rom().region("audiocpu", 0x10000); } -/* Used by Last Mission, Shackled & Breywood */ +// Used by Last Mission, Shackled & Breywood void lastmisn_state::ym3526_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -609,20 +634,21 @@ void lastmisn_state::ym3526_s_map(address_map &map) map(0x8000, 0xffff).rom(); } -/* Captain Silver - same sound system as Pocket Gal */ +// Captain Silver - same sound system as Pocket Gal void csilver_state::sound_map(address_map &map) { map(0x0000, 0x07ff).ram(); map(0x0800, 0x0801).w("ym1", FUNC(ym2203_device::write)); map(0x1000, 0x1001).w("ym2", FUNC(ym3526_device::write)); - map(0x1800, 0x1800).w(FUNC(csilver_state::adpcm_data_w)); /* ADPCM data for the MSM5205 chip */ + map(0x1800, 0x1800).w(FUNC(csilver_state::adpcm_data_w)); // ADPCM data for the MSM5205 chip map(0x2000, 0x2000).w(FUNC(csilver_state::sound_bank_w)); map(0x3000, 0x3000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x3400, 0x3400).r(FUNC(csilver_state::adpcm_reset_r)); /* ? not sure */ + map(0x3400, 0x3400).r(FUNC(csilver_state::adpcm_reset_r)); // ? not sure map(0x4000, 0x7fff).bankr("soundbank"); map(0x8000, 0xffff).rom(); } + /******************************************************************************/ /* @@ -657,132 +683,140 @@ void dec8_mcu_state_base::i8751_port1_w(u8 data) m_i8751_port1 = data; } -void lastmisn_state::gondo_mcu_to_main_w(u8 data) +void ghostb_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data&0x10)==0) - m_i8751_port0 = m_i8751_value>>8; - if ((data&0x20)==0) - m_i8751_port1 = m_i8751_value&0xff; - if ((data&0x40)==0) + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) + m_i8751_port0 = m_i8751_value >> 8; + if (BIT(fall, 5)) + m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - // P2 - IRQ to main CPU - if (BIT(data, 2) && !BIT(m_i8751_p2, 2) && m_secclr) + // P22: IRQ to main CPU + if (BIT(rise, 2) && m_secclr) m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); - m_i8751_p2 = data; + + // P20,P21: N/C } -void lastmisn_state::shackled_mcu_to_main_w(u8 data) +void lastmisn_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data&0x10)==0) + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) { - m_i8751_port0 = m_i8751_value>>8; + m_i8751_port0 = m_i8751_value >> 8; - // mcu sets p0 to 0x00 + // lastmisn mcu sets p0 to 0x00 m_mcu->set_port_forced_input(0, m_i8751_port0); } - if ((data&0x20)==0) - m_i8751_port1 = m_i8751_value&0xff; - if ((data&0x40)==0) + if (BIT(fall, 5)) + m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - // P2 - IRQ to main CPU - if (BIT(data, 2) && !BIT(m_i8751_p2, 2)) + // P22: FIRQ to both CPUs + if (BIT(rise, 2)) + { + m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); m_subcpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); + } - if (!BIT(data, 0)) + // P20,P21: clear MCU INT0/1 + if (BIT(~data, 0)) m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE); - if (!BIT(data, 1)) + if (BIT(~data, 1)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - - m_i8751_p2 = data; } -/* - Super Real Darwin is similar but only appears to have a single port -*/ - +// Super Real Darwin is similar but only appears to have a single port void srdarwin_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data & 0x10) == 0) - { + const u8 fall = ~data & m_i8751_p2; + //const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) m_i8751_port0 = m_i8751_value >> 8; - } - if ((data & 0x20) == 0) - { - m_i8751_port0 = m_i8751_value & 0xff; - } - if ((data&0x40)==0) + if (BIT(fall, 5)) + m_i8751_port0 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port0; - // P2 - IRQ to main CPU - if ((data&0x04)==0) - m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); + // P22: maincpu has no IRQ/FIRQ handler - // guess, toggled after above. - if ((data&0x02)==0) - m_maincpu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); + // P21: clear MCU INT1 + if (BIT(~data, 1)) + m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } void csilver_state::mcu_to_main_w(u8 data) { - if (~data & 0x10) - m_i8751_port0 = m_i8751_value >> 8; + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; - if (~data & 0x20) + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) + m_i8751_port0 = m_i8751_value >> 8; + if (BIT(fall, 5)) m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) + m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); + if (BIT(fall, 7)) + m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - if (~data & 0x40) + // P22: FIRQ to both CPUs + if (BIT(rise, 2)) { - m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); // FIRQ to main cpu + m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); } - if (~data & 0x80) - m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - - m_i8751_p2 = data; + // P21: clear MCU INT1 + if (BIT(~data, 1)) + m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } -/******************************************************************************/ - -#define PLAYER1_JOYSTICK /* Player 1 controls */ \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - -#define PLAYER2_JOYSTICK /* Player 2 controls */ \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL +/******************************************************************************/ -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( lastmisn ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* bomb */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* bomb */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // bomb + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN2") @@ -795,23 +829,23 @@ static INPUT_PORTS_START( lastmisn ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") + PORT_START("COIN") PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -829,7 +863,7 @@ static INPUT_PORTS_START( lastmisn ) PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") /* tables at 0x82c1 (4 words) and 0xde38 (3 words) in 'lastmisn', 0x82c1 and 0xde17 in 'lastmisno' */ + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") // tables at 0x82c1 (4 words) and 0xde38 (3 words) in 'lastmisn', 0x82c1 and 0xde17 in 'lastmisno' PORT_DIPSETTING( 0x06, "30k 70k 70k+" ) PORT_DIPSETTING( 0x04, "40k 90k 90k+" ) PORT_DIPSETTING( 0x02, "40k and 80k" ) @@ -846,36 +880,42 @@ static INPUT_PORTS_START( lastmisn ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( lastmisnj ) PORT_INCLUDE(lastmisn) PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") /* tables at 0x82b7 (4 words) and 0xdd29 (3 words) */ + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") // tables at 0x82b7 (4 words) and 0xdd29 (3 words) PORT_DIPSETTING( 0x06, "30k 50k 50k+" ) PORT_DIPSETTING( 0x04, "30k 70k 70k+" ) PORT_DIPSETTING( 0x02, "50k 100k 100k+" ) PORT_DIPSETTING( 0x00, "50k only" ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4,5") PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) /* "difficult" */ - PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) /* "very difficult" */ - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) /* "top difficult" */ + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // "difficult" + PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) // "very difficult" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "top difficult" PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( shackled ) PORT_START("IN0") - PLAYER1_JOYSTICK + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") - PLAYER2_JOYSTICK + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -891,11 +931,11 @@ static INPUT_PORTS_START( shackled ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") + PORT_START("COIN") PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_START("DSW0") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") @@ -904,7 +944,7 @@ static INPUT_PORTS_START( shackled ) PORT_DIPUNUSED( 0x02, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:2") PORT_DIPUNUSED( 0x04, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:3") PORT_DIPUNUSED( 0x08, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:4") - PORT_DIPNAME( 0x10, 0x10, "Leave Off" ) PORT_DIPLOCATION("SW1:5") /* game doesn't boot when this is On - code at 0x401a - related to MCU - "dias" in Dip Switches page */ + PORT_DIPNAME( 0x10, 0x10, "Leave Off" ) PORT_DIPLOCATION("SW1:5") // game doesn't boot when this is On - code at 0x401a - related to MCU - "dias" in Dip Switches page PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:6") @@ -914,8 +954,8 @@ static INPUT_PORTS_START( shackled ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW1") - /* tables in main CPU : 0x859b (Help), 0x85e9 (6-Help), 0x8fbe (Coin), 0x91b6 (Heart) */ - PORT_DIPNAME( 0x07, 0x07, "Coin/Heart/Help/6-Help" ) PORT_DIPLOCATION("SW2:1,2,3") /* name from Dip Switches page */ + // tables in main CPU : 0x859b (Help), 0x85e9 (6-Help), 0x8fbe (Coin), 0x91b6 (Heart) + PORT_DIPNAME( 0x07, 0x07, "Coin/Heart/Help/6-Help" ) PORT_DIPLOCATION("SW2:1,2,3") // name from Dip Switches page PORT_DIPSETTING( 0x00, "2/100/50/200" ) PORT_DIPSETTING( 0x01, "4/100/60/300" ) PORT_DIPSETTING( 0x02, "6/200/70/300" ) @@ -936,12 +976,12 @@ static INPUT_PORTS_START( shackled ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( breywood ) PORT_INCLUDE(shackled) PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, "Power" ) PORT_DIPLOCATION("SW2:1,2,3,4") /* table at 0x41be in sub CPU */ + PORT_DIPNAME( 0x0f, 0x0f, "Power" ) PORT_DIPLOCATION("SW2:1,2,3,4") // table at 0x41be in sub CPU PORT_DIPSETTING( 0x07, "200" ) PORT_DIPSETTING( 0x0b, "300" ) PORT_DIPSETTING( 0x03, "400" ) @@ -961,15 +1001,21 @@ static INPUT_PORTS_START( breywood ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( gondo ) PORT_START("IN0") - PLAYER1_JOYSTICK - /* Top 4 bits are rotary controller */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + // Top 4 bits are rotary controller PORT_START("IN1") - PLAYER2_JOYSTICK - /* Top 4 bits are rotary controller */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + // Top 4 bits are rotary controller PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -991,27 +1037,27 @@ static INPUT_PORTS_START( gondo ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") /* hooked up on the i8751 */ - /* Low 4 bits not connected on schematics */ + PORT_START("COIN") // hooked up on the i8751 + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produces sound but gives 0 credits - coinage not initialised in the MCU */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // produces sound but gives 0 credits - coinage not initialised in the MCU - PORT_START("AN0") /* player 1 12-way rotary control */ + PORT_START("AN0") // player 1 12-way rotary control PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE PORT_FULL_TURN_COUNT(12) - PORT_START("AN1") /* player 2 12-way rotary control */ + PORT_START("AN1") // player 2 12-way rotary control PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_N) PORT_CODE_INC(KEYCODE_M) PORT_PLAYER(2) PORT_REVERSE PORT_FULL_TURN_COUNT(12) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0x01b8 in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0x01b8 in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0x01bc in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0x01bc in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1023,7 +1069,7 @@ static INPUT_PORTS_START( gondo ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Swap buttons" ) PORT_DIPLOCATION("SW1:8") /* code at 0x8a2b in 'gondo', 0x88c5 in 'makyosen' - undocumented in the manual */ + PORT_DIPNAME( 0x80, 0x80, "Swap buttons" ) PORT_DIPLOCATION("SW1:8") // code at 0x8a2b in 'gondo', 0x88c5 in 'makyosen' - undocumented in the manual PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -1032,7 +1078,7 @@ static INPUT_PORTS_START( gondo ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPSETTING( 0x00, "99 (Cheat)") // gives 99 lives + PORT_DIPSETTING( 0x00, "99 (Cheat)") // gives 99 lives PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) @@ -1047,28 +1093,34 @@ static INPUT_PORTS_START( gondo ) INPUT_PORTS_END -/* verified from HD6309 code - coinage needs further checking when the MCU is available */ +// verified from HD6309 code static INPUT_PORTS_START( garyoret ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* bomb */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* bomb */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // bomb PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") /* hooked up on the (fake) i8751 */ + PORT_START("COIN") // hooked up on the i8751 PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produces sound but gives 0 credits - coinage not initialised in the (fake) MCU */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // produces sound but gives 0 credits - coinage not initialised in the MCU PORT_START("DSW0") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") @@ -1088,7 +1140,7 @@ static INPUT_PORTS_START( garyoret ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") /* not tested - no cocktail when simultaneous players anyway */ + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") // not tested - no cocktail when simultaneous players anyway PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") @@ -1102,26 +1154,32 @@ static INPUT_PORTS_START( garyoret ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:5") PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") - PORT_DIPNAME( 0x40, 0x40, "Leave Off" ) PORT_DIPLOCATION("SW2:7") /* game doesn't boot when this is On - code at 0x807f and test at 0x819e */ + PORT_DIPNAME( 0x40, 0x40, "Leave Off" ) PORT_DIPLOCATION("SW2:7") // game doesn't boot when this is On - code at 0x807f and test at 0x819e PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* "FIRE" */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* beam / upgradable shot when out of energy */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // "FIRE" + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // beam / upgradable shot when out of energy PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* "FIRE" */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* beam / upgradable shot when out of energy */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // "FIRE" + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // beam / upgradable shot when out of energy PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1135,22 +1193,25 @@ static INPUT_PORTS_START( ghostb ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("I8751") - /* Low 4 bits not connected on schematics */ + PORT_START("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produce sound but gives 0 credits - "ANDA" instruction at 0x8a5a */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // produce sound but gives 0 credits - "ANDA" instruction at 0x8a5a PORT_START("DSW0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // Tested on real hardware PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) // 1-2 should be coinage. PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) - // PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - // PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - // PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // Tested on real hardware + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + // 1-2 should be coinage. +// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") +// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) +// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) +// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - // PORT_DIPLOCATION("SW1:3") // Manual says 'Must Be Off'. Note: Turning on 3+4+5+8 does nothing on real hardware. +// PORT_DIPLOCATION("SW1:3") // Manual says 'Must Be Off'. Note: Turning on 3+4+5+8 does nothing on real hardware. PORT_DIPUNUSED( 0x04, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:4") // Manual says 'Must Be Off'. See note PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:5") // Manual says 'Must Be Off'. See note PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") @@ -1162,17 +1223,17 @@ static INPUT_PORTS_START( ghostb ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") // not tested - no cocktail when simultaneous players anyway. Manual says 'Must Be Off'. See note PORT_START("DSW1") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") /* lives are added when STARTn is pressed */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") // lives are added when STARTn is pressed PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPSETTING( 0x00, "Invulnerability (Cheat)") // gives 1 life and energy does not decrease + PORT_DIPSETTING( 0x00, "Invulnerability (Cheat)") // gives 1 life and energy does not decrease PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x30, 0x30, "Max Scene Time" ) PORT_DIPLOCATION("SW2:5,6") /* 1:00 is added when STARTn is pressed until max scene time is reached */ + PORT_DIPNAME( 0x30, 0x30, "Max Scene Time" ) PORT_DIPLOCATION("SW2:5,6") // 1:00 is added when STARTn is pressed until max scene time is reached PORT_DIPSETTING( 0x00, "4:00" ) PORT_DIPSETTING( 0x10, "4:30" ) PORT_DIPSETTING( 0x30, "5:00" ) @@ -1180,45 +1241,45 @@ static INPUT_PORTS_START( ghostb ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") /* energy is set to value each new life */ - PORT_DIPSETTING( 0x80, DEF_STR( None ) ) /* 0x0100 */ - PORT_DIPSETTING( 0x00, "+25%" ) /* 0x0140 */ + PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") // energy is set to value each new life + PORT_DIPSETTING( 0x80, DEF_STR( None ) ) // 0x0100 + PORT_DIPSETTING( 0x00, "+25%" ) // 0x0140 INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb2a ) PORT_INCLUDE(ghostb) - /* BUTTON1 : upgradable shot - BUTTON2 : beam (provided you have energy) */ + // BUTTON1 : upgradable shot - BUTTON2 : beam (provided you have energy) - PORT_MODIFY("I8751") - /* Low 4 bits not connected on schematics */ + PORT_MODIFY("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produce sound but gives 0 lives - "ANDA" instruction at 0x8a20 */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // produce sound but gives 0 lives - "ANDA" instruction at 0x8a20 PORT_MODIFY("DSW0") - /* NO start buttons - to start a game, press any button from any player */ + // NO start buttons - to start a game, press any button from any player PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) -// 1 & 2 should be coinage -// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") -// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) -// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + // 1 & 2 should be coinage +// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") +// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) +// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) +// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_MODIFY("DSW1") - /* lives are added when COINn is pressed */ - /* 1:00 is added when COINn is pressed until max scene time is reached */ - PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") /* energy is added when COINn is pressed */ - PORT_DIPSETTING( 0x80, DEF_STR( None ) ) /* 0x0040 */ - PORT_DIPSETTING( 0x00, "+50%" ) /* 0x0060 */ + // lives are added when COINn is pressed + // 1:00 is added when COINn is pressed until max scene time is reached + PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") // energy is added when COINn is pressed + PORT_DIPSETTING( 0x80, DEF_STR( None ) ) // 0x0040 + PORT_DIPSETTING( 0x00, "+50%" ) // 0x0060 INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb3 ) PORT_INCLUDE(ghostb2a) @@ -1227,11 +1288,11 @@ static INPUT_PORTS_START( ghostb3 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) /* upgradable shot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) /* beam (provided you have energy) */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) // upgradable shot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) // beam (provided you have energy) - PORT_MODIFY("I8751") - /* Low 4 bits not connected on schematics */ + PORT_MODIFY("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -1239,24 +1300,24 @@ static INPUT_PORTS_START( ghostb3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( meikyuh ) PORT_INCLUDE(ghostb) - PORT_MODIFY("I8751") + PORT_MODIFY("COIN") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 ) /* gives 4 credits for 14 coins ! */ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) - /* BUTTON1 : upgradable shot - BUTTON2 : circular fire (provided you have energy) - BUTTON1 + BUTTON2 : beam (provided you have energy) */ + // BUTTON1 : upgradable shot - BUTTON2 : circular fire (provided you have energy) - BUTTON1 + BUTTON2 : beam (provided you have energy) PORT_MODIFY("DSW1") - /* lives are added when STARTn is pressed - 1 extra life is awarded on 2nd credit and after for the same player who gets then 2, 4 or 6 additional lives */ - /* max time scene is always 6:00 at start - 0:30 is subed every 8 levels - 1:00 is added when STARTn is pressed until max scene time is reached */ - PORT_DIPNAME( 0x10, 0x10, "Energy Bonus" ) PORT_DIPLOCATION("SW2:5") /* energy is added when STARTn is pressed */ - PORT_DIPSETTING( 0x10, DEF_STR( None ) ) /* 0x0020 */ - PORT_DIPSETTING( 0x00, "+50%" ) /* 0x0030 */ + // lives are added when STARTn is pressed - 1 extra life is awarded on 2nd credit and after for the same player who gets then 2, 4 or 6 additional lives + // max time scene is always 6:00 at start - 0:30 is subed every 8 levels - 1:00 is added when STARTn is pressed until max scene time is reached + PORT_DIPNAME( 0x10, 0x10, "Energy Bonus" ) PORT_DIPLOCATION("SW2:5") // energy is added when STARTn is pressed + PORT_DIPSETTING( 0x10, DEF_STR( None ) ) // 0x0020 + PORT_DIPSETTING( 0x00, "+50%" ) // 0x0030 PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") PORT_DIPNAME( 0x80, 0x80, "Freeze" ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) @@ -1264,19 +1325,25 @@ static INPUT_PORTS_START( meikyuh ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( csilver ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* sword */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* jump */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // sword + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* sword */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* jump */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // sword + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // jump PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1290,13 +1357,20 @@ static INPUT_PORTS_START( csilver ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) + PORT_START("COIN") // hooked up on the i8751 + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1327,30 +1401,23 @@ static INPUT_PORTS_START( csilver ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") - PORT_DIPNAME( 0x40, 0x40, "No Key for Door (Cheat)") PORT_DIPLOCATION("SW2:7") /* code at 0x9816 in sub CPU */ + PORT_DIPNAME( 0x40, 0x40, "No Key for Door (Cheat)") PORT_DIPLOCATION("SW2:7") // code at 0x9816 in sub CPU PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") - - PORT_START("I8751") /* hooked up on the i8751 */ - PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( csilverj ) PORT_INCLUDE(csilver) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1358,26 +1425,31 @@ static INPUT_PORTS_START( csilverj ) INPUT_PORTS_END - -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( oscar ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* jump */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* jump */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // jump + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1386,12 +1458,12 @@ static INPUT_PORTS_START( oscar ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0xf8e3 (4 * 2 bytes : coins then credits) */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0xf8e3 (4 * 2 bytes : coins then credits) PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0xf8eb (4 * 2 bytes : coins then credits) */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0xf8eb (4 * 2 bytes : coins then credits) PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1420,12 +1492,12 @@ static INPUT_PORTS_START( oscar ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6") /* tables at 0x82d8 (4 words) and 0xf3fe (3 words) */ + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6") // tables at 0x82d8 (4 words) and 0xf3fe (3 words) PORT_DIPSETTING( 0x30, "40k 100k 60k+" ) PORT_DIPSETTING( 0x20, "60k 160k 100k+" ) PORT_DIPSETTING( 0x10, "90k 240k 150k+" ) PORT_DIPSETTING( 0x00, "50k only" ) - PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:7") /* not when falling into void or water - also gives infinite time */ + PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:7") // not when falling into void or water - also gives infinite time PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8") @@ -1433,27 +1505,27 @@ static INPUT_PORTS_START( oscar ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( oscarj ) PORT_INCLUDE(oscar) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0xf8d6 (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8e6 in 'oscarj2', 0xf8f2 in 'oscaru' */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0xf8d6 (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8e6 in 'oscarj2', 0xf8f2 in 'oscaru' PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0xf8de (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8ee in 'oscarj2', 0xf8fa in 'oscaru' */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0xf8de (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8ee in 'oscarj2', 0xf8fa in 'oscaru' PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) - /* bonus lives : tables at 0x82d8 (4 words) and 0xf3f1 (3 words) in 'oscarj1', 0x82de and 0xf401 in 'orscarj2', 0x82d8 and 0xf412 in 'orscaru' - same as in 'oscar' */ + // bonus lives : tables at 0x82d8 (4 words) and 0xf3f1 (3 words) in 'oscarj1', 0x82de and 0xf401 in 'orscarj2', 0x82d8 and 0xf412 in 'orscaru' - same as in 'oscar' INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( srdarwin ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY @@ -1475,20 +1547,19 @@ static INPUT_PORTS_START( srdarwin ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("I8751") /* hooked up on the i8751 */ - PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_START("COIN") // hooked up on the i8751 + PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1516,9 +1587,9 @@ static INPUT_PORTS_START( srdarwin ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5") - PORT_DIPSETTING( 0x10, "Every 50k" ) /* table at 0xab06 - last bonus life at 850k */ - PORT_DIPSETTING( 0x00, "Every 100k" ) /* table at 0xab17 - last bonus life at 900k */ - PORT_DIPNAME( 0x20, 0x20, "After Stage 10" ) PORT_DIPLOCATION("SW2:6") /* code at 0xab94 */ + PORT_DIPSETTING( 0x10, "Every 50k" ) // table at 0xab06 - last bonus life at 850k + PORT_DIPSETTING( 0x00, "Every 100k" ) // table at 0xab17 - last bonus life at 900k + PORT_DIPNAME( 0x20, 0x20, "After Stage 10" ) PORT_DIPLOCATION("SW2:6") // code at 0xab94 PORT_DIPSETTING( 0x20, "Back to Stage 1" ) PORT_DIPSETTING( 0x00, "Game Over" ) PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:7") @@ -1527,17 +1598,17 @@ static INPUT_PORTS_START( srdarwin ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( srdarwinj ) PORT_INCLUDE(srdarwin) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1545,26 +1616,32 @@ static INPUT_PORTS_START( srdarwinj ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( cobracom ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* fire */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* missile */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // fire + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // missile PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* fire */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* missile */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // fire + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // missile PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* always adds 1 credit */ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) // always adds 1 credit PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1572,17 +1649,17 @@ static INPUT_PORTS_START( cobracom ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* code at 0x88b7 in 'cobracom', 0x890e in 'cobracomj' */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") // code at 0x88b7 in 'cobracom', 0x890e in 'cobracomj' PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* code at 0x889b in 'cobracom', 0x88f2 in 'cobracomj' */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") // code at 0x889b in 'cobracom', 0x88f2 in 'cobracomj' PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") // Manual says 'Off' + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") // Manual says 'Off' PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") @@ -1600,7 +1677,7 @@ static INPUT_PORTS_START( cobracom ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "4" ) PORT_DIPSETTING( 0x01, "5" ) - PORT_DIPSETTING( 0x00, "99 (Cheat)") /* lose a life before getting 2nd bonus life ! */ + PORT_DIPSETTING( 0x00, "99 (Cheat)") // lose a life before getting 2nd bonus life ! PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) @@ -1609,13 +1686,14 @@ static INPUT_PORTS_START( cobracom ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:6") /* table at 0xa898 (2* 2 words) in 'cobracomj', 0xa8fe in 'cobracomj' */ + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:6") // table at 0xa898 (2* 2 words) in 'cobracomj', 0xa8fe in 'cobracomj' PORT_DIPSETTING( 0x20, "50k and 150k" ) PORT_DIPSETTING( 0x00, "100k and 200k" ) PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:7") - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") /* previously "Freeze" : code at 0x8849 in 'cobracomj', 0x88a0 in 'cobracomj' */ + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") // previously "Freeze" : code at 0x8849 in 'cobracomj', 0x88a0 in 'cobracomj' INPUT_PORTS_END + /******************************************************************************/ static const gfx_layout charlayout_32k = @@ -1626,7 +1704,7 @@ static const gfx_layout charlayout_32k = { 0x4000*8,0x0000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; static const gfx_layout chars_3bpp = @@ -1637,19 +1715,19 @@ static const gfx_layout chars_3bpp = { 0x6000*8,0x4000*8,0x2000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; -/* SRDarwin characters - very unusual layout for Data East */ +// SRDarwin characters - very unusual layout for Data East static const gfx_layout charlayout_16k = { - 8,8, /* 8*8 characters */ + 8,8, // 8*8 characters 1024, - 2, /* 2 bits per pixel */ - { 0, 4 }, /* the two bitplanes for 4 pixels are packed into one byte */ + 2, // 2 bits per pixel + { 0, 4 }, // the two bitplanes for 4 pixels are packed into one byte { 0x2000*8+0, 0x2000*8+1, 0x2000*8+2, 0x2000*8+3, 0, 1, 2, 3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ + 8*8 // every char takes 8 consecutive bytes }; static const gfx_layout oscar_charlayout = @@ -1660,10 +1738,10 @@ static const gfx_layout oscar_charlayout = { 0x3000*8,0x2000*8,0x1000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; -/* Darwin sprites - only 3bpp */ +// Darwin sprites - only 3bpp static const gfx_layout sr_sprites = { 16,16, @@ -1687,7 +1765,7 @@ static const gfx_layout srdarwin_tiles = 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+1024*8*8+0, 16*8+1024*8*8+1, 16*8+1024*8*8+2, 16*8+1024*8*8+3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, - 32*8 /* every tile takes 32 consecutive bytes */ + 32*8 // every tile takes 32 consecutive bytes }; static const gfx_layout tiles = @@ -1702,7 +1780,7 @@ static const gfx_layout tiles = 16*16 }; -/* X flipped on Ghostbusters tiles */ +// X flipped on Ghostbusters tiles static const gfx_layout tiles_r = { 16,16, @@ -1731,7 +1809,7 @@ static GFXDECODE_START( gfx_ghostb ) GFXDECODE_END static GFXDECODE_START( gfx_srdarwin ) - GFXDECODE_ENTRY( "char", 0x00000, charlayout_16k, 128, 4 ) /* Only 1 used so far :/ */ + GFXDECODE_ENTRY( "char", 0x00000, charlayout_16k, 128, 4 ) // Only 1 used so far :/ GFXDECODE_ENTRY( "sprites", 0x00000, sr_sprites, 64, 8 ) GFXDECODE_ENTRY( "tiles1", 0x00000, srdarwin_tiles, 0, 8 ) GFXDECODE_ENTRY( "tiles1", 0x10000, srdarwin_tiles, 0, 8 ) @@ -1740,21 +1818,21 @@ static GFXDECODE_START( gfx_srdarwin ) GFXDECODE_END static GFXDECODE_START( gfx_gondo ) - GFXDECODE_ENTRY( "char", 0, chars_3bpp, 0, 16 ) /* Chars */ - GFXDECODE_ENTRY( "tiles1", 0, tiles, 768, 16 ) /* Tiles */ + GFXDECODE_ENTRY( "char", 0, chars_3bpp, 0, 16 ) // Chars + GFXDECODE_ENTRY( "tiles1", 0, tiles, 768, 16 ) // Tiles GFXDECODE_END static GFXDECODE_START( gfx_gondo_spr ) - GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 32 ) /* Sprites */ + GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 32 ) // Sprites GFXDECODE_END static GFXDECODE_START( gfx_oscar ) - GFXDECODE_ENTRY( "char", 0, oscar_charlayout, 256, 8 ) /* Chars */ - GFXDECODE_ENTRY( "tiles1", 0, tiles, 384, 8 ) /* Tiles */ + GFXDECODE_ENTRY( "char", 0, oscar_charlayout, 256, 8 ) // Chars + GFXDECODE_ENTRY( "tiles1", 0, tiles, 384, 8 ) // Tiles GFXDECODE_END static GFXDECODE_START( gfx_oscar_spr ) - GFXDECODE_ENTRY( "sprites", 0, tiles, 0, 16 ) /* Sprites */ + GFXDECODE_ENTRY( "sprites", 0, tiles, 0, 16 ) // Sprites GFXDECODE_END static GFXDECODE_START( gfx_shackled ) @@ -1766,9 +1844,10 @@ static GFXDECODE_START( gfx_shackled_spr ) GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 16 ) GFXDECODE_END + /******************************************************************************/ -/* Coins generate NMI's */ +// Coins generate NMI's void oscar_state::coin_irq(int state) { if (state && !m_coin_state) @@ -1788,19 +1867,16 @@ void lastmisn_state::shackled_coin_irq(int state) m_coin_state = bool(state); } -/******************************************************************************/ +/******************************************************************************/ void dec8_state_base::machine_start() { u8 *ROM = memregion("maincpu")->base(); - uint32_t max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; + u32 max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; m_mainbank->configure_entries(0, max_bank, &ROM[0x10000], 0x4000); - m_m6502_timer = timer_alloc(FUNC(dec8_state_base::audiocpu_nmi_clear), this); - save_item(NAME(m_coin_state)); - save_item(NAME(m_scroll)); } @@ -1814,7 +1890,6 @@ void dec8_mcu_state_base::machine_start() { dec8_state_base::machine_start(); - m_i8751_timer = timer_alloc(FUNC(dec8_mcu_state_base::mcu_irq_clear), this); m_i8751_p2 = 0xff; save_item(NAME(m_i8751_p2)); @@ -1833,16 +1908,19 @@ void dec8_mcu_state_base::machine_reset() } -void lastmisn_state::machine_start() +void ghostb_state::machine_start() { - dec8_mcu_state_base::machine_start(); + lastmisn_state::machine_start(); + + m_6502_timer = timer_alloc(FUNC(ghostb_state::audiocpu_nmi_clear), this); + m_i8751_timer = timer_alloc(FUNC(ghostb_state::mcu_irq_clear), this); save_item(NAME(m_secclr)); } -void lastmisn_state::machine_reset() +void ghostb_state::machine_reset() { - dec8_state_base::machine_reset(); + lastmisn_state::machine_reset(); // reset clears LS273 latch, which disables NMI if (m_nmigate.found()) @@ -1871,46 +1949,46 @@ void csilver_state::machine_reset() // DECO video CRTC, unverified -void dec8_state_base::set_screen_raw_params_data_east(machine_config &config) +void dec8_state_base::set_screen_raw_params(machine_config &config) { - m_screen->set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248); +// m_screen->set_refresh_hz(58); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); // 58Hz, 529us Vblank duration +// m_screen->set_size(32*8, 32*8); +// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_raw(12_MHz_XTAL / 2, 384, 0, 256, 272, 8, 248); } void lastmisn_state::lastmisn(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // MC68B09EP in schematics m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::lastmisn_map); - MC6809E(config, m_subcpu, 2000000); + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // MC68B09EP in schematics m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::lastmisn_sub_map); - M6502(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::shackled_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); config.set_maximum_quantum(attotime::from_hz(12000)); INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(lastmisn_state::shackled_coin_irq)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_lastmisn)); m_screen->set_palette(m_palette); @@ -1919,58 +1997,58 @@ void lastmisn_state::lastmisn(machine_config &config) MCFG_VIDEO_START_OVERRIDE(lastmisn_state,lastmisn) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void lastmisn_state::shackled(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::shackled_map); - MC6809E(config, m_subcpu, 2000000); + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::shackled_sub_map); - M6502(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::shackled_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); -// config.set_maximum_quantum(attotime::from_hz(100000)); config.set_perfect_quantum(m_maincpu); // needs heavy sync, otherwise one of the two CPUs will miss an IRQ and cause the game to hang INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(lastmisn_state::shackled_coin_irq)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_shackled)); m_screen->set_palette(m_palette); @@ -1979,54 +2057,58 @@ void lastmisn_state::shackled(machine_config &config) MCFG_VIDEO_START_OVERRIDE(lastmisn_state,shackled) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void gondo_state::gondo(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ + // basic machine hardware + HD6309E(config, m_maincpu, 3'000'000); // HD63C09EP m_maincpu->set_addrmap(AS_PROGRAM, &gondo_state::gondo_map); - M6502(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &gondo_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &gondo_state::oscar_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(gondo_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(gondo_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(gondo_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(gondo_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(gondo_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(gondo_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_gondo_spr); m_spritegen_krn->set_colpri_callback(FUNC(gondo_state::gondo_colpri_cb)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(gondo_state::screen_update_gondo)); m_screen->screen_vblank().set(FUNC(gondo_state::screen_vblank)); m_screen->screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2034,53 +2116,56 @@ void gondo_state::gondo(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_gondo); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.50); } -void lastmisn_state::garyoret(machine_config &config) +void ghostb_state::garyoret(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ - m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::garyoret_map); + // basic machine hardware + HD6309E(config, m_maincpu, 3'000'000); // HD63C09EP + m_maincpu->set_addrmap(AS_PROGRAM, &ghostb_state::garyoret_map); - M6502(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::oscar_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); - m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); - m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); - m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); - m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + I8751(config, m_mcu, 8_MHz_XTAL); + m_mcu->port_in_cb<0>().set(FUNC(ghostb_state::i8751_port0_r)); + m_mcu->port_out_cb<0>().set(FUNC(ghostb_state::i8751_port0_w)); + m_mcu->port_in_cb<1>().set(FUNC(ghostb_state::i8751_port1_r)); + m_mcu->port_out_cb<1>().set(FUNC(ghostb_state::i8751_port1_w)); + m_mcu->port_out_cb<2>().set(FUNC(ghostb_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_gondo_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); - m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_garyoret)); - m_screen->screen_vblank().set(FUNC(lastmisn_state::screen_vblank)); + set_screen_raw_params(config); + m_screen->set_screen_update(FUNC(ghostb_state::screen_update_garyoret)); + m_screen->screen_vblank().set(FUNC(ghostb_state::screen_vblank)); m_screen->screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2088,42 +2173,48 @@ void lastmisn_state::garyoret(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_gondo); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting - MCFG_VIDEO_START_OVERRIDE(lastmisn_state,garyoret) + MCFG_VIDEO_START_OVERRIDE(ghostb_state,garyoret) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } -void lastmisn_state::ghostb(machine_config &config) +void ghostb_state::ghostb(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, XTAL(12'000'000) / 4); /* HD63C09EP, clock verified */ - m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::meikyuh_map); + // basic machine hardware + HD6309E(config, m_maincpu, 12_MHz_XTAL / 4); // HD63C09EP, clock verified + m_maincpu->set_addrmap(AS_PROGRAM, &ghostb_state::ghostb_map); - DECO_222(config, m_audiocpu, XTAL(12'000'000) / 8); /* also seen with stock M6502, clock verified */ - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::dec8_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 12_MHz_XTAL / 8); // also seen with stock M6502, clock verified + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::dec8_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); /* 8.0MHz OSC next to MCU - clock verified */ - m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); - m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); - m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); - m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + I8751(config, m_mcu, 8_MHz_XTAL); // 8.0MHz OSC next to MCU - clock verified + m_mcu->port_in_cb<0>().set(FUNC(ghostb_state::i8751_port0_r)); + m_mcu->port_out_cb<0>().set(FUNC(ghostb_state::i8751_port0_w)); + m_mcu->port_in_cb<1>().set(FUNC(ghostb_state::i8751_port1_r)); + m_mcu->port_out_cb<1>().set(FUNC(ghostb_state::i8751_port1_w)); + m_mcu->port_out_cb<2>().set(FUNC(ghostb_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2133,81 +2224,79 @@ void lastmisn_state::ghostb(machine_config &config) DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); - m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_ghostb)); - m_screen->screen_vblank().set(FUNC(lastmisn_state::screen_vblank)); + set_screen_raw_params(config); + m_screen->set_screen_update(FUNC(ghostb_state::screen_update_ghostb)); + m_screen->screen_vblank().set(FUNC(ghostb_state::screen_vblank)); m_screen->screen_vblank().append([this] (int state) { if (state && m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); }); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ghostb); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting m_palette->set_prom_region("proms"); m_palette->set_init(m_palette, FUNC(deco_rmc3_device::palette_init_proms)); - MCFG_VIDEO_START_OVERRIDE(lastmisn_state,ghostb) + MCFG_VIDEO_START_OVERRIDE(ghostb_state,ghostb) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000) / 8)); // clock verified - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // clock verified + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3812_device &ym2(YM3812(config, "ym2", XTAL(12'000'000) / 4)); // clock verified - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3812_device &ym2(YM3812(config, "ym2", 12_MHz_XTAL / 4)); // clock verified + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } -void lastmisn_state::meikyuh(machine_config &config) +void ghostb_state::meikyuh(machine_config &config) { ghostb(config); - M6502(config.replace(), m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::dec8_s_map); + + R65C02(config.replace(), m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::dec8_s_map); } void csilver_state::csilver(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, XTAL(12'000'000)/8); /* verified on pcb */ + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &csilver_state::main_map); - MC6809E(config, m_subcpu, XTAL(12'000'000)/8); /* verified on pcb */ + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &csilver_state::sub_map); - M6502(config, m_audiocpu, XTAL(12'000'000)/8); /* verified on pcb */ - m_audiocpu->set_addrmap(AS_PROGRAM, &csilver_state::sound_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); // verified on pcb + m_audiocpu->set_addrmap(AS_PROGRAM, &csilver_state::sound_map); // NMIs are caused by the main CPU config.set_maximum_quantum(attotime::from_hz(6000)); - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(csilver_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(csilver_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(csilver_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(csilver_state::i8751_port1_w)); m_mcu->port_out_cb<2>().set(FUNC(csilver_state::mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_in_cb<3>().set_ioport("COIN"); config.set_perfect_quantum(m_maincpu); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(csilver_state::screen_update_lastmisn)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_subcpu, INPUT_LINE_NMI); @@ -2217,44 +2306,44 @@ void csilver_state::csilver(machine_config &config) MCFG_VIDEO_START_OVERRIDE(csilver_state,lastmisn) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000)/8)); /* verified on pcb */ - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // verified on pcb + ym1.add_route(0, "mono", 0.10); + ym1.add_route(1, "mono", 0.10); + ym1.add_route(2, "mono", 0.10); ym1.add_route(3, "mono", 0.20); - ym3526_device &ym2(YM3526(config, "ym2", XTAL(12'000'000)/4)); /* verified on pcb */ - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); // verified on pcb + ym2.add_route(ALL_OUTPUTS, "mono", 0.40); - MSM5205(config, m_msm, XTAL(384'000)); /* verified on pcb */ - m_msm->vck_legacy_callback().set(FUNC(csilver_state::adpcm_int)); /* interrupt function */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8KHz */ - m_msm->add_route(ALL_OUTPUTS, "mono", 0.88); + MSM5205(config, m_msm, 384_kHz_XTAL); // verified on pcb + m_msm->vck_legacy_callback().set(FUNC(csilver_state::adpcm_int)); // interrupt function + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8KHz + m_msm->add_route(ALL_OUTPUTS, "mono", 0.80); } void oscar_state::oscar(machine_config &config) { - /* basic machine hardware */ - HD6309(config, m_maincpu, XTAL(12'000'000)/2); /* PCB seen both HD6309EP or MC6809EP, clock verified on pcb */ + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // PCB seen both HD6309EP or MC6809EP, clock verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_map); - HD6309(config, m_subcpu, XTAL(12'000'000)/2); /* PCB seen both HD6309EP or MC6809EP, clock verified on pcb */ + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // PCB seen both HD6309EP or MC6809EP, clock verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_sub_map); - DECO_222(config, m_audiocpu, XTAL(12'000'000)/8); // IC labeled "C10707-1" - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 12_MHz_XTAL / 8); // IC labeled "C10707-1" + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); // NMIs are caused by the main CPU - config.set_maximum_quantum(attotime::from_hz(2400)); /* 40 CPU slices per frame */ + config.set_maximum_quantum(attotime::from_hz(6000)); INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(oscar_state::coin_irq)); // 1S1588 x3 (D1-D3) + RCDM-I5 - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2265,11 +2354,7 @@ void oscar_state::oscar(machine_config &config) DECO_MXC06(config, m_spritegen_mxc, 0, m_palette, gfx_oscar_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(oscar_state::screen_update_oscar)); m_screen->set_palette(m_palette); @@ -2278,58 +2363,58 @@ void oscar_state::oscar(machine_config &config) MCFG_VIDEO_START_OVERRIDE(oscar_state,oscar) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, m6502_device::NMI_LINE); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000)/8)); /* verified on pcb */ - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", XTAL(12'000'000)/4)); /* verified on pcb */ - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // verified on pcb + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); // verified on pcb + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void oscar_state::oscarbl(machine_config &config) { oscar(config); - M6502(config.replace(), m_audiocpu, XTAL(12'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config.replace(), m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); // NMIs are caused by the main CPU m_audiocpu->set_addrmap(AS_OPCODES, &oscar_state::oscarbl_s_opcodes_map); } void srdarwin_state::srdarwin(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); /* MC68A09EP */ + // basic machine hardware + MC6809E(config, m_maincpu, 1'500'000); // MC68A09EP or HD63?09EP m_maincpu->set_addrmap(AS_PROGRAM, &srdarwin_state::main_map); - DECO_222(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &srdarwin_state::dec8_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &srdarwin_state::dec8_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); /* unknown frequency */ + I8751(config, m_mcu, 8_MHz_XTAL); // unknown frequency m_mcu->port_in_cb<0>().set(FUNC(srdarwin_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(srdarwin_state::i8751_port0_w)); m_mcu->port_out_cb<2>().set(FUNC(srdarwin_state::mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_in_cb<3>().set_ioport("COIN"); - config.set_perfect_quantum(m_maincpu); /* needed for stability with emulated MCU or sometimes commands get missed and game crashes at bosses */ + config.set_perfect_quantum(m_maincpu); // needed for stability with emulated MCU or sometimes commands get missed and game crashes at bosses - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(srdarwin_state::screen_update)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2337,32 +2422,47 @@ void srdarwin_state::srdarwin(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_srdarwin); DECO_RMC3(config, m_palette, 0, 144); // xxxxBBBBGGGGRRRR with custom weighting - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3812_device &ym2(YM3812(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3812_device &ym2(YM3812(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); +} + +void srdarwin_state::srdarwinb(machine_config &config) +{ + srdarwin(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &srdarwin_state::srdarwinb_map); + + config.device_remove("mcu"); + config.set_perfect_quantum(""); } void oscar_state::cobracom(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); /* MC68B09EP */ + // basic machine hardware + MC6809E(config, m_maincpu, 1'500'000); // MC68B09EP m_maincpu->set_addrmap(AS_PROGRAM, &oscar_state::cobra_map); - M6502(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::dec8_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::dec8_s_map); // NMIs are caused by the main CPU - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2377,11 +2477,7 @@ void oscar_state::cobracom(machine_config &config) m_spritegen_mxc->set_colpri_callback(FUNC(oscar_state::cobracom_colpri_cb)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(oscar_state::screen_update_cobracom)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2391,37 +2487,43 @@ void oscar_state::cobracom(machine_config &config) MCFG_VIDEO_START_OVERRIDE(oscar_state,cobracom) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.53); - ym1.add_route(1, "mono", 0.53); - ym1.add_route(2, "mono", 0.53); - ym1.add_route(3, "mono", 0.50); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3812_device &ym2(YM3812(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3812_device &ym2(YM3812(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } + /******************************************************************************/ ROM_START( lastmisn ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-8.13h", 0x08000, 0x08000, CRC(a4f8d54b) SHA1(4525826fa5d12c22e0f3bc1c3a9673b86a34aad1) ) /* Rev 8 roms */ + ROM_LOAD( "last_mission_dl03-8.13h", 0x08000, 0x08000, CRC(a4f8d54b) SHA1(4525826fa5d12c22e0f3bc1c3a9673b86a34aad1) ) // Rev 8 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) BAD_DUMP ) /* not verified to be the same data as the "A" MCU dump */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) BAD_DUMP ) // not verified to be the same data as the "A" MCU dump ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2441,23 +2543,23 @@ ROM_START( lastmisn ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnu6 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-6.13h", 0x08000, 0x08000, CRC(47751a5e) SHA1(190970a6eb849781e8853f2bed7b34ac44e569ca) ) /* Rev 6 roms */ + ROM_LOAD( "last_mission_dl03-6.13h", 0x08000, 0x08000, CRC(47751a5e) SHA1(190970a6eb849781e8853f2bed7b34ac44e569ca) ) // Rev 6 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) // Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2477,23 +2579,23 @@ ROM_START( lastmisnu6 ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnu5 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-5.13h", 0x08000, 0x08000, CRC(357f5f6b) SHA1(a114aac50db62a6bcb943681e517ad7c88ec47f4) ) /* Rev 5 roms */ + ROM_LOAD( "last_mission_dl03-5.13h", 0x08000, 0x08000, CRC(357f5f6b) SHA1(a114aac50db62a6bcb943681e517ad7c88ec47f4) ) // Rev 5 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) // Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2513,8 +2615,8 @@ ROM_START( lastmisnu5 ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x00000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnj ) @@ -2522,14 +2624,14 @@ ROM_START( lastmisnj ) ROM_LOAD( "dl03-.13h", 0x08000, 0x08000, CRC(4be5e7e1) SHA1(9f943658663da31947cebdcbcb5f4e2be0714c06) ) ROM_LOAD( "dl04-.7h", 0x10000, 0x10000, CRC(f026adf9) SHA1(4ccd0e714a6eb7cee388c93beee2d5510407c961) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dl02-.18h", 0x0000, 0x10000, CRC(d0de2b5d) SHA1(e0bb34c2a2ef6fc6f05ab9a98bd23a39004c0c05) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) // created from dump of the US version - ROM_LOAD( "last_mission_japan.18a", 0x0000, 0x1000, BAD_DUMP CRC(0d58c3a1) SHA1(184e75324b7ab2de8e6441f0c954046db80b2640) ) /* correct ROM label when real MCU is dumped */ + ROM_REGION( 0x1000, "mcu", 0 ) // created from dump of the US version + ROM_LOAD( "last_mission_japan.18a", 0x0000, 0x1000, BAD_DUMP CRC(0d58c3a1) SHA1(184e75324b7ab2de8e6441f0c954046db80b2640) ) // correct ROM label when real MCU is dumped ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2549,27 +2651,27 @@ ROM_START( lastmisnj ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( shackled ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dk-02.13h", 0x08000, 0x08000, CRC(87f8fa85) SHA1(1cb93a60eefdb453a3cc6ec9c5cc2e367fb8aeb0) ) ROM_LOAD( "dk-06.7h", 0x10000, 0x10000, CRC(69ad62d1) SHA1(1aa23b12ab4f1908cddd25f091e1f9bd70a5113c) ) - ROM_LOAD( "dk-05.8h", 0x20000, 0x10000, CRC(598dd128) SHA1(10843c5352eef03c8675df6abaf23c9c9c795aa3) ) + ROM_LOAD( "dk-05.9h", 0x20000, 0x10000, CRC(598dd128) SHA1(10843c5352eef03c8675df6abaf23c9c9c795aa3) ) ROM_LOAD( "dk-04.10h", 0x30000, 0x10000, CRC(36d305d4) SHA1(17586c316aff405cf20c1467d69c98fa2a3c2630) ) ROM_LOAD( "dk-03.11h", 0x40000, 0x08000, CRC(6fd90fd1) SHA1(2f8db17e5545c82d243a7e23e7bda2c2a9101360) ) ROM_RELOAD( 0x48000, 0x08000 ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dk-01.18h", 0x00000, 0x10000, CRC(71fe3bda) SHA1(959cce01362b2c670c2e15b03a78a1ff9cea4ee9) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dk-07.5h", 0x08000, 0x08000, CRC(887e4bcc) SHA1(6427396080e9cd8647adff47c8ed04593a14268c) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU (based on 'breywood' with ID byte changed from 00 to 01) */ - ROM_LOAD( "dk-e.18a", 0x0000, 0x1000, CRC(1af06149) SHA1(b9cb2a4986dbcfc78b0cbea2c1e2bdac1db479cd) BAD_DUMP ) /* Hand written "E" */ + ROM_REGION( 0x1000, "mcu", 0 ) // ID8751H (fake) MCU (based on 'breywood' with ID byte changed from 00 to 01) + ROM_LOAD( "dk-e.18a", 0x0000, 0x1000, CRC(1af06149) SHA1(b9cb2a4986dbcfc78b0cbea2c1e2bdac1db479cd) BAD_DUMP ) // Hand written "E" ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dk-00.2a", 0x00000, 0x08000, CRC(69b975aa) SHA1(38cb96768c79ff1aa1b4b190e08ec9155baf698a) ) @@ -2590,26 +2692,26 @@ ROM_START( shackled ) ROM_LOAD( "dk-09.15k", 0x40000, 0x10000, CRC(c1557fac) SHA1(7d39ec793113a48baf45c2ea07abb07e2e48985a) ) ROM_LOAD( "dk-08.17k", 0x60000, 0x10000, CRC(5e54e9f5) SHA1(1ab41a3bde1f2c2be670e89cf402be28001c17d1) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dk-20.9c", 0x00000, 0x100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) /* Priority (Not yet used) BPROM type MB7052 */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dk-20.9c", 0x0000, 0x0100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) // Priority (Not yet used) BPROM type MB7052 ROM_END ROM_START( breywood ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dj02-2.13h", 0x08000, 0x08000, CRC(c19856b9) SHA1(766994703bb59879c311675353d7231ad27c7c16) ) ROM_LOAD( "dj06-2.7h", 0x10000, 0x10000, CRC(2860ea02) SHA1(7ac090c3ae9d71baa6227ec9555f1c9f2d25ea0d) ) - ROM_LOAD( "dj05-2.8h", 0x20000, 0x10000, CRC(0fdd915e) SHA1(262df956dfc727c710ade28af7f33fddaafd7ee2) ) + ROM_LOAD( "dj05-2.9h", 0x20000, 0x10000, CRC(0fdd915e) SHA1(262df956dfc727c710ade28af7f33fddaafd7ee2) ) ROM_LOAD( "dj04-2.10h", 0x30000, 0x10000, CRC(71036579) SHA1(c58ff3222b5bcd75d58c5f282554e92103e80916) ) ROM_LOAD( "dj03-2.11h", 0x40000, 0x08000, CRC(308f4893) SHA1(539c138ff01c5718cc8a982482b989468d532699) ) ROM_RELOAD( 0x48000, 0x08000 ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dj1-2y.18h", 0x0000, 0x10000, CRC(3d9fb623) SHA1(6e5eaad9bb0a432e2da5da5b18a2ed36617bdde2) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dj07-1.5h", 0x8000, 0x8000, CRC(4a471c38) SHA1(963ed7b6afeefdfc2cf0d65b0998f973330e6495) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dj.18a", 0x0000, 0x1000, CRC(4cb20332) SHA1(e0bbba7be22e7bcff82fb0ae441410e559ec4566) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2631,8 +2733,8 @@ ROM_START( breywood ) ROM_LOAD( "dj09.15k", 0x40000, 0x10000, CRC(e37d5dbe) SHA1(ff79b4f6d8b0a3061e78d15480df0155650f347f) ) ROM_LOAD( "dj08.17k", 0x60000, 0x10000, CRC(beee880f) SHA1(9a818a75cbec425a13f629bda6d50aa341aa1896) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dk-20.9c", 0x00000, 0x100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) /* Priority (Not yet used) BPROM type MB7052 */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dk-20.9c", 0x0000, 0x0100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) // Priority (Not yet used) BPROM type MB7052 ROM_END ROM_START( gondo ) @@ -2645,7 +2747,7 @@ ROM_START( gondo ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dt05-e.h5", 0x8000, 0x8000, CRC(ec08aa29) SHA1(ce83974ae095d9518d1ebf9f7e712f0cbc2c1b42) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dt-e.b1", 0x0000, 0x1000, BAD_DUMP CRC(0d0532ec) SHA1(30894f69ff24c1be4b684e07729bbb3e0f353086) ) // hand-crafted from the US version ROM_REGION( 0x08000, "char", 0 ) @@ -2675,8 +2777,8 @@ ROM_START( gondo ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "dt11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_END ROM_START( gondou ) @@ -2689,7 +2791,7 @@ ROM_START( gondou ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dt05.h5", 0x8000, 0x8000, CRC(ec08aa29) SHA1(ce83974ae095d9518d1ebf9f7e712f0cbc2c1b42) ) // == dt05-e.h5 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dt-a.b1", 0x0000, 0x1000, CRC(03abceeb) SHA1(a16b779d7cea1c1437f85fa6b6e08894a46a5674) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2719,8 +2821,8 @@ ROM_START( gondou ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "dt11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_END ROM_START( makyosen ) @@ -2733,7 +2835,7 @@ ROM_START( makyosen ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ds05.h5", 0x8000, 0x8000, CRC(e6e28ca9) SHA1(3b1f8219331db1910bfb428f8964f8fc1063df6f) ) // == dt05-e.h5 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "ds.b1", 0x0000, 0x1000, CRC(08f36e35) SHA1(e8913da71704a89fad41d5bfba45682119166681) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2763,13 +2865,13 @@ ROM_START( makyosen ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "ds11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "pal16r4nc.u10", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */ - ROM_LOAD( "pal16r4nc.g11", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */ - ROM_LOAD( "pal16r4nc.s1", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */ + ROM_LOAD( "pal16r4nc.u10", 0x0000, 0x0104, NO_DUMP ) // PAL is read protected + ROM_LOAD( "pal16r4nc.g11", 0x0200, 0x0104, NO_DUMP ) // PAL is read protected + ROM_LOAD( "pal16r4nc.s1", 0x0400, 0x0104, NO_DUMP ) // PAL is read protected ROM_END ROM_START( garyoret ) @@ -2783,11 +2885,11 @@ ROM_START( garyoret ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dv05", 0x08000, 0x08000, CRC(c97c347f) SHA1(a1b22733dc15d524af97db3e608a82503a49b182) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU based on 'gondo' one */ + ROM_REGION( 0x1000, "mcu", 0 ) // ID8751H (fake) MCU based on 'gondo' one ROM_LOAD( "dv__.mcu", 0x0000, 0x1000, BAD_DUMP CRC(37cacec6) SHA1(d81fe36939ccac784a83a69dfc6898b22a4515ec) ) ROM_REGION( 0x08000, "char", 0 ) - ROM_LOAD( "dv14", 0x00000, 0x08000, CRC(fb2bc581) SHA1(d597976c5ae586166c49051cc3de8cf0c2e5a5e1) ) /* Characters */ + ROM_LOAD( "dv14", 0x00000, 0x08000, CRC(fb2bc581) SHA1(d597976c5ae586166c49051cc3de8cf0c2e5a5e1) ) // Characters ROM_REGION( 0x80000, "sprites", 0 ) ROM_LOAD( "dv22", 0x00000, 0x10000, CRC(cef0367e) SHA1(8beb3a6b91ec0a6ec052243c8f626a581d349f65) ) @@ -2829,10 +2931,10 @@ ROM_START( ghostb ) ROM_LOAD( "dz04-21.6d", 0x30000, 0x10000, CRC(7d46582f) SHA1(22e70675d76e2a93a732370fa42cc4b79381f4b0) ) ROM_LOAD( "dz05-21.7d", 0x40000, 0x10000, CRC(23e1c758) SHA1(c6432682e1d4429d0cfa8de6a05ca0152611b5b1) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2867,10 +2969,10 @@ ROM_START( ghostb2a ) ROM_LOAD( "dz04.6d", 0x30000, 0x10000, CRC(d09bad99) SHA1(bde8e4316cedf1d292f0aed8627b0dc6794c6e07) ) ROM_LOAD( "dz05.7d", 0x40000, 0x10000, CRC(0315f691) SHA1(3bfad18b9f230e64c608a22af20c3b00dca3e6da) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2905,10 +3007,10 @@ ROM_START( ghostb3 ) ROM_LOAD( "dz04-1.6d", 0x30000, 0x10000, CRC(3c3eb09f) SHA1(ae4975992698fa97c68a857a25b470a05539160a) ) ROM_LOAD( "dz05-1.7d", 0x40000, 0x10000, CRC(b4971d33) SHA1(25e052c4b414c7bd7b6e3ae9c211873902afb5f7) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2935,8 +3037,7 @@ ROM_START( ghostb3 ) ROM_LOAD( "dz20a.11d", 0x0400, 0x0400, CRC(d8fe2d99) SHA1(56f8fcf2f871c7d52d4299a5b9988401ada4319d) ) ROM_END -// DZ-1 is the verified correct MCU code for the ghostb3a set below - program ROMs work on a real PCB, but stall here in the demo mode -// Both DZ01-2 & DZ04- ROMs have been verified correct from multiple sources +// DZ-1 is the verified correct MCU code for the ghostb3a set below, both DZ01-2 & DZ04- ROMs have been verified correct from multiple sources ROM_START( ghostb3a ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dz01-2.1d", 0x08000, 0x08000, CRC(1b16890e) SHA1(eebd253d616b6286937b72cfb64612877f383932) ) @@ -2945,10 +3046,10 @@ ROM_START( ghostb3a ) ROM_LOAD( "dz04-.6d", 0x30000, 0x10000, CRC(490b4525) SHA1(3066b76f8fe99c8f9f1cdf943209883a199a4184) ) ROM_LOAD( "dz05-.7d", 0x40000, 0x10000, CRC(b4971d33) SHA1(25e052c4b414c7bd7b6e3ae9c211873902afb5f7) ) // == dz05-1.7d (ghostb3) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2976,6 +3077,7 @@ ROM_START( ghostb3a ) ROM_END /* + Meikyuu Hunter G (Data East, 1987) Hardware info by Guru @@ -3019,8 +3121,8 @@ DE-0273-1 VSync - 58Hz HSync - 15.68kHz ROMs - - DW00/DW01/DW05 - 27C256 - DW02/DW03/DW04 \ + DW00/DW01/DW05 - 27C256 + DW02/DW03/DW04 \ DW06/DW07/DW08/DW09 / 27C512 DW18 - Fujitsu MB7132, compatible with Philips 82S181 DW19 - Fujitsu MB7122, compatible with Philips 82S137 @@ -3070,7 +3172,7 @@ ROM_START( meikyuh ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dw05.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3152,6 +3254,7 @@ There is a small piggyback attached under CPUs PCB full of 74Sxx ALL MEMORIES ARE MASK ROMS! */ + ROM_START( meikyuhbl ) ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD( "27256.1d", 0x08000, 0x08000, CRC(d5b5e8a2) SHA1(0155d1d0ddbd764b960148c3c9ef34223e101659) ) // dw-01-5.1d matched 6.552124% @@ -3162,7 +3265,7 @@ ROM_START( meikyuhbl ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "27256.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller - should be unpopulated ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3196,6 +3299,9 @@ ROM_START( meikyuhbl ) ROM_END /* + +Captain Silver + Main Components --------------- @@ -3242,45 +3348,44 @@ Lower board (DATA EAST DE-0251-2): */ - ROM_START( csilver ) ROM_REGION( 0x48000, "maincpu", 0 ) ROM_LOAD( "dx03-12.18d", 0x08000, 0x08000, CRC(2d926e7c) SHA1(cf38e92904edb1870b0a4965f9049d67efe8cf6a) ) ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - // 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version) + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + // 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version) ROM_LOAD( "dx-8.19a", 0x0000, 0x1000, CRC(c0266263) SHA1(27ac6fa4af7195f04249c04dec168ab82158704e) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END // There is known to exist an identical ROM set with different PCB locations designated for an alternate ROM board (noted on the right of the ROM definition) @@ -3290,38 +3395,38 @@ ROM_START( csilverj ) ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) // dx01.a2 ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) // dx01.a3 - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) // dx04-1.a5 ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) // dx05.a6 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller // hand modified version of csilver ROM ROM_LOAD( "id8751h_japan.mcu", 0x0000, 0x1000, BAD_DUMP CRC(6e801217) SHA1(2d8f7ae533dd8146acf8461d61ddd839544adf55) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) // dx00.a1 - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) // dx14.b5 - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) // dx13.b4 - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) // dx12.b3 - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) // dx06.a7 ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) // dx07.a8 ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) // dx08.a9 ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) // dx09.a10 - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) // dx10.b1 - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) // dx11.b2 + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) // dx10.b1 + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) // dx11.b2 - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END ROM_START( csilverja ) // DE-0250-3 + DE-0251-2 @@ -3330,38 +3435,38 @@ ROM_START( csilverja ) // DE-0250-3 + DE-0251-2 ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller // hand modified version of csilver ROM ROM_LOAD( "id8751h_japan.mcu", 0x0000, 0x1000, BAD_DUMP CRC(6e801217) SHA1(2d8f7ae533dd8146acf8461d61ddd839544adf55) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END ROM_START( oscar ) @@ -3369,10 +3474,10 @@ ROM_START( oscar ) ROM_LOAD( "du10", 0x08000, 0x08000, CRC(120040d8) SHA1(22d5f84f3ca724cbf39dfc4790f2175ba4945aaf) ) // This label is probably incorrect. The correct label is needed ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) // for the world set because DU is the code for the Japanese version - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3391,7 +3496,7 @@ ROM_START( oscar ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) ROM_END -ROM_START( oscarbl ) // very similar to the original, main difference it's it uses a standard M6502 for sound with predecrypted opcodes. +ROM_START( oscarbl ) // very similar to the original, main difference it's it uses a standard M6502 for sound with predecrypted opcodes. ROM_REGION( 0x20000, "maincpu", 0 ) // same as the original ROM_LOAD( "m27c256.3", 0x08000, 0x08000, CRC(120040d8) SHA1(22d5f84f3ca724cbf39dfc4790f2175ba4945aaf) ) ROM_LOAD( "at27c512.2", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) @@ -3423,10 +3528,10 @@ ROM_START( oscaru ) ROM_LOAD( "ed10", 0x08000, 0x08000, CRC(f9b0d4d4) SHA1(dc2aba978ba96f365027c7be5714728d5d7fb802) ) ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "ed11", 0x0000, 0x10000, CRC(10e5d919) SHA1(13bc3497cb4aaa6dd272853819212ad63656f8a7) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3444,8 +3549,8 @@ ROM_START( oscaru ) ROM_LOAD( "ed00", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.bin", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.bin", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END ROM_START( oscarj1 ) @@ -3453,10 +3558,10 @@ ROM_START( oscarj1 ) ROM_LOAD( "du10-1", 0x08000, 0x08000, CRC(4ebc9f7a) SHA1(df8fdc4b4b203dc1bdd048f069fb6b723bdea0d2) ) ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3474,8 +3579,8 @@ ROM_START( oscarj1 ) ROM_LOAD( "ed00", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.bin", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.bin", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END /*************************************************************************** @@ -3554,16 +3659,15 @@ OSCAR 7891-1077 (sticker) ***************************************************************************/ - ROM_START( oscarj2 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "du10-2.h12", 0x08000, 0x08000, CRC(114e898d) SHA1(1072ccabe6d53c50cdfa1e27d5d848ecdd6559cc) ) ROM_LOAD( "du09.h10", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11.h16", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "du12.k5", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3581,8 +3685,8 @@ ROM_START( oscarj2 ) ROM_LOAD( "du00.a1", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "du02.a5", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.c8", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.c8", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END ROM_START( srdarwin ) @@ -3591,11 +3695,11 @@ ROM_START( srdarwin ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "dy_00.b16", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dy_04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - // 0160: B4 6B 0D : cjne a,#$6B,$0170 (ID code 0x6b = World version) + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + // 0160: B4 6B 0D : cjne a,#$6B,$0170 (ID code 0x6b = World version) ROM_LOAD( "dy-e.d11", 0x0000, 0x1000, CRC(11cd6ca4) SHA1(ec70f84228e37f9fc1bda85fa52a009f61c500b2) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3619,8 +3723,8 @@ ROM_START( srdarwin ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dy_12.f4", 0x00000, 0x100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dy_12.f4", 0x0000, 0x0100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) // Priority (Not yet used) ROM_END ROM_START( srdarwinj ) @@ -3629,10 +3733,10 @@ ROM_START( srdarwinj ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "dy_00.b16", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dy_04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dy.d11", 0x0000, 0x1000, BAD_DUMP CRC(4ac2ca9d) SHA1(6e07788df9fcf4248a9d3e87b8c5f54776bd269e) ) // hand-modified copy of world version to correct region + coinage ROM_REGION( 0x08000, "char", 0 ) @@ -3656,8 +3760,8 @@ ROM_START( srdarwinj ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dy_12.f4", 0x00000, 0x100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dy_12.f4", 0x0000, 0x0100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) // Priority (Not yet used) ROM_END ROM_START( srdarwinb ) @@ -3666,15 +3770,12 @@ ROM_START( srdarwinb ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "4.bin", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "5.bin", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) // PCB lacks of i8751 microcontroller - ROM_LOAD( "mcu.bin", 0x0000, 0x1000, NO_DUMP ) - ROM_REGION( 0x8000, "char", 0 ) ROM_LOAD( "12.bin", 0x0000, 0x4000, CRC(f5c835cd) SHA1(8b41862dc18ba2e2677c94ecef45a40467aa89ad) ) - ROM_CONTINUE( 0x0000, 0x4000 ) // all data in the 2nd half + ROM_CONTINUE( 0x0000, 0x4000 ) // all data in the 2nd half ROM_REGION( 0x30000, "sprites", 0 ) ROM_LOAD( "6.bin", 0x00000, 0x8000, CRC(3c84a2c6) SHA1(558a7d9acb5af06a7728d010262e3a35c3cdbe25) ) @@ -3694,8 +3795,8 @@ ROM_START( srdarwinb ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "82s123.bin", 0x00000, 0x100, NO_DUMP ) // Priority (Not yet used) + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "82s123.bin", 0x0000, 0x0100, NO_DUMP ) // Priority (Not yet used) ROM_END @@ -3775,8 +3876,8 @@ ROM_END ROM_START( cobracomb ) ROM_REGION( 0x30000, "maincpu", 0 ) - ROM_LOAD( "el11.5j", 0x08000, 0x08000, CRC(c6a102e3) SHA1(51d9781d13a8a98c9bbdf34fa79ebfd8a152567e) ) /* "zero" revision - IE: Original version */ - ROM_LOAD( "el12.7j", 0x10000, 0x10000, CRC(72b2dab4) SHA1(ff84a04cfe920a0d8105fbbd1f44ee86822cf0d3) ) /* "zero" revision - IE: Original version */ + ROM_LOAD( "el11.5j", 0x08000, 0x08000, CRC(c6a102e3) SHA1(51d9781d13a8a98c9bbdf34fa79ebfd8a152567e) ) // "zero" revision - IE: Original version + ROM_LOAD( "el12.7j", 0x10000, 0x10000, CRC(72b2dab4) SHA1(ff84a04cfe920a0d8105fbbd1f44ee86822cf0d3) ) // "zero" revision - IE: Original version ROM_LOAD( "el13.9j", 0x20000, 0x10000, CRC(04505acb) SHA1(2220efb277884588859375dab9960f04f07273a7) ) ROM_REGION( 0x10000, "audiocpu", 0 ) @@ -3891,11 +3992,10 @@ ROM_START( cobracomjb ) ROM_END -void lastmisn_state::init_meikyuhbl() +void ghostb_state::init_meikyuhbl() { // this bootleg has the high nibble of the first 0x400 bytes with reversed bits. // Address it here instead of hacking the DECO RM-C3 device. - u8 *proms = memregion("proms")->base(); for (int i = 0; i < 0x400; i++) @@ -3908,53 +4008,52 @@ void srdarwin_state::init_srdarwinb() { // this bootleg has the sprite ROMs with bytes swapped. // just worked here to avoid a new gfxdecode and machine driver. - u8 *rom = memregion("sprites")->base(); - uint8_t byte1; for (int i = 0; i < 0x30000; i += 4) { - byte1 = rom[i + 1]; + u8 byte1 = rom[i + 1]; rom[i + 1] = rom[i + 2]; rom[i + 2] = byte1; } } + /******************************************************************************/ -GAME( 1986, lastmisn, 0, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (World revision 8)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnu6, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnu5, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, shackled, 0, shackled, shackled, lastmisn_state, empty_init, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, breywood, shackled, shackled, breywood, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gondo, 0, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Gondomania (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gondou, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, makyosen, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, garyoret, 0, garyoret, garyoret, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb, 0, ghostb, ghostb, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB - stalls in demo mode -GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, lastmisn_state, init_meikyuhbl, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverja, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscar, 0, oscar, oscar, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarbl, oscar, oscarbl, oscar, oscar_state, empty_init, ROT0, "bootleg", "Psycho-Nics Oscar (World revision 0, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, oscaru, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj1, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj2, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwin, 0, srdarwin, srdarwin, srdarwin_state, empty_init, ROT270, "Data East Corporation", "Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, srdarwin_state, empty_init, ROT270, "Data East Corporation", "Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwinb, srdarwin, srdarwin, srdarwinj, srdarwin_state, init_srdarwinb, ROT270, "bootleg", "Super Real Darwin (Japan, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisn, 0, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (World revision 8)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnu6, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnu5, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, shackled, 0, shackled, shackled, lastmisn_state, empty_init, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, breywood, shackled, shackled, breywood, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gondo, 0, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Gondomania (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gondou, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, makyosen, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, garyoret, 0, garyoret, garyoret, ghostb_state, empty_init, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb, 0, ghostb, ghostb, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, ghostb_state, empty_init, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, ghostb_state, init_meikyuhbl, ROT0, "bootleg", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverja, csilver, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscar, 0, oscar, oscar, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarbl, oscar, oscarbl, oscar, oscar_state, empty_init, ROT0, "bootleg", "Psycho-Nics Oscar (World revision 0, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, oscaru, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj1, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj2, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwin, 0, srdarwin, srdarwin, srdarwin_state, empty_init, ROT270, "Data East Corporation", "SRD: Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, srdarwin_state, empty_init, ROT270, "Data East Corporation", "SRD: Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwinb, srdarwin, srdarwinb, srdarwinj, srdarwin_state, init_srdarwinb, ROT270, "bootleg", "SRD: Super Real Darwin (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) // Unlike most Deco games of this period Cobra Command does not seem to have a Data East USA release. Instead the Data East Corporation release // was used in the US as evidenced by boards with the EL romset bearing AAMA seal stickers (American Amusement Machine Association) -GAME( 1988, cobracom, 0, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracoma, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomj, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomjb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "bootleg", "Cobra-Command (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracom, 0, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracoma, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomj, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomjb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "bootleg", "Cobra-Command (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dataeast/dec8.h b/src/mame/dataeast/dec8.h index 9e81437dc6d..143738d7f17 100644 --- a/src/mame/dataeast/dec8.h +++ b/src/mame/dataeast/dec8.h @@ -32,6 +32,7 @@ class dec8_state_base : public driver_device m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundirq(*this, "soundirq"), m_soundlatch(*this, "soundlatch"), m_tilegen(*this, "tilegen%u", 1), m_mainbank(*this, "mainbank"), @@ -42,28 +43,24 @@ class dec8_state_base : public driver_device virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; - TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear); - void buffer_spriteram16_w(u8 data); - void sound_w(u8 data); void main_irq_on_w(u8 data); void main_irq_off_w(u8 data); - void main_firq_off_w(u8 data); void sub_irq_on_w(u8 data); void sub_irq_off_w(u8 data); - void sub_firq_off_w(u8 data); + void both_firq_off_w(u8 data); void flip_screen_w(u8 data); void bg_ram_w(offs_t offset, u8 data); u8 bg_ram_r(offs_t offset); void videoram_w(offs_t offset, u8 data); - void set_screen_raw_params_data_east(machine_config &config); + void set_screen_raw_params(machine_config &config); void allocate_buffered_spriteram16(); void dec8_s_map(address_map &map) ATTR_COLD; void oscar_s_map(address_map &map) ATTR_COLD; - /* devices */ + // devices required_device m_maincpu; optional_device m_subcpu; required_device m_audiocpu; @@ -71,28 +68,27 @@ class dec8_state_base : public driver_device required_device m_screen; required_device m_gfxdecode; required_device m_palette; + optional_device m_soundirq; required_device m_soundlatch; optional_device_array m_tilegen; - /* memory regions */ + // memory regions required_memory_bank m_mainbank; - /* memory pointers */ + // memory pointers required_shared_ptr m_videoram; optional_shared_ptr m_bg_ram; std::unique_ptr m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra) - /* video-related */ - tilemap_t *m_bg_tilemap = nullptr; - tilemap_t *m_fix_tilemap = nullptr; - int m_scroll[4]{}; - int m_game_uses_priority = 0; + // video-related + tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_fix_tilemap = nullptr; + int m_scroll[4]{}; + int m_game_uses_priority = 0; - /* misc */ - bool m_coin_state = false; - - emu_timer *m_m6502_timer = nullptr; + // misc + bool m_coin_state = false; }; // with I8751 MCU @@ -101,40 +97,31 @@ class dec8_mcu_state_base : public dec8_state_base protected: dec8_mcu_state_base(const machine_config &mconfig, device_type type, const char *tag) : dec8_state_base(mconfig, type, tag), - m_mcu(*this, "mcu"), - m_coin_port(*this, "I8751") + m_mcu(*this, "mcu") { } virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; - TIMER_CALLBACK_MEMBER(mcu_irq_clear); - - u8 i8751_h_r(); - u8 i8751_l_r(); - void i8751_w(offs_t offset, u8 data); + u8 i8751_hi_r(); + u8 i8751_lo_r(); + virtual void i8751_hi_w(u8 data); + void i8751_lo_w(u8 data); u8 i8751_port0_r(); void i8751_port0_w(u8 data); u8 i8751_port1_r(); void i8751_port1_w(u8 data); - void i8751_reset_w(u8 data); - - required_device m_mcu; - - /* ports */ - required_ioport m_coin_port; + optional_device m_mcu; // MCU communication - u8 m_i8751_p2 = 0; + u8 m_i8751_p2 = 0; int m_i8751_port0 = 0; int m_i8751_port1 = 0; int m_i8751_return = 0; int m_i8751_value = 0; - - emu_timer *m_i8751_timer = nullptr; }; // with unique sprite hardware @@ -147,6 +134,8 @@ class srdarwin_state : public dec8_mcu_state_base } void srdarwin(machine_config &config); + void srdarwinb(machine_config &config); + void init_srdarwinb(); protected: @@ -160,10 +149,11 @@ class srdarwin_state : public dec8_mcu_state_base TILE_GET_INFO_MEMBER(get_fix_tile_info); TILE_GET_INFO_MEMBER(get_tile_info); - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap); void main_map(address_map &map) ATTR_COLD; + void srdarwinb_map(address_map &map) ATTR_COLD; }; // with 'karnov' sprite hardware @@ -172,16 +162,56 @@ class lastmisn_state : public dec8_mcu_state_base public: lastmisn_state(const machine_config &mconfig, device_type type, const char *tag) : dec8_mcu_state_base(mconfig, type, tag), - m_spritegen_krn(*this, "spritegen_krn"), + m_spritegen_krn(*this, "spritegen_krn") + { + } + + void lastmisn(machine_config &config); + void shackled(machine_config &config); + +protected: + DECLARE_VIDEO_START(lastmisn); + u32 screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + required_device m_spritegen_krn; + +private: + void lastmisn_control_w(u8 data); + void shackled_control_w(u8 data); + void lastmisn_scrollx_w(u8 data); + void lastmisn_scrolly_w(u8 data); + void mcu_to_main_w(u8 data); + + TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows); + TILE_GET_INFO_MEMBER(get_lastmisn_tile_info); + TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info); + + DECLARE_VIDEO_START(shackled); + + u32 screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void shackled_coin_irq(int state); + + void lastmisn_map(address_map &map) ATTR_COLD; + void lastmisn_sub_map(address_map &map) ATTR_COLD; + void shackled_map(address_map &map) ATTR_COLD; + void shackled_sub_map(address_map &map) ATTR_COLD; + void ym3526_s_map(address_map &map) ATTR_COLD; +}; + +// different interrupt handling +class ghostb_state : public lastmisn_state +{ +public: + ghostb_state(const machine_config &mconfig, device_type type, const char *tag) : + lastmisn_state(mconfig, type, tag), m_nmigate(*this, "nmigate") { } void garyoret(machine_config &config); void ghostb(machine_config &config); - void lastmisn(machine_config &config); void meikyuh(machine_config &config); - void shackled(machine_config &config); void init_meikyuhbl(); @@ -189,62 +219,48 @@ class lastmisn_state : public dec8_mcu_state_base virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; + virtual void i8751_hi_w(u8 data) override; + void gondo_i8751_hi_w(u8 data); void ghostb_bank_w(u8 data); void gondo_scroll_w(offs_t offset, u8 data); - void gondo_mcu_to_main_w(u8 data); + void mcu_to_main_w(u8 data); + void sound_w(u8 data); + + TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear); + TIMER_CALLBACK_MEMBER(mcu_irq_clear); TILE_GET_INFO_MEMBER(get_gondo_fix_tile_info); TILE_GET_INFO_MEMBER(get_gondo_tile_info); - DECLARE_VIDEO_START(lastmisn); - uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void screen_vblank(int state); - required_device m_spritegen_krn; optional_device m_nmigate; private: - void lastmisn_control_w(u8 data); - void shackled_control_w(u8 data); - void lastmisn_scrollx_w(u8 data); - void lastmisn_scrolly_w(u8 data); - void shackled_mcu_to_main_w(u8 data); - - TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows); - TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info); - TILE_GET_INFO_MEMBER(get_lastmisn_tile_info); - TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info); DECLARE_VIDEO_START(garyoret); DECLARE_VIDEO_START(ghostb); - DECLARE_VIDEO_START(shackled); - uint32_t screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void shackled_coin_irq(int state); - - void lastmisn_map(address_map &map) ATTR_COLD; - void lastmisn_sub_map(address_map &map) ATTR_COLD; + void ghostb_map(address_map &map) ATTR_COLD; void garyoret_map(address_map &map) ATTR_COLD; - void meikyuh_map(address_map &map) ATTR_COLD; - void shackled_map(address_map &map) ATTR_COLD; - void shackled_sub_map(address_map &map) ATTR_COLD; - void ym3526_s_map(address_map &map) ATTR_COLD; - bool m_secclr = false; - bool m_nmi_enable = false; + bool m_secclr = false; + bool m_nmi_enable = false; + + emu_timer *m_6502_timer = nullptr; + emu_timer *m_i8751_timer = nullptr; }; // with rotary joystick -class gondo_state : public lastmisn_state +class gondo_state : public ghostb_state { public: gondo_state(const machine_config &mconfig, device_type type, const char *tag) : - lastmisn_state(mconfig, type, tag), + ghostb_state(mconfig, type, tag), m_analog_io(*this, "AN%u", 0U), m_in_io(*this, "IN%u", 0U) { @@ -258,7 +274,7 @@ class gondo_state : public lastmisn_state private: template u8 player_io_r(offs_t offset); - uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void gondo_colpri_cb(u32 &colour, u32 &pri_mask); @@ -291,8 +307,8 @@ class oscar_state : public dec8_state_base DECLARE_VIDEO_START(cobracom); DECLARE_VIDEO_START(oscar); - uint32_t screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void coin_irq(int state); void coin_clear_w(u8 data); @@ -340,8 +356,8 @@ class csilver_state : public lastmisn_state required_device m_msm; required_memory_bank m_soundbank; - int m_toggle = 0; - int m_msm5205next = 0; + int m_toggle = 0; + int m_msm5205next = 0; }; #endif // MAME_DATAEAST_DEC8_H diff --git a/src/mame/dataeast/dec8_v.cpp b/src/mame/dataeast/dec8_v.cpp index 073785c6607..42ad8f11315 100644 --- a/src/mame/dataeast/dec8_v.cpp +++ b/src/mame/dataeast/dec8_v.cpp @@ -8,9 +8,9 @@ Cobra Command: 256 colours, palette generated by ram. The Real Ghostbusters: -1 Deco VSC30 (M60348) (on DE-0259-1 sub board) -1 Deco HMC20 (M60232) (on DE-0259-1 sub board) -1 x BAC06 (on DE-0273-1 board) + 1 Deco VSC30 (M60348) (on DE-0259-1 sub board) + 1 Deco HMC20 (M60232) (on DE-0259-1 sub board) + 1 x BAC06 (on DE-0273-1 board) 1 playfield, same as above, with rowscroll 1024 colours from 2 proms. @@ -21,25 +21,24 @@ Super Real Darwin: Closer to earlier Darwin 4078 board than above games. Last Mission/Shackled: - Has 1 Deco VSC30 (M60348) (From readme file) - Has 1 Deco HMC20 (M60232) (From readme file) + Has 1 Deco VSC30 (M60348) (From readme file) + Has 1 Deco HMC20 (M60232) (From readme file) - 1 playfield - Sprite hardware same as Karnov. - (Shackled) Palettes 8-15 for tiles seem to have priority over sprites. + 1 playfield + Sprite hardware same as Karnov. + (Shackled) Palettes 8-15 for tiles seem to have priority over sprites. Gondomania: - Has two large square surface mount chips: [ DRL 40, 8053, 8649a ] - Has 1 Deco VSC30 (M60348) - Has 1 Deco HMC20 (M60232) - Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15. + Has two large square surface mount chips: [ DRL 40, 8053, 8649a ] + Has 1 Deco VSC30 (M60348) + Has 1 Deco HMC20 (M60232) + Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15. Oscar: - Uses MXC-06 custom chip for sprites. - Uses BAC-06 custom chip for background. - I can't find what makes the fix chars... - Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over -sprites. + Uses MXC-06 custom chip for sprites. + Uses BAC-06 custom chip for background. + I can't find what makes the fix chars... + Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over sprites. ***************************************************************************/ @@ -80,14 +79,14 @@ void srdarwin_state::control_w(offs_t offset, u8 data) { switch (offset) { - case 0: /* Top 3 bits - bank switch, bottom 4 - scroll MSB */ + case 0: // Top 3 bits - bank switch, bottom 4 - scroll MSB m_mainbank->set_entry((data >> 5)); m_scroll[0] = data & 0xf; - return; + break; case 1: m_scroll[1] = data; - return; + break; } } @@ -113,7 +112,7 @@ void lastmisn_state::lastmisn_control_w(u8 data) void lastmisn_state::shackled_control_w(u8 data) { - /* Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs */ + // Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs m_mainbank->set_entry(data & 0x0f); m_scroll[0] = (data >> 5) & 1; @@ -130,20 +129,20 @@ void lastmisn_state::lastmisn_scrolly_w(u8 data) m_scroll[3] = data; } -void lastmisn_state::gondo_scroll_w(offs_t offset, u8 data) +void ghostb_state::gondo_scroll_w(offs_t offset, u8 data) { switch (offset) { case 0x0: - m_scroll[1] = data; /* X LSB */ + m_scroll[1] = data; // X LSB break; case 0x8: - m_scroll[3] = data; /* Y LSB */ + m_scroll[3] = data; // Y LSB break; case 0x10: - m_scroll[0] = (data >> 0) & 1; /* Bit 0: X MSB */ - m_scroll[2] = (data >> 1) & 1; /* Bit 1: Y MSB */ - /* Bit 2 is also used in Gondo & Garyoret */ + m_scroll[0] = (data >> 0) & 1; // Bit 0: X MSB + m_scroll[2] = (data >> 1) & 1; // Bit 1: Y MSB + // Bit 2 is also used in Gondo & Garyoret break; } } @@ -154,14 +153,14 @@ void dec8_state_base::allocate_buffered_spriteram16() save_pointer(NAME(m_buffered_spriteram16), 0x800/2); } -/******************************************************************************/ +/******************************************************************************/ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap) { u8 *buffered_spriteram = m_spriteram->buffer(); - /* Sprites */ + // Sprites for (int offs = 0x200 - 4; offs >= 0; offs -= 4) { u32 pri_mask = 0; @@ -185,10 +184,11 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec { sy = 240 - sy; sx = 240 - sx; - if (fx) fx = 0; else fx = 1; + fx = !fx; sy2 = sy - 16; } - else sy2 = sy + 16; + else + sy2 = sy + 16; m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect, code, @@ -204,6 +204,7 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec } } + /******************************************************************************/ void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask) @@ -215,7 +216,7 @@ void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask) colour &= 3; } -uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0,cliprect); bool flip = m_tilegen[0]->get_flip_state(); @@ -231,8 +232,8 @@ uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 return 0; } -/******************************************************************************/ +/******************************************************************************/ TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info) { @@ -240,10 +241,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xe000) >> 13; - tileinfo.set(0, - tile & 0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(oscar_state,cobracom) @@ -256,9 +254,10 @@ VIDEO_START_MEMBER(oscar_state,cobracom) m_game_uses_priority = 0; } + /******************************************************************************/ -uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 ghostb_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_tilegen[0]->deco_bac06_pf_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0); m_spritegen_krn->draw_sprites(screen, bitmap, cliprect, m_buffered_spriteram16.get(), 0x400); @@ -266,22 +265,19 @@ uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind1 return 0; } -TILE_GET_INFO_MEMBER(lastmisn_state::get_ghostb_fix_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_ghostb_fix_tile_info) { int offs = tile_index << 1; int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xc00) >> 10; - tileinfo.set(0, - tile & 0x3ff, - color, - 0); + tileinfo.set(0, tile & 0x3ff, color, 0); } -VIDEO_START_MEMBER(lastmisn_state,ghostb) +VIDEO_START_MEMBER(ghostb_state,ghostb) { allocate_buffered_spriteram16(); - m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 0; @@ -290,6 +286,7 @@ VIDEO_START_MEMBER(lastmisn_state,ghostb) save_item(NAME(m_nmi_enable)); } + /******************************************************************************/ // we mimic the priority scheme in dec0.cpp, this was originally a bit different, so this could be wrong @@ -299,7 +296,7 @@ void oscar_state::oscar_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32 colour &= 7; } -uint32_t oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bool flip = m_tilegen[0]->get_flip_state(); m_tilegen[0]->set_flip_screen(flip); @@ -319,10 +316,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_oscar_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xf000) >> 14; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(oscar_state,oscar) @@ -337,9 +331,10 @@ VIDEO_START_MEMBER(oscar_state,oscar) m_game_uses_priority = 1; } + /******************************************************************************/ -uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8)+ m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8)+ m_scroll[3])); @@ -350,7 +345,7 @@ uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_in return 0; } -uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3])); @@ -366,7 +361,7 @@ uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_in TILEMAP_MAPPER_MEMBER(lastmisn_state::lastmisn_scan_rows) { - /* logical (col,row) -> memory offset */ + // logical (col,row) -> memory offset return ((col & 0x0f) + ((row & 0x0f) << 4)) + ((col & 0x10) << 4) + ((row & 0x10) << 5); } @@ -381,10 +376,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_tile_info) else tileinfo.category = 0; - tileinfo.set(1, - tile & 0xfff, - color, - 0); + tileinfo.set(1, tile & 0xfff, color, 0); } TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info) @@ -393,10 +385,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xc000) >> 14; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(lastmisn_state,lastmisn) @@ -420,9 +409,10 @@ VIDEO_START_MEMBER(lastmisn_state,shackled) m_game_uses_priority = 1; } + /******************************************************************************/ -uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0, cliprect); m_bg_tilemap->set_scrollx(0, (m_scroll[0] << 8) + m_scroll[1]); @@ -437,14 +427,11 @@ uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitm TILE_GET_INFO_MEMBER(srdarwin_state::get_fix_tile_info) { int tile = m_videoram[tile_index]; - int color = 0; /* ? */ + int color = 0; // ? tileinfo.category = 0; - tileinfo.set(0, - tile, - color, - 0); + tileinfo.set(0, tile, color, 0); } TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info) @@ -456,10 +443,7 @@ TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info) tile = tile & 0x3ff; bank = (tile / 0x100) + 2; - tileinfo.set(bank, - tile, - color, - 0); + tileinfo.set(bank, tile, color, 0); tileinfo.group = color; } @@ -475,6 +459,7 @@ void srdarwin_state::video_start() m_bg_tilemap->set_transmask(3, 0x0000, 0xffff); // draw as foreground only } + /******************************************************************************/ void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask) @@ -484,7 +469,7 @@ void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask) pri_mask |= GFX_PMASK_2; // behind foreground, above background } -uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0, cliprect); m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); @@ -497,7 +482,7 @@ uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &b return 0; } -uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 ghostb_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3])); @@ -509,19 +494,16 @@ uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_in return 0; } -TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_fix_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_fix_tile_info) { int offs = tile_index * 2; int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0x7000) >> 12; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } -TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_tile_info) { int offs = tile_index * 2; int tile = m_bg_ram[offs + 1] + (m_bg_ram[offs] << 8); @@ -532,10 +514,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info) else tileinfo.category = 0; - tileinfo.set(1, - tile&0xfff, - color, - 0); + tileinfo.set(1, tile & 0xfff, color, 0); } void gondo_state::video_start() @@ -545,18 +524,16 @@ void gondo_state::video_start() m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gondo_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_fix_tilemap->set_transparent_pen(0); - m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); /* Bottom 8 pens */ + m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); // Bottom 8 pens m_game_uses_priority = 0; } -VIDEO_START_MEMBER(lastmisn_state,garyoret) +VIDEO_START_MEMBER(ghostb_state,garyoret) { allocate_buffered_spriteram16(); - m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 1; } - -/******************************************************************************/ diff --git a/src/mame/dataeast/karnov.cpp b/src/mame/dataeast/karnov.cpp index c569d0ca1e7..a28ebe84dc1 100644 --- a/src/mame/dataeast/karnov.cpp +++ b/src/mame/dataeast/karnov.cpp @@ -87,6 +87,7 @@ Stephh's notes (based on the games M68000 code and some tests) : #include "sound/ymopn.h" #include "sound/ymopl.h" #include "video/bufsprite.h" + #include "deckarn.h" #include "decrmc3.h" #include "screen.h" @@ -96,7 +97,6 @@ Stephh's notes (based on the games M68000 code and some tests) : namespace { - /************************************* * * Type definitions @@ -106,8 +106,8 @@ namespace { class karnov_state : public driver_device { public: - karnov_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + karnov_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_mcu(*this, "mcu"), @@ -169,6 +169,7 @@ class karnov_state : public driver_device void karnovjbl_sound_map(address_map &map) ATTR_COLD; void screen_vblank(int state); + // protection mcu void mcu_coin_irq(int state); void mcu_ack_w(uint16_t data); @@ -234,28 +235,29 @@ void karnov_state::mcu_p2_w(uint8_t data) // ------1- secreq ack // -------0 cinclr - if (BIT(m_mcu_p2, 0) == 1 && BIT(data, 0) == 0) + const uint8_t fall = ~data & m_mcu_p2; + m_mcu_p2 = data; + + if (BIT(fall, 0)) m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE); - if (BIT(m_mcu_p2, 1) == 1 && BIT(data, 1) == 0) + if (BIT(fall, 1)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - if (BIT(m_mcu_p2, 2) == 1 && BIT(data, 2) == 0) + if (BIT(fall, 2)) m_maincpu->set_input_line(6, ASSERT_LINE); - if (BIT(m_mcu_p2, 4) == 1 && BIT(data, 4) == 0) + if (BIT(fall, 4)) m_mcu_p0 = m_maincpu_to_mcu >> 0; - if (BIT(m_mcu_p2, 5) == 1 && BIT(data, 5) == 0) + if (BIT(fall, 5)) m_mcu_p1 = m_maincpu_to_mcu >> 8; - if (BIT(m_mcu_p2, 6) == 1 && BIT(data, 6) == 0) + if (BIT(fall, 6)) m_mcu_to_maincpu = (m_mcu_to_maincpu & 0xff00) | (m_mcu_p0 << 0); - if (BIT(m_mcu_p2, 7) == 1 && BIT(data, 7) == 0) + if (BIT(fall, 7)) m_mcu_to_maincpu = (m_mcu_to_maincpu & 0x00ff) | (m_mcu_p1 << 8); - - m_mcu_p2 = data; } // i8031 for bootleg emulation @@ -294,10 +296,13 @@ void karnov_state::mcu_data_h_w(uint8_t data) void karnov_state::mcubl_p1_w(uint8_t data) { - if (BIT(m_mcu_p1, 0) == 1 && BIT(data, 0) == 0) + const uint8_t fall = ~data & m_mcu_p1; + m_mcu_p1 = data; + + if (BIT(fall, 0)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - if (BIT(m_mcu_p1, 1) == 1 && BIT(data, 1) == 0) + if (BIT(fall, 1)) m_maincpu->set_input_line(6, ASSERT_LINE); m_mcu_p1 = data; @@ -749,9 +754,9 @@ void karnov_state::karnov(machine_config &config) I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set([this](){ return m_mcu_p0; }); - m_mcu->port_out_cb<0>().set([this](u8 data){ m_mcu_p0 = data; }); + m_mcu->port_out_cb<0>().set([this](uint8_t data){ m_mcu_p0 = data; }); m_mcu->port_in_cb<1>().set([this](){ return m_mcu_p1; }); - m_mcu->port_out_cb<1>().set([this](u8 data){ m_mcu_p1 = data; }); + m_mcu->port_out_cb<1>().set([this](uint8_t data){ m_mcu_p1 = data; }); m_mcu->port_out_cb<2>().set(FUNC(karnov_state::mcu_p2_w)); m_mcu->port_in_cb<3>().set_ioport("COIN"); @@ -1251,13 +1256,13 @@ ROM_END * *************************************/ -GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Chelnov - Atomic Runner (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Atomic Runner Chelnov (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dynax/ddenlovr.cpp b/src/mame/dynax/ddenlovr.cpp index 1513496218b..81b897701ed 100644 --- a/src/mame/dynax/ddenlovr.cpp +++ b/src/mame/dynax/ddenlovr.cpp @@ -7772,7 +7772,7 @@ static INPUT_PORTS_START( mjflove ) PORT_DIPSETTING( 0x00, DEF_STR(On) ) // テストモード PORT_START("DSW1") // IN11 - DSW1 - PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) // 常時OFF (manual appears to be corrected to indicate that this switch should be ON) + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) // 常時OFF (recommended settings in manual show this ON, possibly a misprint) PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW2:2" ) // 常時OFF PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW2:3" ) // 常時OFF PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW2:4" ) // 常時OFF diff --git a/src/mame/dynax/dynax.cpp b/src/mame/dynax/dynax.cpp index d76a247c7ed..beef10513ce 100644 --- a/src/mame/dynax/dynax.cpp +++ b/src/mame/dynax/dynax.cpp @@ -2182,7 +2182,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjdialq2 ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage ) ) PORT_DIPLOCATION("SW. 1:1,2") // プレイ料金 + PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW. 1:1,2") // プレイ料金 PORT_DIPSETTING( 0x00, DEF_STR(3C_1C) ) // 3コイン 1プレー PORT_DIPSETTING( 0x02, DEF_STR(2C_1C) ) // 2コイン 1プレー PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) ) // 1コイン 1プレー @@ -2640,93 +2640,60 @@ INPUT_PORTS_END static INPUT_PORTS_START( nanajign ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x38, "0" ) - PORT_DIPSETTING( 0x30, "1" ) - PORT_DIPSETTING( 0x28, "2" ) - PORT_DIPSETTING( 0x20, "3" ) - PORT_DIPSETTING( 0x18, "4" ) - PORT_DIPSETTING( 0x10, "5" ) - PORT_DIPSETTING( 0x08, "6" ) - PORT_DIPSETTING( 0x00, "7" ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) //? - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW. 2:1,2") // プレイ料金 + PORT_DIPSETTING( 0x00, DEF_STR(3C_1C) ) // 3コイン 1プレー + PORT_DIPSETTING( 0x02, DEF_STR(2C_1C) ) // 2コイン 1プレー + PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) ) // 1コイン 1プレー + PORT_DIPSETTING( 0x01, DEF_STR(1C_2C) ) // 1コイン 2プレー + PORT_DIPNAME( 0x04, 0x00, "Allow Pinfu with Tsumo") PORT_DIPLOCATION("SW. 2:3") // ルール ピンフ・ツモ複合 + PORT_DIPSETTING( 0x04, DEF_STR(No) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) // 有り + PORT_DIPNAME( 0x38, 0x20, DEF_STR(Difficulty) ) PORT_DIPLOCATION("SW. 2:4,5,6") // 難易度 コンピューター + PORT_DIPSETTING( 0x38, "1 (Weak)" ) //   弱い  (1) + PORT_DIPSETTING( 0x30, "2" ) //       (2) + PORT_DIPSETTING( 0x28, "3" ) //       (3) + PORT_DIPSETTING( 0x20, "4 (Normal)" ) // 標準    (4) + PORT_DIPSETTING( 0x18, "5" ) //       (5) + PORT_DIPSETTING( 0x10, "6" ) //       (6) + PORT_DIPSETTING( 0x08, "7" ) //       (7) + PORT_DIPSETTING( 0x00, "8 (Strong)" ) //   強い  (8) + PORT_DIPNAME( 0x40, 0x40, "Auto Reach" ) PORT_DIPLOCATION("SW. 2:7") // オート・ツモ + PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り + PORT_DIPNAME( 0x80, 0x80, DEF_STR(Flip_Screen) ) PORT_DIPLOCATION("SW. 2:8") // モニター画面反転 + PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 正 + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 逆 PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Service_Mode ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds ) ) PORT_DIPLOCATION("SW. 3:1") // デモ・サウンド + PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW. 3:2" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW. 3:3" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW. 3:4" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW. 3:5" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW. 3:6" ) // OFF固定 + PORT_DIPNAME( 0x40, 0x40, "Computer Hand Always Open" ) PORT_DIPLOCATION("SW. 3:7") // OFF固定 + PORT_DIPSETTING( 0x40, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR(Service_Mode) ) PORT_DIPLOCATION("SW. 3:8") // OFF固定 + PORT_DIPSETTING( 0x80, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_INCLUDE( dynax_mahjong_keys ) + PORT_INCLUDE( mahjong_matrix_2p_ff ) - PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_START("DSW2") // not shown in test mode or manual + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index 98b5d315cfb..1487d453893 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -58,6 +58,9 @@ Year + Game Board(s) CPU Company Not - mjtensin: random crashes, interrupts related +- janoh, janohb: they do the same bank switching calls as mjsiyoub and kiwako/jongkyo.cpp + but there's no ROM to map there. Missing on the dumped PCBs or something else going on? + Stephh's notes (based on the games Z80 code and some tests) : 1) 'royalmah' @@ -4456,6 +4459,17 @@ ROM_START( janyoup2a ) ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) ROM_END +ROM_START( janyoup2702 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.11a", 0x0000, 0x2000, CRC(d51d8525) SHA1(46a181141c6a64114bf025e6ea5f2e2e23f8ce62) ) + ROM_LOAD( "2.10a", 0x2000, 0x2000, CRC(324426d4) SHA1(409244c8458d9bafa325746c37de9e7b955b3787) ) + ROM_LOAD( "3.8a", 0x4000, 0x2000, CRC(cc4fed44) SHA1(11362654f8a40f594f90b84abf24e624c3e83eb0) ) + ROM_LOAD( "4.7a", 0x6000, 0x1000, CRC(377b8ce9) SHA1(a5efc517ae975e54af5325b8b3f4867e9f449d4c) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + ROM_START( seljan ) // Z80A + HD46505SP + AY891X (a sticker covers the chip type) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "2", 0x0000, 0x2000, CRC(8d26d334) SHA1(4ac0f0961f666954caf59336f8389312db9dc263) ) // ok @@ -5490,7 +5504,21 @@ ROM_START( janoh ) ROM_LOAD( "rom7.p6", 0x6000, 0x1000, NO_DUMP ) ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) + ROM_LOAD( "janoh.color", 0x00, 0x20, NO_DUMP ) +ROM_END + +ROM_START( janohb ) // same set was also found with the first 6 ROMs combined in 3 bigger capacity ROMs + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "jo1.1", 0x0000, 0x1000, CRC(8fc19963) SHA1(309e941c059a97b117090fd9dd69a00031aa6109) ) // "1984 JAN OH" + ROM_LOAD( "jo2.2", 0x1000, 0x1000, CRC(13b44a7d) SHA1(30ed6bda1597fb123e0e6104ef87cef48f3039a3) ) + ROM_LOAD( "jo3.3", 0x2000, 0x1000, CRC(6efcaf89) SHA1(e7a8035b1ecd468a6054926a263f22741635e0df) ) // "JANOH TOAPLAN 84" + ROM_LOAD( "jo4.4", 0x3000, 0x1000, CRC(9186f02c) SHA1(b7dc2d6c19e67dd3f841cbb56df9589e3e6941f7) ) + ROM_LOAD( "jo5.5", 0x4000, 0x1000, CRC(3c8d1f2a) SHA1(9e05f310a6d8a485a1005fc35ac2e3a79410a507) ) + ROM_LOAD( "jo6.6", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) + ROM_LOAD( "jo7.7", 0x6000, 0x1000, CRC(774cb324) SHA1(930d6643fcd7e479a68811e775144d46f0183636) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "janoh.color", 0x00, 0x20, CRC(74a53e94) SHA1(ca9114bd9b2b07f5abe82616b41ae9fdb9537a4f) ) ROM_END /*************************************************************************** @@ -5896,14 +5924,12 @@ ROM_START( jangtaku ) ROM_LOAD( "82s123a.6k", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) ) ROM_END -ROM_START( rkjanoh2 ) +ROM_START( rkjanoh2 ) // dump confirmed from 2 PCBs, only difference being 0x4b instead of 0x46 at 0x2a22 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pf_1", 0x000000, 0x001000, CRC(582e7eda) SHA1(96578b6142051d9452f23c8c1b674e2d8a4c3b62) ) ROM_LOAD( "pf_2", 0x001000, 0x001000, CRC(49e7dc40) SHA1(d6232a82b6927c79dd47884e5e2a6589c5524424) ) ROM_LOAD( "pf_3_1", 0x002000, 0x001000, CRC(a1fdc929) SHA1(27cab4da2365bcf311d7f00d75e8db150183b108) ) ROM_LOAD( "pf_4l", 0x003000, 0x001000, CRC(c9ccdfa0) SHA1(ce6f2df7fb6739ddf0529bcae0596e4593ecc3e0) ) - //ROM_LOAD( "pf_4_fewest", 0x003000, 0x001000, CRC(9a1650a0) SHA1(2da5957879d9f207721fc2f0d63dccc32850cbe2) ) - //ROM_LOAD( "pf_4_middle", 0x003000, 0x001000, CRC(b1a721d8) SHA1(de24ec4bac7ec761c7b25a7ba62b850006444bbc) ) ROM_LOAD( "pf_5", 0x004000, 0x001000, CRC(8a858464) SHA1(55c71ce1c30e908dfc8c21237256dfbb75c55363) ) ROM_LOAD( "pf_6", 0x005000, 0x001000, CRC(5b649918) SHA1(191a221a515c261d90d7432443a7fbc8da71e7ac) ) ROM_LOAD( "pf_7", 0x006000, 0x001000, CRC(c4fdd2ac) SHA1(76c5645534b87dde87acfb4140d0f3ba18c95cd2) ) @@ -6245,6 +6271,7 @@ GAME( 1984?, chalgirl, 0, chalgirl, royalmah, royalmah_prgbank_state, GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, empty_init, ROT0, "Jem / Dyna Corp", "Sel-Jan (Japan)", 0 ) GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 ) GAME( 1983, janyoup2a, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983, no title screen)",0 ) +GAME( 1983, janyoup2702, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.02, July 1 1983)",0 ) GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_prgbank_state, init_tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17 GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 1)", 0 ) // MT #05392 GAME( 1981, janputera, janputer, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Ever Denshi)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 2)", 0 ) @@ -6252,6 +6279,7 @@ GAME( 1990, akamj, 0, ippatsu, ippatsu, royalmah_state, GAME( 1984, rkjanoh2, 0, rkjanoh2, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "SNK / Dyna Corp", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // never seems to set the palette bank? GAME( 1984, janoh, 0, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING ) GAME( 1984, janoha, janoh, janoha, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete? +GAME( 1984, janohb, janoh, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 3)", MACHINE_NOT_WORKING ) GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 ) GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 ) diff --git a/src/mame/fidelity/desdis.cpp b/src/mame/fidelity/desdis.cpp index 44a40c11b41..6655c8d2769 100644 --- a/src/mame/fidelity/desdis.cpp +++ b/src/mame/fidelity/desdis.cpp @@ -38,7 +38,7 @@ Designer Mach IV Master 2325 (model 6129) overview: #include "emu.h" #include "cpu/m6502/r65c02.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m68000/m68000.h" #include "cpu/m68000/m68020.h" #include "machine/clock.h" @@ -286,7 +286,7 @@ INPUT_PORTS_END void desdis_state::fdes2100d(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6 + W65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6 m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz diff --git a/src/mame/fidelity/elite.cpp b/src/mame/fidelity/elite.cpp index a0684166201..6c57bca896a 100644 --- a/src/mame/fidelity/elite.cpp +++ b/src/mame/fidelity/elite.cpp @@ -82,7 +82,6 @@ alternate view (see video options). The EAG conversion is a cloneset of feag. #include "bus/generic/carts.h" #include "bus/generic/slot.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/i8255.h" diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index 3b2c0e63ec6..18d60b5ff61 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -177,8 +177,8 @@ CPU D6 to W: (model 6092, tied to VCC otherwise) #include "emu.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" -#include "cpu/m6502/m65sc02.h" #include "machine/clock.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -460,7 +460,7 @@ INPUT_PORTS_END void excel_state::fexcel(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator + G65SC102(config, m_maincpu, 12_MHz_XTAL); // G65SC102P-3, 12.0M ceramic resonator (divided by 4 internally) m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz diff --git a/src/mame/funtech/supracan.cpp b/src/mame/funtech/supracan.cpp index c6cfe2861ba..0ab7d7b2044 100644 --- a/src/mame/funtech/supracan.cpp +++ b/src/mame/funtech/supracan.cpp @@ -68,7 +68,7 @@ Super A'Can (c) 1995 Funtech #include "bus/supracan/rom.h" #include "bus/supracan/slot.h" #include "cpu/m68000/m68000.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "emupal.h" #include "screen.h" @@ -2394,7 +2394,7 @@ void supracan_state::supracan(machine_config &config) // TODO: Verify type and actual clock // /4 makes speedyd to fail booting - M65C02(config, m_soundcpu, U13_CLOCK / 6 / 2); + W65C02(config, m_soundcpu, U13_CLOCK / 6 / 2); m_soundcpu->set_addrmap(AS_PROGRAM, &supracan_state::sound_map); config.set_perfect_quantum(m_soundcpu); diff --git a/src/mame/funworld/4roses.cpp b/src/mame/funworld/4roses.cpp index 180825bc93b..571834f7bc4 100644 --- a/src/mame/funworld/4roses.cpp +++ b/src/mame/funworld/4roses.cpp @@ -195,7 +195,7 @@ #include "emu.h" #include "funworld.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6821pia.h" #include "machine/nvram.h" #include "sound/ay8910.h" @@ -460,7 +460,7 @@ GFXDECODE_END void _4roses_state::_4roses(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, MASTER_CLOCK/8); // 2MHz, guess + W65C02(config, m_maincpu, MASTER_CLOCK/8); // 2MHz, guess m_maincpu->set_addrmap(AS_PROGRAM, &_4roses_state::_4roses_map); m_maincpu->set_addrmap(AS_OPCODES, &_4roses_state::_4roses_opcodes_map); diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp index 6cb43963af1..6ad4b425322 100644 --- a/src/mame/funworld/funworld.cpp +++ b/src/mame/funworld/funworld.cpp @@ -755,7 +755,7 @@ #include "emu.h" #include "funworld.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/6821pia.h" #include "machine/nvram.h" @@ -3306,7 +3306,7 @@ void lunapark_state::machine_reset() void funworld_state::fw1stpal(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -3470,7 +3470,7 @@ void intergames_state::intrgmes(machine_config &config) { fw1stpal(config); - M65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &intergames_state::intergames_map); //m_maincpu->set_periodic_int(FUNC(intergames_state::nmi_line_pulse), attotime::from_hz(60)); diff --git a/src/mame/funworld/snookr10.cpp b/src/mame/funworld/snookr10.cpp index ef67c73c607..83b28abddda 100644 --- a/src/mame/funworld/snookr10.cpp +++ b/src/mame/funworld/snookr10.cpp @@ -619,7 +619,7 @@ #include "emu.h" #include "snookr10.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/nvram.h" #include "sound/okim6295.h" #include "screen.h" @@ -1037,7 +1037,7 @@ GFXDECODE_END void snookr10_state::snookr10(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) + G65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::snookr10_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/hegenerglaser/academy.cpp b/src/mame/hegenerglaser/academy.cpp index 09c9faddda9..d57c0456a76 100644 --- a/src/mame/hegenerglaser/academy.cpp +++ b/src/mame/hegenerglaser/academy.cpp @@ -27,7 +27,7 @@ Academy hardware. Much unused data remains, and the TRAIN button doesn't work. #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" #include "video/pwm.h" @@ -130,7 +130,7 @@ INPUT_PORTS_END void academy_state::academy(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 4.9152_MHz_XTAL); + W65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &academy_state::main_map); const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); diff --git a/src/mame/hegenerglaser/modena.cpp b/src/mame/hegenerglaser/modena.cpp index 99e1d944a3e..4d74595400c 100644 --- a/src/mame/hegenerglaser/modena.cpp +++ b/src/mame/hegenerglaser/modena.cpp @@ -20,7 +20,7 @@ Hardware notes: #include "mmdisplay1.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/clock.h" #include "machine/nvram.h" #include "machine/sensorboard.h" @@ -170,7 +170,7 @@ INPUT_PORTS_END void modena_state::modena(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 4.194304_MHz_XTAL); + W65C02(config, m_maincpu, 4.194304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &modena_state::modena_mem); clock_device &nmi_clock(CLOCK(config, "nmi_clock", 4.194304_MHz_XTAL / 0x2000)); // active for 975us diff --git a/src/mame/hegenerglaser/mondial.cpp b/src/mame/hegenerglaser/mondial.cpp index 0395f4fde7c..291f1b0b8b3 100644 --- a/src/mame/hegenerglaser/mondial.cpp +++ b/src/mame/hegenerglaser/mondial.cpp @@ -23,7 +23,7 @@ Hardware notes: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/sensorboard.h" #include "sound/beep.h" #include "video/pwm.h" @@ -166,7 +166,7 @@ INPUT_PORTS_END void mondial_state::mondial(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2'000'000); + G65SC02(config, m_maincpu, 2'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &mondial_state::mondial_mem); const attotime irq_period = attotime::from_hz(2'000'000 / 0x1000); diff --git a/src/mame/hegenerglaser/mondial2.cpp b/src/mame/hegenerglaser/mondial2.cpp index 5b77c18e8fd..5ea45de82dc 100644 --- a/src/mame/hegenerglaser/mondial2.cpp +++ b/src/mame/hegenerglaser/mondial2.cpp @@ -15,7 +15,7 @@ Hardware notes: #include "emu.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/sensorboard.h" #include "sound/dac.h" #include "video/pwm.h" @@ -175,7 +175,7 @@ INPUT_PORTS_END void mondial2_state::mondial2(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2_MHz_XTAL); + G65SC02(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mondial2_state::mondial2_mem); const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x1000); diff --git a/src/mame/hegenerglaser/montec.cpp b/src/mame/hegenerglaser/montec.cpp index dc2d72890b0..9904ebb0bb7 100644 --- a/src/mame/hegenerglaser/montec.cpp +++ b/src/mame/hegenerglaser/montec.cpp @@ -23,8 +23,8 @@ Hardware notes: #include "mmboard.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" #include "sound/dac.h" @@ -224,7 +224,7 @@ void montec_state::montec4le(machine_config &config) montec4(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 8_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 8_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &montec_state::montec_mem); const attotime irq_period = attotime::from_hz(8_MHz_XTAL / 0x4000); diff --git a/src/mame/hegenerglaser/polgar.cpp b/src/mame/hegenerglaser/polgar.cpp index 4739bd9790c..c49d5b2e098 100644 --- a/src/mame/hegenerglaser/polgar.cpp +++ b/src/mame/hegenerglaser/polgar.cpp @@ -19,8 +19,8 @@ The 10MHz version has a W65C02P-8 @ 9.83MHz. #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" @@ -134,7 +134,7 @@ void polgar_state::polgar10(machine_config &config) polgar(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem); const attotime nmi_period = attotime::from_hz(9.8304_MHz_XTAL / 0x2000); diff --git a/src/mame/hegenerglaser/risc.cpp b/src/mame/hegenerglaser/risc.cpp index 8e81bc87fab..da1bc98c863 100644 --- a/src/mame/hegenerglaser/risc.cpp +++ b/src/mame/hegenerglaser/risc.cpp @@ -23,7 +23,7 @@ Hardware notes: #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/74259.h" #include "machine/chessmachine.h" #include "machine/nvram.h" @@ -145,7 +145,7 @@ INPUT_PORTS_END void risc_state::mrisc(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 10_MHz_XTAL / 4); + G65SC02(config, m_maincpu, 10_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &risc_state::mrisc_mem); const attotime irq_period = attotime::from_hz(10_MHz_XTAL / 0x4000); diff --git a/src/mame/hegenerglaser/smondial.cpp b/src/mame/hegenerglaser/smondial.cpp index 7b26c98209e..e50e8b40ad3 100644 --- a/src/mame/hegenerglaser/smondial.cpp +++ b/src/mame/hegenerglaser/smondial.cpp @@ -23,7 +23,7 @@ Undocumented buttons: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/74259.h" #include "machine/nvram.h" @@ -279,7 +279,7 @@ INPUT_PORTS_END void smondialb_state::smondialb(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 4_MHz_XTAL); + G65SC02(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondialb_mem); const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index 05a7db7ca9f..42fd86917c1 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -18581,10 +18581,10 @@ ROM_START( eldoraddob ) // String "DYNA ELD3 V2.0D" in program ROM, DYNA D9105B ROM_REGION( 0x100000, "gfx", 0 ) ROM_LOAD( "tc538000p-dyna dm9106.h2", 0x000000, 0x100000, CRC(fa84c372) SHA1(a71e57e76321b7ebb16933d9bc983b9160995b4a) ) - ROM_REGION( 0x300, "proms", 0 ) // not dumped for this set, but GFX ROM matches the one for eldoraddo - ROM_LOAD( "mb7114.e8", 0x000, 0x100, BAD_DUMP CRC(fa274678) SHA1(6712cb1f7ead1a7aa703ec799e7199c33ace857c) ) - ROM_LOAD( "mb7114.e10", 0x100, 0x100, BAD_DUMP CRC(e58877ea) SHA1(30fa873fc05d91610ef68eef54b78f2c7301a62a) ) - ROM_LOAD( "mb7114.e12", 0x200, 0x100, BAD_DUMP CRC(781b2842) SHA1(566667d4f81e93b29bb01dbc51bf144c02dff75d) ) + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "e14", 0x000, 0x100, CRC(fa274678) SHA1(6712cb1f7ead1a7aa703ec799e7199c33ace857c) ) + ROM_LOAD( "e15", 0x100, 0x100, CRC(e58877ea) SHA1(30fa873fc05d91610ef68eef54b78f2c7301a62a) ) + ROM_LOAD( "e16", 0x200, 0x100, CRC(781b2842) SHA1(566667d4f81e93b29bb01dbc51bf144c02dff75d) ) ROM_REGION( 0x400, "plds", 0 ) // available as brute-forced dumps, need to be verified and converted ROM_LOAD( "pal16l8.d13", 0x000, 0x104, NO_DUMP ) diff --git a/src/mame/layout/moog_source.lay b/src/mame/layout/moog_source.lay new file mode 100644 index 00000000000..26a33ffbc92 --- /dev/null +++ b/src/mame/layout/moog_source.lay @@ -0,0 +1,1178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4cc93d55fc4..22fe3726ce1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17648,6 +17648,7 @@ ippatsu // 01? (c) 1986 Dyna Electronics jangtaku // (c) 1986 Dyna Computer janoh // (c) 1984 Toaplan janoha // (c) 1984 Toaplan +janohb // (c) 1984 Toaplan janptr96 // "503" (c) 1996 Dynax janptrsp // "511" (c) 1997 Dynax janputer // bootleg @@ -17655,6 +17656,7 @@ janputera // bootleg jansou // (c) 1985 Dyna jansoua // (c) 1985 Dyna janyoup2 // Falcon bootleg +janyoup2702 // janyoup2a // Cosmo jongshin // (c) 1986 Dyna majrjh // "105" (c) 1996 Dynax @@ -30633,6 +30635,7 @@ goldnpkd // Bootleg goldnpke // Intercoast (bootleg) goldnpkf // Intercoast (bootleg) goldnpkg // Bootleg +goldnpkh // (c) 1981 Bonanza goldnpkr // (c) 1981 Bonanza goodluck // Unknown icproul // bootleg? @@ -30669,6 +30672,8 @@ potnpkrk // Bootleg potnpkrl // Bootleg potnpkrm // Bootleg potnpkrn // Bootleg +potnpkro // Bootleg +potnpkrp // Bootleg pottnpkr // Bootleg royale // Unknown royalea // Unknown @@ -32671,6 +32676,9 @@ sshot // (c) 1979 Model Racing @source:modelracing/subhuntr.cpp subhuntr // 1979 Model Racing +@source:moog/source.cpp +moogsource // Moog Source + @source:morrow/microdec.cpp md2 // md3 // diff --git a/src/mame/midcoin/24cdjuke.cpp b/src/mame/midcoin/24cdjuke.cpp index b262a4a85e0..e81b0a2be20 100644 --- a/src/mame/midcoin/24cdjuke.cpp +++ b/src/mame/midcoin/24cdjuke.cpp @@ -48,8 +48,7 @@ QTY Type Notes This is the PCB for one of the first ever CD based Juke Box, made in 1988 by Midcoin, some info here: -http://www.tilt.it/deb/i-midcoin.html - +https://www.tilt.it/deb/midcoin-en.html */ diff --git a/src/mame/misc/cvs.cpp b/src/mame/misc/cvs.cpp index af43705fe68..b8e39f0392c 100644 --- a/src/mame/misc/cvs.cpp +++ b/src/mame/misc/cvs.cpp @@ -16,9 +16,10 @@ Additional work by Couriersud, 2009 This worked fine in an older version of MAME since maincpu was twice slower. - diggerc loses speech sound effects (walking, digging) after killing an enemy. - Emulate protection properly in later games (reads area 0x73fx). -- The board most probably has discrete circuits. Possibly 2 beepers (current - frequency is completely guessed), and a pitch sweep sound. No schematics - are available, or even video references. +- The board has discrete sound circuits, see sh_trigger_w: 0x1884 enables an + 8038CCJD, 0x1885 connects to it too. 0x1886 produces a high-pitched whistle, + and 0x1887 produces a low thud sound. The current implementation with the + beeper devices is wrong, but better than nothing. - Improve starfield: density, blink rate, x repeat of 240, and the checkerboard pattern (fast forward MAME to see) are all correct, the RNG is not right? @@ -97,9 +98,9 @@ ADR14 ADR13 | READ | WRITE | D7 = BULLET AND CP1 OR CP2 | ------------+-------------------------------------------+------------------------------- -Main 2650 runs at 1.78MHz (14.318/8). +Main 2650A runs at 1.78MHz (14.318/8). -Sound board 2650s run at 0.89MHz (14.318/16). Also seen with a 15.625MHz XTAL, +Sound board 2650As run at 0.89MHz (14.318/16). Also seen with a 15.625MHz XTAL, which would result in slightly higher DAC sound pitch. Video timing is via a Signetics 2621 (PAL). @@ -148,9 +149,9 @@ class cvs_state : public driver_device , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") - , m_dac2(*this, "dac2") + , m_dac(*this, "dac%u", 0) , m_beep(*this, "beep%u", 0) - , m_tms5110(*this, "tms") + , m_tms5100(*this, "tms") , m_in(*this, "IN%u", 0U) , m_dsw(*this, "DSW%u", 1U) , m_lamps(*this, "lamp%u", 1U) @@ -160,7 +161,7 @@ class cvs_state : public driver_device , m_character_ram(*this, "character_ram", 3 * 0x800, ENDIANNESS_BIG) , m_bullet_ram(*this, "bullet_ram") , m_4_bit_dac_data(*this, "4bit_dac") - , m_tms5110_ctl_data(*this, "tms5110_ctl") + , m_tms5100_ctl_data(*this, "tms5100_ctl") , m_sh_trigger(*this, "sh_trigger") , m_speech_data_rom(*this, "speechdata") , m_ram_view(*this, "video_color_ram_view") @@ -194,9 +195,9 @@ class cvs_state : public driver_device required_device m_gfxdecode; required_device m_screen; required_device m_palette; - required_device m_dac2; - required_device_array m_beep; - required_device m_tms5110; + required_device_array m_dac; + required_device_array m_beep; + required_device m_tms5100; required_ioport_array<4> m_in; required_ioport_array<3> m_dsw; output_finder<2> m_lamps; @@ -208,7 +209,7 @@ class cvs_state : public driver_device memory_share_creator m_character_ram; // only half is used, but we can use the same gfx_layout like this required_shared_ptr m_bullet_ram; required_shared_ptr m_4_bit_dac_data; - required_shared_ptr m_tms5110_ctl_data; + required_shared_ptr m_tms5100_ctl_data; required_shared_ptr m_sh_trigger; required_region_ptr m_speech_data_rom; @@ -263,6 +264,7 @@ class cvs_state : public driver_device void palette_w(offs_t offset, u8 data) { m_palette_ram[offset & 0x0f] = data; } u8 input_r(offs_t offset); + void _8_bit_dac_data_w(u8 data); void _4_bit_dac_data_w(offs_t offset, u8 data); void sh_trigger_w(offs_t offset, u8 data); @@ -272,8 +274,8 @@ class cvs_state : public driver_device u8 audio_command_r(); void audio_command_w_sync(s32 param); void audio_command_w(u8 data); - void tms5110_ctl_w(offs_t offset, u8 data); - void tms5110_pdc_w(offs_t offset, u8 data); + void tms5100_ctl_w(offs_t offset, u8 data); + void tms5100_pdc_w(offs_t offset, u8 data); int speech_rom_read_bit(); u8 superbik_prot_r(); @@ -641,10 +643,18 @@ u8 cvs_state::input_r(offs_t offset) /************************************* * - * 4-bit DAC + * Sound hardware * *************************************/ +void cvs_state::_8_bit_dac_data_w(u8 data) +{ + m_dac[0]->write(data); + + // data also goes to 8038 oscillator + m_beep[0]->set_clock(data * 4); +} + void cvs_state::_4_bit_dac_data_w(offs_t offset, u8 data) { data = BIT(data, 7); @@ -662,7 +672,7 @@ void cvs_state::_4_bit_dac_data_w(offs_t offset, u8 data) (m_4_bit_dac_data[3] << 3); // output - m_dac2->write(dac_value); + m_dac[1]->write(dac_value); } void cvs_state::sh_trigger_w(offs_t offset, u8 data) @@ -671,7 +681,7 @@ void cvs_state::sh_trigger_w(offs_t offset, u8 data) * offset 2 is used in darkwar, spacefrt, 8ball, superbik, raiders * offset 3 is used in cosmos, darkwar, superbik, raiders * - * offset 1 is only used inadvertedly by logger + * offset 1 is only used inadvertedly(?) by logger */ data &= 1; @@ -682,8 +692,7 @@ void cvs_state::sh_trigger_w(offs_t offset, u8 data) m_sh_trigger[offset] = data; } - if (offset == 2 || offset == 3) - m_beep[offset & 1]->set_state(data); + m_beep[offset]->set_state(data); } @@ -711,30 +720,30 @@ void cvs_state::speech_rom_address_hi_w(u8 data) u8 cvs_state::speech_command_r() { // this was by observation on board, bit 7 is TMS status (active LO) - return ((m_tms5110->ctl_r() ^ 1) << 7) | (m_audio_command & 0x7f); + return ((m_tms5100->ctl_r() ^ 1) << 7) | (m_audio_command & 0x7f); } -void cvs_state::tms5110_ctl_w(offs_t offset, u8 data) +void cvs_state::tms5100_ctl_w(offs_t offset, u8 data) { // offset 0: CS? - m_tms5110_ctl_data[offset] = (~data >> 7) & 0x01; + m_tms5100_ctl_data[offset] = (~data >> 7) & 0x01; u8 const ctl = 0 | // CTL1 - (m_tms5110_ctl_data[1] << 1) | // CTL2 - (m_tms5110_ctl_data[2] << 2) | // CTL4 - (m_tms5110_ctl_data[1] << 3); // CTL8 + (m_tms5100_ctl_data[1] << 1) | // CTL2 + (m_tms5100_ctl_data[2] << 2) | // CTL4 + (m_tms5100_ctl_data[1] << 3); // CTL8 LOGMASKED(LOG_SPEECH, "CVS: Speech CTL = %04x %02x %02x\n", ctl, offset, data); - m_tms5110->ctl_w(ctl); + m_tms5100->ctl_w(ctl); } -void cvs_state::tms5110_pdc_w(offs_t offset, u8 data) +void cvs_state::tms5100_pdc_w(offs_t offset, u8 data) { u8 const out = ((~data) >> 7) & 1; LOGMASKED(LOG_SPEECH, "CVS: Speech PDC = %02x %02x\n", offset, out); - m_tms5110->pdc_w(out); + m_tms5100->pdc_w(out); } @@ -839,7 +848,7 @@ void cvs_state::audio_cpu_map(address_map &map) map(0x0000, 0x0fff).rom(); map(0x1000, 0x107f).ram(); map(0x1800, 0x1800).r(FUNC(cvs_state::audio_command_r)); - map(0x1840, 0x1840).w("dac1", FUNC(dac_byte_interface::data_w)); + map(0x1840, 0x1840).w(FUNC(cvs_state::_8_bit_dac_data_w)); map(0x1880, 0x1883).w(FUNC(cvs_state::_4_bit_dac_data_w)).share(m_4_bit_dac_data); map(0x1884, 0x1887).w(FUNC(cvs_state::sh_trigger_w)).share(m_sh_trigger); } @@ -859,8 +868,8 @@ void cvs_state::speech_cpu_map(address_map &map) map(0x1d00, 0x1d00).w(FUNC(cvs_state::speech_rom_address_lo_w)); map(0x1d40, 0x1d40).w(FUNC(cvs_state::speech_rom_address_hi_w)); map(0x1d80, 0x1d80).r(FUNC(cvs_state::speech_command_r)); - map(0x1ddc, 0x1dde).w(FUNC(cvs_state::tms5110_ctl_w)).share(m_tms5110_ctl_data); - map(0x1ddf, 0x1ddf).w(FUNC(cvs_state::tms5110_pdc_w)); + map(0x1ddc, 0x1dde).w(FUNC(cvs_state::tms5100_ctl_w)).share(m_tms5100_ctl_data); + map(0x1ddf, 0x1ddf).w(FUNC(cvs_state::tms5100_pdc_w)); } @@ -1331,7 +1340,7 @@ void cvs_state::cvs(machine_config &config) S2650(config, m_speechcpu, 14.318181_MHz_XTAL / 16); m_speechcpu->set_addrmap(AS_PROGRAM, &cvs_state::speech_cpu_map); - m_speechcpu->sense_handler().set("tms", FUNC(tms5110_device::romclk_hack_r)); + m_speechcpu->sense_handler().set("tms", FUNC(tms5100_device::romclk_hack_r)); // video hardware GFXDECODE(config, m_gfxdecode, m_palette, gfx_cvs); @@ -1361,15 +1370,17 @@ void cvs_state::cvs(machine_config &config) // audio hardware SPEAKER(config, "speaker").front_center(); - DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // unknown DAC - DAC_4BIT_R2R(config, m_dac2, 0).add_route(ALL_OUTPUTS, "speaker", 0.20); // unknown DAC + DAC_8BIT_R2R(config, m_dac[0], 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // unknown DAC + DAC_4BIT_R2R(config, m_dac[1], 0).add_route(ALL_OUTPUTS, "speaker", 0.20); // unknown DAC - BEEP(config, m_beep[0], 600).add_route(ALL_OUTPUTS, "speaker", 0.15); // placeholder - BEEP(config, m_beep[1], 150).add_route(ALL_OUTPUTS, "speaker", 0.15); // " + BEEP(config, m_beep[0], 0).add_route(ALL_OUTPUTS, "speaker", 0.10); // placeholder + BEEP(config, m_beep[1], 0).add_route(ALL_OUTPUTS, "speaker", 0.10); // " + BEEP(config, m_beep[2], 600).add_route(ALL_OUTPUTS, "speaker", 0.15); // " + BEEP(config, m_beep[3], 150).add_route(ALL_OUTPUTS, "speaker", 0.15); // " - TMS5100(config, m_tms5110, 640_kHz_XTAL); - m_tms5110->data().set(FUNC(cvs_state::speech_rom_read_bit)); - m_tms5110->add_route(ALL_OUTPUTS, "speaker", 0.30); + TMS5100(config, m_tms5100, 640_kHz_XTAL); + m_tms5100->data().set(FUNC(cvs_state::speech_rom_read_bit)); + m_tms5100->add_route(ALL_OUTPUTS, "speaker", 0.30); } diff --git a/src/mame/misc/goldnpkr.cpp b/src/mame/misc/goldnpkr.cpp index 3edac386368..d25e5793337 100644 --- a/src/mame/misc/goldnpkr.cpp +++ b/src/mame/misc/goldnpkr.cpp @@ -17,6 +17,7 @@ * Golden Poker Double Up (bootleg, set 3), 1983, Intercoast (bootleg). * Golden Poker Double Up (bootleg, set 4), 1983, Intercoast (bootleg). * Golden Poker Double Up (bootleg, set 5), 198?, Bootleg. + * Golden Poker Double Up (tearoom*sara hack), 1981, Bonanza Enterprises, Ltd. * Videotron Poker (cards selector, set 1), 198?, Unknown. * Videotron Poker (cards selector, set 2), 198?, Unknown. * Videotron Poker (normal controls), 198?, Unknown. @@ -33,8 +34,10 @@ * Jack Potten's Poker (set 11, German, W.W.), 198?, Bootleg. * Jack Potten's Poker (set 12, no Double-Up), 198?, Bootleg. * Jack Potten's Poker (set 13, ICP-1 PCB), 198?, Unknown. - * Jack Potten's Poker (set 14, ICP-1 PCB), 198?, Bootleg (PED). - * Jack Potten's Poker (w/fever, ICP-1 PCB), 198?, Bootleg. + * Jack Potten's Poker (set 14, ICP-1 PCB), 198?, Bootleg. + * Jack Potten's Poker (set 15, w/fever, ICP-1 PCB), 198?, Bootleg (PED). + * Jack Potten's Poker (set 16, ICP-1 PCB), 1987, Bootleg (PED). + * Jack Potten's Poker (set 17, ICP-1 PCB), 1987, Bootleg (PED). * Jack Potten's Poker (NGold, set 1), 198?, Unknown. * Jack Potten's Poker (NGold, set 2), 198?, Unknown. * Jack Potten's Poker (NGold, set 3), 198?, Unknown. @@ -165,9 +168,6 @@ * Black jack (Olympic Games, v5.04, upgrade for WC), 1989, Olympic Video Gaming PTY LTD. - Total: 153 sets. - - ************************************************************************************ @@ -982,7 +982,7 @@ TODO: - Missing PIA connections. - - Final cleanup and split the driver. + - Final cleanup. ************************************************************************************/ @@ -4537,6 +4537,25 @@ static INPUT_PORTS_START( glfever ) INPUT_PORTS_END +static INPUT_PORTS_START( potnpkro ) // ICP-1 w/daughterboard + PORT_INCLUDE( goldnpkr ) + + PORT_MODIFY("SW1") + PORT_DIPNAME( 0x10, 0x00, "Coinage Sensitivity" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + /********************************************* * Graphics Layouts * *********************************************/ @@ -5576,6 +5595,30 @@ ROM_START( goldnpkg ) ROM_END +/* Bonanza Golden Poker Double Up. + Original hardware, with tearoom*sara text hack. + + You can play 1-50 credits. + So the hackers removed the "PLAY 1 TO 50" string to put "TEAROOM*SARA" instead. +*/ +ROM_START( goldnpkh ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "spf.12a", 0x4000, 0x4000, CRC(22963c83) SHA1(ac9e66f0c548011aac88b9f32a924995ba3651e4) ) + + ROM_REGION( 0x6000, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x4000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "u38_5a.bin", 0x4000, 0x2000, CRC(32705e1d) SHA1(84f9305af38179985e0224ae2ea54c01dfef6e12) ) // char ROM + + ROM_REGION( 0x6000, "gfx2", 0 ) + ROM_LOAD( "u43_2a.bin", 0x0000, 0x2000, CRC(10b34856) SHA1(52e4cc81b36b4c807b1d4471c0f7bea66108d3fd) ) // cards deck gfx, bitplane1 + ROM_LOAD( "u40_4a.bin", 0x2000, 0x2000, CRC(5fc965ef) SHA1(d9ecd7e9b4915750400e76ca604bec8152df1fe4) ) // cards deck gfx, bitplane2 + ROM_COPY( "gfx1", 0x4800, 0x4000, 0x0800 ) // cards deck gfx, bitplane3. found in the 2nd quarter of the char rom + + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "tbp24s10n.7d", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) +ROM_END + + /* Videotron Poker. Alternative controls set, with cards selector... */ @@ -6005,6 +6048,58 @@ ROM_START( potnpkrn ) ROM_END +/* + Golden/Potten's Poker + 1986 0415 VER 7.0 1987 06-03 BY PED. + + ICP-1 hardware with modifications. + The first set has bookkeeping with DSW test. + The second set is a hack of the first with unknown mods. + +*/ +ROM_START( potnpkro ) // ICP-1 wires hack set. + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "7.16a", 0x6000, 0x1000, CRC(2dc5e372) SHA1(70a251efe879bc1122baa78984251041a355c895) ) + ROM_LOAD( "x.17a", 0x7000, 0x1000, CRC(1694a0d8) SHA1(bb1132d1e75347ad5156d2b3866aad255f7d53ca) ) + + ROM_REGION( 0x1800, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x1000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "0.9a", 0x1000, 0x0800, CRC(1090e7f0) SHA1(26a7fc8853debb9a759811d7fee39410614c3895) ) // char ROM + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x1800, "gfx2", 0 ) + ROM_LOAD( "7.4a", 0x0000, 0x0800, CRC(f2f94661) SHA1(f37f7c0dff680fd02897dae64e13e297d0fdb3e7) ) // cards deck gfx, bitplane1 + ROM_LOAD( "8.6a", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) // cards deck gfx, bitplane2 + ROM_LOAD( "9.7a", 0x1000, 0x0800, CRC(907b21df) SHA1(a6a3968b2ee23ef15ecc8c3b2afbe1b2cc5f42e7) ) // cards deck gfx, bitplane3 + + ROM_REGION( 0x0100, "proms", 0 ) // same as common golden poker + ROM_LOAD( "tbp24s10n_wh.bin", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) +ROM_END + +ROM_START( potnpkrp ) // ICP-1 PROM mod set. + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "6.16a", 0x6000, 0x1000, CRC(2dc5e372) SHA1(70a251efe879bc1122baa78984251041a355c895) ) + ROM_LOAD( "95_09_hn71_7.17a", 0x7000, 0x1000, CRC(2353317a) SHA1(18bf8cfe30aaa4b05207cc250ec1c024bc19ed56) ) + + ROM_REGION( 0x1800, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x1000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "4.9a", 0x1000, 0x0800, CRC(1c080c35) SHA1(cb3ed14973029b3891635a4b05d8d2b9dae8aea8) ) // char ROM + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x1800, "gfx2", 0 ) + ROM_LOAD( "1.4a", 0x0000, 0x0800, CRC(f2f94661) SHA1(f37f7c0dff680fd02897dae64e13e297d0fdb3e7) ) // cards deck gfx, bitplane1 + ROM_LOAD( "2.6a", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) // cards deck gfx, bitplane2 + ROM_LOAD( "3.7a", 0x1000, 0x0800, CRC(77143e12) SHA1(b459f704d89be1dd64de3514c0adc6a5d5364749) ) // cards deck gfx, bitplane3 + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x0100, "proms", 0 ) // high addressing pin tied to GND. the unused second half turns the background color to magenta. + ROM_LOAD( "tbp24s10n_pm.bin", 0x0000, 0x0080, CRC(1e79c53d) SHA1(8aa5ae1b82c6e8277427a53a54718f72737e4ec3) ) + ROM_IGNORE( 0x0080) + ROM_RELOAD( 0x0080, 0x0080) + ROM_IGNORE( 0x0080) +ROM_END + + ROM_START( goodluck ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "goodluck_glh6b.bin", 0x0000, 0x8000, CRC(2cfa4a2c) SHA1(720e2900f3a0ef2632aa201a63b5eba0570e6aa3) ) @@ -11266,6 +11361,7 @@ ROM_START( jkrbonus ) // PC0-009-31 PCB with sub PCB with CPU, its ROM and RAM, ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set ROM_END + /*************************************************************** Casino Poker. @@ -13075,6 +13171,7 @@ GAMEL( 198?, goldnpkd, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init GAMEL( 1983, goldnpke, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Intercoast (bootleg)", "Golden Poker Double Up (bootleg, set 3)", 0, layout_goldnpkr ) GAMEL( 1983, goldnpkf, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Intercoast (bootleg)", "Golden Poker Double Up (bootleg, set 4)", 0, layout_goldnpkr ) GAMEL( 1983, goldnpkg, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Golden Poker Double Up (bootleg, set 5)", 0, layout_goldnpkr ) +GAMEL( 1983, goldnpkh, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Bonanza Enterprises, Ltd", "Golden Poker Double Up (tearoom*sara hack)", 0, layout_goldnpkr ) GAMEL( 198?, videtron, 0, goldnpkr, videtron, goldnpkr_state, empty_init, ROT0, "", "Videotron Poker (cards selector, set 1)", 0, layout_goldnpkr ) GAMEL( 198?, videtron2, videtron, goldnpkr, videtron, goldnpkr_state, empty_init, ROT0, "", "Videotron Poker (cards selector, set 2)", 0, layout_goldnpkr ) @@ -13093,8 +13190,10 @@ GAMEL( 198?, potnpkri, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init GAMEL( 198?, potnpkrj, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 11, German, W.W.)", 0, layout_goldnpkr ) GAMEL( 198?, potnpkrk, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 12, no Double-Up)", 0, layout_goldnpkr ) GAMEL( 198?, potnpkrl, pottnpkr, pottnpkr, potnpkra, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (set 13, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. -GAMEL( 1988, potnpkrm, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 14, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. -GAME ( 198?, potnpkrn, pottnpkr, glfever, glfever, goldnpkr_state, init_glfev, ROT0, "bootleg", "Jack Potten's Poker (w/fever, ICP-1 PCB)", 0 ) +GAMEL( 1988, potnpkrm, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 14, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. +GAME ( 198?, potnpkrn, pottnpkr, glfever, glfever, goldnpkr_state, init_glfev, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 15, w/fever, ICP-1 PCB)", 0 ) +GAMEL( 1987, potnpkro, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 16, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with mods, 1986 0415 VER 7.0 1987 06-03 BY PED. (wires hack) +GAMEL( 1987, potnpkrp, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 17, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with mods, 1986 0415 VER 7.0 1987 06-03 BY PED. (PROM mod) GAMEL( 198?, ngold, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 1)", 0, layout_goldnpkr ) GAMEL( 198?, ngolda, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 2)", 0, layout_goldnpkr ) GAMEL( 198?, ngoldb, pottnpkr, pottnpkr, ngoldb, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 3)", 0, layout_goldnpkr ) diff --git a/src/mame/misc/rgum.cpp b/src/mame/misc/rgum.cpp index 1cda780c567..1c568ff648b 100644 --- a/src/mame/misc/rgum.cpp +++ b/src/mame/misc/rgum.cpp @@ -23,7 +23,7 @@ Main components */ #include "emu.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/i8255.h" #include "machine/nvram.h" #include "sound/ay8910.h" @@ -289,7 +289,7 @@ GFXDECODE_END void rgum_state::rgum(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 24_MHz_XTAL / 16); // divisor not verified + W65C02(config, m_maincpu, 24_MHz_XTAL / 16); // divisor not verified m_maincpu->set_addrmap(AS_PROGRAM, &rgum_state::main_map); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MK48Z08 diff --git a/src/mame/moog/source.cpp b/src/mame/moog/source.cpp new file mode 100644 index 00000000000..490ffa7235b --- /dev/null +++ b/src/mame/moog/source.cpp @@ -0,0 +1,839 @@ +// license:BSD-3-Clause +// copyright-holders:m1macrophage + +/* +The Moog Source is a CPU-controlled analog monosynth. It lacks knobs and +sliders. Sound parameters are modified by pressing a button for a specific +parameter and using the encoder wheel to modify it. + +The architecture of this synthesizer is typical of digitally-controlled analog +synthesizers. The firmware is responsible for: +* Scanning and reacting to membrane button presses. This is a typical key + matrix setup (see buttons_latch_w(), buttons_a_r(), buttons_b_r()). +* Detecting which key is pressed on the keyboard (see get_keyboard_v()). +* Setting Control Voltages (aka CVs). Detailed info in cv_w(). +* Configuring audio and modulation routing through 4016 switches. See + output_latch_a_w(), output_latch_b_w(). +* Controlling the Loudness and Filter envelope generators (EGs). Starts the + Attack phase when a key is pressed, detects when an EG peaks and transitions + it to the Decay phase, and transitions EGs to the Release phase when a key is + released. +* Controlling the LED displays and cassette I/O. + +The 16 sound programs are stored in battery-backed NVRAM, and can also be stored +to (and loaded from) a cassette. + +This driver is based on the Source's schematics. Most of the circuitry +relevant to this driver is on Board 3 (digital board). Component designations in +comments refer to Board 3, unless otherwise noted. + +This driver attempts to accurately emulate the digital and digital-analog +interface of the synthesizer, including all analog behavior that is relevant to +the firmware. There are still some TODOs left to fully achieve this goal. There +is no attempt to emulate the analogue audio circuit. The driver includes an +interactive layout, and is intended as an educational tool. + +TODO: +- Emulation of MOD input to the CPU. +- Emulation of envelope generator timing. +- Cassette input/output. +*/ + +#include "emu.h" + +#include "cpu/z80/z80.h" +#include "machine/nvram.h" +#include "machine/rescap.h" + +#include "moog_source.lh" + +#define LOG_CV (1U << 1) +#define LOG_BUTTONS (1U << 2) +#define LOG_ENCODER (1U << 3) +#define LOG_KEYBOARD (1U << 4) +#define LOG_CV_KEYBOARD_APPROX (1U << 5) +#define VERBOSE (LOG_GENERAL|LOG_CV) +#define LOG_OUTPUT_FUNC osd_printf_info +#include "logmacro.h" + +namespace +{ + +constexpr const char MAINCPU_TAG[] = "z80"; +constexpr const char NVRAM_TAG[] = "nvram"; + +class source_state : public driver_device +{ +public: + source_state(const machine_config& mconfig, device_type type, + const char* tag) ATTR_COLD + : driver_device(mconfig, type, tag) + , m_maincpu(*this, MAINCPU_TAG) + , m_octave_io(*this, "octave_buttons") + , m_button_a_io(*this, "button_group_a_%d", 0U) + , m_button_b_io(*this, "button_group_b_%d", 0U) + , m_keyboard_io(*this, "keyboard_oct_%d", 1U) + , m_encoder(*this, "incremental_controller") + , m_trigger_io(*this, "trigger_in") + , m_contour_peaked_io(*this, "contour_peaked") + , m_octave_led(*this, "octave_led_%d") + , m_program_display(*this, "program_digit_%d") + , m_edit_display(*this, "edit_digit_%d") + , m_edit_led(*this, "edit_led") + , m_kb_track(*this, "kb_track") + , m_osc_waveform(*this, "osc_%d_waveform", 1U) + , m_sync(*this, "sync") + , m_lfo_to_filter(*this, "lfo_to_filter") + , m_lfo_to_osc(*this, "lfo_to_osc") + , m_lfo_shape(*this, "lfo_shape") + , m_trigger_out(*this, "trigger_out") + , m_cv(static_cast(CV::SIZE), -1) + {} + + void source(machine_config& config) ATTR_COLD; + + void machine_start() override ATTR_COLD; + void machine_reset() override ATTR_COLD; + + DECLARE_INPUT_CHANGED_MEMBER(octave_button_pressed); + DECLARE_INPUT_CHANGED_MEMBER(encoder_moved); + +private: + void update_octave_leds(); + + void edit_latch_w(u8 data); + void output_latch_a_w(u8 data); + void output_latch_b_w(u8 data); + void buttons_latch_w(u8 data); + void program_latch_w(u8 data); + void cassette_w(u8 data); + void cv_w(offs_t offset, u8 data); + + float get_keyboard_v() const; + u8 keyboard_r(); + u8 buttons_r(const required_ioport_array<6>& button_io, const char* name) const; + u8 buttons_a_r(); + u8 buttons_b_r(); + u8 encoder_r(); + + void memory_map(address_map& map) ATTR_COLD; + void io_map(address_map& map) ATTR_COLD; + + required_device m_maincpu; + required_ioport m_octave_io; + required_ioport_array<6> m_button_a_io; + required_ioport_array<6> m_button_b_io; + required_ioport_array<4> m_keyboard_io; + required_ioport m_encoder; + required_ioport m_trigger_io; + required_ioport m_contour_peaked_io; + + output_finder<2> m_octave_led; + output_finder<2> m_program_display; + output_finder<2> m_edit_display; + output_finder<> m_edit_led; + output_finder<> m_kb_track; + output_finder<2> m_osc_waveform; + output_finder<> m_sync; + output_finder<> m_lfo_to_filter; + output_finder<> m_lfo_to_osc; + output_finder<> m_lfo_shape; + output_finder<> m_trigger_out; + + bool m_octave_hi = true; // `true` due to internal pullups of 74LS367 and 7404. + u8 m_button_row_latch = 0xff; + bool m_encoder_incr = false; + + // All MUXes are CD4051B. + // Component designations refer to board 2 (synthesizer board). + // The enum names match the CV labels in the schematic, but some + // abbreviations are expanded. + enum class CV : int + { + // U2 + CUTOFF_COARSE = 0, + AUTO_TUNE_2, + INT_COARSE, + CUTOFF_FINE, + PW_1, + PW_2, + INT_FINE, + OCT_2, + + // U4 + FILTER_CONTOUR_LEVEL, + OCT_1, + GLIDE, + LOUDNESS_COUNTOUR_LEVEL, + OSC_2, + NOISE, + UNUSED, // Sampled in (C22, U10A), but not used. + OSC_1, + + // U5 + EMPHASIS, + NOT_CONNECTED, // U5, Y1 (pin 14) is not connected. + AMT, // Filter contout amount. + RATE, // Modulation (LFO) rate. + KEYBOARD_APPROX, + KEYBOARD_CV, + FILTER_CONTOUR_RATE, + LOUDNESS_CONTOUR_RATE, + + SIZE + }; + std::vector m_cv; + + static constexpr const float MAX_CV = 10; // In Volts. + static constexpr const u8 PATTERNS_7447[16] = + { + 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, + 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0x00, + }; +}; + +void source_state::update_octave_leds() +{ + m_octave_led[0] = m_octave_hi ? 0 : 1; + m_octave_led[1] = m_octave_hi ? 1 : 0; +} + +void source_state::edit_latch_w(u8 data) +{ + // U3 (74LS378) 0-4 (D0-D4) -> U3 (7447, Board 4) A-D -> U4 (MAN 3610A). + // U3 4-5 not connected. + m_edit_display[0] = PATTERNS_7447[data & 0x0f]; + + // U4 (74LS378) 0-4 (D4-D7)-> U5 (7447, Board 4) A-D -> U6 (MAN 3610A). + m_edit_display[1] = PATTERNS_7447[(data >> 4) & 0x0f]; + + // U4 (74LS378) 5, 6 (D0, D7) -> J1-5 (cassette interface, "cassette out"). + // TODO: Add cassette support. +} + +void source_state::output_latch_a_w(u8 data) +{ + // Latch is U11, 74LS378 (Board 3). 6-bit latch, top 2 bits ignored. + // All component designations are for Board 2. + + // Keyboard tracking for filter, bits D0 and D1. + const u8 kb_track = data & 0x03; + if (kb_track == 1) + { + // 1/2 tracking. U36C on and U36B off. + // Keyboard CV mixed in via 342Kohm resistance (2 x 121K: R142, R143). + m_kb_track = 1; + } + else if (kb_track == 2 || kb_track == 3) + { + // Full tracking. + // Only U36B on (kb_track == 2), or both U36B and U36C on + // (kb_track == 3). + // In both cases, keyboard CV is mixed in via a 121KOhm resistor (R142). + m_kb_track = 2; + } + else + { + // Both U36B and U36B are off. Keyboard CV does not make it through. + m_kb_track = 0; + } + + // Osc 2 waveform, bits D2 and D3. + // 0 - Sawtooth (U32A closed, U32B open, U32C closed, U32D closed). + // 1 - Triangle (U32A closed, U32B closed, U32D open, U32C open). + // 2 - Square/pulse (U32A open, U32B closed, U32C open, U32D closed). + // 3 - Mix of Triange and Square/Pulse (probably unused) + // (U32A open, U32B closed, U32C open, U32D open). + m_osc_waveform[1] = (data >> 2) & 0x03; + + // Osc 1 waveform, bits D4 and D5. + // Same swithc configuration as above, but replace U32 with U23. + m_osc_waveform[0] = (data >> 4) & 0x03; +} + +void source_state::output_latch_b_w(u8 data) +{ + // Latch is U12, 74LS378 (Board 3). 6-bit latch, top 2 bits ignored. + + // D0 -> S21-16 -> Sync. Synchronizes osc 2 to osc 1. + // When sync is on, the pitch wheel is only routed to Osc 2. + // When 1, Q2 is "off", U18B and C are off, U18A on, pitch wheel routed + // to osc 2 only. + // When 0, Q2 is "on", U18B is on (routes pitch wheel to central pitch), + // U18C is "on", which turns off U18A (disables direct route to osc 2). + m_sync = BIT(data, 0); + + // D1 -> inverted by U2A (Board 3), and connected to cathode of led. + // The led is active low, but the inverter presents it as active high. + m_edit_led = BIT(data, 1); + + // D2 -> J2 S-TRIG OUT, inverted via Q1, R21, R20 (Board 3). + m_trigger_out = BIT(data, 2) ? 0 : 1; + + // Component designations below refer to Board 2. + + // D3 -> S22-4 -> U46A (inverted and level-shifted to -5-5V through 4007B + // and R213): mod to filter. + m_lfo_to_filter = BIT(data, 3) ? 0 : 1; + + // D4 -> S22-3 -> U18D (inverted and level-shifted to -5-5V through 4007B + // and R61): mod to osc. + m_lfo_to_osc = BIT(data, 4) ? 0 : 1; + + // D5 -> S22-2 (level shifted & inverted to -5-5V through 4007B and R214) + // 0 - Triange (U46C on, U46B on, turns off U46D). -1.5V - 1.5V. + // 1 - Square (U46C off, U46B off, U46D on/off controlled by square + // wave. Translates -14V - 14V wave to 0-5V. + m_lfo_shape = BIT(data, 5); +} + +void source_state::buttons_latch_w(u8 data) +{ + // U5, 74LS378. All output connected to diode cathodes. + // Connected to "Membrane switch interface", P1, "top left". + // (D0, D1, D2, D3, D4, D5) -> (P1-1, P1-5, P1-6, P1-2, P1-4, P1-3) + m_button_row_latch = data & 0x3f; // Only D0-D5 connected. +} + +void source_state::program_latch_w(u8 data) +{ + // U1, 74LS378 + // D0-D3 -> U1 (7447, Board 4) A-D -> right digit of MAN6630. + // D4 -> inverted (U2E, U2D, 7404) -> left 1/2 digit of MAN6630 + // (inputs a and b). + // D5 -> inverted (U2A, 7404) -> HOLD ->"plus" sign of MAN6630. + // Note that MAN6630 has 3 "digits". From right to left: + // - 7-segment digit. + // - 2-segment digit (can represent a "1"). + // - "+" sign. + // Here, we simulate this with two 7-segment digits. + + m_program_display[0] = PATTERNS_7447[data & 0x0f]; + + u8 digit1 = PATTERNS_7447[15]; // All segments off. + if (BIT(data, 4)) + { + digit1 |= PATTERNS_7447[1]; // Turn on segments for "1". + } + if (BIT(data, 5)) + { + // This enables two segments on the MAN6630 that display a "+" symbol. + // Since 7-segment displays don't support that, enable the segment for + // "-" instead. + digit1 |= 0x40; + } + m_program_display[1] = digit1; +} + +void source_state::cassette_w(u8 data) +{ + // Z80 D4 controlls a normally-open relay (K1) through U22A (74LS74). + // A low D4 powers the relay, which connects cassette jack J1-1 to J1-3. + // TODO: Add cassette support. +} + +void source_state::cv_w(offs_t offset, u8 data) +{ + // CVs are generated by writing to an AM6012 12-bit DAC, but only 8 bits are + // used: the 8 MSBs are connected to the data bus, and the 4 LSBs are + // grounded. The DAC is mapped to the Z80's port IO space. + // The DAC and support circuitry convert the 8 bit data (0-255) to a voltage + // (0-10V). That voltage is routed to the Sample & Hold circuit (a + // capacitor and a buffer) of a specific CV, controlled by A0-A4. + + // Interesting tidbit: In most designs, the DAC inputs are + // latched. In the Source, the DAC inputs are directly connected to the data + // bus. This means the DAC output voltage is constantly changing, in an + // attempt to track the data bus. + + if (!machine().side_effects_disabled()) + { + // U14, U15B, U16D,E and U17D generate WAIT states whenever there is + // an IO write. This lasts 32 cycles. + // For the first 8 cycles, no MUX is selected, to allow the DAC to + // settle. Then a specific channel in a specific MUX is enabled (based + // on the port address), and there's a WAIT for another 24 cycles, to + // allow the selected Sample & Hold capacitor to (dis)charge. + m_maincpu->adjust_icount(-(8 + 24)); + } + + // Z80 A0,A1,A2 connected to the A,B,C inputs (respectively) of all MUXes. + // Z80 A3,A4 select which MUX to enable via decoder 74LS155. + // The fourth output of the decoder is not connected. There are 3 muxes. + + if (offset >= static_cast(CV::SIZE)) + return; + + const float cv = MAX_CV * data / 255.0f; + if (cv == m_cv.at(offset)) + return; + m_cv.at(offset) = cv; + + if (offset == static_cast(CV::KEYBOARD_APPROX)) + LOGMASKED(LOG_CV_KEYBOARD_APPROX, + "CV %d: 0x%02x, %f\n", offset, data, cv); + else + LOGMASKED(LOG_CV, "CV %d: 0x%02x, %f\n", offset, data, cv); +} + +float source_state::get_keyboard_v() const +{ + // *** Detect which key is pressed. + + static constexpr const int OCTAVES = 4; + static constexpr const int KEYS_PER_OCTAVE = 12; + static constexpr const int KEYS = 3 * KEYS_PER_OCTAVE + 1; + static constexpr const int OCTAVE_KEYS[4] = + { + KEYS_PER_OCTAVE, KEYS_PER_OCTAVE, KEYS_PER_OCTAVE, 1 + }; + + // The circuit is structure such that the lowest note has priority. + // Scan from lowest, and exit the loop once a pressed key is found. + int pressed_key = -1; + for (int octave = 0; octave < OCTAVES; ++octave) + { + const u32 keys = m_keyboard_io[octave]->read(); + for (int key = 0; key < OCTAVE_KEYS[octave]; ++key) + { + if (BIT(keys, key)) + { + pressed_key = octave * KEYS_PER_OCTAVE + key; + break; + } + } + if (pressed_key >= 0) + break; + } + + // *** Convert pressed key to a voltage. + + static constexpr const float KEYBOARD_VREF = 8.24; // From schematic. + static constexpr const float RKEY = RES_R(100); + static constexpr const float R74 = RES_R(150); + static constexpr const float R76 = RES_K(220); + static constexpr const float R77 = RES_K(2.2); + + float kb_voltage = 0; + if (pressed_key >= 0) + { + // Pressing a key forms a voltage devider consisting of the lower and + // upper resistances as shown below. The resulting voltage is further + // reduced by another voltage divider (R77-R76) before being fed to + // comparator U31A. + const float lower_r = R74 + pressed_key * RKEY; + const float upper_r = (KEYS - pressed_key - 1) * RKEY; + const float v = KEYBOARD_VREF * RES_VOLTAGE_DIVIDER(upper_r, lower_r); + kb_voltage = v * RES_VOLTAGE_DIVIDER(R77, R76); + LOGMASKED(LOG_KEYBOARD, "Key %d - %f - %f\n", pressed_key, v, + kb_voltage); + } + return kb_voltage; +} + +u8 source_state::keyboard_r() +{ + // U32: 74LS367 + // U18: 74LS125 + + // D0 <- U32, KEYBD. + // Output of comparator U31A. Compares the "KYBD APPROX" CV with the voltage + // generated by the keyboad (see get_keyboard_r()). This bit is used by a + // successive approximation algorithm to detect the keyboard voltage. The + // firmware does a binary search by checking the result of the comparison + // and updating the "KYBD APPROX" CV accordingly. + // TODO: Compute keyboard voltage in an input callback. + static constexpr const int KB_APPROX_INDEX = + static_cast(CV::KEYBOARD_APPROX); + const u8 d0 = (get_keyboard_v() >= m_cv.at(KB_APPROX_INDEX)) ? 1 : 0; + + // D1, D2: Loudness and Filter contour peaks. + // D1 <- U32, FILT CNTR <- S22-11: 0 when envolope reaches almost 10V + // (with some hysteresis). + // D2 <- U32, LOUD CNTR <- S22-10: 0 when envelope reaches almost 10V + // (with some hysteresis). + // TODO: Treating as inputs for now, until contour timing is emulated. + const u8 contour_peaked = m_contour_peaked_io->read(); + const u8 d1 = BIT(contour_peaked, 0); + const u8 d2 = BIT(contour_peaked, 1); + + // D3: Octave. <- U32, OCT (P34-2 (octave 0 button) and P34-1 (octave +1 + // button) via U2B and U2C). + const u8 d3 = m_octave_hi ? 1 : 0; + + // D4 <- J1-4, CASSETTE IN (through "cassette return" circuit and U18D). + const u8 d4 = 1; // TODO: Implement. + + // D5 <- U32, MOD (->P34-5) 1 when s22-5 low, otherwise 0. + const u8 d5 = 0; // TODO: Implement. + + // D6 <- J2-5, S-TRIG IN, through U18C, pulled up by R23 and protected by + // R22. + const u8 d6 = BIT(m_trigger_io->read(), 0); + + // D7 <- U32, N.C. <- 1 (data bus is pulled high). + const u8 d7 = 1; + + return (d7 << 7) | (d6 << 6) | (d5 << 5) | (d4 << 4) | + (d3 << 3) | (d2 << 2) | (d1 << 1) | d0; +} + +u8 source_state::buttons_r( + const required_ioport_array<6>& button_io, const char* name) const +{ + // Button presses are active low, but the result is inverted by a CD4502. + // So they look active high to the firmware. + u8 pressed = 0x00; + for (int i = 0; i < 6; ++i) + { + if (!BIT(m_button_row_latch, i)) + pressed |= static_cast(~button_io[i]->read() & 0xff); + } + // Bits 6 and 7 are not connected to the button input and pulled high. + pressed |= 0xc0; + if (pressed & 0x3f) + { + LOGMASKED(LOG_BUTTONS, "Button read %s - %02X: %02X\n", + name, m_button_row_latch, pressed); + } + return pressed; +} + +u8 source_state::buttons_a_r() +{ + // U8, CD4502B (connceted to "Membrane switch interface", P2, "Bottom left") + // (D0, D1, D2, D3, D4, D5) <- (P2-1, P2-3, P2-2, P2-6, P2-5, P2-4) + return buttons_r(m_button_a_io, "A"); +} + +u8 source_state::buttons_b_r() +{ + // U9, CD4502B (connected to "Membrane switch interface", P3, "Bottom right") + // (D0, D1, D2, D3, D4, D5, D6, D7) <- (P3-2, P3-1, P3-3, P3-6, P3-5, P3-4) + return buttons_r(m_button_b_io, "B"); +} + +u8 source_state::encoder_r() +{ + // D0 contains whether the encoder was last incremented or decremented. + LOGMASKED(LOG_ENCODER, + "Encoder read: %d - %d\n", m_encoder->read(), m_encoder_incr); + // Reading the encoder's state also clears /INT (via U21B, U7A and U15A). + if (!machine().side_effects_disabled()) + m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + return m_encoder_incr ? 1 : 0; +} + +void source_state::memory_map(address_map& map) +{ + // Address decoding done through U26, 74LS138, E1=E2=0, E3=1, + // A0-A2 = Z80 A13-A15. + // Z80 A12 is not connected. + // The signal names below (e.g. "ROM /EN", "RAM /EN") match those in the + // schematics. + + // ROM /EN: 0x0000-0x1fff. + // 1 x 2532 (4K, 8bit) ROM, U23. + map(0x0000, 0x0fff).mirror(0x1000).rom(); + // 2 x 74LS378. Z80 and latch data lines are not connected in order. + map(0x0000, 0x0000).mirror(0x1fff).w(FUNC(source_state::edit_latch_w)); + + // RAM /EN: 0x2000-0x3fff. + // 2 x 6514 (1K, 4bit) NVRAMs. U27: D0-D3, U28: D4-D7. + // Z80 A0-A1 -> RAM A0-A1. Z80 A2-A8 -> RAM A3-A9. Z80 A9 -> RAM A2. + map(0x2000, 0x23ff).mirror(0x1c00).ram().share(NVRAM_TAG); + + // OUTPUT /EN: 0x4000-0x5fff. + // 2 output latches (74LS378, U11 and U12) enabled by 74LS155 (U13B), + // with Z80 A3-A4 as inputs to A0-A1. O2 and O3 are not connected, so + // A4=1 does not enable anything. + map(0x4000, 0x4000).mirror(0x1fe7).w(FUNC(source_state::output_latch_a_w)); + map(0x4008, 0x4008).mirror(0x1fe7).w(FUNC(source_state::output_latch_b_w)); + + // KYBD /EN: 0x6000-0x7fff. + // 74LS367, U32 + map(0x6000, 0x6000).mirror(0x1fff).r(FUNC(source_state::keyboard_r)); + // 74LS74, U22A. D <- Z80 D4. + map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(source_state::cassette_w)); + + // FRONT PANEL /EN1: 0x8000-0x9fff. + // CD4502, U8. + map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(source_state::buttons_a_r)); + // 74LS378, U5. + map(0x8000, 0x8000).mirror(0x1fff).w(FUNC(source_state::buttons_latch_w)); + + // FRONT PANEL /EN2: 0xa000-0xbfff. + // CD4502, U9 + map(0xa000, 0xa000).mirror(0x1fff).r(FUNC(source_state::buttons_b_r)); + + // DISPLAY /EN: 0xc000-0xdfff. + // 74LS378, U1. + map(0xc000, 0xc000).mirror(0x1fff).w(FUNC(source_state::program_latch_w)); + + // CNTRL /EN: 0xe000-0xffff. (typo in schematic: 0xefff-0xffff). + map(0xe000, 0xe000).mirror(0x1fff).r(FUNC(source_state::encoder_r)); +} + +void source_state::io_map(address_map& map) +{ + map.global_mask(0xff); + map(0x00, 0x1f).mirror(0xe0).w(FUNC(source_state::cv_w)); +} + +void source_state::machine_start() +{ + m_octave_led.resolve(); + m_program_display.resolve(); + m_edit_display.resolve(); + m_edit_led.resolve(); + m_kb_track.resolve(); + m_osc_waveform.resolve(); + m_sync.resolve(); + m_lfo_to_filter.resolve(); + m_lfo_to_osc.resolve(); + m_lfo_shape.resolve(); + m_trigger_out.resolve(); + + save_item(NAME(m_octave_hi)); + save_item(NAME(m_button_row_latch)); + save_item(NAME(m_encoder_incr)); + save_item(NAME(m_cv)); +} + +void source_state::machine_reset() +{ + update_octave_leds(); +} + +void source_state::source(machine_config& config) +{ + // /M1, /RFSH not Connected. + // /HALT, /NMI pulled up to 5V, with no other connection. + Z80(config, m_maincpu, 4_MHz_XTAL / 2); // Divided by 2 through U22B. + m_maincpu->set_addrmap(AS_PROGRAM, &source_state::memory_map); + m_maincpu->set_addrmap(AS_IO, &source_state::io_map); + + NVRAM(config, NVRAM_TAG, nvram_device::DEFAULT_ALL_0); // 2x6514: U27, U28. + + config.set_default_layout(layout_moog_source); +} + +DECLARE_INPUT_CHANGED_MEMBER(source_state::octave_button_pressed) +{ + // Inverters U2B and U2C (Board 3) are configured as an SR flip-flop, with + // SW1 and SW2 (Board 5) as Reset and Set respectively. + + // Inputs are active low. + const u8 input = m_octave_io->read(); + const bool octave_0 = (input & 0x01) == 0; // "0", SW1 (Board 5). + const bool octave_p1 = (input & 0x02) == 0; // "+1", SW2 (Board 5). + if (!octave_0 && octave_p1) + { + m_octave_hi = true; + } + else if (octave_0 && !octave_p1) + { + m_octave_hi = false; + } + else if (octave_0 && octave_p1) + { + // The selected octave is undefined in this case, so it is not updated. + // An octave will be selected when one of the two buttons is released. + } + else + { + // No buttons pressed. No change in selected octave. + } + update_octave_leds(); +} + +DECLARE_INPUT_CHANGED_MEMBER(source_state::encoder_moved) +{ + static constexpr const int WRAP_BUFFER = 10; + const bool overflowed = newval <= WRAP_BUFFER && + oldval >= 240 - WRAP_BUFFER; + const bool underflowed = newval >= 240 - WRAP_BUFFER && + oldval <= WRAP_BUFFER; + m_encoder_incr = ((newval > oldval) || overflowed) && !underflowed; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + LOGMASKED(LOG_ENCODER, "Encoder changed: %d %d\n", newval, m_encoder_incr); +} + +INPUT_PORTS_START(source) + PORT_START("button_group_a_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Memory STORE") PORT_CODE(KEYCODE_S) // r2p6 + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 13") // r2p4 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 12") // r2p5 + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 16") // r2p1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 15") // r2p2 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 14") // r2p3 + + PORT_START("button_group_b_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Level 2") // r1p5 + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Level 1") //r1p6 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Decay") //r1p4 + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Amount") //r1p1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Release") //r1p2 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Sustain") // r1p3 + + PORT_START("button_group_a_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) //NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 3") PORT_CODE(KEYCODE_3) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 2") PORT_CODE(KEYCODE_2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 6") PORT_CODE(KEYCODE_6) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 5") PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 4") PORT_CODE(KEYCODE_4) + + PORT_START("button_group_b_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Attack") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: OSC 2") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Pulse") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: OFF") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Emphasis") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Cutoff") + + PORT_START("button_group_a_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 10") PORT_CODE(KEYCODE_0) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 11") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 8") PORT_CODE(KEYCODE_8) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 9") PORT_CODE(KEYCODE_9) + + PORT_START("button_group_b_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Decay") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Attack") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Rate") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Release") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Sustain") + + PORT_START("button_group_a_3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD To Filter: OFF") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 1") PORT_CODE(KEYCODE_1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 32'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD To Filter: ON") + + PORT_START("button_group_b_3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: NOISE") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Interval") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Sawtooth") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Pulse") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: 1/2") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: FULL") + + PORT_START("button_group_a_4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD to Osc: OFF") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Memory HOLD") PORT_CODE(KEYCODE_H) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("KB Glide") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Shape: Triangle") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD to Osc: ON") + + PORT_START("button_group_b_4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Triange") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 16'") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SYNC: ON") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 32'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 16'") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: OSC 1") + + PORT_START("button_group_a_5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Trigger MULTI") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Trigger SINGLE") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Shape: Square") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + + PORT_START("button_group_b_5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 8'") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SYNC: OFF") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 8'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Triange") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Sawtooth") + + PORT_START("octave_buttons") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Octave 0") // SW1 (Board 5). + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::octave_button_pressed), 0x01) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Octave +1") // SW2 (Board 5). + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::octave_button_pressed), 0x02) + + PORT_START("incremental_controller") + PORT_BIT(0xff, 0x00, IPT_POSITIONAL) PORT_POSITIONS(240) PORT_WRAPS + PORT_SENSITIVITY(25) PORT_KEYDELTA(3) + PORT_CODE_DEC(KEYCODE_LEFT) PORT_CODE_INC(KEYCODE_RIGHT) PORT_FULL_TURN_COUNT(240) + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::encoder_moved), 1) + + PORT_START("keyboard_oct_1") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C1") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#1") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D1") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#1") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E1") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F1") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#1") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G1") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#1") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A1") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#1") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B1") + + PORT_START("keyboard_oct_2") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C2") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#2") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D2") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#2") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E2") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F2") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#2") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G2") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#2") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A2") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#2") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B2") + + PORT_START("keyboard_oct_3") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C3") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#3") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D3") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#3") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E3") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F3") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#3") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G3") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#3") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A3") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#3") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B3") + + PORT_START("keyboard_oct_4") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C4") + + PORT_START("trigger_in") // External trigger input (see keyboard_r()). + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("S TRIG IN") PORT_CODE(KEYCODE_T) + + // TODO: User can control when contours peak, until those are emulated. + PORT_START("contour_peaked") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Peaked") PORT_CODE(KEYCODE_Z) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Contour Peaked") PORT_CODE(KEYCODE_X) +INPUT_PORTS_END + +// It seems like the Source was launched with firmware Revision 2.2. +// There was also a Revision 3.2, and the last official firmware release was +// Revision 3.3. +ROM_START(moogsource) + ROM_REGION(0x1000, MAINCPU_TAG, 0) + ROM_DEFAULT_BIOS("r3.3") + + ROM_SYSTEM_BIOS(0, "r3.3", "Rev 3.3") + ROMX_LOAD("3p3.u23", 0x000000, 0x001000, CRC(4211331f) SHA1(8767ef6b1cbb032a89a78bdb77bb7dbc1c187974), ROM_BIOS(0)) +ROM_END + +} // Anonymous namespace. + +SYST(1981, moogsource, 0, 0, source, source, source_state, empty_init, "Moog Music", "Moog Source", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND) + diff --git a/src/mame/namco/mappy.cpp b/src/mame/namco/mappy.cpp index 598435c1b5f..de9de2ec171 100644 --- a/src/mame/namco/mappy.cpp +++ b/src/mame/namco/mappy.cpp @@ -1835,16 +1835,20 @@ ROM_START( phozons ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "5t.rom", 0x0000, 0x2000, CRC(d50f08f8) SHA1(4e9dda0d5ad1c1b8b3be7edb05b3060f5f63a9c7) ) // sprites - 5t.bin - ROM_REGION( 0x0520, "proms", 0 ) - ROM_LOAD( "red.prm", 0x0000, 0x0100, CRC(a2880667) SHA1(b24d9b3354d20a7ecc02c428245669c6c86bfd61) ) // red palette ROM (4 bits) - ROM_LOAD( "green.prm", 0x0100, 0x0100, CRC(d6e08bef) SHA1(b0ca7f8a77b7208cf974a8cc565fc91b7f40f51f) ) // green palette ROM (4 bits) - ROM_LOAD( "blue.prm", 0x0200, 0x0100, CRC(b2d69c72) SHA1(e7b1ed698ab0e87872cb3a8f3ec102ca3a753259) ) // blue palette ROM (4 bits) - ROM_LOAD( "chr.prm", 0x0300, 0x0100, CRC(429e8fee) SHA1(7b1899ca3f33f4561b572de1f24d9ea9d7d84b59) ) // characters - ROM_LOAD( "sprite.prm", 0x0400, 0x0100, CRC(9061db07) SHA1(4305d37e613e1d15d37539b152c948648189c2cd) ) // sprites - ROM_LOAD( "palette.prm", 0x0500, 0x0020, CRC(60e856ed) SHA1(dcc9a2dfc728b9ca1ab895008de07e20ebed9da3) ) // unused - timing? + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "ph1-2.1r", 0x0000, 0x0100, CRC(a2880667) SHA1(b24d9b3354d20a7ecc02c428245669c6c86bfd61) ) // red palette ROM (4 bits) + ROM_LOAD( "ph1-1.1s", 0x0100, 0x0100, CRC(d6e08bef) SHA1(b0ca7f8a77b7208cf974a8cc565fc91b7f40f51f) ) // green palette ROM (4 bits) + ROM_LOAD( "ph1-3.1p", 0x0200, 0x0100, CRC(b2d69c72) SHA1(e7b1ed698ab0e87872cb3a8f3ec102ca3a753259) ) // blue palette ROM (4 bits) + ROM_LOAD( "ph1-5.5l", 0x0300, 0x0100, CRC(429e8fee) SHA1(7b1899ca3f33f4561b572de1f24d9ea9d7d84b59) ) // characters + ROM_LOAD( "ph1-6.6r", 0x0400, 0x0100, CRC(9061db07) SHA1(4305d37e613e1d15d37539b152c948648189c2cd) ) // sprites ROM_REGION( 0x0100, "namco", 0 ) // sound PROMs - ROM_LOAD( "sound.prm", 0x0000, 0x0100, CRC(ad43688f) SHA1(072f427453efb1dda8147da61804fff06e1bc4d5) ) + ROM_LOAD( "ph1-4.3e", 0x0000, 0x0100, CRC(ad43688f) SHA1(072f427453efb1dda8147da61804fff06e1bc4d5) ) + + ROM_REGION( 0x0600, "plds", ROMREGION_ERASE00 ) + ROM_LOAD( "ph1-7.7b", 0x0000, 0x0117, CRC(9a00af9a) SHA1(b5d5a3d8a091e0e3d62b2cce34ae9b8dc1cfcbff) ) + ROM_LOAD( "ph1-8.4b", 0x0200, 0x0117, CRC(fb180f00) SHA1(c0a355fb5287e715b0c39b78eacfdcd00db953b1) ) + ROM_LOAD( "ph1-9.7r", 0x0400, 0x0117, CRC(3b21d560) SHA1(905f9a6b7440b2eeb34475879751748300b42428) ) ROM_END ROM_START( mappy ) diff --git a/src/mame/novag/const.cpp b/src/mame/novag/const.cpp index 2d31e44bf73..c9fb6ddc873 100644 --- a/src/mame/novag/const.cpp +++ b/src/mame/novag/const.cpp @@ -70,8 +70,8 @@ than writing 0x08 to control_w. #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/nvram.h" @@ -402,7 +402,7 @@ void const_state::nconst36(machine_config &config) nconst(config); // basic machine hardware - M65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); + G65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); m_maincpu->set_addrmap(AS_PROGRAM, &const_state::const_map); subdevice("irq_clock")->set_clock(7.2_MHz_XTAL/2 / 0x2000); // ~439Hz (pulse width same as nconst) diff --git a/src/mame/novag/sexpert.cpp b/src/mame/novag/sexpert.cpp index 05d1d96f304..f0d5d61618a 100644 --- a/src/mame/novag/sexpert.cpp +++ b/src/mame/novag/sexpert.cpp @@ -39,7 +39,7 @@ input I followed by Enter. #include "emu.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/clock.h" #include "machine/mos6551.h" #include "machine/nvram.h" @@ -405,7 +405,7 @@ INPUT_PORTS_END void sexpert_state::sexpert(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 10_MHz_XTAL/2); // or 12_MHz_XTAL/2, also seen with R65C02 + W65C02(config, m_maincpu, 10_MHz_XTAL/2); // or 12_MHz_XTAL/2, also seen with R65C02 m_maincpu->set_addrmap(AS_PROGRAM, &sexpert_state::sexpert_map); auto &irq_clock(CLOCK(config, "irq_clock", 32.768_kHz_XTAL/128)); // 256Hz @@ -444,7 +444,7 @@ void sexpert_state::sexpert(machine_config &config) // uart (configure after video) MOS6551(config, m_acia).set_xtal(1.8432_MHz_XTAL); // R65C51P2 - RTS to CTS, DCD to GND - m_acia->irq_handler().set_inputline("maincpu", m65c02_device::NMI_LINE); + m_acia->irq_handler().set_inputline("maincpu", w65c02_device::NMI_LINE); m_acia->rts_handler().set("acia", FUNC(mos6551_device::write_cts)); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); diff --git a/src/mame/orca/espial.cpp b/src/mame/orca/espial.cpp index 614b4e448a1..1432286213b 100644 --- a/src/mame/orca/espial.cpp +++ b/src/mame/orca/espial.cpp @@ -196,10 +196,8 @@ TILE_GET_INFO_MEMBER(espial_state::get_tile_info) uint8_t const code = m_videoram[tile_index]; uint8_t const col = m_colorram[tile_index]; uint8_t const attr = m_attributeram[tile_index]; - tileinfo.set(0, - code | ((attr & 0x03) << 8), - col & 0x3f, - TILE_FLIPYX(attr >> 2)); + + tileinfo.set(0, code | ((attr & 0x03) << 8), col & 0x3f, TILE_FLIPYX(attr >> 2)); } @@ -471,7 +469,7 @@ static INPUT_PORTS_START( espial ) PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("DSW1") @@ -507,7 +505,7 @@ static INPUT_PORTS_START( espial ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) @@ -515,8 +513,8 @@ static INPUT_PORTS_START( espial ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY INPUT_PORTS_END diff --git a/src/mame/pinball/alvg.cpp b/src/mame/pinball/alvg.cpp index d0304c881a6..94921587d13 100644 --- a/src/mame/pinball/alvg.cpp +++ b/src/mame/pinball/alvg.cpp @@ -64,7 +64,7 @@ USA Football (redemption) 11 Hold A, hit 1 ****************************************************************************************************/ #include "emu.h" #include "genpin.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m6809/m6809.h" #include "cpu/mcs51/mcs51.h" #include "machine/6522via.h" @@ -596,7 +596,7 @@ void alvg_state::pca020(machine_config &config) void alvg_state::alvg(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::main_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -628,7 +628,7 @@ void alvg_state::alvg(machine_config &config) genpin_audio(config); - INPUT_MERGER_ANY_HIGH(config, "cpuirq").output_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "cpuirq").output_handler().set_inputline(m_maincpu, W65C02_IRQ_LINE); } diff --git a/src/mame/pinball/gts3.cpp b/src/mame/pinball/gts3.cpp index 40b710aa986..b5f1f812355 100644 --- a/src/mame/pinball/gts3.cpp +++ b/src/mame/pinball/gts3.cpp @@ -64,7 +64,7 @@ Caribbean Cruise C102 1, enter, hold \ and right until message goes \ #include "gottlieb_a.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6522via.h" #include "machine/input_merger.h" #include "speaker.h" @@ -105,7 +105,6 @@ class gts3_state : public genpin_class void solenoid_w(offs_t, u8); void u4b_w(u8 data); void u5a_w(u8 data); - void nmi_w(int state); void mem_map(address_map &map) ATTR_COLD; bool m_dispclk = false; @@ -115,7 +114,7 @@ class gts3_state : public genpin_class u8 m_segment[4]{}; u8 m_u4b = 0U; - required_device m_maincpu; + required_device m_maincpu; required_device m_u4; required_device m_u5; optional_device m_p5_sound; @@ -242,12 +241,6 @@ INPUT_CHANGED_MEMBER( gts3_state::test_inp ) m_u4->write_ca1(newval); } -// This trampoline needed; WRITELINE("maincpu", m65c02_device, nmi_line) does not work -void gts3_state::nmi_w(int state) -{ - m_maincpu->set_input_line(INPUT_LINE_NMI, (state) ? CLEAR_LINE : HOLD_LINE); -} - void gts3_state::lampret_w(u8 data) { if (m_row < 12) @@ -348,7 +341,7 @@ void gts3_state::machine_reset() void gts3_state::p0(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, >s3_state::mem_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -361,7 +354,7 @@ void gts3_state::p0(machine_config &config) m_u4->readpb_handler().set(FUNC(gts3_state::u4b_r)); m_u4->writepb_handler().set(FUNC(gts3_state::u4b_w)); //m_u4->ca2_handler().set(FUNC(gts3_state::u4ca2_w)); - m_u4->cb2_handler().set(FUNC(gts3_state::nmi_w)); + m_u4->cb2_handler().set_inputline("maincpu", W65C02_NMI_LINE).invert(); R65C22(config, m_u5, XTAL(4'000'000) / 2); m_u5->irq_handler().set("irq", FUNC(input_merger_device::in_w<1>)); @@ -372,7 +365,7 @@ void gts3_state::p0(machine_config &config) //m_u5->cb1_handler().set(FUNC(gts3_state::u5cb1_w)); //m_u5->cb2_handler().set(FUNC(gts3_state::u5cb2_w)); - INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", W65C02_IRQ_LINE); /* Sound */ genpin_audio(config); diff --git a/src/mame/pinball/gts3a.cpp b/src/mame/pinball/gts3a.cpp index 443c9fde0a6..84c6438c82e 100644 --- a/src/mame/pinball/gts3a.cpp +++ b/src/mame/pinball/gts3a.cpp @@ -50,7 +50,7 @@ machinaZOIS Virtual Training Center Hit 1, press LM #include "gottlieb_a.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6522via.h" #include "machine/input_merger.h" #include "video/mc6845.h" @@ -101,7 +101,6 @@ class gts3a_state : public genpin_class void u5a_w(u8 data); u8 dmd_r(); void dmd_w(u8 data); - void nmi_w(int state); void crtc_vs(int state); MC6845_UPDATE_ROW(crtc_update_row); void palette_init(palette_device &palette); @@ -113,8 +112,8 @@ class gts3a_state : public genpin_class u8 m_segment = 0U; u8 m_u4b = 0U; - required_device m_maincpu; - required_device m_dmdcpu; + required_device m_maincpu; + required_device m_dmdcpu; required_memory_bank m_bank1; required_device m_crtc; required_shared_ptr m_vram; @@ -286,12 +285,6 @@ INPUT_CHANGED_MEMBER( gts3a_state::test_inp ) m_u4->write_ca1(newval); } -// This trampoline needed; WRITELINE("maincpu", m65c02_device, nmi_line) does not work -void gts3a_state::nmi_w(int state) -{ - m_maincpu->set_input_line(INPUT_LINE_NMI, (state) ? CLEAR_LINE : HOLD_LINE); -} - void gts3a_state::lampret_w(u8 data) { if (m_row < 12) @@ -316,7 +309,7 @@ void gts3a_state::solenoid_w(offs_t offset, u8 data) void gts3a_state::segbank_w(u8 data) { m_segment = data; - m_dmdcpu->set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + m_dmdcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } void gts3a_state::u4b_w(u8 data) @@ -360,7 +353,7 @@ void gts3a_state::init_gts3a() u8 gts3a_state::dmd_r() { - m_dmdcpu->set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + m_dmdcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); return m_segment; } @@ -430,12 +423,12 @@ void gts3a_state::machine_reset() void gts3a_state::p0(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, >s3a_state::mem_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 6116LP + DS1210 - M65C02(config, m_dmdcpu, XTAL(3'579'545) / 2); + W65C02(config, m_dmdcpu, XTAL(3'579'545) / 2); m_dmdcpu->set_addrmap(AS_PROGRAM, >s3a_state::dmd_map); // Video @@ -462,7 +455,7 @@ void gts3a_state::p0(machine_config &config) m_u4->readpb_handler().set(FUNC(gts3a_state::u4b_r)); m_u4->writepb_handler().set(FUNC(gts3a_state::u4b_w)); //m_u4->ca2_handler().set(FUNC(gts3a_state::u4ca2_w)); - m_u4->cb2_handler().set(FUNC(gts3a_state::nmi_w)); + m_u4->cb2_handler().set_inputline("maincpu", W65C02_NMI_LINE).invert(); R65C22(config, m_u5, XTAL(4'000'000) / 2); m_u5->irq_handler().set("irq", FUNC(input_merger_device::in_w<1>)); @@ -473,7 +466,7 @@ void gts3a_state::p0(machine_config &config) //m_u5->cb1_Handler().set(FUNC(gts3a_state::u5cb1_w)); //m_u5->cb2_Handler().set(FUNC(gts3a_state::u5cb2_w)); - INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", W65C02_IRQ_LINE); // Sound genpin_audio(config); diff --git a/src/mame/saitek/corona.cpp b/src/mame/saitek/corona.cpp index 310390a62c8..39dab1bffcd 100644 --- a/src/mame/saitek/corona.cpp +++ b/src/mame/saitek/corona.cpp @@ -13,7 +13,7 @@ different compared to Stratos/Turbo King. #include "emu.h" #include "stratos.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -260,7 +260,7 @@ INPUT_PORTS_END void corona_state::corona(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq + W65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map); m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(183)); diff --git a/src/mame/saitek/simultano.cpp b/src/mame/saitek/simultano.cpp index 8a6b257cd5f..cca07d80e16 100644 --- a/src/mame/saitek/simultano.cpp +++ b/src/mame/saitek/simultano.cpp @@ -31,8 +31,8 @@ programmed by Saitek. Not as a simple rebrand, but with hardware differences: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -352,7 +352,7 @@ void simultano_state::simultano(machine_config &config) cc2150(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::simultano_map); m_maincpu->set_periodic_int(FUNC(simultano_state::irq0_line_hold), attotime::from_hz(76)); // approximation diff --git a/src/mame/saitek/stratos.cpp b/src/mame/saitek/stratos.cpp index b1a51a7c80f..8ee440c7c38 100644 --- a/src/mame/saitek/stratos.cpp +++ b/src/mame/saitek/stratos.cpp @@ -54,7 +54,7 @@ is engine version C. #include "emu.h" #include "stratos.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -490,7 +490,7 @@ INPUT_PORTS_END void stratos_state::stratos(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq + W65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::main_map); m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(76)); diff --git a/src/mame/sega/system1.cpp b/src/mame/sega/system1.cpp index 17b06281aa7..3443a59d3a3 100644 --- a/src/mame/sega/system1.cpp +++ b/src/mame/sega/system1.cpp @@ -2261,6 +2261,60 @@ void system1_state::sys1pio(machine_config &config) m_pio->out_pb_callback().set(FUNC(system1_state::videomode_w)); } +// reduced visible area for scrolling games +void system1_state::sys1pios(machine_config &config) +{ + sys1pio(config); + m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1); +} + +// this describes the additional 8751 MCU when present +void system1_state::mcu(machine_config &config) +{ + // basic machine hardware + m_maincpu->remove_vblank_int(); + + I8751(config, m_mcu, SOUND_CLOCK); + m_mcu->set_addrmap(AS_IO, &system1_state::mcu_io_map); + m_mcu->port_out_cb<1>().set(FUNC(system1_state::mcu_control_w)); + + config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 16)); + + // This interrupt is driven by pin 15 of a PAL16R4 (315-5138 on Choplifter), based on the vertical count. + // The actual duty cycle likely differs from VBLANK, which is another output from the same PAL. + m_screen->screen_vblank().set_inputline("mcu", MCS51_INT0_LINE); + + // bus controller INTACK pin clocks MCU T0 + m_maincpu->set_irq_acknowledge_callback(FUNC(system1_state::mcu_t0_callback)); +} + +// System 2 video +void system1_state::sys2(machine_config &config) +{ + sys1ppi(config); + + m_ppi8255->out_pc_callback().set(FUNC(system1_state::sound_control_w)).exor(0x01); + + // video hardware + MCFG_VIDEO_START_OVERRIDE(system1_state,system2) + m_screen->set_screen_update(FUNC(system1_state::screen_update_system2)); +} + +void system1_state::sys2x(machine_config &config) +{ + sys2(config); + MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); + encrypted_sys2_mc8123_maps(config); +} + +// System 2 with rowscroll +void system1_state::sys2row(machine_config &config) +{ + sys2(config); + m_screen->set_screen_update(FUNC(system1_state::screen_update_system2_rowscroll)); +} + +// address map configs void system1_state::encrypted_sys1ppi_maps(machine_config &config) { m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map); @@ -2288,44 +2342,49 @@ void system1_state::encrypted_sys2_mc8123_maps(machine_config &config) m_maincpu->refresh_cb().set(FUNC(system1_state::adjust_cycles)); } -void system1_state::sys1pioxb(machine_config &config) -{ - sys1pio(config); - MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); - encrypted_sys1pio_maps(config); -} -void system1_state::blockgal(machine_config &config) +// game-specific PPI-based System 1 + +void system1_state::starjack(machine_config &config) { - sys1pioxb(config); - m_maincpu->set_addrmap(AS_IO, &system1_state::blockgal_io_map); + sys1ppis(config); + + // lower sound hw clocks + m_soundcpu->set_clock(MASTER_CLOCK / 8); + m_sn[0]->set_clock(MASTER_CLOCK / 8); + m_sn[1]->set_clock(MASTER_CLOCK / 16); } -void system1_state::sys1ppix_315_5178(machine_config &config) +void system1_state::upndown(machine_config &config) { sys1ppi(config); - segacrp2_z80_device &z80(SEGA_315_5178(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + z80.set_decrypted_tag(":decrypted_opcodes"); + + // lower sound hw clocks (does not apply to unencrypted set) + m_soundcpu->set_clock(MASTER_CLOCK / 8); + m_sn[0]->set_clock(MASTER_CLOCK / 8); + m_sn[1]->set_clock(MASTER_CLOCK / 8); } -void system1_state::sys1ppix_315_5179(machine_config &config) +void system1_state::regulus(machine_config &config) { sys1ppi(config); - segacrp2_z80_device &z80(SEGA_315_5179(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5033(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5051(machine_config &config) +void system1_state::mrviking(machine_config &config) { - sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1ppis(config); + segacrpt_z80_device &z80(SEGA_315_5041(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5048(machine_config &config) +void system1_state::swat(machine_config &config) { sys1ppi(config); segacrpt_z80_device &z80(SEGA_315_5048(config.replace(), m_maincpu, MASTER_CLOCK/5)); @@ -2333,259 +2392,235 @@ void system1_state::sys1ppix_315_5048(machine_config &config) z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5033(machine_config &config) +void system1_state::flickyo(machine_config &config) { sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5033(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5065(machine_config &config) +void system1_state::wmatch(machine_config &config) { - sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1ppis(config); + segacrpt_z80_device &z80(SEGA_315_5064(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5098(machine_config &config) +void system1_state::bullfgt(machine_config &config) { sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5177(machine_config &config) +void system1_state::wboy2(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); + sys1ppi(config); + segacrp2_z80_device &z80(SEGA_315_5178(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1piox_315_5162(machine_config &config) +void system1_state::wboy6(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_315_5162(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); + sys1ppi(config); + segacrp2_z80_device &z80(SEGA_315_5179(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1piox_317_0006(machine_config &config) +void system1_state::nob(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + nobb(config); + + // basic machine hardware + I8751(config, m_mcu, SOUND_CLOCK); + m_mcu->port_in_cb<0>().set(FUNC(system1_state::nob_mcu_latch_r)); + m_mcu->port_out_cb<0>().set(FUNC(system1_state::nob_mcu_latch_w)); + m_mcu->port_out_cb<1>().set(FUNC(system1_state::nob_mcu_status_w)); + m_mcu->port_out_cb<2>().set(FUNC(system1_state::nob_mcu_control_p2_w)); +} + +void system1_state::nobb(machine_config &config) +{ + sys1ppi(config); + + // alternate program map with RAM/collision swapped + m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::nobo_map); m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys1piox_315_5135(machine_config &config) + +// game-specific PIO-based System 1 + +void system1_state::flicky(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5135(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5132(machine_config &config) +void system1_state::thetogyu(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5132(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5155(machine_config &config) +void system1_state::spatter(machine_config &config) { - sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5155(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pios(config); + segacrpt_z80_device &z80(SEGA_315_5096(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5111(machine_config &config) +void system1_state::spattera(machine_config &config) { - sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5111(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pios(config); + segacrpt_z80_device &z80(SEGA_315_5099(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } - -void system1_state::sys1piox_315_5110(machine_config &config) +void system1_state::pitfall2(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5110(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5093(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5051(machine_config &config) +void system1_state::seganinj(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5102(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5098(machine_config &config) +void system1_state::seganinja(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5133(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5102(machine_config &config) +void system1_state::nprinceso(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5102(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5133(machine_config &config) +void system1_state::imsorry(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5133(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5110(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5093(machine_config &config) +void system1_state::teddybb(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5093(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5155(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5065(machine_config &config) +void system1_state::teddybboa(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5111(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -// reduced visible area for scrolling games -void system1_state::sys1pios(machine_config &config) +void system1_state::myheroj(machine_config &config) { sys1pio(config); - m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1); -} - -void system1_state::sys1piosx_315_5099(machine_config &config) -{ - sys1pios(config); - segacrpt_z80_device &z80(SEGA_315_5099(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5132(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piosx_315_5096(machine_config &config) +void system1_state::_4dwarrio(machine_config &config) { - sys1pios(config); - segacrpt_z80_device &z80(SEGA_315_5096(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_315_5162(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); - z80.set_decrypted_tag(":decrypted_opcodes"); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1ppisx_315_5064(machine_config &config) +void system1_state::wboy(machine_config &config) { - sys1ppis(config); - segacrpt_z80_device &z80(SEGA_315_5064(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(":decrypted_opcodes"); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1ppisx_315_5041(machine_config &config) +void system1_state::wboyo(machine_config &config) { - sys1ppis(config); - segacrpt_z80_device &z80(SEGA_315_5041(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); + sys1pio(config); + segacrpt_z80_device &z80(SEGA_315_5135(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -// this describes the additional 8751 MCU when present -void system1_state::mcu(machine_config &config) +void system1_state::blockgal(machine_config &config) { - // basic machine hardware - m_maincpu->remove_vblank_int(); - - I8751(config, m_mcu, SOUND_CLOCK); - m_mcu->set_addrmap(AS_IO, &system1_state::mcu_io_map); - m_mcu->port_out_cb<1>().set(FUNC(system1_state::mcu_control_w)); - - config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 16)); - - // This interrupt is driven by pin 15 of a PAL16R4 (315-5138 on Choplifter), based on the vertical count. - // The actual duty cycle likely differs from VBLANK, which is another output from the same PAL. - m_screen->screen_vblank().set_inputline("mcu", MCS51_INT0_LINE); - - // bus controller INTACK pin clocks MCU T0 - m_maincpu->set_irq_acknowledge_callback(FUNC(system1_state::mcu_t0_callback)); + sys1pio(config); + MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); + encrypted_sys1pio_maps(config); + m_maincpu->set_addrmap(AS_IO, &system1_state::blockgal_io_map); } -// alternate program map with RAM/collision swapped -void system1_state::nob(machine_config &config) +void system1_state::gardia(machine_config &config) { - sys1ppi(config); - m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::nobo_map); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::nobm(machine_config &config) -{ - nob(config); - // basic machine hardware - I8751(config, m_mcu, SOUND_CLOCK); - m_mcu->port_in_cb<0>().set(FUNC(system1_state::nob_mcu_latch_r)); - m_mcu->port_out_cb<0>().set(FUNC(system1_state::nob_mcu_latch_w)); - m_mcu->port_out_cb<1>().set(FUNC(system1_state::nob_mcu_status_w)); - m_mcu->port_out_cb<2>().set(FUNC(system1_state::nob_mcu_control_p2_w)); -} +// game-specific System 2 -// system2 video -void system1_state::sys2(machine_config &config) +void system1_state::choplift(machine_config &config) { - sys1ppi(config); - - m_ppi8255->out_pc_callback().set(FUNC(system1_state::sound_control_w)).exor(0x01); - - // video hardware - MCFG_VIDEO_START_OVERRIDE(system1_state,system2) - m_screen->set_screen_update(FUNC(system1_state::screen_update_system2)); + sys2row(config); + mcu(config); } -void system1_state::sys2x(machine_config &config) +void shtngmst_state::shtngmst(machine_config &config) { sys2(config); - m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map); + mcu(config); + m_maincpu->set_addrmap(AS_IO, &shtngmst_state::shtngmst_io_map); } -void system1_state::sys2_315_5177(machine_config &config) +void system1_state::gardiab(machine_config &config) { sys2(config); - segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrp2_z80_device &z80(SEGA_317_0007(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); -} -void system1_state::sys2_315_5176(machine_config &config) -{ - sys2(config); - segacrp2_z80_device &z80(SEGA_315_5176(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2_317_0006(machine_config &config) +void system1_state::gardiaj(machine_config &config) { sys2(config); segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); @@ -2595,62 +2630,47 @@ void system1_state::sys2_317_0006(machine_config &config) m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2_317_0007(machine_config &config) +void system1_state::wboysys2(machine_config &config) { sys2(config); - segacrp2_z80_device &z80(SEGA_317_0007(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); - - m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2xb(machine_config &config) +void system1_state::wboysys2a(machine_config &config) { sys2(config); - MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); - encrypted_sys2_mc8123_maps(config); + segacrp2_z80_device &z80(SEGA_315_5176(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys2xboot(machine_config &config) +void system1_state::wbmlb(machine_config &config) { sys2(config); m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map); } -void shtngmst_state::shtngmst(machine_config &config) -{ - sys2(config); - mcu(config); - m_maincpu->set_addrmap(AS_IO, &shtngmst_state::shtngmst_io_map); -} - -// system2 with rowscroll -void system1_state::sys2row(machine_config &config) +void system1_state::blockgalb(machine_config &config) { sys2(config); - m_screen->set_screen_update(FUNC(system1_state::screen_update_system2_rowscroll)); + m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map); } -void system1_state::sys2rowxb(machine_config &config) +void system1_state::ufosensi(machine_config &config) { sys2row(config); MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); encrypted_sys2_mc8123_maps(config); } -void system1_state::sys2rowxboot(machine_config &config) +void system1_state::ufosensib(machine_config &config) { sys2row(config); m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map); } -void system1_state::sys2rowm(machine_config &config) -{ - sys2row(config); - mcu(config); -} - /************************************* @@ -5729,101 +5749,101 @@ void system1_state::init_bootsys2d() *************************************/ // PPI-based System 1 -GAME( 1983, starjack, 0, sys1ppis, starjack, system1_state, empty_init, ROT270, "Sega", "Star Jacker (Sega)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, starjacks, starjack, sys1ppis, starjacks, system1_state, empty_init, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, upndown, 0, sys1ppix_315_5098, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (315-5030)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, regulus, 0, sys1ppix_315_5033, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033, Rev A.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, reguluso, regulus, sys1ppix_315_5033, reguluso, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, mrviking, 0, sys1ppisx_315_5041,mrviking, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, mrvikingj, mrviking, sys1ppisx_315_5041,mrvikingj, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, swat, 0, sys1ppix_315_5048, swat, system1_state, empty_init, ROT270, "Coreland / Sega", "SWAT (315-5048)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, flickyo, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/24 -GAME( 1984, flickys1, flicky, sys1ppix_315_5051, flickys1, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/11/26 -GAME( 1984, flickyup, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, on Up'n Down boardset, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/17 -GAME( 1984, flickyupa, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "bootleg", "Flicky (64k Version, on Up'n Down boardset, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/7/05 -GAME( 1984, wmatch, 0, sys1ppisx_315_5064,wmatch, system1_state, empty_init, ROT270, "Sega", "Water Match (315-5064)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, bullfgt, 0, sys1ppix_315_5065, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "Bullfight (315-5065)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprinces, seganinj, sys1ppix_315_5051, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy2, wboy, sys1ppix_315_5178, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy6, wboy, sys1ppix_315_5179, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 6, 315-5179)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, empty_init, ROT0, "hack (Vision Electronics)", "Wonder Boy Deluxe", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, nob, 0, nobm, nob, system1_state, init_nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, nobb, nob, nob, nob, system1_state, init_nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, raflesiau, raflesia, sys1ppi, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, starjack, 0, starjack, starjack, system1_state, empty_init, ROT270, "Sega", "Star Jacker (Sega)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, starjacks, starjack, starjack, starjacks, system1_state, empty_init, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, upndown, 0, upndown, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (315-5030)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, regulus, 0, regulus, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033, Rev A.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, reguluso, regulus, regulus, reguluso, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, mrviking, 0, mrviking, mrviking, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, mrvikingj, mrviking, mrviking, mrvikingj, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, swat, 0, swat, swat, system1_state, empty_init, ROT270, "Coreland / Sega", "SWAT (315-5048)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, flickyo, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/24 +GAME( 1984, flickys1, flicky, flickyo, flickys1, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/11/26 +GAME( 1984, flickyup, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, on Up'n Down boardset, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/17 +GAME( 1984, flickyupa, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "bootleg", "Flicky (64k Version, on Up'n Down boardset, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/7/05 +GAME( 1984, wmatch, 0, wmatch, wmatch, system1_state, empty_init, ROT270, "Sega", "Water Match (315-5064)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, bullfgt, 0, bullfgt, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "Bullfight (315-5065)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprinces, seganinj, flickyo, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy2, wboy, wboy2, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy6, wboy, wboy6, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 6, 315-5179)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, empty_init, ROT0, "hack (Vision Electronics)", "Wonder Boy Deluxe", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, nob, 0, nob, nob, system1_state, init_nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, nobb, nob, nobb, nob, system1_state, init_nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, raflesiau, raflesia, sys1ppi, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (not encrypted)", MACHINE_SUPPORTS_SAVE ) // PIO-based System 1 -GAME( 1984, flicky, 0, sys1piox_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 -GAME( 1984, flickya, flicky, sys1piox_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 -GAME( 1984, flickyb, flicky, sys1piox_315_5051, flickyb, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs, newer)", MACHINE_SUPPORTS_SAVE ) // 1984/10/07 -GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, thetogyu, bullfgt, sys1piox_315_5065, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, spatter, 0, sys1piosx_315_5096,spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5096)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, spattera, spatter, sys1piosx_315_5099,spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5099)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, ssanchan, spatter, sys1piosx_315_5096,spatter, system1_state, empty_init, ROT0, "Sega", "Sanrin San Chan (Japan, 315-5096)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2, 0, sys1piox_315_5093, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2a, pitfall2, sys1piox_315_5093, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, empty_init, ROT0, "Sega", "Pitfall II (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinj, 0, sys1piox_315_5102, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinja, seganinj, sys1piox_315_5133, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, ninja, seganinj, sys1piox_315_5102, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprinceso, seganinj, sys1piox_315_5098, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprincesb, seganinj, sys1piox_315_5051, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, imsorry, 0, sys1piox_315_5110, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, imsorryj, imsorry, sys1piox_315_5110, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybb, 0, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybbo, teddybb, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybboa, teddybb, sys1piox_315_5111, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5111, Old Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybbobl, teddybb, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, sscandal, myhero, sys1piox_315_5132, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, myherobl, myhero, sys1piox_315_5132, myhero, system1_state, empty_init, ROT0, "bootleg", "My Hero (bootleg, 315-5132 encryption)", MACHINE_SUPPORTS_SAVE ) // cloned 315-5132 encryption? might be a direct copy of an undumped original set -GAME( 1985, myherok, myhero, sys1piox_315_5132, myhero, system1_state, init_myherok, ROT0, "Coreland / Sega", "Cheongchun Ilbeonji (Korea)", MACHINE_SUPPORTS_SAVE ) // possible bootleg, has extra encryption -GAME( 1985, 4dwarrio, 0, sys1piox_315_5162, 4dwarrio, system1_state, empty_init, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, raflesia, 0, sys1piox_315_5162, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy, 0, sys1piox_315_5177, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyo, wboy, sys1piox_315_5135, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5135)", MACHINE_SUPPORTS_SAVE ) // aka 317-0003 -GAME( 1986, wboy3, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy4, wboy, sys1piox_315_5162, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", MACHINE_SUPPORTS_SAVE ) // appears to be a very early / unfinished version. -GAME( 1986, wboy5, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyub, wboy, sys1piox_315_5177, wboy, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (US bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyblt, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "bootleg (Tecfri)", "Wonder Boy (Tecfri bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, blockgal, 0, blockgal, blockgal, system1_state, init_blockgal, ROT90, "Sega / Vic Tokai", "Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE) +GAME( 1984, flicky, 0, flicky, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 +GAME( 1984, flickya, flicky, flicky, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 +GAME( 1984, flickyb, flicky, flicky, flickyb, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs, newer)", MACHINE_SUPPORTS_SAVE ) // 1984/10/07 +GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, thetogyu, bullfgt, thetogyu, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, spatter, 0, spatter, spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5096)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, spattera, spatter, spattera, spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5099)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, ssanchan, spatter, spatter, spatter, system1_state, empty_init, ROT0, "Sega", "Sanrin San Chan (Japan, 315-5096)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2, 0, pitfall2, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2a, pitfall2, pitfall2, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, empty_init, ROT0, "Sega", "Pitfall II (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinj, 0, seganinj, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinja, seganinj, seganinja, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, ninja, seganinj, seganinj, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprinceso, seganinj, nprinceso, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprincesb, seganinj, flicky, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, imsorry, 0, imsorry, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, imsorryj, imsorry, imsorry, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybb, 0, teddybb, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybbo, teddybb, teddybb, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybboa, teddybb, teddybboa, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5111, Old Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybbobl, teddybb, teddybb, teddybb, system1_state, empty_init, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, sscandal, myhero, myheroj, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, myherobl, myhero, myheroj, myhero, system1_state, empty_init, ROT0, "bootleg", "My Hero (bootleg, 315-5132 encryption)", MACHINE_SUPPORTS_SAVE ) // cloned 315-5132 encryption? might be a direct copy of an undumped original set +GAME( 1985, myherok, myhero, myheroj, myhero, system1_state, init_myherok, ROT0, "Coreland / Sega", "Cheongchun Ilbeonji (Korea)", MACHINE_SUPPORTS_SAVE ) // possible bootleg, has extra encryption +GAME( 1985, 4dwarrio, 0, _4dwarrio, 4dwarrio, system1_state, empty_init, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, raflesia, 0, _4dwarrio, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy, 0, wboy, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyo, wboy, wboyo, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5135)", MACHINE_SUPPORTS_SAVE ) // aka 317-0003 +GAME( 1986, wboy3, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy4, wboy, _4dwarrio, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", MACHINE_SUPPORTS_SAVE ) // appears to be a very early / unfinished version. +GAME( 1986, wboy5, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyub, wboy, wboy, wboy, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (US bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyblt, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "bootleg (Tecfri)", "Wonder Boy (Tecfri bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, blockgal, 0, blockgal, blockgal, system1_state, init_blockgal, ROT90, "Sega / Vic Tokai", "Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE) // PIO-based System 1 with ROM banking -GAME( 1985, hvymetal, 0, sys1piox_315_5135, hvymetal, system1_state, init_bank44, ROT0, "Sega", "Heavy Metal (315-5135)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardia, 0, sys1piox_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (317-0006)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE) -GAME( 1986, brain, 0, sys1pio, brain, system1_state, init_bank44, ROT0, "Coreland / Sega", "Brain", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, hvymetal, 0, wboyo, hvymetal, system1_state, init_bank44, ROT0, "Sega", "Heavy Metal (315-5135)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardia, 0, gardia, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (317-0006)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE) +GAME( 1986, brain, 0, sys1pio, brain, system1_state, init_bank44, ROT0, "Coreland / Sega", "Brain", MACHINE_SUPPORTS_SAVE ) // System 2 -GAME( 1985, choplift, 0, sys2rowm, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (8751 315-5151)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (unprotected)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "bootleg", "Choplifter (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, shtngmst, 0, shtngmst, shtngmst, shtngmst_state,init_bank0c, ROT0, "Sega", "Shooting Master (8751 315-5159a)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardiab, gardia, sys2_317_0007, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardiaj, gardia, sys2_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboysys2, wboy, sys2_315_5177, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, tokisens, 0, sys2xb, tokisens, system1_state, init_wbml, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg? -GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy - Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljo, wbml, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy - Monster Land (Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljb, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlb, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE) -GAME( 1987, wbmlb2, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English bootleg set 4)", MACHINE_SUPPORTS_SAVE) -GAME( 1987, wbmlbg, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy - Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlbge, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy - Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 2009, wbmlvc, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "Sega", "Wonder Boy - Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE ) -GAME( 2009, wbmlvcd, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version -GAME( 1987, wbmld, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljod, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlh, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English, difficulty hack)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, dakkochn, 0, sys2xb, dakkochn, dakkochn_state,init_wbml, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, blockgalb, blockgal, sys2x, blockgalb, system1_state, init_bootleg, ROT90, "bootleg", "Block Gal (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, ufosensi, 0, sys2rowxb, ufosensi, system1_state, init_wbml, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, ufosensib, ufosensi, sys2rowxboot, ufosensi, system1_state, init_bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, choplift, 0, choplift, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (8751 315-5151)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (unprotected)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "bootleg", "Choplifter (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, shtngmst, 0, shtngmst, shtngmst, shtngmst_state,init_bank0c, ROT0, "Sega", "Shooting Master (8751 315-5159a)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardiab, gardia, gardiab, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardiaj, gardia, gardiaj, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboysys2, wboy, wboysys2, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboysys2a, wboy, wboysys2a, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, tokisens, 0, sys2x, tokisens, system1_state, init_wbml, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg? +GAME( 1987, wbml, 0, sys2x, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy: Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljo, wbml, sys2x, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy: Monster Land (Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljb, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlb, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE) +GAME( 1987, wbmlb2, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English bootleg set 4)", MACHINE_SUPPORTS_SAVE) +GAME( 1987, wbmlbg, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy: Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlbge, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy: Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 2009, wbmlvc, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "Sega", "Wonder Boy: Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE ) +GAME( 2009, wbmlvcd, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version +GAME( 1987, wbmld, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljod, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlh, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English, difficulty hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, dakkochn, 0, sys2x, dakkochn, dakkochn_state,init_wbml, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, blockgalb, blockgal, blockgalb, blockgalb, system1_state, init_bootleg, ROT90, "bootleg", "Block Gal (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, ufosensi, 0, ufosensi, ufosensi, system1_state, init_wbml, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, ufosensib, ufosensi, ufosensib, ufosensi, system1_state, init_bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/sega/system1.h b/src/mame/sega/system1.h index d801b78664e..fb8071d058f 100644 --- a/src/mame/sega/system1.h +++ b/src/mame/sega/system1.h @@ -50,52 +50,55 @@ class system1_state : public driver_device m_banked_decrypted_opcodes(nullptr) { } - void sys1ppix_315_5051(machine_config &config); - void sys1ppisx_315_5064(machine_config &config); - void sys2_317_0007(machine_config &config); - void sys1piox_315_5110(machine_config &config); - void sys1piox_315_5111(machine_config &config); - void sys1piox_315_5065(machine_config &config); - void sys1ppix_315_5178(machine_config &config); - void sys1ppix_315_5179(machine_config &config); - void sys1piox_315_5093(machine_config &config); - void sys2_315_5176(machine_config &config); - void sys2(machine_config &config); - void sys2_315_5177(machine_config &config); - void nob(machine_config &config); - void blockgal(machine_config &config); - void sys1ppisx_315_5041(machine_config &config); - void sys1piox_315_5132(machine_config &config); - void sys1piox_315_5162(machine_config &config); - void sys1piox_315_5133(machine_config &config); - void sys1pioxb(machine_config &config); void sys1ppi(machine_config &config); - void sys1piox_315_5135(machine_config &config); - void sys2rowxboot(machine_config &config); - void sys1piox_315_5102(machine_config &config); - void sys1piosx_315_5096(machine_config &config); - void sys2x(machine_config &config); - void sys1piox_315_5051(machine_config &config); - void sys1piox_315_5098(machine_config &config); - void sys1piosx_315_5099(machine_config &config); - void sys2xboot(machine_config &config); - void sys2xb(machine_config &config); - void nobm(machine_config &config); - void mcu(machine_config &config); - void sys2_317_0006(machine_config &config); - void sys1piox_317_0006(machine_config &config); - void sys1ppix_315_5033(machine_config &config); + void sys1ppis(machine_config &config); void sys1pio(machine_config &config); void sys1pios(machine_config &config); - void sys2rowm(machine_config &config); - void sys1ppix_315_5098(machine_config &config); - void sys1ppix_315_5048(machine_config &config); + void mcu(machine_config &config); + void sys2(machine_config &config); + void sys2x(machine_config &config); void sys2row(machine_config &config); - void sys1ppis(machine_config &config); - void sys1ppix_315_5065(machine_config &config); - void sys1piox_315_5177(machine_config &config); - void sys1piox_315_5155(machine_config &config); - void sys2rowxb(machine_config &config); + + void starjack(machine_config &config); + void upndown(machine_config &config); + void regulus(machine_config &config); + void mrviking(machine_config &config); + void swat(machine_config &config); + void flickyo(machine_config &config); + void bullfgt(machine_config &config); + void wmatch(machine_config &config); + void wboy2(machine_config &config); + void wboy6(machine_config &config); + void nob(machine_config &config); + void nobb(machine_config &config); + + void flicky(machine_config &config); + void thetogyu(machine_config &config); + void spatter(machine_config &config); + void spattera(machine_config &config); + void pitfall2(machine_config &config); + void seganinj(machine_config &config); + void seganinja(machine_config &config); + void nprinceso(machine_config &config); + void imsorry(machine_config &config); + void teddybb(machine_config &config); + void teddybboa(machine_config &config); + void myheroj(machine_config &config); + void _4dwarrio(machine_config &config); + void wboy(machine_config &config); + void wboyo(machine_config &config); + void blockgal(machine_config &config); + void gardia(machine_config &config); + + void choplift(machine_config &config); + void gardiab(machine_config &config); + void gardiaj(machine_config &config); + void wboysys2(machine_config &config); + void wboysys2a(machine_config &config); + void wbmlb(machine_config &config); + void blockgalb(machine_config &config); + void ufosensi(machine_config &config); + void ufosensib(machine_config &config); void init_bank0c(); void init_bank44(); diff --git a/src/mame/seta/downtown.cpp b/src/mame/seta/downtown.cpp index 97db78bf420..05b2294e507 100644 --- a/src/mame/seta/downtown.cpp +++ b/src/mame/seta/downtown.cpp @@ -293,7 +293,7 @@ P1-049-A #include "emu.h" #include "x1_012.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m68000/m68000.h" #include "machine/74157.h" #include "machine/gen_latch.h" @@ -933,7 +933,7 @@ void tndrcade_state::sub_bankswitch_lockout_w(u8 data) seta_coin_lockout_w(data); // 65C02 code doesn't seem to do anything to explicitly acknowledge IRQ; implicitly acknowledging it here seems most likely - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, CLEAR_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); } @@ -1043,7 +1043,7 @@ void downtown_state::calibr50_sub_bankswitch_w(u8 data) // Bit 2: IRQCLR if (!BIT(data, 2)) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, CLEAR_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); // Bit 1: /PCMMUTE m_x1snd->set_output_gain(ALL_OUTPUTS, BIT(data, 1) ? 1.0f : 0.0f); @@ -1769,10 +1769,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(downtown_state::seta_sub_interrupt) int scanline = param; if (scanline == 240) - m_subcpu->pulse_input_line(m65c02_device::NMI_LINE, attotime::zero); + m_subcpu->pulse_input_line(W65C02_NMI_LINE, attotime::zero); if (scanline == 112) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } @@ -1785,10 +1785,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(tndrcade_state::tndrcade_sub_interrupt) int scanline = param; if (scanline == 240) - m_subcpu->pulse_input_line(m65c02_device::NMI_LINE, attotime::zero); + m_subcpu->pulse_input_line(W65C02_NMI_LINE, attotime::zero); if ((scanline % 16) == 0) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } void tndrcade_state::tndrcade(machine_config &config) @@ -1797,7 +1797,7 @@ void tndrcade_state::tndrcade(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &tndrcade_state::tndrcade_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &tndrcade_state::tndrcade_sub_map); TIMER(config, "scantimer").configure_scanline(FUNC(tndrcade_state::tndrcade_sub_interrupt), "screen", 0, 1); @@ -1849,7 +1849,7 @@ void downtown_state::twineagl(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::twineagl_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); @@ -1900,7 +1900,7 @@ void downtown_state::downtown(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); @@ -1981,7 +1981,7 @@ void usclssic_state::usclssic(machine_config &config) WATCHDOG_TIMER(config, "watchdog"); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &usclssic_state::calibr50_sub_map); UPD4701A(config, m_upd4701); @@ -2010,7 +2010,7 @@ void usclssic_state::usclssic(machine_config &config) screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); screen.set_screen_update(FUNC(usclssic_state::screen_update_usclssic)); screen.set_palette(m_palette); - screen.screen_vblank().set_inputline(m_subcpu, m65c02_device::IRQ_LINE, ASSERT_LINE); + screen.screen_vblank().set_inputline(m_subcpu, W65C02_IRQ_LINE, ASSERT_LINE); X1_012(config, m_tiles, m_palette, gfx_usclssic); m_tiles->set_screen(m_screen); @@ -2023,7 +2023,7 @@ void usclssic_state::usclssic(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch[0]); - m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, m65c02_device::NMI_LINE); + m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, W65C02_NMI_LINE); m_soundlatch[0]->set_separate_acknowledge(true); X1_010(config, m_x1snd, 16_MHz_XTAL); // 16 MHz @@ -2051,7 +2051,7 @@ void downtown_state::calibr50(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::calibr50_sub_map); m_subcpu->set_periodic_int(FUNC(downtown_state::irq0_line_assert), attotime::from_hz(4*60)); // IRQ: 4/frame @@ -2088,7 +2088,7 @@ void downtown_state::calibr50(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch[0]); - m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, m65c02_device::NMI_LINE); + m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, W65C02_NMI_LINE); m_soundlatch[0]->set_separate_acknowledge(true); GENERIC_LATCH_8(config, m_soundlatch[1]); @@ -2110,7 +2110,7 @@ void downtown_state::metafox(machine_config &config) M68000(config, m_maincpu, 16000000/2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16000000/8); // 2 MHz + W65C02(config, m_subcpu, 16000000/8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::metafox_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); diff --git a/src/mame/skeleton/textelcomp.cpp b/src/mame/skeleton/textelcomp.cpp index 852bffae17f..f68dbf0ba1b 100644 --- a/src/mame/skeleton/textelcomp.cpp +++ b/src/mame/skeleton/textelcomp.cpp @@ -7,7 +7,7 @@ *******************************************************************************/ #include "emu.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/input_merger.h" #include "machine/6522via.h" #include "machine/mos6551.h" @@ -325,10 +325,10 @@ INPUT_PORTS_END void textelcomp_state::textelcomp(machine_config &config) { - M65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) + G65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) m_maincpu->set_addrmap(AS_PROGRAM, &textelcomp_state::mem_map); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m65sc02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, G65SC02_IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 3.6864_MHz_XTAL / 2)); // G65SC22P-2 via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); diff --git a/src/mame/svision/svision.cpp b/src/mame/svision/svision.cpp index 573262426f5..2f7c65dd373 100644 --- a/src/mame/svision/svision.cpp +++ b/src/mame/svision/svision.cpp @@ -13,7 +13,7 @@ #include "bus/generic/carts.h" #include "bus/generic/slot.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/timer.h" #include "emupal.h" @@ -207,7 +207,7 @@ void svision_state::check_irq() bool irq = m_timer_shot && BIT(m_reg[BANK], 1); irq = irq || (m_dma_finished && BIT(m_reg[BANK], 2)); - m_maincpu->set_input_line(M65C02_IRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(W65C02_IRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE); } TIMER_CALLBACK_MEMBER(svision_state::timer) @@ -712,7 +712,7 @@ void svision_state::svision(machine_config &config) { svision_base(config); - M65C02(config, m_maincpu, 4'000'000); + W65C02(config, m_maincpu, 4'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &svision_state::program_map); SCREEN(config, m_screen, SCREEN_TYPE_LCD); diff --git a/src/mame/taito/tnzs.cpp b/src/mame/taito/tnzs.cpp index e1f982388cd..5bbb641ffd2 100644 --- a/src/mame/taito/tnzs.cpp +++ b/src/mame/taito/tnzs.cpp @@ -673,7 +673,6 @@ d23f=input port 1 value #include "machine/gen_latch.h" #include "machine/upd4701.h" #include "sound/dac.h" -#include "sound/samples.h" #include "sound/ymopm.h" #include "sound/ymopn.h" @@ -825,10 +824,10 @@ class kageki_state : public insectx_state public: kageki_state(const machine_config &mconfig, device_type type, const char *tag) : insectx_state(mconfig, type, tag) - , m_samples(*this, "samples") , m_dswa(*this, "DSWA") , m_dswb(*this, "DSWB") , m_csport_sel(0) + , m_scpu(*this, "samples") { } void kageki(machine_config &config) ATTR_COLD; @@ -847,20 +846,15 @@ class kageki_state : public insectx_state uint8_t csport_r(); void csport_w(uint8_t data); - SAMPLES_START_CB_MEMBER(init_samples); - void kageki_sub_map(address_map &map) ATTR_COLD; - - required_device m_samples; + void scpu_map(address_map& map) ATTR_COLD; + void scpu_io_map(address_map& map) ATTR_COLD; required_ioport m_dswa; required_ioport m_dswb; - // sound-related - std::unique_ptr m_sampledata[MAX_SAMPLES]; - int m_samplesize[MAX_SAMPLES]{}; - int m_csport_sel; + required_device m_scpu; }; @@ -1422,38 +1416,6 @@ void kabukiz_state::sound_bank_w(uint8_t data) } -SAMPLES_START_CB_MEMBER(kageki_state::init_samples) -{ - uint8_t *src = memregion("samples")->base() + 0x0090; - for (int i = 0; i < MAX_SAMPLES; i++) - { - int start = (src[(i * 2) + 1] * 256) + src[(i * 2)]; - uint8_t *scan = &src[start]; - int size = 0; - - // check sample length - while (*scan++ != 0x00) - size++; - - /* 2009-11 FP: should these be saved? */ - m_sampledata[i] = std::make_unique(size); - m_samplesize[i] = size; - - if (start < 0x100) - start = size = 0; - - // signed 8-bit sample to unsigned 8-bit sample convert - int16_t *dest = m_sampledata[i].get(); - scan = &src[start]; - for (int n = 0; n < size; n++) - { - *dest++ = (int8_t)((*scan++) ^ 0x80) * 256; - } - // logerror("samples num:%02X ofs:%04X lng:%04X\n", i, start, size); - } -} - - uint8_t kageki_state::csport_r() { int dsw, dsw1, dsw2; @@ -1461,7 +1423,7 @@ uint8_t kageki_state::csport_r() dsw1 = m_dswa->read(); dsw2 = m_dswb->read(); - switch (m_csport_sel) + switch (m_csport_sel & 3) { case 0x00: // DSW2 5,1 / DSW1 5,1 dsw = (((dsw2 & 0x10) >> 1) | ((dsw2 & 0x01) << 2) | ((dsw1 & 0x10) >> 3) | ((dsw1 & 0x01) >> 0)); @@ -1485,26 +1447,10 @@ uint8_t kageki_state::csport_r() void kageki_state::csport_w(uint8_t data) { - if (data > 0x3f) - { - // read dipsw port - m_csport_sel = (data & 0x03); - } - else - { - if (data < MAX_SAMPLES) - { - // play samples - m_samples->start_raw(0, m_sampledata[data].get(), m_samplesize[data], 7000); - LOG("VOICE:%02X PLAY", data); - } - else - { - // stop samples - m_samples->stop(0); - LOG("VOICE:%02X STOP", data); - } - } + m_csport_sel = data; + + if (!BIT(data, 6)) + m_scpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } void insectx_state::prompal_main_map(address_map &map) @@ -1590,6 +1536,18 @@ void kageki_state::kageki_sub_map(address_map &map) map(0xc002, 0xc002).portr("IN2"); } +void kageki_state::scpu_map(address_map& map) +{ + map(0x0000, 0xffff).rom(); +} + +void kageki_state::scpu_io_map(address_map& map) +{ + map.global_mask(0xff); + map(0x00, 0xff).w("dac", FUNC(dac_byte_interface::data_w)); + map(0x00, 0xff).lr8(NAME([this]() { return m_csport_sel; })); +} + void insectx_state::insectx_sub_map(address_map &map) { base_sub_map(map); @@ -2415,6 +2373,10 @@ void kageki_state::kageki(machine_config &config) /* basic machine hardware */ m_subcpu->set_addrmap(AS_PROGRAM, &kageki_state::kageki_sub_map); + Z80(config, m_scpu, XTAL(12'000'000) / 4); + m_scpu->set_addrmap(AS_PROGRAM, &kageki_state::scpu_map); + m_scpu->set_addrmap(AS_IO, &kageki_state::scpu_io_map); + /* sound hardware */ ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/4)); /* verified on pcb */ ymsnd.port_a_read_callback().set(FUNC(kageki_state::csport_r)); @@ -2424,10 +2386,7 @@ void kageki_state::kageki(machine_config &config) ymsnd.add_route(2, "speaker", 0.15); ymsnd.add_route(3, "speaker", 0.35); - SAMPLES(config, m_samples); - m_samples->set_channels(1); - m_samples->set_samples_start_callback(FUNC(kageki_state::init_samples)); - m_samples->add_route(ALL_OUTPUTS, "speaker", 1.0); + DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // HA17408P R2R DAC, TODO: check levels } void tnzsb_state::tnzsb(machine_config &config) diff --git a/src/mame/televideo/tv955.cpp b/src/mame/televideo/tv955.cpp index e2742322078..870208da10e 100644 --- a/src/mame/televideo/tv955.cpp +++ b/src/mame/televideo/tv955.cpp @@ -9,7 +9,7 @@ Skeleton driver for "third generation" TeleVideo terminals (905, 955, 9220). #include "emu.h" #include "tv955kb.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/input_merger.h" #include "machine/mos6551.h" #include "machine/nvram.h" @@ -146,7 +146,7 @@ INPUT_PORTS_END void tv955_state::tv955(machine_config &config) { - M65C02(config, m_maincpu, 19.3396_MHz_XTAL / 9); + W65C02(config, m_maincpu, 19.3396_MHz_XTAL / 9); m_maincpu->set_addrmap(AS_PROGRAM, &tv955_state::mem_map); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE); diff --git a/src/mame/tvgames/elan_eu3a05.cpp b/src/mame/tvgames/elan_eu3a05.cpp index dcff115046f..5b4d42d4042 100644 --- a/src/mame/tvgames/elan_eu3a05.cpp +++ b/src/mame/tvgames/elan_eu3a05.cpp @@ -211,7 +211,7 @@ Set 5043 bit 0 low #include "elan_eu3a05_a.h" #include "cpu/m6502/m6502.h" -//#include "cpu/m6502/m65c02.h" +//#include "cpu/m6502/w65c02.h" #include "emupal.h" #include "screen.h" #include "softlist_dev.h" diff --git a/src/mame/yamaha/ympsr16.cpp b/src/mame/yamaha/ympsr16.cpp index e0a0bdfa64d..c8a7c57a14a 100644 --- a/src/mame/yamaha/ympsr16.cpp +++ b/src/mame/yamaha/ympsr16.cpp @@ -23,7 +23,7 @@ #include "emu.h" //#include "bus/midi/midi.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" namespace { @@ -122,7 +122,7 @@ INPUT_PORTS_END void yamaha_psr16_state::psr16(machine_config &config) { - M65C02(config, m_maincpu, 5.5_MHz_XTAL / 4); // XTAL value from PSS-480; internal divider guessed + W65C02(config, m_maincpu, 5.5_MHz_XTAL / 4); // XTAL value from PSS-480; internal divider guessed m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr16_state::psr16_map); } diff --git a/src/osd/modules/debugger/debuggdbstub.cpp b/src/osd/modules/debugger/debuggdbstub.cpp index a6519a8e13e..36806dfefba 100644 --- a/src/osd/modules/debugger/debuggdbstub.cpp +++ b/src/osd/modules/debugger/debuggdbstub.cpp @@ -511,9 +511,9 @@ static const std::map gdb_register_maps = { "m6502", gdb_register_map_m6502 }, { "m6507", gdb_register_map_m6502 }, { "m6510", gdb_register_map_m6502 }, - { "m65c02", gdb_register_map_m6502 }, { "m65ce02", gdb_register_map_m6502 }, { "rp2a03", gdb_register_map_m6502 }, + { "w65c02", gdb_register_map_m6502 }, { "w65c02s", gdb_register_map_m6502 }, { "m6809", gdb_register_map_m6809 }, { "score7", gdb_register_map_score7 }, diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index b5c40510865..1d7e9fc6932 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -96,11 +96,11 @@ using util::BIT; #include "cpu/m6502/m6502d.h" #include "cpu/m6502/m6509d.h" #include "cpu/m6502/m6510d.h" -#include "cpu/m6502/m65c02d.h" #include "cpu/m6502/m65ce02d.h" #include "cpu/m6502/m740d.h" #include "cpu/m6502/r65c02d.h" #include "cpu/m6502/r65c19d.h" +#include "cpu/m6502/w65c02d.h" #include "cpu/m6502/xavixd.h" #include "cpu/m6502/xavix2000d.h" #include "cpu/m6800/6800dasm.h" @@ -525,7 +525,6 @@ static const dasm_table_entry dasm_table[] = { "m6502", le, 0, []() -> util::disasm_interface * { return new m6502_disassembler; } }, { "m6509", le, 0, []() -> util::disasm_interface * { return new m6509_disassembler; } }, { "m6510", le, 0, []() -> util::disasm_interface * { return new m6510_disassembler; } }, - { "m65c02", le, 0, []() -> util::disasm_interface * { return new m65c02_disassembler; } }, { "m65ce02", le, 0, []() -> util::disasm_interface * { return new m65ce02_disassembler; } }, { "m6800", be, 0, []() -> util::disasm_interface * { return new m680x_disassembler(6800); } }, { "m68000", be, 0, []() -> util::disasm_interface * { return new m68k_disassembler(m68k_disassembler::TYPE_68000); } }, @@ -727,6 +726,7 @@ static const dasm_table_entry dasm_table[] = { "vt50", le, 0, []() -> util::disasm_interface * { return new vt50_disassembler; } }, { "vt52", le, 0, []() -> util::disasm_interface * { return new vt52_disassembler; } }, { "vt61", le, -1, []() -> util::disasm_interface * { return new vt61_disassembler; } }, + { "w65c02", le, 0, []() -> util::disasm_interface * { return new w65c02_disassembler; } }, { "we32100", be, 0, []() -> util::disasm_interface * { return new we32100_disassembler; } }, { "x86_16", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 16; return new i386_disassembler(&i386_unidasm); } }, { "x86_32", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 32; return new i386_disassembler(&i386_unidasm); } },