comparison segacd.h @ 2280:9ead0fe69d9b

Implement savestate support for Sega CD
author Michael Pavone <pavone@retrodev.com>
date Sun, 08 Jan 2023 14:42:24 -0800
parents 5a21bc0ec583
children b9fed07f19e4
comparison
equal deleted inserted replaced
2279:3b5fef896475 2280:9ead0fe69d9b
2 #define SEGACD_H_ 2 #define SEGACD_H_
3 #include <stdint.h> 3 #include <stdint.h>
4 #include "genesis.h" 4 #include "genesis.h"
5 #include "cdd_mcu.h" 5 #include "cdd_mcu.h"
6 #include "rf5c164.h" 6 #include "rf5c164.h"
7 #include "serialize.h"
7 8
8 typedef struct { 9 typedef struct {
9 m68k_context *m68k; 10 m68k_context *m68k;
10 system_media *media; 11 system_media *media;
11 genesis_context *genesis; 12 genesis_context *genesis;
12 uint16_t gate_array[0xC0]; 13 uint16_t gate_array[0xC0];
13 uint16_t *rom; //unaltered ROM, needed for mirrored locations 14 uint16_t *rom; //unaltered ROM, needed for mirrored locations
14 uint16_t *rom_mut; //ROM with low 16-bit of HINT vector modified by register write 15 uint16_t *rom_mut; //ROM with low 16-bit of HINT vector modified by register write
15 uint16_t *prog_ram; 16 uint16_t *prog_ram;
16 uint16_t *word_ram; 17 uint16_t *word_ram;
17 uint8_t *pcm_ram;
18 uint8_t *bram; 18 uint8_t *bram;
19 uint32_t stopwatch_cycle; 19 uint32_t stopwatch_cycle;
20 uint32_t int2_cycle; 20 uint32_t int2_cycle;
21 uint32_t graphics_int_cycle; 21 uint32_t graphics_int_cycle;
22 uint32_t periph_reset_cycle; 22 uint32_t periph_reset_cycle;
23 uint32_t last_refresh_cycle; 23 uint32_t last_refresh_cycle;
24 uint32_t graphics_cycle; 24 uint32_t graphics_cycle;
25 uint32_t base; 25 uint32_t base;
26 uint32_t m68k_pc;
26 uint32_t graphics_x; 27 uint32_t graphics_x;
27 uint32_t graphics_y; 28 uint32_t graphics_y;
28 uint32_t graphics_dx; 29 uint32_t graphics_dx;
29 uint32_t graphics_dy; 30 uint32_t graphics_dy;
30 uint16_t graphics_dst_x; 31 uint16_t graphics_dst_x;
35 uint8_t busreq; 36 uint8_t busreq;
36 uint8_t busack; 37 uint8_t busack;
37 uint8_t reset; 38 uint8_t reset;
38 uint8_t need_reset; 39 uint8_t need_reset;
39 uint8_t memptr_start_index; 40 uint8_t memptr_start_index;
40 rf5c164 pcm;
41 lc8951 cdc;
42 cdd_mcu cdd;
43 cdd_fader fader;
44 uint8_t cdc_dst_low; 41 uint8_t cdc_dst_low;
45 uint8_t cdc_int_ack; 42 uint8_t cdc_int_ack;
46 uint8_t graphics_step; 43 uint8_t graphics_step;
47 uint8_t graphics_dst_y; 44 uint8_t graphics_dst_y;
48 uint8_t enter_debugger; 45 uint8_t enter_debugger;
49 uint8_t main_has_word2m; 46 uint8_t main_has_word2m;
50 uint8_t main_swap_request; 47 uint8_t main_swap_request;
51 uint8_t bank_toggle; 48 uint8_t bank_toggle;
52 uint8_t sub_paused_wordram; 49 uint8_t sub_paused_wordram;
50 rf5c164 pcm;
51 lc8951 cdc;
52 cdd_mcu cdd;
53 cdd_fader fader;
53 } segacd_context; 54 } segacd_context;
54 55
55 segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info); 56 segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info);
56 void free_segacd(segacd_context *cd); 57 void free_segacd(segacd_context *cd);
57 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint8_t cart_boot, uint32_t *num_chunks); 58 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint8_t cart_boot, uint32_t *num_chunks);
58 uint32_t gen_cycle_to_scd(uint32_t cycle, genesis_context *gen); 59 uint32_t gen_cycle_to_scd(uint32_t cycle, genesis_context *gen);
59 void scd_run(segacd_context *cd, uint32_t cycle); 60 void scd_run(segacd_context *cd, uint32_t cycle);
60 void scd_adjust_cycle(segacd_context *cd, uint32_t deduction); 61 void scd_adjust_cycle(segacd_context *cd, uint32_t deduction);
61 void scd_toggle_graphics_debug(segacd_context *cd); 62 void scd_toggle_graphics_debug(segacd_context *cd);
62 void segacd_set_speed_percent(segacd_context *cd, uint32_t percent); 63 void segacd_set_speed_percent(segacd_context *cd, uint32_t percent);
64 void segacd_serialize(segacd_context *cd, serialize_buffer *buf, uint8_t all);
65 void segacd_register_section_handlers(segacd_context *cd, deserialize_buffer *buf);
63 66
64 #endif //SEGACD_H_ 67 #endif //SEGACD_H_