diff 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
line wrap: on
line diff
--- a/system.h	Sat Jan 01 18:54:46 2022 -0800
+++ b/system.h	Sun Jan 30 22:29:29 2022 -0800
@@ -2,6 +2,7 @@
 #define SYSTEM_H_
 #include <stddef.h>
 #include <stdint.h>
+#include <stdio.h>
 
 typedef struct system_header system_header;
 typedef struct system_media system_media;
@@ -10,6 +11,7 @@
 	SYSTEM_UNKNOWN,
 	SYSTEM_GENESIS,
 	SYSTEM_GENESIS_PLAYER,
+	SYSTEM_SEGACD,
 	SYSTEM_SMS,
 	SYSTEM_SMS_PLAYER,
 	SYSTEM_JAGUAR,
@@ -38,53 +40,75 @@
 #include "event_log.h"
 
 struct system_header {
-	system_header           *next_context;
-	system_str_fun          start_context;
-	system_fun              resume_context;
-	system_fun              load_save;
-	system_fun              persist_save;
-	system_u8_fun_r8        load_state;
-	system_fun              request_exit;
-	system_fun              soft_reset;
-	system_fun              free_context;
-	system_fun_r16          get_open_bus_value;
-	system_u32_fun          set_speed_percent;
-	system_fun              inc_debug_mode;
-	system_u8_u8_fun        gamepad_down;
-	system_u8_u8_fun        gamepad_up;
-	system_u8_u8_fun        mouse_down;
-	system_u8_u8_fun        mouse_up;
-	system_mabs_fun         mouse_motion_absolute;
-	system_mrel_fun         mouse_motion_relative;
-	system_u8_fun           keyboard_down;
-	system_u8_fun           keyboard_up;
-	system_fun              config_updated;
+	system_header     *next_context;
+	system_str_fun    start_context;
+	system_fun        resume_context;
+	system_fun        load_save;
+	system_fun        persist_save;
+	system_u8_fun_r8  load_state;
+	system_fun        request_exit;
+	system_fun        soft_reset;
+	system_fun        free_context;
+	system_fun_r16    get_open_bus_value;
+	system_u32_fun    set_speed_percent;
+	system_fun        inc_debug_mode;
+	system_u8_u8_fun  gamepad_down;
+	system_u8_u8_fun  gamepad_up;
+	system_u8_u8_fun  mouse_down;
+	system_u8_u8_fun  mouse_up;
+	system_mabs_fun   mouse_motion_absolute;
+	system_mrel_fun   mouse_motion_relative;
+	system_u8_fun     keyboard_down;
+	system_u8_fun     keyboard_up;
+	system_fun        config_updated;
 	system_ptrszt_fun_rptr8 serialize;
 	system_ptr8_sizet_fun   deserialize;
 	system_str_fun          start_vgm_log;
 	system_fun              stop_vgm_log;
-	rom_info                info;
-	arena                   *arena;
-	char                    *next_rom;
-	char                    *save_dir;
-	uint8_t                 enter_debugger;
-	uint8_t                 should_exit;
-	uint8_t                 save_state;
-	uint8_t                 delayed_load_slot;
-	uint8_t                 has_keyboard;
+	rom_info          info;
+	arena             *arena;
+	char              *next_rom;
+	char              *save_dir;
+	uint8_t           enter_debugger;
+	uint8_t           should_exit;
+	uint8_t           save_state;
+	uint8_t           delayed_load_slot;
+	uint8_t           has_keyboard;
 	uint8_t                 vgm_logging;
 	uint8_t                 force_release;
-	debugger_type           debugger_type;
-	system_type             type;
+	debugger_type     debugger_type;
+	system_type       type;
 };
 
+typedef enum {
+	MEDIA_CART,
+	MEDIA_CDROM
+} media_type;
+
+typedef enum {
+	TRACK_AUDIO,
+	TRACK_DATA
+} track_type;
+
+typedef struct {
+	uint32_t   fake_pregap;
+	uint32_t   pregap_lba;
+	uint32_t   start_lba;
+	uint32_t   end_lba;
+	track_type type;
+} track_info;
+
 struct system_media {
 	void         *buffer;
 	char         *dir;
 	char         *name;
 	char         *extension;
 	system_media *chain;
+	track_info   *tracks;
+	FILE         *f;
+	uint32_t     num_tracks;
 	uint32_t     size;
+	media_type   type;
 };
 
 #define OPT_ADDRESS_LOG (1U << 31U)