int freezemachine_snapshot_read_module(snapshot_t *s) { BYTE vmajor, vminor; snapshot_module_t *m; m = snapshot_module_open(s, snap_module_name, &vmajor, &vminor); if (m == NULL) { return -1; } /* Do not accept versions higher than current */ if (vmajor > SNAP_MAJOR || vminor > SNAP_MINOR) { snapshot_set_error(SNAPSHOT_MODULE_HIGHER_VERSION); goto fail; } if (0 || SMR_B_INT(m, &rom_A14) < 0 || SMR_B_INT(m, &roml_toggle) < 0) { goto fail; } /* new in 0.1 */ if (SNAPVAL(vmajor, vminor, 0, 1)) { if (SMR_B_INT(m, &allow_toggle) < 0) { goto fail; } } else { allow_toggle = 0; } if (0 || SMR_BA(m, roml_banks, 0x4000) < 0 || SMR_BA(m, romh_banks, 0x4000) < 0) { goto fail; } snapshot_module_close(m); return freezemachine_common_attach(); fail: snapshot_module_close(m); return -1; }
int freezeframe_snapshot_read_module(snapshot_t *s) { BYTE vmajor, vminor; snapshot_module_t *m; m = snapshot_module_open(s, snap_module_name, &vmajor, &vminor); if (m == NULL) { return -1; } /* Do not accept versions higher than current */ if (vmajor > SNAP_MAJOR || vminor > SNAP_MINOR) { snapshot_set_error(SNAPSHOT_MODULE_HIGHER_VERSION); goto fail; } /* new in 0.1 */ if (SNAPVAL(vmajor, vminor, 0, 1)) { if (0 || SMR_B_INT(m, &freezeframe_rom_8000) < 0 || SMR_B_INT(m, &freezeframe_rom_e000) < 0) { goto fail; } } else { freezeframe_rom_8000 = 0; freezeframe_rom_e000 = 0; } if (SMR_BA(m, roml_banks, FREEZE_FRAME_CART_SIZE) < 0) { goto fail; } snapshot_module_close(m); memcpy(romh_banks, roml_banks, FREEZE_FRAME_CART_SIZE); return freezeframe_common_attach(); fail: snapshot_module_close(m); return -1; }
int rex_snapshot_read_module(snapshot_t *s) { BYTE vmajor, vminor; snapshot_module_t *m; m = snapshot_module_open(s, snap_module_name, &vmajor, &vminor); if (m == NULL) { return -1; } /* Do not accept versions higher than current */ if ((vmajor != SNAP_MAJOR) || (vminor != SNAP_MINOR)) { snapshot_set_error(SNAPSHOT_MODULE_HIGHER_VERSION); goto fail; } /* new in 0.1 */ if (SNAPVAL(vmajor, vminor, 0, 1)) { if (SMR_B_INT(m, &rex_active) < 0) { goto fail; } } else { rex_active = 0; } if (SMR_BA(m, roml_banks, 0x2000 * 64) < 0) { goto fail; } snapshot_module_close(m); return rex_common_attach(); fail: snapshot_module_close(m); return -1; }
static int tapelog_read_snapshot(struct snapshot_s *s) { BYTE major_version, minor_version; snapshot_module_t *m; /* enable device */ set_tapelog_enabled(1, NULL); m = snapshot_module_open(s, snap_module_name, &major_version, &minor_version); if (m == NULL) { return -1; } /* Do not accept versions higher than current */ if (major_version > SNAP_MAJOR || minor_version > SNAP_MINOR) { snapshot_set_error(SNAPSHOT_MODULE_HIGHER_VERSION); goto fail; } if (SMR_B(m, &tapelog_motor_out) < 0) { goto fail; } /* new in 0.1 */ if (SNAPVAL(major_version, minor_version, 0, 1)) { if (SMR_B(m, &tapelog_motor_in) < 0) { goto fail; } } else { tapelog_motor_in = 2; } if (0 || SMR_B(m, &tapelog_sense_in) < 0 || SMR_B(m, &tapelog_sense_out) < 0 || SMR_B(m, &tapelog_write_out) < 0) { goto fail; } /* new in 0.1 */ if (SNAPVAL(major_version, minor_version, 0, 1)) { if (0 || SMR_B(m, &tapelog_write_in) < 0 || SMR_B(m, &tapelog_read_out) < 0) { goto fail; } } else { tapelog_write_in = 2; tapelog_read_out = 2; } if (SMR_DW_UINT(m, &tapelog_read_in) < 0) { goto fail; } return snapshot_module_close(m); fail: snapshot_module_close(m); return -1; }