mirror of
https://github.com/open-develop/xenoborg.git
synced 2024-06-02 20:17:52 -04:00
201 lines
5 KiB
C
201 lines
5 KiB
C
/*
|
|
* Xenoborg - Xbox Emulator
|
|
* Copyright (C) 2006-2010 blueshogun96
|
|
*
|
|
* Name: Xbe.h
|
|
* Desc: Xbe loader.
|
|
*
|
|
* Changelog:
|
|
* 10/14/2010 - Initial import from an old build. Fixed it up a bit because
|
|
* the old version looks so ugly.
|
|
*
|
|
* 10/15/2010 - Added support for Sega Chihiro .xbe files. The XOR keys are
|
|
* different than normal Xbox xbe files. Chihiro mode will be a
|
|
* seperate Xenoborg build though.
|
|
*/
|
|
|
|
|
|
#ifndef XBE_H
|
|
#define XBE_H
|
|
|
|
|
|
//******************************************
|
|
// Important Xbe defines
|
|
//******************************************
|
|
|
|
// Known (or at least used) Xbe flags
|
|
#define MountUtilityDrive 0x00000001
|
|
#define FormatUtilityDrive 0x00000002
|
|
#define Limit64Megabytes 0x00000004
|
|
#define DontSetUpHardDisk 0x00000008
|
|
|
|
#define XOR_ENTRY_DEBUG 0x94859d4b
|
|
#define XOR_ENTRY_RETAIL 0xA8FC57AB //0xa8fc57ab
|
|
#define XOR_KERNEL_DEBUG 0xefb1f152
|
|
#define XOR_KERNEL_RETAIL 0x5b6d40b6
|
|
|
|
// Sega Chihiro .xbe have a different XOR key.
|
|
#define XOR_ENTRY_CHIHIRO 0x40B5C16E
|
|
#define XOR_KERNEL_CHIHIRO 0x2290059D
|
|
|
|
#define XBEIMAGE_MEDIA_TYPE_HARD_DISK 0x00000001
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_X2 0x00000002
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_CD 0x00000004
|
|
#define XBEIMAGE_MEDIA_TYPE_CD 0x00000008
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_5_RO 0x00000010
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_9_RO 0x00000020
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_5_RW 0x00000040
|
|
#define XBEIMAGE_MEDIA_TYPE_DVD_9_RW 0x00000080
|
|
#define XBEIMAGE_MEDIA_TYPE_DONGLE 0x00000100
|
|
#define XBEIMAGE_MEDIA_TYPE_MEDIA_BOARD 0x00000200
|
|
#define XBEIMAGE_MEDIA_TYPE_NONSECURE_HARD_DISK 0x40000000
|
|
#define XBEIMAGE_MEDIA_TYPE_NONSECURE_mode 0x80000000
|
|
#define XBEIMAGE_MEDIA_TYPE_MEDIA_MASK 0x00FFFFFF
|
|
|
|
// Game info
|
|
#define XBEIMAGE_GAME_REIGON_NA 0x00000001
|
|
#define XBEIMAGE_GAME_REIGON_JAPAN 0x00000002
|
|
#define XBEIMAGE_GAME_REIGON_RESTOFWORLD 0x00000004
|
|
#define XBEIMAGE_GAME_REIGON_MANUFACTURING 0x80000000
|
|
|
|
// library defines
|
|
#define LIB_QFEVERSION 0x1fff
|
|
#define LIB_APPROVED 0x6000
|
|
#define LIB_DEBUG_BUILD 0x8000
|
|
|
|
// section flags
|
|
#define SECTION_WRITABLE 0x00000001
|
|
#define SECTION_PRELOAD 0x00000002
|
|
#define SECTION_EXECUTABLE 0x00000004
|
|
#define SECTION_INSERTED_FILE 0x00000008
|
|
#define SECTION_HEAD_PAGE_READ_ONLY 0x00000010
|
|
#define SECTION_TAIL_PAGE_READ_ONLY 0x00000020
|
|
|
|
|
|
|
|
#pragma pack( 1 )
|
|
typedef struct _XbeImageHeader
|
|
{
|
|
char sbSignature[4];
|
|
BYTE ubAuthorizationSignature[0x100];
|
|
DWORD dwBaseAddr;
|
|
DWORD dwSizeHeader;
|
|
DWORD dwSizeImage;
|
|
DWORD dwSizeImageHeader;
|
|
DWORD dwTimeDate;
|
|
DWORD dwCertificateAddr;
|
|
DWORD dwNumSections;
|
|
DWORD dwSectionAddr;
|
|
DWORD dwInitFlags;
|
|
DWORD dwEntryPoint;
|
|
DWORD dwTLSAddr;
|
|
DWORD dwPlsStackCommit;
|
|
DWORD dwPeHeapReserve;
|
|
DWORD dwPeHeapCommit;
|
|
DWORD dwPeSizeImage;
|
|
DWORD dwPeChecksum;
|
|
DWORD dwTimedata;
|
|
DWORD dwPathnameAddr;
|
|
DWORD dwFilenameAddr;
|
|
DWORD dwUnicodeFilenameAddr;
|
|
DWORD dwKernelThunkAddr;
|
|
DWORD dwNonKernelDirAddr;
|
|
DWORD dwNumLibVersions;
|
|
DWORD dwLibVersionAddr;
|
|
DWORD dwKernelLibVersionAddr;
|
|
DWORD dwXapiLibVersionAddr;
|
|
DWORD dwLogoBitmapAddr;
|
|
DWORD dwLogoBitmapSize;
|
|
}
|
|
#pragma pack()
|
|
XbeImageHeader;
|
|
|
|
#pragma pack( 1 )
|
|
typedef struct _XbeCertificate
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwTimeDate;
|
|
DWORD dwTitleID;
|
|
wchar_t wcTitle[0x28];
|
|
DWORD dwAlternateTitleIDs[0x16];
|
|
DWORD dwMediaFlags;
|
|
DWORD dwGameReigon;
|
|
DWORD dwGameRatings;
|
|
DWORD dwCertificateVersion;
|
|
BYTE ubLanKey[0x10];
|
|
BYTE ubSignatureKey[0x10];
|
|
BYTE ubAltSignatureKey[0x10 * 0x10];
|
|
}
|
|
#pragma pack()
|
|
XbeCertificate;
|
|
|
|
#pragma pack( 1 )
|
|
typedef struct _XbeSectionHeader
|
|
{
|
|
DWORD dwFlags;
|
|
DWORD dwVirtualAddr;
|
|
DWORD dwVirtualSize;
|
|
DWORD dwRawAddr;
|
|
DWORD dwRawSize;
|
|
DWORD dwSectionNameAddr;
|
|
DWORD dwSectionNameReferenceCount;
|
|
DWORD dwHeadSharedPageReferenceCountAddr;
|
|
DWORD dwTailSharedPageReferenceCountAddr;
|
|
BYTE ubSectionDigest[0x14];
|
|
}
|
|
#pragma pack()
|
|
XbeSectionHeader;
|
|
|
|
#pragma pack( 1 )
|
|
typedef struct _XbeLibrary
|
|
{
|
|
char sbLibraryName[8];
|
|
WORD wMajorVersion;
|
|
WORD wMinorVersion;
|
|
WORD wBuildVersion;
|
|
DWORD dwFlags;
|
|
}
|
|
#pragma pack()
|
|
XbeLibrary;
|
|
|
|
#pragma pack( 1 )
|
|
typedef struct _XbeTLS
|
|
{
|
|
DWORD dwDataStartAddr;
|
|
DWORD dwDataEndAddr;
|
|
DWORD dwTlsIndexAddr;
|
|
DWORD dwTlsCallbackAddr;
|
|
DWORD dwSizeZeroFill;
|
|
DWORD dwCharacteristics;
|
|
}
|
|
#pragma pack()
|
|
XbeTLS;
|
|
|
|
//***********************************************
|
|
// Xbe struct
|
|
//***********************************************
|
|
struct Xbe_t
|
|
{
|
|
BYTE* m_pXbeData;
|
|
char* m_szXbeFileName;
|
|
BOOL m_bXbeHasBeenOpened;
|
|
long m_lXbeFileSize;
|
|
DWORD m_dwActualEntryPoint;
|
|
BOOL m_bIsChihiro;
|
|
|
|
XbeImageHeader m_XbeHeader;
|
|
XbeCertificate m_XbeCertificate;
|
|
XbeSectionHeader* m_XbeSectionHeader;
|
|
XbeLibrary* m_XbeStandardLibrary, m_XbeKernelLibrary, m_XbeXapiLibrary;
|
|
XbeTLS m_XbeTLS;
|
|
};
|
|
|
|
|
|
BOOL XBELoad( char* szXbeFileName );
|
|
void XBEUnload();
|
|
BOOL XBEProcessData();
|
|
BOOL XBEWriteToMemory();
|
|
|
|
extern Xbe_t Xbe;
|
|
|
|
#endif // Xbe_h
|