summaryrefslogtreecommitdiff
path: root/sms.c
diff options
context:
space:
mode:
Diffstat (limited to 'sms.c')
-rw-r--r--sms.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/sms.c b/sms.c
index 9bbad17..8e54619 100644
--- a/sms.c
+++ b/sms.c
@@ -318,17 +318,18 @@ static uint8_t load_state_path(sms_context *sms, char *path)
static uint8_t load_state(system_header *system, uint8_t slot)
{
sms_context *sms = (sms_context *)system;
- char numslotname[] = "slot_0.state";
- char *slotname;
- if (slot == QUICK_SAVE_SLOT) {
- slotname = "quicksave.state";
- } else {
- numslotname[5] = '0' + slot;
- slotname = numslotname;
+ char *statepath = get_slot_name(system, slot, "state");
+ uint8_t ret;
+ if (!sms->z80->native_pc) {
+ ret = get_modification_time(statepath) != 0;
+ if (ret) {
+ system->delayed_load_slot = slot + 1;
+ }
+ goto done;
+
}
- char const *parts[] = {sms->header.save_dir, PATH_SEP, slotname};
- char *statepath = alloc_concat_m(3, parts);
- uint8_t ret = load_state_path(sms, statepath);
+ ret = load_state_path(sms, statepath);
+done:
free(statepath);
return ret;
}
@@ -342,6 +343,11 @@ static void run_sms(system_header *system)
render_set_video_standard(VID_NTSC);
while (!sms->should_return)
{
+ if (system->delayed_load_slot) {
+ load_state(system, system->delayed_load_slot - 1);
+ system->delayed_load_slot = 0;
+
+ }
if (system->enter_debugger && sms->z80->pc) {
system->enter_debugger = 0;
zdebugger(sms->z80, sms->z80->pc);