2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
11 #include <agar/core.h>
15 #include "agar_logger.h"
22 #include "agar_logger.h"
24 # if defined(Q_OS_WIN)
34 #if defined(_USE_AGAR)
35 #include "agar_main.h"
41 #define CONFIG_NAME "conf"
44 //extern _TCHAR* get_parent_dir(_TCHAR* file);
45 BOOL MyWritePrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, int Value, LPCTSTR lpFileName)
48 my_stprintf_s(String, 32, _T("%d"), Value);
49 return MyWritePrivateProfileString(lpAppName, lpKeyName, String, lpFileName);
52 BOOL MyWritePrivateProfileBool(LPCTSTR lpAppName, LPCTSTR lpKeyName, bool Value, LPCTSTR lpFileName)
55 my_stprintf_s(String, 32, _T("%d"), Value ? 1 : 0);
56 return MyWritePrivateProfileString(lpAppName, lpKeyName, String, lpFileName);
59 bool MyGetPrivateProfileBool(LPCTSTR lpAppName, LPCTSTR lpKeyName, bool bDefault, LPCTSTR lpFileName)
61 return (MyGetPrivateProfileInt(lpAppName, lpKeyName, bDefault ? 1 : 0, lpFileName) != 0);
68 memset(&config, 0, sizeof(config_t));
69 config.window_mode = 1;
71 config.use_direct_input = true;
72 config.disable_dwm = false;
74 config.swap_joy_buttons = false;
76 #ifndef ONE_BOARD_MICRO_COMPUTER
78 config.use_d3d9 = true;
80 config.stretch_type = 1; // Stretch (Aspect)
82 config.sound_frequency = 6; // 48KHz
83 config.sound_latency = 1; // 100msec
86 config.wave_shaper = true;
87 config.direct_load_mzt = true;
88 config.baud_high = true;
90 #if defined(USE_BOOT_MODE) && defined(BOOT_MODE_DEFAULT)
91 config.boot_mode = BOOT_MODE_DEFAULT;
93 #if defined(USE_CPU_TYPE) && defined(CPU_TYPE_DEFAULT)
94 config.cpu_type = CPU_TYPE_DEFAULT;
96 #if defined(USE_DIPSWITCH) && defined(DIPSWITCH_DEFAULT)
97 config.dipswitch = DIPSWITCH_DEFAULT;
99 #if defined(USE_DEVICE_TYPE) && defined(DEVICE_TYPE_DEFAULT)
100 config.device_type = DEVICE_TYPE_DEFAULT;
103 for(int drv = 0; drv < MAX_FD; drv++) {
104 #if defined(CORRECT_DISK_TIMING_DEFAULT)
105 config.correct_disk_timing[drv] = CORRECT_DISK_TIMING_DEFAULT;
107 config.correct_disk_timing[drv] = true;
109 #if defined(IGNORE_DISK_CRC_DEFAULT)
110 config.ignore_disk_crc[drv] = IGNORE_DISK_CRC_DEFAULT;
113 #elif defined(USE_FD1)
114 for(int drv = 0; drv < MAX_FD; drv++) {
115 config.ignore_disk_crc[drv] = false;
118 #if defined(USE_SOUND_DEVICE_TYPE) && defined(SOUND_DEVICE_TYPE_DEFAULT)
119 config.sound_device_type = SOUND_DEVICE_TYPE_DEFAULT;
121 #if defined(USE_PRINTER) && defined(PRINTER_DEVICE_TYPE_DEFAULT)
122 config.printer_device_type = PRINTER_DEVICE_TYPE_DEFAULT;
128 // 3 = WHG + OPN (+PSG)
130 // 5 = THG + OPN (+PSG)
131 // 6 = THG + WHG (+PSG)
132 // 7 = THG + WHG + OPN (+PSG)
134 config.sound_device_type = 0; // WITHOUT PSG?
135 #elif defined(_FM7) || defined(_FMNEW7) || defined(_FM77) || defined(_FM77L4) || defined(_FM77L2)
136 config.sound_device_type = 0; // PSG ONLY
137 #elif defined(_FM77AV) || defined(_FM77AV20) || defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
138 config.sound_device_type = 1; // OPN
140 config.multiple_speakers = false;
141 config.general_sound_level = 0;
144 config.use_opengl_scanline = false;
145 config.opengl_scanline_vert = false;
146 config.opengl_scanline_horiz = false;
147 config.use_opengl_filters = false;
148 config.opengl_filter_num = 0;
150 #ifdef USE_MULTIPLE_SOUNDCARDS
153 for(ii = 0; ii < USE_MULTIPLE_SOUNDCARDS; ii++) {
154 config.sound_device_level[ii] = 0;
160 void load_config(const _TCHAR *config_path)
168 config.boot_mode = MyGetPrivateProfileInt(_T("Control"), _T("BootMode"), config.boot_mode, config_path);
171 config.cpu_type = MyGetPrivateProfileInt(_T("Control"), _T("CPUType"), config.cpu_type, config_path);
174 config.dipswitch = MyGetPrivateProfileInt(_T("Control"), _T("DipSwitch"), config.dipswitch, config_path);
176 #ifdef USE_DEVICE_TYPE
177 config.device_type = MyGetPrivateProfileInt(_T("Control"), _T("DeviceType"), config.device_type, config_path);
179 #ifdef USE_DRIVE_TYPE
180 config.drive_type = MyGetPrivateProfileInt(_T("Control"), _T("DriveType"), config.drive_type, config_path);
185 for(drv = 0; drv < MAX_FD; drv++) {
186 memset(name, 0x00, sizeof(name));
187 my_stprintf_s(name, 64, _T("CorrectDiskTiming%d"), drv + 1);
188 config.correct_disk_timing[drv] = MyGetPrivateProfileBool(_T("Control"), (const _TCHAR *)name,
189 config.correct_disk_timing[drv], config_path);
190 my_stprintf_s(name, 64, _T("IgnoreDiskCRC%d"), drv + 1);
191 config.ignore_disk_crc[drv] = MyGetPrivateProfileBool(_T("Control"), (const _TCHAR *)name,
192 config.ignore_disk_crc[drv], config_path);
198 config.tape_sound = MyGetPrivateProfileBool(_T("Control"), _T("TapeSound"), config.tape_sound, config_path);
199 config.wave_shaper = MyGetPrivateProfileBool(_T("Control"), _T("WaveShaper"), config.wave_shaper, config_path);
200 config.direct_load_mzt = MyGetPrivateProfileBool(_T("Control"), _T("DirectLoadMZT"), config.direct_load_mzt, config_path);
201 config.baud_high = MyGetPrivateProfileBool(_T("Control"), _T("BaudHigh"), config.baud_high, config_path);
206 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialCartDir"), _T(""), config.initial_cart_dir, _MAX_PATH, config_path);
207 for(drv = 0; drv < MAX_CART; drv++) {
208 for(i = 0; i < MAX_HISTORY; i++) {
210 my_stprintf_s(name, 64, _T("RecentCartPath%d_%d"), drv + 1, i + 1);
211 MyGetPrivateProfileString(_T("RecentFiles"), name, _T(""),
212 config.recent_cart_path[drv][i], _MAX_PATH, config_path);
217 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialDiskDir"), _T(""),
218 config.initial_disk_dir, _MAX_PATH, config_path);
219 // get_parent_dir(config.initial_disk_dir);
220 for(drv = 0; drv < MAX_FD; drv++) {
221 for(i = 0; i < MAX_HISTORY; i++) {
223 my_stprintf_s(name, 64, _T("RecentDiskPath%d_%d"), drv + 1, i + 1);
224 MyGetPrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
225 _T(""), config.recent_disk_path[drv][i], _MAX_PATH, config_path);
230 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialQuickDiskDir"),
231 _T(""), config.initial_quickdisk_dir, _MAX_PATH, config_path);
232 for(drv = 0; drv < MAX_QD; drv++) {
233 for(i = 0; i < MAX_HISTORY; i++) {
235 my_stprintf_s(name, 64, _T("RecentQuickDiskPath%d_%d"), drv + 1, i + 1);
236 MyGetPrivateProfileString(_T("RecentFiles"), name, _T(""),
237 config.recent_quickdisk_path[drv][i], _MAX_PATH, config_path);
243 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialTapeDir"), _T(""),
244 config.initial_tape_dir, _MAX_PATH, config_path);
245 for(i = 0; i < MAX_HISTORY; i++) {
247 my_stprintf_s(name, 64, _T("RecentTapePath1_%d"), i + 1);
248 MyGetPrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name, _T(""),
249 config.recent_tape_path[i], _MAX_PATH, config_path);
253 #ifdef USE_LASER_DISC
254 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialLaserDiscDir"), _T(""),
255 config.initial_laser_disc_dir, _MAX_PATH, config_path);
256 for(int i = 0; i < MAX_HISTORY; i++) {
258 my_stprintf_s(name, 64, _T("RecentLaserDiscPath1_%d"), i + 1);
259 MyGetPrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name, _T(""),
260 config.recent_laser_disc_path[i], _MAX_PATH, config_path);
263 #ifdef USE_BINARY_FILE1
264 MyGetPrivateProfileString(_T("RecentFiles"), _T("InitialBinaryDir"), _T(""),
265 config.initial_binary_dir, _MAX_PATH, config_path);
266 for(drv = 0; drv < MAX_BINARY; drv++) {
267 for(i = 0; i < MAX_HISTORY; i++) {
269 my_stprintf_s(name, 64, _T("RecentBinaryPath%d_%d"), drv + 1, i + 1);
270 MyGetPrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name, _T(""),
271 config.recent_binary_path[drv][i], _MAX_PATH, config_path);
277 #ifndef ONE_BOARD_MICRO_COMPUTER
278 config.window_mode = MyGetPrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
280 config.use_d3d9 = MyGetPrivateProfileBool(_T("Screen"), _T("UseD3D9"), config.use_d3d9, config_path);
281 config.wait_vsync = MyGetPrivateProfileBool(_T("Screen"), _T("WaitVSync"), config.wait_vsync, config_path);
283 config.stretch_type = MyGetPrivateProfileInt(_T("Screen"), _T("StretchType"), config.stretch_type, config_path);
285 config.window_mode = MyGetPrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
287 #ifdef USE_MONITOR_TYPE
288 config.monitor_type = MyGetPrivateProfileInt(_T("Screen"), _T("MonitorType"), config.monitor_type, config_path);
290 #ifdef USE_CRT_FILTER
291 config.crt_filter = MyGetPrivateProfileBool(_T("Screen"), _T("CRTFilter"), config.crt_filter, config_path);
294 config.scan_line = MyGetPrivateProfileBool(_T("Screen"), _T("ScanLine"), config.scan_line, config_path);
297 #ifdef USE_SCREEN_ROTATE
298 config.rotate_type = MyGetPrivateProfileInt(_T("Screen"), _T("RotateType"), config.rotate_type, config_path);
301 config.use_opengl_scanline = MyGetPrivateProfileBool(_T("Screen"), _T("UseOpenGLScanLine"),
302 config.use_opengl_scanline, config_path);
303 config.opengl_scanline_vert = MyGetPrivateProfileBool(_T("Screen"), _T("OpenGLScanLineVert"),
304 config.opengl_scanline_vert, config_path);;
305 config.opengl_scanline_horiz = MyGetPrivateProfileBool(_T("Screen"), _T("OpenGLScanLineHoriz"),
306 config.opengl_scanline_horiz, config_path);;
307 config.use_opengl_filters = MyGetPrivateProfileBool(_T("Screen"), _T("UseOpenGLFilters"),
308 config.use_opengl_filters, config_path);
309 config.opengl_filter_num = MyGetPrivateProfileInt(_T("Screen"), _T("OpenGLFilterNum"),
310 config.opengl_filter_num, config_path);
313 config.sound_frequency = MyGetPrivateProfileInt(_T("Sound"), _T("Frequency"), config.sound_frequency, config_path);
314 config.sound_latency = MyGetPrivateProfileInt(_T("Sound"), _T("Latency"), config.sound_latency, config_path);
315 #ifdef USE_SOUND_DEVICE_TYPE
316 config.sound_device_type = MyGetPrivateProfileInt(_T("Sound"), _T("DeviceType"), config.sound_device_type, config_path);
318 #if !defined(_USE_QT)
319 MyGetPrivateProfileString(_T("Sound"), _T("FMGenDll"), _T("mamefm.dll"), config.fmgen_dll_path, _MAX_PATH, config_path);
322 config.multiple_speakers = MyGetPrivateProfileBool(_T("Sound"), _T("MultipleSpeakers"),
323 config.multiple_speakers, config_path);
324 config.general_sound_level = MyGetPrivateProfileInt(_T("Sound"), _T("GeneralSoundLevel"),
325 config.general_sound_level, config_path);
326 #ifdef USE_MULTIPLE_SOUNDCARDS
330 for(ii = 0; ii < USE_MULTIPLE_SOUNDCARDS; ii++) {
331 memset(_tag, 0x00, sizeof(_tag));
332 my_stprintf_s(_tag, 64, _T("DeviceVolumeLevel_%d"), ii + 1);
333 config.sound_device_level[ii] = MyGetPrivateProfileInt(_T("Sound"), (const _TCHAR *)_tag, config.sound_device_level[ii], config_path);
338 config.use_direct_input = MyGetPrivateProfileBool(_T("Input"), _T("UseDirectInput"), config.use_direct_input, config_path);
339 config.disable_dwm = MyGetPrivateProfileBool(_T("Input"), _T("DisableDwm"), config.disable_dwm, config_path);
341 config.swap_joy_buttons = MyGetPrivateProfileBool(_T("Input"), _T("SwapJoyButtons"), config.swap_joy_buttons, config_path);
343 for(i = 0; i < 16; i++) {
345 my_stprintf_s(name, 256, _T("AssignedJoystick"), i + 1);
346 MyGetPrivateProfileString(_T("Input"), (const _TCHAR *)name, _T(""),
347 config.assigned_joystick_name[i], 256, config_path);
353 config.printer_device_type = MyGetPrivateProfileInt(_T("Printer"), _T("DeviceType"), config.printer_device_type, config_path);
354 MyGetPrivateProfileString(_T("Printer"), _T("PrinterDll"), _T("printer.dll"), config.printer_dll_path, _MAX_PATH, config_path);
356 #if defined(_USE_QT) && !defined(Q_OS_WIN)
357 AGAR_DebugLog(AGAR_LOG_INFO, "Read Done.");
361 void save_config(const _TCHAR *config_path)
364 #if !defined(_MSC_VER)
366 FILEIO *pt = new FILEIO;
367 if(pt->Fopen(config_path, FILEIO_WRITE_ASCII) != true) {
377 # ifdef USE_BOOT_MODE
378 MyWritePrivateProfileInt(_T("Control"), _T("BootMode"), config.boot_mode, config_path);
381 MyWritePrivateProfileInt(_T("Control"), _T("CPUType"), config.cpu_type, config_path);
384 MyWritePrivateProfileInt(_T("Control"), _T("DipSwitch"), config.dipswitch, config_path);
386 #ifdef USE_DEVICE_TYPE
387 MyWritePrivateProfileInt(_T("Control"), _T("DeviceType"), config.device_type, config_path);
389 #ifdef USE_DRIVE_TYPE
390 MyWritePrivateProfileInt(_T("Control"), _T("DriveType"), config.drive_type, config_path);
395 for(drv = 0; drv < MAX_FD; drv++) {
396 memset(name, 0x00, sizeof(name));
397 my_stprintf_s(name, 64, _T("CorrectDiskTiming%d"), drv + 1);
398 MyWritePrivateProfileBool(_T("Control"), (const _TCHAR *)name, config.correct_disk_timing[drv], config_path);
399 my_stprintf_s(name, 64, _T("IgnoreDiskCRC%d"), drv + 1);
400 MyWritePrivateProfileBool(_T("Control"), (const _TCHAR *)name, config.ignore_disk_crc[drv], config_path);
406 MyWritePrivateProfileBool(_T("Control"), _T("TapeSound"), config.tape_sound, config_path);
407 MyWritePrivateProfileBool(_T("Control"), _T("WaveShaper"), config.wave_shaper, config_path);
408 MyWritePrivateProfileBool(_T("Control"), _T("DirectLoadMZT"), config.direct_load_mzt, config_path);
409 MyWritePrivateProfileBool(_T("Control"), _T("BaudHigh"), config.baud_high, config_path);
414 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialCartDir"), config.initial_cart_dir, config_path);
415 for(drv = 0; drv < MAX_CART; drv++) {
416 for(i = 0; i < MAX_HISTORY; i++) {
418 my_stprintf_s(name, 64, _T("RecentCartPath%d_%d"), drv + 1, i + 1);
419 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name, config.recent_cart_path[drv][i], config_path);
424 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialDiskDir"), config.initial_disk_dir, config_path);
425 for(drv = 0; drv < MAX_FD; drv++) {
426 for(i = 0; i < MAX_HISTORY; i++) {
428 my_stprintf_s(name, 64, _T("RecentDiskPath%d_%d"), drv + 1, i + 1);
429 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
430 config.recent_disk_path[drv][i], config_path);
435 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialQuickDiskDir"),
436 config.initial_quickdisk_dir, config_path);
437 for(drv = 0; drv < MAX_QD; drv++) {
438 for(i = 0; i < MAX_HISTORY; i++) {
440 my_stprintf_s(name, 64, _T("RecentQuickDiskPath%d_%d"), drv + 1, i + 1);
441 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
442 config.recent_quickdisk_path[drv][i], config_path);
447 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialTapeDir"), config.initial_tape_dir, config_path);
448 for(i = 0; i < MAX_HISTORY; i++) {
450 my_stprintf_s(name, 64, _T("RecentTapePath1_%d"), i + 1);
451 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
452 config.recent_tape_path[i], config_path);
455 #ifdef USE_LASER_DISC
456 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialLaserDiscDir"), config.initial_laser_disc_dir, config_path);
457 for(int i = 0; i < MAX_HISTORY; i++) {
459 my_stprintf_s(name, 64, _T("RecentLaserDiscPath1_%d"), i + 1);
460 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
461 config.recent_laser_disc_path[i], config_path);
464 #ifdef USE_BINARY_FILE1
465 MyWritePrivateProfileString(_T("RecentFiles"), _T("InitialBinaryDir"), config.initial_binary_dir, config_path);
466 for(drv = 0; drv < MAX_BINARY; drv++) {
467 for(i = 0; i < MAX_HISTORY; i++) {
469 my_stprintf_s(name, 64, _T("RecentBinaryPath%d_%d"), drv + 1, i + 1);
470 MyWritePrivateProfileString(_T("RecentFiles"), (const _TCHAR *)name,
471 config.recent_binary_path[drv][i], config_path);
477 #ifndef ONE_BOARD_MICRO_COMPUTER
478 MyWritePrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
480 MyWritePrivateProfileBool(_T("Screen"), _T("UseD3D9"), config.use_d3d9, config_path);
481 MyWritePrivateProfileBool(_T("Screen"), _T("WaitVSync"), config.wait_vsync, config_path);
483 MyWritePrivateProfileInt(_T("Screen"), _T("StretchType"), config.stretch_type, config_path);
485 MyWritePrivateProfileInt(_T("Screen"), _T("WindowMode"), config.window_mode, config_path);
487 #ifdef USE_MONITOR_TYPE
488 MyWritePrivateProfileInt(_T("Screen"), _T("MonitorType"), config.monitor_type, config_path);
490 #ifdef USE_CRT_FILTER
491 MyWritePrivateProfileBool(_T("Screen"), _T("CRTFilter"), config.crt_filter, config_path);
494 MyWritePrivateProfileBool(_T("Screen"), _T("ScanLine"), config.scan_line, config_path);
496 #ifdef USE_SCREEN_ROTATE
497 MyWritePrivateProfileInt(_T("Screen"), _T("RotateType"), config.rotate_type, config_path);
500 MyWritePrivateProfileBool(_T("Screen"), _T("UseOpenGLScanLine"),
501 config.use_opengl_scanline, config_path);
502 MyWritePrivateProfileBool(_T("Screen"), _T("OpenGLScanLineVert"),
503 config.opengl_scanline_vert, config_path);;
504 MyWritePrivateProfileBool(_T("Screen"), _T("OpenGLScanLineHoriz"),
505 config.opengl_scanline_horiz, config_path);;
506 MyWritePrivateProfileBool(_T("Screen"), _T("UseOpenGLFilters"),
507 config.use_opengl_filters, config_path);
508 MyWritePrivateProfileInt(_T("Screen"), _T("OpenGLFilterNum"),
509 config.opengl_filter_num, config_path);
513 MyWritePrivateProfileInt(_T("Sound"), _T("Frequency"), config.sound_frequency, config_path);
514 MyWritePrivateProfileInt(_T("Sound"), _T("Latency"), config.sound_latency, config_path);
515 #ifdef USE_SOUND_DEVICE_TYPE
516 MyWritePrivateProfileInt(_T("Sound"), _T("DeviceType"), config.sound_device_type, config_path);
518 #if !defined(_USE_QT)
519 MyWritePrivateProfileString(_T("Sound"), _T("FMGenDll"), config.fmgen_dll_path, config_path);
521 MyWritePrivateProfileBool(_T("Sound"), _T("MultipleSpeakers"),
522 config.multiple_speakers, config_path);
523 MyWritePrivateProfileInt(_T("Sound"), _T("GeneralSoundLevel"),
524 config.general_sound_level, config_path);
525 #ifdef USE_MULTIPLE_SOUNDCARDS
529 for(ii = 0; ii < USE_MULTIPLE_SOUNDCARDS; ii++) {
530 memset(_tag, 0x00, sizeof(_tag));
531 my_stprintf_s(_tag, 64, _T("DeviceVolumeLevel_%d"), ii + 1);
532 MyWritePrivateProfileInt(_T("Sound"), (const _TCHAR *)_tag, config.sound_device_level[ii], config_path);
538 MyWritePrivateProfileBool(_T("Input"), _T("UseDirectInput"), config.use_direct_input, config_path);
539 MyWritePrivateProfileBool(_T("Input"), _T("DisableDwm"), config.disable_dwm, config_path);
541 MyWritePrivateProfileBool(_T("Input"), _T("SwapJoyButtons"), config.swap_joy_buttons, config_path);
543 for(i = 0; i < 16; i++) {
545 my_stprintf_s(name, 256, _T("AssignedJoystick%d"), i + 1);
546 MyWritePrivateProfileString(_T("Input"), (const _TCHAR *)name,
547 config.assigned_joystick_name[i], config_path);
553 MyWritePrivateProfileInt(_T("Printer"), _T("DeviceType"), config.printer_device_type, config_path);
555 #if defined(_USE_QT) && !defined(Q_OS_WIN)
556 AGAR_DebugLog(AGAR_LOG_INFO, "Write done.");
560 #define STATE_VERSION 4
562 void save_config_state(void *f)
564 FILEIO *state_fio = (FILEIO *)f;
567 state_fio->FputUint32(STATE_VERSION);
570 state_fio->FputInt32(config.boot_mode);
573 state_fio->FputInt32(config.cpu_type);
576 state_fio->FputUint32(config.dipswitch);
578 #ifdef USE_DEVICE_TYPE
579 state_fio->FputInt32(config.device_type);
581 #ifdef USE_DRIVE_TYPE
582 state_fio->FputInt32(config.drive_type);
585 for(int drv = 0; drv < MAX_FD; drv++) {
586 state_fio->FputBool(config.correct_disk_timing[drv]);
587 state_fio->FputBool(config.ignore_disk_crc[drv]);
589 // for(int drv = 0; drv < MAX_FD; drv++) {
590 // state_fio->FputBool(config.fdd_hack_fast_transfer[drv]);
593 #ifdef USE_MONITOR_TYPE
594 state_fio->FputInt32(config.monitor_type);
596 #ifdef USE_SOUND_DEVICE_TYPE
597 state_fio->FputInt32(config.sound_device_type);
600 state_fio->FputInt32(config.printer_device_type);
605 bool load_config_state(void *f)
607 FILEIO *state_fio = (FILEIO *)f;
609 if(state_fio->FgetUint32() != STATE_VERSION) {
613 config.boot_mode = state_fio->FgetInt32();
616 config.cpu_type = state_fio->FgetInt32();
619 config.dipswitch = state_fio->FgetUint32();
621 #ifdef USE_DEVICE_TYPE
622 config.device_type = state_fio->FgetInt32();
624 #ifdef USE_DRIVE_TYPE
625 config.drive_type = state_fio->FgetInt32();
628 for(int drv = 0; drv < MAX_FD; drv++) {
629 config.correct_disk_timing[drv] = state_fio->FgetBool();
630 config.ignore_disk_crc[drv] = state_fio->FgetBool();
632 // for(int drv = 0; drv < MAX_FD; drv++) {
633 // config.fdd_hack_fast_transfer[drv] = state_fio->FgetBool();
636 #ifdef USE_MONITOR_TYPE
637 config.monitor_type = state_fio->FgetInt32();
639 #ifdef USE_SOUND_DEVICE_TYPE
640 config.sound_device_type = state_fio->FgetInt32();
643 config.printer_device_type = state_fio->FgetInt32();