diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin b/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin index 2e2b1813c8a..b86b2f303f9 100644 Binary files a/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin index 740cea66bf5..3aa4cd21700 100644 Binary files a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin index b12b9d953cf..a89c29f59b6 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin index cc98415c59f..4cbc9b2fb7b 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/gles/chains/hlsl/fs_distortion.bin b/bgfx/shaders/gles/chains/hlsl/fs_distortion.bin index 189ca2e97f5..b40b16a3052 100644 Binary files a/bgfx/shaders/gles/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/gles/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/gles/chains/hlsl/fs_post.bin b/bgfx/shaders/gles/chains/hlsl/fs_post.bin index 3969bd47936..185b92fa882 100644 Binary files a/bgfx/shaders/gles/chains/hlsl/fs_post.bin and b/bgfx/shaders/gles/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin b/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin index a4d54c9c932..1840874ea5a 100644 Binary files a/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin index 60cc2675a22..eda1c602e9f 100644 Binary files a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin and b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin b/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin index 22a66b575d2..fe7f7a4c495 100644 Binary files a/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/metal/chains/hlsl/fs_post.bin b/bgfx/shaders/metal/chains/hlsl/fs_post.bin index 2be5d0aaa6e..e261b0e6431 100644 Binary files a/bgfx/shaders/metal/chains/hlsl/fs_post.bin and b/bgfx/shaders/metal/chains/hlsl/fs_post.bin differ diff --git a/docs/config.txt b/docs/config.txt index 9561ee96ef5..25ba9844386 100644 --- a/docs/config.txt +++ b/docs/config.txt @@ -876,18 +876,21 @@ Core screen options Core vector options ------------------- --[no]antialias / -[no]aa +-beam_width_min +-beam_width_max - Enables antialiased line rendering for vector games. The default is ON - (-antialias). - --beam - - Sets the width of the vectors. This is a scaling factor against the - standard vector width. A value of 1.0 will keep the default vector - line width. Smaller values will reduce the width, and larger values + Sets the minimum and maximum width of the vectors. This is a scaling factor + against the standard vector width, which is interpolated between minimum and + maximum according to the beam's intensity. A value of 1.0 will keep the default + vector line width. Smaller values will reduce the width, and larger values will increase the width. The default is 1.0. +-beam_intensity_weight + + Applies an exponential weight to the minimum and maximum beam width. For positive + values the interpolated scaling factor will affect lines with higher intensity + more than lines with lower intensity. The default is 0.0. + -flicker Simulates a vector "flicker" effect, similar to a vector monitor that diff --git a/docs/hlsl.txt b/docs/hlsl.txt index 55a833d203a..00facb0649a 100644 --- a/docs/hlsl.txt +++ b/docs/hlsl.txt @@ -97,6 +97,7 @@ yiq_phase_count 2 Phase Count value for NTSC signal proces Vector Post-Processing Options ------------------------------ Name Default Values Description +vector_beam_smooth 0.0 The vector beam smoothness. (0.00 to 1.00) vector_length_scale 0.5 The maximum vector attenuation. (0.00 to 1.00) vector_length_ratio 0.5 The minimum vector length (vector length to screen size ratio) that is affected by the attenuation (0.000 to 1.000) @@ -115,7 +116,7 @@ bloom_lvl3_weight 0.16 Bloom level 3 weight. (1/4 smaller that bloom_lvl4_weight 0.08 Bloom level 4 weight. (1/4 smaller that level 3 target) (0.00 to 1.00) bloom_lvl5_weight 0.06 Bloom level 5 weight. (1/4 smaller that level 4 target) (0.00 to 1.00) bloom_lvl6_weight 0.04 Bloom level 6 weight. (1/4 smaller that level 5 target) (0.00 to 1.00) -bloom_lvl7_weight 0.02 Bloom level 7 weight. (1/4 smaller that level 6 target) +bloom_lvl7_weight 0.02 Bloom level 7 weight. (1/4 smaller that level 6 target) (0.00 to 1.00) bloom_lvl8_weight 0.01 Bloom level 8 weight. (1/4 smaller that level 7 target) (0.00 to 1.00) diff --git a/hash/bbca_cass.xml b/hash/bbca_cass.xml index 7f4c30586e5..a463cf8c40d 100644 --- a/hash/bbca_cass.xml +++ b/hash/bbca_cass.xml @@ -16,6 +16,17 @@ + + Adventure + 1983 + Micro Power + + + + + + + Airline 1983 @@ -50,14 +61,14 @@ - + Beebtrek - 1983 - Software For All + 1982 + Epsilon - - + + @@ -73,6 +84,17 @@ + + Cascade 50 + 1983 + Cascade + + + + + + + Cat and Mouse 1982 @@ -200,6 +222,17 @@ + + Micro Budget + 1983 + Micro Power + + + + + + + Munchyman 1981 @@ -267,7 +300,7 @@ - Reversi (Micro Power) + Reversi 1 (Micro Power) 1982 Micro Power @@ -277,6 +310,28 @@ + + Savage Pond (Bug Byte) + 1983 + Bug Byte + + + + + + + + + Savage Pond (ASP Software) + 198? + ASP Software + + + + + + + Seek 1982 @@ -288,6 +343,17 @@ + + Signals and Magic + 1982 + H&H Software + + + + + + + Space Invaders 16K 1982 @@ -386,7 +452,7 @@ Word Sequencing 1983 - Acornsoft + Acornsoft/ESM @@ -398,7 +464,7 @@ Missing Signs 1983 - Acornsoft + Acornsoft/ESM diff --git a/hash/bbcb_cass.xml b/hash/bbcb_cass.xml index 7cce513ba03..d9eedfe691c 100644 --- a/hash/bbcb_cass.xml +++ b/hash/bbcb_cass.xml @@ -34,8 +34,8 @@ 1984 Incentive - - + + @@ -75,7 +75,7 @@ 3D Dotty - 198? + 1987 Blue Ribbon @@ -101,7 +101,7 @@ Software Invasion - + @@ -118,7 +118,7 @@ - 3D Munchy (Blue Ribbon Games 1) + 3D Munchy (Blue Ribbon) 1985 Blue Ribbon @@ -235,15 +235,15 @@ 1983 Doctor Soft - - - + + + - - - + + + @@ -261,7 +261,7 @@ 9 Classic Card and Board Games Vol.2 - 198? + 1986 Database @@ -304,7 +304,7 @@ - Adventure 1 - AdventureLand + Adventure 1: AdventureLand 198? Adventure Soft @@ -315,8 +315,8 @@ - Adventure 10 - Savage Island pt.1 - 198? + Adventure 10: Savage Island Part I + 1984 Adventure Soft @@ -326,8 +326,8 @@ - Adventure 11 - Savage Island pt.2 - 198? + Adventure 11: Savage Island Part II + 1984 Adventure Soft @@ -337,7 +337,7 @@ - Adventure 13 - Sorceror Claymorgue Castle + Adventure 13: Sorceror of Claymorgue Castle 198? Adventure Soft @@ -348,7 +348,7 @@ - Adventure 2 - Pirate Adventure + Adventure 2: Pirate Adventure 198? Adventure Soft @@ -359,7 +359,7 @@ - Adventure 3 - Secret Mission + Adventure 3: Secret Mission 198? Adventure Soft @@ -370,7 +370,7 @@ - Adventure 4 - Voodoo Castle + Adventure 4: Voodoo Castle 198? Adventure Soft @@ -381,7 +381,7 @@ - Adventure 5 - The Count + Adventure 5: The Count 198? Adventure Soft @@ -392,7 +392,7 @@ - Adventure 6 - Strange Odyssey + Adventure 6: Strange Odyssey 198? Adventure Soft @@ -403,7 +403,7 @@ - Adventure 7 - Mystery Funhouse + Adventure 7: Mystery Funhouse 198? Adventure Soft @@ -414,7 +414,7 @@ - Adventure 8 - Pyramid of Doom + Adventure 8: Pyramid of Doom 198? Adventure Soft @@ -425,7 +425,7 @@ - Adventure 9 - Ghost Town + Adventure 9: Ghost Town 198? Adventure Soft @@ -435,25 +435,14 @@ - - Adventure - 1983 - Micro Power - - - - - - - Adventure Quest - 1983 + 1982 Level 9 Computing - + @@ -538,12 +527,12 @@ Alien 8 - 1985 + 1984 Ultimate - + @@ -584,7 +573,7 @@ Alien From Outta Space - 198? + 1984 Incentive @@ -607,7 +596,7 @@ Alphatron - 198? + 1984 Tynesoft @@ -659,11 +648,11 @@ Android Attack - 1983 + 1982 Computer Concepts - + @@ -733,7 +722,7 @@ Antix - 19?? + 1984 Voyager @@ -769,15 +758,26 @@ 1983 Software Invasion + + + + + + - - - - + + + + Apple Pie + 1984 + Visions + + + @@ -810,15 +810,15 @@ Acornsoft - - + + Area Radar Controller - 198? + 1983 Software For All @@ -918,12 +918,12 @@ Atic Atac - 1983 + 1984 Ultimate - + @@ -1008,7 +1008,7 @@ Awari - 1983 + 1982 CSL Microdata @@ -1061,7 +1061,7 @@ Ballistix 1989 - Superior Software + Superior Software/Acornsoft @@ -1092,7 +1092,7 @@ - Banana Man (Blue Ribbon Games 1) + Banana Man (Blue Ribbon) 1985 Blue Ribbon @@ -1103,7 +1103,7 @@ - Banana Man (MRM Software) + Banana Man 1983 MRM Software @@ -1138,7 +1138,7 @@ Barbarian 2 1989 - Superior Software + Superior Software/Acornsoft @@ -1148,8 +1148,8 @@ Barbarian - 1987 - Superior Software + 1988 + Superior Software/Acornsoft @@ -1178,7 +1178,7 @@ Baron 1989 - Superior Software + Superior Software/Acornsoft @@ -1210,7 +1210,7 @@ Battlefields - 198? + 1985 BBC Soft @@ -1268,8 +1268,8 @@ 1983 Lothlorien - - + + @@ -1290,8 +1290,8 @@ 1984 Mirrorsoft-Ivan Berg - - + + @@ -1312,8 +1312,8 @@ 1984 U.S. Gold - - + + @@ -1364,11 +1364,11 @@ Beebtrek - 1982 - Epsilon + 1983 + Software For All - - + + @@ -1458,13 +1458,13 @@ - + - + @@ -1581,6 +1581,30 @@ + + Boffin + 1985 + Addictive + + + + + + + + + + Boffin 2 + 1985 + Addictive + + + + + + + + Bomber Baron 198? @@ -1606,7 +1630,7 @@ Bone Cruncher (Play It Again Sam 7) 1989 - Superior Software + Superior Software/Acornsoft @@ -1620,7 +1644,7 @@ Superior Software - + @@ -1670,6 +1694,17 @@ + + Bouncer (A&F) + 1983 + A&F Software + + + + + + + Bounty Bob Strikes Back 1986 @@ -1687,15 +1722,15 @@ Acornsoft - - + + Bozo the Brave - 198? + 1985 Tynesoft @@ -1717,7 +1752,7 @@ Brainstorm - 198? + 1984 Virgin Games @@ -1743,8 +1778,8 @@ 1987 CDS - - + + @@ -1803,8 +1838,8 @@ - Broadway Boogie and Classics - 19?? + The Broadway Boogie and Classics + 1983 Broadway Electronics @@ -1830,7 +1865,7 @@ Tynesoft - + @@ -1849,7 +1884,7 @@ Bug Blaster (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -1858,7 +1893,7 @@ - Bug Blaster (Alligata) + Bug Blaster 1983 Alligata @@ -1879,6 +1914,17 @@ + + Bug Eyes + 1985 + Icon + + + + + + + Bullseye 1984 @@ -1926,7 +1972,7 @@ Camelot 1989 - Superior Software + Superior Software/Acornsoft @@ -1951,8 +1997,8 @@ Acornsoft - - + + @@ -1970,19 +2016,8 @@ - - Cascade 50 - 198? - Cascade - - - - - - - - Castle Assault (Blue Ribbon Games 1) + Castle Assault (Blue Ribbon) 1985 Blue Ribbon @@ -2060,8 +2095,8 @@ Acornsoft - - + + @@ -2084,7 +2119,7 @@ Micro Power - + @@ -2117,7 +2152,7 @@ Icon - + @@ -2337,12 +2372,12 @@ Chess (Micro Power) - 198? + 1983 Micro Power - - + + @@ -2383,18 +2418,18 @@ Chip Buster - 198? + 1985 Software Invasion - + Christmas Crackers - 198? + 1983 Database @@ -2450,7 +2485,7 @@ Citadel (Play It Again Sam 1) 1987 - Superior Software + Superior Software/Acornsoft @@ -2464,7 +2499,7 @@ Superior Software - + @@ -2526,6 +2561,17 @@ + + Classic Compendium + 1984 + Database + + + + + + + Clogger 1988 @@ -2584,18 +2630,18 @@ Colossal Adventure - 1983 + 1982 Level 9 Computing - + - Colossus 4 Bridge + Colossus Bridge 4 1988 CDS @@ -2606,8 +2652,8 @@ - Colossus 4 Chess - 1988 + Colossus Chess 4 + 1986 CDS @@ -2622,8 +2668,8 @@ Durell - - + + @@ -2650,6 +2696,102 @@ + + The Complete BBC + 1986 + Audiogenic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Complete BBC (alt) + 1986 + Audiogenic + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 Computer Hits + 1985 + Beau Jolly + + + + + + + + + + + + + + Complete Home Entertainment Centre 198? @@ -2711,8 +2853,9 @@ Concentration - 198? + 1983 ASP Software + @@ -2766,7 +2909,7 @@ Conquering Everest - 198? + 1983 ASP Software @@ -2799,11 +2942,11 @@ Contraption - 198? + 1985 Icon - + @@ -2863,10 +3006,28 @@ + + Cosmic Battlezones + 1986 + Ultimate + + + + + + + + + + + + + + Cosmic Camouflage 1988 - Superior Software + Superior Software/Acornsoft @@ -2960,7 +3121,7 @@ - Cowboy Shootout + Cowboy Shoot-Out 1983 Micro Power @@ -3032,8 +3193,8 @@ Acornsoft - - + + @@ -3051,12 +3212,23 @@ Cribbage - 198? + 1982 Superior Software - + + + + + + + Cricket + 1986 + Bug Byte + + + @@ -3064,7 +3236,8 @@ Crime & Detection Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -3086,7 +3259,7 @@ CroakIt - 19?? + 1983 Kerian @@ -3120,11 +3293,11 @@ Crystal Castles - 1983 - Atarisoft + 1986 + U.S. Gold - - + + @@ -3135,8 +3308,8 @@ Acornsoft - - + + @@ -3161,7 +3334,7 @@ Cutter - 19?? + 198? Voyager @@ -3184,7 +3357,7 @@ Cyborg Warriors 1991 - Superior Software + Superior Software/Acornsoft @@ -3205,18 +3378,18 @@ Cylon Attack (A&F Software) - 1985 + 1983 A&F Software - + Cylon Invasion - 19?? + 1985 Tynesoft @@ -3278,17 +3451,17 @@ Daredevil Denis - 1984 + 1983 Visions - + - Darts (Blue Ribbon Games 2) + Darts (Blue Ribbon) 1985 Blue Ribbon @@ -3300,7 +3473,7 @@ Darts (MRM Software) - 198? + 1984 MRM Software @@ -3323,7 +3496,8 @@ The Dating Game 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -3376,12 +3550,12 @@ - Death Star (Superior Software) + Death Star 1985 Superior Software - + @@ -3392,8 +3566,8 @@ Acornsoft - - + + @@ -3471,7 +3645,7 @@ Denis Through the Drinking Glass - 198? + 1984 ASS @@ -3482,7 +3656,7 @@ Depot Master Finsbury Park - 198? + 1989 Ashley Greenup @@ -3493,7 +3667,7 @@ Depot Master Old Oak Common - 198? + 1989 Ashley Greenup @@ -3536,7 +3710,7 @@ - Diamond Mine (Blue Ribbon Games 2) + Diamond Mine (Blue Ribbon) 1985 Blue Ribbon @@ -3571,8 +3745,8 @@ Dictator - 198? - DK Tronics + 1983 + DK'Tronics @@ -3642,7 +3816,7 @@ Doctor Who The First Adventure - 198? + 1983 BBC Soft @@ -3730,7 +3904,7 @@ Dragon Rider - 198? + 1982 Salamander @@ -3741,7 +3915,7 @@ Dragons Tooth - 198? + 1984 Incentive @@ -3764,7 +3938,7 @@ Draughts (Computer Concepts) - 198? + 1983 Computer Concepts @@ -3775,7 +3949,7 @@ Draughts (Logic Systems) - 198? + 1982 Logic Systems @@ -3834,8 +4008,8 @@ Acornsoft - - + + @@ -3862,13 +4036,24 @@ + + Dune Rider + 1984 + Micro Power + + + + + + + Dungeon Adventure - 1983 + 1982 Level 9 Computing - + @@ -3917,6 +4102,17 @@ + + Early Learning + 1982 + BBC Soft + + + + + + + Eastwood Manor 19?? @@ -4009,7 +4205,7 @@ Elixir (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -4020,7 +4216,7 @@ Elixir 1987 - Superior Software + Superior Software/Acornsoft @@ -4067,7 +4263,7 @@ Domark - + @@ -4120,9 +4316,16 @@ Estra 198? Firebird - + + - + + + + + + + @@ -4185,7 +4388,7 @@ Exile 1988 - Superior Software + Superior Software/Acornsoft @@ -4205,8 +4408,8 @@ - Eye of Zolton - 198? + The Eye of Zolton + 1983 Softek @@ -4215,6 +4418,24 @@ + + Fab Four Vol.1 + 1989 + Audiogenic + + + + + + + + + + + + + + Factfile 500 - Junior General Knowledge 1985 @@ -4262,7 +4483,7 @@ Fall of Rome - 198? + 1984 ASP Software @@ -4288,7 +4509,7 @@ Firebird - + @@ -4309,8 +4530,8 @@ 1983 Micro Power - - + + @@ -4416,9 +4637,9 @@ - Fire Track + FireTrack 1987 - Aardvark + Electric Dreams @@ -4451,7 +4672,7 @@ Fistful of Fun - 198? + 1985 Alligata @@ -4493,6 +4714,24 @@ + + Five Star Games III + 198? + Beau Jolly + + + + + + + + + + + + + + Five Stones of Anadon 1983 @@ -4597,7 +4836,7 @@ Fortress (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -4610,8 +4849,8 @@ 1984 Pace - - + + @@ -4629,7 +4868,7 @@ Frankenstein 2000 (Atlantis) - 198? + 1987 Atlantis @@ -4639,7 +4878,7 @@ - Frankenstein 2000 (Icon) + Frankenstein 2000 1985 Icon @@ -4892,7 +5131,7 @@ Tynesoft - + @@ -4980,7 +5219,7 @@ Galaforce 2 1988 - Superior Software + Superior Software/Acornsoft @@ -5171,8 +5410,8 @@ 1984 Micro Power - - + + @@ -5217,8 +5456,8 @@ Acornsoft - - + + @@ -5258,7 +5497,7 @@ Firebird - + @@ -5330,8 +5569,8 @@ - Grab It - 198? + Grabit + 1984 Voyager @@ -5363,8 +5602,8 @@ - - The Graphic Adventure Creator + + The Adventure Creator 1986 Incentive @@ -5381,8 +5620,8 @@ - - Graphic Adventure Creator (Alt) + + The Graphic Adventure Creator 1986 Incentive @@ -5393,9 +5632,9 @@ - Great Britain Ltd + Great Britain Limited 1983 - Hessel + Simon W. Hessel @@ -5430,8 +5669,8 @@ 1985 Imagine - - + + @@ -5547,7 +5786,7 @@ - Guy in the Hat (Blue Ribbon Games 2) + Guy in the Hat (Blue Ribbon) 1985 Blue Ribbon @@ -5580,8 +5819,8 @@ - Hacker2000 - 198? + Hacker 2000 + 1984 Micrograf @@ -5593,7 +5832,7 @@ Halleys Comet 19?? - Basil Blackwell + Basil Blackwell Ltd @@ -5614,7 +5853,7 @@ Hangman - 198? + 1985 Blue Ribbon @@ -5623,20 +5862,9 @@ - - Happy Numbers - 198? - Bourne Educational Software - - - - - - - - Hareraiser Finale - 198? + Hareraiser (Finale) + 1984 Haresoft @@ -5646,8 +5874,8 @@ - Hareraiser - 198? + Hareraiser (Prelude) + 1984 Haresoft @@ -5659,7 +5887,7 @@ Harlequin 1984 - Haresoft + Kansas @@ -5667,6 +5895,17 @@ + + Haunted Abbey + 1984 + A&F Software + + + + + + + Heathrow ATC 1984 @@ -5772,7 +6011,8 @@ History Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -5793,7 +6033,7 @@ Hobgoblin 2 - 19?? + 1990 Atlantis @@ -5804,7 +6044,7 @@ Hobgoblin - 19?? + 1989 Atlantis @@ -5826,7 +6066,7 @@ Holed Out Extra Courses Vol.1 - 1990 + 1989 4th Dimension @@ -5837,7 +6077,7 @@ Holed Out Extra Courses Vol.2 - 1990 + 1989 4th Dimension @@ -5885,8 +6125,8 @@ Acornsoft - - + + @@ -5897,15 +6137,15 @@ Acornsoft - - + + Horror Castle - 198? + 1983 A&F Software @@ -5915,12 +6155,12 @@ - Horse Lord - 198? + The Horse Lord + 1984 Century - + @@ -5949,7 +6189,7 @@ Howzat - 198? + 1983 A&F Software @@ -5993,12 +6233,12 @@ - Hunchback Mk.2 + Hunchback (Re-issue) 1984 Superior Software - - + + @@ -6088,6 +6328,18 @@ + + ..I Do + 1983 + Acornsoft/Ivan Berg + + + + + + + + Identify Europe 198? @@ -6125,7 +6377,7 @@ Imogen (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -6157,7 +6409,7 @@ Impossible Mission - 1985 + 1986 U.S. Gold @@ -6224,7 +6476,7 @@ Inheritance 1983 - Hessel + Simon W. Hessel @@ -6285,7 +6537,7 @@ Intruders - 198? + 1983 Interceptor @@ -6422,8 +6674,8 @@ Acornsoft - - + + @@ -6451,19 +6703,19 @@ - Jetpac + Jet-Pac 1984 Ultimate - - + + - Jet Power Jack + Jet-Power Jack 1984 Micro Power @@ -6490,7 +6742,7 @@ Tynesoft - + @@ -6531,23 +6783,23 @@ Johnny Reb - 1984 + 1983 Lothlorien - + Joust - 198? + 1984 Aardvark - + @@ -6733,8 +6985,8 @@ 1984 Micro Power - - + + @@ -6745,8 +6997,8 @@ Acornsoft - - + + @@ -6813,7 +7065,19 @@ - + + + + + + + Knight Lore (Ricochet) + 198? + Ricochet + + + + @@ -6879,8 +7143,8 @@ Acornsoft - - + + @@ -6897,8 +7161,8 @@ - Lander - 198? + Asteroid Lander + 1982 ASP Software @@ -6920,7 +7184,7 @@ Land of Tezrel - 19?? + 1984 Omen @@ -6943,7 +7207,7 @@ Laser Reflex - 198? + 1984 Talent @@ -6956,7 +7220,7 @@ The Last Ninja 2 1988 - Superior Software + Superior Software/Acornsoft @@ -6967,7 +7231,7 @@ The Last Ninja 1988 - Superior Software + Superior Software/Acornsoft @@ -6976,7 +7240,7 @@ - Last of the Free + The Last of the Free 1986 Audiogenic @@ -7143,7 +7407,7 @@ Locks of Luck - 19?? + 1986 Magus @@ -7176,7 +7440,7 @@ Logic1 - 19?? + 1983 Shiva @@ -7248,7 +7512,7 @@ - The Lord of the Rings + Lord of the Rings 1986 Melbourne House @@ -7313,7 +7577,7 @@ Lunar Lander - 1983 + 1982 A&F Software @@ -7383,8 +7647,8 @@ Acornsoft - - + + @@ -7415,7 +7679,7 @@ Making the Most of the Micro - 198? + 1983 BBC Soft @@ -7426,7 +7690,7 @@ Manage - 198? + 1983 CCS @@ -7452,18 +7716,7 @@ Software Projects - - - - - - - Map Rally - 198? - Bourne Educational Software - - - + @@ -7514,12 +7767,12 @@ Match Day - 1984 + 1985 Ocean - + @@ -7630,8 +7883,8 @@ Acornsoft - - + + @@ -7653,8 +7906,8 @@ Acornsoft - - + + @@ -7664,17 +7917,17 @@ 1986 Qualsoft - - - - - - + + + + + + @@ -7700,24 +7953,13 @@ - - Micro Budget - 1983 - Micro Power - - - - - - - Microcosm - 1984 + 1985 Firebird - + @@ -7801,8 +8043,8 @@ - Mined Out - 198? + Mined-Out + 1983 Quicksilva @@ -7817,13 +8059,13 @@ Alternative - + - Mineshaft (Durell) + Mineshaft 1984 Durell @@ -7846,13 +8088,13 @@ - Missile Base v2.0 + Missile Base 1982 Acornsoft - - + + @@ -7948,7 +8190,7 @@ Monsters (Play It Again Sam 11) 1989 - Superior Software + Superior Software/Acornsoft @@ -8041,8 +8283,8 @@ 1983 Micro Power - - + + @@ -8093,7 +8335,7 @@ Firebird - + @@ -8123,7 +8365,7 @@ Mr Wiz (Play It Again Sam 8) 1988 - Superior Software + Superior Software/Acornsoft @@ -8223,7 +8465,7 @@ Music Tools - 19?? + 1986 Duckworth @@ -8328,8 +8570,8 @@ - Mystery of the Lost Sheep - 19?? + The Mystery of the Lost Sheep + 198? Central Computing @@ -8350,8 +8592,8 @@ 1984 Alligata - - + + @@ -8370,7 +8612,7 @@ Network (Play It Again Sam 15) 1991 - Superior Software + Superior Software/Acornsoft @@ -8424,7 +8666,7 @@ - Nightmare Maze (Blue Ribbon Games 1) + Nightmare Maze (Blue Ribbon) 1985 Blue Ribbon @@ -8440,7 +8682,7 @@ MRM Software - + @@ -8514,8 +8756,8 @@ Ogles - 19?? - The Games Master + 1983 + Games Machine @@ -8536,7 +8778,7 @@ Omega Orb - 1986 + 1987 Audiogenic @@ -8558,7 +8800,7 @@ Orpheus - 198? + 1985 A&F Software @@ -8670,7 +8912,7 @@ Palace of Magic 1987 - Superior Software + Superior Software/Acornsoft @@ -8681,7 +8923,7 @@ Pandemonium (Play It Again Sam 13) 1990 - Superior Software + Superior Software/Acornsoft @@ -8736,11 +8978,11 @@ Paras - 1984 + 1983 Lothlorien - + @@ -8813,11 +9055,11 @@ Pengwyn - 1984 + 1983 Postern - - + + @@ -8836,7 +9078,7 @@ Percy Penguin (Play It Again Sam 13) 1990 - Superior Software + Superior Software/Acornsoft @@ -8858,7 +9100,7 @@ Perplexity 1989 - Superior Software + Superior Software/Acornsoft @@ -8905,8 +9147,8 @@ Acornsoft - - + + @@ -8980,7 +9222,7 @@ Pipeline 1989 - Superior Software + Superior Software/Acornsoft @@ -9019,7 +9261,7 @@ - Plan B 2 + Plan B2 1987 Bug Byte @@ -9075,7 +9317,7 @@ Planetfall - 198? + 1983 ASP Software @@ -9101,8 +9343,8 @@ Acornsoft - - + + @@ -9144,7 +9386,7 @@ Plegaron People Eaters - 198? + 1983 RH Software @@ -9272,8 +9514,8 @@ - Pools Winner 2 - 198? + Pools Winner II + 1987 Selec @@ -9284,7 +9526,7 @@ Pools Winner - 198? + 1985 Selec @@ -9305,8 +9547,8 @@ - Postman - 198? + Pete the Plastered Postman + 1982 ASP Software @@ -9329,7 +9571,7 @@ Predator 1988 - Superior Software + Superior Software/Acornsoft @@ -9354,7 +9596,7 @@ Codemasters - + @@ -9405,8 +9647,8 @@ Proteanse - 198? - DK Tronics + 1983 + DK'Tronics @@ -9438,7 +9680,7 @@ - Psycastria 2 (Audiogenic) + Psycastria 2 1989 Audiogenic @@ -9454,7 +9696,7 @@ Audiogenic - + @@ -9473,7 +9715,7 @@ Pyramid Painter - 198? + 1984 Thor @@ -9495,7 +9737,7 @@ - Q Man (Blue Ribbon Games 1) + Q Man (Blue Ribbon) 1985 Blue Ribbon @@ -9517,7 +9759,7 @@ - Q Man's Brother (Blue Ribbon Games 2) + Q Man's Brother (Blue Ribbon) 1985 Blue Ribbon @@ -9541,7 +9783,7 @@ Quest (Superior Software) 1988 - Superior Software + Superior Software/Acornsoft @@ -9550,7 +9792,7 @@ - Quest for the Holy Grail + The Quest for the Holy Grail 198? Epic @@ -9597,7 +9839,7 @@ Qwak 1989 - Superior Software + Superior Software/Acornsoft @@ -9640,7 +9882,7 @@ Ravenskull - 1987 + 1986 Superior Software @@ -9660,13 +9902,24 @@ + + Red Arrows + 1985 + Database + + + + + + + Red Coats - 1985 + 1984 Lothlorien - - + + @@ -9711,6 +9964,17 @@ + + Repton + 1985 + Superior Software + + + + + + + Repton (Blue Ribbon) 198? @@ -9766,17 +10030,6 @@ - - Repton - 1985 - Superior Software - - - - - - - Repton Around the World in 40 Screens 1987 @@ -9791,7 +10044,7 @@ Repton Infinity 1988 - Superior Software + Superior Software/Acornsoft @@ -9802,7 +10055,7 @@ Repton Thru Time 1988 - Superior Software + Superior Software/Acornsoft @@ -9854,6 +10107,17 @@ + + Reversi/Gomoku + 1982 + Pro Software + + + + + + + Reversi (Superior Software) 1983 @@ -9884,7 +10148,7 @@ - + @@ -9916,7 +10180,7 @@ Ricochet 1989 - Superior Software + Superior Software/Acornsoft @@ -10137,8 +10401,8 @@ 1983 Lothlorien - - + + @@ -10189,7 +10453,7 @@ RTC Birmingham - 198? + 1987 Dee-Kay @@ -10243,8 +10507,8 @@ - RTC Limestreet - 198? + RTC Lime Street + 1985 Dee-Kay @@ -10333,8 +10597,8 @@ Ultimate - - + + @@ -10374,11 +10638,11 @@ Saloon Sally - 198? + 1983 Psion - - + + @@ -10396,7 +10660,7 @@ Savage Island Part One - 19?? + 198? Tynesoft @@ -10407,7 +10671,7 @@ Savage Island Part Two - 19?? + 198? Tynesoft @@ -10416,32 +10680,11 @@ - - Savage Pond (Bug Byte) - 1983 - Bug Byte - - - - - - - - - Savage Pond (ASP Software) - 198? - ASP Software - - - - - - - Science Fiction Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -10473,7 +10716,7 @@ - Screwball (Blue Ribbon Games 2) + Screwball (Blue Ribbon) 1985 Blue Ribbon @@ -10518,7 +10761,7 @@ Sea Queen - 19?? + 1988 Unreleased @@ -10551,7 +10794,7 @@ Secret Sam 1 (Blue Ribbon) - 198? + 1985 Blue Ribbon @@ -10561,7 +10804,7 @@ - Secret Sam 1 (MRM Software) + Secret Sam 1 1983 MRM Software @@ -10572,8 +10815,8 @@ - Secret Sam 2 - 198? + Secret Sam 2 (Blue Ribbon) + 1985 Blue Ribbon @@ -10610,8 +10853,8 @@ Acornsoft - - + + @@ -10661,7 +10904,7 @@ - Shedmaster Bounds Greene + Shedmaster Bounds Green 1987 Dee-Kay @@ -10716,20 +10959,9 @@ - - Signals and Magic - 198? - H&H Software - - - - - - - Sim - 198? + 1984 Viper @@ -10741,7 +10973,7 @@ Sim City 1990 - Superior Software + Superior Software/Acornsoft @@ -10766,7 +10998,7 @@ Godax - + @@ -10807,7 +11039,7 @@ Slicker Puzzle 198? - DK Tronics + DK'Tronics @@ -10816,7 +11048,7 @@ - Sliding Block Puzzles v1.0 + Sliding-Block Puzzles v1.0 1982 Acornsoft @@ -10828,7 +11060,7 @@ - Sliding Block Puzzles v2.3 + Sliding-Block Puzzles v2.3 1982 Acornsoft @@ -10953,7 +11185,7 @@ Snapper (Play It Again Sam 7) 1989 - Superior Software + Superior Software/Acornsoft @@ -10967,8 +11199,8 @@ Acornsoft - - + + @@ -10979,8 +11211,8 @@ Acornsoft - - + + @@ -11003,8 +11235,8 @@ Acornsoft - - + + @@ -11024,7 +11256,7 @@ Snorter 198? - Beebug) + Beebug @@ -11056,7 +11288,7 @@ Soccer Supremo - 198? + 1984 Qualsoft @@ -11113,7 +11345,7 @@ Space Adventure (Pro) - 1982 + 1983 Pro Software @@ -11123,9 +11355,9 @@ - Space Adventure - 198? - Virgin + Space Adventure (Virgin) + 1983 + Virgin Games @@ -11135,7 +11367,7 @@ Space Adventure 1 - 198? + 1983 First Byte @@ -11175,8 +11407,8 @@ MP Software - - + + @@ -11199,7 +11431,7 @@ Amcom - + @@ -11364,7 +11596,7 @@ Spellbinder 1987 - Superior Software + Superior Software/Acornsoft @@ -11374,8 +11606,8 @@ Spellbound Beseiged - 198? - Sullis + 1983 + Sulis Software @@ -11403,11 +11635,11 @@ Sphere of Destiny - 1986 + 1987 Audiogenic - + @@ -11418,8 +11650,8 @@ Acornsoft - - + + @@ -11459,7 +11691,7 @@ Spitfire Flight Simulator - 198? + 1983 Alligata @@ -11529,7 +11761,7 @@ Spycat 1988 - Superior Software + Superior Software/Acornsoft @@ -11554,7 +11786,7 @@ Tynesoft - + @@ -11587,7 +11819,7 @@ Software Invasion - + @@ -11620,7 +11852,7 @@ Firebird - + @@ -11660,7 +11892,7 @@ Starforce Lander - 198? + 1983 First Byte @@ -11717,7 +11949,7 @@ Star Port 1990 - Superior Software + Superior Software/Acornsoft @@ -11731,7 +11963,7 @@ Bubble Bus - + @@ -11753,8 +11985,8 @@ Acornsoft - - + + @@ -11810,15 +12042,15 @@ 1984 Superior Software - - + + Star Trader - 198? + 1983 First Byte @@ -11830,7 +12062,7 @@ Startrek - 198? + 1982 Logic Systems @@ -11885,7 +12117,7 @@ - Steve Davis Snooker (CDS) + Steve Davis Snooker 1986 CDS @@ -11897,8 +12129,9 @@ Stix - 198? + 1984 Supersoft + @@ -12069,7 +12302,7 @@ Sub Killer 198? - DK Tronics + DK'Tronics @@ -12129,6 +12362,17 @@ + + Summer Olympiad + 1988 + Tynesoft + + + + + + + Super-7 1983 @@ -12143,7 +12387,7 @@ Super Fruits 198? - DK Tronics + DK'Tronics @@ -12152,8 +12396,8 @@ - Supergolf - 198? + Super Golf + 1984 Squirrel Soft @@ -12175,7 +12419,7 @@ Super Hangman - 198? + 1982 I.J.K. @@ -12199,7 +12443,7 @@ Superior Soccer 1989 - Superior Software + Superior Software/Acornsoft @@ -12207,7 +12451,18 @@ - + + Superlife + 1982 + Golem + + + + + + + + Superman: The Game 1988 First Star @@ -12218,13 +12473,24 @@ + + Superman: The Man of Steel + 1989 + Tynesoft + + + + + + + Super Pool 1984 Software Invasion - + @@ -12286,6 +12552,17 @@ + + Swarm + 1982 + Computer Concepts + + + + + + + Swoop 1982 @@ -12345,7 +12622,7 @@ Tales of the Arabian Nights - 1983 + 1985 Interceptor @@ -12356,7 +12633,7 @@ Tank Attack (Gem) - 198? + 1983 Gem @@ -12378,7 +12655,7 @@ Tanks! - 1983 + 1982 Salamander @@ -12510,7 +12787,7 @@ Test Match v2 - 198? + 1983 CRL @@ -12528,7 +12805,7 @@ Test Match - 198? + 1983 CRL @@ -12600,24 +12877,6 @@ - - The Art Studio - 1989 - Impact - - - - - - - - - - - - - - The Atlantic Coast Express 198? @@ -12726,13 +12985,43 @@ + + The Gold Collection + 1987 + U.S. Gold + + + + + + + + + + + + + + + + + + + + + + + + + + The Hacker 198? Firebird - + @@ -12786,7 +13075,7 @@ The Magic Sword 1984 - Database + Database Software @@ -12807,11 +13096,11 @@ The Mine - 1984 + 1983 Micro Power - - + + @@ -12878,7 +13167,7 @@ Firebird - + @@ -12943,8 +13232,8 @@ 1986 Superior Software - - + + @@ -12960,18 +13249,6 @@ - - Thunderstruck 2: Mind Master - 1986 - Audiogenic - - - - - - - - Thunderstruck 1985 @@ -12984,6 +13261,17 @@ + + Thunderstruck 2: Mind Master + 1986 + Audiogenic + + + + + + + Time Lords 198? @@ -13177,7 +13465,7 @@ - + @@ -13404,8 +13692,8 @@ 1983 Bug Byte - - + + @@ -13450,8 +13738,8 @@ 1984 Icon - - + + @@ -13556,7 +13844,7 @@ Valley of the Pharaohs - 198? + 1983 First Byte @@ -13605,7 +13893,7 @@ Firebird - + @@ -13621,9 +13909,20 @@ + + Video's Revenge + 1985 + Budgie + + + + + + + Village of Lost Souls (Original) - 1987 + 1985 Magus @@ -13660,8 +13959,8 @@ Acornsoft - - + + @@ -13671,15 +13970,15 @@ 1983 Software Invasion - - + + Wall - 198? + 1983 Micro Power @@ -13777,25 +14076,25 @@ Melbourne House - + - The Way of the Exploding Fist v2 + The Way of the Exploding Fist (Richochet) 1985 - Melbourne House + Richochet - + Web Runner - 198? + 1983 Alligata @@ -13816,7 +14115,7 @@ - Weetabix Versus The Titchies + Weetabix versus The Titchies 1984 Romik @@ -13839,8 +14138,9 @@ West - 19?? + 198? Talent + @@ -13850,8 +14150,8 @@ Wet Zone - 19?? - Everise + 1985 + Everiss @@ -13861,7 +14161,7 @@ What's Eeyore's - 19?? + 1986 Magus @@ -13872,7 +14172,7 @@ Wheeler Dealer - 19?? + 1983 OIC @@ -13936,6 +14236,17 @@ + + Wizzy's Mansion + 1986 + Audiogenic + + + + + + + Whoopsy 1985 @@ -14010,7 +14321,7 @@ - + @@ -14131,7 +14442,7 @@ World Travel Game 1983 - Hessel + Simon W. Hessel @@ -14165,7 +14476,7 @@ Xadomy 1984 - Brassington + Brassington Enterprises @@ -14217,8 +14528,26 @@ + + Yes, Prime Minister + 1987 + Mosaic + + + + + + + + + + + + + + - Yie Ar Kung Fu 2 + Yie Ar Kung-Fu 2 198? Imagine @@ -14229,12 +14558,12 @@ - Yie Ar Kung Fu - 1984 + Yie Ar Kung-Fu + 1985 Imagine - + @@ -14462,8 +14791,8 @@ - Stock Market - 198? + Stockmarket + 1983 ASP Software @@ -14474,7 +14803,7 @@ Tax Calc - 198? + 1983 BBC Soft @@ -14531,6 +14860,17 @@ + + Amazing Ollie + 1983 + Storm Software + + + + + + + Animal, Vegetable, Mineral 1983 @@ -14545,7 +14885,7 @@ Basic Adventures in Space: The Alien Planet 198? - Glentop + Glentop Publishers @@ -14581,7 +14921,7 @@ Bert Boot 1984 - H.S.Software + Highlight Software @@ -14620,9 +14960,10 @@ - Biology + Revise GCE/CSE Biology 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -14630,9 +14971,20 @@ + + Biology 'O' Level + 1983 + Calisto + + + + + + + - Bird Watch - 198? + Birdwatch + 1984 Macdonald @@ -14641,6 +14993,17 @@ + + British Isles Geography Quiz + 1984 + Computer Market + + + + + + + Castles and Clowns 198? @@ -14887,6 +15250,17 @@ + + French Tutor + 1983 + Salamander + + + + + + + Fun School 2 (For 6-8 year olds) 1989 @@ -14931,6 +15305,17 @@ + + Happy Numbers + 198? + Bourne Educational Software + + + + + + + Hi Bouncer 198? @@ -14944,8 +15329,8 @@ Honey Logo - 198? - Glentop + 1985 + Glentop Publishers @@ -14966,8 +15351,8 @@ - Junior Maths Part1 - 198? + Junior Maths - Part 1 + 1986 Tynesoft @@ -14977,8 +15362,8 @@ - Junior Maths Part2 - 198? + Junior Maths - Part 2 + 1986 Tynesoft @@ -15021,9 +15406,42 @@ + + Letterbugs + 1983 + Highlight Software + + + + + + + + + Shakespeare Macbeth + 198? + Penguin Study Software + + + + + + + + + Map Rally + 198? + Bourne Educational Software + + + + + + + Maths Invaders - 198? + 1984 Stell @@ -15043,6 +15461,24 @@ + + First Steps with the Mr.Men + 1983 + Mirrorsoft + + + + + + + + + + + + + + Mr Men: Here and There 1985 @@ -15079,7 +15515,7 @@ Numeracy 2 - 198? + 1983 Shiva @@ -15113,7 +15549,7 @@ Quest - 198? + 1983 AUCBE @@ -15136,7 +15572,7 @@ Roadcraft 1 1984 - H.S.Software + Highlight Software @@ -15167,6 +15603,17 @@ + + Sortout + 1983 + Highlight Software + + + + + + + Spanish Gold 1983 @@ -15246,7 +15693,7 @@ Tops and Tails - 198? + 1985 Macmillian @@ -15262,6 +15709,17 @@ + + TownTest + 1983 + Silverlind + + + + + + + Tree Of Knowledge 1983 @@ -15277,7 +15735,7 @@ Twelfth Night 198? - Penguin + Penguin Study Software @@ -15285,6 +15743,19 @@ + + Viking England + 1984 + Fernleaf + + + + + + + + + Where 1982 @@ -15320,8 +15791,8 @@ Word Power - 198? - Sullis + 1983 + Sulis Software @@ -15420,7 +15891,7 @@ Assembly Language Programming Made Easy - 198? + 1983 Century @@ -15510,7 +15981,7 @@ - Artist (Blue Ribbon Games 3) + Artist (Blue Ribbon) 1985 Blue Ribbon @@ -15531,6 +16002,24 @@ + + The Art Studio + 1989 + Impact + + + + + + + + + + + + + + BBC Music Synthesizer 1983 @@ -15542,6 +16031,17 @@ + + Beeb-Art + 1982 + Quicksilva + + + + + + + Beeb Plot 198? @@ -15604,6 +16104,17 @@ + + Interactive 3D + 198? + Design Dynamics + + + + + + + Picture Maker 1983 @@ -15641,7 +16152,7 @@ - Paul Daniel's Magic Show + Paul Daniels' Magic Show 1984 Acornsoft @@ -15652,6 +16163,25 @@ + + LINKWORD Italian + 1983 + Acornsoft + + + + + + + + + + + + + + + LINKWORD Spanish 1984 @@ -16357,7 +16887,7 @@ Model B Computing Issue 10 - 198? + 1985 Argus Press Software diff --git a/hash/bbcb_flop_orig.xml b/hash/bbcb_flop_orig.xml index 37eb2c4b212..9e76d7adda6 100644 --- a/hash/bbcb_flop_orig.xml +++ b/hash/bbcb_flop_orig.xml @@ -268,7 +268,7 @@ - + @@ -636,7 +636,7 @@ Omega Orb - 1986 + 1987 Audiogenic @@ -815,7 +815,7 @@ Sphere of Destiny - 1986 + 1987 Audiogenic @@ -825,17 +825,17 @@ - Colossus 4 Chess - 1988 + Colossus Chess 4 + 1986 CDS - + - + @@ -1107,8 +1107,8 @@ - Yie Ar Kung Fu - 1984 + Yie Ar Kung-Fu + 1985 Imagine @@ -1460,7 +1460,7 @@ Phantom Combat (BBC Series) - 1985 + 1987 Doctor Soft @@ -1532,7 +1532,7 @@ - Diagnostics Disc + WE Diagnostics Utility Disc 1985 Watford Electronics @@ -1609,9 +1609,9 @@ - The Times Crosswords Vol.1 + The Times Computer Crosswords Vol.1 1988 - The Times + Akom Limited @@ -1988,7 +1988,7 @@ The Hobbit - 1983 + 1985 Melbourne House @@ -2346,7 +2346,7 @@ Nevyron - 1991 + 1990 4th Dimension @@ -2478,7 +2478,7 @@ Holed Out Extra Courses Vol.1 - 1990 + 1989 4th Dimension @@ -2489,7 +2489,7 @@ Holed Out Extra Courses Vol.2 - 1990 + 1989 4th Dimension @@ -3036,7 +3036,7 @@ Ravenskull - 1987 + 1986 Superior Software/Acornsoft @@ -4040,7 +4040,7 @@ The Teachers Cupboard - 198? + 1988 Sherston Software @@ -4257,7 +4257,7 @@ - + @@ -4355,7 +4355,7 @@ Animated Numbers - 198? + 1990 Sherston Software diff --git a/hash/bbcm_cass.xml b/hash/bbcm_cass.xml index 67b5cfc2992..45fb8fc5476 100644 --- a/hash/bbcm_cass.xml +++ b/hash/bbcm_cass.xml @@ -50,7 +50,7 @@ - Strykers Run + Stryker's Run 1986 Superior Software diff --git a/hash/bbcmc_flop.xml b/hash/bbcmc_flop.xml index 258a9407560..b6b62d634dd 100644 --- a/hash/bbcmc_flop.xml +++ b/hash/bbcmc_flop.xml @@ -10,6 +10,17 @@ + + Elite + 1986 + Superior Software/Acornsoft + + + + + + + BBC Master Compact Welcome Disc 1986 @@ -21,4 +32,182 @@ + + + + ViewPlot + 1986 + Acornsoft + + + + + + + + + + + + Animated Numbers + 1990 + Sherston Software + + + + + + + + + Connections + 1990 + Sherston Software + + + + + + + + + + + + + + + + + + + + + + Dreamtime + 1989 + Sherston Software + + + + + + + + + Mapventure + 1988 + Sherston Software + + + + + + + + + The Microbugs + 1989 + Sherston Software + + + + + + + + + + + + + + + + Space Mission Mada + 1986 + Sherston Software + + + + + + + + + + + + + + + + Stig of the Dump + 1986 + Sherston Software + + + + + + + + + Teachers' Cupboard + 1988 + Sherston Software + + + + + + + + + The Teddy Bears' Picnic + 1989 + Sherston Software + + + + + + + + + Teddy Bears' Rainy Day + 1993 + Sherston Software + + + + + + + + + Three Little Pigs at Home + 1992 + Sherston Software + + + + + + + + + + + C (Acornsoft) + 1987 + Acornsoft + + + + + + + + diff --git a/hash/e01_flop.xml b/hash/e01_flop.xml new file mode 100644 index 00000000000..c7dcdadd700 --- /dev/null +++ b/hash/e01_flop.xml @@ -0,0 +1,30 @@ + + + + + + + + + FileStore Initial Disc + 198? + Acorn + + + + + + + + + FileStore Utility Disc + 198? + Acorn + + + + + + + + diff --git a/hash/electron_cass.xml b/hash/electron_cass.xml index 82dd4236d26..da3d9d2cb04 100644 --- a/hash/electron_cass.xml +++ b/hash/electron_cass.xml @@ -340,7 +340,7 @@ Micro Power - + @@ -1302,7 +1302,7 @@ Cascade 50 - 1984 + 1983 Cascade @@ -1462,11 +1462,11 @@ Chess (Micro Power) - 1984 + 1983 Micro Power - + @@ -1484,7 +1484,7 @@ Chip Buster - 198? + 1985 Software Invasion @@ -1628,7 +1628,7 @@ Colossus Chess 4 - 1988 + 1986 CDS @@ -1689,7 +1689,7 @@ - Commando (Play It Again Sam-3) + Commando (Play It Again Sam 3) 1989 Superior Software/Acornsoft @@ -2029,7 +2029,7 @@ Dare Devil Dennis - 1984 + 1983 Visions @@ -3348,7 +3348,7 @@ Elite (Superior Software) - 198? + 1986 Superior Software/Acornsoft @@ -3636,8 +3636,8 @@ - Fire Track - 198? + FireTrack + 1989 Superior Software/Acornsoft @@ -5680,18 +5680,18 @@ Mexico 86 1986 Qualsoft - - - - - - - + + + + + + + @@ -6101,7 +6101,7 @@ Omega Orb - 1986 + 1987 Audiogenic @@ -6302,7 +6302,7 @@ Pengwyn - 1984 + 1983 Postern @@ -6818,7 +6818,7 @@ Ravenskull - 1987 + 1986 Superior Software @@ -6878,7 +6878,7 @@ Red Coats - 1985 + 1984 Lothlorien @@ -7524,7 +7524,7 @@ - Skirmish (Play It Again Sam-12) + Skirmish (Play It Again Sam 12) 1990 Superior Software/Acornsoft @@ -7847,7 +7847,7 @@ Sphere of Destiny - 1986 + 1987 Audiogenic @@ -9155,7 +9155,7 @@ The Mine - 1984 + 1983 Micro Power @@ -10295,8 +10295,8 @@ - Yie Ar Kung Fu - 1984 + Yie Ar Kung-Fu + 1985 Imagine @@ -10306,7 +10306,7 @@ - Yie Ar Kung Fu 2 + Yie Ar Kung-Fu 2 198? Imagine diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml index d8c95d30d87..5a2a3736bf2 100644 --- a/hash/fmtowns_cd.xml +++ b/hash/fmtowns_cd.xml @@ -1558,6 +1558,22 @@ User/save disks that can be created from the game itself are not included. + + Uchuu Kaitou Funny Bee + 1994 + Alice Soft + + + + + + + + + + + + Freeware Collection 1 1989 @@ -4266,7 +4282,7 @@ User/save disks that can be created from the game itself are not included. Fujitsu - + @@ -4315,6 +4331,77 @@ User/save disks that can be created from the game itself are not included. + + Ultima V: Warriors of Destiny + 1992 + Fujitsu + + + + + + + + + Ultima VI: The False Prophet + 1991 + Fujitsu + + + + + + + + + Ultima Trilogy I-II-III + 1990 + Fujitsu + + + + + + + + + Ultima Underworld: The Stygian Abyss + 1993 + Electronic Arts Victor + + + + + + + + + Ultima Underworld II: Labyrinth of Worlds + 1995 + Electronic Arts Victor + + + + + + + + + Uwaki na Anata + 1994 + HOP + + + + + + + + + + + + Volfied 1991 diff --git a/hash/gba.xml b/hash/gba.xml index b38bd4d18d3..e675da975de 100644 --- a/hash/gba.xml +++ b/hash/gba.xml @@ -1,4092 +1,31 @@ + - - - 2 Game Pack!: Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (Euro, USA) - 200? - DSI Games - - - - - - - - - + - - Ace Lightning (Euro) - 2002 - BBC Worldwide - - - - - - - - - - - - - - - Advance Wars (Euro) - 2001 - Nintendo - - - - - - - - - - - - - - - Bionicle - Matoran Adventures (Euro, USA) - 2002 - Electronic Arts - - - - - - - - - - - - - - - Bionicle Heroes (Euro) - 2006 - Amaze Entertainment - - - - - - - - - - - - - - - bit Generations - Boundish (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - bit Generations - Digidrive (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - bit Generations - Orbital (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - Bubble Bobble - Old & New (Euro) - 2002 - Empire Interactive - - - - - - - - - - - - - - - Calciobit (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - Carrera Power Slide (Euro) - 2002 - Stadlbauer - - - - - - - - - - - - - - - Charlotte's Web (USA) - 2006 - Sega - - - - - - - - - - - - - - - Classic NES Series - Super Mario Bros. (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Curious George (Euro) - 2006 - Namco - - - - - - - - - - - - - - Bura Bura Donkey (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Doom II (Euro) - 2002 - Activision - - - - - - - - - - - - - - - Dr. Muto (Euro) - 2002 - Midway - - - - - - - - - - - - - - - Dragon Ball Z - The Legacy of Goku (USA) - 2002 - Infogrames - - - - - - - - - - - - - - - Droopy's Tennis Open (Euro) - 2002 - L.S.P. - - - - - - - - - - - - - Eyeshield 21 Devilbats Devildays (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - F-Zero - Maximum Velocity (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - - - - FIFA 07 (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - - Final Fight One (Euro) - 2001 - Ubi Soft - - - - - - - - - - - - - - - Fire Emblem (Euro, English / French / German) - 2004 - Nintendo - - - - - - - - - - - - - - - - Fortress (Euro, USA) - 2001 - Majesco - - - - - - - - - - - - - Ghost Rider (Euro, USA) - 2006 - Take-Two Interactive - - - - - - - - - - - - - - - Godzilla - Domination! (USA) - 2002 - Infogrames - - - - - - - - - - - - - Golden Nugget Casino (Euro, USA) - 2004 - Majesco - - - - - - - - - - - - - Golden Sun (Spa) - 2002 - Nintendo - - - - - - - - - - - - - - - Gunstar Future Heroes (Euro) - 2005 - Sega - - - - - - - - - - - - - - - Harry Potter and the Prisoner of Azkaban (Euro, USA) - 2004 - Electronic Arts - - - - - - - - - - - - - - - Harry Potter and the Sorcerer's Stone (Euro, USA) - 2001 - Electronic Arts - - - - - - - - - - - - - - - Harvest Moon - Friends of Mineral Town (Ger) - 2003 - Ubi Soft - - - - - - - - - - - - - - - - Hey Arnold! - The Movie (Euro) - 2002 - THQ - - - - - - - - - - - - - Hey Arnold! - The Movie (USA) - 2002 - THQ - - - - - - - - - - - - - The Hobbit (Euro) - 2003 - Sierra Entertainment - - - - - - - - - - - - - - - It's Mr. Pants (Euro, USA) - 2005 - THQ - - - - - - - - - - - - - - - Jet Set Radio (Euro) - 2004 - Sega - - - - - - - - - - - - - - - Kill.Switch (USA) - 2004 - DSI Games - - - - - - - - - - - - - - - The King of Fighters EX - NeoBlood (USA) - 2002 - Sammy - - - - - - - - - - - - - - - Lara Croft Tomb Raider - The Prophecy (Euro) - 2002 - Ubi Soft - - - - - - - - - - - - - The Legend of Zelda - The Minish Cap (Euro) - 2004 - Nintendo - - - - - - - - - - - - - - - Disney's Lilo & Stitch 2 (Euro) - 2004 - Disney Interactive - - - - - - - - - - - - - - - Looney Tunes - Back in Action (Euro, USA) + + 007 - Everything or Nothing (Euro, USA) 2003 Electronic Arts - + - - - - - + - - The Lost Vikings (Euro) - 2003 - Blizzard Entertainment - - - - - - - - - - - - - - - Mario Kart - Super Circuit (Euro) - 2001 - Nintendo - - - - - - - - - - - - - - - Mario Tennis Advance (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Max Payne Advance (Euro) - 2004 - Rockstar Games - - - - - - - - - - - - - - - - Medal of Honor - Infiltrator (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Mega Man & Bass (Euro) - 2003 - Capcom - - - - - - - - - - - - - - - Mega Man Battle Network 3 Blue (USA) - 2003 - Capcom - - - - - - - - - - - - - - - Mega Man Battle Network 6 Cybeast Falzar (USA) - 2006 - Capcom - - - - - - - - - - - - - - - - - Metroid Fusion (Euro) - 2002 - Nintendo - - - - - - - - - - - - - - - - - - Metroid Fusion (Euro, Prototype 20020911) - 2002 - Nintendo - - - - - - - - - - - Metroid Fusion (Euro, Prototype 20020916) - 2002 - Nintendo - - - - - - - - - - - MLB SlugFest 20-04 (USA) - 2003 - Midway - - - - - - - - - - - - - Monster Trucks (Euro, USA) - 2004 - Majesco - - - - - - - - - - - - - Mother 3 (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - Jim Henson's Muppets - On with the Show! (Euro, USA) - 2003 - TDK Mediactive - - - - - - - - - - - - - Need for Speed Carbon - Own the City (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - No No No Puzzle Chailien (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - No Rules - Get Phat (Euro, USA) - 2001 - TDK Mediactive - - - - - - - - - - - - - Pinky and the Brain - The Masterplan (Euro) - 2002 - SWING! Entertainment - - - - - - - - - - - - - - Pocket Monsters - Fushigi no Dungeon Aka no Kyuujotai (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - Edición Esmeralda (Spa) - 2004 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - FireRed Version (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Pokémon - Edición Rubí (Spa) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Pocket Music (Euro) - 2002 - Rage Software - - - - - - - - - - - - - - - - - - Rayman - Raving Rabbids (Euro) - 2006 - Ubisoft - - - - - - - - - - - - - - - Rhythm Tengoku (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - Robot Wars - Extreme Destruction (Euro) - 2002 - BBC Multimedia - - - - - - - - - - - - - - - Scooby-Doo and the Cyber Chase (Euro, English / French / German) - 2001 - THQ - - - - - - - - - - - - - Screw Breaker - Goushin DoriRureRo (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - Sennen Kazoku (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - Shin Chan - Aventuras en Cineland (Spa) - 2005 - Atari - - - - - - - - - - - - - - - Shrek 2 (Euro, French / German / Italian / Spanish / Swedish) - 2004 - Activision - - - - - - - - - - - - - - - The Sims 2 (Euro, USA) - 2005 - Electronic Arts - - - - - - - - - - - - - - - The Sims - Bustin' Out (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Sitting Ducks (Euro) - 2003 - L.S.P. - - - - - - - - - - - - - Sonic Advance (Euro) - 2002 - Infogrames - - - - - - - - - - - - - - - SpongeBob SquarePants - SuperSponge (Euro, USA) - 2001 - THQ - - - - - - - - - - - - - Spyro Fusion (Euro) - 2004 - Vivendi Universal - - - - - - - - - - - - - - - Super Donkey Kong 3 (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Super Mario Advance 3 - Yoshi's Island (Euro) - 2002 - Nintendo - - - - - - - - - - - - - - - Tales of Phantasia (USA, Aus) - 2006 - Nintendo - - - - - - - - - - - - - - - Teenage Mutant Ninja Turtles (Euro) - 2003 - Konami - - - - - - - - - - - - - - - Terminator 3 - Rise of the Machines (Euro) - 2003 - Atari - - - - - - - - - - - - - Tony Hawk's Downhill Jam (Euro) - 2006 - Activision - - - - - - - - - - - - - - - Tony Hawk's Downhill Jam (USA) - 2006 - Activision - - - - - - - - - - - - - - - Tony Hawk's Pro Skater 2 (Euro, USA) - 2001 - Activision - - - - - - - - - - - - - - - Top Gun - Firestorm Advance (Euro, USA) - 2002 - Titus - - - - - - - - - - - - - Welcome to The Tower SP (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Tsuukin Hitofude (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Turok Evolution (Euro) - 2002 - Acclaim - - - - - - - - - - - - - The Urbz - Sims in the City (Euro, USA) - 2004 - Electronic Arts - - - - - - - - - - - - - - - WarioWare - Twisted! (USA) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Wolfenstein 3D (Euro, USA) - 2002 - BAM! Entertainment - - - - - - - - - - - - - - - - Yu-Gi-Oh! - The Eternal Duelist Soul (USA) - 2002 - Konami - - - - - - - - - - - - - - - - - - Shonen Jump's Yu-Gi-Oh! - Ultimate Masters - World Championship Tournament 2006 (USA) - 2006 - Konami - - - - - - - - - - - - - - - - Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (USA) - 2003 - Konami - - - - - - - - - - - - - - - Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Jpn, Rev. 1) - 2003 - Konami - - - - - - - - - - - - - - - - - - - - Zooo (Euro) - 2005 - Ignition Entertainment - - - - - - - - - - - - - - - - Play-Yan (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - - 007 - NightFire (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Advance Wars 2 - Black Hole Rising (USA, Aus) - 2003 - Nintendo - - - - - - - - - - - - - - - Broken Sword - The Shadow of the Templars (Euro) - 2002 - BAM! Entertainment - - - - - - - - - - - - - - - Classic NES Series - The Legend of Zelda (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Classic NES Series - Zelda II - The Adventure of Link (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Contra Advance - The Alien Wars EX (USA) - 2002 - Konami - - - - - - - - - - - - - Doom (Euro, USA) - 2001 - Activision - - - - - - - - - - - - - - - Duke Nukem Advance (Euro) - 2002 - Take-Two Interactive - - - - - - - - - - - - - - - FIFA 2004 (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - - Final Fantasy I & II - Dawn of Souls (USA, Aus) - 2004 - Square Enix - - - - - - - - - - - - - - - - Final Fantasy Tactics Advance (USA, Aus) - 2003 - Square Enix - - - - - - - - - - - - - - - Game Boy Advance Video - Dragon Ball GT - Volume 1 (USA) - 2004 - Majesco - - - - - - - - - - - - - Game Boy Advance Video - Sonic X - Volume 1 (USA) - 2004 - Majesco - - - - - - - - - - - - - Go! Go! Beckham! - Adventure on Soccer Island (Euro) - 2002 - Rage Software - - - - - - - - - - - - - - - Golden Sun (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - Golden Sun - The Lost Age (Euro, USA) - 2003 - Nintendo - - - - - - - - - - - - - - - Harry Potter and the Chamber of Secrets (Euro, USA) - 2002 - Electronic Arts - - - - - - - - - - - - - - - Harvest Moon - Friends of Mineral Town (Euro) - 2003 - Ubi Soft - - - - - - - - - - - - - - - - Disney's Kim Possible 2 - Drakken's Demise (Euro) - 2006 - Buena Vista Games - - - - - - - - - - - - - - - Disney's Kim Possible 2 - Drakken's Demise (USA) - 2004 - Disney Interactive - - - - - - - - - - - - - - - Lady Sia (Euro) - 2001 - TDK Mediactive - - - - - - - - - - - - - - - The Legend of Zelda - A Link to the Past & Four Swords (Euro) - 2003 - Nintendo - - - - - - - - - - - - - - - LEGO Island 2 - The Brickster's Revenge (Euro) - 2001 - Electronic Arts - - - - - - - - - - - - - - - - - - Metroid - Zero Mission (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - - - - Metroid - Zero Mission (USA, Prototype) - 2004 - Nintendo - - - - - - - - - - Ougon no Taiyou - Hirakareshi Fuuin (Jpn) - 2001 - Nintendo - - - - - - - - - - - - - - - - - Pac-Man Collection (Euro) - 2001 - Infogrames - - - - - - - - - - - - - Pokémon - LeafGreen Version (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Pokémon - Ruby Version (Euro, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - Sapphire Version (Euro, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Scrabble Scramble! (Euro) - 2005 - Zoo Digital Publishing - - - - - - - - - - - - Star Wars - Episode II - Attack of the Clones (Euro) - 2002 - THQ - - - - - - - - - - - - - Star Wars - Flight of the Falcon (USA) - 2003 - THQ - - - - - - - - - - - - - Star Wars - The New Droid Army (Euro) - 2002 - THQ - - - - - - - - - - - - - Starsky & Hutch (Euro) - 2003 - Empire Entertainment - - - - - - - - - - - - - - - Super Mario Advance (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - Super Mario Advance 4 - Super Mario Bros. 3 (USA, Aus, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - Superman Returns - Fortress of Solitude (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - Tom Clancy's Rainbow Six - Rogue Spear (Euro) - 2002 - Ubi Soft - - - - - - - - - - - - - - - Disney's Treasure Planet (USA) - 2002 - Disney Interactive - - - - - - - - - - - - - Wario Land 4 (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - - - - WarioWare, Inc. - Minigame Mania (Euro) - 2003 - Nintendo - - - - - - - - - - - - - - - Wing Commander - Prophecy (Euro) - 2003 - Destination Software - - - - - - - - - - - - - - - Zone of the Enders - The Fist of Mars (Euro) - 2002 - Konami - - - - - - - - - - - - - - - - - - 2 in 1: Astérix & Obélix - Bash Them All! + Astérix & Obélix XXL (Euro) - 2005 - Atari - - - - - - - - - - - Barbie Superpack: Groovy Games + Secret Agent (Euro) - 2005 - Vivendi Universal - - - - - - - - - - Barbie Superpack: Groovy Games + Secret Agent (USA) - 2005? - Vivendi Universal - - - - - - - - - - 2 Games in 1: Bionicle + Knights' Kingdom (Euro) - 200? - THQ - - - - - - - - - - Double Game!: Cartoon Network Block Party + Cartoon Network Speedway (Euro) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Cartoon Network Block Party + Cartoon Network Speedway (USA) - 2005 - Majesco - - - - - - - - - - Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (Euro) - 2006 - Konami - - - - - - - - - - - Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (USA) - 2006 - Konami - - - - - - - - - - - 2 Games in 1: Columns Crown + ChuChu Rocket! (Euro) - 2006? - Sega - - - - - - - - - - - Crash Superpack: Crash Bandicoot 2 - N-Tranced + Crash Nitro Kart (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - 2 Games in 1: Disney Princess + Lizzie McGuire (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Lizzie McGuire (Spa) - 200? - THQ - - - - - - - - - - 2 Games in 1: Disney Princess + Disney's Brother Bear (Euro) - 2005 - THQ - - - - - - - - - - - 2 Games in 1: Disney Princesse + Disney's Frère des Ours (Fra) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disneys Prinzessinnen + Disneys Bärenbrüder (Ger) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney Principesse + Disney's Koda, Fratello Orso (Ita) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Disney's Hermano Oso (Spa) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney's The Lion King + Disney Princess (Euro) - 2004 - THQ - - - - - - - - - - - 2 Games in 1: Disney Princesse + Disney's Le Roi Lion (Fra) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disneys Prinzessinnen + Disneys Der Koenig der Loewen (Ger) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney Principesse + Disney's Il Re Leone (Ita) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Disney's El Rey Leon (Spa) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney's Brother Bear + Disney's The Lion King (Euro) - 200? - THQ - - - - - - - - - - - 2 Disney Games: Disney Sports - Football + Disney Sports - Skateboarding (Euro) - 200? - Disney Interactive - - - - - - - - - - 2 Disney Games: Disney's Peter Pan - Return to Neverland + Disney's Lilo & Stitch 2 (Euro) - 200? - Disney Interactive - - - - - - - - - - 2 Games in One: Dora the Explorer Double Pack (USA) - 2007 - Global Star Software - - - - - - - - - - 2 Games in 1: Dragon Ball Z I & II (USA) - 2005 - Atari - - - - - - - - - - - - 2 Games in 1!: Dragon Ball Z - Buu's Fury + Dragon Ball GT - Transformation (USA) - 200? - Atari - - - - - - - - - - - 2 Games in 1: Finding Nemo - The Continuing Adventures + The Incredibles (USA) - 200? - THQ - - - - - - - - - - 2 Games in 1: Findet Nemo + Findet Nemo - Das Abenteuer Geht Weiter (Ger) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Ita?, Spa?) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Fra?, Ned?) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + The Incredibles (Euro) - 2007 - THQ - - - - - - - - - - 2 Games in 1: Finding Nemo + The Incredibles (Euro, French / Dutch) - 2007 - THQ - - - - - - - - - 2 Games in 1: Findet Nemo + Die Unglaublichen (Ger) - 2007 - THQ - - - - - - - - 2 Games in 1: Alla Ricerca di Nemo + Gli Incredibili - Una 'Normale' Famiglia di Supereroi (Ita) - 2007 - THQ - - - - - - - - - 2 Games in 1: Buscando a Nemo + Los Increibles (Spa) - 2007 - THQ - - - - - - - - - Double Game!: Golden Nugget Casino - Texas Hold 'em Poker (Euro) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Golden Nugget Casino - Texas Hold 'em Poker (USA) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (USA) - 200? - THQ - - - - - - - - - Hugo 2 in 1 (Euro) - 2005 - ITE Media - - - - - - - - - - - 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (Euro) - 2006 - Zoo Digital Publishing - - - - - - - - - - 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (USA) - 2006 - DSI Games - - - - - - - - - - 2 Games in 1: Monsters, Inc. + Finding Nemo (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Monsters en Co. + Finding Nemo (Ned) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monstres & Cie + Le Monde de Nemo (Fra) - 2005 - THQ - - - - - - - - - 2 Games in 1: Die Monster AG + Findet Nemo (Ger) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monsters & Co. + Alla Ricerca di Nemo (Ita) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monstruos, S.A. + Buscando a Nemo (Spa) - 2005 - THQ - - - - - - - - - 2 Games in 1 Double Pack: Monsters, Inc. + Finding Nemo (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Moto GP + GT Advance 3 - Pro Concept Racing (Euro) - 200? - THQ - - - - - - - - - - - Pac-Man World & Ms. Pac-Man - Maze Madness (Euro) - 2005 - Zoo Digital Publishing - - - - - - - - - - 2 Great Games!: Pac-Man World + Ms. Pac-Man - Maze Madness (USA) - 2005 - Namco - - - - - - - - - - - Pferd & Pony 2 in 1: Pferd & Pony - Mein Pferdehof + Pferd & Pony - Lass Uns Reiten 2 (Ger) - 2006? - dtp Entertainment - - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Euro) - 2005 - THQ - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - La Force du Temps (Fra) - 2005 - THQ - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Ger) - 2005 - THQ - - - - - - - - - 2 Games in 1 Double Pack: Power Rangers - Ninja Storm + Power Rangers - Time Force (USA) - 2005 - THQ - - - - - - - - - - Prince of Persia - The Sands of Time & Lara Croft Tomb Raider - The Prophecy (Euro) - 2006 - Ubisoft - - - - - - - - - - - Double Game!: Quad Desert Fury + Monster Trucks (Euro) - 2005 - Majesco - - - - - - - - - 2 Games in 1: Quad Desert Fury + Monster Trucks (USA) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Rugrats - Go Wild + SpongeBob SquarePants - SuperSponge (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Les Razmoket Rencontrent les Delajungle + SpongeBob SquarePants - SuperSponge (Fra) - 200? - THQ - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (Euro) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Desatado (Spa) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Les Monstres Se Dechainent (Fra) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (USA) - 2006 - THQ - - - - - - - - - - - 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (USA) - 2005 - THQ - - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar (Euro) - 2006? - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar (USA) - 2006? - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (Euro) - 2006 - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (USA) - 2006 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Shrek 2 + Shark Tale (Euro) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Shrek 2 + Shark Tale (USA) - 2005 - Activision - - - - - - - - - - - 2 Games in 1: Sonic Advance + ChuChu Rocket! (Euro) - 2005 - THQ - - - - - - - - - - - Double Pack: Sonic Advance + ChuChu Rocket! (Jpn) - 2006 - Sega - - - - - - - - - - - - - - 2 Games in 1: Sonic Advance + Sonic Battle (Euro) - 2005 - THQ - - - - - - - - - - - Double Pack: Sonic Advance + Sonic Battle (Jpn) - 2006 - Sega - - - - - - - - - - - - - - 2 Games in 1: Sonic Advance + Sonic Pinball Party (Euro) - 2005 - Sega - - - - - - - - - - - Double Pack: Sonic Battle + Sonic Pinball Party (Jpn) - 2006 - Sega - - - - - - - - - - - - - Combo Pack - Sonic Advance + Sonic Pinball Party (USA) - 2005 - Sega - - - - - - - - - - - 2 Games in 1: Sonic Battle + ChuChu Rocket! (Euro) - 2006? - Sega - - - - - - - - - - 2 Games in 1: Sonic Battle + Sonic Pinball Party (Euro) - 2005 - Sega - - - - - - - - - - - 2 Games in 1: Sonic Pinball Party + Columns Crown (Euro) - 2006 - Sega - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man & Spider-Man 2 (Euro) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man + Spider-Man 2 (USA) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man - Mysterio's Menace + X2 - Wolverine's Revenge (Euro, USA) - 200? - Activision - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Jimmy Neutron Boy Genius (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Nicktoons - Freeze Frame Frenzy (USA) - 200? - THQ - - - - - - - - - - 2 Games in 1 Double Pack: SpongeBob SquarePants - Battle for Bikini Bottom + The Fairly OddParents! - Breakin' da Rules (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (Euro) - 2004 - THQ - - - - - - - - - - 2 Games in 1 Double Pack: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro) - 200? - THQ - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro, Alt) - 200? - THQ - - - - - - - - - 2 Games in 1: The SpongeBob SquarePants Movie + SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Euro) - 2005 - THQ - - - - - - - - - - - Spyro - Season of Ice + Crash Bandicoot 2 - N-Tranced (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro 2 - Season of Flame + Crash Nitro Kart (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro - Fusion + Crash Bandicoot - Fusion (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro - Season of Ice + Crash Bandicoot - The Huge Adventure (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - - Spyro Superpack: Spyro - Season of Ice + Spyro - Season of Flame (USA) - 2005? - Vivendi Universal - - - - - - - - - - - Teenage Mutant Ninja Turtles Double Pack (Euro) - 2006 - Konami - - - - - - - - - - - Teenage Mutant Ninja Turtles Double Pack (USA) - 2006 - Konami - - - - - - - - - - - 2 Jeux en 1: Titeuf - Ze Gagmachine + Titeuf Méga Compet (Fra) - 2005 - Atari - - - - - - - - - - 2 in 1 Game Pack: Tony Hawk's Underground + Kelly Slater's Pro Surfer (Euro, USA) - 2006 - Activision - - - - - - - - - - 2 in 1: V-Rally 3 + Stuntman (Euro) - 2005 - Atari - - - - - - - - - - Winnie the Pooh's Rumbly Tumbly Adventure & Rayman 3 (Euro) - 2006 - Ubisoft - - - - - - - - - - - Yu-Gi-Oh! Double Pack (Euro) - 2006 - Konami - - - - - - - - - - - Yu-Gi-Oh! Double Pack (USA) - 2006 - Konami - - - - - - - - - - - Yu-Gi-Oh! Double Pack 2 (USA) - 2006 - Konami - - - - - - - - - - - Ignition Collection: Volume 1- 3 Games in 1: Animal Snap + World Tennis Stars + Super Dropzone (Euro) - 2007? - Ignition Entertainment - - - - - - - - - 3 Games in 1: Rugrats - I Gotta Go Party + SpongeBob SquarePants - SuperSponge + Tak and the Power of Juju (Euro) - 200? - THQ - - - - - - - - - - - 4 Games on One Game Pak (Nicktoons) (USA) - 2007 - THQ - - - - - - - - - - - 4 Games on One Game Pak (Racing) (USA) - 2007 - THQ - - - - - - - - - - - Twin Series 1 - Mezase Debut! - Fashion Designer Monogatari + Kawaii Pet Game Gallery 2 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 2 - Oshare Princess 4 + Renai Uranai Daisakusen! + Renai Party Game - Sweet Heart (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 3 - Konchuu Monster - Ouja Ketteisen + Super Chinese Labyrinth (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 4 - Hamu Hamu Monster EX - Hamster Monogatari RPG + Fantasy Puzzle - Hamster Monogatari - Mahou no Meikyuu 1.2.3 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 5 - Mahou no Kuni no Cake-ya-san Monogatari + Wanwan Meitantei EX (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 6 - Wannyan Idol Gakuen + Koinu to Issho Special (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 7 - Twin Puzzle - Kisekae Wanko EX + Nyaa to Chuu no Rainbow Magic 2 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - - - 007 - Everything or Nothing (Jpn) 2003 @@ -4102,15 +41,18 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - 007 - Everything or Nothing (Euro, USA) + + 007 - NightFire (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -4408,6 +350,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ace Lightning (Euro) + 2002 + BBC Worldwide + + + + + + + + + + + + Acrobat Kid (Jpn) 2002 @@ -4427,10 +385,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Action Man - Robot Atak (Euro) 2004 Atari - + + + - + @@ -4482,11 +442,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Advance Guardian Heroes (Euro) 2004 Sega - + + + + - + @@ -4534,6 +497,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Advance Wars (Euro) + 2001 + Nintendo + + + + + + + + + + + + Advance Wars (USA, Rev. 1) 2001 @@ -4564,11 +543,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Advance Wars 2 - Black Hole Rising (Euro) 2003 Nintendo - + + + + - + + + + + + + Advance Wars 2 - Black Hole Rising (USA, Aus) + 2003 + Nintendo + + + + + + + + @@ -4727,8 +725,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ITE Media + + - + @@ -4761,11 +761,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b L'Aigle de Guerre (Fra) 2001 Nintendo - + + + + + + + - + @@ -4834,9 +840,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Interactive + + + - + @@ -5041,11 +1050,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's American Dragon Jake Long - Rise of the Huntsclan! (Euro, USA) 2006 Buena Vista Games - + + + + - + @@ -5407,10 +1419,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Astérix & Obélix - Bash Them All! (Euro) 2002 Infogrames - + + + - + @@ -5419,11 +1433,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Astérix & Obélix XXL (Euro) 2004 Atari - + + + + - + @@ -5508,10 +1525,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Atlantis - The Lost Empire (Euro, USA) 2001 THQ - + + + - + @@ -5941,11 +1960,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Baldur's Gate - Dark Alliance (Euro) 2003 DSI Games - + + + + - + @@ -5967,11 +1989,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Banjo-Pilot (Euro) 2005 THQ - + + + + - + @@ -6005,11 +2030,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Banjo-Kazooie - Grunty's Revenge (Euro) 2003 THQ - + + + + - + @@ -6304,10 +2332,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Batman - Vengeance (Euro) 2001 Ubi Soft - + + + - + @@ -6330,9 +2360,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Electronic Arts + + + - + @@ -6658,9 +2691,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Atari + + + - + @@ -6765,6 +2801,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bionicle - Matoran Adventures (Euro, USA) + 2002 + Electronic Arts + + + + + + + + + + + + Bionicle - Maze of Shadows (Euro, Rev. 1) 2005 @@ -6804,6 +2856,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bionicle Heroes (Euro) + 2006 + Amaze Entertainment + + + + + + + + + + + + Bionicle Heroes (USA) 2006 @@ -6817,6 +2885,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Boundish (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Coloris (Jpn) 2006 @@ -6847,6 +2934,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Digidrive (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Dotstream (Jpn) 2006 @@ -6862,6 +2968,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Orbital (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Soundvoyager (Jpn) 2006 @@ -7089,17 +3214,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + - - - + + + - - + - + @@ -7109,7 +3233,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Konami - + @@ -7122,7 +3246,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7135,7 +3259,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7148,7 +3272,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7208,9 +3332,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + + + + + + - + @@ -7346,11 +3477,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bomberman Tournament (Euro, USA) 2001 Activision - + + + + + + + - + @@ -7447,11 +3584,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Boulder Dash EX (Euro) 2002 First Star Software - + + + + - + @@ -7550,11 +3690,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bratz - Forever Diamondz (Euro) 2006 THQ - + + + + - + @@ -7648,9 +3791,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bratz - The Movie (Euro) 2007 THQ + + + - + @@ -7830,6 +3976,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Broken Sword - The Shadow of the Templars (Euro) + 2002 + BAM! Entertainment + + + + + + + + + + + + Broken Sword - The Shadow of the Templars (USA) 2002 @@ -7859,11 +4021,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Brother Bear (Euro) 2003 THQ - + + + + - + @@ -7907,6 +4072,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bubble Bobble - Old & New (Euro) + 2002 + Empire Interactive + + + + + + + + + + + + Bubble Bobble - Old & New (Jpn) 2002 @@ -7977,6 +4158,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bura Bura Donkey (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Butt-Ugly Martians - B.K.M. Battles (Euro) 2002 @@ -8075,6 +4275,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Calciobit (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + Camp Lazlo - Leaky Lake Games (Euro) 2006 @@ -8221,6 +4439,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Carrera Power Slide (Euro) + 2002 + Stadlbauer + + + + + + + + + + + + Cars (Euro, Spanish / Portuguese) 2006 @@ -8360,10 +4594,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Casper (Euro) 2002 Microids - + + + - + @@ -8384,11 +4620,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania (Euro) 2001 Konami - + + + + + + + - + @@ -8412,11 +4654,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania - Aria of Sorrow (Euro) 2003 Konami - + + + + - + @@ -8466,11 +4711,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania - Harmony of Dissonance (Euro) 2002 Konami - + + + + + + + - + @@ -8613,6 +4864,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Charlotte's Web (USA) + 2006 + Sega + + + + + + + + + + + + The Cheetah Girls (USA) 2006 @@ -8696,11 +4963,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2005 Buena Vista Games - + + + + - + @@ -8985,11 +5255,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Bomberman (Euro, USA) 2004 Nintendo - + + + + - + @@ -9000,9 +5273,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -9024,11 +5300,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Donkey Kong (Euro, USA) 2004 Nintendo - + + + + - + @@ -9072,15 +5351,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Classic NES Series - The Legend of Zelda (Euro, USA) + 2004 + Nintendo + + + + + + + + + + + + Classic NES Series - Metroid (Euro, USA) 2004 Nintendo - + + + + - + @@ -9089,11 +5387,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Pac-Man (Euro, USA) 2004 Nintendo - + + + + - + + + + + + + Classic NES Series - Super Mario Bros. (Euro, USA) + 2004 + Nintendo + + + + + + + + @@ -9111,6 +5428,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Classic NES Series - Zelda II - The Adventure of Link (Euro, USA) + 2004 + Nintendo + + + + + + + + + + + + Cocoto - Kart Racer (Euro) 2005 @@ -9268,6 +5601,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Contra Advance - The Alien Wars EX (USA) + 2002 + Konami + + + + + + + + + + Contra Advance (Prototype) 2003 @@ -9434,11 +5781,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Crash Bandicoot XS (Euro) 2002 Universal Interactive - + + + + - + @@ -9868,13 +6218,28 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Curious George (Euro) + 2006 + Namco + + + + + + + + + + + Curious George (USA) 2006 Namco - + @@ -10804,11 +7169,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Princess - Royal Adventure (Euro) 2006 Buena Vista Games - + + + + - + @@ -11052,9 +7420,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Interactive + + + - + @@ -11397,11 +7768,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country (Euro) 2003 Nintendo - + + + + - + @@ -11423,11 +7797,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country 2 (Euro) 2004 Nintendo - + + + + - + @@ -11436,7 +7813,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country 2 (USA, Aus) 2004 Nintendo - + @@ -11471,14 +7848,47 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Doom (Euro, USA) + 2001 + Activision + + + + + + + + + + + + + + Doom II (Euro) + 2002 + Activision + + + + + + + + + Doom II (USA) 2002 Activision + + + + - + @@ -11683,6 +8093,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Dr. Muto (Euro) + 2002 + Midway + + + + + + + + + + + + Dr. Seuss' The Cat in the Hat (USA) 2003 @@ -11818,11 +8244,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - Supersonic Warriors (Euro) 2004 Bandai - + + + + - + @@ -11871,11 +8300,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - Taiketsu (Euro) 2003 Atari - + + + + - + @@ -11897,11 +8329,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - The Legacy of Goku (Euro) 2002 Infogrames - + + + + - + + + + + + + Dragon Ball Z - The Legacy of Goku (USA) + 2002 + Infogrames + + + + + + + + @@ -11910,11 +8361,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - The Legacy of Goku II (Euro) 2003 Atari - + + + + - + @@ -12050,7 +8504,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + @@ -12113,11 +8567,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Driver 2 Advance (Euro) 2002 Atari - + + + + - + @@ -12173,6 +8630,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Droopy's Tennis Open (Euro) + 2002 + L.S.P. + + + + + + + + + + Droopy's Tennis Open (Euro, Prototype) 2002 @@ -12276,11 +8747,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Duel Masters - Sempai Legends (Euro) 2004 Atari - + + + + - + @@ -12350,6 +8824,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Duke Nukem Advance (Euro) + 2002 + Take-Two Interactive + + + + + + + + + + + + Duke Nukem Advance (USA) 2002 @@ -12378,11 +8868,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dungeons & Dragons - Eye of the Beholder (Euro) 2002 Infogrames - + + + + + + + - + @@ -12430,9 +8926,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b E.T. - The Extra-Terrestrial (Euro) 2001 Ubi Soft + + + - + @@ -12465,10 +8964,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Earthworm Jim 2 (Euro) 2002 Majesco - + + + - + @@ -12730,11 +9231,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Eragon (Euro) 2006 Vivendi Universal - + + + + - + @@ -12823,11 +9327,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ESPN International Winter Sports (Euro) 2002 Konami - + + + + - + @@ -12849,11 +9356,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ESPN Winter X-Games Snowboarding 2 (Euro) 2002 Konami - + + + + - + @@ -12986,10 +9496,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Extreme Ghostbusters - Code Ecto-1 (Euro) 2002 L.S.P. - + + + - + @@ -13045,6 +9557,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Eyeshield 21 Devilbats Devildays (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + EZ-Talk - Shokyuu Hen 1 (Jpn) 2001 @@ -13177,6 +9708,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + F-Zero - Maximum Velocity (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + + + + F-Zero - GP Legend (Euro) 2004 @@ -14012,9 +10562,29 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + + - + + + + + + + FIFA 07 (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + @@ -14024,11 +10594,31 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2002 Electronic Arts - + + + + - + + + + + + + FIFA 2004 (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + @@ -14038,11 +10628,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Electronic Arts - + + + + - + @@ -14075,11 +10668,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b FILA Decathlon (Euro) 2002 THQ - + + + + - + @@ -14090,9 +10686,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Square Enix + + + + - + + + + + + + Final Fantasy I & II - Dawn of Souls (USA, Aus) + 2004 + Square Enix + + + + + + + + + @@ -14118,9 +10735,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + + - + @@ -14196,6 +10817,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Final Fantasy Tactics Advance (USA, Aus) + 2003 + Square Enix + + + + + + + + + + + + Final Fantasy V Advance (Euro) 2007 @@ -14278,6 +10915,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Final Fight One (Euro) + 2001 + Ubi Soft + + + + + + + + + + + + Final Fight One (Jpn) 2001 @@ -14325,10 +10978,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Finding Nemo (Euro, USA) 2003 THQ - + + + - + @@ -14422,9 +11077,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Finding Nemo - The Continuing Adventures (Euro, English / Italian / Spanish / Danish / Swedish) 2004 THQ + + + - + @@ -14451,6 +11109,23 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Fire Emblem (Euro, English / French / German) + 2004 + Nintendo + + + + + + + + + + + + + Fire Emblem (Euro, English / Italian / Spanish) 2004 @@ -14536,11 +11211,15 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Fire Emblem - The Sacred Stones (Euro) 2005 Nintendo - + + + + + - + @@ -14725,6 +11404,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Fortress (Euro, USA) + 2001 + Majesco + + + + + + + + + + Foster's Home for Imaginary Friends (Euro) 2006 @@ -14769,9 +11462,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + + - + @@ -15341,11 +12037,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Game & Watch Gallery Advance (Euro) 2002 Nintendo - + + + + + + + - + @@ -15528,6 +12230,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Game Boy Advance Video - Dragon Ball GT - Volume 1 (USA) + 2004 + Majesco + + + + + + + + + + Game Boy Advance Video - Nicktoons - Volume 3 (USA) 2005 @@ -15664,6 +12380,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Game Boy Advance Video - Sonic X - Volume 1 (USA) + 2004 + Majesco + + + + + + + + + + Game Boy Advance Video - SpongeBob SquarePants - Volume 1 (USA, Rev. 1) 2004 @@ -15866,9 +12596,11 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + - + @@ -15879,8 +12611,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + - + @@ -16164,6 +12898,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ghost Rider (Euro, USA) + 2006 + Take-Two Interactive + + + + + + + + + + + + Ghost Trap (Jpn) 2002 @@ -16183,11 +12933,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Global Star - Sudoku Fever (Euro) 2006 Global Star Software - + + + + - + @@ -16218,14 +12971,46 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Go! Go! Beckham! - Adventure on Soccer Island (Euro) + 2002 + Rage Software + + + + + + + + + + + + Godzilla - Domination! (Euro) 2002 Infogrames - + + + - + + + + + + + Godzilla - Domination! (USA) + 2002 + Infogrames + + + + + + @@ -16259,14 +13044,48 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Golden Nugget Casino (Euro, USA) + 2004 + Majesco + + + + + + + + + + + + Golden Sun (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + Golden Sun (Fra) 2002 Nintendo + + + + - + @@ -16275,6 +13094,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Golden Sun (Ger) 2002 Nintendo + @@ -16295,6 +13115,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Golden Sun (Spa) + 2002 + Nintendo + + + + + + + + + + + + + + Golden Sun - The Lost Age (Euro, USA) + 2003 + Nintendo + + + + + + + + + + + + Golden Sun - Die Vergessene Epoche (Ger) 2003 @@ -16311,10 +13163,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Golden Sun - L'Age Perdu (Fra) 2003 Nintendo + + + + - + @@ -16716,6 +13572,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Gunstar Future Heroes (Euro) + 2005 + Sega + + + + + + + + + + + + Gunstar Super Heroes (Jpn) 2005 @@ -17035,9 +13907,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -17216,7 +14091,55 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + Harry Potter and the Chamber of Secrets (Euro, USA) + 2002 + Electronic Arts + + + + + + + + + + + + + + Harry Potter and the Prisoner of Azkaban (Euro, USA) + 2004 + Electronic Arts + + + + + + + + + + + + + + Harry Potter and the Philosopher's Stone (Euro) ~ Harry Potter and the Sorcerer's Stone (USA) + 2001 + Electronic Arts + + + + + + + + + + + + + Harry Potter to Kenja no Ishi (Jpn) 2001 Electronic Arts @@ -17250,11 +14173,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Harry Potter - Quidditch World Cup (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -17327,6 +14253,41 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Harvest Moon - Friends of Mineral Town (Euro) + 2003 + Ubi Soft + + + + + + + + + + + + + + + + Harvest Moon - Friends of Mineral Town (Ger) + 2003 + Ubi Soft + + + + + + + + + + + + + Harvest Moon - Friends of Mineral Town (USA) 2003 @@ -17484,6 +14445,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Hey Arnold! - The Movie (Euro) + 2002 + THQ + + + + + + + + + + + + Hey Arnold! - The Movie (USA) + 2002 + THQ + + + + + + + + + + Hey Arnold! - The Movie (Euro, Prototype) 2002 @@ -17719,6 +14708,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Hobbit (Euro) + 2003 + Sierra Entertainment + + + + + + + + + + + + The Hobbit (USA) 2003 @@ -17751,10 +14756,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Home on the Range (Euro) 2004 Disney Interactive - + + + - + @@ -18079,8 +15086,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ITE Media + + - + @@ -18196,11 +15205,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ice Age 2 - The Meltdown (Euro) 2006 Sierra Entertainment - + + + + - + @@ -18211,9 +15223,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Sierra Entertainment + + + - + @@ -18235,11 +15250,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredible Hulk (Euro) 2003 Vivendi Universal - + + + + - + @@ -18261,10 +15279,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredibles (Euro, USA) 2004 THQ - + + + - + @@ -18317,10 +15337,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredibles - Rise of the Underminer (Euro, USA) 2005 THQ - + + + - + @@ -18427,11 +15449,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b International Superstar Soccer (Euro) 2001 Konami - + + + + - + @@ -18442,9 +15467,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami + + + - + @@ -18567,6 +15595,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + It's Mr. Pants (Euro, USA) + 2005 + THQ + + + + + + + + + + + + J.League Pocket (Jpn) 2001 @@ -18671,10 +15715,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b James Pond - Codename RoboCod (Euro) 2005 Play It - + + + - + @@ -18717,6 +15763,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Jet Set Radio (Euro) + 2004 + Sega + + + + + + + + + + + + JGTO Kounin Golf Master - Japan Golf Tour Game (Jpn) 2001 @@ -18886,10 +15948,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's The Jungle Book 2 (Euro) 2003 Ubi Soft - + + + + - + @@ -19099,11 +16164,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Justice League Heroes - The Flash (Euro) 2006 Warner Bros. Games - + + + + - + @@ -19605,6 +16673,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Kill.Switch (USA) + 2004 + DSI Games + + + + + + + + + + + + Killer 3D Pool (Euro) 2005 @@ -19633,6 +16717,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Kim Possible (Euro, Rev. 1) 2003 THQ + @@ -19645,10 +16730,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Kim Possible (Euro) 2003 THQ - + + + + - + @@ -19681,6 +16769,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Disney's Kim Possible 2 - Drakken's Demise (Euro) + 2006 + Buena Vista Games + + + + + + + + + + + + + + Disney's Kim Possible 2 - Drakken's Demise (USA) + 2004 + Disney Interactive + + + + + + + + + + + + Disney's Kim Possible III - Team Possible (USA) 2005 @@ -19761,14 +16881,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The King of Fighters EX - NeoBlood (USA) + 2002 + Sammy + + + + + + + + + + + + The King of Fighters EX2 - Howling Blood (Euro) 2003 Acclaim + + + + - + @@ -19807,9 +16947,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Square Enix + + + + - + @@ -19988,11 +17132,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Klonoa - Empire of Dreams (Euro) 2001 Namco - + + + + - + @@ -20410,7 +17557,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -20622,6 +17769,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Lady Sia (Euro) + 2001 + TDK Mediactive + + + + + + + + + + + + Lady Sia (USA) 2001 @@ -20711,6 +17874,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Lara Croft Tomb Raider - The Prophecy (Euro) + 2002 + Ubi Soft + + + + + + + + + + Lara Croft Tomb Raider - The Prophecy (Jpn) 2002 @@ -20827,6 +18004,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Legend of Zelda - A Link to the Past & Four Swords (Euro) + 2003 + Nintendo + + + + + + + + + + + + The Legend of Zelda - A Link to the Past & Four Swords (USA, Aus) 2002 @@ -20840,6 +18033,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Legend of Zelda - The Minish Cap (Euro) + 2004 + Nintendo + + + + + + + + + + + + The Legend of Zelda - The Minish Cap (USA, Demo Kiosk) 2005 @@ -20959,6 +18168,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + LEGO Island 2 - The Brickster's Revenge (Euro) + 2001 + Electronic Arts + + + + + + + + + + + + + + + LEGO Island 2 - The Brickster's Revenge (USA) 2001 @@ -21199,10 +18427,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Lilo & Stitch (Euro, Rev. 1) 2002 Ubi Soft - + + + - + @@ -21231,6 +18461,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Disney's Lilo & Stitch 2 (Euro) + 2004 + Disney Interactive + + + + + + + + + + + + Disney's Lilo & Stitch 2 - Hämsterviel Havoc (USA) 2004 @@ -21276,11 +18522,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney The Lion King (Euro) 2003 THQ - + + + + - + @@ -21432,6 +18681,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Looney Tunes - Back in Action (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + Looney Tunes Double Pack (Euro) 2005 @@ -21537,9 +18802,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Electronic Arts + + + - + @@ -21548,11 +18816,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Lord of the Rings - The Third Age (Euro, USA) 2004 Electronic Arts - + + + + - + @@ -21561,11 +18832,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Lord of the Rings - The Two Towers (Euro, USA) 2002 Electronic Arts - + + + + - + + + + + + + The Lost Vikings (Euro) + 2003 + Blizzard Entertainment + + + + + + + + @@ -21604,8 +18894,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Infogrames + + - + @@ -21692,10 +18984,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Madagascar (Euro, French / German / Portuguese) 2005 Activision + + + + - + @@ -21970,9 +19266,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Capcom + + + - + @@ -22310,11 +19609,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mario & Luigi - Superstar Saga (Euro) 2003 Nintendo - + + + + - + @@ -22438,9 +19740,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -22460,15 +19765,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mario Kart - Super Circuit (Euro) + 2001 + Nintendo + + + + + + + + + + + + Mario Kart - Super Circuit (USA) 2001 Nintendo + + + - + @@ -22535,9 +19859,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -22555,6 +19882,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mario Tennis Advance (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Mario Tennis - Power Tour (USA, Aus) 2005 @@ -22625,11 +19971,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Marvel - Ultimate Alliance (Euro) 2006 Activision - + + + + - + @@ -22782,13 +20131,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + Max Payne Advance (Euro) + 2004 + Rockstar Games + + + + + + + + + + + + + Max Payne (USA) 2003 @@ -22870,10 +20236,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Medabots - Metabee Version (Euro) 2003 Natsume + + + + - + @@ -22907,10 +20277,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Medabots - Rokusho Version (Euro) 2003 Natsume + + + + - + @@ -22990,6 +20364,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Medal of Honor - Infiltrator (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + Medal of Honor - Underground (Ubi Soft) (Euro) 2002 @@ -23156,6 +20546,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man & Bass (Euro) + 2003 + Capcom + + + + + + + + + + + + Mega Man & Bass (USA) 2003 @@ -23173,11 +20579,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Chip Challenge (Euro) 2004 Capcom - + + + + - + @@ -23199,11 +20608,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Network (Euro) 2001 Ubi Soft - + + + + + + + - + @@ -23260,6 +20675,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man Battle Network 3 Blue (USA) + 2003 + Capcom + + + + + + + + + + + + Mega Man Battle Network 3 White (Euro) 2003 @@ -23290,11 +20721,15 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Network 4 Blue Moon (Euro) 2004 Capcom - + + + + + - + @@ -23403,6 +20838,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man Battle Network 6 Cybeast Falzar (USA) + 2006 + Capcom + + + + + + + + + + + + + + Mega Man Battle Network 6 Cybeast Gregar (Euro) 2006 @@ -23446,11 +20899,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Zero 2 (Euro) 2003 Capcom - + + + + - + @@ -23580,8 +21036,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ubi Soft + + - + @@ -23677,11 +21135,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Metal Slug Advance (Euro) 2004 Ignition Entertainment - + + + + - + @@ -23768,6 +21229,80 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Metroid - Zero Mission (USA) + 2004 + Nintendo + + + + + + + + + + + + + + + + + Metroid - Zero Mission (USA, Prototype) + 2004 + Nintendo + + + + + + + + + + Metroid Fusion (Euro) + 2002 + Nintendo + + + + + + + + + + + + + + + + + Metroid Fusion (Euro, Prototype 20020911) + 2002 + Nintendo + + + + + + + + + + Metroid Fusion (Euro, Prototype 20020916) + 2002 + Nintendo + + + + + + + + Metroid Fusion (Jpn) 2003 @@ -24285,11 +21820,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mission Impossible - Operation Surma (Euro) 2003 Atari - + + + + - + @@ -24331,6 +21869,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + MLB SlugFest 20-04 (USA) + 2003 + Midway + + + + + + + + + + Mobile Pro Yakyuu - Kantoku no Saihai (Jpn) 2001 @@ -24676,6 +22228,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Monster Trucks (Euro, USA) + 2004 + Majesco + + + + + + + + + + Monster Trucks Mayhem (Euro) 2006 @@ -24728,10 +22294,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Monsters, Inc. (Euro, USA) 2001 THQ - + + + - + @@ -24762,9 +22330,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Die Monster AG (Ger) 2002 THQ + + + - + @@ -24899,6 +22470,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mother 3 (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + Moto GP (Euro, Prototype) 2002 @@ -25187,6 +22776,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Jim Henson's Muppets - On with the Show! (Euro, USA) + 2003 + TDK Mediactive + + + + + + + + + + Muppet Pinball Mayhem (Euro) 2002 @@ -25387,10 +22990,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Namco Museum (Euro) 2001 Namco - + + + - + @@ -25675,11 +23280,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Need for Speed - Porsche Unleashed (Euro) 2004 Zoo Digital Publishing - + + + + - + @@ -25701,11 +23309,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Need for Speed - Underground (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -25723,6 +23334,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Need for Speed Carbon - Own the City (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + + + + Neoromance Game - Harukanaru Toki no Naka de (Jpn, Rev. 1) 2002 @@ -25944,6 +23571,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + No No No Puzzle Chailien (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + + No Rules - Get Phat (Euro, USA) + 2001 + TDK Mediactive + + + + + + + + + + Nobunaga Ibun (Jpn) 2002 @@ -25978,10 +23637,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Noddy - A Day in Toyland (Euro) 2006 The Game Factory - + + + - + @@ -26431,6 +24092,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ougon no Taiyou - Hirakareshi Fuuin (Jpn) + 2001 + Nintendo + + + + + + + + + + + + + + Ougon no Taiyou - Ushinawareshi Toki (Jpn) 2002 @@ -26450,11 +24129,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Over the Hedge (Euro) 2006 Activision - + + + + - + @@ -26605,6 +24287,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pac-Man Collection (Euro) + 2001 + Infogrames + + + + + + + + + + Pac-Man Collection (Jpn) 2002 @@ -26777,8 +24473,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ubi Soft + + - + @@ -26811,10 +24509,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Peter Pan - The Motion Picture Event (Euro) 2004 Atari - + + + - + @@ -26957,11 +24657,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Phantasy Star Collection (Euro) 2003 Sega - + + + + - + @@ -27160,6 +24863,21 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pinky and the Brain - The Masterplan (Euro) + 2002 + SWING! Entertainment + + + + + + + + + + + Pinky Monkey Town (Jpn) 2001 @@ -27426,7 +25144,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -27463,6 +25181,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pocket Monsters - Fushigi no Dungeon Aka no Kyuujotai (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Pocket Monsters - Leaf Green (Jpn) 2004 @@ -27486,7 +25222,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -27501,9 +25237,33 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + + + + - + + + + + + + Pocket Music (Euro) + 2002 + Rage Software + + + + + + + + + + + @@ -27552,11 +25312,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon - Emerald Version (Euro, USA) 2004 Nintendo - + - + + + + + + - + @@ -27566,7 +25331,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + @@ -27578,7 +25343,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + @@ -27590,22 +25355,59 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + + + Pokémon - Edición Esmeralda (Spa) + 2004 + Nintendo + + + + + + + + + + + + + + Pokémon - FireRed Version (Euro, USA, Rev. 1) 2004 Nintendo - + + + + - + + + + + + + Pokémon - FireRed Version (USA) + 2004 + Nintendo + + + + + + + + @@ -27662,23 +25464,26 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon - LeafGreen Version (Euro, Rev. 1) 2004 Nintendo - + + + + - + - - Pokémon - Edición Verde Hoja (Spa) + + Pokémon - Version Vert Feuille (Fra) 2004 Nintendo - + @@ -27707,14 +25512,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - Pokémon - Version Vert Feuille (Fra) + + Pokémon - Edición Verde Hoja (Spa) 2004 Nintendo - + + + + + + + Pokémon - LeafGreen Version (USA) + 2004 + Nintendo + + + + + + + + @@ -27725,20 +25546,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + + + Pokémon - Ruby Version (Euro, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Ruby Version (USA) 2003 Nintendo - + @@ -27750,7 +25589,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27762,7 +25601,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27774,7 +25613,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27786,19 +25625,37 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + + + Pokémon - Edición Rubí (Spa) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Version Rubis (Fra, Rev. 1) 2003 Nintendo - + @@ -27810,7 +25667,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27822,7 +25679,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27834,7 +25691,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27847,20 +25704,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + + + Pokémon - Sapphire Version (Euro, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Sapphire Version (USA) 2003 Nintendo - + @@ -27872,7 +25747,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27884,7 +25759,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27896,7 +25771,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27908,7 +25783,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27920,7 +25795,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27932,7 +25807,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27944,7 +25819,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27956,7 +25831,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27967,11 +25842,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon Mystery Dungeon - Red Rescue Team (Euro) 2006 Nintendo - + + + + - + @@ -28006,9 +25884,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -28807,11 +26688,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Puyo Pop (Euro) 2002 Sega - + + + + - + @@ -29119,6 +27003,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Rayman - Raving Rabbids (Euro) + 2006 + Ubisoft + + + + + + + + + + + + Rayman - Raving Rabbids (USA) 2006 @@ -29407,10 +27307,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Revenge of Shinobi (Euro) 2003 Sega - + + + - + @@ -29442,14 +27344,36 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Rhythm Tengoku (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + The Ripping Friends (Euro, USA) 2002 THQ - + + + + - + @@ -29614,6 +27538,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Robot Wars - Extreme Destruction (Euro) + 2002 + BBC Multimedia + + + + + + + + + + + + Robotech - The Macross Saga (Euro, USA) 2002 @@ -29631,11 +27571,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Robots (Euro) 2005 Sierra Entertainment - + + + + - + @@ -29745,10 +27688,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Rocket Power - Dream Scheme (Euro, USA) 2001 THQ - + + + - + @@ -29844,7 +27789,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -30080,9 +28025,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b THQ + + + - + @@ -30487,6 +28435,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Scooby-Doo and the Cyber Chase (Euro, English / French / German) + 2001 + THQ + + + + + + + + + + Scooby-Doo! - Mystery Mayhem (Euro) 2003 @@ -30596,6 +28558,19 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Scrabble Scramble! (Euro) + 2005 + Zoo Digital Publishing + + + + + + + + + Scrabble Scramble! (Euro, English / French / German / Italian / Dutch / Spanish) 2005 @@ -30607,6 +28582,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Screw Breaker - Goushin DoriRureRo (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Scurge - Hive (Euro) 2006 @@ -30830,6 +28824,26 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sennen Kazoku (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + + Sentouin Yamada Hajime (Jpn) 2004 @@ -31167,7 +29181,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + Shin Bokura no Taiyou - Gyakushuu no Sabata (Jpn) 2005 Konami @@ -31175,13 +29189,29 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + Shin Chan - Aventuras en Cineland (Spa) + 2005 + Atari + + + + + + + + + + + + Shin Chan contra los Muñecos de Shock Gahn (Spa) 2006 @@ -31434,11 +29464,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shining Soul (Euro) 2003 Infogrames - + + + + - + @@ -31625,11 +29658,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shrek - Super Slam (Euro) 2005 Activision - + + + + - + @@ -31654,9 +29690,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b TDK Mediactive + + + - + @@ -31665,11 +29704,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shrek 2 (Euro, USA) 2004 Activision - + + + + - + + + + + + + Shrek 2 (Euro, French / German / Italian / Spanish / Swedish) + 2004 + Activision + + + + + + + + @@ -31729,11 +29787,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Sigma Star Saga (Euro, USA) 2005 Namco - + + + + - + @@ -31813,9 +29874,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Zoo Digital Publishing + + + - + @@ -31946,6 +30010,53 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Sims - Bustin' Out (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + + + The Sims (Jpn) + 2004 + Electronic Arts + + + + + + + + + + + + + The Sims 2 (Euro, USA) + 2005 + Electronic Arts + + + + + + + + + + + + The Sims 2 - Pets (Euro, English / French / German / Italian / Spanish / Dutch) 2006 @@ -31971,21 +30082,6 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - The Sims (Jpn) - 2004 - Electronic Arts - - - - - - - - - - - Sister Princess - RePure (Jpn) 2003 @@ -32001,6 +30097,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sitting Ducks (Euro) + 2003 + L.S.P. + + + + + + + + + + Sitting Ducks (USA) 2004 @@ -32152,8 +30262,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + - + @@ -32233,6 +30345,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sonic Advance (Euro) + 2002 + Infogrames + + + + + + + + + + + + Sonic Advance (Jpn, Rev. 1) 2001 @@ -32297,11 +30425,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Advance 2 (Euro) 2003 Infogrames - + + + + - + @@ -32365,9 +30496,12 @@ The cart also contained a non-empty SRAM save which we currently include in the THQ + + + - + @@ -32445,11 +30579,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Pinball Party (Euro) 2003 Sega - + + + + - + @@ -32473,7 +30610,7 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Pinball Party (USA) 2003 Sega - + @@ -32641,11 +30778,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Spider-Man (Euro, USA) 2002 Activision - + + + + - + @@ -32731,11 +30871,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Spider-Man 2 (Euro, USA) 2004 Activision - + + + + - + @@ -32941,11 +31084,14 @@ The cart also contained a non-empty SRAM save which we currently include in the SpongeBob SquarePants - Lights, Camera, Pants! (Euro) 2005 THQ - + + + + - + @@ -32987,6 +31133,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + SpongeBob SquarePants - SuperSponge (Euro, USA) + 2001 + THQ + + + + + + + + + + SpongeBob SquarePants and Friends - Battle for Volcano Island (Euro) 2007 @@ -33307,6 +31467,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Spyro Fusion (Euro) + 2004 + Vivendi Universal + + + + + + + + + + + + Spyro Orange - The Cortex Conspiracy (USA, Rev. A) 2004 @@ -33383,6 +31559,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - Episode II - Attack of the Clones (Euro) + 2002 + THQ + + + + + + + + + + Star Wars - Episode II - Attack of the Clones (USA) 2002 @@ -33433,6 +31623,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - Flight of the Falcon (USA) + 2003 + THQ + + + + + + + + + + Star Wars - Jedi Power Battles (Euro) 2002 @@ -33457,6 +31661,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - The New Droid Army (Euro) + 2002 + THQ + + + + + + + + + + Star Wars - The New Droid Army (USA) 2002 @@ -33519,14 +31737,18 @@ The cart also contained a non-empty SRAM save which we currently include in the - - Starsky & Hutch (USA, Prototype) + + Starsky & Hutch (Euro) 2003 Empire Entertainment + + + + - - + + @@ -33544,6 +31766,18 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Starsky & Hutch (USA, Prototype) + 2003 + Empire Entertainment + + + + + + + + Steel Empire (Euro) 2005 @@ -33611,11 +31845,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Street Fighter Alpha 3 (Euro) 2002 Ubi Soft - + + + + - + @@ -34069,6 +32306,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Donkey Kong 3 (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Archer Maclean's Dropzone (Euro) 2003 @@ -34133,6 +32388,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + Super Mario Advance (USA, Demo Kiosk) 2001 @@ -34164,11 +32435,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Advance 2 - Super Mario World (Euro) 2002 Nintendo - + + + + - + @@ -34201,6 +32475,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance 3 - Yoshi's Island (Euro) + 2002 + Nintendo + + + + + + + + + + + + Super Mario Advance 3 - Yoshi's Island (USA) 2002 @@ -34278,11 +32568,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Advance 4 - Super Mario Bros. 3 (Euro, Rev. 1) 2003 Nintendo - + + + + - + @@ -34300,6 +32593,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance 4 - Super Mario Bros. 3 (USA, Aus, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + Super Mario Advance 4 - Super Mario Bros. 3 (USA) 2003 @@ -34317,11 +32626,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Ball (Euro) 2004 Nintendo - + + + + - + @@ -34565,10 +32877,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Street Fighter II Turbo - Revival (Euro) 2001 Ubi Soft + + + + - + @@ -34625,6 +32941,23 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + Superman Returns - Fortress of Solitude (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + + + + Surf's Up (Euro, English / French / German / Italian / Spanish) 2007 @@ -34885,10 +33218,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tak and the Power of Juju (Euro, English / French / German) 2004 THQ + + + + - + @@ -34946,6 +33283,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tales of Phantasia (USA, Aus) + 2006 + Nintendo + + + + + + + + + + + + Tales of the World - Narikiri Dungeon 2 (Jpn) 2002 @@ -35010,11 +33363,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tang Tang (Euro) 2001 Take-Two Interactive - + + + + - + @@ -35153,6 +33509,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Teenage Mutant Ninja Turtles (Euro) + 2003 + Konami + + + + + + + + + + + + Teenage Mutant Ninja Turtles (USA) 2003 @@ -35170,11 +33542,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Teenage Mutant Ninja Turtles 2 - Battle Nexus (Euro) 2004 Konami - + + + + - + @@ -35196,11 +33571,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tekken Advance (Euro) 2002 Infogrames - + + + + - + @@ -35347,6 +33725,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Terminator 3 - Rise of the Machines (Euro) + 2003 + Atari + + + + + + + + + + Terminator 3 - Rise of the Machines (USA) 2003 @@ -35837,8 +34229,10 @@ The cart also contained a non-empty SRAM save which we currently include in the Ubi Soft + + - + @@ -35859,10 +34253,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom and Jerry in Infurnal Escape (Euro) 2003 Ubi Soft - + + + - + @@ -35903,6 +34299,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tom Clancy's Rainbow Six - Rogue Spear (Euro) + 2002 + Ubi Soft + + + + + + + + + + + + Tom Clancy's Rainbow Six - Rogue Spear (USA) 2002 @@ -35932,11 +34344,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom Clancy's Splinter Cell (Euro) 2003 Ubi Soft - + + + + - + @@ -35958,11 +34373,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom Clancy's Splinter Cell - Pandora Tomorrow (Euro) 2004 Ubisoft - + + + + - + @@ -36045,6 +34463,54 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tony Hawk's Downhill Jam (Euro) + 2006 + Activision + + + + + + + + + + + + + + Tony Hawk's Downhill Jam (USA) + 2006 + Activision + + + + + + + + + + + + + + Tony Hawk's Pro Skater 2 (Euro, USA) + 2001 + Activision + + + + + + + + + + + + Tony Hawk's Pro Skater 2 (Fra) 2001 @@ -36073,11 +34539,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tony Hawk's Pro Skater 3 (Euro, USA) 2002 Activision - + + + + - + @@ -36186,10 +34655,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Top Gear Rally (Euro) 2003 Kemco + + + + - + @@ -36246,6 +34719,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Top Gun - Firestorm Advance (Euro, USA) + 2002 + Titus + + + + + + + + + + Top Spin 2 (Euro) 2006 @@ -36439,6 +34926,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Welcome to The Tower SP (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Toyrobo Force (Jpn) 2001 @@ -36478,6 +34983,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Disney's Treasure Planet (USA) + 2002 + Disney Interactive + + + + + + + + + + Trick Star (Euro) 2006 @@ -36593,6 +35112,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tsuukin Hitofude (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Turbo Turtle Adventure (USA) 2002 @@ -36606,6 +35143,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Turok Evolution (Euro) + 2002 + Acclaim + + + + + + + + + + Turok Evolution (USA) 2002 @@ -36658,9 +35209,15 @@ The cart also contained a non-empty SRAM save which we currently include in the Kemco + + + + + + - + @@ -36897,8 +35454,11 @@ The cart also contained a non-empty SRAM save which we currently include in the Ultimate Spider-Man (Euro) 2005 Activision - + + + + @@ -37054,6 +35614,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + The Urbz - Sims in the City (Euro, USA) + 2004 + Electronic Arts + + + + + + + + + + + + The Urbz - Sims in the City (Jpn) 2004 @@ -37088,11 +35664,14 @@ The cart also contained a non-empty SRAM save which we currently include in the V-Rally 3 (Euro) 2002 Atari - + + + + - + @@ -37247,9 +35826,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Disney Interactive + + + - + @@ -37258,11 +35840,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Wade Hixton's Counter Punch (Euro, USA) 2004 DSI Games - + + + + - + @@ -37482,6 +36067,23 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wario Land 4 (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + + Wario Land Advance (Jpn) 2001 @@ -37497,6 +36099,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + WarioWare, Inc. - Minigame Mania (Euro) + 2003 + Nintendo + + + + + + + + + + + + WarioWare, Inc. - Mega Microgame$! (USA, Prototype) 2003 @@ -37515,9 +36133,31 @@ The cart also contained a non-empty SRAM save which we currently include in the Nintendo + + + - + + + + + + + WarioWare - Twisted! (USA) + 2005 + Nintendo + + + + + + + + + + + @@ -37759,6 +36399,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wing Commander - Prophecy (Euro) + 2003 + Destination Software + + + + + + + + + + + + Wing Commander - Prophecy (USA) 2003 @@ -37932,6 +36588,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wolfenstein 3D (Euro, USA) + 2002 + BAM! Entertainment + + + + + + + + + + + + Woody Woodpecker - Crazy Castle 5 (Jpn) 2002 @@ -37951,11 +36623,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Woody Woodpecker in Crazy Castle 5 (Euro) 2002 Kemco - + + + + - + @@ -38104,8 +36779,10 @@ The cart also contained a non-empty SRAM save which we currently include in the Ubi Soft + + - + @@ -38377,20 +37054,20 @@ The cart also contained a non-empty SRAM save which we currently include in the - + Yoshi - Topsy-Turvy (USA) 2005 Nintendo - + - + Yoshi no Banyuuinryoku (Jpn) 2004 Nintendo @@ -38398,22 +37075,28 @@ The cart also contained a non-empty SRAM save which we currently include in the - + - + Yoshi's Universal Gravitation (Euro) 2005 Nintendo - + - + + + + + + + - + @@ -38519,9 +37202,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Konami + + + - + @@ -38558,11 +37244,15 @@ The cart also contained a non-empty SRAM save which we currently include in the Yu-Gi-Oh! - Reshef of Destruction (Euro) 2004 Konami - + + + + + - + @@ -38584,11 +37274,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Yu-Gi-Oh! - The Sacred Cards (Euro) 2004 Konami - + + + + - + @@ -38658,6 +37351,27 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Jpn, Rev. 1) + 2003 + Konami + + + + + + + + + + + + + + + + + Yu-Gi-Oh! Duel Monsters International 2 (Jpn) 2004 @@ -38673,6 +37387,25 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Yu-Gi-Oh! - The Eternal Duelist Soul (USA) + 2002 + Konami + + + + + + + + + + + + + + + Shonen Jump's Yu-Gi-Oh! - Ultimate Masters Edition - World Championship Tournament 2006 (Euro) 2006 @@ -38686,15 +37419,51 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Shonen Jump's Yu-Gi-Oh! - Ultimate Masters - World Championship Tournament 2006 (USA) + 2006 + Konami + + + + + + + + + + + + + Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (Euro) 2003 Konami - + + + + - + + + + + + + Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (USA) + 2003 + Konami + + + + + + + + @@ -38909,11 +37678,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Zapper (Euro) 2003 Infogrames - + + + + - + @@ -39200,7 +37972,7 @@ The cart also contained a non-empty SRAM save which we currently include in the - + @@ -39214,13 +37986,29 @@ The cart also contained a non-empty SRAM save which we currently include in the - + + + Zone of the Enders - The Fist of Mars (Euro) + 2002 + Konami + + + + + + + + + + + + Zone of the Enders - The Fist of Mars (USA) 2002 @@ -39274,6 +38062,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Zooo (Euro) + 2005 + Ignition Entertainment + + + + + + + + + + + + DigimonAdventure (Chi) @@ -39359,6 +38163,1588 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + + + 2 in 1: Astérix & Obélix - Bash Them All! + Astérix & Obélix XXL (Euro) + 2005 + Atari + + + + + + + + + + + Barbie Superpack: Groovy Games + Secret Agent (Euro) + 2005 + Vivendi Universal + + + + + + + + + + Barbie Superpack: Groovy Games + Secret Agent (USA) + 2005? + Vivendi Universal + + + + + + + + + + 2 Games in 1: Bionicle + Knights' Kingdom (Euro) + 200? + THQ + + + + + + + + + + Double Game!: Cartoon Network Block Party + Cartoon Network Speedway (Euro) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Cartoon Network Block Party + Cartoon Network Speedway (USA) + 2005 + Majesco + + + + + + + + + + Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (Euro) + 2006 + Konami + + + + + + + + + + + + + + + Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (USA) + 2006 + Konami + + + + + + + + + + + 2 Games in 1: Columns Crown + ChuChu Rocket! (Euro) + 2006? + Sega + + + + + + + + + + + Crash Superpack: Crash Bandicoot 2 - N-Tranced + Crash Nitro Kart (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + 2 Games in 1: Disney Princess + Lizzie McGuire (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Lizzie McGuire (Spa) + 200? + THQ + + + + + + + + + + 2 Games in 1: Disney Princess + Disney's Brother Bear (Euro) + 2005 + THQ + + + + + + + + + + + 2 Games in 1: Disney Princesse + Disney's Frère des Ours (Fra) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disneys Prinzessinnen + Disneys Bärenbrüder (Ger) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney Principesse + Disney's Koda, Fratello Orso (Ita) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Disney's Hermano Oso (Spa) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney's The Lion King + Disney Princess (Euro) + 2004 + THQ + + + + + + + + + + + 2 Games in 1: Disney Princesse + Disney's Le Roi Lion (Fra) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disneys Prinzessinnen + Disneys Der Koenig der Loewen (Ger) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney Principesse + Disney's Il Re Leone (Ita) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Disney's El Rey Leon (Spa) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney's Brother Bear + Disney's The Lion King (Euro) + 200? + THQ + + + + + + + + + + + 2 Disney Games: Disney Sports - Football + Disney Sports - Skateboarding (Euro) + 200? + Disney Interactive + + + + + + + + + + 2 Disney Games: Disney's Peter Pan - Return to Neverland + Disney's Lilo & Stitch 2 (Euro) + 200? + Disney Interactive + + + + + + + + + + 2 Games in One: Dora the Explorer Double Pack (USA) + 2007 + Global Star Software + + + + + + + + + + 2 Games in 1: Dragon Ball Z I & II (USA) + 2005 + Atari + + + + + + + + + + + + 2 Games in 1!: Dragon Ball Z - Buu's Fury + Dragon Ball GT - Transformation (USA) + 200? + Atari + + + + + + + + + + + 2 Games in 1: Finding Nemo - The Continuing Adventures + The Incredibles (USA) + 200? + THQ + + + + + + + + + + 2 Games in 1: Findet Nemo + Findet Nemo - Das Abenteuer Geht Weiter (Ger) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Ita?, Spa?) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Fra?, Ned?) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + The Incredibles (Euro) + 2007 + THQ + + + + + + + + + + 2 Games in 1: Finding Nemo + The Incredibles (Euro, French / Dutch) + 2007 + THQ + + + + + + + + + 2 Games in 1: Findet Nemo + Die Unglaublichen (Ger) + 2007 + THQ + + + + + + + + 2 Games in 1: Alla Ricerca di Nemo + Gli Incredibili - Una 'Normale' Famiglia di Supereroi (Ita) + 2007 + THQ + + + + + + + + + 2 Games in 1: Buscando a Nemo + Los Increibles (Spa) + 2007 + THQ + + + + + + + + + Double Game!: Golden Nugget Casino - Texas Hold 'em Poker (Euro) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Golden Nugget Casino - Texas Hold 'em Poker (USA) + 2005 + Majesco + + + + + + + + + + 2 Game Pack!: Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (Euro, USA) + 200? + DSI Games + + + + + + + + + + + + 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (USA) + 200? + THQ + + + + + + + + + Hugo 2 in 1 (Euro) + 2005 + ITE Media + + + + + + + + + + + + + + 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (Euro) + 2006 + Zoo Digital Publishing + + + + + + + + + + 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (USA) + 2006 + DSI Games + + + + + + + + + + 2 Games in 1: Monsters, Inc. + Finding Nemo (Euro) + 2005 + THQ + + + + + + + + + + + + 2 Games in 1: Monsters en Co. + Finding Nemo (Ned) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monstres & Cie + Le Monde de Nemo (Fra) + 2005 + THQ + + + + + + + + + 2 Games in 1: Die Monster AG + Findet Nemo (Ger) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monsters & Co. + Alla Ricerca di Nemo (Ita) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monstruos, S.A. + Buscando a Nemo (Spa) + 2005 + THQ + + + + + + + + + 2 Games in 1 Double Pack: Monsters, Inc. + Finding Nemo (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Moto GP + GT Advance 3 - Pro Concept Racing (Euro) + 200? + THQ + + + + + + + + + + + Pac-Man World & Ms. Pac-Man - Maze Madness (Euro) + 2005 + Zoo Digital Publishing + + + + + + + + + + 2 Great Games!: Pac-Man World + Ms. Pac-Man - Maze Madness (USA) + 2005 + Namco + + + + + + + + + + + Pferd & Pony 2 in 1: Pferd & Pony - Mein Pferdehof + Pferd & Pony - Lass Uns Reiten 2 (Ger) + 2006? + dtp Entertainment + + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Euro) + 2005 + THQ + + + + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - La Force du Temps (Fra) + 2005 + THQ + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Ger) + 2005 + THQ + + + + + + + + + 2 Games in 1 Double Pack: Power Rangers - Ninja Storm + Power Rangers - Time Force (USA) + 2005 + THQ + + + + + + + + + + Prince of Persia - The Sands of Time & Lara Croft Tomb Raider - The Prophecy (Euro) + 2006 + Ubisoft + + + + + + + + + + + Double Game!: Quad Desert Fury + Monster Trucks (Euro) + 2005 + Majesco + + + + + + + + + 2 Games in 1: Quad Desert Fury + Monster Trucks (USA) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Rugrats - Go Wild + SpongeBob SquarePants - SuperSponge (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Les Razmoket Rencontrent les Delajungle + SpongeBob SquarePants - SuperSponge (Fra) + 200? + THQ + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (Euro) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Desatado (Spa) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Les Monstres Se Dechainent (Fra) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (USA) + 2006 + THQ + + + + + + + + + + + 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (USA) + 2005 + THQ + + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar (Euro) + 2006? + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar (USA) + 2006? + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (Euro) + 2006 + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (USA) + 2006 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Shrek 2 + Shark Tale (Euro) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Shrek 2 + Shark Tale (USA) + 2005 + Activision + + + + + + + + + + + 2 Games in 1: Sonic Advance + ChuChu Rocket! (Euro) + 2005 + THQ + + + + + + + + + + + Double Pack: Sonic Advance + ChuChu Rocket! (Jpn) + 2006 + Sega + + + + + + + + + + + + + + 2 Games in 1: Sonic Advance + Sonic Battle (Euro) + 2005 + THQ + + + + + + + + + + + Double Pack: Sonic Advance + Sonic Battle (Jpn) + 2006 + Sega + + + + + + + + + + + + + + 2 Games in 1: Sonic Advance + Sonic Pinball Party (Euro) + 2005 + Sega + + + + + + + + + + + Double Pack: Sonic Battle + Sonic Pinball Party (Jpn) + 2006 + Sega + + + + + + + + + + + + + Combo Pack - Sonic Advance + Sonic Pinball Party (USA) + 2005 + Sega + + + + + + + + + + + 2 Games in 1: Sonic Battle + ChuChu Rocket! (Euro) + 2006? + Sega + + + + + + + + + + 2 Games in 1: Sonic Battle + Sonic Pinball Party (Euro) + 2005 + Sega + + + + + + + + + + + 2 Games in 1: Sonic Pinball Party + Columns Crown (Euro) + 2006 + Sega + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man & Spider-Man 2 (Euro) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man + Spider-Man 2 (USA) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man - Mysterio's Menace + X2 - Wolverine's Revenge (Euro, USA) + 200? + Activision + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Jimmy Neutron Boy Genius (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Nicktoons - Freeze Frame Frenzy (USA) + 200? + THQ + + + + + + + + + + 2 Games in 1 Double Pack: SpongeBob SquarePants - Battle for Bikini Bottom + The Fairly OddParents! - Breakin' da Rules (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (Euro) + 2004 + THQ + + + + + + + + + + 2 Games in 1 Double Pack: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro) + 200? + THQ + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro, Alt) + 200? + THQ + + + + + + + + + 2 Games in 1: The SpongeBob SquarePants Movie + SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Euro) + 2005 + THQ + + + + + + + + + + + Spyro - Season of Ice + Crash Bandicoot 2 - N-Tranced (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + + + + + Spyro 2 - Season of Flame + Crash Nitro Kart (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + Spyro - Fusion + Crash Bandicoot - Fusion (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + Spyro - Season of Ice + Crash Bandicoot - The Huge Adventure (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + + Spyro Superpack: Spyro - Season of Ice + Spyro - Season of Flame (USA) + 2005? + Vivendi Universal + + + + + + + + + + + Teenage Mutant Ninja Turtles Double Pack (Euro) + 2006 + Konami + + + + + + + + + + + Teenage Mutant Ninja Turtles Double Pack (USA) + 2006 + Konami + + + + + + + + + + + 2 Jeux en 1: Titeuf - Ze Gagmachine + Titeuf Méga Compet (Fra) + 2005 + Atari + + + + + + + + + + 2 in 1 Game Pack: Tony Hawk's Underground + Kelly Slater's Pro Surfer (Euro, USA) + 2006 + Activision + + + + + + + + + + 2 in 1: V-Rally 3 + Stuntman (Euro) + 2005 + Atari + + + + + + + + + + Winnie the Pooh's Rumbly Tumbly Adventure & Rayman 3 (Euro) + 2006 + Ubisoft + + + + + + + + + + + Yu-Gi-Oh! Double Pack (Euro) + 2006 + Konami + + + + + + + + + + + + + + + Yu-Gi-Oh! Double Pack (USA) + 2006 + Konami + + + + + + + + + + + Yu-Gi-Oh! Double Pack 2 (USA) + 2006 + Konami + + + + + + + + + + + Ignition Collection: Volume 1- 3 Games in 1: Animal Snap + World Tennis Stars + Super Dropzone (Euro) + 2007? + Ignition Entertainment + + + + + + + + + 3 Games in 1: Rugrats - I Gotta Go Party + SpongeBob SquarePants - SuperSponge + Tak and the Power of Juju (Euro) + 200? + THQ + + + + + + + + + + + 4 Games on One Game Pak (Nicktoons) (USA) + 2007 + THQ + + + + + + + + + + + 4 Games on One Game Pak (Racing) (USA) + 2007 + THQ + + + + + + + + + + + Twin Series 1 - Mezase Debut! - Fashion Designer Monogatari + Kawaii Pet Game Gallery 2 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 2 - Oshare Princess 4 + Renai Uranai Daisakusen! + Renai Party Game - Sweet Heart (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 3 - Konchuu Monster - Ouja Ketteisen + Super Chinese Labyrinth (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 4 - Hamu Hamu Monster EX - Hamster Monogatari RPG + Fantasy Puzzle - Hamster Monogatari - Mahou no Meikyuu 1.2.3 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 5 - Mahou no Kuni no Cake-ya-san Monogatari + Wanwan Meitantei EX (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 6 - Wannyan Idol Gakuen + Koinu to Issho Special (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 7 - Twin Puzzle - Kisekae Wanko EX + Nyaa to Chuu no Rainbow Magic 2 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + @@ -39467,6 +39853,26 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + Play-Yan (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Play-Yan Micro (Jpn) 2005 diff --git a/hash/gbcolor.xml b/hash/gbcolor.xml index 299dd09134f..e6c174a7072 100644 --- a/hash/gbcolor.xml +++ b/hash/gbcolor.xml @@ -86,7 +86,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + 10-Pin Bowling (USA) 1999 Majesco @@ -177,7 +177,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + 3-D Ultra Pinball - Thrillride (USA) 2000 Sierra @@ -3051,7 +3051,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Chee-Chai Alien (Jpn) 2001 Creatures @@ -6698,7 +6698,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Get Chuu Club - Minna no Konchuu Daizukan (Jpn) 1999 Jaleco @@ -8057,7 +8056,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Hole In One Golf (USA) 1999 Natsume @@ -9197,7 +9195,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Kawa no Nushi Tsuri 4 (Jpn) 1999 Victor Interactive Software @@ -10446,7 +10444,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Disney's The Little Mermaid II - Pinball Frenzy (USA) 2000 Disney Interactive @@ -12538,7 +12536,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Missile Command (USA) 1999 Hasbro Interactive @@ -13556,7 +13554,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + NASCAR Challenge (USA) 1999 Hasbro Interactive @@ -14086,7 +14084,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Nushi Tsuri Adventure - Kite no Bouken (Jpn) 2000 Victor Interactive Software @@ -14477,7 +14475,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Perfect Dark (Euro, USA) 2000 Nintendo @@ -15502,7 +15500,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Pokémon Pinball (Euro) 1999 Nintendo @@ -15526,7 +15523,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Pokémon Pinball (Jpn) 1999 Nintendo @@ -15545,7 +15542,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Pokémon Pinball (Aus, USA) 1999 Nintendo @@ -15645,7 +15642,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Polaris SnoCross (USA) 2000 Vatical Entertainment @@ -17088,7 +17085,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Ready 2 Rumble Boxing (USA) 1999 Midway @@ -19194,7 +19191,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Star Wars Episode I - Racer (Euro, USA) 1999 Nintendo @@ -19304,7 +19301,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Super Black Bass - Real Fight (Jpn) 1999 Starfish @@ -19545,7 +19542,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Super Real Fishing (Jpn) 1999 Bottom Up @@ -20151,7 +20148,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Test Drive Off-Road 3 (USA) 1999 Infogrames @@ -20684,7 +20680,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Tonka Raceway (USA, Rumble Version) 1999 Hasbro Interactive @@ -20828,7 +20824,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket (Jpn) 1999 Kemco @@ -20845,7 +20841,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket (USA) 1999 Kemco @@ -20860,7 +20856,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket 2 (Jpn) 1999 Kemco @@ -20895,7 +20891,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Rally (Euro) 1999 Kemco @@ -21645,7 +21641,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Vigilante 8 (USA) 1999 Vatical Entertainment @@ -22909,7 +22905,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Zebco Fishing! (USA) 1999 Vatical Entertainment diff --git a/hash/psx.xml b/hash/psx.xml index 89a71ca0039..f157043e39d 100755 --- a/hash/psx.xml +++ b/hash/psx.xml @@ -2,29 +2,18 @@ - @@ -403,39 +392,63 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Area 51 (USA, v1.1) + Oddworld - Abe's Oddysee (USA, v1.1) 1997 - Atari Interactive - + GT Interactive Software + - + - - + + - Area 51 (USA, v1.0) - 1996 - Atari Interactive - + Oddworld - Abe's Oddysee (USA, v1.0) + 1997 + GT Interactive Software + - + - + + + + + Oddworld - Abe's Exoddus (USA) + 1998 + GT Interactive Software + + + + + + + + + + + + + - Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA) - 1996 - Acclaim Entertainment - - - - - - - - - - - - The Adventures of Lomax (USA) - 1996 - Psygnosis - - - - - - - - - - Alone in the Dark - One-Eyed Jack's Revenge (USA) - 1996 - Kokopeli Digital Studios - - - - - - - - - - - - Alone in the Dark - The New Nightmare (USA) - 2001 - Infogrames - - - - - - - - - - - - - - - Alexi Lalas International Soccer (USA) - 1999 - Take-Two Interactive Software - - - - - - - - - - Disney's Aladdin in Nasira's Revenge (USA) - 2001 - Sony Computer Entertainment America - + Alone in the Dark - One-Eyed Jack's Revenge (USA) + 1996 + Kokopeli Digital Studios + - + - + + + + Alone in the Dark - The New Nightmare (USA) + 2001 + Infogrames + + + + + + + + + + + + + + - Alundra (USA, v1.0) - 1997 - Working Designs - - - - - - - @@ -977,6 +881,179 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Alundra (USA, v1.0) + 1997 + Working Designs + + + + + + + + + + + + Army Men - Air Attack (USA) + 1999 + The 3DO Company + + + + + + + + + + + + Army Men - Air Attack 2 (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Final Front (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - Green Rogue (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Land, Sea, Air (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - Sarge's Heroes 2 (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - Sarge's Heroes (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Team Assault (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - World War (USA) + 2000 + The 3DO Company + + + + + + + + + + Austin Powers Pinball (USA) + 2002 + Gotham Games + + + + + + + + + + Arcade's Greatest Hits - The Atari Collection 2 (USA) + 1998 + Midway Home Entertainment + + + + + + + + + + + + Arcade's Greatest Hits - The Atari Collection 1 (USA) + 1996 + Midway Home Entertainment + + + + + + + + + + + + Arcade's Greatest Hits - The Midway Collection 2 (USA) + 1997 + Midway Home Entertainment + + + + + + + + + + + + Williams Arcade's Greatest Hits (USA) + 1996 + Williams Entertainment + + + + + + + + + + Arc the Lad Collection - Arc the Lad (USA) + 2002 + Working Designs + + + + + + + + + - Arc the Lad Collection - Arc the Lad (USA) - 2002 - Working Designs - - - - - - - - - + Area 51 (USA, v1.1) + 1997 + Atari Interactive + + + + + + + + + + + + Area 51 (USA, v1.0) + 1996 + Atari Interactive + + + + + + + + + + Armorines - Project S.W.A.R.M. (USA) + 2000 + Acclaim Entertainment + + + + + + + + - Army Men - Air Attack (USA) - 1999 - The 3DO Company - - - - - - - - - - - - Army Men - Air Attack 2 (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Final Front (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - Green Rogue (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Land, Sea, Air (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - Sarge's Heroes (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - Sarge's Heroes 2 (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Team Assault (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - World War (USA) - 2000 - The 3DO Company - - - - - - - - - - All Star Racing (USA) - 2002 - Mud Duck Productions - - - - - - - - - + All Star Racing (USA) + 2002 + Mud Duck Productions + + + + + + + + + - Arcade's Greatest Hits - The Atari Collection 1 (USA) - 1996 - Midway Home Entertainment - - - - - - - - - - - - Arcade's Greatest Hits - The Atari Collection 2 (USA) - 1998 - Midway Home Entertainment - - - - - - - - - - Austin Powers Pinball (USA) - 2002 - Gotham Games - - - - - - - - - - Bugs Bunny - Lost in Time (USA) - 2000 - Infogrames - - - - - - - - - + Brain Dead 13 (USA) + 1996 + Crystal Dynamics + + + + + + + + + + + + + + + David Beckham Soccer (USA) + 2002 + Majesco Sales + + + + + + + + + - Broken Helix (USA) - 1997 - Konami of America - - - - - - - - - + Frank Thomas Big Hurt Baseball (USA) + 1996 + Acclaim Entertainment + + + + + + + + + + Billiards (USA) + 2001 + A1 Games + + + + + + + + + - Black Bass with Blue Marlin (USA) - 1999 - HOT-B USA - - - - - - - - - + NHL Blades of Steel 2000 (USA) + 2000 + Konami of America + + + + + + + + + - Billiards (USA) - 2001 - A1 Games - - - - - - - - - - - - Blaster Master - Blasting Again (USA) - 2001 - Crave Entertainment - - - - - - - - - - Blood Omen - Legacy of Kain (USA) - 1996 - Crystal Dynamics - - - - - - - - - + Black Bass with Blue Marlin (USA) + 1999 + HOT-B USA + + + + + + + + + + Blaster Master - Blasting Again (USA) + 2001 + Crave Entertainment + + + + + + + + + + Bomberman Fantasy Race (USA) + 1999 + Atlus Software + + + + + + + + + - Bomberman Fantasy Race (USA) - 1999 - Atlus Software - - - - - - - - - - Bottom of the 9th (USA) - 1996 - Konami of America - - - - - - - - - + Bottom of the 9th (USA) + 1996 + Konami of America + + + + + + + + + - Brain Dead 13 (USA) - 1996 - Crystal Dynamics - - - - - - - - - - - - - - + Broken Helix (USA) + 1997 + Konami of America + + + + + + + + + + Bugs Bunny - Lost in Time (USA) + 2000 + Infogrames + + + + + + + + + + Transformers - Beast Wars Transmetals (USA) + 2000 + BAM! Entertainment + + + + + + + + + - Castrol Honda Superbike Racing (USA) - 1999 - Electronic Arts - - - - - - - - - + Chrono Cross (USA) + 2000 + Square Electronic Arts + + + + + + + + + + + + + + + Championship Bass (USA) + 2000 + Electronic Arts + + + + + + + + + - Championship Bass (USA) - 2000 - Electronic Arts - - - - - - - - - - Chrono Cross (USA) - 2000 - Square Electronic Arts - - - - - - - - - - - - - - - Clock Tower II - The Struggle Within (USA) - 1999 - Agetec - - - - - - - - - Championship Motocross featuring Ricky Carmichael (USA) + Clock Tower II - The Struggle Within (USA) 1999 - THQ - + Agetec + - - - - - - - - Championship Motocross 2001 featuring Ricky Carmichael (USA) - 2001 - THQ - - - - - - - - - - - - Colin McRae Rally (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Colin McRae Rally 2.0 (USA) - 2000 - Sony Computer Entertainment America - - - - - + @@ -4817,7 +4773,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + --> Command & Conquer - Red Alert (USA) 1997 @@ -4859,7 +4815,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + In Cold Blood (USA) + 2001 + DreamCatcher Interactive + + + + + + + + + + + + + - Crusaders of Might and Magic (USA) - 2000 - The 3DO Company - - - - - - - - - + Crusaders of Might and Magic (USA) + 2000 + The 3DO Company + + + + + + + + + + CyberSpeed (USA, v1.1) + 1995 + Mindscape + + + + + + + + + + D (USA) 1996 @@ -6088,23 +6097,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - David Beckham Soccer (USA) - 2002 - Majesco Sales - - - - - - - - - - Disney's Donald Duck - Goin' Quackers (USA) - 2000 - Ubi Soft Entertainment Software - - - - - - - - - Destrega (USA) - 1998 + 1998 Koei @@ -6589,30 +6564,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Dragon Warrior VII (USA) - 2001 - Enix America - - - - - - - - - - - - - - + Die Hard Trilogy 2 - Viva Las Vegas (USA) + 2000 + Fox Interactive + + + + + + + + + - Die Hard Trilogy 2 - Viva Las Vegas (USA) - 2000 - Fox Interactive - - - - - - - - + - Dave Mirra Freestyle BMX (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - - - Dave Mirra Freestyle BMX - Maximum Remix (USA) - 2001 - Acclaim Entertainment - - - - - - - - - Dracula - The Resurrection (USA) 2001 @@ -7196,32 +7111,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Dragon Valor (USA) - 2000 - Namco Hometek - - - - - - - - - - - - - - - Driver - You Are the Wheelman (USA, v1.0) - 1999 - GT Interactive Software - - - - - - - @@ -7296,7 +7168,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Driver - You Are the Wheelman (USA, v1.0) + 1999 + GT Interactive Software + + + + + + + + + Duke Nukem - Time to Kill (USA) + 1998 + GT Interactive Software + + + + + + + + + - Duke Nukem - Time to Kill (USA) - 1998 - GT Interactive Software - - - - - - - - - - - - The Dukes of Hazzard - Racing for Home (USA) - 1999 - SouthPeak Interactive - - - - - - - - - - - - The Dukes of Hazzard II - Daisy Dukes It Out (USA) - 2000 - SouthPeak Interactive - - - - - - - - - - - - The Dukes of Hazzard - Racing for Home (USA, Alt) - 1999 - SouthPeak Interactive - - - - - - - - - + Dragon Valor (USA) + 2000 + Namco Hometek + + + + + + + + + + + + + + + + + Dragon Warrior VII (USA) + 2001 + Enix America + + + + + + + + + + + + + + + Sesame Street - Elmo's Letter Adventure (USA) + 1999 + NewKidCo + + + + + + + + + + + + Sesame Street - Elmo's Number Journey (USA) + 1999 + NewKidCo + + + + + + + + + + Formula 1 (USA, v1.1) + 1996 + Psygnosis + + + + + + + + + + + + Formula 1 (USA, v1.0) + 1996 + Psygnosis + + + + + + + + + + + + F1 2000 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + Formula 1 98 (USA) + 1998 + Psygnosis + + + + + + + + + - Formula 1 (USA, v1.1) - 1996 - Psygnosis - - - - - - - - - - - - Formula 1 (USA, v1.0) - 1996 - Psygnosis - - - - - - - - - - - - F1 2000 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - Formula 1 98 (USA) - 1998 - Psygnosis - - - - - - - - - + Fisherman's Bait - A Bass Challenge (USA) + 1999 + Konami of America + + + + + + + + + + + + Fisherman's Bait 2 - Big Ol' Bass (USA) + 1999 + Konami of America + + + + + + + + + + Final Fantasy Tactics (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + - Final Fantasy Tactics (USA) - 1998 - Sony Computer Entertainment America - - - - - - - @@ -9127,6 +9083,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + 2002 FIFA World Cup (USA) + 2002 + Electronic Arts + + + + + + + + + - 2002 FIFA World Cup (USA) - 2002 - Electronic Arts - - - - - - - - - - Fisherman's Bait 2 - Big Ol' Bass (USA) - 1999 - Konami of America - - - - - - - - - - - - Fisherman's Bait - A Bass Challenge (USA) - 1999 - Konami of America - - - - - - - - - - Frank Thomas Big Hurt Baseball (USA) - 1996 - Acclaim Entertainment - - - - - - - - - - Geom Cube (USA) - 1995 - American Technos - - - - - - - - - + Geom Cube (USA) + 1995 + American Technos + + + + + + + + + - Golden Nugget (USA) - 1997 - Virgin Interactive Entertainment - - - - - - - - - - - - @@ -10075,7 +9954,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Disney's Donald Duck - Goin' Quackers (USA) + 2000 + Ubi Soft Entertainment Software + + + + + + + + + + Golden Nugget (USA) + 1997 + Virgin Interactive Entertainment + + + + + + + + + + + + + + + + + --> Gran Turismo (USA, v1.0) 1998 Sony Computer Entertainment America @@ -10409,12 +10329,12 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + @@ -10490,7 +10410,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Harry Potter and the Chamber of Secrets (USA) - 2002 - Electronic Arts - - - - - - - - - - - - Harry Potter and the Sorcerer's Stone (USA) - 2001 - Electronic Arts - - - - - - - - - + The Dukes of Hazzard - Racing for Home (USA) + 1999 + SouthPeak Interactive + + + + + + + + + + + + The Dukes of Hazzard II - Daisy Dukes It Out (USA) + 2000 + SouthPeak Interactive + + + + + + + + + + + + The Dukes of Hazzard - Racing for Home (USA, Alt) + 1999 + SouthPeak Interactive + + + + + + + + + + Sammy Sosa High Heat Baseball 2001 (USA) + 2000 + The 3DO Company + + + + + + + + + + Mat Hoffman's Pro BMX (USA) + 2001 + Activision + + + + + + + + + + Castrol Honda Superbike Racing (USA) + 1999 + Electronic Arts + + + + + + + + + + Hot Wheels - Turbo Racing (USA) + 1999 + Electronic Arts + + + + + + + + + - Hot Wheels - Turbo Racing (USA) - 1999 + Harry Potter and the Chamber of Secrets (USA) + 2002 Electronic Arts - + - + + + + + + + + Harry Potter and the Sorcerer's Stone (USA) + 2001 + Electronic Arts + + + + + @@ -11244,6 +11273,36 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + The Incredible Hulk - The Pantheon Saga (USA) + 1996 + Eidos Interactive + + + + + + + + + - In Cold Blood (USA) - 2001 - DreamCatcher Interactive - - - - - - - - - - - - - - - The Incredible Hulk - The Pantheon Saga (USA) - 1996 - Eidos Interactive - - - - - - - - - + Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA) + 1996 + Acclaim Entertainment + + + + + + + + + - Jackie Chan Stuntmaster (USA) - 2000 - Midway Home Entertainment - - - - - - - - - - Walt Disney's The Jungle Book - Rhythm n' Groove (USA) + Jackie Chan Stuntmaster (USA) 2000 - Ubi Soft Entertainment Software - + Midway Home Entertainment + - + @@ -12217,6 +12222,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Walt Disney's The Jungle Book - Rhythm n' Groove (USA) + 2000 + Ubi Soft Entertainment Software + + + + + + + + + + Blood Omen - Legacy of Kain (USA) + 1996 + Crystal Dynamics + + + + + + + + + + + + Legacy of Kain - Soul Reaver (USA) + 1999 + Eidos Interactive + + + + + + + + + - Kickboxing (USA) - 2002 - Agetec / A1 Games - + Virtual Kasparov (USA) + 2001 + Titus Software Corporation + - + @@ -12419,6 +12479,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Kickboxing (USA) + 2002 + Agetec / A1 Games + + + + + + + + + + Killer Loop (USA) + 1999 + Crave Entertainment + + + + + + + + + - Killer Loop (USA) - 1999 - Crave Entertainment - - - - - - - - - - Largo Winch - Commando SAR (USA) - 2002 - Ubi Soft Entertainment Software - + Alexi Lalas International Soccer (USA) + 1999 + Take-Two Interactive Software + - + @@ -12887,6 +12964,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + The Land Before Time - Return to the Great Valley (USA) + 2000 + Universal Interactive + + + + + + + + + - The Land Before Time - Return to the Great Valley (USA) - 2000 - Universal Interactive - + Largo Winch - Commando SAR (USA) + 2002 + Ubi Soft Entertainment Software + - + @@ -12962,7 +13056,56 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + + + Lode Runner (USA) + 1998 + Natsume + + + + + + + + + - Legend of Mana (USA) - 2000 - Square Electronic Arts - - - - - - - @@ -13148,23 +13274,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Disney's The Little Mermaid II (USA) - 2000 - THQ - - - - - - - - - - Lode Runner (USA) - 1998 - Natsume - + The Adventures of Lomax (USA) + 1996 + Psygnosis + - + @@ -13277,6 +13378,61 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Norse by Norsewest - The Return of the Lost Vikings (USA) + 1997 + Interplay Productions + + + + + + + + + + + + The Lost World - Jurassic Park (USA) + 1997 + Electronic Arts + + + + + + + + + + + + The Lost World - Jurassic Park - Special Edition (USA) + 1998 + Electronic Arts + + + + + + + + + - The Lost World - Jurassic Park (USA) - 1997 - Electronic Arts - - - - - - - - - - - - The Lost World - Jurassic Park - Special Edition (USA) - 1998 - Electronic Arts - - - - - - - - - - Madden NFL 97 (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Madden NFL 98 (USA) - 1997 - Electronic Arts - - - - - - - - - - - - Madden NFL 98 (USA, Alt) - 1997 - Electronic Arts - - - - - - - - - - - - Madden NFL 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - Magic Carpet (USA) + Madden NFL 97 (USA) 1996 Electronic Arts - + - + + + + + + + + Madden NFL 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + Madden NFL 98 (USA, Alt) + 1997 + Electronic Arts + + + + + + + + + + + + Madden NFL 99 (USA) + 1998 + Electronic Arts + + + + + @@ -13753,6 +13846,31 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Magic Carpet (USA) + 1996 + Electronic Arts + + + + + + + + + + Legend of Mana (USA) + 2000 + Square Electronic Arts + + + + + + + + + - Mobile Armor (USA) - 2002 - Tommo - + Rosco McQueen Firefighter Extreme (USA) + 1998 + Psygnosis + - + - + - Motocross Mania (USA) - 2001 - Take-Two Interactive Software - + Colin McRae Rally (USA) + 2000 + Sony Computer Entertainment America + - + - + - Motocross Mania 2 (USA) - 2003 - Take-Two Interactive Software - + Colin McRae Rally 2.0 (USA) + 2000 + Sony Computer Entertainment America + - + @@ -14030,6 +14148,110 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Mega Man 8 (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Mega Man X4 (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Mega Man X5 (USA) + 2001 + Capcom Entertainment + + + + + + + + + + + + Mega Man X6 (USA, v1.1) + 2001 + Capcom Entertainment + + + + + + + + + + + + Mega Man X6 (USA, v1.0) + 2001 + Capcom Entertainment + + + + + + + + + + + + Disney's The Little Mermaid II (USA) + 2000 + THQ + + + + + + + + + - Mat Hoffman's Pro BMX (USA) - 2001 - Activision - + Medal of Honor (USA) + 1999 + Electronic Arts + - + + + + + + + + Medal of Honor - Underground (USA) + 2000 + Electronic Arts + + + + + @@ -14147,6 +14386,24 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + FoxKids.com - Micro Maniacs Racing (USA) + 2000 + The Codemasters Software Company + + + + + + + + + - Arcade's Greatest Hits - The Midway Collection 2 (USA) - 1997 - Midway Home Entertainment - - - - - - - - - + Dave Mirra Freestyle BMX (USA) + 2000 + Acclaim Entertainment + + + + + + + + + + + + Dave Mirra Freestyle BMX - Maximum Remix (USA) + 2001 + Acclaim Entertainment + + + + + + + + + - Mary-Kate and Ashley - Crush Course (USA) - 2001 - Acclaim Entertainment - - - - - - - - - - - - Mary-Kate and Ashley - Magical Mystery Mall (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - - - Mary-Kate and Ashley - Winners Circle (USA) - 2001 - Acclaim Entertainment - - - - - - - - - - - - Mortal Kombat Mythologies - Sub-Zero (USA) - 1997 - Midway Home Entertainment - - - - - - - - - - Mega Man 8 (USA) - 1997 - Capcom Entertainment - - - - - - - - - - FoxKids.com - Micro Maniacs Racing (USA) - 2000 - The Codemasters Software Company - - - - - - - - - - Mega Man X4 (USA) - 1997 - Capcom Entertainment - - - - - - - - - - - - Mega Man X5 (USA) + Mary-Kate and Ashley - Winners Circle (USA) 2001 - Capcom Entertainment - + Acclaim Entertainment + - + - + - Mega Man X6 (USA, v1.1) + Mary-Kate and Ashley - Crush Course (USA) 2001 - Capcom Entertainment - + Acclaim Entertainment + - - - - - - - - Mega Man X6 (USA, v1.0) - 2001 - Capcom Entertainment - - - - - - - - - - - - Monkey Magic (USA) - 1999 - Sunsoft - - - - - + - + - MonsterSeed (USA) - 1999 - Sunsoft - + Mary-Kate and Ashley - Magical Mystery Mall (USA) + 2000 + Acclaim Entertainment + - + @@ -14944,36 +15064,30 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Medal of Honor (USA) - 1999 - Electronic Arts - + Mobile Armor (USA) + 2002 + Tommo + - - - - - - - - Medal of Honor - Underground (USA) - 2000 - Electronic Arts - - - - - + @@ -14995,6 +15109,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Monkey Magic (USA) + 1999 + Sunsoft + + + + + + + + + + MonsterSeed (USA) + 1999 + Sunsoft + + + + + + + + + + Championship Motocross featuring Ricky Carmichael (USA) + 1999 + THQ + + + + + + + + + + + + Championship Motocross 2001 featuring Ricky Carmichael (USA) + 2001 + THQ + + + + + + + + + + Motocross Mania (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Motocross Mania 2 (USA) + 2003 + Take-Two Interactive Software + + + + + + + + + + NASCAR 98 Collector's Edition (USA) + 1998 + Electronic Arts + + + + + + + + + + + + NASCAR 99 Legacy (USA) + 1999 + Electronic Arts + + + + + + + + + + NASCAR 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + NASCAR 99 (USA) + 1998 + Electronic Arts + + + + + + + + + + + + NASCAR Racing (USA) + 1996 + Sierra On-Line + + + + + + + + + + + + NASCAR Rumble (USA) + 2000 + Electronic Arts + + + + + + + + + + + + NASCAR Heat (USA) + 2000 + Hasbro Interactive + + + + + + + + + - NASCAR 98 (USA) - 1997 - Electronic Arts - + Disney's Aladdin in Nasira's Revenge (USA) + 2001 + Sony Computer Entertainment America + - - - - - - - - NASCAR 98 Collector's Edition (USA) - 1998 - Electronic Arts - - - - - - - - - - - - NASCAR 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - - - NASCAR 99 Legacy (USA) - 1999 - Electronic Arts - - - - - - - - - - - - NASCAR Heat (USA) - 2000 - Hasbro Interactive - - - - - - - - - - - - NASCAR Racing (USA) - 1996 - Sierra On-Line - - - - - - - - - - - - NASCAR Rumble (USA) - 2000 - Electronic Arts - - - - - + @@ -16243,112 +16496,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - NBA in the Zone 2000 (USA) - 2000 - Konami of America - - - - - - - - - - - - NBA in the Zone '98 (USA, v1.1) - 1998 - Konami of America - - - - - - - - - - - - NBA in the Zone '98 (USA, v1.0) - 1998 - Konami of America - - - - - - - - - - - - NBA in the Zone '99 (USA) - 1999 - Konami of America - - - - - - - - - - - - NBA in the Zone (USA) - 1995 - Konami of America - - - - - - - - - - - - NBA in the Zone 2 (USA) - 1996 - Konami of America - - - - - - - - - - NBA Live 2001 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - NBA Live 2002 (USA) - 2001 - Electronic Arts - - - - - - - - - - - - NBA Live 2003 (USA) - 2002 - Electronic Arts - - - - - - - - - + NBA Live 2001 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + NBA Live 2002 (USA) + 2001 + Electronic Arts + + + + + + + + + + + + NBA Live 2003 (USA) + 2002 + Electronic Arts + + + + + + + + + - Norse by Norsewest - The Return of the Lost Vikings (USA) - 1997 - Interplay Productions - + NBA in the Zone 2000 (USA) + 2000 + Konami of America + - + + + + + + + + NBA in the Zone '98 (USA, v1.1) + 1998 + Konami of America + + + + + + + + + + + + NBA in the Zone '98 (USA, v1.0) + 1998 + Konami of America + + + + + + + + + + + + NBA in the Zone '99 (USA) + 1999 + Konami of America + + + + + + + + + + + + NBA in the Zone (USA) + 1995 + Konami of America + + + + + + + + + + + + NBA in the Zone 2 (USA) + 1996 + Konami of America + + + + + @@ -16734,7 +16970,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Nightmare Creatures II (USA) + 2000 + Konami of America + + + + + + + + + + + + Nightmare Creatures (USA) + 1997 + Activision + + + + + + + + + - The Next Tetris (USA) - 1999 - Hasbro Interactive - + Newman Haas Racing (USA) + 1998 + Psygnosis + - - - - - - - - No Fear Downhill Mountain Bike Racing (USA) - 1999 - The Codemasters Software Company - - - - - + @@ -17108,96 +17378,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - NFL GameDay 97 (USA) - 1996 - Sony Computer Entertainment America - - - - - - - - - - - - NFL GameDay 98 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - NFL GameDay 99 (USA, v1.1) - 1998 - 989 Sports - - - - - - - - - - - - NFL GameDay 99 (USA, v1.0) - 1998 - 989 Sports - - - - - - - - - - - - NFL GameDay (USA) - 1996 - Sony Computer Entertainment America - - - - - - - - - + NFL GameDay 97 (USA) + 1996 + Sony Computer Entertainment America + + + + + + + + + + + + NFL GameDay 98 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + NFL GameDay 99 (USA, v1.1) + 1998 + 989 Sports + + + + + + + + + + + + NFL GameDay 99 (USA, v1.0) + 1998 + 989 Sports + + + + + + + + + + + + NFL GameDay (USA) + 1996 + Sony Computer Entertainment America + + + + + + + + + - Nightmare Creatures II (USA) - 2000 - Konami of America - - - - - - - - - - - - Nightmare Creatures (USA) - 1997 - Activision - - - - - - - - - - NHL Blades of Steel 2000 (USA) - 2000 - Konami of America - - - - - - - - - - Newman Haas Racing (USA) - 1998 - Psygnosis - + No Fear Downhill Mountain Bike Racing (USA) + 1999 + The Codemasters Software Company + - + @@ -17992,64 +18184,33 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Oddworld - Abe's Exoddus (USA) - 1998 - GT Interactive Software - + The Next Tetris (USA) + 1999 + Hasbro Interactive + - + - - - - - - + - - - Oddworld - Abe's Oddysee (USA, v1.1) - 1997 - GT Interactive Software - - - - - - - - - - - - Oddworld - Abe's Oddysee (USA, v1.0) - 1997 - GT Interactive Software - - - - - - - - - - Pandemonium! (USA) - 1996 - Crystal Dynamics - - - - - - - - - - Parasite Eve (USA) - 1998 - Square Electronic Arts - + Pandemonium! (USA) + 1996 + Crystal Dynamics + - + - + - + + + + + PaRappa the Rapper (USA) + 1997 + Sony Computer Entertainment America + + + - + @@ -18361,19 +18515,26 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - PaRappa the Rapper (USA) - 1997 - Sony Computer Entertainment America - + Parasite Eve (USA) + 1998 + Square Electronic Arts + - + - + + + + + + @@ -18458,7 +18619,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + Pink Panther - Pinkadelic Pursuit (USA) + 2002 + DreamCatcher Interactive / Wanadoo Edition + + + + + + + + + - Pitfall 3D - Beyond the Jungle (USA) - 1998 - Activision - - - - - - - - - + Pitfall 3D - Beyond the Jungle (USA) + 1998 + Activision + + + + + + + + + - Armorines - Project S.W.A.R.M. (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - Pink Panther - Pinkadelic Pursuit (USA) - 2002 - DreamCatcher Interactive / Wanadoo Edition - - - - - - - - - - Saban's Power Rangers - Lightspeed Rescue (USA) - 2000 - THQ - - - - - - - - - - - - Saban's Power Rangers - Time Force (USA) - 2001 - THQ - - - - - - - - - - Saban's Power Rangers Zeo - Full Tilt Battle Pinball (USA) - 1996 - Bandai America - - - - - - - - - + Saban's Power Rangers - Lightspeed Rescue (USA) + 2000 + THQ + + + + + + + + + + Professional Underground League of Pain (USA) + 1997 + Psygnosis + + + + + + + + + + + + Saban's Power Rangers - Time Force (USA) + 2001 + THQ + + + + + + + + + + + + Saban's Power Rangers Zeo - Full Tilt Battle Pinball (USA) + 1996 + Bandai America + + + + + + + + + + Power Spike - Pro Beach Volleyball (USA) + 2000 + Infogrames + + + + + + + + + - Professional Underground League of Pain (USA) - 1997 - Psygnosis - - - - - - - - - - Power Spike - Pro Beach Volleyball (USA) - 2000 - Infogrames - - - - - - - - - - Ready 2 Rumble Boxing (USA) - 1999 - Midway Home Entertainment - - - - - - - - - + Ready 2 Rumble Boxing (USA) + 1999 + Midway Home Entertainment + + + + + + + + + + Railroad Tycoon II (USA) + 2000 + Take-Two Interactive Software + + + + + + + + + + Rampage - World Tour (USA) + 1997 + Midway Home Entertainment + + + + + + + + + + Rampage - Through Time (USA) + 2000 + Midway Home Entertainment + + + + + + + + + + Razor Freestyle Scooter (USA) + 2000 + Crave Entertainment + + + + + + + + + + Nickelodeon Rocket Power - Team Rocket Rescue (USA) + 2001 + THQ + + + + + + + + + - Resident Evil (USA) - 1996 - Capcom Entertainment - - - - - - - - - - - - Resident Evil 2 (USA) - 1998 - Capcom Entertainment - - - - - - - - - - - - - - - - - Resident Evil 2 - Dual Shock Ver. (USA) - 1998 - Capcom Entertainment - - - - - - - - - - - - - - - - - Resident Evil 3 - Nemesis (USA) - 1999 - Capcom Entertainment - - - - - - - - - - Resident Evil - Director's Cut (USA) - 1997 - Capcom Entertainment - - - - - - - - - - - - Resident Evil - Director's Cut - Dual Shock Ver. (USA) - 1998 - Capcom Entertainment - - - - - - - - - - Resident Evil - Survivor (USA) - 2000 - Capcom Entertainment - - - - - - - - - + Resident Evil (USA) + 1996 + Capcom Entertainment + + + + + + + + + + + + Resident Evil 2 (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + + + + + + Resident Evil 2 - Dual Shock Ver. (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + + + + + + Resident Evil 3 - Nemesis (USA) + 1999 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Director's Cut (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Director's Cut - Dual Shock Ver. (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Survivor (USA) + 2000 + Capcom Entertainment + + + + + + + + + + Rising Zan - The Samurai Gunman (USA) + 1999 + Agetec + + + + + + + + + - Rampage - Through Time (USA) - 2000 - Midway Home Entertainment - - - - - - - - - - - - Rampage - World Tour (USA) - 1997 - Midway Home Entertainment - - - - - - - - - - - - Rosco McQueen Firefighter Extreme (USA) - 1998 - Psygnosis - - - - - - - - - - Nickelodeon Rocket Power - Team Rocket Rescue (USA) - 2001 - THQ - - - - - - - - - - Roswell Conspiracies - Aliens, Myths & Legends (USA) - 2001 - Ubi Soft Entertainment Software - - - - - - - - - + Roswell Conspiracies - Aliens, Myths & Legends (USA) + 2001 + Ubi Soft Entertainment Software + + + + + + + + + - Railroad Tycoon II (USA) - 2000 - Take-Two Interactive Software - - - - - - - - - - Nickelodeon Rugrats - Totally Angelica (USA) - 2001 - THQ - - - - - - - - - + Nickelodeon Rugrats - Totally Angelica (USA) + 2001 + THQ + + + + + + + + + - Rising Zan - The Samurai Gunman (USA) - 1999 - Agetec - - - - - - - - - - Razor Freestyle Scooter (USA) - 2000 - Crave Entertainment - - - - - - - - - + Saltwater Sportfishing (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + - Speedball 2100 (USA) - 2000 - Empire Interactive Entertainment - - - - - - - - - - - - Nickelodeon SpongeBob SquarePants - SuperSponge (USA) - 2001 - THQ - - - - - - - - - + Sesame Steet Sports (USA) + 2001 + NewKidCo + + + + + + + + + + Street Fighter Collection (USA, v1.0) + 1997 + Capcom Entertainment + + + + + + + + + + + + + + + Sim City 2000 (USA) + 1996 + Maxis + + + + + + + + + - Sim City 2000 (USA) - 1996 - Maxis - - - - - - - - - + Sammy Sosa Softball Slam (USA) + 2000 + The 3DO Company + + + + + + + + + - Legacy of Kain - Soul Reaver (USA) - 1999 - Eidos Interactive - - - - - - - @@ -23532,42 +23755,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Soviet Strike (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Space Hulk - Vengeance of the Blood Angels (USA) - 1996 - Electronic Arts - - - - - - - - - - Spawn - The Eternal (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - Sports Car GT (USA) - 1999 - Electronic Arts - - - - - - - - - - - - Spec Ops - Airborne Commando (USA) - 2002 - Gotham Games - - - - - - - - - - - - Spec Ops - Covert Assault (USA) - 2001 - Take-Two Interactive Software - - - - - - - - - - - - Spec Ops - Ranger Elite (USA) - 2001 - Take-Two Interactive Software - - - - - - - - - - - - Spec Ops - Stealth Patrol (USA) - 2000 - Take-Two Interactive Software - - - - - - - - - - - - Speed Punks (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Speed Racer (USA) - 1998 - Jaleco USA - - - - - - - - - - - - Super Puzzle Fighter II Turbo (USA) - 1996 - Capcom Entertainment - - - - - - - - - - - - Spice World (USA) - 1998 - Psygnosis - - - - - - - - - - - - Spider - The Video Game (USA) - 1997 - BMG Interactive Entertainment - - - - - - - - - - - - Spider-Man 2 - Enter - Electro (USA) - 2001 - Activision - - - - - - - - - - - - Spider-Man (USA) - 2000 - Activision - - - - - - - - - - - - Spin Jam (USA) - 2000 - Empire Interactive Entertainment - - - - - - - - - - - - Spot Goes to Hollywood (USA) - 1996 - Virgin Interactive Entertainment - - - - - - - - - - Striker Pro 2000 (USA) - 2000 - Infogrames - + Spawn - The Eternal (USA) + 1997 + Sony Computer Entertainment America + - + + + + + + + + Sports Car GT (USA) + 1999 + Electronic Arts + + + + + + + + + + + + Space Hulk - Vengeance of the Blood Angels (USA) + 1996 + Electronic Arts + + + + + + + + + + + + Speedball 2100 (USA) + 2000 + Empire Interactive Entertainment + + + + + + + + + + + + Speed Punks (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + Speed Racer (USA) + 1998 + Jaleco USA + + + + + + + + + + + + Spec Ops - Airborne Commando (USA) + 2002 + Gotham Games + + + + + + + + + + + + Spec Ops - Covert Assault (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Spec Ops - Ranger Elite (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Spec Ops - Stealth Patrol (USA) + 2000 + Take-Two Interactive Software + + + + + + + + + + + + Super Puzzle Fighter II Turbo (USA) + 1996 + Capcom Entertainment + + + + + + + + + + + + Spice World (USA) + 1998 + Psygnosis + + + + + + + + + + + + Spider - The Video Game (USA) + 1997 + BMG Interactive Entertainment + + + + + + + + + + + + Spider-Man (USA) + 2000 + Activision + + + + + + + + + + + + Spider-Man 2 - Enter - Electro (USA) + 2001 + Activision + + + + + + + + + + + + Spin Jam (USA) + 2000 + Empire Interactive Entertainment + + + + + + + + + + + + Nickelodeon SpongeBob SquarePants - SuperSponge (USA) + 2001 + THQ + + + + + @@ -24056,7 +24254,46 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + + + Spot Goes to Hollywood (USA) + 1996 + Virgin Interactive Entertainment + + + + + + + + + + Street Racer (USA) + 1996 + Ubi Soft Entertainment Software + + + + + + + + + + + + Street Racquetball (USA) + 2002 + Agetec + + + + + + + + + + Sports Superbike 2 (USA) + 2002 + Mud Duck Productions + + + + + + + + + - Sammy Sosa High Heat Baseball 2001 (USA) - 2000 - The 3DO Company - - - - - - - - - - Sesame Street - Elmo's Letter Adventure (USA) - 1999 - NewKidCo - + Soviet Strike (USA) + 1996 + Electronic Arts + - - - - - - - - Sesame Street - Elmo's Number Journey (USA) - 1999 - NewKidCo - - - - - - - - - - - - Sammy Sosa Softball Slam (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Sesame Steet Sports (USA) - 2001 - NewKidCo - - - - - - - - - - - - Sports Superbike 2 (USA) - 2002 - Mud Duck Productions - - - - - + @@ -24374,7 +24598,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + --> Star Ocean - The Second Story (USA) 1999 @@ -24461,6 +24685,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Striker Pro 2000 (USA) + 2000 + Infogrames + + + + + + + + + - Street Racer (USA) - 1996 - Ubi Soft Entertainment Software - - - - - - - - - - Street Racquetball (USA) - 2002 - Agetec - - - - - - - - - + Mortal Kombat Mythologies - Sub-Zero (USA) + 1997 + Midway Home Entertainment + + + + + + + + + - Star Wars - Episode I - Jedi Power Battles (USA) - 2000 - LucasArts Entertainment Company - - - - - - - - - - Saltwater Sportfishing (USA) - 2001 - Take-Two Interactive Software - + Star Wars - Episode I - Jedi Power Battles (USA) + 2000 + LucasArts Entertainment Company + - + @@ -25058,7 +25230,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Tales of Destiny II (USA) - 2001 - Namco Hometek - - - - - - - - - - - - - - - - - - - - - - Tales of Destiny (USA) - 1998 - Namco Hometek - - - - - - - - - + Test Drive 4 (USA) + 1997 + Accolade + + + + + + + + + + + + Test Drive 5 (USA) + 1998 + Accolade + + + + + + + + + + + + Test Drive 6 (USA) + 1999 + Infogrames + + + + + + + + + + + + Test Drive Le Mans (USA) + 2000 + Infogrames + + + + + + + + + + + + Test Drive Off-Road (USA) + 1997 + Accolade + + + + + + + + + + + + Test Drive Off-Road 2 (USA) + 1998 + Accolade + + + + + + + + + + + + Test Drive Off-Road 3 (USA) + 1999 + Infogrames + + + + + + + + - Test Drive 4 (USA) - 1997 - Accolade - - - - - - - - - - - - Test Drive 5 (USA) - 1998 - Accolade - - - - - - - - - - - - Test Drive 6 (USA) - 1999 - Infogrames - - - - - - - - - - - - Test Drive Le Mans (USA) - 2000 - Infogrames - - - - - - - - - - - - Test Drive Off-Road (USA) - 1997 - Accolade - - - - - - - - - - - - Test Drive Off-Road 2 (USA) - 1998 - Accolade - - - - - - - - - - - - Test Drive Off-Road 3 (USA) - 1999 - Infogrames - - - - - - - - - + Thunder Force V - Perfect System (USA) + 1998 + Working Designs + + + + + + + + + - Thunderstrike 2 (USA) - 1996 - U.S. Gold - - - - - - - - - - - - Thunder Force V - Perfect System (USA) - 1998 - Working Designs - - - - - - - - - + Tales of Destiny (USA) + 1998 + Namco Hometek + + + + + + + + + + + + Tales of Destiny II (USA) + 2001 + Namco Hometek + + + + + + + + + + + + + + + + + + + + Battle Arena Toshinden (USA) + 1995 + Sony Computer Entertainment America + + + + + + + + + + + + Battle Arena Toshinden 2 (USA) + 1996 + Playmates Interactive Entertainment + + + + + + + + + + + + Battle Arena Toshinden 3 (USA) + 1997 + Playmates Interactive Entertainment + + + + + + + + + + Triple Play Baseball (USA) + 2001 + Electronic Arts + + + + + + + + + + + + Triple Play 2000 (USA) + 1999 + Electronic Arts + + + + + + + + + + + + Triple Play 2001 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + Triple Play 97 (USA) + 1996 + Electronic Arts + + + + + + + + + + + + Triple Play 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + Triple Play 99 (USA) + 1998 + Electronic Arts + + + + + + + + + - Transformers - Beast Wars Transmetals (USA) - 2000 - BAM! Entertainment - - - - - - - - - - Tomb Raider (USA, v1.5) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.4) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.3) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.2) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.1) - 1996 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.0) - 1996 - Eidos Interactive - - - - - - - - + Tomb Raider (USA, v1.5) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.4) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.3) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.2) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.1) + 1996 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.0) + 1996 + Eidos Interactive + + + + + + + + - Treasures of the Deep (USA) - 1997 - Namco Hometek - - - - - - - - + Treasures of the Deep (USA) + 1997 + Namco Hometek + + + + + + + + + - Triple Play 2001 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - Triple Play 2000 (USA) - 1999 - Electronic Arts - - - - - - - - - - - - Triple Play 97 (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Triple Play 98 (USA) - 1997 - Electronic Arts - - - - - - - - - - - - Triple Play 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - - - Triple Play Baseball (USA) - 2001 - Electronic Arts - - - - - - - - - - Battle Arena Toshinden 2 (USA) + Thunderstrike 2 (USA) 1996 - Playmates Interactive Entertainment - + U.S. Gold + - - - - - - - - Battle Arena Toshinden 3 (USA) - 1997 - Playmates Interactive Entertainment - - - - - - - - - - - - Battle Arena Toshinden (USA) - 1995 - Sony Computer Entertainment America - - - - - + @@ -28220,8 +28375,8 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - + + - Vigilante 8 (USA, v1.1) - 1998 - Activision - - - - - - - - - + + Vigilante 8 (USA, v1.1) + 1998 + Activision + + + + + + + + + - Virtual Kasparov (USA) - 2001 - Titus Software Corporation - - - - - - - - - + Virtual Pool (USA) + 1997 + Interplay Productions + + + + + + + + + + + + Virtual Pool 3 (USA) + 2003 + XS Games + + + + + + + + + - Virtual Pool (USA) - 1997 - Interplay Productions - - - - - - - - - - - - Virtual Pool 3 (USA) - 2003 - XS Games - - - - - - - - - + Who Wants to Be a Millionaire - 2nd Edition (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + Who Wants to Be a Millionaire - 3rd Edition (USA) + 2001 + Sony Computer Entertainment America + + + + + + + + + - Williams Arcade's Greatest Hits (USA) - 1996 - Williams Entertainment - - - - - - - - - + Wipeout XL (USA, Prototype) + 1996 + Psygnosis + + + + + + + + + + WWF In Your House (USA, v1.0) + 1996 + Acclaim Entertainment + + + + + + + + - Who Wants to Be a Millionaire - 2nd Edition (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Who Wants to Be a Millionaire - 3rd Edition (USA) - 2001 - Sony Computer Entertainment America - - - - - - - - - - - - Wipeout XL (USA, Prototype) - 1996 - Psygnosis - - - - - - - @@ -30324,6 +30458,30 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Xenogears (USA) + 1998 + Square Electronic Arts + + + + + + + + + + + + + + - Xenogears (USA) - 1998 - Square Electronic Arts - - - - - - - - - - - - - - You Don't Know Jack (USA) 1999 @@ -30755,6 +30889,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + GameShark Lite (USA) ( + 2000 + <unlicensed> + + + + + + + + - - - Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA, Demo) - 1996 - Acclaim Entertainment - - - - - - - - - + + + Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA, Demo) + 1996 + Acclaim Entertainment + + + + + + + + + + Um Jammer Lammy (USA, Demo) + 1999 + Sony Computer Entertainment America + + + + + + + + + + MLB 2001 (USA, Demo) + 2000 + Sony Computer Entertainment America + + + + + + + + + + Ms. Pac-Man Maze Madness (USA, Demo) + 2000 + Namco Hometek + + + + + + + + + + + + NFL Xtreme (USA, Demo) + 1998 + 989 Sports + + + + + + + + + + Rayman (USA, Playable Game Preview) + 1995 + Ubi Soft Entertainment Software + + + + + + + + - Um Jammer Lammy (USA, Demo) + Tomba! 2 - The Evil Swine Return (USA, Demo) 1999 Sony Computer Entertainment America - + - + @@ -32800,8 +33067,8 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - + + + You Don't Know Jack (USA, Demo) + 1999 + Sierra On-Line + + + + + + + + + + + - PlayStation Underground Number 1 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 2 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 1 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 2 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2.3 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 4 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 3 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.1 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.2 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.3 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.4 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 4 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.1 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.2 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.3 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.4 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Fall 2001 (USA) - 2001 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Summer 2K (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Summer '99 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter 2000 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter '98 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter '99 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - + + PlayStation Underground Number 1 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 2 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 1 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 2 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2.3 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 4 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 3 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.1 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.2 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.3 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.4 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 4 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.1 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.2 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.3 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.4 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Fall 2001 (USA) + 2001 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Summer 2K (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Summer '99 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter 2000 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter '98 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter '99 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + - - - - - - - - Dance Dance Revolution - Disney Mix (Pirate) - 2001 - <pirate> - - - - - - - - - - - - - Bubble Bobble II (Prototype) - 1995 - Taito - - - - - - - - - - Baldur's Gate (USA, Prototype) - 19?? - Interplay - - - - - - - - - - - - - - - - - - - - - - - BioHazard (Jpn, Prototype 19950804) - 1995 - Capcom - - - - - - - - - - BioHazard (Jpn, Prototype 19951004) - 1995 - Capcom - - - - - - - - - - BioHazard (Jpn, Prototype 19960131) - 1996 - Capcom - - - - - - - - - - BioHazard 2 (Prototype) - 1998 - Capcom - - - - - - - - - - BioHazard 2 (Prototype, Alt) - 1998 - Capcom - - - - - - - - - - Breakneck (Prototype) - 19?? - Radical - - - - - - - - - - Crash Bandicoot (Prototype, 19960408) - 1996 - SCEA - - - - - - - - - - Deuce (USA, Prototype) - 2000 - Midway - - - - - - - - - - Diablo (Prototype) - 1997 - Electronic Arts - - - - - - - - - - Driver (Prototype Demo) - 19?? - GT Interactive - - - - - - - - - - Duke Nukem Time to Kill (USA, Prototype) - 1998 - GT Interactive - - - - - - - - - - Global Domination (USA, Prototype) - 1998? - Psygnosis - - - - - - - - - - Legacy of Kain - Soul Reaver (USA, Prototype 19990628) - 1999 - Eidos - - - - - - - - - - Legacy of Kain - Soul Reaver (USA, Prototype 19990512) - 1999 - Eidos - - - - - - - - - - Madden NFL 96 (USA, Prototype) - 1995 - Electronic Arts - - - - - - - - - - Metal Gear Solid (Pilot Disk) - 1998 - Konami - - - - - - - - - - - - Persona 2 - Eternal Punishment (Prototype? Debug) - 2000 - Atlus - - - - - - - - - - Rockman 8 (Jpn, Prototype v1) - 1996 - Capcom - - - - - - - - - - Rockman 8 (Jpn, Prototype 1) - 1996 - Capcom - - - - - - - - - - Rockman 8 (Jpn, Prototype 2) - 1996 - Capcom - - - - - - - - - - Rockman Dash (Capcom Friendly Club Demo) - 1997 - Capcom - - - - - - - - - - - Rockman X6 (Jpn, Prototype 20010928) - 2001 - Capcom - - - - - - - - - - Silent Hill (USA, Prototype) - 1999 - Konami - - - - - - - - - - Spirit Master (USA, Prototype) - 19?? - Acclaim - - - - - - - - - - StarCon (Prototype) - 1998 - Accolade - - - - - - - - - - Thrill Kill (USA, Prototype) - 1998 - Virgin Interactive - - - - - - - - - - Thrill Kill (USA, Prototype Earlier?) - 1998 - Virgin Interactive - - - - - - - - - - Tomb Raider (Prototype, 19960722) - 1996 - Core Design - - - - - - - - - - Tomb Raider II (USA, Prototype) - 1997 - Core Design - - - - - - - - - - Tony Hawk's Pro Skater (USA, Prototype) - 1999 - Activision - - - - - - - - - - Torc - Legend of the Ogre Crown (Prototype) - 19?? - Head Games - - - - - - - - - - Virtuoso (Prototype, 19960514) - 1996 - Data East? - - - - - - - - - - WWF Smackdown! (USA, Prototype 20000106) - 2000 - THQ - - - - - - - - - - - - - Resident Evil 2 Preview (Euro, CD Consoles No.38) - 1997 - Capcom - - - - - - - - - - - Resident Evil 3 (Euro, Demo) - 1999 - Capcom - - - - - - - - - - - Bounty Arms Demo (Jpn, Demo Demo No.5?, 199504) - 1995 - Data West - - - - - - - - - - Castlevania - Symphony of the Night (E3 Demo, 1997) - 1997 - Konami - - - - - - - - - - Tomb Raider (E3 Demo, 19960520) - 1996 - SCEI - - - - - - + - - - 1-on-1 - Single Basketball (Jpn) - 1998 - Jorudan - - - - - - - - - - - + 1-on-1 - Single Basketball (Jpn) + 1998 + Jorudan + + + + + + + + + + + + + + First Kiss Monogatari (Jpn) + 1998 + HuneX + + + + + + + + + + + + + + + + - 70's Robot Anime - Geppy-X - The Super Boosted Armor (Jpn) - 1999 - Aroma - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A Ressha de Ikou Z - Mezase! Tairiku Oudan (Jpn) - 1999 - Artdink - - - - - - - - - - - - - - - A5 - A Ressha de Ikou 5 (Jpn, Playstation the Best) - 1999 - Artdink - - - - - - - - - - - - - - Action Puzzle - Prism Land (Jpn, Honkakuha de 1300Yen Series) - 2000 - HECT - - - - - - - - - - - - + - Advanced V.G. 2 (Jpn, SuperLite 1500 Series) - 2003 - TGL - - - + Afraid Gear Another (Jpn) + 2001 + Office Create + + + - - - - - - - - Advanced V.G. (Jpn) - 1996 - TGL - - - - - - - + @@ -36567,44 +36048,6 @@ A few comments on these: - - - Afraid Gear Another (Jpn) - 2001 - Office Create - - - - - - - - - - - - - - Agent Armstrong - Himitsu Shirei Daisakusen (Jpn) - 1997 - WENet - - - - - - - - - - - + Akagawa Jirou - Yasoukyoku 2 (Jpn) 2001 Victor Interactive Software @@ -36799,6 +36246,26 @@ A few comments on these: + + + Albalea no Otome - Uruwashi no Seishikitachi (Jpn) + 1998 + Masaya + + + + + + + + + + + + Gensou no Altemis - Actress School Mystery Adventure (Jpn) + 2000 + Shoeisha + + + + + + + + + + + + Another Memories (Jpn) + 1998 + Hearty Robin + + + + + + + + + + + + Angelique Duet (Jpn) + 1998 + Koei + + + + + + + + + + + - Angelique Duet (Jpn) - 1998 - Koei - - - + Angolmois '99 (Jpn, SuperLite 1500 Series) + 1999 + Success + + + - + @@ -37037,42 +36563,48 @@ A few comments on these: - + - Angolmois '99 (Jpn, SuperLite 1500 Series) - 1999 - Success - - - + Ayakashi Ninden Kunoichiban (Jpn) + 1997 + Shoeisha + + + - + - + + + + + + - + - Another Memories (Jpn) - 1998 - Hearty Robin - - - + Kids Station - Soreike! Anpanman 2 - Anpanman to Daibouken! (Jpn) + 2001 + Bandai + + + - + @@ -37123,40 +36655,21 @@ A few comments on these: - + - Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) - 1998 - Koei - - - + Saru! Get You! (Jpn) + 1999 + SCEI + + + - - - - - - - - Aqua Paradise - Boku no Suizokukan (Jpn) - 2000 - Victor Interactive Software - - - - - - - + @@ -37181,6 +36694,25 @@ A few comments on these: + + + Aqua Paradise - Boku no Suizokukan (Jpn) + 2000 + Victor Interactive Software + + + + + + + + + + + + - Arcade Hits - Crazy Climber (Jpn, Major Wave Series) - 2002 - Hamster - - - + A5 - A Ressha de Ikou 5 (Jpn, Playstation the Best) + 1999 + Artdink + + + - + - + - Arcade Hits - Frisky Tom (Jpn, Major Wave Serie) - 2002 - Hamster - - - + A Ressha de Ikou Z - Mezase! Tairiku Oudan (Jpn) + 1999 + Artdink + + + - + @@ -37299,21 +36845,21 @@ A few comments on these: - + - Soukou Kihei Votoms - Lightning Slash (Jpn) - 1999 - Takara - - - + Agent Armstrong - Himitsu Shirei Daisakusen (Jpn) + 1997 + WENet + + + - + @@ -37336,8 +36882,8 @@ A few comments on these: - - + + - Arthur to Astaroth no Nazo Maikamura - Incredible Toons (Jpn) - 1996 - Capcom - - - - - - - - - - - - - - Albalea no Otome - Uruwashi no Seishikitachi (Jpn) - 1998 - Masaya - - - - - - - - - - - - Aura Battler Dunbine - Seisenshi Densetsu (Jpn) - 2000 - Bandai - - - + Advanced V.G. (Jpn) + 1996 + TGL + + + - + - + + - Ayakashi Ninden Kunoichiban (Jpn) - 1997 - Shoeisha - - - + Advanced V.G. 2 (Jpn, SuperLite 1500 Series) + 2003 + TGL + + + - + - - - - - - + @@ -37719,25 +37222,6 @@ A few comments on these: - - - b.l.u.e. - Legend of Water (Jpn) - 1998 - Hudson - - - - - - - - - - - - + - Bakumatsu Roman - Gekka no Kenshi (Jpn) - 1999 - SNK - - - + Bakuretsu Hunter - Mahjong Special (Jpn) + 1996 + Banpresto + + + - + @@ -37813,21 +37295,23 @@ A few comments on these: - + + - Bakuretsu Hunter - Mahjong Special (Jpn) - 1996 - Banpresto - - - + Bakumatsu Roman - Gekka no Kenshi (Jpn) + 1999 + SNK + + + - + @@ -37852,26 +37336,6 @@ A few comments on these: - - - - Vermin Kids (Jpn) - 1996 - Electronic Arts - - - - - - - - - - - - Baroque - Yuganda Mousou (Jpn) - 1999 - Sting - - - - - - - - - - - - Baseball Simulation - ID Pro Yakyuu (Jpn) - 2001 - Konami - - - + Baroque - Yuganda Mousou (Jpn) + 1999 + Sting + + + - + - + - Bass Fisherman - Texas (Jpn) - 1998 - Sammy - - - + Fishing Freaks - BassRise (Jpn) + 1999 + Bandai + + + - + @@ -38065,159 +37510,6 @@ A few comments on these: - - - - Beatmania - Append 3rd Mix Mini (Jpn) - 1998 - Konami - - - - - - - - - - - - - - Beatmania - Append 5th Mix - Time to Get Down (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - Append Club Mix (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - Best Hits (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - featuring Dreams Come True (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania Append Gottamix 2 - Going Global (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - The Sound of Tokyo! - Produced by Konishi Yasuharu (Jpn) - 2001 - Konami - - - - - - - - - - - - - - Beatmania Append 6th Mix + Core Remix (Jpn) - 2002 - Konami - - - - - - - - - - - + Susume! Kaizoku - Be Pirates! (Jpn) + 1998 + Artdink + + + + + + + + + + + + + + Soukou Kihei Votoms Gaiden - Ao no Kishi Berserga Monogatari (Jpn) + 1997 + Takara + + + + + + + + + + + + + + Bass Fisherman - Texas (Jpn) + 1998 + Sammy + + + + + + + + + + + - Bishoujo Senshi Sailormoon Super S - Shin Shuyaku Soudatsusen (Jpn, Genteiban) - 1996 - Angel - - - + Break Volley (Jpn) + 1999 + Aqua Rouge + + + - + + + + + + + + Black Jack vs. Matsuda Jun (Jpn) + 2000 + Pony Canyon + + + + + + + @@ -38368,25 +37752,6 @@ A few comments on these: - - - Black Jack vs. Matsuda Jun (Jpn) - 2000 - Pony Canyon - - - - - - - - - - - - Blaze & Blade - Eternal Quest (Jpn) - 1998 - T&E Soft - - - - - - - - - - - - - - Blaze & Blade - Busters (Jpn) - 1998 - T&E Soft - - - - - - - - - - - - - - Block Kuzushi 2 (Jpn) - 2000 - Marvelous Entertaiment - - - - - - - - - - - + + + Block Kuzushi 2 (Jpn) + 2000 + Marvelous Entertaiment + + + + + + + + + + + + b.l.u.e. - Legend of Water (Jpn) + 1998 + Hudson + + + + + + + + + + + - Soukou Kihei Votoms Gaiden - Ao no Kishi Berserga Monogatari (Jpn) - 1997 - Takara - - - - - - - - - - - + - Boku wa Koukuu Kanseikan (Jpn) - 1999 - Syscom - - - + Beatmania - Append 3rd Mix Mini (Jpn) + 1998 + Konami + + + - + + + + + + + + Beatmania - Append 5th Mix - Time to Get Down (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania Append 6th Mix + Core Remix (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Beatmania - Best Hits (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - Append Club Mix (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - featuring Dreams Come True (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania Append Gottamix 2 - Going Global (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - The Sound of Tokyo! - Produced by Konishi Yasuharu (Jpn) + 2001 + Konami + + + + + + + + + + + + + + Blaze & Blade - Busters (Jpn) + 1998 + T&E Soft + + + + + + + + + + + + + + Blaze & Blade - Eternal Quest (Jpn) + 1998 + T&E Soft + + + + + + + + + + + + + + Breath of Fire III (Jpn) + 1997 + Capcom + + + + + + + @@ -38670,21 +38174,21 @@ A few comments on these: - + - Bokujyou Keieiteki Board Game Umapoly (Jpn) + Boku wa Koukuu Kanseikan (Jpn) 1999 - Konami - - - + Syscom + + + - + @@ -38812,41 +38316,22 @@ A few comments on these: - + + - Break Volley (Jpn) - 1999 - Aqua Rouge - - - - - - - - - - - - - - Breath of Fire III (Jpn) + Burning Road (Jpn) 1997 - Capcom - - - + Vic Tokai + + + - + @@ -38911,26 +38396,6 @@ A few comments on these: - - - - Burning Road (Jpn) - 1997 - Vic Tokai - - - - - - - - - - - - Captain Tsubasa - Aratanaru Densetsu Joshou (Jpn) - 2002 - Konami - - - - - - - - - - - - - - Captain Tsubasa J - Get in the Tomorrow (Jpn) - 1996 - Bandai - - - - - - - - - - - + Crazy Climber 2000 (Jpn) + 2000 + Nihon Bussan + + + + + + + + + + + + + + Arcade Hits - Crazy Climber (Jpn, Major Wave Series) + 2002 + Hamster + + + + + + + + + + + - Chiisana Kyojin Microman (Jpn) - 1999 - Takara - - - + Chou Aniki - Kyuukyoku Muteki Ginga Saikyou Otoko (Jpn) + 1995 + NCS + + + - - - - - - - - Chiisana Oukoku Erutoria (Jpn) - 2000 - KSS - - - - - - - - - - - - - - Chiki Chiki Machine Mou Race - Wacky Races (Jpn) - 2001 - Infogrames Hudson - - - - - - - - - - - - - - Chippoke Ralph no Daibouken - The Adventure of Little Ralph (Jpn) - 1999 - New - - - - - - - + @@ -39258,83 +38667,6 @@ A few comments on these: - - - Chou Hatsumei Boy Kanipan - Hirameki Wonderland (Jpn) - 1999 - Taito - - - - - - - - - - - - - - Chou Aniki - Kyuukyoku Muteki Ginga Saikyou Otoko (Jpn) - 1995 - NCS - - - - - - - - - - - - - - Chou-Kousoku Grandoll (Jpn) - 1997 - Bandai - - - - - - - - - - - - - - Choujin Gakuen Gowcaizer (Jpn) - 1997 - Urban Plant - - - - - - - - - - - + Chiisana Kyojin Microman (Jpn) + 1999 + Takara + + + + + + + + + + + - Click Manga - Click Nohi (Jpn) - 1999 - Tokuma Shoten - - - + Clock Tower - Ghost Head (Jpn) + 1998 + Human + + + - + @@ -39451,21 +38802,21 @@ A few comments on these: - + - Clock Tower - Ghost Head (Jpn) - 1998 - Human - - - + Click Manga - Click Nohi (Jpn) + 1999 + Tokuma Shoten + + + - + @@ -39625,52 +38976,6 @@ A few comments on these: - - - Crazy Climber 2000 (Jpn) - 2000 - Nihon Bussan - - - - - - - - - - - - - - Creature Shock (Jpn) - 1996 - Data East - - - - - - - - - - - - - - - - + Creature Shock (Jpn) + 1996 + Data East + + + + + + + + + + + + + + + + + Captain Tsubasa - Aratanaru Densetsu Joshou (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Captain Tsubasa J - Get in the Tomorrow (Jpn) + 1996 + Bandai + + + + + + + + + + + + Cybernetic Empire (Jpn) + 1999 + Telenet + + + + + + + + + + + + + + + + - Cybernetic Empire (Jpn) - 1999 - Telenet - - - - - - - - - - - - - - - - + Dancing Blade - Katteni Momotenshi! (Jpn) + 1998 + Konami + + + + + + + + + + + + + + + + + + + + + + + + Dancing Blade - Katteni Momotenshi II - Tears of Eden (Jpn) + 1999 + Konami + + + + + + + + + + + + + + + + + + + + + + + + Dangan (Jpn) + 2000 + KSS + + + + + + + + + + + + + + Darkseed II (Jpn) + 1997 + B-Factory + + + + + + + + + + + + + + Dark Tales from the Lost Soul (Jpn) + 1999 + Sammy + + + + + + + + + + + + + + Dynamite Boxing (Jpn) + 1998 + Victor Interactive Software + + + + + + + + + + + + + + Dragon Ball Z - Ultimate Battle 22 (Jpn) + 1995 + Bandai + + + + + + + + + + + + + + + Destruction Derby 2 (Jpn) + 1997 + SCEI + + + + + + + + + + + - Dancing Blade - Katteni Momotenshi II - Tears of Eden (Jpn) - 1999 - Konami - - - - - - - - - - - - - - - - - - - - - - - - Dancing Blade - Katteni Momotenshi! (Jpn) - 1998 - Konami - - - - - - - - - - - - - - - - - - - - - - - - Dancing Stage featuring Dreams Come True (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Dancing Stage featuring TRUE KiSS DESTiNATiON (Jpn) - 1999 - Konami - - - - - - - - - - - - - - Dangan (Jpn) - 2000 - KSS - - - - - - - - - - - - - - Dark Hunter - Ge Youma No Mori (Jpn) - 1997 - Koei - - - - - - - - - - - - - - Dark Tales from the Lost Soul (Jpn) - 1999 - Sammy - - - - - - - - - - - - - - Darkseed II (Jpn) - 1997 - B-Factory - - - - - - - - - - - - Denpa Shounenteki Game (Jpn) - 1998 - Hudson - - - - - - - - - - - - - - Hole of the Legend Monster - Densetsu Kemono no Ana - Monster Complete World Ver.2 (Jpn) - 1999 - Idea Factory - - - - - - - - - - - + Gear Fighter Dendoh (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Denpa Shounenteki Game (Jpn) + 1998 + Hudson + + + + + + + + + + + - - - Destruction Derby 2 (Jpn) - 1997 - SCEI - - - - - - - - - - - + Dark Hunter - Ge Youma No Mori (Jpn) + 1997 + Koei + + + + + + + + + + + + Kids Station - Digimon Park (Jpn) + 2001 + Bandai + + + + + + + + + + + + Dragon Knight 4 (Jpn) + 1997 + Banpresto + + + + + + + + + + + + + + Dragon Knights Glorious (Jpn) + 1999 + Pandora + + + + + + + + + + + + Doukyuusei Mahjong (Jpn) + 1997 + Yumedia + + + + + + + + + + + + + + Doukyuusei 2 (Jpn) + 1997 + Banpresto + + + + + + + + + + + - Doukyuusei 2 (Jpn) - 1997 - Banpresto - - - - - - - - - - - - - - Doukyuusei Mahjong (Jpn) - 1997 - Yumedia - - - - - - - - - - - - - - Dr. Slump (Jpn) - 1999 - Bandai - - - - - - - - - - - - - - Dragon Ball Z - Ultimate Battle 22 (Jpn) - 1995 - Bandai - - - - - - - - - - - - Dragon Knight 4 (Jpn) - 1997 - Banpresto - - - - - - - - - - - - - - Dragon Knights Glorious (Jpn) - 1999 - Pandora - - - - - - - - - - - - Dragon Valor (Jpn) + Dr. Slump (Jpn) 1999 - Namco - - - + Bandai + + + - + - - - - - - + @@ -40976,6 +40308,141 @@ A few comments on these: + + + Dancing Stage featuring Dreams Come True (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Dancing Stage featuring TRUE KiSS DESTiNATiON (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Dynamite Soccer 2002 (Jpn) + 2002 + A-Max + + + + + + + + + + + + + + + Dynamite Soccer 2004 Final (Jpn) + 2004 + A-Max + + + + + + + + + + + + + + Aura Battler Dunbine - Seisenshi Densetsu (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + Dragon Valor (Jpn) + 1999 + Namco + + + + + + + + + + + + + + + + - Dynamite Boxing (Jpn) - 1998 - Victor Interactive Software - - - - - - - - - - - - - - Dynamite Soccer 2002 (Jpn) - 2002 - A-Max - - - - - - - - - - - - - - - Dynamite Soccer 2004 Final (Jpn) - 2004 - A-Max - - - - - - - - - - - - - - Hello Charlie!! (Jpn) - 1998 - Enix - - - - - - - - - - - - EVE - The Fatal Attraction (Jpn) - 2001 - Game Village - - - + Fuujin Ryouiki Eretzvaju (Jpn) + 1999 + Yuke's + + + - + - + - + + + + + Chiisana Oukoku Erutoria (Jpn) + 2000 + KSS + + + + + - + - + + + + + + The Vision of Escaflowne (Jpn, Limited Edition) + 1997 + Bandai + + + + + - + + + + + + + + + Weltorv Estleia (Jpn) + 1999 + Hudson + + + + + + + + + + + + + + + Yuukyuu no Eden - The Eternal Eden (Jpn) + 1999 + ASCII + + + + + + + @@ -41489,6 +40943,41 @@ A few comments on these: + + + EVE - The Fatal Attraction (Jpn) + 2001 + Game Village + + + + + + + + + + + + + + + + + + + + + - Extra Bright (Jpn) - 1996 - ASCII - - - - - - - - - - - - Farland Saga - Toki no Michishirube (Jpn) - 1999 - TGL - - - - - - - - - - - + Farland Saga - Toki no Michishirube (Jpn) + 1999 + TGL + + + + + + + + + + + + Formula Circus (Jpn) + 1997 + Nichibutsu + + + + + + + + + + + - Fighters' Impact (Jpn) - 1997 - Taito - - - - - - - - - - - - - - Fighting Illusion - K-1 Grand Prix '98 (Jpn) - 1998 - Xing - - - - - - - - - - - - - - - Final Doom (Jpn) - 1997 - Soft Bank - - - - - - - - - - - - Final Round (Jpn) - 1998 - Atlus - - - + Formula Grand Prix 1997 - Team Unei Simulation 2 (Jpn) + 1997 + Coconuts Japan + + + - + - + - Fire Woman Matoigumi (Jpn) - 1998 - Tokuma Shoten - - - + Forget me not - Palette (Jpn) + 2001 + Enterbrain + + + - + + + + + + + + + Final Doom (Jpn) + 1997 + Soft Bank + + + + + + + @@ -41852,48 +41303,21 @@ A few comments on these: - + - First Kiss Monogatari (Jpn) + Fire Woman Matoigumi (Jpn) 1998 - HuneX - - - - - - - - - - - - - - - - - - - First Queen IV - Varcia Senki (Jpn) - 1996 - KSK - - - + Tokuma Shoten + + + - + @@ -41936,25 +41360,6 @@ A few comments on these: - - - Fishing Freaks - BassRise (Jpn) - 1999 - Bandai - - - - - - - - - - - - Forget me not - Palette (Jpn) - 2001 - Enterbrain - - - - - - - - - - - - - - Formula Circus (Jpn) - 1997 - Nichibutsu - - - - - - - - - - - - - - Formula Grand Prix 1997 - Team Unei Simulation 2 (Jpn) - 1997 - Coconuts Japan - - - - - - - - - - - + First Queen IV - Varcia Senki (Jpn) + 1996 + KSK + + + + + + + + + + + + Arcade Hits - Frisky Tom (Jpn, Major Wave Serie) + 2002 + Hamster + + + + + + + + + + + + + + Final Round (Jpn) + 1998 + Atlus + + + + + + + + + + + + + + Fighters' Impact (Jpn) + 1997 + Taito + + + + + + + + + + + - Fuujin Ryouiki Eretzvaju (Jpn) - 1999 - Yuke's - - - - - - - - - - - - Fuuun Gokuu Ninden (Jpn) - 1996 - AiCOM - - - - - - - - - - - - - - G-Police (Jpn) - 1998 - SCEI - - - - - - - - - - - - - - - - - - - GI Jockey 2000 (Jpn) - 2000 - Koei - - - - - - - - - - - - Gakuen Sentai Solblast (Jpn) - 1999 - Creative Heads - - - + Hoshi no Oka Gakuen Monogatari - Gakuensai (Jpn) + 1998 + MediaWorks + + + - + + + + + + + + Matsumoto Leiji - Story of Galaxy Express 999 (Jpn) + 2001 + Banpresto + + + + + + + + + + + + @@ -42413,25 +41780,6 @@ A few comments on these: - - - Gallop Racer 2000 (Jpn) - 2000 - Tecmo - - - - - - - - - - - + Gunbare! Game Tengoku - The Game Paradise 2 (Jpn) + 1998 + Jaleco + + + + + + + + + + + + Gangway Monsters (Jpn) + 1998 + Sony Music Entertainment + + + + + + + + + + + + + + Yuusha-Ou GaoGaiGar - Blockaded Numbers (Japan) + 1999 + Takara + + + + + + + + + + + + + + Hyakujuu Sentai Gaoranger (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Tactical Armor Custom Gasaraki (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + Gate Keepers (Jpn) + 1999 + Kadokawa Shoten + + + + + + + + + + + + + + + + + + + The Great Battle VI (Jpn) + 1997 + Banpresto + + + + + + + + + + + + + + GeGeGe no Kitarou (Jpn) + 1997 + Bandai + + + + + + + + + + + + + + GeGeGe no Kitarou - Gyakushuu! Youkai Daikessen (Jpn) + 2003 + Konami + + + + + + + + + + + + + + + Geki-Oh Shienryu (Jpn) + 1999 + Warashi + + + + + + + + + + + + + + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) + 1998 + Koei + + + + + + + + + + + + + + Genei Tougi - Shadow Struggle (Jpn) + 1996 + Banpresto + + + + + + + + + + + + + + 70's Robot Anime - Geppy-X - The Super Boosted Armor (Jpn) + 1999 + Aroma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GetBackers Dakkanya (Jpn) + 2001 + Konami + + + + + + + + + + + + + + + Guilty Gear (Jpn) + 1998 + Arc System Works + + + + + + + + + + + - Gangway Monsters (Jpn) - 1998 - Sony Music Entertainment - - - - - - - - - - - - - - Gate Keepers (Jpn) - 1999 - Kadokawa Shoten - - - - - - - - - - - - - - - - - - - Gear Fighter Dendoh (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - GeGeGe no Kitarou - Gyakushuu! Youkai Daikessen (Jpn) - 2003 - Konami - - - - - - - - - - - - - - GeGeGe no Kitarou (Jpn) - 1997 - Bandai - - - - - - - - - - - - - - - Geki-Oh Shienryu (Jpn) - 1999 - Warashi - - - - - - - - - - - - - - Gekisou Tomarunner (Jpn) - 1999 - SCEI - - - - - - - - - - - - - - Gekitotsu Toma L'Arc - Tomarunner vs. L'Arc~en~Ciel (Jpn) + GI Jockey 2000 (Jpn) 2000 - Sony - - - + Koei + + + - - - - - - - - Genei Tougi - Shadow Struggle (Jpn) - 1996 - Banpresto - - - - - - - - - - - - - - Gensou Maden Saiyuuki - Harukanaru Nishi e (Jpn) - 2002 - J-Wing - - - - - - - - - - - - - - Gensou no Altemis - Actress School Mystery Adventure (Jpn) - 2000 - Shoeisha - - - - - - - - - - - - - - GetBackers Dakkanya (Jpn) - 2001 - Konami - - - - - - - + @@ -42828,25 +42289,6 @@ A few comments on these: - - - Ginga Ojousama Densetsu Yuna - Final Edition (Jpn) - 1998 - Hudson - - - - - - - - - - - + Gallop Racer 2000 (Jpn) + 2000 + Tecmo + + + + + + + + + + + + + + Gensou Maden Saiyuuki - Harukanaru Nishi e (Jpn) + 2002 + J-Wing + + + + + + + + + + + + Goo! Goo! Soundy (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Googootrops (Jpn) + 1999 + Enix + + + + + + + + + + + + + + Gokuu Densetsu - Magic Beast Warriors (Jpn) + 1995 + Allumer + + + + + + + + + + + + + + Fuuun Gokuu Ninden (Jpn) + 1996 + AiCOM + + + + + + + + + + + - Gokuu Densetsu - Magic Beast Warriors (Jpn) - 1995 - Allumer - - - - - - - - - - - - Goo! Goo! Soundy (Jpn) - 1999 - Konami - - - + Choujin Gakuen Gowcaizer (Jpn) + 1997 + Urban Plant + + + - + - + - The Great Battle VI (Jpn) + G-Police (Jpn) + 1998 + SCEI + + + + + + + + + + + + + + + + + + + Chou-Kousoku Grandoll (Jpn) 1997 - Banpresto - - - + Bandai + + + - + @@ -43030,45 +42582,6 @@ A few comments on these: - - - Groove Adventure Rave - Mikan no Hiseki (Jpn) - 2002 - Konami - - - - - - - - - - - - - - Groove Adventure Rave - Yuukyuu no Kizuna (Jpn) - 2002 - Konami - - - - - - - - - - - - Googootrops (Jpn) - 1999 - Enix - - - - - - - - - - - - - - - Guilty Gear (Jpn) - 1998 - Arc System Works - - - - - - - - - - - - Gunbare! Game Tengoku - The Game Paradise 2 (Jpn) - 1998 - Jaleco - - - - - - - - - - - + + + Ridegear Guybrave II (Jpn) + 1998 + Axela + + + + + + + + + + + + + + + + - Hakaioh - King of Crusher (Jpn) - 1998 - FAB Communications - - - - - - - - - - - @@ -43404,6 +42869,26 @@ A few comments on these: + + + Ninpu Sentai Harikenger (Jpn) + 2002 + Bandai + + + + + + + + + + + - Harukanaru Toki no Naka de (Jpn) - 2000 - Koei - - - - - - - - - - - + Harukanaru Toki no Naka de (Jpn) + 2000 + Koei + + + + + + + + + + + - Heaven's Gate (Jpn) - 1996 - Atlus - - - + Heiwa Parlor! Pro Dolphin Ring Special (Jpn) + 2000 + Nihon Telenet + + + - + + + + + + + + Heiwa Parlor! Pro Lupin Sansei Special (Jpn) + 2000 + Nihon Telenet + + + + + + + @@ -43576,44 +43080,6 @@ A few comments on these: - - - Heiwa Parlor! Pro Dolphin Ring Special (Jpn) - 2000 - Nihon Telenet - - - - - - - - - - - - - - Heiwa Parlor! Pro Lupin Sansei Special (Jpn) - 2000 - Nihon Telenet - - - - - - - - - - - + Hello Charlie!! (Jpn) + 1998 + Enix + + + + + + + + + + + + + + Hello Kitty's Cube De Cute (Jpn) + 1998 + Culture Publishing + + + + + + + + + + + - Hello Kitty's Cube De Cute (Jpn) - 1998 - Culture Publishing - - - - - - - - - - - - High School of Blitz (Jpn) - 1999 - MediaWorks - - - + Houma Hunter Lime - Special Collection Vol.1 (Jpn) + 1994 + Asmik + + + - + @@ -43851,33 +43336,6 @@ A few comments on these: - - - - Himitsu Sentai Metamor V Deluxe (Jpn, Disc 1 Only) - 1998 - Mycom - - - - - - - - - - - - - Hoshi no Oka Gakuen Monogatari - Gakuensai (Jpn) - 1998 - MediaWorks - - - - - - - - - - - - Houma Hunter Lime - Special Collection Vol.1 (Jpn) - 1994 - Asmik - - - + High School of Blitz (Jpn) + 1999 + MediaWorks + + + - + + + + + + + + Heaven's Gate (Jpn) + 1996 + Atlus + + + + + + + @@ -44125,25 +43583,6 @@ A few comments on these: - - - Hyakujuu Sentai Gaoranger (Jpn) - 2001 - Bandai - - - - - - - - - - - - Idol Janshi Suchie-Pai II Limited (Jpn) - 1996 - Jaleco - - - + Baseball Simulation - ID Pro Yakyuu (Jpn) + 2001 + Konami + + + - + - - - - - - - - - - - + - + - Idol Janshi Suchie-Pai Limited (Jpn) - 1995 - Jaleco - - - + Minna Atsumore! Igo Kyoushitsu (Jpn) + 2003 + I.Magic. + + + - + @@ -44409,6 +43832,26 @@ A few comments on these: + + + + Ucchannanchan no Honoo no Challenger - Denryu Iraira-Bou Returns (Jpn) + 1998 + Saurus + + + + + + + + + + + + Shiritsu Justice Gakuen - Legion of Heroes (Jpn) + 1998 + Capcom + + + + + + + + + + + + + + + + + + + Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Jpn) + 1999 + Capcom + + + + + + + + + + + - Assault Suits Valken 2 - Juusou Kihei Valken 2 (Jpn) - 1999 - Masaya - - - + Fighting Illusion - K-1 Grand Prix '98 (Jpn) + 1998 + Xing + + + - + @@ -44607,25 +44096,6 @@ A few comments on these: - - - Kaikan Phrase - Datenshi Kourin (Jpn) - 2000 - Enix - - - - - - - - - - - - Kaisoku Tenshi - The Rapid Angel (Jpn) - 1998 - Techno Soleil - - - + Kaikan Phrase - Datenshi Kourin (Jpn) + 2000 + Enix + + + - + @@ -44702,6 +44172,44 @@ A few comments on these: + + + Kids Station - Kamen Rider Heroes (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Kamen Rider Agito (Jpn) + 2001 + Bandai + + + + + + + + + + + - Kamen Rider Agito (Jpn) - 2001 - Bandai - - - - - - - - - - - - Kato Hifumi Kudan - Shogi Club (Jpn, Honkakuha de 1300Yen Series) + Chou Hatsumei Boy Kanipan - Hirameki Wonderland (Jpn) 1999 - Hect - - - + Taito + + + - + @@ -44991,6 +44480,26 @@ A few comments on these: + + + + Rami-Chan no Ooedo Surogoku - Keiou Yuugekitai Gaiden (Jpn) + 1998 + Victor Interactive Software + + + + + + + + + + + - Kidou Keisatsu Patlabor - Mobile Police Patlabor - Game Edition (Jpn) - 2000 - Bandai - - - - - - - - - - - - - - Kidou Senshi Z-Gundam (Jpn, Demo) - 1997 - Bandai - - - - - - - - - - - - Kids Station - Bishoujo Senshi Sailormoon World - Chibiusa to Tanoshii Mainichi (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Digimon Park (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Kamen Rider Heroes (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Kids Station - Motto! Oja Majo Dorami - MAHO-dou Smile Party (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Soreike! Anpanman 2 - Anpanman to Daibouken! (Jpn) - 2001 - Bandai - - - - - - - - - - - + Hakaioh - King of Crusher (Jpn) + 1998 + FAB Communications + + + + + + + + + + + + + + Muscle Ranking - Kinniku Banzuke Vol.2 - Aratanaru Genkai e no Chousen! (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Kisya de Go! (Jpn) + 2000 + Taito + + + + + + + + + + + + + + Kitchen Panic (Jpn) + 1998 + Panther Software + + + + + + + + + + + + + + Kochira Katsushikaku Kameari Kouenzen Hashutsujo - High Tech Building Shinkou Soshi Sakusen! no Ma (Jpn) + 1997 + Bandai + + + + + + + + + + + + + + Knight & Baby (Jpn) + 1998 + Tamsoft + + + + + + + + + + + - Kisya de Go! (Jpn) - 2000 - Taito - - - - - - - - - - - - - - Kitchen Panic (Jpn) - 1998 - Panther Software - - - - - - - - - - - - - - Knight & Baby (Jpn) - 1998 - Tamsoft - - - - - - - - - - - - - - Kochira Katsushikaku Kameari Kouenzen Hashutsujo - High Tech Building Shinkou Soshi Sakusen! no Ma (Jpn) - 1997 - Bandai - - - - - - - - - - - - Konami Antiques - MSX Collection Vol.1 (Jpn) - 1997 - Konami - - - - - - - - - - - - - - Konami Antiques - MSX Collection Vol.2 (Jpn) - 1998 - Konami - - - - - - - - - - - - Kosodate Quiz Motto My Angel (Jpn) - 1999 - Namco - - - - - - - - - - - - - - Kotetsu Reiki - Steel Dom (Jpn) - 1996 - TecnoSoft - - - - - - - - - - - - - - KoukλoθεαtÏo - Yuukyuu no Hitomi (Jpn) - 1999 - Sunsoft - - - - - - - - - - - + KoukλoθεαtÏo - Yuukyuu no Hitomi (Jpn) + 1999 + Sunsoft + + + + + + + + + + + + Kuubo Senki (Jpn) + 1999 + Unbalance + + + + + + + + + + + - Ku-Ron Jo - Fukyuu Ban (Jpn) - 2000 - Media Rings - - - - - - - - - - - + Ku-Ron Jo - Fukyuu Ban (Jpn) + 2000 + Media Rings + + + + + + + + + + + - Kuubo Senki (Jpn) - 1999 - Unbalance - - - - - - - - - - - - Lagnacure (Jpn) - 1997 - Sony Music Entertainment - - - - - - - - - - - + Lagnacure (Jpn) + 1997 + Sony Music Entertainment + + + + + + + + + + + + Libero Grande 2 (Jpn) + 2000 + Namco + + + + + + + + + + + - Libero Grande 2 (Jpn) + Lode Runner 2 (Jpn, SuperLite 1500 Series) 2000 - Namco - - - + Success + + + - + - + - Linda³ Again (Jpn) + Lode Runner Extra (Jpn) 1997 - Sony - - - + Patra + + + - - - - - - - - Ling Rise (Jpn) - 1999 - Epoch - - - - - - - + @@ -46158,40 +45503,40 @@ A few comments on these: - + - Lode Runner 2 (Jpn, SuperLite 1500 Series) - 2000 - Success - - - + Linda³ Again (Jpn) + 1997 + Sony + + + - + - + - Lode Runner Extra (Jpn) - 1997 - Patra - - - + Ling Rise (Jpn) + 1999 + Epoch + + + - + @@ -46517,44 +45862,6 @@ A few comments on these: - - - The Maestro Music (Japan, with Baton Stick) - 2000 - Global A - - - - - - - - - - - - - - The Maestro Music - Merry Christmas - Append Disc (Jpn) - 2000 - Global A - - - - - - - - - - - - Magical Tetris Challenge featuring Mickey Mouse (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Mahjong Yarouze! (Jpn) - 1999 - Konami - - - - - - - - - - - + + + Rikujou Boueitai Mao-chan (Jpn, Deluxe Pack) + 2003 + Marvelous + + + + + + + + + + + - Marvel Super Heroes (Jpn) - 1997 - Capcom - - - - - - - - - - - - - - Marvel Super Heroes vs. Street Fighter - EX Edition (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Marvel vs. Capcom - Clash of Super Heroes - EX Edition (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Hiroki Matsukata Presents - World Fishing (Jpn, BPS The Choice) - 1999 - BPS - - - - - - - - - - - - - - Matsumoto Leiji - Story of Galaxy Express 999 (Jpn) - 2001 - Banpresto - - - - - - - - - - - - - - - - + Meitantei Conan - Saikou no Aibou (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Meitantei Conan - Trick Trick Vol.1 (Jpn) + 2003 + Bandai + + + + + + + + + + + + + + Medarot R - Parts Collection (Jpn) + 2000 + Imageneer + + + + + + + + + + + - Medarot R - Parts Collection (Jpn) - 2000 - Imageneer - - - + Shinseiden Megaseed Fukkatsu-Hen (Jpn) + 1997 + Banpresto + + + - + @@ -47038,44 +46280,6 @@ A few comments on these: - - - Meitantei Conan - Saikou no Aibou (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Meitantei Conan - Trick Trick Vol.1 (Jpn) - 2003 - Bandai - - - - - - - - - - - - Meta-Ph-List μ.χ.2297 (Jpn) - 1997 - A.D.M - - - - - - - - - - - - - - - - + + + Himitsu Sentai Metamor V Deluxe (Jpn, Disc 1 Only) + 1998 + Mycom + + + + + + + + + + + + + + + Meta-Ph-List μ.χ.2297 (Jpn) + 1997 + A.D.M + + + + + + + + + + + + + + + + + Monster Farm - Battle Card Professional (Jpn) + 2000 + Tecmo + + + + + + + + + + + - Mini Moni. Shaker & Tambourine! Dapyon! (Jpn) - 2002 - Sega - - - + Money Idol Exchanger (Jpn) + 1998 + Athena + + + - + @@ -47344,6 +46604,25 @@ A few comments on these: + + + Mini Moni. Shaker & Tambourine! Dapyon! (Jpn) + 2002 + Sega + + + + + + + + + + + - Minna Atsumore! Igo Kyoushitsu (Jpn) - 2003 - I.Magic. - - - - - - - - - - - + Pro Mahjong Kiwame Plus (Jpn) + 1996 + Athena + + + + + + + + + + + + + + Pro Mahjong Kiwame Tengensenhen (Jpn) + 1999 + Athena + + + + + + + + + + + + + + Mahjong Yarouze! (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Kosodate Quiz Motto My Angel (Jpn) + 1999 + Namco + + + + + + + + + + + - Money Idol Exchanger (Jpn) - 1998 - Athena - - - - - - - - - - - - Monster Farm - Battle Card Professional (Jpn) - 2000 - Tecmo - - - - - - - - - - - - - - Kaibutsu Para-Dice (Jpn) - 1997 - Make Software - - - - - - - - - - - - - - Mori no Oukoku - Kingdom of Forest (Jpn) + Hole of the Legend Monster - Densetsu Kemono no Ana - Monster Complete World Ver.2 (Jpn) 1999 - Asmik Ace - - - + Idea Factory + + + - + @@ -47601,6 +46870,25 @@ A few comments on these: + + + Mori no Oukoku - Kingdom of Forest (Jpn) + 1999 + Asmik Ace + + + + + + + + + + + - Muscle Ranking - Kinniku Banzuke Vol.2 - Aratanaru Genkai e no Chousen! (Jpn) - 2000 - Konami - - - + Marvel Super Heroes (Jpn) + 1997 + Capcom + + + - + + + + + + + + Marvel Super Heroes vs. Street Fighter - EX Edition (Jpn) + 1999 + Capcom + + + + + + + + + + + + + + The Maestro Music (Japan, with Baton Stick) + 2000 + Global A + + + + + + + + + + + + + + The Maestro Music - Merry Christmas - Append Disc (Jpn) + 2000 + Global A + + + + + + + + + + + + + + Konami Antiques - MSX Collection Vol.1 (Jpn) + 1997 + Konami + + + + + + + + + + + + + + Konami Antiques - MSX Collection Vol.2 (Jpn) + 1998 + Konami + + + + + + + + + + + + + + Magical Tetris Challenge featuring Mickey Mouse (Jpn) + 1999 + Capcom + + + + + + + + + + + + + + Yagami Hiroki no Game-Taste - Munasawagi no Yokan (Jpn) + 1999 + Kodansha + + + + + + + + + + + + + + Marvel vs. Capcom - Clash of Super Heroes - EX Edition (Jpn) + 1999 + Capcom + + + + + + + @@ -47827,11 +47267,11 @@ A few comments on these: @@ -47887,6 +47327,43 @@ A few comments on these: + + + Arthur to Astaroth no Nazo Maikamura - Incredible Toons (Jpn) + 1996 + Capcom + + + + + + + + + + + - - - The Next Tetris - Deluxe DLX (Jpn) - 1999 - BPS - - - - - - - - - - - - - - - The Next Tetris (Jpn) - 1999 - Bullet Proof - - - - - - - - - - - - Ninpu Sentai Harikenger (Jpn) - 2002 - Bandai - - - - - - - - - - - + + + The Next Tetris (Jpn) + 1999 + Bullet Proof + + + + + + + + + + + + + + + The Next Tetris - Deluxe DLX (Jpn) + 1999 + BPS + + + + + + + + + + + - Olympia Yamasa - Virtua Pachi-Slot II - Jissen! Bishoujo Kouryaku Hou (Jpn) - 1997 - Map Japan - - - - - - - - - - - - One Two Smash - Tanoshii Tennis (Jpn, Honkakuha de 1300Yen Series) - 2000 - Hect - - - - - - - - - - - - Ore! Tomba (Jpn) - 1997 - Whoopee Camp - - - + Sougaku Toshi - Osaka (Jpn) + 1999 + King Records + + + - + - + + + + + + @@ -48605,6 +48032,25 @@ A few comments on these: + + + One Two Smash - Tanoshii Tennis (Jpn, Honkakuha de 1300Yen Series) + 2000 + Hect + + + + + + + + + + + - Oukyuu no Hihou - Tension (Jpn) - 1996 - VAP - - - - - - - - - - - - Pachi Pachi Saga (Jpn) - 1996 - TEN Institute - - - - - - - - - - - - - - Pachi-Slot Aruze Oukoku 5 (Jpn) - 2001 - Aruze - - - - - - - - - - - - - - Pachi-Slot Teiou - Battle Knight & Atlantis Doom (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Twist & Shimauta & Nankoku Monogatari (Jpn) - 2002 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 2 - Kagetsu & 2 Pair & Beaver X (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 3 - Sea Master X & Epsilon R & Wai Wai Pulsar 2 (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 6 - Kung Fu Lady & BangBang & Prelude 2 (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 7 - Maker Suishou Manual 1 - Beat the Dragon 2 & Lupin Sansei & Hot Rod Queen (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 & I'm Angel Blue 2 (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 & Tomcat (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Jpn) - 2002 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou Mini - Dr. A7 (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - + Shin Masoukishin - Panzer Warfare (Jpn) + 1999 + Banpresto + + + + + + + + + + + + + + Kaibutsu Para-Dice (Jpn) + 1997 + Make Software + + + + + + + + + + + + Kidou Keisatsu Patlabor - Mobile Police Patlabor - Game Edition (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + + Puzzle Bobble 3 DX (Jpn) + 1997 + Taito + + + + + + + + + + + + + + + Puzzle Bobble 4 (Jpn) + 1998 + Taito + + + + + + + + + + + - Perfect Fishing - Rock Fishing (Jpn) - 2000 - Seta - - - + Pocket Fighter (Jpn) + 1998 + Capcom + + + - + @@ -49312,25 +48576,6 @@ A few comments on these: - - - Pocket Fighter (Jpn) - 1998 - Capcom - - - - - - - - - - - - Power Shovel ni Norou!! (Jpn) - 2000 - Taito - - - + Pachi Pachi Saga (Jpn) + 1996 + TEN Institute + + + - - - - - - - - Power Stakes (Jpn) - 1997 - Aques - - - - - - - - - - - - - - Power Stakes Grade 1 (Jpn) - 1997 - Aques - - - - - - - + @@ -49561,6 +48768,26 @@ A few comments on these: + + + + Action Puzzle - Prism Land (Jpn, Honkakuha de 1300Yen Series) + 2000 + HECT + + + + + + + + + + + - Pro Mahjong Kiwame Plus (Jpn) - 1996 - Athena - - - + Pachi-Slot Aruze Oukoku 5 (Jpn) + 2001 + Aruze + + + - + - + - Pro Mahjong Kiwame Tengensenhen (Jpn) + Pachi-Slot Teiou - Battle Knight & Atlantis Doom (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 & I'm Angel Blue 2 (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 & Tomcat (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Jpn) + 2002 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou Mini - Dr. A7 (Jpn) 1999 - Athena - - - + Media Entertainment + + + - + - + - Pro Wrestling Sengokuden - Hyper Tag Match (Jpn) - 1997 - KSS - - - + Pachi-Slot Teiou 2 - Kagetsu & 2 Pair & Beaver X (Jpn) + 1999 + Media Entertainment + + + - + + + + + + + + Pachi-Slot Teiou 3 - Sea Master X & Epsilon R & Wai Wai Pulsar 2 (Jpn) + 1999 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou 6 - Kung Fu Lady & BangBang & Prelude 2 (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou 7 - Maker Suishou Manual 1 - Beat the Dragon 2 & Lupin Sansei & Hot Rod Queen (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Twist & Shimauta & Nankoku Monogatari (Jpn) + 2002 + Media Entertainment + + + + + + + + + + + + + + Power Stakes (Jpn) + 1997 + Aques + + + + + + + + + + + + + + Power Stakes Grade 1 (Jpn) + 1997 + Aques + + + + + + + @@ -49756,42 +49205,40 @@ A few comments on these: - - + - Puzzle Bobble 3 DX (Jpn) + Pro Wrestling Sengokuden - Hyper Tag Match (Jpn) 1997 - Taito - - - + KSS + + + - + - - + - Puzzle Bobble 4 (Jpn) - 1998 + Power Shovel ni Norou!! (Jpn) + 2000 Taito - - - + + + - + @@ -49898,7 +49345,7 @@ A few comments on these: - + - Rami-Chan no Ooedo Surogoku - Keiou Yuugekitai Gaiden (Jpn) - 1998 - Victor Interactive Software - - - + Chippoke Ralph no Daibouken - The Adventure of Little Ralph (Jpn) + 1999 + New + + + - + @@ -50039,22 +49485,60 @@ A few comments on these: - - + - Ray Tracers (Jpn) - 1997 - Taito - - - + Kaisoku Tenshi - The Rapid Angel (Jpn) + 1998 + Techno Soleil + + + - + + + + + + + + Groove Adventure Rave - Mikan no Hiseki (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Groove Adventure Rave - Yuukyuu no Kizuna (Jpn) + 2002 + Konami + + + + + + + @@ -50080,21 +49564,21 @@ A few comments on these: - + - Ready Maid (Jpn) - 2002 - Princess - - - + Ray Tracers (Jpn) + 1997 + Taito + + + - + @@ -50127,6 +49611,46 @@ A few comments on these: + + + + Recipro Heat 5000 (Jpn) + 1997 + Xing + + + + + + + + + + + + + + + Ready Maid (Jpn) + 2002 + Princess + + + + + + + + + + + - - - Recipro Heat 5000 (Jpn) - 1997 - Xing - - - - - - - - - - - - - - Ridegear Guybrave II (Jpn) - 1998 - Axela - - - - - - - - - - - - - - - - - - - - Rikujou Boueitai Mao-chan (Jpn, Deluxe Pack) - 2003 - Marvelous - - - - - - - - - - - + Roommate - Inoue Ryoko (Jpn) + 1999 + Datam Polystar + + + + + + + + + + + - Roommate - Inoue Ryoko (Jpn) - 1999 - Datam Polystar - - - + Perfect Fishing - Rock Fishing (Jpn) + 2000 + Seta + + + - + @@ -50395,21 +49868,40 @@ A few comments on these: - + - S.Q. - Sound Qube (Jpn) - 1998 - Human - - - + Bishoujo Senshi Sailormoon Super S - Shin Shuyaku Soudatsusen (Jpn, Genteiban) + 1996 + Angel + + + - + + + + + + + + Kids Station - Bishoujo Senshi Sailormoon World - Chibiusa to Tanoshii Mainichi (Jpn) + 2001 + Bandai + + + + + + + @@ -50528,6 +50020,27 @@ A few comments on these: + + + + + Samurai Spirits - Zankurou Musouken (Jpn, PlayStation the Best) + 1997 + SNK + + + + + + + + + + + - - + - Samurai Spirits - Zankurou Musouken (Jpn, PlayStation the Best) + Shinsetsu Samurai Spirits - Bushidou Retsuden (Jpn) 1997 SNK - - - + + + - + @@ -50645,25 +50159,6 @@ A few comments on these: - - - Sangokushi Returns (Jpn) - 1997 - Koei - - - - - - - - - - - + Sangokushi Returns (Jpn) + 1997 + Koei + + + + + + + + + + + - Saru! Get You! (Jpn) - 1999 - SCEI - - - + Super Adventure Rockman (Jpn) + 1998 + Capcom + + + - + - + + + + + + + + + + + @@ -50797,59 +50330,249 @@ A few comments on these: - + - SD Gundam Eiyuu Den Daikessen!! - Kishi vs. Musha (Jpn) + Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Jpn) 2001 Bandai - - - + + + - + - + - SD Gundam G Generation-F (Jpn, Limited Edition) - 2000 + Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Jpn) + 2001 Bandai - - - + + + - + - + - + + + + + Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Jpn) + 2001 + Bandai + + + + + - + - + + + + + Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Jpn) + 2001 + Bandai + + + + + - + + + + + + + + Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Simple Characters 2000 Series vol.07 - Ikkyuu-san - The Quiz (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series vol.15 - Cyborg 009 - The Block Kuzushi (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Jpn) + 2003 + Bandai / D3 + + + + + + + @@ -50908,6 +50631,63 @@ A few comments on these: + + + SD Gundam G Generation-F (Jpn, Limited Edition) + 2000 + Bandai + + + + + + + + + + + + + + + + + + + + + + + + SD Gundam Eiyuu Den Daikessen!! - Kishi vs. Musha (Jpn) + 2001 + Bandai + + + + + + + + + + + - Square's Preview 5 (Jpn, Seiken Densetsu Demo) - 1999 - Squaresoft - - - - - - - - - + Super Football Champ (Jpn) + 1996 + Taito + + + + + + + + + + + + + + Street Fighter Collection (Jpn) + 1997 + Capcom + + + + + + + + + + + + + + + + - Shin Masoukishin - Panzer Warfare (Jpn) - 1999 - Banpresto - - - - - - - - - - - - Shin SD Sengokuden - Kidou Musha Taisen (Jpn, Limited Edition) - 1996 - Bandai - - - - - - - - - - - - - - - Shin Theme Park (Jpn) - 1997 - Electronic Arts Victor - - - - - - - - - - - - Shinseiden Megaseed Fukkatsu-Hen (Jpn) - 1997 - Banpresto - - - + Shin SD Sengokuden - Kidou Musha Taisen (Jpn, Limited Edition) + 1996 + Bandai + + + - + - + - Shinsetsu Samurai Spirits - Bushidou Retsuden (Jpn) - 1997 - SNK - - - + Simple 1500 Series Hello Kitty vol.01 - Hello Kitty Bowling (Jpn) + 2001 + D3 Publisher + + + - + - + - Shiritsu Justice Gakuen - Legion of Heroes (Jpn) - 1998 - Capcom - - - + Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Jpn) + 2001 + D3 Publisher + + + - + - - - - - - + - + - Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Jpn) + Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + Kato Hifumi Kudan - Shogi Club (Jpn, Honkakuha de 1300Yen Series) 1999 - Capcom - - - + Hect + + + - + @@ -51414,11 +51264,11 @@ A few comments on these: @@ -51460,6 +51310,709 @@ A few comments on these: + + + Simulation Zoo - Sekaiichi no Doubutsuen o Tsukurou (Jpn) + 1996 + SoftBank + + + + + + + + + + + + + + Sister Princess - Pure Stories (Jpn) + 2001 + MediaWorks + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + Slap Happy Rhythm Busters (Jpn) + 2000 + ASK + + + + + + + + + + + + + + Super Live Stadium (Jpn) + 1998 + Aques + + + + + + + + + + + + + + Kids Station - Motto! Oja Majo Dorami - MAHO-dou Smile Party (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Snatcher (Jpn) + 1996 + Konami + + + + + + + + + + + + + + S.Q. - Sound Qube (Jpn) + 1998 + Human + + + + + + + + + + + + + + Snobow Kids Plus (Jpn) + 1999 + ASCII + + + + + + + + + + + + + + Soukyugurentai - Oubushustugeki (Jpn) + 1997 + Data East + + + + + + + + + + + + + + Gakuen Sentai Solblast (Jpn) + 1999 + Creative Heads + + + + + + + + + + + + + + Sonata (Jpn) + 1999 + T&E Soft + + + + + + + + + + + + + + + + + + + Sotsugyou Crossworld (Jpn) + 1996 + Hearty Robin + + + + + + + + + + + + + + Space Invaders X (Jpn) + 2000 + Taito + + + + + + + + + + + + + + Spectral Blade (Jpn) + 1999 + Idea Factory + + + + + + + + + + + + + + Speed King (Jpn) + 1996 + Konami + + + + + + + + + + + + + + Speed Power Gunbike (Jpn) + 1998 + Sony Music Entertainment + + + + + + + + + + + + + + Spider-Man (Jpn) + 2001 + Success + + + + + + + + + + + - - - Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty vol.01 - Hello Kitty Bowling (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series vol.07 - Ikkyuu-san - The Quiz (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series vol.15 - Cyborg 009 - The Block Kuzushi (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Jpn) - 2003 - Bandai / D3 - - - - - - - - - - - - - - Simulation Zoo - Sekaiichi no Doubutsuen o Tsukurou (Jpn) - 1996 - SoftBank - - - - - - - - - - - - - - Sister Princess - Pure Stories (Jpn) - 2001 - MediaWorks - - - - - - - - - - - - - - Slap Happy Rhythm Busters (Jpn) - 2000 - ASK - - - - - - - - - - - - - - Snatcher (Jpn) - 1996 - Konami - - - - - - - - - - - - - - Snobow Kids Plus (Jpn) - 1999 - ASCII - - - - - - - - - - - - - - Sonata (Jpn) - 1999 - T&E Soft - - - - - - - - - - - - - - - - - - - Sotsugyou Crossworld (Jpn) - 1996 - Hearty Robin - - - - - - - - - - - - - - Sougaku Toshi - Osaka (Jpn) - 1999 - King Records - - - - - - - - - - - - - - - - - - - Soukyugurentai - Oubushustugeki (Jpn) - 1997 - Data East - - - - - - - - - - - - - - Space Invaders X (Jpn) - 2000 - Taito - - - - - - - - - - - - - - Spectral Blade (Jpn) - 1999 - Idea Factory - - - - - - - - - - - - - - Speed King (Jpn) - 1996 - Konami - - - - - - - - - - - - - - Speed Power Gunbike (Jpn) - 1998 - Sony Music Entertainment - - - - - - - - - - - - - - Spider-Man (Jpn) - 2001 - Success - - - - - - - - - - - - Street Fighter Collection (Jpn) - 1997 - Capcom - - - + Kotetsu Reiki - Steel Dom (Jpn) + 1996 + TecnoSoft + + + - + - + - + + + + + + Shin Theme Park (Jpn) + 1997 + Electronic Arts Victor + + + + + - + @@ -53006,11 +52523,11 @@ A few comments on these: @@ -53019,6 +52536,60 @@ A few comments on these: + + + Idol Janshi Suchie-Pai II Limited (Jpn) + 1996 + Jaleco + + + + + + + + + + + + + + + + + + + + + + + + Idol Janshi Suchie-Pai Limited (Jpn) + 1995 + Jaleco + + + + + + + + + + + - Super Adventure Rockman (Jpn) - 1998 - Capcom - - - - - - - - - - - - - - - - - - - - - - - - Super Football Champ (Jpn) - 1996 - Taito - - - - - - - - - - - - - - Super Live Stadium (Jpn) - 1998 - Aques - - - - - - - - - - - - - - Susume! Kaizoku - Be Pirates! (Jpn) - 1998 - Artdink - - - - - - - - - - - - - - T Kara Hajimaru Monogatari (Jpn) - 1998 - Jaleco - - - - - - - - - - - - - - Tactical Armor Custom Gasaraki (Jpn) - 2000 - Bandai - - - - - - - - - - - - Taiho Shichauzo! - You're Under Arrest (Jpn) - 2001 - Pioneer - - - + Tatsunoko Fight (Jpn) + 2000 + Takara + + + - + - - - - - - + - + - Tales of Fandom Vol.1 (Jpn, Cless Version) - 2002 - Namco - - - + Tenant Wars (Jpn) + 1998 + KID + + + - + + + + + + + + Tenchi Muyou! Toukou Muyou (Jpn) + 1996 + Xing + + + + + + + + + + + + + + + + + + + Tenchi wo Kurau II - Sekiheki no Tatakai (Jpn) + 1996 + Capcom + + + + + + + + + + + + + + Ten Made Jack - Odoroki Manenoki Daitoubou!! (Jpn) + 2000 + Enix + + + + + + + + + + + + + + Tennis Arena (Jpn) + 1998 + Ubi Soft + + + + + + + + + + + + + + Tensen Nyannyan - Gekijou-ban (Jpn) + 1998 + Time Point + + + + + + + + + + + + + + Oukyuu no Hihou - Tension (Jpn) + 1996 + VAP + + + + + + + + + + + + + + Tetris X (Jpn) + 1996 + BPS + + + + + + + + + + + + + + Thunder Force V - Perfect System (Jpn) + 1998 + TechnoSoft + + + + + + + + + + + + + + TFX - Tactical Fighter Experiment (Jpn) + 1996 + Imageneer + + + + + + + + + + + + + Time Gal & Ninja Hayate (Jpn) + 1996 + Taito + + + + + + + + + + + + + + + + + + + + + That's QT (Jpn) + 2000 + Koei + + + + + + + + + + + + + + Theme Hospital (Jpn) + 1998 + Electronic Arts + + + + + + + + + + + + + + Tiny Bullets (Jpn) + 2000 + SCEI + + + + + + + @@ -53455,399 +53154,44 @@ A few comments on these: - + - Tatsunoko Fight (Jpn) - 2000 - Takara - - - - - - - - - - - - - - Ten Made Jack - Odoroki Manenoki Daitoubou!! (Jpn) - 2000 - Enix - - - - - - - - - - - - - - Tenant Wars (Jpn) + T Kara Hajimaru Monogatari (Jpn) 1998 - KID - - - + Jaleco + + + - + - + + - Tenchi Muyou! Toukou Muyou (Jpn) - 1996 - Xing - - - - - - - - - - - - - - - - - - - Tenchi wo Kurau II - Sekiheki no Tatakai (Jpn) - 1996 - Capcom - - - + Toukidenshou - Angel Eyes (Jpn) + 1997 + Tecmo + + + - - - - - - - - Tennis Arena (Jpn) - 1998 - Ubi Soft - - - - - - - - - - - - - - Tensen Nyannyan - Gekijou-ban (Jpn) - 1998 - Time Point - - - - - - - - - - - - - - Tenshi no Shippo (Jpn) - 2003 - Bandai - - - - - - - - - - - - - - Tetris X (Jpn) - 1996 - BPS - - - - - - - - - - - - - - TFX - Tactical Fighter Experiment (Jpn) - 1996 - Imageneer - - - - - - - - - - - - - That's QT (Jpn) - 2000 - Koei - - - - - - - - - - - - - - Theme Hospital (Jpn) - 1998 - Electronic Arts - - - - - - - - - - - - - - Thunder Force V - Perfect System (Jpn) - 1998 - TechnoSoft - - - - - - - - - - - - - - Time Gal & Ninja Hayate (Jpn) - 1996 - Taito - - - - - - - - - - - - - - - - - - - - - Tiny Bullets (Jpn) - 2000 - SCEI - - - - - - - - - - - - - - To Heart (Jpn) - 1999 - Aqua Plus - - - - - - - - - - - - - - - - - - - Toaplan Shooting Battle 1 (Jpn) - 1996 - Banpresto - - - - - - - - - - - - - - - Toca Touring Car Championship (Jpn) - 1998 - Upstar - - - - - - - + @@ -54013,6 +53357,135 @@ A few comments on these: + + + Tenshi no Shippo (Jpn) + 2003 + Bandai + + + + + + + + + + + + + + Tales of Fandom Vol.1 (Jpn, Cless Version) + 2002 + Namco + + + + + + + + + + + + + + To Heart (Jpn) + 1999 + Aqua Plus + + + + + + + + + + + + + + + + + + + Toaplan Shooting Battle 1 (Jpn) + 1996 + Banpresto + + + + + + + + + + + + + + + Toca Touring Car Championship (Jpn) + 1998 + Upstar + + + + + + + + + + + + Gekitotsu Toma L'Arc - Tomarunner vs. L'Arc~en~Ciel (Jpn) + 2000 + Sony + + + + + + + + + + + + + + Gekisou Tomarunner (Jpn) + 1999 + SCEI + + + + + + + + + + + + + + Ore! Tomba (Jpn) + 1997 + Whoopee Camp + + + + + + + + + + + - - - Toukidenshou - Angel Eyes (Jpn) - 1997 - Tecmo - - - - - - - - - - - @@ -54333,47 +53840,6 @@ A few comments on these: - - - - TV Animation X - Unmei no Tatakai (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - - Twin Goddesses (Jpn) - 1994 - PolyGram - - - - - - - - - - - + + + Twin Goddesses (Jpn) + 1994 + PolyGram + + + + + + + + + + + - - - Ucchannanchan no Honoo no Challenger - Denryu Iraira-Bou Returns (Jpn) - 1998 - Saurus - - - - - - - - - - - + Bokujyou Keieiteki Board Game Umapoly (Jpn) + 1999 + Konami + + + + + + + + + + + + Taiho Shichauzo! - You're Under Arrest (Jpn) + 2001 + Pioneer + + + + + + + + + + + + + + + + - + - V-Tennis 2 (Jpn) - 1996 - Tonkin House - - - + Assault Suits Valken 2 - Juusou Kihei Valken 2 (Jpn) + 1999 + Masaya + + + - + @@ -54765,42 +54276,22 @@ A few comments on these: - - + + - Victory Spike (Jpn) + Vermin Kids (Jpn) 1996 - Imagineer - - - + Electronic Arts + + + - - - - - - - - - Victory Zone - Real Pachinko Simulator (Jpn) - 1995 - SCEI - - - - - - - + @@ -54825,42 +54316,22 @@ A few comments on these: - - + + - Virtual Kyoutei '98 (Jpn) - 1998 - Nihon Bussan - - - + Victory Zone - Real Pachinko Simulator (Jpn) + 1995 + SCEI + + + - - - - - - - - - Virtual Pro Wrestling (Jpn) - 1996 - Asmik Ace - - - - - - - + @@ -54886,22 +54357,21 @@ A few comments on these: - + - The Vision of Escaflowne (Jpn, Limited Edition) - 1997 - Bandai - - - + Virtual Kyoutei '98 (Jpn) + 1998 + Nihon Bussan + + + - + @@ -54926,6 +54396,123 @@ A few comments on these: + + + Soukou Kihei Votoms - Lightning Slash (Jpn) + 1999 + Takara + + + + + + + + + + + + + + Olympia Yamasa - Virtua Pachi-Slot II - Jissen! Bishoujo Kouryaku Hou (Jpn) + 1997 + Map Japan + + + + + + + + + + + + + + + Virtual Pro Wrestling (Jpn) + 1996 + Asmik Ace + + + + + + + + + + + + + + + Victory Spike (Jpn) + 1996 + Imagineer + + + + + + + + + + + + + + + V-Tennis 2 (Jpn) + 1996 + Tonkin House + + + + + + + + + + + + + + Chiki Chiki Machine Mou Race - Wacky Races (Jpn) + 2001 + Infogrames Hudson + + + + + + + + + + + - - - Weltorv Estleia (Jpn) - 1999 - Hudson - - - - - - - - - - - + + + + World League Soccer - Challenge Nippon! (Jpn, Family Price 1500) + 2000 + Coconuts Japan + + + + + + + + + + + - - - Arcade Gears - Wonder 3 (Jpn) - 1998 - Xing - - - - - - - - - - - + + + Arcade Gears - Wonder 3 (Jpn) + 1998 + Xing + + + + + + + + + + + - - + + - World League Soccer - Challenge Nippon! (Jpn, Family Price 1500) - 2000 - Coconuts Japan - - - + Hiroki Matsukata Presents - World Fishing (Jpn, BPS The Choice) + 1999 + BPS + + + - + @@ -55277,26 +54864,6 @@ A few comments on these: - - - - X. Racing (Jpn) - 1998 - Nichibutsu - - - - - - - - - - - - Yagami Hiroki no Game-Taste - Munasawagi no Yokan (Jpn) - 1999 - Kodansha - - - + Extra Bright (Jpn) + 1996 + ASCII + + + - + + + + + + + + + X. Racing (Jpn) + 1998 + Nichibutsu + + + + + + + + + + + + + + + TV Animation X - Unmei no Tatakai (Jpn) + 2002 + Bandai + + + + + + + @@ -55439,6 +55047,26 @@ A few comments on these: + + + + Youkai Hana Asobi (Jpn) + 2001 + Unbalance + + + + + + + + + + + - + + - Youkai Hana Asobi (Jpn) - 2001 - Unbalance - - - + Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Jpn) + 1999 + Media Rings + + + - + @@ -55519,26 +55147,6 @@ A few comments on these: - - - - Yume no Tsubasa (Jpn) - 2000 - KID - - - - - - - - - - - - + + - Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Jpn) - 1999 - Media Rings - - - + Yume no Tsubasa (Jpn) + 2000 + KID + + + - + - - + - Yuukyuu no Eden - The Eternal Eden (Jpn) - 1999 - ASCII - - - + Ginga Ojousama Densetsu Yuna - Final Edition (Jpn) + 1998 + Hudson + + + - - - - - - - - Yuusha-Ou GaoGaiGar - Blockaded Numbers (Japan) - 1999 - Takara - - - - - - - + @@ -55698,47 +55286,6 @@ A few comments on these: - - - - Zen-Nihon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Jpn) - 1998 - TEN - - - - - - - - - - - - - - - Zen-Nihon Pro Wrestling - Ouja no Kon (Jpn) - 1999 - Human - - - - - - - - - - - + Kidou Senshi Z-Gundam (Jpn, Demo) + 1997 + Bandai + + + + + + + + + - + + - Zoids - Battle Card Game - Seihou Tairiku Senki (Jpn) - 2001 - Tomy - - - + Zen-Nihon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Jpn) + 1998 + TEN + + + - + + + + + + + + + Zen-Nihon Pro Wrestling - Ouja no Kon (Jpn) + 1999 + Human + + + + + + + @@ -55859,6 +55444,26 @@ A few comments on these: + + + + Zoids - Battle Card Game - Seihou Tairiku Senki (Jpn) + 2001 + Tomy + + + + + + + + + + + + Square's Preview 5 (Jpn, Seiken Densetsu Demo) + 1999 + Squaresoft + + + + + + + + + + + + + + + + Dance Dance Revolution - Disney Mix (Pirate) + 2001 + <pirate> + + + + + + + + + + + + + Bubble Bobble II (Prototype) + 1995 + Taito + + + + + + + + + + Baldur's Gate (USA, Prototype) + 19?? + Interplay + + + + + + + + + + + + + + + + + + + + + + + BioHazard (Jpn, Prototype 19950804) + 1995 + Capcom + + + + + + + + + + BioHazard (Jpn, Prototype 19951004) + 1995 + Capcom + + + + + + + + + + BioHazard (Jpn, Prototype 19960131) + 1996 + Capcom + + + + + + + + + + BioHazard 2 (Prototype) + 1998 + Capcom + + + + + + + + + + BioHazard 2 (Prototype, Alt) + 1998 + Capcom + + + + + + + + + + Breakneck (Prototype) + 19?? + Radical + + + + + + + + + + Crash Bandicoot (Prototype, 19960408) + 1996 + SCEA + + + + + + + + + + Deuce (USA, Prototype) + 2000 + Midway + + + + + + + + + + Diablo (Prototype) + 1997 + Electronic Arts + + + + + + + + + + Driver (Prototype Demo) + 19?? + GT Interactive + + + + + + + + + + Duke Nukem Time to Kill (USA, Prototype) + 1998 + GT Interactive + + + + + + + + + + Global Domination (USA, Prototype) + 1998? + Psygnosis + + + + + + + + + + Legacy of Kain - Soul Reaver (USA, Prototype 19990628) + 1999 + Eidos + + + + + + + + + + Legacy of Kain - Soul Reaver (USA, Prototype 19990512) + 1999 + Eidos + + + + + + + + + + Madden NFL 96 (USA, Prototype) + 1995 + Electronic Arts + + + + + + + + + + Metal Gear Solid (Pilot Disk) + 1998 + Konami + + + + + + + + + + + + Persona 2 - Eternal Punishment (Prototype? Debug) + 2000 + Atlus + + + + + + + + + + Rockman 8 (Jpn, Prototype v1) + 1996 + Capcom + + + + + + + + + + Rockman 8 (Jpn, Prototype 1) + 1996 + Capcom + + + + + + + + + + Rockman 8 (Jpn, Prototype 2) + 1996 + Capcom + + + + + + + + + + Rockman Dash (Capcom Friendly Club Demo) + 1997 + Capcom + + + + + + + + + + + Rockman X6 (Jpn, Prototype 20010928) + 2001 + Capcom + + + + + + + + + + Silent Hill (USA, Prototype) + 1999 + Konami + + + + + + + + + + Spirit Master (USA, Prototype) + 19?? + Acclaim + + + + + + + + + + StarCon (Prototype) + 1998 + Accolade + + + + + + + + + + Thrill Kill (USA, Prototype) + 1998 + Virgin Interactive + + + + + + + + + + Thrill Kill (USA, Prototype Earlier?) + 1998 + Virgin Interactive + + + + + + + + + + Tomb Raider (Prototype, 19960722) + 1996 + Core Design + + + + + + + + + + Tomb Raider II (USA, Prototype) + 1997 + Core Design + + + + + + + + + + Tony Hawk's Pro Skater (USA, Prototype) + 1999 + Activision + + + + + + + + + + Torc - Legend of the Ogre Crown (Prototype) + 19?? + Head Games + + + + + + + + + + Virtuoso (Prototype, 19960514) + 1996 + Data East? + + + + + + + + + + WWF Smackdown! (USA, Prototype 20000106) + 2000 + THQ + + + + + + + + + + + + + Resident Evil 2 Preview (Euro, CD Consoles No.38) + 1997 + Capcom + + + + + + + + + + + Resident Evil 3 (Euro, Demo) + 1999 + Capcom + + + + + + + + + + + Bounty Arms Demo (Jpn, Demo Demo No.5?, 199504) + 1995 + Data West + + + + + + + + + + Castlevania - Symphony of the Night (E3 Demo, 1997) + 1997 + Konami + + + + + + + + + + Tomb Raider (E3 Demo, 19960520) + 1996 + SCEI + + + + + + + + diff --git a/hash/sorcerer_cass.xml b/hash/sorcerer_cass.xml index efb6a7db013..533a506c17d 100644 --- a/hash/sorcerer_cass.xml +++ b/hash/sorcerer_cass.xml @@ -3,77 +3,29 @@ - + - - Chomp - 1981 - W. S. King - - - - - - - - - - Eliza - 19?? + + DEMO1 + 1979 <unknown> - + + - - - - - - - - Galaxians - 19?? - <unknown> - - - - - - - - - - - - - - Eliza (Alt) - 19?? - <unknown> - - - - - - - - - - DEMO1 (Bad?) - 19?? - <unknown> - - - - + + DEMO2 - 19?? + 1979 <unknown> - + @@ -83,9 +35,10 @@ DEMO3 - 19?? + 1979 <unknown> - + + @@ -95,9 +48,9 @@ DEMO4 - 19?? + 1979 <unknown> - + @@ -107,9 +60,10 @@ DEMO5 - 19?? + 1979 <unknown> - + + @@ -119,21 +73,23 @@ DEMO6 - 19?? + 1979 <unknown> - + + - - + + DEMO7 - 19?? + 1979 <unknown> - + + @@ -143,27 +99,28 @@ DEMO8 - 19?? + 1979 <unknown> - + + - - - Martian Invaders (Bad?) - 1980? + + Eliza + 19?? <unknown> - + - - + + + + + Air Traffic Controller + 1979 + unknown + + + + + + + + + + + Sargon Chess + 198? + unknown + + + + + + + + + + Chess + 198? + unknown + + + + + + + + + + Fastgammon + 1979 + Quality Software + + + + + + + + + + Character Designer + 198? + unknown + + + + + + + + + + Adventureland + 1979 + unknown + + + + + + + + + + + Mission Impossible + 1979 + unknown + + + + + + + + + + + Arrows and Alleys + 1980 + Quality Software + + + + + + + + + + + Defender + 1982 + System Software + + + + + + + + + + + Chomp + 1981 + Global Software Network + + + + + + + + + + + Super Asteroids + 1981 + System Software + + + + + + + + + + + Galaxians (V1) + 198? + unknown + + + + + + + + + + Galaxians (V2) + 198? + unknown + + + + + + + + + + Astro Attacker + 1982 + Global Software Network + + + + + + + + + + + Spellbinder Word Processing System + 198? + unknown + + + + + + + + + + Ezyfile + 1981 + unknown + + + + + + + + + + + Midas + 1980 + unknown + + + + + + + + + + + Level II Basic + 198? + unknown + + + + + + + + + + Memory Change (Hexpad) + 1980 + unknown + + + + + + + + + + + Super-X 1.1 + 198? + unknown + + + + + + + + + + Martian Invaders + 1980 + Quality Software + + + + + + + + + + + Kilopede + 1982 + System Software + + + + + + + + + + + Amazing Maze + 198? + unknown + + + + + + + + + diff --git a/hlsl/distortion.fx b/hlsl/distortion.fx index bd78efde8c5..1ee1641e646 100644 --- a/hlsl/distortion.fx +++ b/hlsl/distortion.fx @@ -170,22 +170,18 @@ float GetSpotAddend(float2 coord, float amount) return saturate(SigmoidSpot); } -float GetRoundCornerFactor(float2 coord, float radiusAmount, float smoothAmount) +float GetRoundCornerFactor(float2 coord, float2 bounds, float radiusAmount, float smoothAmount) { // reduce smooth amount down to radius amount smoothAmount = min(smoothAmount, radiusAmount); - float2 quadDims = QuadDims; - quadDims = SwapXY - ? quadDims.yx - : quadDims.xy; - - float range = min(quadDims.x, quadDims.y) * 0.5; - float radius = range * max(radiusAmount, 0.0025f); - float smooth = 1.0 / (range * max(smoothAmount, 0.0025f)); + float range = min(bounds.x, bounds.y); + float amountMinimum = range > 0.0f ? 1.0f / range : 0.0f; + float radius = range * max(radiusAmount, amountMinimum); + float smooth = 1.0f / (range * max(smoothAmount, amountMinimum * 3.0f)); // compute box - float box = roundBox(quadDims * (coord * 2.0f), quadDims, radius); + float box = roundBox(bounds * (coord * 2.0f), bounds, radius); // apply smooth box *= smooth; @@ -279,8 +275,11 @@ float4 ps_main(PS_INPUT Input) : COLOR // Round Corners Simulation float2 RoundCornerCoord = CornerCoordCentered; + float2 RoundCornerBounds = SwapXY + ? QuadDims.yx + : QuadDims.xy; - float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerAmount, SmoothBorderAmount); + float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerBounds, RoundCornerAmount * 0.5f, SmoothBorderAmount * 0.5f); BaseColor.rgb *= roundCornerFactor; return BaseColor; diff --git a/hlsl/post.fx b/hlsl/post.fx index eddc4bb8da5..93a871a629a 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -98,7 +98,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.TexCoord = Input.TexCoord; Output.TexCoord += PrepareBloom - ? 0.0f / TargetDims // use half texel offset (DX9) to do the blur for first bloom layer + ? 0.0f // use half texel offset (DX9) to do the blur for first bloom layer : 0.5f / TargetDims; // fix half texel offset (DX9) Output.ScreenCoord = Input.Position.xy / ScreenDims; @@ -252,7 +252,13 @@ float4 ps_main(PS_INPUT Input) : COLOR float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b; - float ScanlineCoord = SourceCoord.y * SourceDims.y * ScanlineScale * PI; + float ScanlineCoord = SourceCoord.y; + ScanlineCoord += QuadDims.y <= SourceDims.y * 2.0f + ? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source + : 0.0f; + + ScanlineCoord *= SourceDims.y * ScanlineScale * PI; + float ScanlineCoordJitter = ScanlineOffset * PHI; float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter); float ScanlineWide = ScanlineHeight + ScanlineVariation * max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness); diff --git a/hlsl/vector.fx b/hlsl/vector.fx index 95957d57c80..71d53d030bc 100644 --- a/hlsl/vector.fx +++ b/hlsl/vector.fx @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ryan Holtz +// copyright-holders:Ryan Holtz,ImJezze //----------------------------------------------------------------------------- // Vector Effect //----------------------------------------------------------------------------- @@ -13,7 +13,7 @@ struct VS_OUTPUT float4 Position : POSITION; float4 Color : COLOR0; float2 TexCoord : TEXCOORD0; - float2 LineInfo : TEXCOORD1; + float2 SizeInfo : TEXCOORD1; }; struct VS_INPUT @@ -21,16 +21,26 @@ struct VS_INPUT float3 Position : POSITION; float4 Color : COLOR0; float2 TexCoord : TEXCOORD0; - float2 LineInfo : TEXCOORD1; + float2 SizeInfo : TEXCOORD1; }; struct PS_INPUT { float4 Color : COLOR0; float2 TexCoord : TEXCOORD0; - float2 LineInfo : TEXCOORD1; // x is the line length, y is unused + float2 SizeInfo : TEXCOORD1; }; +//----------------------------------------------------------------------------- +// Functions +//----------------------------------------------------------------------------- + +// www.iquilezles.org/www/articles/distfunctions/distfunctions.htm +float roundBox(float2 p, float2 b, float r) +{ + return length(max(abs(p) - b + r, 0.0f)) - r; +} + //----------------------------------------------------------------------------- // Vector Vertex Shader //----------------------------------------------------------------------------- @@ -49,7 +59,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.Position.xy *= 2.0f; // zoom Output.TexCoord = Input.TexCoord; - Output.LineInfo = Input.LineInfo; + Output.SizeInfo = Input.SizeInfo; Output.Color = Input.Color; @@ -64,10 +74,35 @@ uniform float TimeRatio; // Frame time of the vector (not set) uniform float TimeScale; // How much frame time affects the vector's fade (not set) uniform float LengthRatio; // Size at which fade is maximum uniform float LengthScale; // How much length affects the vector's fade +uniform float BeamSmooth; + +float GetRoundCornerFactor(float2 coord, float2 bounds, float radiusAmount, float smoothAmount) +{ + // reduce smooth amount down to radius amount + smoothAmount = min(smoothAmount, radiusAmount); + + float range = min(bounds.x, bounds.y); + float amountMinimum = range > 0.0f ? 1.0f / range : 0.0f; + float radius = range * max(radiusAmount, amountMinimum); + float smooth = 1.0f / (range * max(smoothAmount, amountMinimum * 3.0f)); + + // compute box + float box = roundBox(bounds * (coord * 2.0f), bounds, radius); + + // apply smooth + box *= smooth; + box += 1.0f - pow(smooth * 0.5f, 0.5f); + + float border = smoothstep(1.0f, 0.0f, box); + + return saturate(border); +} float4 ps_main(PS_INPUT Input) : COLOR { - float lineLength = Input.LineInfo.x / max(QuadDims.x, QuadDims.y); // normalize + float2 lineSize = Input.SizeInfo / max(QuadDims.x, QuadDims.y); // normalize + + float lineLength = lineSize.x; float lineLengthRatio = LengthRatio; float lineLengthScale = LengthScale; @@ -78,6 +113,9 @@ float4 ps_main(PS_INPUT Input) : COLOR float4 outColor = float4(timeLengthModulate, timeLengthModulate, timeLengthModulate, 1.0f); outColor *= Input.Color; + float RoundCornerFactor = GetRoundCornerFactor(Input.TexCoord - 0.5f, Input.SizeInfo, 1.0f, BeamSmooth); + outColor.rgb *= RoundCornerFactor; + return outColor; } diff --git a/ini/presets/vector-mono.ini b/ini/presets/vector-mono.ini index 1aa5f0915df..00ff7978f5d 100644 --- a/ini/presets/vector-mono.ini +++ b/ini/presets/vector-mono.ini @@ -6,8 +6,7 @@ gamma 0.50 # # CORE VECTOR OPTIONS # -antialias 1 -beam_width_min 0.75 +beam_width_min 1.00 beam_width_max 4.00 beam_intensity_weight 0.75 flicker 0.15 @@ -48,6 +47,7 @@ yiq_enable 0 # # VECTOR POST-PROCESSING OPTIONS # +vector_beam_smooth 0.0 vector_length_scale 0.5 vector_length_ratio 0.5 diff --git a/ini/presets/vector.ini b/ini/presets/vector.ini index 8422d816d8b..ea41036f3e5 100644 --- a/ini/presets/vector.ini +++ b/ini/presets/vector.ini @@ -1,8 +1,7 @@ # # CORE VECTOR OPTIONS # -antialias 1 -beam_width_min 0.75 +beam_width_min 1.00 beam_width_max 4.00 beam_intensity_weight 0.75 flicker 0.15 @@ -51,6 +50,7 @@ yiq_enable 0 # # VECTOR POST-PROCESSING OPTIONS # +vector_beam_smooth 0.0 vector_length_scale 0.5 vector_length_ratio 0.5 diff --git a/makefile b/makefile index bd0f334876b..ca2b88c8495 100644 --- a/makefile +++ b/makefile @@ -1043,27 +1043,31 @@ ifdef FASTBUILD $(SILENT) fbuild.exe -config $(PROJECTDIR_WIN)/vs2015-fastbuild/ftbuild.bff $(FASTBUILD_PARAMS) endif +#------------------------------------------------- +# android-ndk +#------------------------------------------------- + +.PHONY: android-ndk +android-ndk: +ifndef ANDROID_NDK_LLVM + $(error ANDROID_NDK_LLVM is not set) +endif +ifndef ANDROID_NDK_ROOT + $(error ANDROID_NDK_ROOT is not set) +endif + #------------------------------------------------- # android-arm #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM $(error ANDROID_NDK_ARM is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake .PHONY: android-arm android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile -ifndef ANDROID_NDK_ARM - $(error ANDROID_NDK_ARM is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) @@ -1071,23 +1075,14 @@ endif # android-arm64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM64 $(error ANDROID_NDK_ARM64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake .PHONY: android-arm64 android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile -ifndef ANDROID_NDK_ARM64 - $(error ANDROID_NDK_ARM64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) @@ -1095,23 +1090,14 @@ endif # android-mips #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS $(error ANDROID_NDK_MIPS is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake .PHONY: android-mips android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile -ifndef ANDROID_NDK_MIPS - $(error ANDROID_NDK_MIPS is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) @@ -1119,23 +1105,14 @@ endif # android-mips64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS64 $(error ANDROID_NDK_MIPS64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake .PHONY: android-mips64 android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile -ifndef ANDROID_NDK_MIPS64 - $(error ANDROID_NDK_MIPS64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) @@ -1143,23 +1120,14 @@ endif # android-x86 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X86 $(error ANDROID_NDK_X86 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake .PHONY: android-x86 android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile -ifndef ANDROID_NDK_X86 - $(error ANDROID_NDK_X86 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) @@ -1167,23 +1135,14 @@ endif # android-x64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X64 $(error ANDROID_NDK_X64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) endif $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake .PHONY: android-x64 android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile -ifndef ANDROID_NDK_X64 - $(error ANDROID_NDK_X64 is not set) -endif -ifndef ANDROID_NDK_LLVM - $(error ANDROID_NDK_LLVM is not set) -endif $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index eebdd5d8a1d..5b6cd19f659 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -574,6 +574,19 @@ if (BUSES["ECONET"]~=null) then end +--------------------------------------------------- +-- +--@src/devices/bus/electron/exp.h,BUSES["ELECTRON"] = true +--------------------------------------------------- + +if (BUSES["ELECTRON"]~=null) then + files { + MAME_DIR .. "src/devices/bus/electron/exp.cpp", + MAME_DIR .. "src/devices/bus/electron/exp.h", + } +end + + --------------------------------------------------- -- --@src/devices/bus/ep64/exp.h,BUSES["EP64"] = true diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 054a2bbabee..b06797009ea 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -1449,7 +1449,7 @@ end -------------------------------------------------- -- PATINHO FEIO - Escola Politecnica - USP (Brazil) ---@src/devices/cpu/patinhofeio/patinho_feio.h,CPUS["PATINHOFEIO"] = true +--@src/devices/cpu/patinhofeio/patinhofeio_cpu.h,CPUS["PATINHOFEIO"] = true -------------------------------------------------- if (CPUS["PATINHOFEIO"]~=null) then diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua index 080aa707153..77f6f4344dd 100644 --- a/scripts/src/lib.lua +++ b/scripts/src/lib.lua @@ -145,6 +145,8 @@ project "formats" MAME_DIR .. "src/lib/formats/adam_cas.h", MAME_DIR .. "src/lib/formats/adam_dsk.cpp", MAME_DIR .. "src/lib/formats/adam_dsk.h", + MAME_DIR .. "src/lib/formats/afs_dsk.cpp", + MAME_DIR .. "src/lib/formats/afs_dsk.h", MAME_DIR .. "src/lib/formats/ami_dsk.cpp", MAME_DIR .. "src/lib/formats/ami_dsk.h", MAME_DIR .. "src/lib/formats/ap2_dsk.cpp", diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index a05e55ee4c6..5fb1d23c1bc 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -96,6 +96,8 @@ function osdmodulesbuild() MAME_DIR .. "src/osd/modules/output/none.cpp", MAME_DIR .. "src/osd/modules/output/console.cpp", MAME_DIR .. "src/osd/modules/output/network.cpp", + MAME_DIR .. "src/osd/modules/output/win32_output.cpp", + MAME_DIR .. "src/osd/modules/output/win32_output.h", MAME_DIR .. "src/osd/modules/ipc/tcp_connection.cpp", MAME_DIR .. "src/osd/modules/ipc/tcp_connection.h", MAME_DIR .. "src/osd/modules/ipc/tcp_server.cpp", diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua index b4be2dc7ce4..8b48b8f0771 100644 --- a/scripts/src/osd/windows.lua +++ b/scripts/src/osd/windows.lua @@ -259,3 +259,35 @@ project ("ocore_" .. _OPTIONS["osd"]) MAME_DIR .. "src/osd/modules/file/winsocket.cpp", MAME_DIR .. "src/osd/modules/lib/osdlib_win32.cpp", } + + + +-------------------------------------------------- +-- ledutil +-------------------------------------------------- + +if _OPTIONS["with-tools"] then + project("ledutil") + uuid ("061293ca-7290-44ac-b2b5-5913ae8dc9c0") + kind "ConsoleApp" + + flags { + "Symbols", -- always include minimum symbols for executables + } + + if _OPTIONS["SEPARATE_BIN"]~="1" then + targetdir(MAME_DIR) + end + + links { + "ocore_" .. _OPTIONS["osd"], + } + + includedirs { + MAME_DIR .. "src/osd", + } + + files { + MAME_DIR .. "src/osd/windows/ledutil.cpp", + } +end diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 116c3aea45a..db342166b97 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -618,6 +618,7 @@ BUSES["CRVISION"] = true BUSES["DMV"] = true BUSES["ECBBUS"] = true BUSES["ECONET"] = true +BUSES["ELECTRON"] = true BUSES["EP64"] = true BUSES["EPSON_SIO"] = true BUSES["GAMEBOY"] = true @@ -1067,7 +1068,7 @@ files { MAME_DIR .. "src/mame/machine/xbox.cpp", MAME_DIR .. "src/mame/includes/saturn.h", MAME_DIR .. "src/mame/drivers/saturn.cpp", - MAME_DIR .. "src/mame/machine/saturn.cpp", + MAME_DIR .. "src/mame/machine/saturn.cpp", } end -------------------------------------------------- @@ -1859,6 +1860,8 @@ files { MAME_DIR .. "src/mame/drivers/ipc.cpp", MAME_DIR .. "src/mame/drivers/ipds.cpp", MAME_DIR .. "src/mame/drivers/isbc.cpp", + MAME_DIR .. "src/mame/drivers/isbc8010.cpp", + MAME_DIR .. "src/mame/drivers/isbc8030.cpp", MAME_DIR .. "src/mame/machine/isbc_215g.cpp", MAME_DIR .. "src/mame/machine/isbc_215g.h", MAME_DIR .. "src/mame/drivers/rex6000.cpp", @@ -2611,6 +2614,7 @@ files { MAME_DIR .. "src/mame/drivers/sun1.cpp", MAME_DIR .. "src/mame/drivers/sun2.cpp", MAME_DIR .. "src/mame/drivers/sun3.cpp", + MAME_DIR .. "src/mame/drivers/sun3x.cpp", MAME_DIR .. "src/mame/drivers/sun4.cpp", } diff --git a/scripts/toolchain.lua b/scripts/toolchain.lua index d94b8abddec..8536845c266 100644 --- a/scripts/toolchain.lua +++ b/scripts/toolchain.lua @@ -95,6 +95,8 @@ function toolchain(_buildDir, _subDir) local androidPlatform = "android-14" if _OPTIONS["with-android"] then androidPlatform = "android-" .. _OPTIONS["with-android"] + elseif _OPTIONS["PLATFORM"]:find("64", -2) then + androidPlatform = "android-21" end local iosPlatform = "" @@ -115,73 +117,40 @@ function toolchain(_buildDir, _subDir) end if string.find(_OPTIONS["gcc"], "android") then - if not os.getenv("ANDROID_NDK_LLVM") then - print("Set ANDROID_NDK_LLVM envrionment variables.") + -- 64-bit android platform requires >= 21 + if _OPTIONS["PLATFORM"]:find("64", -2) and tonumber(androidPlatform:sub(9)) < 21 then + error("64-bit android requires platform 21 or higher") end + if not os.getenv("ANDROID_NDK_ROOT") then + print("Set ANDROID_NDK_ROOT environment variable.") + end + if not os.getenv("ANDROID_NDK_LLVM") then + print("Set ANDROID_NDK_LLVM envrionment variable.") + end + platform_ndk_env = "ANDROID_NDK_" .. _OPTIONS["PLATFORM"]:upper() + if not os.getenv(platform_ndk_env) then + print("Set " .. platform_ndk_env .. " environment variable.") + end + + local platformToolchainMap = { + ['arm'] = "arm-linux-androideabi", + ['arm64'] = "aarch64-linux-android", + ['mips64'] = "mips64el-linux-android", + ['mips'] = "mipsel-linux-android", + ['x86'] = "i686-linux-android", + ['x64'] = "x86_64-linux-android", + } + + toolchainPrefix = os.getenv(platform_ndk_env) .. "/bin/" .. platformToolchainMap[_OPTIONS["PLATFORM"]] .. "-" premake.gcc.cc = "$(ANDROID_NDK_LLVM)/bin/clang" premake.gcc.cxx = "$(ANDROID_NDK_LLVM)/bin/clang++" + premake.gcc.ar = toolchainPrefix .. "ar" premake.gcc.llvm = true + + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-" .. _OPTIONS["PLATFORM"]) end - if "android-arm" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_ARM") then - print("Set ANDROID_NDK_ARM envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar" - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm") - end - - if "android-arm64" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_ARM64") then - print("Set ANDROID_NDK_ARM64 envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar" - premake.gcc.llvm = true - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64") - end - - if "android-mips" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_MIPS") then - print("Set ANDROID_NDK_MIPS envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar" - premake.gcc.llvm = true - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips") - end - - if "android-mips64" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_MIPS64") then - print("Set ANDROID_NDK_MIPS64 envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar" - premake.gcc.llvm = true - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64") - end - - if "android-x86" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_X86") then - print("Set ANDROID_NDK_X86 envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar" - premake.gcc.llvm = true - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86") - end - - if "android-x64" == _OPTIONS["gcc"] then - if not os.getenv("ANDROID_NDK_X64") then - print("Set ANDROID_NDK_X64 envrionment variables.") - end - - premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar" - premake.gcc.llvm = true - location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64") - end if "asmjs" == _OPTIONS["gcc"] then if not os.getenv("EMSCRIPTEN") then @@ -804,6 +773,8 @@ function toolchain(_buildDir, _subDir) targetdir (_buildDir .. "openbsd" .. "/bin/x64/Debug") configuration { "android-*" } + targetdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/bin") + objdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/obj") includedirs { MAME_DIR .. "3rdparty/bgfx/3rdparty/khronos", "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libcxx/include", @@ -848,8 +819,6 @@ function toolchain(_buildDir, _subDir) configuration { "android-arm" } - targetdir (_buildDir .. "android-arm" .. "/bin") - objdir (_buildDir .. "android-arm" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib", @@ -876,9 +845,6 @@ function toolchain(_buildDir, _subDir) } configuration { "android-arm64" } - androidPlatform = "android-21" -- supported from API 21 - targetdir (_buildDir .. "android-arm64" .. "/bin") - objdir (_buildDir .. "android-arm64" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/arm64-v8a", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64/usr/lib64", @@ -899,8 +865,6 @@ function toolchain(_buildDir, _subDir) } configuration { "android-mips" } - targetdir (_buildDir .. "android-mips" .. "/bin") - objdir (_buildDir .. "android-mips" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips/usr/lib/", @@ -921,9 +885,6 @@ function toolchain(_buildDir, _subDir) } configuration { "android-mips64" } - androidPlatform = "android-21" -- supported from API 21 - targetdir (_buildDir .. "android-mips64" .. "/bin") - objdir (_buildDir .. "android-mips64" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips64", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips64/usr/lib64/", @@ -944,8 +905,6 @@ function toolchain(_buildDir, _subDir) } configuration { "android-x86" } - targetdir (_buildDir .. "android-x86" .. "/bin") - objdir (_buildDir .. "android-x86" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib", @@ -968,9 +927,6 @@ function toolchain(_buildDir, _subDir) } configuration { "android-x64" } - androidPlatform = "android-21" -- supported from API 21 - targetdir (_buildDir .. "android-x64" .. "/bin") - objdir (_buildDir .. "android-x64" .. "/obj") libdirs { "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86_64", "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64/usr/lib64", @@ -1092,22 +1048,10 @@ function strip() "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] and toolchainPrefix) .. "strip \"$(TARGET)\"", } - configuration { "android-arm", "Release" } + configuration { "android-*", "Release" } postbuildcommands { "$(SILENT) echo Stripping symbols.", - "$(SILENT) $(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-strip -s \"$(TARGET)\"" - } - - configuration { "android-mips", "Release" } - postbuildcommands { - "$(SILENT) echo Stripping symbols.", - "$(SILENT) $(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-strip -s \"$(TARGET)\"" - } - - configuration { "android-x86", "Release" } - postbuildcommands { - "$(SILENT) echo Stripping symbols.", - "$(SILENT) $(ANDROID_NDK_X86)/bin/i686-linux-android-strip -s \"$(TARGET)\"" + "$(SILENT) " .. toolchainPrefix .. "strip -s \"$(TARGET)\"" } configuration { "linux-* or rpi", "Release" } diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index ed60ccc2d28..6176268d6d7 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -53,7 +53,7 @@ #include "e01.h" #include "bus/scsi/scsihd.h" - +#include "softlist.h" //************************************************************************** @@ -166,6 +166,10 @@ WRITE_LINE_MEMBER( e01_device::clk_en_w ) m_clk_en = state; } +FLOPPY_FORMATS_MEMBER( floppy_formats_afs ) + FLOPPY_AFS_FORMAT +FLOPPY_FORMATS_END0 + static SLOT_INTERFACE_START( e01_floppies ) SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) // NEC FD1036 A SLOT_INTERFACE_END @@ -253,8 +257,9 @@ static MACHINE_CONFIG_FRAGMENT( e01 ) MCFG_WD2793_ADD(WD2793_TAG, XTAL_8MHz/4) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(e01_device, fdc_irq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(e01_device, fdc_drq_w)) - MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_formats_afs) + MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_formats_afs) + MCFG_SOFTWARE_LIST_ADD("flop_ls_e01", "e01_flop") MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer") MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1)) diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h index e83b9a0b6bd..02a432c936d 100644 --- a/src/devices/bus/econet/e01.h +++ b/src/devices/bus/econet/e01.h @@ -22,6 +22,7 @@ #include "machine/mc6854.h" #include "machine/ram.h" #include "machine/wd_fdc.h" +#include "formats/afs_dsk.h" class e01_device : public device_t, public device_econet_interface @@ -37,6 +38,8 @@ public: TYPE_E01S }; + DECLARE_FLOPPY_FORMATS(floppy_formats_afs); + DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); DECLARE_READ8_MEMBER( ram_select_r ); diff --git a/src/devices/bus/electron/exp.cpp b/src/devices/bus/electron/exp.cpp new file mode 100644 index 00000000000..b13f6534002 --- /dev/null +++ b/src/devices/bus/electron/exp.cpp @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Electron Expansion Port emulation + +**********************************************************************/ + +#include "exp.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type ELECTRON_EXPANSION_SLOT = &device_creator; + + +//************************************************************************** +// DEVICE ELECTRON_EXPANSION CARD INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_electron_expansion_interface - constructor +//------------------------------------------------- + +device_electron_expansion_interface::device_electron_expansion_interface(const machine_config &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) +{ + m_slot = dynamic_cast(device.owner()); +} + + +//------------------------------------------------- +// ~device_electron_expansion_card_interface - destructor +//------------------------------------------------- + +device_electron_expansion_interface::~device_electron_expansion_interface() +{ +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// electron_expansion_slot_device - constructor +//------------------------------------------------- + +electron_expansion_slot_device::electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, ELECTRON_EXPANSION_SLOT, "Expansion port", tag, owner, clock, "electron_expansion_slot", __FILE__), + device_slot_interface(mconfig, *this) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void electron_expansion_slot_device::device_start() +{ + m_card = dynamic_cast(get_card_device()); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void electron_expansion_slot_device::device_reset() +{ + if (get_card_device()) + { + get_card_device()->reset(); + } +} + + +//------------------------------------------------- +// SLOT_INTERFACE( electron_expansion_devices ) +//------------------------------------------------- + + +// slot devices +//#include "plus1.h" +//#include "plus3.h" +//#include "aplus3.h" +//#include "aplus5.h" +//#include "slogger.h" +//#include "fbjoy.h" +//#include "m2105.h" + + +SLOT_INTERFACE_START( electron_expansion_devices ) + //SLOT_INTERFACE("plus1", ELECTRON_PLUS1) + //SLOT_INTERFACE("plus3", ELECTRON_PLUS3) + //SLOT_INTERFACE("aplus3", ELECTRON_APLUS3) + //SLOT_INTERFACE("aplus5", ELECTRON_APLUS5) + //SLOT_INTERFACE("slogger", ELECTRON_SLOGGER) + //SLOT_INTERFACE("fbjoy", ELECTRON_FBJOY) + //SLOT_INTERFACE("m2105", ELECTRON_M2105) +SLOT_INTERFACE_END diff --git a/src/devices/bus/electron/exp.h b/src/devices/bus/electron/exp.h new file mode 100644 index 00000000000..cfcb7478a10 --- /dev/null +++ b/src/devices/bus/electron/exp.h @@ -0,0 +1,158 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Electron Expansion Port emulation + +********************************************************************** + + Pinout: + + 18V AC 2 1 18V AC + AC RETURN 4 3 AC RETURN + -5V 6 5 -5V + 0V 8 7 0V + +5V 10 9 +5V + 16MHz 12 11 SOUND O/P + PHI OUT 14 13 ÷13 IN + NMI 16 15 RST + R/W 18 17 IRQ + D6 20 19 D7 + D4 22 21 D5 + D2 24 23 D3 + D0 26 25 D1 + NC 28 27 RDY + SLOT 30 29 SLOT + A14 32 31 A15 + A12 34 33 A13 + A10 36 35 A11 + A0 38 37 A9 + A2 40 39 A1 + A4 42 41 A3 + A6 44 43 A5 + A8 46 45 A7 + 0V 48 47 0V + +5V 50 49 +5V + + Signal Definitions: + + 18V AC (pins 1,2) - These lines are connected directly to the output from the Electron mains power +AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as long as no power is + taken from +5V (pins 9,10,49,50). For safety reasons these lines must never + be used as an AC input to the Electron. + -5V (pins 5,6) - A -5V supply from the Electron. Up to 20mA (total) may safely be drawn + from this line by expansion modules. + 0V (pins 7,8,47,48) - Ground. Expansion modules with their own power supply must have the 0V + lines commoned with the Electron. ++5V (pins 9,10,49,50) - A +5V supply from the Electron. Up to 500mA (total) may safely be drawn + from this line by expansion modules as long as no power is taken from 18V + AC (pins 1,2,3,4). + SOUND O/P (pin 11) - Sound output. A 3V peak to peak source via a 1K series resistor from the + Electron ULA. + 16 MHz (pin 12) - 16 Megahertz from the Electron main oscillator. This output may be used + for clock generation within an expansion module. + /13 IN (pin 13) - 16 Megahertz divided by 13. This output may be used for baud rate + generation. If divided by 1024 it will give approximately 1200Hz. + PHI OUT (pin 14) - The 6502 input clock. The low time is nominally 250ns. The high time may + be 250ns (2MHz operation when reading ROMs) or 750ns or 1250ns + (stretched clock for a 1MHz access, the length depending on the phase of the + 2MHz clock) or up to 40us (if in modes 0-3) + RST (pin 15) - Reset (active low). This is an OUTPUT ONLY for the system reset line. It + may be used to initialise expansion modules on power up and when the + BREAK key is pressed. + NMI (pin 16) - Non-Maskable Interrupt (negative edge triggered). This is the system NMI + line which is open collector (wire-OR) and may be asserted by an expansion + module. The pull-up resistor on this line inside the ULA is 3k3. Care must + be taken to avoid masking other interrupts by holding the line low. Using + NMI on the Electron requires knowledge of operating system protocols. + IRQ (pin 17) - Interrupt Request (active low). This is the system IRQ line which is open + collector (wire-OR) and may be asserted by an expansion module. The pull- + up resistor on this line inside the ULA is 3k3. It is essential for the correct + operation of the machine that interrupts to not occur until the software is + capable of dealing with them. Interrupts on the Electron expansion bus should + therefore be disabled on power-up and reset. Significant use of interrupt + service time may affect other machine functions, eg the real time clock. + R/W (pin 18) - The system read/write line from the 6502. + D7-D0 (pins 19-26) - Bi-directional data bus. The direction of data is determined by R/W. + RDY (pin 27) - 6502 ready line (active low). May be asserted by an expansion module to + stop the processor when reading slow memory. This line works on read only + (R/W=1). + (pin 28) - No connection + (pins 29,30) - Polarising key connector. + A0-A15 (pins 31-46) - 6502 address bus. + +**********************************************************************/ + +#pragma once + +#ifndef __ELECTRON_EXPANSION_SLOT__ +#define __ELECTRON_EXPANSION_SLOT__ + +#include "emu.h" + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +#define ELECTRON_EXPANSION_SLOT_TAG "exp" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_ELECTRON_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) + +#define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD() \ + MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, 0, electron_expansion_devices, nullptr) + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> electron_expansion_slot_device + +class device_electron_expansion_interface; + +class electron_expansion_slot_device : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~electron_expansion_slot_device() {} + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + device_electron_expansion_interface *m_card; +}; + + +// ======================> device_electron_expansion_card_interface + +class device_electron_expansion_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_electron_expansion_interface(const machine_config &mconfig, device_t &device); + virtual ~device_electron_expansion_interface(); + +protected: + electron_expansion_slot_device *m_slot; +}; + + +// device type definition +extern const device_type ELECTRON_EXPANSION_SLOT; + +SLOT_INTERFACE_EXTERN( electron_expansion_devices ); + + +#endif diff --git a/src/devices/bus/gameboy/mbc.cpp b/src/devices/bus/gameboy/mbc.cpp index eab3f8ad5d1..3192bcda9ce 100644 --- a/src/devices/bus/gameboy/mbc.cpp +++ b/src/devices/bus/gameboy/mbc.cpp @@ -5,7 +5,7 @@ Game Boy carts with MBC (Memory Bank Controller) - TODO: add proper RTC and Rumble support + TODO: RTC runs too fast while in-game, in MBC-3 games... find the problem! ***********************************************************************************************************/ @@ -179,13 +179,15 @@ void gb_rom_mbc_device::shared_reset() void gb_rom_mbc3_device::device_start() { shared_start(); - save_item(NAME(m_rtc_map)); + save_item(NAME(m_rtc_regs)); + save_item(NAME(m_rtc_ready)); } void gb_rom_mbc3_device::device_reset() { shared_reset(); - memset(m_rtc_map, 0, sizeof(m_rtc_map)); + memset(m_rtc_regs, 0, sizeof(m_rtc_regs)); + m_rtc_ready = 0; } void gb_rom_mbc6_device::device_start() @@ -446,6 +448,18 @@ WRITE8_MEMBER(gb_rom_mbc2_device::write_ram) // MBC3 +void gb_rom_mbc3_device::update_rtc() +{ + system_time curtime; + machine().current_datetime(curtime); + + m_rtc_regs[0] = curtime.local_time.second; + m_rtc_regs[1] = curtime.local_time.minute; + m_rtc_regs[2] = curtime.local_time.hour; + m_rtc_regs[3] = curtime.local_time.day & 0xff; + m_rtc_regs[4] = (m_rtc_regs[4] & 0xf0) | (curtime.local_time.day >> 8); +} + READ8_MEMBER(gb_rom_mbc3_device::read_rom) { if (offset < 0x4000) @@ -472,16 +486,14 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank) { m_ram_bank = data; } - else + else if (has_timer) { - if (has_timer) + if (m_rtc_ready == 1 && data == 0) + m_rtc_ready = 0; + if (m_rtc_ready == 0 && data == 1) { - /* FIXME: RTC Latch goes here */ - m_rtc_map[0] = 50; /* Seconds */ - m_rtc_map[1] = 40; /* Minutes */ - m_rtc_map[2] = 15; /* Hours */ - m_rtc_map[3] = 25; /* Day counter lowest 8 bits */ - m_rtc_map[4] = 0x01; /* Day counter upper bit, timer off, no day overflow occurred (bit7) */ + m_rtc_ready = 1; + update_rtc(); } } } @@ -489,14 +501,16 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank) READ8_MEMBER(gb_rom_mbc3_device::read_ram) { if (m_ram_bank < 4 && m_ram_enable) - { // RAM + { + // RAM if (!m_ram.empty()) return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)]; } if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc) - { // RAM + { + // RTC registers if (has_timer) - return m_rtc_map[m_ram_bank - 8]; + return m_rtc_regs[m_ram_bank - 8]; } return 0xff; } @@ -504,16 +518,16 @@ READ8_MEMBER(gb_rom_mbc3_device::read_ram) WRITE8_MEMBER(gb_rom_mbc3_device::write_ram) { if (m_ram_bank < 4 && m_ram_enable) - { // RAM + { + // RAM if (!m_ram.empty()) m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data; } - if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc) - { // RAM + if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc && m_ram_enable) + { + // RTC registers are writeable too if (has_timer) - { - // what to do here? - } + m_rtc_regs[m_ram_bank - 8] = data; } } @@ -547,7 +561,10 @@ WRITE8_MEMBER(gb_rom_mbc5_device::write_bank) { data &= 0x0f; if (has_rumble) + { + machine().output().set_value("Rumble", BIT(data, 3)); data &= 0x7; + } m_ram_bank = data; } } @@ -1071,8 +1088,6 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_bank) else if (offset < 0x5000) { data &= 0x0f; - if (has_rumble) - data &= 0x7; m_ram_bank = data; } else if (offset < 0x6000) @@ -1167,8 +1182,6 @@ WRITE8_MEMBER(gb_rom_digimon_device::write_bank) { // printf("written $05-$06 %X at %X\n", data, offset); data &= 0x0f; - if (has_rumble) - data &= 0x7; m_ram_bank = data; } // else diff --git a/src/devices/bus/gameboy/mbc.h b/src/devices/bus/gameboy/mbc.h index aae6801ce37..1dcc43875bd 100644 --- a/src/devices/bus/gameboy/mbc.h +++ b/src/devices/bus/gameboy/mbc.h @@ -93,7 +93,11 @@ public: virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; - UINT8 m_rtc_map[5]; + +private: + void update_rtc(); + UINT8 m_rtc_regs[5]; + int m_rtc_ready; }; // ======================> gb_rom_mbc5_device diff --git a/src/devices/bus/gba/gba_slot.cpp b/src/devices/bus/gba/gba_slot.cpp index 5ed54717275..01c0194f67e 100644 --- a/src/devices/bus/gba/gba_slot.cpp +++ b/src/devices/bus/gba/gba_slot.cpp @@ -134,12 +134,18 @@ static const gba_slot slot_list[] = { { GBA_STD, "gba_rom" }, { GBA_SRAM, "gba_sram" }, + { GBA_DRILLDOZ, "gba_drilldoz" }, + { GBA_WARIOTWS, "gba_wariotws" }, { GBA_EEPROM, "gba_eeprom" }, { GBA_EEPROM4, "gba_eeprom_4k" }, + { GBA_YOSHIUG, "gba_yoshiug" }, { GBA_EEPROM64, "gba_eeprom_64k" }, + { GBA_BOKTAI, "gba_boktai" }, { GBA_FLASH, "gba_flash" }, + { GBA_FLASH_RTC, "gba_flash_rtc" }, { GBA_FLASH512, "gba_flash_512" }, { GBA_FLASH1M, "gba_flash_1m" }, + { GBA_FLASH1M_RTC, "gba_flash_1m_rtc" }, { GBA_3DMATRIX, "gba_3dmatrix" }, }; @@ -204,7 +210,7 @@ bool gba_cart_slot_device::call_load() osd_printf_info("GBA: Detected (XML) %s\n", pcb_name ? pcb_name : "NONE"); } - if (m_type == GBA_SRAM) + if (m_type == GBA_SRAM || m_type == GBA_DRILLDOZ || m_type == GBA_WARIOTWS) m_cart->nvram_alloc(0x10000); // mirror the ROM @@ -300,6 +306,8 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) { UINT32 chip = 0; int type = GBA_STD; + bool has_rtc = false; + bool has_rumble = false; // first detect nvram type based on strings inside the file for (int i = 0; i < len; i++) @@ -359,19 +367,30 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) for (auto & elem : gba_chip_fix_eeprom_list) { - const gba_chip_fix_eeprom_item *item = &elem; + const gba_chip_fix_item *item = &elem; if (!strcmp(game_code, item->game_code)) { chip = (chip & ~GBA_CHIP_EEPROM) | GBA_CHIP_EEPROM_64K; break; } } + + for (auto & elem : gba_chip_fix_rumble_list) + { + const gba_chip_fix_item *item = &elem; + if (!strcmp(game_code, item->game_code)) + { + has_rumble = true; + break; + } + } } if (chip & GBA_CHIP_RTC) { - osd_printf_info("game has RTC - not emulated at the moment\n"); + //osd_printf_info("game has RTC - not emulated at the moment\n"); chip &= ~GBA_CHIP_RTC; + has_rtc = true; } osd_printf_info("GBA: Emulate %s\n", gba_chip_string(chip).c_str()); @@ -383,21 +402,29 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) break; case GBA_CHIP_EEPROM: type = GBA_EEPROM; + if (has_rumble) + type = GBA_YOSHIUG; break; case GBA_CHIP_EEPROM_4K: type = GBA_EEPROM4; break; case GBA_CHIP_EEPROM_64K: type = GBA_EEPROM64; + if (has_rtc) + type = GBA_BOKTAI; break; case GBA_CHIP_FLASH: type = GBA_FLASH; + if (has_rtc) + type = GBA_FLASH_RTC; break; case GBA_CHIP_FLASH_512: type = GBA_FLASH512; break; case GBA_CHIP_FLASH_1M: type = GBA_FLASH1M; + if (has_rtc) + type = GBA_FLASH1M_RTC; break; default: break; @@ -455,6 +482,14 @@ READ32_MEMBER(gba_cart_slot_device::read_ram) return 0xffffffff; } +READ32_MEMBER(gba_cart_slot_device::read_gpio) +{ + if (m_cart) + return m_cart->read_gpio(space, offset, mem_mask); + else + return 0xffffffff; +} + /*------------------------------------------------- write @@ -466,6 +501,12 @@ WRITE32_MEMBER(gba_cart_slot_device::write_ram) m_cart->write_ram(space, offset, data, mem_mask); } +WRITE32_MEMBER(gba_cart_slot_device::write_gpio) +{ + if (m_cart) + m_cart->write_gpio(space, offset, data, mem_mask); +} + /*------------------------------------------------- Internal header logging diff --git a/src/devices/bus/gba/gba_slot.h b/src/devices/bus/gba/gba_slot.h index a3908730180..03b9ca4f653 100644 --- a/src/devices/bus/gba/gba_slot.h +++ b/src/devices/bus/gba/gba_slot.h @@ -13,12 +13,18 @@ enum { GBA_STD = 0, GBA_SRAM, + GBA_DRILLDOZ, + GBA_WARIOTWS, GBA_EEPROM, GBA_EEPROM4, + GBA_YOSHIUG, GBA_EEPROM64, + GBA_BOKTAI, GBA_FLASH, + GBA_FLASH_RTC, GBA_FLASH512, GBA_FLASH1M, + GBA_FLASH1M_RTC, GBA_3DMATRIX }; @@ -35,7 +41,11 @@ public: // reading and writing virtual DECLARE_READ32_MEMBER(read_rom) { return 0xffffffff; } virtual DECLARE_READ32_MEMBER(read_ram) { return 0xffffffff; } + virtual DECLARE_READ32_MEMBER(read_gpio) { return 0; } + virtual DECLARE_READ32_MEMBER(read_tilt) { return 0xffffffff; } virtual DECLARE_WRITE32_MEMBER(write_ram) {}; + virtual DECLARE_WRITE32_MEMBER(write_gpio) {}; + virtual DECLARE_WRITE32_MEMBER(write_tilt) {}; virtual DECLARE_WRITE32_MEMBER(write_mapper) {}; void rom_alloc(UINT32 size, const char *tag); @@ -103,8 +113,12 @@ public: // reading and writing virtual DECLARE_READ32_MEMBER(read_rom); virtual DECLARE_READ32_MEMBER(read_ram); + virtual DECLARE_READ32_MEMBER(read_gpio); + virtual DECLARE_READ32_MEMBER(read_tilt) { if (m_cart) return m_cart->read_tilt(space, offset, mem_mask); else return 0xffffffff; } virtual DECLARE_WRITE32_MEMBER(write_ram); - virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) return m_cart->write_mapper(space, offset, data, mem_mask); }; + virtual DECLARE_WRITE32_MEMBER(write_gpio); + virtual DECLARE_WRITE32_MEMBER(write_tilt) { if (m_cart) m_cart->write_tilt(space, offset, data, mem_mask); } + virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) m_cart->write_mapper(space, offset, data, mem_mask); } protected: @@ -193,12 +207,12 @@ static const gba_chip_fix_conflict_item gba_chip_fix_conflict_list[] = { "BYUJ", GBA_CHIP_EEPROM_64K }, // 2322 - Yggdra Union (JPN) }; -struct gba_chip_fix_eeprom_item +struct gba_chip_fix_item { char game_code[5]; }; -static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] = +static const gba_chip_fix_item gba_chip_fix_eeprom_list[] = { // gba scan no. 7 { "AKTJ" }, // 0145 - Hello Kitty Collection - Miracle Fashion Maker (JPN) @@ -588,4 +602,13 @@ static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] = { "A3IJ" }, // bokura no taiyou - taiyou action rpg - kabunushi go-yuutai ban (japan) (demo) }; +static const gba_chip_fix_item gba_chip_fix_rumble_list[] = +{ + { "KYGP" }, // Yoshi's Universal Gravitation (EUR) + { "KYGE" }, // Yoshi - Topsy-Turvy (USA) + { "KYGJ" }, // Yoshi no Banyuuinryoku (JPN) + { "KHPJ" } // Koro Koro Puzzle - Happy Panechu! (JPN) +}; + + #endif diff --git a/src/devices/bus/gba/rom.cpp b/src/devices/bus/gba/rom.cpp index 4aadc54b884..5fc4798f1d7 100644 --- a/src/devices/bus/gba/rom.cpp +++ b/src/devices/bus/gba/rom.cpp @@ -23,10 +23,16 @@ const device_type GBA_ROM_STD = &device_creator; const device_type GBA_ROM_SRAM = &device_creator; +const device_type GBA_ROM_DRILLDOZ = &device_creator; +const device_type GBA_ROM_WARIOTWS = &device_creator; const device_type GBA_ROM_EEPROM = &device_creator; +const device_type GBA_ROM_YOSHIUG = &device_creator; const device_type GBA_ROM_EEPROM64 = &device_creator; +const device_type GBA_ROM_BOKTAI = &device_creator; const device_type GBA_ROM_FLASH = &device_creator; +const device_type GBA_ROM_FLASH_RTC = &device_creator; const device_type GBA_ROM_FLASH1M = &device_creator; +const device_type GBA_ROM_FLASH1M_RTC = &device_creator; const device_type GBA_ROM_3DMATRIX = &device_creator; @@ -42,33 +48,98 @@ gba_rom_device::gba_rom_device(const machine_config &mconfig, const char *tag, d { } +gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_SRAM, "GBA Carts + SRAM", tag, owner, clock, "gba_sram", __FILE__) { } +gba_rom_drilldoz_device::gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_sram_device(mconfig, GBA_ROM_DRILLDOZ, "GBA Carts + SRAM + Rumble", tag, owner, clock, "gba_drilldoz", __FILE__) +{ +} + +gba_rom_wariotws_device::gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_sram_device(mconfig, GBA_ROM_WARIOTWS, "GBA Carts + SRAM + Rumble + Gyroscope", tag, owner, clock, "gba_wariotws", __FILE__), + m_gyro_z(*this, "GYROZ") +{ +} + +gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_EEPROM, "GBA Carts + EEPROM", tag, owner, clock, "gba_eeprom", __FILE__) { } +gba_rom_yoshiug_device::gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_eeprom_device(mconfig, GBA_ROM_YOSHIUG, "GBA Carts + EEPROM + Tilt Sensor", tag, owner, clock, "gba_yoshiug", __FILE__), + m_tilt_x(*this, "TILTX"), + m_tilt_y(*this, "TILTY") +{ +} + +gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_EEPROM64, "GBA Carts + EEPROM 64K", tag, owner, clock, "gba_eeprom64", __FILE__) { } +gba_rom_boktai_device::gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_eeprom64_device(mconfig, GBA_ROM_BOKTAI, "GBA Carts + EEPROM 64K + RTC", tag, owner, clock, "gba_boktai", __FILE__), + m_sensor(*this, "LIGHTSENSE") +{ +} + +gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source), + m_flash_mask(0), + m_flash(*this, "flash") +{ +} + gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__), m_flash_mask(0), + : gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__), + m_flash_mask(0), + m_flash(*this, "flash") +{ +} + +gba_rom_flash_rtc_device::gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_flash_device(mconfig, GBA_ROM_FLASH_RTC, "GBA Carts + Panasonic Flash + RTC", tag, owner, clock, "gba_flash_rtc", __FILE__) +{ +} + +gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source), + m_flash_mask(0), m_flash(*this, "flash") { } gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__), m_flash_mask(0), + : gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__), + m_flash_mask(0), m_flash(*this, "flash") { } +gba_rom_flash1m_rtc_device::gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_flash1m_device(mconfig, GBA_ROM_FLASH1M_RTC, "GBA Carts + Sanyo Flash + RTC", tag, owner, clock, "gba_flash1m_rtc", __FILE__) +{ +} + gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_3DMATRIX, "GBA Carts + 3D Matrix Memory Mapper", tag, owner, clock, "gba_3dmatrix", __FILE__) { @@ -81,10 +152,31 @@ gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig, void gba_rom_device::device_start() { + save_item(NAME(m_gpio_regs)); + save_item(NAME(m_gpio_write_only)); + save_item(NAME(m_gpio_dirs)); } void gba_rom_device::device_reset() { + m_gpio_regs[0] = 0; + m_gpio_regs[1] = 0; + m_gpio_regs[2] = 0; + m_gpio_regs[3] = 0; + m_gpio_write_only = 0; + m_gpio_dirs = 0; +} + +void gba_rom_wariotws_device::device_start() +{ + save_item(NAME(m_last_val)); + save_item(NAME(m_counter)); +} + +void gba_rom_wariotws_device::device_reset() +{ + m_last_val = 0; + m_counter = 0; } void gba_rom_flash_device::device_reset() @@ -105,6 +197,22 @@ void gba_rom_eeprom_device::device_start() m_eeprom = std::make_unique(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 6); } +void gba_rom_yoshiug_device::device_start() +{ + gba_rom_eeprom_device::device_start(); + save_item(NAME(m_tilt_ready)); + save_item(NAME(m_xpos)); + save_item(NAME(m_ypos)); +} + +void gba_rom_yoshiug_device::device_reset() +{ + m_tilt_ready = 0; + m_xpos = 0; + m_ypos = 0; +} + + void gba_rom_eeprom64_device::device_start() { // for the moment we use a custom eeprom implementation, so we alloc/save it as nvram @@ -112,6 +220,31 @@ void gba_rom_eeprom64_device::device_start() m_eeprom = std::make_unique(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 14); } +void gba_rom_boktai_device::device_start() +{ + gba_rom_eeprom64_device::device_start(); + m_rtc = std::make_unique(machine()); + + save_item(NAME(m_last_val)); + save_item(NAME(m_counter)); +} + +void gba_rom_boktai_device::device_reset() +{ + m_last_val = 0; + m_counter = 0; +} + +void gba_rom_flash_rtc_device::device_start() +{ + m_rtc = std::make_unique(machine()); +} + +void gba_rom_flash1m_rtc_device::device_start() +{ + m_rtc = std::make_unique(machine()); +} + void gba_rom_3dmatrix_device::device_start() { save_item(NAME(m_src)); @@ -131,6 +264,75 @@ void gba_rom_3dmatrix_device::device_reset() mapper specific handlers -------------------------------------------------*/ +/*------------------------------------------------- + This is a preliminary implementation of the + General Purpose I/O Port embedded in the GBA PCBs + as described at : http://problemkaputt.de/gbatek.htm#gbacartioportgpio + + Functions read_gpio/write_gpio only give the + I/O interface while the actual on-cart devices + are read and written through gpio_dev_read/gpio_dev_write + which are virtual methods defined in the specific + cart types. + -------------------------------------------------*/ + +READ32_MEMBER(gba_rom_device::read_gpio) +{ + logerror("read GPIO offs %X\n", offset); + if (!m_gpio_write_only) + { + switch (offset) + { + case 0: + default: + if (ACCESSING_BITS_0_15) + { + UINT16 ret = gpio_dev_read(m_gpio_dirs); + return ret; + } + if (ACCESSING_BITS_16_31) + return m_gpio_regs[1] << 16; + case 1: + if (ACCESSING_BITS_0_15) + return m_gpio_regs[2]; + if (ACCESSING_BITS_16_31) + return m_gpio_regs[3] << 16; + } + return 0; + } + else + return m_rom[offset + 0xc4/4]; +} + +WRITE32_MEMBER(gba_rom_device::write_gpio) +{ + logerror("write GPIO offs %X data %X\n", offset, data); + switch (offset) + { + case 0: + default: + if (ACCESSING_BITS_0_15) + { + gpio_dev_write(data & 0xffff, m_gpio_dirs); + } + if (ACCESSING_BITS_16_31) + { + m_gpio_dirs = (data >> 16) & 0x0f; + m_gpio_regs[1] = (data >> 16) & 0xffff; + } + break; + case 1: + if (ACCESSING_BITS_0_15) + { + m_gpio_write_only = BIT(data, 0) ? 0 : 1; + m_gpio_regs[2] = data & 0xffff; + } + if (ACCESSING_BITS_16_31) + m_gpio_regs[3] = (data >> 16) & 0xffff; + break; + } +} + /*------------------------------------------------- Carts with SRAM @@ -151,6 +353,60 @@ WRITE32_MEMBER(gba_rom_sram_device::write_ram) } +// SRAM cart variant with additional Rumble motor (used by Drill Dozer) + +void gba_rom_drilldoz_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + if ((gpio_dirs & 0x08)) + { + // send impulse to Rumble sensor + machine().output().set_value("Rumble", BIT(data, 3)); + } +} + + +// SRAM cart variant with additional Rumble motor + Gyroscope (used by Warioware Twist) + +static INPUT_PORTS_START( wariotws_gyroscope ) + PORT_START("GYROZ") + PORT_BIT( 0xfff, 0x6c0, IPT_AD_STICK_Z ) PORT_MINMAX(0x354,0x9e3) PORT_SENSITIVITY(0x10) PORT_KEYDELTA(0x50) +INPUT_PORTS_END + +ioport_constructor gba_rom_wariotws_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( wariotws_gyroscope ); +} + +UINT16 gba_rom_wariotws_device::gpio_dev_read(int gpio_dirs) +{ + int gyro = 0; + if (gpio_dirs == 0x0b) + gyro = BIT(m_gyro_z->read(), m_counter); + return (gyro << 2); +} + +void gba_rom_wariotws_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + if ((gpio_dirs & 0x08)) + { + // send impulse to Rumble sensor + machine().output().set_value("Rumble", BIT(data, 3)); + } + + if (gpio_dirs == 0x0b) + { + if ((data & 2) && (m_counter > 0)) + m_counter--; + + if (data & 1) + m_counter = 15; + + m_last_val = data & 0x0b; + } +} + + + /*------------------------------------------------- Carts with Flash RAM -------------------------------------------------*/ @@ -257,164 +513,34 @@ WRITE32_MEMBER(gba_rom_flash1m_device::write_ram) } } +// cart variants with additional S3511 RTC + +UINT16 gba_rom_flash_rtc_device::gpio_dev_read(int gpio_dirs) +{ + return 5 | (m_rtc->read_line() << 1); +} + +void gba_rom_flash_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); +} + + +UINT16 gba_rom_flash1m_rtc_device::gpio_dev_read(int gpio_dirs) +{ + return 5 | (m_rtc->read_line() << 1); +} + +void gba_rom_flash1m_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); +} + /*------------------------------------------------- Carts with EEPROM - - TODO: can this sketchy EEPROM device be merged - with the core implementation? -------------------------------------------------*/ -// GBA EEPROM Device - -gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) : - m_state(EEP_IDLE), - m_machine(machine) -{ - m_data = eeprom; - m_data_size = size; - m_addr_bits = addr_bits; - - m_machine.save().save_item(m_state, "GBA_EEPROM/m_state"); - m_machine.save().save_item(m_command, "GBA_EEPROM/m_command"); - m_machine.save().save_item(m_count, "GBA_EEPROM/m_count"); - m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr"); - m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits"); - m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data"); -} - -UINT32 gba_eeprom_device::read() -{ - UINT32 out; - - switch (m_state) - { - case EEP_IDLE: -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1); - return 0x00010001; // "ready" - - case EEP_READFIRST: - m_count--; - - if (!m_count) - { - m_count = 64; - m_bits = 0; - m_eep_data = 0; - m_state = EEP_READ; - } - break; - case EEP_READ: - if ((m_bits == 0) && (m_count)) - { - if (m_addr >= m_data_size) - { - fatalerror("eeprom: invalid address (%x)\n", m_addr); - } - m_eep_data = m_data[m_addr]; - //printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0); - m_addr++; - m_bits = 8; - } - - out = (m_eep_data & 0x80) ? 1 : 0; - out |= (out<<16); - m_eep_data <<= 1; - - m_bits--; - m_count--; - - if (!m_count) - { - m_state = EEP_IDLE; - } - -// printf("out = %08x\n", out); -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out); - return out; - } -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0); - return 0; -} - -void gba_eeprom_device::write(UINT32 data) -{ -// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc()); - switch (m_state) - { - case EEP_IDLE: - if (data == 1) - m_state++; - break; - - case EEP_COMMAND: - if (data == 1) - m_command = EEP_READFIRST; - else - m_command = EEP_WRITE; - m_state = EEP_ADDR; - m_count = m_addr_bits; - m_addr = 0; - break; - - case EEP_ADDR: - m_addr <<= 1; - m_addr |= (data & 1); - m_count--; - if (!m_count) - { - m_addr *= 8; // each address points to 8 bytes - if (m_command == EEP_READFIRST) - m_state = EEP_AFTERADDR; - else - { - m_count = 64; - m_bits = 8; - m_state = EEP_WRITE; - m_eep_data = 0; - } - } - break; - - case EEP_AFTERADDR: - m_state = m_command; - m_count = 64; - m_bits = 0; - m_eep_data = 0; - if (m_state == EEP_READFIRST) - m_count = 4; - break; - - case EEP_WRITE: - m_eep_data <<= 1; - m_eep_data |= (data & 1); - m_bits--; - m_count--; - - if (m_bits == 0) - { - osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr); - if (m_addr >= m_data_size) - fatalerror("eeprom: invalid address (%x)\n", m_addr); - - m_data[m_addr] = m_eep_data; - m_addr++; - m_eep_data = 0; - m_bits = 8; - } - - if (!m_count) - m_state = EEP_AFTERWRITE; - break; - - case EEP_AFTERWRITE: - m_state = EEP_IDLE; - break; - } -} - - - READ32_MEMBER(gba_rom_eeprom_device::read_ram) { // Larger games have smaller access to EERPOM content @@ -458,6 +584,137 @@ WRITE32_MEMBER(gba_rom_eeprom64_device::write_ram) } +/*------------------------------------------------- + Carts with EEPROM + Tilt Sensor + + Note about the calibration: this can seem a bit + tricky at first, because the emulated screen + does not turn as the GBA would... + In order to properly calibrate the sensor, just + keep pressed right for a few seconds when requested + to calibrate right inclination (first calibration + screen in Yoshi Universal Gravitation) so to get the + full right range; then keep pressed for left for a + few seconds when requested to calibrate left + inclination (second calibration screen in Yoshi + Universal Gravitation) so to get the full left range + + -------------------------------------------------*/ + +static INPUT_PORTS_START( yoshiug_tilt ) + PORT_START("TILTX") + PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_X ) PORT_MINMAX(0x2af,0x477) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50) + PORT_START("TILTY") + PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_Y ) PORT_MINMAX(0x2c3,0x480) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50) +INPUT_PORTS_END + +ioport_constructor gba_rom_yoshiug_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( yoshiug_tilt ); +} + + +READ32_MEMBER(gba_rom_yoshiug_device::read_tilt) +{ + switch (offset) + { + case 0x200/4: + if (ACCESSING_BITS_0_15) + return (m_xpos & 0xff); + break; + case 0x300/4: + if (ACCESSING_BITS_0_15) + return ((m_xpos >> 8) & 0x0f) | 0x80; + break; + case 0x400/4: + if (ACCESSING_BITS_0_15) + return (m_ypos & 0xff); + break; + case 0x500/4: + if (ACCESSING_BITS_0_15) + return ((m_ypos >> 8) & 0x0f); + break; + default: + break; + } + return 0xffffffff; +} + +WRITE32_MEMBER(gba_rom_yoshiug_device::write_tilt) +{ + switch (offset) + { + case 0x000/4: + if (data == 0x55) m_tilt_ready = 1; + break; + case 0x100/4: + if (data == 0xaa) + { + m_xpos = m_tilt_x->read(); + m_ypos = m_tilt_y->read(); + m_tilt_ready = 0; + } + break; + default: + break; + } +} + + +/*------------------------------------------------- + Carts with EEPROM + S3511 RTC + Light Sensor + -------------------------------------------------*/ + +static INPUT_PORTS_START( boktai_sensor ) + PORT_START("LIGHTSENSE") + PORT_CONFNAME( 0xff, 0xe8, "Light Sensor" ) + PORT_CONFSETTING( 0xe8, "Complete Darkness" ) + PORT_CONFSETTING( 0xe4, "10%" ) + PORT_CONFSETTING( 0xdc, "20%" ) + PORT_CONFSETTING( 0xd4, "30%" ) + PORT_CONFSETTING( 0xc8, "40%" ) + PORT_CONFSETTING( 0xb8, "50%" ) + PORT_CONFSETTING( 0xa8, "60%" ) + PORT_CONFSETTING( 0x98, "70%" ) + PORT_CONFSETTING( 0x88, "80%" ) + PORT_CONFSETTING( 0x68, "90%" ) + PORT_CONFSETTING( 0x48, "Very Bright" ) +INPUT_PORTS_END + + +ioport_constructor gba_rom_boktai_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( boktai_sensor ); +} + +UINT16 gba_rom_boktai_device::gpio_dev_read(int gpio_dirs) +{ + int light = (gpio_dirs == 7 && m_counter >= m_sensor->read()) ? 1 : 0; + return 5 | (m_rtc->read_line() << 1) | (light << 3); +} + +void gba_rom_boktai_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); + if (gpio_dirs == 7) + { + if (data & 2) + m_counter = 0; + + if ((data & 1) && !(m_last_val & 1)) + { + m_counter++; + if (m_counter == 0x100) + m_counter = 0; + } + + m_last_val = data & 7; + } +} + + + + /*------------------------------------------------- Carts with 3D Matrix Memory controller @@ -511,3 +768,328 @@ WRITE32_MEMBER(gba_rom_3dmatrix_device::write_mapper) break; } } + + + +// Additional devices, to be moved to separate source files at a later stage + +/*------------------------------------------------- + Seiko S-3511 RTC implementation + + TODO: transform this into a separate device, using + also dirtc.cpp! + -------------------------------------------------*/ + +gba_s3511_device::gba_s3511_device(running_machine &machine) : + m_phase(S3511_RTC_IDLE), + m_machine(machine) +{ + m_last_val = 0; + m_bits = 0; + m_command = 0; + m_data_len = 1; + m_data[0] = 0; + + m_machine.save().save_item(m_phase, "GBA_RTC/m_phase"); + m_machine.save().save_item(m_data, "GBA_RTC/m_data"); + m_machine.save().save_item(m_last_val, "GBA_RTC/m_last_val"); + m_machine.save().save_item(m_bits, "GBA_RTC/m_bits"); + m_machine.save().save_item(m_command, "GBA_RTC/m_command"); + m_machine.save().save_item(m_data_len, "GBA_RTC/m_data_len"); +} + + +UINT8 gba_s3511_device::convert_to_bcd(int val) +{ + return (((val % 100) / 10) << 4) | (val % 10); +} + +void gba_s3511_device::update_time(int len) +{ + system_time curtime; + m_machine.current_datetime(curtime); + + if (len == 7) + { + m_data[0] = convert_to_bcd(curtime.local_time.year); + m_data[1] = convert_to_bcd(curtime.local_time.month + 1); + m_data[2] = convert_to_bcd(curtime.local_time.mday); + m_data[3] = convert_to_bcd(curtime.local_time.weekday); + m_data[4] = convert_to_bcd(curtime.local_time.hour); + m_data[5] = convert_to_bcd(curtime.local_time.minute); + m_data[6] = convert_to_bcd(curtime.local_time.second); + } + else if (len == 3) + { + m_data[0] = convert_to_bcd(curtime.local_time.hour); + m_data[1] = convert_to_bcd(curtime.local_time.minute); + m_data[2] = convert_to_bcd(curtime.local_time.second); + } +} + + +int gba_s3511_device::read_line() +{ + int pin = 0; + switch (m_phase) + { + case S3511_RTC_DATAOUT: + //printf("mmm %d - %X - %d - %d\n", m_bits, m_data[m_bits >> 3], m_bits >> 3, BIT(m_data[m_bits >> 3], (m_bits & 7))); + pin = BIT(m_data[m_bits >> 3], (m_bits & 7)); + m_bits++; + if (m_bits == 8 * m_data_len) + { + //for (int i = 0; i < m_data_len; i++) + // printf("RTC DATA OUT COMPLETE %X (reg %d) \n", m_data[i], i); + m_bits = 0; + m_phase = S3511_RTC_IDLE; + } + break; + } + return pin; +} + + +void gba_s3511_device::write(UINT16 data, int gpio_dirs) +{ +// printf("gpio_dev_write data %X\n", data); + if (m_phase == S3511_RTC_IDLE && (m_last_val & 5) == 1 && (data & 5) == 5) + { + m_phase = S3511_RTC_COMMAND; + m_bits = 0; + m_command = 0; + } + else + { +// if (m_phase == 3) +// printf("RTC command OK\n"); + if (!(m_last_val & 1) && (data & 1)) + { + // bit transfer + m_last_val = data & 0xff; + switch (m_phase) + { + case S3511_RTC_DATAIN: + if (!BIT(gpio_dirs, 1)) + { + m_data[m_bits >> 3] = (m_data[m_bits >> 3] >> 1) | ((data << 6) & 0x80); + m_bits++; + if (m_bits == 8 * m_data_len) + { + //for (int i = 0; i < m_data_len; i++) + // printf("RTC DATA IN COMPLETE %X (reg %d) \n", m_data[i], i); + m_bits = 0; + m_phase = S3511_RTC_IDLE; + } + } + break; + case S3511_RTC_DATAOUT: + break; + case S3511_RTC_COMMAND: + m_command |= (BIT(data, 1) << (7 - m_bits)); + m_bits++; + if (m_bits == 8) + { + m_bits = 0; + //printf("RTC command %X ENTERED!!!\n", m_command); + switch (m_command) + { + case 0x60: + // reset? + m_phase = S3511_RTC_IDLE; + m_bits = 0; + break; + case 0x62: + m_phase = S3511_RTC_DATAIN; + m_data_len = 1; + break; + case 0x63: + m_data_len = 1; + m_data[0] = 0x40; + m_phase = S3511_RTC_DATAOUT; + break; + case 0x64: + break; + case 0x65: + m_data_len = 7; + update_time(m_data_len); + m_phase = S3511_RTC_DATAOUT; + break; + case 0x67: + m_data_len = 3; + update_time(m_data_len); + m_phase = S3511_RTC_DATAOUT; + break; + default: + printf("Unknown RTC command %02X\n", m_command); + m_phase = S3511_RTC_IDLE; + break; + } + } + break; + case S3511_RTC_IDLE: + default: + break; + } + } + else + m_last_val = data & 0xff; + } +} + + +/*------------------------------------------------- + GBA EEPROM Device + + TODO: can this sketchy EEPROM device be merged + with the core implementation? + -------------------------------------------------*/ + +// + +gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) : + m_state(EEP_IDLE), + m_machine(machine) +{ + m_data = eeprom; + m_data_size = size; + m_addr_bits = addr_bits; + + m_machine.save().save_item(m_state, "GBA_EEPROM/m_state"); + m_machine.save().save_item(m_command, "GBA_EEPROM/m_command"); + m_machine.save().save_item(m_count, "GBA_EEPROM/m_count"); + m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr"); + m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits"); + m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data"); +} + +UINT32 gba_eeprom_device::read() +{ + UINT32 out; + + switch (m_state) + { + case EEP_IDLE: +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1); + return 0x00010001; // "ready" + + case EEP_READFIRST: + m_count--; + + if (!m_count) + { + m_count = 64; + m_bits = 0; + m_eep_data = 0; + m_state = EEP_READ; + } + break; + case EEP_READ: + if ((m_bits == 0) && (m_count)) + { + if (m_addr >= m_data_size) + { + fatalerror("eeprom: invalid address (%x)\n", m_addr); + } + m_eep_data = m_data[m_addr]; + //printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0); + m_addr++; + m_bits = 8; + } + + out = (m_eep_data & 0x80) ? 1 : 0; + out |= (out<<16); + m_eep_data <<= 1; + + m_bits--; + m_count--; + + if (!m_count) + { + m_state = EEP_IDLE; + } + +// printf("out = %08x\n", out); +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out); + return out; + } +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0); + return 0; +} + +void gba_eeprom_device::write(UINT32 data) +{ +// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc()); + switch (m_state) + { + case EEP_IDLE: + if (data == 1) + m_state++; + break; + + case EEP_COMMAND: + if (data == 1) + m_command = EEP_READFIRST; + else + m_command = EEP_WRITE; + m_state = EEP_ADDR; + m_count = m_addr_bits; + m_addr = 0; + break; + + case EEP_ADDR: + m_addr <<= 1; + m_addr |= (data & 1); + m_count--; + if (!m_count) + { + m_addr *= 8; // each address points to 8 bytes + if (m_command == EEP_READFIRST) + m_state = EEP_AFTERADDR; + else + { + m_count = 64; + m_bits = 8; + m_state = EEP_WRITE; + m_eep_data = 0; + } + } + break; + + case EEP_AFTERADDR: + m_state = m_command; + m_count = 64; + m_bits = 0; + m_eep_data = 0; + if (m_state == EEP_READFIRST) + m_count = 4; + break; + + case EEP_WRITE: + m_eep_data <<= 1; + m_eep_data |= (data & 1); + m_bits--; + m_count--; + + if (m_bits == 0) + { + osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr); + if (m_addr >= m_data_size) + fatalerror("eeprom: invalid address (%x)\n", m_addr); + + m_data[m_addr] = m_eep_data; + m_addr++; + m_eep_data = 0; + m_bits = 8; + } + + if (!m_count) + m_state = EEP_AFTERWRITE; + break; + + case EEP_AFTERWRITE: + m_state = EEP_IDLE; + break; + } +} + diff --git a/src/devices/bus/gba/rom.h b/src/devices/bus/gba/rom.h index e13f6c623ac..4a1850c5fa2 100644 --- a/src/devices/bus/gba/rom.h +++ b/src/devices/bus/gba/rom.h @@ -6,81 +6,37 @@ #include "gba_slot.h" #include "machine/intelfsh.h" +// GBA RTC device -// ======================> gba_rom_device - -class gba_rom_device : public device_t, - public device_gba_cart_interface -{ -public: - // construction/destruction - gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; } +enum { + S3511_RTC_IDLE = 0, + S3511_RTC_DATAOUT, + S3511_RTC_DATAIN, + S3511_RTC_COMMAND }; -// ======================> gba_rom_sram_device - -class gba_rom_sram_device : public gba_rom_device +class gba_s3511_device { public: - // construction/destruction - gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; + gba_s3511_device(running_machine &machine); + running_machine &machine() const { return m_machine; } + + void update_time(int len); + UINT8 convert_to_bcd(int val); + + int read_line(); + void write(UINT16 data, int gpio_dirs); + +protected: + int m_phase; + UINT8 m_last_val, m_bits, m_command; + int m_data_len; + UINT8 m_data[7]; + + running_machine& m_machine; }; -// ======================> gba_rom_flash_device -class gba_rom_flash_device : public gba_rom_device -{ -public: - // construction/destruction - gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual machine_config_constructor device_mconfig_additions() const override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; - -private: - //UINT32 m_flash_size; - UINT32 m_flash_mask; - required_device m_flash; -}; - -// ======================> gba_rom_flash1m_device - -class gba_rom_flash1m_device : public gba_rom_device -{ -public: - // construction/destruction - gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual machine_config_constructor device_mconfig_additions() const override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; - -private: - //UINT32 m_flash_size; - UINT32 m_flash_mask; - required_device m_flash; -}; // GBA EEPROM device // TODO: is it possible to merge this with the standard EEPROM devices in the core? @@ -102,10 +58,10 @@ class gba_eeprom_device public: gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits); running_machine &machine() const { return m_machine; } - + UINT32 read(); void write(UINT32 data); - + protected: UINT8 *m_data; UINT32 m_data_size; @@ -116,17 +72,184 @@ protected: int m_bits; int m_addr_bits; UINT8 m_eep_data; - + running_machine& m_machine; }; + +// ======================> gba_rom_device + +class gba_rom_device : public device_t, + public device_gba_cart_interface +{ +public: + // construction/destruction + gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; } + + virtual DECLARE_READ32_MEMBER(read_gpio) override; + virtual DECLARE_WRITE32_MEMBER(write_gpio) override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) { return 0; } + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) {} + +private: + UINT16 m_gpio_regs[4]; + UINT8 m_gpio_write_only, m_gpio_dirs; +}; + + +// ======================> gba_rom_sram_device + +class gba_rom_sram_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; +}; + + +// ======================> gba_rom_drilldoz_device + +class gba_rom_drilldoz_device : public gba_rom_sram_device +{ +public: + // construction/destruction + gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; +}; + + +// ======================> gba_rom_wariotws_device + +class gba_rom_wariotws_device : public gba_rom_sram_device +{ +public: + // construction/destruction + gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual ioport_constructor device_input_ports() const override; + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + UINT8 m_last_val; + int m_counter; + required_ioport m_gyro_z; +}; + + +// ======================> gba_rom_flash_device + +class gba_rom_flash_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; + +protected: + //UINT32 m_flash_size; + UINT32 m_flash_mask; + required_device m_flash; +}; + + +// ======================> gba_rom_flash_rtc_device + +class gba_rom_flash_rtc_device : public gba_rom_flash_device +{ +public: + // construction/destruction + gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; +}; + + +// ======================> gba_rom_flash1m_device + +class gba_rom_flash1m_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; + +protected: + //UINT32 m_flash_size; + UINT32 m_flash_mask; + required_device m_flash; +}; + + +// ======================> gba_rom_flash1m_rtc_device + +class gba_rom_flash1m_rtc_device : public gba_rom_flash1m_device +{ +public: + // construction/destruction + gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; +}; + + // ======================> gba_rom_eeprom_device class gba_rom_eeprom_device : public gba_rom_device { public: // construction/destruction + gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // device-level overrides @@ -141,12 +264,38 @@ private: }; +// ======================> gba_rom_yoshiug_device + +class gba_rom_yoshiug_device : public gba_rom_eeprom_device +{ +public: + // construction/destruction + gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_tilt) override; + virtual DECLARE_WRITE32_MEMBER(write_tilt) override; + +private: + int m_tilt_ready; + UINT16 m_xpos, m_ypos; + required_ioport m_tilt_x; + required_ioport m_tilt_y; +}; + + // ======================> gba_rom_eeprom64_device class gba_rom_eeprom64_device : public gba_rom_device { public: // construction/destruction + gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // device-level overrides @@ -156,11 +305,35 @@ public: virtual DECLARE_READ32_MEMBER(read_ram) override; virtual DECLARE_WRITE32_MEMBER(write_ram) override; -private: +protected: std::unique_ptr m_eeprom; }; +// ======================> gba_rom_boktai_device + +class gba_rom_boktai_device : public gba_rom_eeprom64_device +{ +public: + // construction/destruction + gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; + required_ioport m_sensor; + UINT8 m_last_val; + int m_counter; +}; + + // ======================> gba_rom_3dmatrix_device class gba_rom_3dmatrix_device : public gba_rom_device @@ -184,10 +357,16 @@ private: // device type definition extern const device_type GBA_ROM_STD; extern const device_type GBA_ROM_SRAM; +extern const device_type GBA_ROM_DRILLDOZ; +extern const device_type GBA_ROM_WARIOTWS; extern const device_type GBA_ROM_EEPROM; +extern const device_type GBA_ROM_YOSHIUG; extern const device_type GBA_ROM_EEPROM64; +extern const device_type GBA_ROM_BOKTAI; extern const device_type GBA_ROM_FLASH; +extern const device_type GBA_ROM_FLASH_RTC; extern const device_type GBA_ROM_FLASH1M; +extern const device_type GBA_ROM_FLASH1M_RTC; extern const device_type GBA_ROM_3DMATRIX; diff --git a/src/devices/bus/neogeo/prot_sma.h b/src/devices/bus/neogeo/prot_sma.h index 1c393f148bc..1e0053ede42 100644 --- a/src/devices/bus/neogeo/prot_sma.h +++ b/src/devices/bus/neogeo/prot_sma.h @@ -31,7 +31,6 @@ public: UINT32 garouh_bank_base(UINT16 sel); UINT32 mslug3_bank_base(UINT16 sel); UINT32 kof2000_bank_base(UINT16 sel); - void sma_install_random_read_handler(cpu_device* maincpu, int addr1, int addr2 ); void kof99_decrypt_68k(UINT8* base); void garou_decrypt_68k(UINT8* base); void garouh_decrypt_68k(UINT8* base); diff --git a/src/devices/bus/newbrain/eim.h b/src/devices/bus/newbrain/eim.h index 490a6a15c03..d3f6c3d8a9b 100644 --- a/src/devices/bus/newbrain/eim.h +++ b/src/devices/bus/newbrain/eim.h @@ -42,13 +42,6 @@ public: DECLARE_WRITE8_MEMBER( anout_w ); DECLARE_READ8_MEMBER( anin_r ); DECLARE_WRITE8_MEMBER( anio_w ); - DECLARE_READ8_MEMBER( st0_r ); - DECLARE_READ8_MEMBER( st1_r ); - DECLARE_READ8_MEMBER( st2_r ); - DECLARE_READ8_MEMBER( usbs_r ); - DECLARE_WRITE8_MEMBER( usbs_w ); - DECLARE_WRITE8_MEMBER( paging_w ); - DECLARE_WRITE_LINE_MEMBER( acia_tx ); DECLARE_WRITE_LINE_MEMBER( acia_interrupt ); DECLARE_WRITE_LINE_MEMBER( ctc_z2_w ); DECLARE_WRITE_LINE_MEMBER( adc_eoc_w ); diff --git a/src/devices/bus/pet/2joysnd.cpp b/src/devices/bus/pet/2joysnd.cpp index b0ac30bf0d1..ef8fb7f974c 100644 --- a/src/devices/bus/pet/2joysnd.cpp +++ b/src/devices/bus/pet/2joysnd.cpp @@ -23,7 +23,7 @@ Connections E ----- | 2 | joy 1 down | 7 | D ----- | 3 | joy 1 left - | 8 | + A ----- | 8 | ground C ----- | 4 | joy 1 right | 9 | | 5 | @@ -35,13 +35,14 @@ Connections K ----- | 2 | joy 2 down | 7 | J ----- | 3 | joy 2 left - | 8 | + N ----- | 8 | ground H ----- | 4 | joy 2 right | 9 | | 5 | \____| - M ----- audio amplifier + M ----- / audio + N ----- \ amplifier */ @@ -139,7 +140,6 @@ void pet_userport_joystick_and_sound_device::device_start() void pet_userport_joystick_and_sound_device::update_port1() { -// printf( "update port1\n" ); output_f(m_up1 && m_fire1); output_e(m_down1 && m_fire1); } @@ -151,7 +151,6 @@ void pet_userport_joystick_and_sound_device::update_port1() void pet_userport_joystick_and_sound_device::update_port2() { -// printf( "update port2\n" ); output_l(m_up2 && m_fire2); output_k(m_down2 && m_fire2); } diff --git a/src/devices/bus/pet/2joysnd.h b/src/devices/bus/pet/2joysnd.h index 26a2f193d71..ee2232e6ad3 100644 --- a/src/devices/bus/pet/2joysnd.h +++ b/src/devices/bus/pet/2joysnd.h @@ -21,7 +21,7 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> pet_userport_joystick_adapter_device +// ======================> pet_userport_joystick_and_sound_device class pet_userport_joystick_and_sound_device : public device_t, public device_pet_user_port_interface diff --git a/src/devices/bus/pet/hsg.h b/src/devices/bus/pet/hsg.h index c8d81463b5b..22e328bafc1 100644 --- a/src/devices/bus/pet/hsg.h +++ b/src/devices/bus/pet/hsg.h @@ -38,8 +38,6 @@ public: virtual UINT8 pet_bd_r(address_space &space, offs_t offset, UINT8 data, int &sel) override; virtual void pet_bd_w(address_space &space, offs_t offset, UINT8 data, int &sel) override; - UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - protected: // device-level overrides virtual void device_start() override; diff --git a/src/devices/bus/ti99x/998board.h b/src/devices/bus/ti99x/998board.h index 0a9367953c5..e0ed6b397fa 100644 --- a/src/devices/bus/ti99x/998board.h +++ b/src/devices/bus/ti99x/998board.h @@ -63,6 +63,8 @@ public: m_counter(0), m_addressed(true), m_ready(true) { }; + + virtual ~waitstate_generator() { } void select_in(bool addressed); virtual void ready_in(line_state ready) =0; virtual void clock_in(line_state clkout) =0; diff --git a/src/devices/cpu/alto2/a2ether.cpp b/src/devices/cpu/alto2/a2ether.cpp index c3fd5a5c87a..c0922a6b831 100644 --- a/src/devices/cpu/alto2/a2ether.cpp +++ b/src/devices/cpu/alto2/a2ether.cpp @@ -1321,20 +1321,20 @@ void alto2_cpu_device::init_ether(int task) m_ether_a42 = prom_load(machine(), &pl_enet_a42, memregion("ether_a42")->base()); m_ether_a49 = prom_load(machine(), &pl_enet_a49, memregion("ether_a49")->base()); - set_bs(task, bs_ether_eidfct, &alto2_cpu_device::bs_early_eidfct, 0); + set_bs(task, bs_ether_eidfct, &alto2_cpu_device::bs_early_eidfct, nullptr); - set_f1(task, f1_block, &alto2_cpu_device::f1_early_eth_block, 0); - set_f1(task, f1_ether_eilfct, &alto2_cpu_device::f1_early_eilfct, 0); - set_f1(task, f1_ether_epfct, &alto2_cpu_device::f1_early_epfct, 0); - set_f1(task, f1_ether_ewfct, 0, &alto2_cpu_device::f1_late_ewfct); + set_f1(task, f1_block, &alto2_cpu_device::f1_early_eth_block, nullptr); + set_f1(task, f1_ether_eilfct, &alto2_cpu_device::f1_early_eilfct, nullptr); + set_f1(task, f1_ether_epfct, &alto2_cpu_device::f1_early_epfct, nullptr); + set_f1(task, f1_ether_ewfct, nullptr, &alto2_cpu_device::f1_late_ewfct); - set_f2(task, f2_ether_eodfct, 0, &alto2_cpu_device::f2_late_eodfct); - set_f2(task, f2_ether_eosfct, 0, &alto2_cpu_device::f2_late_eosfct); - set_f2(task, f2_ether_erbfct, 0, &alto2_cpu_device::f2_late_erbfct); - set_f2(task, f2_ether_eefct, 0, &alto2_cpu_device::f2_late_eefct); - set_f2(task, f2_ether_ebfct, 0, &alto2_cpu_device::f2_late_ebfct); - set_f2(task, f2_ether_ecbfct, 0, &alto2_cpu_device::f2_late_ecbfct); - set_f2(task, f2_ether_eisfct, 0, &alto2_cpu_device::f2_late_eisfct); + set_f2(task, f2_ether_eodfct, nullptr, &alto2_cpu_device::f2_late_eodfct); + set_f2(task, f2_ether_eosfct, nullptr, &alto2_cpu_device::f2_late_eosfct); + set_f2(task, f2_ether_erbfct, nullptr, &alto2_cpu_device::f2_late_erbfct); + set_f2(task, f2_ether_eefct, nullptr, &alto2_cpu_device::f2_late_eefct); + set_f2(task, f2_ether_ebfct, nullptr, &alto2_cpu_device::f2_late_ebfct); + set_f2(task, f2_ether_ecbfct, nullptr, &alto2_cpu_device::f2_late_ecbfct); + set_f2(task, f2_ether_eisfct, nullptr, &alto2_cpu_device::f2_late_eisfct); m_active_callback[task] = &alto2_cpu_device::activate_eth; diff --git a/src/devices/cpu/alto2/alto2cpu.cpp b/src/devices/cpu/alto2/alto2cpu.cpp index 5df4ce44675..407dfd633d1 100644 --- a/src/devices/cpu/alto2/alto2cpu.cpp +++ b/src/devices/cpu/alto2/alto2cpu.cpp @@ -2713,23 +2713,23 @@ void alto2_cpu_device::hard_reset() if (0 == (m_reset_mode & (1 << task))) m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE; - set_bs(task, bs_read_r, &alto2_cpu_device::bs_early_read_r, 0); + set_bs(task, bs_read_r, &alto2_cpu_device::bs_early_read_r, nullptr); set_bs(task, bs_load_r, &alto2_cpu_device::bs_early_load_r, &alto2_cpu_device::bs_late_load_r); - set_bs(task, bs_no_source, 0, 0); + set_bs(task, bs_no_source, nullptr, nullptr); set_bs(task, bs_task_3, &alto2_cpu_device::fn_bs_bad_0, &alto2_cpu_device::fn_bs_bad_1); // task specific set_bs(task, bs_task_4, &alto2_cpu_device::fn_bs_bad_0, &alto2_cpu_device::fn_bs_bad_1); // task specific - set_bs(task, bs_read_md, &alto2_cpu_device::bs_early_read_md, 0); - set_bs(task, bs_mouse, &alto2_cpu_device::bs_early_mouse, 0); - set_bs(task, bs_disp, &alto2_cpu_device::bs_early_disp, 0); + set_bs(task, bs_read_md, &alto2_cpu_device::bs_early_read_md, nullptr); + set_bs(task, bs_mouse, &alto2_cpu_device::bs_early_mouse, nullptr); + set_bs(task, bs_disp, &alto2_cpu_device::bs_early_disp, nullptr); - set_f1(task, f1_nop, 0, 0); - set_f1(task, f1_load_mar, 0, &alto2_cpu_device::f1_late_load_mar); - set_f1(task, f1_task, &alto2_cpu_device::f1_early_task, 0); + set_f1(task, f1_nop, nullptr, nullptr); + set_f1(task, f1_load_mar, nullptr, &alto2_cpu_device::f1_late_load_mar); + set_f1(task, f1_task, &alto2_cpu_device::f1_early_task, nullptr); set_f1(task, f1_block, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // not all tasks have the f1_block - set_f1(task, f1_l_lsh_1, 0, &alto2_cpu_device::f1_late_l_lsh_1); - set_f1(task, f1_l_rsh_1, 0, &alto2_cpu_device::f1_late_l_rsh_1); - set_f1(task, f1_l_lcy_8, 0, &alto2_cpu_device::f1_late_l_lcy_8); - set_f1(task, f1_const, 0, 0); + set_f1(task, f1_l_lsh_1, nullptr, &alto2_cpu_device::f1_late_l_lsh_1); + set_f1(task, f1_l_rsh_1, nullptr, &alto2_cpu_device::f1_late_l_rsh_1); + set_f1(task, f1_l_lcy_8, nullptr, &alto2_cpu_device::f1_late_l_lcy_8); + set_f1(task, f1_const, nullptr, nullptr); set_f1(task, f1_task_10, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific set_f1(task, f1_task_11, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific set_f1(task, f1_task_12, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific @@ -2739,14 +2739,14 @@ void alto2_cpu_device::hard_reset() set_f1(task, f1_task_16, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific set_f1(task, f1_task_17, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific - set_f2(task, f2_nop, 0, 0); - set_f2(task, f2_bus_eq_zero, 0, &alto2_cpu_device::f2_late_bus_eq_zero); - set_f2(task, f2_shifter_lt_zero,0, &alto2_cpu_device::f2_late_shifter_lt_zero); - set_f2(task, f2_shifter_eq_zero,0, &alto2_cpu_device::f2_late_shifter_eq_zero); - set_f2(task, f2_bus, 0, &alto2_cpu_device::f2_late_bus); - set_f2(task, f2_alucy, 0, &alto2_cpu_device::f2_late_alucy); - set_f2(task, f2_load_md, 0, &alto2_cpu_device::f2_late_load_md); - set_f2(task, f2_const, 0, 0); + set_f2(task, f2_nop, nullptr, nullptr); + set_f2(task, f2_bus_eq_zero, nullptr, &alto2_cpu_device::f2_late_bus_eq_zero); + set_f2(task, f2_shifter_lt_zero,nullptr, &alto2_cpu_device::f2_late_shifter_lt_zero); + set_f2(task, f2_shifter_eq_zero,nullptr, &alto2_cpu_device::f2_late_shifter_eq_zero); + set_f2(task, f2_bus, nullptr, &alto2_cpu_device::f2_late_bus); + set_f2(task, f2_alucy, nullptr, &alto2_cpu_device::f2_late_alucy); + set_f2(task, f2_load_md, nullptr, &alto2_cpu_device::f2_late_load_md); + set_f2(task, f2_const, nullptr, nullptr); set_f2(task, f2_task_10, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific set_f2(task, f2_task_11, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific set_f2(task, f2_task_12, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific diff --git a/src/devices/cpu/g65816/g65816cm.h b/src/devices/cpu/g65816/g65816cm.h index 649b2500653..e0afd6d1305 100644 --- a/src/devices/cpu/g65816/g65816cm.h +++ b/src/devices/cpu/g65816/g65816cm.h @@ -186,7 +186,7 @@ static inline int MAKE_INT_8(int A) {return (A & 0x80) ? A | ~0xff : A & 0xff;} #define CLK_W_S 2 #define CLK_W_SIY 5 -#define CLK(A) CLOCKS -= (m_cpu_type == CPU_TYPE_G65816 ? A : A*6) +#define CLK(A) CLOCKS -= A #define CLK_BUS(A) CLOCKS -= A #define USE_ALL_CLKS() CLOCKS = 0 diff --git a/src/devices/cpu/h8/h8.cpp b/src/devices/cpu/h8/h8.cpp index bd53761bb6a..62b0829eff1 100644 --- a/src/devices/cpu/h8/h8.cpp +++ b/src/devices/cpu/h8/h8.cpp @@ -114,8 +114,8 @@ void h8_device::device_start() inst_substate = 0; count_before_instruction_step = 0; requested_state = -1; - dma_device = NULL; - dtc_device = NULL; + dma_device = nullptr; + dtc_device = nullptr; } void h8_device::device_reset() @@ -130,8 +130,8 @@ void h8_device::device_reset() irq_nmi = false; taken_irq_vector = 0; taken_irq_level = -1; - current_dma = NULL; - current_dtc = NULL; + current_dma = nullptr; + current_dtc = nullptr; } bool h8_device::trigger_dma(int vector) diff --git a/src/devices/cpu/h8/h8_dtc.cpp b/src/devices/cpu/h8/h8_dtc.cpp index 12cd8155773..2482b4b034c 100644 --- a/src/devices/cpu/h8/h8_dtc.cpp +++ b/src/devices/cpu/h8/h8_dtc.cpp @@ -77,10 +77,10 @@ WRITE8_MEMBER(h8_dtc_device::dtvecr_w) void h8_dtc_device::edge(int vector) { - for(std::list::const_iterator i = waiting_vector.begin(); i != waiting_vector.end(); i++) + for(std::list::const_iterator i = waiting_vector.begin(); i != waiting_vector.end(); ++i) if(*i == vector) return; - for(std::list::const_iterator i = waiting_writeback.begin(); i != waiting_writeback.end(); i++) + for(std::list::const_iterator i = waiting_writeback.begin(); i != waiting_writeback.end(); ++i) if(*i == vector) return; if(waiting_vector.empty() && waiting_writeback.empty()) @@ -120,7 +120,7 @@ void h8_dtc_device::queue(int vector) void h8_dtc_device::vector_done(int vector) { std::list::iterator wi; - for(wi = waiting_vector.begin(); wi != waiting_vector.end() && *wi != vector && *wi != vector + DTC_CHAINED; wi++); + for(wi = waiting_vector.begin(); wi != waiting_vector.end() && *wi != vector && *wi != vector + DTC_CHAINED; ++wi) {}; assert(wi != waiting_vector.end()); waiting_vector.erase(wi); @@ -167,7 +167,7 @@ void h8_dtc_device::vector_done(int vector) void h8_dtc_device::writeback_done(int vector) { std::list::iterator wi; - for(wi = waiting_writeback.begin(); wi != waiting_writeback.end() && *wi != vector; wi++); + for(wi = waiting_writeback.begin(); wi != waiting_writeback.end() && *wi != vector; ++wi) {}; assert(wi != waiting_writeback.end()); waiting_writeback.erase(wi); diff --git a/src/devices/cpu/hphybrid/hphybrid.cpp b/src/devices/cpu/hphybrid/hphybrid.cpp index 52b3c405c87..18440c6e8d1 100644 --- a/src/devices/cpu/hphybrid/hphybrid.cpp +++ b/src/devices/cpu/hphybrid/hphybrid.cpp @@ -7,25 +7,34 @@ // I searched for a while for any kind of documentation about them but found nothing at all. // Some time later I found the mnemonics in the binary dump of assembly development option ROM: // CIM & SIM, respectively. From the mnemonic I deduced their function: Clear & Set Interrupt Mask. -// I think they are basically used to temporarily disable/enable interrupt recognition inside -// ISRs. This is consistent with their usage in PPU firmware and test ROM. The official EIR & -// DIR instructions cannot be used while servicing an interrupt because they probably reset -// the "in ISR" condition of the processor. -// Using CIM&SIM only makes sense in low-level ISRs because high-level ones can't be interrupted -// by anyone. -// Now, I still have some doubts about the "polarity" of interrupt mask. Is interrupt -// recognition disabled when the mask is cleared or is it the opposite? -// I'm leaning towards the "no interrupts with mask cleared" interpretation, but I'm not 100% -// convinced. CIM & SIM at the moment are implemented with this interpretation (see also -// NO_ISR_WITH_IM_CLEARED macro below). +// After a few experiments, crashes, etc. here's my opinion on their purpose. +// When the CPU receives an interrupt, its AEC registers can be in any state so it could +// be impossible to properly save state, fetch the interrupt vector and start executing the ISR. +// The solution is having an hidden "interrupt mask" flag that gets set when an interrupt (either +// low or high priority) is acknowledged and is cleared when the "ret 0,p" instruction that ends +// the ISR is executed. The effects of having the interrupt mask set are: +// * No interrupts are recognized +// * A few essential AEC registers are overridden to establish a "safe" environment to save state +// and execute ISR (see hp_5061_3001_cpu_device::add_mae). +// Inside the ISR, CIM & SIM instructions can be used to change the interrupt mask and switch +// between normal & overridden settings of AEC. +// As an example of CIM&SIM usage, we can have a look at the keyboard ISR in 9845B PPU processor: +// * A key is pressed and IRQ 0 is set +// * Interrupt 0 is recognized, IM is set +// * R register is used to save program counter in block = 1 (overriding any R36 value) +// * Vector is fetched and execution begins in block 5 (overriding R33 value) +// * Registers are saved to RAM (again in overridden block 1) +// * AEC registers are set to correct value for ISR execution +// * CIM is used to exit the special behaviour of AEC and to allow high-priority interrupts +// * Useful ISR processing is done +// * SIM is used to re-enter special behaviour of AEC and to block any interrupt +// * State is restored (including all AEC registers) +// * RET 0,P is executed to end ISR: return program counter is popped off the stack and IM is cleared #include "emu.h" #include "debugger.h" #include "hphybrid.h" -// Define this to have "IM cleared" == "No interrupt recognition" -#define NO_ISR_WITH_IM_CLEARED - enum { HPHYBRID_A, HPHYBRID_B, @@ -539,9 +548,11 @@ UINT16 hp_hybrid_cpu_device::execute_one_sub(UINT16 opcode) memmove(&m_reg_PA[ 0 ] , &m_reg_PA[ 1 ] , HPHYBRID_INT_LVLS); m_pa_changed_func((UINT8)CURRENT_PA); } - BIT_CLR(m_flags, HPHYBRID_IM_BIT); + tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f); + BIT_CLR(m_flags, HPHYBRID_IM_BIT); + } else { + tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f); } - tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f); return BIT(opcode , 5) ? tmp - 0x20 : tmp; } else { switch (opcode) { @@ -1483,11 +1494,7 @@ UINT16 hp_5061_3001_cpu_device::execute_no_bpc_ioc(UINT16 opcode) // Probably "Clear Interrupt Mask" // No idea at all about exec. time: make it 9 cycles m_icount -= 9; -#ifndef NO_ISR_WITH_IM_CLEARED BIT_CLR(m_flags, HPHYBRID_IM_BIT); -#else - BIT_SET(m_flags, HPHYBRID_IM_BIT); -#endif logerror("hp-5061-3001: CIM, P = %06x flags = %05x\n" , m_genpc , m_flags); break; @@ -1497,11 +1504,7 @@ UINT16 hp_5061_3001_cpu_device::execute_no_bpc_ioc(UINT16 opcode) // Probably "Set Interrupt Mask" // No idea at all about exec. time: make it 9 cycles m_icount -= 9; -#ifndef NO_ISR_WITH_IM_CLEARED BIT_SET(m_flags, HPHYBRID_IM_BIT); -#else - BIT_CLR(m_flags, HPHYBRID_IM_BIT); -#endif logerror("hp-5061-3001: SIM, P = %06x flags = %05x\n" , m_genpc , m_flags); break; @@ -1532,51 +1535,63 @@ offs_t hp_5061_3001_cpu_device::disasm_disassemble(char *buffer, offs_t pc, cons UINT32 hp_5061_3001_cpu_device::add_mae(aec_cases_t aec_case , UINT16 addr) { - UINT16 bsc_reg; - bool top_half = BIT(addr , 15) != 0; + UINT16 bsc_reg; + bool top_half = BIT(addr , 15) != 0; - // Detect accesses to top half of base page - if ((aec_case == AEC_CASE_C || aec_case == AEC_CASE_I) && (addr & 0xfe00) == 0xfe00) { - aec_case = AEC_CASE_B; + // Detect accesses to top half of base page + if ((aec_case == AEC_CASE_C || aec_case == AEC_CASE_I) && (addr & 0xfe00) == 0xfe00) { + aec_case = AEC_CASE_B; + } + + switch (aec_case) { + case AEC_CASE_A: + if (top_half) { + bsc_reg = m_reg_aec[ HP_REG_R34_ADDR - HP_REG_R32_ADDR ]; + } else { + // Block 5 is used when IM bit overrides R33 value + bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 5 : m_reg_aec[ HP_REG_R33_ADDR - HP_REG_R32_ADDR ]; } + break; - switch (aec_case) { - case AEC_CASE_A: - bsc_reg = top_half ? HP_REG_R34_ADDR : HP_REG_R33_ADDR; - break; - - case AEC_CASE_B: - bsc_reg = top_half ? HP_REG_R36_ADDR : HP_REG_R33_ADDR; - break; - - case AEC_CASE_C: - bsc_reg = top_half ? HP_REG_R32_ADDR : HP_REG_R35_ADDR; - break; - - case AEC_CASE_D: - bsc_reg = top_half ? HP_REG_R32_ADDR : HP_REG_R37_ADDR; - break; - - case AEC_CASE_I: - // Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware. - // Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does: - // top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35 - // (see pg 334 of patent). - bsc_reg = top_half ? 0 : HP_REG_R35_ADDR; - break; - - default: - logerror("hphybrid: aec_case=%d\n" , aec_case); - return 0; - } - - UINT16 aec_reg = (bsc_reg != 0) ? (m_reg_aec[ bsc_reg - HP_REG_R32_ADDR ] & BSC_REG_MASK) : 0; - - if (m_forced_bsc_25) { - aec_reg = (aec_reg & 0xf) | 0x20; + case AEC_CASE_B: + if (top_half) { + // Block 1 is used when IM bit overrides R36 value + bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 1 : m_reg_aec[ HP_REG_R36_ADDR - HP_REG_R32_ADDR ]; + } else { + // Block 5 is used when IM bit overrides R33 value + bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 5 : m_reg_aec[ HP_REG_R33_ADDR - HP_REG_R32_ADDR ]; } + break; - return (UINT32)addr | ((UINT32)aec_reg << 16); + case AEC_CASE_C: + bsc_reg = top_half ? m_reg_aec[ HP_REG_R32_ADDR - HP_REG_R32_ADDR ] : m_reg_aec[ HP_REG_R35_ADDR - HP_REG_R32_ADDR ]; + break; + + case AEC_CASE_D: + bsc_reg = top_half ? m_reg_aec[ HP_REG_R32_ADDR - HP_REG_R32_ADDR ] : m_reg_aec[ HP_REG_R37_ADDR - HP_REG_R32_ADDR ]; + break; + + case AEC_CASE_I: + // Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware. + // Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does: + // top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35 + // (see pg 334 of patent). + // I'm beginning to suspect that these values actually come from IM overriding case "C" + bsc_reg = top_half ? 0 : m_reg_aec[ HP_REG_R35_ADDR - HP_REG_R32_ADDR ]; + break; + + default: + logerror("hphybrid: aec_case=%d\n" , aec_case); + return 0; + } + + UINT16 aec_reg = bsc_reg & BSC_REG_MASK; + + if (m_forced_bsc_25) { + aec_reg = (aec_reg & 0xf) | 0x20; + } + + return (UINT32)addr | ((UINT32)aec_reg << 16); } UINT16 hp_5061_3001_cpu_device::read_non_common_reg(UINT16 addr) @@ -1655,10 +1670,8 @@ void hp_5061_3001_cpu_device::write_non_common_reg(UINT16 addr , UINT16 v) void hp_5061_3001_cpu_device::enter_isr(void) { - // Set interrupt mask when entering an ISR -#ifndef NO_ISR_WITH_IM_CLEARED - BIT_SET(m_flags, HPHYBRID_IM_BIT); -#endif + // Set interrupt mask when entering an ISR + BIT_SET(m_flags, HPHYBRID_IM_BIT); } hp_5061_3011_cpu_device::hp_5061_3011_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp index 67290164b0c..4123da67594 100644 --- a/src/devices/cpu/sharc/sharc.cpp +++ b/src/devices/cpu/sharc/sharc.cpp @@ -11,7 +11,6 @@ #include "sharcfe.h" -#define ENABLE_DRC 0 #define DISABLE_FAST_REGISTERS 1 @@ -76,6 +75,7 @@ adsp21062_device::adsp21062_device(const machine_config &mconfig, const char *ta , m_cache(CACHE_SIZE + sizeof(sharc_internal_state)) , m_drcuml(nullptr) , m_drcfe(nullptr) + , m_enable_drc(false) { } @@ -86,6 +86,11 @@ offs_t adsp21062_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 return CPU_DISASSEMBLE_NAME(sharc)(this, buffer, pc, oprom, opram, options); } +void adsp21062_device::enable_recompiler() +{ + m_enable_drc = true; +} + void adsp21062_device::CHANGE_PC(UINT32 newpc) { @@ -892,45 +897,48 @@ void adsp21062_device::check_interrupts() void adsp21062_device::execute_run() { -#if ENABLE_DRC - if (m_core->irq_pending != 0) + if (m_enable_drc) { - m_core->idle = 0; - } - execute_run_drc(); - return; -#else - if (m_core->idle && m_core->irq_pending == 0) - { - m_core->icount = 0; - debugger_instruction_hook(this, m_core->daddr); - } - if (m_core->irq_pending != 0) - { - check_interrupts(); - m_core->idle = 0; - } - - while (m_core->icount > 0 && !m_core->idle) - { - m_core->pc = m_core->daddr; - m_core->daddr = m_core->faddr; - m_core->faddr = m_core->nfaddr; - m_core->nfaddr++; - - m_core->astat_old_old_old = m_core->astat_old_old; - m_core->astat_old_old = m_core->astat_old; - m_core->astat_old = m_core->astat; - - debugger_instruction_hook(this, m_core->pc); - - m_core->opcode = ROPCODE(m_core->pc); - - // handle looping - if (m_core->pc == m_core->laddr.addr) + if (m_core->irq_pending != 0) { - switch (m_core->laddr.loop_type) + m_core->idle = 0; + } + execute_run_drc(); + return; + } + else + { + if (m_core->idle && m_core->irq_pending == 0) + { + m_core->icount = 0; + debugger_instruction_hook(this, m_core->daddr); + } + if (m_core->irq_pending != 0) + { + check_interrupts(); + m_core->idle = 0; + } + + while (m_core->icount > 0 && !m_core->idle) + { + m_core->pc = m_core->daddr; + m_core->daddr = m_core->faddr; + m_core->faddr = m_core->nfaddr; + m_core->nfaddr++; + + m_core->astat_old_old_old = m_core->astat_old_old; + m_core->astat_old_old = m_core->astat_old; + m_core->astat_old = m_core->astat; + + debugger_instruction_hook(this, m_core->pc); + + m_core->opcode = ROPCODE(m_core->pc); + + // handle looping + if (m_core->pc == m_core->laddr.addr) { + switch (m_core->laddr.loop_type) + { case 0: // arithmetic condition-based { int condition = m_core->laddr.code; @@ -980,27 +988,27 @@ void adsp21062_device::execute_run() CHANGE_PC(TOP_PC()); } } + } } - } - (this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])(); + (this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])(); - // System register latency effect - if (m_core->systemreg_latency_cycles > 0) - { - --m_core->systemreg_latency_cycles; - if (m_core->systemreg_latency_cycles <= 0) + // System register latency effect + if (m_core->systemreg_latency_cycles > 0) { - systemreg_write_latency_effect(); + --m_core->systemreg_latency_cycles; + if (m_core->systemreg_latency_cycles <= 0) + { + systemreg_write_latency_effect(); + } } - } - --m_core->icount; - }; -#endif + --m_core->icount; + }; + } } bool adsp21062_device::memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value) diff --git a/src/devices/cpu/sharc/sharc.h b/src/devices/cpu/sharc/sharc.h index 20eeb003ebe..f8718997d4d 100644 --- a/src/devices/cpu/sharc/sharc.h +++ b/src/devices/cpu/sharc/sharc.h @@ -168,6 +168,8 @@ public: void sharc_cfunc_unimplemented_shiftimm(); void sharc_cfunc_write_snoop(); + void enable_recompiler(); + enum ASTAT_FLAGS { // ASTAT flags @@ -452,6 +454,8 @@ private: UINT16 m_internal_ram[2 * 0x10000]; // 2x 128KB + bool m_enable_drc; + inline void CHANGE_PC(UINT32 newpc); inline void CHANGE_PC_DELAYED(UINT32 newpc); void sharc_iop_delayed_w(UINT32 reg, UINT32 data, int cycles); diff --git a/src/devices/machine/hp_taco.cpp b/src/devices/machine/hp_taco.cpp index 553cf6fb4c3..9bd1c426a30 100644 --- a/src/devices/machine/hp_taco.cpp +++ b/src/devices/machine/hp_taco.cpp @@ -803,10 +803,10 @@ hp_taco_device::tape_pos_t hp_taco_device::word_end_pos(const tape_track_t::iter void hp_taco_device::adjust_it(tape_track_t& track , tape_track_t::iterator& it , tape_pos_t pos) { if (it != track.begin()) { - it--; - if (word_end_pos(it) <= pos) { - it++; - } + --it; + if (word_end_pos(it) <= pos) { + ++it; + } } } @@ -873,11 +873,11 @@ bool hp_taco_device::next_data(tape_track_t::iterator& it , tape_pos_t pos , boo } else { // Never more than 2 iterations do { - if (it == track.begin()) { - it = track.end(); - return false; - } - it--; + if (it == track.begin()) { + it = track.end(); + return false; + } + --it; } while (!inclusive && word_end_pos(it) > pos); return true; } @@ -887,23 +887,23 @@ hp_taco_device::adv_res_t hp_taco_device::adv_it(tape_track_t::iterator& it) { tape_track_t& track = current_track(); if (m_tape_fwd) { - tape_pos_t prev_pos = word_end_pos(it); - it++; + tape_pos_t prev_pos = word_end_pos(it); + ++it; if (it == track.end()) { - return ADV_NO_MORE_DATA; + return ADV_NO_MORE_DATA; } else { - adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA; - return res; + adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA; + return res; } } else { - if (it == track.begin()) { - it = track.end(); - return ADV_NO_MORE_DATA; - } else { - tape_pos_t prev_pos = it->first; - it--; - return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA; - } + if (it == track.begin()) { + it = track.end(); + return ADV_NO_MORE_DATA; + } else { + tape_pos_t prev_pos = it->first; + --it; + return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA; + } } } @@ -1025,51 +1025,51 @@ void hp_taco_device::clear_tape(void) void hp_taco_device::dump_sequence(tape_track_t::const_iterator it_start , unsigned n_words) { - if (n_words) { - UINT32 tmp32; - UINT16 tmp16; + if (n_words) { + UINT32 tmp32; + UINT16 tmp16; - tmp32 = n_words; - fwrite(&tmp32 , sizeof(tmp32)); - tmp32 = it_start->first; - fwrite(&tmp32 , sizeof(tmp32)); + tmp32 = n_words; + fwrite(&tmp32 , sizeof(tmp32)); + tmp32 = it_start->first; + fwrite(&tmp32 , sizeof(tmp32)); - for (unsigned i = 0; i < n_words; i++) { - tmp16 = it_start->second; - fwrite(&tmp16 , sizeof(tmp16)); - it_start++; - } + for (unsigned i = 0; i < n_words; i++) { + tmp16 = it_start->second; + fwrite(&tmp16 , sizeof(tmp16)); + ++it_start; } + } } void hp_taco_device::save_tape(void) { - UINT32 tmp32; + UINT32 tmp32; - fseek(0, SEEK_SET); + fseek(0, SEEK_SET); - tmp32 = FILE_MAGIC; - fwrite(&tmp32 , sizeof(tmp32)); + tmp32 = FILE_MAGIC; + fwrite(&tmp32 , sizeof(tmp32)); - for (unsigned track_n = 0; track_n < 2; track_n++) { - const tape_track_t& track = m_tracks[ track_n ]; - tape_pos_t next_pos = (tape_pos_t)-1; - unsigned n_words = 0; - tape_track_t::const_iterator it_start; - for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); it++) { - if (it->first != next_pos) { - dump_sequence(it_start , n_words); - it_start = it; - n_words = 0; - } - next_pos = it->first + word_length(it->second); - n_words++; + for (unsigned track_n = 0; track_n < 2; track_n++) { + const tape_track_t& track = m_tracks[ track_n ]; + tape_pos_t next_pos = (tape_pos_t)-1; + unsigned n_words = 0; + tape_track_t::const_iterator it_start; + for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); ++it) { + if (it->first != next_pos) { + dump_sequence(it_start , n_words); + it_start = it; + n_words = 0; } - dump_sequence(it_start , n_words); - // End of track - tmp32 = (UINT32)-1; - fwrite(&tmp32 , sizeof(tmp32)); + next_pos = it->first + word_length(it->second); + n_words++; } + dump_sequence(it_start , n_words); + // End of track + tmp32 = (UINT32)-1; + fwrite(&tmp32 , sizeof(tmp32)); + } } bool hp_taco_device::load_track(tape_track_t& track) diff --git a/src/devices/machine/terminal.cpp b/src/devices/machine/terminal.cpp index 86388182f15..a2be090b261 100644 --- a/src/devices/machine/terminal.cpp +++ b/src/devices/machine/terminal.cpp @@ -319,7 +319,7 @@ WRITE8_MEMBER( generic_terminal_device::kbd_put ) ***************************************************************************/ static MACHINE_CONFIG_FRAGMENT( generic_terminal ) - MCFG_SCREEN_ADD_MONOCHROME(TERMINAL_SCREEN_TAG, RASTER, rgb_t::green) + MCFG_SCREEN_ADD_MONOCHROME(TERMINAL_SCREEN_TAG, RASTER, rgb_t::white) MCFG_SCREEN_REFRESH_RATE(50) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ MCFG_SCREEN_SIZE(TERMINAL_WIDTH*8, TERMINAL_HEIGHT*10) diff --git a/src/devices/sound/s14001a.cpp b/src/devices/sound/s14001a.cpp index 627d3214b10..8cc27dbe261 100644 --- a/src/devices/sound/s14001a.cpp +++ b/src/devices/sound/s14001a.cpp @@ -569,7 +569,7 @@ void s14001a_device::ClearStatistics() m_uNControlWords = 0; } -void s14001a_device::GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 uNControlWords) +void s14001a_device::GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 &uNControlWords) { uNPitchPeriods = m_uNPitchPeriods; uNVoiced = m_uNVoiced; diff --git a/src/devices/sound/s14001a.h b/src/devices/sound/s14001a.h index 97025b8c3c1..46c6fd6b0cb 100644 --- a/src/devices/sound/s14001a.h +++ b/src/devices/sound/s14001a.h @@ -56,7 +56,7 @@ private: void CalculateIncrement(bool bVoicedP2, UINT8 uPPQtrP2, bool bPPQStartP2, UINT8 uDeltaP2, UINT8 uDeltaOldP2, UINT8 &uDeltaOldP1, UINT8 &uIncrementP2, bool &bAddP2); UINT8 CalculateOutput(bool bVoicedP2, bool bXSilenceP2, UINT8 uPPQtrP2, bool bPPQStartP2, UINT8 uLOutputP2, UINT8 uIncrementP2, bool bAddP2); void ClearStatistics(); - void GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 uNControlWords); + void GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 &uNControlWords); void SetPrintLevel(UINT32 uPrintLevel) { m_uPrintLevel = uPrintLevel; } // internal state diff --git a/src/devices/video/ef9364.h b/src/devices/video/ef9364.h index 9d18942429d..b9ea73395e5 100644 --- a/src/devices/video/ef9364.h +++ b/src/devices/video/ef9364.h @@ -69,7 +69,6 @@ protected: // inline helper private: - void screen_scanning( int force_clear ); void set_video_mode(void); void draw_border(UINT16 line); diff --git a/src/devices/video/vector.cpp b/src/devices/video/vector.cpp index 8606fe666aa..53286f3c623 100644 --- a/src/devices/video/vector.cpp +++ b/src/devices/video/vector.cpp @@ -145,7 +145,7 @@ void vector_device::clear_list(void) UINT32 vector_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - UINT32 flags = PRIMFLAG_ANTIALIAS(machine().options().antialias() ? 1 : 0) | PRIMFLAG_BLENDMODE(BLENDMODE_ADD) | PRIMFLAG_VECTOR(1); + UINT32 flags = PRIMFLAG_ANTIALIAS(1) | PRIMFLAG_BLENDMODE(BLENDMODE_ADD) | PRIMFLAG_VECTOR(1); const rectangle &visarea = screen.visible_area(); float xscale = 1.0f / (65536 * visarea.width()); float yscale = 1.0f / (65536 * visarea.height()); diff --git a/src/devices/video/vector.h b/src/devices/video/vector.h index 6163d63ad69..682ac71e7a4 100644 --- a/src/devices/video/vector.h +++ b/src/devices/video/vector.h @@ -53,18 +53,6 @@ public: void add_point(int x, int y, rgb_t color, int intensity); - void set_flicker(float newval); - float get_flicker(); - - void set_beam_width_min(float newval); - float get_beam_width_min(); - - void set_beam_width_max(float newval); - float get_beam_width_max(); - - void set_beam_intensity_weight(float newval); - float get_beam_intensity_weight(); - // device-level overrides virtual void device_start() override; diff --git a/src/devices/video/voodoo.cpp b/src/devices/video/voodoo.cpp index da324f7b160..1c7f84b6765 100644 --- a/src/devices/video/voodoo.cpp +++ b/src/devices/video/voodoo.cpp @@ -3333,7 +3333,7 @@ INT32 voodoo_device::lfb_w(voodoo_device* vd, offs_t offset, UINT32 data, UINT32 /* pixel pipeline part 2 handles color blending, fog, alpha, and final output */ PIXEL_PIPELINE_END(vd, stats, dither, dither4, dither_lookup, x, dest, depth, vd->reg[fbzMode].u, vd->reg[fbzColorPath].u, vd->reg[alphaMode].u, vd->reg[fogMode].u, - iterz, iterw, iterargb); + iterz, iterw, iterargb) { }; nextpixel: /* advance our pointers */ x++; diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index f543031b0af..0ee23f94638 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -112,10 +112,11 @@ static void execute_focus(running_machine &machine, int ref, int params, const c static void execute_ignore(running_machine &machine, int ref, int params, const char **param); static void execute_observe(running_machine &machine, int ref, int params, const char **param); static void execute_next(running_machine &machine, int ref, int params, const char **param); -static void execute_comment(running_machine &machine, int ref, int params, const char **param); +static void execute_comment_add(running_machine &machine, int ref, int params, const char **param); static void execute_comment_del(running_machine &machine, int ref, int params, const char **param); static void execute_comment_save(running_machine &machine, int ref, int params, const char **param); static void execute_comment_list(running_machine &machine, int ref, int params, const char **param); +static void execute_comment_commit(running_machine &machine, int ref, int params, const char **param); static void execute_bpset(running_machine &machine, int ref, int params, const char **param); static void execute_bpclear(running_machine &machine, int ref, int params, const char **param); static void execute_bpdisenable(running_machine &machine, int ref, int params, const char **param); @@ -296,12 +297,14 @@ void debug_command_init(running_machine &machine) debug_console_register_command(machine, "ignore", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_ignore); debug_console_register_command(machine, "observe", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_observe); - debug_console_register_command(machine, "comadd", CMDFLAG_NONE, 0, 1, 2, execute_comment); - debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment); + debug_console_register_command(machine, "comadd", CMDFLAG_NONE, 0, 1, 2, execute_comment_add); + debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment_add); debug_console_register_command(machine, "comdelete", CMDFLAG_NONE, 0, 1, 1, execute_comment_del); debug_console_register_command(machine, "comsave", CMDFLAG_NONE, 0, 0, 0, execute_comment_save); debug_console_register_command(machine, "comlist", CMDFLAG_NONE, 0, 0, 0, execute_comment_list); - + debug_console_register_command(machine, "commit", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit); + debug_console_register_command(machine, "/*", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit); + debug_console_register_command(machine, "bpset", CMDFLAG_NONE, 0, 1, 3, execute_bpset); debug_console_register_command(machine, "bp", CMDFLAG_NONE, 0, 1, 3, execute_bpset); debug_console_register_command(machine, "bpclear", CMDFLAG_NONE, 0, 0, 1, execute_bpclear); @@ -1130,7 +1133,7 @@ static void execute_observe(running_machine &machine, int ref, int params, const execute_comment - add a comment to a line -------------------------------------------------*/ -static void execute_comment(running_machine &machine, int ref, int params, const char *param[]) +static void execute_comment_add(running_machine &machine, int ref, int params, const char *param[]) { device_t *cpu; UINT64 address; @@ -1192,20 +1195,43 @@ static void execute_comment_list(running_machine &machine, int ref, int params, debug_console_printf(machine, "Error while parsing XML file\n"); } +/** + * @fn void execute_comment_commit(running_machine &machine, int ref, int params, const char *param[]) + * @brief Add and Save current list of comments in debugger + * + */ +static void execute_comment_commit(running_machine &machine, int ref, int params, const char *param[]) +{ + execute_comment_add(machine,ref,params,param); + execute_comment_save(machine,ref,params,param); +} + /*------------------------------------------------- execute_comment - add a comment to a line -------------------------------------------------*/ -// TODO: needs an autosave option in debugger for this, or a direct comment add and save. static void execute_comment_save(running_machine &machine, int ref, int params, const char *param[]) { if (debug_comment_save(machine)) - debug_console_printf(machine, "Comments successfully saved\n"); + debug_console_printf(machine, "Comment successfully saved\n"); else - debug_console_printf(machine, "Comments not saved\n"); + debug_console_printf(machine, "Comment not saved\n"); } +// TODO: add color hex editing capabilities for comments, see below for more info +/** + * @fn void execute_comment_color(running_machine &machine, int ref, int params, const char *param[]) + * @brief Modifies comment given at address $xx with given color + * Useful for marking comment with a different color scheme (for example by marking start and end of a given function visually). + * @param[in] "address,color" First is the comment address in the current context, color can be hexadecimal or shorthanded to common 1bpp RGB names. + * + * @todo check if the comment exists in the first place, bail out with error if not. + * @todo add shorthand for color modify and save + * + */ + + /*------------------------------------------------- execute_bpset - execute the breakpoint set diff --git a/src/emu/debug/debughlp.cpp b/src/emu/debug/debughlp.cpp index eaf77a1e59c..d397c726f15 100644 --- a/src/emu/debug/debughlp.cpp +++ b/src/emu/debug/debughlp.cpp @@ -227,6 +227,7 @@ static const help_item static_help_list[] = " comdelete
-- removes a comment from the given address\n" " comsave -- save the current comments to a file\n" " comlist -- print currently avaliable comments from file\n" + " commit[/*]
, -- gives a bulk comadd then comsave command\n" "\n" }, { @@ -1252,6 +1253,23 @@ static const help_item static_help_list[] = " Adds the comment 'undocumented opcode!' to the code at address 0x10\n" "\n" }, + { + "commit", + "\n" + " commit[/*]
,\n" + "\n" + "Adds a string to the disassembled code at
then saves to file. Basically same as comadd + comsave via a single line.\n" + "The shortcut for this command is simply '/*'\n" + "\n" + "Examples:\n" + "\n" + "commit 0, hello world.\n" + " Adds the comment 'hello world.' to the code at address 0x0\n" + "\n" + "/* 10, undocumented opcode!\n" + " Adds the comment 'undocumented opcode!' to the code at address 0x10\n" + "\n" + }, { "comsave", "\n" diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp index 1b99a55e1ba..dc799ca235b 100644 --- a/src/emu/emuopts.cpp +++ b/src/emu/emuopts.cpp @@ -120,7 +120,6 @@ const options_entry emu_options::s_option_entries[] = // vector options { nullptr, nullptr, OPTION_HEADER, "CORE VECTOR OPTIONS" }, - { OPTION_ANTIALIAS ";aa", "1", OPTION_BOOLEAN, "use antialiasing when drawing vectors" }, { OPTION_BEAM_WIDTH_MIN, "1.0", OPTION_FLOAT, "set vector beam width minimum" }, { OPTION_BEAM_WIDTH_MAX, "1.0", OPTION_FLOAT, "set vector beam width maximum" }, { OPTION_BEAM_INTENSITY_WEIGHT, "0", OPTION_FLOAT, "set vector beam intensity weight " }, diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h index 2b6630d38dd..e3ae4bda6d8 100644 --- a/src/emu/emuopts.h +++ b/src/emu/emuopts.h @@ -108,7 +108,6 @@ #define OPTION_EFFECT "effect" // core vector options -#define OPTION_ANTIALIAS "antialias" #define OPTION_BEAM_WIDTH_MIN "beam_width_min" #define OPTION_BEAM_WIDTH_MAX "beam_width_max" #define OPTION_BEAM_INTENSITY_WEIGHT "beam_intensity_weight" @@ -295,7 +294,6 @@ public: const char *effect() const { return value(OPTION_EFFECT); } // core vector options - bool antialias() const { return bool_value(OPTION_ANTIALIAS); } float beam_width_min() const { return float_value(OPTION_BEAM_WIDTH_MIN); } float beam_width_max() const { return float_value(OPTION_BEAM_WIDTH_MAX); } float beam_intensity_weight() const { return float_value(OPTION_BEAM_INTENSITY_WEIGHT); } diff --git a/src/emu/output.cpp b/src/emu/output.cpp index b905c45d70b..026e5f84ad0 100644 --- a/src/emu/output.cpp +++ b/src/emu/output.cpp @@ -9,6 +9,7 @@ #include "emu.h" #include "coreutil.h" +#include "modules/output/output_module.h" //************************************************************************** // OUTPUT MANAGER @@ -210,10 +211,10 @@ void output_manager::set_notifier(const char *outname, output_notifier_func call notifier for all outputs -------------------------------------------------*/ -void output_manager::notify_all(output_notifier_func callback, void *param) +void output_manager::notify_all(output_module *module) { for (auto &item : m_itemtable) - (*callback)(item.second.name.c_str(), item.second.value, param); + module->notify(item.second.name.c_str(), item.second.value); } diff --git a/src/emu/output.h b/src/emu/output.h index e83399aa4b1..69c5bc5b402 100644 --- a/src/emu/output.h +++ b/src/emu/output.h @@ -21,6 +21,7 @@ TYPE DEFINITIONS ***************************************************************************/ +class output_module; typedef void (*output_notifier_func)(const char *outname, INT32 value, void *param); // ======================> output_manager @@ -72,7 +73,7 @@ public: void set_notifier(const char *outname, output_notifier_func callback, void *param); // set a notifier on a particular output, or globally if nullptr - void notify_all(output_notifier_func callback, void *param); + void notify_all(output_module *module); // map a name to a unique ID UINT32 name_to_id(const char *outname); diff --git a/src/emu/rendutil.cpp b/src/emu/rendutil.cpp index ee78ad5125d..8fa5b1b7046 100644 --- a/src/emu/rendutil.cpp +++ b/src/emu/rendutil.cpp @@ -535,7 +535,7 @@ void render_line_to_quad(const render_bounds *bounds, float width, float length_ bounds1->x0 = modbounds.x1 - unity; bounds1->y0 = modbounds.y1 + unitx; - /* rotate the unit vector by -09 degrees and add to point 1 */ + /* rotate the unit vector by -90 degrees and add to point 1 */ bounds1->x1 = modbounds.x1 + unity; bounds1->y1 = modbounds.y1 - unitx; } diff --git a/src/frontend/mame/ui/datfile.cpp b/src/frontend/mame/ui/datfile.cpp index 921784de75c..51b0289e75f 100644 --- a/src/frontend/mame/ui/datfile.cpp +++ b/src/frontend/mame/ui/datfile.cpp @@ -518,7 +518,7 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount) } else { - name = s_list; + name = s_list.substr(curpoint); curpoint = ends; } diff --git a/src/frontend/mame/ui/sliders.cpp b/src/frontend/mame/ui/sliders.cpp index 867c396fc79..55227f28854 100644 --- a/src/frontend/mame/ui/sliders.cpp +++ b/src/frontend/mame/ui/sliders.cpp @@ -27,19 +27,19 @@ menu_sliders::~menu_sliders() { } -/*------------------------------------------------- - menu_sliders - handle the sliders menu --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders - handle the sliders menu +//------------------------------------------------- void menu_sliders::handle() { const event *menu_event; - /* process the menu */ + // process the menu menu_event = process(PROCESS_LR_REPEAT | (m_hidden ? PROCESS_CUSTOM_ONLY : 0)); if (menu_event != nullptr) { - /* handle keys if there is a valid item selected */ + // handle keys if there is a valid item selected if (menu_event->itemref != nullptr && menu_event->type == menu_item_type::SLIDER) { const slider_state *slider = (const slider_state *)menu_event->itemref; @@ -51,7 +51,7 @@ void menu_sliders::handle() switch (menu_event->iptkey) { - /* toggle visibility */ + // toggle visibility case IPT_UI_ON_SCREEN_DISPLAY: if (m_menuless_mode) menu::stack_pop(machine()); @@ -59,7 +59,7 @@ void menu_sliders::handle() m_hidden = !m_hidden; break; - /* decrease value */ + // decrease value case IPT_UI_LEFT: if (alt_pressed && shift_pressed) increment = -1; @@ -73,7 +73,7 @@ void menu_sliders::handle() increment = -slider->incval; break; - /* increase value */ + // increase value case IPT_UI_RIGHT: if (alt_pressed && shift_pressed) increment = 1; @@ -87,40 +87,40 @@ void menu_sliders::handle() increment = slider->incval; break; - /* restore default */ + // restore default case IPT_UI_SELECT: increment = slider->defval - curvalue; break; } - /* handle any changes */ + // handle any changes if (increment != 0) { INT32 newvalue = curvalue + increment; - /* clamp within bounds */ + // clamp within bounds if (newvalue < slider->minval) newvalue = slider->minval; if (newvalue > slider->maxval) newvalue = slider->maxval; - /* update the slider and recompute the menu */ + // update the slider and recompute the menu slider->update(machine(), slider->arg, slider->id, nullptr, newvalue); reset(reset_options::REMEMBER_REF); } } - /* if we are selecting an invalid item and we are hidden, skip to the next one */ + // if we are selecting an invalid item and we are hidden, skip to the next one else if (m_hidden) { - /* if we got here via up or page up, select the previous item */ + // if we got here via up or page up, select the previous item if (menu_event->iptkey == IPT_UI_UP || menu_event->iptkey == IPT_UI_PAGE_UP) { selected = (selected + item.size() - 1) % item.size(); validate_selection(-1); } - /* otherwise select the next item */ + // otherwise select the next item else if (menu_event->iptkey == IPT_UI_DOWN || menu_event->iptkey == IPT_UI_PAGE_DOWN) { selected = (selected + 1) % item.size(); @@ -131,16 +131,16 @@ void menu_sliders::handle() } -/*------------------------------------------------- - menu_sliders_populate - populate the sliders - menu --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders_populate - populate the sliders +// menu +//------------------------------------------------- void menu_sliders::populate() { std::string tempstring; - /* add UI sliders */ + // add UI sliders std::vector ui_sliders = ui().get_slider_list(); for (menu_item item : ui_sliders) { @@ -163,7 +163,7 @@ void menu_sliders::populate() item_append(menu_item_type::SEPARATOR); - /* add OSD options */ + // add OSD options std::vector osd_sliders = machine().osd().get_slider_list(); for (menu_item item : osd_sliders) { @@ -187,10 +187,10 @@ void menu_sliders::populate() custombottom = 2.0f * ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; } -/*------------------------------------------------- - menu_sliders_custom_render - perform our special - rendering --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders_custom_render - perform our special +// rendering +//------------------------------------------------- void menu_sliders::custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2) { @@ -204,78 +204,78 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo float text_height; INT32 curval; - /* determine the current value and text */ + // determine the current value and text curval = curslider->update(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE); - /* compute the current and default percentages */ + // compute the current and default percentages percentage = (float)(curval - curslider->minval) / (float)(curslider->maxval - curslider->minval); default_percentage = (float)(curslider->defval - curslider->minval) / (float)(curslider->maxval - curslider->minval); - /* assemble the text */ + // assemble the text tempstring.insert(0, " ").insert(0, curslider->description); - /* move us to the bottom of the screen, and expand to full width */ + // move us to the bottom of the screen, and expand to full width y2 = 1.0f - UI_BOX_TB_BORDER; y1 = y2 - bottom; x1 = UI_BOX_LR_BORDER; x2 = 1.0f - UI_BOX_LR_BORDER; - /* draw extra menu area */ + // draw extra menu area ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); y1 += UI_BOX_TB_BORDER; - /* determine the text height */ + // determine the text height ui().draw_text_full(container, tempstring.c_str(), 0, 0, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, nullptr, &text_height); - /* draw the thermometer */ + // draw the thermometer bar_left = x1 + UI_BOX_LR_BORDER; bar_area_top = y1; bar_width = x2 - x1 - 2.0f * UI_BOX_LR_BORDER; bar_area_height = line_height; - /* compute positions */ + // compute positions bar_top = bar_area_top + 0.125f * bar_area_height; bar_bottom = bar_area_top + 0.875f * bar_area_height; default_x = bar_left + bar_width * default_percentage; current_x = bar_left + bar_width * percentage; - /* fill in the percentage */ + // fill in the percentage container->add_rect(bar_left, bar_top, current_x, bar_bottom, UI_SLIDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw the top and bottom lines */ + // draw the top and bottom lines container->add_line(bar_left, bar_top, bar_left + bar_width, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); container->add_line(bar_left, bar_bottom, bar_left + bar_width, bar_bottom, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw default marker */ + // draw default marker container->add_line(default_x, bar_area_top, default_x, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); container->add_line(default_x, bar_bottom, default_x, bar_area_top + bar_area_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw the actual text */ + // draw the actual text ui().draw_text_full(container, tempstring.c_str(), x1 + UI_BOX_LR_BORDER, y1 + line_height, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, JUSTIFY_CENTER, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, &text_height); } } -/*------------------------------------------------- - slider_ui_handler - pushes the slider - menu on the stack and hands off to the - standard menu handler - -------------------------------------------------*/ +//------------------------------------------------- +// slider_ui_handler - pushes the slider +// menu on the stack and hands off to the +// standard menu handler +//------------------------------------------------- -UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui, bool state) +UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui) { UINT32 result; - /* if this is the first call, push the sliders menu */ - if (state) + // if this is the first call, push the sliders menu + if (topmost_menu() == nullptr) menu::stack_push(mui, container, true); - /* handle standard menus */ + // handle standard menus result = menu::ui_handler(container, mui); - /* if we are cancelled, pop the sliders menu */ + // if we are cancelled, pop the sliders menu if (result == UI_HANDLER_CANCEL) menu::stack_pop(mui.machine()); diff --git a/src/frontend/mame/ui/sliders.h b/src/frontend/mame/ui/sliders.h index 726c5c0b81d..bfb5bc26f4e 100644 --- a/src/frontend/mame/ui/sliders.h +++ b/src/frontend/mame/ui/sliders.h @@ -27,7 +27,7 @@ public: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; - static UINT32 ui_handler(render_container *container, mame_ui_manager &mui, bool state); + static UINT32 ui_handler(render_container *container, mame_ui_manager &mui); private: enum { diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index 4f0f6be9a83..ed5b3c9be7d 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -1572,7 +1572,7 @@ UINT32 mame_ui_manager::handler_ingame(render_container *container) // if the on-screen display isn't up and the user has toggled it, turn it on if ((machine().debug_flags & DEBUG_FLAG_ENABLED) == 0 && machine().ui_input().pressed(IPT_UI_ON_SCREEN_DISPLAY)) { - set_handler(UI_CALLBACK_TYPE_GENERAL, ui::menu_sliders::ui_handler, *this, true); + set_handler(UI_CALLBACK_TYPE_MENU, ui::menu_sliders::ui_handler, *this); return 1; } @@ -2015,8 +2015,8 @@ std::vector mame_ui_manager::slider_init(running_machine &machine { // add vector control sliders.push_back(slider_alloc(machine, SLIDER_ID_FLICKER + slider_index, _("Vector Flicker"), 0, 0, 1000, 10, nullptr)); - sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MIN + slider_index, _("Beam Width Minimum"), 1, 100, 1000, 1, nullptr)); - sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MAX + slider_index, _("Beam Width Maximum"), 1, 100, 1000, 1, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MIN + slider_index, _("Beam Width Minimum"), 100, 100, 1000, 1, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MAX + slider_index, _("Beam Width Maximum"), 100, 100, 1000, 1, nullptr)); sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_INTENSITY + slider_index, _("Beam Intensity Weight"), -1000, 0, 1000, 10, nullptr)); slider_index++; break; diff --git a/src/lib/formats/afs_dsk.cpp b/src/lib/formats/afs_dsk.cpp new file mode 100644 index 00000000000..5e1ff5aa66c --- /dev/null +++ b/src/lib/formats/afs_dsk.cpp @@ -0,0 +1,60 @@ +// license:GPL-2.0+ +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Acorn FileStore + + Disk image formats + +***************************************************************************/ + +#include "afs_dsk.h" + + +afs_format::afs_format() : wd177x_format(formats) +{ +} + +const char *afs_format::name() const +{ + return "afs"; +} + +const char *afs_format::description() const +{ + return "Acorn FileStore disk image"; +} + +const char *afs_format::extensions() const +{ + return "adl,img"; +} + +int afs_format::identify(io_generic *io, UINT32 form_factor) +{ + int type = find_size(io, form_factor); + + if (type != -1) + return 50; + return 0; +} + +int afs_format::get_image_offset(const format &f, int head, int track) +{ + if (f.sector_base_id == -1) + return (track * f.head_count + head) * compute_track_size(f); + else + return (f.track_count * head + track) * compute_track_size(f); +} + +const afs_format::format afs_format::formats[] = +{ + { // 640K 3 1/2 inch 80 track double sided double density (interleaved) - gaps unverified + floppy_image::FF_35, floppy_image::DSQD, floppy_image::MFM, + 2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43 + }, + {} +}; + + +const floppy_format_type FLOPPY_AFS_FORMAT = &floppy_image_format_creator; diff --git a/src/lib/formats/afs_dsk.h b/src/lib/formats/afs_dsk.h new file mode 100644 index 00000000000..e8e7190f7cd --- /dev/null +++ b/src/lib/formats/afs_dsk.h @@ -0,0 +1,37 @@ +// license:GPL-2.0+ +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Acorn FileStore + + Disk image formats + +***************************************************************************/ + +#pragma once + +#ifndef __AFS_DSK_H__ +#define __AFS_DSK_H__ + +#include "wd177x_dsk.h" + + +class afs_format : public wd177x_format +{ +public: + afs_format(); + + virtual int identify(io_generic *io, UINT32 form_factor) override; + virtual int get_image_offset(const format &f, int head, int track) override; + virtual const char *name() const override; + virtual const char *description() const override; + virtual const char *extensions() const override; + +private: + static const format formats[]; +}; + + +extern const floppy_format_type FLOPPY_AFS_FORMAT; + +#endif // __AFS_DSK_H__ diff --git a/src/lib/formats/fsd_dsk.cpp b/src/lib/formats/fsd_dsk.cpp index 6fec1c9754e..0896c47d8ac 100644 --- a/src/lib/formats/fsd_dsk.cpp +++ b/src/lib/formats/fsd_dsk.cpp @@ -92,6 +92,7 @@ int fsd_format::identify(io_generic *io, UINT32 form_factor) if (memcmp(h, "FSD", 3) == 0) { return 100; } + LOG_FORMATS("fsd: no match\n"); return 0; } @@ -112,18 +113,18 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) //popmessage("Loading image of '%s'\n", title); - desc_pc_sector sects[10]; + desc_pc_sector sects[256]; UINT8 total_tracks = img[pos++]; UINT8 tnum, hnum, snum, ssize, error; hnum = 0; - //osd_printf_verbose("%d Tracks\n", total_tracks+1); - //osd_printf_verbose("Tr.# No.S Sec.# Tr.ID Head# SecID IDsiz REsiz Error\n"); + LOG_FORMATS("%02d Tracks\n", total_tracks+1); + LOG_FORMATS("Tr.# No.S Sec.# Tr.ID Head# SecID IDsiz REsiz Error\n"); for(int curr_track=0; curr_track <= total_tracks; curr_track++) { UINT8 track = img[pos++]; UINT8 spt = img[pos++]; - //osd_printf_verbose("%x %x\n", track, spt); + LOG_FORMATS("%02X %02X\n", track, spt); if (spt > 0) // formatted { UINT8 readable = img[pos++]; @@ -145,22 +146,16 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) sects[i].bad_crc = (error & 0x0e) == 0x0e; sects[i].data = &img[pos]; pos += sects[i].actual_size; - //osd_printf_verbose("Read %x %x %x %x %x %x %x\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, error); + LOG_FORMATS("Read %02X %02X %02X %02X %02X %02X %02X\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, error); } else { - throw emu_fatalerror("fsd_format: Unsupported unreadable sector on track %d sector %d head %d", track, i, hnum); - - // Unreadable sectors not supported!! - //sects[i].track = track; - //sects[i].head = 0; - //sects[i].sector = i; - //sects[i].size = 0; - //sects[i].actual_size = 0; - //sects[i].deleted = false; - //sects[i].bad_crc = false; - //sects[i].data = nullptr; - //osd_printf_verbose("Unread %x %x %x %x %x %x %x\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, 0); + LOG_FORMATS("Unreadable sector on track %02d sector %02X head %02d", track, i, hnum); + sects[i].actual_size = 0; + sects[i].deleted = false; + sects[i].bad_crc = false; + sects[i].data = nullptr; + LOG_FORMATS("Unread %02X %02X %02X %02X %02X %02X %02X\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, 0); } } } @@ -170,7 +165,7 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) sects[0].head = hnum; sects[0].sector = 0; sects[0].size = 0; - //osd_printf_verbose("Unform %x %x %x %x %x %x %x\n", 0, sects[0].track, sects[0].head, sects[0].sector, sects[0].size, sects[0].actual_size, 0); + LOG_FORMATS("Unform %02X %02X %02X %02X %02X %02X %02X\n", 0, sects[0].track, sects[0].head, sects[0].sector, sects[0].size, sects[0].actual_size, 0); } build_wd_track_fm(curr_track, hnum, image, 50000, spt, sects, 10, 40, 10); } diff --git a/src/lib/formats/sorc_cas.cpp b/src/lib/formats/sorc_cas.cpp index a900f77d5e5..2c714135a12 100644 --- a/src/lib/formats/sorc_cas.cpp +++ b/src/lib/formats/sorc_cas.cpp @@ -32,7 +32,7 @@ header and leader bytes. #define WAVEENTRY_LOW -32768 #define WAVEENTRY_HIGH 32767 -#define SORCERER_WAV_FREQUENCY 4800 +#define SORCERER_WAV_FREQUENCY 4788 // image size static int sorcerer_image_size; diff --git a/src/mame/audio/mario.cpp b/src/mame/audio/mario.cpp index ba8c797f147..d30fada6968 100644 --- a/src/mame/audio/mario.cpp +++ b/src/mame/audio/mario.cpp @@ -24,17 +24,17 @@ #define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A)) #define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A)) -#define I8035_T_R(M,N) ((soundlatch2_byte_r(M,0) >> (N)) & 1) -#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); soundlatch2_byte_w(M, 0, m_portT); } while (0) +#define I8035_T_R(M,N) ((m_soundlatch2->read(M,0) >> (N)) & 1) +#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(M, 0, m_portT); } while (0) -#define I8035_P1_R(M) (soundlatch3_byte_r(M,0)) -#define I8035_P2_R(M) (soundlatch4_byte_r(M,0)) -#define I8035_P1_W(M,D) soundlatch3_byte_w(M,0,D) +#define I8035_P1_R(M) (m_soundlatch3->read(M,0)) +#define I8035_P2_R(M) (m_soundlatch4->read(M,0)) +#define I8035_P1_W(M,D) m_soundlatch3->write(M,0,D) #if (USE_8039) -#define I8035_P2_W(M,D) do { soundlatch4_byte_w(M,0,D); } while (0) +#define I8035_P2_W(M,D) do { m_soundlatch4->write(M,0,D); } while (0) #else -#define I8035_P2_W(M,D) do { set_ea(M, ((D) & 0x20) ? 0 : 1); soundlatch4_byte_w(M,0,D); } while (0) +#define I8035_P2_W(M,D) do { set_ea(M, ((D) & 0x20) ? 0 : 1); m_soundlatch4->write(M,0,D); } while (0) #endif #define I8035_P1_W_AH(M,B,D) I8035_P1_W(M,ACTIVEHIGH_PORT_BIT(I8035_P1_R(M),B,(D))) @@ -691,12 +691,12 @@ void mario_state::sound_reset() #endif /* FIXME: convert to latch8 */ - soundlatch_clear_byte_w(space, 0, 0); - soundlatch2_clear_byte_w(space, 0, 0); - soundlatch3_clear_byte_w(space, 0, 0); - soundlatch4_clear_byte_w(space, 0, 0); - I8035_P1_W(space, 0x00); /* Input port */ - I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */ + m_soundlatch->clear_w(space, 0, 0); + if (m_soundlatch2) m_soundlatch2->clear_w(space, 0, 0); + if (m_soundlatch3) m_soundlatch3->clear_w(space, 0, 0); + if (m_soundlatch4) m_soundlatch4->clear_w(space, 0, 0); + if (m_soundlatch3) I8035_P1_W(space, 0x00); /* Input port */ + if (m_soundlatch4) I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */ m_last = 0; } @@ -734,7 +734,7 @@ READ8_MEMBER(mario_state::mario_sh_tune_r) UINT8 p2 = I8035_P2_R(space); if ((p2 >> 7) & 1) - return soundlatch_byte_r(space, offset); + return m_soundlatch->read(space, offset); else return (SND[(0x1000 + (p2 & 0x0f) * 256 + offset) & mask]); } @@ -777,7 +777,7 @@ WRITE8_MEMBER(mario_state::masao_sh_irqtrigger_w) WRITE8_MEMBER(mario_state::mario_sh_tuneselect_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); } /* Sound 0 and 1 are pulsed !*/ @@ -883,6 +883,11 @@ MACHINE_CONFIG_FRAGMENT( mario_audio ) MCFG_CPU_IO_MAP(mario_sound_io_map) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_GENERIC_LATCH_8_ADD("soundlatch4") #if OLD_SOUND MCFG_SOUND_ADD("discrete", DISCRETE, 0) @@ -910,8 +915,10 @@ MACHINE_CONFIG_FRAGMENT( masao_audio ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 14318000/6) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/aristmk6.cpp b/src/mame/drivers/aristmk6.cpp index adb078c71d5..505366fc554 100644 --- a/src/mame/drivers/aristmk6.cpp +++ b/src/mame/drivers/aristmk6.cpp @@ -235,9 +235,16 @@ static MACHINE_CONFIG_START( aristmk6, aristmk6_state ) MACHINE_CONFIG_END -#define ROM_LOAD32_WORD_BIOS(bios,name,offset,length,hash) \ +#define ROM_LOAD32_WORD_BIOS(bios, name, offset, length, hash) \ ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(2) | ROM_BIOS(bios+1)) /* Note '+1' */ +#define ROM_LOAD64_WORD_BIOS(bios, name, offset, length, hash) \ + ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(6) | ROM_BIOS(bios+1)) /* Note '+1' */ + + +// to test whether the BIOS loading is fine, let's check the correct endianness of text string in CPU space +// typically at around 0x3100-0x3200, 0x3600-0x3700 for Left/Right BIOS dumps (2 files) + #define ARISTMK6_BIOS \ ROM_REGION( 0x0400000, "maincpu", ROMREGION_ERASEFF) \ ROM_SYSTEM_BIOS( 0, "bios0", "Aristocrat MK6 Base (15011025, Malaysia)" ) \ @@ -247,77 +254,80 @@ MACHINE_CONFIG_END ROM_LOAD32_WORD_BIOS( 1, "11011901.u83", 0x0000000, 0x0200000, CRC(73dcb11c) SHA1(69ae4f32a0c9141b2a82ff3935b0cd20333d2964) ) \ ROM_LOAD32_WORD_BIOS( 1, "11011901.u70", 0x0000002, 0x0200000, CRC(d3dd2210) SHA1(3548f8cc39859d3f44a55f6bae48966a2d48e0eb) ) \ ROM_SYSTEM_BIOS( 2, "bios2", "Aristocrat MK6 Base (19012801)" ) \ - ROM_LOAD32_WORD_BIOS( 2, "19012801 System Left", 0x0000000, 0x0200000, CRC(b03bd17c) SHA1(f281e80f6dda5b727ed71d2deebe3b0ff548773f) ) /* From Cactus Corral & Cashman Tonight & Heart of Begas & Moonlight Waltz */ \ + ROM_LOAD32_WORD_BIOS( 2, "19012801 System Left", 0x0000002, 0x0200000, CRC(b03bd17c) SHA1(f281e80f6dda5b727ed71d2deebe3b0ff548773f) ) /* From Cactus Corral & Cashman Tonight & Heart of Vegas & Moonlight Waltz */ \ ROM_LOAD32_WORD_BIOS( 2, "19012801 System Right", 0x0000000, 0x0200000, CRC(5b20a96c) SHA1(5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926) ) \ - ROM_SYSTEM_BIOS( 3, "bios3", "Aristocrat MK6 Base ('system 13')" ) \ - ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Left", 0x0000000, 0x0200000, CRC(38e8f659) SHA1(88c6acba99b0aca023c6f4d27c061c231490e9e0) ) /* from Grizzly */ \ + ROM_SYSTEM_BIOS( 3, "bios3", "Aristocrat MK6 Base (13012001)" ) \ + ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Left", 0x0000002, 0x0200000, CRC(38e8f659) SHA1(88c6acba99b0aca023c6f4d27c061c231490e9e0) ) /* From Grizzly & Queen of the Nile */ \ ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Right", 0x0000000, 0x0200000, CRC(e627dbfa) SHA1(4fedbe0975ceb7dc0ebebf18a7708d78984db9b7) ) \ ROM_SYSTEM_BIOS( 4, "bios4", "Aristocrat MK6 Base (07010801)" ) \ - ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_LEFT", 0x0000000, 0x0200000, CRC(8e92af68) SHA1(00d2bb655b7964a9652896741210ec534df0b0d2) ) /* From Jailbreak */ \ + ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_LEFT", 0x0000002, 0x0200000, CRC(8e92af68) SHA1(00d2bb655b7964a9652896741210ec534df0b0d2) ) /* From Jailbreak */ \ ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_RIGHT", 0x0000000, 0x0200000, CRC(8c148c11) SHA1(5ff3be18455b4f04675fec8d5b9d881295c65e23) ) \ - ROM_SYSTEM_BIOS( 5, "bios5", "Aristocrat MK6 Base ('system 21')" ) \ - ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_left", 0x0000000, 0x0200000, CRC(0d271470) SHA1(5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479) ) /* From Red Baron */ \ + ROM_SYSTEM_BIOS( 5, "bios5", "Aristocrat MK6 Base (21012901)" ) \ + ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_left", 0x0000002, 0x0200000, CRC(0d271470) SHA1(5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479) ) /* From Red Baron */ \ ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_right", 0x0000000, 0x0200000, CRC(757618f2) SHA1(43f9a3e7d544979f8c6974945914d9e099b02abd) ) \ ROM_SYSTEM_BIOS( 6, "bios6", "Aristocrat MK6 Base (24013001)" ) \ - ROM_LOAD32_WORD_BIOS( 6, "24013001 Left", 0x0000000, 0x0200000, CRC(06ae7e07) SHA1(39a45575b66906d73b519988d1001c99b05c5f34) ) /* From Wild Stalion */ \ + ROM_LOAD32_WORD_BIOS( 6, "24013001 Left", 0x0000002, 0x0200000, CRC(06ae7e07) SHA1(39a45575b66906d73b519988d1001c99b05c5f34) ) /* From Wild Stalion */ \ ROM_LOAD32_WORD_BIOS( 6, "24013001 Right", 0x0000000, 0x0200000, CRC(e97afedf) SHA1(10ca3b015afaff5d7812f0f5207b2535602136a5) ) \ - ROM_SYSTEM_BIOS( 7, "bios7", "Aristocrat MK6 Base (system 04)" ) \ - ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Left", 0x0000000, 0x0100000, CRC(21182775) SHA1(7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a) ) /* from Diamonds Forever */ \ + ROM_SYSTEM_BIOS( 7, "bios7", "Aristocrat MK6 Base (04010501)" ) \ + ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Left", 0x0000002, 0x0100000, CRC(21182775) SHA1(7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a) ) /* From Diamonds Forever */ \ ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Right", 0x0000000, 0x0100000, CRC(3daefb7a) SHA1(411471713219f4bab5ccf5fe7a12a6c138c8c550) ) \ ROM_SYSTEM_BIOS( 8, "bios8", "Aristocrat MK6 Base (05010601)" ) \ - ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_LEFT", 0x0000000, 0x0100000, CRC(b3e6b4a0) SHA1(3bf398c9257579f8e51ce716d6ebfa74fa510273) ) /* From Thai Princess & Venetian Nights */ \ + ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_LEFT", 0x0000002, 0x0100000, CRC(b3e6b4a0) SHA1(3bf398c9257579f8e51ce716d6ebfa74fa510273) ) /* From Thai Princess & Venetian Nights */ \ ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_RIGHT", 0x0000000, 0x0100000, CRC(c12eac11) SHA1(683b9ddc323865ace7dca37d13b55de6e42759a5) ) \ - ROM_SYSTEM_BIOS( 9, "bios9", "Aristocrat MK6 Base (13012001)" ) \ - ROM_LOAD32_WORD_BIOS( 9, "System 13012001_left", 0x0000000, 0x0400000, CRC(d346773f) SHA1(baa9103478fd667eecd13064cfa051a06763c6ca) ) /* From Queen of the Nile */ \ - ROM_LOAD32_WORD_BIOS( 9, "System 13012001_right", 0x0000000, 0x0400000, CRC(4c8bfa18) SHA1(cac4932a5b19ed8c2798693ac387cc1a6f0201c7) ) \ + ROM_SYSTEM_BIOS( 9, "bios9", "Aristocrat MK6 Base (03010301)" ) \ + ROM_LOAD64_WORD_BIOS( 9, "03010301.u70", 0x0000006, 0x0100000, CRC(5ae69121) SHA1(36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b) ) /* From Queen of the Nile Special Edition */ \ + ROM_LOAD64_WORD_BIOS( 9, "03010301.u71", 0x0000002, 0x0100000, CRC(d793440a) SHA1(dced4c04bde13293af77a9a1f4c5c606e3758de0) ) \ + ROM_LOAD64_WORD_BIOS( 9, "03010301.u83", 0x0000004, 0x0100000, CRC(c8580554) SHA1(58b8bfff2f8d298c4e3be2b01900800c45fa7ad7) ) \ + ROM_LOAD64_WORD_BIOS( 9, "03010301.u84", 0x0000000, 0x0100000, CRC(a34a9f16) SHA1(b8750e6ceb1715da8e5ac2f0183254e29a042641) ) \ ROM_SYSTEM_BIOS( 10, "bios10", "Aristocrat MK6 Base (02010201)" ) \ - ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u70", 0x0000000, 0x0100000, CRC(9b2db442) SHA1(d512398a2d9257bd385dc50d61c63cd1a47300ba) ) /* From Money Tree & From Go For Green */ \ - ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u71", 0x0000000, 0x0100000, CRC(24d5614a) SHA1(fdcf3826dccc72b74b66379b1411cf211d5a1670) ) \ - ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u83", 0x0000000, 0x0100000, CRC(5f64a20c) SHA1(397404ab6d2a1aa3c1fc77bb9421fef7079b65a5) ) \ - ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u84", 0x0000000, 0x0100000, CRC(0920930f) SHA1(771b0f62442d1c75b1bb59ad82365b7ab8747173) ) \ + ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u70", 0x0000006, 0x0100000, CRC(9b2db442) SHA1(d512398a2d9257bd385dc50d61c63cd1a47300ba) ) /* From Money Tree & From Go For Green */ \ + ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u71", 0x0000002, 0x0100000, CRC(24d5614a) SHA1(fdcf3826dccc72b74b66379b1411cf211d5a1670) ) \ + ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u83", 0x0000004, 0x0100000, CRC(5f64a20c) SHA1(397404ab6d2a1aa3c1fc77bb9421fef7079b65a5) ) \ + ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u84", 0x0000000, 0x0100000, CRC(0920930f) SHA1(771b0f62442d1c75b1bb59ad82365b7ab8747173) ) \ ROM_SYSTEM_BIOS( 11, "bios11", "Aristocrat MK6 Base (02010114)" ) \ - ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u70", 0x0000000, 0x0100000, CRC(3ba4379f) SHA1(84367f12c4c9224d2ab9cae83ae8727de338408c) ) /* from 'Arabian Nights' */ \ - ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u71", 0x0000000, 0x0100000, CRC(8f83c3dd) SHA1(a5f9d80b4b515b24299d0241e1665cfd9da8bab7) ) \ - ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u83", 0x0000000, 0x0100000, CRC(945104d7) SHA1(e372d0cf889c72b5d001b26fe4a925a28486537f) ) \ - ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u84", 0x0000000, 0x0100000, CRC(183e3836) SHA1(4c802d0cd010bc007acb3a83e37aaa29b2d13d87) ) \ + ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u70", 0x0000006, 0x0100000, CRC(3ba4379f) SHA1(84367f12c4c9224d2ab9cae83ae8727de338408c) ) /* From Arabian Nights */ \ + ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u71", 0x0000002, 0x0100000, CRC(8f83c3dd) SHA1(a5f9d80b4b515b24299d0241e1665cfd9da8bab7) ) \ + ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u83", 0x0000004, 0x0100000, CRC(945104d7) SHA1(e372d0cf889c72b5d001b26fe4a925a28486537f) ) \ + ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u84", 0x0000000, 0x0100000, CRC(183e3836) SHA1(4c802d0cd010bc007acb3a83e37aaa29b2d13d87) ) \ ROM_SYSTEM_BIOS( 12, "bios12", "Aristocrat MK6 Base (USA)" ) \ - ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u70-27v160", 0x0000000, 0x0200000, CRC(7138fec4) SHA1(f81331d1875ac574d3e6c98be218ff25c6c7be5a) ) /* From Dave Dragon */ \ + ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u70-27v160", 0x0000002, 0x0200000, CRC(7138fec4) SHA1(f81331d1875ac574d3e6c98be218ff25c6c7be5a) ) /* From Dave Dragon */ \ ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u83-27v160", 0x0000000, 0x0200000, CRC(889ffd82) SHA1(9c98c9cdcf5f7d05095f11006418133029e9f0f8) ) \ ROM_SYSTEM_BIOS( 13, "bios13", "Aristocrat MK6 Base (USA, set 2)" ) \ - ROM_LOAD32_WORD_BIOS( 13, "system-base-u70-01.03.06-m27v160", 0x0000000, 0x0200000, CRC(2f9d9a29) SHA1(fdebfaca9a579d7249379f19aef22fbfd66bf943) ) /* From Diamond Eyes US */ \ + ROM_LOAD32_WORD_BIOS( 13, "system-base-u70-01.03.06-m27v160", 0x0000002, 0x0200000, CRC(2f9d9a29) SHA1(fdebfaca9a579d7249379f19aef22fbfd66bf943) ) /* From Diamond Eyes US */ \ ROM_LOAD32_WORD_BIOS( 13, "system-base-u83-01.03.06-m27v160", 0x0000000, 0x0200000, CRC(bd48ca55) SHA1(8fb1576cbeb1c64c358880714740195d2e73e03e) ) \ ROM_SYSTEM_BIOS( 14, "bios14", "Aristocrat MK6 Base (Set Chips, 06.02.20, USA)" ) \ - ROM_LOAD32_WORD_BIOS( 14, "U70-03 Cs 0364A", 0x0000000, 0x0100000, CRC(199ed3b9) SHA1(e3ee81ffd713f09e35a10c38e4f59282e2c5cd30) ) \ + ROM_LOAD32_WORD_BIOS( 14, "U70-03 Cs 0364A", 0x0000002, 0x0100000, CRC(199ed3b9) SHA1(e3ee81ffd713f09e35a10c38e4f59282e2c5cd30) ) \ ROM_LOAD32_WORD_BIOS( 14, "U83-02 Cs 08DD", 0x0000000, 0x0100000, CRC(e4001f60) SHA1(5da34efb1ac0f7c84a48e09363d20cfecda4bcf1) ) \ ROM_SYSTEM_BIOS( 15, "bios15", "Aristocrat MK6 Base (01.04.08, USA)" ) \ - ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u70-u20-left-cs-8509", 0x0000000, 0x0200000, CRC(0dfcad10) SHA1(53798be000304aed38909f5fd8470a68bedd8229) ) /* from bubdul */ \ + ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u70-u20-left-cs-8509", 0x0000002, 0x0200000, CRC(0dfcad10) SHA1(53798be000304aed38909f5fd8470a68bedd8229) ) /* From Bob and Dolly */ \ ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u83-u10-right-cs-d74e", 0x0000000, 0x0200000, CRC(95333304) SHA1(7afe49d6c5e4d6820f349778557daa88c5366a51) )\ ROM_SYSTEM_BIOS( 16, "bios16", "Aristocrat MK6 Base (02061013)" ) \ - ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Left", 0x0000000, 0x0100000, CRC(e70a7007) SHA1(0935f924866162d9c0fbdbb99391cbf730a04b76) ) \ + ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Left", 0x0000002, 0x0100000, CRC(e70a7007) SHA1(0935f924866162d9c0fbdbb99391cbf730a04b76) ) \ ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Right", 0x0000000, 0x0100000, CRC(7a8619a5) SHA1(bd03ddb68817c1660b009e102ccf69e5b603b875) ) \ ROM_SYSTEM_BIOS( 17, "bios17", "Aristocrat MK6 Base (03030708)" ) \ - ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA LEFT", 0x0000000, 0x0100000, CRC(4e5ad823) SHA1(77ab1c29c6172cfdcef776222a72b2b44114d4da) ) \ + ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA LEFT", 0x0000002, 0x0100000, CRC(4e5ad823) SHA1(77ab1c29c6172cfdcef776222a72b2b44114d4da) ) /* From Scatter Magic II */ \ ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA RIGHT", 0x0000000, 0x0100000, CRC(b4b3c6a5) SHA1(5747f98a6eaa5c24a23d1d76a28b33a3bfbbfd1f) ) \ ROM_SYSTEM_BIOS( 18, "bios18", "Aristocrat MK6 Base (09011001)" ) \ - ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_LEFT", 0x0000000, 0x0200000, CRC(229c2e63) SHA1(91fd2b1acb69efe073647e93db9f11042add2feb) ) \ + ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_LEFT", 0x0000002, 0x0200000, CRC(229c2e63) SHA1(91fd2b1acb69efe073647e93db9f11042add2feb) ) \ ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_RIGHT", 0x0000000, 0x0200000, CRC(8a853f80) SHA1(9a75498f7b02c81a483b4e1c158f35f0ee4c0112) ) \ ROM_SYSTEM_BIOS( 19, "bios19", "Aristocrat MK6 Base (11011501)" ) \ - ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_LEFT", 0x0000000, 0x0200000, CRC(c5cc3461) SHA1(5b43c4cb6110a6ccf67cd0f3789253f6872b20c4) ) \ + ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_LEFT", 0x0000002, 0x0200000, CRC(c5cc3461) SHA1(5b43c4cb6110a6ccf67cd0f3789253f6872b20c4) ) \ ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_RIGHT", 0x0000000, 0x0200000, CRC(de4c3aed) SHA1(21596a2edd20eb7de7a4ec8900a270b09c8f326f) ) \ ROM_SYSTEM_BIOS( 20, "bios20", "Aristocrat MK6 Base (14011913)" ) \ - ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Left", 0x0000000, 0x0200000, CRC(9a4cefdf) SHA1(6c15bc565ede8af19361d60ee1e6657a8055c92c) ) \ + ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Left", 0x0000002, 0x0200000, CRC(9a4cefdf) SHA1(6c15bc565ede8af19361d60ee1e6657a8055c92c) ) \ ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Right", 0x0000000, 0x0200000, CRC(01d13b89) SHA1(b1013366d0803dfbec5a5f90f6a5cea862de0513) ) \ ROM_SYSTEM_BIOS( 21, "bios21", "Aristocrat MK6 Base (01.04.11)" ) \ - ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u70", 0x0000000, 0x0200000, CRC(787f2b07) SHA1(2548289e44f4b935346b759afb5383bdbac04c3e) ) \ + ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u70", 0x0000002, 0x0200000, CRC(787f2b07) SHA1(2548289e44f4b935346b759afb5383bdbac04c3e) ) \ ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u83", 0x0000000, 0x0200000, CRC(2dae8ca0) SHA1(7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0) ) \ ROM_SYSTEM_BIOS( 22, "bios22", "Aristocrat MK6 Set Chips (06.03.04)" ) \ ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U2", 0x0000000, 0x0100000, CRC(6f5f5ef1) SHA1(70a43fba4de47ed8dcf38b25eafd5873f3428e72) ) \ - ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U3", 0x0000000, 0x0100000, CRC(7034f26b) SHA1(7be78f23bec38d05240cdfe1186ec0c8291f5a1c) ) \ - ROM_SYSTEM_BIOS( 23, "bios23", "Aristocrat MK6 (USA, set 3)" ) \ - ROM_LOAD32_WORD_BIOS( 23,"US_system_.u70", 0x0000000, 0x0200000, CRC(0095e3f9) SHA1(d2e8786158b1ab0a614aab21cf1d14cbc04754af) ) \ + ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U3", 0x0000002, 0x0100000, CRC(7034f26b) SHA1(7be78f23bec38d05240cdfe1186ec0c8291f5a1c) ) \ + ROM_SYSTEM_BIOS( 23, "bios23", "Aristocrat MK6 Base (10010110)" ) \ + ROM_LOAD32_WORD_BIOS( 23,"US_system_.u70", 0x0000002, 0x0200000, CRC(0095e3f9) SHA1(d2e8786158b1ab0a614aab21cf1d14cbc04754af) ) \ ROM_LOAD32_WORD_BIOS( 23,"US_system_.u83", 0x0000000, 0x0200000, CRC(2c7f1ec3) SHA1(d03167f43ed6f9596080d91472695829378cef0a) ) + ROM_START( aristmk6 ) ARISTMK6_BIOS @@ -2060,10 +2070,6 @@ ROM_END ROM_START( qnilese ) ARISTMK6_BIOS ROM_REGION( 0x2000000, "game_rom", ROMREGION_ERASEFF) - ROM_LOAD32_WORD("10102811.u70", 0x1800002, 0x0100000, CRC(5ae69121) SHA1(36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b) ) - ROM_LOAD32_WORD("10102811.u71", 0x1000002, 0x0100000, CRC(d793440a) SHA1(dced4c04bde13293af77a9a1f4c5c606e3758de0) ) - ROM_LOAD32_WORD("10102811.u83", 0x1800000, 0x0100000, CRC(c8580554) SHA1(58b8bfff2f8d298c4e3be2b01900800c45fa7ad7) ) - ROM_LOAD32_WORD("10102811.u84", 0x1000000, 0x0100000, CRC(a34a9f16) SHA1(b8750e6ceb1715da8e5ac2f0183254e29a042641) ) ROM_LOAD32_WORD("10102811.u73", 0x0000002, 0x0400000, CRC(27391233) SHA1(e1d546cc9a57db894bdfb24592048578f5828ee5) ) ROM_LOAD32_WORD("10102811.u86", 0x0000000, 0x0400000, CRC(4c7bdba1) SHA1(796c9da25bbfe389aae5c03b42e15500c91a60d4) ) ROM_END @@ -2885,7 +2891,7 @@ GAME( 2001, indream, aristmk6, aristmk6, aristmk6, driver_device, 0, RO GAME( 2002, indremce, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Cash Express (20109411, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/10, A - 12/07/02 GAME( 2003, indremll, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Lady Luck (20151911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 742, C - 15/10/03 GAME( 2003, indrem2c, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming 2nd Chance (10150611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 753, B - 08/12/03 -GAME( 2003, indremmm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Maximillion$ (10130711, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/12, A - 17/01/03 +GAME( 2003, indremmm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Maximillions (10130711, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/12, A - 17/01/03 GAME( 2001, indgldcm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Gold - Mr. Cashman (10102511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 674/1, A- 21/11/01 GAME( 2004, indprncs, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Princess (10174111, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 764, A - 07/04/04 GAME( 2002, jailbrk, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Jailbreak (10125611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 716, A - 14/11/02 @@ -2999,7 +3005,7 @@ GAME( 2004, wheregld, aristmk6, aristmk6, aristmk6, driver_device, 0, RO GAME( 2004, wheregldsp,wheregld, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Where's The Gold (10124811, NSW/ACT, Show Program)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 756, B - 26/02/04 GAME( 2004, wheregldm,wheregld, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Where's the Gold (20177111, Malaysia)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 756, C - 17/06/04 GAME( 2003, whtwater, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "White Water (0151075, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US054, A - 4/11/03 -GAME( 2006, wikwin2, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wicked Winnings 2 - Power Pay (10214011, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 796, A - 28/02/06 +GAME( 2006, wikwin2, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wicked Winnings II - Power Pay (10214011, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 796, A - 28/02/06 GAME( 2002, wldafr, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Africa - Millioniser (0351083, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4076, D - 5/08/02 GAME( 2006, wldcata6, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Cats (10237511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 811, B - 20/06/06 GAME( 2003, wldgoos, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Goose (20131911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 732, B - 02/06/03 diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp index e2a9dd65b3a..0dbc5915b60 100644 --- a/src/mame/drivers/armedf.cpp +++ b/src/mame/drivers/armedf.cpp @@ -361,12 +361,12 @@ WRITE16_MEMBER(armedf_state::bootleg_io_w) WRITE16_MEMBER(armedf_state::sound_command_w) { if (ACCESSING_BITS_0_7) - soundlatch_byte_w(space, 0, ((data & 0x7f) << 1) | 1); + m_soundlatch->write(space, 0, ((data & 0x7f) << 1) | 1); } READ8_MEMBER(armedf_state::soundlatch_clear_r) { - soundlatch_clear_byte_w(space, 0, 0); + m_soundlatch->clear_w(space, 0, 0); return 0; } @@ -750,7 +750,7 @@ static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, armedf_state ) AM_RANGE(0x2, 0x2) AM_DEVWRITE("dac1", dac_device, write_signed8) AM_RANGE(0x3, 0x3) AM_DEVWRITE("dac2", dac_device, write_signed8) AM_RANGE(0x4, 0x4) AM_READ(soundlatch_clear_r) - AM_RANGE(0x6, 0x6) AM_READ(soundlatch_byte_r) + AM_RANGE(0x6, 0x6) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -1205,6 +1205,8 @@ static MACHINE_CONFIG_START( terraf, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1255,6 +1257,8 @@ static MACHINE_CONFIG_START( terrafjb, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1307,6 +1311,8 @@ static MACHINE_CONFIG_START( kozure, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1353,6 +1359,8 @@ static MACHINE_CONFIG_START( armedf, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1401,6 +1409,8 @@ static MACHINE_CONFIG_START( cclimbr2, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1449,6 +1459,8 @@ static MACHINE_CONFIG_START( legion, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1496,6 +1508,8 @@ static MACHINE_CONFIG_START( legionjb, armedf_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1553,6 +1567,8 @@ static MACHINE_CONFIG_START( bigfghtr, bigfghtr_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp index a9c1e34ac1b..89bb2b7e725 100644 --- a/src/mame/drivers/astrocde.cpp +++ b/src/mame/drivers/astrocde.cpp @@ -465,7 +465,7 @@ WRITE8_MEMBER(astrocde_state::demndrgn_sound_w) WRITE8_MEMBER(astrocde_state::tenpindx_sound_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -660,7 +660,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tenpin_sub_io_map, AS_IO, 8, astrocde_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x90, 0x93) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) - AM_RANGE(0x97, 0x97) AM_READ(soundlatch_byte_r) + AM_RANGE(0x97, 0x97) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x98, 0x98) AM_DEVWRITE("aysnd", ay8910_device, address_w) AM_RANGE(0x98, 0x98) AM_DEVREAD("aysnd", ay8910_device, data_r) AM_RANGE(0x9a, 0x9a) AM_DEVWRITE("aysnd", ay8910_device, data_w) @@ -1453,6 +1453,9 @@ static MACHINE_CONFIG_DERIVED( tenpindx, astrocade_16color_base ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, ASTROCADE_CLOCK/4) /* real clock unknown */ MCFG_AY8910_PORT_A_READ_CB(IOPORT("DIPSW")) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33) diff --git a/src/mame/drivers/astrof.cpp b/src/mame/drivers/astrof.cpp index e25b9b82e3f..875e0077eff 100644 --- a/src/mame/drivers/astrof.cpp +++ b/src/mame/drivers/astrof.cpp @@ -1172,6 +1172,28 @@ ROM_START( acombat3 ) ROM_LOAD( "8f-clr.bin", 0x0000, 0x0100, CRC(3bf3ccb0) SHA1(d61d19d38045f42a9adecf295e479fee239bed48) ) ROM_END +ROM_START( acombat4 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "11.bin", 0xd000, 0x0400, CRC(9ba57987) SHA1(becf89b7d474f86839f13f9be5502c91491e8584) ) + ROM_LOAD( "10.bin", 0xd400, 0x0400, CRC(22493f2a) SHA1(4a2569f500c022b77d99855ca38a3591ed56e055) ) + ROM_LOAD( "9.bin", 0xd800, 0x0400, CRC(354cf432) SHA1(138956ea8064eba0dcd8b2f175d4981b689a2077) ) + ROM_LOAD( "8.bin", 0xdc00, 0x0400, CRC(4cee0c8b) SHA1(98bfdda9d2d368db16d6e9090536b09d8337c0e5) ) + ROM_LOAD( "4.bin", 0xe000, 0x0400, CRC(9cb477f3) SHA1(6866264aa8d0479cee237a00e4a919e3981144a5) ) + ROM_LOAD( "6.bin", 0xe400, 0x0400, CRC(272de8f1) SHA1(e917b3b8bb96fedacd6d5cb3d1c30977818f2e85) ) + ROM_LOAD( "5.bin", 0xe800, 0x0400, CRC(ff25acaa) SHA1(5cb360c556c9b36039ae05702e6900b82fe5676b) ) + ROM_LOAD( "3.bin", 0xec00, 0x0400, CRC(6edf202d) SHA1(a4cab2f10a99e0a4b1c571168e17cbee1d18cf06) ) + ROM_LOAD( "7.bin", 0xf000, 0x0400, CRC(47dccb04) SHA1(b6b6c6685c93ac9531efb970b2e82ad68eea87ba) ) + ROM_LOAD( "1.bin", 0xf400, 0x0400, CRC(5874584f) SHA1(8794c17ac156e7c59631d683bbf100036ab45713) ) + ROM_LOAD( "2.bin", 0xf800, 0x0400, CRC(b206deda) SHA1(9ab52920c06ed6beb38bc7f97ffd00e8ad46c17d) ) + ROM_LOAD( "0.bin", 0xfc00, 0x0400, CRC(4d52948a) SHA1(bcf9590a8049cada958531f6b7ae0d499c1096e2) ) + + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "8f-clr.bin", 0x0000, 0x0100, CRC(3bf3ccb0) SHA1(d61d19d38045f42a9adecf295e479fee239bed48) ) + + ROM_REGION( 0x0100, "user1", 0 ) /* decryption table */ + ROM_LOAD( "74471.cpu", 0x0000, 0x0100, CRC(a6bdd18c) SHA1(438bfc543730afdb531204585f17a68ddc03ded0) ) +ROM_END + ROM_START( sstarbtl ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "b.bin", 0xd000, 0x0400, CRC(16ad2bcc) SHA1(e7f55d17ee18afbb045cd0fd8d3ffc0c8300130a) ) @@ -1334,6 +1356,7 @@ GAME( 1979, afire, astrof, abattle, abattle, astrof_state, afire, ROT90 GAME( 1979, acombat, astrof, abattle, abattle, astrof_state, afire, ROT90, "bootleg", "Astro Combat (newer, CB)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1979, acombato, astrof, abattle, abattle, astrof_state, afire, ROT90, "bootleg", "Astro Combat (older, PZ)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1979, acombat3, astrof, abattle, abattle, astrof_state, acombat3,ROT90, "bootleg (Proel)", "Astro Combat (unencrypted)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1979, acombat4, astrof, abattle, abattle, astrof_state, abattle, ROT90, "bootleg (Proel)", "Astro Combat (encrypted)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1979, sstarbtl, astrof, abattle, abattle, astrof_state, sstarbtl,ROT90, "bootleg", "Super Star Battle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1979, spfghmk2, 0, spfghmk2, spfghmk2, driver_device,0, ROT90, "Data East", "Space Fighter Mark II (set 1)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/bingoc.cpp b/src/mame/drivers/bingoc.cpp index 868fd3c3563..388d813a5bb 100644 --- a/src/mame/drivers/bingoc.cpp +++ b/src/mame/drivers/bingoc.cpp @@ -12,7 +12,7 @@ TODO: -terminal pcb(s) roms aren't dumped,so no video can be shown,a cabinet snap is here -> http://www.system16.com/hardware.php?id=840&page=1#2743 ,every player should have his own screen. --inconsistant (likely wrong) sound banking. +-inconsistent (likely wrong) sound banking. ============================================================================================ BINGO CIRCUS (MAIN PCB) @@ -32,6 +32,7 @@ SOUND : YM2151 uPD7759C #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2151intf.h" #include "sound/upd7759.h" @@ -43,7 +44,8 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), - m_upd7759(*this, "upd") { } + m_upd7759(*this, "upd"), + m_soundlatch(*this, "soundlatch") { } UINT8 m_x; DECLARE_READ16_MEMBER(unknown_r); @@ -54,6 +56,7 @@ public: required_device m_maincpu; required_device m_soundcpu; required_device m_upd7759; + required_device m_soundlatch; }; @@ -97,7 +100,7 @@ READ8_MEMBER(bingoc_state::sound_test_r) #else WRITE16_MEMBER(bingoc_state::main_sound_latch_w) { - soundlatch_byte_w(space,0,data&0xff); + m_soundlatch->write(space,0,data&0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } #endif @@ -135,7 +138,7 @@ static ADDRESS_MAP_START( sound_io, AS_IO, 8, bingoc_state ) AM_RANGE(0x40, 0x40) AM_WRITE(sound_play_w) AM_RANGE(0x80, 0x80) AM_DEVWRITE("upd", upd7759_device, port_w) #if !SOUND_TEST - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) //soundlatch + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) #else AM_RANGE(0xc0, 0xc0) AM_READ(sound_test_r) #endif @@ -173,6 +176,8 @@ static MACHINE_CONFIG_START( bingoc, bingoc_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") //might just be mono... + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 7159160/2) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) diff --git a/src/mame/drivers/calorie.cpp b/src/mame/drivers/calorie.cpp index 1faa6b62bb8..24a3466befa 100644 --- a/src/mame/drivers/calorie.cpp +++ b/src/mame/drivers/calorie.cpp @@ -81,6 +81,7 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/segacrp2_device.h" #include "sound/ay8910.h" @@ -95,6 +96,7 @@ public: m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } /* memory pointers */ @@ -120,6 +122,7 @@ public: required_device m_maincpu; required_device m_gfxdecode; required_device m_palette; + required_device m_soundlatch; optional_shared_ptr m_decrypted_opcodes; }; @@ -237,8 +240,8 @@ WRITE8_MEMBER(calorie_state::calorie_flipscreen_w) READ8_MEMBER(calorie_state::calorie_soundlatch_r) { - UINT8 latch = soundlatch_byte_r(space, 0); - soundlatch_clear_byte_w(space, 0, 0); + UINT8 latch = m_soundlatch->read(space, 0); + m_soundlatch->clear_w(space, 0, 0); return latch; } @@ -266,7 +269,7 @@ static ADDRESS_MAP_START( calorie_map, AS_PROGRAM, 8, calorie_state ) AM_RANGE(0xf002, 0xf002) AM_READ_PORT("SYSTEM") AM_RANGE(0xf004, 0xf004) AM_READ_PORT("DSW1") AM_WRITE(calorie_flipscreen_w) AM_RANGE(0xf005, 0xf005) AM_READ_PORT("DSW2") - AM_RANGE(0xf800, 0xf800) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf800, 0xf800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, calorie_state ) @@ -477,6 +480,8 @@ static MACHINE_CONFIG_START( calorie, calorie_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8) /* YM2149 really */ diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp index 4484a1d80e6..61f1e3c2a57 100644 --- a/src/mame/drivers/carjmbre.cpp +++ b/src/mame/drivers/carjmbre.cpp @@ -40,6 +40,7 @@ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "video/resnet.h" #include "sound/ay8910.h" @@ -241,7 +242,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, carjmbre_state ) AM_RANGE(0x9800, 0x98ff) AM_RAM AM_SHARE("spriteram") // 5101*2 AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN2") - AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -254,7 +255,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, carjmbre_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x20, 0x21) AM_DEVWRITE("ay1", ay8910_device, address_data_w) AM_RANGE(0x22, 0x22) AM_WRITENOP // bdir/bc2/bc1 1/0/1 inactive write AM_RANGE(0x24, 0x24) AM_DEVREAD("ay1", ay8910_device, data_r) @@ -368,8 +369,12 @@ static MACHINE_CONFIG_START( carjmbre, carjmbre_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/6/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_SOUND_ADD("ay2", AY8910, XTAL_18_432MHz/6/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index 6886598ada6..d6dffce1624 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -256,7 +256,7 @@ void cclimber_state::machine_start() WRITE8_MEMBER(cclimber_state::swimmer_sh_soundlatch_w) { - soundlatch_byte_w(space,offset,data); + m_soundlatch->write(space,offset,data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } @@ -454,7 +454,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( swimmer_audio_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x2000, 0x23ff) AM_RAM - AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4000, 0x4001) AM_RAM /* ??? */ ADDRESS_MAP_END @@ -1172,6 +1172,9 @@ static MACHINE_CONFIG_START( swimmer, cclimber_state ) /* audio hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_4MHz/2) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/cop01.cpp b/src/mame/drivers/cop01.cpp index 36ccca372bc..650895fd373 100644 --- a/src/mame/drivers/cop01.cpp +++ b/src/mame/drivers/cop01.cpp @@ -74,13 +74,13 @@ Mighty Guy board layout: WRITE8_MEMBER(cop01_state::cop01_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, ASSERT_LINE ); } READ8_MEMBER(cop01_state::cop01_sound_command_r) { - int res = (soundlatch_byte_r(space, offset) & 0x7f) << 1; + int res = (m_soundlatch->read(space, offset) & 0x7f) << 1; /* bit 0 seems to be a timer */ if ((m_audiocpu->total_cycles() / TIMER_RATE) & 1) @@ -473,6 +473,8 @@ static MACHINE_CONFIG_START( cop01, cop01_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1250000) /* unknown clock / divider, hand-tuned to match audio reference */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -513,6 +515,8 @@ static MACHINE_CONFIG_START( mightguy, cop01_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, AUDIOCPU_CLOCK/2) /* unknown divider */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/csplayh5.cpp b/src/mame/drivers/csplayh5.cpp index aadf7ecbdb6..589e47cdc05 100644 --- a/src/mame/drivers/csplayh5.cpp +++ b/src/mame/drivers/csplayh5.cpp @@ -30,6 +30,7 @@ #include "cpu/z80/tmpz84c011.h" #include "sound/dac.h" #include "sound/3812intf.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "cpu/h8/h83002.h" @@ -44,6 +45,7 @@ public: m_v9958(*this, "v9958"), m_dac1(*this, "dac1"), m_dac2(*this, "dac2"), + m_soundlatch(*this, "soundlatch"), m_key(*this, "KEY"), m_region_maincpu(*this, "maincpu"), m_region_audiocpu(*this, "audiocpu"), @@ -55,6 +57,7 @@ public: required_device m_v9958; required_device m_dac1; required_device m_dac2; + required_device m_soundlatch; required_ioport_array<5> m_key; required_memory_region m_region_maincpu; required_memory_region m_region_audiocpu; @@ -123,7 +126,7 @@ WRITE16_MEMBER(csplayh5_state::csplayh5_mux_w) WRITE16_MEMBER(csplayh5_state::csplayh5_sound_w) { - soundlatch_byte_w(space, 0, ((data >> 8) & 0xff)); + m_soundlatch->write(space, 0, ((data >> 8) & 0xff)); } @@ -186,12 +189,12 @@ void csplayh5_state::soundbank_w(int data) READ8_MEMBER(csplayh5_state::csplayh5_sound_r) { - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } WRITE8_MEMBER(csplayh5_state::csplayh5_soundclr_w) { - soundlatch_clear_byte_w(space, 0, 0); + m_soundlatch->clear_w(space, 0, 0); } @@ -486,6 +489,8 @@ static MACHINE_CONFIG_START( csplayh5, csplayh5_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 4000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) diff --git a/src/mame/drivers/dacholer.cpp b/src/mame/drivers/dacholer.cpp index d9e701f6295..4d3e4cbc34c 100644 --- a/src/mame/drivers/dacholer.cpp +++ b/src/mame/drivers/dacholer.cpp @@ -34,6 +34,7 @@ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/dac.h" #include "sound/msm5205.h" #include "sound/ay8910.h" @@ -46,25 +47,27 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_audiocpu(*this,"audiocpu"), - m_bgvideoram(*this, "bgvideoram"), - m_fgvideoram(*this, "fgvideoram"), - m_spriteram(*this, "spriteram"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_bgvideoram(*this, "bgvideoram"), + m_fgvideoram(*this, "fgvideoram"), + m_spriteram(*this, "spriteram") { } /* devices */ required_device m_maincpu; required_device m_audiocpu; + optional_device m_msm; + required_device m_gfxdecode; + required_device m_palette; + required_device m_soundlatch; + /* memory pointers */ required_shared_ptr m_bgvideoram; required_shared_ptr m_fgvideoram; required_shared_ptr m_spriteram; - optional_device m_msm; - required_device m_gfxdecode; - required_device m_palette; - /* video-related */ tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; @@ -217,7 +220,7 @@ WRITE8_MEMBER(dacholer_state::coins_w) WRITE8_MEMBER(dacholer_state::snd_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -298,7 +301,7 @@ WRITE8_MEMBER(dacholer_state::music_irq_w) static ADDRESS_MAP_START( snd_io_map, AS_IO, 8, dacholer_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_byte_r, soundlatch_clear_byte_w ) + AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, clear_w) AM_RANGE(0x04, 0x04) AM_WRITE(music_irq_w) AM_RANGE(0x08, 0x08) AM_WRITE(snd_irq_w) AM_RANGE(0x0c, 0x0c) AM_WRITE(snd_ack_w) @@ -310,7 +313,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( itaten_snd_io_map, AS_IO, 8, dacholer_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_byte_r, soundlatch_clear_byte_w ) + AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, clear_w) AM_RANGE(0x86, 0x87) AM_DEVWRITE("ay1", ay8910_device, data_address_w) AM_RANGE(0x8a, 0x8b) AM_DEVWRITE("ay2", ay8910_device, data_address_w) AM_RANGE(0x8e, 0x8f) AM_DEVWRITE("ay3", ay8910_device, data_address_w) @@ -675,6 +678,8 @@ static MACHINE_CONFIG_START( dacholer, dacholer_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_19_968MHz/16) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) diff --git a/src/mame/drivers/deniam.cpp b/src/mame/drivers/deniam.cpp index d39a9227077..49a076dda15 100644 --- a/src/mame/drivers/deniam.cpp +++ b/src/mame/drivers/deniam.cpp @@ -55,7 +55,7 @@ WRITE16_MEMBER(deniam_state::sound_command_w) { if (ACCESSING_BITS_8_15) { - soundlatch_byte_w(space,offset, (data >> 8) & 0xff); + m_soundlatch->write(space,offset, (data >> 8) & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -103,7 +103,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, deniam_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x01, 0x01) AM_READ(soundlatch_byte_r) + AM_RANGE(0x01, 0x01) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x02, 0x03) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0x05, 0x05) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0x07, 0x07) AM_WRITE(deniam16b_oki_rom_bank_w) @@ -281,6 +281,8 @@ static MACHINE_CONFIG_START( deniam16b, deniam_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_25MHz/6) /* "SM64" ym3812 clone; 4.166470 measured, = 4.166666Mhz verified */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) diff --git a/src/mame/drivers/electron.cpp b/src/mame/drivers/electron.cpp index 106fc034a03..ac902576be6 100644 --- a/src/mame/drivers/electron.cpp +++ b/src/mame/drivers/electron.cpp @@ -223,6 +223,9 @@ static MACHINE_CONFIG_START( electron, electron_state ) MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart") MCFG_GENERIC_LOAD(electron_state, electron_cart) + /* expansion ports */ + MCFG_ELECTRON_EXPANSION_SLOT_ADD("exp", electron_expansion_devices, nullptr) + /* software lists */ MCFG_SOFTWARE_LIST_ADD("cass_list","electron_cass") MCFG_SOFTWARE_LIST_ADD("cart_list","electron_cart") diff --git a/src/mame/drivers/espial.cpp b/src/mame/drivers/espial.cpp index ff6fc3d5c85..599b1b464eb 100644 --- a/src/mame/drivers/espial.cpp +++ b/src/mame/drivers/espial.cpp @@ -17,7 +17,7 @@ Stephh's notes (based on the games Z80 code and some tests) : - The games read both players controls for player 2 when "Cabinet" is set to "Upright" (code at 0x0321). - The games read both buttons status regardless of settings. They are - then comnbined if Dip Switch is set to "1" (code at 0x32a). + then combined if Dip Switch is set to "1" (code at 0x32a). - The "CRE." displayed at the bottom right of the screen is in fact not really the number of credits (especially when coinage isn't 1C_1C) as it relies on a transformation of real number of credits (stored at @@ -94,7 +94,7 @@ INTERRUPT_GEN_MEMBER(espial_state::espial_sound_nmi_gen) WRITE8_MEMBER(espial_state::espial_master_soundlatch_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -106,7 +106,7 @@ static ADDRESS_MAP_START( espial_map, AS_PROGRAM, 8, espial_state ) AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1") AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN1") AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2") - AM_RANGE(0x6090, 0x6090) AM_READ(soundlatch2_byte_r) AM_WRITE(espial_master_soundlatch_w) + AM_RANGE(0x6090, 0x6090) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(espial_master_soundlatch_w) AM_RANGE(0x7000, 0x7000) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w) AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w) AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w) @@ -131,7 +131,7 @@ static ADDRESS_MAP_START( netwars_map, AS_PROGRAM, 8, espial_state ) AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1") AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN1") AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2") - AM_RANGE(0x6090, 0x6090) AM_READ(soundlatch2_byte_r) AM_WRITE(espial_master_soundlatch_w) + AM_RANGE(0x6090, 0x6090) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(espial_master_soundlatch_w) AM_RANGE(0x7000, 0x7000) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w) AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w) AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w) @@ -149,7 +149,7 @@ static ADDRESS_MAP_START( espial_sound_map, AS_PROGRAM, 8, espial_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x23ff) AM_RAM AM_RANGE(0x4000, 0x4000) AM_WRITE(espial_sound_nmi_mask_w) - AM_RANGE(0x6000, 0x6000) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) + AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( espial_sound_io_map, AS_IO, 8, espial_state ) @@ -342,6 +342,10 @@ static MACHINE_CONFIG_START( espial, espial_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("aysnd", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index e222e403291..48e8b85747c 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -30,7 +30,7 @@ filtered output, while a "FIRE" line triggers a fixed short duration pulse (controlled by another 555 timer) of modulated noise. - See video/galaxian.c for a description of the video section. + See video/galaxian.cpp for a description of the video section. **************************************************************************** @@ -657,10 +657,8 @@ TODO: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/s2650/s2650.h" -#include "machine/i8255.h" #include "machine/watchdog.h" #include "sound/sn76496.h" -#include "sound/dac.h" #include "sound/discrete.h" #include "audio/cclimber.h" #include "audio/galaxian.h" @@ -949,7 +947,7 @@ WRITE8_MEMBER(galaxian_state::explorer_sound_control_w) READ8_MEMBER(galaxian_state::explorer_sound_latch_r) { m_audiocpu->set_input_line(0, CLEAR_LINE); - return soundlatch_byte_r(m_audiocpu->space(AS_PROGRAM), 0); + return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM), 0); } @@ -1343,7 +1341,7 @@ WRITE8_MEMBER(galaxian_state::kingball_sound1_w) WRITE8_MEMBER(galaxian_state::kingball_sound2_w) { m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1); - soundlatch_byte_w(space, 0, m_kingball_sound | 0xf0); + m_soundlatch->write(space, 0, m_kingball_sound | 0xf0); } @@ -1419,7 +1417,7 @@ READ8_MEMBER(galaxian_state::jumpbug_protection_r) WRITE8_MEMBER(galaxian_state::checkman_sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -1701,6 +1699,29 @@ static ADDRESS_MAP_START( theend_map, AS_PROGRAM, 8, galaxian_state ) AM_RANGE(0x8000, 0xffff) AM_READWRITE(theend_ppi8255_r, theend_ppi8255_w) ADDRESS_MAP_END +/* map not derived from schematics. Used by explorer and takeoff */ +static ADDRESS_MAP_START( explorer_map, AS_PROGRAM, 8, galaxian_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x47ff) AM_RAM + AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_videoram_w) AM_SHARE("videoram") + AM_RANGE(0x5000, 0x50ff) AM_MIRROR(0x0700) AM_RAM_WRITE(galaxian_objram_w) AM_SHARE("spriteram") + AM_RANGE(0x6800, 0x6800) AM_WRITENOP // ???? + AM_RANGE(0x6801, 0x6801) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w) + AM_RANGE(0x6802, 0x6802) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w) + AM_RANGE(0x6803, 0x6803) AM_MIRROR(0x07f8) AM_WRITE(scramble_background_enable_w) + AM_RANGE(0x6804, 0x6804) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w) + AM_RANGE(0x6805, 0x6805) AM_MIRROR(0x07f8) //POUT2 + AM_RANGE(0x6806, 0x6806) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_x_w) + AM_RANGE(0x6807, 0x6807) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_y_w) + AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x07ff) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w) /* watchdog works for writes as well? (or is it just disabled?) */ + AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0ffc) AM_READ_PORT("IN0"); + AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0fff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) + AM_RANGE(0x8001, 0x8001) AM_MIRROR(0x0ffc) AM_READ_PORT("IN1"); + AM_RANGE(0x8002, 0x8002) AM_MIRROR(0x0ffc) AM_READ_PORT("IN2"); + AM_RANGE(0x8003, 0x8003) AM_MIRROR(0x0ffc) AM_READ_PORT("IN3"); + AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0fff) AM_WRITE(explorer_sound_control_w); +ADDRESS_MAP_END /* map derived from schematics */ static ADDRESS_MAP_START( scobra_map, AS_PROGRAM, 8, galaxian_state ) @@ -2061,7 +2082,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( checkman_sound_portmap, AS_IO, 8, galaxian_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x03, 0x03) AM_READ(soundlatch_byte_r) + AM_RANGE(0x03, 0x03) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x04, 0x05) AM_DEVWRITE("8910.0", ay8910_device, address_data_w) AM_RANGE(0x06, 0x06) AM_DEVREAD("8910.0", ay8910_device, data_r) ADDRESS_MAP_END @@ -2077,6 +2098,21 @@ static ADDRESS_MAP_START( checkmaj_sound_map, AS_PROGRAM, 8, galaxian_state ) ADDRESS_MAP_END +/* Take Off with 1x AY-8912*/ + +static ADDRESS_MAP_START( takeoff_sound_map, AS_PROGRAM, 8, galaxian_state ) + AM_RANGE(0x0000, 0x0fff) AM_ROM + AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x6c00) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( takeoff_sound_portmap, AS_IO, 8, galaxian_state ) + ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x20, 0x20) AM_READ(konami_sound_timer_r) + AM_RANGE(0x40, 0x40) AM_DEVWRITE("8912", ay8912_device, address_w) + AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("8912", ay8912_device, data_r, data_w) +ADDRESS_MAP_END + /* King and Balloon with DAC */ static ADDRESS_MAP_START( kingball_sound_map, AS_PROGRAM, 8, galaxian_state ) ADDRESS_MAP_UNMAP_HIGH @@ -2088,7 +2124,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( kingball_sound_portmap, AS_IO, 8, galaxian_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_READ(soundlatch_byte_r) AM_WRITE(kingball_dac_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(kingball_dac_w) ADDRESS_MAP_END @@ -5489,7 +5525,7 @@ static MACHINE_CONFIG_DERIVED( konami_base, galaxian_base ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(IOPORT("IN3")) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w)) @@ -5503,11 +5539,13 @@ static MACHINE_CONFIG_FRAGMENT( konami_sound_1x_ay8910 ) MCFG_CPU_PROGRAM_MAP(frogger_sound_map) MCFG_CPU_IO_MAP(frogger_sound_portmap) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8) MCFG_AY8910_OUTPUT_TYPE(AY8910_DISCRETE_OUTPUT) MCFG_AY8910_RES_LOADS(RES_K(5.1), RES_K(5.1), RES_K(5.1)) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_READ_CB(READ8(galaxian_state, frogger_sound_timer_r)) MCFG_SOUND_ROUTE_EX(0, "konami", 1.0, 0) MCFG_SOUND_ROUTE_EX(1, "konami", 1.0, 1) @@ -5526,11 +5564,13 @@ static MACHINE_CONFIG_FRAGMENT( konami_sound_2x_ay8910 ) MCFG_CPU_PROGRAM_MAP(konami_sound_map) MCFG_CPU_IO_MAP(konami_sound_portmap) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8) MCFG_AY8910_OUTPUT_TYPE(AY8910_DISCRETE_OUTPUT) MCFG_AY8910_RES_LOADS(RES_K(5.1), RES_K(5.1), RES_K(5.1)) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_READ_CB(READ8(galaxian_state, konami_sound_timer_r)) MCFG_SOUND_ROUTE_EX(0, "konami", 1.0, 0) MCFG_SOUND_ROUTE_EX(1, "konami", 1.0, 1) @@ -5694,6 +5734,8 @@ static MACHINE_CONFIG_DERIVED( checkman, mooncrst ) MCFG_CPU_IO_MAP(checkman_sound_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxian_state, irq0_line_hold) /* NMIs are triggered by the main CPU */ + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("8910.0", AY8910, 1789750) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -5712,9 +5754,11 @@ static MACHINE_CONFIG_DERIVED( checkmaj, galaxian_base ) MCFG_TIMER_DRIVER_ADD_SCANLINE("irq0", galaxian_state, checkmaj_irq0_gen, "screen", 0, 8) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("8910.0", AY8910, 1620000) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2) MACHINE_CONFIG_END @@ -5739,6 +5783,8 @@ static MACHINE_CONFIG_DERIVED( kingball, mooncrst ) MCFG_CPU_PROGRAM_MAP(kingball_sound_map) MCFG_CPU_IO_MAP(kingball_sound_portmap) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_DAC_ADD("dac") MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -5807,7 +5853,7 @@ static MACHINE_CONFIG_DERIVED( theend, galaxian_base ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, theend_coin_counter_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(IOPORT("IN3")) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w)) @@ -5828,7 +5874,7 @@ static MACHINE_CONFIG_DERIVED( scramble, galaxian_base ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(READ8(galaxian_state, scramble_protection_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scramble_protection_w)) @@ -5839,13 +5885,15 @@ static MACHINE_CONFIG_DERIVED( explorer, galaxian_base ) /* alternate memory map */ MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(theend_map) + MCFG_CPU_PROGRAM_MAP(explorer_map) /* 2nd CPU to drive sound */ MCFG_CPU_ADD("audiocpu", Z80,KONAMI_SOUND_CLOCK/8) MCFG_CPU_PROGRAM_MAP(konami_sound_map) MCFG_CPU_IO_MAP(konami_sound_portmap) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8) MCFG_AY8910_PORT_A_READ_CB(READ8(galaxian_state, explorer_sound_latch_r)) @@ -5856,6 +5904,21 @@ static MACHINE_CONFIG_DERIVED( explorer, galaxian_base ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( takeoff, explorer ) // takeoff shares the same main map as explorer, but uses only an AY8912 for sound. + + /* 2nd CPU to drive sound */ + MCFG_SOUND_MODIFY("audiocpu") + MCFG_CPU_PROGRAM_MAP(takeoff_sound_map) + MCFG_CPU_IO_MAP(takeoff_sound_portmap) + + /* sound hardware */ + MCFG_DEVICE_REMOVE("8910.0") + MCFG_DEVICE_REMOVE("8910.1") + + MCFG_SOUND_ADD("8912", AY8912, KONAMI_SOUND_CLOCK/8) + MCFG_AY8910_PORT_A_READ_CB(READ8(galaxian_state, explorer_sound_latch_r)) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( scorpion, theend ) @@ -5869,7 +5932,7 @@ static MACHINE_CONFIG_DERIVED( scorpion, theend ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(READ8(galaxian_state, scorpion_protection_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scorpion_protection_w)) @@ -5906,17 +5969,19 @@ static MACHINE_CONFIG_DERIVED( sfx, galaxian_base ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(IOPORT("IN3")) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w)) MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(READ8(driver_device, soundlatch2_byte_r)) + MCFG_I8255_IN_PORTA_CB(DEVREAD8("soundlatch2", generic_latch_8_device, read)) + + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") /* port on 2nd 8910 is used for communication */ MCFG_SOUND_MODIFY("8910.1") - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(driver_device, soundlatch2_byte_w)) + MCFG_AY8910_PORT_A_WRITE_CB(DEVWRITE8("soundlatch2", generic_latch_8_device, write)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(galaxian_state, sfx_sample_control_w)) /* DAC for the sample player */ @@ -6066,7 +6131,7 @@ static MACHINE_CONFIG_DERIVED( moonwar, scobra ) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, moonwar_port_select_w)) MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w)) MCFG_I8255_IN_PORTC_CB(IOPORT("IN3")) MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w)) @@ -6922,28 +6987,6 @@ DRIVER_INIT_MEMBER(galaxian_state,scramble) } -DRIVER_INIT_MEMBER(galaxian_state,explorer) -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* video extensions */ - common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, nullptr, nullptr); - - /* watchdog works for writes as well? (or is it just disabled?) */ - watchdog_timer_device *wdog = subdevice("watchdog"); - space.install_write_handler(0x7000, 0x7000, 0, 0x7ff, write8_delegate(FUNC(watchdog_timer_device::reset_w), wdog)); - - /* I/O appears to be direct, not via PPIs */ - space.unmap_readwrite(0x8000, 0xffff); - space.install_read_port(0x8000, 0x8000, 0, 0xffc, "IN0"); - space.install_read_port(0x8001, 0x8001, 0, 0xffc, "IN1"); - space.install_read_port(0x8002, 0x8002, 0, 0xffc, "IN2"); - space.install_read_port(0x8003, 0x8003, 0, 0xffc, "IN3"); - space.install_write_handler(0x8000, 0x8000, 0, 0xfff, write8_delegate(FUNC(galaxian_state::soundlatch_byte_w),this)); - space.install_write_handler(0x9000, 0x9000, 0, 0xfff, write8_delegate(FUNC(galaxian_state::explorer_sound_control_w),this)); -} - - DRIVER_INIT_MEMBER(galaxian_state,sfx) { /* basic configuration */ @@ -7045,7 +7088,7 @@ DRIVER_INIT_MEMBER(galaxian_state,froggermc) /* video extensions */ common_init(nullptr, &galaxian_state::frogger_draw_background, &galaxian_state::frogger_extend_tile_info, &galaxian_state::frogger_extend_sprite_info); - space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, write8_delegate(FUNC(galaxian_state::soundlatch_byte_w),this)); + space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch)); space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::froggermc_sound_control_w),this)); /* actually needs 2k of RAM */ @@ -11583,13 +11626,13 @@ GAME( 1982, amidars, amidar, scramble, amidars, galaxian_state, scram /* The End/Scramble based hardware */ GAME( 1980, theend, 0, theend, theend, galaxian_state, theend, ROT90, "Konami", "The End", MACHINE_SUPPORTS_SAVE ) GAME( 1980, theends, theend, theend, theend, galaxian_state, theend, ROT90, "Konami (Stern Electronics license)", "The End (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, takeoff, theend, explorer, explorer, galaxian_state, explorer, ROT90, "bootleg (Sidam)", "Take Off (bootleg of The End)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1980, takeoff, theend, takeoff, explorer, galaxian_state, scramble, ROT90, "bootleg (Sidam)", "Take Off (bootleg of The End)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1981, scramble, 0, scramble, scramble, galaxian_state, scramble, ROT90, "Konami", "Scramble", MACHINE_SUPPORTS_SAVE ) GAME( 1981, scrambles, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "Konami (Stern Electronics license)", "Scramble (Stern Electronics set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, scrambles2, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "Konami (Stern Electronics license)", "Scramble (Stern Electronics set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, strfbomb, scramble, scramble, strfbomb, galaxian_state, scramble, ROT90, "bootleg (Omni)", "Strafe Bomb (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, explorer, scramble, explorer, explorer, galaxian_state, explorer, ROT90, "bootleg (Sidam)", "Explorer (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, explorer, scramble, explorer, explorer, galaxian_state, scramble, ROT90, "bootleg (Sidam)", "Explorer (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, scramblebf, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Karateko)", "Scramble (Karateko, French bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, scrambp, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Billport S.A.)", "Impacto (Billport S.A., Spanish bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) // similar to the Karateko set above GAME( 1981, scramce, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Centromatic S.A.)", "Scramble (Centromatic S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // similar to above diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp index 7541272d7b2..32edd23bf72 100644 --- a/src/mame/drivers/galivan.cpp +++ b/src/mame/drivers/galivan.cpp @@ -24,9 +24,13 @@ TODO but it should really copy stuff from the extra ROM. - Ninja Emaki has minor protection issues, see NB1414M4 simulation for more info. - dangarj has unemulated protection at I/Os 0x80-1 for missing sprites. - It then checks the checksum result with 0x27, jumps to unmapped ROM area - during gameplay if it's manually hampered hmm ... - + [0x80] W is data + [0x81] W --11 xxxx address + [0x80] R result + The protection is used for a code snippet at 0xf9c0, that of course is the + sprite handling. The code snippet is sum8 with 0x27 at 0x9d74 so no, the + later dangar US version snippet doesn't work ... + ***************************************************************************/ #include "emu.h" @@ -38,12 +42,12 @@ TODO WRITE8_MEMBER(galivan_state::galivan_sound_command_w) { - soundlatch_byte_w(space,0,((data & 0x7f) << 1) | 1); + m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1); } READ8_MEMBER(galivan_state::soundlatch_clear_r) { - soundlatch_clear_byte_w(space, 0, 0); + m_soundlatch->clear_w(space, 0, 0); return 0; } @@ -118,7 +122,7 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, galivan_state ) AM_RANGE(0x02, 0x02) AM_DEVWRITE("dac1", dac_device, write_unsigned8) AM_RANGE(0x03, 0x03) AM_DEVWRITE("dac2", dac_device, write_unsigned8) AM_RANGE(0x04, 0x04) AM_READ(soundlatch_clear_r) - AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r) + AM_RANGE(0x06, 0x06) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -448,6 +452,8 @@ static MACHINE_CONFIG_START( galivan, galivan_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -497,6 +503,9 @@ static MACHINE_CONFIG_START( ninjemak, galivan_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, XTAL_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index 4a8cae101e5..9270c520b43 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -2118,29 +2118,40 @@ void gba_state::machine_start() membank("rom2")->set_base(cart_rom->base()); membank("rom3")->set_base(cart_rom->base()); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x80000c4, 0x80000cb, read32_delegate(FUNC(gba_cart_slot_device::read_gpio),(gba_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x80000c4, 0x80000cb, write32_delegate(FUNC(gba_cart_slot_device::write_gpio),(gba_cart_slot_device*)m_cart)); // add nvram to save state m_cart->save_nvram(); // install the cart NVRAM handlers if necessary - if (m_cart->get_type() == GBA_SRAM) + if (m_cart->get_type() == GBA_SRAM || m_cart->get_type() == GBA_DRILLDOZ || m_cart->get_type() == GBA_WARIOTWS) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xe000000, 0xe00ffff, read32_delegate(FUNC(gba_cart_slot_device::read_ram),(gba_cart_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_write_handler(0xe000000, 0xe00ffff, write32_delegate(FUNC(gba_cart_slot_device::write_ram),(gba_cart_slot_device*)m_cart)); } - if (m_cart->get_type() == GBA_EEPROM || m_cart->get_type() == GBA_EEPROM4 || m_cart->get_type() == GBA_EEPROM64) + if (m_cart->get_type() == GBA_EEPROM || m_cart->get_type() == GBA_EEPROM4 || m_cart->get_type() == GBA_EEPROM64 || m_cart->get_type() == GBA_BOKTAI) { // for games larger than 16MB the actual range is smaller but read_ram/write_ram handles that! m_maincpu->space(AS_PROGRAM).install_read_handler(0xd000000, 0xdffffff, read32_delegate(FUNC(gba_cart_slot_device::read_ram),(gba_cart_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_write_handler(0xd000000, 0xdffffff, write32_delegate(FUNC(gba_cart_slot_device::write_ram),(gba_cart_slot_device*)m_cart)); } + if (m_cart->get_type() == GBA_YOSHIUG) + { + // EEPROM + m_maincpu->space(AS_PROGRAM).install_read_handler(0xd000000, 0xdffffff, read32_delegate(FUNC(gba_cart_slot_device::read_ram),(gba_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xd000000, 0xdffffff, write32_delegate(FUNC(gba_cart_slot_device::write_ram),(gba_cart_slot_device*)m_cart)); + // Tilt Sensor + m_maincpu->space(AS_PROGRAM).install_read_handler(0xe008000, 0xe0085ff, read32_delegate(FUNC(gba_cart_slot_device::read_tilt),(gba_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xe008000, 0xe0085ff, write32_delegate(FUNC(gba_cart_slot_device::write_tilt),(gba_cart_slot_device*)m_cart)); + } // merge the two flash and mask accesses in read_ram?!? - if (m_cart->get_type() == GBA_FLASH || m_cart->get_type() == GBA_FLASH512) + if (m_cart->get_type() == GBA_FLASH || m_cart->get_type() == GBA_FLASH512 || m_cart->get_type() == GBA_FLASH_RTC) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xe000000, 0xe00ffff, read32_delegate(FUNC(gba_cart_slot_device::read_ram),(gba_cart_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_write_handler(0xe000000, 0xe00ffff, write32_delegate(FUNC(gba_cart_slot_device::write_ram),(gba_cart_slot_device*)m_cart)); } - if (m_cart->get_type() == GBA_FLASH1M) + if (m_cart->get_type() == GBA_FLASH1M || m_cart->get_type() == GBA_FLASH1M_RTC) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xe000000, 0xe01ffff, read32_delegate(FUNC(gba_cart_slot_device::read_ram),(gba_cart_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_write_handler(0xe000000, 0xe01ffff, write32_delegate(FUNC(gba_cart_slot_device::write_ram),(gba_cart_slot_device*)m_cart)); @@ -2245,15 +2256,21 @@ void gba_state::machine_start() static SLOT_INTERFACE_START(gba_cart) - SLOT_INTERFACE_INTERNAL("gba_rom", GBA_ROM_STD) - SLOT_INTERFACE_INTERNAL("gba_sram", GBA_ROM_SRAM) - SLOT_INTERFACE_INTERNAL("gba_eeprom", GBA_ROM_EEPROM) - SLOT_INTERFACE_INTERNAL("gba_eeprom_4k", GBA_ROM_EEPROM) - SLOT_INTERFACE_INTERNAL("gba_eeprom_64k", GBA_ROM_EEPROM64) - SLOT_INTERFACE_INTERNAL("gba_flash", GBA_ROM_FLASH) // Panasonic - SLOT_INTERFACE_INTERNAL("gba_flash_512", GBA_ROM_FLASH) // Panasonic - SLOT_INTERFACE_INTERNAL("gba_flash_1m", GBA_ROM_FLASH1M) // Sanyo - SLOT_INTERFACE_INTERNAL("gba_3dmatrix", GBA_ROM_3DMATRIX) + SLOT_INTERFACE_INTERNAL("gba_rom", GBA_ROM_STD) + SLOT_INTERFACE_INTERNAL("gba_sram", GBA_ROM_SRAM) + SLOT_INTERFACE_INTERNAL("gba_drilldoz", GBA_ROM_DRILLDOZ) // Rumble output unemulated + SLOT_INTERFACE_INTERNAL("gba_wariotws", GBA_ROM_WARIOTWS) // Rumble output unemulated + SLOT_INTERFACE_INTERNAL("gba_eeprom", GBA_ROM_EEPROM) + SLOT_INTERFACE_INTERNAL("gba_eeprom_4k", GBA_ROM_EEPROM) + SLOT_INTERFACE_INTERNAL("gba_yoshiug", GBA_ROM_YOSHIUG) + SLOT_INTERFACE_INTERNAL("gba_eeprom_64k", GBA_ROM_EEPROM64) + SLOT_INTERFACE_INTERNAL("gba_boktai", GBA_ROM_BOKTAI) + SLOT_INTERFACE_INTERNAL("gba_flash", GBA_ROM_FLASH) // Panasonic + SLOT_INTERFACE_INTERNAL("gba_flash_rtc", GBA_ROM_FLASH_RTC) // Panasonic + SLOT_INTERFACE_INTERNAL("gba_flash_512", GBA_ROM_FLASH) // Panasonic + SLOT_INTERFACE_INTERNAL("gba_flash_1m", GBA_ROM_FLASH1M) // Sanyo + SLOT_INTERFACE_INTERNAL("gba_flash_1m_rtc", GBA_ROM_FLASH1M_RTC) // Sanyo + SLOT_INTERFACE_INTERNAL("gba_3dmatrix", GBA_ROM_3DMATRIX) SLOT_INTERFACE_END diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp index 91eedfcdf83..f163feedce1 100644 --- a/src/mame/drivers/gticlub.cpp +++ b/src/mame/drivers/gticlub.cpp @@ -272,7 +272,7 @@ public: required_device m_maincpu; required_device m_audiocpu; required_device m_dsp; - optional_device m_dsp2; + optional_device m_dsp2; required_device m_k056800; required_device m_adc1038; required_device m_eeprom; @@ -1402,6 +1402,8 @@ ROM_END DRIVER_INIT_MEMBER(gticlub_state,gticlub) { m_sharc_dataram_0 = std::make_unique(0x100000/4); + + m_dsp->enable_recompiler(); } void gticlub_state::init_hangplt_common() diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp index 95a661ac51d..b1e46060f35 100644 --- a/src/mame/drivers/hh_ucom4.cpp +++ b/src/mame/drivers/hh_ucom4.cpp @@ -1632,6 +1632,7 @@ MACHINE_CONFIG_END Mattel Computer Gin * NEC uCOM-43 MCU, label D650C 060 + * Hughes HLCD0569 LCD driver ***************************************************************************/ diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 0f070dd2494..2753b3fa849 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -369,8 +369,8 @@ public: required_device m_audiocpu; required_device m_k056800; optional_device m_gn680; - required_device m_dsp; - optional_device m_dsp2; + required_device m_dsp; + optional_device m_dsp2; optional_device m_k037122_1; optional_device m_k037122_2; required_device m_adc12138; @@ -423,6 +423,9 @@ public: DECLARE_DRIVER_INIT(hornet); DECLARE_DRIVER_INIT(hornet_2board); + DECLARE_DRIVER_INIT(gradius4); + DECLARE_DRIVER_INIT(nbapbp); + DECLARE_DRIVER_INIT(terabrst); virtual void machine_start() override; virtual void machine_reset() override; DECLARE_MACHINE_RESET(hornet_2board); @@ -1118,7 +1121,7 @@ static MACHINE_CONFIG_DERIVED( hornet_2board, hornet ) MCFG_KONPPC_CGBOARD_TYPE(CGBOARD_TYPE_HORNET) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( terabrst, hornet_2board ) +static MACHINE_CONFIG_DERIVED( terabrst, hornet ) MCFG_CPU_ADD("gn680", M68000, XTAL_32MHz/2) /* 16MHz */ MCFG_CPU_PROGRAM_MAP(gn680_memmap) @@ -1307,6 +1310,24 @@ DRIVER_INIT_MEMBER(hornet_state,hornet_2board) m_maincpu->ppc4xx_spu_set_tx_handler(write8_delegate(FUNC(hornet_state::jamma_jvs_w), this)); } +DRIVER_INIT_MEMBER(hornet_state, gradius4) +{ + DRIVER_INIT_CALL(hornet); + m_dsp->enable_recompiler(); +} + +DRIVER_INIT_MEMBER(hornet_state, nbapbp) +{ + DRIVER_INIT_CALL(hornet); + m_dsp->enable_recompiler(); +} + +DRIVER_INIT_MEMBER(hornet_state, terabrst) +{ + DRIVER_INIT_CALL(hornet); + m_dsp->enable_recompiler(); +} + /*****************************************************************************/ ROM_START(sscope) @@ -1540,10 +1561,10 @@ ROM_END /*************************************************************************/ -GAME( 1998, gradius4, 0, hornet, hornet, hornet_state, hornet, ROT0, "Konami", "Gradius 4: Fukkatsu", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1998, nbapbp, 0, hornet, hornet, hornet_state, hornet, ROT0, "Konami", "NBA Play By Play", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAMEL( 1998, terabrst, 0, terabrst, hornet, hornet_state, hornet_2board, ROT0, "Konami", "Teraburst (1998/07/17 ver UEL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_dualhsxs ) -GAMEL( 1998, terabrsta, terabrst, terabrst, hornet, hornet_state, hornet_2board, ROT0, "Konami", "Teraburst (1998/02/25 ver AAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_dualhsxs ) +GAME( 1998, gradius4, 0, hornet, hornet, hornet_state, gradius4, ROT0, "Konami", "Gradius 4: Fukkatsu", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, nbapbp, 0, hornet, hornet, hornet_state, nbapbp, ROT0, "Konami", "NBA Play By Play", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, terabrst, 0, terabrst, hornet, hornet_state, terabrst, ROT0, "Konami", "Teraburst (1998/07/17 ver UEL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, terabrsta, terabrst, terabrst, hornet, hornet_state, terabrst, ROT0, "Konami", "Teraburst (1998/02/25 ver AAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // The region comes from the Timekeeper NVRAM, without a valid default all sets except 'xxD, Ver 1.33' will init their NVRAM to UAx versions, the xxD set seems to incorrectly init it to JXD, which isn't a valid // version, and thus can't be booted. If you copy the NVRAM from another already initialized set, it will boot as UAD. diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp index 748ea998ef3..685310442d8 100644 --- a/src/mame/drivers/hp9845.cpp +++ b/src/mame/drivers/hp9845.cpp @@ -20,8 +20,8 @@ // - Keyboard // - T15 tape drive // - Software list to load optional ROMs -// What's not yet in: // - Beeper +// What's not yet in: // - Better naming of tape drive image (it's now "magt", should be "t15") // - Better documentation of this file // What's wrong: @@ -34,6 +34,7 @@ #include "cpu/hphybrid/hphybrid.h" #include "machine/hp_taco.h" #include "bus/hp_optroms/hp_optrom.h" +#include "sound/beep.h" #define BIT_MASK(n) (1U << (n)) @@ -111,7 +112,9 @@ public: m_io_key1(*this , "KEY1"), m_io_key2(*this , "KEY2"), m_io_key3(*this , "KEY3"), - m_t15(*this , "t15") + m_t15(*this , "t15"), + m_beeper(*this , "beeper"), + m_beep_timer(*this , "beep_timer") { } UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -138,6 +141,7 @@ public: DECLARE_READ16_MEMBER(kb_scancode_r); DECLARE_READ16_MEMBER(kb_status_r); DECLARE_WRITE16_MEMBER(kb_irq_clear_w); + TIMER_DEVICE_CALLBACK_MEMBER(beeper_off); DECLARE_WRITE8_MEMBER(pa_w); @@ -156,6 +160,8 @@ private: required_ioport m_io_key2; required_ioport m_io_key3; required_device m_t15; + required_device m_beeper; + required_device m_beep_timer; void set_video_mar(UINT16 mar); void video_fill_buff(bool buff_idx); @@ -416,6 +422,8 @@ void hp9845b_state::machine_reset() memset(&m_kb_state[ 0 ] , 0 , sizeof(m_kb_state)); m_kb_scancode = 0x7f; m_kb_status = 0; + + m_beeper->set_state(0); } void hp9845b_state::set_video_mar(UINT16 mar) @@ -512,7 +520,6 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in UINT8 chargen_byte = m_chargen[ line_in_row | ((unsigned)charcode << 4) ]; UINT16 pixels; - // TODO: Handle selection of 2nd chargen // TODO: Check if order of bits in "pixels" is ok if ((ul_line && BIT(attrs , 3)) || @@ -520,8 +527,11 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in pixels = ~0; } else if (char_blink && BIT(attrs , 2)) { pixels = 0; + } else if (BIT(attrs , 4)) { + // Optional character generator ROM not installed, it reads as 1 everywhere + pixels = 0x7f << 1; } else { - pixels = (UINT16)(chargen_byte & 0x7f) << 2; + pixels = (UINT16)(chargen_byte & 0x7f) << 1; } if (BIT(attrs , 1)) { @@ -1004,7 +1014,17 @@ WRITE16_MEMBER(hp9845b_state::kb_irq_clear_w) BIT_CLR(m_kb_status, 0); update_irq(); m_lpu->status_w(0); - // TODO: beeper start + + if (BIT(data , 15)) { + // Start beeper + m_beep_timer->adjust(attotime::from_ticks(64, KEY_SCAN_OSCILLATOR / 512)); + m_beeper->set_state(1); + } +} + +TIMER_DEVICE_CALLBACK_MEMBER(hp9845b_state::beeper_off) +{ + m_beeper->set_state(0); } WRITE8_MEMBER(hp9845b_state::pa_w) @@ -1129,21 +1149,39 @@ static MACHINE_CONFIG_START( hp9845b, hp9845b_state ) // Actual keyboard refresh rate should be KEY_SCAN_OSCILLATOR / 128 (2560 Hz) MCFG_TIMER_DRIVER_ADD_PERIODIC("kb_timer" , hp9845b_state , kb_scan , attotime::from_hz(100)) + // Beeper + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("beeper" , BEEP , KEY_SCAN_OSCILLATOR / 512) + MCFG_SOUND_ROUTE(ALL_OUTPUTS , "mono" , 1.00) + + MCFG_TIMER_DRIVER_ADD("beep_timer" , hp9845b_state , beeper_off); + // Tape controller MCFG_DEVICE_ADD("t15" , HP_TACO , 4000000) MCFG_TACO_IRQ_HANDLER(WRITELINE(hp9845b_state , t15_irq_w)) MCFG_TACO_FLG_HANDLER(WRITELINE(hp9845b_state , t15_flg_w)) MCFG_TACO_STS_HANDLER(WRITELINE(hp9845b_state , t15_sts_w)) - // In real machine there were 8 slots for LPU ROMs and 8 slots for PPU ROMs in - // right-hand side and left-hand side drawers, respectively. - // Here we do away with the distinction between LPU & PPU ROMs: in the end they - // are visible to both CPUs at the same addresses. - // For now we define just a couple of slots.. - MCFG_DEVICE_ADD("drawer1", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) - MCFG_DEVICE_ADD("drawer2", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + // In real machine there were 8 slots for LPU ROMs and 8 slots for PPU ROMs in + // right-hand side and left-hand side drawers, respectively. + // Here we do away with the distinction between LPU & PPU ROMs: in the end they + // are visible to both CPUs at the same addresses. + MCFG_DEVICE_ADD("drawer1", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer2", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer3", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer4", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer5", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer6", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer7", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) + MCFG_DEVICE_ADD("drawer8", HP_OPTROM_SLOT, 0) + MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false) MCFG_SOFTWARE_LIST_ADD("optrom_list", "hp9845b_rom") MACHINE_CONFIG_END @@ -1253,6 +1291,6 @@ COMP( 1978, hp9845a, 0, 0, hp9845a, hp9845, driver_device, 0, COMP( 1978, hp9845s, hp9845a, 0, hp9845a, hp9845, driver_device, 0, "Hewlett-Packard", "9845S", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) COMP( 1979, hp9835a, 0, 0, hp9835a, hp9845, driver_device, 0, "Hewlett-Packard", "9835A", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) COMP( 1979, hp9835b, hp9835a, 0, hp9835a, hp9845, driver_device, 0, "Hewlett-Packard", "9835B", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -COMP( 1980, hp9845b, 0, 0, hp9845b, hp9845b,driver_device, 0, "Hewlett-Packard", "9845B", MACHINE_NO_SOUND ) +COMP( 1980, hp9845b, 0, 0, hp9845b, hp9845b,driver_device, 0, "Hewlett-Packard", "9845B", 0 ) COMP( 1980, hp9845t, hp9845b, 0, hp9845b, hp9845b,driver_device, 0, "Hewlett-Packard", "9845T", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) COMP( 1981, hp9845c, hp9845b, 0, hp9845b, hp9845b,driver_device, 0, "Hewlett-Packard", "9845C", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/drivers/imds2.cpp b/src/mame/drivers/imds2.cpp index 65e32e3009f..bcc2358c81c 100644 --- a/src/mame/drivers/imds2.cpp +++ b/src/mame/drivers/imds2.cpp @@ -62,7 +62,7 @@ // // NOTE: // Firmware running on PIO is NOT original because a dump is not available at the moment. -// Emulator runs a version of PIO firmware that was specifically developped by me to implement +// Emulator runs a version of PIO firmware that was specifically developed by me to implement // line printer output. // // TODO: @@ -881,7 +881,18 @@ MACHINE_CONFIG_END ROM_START(imds2) // ROM definition of IPC cpu (8085A) ROM_REGION(0x1000 , "ipcrom" , 0) - ROM_LOAD("ipc_a82.bin" , 0x0000 , 0x1000 , CRC(0889394f) SHA1(b7525baf1884a7d67402dea4b5566016a9861ef2)) + ROM_DEFAULT_BIOS("mon13") + // 1x2732 Copyright 1979 + ROM_SYSTEM_BIOS(0, "mon13", "Series II Monitor v1.3") + ROMX_LOAD("ipc13_a82.bin" , 0x0000 , 0x1000 , CRC(0889394f) SHA1(b7525baf1884a7d67402dea4b5566016a9861ef2), ROM_BIOS(1)) + // 2x2716 Copyright 1978 + ROM_SYSTEM_BIOS(1, "mon12", "Series II Monitor v1.2") + ROMX_LOAD("ipc12_a57.bin" , 0x0000 , 0x0800 , CRC(6496efaf) SHA1(1a9c0f1b19c1807803db3f1543f51349d7fd693a), ROM_BIOS(2)) + ROMX_LOAD("ipc12_a48.bin" , 0x0800 , 0x0800 , CRC(258dc9a6) SHA1(3fde993aee06d9af5093d7a2d9a8cbd71fed0951), ROM_BIOS(2)) + // 2x2716 Copyright 1977 + ROM_SYSTEM_BIOS(2, "mon11", "Series II Monitor v1.1") + ROMX_LOAD("ipc11_a57.bin" , 0x0000 , 0x0800 , CRC(ffb7c036) SHA1(6f60cdfe20621c4b633c972adcb644a1c02eaa39), ROM_BIOS(3)) + ROMX_LOAD("ipc11_a48.bin" , 0x0800 , 0x0800 , CRC(3696ff28) SHA1(38b435e10a81629430275aec051fb0a55ec1f6fd), ROM_BIOS(3)) // ROM definition of IOC cpu (8080A) ROM_REGION(0x2000 , "ioccpu" , 0) @@ -891,7 +902,7 @@ ROM_START(imds2) ROM_LOAD("ioc_a53.bin" , 0x1800 , 0x0800 , CRC(c8df4bb9) SHA1(2dfb921e94ae7033a7182457b2f00657674d1b77)) // ROM definition of PIO controller (8041A) - // For the time being a specially developped PIO firmware is used until a dump of the original PIO is + // For the time being a specially developed PIO firmware is used until a dump of the original PIO is // available. ROM_REGION(0x400 , "iocpio" , 0) ROM_LOAD("pio_a72.bin" , 0 , 0x400 , BAD_DUMP CRC(8c8e740b)) diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp new file mode 100644 index 00000000000..52812eb7b55 --- /dev/null +++ b/src/mame/drivers/isbc8010.cpp @@ -0,0 +1,266 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes,Ryan Holtz +/*************************************************************************** + + Intel SBC 80/10 and SBC 80/10A Single Board Computers + +The difference between the SBC 80/10 and SBC 80/10A is in the type and +quantity of memory available on each board. + +There is no speaker or storage facility in the standard kit. + +Download the User Manual to get the operating procedures. + +Monitor Commands: +D Display memory command +G Program execute command +I Insert instructions into memory +M Move memory command +R Read hexadecimal file +S Substitute memory command +W Write hexadecimal file +X Examine and modify CPU registers command + +No known manual or schematic of the video board. + +****************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" +#include "machine/i8255.h" +#include "machine/i8251.h" +#include "machine/clock.h" +#include "bus/rs232/rs232.h" +//#include "machine/ay31015.h" + +#define I8255A_1_TAG "ppi8255_1" +#define I8255A_2_TAG "ppi8255_2" +#define I8251A_TAG "usart" +#define I8251A_BAUD_TAG "usart_baud" +#define RS232_TAG "rs232" + +class isbc8010_state : public driver_device +{ +public: + isbc8010_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_usart(*this, I8251A_TAG) + , m_ppi_0(*this, I8255A_1_TAG) + , m_ppi_1(*this, I8255A_2_TAG) + , m_rs232(*this, RS232_TAG) + , m_usart_baud_rate(*this, I8251A_BAUD_TAG) + , m_usart_divide_counter(0) + , m_usart_clock_state(0) + { } + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + DECLARE_WRITE_LINE_MEMBER( usart_clock_tick ); + +private: + required_device m_maincpu; + required_device m_usart; + required_device m_ppi_0; + required_device m_ppi_1; + required_device m_rs232; + required_ioport m_usart_baud_rate; + + UINT8 m_usart_divide_counter; + UINT8 m_usart_clock_state; +}; + +static ADDRESS_MAP_START(isbc8010_mem, AS_PROGRAM, 8, isbc8010_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x0fff) AM_ROM + AM_RANGE(0x3c00, 0x3fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START(isbc8010a_mem, AS_PROGRAM, 8, isbc8010_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x1fff) AM_ROM + AM_RANGE(0x3c00, 0x3fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START(isbc8010b_mem, AS_PROGRAM, 8, isbc8010_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x3c00, 0x3fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START(isbc8010_io, AS_IO, 8, isbc8010_state) + ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE(I8255A_1_TAG, i8255_device, read, write) + AM_RANGE(0xe8, 0xeb) AM_DEVREADWRITE(I8255A_2_TAG, i8255_device, read, write) + AM_RANGE(0xec, 0xec) AM_MIRROR(0x02) AM_DEVREADWRITE(I8251A_TAG, i8251_device, data_r, data_w) + AM_RANGE(0xed, 0xed) AM_MIRROR(0x02) AM_DEVREADWRITE(I8251A_TAG, i8251_device, status_r, control_w) + //AM_RANGE(0xf0, 0xf7) MCS0 - iSBX Multimodule + //AM_RANGE(0xf8, 0xff) MCS1 - iSBX Multimodule +ADDRESS_MAP_END + +static INPUT_PORTS_START( isbc8010 ) + PORT_START(I8251A_BAUD_TAG) + PORT_DIPNAME( 0x3f, 0x01, "i8251 Baud Rate" ) + PORT_DIPSETTING( 0x01, "4800") + PORT_DIPSETTING( 0x02, "2400") + PORT_DIPSETTING( 0x04, "1200") + PORT_DIPSETTING( 0x08, "600") + PORT_DIPSETTING( 0x10, "300") + PORT_DIPSETTING( 0x20, "150") + PORT_DIPSETTING( 0x40, "75") +INPUT_PORTS_END + +#if 0 +/* Graphics Output */ +const gfx_layout sdk80_charlayout = +{ + 7, 8, /* character cell is 7 pixels wide by 8 pixels high */ + 64, /* 64 characters in 2513 character generator ROM */ + 1, /* 1 bitplane */ + { 0 }, + /* 5 visible pixels per row, starting at bit 3, with MSB being 0: */ + { 3, 4, 5, 6, 7 }, + /* pixel rows stored from top to bottom: */ + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8 * 8 /* 8 8-bit pixel rows per character */ +}; + +static GFXDECODE_START( isbc8010 ) + GFXDECODE_ENTRY( "gfx1", 0x0000, sdk80_charlayout, 0, 1 ) +GFXDECODE_END +#endif + +UINT32 isbc8010_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +WRITE_LINE_MEMBER( isbc8010_state::usart_clock_tick ) +{ + UINT8 old_counter = m_usart_divide_counter; + m_usart_divide_counter++; + + UINT8 transition = (old_counter ^ m_usart_divide_counter) & m_usart_baud_rate->read(); + if (transition) + { + m_usart->write_txc(m_usart_clock_state); + m_usart->write_rxc(m_usart_clock_state); + m_usart_clock_state ^= 1; + } +} + +static DEVICE_INPUT_DEFAULTS_START( terminal ) // set up terminal to default to 4800 + DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_4800 ) + DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_4800 ) + DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 ) + DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 ) + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE ) + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) +DEVICE_INPUT_DEFAULTS_END + +static MACHINE_CONFIG_START( isbc8010, isbc8010_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", I8080A, XTAL_18_432MHz/9) + MCFG_CPU_PROGRAM_MAP(isbc8010_mem) + MCFG_CPU_IO_MAP(isbc8010_io) + + MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0) + MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) + MCFG_I8251_DTR_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) + MCFG_I8251_RTS_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) + + MCFG_DEVICE_ADD(I8255A_1_TAG, I8255A, 0) + MCFG_DEVICE_ADD(I8255A_2_TAG, I8255A, 0) + + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_cts)) + MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal) + + MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL_18_432MHz/60) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(isbc8010_state, usart_clock_tick)) + + /* video hardware */ + // 96364 crt controller + +// MCFG_SCREEN_ADD("screen", RASTER) +// MCFG_SCREEN_REFRESH_RATE(60) + /* Video is blanked for 70 out of 262 scanlines per refresh cycle. + Each scanline is composed of 65 character times, 40 of which + are visible, and each character time is 7 dot times; a dot time + is 2 cycles of the fundamental 14.31818 MHz oscillator. The + total blanking time is about 4450 microseconds. */ +// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((int) (70 * 65 * 7 * 2 / 14.31818))) + /* It would be nice if we could implement some sort of display + overscan here. */ +// MCFG_SCREEN_SIZE(40 * 7, 24 * 8) +// MCFG_SCREEN_VISIBLE_AREA(0, 40 * 7 - 1, 0, 24 * 8 - 1) +// MCFG_SCREEN_UPDATE_DRIVER(sdk80_state, screen_update) +// MCFG_SCREEN_PALETTE("palette") + +// MCFG_GFXDECODE_ADD("gfxdecode", "palette", sdk80) + +// MCFG_PALETTE_ADD_MONOCHROME("palette") + + // Video board UART +// MCFG_DEVICE_ADD( "hd6402", AY31015, 0 ) +// MCFG_AY31015_TX_CLOCK(( XTAL_16MHz / 16 ) / 256) +// MCFG_AY31015_RX_CLOCK(( XTAL_16MHz / 16 ) / 256) +// MCFG_AY51013_READ_SI_CB(READ8(sdk80_state, nascom1_hd6402_si)) +// MCFG_AY51013_WRITE_SO_CB(WRITE8(sdk80_state, nascom1_hd6402_so)) + + /* Devices */ +// MCFG_DEVICE_ADD("i8279", I8279, 3100000) // based on divider +// MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE)) // irq +// MCFG_I8279_OUT_SL_CB(WRITE8(sdk80_state, scanlines_w)) // scan SL lines +// MCFG_I8279_OUT_DISP_CB(WRITE8(sdk80_state, digit_w)) // display A&B +// MCFG_I8279_IN_RL_CB(READ8(sdk80_state, kbd_r)) // kbd RL lines +// MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key +// MCFG_I8279_IN_CTRL_CB(VCC) + +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( isbc8010a, isbc8010 ) + /* basic machine hardware */ + MCFG_CPU_MODIFY( "maincpu" ) + MCFG_CPU_PROGRAM_MAP(isbc8010a_mem) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( isbc8010b, isbc8010 ) + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(isbc8010b_mem) +MACHINE_CONFIG_END + +/* ROM definition */ +ROM_START( isbc8010 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_DEFAULT_BIOS("mon11") + ROM_SYSTEM_BIOS( 0, "mon11", "80/10 Monitor v1.1" ) + ROMX_LOAD( "sbc80p.a23", 0x0000, 0x0400, CRC(bd49a7d6) SHA1(3b2f18abf35efe05f38eb08bf0c6d0f45fa7ae0a), ROM_BIOS(1)) + ROMX_LOAD( "sbc80p.a24", 0x0400, 0x0400, CRC(18131631) SHA1(6fb29df38e056c966dcc95885bc59c2a3caf4baf), ROM_BIOS(1)) + + ROM_SYSTEM_BIOS( 1, "bas80", "BASIC-80" ) + ROMX_LOAD( "basic_blc_1.a24", 0x0000, 0x0400, CRC(b5e75aee) SHA1(6bd1eb9586d72544e8afb4ae43ecedcefa14da33), ROM_BIOS(2)) + ROMX_LOAD( "basic_blc_2.a25", 0x0400, 0x0400, CRC(0a9ad1ed) SHA1(92c47eadcf8b18eeedcccaa3deb9f1518aaceeae), ROM_BIOS(2)) + ROMX_LOAD( "basic_blc_3.a26", 0x0800, 0x0400, CRC(bc898e4b) SHA1(adc000534db0f736a75fbceed360dc220e02c30d), ROM_BIOS(2)) + ROMX_LOAD( "basic_blc_4.a27", 0x0c00, 0x0400, CRC(568e8b6d) SHA1(22960193d3b0ae1b5d876d8c3b3f3b40db01358c), ROM_BIOS(2)) + + /* 512-byte Signetics 2513 character generator ROM at location D2-D3 */ + ROM_REGION(0x0200, "gfx1",0) + ROM_LOAD("s2513.d2", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) + + /* 256x4 PROM located on the video board, schematic location P7, to be moved into separate device later */ + ROM_REGION( 0x0120, "proms", 0 ) + ROM_LOAD( "6300__d7.p7", 0x0020, 0x0100, CRC(3eb3a8e4) SHA1(19097b5f60d1030f8b82d9f1d3a241f93e5c75d6) ) +ROM_END + +#define rom_isbc8010a rom_isbc8010 +#define rom_isbc8010b rom_isbc8010 + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1975, isbc8010, 0, 0, isbc8010, isbc8010, driver_device, 0, "Intel", "iSBC 80/10", MACHINE_NO_SOUND_HW ) +COMP( 1977, isbc8010a, isbc8010, 0, isbc8010a, isbc8010, driver_device, 0, "Intel", "iSBC 80/10A", MACHINE_NO_SOUND_HW ) +COMP( 1979, isbc8010b, isbc8010, 0, isbc8010b, isbc8010, driver_device, 0, "Intel", "iSBC 80/10B", MACHINE_NO_SOUND_HW ) diff --git a/src/mame/drivers/isbc8030.cpp b/src/mame/drivers/isbc8030.cpp new file mode 100644 index 00000000000..5b7e4be1649 --- /dev/null +++ b/src/mame/drivers/isbc8030.cpp @@ -0,0 +1,177 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Intel SBC 80/30 Single Board Computer + +System Initialization (Reset): +The USART clock is initially set at 9600 baud. Two "U" characters are used +to check for baud rate. When the first "U" character is entered it is +checked for 9600, 4800, 2400, and 1200 baud rate. If a match is found then +that baud rate is set into the clock. If not, then a second "U" character +must be entered. The second "U" character is checked for 600, 300, 150, +and 110 baud. When the baud rate has been successfully determined, the sign +-on message "80/30 MONITOR" will be displayed on the console. When the +monitor is ready for a command, it will prompt with a period ".". + +Download the User Manual to get the operating procedures. + +Monitor Commands: +D Display memory command +G Program execute command +N Single step command +I Insert instruction into memory +M Move memory command +R Read hexadecimal file +S Substitute memory command +W Write hexadecimal file +X Examine and modify CPU registers + +****************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" +#include "machine/pic8259.h" +#include "machine/pit8253.h" +#include "machine/i8255.h" +#include "machine/i8251.h" +#include "machine/clock.h" +#include "bus/rs232/rs232.h" + +#define I8259A_TAG "pic8259" +#define I8253_TAG "pit8253" +#define I8255A_TAG "ppi8255" +#define I8251A_TAG "usart" +#define I8251A_BAUD_TAG "usart_baud" +#define RS232_TAG "rs232" + +class isbc8030_state : public driver_device +{ +public: + isbc8030_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_usart(*this, I8251A_TAG) + , m_ppi(*this, I8255A_TAG) + , m_pic(*this, I8259A_TAG) + , m_pit(*this, I8253_TAG) + , m_rs232(*this, RS232_TAG) + , m_usart_baud_rate(*this, I8251A_BAUD_TAG) + , m_usart_divide_counter(0) + , m_usart_clock_state(0) + { } + + DECLARE_WRITE_LINE_MEMBER( usart_clock_tick ); + + DECLARE_WRITE_LINE_MEMBER( isbc8030_tmr2_w ); + +private: + required_device m_maincpu; + required_device m_usart; + required_device m_ppi; + required_device m_pic; + required_device m_pit; + required_device m_rs232; + required_ioport m_usart_baud_rate; + + UINT8 m_usart_divide_counter; + UINT8 m_usart_clock_state; +}; + +static ADDRESS_MAP_START(isbc8030_mem, AS_PROGRAM, 8, isbc8030_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x1fff) AM_ROM + AM_RANGE(0x2000, 0xffff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START(isbc8030_io, AS_IO, 8, isbc8030_state) + ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0xd8, 0xd9) AM_DEVREADWRITE(I8259A_TAG, pic8259_device, read, write) + AM_RANGE(0xdc, 0xdf) AM_DEVREADWRITE(I8253_TAG, pit8253_device, read, write) + AM_RANGE(0xe8, 0xeb) AM_DEVREADWRITE(I8255A_TAG, i8255_device, read, write) + AM_RANGE(0xec, 0xec) AM_MIRROR(0x02) AM_DEVREADWRITE(I8251A_TAG, i8251_device, data_r, data_w) + AM_RANGE(0xed, 0xed) AM_MIRROR(0x02) AM_DEVREADWRITE(I8251A_TAG, i8251_device, status_r, control_w) +ADDRESS_MAP_END + +static INPUT_PORTS_START( isbc8030 ) + PORT_START(I8251A_BAUD_TAG) + PORT_DIPNAME( 0x3f, 0x01, "i8251 Baud Rate" ) + PORT_DIPSETTING( 0x01, "4800") + PORT_DIPSETTING( 0x02, "2400") + PORT_DIPSETTING( 0x04, "1200") + PORT_DIPSETTING( 0x08, "600") + PORT_DIPSETTING( 0x10, "300") + PORT_DIPSETTING( 0x20, "150") + PORT_DIPSETTING( 0x40, "75") +INPUT_PORTS_END + +WRITE_LINE_MEMBER( isbc8030_state::usart_clock_tick ) +{ + UINT8 old_counter = m_usart_divide_counter; + m_usart_divide_counter++; + + UINT8 transition = (old_counter ^ m_usart_divide_counter) & m_usart_baud_rate->read(); + if (transition) + { + m_usart->write_txc(m_usart_clock_state); + m_usart->write_rxc(m_usart_clock_state); + m_usart_clock_state ^= 1; + } +} + +WRITE_LINE_MEMBER( isbc8030_state::isbc8030_tmr2_w ) +{ + m_usart->write_rxc(state); + m_usart->write_txc(state); +} + +static DEVICE_INPUT_DEFAULTS_START( terminal ) // set up terminal to default to 4800 + DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_4800 ) + DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_4800 ) + DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 ) + DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 ) + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE ) + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) +DEVICE_INPUT_DEFAULTS_END + +static MACHINE_CONFIG_START( isbc8030, isbc8030_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", I8085A, XTAL_22_1184MHz / 4) + MCFG_CPU_PROGRAM_MAP(isbc8030_mem) + MCFG_CPU_IO_MAP(isbc8030_io) + + MCFG_PIC8259_ADD(I8259A_TAG, INPUTLINE(":maincpu", 0), VCC, NOOP) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_22_1184MHz / 18) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_22_1184MHz / 18) + MCFG_PIT8253_CLK2(XTAL_22_1184MHz / 18) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc8030_state, isbc8030_tmr2_w)) + + MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0) + MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) + MCFG_I8251_DTR_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) + MCFG_I8251_RTS_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) + + MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0) + + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_cts)) + MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal) + + MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL_18_432MHz/60) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(isbc8030_state, usart_clock_tick)) +MACHINE_CONFIG_END + +/* ROM definition */ +ROM_START( isbc8030 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "mon830.bin", 0x0000, 0x0800, CRC(cda15115) SHA1(242dad14a919568178b363c3e27f22ec0a5849b3)) +ROM_END + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1978, isbc8030, 0, 0, isbc8030, isbc8030, driver_device, 0, "Intel", "iSBC 80/30", MACHINE_NO_SOUND_HW ) diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp index 5351f5f1b79..64c34ac3cf2 100644 --- a/src/mame/drivers/jangou.cpp +++ b/src/mame/drivers/jangou.cpp @@ -28,6 +28,7 @@ $c088-$c095 player tiles #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6800/m6800.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "sound/hc55516.h" #include "sound/msm5205.h" @@ -48,7 +49,8 @@ public: m_msm(*this, "msm"), m_cvsd(*this, "cvsd"), m_palette(*this, "palette"), - m_blitter(*this, "blitter") { } + m_blitter(*this, "blitter"), + m_soundlatch(*this, "soundlatch") { } /* sound-related */ // Jangou CVSD Sound @@ -72,6 +74,7 @@ public: optional_device m_cvsd; required_device m_palette; required_device m_blitter; + optional_device m_soundlatch; /* video-related */ DECLARE_WRITE8_MEMBER(mux_w); @@ -233,14 +236,14 @@ READ8_MEMBER(jangou_state::input_system_r) WRITE8_MEMBER(jangou_state::sound_latch_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_cpu_1->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER(jangou_state::sound_latch_r) { m_cpu_1->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } /* Jangou HC-55516 CVSD */ @@ -859,6 +862,8 @@ static MACHINE_CONFIG_START( jangou, jangou_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK / 16) MCFG_AY8910_PORT_A_READ_CB(READ8(jangou_state, input_mux_r)) MCFG_AY8910_PORT_B_READ_CB(READ8(jangou_state, input_system_r)) @@ -909,6 +914,7 @@ static MACHINE_CONFIG_DERIVED( cntrygrl, jangou ) /* sound hardware */ MCFG_DEVICE_REMOVE("cvsd") + MCFG_DEVICE_REMOVE("soundlatch") MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( roylcrdn, jangou ) @@ -928,6 +934,7 @@ static MACHINE_CONFIG_DERIVED( roylcrdn, jangou ) /* sound hardware */ MCFG_DEVICE_REMOVE("cvsd") + MCFG_DEVICE_REMOVE("soundlatch") MACHINE_CONFIG_END diff --git a/src/mame/drivers/macrossp.cpp b/src/mame/drivers/macrossp.cpp index 17fdd2aed35..06ac837ff20 100644 --- a/src/mame/drivers/macrossp.cpp +++ b/src/mame/drivers/macrossp.cpp @@ -307,7 +307,7 @@ WRITE32_MEMBER(macrossp_state::macrossp_soundcmd_w) if (ACCESSING_BITS_16_31) { //logerror("%08x write soundcmd %08x (%08x)\n",space.device().safe_pc(),data,mem_mask); - soundlatch_word_w(space, 0, data >> 16, 0xffff); + m_soundlatch->write(space, 0, data >> 16, 0xffff); m_sndpending = 1; m_audiocpu->set_input_line(2, HOLD_LINE); /* spin for a while to let the sound CPU read the command */ @@ -319,7 +319,7 @@ READ16_MEMBER(macrossp_state::macrossp_soundcmd_r) { // logerror("%06x read soundcmd\n",space.device().safe_pc()); m_sndpending = 0; - return soundlatch_word_r(space, offset, mem_mask); + return m_soundlatch->read(space, offset, mem_mask); } WRITE16_MEMBER(macrossp_state::palette_fade_w) @@ -564,6 +564,8 @@ static MACHINE_CONFIG_START( macrossp, macrossp_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_SOUND_ADD("ensoniq", ES5506, 16000000) MCFG_ES5506_REGION0("ensoniq.0") MCFG_ES5506_REGION1("ensoniq.1") diff --git a/src/mame/drivers/mario.cpp b/src/mame/drivers/mario.cpp index b4d736fbfdc..5c21955bfab 100644 --- a/src/mame/drivers/mario.cpp +++ b/src/mame/drivers/mario.cpp @@ -159,7 +159,7 @@ static ADDRESS_MAP_START( masao_map, AS_PROGRAM, 8, mario_state) AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_RANGE(0x7d00, 0x7d00) AM_WRITE(mario_scroll_w) - AM_RANGE(0x7e00, 0x7e00) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x7e00, 0x7e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x7e80, 0x7e80) AM_WRITE(mario_gfxbank_w) AM_RANGE(0x7e82, 0x7e82) AM_WRITE(mario_flip_w) AM_RANGE(0x7e83, 0x7e83) AM_WRITE(mario_palettebank_w) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 8c1981adcee..6c598b3764e 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -105,12 +105,9 @@ driver modified by Hau #include "cpu/upd7810/upd7810.h" #include "cpu/h8/h83006.h" #include "includes/metro.h" -#include "machine/eepromser.h" #include "machine/watchdog.h" -#include "sound/2151intf.h" #include "sound/2413intf.h" #include "sound/2610intf.h" -#include "sound/okim6295.h" #include "sound/ymf278b.h" @@ -270,9 +267,9 @@ INTERRUPT_GEN_MEMBER(metro_state::puzzlet_interrupt) READ_LINE_MEMBER(metro_state::metro_rxd_r) { address_space &space = m_maincpu->space(AS_PROGRAM); - UINT8 data = soundlatch_byte_r(space, 0); + UINT8 data = m_soundlatch->read(space, 0); - soundlatch_byte_w(space, 0, data >> 1); + m_soundlatch->write(space, 0, data >> 1); return data & 1; @@ -282,7 +279,7 @@ WRITE16_MEMBER(metro_state::metro_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); space.device().execute().spin_until_interrupt(); m_busy_sndcpu = 1; @@ -1593,7 +1590,7 @@ ADDRESS_MAP_END WRITE16_MEMBER(metro_state::blzntrnd_sound_w) { - soundlatch_byte_w(space, offset, data >> 8); + m_soundlatch->write(space, offset, data >> 8); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -1615,7 +1612,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( blzntrnd_sound_io_map, AS_IO, 8, metro_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(blzntrnd_sh_bankswitch_w) - AM_RANGE(0x40, 0x40) AM_READ(soundlatch_byte_r) AM_WRITENOP + AM_RANGE(0x40, 0x40) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -3717,6 +3714,8 @@ static MACHINE_CONFIG_START( daitorid, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", UPD7810_INTF2)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.80) @@ -3758,6 +3757,8 @@ static MACHINE_CONFIG_START( dharma, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // sample rate = M6295 clock / 132 MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -3798,6 +3799,8 @@ static MACHINE_CONFIG_START( karatour, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // was /128.. so pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -3838,6 +3841,8 @@ static MACHINE_CONFIG_START( 3kokushi, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // was /128.. so pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -3878,6 +3883,8 @@ static MACHINE_CONFIG_START( lastfort, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_LOW) // sample rate = M6295 clock / 165 MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -3917,6 +3924,8 @@ static MACHINE_CONFIG_START( lastforg, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // was /128.. so pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -4107,6 +4116,8 @@ static MACHINE_CONFIG_START( pangpoms, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // was /128.. so pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -4147,6 +4158,8 @@ static MACHINE_CONFIG_START( poitto, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // was /128.. so pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -4187,6 +4200,8 @@ static MACHINE_CONFIG_START( pururun, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* Confirmed match to reference video */ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", UPD7810_INTF2)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.80) @@ -4228,6 +4243,8 @@ static MACHINE_CONFIG_START( skyalert, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_LOW) // sample rate = M6295 clock / 165 MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -4268,6 +4285,8 @@ static MACHINE_CONFIG_START( toride2g, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_24MHz/20, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) @@ -4384,6 +4403,8 @@ static MACHINE_CONFIG_START( blzntrnd, metro_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -6130,7 +6151,7 @@ Notes: M6585 - Oki M6585 ADPCM Voice Synthesizer IC (DIP18). Clock 640kHz. Sample rate = 16kHz (selection - pin 1 LOW, pin 2 HIGH = 16kHz) This is a version-up to the previous M5205 with some additional - capabilies and improvements. + capabilities and improvements. MM1035 - Mitsumi Monolithic IC MM1035 System Reset and Watchdog Timer (DIP8) uPC3403 - NEC uPC3403 High Performance Quad Operational Amplifier (DIP14) 62256 - 32k x8 SRAM (DIP28) diff --git a/src/mame/drivers/midyunit.cpp b/src/mame/drivers/midyunit.cpp index 3bf9d593def..c09981584a8 100644 --- a/src/mame/drivers/midyunit.cpp +++ b/src/mame/drivers/midyunit.cpp @@ -116,8 +116,6 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" -#include "cpu/tms34010/tms34010.h" -#include "sound/okim6295.h" #include "includes/midyunit.h" @@ -198,7 +196,7 @@ static ADDRESS_MAP_START( yawdim_sound_map, AS_PROGRAM, 8, midyunit_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x97ff) AM_WRITE(yawdim_oki_bank_w) AM_RANGE(0x9800, 0x9fff) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa7ff) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa7ff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -1229,6 +1227,9 @@ static MACHINE_CONFIG_DERIVED( mkyawdim, yunit_core ) MCFG_VIDEO_START_OVERRIDE(midyunit_state,mkyawdim) /* sound hardware */ + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_8MHz / 8, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/model1.cpp b/src/mame/drivers/model1.cpp index 9922f387c98..3a5215585cc 100644 --- a/src/mame/drivers/model1.cpp +++ b/src/mame/drivers/model1.cpp @@ -662,7 +662,9 @@ READ16_MEMBER(model1_state::io_r) WRITE16_MEMBER(model1_state::io_w) { if(offset == 0x0f){ - // tested in vr, vf, swa, wingwar + // lamp and coinmeters + // 0x01 = COIN METER 1 + // 0x02 = COIN METER 2 output().set_led_value(0, data & 0x4); // START (1) output().set_led_value(1, data & 0x8); // VIEW1 (START2 - VF) output().set_led_value(2, data & 0x10); // VIEW2 (VIEW - SWA) @@ -670,6 +672,11 @@ WRITE16_MEMBER(model1_state::io_w) output().set_led_value(4, data & 0x40); // VIEW4 output().set_led_value(5, data & 0x80); // RACE LEADER m_lamp_state = data; + output().set_digit_value(1, data); + return; + } else if (offset == 0x11) { + // drive board commands + output().set_digit_value(0, data); return; } logerror("IOW: %02x %02x\n", offset, data); diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index a6fd8205c72..e3fcb568072 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -411,7 +411,7 @@ Power Stone 841-0001C 21597 8 (64Mb) Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? 315-6213 317-5052-COM Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards -Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it +Samba de Amigo (Rev B) (Rev A) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller Sega Strike Fighter (Rev A, set 1) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on case Sega Strike Fighter (Rev A, set 2) 840-0035C 23786A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on PCB @@ -5295,7 +5295,7 @@ ROM_START( samba ) NAOMI_DEFAULT_EEPROM ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF) - ROM_LOAD("epr-22966b.ic22",0x0000000, 0x0400000, CRC(893116b8) SHA1(35cb4f40690ff21af5ab7cc5adbc53228d6fb0b3) ) + ROM_LOAD("epr-22966b.ic22",0x0000000, 0x0400000, CRC(893116b8) SHA1(35cb4f40690ff21af5ab7cc5adbc53228d6fb0b3) ) // was also found in cartridge with Rev.A case label ROM_LOAD("mpr-22950.ic1", 0x0800000, 0x0800000, CRC(16dee15c) SHA1(b46849e492756ff406bf8956303472255fcf55a5) ) ROM_LOAD("mpr-22951.ic2", 0x1000000, 0x0800000, CRC(f509496f) SHA1(41281576f7d58c8ede9c0a89bfd46a98d5b97033) ) ROM_LOAD("mpr-22952.ic3", 0x1800000, 0x0800000, CRC(fb9b3ef0) SHA1(e9d44b673c273e97445a12186496a0594e291542) ) @@ -8761,10 +8761,34 @@ ROM_END /********************************************** * -* Naomi 2 network DVD-ROM defines +* Naomi 2 network CD and DVD-ROM defines * *********************************************/ +ROM_START( wccf116 ) + NAOMIGD_BIOS + NAOMI_DEFAULT_EEPROM + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "cdp-10001c", 0, SHA1(efa6ef20f278c99efbf7c3630b1c8e2cad0a05c0) ) // CD-R + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + //PIC is missing + ROM_LOAD("wccf1.pic", 0x00, 0x4000, NO_DUMP ) +ROM_END + +ROM_START( wccf1dup ) + NAOMIGD_BIOS + NAOMI_DEFAULT_EEPROM + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "cdp-10003", 0, SHA1(13064b6e03527f1222b6bd01c0ba9a063d7be949) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + //PIC is missing, same as CDP-10001C + ROM_LOAD("wccf1.pic", 0x00, 0x4000, NO_DUMP ) +ROM_END + ROM_START( wccf212e ) NAOMIGD_BIOS NAOMI_DEFAULT_EEPROM @@ -8783,6 +8807,18 @@ ROM_START( wccf212e ) ROM_LOAD("fpr23911.ic18", 0x000000, 0x200000, CRC(1a1da741) SHA1(532ea7fc4dab11e012a521abcf5fdadd9b40d631) ) ROM_END +// "Drive Checker", contain only optical media ejector win32 program +ROM_START( wccf2chk ) + NAOMIGD_BIOS + NAOMI_DEFAULT_EEPROM + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "cdv-10007", 0, SHA1(6c5994c9b5ba5719569c541fabdd71a7ff1275aa) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + // not used +ROM_END + ROM_START( wccf234j ) NAOMIGD_BIOS NAOMI_DEFAULT_EEPROM @@ -9763,9 +9799,10 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", " // 00?? ExZeus (GDL-00xx) /* CDP-xxxxx and CDV-xxxxx (CD-ROM and DVD-ROM for Naomi 2 Satellite Terminal) */ -// CDP-10001 - World Club Champion Football Serie A 2001-2002 Ver.2 (Hitmaker / Sega, 2003) +/* CDP-10001C*/ GAME( 2003, wccf116, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Hitmaker / Sega", "World Club Champion Football Serie A 2001-2002 Ver. 2 (CDP-10001C)", GAME_FLAGS ) +/* CDP-10003 */ GAME( 2002, wccf1dup, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Hitmaker / Sega", "World Club Champion Football Serie A 2001-2002 DIMM FIRM Ver.3.03 (CDP-10003)", GAME_FLAGS ) /* CDV-10002 */ GAME( 2004, wccf212e, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Hitmaker / Sega", "World Club Champion Football Serie A 2002-2003 Ver.2.12 (CDV-10002)", GAME_FLAGS ) -// CDV-10007 - World Club Champion Football Serie A 2002-2003 (Hitmaker / Sega, 2003) +/* CDV-10007 */ GAME( 2004, wccf2chk, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Hitmaker / Sega", "World Club Champion Football Serie A 2002-2003 Drive Checker (CDV-10007)", GAME_FLAGS ) // actually just disc ejector /* CDV-10008 */ GAME( 2004, wccf234j, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Hitmaker / Sega", "World Club Champion Football Serie A 2002-2003 Ver.2.34 (CDV-10008)", GAME_FLAGS ) /* CDV-10013 */ GAME( 2005, wccf310j, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "World Club Champion Football European Clubs 2004-2005 (CDV-10013)", GAME_FLAGS ) /* CDV-10015 */ GAME( 2005, wccf331e, wccf322e,naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "World Club Champion Football European Clubs 2004-2005 Ver.1.1 (CDV-10015)", GAME_FLAGS ) diff --git a/src/mame/drivers/nbmj8991.cpp b/src/mame/drivers/nbmj8991.cpp index d72dc2067c2..cff29c44ec6 100644 --- a/src/mame/drivers/nbmj8991.cpp +++ b/src/mame/drivers/nbmj8991.cpp @@ -41,7 +41,7 @@ Notes: WRITE8_MEMBER(nbmj8991_state::soundbank_w) { - if (!(data & 0x80)) soundlatch_clear_byte_w(space, 0, 0); + if (!(data & 0x80)) m_soundlatch->clear_w(space, 0, 0); membank("bank1")->set_entry(data & 0x03); } @@ -188,7 +188,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pstadium_io_map, AS_IO, 8, nbmj8991_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x7f) AM_WRITE(blitter_w) - AM_RANGE(0x80, 0x80) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x80, 0x80) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x90, 0x90) AM_DEVREAD("nb1413m3", nb1413m3_device, inputport0_r) AM_RANGE(0xa0, 0xa0) AM_DEVREADWRITE("nb1413m3", nb1413m3_device, inputport1_r, inputportsel_w) AM_RANGE(0xb0, 0xb0) AM_DEVREAD("nb1413m3", nb1413m3_device, inputport2_r) //AM_WRITENOP @@ -201,7 +201,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( av2mj1bb_io_map, AS_IO, 8, nbmj8991_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x7f) AM_WRITE(blitter_w) - AM_RANGE(0x80, 0x80) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x80, 0x80) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x90, 0x90) AM_DEVREAD("nb1413m3", nb1413m3_device, inputport0_r) AM_RANGE(0xa0, 0xa0) AM_DEVREADWRITE("nb1413m3", nb1413m3_device, inputport1_r, inputportsel_w) AM_RANGE(0xb0, 0xb0) AM_DEVREADWRITE("nb1413m3", nb1413m3_device, inputport2_r, vcrctrl_w) @@ -221,7 +221,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( nbmj8991_sound_io_map, AS_IO, 8, nbmj8991_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) AM_DEVWRITE("dac1", dac_device, write_unsigned8) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("dac1", dac_device, write_unsigned8) AM_RANGE(0x02, 0x02) AM_DEVWRITE("dac2", dac_device, write_unsigned8) AM_RANGE(0x04, 0x04) AM_WRITE(soundbank_w) AM_RANGE(0x06, 0x06) AM_WRITENOP @@ -1431,6 +1431,8 @@ static MACHINE_CONFIG_START( nbmjdrv2, nbmj8991_state ) // pstadium /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("fmsnd", YM3812, 25000000/6.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp index a9f97f5ec8e..da6720a65b6 100644 --- a/src/mame/drivers/nbmj9195.cpp +++ b/src/mame/drivers/nbmj9195.cpp @@ -12,7 +12,7 @@ Notes: -- Screen position sometimes be strange while frame skip != 0. +- Screen position sometimes is strange while frame skip != 0. - Some games display "GFXROM BANK OVER!!" or "GFXROM ADDRESS OVER!!" in Debug build. @@ -24,6 +24,7 @@ Notes: #include "emu.h" #include "machine/nvram.h" #include "includes/nb1413m3.h" // needed for mahjong input controller +#include "machine/gen_latch.h" #include "sound/3812intf.h" #include "sound/dac.h" #include "includes/nbmj9195.h" @@ -202,7 +203,7 @@ READ8_MEMBER(nbmj9195_state::others_cpu_portc_r) WRITE8_MEMBER(nbmj9195_state::soundcpu_porte_w) { - if (!(data & 0x01)) soundlatch_clear_byte_w(space, 0, 0); + if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0); } @@ -275,7 +276,7 @@ static ADDRESS_MAP_START( mjuraden_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_0_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_0_w) - AM_RANGE(0xb0, 0xb0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb0, 0xb0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xb2, 0xb2) AM_WRITENOP AM_RANGE(0xb4, 0xb4) AM_WRITENOP AM_RANGE(0xb6, 0xb6) AM_WRITE(inputportsel_w) @@ -292,7 +293,7 @@ static ADDRESS_MAP_START( koinomp_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xa0, 0xaf) AM_WRITE(blitter_1_w) AM_RANGE(0xb0, 0xbf) AM_WRITE(clut_1_w) - AM_RANGE(0xc0, 0xc0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xc0, 0xc0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc2, 0xc2) AM_WRITENOP AM_RANGE(0xc4, 0xc4) AM_WRITENOP AM_RANGE(0xc6, 0xc6) AM_WRITE(inputportsel_w) @@ -306,7 +307,7 @@ static ADDRESS_MAP_START( patimono_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_1_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_0_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb8) AM_WRITE(inputportsel_w) @@ -323,7 +324,7 @@ static ADDRESS_MAP_START( mmehyou_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_0_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_0_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) @@ -340,7 +341,7 @@ static ADDRESS_MAP_START( gal10ren_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xa0, 0xaf) AM_WRITE(blitter_1_w) AM_RANGE(0xb0, 0xbf) AM_WRITE(clut_1_w) - AM_RANGE(0xc0, 0xc0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xc0, 0xc0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc8, 0xc8) AM_WRITENOP AM_RANGE(0xd0, 0xd0) AM_WRITENOP AM_RANGE(0xd8, 0xd8) AM_WRITE(inputportsel_w) @@ -349,7 +350,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( renaiclb_io_map, AS_IO, 8, nbmj9195_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x20, 0x20) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x20, 0x20) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x24, 0x24) AM_WRITENOP AM_RANGE(0x28, 0x28) AM_WRITENOP AM_RANGE(0x2c, 0x2c) AM_WRITE(inputportsel_w) @@ -366,7 +367,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mjlaman_io_map, AS_IO, 8, nbmj9195_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x20, 0x20) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x20, 0x20) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x22, 0x22) AM_WRITENOP AM_RANGE(0x24, 0x24) AM_WRITENOP AM_RANGE(0x26, 0x26) AM_WRITE(inputportsel_w) @@ -391,7 +392,7 @@ static ADDRESS_MAP_START( mkeibaou_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xa0, 0xaf) AM_WRITE(blitter_1_w) AM_RANGE(0xb0, 0xbf) AM_WRITE(clut_1_w) - AM_RANGE(0xd8, 0xd8) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xd8, 0xd8) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xda, 0xda) AM_WRITENOP AM_RANGE(0xdc, 0xdc) AM_WRITENOP AM_RANGE(0xde, 0xde) AM_WRITE(inputportsel_w) @@ -408,7 +409,7 @@ static ADDRESS_MAP_START( pachiten_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xa0, 0xaf) AM_WRITE(blitter_1_w) AM_RANGE(0xb0, 0xbf) AM_WRITE(clut_1_w) - AM_RANGE(0xe0, 0xe0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xe0, 0xe0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xe2, 0xe2) AM_WRITENOP AM_RANGE(0xe4, 0xe4) AM_WRITENOP AM_RANGE(0xe6, 0xe6) AM_WRITE(inputportsel_w) @@ -425,7 +426,7 @@ static ADDRESS_MAP_START( sailorws_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_1_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_1_w) - AM_RANGE(0xf0, 0xf0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf2, 0xf2) AM_WRITENOP AM_RANGE(0xf4, 0xf4) AM_WRITENOP AM_RANGE(0xf6, 0xf6) AM_WRITE(inputportsel_w) @@ -442,7 +443,7 @@ static ADDRESS_MAP_START( sailorwr_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_1_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_1_w) - AM_RANGE(0xf8, 0xf8) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf8, 0xf8) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xfa, 0xfa) AM_WRITENOP AM_RANGE(0xfc, 0xfc) AM_WRITENOP AM_RANGE(0xfe, 0xfe) AM_WRITE(inputportsel_w) @@ -459,7 +460,7 @@ static ADDRESS_MAP_START( psailor1_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xc0, 0xcf) AM_WRITE(blitter_1_w) AM_RANGE(0xd0, 0xdf) AM_WRITE(clut_1_w) - AM_RANGE(0xf0, 0xf0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf2, 0xf2) AM_WRITENOP AM_RANGE(0xf4, 0xf4) AM_WRITENOP AM_RANGE(0xf6, 0xf6) AM_WRITE(inputportsel_w) @@ -476,7 +477,7 @@ static ADDRESS_MAP_START( psailor2_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xa0, 0xaf) AM_WRITE(blitter_1_w) AM_RANGE(0xb0, 0xbf) AM_WRITE(clut_1_w) - AM_RANGE(0xe0, 0xe0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xe0, 0xe0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xe2, 0xe2) AM_WRITENOP AM_RANGE(0xe4, 0xe4) AM_WRITENOP AM_RANGE(0xf6, 0xf6) AM_WRITE(inputportsel_w) @@ -493,7 +494,7 @@ static ADDRESS_MAP_START( otatidai_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_1_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_1_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITENOP AM_RANGE(0xb8, 0xb8) AM_WRITE(inputportsel_w) @@ -506,7 +507,7 @@ static ADDRESS_MAP_START( yosimoto_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x60, 0x6f) AM_WRITE(blitter_0_w) AM_RANGE(0x70, 0x7f) AM_WRITE(clut_0_w) - AM_RANGE(0x90, 0x90) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x90, 0x90) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x94, 0x94) AM_WRITENOP AM_RANGE(0x98, 0x98) AM_WRITENOP AM_RANGE(0x9c, 0x9c) AM_WRITE(inputportsel_w) @@ -528,7 +529,7 @@ static ADDRESS_MAP_START( yosimotm_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_1_w) AM_RANGE(0xf0, 0xf0) AM_WRITE(inputportsel_w) - AM_RANGE(0xfc, 0xfc) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xfc, 0xfc) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf4, 0xf4) AM_NOP AM_RANGE(0xf8, 0xf8) AM_NOP ADDRESS_MAP_END @@ -544,7 +545,7 @@ static ADDRESS_MAP_START( jituroku_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xc0, 0xcf) AM_WRITE(blitter_1_w) AM_RANGE(0xd0, 0xdf) AM_WRITE(clut_1_w) - AM_RANGE(0xe0, 0xe0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xe0, 0xe0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xe8, 0xe8) AM_WRITENOP AM_RANGE(0xf0, 0xf0) AM_WRITENOP AM_RANGE(0xf8, 0xf8) AM_WRITE(inputportsel_w) @@ -553,7 +554,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ngpgal_io_map, AS_IO, 8, nbmj9195_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) @@ -570,7 +571,7 @@ static ADDRESS_MAP_START( mjgottsu_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_0_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_0_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) @@ -579,7 +580,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cmehyou_io_map, AS_IO, 8, nbmj9195_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) AM_RANGE(0xb4, 0xb4) AM_WRITENOP @@ -596,7 +597,7 @@ static ADDRESS_MAP_START( mjkoiura_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x8f) AM_WRITE(blitter_0_w) AM_RANGE(0x90, 0x9f) AM_WRITE(clut_0_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) @@ -605,7 +606,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mkoiuraa_io_map, AS_IO, 8, nbmj9195_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xa0, 0xa0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa0, 0xa0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa4, 0xa4) AM_WRITENOP AM_RANGE(0xa8, 0xa8) AM_WRITENOP AM_RANGE(0xb0, 0xb0) AM_WRITE(inputportsel_w) @@ -620,7 +621,7 @@ static ADDRESS_MAP_START( mscoutm_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x80) AM_READ(mscoutm_dipsw_1_r) AM_RANGE(0x82, 0x82) AM_READ(mscoutm_dipsw_0_r) - AM_RANGE(0x84, 0x84) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x84, 0x84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa0, 0xa6) AM_WRITENOP // nb22090 param ? @@ -639,7 +640,7 @@ static ADDRESS_MAP_START( imekura_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0x80, 0x80) AM_READ(mscoutm_dipsw_1_r) AM_RANGE(0x82, 0x82) AM_READ(mscoutm_dipsw_0_r) - AM_RANGE(0x84, 0x84) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x84, 0x84) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xb0, 0xb6) AM_WRITENOP // nb22090 param ? @@ -669,7 +670,7 @@ static ADDRESS_MAP_START( mjegolf_io_map, AS_IO, 8, nbmj9195_state ) AM_RANGE(0xe0, 0xe0) AM_READ(mscoutm_dipsw_1_r) AM_RANGE(0xe2, 0xe2) AM_READ(mscoutm_dipsw_0_r) - AM_RANGE(0xe4, 0xe4) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xe4, 0xe4) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -2680,13 +2681,13 @@ static const z80_daisy_config daisy_chain_sound[] = MCFG_TMPZ84C011_PORTA_WRITE_CB(WRITE8(nbmj9195_state, soundbank_w)) \ MCFG_TMPZ84C011_PORTB_WRITE_CB(DEVWRITE8("dac1", dac_device, write_unsigned8)) \ MCFG_TMPZ84C011_PORTC_WRITE_CB(DEVWRITE8("dac2", dac_device, write_unsigned8)) \ - MCFG_TMPZ84C011_PORTD_READ_CB(READ8(nbmj9195_state, soundlatch_byte_r)) \ + MCFG_TMPZ84C011_PORTD_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) \ MCFG_TMPZ84C011_PORTE_WRITE_CB(WRITE8(nbmj9195_state, soundcpu_porte_w)) #define MSCOUTM_TMZ84C011_SOUND_PORTS \ MCFG_TMPZ84C011_PORTA_WRITE_CB(WRITE8(nbmj9195_state, soundbank_w)) \ MCFG_TMPZ84C011_PORTB_WRITE_CB(DEVWRITE8("dac2", dac_device, write_unsigned8)) \ MCFG_TMPZ84C011_PORTC_WRITE_CB(DEVWRITE8("dac1", dac_device, write_unsigned8)) \ - MCFG_TMPZ84C011_PORTD_READ_CB(READ8(nbmj9195_state, soundlatch_byte_r)) \ + MCFG_TMPZ84C011_PORTD_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) \ MCFG_TMPZ84C011_PORTE_WRITE_CB(WRITE8(nbmj9195_state, soundcpu_porte_w)) @@ -2735,6 +2736,8 @@ static MACHINE_CONFIG_START( NBMJDRV1_base, nbmj9195_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 4000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 6ed800c3006..ad5757cf0b6 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -793,7 +793,7 @@ WRITE16_MEMBER(neogeo_state::memcard_w) WRITE8_MEMBER(neogeo_state::audio_command_w) { - soundlatch_write(data); + m_soundlatch->write(space, 0, data); m_audio_cpu_nmi_pending = true; audio_cpu_check_nmi(); @@ -805,7 +805,7 @@ WRITE8_MEMBER(neogeo_state::audio_command_w) READ8_MEMBER(neogeo_state::audio_command_r) { - UINT8 ret = soundlatch_read(); + UINT8 ret = m_soundlatch->read(space, 0); m_audio_cpu_nmi_pending = false; audio_cpu_check_nmi(); @@ -816,7 +816,7 @@ READ8_MEMBER(neogeo_state::audio_command_r) CUSTOM_INPUT_MEMBER(neogeo_state::get_audio_result) { - UINT8 ret = soundlatch_read(1); // soundlatch2_byte_r + UINT8 ret = m_soundlatch2->read(m_audiocpu->space(AS_PROGRAM), 0); return ret; } @@ -1522,11 +1522,11 @@ ADDRESS_MAP_END *************************************/ static ADDRESS_MAP_START( audio_io_map, AS_IO, 8, neogeo_state ) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x08, 0x08) AM_MIRROR(0xff10) AM_MASK(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xff03) AM_READ(audio_cpu_bank_select_r) - AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END @@ -1661,6 +1661,9 @@ MACHINE_CONFIG_START( neogeo_base, neogeo_state ) /* audio hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2610, NEOGEO_YM2610_CLOCK) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.28) diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp index a901c5c88eb..9aadcb830b4 100644 --- a/src/mame/drivers/neogeocd.cpp +++ b/src/mame/drivers/neogeocd.cpp @@ -924,12 +924,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( neocd_audio_io_map, AS_IO, 8, ngcd_state ) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x08, 0x08) AM_MIRROR(0xff10) AM_MASK(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) // banking reads are actually NOP on NeoCD? but some games still access them // AM_RANGE(0x08, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xff03) AM_READ(audio_cpu_bank_select_r) - AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // ?? AM_RANGE(0x80, 0x80) AM_MIRROR(0xff00) AM_WRITENOP diff --git a/src/mame/drivers/niyanpai.cpp b/src/mame/drivers/niyanpai.cpp index 6a45d78eba4..367515eea74 100644 --- a/src/mame/drivers/niyanpai.cpp +++ b/src/mame/drivers/niyanpai.cpp @@ -53,7 +53,7 @@ WRITE8_MEMBER(niyanpai_state::soundbank_w) WRITE8_MEMBER(niyanpai_state::soundlatch_clear_w) { - if (!(data & 0x01)) soundlatch_clear_byte_w(space, 0, 0); + if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0); } @@ -144,7 +144,7 @@ static ADDRESS_MAP_START( niyanpai_map, AS_PROGRAM, 16, niyanpai_state ) AM_RANGE(0x0bf800, 0x0bffff) AM_RAM - AM_RANGE(0x200000, 0x200001) AM_WRITE8(soundlatch_byte_w, 0xff00) + AM_RANGE(0x200000, 0x200001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00) AM_RANGE(0x200200, 0x200201) AM_WRITENOP // unknown AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown @@ -180,7 +180,7 @@ static ADDRESS_MAP_START( musobana_map, AS_PROGRAM, 16, niyanpai_state ) AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x0bf800, 0x0bffff) AM_RAM - AM_RANGE(0x200000, 0x200001) AM_WRITE8(soundlatch_byte_w, 0xff00) + AM_RANGE(0x200000, 0x200001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00) AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown @@ -219,7 +219,7 @@ static ADDRESS_MAP_START( mhhonban_map, AS_PROGRAM, 16, niyanpai_state ) AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x0bf000, 0x0bffff) AM_RAM - AM_RANGE(0x200000, 0x200001) AM_WRITE8(soundlatch_byte_w, 0xff00) + AM_RANGE(0x200000, 0x200001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00) AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown @@ -258,7 +258,7 @@ static ADDRESS_MAP_START( zokumahj_map, AS_PROGRAM, 16, niyanpai_state ) AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x0c0000, 0x0cffff) AM_RAM - AM_RANGE(0x200000, 0x200001) AM_WRITE8(soundlatch_byte_w, 0xff00) + AM_RANGE(0x200000, 0x200001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00) AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown @@ -743,7 +743,7 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state ) MCFG_Z80_DAISY_CHAIN(daisy_chain_sound) MCFG_CPU_PROGRAM_MAP(niyanpai_sound_map) MCFG_CPU_IO_MAP(niyanpai_sound_io_map) - MCFG_TMPZ84C011_PORTD_READ_CB(READ8(niyanpai_state, soundlatch_byte_r)) + MCFG_TMPZ84C011_PORTD_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_TMPZ84C011_PORTA_WRITE_CB(WRITE8(niyanpai_state, soundbank_w)) MCFG_TMPZ84C011_PORTB_WRITE_CB(DEVWRITE8("dac1", dac_device, write_unsigned8)) MCFG_TMPZ84C011_PORTC_WRITE_CB(DEVWRITE8("dac2", dac_device, write_unsigned8)) @@ -766,6 +766,8 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 4000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp index 2d1152f9c03..5b959e64f33 100644 --- a/src/mame/drivers/nmk16.cpp +++ b/src/mame/drivers/nmk16.cpp @@ -222,7 +222,7 @@ WRITE16_MEMBER(nmk16_state::ssmissin_sound_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -284,7 +284,7 @@ WRITE16_MEMBER(nmk16_state::macross2_sound_reset_w) WRITE16_MEMBER(nmk16_state::macross2_sound_command_w) { if (ACCESSING_BITS_0_7) - soundlatch_byte_w(space,0,data & 0xff); + m_soundlatch->write(space,0,data & 0xff); } WRITE8_MEMBER(nmk16_state::macross2_sound_bank_w) @@ -310,7 +310,7 @@ WRITE16_MEMBER(nmk16_state::afega_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data&0xff); + m_soundlatch->write(space, 0, data&0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -363,7 +363,7 @@ static ADDRESS_MAP_START( manybloc_map, AS_PROGRAM, 16, nmk16_state ) AM_RANGE(0x080012, 0x080013) AM_WRITENOP /* See notes at the top of the driver */ AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x08001c, 0x08001d) AM_WRITENOP /* See notes at the top of the driver */ - AM_RANGE(0x08001e, 0x08001f) AM_READWRITE(soundlatch2_word_r,soundlatch_word_w) + AM_RANGE(0x08001e, 0x08001f) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x088000, 0x0883ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(nmk_bgvideoram0_w) AM_SHARE("nmk_bgvideoram0") AM_RANGE(0x09c000, 0x09cfff) AM_RAM_WRITE(manybloc_scroll_w) AM_SHARE("scrollram") @@ -376,12 +376,12 @@ static ADDRESS_MAP_START( tharrier_map, AS_PROGRAM, 16, nmk16_state ) AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0") AM_RANGE(0x080002, 0x080003) AM_READ(tharrier_mcu_r) // AM_READ_PORT("IN1") AM_RANGE(0x080004, 0x080005) AM_READ_PORT("DSW1") - AM_RANGE(0x08000e, 0x08000f) AM_READ(soundlatch2_word_r) /* from Z80 */ + AM_RANGE(0x08000e, 0x08000f) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) /* from Z80 */ AM_RANGE(0x080010, 0x080011) AM_WRITE(tharrier_mcu_control_w) AM_RANGE(0x080012, 0x080013) AM_WRITENOP // AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) // AM_RANGE(0x080018, 0x080019) AM_WRITE(nmk_tilebank_w) - AM_RANGE(0x08001e, 0x08001f) AM_WRITE(soundlatch_word_w) + AM_RANGE(0x08001e, 0x08001f) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x080202, 0x080203) AM_READ_PORT("IN2") AM_RANGE(0x088000, 0x0883ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) @@ -394,7 +394,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tharrier_sound_map, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xf000, 0xf000) AM_READWRITE(soundlatch_byte_r,soundlatch2_byte_w) + AM_RANGE(0xf000, 0xf000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) AM_RANGE(0xf400, 0xf400) AM_DEVREADWRITE("oki1", okim6295_device, read, write) AM_RANGE(0xf500, 0xf500) AM_DEVREADWRITE("oki2", okim6295_device, read, write) AM_RANGE(0xf600, 0xf600) AM_WRITE(tharrier_oki6295_bankswitch_0_w) @@ -953,7 +953,7 @@ static ADDRESS_MAP_START( ssmissin_sound_map, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(ssmissin_soundbank_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( oki1_map, AS_0, 8, nmk16_state ) @@ -1029,7 +1029,7 @@ static ADDRESS_MAP_START( macross2_map, AS_PROGRAM, 16, nmk16_state ) AM_RANGE(0x100002, 0x100003) AM_READ_PORT("IN1") AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") - AM_RANGE(0x10000e, 0x10000f) AM_READ(soundlatch2_word_r) /* from Z80 */ + AM_RANGE(0x10000e, 0x10000f) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) /* from Z80 */ AM_RANGE(0x100014, 0x100015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x100016, 0x100017) AM_WRITE(macross2_sound_reset_w) /* Z80 reset */ AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w) @@ -1055,7 +1055,7 @@ static ADDRESS_MAP_START( raphero_map, AS_PROGRAM, 16, nmk16_state ) AM_RANGE(0x100002, 0x100003) AM_READ_PORT("IN1") AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") - AM_RANGE(0x10000e, 0x10000f) AM_READ(soundlatch2_word_r) /* from Z80 */ + AM_RANGE(0x10000e, 0x10000f) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) /* from Z80 */ AM_RANGE(0x100014, 0x100015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x100016, 0x100017) AM_WRITENOP /* IRQ enable or z80 sound reset like in Macross 2? */ AM_RANGE(0x100018, 0x100019) AM_WRITE(nmk_tilebank_w) @@ -1084,7 +1084,7 @@ static ADDRESS_MAP_START( raphero_sound_mem_map, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0xc808, 0xc808) AM_DEVREADWRITE("oki2", okim6295_device, read, write) AM_RANGE(0xc810, 0xc817) AM_DEVWRITE("nmk112", nmk112_device, okibank_w) AM_RANGE(0xd000, 0xd000) AM_WRITE(macross2_sound_bank_w) - AM_RANGE(0xd800, 0xd800) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) // main cpu + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // main cpu AM_RANGE(0xe000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -1094,7 +1094,7 @@ static ADDRESS_MAP_START( macross2_sound_map, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0xa000, 0xa000) AM_READNOP /* IRQ ack? watchdog? */ AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xe001, 0xe001) AM_WRITE(macross2_sound_bank_w) - AM_RANGE(0xf000, 0xf000) AM_READWRITE(soundlatch_byte_r,soundlatch2_byte_w) /* from 68000 */ + AM_RANGE(0xf000, 0xf000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) /* from 68000 */ ADDRESS_MAP_END static ADDRESS_MAP_START( macross2_sound_io_map, AS_IO, 8, nmk16_state ) @@ -3886,6 +3886,9 @@ static MACHINE_CONFIG_START( tharrier, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) @@ -4205,6 +4208,8 @@ static MACHINE_CONFIG_START( ssmissin, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki1", 8000000/8, OKIM6295_PIN7_HIGH) /* 1 Mhz, pin 7 high */ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -4433,6 +4438,9 @@ static MACHINE_CONFIG_START( macross2, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) @@ -4476,6 +4484,9 @@ static MACHINE_CONFIG_START( tdragon2, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) @@ -4518,6 +4529,9 @@ static MACHINE_CONFIG_START( raphero, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) @@ -4648,6 +4662,9 @@ static MACHINE_CONFIG_START( manybloc, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) @@ -5018,7 +5035,7 @@ static ADDRESS_MAP_START( afega_sound_cpu, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0x0004, 0x0004) AM_WRITENOP // bug in sound prg? AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) // From Main CPU + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU AM_RANGE(0xf808, 0xf809) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 AM_RANGE(0xf80a, 0xf80a) AM_DEVREADWRITE("oki1", okim6295_device, read, write) // M6295 ADDRESS_MAP_END @@ -5026,7 +5043,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( firehawk_sound_cpu, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xfff0, 0xfff0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfff0, 0xfff0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xfff2, 0xfff2) AM_WRITE(spec2k_oki1_banking_w ) AM_RANGE(0xfff8, 0xfff8) AM_DEVREADWRITE("oki2", okim6295_device, read, write) AM_RANGE(0xfffa, 0xfffa) AM_DEVREADWRITE("oki1", okim6295_device, read, write) @@ -5049,7 +5066,7 @@ static ADDRESS_MAP_START( twinactn_sound_cpu, AS_PROGRAM, 8, nmk16_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(twinactn_oki_bank_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) // From Main CPU + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END /*************************************************************************** @@ -5156,6 +5173,8 @@ static MACHINE_CONFIG_START( stagger1, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_4MHz) /* verified on pcb */ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.30) @@ -5238,6 +5257,8 @@ static MACHINE_CONFIG_START( firehawk, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki1", 1000000, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -5275,6 +5296,8 @@ static MACHINE_CONFIG_START( twinactn, nmk16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki1", 1000000, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/nss.cpp b/src/mame/drivers/nss.cpp index 8f099771bc0..5bda75bb955 100644 --- a/src/mame/drivers/nss.cpp +++ b/src/mame/drivers/nss.cpp @@ -516,6 +516,7 @@ READ8_MEMBER(nss_state::port_00_r) UINT8 res; res = (m_joy_flag) << 7; + // TODO: reads from SNES screen output, correct? res|= (m_screen->vblank() & 1) << 6; res|= (BIT(ioport("SERIAL1_DATA1")->read(), 15) << 5); res|= (BIT(ioport("SERIAL1_DATA1")->read(), 7) << 4); @@ -852,8 +853,8 @@ static MACHINE_CONFIG_START( nss, nss_state ) MCFG_SCREEN_ADD("osd", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(24*12+22, 12*18+22) - MCFG_SCREEN_VISIBLE_AREA(0*8, 24*12-1, 0*8, 12*18-1) + MCFG_SCREEN_SIZE(288+22, 216+22) + MCFG_SCREEN_VISIBLE_AREA(0, 288-1, 0, 216-1) MCFG_SCREEN_UPDATE_DRIVER(nss_state,screen_update) MACHINE_CONFIG_END diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp index 500607e78ef..b8e34a87292 100644 --- a/src/mame/drivers/omegrace.cpp +++ b/src/mame/drivers/omegrace.cpp @@ -220,6 +220,7 @@ #include "video/vector.h" #include "video/avgdvg.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "machine/watchdog.h" @@ -233,11 +234,13 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_dvg(*this, "dvg") { } + m_dvg(*this, "dvg"), + m_soundlatch(*this, "soundlatch") { } required_device m_maincpu; required_device m_audiocpu; required_device m_dvg; + required_device m_soundlatch; DECLARE_READ8_MEMBER(omegrace_vg_go_r); DECLARE_READ8_MEMBER(omegrace_spinner1_r); @@ -258,7 +261,7 @@ void omegrace_state::machine_reset() { address_space &space = m_maincpu->space(AS_PROGRAM); /* Omega Race expects the vector processor to be ready. */ -m_dvg->reset_w(space, 0, 0); + m_dvg->reset_w(space, 0, 0); } @@ -338,7 +341,7 @@ WRITE8_MEMBER(omegrace_state::omegrace_leds_w) WRITE8_MEMBER(omegrace_state::omegrace_soundlatch_w) { - soundlatch_byte_w (space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -390,7 +393,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_port, AS_IO, 8, omegrace_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) // the game reads from ay1 port b, but ay8912 only has port a + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // the game reads from ay1 port b, but ay8912 only has port a AM_RANGE(0x00, 0x01) AM_DEVWRITE("ay1", ay8912_device, address_data_w) AM_RANGE(0x02, 0x03) AM_DEVWRITE("ay2", ay8912_device, address_data_w) ADDRESS_MAP_END @@ -530,6 +533,8 @@ static MACHINE_CONFIG_START( omegrace, omegrace_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* XTAL101 Crystal @ 12mhz */ /* through 74LS92, Pin 8 = divide by 12 */ MCFG_SOUND_ADD("ay1", AY8912, XTAL_12MHz/12) diff --git a/src/mame/drivers/portrait.cpp b/src/mame/drivers/portrait.cpp index cbf6bbf80d4..b21d2f4c39f 100644 --- a/src/mame/drivers/portrait.cpp +++ b/src/mame/drivers/portrait.cpp @@ -88,6 +88,7 @@ DM81LS95 = TriState buffer #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/mcs48/mcs48.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "includes/portrait.h" @@ -123,7 +124,7 @@ static ADDRESS_MAP_START( portrait_map, AS_PROGRAM, 8, portrait_state ) AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(fgvideo_write) AM_SHARE("fgvideoram") AM_RANGE(0x9000, 0x91ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9200, 0x97ff) AM_RAM - AM_RANGE(0xa000, 0xa000) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa010, 0xa010) AM_WRITENOP // ? AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW1") AM_RANGE(0xa004, 0xa004) AM_READ_PORT("DSW2") @@ -268,6 +269,9 @@ static MACHINE_CONFIG_START( portrait, portrait_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("tms", TMS5200, 640000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/punchout.cpp b/src/mame/drivers/punchout.cpp index 9355d7f7726..777cc13f30b 100644 --- a/src/mame/drivers/punchout.cpp +++ b/src/mame/drivers/punchout.cpp @@ -117,6 +117,7 @@ DIP locations verified for: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6502/n2a03.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "rendlay.h" #include "includes/punchout.h" @@ -189,8 +190,8 @@ static ADDRESS_MAP_START( punchout_io_map, AS_IO, 8, punchout_state ) AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_RANGE(0x00, 0x01) AM_WRITENOP // the 2A03 #1 is not present - AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW2") AM_WRITE(soundlatch_byte_w) - AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) + AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) AM_RANGE(0x04, 0x04) AM_DEVWRITE("vlm", vlm5030_device, data_w) AM_RANGE(0x05, 0x07) AM_WRITENOP // spunchout protection AM_RANGE(0x08, 0x08) AM_WRITE(nmi_mask_w) @@ -262,8 +263,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( punchout_sound_map, AS_PROGRAM, 8, punchout_state ) AM_RANGE(0x0000, 0x07ff) AM_RAM - AM_RANGE(0x4016, 0x4016) AM_READ(soundlatch_byte_r) - AM_RANGE(0x4017, 0x4017) AM_READ(soundlatch2_byte_r) + AM_RANGE(0x4016, 0x4016) AM_DEVREAD("soundlatch", generic_latch_8_device, read) + AM_RANGE(0x4017, 0x4017) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_RANGE(0xe000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -668,6 +669,9 @@ static MACHINE_CONFIG_START( punchout, punchout_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("vlm", VLM5030, XTAL_21_4772MHz/6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp index 3ac6560a199..48271e9fd73 100644 --- a/src/mame/drivers/rainbow.cpp +++ b/src/mame/drivers/rainbow.cpp @@ -4,31 +4,38 @@ DEC Rainbow 100 Driver-in-progress by R. Belmont and Miodrag Milanovic. -Portions (2013 - 2015) by Karl-Ludwig Deisenhofer (Floppy, ClikClok RTC, NVRAM, DIPs, hard disk). +Keyboard fix by Cracyc (June 2016) +Portions (2013 - 2016) by Karl-Ludwig Deisenhofer (Floppy, ClikClok RTC, NVRAM, DIPs, hard disk). -STATE AS OF APRIL 2015 +To unlock floppy drives A-D compile with WORKAROUND_RAINBOW_B (prevents a side effect of ERROR 13). +Only single sided disk images with 80 tracks, 10 sectors appear to work (IMG or *.TD0 / TeleDisk). +If problems arise, delete the NVRAM file in folder Rainbow. +You may also want to reassign SETUP (away from F3, where it sits on a LK201). + +STATE AS OF JUNE 2016 ---------------------- Driver is based entirely on the DEC-100 'B' variant (DEC-190 and DEC-100 A models are treated as clones). While this is OK for the compatible -190, it doesn't do justice to ancient '100 A' hardware. -RBCONVERT.ZIP has details on how model 'A' differs from version B. +RBCONVERT.ZIP documents how model 'A' differs from version B. -Issues with this driver: +BUGS / ISSUES -(1) Keyboard emulation incomplete (fatal; inhibits the system from booting with ERROR 50). +(1) LOOPBACK circuit not emulated, NMI from RAM card also unemulated (ERROR 27). +The former is used in startup tests, the latter seems less relevant (must use menu self test "S"). -Serial ports do not work, so serial communication failure (ERROR 60) and ERROR 40 (serial -printer interface) result. Unfortunately the BIOS tests all three serial interfaces in line. +(2) serial ports do not work, so serial communication failure (ERROR 60) and ERROR 40 (serial +printer interface) result. -(2) while DOS 3 and UCSD systems (fort_sys, pas_sys) + diag disks boot, CPM 2.x and DOS 2.x die +(3) while DOS 3 and UCSD systems (fort_sys, pas_sys) + diag disks boot, CPM 2.x and DOS 2.x die in secondary boot loader with a RESTORE (seek track 0) when track 2 sector 1 should be loaded. Writing files to floppy is next to impossible on both CPM 1.x and DOS 3 (these two OS boot -with keyboard workarounds enabled). File deletion works, so few bytes pass. +with new workaround enabled). File deletion works, so few bytes pass. -(3) heavy system interaction stalls the driver. Start the RX50 diag.disk and - see what happens (key 3 for individual tests, then select system interaction). - -(4) arbitration chip (E11; in 100-A schematics or E13 in -B) should be dumped. +(4) system interaction tests HALT Z80 CPU at location $0211 (forever). Boot the RX50 diag.disk +to see what happens (key 3 for individual tests, then select system interaction). + +(5) arbitration chip (E11; in 100-A schematics or E13 in -B) should be dumped. It is a 6308 OTP ROM (2048 bit, 256 x 8) used as a lookup table (LUT) with the address pins (A) used as inputs and the data pins (D) as output. @@ -207,15 +214,10 @@ W17 pulls J1 serial port pin 1 to GND when set (chassis to logical GND). // --------------------------------------------------------------------------- // WORKAROUNDS: -// (1) FORCE LOGO: - not valid for 100-A ROM - -//#define FORCE_RAINBOW_B_LOGO - -// (2) KEYBOARD_WORKAROUND : also requires FORCE...LOGO (and preliminary headers) -//#define KEYBOARD_WORKAROUND -//#define KBD_DELAY 8 // (debounce delay) +// - tested only in conjunction with 100-B ROM - +//#define WORKAROUND_RAINBOW_B // --------------------------------------------------------------------------- - // Define standard and maximum RAM sizes (A, then B model): //#define BOARD_RAM 0x0ffff // 64 K base RAM (100-A) //#define END_OF_RAM 0xcffff // very last byte (100-A) DO NOT CHANGE. @@ -261,11 +263,6 @@ public: rainbow_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), -#ifdef KEYBOARD_WORKAROUND -#include "./m_kbd1.c" -#endif - - m_inp1(*this, "W13"), m_inp2(*this, "W14"), m_inp3(*this, "W15"), @@ -365,10 +362,6 @@ public: DECLARE_READ8_MEMBER(rtc_w); - -#ifdef KEYBOARD_WORKAROUND -#include "./port9x_Ax.c" -#endif UINT32 screen_update_rainbow(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(vblank_irq); @@ -395,11 +388,6 @@ private: IRQ_8088_NMI // 02/02 08/08 - [external MEMORY EXTENSION] - PARITY ERROR L }; // HIGHEST PRIORITY - -#ifdef KEYBOARD_WORKAROUND -#include "./m_kbd2.c" -#endif - required_ioport m_inp1; required_ioport m_inp2; required_ioport m_inp3; @@ -516,40 +504,13 @@ void rainbow_state::machine_start() save_item(NAME(m_irq_high)); save_item(NAME(m_irq_mask)); -#ifdef FORCE_RAINBOW_B_LOGO +#ifdef WORKAROUND_RAINBOW_B UINT8 *rom = memregion("maincpu")->base(); - - rom[0xf4000 + 0x364a] = 2 + 8; // 2 :set ; 4 : reset, 8 : set for 0xf4363 ( 0363 WAIT_FOR_BIT3__loc_35E ) - - rom[0xf4000 + 0x0363] = 0x90; - rom[0xf4000 + 0x0364] = 0x90; - - // If bit 2 = 1 (Efff9), then a keyboard powerup is necessary (=> will lock up in current state) - rom[0xf4000 + 0x3638] = 0x80; // OR instead of TEST - rom[0xf4000 + 0x3639] = 0x0f; // OR instead of TEST - rom[0xf4000 + 0x363a] = 0x08; // 04 => 08 - - rom[0xf4000 + 0x363b] = 0xeb; // COND => JMPS - - if (rom[0xf4174] == 0x75) + if (rom[0xf4000 + 0x3ffc] == 0x31) // 100-B (5.01) 0x35 would test for V5.05 { - rom[0xf4174] = 0xeb; // jmps RAINBOW100_LOGO__loc_33D - rom[0xf4175] = 0x08; + rom[0xf4000 + 0x0303] = 0x00; // disable CRC check + rom[0xf4000 + 0x135e] = 0x00; // FLOPPY / RX-50 WORKAROUND: in case of Z80 RESPONSE FAILURE ($80 bit set in AL), do not block floppy access. } - - if (rom[0xf4000 + 0x3ffc] == 0x31) // 100-B - rom[0xf4384] = 0xeb; // JMPS => BOOT80 - - if (rom[0xf4000 + 0x3ffc] == 0x35) // v5.05 - rom[0xf437b] = 0xeb; - - //TEST-DEBUG: always reset NVM to defaults (!) - //rom[0x3d6c] = 0x90; - //rom[0x3d6d] = 0x90; -#endif - -#ifdef KEYBOARD_WORKAROUND -#include "./rainbow_keyboard0.c" #endif } @@ -681,12 +642,6 @@ AM_RANGE(0x69, 0x69) AM_READ(hd_status_69_r) // =========================================================== // 0x10c AM_RANGE(0x10c, 0x10c) AM_DEVWRITE("vt100_video", rainbow_video_device, dc012_w) - - -#ifdef KEYBOARD_WORKAROUND -#include "./am_range_9x_Ax.c" -#endif - ADDRESS_MAP_END static ADDRESS_MAP_START(rainbowz80_mem, AS_PROGRAM, 8, rainbow_state) @@ -716,9 +671,6 @@ ADDRESS_MAP_END /* DIP switches */ static INPUT_PORTS_START(rainbow100b_in) -#ifdef KEYBOARD_WORKAROUND -#include "./rainbow_ipt.c" -#endif PORT_START("MONITOR TYPE") PORT_DIPNAME(0x03, 0x03, "MONOCHROME MONITOR") PORT_DIPSETTING(0x01, "WHITE") @@ -926,10 +878,6 @@ void rainbow_state::machine_reset() m_irq_mask = 0; } -#ifdef KEYBOARD_WORKAROUND -#include "./rainbow_keyboard2.c" -#endif - UINT32 rainbow_state::screen_update_rainbow(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { /* @@ -956,7 +904,7 @@ void rainbow_state::update_8088_irqs() if (m_irq_mask != 0) { - for (int i = 0; i < IRQ_8088_NMI; i++) + for (int i = IRQ_8088_NMI; i >= 0; i--) { if (m_irq_mask & (1 << i)) { @@ -1664,21 +1612,6 @@ WRITE_LINE_MEMBER(rainbow_state::bundle_irq) READ8_MEMBER(rainbow_state::system_parameter_r) { -#ifdef FORCE_RAINBOW_B_LOGO - - // WORKAROUND: Initialize NVRAM + VOLATILE RAM with DEFAULTS + correct RAM SIZE ! - int test = (m_inp8->read() >> 16) - 2; // 0 = 128 K (!) - if (test >= 0) - { - m_p_vol_ram[0xdb] = test; - m_p_nvram[0xdb] = test; - } - - // NVRAM @ 0x89 : AUTO RPT(0 = OFF 1 = ON) - m_p_nvram[0x89] = 0; // AUTO REPEAT ON (1 would be DETRIMENTAL TO "SET-UP" (80/132 + 50/60 Hz) with KEYBOARD_WORKAROUND (!) -#endif - - /* Info about option boards is in bits 0 - 3: SYSTEM PARAMETER INFORMATION: see AA-P308A-TV page 92 section 14.0 Bundle card (1) | Floppy (2) | Graphics (4) | Memory option (8) @@ -2179,16 +2112,10 @@ WRITE8_MEMBER(rainbow_state::diagnostic_w) // 8088 (port 0A WRITTEN). Fig.4-28 + // KEYBOARD void rainbow_state::update_kbd_irq() { -#ifndef KEYBOARD_WORKAROUND if ((m_kbd_rx_ready) || (m_kbd_tx_ready)) - { raise_8088_irq(IRQ_8088_KBD); - } else - { lower_8088_irq(IRQ_8088_KBD); - } -#endif } WRITE_LINE_MEMBER(rainbow_state::kbd_tx) diff --git a/src/mame/drivers/sdk80.cpp b/src/mame/drivers/sdk80.cpp index 5418220ad83..6b0038f508b 100644 --- a/src/mame/drivers/sdk80.cpp +++ b/src/mame/drivers/sdk80.cpp @@ -4,36 +4,34 @@ Intel SDK-80 -This is an evaluation kit for the 8080 cpu. +The 8080 System Design Kit (SDK-80) is a complete microcomputer system in +kit form, and provides a excellent prototype vehicle for evaluation of the +8080 microcomputer system (MCS-80). -There is no speaker or storage facility in the standard kit. +An extensive system monitor is included in a pre-programmed ROM for general +software utilities and system diagnostics. Download the User Manual to get the operating procedures. Monitor Commands: -D Display memory contents -G Go to address (execute program at address) -I Insert hex code -M Move blocks of memory -S Substitute memory locations -X Examine registers - -Please note this rom set boots into BASIC, not monitor. -All commands must be in upper case. -To correct a mistake, use DEL not Backspace. It will print a \ to indicate -a removed character. - -No known manual or schematic of the video board. +D, Display memory contents +G Go to address (execute program at address) +I
Insert instructions into RAM +M,, Move blocks of memory +S
Substitute memory locations +X Examine and modify registers ****************************************************************************/ #include "emu.h" #include "cpu/i8085/i8085.h" +#include "machine/i8255.h" #include "machine/i8251.h" #include "machine/clock.h" #include "bus/rs232/rs232.h" -//#include "machine/ay31015.h" +#define I8255A_0_TAG "ppi8255_0" +#define I8255A_1_TAG "ppi8255_1" #define I8251A_TAG "usart" #define I8251A_BAUD_TAG "usart_baud" #define RS232_TAG "rs232" @@ -45,19 +43,21 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_usart(*this, I8251A_TAG) + , m_ppi_0(*this, I8255A_0_TAG) + , m_ppi_1(*this, I8255A_1_TAG) , m_rs232(*this, RS232_TAG) , m_usart_baud_rate(*this, I8251A_BAUD_TAG) , m_usart_divide_counter(0) , m_usart_clock_state(0) { } - UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER( usart_clock_tick ); private: required_device m_maincpu; required_device m_usart; + required_device m_ppi_0; + required_device m_ppi_1; required_device m_rs232; required_ioport m_usart_baud_rate; @@ -68,14 +68,16 @@ private: static ADDRESS_MAP_START(sdk80_mem, AS_PROGRAM, 8, sdk80_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x0fff) AM_ROM - AM_RANGE(0x3c00, 0x3fff) AM_RAM + AM_RANGE(0x1000, 0x13ff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START(sdk80_io, AS_IO, 8, sdk80_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xec, 0xec) AM_DEVREADWRITE(I8251A_TAG, i8251_device, data_r, data_w) - AM_RANGE(0xed, 0xed) AM_DEVREADWRITE(I8251A_TAG, i8251_device, status_r, control_w) + AM_RANGE(0xec, 0xef) AM_DEVREADWRITE(I8255A_1_TAG, i8255_device, read, write) + AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE(I8255A_0_TAG, i8255_device, read, write) + AM_RANGE(0xfa, 0xfa) AM_DEVREADWRITE(I8251A_TAG, i8251_device, data_r, data_w) + AM_RANGE(0xfb, 0xfb) AM_DEVREADWRITE(I8251A_TAG, i8251_device, status_r, control_w) ADDRESS_MAP_END static INPUT_PORTS_START( sdk80 ) @@ -90,31 +92,6 @@ static INPUT_PORTS_START( sdk80 ) PORT_DIPSETTING( 0x40, "75") INPUT_PORTS_END -#if 0 -/* Graphics Output */ -const gfx_layout sdk80_charlayout = -{ - 7, 8, /* character cell is 7 pixels wide by 8 pixels high */ - 64, /* 64 characters in 2513 character generator ROM */ - 1, /* 1 bitplane */ - { 0 }, - /* 5 visible pixels per row, starting at bit 3, with MSB being 0: */ - { 3, 4, 5, 6, 7 }, - /* pixel rows stored from top to bottom: */ - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8 * 8 /* 8 8-bit pixel rows per character */ -}; - -static GFXDECODE_START( sdk80 ) - GFXDECODE_ENTRY( "gfx1", 0x0000, sdk80_charlayout, 0, 1 ) -GFXDECODE_END -#endif - -UINT32 sdk80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - return 0; -} - WRITE_LINE_MEMBER( sdk80_state::usart_clock_tick ) { UINT8 old_counter = m_usart_divide_counter; @@ -149,6 +126,9 @@ static MACHINE_CONFIG_START( sdk80, sdk80_state ) MCFG_I8251_DTR_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) MCFG_I8251_RTS_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) + MCFG_DEVICE_ADD(I8255A_0_TAG, I8255A, 0) + MCFG_DEVICE_ADD(I8255A_1_TAG, I8255A, 0) + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr)) @@ -157,63 +137,13 @@ static MACHINE_CONFIG_START( sdk80, sdk80_state ) MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL_18_432MHz/60) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(sdk80_state, usart_clock_tick)) - - /* video hardware */ - // 96364 crt controller - -// MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) - /* Video is blanked for 70 out of 262 scanlines per refresh cycle. - Each scanline is composed of 65 character times, 40 of which - are visible, and each character time is 7 dot times; a dot time - is 2 cycles of the fundamental 14.31818 MHz oscillator. The - total blanking time is about 4450 microseconds. */ -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((int) (70 * 65 * 7 * 2 / 14.31818))) - /* It would be nice if we could implement some sort of display - overscan here. */ -// MCFG_SCREEN_SIZE(40 * 7, 24 * 8) -// MCFG_SCREEN_VISIBLE_AREA(0, 40 * 7 - 1, 0, 24 * 8 - 1) -// MCFG_SCREEN_UPDATE_DRIVER(sdk80_state, screen_update) -// MCFG_SCREEN_PALETTE("palette") - -// MCFG_GFXDECODE_ADD("gfxdecode", "palette", sdk80) - -// MCFG_PALETTE_ADD_MONOCHROME("palette") - - // Video board UART -// MCFG_DEVICE_ADD( "hd6402", AY31015, 0 ) -// MCFG_AY31015_TX_CLOCK(( XTAL_16MHz / 16 ) / 256) -// MCFG_AY31015_RX_CLOCK(( XTAL_16MHz / 16 ) / 256) -// MCFG_AY51013_READ_SI_CB(READ8(sdk80_state, nascom1_hd6402_si)) -// MCFG_AY51013_WRITE_SO_CB(WRITE8(sdk80_state, nascom1_hd6402_so)) - - /* Devices */ -// MCFG_DEVICE_ADD("i8279", I8279, 3100000) // based on divider -// MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE)) // irq -// MCFG_I8279_OUT_SL_CB(WRITE8(sdk80_state, scanlines_w)) // scan SL lines -// MCFG_I8279_OUT_DISP_CB(WRITE8(sdk80_state, digit_w)) // display A&B -// MCFG_I8279_IN_RL_CB(READ8(sdk80_state, kbd_r)) // kbd RL lines -// MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key -// MCFG_I8279_IN_CTRL_CB(VCC) - MACHINE_CONFIG_END /* ROM definition */ ROM_START( sdk80 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "basic_blc_1.a14", 0x0000, 0x0400, CRC(b5e75aee) SHA1(6bd1eb9586d72544e8afb4ae43ecedcefa14da33)) - ROM_LOAD( "basic_blc_2.a15", 0x0400, 0x0400, CRC(0a9ad1ed) SHA1(92c47eadcf8b18eeedcccaa3deb9f1518aaceeae)) - ROM_LOAD( "basic_blc_3.a16", 0x0800, 0x0400, CRC(bc898e4b) SHA1(adc000534db0f736a75fbceed360dc220e02c30d)) - ROM_LOAD( "basic_blc_4.a17", 0x0c00, 0x0400, CRC(568e8b6d) SHA1(22960193d3b0ae1b5d876d8c3b3f3b40db01358c)) - - /* 512-byte Signetics 2513 character generator ROM at location D2-D3 */ - ROM_REGION(0x0200, "gfx1",0) - ROM_LOAD("s2513.d2", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) - - /* 256x4 PROM located on the video board, schematic location P7, to be moved into separate device later */ - ROM_REGION( 0x0120, "proms", 0 ) - ROM_LOAD( "6300__d7.p7", 0x0020, 0x0100, CRC(3eb3a8e4) SHA1(19097b5f60d1030f8b82d9f1d3a241f93e5c75d6) ) + ROM_REGION( 0x01400, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "mcs80.a14", 0x0000, 0x0400, BAD_DUMP CRC(3ce7bd37) SHA1(04cc67875b53d4cdfefce07041af12be3acedf4f)) // Compiled from manual listing ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1975, sdk80, 0, 0, sdk80, sdk80, driver_device, 0, "Intel", "SDK-80", MACHINE_NO_SOUND_HW ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1975, sdk80, 0, 0, sdk80, sdk80, driver_device, 0, "Intel", "SDK-80", MACHINE_NO_SOUND_HW ) diff --git a/src/mame/drivers/sorcerer.cpp b/src/mame/drivers/sorcerer.cpp index 05e91b0bcdb..8b090c49a43 100644 --- a/src/mame/drivers/sorcerer.cpp +++ b/src/mame/drivers/sorcerer.cpp @@ -115,8 +115,7 @@ It was often hooked to a printer, a joystick, a music card, or a speaker. We emulate the printer and the speaker. Another 25-pin port provided two-way serial communications. Only two speeds are -available - 300 baud and 1200 baud. There is no handshaking. This protocol is -currently not emulated. +available - 300 baud and 1200 baud. There is no handshaking. Other pins on this connector provided for two cassette players. The connections for cassette unit 1 are duplicated on a set of phono plugs. @@ -155,6 +154,11 @@ NOTES (2011-08-08) stable, so be prepared to cold boot whenever something goes wrong. +NOTES (2016-06-06) +1. SORCERER_USING_RS232 removed, since the core now supports RS-232 as a device. + Not actually tested due to the bios bugs making it + pretty much impossible to use. + ********************************************************************************/ #include "includes/sorcerer.h" @@ -396,10 +400,18 @@ static const floppy_interface sorcerer_floppy_interface = "floppy_8" }; +static DEVICE_INPUT_DEFAULTS_START( terminal ) + DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_1200 ) + DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_1200 ) + DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 ) + DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 ) + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE ) + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 ) +DEVICE_INPUT_DEFAULTS_END static MACHINE_CONFIG_START( sorcerer, sorcerer_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", Z80, 12638000/6) + MCFG_CPU_ADD("maincpu", Z80, ES_CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(sorcerer_mem) MCFG_CPU_IO_MAP(sorcerer_io) @@ -423,8 +435,10 @@ static MACHINE_CONFIG_START( sorcerer, sorcerer_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05) // cass2 speaker MCFG_DEVICE_ADD( "uart", AY31015, 0 ) - MCFG_AY31015_TX_CLOCK(4800.0) - MCFG_AY31015_RX_CLOCK(4800.0) + MCFG_AY31015_TX_CLOCK(ES_UART_CLOCK) + MCFG_AY31015_RX_CLOCK(ES_UART_CLOCK) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "null_modem") + MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal) /* printer */ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "covox") diff --git a/src/mame/drivers/sslam.cpp b/src/mame/drivers/sslam.cpp index 70fa00b7b44..48c3464b42a 100644 --- a/src/mame/drivers/sslam.cpp +++ b/src/mame/drivers/sslam.cpp @@ -364,7 +364,7 @@ WRITE8_MEMBER(sslam_state::sslam_snd_w) WRITE16_MEMBER(sslam_state::powerbls_sound_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(MCS51_INT1_LINE, HOLD_LINE); } @@ -423,7 +423,7 @@ READ8_MEMBER(sslam_state::playmark_snd_command_r) UINT8 data = 0; if ((m_oki_control & 0x38) == 0x30) { - data = soundlatch_byte_r(space,0); + data = m_soundlatch->read(space,0); } else if ((m_oki_control & 0x38) == 0x28) { data = (m_oki->read(space,0) & 0x0f); @@ -751,6 +751,8 @@ static MACHINE_CONFIG_START( powerbls, sslam_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH) /* verified on original PCB */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MACHINE_CONFIG_END diff --git a/src/mame/drivers/sun2.cpp b/src/mame/drivers/sun2.cpp index e7c931f8902..ec1611e494a 100644 --- a/src/mame/drivers/sun2.cpp +++ b/src/mame/drivers/sun2.cpp @@ -122,6 +122,11 @@ How the architecture works: #include "machine/bankdev.h" #include "bus/rs232/rs232.h" +#define SCC1_TAG "scc1" +#define SCC2_TAG "scc2" +#define RS232A_TAG "rs232a" +#define RS232B_TAG "rs232b" + // page table entry constants #define PM_VALID (0x80000000) // page is valid #define PM_PROTMASK (0x7e000000) // protection mask @@ -260,10 +265,12 @@ READ16_MEMBER( sun2_state::tl_mmu_r ) // printf("sun2: Context = %d, pmeg = %d, offset >> 14 = %x, entry = %d, page = %d\n", context, pmeg, offset >> 14, entry, (offset >> 10) & 0xf); - m_pagemap[entry] |= PM_ACCESSED; if (m_pagemap[entry] & PM_VALID) { - UINT32 tmp = (m_pagemap[entry] & 0xfffff) << 10; + m_pagemap[entry] |= PM_ACCESSED; + + // Sun2 implementations only use 12 bits from the page entry + UINT32 tmp = (m_pagemap[entry] & 0xfff) << 10; tmp |= (offset & 0x3ff); // if (!space.debugger_access()) @@ -404,12 +411,14 @@ WRITE16_MEMBER( sun2_state::tl_mmu_w ) UINT8 pmeg = m_segmap[context][offset >> 14]; UINT32 entry = (pmeg << 4) + ((offset >> 10) & 0xf); - m_pagemap[entry] |= PM_ACCESSED; if (m_pagemap[entry] & PM_VALID) { - UINT32 tmp = (m_pagemap[entry] & 0xfffff) << 10; - tmp |= (offset & 0x3ff); + m_pagemap[entry] |= (PM_ACCESSED | PM_MODIFIED); + // only 12 of the 20 bits in the page table entry are used on either Sun2 implementation + UINT32 tmp = (m_pagemap[entry] & 0xfff) << 10; + tmp |= (offset & 0x3ff); + //if (!space.debugger_access()) printf("sun2: Translated addr: %08x, type %d (page entry %08x, orig virt %08x)\n", tmp << 1, (m_pagemap[entry] >> 22) & 7, m_pagemap[entry], offset<<1); switch ((m_pagemap[entry] >> 22) & 7) @@ -419,17 +428,17 @@ WRITE16_MEMBER( sun2_state::tl_mmu_w ) return; case 1: // type 1 - //printf("write device space @ %x\n", tmp<<1); + //printf("write device space @ %x\n", tmp<<1); m_type1space->write16(space, tmp, data, mem_mask); return; case 2: // type 2 m_type2space->write16(space, tmp, data, mem_mask); - break; + return; case 3: // type 3 m_type3space->write16(space, tmp, data, mem_mask); - break; + return; } } else @@ -469,8 +478,14 @@ static ADDRESS_MAP_START(vmetype1space_map, AS_PROGRAM, 16, sun2_state) AM_RANGE(0x7f0000, 0x7f07ff) AM_ROM AM_REGION("bootprom", 0) // uses MMU loophole to read 32k from a 2k window // 7f0800-7f0fff: Ethernet interface // 7f1000-7f17ff: AM9518 encryption processor - // 7f1800-7f1fff: Keyboard/mouse SCC8530 - // 7f2000-7f27ff: RS232 ports SCC8530 + //AM_RANGE(0x7f1800, 0x7f1801) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, cb_r, cb_w, 0xff00) + //AM_RANGE(0x7f1802, 0x7f1803) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, db_r, db_w, 0xff00) + //AM_RANGE(0x7f1804, 0x7f1805) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ca_r, ca_w, 0xff00) + //AM_RANGE(0x7f1806, 0x7f1807) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, da_r, da_w, 0xff00) + AM_RANGE(0x7f2000, 0x7f2001) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, cb_r, cb_w, 0xff00) + AM_RANGE(0x7f2002, 0x7f2003) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, db_r, db_w, 0xff00) + AM_RANGE(0x7f2004, 0x7f2005) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ca_r, ca_w, 0xff00) + AM_RANGE(0x7f2006, 0x7f2007) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, da_r, da_w, 0xff00) // 7f2800-7f2fff: AM9513 timer ADDRESS_MAP_END @@ -487,16 +502,17 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(mbustype0space_map, AS_PROGRAM, 16, sun2_state) AM_RANGE(0x000000, 0x3fffff) AM_READWRITE(ram_r, ram_w) // 7f80000-7f807ff: Keyboard/mouse SCC8530 - AM_RANGE(0x7f00000, 0x7f1ffff) AM_RAM AM_SHARE("bw2_vram") - AM_RANGE(0x7f81800, 0x7f81801) AM_READWRITE( video_ctrl_r, video_ctrl_w ) + //AM_RANGE(0x7f8000, 0x7f8007) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00) + AM_RANGE(0x700000, 0x71ffff) AM_RAM AM_SHARE("bw2_vram") + AM_RANGE(0x781800, 0x781801) AM_READWRITE( video_ctrl_r, video_ctrl_w ) ADDRESS_MAP_END // type 1 device space static ADDRESS_MAP_START(mbustype1space_map, AS_PROGRAM, 16, sun2_state) AM_RANGE(0x000000, 0x0007ff) AM_ROM AM_REGION("bootprom", 0) // uses MMU loophole to read 32k from a 2k window // 001000-0017ff: AM9518 encryption processor - // 001800-001fff: Keyboard/mouse parallel port - // 002000-0027ff: RS232 ports SCC8530 + // 001800-001fff: Parallel port + AM_RANGE(0x002000, 0x0027ff) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00) // 002800-002fff: AM9513 timer // 003800-003fff: MM58167 RTC ADDRESS_MAP_END @@ -524,7 +540,7 @@ UINT32 sun2_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const scanline = &bitmap.pix32(y); for (x = 0; x < 1152/8; x++) { - pixels = m_vram[(y * (1152/8)) + (x ^ 1)]; + pixels = m_vram[(y * (1152/8)) + (BYTE_XOR_BE(x))]; *scanline++ = palette[(pixels>>7)&1]; *scanline++ = palette[(pixels>>6)&1]; @@ -608,6 +624,21 @@ static MACHINE_CONFIG_START( sun2vme, sun2_state ) MCFG_SCREEN_SIZE(1152,900) MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) MCFG_SCREEN_REFRESH_RATE(72) + + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) + MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) + + MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) + + MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_START( sun2mbus, sun2_state ) @@ -653,6 +684,21 @@ static MACHINE_CONFIG_START( sun2mbus, sun2_state ) MCFG_SCREEN_SIZE(1152,900) MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) MCFG_SCREEN_REFRESH_RATE(72) + + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) + MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) + + MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) + + MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/sun3.cpp b/src/mame/drivers/sun3.cpp index 00126ba93a9..acd477636fa 100644 --- a/src/mame/drivers/sun3.cpp +++ b/src/mame/drivers/sun3.cpp @@ -2,20 +2,7 @@ // copyright-holders:Miodrag Milanovic, R. Belmont /*************************************************************************** - sun3.c: preliminary driver for Sun 3 and Sun 3x models. - - status: 3/80 POSTs, 3/460 needs its unique RTC chip (also used by non-3x Sun 3s). - - TODO: - - Z8530 SCC needs to actually speak serial so we can hook up the mouse and keyboard. - - Improve interrupt controller emulation. - - Figure out how the IOMMU works. - - Intersil 7170 device for 3/460 and 3/480 (they use the same PROMs). - - Sun custom MMU for original Sun 3 models. - - AM7990 LANCE chip support for everyone. - - Figure out how the parallel printer port maps to Centronics and make it so. - - Much more... - + sun3.c: preliminary driver for Sun 3 models Sun-3 Models ------------ @@ -162,55 +149,6 @@ 4/280 by replacing the CPU board. Code-named "Sirius". - 3/80 - Processor(s): 68030 @ 20MHz, 68882 @ 20MHz, 68030 on-chip - MMU, 3 MIPS, 0.16 MFLOPS - CPU: 501-1401/1650 - Chassis type: square pizza box - Bus: P4 connector (not same as P4 on 3/60) - Memory: 16M or 40M physical, 4G virtual, 100ns cycle - Notes: Similar packaging to SparcStation 1. Parallel - port, SCSI port, AUI Ethernet, 1.44M 3.5" floppy - (720K on early units?). No onboard framebuffer. - Code-named "Hydra". Type-4 keyboard and Sun-4 - mouse, plugged together and into the machine - with a small DIN plug. 1M x 9 30-pin 100ns - SIMMs. Boot ROM versions 3.0.2 and later allow - using 4M SIMMs in some slots for up to 40M (see - Misc Q&A #15). - - 3/460 - Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, - 7 MIPS, 0.6 MFLOPS - CPU: 501-1299/1550 - Bus: VME - Memory: 128M physical with ECC, 4G/process virtual, - 64K cache, 80ns cycle - Notes: A 3/260 upgraded with a 3/4xx CPU board. Uses - original 3/2xx memory boards. - - 3/470 - Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, - 7 MIPS, 0.6 MFLOPS - CPU: 501-1299/1550 - Chassis type: deskside - Bus: VME - Memory: 128M physical with ECC, 4G/process virtual, - 64K cache, 80ns cycle - Notes: Rare. Code-named "Pegasus". 8M standard, uses - same memory boards as 3/2xx. - - 3/480 - Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, - 7 MIPS, 0.6 MFLOPS - CPU: 501-1299/1550 - Chassis type: rackmount - Bus: VME - Memory: 128M physical with ECC, 4G/process virtual, - 64K cache, 80ns cycle - Notes: Rare. Code-named "Pegasus". 8M standard, uses - same memory boards as 3/2xx. - 3/E Processor(s): 68020 CPU: 501-8028 @@ -220,87 +158,51 @@ factor. Serial and keyboard ports. External RAM, framebuffer, and SCSI/ethernet boards available. + +3/60 ROM breakpoints for start-of-tests +fefb104 - bus error test +fefb18e - interrupt test +fefb1da - clock IRQ test +fefb344 - MMU page valid test +fefb3c4 - MMU read-only permissions test +fefb45e - parity test: no spurious NMI generated from normal parity operation +fefb50c - parity test: NMI is generated when we write with inverted parity and enable parity NMIs +fefb5c8 - size memory by bus error +fef58c0 - EPROM checksum read? - Sun3X notes from NetBSD and Linux: - - RAM_END 0x40000000 - P4DAC 0x50200000 - VIDEO_P4ID 0x50300000 - BW2_ADDR 0x50400000 - ENA_PLANE 0x50600000 - FPA_ADDR 0x5c000000 - IOMMU 0x60000000 - ENABLEREG 0x61000000 - BUSERRREG 0x61000400 - DIAGREG 0x61000800 - IDPROM1 0x61000c00 (3/470) - MEMREG 0x61001000 - INTERREG 0x61001400 - SCC1 0x62000000 (keyboard/mouse) - SCC2 0x62002000 (serial console) - EEPROM 0x64000000 - IDPROM2 0x640007d8 (3/80) - CLOCK2 0x640007f8 (3/80 Mostek 48T02) - CLOCK1 0x64002000 (3/470 Intersil 7170) - INTELETH 0x65000000 - LANCEETH 0x65002000 - EMULEXSCSI 0x66000000 (3/80 5394) - EMULLEXDMA 0x66001000 (3/80) - PCACHETAG 0x68000000 - ECCPARREG 0x6a1e0000 - IOCTAGS 0x6c000000 - IOCFLUSH 0x6d000000 - FDC 0x6e000000 (3/80 Intel 82077) - FDC_CNTRL 0x6e000400 - FDC_VEC 0x6e000800 - PRINTER 0x6f00003c (3/80) - - The Sun3x System Enable Register controls the function of a few - on-board devices and general system operation. It is cleared when - the system is reset. - - 15 0 - +---+---+---+---+---+---+---+---+---+---+---+---+---+---.---.---+ - |BT |FPP|DMA| 0 |VID|RES|FPA|DIA| 0 |CCH|IOC|LBK|DCH| UNUSED | - +---+---+---+---+---+---+---+---+---+---+---+---+---+---.---.---+ - - Where: DCH = debug mode for system cache - LBK = VME loopback - IOC = I/O cache enable - CCH = system cache enable - DIA = diagnostic switch - FPA = enable floating-point accelerator - RES = 0 for hi-res, 1 for low res - VID = enable video display - DMA = enable system DVMA - FPP = enable 68881/2 FPU - BT = 0 for boot state, 1 for normal state - - bad '030 MMU mapping: L fef82000 -> P 00000000 - +fefcb34 - bpset for each test on 3/260 ROM ****************************************************************************/ #include "emu.h" #include "cpu/m68000/m68000.h" #include "machine/timekpr.h" +#include "machine/ram.h" #include "machine/z80scc.h" -#include "bus/scsi/scsi.h" -#include "bus/scsi/scsihd.h" -#include "bus/scsi/scsicd.h" -#include "machine/ncr539x.h" -#include "machine/upd765.h" -#include "formats/pc_dsk.h" -#include "formats/mfi_dsk.h" +#include "machine/bankdev.h" #include "bus/rs232/rs232.h" #define TIMEKEEPER_TAG "timekpr" #define SCC1_TAG "scc1" #define SCC2_TAG "scc2" -#define ESP_TAG "esp" -#define FDC_TAG "fdc" #define RS232A_TAG "rs232a" #define RS232B_TAG "rs232b" +// page table entry constants +#define PM_VALID (0x80000000) // page is valid +#define PM_WRITEMASK (0x40000000) // writable? +#define PM_SYSMASK (0x20000000) // system use only? +#define PM_CACHE (0x10000000) // cachable? +#define PM_TYPEMASK (0x0c000000) // type mask +#define PM_ACCESSED (0x02000000) // accessed flag +#define PM_MODIFIED (0x01000000) // modified flag + +#define BE_FPENABLE (0x04) // FPU not enabled +#define BE_FPBERR (0x08) // FPU encountered a bus error +#define BE_VMEBERR (0x10) // VME encountered a bus error +#define BE_TIMEOUT (0x20) // timeout - memory doesn't exist +#define BE_PROTERR (0x40) // protection failed on MMU page lookup +#define BE_INVALID (0x80) // invalid entry on MMU page lookup + class sun3_state : public driver_device { public: @@ -309,244 +211,473 @@ public: m_maincpu(*this, "maincpu"), m_scc1(*this, SCC1_TAG), m_scc2(*this, SCC2_TAG), - m_fdc(*this, FDC_TAG), m_p_ram(*this, "p_ram"), - m_bw2_vram(*this, "bw2_vram") + m_bw2_vram(*this, "bw2_vram"), + m_type0space(*this, "type0"), + m_type1space(*this, "type1"), + m_type2space(*this, "type2"), + m_type3space(*this, "type3"), + m_rom(*this, "user1"), + m_ram(*this, RAM_TAG) { } - required_device m_maincpu; + required_device m_maincpu; required_device m_scc1; required_device m_scc2; - optional_device m_fdc; + virtual void machine_start() override; virtual void machine_reset() override; - required_shared_ptr m_p_ram; + optional_shared_ptr m_p_ram; optional_shared_ptr m_bw2_vram; + optional_device m_type0space, m_type1space, m_type2space, m_type3space; + required_memory_region m_rom; + required_device m_ram; - DECLARE_READ32_MEMBER(enable_r); - DECLARE_WRITE32_MEMBER(enable_w); - DECLARE_READ32_MEMBER(buserr_r); - DECLARE_WRITE32_MEMBER(buserr_w); - DECLARE_READ32_MEMBER(diag_r); - DECLARE_WRITE32_MEMBER(diag_w); - DECLARE_READ32_MEMBER(printer_r); - DECLARE_WRITE32_MEMBER(printer_w); - DECLARE_READ32_MEMBER(iommu_r); - DECLARE_WRITE32_MEMBER(iommu_w); - DECLARE_READ32_MEMBER(irqctrl_r); - DECLARE_WRITE32_MEMBER(irqctrl_w); - DECLARE_READ32_MEMBER(memreg_r); - DECLARE_WRITE32_MEMBER(memreg_w); - DECLARE_READ32_MEMBER(memrerraddr_r); - DECLARE_WRITE32_MEMBER(memrerraddr_w); - DECLARE_READ32_MEMBER(fdc_control_r); - DECLARE_WRITE32_MEMBER(fdc_control_w); - DECLARE_READ32_MEMBER(cause_buserr_r); - DECLARE_WRITE32_MEMBER(cause_buserr_w); - DECLARE_WRITE32_MEMBER(ramwrite_w); - DECLARE_READ32_MEMBER(fpa_r); - DECLARE_READ32_MEMBER(p4id_r); - - DECLARE_FLOPPY_FORMATS( floppy_formats ); - - TIMER_DEVICE_CALLBACK_MEMBER(sun380_timer); + DECLARE_READ32_MEMBER( tl_mmu_r ); + DECLARE_WRITE32_MEMBER( tl_mmu_w ); + DECLARE_READ32_MEMBER( ram_r ); + DECLARE_WRITE32_MEMBER( ram_w ); + DECLARE_READ32_MEMBER( parity_r ); + DECLARE_WRITE32_MEMBER( parity_w ); + DECLARE_READ32_MEMBER( irqctrl_r ); + DECLARE_WRITE32_MEMBER( irqctrl_w ); + DECLARE_WRITE8_MEMBER( rtc7170_w ); UINT32 bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); private: - UINT32 m_enable, m_buserr, m_diag, m_printer, m_irqctrl, m_memreg, m_memerraddr; - UINT32 m_iommu[0x800]; + UINT32 *m_rom_ptr, *m_ram_ptr; + UINT32 m_enable, m_buserr, m_diag, m_dvma_enable, m_parregs[8], m_irqctrl; + + UINT32 m_context; + UINT8 m_segmap[8][2048]; + UINT32 m_pagemap[4096]; + UINT32 m_ram_size, m_ram_size_words; bool m_bInBusErr; }; -static ADDRESS_MAP_START(sun3_mem, AS_PROGRAM, 32, sun3_state) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00000000, 0x00ffffff) AM_RAM AM_SHARE("p_ram") // 16MB - AM_RANGE(0x0fef0000, 0x0fefffff) AM_ROM AM_REGION("user1",0) -ADDRESS_MAP_END - -static ADDRESS_MAP_START(sun3_80_mem, AS_PROGRAM, 32, sun3_state) - AM_RANGE(0x00000000, 0x03ffffff) AM_RAM AM_SHARE("p_ram") AM_WRITE(ramwrite_w) - AM_RANGE(0x40000000, 0x40000003) AM_READWRITE(cause_buserr_r, cause_buserr_w) - AM_RANGE(0x50300000, 0x50300003) AM_READ(p4id_r) - AM_RANGE(0x50400000, 0x504fffff) AM_RAM AM_SHARE("bw2_vram") - AM_RANGE(0x60000000, 0x60001fff) AM_READWRITE(iommu_r, iommu_w) - AM_RANGE(0x61000000, 0x61000003) AM_READWRITE(enable_r, enable_w) - AM_RANGE(0x61000400, 0x61000403) AM_READWRITE(buserr_r, buserr_w) - AM_RANGE(0x61000800, 0x61000803) AM_READWRITE(diag_r, diag_w) - AM_RANGE(0x61001000, 0x61001003) AM_READWRITE(memreg_r, memreg_w) - AM_RANGE(0x61001004, 0x61001007) AM_READWRITE(memrerraddr_r, memrerraddr_w) - AM_RANGE(0x61001400, 0x61001403) AM_READWRITE(irqctrl_r, irqctrl_w) - AM_RANGE(0x62000000, 0x6200000f) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) - AM_RANGE(0x62002000, 0x6200200f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) - AM_RANGE(0x63000000, 0x6301ffff) AM_ROM AM_REGION("user1",0) - AM_RANGE(0x64000000, 0x640007ff) AM_DEVREADWRITE8(TIMEKEEPER_TAG, timekeeper_device, read, write, 0xffffffff) - AM_RANGE(0x66000000, 0x6600003f) AM_DEVREADWRITE8(ESP_TAG, ncr539x_device, read, write, 0xff000000) - AM_RANGE(0x6e000000, 0x6e000007) AM_DEVICE8(FDC_TAG, n82077aa_device, map, 0xffffffff) - AM_RANGE(0x6e000400, 0x6e000403) AM_READWRITE(fdc_control_r, fdc_control_w) - AM_RANGE(0x6f00003c, 0x6f00003f) AM_READWRITE(printer_r, printer_w) - AM_RANGE(0xfefe0000, 0xfefeffff) AM_ROM AM_REGION("user1",0) -ADDRESS_MAP_END - -static ADDRESS_MAP_START(sun3_460_mem, AS_PROGRAM, 32, sun3_state) - AM_RANGE(0x00000000, 0x03ffffff) AM_RAM AM_SHARE("p_ram") AM_WRITE(ramwrite_w) - AM_RANGE(0x09000000, 0x09000003) AM_READWRITE(cause_buserr_r, cause_buserr_w) - AM_RANGE(0x50300000, 0x50300003) AM_READ(p4id_r) - AM_RANGE(0x50400000, 0x504fffff) AM_RAM AM_SHARE("bw2_vram") - AM_RANGE(0x5c000f14, 0x5c000f17) AM_READ(fpa_r) - AM_RANGE(0x60000000, 0x60001fff) AM_READWRITE(iommu_r, iommu_w) - AM_RANGE(0x61000000, 0x61000003) AM_READWRITE(enable_r, enable_w) - AM_RANGE(0x61000400, 0x61000403) AM_READWRITE(buserr_r, buserr_w) - AM_RANGE(0x61000800, 0x61000803) AM_READWRITE(diag_r, diag_w) - AM_RANGE(0x61001000, 0x61001003) AM_READWRITE(memreg_r, memreg_w) - AM_RANGE(0x61001004, 0x61001007) AM_READWRITE(memrerraddr_r, memrerraddr_w) - AM_RANGE(0x61001400, 0x61001403) AM_READWRITE(irqctrl_r, irqctrl_w) - AM_RANGE(0x62000000, 0x6200000f) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) - AM_RANGE(0x62002000, 0x6200200f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) - AM_RANGE(0x63000000, 0x6301ffff) AM_ROM AM_REGION("user1",0) - - AM_RANGE(0x6f00003c, 0x6f00003f) AM_READWRITE(printer_r, printer_w) - AM_RANGE(0xfefe0000, 0xfefeffff) AM_ROM AM_REGION("user1",0) -ADDRESS_MAP_END - -READ32_MEMBER( sun3_state::p4id_r ) +READ32_MEMBER( sun3_state::ram_r ) { - return (1<<24); // 0 = hires bw2 1600x1280, 1 = bw2 1152x900, 0x45 is "Ibis" color, blt 0x68 is "Lego" color + if (offset < m_ram_size_words) return m_ram_ptr[offset]; + + if (!m_bInBusErr) + { + //printf("ram_r: bus error on timeout, access to invalid addr %08x, PC=%x\n", offset<<2, m_maincpu->pc); + m_buserr = BE_TIMEOUT; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + } + + return 0xffffffff; } -WRITE32_MEMBER( sun3_state::fdc_control_w ) +WRITE32_MEMBER( sun3_state::ram_w ) { - logerror("FDC write %02x (%08x)\n", data >> 24, space.device().safe_pc()); -} - -READ32_MEMBER( sun3_state::fdc_control_r ) -{ - // Type of floppy present - // 0 = no floppy in drive - // 1 = ed - // 2 = hd - // 3 = dd - - if(m_fdc) { - floppy_image_device *fdev = machine().device(":fdc:0")->get_device(); - if(fdev->exists()) { - UINT32 variant = fdev->get_variant(); - switch(variant) { - case floppy_image::SSSD: - case floppy_image::SSDD: - case floppy_image::DSDD: - return 3 << 24; - - case floppy_image::DSHD: - return 2 << 24; - - case floppy_image::DSED: - return 1 << 24; - } - } - } - - return 0 << 24; -} - -WRITE32_MEMBER(sun3_state::ramwrite_w) -{ - UINT32 *pRAM = (UINT32 *)m_p_ram.target(); - - if (((m_memreg & 0xf0000000) == 0x70000000) && + // if writing bad parity is enabled + if (((m_parregs[0] & 0x20000000) == 0x20000000) && (m_irqctrl & 0x01000000) && !(m_bInBusErr)) { - m_memerraddr = offset<<2; - - // low 4 bits of memreg are the byte lane(s) involved, negative logic - m_memreg |= 0x0f; + m_parregs[1] = offset<<2; + //printf("Generating parity error, mem_mask %08x\n", mem_mask); switch (mem_mask) { case 0xff000000: - m_memreg &= ~0x08; + m_parregs[0] |= 0x08<<24; break; case 0x00ff0000: - m_memerraddr += 1; - m_memreg &= ~0x04; + m_parregs[1] += 1; + m_parregs[0] |= 0x04<<24; break; case 0x0000ff00: - m_memerraddr += 2; - m_memreg &= ~0x02; + m_parregs[1] += 2; + m_parregs[0] |= 0x02<<24; break; case 0x000000ff: - m_memerraddr += 3; - m_memreg &= ~0x01; + m_parregs[1] += 3; + m_parregs[0] |= 0x01<<24; break; case 0x0000ffff: - m_memerraddr += 2; - m_memreg &= ~0x03; + m_parregs[1] += 2; + m_parregs[0] |= 0x03<<24; break; case 0xffff0000: - m_memreg &= ~0x0c; + m_parregs[0] |= 0x0c<<24; break; case 0xffffffff: // no address adjust, show all 4 lanes as problematic + m_parregs[0] |= 0x0f<<24; break; } - - m_bInBusErr = true; // prevent recursion - m_maincpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, 2); + + // indicate parity interrupt + m_parregs[0] |= 0x80000000; + + // and can we take that now? + if (m_parregs[0] & 0x40000000) + { + m_bInBusErr = true; // prevent recursion + m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE); + } } - COMBINE_DATA(&pRAM[offset]); + if (offset < m_ram_size_words) + { + COMBINE_DATA(&m_ram_ptr[offset]); + return; + } + + if (!m_bInBusErr) + { + //printf("ram_w: bus error on timeout, access to invalid addr %08x, PC=%x\n", offset<<2, m_maincpu->pc); + m_buserr = BE_TIMEOUT; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + } } -READ32_MEMBER(sun3_state::enable_r) +READ32_MEMBER( sun3_state::tl_mmu_r ) { - return m_enable; + UINT8 fc = m_maincpu->get_fc(); + + if ((fc == 3) && !space.debugger_access()) + { + int page; + + switch (offset >> 26) + { + case 0: // IDPROM + printf("sun3: Read IDPROM at %x\n", offset); + return 0xffffffff; + + case 1: // page map + page = m_segmap[m_context & 7][(offset >> 15) & 0x7ff] << 4; + page += (offset >> 11) & 0xf; + + //printf("sun3: Read page map at %x (entry %d)\n", offset<<1, page); + return m_pagemap[page]; + + case 2: // segment map + //printf("sun3: Read segment map at %x (entry %d, user ctx %d mask %x)\n", offset<<2, (offset & ~0x3c000000) >> 15, m_context & 7, mem_mask); + return m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15]<<24; + + case 3: // context reg + //printf("sun3: Read context reg\n"); + return m_context<<24; + + case 4: // enable reg + return m_enable; + + case 5: // DVMA enable + return m_dvma_enable<<24; + + case 6: // bus error + m_bInBusErr = false; + return m_buserr<<24; + + case 7: // diagnostic reg + return m_diag<<24; + + case 8: // cache tags + printf("sun3: read cache tags @ %x, PC = %x\n", offset, m_maincpu->pc); + return 0xffffffff; + + case 9: // cache data + printf("sun3: read cache data @ %x, PC = %x\n", offset, m_maincpu->pc); + return 0xffffffff; + + case 10: // flush cache + return 0xffffffff; + + case 11: // block copy + printf("sun3: read block copy @ %x, PC = %x\n", offset, m_maincpu->pc); + return 0xffffffff; + + case 15: // UART bypass + printf("sun3: read UART bypass @ %x, PC = %x\n", offset, m_maincpu->pc); + return 0xffffffff; + } + } + + // boot mode? + if ((fc == M68K_FC_SUPERVISOR_PROGRAM) && !(m_enable & 0x80)) + { + return m_rom_ptr[offset & 0x3fff]; + } + + // debugger hack + if ((space.debugger_access()) && (offset >= (0xfef0000>>2)) && (offset <= (0xfefffff>>2))) + { + return m_rom_ptr[offset & 0x3fff]; + } + + // it's translation time + UINT8 pmeg = m_segmap[m_context & 7][(offset >> 15) & 0x7ff]; + UINT32 entry = (pmeg << 4) + ((offset >> 11) & 0xf); + + // printf("sun3: Context = %d, pmeg = %d, offset >> 14 = %x, entry = %d, page = %d\n", m_context&7, pmeg, offset >> 14, entry, (offset >> 10) & 0xf); + + if (m_pagemap[entry] & PM_VALID) + { + if ((m_pagemap[entry] & PM_SYSMASK) && (fc < M68K_FC_SUPERVISOR_DATA)) + { + m_buserr = BE_PROTERR; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + return 0xffffffff; + } + + m_pagemap[entry] |= PM_ACCESSED; + + UINT32 tmp = (m_pagemap[entry] & 0x7ffff) << 11; + tmp |= (offset & 0x7ff); + + //printf("pmeg %d, entry %d = %08x, virt %08x => tmp %08x\n", pmeg, entry, m_pagemap[entry], offset << 2, tmp); + + // if (!space.debugger_access()) + // printf("sun2: Translated addr: %08x, type %d (page %d page entry %08x, orig virt %08x, FC %d)\n", tmp << 1, (m_pagemap[entry] >> 22) & 7, entry, m_pagemap[entry], offset<<1, fc); + + switch ((m_pagemap[entry] >> 26) & 3) + { + case 0: // type 0 space + return m_type0space->read32(space, tmp, mem_mask); + + case 1: // type 1 space + //printf("read device space @ %x\n", tmp<<1); + return m_type1space->read32(space, tmp, mem_mask); + + case 2: // type 2 space + return m_type2space->read32(space, tmp, mem_mask); + + case 3: // type 3 space + return m_type3space->read32(space, tmp, mem_mask); + } + } + else + { + // uncomment to see real state of driver +/* if (!space.debugger_access()) printf("sun3: pagemap entry not valid! (PC=%x)\n", m_maincpu->pc); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);*/ + return 0xffffffff; + } + + if (!space.debugger_access()) printf("sun3: Unmapped read @ %08x (FC %d, mask %08x, PC=%x, seg %x)\n", offset<<2, fc, mem_mask, m_maincpu->pc, offset>>15); + + return 0xffffffff; } -WRITE32_MEMBER(sun3_state::enable_w) +WRITE32_MEMBER( sun3_state::tl_mmu_w ) { -// printf("sun3x: %08x to enable (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_enable); + UINT8 fc = m_maincpu->get_fc(); + + //printf("sun3: Write %08x (FC %d, mask %08x, PC=%x) to %08x\n", data, fc, mem_mask, m_maincpu->pc, offset<<1); + + if (fc == 3) // control space + { + int page; + + switch (offset >> 26) + { + case 0: // IDPROM + return; + + case 1: // page map fefaf32 + page = m_segmap[m_context & 7][(offset >> 15) & 0x7ff] << 4; + //printf("context = %d, segment = %d, PMEG = %d\n", m_context & 7, (offset >> 15) & 0x7ff, page); + page += (offset >> 11) & 0xf; + //printf("add = %d\n", (offset >> 11) & 0xf); + + //printf("sun3: Write %04x to page map at %x (entry %d), ", data, offset<<2, page); + COMBINE_DATA(&m_pagemap[page]); + + //printf("entry now %08x (adr %08x PC=%x mask %x)\n", m_pagemap[page], (m_pagemap[page] & 0xfffff) << 13, m_maincpu->pc, mem_mask); + return; + + case 2: // segment map + //printf("sun3: Write %02x to segment map at %x (entry %d, user ctx %d PC=%x mask %x)\n", (data>>24) & 0xff, offset<<2, (offset & ~0x3c000000)>>15, m_context & 7, m_maincpu->pc, mem_mask); + m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15] = (data>>24) & 0xff; + //printf("segment map[%d][%d] now %x\n", m_context & 7, (offset & ~0x3c000000) >> 15, m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15] = (data>>24) & 0xff); + return; + + case 3: // context reg + //printf("sun3: Write (%x) %x to context\n", data, data>>24); + m_context = data >> 24; + return; + + case 4: // enable reg + //printf("sun3: Write %x to enable, PC=%x\n", data, m_maincpu->pc); + COMBINE_DATA(&m_enable); + return; + + case 5: // DVMA enable + m_dvma_enable = data>>24; + return; + + case 6: // bus error + m_buserr = data >> 24; + return; + + case 7: // diagnostic reg + m_diag = data >> 24; + printf("sun3: CPU LEDs to %02x (PC=%x) => ", ((data>>24) & 0xff) ^ 0xff, m_maincpu->pc); + for (int i = 0; i < 8; i++) + { + if (m_diag & (1<pc); + return; + + case 9: // cache data + printf("sun3: %08x to cache data @ %x, PC = %x\n", data, offset, m_maincpu->pc); + return; + + case 10: // flush cache + return; + + case 11: // block copy + printf("sun3: %08x to block copy @ %x, PC = %x\n", data, offset, m_maincpu->pc); + return; + + case 15: // UART bypass + printf("sun3: %08x to UART bypass @ %x, PC = %x\n", data, offset, m_maincpu->pc); + return; + } + } + + // it's translation time + UINT8 pmeg = m_segmap[m_context & 7][(offset >> 15) & 0x7ff]; + UINT32 entry = (pmeg << 4) + ((offset >> 11) & 0xf); + + if (m_pagemap[entry] & PM_VALID) + { + if ((!(m_pagemap[entry] & PM_WRITEMASK)) || + ((m_pagemap[entry] & PM_SYSMASK) && (fc < M68K_FC_SUPERVISOR_DATA))) + { + m_buserr = BE_PROTERR; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + return; + } + + m_pagemap[entry] |= (PM_ACCESSED | PM_MODIFIED); + + UINT32 tmp = (m_pagemap[entry] & 0x7ffff) << 11; + tmp |= (offset & 0x7ff); + + //if (!space.debugger_access()) printf("sun2: Translated addr: %08x, type %d (page entry %08x, orig virt %08x)\n", tmp << 1, (m_pagemap[entry] >> 22) & 7, m_pagemap[entry], offset<<1); + + //if (((m_pagemap[entry] >> 26) & 3) == 1) + { + //printf("pmeg %d, entry %d = %08x, virt %08x => tmp %08x\n", pmeg, entry, m_pagemap[entry], offset << 2, tmp); + } + + switch ((m_pagemap[entry] >> 26) & 3) + { + case 0: // type 0 + m_type0space->write32(space, tmp, data, mem_mask); + return; + + case 1: // type 1 + //printf("write device space @ %x\n", tmp<<1); + m_type1space->write32(space, tmp, data, mem_mask); + return; + + case 2: // type 2 + m_type2space->write32(space, tmp, data, mem_mask); + return; + + case 3: // type 3 + m_type3space->write32(space, tmp, data, mem_mask); + return; + } + } + else + { + if (!space.debugger_access()) printf("sun3: pagemap entry not valid!\n"); + m_buserr = BE_INVALID; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + } + + printf("sun3: Unmapped write %04x (FC %d, mask %04x, PC=%x) to %08x\n", data, fc, mem_mask, m_maincpu->pc, offset<<2); } -READ32_MEMBER(sun3_state::buserr_r) +READ32_MEMBER(sun3_state::parity_r) { - UINT32 rv = m_buserr; - m_buserr = 0; + UINT32 rv = m_parregs[offset]; + + if (offset == 0) // clear interrupt if any + { + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + m_parregs[offset] &= ~0x8f000000; + } + return rv; } -WRITE32_MEMBER(sun3_state::buserr_w) +WRITE32_MEMBER(sun3_state::parity_w) { -// printf("sun3x: %08x to buserr (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_buserr); + //printf("sun3: %08x to parity registers @ %x (mask %08x)\n", data, offset, mem_mask); + + if (offset == 0) + { + m_parregs[0] &= 0x8f000000; + + if ((m_parregs[0] & 0x80000000) && (data & 0x40000000)) + { + m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE); + } + + m_parregs[0] |= (data & 0x70000000); + } + else + { + COMBINE_DATA(&m_parregs[offset]); + } } -READ32_MEMBER(sun3_state::diag_r) -{ - return m_diag; -} +static ADDRESS_MAP_START(sun3_mem, AS_PROGRAM, 32, sun3_state) + AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE( tl_mmu_r, tl_mmu_w ) +ADDRESS_MAP_END -WRITE32_MEMBER(sun3_state::diag_w) -{ -// printf("sun3x: %08x to diag (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_diag); -} +// type 0 device space +static ADDRESS_MAP_START(vmetype0space_map, AS_PROGRAM, 32, sun3_state) + AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(ram_r, ram_w) +ADDRESS_MAP_END -READ32_MEMBER(sun3_state::printer_r) -{ - return m_printer; -} +// type 1 device space +static ADDRESS_MAP_START(vmetype1space_map, AS_PROGRAM, 32, sun3_state) + AM_RANGE(0x00020000, 0x0002000f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) + AM_RANGE(0x00060000, 0x0006ffff) AM_WRITE8(rtc7170_w, 0xffffffff) + AM_RANGE(0x00080000, 0x0008000f) AM_READWRITE(parity_r, parity_w) + AM_RANGE(0x000a0000, 0x000a0003) AM_READWRITE(irqctrl_r, irqctrl_w) + AM_RANGE(0x00100000, 0x0010ffff) AM_ROM AM_REGION("user1", 0) +ADDRESS_MAP_END -WRITE32_MEMBER(sun3_state::printer_w) -{ -// printf("sun3x: %08x to printer (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_printer); -} +// type 2 device space +static ADDRESS_MAP_START(vmetype2space_map, AS_PROGRAM, 32, sun3_state) +ADDRESS_MAP_END + +// type 3 device space +static ADDRESS_MAP_START(vmetype3space_map, AS_PROGRAM, 32, sun3_state) +ADDRESS_MAP_END READ32_MEMBER(sun3_state::irqctrl_r) { @@ -555,7 +686,7 @@ READ32_MEMBER(sun3_state::irqctrl_r) WRITE32_MEMBER(sun3_state::irqctrl_w) { -// printf("sun3x: %08x to interrupt control (mask %08x)\n", data, mem_mask); + //printf("sun3: %08x to interrupt control (mask %08x)\n", data, mem_mask); COMBINE_DATA(&m_irqctrl); if (data & 0x01000000) @@ -572,10 +703,6 @@ WRITE32_MEMBER(sun3_state::irqctrl_w) { m_maincpu->set_input_line(M68K_IRQ_3, ASSERT_LINE); } - if (!(data & 0x80000000)) - { - m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); - } } else // master enable clear, clear all interrupts { @@ -589,83 +716,22 @@ WRITE32_MEMBER(sun3_state::irqctrl_w) } } -READ32_MEMBER(sun3_state::memreg_r) +WRITE8_MEMBER(sun3_state::rtc7170_w) { - return m_memreg; -} - -WRITE32_MEMBER(sun3_state::memreg_w) -{ -// printf("sun3x: %08x to memory control (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_memreg); -} - -READ32_MEMBER(sun3_state::memrerraddr_r) -{ - m_bInBusErr = false; - m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); - return m_memerraddr; -} - -WRITE32_MEMBER(sun3_state::memrerraddr_w) -{ -// printf("sun3x: %08x to memory error address (mask %08x)\n", data, mem_mask); - COMBINE_DATA(&m_memerraddr); -} - -READ32_MEMBER(sun3_state::iommu_r) -{ - return m_iommu[offset]; -} - -// IOMMU entry defs: -// address mask: 0x03ffe000 -// cache inhibit: 0x00000040 -// full block: 0x00000020 -// modified: 0x00000010 -// used: 0x00000008 -// write prot: 0x00000004 -// bad: 0x00000002 -// valid: 0x00000001 -WRITE32_MEMBER(sun3_state::iommu_w) -{ - COMBINE_DATA(&m_iommu[offset]); -} - -READ32_MEMBER(sun3_state::fpa_r) -{ - m_buserr |= 0x04000000; - m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); - return 0xffffffff; -} - -READ32_MEMBER(sun3_state::cause_buserr_r) -{ - m_buserr |= 0x20000000; - m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); - return 0xffffffff; -} - -WRITE32_MEMBER(sun3_state::cause_buserr_w) -{ - m_buserr |= 0x20000000; - m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); -} - -TIMER_DEVICE_CALLBACK_MEMBER(sun3_state::sun380_timer) -{ - if ((m_irqctrl & 0x81000000) == 0x81000000) + //printf("%02x to 7170 @ %x\n", data, offset); + + if ((offset == 0x11) && (data == 0x1c)) { - m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); - m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE); + if ((m_irqctrl & 0x21000000) == 0x21000000) + { + m_maincpu->set_input_line(M68K_IRQ_5, ASSERT_LINE); + } } } UINT32 sun3_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { +#if 0 UINT32 *scanline; int x, y; UINT8 pixels; @@ -689,7 +755,7 @@ UINT32 sun3_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const *scanline++ = palette[(pixels&1)]; } } - +#endif return 0; } @@ -697,93 +763,63 @@ UINT32 sun3_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const static INPUT_PORTS_START( sun3 ) INPUT_PORTS_END +void sun3_state::machine_start() +{ + m_rom_ptr = (UINT32 *)m_rom->base(); + m_ram_ptr = (UINT32 *)m_ram->pointer(); + m_ram_size = m_ram->size(); + m_ram_size_words = m_ram_size >> 2; +} void sun3_state::machine_reset() -{ - UINT8* user1 = memregion("user1")->base(); - - memcpy((UINT8*)m_p_ram.target(),user1,0x10000); - +{ m_maincpu->reset(); - - memset(m_iommu, 0, sizeof(m_iommu)); - m_enable = 0; m_buserr = 0; m_diag = 0; - m_printer = 0; + m_dvma_enable = 0; m_irqctrl = 0; - m_memreg = 0; - m_memerraddr = 0; m_bInBusErr = false; } -FLOPPY_FORMATS_MEMBER( sun3_state::floppy_formats ) - FLOPPY_PC_FORMAT -FLOPPY_FORMATS_END - -static SLOT_INTERFACE_START( sun_floppies ) - SLOT_INTERFACE( "35hd", FLOPPY_35_HD ) -SLOT_INTERFACE_END - static MACHINE_CONFIG_START( sun3, sun3_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68020, 16670000) MCFG_CPU_PROGRAM_MAP(sun3_mem) - MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) - MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_START( sun3_80, sun3_state ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68030, 20000000) - MCFG_CPU_PROGRAM_MAP(sun3_80_mem) - - MCFG_M48T02_ADD(TIMEKEEPER_TAG) - - MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) - MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) - MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) - MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) - - MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) - MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) - - MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) - MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) - - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) - - MCFG_DEVICE_ADD(ESP_TAG, NCR539X, 20000000/2) - MCFG_LEGACY_SCSI_PORT("scsi") - - MCFG_N82077AA_ADD("fdc", n82077aa_device::MODE_PS2) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", sun_floppies, "35hd", sun3_state::floppy_formats) - - // the timekeeper has no interrupt output, so 3/80 includes a dedicated timer circuit - MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun380_timer, attotime::from_hz(100)) - - MCFG_SCREEN_ADD("bwtwo", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_update) - MCFG_SCREEN_SIZE(1152,900) - MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) - MCFG_SCREEN_REFRESH_RATE(72) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_START( sun3_460, sun3_state ) - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68030, 33000000) - MCFG_CPU_PROGRAM_MAP(sun3_460_mem) - - MCFG_M48T02_ADD(TIMEKEEPER_TAG) + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("2M") + MCFG_RAM_EXTRA_OPTIONS("4M,6M,8M,12M,16M,20M,24M,28M,32M") + MCFG_RAM_DEFAULT_VALUE(0x00) + // MMU Type 0 device space + MCFG_DEVICE_ADD("type0", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype0space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 1 device space + MCFG_DEVICE_ADD("type1", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype1space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 2 device space + MCFG_DEVICE_ADD("type2", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype2space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 3 device space + MCFG_DEVICE_ADD("type3", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype3space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) @@ -917,48 +953,6 @@ ROM_START( sun3_e ) ROMX_LOAD( "sun3_e.32", 0x0000, 0x10000, CRC(acedde7e) SHA1(1ab6ec28f4365a613a5e326c34cb37585c3f0ecc), ROM_BIOS(1)) ROM_END -ROM_START( sun3_80 ) - ROM_REGION32_BE( 0x20000, "user1", ROMREGION_ERASEFF ) -/* -Sun 3/80 V1.0 Bootprom -Sun 3/80 V2.2 Bootprom -Sun 3/80 V2.3 Bootprom -Sun 3/80 V2.9.2 Bootprom -Sun 3/80 V3.0 Bootprom -Sun 3/80 V3.0.2 Bootprom -Sun 3/80 V3.0.3 Bootprom -*/ - ROM_SYSTEM_BIOS(0, "rev303", "Rev 3.0.3") - ROMX_LOAD( "sun3_80_v3.0.3", 0x0000, 0x20000, CRC(8f983115) SHA1(e4be2dcbb29fc5c60ed9d838ab241c634fdd24e5), ROM_BIOS(1)) - ROM_SYSTEM_BIOS(1, "rev302", "Rev 3.0.2") - ROMX_LOAD( "sun3_80_v3.0.2", 0x0000, 0x20000, CRC(c09a3592) SHA1(830187dfe58e65289533717a797d2c42da86ac4e), ROM_BIOS(2)) - ROM_SYSTEM_BIOS(2, "rev30", "Rev 3.0") - ROMX_LOAD( "sun3_80_v3.0", 0x0000, 0x20000, CRC(47e3b012) SHA1(1e045b6f542aaf7808d6567c28a9e734a8c5d815), ROM_BIOS(3)) - ROM_SYSTEM_BIOS(3, "rev292", "Rev 2.9.2") - ROMX_LOAD( "sun3_80_v2.9.2", 0x0000, 0x20000, CRC(32bcf711) SHA1(7ecd4a0d0988c1d1d53fd79ac16c8456ed73ace1), ROM_BIOS(4)) - - // default NVRAM: includes valid settings for console on framebuffer, boot from SCSI disk, Ethernet ID, more - ROM_REGION( 0x800, TIMEKEEPER_TAG, 0 ) - ROM_LOAD( "timekpr_380.bin", 0x000000, 0x000800, CRC(e76f1aae) SHA1(8e7c36e3928887a94a8133e8416ee4126c31edd7) ) -ROM_END - -ROM_START( sun3_460 ) - ROM_REGION32_BE( 0x20000, "user1", ROMREGION_ERASEFF ) -/* -Sun 3/460/480 V1.2.3 Bootprom -Sun 3/460/480 V2.9.1 Bootprom (2 Files, one for odd and one for even addresses) -Sun 3/460/480 V2.9.2 Bootprom -Sun 3/460/480 V2.9.3 Bootprom -Sun 3/460/480 V3.0 Bootprom (2 Files, one for odd and one for even addresses) -*/ - ROM_SYSTEM_BIOS(0, "rev30", "Rev 3.0") - ROMX_LOAD( "3_400_l.300", 0x00000, 0x10000, CRC(1312a04b) SHA1(6c3b67ba3567991897a48fe20f589ebbfcf0a35d), ROM_BIOS(1)) - ROMX_LOAD( "3_400_h.300", 0x10000, 0x10000, CRC(8d688672) SHA1(a5593844ce6af6c4f7f39bb653dc8f964b73b095), ROM_BIOS(1)) - ROM_SYSTEM_BIOS(1, "rev291", "Rev 2.9.1") - ROMX_LOAD( "sun3_460_v2.9.1_0", 0x00000, 0x10000, CRC(d62dbf09) SHA1(4a6b5fd7840b44fe93c9058a8973d8dd3c9f7d24), ROM_BIOS(2)) - ROMX_LOAD( "sun3_460_v2.9.1_1", 0x10000, 0x10000, CRC(3b5a5942) SHA1(ed6250e3c07d7cb62d4dd517a8637c8d37e16dc5), ROM_BIOS(2)) -ROM_END - /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ @@ -968,6 +962,3 @@ COMP( 198?, sun3_110, 0, 0, sun3, sun3, driver_device, 0, COMP( 198?, sun3_150, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/75/140/150/160/180", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // AKA Carrera COMP( 198?, sun3_260, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/260/280", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Prism COMP( 198?, sun3_e, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/E", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Polaris - -COMP( 198?, sun3_80, 0, 0, sun3_80, sun3, driver_device, 0, "Sun Microsystems", "Sun 3x/80", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Hydra -COMP( 198?, sun3_460, 0, 0, sun3_460, sun3, driver_device, 0, "Sun Microsystems", "Sun 3x/460/470/480", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Pegasus diff --git a/src/mame/drivers/sun3x.cpp b/src/mame/drivers/sun3x.cpp new file mode 100644 index 00000000000..d81688727d2 --- /dev/null +++ b/src/mame/drivers/sun3x.cpp @@ -0,0 +1,684 @@ +// license:BSD-3-Clause +// copyright-holders:Miodrag Milanovic, R. Belmont +/*************************************************************************** + + sun3.c: preliminary driver for Sun 3x models. + + status: 3/80 POSTs, 3/460 needs its unique RTC chip (also used by non-3x Sun 3s). + + TODO: + - Z8530 SCC needs to actually speak serial so we can hook up the mouse and keyboard. + - Improve interrupt controller emulation. + - Figure out how the IOMMU works. + - Intersil 7170 device for 3/460 and 3/480 (they use the same PROMs). + - Sun custom MMU for original Sun 3 models. + - AM7990 LANCE chip support for everyone. + - Figure out how the parallel printer port maps to Centronics and make it so. + - Much more... + + + Sun-3x Models + ------------ + + 3/80 + Processor(s): 68030 @ 20MHz, 68882 @ 20MHz, 68030 on-chip + MMU, 3 MIPS, 0.16 MFLOPS + CPU: 501-1401/1650 + Chassis type: square pizza box + Bus: P4 connector (not same as P4 on 3/60) + Memory: 16M or 40M physical, 4G virtual, 100ns cycle + Notes: Similar packaging to SparcStation 1. Parallel + port, SCSI port, AUI Ethernet, 1.44M 3.5" floppy + (720K on early units?). No onboard framebuffer. + Code-named "Hydra". Type-4 keyboard and Sun-4 + mouse, plugged together and into the machine + with a small DIN plug. 1M x 9 30-pin 100ns + SIMMs. Boot ROM versions 3.0.2 and later allow + using 4M SIMMs in some slots for up to 40M (see + Misc Q&A #15). + + 3/460 + Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, + 7 MIPS, 0.6 MFLOPS + CPU: 501-1299/1550 + Bus: VME + Memory: 128M physical with ECC, 4G/process virtual, + 64K cache, 80ns cycle + Notes: A 3/260 upgraded with a 3/4xx CPU board. Uses + original 3/2xx memory boards. + + 3/470 + Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, + 7 MIPS, 0.6 MFLOPS + CPU: 501-1299/1550 + Chassis type: deskside + Bus: VME + Memory: 128M physical with ECC, 4G/process virtual, + 64K cache, 80ns cycle + Notes: Rare. Code-named "Pegasus". 8M standard, uses + same memory boards as 3/2xx. + + 3/480 + Processor(s): 68030 @ 33 MHz, 68882, 68030 on-chip MMU, + 7 MIPS, 0.6 MFLOPS + CPU: 501-1299/1550 + Chassis type: rackmount + Bus: VME + Memory: 128M physical with ECC, 4G/process virtual, + 64K cache, 80ns cycle + Notes: Rare. Code-named "Pegasus". 8M standard, uses + same memory boards as 3/2xx. + + Sun3X notes from NetBSD and Linux: + + RAM_END 0x40000000 + P4DAC 0x50200000 + VIDEO_P4ID 0x50300000 + BW2_ADDR 0x50400000 + ENA_PLANE 0x50600000 + FPA_ADDR 0x5c000000 + IOMMU 0x60000000 + ENABLEREG 0x61000000 + BUSERRREG 0x61000400 + DIAGREG 0x61000800 + IDPROM1 0x61000c00 (3/470) + MEMREG 0x61001000 + INTERREG 0x61001400 + SCC1 0x62000000 (keyboard/mouse) + SCC2 0x62002000 (serial console) + EEPROM 0x64000000 + IDPROM2 0x640007d8 (3/80) + CLOCK2 0x640007f8 (3/80 Mostek 48T02) + CLOCK1 0x64002000 (3/470 Intersil 7170) + INTELETH 0x65000000 + LANCEETH 0x65002000 + EMULEXSCSI 0x66000000 (3/80 5394) + EMULLEXDMA 0x66001000 (3/80) + PCACHETAG 0x68000000 + ECCPARREG 0x6a1e0000 + IOCTAGS 0x6c000000 + IOCFLUSH 0x6d000000 + FDC 0x6e000000 (3/80 Intel 82077) + FDC_CNTRL 0x6e000400 + FDC_VEC 0x6e000800 + PRINTER 0x6f00003c (3/80) + + The Sun3x System Enable Register controls the function of a few + on-board devices and general system operation. It is cleared when + the system is reset. + + 15 0 + +---+---+---+---+---+---+---+---+---+---+---+---+---+---.---.---+ + |BT |FPP|DMA| 0 |VID|RES|FPA|DIA| 0 |CCH|IOC|LBK|DCH| UNUSED | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---.---.---+ + + Where: DCH = debug mode for system cache + LBK = VME loopback + IOC = I/O cache enable + CCH = system cache enable + DIA = diagnostic switch + FPA = enable floating-point accelerator + RES = 0 for hi-res, 1 for low res + VID = enable video display + DMA = enable system DVMA + FPP = enable 68881/2 FPU + BT = 0 for boot state, 1 for normal state + + bad '030 MMU mapping: L fef82000 -> P 00000000 + +****************************************************************************/ + +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "machine/timekpr.h" +#include "machine/z80scc.h" +#include "bus/scsi/scsi.h" +#include "bus/scsi/scsihd.h" +#include "bus/scsi/scsicd.h" +#include "machine/ncr539x.h" +#include "machine/upd765.h" +#include "formats/pc_dsk.h" +#include "formats/mfi_dsk.h" +#include "bus/rs232/rs232.h" + +#define TIMEKEEPER_TAG "timekpr" +#define SCC1_TAG "scc1" +#define SCC2_TAG "scc2" +#define ESP_TAG "esp" +#define FDC_TAG "fdc" +#define RS232A_TAG "rs232a" +#define RS232B_TAG "rs232b" + +class sun3x_state : public driver_device +{ +public: + sun3x_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_scc1(*this, SCC1_TAG), + m_scc2(*this, SCC2_TAG), + m_fdc(*this, FDC_TAG), + m_p_ram(*this, "p_ram"), + m_bw2_vram(*this, "bw2_vram") + { } + + required_device m_maincpu; + required_device m_scc1; + required_device m_scc2; + optional_device m_fdc; + virtual void machine_reset() override; + + required_shared_ptr m_p_ram; + optional_shared_ptr m_bw2_vram; + + DECLARE_READ32_MEMBER(enable_r); + DECLARE_WRITE32_MEMBER(enable_w); + DECLARE_READ32_MEMBER(buserr_r); + DECLARE_WRITE32_MEMBER(buserr_w); + DECLARE_READ32_MEMBER(diag_r); + DECLARE_WRITE32_MEMBER(diag_w); + DECLARE_READ32_MEMBER(printer_r); + DECLARE_WRITE32_MEMBER(printer_w); + DECLARE_READ32_MEMBER(iommu_r); + DECLARE_WRITE32_MEMBER(iommu_w); + DECLARE_READ32_MEMBER(irqctrl_r); + DECLARE_WRITE32_MEMBER(irqctrl_w); + DECLARE_READ32_MEMBER(memreg_r); + DECLARE_WRITE32_MEMBER(memreg_w); + DECLARE_READ32_MEMBER(memrerraddr_r); + DECLARE_WRITE32_MEMBER(memrerraddr_w); + DECLARE_READ32_MEMBER(fdc_control_r); + DECLARE_WRITE32_MEMBER(fdc_control_w); + DECLARE_READ32_MEMBER(cause_buserr_r); + DECLARE_WRITE32_MEMBER(cause_buserr_w); + DECLARE_WRITE32_MEMBER(ramwrite_w); + DECLARE_READ32_MEMBER(fpa_r); + DECLARE_READ32_MEMBER(p4id_r); + + DECLARE_FLOPPY_FORMATS( floppy_formats ); + + TIMER_DEVICE_CALLBACK_MEMBER(sun380_timer); + + UINT32 bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +private: + UINT32 m_enable, m_buserr, m_diag, m_printer, m_irqctrl, m_memreg, m_memerraddr; + UINT32 m_iommu[0x800]; + bool m_bInBusErr; +}; + +static ADDRESS_MAP_START(sun3_80_mem, AS_PROGRAM, 32, sun3x_state) + AM_RANGE(0x00000000, 0x03ffffff) AM_RAM AM_SHARE("p_ram") AM_WRITE(ramwrite_w) + AM_RANGE(0x40000000, 0x40000003) AM_READWRITE(cause_buserr_r, cause_buserr_w) + AM_RANGE(0x50300000, 0x50300003) AM_READ(p4id_r) + AM_RANGE(0x50400000, 0x504fffff) AM_RAM AM_SHARE("bw2_vram") + AM_RANGE(0x60000000, 0x60001fff) AM_READWRITE(iommu_r, iommu_w) + AM_RANGE(0x61000000, 0x61000003) AM_READWRITE(enable_r, enable_w) + AM_RANGE(0x61000400, 0x61000403) AM_READWRITE(buserr_r, buserr_w) + AM_RANGE(0x61000800, 0x61000803) AM_READWRITE(diag_r, diag_w) + AM_RANGE(0x61001000, 0x61001003) AM_READWRITE(memreg_r, memreg_w) + AM_RANGE(0x61001004, 0x61001007) AM_READWRITE(memrerraddr_r, memrerraddr_w) + AM_RANGE(0x61001400, 0x61001403) AM_READWRITE(irqctrl_r, irqctrl_w) + AM_RANGE(0x62000000, 0x6200000f) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) + AM_RANGE(0x62002000, 0x6200200f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) + AM_RANGE(0x63000000, 0x6301ffff) AM_ROM AM_REGION("user1",0) + AM_RANGE(0x64000000, 0x640007ff) AM_DEVREADWRITE8(TIMEKEEPER_TAG, timekeeper_device, read, write, 0xffffffff) + AM_RANGE(0x66000000, 0x6600003f) AM_DEVREADWRITE8(ESP_TAG, ncr539x_device, read, write, 0xff000000) + AM_RANGE(0x6e000000, 0x6e000007) AM_DEVICE8(FDC_TAG, n82077aa_device, map, 0xffffffff) + AM_RANGE(0x6e000400, 0x6e000403) AM_READWRITE(fdc_control_r, fdc_control_w) + AM_RANGE(0x6f00003c, 0x6f00003f) AM_READWRITE(printer_r, printer_w) + AM_RANGE(0xfefe0000, 0xfefeffff) AM_ROM AM_REGION("user1",0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(sun3_460_mem, AS_PROGRAM, 32, sun3x_state) + AM_RANGE(0x00000000, 0x03ffffff) AM_RAM AM_SHARE("p_ram") AM_WRITE(ramwrite_w) + AM_RANGE(0x09000000, 0x09000003) AM_READWRITE(cause_buserr_r, cause_buserr_w) + AM_RANGE(0x50300000, 0x50300003) AM_READ(p4id_r) + AM_RANGE(0x50400000, 0x504fffff) AM_RAM AM_SHARE("bw2_vram") + AM_RANGE(0x5c000f14, 0x5c000f17) AM_READ(fpa_r) + AM_RANGE(0x60000000, 0x60001fff) AM_READWRITE(iommu_r, iommu_w) + AM_RANGE(0x61000000, 0x61000003) AM_READWRITE(enable_r, enable_w) + AM_RANGE(0x61000400, 0x61000403) AM_READWRITE(buserr_r, buserr_w) + AM_RANGE(0x61000800, 0x61000803) AM_READWRITE(diag_r, diag_w) + AM_RANGE(0x61001000, 0x61001003) AM_READWRITE(memreg_r, memreg_w) + AM_RANGE(0x61001004, 0x61001007) AM_READWRITE(memrerraddr_r, memrerraddr_w) + AM_RANGE(0x61001400, 0x61001403) AM_READWRITE(irqctrl_r, irqctrl_w) + AM_RANGE(0x62000000, 0x6200000f) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) + AM_RANGE(0x62002000, 0x6200200f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) + AM_RANGE(0x63000000, 0x6301ffff) AM_ROM AM_REGION("user1",0) + + AM_RANGE(0x6f00003c, 0x6f00003f) AM_READWRITE(printer_r, printer_w) + AM_RANGE(0xfefe0000, 0xfefeffff) AM_ROM AM_REGION("user1",0) +ADDRESS_MAP_END + +READ32_MEMBER( sun3x_state::p4id_r ) +{ + return (1<<24); // 0 = hires bw2 1600x1280, 1 = bw2 1152x900, 0x45 is "Ibis" color, blt 0x68 is "Lego" color +} + +WRITE32_MEMBER( sun3x_state::fdc_control_w ) +{ + logerror("FDC write %02x (%08x)\n", data >> 24, space.device().safe_pc()); +} + +READ32_MEMBER( sun3x_state::fdc_control_r ) +{ + // Type of floppy present + // 0 = no floppy in drive + // 1 = ed + // 2 = hd + // 3 = dd + + if(m_fdc) { + floppy_image_device *fdev = machine().device(":fdc:0")->get_device(); + if(fdev->exists()) { + UINT32 variant = fdev->get_variant(); + switch(variant) { + case floppy_image::SSSD: + case floppy_image::SSDD: + case floppy_image::DSDD: + return 3 << 24; + + case floppy_image::DSHD: + return 2 << 24; + + case floppy_image::DSED: + return 1 << 24; + } + } + } + + return 0 << 24; +} + +WRITE32_MEMBER(sun3x_state::ramwrite_w) +{ + UINT32 *pRAM = (UINT32 *)m_p_ram.target(); + + if (((m_memreg & 0xf0000000) == 0x70000000) && + (m_irqctrl & 0x01000000) && + !(m_bInBusErr)) + { + m_memerraddr = offset<<2; + + // low 4 bits of memreg are the byte lane(s) involved, negative logic + m_memreg |= 0x0f; + switch (mem_mask) + { + case 0xff000000: + m_memreg &= ~0x08; + break; + + case 0x00ff0000: + m_memerraddr += 1; + m_memreg &= ~0x04; + break; + + case 0x0000ff00: + m_memerraddr += 2; + m_memreg &= ~0x02; + break; + + case 0x000000ff: + m_memerraddr += 3; + m_memreg &= ~0x01; + break; + + case 0x0000ffff: + m_memerraddr += 2; + m_memreg &= ~0x03; + break; + + case 0xffff0000: + m_memreg &= ~0x0c; + break; + + case 0xffffffff: // no address adjust, show all 4 lanes as problematic + break; + } + + m_bInBusErr = true; // prevent recursion + m_maincpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, 2); + } + + COMBINE_DATA(&pRAM[offset]); +} + +READ32_MEMBER(sun3x_state::enable_r) +{ + return m_enable; +} + +WRITE32_MEMBER(sun3x_state::enable_w) +{ +// printf("sun3x: %08x to enable (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_enable); +} + +READ32_MEMBER(sun3x_state::buserr_r) +{ + UINT32 rv = m_buserr; + m_buserr = 0; + return rv; +} + +WRITE32_MEMBER(sun3x_state::buserr_w) +{ +// printf("sun3x: %08x to buserr (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_buserr); +} + +READ32_MEMBER(sun3x_state::diag_r) +{ + return m_diag; +} + +WRITE32_MEMBER(sun3x_state::diag_w) +{ +// printf("sun3x: %08x to diag (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_diag); +} + +READ32_MEMBER(sun3x_state::printer_r) +{ + return m_printer; +} + +WRITE32_MEMBER(sun3x_state::printer_w) +{ +// printf("sun3x: %08x to printer (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_printer); +} + +READ32_MEMBER(sun3x_state::irqctrl_r) +{ + return m_irqctrl; +} + +WRITE32_MEMBER(sun3x_state::irqctrl_w) +{ +// printf("sun3x: %08x to interrupt control (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_irqctrl); + + if (data & 0x01000000) + { + if (data & 0x02000000) + { + m_maincpu->set_input_line(M68K_IRQ_1, ASSERT_LINE); + } + if (data & 0x04000000) + { + m_maincpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); + } + if (data & 0x08000000) + { + m_maincpu->set_input_line(M68K_IRQ_3, ASSERT_LINE); + } + if (!(data & 0x80000000)) + { + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + } + } + else // master enable clear, clear all interrupts + { + m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_3, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_6, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + } +} + +READ32_MEMBER(sun3x_state::memreg_r) +{ + return m_memreg; +} + +WRITE32_MEMBER(sun3x_state::memreg_w) +{ +// printf("sun3x: %08x to memory control (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_memreg); +} + +READ32_MEMBER(sun3x_state::memrerraddr_r) +{ + m_bInBusErr = false; + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + return m_memerraddr; +} + +WRITE32_MEMBER(sun3x_state::memrerraddr_w) +{ +// printf("sun3x: %08x to memory error address (mask %08x)\n", data, mem_mask); + COMBINE_DATA(&m_memerraddr); +} + +READ32_MEMBER(sun3x_state::iommu_r) +{ + return m_iommu[offset]; +} + +// IOMMU entry defs: +// address mask: 0x03ffe000 +// cache inhibit: 0x00000040 +// full block: 0x00000020 +// modified: 0x00000010 +// used: 0x00000008 +// write prot: 0x00000004 +// bad: 0x00000002 +// valid: 0x00000001 +WRITE32_MEMBER(sun3x_state::iommu_w) +{ + COMBINE_DATA(&m_iommu[offset]); +} + +READ32_MEMBER(sun3x_state::fpa_r) +{ + m_buserr |= 0x04000000; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + return 0xffffffff; +} + +READ32_MEMBER(sun3x_state::cause_buserr_r) +{ + m_buserr |= 0x20000000; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + return 0xffffffff; +} + +WRITE32_MEMBER(sun3x_state::cause_buserr_w) +{ + m_buserr |= 0x20000000; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); +} + +TIMER_DEVICE_CALLBACK_MEMBER(sun3x_state::sun380_timer) +{ + if ((m_irqctrl & 0x81000000) == 0x81000000) + { + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE); + } +} + +UINT32 sun3x_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + UINT32 *scanline; + int x, y; + UINT8 pixels; + static const UINT32 palette[2] = { 0, 0xffffff }; + UINT8 *m_vram = (UINT8 *)m_bw2_vram.target(); + + for (y = 0; y < 900; y++) + { + scanline = &bitmap.pix32(y); + for (x = 0; x < 1152/8; x++) + { + pixels = m_vram[(y * (1152/8)) + (BYTE4_XOR_BE(x))]; + + *scanline++ = palette[(pixels>>7)&1]; + *scanline++ = palette[(pixels>>6)&1]; + *scanline++ = palette[(pixels>>5)&1]; + *scanline++ = palette[(pixels>>4)&1]; + *scanline++ = palette[(pixels>>3)&1]; + *scanline++ = palette[(pixels>>2)&1]; + *scanline++ = palette[(pixels>>1)&1]; + *scanline++ = palette[(pixels&1)]; + } + } + + return 0; +} + +/* Input ports */ +static INPUT_PORTS_START( sun3x ) +INPUT_PORTS_END + + +void sun3x_state::machine_reset() +{ + UINT8* user1 = memregion("user1")->base(); + + memcpy((UINT8*)m_p_ram.target(),user1,0x10000); + + m_maincpu->reset(); + + memset(m_iommu, 0, sizeof(m_iommu)); + + m_enable = 0; + m_buserr = 0; + m_diag = 0; + m_printer = 0; + m_irqctrl = 0; + m_memreg = 0; + m_memerraddr = 0; + m_bInBusErr = false; +} + +FLOPPY_FORMATS_MEMBER( sun3x_state::floppy_formats ) + FLOPPY_PC_FORMAT +FLOPPY_FORMATS_END + +static SLOT_INTERFACE_START( sun_floppies ) + SLOT_INTERFACE( "35hd", FLOPPY_35_HD ) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_START( sun3_80, sun3x_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68030, 20000000) + MCFG_CPU_PROGRAM_MAP(sun3_80_mem) + + MCFG_M48T02_ADD(TIMEKEEPER_TAG) + + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) + MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) + + MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) + + MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) + + MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) + MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) + MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + + MCFG_DEVICE_ADD(ESP_TAG, NCR539X, 20000000/2) + MCFG_LEGACY_SCSI_PORT("scsi") + + MCFG_N82077AA_ADD("fdc", n82077aa_device::MODE_PS2) + MCFG_FLOPPY_DRIVE_ADD("fdc:0", sun_floppies, "35hd", sun3x_state::floppy_formats) + + // the timekeeper has no interrupt output, so 3/80 includes a dedicated timer circuit + MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3x_state, sun380_timer, attotime::from_hz(100)) + + MCFG_SCREEN_ADD("bwtwo", RASTER) + MCFG_SCREEN_UPDATE_DRIVER(sun3x_state, bw2_update) + MCFG_SCREEN_SIZE(1152,900) + MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) + MCFG_SCREEN_REFRESH_RATE(72) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( sun3_460, sun3x_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68030, 33000000) + MCFG_CPU_PROGRAM_MAP(sun3_460_mem) + + MCFG_M48T02_ADD(TIMEKEEPER_TAG) + + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) + MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) + + MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) + + MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) +MACHINE_CONFIG_END + +/* ROM definition */ + +ROM_START( sun3_80 ) + ROM_REGION32_BE( 0x20000, "user1", ROMREGION_ERASEFF ) +/* +Sun 3/80 V1.0 Bootprom +Sun 3/80 V2.2 Bootprom +Sun 3/80 V2.3 Bootprom +Sun 3/80 V2.9.2 Bootprom +Sun 3/80 V3.0 Bootprom +Sun 3/80 V3.0.2 Bootprom +Sun 3/80 V3.0.3 Bootprom +*/ + ROM_SYSTEM_BIOS(0, "rev303", "Rev 3.0.3") + ROMX_LOAD( "sun3_80_v3.0.3", 0x0000, 0x20000, CRC(8f983115) SHA1(e4be2dcbb29fc5c60ed9d838ab241c634fdd24e5), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "rev302", "Rev 3.0.2") + ROMX_LOAD( "sun3_80_v3.0.2", 0x0000, 0x20000, CRC(c09a3592) SHA1(830187dfe58e65289533717a797d2c42da86ac4e), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "rev30", "Rev 3.0") + ROMX_LOAD( "sun3_80_v3.0", 0x0000, 0x20000, CRC(47e3b012) SHA1(1e045b6f542aaf7808d6567c28a9e734a8c5d815), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(3, "rev292", "Rev 2.9.2") + ROMX_LOAD( "sun3_80_v2.9.2", 0x0000, 0x20000, CRC(32bcf711) SHA1(7ecd4a0d0988c1d1d53fd79ac16c8456ed73ace1), ROM_BIOS(4)) + + // default NVRAM: includes valid settings for console on framebuffer, boot from SCSI disk, Ethernet ID, more + ROM_REGION( 0x800, TIMEKEEPER_TAG, 0 ) + ROM_LOAD( "timekpr_380.bin", 0x000000, 0x000800, CRC(e76f1aae) SHA1(8e7c36e3928887a94a8133e8416ee4126c31edd7) ) +ROM_END + +ROM_START( sun3_460 ) + ROM_REGION32_BE( 0x20000, "user1", ROMREGION_ERASEFF ) +/* +Sun 3/460/480 V1.2.3 Bootprom +Sun 3/460/480 V2.9.1 Bootprom (2 Files, one for odd and one for even addresses) +Sun 3/460/480 V2.9.2 Bootprom +Sun 3/460/480 V2.9.3 Bootprom +Sun 3/460/480 V3.0 Bootprom (2 Files, one for odd and one for even addresses) +*/ + ROM_SYSTEM_BIOS(0, "rev30", "Rev 3.0") + ROMX_LOAD( "3_400_l.300", 0x00000, 0x10000, CRC(1312a04b) SHA1(6c3b67ba3567991897a48fe20f589ebbfcf0a35d), ROM_BIOS(1)) + ROMX_LOAD( "3_400_h.300", 0x10000, 0x10000, CRC(8d688672) SHA1(a5593844ce6af6c4f7f39bb653dc8f964b73b095), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "rev291", "Rev 2.9.1") + ROMX_LOAD( "sun3_460_v2.9.1_0", 0x00000, 0x10000, CRC(d62dbf09) SHA1(4a6b5fd7840b44fe93c9058a8973d8dd3c9f7d24), ROM_BIOS(2)) + ROMX_LOAD( "sun3_460_v2.9.1_1", 0x10000, 0x10000, CRC(3b5a5942) SHA1(ed6250e3c07d7cb62d4dd517a8637c8d37e16dc5), ROM_BIOS(2)) +ROM_END + +/* Driver */ + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ +COMP( 198?, sun3_80, 0, 0, sun3_80, sun3x, driver_device, 0, "Sun Microsystems", "Sun 3/80", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Hydra +COMP( 198?, sun3_460, 0, 0, sun3_460, sun3x, driver_device, 0, "Sun Microsystems", "Sun 3/460/470/480", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Pegasus diff --git a/src/mame/drivers/terracre.cpp b/src/mame/drivers/terracre.cpp index dab4575a2b8..9bf4104be33 100644 --- a/src/mame/drivers/terracre.cpp +++ b/src/mame/drivers/terracre.cpp @@ -133,12 +133,12 @@ static const UINT16 mHoreKidProtData[] = WRITE16_MEMBER(terracre_state::amazon_sound_w) { - soundlatch_byte_w(space,0,((data & 0x7f) << 1) | 1); + m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1); } READ8_MEMBER(terracre_state::soundlatch_clear_r) { - soundlatch_clear_byte_w(space,0,0); + m_soundlatch->clear_w(space,0,0); return 0; } @@ -225,7 +225,7 @@ static ADDRESS_MAP_START( sound_3526_io_map, AS_IO, 8, terracre_state ) AM_RANGE(0x02, 0x02) AM_DEVWRITE("dac1", dac_device, write_signed8) AM_RANGE(0x03, 0x03) AM_DEVWRITE("dac2", dac_device, write_signed8) AM_RANGE(0x04, 0x04) AM_READ(soundlatch_clear_r) - AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r) + AM_RANGE(0x06, 0x06) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_2203_io_map, AS_IO, 8, terracre_state ) @@ -234,7 +234,7 @@ static ADDRESS_MAP_START( sound_2203_io_map, AS_IO, 8, terracre_state ) AM_RANGE(0x02, 0x02) AM_DEVWRITE("dac1", dac_device, write_signed8) AM_RANGE(0x03, 0x03) AM_DEVWRITE("dac2", dac_device, write_signed8) AM_RANGE(0x04, 0x04) AM_READ(soundlatch_clear_r) - AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r) + AM_RANGE(0x06, 0x06) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static INPUT_PORTS_START( terracre ) @@ -541,6 +541,8 @@ static MACHINE_CONFIG_START( ym3526, terracre_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, XTAL_16MHz/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/thepit.cpp b/src/mame/drivers/thepit.cpp index 9e73f41bfb5..44155688cb5 100644 --- a/src/mame/drivers/thepit.cpp +++ b/src/mame/drivers/thepit.cpp @@ -154,6 +154,7 @@ Player 2 and Player 1 share the same controls ! #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "includes/thepit.h" @@ -211,7 +212,7 @@ static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) - AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state ) @@ -231,7 +232,7 @@ static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) - AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state ) @@ -253,7 +254,7 @@ static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0xb005, 0xb005) AM_WRITE(intrepid_graphics_bank_w) AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) - AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -265,7 +266,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( audio_io_map, AS_IO, 8, thepit_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x8c, 0x8d) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x8d, 0x8d) AM_DEVREAD("ay2", ay8910_device, data_r) AM_RANGE(0x8e, 0x8f) AM_DEVWRITE("ay1", ay8910_device, address_data_w) @@ -732,8 +733,10 @@ static MACHINE_CONFIG_START( thepit, thepit_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, PIXEL_CLOCK/4) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("ay2", AY8910, PIXEL_CLOCK/4) diff --git a/src/mame/drivers/wink.cpp b/src/mame/drivers/wink.cpp index df9e42a26f7..855a0ab47c1 100644 --- a/src/mame/drivers/wink.cpp +++ b/src/mame/drivers/wink.cpp @@ -15,6 +15,7 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" @@ -171,7 +172,7 @@ static ADDRESS_MAP_START( wink_io, AS_IO, 8, wink_state ) // AM_RANGE(0x23, 0x23) AM_WRITENOP //? // AM_RANGE(0x24, 0x24) AM_WRITENOP //cab Knocker like in q-bert! AM_RANGE(0x25, 0x27) AM_WRITE(wink_coin_counter_w) - AM_RANGE(0x40, 0x40) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x40, 0x40) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x60, 0x60) AM_WRITE(sound_irq_w) AM_RANGE(0x80, 0x80) AM_READ(analog_port_r) AM_RANGE(0xa0, 0xa0) AM_READ(player_inputs_r) @@ -188,7 +189,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( wink_sound_map, AS_PROGRAM, 8, wink_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x4000, 0x43ff) AM_RAM - AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( wink_sound_io, AS_IO, 8, wink_state ) @@ -381,6 +382,9 @@ static MACHINE_CONFIG_START( wink, wink_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, 12000000 / 8) MCFG_AY8910_PORT_A_READ_CB(READ8(wink_state, sound_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/zodiack.cpp b/src/mame/drivers/zodiack.cpp index b2d0cba7791..67a087a0f26 100644 --- a/src/mame/drivers/zodiack.cpp +++ b/src/mame/drivers/zodiack.cpp @@ -130,7 +130,7 @@ INTERRUPT_GEN_MEMBER(zodiack_state::zodiack_sound_nmi_gen) WRITE8_MEMBER( zodiack_state::master_soundlatch_w ) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -150,7 +150,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zodiack_state ) AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1") AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN0") AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN1") - AM_RANGE(0x6090, 0x6090) AM_READWRITE(soundlatch_byte_r, master_soundlatch_w) + AM_RANGE(0x6090, 0x6090) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(master_soundlatch_w) AM_RANGE(0x7000, 0x7000) AM_READNOP AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* NOP??? */ AM_RANGE(0x7100, 0x7100) AM_WRITE(nmi_mask_w) AM_RANGE(0x7200, 0x7200) AM_WRITE(flipscreen_w) @@ -167,7 +167,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, zodiack_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x23ff) AM_RAM AM_RANGE(0x4000, 0x4000) AM_WRITE(sound_nmi_enable_w) - AM_RANGE(0x6000, 0x6000) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) + AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, zodiack_state ) @@ -588,6 +588,8 @@ static MACHINE_CONFIG_START( zodiack, zodiack_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_18_432MHz/12) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/zr107.cpp b/src/mame/drivers/zr107.cpp index 8f82b41b10e..2b07dbee0d1 100644 --- a/src/mame/drivers/zr107.cpp +++ b/src/mame/drivers/zr107.cpp @@ -216,7 +216,7 @@ public: required_device m_maincpu; required_device m_audiocpu; - required_device m_dsp; + required_device m_dsp; required_device m_watchdog; optional_device m_k001604; required_device m_k056800; @@ -911,6 +911,8 @@ DRIVER_INIT_MEMBER(zr107_state,common) m_sharc_dataram = std::make_unique(0x100000/4); m_led_reg0 = m_led_reg1 = 0x7f; m_ccu_vcth = m_ccu_vctl = 0; + + m_dsp->enable_recompiler(); } DRIVER_INIT_MEMBER(zr107_state,zr107) diff --git a/src/mame/includes/armedf.h b/src/mame/includes/armedf.h index b09b256ee45..9ebc22e86e6 100644 --- a/src/mame/includes/armedf.h +++ b/src/mame/includes/armedf.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:David Haywood, Phil Stroffolino, Carlos A. Lozano + #include "includes/nb1414m4.h" +#include "machine/gen_latch.h" #include "video/bufsprite.h" class armedf_state : public driver_device @@ -14,6 +16,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_spriteram(*this, "spriteram"), + m_soundlatch(*this, "soundlatch"), m_spr_pal_clut(*this, "spr_pal_clut"), m_fg_videoram(*this, "fg_videoram"), m_bg_videoram(*this, "bg_videoram") @@ -26,6 +29,7 @@ public: required_device m_gfxdecode; required_device m_palette; required_device m_spriteram; + required_device m_soundlatch; /* memory pointers */ std::unique_ptr m_text_videoram; diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h index 4f2b447439a..dd29b39b2e3 100644 --- a/src/mame/includes/astrocde.h +++ b/src/mame/includes/astrocde.h @@ -5,7 +5,9 @@ Bally Astrocade-based hardware ***************************************************************************/ + #include "machine/bankdev.h" +#include "machine/gen_latch.h" #include "sound/astrocde.h" #include "sound/samples.h" #include "sound/votrax.h" @@ -39,6 +41,7 @@ public: m_videoram(*this, "videoram"), m_protected_ram(*this, "protected_ram"), m_screen(*this, "screen"), + m_soundlatch(*this, "soundlatch"), m_bank4000(*this, "bank4000"), m_bank8000(*this, "bank8000"), m_p1handle(*this, "P1HANDLE"), @@ -65,6 +68,7 @@ public: optional_shared_ptr m_videoram; optional_shared_ptr m_protected_ram; required_device m_screen; + optional_device m_soundlatch; optional_device m_bank4000; optional_memory_bank m_bank8000; optional_ioport m_p1handle; diff --git a/src/mame/includes/cclimber.h b/src/mame/includes/cclimber.h index 2d0b64f566a..ad49bef6f5f 100644 --- a/src/mame/includes/cclimber.h +++ b/src/mame/includes/cclimber.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" + class cclimber_state : public driver_device { public: @@ -9,6 +12,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_bigsprite_videoram(*this, "bigspriteram"), m_videoram(*this, "videoram"), m_column_scroll(*this, "column_scroll"), @@ -27,6 +31,7 @@ public: optional_device m_audiocpu; required_device m_gfxdecode; required_device m_palette; + optional_device m_soundlatch; required_shared_ptr m_bigsprite_videoram; required_shared_ptr m_videoram; diff --git a/src/mame/includes/cop01.h b/src/mame/includes/cop01.h index 447775fab34..124fed9005c 100644 --- a/src/mame/includes/cop01.h +++ b/src/mame/includes/cop01.h @@ -6,6 +6,8 @@ *************************************************************************/ +#include "machine/gen_latch.h" + class cop01_state : public driver_device { public: @@ -17,7 +19,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr m_bgvideoram; @@ -38,6 +41,7 @@ public: required_device m_audiocpu; required_device m_gfxdecode; required_device m_palette; + required_device m_soundlatch; DECLARE_WRITE8_MEMBER(cop01_sound_command_w); DECLARE_READ8_MEMBER(cop01_sound_command_r); diff --git a/src/mame/includes/deniam.h b/src/mame/includes/deniam.h index 6f3d91de158..5beebbb7c37 100644 --- a/src/mame/includes/deniam.h +++ b/src/mame/includes/deniam.h @@ -1,10 +1,13 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + /************************************************************************* Deniam games *************************************************************************/ + +#include "machine/gen_latch.h" #include "sound/okim6295.h" class deniam_state : public driver_device @@ -20,7 +23,8 @@ public: m_audiocpu(*this, "audiocpu"), m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr m_videoram; @@ -76,4 +80,5 @@ public: required_device m_oki; required_device m_gfxdecode; required_device m_palette; + optional_device m_soundlatch; }; diff --git a/src/mame/includes/electron.h b/src/mame/includes/electron.h index bfa6de0f5a7..a2c616c7954 100644 --- a/src/mame/includes/electron.h +++ b/src/mame/includes/electron.h @@ -16,6 +16,7 @@ #include "imagedev/cassette.h" #include "sound/beep.h" +#include "bus/electron/exp.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" diff --git a/src/mame/includes/espial.h b/src/mame/includes/espial.h index 5b764363c4d..3c12252827e 100644 --- a/src/mame/includes/espial.h +++ b/src/mame/includes/espial.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Brad Oliver + /*************************************************************************** - Espial hardware games (drivers: espial.c) + Espial hardware games (drivers: espial.cpp) ***************************************************************************/ +#include "machine/gen_latch.h" + class espial_state : public driver_device { public: @@ -21,7 +24,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_shared_ptr m_videoram; required_shared_ptr m_attributeram; @@ -45,6 +49,7 @@ public: required_device m_audiocpu; required_device m_gfxdecode; required_device m_palette; + required_device m_soundlatch; DECLARE_WRITE8_MEMBER(espial_master_interrupt_mask_w); DECLARE_WRITE8_MEMBER(espial_master_soundlatch_w); diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index ac1e84a7b33..2c9b6221ae9 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -6,6 +6,7 @@ ***************************************************************************/ +#include "machine/gen_latch.h" #include "machine/i8255.h" #include "sound/ay8910.h" #include "sound/dac.h" @@ -50,11 +51,12 @@ public: m_ppi8255_0(*this, "ppi8255_0"), m_ppi8255_1(*this, "ppi8255_1"), m_ppi8255_2(*this, "ppi8255_2"), - m_spriteram(*this, "spriteram"), - m_videoram(*this, "videoram"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_spriteram(*this, "spriteram"), + m_videoram(*this, "videoram"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } required_device m_maincpu; @@ -66,14 +68,16 @@ public: optional_device m_ay8910_2; optional_device m_ay8910_cclimber; optional_device m_digitalker; - optional_device m_ppi8255_0; - optional_device m_ppi8255_1; - optional_device m_ppi8255_2; - required_shared_ptr m_spriteram; - required_shared_ptr m_videoram; + optional_device m_ppi8255_0; + optional_device m_ppi8255_1; + optional_device m_ppi8255_2; required_device m_gfxdecode; required_device m_screen; required_device m_palette; + optional_device m_soundlatch; + + required_shared_ptr m_spriteram; + required_shared_ptr m_videoram; optional_shared_ptr m_decrypted_opcodes; int m_bullets_base; @@ -239,7 +243,6 @@ public: DECLARE_DRIVER_INIT(thepitm); DECLARE_DRIVER_INIT(theend); DECLARE_DRIVER_INIT(scramble); - DECLARE_DRIVER_INIT(explorer); DECLARE_DRIVER_INIT(sfx); DECLARE_DRIVER_INIT(atlantis); DECLARE_DRIVER_INIT(scobra); diff --git a/src/mame/includes/galivan.h b/src/mame/includes/galivan.h index 5f098ff890f..feb92f13beb 100644 --- a/src/mame/includes/galivan.h +++ b/src/mame/includes/galivan.h @@ -7,6 +7,7 @@ ***************************************************************************/ #include "includes/nb1414m4.h" +#include "machine/gen_latch.h" #include "video/bufsprite.h" class galivan_state : public driver_device @@ -19,7 +20,8 @@ public: m_maincpu(*this, "maincpu"), m_nb1414m4(*this, "nb1414m4"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr m_videoram; @@ -70,4 +72,5 @@ public: optional_device m_nb1414m4; required_device m_gfxdecode; required_device m_palette; + required_device m_soundlatch; }; diff --git a/src/mame/includes/macrossp.h b/src/mame/includes/macrossp.h index ffcbb5e89f5..09f651b2555 100644 --- a/src/mame/includes/macrossp.h +++ b/src/mame/includes/macrossp.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + /************************************************************************* Macross Plus *************************************************************************/ +#include "machine/gen_latch.h" + class macrossp_state : public driver_device { public: @@ -33,7 +36,8 @@ public: m_audiocpu(*this, "audiocpu"), m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } @@ -71,6 +75,7 @@ public: required_device m_screen; required_device m_gfxdecode; required_device m_palette; + required_device m_soundlatch; DECLARE_READ32_MEMBER(macrossp_soundstatus_r); DECLARE_WRITE32_MEMBER(macrossp_soundcmd_w); diff --git a/src/mame/includes/mario.h b/src/mame/includes/mario.h index b19a4faa211..df80da3d07d 100644 --- a/src/mame/includes/mario.h +++ b/src/mame/includes/mario.h @@ -3,6 +3,7 @@ #ifndef MARIO_H_ #define MARIO_H_ +#include "machine/gen_latch.h" #include "machine/z80dma.h" #define OLD_SOUND (1) @@ -52,6 +53,10 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_z80dma(*this, "z80dma"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), + m_soundlatch3(*this, "soundlatch3"), + m_soundlatch4(*this, "soundlatch4"), #if OLD_SOUND m_discrete(*this, "discrete"), #else @@ -69,6 +74,10 @@ public: required_device m_gfxdecode; required_device m_palette; optional_device m_z80dma; + optional_device m_soundlatch; + optional_device m_soundlatch2; + optional_device m_soundlatch3; + optional_device m_soundlatch4; #if OLD_SOUND optional_device m_discrete; #else diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index e47da64dfaa..ee2dbf233df 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -11,6 +11,7 @@ #include "sound/es8712.h" #include "video/k053936.h" #include "machine/eepromser.h" +#include "machine/gen_latch.h" class metro_state : public driver_device { @@ -30,6 +31,11 @@ public: m_ymsnd(*this, "ymsnd"), m_essnd(*this, "essnd"), m_k053936(*this, "k053936") , + m_eeprom(*this, "eeprom"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_vram_0(*this, "vram_0"), m_vram_1(*this, "vram_1"), m_vram_2(*this, "vram_2"), @@ -45,11 +51,7 @@ public: m_videoregs(*this, "videoregs"), m_screenctrl(*this, "screenctrl"), m_input_sel(*this, "input_sel"), - m_k053936_ram(*this, "k053936_ram"), - m_eeprom(*this, "eeprom"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette") + m_k053936_ram(*this, "k053936_ram") { } /* devices */ @@ -59,6 +61,12 @@ public: optional_device m_ymsnd; // TODO set correct type optional_device m_essnd; optional_device m_k053936; + optional_device m_eeprom; + required_device m_gfxdecode; + required_device m_screen; + required_device m_palette; + optional_device m_soundlatch; + /* memory pointers */ optional_shared_ptr m_vram_0; optional_shared_ptr m_vram_1; @@ -77,11 +85,6 @@ public: optional_shared_ptr m_input_sel; optional_shared_ptr m_k053936_ram; - optional_device m_eeprom; - required_device m_gfxdecode; - required_device m_screen; - required_device m_palette; - int m_flip_screen; /* video-related */ diff --git a/src/mame/includes/midyunit.h b/src/mame/includes/midyunit.h index 9ce2a855954..cdc61bfe2bf 100644 --- a/src/mame/includes/midyunit.h +++ b/src/mame/includes/midyunit.h @@ -7,8 +7,10 @@ **************************************************************************/ +#include "machine/gen_latch.h" #include "cpu/tms34010/tms34010.h" #include "audio/williams.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "sound/okim6295.h" @@ -50,6 +52,7 @@ public: m_narc_sound(*this, "narcsnd"), m_cvsd_sound(*this, "cvsd"), m_adpcm_sound(*this, "adpcm"), + m_soundlatch(*this, "soundlatch"), m_generic_paletteram_16(*this, "paletteram"), m_gfx_rom(*this, "gfx_rom", 16), m_mainram(*this, "mainram"), @@ -62,6 +65,7 @@ public: optional_device m_narc_sound; optional_device m_cvsd_sound; optional_device m_adpcm_sound; + optional_device m_soundlatch; required_shared_ptr m_generic_paletteram_16; optional_shared_ptr m_gfx_rom; diff --git a/src/mame/includes/nbmj8891.h b/src/mame/includes/nbmj8891.h index 0c5969010f6..fcb9f08542b 100644 --- a/src/mame/includes/nbmj8891.h +++ b/src/mame/includes/nbmj8891.h @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + #include "includes/nb1413m3.h" class nbmj8891_state : public driver_device diff --git a/src/mame/includes/nbmj8991.h b/src/mame/includes/nbmj8991.h index 74920f3555f..9142e9a94ef 100644 --- a/src/mame/includes/nbmj8991.h +++ b/src/mame/includes/nbmj8991.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + #include "includes/nb1413m3.h" +#include "machine/gen_latch.h" class nbmj8991_state : public driver_device { @@ -12,6 +14,7 @@ public: m_nb1413m3(*this, "nb1413m3"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_generic_paletteram_8(*this, "paletteram") { } required_device m_maincpu; @@ -19,6 +22,7 @@ public: required_device m_nb1413m3; required_device m_screen; required_device m_palette; + optional_device m_soundlatch; required_shared_ptr m_generic_paletteram_8; diff --git a/src/mame/includes/nbmj9195.h b/src/mame/includes/nbmj9195.h index ec36eb8f168..6020b56fab7 100644 --- a/src/mame/includes/nbmj9195.h +++ b/src/mame/includes/nbmj9195.h @@ -7,6 +7,7 @@ ******************************************************************************/ #include "cpu/z80/tmpz84c011.h" +#include "machine/gen_latch.h" #include "sound/dac.h" #define VRAM_MAX 2 @@ -30,6 +31,7 @@ public: m_dac2(*this, "dac2"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_palette_ptr(*this, "paletteram") { } @@ -38,6 +40,7 @@ public: required_device m_dac2; required_device m_screen; required_device m_palette; + required_device m_soundlatch; optional_shared_ptr m_palette_ptr; //shabdama doesn't use it at least for now diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index e5f0ffaa303..77f692d2740 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -10,6 +10,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "sound/2610intf.h" +#include "machine/gen_latch.h" #include "machine/upd1990a.h" #include "machine/ng_memcard.h" #include "video/neogeo_spr.h" @@ -38,6 +39,8 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette"), m_memcard(*this, "memcard"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_region_maincpu(*this, "maincpu"), m_region_sprites(*this, "sprites"), m_region_fixed(*this, "fixed"), @@ -125,6 +128,8 @@ protected: required_device m_screen; optional_device m_palette; optional_device m_memcard; + required_device m_soundlatch; + required_device m_soundlatch2; // memory optional_memory_region m_region_maincpu; diff --git a/src/mame/includes/niyanpai.h b/src/mame/includes/niyanpai.h index 2115240a0da..4461b7b36c5 100644 --- a/src/mame/includes/niyanpai.h +++ b/src/mame/includes/niyanpai.h @@ -1,7 +1,10 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + #include "sound/dac.h" +#include "machine/gen_latch.h" #include "machine/tmp68301.h" + #define VRAM_MAX 3 class niyanpai_state : public driver_device @@ -19,7 +22,8 @@ public: m_dac1(*this, "dac1"), m_dac2(*this, "dac2"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_device m_maincpu; required_device m_tmp68301; @@ -27,6 +31,7 @@ public: required_device m_dac2; required_device m_screen; required_device m_palette; + required_device m_soundlatch; // common int m_scrollx[VRAM_MAX]; diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h index c2e20116e50..5ec3b51de31 100644 --- a/src/mame/includes/nmk16.h +++ b/src/mame/includes/nmk16.h @@ -1,9 +1,11 @@ // license:BSD-3-Clause // copyright-holders:Mirko Buffoni,Nicola Salmoria,Bryan McPhail,David Haywood,R. Belmont,Alex Marshall,Angelo Salese,Luca Elia // thanks-to:Richard Bush + #include "machine/nmk112.h" #include "sound/okim6295.h" #include "machine/nmk004.h" +#include "machine/gen_latch.h" class nmk16_state : public driver_device { @@ -14,6 +16,10 @@ public: m_audiocpu(*this, "audiocpu"), m_oki1(*this, "oki1"), m_oki2(*this, "oki2"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_nmk004(*this, "nmk004"), + m_soundlatch(*this, "soundlatch"), m_nmk_bgvideoram0(*this, "nmk_bgvideoram0"), m_nmk_txvideoram(*this, "nmk_txvideoram"), m_mainram(*this, "mainram"), @@ -26,9 +32,6 @@ public: m_nmk_bgvideoram3(*this, "nmk_bgvideoram3"), m_afega_scroll_0(*this, "afega_scroll_0"), m_afega_scroll_1(*this, "afega_scroll_1"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_nmk004(*this, "nmk004"), m_sprdma_base(0x8000) {} @@ -36,6 +39,11 @@ public: optional_device m_audiocpu; optional_device m_oki1; optional_device m_oki2; + required_device m_gfxdecode; + required_device m_palette; + optional_device m_nmk004; + optional_device m_soundlatch; + required_shared_ptr m_nmk_bgvideoram0; optional_shared_ptr m_nmk_txvideoram; required_shared_ptr m_mainram; @@ -48,9 +56,8 @@ public: optional_shared_ptr m_nmk_bgvideoram3; optional_shared_ptr m_afega_scroll_0; optional_shared_ptr m_afega_scroll_1; - required_device m_gfxdecode; - required_device m_palette; - optional_device m_nmk004; + + int m_sprdma_base; int mask[4*2]; int m_simple_scroll; diff --git a/src/mame/includes/sorcerer.h b/src/mame/includes/sorcerer.h index 9e49370b514..fcc64a275df 100644 --- a/src/mame/includes/sorcerer.h +++ b/src/mame/includes/sorcerer.h @@ -15,6 +15,7 @@ #include "sound/wave.h" #include "machine/ay31015.h" #include "bus/centronics/ctronics.h" +#include "bus/rs232/rs232.h" #include "machine/ram.h" #include "imagedev/cassette.h" #include "imagedev/snapquik.h" @@ -25,7 +26,8 @@ #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#define SORCERER_USING_RS232 0 +#define ES_CPU_CLOCK (12638000 / 6) +#define ES_UART_CLOCK (ES_CPU_CLOCK / 440) struct cass_data_t { struct { @@ -59,6 +61,7 @@ public: , m_wave1(*this, WAVE_TAG) , m_wave2(*this, WAVE2_TAG) , m_uart(*this, "uart") + , m_rs232(*this, "rs232") , m_centronics(*this, "centronics") , m_cart(*this, "cartslot") , m_ram(*this, RAM_TAG) @@ -77,6 +80,7 @@ public: DECLARE_MACHINE_START(sorcererd); DECLARE_DRIVER_INIT(sorcerer); TIMER_CALLBACK_MEMBER(sorcerer_cassette_tc); + TIMER_CALLBACK_MEMBER(sorcerer_serial_tc); TIMER_CALLBACK_MEMBER(sorcerer_reset); DECLARE_SNAPSHOT_LOAD_MEMBER( sorcerer ); DECLARE_QUICKLOAD_LOAD_MEMBER( sorcerer); @@ -98,6 +102,7 @@ private: required_device m_wave1; required_device m_wave2; required_device m_uart; + required_device m_rs232; required_device m_centronics; required_device m_cart; required_device m_ram; diff --git a/src/mame/includes/sslam.h b/src/mame/includes/sslam.h index c52ee6f3672..ba28d2227c1 100644 --- a/src/mame/includes/sslam.h +++ b/src/mame/includes/sslam.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Pierpaolo Prazzoli, Quench + +#include "machine/gen_latch.h" #include "sound/okim6295.h" class sslam_state : public driver_device @@ -12,6 +14,7 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_bg_tileram(*this, "bg_tileram"), m_md_tileram(*this, "md_tileram"), m_tx_tileram(*this, "tx_tileram"), @@ -24,6 +27,7 @@ public: required_device m_oki; required_device m_gfxdecode; required_device m_palette; + optional_device m_soundlatch; required_shared_ptr m_bg_tileram; optional_shared_ptr m_md_tileram; diff --git a/src/mame/includes/terracre.h b/src/mame/includes/terracre.h index d055fa142a5..ba82b080442 100644 --- a/src/mame/includes/terracre.h +++ b/src/mame/includes/terracre.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Carlos A. Lozano + +#include "machine/gen_latch.h" #include "video/bufsprite.h" class terracre_state : public driver_device @@ -11,6 +13,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_spriteram(*this, "spriteram"), + m_soundlatch(*this, "soundlatch"), m_bg_videoram(*this, "bg_videoram"), m_fg_videoram(*this, "fg_videoram") { } @@ -18,6 +21,7 @@ public: required_device m_gfxdecode; required_device m_palette; required_device m_spriteram; + required_device m_soundlatch; required_shared_ptr m_bg_videoram; required_shared_ptr m_fg_videoram; diff --git a/src/mame/includes/zodiack.h b/src/mame/includes/zodiack.h index 2497ecb3651..064db79a60c 100644 --- a/src/mame/includes/zodiack.h +++ b/src/mame/includes/zodiack.h @@ -1,7 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Zsolt Vasvari + #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" class zodiack_state : public driver_device { @@ -10,13 +12,14 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_videoram_2(*this, "videoram_2"), m_attributeram(*this, "attributeram"), m_spriteram(*this, "spriteram"), - m_bulletsram(*this, "bulletsram"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_bulletsram(*this, "bulletsram") { } // in drivers/zodiack.c @@ -37,6 +40,9 @@ public: // devices required_device m_maincpu; required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_soundlatch; // shared pointers required_shared_ptr m_videoram; @@ -45,9 +51,6 @@ public: required_shared_ptr m_spriteram; required_shared_ptr m_bulletsram; - required_device m_gfxdecode; - required_device m_palette; - // state tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; diff --git a/src/mame/machine/dec_lk201.cpp b/src/mame/machine/dec_lk201.cpp index a25facd0e67..d120e3ff46a 100644 --- a/src/mame/machine/dec_lk201.cpp +++ b/src/mame/machine/dec_lk201.cpp @@ -202,7 +202,7 @@ ADDRESS_MAP_END //------------------------------------------------- static MACHINE_CONFIG_FRAGMENT( lk201 ) - MCFG_CPU_ADD(LK201_CPU_TAG, M68HC05EG, 2000000) // actually 68HC05C4 + MCFG_CPU_ADD(LK201_CPU_TAG, M68HC05EG, 4000000) // actually 68HC05C4, clock verified by Lord_Nightmare MCFG_CPU_PROGRAM_MAP(lk201_map) MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp index 80d4c8efb5c..8c18d64fecb 100644 --- a/src/mame/machine/midyunit.cpp +++ b/src/mame/machine/midyunit.cpp @@ -8,7 +8,6 @@ **************************************************************************/ #include "emu.h" -#include "cpu/tms34010/tms34010.h" #include "cpu/m6809/m6809.h" #include "includes/midyunit.h" @@ -603,7 +602,7 @@ WRITE16_MEMBER(midyunit_state::midyunit_sound_w) break; case SOUND_YAWDIM: - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); break; } diff --git a/src/mame/machine/sorcerer.cpp b/src/mame/machine/sorcerer.cpp index 651abf5a514..b64c86eae9a 100644 --- a/src/mame/machine/sorcerer.cpp +++ b/src/mame/machine/sorcerer.cpp @@ -9,24 +9,22 @@ #include "includes/sorcerer.h" #include "machine/z80bin.h" -#if SORCERER_USING_RS232 - -/* The serial code (which was never connected to the outside) is disabled for now. */ /* timer for sorcerer serial chip transmit and receive */ TIMER_CALLBACK_MEMBER(sorcerer_state::sorcerer_serial_tc) { /* if rs232 is enabled, uart is connected to clock defined by bit6 of port fe. - Transmit and receive clocks are connected to the same clock */ + Transmit and receive clocks are connected to the same clock. */ /* if rs232 is disabled, receive clock is linked to cassette hardware */ - if (m_fe & 0x80) + if BIT(m_fe, 7) { /* connect to rs232 */ + m_rs232->write_txd(m_uart->get_output_pin(AY31015_SO)); + m_uart->set_input_pin(AY31015_SI, m_rs232->rxd_r()); } } -#endif void sorcerer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) @@ -34,9 +32,7 @@ void sorcerer_state::device_timer(emu_timer &timer, device_timer_id id, int para switch (id) { case TIMER_SERIAL: -#if SORCERER_USING_RS232 sorcerer_serial_tc(ptr, param); -#endif break; case TIMER_CASSETTE: sorcerer_cassette_tc(ptr, param); @@ -181,9 +177,7 @@ WRITE8_MEMBER(sorcerer_state::sorcerer_fe_w) if (!BIT(data, 7)) // cassette operations { -#if SORCERER_USING_RS232 m_serial_timer->adjust(attotime::zero); -#endif bool sound = BIT(m_iop_config->read(), 3); @@ -202,23 +196,21 @@ WRITE8_MEMBER(sorcerer_state::sorcerer_fe_w) (BIT(data,5)) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); if (data & 0x30) - m_cassette_timer->adjust(attotime::zero, 0, attotime::from_hz(19200)); + m_cassette_timer->adjust(attotime::zero, 0, attotime::from_hz(ES_UART_CLOCK*4)); else m_cassette_timer->adjust(attotime::zero); } -#if SORCERER_USING_RS232 else { - m_serial_timer->adjust(attotime::zero, 0, attotime::from_hz(19200)); + m_serial_timer->adjust(attotime::zero, 0, attotime::from_hz(ES_UART_CLOCK*4)); m_cassette_timer->adjust(attotime::zero); } -#endif // bit 6 baud rate */ if (BIT(changed_bits, 6)) { - m_uart->set_receiver_clock(BIT(data, 6) ? 19200.0 : 4800.0); - m_uart->set_transmitter_clock(BIT(data, 6) ? 19200.0 : 4800.0); + m_uart->set_receiver_clock(BIT(data, 6) ? ES_UART_CLOCK*4 : ES_UART_CLOCK); + m_uart->set_transmitter_clock(BIT(data, 6) ? ES_UART_CLOCK*4 : ES_UART_CLOCK); } } @@ -349,9 +341,7 @@ SNAPSHOT_LOAD_MEMBER( sorcerer_state,sorcerer) void sorcerer_state::machine_start() { m_cassette_timer = timer_alloc(TIMER_CASSETTE); -#if SORCERER_USING_RS232 m_serial_timer = timer_alloc(TIMER_SERIAL); -#endif UINT16 endmem = 0xbfff; @@ -379,9 +369,7 @@ void sorcerer_state::machine_start() MACHINE_START_MEMBER(sorcerer_state,sorcererd) { m_cassette_timer = timer_alloc(TIMER_CASSETTE); -#if SORCERER_USING_RS232 m_serial_timer = timer_alloc(TIMER_SERIAL); -#endif UINT16 endmem = 0xbbff; @@ -455,7 +443,7 @@ QUICKLOAD_LOAD_MEMBER( sorcerer_state, sorcerer ) C858 = an autorun basic program will have this exec address on the tape C3DD = part of basic that displays READY and lets user enter input */ - if ((start_address == 0x1d5) || (execute_address == 0xc858)) + if (((start_address == 0x1d5) || (execute_address == 0xc858)) && (space.read_byte(0xdffa) == 0xc3)) { UINT8 i; static const UINT8 data[]={ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index fcd4d5a61cc..ad2cb00fcb8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -2017,6 +2017,7 @@ abattle // Sidam abattle2 // Sidam acombat // bootleg acombat3 // bootleg +acombat4 // bootleg acombato // bootleg afire // Rene Pierre astrof // (c) [1980?] @@ -2328,8 +2329,8 @@ atmtb2 // @source:atom.cpp atom // 1979 Acorn Atom -atombb // 1979 Acorn Atom -atomeb // 1979 Acorn Atom +atombb // 1982 Acorn Atom with BBC Basic +atomeb // 1979 Acorn Atom with Eprom Box @source:atpci.cpp at586 // 19?? AT 586 @@ -14542,6 +14543,14 @@ isbc2861 // isbc86 // rpc86 // +@source:isbc8010.cpp +isbc8010 // +isbc8010a // +isbc8010b // + +@source:isbc8030.cpp +isbc8030 // + @source:iskr103x.cpp iskr1030m // iskr1031 // @@ -28125,8 +28134,11 @@ vtenis2c // 2001.10 Virtua Tennis 2 / Power Smash 2 (Rev vtennis // 1999.12 Virtua Tennis / Power Smash (cartridge) vtennis2 // 2001.08.27 Virtua Tennis 2 / Power Smash 2 (GD-ROM) vtennisg // 1999.?? Virtua Tennis / Power Smash (GD-ROM) +wccf116 // 2003.?? World Club Champion Football Serie A 2001-2002 Ver. 2 +wccf1dup // 2002.?? World Club Champion Football Serie A 2001-2002 DIMM FIRM Ver.3.03 wccf212e // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.12 wccf234j // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.34 +wccf2chk // 2004.?? World Club Champion Football Serie A 2002-2003 Drive Checker wccf310j // 2005.06 World Club Champion Football European Clubs 2004-2005 wccf322e // 2005.11 World Club Champion Football European Clubs 2004-2005 Ver.3.22 wccf331e // 2005.06 World Club Champion Football European Clubs 2004-2005 Ver.1.1 @@ -33969,12 +33981,14 @@ sun2_50 // sun3_110 // sun3_150 // sun3_260 // -sun3_460 // sun3_50 // sun3_60 // -sun3_80 // sun3_e // +@source:sun3x.cpp +sun3_80 // +sun3_460 // + @source:sun4.cpp sun_s10 // sun_s20 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 935d993d3ef..0ade039ea54 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -265,6 +265,8 @@ iq151.cpp iris3130.cpp irisha.cpp isbc.cpp +isbc8010.cpp +isbc8030.cpp iskr103x.cpp itt3030.cpp jade.cpp @@ -545,6 +547,7 @@ studio2.cpp sun1.cpp sun2.cpp sun3.cpp +sun3x.cpp sun4.cpp super6.cpp super80.cpp diff --git a/src/mame/video/model1.cpp b/src/mame/video/model1.cpp index 2a4a192d039..b22d6f67410 100644 --- a/src/mame/video/model1.cpp +++ b/src/mame/video/model1.cpp @@ -1303,12 +1303,13 @@ void model1_state::tgp_render(bitmap_rgb32 &bitmap, const rectangle &cliprect) for (;;) { int type = (list[1] << 16) | list[0]; m_glist = list; - switch (type & 15) + switch (type) { case 0: list += 2; break; case 1: + case 0x41: // 1 = plane 1 // 2 = ?? draw object (413d3, 17c4c, e) // 3 = plane 2 @@ -1463,6 +1464,7 @@ void model1_state::tgp_scan() list += 2; break; case 1: + case 0x41: list += 8; break; case 2: diff --git a/src/mame/video/powervr2.cpp b/src/mame/video/powervr2.cpp index b4cade60de7..0c31ce84e22 100644 --- a/src/mame/video/powervr2.cpp +++ b/src/mame/video/powervr2.cpp @@ -1024,7 +1024,7 @@ WRITE32_MEMBER( powervr2_device::startrender_w ) } // printf("ISP START %d %d\n",sanitycount,m_screen->vpos()); /* Fire ISP irq after a set amount of time TODO: timing of this */ - endofrender_timer_isp->adjust(state->m_maincpu->cycles_to_attotime(sanitycount*25)); + endofrender_timer_isp->adjust(state->m_maincpu->cycles_to_attotime(sanitycount*25 + 500000)); // hacky end of render delay for Capcom games, otherwise they works at ~1/10 speed break; } } diff --git a/src/osd/modules/debugger/debugimgui.cpp b/src/osd/modules/debugger/debugimgui.cpp index dbd64b939ec..25f6938f4fa 100644 --- a/src/osd/modules/debugger/debugimgui.cpp +++ b/src/osd/modules/debugger/debugimgui.cpp @@ -31,6 +31,7 @@ public: type(0), ofs_x(0), ofs_y(0), + is_collapsed(false), exec_cmd(false) { this->view = machine.debug_view().alloc_view(type, nullptr, this); @@ -72,6 +73,7 @@ public: float view_width; float view_height; bool has_focus; + bool is_collapsed; bool exec_cmd; // console only int src_sel; char console_input[512]; @@ -259,47 +261,16 @@ void debug_imgui::handle_keys() { ImGuiIO& io = ImGui::GetIO(); ui_event event; + debug_area* focus_view = nullptr; - // global keys - if(m_machine->input().code_pressed_once(KEYCODE_F3)) - { - if(m_machine->input().code_pressed(KEYCODE_LSHIFT)) - m_machine->schedule_hard_reset(); - else - { - m_machine->schedule_soft_reset(); - debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); - } - } + // find view that has focus (should only be one at a time) + for(std::vector::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr) + if((*view_ptr)->has_focus) + focus_view = *view_ptr; - if(m_machine->input().code_pressed_once(KEYCODE_F5)) - { - debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); - m_running = true; - } - if(m_machine->input().code_pressed_once(KEYCODE_F6)) - { - debug_cpu_get_visible_cpu(*m_machine)->debug()->go_next_device(); - m_running = true; - } - if(m_machine->input().code_pressed_once(KEYCODE_F7)) - { - debug_cpu_get_visible_cpu(*m_machine)->debug()->go_interrupt(); - m_running = true; - } - if(m_machine->input().code_pressed_once(KEYCODE_F8)) - debug_cpu_get_visible_cpu(*m_machine)->debug()->go_vblank(); - if(m_machine->input().code_pressed_once(KEYCODE_F9)) - debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_out(); - if(m_machine->input().code_pressed_once(KEYCODE_F10)) - debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_over(); - if(m_machine->input().code_pressed_once(KEYCODE_F11)) - debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step(); - if(m_machine->input().code_pressed_once(KEYCODE_F12)) - { - debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); - m_hide = true; - } + // check views in main views also (only the disassembler view accepts inputs) + if(view_main_disasm->has_focus) + focus_view = view_main_disasm; if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) io.KeyCtrl = true; @@ -329,21 +300,64 @@ void debug_imgui::handle_keys() { case UI_EVENT_CHAR: m_key_char = event.ch; + if(focus_view != nullptr) + focus_view->view->process_char(m_key_char); return; default: break; } } - if(ImGui::IsKeyPressed(ITEM_ID_D) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) + // global keys + if(ImGui::IsKeyPressed(ITEM_ID_F3,false)) + { + if(ImGui::IsKeyDown(ITEM_ID_LSHIFT)) + m_machine->schedule_hard_reset(); + else + { + m_machine->schedule_soft_reset(); + debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); + } + } + + if(ImGui::IsKeyPressed(ITEM_ID_F5,false)) + { + debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); + m_running = true; + } + if(ImGui::IsKeyPressed(ITEM_ID_F6,false)) + { + debug_cpu_get_visible_cpu(*m_machine)->debug()->go_next_device(); + m_running = true; + } + if(ImGui::IsKeyPressed(ITEM_ID_F7,false)) + { + debug_cpu_get_visible_cpu(*m_machine)->debug()->go_interrupt(); + m_running = true; + } + if(ImGui::IsKeyPressed(ITEM_ID_F8,false)) + debug_cpu_get_visible_cpu(*m_machine)->debug()->go_vblank(); + if(ImGui::IsKeyPressed(ITEM_ID_F9,false)) + debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_out(); + if(ImGui::IsKeyPressed(ITEM_ID_F10,false)) + debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_over(); + if(ImGui::IsKeyPressed(ITEM_ID_F11,false)) + debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step(); + if(ImGui::IsKeyPressed(ITEM_ID_F12,false)) + { + debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); + m_hide = true; + } + + if(ImGui::IsKeyPressed(ITEM_ID_D,false) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) add_disasm(++m_win_count); - if(ImGui::IsKeyPressed(ITEM_ID_M) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) + if(ImGui::IsKeyPressed(ITEM_ID_M,false) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) add_memory(++m_win_count); - if(ImGui::IsKeyPressed(ITEM_ID_B) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) + if(ImGui::IsKeyPressed(ITEM_ID_B,false) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) add_bpoints(++m_win_count); - if(ImGui::IsKeyPressed(ITEM_ID_W) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) + if(ImGui::IsKeyPressed(ITEM_ID_W,false) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) add_wpoints(++m_win_count); - if(ImGui::IsKeyPressed(ITEM_ID_L) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) + if(ImGui::IsKeyPressed(ITEM_ID_L,false) && ImGui::IsKeyDown(ITEM_ID_LCONTROL)) add_log(++m_win_count); } @@ -365,38 +379,38 @@ void debug_imgui::handle_keys_views() return; // pass keypresses to debug view with focus - if(m_machine->input().code_pressed_once(KEYCODE_UP)) + if(ImGui::IsKeyPressed(ITEM_ID_UP)) focus_view->view->process_char(DCH_UP); - if(m_machine->input().code_pressed_once(KEYCODE_DOWN)) + if(ImGui::IsKeyPressed(ITEM_ID_DOWN)) focus_view->view->process_char(DCH_DOWN); - if(m_machine->input().code_pressed_once(KEYCODE_LEFT)) + if(ImGui::IsKeyPressed(ITEM_ID_LEFT)) { - if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) + if(ImGui::IsKeyDown(ITEM_ID_LCONTROL)) focus_view->view->process_char(DCH_CTRLLEFT); else focus_view->view->process_char(DCH_LEFT); } - if(m_machine->input().code_pressed_once(KEYCODE_RIGHT)) + if(ImGui::IsKeyPressed(ITEM_ID_RIGHT)) { - if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) + if(ImGui::IsKeyDown(ITEM_ID_LCONTROL)) focus_view->view->process_char(DCH_CTRLRIGHT); else focus_view->view->process_char(DCH_RIGHT); } - if(m_machine->input().code_pressed_once(KEYCODE_PGUP)) + if(ImGui::IsKeyPressed(ITEM_ID_PGUP)) focus_view->view->process_char(DCH_PUP); - if(m_machine->input().code_pressed_once(KEYCODE_PGDN)) + if(ImGui::IsKeyPressed(ITEM_ID_PGDN)) focus_view->view->process_char(DCH_PDOWN); - if(m_machine->input().code_pressed_once(KEYCODE_HOME)) + if(ImGui::IsKeyPressed(ITEM_ID_HOME)) { - if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) + if(ImGui::IsKeyDown(ITEM_ID_LCONTROL)) focus_view->view->process_char(DCH_CTRLHOME); else focus_view->view->process_char(DCH_HOME); } - if(m_machine->input().code_pressed_once(KEYCODE_END)) + if(ImGui::IsKeyPressed(ITEM_ID_END)) { - if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) + if(ImGui::IsKeyDown(ITEM_ID_LCONTROL)) focus_view->view->process_char(DCH_CTRLEND); else focus_view->view->process_char(DCH_END); @@ -554,12 +568,15 @@ void debug_imgui::draw_bpoints(debug_area* view_ptr, bool* opened) ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once); if(ImGui::Begin(view_ptr->title.c_str(),opened)) { + view_ptr->is_collapsed = false; ImGui::BeginChild("##break_output", ImVec2(ImGui::GetWindowWidth() - 16,ImGui::GetWindowHeight() - ImGui::GetTextLineHeight() - ImGui::GetCursorPosY())); // account for title bar and widgets already drawn draw_view(view_ptr,false); ImGui::EndChild(); ImGui::End(); } + else + view_ptr->is_collapsed = true; } void debug_imgui::add_bpoints(int id) @@ -597,12 +614,15 @@ void debug_imgui::draw_log(debug_area* view_ptr, bool* opened) ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once); if(ImGui::Begin(view_ptr->title.c_str(),opened)) { + view_ptr->is_collapsed = false; ImGui::BeginChild("##log_output", ImVec2(ImGui::GetWindowWidth() - 16,ImGui::GetWindowHeight() - ImGui::GetTextLineHeight() - ImGui::GetCursorPosY())); // account for title bar and widgets already drawn draw_view(view_ptr,false); ImGui::EndChild(); ImGui::End(); } + else + view_ptr->is_collapsed = true; } void debug_imgui::add_log(int id) @@ -631,6 +651,7 @@ void debug_imgui::draw_disasm(debug_area* view_ptr, bool* opened) bool done = false; bool exp_change = false; + view_ptr->is_collapsed = false; if(ImGui::BeginMenuBar()) { if(ImGui::BeginMenu("Options")) @@ -685,6 +706,8 @@ void debug_imgui::draw_disasm(debug_area* view_ptr, bool* opened) ImGui::End(); } + else + view_ptr->is_collapsed = true; } void debug_imgui::add_disasm(int id) @@ -715,6 +738,7 @@ void debug_imgui::draw_memory(debug_area* view_ptr, bool* opened) bool done = false; bool exp_change = false; + view_ptr->is_collapsed = false; if(ImGui::BeginMenuBar()) { if(ImGui::BeginMenu("Options")) @@ -793,6 +817,8 @@ void debug_imgui::draw_memory(debug_area* view_ptr, bool* opened) ImGui::End(); } + else + view_ptr->is_collapsed = true; } void debug_imgui::add_memory(int id) @@ -879,20 +905,11 @@ void debug_imgui::draw_console() } ImGui::Separator(); // list all extra windows, so we can un-collapse the windows if necessary - //debug_area* view_ptr; for(std::vector::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr) { - bool collapsed; - if(ImGui::Begin((*view_ptr)->title.c_str())) - { - collapsed = false; - ImGui::End(); - } - else - { + bool collapsed = false; + if((*view_ptr)->is_collapsed) collapsed = true; - ImGui::End(); - } if(ImGui::MenuItem((*view_ptr)->title.c_str(), nullptr,!collapsed)) ImGui::SetWindowCollapsed((*view_ptr)->title.c_str(),false); } @@ -1004,6 +1021,7 @@ void debug_imgui::init_debugger(running_machine &machine) if(strcmp(downcast(m_machine->options()).video(),"bgfx") != 0) fatalerror("Error: ImGui debugger requires the BGFX renderer.\n"); + // map keys to ImGui inputs io.KeyMap[ImGuiKey_A] = ITEM_ID_A; io.KeyMap[ImGuiKey_C] = ITEM_ID_C; io.KeyMap[ImGuiKey_V] = ITEM_ID_V; @@ -1025,6 +1043,10 @@ void debug_imgui::init_debugger(running_machine &machine) io.KeyMap[ImGuiKey_UpArrow] = ITEM_ID_UP; io.KeyMap[ImGuiKey_DownArrow] = ITEM_ID_DOWN; + // set key delay and repeat rates + io.KeyRepeatDelay = 0.400f; + io.KeyRepeatRate = 0.050f; + font_name = (downcast(m_machine->options()).debugger_font()); font_size = (downcast(m_machine->options()).debugger_font_size()); diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index a709a9a8c52..61aec1b49d3 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -255,6 +255,7 @@ void osd_common_t::register_options() REGISTER_MODULE(m_mod_man, OUTPUT_NONE); REGISTER_MODULE(m_mod_man, OUTPUT_CONSOLE); REGISTER_MODULE(m_mod_man, OUTPUT_NETWORK); + REGISTER_MODULE(m_mod_man, OUTPUT_WIN32); // after initialization we know which modules are supported @@ -321,9 +322,6 @@ void osd_common_t::register_options() // Register video options and update options video_options_add("none", nullptr); -#if USE_OPENGL - video_options_add("opengl", nullptr); -#endif video_register(); update_option(OSDOPTION_VIDEO, m_video_names); } @@ -643,6 +641,7 @@ void osd_common_t::init_subsystems() m_midi = select_module_options(options(), OSD_MIDI_PROVIDER); m_output = select_module_options(options(), OSD_OUTPUT_PROVIDER); + m_output->set_machine(&machine()); machine().output().set_notifier(nullptr, output_notifier_callback, this); m_mod_man.init(options()); diff --git a/src/osd/modules/output/network.cpp b/src/osd/modules/output/network.cpp index 081e721ae19..712d0d4c6c5 100644 --- a/src/osd/modules/output/network.cpp +++ b/src/osd/modules/output/network.cpp @@ -67,7 +67,12 @@ public: // output_module - virtual void notify(const char *outname, INT32 value) override { m_server->send_to_all((const uint8_t*)outname, strlen(outname)); } + virtual void notify(const char *outname, INT32 value) override + { + static char buf[256]; + sprintf(buf, "%s = %d\n", ((outname==nullptr) ? "none" : outname), value); + m_server->send_to_all((const uint8_t*)buf, strlen(buf)); + } // implementation void process_output() diff --git a/src/osd/modules/output/output_module.h b/src/osd/modules/output/output_module.h index 81fcaae2cce..f3461d3e1f6 100644 --- a/src/osd/modules/output/output_module.h +++ b/src/osd/modules/output/output_module.h @@ -20,11 +20,16 @@ class output_module { public: - output_module() { } + output_module(): m_machine(nullptr) { } virtual ~output_module() { } virtual void notify(const char *outname, INT32 value) = 0; + + void set_machine(running_machine *machine) { m_machine = machine; }; + running_machine &machine() const { return *m_machine; } +private: + running_machine *m_machine; }; #endif /* OUTPUT_MODULE_H_ */ diff --git a/src/osd/modules/output/win32_output.cpp b/src/osd/modules/output/win32_output.cpp new file mode 100644 index 00000000000..2525dfa2bb9 --- /dev/null +++ b/src/osd/modules/output/win32_output.cpp @@ -0,0 +1,340 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +//============================================================ +// +// output.c - Win32 implementation of MAME output routines +// +//============================================================ + +#include "output_module.h" +#include "modules/osdmodule.h" +#include "modules/lib/osdobj_common.h" + +#if defined(OSD_WINDOWS) + +// standard windows headers +#define WIN32_LEAN_AND_MEAN +#include + +// MAME headers +#include "emu.h" +#include "winmain.h" + +#include "winutil.h" +#include "win32_output.h" + + +//============================================================ +// CONSTANTS +//============================================================ + +// window styles +#define WINDOW_STYLE WS_OVERLAPPEDWINDOW +#define WINDOW_STYLE_EX 0 + + + +//============================================================ +// TYPEDEFS +//============================================================ + +struct registered_client +{ + registered_client * next; // next client in the list + LPARAM id; // client-specified ID + HWND hwnd; // client HWND + running_machine * machine; +}; + + +// message IDs +static UINT om_mame_start; +static UINT om_mame_stop; +static UINT om_mame_update_state; +static UINT om_mame_register_client; +static UINT om_mame_unregister_client; +static UINT om_mame_get_id_string; + + + +//============================================================ +// FUNCTION PROTOTYPES +//============================================================ + +static LRESULT CALLBACK output_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam); + +class output_win32 : public osd_module, public output_module +{ +public: + output_win32() + : osd_module(OSD_OUTPUT_PROVIDER, "windows"), output_module() + { + } + virtual ~output_win32() { } + + virtual int init(const osd_options &options) override; + virtual void exit() override; + + // output_module + + virtual void notify(const char *outname, INT32 value) override; + + int create_window_class(void); + LRESULT register_client(HWND hwnd, LPARAM id); + LRESULT unregister_client(HWND hwnd, LPARAM id); + LRESULT send_id_string(HWND hwnd, LPARAM id); + +private: + // our HWND + HWND m_output_hwnd; + + // client list + registered_client * m_clientlist; + +}; + + +//============================================================ +// output_init +//============================================================ + +int output_win32::init(const osd_options &options) +{ + int result; + + // reset globals + m_clientlist = nullptr; + + // create our window class + result = create_window_class(); + assert(result == 0); + (void)result; // to silence gcc 4.6 + + // create a window + m_output_hwnd = CreateWindowEx( + WINDOW_STYLE_EX, + OUTPUT_WINDOW_CLASS, + OUTPUT_WINDOW_NAME, + WINDOW_STYLE, + 0, 0, + 1, 1, + nullptr, + nullptr, + GetModuleHandleUni(), + nullptr); + assert(m_output_hwnd != nullptr); + + // set a pointer to the running machine + SetWindowLongPtr(m_output_hwnd, GWLP_USERDATA, (LONG_PTR)this); + + // allocate message ids + om_mame_start = RegisterWindowMessage(OM_MAME_START); + assert(om_mame_start != 0); + om_mame_stop = RegisterWindowMessage(OM_MAME_STOP); + assert(om_mame_stop != 0); + om_mame_update_state = RegisterWindowMessage(OM_MAME_UPDATE_STATE); + assert(om_mame_update_state != 0); + + om_mame_register_client = RegisterWindowMessage(OM_MAME_REGISTER_CLIENT); + assert(om_mame_register_client != 0); + om_mame_unregister_client = RegisterWindowMessage(OM_MAME_UNREGISTER_CLIENT); + assert(om_mame_unregister_client != 0); + om_mame_get_id_string = RegisterWindowMessage(OM_MAME_GET_ID_STRING); + assert(om_mame_get_id_string != 0); + + // broadcast a startup message + PostMessage(HWND_BROADCAST, om_mame_start, (WPARAM)m_output_hwnd, 0); + + return 0; +} + + +//============================================================ +// output_exit +//============================================================ + +void output_win32::exit() +{ + // free all the clients + while (m_clientlist != nullptr) + { + registered_client *temp = m_clientlist; + m_clientlist = temp->next; + global_free(temp); + } + + // broadcast a shutdown message + PostMessage(HWND_BROADCAST, om_mame_stop, (WPARAM)m_output_hwnd, 0); +} + + +//============================================================ +// create_window_class +//============================================================ + +int output_win32::create_window_class(void) +{ + static UINT8 classes_created = FALSE; + + /* only do this once */ + if (!classes_created) + { + WNDCLASS wc = { 0 }; + + // initialize the description of the window class + wc.lpszClassName = OUTPUT_WINDOW_CLASS; + wc.hInstance = GetModuleHandleUni(); + wc.lpfnWndProc = output_window_proc; + + UnregisterClass(wc.lpszClassName, wc.hInstance); + + // register the class; fail if we can't + if (!RegisterClass(&wc)) + return 1; + classes_created = TRUE; + } + + return 0; +} + + +//============================================================ +// output_window_proc +//============================================================ + +static LRESULT CALLBACK output_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam) +{ + LONG_PTR ptr = GetWindowLongPtr(wnd, GWLP_USERDATA); + output_win32 &output = *(output_win32 *)ptr; + + // register a new client + if (message == om_mame_register_client) + return output.register_client((HWND)wparam, lparam); + + // unregister a client + else if (message == om_mame_unregister_client) + return output.unregister_client((HWND)wparam, lparam); + + // get a string for an ID + else if (message == om_mame_get_id_string) + return output.send_id_string((HWND)wparam, lparam); + + else + return DefWindowProc(wnd, message, wparam, lparam); +} + + +//============================================================ +// register_client +//============================================================ + +LRESULT output_win32::register_client(HWND hwnd, LPARAM id) +{ + registered_client **client; + + // find the end of the list; if we find ourself already registered, + // return 1 + for (client = &m_clientlist; *client != nullptr; client = &(*client)->next) + if ((*client)->id == id) + { + (*client)->hwnd = hwnd; + machine().output().notify_all(this); + return 1; + } + + // add us to the end + *client = global_alloc(registered_client); + (*client)->next = nullptr; + (*client)->id = id; + (*client)->hwnd = hwnd; + (*client)->machine = &machine(); + + // request a notification for all outputs + machine().output().notify_all(this); + return 0; +} + + +//============================================================ +// unregister_client +//============================================================ + +LRESULT output_win32::unregister_client(HWND hwnd, LPARAM id) +{ + registered_client **client; + int found = FALSE; + + // find any matching IDs in the list and remove them + for (client = &m_clientlist; *client != nullptr; client = &(*client)->next) + if ((*client)->id == id) + { + registered_client *temp = *client; + *client = (*client)->next; + global_free(temp); + found = TRUE; + break; + } + + // return an error if not found + return found ? 0 : 1; +} + + +//============================================================ +// send_id_string +//============================================================ + +LRESULT output_win32::send_id_string(HWND hwnd, LPARAM id) +{ + COPYDATASTRUCT copydata; + const char *name; + int datalen; + + // id 0 is the name of the game + if (id == 0) + name = machine().system().name; + else + name = machine().output().id_to_name(id); + + // a NULL name is an empty string + if (name == nullptr) + name = ""; + + // allocate memory for the message + datalen = sizeof(copydata_id_string) + strlen(name) + 1; + dynamic_buffer buffer(datalen); + copydata_id_string *temp = (copydata_id_string *)&buffer[0]; + temp->id = id; + strcpy(temp->string, name); + + // reply by using SendMessage with WM_COPYDATA + copydata.dwData = COPYDATA_MESSAGE_ID_STRING; + copydata.cbData = datalen; + copydata.lpData = temp; + SendMessage(hwnd, WM_COPYDATA, (WPARAM)m_output_hwnd, (LPARAM)©data); + + return 0; +} + + +//============================================================ +// notifier_callback +//============================================================ + +void output_win32::notify(const char *outname, INT32 value) +{ + registered_client *client; + // loop over clients and notify them + for (client = m_clientlist; client != nullptr; client = client->next) + { + PostMessage(client->hwnd, om_mame_update_state, client->machine->output().name_to_id(outname), value); + } +} + + + +#else + MODULE_NOT_SUPPORTED(output_win32, OSD_OUTPUT_PROVIDER, "windows") +#endif + +MODULE_DEFINITION(OUTPUT_WIN32, output_win32) diff --git a/src/osd/modules/output/win32_output.h b/src/osd/modules/output/win32_output.h new file mode 100644 index 00000000000..9d71332b44b --- /dev/null +++ b/src/osd/modules/output/win32_output.h @@ -0,0 +1,86 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +//============================================================ +// +// output.h - Win32 implementation of MAME output routines +// +//============================================================ + +#ifndef __WINDOWS_OUTPUT_H__ +#define __WINDOWS_OUTPUT_H__ + + +//============================================================ +// CONSTANTS +//============================================================ + +// window parameters +#define OUTPUT_WINDOW_CLASS TEXT("MAMEOutput") +#define OUTPUT_WINDOW_NAME TEXT("MAMEOutput") + +// +// These messages are sent by MAME: +// + +// OM_MAME_START: broadcast when MAME initializes +// WPARAM = HWND of MAME's output window +// LPARAM = unused +#define OM_MAME_START TEXT("MAMEOutputStart") + +// OM_MAME_STOP: broadcast when MAME shuts down +// WPARAM = HWND of MAME's output window +// LPARAM = unused +#define OM_MAME_STOP TEXT("MAMEOutputStop") + +// OM_MAME_UPDATE_STATE: sent to registered clients when the state +// of an output changes +// WPARAM = ID of the output +// LPARAM = new value for the output +#define OM_MAME_UPDATE_STATE TEXT("MAMEOutputUpdateState") + + +// +// These messages are sent by external clients to MAME: +// + +// OM_MAME_REGISTER_CLIENT: sent to MAME to register a client +// WPARAM = HWND of client's listener window +// LPARAM = client-specified ID (must be unique) +#define OM_MAME_REGISTER_CLIENT TEXT("MAMEOutputRegister") + +// OM_MAME_UNREGISTER_CLIENT: sent to MAME to unregister a client +// WPARAM = HWND of client's listener window +// LPARAM = client-specified ID (must match registration) +#define OM_MAME_UNREGISTER_CLIENT TEXT("MAMEOutputUnregister") + +// OM_MAME_GET_ID_STRING: requests the string associated with a +// given ID. ID=0 is always the name of the game. Other IDs are +// only discoverable from a OM_MAME_UPDATE_STATE message. The +// result will be sent back as a WM_COPYDATA message with MAME's +// output window as the sender, dwData = the ID of the string, +// and lpData pointing to a NULL-terminated string. +// WPARAM = HWND of client's listener window +// LPARAM = ID you wish to know about +#define OM_MAME_GET_ID_STRING TEXT("MAMEOutputGetIDString") + + +// +// These constants are used to identify WM_COPYDATA messages +// coming from MAME: +// + +#define COPYDATA_MESSAGE_ID_STRING 1 + + + +//============================================================ +// TYPE DEFINITIONS +//============================================================ + +struct copydata_id_string +{ + UINT32 id; // ID that was requested + char string[1]; // string array containing the data +}; + +#endif /* __WINDOWS_OUTPUT_H__ */ diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_distortion.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_distortion.sc index d7e1acf8494..be1f6ef43f6 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_distortion.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_distortion.sc @@ -97,19 +97,18 @@ float GetSpotAddend(vec2 coord, float amount) return saturate(SigmoidSpot); } -float GetRoundCornerFactor(vec2 coord, float radiusAmount, float smoothAmount) +float GetRoundCornerFactor(vec2 coord, vec2 bounds, float radiusAmount, float smoothAmount) { // reduce smooth amount down to radius amount smoothAmount = min(smoothAmount, radiusAmount); - vec2 quadDims = (u_swap_xy.x > 0.0) ? u_quad_dims.yx : u_quad_dims.xy; - - float range = min(quadDims.x, quadDims.y) * 0.5; - float radius = range * max(radiusAmount, 0.0025); - float smooth_val = 1.0 / (range * max(smoothAmount, 0.0025)); + float range = min(bounds.x, bounds.y); + float amountMinimum = range > 0.0f ? 1.0f / range : 0.0f; + float radius = range * max(radiusAmount, amountMinimum); + float smooth_val = 1.0f / (range * max(smoothAmount, amountMinimum * 3.0f)); // compute box - float box = roundBox(quadDims * (coord * 2.0f), quadDims, radius); + float box = roundBox(bounds * (coord * 2.0f), bounds, radius); // apply smooth box *= smooth_val; @@ -206,8 +205,11 @@ void main() // Round Corners Simulation vec2 RoundCornerCoord = CornerCoordCentered; + vec2 RoundCornerBounds = (u_swap_xy.x > 0.0) + ? u_quad_dims.yx + : u_quad_dims.xy; - float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, u_round_corner.x, u_smooth_border.x); + float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerBounds, u_round_corner.x * 0.5f, u_smooth_border.x * 0.5f); BaseColor.rgb *= roundCornerFactor; gl_FragColor = BaseColor; diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc index ee2fd0fd148..9d5b99d0546 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc @@ -148,7 +148,13 @@ void main() float ColorBrightness = 0.299 * BaseColor.r + 0.587 * BaseColor.g + 0.114 * BaseColor.b; - float ScanCoord = BaseCoord.y * u_source_dims.y * u_scanline_scale.x * 3.1415927; // PI + float ScanCoord = BaseCoord.y; + ScanCoord += u_quad_dims.y <= u_source_dims.y * 2.0f + ? 0.5f / u_quad_dims.y // uncenter scanlines if the quad is less than twice the size of the source + : 0.0f; + + ScanCoord *= u_source_dims.y * u_scanline_scale.x * 3.1415927; // PI + float ScanCoordJitter = u_scanline_jitter.x * u_jitter_amount.x * 1.618034; // PHI float ScanSine = sin(ScanCoord + ScanCoordJitter); float ScanlineWide = u_scanline_height.x + u_scanline_variation.x * max(1.0, u_scanline_height.x) * (1.0 - ColorBrightness); diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 2864d740bb7..5c1bef296cf 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -722,6 +722,7 @@ void shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *r options->yiq_q = winoptions.screen_yiq_q(); options->yiq_scan_time = winoptions.screen_yiq_scan_time(); options->yiq_phase_count = winoptions.screen_yiq_phase_count(); + options->vector_beam_smooth = winoptions.screen_vector_beam_smooth(); options->vector_length_scale = winoptions.screen_vector_length_scale(); options->vector_length_ratio = winoptions.screen_vector_length_ratio(); options->bloom_blend_mode = winoptions.screen_bloom_blend_mode(); @@ -1524,6 +1525,7 @@ int shaders::vector_pass(d3d_render_target *rt, int source_index, poly_info *pol // curr_effect->set_float("TimeScale", options->vector_time_scale); curr_effect->set_float("LengthRatio", options->vector_length_ratio); curr_effect->set_float("LengthScale", options->vector_length_scale); + curr_effect->set_float("BeamSmooth", options->vector_beam_smooth); blit(rt->target_surface[next_index], true, poly->get_type(), vertnum, poly->get_count()); @@ -2285,7 +2287,8 @@ hlsl_options shaders::last_options = { false }; enum slider_option { - SLIDER_VECTOR_ATT_MAX = 0, + SLIDER_VECTOR_BEAM_SMOOTH = 0, + SLIDER_VECTOR_ATT_MAX, SLIDER_VECTOR_ATT_LEN_MIN, SLIDER_SHADOW_MASK_TILE_MODE, SLIDER_SHADOW_MASK_ALPHA, @@ -2362,6 +2365,7 @@ enum slider_screen_type slider_desc shaders::s_sliders[] = { + { "Vector Beam Smooth Amount", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_VECTOR, SLIDER_VECTOR_BEAM_SMOOTH, 0.01f, "%1.2f", {} }, { "Vector Attenuation Maximum", 0, 50, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_VECTOR, SLIDER_VECTOR_ATT_MAX, 0.01f, "%1.2f", {} }, { "Vector Attenuation Length Minimum", 1, 500, 1000, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_VECTOR, SLIDER_VECTOR_ATT_LEN_MIN, 0.001f, "%1.3f", {} }, { "Shadow Mask Tile Mode", 0, 0, 1, 1, SLIDER_INT_ENUM, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_TILE_MODE, 0, "%s", { "Screen", "Source" } }, @@ -2433,6 +2437,7 @@ void *shaders::get_slider_option(int id, int index) { switch (id) { + case SLIDER_VECTOR_BEAM_SMOOTH: return &(options->vector_beam_smooth); case SLIDER_VECTOR_ATT_MAX: return &(options->vector_length_scale); case SLIDER_VECTOR_ATT_LEN_MIN: return &(options->vector_length_ratio); case SLIDER_SHADOW_MASK_TILE_MODE: return &(options->shadow_mask_tile_mode); diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index abf1e48a549..6f6e31f1933 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -245,6 +245,7 @@ struct hlsl_options int yiq_phase_count; // Vectors + float vector_beam_smooth; float vector_length_scale; float vector_length_ratio; diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index e0966fdbd62..dec0110157a 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -624,6 +624,13 @@ void renderer_bgfx::put_line(float x0, float y0, float x1, float y1, float r, UI dy *= d; } + // create diamond shape for points + else + { + // set distance to unit vector length (1,1) + dx = dy = 0.70710678f; + } + float nx = dy; float ny = -dx; float verts[4 * 3]; diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp index 4490a8c327e..44dd1b10600 100644 --- a/src/osd/modules/render/drawd3d.cpp +++ b/src/osd/modules/render/drawd3d.cpp @@ -41,33 +41,6 @@ enum }; -//============================================================ -// MACROS -//============================================================ - -#define FSWAP(var1, var2) do { float temp = var1; var1 = var2; var2 = temp; } while (0) - - -//============================================================ -// GLOBALS -//============================================================ - -static const line_aa_step line_aa_1step[] = -{ - { 0.00f, 0.00f, 1.00f }, - { 0 } -}; - -static const line_aa_step line_aa_4step[] = -{ - { -0.25f, 0.00f, 0.25f }, - { 0.25f, 0.00f, 0.25f }, - { 0.00f, -0.25f, 0.25f }, - { 0.00f, 0.25f, 0.25f }, - { 0 } -}; - - //============================================================ // INLINES //============================================================ @@ -1388,13 +1361,11 @@ void renderer_d3d9::batch_vectors(int vector_count) { auto win = assert_window(); - windows_options &options = downcast(win->machine().options()); - float quad_width = 0.0f; float quad_height = 0.0f; - int vertex_count = vector_count * (options.antialias() ? 24 : 6); - int triangle_count = vector_count * (options.antialias() ? 8 : 2); + int vertex_count = vector_count * 6; + int triangle_count = vector_count * 2; m_vectorbatch = mesh_alloc(vertex_count); m_batchindex = 0; @@ -1499,71 +1470,103 @@ void renderer_d3d9::batch_vectors(int vector_count) void renderer_d3d9::batch_vector(const render_primitive &prim) { + // get a pointer to the vertex buffer + if (m_vectorbatch == nullptr) + { + return; + } + // compute the effective width based on the direction of the line float effwidth = prim.width; - if (effwidth < 0.5f) + if (effwidth < 2.0f) { - effwidth = 0.5f; + effwidth = 2.0f; } // determine the bounds of a quad to draw this line render_bounds b0, b1; render_line_to_quad(&prim.bounds, effwidth, effwidth, &b0, &b1); - float dx = b1.x1 - b0.x1; - float dy = b1.y1 - b0.y1; - float line_length = sqrtf(dx * dx + dy * dy); + float lx = b1.x1 - b0.x1; + float ly = b1.y1 - b0.y1; + float wx = b1.x1 - b1.x0; + float wy = b1.y1 - b1.y0; + float line_length = sqrtf(lx * lx + ly * ly); + float line_width = sqrtf(wx * wx + wy * wy); - // iterate over AA steps - for (const line_aa_step *step = PRIMFLAG_GET_ANTIALIAS(prim.flags) ? line_aa_4step : line_aa_1step; - step->weight != 0; step++) + m_vectorbatch[m_batchindex + 0].x = b0.x0; + m_vectorbatch[m_batchindex + 0].y = b0.y0; + m_vectorbatch[m_batchindex + 1].x = b0.x1; + m_vectorbatch[m_batchindex + 1].y = b0.y1; + m_vectorbatch[m_batchindex + 2].x = b1.x0; + m_vectorbatch[m_batchindex + 2].y = b1.y0; + + m_vectorbatch[m_batchindex + 3].x = b0.x1; + m_vectorbatch[m_batchindex + 3].y = b0.y1; + m_vectorbatch[m_batchindex + 4].x = b1.x0; + m_vectorbatch[m_batchindex + 4].y = b1.y0; + m_vectorbatch[m_batchindex + 5].x = b1.x1; + m_vectorbatch[m_batchindex + 5].y = b1.y1; + + if (m_shaders->enabled()) { - // get a pointer to the vertex buffer - if (m_vectorbatch == nullptr) - { - return; - } + // procedural generated texture + m_vectorbatch[m_batchindex + 0].u0 = 0.0f; + m_vectorbatch[m_batchindex + 0].v0 = 0.0f; + m_vectorbatch[m_batchindex + 1].u0 = 0.0f; + m_vectorbatch[m_batchindex + 1].v0 = 1.0f; + m_vectorbatch[m_batchindex + 2].u0 = 1.0f; + m_vectorbatch[m_batchindex + 2].v0 = 0.0f; - m_vectorbatch[m_batchindex + 0].x = b0.x0 + step->xoffs; - m_vectorbatch[m_batchindex + 0].y = b0.y0 + step->yoffs; - m_vectorbatch[m_batchindex + 1].x = b0.x1 + step->xoffs; - m_vectorbatch[m_batchindex + 1].y = b0.y1 + step->yoffs; - m_vectorbatch[m_batchindex + 2].x = b1.x0 + step->xoffs; - m_vectorbatch[m_batchindex + 2].y = b1.y0 + step->yoffs; - - m_vectorbatch[m_batchindex + 3].x = b0.x1 + step->xoffs; - m_vectorbatch[m_batchindex + 3].y = b0.y1 + step->yoffs; - m_vectorbatch[m_batchindex + 4].x = b1.x0 + step->xoffs; - m_vectorbatch[m_batchindex + 4].y = b1.y0 + step->yoffs; - m_vectorbatch[m_batchindex + 5].x = b1.x1 + step->xoffs; - m_vectorbatch[m_batchindex + 5].y = b1.y1 + step->yoffs; - - // determine the color of the line - INT32 r = (INT32)(prim.color.r * step->weight * 255.0f); - INT32 g = (INT32)(prim.color.g * step->weight * 255.0f); - INT32 b = (INT32)(prim.color.b * step->weight * 255.0f); - INT32 a = (INT32)(prim.color.a * 255.0f); - DWORD color = D3DCOLOR_ARGB(a, r, g, b); - - // set the color, Z parameters to standard values - for (int i = 0; i < 6; i++) - { - m_vectorbatch[m_batchindex + i].x -= 0.5f; - m_vectorbatch[m_batchindex + i].y -= 0.5f; - m_vectorbatch[m_batchindex + i].z = 0.0f; - m_vectorbatch[m_batchindex + i].rhw = 1.0f; - m_vectorbatch[m_batchindex + i].color = color; - - // no texture mapping - m_vectorbatch[m_batchindex + i].u0 = 0.0f; - m_vectorbatch[m_batchindex + i].v0 = 0.0f; - - // line length - m_vectorbatch[m_batchindex + i].u1 = line_length; - } - - m_batchindex += 6; + m_vectorbatch[m_batchindex + 3].u0 = 0.0f; + m_vectorbatch[m_batchindex + 3].v0 = 1.0f; + m_vectorbatch[m_batchindex + 4].u0 = 1.0f; + m_vectorbatch[m_batchindex + 4].v0 = 0.0f; + m_vectorbatch[m_batchindex + 5].u0 = 1.0f; + m_vectorbatch[m_batchindex + 5].v0 = 1.0f; } + else + { + vec2f& start = get_default_texture()->get_uvstart(); + vec2f& stop = get_default_texture()->get_uvstop(); + + m_vectorbatch[m_batchindex + 0].u0 = start.c.x; + m_vectorbatch[m_batchindex + 0].v0 = start.c.y; + m_vectorbatch[m_batchindex + 1].u0 = start.c.x; + m_vectorbatch[m_batchindex + 1].v0 = stop.c.y; + m_vectorbatch[m_batchindex + 2].u0 = stop.c.x; + m_vectorbatch[m_batchindex + 2].v0 = start.c.y; + + m_vectorbatch[m_batchindex + 3].u0 = start.c.x; + m_vectorbatch[m_batchindex + 3].v0 = stop.c.y; + m_vectorbatch[m_batchindex + 4].u0 = stop.c.x; + m_vectorbatch[m_batchindex + 4].v0 = start.c.y; + m_vectorbatch[m_batchindex + 5].u0 = stop.c.x; + m_vectorbatch[m_batchindex + 5].v0 = stop.c.y; + } + + // determine the color of the line + INT32 r = (INT32)(prim.color.r * 255.0f); + INT32 g = (INT32)(prim.color.g * 255.0f); + INT32 b = (INT32)(prim.color.b * 255.0f); + INT32 a = (INT32)(prim.color.a * 255.0f); + DWORD color = D3DCOLOR_ARGB(a, r, g, b); + + // set the color, Z parameters to standard values + for (int i = 0; i < 6; i++) + { + m_vectorbatch[m_batchindex + i].x -= 0.5f; + m_vectorbatch[m_batchindex + i].y -= 0.5f; + m_vectorbatch[m_batchindex + i].z = 0.0f; + m_vectorbatch[m_batchindex + i].rhw = 1.0f; + m_vectorbatch[m_batchindex + i].color = color; + + // vector length/width + m_vectorbatch[m_batchindex + i].u1 = line_length; + m_vectorbatch[m_batchindex + i].v1 = line_width; + } + + m_batchindex += 6; } @@ -1573,38 +1576,45 @@ void renderer_d3d9::batch_vector(const render_primitive &prim) void renderer_d3d9::draw_line(const render_primitive &prim) { + // get a pointer to the vertex buffer + vertex *vertex = mesh_alloc(4); + if (vertex == nullptr) + { + return; + } + // compute the effective width based on the direction of the line float effwidth = prim.width; - if (effwidth < 0.5f) + if (effwidth < 1.0f) { - effwidth = 0.5f; + effwidth = 1.0f; } // determine the bounds of a quad to draw this line render_bounds b0, b1; render_line_to_quad(&prim.bounds, effwidth, 0.0f, &b0, &b1); - // get a pointer to the vertex buffer - vertex *vertex = mesh_alloc(4); - if (vertex == nullptr) - return; - - // rotate the unit vector by 135 degrees and add to point 0 vertex[0].x = b0.x0; vertex[0].y = b0.y0; - - // rotate the unit vector by -135 degrees and add to point 0 vertex[1].x = b0.x1; vertex[1].y = b0.y1; - - // rotate the unit vector by 45 degrees and add to point 1 vertex[2].x = b1.x0; vertex[2].y = b1.y0; - - // rotate the unit vector by -45 degrees and add to point 1 vertex[3].x = b1.x1; vertex[3].y = b1.y1; + vec2f& start = get_default_texture()->get_uvstart(); + vec2f& stop = get_default_texture()->get_uvstop(); + + vertex[0].u0 = start.c.x; + vertex[0].v0 = start.c.y; + vertex[2].u0 = stop.c.x; + vertex[2].v0 = start.c.y; + vertex[1].u0 = start.c.x; + vertex[1].v0 = stop.c.y; + vertex[3].u0 = stop.c.x; + vertex[3].v0 = stop.c.y; + // determine the color of the line INT32 r = (INT32)(prim.color.r * 255.0f); INT32 g = (INT32)(prim.color.g * 255.0f); @@ -1618,10 +1628,6 @@ void renderer_d3d9::draw_line(const render_primitive &prim) vertex[i].z = 0.0f; vertex[i].rhw = 1.0f; vertex[i].color = color; - - // no texture mapping - vertex[i].u0 = 0.0f; - vertex[i].v0 = 0.0f; } // now add a polygon entry diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index 57173e8e2a4..77acf017790 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -1085,22 +1085,14 @@ int renderer_ogl::draw(const int update) // we're doing nothing 3d, so the Z-buffer is currently not interesting glDisable(GL_DEPTH_TEST); - if (win->machine().options().antialias()) - { - // enable antialiasing for lines - glEnable(GL_LINE_SMOOTH); - // enable antialiasing for points - glEnable(GL_POINT_SMOOTH); + // enable antialiasing for lines + glEnable(GL_LINE_SMOOTH); + // enable antialiasing for points + glEnable(GL_POINT_SMOOTH); - // prefer quality to speed - glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - } - else - { - glDisable(GL_LINE_SMOOTH); - glDisable(GL_POINT_SMOOTH); - } + // prefer quality to speed + glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); // enable blending glEnable(GL_BLEND); diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp index 8b838e1e538..df99b1938a7 100644 --- a/src/osd/sdl/sdlmain.cpp +++ b/src/osd/sdl/sdlmain.cpp @@ -383,7 +383,9 @@ static void osd_sdl_info(void) void sdl_osd_interface::video_register() { video_options_add("soft", nullptr); +#if USE_OPENGL video_options_add("opengl", nullptr); +#endif video_options_add("bgfx", nullptr); //video_options_add("auto", nullptr); // making d3d video default one } diff --git a/src/osd/windows/ledutil.cpp b/src/osd/windows/ledutil.cpp new file mode 100644 index 00000000000..60427b4ef8e --- /dev/null +++ b/src/osd/windows/ledutil.cpp @@ -0,0 +1,709 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles,Paul Priest +//============================================================ +// +// ledutil.c - Win32 example code that tracks changing +// outputs and updates the keyboard LEDs in response +// +//============================================================ +// +// This is sample code. To use it as a starting point, you +// should do the following: +// +// 1. Change the CLIENT_ID define to something unique. +// +// 2. Change the WINDOW_CLASS and WINDOW_NAME defines to +// something unique. +// +// 3. Delete all the code from the >8 snip 8< comment and +// downward. +// +// 4. Implement the following functions: +// +// output_startup - called at app init time +// output_shutdown - called before the app exits +// output_mame_start - called when MAME starts +// output_mame_stop - called when MAME exits +// output_set_state - called whenever state changes +// +//============================================================ + +// standard windows headers +#define WIN32_LEAN_AND_MEAN +#include +#include + +// standard C headers +#include +#include +#include +#include + +// MAME output header file +typedef int running_machine; +#include "osdcomm.h" +#include "modules/output/win32_output.h" + + +//============================================================ +// DEBUGGING +//============================================================ + +// note you need to compile as a console app to have any of +// these printfs show up +#define DEBUG_VERSION 0 + +#if DEBUG_VERSION +#define DEBUG_PRINTF(x) printf x +#else +#define DEBUG_PRINTF(x) +#endif + + +//============================================================ +// CONSTANTS +//============================================================ + +// unique client ID +#define CLIENT_ID (('M' << 24) | ('L' << 16) | ('E' << 8) | ('D' << 0)) + +// LED methods +#define LED_METHOD_PS2 0 +#define LED_METHOD_USB 1 + +// window parameters +#define WINDOW_CLASS TEXT("LEDSample") +#define WINDOW_NAME TEXT("LEDSample") + +// window styles +#define WINDOW_STYLE WS_OVERLAPPEDWINDOW +#define WINDOW_STYLE_EX 0 + +// Define the keyboard indicators. +// (Definitions borrowed from ntddkbd.h) + +#define IOCTL_KEYBOARD_SET_INDICATORS CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_KEYBOARD_QUERY_TYPEMATIC CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_KEYBOARD_QUERY_INDICATORS CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define KEYBOARD_SCROLL_LOCK_ON 1 +#define KEYBOARD_NUM_LOCK_ON 2 +#define KEYBOARD_CAPS_LOCK_ON 4 + + + +//============================================================ +// TYPE DEFINITIONS +//============================================================ + +struct KEYBOARD_INDICATOR_PARAMETERS +{ + USHORT UnitId; // Unit identifier. + USHORT LedFlags; // LED indicator state. +}; + + +struct id_map_entry +{ + id_map_entry * next; + const char * name; + WPARAM id; +}; + + + +//============================================================ +// GLOBAL VARIABLES +//============================================================ + +static int ledmethod; +static int original_state; +static int current_state; +static int pause_state; +static HANDLE hKbdDev; + +static HWND mame_target; +static HWND listener_hwnd; + +static id_map_entry * idmaplist; + +// message IDs +static UINT om_mame_start; +static UINT om_mame_stop; +static UINT om_mame_update_state; +static UINT om_mame_register_client; +static UINT om_mame_unregister_client; +static UINT om_mame_get_id_string; + + + +//============================================================ +// FUNCTION PROTOTYPES +//============================================================ + +static int create_window_class(void); +static LRESULT CALLBACK listener_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam); +static LRESULT handle_mame_start(WPARAM wparam, LPARAM lparam); +static LRESULT handle_mame_stop(WPARAM wparam, LPARAM lparam); +static LRESULT handle_copydata(WPARAM wparam, LPARAM lparam); +static void reset_id_to_outname_cache(void); +static const char *map_id_to_outname(WPARAM id); +static LRESULT handle_update_state(WPARAM wparam, LPARAM lparam); + +// these functions provide the meat +static void output_startup(const char *commandline); +static void output_mame_start(void); +static void output_set_state(const char *name, INT32 state); +static void output_mame_stop(void); +static void output_shutdown(void); + +static int led_get_state(void); +static void led_set_state(int state); + + +//============================================================ +// main +//============================================================ + +int main(int argc, char *argv[]) +{ + const char *arg = (argc > 1) ? argv[1] : ""; + int exitcode = 1; + HWND otherwnd; + MSG message; + int result; + + // see if there is another instance of us running + otherwnd = FindWindow(WINDOW_CLASS, WINDOW_NAME); + + // if the argument is "-kill", post a close message + if (strcmp(arg, "-kill") == 0) + { + if (otherwnd != nullptr) + PostMessage(otherwnd, WM_QUIT, 0, 0); + return (otherwnd != nullptr) ? 1 : 0; + } + + // if we had another instance, defer to it + if (otherwnd != nullptr) + return 0; + + // call the startup code + output_startup(arg); + + // create our window class + result = create_window_class(); + if (result != 0) + goto error; + + // create a window + listener_hwnd = CreateWindowEx( + WINDOW_STYLE_EX, + WINDOW_CLASS, + WINDOW_NAME, + WINDOW_STYLE, + 0, 0, + 1, 1, + nullptr, + nullptr, + GetModuleHandle(nullptr), + nullptr); + if (listener_hwnd == nullptr) + goto error; + + // allocate message ids + om_mame_start = RegisterWindowMessage(OM_MAME_START); + if (om_mame_start == 0) + goto error; + om_mame_stop = RegisterWindowMessage(OM_MAME_STOP); + if (om_mame_stop == 0) + goto error; + om_mame_update_state = RegisterWindowMessage(OM_MAME_UPDATE_STATE); + if (om_mame_update_state == 0) + goto error; + + om_mame_register_client = RegisterWindowMessage(OM_MAME_REGISTER_CLIENT); + if (om_mame_register_client == 0) + goto error; + om_mame_unregister_client = RegisterWindowMessage(OM_MAME_UNREGISTER_CLIENT); + if (om_mame_unregister_client == 0) + goto error; + om_mame_get_id_string = RegisterWindowMessage(OM_MAME_GET_ID_STRING); + if (om_mame_get_id_string == 0) + goto error; + + // see if MAME is already running + otherwnd = FindWindow(OUTPUT_WINDOW_CLASS, OUTPUT_WINDOW_NAME); + if (otherwnd != nullptr) + handle_mame_start((WPARAM)otherwnd, 0); + + // process messages + while (GetMessage(&message, nullptr, 0, 0)) + { + TranslateMessage(&message); + DispatchMessage(&message); + } + + // reset on the way out if still live + if (mame_target != nullptr) + handle_mame_stop((WPARAM)mame_target, 0); + exitcode = 0; + +error: + // call the shutdown code + output_shutdown(); + + return exitcode; +} + + +//============================================================ +// create_window_class +//============================================================ + +static int create_window_class(void) +{ + static int classes_created = FALSE; + + /* only do this once */ + if (!classes_created) + { + WNDCLASS wc = { 0 }; + + // initialize the description of the window class + wc.lpszClassName = WINDOW_CLASS; + wc.hInstance = GetModuleHandle(nullptr); + wc.lpfnWndProc = listener_window_proc; + + // register the class; fail if we can't + if (!RegisterClass(&wc)) + return 1; + classes_created = TRUE; + } + + return 0; +} + + +//============================================================ +// window_proc +//============================================================ + +static LRESULT CALLBACK listener_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam) +{ + // OM_MAME_START: register ourselves with the new MAME (first instance only) + if (message == om_mame_start) + return handle_mame_start(wparam, lparam); + + // OM_MAME_STOP: no need to unregister, just note that we've stopped caring and reset the LEDs + else if (message == om_mame_stop) + return handle_mame_stop(wparam, lparam); + + // OM_MAME_UPDATE_STATE: update the state of this item if we care + else if (message == om_mame_update_state) + return handle_update_state(wparam, lparam); + + // WM_COPYDATA: extract the string and create an ID map entry + else if (message == WM_COPYDATA) + return handle_copydata(wparam, lparam); + + // everything else is default + else + return DefWindowProc(wnd, message, wparam, lparam); +} + + +//============================================================ +// handle_mame_start +//============================================================ + +static LRESULT handle_mame_start(WPARAM wparam, LPARAM lparam) +{ + DEBUG_PRINTF(("mame_start (%08X)\n", (UINT32)wparam)); + + // make this the targeted version of MAME + mame_target = (HWND)wparam; + + // initialize the LED states + output_mame_start(); + reset_id_to_outname_cache(); + + // register ourselves as a client + PostMessage(mame_target, om_mame_register_client, (WPARAM)listener_hwnd, CLIENT_ID); + + // get the game name + map_id_to_outname(0); + return 0; +} + + +//============================================================ +// handle_mame_stop +//============================================================ + +static LRESULT handle_mame_stop(WPARAM wparam, LPARAM lparam) +{ + DEBUG_PRINTF(("mame_stop (%08X)\n", (UINT32)wparam)); + + // ignore if this is not the instance we care about + if (mame_target != (HWND)wparam) + return 1; + + // clear our target out + mame_target = nullptr; + reset_id_to_outname_cache(); + + // reset the LED states + output_mame_stop(); + return 0; +} + + +//============================================================ +// handle_copydata +//============================================================ + +static LRESULT handle_copydata(WPARAM wparam, LPARAM lparam) +{ + COPYDATASTRUCT *copydata = (COPYDATASTRUCT *)lparam; + copydata_id_string *data = (copydata_id_string *)copydata->lpData; + id_map_entry *entry; + char *string; + + DEBUG_PRINTF(("copydata (%08X)\n", (UINT32)wparam)); + + // ignore requests we don't care about + if (mame_target != (HWND)wparam) + return 1; + + // allocate memory + entry = (id_map_entry *)malloc(sizeof(*entry)); + if (entry == nullptr) + return 0; + + string = (char *)malloc(strlen(data->string) + 1); + if (string == nullptr) + { + free(entry); + return 0; + } + + // if all allocations worked, make a new entry + entry->next = idmaplist; + entry->name = string; + entry->id = data->id; + + // copy the string and hook us into the list + strcpy(string, data->string); + idmaplist = entry; + + DEBUG_PRINTF((" id %d = '%s'\n", (int)entry->id, entry->name)); + + return 0; +} + + +//============================================================ +// reset_id_to_outname_cache +//============================================================ + +static void reset_id_to_outname_cache(void) +{ + // free our ID list + while (idmaplist != nullptr) + { + id_map_entry *temp = idmaplist; + idmaplist = temp->next; + free((void*)temp->name); + free(temp); + } +} + + +//============================================================ +// map_id_to_outname +//============================================================ + +static const char *map_id_to_outname(WPARAM id) +{ + id_map_entry *entry; + + // see if we have an entry in our map + for (entry = idmaplist; entry != nullptr; entry = entry->next) + if (entry->id == id) + return entry->name; + + // no entry yet; we have to ask + SendMessage(mame_target, om_mame_get_id_string, (WPARAM)listener_hwnd, id); + + // now see if we have the entry in our map + for (entry = idmaplist; entry != nullptr; entry = entry->next) + if (entry->id == id) + return entry->name; + + // if not, use an empty string + return ""; +} + + +//============================================================ +// handle_update_state +//============================================================ + +static LRESULT handle_update_state(WPARAM wparam, LPARAM lparam) +{ + DEBUG_PRINTF(("update_state: id=%d state=%d\n", (UINT32)wparam, (UINT32)lparam)); + output_set_state(map_id_to_outname(wparam), lparam); + return 0; +} + + +// +// END BOILERPLATE CODE +// +// ------------------------>8 snip 8<------------------------- +// +// BEGIN LED-SPECIFIC CODE +// + + +//============================================================ +// output_startup +//============================================================ + +static void output_startup(const char *commandline) +{ + // default to PS/2, override if USB is specified as a parameter + ledmethod = LED_METHOD_PS2; + if (commandline != nullptr && strcmp(commandline, "-usb") == 0) + ledmethod = LED_METHOD_USB; + + // output the method + switch (ledmethod) + { + case LED_METHOD_PS2: + DEBUG_PRINTF(("Using PS/2 method\n")); + break; + + case LED_METHOD_USB: + DEBUG_PRINTF(("Using USB method\n")); + break; + } +} + + +//============================================================ +// output_shutdown +//============================================================ + +static void output_shutdown(void) +{ + // nothing to do here +} + + +//============================================================ +// output_mame_start +//============================================================ + +static void output_mame_start(void) +{ + HRESULT error_number; + + // initialize the system based on the method + switch (ledmethod) + { + case LED_METHOD_PS2: + if (!DefineDosDevice(DDD_RAW_TARGET_PATH, TEXT("Kbd"), TEXT("\\Device\\KeyboardClass0"))) + { + error_number = GetLastError(); + fprintf(stderr, "Unable to open the keyboard device. (error %d)\n", (UINT32)error_number); + return; + } + + hKbdDev = CreateFile(TEXT("\\\\.\\Kbd"), GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, 0, nullptr); + if (hKbdDev == INVALID_HANDLE_VALUE) + { + error_number = GetLastError(); + fprintf(stderr, "Unable to open the keyboard device. (error %d)\n", (UINT32)error_number); + return; + } + break; + } + + // remember the initial LED states + original_state = current_state = led_get_state(); +} + + +//============================================================ +// output_mame_stop +//============================================================ + +static void output_mame_stop(void) +{ + int error_number = 0; + + // restore the initial LED states + led_set_state(original_state); + + switch (ledmethod) + { + case LED_METHOD_PS2: + if (!DefineDosDevice(DDD_REMOVE_DEFINITION, TEXT("Kbd"), nullptr)) + { + error_number = GetLastError(); + fprintf(stderr, "Unable to close the keyboard device. (error %d)\n", error_number); + return; + } + if (!CloseHandle(hKbdDev)) + { + error_number = GetLastError(); + fprintf(stderr, "Unable to close the keyboard device. (error %d)\n", error_number); + return; + } + break; + } +} + + +//============================================================ +// output_set_state +//============================================================ + +static void output_set_state(const char *outname, INT32 state) +{ + // look for pause state + if (strcmp(outname, "pause") == 0) + { + if (state) + { + pause_state = led_get_state(); + led_set_state(original_state); + } + else + { + original_state = led_get_state(); + led_set_state(pause_state); + } + } + // look for LED0/LED1/LED2 states and update accordingly + else if (strcmp(outname, "led0") == 0) + led_set_state((current_state & ~1) | (state & 1)); + else if (strcmp(outname, "led1") == 0) + led_set_state((current_state & ~2) | ((state & 1) << 1)); + else if (strcmp(outname, "led2") == 0) + led_set_state((current_state & ~4) | ((state & 1) << 2)); +} + + +//============================================================ +// led_get_state +//============================================================ + +static int led_get_state(void) +{ + int result = 0; + + switch (ledmethod) + { + case LED_METHOD_USB: + { + BYTE key_states[256]; + + // get the current state + GetKeyboardState(&key_states[0]); + + // set the numlock bit + result |= (key_states[VK_NUMLOCK] & 1); + result |= (key_states[VK_CAPITAL] & 1) << 1; + result |= (key_states[VK_SCROLL] & 1) << 2; + break; + } + + case LED_METHOD_PS2: + { + KEYBOARD_INDICATOR_PARAMETERS OutputBuffer; // Output buffer for DeviceIoControl + ULONG DataLength = sizeof(KEYBOARD_INDICATOR_PARAMETERS); + ULONG ReturnedLength; // Number of bytes returned in output buffer + + // Address first keyboard + OutputBuffer.UnitId = 0; + + DeviceIoControl(hKbdDev, IOCTL_KEYBOARD_QUERY_INDICATORS, + nullptr, 0, + &OutputBuffer, DataLength, + &ReturnedLength, nullptr); + + // Demangle lights to match 95/98 + if (OutputBuffer.LedFlags & KEYBOARD_NUM_LOCK_ON) result |= 0x1; + if (OutputBuffer.LedFlags & KEYBOARD_CAPS_LOCK_ON) result |= 0x2; + if (OutputBuffer.LedFlags & KEYBOARD_SCROLL_LOCK_ON) result |= 0x4; + break; + } + } + + return result; +} + + +//============================================================ +// led_set_state +//============================================================ + +static void led_set_state(int state) +{ + current_state = state; + + switch (ledmethod) + { + case LED_METHOD_USB: + { + static const BYTE vk[3] = { VK_NUMLOCK, VK_CAPITAL, VK_SCROLL }; + BYTE keyState[256]; + int k; + + GetKeyboardState((LPBYTE)&keyState); + for (k = 0; k < 3; k++) + { + if ((((state >> k) & 1) && !(keyState[vk[k]] & 1)) || + (!((state >> k) & 1) && (keyState[vk[k]] & 1))) + { + // Simulate a key press + keybd_event(vk[k], 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0); + + // Simulate a key release + keybd_event(vk[k], 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); + } + } + + keyState[VK_NUMLOCK] = (keyState[VK_NUMLOCK] & ~1) | ((state >> 0) & 1); + keyState[VK_CAPITAL] = (keyState[VK_CAPITAL] & ~1) | ((state >> 1) & 1); + keyState[VK_SCROLL] = (keyState[VK_SCROLL] & ~1) | ((state >> 2) & 1); + SetKeyboardState(&keyState[0]); + break; + } + + case LED_METHOD_PS2: + { + KEYBOARD_INDICATOR_PARAMETERS InputBuffer; // Input buffer for DeviceIoControl + ULONG DataLength = sizeof(KEYBOARD_INDICATOR_PARAMETERS); + ULONG ReturnedLength; // Number of bytes returned in output buffer + UINT LedFlags=0; + + // Demangle lights to match 95/98 + if (state & 0x1) LedFlags |= KEYBOARD_NUM_LOCK_ON; + if (state & 0x2) LedFlags |= KEYBOARD_CAPS_LOCK_ON; + if (state & 0x4) LedFlags |= KEYBOARD_SCROLL_LOCK_ON; + + // Address first keyboard + InputBuffer.UnitId = 0; + InputBuffer.LedFlags = LedFlags; + DeviceIoControl(hKbdDev, IOCTL_KEYBOARD_SET_INDICATORS, + &InputBuffer, DataLength, + nullptr, 0, + &ReturnedLength, nullptr); + break; + } + } +} diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp index ab8e99b6038..1dcb10e2e37 100644 --- a/src/osd/windows/winmain.cpp +++ b/src/osd/windows/winmain.cpp @@ -217,6 +217,7 @@ const options_entry windows_options::s_option_entries[] = { WINOPTION_YIQ_PHASE_COUNT";yiqp", "2", OPTION_INTEGER, "Phase Count value for NTSC signal processing" }, /* Vector simulation below this line */ { nullptr, nullptr, OPTION_HEADER, "VECTOR POST-PROCESSING OPTIONS" }, + { WINOPTION_VECTOR_BEAM_SMOOTH";vecsmooth", "0.0", OPTION_FLOAT, "The vector beam smoothness" }, { WINOPTION_VECTOR_LENGTH_SCALE";vecscale", "0.5", OPTION_FLOAT, "The maximum vector attenuation" }, { WINOPTION_VECTOR_LENGTH_RATIO";vecratio", "0.5", OPTION_FLOAT, "The minimum vector length (vector length to screen size ratio) that is affected by the attenuation" }, /* Bloom below this line */ @@ -452,6 +453,9 @@ void windows_osd_interface::video_register() { video_options_add("gdi", nullptr); video_options_add("d3d", nullptr); +#if USE_OPENGL + video_options_add("opengl", nullptr); +#endif video_options_add("bgfx", nullptr); //video_options_add("auto", nullptr); // making d3d video default one } diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h index 6935130c30f..f7774922223 100644 --- a/src/osd/windows/winmain.h +++ b/src/osd/windows/winmain.h @@ -83,6 +83,7 @@ #define WINOPTION_YIQ_QVALUE "yiq_q" #define WINOPTION_YIQ_SCAN_TIME "yiq_scan_time" #define WINOPTION_YIQ_PHASE_COUNT "yiq_phase_count" +#define WINOPTION_VECTOR_BEAM_SMOOTH "vector_beam_smooth" #define WINOPTION_VECTOR_LENGTH_SCALE "vector_length_scale" #define WINOPTION_VECTOR_LENGTH_RATIO "vector_length_ratio" #define WINOPTION_BLOOM_BLEND_MODE "bloom_blend_mode" @@ -177,6 +178,7 @@ public: float screen_yiq_q() const { return float_value(WINOPTION_YIQ_QVALUE); } float screen_yiq_scan_time() const { return float_value(WINOPTION_YIQ_SCAN_TIME); } int screen_yiq_phase_count() const { return int_value(WINOPTION_YIQ_PHASE_COUNT); } + float screen_vector_beam_smooth() const { return float_value(WINOPTION_VECTOR_BEAM_SMOOTH); } float screen_vector_length_scale() const { return float_value(WINOPTION_VECTOR_LENGTH_SCALE); } float screen_vector_length_ratio() const { return float_value(WINOPTION_VECTOR_LENGTH_RATIO); } int screen_bloom_blend_mode() const { return int_value(WINOPTION_BLOOM_BLEND_MODE); }