From aa44e5cb4b3c44f65613227bb7eab45eaf220a4b Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Tue, 2 Sep 2003 20:09:24 +0000 Subject: [PATCH] 0.7.8c release --- Doc/Changelog.txt | 10 +++- Doc/Todo.txt | 3 - Include/Core/Xbe.h | 5 ++ Include/Cxbx.h | 4 +- Include/Win32/Cxbx/ResCxbx.h | 7 ++- Include/Win32/Cxbx/WndMain.h | 14 ++++- Include/Win32/CxbxKrnl/Emu.h | 5 ++ Include/Win32/CxbxKrnl/EmuShared.h | 19 +++++-- Resource/Cxbx.rc | 7 ++- Resource/Splash.bmp | Bin 153656 -> 153656 bytes Source/Core/Exe.cpp | 6 +- Source/Core/Xbe.cpp | 27 ++++++++- Source/Win32/Cxbx/WinMain.cpp | 9 ++- Source/Win32/Cxbx/WndMain.cpp | 86 ++++++++++++++++++++++++----- Source/Win32/CxbxKrnl/Emu.cpp | 27 +++++---- 15 files changed, 179 insertions(+), 50 deletions(-) diff --git a/Doc/Changelog.txt b/Doc/Changelog.txt index 48ce03b04..1c53300ae 100644 --- a/Doc/Changelog.txt +++ b/Doc/Changelog.txt @@ -1,10 +1,18 @@ cxbx website: http://www.caustik.com/xbox/ -version: 0.7.9 (??/??/??) +version: 0.7.8c (09/02/03) -------------------------------- - Spontaneous CreateDevice failures fixed (many, at least) +- Exe now able to generate into temporary directory, allowing + games to be run from a read only device without path issues. + +- Finally, Cxbx.dll and Cxbx.exe enforce version synchronization. + This should at least diagnose about 9 billion people's problems. + +- Very minor splash image tweaks + version: 0.7.8b (08/30/03) -------------------------------- diff --git a/Doc/Todo.txt b/Doc/Todo.txt index 2705482c6..4acd1e50f 100644 --- a/Doc/Todo.txt +++ b/Doc/Todo.txt @@ -1,8 +1,5 @@ Cxbx Todo (* denotes high priority, + denotes medium priority) - * CreateDevice/Release must be called in the context of the same thread, - so there needs to be a proxy CreateDevice and Release thread. - * Go lower level with mutants (maybe unnecessary), use \??\ and also set root directory to null. diff --git a/Include/Core/Xbe.h b/Include/Core/Xbe.h index bb3173b7d..ed1e8094f 100644 --- a/Include/Core/Xbe.h +++ b/Include/Core/Xbe.h @@ -244,6 +244,11 @@ class Xbe : public Error // ****************************************************************** uint08 **m_bzSection; + // ****************************************************************** + // * XBE original path + // ****************************************************************** + char m_szPath[260]; + // ****************************************************************** // * XBE ascii title, translated from certificate title // ****************************************************************** diff --git a/Include/Cxbx.h b/Include/Cxbx.h index 5ee400ae0..c9c67fa48 100644 --- a/Include/Cxbx.h +++ b/Include/Cxbx.h @@ -68,9 +68,9 @@ typedef signed long sint32; // * Version information // ****************************************************************** #ifndef _DEBUG_TRACE -#define _CXBX_VERSION "0.7.9-Pre1" +#define _CXBX_VERSION "0.7.8c" #else -#define _CXBX_VERSION "0.7.9-Pre1-Trace" +#define _CXBX_VERSION "0.7.8c-Trace" #endif // ****************************************************************** diff --git a/Include/Win32/Cxbx/ResCxbx.h b/Include/Win32/Cxbx/ResCxbx.h index fe768e272..7970aae4f 100644 --- a/Include/Win32/Cxbx/ResCxbx.h +++ b/Include/Win32/Cxbx/ResCxbx.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. -// Used by C:\Aaron\Projects\Cxbx\Resource\Cxbx.rc +// Used by D:\Projects\Cxbx\Resource\Cxbx.rc // #define IDI_CXBX 101 #define IDB_SPLASH 102 @@ -91,13 +91,16 @@ #define ID_EDIT_DUMPXBEINFOTO_FILE 40071 #define ID_EDIT_DUMPXBEINFOTO_DEBUGCONSOLE 40072 #define ID_SETTINGS_DIR 40076 +#define ID_SETTINGS_GENXP 40078 +#define ID_SETTINGS_GENWT 40079 +#define ID_SETTINGS_GENMA 40080 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 115 -#define _APS_NEXT_COMMAND_VALUE 40077 +#define _APS_NEXT_COMMAND_VALUE 40081 #define _APS_NEXT_CONTROL_VALUE 1049 #define _APS_NEXT_SYMED_VALUE 104 #endif diff --git a/Include/Win32/Cxbx/WndMain.h b/Include/Win32/Cxbx/WndMain.h index 93d69435e..449ee7976 100644 --- a/Include/Win32/Cxbx/WndMain.h +++ b/Include/Win32/Cxbx/WndMain.h @@ -44,6 +44,16 @@ #define RECENT_XBE_SIZE 10 #define RECENT_EXE_SIZE 10 +// ****************************************************************** +// * AutoConvert methods +// ****************************************************************** +enum EnumAutoConvert +{ + AUTO_CONVERT_MANUAL = 0, + AUTO_CONVERT_XBE_PATH = 1, + AUTO_CONVERT_WINDOWS_TEMP = 2 +}; + // ****************************************************************** // * class : WndMain // ****************************************************************** @@ -75,7 +85,7 @@ class WndMain : public Wnd // ****************************************************************** // * start emulation (converting to .exe if not done already) // ****************************************************************** - void StartEmulation(bool x_bAutoConvert); + void StartEmulation(EnumAutoConvert x_bAutoConvert); // ****************************************************************** // * accessor @@ -144,7 +154,7 @@ class WndMain : public Wnd // ****************************************************************** // * should emulation always auto-create the .exe? // ****************************************************************** - BOOL m_bAutoConvertToExe; + EnumAutoConvert m_AutoConvertToExe; // ****************************************************************** // * Recent Xbe files diff --git a/Include/Win32/CxbxKrnl/Emu.h b/Include/Win32/CxbxKrnl/Emu.h index c05079d71..9664094b5 100644 --- a/Include/Win32/CxbxKrnl/Emu.h +++ b/Include/Win32/CxbxKrnl/Emu.h @@ -44,6 +44,11 @@ // ****************************************************************** extern "C" CXBXKRNL_API void NTAPI EmuNoFunc(); +// ****************************************************************** +// * func: EmuVerifyVersion +// ****************************************************************** +extern "C" CXBXKRNL_API bool NTAPI EmuVerifyVersion(const char *szVersion); + // ****************************************************************** // * func: EmuInit // ****************************************************************** diff --git a/Include/Win32/CxbxKrnl/EmuShared.h b/Include/Win32/CxbxKrnl/EmuShared.h index 806bc75d4..183b29fbf 100644 --- a/Include/Win32/CxbxKrnl/EmuShared.h +++ b/Include/Win32/CxbxKrnl/EmuShared.h @@ -63,16 +63,22 @@ class EmuShared : public Mutex CXBXKRNL_API static void Cleanup(); // ****************************************************************** - // * Xbox Video Accessor + // * Xbox Video Accessors // ****************************************************************** - CXBXKRNL_API void GetXBVideo(XBVideo *video) { Lock(); memcpy(video, &m_XBVideo, sizeof(XBVideo)); Unlock(); } - CXBXKRNL_API void SetXBVideo(XBVideo *video) { Lock(); memcpy(&m_XBVideo, video, sizeof(XBVideo)); Unlock(); } + CXBXKRNL_API void GetXBVideo( XBVideo *video) { Lock(); memcpy(video, &m_XBVideo, sizeof(XBVideo)); Unlock(); } + CXBXKRNL_API void SetXBVideo(const XBVideo *video) { Lock(); memcpy(&m_XBVideo, video, sizeof(XBVideo)); Unlock(); } // ****************************************************************** - // * Xbox Controller Accessor + // * Xbox Controller Accessors // ****************************************************************** - CXBXKRNL_API void GetXBController(XBController *ctrl) { Lock(); memcpy(ctrl, &m_XBController, sizeof(XBController)); Unlock();} - CXBXKRNL_API void SetXBController(XBController *ctrl) { Lock(); memcpy(&m_XBController, ctrl, sizeof(XBController)); Unlock();} + CXBXKRNL_API void GetXBController( XBController *ctrl) { Lock(); memcpy(ctrl, &m_XBController, sizeof(XBController)); Unlock();} + CXBXKRNL_API void SetXBController(const XBController *ctrl) { Lock(); memcpy(&m_XBController, ctrl, sizeof(XBController)); Unlock();} + + // ****************************************************************** + // * Xbe Path Accessors + // ****************************************************************** + CXBXKRNL_API void GetXbePath( char *path) { Lock(); strcpy(path, m_XbePath); Unlock(); } + CXBXKRNL_API void SetXbePath(const char *path) { Lock(); strcpy(m_XbePath, path); Unlock(); } private: // ****************************************************************** @@ -80,6 +86,7 @@ class EmuShared : public Mutex // ****************************************************************** XBController m_XBController; XBVideo m_XBVideo; + char m_XbePath[260]; }; // ****************************************************************** diff --git a/Resource/Cxbx.rc b/Resource/Cxbx.rc index 189539c82..5a7c2124b 100644 --- a/Resource/Cxbx.rc +++ b/Resource/Cxbx.rc @@ -161,7 +161,12 @@ BEGIN , GRAYED MENUITEM "Config &Video...", ID_SETTINGS_CONFIG_VIDEO MENUITEM SEPARATOR - MENUITEM "Generate &Exe Automatically", ID_SETTINGS_AUTOGEN + POPUP "Executable &Generation" + BEGIN + MENUITEM "&Automatic (&Windows Temp)", ID_SETTINGS_GENWT + MENUITEM "Automatic (&Xbe Path)", ID_SETTINGS_GENXP + MENUITEM "&Manual", ID_SETTINGS_GENMA + END END POPUP "E&mulation" BEGIN diff --git a/Resource/Splash.bmp b/Resource/Splash.bmp index 8f98ecbed6ff0840fd4ab7b80e744012e4db1d2c..2e12c13d33e59ef27c3290609ac029442fe6d274 100644 GIT binary patch literal 153656 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 k`-4wT+v)e;t2Q`oP#Irn9H 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 XG(Di{0Zk8RdO*_ynjZLjd*J^7{$n`6 literal 153656 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 O1vD+7X@Nhs1^$1ZuuQ}N diff --git a/Source/Core/Exe.cpp b/Source/Core/Exe.cpp index 17f73cc1e..fe841ec78 100644 --- a/Source/Core/Exe.cpp +++ b/Source/Core/Exe.cpp @@ -351,9 +351,9 @@ void Exe::Export(const char *x_szExeFilename) if(fwrite(m_bzSection[v], RawSize, 1, ExeFile) != 1) { - char Buffer[255]; - sprintf(Buffer, "Could not write PE section %d (%Xh)", v, v); - SetError(Buffer, false); + char buffer[255]; + sprintf(buffer, "Could not write PE section %d (%Xh)", v, v); + SetError(buffer, false); goto cleanup; } diff --git a/Source/Core/Xbe.cpp b/Source/Core/Xbe.cpp index 227480590..9298561ae 100644 --- a/Source/Core/Xbe.cpp +++ b/Source/Core/Xbe.cpp @@ -33,6 +33,7 @@ // ****************************************************************** #include "Xbe.h" #include "Exe.h" +#include "Emu.h" #include #include @@ -44,7 +45,7 @@ // ****************************************************************** Xbe::Xbe(const char *x_szFilename) { - char szBuffer[255]; + char szBuffer[260]; ConstructorInit(); @@ -63,6 +64,28 @@ Xbe::Xbe(const char *x_szFilename) printf("OK\n"); + // ****************************************************************** + // * remember xbe path + // ****************************************************************** + { + printf("Xbe::Xbe Storing Xbe Path..."); + + strcpy(m_szPath, x_szFilename); + + int v=0, c=0; + + while(m_szPath[v] != '\0') + { + if(m_szPath[v] == '\\') + c = v+1; + v++; + } + + m_szPath[c] = '\0'; + } + + printf("OK\n"); + // ****************************************************************** // * read xbe image header // ****************************************************************** @@ -967,7 +990,7 @@ void Xbe::Export(const char *x_szXbeFilename) if(GetError() != 0) return; - char szBuffer[255]; + char szBuffer[260]; printf("Xbe::Export: Writing Xbe file..."); diff --git a/Source/Win32/Cxbx/WinMain.cpp b/Source/Win32/Cxbx/WinMain.cpp index df040f9b4..d84e6ea82 100644 --- a/Source/Win32/Cxbx/WinMain.cpp +++ b/Source/Win32/Cxbx/WinMain.cpp @@ -31,6 +31,7 @@ // * All rights reserved // * // ****************************************************************** +#include "Emu.h" #include "WndMain.h" #include "EmuShared.h" #include "EmuExe.h" @@ -40,6 +41,12 @@ // ****************************************************************** int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + if(!EmuVerifyVersion(_CXBX_VERSION)) + { + MessageBox(NULL, "Cxbx.dll is the incorrect version", "Cxbx", MB_OK); + return 1; + } + EmuShared::Init(); WndMain *MainWindow = new WndMain(hInstance); @@ -51,7 +58,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine { MainWindow->OpenXbe(__argv[1]); - MainWindow->StartEmulation(true); + MainWindow->StartEmulation(AUTO_CONVERT_WINDOWS_TEMP); } while(MainWindow->GetError() == 0 && MainWindow->ProcessMessages()) diff --git a/Source/Win32/Cxbx/WndMain.cpp b/Source/Win32/Cxbx/WndMain.cpp index 1a4143665..52f871fae 100644 --- a/Source/Win32/Cxbx/WndMain.cpp +++ b/Source/Win32/Cxbx/WndMain.cpp @@ -44,7 +44,7 @@ // ****************************************************************** // * constructor // ****************************************************************** -WndMain::WndMain(HINSTANCE x_hInstance) : Wnd(x_hInstance), m_bCreated(false), m_Xbe(0), m_Exe(0), m_bExeChanged(false), m_bXbeChanged(false), m_bAutoConvertToExe(TRUE), m_KrnlDebug(DM_NONE), m_CxbxDebug(DM_NONE), m_dwRecentXbe(0), m_dwRecentExe(0) +WndMain::WndMain(HINSTANCE x_hInstance) : Wnd(x_hInstance), m_bCreated(false), m_Xbe(0), m_Exe(0), m_bExeChanged(false), m_bXbeChanged(false), m_AutoConvertToExe(AUTO_CONVERT_WINDOWS_TEMP), m_KrnlDebug(DM_NONE), m_CxbxDebug(DM_NONE), m_dwRecentXbe(0), m_dwRecentExe(0) { // ****************************************************************** // * Initialize members @@ -105,7 +105,7 @@ WndMain::WndMain(HINSTANCE x_hInstance) : Wnd(x_hInstance), m_bCreated(false), m RegQueryValueEx(hKey, "RecentExe", NULL, &dwType, (PBYTE)&m_dwRecentExe, &dwSize); dwType = REG_DWORD; dwSize = sizeof(DWORD); - RegQueryValueEx(hKey, "AutoConvertToExe", NULL, &dwType, (PBYTE)&m_bAutoConvertToExe, &dwSize); + RegQueryValueEx(hKey, "AutoConvertToExe", NULL, &dwType, (PBYTE)&m_AutoConvertToExe, &dwSize); dwType = REG_SZ; dwSize = 260; RegQueryValueEx(hKey, "CxbxDebugFilename", NULL, &dwType, (PBYTE)m_CxbxDebugFilename, &dwSize); @@ -173,7 +173,7 @@ WndMain::~WndMain() RegSetValueEx(hKey, "RecentExe", 0, dwType, (PBYTE)&m_dwRecentExe, dwSize); dwType = REG_DWORD; dwSize = sizeof(DWORD); - RegSetValueEx(hKey, "AutoConvertToExe", 0, dwType, (PBYTE)&m_bAutoConvertToExe, dwSize); + RegSetValueEx(hKey, "AutoConvertToExe", 0, dwType, (PBYTE)&m_AutoConvertToExe, dwSize); dwType = REG_SZ; dwSize = 260; RegSetValueEx(hKey, "CxbxDebugFilename", 0, dwType, (PBYTE)m_CxbxDebugFilename, dwSize); @@ -359,7 +359,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP case VK_F5: { if(m_Xbe != 0) - StartEmulation(m_bAutoConvertToExe == TRUE); + StartEmulation(m_AutoConvertToExe); } break; } @@ -1018,12 +1018,28 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP break; case ID_EMULATION_START: - StartEmulation(m_bAutoConvertToExe == TRUE); + StartEmulation(m_AutoConvertToExe); break; - case ID_SETTINGS_AUTOGEN: + case ID_SETTINGS_GENWT: { - m_bAutoConvertToExe = !m_bAutoConvertToExe; + m_AutoConvertToExe = AUTO_CONVERT_WINDOWS_TEMP; + + RefreshMenus(); + } + break; + + case ID_SETTINGS_GENXP: + { + m_AutoConvertToExe = AUTO_CONVERT_XBE_PATH; + + RefreshMenus(); + } + break; + + case ID_SETTINGS_GENMA: + { + m_AutoConvertToExe = AUTO_CONVERT_MANUAL; RefreshMenus(); } @@ -1314,9 +1330,27 @@ void WndMain::RefreshMenus() // ****************************************************************** { HMENU sett_menu = GetSubMenu(menu, 3); + HMENU auto_menu = GetSubMenu(sett_menu, 4); - // check "Generate Exe Automatically" if appropriate - CheckMenuItem(sett_menu, ID_SETTINGS_AUTOGEN, MF_BYCOMMAND | ((m_bAutoConvertToExe == TRUE) ? MF_CHECKED : MF_UNCHECKED) ); + // check appropriate choice + if(m_AutoConvertToExe == AUTO_CONVERT_WINDOWS_TEMP) + { + CheckMenuItem(auto_menu, ID_SETTINGS_GENWT, MF_BYCOMMAND | MF_CHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENXP, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENMA, MF_BYCOMMAND | MF_UNCHECKED); + } + else if(m_AutoConvertToExe == AUTO_CONVERT_XBE_PATH) + { + CheckMenuItem(auto_menu, ID_SETTINGS_GENWT, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENXP, MF_BYCOMMAND | MF_CHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENMA, MF_BYCOMMAND | MF_UNCHECKED); + } + else + { + CheckMenuItem(auto_menu, ID_SETTINGS_GENWT, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENXP, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(auto_menu, ID_SETTINGS_GENMA, MF_BYCOMMAND | MF_CHECKED); + } } // ****************************************************************** @@ -1757,7 +1791,7 @@ bool WndMain::ConvertToExe(const char *x_filename, bool x_bVerifyIfExists) } } - // ****************************************************************** + // ****************************************************************** // * convert file // ****************************************************************** { @@ -1786,7 +1820,7 @@ bool WndMain::ConvertToExe(const char *x_filename, bool x_bVerifyIfExists) // ****************************************************************** // * StartEmulation // ****************************************************************** -void WndMain::StartEmulation(bool x_bAutoConvert) +void WndMain::StartEmulation(EnumAutoConvert x_AutoConvert) { char szBuffer[260]; @@ -1795,7 +1829,29 @@ void WndMain::StartEmulation(bool x_bAutoConvert) // ****************************************************************** if(m_ExeFilename[0] == '\0' || m_bExeChanged) { - if(x_bAutoConvert) + if(x_AutoConvert == AUTO_CONVERT_WINDOWS_TEMP) + { + char szTempPath[260]; + + GetTempPath(259, szTempPath); + + SuggestFilename(m_XbeFilename, szBuffer, ".exe"); + + int v=0, c=0; + + while(szBuffer[v] != '\0') + { + if(szBuffer[v] == '\\') + c = v+1; + v++; + } + + strcat(szTempPath, &szBuffer[c]); + + if(!ConvertToExe(szTempPath, false)) + return; + } + else if(x_AutoConvert == AUTO_CONVERT_XBE_PATH) { SuggestFilename(m_XbeFilename, szBuffer, ".exe"); @@ -1809,6 +1865,11 @@ void WndMain::StartEmulation(bool x_bAutoConvert) } } + // ****************************************************************** + // * register xbe path with Cxbx.dll + // ****************************************************************** + g_EmuShared->SetXbePath(m_Xbe->m_szPath); + // ****************************************************************** // * shell exe // ****************************************************************** @@ -1838,5 +1899,4 @@ void WndMain::StartEmulation(bool x_bAutoConvert) printf("WndMain: %s emulation started.\n", m_Xbe->m_szAsciiTitle); } } - } diff --git a/Source/Win32/CxbxKrnl/Emu.cpp b/Source/Win32/CxbxKrnl/Emu.cpp index 700fa1728..068a48cf8 100644 --- a/Source/Win32/CxbxKrnl/Emu.cpp +++ b/Source/Win32/CxbxKrnl/Emu.cpp @@ -103,6 +103,17 @@ extern "C" CXBXKRNL_API void NTAPI EmuNoFunc() EmuSwapFS(); // XBox FS } +// ****************************************************************** +// * func: EmuVerifyVersion +// ****************************************************************** +extern "C" CXBXKRNL_API bool NTAPI EmuVerifyVersion(const char *szVersion) +{ + if(strcmp(szVersion, _CXBX_VERSION) != 0) + return false; + + return true; +} + // ****************************************************************** // * func: EmuCleanThread // ****************************************************************** @@ -223,21 +234,9 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit { char szBuffer[260]; - GetModuleFileName(NULL, szBuffer, 260); + g_EmuShared->GetXbePath(szBuffer); - sint32 spot=-1; - for(int v=0;v<260;v++) - { - if(szBuffer[v] == '\\') - spot = v; - else if(szBuffer[v] == '\0') - break; - } - - if(spot != -1) - szBuffer[spot] = '\0'; - - SetCurrentDirectory(szBuffer); + SetCurrentDirectory(szBuffer); g_hCurDir = CreateFile(szBuffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);