SurfaceDragon, it will very likely support either six 32K NROMs loaded at once, or two NROMs and one MMC1, with a menu to select which one to run. It might be possible at some point to fit ten NROMs or four NROMs and one MMC1, though that would require more Flash rewriting each time one was loaded/unloaded. There is a lot of flexibility in the software, so the first release will have plenty of room for upgrades without any changes to the cartridge.
I like the load status beeps. That was a great idea.
That was just for this development version where it's the only way to know it's working. The release will show a progress bar on the PC, so you don't need the NES even connected to a TV or anything while loading it.
Here's the current API I'm working on. It makes working with the cartridge extremely simple from C. It will be used to build the various tools for putting things on the cartridge and backing up SRAM. Initially I'm writing a simple command-line tool, but there should be some GUIs at some point.
// Bank parameter below selects 16K bank from Flash at $8000.
// It can be any value from 0 to $1F.
// Confirm that NES and Munchausen cartridge are ready
error_t ping();
// Read section of cartridge or NES memory, including SRAM
error_t read_mem( void* out, int size, int addr, int bank );
// Write any section of cartridge or NES memory, including SRAM
error_t write_mem( void const* in, int size, int addr, int bank );
// Find CRC 16 of any section of NES memory
error_t crc16_mem( unsigned* out, int size, int addr, int bank );
// Program any portion of cartridge Flash memory. Size and addr must be
// multiple of 256. Flash memory is 512K total ($80000 bytes).
error_t write_flash( void const* in, int size, int addr );
// Erase a 64K sector of Flash. There are 8 total.
error_t erase_sector( int sector );
Different errors are returned for the following situations:
* NES not responding
* Munchausen cartridge not working properly
* Data transfer error
* Flash programming failed
* Flash took too long to program
* Flash erase failed
All data transferred between the PC and NES is extensively checksummed, to avoid any undetected data errors. Given the clean API, it will be easy to write thorough tests of the cartridge and API. I plan on adding a cartridge test function which ensures all the Munchausen functions are working.
Last edited by blargg (Aug 26, 2010 12:38 am)