#ifndef _CONFIG_H_
#define _CONFIG_H_
-# if defined(_USE_AGAR) || defined(_USE_SDL)
-#include <sys/param.h>
-#include <agar/core.h>
-#ifndef _MAX_PATH
- #define _MAX_PATH AG_PATHNAME_MAX
-#endif
-# elif defined(_USE_QT)
-#include <sys/param.h>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-
-#ifndef _MAX_PATH
- #define _MAX_PATH 2048
-#endif
-#endif
-#include "vm/vm.h"
+#include "common.h"
+#include "vm/vm_template.h"
#include "fileio.h"
+#if defined(_USE_QT)
+#define USE_FIXED_CONFIG 1
+#include "qt/gui/csp_logger.h"
+#else
+ #if defined(USE_SHARED_DLL)
+ #define USE_FIXED_CONFIG 1
+ #endif
+#endif
-// LOG COMMAND
-#define EMU_LOG_CPU1 0x00000001
-#define EMU_LOG_CPU2 0x00000002
-#define EMU_LOG_CPU3 0x00000004
-#define EMU_LOG_CPU4 0x00000008
-#define EMU_LOG_FLOPPY 0x00000010
-#define EMU_LOG_CMT 0x00000020
-#define EMU_LOG_QD 0x00000040
-#define EMU_LOG_CART 0x00000080
-#define EMU_LOG_BINARY 0x00000100
-#define EMU_LOG_LASERDISC 0x00000200
-#define EMU_LOG_DISPLAY 0x00001000
-#define EMU_LOG_SOUND 0x00002000
-#define EMU_LOG_KEYBOARD 0x00004000
-#define EMU_LOG_IO 0x00008000
-#define EMU_LOG_MEMORY 0x00010000
-#define EMU_LOG_USR1 0x00020000
-#define EMU_LOG_USR2 0x00040000
-#define EMU_LOG_USR3 0x00080000
-#define EMU_LOG_USR4 0x00100000
-#define EMU_LOG_USR5 0x00200000
-#define EMU_LOG_USR6 0x00400000
-#define EMU_LOG_USR7 0x00800000
-#define EMU_LOG_USR8 0x01000000
-#define EMU_LOG_USR9 0x02000000
-#define EMU_LOG_USR10 0x04000000
-#define EMU_LOG_GUI 0x08000000
-#define EMU_LOG_DEBUG 0x10000000
-#define EMU_LOG_INFO 0x20000000
-#define EMU_LOG_WARNING 0x40000000
-#define EMU_LOG_GENERAL 0x80000000
+enum {
+ CONFIG_RENDER_TYPE_STD = 0,
+ CONFIG_RENDER_TYPE_TV,
+ CONFIG_RENDER_TYPE_END
+};
+enum {
+ CONFIG_RENDER_PLATFORM_OPENGL_MAIN = 0,
+ CONFIG_RENDER_PLATFORM_OPENGL_CORE = 1,
+ CONFIG_RENDER_PLATFORM_OPENGL_ES = 2,
+ CONFIG_RENDER_PLATFORM_QT3D = 8,
+ CONFIG_RENDER_PLATFORM_VULKAN = 16,
+ CONFIG_RENDER_PLATFORM_DIRECTDRAW = 24,
+ CONFIG_RENDER_PLATFORM_SDLFB = 25,
+ CONFIG_RENDER_PLATFORM_DIRECTX = 32,
+};
-#define MAX_HISTORY 8
+/*
+ * ToDo: Apply keyboard types for emulation.
+ */
+enum {
+ CONFIG_HOST_KEYBOARD_TYPE_AT_JP = 0x00000000,
+ CONFIG_HOST_KEYBOARD_TYPE_AT_EN = 0x00010000,
+ CONFIG_HOST_KEYBOARD_TYPE_AT_83 = 0x00030000,
+ CONFIG_HOST_KEYBOARD_TYPE_AT_84 = 0x00040000,
+ CONFIG_HOST_KEYBOARD_TYPE_AT_MISC = 0x00ff0000,
+ CONFIG_HOST_KEYBOARD_TYPE_PC98 = 0x00980000,
+ CONFIG_HOST_KEYBOARD_TYPE_MAC = 0x00fe0000,
+};
-#if defined(USE_CART2)
-#define MAX_CART 2
-#elif defined(USE_CART1)
-#define MAX_CART 1
-#endif
+enum {
+ CONFIG_HOST_KEYBOARD_AT_106JP = CONFIG_HOST_KEYBOARD_TYPE_AT_JP + 106,
+ CONFIG_HOST_KEYBOARD_AT_101 = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 101,
+ CONFIG_HOST_KEYBOARD_AT_102 = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 102,
+ CONFIG_HOST_KEYBOARD_AT_104 = CONFIG_HOST_KEYBOARD_TYPE_AT_EN + 104,
+ CONFIG_HOST_KEYBOARD_AT_109JP = CONFIG_HOST_KEYBOARD_TYPE_AT_JP + 109,
+ CONFIG_HOST_KEYBOARD_AT_83 = CONFIG_HOST_KEYBOARD_TYPE_AT_83 + 83,
+ CONFIG_HOST_KEYBOARD_AT_84 = CONFIG_HOST_KEYBOARD_TYPE_AT_84 + 84,
+ CONFIG_HOST_KEYBOARD_AT_MISC = CONFIG_HOST_KEYBOARD_TYPE_AT_MISC,
+ CONFIG_HOST_KEYBOARD_MAC_US = CONFIG_HOST_KEYBOARD_TYPE_MAC + 0,
+ CONFIG_HOST_KEYBOARD_MAC_JP = CONFIG_HOST_KEYBOARD_TYPE_MAC + 1,
+ CONFIG_HOST_KEYBOARD_MAC_ANOTHER = CONFIG_HOST_KEYBOARD_TYPE_MAC + 0xff,
+};
-#if defined(USE_FD8)
-#define MAX_FD 8
-#elif defined(USE_FD7)
-#define MAX_FD 7
-#elif defined(USE_FD6)
-#define MAX_FD 6
-#elif defined(USE_FD5)
-#define MAX_FD 5
-#elif defined(USE_FD4)
-#define MAX_FD 4
-#elif defined(USE_FD3)
-#define MAX_FD 3
-#elif defined(USE_FD2)
-#define MAX_FD 2
-#elif defined(USE_FD1)
-#define MAX_FD 1
-#endif
+enum {
+ CONFIG_CURSOR_AS_CURSOR = 0,
+ CONFIG_CURSOR_AS_2468 = 1,
+ CONFIG_CURSOR_AS_1235 = 2,
+};
-#if defined(USE_QD2)
-#define MAX_QD 2
-#elif defined(USE_QD1)
-#define MAX_QD 1
-#endif
+#define MAX_HISTORY 8
-#if defined(USE_BINARY_FILE2)
-#define MAX_BINARY 2
-#elif defined(USE_BINARY_FILE1)
-#define MAX_BINARY 1
+#ifdef USE_FIXED_CONFIG
+ #define USE_CART_TMP 8
+ #define USE_FLOPPY_DISK_TMP 16
+ #define USE_QUICK_DISK_TMP 8
+ #define USE_HARD_DISK_TMP 8
+ #define USE_TAPE_TMP 8
+ #define USE_COMPACT_DISC_TMP 8
+ #define USE_LASER_DISC_TMP 8
+ #define USE_BINARY_FILE_TMP 8
+ #define USE_BUBBLE_TMP 16
+ #define MAX_VOLUME_TMP 32
+#else
+ #define USE_CART_TMP USE_CART
+ #define USE_FLOPPY_DISK_TMP USE_FLOPPY_DISK
+ #define USE_QUICK_DISK_TMP USE_QUICK_DISK
+ #define USE_HARD_DISK_TMP USE_HARD_DISK
+ #define USE_TAPE_TMP USE_TAPE
+ #define USE_COMPACT_DISC_TMP USE_COMPACT_DISC
+ #define USE_LASER_DISC_TMP USE_LASER_DISC
+ #define USE_BINARY_FILE_TMP USE_BINARY_FILE
+ #define USE_BUBBLE_TMP USE_BUBBLE
+ #ifdef USE_SOUND_VOLUME
+ #define MAX_VOLUME_TMP USE_SOUND_VOLUME
+ #endif
#endif
-#ifdef __cplusplus
-void init_config();
-void load_config();
-void save_config();
-void save_config_state(void *f);
-bool load_config_state(void *f);
-#endif
+void initialize_config();
+void load_config(const _TCHAR* config_path);
+void save_config(const _TCHAR* config_path);
+bool process_config_state(void *f, bool loading);
+/*
+ * 20160407 Ohta:
+ * Qt:
+ * To reduce time to build, compiling common blocks of GUI at once.
+ * So, you should not separate items with #ifdef.
+ */
typedef struct {
// control
- bool use_direct_input;
- bool disable_dwm;
-
-#ifdef USE_BOOT_MODE
- int boot_mode;
-#endif
-#ifdef USE_CPU_TYPE
- int cpu_type;
-#endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_BOOT_MODE)
+ int boot_mode;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_CPU_TYPE)
+ int cpu_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_DIPSWITCH)
+ uint32_t dipswitch;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_DEVICE_TYPE)
+ int device_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_DRIVE_TYPE)
+ int drive_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_KEYBOARD_TYPE)
+ int keyboard_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_MOUSE_TYPE)
+ int mouse_type; /*!< Emulated type of mouse by VM */
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_JOYSTICK_TYPE)
+ int joystick_type; /*!< Emulated type of joystick by VM */
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_SOUND_TYPE)
+ int sound_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_MONITOR_TYPE)
+ int monitor_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_SCANLINE)
+ bool scan_line;
+ bool scan_line_auto;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_PRINTER_TYPE)
+ int printer_type;
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_SERIAL_TYPE)
+ int serial_type;
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_FLOPPY_DISK)
+ bool correct_disk_timing[/*USE_FLOPPY_DISK_TMP*/16];
+ bool ignore_disk_crc[/*USE_FLOPPY_DISK_TMP*/16];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_TAPE)
+ bool wave_shaper[USE_TAPE_TMP];
+ bool direct_load_mzt[USE_TAPE_TMP];
+ bool baud_high[USE_TAPE_TMP];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_VARIABLE_MEMORY)
+ uint32_t current_ram_size;
+ #endif
+ bool compress_state;
int cpu_power;
-#ifdef USE_DIPSWITCH
- uint32 dipswitch;
-#endif
-#ifdef USE_DEVICE_TYPE
- int device_type;
-#endif
-#ifdef USE_DRIVE_TYPE
- int drive_type;
-#endif
-#ifdef USE_FD1
- bool ignore_crc[16];
- bool fdd_hack_fast_transfer[16];
-#endif
-#ifdef USE_TAPE
- bool tape_sound;
- bool wave_shaper;
- bool direct_load_mzt;
- bool baud_high;
-#endif
-
+ bool full_speed, drive_vm_in_opecode;
+
// recent files
-#ifdef USE_CART1
- _TCHAR initial_cart_dir[_MAX_PATH];
- _TCHAR recent_cart_path[MAX_CART][MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_FD1
- _TCHAR initial_disk_dir[_MAX_PATH];
- _TCHAR recent_disk_path[MAX_FD][MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_QD1
- _TCHAR initial_quickdisk_dir[_MAX_PATH];
- _TCHAR recent_quickdisk_path[MAX_QD][MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_TAPE
- _TCHAR initial_tape_dir[_MAX_PATH];
- _TCHAR recent_tape_path[MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_LASER_DISC
- _TCHAR initial_laser_disc_dir[_MAX_PATH];
- _TCHAR recent_laser_disc_path[MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_BINARY_FILE1
- _TCHAR initial_binary_dir[_MAX_PATH];
- _TCHAR recent_binary_path[MAX_BINARY][MAX_HISTORY][_MAX_PATH];
-#endif
-#ifdef USE_SCREEN_ROTATE
- bool rotate_type; // FIXME: wanna support +90deg, +180deg and +270deg
-#endif
-
+ #if defined(USE_SHARED_DLL) || defined(USE_CART)
+ _TCHAR initial_cart_dir[_MAX_PATH];
+ _TCHAR recent_cart_path[USE_CART_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_FLOPPY_DISK)
+ _TCHAR initial_floppy_disk_dir[_MAX_PATH];
+ _TCHAR recent_floppy_disk_path[USE_FLOPPY_DISK_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_QUICK_DISK)
+ _TCHAR initial_quick_disk_dir[_MAX_PATH];
+ _TCHAR recent_quick_disk_path[USE_QUICK_DISK_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_HARD_DISK)
+ _TCHAR initial_hard_disk_dir[_MAX_PATH];
+ _TCHAR recent_hard_disk_path[USE_HARD_DISK_TMP][MAX_HISTORY][_MAX_PATH];
+ _TCHAR last_hard_disk_path[USE_HARD_DISK_TMP][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_TAPE)
+ _TCHAR initial_tape_dir[_MAX_PATH];
+ _TCHAR recent_tape_path[USE_TAPE_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_COMPACT_DISC)
+ _TCHAR initial_compact_disc_dir[_MAX_PATH];
+ _TCHAR recent_compact_disc_path[USE_COMPACT_DISC_TMP][MAX_HISTORY][_MAX_PATH];
+ bool swap_audio_byteorder[USE_COMPACT_DISC_TMP];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_LASER_DISC)
+ _TCHAR initial_laser_disc_dir[_MAX_PATH];
+ _TCHAR recent_laser_disc_path[USE_LASER_DISC_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_BINARY_FILE)
+ _TCHAR initial_binary_dir[_MAX_PATH];
+ _TCHAR recent_binary_path[USE_BINARY_FILE_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+ #if defined(USE_SHARED_DLL) || defined(USE_BUBBLE)
+ _TCHAR initial_bubble_casette_dir[_MAX_PATH];
+ _TCHAR recent_bubble_casette_path[USE_BUBBLE_TMP][MAX_HISTORY][_MAX_PATH];
+ #endif
+
// screen
int window_mode;
- bool use_d3d9;
- bool wait_vsync;
- int stretch_type;
-#ifdef USE_MONITOR_TYPE
- int monitor_type;
-#endif
-#ifdef USE_CRT_FILTER
- BOOL crt_filter;
-#endif
-#ifdef USE_SCANLINE
- bool scan_line;
+ int window_stretch_type;
+ int fullscreen_stretch_type;
+ // #if defined(USE_FIXED_CONFIG) || defined(USE_SCREEN_ROTATE)
+ int rotate_type;
+ // #endif
+
+ // filter
+ #if defined(USE_FIXED_CONFIG) || defined(USE_SCREEN_FILTER)
+ int filter_type;
+ #endif
+
+ uint32_t mouse_sensitivity; /*!< SENSITIVITY of MOUSE , Value * 2^12, limit is 2^16-1 */
+ // NOTE: Belows contain STAGED CONFIGURATION.
+#if defined(_USE_QT)
+ bool use_separate_thread_draw;
+ bool use_opengl_scanline;
+ bool use_osd_virtual_media;
+ bool opengl_scanline_vert;
+ bool opengl_scanline_horiz;
+ bool use_opengl_filters;
+ bool focus_with_click;
+ int opengl_filter_num;
+
+ // STAGED CONFIG VALUES
+ bool swap_kanji_pause;
+ int cursor_as_ten_key;
+ bool numpad_enter_as_fullkey;
+ int host_keyboard_type;
+
+ /*
+ * TYPE :
+ * 0 : OpenGL/Main Profile
+ * 1 : OpenGL/Core Profile
+ * 2 : OpenGL ES
+ * 8 : Qt3D(Will not implement)
+ * 16 : Vulkan (Will not implement)
+ * 24 : DirectDraw (Will not implement)
+ * 25 : SDLFB(Will not implement)
+ * 32 : DirectX(Will not implement)
+ */
+ int render_platform;
+ int render_major_version;
+ int render_minor_version;
+ bool disk_count_immediate[16]; // Hack for MB8877, FLEX for FM-7.
+ _TCHAR debugwindow_font[1024];
+ _TCHAR logwindow_font[1024];
+ int debugwindow_width;
+ int debugwindow_height;
+ int logwindow_width;
+ int logwindow_height;
+
#endif
+
// sound
int sound_frequency;
int sound_latency;
-
+ bool sound_strict_rendering;
+ _TCHAR sound_device_name[1024];
+
+#if defined(_USE_QT)
int general_sound_level;
-#ifdef USE_MULTIPLE_SOUNDCARDS
- int sound_device_level[USE_MULTIPLE_SOUNDCARDS];
#endif
- bool multiple_speakers; // Effext if multiple sound boards : TRUE = not monoral.
-#if defined(USE_QT)
- bool use_opengl_scanline;
- bool opengl_scanline_vert;
- bool opengl_scanline_horiz;
-
- bool use_opengl_filters;
- int opengl_filter_num;
-#endif
-#ifdef USE_SOUND_DEVICE_TYPE
- int sound_device_type;
+#if defined(USE_FIXED_CONFIG) || defined(USE_FLOPPY_DISK)
+ bool sound_noise_fdd;
#endif
- _TCHAR fmgen_dll_path[_MAX_PATH];
-} config_t;
+#if defined(USE_FIXED_CONFIG) || defined(USE_TAPE)
+ bool sound_noise_cmt;
+ bool sound_tape_signal;
+ bool sound_tape_voice;
+#endif
+#if defined(USE_FIXED_CONFIG) || defined(USE_SOUND_VOLUME)
+ int sound_volume_l[MAX_VOLUME_TMP];
+ int sound_volume_r[MAX_VOLUME_TMP];
+#endif
+ #if defined(USE_SHARED_DLL) || defined(_WIN32) && !defined(_USE_QT)
+ _TCHAR mame2151_dll_path[_MAX_PATH];
+ _TCHAR mame2608_dll_path[_MAX_PATH];
+ #endif
+ // input
+ #if defined(USE_FIXED_CONFIG) || defined(USE_JOYSTICK)
+ int joy_buttons[4][16];
+ bool use_joy_to_key;
+ int joy_to_key_type; // Note: ADD "1235" as type 3.20181218 K.O
+ bool joy_to_key_numpad5;
+ int joy_to_key_buttons[16];
+ _TCHAR assigned_joystick_name[16][256];
+ int assigned_joystick_num[16];
+ bool emulated_joystick_dpad[4];
+ #endif
+ #if defined(USE_FIXED_CONFIG) || defined(USE_AUTO_KEY)
+ bool romaji_to_kana;
+ #endif
-extern config_t config;
+ // printer
+#if defined(USE_FIXED_CONFIG) || defined(USE_PRINTER)
+ _TCHAR printer_dll_path[_MAX_PATH];
+#endif
+ // debug
+ bool special_debug_fdc;
+ bool print_statistics;
-#if defined(_USE_AGAR) || defined(_USE_QT)
+ bool use_telnet;
+#if defined(_WIN32) && !defined(_USE_QT)
+ bool use_direct_input;
+ bool disable_dwm;
-# include <string>
+ bool use_d2d1;
+ bool use_d3d9;
+ bool wait_vsync;
+ bool use_dinput;
+ bool show_status_bar;
+#endif
+
+#ifdef _USE_QT
+
+ int video_width;
+ int video_height;
+ int video_codec_type;
+ int audio_codec_type;
-extern bool WritePrivateProfileString(char *lpAppName, char *lpKeyName, char *Value, FILEIO *lpFileName);
-extern bool WritePrivateProfileInt(char *lpAppName, char *lpKeyName, int Value, FILEIO *lpFileName);
-extern BOOL WritePrivateProfileBool(char *lpAppName, char *lpKeyName, bool Value, FILEIO *lpFileName);
-extern std::string GetPrivateProfileStr(char *lpAppName, char *lpKeyName, FILEIO *lpFileName);
-extern void GetPrivateProfileString(char *section, char *key, char *defaultstr, char *str, int max_len, FILEIO *p);
-extern int GetPrivateProfileInt(char *lpAppName, char *lpKeyName, int nDefault, FILEIO *lpFileName);
-extern bool GetPrivateProfileBool(char *lpAppName, char *lpKeyName, bool bDefault, FILEIO *lpFileName);
+ int video_h264_bitrate;
+ int video_h264_bframes;
+ int video_h264_b_adapt;
+ int video_h264_minq;
+ int video_h264_maxq;
+ int video_h264_subme;
+ int video_mpeg4_bitrate;
+ int video_mpeg4_bframes;
+ int video_mpeg4_minq;
+ int video_mpeg4_maxq;
+
+ int video_threads;
+ int audio_bitrate;
+ int video_frame_rate; // FPS * 1000.0
+ bool log_to_syslog;
+ bool log_to_console;
+ bool dev_log_to_syslog[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
+ bool dev_log_to_console[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
+ bool dev_log_recording[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][8];
+
+ bool state_log_to_console;
+ bool state_log_to_syslog;
+ bool state_log_to_recording;
+
+ int rendering_type;
+
+ int virtual_media_position; // -1 = none, 1, 2, 3, 4 = LRUD
+#endif
+ // 20210728 K.O
+ // Belows are machine features config (without DIPSW. I.E. joystick ports
+#if defined(USE_FIXED_CONFIG) || defined(USE_MACHINE_FEATURES)
+ uint32_t machine_features[32];
#endif
+} config_t;
+
+extern config_t DLL_PREFIX_I config;
+#if defined(_USE_QT)
+# include <string>
#endif
+#endif