slinga-homebrew / save-game-copier Goto Github PK
View Code? Open in Web Editor NEWCopy Sega Saturn save game files
License: GNU General Public License v3.0
Copy Sega Saturn save game files
License: GNU General Public License v3.0
Create a backup-actionreplay interface to support Action Replay saves. They are compressed.
As was mentioned in a previous ticket Jo Engine does throw an error if the target device is full. Perhaps instead of blue-screening we could have a message pop-up that "Target Device is full, cannot copy save". Kind of getting into the weeds of just QOL changes, which is awesome :)
When a flashed AR cart is used, the "Exit to Multiplayer" option crashes the Saturn. The simplest fix would be to call SatiatorExit() before calling ExitToMuliplayer() but that doesn't seem to work.
Improve documentation for backup.c functions. Specifically related to the BUP_HEADER format.
Implement a isBackupDeviceWriteable() to wrap Delete Save options.
Move the source code for backup devices (Saturn, CD, Satiator, Mode, etc) to backends folder. Update makefile.
I've noticed that SGC ignores comments. Not only do those comments help identify what the save data is for, but many games use it. For example, on Sim City 2000, the name of my city was changed from JoeVille to SGC. In Policenauts, the comments are used to tell the game and the player the chapter and amount of time as been played up to that point. Now when I try to load a game, all of my 10 save files say SGC. As a result, the game thinks that each save file is the same. despite me having plenty of saves in disc 1 and 2, the game always asks me to insert disc 3 no matter which one I select. Kind of game breaking.
Again, the comments are vital and absolutely essential. Very, very, VERY important!
It would be nice to have a way to dump the cartridge firmware/rom and/or write it to an external device (such as MODE for example); some rare cartridges have yet to be dumped.
To simplify things have all ODEs use the "SATSAVES" directory. Currently Satiator uses "SAVES". Will require coordinating with the ODE community.
Would be nice to see an "A" button to proceed "B" to return option at the bottom. It is fairly intuitive as-is, but it will just help for new users to navigate.
I have played falcom classic2 in mednafen emulator,But A few days ago,I feel like to play falcom classic2 in my japanese saturn from savestate of mednafen emulator.
So,I extract raw save data from bkr extension file of mednafen emulator.(I use ss-save-parser 0.96 of below link in order to extract raw date from bkr file)
ss-save-parser 0.96
I converted raw save data file to BUP file and verified that it is correct BUP file by running below command in Windows CMD commands
python3 bup_parse.py --input_bup falcom_c.BUP
I add this bup file to SGC ISO with Winiso and Burned this SGC ISO with imgburn.
I inserted this burn disc into cd tray of japanese saturn and got into Save game copier menu.
I selected CD file SYSTEM and select falcom_c.bup file from list But it display below screenshot of
"Failed to copy the save ,Possibly due to a lack of space."
Error message of Save game copier
I don't have action replay or any other external cartridge ,I only use internal memory which is maintained by CR2032 battery..
Is there any ways to copy my savedata from mednafen into internal memory of japanese saturn?
For your information below link is BUP file which I tried to copy it into internal memory of saturn.
https://www.dropbox.com/s/30hnoktnlcqgxq7/FALCOM_C.BUP?dl=0
any reply would be appreciated.
I extracted a Dragon Force 2 save (this game has an English patch applied), ran the python script from Save-Game-Extractor, I did this twice. I have not tried copying any other games yet.
@ubuntu3:~/Save-Game-Extractor$ python3 sgex.py mysave.bin
Save Game Extractor
(github.com/slinga-homebrew/Save-Game-Extractor)
Errors Corrected: 4
Transmitted Filename: DF2_DATA_01
Transmitted Save Size: 8636
Transmitted MD5: 883bd16501990a5c3cbef12f6f01309d
Computed MD5: 883bd16501990a5c3cbef12f6f01309d
MD5 hashes validate, save is correct.
Wrote save game DF2_DATA_01 to disk
@ubuntu3:~/Save-Game-Extractor$ python3 sgex.py df2.bin
Save Game Extractor
(github.com/slinga-homebrew/Save-Game-Extractor)
Errors Corrected: 2
Transmitted Filename: DF2_DATA_01
Transmitted Save Size: 8636
Transmitted MD5: 883bd16501990a5c3cbef12f6f01309d
Computed MD5: 883bd16501990a5c3cbef12f6f01309d
MD5 hashes validate, save is correct.
Wrote save game DF2_DATA_01 to disk
I compiled a bin+cue with the converted save DF2_DATA_01 twice and used Save-Game-Copier to copy to the internal memory.
File copied to the internal memory via Save-Game-Copier.
https://imgur.com/a/jddTISd
This is what it looks like on my cartridge which is where I extracted the save using Save-Game-Extractor.
This what the file looks like that has been copied by Save-Game-Copier.
I go into the game and there is no save file.
saturnReadSaveFile() is receiving a filename ending in .BUP instead of the savename. This seems to be safe for maximum character save names as Jo Engine must be silently ignoring the remaining characters. When using with a smaller save name, the read fails. Refactor.
Before switching to .BUP save files SGC came with 8-10 saves. It currently comes with 2 .BUP files now. Add some more save files. The goal isn't to supplant Cafe-Alpha's collection (https://ppcenter.webou.net/pskai/savedata/) but just a couple of good saves.
There have been enough updates to SGC that new screenshots are warranted. Wait until after the dynamic menu is implemented.
Add support for device partitions. Notably SGC does not work correctly with the Floppy Disk Drive (FDD). The first partition works, the second is invisible. Unfortunately Jo Engine does not make visible the partitions as far as I can tell.
I had on my official save cartridge a couple of 1 memory unit junk files..not sure where they came from. The built-in bios level saturn memory manager had no issue reading the entire contents of the cart, but the Save Game Copier throws an error for listing files until I went in and deleted these junk files. Not sure if there is a more graceful way of listing or identifying corrupt files in a memory source without throwing an error.
Add a write to memory option to be able to write files to memory. It should use the same UI and Dump Memory. It should be in the list of destination devices.
Not sure this is even possible but now that we have comments working and timestamp is a part of those comments could we throw a soft warning if you are attempting to copy over a newer version of a save that has the same name on a target device? Maybe this could/should be extended to any instance where you are copying over a save where the target device has a save there already.
Not sure this is possible to trigger, but it would be nice to have an exit function for those of us using an ODE to gracefully exit the program. This could be done by triggering a system reset to "reboot" the Saturn.
As reported on TerraOnion discord a user had 60+ items and only the first 32 will display. He needed to save those off, delete the first 32 and then the rest would display.
Add checks for all devices to validate that they are present. They must fail gracefully when not present.
Hi, I was trying to copy games from my action replay to my satiator, and it seems to be missing the .BUP extension when it puts them in the folder, and in turn they aren't visible when you view the saves on the satiator.
Copying from internal memory works as expected, it's only when copying from action replay that this seems to happen
First off the number of issues is not a critique on the tool..it is awesome as-is. Just throwing ideas out there since I'm now using it in MODE.
Would it be possible to have the copier also allow for a complete internal back-up as opposed to one-off saves? Maybe with a timestamp function so you can save and restore off multiple instances? Obviously this wouldn't have made sense in the pre-ODE days, but with satiator and MODE using the tool now, it makes more sense.
Save comments appear to have garbage characters printed. Double check how comments are being printed.
GDEmu is aware of Save Game Copier but currently Rhea\Phoebe do not allow writing to the SD card. See comments https://gdemu.wordpress.com/2021/01/20/somnolent-contd/ for reference.
Once there is a library for writing to the Rhea\Phoebe I will add support.
Backing out with the menu is buggy. Look into creating a stack to hold the previous states and pop and push as necessary.
Change the dump memory filename to be 8.3. Something like <hex address 0 padded>.DMP. This will fix some sizing issues I've seen in the UI.
When stored in the Saturn (internal memory, cartridge memory, external device) the saves have metadata such as comments, language, etc. Research into how to copy the metadata as well as how to write it to the Satiator.
This will likely involve changing the save format to some sort of metasave data structure. Look into how other Saturn utilities store this information.
It's possible that Panzer Dragoon Zwei's save is failing to work because the comment isn't correct.
Swap out rebootSaturn() (util.c, main.c) for jo_core_restart_saturn().
Fix the project to build in release mode. This will require removing\replacing the jo_core_error()s in the code.
Hello!
I just wanted to report that I was able to use your Save-Game-Copier fairly successfully with TO's MODE internal ODE.
I was able to:
Issues found:
Even if nothings comes of this, I would like to say thanks as this is a very quick and handy save game utility I can easily boot from MODE to manage my saves. So that alone is very much appreciated. And it also seems as though I could add saves to my Saturn by modifying the ISO. Which could also prove quite handy.
Thank you,
Michael
Create a new menu option to dump user specified address and size to one of the writeable save mediums. This will be useful for backing up the BIOS as well dumping all saves at once.
Entering the address will require coming up with a new input logic.
Staying optimistic, how does it communicate with the serial adapter to right to a floppy drive? Being that they are not easy to get, maybe someone could make an external saver to an SD card to directly to a pc. I dont have 300 for a A saturator so I'm thinking of was I could backup my saves externally.
Running MODE firmware 1.04 and using SGC 3.5.0 and I just changed the Soft Reset to Menu option to "CDPlayer->MODE" and now Save Game Copier does not load (blank black screen). When I change this setting to either of the two other Reset options, SGC loads just fine.
I ran into an issue while researching an issue yesterday where I had nearly 100 saves to sort through in my directory. And it will become harder with more people trading save files.
You have to individually tap down to get through every save file. You cannot hold down to keep moving. You also can't press left or right to page quickly. So when you get up to 30+ save files, that can start getting rough. When you get to even more, it will be extremely hard. Also, there was no alphanumeric sorting being applied so many of the saves were out of order compounding the issue.
Thank you!
Dynamically generate the menu based on the backup devices available. For example don't show Cartridge Memory if the cartridge slot is empty. Likewise remove Satiator from the menu if the Satiator is not detected.
This should extend to the submenus where the list of copy targets should be dynamically generated as well. A file should not copy over its on location as well. For example Internal Memory should not let you copy the file to Internal Memory.
Now that Fenrir/Fenrir 21 pin support save ram backup to sd / restore, would it be possible for add support for fenrir ode on the save game copier?
"You must use the cue file named game_cue_for_mode.cue INSTEAD OF game.cue file. Ensure only 1 cue is present along with game.iso file. This is required because MODE needs a large TOC for the command interface."
you don't say which folder this has to go in?! hdd root, the saturn folder, or make a folder for it in the saturn folder like you have to for games?
Create a backup-memory interface to restore dumping\writing raw memory files.
When performing an action on a save in list view, the list position is then sit back to zero. Create a new variable to save the list position. Update the list position in move_cursor().
Add instructions for adding a save game to the ISO on Linux.
As reported on TO discord;
bumfacekillaToday at 8:14 AM
It also seems that the Save Game Copier cannot handle saves for Hexen (not that anyone would care about that game, haha). The moment you try to access a cartridge with a save for Hexen, you will get a bluescreen with the error
"In saturnListSavesFiles():
Failed to read file size!!"
I assume this is owing to the fact that the save for Hexen is huge (by Saturn standards) at a gargantuan 237.6kb or 3801 blocks, the biggest I've seen so far. Two saves and the cart is basically filled, I remember it being a reason I sold the game back in the day (other than it being awful) lol.
Save file: HOLY_ARK_01.zip
Import the save file from Satiator to internal memory using Save Data Manager v6.545:
https://ppcenter.webou.net/pskai/#download
Launch tools\pskai_sdm.iso
on Satiator and then select "Save Data Import".
Export the save file from internal memory to Satiator using Save Game Copier or Save Data Manager.
To do that in the latter: Save Data Export -> Export Save(s) from Memory Device(s)
Execute bup_parse.py --input_bup HOLY_ARK_01.BUP --extract_raw_save
and you get this result:
Now do the following:
Import the save file from Satiator to internal memory using Save Game Copier v3.6.15.
Export the save file from internal memory to Satiator using Save Game Copier or Save Data Manager.
Execute bup_parse.py --input_bup HOLY_ARK_01.BUP --extract_raw_save
and you get this result:
If you take this BUP file and trim the first 64 bytes, the MD5 hash of the raw save file matches the hash shown in the first screenshot.
Compression and decompression was implemented in the rockin-b save game manager http://www.rockin-b.de/saturn-savegamemanager.html but honestly this program is much more intuitive to navigate and use and supports more devices. I would love to see the ability to compress/decompress individual saves combined with the copy function. For example a function to copy as a compressed save from backup cartridge to internal memory and vice versa with decompression. Is anything like this in your roadmap?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.