From 3080fdf2d0c6589a3f83acb1a05f88ecbbbfcc40 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Wed, 23 Jun 2004 06:29:56 +0000 Subject: [PATCH] progress --- Cxbx.opt | Bin 58880 -> 60928 bytes Include/Win32/CxbxKrnl/EmuXapi.h | 5 + .../CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h | 1 + Include/Win32/CxbxKrnl/ResourceTracker.h | 2 +- Source/Win32/CxbxKrnl/Emu.cpp | 20 +++- Source/Win32/CxbxKrnl/EmuKrnl.cpp | 75 +++----------- Source/Win32/CxbxKrnl/EmuXapi.cpp | 16 +++ .../CxbxKrnl/HLEDataBase/Xapi.1.0.4361.inl | 1 - .../CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl | 97 ++++++++++++++++++ Source/Win32/CxbxKrnl/ResourceTracker.cpp | 8 +- 10 files changed, 157 insertions(+), 68 deletions(-) diff --git a/Cxbx.opt b/Cxbx.opt index 30676c003bb1536384a28a0b1d2a21968473a607..9a464722ee2ab0ab88ba08b6694430b75eee970d 100644 GIT binary patch literal 60928 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 delta 1176 zcmciBJ4?e*6bJBob5n&PRUuWhf(|+e#a$45MC+sV{T|f%sJ0peAEmVjt&$E7E}qp2 z4&5AzS;P+@2#!wT=-}X>NQWvI{}IIxU~u^5+}wLO=Uhlq_ab#8aw&=T(w-Cxf0(A( z#u#gd4p5;Jy1)nB&;wSU#gBCW`e6VDVF-p{1V+Ki8%LagNtgl(3Z=z5n8QmD=3xOA zVF^O83@c#eMG#kE4K$#fQ0P{8=~?VL>U=W?mBxk~lf{LRrPHEIo9R$% zFdXT3{@uxAL#N|y-bc~nBp;(Zp0gCqBzc(fnVj*U*Zkbcj!x%UyDMHfW&9x~1+KkL T>oZ}D19hIv+uiBzzdC&a!+$r7 diff --git a/Include/Win32/CxbxKrnl/EmuXapi.h b/Include/Win32/CxbxKrnl/EmuXapi.h index 344ff5cc0..3793e1097 100644 --- a/Include/Win32/CxbxKrnl/EmuXapi.h +++ b/Include/Win32/CxbxKrnl/EmuXapi.h @@ -285,6 +285,11 @@ XCALCSIG_SIGNATURE, *PXCALCSIG_SIGNATURE; // ****************************************************************** VOID WINAPI EmuXapiApplyKernelPatches(); +// ****************************************************************** +// * func: EmuXFormatUtilityDrive +// ****************************************************************** +BOOL WINAPI EmuXFormatUtilityDrive(); + // ****************************************************************** // * func: EmuRtlCreateHeap // ****************************************************************** diff --git a/Include/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h b/Include/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h index a1131cf9c..635d3b778 100644 --- a/Include/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h +++ b/Include/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h @@ -36,6 +36,7 @@ #include "OOVPA.h" +extern SOOVPA<7> XapiInitProcess_1_0_4928; extern OOVPATable XAPI_1_0_4627[]; extern uint32 XAPI_1_0_4627_SIZE; diff --git a/Include/Win32/CxbxKrnl/ResourceTracker.h b/Include/Win32/CxbxKrnl/ResourceTracker.h index 3eeeace00..1e7af7f13 100644 --- a/Include/Win32/CxbxKrnl/ResourceTracker.h +++ b/Include/Win32/CxbxKrnl/ResourceTracker.h @@ -86,7 +86,7 @@ extern class ResourceTracker : public Mutex } g_VBTrackTotal, g_VBTrackDisable, g_PBTrackTotal, g_PBTrackDisable, g_PBTrackShowOnce, -g_PatchedStreamsCache, g_DataToTexture; +g_PatchedStreamsCache, g_DataToTexture, g_AlignCache; struct RTNode { diff --git a/Source/Win32/CxbxKrnl/Emu.cpp b/Source/Win32/CxbxKrnl/Emu.cpp index b89bf44ae..ae3313be2 100644 --- a/Source/Win32/CxbxKrnl/Emu.cpp +++ b/Source/Win32/CxbxKrnl/Emu.cpp @@ -378,9 +378,18 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit uint16 MajorVersion = pLibraryVersion[v].wMajorVersion; uint16 MinorVersion = pLibraryVersion[v].wMinorVersion; uint16 BuildVersion = pLibraryVersion[v].wBuildVersion; + uint16 OrigBuildVersion = BuildVersion; + + // + // Aliases + // + { + if(BuildVersion == 4928) + BuildVersion = 4627; if(BuildVersion == 5659) BuildVersion = 5558; + } char szLibraryName[9] = {0}; @@ -438,10 +447,19 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit } else if(BuildVersion >= 4361) { + if(OrigBuildVersion == 4928) + { + pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_4928, lower, upper); + ProcessHeapOffs = 0x44; + RtlCreateHeapOffs = 0x3B; + } + else + { pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_4361, lower, upper); ProcessHeapOffs = 0x3E; RtlCreateHeapOffs = 0x37; } + } else // 3911, 4034, 4134 { pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_3911, lower, upper); @@ -608,7 +626,7 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit // _USE_XGMATH Disabled in mesh :[ // halo : dword_0_2E2D18 // halo : 1744F0 (bink) - //_asm int 3; + _asm int 3; /* for(int v=0;v XapiInitProcess_1_0_4361 = } }; - // ****************************************************************** // * XapiThreadStartup // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl index 8de064bff..2f93dcbad 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl @@ -32,6 +32,73 @@ // * // ****************************************************************** +// NOTE: This function actually came in with 4928 +// ****************************************************************** +// * XapiApplyKernelPatches +// ****************************************************************** +SOOVPA<7> XapiApplyKernelPatches_1_0_4928 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x17, 0x81 }, + { 0x2A, 0x81 }, + { 0x4B, 0x05 }, + { 0x5F, 0x1B }, + { 0x7C, 0xFF }, + { 0x88, 0x6A }, + { 0x92, 0xC7 }, + } +}; + +// NOTE: This function actually came in with 4928 +// ****************************************************************** +// * XapiInitProcess +// ****************************************************************** +SOOVPA<7> XapiInitProcess_1_0_4928 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + { 0x22, 0xC7 }, // (Offset,Value)-Pair #1 + { 0x23, 0x45 }, // (Offset,Value)-Pair #2 + { 0x24, 0xCC }, // (Offset,Value)-Pair #3 + { 0x25, 0x30 }, // (Offset,Value)-Pair #4 + { 0x4A, 0xA1 }, // (Offset,Value)-Pair #5 + { 0x4B, 0x18 }, // (Offset,Value)-Pair #6 + { 0x4C, 0x01 }, // (Offset,Value)-Pair #7 + } +}; + +// ****************************************************************** +// * XFormatUtilityDrive +// ****************************************************************** +SOOVPA<7> XFormatUtilityDrive_1_0_4627 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x10, 0x50 }, + { 0x23, 0xFF }, + { 0x34, 0xC0 }, + { 0x46, 0x45 }, + { 0x58, 0xFF }, + { 0x6D, 0x33 }, + { 0x7C, 0x40 }, + } +}; // ****************************************************************** // * SetThreadPriorityBoost // ****************************************************************** @@ -162,6 +229,36 @@ SOOVPA<10> RtlReAllocateHeap_1_0_4627 = // ****************************************************************** OOVPATable XAPI_1_0_4627[] = { + // XapiApplyKernelPatches + { + (OOVPA*)&XapiApplyKernelPatches_1_0_4928, + + XTL::EmuXapiApplyKernelPatches, + + #ifdef _DEBUG_TRACE + "EmuXapiApplyKernelPatches" + #endif + }, + // XapiInitProcess + { + (OOVPA*)&XapiInitProcess_1_0_4928, + + XTL::EmuXapiInitProcess, + + #ifdef _DEBUG_TRACE + "EmuXapiInitProcess" + #endif + }, + // XFormatUtilityDrive + { + (OOVPA*)&XFormatUtilityDrive_1_0_4627, + + XTL::EmuXFormatUtilityDrive, + + #ifdef _DEBUG_TRACE + "EmuXFormatUtilityDrive" + #endif + }, // SetThreadPriorityBoost { (OOVPA*)&SetThreadPriorityBoost_1_0_4627, diff --git a/Source/Win32/CxbxKrnl/ResourceTracker.cpp b/Source/Win32/CxbxKrnl/ResourceTracker.cpp index 49d743333..e700d7f0e 100644 --- a/Source/Win32/CxbxKrnl/ResourceTracker.cpp +++ b/Source/Win32/CxbxKrnl/ResourceTracker.cpp @@ -38,16 +38,18 @@ bool g_bVBSkipStream = false; bool g_bVBSkipPusher = false; +// +// all of our resource trackers +// + ResourceTracker g_VBTrackTotal; ResourceTracker g_VBTrackDisable; - ResourceTracker g_PBTrackTotal; ResourceTracker g_PBTrackDisable; ResourceTracker g_PBTrackShowOnce; - ResourceTracker g_PatchedStreamsCache; - ResourceTracker g_DataToTexture; +ResourceTracker g_AlignCache; ResourceTracker::~ResourceTracker() {