Skip to content

Dreamcast saves not detected for syncing #254

Description

@chedge

Describe the bug
Dreamcast save files don't seem to be properly detected for save syncing, at least on Knulli using the default emulator, Flycast. Flycast stores saves four at a time (for some reason) with the following format:

game_filename.A1.bin
game_filename.B1.bin
game_filename.C1.bin
game_filename.D1.bin

Based on the Grout docs, I think the first issue may be that the save files have a .bin extension, which is not one of the accepted save file extensions. I'm also not exactly sure why there are four save files for each game, or the best way to handle that. I'd guess it's one for each potential virtual VMU across four controllers, not sure what the best solution is there.

Reproduction Steps
Steps to reproduce the behavior:

  1. Try to sync saves
  2. Dreamcast saves don't sync

Expected Behavior
Dreamcast saves sync

Information

  • CFW: Knulli
  • CFW Version: scarab 2026/05/11
  • Handheld Device: Anbernic RG35XXH
  • Grout Version: v5.0.0.0
  • RomM Version: 5.0.0

Activity

  1. chedge commented on Aug 30, 2026

    @chedge
    Author

    Following up on this, it looks like the issue seems to actually be down to how it determines the save file name:

    Grout tries to generate what it thinks the save file will be based on the rom filename, e.g. dreamcast_game.chd -> dreamcast_game.bin

    However, Dreamcast emuators (at least Flycast) embed the VMU slot into the save file, so the actual save file is dreamcast_game.A1.chd, or in the case of Knulli, it generates 4 VMU save files (A1, B1, C1, D1) though only A1 seems to actually be populated.

    Even if the save file is manually uploaded to Romm with the correct filename (dreamcast_game.A1.bin), when Grout downloads the save, it's rendered as dreamcast_game.bin, so Flycast never picks it up.

    TL;DR: Flycast (on Knulli) looks for dreamcast_game.A1.bin, Grout looks for dreamcast_game.bin, like passing ships in the night

    Potential solution would be to recognize the save file suffix as ".[A-D]1.bin" rather than ".bin". Unfortunately, I'm not familiar enough with go to put up a PR, at least at this time.

  2. changed the issue type fromtoon Sep 27, 2026
  3. pawndev commented on Oct 7, 2026

    @pawndev
    Collaborator

    Just checked how Argosy is syncing dreamcast. It seems that it only take the A1 bin.

    The B1/C1/D1 seems to be only blank cartridge. Knulli, Batocera and certainly more cfw set the option reicast_per_content_vmus="All VMUs", that's why the B1/C1/D1 are presents.

    Should we do the same way as Argosy, in order to be compatible with the save sync ? @BrandonKowalski ?

    sources:

  4. pawndev commented on Oct 7, 2026

    @pawndev
    Collaborator

    And apparently in some versions of flycast, the game name is not present, like PSP game it's an ID

  5. pawndev commented on Oct 9, 2026

    @pawndev
    Collaborator

    Aaaaaand, because it was too simple
    In some defautl retroarch configuration (like for example Spruce or MuOS), the reicast_per_content_vmus = "disabled" is set to disabled, so, retroarch or the standalone emu store the saves of all dreamcast game in a single file. In that case it'll be complicated to sync dreamcast save per game.

    For now, I propose to only handle the saves that works like Argosy with the .A1.bin / _A1.bin. And just write in the docs this limitations

  6. self-assigned this
    on Oct 10, 2026
  7. pawndev commented on Oct 10, 2026

    @pawndev
    Collaborator

    Since RomM 5.3.0 there is another possibility, to sync an entire MemoryCard:

    • POST /api/memory-cards for card creation
    • POST /api/memory-cards/{id}/versions for card update
    • GET /api/memory-cards/{id}/content for card download
    • GET /api/memory-cards?emulator={name} for card retrieval accross emulators
  8. chedge commented on Oct 18, 2026

    @chedge
    Author

    Can confirm, this seems to be fixed now!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions