comparison vdp.c @ 424:7e8e179116af

Add support for loading GST format savestates
author Mike Pavone <pavone@retrodev.com>
date Sat, 29 Jun 2013 17:15:08 -0700
parents acdd6c5240fe
children add9e2f5c0e3
comparison
equal deleted inserted replaced
423:8e136187c0e0 424:7e8e179116af
1651 } 1651 }
1652 1652
1653 #define GST_VDP_REGS 0xFA 1653 #define GST_VDP_REGS 0xFA
1654 #define GST_VDP_MEM 0x12478 1654 #define GST_VDP_MEM 0x12478
1655 1655
1656 void vdp_load_savestate(vdp_context * context, FILE * state_file) 1656 uint8_t vdp_load_gst(vdp_context * context, FILE * state_file)
1657 { 1657 {
1658 uint8_t tmp_buf[CRAM_SIZE*2]; 1658 uint8_t tmp_buf[CRAM_SIZE*2];
1659 fseek(state_file, GST_VDP_REGS, SEEK_SET); 1659 fseek(state_file, GST_VDP_REGS, SEEK_SET);
1660 fread(context->regs, 1, VDP_REGS, state_file); 1660 if (fread(context->regs, 1, VDP_REGS, state_file) != VDP_REGS) {
1661 fputs("Failed to read VDP registers from savestate\n", stderr);
1662 return 0;
1663 }
1664 context->double_res = (context->regs[REG_MODE_4] & (BIT_INTERLACE | BIT_DOUBLE_RES)) == (BIT_INTERLACE | BIT_DOUBLE_RES);
1665 if (!context->double_res) {
1666 context->framebuf = context->oddbuf;
1667 }
1661 latch_mode(context); 1668 latch_mode(context);
1662 fread(tmp_buf, 1, sizeof(tmp_buf), state_file); 1669 if (fread(tmp_buf, 1, sizeof(tmp_buf), state_file) != sizeof(tmp_buf)) {
1670 fputs("Failed to read CRAM from savestate\n", stderr);
1671 return 0;
1672 }
1663 for (int i = 0; i < CRAM_SIZE; i++) { 1673 for (int i = 0; i < CRAM_SIZE; i++) {
1664 context->cram[i] = (tmp_buf[i*2+1] << 8) | tmp_buf[i*2]; 1674 context->cram[i] = (tmp_buf[i*2+1] << 8) | tmp_buf[i*2];
1665 } 1675 }
1666 fread(tmp_buf, 2, VSRAM_SIZE, state_file); 1676 if (fread(tmp_buf, 2, VSRAM_SIZE, state_file) != VSRAM_SIZE) {
1677 fputs("Failed to read VSRAM from savestate\n", stderr);
1678 return 0;
1679 }
1667 for (int i = 0; i < VSRAM_SIZE; i++) { 1680 for (int i = 0; i < VSRAM_SIZE; i++) {
1668 context->vsram[i] = (tmp_buf[i*2+1] << 8) | tmp_buf[i*2]; 1681 context->vsram[i] = (tmp_buf[i*2+1] << 8) | tmp_buf[i*2];
1669 } 1682 }
1670 fseek(state_file, GST_VDP_MEM, SEEK_SET); 1683 fseek(state_file, GST_VDP_MEM, SEEK_SET);
1671 fread(context->vdpmem, 1, VRAM_SIZE, state_file); 1684 if (fread(context->vdpmem, 1, VRAM_SIZE, state_file) != VRAM_SIZE) {
1685 fputs("Failed to read VRAM from savestate\n", stderr);
1686 return 0;
1687 }
1688 return 1;
1672 } 1689 }
1673 1690
1674 void vdp_save_state(vdp_context * context, FILE * outfile) 1691 void vdp_save_state(vdp_context * context, FILE * outfile)
1675 { 1692 {
1676 uint8_t tmp_buf[CRAM_SIZE*2]; 1693 uint8_t tmp_buf[CRAM_SIZE*2];