annotate segacd.h @ 2496:187bc857a76a default tip

Fix bug in MED mapper protection bit implementation
author Michael Pavone <pavone@retrodev.com>
date Sun, 28 Apr 2024 23:33:11 -0700
parents 03e6ac327ba0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1502
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
1 #ifndef SEGACD_H_
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
2 #define SEGACD_H_
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
3 #include <stdint.h>
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
4 #include "genesis.h"
2061
7c1760b5b3e5 Implemented basic TOC functionality of CDD MCU
Michael Pavone <pavone@retrodev.com>
parents: 2058
diff changeset
5 #include "cdd_mcu.h"
2081
cfd53c94fffb Initial stab at RF5C164 emulation
Michael Pavone <pavone@retrodev.com>
parents: 2080
diff changeset
6 #include "rf5c164.h"
2280
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
7 #include "serialize.h"
1502
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
8
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
9 typedef struct {
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
10 m68k_context *m68k;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
11 system_media *media;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
12 genesis_context *genesis;
2116
cd057d6fe030 Initial stab at subcode emulation
Michael Pavone <pavone@retrodev.com>
parents: 2104
diff changeset
13 uint16_t gate_array[0xC0];
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
14 uint16_t *rom; //unaltered ROM, needed for mirrored locations
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
15 uint16_t *rom_mut; //ROM with low 16-bit of HINT vector modified by register write
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
16 uint16_t *prog_ram;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
17 uint16_t *word_ram;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
18 uint8_t *bram;
2281
b9fed07f19e4 Implement BRAM cart support
Michael Pavone <pavone@retrodev.com>
parents: 2280
diff changeset
19 uint8_t *bram_cart;
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
20 uint32_t stopwatch_cycle;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
21 uint32_t int2_cycle;
2069
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
22 uint32_t graphics_int_cycle;
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
23 uint32_t periph_reset_cycle;
2148
2da377ea932f Initial stab at CDC DMA cycle stealing and sub CPU refresh delays
Michael Pavone <pavone@retrodev.com>
parents: 2134
diff changeset
24 uint32_t last_refresh_cycle;
2069
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
25 uint32_t graphics_cycle;
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
26 uint32_t base;
2280
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
27 uint32_t m68k_pc;
2384
03e6ac327ba0 Handle changes to sample rate while content is running
Michael Pavone <pavone@retrodev.com>
parents: 2336
diff changeset
28 uint32_t speed_percent;
2069
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
29 uint32_t graphics_x;
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
30 uint32_t graphics_y;
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
31 uint32_t graphics_dx;
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
32 uint32_t graphics_dy;
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
33 uint16_t graphics_dst_x;
2336
83f5529086c5 Make bogus word RAM read more appropriately bogus
Michael Pavone <pavone@retrodev.com>
parents: 2335
diff changeset
34 uint16_t vdp_dma_value;
2069
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
35 uint8_t graphics_pixels[4];
2271
3ef80963c2a7 Fix stamp address mask and add WIP CD graphics debug view
Michael Pavone <pavone@retrodev.com>
parents: 2164
diff changeset
36 uint8_t graphics_debug_window;
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
37 uint8_t timer_pending;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
38 uint8_t timer_value;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
39 uint8_t busreq;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
40 uint8_t busack;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
41 uint8_t reset;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
42 uint8_t need_reset;
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
43 uint8_t memptr_start_index;
2065
02a9846668d1 Implement transfer of data from CDC to elsewhere. Other miscellaneous CDD/CDC improvements
Michael Pavone <pavone@retrodev.com>
parents: 2061
diff changeset
44 uint8_t cdc_dst_low;
2066
a61a8a87410c Fix a bunch of CDC/CDD related mcd-verificator failures
Michael Pavone <pavone@retrodev.com>
parents: 2065
diff changeset
45 uint8_t cdc_int_ack;
2069
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
46 uint8_t graphics_step;
8e51c0c3f2e3 Initial attempt at implementing the Sega CD graphics hardware
Michael Pavone <pavone@retrodev.com>
parents: 2066
diff changeset
47 uint8_t graphics_dst_y;
2104
ff32a90260c9 Initial support for using debugger on sub CPU
Michael Pavone <pavone@retrodev.com>
parents: 2081
diff changeset
48 uint8_t enter_debugger;
2119
5ec2f97365a2 More accurate RET/DMNA implementation
Michael Pavone <pavone@retrodev.com>
parents: 2116
diff changeset
49 uint8_t main_has_word2m;
5ec2f97365a2 More accurate RET/DMNA implementation
Michael Pavone <pavone@retrodev.com>
parents: 2116
diff changeset
50 uint8_t main_swap_request;
5ec2f97365a2 More accurate RET/DMNA implementation
Michael Pavone <pavone@retrodev.com>
parents: 2116
diff changeset
51 uint8_t bank_toggle;
2134
9caebcfeac72 Implement word RAM interleaving in 1M mode, now passes mcd-verificator word RAM tests
Michael Pavone <pavone@retrodev.com>
parents: 2119
diff changeset
52 uint8_t sub_paused_wordram;
2281
b9fed07f19e4 Implement BRAM cart support
Michael Pavone <pavone@retrodev.com>
parents: 2280
diff changeset
53 uint8_t bram_cart_write_enabled;
b9fed07f19e4 Implement BRAM cart support
Michael Pavone <pavone@retrodev.com>
parents: 2280
diff changeset
54 uint8_t bram_cart_id;
2336
83f5529086c5 Make bogus word RAM read more appropriately bogus
Michael Pavone <pavone@retrodev.com>
parents: 2335
diff changeset
55 uint8_t has_vdp_dma_value;
2280
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
56 rf5c164 pcm;
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
57 lc8951 cdc;
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
58 cdd_mcu cdd;
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
59 cdd_fader fader;
1502
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
60 } segacd_context;
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
61
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
62 segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info);
2164
4fbe1e7c4a73 Don't leak all Sega CD resources when freeing a Genesis instance
Michael Pavone <pavone@retrodev.com>
parents: 2148
diff changeset
63 void free_segacd(segacd_context *cd);
2054
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
64 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint8_t cart_boot, uint32_t *num_chunks);
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
65 uint32_t gen_cycle_to_scd(uint32_t cycle, genesis_context *gen);
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
66 void scd_run(segacd_context *cd, uint32_t cycle);
8ee7ecbf3f21 Implement enough of Sega CD gate array and Sub CPU to pass Sik's Mode 1 test ROM
Michael Pavone <pavone@retrodev.com>
parents: 1503
diff changeset
67 void scd_adjust_cycle(segacd_context *cd, uint32_t deduction);
2271
3ef80963c2a7 Fix stamp address mask and add WIP CD graphics debug view
Michael Pavone <pavone@retrodev.com>
parents: 2164
diff changeset
68 void scd_toggle_graphics_debug(segacd_context *cd);
2278
5a21bc0ec583 Implement turbo/slo mo for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2271
diff changeset
69 void segacd_set_speed_percent(segacd_context *cd, uint32_t percent);
2280
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
70 void segacd_serialize(segacd_context *cd, serialize_buffer *buf, uint8_t all);
9ead0fe69d9b Implement savestate support for Sega CD
Michael Pavone <pavone@retrodev.com>
parents: 2278
diff changeset
71 void segacd_register_section_handlers(segacd_context *cd, deserialize_buffer *buf);
2335
c05b7c5e6f11 Automatically format Sega CD backup RAM
Michael Pavone <pavone@retrodev.com>
parents: 2281
diff changeset
72 void segacd_format_bram(uint8_t *buffer, size_t size);
2384
03e6ac327ba0 Handle changes to sample rate while content is running
Michael Pavone <pavone@retrodev.com>
parents: 2336
diff changeset
73 void segacd_config_updated(segacd_context *cd);
1502
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
74
2564b6ba2e12 Initial skeleton of Sega CD memory handlers
Michael Pavone <pavone@retrodev.com>
parents: 1467
diff changeset
75 #endif //SEGACD_H_