mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-23 21:03:02 +00:00
sdl2: remove unsupported platform-specific folders
This commit is contained in:
parent
648a91adec
commit
0fb3e3e568
32 changed files with 0 additions and 2517 deletions
|
@ -1,12 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for WinCE with GCC
|
||||
#
|
||||
|
||||
OPTS+=-D_WIN32_WCE -D_UNICODE
|
||||
SDL_CFLAGS?=
|
||||
SDL_LDFLAGS?=
|
||||
NOHS=1
|
||||
NOHW=1
|
||||
NONET=1
|
||||
NOMIXER=1
|
||||
NOPNG=1
|
Binary file not shown.
|
@ -1,447 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 2004 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// stub and replacement "ANSI" C functions for use under Windows CE
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "../../doomdef.h"
|
||||
#include "cehelp.h"
|
||||
|
||||
#define _SEC_IN_MINUTE 60
|
||||
#define _SEC_IN_HOUR 3600
|
||||
#define _SEC_IN_DAY 86400
|
||||
|
||||
static const int DAYS_IN_MONTH[12] =
|
||||
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
|
||||
#define _DAYS_IN_MONTH(x) ((x == 1) ? days_in_feb : DAYS_IN_MONTH[x])
|
||||
|
||||
static const int _DAYS_BEFORE_MONTH[12] =
|
||||
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
|
||||
|
||||
#define _ISLEAP(y) (((y) % 4) == 0 && (((y) % 100) != 0 || (((y)+1900) % 400) == 0))
|
||||
#define _DAYS_IN_YEAR(year) (_ISLEAP(year) ? 366 : 365)
|
||||
|
||||
char *strerror(int ecode)
|
||||
{
|
||||
static char buff[1024 + 1];
|
||||
DWORD dwMsgLen = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
||||
ecode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &buff[0], 1024, NULL);
|
||||
return buff;
|
||||
}
|
||||
|
||||
int unlink( const char *filename )
|
||||
{
|
||||
return remove(filename);
|
||||
}
|
||||
|
||||
int remove( const char *path )
|
||||
{
|
||||
return DeleteFileA(path)-1;
|
||||
}
|
||||
|
||||
int rename( const char *oldname, const char *newname )
|
||||
{
|
||||
return MoveFileA(oldname, newname)!=0;
|
||||
}
|
||||
|
||||
static inline void STToTM(const SYSTEMTIME *st, struct tm *tm)
|
||||
{
|
||||
if (!st || !tm) return;
|
||||
tm->tm_sec = st->wSecond;
|
||||
tm->tm_min = st->wMinute;
|
||||
tm->tm_hour = st->wHour;
|
||||
tm->tm_mday = st->wDay;
|
||||
tm->tm_mon = st->wMonth - 1;
|
||||
tm->tm_year = st->wYear - 1900;
|
||||
tm->tm_wday = st->wDayOfWeek;
|
||||
tm->tm_yday = 0;
|
||||
tm->tm_isdst = 0;
|
||||
}
|
||||
|
||||
time_t time(time_t *T)
|
||||
{
|
||||
time_t returntime;
|
||||
SYSTEMTIME st;
|
||||
struct tm stft;
|
||||
GetSystemTime(&st);
|
||||
STToTM(&st,&stft);
|
||||
returntime = mktime(&stft);
|
||||
if (T) *T = returntime;
|
||||
return returntime;
|
||||
}
|
||||
|
||||
static inline UINT64 TTtoFT(const time_t wt, FILETIME *ft)
|
||||
{
|
||||
UINT64 temptime = wt; // FILETIME: 1/(10^7) secs since January 1, 1601
|
||||
temptime *= 10000000; // time_t : 1 secs since January 1, 1970
|
||||
// 369 years * 365 days * 24 hours * 60 mins * 60 secs * 10
|
||||
// 123 leaps days * 24 hours * 60 mins * 60 secs * 10
|
||||
temptime += 116444736000000000;
|
||||
if (ft) CopyMemory(ft,&temptime,sizeof (ULARGE_INTEGER));
|
||||
return temptime;
|
||||
}
|
||||
|
||||
static struct tm cehelptm;
|
||||
|
||||
struct tm * localtime(const time_t *CLOCK)
|
||||
{
|
||||
SYSTEMTIME st;
|
||||
FILETIME stft;
|
||||
UINT64 ftli = 0;
|
||||
if (CLOCK) ftli = TTtoFT(*CLOCK, &stft);
|
||||
if (ftli)
|
||||
FileTimeToSystemTime(&stft,&st);
|
||||
else
|
||||
GetSystemTime(&st);
|
||||
STToTM(&st,&cehelptm);
|
||||
if (st.wYear >= 1970)
|
||||
return &cehelptm;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void validate_structure (struct tm *tim_p) // from newlib
|
||||
{
|
||||
div_t res;
|
||||
int days_in_feb = 28;
|
||||
|
||||
/* calculate time & date to account for out of range values */
|
||||
if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59)
|
||||
{
|
||||
res = div (tim_p->tm_sec, 60);
|
||||
tim_p->tm_min += res.quot;
|
||||
if ((tim_p->tm_sec = res.rem) < 0)
|
||||
{
|
||||
tim_p->tm_sec += 60;
|
||||
--tim_p->tm_min;
|
||||
}
|
||||
}
|
||||
|
||||
if (tim_p->tm_min < 0 || tim_p->tm_min > 59)
|
||||
{
|
||||
res = div (tim_p->tm_min, 60);
|
||||
tim_p->tm_hour += res.quot;
|
||||
if ((tim_p->tm_min = res.rem) < 0)
|
||||
{
|
||||
tim_p->tm_min += 60;
|
||||
--tim_p->tm_hour;
|
||||
}
|
||||
}
|
||||
|
||||
if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23)
|
||||
{
|
||||
res = div (tim_p->tm_hour, 24);
|
||||
tim_p->tm_mday += res.quot;
|
||||
if ((tim_p->tm_hour = res.rem) < 0)
|
||||
{
|
||||
tim_p->tm_hour += 24;
|
||||
--tim_p->tm_mday;
|
||||
}
|
||||
}
|
||||
|
||||
if (tim_p->tm_mon > 11)
|
||||
{
|
||||
res = div (tim_p->tm_mon, 12);
|
||||
tim_p->tm_year += res.quot;
|
||||
if ((tim_p->tm_mon = res.rem) < 0)
|
||||
{
|
||||
tim_p->tm_mon += 12;
|
||||
--tim_p->tm_year;
|
||||
}
|
||||
}
|
||||
|
||||
if (_DAYS_IN_YEAR (tim_p->tm_year) == 366)
|
||||
days_in_feb = 29;
|
||||
|
||||
if (tim_p->tm_mday <= 0)
|
||||
{
|
||||
while (tim_p->tm_mday <= 0)
|
||||
{
|
||||
if (--tim_p->tm_mon == -1)
|
||||
{
|
||||
tim_p->tm_year--;
|
||||
tim_p->tm_mon = 11;
|
||||
days_in_feb =
|
||||
((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?
|
||||
29 : 28);
|
||||
}
|
||||
tim_p->tm_mday += _DAYS_IN_MONTH (tim_p->tm_mon);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (tim_p->tm_mday > _DAYS_IN_MONTH (tim_p->tm_mon))
|
||||
{
|
||||
tim_p->tm_mday -= _DAYS_IN_MONTH (tim_p->tm_mon);
|
||||
if (++tim_p->tm_mon == 12)
|
||||
{
|
||||
tim_p->tm_year++;
|
||||
tim_p->tm_mon = 0;
|
||||
days_in_feb =
|
||||
((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?
|
||||
29 : 28);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
time_t mktime (struct tm *tim_p) // from newlib
|
||||
{
|
||||
time_t tim = 0;
|
||||
long days = 0;
|
||||
int year;
|
||||
|
||||
/* validate structure */
|
||||
validate_structure (tim_p);
|
||||
|
||||
/* compute hours, minutes, seconds */
|
||||
tim += tim_p->tm_sec + (tim_p->tm_min * _SEC_IN_MINUTE) +
|
||||
(tim_p->tm_hour * _SEC_IN_HOUR);
|
||||
|
||||
/* compute days in year */
|
||||
days += tim_p->tm_mday - 1;
|
||||
days += _DAYS_BEFORE_MONTH[tim_p->tm_mon];
|
||||
if (tim_p->tm_mon > 1 && _DAYS_IN_YEAR (tim_p->tm_year) == 366)
|
||||
days++;
|
||||
|
||||
/* compute day of the year */
|
||||
tim_p->tm_yday = days;
|
||||
|
||||
if (tim_p->tm_year > 10000
|
||||
|| tim_p->tm_year < -10000)
|
||||
{
|
||||
return (time_t) -1;
|
||||
}
|
||||
|
||||
/* compute days in other years */
|
||||
if (tim_p->tm_year > 70)
|
||||
{
|
||||
for (year = 70; year < tim_p->tm_year; year++)
|
||||
days += _DAYS_IN_YEAR (year);
|
||||
}
|
||||
else if (tim_p->tm_year < 70)
|
||||
{
|
||||
for (year = 69; year > tim_p->tm_year; year--)
|
||||
days -= _DAYS_IN_YEAR (year);
|
||||
days -= _DAYS_IN_YEAR (year);
|
||||
}
|
||||
|
||||
/* compute day of the week */
|
||||
if ((tim_p->tm_wday = (days + 4) % 7) < 0)
|
||||
tim_p->tm_wday += 7;
|
||||
|
||||
/* compute total seconds */
|
||||
tim += (days * _SEC_IN_DAY);
|
||||
|
||||
return tim;
|
||||
}
|
||||
|
||||
#undef WINAPI
|
||||
#define WINAPI __stdcall //__delcspec(dllexport)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
//#pragma warning(disable : 4273)
|
||||
#endif
|
||||
|
||||
|
||||
static __forceinline int STRtoWSTR(LPCSTR lpMultiByteStr, int cchMultiByte,
|
||||
LPWSTR lpWideCharStr, int cchWideChar)
|
||||
{
|
||||
return MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lpMultiByteStr,
|
||||
cchMultiByte,lpWideCharStr,cchWideChar);
|
||||
}
|
||||
|
||||
static __forceinline int WSTRtoSTR(LPCWSTR lpWideCharStr, int cchWideChar,
|
||||
LPSTR lpMultiByteStr, int cbMultiByte)
|
||||
{
|
||||
return WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK|WC_SEPCHARS,
|
||||
lpWideCharStr,cchWideChar,lpMultiByteStr,cbMultiByte,NULL,NULL);
|
||||
}
|
||||
|
||||
DWORD WINAPI FormatMessageA(
|
||||
DWORD dwFlags,
|
||||
LPCVOID lpSource,
|
||||
DWORD dwMessageId,
|
||||
DWORD dwLanguageId,
|
||||
LPSTR lpBuffer,
|
||||
DWORD nSize,
|
||||
va_list *Arguments)
|
||||
{
|
||||
const int nSizeW = STRtoWSTR(lpBuffer,nSize,NULL,0);
|
||||
int nSizeF = 0;
|
||||
LPWSTR lpBufferW = alloca(sizeof (wchar_t)*nSizeW);
|
||||
LPWSTR lpSourceW = NULL;
|
||||
|
||||
if (!lpBufferW)
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
ZeroMemory(lpBuffer,nSize);
|
||||
return nSizeF;
|
||||
}
|
||||
|
||||
if (dwFlags & FORMAT_MESSAGE_FROM_STRING)
|
||||
{
|
||||
const int sLen = STRtoWSTR(lpSource, -1, NULL, 0);
|
||||
lpSourceW = alloca(sizeof (wchar_t)*sLen);
|
||||
|
||||
if (lpSourceW)
|
||||
STRtoWSTR(lpSource, -1, lpSourceW, sLen);
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return nSizeF;
|
||||
}
|
||||
}
|
||||
|
||||
if (lpSourceW)
|
||||
nSizeF = FormatMessageW(dwFlags, lpSourceW, dwMessageId, dwLanguageId,
|
||||
lpBufferW, nSizeW, Arguments);
|
||||
else
|
||||
nSizeF = FormatMessageW(dwFlags, lpSource, dwMessageId, dwLanguageId,
|
||||
lpBufferW, nSizeW, Arguments);
|
||||
|
||||
return WSTRtoSTR(lpBufferW, nSizeF, lpBuffer, nSize);
|
||||
}
|
||||
|
||||
BOOL WINAPI DeleteFileA(
|
||||
LPCSTR lpFileName)
|
||||
{
|
||||
const int sLen = STRtoWSTR(lpFileName, -1, NULL, 0);
|
||||
LPWSTR lpFileNameW = alloca(sizeof (wchar_t)*sLen);
|
||||
|
||||
if (lpFileNameW)
|
||||
STRtoWSTR(lpFileName, -1, lpFileNameW, sLen);
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DeleteFileW(lpFileNameW);
|
||||
}
|
||||
|
||||
BOOL WINAPI MoveFileA(
|
||||
LPCSTR lpExistingFileName,
|
||||
LPCSTR lpNewFileName
|
||||
)
|
||||
{
|
||||
const int sLen1 = STRtoWSTR(lpExistingFileName, -1, NULL, 0);
|
||||
LPWSTR lpExistingFileNameW = alloca(sizeof (wchar_t)*sLen1);
|
||||
|
||||
const int sLen2 = STRtoWSTR(lpNewFileName, -1, NULL, 0);
|
||||
LPWSTR lpNewFileNameW = alloca(sizeof (wchar_t)*sLen2);
|
||||
|
||||
|
||||
if (!lpExistingFileNameW || !lpNewFileNameW)
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STRtoWSTR(lpExistingFileName, -1, lpExistingFileNameW, sLen1);
|
||||
STRtoWSTR(lpNewFileName, -1, lpNewFileNameW, sLen2);
|
||||
|
||||
return MoveFileW(lpExistingFileNameW, lpNewFileNameW);
|
||||
}
|
||||
|
||||
|
||||
HANDLE WINAPI CreateFileA(
|
||||
LPCSTR lpFileName,
|
||||
DWORD dwDesiredAccess,
|
||||
DWORD dwShareMode,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
DWORD dwCreationDisposition,
|
||||
DWORD dwFlagsAndAttributes,
|
||||
HANDLE hTemplateFile)
|
||||
{
|
||||
const int sLen = STRtoWSTR(lpFileName, -1, NULL, 0);
|
||||
LPWSTR lpFileNameW = alloca(sizeof (wchar_t)*sLen);
|
||||
|
||||
if (lpFileNameW)
|
||||
STRtoWSTR(lpFileName, -1, lpFileNameW, sLen);
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
return CreateFileW(lpFileNameW, dwDesiredAccess, dwShareMode,
|
||||
lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
|
||||
hTemplateFile);
|
||||
}
|
||||
|
||||
BOOL WINAPI CreateDirectoryA(
|
||||
LPCSTR lpPathName,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes)
|
||||
{
|
||||
const int sLen = STRtoWSTR(lpPathName, -1, NULL, 0);
|
||||
LPWSTR lpPathNameW = alloca(sizeof (wchar_t)*sLen);
|
||||
|
||||
if (lpPathNameW)
|
||||
STRtoWSTR(lpPathName, -1, lpPathNameW, sLen);
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return CreateDirectoryW(lpPathNameW, lpSecurityAttributes);
|
||||
}
|
||||
|
||||
int WINAPI MessageBoxA(
|
||||
HWND hWnd ,
|
||||
LPCSTR lpText,
|
||||
LPCSTR lpCaption,
|
||||
UINT uType)
|
||||
{
|
||||
const int sLen1 = STRtoWSTR(lpText, -1, NULL, 0);
|
||||
LPWSTR lpTextW = alloca(sizeof (wchar_t)*sLen1);
|
||||
|
||||
const int sLen2 = STRtoWSTR(lpCaption, -1, NULL, 0);
|
||||
LPWSTR lpCaptionW = alloca(sizeof (wchar_t)*sLen2);
|
||||
|
||||
|
||||
if (!lpTextW || !lpCaptionW)
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STRtoWSTR(lpText, -1, lpTextW, sLen1);
|
||||
STRtoWSTR(lpCaption, -1, lpCaptionW, sLen2);
|
||||
|
||||
return MessageBoxW(hWnd, lpTextW, lpCaptionW, uType);
|
||||
}
|
||||
|
||||
VOID WINAPI OutputDebugStringA(
|
||||
LPCSTR lpOutputString)
|
||||
{
|
||||
const int sLen = STRtoWSTR(lpOutputString, -1, NULL, 0);
|
||||
LPWSTR lpOutputStringW = alloca(sizeof (wchar_t)*sLen);
|
||||
|
||||
if (lpOutputStringW)
|
||||
STRtoWSTR(lpOutputString, -1, lpOutputStringW, sLen);
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return;
|
||||
}
|
||||
|
||||
OutputDebugStringW(lpOutputStringW);
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 2004 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// stub and replacement "ANSI" C functions for use under Windows CE
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef __I_WINCE__
|
||||
#define __I_WINCE__
|
||||
|
||||
#ifdef USEASMCE
|
||||
#define USEASM // Remline if NASM doesn't work on x86 targets
|
||||
#endif
|
||||
|
||||
char *strerror(int ecode);
|
||||
int access(const char *path, int amode);
|
||||
int unlink( const char *filename );
|
||||
int remove( const char *path );
|
||||
int rename( const char *oldname, const char *newname );
|
||||
//CreateDirectoryEx( const char *currectpath, const char *path,SECURITY_ATTRIBUTES)
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
typedef long time_t; /* time value */
|
||||
#define _TIME_T_DEFINED /* avoid multiple def's of time_t */
|
||||
#endif
|
||||
|
||||
time_t time(time_t *T);
|
||||
|
||||
#ifndef __GNUC__
|
||||
#ifndef _TM_DEFINED
|
||||
struct tm {
|
||||
int tm_sec; /* seconds after the minute - [0,59] */
|
||||
int tm_min; /* minutes after the hour - [0,59] */
|
||||
int tm_hour; /* hours since midnight - [0,23] */
|
||||
int tm_mday; /* day of the month - [1,31] */
|
||||
int tm_mon; /* months since January - [0,11] */
|
||||
int tm_year; /* years since 1900 */
|
||||
int tm_wday; /* days since Sunday - [0,6] */
|
||||
int tm_yday; /* days since January 1 - [0,365] */
|
||||
int tm_isdst; /* daylight savings time flag */
|
||||
};
|
||||
#define _TM_DEFINED
|
||||
#endif
|
||||
|
||||
struct tm * localtime(const time_t *CLOCK);
|
||||
|
||||
time_t mktime (struct tm *tim_p);
|
||||
#endif
|
||||
|
||||
#endif
|
1
src/sdl2/SRB2DC/.gitignore
vendored
1
src/sdl2/SRB2DC/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
/scramble
|
Binary file not shown.
|
@ -1,53 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for SRB2/Dreamcast
|
||||
#
|
||||
|
||||
#include $(KOS_BASE)/Makefile.rules
|
||||
|
||||
#
|
||||
#hmmm, the Dreamcast
|
||||
#
|
||||
|
||||
HOSTCC:=$(CC)
|
||||
CC=$(KOS_CC)
|
||||
PREFIX=$(KOS_CC_BASE)/bin/$(KOS_CC_PREFIX)
|
||||
OBJDUMP=$(PREFIX)-objdump
|
||||
OBJCOPY=$(PREFIX)-objcopy
|
||||
|
||||
#NOHW=1 #No working MiniGL right now
|
||||
NOHS=1 #No HWSound right now
|
||||
ifndef LWIP
|
||||
NONET=1 #No LWIP
|
||||
endif
|
||||
#i_net_o=$(OBJDIR)/i_udp.o #use KOS's UDP
|
||||
#NOMIXER=1 #Basic sound only
|
||||
NOIPX=1 #No IPX network code
|
||||
NOPNG=1 #No Screenshot
|
||||
|
||||
OPTS=$(KOS_CFLAGS) -DUNIXCOMMON -DDC
|
||||
ifndef NOHW
|
||||
OPTS+=-DSTATIC_OPENGL -DMINI_GL_COMPATIBILITY -DKOS_GL_COMPATIBILITY
|
||||
endif
|
||||
SDL_CFLAGS?=-I$(KOS_BASE)/addons/include/SDL
|
||||
SDL_LDFLAGS?=-lSDL
|
||||
LDFLAGS=$(KOS_LDFLAGS)
|
||||
LIBS:=$(KOS_LIBS) -lconio -lm
|
||||
ifndef NOMIXER
|
||||
LIBS:=-loggvorbisplay -lSDL $(LIBS)
|
||||
endif
|
||||
|
||||
ifdef LWIP
|
||||
OPTS+=-I$(KOS_BASE)/../kos-ports/lwip/kos/include -I$(KOS_BASE)/../kos-ports/lwip/lwip/src/include/ipv4 -I$(KOS_BASE)/../kos-ports/lwip/lwip/src/include -DIPv4
|
||||
LIBS:=-llwip4 -lkosutils $(LIBS)
|
||||
OPTS+=-DHAVE_LWIP
|
||||
endif
|
||||
ifndef NOHW
|
||||
LIBS+=-lgl
|
||||
endif
|
||||
|
||||
i_system_o+=$(OBJDIR)/dchelp.o
|
||||
i_main_o=$(KOS_START) $(OBJDIR)/i_main.o $(OBJEXTRA)
|
||||
|
||||
# name of the exefile
|
||||
EXENAME?=SRB2.elf
|
||||
BINNAME?=SRB2.BIN
|
Binary file not shown.
|
@ -1,19 +0,0 @@
|
|||
#define VMU_width 48
|
||||
#define VMU_height 32
|
||||
static unsigned char VMU_bits[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x58, 0x75, 0x00, 0x00, 0x00, 0x00, 0xee, 0xaa, 0x00, 0x00,
|
||||
0x00, 0x86, 0x55, 0x55, 0x01, 0x00, 0x00, 0xda, 0xc8, 0xaf, 0x00, 0x00,
|
||||
0x00, 0x62, 0x55, 0x54, 0x00, 0x00, 0x00, 0x32, 0xa2, 0x6c, 0x00, 0x00,
|
||||
0x00, 0x5c, 0x55, 0xfd, 0x01, 0x00, 0x00, 0xac, 0x88, 0xaa, 0x02, 0x00,
|
||||
0x00, 0x54, 0x75, 0x55, 0x05, 0x00, 0x00, 0xac, 0xbf, 0xaa, 0x0a, 0x00,
|
||||
0x00, 0xd6, 0x61, 0x55, 0x15, 0x00, 0x00, 0xe9, 0xc0, 0xaa, 0x2a, 0x00,
|
||||
0x00, 0x39, 0x40, 0x55, 0x55, 0x00, 0x00, 0x6d, 0xc0, 0xaa, 0xbe, 0x00,
|
||||
0x00, 0x6d, 0x40, 0xd5, 0xc3, 0x00, 0x00, 0x6d, 0xc0, 0xea, 0x00, 0x00,
|
||||
0x00, 0x29, 0x60, 0xf5, 0x00, 0x00, 0x00, 0x26, 0xe0, 0xfa, 0x00, 0x00,
|
||||
0x00, 0x58, 0xb8, 0xbd, 0x00, 0x00, 0x00, 0x84, 0x07, 0xdf, 0x00, 0x00,
|
||||
0x00, 0x08, 0x20, 0xae, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x5f, 0x01, 0x00,
|
||||
0x00, 0xc0, 0x3f, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
|
@ -1,134 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 2006 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// stub and replacement "ANSI" C functions for use on Dreamcast/KOS
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
#include <kos/fs.h>
|
||||
#include <errno.h>
|
||||
#ifndef HAVE_LWIP
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#include "../../doomdef.h"
|
||||
#include "dchelp.h"
|
||||
|
||||
int access(const char *path, int amode)
|
||||
{
|
||||
file_t handle = FILEHND_INVALID;
|
||||
|
||||
if (amode == F_OK || amode == R_OK)
|
||||
handle=fs_open(path,O_RDONLY);
|
||||
else if (amode == (R_OK|W_OK))
|
||||
handle=fs_open(path,O_RDWR);
|
||||
else if (amode == W_OK)
|
||||
handle=fs_open(path,O_WRONLY);
|
||||
|
||||
if (handle != FILEHND_INVALID)
|
||||
{
|
||||
fs_close(handle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
double hypot(double x, double y)
|
||||
{
|
||||
double ax, yx, yx2, yx1;
|
||||
if (abs(y) > abs(x)) // |y|>|x|
|
||||
{
|
||||
ax = abs(y); // |y| => ax
|
||||
yx = (x/y);
|
||||
}
|
||||
else // |x|>|y|
|
||||
{
|
||||
ax = abs(x); // |x| => ax
|
||||
yx = (x/y);
|
||||
}
|
||||
yx2 = yx*yx; // (x/y)^2
|
||||
yx1 = sqrt(1+yx2); // (1 + (x/y)^2)^1/2
|
||||
return ax*yx1; // |x|*((1 + (x/y)^2)^1/2)
|
||||
}
|
||||
|
||||
#if !(defined (NONET) || defined (NOMD5))
|
||||
#ifdef HAVE_LWIP
|
||||
|
||||
#include <lwip/lwip.h>
|
||||
|
||||
static uint8 ip[4];
|
||||
static char *h_addr_listtmp[2] = {ip, NULL};
|
||||
static struct hostent hostenttmp = {NULL, NULL, 0, 1, h_addr_listtmp};
|
||||
|
||||
struct hostent *gethostbyname(const char *name)
|
||||
{
|
||||
struct sockaddr_in dnssrv;
|
||||
dnssrv.sin_family = AF_INET;
|
||||
dnssrv.sin_port = htons(53);
|
||||
dnssrv.sin_addr.s_addr = htonl(0x0a030202); ///< what?
|
||||
if (lwip_gethostbyname(&dnssrv, name, ip) < 0)
|
||||
return NULL;
|
||||
else
|
||||
return &hostenttmp;
|
||||
}
|
||||
#else
|
||||
|
||||
struct hostent *gethostbyname(const char *name)
|
||||
{
|
||||
(void)name;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int ioctl(int s, long cmd, void *argp)
|
||||
{
|
||||
return fs_ioctl(s, argp, cmd); //FIONBIO?
|
||||
}
|
||||
|
||||
int select(int maxfdp1, void *readset, void *writeset, void *exceptset,
|
||||
void *timeout)
|
||||
{
|
||||
(void)maxfdp1;
|
||||
(void)readset;
|
||||
(void)writeset;
|
||||
(void)exceptset;
|
||||
(void)timeout;
|
||||
errno = EAFNOSUPPORT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen)
|
||||
{
|
||||
(void)s;
|
||||
(void)level; //SOL_SOCKET
|
||||
(void)optname; //SO_RCVBUF, SO_ERROR
|
||||
(void)optval;
|
||||
(void)optlen;
|
||||
errno = EAFNOSUPPORT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int setsockopt (int s, int level, int optname, void *optval, socklen_t optlen)
|
||||
{
|
||||
(void)s;
|
||||
(void)level; //SOL_SOCKET
|
||||
(void)optname; //SO_REUSEADDR, SO_BROADCAST, SO_RCVBUF
|
||||
(void)optval;
|
||||
(void)optlen;
|
||||
errno = EAFNOSUPPORT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,51 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 2006 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// stub and replacement "ANSI" C functions for use on Dreamcast/KOS
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef __I_DREAMCAST__
|
||||
#define __I_DREAMCAST__
|
||||
|
||||
struct hostent
|
||||
{
|
||||
char *h_name; /* Official name of host. */
|
||||
char **h_aliases; /* Alias list. */
|
||||
int h_addrtype; /* Host address type. */
|
||||
int h_length; /* Length of address. */
|
||||
char **h_addr_list; /* List of addresses from name server. */
|
||||
#define h_addr h_addr_list[0] /* Address, for backward compatibility. */
|
||||
};
|
||||
|
||||
struct hostent *gethostbyname(const char *name);
|
||||
|
||||
#ifndef HAVE_LWIP
|
||||
#define INADDR_NONE ((uint32) 0xffffffff)
|
||||
#define INADDR_LOOPBACK ((uint32) 0x7f000001)
|
||||
#define SOCK_STREAM 1
|
||||
#define FIONBIO 0
|
||||
#define SOL_SOCKET 0
|
||||
#define SO_ERROR 0
|
||||
#define SO_REUSEADDR 0
|
||||
#define SO_BROADCAST 0
|
||||
#define SO_RCVBUF 0
|
||||
int ioctl(int s, long cmd, void *argp);
|
||||
int select(int maxfdp1, void *readset, void *writeset, void *exceptset, void *timeout);
|
||||
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
|
||||
int setsockopt(int s, int level, int optname, void *optval, socklen_t optlen);
|
||||
#endif
|
||||
#endif
|
|
@ -1,455 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||
// Portions Copyright (C) 2005 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//-----------------------------------------------------------------------------
|
||||
/// \file
|
||||
/// \brief KOS UDP network interface
|
||||
|
||||
#include "../../doomdef.h"
|
||||
|
||||
#include "../../i_system.h"
|
||||
#include "../../d_event.h"
|
||||
#include "../../d_net.h"
|
||||
#include "../../m_argv.h"
|
||||
|
||||
#include "../../doomstat.h"
|
||||
|
||||
#include "../../i_net.h"
|
||||
|
||||
#include "../../z_zone.h"
|
||||
|
||||
#include "../../i_tcp.h"
|
||||
|
||||
#include <kos/net.h>
|
||||
//#include <net/net_ipv4.h>
|
||||
#define NET_NONE 0x00000000
|
||||
#define NET_LOCAL 0x0100007F
|
||||
#define NET_ANY 0xFFFFFFFF
|
||||
|
||||
#define MAXBANS 20
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 host;
|
||||
uint16 port;
|
||||
} IPaddress;
|
||||
|
||||
static IPaddress clientaddress[MAXNETNODES+1];
|
||||
static boolean nodeconnected[MAXNETNODES+1];
|
||||
|
||||
static int mysocket = 0;
|
||||
static boolean init_KOSUDP_driver = false;
|
||||
|
||||
static size_t numbans = 0;
|
||||
static IPaddress banned[MAXBANS];
|
||||
static boolean KOSUDP_bannednode[MAXNETNODES+1]; /// \note do we really need the +1?
|
||||
|
||||
static inline int net_udp_sendto(int sock, const uint8 *data, int size, uint16 rem_port, uint32 rem_addr)
|
||||
{
|
||||
uint8 dst_ip[4] = {((uint8*)(&(rem_addr)))[0],
|
||||
((uint8*)(&(rem_addr)))[1],
|
||||
((uint8*)(&(rem_addr)))[2],
|
||||
((uint8*)(&(rem_addr)))[3]};
|
||||
return net_udp_send_raw(net_default_dev, clientaddress[0].port, rem_port, dst_ip, data, size);
|
||||
(void)sock;
|
||||
}
|
||||
|
||||
static inline int net_udp_recvfrom(int sock, uint8 *buf, int size, uint16 *rem_port, uint32 *rem_addr)
|
||||
{
|
||||
return net_udp_recv(sock, buf, size);
|
||||
(void)rem_port;
|
||||
(void)rem_addr;
|
||||
}
|
||||
|
||||
static const char *KOSUDP_AddrToStr(IPaddress* sk)
|
||||
{
|
||||
static char s[22]; // 255.255.255.255:65535
|
||||
sprintf(s,"%d.%d.%d.%d:%d",
|
||||
((uint8*)(&(sk->host)))[3],
|
||||
((uint8*)(&(sk->host)))[2],
|
||||
((uint8*)(&(sk->host)))[1],
|
||||
((uint8*)(&(sk->host)))[0],
|
||||
net_ntohs(sk->port));
|
||||
return s;
|
||||
}
|
||||
|
||||
static const char *KOSUDP_GetNodeAddress(int node)
|
||||
{
|
||||
if (!nodeconnected[node])
|
||||
return NULL;
|
||||
return KOSUDP_AddrToStr(&clientaddress[node]);
|
||||
}
|
||||
|
||||
static const char *KOSUDP_GetBanAddress(size_t ban)
|
||||
{
|
||||
if (ban > numbans)
|
||||
return NULL;
|
||||
return KOSUDP_AddrToStr(&banned[ban]);
|
||||
}
|
||||
|
||||
static boolean KOSUDP_cmpaddr(IPaddress* a, IPaddress* b)
|
||||
{
|
||||
return (a->host == b->host && (b->port == 0 || a->port == b->port));
|
||||
}
|
||||
|
||||
static SINT8 getfreenode(void)
|
||||
{
|
||||
SINT8 j;
|
||||
|
||||
for (j = 0; j < MAXNETNODES; j++)
|
||||
if (!nodeconnected[j])
|
||||
{
|
||||
nodeconnected[j] = true;
|
||||
return j;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void KOSUDP_Get(void)
|
||||
{
|
||||
int size;
|
||||
size_t i;
|
||||
SINT8 j;
|
||||
IPaddress temp = {clientaddress[BROADCASTADDR].host,clientaddress[BROADCASTADDR].port};
|
||||
|
||||
size = net_udp_recvfrom(mysocket,(char *)&doomcom->data, MAXPACKETLENGTH, &temp.port, &temp.host);
|
||||
if (size == 0)
|
||||
{
|
||||
doomcom->remotenode = -1; // no packet
|
||||
return;
|
||||
}
|
||||
|
||||
// find remote node number
|
||||
for (i = 0; i < MAXNETNODES; i++)
|
||||
if (KOSUDP_cmpaddr(&temp, &(clientaddress[i])))
|
||||
{
|
||||
doomcom->remotenode = (INT16)i; // good packet from a game player
|
||||
doomcom->datalength = (INT16)size;
|
||||
return;
|
||||
}
|
||||
|
||||
// not found
|
||||
|
||||
// find a free slot
|
||||
j = getfreenode();
|
||||
if (j > 0)
|
||||
{
|
||||
M_Memcpy(&clientaddress[j], &temp, sizeof (temp));
|
||||
DEBFILE(va("New node detected: node:%d address:%s\n", j,
|
||||
KOSUDP_GetNodeAddress(j)));
|
||||
doomcom->remotenode = (INT16)j; // good packet from a game player
|
||||
doomcom->datalength = (INT16)size;
|
||||
// check if it's a banned dude so we can send a refusal later
|
||||
for (i = 0; i < numbans; i++)
|
||||
if (KOSUDP_cmpaddr(&temp, &banned[i]))
|
||||
{
|
||||
KOSUDP_bannednode[j] = true;
|
||||
DEBFILE("This dude has been banned\n");
|
||||
break;
|
||||
}
|
||||
if (i == numbans)
|
||||
KOSUDP_bannednode[j] = false;
|
||||
return;
|
||||
}
|
||||
|
||||
DEBFILE("New node detected: No more free slots\n");
|
||||
doomcom->remotenode = -1; // no packet
|
||||
}
|
||||
|
||||
#if 0
|
||||
static boolean KOSUDP_CanSend(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void KOSUDP_Send(void)
|
||||
{
|
||||
const IPaddress *nodeinfo;
|
||||
|
||||
if (!doomcom->remotenode || !nodeconnected[doomcom->remotenode])
|
||||
return;
|
||||
|
||||
nodeinfo = clientaddress + doomcom->remotenode;
|
||||
|
||||
if (net_udp_sendto(mysocket, (char *)&doomcom->data, doomcom->datalength, nodeinfo->port, nodeinfo->host) == -1)
|
||||
{
|
||||
CONS_Printf("KOSUDP: error sending data\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void KOSUDP_FreeNodenum(int numnode)
|
||||
{
|
||||
// can't disconnect from self :)
|
||||
if (!numnode)
|
||||
return;
|
||||
|
||||
DEBFILE(va("Free node %d (%s)\n", numnode, KOSUDP_GetNodeAddress(numnode)));
|
||||
|
||||
nodeconnected[numnode] = false;
|
||||
|
||||
memset(&clientaddress[numnode], 0, sizeof (IPaddress));
|
||||
}
|
||||
|
||||
static int KOSUDP_Socket(void)
|
||||
{
|
||||
int temp = 0;
|
||||
uint16 portnum = 0;
|
||||
const uint32 hostip = net_default_dev?net_ntohl(net_ipv4_address(net_default_dev->ip_addr)):NET_LOCAL;
|
||||
//Hurdler: I'd like to put a server and a client on the same computer
|
||||
//Logan: Me too
|
||||
//BP: in fact for client we can use any free port we want i have read
|
||||
// in some doc that connect in udp can do it for us...
|
||||
//Alam: where?
|
||||
if (M_CheckParm("-clientport"))
|
||||
{
|
||||
if (!M_IsNextParm())
|
||||
I_Error("syntax: -clientport <portnum>");
|
||||
portnum = net_ntohs(atoi(M_GetNextParm()));
|
||||
}
|
||||
else
|
||||
portnum = net_ntohs(sock_port);
|
||||
|
||||
temp = net_udp_sock_open(portnum, hostip, portnum, NET_NONE);
|
||||
if (temp)
|
||||
{
|
||||
int btemp = net_udp_sock_open(portnum, hostip, portnum, NET_ANY);
|
||||
clientaddress[0].port = portnum;
|
||||
clientaddress[0].host = NET_NONE;
|
||||
if (btemp)
|
||||
{
|
||||
clientaddress[BROADCASTADDR].port = net_ntohs(sock_port);
|
||||
clientaddress[BROADCASTADDR].host = NET_ANY;
|
||||
}
|
||||
else
|
||||
{
|
||||
CONS_Printf("KOSUDP: can't setup broadcast sock\n");
|
||||
net_udp_sock_close(temp);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CONS_Printf("KOSUDP: can't setup main sock\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
doomcom->extratics = 1; // internet is very high ping
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
static void I_ShutdownKOSUDPDriver(void)
|
||||
{
|
||||
//net_shutdown();
|
||||
init_KOSUDP_driver = false;
|
||||
}
|
||||
|
||||
static void I_InitKOSUDPDriver(void)
|
||||
{
|
||||
if (init_KOSUDP_driver)
|
||||
I_ShutdownKOSUDPDriver();
|
||||
else
|
||||
net_init();
|
||||
D_SetDoomcom();
|
||||
memset(&clientaddress,0,sizeof (clientaddress));
|
||||
init_KOSUDP_driver = true;
|
||||
}
|
||||
|
||||
static void KOSUDP_CloseSocket(void)
|
||||
{
|
||||
if (mysocket)
|
||||
net_udp_sock_close(mysocket);
|
||||
mysocket = 0;
|
||||
}
|
||||
|
||||
static SINT8 KOSUDP_NetMakeNodewPort(const char *hostname, const char* port)
|
||||
{
|
||||
SINT8 newnode;
|
||||
uint16 portnum = net_ntohs(sock_port);
|
||||
|
||||
if (port && !port[0])
|
||||
portnum = net_ntohs((UINT16)atoi(port));
|
||||
|
||||
newnode = getfreenode();
|
||||
if (newnode == -1)
|
||||
return -1;
|
||||
// find ip of the server
|
||||
clientaddress[newnode].port = portnum;
|
||||
clientaddress[newnode].host = inet_addr(hostname);
|
||||
|
||||
if (clientaddress[newnode].host == NET_NONE)
|
||||
{
|
||||
free(hostname);
|
||||
return -1;
|
||||
}
|
||||
return newnode;
|
||||
}
|
||||
|
||||
static boolean KOSUDP_OpenSocket(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
memset(clientaddress, 0, sizeof (clientaddress));
|
||||
|
||||
for (i = 0; i < MAXNETNODES; i++)
|
||||
nodeconnected[i] = false;
|
||||
|
||||
//CONS_Printf("KOSUDP Code starting up\n");
|
||||
|
||||
nodeconnected[0] = true; // always connected to self
|
||||
nodeconnected[BROADCASTADDR] = true;
|
||||
I_NetSend = KOSUDP_Send;
|
||||
I_NetGet = KOSUDP_Get;
|
||||
I_NetCloseSocket = KOSUDP_CloseSocket;
|
||||
I_NetFreeNodenum = KOSUDP_FreeNodenum;
|
||||
I_NetMakeNodewPort = KOSUDP_NetMakeNodewPort;
|
||||
|
||||
//I_NetCanSend = KOSUDP_CanSend;
|
||||
|
||||
// build the socket but close it first
|
||||
KOSUDP_CloseSocket();
|
||||
mysocket = KOSUDP_Socket();
|
||||
|
||||
if (mysocket)
|
||||
{
|
||||
#if 0
|
||||
// for select
|
||||
myset = SDLNet_AllocSocketSet(1);
|
||||
if (!myset)
|
||||
{
|
||||
CONS_Printf("SDL_Net: %s",SDLNet_GetError());
|
||||
return false;
|
||||
}
|
||||
if (SDLNet_UDP_AddSocket(myset,mysocket) == -1)
|
||||
{
|
||||
CONS_Printf("SDL_Net: %s",SDLNet_GetError());
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static boolean KOSUDP_Ban(int node)
|
||||
{
|
||||
if (numbans == MAXBANS)
|
||||
return false;
|
||||
|
||||
M_Memcpy(&banned[numbans], &clientaddress[node], sizeof (IPaddress));
|
||||
banned[numbans].port = 0'
|
||||
numbans++;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void KOSUDP_ClearBans(void)
|
||||
{
|
||||
numbans = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// I_InitNetwork
|
||||
// Only required for DOS, so this is more a dummy
|
||||
//
|
||||
boolean I_InitNetwork(void)
|
||||
{
|
||||
char serverhostname[255];
|
||||
boolean ret = false;
|
||||
//if (!M_CheckParm ("-kosnet"))
|
||||
// return false;
|
||||
// initilize the driver
|
||||
I_InitKOSUDPDriver();
|
||||
I_AddExitFunc(I_ShutdownKOSUDPDriver);
|
||||
if (!init_KOSUDP_driver)
|
||||
return false;
|
||||
|
||||
if (M_CheckParm("-udpport"))
|
||||
{
|
||||
if (M_IsNextParm())
|
||||
sock_port = (UINT16)atoi(M_GetNextParm());
|
||||
else
|
||||
sock_port = 0;
|
||||
}
|
||||
|
||||
// parse network game options,
|
||||
if (M_CheckParm("-server") || dedicated)
|
||||
{
|
||||
server = true;
|
||||
|
||||
// If a number of clients (i.e. nodes) is specified, the server will wait for the clients
|
||||
// to connect before starting.
|
||||
// If no number is specified here, the server starts with 1 client, and others can join
|
||||
// in-game.
|
||||
// Since Boris has implemented join in-game, there is no actual need for specifying a
|
||||
// particular number here.
|
||||
// FIXME: for dedicated server, numnodes needs to be set to 0 upon start
|
||||
/* if (M_IsNextParm())
|
||||
doomcom->numnodes = (INT16)atoi(M_GetNextParm());
|
||||
else */if (dedicated)
|
||||
doomcom->numnodes = 0;
|
||||
else
|
||||
doomcom->numnodes = 1;
|
||||
|
||||
if (doomcom->numnodes < 0)
|
||||
doomcom->numnodes = 0;
|
||||
if (doomcom->numnodes > MAXNETNODES)
|
||||
doomcom->numnodes = MAXNETNODES;
|
||||
|
||||
// server
|
||||
servernode = 0;
|
||||
// FIXME:
|
||||
// ??? and now ?
|
||||
// server on a big modem ??? 4*isdn
|
||||
net_bandwidth = 16000;
|
||||
hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
|
||||
|
||||
ret = true;
|
||||
}
|
||||
else if (M_CheckParm("-connect"))
|
||||
{
|
||||
if (M_IsNextParm())
|
||||
strcpy(serverhostname, M_GetNextParm());
|
||||
else
|
||||
serverhostname[0] = 0; // assuming server in the LAN, use broadcast to detect it
|
||||
|
||||
// server address only in ip
|
||||
if (serverhostname[0])
|
||||
{
|
||||
COM_BufAddText("connect \"");
|
||||
COM_BufAddText(serverhostname);
|
||||
COM_BufAddText("\"\n");
|
||||
|
||||
// probably modem
|
||||
hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
// so we're on a LAN
|
||||
COM_BufAddText("connect any\n");
|
||||
|
||||
net_bandwidth = 800000;
|
||||
hardware_MAXPACKETLENGTH = MAXPACKETLENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
I_NetOpenSocket = KOSUDP_OpenSocket;
|
||||
I_Ban = KOSUDP_Ban;
|
||||
I_ClearBans = KOSUDP_ClearBans;
|
||||
I_GetNodeAddress = KOSUDP_GetNodeAddress;
|
||||
I_GetBanAddress = KOSUDP_GetBanAddress;
|
||||
bannednode = KOSUDP_bannednode;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -1,259 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAXCHUNK (2048*1024)
|
||||
|
||||
static unsigned int seed;
|
||||
|
||||
void my_srand(unsigned int n)
|
||||
{
|
||||
seed = n & 0xffff;
|
||||
}
|
||||
|
||||
unsigned int my_rand()
|
||||
{
|
||||
seed = (seed * 2109 + 9273) & 0x7fff;
|
||||
return (seed + 0xc000) & 0xffff;
|
||||
}
|
||||
|
||||
void load(FILE *fh, unsigned char *ptr, unsigned long sz)
|
||||
{
|
||||
if (fread(ptr, 1, sz, fh) != sz)
|
||||
{
|
||||
fprintf(stderr, "Read error!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void load_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
|
||||
{
|
||||
static int idx[MAXCHUNK/32];
|
||||
int i;
|
||||
|
||||
/* Convert chunk size to number of slices */
|
||||
sz /= 32;
|
||||
|
||||
/* Initialize index table with unity,
|
||||
so that each slice gets loaded exactly once */
|
||||
for (i = 0; i < sz; i++)
|
||||
idx[i] = i;
|
||||
|
||||
for (i = sz-1; i >= 0; --i)
|
||||
{
|
||||
/* Select a replacement index */
|
||||
int x = (my_rand() * i) >> 16;
|
||||
|
||||
/* Swap */
|
||||
int tmp = idx[i];
|
||||
idx[i] = idx[x];
|
||||
idx[x] = tmp;
|
||||
|
||||
/* Load resulting slice */
|
||||
load(fh, ptr+32*idx[i], 32);
|
||||
}
|
||||
}
|
||||
|
||||
void load_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
|
||||
{
|
||||
unsigned long chunksz;
|
||||
|
||||
my_srand(filesz);
|
||||
|
||||
/* Descramble 2 meg blocks for as long as possible, then
|
||||
gradually reduce the window down to 32 bytes (1 slice) */
|
||||
for (chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
|
||||
while (filesz >= chunksz)
|
||||
{
|
||||
load_chunk(fh, ptr, chunksz);
|
||||
filesz -= chunksz;
|
||||
ptr += chunksz;
|
||||
}
|
||||
|
||||
/* Load final incomplete slice */
|
||||
if (filesz)
|
||||
load(fh, ptr, filesz);
|
||||
}
|
||||
|
||||
void read_file(char *filename, unsigned char **ptr, unsigned long *sz)
|
||||
{
|
||||
FILE *fh = fopen(filename, "rb");
|
||||
if (fh == NULL)
|
||||
{
|
||||
fprintf(stderr, "Can't open \"%s\".\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
if (fseek(fh, 0, SEEK_END)<0)
|
||||
{
|
||||
fprintf(stderr, "Seek error.\n");
|
||||
exit(1);
|
||||
}
|
||||
*sz = ftell(fh);
|
||||
*ptr = malloc(*sz);
|
||||
if ( *ptr == NULL )
|
||||
{
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
if (fseek(fh, 0, SEEK_SET)<0)
|
||||
{
|
||||
fprintf(stderr, "Seek error.\n");
|
||||
exit(1);
|
||||
}
|
||||
load_file(fh, *ptr, *sz);
|
||||
fclose(fh);
|
||||
}
|
||||
|
||||
void save(FILE *fh, unsigned char *ptr, unsigned long sz)
|
||||
{
|
||||
if (fwrite(ptr, 1, sz, fh) != sz)
|
||||
{
|
||||
fprintf(stderr, "Write error!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void save_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
|
||||
{
|
||||
static int idx[MAXCHUNK/32];
|
||||
int i;
|
||||
|
||||
/* Convert chunk size to number of slices */
|
||||
sz /= 32;
|
||||
|
||||
/* Initialize index table with unity,
|
||||
so that each slice gets saved exactly once */
|
||||
for (i = 0; i < sz; i++)
|
||||
idx[i] = i;
|
||||
|
||||
for (i = sz-1; i >= 0; --i)
|
||||
{
|
||||
/* Select a replacement index */
|
||||
int x = (my_rand() * i) >> 16;
|
||||
|
||||
/* Swap */
|
||||
int tmp = idx[i];
|
||||
idx[i] = idx[x];
|
||||
idx[x] = tmp;
|
||||
|
||||
/* Save resulting slice */
|
||||
save(fh, ptr+32*idx[i], 32);
|
||||
}
|
||||
}
|
||||
|
||||
void save_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
|
||||
{
|
||||
unsigned long chunksz;
|
||||
|
||||
my_srand(filesz);
|
||||
|
||||
/* Descramble 2 meg blocks for as long as possible, then
|
||||
gradually reduce the window down to 32 bytes (1 slice) */
|
||||
for (chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
|
||||
while (filesz >= chunksz)
|
||||
{
|
||||
save_chunk(fh, ptr, chunksz);
|
||||
filesz -= chunksz;
|
||||
ptr += chunksz;
|
||||
}
|
||||
|
||||
/* Save final incomplete slice */
|
||||
if (filesz)
|
||||
save(fh, ptr, filesz);
|
||||
}
|
||||
|
||||
void write_file(char *filename, unsigned char *ptr, unsigned long sz)
|
||||
{
|
||||
FILE *fh = fopen(filename, "wb");
|
||||
if (fh == NULL)
|
||||
{
|
||||
fprintf(stderr, "Can't open \"%s\".\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
save_file(fh, ptr, sz);
|
||||
fclose(fh);
|
||||
}
|
||||
|
||||
void descramble(char *src, char *dst)
|
||||
{
|
||||
unsigned char *ptr = NULL;
|
||||
unsigned long sz = 0;
|
||||
FILE *fh;
|
||||
|
||||
read_file(src, &ptr, &sz);
|
||||
|
||||
fh = fopen(dst, "wb");
|
||||
if (fh == NULL)
|
||||
{
|
||||
fprintf(stderr, "Can't open \"%s\".\n", dst);
|
||||
exit(1);
|
||||
}
|
||||
if ( fwrite(ptr, 1, sz, fh) != sz )
|
||||
{
|
||||
fprintf(stderr, "Write error.\n");
|
||||
exit(1);
|
||||
}
|
||||
fclose(fh);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void scramble(char *src, char *dst)
|
||||
{
|
||||
unsigned char *ptr = NULL;
|
||||
unsigned long sz = 0;
|
||||
FILE *fh;
|
||||
|
||||
fh = fopen(src, "rb");
|
||||
if (fh == NULL)
|
||||
{
|
||||
fprintf(stderr, "Can't open \"%s\".\n", src);
|
||||
exit(1);
|
||||
}
|
||||
if (fseek(fh, 0, SEEK_END)<0)
|
||||
{
|
||||
fprintf(stderr, "Seek error.\n");
|
||||
exit(1);
|
||||
}
|
||||
sz = ftell(fh);
|
||||
ptr = malloc(sz);
|
||||
if ( ptr == NULL )
|
||||
{
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
if (fseek(fh, 0, SEEK_SET)<0)
|
||||
{
|
||||
fprintf(stderr, "Seek error.\n");
|
||||
exit(1);
|
||||
}
|
||||
if ( fread(ptr, 1, sz, fh) != sz )
|
||||
{
|
||||
fprintf(stderr, "Read error.\n");
|
||||
exit(1);
|
||||
}
|
||||
fclose(fh);
|
||||
|
||||
write_file(dst, ptr, sz);
|
||||
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int opt = 0;
|
||||
|
||||
if (argc > 1 && !strcmp(argv[1], "-d"))
|
||||
opt ++;
|
||||
|
||||
if (argc != 3+opt)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [-d] from to\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (opt)
|
||||
descramble(argv[2], argv[3]);
|
||||
else
|
||||
scramble(argv[1], argv[2]);
|
||||
|
||||
return 0;
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB |
|
@ -1,139 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for SRB2 for the PlayStation 3 using PSL1GHT
|
||||
#
|
||||
|
||||
# Check if PS3DEV and PSL1GHT is set in the environment. If so, continue with compilation.
|
||||
.SUFFIXES:
|
||||
|
||||
ifeq ($(strip $(PS3DEV)),)
|
||||
$(error "Please set PS3DEV in your environment. export PS3DEV=<path to>ps3dev-toolchain")
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PSL1GHT)),)
|
||||
$(error "Please set PSL1GHT in your environment. export PSL1GHT=<path to>PSL1GHT")
|
||||
endif
|
||||
|
||||
# Set compiler flags
|
||||
|
||||
# Disable same warning flags
|
||||
WFLAGS+=-Wno-shadow -Wno-char-subscripts -Wno-format
|
||||
|
||||
ifdef JAILBREAK
|
||||
EXENAME?=SRB2PS3-jb.elf
|
||||
PKGNAME?=SRB2PS3-jb.pkg
|
||||
else
|
||||
EXENAME?=SRB2PS3.elf
|
||||
PKGNAME?=SRB2PS3.pkg
|
||||
endif
|
||||
DGBNAME?=$(EXENAME).debug
|
||||
|
||||
SRB2PS3DIR=sdl/SRB2PS3
|
||||
ICON0?=$(SRB2PS3DIR)/ICON0.png
|
||||
SFOXML?=sfo.xml
|
||||
SRB2TTF?=sdl/srb2.ttf
|
||||
|
||||
TITLE=Sonic Robo Blast 2 v2.0.6
|
||||
APPID=SRB2-PS3
|
||||
CONTENTID=UP0001-$(APPID)_00-0000000000000000
|
||||
|
||||
FSELF=$(PS3DEV)/bin/fself.py
|
||||
MAKE_SELF_NPDRM=$(PS3DEV)/ps3publictools/make_self_npdrm
|
||||
FINALIZE=$(PS3DEV)/ps3publictools/package_finalize
|
||||
SFO=$(PS3DEV)/bin/sfo.py
|
||||
PKG=$(PS3DEV)/bin/pkg.py
|
||||
PS3LOADEXE=$(PS3DEV)/ps3tools/ps3load
|
||||
SED=sed
|
||||
MV=mv
|
||||
XARGS=xargs
|
||||
FOR=for
|
||||
SHXARGS:=$(XARGS)
|
||||
SHSED:=$(SED)
|
||||
SPRXLINKER=$(PS3DEV)/bin/sprxlinker
|
||||
|
||||
ifdef JAILBREAK
|
||||
PKGDIR=$(BIN)/pkg-jb
|
||||
else
|
||||
PKGDIR=$(BIN)/pkg
|
||||
endif
|
||||
USRDIR=$(PKGDIR)/USRDIR
|
||||
ETCDIR=$(USRDIR)/etc
|
||||
WGET=wget -P $(ETCDIR) -c -nc
|
||||
|
||||
ifndef ECHO
|
||||
FSELF:=@$(FSELF)
|
||||
MAKE_SELF_NPDRM:=@$(MAKE_SELF_NPDRM)
|
||||
FINALIZE:=@$(FINALIZE)
|
||||
SFO:=@$(SFO)
|
||||
PKG:=@$(PKG)
|
||||
PS3LOADEXE:=@$(PS3LOADEXE)
|
||||
SED:=@$(SED)
|
||||
MV:=@$(MV)
|
||||
SPRXLINKER:=@$(SPRXLINKER)
|
||||
XARGS:=@$(XARGS)
|
||||
FOR:=@(FOR)
|
||||
endif
|
||||
|
||||
# SRB2PS3 needs SDL_ttf to display any console text
|
||||
SDL_TTF=1
|
||||
|
||||
# newlib has no support for networking
|
||||
#NONET=1
|
||||
|
||||
# use absolute paths because changing PATH variable breaks distcc
|
||||
PREFIX := $(PS3DEV)/ppu/bin/$(PREFIX)
|
||||
|
||||
# PS3DEV toolchain libdir and includedir
|
||||
PS3DEV_INC := $(PS3DEV)/ppu/include
|
||||
PS3DEV_LIB := $(PS3DEV)/ppu/lib
|
||||
|
||||
# PSL1GHT libdir and includedir
|
||||
PSL1GHT_INC := $(PSL1GHT)/ppu/include
|
||||
PSL1GHT_LIB := $(PSL1GHT)/ppu/lib
|
||||
|
||||
PS3PORTS := $(PS3DEV)/portlibs
|
||||
PS3PORTS_BIN := $(PS3PORTS)/ppu/bin
|
||||
PS3PORTS_INC := $(PS3PORTS)/ppu/include
|
||||
|
||||
PNG_CONFIG := $(PS3PORTS_BIN)/libpng-config
|
||||
# static compilation
|
||||
PNG_STATIC=1
|
||||
|
||||
SDL_CONFIG := $(PS3PORTS_BIN)/sdl-config
|
||||
|
||||
INCLUDE := -I$(PSL1GHT_INC) -I$(PS3DEV_INC) -I$(PS3PORTS_INC)
|
||||
|
||||
OPTS+=-D_PS3 -DUNIXCOMMON
|
||||
CFLAGS+= -g $(INCLUDE) -L$(PSL1GHT_LIB) -L$(PS3DEV_LIB) -L$(PS3DEV)/lib
|
||||
CXXFLAGS+=$(CFLAGS)
|
||||
LDFLAGS+= -B$(PSL1GHT_LIB) -B$(PS3DEV_LIB) -B$(PS3DEV)/lib
|
||||
LIBS+=-lrsx
|
||||
ifndef NONET
|
||||
LIBS+=-lnet -lsysmodule
|
||||
endif
|
||||
|
||||
$(BIN)/$(PKGNAME): $(OBJS) $(BIN)/$(EXENAME)
|
||||
@echo Linking $(PKGNAME)...
|
||||
-$(MKDIR) $(ETCDIR)
|
||||
$(CP) $(ICON0) $(PKGDIR)
|
||||
$(CP) $(SRB2TTF) $(ETCDIR)
|
||||
ifdef WITHDATA
|
||||
$(FOR) datafile in $(shell echo $(D_FILES) | $(SHSED) 's/\.srb/\.wad/' | $(SHXARGS) -n 1 basename); do \
|
||||
$(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$datafile; \
|
||||
done
|
||||
endif
|
||||
$(SPRXLINKER) $(BIN)/$(EXENAME)
|
||||
ifdef JAILBREAK
|
||||
$(SED) 's/@@PS3_SYSTEM_VER@@/3.41/' $(SRB2PS3DIR)/$(SFOXML) > $(BIN)/$(SFOXML)
|
||||
$(FSELF) -n $(BIN)/$(EXENAME) $(USRDIR)/EBOOT.BIN
|
||||
else
|
||||
$(SED) 's/@@PS3_SYSTEM_VER@@/3.55/' $(SRB2PS3DIR)/$(SFOXML) > $(BIN)/$(SFOXML)
|
||||
$(MAKE_SELF_NPDRM) $(BIN)/$(EXENAME) $(USRDIR)/EBOOT.BIN $(CONTENTID)
|
||||
endif
|
||||
$(SFO) --title "$(TITLE)" --appid "$(APPID)" -f $(BIN)/$(SFOXML) $(PKGDIR)/PARAM.SFO
|
||||
$(PKG) --contentid $(CONTENTID) $(PKGDIR)/ $(BIN)/$(PKGNAME)
|
||||
ifndef JAILBREAK
|
||||
$(FINALIZE) $(BIN)/$(PKGNAME)
|
||||
endif
|
||||
|
||||
run: $(BIN)/$(EXENAME)
|
||||
$(PS3LOADEXE) $(USRDIR)/EBOOT.BIN
|
|
@ -1,39 +0,0 @@
|
|||
<?xml version="1.0" ?>
|
||||
<sfo>
|
||||
<value name="APP_VER" type="string">
|
||||
02.06
|
||||
</value>
|
||||
<value name="ATTRIBUTE" type="integer">
|
||||
0
|
||||
</value>
|
||||
<value name="BOOTABLE" type="integer">
|
||||
1
|
||||
</value>
|
||||
<value name="CATEGORY" type="string">
|
||||
HG
|
||||
</value>
|
||||
<value name="LICENSE" type="string">
|
||||
This application was created with the official non-official SDK called PSL1GHT, for more information visit http://www.psl1ght.com/ . This is in no way associated with Sony Computer Entertainment Inc., please do not contact them for help, they will not be able to provide it.
|
||||
</value>
|
||||
<value name="PARENTAL_LEVEL" type="integer">
|
||||
0
|
||||
</value>
|
||||
<value name="PS3_SYSTEM_VER" type="string">
|
||||
0@@PS3_SYSTEM_VER@@00
|
||||
</value>
|
||||
<value name="RESOLUTION" type="integer">
|
||||
63
|
||||
</value>
|
||||
<value name="SOUND_FORMAT" type="integer">
|
||||
279
|
||||
</value>
|
||||
<value name="TITLE" type="string">
|
||||
Sonic Robo Blast 2
|
||||
</value>
|
||||
<value name="TITLE_ID" type="string">
|
||||
SRB200000
|
||||
</value>
|
||||
<value name="VERSION" type="string">
|
||||
02.06
|
||||
</value>
|
||||
</sfo>
|
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB |
|
@ -1,126 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for SRB2/PSP
|
||||
#
|
||||
|
||||
#
|
||||
#hmmm, the PSP
|
||||
#
|
||||
|
||||
PSPSDK=$(shell psp-config -p)
|
||||
PSPDEV=$(shell psp-config -d)
|
||||
PSPPREFIX=$(shell psp-config -P)
|
||||
STRIP=psp-strip
|
||||
MKSFO?=mksfoex -d MEMSIZE=1
|
||||
#MKSFO=mksfo
|
||||
PACK_PBP=pack-pbp
|
||||
FIXUP=psp-fixup-imports
|
||||
HOSTCC:=$(CC)
|
||||
CC=$(PSPDEV)/bin/psp-gcc
|
||||
OBJCOPY=psp-objcopy
|
||||
OBJDUMP=psp-objdump
|
||||
ifdef FIXEDPRX
|
||||
PRXGEN=psp-prxgen
|
||||
else
|
||||
PRXGEN=$(OBJCOPY)
|
||||
endif
|
||||
ifndef PRXSIGN
|
||||
SIGNER:=$(PSPDEV)/bin/$(OBJCOPY)
|
||||
endif
|
||||
|
||||
ifndef ECHO
|
||||
MKSFO:=@$(MKSFO)
|
||||
PACK_PBP:=@$(PACK_PBP)
|
||||
FIXUP:=@$(FIXUP)
|
||||
PRXGEN:=@$(PRXGEN)
|
||||
endif
|
||||
|
||||
PSP_EBOOT_TITLE=SRB2-PSP vME
|
||||
PSP_EBOOT_SFO=$(BIN)/PARAM.SFO
|
||||
PSP_EBOOT_ICON=sdl/SRB2PSP/ICON0.png
|
||||
PSP_EBOOT_ICON1=NULL
|
||||
PSP_EBOOT_UNKPNG=NULL
|
||||
PSP_EBOOT_PIC1=sdl/SRB2PSP/PIC1.png
|
||||
PSP_EBOOT_SND0=NULL
|
||||
PSP_EBOOT_PSAR=NULL
|
||||
|
||||
SIGNER?=sdl/SRB2PSP/psp-prxsign/psp-prxsign
|
||||
|
||||
SDL=1
|
||||
PREFIX=psp
|
||||
NONX86=1
|
||||
#NOHW=1
|
||||
NOHS=1
|
||||
NOMD5=1
|
||||
NONET=1 #No TCPIP code
|
||||
NOPNG=1 #No Screenshot
|
||||
|
||||
OPTS=-I$(PSPPREFIX)/include -I$(PSPSDK)/include
|
||||
OPTS+=-DUNIXCOMMON -DFORCESDLMAIN -G0
|
||||
WFLAGS+=-Wno-undef
|
||||
WFLAGS+=-O1
|
||||
LIBS=-lm
|
||||
SDL_CONFIG?=$(PSPPREFIX)/bin/sdl-config
|
||||
#SDL_CFLAGS?=-I$(PSPDEV)/psp/include/SDL
|
||||
#SDL_LDFLAGS?=-lSDLmain -lSDL -lglut -lGLU -lGL -lpspgu -lpspaudiolib -lpspaudio -lpsphprm -lpspvfpu -lpsprtc
|
||||
ifndef NOMIXER
|
||||
LIBS:=-liberty -lvorbisfile -lvorbis -logg -lSDL $(LIBS)
|
||||
endif
|
||||
ifndef NOHW
|
||||
OPTS+=-DSTATIC_OPENGL -DMINI_GL_COMPATIBILITY
|
||||
LIBS+=-lGLU -lGL -lm
|
||||
endif
|
||||
#PSPSDK_LIBS=-L$(PSPSDK)/lib -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk
|
||||
#LIBS+=$(PSPSDK_LIBS) -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel
|
||||
ifdef FIXEDPRX
|
||||
LDFLAGS := -specs=$(PSPSDK)/lib/prxspecs -Wl,-q,-T$(PSPSDK)/lib/linkfile.prx $(LDFLAGS)
|
||||
LIBS+=$(PSPSDK)/lib/prxexports.o
|
||||
endif
|
||||
|
||||
ifeq ($(PSP_FW_VERSION),)
|
||||
PSP_FW_VERSION=150
|
||||
endif
|
||||
|
||||
CPPFLAGS:=-D_PSP_FW_VERSION=$(PSP_FW_VERSION) $(CPPFLAGS)
|
||||
|
||||
|
||||
# name of the exefile
|
||||
EXENAME?=SRB2PSP.elf
|
||||
PRXNAME?=SRB2PSP.prx
|
||||
DBGNAME?=SRB2PSP.debug
|
||||
|
||||
post-build: $(BIN)/EBOOT.PBP
|
||||
|
||||
kxploit: $(BIN)/$(EXENAME) $(PSP_EBOOT_SFO)
|
||||
-$(MKDIR) "$(BIN)/kxploit/srb2"
|
||||
@echo emitting kxploit/srb2/
|
||||
$(STRIP) $(BIN)/$(EXENAME) -o $(BIN)/kxploit/srb2/EBOOT.PBP
|
||||
@echo emitting kxploit/srb2%
|
||||
-$(MKDIR) "$(BIN)/kxploit/srb2%/"
|
||||
$(PACK_PBP) "$(BIN)/kxploit/srb2%/EBOOT.PBP" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
|
||||
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1) \
|
||||
$(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR)
|
||||
|
||||
sdl/SRB2PSP/psp-prxsign/psp-prxsign:
|
||||
-$(MAKE) -C sdl/SRB2PSP/psp-prxsign CFLAGS=-pipe CC="$(HOSTCC)"
|
||||
|
||||
fix-up: $(BIN)/$(EXENAME)
|
||||
@echo Running psp-fixup-imports on $(EXENAME)
|
||||
$(FIXUP) $(BIN)/$(EXENAME)
|
||||
|
||||
$(BIN)/$(PRXNAME): $(BIN)/$(EXENAME) fix-up
|
||||
@echo Building $(PRXNAME) out of $(EXENAME)
|
||||
$(PRXGEN) $(BIN)/$(EXENAME) $@
|
||||
|
||||
$(BIN)/EBOOT.PBP: $(BIN)/$(PRXNAME) $(SIGNER) $(PSP_EBOOT_SFO)
|
||||
@echo Signing and running pack-pbp to make PBP
|
||||
$(SIGNER) $(BIN)/$(PRXNAME) $(BIN)/$(PRXNAME).sign
|
||||
$(PACK_PBP) $@ $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
|
||||
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1) \
|
||||
$(PSP_EBOOT_SND0) $(BIN)/$(PRXNAME).sign $(PSP_EBOOT_PSAR)
|
||||
$(REMOVE) $(BIN)/$(PRXNAME).sign
|
||||
|
||||
$(PSP_EBOOT_SFO):
|
||||
-$(MKDIR) $(BIN)
|
||||
$(MKSFO) '$(PSP_EBOOT_TITLE)' $@
|
||||
|
||||
#include $(PSPSDK)/lib/build.mak
|
Binary file not shown.
Before Width: | Height: | Size: 20 KiB |
2
src/sdl2/SRB2PSP/psp-prxsign/.gitignore
vendored
2
src/sdl2/SRB2PSP/psp-prxsign/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
/psp-prxsign
|
||||
/psp-prxsign.exe
|
|
@ -1,22 +0,0 @@
|
|||
EXE=psp-prxsign
|
||||
SRC=main.c cmac.c
|
||||
OBJ=$(SRC:.c=.o)# replaces the .c from SRC with .o
|
||||
|
||||
OPENSSL_PKGCONFIG?=openssl
|
||||
OPENSSL_CFLAGS?=$(shell pkg-config $(OPENSSL_PKGCONFIG) --cflags)
|
||||
OPENSSL_LDFLAGS?=$(shell pkg-config $(OPENSSL_PKGCONFIG) --libs)
|
||||
|
||||
CFLAGS+=$(OPENSSL_CFLAGS)
|
||||
LDFLAGS+=$(OPENSSL_LDFLAGS)
|
||||
|
||||
.PHONY : all # .PHONY ignores files named all
|
||||
|
||||
all: $(EXE) # all is dependent on $(BIN) to be complete
|
||||
|
||||
|
||||
$(EXE): $(OBJ) # $(EXE) is dependent on all of the files in $(OBJ) to exist
|
||||
$(CC) $^ $(LDFLAGS) -o $@
|
||||
|
||||
.PHONY : clean # .PHONY ignores files named clean
|
||||
clean:
|
||||
-$(RM) $(OBJ) $(EXE)
|
|
@ -1,130 +0,0 @@
|
|||
#include "cmac.h"
|
||||
|
||||
#define AES_128 0
|
||||
unsigned char const_Rb[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87
|
||||
};
|
||||
unsigned char const_Zero[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
void xor_128(unsigned char *a, unsigned char *b, unsigned char *out)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<16; i++)
|
||||
{
|
||||
out[i] = a[i] ^ b[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* AES-CMAC Generation Function */
|
||||
|
||||
static inline void leftshift_onebit(unsigned char *input,unsigned char *output)
|
||||
{
|
||||
int i;
|
||||
unsigned char overflow = 0;
|
||||
|
||||
for ( i=15; i>=0; i-- )
|
||||
{
|
||||
output[i] = input[i] << 1;
|
||||
output[i] |= overflow;
|
||||
overflow = (input[i] & 0x80)?1:0;
|
||||
}
|
||||
}
|
||||
|
||||
void generate_subkey(unsigned char *key, unsigned char *K1, unsigned char *K2)
|
||||
{
|
||||
unsigned char L[16];
|
||||
unsigned char Z[16];
|
||||
unsigned char tmp[16];
|
||||
int i;
|
||||
|
||||
for ( i=0; i<16; i++ ) Z[i] = 0;
|
||||
|
||||
AES_KEY aes;
|
||||
AES_set_encrypt_key(key, 128, &aes);
|
||||
|
||||
AES_encrypt(Z, L, &aes);
|
||||
|
||||
if ( (L[0] & 0x80) == 0 ) /* If MSB(L) = 0, then K1 = L << 1 */
|
||||
{
|
||||
leftshift_onebit(L,K1);
|
||||
} else { /* Else K1 = ( L << 1 ) (+) Rb */
|
||||
leftshift_onebit(L,tmp);
|
||||
xor_128(tmp,const_Rb,K1);
|
||||
}
|
||||
|
||||
if ( (K1[0] & 0x80) == 0 )
|
||||
{
|
||||
leftshift_onebit(K1,K2);
|
||||
} else {
|
||||
leftshift_onebit(K1,tmp);
|
||||
xor_128(tmp,const_Rb,K2);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void padding ( unsigned char *lastb, unsigned char *pad, int length )
|
||||
{
|
||||
int j;
|
||||
|
||||
/* original last block */
|
||||
for ( j=0; j<16; j++ )
|
||||
{
|
||||
if ( j < length )
|
||||
{
|
||||
pad[j] = lastb[j];
|
||||
} else if ( j == length ) {
|
||||
pad[j] = 0x80;
|
||||
} else {
|
||||
pad[j] = 0x00;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AES_CMAC ( unsigned char *key, unsigned char *input, int length, unsigned char *mac )
|
||||
{
|
||||
unsigned char X[16],Y[16], M_last[16], padded[16];
|
||||
unsigned char K1[16], K2[16];
|
||||
int n, i, flag;
|
||||
generate_subkey(key,K1,K2);
|
||||
|
||||
n = (length+15) / 16; /* n is number of rounds */
|
||||
|
||||
if ( n == 0 )
|
||||
{
|
||||
n = 1;
|
||||
flag = 0;
|
||||
} else {
|
||||
if ( (length%16) == 0 ) { /* last block is a complete block */
|
||||
flag = 1;
|
||||
} else { /* last block is not complete block */
|
||||
flag = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( flag ) { /* last block is complete block */
|
||||
xor_128(&input[16*(n-1)],K1,M_last);
|
||||
} else {
|
||||
padding(&input[16*(n-1)],padded,length%16);
|
||||
xor_128(padded,K2,M_last);
|
||||
}
|
||||
AES_KEY aes;
|
||||
AES_set_encrypt_key(key, 128, &aes);
|
||||
|
||||
for ( i=0; i<16; i++ ) X[i] = 0;
|
||||
for ( i=0; i<n-1; i++ )
|
||||
{
|
||||
xor_128(X,&input[16*i],Y); /* Y := Mi (+) X */
|
||||
AES_encrypt(Y, X, &aes); /* X := AES-128(KEY, Y); */
|
||||
}
|
||||
|
||||
xor_128(X,M_last,Y);
|
||||
AES_encrypt(Y, X, &aes);
|
||||
|
||||
for ( i=0; i<16; i++ ) {
|
||||
mac[i] = X[i];
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
---------------------------------------------------------------------------
|
||||
Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
|
||||
|
||||
LICENSE TERMS
|
||||
|
||||
The redistribution and use of this software (with or without changes)
|
||||
is allowed without the payment of fees or royalties provided that:
|
||||
|
||||
1. source code distributions include the above copyright notice, this
|
||||
list of conditions and the following disclaimer;
|
||||
|
||||
2. binary distributions include the above copyright notice, this list
|
||||
of conditions and the following disclaimer in their documentation;
|
||||
|
||||
3. the name of the copyright holder is not used to endorse products
|
||||
built using this software without specific written permission.
|
||||
|
||||
DISCLAIMER
|
||||
|
||||
This software is provided 'as is' with no explicit or implied warranties
|
||||
in respect of its properties, including, but not limited to, correctness
|
||||
and/or fitness for purpose.
|
||||
---------------------------------------------------------------------------
|
||||
Issue Date: 6/10/2008
|
||||
*/
|
||||
|
||||
#ifndef CMAC_AES_H
|
||||
#define CMAC_AES_H
|
||||
|
||||
#include <string.h>
|
||||
#include <openssl/aes.h>
|
||||
|
||||
void xor_128(unsigned char *a, unsigned char *b, unsigned char *out);
|
||||
void generate_subkey(unsigned char *key, unsigned char *K1, unsigned char *K2);
|
||||
void AES_CMAC(unsigned char *key, unsigned char *input, int length, unsigned char *mac);
|
||||
|
||||
#endif
|
|
@ -1,25 +0,0 @@
|
|||
#ifndef __kirk_header__
|
||||
#define __kirk_header__
|
||||
|
||||
static unsigned int size_kirk_header = 272;
|
||||
static unsigned char kirk_header[] __attribute__((aligned(16))) = {
|
||||
0x2a, 0x4f, 0x3c, 0x49, 0x8a, 0x73, 0x4e, 0xd1, 0xf4, 0x55, 0x93, 0x0b, 0x9b, 0x69, 0xdc, 0x65,
|
||||
0x73, 0x22, 0x69, 0xd3, 0x73, 0x96, 0x7a, 0x60, 0x66, 0x8c, 0x88, 0xcf, 0x2f, 0x83, 0x58, 0xbc,
|
||||
0xb2, 0x00, 0x0a, 0x11, 0x72, 0x43, 0xc5, 0xde, 0xef, 0xbb, 0x2c, 0xbf, 0x97, 0x79, 0x6b, 0x9c,
|
||||
0x10, 0x1e, 0x7c, 0x57, 0x0e, 0xdb, 0x1d, 0x61, 0x6e, 0xb5, 0xf9, 0x3d, 0x35, 0xe9, 0x5c, 0xd8,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x33, 0x55, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x7e, 0x50, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x22, 0x74, 0x69, 0x66, 0x70, 0x73,
|
||||
0x70, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x33, 0x55, 0x00, 0x50, 0x34, 0x55, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x3d, 0x00, 0x50, 0x55, 0x0a, 0x01, 0x10, 0x00, 0x40, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4c, 0x6b, 0x3d, 0x00, 0xcc, 0xbb, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,190 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/aes.h>
|
||||
#include <openssl/sha.h>
|
||||
#include <elf.h>
|
||||
#include "cmac.h"
|
||||
#include "kirk_header.h"
|
||||
#include "psp_header.h"
|
||||
|
||||
typedef unsigned char byte;
|
||||
|
||||
typedef struct {
|
||||
byte key[16];
|
||||
byte ckey[16];
|
||||
byte head_hash[16];
|
||||
byte data_hash[16];
|
||||
byte unused[32];
|
||||
int unk1; // 1
|
||||
int unk2; // 0
|
||||
int unk3[2];
|
||||
int datasize;
|
||||
int dataoffset;
|
||||
int unk4[6];
|
||||
} kirk1head_t;
|
||||
|
||||
// secret kirk command 1 key
|
||||
byte kirk_key[] = {
|
||||
0x98, 0xc9, 0x40, 0x97, 0x5c, 0x1d, 0x10, 0xe8, 0x7f, 0xe6, 0x0e, 0xa3, 0xfd, 0x03, 0xa8, 0xba
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, relrem, size, fullsize, blocks, datasize;
|
||||
size_t j;
|
||||
kirk1head_t kirk;
|
||||
byte iv[16];
|
||||
byte cmac[32];
|
||||
byte subk[32];
|
||||
byte psph[0x150];
|
||||
byte *datablob;
|
||||
byte *filebuff;
|
||||
FILE *f;
|
||||
AES_KEY aesKey;
|
||||
Elf32_Ehdr *ehdr;
|
||||
Elf32_Shdr *shdr;
|
||||
Elf32_Rel *relo;
|
||||
|
||||
if(argc < 3) {
|
||||
printf("Usage: %s unsigned.prx signed.prx\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// clean kirk header, use modified PRXdecrypter to get it
|
||||
/*f = fopen(argv[1], "rb");
|
||||
if(!f) {
|
||||
printf("failed to open %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
fread(&kirk, 1, sizeof(kirk1head_t), f);
|
||||
fclose(f);*/
|
||||
//memcpy(&kirk, kirk_header, size_kirk_header);
|
||||
memcpy(&kirk, kirk_header, sizeof(kirk1head_t));
|
||||
|
||||
datasize = kirk.datasize;
|
||||
if(datasize % 16) datasize += 16 - (datasize % 16);
|
||||
|
||||
// original ~PSP header
|
||||
/*f = fopen(argv[2], "rb");
|
||||
if(!f) {
|
||||
free(datablob);
|
||||
printf("failed to open %s\n", argv[2]);
|
||||
return 1;
|
||||
}
|
||||
fread(psph, 1, 0x150, f);
|
||||
fclose(f);*/
|
||||
memcpy(&psph, psp_header, size_psp_header);
|
||||
|
||||
// file to encrypt
|
||||
f = fopen(argv[1], "rb");
|
||||
if(!f) {
|
||||
printf("psp-prxsign: Unable to open PRX\n");
|
||||
return 1;
|
||||
}
|
||||
fseek(f, 0, SEEK_END);
|
||||
size = ftell(f);
|
||||
if(size > datasize - 16) {
|
||||
fclose(f);
|
||||
printf("psp-prxsign: PRX is too large\n");
|
||||
return 1;
|
||||
}
|
||||
printf("%s : %i\n", argv[1], size);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
|
||||
fullsize = datasize + 0x30 + kirk.dataoffset;
|
||||
|
||||
// datablob holds everything needed to calculate data HASH
|
||||
datablob = malloc(fullsize);
|
||||
if(!datablob) {
|
||||
fclose(f);
|
||||
printf("psp-prxsign: Failed to allocate memory for blob\n");
|
||||
return 1;
|
||||
}
|
||||
memset(datablob, 0, fullsize);
|
||||
memcpy(datablob, &kirk.unk1, 0x30);
|
||||
memcpy(datablob + 0x30, psph, kirk.dataoffset);
|
||||
filebuff = datablob + 0x30 + kirk.dataoffset;
|
||||
|
||||
int whocares = fread(filebuff, 1, size, f);
|
||||
(void)whocares;
|
||||
fclose(f);
|
||||
|
||||
// remove relocations type 7
|
||||
relrem = 0;
|
||||
ehdr = (void *)filebuff;
|
||||
if(!memcmp(ehdr->e_ident, ELFMAG, 4) && ehdr->e_shnum) {
|
||||
shdr = (void *)(filebuff + ehdr->e_shoff);
|
||||
for(i = 0; i < ehdr->e_shnum; i++) {
|
||||
if(shdr[i].sh_type == 0x700000A0) {
|
||||
relo = (void *)(filebuff + shdr[i].sh_offset);
|
||||
for(j = 0; j < shdr[i].sh_size / sizeof(Elf32_Rel); j++) {
|
||||
if((relo[j].r_info & 0xFF) == 7) {
|
||||
relo[j].r_info = 0;
|
||||
relrem++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//printf("%i relocations type 7 removed\ncalculating ...\n", relrem);
|
||||
|
||||
// get AES/CMAC key
|
||||
AES_set_decrypt_key(kirk_key, 128, &aesKey);
|
||||
memset(iv, 0, 16);
|
||||
AES_cbc_encrypt(kirk.key, kirk.key, 32, &aesKey, iv, AES_DECRYPT);
|
||||
|
||||
// check header hash, optional
|
||||
// if you take correct kirk header, hash is always correct
|
||||
/* AES_CMAC(kirk.ckey, datablob, 0x30, cmac);
|
||||
if(memcmp(cmac, kirk.head_hash, 16)) {
|
||||
free(datablob);
|
||||
printf("header hash invalid\n");
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
// encrypt input file
|
||||
AES_set_encrypt_key(kirk.key, 128, &aesKey);
|
||||
memset(iv, 0, 16);
|
||||
AES_cbc_encrypt(filebuff, filebuff, datasize, &aesKey, iv, AES_ENCRYPT);
|
||||
|
||||
// make CMAC correct
|
||||
generate_subkey(kirk.ckey, subk, subk + 16);
|
||||
AES_set_encrypt_key(kirk.ckey, 128, &aesKey);
|
||||
blocks = fullsize / 16;
|
||||
memset(cmac, 0, 16);
|
||||
for(i = 0; i < blocks - 1; i++) {
|
||||
xor_128(cmac, &datablob[16 * i], cmac + 16);
|
||||
AES_encrypt(cmac + 16, cmac, &aesKey);
|
||||
}
|
||||
|
||||
AES_set_decrypt_key(kirk.ckey, 128, &aesKey);
|
||||
AES_decrypt(kirk.data_hash, iv, &aesKey);
|
||||
xor_128(cmac, iv, iv);
|
||||
xor_128(iv, subk, &datablob[16 * (blocks-1)]);
|
||||
// check it, optional
|
||||
// it works, this is only if you want to change something
|
||||
/* AES_CMAC(kirk.ckey, datablob, fullsize, cmac);
|
||||
if(memcmp(cmac, kirk.data_hash, 16)) {
|
||||
fclose(f);
|
||||
free(datablob);
|
||||
printf("data hash calculation error\n");
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
f = fopen(argv[2], "wb");
|
||||
if(!f) {
|
||||
free(datablob);
|
||||
printf("psp-prxsign: Failed to write signed PRX\n");
|
||||
return 1;
|
||||
}
|
||||
//printf("saving ...\n");
|
||||
// save ~PSP header
|
||||
fwrite(psph, 1, 0x150, f);
|
||||
// save encrypted file
|
||||
fwrite(filebuff, 1, fullsize - 0x30 - kirk.dataoffset, f);
|
||||
fclose(f);
|
||||
free(datablob);
|
||||
//printf("everything done\n");
|
||||
return 0;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
#ifndef __psp_header__
|
||||
#define __psp_header__
|
||||
|
||||
static unsigned int size_psp_header = 336;
|
||||
static unsigned char psp_header[] __attribute__((aligned(16))) = {
|
||||
0x7e, 0x50, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x22, 0x74, 0x69, 0x66, 0x70, 0x73,
|
||||
0x70, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x33, 0x55, 0x00, 0x50, 0x34, 0x55, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x3d, 0x00, 0x50, 0x55, 0x0a, 0x01, 0x10, 0x00, 0x40, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4c, 0x6b, 0x3d, 0x00, 0xcc, 0xbb, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||
0x90, 0x82, 0x4c, 0x48, 0xa3, 0x53, 0xb2, 0x1b, 0x13, 0x95, 0x2f, 0xf1, 0x0b, 0x90, 0x9c, 0x11,
|
||||
0x61, 0x40, 0x20, 0x67, 0xf8, 0xdb, 0xfc, 0x95, 0x5c, 0xbe, 0x8c, 0x80, 0xf3, 0x92, 0x03, 0x01,
|
||||
0xb0, 0xbe, 0xf5, 0xf8, 0xa1, 0xaf, 0xaf, 0xa8, 0x38, 0x26, 0x63, 0x09, 0x26, 0x0e, 0xb7, 0xd5,
|
||||
0x00, 0x33, 0x55, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x5c, 0x3e, 0x03, 0x22, 0xe5, 0x7d, 0xb9, 0xd1, 0x13, 0x67, 0x97, 0xa3, 0x5b, 0xd8, 0x77, 0x1f,
|
||||
0xf0, 0x05, 0xf3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x4a, 0xd7, 0x37,
|
||||
0xc2, 0x8f, 0x15, 0x43, 0x33, 0x93, 0x4d, 0x5b, 0xc0, 0x6e, 0xe4, 0x00, 0xc6, 0x0a, 0x71, 0x11,
|
||||
0x98, 0xb6, 0xc3, 0xb7, 0x59, 0x66, 0x21, 0xa8, 0x65, 0xf6, 0x53, 0xa9, 0x7a, 0x48, 0x17, 0xb6,
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,124 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for SRB2Wii native using libogc
|
||||
#
|
||||
|
||||
# Check if DEVKITPPC is set in the environment. If so, continue with compilation.
|
||||
.SUFFIXES:
|
||||
|
||||
ifeq ($(strip $(DEVKITPPC)),)
|
||||
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
|
||||
endif
|
||||
|
||||
# Set compiler flags
|
||||
|
||||
SRB2NAME?=srb2wii
|
||||
EXENAME?=$(SRB2NAME).elf
|
||||
DBGNAME?=$(SRB2NAME).elf.debug
|
||||
DOLNAME?=$(SRB2NAME).dol
|
||||
|
||||
ICONPNG?=sdl/SRB2WII/icon.png
|
||||
METAXML?=sdl/SRB2WII/meta.xml
|
||||
|
||||
APPDIR=apps/$(SRB2NAME)
|
||||
ZIPNAME=$(SRB2NAME).zip
|
||||
|
||||
ELF2DOL=$(DEVKITPPC)/bin/elf2dol
|
||||
WIILOADEXE=$(DEVKITPPC)/bin/wiiload
|
||||
ZIP=zip -r -9
|
||||
WGET=wget -P srb2wii -c -nc
|
||||
SED=sed
|
||||
XARGS=xargs
|
||||
SHXARGS:=$(XARGS)
|
||||
SHSED:=$(SED)
|
||||
FOR=for
|
||||
|
||||
ifndef ECHO
|
||||
ELF2DOL:=@$(ELF2DOL)
|
||||
WIILOADEXE:=@$(WIILOADEXE)
|
||||
ZIP:=@$(ZIP)
|
||||
SED:=@$(SED)
|
||||
XARGS:=@$(XARGS)
|
||||
FOR:=@$(FOR)
|
||||
endif
|
||||
|
||||
# Disable same warning flags
|
||||
WFLAGS+=-Wno-shadow -Wno-char-subscripts -Wno-old-style-definition -Wno-unsuffixed-float-constants
|
||||
|
||||
# newlib has no support for networking
|
||||
NONET=1
|
||||
|
||||
# use pkgconfig for PKG
|
||||
PNG_PKGCONFIG=libpng
|
||||
|
||||
# use absolute paths because changing PATH variable breaks distcc
|
||||
PREFIX := $(DEVKITPPC)/bin/$(PREFIX)
|
||||
|
||||
# FIXME: DevkitPPC and ready-compiled SDL Wii require these things to be in a silly order
|
||||
# libogc/DevkitPro required stuff
|
||||
LIBOGC := $(DEVKITPRO)/libogc
|
||||
LIBOGC_INC := $(LIBOGC)/include
|
||||
LIBOGC_LIB := $(LIBOGC)/lib
|
||||
|
||||
PORTLIBS := $(DEVKITPRO)/portlibs/ppc
|
||||
PORTLIBS_INC := $(PORTLIBS)/include
|
||||
PORTLIBS_LIB := $(PORTLIBS)/lib
|
||||
|
||||
SDL_CPPFLAGS := -I$(LIBOGC_INC)/SDL
|
||||
SDL_LIB := $(DEVKITPRO)/libogc/lib/wii
|
||||
INCLUDE := -I$(LIBOGC_INC) $(SDL_CPPFLAGS) -I$(PORTLIBS_INC)
|
||||
|
||||
PKG_CONFIG_PATH := $(PORTLIBS)/lib/pkgconfig
|
||||
PKG_BROKEN_SWTICH := --static --define-variable=DEVKITPRO=$(DEVKITPRO)
|
||||
PNG_PKGCONFIG := $(PKG_CONFIG_PATH)/libpng.pc $(PKG_BROKEN_SWTICH)
|
||||
ZLIB_PKGCONFIG := $(PKG_CONFIG_PATH)/zlib.pc $(PKG_BROKEN_SWTICH)
|
||||
|
||||
ZLIB_CFLAGS?=$(shell $(PKG_CONFIG) $(ZLIB_PKGCONFIG) --cflags)
|
||||
ZLIB_LDFLAGS?=$(shell $(PKG_CONFIG) $(ZLIB_PKGCONFIG) --libs)
|
||||
|
||||
ifdef RDB
|
||||
LIBS+=-ldb
|
||||
OPTS+=-DREMOTE_DEBUGGING=$(RDB)
|
||||
endif
|
||||
|
||||
LIBS+= -L$(SDL_LIB)
|
||||
ifndef NOMIXER
|
||||
LD=$(CXX)
|
||||
LIBS+=-lSDL_mixer -lvorbisidec -lsmpeg
|
||||
endif
|
||||
LIBS+=-lSDL
|
||||
|
||||
LIBS+=$(ZLIB_LDFLAGS) -lfat -lwiiuse -lbte -logc -lm -lwiikeyboard -L$(LIBOGC_LIB)
|
||||
|
||||
MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
|
||||
OPTS+=-DWII -D_WII -DUNIXCOMMON
|
||||
CFLAGS+=-D__BIG_ENDIAN__ -g -O3 -fsigned-char $(MACHDEP) $(INCLUDE)
|
||||
CXXFLAGS+=$(CFLAGS)
|
||||
LDFLAGS+=-g $(MACHDEP) -Wl,-Map,$(notdir $@).map
|
||||
|
||||
SDL_CONFIG=/bin/true
|
||||
SDL_CFLAGS=
|
||||
SDL_LDFLAGS=
|
||||
|
||||
$(BIN)/$(DOLNAME): $(BIN)/$(EXENAME)
|
||||
@echo Linking $(DOLNAME)...
|
||||
$(ELF2DOL) $(BIN)/$(EXENAME) $(BIN)/$(DOLNAME)
|
||||
@echo Creating /apps/$(SRB2NAME)...
|
||||
$(MKDIR) $(APPDIR)
|
||||
$(CP) $(BIN)/$(DOLNAME) $(APPDIR)/boot.dol
|
||||
$(CP) $(ICONPNG) $(APPDIR)
|
||||
$(CP) $(METAXML) $(APPDIR)
|
||||
ifdef WITHDATA
|
||||
$(MKDIR) srb2wii
|
||||
$(FOR) datafile in $(shell echo $(D_FILES) | $(SHSED) -e 's/\.srb/\.wad/' -e 's/music.dta//' | $(SHXARGS) -n 1 basename); do \
|
||||
$(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$datafile; \
|
||||
done
|
||||
# downsampled music.dta specially for SRB2Wii
|
||||
$(WGET) http://repos.srb2.org/srb2ports/music.dta
|
||||
$(ZIP) $(BIN)/$(ZIPNAME) $(APPDIR) srb2wii
|
||||
else
|
||||
$(ZIP) $(BIN)/$(ZIPNAME) $(APPDIR)
|
||||
endif
|
||||
$(REMOVE) -r $(APPDIR)
|
||||
|
||||
run: $(BIN)/$(EXENAME)
|
||||
$(WIILOADEXE) $(BIN)/$(DBGNAME)
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<app version="1">
|
||||
<name>SRB2Wii</name>
|
||||
<coder>Callum</coder>
|
||||
<version>2.0.6</version>
|
||||
<release_date>20101207</release_date>
|
||||
<short_description>A 3D Sonic fangame</short_description>
|
||||
<long_description>Sonic Robo Blast 2 is a 3D fangame by a small group called
|
||||
Sonic Team Junior, using the Doom engine as a base.
|
||||
The game has been worked on for almost 11 years so far, and
|
||||
it is still being very much developed today, with a huge
|
||||
fanbase developing custom content, including characters,
|
||||
levels, and even large-scale modifications that play out
|
||||
a brand new adventure.
|
||||
Based on the Doom II engine, SRB2's system requirements
|
||||
are very low, even the oldest computers can play it at a
|
||||
decent speed.</long_description>
|
||||
</app>
|
|
@ -1,44 +0,0 @@
|
|||
#
|
||||
# Makefile.cfg for SRB2/XBOX
|
||||
#
|
||||
|
||||
#
|
||||
#hmmm, the XBOX
|
||||
#
|
||||
|
||||
NOHW=1 #No working OpenGL right now
|
||||
NOHS=1 #No HWSound right now
|
||||
NOASM=1 #No Fast code
|
||||
NONET=1 #No network code
|
||||
NOMD5=1 #No Slow MD5
|
||||
NOPNG=1 #No Screenshot
|
||||
#SDLMAIN=1 #SDLMain!
|
||||
|
||||
ifndef OPENXDK
|
||||
OPENXDK=/usr/local/openxdk
|
||||
endif
|
||||
|
||||
CXBE=$(OPENXDK)/bin/cxbe
|
||||
|
||||
ifdef ECHO
|
||||
CXBE:=@$(CXBE)
|
||||
endif
|
||||
|
||||
ifndef NOHW
|
||||
OPTS+=-DMINI_GL_COMPATIBILITY
|
||||
endif
|
||||
|
||||
BUILTLM=-fno-builtin
|
||||
CFLAGS+=-D_XBOX -std=gnu99 -ffreestanding $(BUILTLM) -fno-exceptions
|
||||
CFLAGS+=-I$(OPENXDK)/i386-pc-xbox/include -I$(OPENXDK)/include
|
||||
OPTS+=-nostdlib -mno-cygwin -march=i386
|
||||
LDFLAGS+=-nostdlib -Wl,--file-alignment,0x20 -Wl,--section-alignment,0x20 -shared -Wl,--entry,_WinMainCRTStartup -Wl,--strip-all -L$(OPENXDK)/i386-pc-xbox/lib -L$(OPENXDK)/lib
|
||||
LIBS=-lg -lc -lm
|
||||
SDL_CFLAGS?=-I$(OPENXDK)/include/SDL
|
||||
SDL_LDFLAGS?=-lSDL -lopenxdk -lhal -lc -lhal -lusb -lhal -lc -lxboxkrnl
|
||||
|
||||
i_system_o+=$(OBJDIR)/xboxhelp.o
|
||||
|
||||
# name of the exefile
|
||||
EXENAME?=SRB2XBOX.EXE
|
||||
BINNAME?=default.xbe
|
|
@ -1,91 +0,0 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 2004 by Sonic Team Jr.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it 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.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// stub and replacement "ANSI" C functions for use under OpenXDK
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "../../doomdef.h"
|
||||
#include "xboxhelp.h"
|
||||
#ifdef __GNUC__
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
char *getcwd(char *_buf, size_t _size )
|
||||
{
|
||||
(void)_buf;
|
||||
(void)_size;
|
||||
return _buf;
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
int mkdir(const char *path)
|
||||
{
|
||||
(void)path;
|
||||
return 0;
|
||||
}
|
||||
#elif 0 //__GNUC__?
|
||||
int mkdir(const char *path, mode_t _mode)
|
||||
{
|
||||
(void)path;
|
||||
(void)_mode;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int chdir (const char *__path )
|
||||
{
|
||||
(void)__path;
|
||||
return 0;
|
||||
}
|
||||
|
||||
time_t time(time_t *T)
|
||||
{
|
||||
long returntime = 0;
|
||||
(void)T;
|
||||
/*
|
||||
SYSTEMTIME st;
|
||||
FILETIME stft;
|
||||
INT64 ftli;
|
||||
if (!T) return returntime;
|
||||
GetSystemTime(&st);
|
||||
SystemTimeToFileTime(&st,&stft);
|
||||
CopyMemory(&ftli,&stft,sizeof (LARGE_INTEGER));
|
||||
returntime = (long)ftli;
|
||||
*T = returntime;
|
||||
*/
|
||||
return returntime;
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <RtcApi.h>
|
||||
void __cdecl _RTC_Initialize(void)
|
||||
{
|
||||
}
|
||||
char *getenv(const char *__env)
|
||||
{
|
||||
__env = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int putenv(const char *__env)
|
||||
{
|
||||
__env = NULL;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
|
@ -1,6 +0,0 @@
|
|||
#if defined (_MSC_VER)
|
||||
int access(const char *path, int amode);
|
||||
char *getcwd(char *_buf, size_t _size );
|
||||
int mkdir(const char *path);
|
||||
int chdir (const char *__path );
|
||||
#endif
|
Loading…
Reference in a new issue