64bit version now works. Temp hack in for WSA x64 crash.

This commit is contained in:
Justin Marshall
2020-06-22 13:22:35 -07:00
parent e3c998fb16
commit 9edbf56043
22 changed files with 33 additions and 29 deletions
+1 -1
View File
@@ -724,5 +724,5 @@ add_executable(RedAlert ${src_io} ${src_win32lib} ${src_redalert} ${src_external
set_target_properties(RedAlert PROPERTIES OUTPUT_NAME "RedAlert" LINK_FLAGS "/PDB:\"RedAlert.pdb\" /SUBSYSTEM:WINDOWS" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../" )
target_include_directories(RedAlert PRIVATE ./external/xml/;./external/devil/;./external/;./redalert/win32lib;./external/lua/;./external/imgui;./external/dxsdk/Include;./external/ffmpeg-win32/include;./external/sdl2/include;./win32lib;./external/openal/include)
target_link_libraries(RedAlert "opengl32.lib" "winmm.lib" "Ws2_32.lib" "${CMAKE_SOURCE_DIR}/external/devil/ilu.lib" "${CMAKE_SOURCE_DIR}/external/devil/DevIL.lib" "${CMAKE_SOURCE_DIR}/external/sdl2/lib/x86/SDL2.lib" "${CMAKE_SOURCE_DIR}/external/openal/out/build/x86-Release/OpenAL32.lib")
target_link_libraries(RedAlert "opengl32.lib" "winmm.lib" "Ws2_32.lib" "${CMAKE_SOURCE_DIR}/external/devil/ilu.lib" "${CMAKE_SOURCE_DIR}/external/devil/DevIL.lib" "${CMAKE_SOURCE_DIR}/external/sdl2/lib/x64/SDL2.lib" "${CMAKE_SOURCE_DIR}/external/openal/out/build/x64-Release/OpenAL32.lib")
+4 -4
View File
@@ -1,7 +1,7 @@
{
"configurations": [
{
"name": "x86-Debug",
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\out\\build\\${name}",
@@ -9,11 +9,11 @@
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": []
},
{
"name": "x86-Release",
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
@@ -21,7 +21,7 @@
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": []
}
]
+1 -1
View File
@@ -3656,7 +3656,7 @@ void CC_Draw_Shape(void const * shapefile, int shapenum, int x, int y, WindowNum
{
int predoffset;
#ifdef WIN32
unsigned long shape_pointer;
INT_PTR shape_pointer;
#endif //WIN32
+1 -1
View File
@@ -715,7 +715,7 @@ long __cdecl Buffer_Frame_To_Page(int shapeNum, int x, int y, int w, int h, Imag
/*
** KEYFRAME.CPP
*/
unsigned long Build_Frame(void const *dataptr, unsigned short framenumber, void *buffptr);
INT_PTR Build_Frame(void const *dataptr, unsigned short framenumber, void *buffptr);
unsigned short Get_Build_Frame_Count(void const *dataptr);
unsigned short Get_Build_Frame_X(void const *dataptr);
unsigned short Get_Build_Frame_Y(void const *dataptr);
+2 -2
View File
@@ -1260,9 +1260,9 @@ void* Build_Frame2(void* shape, uint16_t frame, void* buffer)
return buffer;
}
unsigned long Build_Frame(void const* dataptr, unsigned short framenumber, void* buffptr) {
INT_PTR Build_Frame(void const* dataptr, unsigned short framenumber, void* buffptr) {
UseBigShapeBuffer = false;
return (unsigned long)Build_Frame2((void *)dataptr, framenumber, buffptr); // 32 bit to 64 bit issue
return (INT_PTR)Build_Frame2((void *)dataptr, framenumber, buffptr); // 32 bit to 64 bit issue
}
unsigned short Get_Build_Frame_Count(void* shape)
+1 -1
View File
@@ -854,7 +854,7 @@ int VectorClass<T>::operator == (VectorClass<T> const & vector) const
template<class T>
inline int VectorClass<T>::ID(T const * ptr)
{
return(((unsigned long)ptr - (unsigned long)&(*this)[0]) / sizeof(T));
return(((INT_PTR)ptr - (INT_PTR)&(*this)[0]) / sizeof(T));
}
+2 -2
View File
@@ -284,7 +284,7 @@ void GraphicBufferClass::Init(int w, int h, void *buffer, long size, GBC_Enum fl
Buffer = new BYTE[Size]; // otherwise allocate it and
Allocated = TRUE; // mark it system alloced
}
Offset = (long)Buffer; // Get offset to the buffer
Offset = (INT_PTR)Buffer; // Get offset to the buffer
IsDirectDraw = FALSE;
}
@@ -502,7 +502,7 @@ BOOL GraphicBufferClass::Lock(void)
return(TRUE);
}
Offset = (unsigned long)backbuffer_data_raw; // 32bit to 64bit issue here.
Offset = (INT_PTR)backbuffer_data_raw;
//Pitch = Width;
LockCount++; // increment count so we can track if
+4 -4
View File
@@ -261,7 +261,7 @@ class GraphicViewPortClass {
/*===================================================================*/
/* define functions to get at the private data members */
/*===================================================================*/
long Get_Offset(void);
INT_PTR Get_Offset(void);
int Get_Height(void);
int Get_Width(void);
int Get_XAdd(void);
@@ -351,7 +351,7 @@ class GraphicViewPortClass {
/*===================================================================*/
/* Define the data used by a GraphicViewPortClass */
/*===================================================================*/
long Offset; // offset to graphic page
INT_PTR Offset; // offset to graphic page
int Width; // width of graphic page
int Height; // height of graphic page
int XAdd; // xadd for graphic page (0)
@@ -506,10 +506,10 @@ inline BOOL GraphicViewPortClass::Unlock(void)
* HISTORY: *
* 06/07/1994 PWG : Created. *
*=========================================================================*/
inline long GraphicViewPortClass::Get_Offset(void)
inline INT_PTR GraphicViewPortClass::Get_Offset(void)
{
if(Offset == 0) {
return (long)Get_Graphic_Buffer()->GetMemoryBuffer();
return (INT_PTR)Get_Graphic_Buffer()->GetMemoryBuffer();
}
return(Offset);
+1 -1
View File
@@ -91,7 +91,7 @@ extern "C" {
}
inline void *Add_Long_To_Pointer(void const *ptr, long size)
inline void *Add_Long_To_Pointer(void const *ptr, INT_PTR size)
{
return ((void *) ( (char const *) ptr + size));
}
+2 -2
View File
@@ -119,7 +119,7 @@ WinTimerClass::WinTimerClass (UINT freq, BOOL partial)
//
//TimerHandle = timeSetEvent ( 1000/freq , 1 , Timer_Callback , 0 , TIME_PERIODIC);
// Add TIME_KILL_SYNCHRONOUS flag. ST - 2/13/2019 5:07PM
TimerHandle = timeSetEvent ( 1000/freq , 1 , Timer_Callback , 0 , TIME_PERIODIC | TIME_KILL_SYNCHRONOUS);
TimerHandle = timeSetEvent ( 1000/freq , 1 , (LPTIMECALLBACK)Timer_Callback , 0 , TIME_PERIODIC | TIME_KILL_SYNCHRONOUS);
TimerSystemOn = success = ( TimerHandle !=0 );
if (success) {
@@ -185,7 +185,7 @@ WinTimerClass::~WinTimerClass( void )
*=============================================================================================*/
void CALLBACK Timer_Callback (UINT , UINT , DWORD , DWORD , DWORD)
void CALLBACK Timer_Callback (UINT , UINT , DWORD , DWORD, DWORD)
{
//CONTEXT context;
+13 -9
View File
@@ -144,7 +144,7 @@ typedef struct {
/* The following PRIVATE functions are in this file: */
/*=========================================================================*/
PRIVATE unsigned long Get_Resident_Frame_Offset( char *file_buffer, int frame );
PRIVATE INT_PTR Get_Resident_Frame_Offset( char *file_buffer, int frame );
PRIVATE unsigned long Get_File_Frame_Offset( int file_handle, int frame, int palette_adjust);
PRIVATE BOOL Apply_Delta(SysAnimHeaderType *sys_header, int curr_frame, char *dest_ptr, int dest_w);
/*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
@@ -1029,13 +1029,13 @@ unsigned long __cdecl Get_Animation_Size(void const *handle)
* HISTORY: *
* 11/26/1991 SB : Created. *
*=========================================================================*/
PRIVATE unsigned long Get_Resident_Frame_Offset( char *file_buffer, int frame )
PRIVATE INT_PTR Get_Resident_Frame_Offset( char *file_buffer, int frame )
{
unsigned long frame0_size;
unsigned long *lptr;
INT_PTR frame0_size;
unsigned int *lptr;
// If there is a frame 0, the calculate its size.
lptr = (unsigned long *) file_buffer;
lptr = (unsigned int *) file_buffer;
if (*lptr) {
frame0_size = lptr[1] - *lptr;
@@ -1096,7 +1096,7 @@ PRIVATE BOOL Apply_Delta(SysAnimHeaderType *sys_header, int curr_frame, char *de
{
char *data_ptr, *delta_back;
int file_handle, palette_adjust;
unsigned long frame_data_size, frame_offset;
INT_PTR frame_data_size, frame_offset;
palette_adjust = ((sys_header->flags & WSA_PALETTE_PRESENT) ? 768 : 0);
@@ -1110,14 +1110,18 @@ PRIVATE BOOL Apply_Delta(SysAnimHeaderType *sys_header, int curr_frame, char *de
// copy it into buffer
frame_offset = Get_Resident_Frame_Offset(sys_header->file_buffer, curr_frame);
// jmarshall - hack for crash!
if (frame_offset < 0)
return 0;
frame_data_size = Get_Resident_Frame_Offset(sys_header->file_buffer, curr_frame + 1) - frame_offset;
data_ptr = (char *)Add_Long_To_Pointer(sys_header->file_buffer, frame_offset);
delta_back = (char *)Add_Long_To_Pointer(delta_back,
sys_header->largest_frame_size - frame_data_size);
Mem_Copy( data_ptr, delta_back, frame_data_size );
// jmarshall - 64bit
//Mem_Copy( data_ptr, delta_back, frame_data_size );
memcpy(delta_back, data_ptr, frame_data_size);
// jmarshall end1
} else if (sys_header -> flags & WSA_FILE) {
// Open up file because not file not in RAM.
+1 -1
View File
@@ -323,7 +323,7 @@ void GraphicBufferClass::Init(int w, int h, void *buffer, long size, GBC_Enum fl
Buffer = new BYTE[Size]; // otherwise allocate it and
Allocated = TRUE; // mark it system alloced
}
Offset = (long)Buffer; // Get offset to the buffer
Offset = (INT_PTR)Buffer; // Get offset to the buffer
IsDirectDraw = FALSE;
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.