static int snapcallback_memory_loader ( const struct xemu_snapshot_definition_st *def, struct xemu_snapshot_block_st *block ) { if (block->block_version != C65_MEMORY_BLOCK_VERSION || block->sub_counter != 0 || block->sub_size > sizeof(memory)) RETURN_XSNAPERR_USER("Bad memory block syntax ver=%d, subcount=%d, size=%d", block->block_version, block->sub_counter, block->sub_size); memset(memory, 0xFF, sizeof memory); return xemusnap_read_file(memory, block->sub_size); // read that damn memory dump }
static int snapcallback_memory_loader ( const struct xemu_snapshot_definition_st *def, struct xemu_snapshot_block_st *block ) { const struct memblock_st *mem = (const struct memblock_st *)def->user_data; if (block->block_version != M65_MEMORY_BLOCK_VERSION || block->sub_counter != 0 || block->sub_size > mem->size) RETURN_XSNAPERR_USER("Bad memory block syntax @ %s", def->idstr); memset(mem->data, 0xFF, mem->size); return xemusnap_read_file(mem->data, block->sub_size); // read that damn memory dump }
int sdcard_snapshot_load_state ( const struct xemu_snapshot_definition_st *def, struct xemu_snapshot_block_st *block ) { Uint8 buffer[SNAPSHOT_SDCARD_BLOCK_SIZE]; int a; if (block->block_version != SNAPSHOT_SDCARD_BLOCK_VERSION || block->sub_counter || block->sub_size != sizeof buffer) RETURN_XSNAPERR_USER("Bad SD-Card block syntax"); a = xemusnap_read_file(buffer, sizeof buffer); if (a) return a; /* loading state ... */ memcpy(sd_sector_bytes, buffer, 4); memcpy(sd_d81_img1_start, buffer + 4, 4); mounted = (int)P_AS_BE32(buffer + 8); sdcard_bytes_read = (int)P_AS_BE32(buffer + 12); sd_is_read_only = (int)P_AS_BE32(buffer + 16); d81_is_read_only = (int)P_AS_BE32(buffer + 20); use_d81 = (int)P_AS_BE32(buffer + 24); sd_status = buffer[0xFF]; memcpy(sd_buffer, buffer + 0x100, sizeof sd_buffer); return 0; }