/* Hatari - configuration.c This file is distributed under the GNU General Public License, version 2 or at your option any later version. Read the file gpl.txt for details. Configuration File The configuration file is now stored in an ASCII format to allow the user to edit the file manually. */ const char Configuration_fileid[] = "Hatari configuration.c : " __DATE__ " " __TIME__; #include #include "main.h" #include "configuration.h" #include "cfgopts.h" #include "audio.h" #include "sound.h" #include "file.h" #include "log.h" #include "m68000.h" #include "memorySnapShot.h" #include "paths.h" #include "screen.h" #include "statusbar.h" #include "vdi.h" #include "video.h" #include "avi_record.h" #include "clocks_timings.h" #include "68kDisass.h" #include "fdc.h" #include "dsp.h" #include "joy.h" CNF_PARAMS ConfigureParams; /* List of configuration for the emulator */ char sConfigFileName[FILENAME_MAX]; /* Stores the name of the configuration file */ /* Used to load/save logging options */ static const struct Config_Tag configs_Log[] = { { "sLogFileName", String_Tag, ConfigureParams.Log.sLogFileName }, { "sTraceFileName", String_Tag, ConfigureParams.Log.sTraceFileName }, { "nExceptionDebugMask", Int_Tag, &ConfigureParams.Log.nExceptionDebugMask }, { "nTextLogLevel", Int_Tag, &ConfigureParams.Log.nTextLogLevel }, { "nAlertDlgLogLevel", Int_Tag, &ConfigureParams.Log.nAlertDlgLogLevel }, { "bConfirmQuit", Bool_Tag, &ConfigureParams.Log.bConfirmQuit }, { "bNatFeats", Bool_Tag, &ConfigureParams.Log.bNatFeats }, { "bConsoleWindow", Bool_Tag, &ConfigureParams.Log.bConsoleWindow }, { NULL , Error_Tag, NULL } }; /* Used to load/save debugger options */ static const struct Config_Tag configs_Debugger[] = { { "nNumberBase", Int_Tag, &ConfigureParams.Debugger.nNumberBase }, { "nDisasmLines", Int_Tag, &ConfigureParams.Debugger.nDisasmLines }, { "nMemdumpLines", Int_Tag, &ConfigureParams.Debugger.nMemdumpLines }, { "nDisasmOptions", Int_Tag, &ConfigureParams.Debugger.nDisasmOptions }, { "bDisasmUAE", Bool_Tag, &ConfigureParams.Debugger.bDisasmUAE }, { NULL , Error_Tag, NULL } }; /* Used to load/save screen options */ static const struct Config_Tag configs_Screen[] = { { "nMonitorType", Int_Tag, &ConfigureParams.Screen.nMonitorType }, { "nFrameSkips", Int_Tag, &ConfigureParams.Screen.nFrameSkips }, { "bFullScreen", Bool_Tag, &ConfigureParams.Screen.bFullScreen }, { "bKeepResolution", Bool_Tag, &ConfigureParams.Screen.bKeepResolution }, { "bKeepResolutionST", Bool_Tag, &ConfigureParams.Screen.bKeepResolutionST }, { "bAllowOverscan", Bool_Tag, &ConfigureParams.Screen.bAllowOverscan }, { "nSpec512Threshold", Int_Tag, &ConfigureParams.Screen.nSpec512Threshold }, { "nForceBpp", Int_Tag, &ConfigureParams.Screen.nForceBpp }, { "bAspectCorrect", Bool_Tag, &ConfigureParams.Screen.bAspectCorrect }, { "bUseExtVdiResolutions", Bool_Tag, &ConfigureParams.Screen.bUseExtVdiResolutions }, { "nVdiWidth", Int_Tag, &ConfigureParams.Screen.nVdiWidth }, { "nVdiHeight", Int_Tag, &ConfigureParams.Screen.nVdiHeight }, { "nVdiColors", Int_Tag, &ConfigureParams.Screen.nVdiColors }, { "bMouseWarp", Bool_Tag, &ConfigureParams.Screen.bMouseWarp }, { "bShowStatusbar", Bool_Tag, &ConfigureParams.Screen.bShowStatusbar }, { "bShowDriveLed", Bool_Tag, &ConfigureParams.Screen.bShowDriveLed }, { "bCrop", Bool_Tag, &ConfigureParams.Screen.bCrop }, { "bForceMax", Bool_Tag, &ConfigureParams.Screen.bForceMax }, { "nMaxWidth", Int_Tag, &ConfigureParams.Screen.nMaxWidth }, { "nMaxHeight", Int_Tag, &ConfigureParams.Screen.nMaxHeight }, #ifdef GEKKO { "nWiiOffset", Int_Tag, &ConfigureParams.Screen.nWiiOffset }, #endif #if WITH_SDL2 { "nRenderScaleQuality", Int_Tag, &ConfigureParams.Screen.nRenderScaleQuality }, { "bUseVsync", Int_Tag, &ConfigureParams.Screen.bUseVsync }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 0 options */ static const struct Config_Tag configs_Joystick0[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[0].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[0].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 1 options */ static const struct Config_Tag configs_Joystick1[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[1].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[1].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 2 options */ static const struct Config_Tag configs_Joystick2[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[2].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[2].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 3 options */ static const struct Config_Tag configs_Joystick3[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[3].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[3].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 4 options */ static const struct Config_Tag configs_Joystick4[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[4].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[4].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save joystick 5 options */ static const struct Config_Tag configs_Joystick5[] = { { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nJoystickMode }, { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[5].bEnableAutoFire }, { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[5].bEnableJumpOnFire2 }, { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nJoyId }, { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeUp }, { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeDown }, { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeLeft }, { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeRight }, { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeFire }, #ifdef GEKKO { "nKeytoJoyWii1But1", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[0] }, { "nKeytoJoyWii1But2", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[1] }, { "nKeytoJoyWii1ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[2] }, { "nKeytoJoyClass1ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[3] }, { "nKeytoJoyClass1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[4] }, { "nKeytoJoyClass1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[5] }, { "nKeytoJoyGc1ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[6] }, { "nKeytoJoyGc1ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[7] }, { "nKeytoJoyGc1ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Button[8] }, { "nKeytoJoyWii2But1", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[0] }, { "nKeytoJoyWii2But2", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[1] }, { "nKeytoJoyWii2ButMinus", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[2] }, { "nKeytoJoyClass2ButB", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[3] }, { "nKeytoJoyClass2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[4] }, { "nKeytoJoyClass2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[5] }, { "nKeytoJoyGc2ButX", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[6] }, { "nKeytoJoyGc2ButY", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[7] }, { "nKeytoJoyGc2ButR", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Button[8] }, { "nKeytoJoyWii1Left", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Hat[0] }, { "nKeytoJoyWii1Up", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Hat[1] }, { "nKeytoJoyWii1Right", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Hat[2] }, { "nKeytoJoyWii1Down", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii1Hat[3] }, { "nKeytoJoyWii2Left", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Hat[0] }, { "nKeytoJoyWii2Up", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Hat[1] }, { "nKeytoJoyWii2Right", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Hat[2] }, { "nKeytoJoyWii2Down", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeytoJoyWii2Hat[3] }, { "nArrowtoJoy", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nArrowtoJoy }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save keyboard options */ static const struct Config_Tag configs_Keyboard[] = { { "bDisableKeyRepeat", Bool_Tag, &ConfigureParams.Keyboard.bDisableKeyRepeat }, { "nKeymapType", Int_Tag, &ConfigureParams.Keyboard.nKeymapType }, { "szMappingFileName", String_Tag, ConfigureParams.Keyboard.szMappingFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save shortcut key bindings with modifiers options */ static const struct Config_Tag configs_ShortCutWithMod[] = { { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] }, { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] }, { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] }, { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] }, { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] }, { "keyScreenShot", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SCREENSHOT] }, { "keyBossKey", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_BOSSKEY] }, { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] }, { "keyFastForward",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_FASTFORWARD] }, { "keyRecAnim", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_RECANIM] }, { "keyRecSound", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_RECSOUND] }, { "keySound", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] }, { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_PAUSE] }, { "keyDebugger", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG] }, { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] }, { "keyLoadMem", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_LOADMEM] }, { "keySaveMem", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SAVEMEM] }, { "keyInsertDiskA",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_INSERTDISKA] }, { "keySwitchJoy0", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_JOY_0] }, { "keySwitchJoy1", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_JOY_1] }, { "keySwitchPadA", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_PAD_A] }, { "keySwitchPadB", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_PAD_B] }, { NULL , Error_Tag, NULL } }; /* Used to load/save shortcut key bindings without modifiers options */ static const struct Config_Tag configs_ShortCutWithoutMod[] = { { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] }, { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] }, { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_MOUSEGRAB] }, { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_COLDRESET] }, { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_WARMRESET] }, { "keyScreenShot", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SCREENSHOT] }, { "keyBossKey", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_BOSSKEY] }, { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_CURSOREMU] }, { "keyFastForward",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FASTFORWARD] }, { "keyRecAnim", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_RECANIM] }, { "keyRecSound", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_RECSOUND] }, { "keySound", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SOUND] }, { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAUSE] }, { "keyDebugger", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_DEBUG] }, { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_QUIT] }, { "keyLoadMem", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_LOADMEM] }, { "keySaveMem", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SAVEMEM] }, { "keyInsertDiskA",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_INSERTDISKA] }, { "keySwitchJoy0", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_JOY_0] }, { "keySwitchJoy1", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_JOY_1] }, { "keySwitchPadA", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAD_A] }, { "keySwitchPadB", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAD_B] }, { NULL , Error_Tag, NULL } }; /* Used to load/save sound options */ static const struct Config_Tag configs_Sound[] = { { "bEnableMicrophone", Bool_Tag, &ConfigureParams.Sound.bEnableMicrophone }, { "bEnableSound", Bool_Tag, &ConfigureParams.Sound.bEnableSound }, { "bEnableSoundSync", Bool_Tag, &ConfigureParams.Sound.bEnableSoundSync }, { "nPlaybackFreq", Int_Tag, &ConfigureParams.Sound.nPlaybackFreq }, { "nSdlAudioBufferSize", Int_Tag, &ConfigureParams.Sound.SdlAudioBufferSize }, { "szYMCaptureFileName", String_Tag, ConfigureParams.Sound.szYMCaptureFileName }, { "YmVolumeMixing", Int_Tag, &ConfigureParams.Sound.YmVolumeMixing }, { NULL , Error_Tag, NULL } }; /* Used to load/save memory options */ static const struct Config_Tag configs_Memory[] = { { "nMemorySize", Int_Tag, &ConfigureParams.Memory.nMemorySize }, { "nTTRamSize", Int_Tag, &ConfigureParams.Memory.nTTRamSize }, { "bAutoSave", Bool_Tag, &ConfigureParams.Memory.bAutoSave }, { "szMemoryCaptureFileName", String_Tag, ConfigureParams.Memory.szMemoryCaptureFileName }, { "szAutoSaveFileName", String_Tag, ConfigureParams.Memory.szAutoSaveFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save floppy options */ static const struct Config_Tag configs_Floppy[] = { { "bAutoInsertDiskB", Bool_Tag, &ConfigureParams.DiskImage.bAutoInsertDiskB }, { "FastFloppy", Bool_Tag, &ConfigureParams.DiskImage.FastFloppy }, { "EnableDriveA", Bool_Tag, &ConfigureParams.DiskImage.EnableDriveA }, { "DriveA_NumberOfHeads", Int_Tag, &ConfigureParams.DiskImage.DriveA_NumberOfHeads }, { "EnableDriveB", Bool_Tag, &ConfigureParams.DiskImage.EnableDriveB }, { "DriveB_NumberOfHeads", Int_Tag, &ConfigureParams.DiskImage.DriveB_NumberOfHeads }, { "nWriteProtection", Int_Tag, &ConfigureParams.DiskImage.nWriteProtection }, { "szDiskAZipPath", String_Tag, ConfigureParams.DiskImage.szDiskZipPath[0] }, { "szDiskAFileName", String_Tag, ConfigureParams.DiskImage.szDiskFileName[0] }, { "szDiskBZipPath", String_Tag, ConfigureParams.DiskImage.szDiskZipPath[1] }, { "szDiskBFileName", String_Tag, ConfigureParams.DiskImage.szDiskFileName[1] }, { "szDiskImageDirectory", String_Tag, ConfigureParams.DiskImage.szDiskImageDirectory }, { NULL , Error_Tag, NULL } }; /* Used to load/save HD options */ static const struct Config_Tag configs_HardDisk[] = { { "nGemdosDrive", Int_Tag, &ConfigureParams.HardDisk.nGemdosDrive }, { "bBootFromHardDisk", Bool_Tag, &ConfigureParams.HardDisk.bBootFromHardDisk }, { "bUseHardDiskDirectory", Bool_Tag, &ConfigureParams.HardDisk.bUseHardDiskDirectories }, { "szHardDiskDirectory", String_Tag, ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C] }, { "nGemdosCase", Int_Tag, &ConfigureParams.HardDisk.nGemdosCase }, { "nWriteProtection", Int_Tag, &ConfigureParams.HardDisk.nWriteProtection }, { "bFilenameConversion", Bool_Tag, &ConfigureParams.HardDisk.bFilenameConversion }, { "bUseHardDiskImage", Bool_Tag, &ConfigureParams.Acsi[0].bUseDevice }, { "szHardDiskImage", String_Tag, ConfigureParams.Acsi[0].sDeviceFile }, { "bUseIdeMasterHardDiskImage", Bool_Tag, &ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage }, { "bUseIdeSlaveHardDiskImage", Bool_Tag, &ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage }, { "szIdeMasterHardDiskImage", String_Tag, ConfigureParams.HardDisk.szIdeMasterHardDiskImage }, { "szIdeSlaveHardDiskImage", String_Tag, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage }, { NULL , Error_Tag, NULL } }; /* Used to load/save ACSI options */ static const struct Config_Tag configs_Acsi[] = { // { "bUseDevice0", Bool_Tag, &ConfigureParams.Acsi[0].bUseDevice }, // { "sDeviceFile0", String_Tag, ConfigureParams.Acsi[0].sDeviceFile }, { "bUseDevice1", Bool_Tag, &ConfigureParams.Acsi[1].bUseDevice }, { "sDeviceFile1", String_Tag, ConfigureParams.Acsi[1].sDeviceFile }, { "bUseDevice2", Bool_Tag, &ConfigureParams.Acsi[2].bUseDevice }, { "sDeviceFile2", String_Tag, ConfigureParams.Acsi[2].sDeviceFile }, { "bUseDevice3", Bool_Tag, &ConfigureParams.Acsi[3].bUseDevice }, { "sDeviceFile3", String_Tag, ConfigureParams.Acsi[3].sDeviceFile }, { "bUseDevice4", Bool_Tag, &ConfigureParams.Acsi[4].bUseDevice }, { "sDeviceFile4", String_Tag, ConfigureParams.Acsi[4].sDeviceFile }, { "bUseDevice5", Bool_Tag, &ConfigureParams.Acsi[5].bUseDevice }, { "sDeviceFile5", String_Tag, ConfigureParams.Acsi[5].sDeviceFile }, { "bUseDevice6", Bool_Tag, &ConfigureParams.Acsi[6].bUseDevice }, { "sDeviceFile6", String_Tag, ConfigureParams.Acsi[6].sDeviceFile }, { "bUseDevice7", Bool_Tag, &ConfigureParams.Acsi[7].bUseDevice }, { "sDeviceFile7", String_Tag, ConfigureParams.Acsi[7].sDeviceFile }, { NULL , Error_Tag, NULL } }; /* Used to load/save SCSI options */ static const struct Config_Tag configs_Scsi[] = { { "bUseDevice1", Bool_Tag, &ConfigureParams.Scsi[1].bUseDevice }, { "sDeviceFile1", String_Tag, ConfigureParams.Scsi[1].sDeviceFile }, { "bUseDevice2", Bool_Tag, &ConfigureParams.Scsi[2].bUseDevice }, { "sDeviceFile2", String_Tag, ConfigureParams.Scsi[2].sDeviceFile }, { "bUseDevice3", Bool_Tag, &ConfigureParams.Scsi[3].bUseDevice }, { "sDeviceFile3", String_Tag, ConfigureParams.Scsi[3].sDeviceFile }, { "bUseDevice4", Bool_Tag, &ConfigureParams.Scsi[4].bUseDevice }, { "sDeviceFile4", String_Tag, ConfigureParams.Scsi[4].sDeviceFile }, { "bUseDevice5", Bool_Tag, &ConfigureParams.Scsi[5].bUseDevice }, { "sDeviceFile5", String_Tag, ConfigureParams.Scsi[5].sDeviceFile }, { "bUseDevice6", Bool_Tag, &ConfigureParams.Scsi[6].bUseDevice }, { "sDeviceFile6", String_Tag, ConfigureParams.Scsi[6].sDeviceFile }, { "bUseDevice7", Bool_Tag, &ConfigureParams.Scsi[7].bUseDevice }, { "sDeviceFile7", String_Tag, ConfigureParams.Scsi[7].sDeviceFile }, { NULL , Error_Tag, NULL } }; /* Used to load/save ROM options */ static const struct Config_Tag configs_Rom[] = { { "szTosImageFileName", String_Tag, ConfigureParams.Rom.szTosImageFileName }, { "bPatchTos", Bool_Tag, &ConfigureParams.Rom.bPatchTos }, { "szCartridgeImageFileName", String_Tag, ConfigureParams.Rom.szCartridgeImageFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save RS232 options */ static const struct Config_Tag configs_Rs232[] = { { "bEnableRS232", Bool_Tag, &ConfigureParams.RS232.bEnableRS232 }, { "szOutFileName", String_Tag, ConfigureParams.RS232.szOutFileName }, { "szInFileName", String_Tag, ConfigureParams.RS232.szInFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save printer options */ static const struct Config_Tag configs_Printer[] = { { "bEnablePrinting", Bool_Tag, &ConfigureParams.Printer.bEnablePrinting }, { "szPrintToFileName", String_Tag, ConfigureParams.Printer.szPrintToFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save MIDI options */ static const struct Config_Tag configs_Midi[] = { { "bEnableMidi", Bool_Tag, &ConfigureParams.Midi.bEnableMidi }, { "sMidiInFileName", String_Tag, ConfigureParams.Midi.sMidiInFileName }, { "sMidiOutFileName", String_Tag, ConfigureParams.Midi.sMidiOutFileName }, { NULL , Error_Tag, NULL } }; /* Used to load/save system options */ static const struct Config_Tag configs_System[] = { { "nCpuLevel", Int_Tag, &ConfigureParams.System.nCpuLevel }, { "nCpuFreq", Int_Tag, &ConfigureParams.System.nCpuFreq }, { "bCompatibleCpu", Bool_Tag, &ConfigureParams.System.bCompatibleCpu }, { "nMachineType", Int_Tag, &ConfigureParams.System.nMachineType }, { "bBlitter", Bool_Tag, &ConfigureParams.System.bBlitter }, { "nDSPType", Int_Tag, &ConfigureParams.System.nDSPType }, { "bRealTimeClock", Bool_Tag, &ConfigureParams.System.bRealTimeClock }, { "bPatchTimerD", Bool_Tag, &ConfigureParams.System.bPatchTimerD }, { "bFastBoot", Bool_Tag, &ConfigureParams.System.bFastBoot }, { "bFastForward", Bool_Tag, &ConfigureParams.System.bFastForward }, { "bAddressSpace24", Bool_Tag, &ConfigureParams.System.bAddressSpace24 }, #if ENABLE_WINUAE_CPU { "bCycleExactCpu", Bool_Tag, &ConfigureParams.System.bCycleExactCpu }, { "n_FPUType", Int_Tag, &ConfigureParams.System.n_FPUType }, { "bCompatibleFPU", Bool_Tag, &ConfigureParams.System.bCompatibleFPU }, { "bMMU", Bool_Tag, &ConfigureParams.System.bMMU }, #endif { NULL , Error_Tag, NULL } }; /* Used to load/save video options */ static const struct Config_Tag configs_Video[] = { { "AviRecordVcodec", Int_Tag, &ConfigureParams.Video.AviRecordVcodec }, { "AviRecordFps", Int_Tag, &ConfigureParams.Video.AviRecordFps }, { "AviRecordFile", String_Tag, ConfigureParams.Video.AviRecordFile }, { NULL , Error_Tag, NULL } }; /*-----------------------------------------------------------------------*/ /** * Set default configuration values. */ void Configuration_SetDefault(void) { int i, maxjoy; const char *psHomeDir; const char *psWorkingDir; psHomeDir = Paths_GetHatariHome(); psWorkingDir = Paths_GetWorkingDir(); /* Clear parameters */ memset(&ConfigureParams, 0, sizeof(CNF_PARAMS)); /* Set defaults for logging and tracing */ strcpy(ConfigureParams.Log.sLogFileName, "stderr"); strcpy(ConfigureParams.Log.sTraceFileName, "stderr"); ConfigureParams.Log.nExceptionDebugMask = DEFAULT_EXCEPTIONS; ConfigureParams.Log.nTextLogLevel = LOG_TODO; ConfigureParams.Log.nAlertDlgLogLevel = LOG_ERROR; ConfigureParams.Log.bConfirmQuit = true; ConfigureParams.Log.bNatFeats = false; ConfigureParams.Log.bConsoleWindow = false; /* Set defaults for debugger */ ConfigureParams.Debugger.nNumberBase = 10; ConfigureParams.Debugger.nDisasmLines = 8; ConfigureParams.Debugger.nMemdumpLines = 8; /* external one has nicer output, but isn't as complete as UAE one */ ConfigureParams.Debugger.bDisasmUAE = false; ConfigureParams.Debugger.nDisasmOptions = Disasm_GetOptions(); /* Set defaults for floppy disk images */ ConfigureParams.DiskImage.bAutoInsertDiskB = true; ConfigureParams.DiskImage.FastFloppy = false; ConfigureParams.DiskImage.nWriteProtection = WRITEPROT_OFF; ConfigureParams.DiskImage.EnableDriveA = true; FDC_Drive_Set_Enable ( 0 , ConfigureParams.DiskImage.EnableDriveA ); ConfigureParams.DiskImage.DriveA_NumberOfHeads = 2; FDC_Drive_Set_NumberOfHeads ( 0 , ConfigureParams.DiskImage.DriveA_NumberOfHeads ); ConfigureParams.DiskImage.EnableDriveB = true; FDC_Drive_Set_Enable ( 1 , ConfigureParams.DiskImage.EnableDriveB ); ConfigureParams.DiskImage.DriveB_NumberOfHeads = 2; FDC_Drive_Set_NumberOfHeads ( 1 , ConfigureParams.DiskImage.DriveB_NumberOfHeads ); for (i = 0; i < MAX_FLOPPYDRIVES; i++) { ConfigureParams.DiskImage.szDiskZipPath[i][0] = '\0'; ConfigureParams.DiskImage.szDiskFileName[i][0] = '\0'; } strcpy(ConfigureParams.DiskImage.szDiskImageDirectory, psWorkingDir); File_AddSlashToEndFileName(ConfigureParams.DiskImage.szDiskImageDirectory); /* Set defaults for hard disks */ ConfigureParams.HardDisk.bBootFromHardDisk = false; ConfigureParams.HardDisk.bFilenameConversion = false; ConfigureParams.HardDisk.nGemdosCase = GEMDOS_NOP; ConfigureParams.HardDisk.nWriteProtection = WRITEPROT_OFF; ConfigureParams.HardDisk.nGemdosDrive = DRIVE_C; ConfigureParams.HardDisk.bUseHardDiskDirectories = false; for (i = 0; i < MAX_HARDDRIVES; i++) { strcpy(ConfigureParams.HardDisk.szHardDiskDirectories[i], psWorkingDir); File_CleanFileName(ConfigureParams.HardDisk.szHardDiskDirectories[i]); } ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = false; strcpy(ConfigureParams.HardDisk.szIdeMasterHardDiskImage, psWorkingDir); ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = false; strcpy(ConfigureParams.HardDisk.szIdeSlaveHardDiskImage, psWorkingDir); /* ACSI */ for (i = 0; i < MAX_ACSI_DEVS; i++) { ConfigureParams.Acsi[i].bUseDevice = false; strcpy(ConfigureParams.Acsi[i].sDeviceFile, psWorkingDir); } /* SCSI */ for (i = 0; i < MAX_SCSI_DEVS; i++) { ConfigureParams.Scsi[i].bUseDevice = false; strcpy(ConfigureParams.Scsi[i].sDeviceFile, psWorkingDir); } /* Set defaults for Joysticks */ maxjoy = Joy_GetMaxId(); for (i = 0; i < JOYSTICK_COUNT; i++) { ConfigureParams.Joysticks.Joy[i].nJoystickMode = JOYSTICK_DISABLED; ConfigureParams.Joysticks.Joy[i].bEnableAutoFire = false; ConfigureParams.Joysticks.Joy[i].bEnableJumpOnFire2 = false; ConfigureParams.Joysticks.Joy[i].nJoyId = (i > maxjoy ? maxjoy : i); ConfigureParams.Joysticks.Joy[i].nKeyCodeUp = SDLK_UP; ConfigureParams.Joysticks.Joy[i].nKeyCodeDown = SDLK_DOWN; ConfigureParams.Joysticks.Joy[i].nKeyCodeLeft = SDLK_LEFT; ConfigureParams.Joysticks.Joy[i].nKeyCodeRight = SDLK_RIGHT; ConfigureParams.Joysticks.Joy[i].nKeyCodeFire = SDLK_RCTRL; } if (SDL_NumJoysticks() > 0) { /* ST Joystick #1 is default joystick */ ConfigureParams.Joysticks.Joy[1].nJoyId = 0; ConfigureParams.Joysticks.Joy[0].nJoyId = (maxjoy ? 1 : 0); ConfigureParams.Joysticks.Joy[1].nJoystickMode = JOYSTICK_REALSTICK; } /* Set defaults for Keyboard */ ConfigureParams.Keyboard.bDisableKeyRepeat = false; ConfigureParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC; strcpy(ConfigureParams.Keyboard.szMappingFileName, ""); /* Set defaults for Shortcuts */ ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] = SDLK_F12; ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] = SDLK_F11; ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAUSE] = SDLK_PAUSE; ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG] = SDLK_PAUSE; ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] = SDLK_o; ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] = SDLK_f; ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] = SDLK_m; ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] = SDLK_c; ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] = SDLK_r; ConfigureParams.Shortcut.withModifier[SHORTCUT_SCREENSHOT] = SDLK_g; ConfigureParams.Shortcut.withModifier[SHORTCUT_BOSSKEY] = SDLK_i; ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] = SDLK_j; ConfigureParams.Shortcut.withModifier[SHORTCUT_FASTFORWARD] = SDLK_x; ConfigureParams.Shortcut.withModifier[SHORTCUT_RECANIM] = SDLK_a; ConfigureParams.Shortcut.withModifier[SHORTCUT_RECSOUND] = SDLK_y; ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] = SDLK_s; ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] = SDLK_q; ConfigureParams.Shortcut.withModifier[SHORTCUT_LOADMEM] = SDLK_l; ConfigureParams.Shortcut.withModifier[SHORTCUT_SAVEMEM] = SDLK_k; ConfigureParams.Shortcut.withModifier[SHORTCUT_INSERTDISKA] = SDLK_d; ConfigureParams.Shortcut.withModifier[SHORTCUT_JOY_0] = SDLK_F1; ConfigureParams.Shortcut.withModifier[SHORTCUT_JOY_1] = SDLK_F2; ConfigureParams.Shortcut.withModifier[SHORTCUT_PAD_A] = SDLK_F3; ConfigureParams.Shortcut.withModifier[SHORTCUT_PAD_B] = SDLK_F4; /* Set defaults for Memory */ ConfigureParams.Memory.nMemorySize = 1; /* 1 MiB */ ConfigureParams.Memory.nTTRamSize = 0; /* disabled */ ConfigureParams.Memory.bAutoSave = false; sprintf(ConfigureParams.Memory.szMemoryCaptureFileName, "%s%chatari.sav", psHomeDir, PATHSEP); sprintf(ConfigureParams.Memory.szAutoSaveFileName, "%s%cauto.sav", psHomeDir, PATHSEP); /* Set defaults for Printer */ ConfigureParams.Printer.bEnablePrinting = false; sprintf(ConfigureParams.Printer.szPrintToFileName, "%s%chatari.prn", psHomeDir, PATHSEP); /* Set defaults for RS232 */ ConfigureParams.RS232.bEnableRS232 = false; strcpy(ConfigureParams.RS232.szOutFileName, "/dev/modem"); strcpy(ConfigureParams.RS232.szInFileName, "/dev/modem"); /* Set defaults for MIDI */ ConfigureParams.Midi.bEnableMidi = false; strcpy(ConfigureParams.Midi.sMidiInFileName, "/dev/snd/midiC1D0"); strcpy(ConfigureParams.Midi.sMidiOutFileName, "/dev/snd/midiC1D0"); /* Set defaults for Screen */ ConfigureParams.Screen.bFullScreen = false; ConfigureParams.Screen.bKeepResolution = true; ConfigureParams.Screen.bKeepResolutionST = false; ConfigureParams.Screen.nFrameSkips = AUTO_FRAMESKIP_LIMIT; ConfigureParams.Screen.bAllowOverscan = true; ConfigureParams.Screen.nSpec512Threshold = 1; ConfigureParams.Screen.nForceBpp = 0; ConfigureParams.Screen.bAspectCorrect = true; ConfigureParams.Screen.nMonitorType = MONITOR_TYPE_RGB; ConfigureParams.Screen.bUseExtVdiResolutions = false; ConfigureParams.Screen.nVdiWidth = 640; ConfigureParams.Screen.nVdiHeight = 480; ConfigureParams.Screen.nVdiColors = GEMCOLOR_16; ConfigureParams.Screen.bMouseWarp = true; ConfigureParams.Screen.bShowStatusbar = true; ConfigureParams.Screen.bShowDriveLed = true; ConfigureParams.Screen.bCrop = false; /* gives zoomed Falcon/TT windows about same size as ST/STE windows */ ConfigureParams.Screen.nMaxWidth = 2*NUM_VISIBLE_LINE_PIXELS; ConfigureParams.Screen.nMaxHeight = 2*NUM_VISIBLE_LINES+STATUSBAR_MAX_HEIGHT; ConfigureParams.Screen.bForceMax = false; #ifdef GEKKO /* With borders; when enabled it almost shows the whole screen */ ConfigureParams.Screen.nWiiOffset = 12; #endif #if WITH_SDL2 ConfigureParams.Screen.nRenderScaleQuality = 0; ConfigureParams.Screen.bUseVsync = false; #endif /* Set defaults for Sound */ ConfigureParams.Sound.bEnableMicrophone = true; ConfigureParams.Sound.bEnableSound = true; ConfigureParams.Sound.bEnableSoundSync = false; #ifdef GEKKO ConfigureParams.Sound.nPlaybackFreq = 32000; #else ConfigureParams.Sound.nPlaybackFreq = 44100; #endif sprintf(ConfigureParams.Sound.szYMCaptureFileName, "%s%chatari.wav", psWorkingDir, PATHSEP); ConfigureParams.Sound.SdlAudioBufferSize = 0; ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING; /* Set defaults for Rom */ sprintf(ConfigureParams.Rom.szTosImageFileName, "%s%ctos.img", Paths_GetDataDir(), PATHSEP); ConfigureParams.Rom.bPatchTos = true; strcpy(ConfigureParams.Rom.szCartridgeImageFileName, ""); /* Set defaults for System */ #if ENABLE_WINUAE_CPU /* Default to Falcon with WinUAE CPU core... */ ConfigureParams.System.nMachineType = MACHINE_FALCON; ConfigureParams.System.nCpuLevel = 3; ConfigureParams.System.nCpuFreq = 16; ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ConfigureParams.System.bAddressSpace24 = true; ConfigureParams.System.n_FPUType = FPU_NONE; ConfigureParams.System.bCompatibleFPU = true; ConfigureParams.System.bMMU = false; ConfigureParams.System.bCycleExactCpu = true; #else /* ...and to ST with old UAE CPU core */ ConfigureParams.System.nMachineType = MACHINE_ST; ConfigureParams.System.nCpuLevel = 0; ConfigureParams.System.nCpuFreq = 8; ConfigureParams.System.nDSPType = DSP_TYPE_NONE; ConfigureParams.System.bAddressSpace24 = true; #endif ConfigureParams.System.bCompatibleCpu = true; ConfigureParams.System.bBlitter = false; ConfigureParams.System.bPatchTimerD = true; ConfigureParams.System.bFastBoot = false; ConfigureParams.System.bRealTimeClock = false; ConfigureParams.System.bFastForward = false; /* Set defaults for Video */ #if HAVE_LIBPNG ConfigureParams.Video.AviRecordVcodec = AVI_RECORD_VIDEO_CODEC_PNG; #else ConfigureParams.Video.AviRecordVcodec = AVI_RECORD_VIDEO_CODEC_BMP; #endif ConfigureParams.Video.AviRecordFps = 0; /* automatic FPS */ sprintf(ConfigureParams.Video.AviRecordFile, "%s%chatari.avi", psWorkingDir, PATHSEP); /* Initialize the configuration file name */ if (strlen(psHomeDir) < sizeof(sConfigFileName)-13) sprintf(sConfigFileName, "%s%chatari.cfg", psHomeDir, PATHSEP); else strcpy(sConfigFileName, "hatari.cfg"); #if defined(__AMIGAOS4__) /* Fix default path names on Amiga OS */ sprintf(ConfigureParams.Rom.szTosImageFileName, "%stos.img", Paths_GetDataDir()); #endif } /*-----------------------------------------------------------------------*/ /** * Copy details from configuration structure into global variables for system, * clean file names, etc... Called from main.c and dialog.c files. */ void Configuration_Apply(bool bReset) { int i; if (bReset) { /* Set resolution change */ bUseVDIRes = ConfigureParams.Screen.bUseExtVdiResolutions; bUseHighRes = ((!bUseVDIRes) && ConfigureParams.Screen.nMonitorType == MONITOR_TYPE_MONO) || (bUseVDIRes && ConfigureParams.Screen.nVdiColors == GEMCOLOR_2); if (bUseHighRes) { STRes = ST_HIGH_RES; } if (bUseVDIRes) { VDI_SetResolution(ConfigureParams.Screen.nVdiColors, ConfigureParams.Screen.nVdiWidth, ConfigureParams.Screen.nVdiHeight); bVdiAesIntercept = true; } } if (ConfigureParams.Screen.nFrameSkips < AUTO_FRAMESKIP_LIMIT) { nFrameSkips = ConfigureParams.Screen.nFrameSkips; } /* Init clocks for this machine */ ClocksTimings_InitMachine ( ConfigureParams.System.nMachineType ); /* Sound settings */ /* SDL sound buffer in ms */ SdlAudioBufferSize = ConfigureParams.Sound.SdlAudioBufferSize; if ( SdlAudioBufferSize == 0 ) /* use default setting for SDL */ ; else if ( SdlAudioBufferSize < 10 ) /* min of 10 ms */ SdlAudioBufferSize = 10; else if ( SdlAudioBufferSize > 100 ) /* max of 100 ms */ SdlAudioBufferSize = 100; /* Set playback frequency */ Audio_SetOutputAudioFreq(ConfigureParams.Sound.nPlaybackFreq); /* YM Mixing */ if ( ( ConfigureParams.Sound.YmVolumeMixing != YM_LINEAR_MIXING ) && ( ConfigureParams.Sound.YmVolumeMixing != YM_TABLE_MIXING ) && ( ConfigureParams.Sound.YmVolumeMixing != YM_MODEL_MIXING ) ) ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING; YmVolumeMixing = ConfigureParams.Sound.YmVolumeMixing; Sound_SetYmVolumeMixing(); /* Check/constrain CPU settings and change corresponding * UAE cpu_level & cpu_compatible variables */ M68000_CheckCpuSettings(); /* Clean file and directory names */ File_MakeAbsoluteName(ConfigureParams.Rom.szTosImageFileName); if (strlen(ConfigureParams.Rom.szCartridgeImageFileName) > 0) File_MakeAbsoluteName(ConfigureParams.Rom.szCartridgeImageFileName); File_CleanFileName(ConfigureParams.HardDisk.szHardDiskDirectories[0]); File_MakeAbsoluteName(ConfigureParams.HardDisk.szHardDiskDirectories[0]); File_MakeAbsoluteName(ConfigureParams.Memory.szMemoryCaptureFileName); File_MakeAbsoluteName(ConfigureParams.Sound.szYMCaptureFileName); if (strlen(ConfigureParams.Keyboard.szMappingFileName) > 0) File_MakeAbsoluteName(ConfigureParams.Keyboard.szMappingFileName); File_MakeAbsoluteName(ConfigureParams.Video.AviRecordFile); for (i = 0; i < MAX_ACSI_DEVS; i++) { File_MakeAbsoluteName(ConfigureParams.Acsi[i].sDeviceFile); } for (i = 0; i < MAX_SCSI_DEVS; i++) { File_MakeAbsoluteName(ConfigureParams.Scsi[i].sDeviceFile); } /* make path names absolute, but handle special file names */ File_MakeAbsoluteSpecialName(ConfigureParams.Log.sLogFileName); File_MakeAbsoluteSpecialName(ConfigureParams.Log.sTraceFileName); File_MakeAbsoluteSpecialName(ConfigureParams.RS232.szInFileName); File_MakeAbsoluteSpecialName(ConfigureParams.RS232.szOutFileName); File_MakeAbsoluteSpecialName(ConfigureParams.Midi.sMidiInFileName); File_MakeAbsoluteSpecialName(ConfigureParams.Midi.sMidiOutFileName); File_MakeAbsoluteSpecialName(ConfigureParams.Printer.szPrintToFileName); /* Enable/disable floppy drives */ FDC_Drive_Set_Enable ( 0 , ConfigureParams.DiskImage.EnableDriveA ); FDC_Drive_Set_Enable ( 1 , ConfigureParams.DiskImage.EnableDriveB ); FDC_Drive_Set_NumberOfHeads ( 0 , ConfigureParams.DiskImage.DriveA_NumberOfHeads ); FDC_Drive_Set_NumberOfHeads ( 1 , ConfigureParams.DiskImage.DriveB_NumberOfHeads ); /* Update disassembler */ #if ENABLE_WINUAE_CPU Disasm_SetCPUType ( ConfigureParams.System.nCpuLevel , ConfigureParams.System.n_FPUType ); #else Disasm_SetCPUType ( ConfigureParams.System.nCpuLevel , 0 ); #endif #if ENABLE_DSP_EMU /* Enable DSP ? */ if ( ConfigureParams.System.nDSPType == DSP_TYPE_EMU ) DSP_Enable (); else DSP_Disable (); #endif } /*-----------------------------------------------------------------------*/ /** * Load a settings section from the configuration file. */ static int Configuration_LoadSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection) { int ret; ret = input_config(pFilename, configs, pSection); if (ret < 0) fprintf(stderr, "Can not load configuration file %s (section %s).\n", pFilename, pSection); return ret; } /*-----------------------------------------------------------------------*/ /** * Load program setting from configuration file. If psFileName is NULL, use * the configuration file given in configuration / last selected by user. */ void Configuration_Load(const char *psFileName) { if (psFileName == NULL) psFileName = sConfigFileName; if (!File_Exists(psFileName)) { Log_Printf(LOG_DEBUG, "Configuration file %s not found.\n", psFileName); return; } Configuration_LoadSection(psFileName, configs_Log, "[Log]"); Configuration_LoadSection(psFileName, configs_Debugger, "[Debugger]"); Configuration_LoadSection(psFileName, configs_Screen, "[Screen]"); Configuration_LoadSection(psFileName, configs_Joystick0, "[Joystick0]"); Configuration_LoadSection(psFileName, configs_Joystick1, "[Joystick1]"); Configuration_LoadSection(psFileName, configs_Joystick2, "[Joystick2]"); Configuration_LoadSection(psFileName, configs_Joystick3, "[Joystick3]"); Configuration_LoadSection(psFileName, configs_Joystick4, "[Joystick4]"); Configuration_LoadSection(psFileName, configs_Joystick5, "[Joystick5]"); Configuration_LoadSection(psFileName, configs_Keyboard, "[Keyboard]"); #if WITH_SDL2 Configuration_LoadSection(psFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers2]"); Configuration_LoadSection(psFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers2]"); #else Configuration_LoadSection(psFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]"); Configuration_LoadSection(psFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]"); #endif Configuration_LoadSection(psFileName, configs_Sound, "[Sound]"); Configuration_LoadSection(psFileName, configs_Memory, "[Memory]"); Configuration_LoadSection(psFileName, configs_Floppy, "[Floppy]"); Configuration_LoadSection(psFileName, configs_HardDisk, "[HardDisk]"); Configuration_LoadSection(psFileName, configs_Acsi, "[ACSI]"); Configuration_LoadSection(psFileName, configs_Scsi, "[SCSI]"); Configuration_LoadSection(psFileName, configs_Rom, "[ROM]"); Configuration_LoadSection(psFileName, configs_Rs232, "[RS232]"); Configuration_LoadSection(psFileName, configs_Printer, "[Printer]"); Configuration_LoadSection(psFileName, configs_Midi, "[Midi]"); Configuration_LoadSection(psFileName, configs_System, "[System]"); Configuration_LoadSection(psFileName, configs_Video, "[Video]"); } /*-----------------------------------------------------------------------*/ /** * Save a settings section to configuration file */ static int Configuration_SaveSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection) { int ret; ret = update_config(pFilename, configs, pSection); if (ret < 0) fprintf(stderr, "Error while updating section %s in %s\n", pSection, pFilename); return ret; } /*-----------------------------------------------------------------------*/ /** * Save program setting to configuration file */ void Configuration_Save(void) { if (Configuration_SaveSection(sConfigFileName, configs_Log, "[Log]") < 0) { Log_AlertDlg(LOG_ERROR, "Error saving config file."); return; } Configuration_SaveSection(sConfigFileName, configs_Debugger, "[Debugger]"); Configuration_SaveSection(sConfigFileName, configs_Screen, "[Screen]"); Configuration_SaveSection(sConfigFileName, configs_Joystick0, "[Joystick0]"); Configuration_SaveSection(sConfigFileName, configs_Joystick1, "[Joystick1]"); Configuration_SaveSection(sConfigFileName, configs_Joystick2, "[Joystick2]"); Configuration_SaveSection(sConfigFileName, configs_Joystick3, "[Joystick3]"); Configuration_SaveSection(sConfigFileName, configs_Joystick4, "[Joystick4]"); Configuration_SaveSection(sConfigFileName, configs_Joystick5, "[Joystick5]"); Configuration_SaveSection(sConfigFileName, configs_Keyboard, "[Keyboard]"); #if WITH_SDL2 Configuration_SaveSection(sConfigFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers2]"); Configuration_SaveSection(sConfigFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers2]"); #else Configuration_SaveSection(sConfigFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]"); Configuration_SaveSection(sConfigFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]"); #endif Configuration_SaveSection(sConfigFileName, configs_Sound, "[Sound]"); Configuration_SaveSection(sConfigFileName, configs_Memory, "[Memory]"); Configuration_SaveSection(sConfigFileName, configs_Floppy, "[Floppy]"); Configuration_SaveSection(sConfigFileName, configs_HardDisk, "[HardDisk]"); /*Configuration_SaveSection(sConfigFileName, configs_Acsi, "[ACSI]");*/ /*Configuration_SaveSection(sConfigFileName, configs_Scsi, "[SCSI]");*/ Configuration_SaveSection(sConfigFileName, configs_Rom, "[ROM]"); Configuration_SaveSection(sConfigFileName, configs_Rs232, "[RS232]"); Configuration_SaveSection(sConfigFileName, configs_Printer, "[Printer]"); Configuration_SaveSection(sConfigFileName, configs_Midi, "[Midi]"); Configuration_SaveSection(sConfigFileName, configs_System, "[System]"); Configuration_SaveSection(sConfigFileName, configs_Video, "[Video]"); } /*-----------------------------------------------------------------------*/ /** * Save/restore snapshot of configuration variables * ('MemorySnapShot_Store' handles type) */ void Configuration_MemorySnapShot_Capture(bool bSave) { int i; MemorySnapShot_Store(ConfigureParams.Rom.szTosImageFileName, sizeof(ConfigureParams.Rom.szTosImageFileName)); MemorySnapShot_Store(ConfigureParams.Rom.szCartridgeImageFileName, sizeof(ConfigureParams.Rom.szCartridgeImageFileName)); MemorySnapShot_Store(&ConfigureParams.Memory.nMemorySize, sizeof(ConfigureParams.Memory.nMemorySize)); MemorySnapShot_Store(&ConfigureParams.Memory.nTTRamSize, sizeof(ConfigureParams.Memory.nTTRamSize)); MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskFileName[0], sizeof(ConfigureParams.DiskImage.szDiskFileName[0])); MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskZipPath[0], sizeof(ConfigureParams.DiskImage.szDiskZipPath[0])); MemorySnapShot_Store(&ConfigureParams.DiskImage.EnableDriveA, sizeof(ConfigureParams.DiskImage.EnableDriveA)); MemorySnapShot_Store(&ConfigureParams.DiskImage.DriveA_NumberOfHeads, sizeof(ConfigureParams.DiskImage.DriveA_NumberOfHeads)); MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskFileName[1], sizeof(ConfigureParams.DiskImage.szDiskFileName[1])); MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskZipPath[1], sizeof(ConfigureParams.DiskImage.szDiskZipPath[1])); MemorySnapShot_Store(&ConfigureParams.DiskImage.EnableDriveB, sizeof(ConfigureParams.DiskImage.EnableDriveB)); MemorySnapShot_Store(&ConfigureParams.DiskImage.DriveB_NumberOfHeads, sizeof(ConfigureParams.DiskImage.DriveB_NumberOfHeads)); MemorySnapShot_Store(&ConfigureParams.HardDisk.bUseHardDiskDirectories, sizeof(ConfigureParams.HardDisk.bUseHardDiskDirectories)); MemorySnapShot_Store(ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C], sizeof(ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C])); for (i = 0; i < MAX_ACSI_DEVS; i++) { MemorySnapShot_Store(&ConfigureParams.Acsi[i].bUseDevice, sizeof(ConfigureParams.Acsi[i].bUseDevice)); MemorySnapShot_Store(ConfigureParams.Acsi[i].sDeviceFile, sizeof(ConfigureParams.Acsi[i].sDeviceFile)); } /* for (i = 0; i < MAX_SCSI_DEVS; i++) { MemorySnapShot_Store(&ConfigureParams.Scsi[i].bUseDevice, sizeof(ConfigureParams.Scsi[i].bUseDevice)); MemorySnapShot_Store(ConfigureParams.Scsi[i].sDeviceFile, sizeof(ConfigureParams.Scsi[i].sDeviceFile)); }*/ MemorySnapShot_Store(&ConfigureParams.Screen.nMonitorType, sizeof(ConfigureParams.Screen.nMonitorType)); MemorySnapShot_Store(&ConfigureParams.Screen.bUseExtVdiResolutions, sizeof(ConfigureParams.Screen.bUseExtVdiResolutions)); MemorySnapShot_Store(&ConfigureParams.Screen.nVdiWidth, sizeof(ConfigureParams.Screen.nVdiWidth)); MemorySnapShot_Store(&ConfigureParams.Screen.nVdiHeight, sizeof(ConfigureParams.Screen.nVdiHeight)); MemorySnapShot_Store(&ConfigureParams.Screen.nVdiColors, sizeof(ConfigureParams.Screen.nVdiColors)); MemorySnapShot_Store(&ConfigureParams.System.nCpuLevel, sizeof(ConfigureParams.System.nCpuLevel)); MemorySnapShot_Store(&ConfigureParams.System.nCpuFreq, sizeof(ConfigureParams.System.nCpuFreq)); MemorySnapShot_Store(&ConfigureParams.System.bCompatibleCpu, sizeof(ConfigureParams.System.bCompatibleCpu)); MemorySnapShot_Store(&ConfigureParams.System.nMachineType, sizeof(ConfigureParams.System.nMachineType)); MemorySnapShot_Store(&ConfigureParams.System.bBlitter, sizeof(ConfigureParams.System.bBlitter)); MemorySnapShot_Store(&ConfigureParams.System.nDSPType, sizeof(ConfigureParams.System.nDSPType)); MemorySnapShot_Store(&ConfigureParams.System.bRealTimeClock, sizeof(ConfigureParams.System.bRealTimeClock)); MemorySnapShot_Store(&ConfigureParams.System.bPatchTimerD, sizeof(ConfigureParams.System.bPatchTimerD)); MemorySnapShot_Store(&ConfigureParams.System.bAddressSpace24, sizeof(ConfigureParams.System.bAddressSpace24)); #if ENABLE_WINUAE_CPU MemorySnapShot_Store(&ConfigureParams.System.bCycleExactCpu, sizeof(ConfigureParams.System.bCycleExactCpu)); MemorySnapShot_Store(&ConfigureParams.System.n_FPUType, sizeof(ConfigureParams.System.n_FPUType)); MemorySnapShot_Store(&ConfigureParams.System.bCompatibleFPU, sizeof(ConfigureParams.System.bCompatibleFPU)); MemorySnapShot_Store(&ConfigureParams.System.bMMU, sizeof(ConfigureParams.System.bMMU)); #endif MemorySnapShot_Store(&ConfigureParams.DiskImage.FastFloppy, sizeof(ConfigureParams.DiskImage.FastFloppy)); if (!bSave) Configuration_Apply(true); }