I've been playing around with mine recently. I loan my games out to family and friends, so I back up and erase the save games before I do and then restore them when I get them back. The major downside is that I have to boot into Windows to back up or restore. So last weekend I decided to make it my project to recreate the functionality in a C++ terminal application. It compiles and runs on Linux and Windows, with most functionality working except for the most important parts―reading and writing.
I'm mimicking the official software as closely as possible, but getting weird output when dumping saves. For example, the following screenshot is of two dumps of Fire Emblem Shadow Dragon, the left is R4iSaveDongle.exe, the right is my application:
Notice the 55s where FFs should be? There's other strange characters in mine too, although a lot of the actual data matches up just fine. This might be something to do with the TEA authentication.
As for dumping ROMs with this, I'm pretty sure you'll need to hack the firmware, unless a secret command exists to allow indexed reading from the ROM. You
can get information about the ROM from the header, which also includes the ROM size (which would be necessary for indexed reading).
EDIT: note that trawling through the decompiled source code isn't a walk in the park. TEA decryption might be required, as evidenced by this part of Form1.cs (I'm using dotPeek in a VM):
Code:
__memcpy(@arrayTypeBy07E1, (MCU_EEPROM_DATA\u0024\u0024BY0A\u0040E&) ((IntPtr) &\u003CModule\u003E.MCU_EEPROM_DATA + 24), 8);
\u0024ArrayType\u0024\u0024\u0024BY07E arrayTypeBy07E2;
// ISSUE: explicit reference operation
// ISSUE: explicit reference operation
// ISSUE: cpblk instruction
__memcpy(@arrayTypeBy07E2, @\u003CModule\u003E.MCU_EEPROM_DATA, 8);
this.TEA64bit_decode((uint*) &arrayTypeBy07E1, (uint*) &\u003CModule\u003E.g_key);
Everything is decompiled to pointers, which makes it really awkward to figure out what is going on.
@[member='kerneldev'], did you manage to get anywhere with this?