diff --git a/build/win32/CxbxKrnl.vcxproj b/build/win32/CxbxKrnl.vcxproj
index aa88caf26..d9df3af45 100644
--- a/build/win32/CxbxKrnl.vcxproj
+++ b/build/win32/CxbxKrnl.vcxproj
@@ -223,6 +223,8 @@
+
+
@@ -412,6 +414,7 @@
true
true
+
@@ -446,6 +449,7 @@
true
true
+
diff --git a/src/CxbxKrnl/EmuD3D8.cpp b/src/CxbxKrnl/EmuD3D8.cpp
index f41cf7bbd..f34e83a76 100644
--- a/src/CxbxKrnl/EmuD3D8.cpp
+++ b/src/CxbxKrnl/EmuD3D8.cpp
@@ -4340,7 +4340,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
{
case X_D3DCOMMON_TYPE_VERTEXBUFFER:
{
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Creating VertexBuffer...\n");
+ DbgPrintf("EmuIDirect3DResource8_Register : Creating VertexBuffer...\n");
X_D3DVertexBuffer *pVertexBuffer = (X_D3DVertexBuffer*)pResource;
@@ -4393,7 +4393,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
pResource->Data = (ULONG)pData;
}
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created VertexBuffer (0x%.08X)\n", pResource->EmuVertexBuffer8);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created VertexBuffer (0x%.08X)\n", pResource->EmuVertexBuffer8);
}
break;
@@ -4445,7 +4445,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
pResource->Data = (ULONG)pData;
}
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created IndexBuffer (0x%.08X)\n", pResource->EmuIndexBuffer8);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created IndexBuffer (0x%.08X)\n", pResource->EmuIndexBuffer8);
}
break;
@@ -4472,7 +4472,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
pResource->Data = (ULONG)pBase;
}
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created PushBuffer (0x%.08X, 0x%.08X, 0x%.08X)\n", pResource->Data, pPushBuffer->Size, pPushBuffer->AllocationSize);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created PushBuffer (0x%.08X, 0x%.08X, 0x%.08X)\n", pResource->Data, pPushBuffer->Size, pPushBuffer->AllocationSize);
}
break;
@@ -4660,8 +4660,8 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
DXGetErrorString8A(hRet), DXGetErrorDescription8A(hRet)*/);
;
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created ImageSurface (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuSurface8);
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Width : %d, Height : %d, Format : %d\n", dwWidth, dwHeight, Format);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created ImageSurface (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuSurface8);
+ DbgPrintf("EmuIDirect3DResource8_Register : Width : %d, Height : %d, Format : %d\n", dwWidth, dwHeight, Format);
}
else
{
@@ -4714,7 +4714,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
CxbxKrnlCleanup("CreateCubeTexture Failed!\n\nError: \nDesc: "/*,
DXGetErrorString8A(hRet), DXGetErrorDescription8A(hRet)*/);
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created CubeTexture (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuCubeTexture8);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created CubeTexture (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuCubeTexture8);
}
else
{
@@ -4747,7 +4747,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register
CxbxKrnlCleanup("CreateTexture Failed!\n\nError: \nDesc: "/*,
DXGetErrorString8A(hRet), DXGetErrorDescription8A(hRet)*/);
- DbgPrintf("EmuIDirect3DResource8_Register (0x%X) : Successfully Created Texture (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuTexture8);
+ DbgPrintf("EmuIDirect3DResource8_Register : Successfully Created Texture (0x%.08X, 0x%.08X)\n", pResource, pResource->EmuTexture8);
}
}
@@ -5170,7 +5170,7 @@ ULONG WINAPI XTL::EmuIDirect3DResource8_Release
if(uRet == 0)
{
- DbgPrintf("EmuIDirect3DResource8_Release (0x%X): Cleaned up a Resource!\n");
+ DbgPrintf("EmuIDirect3DResource8_Release : Cleaned up a Resource!\n");
#ifdef _DEBUG_TRACE_VB
if(Type == D3DRTYPE_VERTEXBUFFER)
@@ -7476,7 +7476,7 @@ XTL::X_D3DVertexBuffer* WINAPI XTL::EmuIDirect3DDevice8_GetStreamSource2
// debug trace
- DbgPrintf( "EmuD3D8 (0x%.08X): EmuIDirect3DDevice8_GetStreamSource2\n"
+ DbgPrintf( "EmuD3D8 : EmuIDirect3DDevice8_GetStreamSource2\n"
"(\n"
" StreamNumber : 0x%.08X\n"
" pStride : 0x%.08X\n"
@@ -7503,7 +7503,7 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetStreamSource
{
- DbgPrintf("EmuD3D8: EmuIDirect3DDevice8_SetStreamSource\n"
+ DbgPrintf("EmuD3D8 : EmuIDirect3DDevice8_SetStreamSource\n"
"(\n"
" StreamNumber : 0x%.08X\n"
" pStreamData : 0x%.08X (0x%.08X)\n"
@@ -8437,7 +8437,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DeleteVertexShader
{
- DbgPrintf( "EmuD3D8 (0x%.08X): EmuIDirect3DDevice8_DeleteVertexShader\n"
+ DbgPrintf( "EmuD3D8: EmuIDirect3DDevice8_DeleteVertexShader\n"
"(\n"
" Handle : 0x%.08X\n"
");\n",
diff --git a/src/CxbxKrnl/EmuXOnline.cpp b/src/CxbxKrnl/EmuXOnline.cpp
index 3eac7c053..d6bd1abd5 100644
--- a/src/CxbxKrnl/EmuXOnline.cpp
+++ b/src/CxbxKrnl/EmuXOnline.cpp
@@ -120,6 +120,76 @@ SOCKET XTL::EmuThis::Emusocket
RETURN(ret);
}
+// ******************************************************************
+// * func: EmuThis::Emuconnect
+// ******************************************************************
+int XTL::EmuThis::Emuconnect
+(
+ SOCKET s,
+ const struct sockaddr FAR *name,
+ int namelen
+)
+{
+ LOG_FUNC_BEGIN
+ LOG_FUNC_ARG(this)
+ LOG_FUNC_ARG(s)
+ LOG_FUNC_ARG(name)
+ LOG_FUNC_ARG(namelen)
+ LOG_FUNC_END;
+
+ int ret = connect(s, name, namelen);
+
+ RETURN(ret);
+}
+
+// ******************************************************************
+// * func: EmuThis::Emusend
+// ******************************************************************
+int XTL::EmuThis::Emusend
+(
+ SOCKET s,
+ const char FAR *buf,
+ int len,
+ int flags
+)
+{
+ LOG_FUNC_BEGIN
+ LOG_FUNC_ARG(this)
+ LOG_FUNC_ARG(s)
+ LOG_FUNC_ARG(buf)
+ LOG_FUNC_ARG(len)
+ LOG_FUNC_ARG(flags)
+ LOG_FUNC_END;
+
+ int ret = send(s, buf, len, flags);
+
+ RETURN(ret);
+}
+
+// ******************************************************************
+// * func: EmuThis::Emurecv
+// ******************************************************************
+int XTL::EmuThis::Emurecv
+(
+ SOCKET s,
+ char FAR *buf,
+ int len,
+ int flags
+)
+{
+ LOG_FUNC_BEGIN
+ LOG_FUNC_ARG(this)
+ LOG_FUNC_ARG(s)
+ LOG_FUNC_ARG(buf)
+ LOG_FUNC_ARG(len)
+ LOG_FUNC_ARG(flags)
+ LOG_FUNC_END;
+
+ int ret = recv(s, buf, len, flags);
+
+ RETURN(ret);
+}
+
// ******************************************************************
// * func: EmuThis::Emubind
// ******************************************************************
diff --git a/src/CxbxKrnl/EmuXOnline.h b/src/CxbxKrnl/EmuXOnline.h
index ea1db8411..af6055e7d 100644
--- a/src/CxbxKrnl/EmuXOnline.h
+++ b/src/CxbxKrnl/EmuXOnline.h
@@ -53,6 +53,21 @@ class EmuThis
// ******************************************************************
SOCKET Emusocket(int af, int type, int protocol);
+ // ******************************************************************
+ // * func: EmuThis::Emuconnect
+ // ******************************************************************
+ int Emuconnect(SOCKET s, const struct sockaddr FAR *name, int namelen);
+
+ // ******************************************************************
+ // * func: EmuThis::Emusend
+ // ******************************************************************
+ int Emusend(SOCKET s, const char FAR *buf, int len, int flags);
+
+ // ******************************************************************
+ // * func: EmuThis::Emurecv
+ // ******************************************************************
+ int Emurecv(SOCKET s, char FAR *buf, int len, int flags);
+
// ******************************************************************
// * func: Emubind
// ******************************************************************
diff --git a/src/CxbxKrnl/HLEDataBase.cpp b/src/CxbxKrnl/HLEDataBase.cpp
index c502eef99..6baf8f3d4 100644
--- a/src/CxbxKrnl/HLEDataBase.cpp
+++ b/src/CxbxKrnl/HLEDataBase.cpp
@@ -61,6 +61,7 @@ const char *Lib_XONLINES = "XONLINES";
#include "HLEDataBase/Xapi.1.0.4361.inl"
#include "HLEDataBase/Xapi.1.0.4432.inl"
#include "HLEDataBase/Xapi.1.0.4627.inl"
+#include "HLEDataBase/Xapi.1.0.4721.inl"
#include "HLEDataBase/Xapi.1.0.5233.inl"
#include "HLEDataBase/Xapi.1.0.5558.inl"
#include "HLEDataBase/Xapi.1.0.5849.inl"
@@ -91,6 +92,7 @@ const char *Lib_XONLINES = "XONLINES";
#include "HLEDataBase/XG.1.0.5558.inl"
#include "HLEDataBase/XG.1.0.5849.inl"
#include "HLEDataBase/XNet.1.0.3911.inl"
+#include "HLEDataBase/XNet.1.0.4627.inl"
#include "HLEDataBase/XOnline.1.0.4361.inl"
#include "HLEDataBase/XOnline.1.0.4627.inl"
#include "HLEDataBase/XOnline.1.0.5233.inl"
@@ -145,7 +147,14 @@ HLEData HLEDataBase[] =
XAPI_1_0_4627,
XAPI_1_0_4627_SIZE
},
- // Xapilib Version 1.0.5233
+ // Xapilib Version 1.0.4721
+ {
+ Lib_XAPILIB,
+ 1, 0, 4721,
+ XAPI_1_0_4721,
+ XAPI_1_0_4721_SIZE
+ },
+ // Xapilib Version 1.0.5233
{
Lib_XAPILIB,
1, 0, 5233,
@@ -355,6 +364,13 @@ HLEData HLEDataBase[] =
XNet_1_0_3911,
XNet_1_0_3911_SIZE
},
+ // XNet Version 1.0.4627
+ {
+ Lib_XNETS,
+ 1, 0, 4627,
+ XNet_1_0_4627,
+ XNet_1_0_4627_SIZE
+ },
// XOnline Version 1.0.4361
{
Lib_XONLINE, // TODO : Typo for XONLINES?
diff --git a/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.h b/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.h
new file mode 100644
index 000000000..49c31bd1f
--- /dev/null
+++ b/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.h
@@ -0,0 +1,42 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->XNet.1.0.4627.h
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// *
+// * All rights reserved
+// *
+// ******************************************************************
+#ifndef XNET_1_0_4627_H
+#define XNET_1_0_4627_H
+
+#include "OOVPA.h"
+
+extern OOVPATable XNet_1_0_4627[];
+extern uint32 XNet_1_0_4627_SIZE;
+
+#endif
diff --git a/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.inl
new file mode 100644
index 000000000..e4094b2a8
--- /dev/null
+++ b/src/CxbxKrnl/HLEDataBase/XNet.1.0.4627.inl
@@ -0,0 +1,353 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->XNet.1.0.4627.cpp
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// *
+// * All rights reserved
+// *
+// ******************************************************************
+
+// ******************************************************************
+// * XnInit
+// ******************************************************************
+OOVPA_XREF_LARGE(XnInit_1_0_4627, 18,
+
+ XREF_XNINIT,
+ XRefZero)
+
+ // XnInit+0x0000 : push ebp
+ { 0x0000, 0x55 }, // (Offset,Value)-Pair #1
+
+ // XnInit+0x0003 : sub esp, 0x0218
+ { 0x0003, 0x81 }, // (Offset,Value)-Pair #2
+ { 0x0004, 0xEC }, // (Offset,Value)-Pair #3
+ { 0x0005, 0x18 }, // (Offset,Value)-Pair #4
+ { 0x0006, 0x02 }, // (Offset,Value)-Pair #5
+
+ // XnInit+0x0019 : cmpxchg [ecx], edx
+ { 0x0019, 0x0F }, // (Offset,Value)-Pair #6
+ { 0x001A, 0xB1 }, // (Offset,Value)-Pair #7
+ { 0x001B, 0x11 }, // (Offset,Value)-Pair #8
+
+ // XnInit+0x0041 : push 0x0AF8
+ { 0x0041, 0x68 }, // (Offset,Value)-Pair #9
+ { 0x0042, 0xF8 }, // (Offset,Value)-Pair #10
+ { 0x0043, 0x0A }, // (Offset,Value)-Pair #11
+
+ // XnInit+0x01FA : OR DWORD PTR SS:[EBP-4],FFFFFFFF
+ { 0x01FA, 0x83 }, // (Offset,Value)-Pair #12
+ { 0x01FB, 0x4D }, // (Offset,Value)-Pair #13
+ { 0x01FC, 0xFC }, // (Offset,Value)-Pair #14
+ { 0x01FD, 0xFF }, // (Offset,Value)-Pair #15
+
+ // XnInit+0x0203 : retn 18h
+ { 0x0203, 0xC2 }, // (Offset,Value)-Pair #16
+ { 0x0204, 0x18 }, // (Offset,Value)-Pair #17
+ { 0x0205, 0x00 }, // (Offset,Value)-Pair #18
+OOVPA_END;
+
+// ******************************************************************
+// * XNetStartup
+// ******************************************************************
+OOVPA_XREF(XNetStartup_1_0_4627, 8,
+
+ XRefNoSaveIndex,
+ XRefOne)
+
+ // XNetStartup+0x0F : call [XnInit]
+ { 0x10, XREF_XNINIT }, // (Offset,Value)-Pair #1
+
+ // XNetStartup+0x00 : xor eax, eax
+ { 0x00, 0x33 }, // (Offset,Value)-Pair #2
+ { 0x01, 0xC0 }, // (Offset,Value)-Pair #3
+
+ // XNetStartup+0x02 : push eax
+ { 0x02, 0x50 }, // (Offset,Value)-Pair #4
+
+ // XNetStartup+0x03 : push eax
+ { 0x03, 0x50 }, // (Offset,Value)-Pair #5
+
+ // XNetStartup+0x04 : push eax
+ { 0x04, 0x50 }, // (Offset,Value)-Pair #6
+
+ // XNetStartup+0x14 : retn 0x04
+ { 0x14, 0xC2 }, // (Offset,Value)-Pair #7
+ { 0x15, 0x04 }, // (Offset,Value)-Pair #8
+OOVPA_END;
+
+// ******************************************************************
+// * WSAStartup
+// ******************************************************************
+OOVPA_XREF(WSAStartup_1_0_4627, 9,
+
+ XRefNoSaveIndex,
+ XRefOne)
+
+ // WSAStartup+0x0F : call [XnInit]
+ { 0x14, XREF_XNINIT }, // (Offset,Value)-Pair #1
+
+ // WSAStartup+0x00 : push [esp+0x08]
+ { 0x00, 0xFF }, // (Offset,Value)-Pair #2
+ { 0x01, 0x74 }, // (Offset,Value)-Pair #3
+ { 0x02, 0x24 }, // (Offset,Value)-Pair #4
+ { 0x03, 0x08 }, // (Offset,Value)-Pair #5
+
+ // WSAStartup+0x04 : push [esp+0x08]
+ { 0x04, 0xFF }, // (Offset,Value)-Pair #6
+ { 0x05, 0x74 }, // (Offset,Value)-Pair #7
+ { 0x06, 0x24 }, // (Offset,Value)-Pair #8
+ { 0x07, 0x08 }, // (Offset,Value)-Pair #9
+OOVPA_END;
+
+///////
+// ******************************************************************
+// * socket
+// ******************************************************************
+OOVPA_NO_XREF_LARGE(socket_1_0_4627, 20)
+
+ // socket+0x13 : push 0x276D
+ { 0x0013, 0x68 }, // (Offset,Value)-Pair #1
+ { 0x0014, 0x6D }, // (Offset,Value)-Pair #2
+ { 0x0015, 0x27 }, // (Offset,Value)-Pair #3
+
+ // socket+0x69 : cmp edi, 0x11
+ { 0x0069, 0x83 }, // (Offset,Value)-Pair #4
+ { 0x006A, 0xFF }, // (Offset,Value)-Pair #5
+ { 0x006B, 0x11 }, // (Offset,Value)-Pair #6
+
+ // socket+0x8C : SETNE DL
+ { 0x008C, 0x0F }, // (Offset,Value)-Pair #7
+ { 0x008D, 0x95 }, // (Offset,Value)-Pair #8
+ { 0x008E, 0xC2 }, // (Offset,Value)-Pair #9
+
+ // socket+0xAE : MOV EAX,273B
+ { 0x00AE, 0xB8 }, // (Offset,Value)-Pair #10
+ { 0x00AF, 0x3B }, // (Offset,Value)-Pair #11
+ { 0x00B0, 0x27 }, // (Offset,Value)-Pair #12
+ { 0x00B1, 0x00 }, // (Offset,Value)-Pair #13
+ { 0x00B2, 0x00 }, // (Offset,Value)-Pair #14
+
+ // socket+0x0116 : mov [esi+4], ecx
+ { 0x0116, 0x89 }, // (Offset,Value)-Pair #15
+ { 0x0117, 0x4E }, // (Offset,Value)-Pair #16
+ { 0x0118, 0x04 }, // (Offset,Value)-Pair #17
+
+ // socket+0x012D : retn 0C
+ { 0x012D, 0xC2 }, // (Offset,Value)-Pair #18
+ { 0x012E, 0x0C }, // (Offset,Value)-Pair #19
+ { 0x012F, 0x00 }, // (Offset,Value)-Pair #20
+OOVPA_END;
+
+// ******************************************************************
+// * socket
+// ******************************************************************
+OOVPA_NO_XREF(connect_1_0_4627, 24)
+
+ // connect+0x00 : push ebp
+ { 0x00, 0x55 }, // (Offset,Value)-Pair #1
+
+ // connect+0x0B : je short +09
+ { 0x0B, 0x74 }, // (Offset,Value)-Pair #2
+ { 0x0C, 0x09 }, // (Offset,Value)-Pair #3
+
+ // connect+0x16 : PUSH 276D
+ { 0x16, 0x68 }, // (Offset,Value)-Pair #4
+ { 0x17, 0x6D }, // (Offset,Value)-Pair #5
+ { 0x18, 0x27 }, // (Offset,Value)-Pair #6
+ { 0x19, 0x00 }, // (Offset,Value)-Pair #7
+ { 0x1A, 0x00 }, // (Offset,Value)-Pair #8
+
+ // connect+0x42 : TEST DL,40
+ { 0x42, 0xF6 }, // (Offset,Value)-Pair #9
+ { 0x43, 0xC2 }, // (Offset,Value)-Pair #10
+ { 0x44, 0x40 }, // (Offset,Value)-Pair #11
+
+ // connect+0x68 : PUSH DWORD PTR SS:[EBP+8]
+ { 0x68, 0xFF }, // (Offset,Value)-Pair #12
+ { 0x69, 0x75 }, // (Offset,Value)-Pair #13
+ { 0x6A, 0x08 }, // (Offset,Value)-Pair #14
+
+ // connect+0x8F : MOV ESI,80072733
+ { 0x8F, 0xBE }, // (Offset,Value)-Pair #15
+ { 0x90, 0x33 }, // (Offset,Value)-Pair #16
+ { 0x91, 0x27 }, // (Offset,Value)-Pair #17
+ { 0x92, 0x07 }, // (Offset,Value)-Pair #18
+ { 0x93, 0x80 }, // (Offset,Value)-Pair #19
+
+ // connect+0xCD : PUSH -1
+ { 0xCD, 0x6A }, // (Offset,Value)-Pair #20
+ { 0xCE, 0xFF }, // (Offset,Value)-Pair #21
+
+ // connect+0xE6 : retn 0C
+ { 0xE6, 0xC2 }, // (Offset,Value)-Pair #22
+ { 0xE7, 0x0C }, // (Offset,Value)-Pair #23
+ { 0xE8, 0x00 }, // (Offset,Value)-Pair #24
+OOVPA_END;
+
+// ******************************************************************
+// * send
+// ******************************************************************
+OOVPA_NO_XREF(send_1_0_4627, 24)
+
+ // send+0x00 : push ebp
+ { 0x00, 0x55 }, // (Offset,Value)-Pair #1
+
+ // send+0x17 : push 0x276D
+ { 0x17, 0x68 }, // (Offset,Value)-Pair #2
+ { 0x18, 0x6D }, // (Offset,Value)-Pair #3
+ { 0x19, 0x27 }, // (Offset,Value)-Pair #4
+
+ // send+0x24 : jmp
+ { 0x24, 0xEB }, // (Offset,Value)-Pair #5
+ { 0x25, 0x6A }, // (Offset,Value)-Pair #6
+
+ // send+0x51 : LEA EAX,DWORD PTR SS:[EBP-20]
+ { 0x51, 0x8D }, // (Offset,Value)-Pair #7
+ { 0x52, 0x45 }, // (Offset,Value)-Pair #8
+ { 0x53, 0xE0 }, // (Offset,Value)-Pair #9
+
+ // send+0x6C : JL SHORT +04
+ { 0x6C, 0x7C }, // (Offset,Value)-Pair #10
+ { 0x6D, 0x04 }, // (Offset,Value)-Pair #11
+
+ // send+0x7B : MOV DWORD PTR DS:[ESI+8],2B434F53
+ { 0x7B, 0xC7 }, // (Offset,Value)-Pair #12
+ { 0x7C, 0x46 }, // (Offset,Value)-Pair #13
+ { 0x7D, 0x08 }, // (Offset,Value)-Pair #14
+ { 0x7E, 0x53 }, // (Offset,Value)-Pair #15
+ { 0x7F, 0x4F }, // (Offset,Value)-Pair #16
+ { 0x80, 0x43 }, // (Offset,Value)-Pair #17
+ { 0x81, 0x2B }, // (Offset,Value)-Pair #18
+
+ // send+0x8C : MOV EAX,DWORD PTR SS:[EBP-10]
+ { 0x8C, 0x8B }, // (Offset,Value)-Pair #19
+ { 0x8D, 0x45 }, // (Offset,Value)-Pair #20
+ { 0x8E, 0xF0 }, // (Offset,Value)-Pair #21
+
+ // send+0x92 : retn 10h
+ { 0x92, 0xC2 }, // (Offset,Value)-Pair #22
+ { 0x93, 0x10 }, // (Offset,Value)-Pair #23
+ { 0x94, 0x00 }, // (Offset,Value)-Pair #24
+OOVPA_END;
+
+// ******************************************************************
+// * recv
+// ******************************************************************
+OOVPA_NO_XREF(recv_1_0_4627, 24)
+
+ // recv+0x00 : push ebp
+ { 0x00, 0x55 }, // (Offset,Value)-Pair #1
+
+ // recv+0x17 : push 0x276D
+ { 0x17, 0x68 }, // (Offset,Value)-Pair #2
+ { 0x18, 0x6D }, // (Offset,Value)-Pair #3
+ { 0x19, 0x27 }, // (Offset,Value)-Pair #4
+
+ // recv+0x24 : jmp
+ { 0x24, 0xEB }, // (Offset,Value)-Pair #5
+ { 0x25, 0x66 }, // (Offset,Value)-Pair #6
+
+ // recv+0x51 : MOV DWORD PTR SS:[EBP-14],EAX
+ { 0x51, 0x89 }, // (Offset,Value)-Pair #7
+ { 0x52, 0x45 }, // (Offset,Value)-Pair #8
+ { 0x53, 0xEC }, // (Offset,Value)-Pair #9
+
+ // recv+0x68 : JL SHORT +04
+ { 0x68, 0x7C }, // (Offset,Value)-Pair #10
+ { 0x69, 0x04 }, // (Offset,Value)-Pair #11
+
+ // recv+0x77 : MOV DWORD PTR DS:[ESI+8],2B434F53
+ { 0x77, 0xC7 }, // (Offset,Value)-Pair #12
+ { 0x78, 0x46 }, // (Offset,Value)-Pair #13
+ { 0x79, 0x08 }, // (Offset,Value)-Pair #14
+ { 0x7A, 0x53 }, // (Offset,Value)-Pair #15
+ { 0x7B, 0x4F }, // (Offset,Value)-Pair #16
+ { 0x7C, 0x43 }, // (Offset,Value)-Pair #17
+ { 0x7D, 0x2B }, // (Offset,Value)-Pair #18
+
+ // recv+0x88 : MOV EAX,DWORD PTR SS:[EBP+8]
+ { 0x88, 0x8B }, // (Offset,Value)-Pair #19
+ { 0x89, 0x45 }, // (Offset,Value)-Pair #20
+ { 0x8A, 0x08 }, // (Offset,Value)-Pair #21
+
+ // recv+0x8E : retn 10h
+ { 0x8E, 0xC2 }, // (Offset,Value)-Pair #22
+ { 0x8F, 0x10 }, // (Offset,Value)-Pair #23
+ { 0x90, 0x00 }, // (Offset,Value)-Pair #24
+OOVPA_END;
+
+// ******************************************************************
+// * ioctlsocket
+// ******************************************************************
+OOVPA_NO_XREF(ioctlsocket_1_0_4627, 10)
+
+ // ioctlsocket+0x13 : push 0x276D
+ { 0x13, 0x68 }, // (Offset,Value)-Pair #1
+ { 0x14, 0x6D }, // (Offset,Value)-Pair #2
+ { 0x15, 0x27 }, // (Offset,Value)-Pair #3
+
+ // ioctlsocket+0x62 : lea edx, [esi+0x24]
+ { 0x62, 0x8D }, // (Offset,Value)-Pair #4
+ { 0x63, 0x56 }, // (Offset,Value)-Pair #5
+ { 0x64, 0x24 }, // (Offset,Value)-Pair #6
+
+ // ioctlsocket+0x81 : mov cl, al
+ { 0x81, 0x8A }, // (Offset,Value)-Pair #7
+ { 0x82, 0xC8 }, // (Offset,Value)-Pair #8
+
+ // ioctlsocket+0xC6 : retn 0x0C
+ { 0xC6, 0xC2 }, // (Offset,Value)-Pair #9
+ { 0xC7, 0x0C }, // (Offset,Value)-Pair #10
+OOVPA_END;
+
+// ******************************************************************
+// * XNet_1_0_4627
+// ******************************************************************
+OOVPATable XNet_1_0_4627[] = {
+ // XNetStartup
+ OOVPA_TABLE_PATCH(XNetStartup_1_0_4627, XTL::EmuXNetStartup), // same as xonline 4361
+ // WSAStartup
+ OOVPA_TABLE_PATCH(WSAStartup_1_0_4627, XTL::EmuWSAStartup), // same as xonline 4361
+ // XnInit (XREF)
+ OOVPA_TABLE_XREF(XnInit_1_0_4627),
+ // socket
+ OOVPA_TABLE_PATCH(socket_1_0_4627, MFPtoFP(&XTL::EmuThis::Emusocket)),
+ // connect
+ OOVPA_TABLE_PATCH(connect_1_0_4627, MFPtoFP(&XTL::EmuThis::Emuconnect)),
+ // send
+ OOVPA_TABLE_PATCH(send_1_0_4627, MFPtoFP(&XTL::EmuThis::Emusend)),
+ // recv
+ OOVPA_TABLE_PATCH(recv_1_0_4627, MFPtoFP(&XTL::EmuThis::Emurecv)),
+ // ioctlsocket
+ OOVPA_TABLE_PATCH(ioctlsocket_1_0_4627, MFPtoFP(&XTL::EmuThis::Emuioctlsocket)),
+};
+
+// ******************************************************************
+// * XNet_1_0_4627_SIZE
+// ******************************************************************
+uint32 XNet_1_0_4627_SIZE = sizeof(XNet_1_0_4627);
diff --git a/src/CxbxKrnl/HLEDataBase/XOnline.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/XOnline.1.0.4627.inl
index 5118f2fc1..194feb353 100644
--- a/src/CxbxKrnl/HLEDataBase/XOnline.1.0.4627.inl
+++ b/src/CxbxKrnl/HLEDataBase/XOnline.1.0.4627.inl
@@ -33,31 +33,31 @@
// ******************************************************************
// ******************************************************************
-// * XnInit
+// * XnInit -> Belongs in XNet lib
// ******************************************************************
-OOVPA_XREF(XnInit_1_0_4627, 12,
-
- XREF_XNINIT,
- XRefZero)
-
- // XnInit+0x03 : sub esp, 0x0218
- { 0x03, 0x81 }, // (Offset,Value)-Pair #1
- { 0x04, 0xEC }, // (Offset,Value)-Pair #2
- { 0x05, 0x18 }, // (Offset,Value)-Pair #3
- { 0x06, 0x02 }, // (Offset,Value)-Pair #4
-
- // XnInit+0x19 : cmpxchg [ecx], edx
- { 0x19, 0x0F }, // (Offset,Value)-Pair #5
- { 0x1A, 0xB1 }, // (Offset,Value)-Pair #6
- { 0x1B, 0x11 }, // (Offset,Value)-Pair #7
-
- // XnInit+0x3C : push 0x4454454E
- { 0x3C, 0x68 }, // (Offset,Value)-Pair #8
- { 0x3D, 0x4E }, // (Offset,Value)-Pair #9
- { 0x3E, 0x45 }, // (Offset,Value)-Pair #10
- { 0x3F, 0x54 }, // (Offset,Value)-Pair #11
- { 0x40, 0x44 }, // (Offset,Value)-Pair #12
-OOVPA_END;
+//OOVPA_XREF(XnInit_1_0_4627, 12,
+//
+// XREF_XNINIT,
+// XRefZero)
+//
+// // XnInit+0x03 : sub esp, 0x0218
+// { 0x03, 0x81 }, // (Offset,Value)-Pair #1
+// { 0x04, 0xEC }, // (Offset,Value)-Pair #2
+// { 0x05, 0x18 }, // (Offset,Value)-Pair #3
+// { 0x06, 0x02 }, // (Offset,Value)-Pair #4
+//
+// // XnInit+0x19 : cmpxchg [ecx], edx
+// { 0x19, 0x0F }, // (Offset,Value)-Pair #5
+// { 0x1A, 0xB1 }, // (Offset,Value)-Pair #6
+// { 0x1B, 0x11 }, // (Offset,Value)-Pair #7
+//
+// // XnInit+0x3C : push 0x4454454E
+// { 0x3C, 0x68 }, // (Offset,Value)-Pair #8
+// { 0x3D, 0x4E }, // (Offset,Value)-Pair #9
+// { 0x3E, 0x45 }, // (Offset,Value)-Pair #10
+// { 0x3F, 0x54 }, // (Offset,Value)-Pair #11
+// { 0x40, 0x44 }, // (Offset,Value)-Pair #12
+//OOVPA_END;
// ******************************************************************
// * XNetGetEthernetLinkStatus
diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.h b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.h
new file mode 100644
index 000000000..837727de3
--- /dev/null
+++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.h
@@ -0,0 +1,42 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->Xapi.1.0.4721.h
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// *
+// * All rights reserved
+// *
+// ******************************************************************
+#ifndef XAPI_1_0_4721_H
+#define XAPI_1_0_4721_H
+
+#include "OOVPA.h"
+
+extern OOVPATable XAPI_1_0_4721[];
+extern uint32 XAPI_1_0_4721_SIZE;
+
+#endif
diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.inl b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.inl
new file mode 100644
index 000000000..280da04c3
--- /dev/null
+++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4721.inl
@@ -0,0 +1,86 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->Xapi.1.0.4721.cpp
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// *
+// * All rights reserved
+// *
+// ******************************************************************
+
+// ******************************************************************
+// * XAPI_1_0_4721
+// ******************************************************************
+OOVPATable XAPI_1_0_4721[] = {
+ /*
+ // RtlCreateHeap (* unchanged since 1.0.4361 *) (* OR FARTHER *)
+ obsolete OOVPA_TABLE_PATCH(RtlCreateHeap_1_0_3911, XTL::EmuRtlCreateHeap),
+ // RtlAllocateHeap (* unchanged since 1.0.4361 *) (* OR FARTHER *)
+ obsolete OOVPA_TABLE_PATCH(RtlAllocateHeap_1_0_3911, XTL::EmuRtlAllocateHeap),
+ // RtlReAllocateHeap
+ obsolete OOVPA_TABLE_PATCH(RtlReAllocateHeap_1_0_4627, XTL::EmuRtlReAllocateHeap),
+ // RtlFreeHeap
+ obsolete OOVPA_TABLE_PATCH(RtlFreeHeap_1_0_4627, XTL::EmuRtlFreeHeap),
+ // RtlSizeHeap
+ obsolete OOVPA_TABLE_PATCH(RtlSizeHeap_1_0_4627, XTL::EmuRtlSizeHeap),
+ // RtlDestroyHeap
+ obsolete OOVPA_TABLE_PATCH(RtlDestroyHeap_1_0_4627, XTL::EmuRtlDestroyHeap),
+ */
+ // XMountUtilityDrive
+ OOVPA_TABLE_PATCH(XMountUtilityDrive_1_0_4432, XTL::EmuXMountUtilityDrive),
+ // XInitDevices (* unchanged since 1.0.3911 *)
+ OOVPA_TABLE_PATCH(XInitDevices_1_0_3911, XTL::EmuXInitDevices),
+ // XGetDevices (* unchanged since 1.0.4134 *)
+ OOVPA_TABLE_PATCH(XGetDevices_1_0_4134, XTL::EmuXGetDevices),
+ // XInputOpen (* unchanged since 1.0.4361 *)
+ OOVPA_TABLE_PATCH(XInputOpen_1_0_4361, XTL::EmuXInputOpen),
+ // XInputGetCapabilities (* unchanged since 1.0.4361 *)
+ OOVPA_TABLE_PATCH(XInputGetCapabilities_1_0_4361, XTL::EmuXInputGetCapabilities),
+ // XInputGetState (* unchanged since 1.0.4361 *)
+ OOVPA_TABLE_PATCH(XInputGetState_1_0_4361, XTL::EmuXInputGetState),
+ // XInputSetState (* unchanged since 1.0.4361 *)
+ OOVPA_TABLE_PATCH(XInputSetState_1_0_4361, XTL::EmuXInputSetState),
+ // XID_fCloseDevice (* unchanged since 1.0.4361 *)
+ OOVPA_TABLE_XREF(XID_fCloseDevice_1_0_4361),
+ // XInputClose (* unchanged since 1.0.3911 *)
+ OOVPA_TABLE_PATCH(XInputClose_1_0_3911, XTL::EmuXInputClose),
+ // XInputClose (* unchanged since 1.0.4361 *)
+ // OOVPA_TABLE_PATCH(XInputClose_1_0_4361, XTL::EmuXInputClose),
+ // XapiThreadStartup (* unchanged since 1.0.4361 *)
+ // obsolete OOVPA_TABLE_PATCH(XapiThreadStartup_1_0_4361, XTL::EmuXapiThreadStartup),
+ //* Too High Level
+ // XapiInitProcess (* unchanged since 1.0.4361 *)
+ // obsolete OOVPA_TABLE_PATCH(XapiInitProcess_1_0_4361, XTL::EmuXapiInitProcess),
+ //*/
+ // XapiBootToDash (* unchanged since 1.0.3911 *)
+ /* obsolete OOVPA_TABLE_PATCH(XapiBootDash_1_0_3911, XTL::EmuXapiBootDash),*/
+};
+
+// ******************************************************************
+// * XAPI_1_0_4721_SIZE
+// ******************************************************************
+uint32 XAPI_1_0_4721_SIZE = sizeof(XAPI_1_0_4721);