0.7.8c release

This commit is contained in:
Aaron Robinson 2003-09-02 20:09:24 +00:00
parent bd4db908c8
commit aa44e5cb4b
15 changed files with 179 additions and 50 deletions

View File

@ -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)
--------------------------------

View File

@ -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.

View File

@ -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
// ******************************************************************

View File

@ -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
// ******************************************************************

View File

@ -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

View File

@ -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

View File

@ -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
// ******************************************************************

View File

@ -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];
};
// ******************************************************************

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -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;
}

View File

@ -33,6 +33,7 @@
// ******************************************************************
#include "Xbe.h"
#include "Exe.h"
#include "Emu.h"
#include <memory.h>
#include <locale.h>
@ -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...");

View File

@ -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())

View File

@ -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);
}
}
}

View File

@ -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);