Mercurial > repos > blastem
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]; |