I have been using caprice32 since a while whenever I need to emulate a CPC (I am on MacOS and cap32 looked like the most useful emulator when I a while ago evaluated what's available) and I noticed that it does not always update my virtual disk (aka dsk) when I write to it, leading to changes to files or entire new files not being present on the dsk when I quite caprice32 and use that dsk at a later point. Do I really have to unload a dsk before I quit? If yes, why is this not a built-in feature, i.e. cap32 always updates/unloads the current dsk before exiting? And I am wondering why emulators seem to be caching writes to a dsk instead of always updating on every single write. This is how a real disc behaves, so (generally asking, but ofc I am interested in a solution for cap32) why is it different in emulation?
I guess the design of Caprice was more focused on playing games. Not forcing writes back to disk might be better in some cases, although personally I'd consider those an edge case and would prefer writes were automatically persisted where possible.
But in short, it's not so much an emulation issue, rather an active choice by the designer of a given emulator.
Winape hs the same shitty behaviour. It only writes to DSK when you properly exit Winape or remove the DSK manually. If you do some BASIC development and Winape crashes, your progress is gone. As I was not aware of that, I once lost a few hours of code changes.
RVM however does persist everything immediately.