64 bit improvements
This commit is contained in:
parent
3832edba89
commit
f4b023df31
9 changed files with 101 additions and 90 deletions
|
|
@ -2,13 +2,49 @@
|
|||
#define _SRC_BYTESWAP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "game/animdata.h"
|
||||
#include "game/hsfformat.h"
|
||||
|
||||
typedef struct AnimData32b {
|
||||
s16 bankNum;
|
||||
s16 patNum;
|
||||
s16 bmpNum;
|
||||
s16 useNum;
|
||||
|
||||
u32 bank;
|
||||
u32 pat;
|
||||
u32 bmp;
|
||||
} AnimData32b;
|
||||
|
||||
typedef struct AnimBankData32b {
|
||||
s16 timeNum;
|
||||
s16 unk;
|
||||
u32 frame;
|
||||
} AnimBankData32b;
|
||||
|
||||
typedef struct AnimPatData32b {
|
||||
s16 layerNum;
|
||||
s16 centerX;
|
||||
s16 centerY;
|
||||
s16 sizeX;
|
||||
s16 sizeY;
|
||||
u32 layer;
|
||||
} AnimPatData32b;
|
||||
|
||||
typedef struct AnimBmpData32b {
|
||||
u8 pixSize;
|
||||
u8 dataFmt;
|
||||
s16 palNum;
|
||||
s16 sizeX;
|
||||
s16 sizeY;
|
||||
u32 dataSize;
|
||||
u32 palData;
|
||||
u32 data;
|
||||
} AnimBmpData32b;
|
||||
|
||||
typedef struct HsfCluster32b {
|
||||
u32 name[2];
|
||||
u32 targetName;
|
||||
|
|
@ -236,10 +272,10 @@ void byteswap_s32(s32 *src);
|
|||
void byteswap_hsfvec3f(HsfVector3f *src);
|
||||
void byteswap_hsfvec2f(HsfVector2f *src);
|
||||
|
||||
void byteswap_animdata(void *src, AnimData* dest);
|
||||
void byteswap_animbankdata(void *src, AnimBankData *dest);
|
||||
void byteswap_animpatdata(void *src, AnimPatData *dest);
|
||||
void byteswap_animbmpdata(void *src, AnimBmpData *dest);
|
||||
void byteswap_animdata(void *src, AnimData *dest);
|
||||
void byteswap_animbankdata(AnimBankData32b *src, AnimBankData *dest);
|
||||
void byteswap_animpatdata(AnimPatData32b *src, AnimPatData *dest);
|
||||
void byteswap_animbmpdata(AnimBmpData32b *src, AnimBmpData *dest);
|
||||
void byteswap_animframedata(AnimFrameData *src);
|
||||
void byteswap_animlayerdata(AnimLayerData *src);
|
||||
|
||||
|
|
|
|||
|
|
@ -566,6 +566,8 @@ void ObjectSetup(void)
|
|||
s16 sprite;
|
||||
AnimData *sprite_data;
|
||||
s16 i;
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF);
|
||||
Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF);
|
||||
Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP);
|
||||
|
|
@ -577,6 +579,7 @@ void ObjectSetup(void)
|
|||
Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP);
|
||||
Hu3DModelCameraInfoSet(model, 1);
|
||||
Hu3DModelLightInfoSet(model, 1);
|
||||
#endif
|
||||
#if VERSION_NTSC
|
||||
bootGrpId = HuSprGrpCreate(4);
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -77,10 +77,10 @@ static void __DEMOInitMem()
|
|||
void *arenaHi = OSGetArenaHi();
|
||||
unsigned long fbSize = ((u16)(rmode->fbWidth + 15) & 0xFFF0) * rmode->xfbHeight * 2;
|
||||
|
||||
DemoFrameBuffer1 = (void *)(((u32)arenaLo + 0x1F) & 0xFFFFFFE0);
|
||||
DemoFrameBuffer2 = (void *)(((u32)DemoFrameBuffer1 + fbSize + 0x1F) & 0xFFFFFFE0);
|
||||
DemoFrameBuffer1 = (void *)(((uintptr_t)arenaLo + 0x1F) & ~0x1F);
|
||||
DemoFrameBuffer2 = (void *)(((uintptr_t)DemoFrameBuffer1 + fbSize + 0x1F) & ~0x1F);
|
||||
DemoCurrentBuffer = DemoFrameBuffer2;
|
||||
arenaLo = (void *)(((u32)DemoFrameBuffer2 + fbSize + 0x1F) & 0xFFFFFFE0);
|
||||
arenaLo = (void *)(((uintptr_t)DemoFrameBuffer2 + fbSize + 0x1F) & ~0x1F);
|
||||
OSSetArenaLo(arenaLo);
|
||||
if (((OSGetConsoleType() + 0xF0000000) == 4U) && ((OSGetPhysicalMemSize() + 0xFFC00000) != 0U)
|
||||
&& (OSGetConsoleSimulatedMemSize() < 0x01800000U)) {
|
||||
|
|
@ -91,9 +91,9 @@ static void __DEMOInitMem()
|
|||
arenaHi = OSGetArenaHi();
|
||||
arenaLo = OSInitAlloc(arenaLo, arenaHi, 1);
|
||||
OSSetArenaLo(arenaLo);
|
||||
arenaLo = (void *)(((u32)arenaLo + 0x1F) & 0xFFFFFFE0);
|
||||
arenaHi = (void *)((u32)arenaHi & 0xFFFFFFE0);
|
||||
OSSetCurrentHeap(OSCreateHeap((void *)(((u32)arenaLo)), arenaHi));
|
||||
arenaLo = (void *)(((uintptr_t)arenaLo + 0x1F) & ~0x1F);
|
||||
arenaHi = (void *)((uintptr_t)arenaHi & ~0x1F);
|
||||
OSSetCurrentHeap(OSCreateHeap((void *)(((uintptr_t)arenaLo)), arenaHi));
|
||||
OSSetArenaLo((arenaLo = arenaHi));
|
||||
}
|
||||
|
||||
|
|
@ -210,13 +210,13 @@ static void LoadMemInfo()
|
|||
arenaHi = OSGetArenaHi();
|
||||
arenaLo = OSInitAlloc(arenaLo, arenaHi, 1);
|
||||
OSSetArenaLo(arenaLo);
|
||||
arenaLo = (void *)(((u32)arenaLo + 0x1F) & 0xFFFFFFE0);
|
||||
arenaHi = (void *)((u32)arenaHi & 0xFFFFFFE0);
|
||||
arenaLo = (void *)(((uintptr_t)arenaLo + 0x1F) & ~0x1F);
|
||||
arenaHi = (void *)((uintptr_t)arenaHi & ~0x1F);
|
||||
OSSetCurrentHeap(OSCreateHeap((void *)(((u32)arenaLo)), arenaHi));
|
||||
OSSetArenaLo((arenaLo = arenaHi));
|
||||
return;
|
||||
}
|
||||
memEntry = (void *)((u32)buf + 0x1F & 0xFFFFFFE0);
|
||||
memEntry = (void *)((uintptr_t)buf + 0x1F & ~0x1F);
|
||||
arenaHiOld = OSGetArenaHi();
|
||||
simMemEnd = OSPhysicalToCached(OSGetConsoleSimulatedMemSize());
|
||||
OSSetArenaHi(OSPhysicalToCached(OSGetPhysicalMemSize()));
|
||||
|
|
@ -224,8 +224,8 @@ static void LoadMemInfo()
|
|||
arenaHi = OSGetArenaHi();
|
||||
arenaLo = OSInitAlloc(arenaLo, arenaHi, 1);
|
||||
OSSetArenaLo(arenaLo);
|
||||
arenaLo = (void *)(((u32)arenaLo + 0x1F) & 0xFFFFFFE0);
|
||||
arenaHi = (void *)((u32)arenaHi & 0xFFFFFFE0);
|
||||
arenaLo = (void *)(((uintptr_t)arenaLo + 0x1F) & ~0x1F);
|
||||
arenaHi = (void *)((uintptr_t)arenaHi & ~0x1F);
|
||||
OSSetCurrentHeap(OSCreateHeap((void *)(arenaLo), arenaHi));
|
||||
OSSetArenaLo((arenaLo = arenaHi));
|
||||
OSAllocFixed(&arenaHiOld, &simMemEnd);
|
||||
|
|
@ -234,7 +234,7 @@ static void LoadMemInfo()
|
|||
while (length) {
|
||||
OSReport("loop\n");
|
||||
transferLength = (length < 0x20) ? length : 0x20;
|
||||
if (DVDReadPrio(&fileInfo, memEntry, (transferLength + 0x1F) & 0xFFFFFFE0, offset, 2) < 0) {
|
||||
if (DVDReadPrio(&fileInfo, memEntry, (transferLength + 0x1F) & ~0x1F, offset, 2) < 0) {
|
||||
OSPanic(__FILE__, 0x49F, "An error occurred when issuing read to /meminfo.bin\n");
|
||||
}
|
||||
indexMax = (transferLength / 8);
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ void *OSAllocFromHeap(int heap, unsigned long size)
|
|||
|
||||
hd = &HeapArray[heap];
|
||||
size += 0x20;
|
||||
size = (size + 0x1F) & 0xFFFFFFE0;
|
||||
size = (size + 0x1F) & ~0x1F;
|
||||
|
||||
for (cell = hd->free; cell != NULL; cell = cell->next) {
|
||||
if ((signed)size <= (signed)cell->size) {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ void HuMemInitAll(void)
|
|||
void *ptr;
|
||||
u32 free_size;
|
||||
for(i=0; i<4; i++) {
|
||||
#ifdef TARGET_PC
|
||||
HeapSizeTbl[i] *= 2;
|
||||
#endif
|
||||
ptr = OSAlloc(HeapSizeTbl[i]);
|
||||
if(ptr == NULL) {
|
||||
OSReport("HuMem> Failed OSAlloc Size:%d\n", HeapSizeTbl[i]);
|
||||
|
|
@ -55,7 +58,7 @@ void *HuMemDirectMalloc(HeapID heap, s32 size)
|
|||
mflr retaddr
|
||||
}
|
||||
#endif
|
||||
size = (size+31) & 0xFFFFFFE0;
|
||||
size = (size + 31) & ~0x1F;
|
||||
return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr);
|
||||
}
|
||||
|
||||
|
|
@ -69,7 +72,7 @@ void *HuMemDirectMallocNum(HeapID heap, s32 size, uintptr_t num)
|
|||
mflr retaddr
|
||||
}
|
||||
#endif
|
||||
size = (size+31) & 0xFFFFFFE0;
|
||||
size = (size + 31) & ~0x1F;
|
||||
return HuMemMemoryAllocNum(HeapTbl[heap], size, num, retaddr);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,18 @@
|
|||
#include "game/memory.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
|
||||
#if INTPTR_MAX == INT32_MAX
|
||||
#define MEM_ALLOC_SIZE(size) (((size) + 63) & ~0x1F)
|
||||
#define DATA_GET_BLOCK(ptr) ((struct memory_block *)(((char *)(ptr)) - 32))
|
||||
#define BLOCK_GET_DATA(block) (((char *)(block)) + 32)
|
||||
|
||||
#define MEM_ALLOC_SIZE(size) (((size) + 63) & 0xFFFFFFE0)
|
||||
#define BLOCK_ALIGNMENT 32u
|
||||
#else
|
||||
#define MEM_ALLOC_SIZE(size) (((size - 1) / 32 + 1) * 32 + 64)
|
||||
#define DATA_GET_BLOCK(ptr) ((struct memory_block *)(((char *)(ptr)) - 64))
|
||||
#define BLOCK_GET_DATA(block) (((char *)(block)) + 64)
|
||||
#define BLOCK_ALIGNMENT 64u
|
||||
#endif
|
||||
|
||||
struct memory_block {
|
||||
s32 size;
|
||||
|
|
@ -47,9 +55,9 @@ static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, uintptr_t num, uintptr_
|
|||
struct memory_block *block = heap_ptr;
|
||||
do {
|
||||
if (!block->flag && block->size >= alloc_size) {
|
||||
if (block->size - alloc_size > 32u) {
|
||||
if (block->size - alloc_size > BLOCK_ALIGNMENT) {
|
||||
#ifdef TARGET_PC
|
||||
struct memory_block *new_block = (struct memory_block *)(((char *)block) + alloc_size);
|
||||
struct memory_block *new_block = (struct memory_block *)((char *)block + alloc_size);
|
||||
#else
|
||||
struct memory_block *new_block = (struct memory_block *)(((u32)block) + alloc_size);
|
||||
#endif
|
||||
|
|
@ -202,7 +210,7 @@ s32 HuMemMemorySizeGet(void *ptr)
|
|||
}
|
||||
block = DATA_GET_BLOCK(ptr);
|
||||
if (block->flag == 1 && block->magic == 165) {
|
||||
return block->size - 32;
|
||||
return block->size - BLOCK_ALIGNMENT;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,9 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz
|
|||
if (stack_size == 0) {
|
||||
stack_size = 2048;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
stack_size *= 2;
|
||||
#endif
|
||||
alloc_size = HuMemMemoryAllocSizeGet(sizeof(Process)) + HuMemMemoryAllocSizeGet(stack_size) + HuMemMemoryAllocSizeGet(extra_size);
|
||||
if (!(heap = HuMemDirectMalloc(HEAP_SYSTEM, alloc_size))) {
|
||||
OSReport("process> malloc error size %d\n", alloc_size);
|
||||
|
|
|
|||
|
|
@ -215,11 +215,6 @@ AnimData *HuSprAnimRead(void *data)
|
|||
AnimBmpData *bmp;
|
||||
AnimBankData *bank;
|
||||
AnimPatData *pat;
|
||||
#ifdef TARGET_PC
|
||||
AnimBmpData *bmp2;
|
||||
AnimBankData *bank2;
|
||||
AnimPatData *pat2;
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_PC
|
||||
AnimData *anim = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimData), MEMORY_DEFAULT_NUM);
|
||||
|
|
@ -231,25 +226,28 @@ AnimData *HuSprAnimRead(void *data)
|
|||
anim->useNum++;
|
||||
return anim;
|
||||
}
|
||||
bank = (AnimBankData *)((uintptr_t)anim->bank+(uintptr_t)data);
|
||||
bank = (void *)((uintptr_t)anim->bank+(uintptr_t)data);
|
||||
#ifdef TARGET_PC
|
||||
bank2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimBankData), MEMORY_DEFAULT_NUM);
|
||||
byteswap_animbankdata(bank, bank2);
|
||||
bank = bank2;
|
||||
bank = HuMemDirectMallocNum(HEAP_DATA, anim->bankNum * sizeof(AnimBankData), MEMORY_DEFAULT_NUM);
|
||||
for(i=0; i<anim->bankNum; i++) {
|
||||
byteswap_animbankdata(&((AnimBankData32b*)((uintptr_t)anim->bank+(uintptr_t)data))[i], &bank[i]);
|
||||
}
|
||||
#endif
|
||||
anim->bank = bank;
|
||||
pat = (AnimPatData *)((uintptr_t)anim->pat+(uintptr_t)data);
|
||||
pat = (void *)((uintptr_t)anim->pat+(uintptr_t)data);
|
||||
#ifdef TARGET_PC
|
||||
pat2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimPatData), MEMORY_DEFAULT_NUM);
|
||||
byteswap_animpatdata(pat, pat2);
|
||||
pat = pat2;
|
||||
pat = HuMemDirectMallocNum(HEAP_DATA, anim->patNum * sizeof(AnimPatData), MEMORY_DEFAULT_NUM);
|
||||
for(i=0; i<anim->patNum; i++) {
|
||||
byteswap_animpatdata(&((AnimPatData32b*)((uintptr_t)anim->pat+(uintptr_t)data))[i], &pat[i]);
|
||||
}
|
||||
#endif
|
||||
anim->pat = pat;
|
||||
bmp = (AnimBmpData *)((uintptr_t)anim->bmp+(uintptr_t)data);
|
||||
bmp = (void *)((uintptr_t)anim->bmp+(uintptr_t)data);
|
||||
#ifdef TARGET_PC
|
||||
bmp2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimBmpData), MEMORY_DEFAULT_NUM);
|
||||
byteswap_animbmpdata(bmp, bmp2);
|
||||
bmp = bmp2;
|
||||
bmp = HuMemDirectMallocNum(HEAP_DATA, anim->bmpNum * sizeof(AnimBmpData), MEMORY_DEFAULT_NUM);
|
||||
for(i=0; i<anim->bmpNum; i++) {
|
||||
byteswap_animbmpdata(&((AnimBmpData32b*)((uintptr_t)anim->bmp+(uintptr_t)data))[i], &bmp[i]);
|
||||
}
|
||||
#endif
|
||||
anim->bmp = bmp;
|
||||
for(i=0; i<anim->bankNum; i++, bank++) {
|
||||
|
|
|
|||
|
|
@ -8,43 +8,6 @@
|
|||
|
||||
extern "C" {
|
||||
#include "port/byteswap.h"
|
||||
|
||||
typedef struct AnimData32b {
|
||||
s16 bankNum;
|
||||
s16 patNum;
|
||||
s16 bmpNum;
|
||||
s16 useNum;
|
||||
|
||||
u32 bank;
|
||||
u32 pat;
|
||||
u32 bmp;
|
||||
} AnimData32b;
|
||||
|
||||
typedef struct AnimBankData32b {
|
||||
s16 timeNum;
|
||||
s16 unk;
|
||||
u32 frame;
|
||||
} AnimBankData32b;
|
||||
|
||||
typedef struct AnimPatData32b {
|
||||
s16 layerNum;
|
||||
s16 centerX;
|
||||
s16 centerY;
|
||||
s16 sizeX;
|
||||
s16 sizeY;
|
||||
u32 layer;
|
||||
} AnimPatData32b;
|
||||
|
||||
typedef struct AnimBmpData32b {
|
||||
u8 pixSize;
|
||||
u8 dataFmt;
|
||||
s16 palNum;
|
||||
s16 sizeX;
|
||||
s16 sizeY;
|
||||
u32 dataSize;
|
||||
u32 palData;
|
||||
u32 data;
|
||||
} AnimBmpData32b;
|
||||
}
|
||||
|
||||
template <typename T> [[nodiscard]] constexpr T bswap16(T val) noexcept
|
||||
|
|
@ -796,24 +759,21 @@ void byteswap_animdata(void *src, AnimData *dest)
|
|||
sVisitedPtrs.clear();
|
||||
}
|
||||
|
||||
void byteswap_animbankdata(void *src, AnimBankData *dest)
|
||||
void byteswap_animbankdata(AnimBankData32b *src, AnimBankData *dest)
|
||||
{
|
||||
auto *bank = reinterpret_cast<AnimBankData32b *>(src);
|
||||
bswap(*bank, *bank, *dest);
|
||||
bswap(*src, *src, *dest);
|
||||
sVisitedPtrs.clear();
|
||||
}
|
||||
|
||||
void byteswap_animpatdata(void *src, AnimPatData *dest)
|
||||
void byteswap_animpatdata(AnimPatData32b *src, AnimPatData *dest)
|
||||
{
|
||||
auto *pat = reinterpret_cast<AnimPatData32b *>(src);
|
||||
bswap(*pat, *pat, *dest);
|
||||
bswap(*src, *src, *dest);
|
||||
sVisitedPtrs.clear();
|
||||
}
|
||||
|
||||
void byteswap_animbmpdata(void *src, AnimBmpData *dest)
|
||||
void byteswap_animbmpdata(AnimBmpData32b *src, AnimBmpData *dest)
|
||||
{
|
||||
auto *bmp = reinterpret_cast<AnimBmpData32b *>(src);
|
||||
bswap(*bmp, *bmp, *dest);
|
||||
bswap(*src, *src, *dest);
|
||||
sVisitedPtrs.clear();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue