diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TQROM.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TQROM.cs index fb87279d16..a17fe275e5 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TQROM.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TQROM.cs @@ -16,11 +16,6 @@ namespace BizHawk.Emulation.Consoles.Nintendo case "NES-TQROM": //high speed and pinbot AssertPrg(128); AssertChr(64); AssertVram(8); AssertWram(0); break; - case "NES-TQROM-BAD": //high speed bad dumps - Cart.vram_size = 8; - Cart.wram_size = 0; - AssertPrg(128); AssertChr(128); - break; default: return false; } @@ -31,7 +26,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo } public override byte ReadPPU(int addr) - { + { if (addr < 0x2000) { int bank_1k = mapper.Get_CHRBank_1K(addr); diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TxROM.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TxROM.cs index cb907ade04..c2582e8ca3 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TxROM.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TxROM.cs @@ -56,7 +56,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo AssertPrg(64); AssertChr(64); AssertVram(0); AssertWram(0); AssertBattery(false); break; - case "NES-TEROM": //Adv of lolo 2 + case "NES-TEROM": //Adventures of lolo 2 + case "HVC-TEROM": //Adventures of Lolo (J) AssertPrg(32); AssertChr(32); AssertVram(0); AssertWram(0); AssertBattery(false); break; @@ -65,6 +66,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo AssertBattery(false); break; case "NES-TGROM": //mega man 4 & 6 + case "HVC-TGROM": //Aa Yakyuu Jinsei Icchokusen (J) AssertPrg(128, 256, 512); AssertChr(0); AssertVram(8); AssertWram(0); AssertBattery(false); break; @@ -72,6 +74,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(8); break; case "NES-TLROM": //mega man 3 + case "HVC-TLROM": //8 eyes (J) AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(0); AssertBattery(false); break; diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs index ff8889593b..0598659563 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs @@ -24,8 +24,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo class MMC1 { - public MMC1() + NES.NESBoardBase board; + public MMC1(NES.NESBoardBase board) { + this.board = board; + //collect data about whether this is required here: //kid icarus requires it //zelda doesnt; nor megaman2; nor blastermaster; nor metroid @@ -120,8 +123,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo wram_disable = (value >> 4) & 1; break; } - //Console.WriteLine("mapping.. chr_mode={0}, chr={1},{2}", chr_mode, chr_0, chr_1); - //Console.WriteLine("mapping.. prg_mode={0}, prg_slot{1}, prg={2}", prg_mode, prg_slot, prg); + //board.NES.LogLine("mapping.. chr_mode={0}, chr={1},{2}", chr_mode, chr_0, chr_1); + //board.NES.LogLine("mapping.. prg_mode={0}, prg_slot{1}, prg={2}", prg_mode, prg_slot, prg); } public int Get_PRGBank(int addr) @@ -254,69 +257,70 @@ namespace BizHawk.Emulation.Consoles.Nintendo case "NES-SCROM": //mechanized attack case "NES-SC1ROM": //knight rider AssertPrg(64); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "NES-SEROM": //lolo case "HVC-SEROM": //dr. mario AssertPrg(32); AssertChr(32); AssertVram(0); AssertWram(0); - break; + break; case "NES-SFROM": //bubble bobble - AssertPrg(128,256); AssertChr(16,32,64); AssertVram(0); AssertWram(0); - break; + AssertPrg(128, 256); AssertChr(16, 32, 64); AssertVram(0); AssertWram(0); + break; case "NES-SGROM": //bionic commando AssertPrg(128, 256); AssertChr(0); AssertVram(8); AssertWram(0); - break; + break; case "NES-SHROM": //family feud case "NES-SH1ROM": //airwolf AssertPrg(32); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "HVC-SIROM": //Igo: Kyuu Roban Taikyoku AssertPrg(32); AssertChr(16); AssertVram(0); AssertWram(8); - break; + break; case "NES-SJROM": //air fortress - AssertPrg(128,256); AssertChr(16,32,64); AssertVram(0); AssertWram(8); - break; + AssertPrg(128, 256); AssertChr(16, 32, 64); AssertVram(0); AssertWram(8); + break; case "NES-SKROM": //zelda 2 + case "HVC-SKROM": //ad&d dragons of flame (J) AssertPrg(128, 256); AssertChr(128); AssertVram(0); AssertWram(8); - break; + break; case "NES-SLROM": //castlevania 2 + case "KONAMI-SLROM": //bayou billy + case "HVC-SLROM": //Adventures of Lolo 2 (J) AssertPrg(128, 256); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "NES-SL1ROM": //hoops AssertPrg(64, 128, 256); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "NES-SL2ROM": //blaster master AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "NES-SL3ROM": //goal! AssertPrg(256); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "NES-SLRROM": //tecmo bowl AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0); - break; + break; case "HVC-SMROM": //Hokkaidou Rensa Satsujin: Okhotsu ni Shoyu AssertPrg(256); AssertChr(0); AssertVram(8); AssertWram(0); - break; + break; case "NES-SNROM": //dragon warrior 2 - case "HVC-SNROM": - //prg=16 is unexpected but blargg's tests use it - AssertPrg(16, 128, 256); AssertChr(0); AssertVram(8); AssertWram(8); - //TODO - consider making a unique board type for homebrew, as i discover how more of them are working + case "HVC-SNROM": + AssertPrg(128, 256); AssertChr(0); AssertVram(8); AssertWram(8); break; case "NES-SOROM": //Nobunaga's Ambition AssertPrg(128, 256); AssertChr(0); AssertVram(8); AssertWram(16); - break; + break; case "NES-SUROM": //dragon warrior 4 case "HVC-SUROM": AssertPrg(512); AssertChr(0); AssertVram(8); AssertWram(8); - break; + break; case "HVC-SXROM": //final fantasy 1& 2 - AssertPrg(128,256,512); AssertChr(0); AssertVram(8); AssertWram(32); - break; + AssertPrg(128, 256, 512); AssertChr(0); AssertVram(8); AssertWram(32); + break; default: return false; } - mmc1 = new MMC1(); + mmc1 = new MMC1(this); prg_mask = (Cart.prg_size / 16) - 1; vram_mask = (Cart.vram_size*1024) - 1; wram_mask = (Cart.wram_size*1024) - 1; diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs index 296139cf50..b876c5038a 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs @@ -32,6 +32,10 @@ namespace BizHawk.Emulation.Consoles.Nintendo //JJ - Tobidase Daisakusen Part 2 (J) - same as 3-D World Runner //Knight Rider - very glitchy and seems to be a good timing case! (seems to run same as nintendulator and fceux now.. which may not be entirely accurate) + //------ + //zeromus's new notes: + //AD&D Hillsfar (U).nes black screen + public NES() { BootGodDB.Initialize(); @@ -372,7 +376,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo { choice = IdentifyFromGameDB(hash_md5); if (choice == null) + { choice = IdentifyFromGameDB(hash_sha1); + } } if (choice == null) { diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs index c2ac4292e0..55cc4f5093 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs @@ -47,6 +47,24 @@ namespace BizHawk.Emulation.Consoles.Nintendo } } +//if a board is in here then it is either +//1. bad dump (and we should have put it in the gamedb.txt instead) +//2. not in bootgod's DB yet +//3. homebrew/hacks +//it is worth keeping around for homebrew's sake. +//games not in bootgod's DB are probably bad dumps, but a lot of them are in goodNES. not sure what to do about those. +// +//but, in general it is very hard to know whether to put it in here or gamedb.txt. i keep going through various phases. +//this should really just be a backstop for if we've been too lazy to put them all in gamedb.txt +//it would really be sort of cool if we had every goodnes rom listed in gamedb.txt. + +//i think the philosophy is, we should have an iNES guess for everything we have examples of, as well as an overriding gamedb.txt entry +//so when going on mass compatibility sweeps, we should enter in both at once even if it pollutes this with incomprehensible stuff. +//but make sure you always put a test case with each of these to justify it! + +//one thing to keep in mind though: bad dumps should not ruin the assertions on board types. override them in gamedb.txt to the correct parameters. +//or, if necessary, add a new hacky board type. + //MAP PRG CHR WRAM VRAM BOARD static string ClassifyTable = @" 0 16 0 8 8 NROM-HOMEBREW; some of blargg's test (sprite tests) @@ -66,14 +84,13 @@ static string ClassifyTable = @" 3 32 32 8 0 NES-CNROM; adventure island 4 128 128 8 0 NES-TSROM; double dragon 2 (should be TL1ROM but maybe this will work) 4 32 8 8 0 TXROM-HOMEBREW; blargg's mmc3 tests +4 256 256 8 0 NES-TKROM; Aces - Iron Eagle 3 (J) +4 512 128 8 0 NES-TKROM; Pool of radiance (J) 7 128 0 8 0 NES-ANROM; marble madness 7 256 0 8 8 NES-AOROM; battletoads -11 32 16 8 0 Discrete_74x377 -11 16 32 8 0 Discrete_74x377 13 32 0 8 16 NES-CPROM; videomation 66 64 16 8 0 NES-MHROM; super mario bros / duck hunt 66 128 32 8 0 NES-GNROM; gumshoe -119 128 128 8 0 NES-TQROM-BAD; high speed (U) "; } diff --git a/BizHawk.MultiClient/output/gamedb.txt b/BizHawk.MultiClient/output/gamedb.txt index 14193c6a53..72b6028865 100644 --- a/BizHawk.MultiClient/output/gamedb.txt +++ b/BizHawk.MultiClient/output/gamedb.txt @@ -2269,10 +2269,19 @@ sha1:894F20405286F5F75133CE4648300E2C67972B40 Solomon's Key (U) NES board=NES- sha1:0C53B06E1D13AE917536BB39010914EA3D111FF5 Thunder & Lightning (U) NES board=NES-GNROM;PRG=128;CHR=32;bad sha1:9BDFF9A19265D84979F43F0F6E925A735DDEB38B Wai Xing Zhan Shi (Ch) NES board=Mapper242;PRG=512;CHR=0;VRAM=8;WRAM=8 +;and these are even labeled as bad in goodNES +sha1:984ADAEB85403EEF1BA85CDCF310FAAECEB409A0 Adventures of Captain Comic, The (Bad Dump) (U) NES board=COLORDREAMS-74*377;PRG=64;CHR=64;WRAM=0;VRAM=0;bad +sha1:869111A86FD46872AD8B1BA0ED31B858FA15681F Adventures of Lolo (Bad Dump) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0;bad +sha1:41BD74F739E008D476989C8296BB789EE57658F0 Adventures of Lolo (Bad Dump 2) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0;bad + ;these roms are from goodNES but they are confusingly messed up somehow +sha1:36405B87E66E18DC432690A5959D4529C14B1AEE High Speed (U) NES board=NES-TQROM;PRG=128;CHR=64;VRAM=8;WRAM=0;bad sha1:192C543866F1037276D2778046ABEDCA84868E26 Bio Senshi Dan - Increaser To No Tatakai (J) NES board=JALECO-JF-14;PRG=128;CHR=128 sha1:E80FF0B707B0D675FDBEF474E3FDB1A83E2B7C44 Mississippi Satsujin Jiken (J) NES board=JALECO-JF-11;PRG=128;CHR=32;PAD_H=1 sha1:8A5FD1061ADACDEABF422A2D2E555FF70749AE7C Mississippi Satsujin Jiken (Alt) (J) NES board=GXROM_HACKY;PRG=128;CHR=32;PAD_H=1 +;these roms are in goodNES but theyre junk +sha1:4D6117577CE301BB987C5C32FEEF7B132A21B046 Afro Man (Mega Man 3 Hack) (UNL) NES board=TXROM-HOMEBREW;PRG=256;CHR=128;WRAM=8 + #include gamedb_neshomebrew.txt #include gamedb_user.txt