With Firmware 1.1 on the Analogue Pocket, you can use the Memories function (= save states) to write savegames to real cartridges, as the Memories of the GB / GBC / GBA openFPGA cores by spiritualized1997 are sometimes compatible with the real cartridges.
Disclaimer: Please be careful and act with caution. I successfully tested this with a GB and a GBA Pokemon game cartridge, but I can not guarantee this will always work for you and all your games. I am not responsible for any damage to you hardware or software.
Do a backup of you original cartridge savegame first, if you like: https://8300111.de/extract-dump-gb-gbc-gba-savegames-on-analogue-pocket/
If you only operate on one cartridge and if you do not wish to mix the .sav files of different systems, then you skip some steps and only work with the Memory system of the Pocket: https://8300111.de/backup-dump-and-import-write-gb-gbc-gba-savegames-on-real-cartridges-using-the-analogue-pocket/
With these two procedures, you can move around savegames on real cartridges as you wish, for example if you want to continue a emulator , Everdrive or openFPGA game on real hardware, for backups and battery replacements. It only works if the rom file is exactly the same as the cartridge and even then it is not guaranteed to work. It worked for all of my Pokémon cartridges (Red, Blue, Crystall, Leafgreen) but not for my Mario Kart GBA cartridge.
tl;dr: You can create a Memory (= save state) in the spiritualized1997 GBx cores, copy and load that Memory (containing your desired .sav file) to the real cartridge Memories and then use the ingame save function to write it to the cartridge.
What you need for this tutorial:
- Analogue Pocket on Firmware 1.1
- current version of spiritualized1997 GB / GBC / GBA core
- the desired savegame as a .sav file
- the real game cartridge
This is how it works:
- make sure the .sav savegame is compatible and running in your spirizualized1997 openFPGA core!
- if it works in the openFPGA core, it will most likely work on the cartridge
- create a Memory (= save state) in the spirizualized1997 openFPGA core (Analogue + Up button)
- launch the real cartridge with the Analogue Pocket
- play the game until you saved ingame for the first time!
- create a Memory of the real running game (Analogue + Up button)
- this is your backup if you need it, do something ingame, load the backup and check if everything works
- create a Memory of the real running game (Analogue + Up button)
- this is the one that we are going to replace
- replace the real Memory (= save state, .sta file) with the openFPGA core Memory on the SD card
- navigate your SD card to
card:/Memories/Save States
- backup the most recent .sta and .sav file of your real cartridge to a safe place
- copy the full Memory name of your most recent safe state (e.g. 20231022_161554_GB_3B99CFC2_Pokemon; Blaue Edition.sta)
- navigate to the Spiritualized.GBx subfolder, find the most recent Memory of your openFPGA core game (something like 20231022_164646_USR_00000000_Pokemon – Blaue Edition (Germany).sta)
- rename the file and paste the original cartridge file name
- replace / overwrite the real cartridge Memory in the parent
Save States
folder with the newly renamed openFPGA Memory
- navigate your SD card to
- load the new Memory into the original cartridge and save the game to the cartridge
- load the real game cartridge with the Analogue Pocket, go into the game (maybe necessary: load an old savegame from the cartridge)
- load the last Memory into the running game (which is the renamed openFPGA memory) via the Analogue Menu (Analogue button -> Memories)
- if everything works fine: save the game with the ingame save function
In the final step, the savegame will be written to the cartridge using the native cartridge / Gameboy save function.
If this does not work, there is one last method: All the savegame data is also contained withing the save state (.sta) file. If you find the correct beginning and ending within the hex file, you could replace the savegame data in the Memory, but this seems to be very complicated. The method above should work for Pokémon games.
Edit: Here is a second method explained by Reddit u/OptimalPapaya1344, where you can use an Everdrive and an pre-1.1 firmware to exchange Memories between the Everdrive and a real cartridge: link to reddit.com