summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'src/code')
-rw-r--r--src/code/__osMalloc.c195
-rw-r--r--src/code/code_8007BF90.c71
-rw-r--r--src/code/code_800A9F30.c14
-rw-r--r--src/code/fault.c208
-rw-r--r--src/code/fault_drawer.c111
-rw-r--r--src/code/gfxprint.c258
-rw-r--r--src/code/padmgr.c82
-rw-r--r--src/code/z_actor.c32
-rw-r--r--src/code/z_camera.c79
-rw-r--r--src/code/z_cheap_proc.c30
10 files changed, 539 insertions, 541 deletions
diff --git a/src/code/__osMalloc.c b/src/code/__osMalloc.c
index 0d8fec179..34d602f0a 100644
--- a/src/code/__osMalloc.c
+++ b/src/code/__osMalloc.c
@@ -228,8 +228,6 @@ void __osMalloc_FreeBlockTest(Arena *arena, ArenaNode *node)
}
}
-//single instruction not matching, stack problem
-#ifdef NON_MATCHING
void* __osMalloc_NoLockDebug(Arena *arena, u32 size, const char *file, s32 line)
{
ArenaNode *iter;
@@ -237,19 +235,19 @@ void* __osMalloc_NoLockDebug(Arena *arena, u32 size, const char *file, s32 line)
ArenaNode *newNode;
void *ret;
ArenaNode *next;
- u32 pad;
ret = NULL;
iter = arena->head;
size = ALIGN16(size);
+ blockSize = ALIGN16(size) + sizeof(ArenaNode);
+
while (iter)
{
if (iter->isFree && iter->size >= size)
{
- if ((arena->flag & CHECK_FREE_BLOCK) != 0)
+ if (arena->flag & CHECK_FREE_BLOCK)
__osMalloc_FreeBlockTest(arena, iter);
- blockSize = ALIGN16(size) + sizeof(ArenaNode);
if (blockSize < iter->size)
{
newNode = (ArenaNode *)((u32)iter + blockSize);
@@ -269,7 +267,7 @@ void* __osMalloc_NoLockDebug(Arena *arena, u32 size, const char *file, s32 line)
iter->isFree = false;
ArenaImpl_SetDebugInfo(iter, file, line, arena);
ret = (void *)((u32)iter + sizeof(ArenaNode));
- if ((arena->flag & FILL_ALLOCBLOCK) != 0)
+ if (arena->flag & FILL_ALLOCBLOCK)
func_80106860(ret, BLOCK_ALLOC_MAGIC, size);
break;
@@ -280,9 +278,6 @@ void* __osMalloc_NoLockDebug(Arena *arena, u32 size, const char *file, s32 line)
return ret;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osMalloc_NoLockDebug.s")
-#endif
void* __osMallocDebug(Arena* arena, u32 size, const char* file, s32 line)
{
@@ -293,13 +288,11 @@ void* __osMallocDebug(Arena* arena, u32 size, const char* file, s32 line)
return ret;
}
-//stack + missing a move
-#ifdef NON_MATCHING
void* __osMallocRDebug(Arena *arena, u32 size, const char *file, s32 line)
{
ArenaNode *iter;
- u32 blockSize;
ArenaNode *newNode;
+ u32 blockSize;
ArenaNode *next;
void *ret;
@@ -311,7 +304,7 @@ void* __osMallocRDebug(Arena *arena, u32 size, const char *file, s32 line)
{
if (iter->isFree && iter->size >= size)
{
- if ((arena->flag & CHECK_FREE_BLOCK) != 0)
+ if (arena->flag & CHECK_FREE_BLOCK)
__osMalloc_FreeBlockTest(arena, iter);
blockSize = ALIGN16(size) + sizeof(ArenaNode);
@@ -328,12 +321,14 @@ void* __osMallocRDebug(Arena *arena, u32 size, const char *file, s32 line)
next = ArenaImpl_GetNextBlock(newNode);
if (next)
next->prev = newNode;
+
+ iter = newNode;
}
iter->isFree = false;
ArenaImpl_SetDebugInfo(iter, file, line, arena);
ret = (void *)((u32)iter + sizeof(ArenaNode));
- if ((arena->flag & FILL_ALLOCBLOCK) != 0)
+ if (arena->flag & FILL_ALLOCBLOCK)
func_80106860(ret, BLOCK_ALLOC_MAGIC, size);
break;
@@ -345,13 +340,7 @@ void* __osMallocRDebug(Arena *arena, u32 size, const char *file, s32 line)
ArenaImpl_Unlock(arena);
return ret;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osMallocRDebug.s")
-#endif
-
-//same diff as __osMalloc_NoLockDebug
-#ifdef NON_MATCHING
void* __osMalloc_NoLock(Arena *arena, u32 size)
{
ArenaNode *iter;
@@ -359,19 +348,20 @@ void* __osMalloc_NoLock(Arena *arena, u32 size)
ArenaNode *newNode;
void *ret;
ArenaNode *next;
- u32 pad;
ret = NULL;
iter = arena->head;
size = ALIGN16(size);
+ blockSize = ALIGN16(size) + sizeof(ArenaNode);
+
while (iter)
{
+
if (iter->isFree && iter->size >= size)
{
- if ((arena->flag & CHECK_FREE_BLOCK) != 0)
+ if (arena->flag & CHECK_FREE_BLOCK)
__osMalloc_FreeBlockTest(arena, iter);
- blockSize = ALIGN16(size) + sizeof(ArenaNode);
if (blockSize < iter->size)
{
newNode = (ArenaNode *)((u32)iter + blockSize);
@@ -391,7 +381,7 @@ void* __osMalloc_NoLock(Arena *arena, u32 size)
iter->isFree = false;
ArenaImpl_SetDebugInfo(iter, NULL, 0, arena);
ret = (void *)((u32)iter + sizeof(ArenaNode));
- if ((arena->flag & FILL_ALLOCBLOCK) != 0)
+ if (arena->flag & FILL_ALLOCBLOCK)
func_80106860(ret, BLOCK_ALLOC_MAGIC, size);
break;
@@ -402,9 +392,6 @@ void* __osMalloc_NoLock(Arena *arena, u32 size)
return ret;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osMalloc_NoLock.s")
-#endif
void* __osMalloc(Arena* arena, u32 size)
{
@@ -415,13 +402,11 @@ void* __osMalloc(Arena* arena, u32 size)
return ret;
}
-//same diff as __osMallocRDebug
-#ifdef NON_MATCHING
void* __osMallocR(Arena *arena, u32 size)
{
ArenaNode *iter;
- u32 blockSize;
ArenaNode *newNode;
+ u32 blockSize;
ArenaNode *next;
void *ret;
@@ -433,7 +418,7 @@ void* __osMallocR(Arena *arena, u32 size)
{
if (iter->isFree && iter->size >= size)
{
- if ((arena->flag & CHECK_FREE_BLOCK) != 0)
+ if (arena->flag & CHECK_FREE_BLOCK)
__osMalloc_FreeBlockTest(arena, iter);
blockSize = ALIGN16(size) + sizeof(ArenaNode);
@@ -450,12 +435,14 @@ void* __osMallocR(Arena *arena, u32 size)
next = ArenaImpl_GetNextBlock(newNode);
if (next)
next->prev = newNode;
+
+ iter = newNode;
}
iter->isFree = false;
ArenaImpl_SetDebugInfo(iter, NULL, 0, arena);
ret = (void *)((u32)iter + sizeof(ArenaNode));
- if ((arena->flag & FILL_ALLOCBLOCK) != 0)
+ if (arena->flag & FILL_ALLOCBLOCK)
func_80106860(ret, BLOCK_ALLOC_MAGIC, size);
break;
@@ -467,13 +454,7 @@ void* __osMallocR(Arena *arena, u32 size)
ArenaImpl_Unlock(arena);
return ret;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osMallocR.s")
-#endif
-
-//small reordering
-#ifdef NON_MATCHING
void __osFree_NoLock(Arena* arena, void* ptr)
{
ArenaNode* node;
@@ -486,12 +467,12 @@ void __osFree_NoLock(Arena* arena, void* ptr)
node = (ArenaNode*)((u32)ptr - sizeof(ArenaNode));
if (node == NULL || node->magic != NODE_MAGIC)
{
- osSyncPrintf(VT_COL(RED, WHITE) "__osFree:不正解放(%08x)\n" VT_RST, arena); //__osFree: Unauthorized release (%08x)
+ osSyncPrintf(VT_COL(RED, WHITE) "__osFree:不正解放(%08x)\n" VT_RST, ptr); //__osFree: Unauthorized release (%08x)
return;
}
if (node->isFree)
{
- osSyncPrintf(VT_COL(RED, WHITE) "__osFree:二重解放(%08x)\n" VT_RST, arena); //__osFree: Double release (%08x)
+ osSyncPrintf(VT_COL(RED, WHITE) "__osFree:二重解放(%08x)\n" VT_RST, ptr); //__osFree: Double release (%08x)
return;
}
if (arena != node->arena && arena != NULL)
@@ -505,12 +486,12 @@ void __osFree_NoLock(Arena* arena, void* ptr)
prev = ArenaImpl_GetPrevBlock(node);
node->isFree = true;
ArenaImpl_SetDebugInfo(node, NULL, 0, arena);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
{
func_80106860((u32)node + sizeof(ArenaNode), BLOCK_FREE_MAGIC, node->size);
}
- newNext = node->next;
+ newNext = next;
if ((u32)next == (u32)node + sizeof(ArenaNode) + node->size && next->isFree)
{
newNext = ArenaImpl_GetNextBlock(next);
@@ -518,26 +499,23 @@ void __osFree_NoLock(Arena* arena, void* ptr)
newNext->prev = node;
node->size += next->size + sizeof(ArenaNode);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
func_80106860(next, BLOCK_FREE_MAGIC, sizeof(ArenaNode));
node->next = newNext;
+ next = newNext;
}
+
if (prev && prev->isFree && (u32)node == (u32)prev + sizeof(ArenaNode) + prev->size)
{
- if (newNext)
- newNext->prev = prev;
- prev->next = newNext;
+ if (next)
+ next->prev = prev;
+ prev->next = next;
prev->size += node->size + sizeof(ArenaNode);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
func_80106860(node, BLOCK_FREE_MAGIC, sizeof(ArenaNode));
}
-
}
-
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osFree_NoLock.s")
-#endif
void __osFree(Arena* arena, void* ptr)
{
@@ -546,8 +524,6 @@ void __osFree(Arena* arena, void* ptr)
ArenaImpl_Unlock(arena);
}
-//small reordering
-#ifdef NON_MATCHING
void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line)
{
ArenaNode* node;
@@ -560,12 +536,12 @@ void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line)
node = (ArenaNode*)((u32)ptr - sizeof(ArenaNode));
if (node == NULL || node->magic != NODE_MAGIC)
{
- osSyncPrintf(VT_COL(RED, WHITE) "__osFree:不正解放(%08x) [%s:%d ]\n" VT_RST, arena, file, line); //__osFree: Unauthorized release (%08x)
+ osSyncPrintf(VT_COL(RED, WHITE) "__osFree:不正解放(%08x) [%s:%d ]\n" VT_RST, ptr, file, line); //__osFree: Unauthorized release (%08x)
return;
}
if (node->isFree)
{
- osSyncPrintf(VT_COL(RED, WHITE) "__osFree:二重解放(%08x)\n" VT_RST, arena); //__osFree: Double release (%08x)
+ osSyncPrintf(VT_COL(RED, WHITE) "__osFree:二重解放(%08x) [%s:%d ]\n" VT_RST, ptr, file, line); //__osFree: Double release (%08x)
return;
}
if (arena != node->arena && arena != NULL)
@@ -579,7 +555,7 @@ void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line)
prev = ArenaImpl_GetPrevBlock(node);
node->isFree = true;
ArenaImpl_SetDebugInfo(node, file, line, arena);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
{
func_80106860((u32)node + sizeof(ArenaNode), BLOCK_FREE_MAGIC, node->size);
}
@@ -592,26 +568,23 @@ void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line)
newNext->prev = node;
node->size += next->size + sizeof(ArenaNode);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
func_80106860(next, BLOCK_FREE_MAGIC, sizeof(ArenaNode));
node->next = newNext;
+ next = newNext;
}
+
if (prev && prev->isFree && (u32)node == (u32)prev + sizeof(ArenaNode) + prev->size)
{
- if (newNext)
- newNext->prev = prev;
- prev->next = newNext;
+ if (next)
+ next->prev = prev;
+ prev->next = next;
prev->size += node->size + sizeof(ArenaNode);
- if ((arena->flag & FILL_FREEBLOCK) != 0)
+ if (arena->flag & FILL_FREEBLOCK)
func_80106860(node, BLOCK_FREE_MAGIC, sizeof(ArenaNode));
}
-
}
-
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osFree_NoLockDebug.s")
-#endif
void __osFreeDebug(Arena* arena, void* ptr, const char* file, s32 line)
{
@@ -620,33 +593,27 @@ void __osFreeDebug(Arena* arena, void* ptr, const char* file, s32 line)
ArenaImpl_Unlock(arena);
}
-//small reordering, stack usage
-#ifdef NON_MATCHING
void* __osRealloc(Arena* arena, void* ptr, u32 newSize)
{
+ void* newAlloc;
ArenaNode* node;
ArenaNode* next;
- u32 sizeDiff;
- ArenaNode* overNext;
ArenaNode* newNext;
- void* newAlloc;
- //-----------
- ArenaNode* next2;
- ArenaNode unk;
+ ArenaNode* overNext;
ArenaNode* newNext2;
+ ArenaNode* next2;
+ u32 sizeDiff;
ArenaNode* overNext2;
- //----------
- u32 newSize2;
- ArenaNode* newNext3;
- ArenaNode* overNext3;
-
+ ArenaNode localCopy;
+ u32 blockSize;
+ s32 pad;
newSize = ALIGN16(newSize);
osSyncPrintf("__osRealloc(%08x, %d)\n", ptr, newSize);
ArenaImpl_Lock(arena);
if (!ptr)
{
- ptr = __osMalloc(arena, newSize);
+ ptr = __osMalloc_NoLock(arena, newSize);
}
else if (!newSize)
{
@@ -694,13 +661,14 @@ void* __osRealloc(Arena* arena, void* ptr, u32 newSize)
else if (newSize < node->size)
{
next2 = ArenaImpl_GetNextBlock(node);
- if (next && next->isFree)
+ if (next2 && next2->isFree)
{
+ blockSize = ALIGN16(newSize) + sizeof(ArenaNode);
//Increased free block behind current memory block
osSyncPrintf("現メモリブロックの後ろのフリーブロックを大きくしました\n");
- unk = *next2;
- newNext2 = (u32)node + ALIGN16(newSize) + sizeof(ArenaNode);
- *newNext2 = unk;
+ newNext2 = (ArenaNode*)((u32)node + blockSize);
+ localCopy = *next2;
+ *newNext2 = localCopy;
newNext2->size += node->size - newSize;
node->next = newNext2;
node->size = newSize;
@@ -710,20 +678,20 @@ void* __osRealloc(Arena* arena, void* ptr, u32 newSize)
}
else if (newSize + sizeof(ArenaNode) < node->size)
{
+ blockSize = ALIGN16(newSize) + sizeof(ArenaNode);
//Generated because there is no free block after the current memory block
osSyncPrintf("現メモリブロックの後ろにフリーブロックがないので生成します\n");
- newSize2 = ALIGN16(newSize) + sizeof(ArenaNode);
- newNext3 = (ArenaNode*)((u32)node + newSize2);
- newNext3->next = ArenaImpl_GetNextBlock(node);
- newNext3->prev = node;
- newNext3->size = node->size - newSize2;
- newNext3->isFree = true;
- newNext3->magic = NODE_MAGIC;
- node->next = newNext3;
+ newNext2 = (ArenaNode*)((u32)node + blockSize);
+ newNext2->next = ArenaImpl_GetNextBlock(node);
+ newNext2->prev = node;
+ newNext2->size = node->size - blockSize;
+ newNext2->isFree = true;
+ newNext2->magic = NODE_MAGIC;
+ node->next = newNext2;
node->size = newSize;
- overNext3 = ArenaImpl_GetNextBlock(newNext3);
- if (overNext3)
- overNext3->prev = newNext3;
+ overNext2 = ArenaImpl_GetNextBlock(newNext2);
+ if (overNext2)
+ overNext2->prev = newNext2;
}
else
{
@@ -732,14 +700,11 @@ void* __osRealloc(Arena* arena, void* ptr, u32 newSize)
ptr = NULL;
}
}
-
}
+
ArenaImpl_Unlock(arena);
return ptr;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osRealloc.s")
-#endif
void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, s32 line)
{
@@ -757,7 +722,7 @@ void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAll
*outAlloc = 0;
iter = arena->head;
- while(iter)
+ while (iter)
{
if (iter->isFree)
{
@@ -774,8 +739,6 @@ void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAll
ArenaImpl_Unlock(arena);
}
-//small reordering at the end
-#ifdef NON_MATCHING
void __osDisplayArena(Arena* arena)
{
u32 freeSize;
@@ -803,7 +766,7 @@ void __osDisplayArena(Arena* arena)
osSyncPrintf("メモリブロック範囲 status サイズ [時刻 s ms us ns: TID:src:行]\n");
iter = arena->head;
- while(iter)
+ while (iter)
{
if (iter && iter->magic == NODE_MAGIC)
{
@@ -828,14 +791,14 @@ void __osDisplayArena(Arena* arena)
{
allocatedSize += iter->size;
}
-
- iter = next;
}
else
{
osSyncPrintf("%08x Block Invalid\n", iter);
- iter = NULL;
+ next = NULL;
}
+
+ iter = next;
}
osSyncPrintf("確保ブロックサイズの合計 0x%08x バイト\n", allocatedSize); //Total reserved node size 0x%08x bytes
@@ -844,12 +807,7 @@ void __osDisplayArena(Arena* arena)
ArenaImpl_Unlock(arena);
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/__osDisplayArena.s")
-#endif
-//small reordering
-#ifdef NON_MATCHING
void ArenaImpl_FaultClient(Arena* arena)
{
u32 freeSize;
@@ -872,7 +830,7 @@ void ArenaImpl_FaultClient(Arena* arena)
FaultDrawer_Printf("Memory Block Region status size\n");
iter = arena->head;
- while(iter)
+ while (iter)
{
if (iter && iter->magic == NODE_MAGIC)
{
@@ -894,15 +852,15 @@ void ArenaImpl_FaultClient(Arena* arena)
{
allocatedSize += iter->size;
}
-
- iter = next;
}
else
{
FaultDrawer_SetFontColor(0xF801);
FaultDrawer_Printf("%08x Block Invalid\n", iter);
- iter = NULL;
+ next = NULL;
}
+
+ iter = next;
}
FaultDrawer_SetFontColor(0x7F1);
@@ -910,9 +868,6 @@ void ArenaImpl_FaultClient(Arena* arena)
FaultDrawer_Printf("Total Free Block Size %08x\n", freeSize);
FaultDrawer_Printf("Largest Free Block Size %08x\n", maxFree);
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/__osMalloc/ArenaImpl_FaultClient.s")
-#endif
u32 __osCheckArena(Arena* arena)
{
@@ -924,7 +879,7 @@ u32 __osCheckArena(Arena* arena)
//Checking the contents of the arena. . . (%08x)
osSyncPrintf("アリーナの内容をチェックしています... (%08x)\n", arena);
iter = arena->head;
- while(iter)
+ while (iter)
{
if (iter && iter->magic == NODE_MAGIC)
{
diff --git a/src/code/code_8007BF90.c b/src/code/code_8007BF90.c
index 8c5347971..a7e1cca5b 100644
--- a/src/code/code_8007BF90.c
+++ b/src/code/code_8007BF90.c
@@ -1,7 +1,7 @@
#include <ultra64.h>
#include <global.h>
-void func_8007C1AC(Vec3f* dest, struct_80045714* arg1);
+Vec3f* func_8007C1AC(Vec3f* dest, struct_80045714* arg1);
f32 func_8007BF90(Vec3f* a, Vec3f* b)
{
@@ -33,49 +33,48 @@ f32 func_8007C058(f32 arg0, f32 arg1)
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8007BF90/func_8007C0A8.s")
-#ifdef NON_MATCHING
-void func_8007C0F8(Vec3f* dest, Vec3f* a, Vec3f* b)
+Vec3f* func_8007C0F8(Vec3f* dest, Vec3f* a, Vec3f* b)
{
- f32 fVar1;
- Vec3f v;
+ Vec3f v1;
+ Vec3f v2;
+ f32 temp;
+
+ v1.x = b->x - a->x;
+ v1.y = b->y - a->y;
+ v1.z = b->z - a->z;
+
+ temp = func_8007C058(sqrtf(SQ(v1.x) + SQ(v1.y) + SQ(v1.z)), 0.01f);
- v.x = b->x - a->x;
- v.y = b->y - a->y;
- v.z = b->z - a->z;
+ v2.x = v1.x / temp;
+ v2.y = v1.y / temp;
+ v2.z = v1.z / temp;
- fVar1 = func_8007C058(sqrtf(v.x * v.x + v.y * v.y + v.z * v.z), D_8013CB80);
+ *dest = v2;
- dest->x = v.x / fVar1;
- dest->y = v.y / fVar1;
- dest->z = v.z / fVar1;
+ return dest;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8007BF90/func_8007C0F8.s")
-#endif
-#ifdef NON_MATCHING
-void func_8007C1AC(Vec3f* dest, struct_80045714* arg1)
+Vec3f* func_8007C1AC(Vec3f* dest, struct_80045714* arg1)
{
- f32 fVar1;
- f32 fVar2;
- f32 fVar3;
- f32 fVar4;
- f32 fVar5;
- f32 fVar6;
-
- fVar1 = Math_Coss(arg1->unk_04);
- fVar2 = Math_Coss(arg1->unk_06);
- fVar3 = Math_Coss(arg1->unk_04);
- fVar4 = Math_Coss(arg1->unk_06);
- fVar6 = arg1->unk_00;
- fVar5 = arg1->unk_00;
- dest->x = arg1->unk_00 * fVar3 * fVar4;
- dest->y = fVar6 * fVar1;
- dest->z = fVar5 * fVar3 * fVar2;
+ Vec3f v;
+ f32 sin4;
+ f32 cos4;
+ f32 sin6;
+ f32 cos6;
+
+ cos4 = Math_Coss(arg1->unk_04);
+ cos6 = Math_Coss(arg1->unk_06);
+ sin4 = Math_Sins(arg1->unk_04);
+ sin6 = Math_Sins(arg1->unk_06);
+
+ v.x = arg1->unk_00 * sin4 * sin6;
+ v.y = arg1->unk_00 * cos4;
+ v.z = arg1->unk_00 * sin4 * cos6;
+
+ *dest = v;
+
+ return dest;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8007BF90/func_8007C1AC.s")
-#endif
void func_8007C3F4(struct_80045714* arg0, Vec3f* arg1);
diff --git a/src/code/code_800A9F30.c b/src/code/code_800A9F30.c
index c5248faca..ad603fabe 100644
--- a/src/code/code_800A9F30.c
+++ b/src/code/code_800A9F30.c
@@ -45,22 +45,18 @@ void func_800AA0B4(void)
if (0) ; // Necessary to match
}
-#ifdef NON_MATCHING
void func_800AA0F0(void)
{
- if ((gPadMgr.unk_460 == func_800A9F30) && (gPadMgr.unk_464 == 0))
+ PadMgr* padmgr = &gPadMgr;
+
+ if ((padmgr->unk_460 == func_800A9F30) && (padmgr->unk_464 == 0))
{
- // asm loads/writes directly to 0x80166D20 and 0x80166D24
- // but the compiler wants to reuse offsets from 0x801668C0
- gPadMgr.unk_460 = NULL;
- gPadMgr.unk_464 = 0;
+ padmgr->unk_460 = NULL;
+ padmgr->unk_464 = 0;
}
func_800D3178(&D_80160FD0);
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_800A9F30/func_800AA0F0.s")
-#endif
u32 func_800AA148(void)
{
diff --git a/src/code/fault.c b/src/code/fault.c
index 528d8beaf..4af2d6c60 100644
--- a/src/code/fault.c
+++ b/src/code/fault.c
@@ -1,5 +1,6 @@
#include <ultra64.h>
#include <global.h>
+#include <alloca.h>
#include <vt.h>
//data
@@ -55,40 +56,42 @@ void Fault_ClientProcessThread(FaultClientContext* ctx)
osSendMesg(ctx->queue, ctx->msg, 1);
}
-#ifdef NON_MATCHING
void Fault_ProcessClientContext(FaultClientContext* ctx)
{
OSMesgQueue queue;
OSMesg msg;
- OSThread* t;
- OSTimer timer;
OSMesg recMsg;
+ OSThread* thread;
+ OSTimer timer;
+ u32 timerMsgVal;
+
+ timerMsgVal = 666;
+ thread = NULL;
osCreateMesgQueue(&queue, &msg, 1);
ctx->queue = &queue;
ctx->msg = NULL;
- if (sFaultStructPtr->currClientThreadSp)
+
+ if (sFaultStructPtr->currClientThreadSp != 0)
{
- Fault_ClientProcessThread(ctx);
- t = NULL;
+ thread = alloca(sizeof(OSThread));
+ osCreateThread(thread, 2, Fault_ClientProcessThread, ctx, sFaultStructPtr->currClientThreadSp, 0x7E);
+ osStartThread(thread);
}
else
{
- OSThread thread;
- osCreateThread(&thread, 2, &Fault_ClientProcessThread, ctx, sFaultStructPtr->currClientThreadSp, 0x7E);
- osStartThread(&thread);
- t = &thread;
+ Fault_ClientProcessThread(ctx);
}
- while(true)
+ while (true)
{
- osSetTimer(&timer, OS_USEC_TO_CYCLES(1000000), 0, &queue, (OSMesg)0x29A);
+ osSetTimer(&timer, OS_USEC_TO_CYCLES(1000000), 0, &queue, (OSMesg)timerMsgVal);
osRecvMesg(&queue, &recMsg, 1);
- if (recMsg == (OSMesg)0x29A)
+ if (recMsg != (OSMesg)666)
break;
- if (sFaultIsWaitingForInput)
+ if (!sFaultIsWaitingForInput)
{
ctx->ret = -1;
break;
@@ -96,17 +99,13 @@ void Fault_ProcessClientContext(FaultClientContext* ctx)
}
osStopTimer(&timer);
- if (t)
+
+ if (thread != NULL)
{
- osStopThread(t);
- //osDestroyThread(t);
- osDestroyThread(t);
+ osStopThread(thread);
+ osDestroyThread(thread);
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/fault/Fault_ProcessClientContext.s")
-#endif
-
u32 Fault_ProcessClient(u32 callback, u32 param0, u32 param1)
{
@@ -120,16 +119,22 @@ u32 Fault_ProcessClient(u32 callback, u32 param0, u32 param1)
}
#ifdef NON_MATCHING
-void Fault_AddClient(FaultClient *client, void* callback, void* param0, void* param1)
+// minor ordering differences
+void Fault_AddClient(FaultClient* client, void* callback, void* param0, void* param1)
{
- bool alreadyExist = false;
- OSIntMask mask = osSetIntMask(1);
- FaultClient* iter = sFaultStructPtr->clients;
+ OSIntMask mask;
+ u32 alreadyExists;
+ FaultClient* iter;
+
+ alreadyExists = false;
+ mask = osSetIntMask(1);
+
+ iter = sFaultStructPtr->clients;
while (iter)
{
if (iter == client)
{
- alreadyExist = true;
+ alreadyExists = true;
goto end;
}
iter = iter->next;
@@ -143,7 +148,7 @@ void Fault_AddClient(FaultClient *client, void* callback, void* param0, void* pa
end:
osSetIntMask(mask);
- if (alreadyExist)
+ if (alreadyExists)
osSyncPrintf(VT_COL(RED, WHITE) "fault_AddClient: %08x は既にリスト中にある\n" VT_RST, client);
}
#else
@@ -187,7 +192,6 @@ void Fault_RemoveClient(FaultClient* client) {
osSyncPrintf(VT_COL(RED, WHITE) "fault_RemoveClient: %08x リスト不整合です\n" VT_RST, client);
}
-
#pragma GLOBAL_ASM("asm/non_matchings/code/fault/Fault_AddAddrConvClient.s")
void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) {
@@ -266,20 +270,23 @@ void Fault_UpdatePadImpl()
}
#ifdef NON_MATCHING
-bool Fault_WaitForInputImpl()
+// ordering differences and possibly regalloc
+u32 Fault_WaitForInputImpl()
{
u16 kDown;
- bool exitDebugger;
-
+ u32 exitDebugger;
s32 count = 600;
Input* curInput = &sFaultStructPtr->padInput;
+
while (true)
{
while (true)
{
Fault_Sleep(0x10);
Fault_UpdatePadImpl();
+
kDown = curInput->padPressed;
+
if (kDown == 0x20)
sFaultStructPtr->faultActive = !sFaultStructPtr->faultActive;
@@ -291,14 +298,18 @@ bool Fault_WaitForInputImpl()
}
if (kDown == 0x8000 || kDown == 0x100)
- break;
+ return false;
+
if (kDown == 0x200)
return true;
+
if (kDown == 0x800)
FaultDrawer_SetOsSyncPrintfEnabled(true);
+
if (kDown == 0x400)
FaultDrawer_SetOsSyncPrintfEnabled(false);
}
+
return false;
}
#else
@@ -338,10 +349,10 @@ void Fault_DrawCornerRec(u16 color)
Fault_DrawRec(0x16, 0x10, 8, 1, color);
}
-void Fault_PrintFReg(s32 idx, f32 *value)
+void Fault_PrintFReg(s32 idx, f32* value)
{
u32 raw = *(u32*)value;
- int v0 = ((raw & 0x7f800000) >> 0x17) - 0x7f;
+ s32 v0 = ((raw & 0x7f800000) >> 0x17) - 0x7f;
if ((v0 >= -0x7e && v0 < 0x80) || raw == 0)
FaultDrawer_Printf("F%02d:%14.7e ", idx, *value);
@@ -349,8 +360,7 @@ void Fault_PrintFReg(s32 idx, f32 *value)
FaultDrawer_Printf("F%02d: %08x(16) ", idx, raw);
}
-#ifdef NON_MATCHING
-void Fault_LogFReg(s32 idx, f32 *value)
+void Fault_LogFReg(s32 idx, f32* value)
{
u32 raw = *(u32*)value;
s32 v0 = ((raw & 0x7f800000) >> 0x17) - 0x7f;
@@ -358,11 +368,8 @@ void Fault_LogFReg(s32 idx, f32 *value)
if ((v0 >= -0x7e && v0 < 0x80) || raw == 0)
osSyncPrintf("F%02d:%14.7e ", idx, *value);
else
- osSyncPrintf("F%02d: %08x(16) ", idx, raw);
+ osSyncPrintf("F%02d: %08x(16) ", idx, *(u32*)value);
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/fault/Fault_LogFReg.s")
-#endif
void Fault_PrintFPCR(u32 value)
{
@@ -567,14 +574,16 @@ void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3) {
FaultDrawer_SetCharPad(0, 0);
}
-
#ifdef NON_MATCHING
+// saved register and stack usage differences
+// possibly some minor ordering and regalloc differences
void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1)
{
+ Input* curInput = &sFaultStructPtr->padInput;
+ u32 addr = pc;
s32 count;
- u16 held;
s32 off;
- u32 addr = pc;
+
while (true)
{
if (addr < 0x80000000)
@@ -583,49 +592,54 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1)
addr = 0x807fff00;
addr &= ~0xF;
- Fault_DrawMemDumpPage("Dump", (u32*)addr);
+ Fault_DrawMemDumpPage("Dump", (u32*)addr, 0);
count = 600;
+
while (sFaultStructPtr->faultActive)
{
- if (count-- == 0)
+ if (count == 0)
return;
+
+ count--;
Fault_Sleep(0x10);
Fault_UpdatePadImpl();
- if ((sFaultStructPtr->padInput.padPressed | ~0x20) == ~0x20)
+ if (!~(curInput->padPressed | ~0x20))
sFaultStructPtr->faultActive = false;
}
+
do
{
Fault_Sleep(0x10);
Fault_UpdatePadImpl();
- } while (sFaultStructPtr->padInput.padPressed == 0);
+ } while (curInput->padPressed == 0);
- if ((sFaultStructPtr->padInput.padPressed | ~0x1000) == ~0)
+ if (!~(curInput->padPressed | ~0x1000))
return;
- held = sFaultStructPtr->padInput.status;
- if ((held | ~0x8000) == ~0)
+
+ if (!~(curInput->raw.pad | ~0x8000))
return;
off = 0x10;
- if ((held | ~0x2000) == ~0)
+ if (!~(curInput->raw.pad | ~0x2000))
off = 0x100;
- if ((held | ~0x4000) == ~0)
+ if (!~(curInput->raw.pad | ~0x4000))
off <<= 8;
- if ((held | ~0x800) == ~0)
- addr -= off;
- if ((held | ~0x400) == ~0)
+ if (!~(curInput->raw.pad | ~0x800))
addr -= off;
- if ((held | ~0x8) == ~0)
+ if (!~(curInput->raw.pad | ~0x400))
+ addr += off;
+ if (!~(curInput->raw.pad | ~0x8))
addr = pc;
- if ((held | ~0x4) == ~0)
+ if (!~(curInput->raw.pad | ~0x4))
addr = sp;
- if ((held | ~0x2) == ~0)
+ if (!~(curInput->raw.pad | ~0x2))
addr = unk0;
- if ((held | ~0x1) == ~0)
+ if (!~(curInput->raw.pad | ~0x1))
addr = unk1;
- if ((held | ~0x20) == ~0)
+ if (!~(curInput->raw.pad | ~0x20))
break;
}
+
sFaultStructPtr->faultActive = true;
}
#else
@@ -674,6 +688,7 @@ void Fault_ProcessClients(void)
{
FaultClient* iter = sFaultStructPtr->clients;
s32 idx = 0;
+
while(iter)
{
if (iter->callback)
@@ -696,58 +711,59 @@ void Fault_UpdatePad()
}
#ifdef NON_MATCHING
-
-void Fault_ThreadEntry(u32 unused)
+// saved register and stack usage differences
+void Fault_ThreadEntry(void* arg)
{
- OSThread *faultedThread;
+ OSThread* faultedThread;
OSMesg msg;
- //osSetEventMesg
osSetEventMesg(OS_EVENT_CPU_BREAK, &sFaultStructPtr->queue, 1);
osSetEventMesg(OS_EVENT_FAULT, &sFaultStructPtr->queue, 2);
+
while (true)
{
- osRecvMesg(&sFaultStructPtr->queue, &msg, 1);
-
- if (msg == (OSMesg)1)
- {
- sFaultStructPtr->msgId = 1;
- osSyncPrintf("フォルトマネージャ:OS_EVENT_CPU_BREAKを受信しました\n");
- }
- else if (msg == (OSMesg)2)
- {
- sFaultStructPtr->msgId = 2;
- osSyncPrintf("フォルトマネージャ:OS_EVENT_FAULTを受信しました\n");
- }
- else if (msg != (OSMesg)3)
+ do
{
- sFaultStructPtr->msgId = (u8)3;
- osSyncPrintf("フォルトマネージャ:不明なメッセージを受信しました\n");
- }
+ osRecvMesg(&sFaultStructPtr->queue, &msg, 1);
+
+ if (msg == (OSMesg)1)
+ {
+ sFaultStructPtr->msgId = 1;
+ osSyncPrintf("フォルトマネージャ:OS_EVENT_CPU_BREAKを受信しました\n");
+ }
+ else if (1 && msg == (OSMesg)2)
+ {
+ sFaultStructPtr->msgId = 2;
+ osSyncPrintf("フォルトマネージャ:OS_EVENT_FAULTを受信しました\n");
+ }
+ else if (msg == (OSMesg)3)
+ {
+ Fault_UpdatePad();
+ faultedThread = NULL;
+ continue;
+ }
+ else
+ {
+ sFaultStructPtr->msgId = 3;
+ osSyncPrintf("フォルトマネージャ:不明なメッセージを受信しました\n");
+ }
- if (msg == (OSMesg)3)
- {
- Fault_UpdatePad();
- faultedThread = NULL;
- }
- else
- {
faultedThread = __osGetCurrFaultedThread();
osSyncPrintf("__osGetCurrFaultedThread()=%08x\n", faultedThread);
- if (!faultedThread)
+
+ if (faultedThread == NULL)
{
faultedThread = Fault_FindFaultedThread();
osSyncPrintf("FindFaultedThread()=%08x\n", faultedThread);
}
- }
-
- if (!faultedThread)
- continue;
+ } while (faultedThread == NULL);
__osSetFpcCsr(__osGetFpcCsr() & -0xf81);
sFaultStructPtr->faultedThread = faultedThread;
+
while (!sFaultStructPtr->faultHandlerEnabled)
Fault_Sleep(1000);
+
Fault_Sleep(500);
Fault_CommitFB();
@@ -781,10 +797,12 @@ void Fault_ThreadEntry(u32 unused)
FaultDrawer_DrawText(0x40, 0x64, " THANK YOU! ");
FaultDrawer_DrawText(0x40, 0x6E, " You are great debugger!");
Fault_WaitForInput();
-
} while (!sFaultStructPtr->exitDebugger);
- while(!sFaultStructPtr->exitDebugger){}
+ while (!sFaultStructPtr->exitDebugger)
+ {
+
+ }
Fault_ResumeThread(faultedThread);
}
diff --git a/src/code/fault_drawer.c b/src/code/fault_drawer.c
index 522f0b2ff..392290d8a 100644
--- a/src/code/fault_drawer.c
+++ b/src/code/fault_drawer.c
@@ -47,7 +47,7 @@ FaultDrawer sFaultDrawerDefault =
22, 297,//xStart, xEnd
0xFFFF, 0x0000, //foreColor, backColor
22, 16, //cursorX, cursorY
- &sFaultDrawerFont, //font
+ sFaultDrawerFont, //font
8, 8, 0, 0,
{ //printColors
0x0001, 0xF801, 0x07C1, 0xFFC1,
@@ -63,7 +63,6 @@ FaultDrawer sFaultDrawerDefault =
FaultDrawer sFaultDrawerStruct;
char D_8016B6C0[0x20]; //? unused
-
void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled)
{
sFaultDrawerStruct.osSyncPrintfEnabled = enabled;
@@ -75,9 +74,10 @@ void FaultDrawer_DrawRecImpl(s32 xstart, s32 ystart, s32 xend, s32 yend, u16 col
if (sFaultDrawerStruct.w - xstart > 0 && sFaultDrawerStruct.h - ystart > 0)
{
s32 x, y;
- for (y = 0; y < yend-ystart+1; y++)
- for (x = 0; x < xend-xstart+1; x++)
- sFaultDrawerStruct.fb[sFaultDrawerStruct.w*y+x] = color;
+
+ for (y = 0; y <= yend - ystart; y++)
+ for (x = 0; x <= xend - xstart; x++)
+ sFaultDrawerStruct.fb[sFaultDrawerStruct.w * y + x] = color;
osWritebackDCacheAll();
}
@@ -86,35 +86,38 @@ void FaultDrawer_DrawRecImpl(s32 xstart, s32 ystart, s32 xend, s32 yend, u16 col
#pragma GLOBAL_ASM("asm/non_matchings/code/fault_drawer/FaultDrawer_DrawRecImpl.s")
#endif
-
#ifdef NON_MATCHING
+// regalloc and minor ordering differences
void FaultDrawer_DrawChar(char c)
{
s32 x, y;
- u32* dataStart = &sFaultDrawerStruct.fontData[(c >> 3) * 0x10 + (c & 4) >> 2];
- u16* fb = &sFaultDrawerStruct.fb[sFaultDrawerStruct.w * sFaultDrawerStruct.cursorY + sFaultDrawerStruct.cursorX];
-
- if (sFaultDrawerStruct.xStart <= sFaultDrawerStruct.cursorX &&
- sFaultDrawerStruct.charW + sFaultDrawerStruct.cursorX -1 <= sFaultDrawerStruct.xEnd &&
- sFaultDrawerStruct.yStart <= sFaultDrawerStruct.cursorY &&
- sFaultDrawerStruct.charH + sFaultDrawerStruct.cursorY -1 <= sFaultDrawerStruct.yEnd &&
- sFaultDrawerStruct.charH != 0
- )
+ u32* dataPtr;
+ u16* fb;
+
+ dataPtr = &sFaultDrawerStruct.fontData[((c & 4) >> 2) + ((c / 8) * 16)];
+
+ fb = &sFaultDrawerStruct.fb[sFaultDrawerStruct.cursorY * sFaultDrawerStruct.w];
+ fb = &fb[sFaultDrawerStruct.cursorX];
+
+ if ((sFaultDrawerStruct.xStart <= sFaultDrawerStruct.cursorX) &&
+ ((sFaultDrawerStruct.charW + sFaultDrawerStruct.cursorX - 1) <= sFaultDrawerStruct.xEnd) &&
+ (sFaultDrawerStruct.yStart <= sFaultDrawerStruct.cursorY) &&
+ ((sFaultDrawerStruct.charH + sFaultDrawerStruct.cursorY - 1) <= sFaultDrawerStruct.yEnd))
{
for (y = 0; y < sFaultDrawerStruct.charH; y++)
{
- u32 mask = 0x10000000 << (c & 3);
+ u32 mask = 0x10000000 << (c % 4);
+ u32 data = *dataPtr;
for (x = 0; x < sFaultDrawerStruct.charW; x++)
{
- if ((mask & *dataStart))
+ if (mask & data)
fb[x] = sFaultDrawerStruct.foreColor;
- else
- if (sFaultDrawerStruct.backColor & 1)
- fb[x] = sFaultDrawerStruct.backColor;
+ else if (sFaultDrawerStruct.backColor & 1)
+ fb[x] = sFaultDrawerStruct.backColor;
mask >>= 4;
}
fb += sFaultDrawerStruct.w;
- dataStart += 2;
+ dataPtr += 2;
}
}
}
@@ -186,58 +189,56 @@ void FaultDrawer_FillScreen()
FaultDrawer_SetCursor(sFaultDrawerStruct.xStart, sFaultDrawerStruct.yStart);
}
-#ifdef NON_MATCHING
u32 FaultDrawer_FormatStringFunc(u32 arg0, const char* str, s32 count)
{
- while (count)
+ for (count; count != 0; count--, str++)
{
- s32 curXStart; //s32?
+ s32 curXStart;
s32 curXEnd;
if (sFaultDrawerStruct.escCode)
{
sFaultDrawerStruct.escCode = false;
if (*str > 0x30 && *str < 0x3A)
- FaultDrawer_SetForeColor(gFaultStruct.colors[*str + 12]);
+ FaultDrawer_SetForeColor(sFaultDrawerStruct.printColors[*str - 0x30]);
curXStart = sFaultDrawerStruct.cursorX;
curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
}
else
{
- if (*str == '\n')
+ switch (*str)
{
- if (sFaultDrawerStruct.osSyncPrintfEnabled)
- osSyncPrintf("\n");
-
- sFaultDrawerStruct.cursorX = sFaultDrawerStruct.w;
- curXStart = sFaultDrawerStruct.w;
- curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
- }
- else if (*str == '\x1a')
- {
- sFaultDrawerStruct.escCode = true;
- curXStart = sFaultDrawerStruct.cursorX;
- curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
- }
- else
- {
- if (sFaultDrawerStruct.osSyncPrintfEnabled)
- osSyncPrintf("%c", *str);
-
- FaultDrawer_DrawChar(*str);
- sFaultDrawerStruct.cursorX += sFaultDrawerStruct.charW + sFaultDrawerStruct.charWPad;
-
- curXStart = sFaultDrawerStruct.cursorX;
- curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
+ case '\n':
+ if (sFaultDrawerStruct.osSyncPrintfEnabled)
+ osSyncPrintf("\n");
+
+ sFaultDrawerStruct.cursorX = sFaultDrawerStruct.w;
+ curXStart = sFaultDrawerStruct.cursorX;
+ curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
+ break;
+ case '\x1A':
+ sFaultDrawerStruct.escCode = true;
+ curXStart = sFaultDrawerStruct.cursorX;
+ curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
+ break;
+ default:
+ if (sFaultDrawerStruct.osSyncPrintfEnabled)
+ osSyncPrintf("%c", *str);
+
+ FaultDrawer_DrawChar(*str);
+ sFaultDrawerStruct.cursorX += sFaultDrawerStruct.charW + sFaultDrawerStruct.charWPad;
+
+ curXStart = sFaultDrawerStruct.cursorX;
+ curXEnd = sFaultDrawerStruct.xEnd - sFaultDrawerStruct.charW;
}
}
if (curXEnd <= curXStart)
{
- sFaultDrawerStruct.cursorY += sFaultDrawerStruct.charH + sFaultDrawerStruct.charHPad;
sFaultDrawerStruct.cursorX = sFaultDrawerStruct.xStart;
- if (sFaultDrawerStruct.yEnd - sFaultDrawerStruct.charH <= (u16)sFaultDrawerStruct.cursorY) //cast?
+ sFaultDrawerStruct.cursorY += sFaultDrawerStruct.charH + sFaultDrawerStruct.charHPad;
+ if (sFaultDrawerStruct.yEnd - sFaultDrawerStruct.charH <= sFaultDrawerStruct.cursorY)
{
if (sFaultDrawerStruct.inputCallback)
{
@@ -247,16 +248,12 @@ u32 FaultDrawer_FormatStringFunc(u32 arg0, const char* str, s32 count)
sFaultDrawerStruct.cursorY = sFaultDrawerStruct.yStart;
}
}
-
- count--;
- str++;
}
+
osWritebackDCacheAll();
+
return arg0;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/fault_drawer/FaultDrawer_FormatStringFunc.s")
-#endif
void FaultDrawer_VPrintf(const char* str, char* args) //va_list
{
diff --git a/src/code/gfxprint.c b/src/code/gfxprint.c
index a1aaaced8..340d4702a 100644
--- a/src/code/gfxprint.c
+++ b/src/code/gfxprint.c
@@ -104,54 +104,92 @@ u8 sGfxPrintFontData[(16*256)/2] =
};
-#define gDPSetPrimColorMod(pkt, m, l, rgba) \
-_DW({ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
- _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \
- _g->words.w1 = (rgba); \
+#define gDPSetPrimColorMod(pkt, m, l, rgba) \
+_DW({ \
+ Gfx *_g = (Gfx *)(pkt); \
+ \
+ _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
+ _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \
+ _g->words.w1 = (rgba); \
})
#ifdef NON_MATCHING
+// regalloc and minor ordering differences
void GfxPrint_InitDlist(GfxPrint* this)
{
- u32 palette;
- u32 tile;
+ s32 width = 16;
+ s32 height = 256;
+ s32 i;
gDPPipeSync(this->dlist++);
- gDPSetOtherMode(this->dlist++, 0xECF0, 0x504244);
- gDPSetCombineLERP(this->dlist++, K5, K5, 0, TEXEL0, 0, 0, 0, TEXEL0, K5, K5, 0, TEXEL0, 0, 0, 0, TEXEL0);
- gDPLoadTextureBlock(this->dlist++, sGfxPrintFontData, G_IM_FMT_CI, G_IM_SIZ_4b, 16, 256, 0, 0, 0, 0, 0, 0, 0); //? missmatch here
- gDPLoadTLUT(this->dlist++, 64, 0x100, sGfxPrintFontTLUT);
-
- tile = 2;
- palette = 1;
- do
- {
- gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0x0, tile, palette++, G_TX_NOMIRROR | G_TX_CLAMP, 0, 0, G_TX_NOMIRROR | G_TX_CLAMP, 0, 0);
- gDPSetTileSize(this->dlist++, tile, 0, 0, 15, 255);
- tile+=2;
+ gDPSetOtherMode(this->dlist++,
+ G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP |
+ G_TT_IA16 | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2);
+ gDPSetCombineLERP(this->dlist++,
+ 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0,
+ 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0);
+
+ gDPSetTextureImage(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b_LOAD_BLOCK, 1, sGfxPrintFontData);
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b_LOAD_BLOCK,
+ 0, 0, G_TX_LOADTILE, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
+ gDPLoadSync(this->dlist++);
+ gDPLoadBlock(this->dlist++, G_TX_LOADTILE, 0, 0,
+ (((width)*(height) + G_IM_SIZ_4b_INCR) >> G_IM_SIZ_4b_SHIFT) - 1,
+ CALC_DXT(width, G_IM_SIZ_4b_BYTES));
+ gDPPipeSync(this->dlist++);
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b,
+ 1, 0, G_TX_RENDERTILE, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
+ gDPSetTileSize(this->dlist++, G_TX_RENDERTILE, 0, 0,
+ ((width)-1) << G_TEXTURE_IMAGE_FRAC,
+ ((height)-1) << G_TEXTURE_IMAGE_FRAC);
+
+ gDPLoadTLUT(this->dlist++, 64, 256, sGfxPrintFontTLUT);
- } while (palette < 4);
+ for (i = 1; i < 4; i++)
+ {
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b,
+ 1, 0, i * 2, i,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
+ gDPSetTileSize(this->dlist++, i * 2, 0, 0, 60, 1020);
+ }
gDPSetPrimColorMod(this->dlist++, 0, 0, *(u32*)&this->color);
- gDPLoadTextureTile(this->dlist++, sGfxPrintUnkData, G_IM_FMT_CI, G_IM_SIZ_8b, 1, 0, 0, 0, 0, 7, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 1, 3, 0, 0);
- gDPLoadTLUT(this->dlist++, 16, 0x140, sGfxPrintUnkTLUT);
- tile = 3;
- do
+ gDPSetTextureImage(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_8b, 1, sGfxPrintUnkData);
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_8b,
+ 1, 0, G_TX_LOADTILE, 0 ,
+ G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD);
+ gDPLoadSync(this->dlist++);
+ gDPLoadTile(this->dlist++, G_TX_LOADTILE, 0, 0, 2, 28);
+ gDPPipeSync(this->dlist++);
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_8b,
+ 1, 0, 1, 4,
+ G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD);
+ gDPSetTileSize(this->dlist++, 1, 0, 0, 4, 28);
+
+ gDPLoadTLUT(this->dlist++, 16, 320, sGfxPrintUnkTLUT);
+
+ for (i = 1; i < 4; i++)
{
- gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, tile, 0x0, G_TX_RENDERTILE, 4, G_TX_NOMIRROR | G_TX_WRAP, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 0);
- gDPSetTileSize(this->dlist++, tile, 0, 0, 1, 7);
- tile += 2;
- } while (tile != 9);
+ gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b,
+ 1, 0, i * 2 + 1, 4,
+ G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOLOD,
+ G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD);
+ gDPSetTileSize(this->dlist++, i * 2 + 1, 0, 0, 4, 28);
+ }
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/gfxprint/GfxPrint_InitDlist.s")
#endif
-
void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a)
{
this->color.r = r;
@@ -180,71 +218,95 @@ void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y)
this->baseY = y << 2;
}
-//close from matching
#ifdef NON_MATCHING
-void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c)
+// regalloc and ordering differences
+void GfxPrint_PrintCharImpl(GfxPrint* this, char c)
{
- u32 test;
- u32 test2;
-
if (this->flag & GFXPRINT_UPDATE_MODE)
{
this->flag &= ~GFXPRINT_UPDATE_MODE;
+
gDPPipeSync(this->dlist++);
if (this->flag & GFXPRINT_USE_RGBA16)
{
gDPSetTextureLUT(this->dlist++, G_TT_RGBA16);
gDPSetCycleType(this->dlist++, G_CYC_2CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_OPA_CI, G_RM_XLU_SURF2);
- gDPSetCombineLERP(this->dlist++, TEXEL0, K5, TEXEL1, COMBINED_ALPHA, TEXEL0, 0, TEXEL1, 0, K5, K5, 0, COMBINED, 0, 0, 0, COMBINED);
+ gDPSetCombineLERP(this->dlist++,
+ TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0,
+ 0, 0, 0, COMBINED, 0, 0, 0, COMBINED);
}
else
{
gDPSetTextureLUT(this->dlist++, G_TT_IA16);
gDPSetCycleType(this->dlist++, G_CYC_1CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
- gDPSetCombineLERP(this->dlist++, TEXEL0, K5, PRIMITIVE, COMBINED_ALPHA, 0, 0, 0, TEXEL0, TEXEL0, K5, PRIMITIVE, COMBINED_ALPHA, 0, 0, 0, TEXEL0);
+ gDPSetCombineLERP(this->dlist++,
+ TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0,
+ TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0);
}
}
- test = (c & 4) << 6;
- test2 = (c >> 3) << 8;
if (this->flag & GFXPRINT_FLAG4)
{
gDPSetPrimColorMod(this->dlist++, 0, 0, 0);
if (this->flag & GFXPRINT_FLAG64)
- gSPTextureRectangle(this->dlist++, (this->posX+4)<<1, (this->posY+4)<<1, (this->posX+0x24)<<1, (this->posY+0x24)<<1, c<<1, test, test2, 512, 512); //c*2 ?
+ gSPTextureRectangle(this->dlist++,
+ (this->posX + 4) << 1, (this->posY + 4) << 1,
+ (this->posX + 4 + 32) << 1, (this->posY + 4 + 32) << 1,
+ c * 2,
+ (u16)(c & 4) * 64, (u16)(c >> 3) * 256,
+ 512, 512);
else
- gSPTextureRectangle(this->dlist++, this->posX+4, this->posY+4, this->posX+0x24, this->posY+0x24, c<<1, test, test2, 1024, 1024);
+ gSPTextureRectangle(this->dlist++,
+ this->posX + 4, this->posY + 4,
+ this->posX + 4 + 32, this->posY + 4 + 32,
+ c * 2,
+ (u16)(c & 4) * 64, (u16)(c >> 3) * 256,
+ 1024, 1024);
gDPSetPrimColorMod(this->dlist++, 0, 0, *(u32*)&this->color);
}
+
if (this->flag & GFXPRINT_FLAG64)
- gSPTextureRectangle(this->dlist++, (this->posX)<<1, (this->posY)<<1, (this->posX + 0x20)<<1, (this->posY + 0x20)<<1, c << 1, test, test2, 512, 512);
+ gSPTextureRectangle(this->dlist++,
+ (this->posX) << 1, (this->posY) << 1,
+ (this->posX + 32) << 1, (this->posY + 32) << 1,
+ c * 2,
+ (u16)(c & 4) * 64, (u16)(c >> 3) * 256,
+ 512, 512);
else
- gSPTextureRectangle(this->dlist++, this->posX, this->posY, this->posX + 0x20, this->posY + 0x20, c << 1, test, test2, 1024, 1024);
-
- this->posX += 0x20;
+ gSPTextureRectangle(this->dlist++,
+ this->posX, this->posY,
+ this->posX + 32, this->posY + 32,
+ c * 2,
+ (u16)(c & 4) * 64, (u16)(c >> 3) * 256,
+ 1024, 1024);
+
+ this->posX += 32;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/gfxprint/GfxPrint_PrintCharImpl.s")
#endif
-
-#ifdef NON_MATCHING
-void GfxPrint_PrintChar(GfxPrint *this, char c)
+void GfxPrint_PrintChar(GfxPrint* this, u8 c)
{
+ u8 charParam = c;
+
if (c == ' ')
+ {
this->posX += 0x20;
- else if (c > 0x20 && c < 0x7f)
- GfxPrint_PrintCharImpl(this, c);
- else if (c >= 0xa0 && c < 0xe0)
+ }
+ else if (c > 0x20 && c < 0x7F)
{
- u8 charParam = c;
- if ((this->flag & GFXPRINT_FLAG1) != 0)
+ GfxPrint_PrintCharImpl(this, charParam);
+ }
+ else if (c >= 0xA0 && c < 0xE0)
+ {
+ if (this->flag & GFXPRINT_FLAG1)
{
- if (c < 0xc0)
+ if (c < 0xC0)
charParam = c - 0x20;
else
charParam = c + 0x20;
@@ -253,75 +315,41 @@ void GfxPrint_PrintChar(GfxPrint *this, char c)
}
else
{
- switch(c)
+ switch (c)
{
case 0:
- return;
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- return;
- //tab
- case 9:
- {
- u32 uVar1;
- do {
- GfxPrint_PrintCharImpl(this, 0x20);
- uVar1 = this->posX - this->baseX;
- if (uVar1 < 0 && uVar1 != 0)
- uVar1 -= 0x100;
- } while (uVar1 != 0);
- return;
- }
- //line feed
- case 0xa:
- {
+ break;
+ case '\n':
this->posY += 0x20;
+ case '\r':
this->posX = this->baseX;
- return;
- }
- /*
- case 0xb:
- case 0xc:
- return;
- */
- //carriage return
- case 0xd:
- {
- this->posX = this->baseX;
- return;
- }
- case 0x8a:
- this->flag &= ~GFXPRINT_USE_RGBA16;
- this->flag |= GFXPRINT_UPDATE_MODE;
- return;
- case 0x8b:
+ break;
+ case '\t':
+ do
+ {
+ GfxPrint_PrintCharImpl(this, 0x20);
+ } while ((this->posX - this->baseX) % 256);
+ break;
+ case 0x8D:
+ this->flag |= GFXPRINT_FLAG1;
+ break;
+ case 0x8C:
+ this->flag &= ~GFXPRINT_FLAG1;
+ break;
+ case 0x8B:
this->flag |= GFXPRINT_USE_RGBA16;
this->flag |= GFXPRINT_UPDATE_MODE;
- return;
- case 0x8c:
- this->flag &= ~GFXPRINT_FLAG1;
- return;
- case 0x8d:
- this->flag |= GFXPRINT_FLAG1;
- return;
- case 0x8e:
+ break;
+ case 0x8A:
+ this->flag &= ~GFXPRINT_USE_RGBA16;
+ this->flag |= GFXPRINT_UPDATE_MODE;
+ break;
+ case 0x8E:
default:
- return;
+ break;
}
-
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/gfxprint/GfxPrint_PrintChar.s")
-#endif
-
-
void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, size_t charSize, size_t charCount)
{
@@ -409,4 +437,4 @@ void GfxPrint_Printf(GfxPrint* this, const char* fmt, ...)
va_start(args, fmt);
GfxPrint_VPrintf(this, fmt, args);
-} \ No newline at end of file
+}
diff --git a/src/code/padmgr.c b/src/code/padmgr.c
index 0c0201c63..163e546b1 100644
--- a/src/code/padmgr.c
+++ b/src/code/padmgr.c
@@ -1,10 +1,13 @@
#include <ultra64.h>
#include <global.h>
+#include <vt.h>
#include <PR/os_cont.h>
#include <ultra64/controller.h>
#include <padmgr.h>
+s32 D_8012D280 = 1;
+
OSMesgQueue* PadMgr_LockGetControllerQueue(PadMgr* padmgr)
{
OSMesgQueue* ctrlrqueue = NULL;
@@ -37,23 +40,28 @@ void PadMgr_UnlockReleaseControllerQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue
void PadMgr_Lock2(PadMgr* padmgr)
{
- osRecvMesg(&padmgr->queue2, 0, OS_MESG_BLOCK);
+ osRecvMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK);
}
void PadMgr_Unlock2(PadMgr* padmgr)
{
- osSendMesg(&padmgr->queue2, 0, OS_MESG_BLOCK);
+ osSendMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK);
}
#ifdef NON_MATCHING
+// regalloc and minor ordering differences
void func_800C740C(PadMgr* padmgr)
{
+ static u32 D_8012D284 = 0;
+ static u32 D_8016A4F0;
+ s32 temp;
s32 var1;
OSMesgQueue* ctrlrqueue;
s32 var3;
s32 var4;
s32 i;
+ temp = 1;
ctrlrqueue = PadMgr_LockGetControllerQueue(padmgr);
var1 = 0;
@@ -63,26 +71,28 @@ void func_800C740C(PadMgr* padmgr)
{
if (padmgr->pad_status[i].status & 1)
{
- if (padmgr->unk_2AE[i] == 1)
+ if (padmgr->unk_2AE[i] == temp)
{
if (padmgr->unk_2B2[i] != 0)
{
if (padmgr->unk_2B6[i] < 3)
{
- osSyncPrintf(D_80145894); //"\x1b[33m" (probably formatting/debugger interface)
- osSyncPrintf(D_8014589C, i + 1, D_801458B0); //"padmgr: %d[JPN]Con: ", "[JPN]Vibration pack jumble jumble"
- osSyncPrintf(D_801458CC); //"\x1b[m" (probably formatting/debugger interface)
- if (osSetVibration(&padmgr->unk_controller[i], 1) != 0)
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック ぶるぶるぶるぶる");
+ osSyncPrintf(VT_RST);
+
+ if (osSetVibration(&padmgr->unk_controller[i], temp) != 0)
{
padmgr->unk_2AE[i] = 0;
- osSyncPrintf(D_801458D0);
- osSyncPrintf(D_801458D8, i + 1, D_801458EC); //"A communication error has occurred with the vibraton pack"
- osSyncPrintf(D_80145914);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
+ osSyncPrintf(VT_RST);
}
else
{
padmgr->unk_2B6[i] = 3;
}
+
var1 = 1;
}
}
@@ -90,20 +100,22 @@ void func_800C740C(PadMgr* padmgr)
{
if (padmgr->unk_2B6[i] != 0)
{
- osSyncPrintf(D_80145918);
- osSyncPrintf(D_80145920, i + 1, D_80145934); //"Stop vibration pack"
- osSyncPrintf(D_80145944);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
+ osSyncPrintf(VT_RST);
+
if (osSetVibration(&padmgr->unk_controller[i], 0) != 0)
{
padmgr->unk_2AE[i] = 0;
- osSyncPrintf(D_80145948);
- osSyncPrintf(D_80145950, i + 1, D_80145964); //"A communication error has occurred with the vibration pack"
- osSyncPrintf(D_8014598C);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
+ osSyncPrintf(VT_RST);
}
else
{
padmgr->unk_2B6[i]--;
}
+
var1 = 1;
}
}
@@ -115,16 +127,16 @@ void func_800C740C(PadMgr* padmgr)
{
if (padmgr->unk_2AE[i] == 1)
{
- osSyncPrintf(D_80145990);
- osSyncPrintf(D_80145998, i + 1, D_801459AC); //"Vibration pack seems to be pulled out"
- osSyncPrintf(D_801459CC);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックが抜かれたようです");
+ osSyncPrintf(VT_RST);
padmgr->unk_2AE[i] = 0;
}
else
{
- osSyncPrintf(D_801459D0);
- osSyncPrintf(D_80145A24);
- osSyncPrintf(D_801459D8, i + 1, D_801459EC); //"It seems that a controller pack that is not a vibration pack was pulled out"
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックではないコントローラパックが抜かれたようです");
+ osSyncPrintf(VT_RST);
padmgr->unk_2AE[i] = 0;
}
}
@@ -145,9 +157,9 @@ void func_800C740C(PadMgr* padmgr)
padmgr->unk_2AE[var3] = 1;
osSetVibration(&padmgr->unk_controller[var3], 1);
osSetVibration(&padmgr->unk_controller[var3], 0);
- osSyncPrintf(D_80145A28);
- osSyncPrintf(D_80145A30, var3 + 1, D_80145A44); //"Recognized vibration pack"
- osSyncPrintf(D_80145A60);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", var3 + 1, "振動パックを認識しました");
+ osSyncPrintf(VT_RST);
}
else if (var4 == 11)
{
@@ -155,12 +167,11 @@ void func_800C740C(PadMgr* padmgr)
}
else if (var4 == 4)
{
- LogUtils_LogThreadId(D_80145A64, 282);
- ++D_8012D284;
- osSyncPrintf(D_80145A70, D_8012D284); //"++errcnt = %d"
- osSyncPrintf(D_80145A80);
- osSyncPrintf(D_80145A88, var3 + 1, D_80145A9C); //"Controller pack communication error"
- osSyncPrintf(D_80145ABC);
+ LogUtils_LogThreadId("../padmgr.c", 282);
+ osSyncPrintf("++errcnt = %d\n", ++D_8012D284);
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("padmgr: %dコン: %s\n", var3 + 1, "コントローラパックの通信エラー");
+ osSyncPrintf(VT_RST);
}
}
}
@@ -169,6 +180,8 @@ void func_800C740C(PadMgr* padmgr)
PadMgr_UnlockReleaseControllerQueue(padmgr, ctrlrqueue);
}
#else
+u32 D_8012D284 = 0;
+u32 D_8016A4F0;
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_800C740C.s")
#endif
@@ -186,10 +199,10 @@ void func_800C7818(PadMgr* padmgr)
{
if ((gFaultStruct.msgId == 0) && (padmgr->unk_45D != 0))
{
- osSyncPrintf("\x1b[33m");
+ osSyncPrintf(VT_FGCOL(YELLOW));
//EUC-JP: コン | 'Con'? , EUC-JP: 振動パック 停止 | Stop vibration pack
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
- osSyncPrintf("\x1b[m");
+ osSyncPrintf(VT_RST);
}
osSetVibration(&padmgr->unk_controller[i], 0);
@@ -211,7 +224,8 @@ void func_800C7934(PadMgr* padmgr, u32 a1, u32 a2)
}
#ifdef NON_MATCHING
-//func_800A23CC in 1.0
+// minor ordering difference
+// 800A23CC in 1.0
void func_800C7948(PadMgr* padmgr, u8* a1)
{
padmgr->unk_2B2[0] = a1[0];
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 3b6698c30..71bba11f2 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4332,7 +4332,7 @@ s16 func_80034DD4(Actor* actor, GlobalContext* globalCtx, s16 arg2, f32 arg3)
if (arg3 < var)
{
- actor->flags &= ~0x1;
+ actor->flags &= ~1;
Math_SmoothScaleMaxMinS(&arg2, 0, 6, 0x14, 1);
}
else
@@ -4426,35 +4426,7 @@ s32 func_80035124(Actor* actor, GlobalContext* globalCtx)
return ret;
}
-/* z_cheap_proc.c */
-
-void Draw_DListOpa(GlobalContext* globalCtx, u32 dlist)
-{
- GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
- Gfx* gfxArr[4];
-
- func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 214);
-
- func_80093D18(globalCtx->state.gfxCtx);
- gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_cheap_proc.c", 216), G_MTX_MODELVIEW | G_MTX_LOAD);
- gSPDisplayList(gfxCtx->polyOpa.p++, dlist);
-
- func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 219);
-}
-
-void Draw_DListXlu(GlobalContext* globalCtx, u32 dlist)
-{
- GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
- Gfx* gfxArr[4];
-
- func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 228);
-
- func_80093D84(globalCtx->state.gfxCtx);
- gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_cheap_proc.c", 230), G_MTX_MODELVIEW | G_MTX_LOAD);
- gSPDisplayList(gfxCtx->polyXlu.p++, dlist);
-
- func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 233);
-}
+#include "z_cheap_proc.c"
u8 func_800353E8(GlobalContext* globalCtx)
{
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index e1bece0fa..89a5e0334 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -232,8 +232,9 @@ void func_80044340(Camera *camera, Vec3f *b, Vec3f *c)
*c = sp20.unk_00;
}
-#ifdef NON_MATCHING
f32 func_80038B7C();
+
+#ifdef NON_MATCHING
// ordering
s32 func_800443A0(Camera *camera, Vec3f *b, Vec3f *c)
{
@@ -449,17 +450,16 @@ f32 func_80045714(Vec3f *a, s16 b, s16 c, f32 arg3);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045714.s")
#endif
-#ifdef NON_MATCHING
f32 func_8007C0A8(f32, f32);
-// CLOSE: stack is slightly off, probably a temp var
+
s32 func_800457A8(Camera *camera, struct_80045714 *b, f32 c, s16 d)
{
f32 unused;
Vec3f sp50;
Vec3f sp44;
s32 unused2;
- f32 temp_ret;
PosRot *sp2C;
+ f32 temp_ret;
temp_ret = func_8002DC84(camera->player);
@@ -481,13 +481,11 @@ s32 func_800457A8(Camera *camera, struct_80045714 *b, f32 c, s16 d)
return 1;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800457A8.s")
-#endif
-#ifdef NON_MATCHING
f32 func_8007C028(Vec3f *, Vec3f *);
-// CLOSE: regalloc, plus stack is slightly off, probably a temp var
+
+#ifdef NON_MATCHING
+// CLOSE: regalloc
s32 func_800458D4(Camera *camera, struct_80045714 *b, f32 c, f32 *d, s16 e)
{
f32 phi_f2;
@@ -496,7 +494,7 @@ s32 func_800458D4(Camera *camera, struct_80045714 *b, f32 c, f32 *d, s16 e)
f32 temp_ret;
PosRot *temp_s1;
f32 sp48;
- Vec3f sp3C; // unused
+ s32 pad[2];
sp60.y = func_8002DC84(camera->player) + c;
sp60.x = 0.0f;
@@ -631,7 +629,6 @@ s32 func_80045C74(Camera *camera, struct_80045714 *b, f32 c, f32 *d, s16 arg4)
phi_f16 = 1.0f - sinf(OREG(33) * (M_PI / 180) - temp_ret_3);
else
phi_f16 = 1.0f;
- }
sp70.y -= temp * phi_f16;
}
@@ -881,51 +878,43 @@ void Camera_Vec3fCopy(Vec3f *src, Vec3f *dst)
// 225 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80057C6C.s")
-#ifdef NON_MATCHING
-// still needs a bit of work, but should be functionally equivalent
+s32 func_8005AD40(Camera *camera, s32 a, s16 b, f32 c, s16 d, s16 e, s16 f);
+
void func_80057FC4(Camera *camera)
{
if (camera != &camera->globalCtx->cameraCtx.activeCameras[0])
{
- camera->unk_142 = 33;
+ camera->unk_154 = camera->unk_142 = 33;
camera->unk_14C &= ~0x4;
- camera->unk_154 = camera->unk_142; // compiler uses the same temp reg, but it should load from 142 right after being saved to
- // maybe try camera->unk_154 = camera->unk_142 = 33 and make them have differing signs?
- return;
}
- // try putting these in a bunch of if else statements
- if (*camera->globalCtx->roomCtx.curRoom.unk_08 != 1)
+ else if (camera->globalCtx->roomCtx.curRoom.mesh->polygon.type != 1)
{
- if (camera->globalCtx->roomCtx.curRoom.unk_03 != 0)
+ switch (camera->globalCtx->roomCtx.curRoom.unk_03)
{
- if (camera->globalCtx->roomCtx.curRoom.unk_03 == 1)
- {
+ case 1:
func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_142 = 3;
- camera->unk_154 = camera->unk_142;
- return;
- }
- osSyncPrintf("camera: room type: default set etc (%d)\n", camera->globalCtx->roomCtx.curRoom.unk_03);
- func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_142 = 1;
- camera->unk_154 = camera->unk_142;
- return;
+ camera->unk_154 = camera->unk_142 = 3;
+ break;
+ case 0:
+ osSyncPrintf("camera: room type: default set field\n");
+ func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
+ camera->unk_154 = camera->unk_142 = 1;
+ break;
+ default:
+ osSyncPrintf("camera: room type: default set etc (%d)\n", camera->globalCtx->roomCtx.curRoom.unk_03);
+ func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
+ camera->unk_154 = camera->unk_142 = 1;
+ camera->unk_14C |= 4;
+ break;
}
- osSyncPrintf("camera: room type: default set field\n");
- func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_142 = 1;
- camera->unk_14C |= 4;
- camera->unk_154 = camera->unk_142;
- return;
}
- osSyncPrintf("camera: room type: prerender\n");
- camera->unk_142 = 0x21;
- camera->unk_14C &= 0xfffb;
- camera->unk_154 = camera->unk_142;
+ else
+ {
+ osSyncPrintf("camera: room type: prerender\n");
+ camera->unk_154 = camera->unk_142 = 33;
+ camera->unk_14C &= ~0x4;
+ }
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80057FC4.s")
-#endif
void Camera_Stub80058140(Camera *camera)
{
@@ -1093,7 +1082,7 @@ s16 func_8005AD1C(Camera *camera, s16 b)
return camera->unk_14C;
}
-s32 func_8005AD40(Camera *camera, s32 a, s16 b, s16 c, s16 d, s16 e, s16 f)
+s32 func_8005AD40(Camera *camera, s32 a, s16 b, f32 c, s16 d, s16 e, s16 f)
{
if ((camera->unk_142 == 43) || (camera->unk_142 == 29))
return 0;
diff --git a/src/code/z_cheap_proc.c b/src/code/z_cheap_proc.c
new file mode 100644
index 000000000..48fd9b32a
--- /dev/null
+++ b/src/code/z_cheap_proc.c
@@ -0,0 +1,30 @@
+#include <ultra64.h>
+#include <global.h>
+
+void Draw_DListOpa(GlobalContext* globalCtx, u32 dlist)
+{
+ GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
+ Gfx* gfxArr[4];
+
+ func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 214);
+
+ func_80093D18(globalCtx->state.gfxCtx);
+ gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_cheap_proc.c", 216), G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(gfxCtx->polyOpa.p++, dlist);
+
+ func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 219);
+}
+
+void Draw_DListXlu(GlobalContext* globalCtx, u32 dlist)
+{
+ GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
+ Gfx* gfxArr[4];
+
+ func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 228);
+
+ func_80093D84(globalCtx->state.gfxCtx);
+ gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_cheap_proc.c", 230), G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(gfxCtx->polyXlu.p++, dlist);
+
+ func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_cheap_proc.c", 233);
+}