comparison system.h @ 2072:cc13c100b027

Merge Sega CD branch now that it sort of works
author Michael Pavone <pavone@retrodev.com>
date Sun, 30 Jan 2022 22:29:29 -0800
parents 6399a776e981
children 3f29e2726522
comparison
equal deleted inserted replaced
2052:3748a2a8a4b7 2072:cc13c100b027
1 #ifndef SYSTEM_H_ 1 #ifndef SYSTEM_H_
2 #define SYSTEM_H_ 2 #define SYSTEM_H_
3 #include <stddef.h> 3 #include <stddef.h>
4 #include <stdint.h> 4 #include <stdint.h>
5 #include <stdio.h>
5 6
6 typedef struct system_header system_header; 7 typedef struct system_header system_header;
7 typedef struct system_media system_media; 8 typedef struct system_media system_media;
8 9
9 typedef enum { 10 typedef enum {
10 SYSTEM_UNKNOWN, 11 SYSTEM_UNKNOWN,
11 SYSTEM_GENESIS, 12 SYSTEM_GENESIS,
12 SYSTEM_GENESIS_PLAYER, 13 SYSTEM_GENESIS_PLAYER,
14 SYSTEM_SEGACD,
13 SYSTEM_SMS, 15 SYSTEM_SMS,
14 SYSTEM_SMS_PLAYER, 16 SYSTEM_SMS_PLAYER,
15 SYSTEM_JAGUAR, 17 SYSTEM_JAGUAR,
16 } system_type; 18 } system_type;
17 19
36 #include "arena.h" 38 #include "arena.h"
37 #include "romdb.h" 39 #include "romdb.h"
38 #include "event_log.h" 40 #include "event_log.h"
39 41
40 struct system_header { 42 struct system_header {
41 system_header *next_context; 43 system_header *next_context;
42 system_str_fun start_context; 44 system_str_fun start_context;
43 system_fun resume_context; 45 system_fun resume_context;
44 system_fun load_save; 46 system_fun load_save;
45 system_fun persist_save; 47 system_fun persist_save;
46 system_u8_fun_r8 load_state; 48 system_u8_fun_r8 load_state;
47 system_fun request_exit; 49 system_fun request_exit;
48 system_fun soft_reset; 50 system_fun soft_reset;
49 system_fun free_context; 51 system_fun free_context;
50 system_fun_r16 get_open_bus_value; 52 system_fun_r16 get_open_bus_value;
51 system_u32_fun set_speed_percent; 53 system_u32_fun set_speed_percent;
52 system_fun inc_debug_mode; 54 system_fun inc_debug_mode;
53 system_u8_u8_fun gamepad_down; 55 system_u8_u8_fun gamepad_down;
54 system_u8_u8_fun gamepad_up; 56 system_u8_u8_fun gamepad_up;
55 system_u8_u8_fun mouse_down; 57 system_u8_u8_fun mouse_down;
56 system_u8_u8_fun mouse_up; 58 system_u8_u8_fun mouse_up;
57 system_mabs_fun mouse_motion_absolute; 59 system_mabs_fun mouse_motion_absolute;
58 system_mrel_fun mouse_motion_relative; 60 system_mrel_fun mouse_motion_relative;
59 system_u8_fun keyboard_down; 61 system_u8_fun keyboard_down;
60 system_u8_fun keyboard_up; 62 system_u8_fun keyboard_up;
61 system_fun config_updated; 63 system_fun config_updated;
62 system_ptrszt_fun_rptr8 serialize; 64 system_ptrszt_fun_rptr8 serialize;
63 system_ptr8_sizet_fun deserialize; 65 system_ptr8_sizet_fun deserialize;
64 system_str_fun start_vgm_log; 66 system_str_fun start_vgm_log;
65 system_fun stop_vgm_log; 67 system_fun stop_vgm_log;
66 rom_info info; 68 rom_info info;
67 arena *arena; 69 arena *arena;
68 char *next_rom; 70 char *next_rom;
69 char *save_dir; 71 char *save_dir;
70 uint8_t enter_debugger; 72 uint8_t enter_debugger;
71 uint8_t should_exit; 73 uint8_t should_exit;
72 uint8_t save_state; 74 uint8_t save_state;
73 uint8_t delayed_load_slot; 75 uint8_t delayed_load_slot;
74 uint8_t has_keyboard; 76 uint8_t has_keyboard;
75 uint8_t vgm_logging; 77 uint8_t vgm_logging;
76 uint8_t force_release; 78 uint8_t force_release;
77 debugger_type debugger_type; 79 debugger_type debugger_type;
78 system_type type; 80 system_type type;
79 }; 81 };
82
83 typedef enum {
84 MEDIA_CART,
85 MEDIA_CDROM
86 } media_type;
87
88 typedef enum {
89 TRACK_AUDIO,
90 TRACK_DATA
91 } track_type;
92
93 typedef struct {
94 uint32_t fake_pregap;
95 uint32_t pregap_lba;
96 uint32_t start_lba;
97 uint32_t end_lba;
98 track_type type;
99 } track_info;
80 100
81 struct system_media { 101 struct system_media {
82 void *buffer; 102 void *buffer;
83 char *dir; 103 char *dir;
84 char *name; 104 char *name;
85 char *extension; 105 char *extension;
86 system_media *chain; 106 system_media *chain;
107 track_info *tracks;
108 FILE *f;
109 uint32_t num_tracks;
87 uint32_t size; 110 uint32_t size;
111 media_type type;
88 }; 112 };
89 113
90 #define OPT_ADDRESS_LOG (1U << 31U) 114 #define OPT_ADDRESS_LOG (1U << 31U)
91 115
92 system_type detect_system_type(system_media *media); 116 system_type detect_system_type(system_media *media);