OSDN Git Service

[General] Merge Upstream 2021-12-30.
[csp-qt/common_source_project-fm7.git] / source / src / config.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2006.08.18 -
6
7         [ config ]
8 */
9
10 #ifndef _CONFIG_H_
11 #define _CONFIG_H_
12
13 #include "common.h"
14 #include "vm/vm_template.h"
15 #include "fileio.h"
16 #if defined(_USE_QT)
17 #define USE_FIXED_CONFIG 1
18 #include "qt/gui/csp_logger.h"
19 #else
20   #if defined(USE_SHARED_DLL)
21   #define USE_FIXED_CONFIG 1
22   #endif
23 #endif
24
25 enum {
26         CONFIG_RENDER_TYPE_STD = 0,
27         CONFIG_RENDER_TYPE_TV,
28         CONFIG_RENDER_TYPE_END
29 };
30 enum {
31         CONFIG_RENDER_PLATFORM_OPENGL_MAIN = 0,
32         CONFIG_RENDER_PLATFORM_OPENGL_CORE = 1,
33         CONFIG_RENDER_PLATFORM_OPENGL_ES   = 2,
34         CONFIG_RENDER_PLATFORM_QT3D        = 8,
35         CONFIG_RENDER_PLATFORM_VULKAN      = 16,
36         CONFIG_RENDER_PLATFORM_DIRECTDRAW  = 24,
37         CONFIG_RENDER_PLATFORM_SDLFB       = 25,
38         CONFIG_RENDER_PLATFORM_DIRECTX     = 32,
39 };
40
41 /*
42  * ToDo: Apply keyboard types for emulation.
43  */
44 enum {
45         CONFIG_HOST_KEYBOARD_TYPE_AT_JP   = 0x00000000,
46         CONFIG_HOST_KEYBOARD_TYPE_AT_EN   = 0x00010000,
47         CONFIG_HOST_KEYBOARD_TYPE_AT_83   = 0x00030000,
48         CONFIG_HOST_KEYBOARD_TYPE_AT_84   = 0x00040000,
49         CONFIG_HOST_KEYBOARD_TYPE_AT_MISC = 0x00ff0000,
50         CONFIG_HOST_KEYBOARD_TYPE_PC98    = 0x00980000,
51         CONFIG_HOST_KEYBOARD_TYPE_MAC     = 0x00fe0000,
52 };      
53
54 enum {
55         CONFIG_HOST_KEYBOARD_AT_106JP    = CONFIG_HOST_KEYBOARD_TYPE_AT_JP + 106,
56         CONFIG_HOST_KEYBOARD_AT_101      = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 101,
57         CONFIG_HOST_KEYBOARD_AT_102      = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 102,
58         CONFIG_HOST_KEYBOARD_AT_104      = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 104,
59         CONFIG_HOST_KEYBOARD_AT_109JP    = CONFIG_HOST_KEYBOARD_TYPE_AT_JP + 109,
60         CONFIG_HOST_KEYBOARD_AT_83       = CONFIG_HOST_KEYBOARD_TYPE_AT_83 + 83,
61         CONFIG_HOST_KEYBOARD_AT_84       = CONFIG_HOST_KEYBOARD_TYPE_AT_84 + 84,
62         CONFIG_HOST_KEYBOARD_AT_MISC     = CONFIG_HOST_KEYBOARD_TYPE_AT_MISC,
63         CONFIG_HOST_KEYBOARD_MAC_US      = CONFIG_HOST_KEYBOARD_TYPE_MAC + 0,
64         CONFIG_HOST_KEYBOARD_MAC_JP      = CONFIG_HOST_KEYBOARD_TYPE_MAC + 1,
65         CONFIG_HOST_KEYBOARD_MAC_ANOTHER = CONFIG_HOST_KEYBOARD_TYPE_MAC + 0xff,
66 };      
67
68 enum {
69         CONFIG_CURSOR_AS_CURSOR = 0,
70         CONFIG_CURSOR_AS_2468 = 1,
71         CONFIG_CURSOR_AS_1235 = 2,
72 };
73
74 #define MAX_HISTORY     8
75
76 #ifdef USE_FIXED_CONFIG
77         #define USE_CART_TMP            8
78         #define USE_FLOPPY_DISK_TMP     16
79         #define USE_QUICK_DISK_TMP      8
80         #define USE_HARD_DISK_TMP       8
81         #define USE_TAPE_TMP            8
82         #define USE_COMPACT_DISC_TMP    8
83         #define USE_LASER_DISC_TMP      8
84         #define USE_BINARY_FILE_TMP     8
85         #define USE_BUBBLE_TMP          16
86         #define MAX_VOLUME_TMP          32
87 #else
88         #define USE_CART_TMP            USE_CART
89         #define USE_FLOPPY_DISK_TMP     USE_FLOPPY_DISK
90         #define USE_QUICK_DISK_TMP      USE_QUICK_DISK
91         #define USE_HARD_DISK_TMP       USE_HARD_DISK
92         #define USE_TAPE_TMP            USE_TAPE
93         #define USE_COMPACT_DISC_TMP    USE_COMPACT_DISC
94         #define USE_LASER_DISC_TMP      USE_LASER_DISC
95         #define USE_BINARY_FILE_TMP     USE_BINARY_FILE
96         #define USE_BUBBLE_TMP          USE_BUBBLE
97         #ifdef USE_SOUND_VOLUME
98                 #define MAX_VOLUME_TMP  USE_SOUND_VOLUME
99         #endif
100 #endif
101
102 void initialize_config();
103 void load_config(const _TCHAR* config_path);
104 void save_config(const _TCHAR* config_path);
105 bool process_config_state(void *f, bool loading);
106
107 /*
108  * 20160407 Ohta:
109  * Qt:
110  *  To reduce time to build, compiling common blocks of GUI at once.
111  *  So, you should not separate items with #ifdef.
112  */ 
113 typedef struct {
114         // control
115         #if defined(USE_FIXED_CONFIG) || defined(USE_BOOT_MODE)
116                 int boot_mode;
117         #endif
118         #if defined(USE_FIXED_CONFIG) || defined(USE_CPU_TYPE)
119                 int cpu_type;
120         #endif
121         #if defined(USE_FIXED_CONFIG) || defined(USE_DIPSWITCH)
122                 uint32_t dipswitch;
123         #endif
124         #if defined(USE_FIXED_CONFIG) || defined(USE_DEVICE_TYPE)
125                 int device_type;
126         #endif
127         #if defined(USE_FIXED_CONFIG) || defined(USE_DRIVE_TYPE)
128                 int drive_type;
129         #endif
130         #if defined(USE_FIXED_CONFIG) || defined(USE_KEYBOARD_TYPE)
131                 int keyboard_type;
132         #endif
133         #if defined(USE_FIXED_CONFIG) || defined(USE_MOUSE_TYPE)
134                 int mouse_type; /*!< Emulated type of mouse by VM */ 
135         #endif
136         #if defined(USE_FIXED_CONFIG) || defined(USE_JOYSTICK_TYPE)
137                 int joystick_type; /*!< Emulated type of joystick by VM */ 
138         #endif
139         #if defined(USE_FIXED_CONFIG) || defined(USE_SOUND_TYPE)
140                 int sound_type;
141         #endif
142         #if defined(USE_FIXED_CONFIG) || defined(USE_MONITOR_TYPE)
143                 int monitor_type;
144         #endif
145         #if defined(USE_FIXED_CONFIG) || defined(USE_SCANLINE)
146                 bool scan_line;
147                 bool scan_line_auto;
148         #endif
149         #if defined(USE_FIXED_CONFIG) || defined(USE_PRINTER_TYPE)
150                 int printer_type;
151         #endif
152         #if defined(USE_SHARED_DLL) || defined(USE_FLOPPY_DISK)
153                 bool correct_disk_timing[/*USE_FLOPPY_DISK_TMP*/16];
154                 bool ignore_disk_crc[/*USE_FLOPPY_DISK_TMP*/16];
155         #endif
156         #if defined(USE_SHARED_DLL) || defined(USE_TAPE)
157                 bool wave_shaper[USE_TAPE_TMP];
158                 bool direct_load_mzt[USE_TAPE_TMP];
159                 bool baud_high[USE_TAPE_TMP];
160         #endif
161         #if defined(USE_SHARED_DLL) || defined(USE_VARIABLE_MEMORY)
162         uint32_t current_ram_size;
163         #endif
164         bool compress_state;
165         int cpu_power;
166         bool full_speed;
167         
168         // recent files
169         #if defined(USE_SHARED_DLL) || defined(USE_CART)
170                 _TCHAR initial_cart_dir[_MAX_PATH];
171                 _TCHAR recent_cart_path[USE_CART_TMP][MAX_HISTORY][_MAX_PATH];
172         #endif
173         #if defined(USE_SHARED_DLL) || defined(USE_FLOPPY_DISK)
174                 _TCHAR initial_floppy_disk_dir[_MAX_PATH];
175                 _TCHAR recent_floppy_disk_path[USE_FLOPPY_DISK_TMP][MAX_HISTORY][_MAX_PATH];
176         #endif
177         #if defined(USE_SHARED_DLL) || defined(USE_QUICK_DISK)
178                 _TCHAR initial_quick_disk_dir[_MAX_PATH];
179                 _TCHAR recent_quick_disk_path[USE_QUICK_DISK_TMP][MAX_HISTORY][_MAX_PATH];
180         #endif
181         #if defined(USE_SHARED_DLL) || defined(USE_HARD_DISK)
182                 _TCHAR initial_hard_disk_dir[_MAX_PATH];
183                 _TCHAR recent_hard_disk_path[USE_HARD_DISK_TMP][MAX_HISTORY][_MAX_PATH];
184                 _TCHAR last_hard_disk_path[USE_HARD_DISK_TMP][_MAX_PATH];
185         #endif
186         #if defined(USE_SHARED_DLL) || defined(USE_TAPE)
187                 _TCHAR initial_tape_dir[_MAX_PATH];
188                 _TCHAR recent_tape_path[USE_TAPE_TMP][MAX_HISTORY][_MAX_PATH];
189         #endif
190         #if defined(USE_SHARED_DLL) || defined(USE_COMPACT_DISC)
191                 _TCHAR initial_compact_disc_dir[_MAX_PATH];
192                 _TCHAR recent_compact_disc_path[USE_COMPACT_DISC_TMP][MAX_HISTORY][_MAX_PATH];
193                 bool swap_audio_byteorder[USE_COMPACT_DISC_TMP];
194         #endif
195         #if defined(USE_SHARED_DLL) || defined(USE_LASER_DISC)
196                 _TCHAR initial_laser_disc_dir[_MAX_PATH];
197                 _TCHAR recent_laser_disc_path[USE_LASER_DISC_TMP][MAX_HISTORY][_MAX_PATH];
198         #endif
199         #if defined(USE_SHARED_DLL) || defined(USE_BINARY_FILE)
200                 _TCHAR initial_binary_dir[_MAX_PATH];
201                 _TCHAR recent_binary_path[USE_BINARY_FILE_TMP][MAX_HISTORY][_MAX_PATH];
202         #endif
203         #if defined(USE_SHARED_DLL) || defined(USE_BUBBLE)
204                 _TCHAR initial_bubble_casette_dir[_MAX_PATH];
205                 _TCHAR recent_bubble_casette_path[USE_BUBBLE_TMP][MAX_HISTORY][_MAX_PATH];
206         #endif
207
208         // screen
209         int window_mode;
210         int window_stretch_type;
211         int fullscreen_stretch_type;
212         //      #if defined(USE_FIXED_CONFIG) || defined(USE_SCREEN_ROTATE)
213                 int rotate_type;
214         //      #endif
215         
216         // filter
217         #if defined(USE_FIXED_CONFIG) || defined(USE_SCREEN_FILTER)
218                 int filter_type;
219         #endif
220
221         uint32_t mouse_sensitivity; /*!< SENSITIVITY of MOUSE , Value * 2^12, limit is 2^16-1 */
222         // NOTE: Belows contain STAGED CONFIGURATION.
223 #if defined(_USE_QT)
224         bool use_separate_thread_draw;
225         bool use_opengl_scanline;
226         bool use_osd_virtual_media;
227         bool opengl_scanline_vert;
228         bool opengl_scanline_horiz;
229         bool use_opengl_filters;
230         bool focus_with_click;
231         int opengl_filter_num;
232         
233         // STAGED CONFIG VALUES
234         bool swap_kanji_pause;
235         int  cursor_as_ten_key;
236         bool numpad_enter_as_fullkey;
237         int host_keyboard_type;
238         
239         /*
240          * TYPE : 
241          *    0 : OpenGL/Main Profile
242          *    1 : OpenGL/Core Profile
243          *    2 : OpenGL ES
244          *    8 : Qt3D(Will not implement)
245          *   16 : Vulkan (Will not implement)
246          *   24 : DirectDraw (Will not implement)
247          *   25 : SDLFB(Will not implement)
248      *   32 : DirectX(Will not implement)
249          */ 
250         int render_platform;
251         int render_major_version;
252         int render_minor_version;
253         bool disk_count_immediate[16]; // Hack for MB8877, FLEX for FM-7.
254         _TCHAR debugwindow_font[1024];
255         _TCHAR logwindow_font[1024];
256         int debugwindow_width;
257         int debugwindow_height;
258         int logwindow_width;
259         int logwindow_height;
260         
261 #endif  
262         
263         // sound
264         int sound_frequency;
265         int sound_latency;
266         bool sound_strict_rendering;
267         int sound_device_num;
268         
269 #if defined(_USE_QT)    
270         int general_sound_level;
271 #endif
272 #if defined(USE_FIXED_CONFIG) || defined(USE_FLOPPY_DISK)
273         bool sound_noise_fdd;
274 #endif
275 #if defined(USE_FIXED_CONFIG) || defined(USE_TAPE)
276         bool sound_noise_cmt;
277         bool sound_tape_signal;
278         bool sound_tape_voice;
279 #endif
280 #if defined(USE_FIXED_CONFIG) || defined(USE_SOUND_VOLUME)
281         int sound_volume_l[MAX_VOLUME_TMP];
282         int sound_volume_r[MAX_VOLUME_TMP];
283 #endif
284         #if defined(USE_SHARED_DLL) || defined(_WIN32) && !defined(_USE_QT)
285                 _TCHAR mame2151_dll_path[_MAX_PATH];
286                 _TCHAR mame2608_dll_path[_MAX_PATH];
287         #endif
288         // input
289         #if defined(USE_FIXED_CONFIG) || defined(USE_JOYSTICK)
290                 int joy_buttons[4][16];
291                 bool use_joy_to_key;
292                 int joy_to_key_type; // Note: ADD "1235" as type 3.20181218 K.O
293                 bool joy_to_key_numpad5;
294                 int joy_to_key_buttons[16];
295                 _TCHAR assigned_joystick_name[16][256];
296                 int assigned_joystick_num[16];
297                 bool emulated_joystick_dpad[4];
298         #endif
299         #if defined(USE_FIXED_CONFIG) || defined(USE_AUTO_KEY)
300                 bool romaji_to_kana;
301         #endif
302
303         // printer
304 #if defined(USE_FIXED_CONFIG) || defined(USE_PRINTER)
305         _TCHAR printer_dll_path[_MAX_PATH];
306 #endif
307         // debug 
308         bool special_debug_fdc; 
309         bool print_statistics;
310
311 #if defined(_WIN32) && !defined(_USE_QT)
312         bool use_direct_input;
313         bool disable_dwm;
314
315         bool use_d2d1;
316         bool use_d3d9;
317         bool wait_vsync;
318         bool use_dinput;
319         bool show_status_bar;
320 #endif
321
322 #ifdef _USE_QT
323
324         int video_width;
325         int video_height;
326         int video_codec_type;
327         int audio_codec_type;
328         
329         int video_h264_bitrate;
330         int video_h264_bframes;
331         int video_h264_b_adapt;
332         int video_h264_minq;
333         int video_h264_maxq;
334         int video_h264_subme;
335
336         int video_mpeg4_bitrate;
337         int video_mpeg4_bframes;
338         int video_mpeg4_minq;
339         int video_mpeg4_maxq;
340         
341         int video_threads;
342         int audio_bitrate;
343         int video_frame_rate; // FPS * 1000.0
344         bool log_to_syslog;
345         bool log_to_console;
346         bool dev_log_to_syslog[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
347         bool dev_log_to_console[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
348         bool dev_log_recording[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
349
350         bool state_log_to_console;
351         bool state_log_to_syslog;
352         bool state_log_to_recording;
353         
354         int rendering_type;
355
356         int virtual_media_position; // -1 = none, 1, 2, 3, 4 = LRUD
357 #endif
358         // 20210728 K.O
359         // Belows are machine features config (without DIPSW. I.E. joystick ports
360 #if defined(USE_FIXED_CONFIG) || defined(USE_MACHINE_FEATURES)
361         uint32_t machine_features[32];
362 #endif
363 } config_t;
364
365 extern config_t DLL_PREFIX_I config;
366
367 #if defined(_USE_QT)
368 # include <string>
369 #endif
370
371 #endif
372