2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
13 #include "csp_logger.h"
15 # if defined(Q_OS_WIN)
19 extern CSP_Logger *csp_logger;
29 #define CONFIG_NAME "conf"
32 BOOL MyWritePrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, int Value, LPCTSTR lpFileName)
34 return MyWritePrivateProfileString(lpAppName, lpKeyName, create_string(_T("%d"), Value), lpFileName);
37 BOOL MyWritePrivateProfileBool(LPCTSTR lpAppName, LPCTSTR lpKeyName, bool Value, LPCTSTR lpFileName)
39 return MyWritePrivateProfileString(lpAppName, lpKeyName, create_string(_T("%d"), Value ? 1 : 0), lpFileName);
42 bool MyGetPrivateProfileBool(LPCTSTR lpAppName, LPCTSTR lpKeyName, bool bDefault, LPCTSTR lpFileName)
44 return (MyGetPrivateProfileInt(lpAppName, lpKeyName, bDefault ? 1 : 0, lpFileName) != 0);
47 void initialize_config()
50 memset(&config, 0, sizeof(config_t));
51 config.window_mode = 1;
52 // memo: set only non zero value
53 config.full_speed = false;
56 #if defined(USE_BOOT_MODE) && defined(BOOT_MODE_DEFAULT)
57 config.boot_mode = BOOT_MODE_DEFAULT;
59 #if defined(USE_CPU_TYPE) && defined(CPU_TYPE_DEFAULT)
60 config.cpu_type = CPU_TYPE_DEFAULT;
62 #if defined(USE_DIPSWITCH) && defined(DIPSWITCH_DEFAULT)
63 config.dipswitch = DIPSWITCH_DEFAULT;
65 #if defined(USE_DEVICE_TYPE) && defined(DEVICE_TYPE_DEFAULT)
66 config.device_type = DEVICE_TYPE_DEFAULT;
68 #if defined(USE_DRIVE_TYPE) && defined(DRIVE_TYPE_DEFAULT)
69 config.drive_type = DRIVE_TYPE_DEFAULT;
71 #if defined(USE_KEYBOARD_TYPE) && defined(KEYBOARD_TYPE_DEFAULT)
72 config.keyboard_type = KEYBOARD_TYPE_DEFAULT;
74 #if defined(USE_MOUSE_TYPE) && defined(MOUSE_TYPE_DEFAULT)
75 config.mouse_type = MOUSE_TYPE_DEFAULT;
77 #if defined(USE_JOYSTICK_TYPE) && defined(JOYSTICK_TYPE_DEFAULT)
78 config.joystick_type = JOYSTICK_TYPE_DEFAULT;
80 #if defined(USE_SOUND_TYPE) && defined(SOUND_TYPE_DEFAULT)
81 config.sound_type = SOUND_TYPE_DEFAULT;
83 #if defined(USE_MONITOR_TYPE) && defined(MONITOR_TYPE_DEFAULT)
84 config.monitor_type = MONITOR_TYPE_DEFAULT;
86 #if defined(USE_PRINTER_TYPE) && defined(PRINTER_TYPE_DEFAULT)
87 config.printer_type = PRINTER_TYPE_DEFAULT;
89 #if defined(USE_FLOPPY_DISK)
90 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
91 #if defined(CORRECT_DISK_TIMING_DEFAULT)
92 config.correct_disk_timing[drv] = CORRECT_DISK_TIMING_DEFAULT;
94 config.correct_disk_timing[drv] = false;
96 #if defined(IGNORE_DISK_CRC_DEFAULT)
97 config.ignore_disk_crc[drv] = IGNORE_DISK_CRC_DEFAULT;
99 config.ignore_disk_crc[drv] = false;
103 #if defined(USE_TAPE)
104 for(int drv = 0; drv < USE_TAPE; drv++) {
105 config.wave_shaper[drv] = true;
106 config.direct_load_mzt[drv] = true;
107 config.baud_high[drv] = true;
110 #ifdef USE_COMPACT_DISC
111 for(int drv = 0; drv < USE_COMPACT_DISC_TMP; drv++) {
112 config.swap_audio_byteorder[drv] = false;
116 config.compress_state = true;
119 #ifndef ONE_BOARD_MICRO_COMPUTER
120 config.fullscreen_stretch_type = 1; // Stretch (Aspect)
124 #ifdef SOUND_RATE_DEFAULT
125 config.sound_frequency = SOUND_RATE_DEFAULT;
127 config.sound_frequency = 6; // 48KHz
129 config.sound_latency = 1; // 100msec
130 config.sound_strict_rendering = true;
131 config.sound_device_num = 0; // Add 20190221
132 #ifdef USE_FLOPPY_DISK
133 config.sound_noise_fdd = true;
136 config.sound_noise_cmt = true;
137 config.sound_play_tape = true;
141 for(int i = 0; i < 4; i++) {
142 for(int j = 0; j < 16; j++) {
143 config.joy_buttons[i][j] = (i << 5) | j;
146 config.use_joy_to_key = false;
147 config.joy_to_key_type = 2;
148 config.joy_to_key_numpad5 = false;
149 config.joy_to_key_buttons[0] = -('Z');
150 config.joy_to_key_buttons[1] = -('X');
152 #if defined(USE_VARIABLE_MEMORY)
153 config.current_ram_size = USE_VARIABLE_MEMORY;
156 config.special_debug_fdc = false;
157 config.print_statistics = false;
160 #if defined(_WIN32) && !defined(_USE_QT)
161 #ifndef ONE_BOARD_MICRO_COMPUTER
162 config.use_d3d9 = true;
164 config.use_dinput = true;
165 config.show_status_bar = true;
170 config.use_separate_thread_draw = true;
171 config.use_osd_virtual_media = true;
172 config.render_platform = CONFIG_RENDER_PLATFORM_OPENGL_ES;
173 config.render_major_version = 2; // For crash with some devices.
174 config.render_minor_version = 0;
175 config.rendering_type = CONFIG_RENDER_TYPE_STD;
177 config.use_opengl_scanline = false;
178 config.opengl_scanline_vert = false;
179 config.opengl_scanline_horiz = false;
180 config.use_opengl_filters = false;
181 config.opengl_filter_num = 0;
182 config.focus_with_click = false;
184 config.video_width = 640;
185 config.video_height = 480;
186 config.video_codec_type = 0; // MPEG4
188 config.video_h264_bitrate = 512;
189 config.video_h264_bframes = 4;
190 config.video_h264_b_adapt = 2;
191 config.video_h264_minq = 14;
192 config.video_h264_maxq = 25;
193 config.video_h264_subme = 8;
195 config.video_mpeg4_bitrate = 512;
196 config.video_mpeg4_bframes = 4;
197 config.video_mpeg4_minq = 1;
198 config.video_mpeg4_maxq = 20;
200 config.audio_codec_type = 0;
201 config.video_threads = 0;
202 config.audio_bitrate = 160;
203 config.video_frame_rate = 30;
204 config.log_to_syslog = false;
205 config.log_to_console = true;
206 for(int ii = 0; ii < (CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1) ; ii++) {
207 for(int jj = 0; jj < 8; jj++) {
208 config.dev_log_to_syslog[ii][jj] = true;
209 config.dev_log_to_console[ii][jj] = true;
210 config.dev_log_recording[ii][jj] = true;
213 config.state_log_to_console = false;
214 config.state_log_to_syslog = false;
215 config.state_log_to_recording = false;
217 config.rendering_type = CONFIG_RENDER_TYPE_STD;
218 config.virtual_media_position = 2; // Down.
219 for(int drv = 0; drv < 16; drv++) {
220 config.disk_count_immediate[drv] = false;
223 config.cursor_as_ten_key = CONFIG_CURSOR_AS_CURSOR;
224 memset(config.debugwindow_font, 0x00, sizeof(config.debugwindow_font));
225 memset(config.logwindow_font, 0x00, sizeof(config.logwindow_font));
227 #if defined(_FM7) || defined(_FMNEW7) || defined(_FM8) \
228 || defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS)
229 config.numpad_enter_as_fullkey = false;
231 config.numpad_enter_as_fullkey = true;
233 config.host_keyboard_type = CONFIG_HOST_KEYBOARD_AT_109JP;
237 void load_config(const _TCHAR *config_path)
245 config.boot_mode = MyGetPrivateProfileInt(_T("Control"), _T("BootMode"), config.boot_mode, config_path);
248 config.cpu_type = MyGetPrivateProfileInt(_T("Control"), _T("CPUType"), config.cpu_type, config_path);
251 config.dipswitch = MyGetPrivateProfileInt(_T("Control"), _T("DipSwitch"), config.dipswitch, config_path);
253 #ifdef USE_DEVICE_TYPE
254 config.device_type = MyGetPrivateProfileInt(_T("Control"), _T("DeviceType"), config.device_type, config_path);
256 #ifdef USE_DRIVE_TYPE
257 config.drive_type = MyGetPrivateProfileInt(_T("Control"), _T("DriveType"), config.drive_type, config_path);
259 #ifdef USE_KEYBOARD_TYPE
260 config.keyboard_type = MyGetPrivateProfileInt(_T("Control"), _T("KeyboardType"), config.keyboard_type, config_path);
262 #ifdef USE_MOUSE_TYPE
263 config.mouse_type = MyGetPrivateProfileInt(_T("Control"), _T("MouseType"), config.mouse_type, config_path);
265 #ifdef USE_JOYSTICK_TYPE
266 config.joystick_type = MyGetPrivateProfileInt(_T("Control"), _T("JoystickType"), config.joystick_type, config_path);
268 #ifdef USE_SOUND_TYPE
269 config.sound_type = MyGetPrivateProfileInt(_T("Control"), _T("SoundType"), config.sound_type, config_path);
271 #ifdef USE_MONITOR_TYPE
272 config.monitor_type = MyGetPrivateProfileInt(_T("Control"), _T("MonitorType"), config.monitor_type, config_path);
275 config.scan_line = MyGetPrivateProfileBool(_T("Control"), _T("ScanLine"), config.scan_line, config_path);
278 config.printer_type = MyGetPrivateProfileInt(_T("Control"), _T("PrinterType"), config.printer_type, config_path);
280 #if defined(USE_VARIABLE_MEMORY)
281 config.current_ram_size = MyGetPrivateProfileInt(_T("Control"), _T("CurrentRAMSize"), config.current_ram_size, config_path);
283 #ifdef USE_FLOPPY_DISK
284 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
285 config.correct_disk_timing[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("CorrectDiskTiming%d"), drv + 1), config.correct_disk_timing[drv], config_path);
286 config.ignore_disk_crc[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("IgnoreDiskCRC%d"), drv + 1), config.ignore_disk_crc[drv], config_path);
288 config.disk_count_immediate[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("DiskIncrementImmediate%d"), drv + 1), config.disk_count_immediate[drv], config_path);
293 for(int drv = 0; drv < USE_TAPE; drv++) {
294 config.wave_shaper[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("WaveShaper%d"), drv + 1), config.wave_shaper[drv], config_path);
295 config.direct_load_mzt[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("DirectLoadMZT%d"), drv + 1), config.direct_load_mzt[drv], config_path);
296 config.baud_high[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("BaudHigh%d"), drv + 1), config.baud_high[drv], config_path);
299 config.compress_state = MyGetPrivateProfileBool(_T("Control"), _T("CompressState"), config.compress_state, config_path);
302 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialCartDir"), _T(""), config.initial_cart_dir, _MAX_PATH, config_path);
303 for(int drv = 0; drv < USE_CART; drv++) {
304 for(int i = 0; i < MAX_HISTORY; i++) {
305 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentCartPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_cart_path[drv][i], _MAX_PATH, config_path);
309 #ifdef USE_FLOPPY_DISK
310 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialDiskDir"), _T(""), config.initial_floppy_disk_dir, _MAX_PATH, config_path);
311 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
312 for(int i = 0; i < MAX_HISTORY; i++) {
313 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentDiskPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_floppy_disk_path[drv][i], _MAX_PATH, config_path);
317 #ifdef USE_QUICK_DISK
318 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialQuickDiskDir"), _T(""), config.initial_quick_disk_dir, _MAX_PATH, config_path);
319 for(int drv = 0; drv < USE_QUICK_DISK; drv++) {
320 for(int i = 0; i < MAX_HISTORY; i++) {
321 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentQuickDiskPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_quick_disk_path[drv][i], _MAX_PATH, config_path);
326 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialHardDiskDir"), _T(""), config.initial_hard_disk_dir, _MAX_PATH, config_path);
327 for(int drv = 0; drv < USE_HARD_DISK; drv++) {
328 for(int i = 0; i < MAX_HISTORY; i++) {
329 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentHardDiskPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_hard_disk_path[drv][i], _MAX_PATH, config_path);
331 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("LastHardDiskPath%d"), drv + 1), _T(""), config.last_hard_disk_path[drv], _MAX_PATH, config_path);
335 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialTapeDir"), _T(""), config.initial_tape_dir, _MAX_PATH, config_path);
336 for(int drv = 0; drv < USE_TAPE; drv++) {
337 for(int i = 0; i < MAX_HISTORY; i++) {
338 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentTapePath%d_%d"), drv + 1, i + 1), _T(""), config.recent_tape_path[drv][i], _MAX_PATH, config_path);
342 #ifdef USE_COMPACT_DISC
343 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialCompactDiscDir"), _T(""), config.initial_compact_disc_dir, _MAX_PATH, config_path);
344 for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
345 for(int i = 0; i < MAX_HISTORY; i++) {
346 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentCompactDiscPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_compact_disc_path[drv][i], _MAX_PATH, config_path);
350 #ifdef USE_LASER_DISC
351 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialLaserDiscDir"), _T(""), config.initial_laser_disc_dir, _MAX_PATH, config_path);
352 for(int drv = 0; drv < USE_LASER_DISC; drv++) {
353 for(int i = 0; i < MAX_HISTORY; i++) {
354 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentLaserDiscPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_laser_disc_path[drv][i], _MAX_PATH, config_path);
358 #ifdef USE_BINARY_FILE
359 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialBinaryDir"), _T(""), config.initial_binary_dir, _MAX_PATH, config_path);
360 for(int drv = 0; drv < USE_BINARY_FILE; drv++) {
361 for(int i = 0; i < MAX_HISTORY; i++) {
362 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentBinaryPath%d_%d"), drv + 1, i + 1), _T(""), config.recent_binary_path[drv][i], _MAX_PATH, config_path);
367 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialBubbleDir"), _T(""), config.initial_bubble_casette_dir, _MAX_PATH, config_path);
368 for(int drv = 0; drv < USE_BUBBLE; drv++) {
369 for(int i = 0; i < MAX_HISTORY; i++) {
370 MyGetPrivateProfileString(_T("RecentFiles"), create_string(_T("RecentBubblePath%d_%d"), drv + 1, i + 1), _T(""), config.recent_bubble_casette_path[drv][i], _MAX_PATH, config_path);
376 #ifndef ONE_BOARD_MICRO_COMPUTER
377 config.window_mode = MyGetPrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
378 config.window_stretch_type = MyGetPrivateProfileInt(_T("Screen"), _T("WindowStretchType"), config.window_stretch_type, config_path);
379 config.fullscreen_stretch_type = MyGetPrivateProfileInt(_T("Screen"), _T("FullScreenStretchType"), config.fullscreen_stretch_type, config_path);
380 // #ifdef USE_SCREEN_ROTATE
381 config.rotate_type = MyGetPrivateProfileInt(_T("Screen"), _T("RotateType"), config.rotate_type, config_path);
387 #ifdef USE_SCREEN_FILTER
388 config.filter_type = MyGetPrivateProfileInt(_T("Screen"), _T("FilterType"), config.filter_type, config_path);
392 config.sound_frequency = MyGetPrivateProfileInt(_T("Sound"), _T("Frequency"), config.sound_frequency, config_path);
393 config.sound_latency = MyGetPrivateProfileInt(_T("Sound"), _T("Latency"), config.sound_latency, config_path);
394 config.sound_strict_rendering = MyGetPrivateProfileInt(_T("Sound"), _T("StrictRendering"), config.sound_strict_rendering, config_path);
395 config.sound_device_num = MyGetPrivateProfileBool(_T("Sound"), _T("DeviceNumber"), config.sound_device_num, config_path);
396 #ifdef USE_FLOPPY_DISK
397 config.sound_noise_fdd = MyGetPrivateProfileBool(_T("Sound"), _T("NoiseFDD"), config.sound_noise_fdd, config_path);;
400 config.sound_noise_cmt = MyGetPrivateProfileBool(_T("Sound"), _T("NoiseCMT"), config.sound_noise_cmt, config_path);;
401 config.sound_play_tape = MyGetPrivateProfileBool(_T("Sound"), _T("PlayTape"), config.sound_play_tape, config_path);
403 #ifdef USE_COMPACT_DISC
404 for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
405 config.swap_audio_byteorder[drv] = MyGetPrivateProfileBool(_T("Sound"), create_string(_T("SwapCDByteOrder%d"), drv + 1), config.swap_audio_byteorder[drv], config_path);
408 #ifdef USE_SOUND_VOLUME
409 for(int i = 0; i < USE_SOUND_VOLUME; i++) {
410 int tmp_l = MyGetPrivateProfileInt(_T("Sound"), create_string(_T("VolumeLeft%d"), i + 1), config.sound_volume_l[i], config_path);
411 int tmp_r = MyGetPrivateProfileInt(_T("Sound"), create_string(_T("VolumeRight%d"), i + 1), config.sound_volume_r[i], config_path);
413 // Note: when using balance , levels are -40±20db to 0±20db.
414 config.sound_volume_l[i] = max(-60, min(20, tmp_l));
415 config.sound_volume_r[i] = max(-60, min(20, tmp_r));
417 config.sound_volume_l[i] = max(-40, min(0, tmp_l));
418 config.sound_volume_r[i] = max(-40, min(0, tmp_r));
423 #if defined(_WIN32) && !defined(_USE_QT)
424 // for compatibilities
426 MyGetPrivateProfileString(_T("Sound"), _T("FMGenDll"), _T("mame2151.dll"), config.mame2151_dll_path, _MAX_PATH, config_path);
427 my_tcscpy_s(config.mame2608_dll_path, _MAX_PATH, _T("mamefm.dll"));
429 MyGetPrivateProfileString(_T("Sound"), _T("FMGenDll"), _T("mamefm.dll"), config.mame2608_dll_path, _MAX_PATH, config_path);
430 my_tcscpy_s(config.mame2151_dll_path, _MAX_PATH, _T("mame2151.dll"));
432 MyGetPrivateProfileString(_T("Sound"), _T("YM2151GenDll"), config.mame2151_dll_path, config.mame2151_dll_path, _MAX_PATH, config_path);
433 MyGetPrivateProfileString(_T("Sound"), _T("YM2608GenDll"), config.mame2608_dll_path, config.mame2608_dll_path, _MAX_PATH, config_path);
437 for(int i = 0; i < 4; i++) {
438 for(int j = 0; j < 16; j++) {
439 int old = (i << 4) | j;
440 old = MyGetPrivateProfileInt(_T("Input"), create_string(_T("JoyButtons%d_%d"), i + 1, j + 1), old, config_path);
441 old = ((old >> 4) << 5) | (old & 0x0f);
442 config.joy_buttons[i][j] = MyGetPrivateProfileInt(_T("Input"), create_string(_T("JoyButtonsEx%d_%d"), i + 1, j + 1), old, config_path);
445 config.use_joy_to_key = MyGetPrivateProfileBool(_T("Input"), _T("UseJoyToKey"), config.use_joy_to_key, config_path);
446 config.joy_to_key_type = MyGetPrivateProfileInt(_T("Input"), _T("JoyToKeyType"), config.joy_to_key_type, config_path);
447 config.joy_to_key_numpad5 = MyGetPrivateProfileBool(_T("Input"), _T("JoyToKeyNumPad5"), config.joy_to_key_numpad5, config_path);
448 for(int i = 0; i < 16; i++) {
449 config.joy_to_key_buttons[i] = MyGetPrivateProfileInt(_T("Input"), create_string(_T("JoyToKeyButtons%d"), i + 1), config.joy_to_key_buttons[i], config_path);
453 #ifdef USE_FLOPPY_DISK
454 config.special_debug_fdc = MyGetPrivateProfileInt(_T("Debug"), _T("SpecialDebugFDC"), config.special_debug_fdc, config_path);
456 config.print_statistics = MyGetPrivateProfileBool(_T("Debug"), _T("PrintCPUStatistics"), config.print_statistics, config_path);
459 MyGetPrivateProfileString(_T("Printer"), _T("PrinterDll"), _T("printer.dll"), config.printer_dll_path, _MAX_PATH, config_path);
463 #if defined(_WIN32) && !defined(_USE_QT)
464 #ifndef ONE_BOARD_MICRO_COMPUTER
465 config.use_d3d9 = MyGetPrivateProfileBool(_T("Win32"), _T("UseDirect3D9"), config.use_d3d9, config_path);
466 config.wait_vsync = MyGetPrivateProfileBool(_T("Win32"), _T("WaitVSync"), config.wait_vsync, config_path);
468 config.use_dinput = MyGetPrivateProfileBool(_T("Win32"), _T("UseDirectInput"), config.use_dinput, config_path);
469 config.disable_dwm = MyGetPrivateProfileBool(_T("Win32"), _T("DisableDwm"), config.disable_dwm, config_path);
470 config.show_status_bar = MyGetPrivateProfileBool(_T("Win32"), _T("ShowStatusBar"), config.show_status_bar, config_path);
475 config.use_separate_thread_draw = MyGetPrivateProfileBool(_T("Qt"), _T("UseSeparateThreadDraw"), config.use_separate_thread_draw, config_path);
476 config.use_osd_virtual_media = MyGetPrivateProfileBool(_T("Qt"), _T("UseOSDVirtualMedia"), config.use_osd_virtual_media, config_path);
477 config.use_opengl_scanline = MyGetPrivateProfileBool(_T("Qt"), _T("UseOpenGLScanLine"), config.use_opengl_scanline, config_path);
478 config.opengl_scanline_vert = MyGetPrivateProfileBool(_T("Qt"), _T("OpenGLScanLineVert"), config.opengl_scanline_vert, config_path);;
479 config.opengl_scanline_horiz = MyGetPrivateProfileBool(_T("Qt"), _T("OpenGLScanLineHoriz"), config.opengl_scanline_horiz, config_path);;
480 config.use_opengl_filters = MyGetPrivateProfileBool(_T("Qt"), _T("UseOpenGLFilters"), config.use_opengl_filters, config_path);
481 config.opengl_filter_num = MyGetPrivateProfileInt(_T("Qt"), _T("OpenGLFilterNum"), config.opengl_filter_num, config_path);
482 config.render_platform = MyGetPrivateProfileInt(_T("Qt"), _T("RenderPlatform"), config.render_platform, config_path);
483 config.render_major_version = MyGetPrivateProfileInt(_T("Qt"), _T("RenderMajorVersion"), config.render_major_version, config_path);
484 config.render_minor_version = MyGetPrivateProfileInt(_T("Qt"), _T("RenderMinorVersion"), config.render_minor_version, config_path);
485 config.rendering_type = MyGetPrivateProfileInt(_T("Qt"), _T("RenderType"), config.rendering_type, config_path);
487 config.general_sound_level = MyGetPrivateProfileInt(_T("Qt"), _T("GeneralSoundLevel"), config.general_sound_level, config_path);
488 config.focus_with_click = MyGetPrivateProfileBool(_T("Qt"), _T("FocusWithClick"), config.focus_with_click, config_path);
490 if(config.rendering_type < 0) config.rendering_type = 0;
491 if(config.rendering_type >= CONFIG_RENDER_TYPE_END) config.rendering_type = CONFIG_RENDER_TYPE_END - 1;
494 config.swap_kanji_pause = MyGetPrivateProfileBool(_T("Qt"), _T("SwapKanjiPause"), config.swap_kanji_pause, config_path);
495 config.cursor_as_ten_key = MyGetPrivateProfileInt(_T("Qt"), _T("CursorAsTenKey"), config.cursor_as_ten_key, config_path);
496 config.numpad_enter_as_fullkey = MyGetPrivateProfileBool(_T("Qt"), _T("NumpadEnterAsFullKey"), config.numpad_enter_as_fullkey, config_path);
497 config.host_keyboard_type = MyGetPrivateProfileInt(_T("Qt"), _T("HostKeyboardType"), config.host_keyboard_type, config_path);
498 MyGetPrivateProfileString(_T("Qt"), _T("DebugWindowFont"), _T("Sans"), config.debugwindow_font, sizeof(config.debugwindow_font) - 1, config_path);
499 config.debugwindow_width = MyGetPrivateProfileInt(_T("Qt"), _T("DebugWindowWidth"), 800, config_path);
500 config.debugwindow_height = MyGetPrivateProfileInt(_T("Qt"), _T("DebugWindowHeight"), 500, config_path);
501 MyGetPrivateProfileString(_T("Qt"), _T("LogWindowFont"), _T("Sans"), config.logwindow_font, sizeof(config.logwindow_font) - 1, config_path);
502 config.logwindow_width = MyGetPrivateProfileInt(_T("Qt"), _T("LogWindowWidth"), 800, config_path);
503 config.logwindow_height = MyGetPrivateProfileInt(_T("Qt"), _T("LogWindowHeight"), 500, config_path);
504 // Assigning joysticks.
505 for(i = 0; i < 16; i++) {
507 my_stprintf_s(name, 255, _T("AssignedJoystick%d"), i + 1);
508 MyGetPrivateProfileString(_T("Qt"), (const _TCHAR *)name, _T(""),
509 config.assigned_joystick_name[i], 255, config_path);
510 // printf("%d->%s\n", i, config.assigned_joystick_name[i]);
513 config.video_width = MyGetPrivateProfileInt(_T("Qt"), _T("VideoWidth"), 640, config_path);
514 if(config.video_width < 128) config.video_width = 128;
515 config.video_height = MyGetPrivateProfileInt(_T("Qt"), _T("VideoHeight"), 480, config_path);
516 if(config.video_height < 80) config.video_height = 80;
518 config.video_codec_type = MyGetPrivateProfileInt(_T("Qt"), _T("VideoCodecType"), 1, config_path);
519 if(config.video_codec_type > 1) config.video_codec_type = 1;
520 if(config.video_codec_type < 0) config.video_codec_type = 0;
522 config.audio_codec_type = MyGetPrivateProfileInt(_T("Qt"), _T("AudioCodecType"), 0, config_path);
523 if(config.video_codec_type > 2) config.audio_codec_type = 2;
524 if(config.video_codec_type < 0) config.audio_codec_type = 0;
526 config.video_h264_bitrate = MyGetPrivateProfileInt(_T("Qt"), _T("H264Bitrate"), 3500, config_path);
527 if(config.video_h264_bitrate < 64) config.video_h264_bitrate = 64;
529 config.video_h264_bframes = MyGetPrivateProfileInt(_T("Qt"), _T("H264BFrames"), 4, config_path);
530 if(config.video_h264_bframes < 0) config.video_h264_bframes = 0;
531 if(config.video_h264_bframes > 10) config.video_h264_bframes = 10;
533 config.video_h264_b_adapt = MyGetPrivateProfileInt(_T("Qt"), _T("H264BAdapt"), 2, config_path);
534 if(config.video_h264_b_adapt < 0) config.video_h264_b_adapt = 0;
535 if(config.video_h264_b_adapt > 2) config.video_h264_b_adapt = 2;
537 config.video_h264_subme = MyGetPrivateProfileInt(_T("Qt"), _T("H264Subme"), 7, config_path);
538 if(config.video_h264_subme < 0) config.video_h264_subme = 0;
539 if(config.video_h264_subme > 11) config.video_h264_subme = 11;
541 config.video_h264_minq = MyGetPrivateProfileInt(_T("Qt"), _T("H264MinQ"), 15, config_path);
542 if(config.video_h264_minq < 0) config.video_h264_minq = 0;
543 if(config.video_h264_minq > 63) config.video_h264_minq = 63;
545 config.video_h264_maxq = MyGetPrivateProfileInt(_T("Qt"), _T("H264MaxQ"), 28, config_path);
546 if(config.video_h264_maxq < 0) config.video_h264_maxq = 0;
547 if(config.video_h264_maxq > 63) config.video_h264_maxq = 63;
549 config.video_mpeg4_bitrate = MyGetPrivateProfileInt(_T("Qt"), _T("MPEG4Bitrate"), 1500, config_path);
550 if(config.video_mpeg4_bitrate < 64) config.video_mpeg4_bitrate = 64;
552 config.video_mpeg4_bframes = MyGetPrivateProfileInt(_T("Qt"), _T("MPEG4BFrames"), 2, config_path);
553 if(config.video_mpeg4_bframes < 0) config.video_mpeg4_bframes = 0;
554 if(config.video_mpeg4_bframes > 10) config.video_mpeg4_bframes = 10;
556 config.video_mpeg4_minq = MyGetPrivateProfileInt(_T("Qt"), _T("MPEG4MinQ"), 1, config_path);
557 if(config.video_mpeg4_minq < 1) config.video_mpeg4_minq = 1;
558 if(config.video_mpeg4_minq > 31) config.video_mpeg4_minq = 31;
560 config.video_mpeg4_maxq = MyGetPrivateProfileInt(_T("Qt"), _T("MPEG4MaxQ"), 15, config_path);
561 if(config.video_mpeg4_maxq < 1) config.video_mpeg4_maxq = 1;
562 if(config.video_mpeg4_maxq > 31) config.video_mpeg4_maxq = 31;
563 if(config.video_mpeg4_maxq < config.video_mpeg4_minq) {
565 n = config.video_mpeg4_maxq;
566 config.video_mpeg4_maxq = config.video_mpeg4_minq;
567 config.video_mpeg4_minq = n;
570 config.video_threads = MyGetPrivateProfileInt(_T("Qt"), _T("VideoThreads"), 0, config_path);
571 if(config.video_threads < 0) config.video_threads = 0;
572 if(config.video_threads > 16) config.video_threads = 16;
574 config.audio_bitrate = MyGetPrivateProfileInt(_T("Qt"), _T("AudioBitrate"), 224, config_path);
575 if(config.audio_bitrate < 16) config.audio_bitrate = 16;
576 if(config.audio_bitrate > 448) config.audio_bitrate = 448;
578 config.video_frame_rate = MyGetPrivateProfileInt(_T("Qt"), _T("VideoFramerate"), 60, config_path);
579 if(config.video_frame_rate < 15) config.video_frame_rate = 15;
580 if(config.video_frame_rate > 75) config.video_frame_rate = 75;
582 config.log_to_syslog = MyGetPrivateProfileBool(_T("Qt"), _T("WriteToSyslog"), config.log_to_syslog, config_path);
583 config.log_to_console = MyGetPrivateProfileBool(_T("Qt"), _T("WriteToConsole"), config.log_to_console, config_path);
585 for(int ii = 0; ii < (CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1) ; ii++) {
587 flags = MyGetPrivateProfileInt(_T("Qt"), create_string(_T("SyslogEnabled%d"), ii), 0xffff, config_path);
588 for(int jj = 0; jj < 8; jj++) {
589 config.dev_log_to_syslog[ii][jj] = ((flags & 0x0080) != 0) ? true : false;
593 flags = MyGetPrivateProfileInt(_T("Qt"), create_string(_T("ConsoleLogEnabled%d"), ii), 0xffff, config_path);
594 for(int jj = 0; jj < 8; jj++) {
595 config.dev_log_to_console[ii][jj] = ((flags & 0x0080) != 0) ? true : false;
598 flags = MyGetPrivateProfileInt(_T("Qt"), create_string(_T("RecordLogEnabled%d"), ii), 0xffff, config_path);
599 for(int jj = 0; jj < 8; jj++) {
600 config.dev_log_recording[ii][jj] = ((flags & 0x0080) != 0) ? true : false;
604 config.state_log_to_console = MyGetPrivateProfileBool(_T("Qt"), _T("StateLogToConsole"), config.state_log_to_console, config_path);;
605 config.state_log_to_syslog = MyGetPrivateProfileBool(_T("Qt"), _T("StateLogToSyslog"), config.state_log_to_syslog, config_path);;
606 config.state_log_to_recording = MyGetPrivateProfileBool(_T("Qt"), _T("StateLogToRecording"), config.state_log_to_recording, config_path);;
608 config.virtual_media_position = MyGetPrivateProfileInt(_T("Qt"), _T("UiVirtualMediaPosition"), config.virtual_media_position, config_path);
609 //csp_logger->debug_log(CSP_LOG_INFO, CSP_LOG_TYPE_GENERAL, "Read config done.");
613 void save_config(const _TCHAR *config_path)
616 #if !defined(_MSC_VER)
618 FILEIO *pt = new FILEIO;
619 if(pt->Fopen(config_path, FILEIO_WRITE_ASCII) != true) {
630 MyWritePrivateProfileInt(_T("Control"), _T("BootMode"), config.boot_mode, config_path);
633 MyWritePrivateProfileInt(_T("Control"), _T("CPUType"), config.cpu_type, config_path);
636 MyWritePrivateProfileInt(_T("Control"), _T("DipSwitch"), config.dipswitch, config_path);
638 #ifdef USE_DEVICE_TYPE
639 MyWritePrivateProfileInt(_T("Control"), _T("DeviceType"), config.device_type, config_path);
641 #ifdef USE_DRIVE_TYPE
642 MyWritePrivateProfileInt(_T("Control"), _T("DriveType"), config.drive_type, config_path);
644 #ifdef USE_KEYBOARD_TYPE
645 MyWritePrivateProfileInt(_T("Control"), _T("KeyboardType"), config.keyboard_type, config_path);
647 #ifdef USE_MOUSE_TYPE
648 MyWritePrivateProfileInt(_T("Control"), _T("MouseType"), config.mouse_type, config_path);
650 #ifdef USE_JOYSTICK_TYPE
651 MyWritePrivateProfileInt(_T("Control"), _T("JoystickType"), config.joystick_type, config_path);
653 #ifdef USE_SOUND_TYPE
654 MyWritePrivateProfileInt(_T("Control"), _T("SoundType"), config.sound_type, config_path);
656 #ifdef USE_MONITOR_TYPE
657 MyWritePrivateProfileInt(_T("Control"), _T("MonitorType"), config.monitor_type, config_path);
660 MyWritePrivateProfileBool(_T("Control"), _T("ScanLine"), config.scan_line, config_path);
663 MyWritePrivateProfileInt(_T("Control"), _T("PrinterType"), config.printer_type, config_path);
665 #if defined(USE_VARIABLE_MEMORY)
666 MyWritePrivateProfileInt(_T("Control"), _T("CurrentRAMSize"), config.current_ram_size, config_path);
668 #ifdef USE_FLOPPY_DISK
669 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
670 MyWritePrivateProfileBool(_T("Control"), create_string(_T("CorrectDiskTiming%d"), drv + 1), config.correct_disk_timing[drv], config_path);
671 MyWritePrivateProfileBool(_T("Control"), create_string(_T("IgnoreDiskCRC%d"), drv + 1), config.ignore_disk_crc[drv], config_path);
673 MyWritePrivateProfileBool(_T("Control"), create_string(_T("DiskIncrementImmediate%d"), drv + 1), config.disk_count_immediate[drv], config_path);
678 for(int drv = 0; drv < USE_TAPE; drv++) {
679 MyWritePrivateProfileBool(_T("Control"), create_string(_T("WaveShaper%d"), drv + 1), config.wave_shaper[drv], config_path);
680 MyWritePrivateProfileBool(_T("Control"), create_string(_T("DirectLoadMZT%d"), drv + 1), config.direct_load_mzt[drv], config_path);
681 MyWritePrivateProfileBool(_T("Control"), create_string(_T("BaudHigh%d"), drv + 1), config.baud_high[drv], config_path);
684 MyWritePrivateProfileBool(_T("Control"), _T("CompressState"), config.compress_state, config_path);
690 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialCartDir"), config.initial_cart_dir, config_path);
691 for(int drv = 0; drv < USE_CART; drv++) {
692 for(int i = 0; i < MAX_HISTORY; i++) {
693 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentCartPath%d_%d"), drv + 1, i + 1), config.recent_cart_path[drv][i], config_path);
697 #ifdef USE_FLOPPY_DISK
698 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialDiskDir"), config.initial_floppy_disk_dir, config_path);
699 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
700 for(int i = 0; i < MAX_HISTORY; i++) {
701 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentDiskPath%d_%d"), drv + 1, i + 1), config.recent_floppy_disk_path[drv][i], config_path);
705 #ifdef USE_QUICK_DISK
706 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialQuickDiskDir"), config.initial_quick_disk_dir, config_path);
707 for(int drv = 0; drv < USE_QUICK_DISK; drv++) {
708 for(int i = 0; i < MAX_HISTORY; i++) {
709 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentQuickDiskPath%d_%d"), drv + 1, i + 1), config.recent_quick_disk_path[drv][i], config_path);
714 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialHardDiskDir"), config.initial_hard_disk_dir, config_path);
715 for(int drv = 0; drv < USE_HARD_DISK; drv++) {
716 for(int i = 0; i < MAX_HISTORY; i++) {
717 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentHardDiskPath%d_%d"), drv + 1, i + 1), config.recent_hard_disk_path[drv][i], config_path);
719 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("LastHardDiskPath%d"), drv + 1), config.last_hard_disk_path[drv], config_path);
723 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialTapeDir"), config.initial_tape_dir, config_path);
724 for(int drv = 0; drv < USE_TAPE; drv++) {
725 for(int i = 0; i < MAX_HISTORY; i++) {
726 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentTapePath%d_%d"), drv + 1, i + 1), config.recent_tape_path[drv][i], config_path);
730 #ifdef USE_COMPACT_DISC
731 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialCompactDiscDir"), config.initial_compact_disc_dir, config_path);
732 for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
733 for(int i = 0; i < MAX_HISTORY; i++) {
734 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentCompactDiscPath%d_%d"), drv + 1, i + 1), config.recent_compact_disc_path[drv][i], config_path);
740 #ifdef USE_LASER_DISC
741 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialLaserDiscDir"), config.initial_laser_disc_dir, config_path);
742 for(int drv = 0; drv < USE_LASER_DISC; drv++) {
743 for(int i = 0; i < MAX_HISTORY; i++) {
744 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentLaserDiscPath%d_%d"), drv + 1, i + 1), config.recent_laser_disc_path[drv][i], config_path);
748 #ifdef USE_BINARY_FILE
749 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialBinaryDir"), config.initial_binary_dir, config_path);
750 for(int drv = 0; drv < USE_BINARY_FILE; drv++) {
751 for(int i = 0; i < MAX_HISTORY; i++) {
752 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentBinaryPath%d_%d"), drv + 1, i + 1), config.recent_binary_path[drv][i], config_path);
757 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialBubbleDir"), config.initial_bubble_casette_dir, config_path);
758 for(int drv = 0; drv < USE_BUBBLE; drv++) {
759 for(int i = 0; i < MAX_HISTORY; i++) {
760 MyWritePrivateProfileString(_T("RecentFiles"), create_string(_T("RecentBubblePath%d_%d"), drv + 1, i + 1), config.recent_bubble_casette_path[drv][i], config_path);
766 #ifndef ONE_BOARD_MICRO_COMPUTER
767 MyWritePrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
768 MyWritePrivateProfileInt(_T("Screen"), _T("WindowStretchType"), config.window_stretch_type, config_path);
769 MyWritePrivateProfileInt(_T("Screen"), _T("FullScreenStretchType"), config.fullscreen_stretch_type, config_path);
770 // #ifdef USE_SCREEN_ROTATE
771 MyWritePrivateProfileInt(_T("Screen"), _T("RotateType"), config.rotate_type, config_path);
776 #ifdef USE_SCREEN_FILTER
777 MyWritePrivateProfileInt(_T("Screen"), _T("FilterType"), config.filter_type, config_path);
781 MyWritePrivateProfileInt(_T("Sound"), _T("Frequency"), config.sound_frequency, config_path);
782 MyWritePrivateProfileInt(_T("Sound"), _T("Latency"), config.sound_latency, config_path);
783 MyWritePrivateProfileBool(_T("Sound"), _T("StrictRendering"), config.sound_strict_rendering, config_path);
784 MyWritePrivateProfileInt(_T("Sound"), _T("DeviceNumber"), config.sound_device_num, config_path);
785 #ifdef USE_FLOPPY_DISK
786 MyWritePrivateProfileBool(_T("Sound"), _T("NoiseFDD"), config.sound_noise_fdd, config_path);
789 MyWritePrivateProfileBool(_T("Sound"), _T("NoiseCMT"), config.sound_noise_cmt, config_path);
790 MyWritePrivateProfileBool(_T("Sound"), _T("PlayTape"), config.sound_play_tape, config_path);
792 #ifdef USE_COMPACT_DISC
793 for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
794 MyWritePrivateProfileBool(_T("Sound"), create_string(_T("SwapCDByteOrder%d"), drv + 1), config.swap_audio_byteorder[drv], config_path);
797 #ifdef USE_SOUND_VOLUME
798 for(int i = 0; i < USE_SOUND_VOLUME; i++) {
799 MyWritePrivateProfileInt(_T("Sound"), create_string(_T("VolumeLeft%d"), i + 1), config.sound_volume_l[i], config_path);
800 MyWritePrivateProfileInt(_T("Sound"), create_string(_T("VolumeRight%d"), i + 1), config.sound_volume_r[i], config_path);
803 #if defined(_WIN32) && !defined(_USE_QT)
804 MyWritePrivateProfileString(_T("Sound"), _T("YM2151GenDll"), config.mame2151_dll_path, config_path);
805 MyWritePrivateProfileString(_T("Sound"), _T("YM2608GenDll"), config.mame2608_dll_path, config_path);
810 for(int i = 0; i < 4; i++) {
811 for(int j = 0; j < 16; j++) {
812 MyWritePrivateProfileInt(_T("Input"), create_string(_T("JoyButtonsEx%d_%d"), i + 1, j + 1), config.joy_buttons[i][j], config_path);
815 MyWritePrivateProfileBool(_T("Input"), _T("UseJoyToKey"), config.use_joy_to_key, config_path);
816 MyWritePrivateProfileInt(_T("Input"), _T("JoyToKeyType"), config.joy_to_key_type, config_path);
817 MyWritePrivateProfileBool(_T("Input"), _T("JoyToKeyNumPad5"), config.joy_to_key_numpad5, config_path);
818 for(int i = 0; i < 16; i++) {
819 MyWritePrivateProfileInt(_T("Input"), create_string(_T("JoyToKeyButtons%d"), i + 1), config.joy_to_key_buttons[i], config_path);
824 #ifdef USE_FLOPPY_DISK
825 MyWritePrivateProfileInt(_T("Debug"), _T("SpecialDebugFDC"), config.special_debug_fdc, config_path);
827 MyWritePrivateProfileBool(_T("Debug"), _T("PrintCPUStatistics"), config.print_statistics, config_path);
830 MyWritePrivateProfileString(_T("Printer"), _T("PrinterDll"), config.printer_dll_path, config_path);
835 #if defined(_WIN32) && !defined(_USE_QT)
836 #ifndef ONE_BOARD_MICRO_COMPUTER
837 MyWritePrivateProfileBool(_T("Win32"), _T("UseDirect3D9"), config.use_d3d9, config_path);
838 MyWritePrivateProfileBool(_T("Win32"), _T("WaitVSync"), config.wait_vsync, config_path);
840 MyWritePrivateProfileBool(_T("Win32"), _T("UseDirectInput"), config.use_dinput, config_path);
841 MyWritePrivateProfileBool(_T("Win32"), _T("DisableDwm"), config.disable_dwm, config_path);
842 MyWritePrivateProfileBool(_T("Win32"), _T("ShowStatusBar"), config.show_status_bar, config_path);
845 MyWritePrivateProfileBool(_T("Qt"), _T("UseSeparateThreadDraw"), config.use_separate_thread_draw, config_path);
846 MyWritePrivateProfileBool(_T("Qt"), _T("UseOSDVirtualMedia"), config.use_osd_virtual_media, config_path);
847 MyWritePrivateProfileBool(_T("Qt"), _T("UseOpenGLScanLine"), config.use_opengl_scanline, config_path);
848 MyWritePrivateProfileBool(_T("Qt"), _T("OpenGLScanLineVert"), config.opengl_scanline_vert, config_path);;
849 MyWritePrivateProfileBool(_T("Qt"), _T("OpenGLScanLineHoriz"), config.opengl_scanline_horiz, config_path);;
850 MyWritePrivateProfileBool(_T("Qt"), _T("UseOpenGLFilters"), config.use_opengl_filters, config_path);
851 MyWritePrivateProfileInt(_T("Qt"), _T("OpenGLFilterNum"), config.opengl_filter_num, config_path);
852 MyWritePrivateProfileInt(_T("Qt"), _T("RenderType"), config.rendering_type, config_path);
853 MyWritePrivateProfileInt(_T("Qt"), _T("RenderPlatform"), config.render_platform, config_path);
854 MyWritePrivateProfileInt(_T("Qt"), _T("RenderMajorVersion"), config.render_major_version, config_path);
855 MyWritePrivateProfileInt(_T("Qt"), _T("RenderMinorVersion"), config.render_minor_version, config_path);
857 MyWritePrivateProfileInt(_T("Qt"), _T("GeneralSoundLevel"), config.general_sound_level, config_path);
858 MyWritePrivateProfileBool(_T("Qt"), _T("FocusWithClick"), config.focus_with_click, config_path);
861 MyWritePrivateProfileBool(_T("Qt"), _T("SwapKanjiPause"), config.swap_kanji_pause, config_path);
862 MyWritePrivateProfileInt(_T("Qt"), _T("CursorAsTenKey"), config.cursor_as_ten_key, config_path);
863 MyWritePrivateProfileBool(_T("Qt"), _T("NumpadEnterAsFullKey"), config.numpad_enter_as_fullkey, config_path);
864 MyWritePrivateProfileInt(_T("Qt"), _T("HostKeyboardType"), config.host_keyboard_type, config_path);
865 MyWritePrivateProfileString(_T("Qt"), _T("DebugWindowFont"), config.debugwindow_font, config_path);
866 MyWritePrivateProfileInt(_T("Qt"), _T("DebugWindowWidth"), config.debugwindow_width, config_path);
867 MyWritePrivateProfileInt(_T("Qt"), _T("DebugWindowHeight"), config.debugwindow_height, config_path);
868 MyWritePrivateProfileString(_T("Qt"), _T("LogWindowFont"), config.logwindow_font, config_path);
869 MyWritePrivateProfileInt(_T("Qt"), _T("LogWindowWidth"), config.logwindow_width, config_path);
870 MyWritePrivateProfileInt(_T("Qt"), _T("LogWindowHeight"), config.logwindow_height, config_path);
872 for(i = 0; i < 16; i++) {
874 my_stprintf_s(name, 255, _T("AssignedJoystick%d"), i + 1);
875 MyWritePrivateProfileString(_T("Qt"), (const _TCHAR *)name,
876 config.assigned_joystick_name[i], config_path);
878 MyWritePrivateProfileInt(_T("Qt"), _T("VideoWidth"), config.video_width, config_path);
879 MyWritePrivateProfileInt(_T("Qt"), _T("VideoHeight"), config.video_height, config_path);
880 MyWritePrivateProfileInt(_T("Qt"), _T("VideoCodecType"), config.video_codec_type, config_path);
881 MyWritePrivateProfileInt(_T("Qt"), _T("AudioCodecType"), config.audio_codec_type, config_path);
883 MyWritePrivateProfileInt(_T("Qt"), _T("H264Bitrate"), config.video_h264_bitrate, config_path);
884 MyWritePrivateProfileInt(_T("Qt"), _T("H264BFrames"), config.video_h264_bframes, config_path);
885 MyWritePrivateProfileInt(_T("Qt"), _T("H264BAdapt"), config.video_h264_b_adapt, config_path);
886 MyWritePrivateProfileInt(_T("Qt"), _T("H264MinQ"), config.video_h264_minq, config_path);
887 MyWritePrivateProfileInt(_T("Qt"), _T("H264MaxQ"), config.video_h264_maxq, config_path);
888 MyWritePrivateProfileInt(_T("Qt"), _T("H264Subme"), config.video_h264_subme, config_path);
890 MyWritePrivateProfileInt(_T("Qt"), _T("MPEG4Bitrate"), config.video_mpeg4_bitrate, config_path);
891 MyWritePrivateProfileInt(_T("Qt"), _T("MPEG4BFrames"), config.video_mpeg4_bframes, config_path);
892 MyWritePrivateProfileInt(_T("Qt"), _T("MPEG4MinQ"), config.video_mpeg4_minq, config_path);
893 MyWritePrivateProfileInt(_T("Qt"), _T("MPEG4MaxQ"), config.video_mpeg4_maxq, config_path);
895 MyWritePrivateProfileInt(_T("Qt"), _T("VideoThreads"), config.video_threads, config_path);
896 MyWritePrivateProfileInt(_T("Qt"), _T("AudioBitrate"), config.audio_bitrate, config_path);
897 MyWritePrivateProfileInt(_T("Qt"), _T("VideoFramerate"), config.video_frame_rate, config_path);
899 MyWritePrivateProfileBool(_T("Qt"), _T("WriteToSyslog"), config.log_to_syslog, config_path);
900 MyWritePrivateProfileBool(_T("Qt"), _T("WriteToConsole"), config.log_to_console, config_path);
902 for(int ii = 0; ii < (CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1) ; ii++) {
905 for(int jj = 0; jj < 8; jj++) {
907 if(config.dev_log_to_syslog[ii][jj]) flags |= 0x0001;
909 MyWritePrivateProfileInt(_T("Qt"), create_string(_T("SyslogEnabled%d"), ii), flags, config_path);
912 for(int jj = 0; jj < 8; jj++) {
914 if(config.dev_log_to_console[ii][jj]) flags |= 0x0001;
916 MyWritePrivateProfileInt(_T("Qt"), create_string(_T("ConsoleLogEnabled%d"), ii), flags, config_path);
919 for(int jj = 0; jj < 8; jj++) {
921 if(config.dev_log_recording[ii][jj]) flags |= 0x0001;
923 MyWritePrivateProfileInt(_T("Qt"), create_string(_T("RecordLogEnabled%d"), ii), flags, config_path);
925 MyWritePrivateProfileBool(_T("Qt"), _T("StateLogToConsole"), config.state_log_to_console, config_path);
926 MyWritePrivateProfileBool(_T("Qt"), _T("StateLogToSyslog"), config.state_log_to_syslog, config_path);
927 MyWritePrivateProfileBool(_T("Qt"), _T("StateLogToRecording"), config.state_log_to_recording, config_path);
929 MyWritePrivateProfileInt(_T("Qt"), _T("UiVirtualMediaPosition"), config.virtual_media_position, config_path);
930 //csp_logger->debug_log(CSP_LOG_INFO, CSP_LOG_TYPE_GENERAL, "Write config done.");
934 #define STATE_VERSION 6
936 bool process_config_state(void *f, bool loading)
938 FILEIO *state_fio = (FILEIO *)f;
940 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
944 state_fio->StateValue(config.boot_mode);
947 state_fio->StateValue(config.cpu_type);
950 state_fio->StateValue(config.dipswitch);
952 #ifdef USE_DEVICE_TYPE
953 state_fio->StateValue(config.device_type);
955 #ifdef USE_DRIVE_TYPE
956 state_fio->StateValue(config.drive_type);
958 #ifdef USE_KEYBOARD_TYPE
959 state_fio->StateValue(config.keyboard_type);
961 #ifdef USE_MOUSE_TYPE
962 state_fio->StateValue(config.mouse_type);
964 #ifdef USE_JOYSTICK_TYPE
965 state_fio->StateValue(config.joystick_type);
967 #ifdef USE_SOUND_TYPE
968 state_fio->StateValue(config.sound_type);
970 #ifdef USE_MONITOR_TYPE
971 state_fio->StateValue(config.monitor_type);
973 #ifdef USE_PRINTER_TYPE
974 state_fio->StateValue(config.printer_type);
976 #ifdef USE_FLOPPY_DISK
977 for(int drv = 0; drv < USE_FLOPPY_DISK; drv++) {
978 state_fio->StateValue(config.correct_disk_timing[drv]);
979 state_fio->StateValue(config.ignore_disk_crc[drv]);
982 state_fio->StateValue(config.sound_frequency);
983 state_fio->StateValue(config.sound_latency);