diff --git a/.gitattributes b/.gitattributes index 0d0420409fb..aaacc7163b2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4140,7 +4140,7 @@ src/mame/drivers/nbmj8991.c svneol=native#text/plain src/mame/drivers/nbmj9195.c svneol=native#text/plain src/mame/drivers/nemesis.c svneol=native#text/plain src/mame/drivers/neogeo.c svneol=native#text/plain -src/mame/drivers/neogeo.inc svneol=native#text/plain +src/mame/drivers/neogeomvs.c svneol=native#text/plain src/mame/drivers/neoprint.c svneol=native#text/plain src/mame/drivers/neptunp2.c svneol=native#text/plain src/mame/drivers/news.c svneol=native#text/plain diff --git a/hash/neogeo.xml b/hash/neogeo.xml index d99dc24f4e8..35c94183668 100644 --- a/hash/neogeo.xml +++ b/hash/neogeo.xml @@ -1,5 +1,5 @@ - + - + - + NAM-1975 (NGM-001)(NGH-001) 1990 SNK - - + + - + - + - + - + - + @@ -76,33 +76,33 @@ ***************************************--> - + Baseball Stars Professional (NGM-002) 1990 SNK - - + + - + - + - + - + - + @@ -113,33 +113,33 @@ - + Baseball Stars Professional (NGH-002) 1990 SNK - - + + - + - + - + - + - + @@ -158,36 +158,36 @@ NEO-AEG PROG-4B / NEO-AEG CHA-32 ***************************************--> - + Top Player's Golf (NGM-003)(NGH-003) 1990 SNK - - + + - + - + - + - + - + @@ -208,33 +208,33 @@ NEO-AEG PROG B / NEO-AEG CHA-32 ***************************************--> - + Mahjong Kyo Retsuden (NGM-004)(NGH-004) 1990 SNK - - + + - + - + - + - + - + @@ -251,31 +251,31 @@ NEO-AEG PROG-4B / NEO-AEG CHA-32 ***************************************--> - + Magician Lord (NGM-005) 1990 Alpha Denshi Co. - - + + - + - + - + - + - + @@ -286,31 +286,31 @@ - + Magician Lord (NGH-005) 1990 Alpha Denshi Co. - - + + - + - + - + - + - + @@ -329,38 +329,38 @@ NEO-AEG PROG-HERO / NEO-AEG CHA-32 ***************************************--> - + Riding Hero (NGM-006)(NGH-006) 1990 SNK - - + + - + - + - + - + - + - + @@ -369,38 +369,38 @@ - + Riding Hero (set 2) 1990 SNK - - + + - + - + - + - + - + - + @@ -417,29 +417,29 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Alpha Mission II / ASO II - Last Guardian (NGM-007)(NGH-007) 1991 SNK - - + + - + - + - + - + @@ -448,32 +448,32 @@ - + Alpha Mission II / ASO II - Last Guardian (prototype) 1991 SNK - - + + - + - + - + - + - + @@ -500,32 +500,32 @@ NEO-AEG PROG-4A / NEO-AEG CHA-32 ***************************************--> - + Ninja Combat (NGM-009) 1990 Alpha Denshi Co. - + - + - + - + - + - + - + @@ -536,32 +536,32 @@ - + Ninja Combat (NGH-009) 1990 Alpha Denshi Co. - + - + - + - + - + - + - + @@ -579,32 +579,32 @@ . NGH-010 ***************************************--> - + Cyber-Lip (NGM-010) 1990 SNK - - + + - + - + - + - + - + @@ -623,32 +623,32 @@ NEO-AEG PROG-8MB / NEO-AEG CHA-8M ***************************************--> - + The Super Spy (NGM-011)(NGH-011) 1990 SNK - + - + - + - + - + - + - + @@ -675,28 +675,28 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Mutation Nation (NGM-014)(NGH-014) 1992 SNK - + - + - + - + - + - + @@ -719,29 +719,29 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + King of the Monsters (set 1) 1991 SNK - + - + - + - + - + - + @@ -750,29 +750,29 @@ - + King of the Monsters (set 2) 1991 SNK - + - + - + - + - + - + @@ -789,29 +789,29 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Sengoku / Sengoku Denshou (NGM-017)(NGH-017) 1991 SNK - + - + - + - + - + - + @@ -820,29 +820,29 @@ - + Sengoku / Sengoku Denshou (NGH-017)(US) 1991 SNK - + - + - + - + - + - + @@ -861,28 +861,28 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Burning Fight (NGM-018)(NGH-018) 1991 SNK - + - + - + - + - + - + @@ -891,28 +891,28 @@ - + Burning Fight (NGH-018)(US) 1991 SNK - + - + - + - + - + - + @@ -921,32 +921,32 @@ - + Burning Fight (prototype) 1991 SNK - + - + - + - + - + - + - + @@ -968,35 +968,35 @@ NEO-AEG PROG-HERO / NEO-AEG CHA-32 ***************************************--> - + League Bowling (NGM-019)(NGH-019) 1990 SNK - + - + - + - + - + - + - + - + @@ -1011,32 +1011,32 @@ NEO-AEG PROG8M42 / NEO-AEG CHA-8M ***************************************--> - + Ghost Pilots (NGM-020)(NGH-020) 1991 SNK - + - + - + - + - + - + - + @@ -1045,32 +1045,32 @@ - + Ghost Pilots (NGH-020)(US) 1991 SNK - + - + - + - + - + - + - + @@ -1087,30 +1087,30 @@ NEO-AEG PROG B / NEO-AEG CHA-32 ***************************************--> - + Puzzled / Joy Joy Kid (NGM-021)(NGH-021) 1990 SNK - + - + - + - + - + - + - + @@ -1125,28 +1125,28 @@ NEO-AEG PROG 8M42 / NEO-AEG CHA-8M ***************************************--> - + Blue's Journey / Raguy (ALM-001)(ALH-001) 1990 Alpha Denshi Co. - + - + - + - + - + - + @@ -1163,54 +1163,54 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023) 1991 SNK - + - + - + - + - + - + - + Quiz Daisousa Sen - The Last Count Down (Korean release) 1991 SNK - + - + - + - + - + - + @@ -1224,27 +1224,27 @@ . NGH-024 ***************************************--> - + Last Resort 1992 SNK - - + + - + - + - + - + @@ -1261,28 +1261,28 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Eight Man (NGM-025)(NGH-025) 1991 SNK / Pallas - + - + - + - + - + - + @@ -1304,30 +1304,30 @@ NEO-AEG PROG-8MB / NEO-AEG CHA-8M ***************************************--> - + Minasanno Okagesamadesu! Daisugorokutaikai (MOM-001)(MOH-001) 1990 Monolith Corp. - + - + - + - + - + - + - + @@ -1348,26 +1348,26 @@ . ??H-029 ***************************************--> - + Legend of Success Joe / Ashitano Joe Densetsu 1991 SNK - - + + - + - + - + - + @@ -1384,27 +1384,27 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + 2020 Super Baseball (set 1) 1991 SNK / Pallas - - + + - + - + - + - + @@ -1413,29 +1413,29 @@ - + 2020 Super Baseball (set 2) 1991 SNK / Pallas - + - + - + - + - + - + @@ -1444,28 +1444,28 @@ - + 2020 Super Baseball (set 3) 1991 SNK / Pallas - - + + - + - + - + - + @@ -1482,28 +1482,28 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Soccer Brawl (NGM-031) 1991 SNK - + - + - + - + - + - + @@ -1512,28 +1512,28 @@ - + Soccer Brawl (NGH-031) 1991 SNK - + - + - + - + - + - + @@ -1550,27 +1550,27 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Robo Army 1991 SNK - - + + - + - + - + - + @@ -1588,31 +1588,31 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (NGM-033)(NGH-033) 1991 SNK - + - + - + - + - + - + @@ -1629,28 +1629,28 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Football Frenzy (NGM-034)(NGH-034) 1992 SNK - + - + - + - + - + - + @@ -1672,28 +1672,28 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Bakatonosama Mahjong Manyuuki (MOM-002)(MOH-002) 1991 Monolith Corp. - + - + - + - + - + - + @@ -1710,27 +1710,27 @@ NEO-AEG PROG42G / NEO-AEG CHA42G ***************************************--> - + Crossed Swords (ALM-002)(ALH-002) 1991 Alpha Denshi Co. - + - + - + - + - + - + @@ -1747,33 +1747,33 @@ NEO-AEG PROG42G-COM / NEO-AEG CHA42G-1 ***************************************--> - + Thrash Rally (ALM-003)(ALH-003) 1991 Alpha Denshi Co. - + - + - + - + - + - + - + @@ -1790,29 +1790,29 @@ NEO-AEG PROG16 / NEO-AEG CHA42G-1 ***************************************--> - + King of the Monsters 2 - The Next Thing (NGM-039)(NGH-039) 1992 SNK - + - + - + - + - + - + @@ -1824,25 +1824,25 @@ - + King of the Monsters 2 - The Next Thing (prototype) 1992 SNK - - + + - + - + - + @@ -1851,7 +1851,7 @@ - + @@ -1872,27 +1872,27 @@ . NGH-040 ***************************************--> - + Sengoku 2 / Sengoku Denshou 2 1993 SNK - - + + - + - + - + - + @@ -1910,28 +1910,28 @@ . NGH-041 ***************************************--> - + Baseball Stars 2 1992 SNK - - + + - + - + - + - + @@ -1948,28 +1948,28 @@ NEO-AEG PROG42G-1 / NEO-AEG CHA42G-1 ***************************************--> - + Quiz Meitantei Neo and Geo - Quiz Daisousa Sen part 2 (NGM-042)(NGH-042) 1992 SNK - + - + - + - + - + - + @@ -1986,29 +1986,29 @@ NEO-AEG PROG16 / NEO-AEG CHA42G-1 ***************************************--> - + 3 Count Bout / Fire Suplex (NGM-043)(NGH-043) 1993 SNK - + - + - + - + - + - + @@ -2029,28 +2029,28 @@ NEO-AEG PROG16 / NEO-AEG CHA42G-1 ***************************************--> - + Art of Fighting / Ryuuko no Ken (NGM-044)(NGH-044) 1992 SNK - + - + - + - + - + - + @@ -2071,29 +2071,29 @@ NEO-AEG PROGGS / NEO-AEG CHA42G-4 ***************************************--> - + Samurai Shodown / Samurai Spirits (NGM-045) 1993 SNK - + - + - + - + - + - + @@ -2104,29 +2104,29 @@ - + Samurai Shodown / Samurai Spirits (NGH-045) 1993 SNK - + - + - + - + - + - + @@ -2145,31 +2145,31 @@ NEO-AEG PROGTOP / NEO-AEG CHA256[B] ***************************************--> - + Top Hunter - Roddy and Cathy (NGM-046) 1994 SNK - + - + - + - + - + - + @@ -2182,31 +2182,31 @@ - + Top Hunter - Roddy and Cathy (NGH-046) 1994 SNK - + - + - + - + - + - + @@ -2227,30 +2227,30 @@ NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B ***************************************--> - + Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047)(NGH-047) 1992 SNK - + - + - + - + - + - + @@ -2269,27 +2269,27 @@ NEO-MVS PROGGSC / NEO-MVS CHA256 ***************************************--> - + Jyanshin Densetsu - Quest of Jongmaster 1994 Aicom - + - + - + - + - + - + @@ -2304,28 +2304,28 @@ NEO-AEG PROG16 / NEO-AEG CHA42G-1 ***************************************--> - + Andro Dunos (NGM-049)(NGH-049) 1992 SNK - + - + - + - + - + - + @@ -2339,27 +2339,27 @@ . ALH-004 ***************************************--> - + Ninja Commando 1992 Alpha Denshi Co. - - + + - + - + - + - + @@ -2375,28 +2375,28 @@ . AIH-051 ***************************************--> - + Viewpoint 1992 Sammy / Aicom - - + + - + - + - + - + @@ -2412,27 +2412,27 @@ . NGH-052 ***************************************--> - + Super Sidekicks / Tokuten Ou 1992 SNK - + - + - + - + - + - + @@ -2449,30 +2449,30 @@ NEO-AEG PROG16 / NEO-AEG CHA42G-1 ***************************************--> - + World Heroes (ALM-005) 1992 Alpha Denshi Co. - + - + - + - + - + - + @@ -2483,29 +2483,29 @@ - + World Heroes (ALH-005) 1992 Alpha Denshi Co. - + - + - + - + - + - + @@ -2516,29 +2516,29 @@ - + World Heroes (set 3) 1992 Alpha Denshi Co. - - + + - + - + - + - + @@ -2562,30 +2562,30 @@ NEO-AEG PROGRK / NEO-AEG CHA256 ***************************************--> - + The King of Fighters '94 (NGM-055)(NGH-055) 1994 SNK - + - + - + - + - + - + @@ -2606,29 +2606,29 @@ NEO-AEG PROGRKB / NEO-AEG CHA256[B] ***************************************--> - + Art of Fighting 2 / Ryuuko no Ken 2 (NGM-056) 1994 SNK - + - + - + - + - + - + @@ -2642,32 +2642,32 @@ - + Art of Fighting 2 / Ryuuko no Ken 2 (NGH-056) 1994 SNK - + - + - + - + - + - + @@ -2688,29 +2688,29 @@ NEO-AEG PROG4096 B / NEO-AEG CHA42G-3 ***************************************--> - + World Heroes 2 (ALM-006)(ALH-006) 1993 ADK - + - + - + - + - + - + @@ -2729,30 +2729,30 @@ NEO-AEG PROGGS / NEO-AEG CHA42G-4 ***************************************--> - + Fatal Fury Special / Garou Densetsu Special (set 1)(NGM-058)(NGH-058) 1993 SNK - + - + - + - + - + - + @@ -2763,33 +2763,33 @@ - + Fatal Fury Special / Garou Densetsu Special (set 2)(NGM-058)(NGH-058) 1993 SNK - + - + - + - + - + - + @@ -2807,29 +2807,29 @@ . NGH-059 ***************************************--> - + Savage Reign / Fu'un Mokushiroku - kakutou sousei 1995 SNK - - + + - + - + - + - + @@ -2848,28 +2848,28 @@ NEO-MVS PROGGSC / NEO-MVS CHA256B ***************************************--> - + Fight Fever (set 1) 1994 Viccom - + - + - + - + - + - + @@ -2878,31 +2878,31 @@ - + Fight Fever (set 2) 1994 Viccom - + - + - + - + - + - + @@ -2919,28 +2919,28 @@ NEO-AEG PROGRKB / NEO-AEG CHA256[B] ***************************************--> - + Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - real fight football (NGM-061)(NGH-061) 1994 SNK - + - + - + - + - + - + @@ -2957,27 +2957,27 @@ . DEH-001 ***************************************--> - + Spin Master / Miracle Adventure 1993 Data East Corporation - - + + - + - + - + - + @@ -2998,31 +2998,31 @@ NEO-AEG PROGTOP2 / NEO-AEG CHA256 B ***************************************--> - + Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063) 1994 SNK - + - + - + - + - + - + @@ -3035,16 +3035,16 @@ - + Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II) 1994 SNK - + - + @@ -3052,19 +3052,19 @@ - + - + - + - + @@ -3085,29 +3085,29 @@ NEO-AEG PROGRK / NEO-AEG CHA256 ***************************************--> - + World Heroes 2 Jet (ADM-007)(ADH-007) 1994 ADK / SNK - + - + - + - + - + - + @@ -3127,29 +3127,29 @@ . DEH-002 ***************************************--> - + Windjammers / Flying Power Disc 1994 Data East Corporation - - + + - + - + - + - + @@ -3165,26 +3165,26 @@ . DEH-003 ***************************************--> - + Karnov's Revenge / Fighter's History Dynamite 1994 Data East Corporation - - + + - + - + - + - + @@ -3201,27 +3201,27 @@ NEO-MVS PROG16 / NEO-MVS CHA256B ***************************************--> - + Gururin 1994 Face - + - + - + - + - + - + @@ -3234,29 +3234,29 @@ NEO-MVS PROGTOP / NEO-MVS CHA256 ***************************************--> - + Power Spikes II (NGM-068) 1994 Video System Co. - + - + - + - + - + - + @@ -3275,30 +3275,30 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ***************************************--> - + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069) 1995 SNK - + - + - + - + - + - + @@ -3315,31 +3315,35 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Zupapa! 2001 SNK - + - + + - + - + - + - + @@ -3372,28 +3376,28 @@ NEO-MVS PROGTOP / NEO-MVS CHA256 ***************************************--> - + Panic Bomber 1994 Eighting / Hudson - + - + - + - + - + - + @@ -3408,29 +3412,29 @@ NEO-AEG PROGRK / NEO-AEG CHA256 ***************************************--> - + Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008)(ADH-008) 1994 ADK / SNK - + - + - + - + - + - + @@ -3450,28 +3454,28 @@ . NGH-075 ***************************************--> - + Aero Fighters 2 / Sonic Wings 2 1994 Video System Co. - - + + - + - + - + - + @@ -3486,29 +3490,29 @@ NEO-MVS PROGGSC / NEO-MVS CHA256 ***************************************--> - + Zed Blade / Operation Ragnarok 1994 NMK - + - + - + - + - + - + @@ -3529,29 +3533,29 @@ . NGH-078 ***************************************--> - + Galaxy Fight - Universal Warriors 1995 Sunsoft - - + + - + - + - + - + @@ -3572,29 +3576,29 @@ NEO-AEG PROGRK / NEO-AEG CHA256 ***************************************--> - + Street Hoop / Street Slam / Dunk Dream (DEM-004) (DEH-004) 1994 Data East Corporation - + - + - + - + - + - + @@ -3611,29 +3615,29 @@ NEO-AEG PROGTOP2 / NEO-AEG CHA256 B ***************************************--> - + Quiz King of Fighters (SAM-080)(SAH-080) 1995 Saurus - + - + - + - + - + - + @@ -3642,31 +3646,31 @@ - + Quiz King of Fighters (Korean release) 1995 Saurus - + - + - + - + - + - + @@ -3683,29 +3687,29 @@ . NGH-081 ***************************************--> - + Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - eikoue no michi 1995 SNK - - + + - + - + - + - + @@ -3725,28 +3729,28 @@ . NGH-082 ***************************************--> - + Double Dragon (Neo-Geo) 1995 Technos Japan - - + + - + - + - + - + @@ -3765,32 +3769,32 @@ NEO-MVS PROGTOP / NEO-MVS CHA256 ***************************************--> - + Puzzle Bobble / Bust-A-Move (Neo-Geo) (NGM-083) 1994 Taito - + - + - + - + - + - + @@ -3810,31 +3814,31 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ***************************************--> - + The King of Fighters '95 (NGM-084) 1995 SNK - + - + - + - + - + - + @@ -3848,32 +3852,32 @@ - + The King of Fighters '95 (NGH-084) 1995 SNK - + - + - + - + - + - + @@ -3898,28 +3902,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256B ***************************************--> - + Tecmo World Soccer '96 1996 Tecmo - + - + - + - + - + - + @@ -3936,15 +3940,15 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ***************************************--> - + Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGM-087) 1995 SNK - + - + @@ -3952,17 +3956,17 @@ - + - + - + - + @@ -3975,29 +3979,29 @@ - + Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGH-087) 1995 SNK - + - + - + - + - + - + @@ -4010,29 +4014,29 @@ - + Fighters Swords (Korean release of Samurai Shodown III) 1995 SNK - + - + - + - + - + - + @@ -4052,27 +4056,27 @@ . NGH-088 ***************************************--> - + Stakes Winner / Stakes Winner - GI kinzen seihae no michi 1995 Saurus - - + + - + - + - + - + @@ -4088,28 +4092,28 @@ . NGH-089 ***************************************--> - + Pulstar 1995 Aicom - - + + - + - + - + - + @@ -4129,29 +4133,29 @@ . ADH-009 ***************************************--> - + World Heroes Perfect 1995 ADK / SNK - - + + - + - + - + - + @@ -4178,30 +4182,30 @@ . NGH-092 ***************************************--> - + Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den 1995 Hudson - - + + - + - + - + - + @@ -4216,28 +4220,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Neo Bomberman 1997 Hudson - + - + - + - + - + - + @@ -4253,29 +4257,29 @@ . NGH-094 ***************************************--> - + Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer 1995 Technos Japan - - + + - + - + - + - + @@ -4296,30 +4300,30 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ***************************************--> - + Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095)(NGH-095) 1995 SNK - + - + - + - + - + - + @@ -4332,35 +4336,35 @@ - + Real Bout Fatal Fury / Real Bout Garou Densetsu (bug fix revision) 1995 SNK - + - + - + - + - + - + @@ -4380,29 +4384,29 @@ . NGH-096 ***************************************--> - + Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden 1996 SNK - - + + - + - + - + - + @@ -4415,30 +4419,30 @@ - + Art of Fighting 3 - The Path of the Warrior (Korean release) 1996 SNK - + - + - + - + - + - + @@ -4458,28 +4462,28 @@ . NGH-097 ***************************************--> - + Aero Fighters 3 / Sonic Wings 3 1995 Video System Co. - - + + - + - + - + - + @@ -4523,30 +4527,30 @@ . NGH-200 ***************************************--> - + Neo Turf Masters / Big Tournament Golf 1996 Nazca - - + + - + - + - + - + @@ -4560,28 +4564,28 @@ . NGH-201 ***************************************--> - + Metal Slug - Super Vehicle-001 1996 Nazca - - + + - + - + - + - + @@ -4596,27 +4600,27 @@ NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 ***************************************--> - + Puzzle De Pon! 1995 Taito (Visco license) - + - + - + - + - + - + @@ -4630,26 +4634,26 @@ . ADH-010 ***************************************--> - + Syougi No Tatsujin - Master of Syougi 1990 ADK / SNK - - + + - + - + - + - + @@ -4673,27 +4677,27 @@ . ??H-206 ***************************************--> - + Chibi Marukochan Deluxe Quiz 1995 Takara - - + + - + - + - + - + @@ -4708,27 +4712,27 @@ NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B ***************************************--> - + Neo Mr. Do! 1996 Visco - + - + - + - + - + - + @@ -4741,28 +4745,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256B ***************************************--> - + Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu 1996 Technos Japan - + - + - + - + - + - + @@ -4777,28 +4781,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Goal! Goal! Goal! 1995 Visco - + - + - + - + - + - + @@ -4824,27 +4828,27 @@ . ADH-011 ***************************************--> - + Over Top 1996 ADK - - + + - + - + - + - + @@ -4861,29 +4865,29 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256B ***************************************--> - + Neo Drift Out - New Technology 1996 Visco - + - + - + - + - + - + @@ -4897,30 +4901,30 @@ . NGH-214 ***************************************--> - + The King of Fighters '96 (NGM-214) 1996 SNK - + - + - + - + - + - + @@ -4933,29 +4937,29 @@ - + The King of Fighters '96 (NGH-214) 1996 SNK - - + + - + - + - + - + @@ -4975,28 +4979,28 @@ . NGH-215 ***************************************--> - + The Ultimate 11 - The SNK Football Championship / Tokuten Ou - Honoo no Libero 1996 SNK - - + + - + - + - + - + @@ -5014,30 +5018,30 @@ . ??H-216 ***************************************--> - + Kizuna Encounter - Super Tag Battle / Fu'un Super Tag Battle 1996 SNK - - + + - + - + - + - + @@ -5059,28 +5063,28 @@ . ADH-012 ***************************************--> - + Ninja Master's - haoh-ninpo-cho 1996 ADK / SNK - - + + - + - + - + - + @@ -5100,28 +5104,28 @@ . NGH-218 ***************************************--> - + Ragnagard / Shin-Oh-Ken 1996 Saurus - - + + - + - + - + - + @@ -5140,28 +5144,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219) 1996 Saurus - + - + - + - + - + - + @@ -5175,28 +5179,28 @@ Choutetsu Brikin'ger - Iron clad (prototype) 1996 Saurus ***************************************--> - + Choutetsu Brikin'ger - Iron clad (Prototype) 1996 Saurus - + - + - + - + - + - + @@ -5205,28 +5209,28 @@ - + Choutetsu Brikin'ger - Iron clad (Prototype, bootleg) 1996 bootleg - + - + - + - + - + - + @@ -5242,26 +5246,26 @@ . NGH-221 ***************************************--> - + Magical Drop II 1996 Data East Corporation - - + + - + - + - + - + @@ -5276,30 +5280,30 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ***************************************--> - + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222) 1996 SNK - + - + - + - + - + - + @@ -5312,30 +5316,30 @@ - + Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV) 1996 SNK - + - + - + - + - + - + @@ -5355,29 +5359,29 @@ . NGH-223 ***************************************--> - + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special 1996 SNK - - + + - + - + - + - + @@ -5390,31 +5394,31 @@ - + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Korean release) 1996 SNK - + - + - + - + - + - + @@ -5434,28 +5438,28 @@ . ADH-013 ***************************************--> - + Twinkle Star Sprites 1996 ADK / SNK - - + + - + - + - + - + @@ -5471,28 +5475,28 @@ . SUH-225 ***************************************--> - + Waku Waku 7 1996 Sunsoft - - + + - + - + - + - + @@ -5515,28 +5519,28 @@ . NGH-227 ***************************************--> - + Stakes Winner 2 1996 Saurus - - + + - + - + - + - + @@ -5550,27 +5554,27 @@ Ghostlop (prototype) 1996 Data East Corp. ***************************************--> - + Ghostlop (prototype) 1996 Data East Corporation - + - + - + - + - + - + @@ -5593,28 +5597,28 @@ . NGH-2300 ***************************************--> - + Breakers 1996 Breakers - - + + - + - + - + - + @@ -5629,27 +5633,27 @@ NEO-MVS PROGBK1 / NEO-MVS CHA42G-3B ***************************************--> - + Money Puzzle Exchanger / Money Idol Exchanger 1997 Face - + - + - + - + - + - + @@ -5666,30 +5670,30 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + The King of Fighters '97 (NGM-2320) 1997 SNK - + - + - + - + - + - + @@ -5700,30 +5704,30 @@ - + The King of Fighters '97 (NGH-2320) 1997 SNK - + - + - + - + - + - + @@ -5734,30 +5738,30 @@ - + The King of Fighters '97 (Korean release) 1997 SNK - + - + - + - + - + - + @@ -5775,27 +5779,27 @@ . NGH-2330 ***************************************--> - + Magical Drop III 1997 Data East Corporation - - + + - + - + - + - + @@ -5812,31 +5816,31 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340) 1997 SNK - + - + - + - + - + - + @@ -5847,31 +5851,31 @@ - + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340) 1997 SNK - + - + - + - + - + - + @@ -5882,31 +5886,31 @@ - + The Last Soldier (Korean release of The Last Blade) 1997 SNK - + - + - + - + - + - + @@ -5923,27 +5927,27 @@ NEO-MVS PROG 4096 / NEO-MVS CHA 42G-2 ***************************************--> - + Puzzle De Pon! R! 1997 Taito (Visco license) - + - + - + - + - + - + @@ -5964,27 +5968,27 @@ NEO-MVS PROG 4096 / NEO-MVS CHA42G-3B ***************************************--> - + Pop 'n Bounce / Gapporin 1997 Video System Co. - + - + - + - + - + - + @@ -5997,29 +6001,29 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Shock Troopers (set 1) 1997 Saurus - + - + - + - + - + - + @@ -6032,29 +6036,29 @@ - + Shock Troopers (set 2) 1997 Saurus - + - + - + - + - + - + @@ -6074,28 +6078,28 @@ . NGH-2390 ***************************************--> - + Blazing Star 1998 Yumekobo - - + + - + - + - + - + @@ -6116,31 +6120,31 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400) 1998 SNK - + - + - + - + - + - + @@ -6151,31 +6155,31 @@ - + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400) 1998 SNK - + - + - + - + - + - + @@ -6186,31 +6190,31 @@ - + Real Bout Fatal Fury 2 - The Newcomers (Korean release) 1998 SNK - + - + - + - + - + - + @@ -6229,28 +6233,28 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410) 1998 SNK - - + + - + - + - + - + @@ -6268,33 +6272,33 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420) 1998 SNK - + - + - + - + - + - + @@ -6307,34 +6311,34 @@ - + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board, set 1) 1998 SNK - + - + - + - + - + - + @@ -6347,34 +6351,34 @@ - + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board, set 2) 1998 SNK - + - + - + - + - + - + @@ -6387,31 +6391,31 @@ - + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420) 1998 SNK - + - + - + - + - + - + @@ -6432,32 +6436,32 @@ NEO-AEG PROGBK1Y / NEO-AEG CHA512Y ***************************************--> - + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430) 1998 SNK - + - + - + - + - + - + @@ -6475,28 +6479,28 @@ . ??H-2440 ***************************************--> - + Neo-Geo Cup '98 - The Road to the Victory 1998 SNK - - + + - + - + - + - + @@ -6509,29 +6513,29 @@ NEO-MVS PROGBK1 / NEO-MVS CHA512Y ***************************************--> - + Breakers Revenge 1998 Visco - + - + - + - + - + - + @@ -6550,29 +6554,29 @@ . NGH-2460 ***************************************--> - + Shock Troopers - 2nd Squad 1998 Saurus - - + + - + - + - + - + @@ -6589,27 +6593,27 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Battle Flip Shot 1999 Visco - + - + - + - + - + - + @@ -6622,28 +6626,28 @@ NEO-MVS PROGBK1 / NEO-MVS CHA256 ***************************************--> - + Puzzle Bobble 2 / Bust-A-Move Again (Neo-Geo) 1999 Taito (SNK license) - + - + - + - + - + - + @@ -6659,29 +6663,29 @@ NEO-MVS PROGBK1 / NEO-MVS CHA512Y ***************************************--> - + Captain Tomaday 1999 Visco - + - + - + - + - + - + @@ -6696,30 +6700,30 @@ NEO-AEG PROGEOP (1999.4.2) / NEO-AEG CHA512Y ***************************************--> - + Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500) ( 1999 SNK - + - + - + - + - + - + @@ -6741,35 +6745,40 @@ NEO-AEG PROGLBA / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ***************************************--> - + The King of Fighters '99 - Millennium Battle (NGM-2510) 1999 SNK - + - + + - + - + - + - + @@ -6783,35 +6792,35 @@ - + The King of Fighters '99 - Millennium Battle (NGH-2510) 1999 SNK - + - + - + - + - + - + @@ -6825,16 +6834,16 @@ - + The King of Fighters '99 - Millennium Battle (earlier) 1999 SNK - + - + @@ -6842,20 +6851,20 @@ - + - + - + - + @@ -6869,34 +6878,38 @@ - + The King of Fighters '99 - Millennium Battle (Korean release) 1999 SNK - + - + + - + - + - + - + @@ -6910,33 +6923,33 @@ - + The King of Fighters '99 - Millennium Battle (prototype) 1999 SNK - + - + - + - + - + - + @@ -6956,31 +6969,35 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Ganryu / Musashi Ganryuki 1999 Visco - + - + + - + - + - + - + @@ -6996,37 +7013,42 @@ NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042) ***************************************--> - + Garou - Mark of the Wolves (NGM-2530) 1999 SNK - + - + + - + - + - + - + @@ -7040,35 +7062,40 @@ - + Garou - Mark of the Wolves (NGM-2530)(NGH-2530) 1999 SNK - + - + + - + - + - + - + @@ -7082,31 +7109,31 @@ - + Garou - Mark of the Wolves (prototype) 1999 SNK - + - + - + - + - + - + @@ -7125,34 +7152,38 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Strikers 1945 Plus 1999 Psikyo - + - + + - + - + - + - + @@ -7171,32 +7202,36 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Prehistoric Isle 2 1999 Yumekobo - + - + + - + - + - + - + @@ -7218,37 +7253,42 @@ . NGH-2560 ***************************************--> - + Metal Slug 3 (NGM-2560) 2000 SNK - + - + + - + - + - + - + @@ -7262,35 +7302,39 @@ - + Metal Slug 3 (NGH-2560) 2000 SNK - + - + + - + - + - + - + @@ -7315,36 +7359,42 @@ NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ***************************************--> - + The King of Fighters 2000 (NGM-2570) (NGH-2570) 2000 SNK - + - + + - + - + - + - + @@ -7357,34 +7407,39 @@ - + The King of Fighters 2000 (not encrypted) 2000 SNK - + - + + - + - + - + - + @@ -7408,32 +7463,36 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Bang Bead 2000 Visco - + - + + - + - + - + - + @@ -7448,30 +7507,34 @@ NEO-MVS PROGBK1 / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042) ***************************************--> - + Nightmare in the Dark 2000 Eleven / Gavaking - + - + + - + - + - + - + @@ -7486,33 +7549,37 @@ . NGH-2610 ***************************************--> - + Sengoku 3 / Sengoku Densho 2001 2001 Noise Factory / SNK - + - + + - + - + - + - + @@ -7530,37 +7597,42 @@ - Distribution by BrezzaSoft ***************************************--> - + The King of Fighters 2001 (NGM-262?) 2001 Eolith / SNK - + - + + - + - + - + - + @@ -7574,34 +7646,34 @@ - + The King of Fighters 2001 (NGH-2621) 2001 Eolith / SNK - + - + - + - + - + - + @@ -7623,37 +7695,44 @@ NEO-AEG PROGBK2 (NEO-PCM2 SNK) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ***************************************--> - + Metal Slug 4 (NGM-2630) 2002 Mega / Playmore - + + + - + - + - + - + - + @@ -7665,34 +7744,34 @@ - + Metal Slug 4 (NGH-2630) 2002 Mega / Playmore - + - + - + - + - + - + @@ -7713,33 +7792,39 @@ - Distribution by BrezzaSoft ***************************************--> - + Rage of the Dragons (NGM-264?) 2002 Evoga / Playmore - + - + + - + - + - + - + @@ -7761,34 +7846,40 @@ NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ***************************************--> - + The King of Fighters 2002 (NGM-2650)(NGH-2650) 2002 Eolith / Playmore - + - + + - + - + - + - + @@ -7810,34 +7901,41 @@ NEO-AEG PROGBK2 (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7050) ***************************************--> - + Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660) (NGH-2660) 2002 Noise Factory / Atlus - + - + + - + - + - + - + @@ -7857,32 +7955,38 @@ NEO-MVS PROGBK2 (NEO-PCM2 SNK) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7050) ***************************************--> - + Pochi and Nyaa 2003 Aiky / Taito - + - + + - + - + - + - + @@ -7897,34 +8001,42 @@ . NGH-2680 ***************************************--> - + Metal Slug 5 (NGM-2680) 2003 SNK Playmore - + - + + - + - + - + - + @@ -7938,34 +8050,34 @@ - + Metal Slug 5 (NGH-2680) 2003 SNK Playmore - + - + - + - + - + - + @@ -7987,34 +8099,40 @@ NEO-AEG PROGBK3R (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ***************************************--> - + SNK vs. Capcom - SVC Chaos (NGM-2690)(NGH-2690) 2003 SNK Playmore - + - + + - + - + - + - + @@ -8036,35 +8154,42 @@ NEO-AEG PROGBK2S (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ***************************************--> - + Samurai Shodown V / Samurai Spirits Zero (NGM-2700) 2003 Yuki Enterprise / SNK Playmore - + - + + - + - + - + - + @@ -8078,34 +8203,34 @@ - + Samurai Shodown V / Samurai Spirits Zero (NGH-2700) 2003 Yuki Enterprise / SNK Playmore - + - + - + - + - + - + @@ -8127,35 +8252,43 @@ NEO-AEG PROGBK3S (NEO-PCM2 PLAYMORE) (NEO-PVC) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050) ***************************************--> - + The King of Fighters 2003 (NGM-2710) 2003 SNK Playmore - + - + + - + - + - + - + @@ -8169,36 +8302,45 @@ - + The King of Fighters 2003 (NGH-2710) 2003 SNK Playmore - + + - + - + - + - + - + @@ -8219,35 +8361,42 @@ . NGH-2720 ***************************************--> - + Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-2720) 2004 Yuki Enterprise / SNK Playmore - + - + + - + - + - + - + @@ -8261,36 +8410,36 @@ - + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored) 2004 Yuki Enterprise / SNK Playmore - + - + - + - + - + - + @@ -8304,35 +8453,35 @@ - + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (1st release, censored) 2004 Yuki Enterprise / SNK Playmore - + - + - + - + - + - + @@ -8425,26 +8574,26 @@ PROG LOAD ERROR message. The set is supported in order to distinguish the hacks from a real prototype should one turn up. --> - + Zintrick / Oshidashi Zentrix (bootleg of CD version) 1996 bootleg - - + + - + - + - + - + @@ -8453,29 +8602,29 @@ - + The King of Fighters '97 Plus (bootleg) 1997 bootleg - - + + - + - + - + - + @@ -8486,30 +8635,30 @@ - + King of Gladiator (The King of Fighters '97 bootleg) 1997 bootleg - + - + - + - + - + - + @@ -8522,31 +8671,31 @@ - + Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg) 1998 bootleg - + - + - + - + - + - + @@ -8559,32 +8708,32 @@ - + Garou - Mark of the Wolves (bootleg) 1999 bootleg - + - + - + - + - + - + @@ -8595,33 +8744,33 @@ - + Metal Slug 6 (Metal Slug 3 bootleg) 2000 bootleg - + - + - + - + - + - + @@ -8637,28 +8786,28 @@ - + Nightmare in the Dark (bootleg) 2001 bootleg - - + + - + - + - + - + @@ -8669,33 +8818,33 @@ - + Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg) 2003 bootleg - + - + - + - + - + - + @@ -8709,34 +8858,34 @@ - + Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg) 2003 bootleg - + - + - + - + - + - + @@ -8750,35 +8899,35 @@ - + Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg) 2003 bootleg - + - + - + - + - + - + @@ -8794,32 +8943,32 @@ - + Metal Slug 4 Plus (bootleg) 2002 bootleg - + - + - + - + - + - + @@ -8833,31 +8982,31 @@ - + The King of Fighters 2002 (bootleg) 2002 bootleg - + - + - + - + - + - + @@ -8870,31 +9019,31 @@ - + The King of Fighters 2002 Plus (bootleg set 1) 2002 bootleg - + - + - + - + - + - + @@ -8908,31 +9057,31 @@ - + The King of Fighters 2002 Plus (bootleg set 2) 2002 bootleg - + - + - + - + - + - + @@ -8946,31 +9095,31 @@ - + The King of Fighters 2002 Magic Plus (bootleg) 2002 bootleg - + - + - + - + - + - + @@ -8984,31 +9133,31 @@ - + The King of Fighters 2002 Magic Plus II (bootleg) 2002 bootleg - + - + - + - + - + - + @@ -9022,29 +9171,29 @@ - + The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg) 2002 bootleg - + - + - + - + - + - + @@ -9065,32 +9214,32 @@ - + The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg) 2005 bootleg - + - + - + - + - + - + - + @@ -9111,29 +9260,29 @@ - + The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg) 2004 bootleg - + - + - + - + - + - + @@ -9154,31 +9303,31 @@ - + The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg) 2004 bootleg - + - + - + - + - + - + @@ -9193,32 +9342,32 @@ - + Matrimelee / Shin Gouketsuji Ichizoku Toukon (bootleg) 2002 bootleg - + - + - + - + - + - + @@ -9233,33 +9382,33 @@ - + Metal Slug 5 Plus (bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9275,28 +9424,28 @@ - + Puzzle Bobble / Bust-A-Move (Neo-Geo) (bootleg) 1994 bootleg - - + + - + - + - + - + @@ -9305,32 +9454,32 @@ - + SNK vs. Capcom - SVC Chaos (bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9343,34 +9492,34 @@ - + SNK vs. Capcom - SVC Chaos Plus (bootleg set 1) 2003 bootleg - + - + - + - + - + - + @@ -9383,34 +9532,34 @@ - + SNK vs. Capcom - SVC Chaos Plus (bootleg, set 2) 2003 bootleg - + - + - + - + - + - + @@ -9423,33 +9572,33 @@ - + SNK vs. Capcom - SVC Chaos Super Plus (bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9464,31 +9613,31 @@ - + Samurai Shodown V / Samurai Spirits Zero (bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9499,32 +9648,32 @@ - + The King of Fighters 2003 (bootleg, set 1) 2003 bootleg - + - + - + - + - + - + @@ -9544,25 +9693,25 @@ bootleg - + - + - + - + - + - + @@ -9576,32 +9725,32 @@ - + The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9614,31 +9763,57 @@ - - + + + Bang Bang Busters + 2001 + Visco + + + + + + + + + + + + + + + + + + + + + + + The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg) 2003 bootleg - + - + - + - + - + - + @@ -9654,28 +9829,28 @@ - + Digger Man (prototype) 2000 Kyle Hodgetts - + - + - + - + - + - + diff --git a/src/emu/sound/2610intf.c b/src/emu/sound/2610intf.c index 1bcffbf7b20..8e323dd6d77 100644 --- a/src/emu/sound/2610intf.c +++ b/src/emu/sound/2610intf.c @@ -215,6 +215,11 @@ WRITE8_MEMBER( ym2610_device::write ) ym2610_write(m_chip, offset & 3, data); } +void ym2610_device::set_pcmbufs(const UINT8 *buf, size_t size, UINT8* bufdt, size_t sizedt) +{ + ym2610_set_pcmbufs(m_chip, buf, size, bufdt, sizedt); +} + const device_type YM2610 = &device_creator; diff --git a/src/emu/sound/2610intf.h b/src/emu/sound/2610intf.h index 6970cea3e02..4ef81ab2493 100644 --- a/src/emu/sound/2610intf.h +++ b/src/emu/sound/2610intf.h @@ -28,6 +28,7 @@ public: void _IRQHandler(int irq); void _timer_handler(int c,int count,int clock); void _ym2610_update_request(); + void set_pcmbufs(const UINT8 *buf, size_t size, UINT8* bufdt, size_t sizedt); protected: // device-level overrides diff --git a/src/emu/sound/fm.c b/src/emu/sound/fm.c index 1d42602b922..333dc5e16a0 100644 --- a/src/emu/sound/fm.c +++ b/src/emu/sound/fm.c @@ -3665,6 +3665,22 @@ void ym2610_shutdown(void *chip) auto_free(F2610->OPN.ST.device->machine(), F2610); } +void ym2610_set_pcmbufs(void *chip, const UINT8 *buf, size_t size, UINT8* bufdt, size_t sizedt) +{ + YM2610 *F2610 = (YM2610 *)chip; + + F2610->pcmbuf = buf; + F2610->pcm_size = size; + F2610->deltaT.memory = bufdt; + if(F2610->deltaT.memory == NULL) + { + F2610->deltaT.memory = (UINT8*)F2610->pcmbuf; + F2610->deltaT.memory_size = F2610->pcm_size; + } + else + F2610->deltaT.memory_size = sizedt; +} + /* reset one of chip */ void ym2610_reset_chip(void *chip) { @@ -3674,21 +3690,23 @@ void ym2610_reset_chip(void *chip) YM_DELTAT *DELTAT = &F2610->deltaT; astring name; + astring name2; device_t* dev = F2610->OPN.ST.device; /* setup PCM buffers again */ name.printf("%s",dev->tag()); - F2610->pcmbuf = (const UINT8 *)dev->machine().root_device().memregion(name)->base(); - F2610->pcm_size = dev->machine().root_device().memregion(name)->bytes(); - name.printf("%s.deltat",dev->tag()); - F2610->deltaT.memory = (UINT8 *)dev->machine().root_device().memregion(name)->base(); - if(F2610->deltaT.memory == NULL) - { - F2610->deltaT.memory = (UINT8*)F2610->pcmbuf; - F2610->deltaT.memory_size = F2610->pcm_size; - } - else - F2610->deltaT.memory_size = dev->machine().root_device().memregion(name)->bytes(); + name2.printf("%s.deltat",dev->tag()); + + ym2610_set_pcmbufs(chip, + (const UINT8 *)dev->machine().root_device().memregion(name)->base(), + + dev->machine().root_device().memregion(name)->bytes(), + + (UINT8 *)dev->machine().root_device().memregion(name2)->base(), + + dev->machine().root_device().memregion(name2)->bytes() + + ); /* Reset Prescaler */ OPNSetPres( OPN, 6*24, 6*24, 4*2); /* OPN 1/6 , SSG 1/4 */ diff --git a/src/emu/sound/fm.h b/src/emu/sound/fm.h index c887ab3aa85..0c37a226905 100644 --- a/src/emu/sound/fm.h +++ b/src/emu/sound/fm.h @@ -190,6 +190,8 @@ void ym2610_update_one(void *chip, FMSAMPLE **buffer, int length); void ym2610b_update_one(void *chip, FMSAMPLE **buffer, int length); #endif /* BUILD_YM2610B */ +void ym2610_set_pcmbufs(void *chip, const UINT8 *buf, size_t size, UINT8* bufdt, size_t sizedt); + int ym2610_write(void *chip, int a,unsigned char v); unsigned char ym2610_read(void *chip,int a); int ym2610_timer_over(void *chip, int c ); diff --git a/src/mame/drivers/neogeo.c b/src/mame/drivers/neogeo.c index 35c17b64ecd..bef04ed8760 100644 --- a/src/mame/drivers/neogeo.c +++ b/src/mame/drivers/neogeo.c @@ -386,11 +386,69 @@ cpu #0 (PC=00C18C40): unmapped memory word write to 00380000 = 0000 & 00FF } #endif +void neogeo_state::select_slot(UINT16 data, UINT16 mem_mask) +{ + if (mem_mask & 0x00ff) + { + int newslot = data & 0x7; + + if (newslot < 6) + { + // m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x000080, 0x0fffff); // unmap the cart (but not the vectors) + m_maincpu->space(AS_PROGRAM).unmap_write(0x200000, 0x2fffff); // unmap the bank region + m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, "cartridge"); + install_bankswitch(); + + + + if (neogeo_cart_table[newslot].regions.maincpu_region != 0) + { + current_slot = newslot; + + current_maincpu_region = neogeo_cart_table[current_slot].regions.maincpu_region; + current_maincpu_region_size = neogeo_cart_table[current_slot].regions.maincpu_region_size; + current_audiocpu_region = neogeo_cart_table[current_slot].regions.audiocpu_region; + current_audiocpu_region_size = neogeo_cart_table[current_slot].regions.audiocpu_region_size; + current_fixed_region = neogeo_cart_table[current_slot].regions.fixed_region; + current_fixed_region_size = neogeo_cart_table[current_slot].regions.fixed_region_size; + current_ymsnd_region = neogeo_cart_table[current_slot].regions.ymsnd_region; + current_ymsnd_region_size = neogeo_cart_table[current_slot].regions.ymsnd_region_size; + current_ymdelta_region = neogeo_cart_table[current_slot].regions.ymdelta_region; + current_ymdelta_region_size = neogeo_cart_table[current_slot].regions.ymdelta_region_size; + current_audiocrypt_region = neogeo_cart_table[current_slot].regions.audiocrypt_region; + current_audiocrypt_region_size = neogeo_cart_table[current_slot].regions.audiocrypt_region_size; + current_sprites_region = neogeo_cart_table[current_slot].regions.sprites_region; + current_sprites_region_size = neogeo_cart_table[current_slot].regions.sprites_region_size; + + + // setup cartridge ROM area + m_maincpu->space(AS_PROGRAM).install_read_bank(0x000080, 0x0fffff, "cart_rom"); + membank("cart_rom")->set_base(current_maincpu_region + 0x80); + neogeo_main_cpu_banking_init(); + ym2610_device* ym = (ym2610_device*)machine().device("ymsnd"); + ym->reset(); + ym->set_pcmbufs(current_ymsnd_region, current_ymsnd_region_size, current_ymdelta_region, current_ymdelta_region_size); + neogeo_audio_cpu_banking_init(0); + + // install any protection handlers etc. for the slot we just enabled + neogeo_cart_table[current_slot].slot_enable((void*)this); + + } + + } + + + } + + +} + WRITE16_MEMBER(neogeo_state::io_control_w) { switch (offset) { case 0x00: select_controller(data & 0x00ff); break; + case 0x10: if (m_type == NEOGEO_MVS) select_slot(data, mem_mask); break; case 0x18: if (m_type == NEOGEO_MVS) set_output_latch(data & 0x00ff); break; case 0x20: if (m_type == NEOGEO_MVS) set_output_data(data & 0x00ff); break; case 0x28: if (m_type == NEOGEO_MVS) m_upd4990a->control_16_w(space, 0, data, mem_mask); break; @@ -582,7 +640,7 @@ void neogeo_state::_set_main_cpu_bank_address() { if (m_type == NEOGEO_CD) return; - m_bank_cartridge->set_base(m_region_maincpu->base() + m_main_cpu_bank_address); + m_bank_cartridge->set_base(current_maincpu_region + m_main_cpu_bank_address); } @@ -599,7 +657,7 @@ void neogeo_state::neogeo_set_main_cpu_bank_address( UINT32 bank_address ) WRITE16_MEMBER(neogeo_state::main_cpu_bank_select_w) { UINT32 bank_address; - UINT32 len = m_region_maincpu->bytes(); + UINT32 len = current_maincpu_region_size; if ((len <= 0x100000) && (data & 0x07)) logerror("PC %06x: warning: bankswitch to %02x but no banks available\n", space.device().safe_pc(), data); @@ -621,14 +679,14 @@ WRITE16_MEMBER(neogeo_state::main_cpu_bank_select_w) void neogeo_state::neogeo_main_cpu_banking_init() { /* create vector banks */ - m_bank_vectors->configure_entry(1, m_region_maincpu->base()); + m_bank_vectors->configure_entry(1, current_maincpu_region); m_bank_vectors->configure_entry(0, memregion("mainbios")->base()); m_bank_vectors->set_entry(0); if (m_type != NEOGEO_CD) { /* set initial main CPU bank */ - if (m_region_maincpu->bytes() > 0x100000) + if (current_maincpu_region_size > 0x100000) neogeo_set_main_cpu_bank_address(0x100000); else neogeo_set_main_cpu_bank_address(0x000000); @@ -650,7 +708,7 @@ READ8_MEMBER(neogeo_state::audio_cpu_bank_select_r) } -void neogeo_state::neogeo_audio_cpu_banking_init() +void neogeo_state::neogeo_audio_cpu_banking_init(int set_entry) { if (m_type == NEOGEO_CD) return; @@ -660,12 +718,12 @@ void neogeo_state::neogeo_audio_cpu_banking_init() UINT32 address_mask; /* audio bios/cartridge selection */ - m_bank_audio_main->configure_entry(1, memregion("audiocpu")->base()); + m_bank_audio_main->configure_entry(1, current_audiocpu_region); if (memregion("audiobios")) m_bank_audio_main->configure_entry(0, memregion("audiobios")->base()); else /* on hardware with no SM1 ROM, the cart ROM is always enabled */ - m_bank_audio_main->configure_entry(0, memregion("audiocpu")->base()); - m_bank_audio_main->set_entry(0); + m_bank_audio_main->configure_entry(0, current_audiocpu_region); + if (set_entry) m_bank_audio_main->set_entry(0); // if this is allowed when the game slot changes garou, zupapa etc. have no proper sounds, check. /* audio banking */ m_bank_audio_cart[0] = membank("audio_f000"); @@ -673,8 +731,8 @@ void neogeo_state::neogeo_audio_cpu_banking_init() m_bank_audio_cart[2] = membank("audio_c000"); m_bank_audio_cart[3] = membank("audio_8000"); - address_mask = (memregion("audiocpu")->bytes() - 0x10000 - 1) & 0x3ffff; - rgn = memregion("audiocpu")->base(); + address_mask = (current_audiocpu_region_size - 0x10000 - 1) & 0x3ffff; + rgn = current_audiocpu_region; for (region = 0; region < 4; region++) { @@ -864,7 +922,7 @@ void neogeo_state::machine_start() neogeo_main_cpu_banking_init(); /* set the initial audio CPU ROM banks */ - neogeo_audio_cpu_banking_init(); + neogeo_audio_cpu_banking_init(1); create_interrupt_timers(); @@ -907,6 +965,7 @@ void neogeo_state::machine_start() void neogeo_state::machine_reset() { + offs_t offs; address_space &space = m_maincpu->space(AS_PROGRAM); @@ -1005,7 +1064,7 @@ ADDRESS_MAP_END * *************************************/ -static INPUT_PORTS_START( neogeo ) +INPUT_PORTS_START( neogeo ) PORT_START("P1/DSW") PORT_DIPNAME( 0x0001, 0x0001, "Setting Mode" ) PORT_DIPLOCATION("SW:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) @@ -1072,7 +1131,7 @@ static INPUT_PORTS_START( neogeo ) PORT_START("TEST") PORT_BIT( 0x003f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* what is this? If ACTIVE_LOW, MVS-6 slot detected, when ACTIVE_HIGH MVS-1 slot (AES) detected */ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SPECIAL ) /* what is this? If ACTIVE_LOW, MVS-6 slot detected, when ACTIVE_HIGH MVS-1 slot (AES) detected */ PORT_SERVICE_NO_TOGGLE( 0x0080, IP_ACTIVE_LOW ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -1080,48 +1139,145 @@ INPUT_PORTS_END +struct neogeo_cart_region neogeo_cart_table[] = +{ + { ":cart1", 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { ":cart2", 1, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { ":cart3", 2, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { ":cart4", 3, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { ":cart5", 4, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { ":cart6", 5, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, neogeo_state::slot_enable_default, 0 }, + { 0 } +}; + DEVICE_IMAGE_LOAD_MEMBER( neogeo_state, neo_cartridge ) { + struct neogeo_cart_region *mt_cart = &neogeo_cart_table[0], *this_cart; + + /* First, determine where this cart has to be loaded */ + while (mt_cart->tag) + { + if (strcmp(mt_cart->tag, image.device().tag()) == 0) + break; + + mt_cart++; + } + + this_cart = mt_cart; + + int slot = this_cart->slot; + + + UINT32 size; device_t* ym = machine().device("ymsnd"); // first check software list if(image.software_entry() != NULL) { - // create memory regions + // create memory regions size = image.get_software_region_length("maincpu"); - machine().memory().region_free(":maincpu"); - machine().memory().region_alloc(":maincpu",size, 2, ENDIANNESS_BIG); - // Reset the reference to the region - m_region_maincpu.findit(); + + if (slot == 0) + { + + machine().memory().region_free(":maincpu"); + machine().memory().region_alloc(":maincpu", size, 2, ENDIANNESS_BIG); + + current_maincpu_region = memregion("maincpu")->base(); + current_maincpu_region_size = memregion("maincpu")->bytes(); + + + // Reset the reference to the region + //m_region_maincpu.findit(); #ifdef LSB_FIRST - // software list ROM loading currently does not fix up endianness for us, so we need to do it by hand - UINT16 *src = (UINT16 *)image.get_software_region("maincpu"); - UINT16 *dst = (UINT16 *)memregion("maincpu")->base(); - for (int i=0; ibase(),image.get_software_region("maincpu"),size); + memcpy(current_maincpu_region, image.get_software_region("maincpu"), size); +#endif + } + else + { + // NEW... + this_cart->regions.maincpu_region = auto_alloc_array(machine(), UINT8, size); +#ifdef LSB_FIRST + // software list ROM loading currently does not fix up endianness for us, so we need to do it by hand + UINT16 *src = (UINT16 *)image.get_software_region("maincpu"); + UINT16 *dst = (UINT16 *)this_cart->regions.maincpu_region; + for (int i = 0; i < size / 2; i++) + { + dst[i] = FLIPENDIAN_INT16(src[i]); + } +#else + memcpy(this_cart->regions.maincpu_region, image.get_software_region("maincpu"), size); #endif - size = image.get_software_region_length("fixed"); - machine().memory().region_free(":fixed"); - machine().memory().region_alloc(":fixed",size,1, ENDIANNESS_LITTLE); - memcpy(memregion("fixed")->base(),image.get_software_region("fixed"),size); - m_region_fixed.findit(); + current_maincpu_region = this_cart->regions.maincpu_region; + current_maincpu_region_size = size; - if(image.get_software_region("audiocpu") != NULL) + } + + size = image.get_software_region_length("fixed"); + + if (slot == 0) + { + machine().memory().region_free(":fixed"); + machine().memory().region_alloc(":fixed", size, 1, ENDIANNESS_LITTLE); + + current_fixed_region = memregion("fixed")->base(); + current_fixed_region_size = memregion("fixed")->bytes(); + + memcpy(current_fixed_region, image.get_software_region("fixed"), size); + //m_region_fixed.findit(); + } + else + { + // NEW... + this_cart->regions.fixed_region = auto_alloc_array(machine(), UINT8, size); + memcpy(this_cart->regions.fixed_region, image.get_software_region("fixed"), size); + + current_fixed_region = this_cart->regions.fixed_region; + current_fixed_region_size = size; + + } + + if (image.get_software_region("audiocpu") != NULL) { size = image.get_software_region_length("audiocpu"); - machine().memory().region_free(":audiocpu"); - machine().memory().region_alloc(":audiocpu",size+0x10000,1, ENDIANNESS_LITTLE); - memcpy(memregion("audiocpu")->base(),image.get_software_region("audiocpu"),size); - memcpy(memregion("audiocpu")->base()+0x10000,image.get_software_region("audiocpu"),size); // avoid reloading in XML, should just improve banking instead tho? + + if (slot == 0) + { + machine().memory().region_free(":audiocpu"); + machine().memory().region_alloc(":audiocpu", size + 0x10000, 1, ENDIANNESS_LITTLE); + + current_audiocpu_region = memregion("audiocpu")->base(); + current_audiocpu_region_size = memregion("audiocpu")->bytes(); + + memcpy(current_audiocpu_region, image.get_software_region("audiocpu"), size); + memcpy(current_audiocpu_region + 0x10000, image.get_software_region("audiocpu"), size); // avoid reloading in XML, should just improve banking instead tho? + } + else + { + // NEW... + this_cart->regions.audiocpu_region = auto_alloc_array(machine(), UINT8, size + 0x10000); + memcpy(this_cart->regions.audiocpu_region + 0x00000, image.get_software_region("audiocpu"), size); + memcpy(this_cart->regions.audiocpu_region + 0x10000, image.get_software_region("audiocpu"), size); // avoid reloading in XML, should just improve banking instead tho? + + + current_audiocpu_region = this_cart->regions.audiocpu_region; + current_audiocpu_region_size = size + 0x10000;; + + } + } @@ -1130,43 +1286,169 @@ DEVICE_IMAGE_LOAD_MEMBER( neogeo_state, neo_cartridge ) Thus we preemptively reset it here while the old pointers are still valid so it's up to date and doesn't generate samples below when we reset it for the new pointers. */ + + ym->reset(); size = image.get_software_region_length("ymsnd"); - machine().memory().region_free(":ymsnd"); - machine().memory().region_alloc(":ymsnd",size,1, ENDIANNESS_LITTLE); - memcpy(memregion("ymsnd")->base(),image.get_software_region("ymsnd"),size); + + if (slot == 0) + { + machine().memory().region_free(":ymsnd"); + machine().memory().region_alloc(":ymsnd", size, 1, ENDIANNESS_LITTLE); + + current_ymsnd_region = memregion("ymsnd")->base(); + current_ymsnd_region_size = memregion("ymsnd")->bytes(); + + memcpy(current_ymsnd_region, image.get_software_region("ymsnd"), size); + } + else + { + // NEW... + this_cart->regions.ymsnd_region = auto_alloc_array(machine(), UINT8, size); + memcpy(this_cart->regions.ymsnd_region, image.get_software_region("ymsnd"), size); + + current_ymsnd_region = this_cart->regions.ymsnd_region; + current_ymsnd_region_size = size; + + + } + + if(image.get_software_region("ymsnd.deltat") != NULL) { size = image.get_software_region_length("ymsnd.deltat"); - machine().memory().region_free(":ymsnd.deltat"); - machine().memory().region_alloc(":ymsnd.deltat",size,1, ENDIANNESS_LITTLE); - memcpy(memregion("ymsnd.deltat")->base(),image.get_software_region("ymsnd.deltat"),size); + + if (slot == 0) + { + machine().memory().region_free(":ymsnd.deltat"); + machine().memory().region_alloc(":ymsnd.deltat", size, 1, ENDIANNESS_LITTLE); + + current_ymdelta_region = memregion("ymsnd.deltat")->base(); + current_ymdelta_region_size = memregion("ymsnd.deltat")->bytes(); + + memcpy(current_ymdelta_region, image.get_software_region("ymsnd.deltat"), size); + } + else + { + // NEW... + this_cart->regions.ymdelta_region = auto_alloc_array(machine(), UINT8, size); + memcpy(this_cart->regions.ymdelta_region, image.get_software_region("ymsnd.deltat"), size); + current_ymdelta_region = this_cart->regions.ymdelta_region; + current_ymdelta_region_size = size; + + } + } else - machine().memory().region_free(":ymsnd.deltat"); // removing the region will fix sound glitches in non-Delta-T games + { + if (slot == 0) + { + machine().memory().region_free(":ymsnd.deltat"); // removing the region will fix sound glitches in non-Delta-T games + } + else + { + // NEW + this_cart->regions.ymdelta_region = 0; + current_ymdelta_region = 0; + current_ymdelta_region_size = 0; + + } + + } ym->reset(); // and this makes the new pointers take effect + size = image.get_software_region_length("sprites"); - machine().memory().region_free(":sprites"); - machine().memory().region_alloc(":sprites",size,1, ENDIANNESS_LITTLE); - memcpy(memregion("sprites")->base(),image.get_software_region("sprites"),size); - // Reset the reference to the region - m_region_sprites.findit(); + + if (slot == 0) + { + machine().memory().region_free(":sprites"); + machine().memory().region_alloc(":sprites", size, 1, ENDIANNESS_LITTLE); + + current_sprites_region = memregion("sprites")->base(); + current_sprites_region_size = memregion("sprites")->bytes(); + + + memcpy(current_sprites_region, image.get_software_region("sprites"), size); + // Reset the reference to the region + //m_region_sprites.findit(); + } + else + { + // NEW... + this_cart->regions.sprites_region = auto_alloc_array(machine(), UINT8, size); + memcpy(this_cart->regions.sprites_region, image.get_software_region("sprites"), size); + current_sprites_region = this_cart->regions.sprites_region; + current_sprites_region_size = size; + } + if(image.get_software_region("audiocrypt") != NULL) // encrypted Z80 code { size = image.get_software_region_length("audiocrypt"); - machine().memory().region_alloc(":audiocrypt",size,1, ENDIANNESS_LITTLE); - memcpy(memregion("audiocrypt")->base(),image.get_software_region("audiocrypt"),size); - // allocate the audiocpu region to decrypt data into - machine().memory().region_free(":audiocpu"); - machine().memory().region_alloc(":audiocpu",size+0x10000,1, ENDIANNESS_LITTLE); + + if (slot == 0) + { + machine().memory().region_alloc(":audiocrypt", size, 1, ENDIANNESS_LITTLE); + + current_audiocrypt_region = memregion("audiocrypt")->base(); + current_audiocrypt_region_size = memregion("audiocrypt")->bytes(); + + memcpy(current_audiocrypt_region, image.get_software_region("audiocrypt"), size); + // allocate the audiocpu region to decrypt data into + machine().memory().region_free(":audiocpu"); + machine().memory().region_alloc(":audiocpu", size + 0x10000, 1, ENDIANNESS_LITTLE); + + current_audiocpu_region = memregion("audiocpu")->base(); + current_audiocpu_region_size = memregion("audiocpu")->bytes(); + + } + else + { + // NEW... + this_cart->regions.audiocrypt_region = auto_alloc_array(machine(), UINT8, size); + current_audiocrypt_region = this_cart->regions.audiocrypt_region; + current_audiocrypt_region_size = size; + + + memcpy(this_cart->regions.audiocrypt_region, image.get_software_region("audiocrypt"), size); + this_cart->regions.audiocpu_region = auto_alloc_array(machine(), UINT8, size + 0x10000); + current_audiocpu_region = this_cart->regions.audiocpu_region; + current_audiocpu_region_size = size + 0x10000; + } + } - // setup cartridge ROM area - m_maincpu->space(AS_PROGRAM).install_read_bank(0x000080,0x0fffff,"cart_rom"); - membank("cart_rom")->set_base(m_region_maincpu->base() + 0x80); + neogeo_cart_table[slot].regions.maincpu_region = current_maincpu_region; + neogeo_cart_table[slot].regions.maincpu_region_size = current_maincpu_region_size; + neogeo_cart_table[slot].regions.audiocpu_region = current_audiocpu_region; + neogeo_cart_table[slot].regions.audiocpu_region_size = current_audiocpu_region_size; + neogeo_cart_table[slot].regions.fixed_region = current_fixed_region; + neogeo_cart_table[slot].regions.fixed_region_size = current_fixed_region_size; + neogeo_cart_table[slot].regions.ymsnd_region = current_ymsnd_region; + neogeo_cart_table[slot].regions.ymsnd_region_size = current_ymsnd_region_size; + neogeo_cart_table[slot].regions.ymdelta_region = current_ymdelta_region; + neogeo_cart_table[slot].regions.ymdelta_region_size = current_ymdelta_region_size; + neogeo_cart_table[slot].regions.audiocrypt_region = current_audiocrypt_region; + neogeo_cart_table[slot].regions.audiocrypt_region_size = current_audiocrypt_region_size; + neogeo_cart_table[slot].regions.sprites_region = current_sprites_region; + neogeo_cart_table[slot].regions.sprites_region_size = current_sprites_region_size; + + if (slot == 0) + { + // setup cartridge ROM area + m_maincpu->space(AS_PROGRAM).install_read_bank(0x000080, 0x0fffff, "cart_rom"); + membank("cart_rom")->set_base(current_maincpu_region + 0x80); + + + } + + + + // handle possible protection - mvs_install_protection(image); + mvs_install_protection(image, slot); + + optimize_sprite_data(); // this takes a long time on big carts, so best use more memory and do it now rather than every time the active cart changes at runtime return IMAGE_INIT_PASS; } @@ -1208,7 +1490,7 @@ MACHINE_CONFIG_START( neogeo_base, neogeo_state ) MCFG_SOUND_ROUTE(2, "rspeaker", 1.0) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( neogeo, neogeo_base ) +MACHINE_CONFIG_DERIVED( neogeo, neogeo_base ) MCFG_WATCHDOG_TIME_INIT(attotime::from_usec(128762)) /* NEC uPD4990A RTC */ @@ -1218,10 +1500,21 @@ static MACHINE_CONFIG_DERIVED( neogeo, neogeo_base ) MCFG_MEMCARD_HANDLER(neogeo) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( mvs, neogeo ) - MCFG_CARTSLOT_ADD("cart") + +#define MCFG_NEOGEO_CARTSLOT_ADD(_tag) \ + MCFG_CARTSLOT_ADD(_tag) \ + MCFG_CARTSLOT_INTERFACE("neo_cart") \ MCFG_CARTSLOT_LOAD(neogeo_state,neo_cartridge) - MCFG_CARTSLOT_INTERFACE("neo_cart") + +MACHINE_CONFIG_DERIVED( mvs, neogeo ) + MCFG_NEOGEO_CARTSLOT_ADD("cart1") + MCFG_NEOGEO_CARTSLOT_ADD("cart2") + MCFG_NEOGEO_CARTSLOT_ADD("cart3") + MCFG_NEOGEO_CARTSLOT_ADD("cart4") + MCFG_NEOGEO_CARTSLOT_ADD("cart5") + MCFG_NEOGEO_CARTSLOT_ADD("cart6") + + MCFG_SOFTWARE_LIST_ADD("cart_list","neogeo") MACHINE_CONFIG_END @@ -1235,8 +1528,32 @@ MACHINE_CONFIG_END DRIVER_INIT_MEMBER(neogeo_state,neogeo) { + // make sure legacy MAME style loading still works + if (current_slot == 0) + { + current_maincpu_region = memregion("maincpu")->base(); + current_maincpu_region_size = memregion("maincpu")->bytes(); + current_ymsnd_region = memregion("ymsnd")->base(); + current_ymsnd_region_size = memregion("ymsnd")->bytes(); + current_sprites_region = memregion("sprites")->base(); + current_sprites_region_size = memregion("sprites")->bytes(); + current_fixed_region = memregion("fixed")->base(); + current_fixed_region_size = memregion("fixed")->bytes(); + current_audiocpu_region = memregion("audiocpu")->base(); + current_audiocpu_region_size = memregion("audiocpu")->bytes(); + current_audiocrypt_region = memregion("audiocrypt")->base(); + current_audiocrypt_region_size = memregion("audiocrypt")->bytes(); + current_ymdelta_region = memregion("ymsnd.deltat")->base(); + current_ymdelta_region_size = memregion("ymsnd.deltat")->bytes(); + } + + neogeo_cart_table[current_slot].slot_enable = slot_enable_default; + m_fixed_layer_bank_type = 0; } +DRIVER_INIT_MEMBER(neogeo_state, neogeo_postinit) +{ + neogeo_cart_table[current_slot].slot_enable((void*)this); +} -#include "neogeo.inc" diff --git a/src/mame/drivers/neogeo.inc b/src/mame/drivers/neogeomvs.c similarity index 98% rename from src/mame/drivers/neogeo.inc rename to src/mame/drivers/neogeomvs.c index fbadecc582b..63979fb71ab 100644 --- a/src/mame/drivers/neogeo.inc +++ b/src/mame/drivers/neogeomvs.c @@ -912,6 +912,8 @@ */ +#include "emu.h" +#include "includes/neogeo.h" /* dummy entry for the dummy bios driver */ ROM_START( neogeo ) @@ -9277,65 +9279,286 @@ INPUT_PORTS_END ****************************************************************************/ +// updated +void neogeo_state::install_bankswitch() // standard cart bankswitching +{ + m_maincpu->space(AS_PROGRAM).install_write_handler(0x2ffff0, 0x2fffff, write16_delegate(FUNC(neogeo_state::main_cpu_bank_select_w),this)); +} -DRIVER_INIT_MEMBER(neogeo_state,fatfury2) +void neogeo_state::slot_enable_default(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->m_fixed_layer_bank_type = 0; +// s->m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, "cartridge"); +// s->install_bankswitch(); +} + +void neogeo_state::slot_enable_cmc_bank1(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; +} + +void neogeo_state::slot_enable_cmc_bank2(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 2; +} + + + + + +void neogeo_state::slot_enable_garou(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->garou_install_protection(); +} + +void neogeo_state::slot_enable_garouh(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->garouh_install_protection(); +} + +void neogeo_state::slot_enable_kof2000(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 2; + s->kof2000_install_protection(); +} + + + +void neogeo_state::slot_enable_mslug3(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->mslug3_install_protection(); +} + +void neogeo_state::slot_enable_kof99(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->kof99_install_protection(); +} + +void neogeo_state::slot_enable_pvc_cmc2(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 2; + s->install_pvc_protection(); +} + +void neogeo_state::slot_enable_pvc_cmc1(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->install_pvc_protection(); +} + +void neogeo_state::slot_enable_pvc_boot(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->install_pvc_protection(); +} + +void neogeo_state::slot_enable_fatfury2(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->fatfury2_install_protection(); + +} + +void neogeo_state::slot_enable_kof98(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->install_kof98_protection(); +} + +void neogeo_state::slot_enable_mslugx(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->mslugx_install_protection(); +} + +void neogeo_state::slot_enable_kof10th(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->install_kof10th_protection(); +} + + +void neogeo_state::slot_enable_ms5plus(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_fixed_layer_bank_type = 1; + s->install_ms5plus_protection(); +} + +void neogeo_state::slot_enable_kf2k3bl(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->kf2k3bl_install_protection(); +} + +void neogeo_state::slot_enable_kf2k3pl(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->kf2k3pl_install_protection(); +} + +void neogeo_state::slot_enable_jockeygp(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + + s->m_fixed_layer_bank_type = 1; + + /* install some extra RAM */ + s->m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x201fff); + +// s->m_maincpu->space(AS_PROGRAM).install_read_port(0x280000, 0x280001, "IN5"); +// s->m_maincpu->space(AS_PROGRAM).install_read_port(0x2c0000, 0x2c0001, "IN6"); +} + +void neogeo_state::slot_enable_vliner(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + s->m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x201fff); + s->m_maincpu->space(AS_PROGRAM).install_read_port(0x280000, 0x280001, "IN5"); + s->m_maincpu->space(AS_PROGRAM).install_read_port(0x2c0000, 0x2c0001, "IN6"); +} + +void neogeo_state::slot_enable_kog(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + /* overlay cartridge ROM */ + s->m_maincpu->space(AS_PROGRAM).install_read_port(0x0ffffe, 0x0fffff, "JUMPER"); +} + + +void neogeo_state::slot_enable_sbp(void *state) +{ + neogeo_state* s = (neogeo_state*)state; + s->slot_enable_default(s); + // there seems to be a protection device living around here.. + // if you nibble swap the data in the rom the game will boot + // there are also writes to 0x1080.. + // + // other stuff going on as well tho, the main overlay is still missing, and p1 inputs don't work + s->m_maincpu->space(AS_PROGRAM).install_read_handler(0x00200, 0x001fff, read16_delegate(FUNC(neogeo_state::sbp_lowerrom_r),s)); + s->m_maincpu->space(AS_PROGRAM).install_write_handler(0x00200, 0x001fff, write16_delegate(FUNC(neogeo_state::sbp_lowerrom_w),s)); +} + +DRIVER_INIT_MEMBER(neogeo_state,svc) { DRIVER_INIT_CALL(neogeo); - fatfury2_install_protection(); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_cmc2; + svc_px_decrypt(); + neo_pcm2_swap(3); + neogeo_cmc50_m1_decrypt(); + kof2000_neogeo_gfx_decrypt(0x57); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,zupapa) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0xbd); + DRIVER_INIT_CALL(neogeo_postinit); } + +DRIVER_INIT_MEMBER(neogeo_state,kof99) +{ + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kof99; + kof99_decrypt_68k(); + kof99_neogeo_gfx_decrypt(0x00); + init_sma(); + DRIVER_INIT_CALL(neogeo_postinit); +} + + +DRIVER_INIT_MEMBER(neogeo_state,fatfury2) +{ + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_fatfury2; + fatfury2_init_protection(); + DRIVER_INIT_CALL(neogeo_postinit); +} + + DRIVER_INIT_MEMBER(neogeo_state,kof98) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kof98; kof98_decrypt_68k(); - install_kof98_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslugx) { DRIVER_INIT_CALL(neogeo); - mslugx_install_protection(); + neogeo_cart_table[current_slot].slot_enable = slot_enable_mslugx; + mslugx_init_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } -DRIVER_INIT_MEMBER(neogeo_state,kof99) -{ - DRIVER_INIT_CALL(neogeo); - kof99_decrypt_68k(); - m_fixed_layer_bank_type = 1; - kof99_neogeo_gfx_decrypt(0x00); - kof99_install_protection(); -} DRIVER_INIT_MEMBER(neogeo_state,kof99k) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0x00); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,garou) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_garou; garou_decrypt_68k(); - m_fixed_layer_bank_type = 1; kof99_neogeo_gfx_decrypt(0x06); - garou_install_protection(); + init_sma(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,garouh) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_garouh; garouh_decrypt_68k(); - m_fixed_layer_bank_type = 1; kof99_neogeo_gfx_decrypt(0x06); - garouh_install_protection(); + init_sma(); + DRIVER_INIT_CALL(neogeo_postinit); + } DRIVER_INIT_MEMBER(neogeo_state,garoubl) @@ -9343,22 +9566,25 @@ DRIVER_INIT_MEMBER(neogeo_state,garoubl) DRIVER_INIT_CALL(neogeo); neogeo_bootleg_sx_decrypt(2); neogeo_bootleg_cx_decrypt(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslug3) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_mslug3; mslug3_decrypt_68k(); - m_fixed_layer_bank_type = 1; kof99_neogeo_gfx_decrypt(0xad); - mslug3_install_protection(); + init_sma(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslug3h) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0xad); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslug3b6) @@ -9366,32 +9592,37 @@ DRIVER_INIT_MEMBER(neogeo_state,mslug3b6) DRIVER_INIT_CALL(neogeo); neogeo_bootleg_sx_decrypt(2); cmc42_neogeo_gfx_decrypt(0xad); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2000) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kof2000; kof2000_decrypt_68k(); - m_fixed_layer_bank_type = 2; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x00); - kof2000_install_protection(); + init_sma(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2000n) -{ +{ DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 2; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank2; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x00); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2001) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof2000_neogeo_gfx_decrypt(0x1e); neogeo_cmc50_m1_decrypt(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,cthd2003) @@ -9399,6 +9630,7 @@ DRIVER_INIT_MEMBER(neogeo_state,cthd2003) DRIVER_INIT_CALL(neogeo); decrypt_cthd2003(); patch_cthd2003(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,ct2k3sp) @@ -9406,6 +9638,7 @@ DRIVER_INIT_MEMBER(neogeo_state,ct2k3sp) DRIVER_INIT_CALL(neogeo); decrypt_ct2k3sp(); patch_cthd2003(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,ct2k3sa) @@ -9413,15 +9646,18 @@ DRIVER_INIT_MEMBER(neogeo_state,ct2k3sa) DRIVER_INIT_CALL(neogeo); decrypt_ct2k3sa(); patch_ct2k3sa(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslug4) { + DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; /* USA violent content screen is wrong -- not a bug, confirmed on real hardware! */ + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; /* USA violent content screen is wrong -- not a bug, confirmed on real hardware! */ neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x31); neo_pcm2_snk_1999(8); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,ms4plus) @@ -9430,57 +9666,65 @@ DRIVER_INIT_MEMBER(neogeo_state,ms4plus) cmc50_neogeo_gfx_decrypt(0x31); neo_pcm2_snk_1999(8); neogeo_cmc50_m1_decrypt(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,ganryu) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0x07); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,s1945p) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0x05); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,preisle2) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0x9f); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,bangbead) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0xf8); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,nitd) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0xff); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,sengoku3) { DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; kof99_neogeo_gfx_decrypt(0xfe); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,rotd) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; neo_pcm2_snk_1999(16); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x3f); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2002) @@ -9490,6 +9734,7 @@ DRIVER_INIT_MEMBER(neogeo_state,kof2002) neo_pcm2_swap(0); neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0xec); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2002b) @@ -9498,8 +9743,9 @@ DRIVER_INIT_MEMBER(neogeo_state,kof2002b) kof2002_decrypt_68k(); neo_pcm2_swap(0); neogeo_cmc50_m1_decrypt(); - kof2002b_gfx_decrypt(memregion("sprites")->base(),0x4000000); - kof2002b_gfx_decrypt(memregion("fixed")->base(),0x20000); + kof2002b_gfx_decrypt(current_sprites_region,0x4000000); + kof2002b_gfx_decrypt(current_fixed_region,0x20000); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k2pls) @@ -9509,6 +9755,7 @@ DRIVER_INIT_MEMBER(neogeo_state,kf2k2pls) neo_pcm2_swap(0); neogeo_cmc50_m1_decrypt(); cmc50_neogeo_gfx_decrypt(0xec); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k2mp) @@ -9519,6 +9766,7 @@ DRIVER_INIT_MEMBER(neogeo_state,kf2k2mp) neogeo_cmc50_m1_decrypt(); neogeo_bootleg_sx_decrypt(2); cmc50_neogeo_gfx_decrypt(0xec); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k2mp2) @@ -9529,13 +9777,16 @@ DRIVER_INIT_MEMBER(neogeo_state,kf2k2mp2) neogeo_cmc50_m1_decrypt(); neogeo_bootleg_sx_decrypt(1); cmc50_neogeo_gfx_decrypt(0xec); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof10th) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kof10th; decrypt_kof10th(); - install_kof10th_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf10thep) @@ -9543,129 +9794,91 @@ DRIVER_INIT_MEMBER(neogeo_state,kf10thep) DRIVER_INIT_CALL(neogeo); kf10thep_px_decrypt(); neogeo_bootleg_sx_decrypt(1); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k5uni) { DRIVER_INIT_CALL(neogeo); decrypt_kf2k5uni(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2k4se) { DRIVER_INIT_CALL(neogeo); decrypt_kof2k4se_68k(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,matrim) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank2; matrim_decrypt_68k(); neo_pcm2_swap(1); - m_fixed_layer_bank_type = 2; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x6a); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,matrimbl) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank2; matrim_decrypt_68k(); - m_fixed_layer_bank_type = 2; matrimbl_decrypt(); neogeo_sfix_decrypt(); /* required for text layer */ + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,pnyaa) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; neo_pcm2_snk_1999(4); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x2e); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,mslug5) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_cmc1; mslug5_decrypt_68k(); neo_pcm2_swap(2); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x19); - install_pvc_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } -void neogeo_state::install_banked_bios() -{ - m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0, 0x0e0000, "bankedbios"); - membank("bankedbios")->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000); - membank("bankedbios")->set_entry(1); -} -INPUT_CHANGED_MEMBER(neogeo_state::select_bios) -{ - membank("bankedbios")->set_entry(newval ? 0 : 1); -} - -DRIVER_INIT_MEMBER(neogeo_state,ms5pcb) -{ - DRIVER_INIT_CALL(neogeo); - - mslug5_decrypt_68k(); - svcpcb_gfx_decrypt(); - neogeo_cmc50_m1_decrypt(); - kof2000_neogeo_gfx_decrypt(0x19); - m_fixed_layer_bank_type = 2; - svcpcb_s1data_decrypt(); - neo_pcm2_swap(2); - install_pvc_protection(); - install_banked_bios(); -} DRIVER_INIT_MEMBER(neogeo_state,ms5plus) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_ms5plus; cmc50_neogeo_gfx_decrypt(0x19); neo_pcm2_swap(2); neogeo_bootleg_sx_decrypt(1); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); - install_ms5plus_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } -DRIVER_INIT_MEMBER(neogeo_state,svcpcb) -{ - DRIVER_INIT_CALL(neogeo); - svc_px_decrypt(); - svcpcb_gfx_decrypt(); - neogeo_cmc50_m1_decrypt(); - kof2000_neogeo_gfx_decrypt(0x57); - svcpcb_s1data_decrypt(); - neo_pcm2_swap(3); - m_fixed_layer_bank_type = 2; - install_pvc_protection(); - install_banked_bios(); -} - -DRIVER_INIT_MEMBER(neogeo_state,svc) -{ - DRIVER_INIT_CALL(neogeo); - svc_px_decrypt(); - neo_pcm2_swap(3); - m_fixed_layer_bank_type = 2; - neogeo_cmc50_m1_decrypt(); - kof2000_neogeo_gfx_decrypt(0x57); - install_pvc_protection(); -} DRIVER_INIT_MEMBER(neogeo_state,svcboot) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_boot; svcboot_px_decrypt(); svcboot_cx_decrypt(); - install_pvc_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,svcplus) @@ -9675,6 +9888,7 @@ DRIVER_INIT_MEMBER(neogeo_state,svcplus) svcboot_cx_decrypt(); neogeo_bootleg_sx_decrypt( 1); svcplus_px_hack(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,svcplusa) @@ -9683,26 +9897,32 @@ DRIVER_INIT_MEMBER(neogeo_state,svcplusa) svcplusa_px_decrypt(); svcboot_cx_decrypt(); svcplus_px_hack(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,svcsplus) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_boot; svcsplus_px_decrypt(); neogeo_bootleg_sx_decrypt(2); svcboot_cx_decrypt(); svcsplus_px_hack(); - install_pvc_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,samsho5) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; samsho5_decrypt_68k(); neo_pcm2_swap(4); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x0f); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,samsho5b) @@ -9712,138 +9932,118 @@ DRIVER_INIT_MEMBER(neogeo_state,samsho5b) samsho5b_vx_decrypt(); neogeo_bootleg_sx_decrypt(1); neogeo_bootleg_cx_decrypt(); + DRIVER_INIT_CALL(neogeo_postinit); } -DRIVER_INIT_MEMBER(neogeo_state,kf2k3pcb) -{ - DRIVER_INIT_CALL(neogeo); - kf2k3pcb_decrypt_68k(); - kf2k3pcb_gfx_decrypt(); - kf2k3pcb_sp1_decrypt(); - neogeo_cmc50_m1_decrypt(); - - /* extra little swap on the m1 - this must be performed AFTER the m1 decrypt - or the m1 checksum (used to generate the key) for decrypting the m1 is - incorrect */ - { - int i; - UINT8* rom = memregion("audiocpu")->base(); - for (i = 0; i < 0x90000; i++) - { - rom[i] = BITSWAP8(rom[i], 5, 6, 1, 4, 3, 0, 7, 2); - } - } - - kof2000_neogeo_gfx_decrypt(0x9d); - kf2k3pcb_decrypt_s1data(); - neo_pcm2_swap(5); - m_fixed_layer_bank_type = 2; - install_pvc_protection(); - m_maincpu->space(AS_PROGRAM).install_rom(0xc00000, 0xc7ffff, 0, 0x080000, memregion("mainbios")->base()); // 512k bios -} DRIVER_INIT_MEMBER(neogeo_state,kof2003) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_cmc2; kof2003_decrypt_68k(); neo_pcm2_swap(5); - m_fixed_layer_bank_type = 2; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x9d); - install_pvc_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof2003h) { + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_pvc_cmc2; kof2003h_decrypt_68k(); neo_pcm2_swap(5); m_fixed_layer_bank_type = 2; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x9d); - install_pvc_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k3bl) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kf2k3bl; cmc50_neogeo_gfx_decrypt(0x9d); neo_pcm2_swap(5); neogeo_bootleg_sx_decrypt(1); - kf2k3bl_install_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k3pl) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kf2k3pl; cmc50_neogeo_gfx_decrypt(0x9d); neo_pcm2_swap(5); kf2k3pl_px_decrypt(); neogeo_bootleg_sx_decrypt(1); - kf2k3pl_install_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kf2k3upl) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kf2k3bl; cmc50_neogeo_gfx_decrypt(0x9d); neo_pcm2_swap(5); kf2k3upl_px_decrypt(); neogeo_bootleg_sx_decrypt(2); - kf2k3bl_install_protection(); + init_pvc_protection(); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,samsh5sp) { DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_cmc_bank1; samsh5sp_decrypt_68k(); neo_pcm2_swap(6); - m_fixed_layer_bank_type = 1; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0x0d); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,jockeygp) { + DRIVER_INIT_CALL(neogeo); - m_fixed_layer_bank_type = 1; + neogeo_cart_table[current_slot].slot_enable = slot_enable_jockeygp; neogeo_cmc50_m1_decrypt(); kof2000_neogeo_gfx_decrypt(0xac); - - /* install some extra RAM */ - m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x201fff); - -// m_maincpu->space(AS_PROGRAM).install_read_port(0x280000, 0x280001, "IN5"); -// m_maincpu->space(AS_PROGRAM).install_read_port(0x2c0000, 0x2c0001, "IN6"); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,vliner) { - m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x201fff); - - m_maincpu->space(AS_PROGRAM).install_read_port(0x280000, 0x280001, "IN5"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x2c0000, 0x2c0001, "IN6"); - DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_vliner; + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kof97oro) { + kof97oro_px_decode(); neogeo_bootleg_sx_decrypt(1); neogeo_bootleg_cx_decrypt(); DRIVER_INIT_CALL(neogeo); + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,kog) { - /* overlay cartridge ROM */ - m_maincpu->space(AS_PROGRAM).install_read_port(0x0ffffe, 0x0fffff, "JUMPER"); - kog_px_decrypt(); neogeo_bootleg_sx_decrypt(1); neogeo_bootleg_cx_decrypt(); DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_kog; + DRIVER_INIT_CALL(neogeo_postinit); } DRIVER_INIT_MEMBER(neogeo_state,lans2004) @@ -9853,11 +10053,12 @@ DRIVER_INIT_MEMBER(neogeo_state,lans2004) neogeo_bootleg_sx_decrypt(1); neogeo_bootleg_cx_decrypt(); DRIVER_INIT_CALL(neogeo); + DRIVER_INIT_CALL(neogeo_postinit); } READ16_MEMBER( neogeo_state::sbp_lowerrom_r ) { - UINT16* rom = (UINT16*)memregion("maincpu")->base(); + UINT16* rom = (UINT16*)current_maincpu_region; UINT16 origdata = rom[(offset+(0x200/2))]; UINT16 data = BITSWAP16(origdata, 11,10,9,8,15,14,13,12,3,2,1,0,7,6,5,4); int realoffset = 0x200+(offset*2); @@ -9893,25 +10094,102 @@ WRITE16_MEMBER( neogeo_state::sbp_lowerrom_w ) DRIVER_INIT_MEMBER(neogeo_state,sbp) { - // there seems to be a protection device living around here.. - // if you nibble swap the data in the rom the game will boot - // there are also writes to 0x1080.. - // - // other stuff going on as well tho, the main overlay is still missing, and p1 inputs don't work - m_maincpu->space(AS_PROGRAM).install_read_handler(0x00200, 0x001fff, read16_delegate(FUNC(neogeo_state::sbp_lowerrom_r),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x00200, 0x001fff, write16_delegate(FUNC(neogeo_state::sbp_lowerrom_w),this)); - + DRIVER_INIT_CALL(neogeo); + neogeo_cart_table[current_slot].slot_enable = slot_enable_sbp; /* the game code clears the text overlay used ingame immediately after writing it.. why? protection? sloppy code that the hw ignores? imperfect emulation? */ { - UINT16* rom = (UINT16*)memregion("maincpu")->base(); + UINT16* rom = (UINT16*)current_maincpu_region; rom[0x2a6f8/2] = 0x4e71; rom[0x2a6fa/2] = 0x4e71; rom[0x2a6fc/2] = 0x4e71; } + DRIVER_INIT_CALL(neogeo_postinit); } +/*************************************************************************** + PCB version inits +***************************************************************************/ + + +void neogeo_state::install_banked_bios() +{ + m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0, 0x0e0000, "bankedbios"); + membank("bankedbios")->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000); + membank("bankedbios")->set_entry(1); +} + +INPUT_CHANGED_MEMBER(neogeo_state::select_bios) +{ + membank("bankedbios")->set_entry(newval ? 0 : 1); +} + +DRIVER_INIT_MEMBER(neogeo_state,ms5pcb) +{ + + DRIVER_INIT_CALL(neogeo); + + mslug5_decrypt_68k(); + svcpcb_gfx_decrypt(); + neogeo_cmc50_m1_decrypt(); + kof2000_neogeo_gfx_decrypt(0x19); + m_fixed_layer_bank_type = 2; + svcpcb_s1data_decrypt(); + neo_pcm2_swap(2); + install_pvc_protection(); + init_pvc_protection(); + install_banked_bios(); +} + +DRIVER_INIT_MEMBER(neogeo_state,svcpcb) +{ + + DRIVER_INIT_CALL(neogeo); + + svc_px_decrypt(); + svcpcb_gfx_decrypt(); + neogeo_cmc50_m1_decrypt(); + kof2000_neogeo_gfx_decrypt(0x57); + svcpcb_s1data_decrypt(); + neo_pcm2_swap(3); + m_fixed_layer_bank_type = 2; + install_pvc_protection(); + init_pvc_protection(); + install_banked_bios(); +} + + +DRIVER_INIT_MEMBER(neogeo_state,kf2k3pcb) +{ + + DRIVER_INIT_CALL(neogeo); + kf2k3pcb_decrypt_68k(); + kf2k3pcb_gfx_decrypt(); + kf2k3pcb_sp1_decrypt(); + neogeo_cmc50_m1_decrypt(); + + /* extra little swap on the m1 - this must be performed AFTER the m1 decrypt + or the m1 checksum (used to generate the key) for decrypting the m1 is + incorrect */ + { + int i; + UINT8* rom = current_audiocpu_region; + for (i = 0; i < 0x90000; i++) + { + rom[i] = BITSWAP8(rom[i], 5, 6, 1, 4, 3, 0, 7, 2); + } + } + + kof2000_neogeo_gfx_decrypt(0x9d); + kf2k3pcb_decrypt_s1data(); + neo_pcm2_swap(5); + m_fixed_layer_bank_type = 2; + install_pvc_protection(); + init_pvc_protection(); + m_maincpu->space(AS_PROGRAM).install_rom(0xc00000, 0xc7ffff, 0, 0x080000, memregion("mainbios")->base()); // 512k bios +} + /**************************************************************************** @@ -9927,10 +10205,12 @@ DRIVER_INIT_MEMBER(neogeo_state,mvs) // handle protected carts -void neogeo_state::mvs_install_protection(device_image_interface& image) +void neogeo_state::mvs_install_protection(device_image_interface& image, int slot) { const char *crypt_feature = image.get_feature( "crypt" ); + current_slot = slot; + if(crypt_feature == NULL) { DRIVER_INIT_CALL(neogeo); diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index 8355656448e..96503debc3e 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -20,7 +20,38 @@ #define NEOGEO_VSSTART (0x000) #define NEOGEO_VBLANK_RELOAD_HPOS (0x11f) +struct neogeo_regionptrs +{ + UINT8* maincpu_region; + size_t maincpu_region_size; + UINT8* audiocpu_region; + size_t audiocpu_region_size; + UINT8* fixed_region; + size_t fixed_region_size; + UINT8* ymsnd_region; + size_t ymsnd_region_size; + UINT8* ymdelta_region; + size_t ymdelta_region_size; + UINT8* audiocrypt_region; + size_t audiocrypt_region_size; + UINT8* sprites_region; + size_t sprites_region_size; +}; +typedef void (*neogeo_slot_enable_callback)(void *state); + +struct neogeo_cart_region +{ + const char *tag; + int slot; + neogeo_regionptrs regions; + neogeo_slot_enable_callback slot_enable; + UINT32 m_sprite_gfx_address_mask; + dynamic_array m_sprite_gfx; + +}; + +extern struct neogeo_cart_region neogeo_cart_table[]; class neogeo_state : public driver_device { @@ -30,15 +61,18 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_region_maincpu(*this, "maincpu"), - m_region_sprites(*this, "sprites"), - m_region_fixed(*this, "fixed"), m_region_fixedbios(*this, "fixedbios"), m_bank_vectors(*this, "vectors"), m_bank_cartridge(*this, "cartridge"), m_bank_audio_main(*this, "audio_main"), m_upd4990a(*this, "upd4990a"), - m_save_ram(*this, "saveram") { } + m_save_ram(*this, "saveram") + { + current_slot = 0; + + + + } DECLARE_WRITE16_MEMBER(io_control_w); DECLARE_READ16_MEMBER(memcard_r); @@ -122,7 +156,35 @@ public: DECLARE_DRIVER_INIT(lans2004); DECLARE_DRIVER_INIT(sbp); DECLARE_DRIVER_INIT(mvs); - void mvs_install_protection(device_image_interface& image); + void mvs_install_protection(device_image_interface& image, int slot); + void install_bankswitch(); + + // these get called when a cartridge is enabled, they're used to install + // cartridge specific handlers + static void slot_enable_default(void *state); + static void slot_enable_cmc_bank1(void *state); + static void slot_enable_cmc_bank2(void *state); + static void slot_enable_garou(void *state); + static void slot_enable_garouh(void *state); + static void slot_enable_kof2000(void *state); + static void slot_enable_mslug3(void *state); + static void slot_enable_kof99(void *state); + static void slot_enable_pvc_cmc2(void *state); + static void slot_enable_pvc_cmc1(void *state); + static void slot_enable_pvc_boot(void *state); + static void slot_enable_fatfury2(void *state); + static void slot_enable_kof98(void *state); + static void slot_enable_mslugx(void *state); + static void slot_enable_kof10th(void *state); + static void slot_enable_ms5plus(void *state); + static void slot_enable_kf2k3bl(void *state); + static void slot_enable_kf2k3pl(void *state); + static void slot_enable_jockeygp(void *state); + static void slot_enable_vliner(void *state); + static void slot_enable_kog(void *state); + static void slot_enable_sbp(void *state); + + DECLARE_DRIVER_INIT(neogeo_postinit); TIMER_CALLBACK_MEMBER(display_position_interrupt_callback); TIMER_CALLBACK_MEMBER(display_position_vblank_callback); @@ -146,6 +208,25 @@ public: // this has to be public for the legacy MEMCARD_HANDLER UINT8 *m_memcard_data; + int current_slot; + + + UINT8* current_maincpu_region; + size_t current_maincpu_region_size; + UINT8* current_ymsnd_region; + size_t current_ymsnd_region_size; + UINT8* current_sprites_region; + size_t current_sprites_region_size; + UINT8* current_fixed_region; + size_t current_fixed_region_size; + UINT8* current_audiocpu_region; + size_t current_audiocpu_region_size; + UINT8* current_audiocrypt_region; + size_t current_audiocrypt_region_size; + UINT8* current_ymdelta_region; + size_t current_ymdelta_region_size; + + protected: void neogeo_postload(); void update_interrupts(); @@ -155,7 +236,7 @@ protected: void neogeo_set_main_cpu_bank_address( UINT32 bank_address ); void _set_main_cpu_bank_address(); void neogeo_main_cpu_banking_init(); - void neogeo_audio_cpu_banking_init(); + void neogeo_audio_cpu_banking_init(int set_entry); void adjust_display_position_interrupt_timer(); void neogeo_set_display_position_interrupt_control(UINT16 data); void neogeo_set_display_counter_msb(UINT16 data); @@ -194,6 +275,7 @@ protected: void set_output_latch( UINT8 data ); void set_output_data( UINT8 data ); void install_banked_bios(); + void select_slot(UINT16 data, UINT16 mem_mask); // protections implementation DECLARE_READ16_MEMBER( sbp_lowerrom_r ); @@ -201,11 +283,15 @@ protected: DECLARE_READ16_MEMBER( fatfury2_protection_16_r ); DECLARE_WRITE16_MEMBER( fatfury2_protection_16_w ); void fatfury2_install_protection(); + void fatfury2_init_protection(); + DECLARE_WRITE16_MEMBER ( kof98_prot_w ); void install_kof98_protection(); DECLARE_WRITE16_MEMBER( mslugx_protection_16_w ); DECLARE_READ16_MEMBER( mslugx_protection_16_r ); void mslugx_install_protection(); + void mslugx_init_protection(); + DECLARE_WRITE16_MEMBER( kof99_bankswitch_w ); DECLARE_WRITE16_MEMBER( garou_bankswitch_w ); DECLARE_WRITE16_MEMBER( garouh_bankswitch_w ); @@ -215,6 +301,7 @@ protected: DECLARE_READ16_MEMBER( sma_random_r ); void reset_sma_rng(); void sma_install_random_read_handler( int addr1, int addr2 ); + void init_sma(void); void kof99_install_protection(); void garou_install_protection(); void garouh_install_protection(); @@ -226,6 +313,7 @@ protected: DECLARE_READ16_MEMBER( pvc_prot_r ); DECLARE_WRITE16_MEMBER( pvc_prot_w ); void install_pvc_protection(); + void init_pvc_protection(); void neogeo_bootleg_cx_decrypt(); void neogeo_bootleg_sx_decrypt(int value ); void kog_px_decrypt(); @@ -320,9 +408,6 @@ protected: required_device m_audiocpu; // memory - required_memory_region m_region_maincpu; - required_memory_region m_region_sprites; - required_memory_region m_region_fixed; optional_memory_region m_region_fixedbios; required_memory_bank m_bank_vectors; optional_memory_bank m_bank_cartridge; // optional because of neocd @@ -374,8 +459,6 @@ protected: const UINT8 *m_region_zoomy; - dynamic_array m_sprite_gfx; - UINT32 m_sprite_gfx_address_mask; UINT8 m_auto_animation_speed; UINT8 m_auto_animation_disabled; @@ -420,4 +503,7 @@ protected: /*----------- defined in drivers/neogeo.c -----------*/ MACHINE_CONFIG_EXTERN( neogeo_base ); +MACHINE_CONFIG_EXTERN( neogeo ); +MACHINE_CONFIG_EXTERN( mvs ); MEMCARD_HANDLER( neogeo ); +INPUT_PORTS_EXTERN( neogeo ); diff --git a/src/mame/machine/neoboot.c b/src/mame/machine/neoboot.c index fa09f88f6d5..728eadba704 100644 --- a/src/mame/machine/neoboot.c +++ b/src/mame/machine/neoboot.c @@ -22,8 +22,8 @@ void neogeo_state::neogeo_bootleg_cx_decrypt() { int i; - int cx_size = memregion( "sprites" )->bytes(); - UINT8 *rom = memregion( "sprites" )->base(); + int cx_size = current_sprites_region_size; + UINT8 *rom = current_sprites_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, cx_size ); memcpy( buf, rom, cx_size ); @@ -38,8 +38,8 @@ void neogeo_state::neogeo_bootleg_cx_decrypt() void neogeo_state::neogeo_bootleg_sx_decrypt(int value ) { - int sx_size = memregion( "fixed" )->bytes(); - UINT8 *rom = memregion( "fixed" )->base(); + int sx_size = current_fixed_region_size; + UINT8 *rom = current_fixed_region; int i; if (value == 1) @@ -71,9 +71,9 @@ void neogeo_state::neogeo_bootleg_sx_decrypt(int value ) void neogeo_state::kog_px_decrypt() { /* the protection chip does some *very* strange things to the rom */ - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x600000 ); - UINT16 *rom = (UINT16 *)memregion("maincpu")->base(); + UINT16 *rom = (UINT16 *)current_maincpu_region; int i; static const int sec[] = { 0x3, 0x8, 0x7, 0xC, 0x1, 0xA, 0x6, 0xD }; @@ -136,7 +136,7 @@ void neogeo_state::kof97oro_px_decode() { int i; UINT16 *tmp = auto_alloc_array(machine(), UINT16, 0x500000 ); - UINT16 *src = (UINT16*)memregion("maincpu")->base(); + UINT16 *src = (UINT16*)current_maincpu_region; for (i = 0; i < 0x500000/2; i++) { tmp[i] = src[i ^ 0x7ffef]; @@ -171,10 +171,10 @@ READ16_MEMBER( neogeo_state::kof10th_RAMB_r ) WRITE16_MEMBER( neogeo_state::kof10th_custom_w ) { if (!m_cartridge_ram[0xFFE]) { // Write to RAM bank A - UINT16 *prom = (UINT16*)memregion( "maincpu" )->base(); + UINT16 *prom = (UINT16*)current_maincpu_region; COMBINE_DATA(&prom[(0xE0000/2) + (offset & 0xFFFF)]); } else { // Write S data on-the-fly - UINT8 *srom = memregion( "fixed" )->base(); + UINT8 *srom = current_fixed_region; srom[offset] = BITSWAP8(data,7,6,0,4,3,2,1,5); } } @@ -185,7 +185,7 @@ WRITE16_MEMBER( neogeo_state::kof10th_bankswitch_w ) if (offset == 0x5FFF8) { // Standard bankswitch kof10thBankswitch(space, data); } else if (offset == 0x5FFFC && m_cartridge_ram[0xFFC] != data) { // Special bankswitch - UINT8 *src = memregion( "maincpu" )->base(); + UINT8 *src = current_maincpu_region; memcpy (src + 0x10000, src + ((data & 1) ? 0x810000 : 0x710000), 0xcffff); } COMBINE_DATA(&m_cartridge_ram[offset & 0xFFF]); @@ -194,8 +194,6 @@ WRITE16_MEMBER( neogeo_state::kof10th_bankswitch_w ) void neogeo_state::install_kof10th_protection () { - save_item(NAME(m_cartridge_ram)); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x2fe000, 0x2fffff, read16_delegate(FUNC(neogeo_state::kof10th_RAMB_r),this)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x23ffff, write16_delegate(FUNC(neogeo_state::kof10th_custom_w),this)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x240000, 0x2fffff, write16_delegate(FUNC(neogeo_state::kof10th_bankswitch_w),this)); @@ -205,7 +203,7 @@ void neogeo_state::decrypt_kof10th() { int i, j; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x900000); - UINT8 *src = memregion( "maincpu" )->base(); + UINT8 *src = current_maincpu_region; memcpy(dst + 0x000000, src + 0x700000, 0x100000); // Correct (Verified in Uni-bios) memcpy(dst + 0x100000, src + 0x000000, 0x800000); @@ -232,7 +230,7 @@ void neogeo_state::decrypt_kof10th() void neogeo_state::kf10thep_px_decrypt() { - UINT16 *rom = (UINT16*)memregion("maincpu")->base(); + UINT16 *rom = (UINT16*)current_maincpu_region; UINT16 *buf = auto_alloc_array(machine(), UINT16, 0x100000/2); memcpy(&buf[0x000000/2], &rom[0x060000/2], 0x20000); @@ -265,7 +263,7 @@ void neogeo_state::kf10thep_px_decrypt() void neogeo_state::kf2k5uni_px_decrypt() { int i, j, ofst; - UINT8 *src = memregion( "maincpu" )->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x80); for (i = 0; i < 0x800000; i+=0x80) @@ -285,7 +283,7 @@ void neogeo_state::kf2k5uni_px_decrypt() void neogeo_state::kf2k5uni_sx_decrypt() { int i; - UINT8 *srom = memregion( "fixed" )->base(); + UINT8 *srom = current_fixed_region; for (i = 0; i < 0x20000; i++) srom[i] = BITSWAP8(srom[i], 4, 5, 6, 7, 0, 1, 2, 3); @@ -294,7 +292,7 @@ void neogeo_state::kf2k5uni_sx_decrypt() void neogeo_state::kf2k5uni_mx_decrypt() { int i; - UINT8 *mrom = memregion( "audiocpu" )->base(); + UINT8 *mrom = current_audiocpu_region; for (i = 0; i < 0x30000; i++) mrom[i] = BITSWAP8(mrom[i], 4, 5, 6, 7, 0, 1, 2, 3); @@ -350,7 +348,7 @@ void neogeo_state::kf2k2mp_decrypt() { int i,j; - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x80); memmove(src, src + 0x300000, 0x500000); @@ -373,7 +371,7 @@ void neogeo_state::kf2k2mp_decrypt() void neogeo_state::kf2k2mp2_px_decrypt() { - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x600000); memcpy (dst + 0x000000, src + 0x1C0000, 0x040000); @@ -395,7 +393,7 @@ void neogeo_state::cthd2003_neogeo_gfx_address_fix_do(int start, int end, int bi int tilesize=128; UINT8* rom = auto_alloc_array(machine(), UINT8, 16*tilesize); // 16 tiles buffer - UINT8* realrom = memregion("sprites")->base() + start*tilesize; + UINT8* realrom = current_sprites_region + start*tilesize; for (i = 0; i < (end-start)/16; i++) { for (j = 0; j < 16; j++) { @@ -448,7 +446,7 @@ void neogeo_state::cthd2003_c(int pow) void neogeo_state::decrypt_cthd2003() { - UINT8 *romdata = memregion("fixed")->base(); + UINT8 *romdata = current_fixed_region; UINT8 *tmp = auto_alloc_array(machine(), UINT8, 8*128*128); memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128); @@ -457,7 +455,7 @@ void neogeo_state::decrypt_cthd2003() memcpy(tmp+8*96*128, romdata+8*96*128, 8*32*128); memcpy(romdata, tmp, 8*128*128); - romdata = memregion("audiocpu")->base()+0x10000; + romdata = current_audiocpu_region+0x10000; memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128); memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128); memcpy(tmp+8*64*128, romdata+8*32*128, 8*32*128); @@ -489,7 +487,7 @@ void neogeo_state::patch_cthd2003() { /* patches thanks to razoola */ int i; - UINT16 *mem16 = (UINT16 *)memregion("maincpu")->base(); + UINT16 *mem16 = (UINT16 *)current_maincpu_region; /* special ROM banking handler */ m_maincpu->space(AS_PROGRAM).install_write_handler(0x2ffff0, 0x2fffff, write16_delegate(FUNC(neogeo_state::cthd2003_bankswitch_w),this)); @@ -532,8 +530,8 @@ void neogeo_state::patch_cthd2003() void neogeo_state::ct2k3sp_sx_decrypt() { - int rom_size = memregion( "fixed" )->bytes(); - UINT8 *rom = memregion( "fixed" )->base(); + int rom_size = current_fixed_region_size; + UINT8 *rom = current_fixed_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); int i; int ofst; @@ -562,7 +560,7 @@ void neogeo_state::ct2k3sp_sx_decrypt() void neogeo_state::decrypt_ct2k3sp() { - UINT8 *romdata = memregion("audiocpu")->base()+0x10000; + UINT8 *romdata = current_audiocpu_region+0x10000; UINT8*tmp = auto_alloc_array(machine(), UINT8, 8*128*128); memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128); memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128); @@ -582,7 +580,7 @@ void neogeo_state::decrypt_ct2k3sp() void neogeo_state::decrypt_ct2k3sa() { - UINT8 *romdata = memregion("audiocpu")->base()+0x10000; + UINT8 *romdata = current_audiocpu_region+0x10000; UINT8*tmp = auto_alloc_array(machine(), UINT8, 8*128*128); memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128); memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128); @@ -599,7 +597,7 @@ void neogeo_state::patch_ct2k3sa() { /* patches thanks to razoola - same as for cthd2003*/ int i; - UINT16 *mem16 = (UINT16 *)memregion("maincpu")->base(); + UINT16 *mem16 = (UINT16 *)current_maincpu_region; // theres still a problem on the character select screen but it seems to be related to cpu core timing issues, // overclocking the 68k prevents it. @@ -640,7 +638,7 @@ void neogeo_state::patch_ct2k3sa() void neogeo_state::decrypt_kof2k4se_68k() { - UINT8 *src = memregion("maincpu")->base()+0x100000; + UINT8 *src = current_maincpu_region+0x100000; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x400000); int i; static const int sec[] = {0x300000,0x200000,0x100000,0x000000}; @@ -660,7 +658,7 @@ void neogeo_state::decrypt_kof2k4se_68k() void neogeo_state::lans2004_vx_decrypt() { int i; - UINT8 *rom = memregion( "ymsnd" )->base(); + UINT8 *rom = current_ymsnd_region; for (i = 0; i < 0xA00000; i++) rom[i] = BITSWAP8(rom[i], 0, 1, 5, 4, 3, 2, 6, 7); } @@ -669,8 +667,8 @@ void neogeo_state::lans2004_decrypt_68k() { /* Descrambling P ROMs - Thanks to Razoola for the info */ int i; - UINT8 *src = memregion( "maincpu" )->base(); - UINT16 *rom = (UINT16*)memregion( "maincpu" )->base(); + UINT8 *src = current_maincpu_region; + UINT16 *rom = (UINT16*)current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x600000); { @@ -749,8 +747,8 @@ void neogeo_state::svcboot_px_decrypt() 0x06, 0x07, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00 }; int i; - int size = memregion( "maincpu" )->bytes(); - UINT8 *src = memregion( "maincpu" )->base(); + int size = current_maincpu_region_size; + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, size ); int ofst; for( i = 0; i < size / 0x100000; i++ ){ @@ -778,8 +776,8 @@ void neogeo_state::svcboot_cx_decrypt() { 3, 0, 2, 1 }, }; int i; - int size = memregion( "sprites" )->bytes(); - UINT8 *src = memregion( "sprites" )->base(); + int size = current_sprites_region_size; + UINT8 *src = current_sprites_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, size ); int ofst; memcpy( dst, src, size ); @@ -805,8 +803,8 @@ void neogeo_state::svcplus_px_decrypt() static const int sec[] = { 0x00, 0x03, 0x02, 0x05, 0x04, 0x01 }; - int size = memregion( "maincpu" )->bytes(); - UINT8 *src = memregion( "maincpu" )->base(); + int size = current_maincpu_region_size; + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, size ); int i; int ofst; @@ -829,7 +827,7 @@ void neogeo_state::svcplus_px_decrypt() void neogeo_state::svcplus_px_hack() { /* patched by the protection chip? */ - UINT16 *mem16 = (UINT16 *)memregion("maincpu")->base(); + UINT16 *mem16 = (UINT16 *)current_maincpu_region; mem16[0x0f8016/2] = 0x33c1; } @@ -843,8 +841,8 @@ void neogeo_state::svcplusa_px_decrypt() static const int sec[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x00 }; - int size = memregion( "maincpu" )->bytes(); - UINT8 *src = memregion( "maincpu" )->base(); + int size = current_maincpu_region_size; + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, size ); memcpy( dst, src, size ); for( i = 0; i < 6; i++ ){ @@ -862,8 +860,8 @@ void neogeo_state::svcsplus_px_decrypt() static const int sec[] = { 0x06, 0x07, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00 }; - int size = memregion( "maincpu" )->bytes(); - UINT8 *src = memregion( "maincpu" )->base(); + int size = current_maincpu_region_size; + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, size ); int i; int ofst; @@ -882,7 +880,7 @@ void neogeo_state::svcsplus_px_decrypt() void neogeo_state::svcsplus_px_hack() { /* patched by the protection chip? */ - UINT16 *mem16 = (UINT16 *)memregion("maincpu")->base(); + UINT16 *mem16 = (UINT16 *)current_maincpu_region; mem16[0x9e90/2] = 0x000f; mem16[0x9e92/2] = 0xc9c0; mem16[0xa10c/2] = 0x4eb9; @@ -922,7 +920,7 @@ WRITE16_MEMBER( neogeo_state::kof2003_w ) UINT8* cr = (UINT8 *)m_cartridge_ram; UINT32 address = (cr[BYTE_XOR_LE(0x1ff3)]<<16)|(cr[BYTE_XOR_LE(0x1ff2)]<<8)|cr[BYTE_XOR_LE(0x1ff1)]; UINT8 prt = cr[BYTE_XOR_LE(0x1ff2)]; - UINT8* mem = (UINT8 *)memregion("maincpu")->base(); + UINT8* mem = (UINT8 *)current_maincpu_region; cr[BYTE_XOR_LE(0x1ff0)] = 0xa0; cr[BYTE_XOR_LE(0x1ff1)] &= 0xfe; @@ -940,7 +938,7 @@ WRITE16_MEMBER( neogeo_state::kof2003p_w ) UINT8* cr = (UINT8 *)m_cartridge_ram; UINT32 address = (cr[BYTE_XOR_LE(0x1ff3)]<<16)|(cr[BYTE_XOR_LE(0x1ff2)]<<8)|cr[BYTE_XOR_LE(0x1ff0)]; UINT8 prt = cr[BYTE_XOR_LE(0x1ff2)]; - UINT8* mem = (UINT8 *)memregion("maincpu")->base(); + UINT8* mem = (UINT8 *)current_maincpu_region; cr[BYTE_XOR_LE(0x1ff0)] &= 0xfe; cr[BYTE_XOR_LE(0x1ff3)] &= 0x7f; @@ -958,7 +956,7 @@ void neogeo_state::kf2k3bl_px_decrypt() }; int rom_size = 0x800000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); memcpy( buf, rom, rom_size ); @@ -970,8 +968,6 @@ void neogeo_state::kf2k3bl_px_decrypt() void neogeo_state::kf2k3bl_install_protection() { - save_item(NAME(m_cartridge_ram)); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2fe000, 0x2fffff, read16_delegate(FUNC(neogeo_state::kof2003_r),this), write16_delegate(FUNC(neogeo_state::kof2003_w),this) ); } @@ -982,7 +978,7 @@ void neogeo_state::kf2k3bl_install_protection() void neogeo_state::kf2k3pl_px_decrypt() { UINT16*tmp = auto_alloc_array(machine(), UINT16, 0x100000/2); - UINT16*rom = (UINT16*)memregion( "maincpu" )->base(); + UINT16*rom = (UINT16*)current_maincpu_region; int j; int i; @@ -1000,8 +996,6 @@ void neogeo_state::kf2k3pl_px_decrypt() void neogeo_state::kf2k3pl_install_protection() { - save_item(NAME(m_cartridge_ram)); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2fe000, 0x2fffff, read16_delegate(FUNC(neogeo_state::kof2003_r),this), write16_delegate(FUNC(neogeo_state::kof2003p_w),this) ); } @@ -1012,7 +1006,7 @@ void neogeo_state::kf2k3pl_install_protection() void neogeo_state::kf2k3upl_px_decrypt() { { - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; memmove(src+0x100000, src, 0x600000); memmove(src, src+0x700000, 0x100000); } @@ -1020,8 +1014,8 @@ void neogeo_state::kf2k3upl_px_decrypt() { int ofst; int i; - UINT8 *rom = memregion( "maincpu" )->base() + 0xfe000; - UINT8 *buf = memregion( "maincpu" )->base() + 0xd0610; + UINT8 *rom = current_maincpu_region + 0xfe000; + UINT8 *buf = current_maincpu_region + 0xd0610; for( i = 0; i < 0x2000 / 2; i++ ){ ofst = (i & 0xff00) + BITSWAP8( (i & 0x00ff), 7, 6, 0, 4, 3, 2, 1, 5 ); @@ -1036,8 +1030,8 @@ void neogeo_state::kf2k3upl_px_decrypt() void neogeo_state::samsho5b_px_decrypt() { - int px_size = memregion( "maincpu" )->bytes(); - UINT8 *rom = memregion( "maincpu" )->base(); + int px_size = current_maincpu_region_size; + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, px_size ); int ofst; int i; @@ -1063,8 +1057,8 @@ void neogeo_state::samsho5b_px_decrypt() void neogeo_state::samsho5b_vx_decrypt() { - int vx_size = memregion( "ymsnd" )->bytes(); - UINT8 *rom = memregion( "ymsnd" )->base(); + int vx_size = current_ymsnd_region_size; + UINT8 *rom = current_ymsnd_region; int i; for( i = 0; i < vx_size; i++ ) @@ -1080,7 +1074,7 @@ void neogeo_state::samsho5b_vx_decrypt() void neogeo_state::matrimbl_decrypt() { /* decrypt Z80 */ - UINT8 *rom = memregion( "audiocpu" )->base()+0x10000; + UINT8 *rom = current_audiocpu_region+0x10000; UINT8 *buf = auto_alloc_array(machine(), UINT8, 0x20000 ); int i, j=0; memcpy( buf, rom, 0x20000 ); diff --git a/src/mame/machine/neocrypt.c b/src/mame/machine/neocrypt.c index 6ab24123c6b..e2edb14e8a2 100644 --- a/src/mame/machine/neocrypt.c +++ b/src/mame/machine/neocrypt.c @@ -516,11 +516,11 @@ void neogeo_state::neogeo_gfx_decrypt(int extra_xor) UINT8 *rom; int rpos; - rom_size = memregion("sprites")->bytes(); + rom_size = current_sprites_region_size; buf = auto_alloc_array(machine(), UINT8, rom_size); - rom = memregion("sprites")->base(); + rom = current_sprites_region; // Data xor for (rpos = 0;rpos < rom_size/4;rpos++) @@ -576,10 +576,10 @@ void neogeo_state::neogeo_gfx_decrypt(int extra_xor) void neogeo_state::neogeo_sfix_decrypt() { int i; - int rom_size = memregion("sprites")->bytes(); - int tx_size = memregion("fixed")->bytes(); - UINT8 *src = memregion("sprites")->base()+rom_size-tx_size; - UINT8 *dst = memregion("fixed")->base(); + int rom_size = current_sprites_region_size; + int tx_size = current_fixed_region_size; + UINT8 *src = current_sprites_region+rom_size-tx_size; + UINT8 *dst = current_fixed_region; for (i = 0;i < tx_size;i++) dst[i] = src[(i & ~0x1f) + ((i & 7) << 2) + ((~i & 8) >> 2) + ((i & 0x10) >> 4)]; @@ -658,8 +658,8 @@ void neogeo_state::svcpcb_gfx_decrypt() static const UINT8 xorval[ 4 ] = { 0x34, 0x21, 0xc4, 0xe9 }; int i; int ofst; - int rom_size = memregion( "sprites" )->bytes(); - UINT8 *rom = memregion( "sprites" )->base(); + int rom_size = current_sprites_region_size; + UINT8 *rom = current_sprites_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for( i = 0; i < rom_size; i++ ) @@ -690,8 +690,8 @@ void neogeo_state::svcpcb_gfx_decrypt() void neogeo_state::svcpcb_s1data_decrypt() { int i; - UINT8 *s1 = memregion( "fixed" )->base(); - size_t s1_size = memregion( "fixed" )->bytes(); + UINT8 *s1 = current_fixed_region; + size_t s1_size = current_fixed_region_size; for( i = 0; i < s1_size; i++ ) // Decrypt S { @@ -707,8 +707,8 @@ void neogeo_state::kf2k3pcb_gfx_decrypt() static const UINT8 xorval[ 4 ] = { 0x34, 0x21, 0xc4, 0xe9 }; int i; int ofst; - int rom_size = memregion( "sprites" )->bytes(); - UINT8 *rom = memregion( "sprites" )->base(); + int rom_size = current_sprites_region_size; + UINT8 *rom = current_sprites_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for ( i = 0; i < rom_size; i++ ) @@ -741,26 +741,26 @@ void neogeo_state::kf2k3pcb_decrypt_s1data() UINT8 *src; UINT8 *dst; int i; - int tx_size = memregion( "fixed" )->bytes(); - int srom_size = memregion( "sprites" )->bytes(); + int tx_size = current_fixed_region_size; + int srom_size = current_sprites_region_size; - src = memregion( "sprites" )->base() + srom_size - 0x1000000 - 0x80000; // Decrypt S - dst = memregion( "fixed" )->base(); + src = current_sprites_region + srom_size - 0x1000000 - 0x80000; // Decrypt S + dst = current_fixed_region; for( i = 0; i < tx_size / 2; i++ ) { dst[ i ] = src[ (i & ~0x1f) + ((i & 7) << 2) + ((~i & 8) >> 2) + ((i & 0x10) >> 4) ]; } - src = memregion( "sprites" )->base() + srom_size - 0x80000; - dst = memregion( "fixed" )->base() + 0x80000; + src = current_sprites_region + srom_size - 0x80000; + dst = current_fixed_region + 0x80000; for( i = 0; i < tx_size / 2; i++ ) { dst[ i ] = src[ (i & ~0x1f) + ((i & 7) << 2) + ((~i & 8) >> 2) + ((i & 0x10) >> 4) ]; } - dst = memregion( "fixed" )->base(); + dst = current_fixed_region; for( i = 0; i < tx_size; i++ ) { @@ -870,9 +870,9 @@ int neogeo_state::m1_address_scramble(int address, UINT16 key) void neogeo_state::neogeo_cmc50_m1_decrypt() { - UINT8* rom = memregion("audiocrypt")->base(); + UINT8* rom = current_audiocrypt_region; size_t rom_size = 0x80000; - UINT8* rom2 = memregion("audiocpu")->base(); + UINT8* rom2 = current_audiocpu_region; UINT8* buffer = auto_alloc_array(machine(), UINT8, rom_size); @@ -939,7 +939,7 @@ NeoGeo 'P' ROM encryption /* Kof98 uses an early encryption, quite different from the others */ void neogeo_state::kof98_decrypt_68k() { - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x200000); int i, j, k; static const UINT32 sec[]={0x000000,0x100000,0x000004,0x100004,0x10000a,0x00000a,0x10000e,0x00000e}; @@ -989,7 +989,7 @@ void neogeo_state::kof99_decrypt_68k() UINT16 *rom; int i,j; - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); /* swap data lines on the whole ROMs */ for (i = 0;i < 0x800000/2;i++) { @@ -1008,7 +1008,7 @@ void neogeo_state::kof99_decrypt_68k() } /* swap address lines & relocate fixed part */ - rom = (UINT16 *)memregion("maincpu")->base(); + rom = (UINT16 *)current_maincpu_region; for (i = 0;i < 0x0c0000/2;i++) { rom[i] = rom[0x700000/2 + BITSWAP24(i,23,22,21,20,19,18,11,6,14,17,16,5,8,10,12,0,4,3,2,7,9,15,13,1)]; @@ -1022,7 +1022,7 @@ void neogeo_state::garou_decrypt_68k() int i,j; /* thanks to Razoola and Mr K for the info */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); /* swap data lines on the whole ROMs */ for (i = 0;i < 0x800000/2;i++) { @@ -1030,14 +1030,14 @@ void neogeo_state::garou_decrypt_68k() } /* swap address lines & relocate fixed part */ - rom = (UINT16 *)memregion("maincpu")->base(); + rom = (UINT16 *)current_maincpu_region; for (i = 0;i < 0x0c0000/2;i++) { rom[i] = rom[0x710000/2 + BITSWAP24(i,23,22,21,20,19,18,4,5,16,14,7,9,6,13,17,15,3,1,2,12,11,8,10,0)]; } /* swap address lines for the banked part */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); for (i = 0;i < 0x800000/2;i+=0x8000/2) { UINT16 buffer[0x8000/2]; @@ -1056,7 +1056,7 @@ void neogeo_state::garouh_decrypt_68k() int i,j; /* thanks to Razoola and Mr K for the info */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); /* swap data lines on the whole ROMs */ for (i = 0;i < 0x800000/2;i++) { @@ -1064,14 +1064,14 @@ void neogeo_state::garouh_decrypt_68k() } /* swap address lines & relocate fixed part */ - rom = (UINT16 *)memregion("maincpu")->base(); + rom = (UINT16 *)current_maincpu_region; for (i = 0;i < 0x0c0000/2;i++) { rom[i] = rom[0x7f8000/2 + BITSWAP24(i,23,22,21,20,19,18,5,16,11,2,6,7,17,3,12,8,14,4,0,9,1,10,15,13)]; } /* swap address lines for the banked part */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); for (i = 0;i < 0x800000/2;i+=0x8000/2) { UINT16 buffer[0x8000/2]; @@ -1090,7 +1090,7 @@ void neogeo_state::mslug3_decrypt_68k() int i,j; /* thanks to Razoola and Mr K for the info */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); /* swap data lines on the whole ROMs */ for (i = 0;i < 0x800000/2;i++) { @@ -1098,14 +1098,14 @@ void neogeo_state::mslug3_decrypt_68k() } /* swap address lines & relocate fixed part */ - rom = (UINT16 *)memregion("maincpu")->base(); + rom = (UINT16 *)current_maincpu_region; for (i = 0;i < 0x0c0000/2;i++) { rom[i] = rom[0x5d0000/2 + BITSWAP24(i,23,22,21,20,19,18,15,2,1,13,3,0,9,6,16,4,11,5,7,12,17,14,10,8)]; } /* swap address lines for the banked part */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); for (i = 0;i < 0x800000/2;i+=0x10000/2) { UINT16 buffer[0x10000/2]; @@ -1124,7 +1124,7 @@ void neogeo_state::kof2000_decrypt_68k() int i,j; /* thanks to Razoola and Mr K for the info */ - rom = (UINT16 *)(memregion("maincpu")->base() + 0x100000); + rom = (UINT16 *)(current_maincpu_region + 0x100000); /* swap data lines on the whole ROMs */ for (i = 0;i < 0x800000/2;i++) { @@ -1143,7 +1143,7 @@ void neogeo_state::kof2000_decrypt_68k() } /* swap address lines & relocate fixed part */ - rom = (UINT16 *)memregion("maincpu")->base(); + rom = (UINT16 *)current_maincpu_region; for (i = 0;i < 0x0c0000/2;i++) { rom[i] = rom[0x73a000/2 + BITSWAP24(i,23,22,21,20,19,18,8,4,15,13,3,14,16,2,6,17,7,12,10,0,5,11,1,9)]; @@ -1156,7 +1156,7 @@ void neogeo_state::kof2002_decrypt_68k() { int i; static const int sec[]={0x100000,0x280000,0x300000,0x180000,0x000000,0x380000,0x200000,0x080000}; - UINT8 *src = memregion("maincpu")->base()+0x100000; + UINT8 *src = current_maincpu_region+0x100000; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x400000); memcpy( dst, src, 0x400000 ); for( i=0; i<8; ++i ) @@ -1171,7 +1171,7 @@ void neogeo_state::matrim_decrypt_68k() { int i; static const int sec[]={0x100000,0x280000,0x300000,0x180000,0x000000,0x380000,0x200000,0x080000}; - UINT8 *src = memregion("maincpu")->base()+0x100000; + UINT8 *src = current_maincpu_region+0x100000; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x400000); memcpy( dst, src, 0x400000); for( i=0; i<8; ++i ) @@ -1186,7 +1186,7 @@ void neogeo_state::samsho5_decrypt_68k() { int i; static const int sec[]={0x000000,0x080000,0x700000,0x680000,0x500000,0x180000,0x200000,0x480000,0x300000,0x780000,0x600000,0x280000,0x100000,0x580000,0x400000,0x380000}; - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x800000); memcpy( dst, src, 0x800000 ); @@ -1202,7 +1202,7 @@ void neogeo_state::samsh5sp_decrypt_68k() { int i; static const int sec[]={0x000000,0x080000,0x500000,0x480000,0x600000,0x580000,0x700000,0x280000,0x100000,0x680000,0x400000,0x780000,0x200000,0x380000,0x300000,0x180000}; - UINT8 *src = memregion("maincpu")->base(); + UINT8 *src = current_maincpu_region; UINT8 *dst = auto_alloc_array(machine(), UINT8, 0x800000); memcpy( dst, src, 0x800000 ); @@ -1222,7 +1222,7 @@ void neogeo_state::mslug5_decrypt_68k() int i; int ofst; int rom_size = 0x800000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for( i = 0; i < 0x100000; i++ ) @@ -1267,7 +1267,7 @@ void neogeo_state::svc_px_decrypt() int i; int ofst; int rom_size = 0x800000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for( i = 0; i < 0x100000; i++ ) @@ -1311,7 +1311,7 @@ void neogeo_state::kf2k3pcb_decrypt_68k() int i; int ofst; int rom_size = 0x900000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for (i = 0; i < 0x100000; i++) @@ -1354,7 +1354,7 @@ void neogeo_state::kof2003_decrypt_68k() int i; int ofst; int rom_size = 0x900000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for (i = 0; i < 0x100000; i++) @@ -1401,7 +1401,7 @@ void neogeo_state::kof2003h_decrypt_68k() int i; int ofst; int rom_size = 0x900000; - UINT8 *rom = memregion( "maincpu" )->base(); + UINT8 *rom = current_maincpu_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, rom_size ); for (i = 0; i < 0x100000; i++) @@ -1451,8 +1451,8 @@ NeoGeo 'V' (PCM) ROM encryption /* Neo-Pcm2 Drivers for Encrypted V Roms */ void neogeo_state::neo_pcm2_snk_1999(int value) { /* thanks to Elsemi for the NEO-PCM2 info */ - UINT16 *rom = (UINT16 *)memregion("ymsnd")->base(); - int size = memregion("ymsnd")->bytes(); + UINT16 *rom = (UINT16 *)current_ymsnd_region; + int size = current_ymsnd_region_size; int i, j; if( rom != NULL ) @@ -1491,7 +1491,7 @@ void neogeo_state::neo_pcm2_swap(int value) {0xcb,0x29,0x7d,0x43,0xd2,0x3a,0xc2,0xb4}, {0x4b,0xa4,0x63,0x46,0xf0,0x91,0xea,0x62}, {0x4b,0xa4,0x63,0x46,0xf0,0x91,0xea,0x62}}; - UINT8 *src = memregion("ymsnd")->base(); + UINT8 *src = current_ymsnd_region; UINT8 *buf = auto_alloc_array(machine(), UINT8, 0x1000000); int i, j, d; diff --git a/src/mame/machine/neoprot.c b/src/mame/machine/neoprot.c index e914dd2366e..75e28ca5e56 100644 --- a/src/mame/machine/neoprot.c +++ b/src/mame/machine/neoprot.c @@ -91,6 +91,13 @@ WRITE16_MEMBER( neogeo_state::fatfury2_protection_16_w ) } } +void neogeo_state::fatfury2_init_protection() +{ + // hack, if using multiple slots this ends up being called multiple times + // it should be part of the cartridge, not global. For now only regster + // it for slot 0 to keep legacy MAME use happy. + if (current_slot == 0) save_item(NAME(m_fatfury2_prot_data)); +} void neogeo_state::fatfury2_install_protection() { @@ -100,7 +107,7 @@ void neogeo_state::fatfury2_install_protection() m_fatfury2_prot_data = 0; - save_item(NAME(m_fatfury2_prot_data)); + } @@ -114,7 +121,7 @@ void neogeo_state::fatfury2_install_protection() WRITE16_MEMBER( neogeo_state::kof98_prot_w ) { /* info from razoola */ - UINT16* mem16 = (UINT16*)memregion("maincpu")->base(); + UINT16* mem16 = (UINT16*)current_maincpu_region; switch (data) { @@ -205,13 +212,23 @@ READ16_MEMBER( neogeo_state::mslugx_protection_16_r ) return res; } +void neogeo_state::mslugx_init_protection() +{ // hack, if using multiple slots this ends up being called multiple times + // it should be part of the cartridge, not global. For now only regster + // it for slot 0 to keep legacy MAME use happy. + if (current_slot == 0) + { + save_item(NAME(m_mslugx_command)); + save_item(NAME(m_mslugx_counter)); + } +} void neogeo_state::mslugx_install_protection() { m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2fffe0, 0x2fffef, read16_delegate(FUNC(neogeo_state::mslugx_protection_16_r),this), write16_delegate(FUNC(neogeo_state::mslugx_protection_16_w),this)); - save_item(NAME(m_mslugx_command)); - save_item(NAME(m_mslugx_counter)); + + } @@ -428,9 +445,17 @@ void neogeo_state::reset_sma_rng() } +void neogeo_state::init_sma(void) +{ + // hack, if using multiple slots this ends up being called multiple times + // it should be part of the cartridge, not global. For now only regster + // it for slot 0 to keep legacy MAME use happy. + if (current_slot == 0) save_item(NAME(m_sma_rng)); +} + void neogeo_state::sma_install_random_read_handler(int addr1, int addr2 ) { - save_item(NAME(m_sma_rng)); + m_maincpu->space(AS_PROGRAM).install_read_handler(addr1, addr1 + 1, read16_delegate(FUNC(neogeo_state::sma_random_r),this)); m_maincpu->space(AS_PROGRAM).install_read_handler(addr2, addr2 + 1, read16_delegate(FUNC(neogeo_state::sma_random_r),this)); @@ -544,10 +569,15 @@ WRITE16_MEMBER( neogeo_state::pvc_prot_w ) pvc_write_bankswitch(space); } +void neogeo_state::init_pvc_protection() +{ + // hack, if using multiple slots this ends up being called multiple times + // it should be part of the cartridge, not global. For now only regster + // it for slot 0 to keep legacy MAME use happy. + if (current_slot == 0) save_item(NAME(m_cartridge_ram)); +} void neogeo_state::install_pvc_protection() { - save_item(NAME(m_cartridge_ram)); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2fe000, 0x2fffff, read16_delegate(FUNC(neogeo_state::pvc_prot_r),this), write16_delegate(FUNC(neogeo_state::pvc_prot_w),this)); } diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 0871bc623bf..9f8658088cd 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -1372,6 +1372,7 @@ $(MAMEOBJ)/nasco.a: \ $(MAMEOBJ)/neogeo.a: \ $(DRIVERS)/neogeo.o $(VIDEO)/neogeo.o \ + $(DRIVERS)/neogeomvs.o \ $(MACHINE)/neoboot.o \ $(MACHINE)/neocrypt.o \ $(MACHINE)/neoprot.o \ @@ -2699,7 +2700,6 @@ $(MACHINE)/megacd.o: $(LAYOUT)/megacd.lh # misc dependencies #------------------------------------------------- -$(DRIVERS)/neogeo.o: $(MAMESRC)/drivers/neogeo.inc $(VIDEO)/jaguar.o: $(MAMESRC)/video/jagobj.inc \ $(MAMESRC)/video/jagblit.inc $(DRIVERS)/model1.o: $(MAMESRC)/includes/model1.h $(MAMESRC)/audio/dsbz80.h diff --git a/src/mame/video/neogeo.c b/src/mame/video/neogeo.c index 4f0a3f4066e..7672f4b5094 100644 --- a/src/mame/video/neogeo.c +++ b/src/mame/video/neogeo.c @@ -250,8 +250,8 @@ void neogeo_state::draw_fixed_layer( bitmap_rgb32 &bitmap, int scanline ) { int x; - UINT8* gfx_base = m_fixed_layer_source ? m_region_fixed->base() : m_region_fixedbios->base(); - UINT32 addr_mask = ( m_fixed_layer_source ? m_region_fixed->bytes() : m_region_fixedbios->bytes() ) - 1; + UINT8* gfx_base = m_fixed_layer_source ? current_fixed_region : m_region_fixedbios->base(); + UINT32 addr_mask = ( m_fixed_layer_source ? current_fixed_region_size : m_region_fixedbios->bytes() ) - 1; UINT16 *video_data = &m_videoram[0x7000 | (scanline >> 3)]; UINT32 *pixel_addr = &bitmap.pix32(scanline, NEOGEO_HBEND); @@ -498,7 +498,7 @@ void neogeo_state::draw_sprites( bitmap_rgb32 &bitmap, int scanline ) zoom_x_table = zoom_x_tables[zoom_x]; /* compute offset in gfx ROM and mask it to the number of bits available */ - gfx = &m_sprite_gfx[((code << 8) | (sprite_y << 4)) & m_sprite_gfx_address_mask]; + gfx = &neogeo_cart_table[current_slot].m_sprite_gfx[((code << 8) | (sprite_y << 4)) & neogeo_cart_table[current_slot].m_sprite_gfx_address_mask]; line_pens = &m_pens[attr >> 8 << 4]; @@ -661,7 +661,7 @@ void neogeo_state::optimize_sprite_data() power of 2 */ mask = 0xffffffff; - len = m_region_sprites->bytes(); + len = current_sprites_region_size; for (bit = 0x80000000; bit != 0; bit >>= 1) { @@ -671,11 +671,11 @@ void neogeo_state::optimize_sprite_data() mask >>= 1; } - m_sprite_gfx.resize(mask + 1); - m_sprite_gfx_address_mask = mask; + neogeo_cart_table[current_slot].m_sprite_gfx.resize(mask + 1); + neogeo_cart_table[current_slot].m_sprite_gfx_address_mask = mask; - src = m_region_sprites->base(); - dest = m_sprite_gfx; + src = current_sprites_region; + dest = neogeo_cart_table[current_slot].m_sprite_gfx; for (unsigned i = 0; i < len; i += 0x80, src += 0x80) { @@ -832,7 +832,6 @@ void neogeo_state::video_start() create_sprite_line_timer(); create_auto_animation_timer(); - m_sprite_gfx_address_mask = 0; optimize_sprite_data(); /* initialize values that are not modified on a reset */ diff --git a/src/mess/drivers/ng_aes.c b/src/mess/drivers/ng_aes.c index e24f1627d5e..0095b2ee0f4 100644 --- a/src/mess/drivers/ng_aes.c +++ b/src/mess/drivers/ng_aes.c @@ -191,6 +191,7 @@ public: DECLARE_DRIVER_INIT(neocdzj); IRQ_CALLBACK_MEMBER(neocd_int_callback); + void common_aes_init(); protected: required_ioport m_io_in2; @@ -992,7 +993,7 @@ void ng_aes_state::common_machine_start() neogeo_main_cpu_banking_init(); /* set the initial audio CPU ROM banks */ - neogeo_audio_cpu_banking_init(); + neogeo_audio_cpu_banking_init(1); create_interrupt_timers(); @@ -1586,8 +1587,27 @@ ROM_END #define rom_neocdzj rom_neocdz +void ng_aes_state::common_aes_init() +{ + current_maincpu_region = memregion("maincpu")->base(); + current_maincpu_region_size = memregion("maincpu")->bytes(); + current_ymsnd_region = memregion("ymsnd")->base(); + current_ymsnd_region_size = memregion("ymsnd")->bytes(); + current_sprites_region = memregion("sprites")->base(); + current_sprites_region_size = memregion("sprites")->bytes(); + current_fixed_region = memregion("fixed")->base(); + current_fixed_region_size = memregion("fixed")->bytes(); + current_audiocpu_region = memregion("audiocpu")->base(); + current_audiocpu_region_size = memregion("audiocpu")->bytes(); + current_audiocrypt_region = memregion("audiocrypt")->base(); + current_audiocrypt_region_size = memregion("audiocrypt")->bytes(); + current_ymdelta_region = memregion("ymsnd.deltat")->base(); + current_ymdelta_region_size = memregion("ymsnd.deltat")->bytes(); +} + DRIVER_INIT_MEMBER(ng_aes_state,neogeo) { + common_aes_init(); } @@ -1596,11 +1616,13 @@ CONS( 1990, aes, 0, 0, aes, aes, ng_aes_state, neogeo, "SNK", DRIVER_INIT_MEMBER(ng_aes_state,neocdz) { + common_aes_init(); NeoSystem = NEOCD_REGION_US; } DRIVER_INIT_MEMBER(ng_aes_state,neocdzj) { + common_aes_init(); NeoSystem = NEOCD_REGION_JAPAN; } diff --git a/src/mess/mess.mak b/src/mess/mess.mak index e7a254f8fba..727aea1d7b0 100644 --- a/src/mess/mess.mak +++ b/src/mess/mess.mak @@ -1832,6 +1832,7 @@ $(MESSOBJ)/snk.a: \ $(MAME_MACHINE)/neoprot.o \ $(MAME_MACHINE)/neoboot.o \ $(MAME_DRIVERS)/neogeo.o \ + $(MAME_DRIVERS)/neogeomvs.o \ $(MESS_DRIVERS)/ngp.o \ $(MESS_VIDEO)/k1ge.o \