[Feature] DOSBox Pure saves: expose the core-written .pure.zip to getSaveFile()/saveSave (core has no SRAM), and don't extract the zip by default
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 70/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- Calme
- Stack technique
- cpp, javascript, wasm
Piste de recherche
Start with data/src/emulator.js, especially the EJS_dontExtractRom and dontExtractIfCore handling, then trace getSaveFile(), getSaveFilePath(), and the saveSaveFiles/saveSave events. The issue identifies dosbox_pure_libretro.cpp and the existing PR #1064 as the relevant core and save-path context. Verify that DOSBox Pure is added to the non-extraction defaults and that a core-written .pure.zip is returned with its path; no specific test file is mentioned.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary. With dosbox_pure, a game's own in-game save never reaches a frontend that collects saves through gameManager.getSaveFile() (RomM does), because the core exposes no SRAM and the save it does write is not on the path getSaveFile() reads. Two small things would fix it; one of them is already on main and unreleased.
What happens (measured on 4.2.3, dosbox_pure, a zip with a root AUTORUN.CONF doing mount c .)
downloadRom()decompresses the archive into the emscripten FS and hands the core one member — in 4.2.3 only["arcade", "mame"]skip extraction, andthis.fileNamecomes out asAUTORUN.CONF.- Because the content extension is
conf, DOSBox Pure skips its union-drive/save machinery entirely —dosbox_pure_libretro.cpp:2710-2712:
so the game writes its save straight into the extracted tree in MEMFS (King's Quest VI wrote// Loading a .conf file behaves like regular DOSBox (no union drive mounting, save file, start menu, etc.) dbp_skip_c_mount = (path_extlen == 4 && !strncasecmp(path_ext, "conf", 4));/KQ6SG.000), which is gone with the tab. A save state does not carry it back: loading the state in a fresh tab, the file is absent and the game's restore dialog is empty. - The core has no SRAM at all —
dosbox_pure_libretro.cpp:3839-3840(same in theEmulatorJS/dosbox-purefork):
so RetroArch never writesvoid *retro_get_memory_data(unsigned id) { (void)id; return NULL; } size_t retro_get_memory_size(unsigned id) { (void)id; return 0; }save_file_path()(/data/saves/DOSBox-pure/AUTORUN.srmhere),getSaveFile()returnsnull, and thesaveSaveFiles/saveSaveevents hand the frontendnull. RomM stores the four bytesnullas the save.
What already exists on main
PR #1064 added EJS_dontExtractRom and the dontExtractIfCore list (data/src/emulator.js:349, still arcade/FBNeo/MAME only). Handed the zip, DOSBox Pure takes its union-drive path and writes changes to <content>.pure.zip in the libretro save directory (DBP_GetSaveFile(SFT_GAMESAVE)), which is /data/saves (IDBFS) — so on nightly the save at least survives per browser. That is unreleased; v4.2.3 is the latest release.
Feature request
- Let a frontend collect the core-written save file. When
save_file_path()does not exist but the core has written a file intosavefile_directory(for DOSBox Pure,<content>.pure.zip), havegetSaveFile()return that file — or firesaveSaveFiles/saveSavewith it — so frontends that persist saves server-side (RomM'sEJS_onSaveSave) get real bytes instead ofnull.getSaveFilePath()would then name that file so the frontend knows the extension. - Default
dosbox_pureto not-extracted, i.e. add it todontExtractIfCore, or documentEJS_dontExtractRomas required for DOSBox Pure saves — today a frontend that does not know about it gets the extracted-.confbehaviour above. - A release carrying #1064 would already improve things for everyone on 4.2.3.
Happy to test a nightly against RomM. For transparency: measured on my own instance; the write-up was drafted with Claude Code's help from those measurements.
- Langage dominant
- JavaScript
- Étoiles
- 4.3k
- Forks
- 1k
- Merge moyen
- 13 j 2 h
- PR mergées (30 j)
- 3
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de EmulatorJS/EmulatorJS
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
EmulatorJS/EmulatorJS#1295 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
EmulatorJS/EmulatorJS#1285 ·
Les mainteneurs répondent en général sous 1 jour
-
Bot to check dependencies updateOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 58/100
EmulatorJS/EmulatorJS#1296 ·
Les mainteneurs répondent en général sous 1 jour
-
[Feature] Add a web componentOuverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 45/100
EmulatorJS/EmulatorJS#1292 ·
Les mainteneurs répondent en général sous 1 jour
-
Improve developer experience for contributorsPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
EmulatorJS/EmulatorJS#1291 · 8 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de EmulatorJS/EmulatorJS
Issues similaires
-
[Feature]: 建议导入源后,自动切换到新导入的源Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
lyswhut/lx-music-desktop#3026 ·
-
good first issue server
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
openstreetmap/iD#13054 ·
Les mainteneurs répondent en général sous 1 jour
-
community marketing priority: low
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
TMHSDigital/Free-Game-Dev-Assets#151 ·
Les mainteneurs répondent en général sous 1 jour
-
Read a vector index's quantization back on Neo4j 2026.10, which reports vector.quantization.typeOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
liberation-data/drivine#231 ·
Les mainteneurs répondent en général sous 1 jour