I started from the ground up, and I've been banging on it with bits and bytes to see just how much I can stuff into one app. As of right now, it ONLY supports SNES ROMs and the SNES flashcart. If you somehow manage to figure out a way to throw an NES rom at it and make it talk to the NES flashcart, it won't work and I'll be fairly impressed.
I am not a professional dev. There will be bugs. I've provided what I consider to be extensive log messages that should help me troubleshoot issues, if they're encountered, and that brings us to...
...no more disappointment. Release downloads here, info below. RTFM, it's just down there. Seriously, like four lines down TOPS.
https://www.dropbox.com/s/l5vqpam133x6u ... e.zip?dl=0
https://www.dropbox.com/s/kdottly855n64 ... 2.zip?dl=0
- Fixed bug with drag-drop IPS + ROM causing crash
- Added drop-on-exe/drop-on-shortcut and command line filenames (ex. SNES-Flasher.exe "C:\ROMS\SNES\Super Mario World.smc" to load on start)
- Added right-click menu entry to ROM Data view to copy text to clipboard, for sending to me to debug potential issues
- Remembered that app supports .rar and .7z formats as well. Added to description.
I'll try to keep this short. The SNES Flasher app only supports SNES ROMs. No NES support now, or ever. Why? Because I've begun work on a new project upon which Paul and I will collaborate that will replace this one, allowing SNES support, NES support, and we'll see where it goes from there.
First off, update your drivers. Unplug the Kazzo, download the driver package, install it.
Second, update your firmware. You will LOSE NES SUPPORT. Sorry. Switch the Kazzo to BL mode, plug it in, run the update-mod.bat file within the Firmware directory.
Basic Usage: Run the flasher app. You need .Net 4.5.1 for this. If you don't know what all the buttons do, don't touch them, just drag-and-drop a ROM onto the window, and wait for it to be done. Pay attention, it'll tell you what it judges is the right position for your HiLo switch on the cart. It's almost never wrong. (Star Ocean DeInterleaved S-DD1 Hack comes to mind.) DO NOT waste your time removing the header, DO NOT try using pre-mangled (remapped, mirrored, etc) ROMs, this app handles it all for you. Drop, flash, done. There are Load/Open buttons on the form, and an Execute button. If you drop files, the program will act on them immediately - if you need an IPS patch, drop it WITH THE ROM or load them with the buttons. Button loads = manual Execute/Apply. Drop = Automatic Execute/Apply. Got it? Cool.
Intermediate usage: The window supports drop targets for three major types; Archive files (Zip, Rar, 7z), SNES Roms, and IPS patches. You need at least an SNES ROM (either in an archive or by itself) OR an IPS patch (Either in an archive or by itself.) per drag. If you try to drop more than one ROM, or more than one IPS patch, it will not allow the drop.
If you wish, you can drop an archive that includes a mix of multiple ROMs, multiple IPS patches, or a mix of both. If there's only one of whatever type, it'll load it. If there's multiple, it will PROMPT you. (Yeah, I thought that was pretty badass too, haha.)
If you drop an IPS patch, it will ATTEMPT to decide how to handle it. (AKA, does the IPS need a headered ROM or not? It'll run the patch both ways, as well as against a non-headered ROM and a headered ROM in-memory, and attempt to decide which one "makes sense" to it. It's not perfect, so if you have problems, try manually setting the "Patch Needs ROM Header" yourself and re-flashing.)
Advanced usage info:
Data Type: Kazzo-internal firmware values and write patterning depend on this being right. It's automatically handled based on several ROM criteria - assume it's right.
Cart Size: Determines erase size and maximum write length. Manually pick this if it's not automatically picked - the program will halt a write if it's not picked. Proper firmware should set this properly as you start to write the ROM.
Auto-Erase Cart: Duh. Untick this if your cart's already erased, though. Or don't.
Write/Read ROM: Obvious, but Read ROM is in a very very very (VERY) early (BROKEN) state. You might get a good ROM. You might get garbage. Don't count on this working.
Buffer Only (For Patching): If you want to mangle your ROM (apply IPS patches, mirror, etc) and use it in an external tool for whatever reason, pick this. Also good for troubleshooting.
Execute: The GO button. click it when you're ready.
Enable Patcher: Click it, load a Patch file, optionally play with the Patch Needs ROM Header option, then apply it.
Enable Internal IPS Patches: This will attempt to remove ROM copy protections, so you can try patching things like Earthbound or Donkey Kong country. This is buggy. If you have problems, disable this and use an external tool like UCON64.
Auto-Mirror ROM: Typically not required, but enabled for compatibility. Automatically mirrors ROM data into unused banks to compensate for having a larger board and a smaller ROM, for ROMs that actually check this. Not many do. R-Type 3, for example, does.
Auto-Select Write Buffer: The program stores a buffer of each ROM you load, every time it mangles the data. This way, if it screws up the data (or you do) you can take a step back and re-apply whatever you/it just tried to do. Typically, this is safe to leave enabled.
Auto-Detect Cart Size: No clue why you'd turn this off. It reads your Kazzo cart's Flash ID values (using the Kazzo's firmware) and selects the right size of cart automatically. Only disable this if your cart has (somehow) a modified Flash, or an unsupported Flash, or...I really don't know. Just leave it on.
Auto-Select Data Type: Automatically picks the Data Type (Kazzo Firmware-related stuff) to flash. Unless you're using a mangled buffer intentionally, this is already right. Leave it be.
Allow Advanced Write Modes: Enabled automatically when your Kazzo has the right firmware version. Disabled manually if you think the Advanced Write Mapping (for speed improvements and "intelligent" mirroring and so on) is causing a write problem. Disable the ROM Protection patcher first, then this, if you have problems.
Protect Vectors in Patch (BETA): This attempts to stop IPS patches from changing the Vectors in the ROM. This disables Trainers and such in ROM patches, as well as allowing patches written for certain emulator workarounds to work on actual hardware. This only works if the patch data begins within the Vector table. Disable it if you get unexpected behavior.
Log data should indicate what a problem is, if you can't figure something out let me know, but I'll likely need the last dozen (or two) lines of your log! Probably also a copy of your ROM/IPS files.
Again, I tried to make this as "drag, drop, done" as possible. It provides way more information than you need. Ignore it unless it's red or has the red "!" sign on it. The info (and control) is there for advanced users, the simplicity (and automation) is there for beginners. Start by flashing something simple, like Super Mario World, then move on to a ROM hack or something, and eventually all the way up to your translated original Japanese copy protected ROM. My initial goal here was "if you need another program I've done something wrong" and in 99% of cases, that fits. The only failing there (that I'm aware of) is that some ROMs use copy protection that I didn't patch out, so you might need a patcher for that.
Sadly, SRAM stuff didn't make it, but it'll be in the next project. I'm done with this app (UNLESS SOMEONE FINDS A MAJOR BUG) but NOT with INL's hardware. There will be more, and this time it'll support SNES, NES, and the SRAM functions everyone wants.
One final note that I hesitate to mention. This took a LOT of time, and while I did it expecting no payment, fully for free, to be released to the public at NO CHARGE, I have been approached regarding donations. If you really feel the need to donate to me, ask me in a PM. I'm not going to put the link public here because I don't want anyone to feel obligated or pressured. If you pulled a TL;DR and don't see this, I'm fine with that. If you want to use it free forever and that's it, I'm literally pleased that I could help you, and that's enough. If you feel the need to donate, I'm going to ask that you contact me privately for the details, and I want you to know that I appreciate it, but I'm NOT asking for a cent.