namespace VirtualNes.Core { public static class RomPatch { public static void DoPatch(ref uint crc, ref byte[] lpPRG, ref byte[] lpCHR, ref int mapper, ref NESHEADER header) { // Mapper 000 if (crc == 0x57970078) { // F-1 Race(J) lpPRG[0x078C] = 0x6C; lpPRG[0x3FE1] = 0xFF; lpPRG[0x3FE6] = 0x00; } if (crc == 0xaf2bbcbc // Mach Rider(JU) || crc == 0x3acd4bf1 // Mach Rider(Alt)(JU) 無理矢理パッチ(^^; || crc == 0x8bbe9bec) { lpPRG[0x090D] = 0x6E; lpPRG[0x7FDF] = 0xFF; lpPRG[0x7FE4] = 0x00; header.control1 = (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0xe16bb5fe) { // Zippy Race(J) header.control1 &= 0xf6; } if (crc == 0x85534474) { // Lode Runner(J) lpPRG[0x29E9] = 0xEA; // セーブメニューを出すパッチ lpPRG[0x29EA] = 0xEA; lpPRG[0x29F8] = 0xEA; lpPRG[0x29F9] = 0xEA; } // Mapper 001 if (crc == 0x7831b2ff // America Daitouryou Senkyo(J) || crc == 0x190a3e11 // Be-Bop-Highschool - Koukousei Gokuraku Densetsu(J) || crc == 0x52449508 // Home Run Nighter - Pennant League!!(J) || crc == 0x0973f714 // Jangou(J) || crc == 0x7172f3d4 // Kabushiki Doujou(J) || crc == 0xa5781280 // Kujaku Ou 2(J) || crc == 0x8ce9c87b // Money Game, The(J) || crc == 0xec47296d // Morita Kazuo no Shougi(J) || crc == 0xcee5857b // Ninjara Hoi!(J) || crc == 0xe63d9193 // Tanigawa Kouji no Shougi Shinan 3(J) || crc == 0xd54f5da9 // Tsuppari Wars(J) || crc == 0x1e0c7ea3) { // AD&D Dragons of Flame(J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } if (crc == 0x1995ac4e) { // Ferrari Grand Prix Challenge(J) 無理矢理パッチ(^^; lpPRG[0x1F7AD] = 0xFF; lpPRG[0x1F7BC] = 0x00; } if (crc == 0x20d22251) { // Top rider(J) 無理矢理パッチ(^^; lpPRG[0x1F17E] = 0xEA; lpPRG[0x1F17F] = 0xEA; } if (crc == 0x11469ce3) { // Viva! Las Vegas(J) 無理矢理パッチ(^^; lpCHR[0x0000] = 0x01; } if (crc == 0x3fccdc7b) { // Baseball Star - Mezase Sankanou!!(J) 無理矢理パッチ(^^; lpPRG[0x0F666] = 0x9D; } if (crc == 0xdb564628) { // Mario Open Golf(J) lpPRG[0x30195] = 0xC0; } // Mapper 002 if (crc == 0x63af202f) { // JJ - Tobidase Daisakusen Part 2(J) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0x99a62e47) { // Black Bass 2, The(J) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0x0eaa7515 // Rod Land(J) || crc == 0x22ab9694) { // Rod Land(E) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0x2061772a) { // Tantei Jinguji Taburou Tokino Sugiyukumamani (J) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } // Mapper 003 if (crc == 0x29401686) { // Minna no Taabou no Nakayoshi Dai Sakusen(J) // lpPRG[0x2B3E] = 0x60; } if (crc == 0x932a077a) { // TwinBee(J) mapper = 87; } if (crc == 0x8218c637) { // Space Hunter(J) // header.control1 &= 0xf6; // header.control1 |= ROM_4SCREEN; header.control1 = (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0x2bb6a0f8 // Sherlock Holmes - Hakushaku Reijou Yuukai Jiken(J) || crc == 0x28c11d24 // Sukeban Deka 3(J) || crc == 0x02863604) { // Sukeban Deka 3(J)(Alt) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } // Mapper 004 if (crc == 0x58581770) { // Rasaaru Ishii no Childs Quest(J) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0xf3feb3ab // Kunio Kun no Jidaigeki Dayo Zenin Shuugou! (J) || crc == 0xa524ae9b // Otaku no Seiza - An Adventure in the Otaku Galaxy (J) || crc == 0x46dc6e57 // SD Gundam - Gachapon Senshi 2 - Capsule Senki (J) || crc == 0x66b2dec7 // SD Gundam - Gachapon Senshi 3 - Eiyuu Senki (J) || crc == 0x92b07fd9 // SD Gundam - Gachapon Senshi 4 - New Type Story (J) || crc == 0x8ee6463a // SD Gundam - Gachapon Senshi 5 - Battle of Universal Century (J) || crc == 0xaf754426 // Ultraman Club 3 (J) || crc == 0xfe4e5b11 // Ushio to Tora - Shinen no Daiyou (J) || crc == 0x57c12c17) { // Yamamura Misa Suspense - Kyouto Zaiteku Satsujin Jiken (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } if (crc == 0x42e03e4a) { // RPG Jinsei Game (J) mapper = 118; header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } if (crc == 0xfd0299c3) { // METAL MAX(J) lpPRG[0x3D522] = 0xA9; lpPRG[0x3D523] = 0x19; } if (crc == 0x1d2e5018 // Rockman 3(J) || crc == 0x6b999aaf) { // Mega Man 3(U) // lpPRG[0x3C179] = 0xBA;// // lpPRG[0x3C9CC] = 0x9E; } // Mapper 005 if (crc == 0xe91548d8) { // Shin 4 Nin Uchi Mahjong - Yakuman Tengoku (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } if (crc == 0x255b129c) { // Gun Sight (J) / Gun Sight (J)[a1] lpPRG[0x02D0B] = 0x01; lpPRG[0x0BEC0] = 0x01; } // Mapper 010 if (crc == 0xc9cce8f2) { // Famicom Wars (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 016 if (crc == 0x983d8175 // Datach - Battle Rush - Build Up Robot Tournament (J) || crc == 0x894efdbc // Datach - Crayon Shin Chan - Ora to Poi Poi (J) || crc == 0x19e81461 // Datach - Dragon Ball Z - Gekitou Tenkaichi Budou Kai (J) || crc == 0xbe06853f // Datach - J League Super Top Players (J) || crc == 0x0be0a328 // Datach - SD Gundam - Gundam Wars (J) || crc == 0x5b457641 // Datach - Ultraman Club - Supokon Fight! (J) || crc == 0xf51a7f46 // Datach - Yuu Yuu Hakusho - Bakutou Ankoku Bujutsu Kai (J) || crc == 0x31cd9903 // Dragon Ball Z - Kyoushuu! Saiya Jin (J) || crc == 0xe49fc53e // Dragon Ball Z 2 - Gekishin Freeza!! (J) || crc == 0x09499f4d // Dragon Ball Z 3 - Ressen Jinzou Ningen (J) || crc == 0x2e991109 // Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (J) || crc == 0x170250de) { // Rokudenashi Blues(J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 019 if (crc == 0x3296ff7a // Battle Fleet (J) || crc == 0x429fd177 // Famista '90 (J) || crc == 0xdd454208 // Hydlide 3 - Yami Kara no Houmonsha (J) || crc == 0xb1b9e187 // Kaijuu Monogatari (J) || crc == 0xaf15338f) { // Mindseeker (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 026 if (crc == 0x836cc1ab) { // Mouryou Senki Madara (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 033 if (crc == 0x547e6cc1) { // Flintstones - The Rescue of Dino & Hoppy, The(J) mapper = 48; } // Mapper 065 if (crc == 0xfd3fc292) { // Ai Sensei no Oshiete - Watashi no Hoshi (J) mapper = 32; } // Mapper 068 if (crc == 0xfde79681) { // Maharaja (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 069 if (crc == 0xfeac6916 // Honoo no Toukyuuji - Dodge Danpei 2(J) || crc == 0x67898319) { // Barcode World(J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 080 if (crc == 0x95aaed34 // Mirai Shinwa Jarvas (J) || crc == 0x17627d4b) { // Taito Grand Prix - Eikou heno License (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 082 if (crc == 0x4819a595) { // Kyuukyoku Harikiri Stadium - Heisei Gannen Ban (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 086 if (crc == 0xe63f7d0b) { // Urusei Yatsura - Lum no Wedding Bell(J) mapper = 101; } // Mapper 118 if (crc == 0x3b0fb600) { // Ys 3 - Wonderers From Ys (J) header.control1 |= (byte)EnumRomControlByte1.ROM_SAVERAM; } // Mapper 180 if (crc == 0xc68363f6) { // Crazy Climber(J) header.control1 &= 0xf6; } // VS-Unisystem if (crc == 0x70901b25) { // VS Slalom mapper = 99; } if (crc == 0xd5d7eac4) { // VS Dr. Mario mapper = 1; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0xffbef374 // VS Castlevania || crc == 0x8c0c2df5) { // VS Top Gun mapper = 2; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0xeb2dba63 // VS TKO Boxing || crc == 0x98cfe016 // VS TKO Boxing (Alt) || crc == 0x9818f656) { // VS TKO Boxing (f1) mapper = 4; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0x135adf7c) { // VS Atari RBI Baseball mapper = 4; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0xf9d3b0a3 // VS Super Xevious || crc == 0x9924980a // VS Super Xevious (b1) || crc == 0x66bb838f) { // VS Super Xevious (b2) mapper = 4; header.control1 &= 0xF6; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0x17ae56be) { // VS Freedom Force mapper = 4; header.control1 &= 0xF6; header.control1 |= (byte)EnumRomControlByte1.ROM_4SCREEN; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0xe2c0a2be) { // VS Platoon mapper = 68; header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (crc == 0xcbe85490 // VS Excitebike || crc == 0x29155e0c // VS Excitebike (Alt) || crc == 0xff5135a3) { // VS Hogan's Alley header.control1 &= 0xF6; header.control1 |= (byte)EnumRomControlByte1.ROM_4SCREEN; } if (crc == 0x0b65a917) { // VS Mach Rider(Endurance Course) lpPRG[0x7FDF] = 0xFF; lpPRG[0x7FE4] = 0x00; } if (crc == 0x8a6a9848 // VS Mach Rider(Endurance Course)(Alt) || crc == 0xae8063ef) { // VS Mach Rider(Japan, Fighting Course) lpPRG[0x7FDD] = 0xFF; lpPRG[0x7FE2] = 0x00; } if (crc == 0x16d3f469) { // VS Ninja Jajamaru Kun (J) header.control1 &= 0xf6; header.control1 |= (byte)EnumRomControlByte1.ROM_VMIRROR; } if (crc == 0xc99ec059) { // VS Raid on Bungeling Bay(J) mapper = 99; header.control1 &= 0xF6; header.control1 |= (byte)EnumRomControlByte1.ROM_4SCREEN; } if (crc == 0xca85e56d) { // VS Mighty Bomb Jack(J) mapper = 99; header.control1 &= 0xF6; header.control1 |= (byte)EnumRomControlByte1.ROM_4SCREEN; } if (crc == 0xeb2dba63 // VS TKO Boxing || crc == 0x9818f656 // VS TKO Boxing || crc == 0xed588f00 // VS Duck Hunt || crc == 0x8c0c2df5 // VS Top Gun || crc == 0x16d3f469 // VS Ninja Jajamaru Kun || crc == 0x8850924b // VS Tetris || crc == 0xcf36261e // VS Sky Kid || crc == 0xe1aa8214 // VS Star Luster || crc == 0xec461db9 // VS Pinball || crc == 0xe528f651 // VS Pinball (alt) || crc == 0x17ae56be // VS Freedom Force || crc == 0xe2c0a2be // VS Platoon || crc == 0xff5135a3 // VS Hogan's Alley || crc == 0x70901b25 // VS Slalom || crc == 0x0b65a917 // VS Mach Rider(Endurance Course) || crc == 0x8a6a9848 // VS Mach Rider(Endurance Course)(Alt) || crc == 0xae8063ef // VS Mach Rider(Japan, Fighting Course) || crc == 0xcc2c4b5d // VS Golf || crc == 0xa93a5aee // VS Stroke and Match Golf || crc == 0x86167220 // VS Lady Golf || crc == 0xffbef374 // VS Castlevania || crc == 0x135adf7c // VS Atari RBI Baseball || crc == 0xd5d7eac4 // VS Dr. Mario || crc == 0x46914e3e // VS Soccer || crc == 0x70433f2c // VS Battle City || crc == 0x8d15a6e6 // VS bad .nes || crc == 0x1e438d52 // VS Goonies || crc == 0xcbe85490 // VS Excitebike || crc == 0x29155e0c // VS Excitebike (alt) || crc == 0x07138c06 // VS Clu Clu Land || crc == 0x43a357ef // VS Ice Climber || crc == 0x737dd1bf // VS Super Mario Bros || crc == 0x4bf3972d // VS Super Mario Bros || crc == 0x8b60cc58 // VS Super Mario Bros || crc == 0x8192c804 // VS Super Mario Bros || crc == 0xd99a2087 // VS Gradius || crc == 0xf9d3b0a3 // VS Super Xevious || crc == 0x9924980a // VS Super Xevious || crc == 0x66bb838f // VS Super Xevious || crc == 0xc99ec059 // VS Raid on Bungeling Bay(J) || crc == 0xca85e56d) { // VS Mighty Bomb Jack(J) header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } if (mapper == 99 || mapper == 151) { header.control2 |= (byte)EnumRomControlByte2.ROM_VSUNISYSTEM; } //ヘフハウフオリ2 コタサェヨミホトー if (crc == 0x19B9E732) { mapper = 199; } } } }