A shield for the Arduino Mega that can back up video game cartridges.
Go to file
sanni f52df29266
Add auto mapper detecting for MMC3 carts
"E000-FFFF is always fixed to the last bank of ROM." Source: http://kevtris.org/mappers/mmc3/index.html
Therefore calculate CRC32 of the first 512 bytes of the last bank of the PRG ROM instead of the first bank.

Database creation code example:

````
// Convert iNES to useful info (thx to fceux)
    mapper = (romFile[6] >> 4);
    mapper |= (romFile[7] & 0xF0);
    mapper |= ((romFile[8] & 0x0F) << 8);

    // PRG size
    if ((romFile[9] & 0x0F) != 0x0F) {
      // simple notation
      prgsize = (romFile[4] | ((romFile[9] & 0x0F) << 8)); 
    }
    else {
      // exponent-multiplier notation
      prgsize = (((1 << (romFile[4] >> 2)) * ((romFile[4] & 0x3) * 2 + 1)) >> 14); 
    }
    if (prgsize != 0)
      prgsize = (int(log(prgsize) / log(2)));
              
    prgsize = (int_pow(2, prgsize)) * 16;
    
    byte[] first512 = new byte[512];
     
    // MMC1
    if(mapper == 1){
    }
     // MMC2
    if(mapper == 9){
    }
    // MMC3
    if(mapper == 4){
	// MMC3 has 8KB banks
      int startoffset = (prgsize/8 - 1) *8 *1024;  
      // Get crc32 of first 512 bytes of last PRG bank
      for(int l = 0; l < 512; l++){
        first512[l] = romFile[16 + startoffset + l];
      }  
    }
    // MMC4
    else if(mapper == 10){
    }
    // MMC5
    else if(mapper == 5){
    }
    else {
      // Get crc32 of first 512 bytes after iNES header
      for(int l = 0; l < 512; l++){
      first512[l] = romFile[16 + l];
      }
    }
````
2022-10-04 22:31:23 +02:00
.github/workflows Use a matrix instead of defining each job manually 2022-09-24 21:42:20 +02:00
Cart_Reader Update NES.ino 2022-10-04 21:11:13 +02:00
hardware Add Six Slot Adapter Rev2 (fixes CIC Reset) 2022-08-19 09:37:49 +02:00
sd Add auto mapper detecting for MMC3 carts 2022-10-04 22:31:23 +02:00
3dmodel.stl Add files via upload 2022-07-28 14:32:24 +02:00
LICENSE Create LICENSE 2019-02-06 15:55:22 +01:00
pinout.ods Add files via upload 2022-07-15 10:17:20 +02:00
README.md Update README.md 2022-07-30 18:10:53 +02:00

image

Open Source Cartridge Reader

This project represents a community-driven effort to provide an easy to build and easy to modify cartridge dumper.
Happy making. 🔧🔨😊

For any questions you can use the Discussions and/or Issues section here on Github or visit the accompanying thread in the Arduino Forum.
And be sure to check the guides in the Wiki too.

image

Features:

  • Completely stand-alone, does not need a PC to operate (unless for updating firmware)
  • Easy to modify open-source code, write your own extensions and share them with others
  • Portable thanks to a battery/power bank
  • Modular design using mostly off-the-shelf components

image

Supported Systems:

  • Reads official NES, Famicom and Family Basic cartridges including save
  • Supports Mapper 30/NESmaker and flashes INL NM30 boards
  • Reads SNES roms and reads/writes save games from and to the SNES cartridge
    Supported cartridge types so far: LoRom, HiRom, ExHiRom, DSP, SuperFX, SuperFX2, SDD1, CX4, SPC7110, SA1 (last two chips need Adafruit Clock Generator)
  • Reads and writes SNES Satellaview 8M Memory packs (BS-X cartridge and Adafruit Clock Generator needed)
  • Reads and writes Nintendo Power Super Famicom Memory Flash Cartridges (needs Adafruit Clock Generator for best result)
  • Reflashes some Chinese or custom-made SNES repros with AM29F032, MBM29F033, MX29LV320 or MX29LV640 flashroms
  • Reads N64 roms and reads/writes save games(4K/16K Eeprom + Sram + all 3 types of Flashram), Eeprom needs Adafruit Clockgen by default, Proto carts are not supported yet
  • Reads and writes N64 controller paks and also can test a N64 controller's buttons and thumbstick
  • Reflashes some Chinese N64 repros with S29GL type flashroms
  • Reflashes N64 Gamesharks with SST 29LE010(and similar) eeproms
  • Reads Game Boy (Color) roms and reads/writes save games
  • Reads and writes Nintendo Power Game Boy Memory Flash Cartridges
  • Programs custom-made Game Boy (Color) flashcarts with AM29F016, AM29F032, MBM29F033 flashrom
  • Programs EMS GB Smart 32M flash carts
  • Programs Gameboy Camera Flashcart
  • Reads Game Boy Advance roms and reads/writes the save games(4K Eeprom, 64K Eeprom, Sram/Fram, 512K flash, 1M flash)
  • Reflashes some Chinese GBA repros with i4000L0YBQ0, i4400L0ZDQ0, MX29GL128E, MSP55LV128, PC28F256M29 or M29W128GH flashroms
  • Reads Sega Mega Drive roms and reads/writes save games(Sram/Fram, Eeprom)
  • Reads Sega Master System roms and saves
  • Reads Sega Game Gear roms and saves (using Retrode adapter)
  • Reads some Sega Mark III cartridges (using Raphnet adapter)
  • Reads some Sega SG-1000 cartridges (using Raphnet adapter)
  • Reads some Sega Cards (using Card Catcher and Raphnet Mark III Adapter)
  • Reads PC engine/TG16 cartridges (using Retrode or custom adapter)
  • Reads WonderSwan cartridges (using custom adapter)
  • Reads NeoGeo Pocket cartridges (using custom adapter)
  • Programs flashrom chips like AM29F016B/D, AM29F032B, MBM29F033C, MX29F1601, MX29F1610, MX29L3211, MX29LV160, MX29LV320, S29GL032M, MX26L6420, MBM29F800BA, AM29F800BB, LH28F016SUT, AM29F400AB, E28FXXXJ3A and AM29LV033C (using custom adapter)
  • Programs M27C322 eproms (using custom adapter)

image

Open Source Licenses:

  • Software(everything in Cart_Reader folder) = GPL v3
  • Hardware(everything in hardware folder) = CC-BY-4.0