diff --git a/resource/Cxbx.rc b/resource/Cxbx.rc index bad37eb13..c3c28e99d 100644 --- a/resource/Cxbx.rc +++ b/resource/Cxbx.rc @@ -131,6 +131,7 @@ BEGIN MENUITEM SEPARATOR POPUP "&LLE (Experimental)" BEGIN + MENUITEM "LLE &JIT", ID_EMULATION_LLE_JIT MENUITEM "LLE &APU", ID_EMULATION_LLE_APU MENUITEM "LLE &GPU", ID_EMULATION_LLE_GPU END diff --git a/src/Cxbx/ResCxbx.h b/src/Cxbx/ResCxbx.h index ac46df203..c1b81ab52 100644 --- a/src/Cxbx/ResCxbx.h +++ b/src/Cxbx/ResCxbx.h @@ -67,6 +67,7 @@ #define ID_EMULATION_DEBUGOUTPUTKERNEL_FILE 40038 #define ID_EMULATION_LLE_APU 40039 #define ID_EMULATION_LLE_GPU 40040 +#define ID_EMULATION_LLE_JIT 40041 #define ID_SETTINGS_CONFIG_CONTROLLER 40046 #define ID_SETTINGS_CONFIG_VIDEO 40047 #define ID_SETTINGS_CONFIGURESOUND 40048 diff --git a/src/Cxbx/WndMain.cpp b/src/Cxbx/WndMain.cpp index 1811fd5f9..66ddfdb0b 100644 --- a/src/Cxbx/WndMain.cpp +++ b/src/Cxbx/WndMain.cpp @@ -976,6 +976,14 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP } break; + case ID_EMULATION_LLE_JIT: + { + m_FlagsLLE = m_FlagsLLE ^ LLE_JIT; + + RefreshMenus(); + } + break; + case ID_EMULATION_LLE_APU: { m_FlagsLLE = m_FlagsLLE ^ LLE_APU; @@ -1231,7 +1239,10 @@ void WndMain::RefreshMenus() HMENU settings_menu = GetSubMenu(menu, 3); HMENU lle_submenu = GetSubMenu(settings_menu, 4); - UINT chk_flag = (m_FlagsLLE & LLE_APU) ? MF_CHECKED : MF_UNCHECKED; + UINT chk_flag = (m_FlagsLLE & LLE_JIT) ? MF_CHECKED : MF_UNCHECKED; + CheckMenuItem(lle_submenu, ID_EMULATION_LLE_JIT, chk_flag); + + chk_flag = (m_FlagsLLE & LLE_APU) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(lle_submenu, ID_EMULATION_LLE_APU, chk_flag); chk_flag = (m_FlagsLLE & LLE_GPU) ? MF_CHECKED : MF_UNCHECKED; diff --git a/src/CxbxKrnl/CxbxKrnl.cpp b/src/CxbxKrnl/CxbxKrnl.cpp index 9c650a608..79822d59a 100644 --- a/src/CxbxKrnl/CxbxKrnl.cpp +++ b/src/CxbxKrnl/CxbxKrnl.cpp @@ -480,6 +480,7 @@ extern "C" CXBXKRNL_API void CxbxKrnlInit g_EmuShared->GetFlagsLLE(&CxbxLLE_Flags); bLLE_APU = (CxbxLLE_Flags & LLE_APU) > 0; bLLE_GPU = (CxbxLLE_Flags & LLE_GPU) > 0; + bLLE_JIT = (CxbxLLE_Flags & LLE_JIT) > 0; // Initialize devices : char szBuffer[MAX_PATH]; diff --git a/src/CxbxKrnl/EmuShared.h b/src/CxbxKrnl/EmuShared.h index a3334e414..47aa97c66 100644 --- a/src/CxbxKrnl/EmuShared.h +++ b/src/CxbxKrnl/EmuShared.h @@ -43,6 +43,7 @@ enum { LLE_APU = 1 << 0, LLE_GPU = 1 << 1, + LLE_JIT = 1 << 2, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp index a57ce184f..bb28b8cdb 100644 --- a/src/CxbxKrnl/HLEIntercept.cpp +++ b/src/CxbxKrnl/HLEIntercept.cpp @@ -66,6 +66,7 @@ static std::vector::const_iterator vCacheInpIter; // Set these for experimental APU(sound) / GPU (graphics) LLE bool bLLE_APU = false; bool bLLE_GPU = false; +bool bLLE_JIT = false; void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHeader) { diff --git a/src/CxbxKrnl/HLEIntercept.h b/src/CxbxKrnl/HLEIntercept.h index 962e5fa85..6ea148e9f 100644 --- a/src/CxbxKrnl/HLEIntercept.h +++ b/src/CxbxKrnl/HLEIntercept.h @@ -36,6 +36,7 @@ extern bool bLLE_APU; extern bool bLLE_GPU; +extern bool bLLE_JIT; void EmuHLEIntercept(Xbe::LibraryVersion *LibraryVersion, Xbe::Header *XbeHeader);