More libultra and appendGfx_player_actor (#829)

* libultra stuff

* vi stuff

* initialize.c

* bss stuff

* appendGfx_player_actor
This commit is contained in:
Ethan Roseman 2022-10-17 05:51:58 -04:00 committed by GitHub
parent 342887a94c
commit 77ee6c819b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 863 additions and 2700 deletions

View File

@ -6,7 +6,7 @@
#include "map.h"
#include "enums.h"
#include "stdlib/stdarg.h"
#include "xstdio.h"
#include "libc/xstdio.h"
f32 fabsf(f32 f);
f64 fabs(f64 f);

121
include/gcc/stdarg.h Normal file
View File

@ -0,0 +1,121 @@
#ifndef _STDARG_H
#define _STDARG_H
/* ---------------------------------------- */
/* VARARGS for MIPS/GNU CC */
/* */
/* */
/* */
/* */
/* ---------------------------------------- */
/* These macros implement varargs for GNU C--either traditional or ANSU. */
/* Define __gnuc_va_list. */
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef char * __gnuc_va_list;
#endif /* not __GNUC_VA_LIST */
/* If this is for internal libc use, don't define anything but
__gnuc_va_list. */
#if defined (_STDARG_H) || defined (_VARARGS_H)
/* In GCC version 2, we want an ellipsis at the end of the declaration
of the argument list. GCC version 1 can't parse it. */
#if __GNUC__ > 1
#define __va_ellipsis ...
#else
#define __va_ellipsis
#endif
#if __mips>=3
#define __va_rounded_size(__TYPE) \
(((sizeof (__TYPE) + 8 - 1) / 8) * 8)
#else
#define __va_rounded_size(__TYPE) \
(((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
#endif
/* Get definitions for _MIPS_SIM_ABI64 etc. */
#ifdef _MIPS_SIM
#include <sgidefs.h>
#endif
#ifdef _STDARG_H
#if defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64)
#define va_start(__AP, __LASTARG) \
(__AP = __builtin_next_arg (__LASTARG) - 64 \
+ (__builtin_args_info (2) > 8 ? 64 : __builtin_args_info(2) * 8))
#else
#define va_start(__AP, __LASTARG) \
(__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG))
#endif
#else
#define va_alist __builtin_va_alist
#if __mips>=3
/* This assumes that `long long int' is always a 64 bit type. */
#define va_dcl long long int __builtin_va_alist; __va_ellipsis
#else
#define va_dcl int __builtin_va_alist; __va_ellipsis
#endif
/* Need alternate code for _MIPS_SIM_ABI64, but don't use that symbol
because it may not be defined. */
#if defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64)
#define va_start(__AP) \
(__AP = __builtin_next_arg () - 64 \
+ (__builtin_args_info (2) > 8 ? 64 : __builtin_args_info(2) * 8))
#else
#define va_start(__AP) __AP = (char *) &__builtin_va_alist
#endif
#endif
#ifndef va_end
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
#endif
#define va_end(__AP) ((void)0)
/* We cast to void * and then to TYPE * because this avoids
a warning about increasing the alignment requirement. */
/* The __mips>=3 cases are reversed from the 32 bit cases, because the standard
32 bit calling convention left-aligns all parameters smaller than a word,
whereas the __mips>=3 calling convention does not (and hence they are
right aligned). */
#if __mips>=3
#ifdef __MIPSEB__
#define va_arg(__AP, __type) \
((__type *) (void *) (__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \
+ __va_rounded_size (__type))))[-1]
#else
#define va_arg(__AP, __type) \
((__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \
+ __va_rounded_size (__type))), \
*(__type *) (void *) (__AP - __va_rounded_size (__type)))
#endif
#else /* not __mips>=3 */
#ifdef __MIPSEB__
/* For big-endian machines. */
#define va_arg(__AP, __type) \
((__AP = (char *) ((__alignof__ (__type) > 4 \
? ((int)__AP + 8 - 1) & -8 \
: ((int)__AP + 4 - 1) & -4) \
+ __va_rounded_size (__type))), \
*(__type *) (void *) (__AP - __va_rounded_size (__type)))
#else
/* For little-endian machines. */
#define va_arg(__AP, __type) \
((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \
? ((int)__AP + 8 - 1) & -8 \
: ((int)__AP + 4 - 1) & -4) \
+ __va_rounded_size(__type))))[-1]
#endif
#endif
typedef __gnuc_va_list va_list;
#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
#endif

View File

@ -1,7 +1,8 @@
#ifndef _XSTDIO_H
#define _XSTDIO_H
#include "PR/ultratypes.h"
#include "stdlib/stdarg.h"
#include "gcc/stdlib.h"
#include "gcc/stdarg.h"
typedef struct {
/* 0x0 */ union {

View File

@ -13,6 +13,22 @@ extern s16 D_80284134[];
void update_player_actor_shadow(void);
void appendGfx_npc_actor(s32 isPartner, s32 actorIndex);
void create_status_chill_out(s32 iconID);
void enable_status_2(s32 iconID);
void enable_status_chill_out(s32 iconID);
void enable_status_debuff(s16);
void enable_status_transparent(s16);
void enable_status_icon_boost_jump(s32 iconID);
void enable_status_icon_boost_hammer(s32 iconID);
s32 func_80265CE8(u32*, s32);
void func_80266DAC(Actor* actor, s32 arg1);
void create_status_icon_boost_hammer(s32 iconID);
void create_status_icon_boost_jump(s32 iconID);
void create_status_icon_peril(s32 iconID);
void create_status_icon_danger(s32 iconID);
void set_status_icons_offset(s32 iconID, s32 offsetY, s32 arg2);
void set_status_icons_properties(s32 iconID, f32 x, f32 y, f32 z, s32 arg, s32 arg2, s32 radius, s32 offsetY);
void func_802571F0(s32, Actor*);
void func_80259494(ActorPart*);
void func_8025950C(ActorPart*, s32, Matrix4f);
@ -707,16 +723,6 @@ void update_hero_shadows(void) {
void func_80255FD8(void) {
}
void create_status_chill_out(s32 iconID);
void enable_status_2(s32 iconID);
void enable_status_chill_out(s32 iconID);
void enable_status_debuff(s16);
void enable_status_transparent(s16);
s32 func_80265CE8(u32*, s32);
void func_80266DAC(Actor* actor, s32 arg1);
void set_status_icons_offset(s32 iconID, s32 offsetY, s32 arg2);
void set_status_icons_properties(s32 iconID, f32 x, f32 y, f32 z, s32 arg, s32 arg2, s32 radius, s32 offsetY);
void appendGfx_npc_actor(s32 isPartner, s32 actorIndex) {
BattleStatus* battleStatus = &gBattleStatus;
Matrix4f mtxRotX, mtxRotY, mtxRotZ, mtxRotation;
@ -900,15 +906,15 @@ void appendGfx_npc_actor(s32 isPartner, s32 actorIndex) {
}
} while (0); // required to match
func_80266DAC(actor, 0xC);
cond2 = 1;
cond2 = TRUE;
func_80266EE8(actor, 0);
decorChanged = TRUE;
}
if (isPartner && (gPlayerData.currentPartner == PARTNER_WATT)) {
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(actor, 9);
}
cond2 = 1;
cond2 = TRUE;
}
}
if (actor->isGlowing) {
@ -918,30 +924,30 @@ void appendGfx_npc_actor(s32 isPartner, s32 actorIndex) {
decorChanged = TRUE;
}
if (actor->debuff == STATUS_POISON) {
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(actor, 6);
}
cond2 = 1;
cond2 = TRUE;
}
if (actor->debuff == STATUS_PARALYZE) {
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(actor, 7);
}
cond2 = 1;
cond2 = TRUE;
}
if (actor->debuff == STATUS_FEAR) {
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(actor, 5);
}
cond2 = 1;
cond2 = TRUE;
}
if (actor->staticStatus == STATUS_STATIC) {
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(actor, 4);
}
cond2 = 1;
cond2 = TRUE;
}
if ((cond2 == 0) && !(part->flags & ACTOR_PART_FLAG_1000000)) {
if ((!cond2) && !(part->flags & ACTOR_PART_FLAG_1000000)) {
func_80266DAC(actor, 0);
}
if ((!decorChanged) && !(part->flags & ACTOR_PART_FLAG_1000000)) {
@ -1331,7 +1337,6 @@ void update_player_actor_shadow(void) {
}
}
#ifdef NON_EQUIVALENT
void appendGfx_player_actor(void* arg0) {
BattleStatus* battleStatus = &gBattleStatus;
PlayerData* playerData = &gPlayerData;
@ -1345,26 +1350,26 @@ void appendGfx_player_actor(void* arg0) {
ActorPart* playerParts;
EffectInstance* effect;
f32 playerPosX, playerPosY, playerPosZ, playerYaw;
f32 dx, dy, dz;
s32 cond1, cond2, cond3, cond4;
u32 lastAnim;
player = gBattleStatus.playerActor;
partner = gBattleStatus.partnerActor;
player = battleStatus->playerActor;
partner = battleStatus->partnerActor;
playerParts = player->partsTable;
playerPosX = player->currentPos.x + player->headOffset.x;
playerPosY = player->currentPos.y + player->headOffset.y + player->unk_19A;
playerPosZ = player->currentPos.z + player->headOffset.z;
playerYaw = player->yaw;
playerParts->yaw = playerYaw;
playerYaw = playerParts->yaw = player->yaw;
player->disableEffect->data.disableX->pos.x = playerPosX + ((player->actorBlueprint->statusIconOffset.x + player->unk_194) * player->scalingFactor);
player->disableEffect->data.disableX->pos.y = playerPosY + ((player->actorBlueprint->statusIconOffset.y + player->unk_195) * player->scalingFactor);
player->disableEffect->data.disableX->pos.x = playerPosX +
((player->actorBlueprint->statusIconOffset.x + player->unk_194) * player->scalingFactor);
player->disableEffect->data.disableX->pos.y = playerPosY +
((player->actorBlueprint->statusIconOffset.y + player->unk_195) * player->scalingFactor);
player->disableEffect->data.disableX->pos.z = playerPosZ;
if (!(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000)) {
if (!(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)) {
if (player->disableDismissTimer != 0) {
player->disableDismissTimer--;
player->disableEffect->data.disableX->pos.y = -1000.0f;
@ -1375,8 +1380,11 @@ void appendGfx_player_actor(void* arg0) {
player->disableEffect->data.disableX->pos.y = -1000.0f;
player->disableDismissTimer = 10;
}
if (battleStatus->waterBlockTurnsLeft != 0) {
if ((gBattleStatus.flags1 & 8) || (!(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000))) {
if ((gBattleStatus.flags1 & BS_FLAGS1_8) ||
(!(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)))
{
effect = battleStatus->waterBlockEffect;
effect->data.waterBlock->pos.x = playerPosX;
effect->data.waterBlock->pos.y = playerPosY;
@ -1389,7 +1397,9 @@ void appendGfx_player_actor(void* arg0) {
}
}
if (battleStatus->cloudNineTurnsLeft != 0) {
if ((gBattleStatus.flags1 & 8) || (!(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000))) {
if ((gBattleStatus.flags1 & BS_FLAGS1_8) ||
(!(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)))
{
effect = battleStatus->cloudNineEffect;
effect->data.endingDecals->pos.x = playerPosX;
effect->data.endingDecals->pos.y = playerPosY;
@ -1402,11 +1412,13 @@ void appendGfx_player_actor(void* arg0) {
effect->data.endingDecals->pos.z = playerPosZ;
}
}
if (player->debuff == 7) {
if (player->debuff == STATUS_FROZEN) {
effect = player->icePillarEffect;
if (player->icePillarEffect != NULL) {
if ((gBattleStatus.flags1 & 8) || (!(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000))) {
effect->data.icePillar->pos.x = (f32) (playerPosX - 8.0f);
if ((gBattleStatus.flags1 & BS_FLAGS1_8) ||
(!(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)))
{
effect->data.icePillar->pos.x = playerPosX - 8.0f;
effect->data.icePillar->pos.y = playerPosY;
effect->data.icePillar->pos.z = playerPosZ;
effect->data.icePillar->unk_20 = player->size.y / 24.0;
@ -1415,6 +1427,10 @@ void appendGfx_player_actor(void* arg0) {
effect->data.icePillar->pos.y = -1000.0f;
effect->data.icePillar->pos.z = 0.0f;
}
} else {
effect->data.icePillar->pos.x = 0.0f;
effect->data.icePillar->pos.y = -1000.0f;
effect->data.icePillar->pos.z = 0.0f;
}
} else {
effect = player->icePillarEffect;
@ -1423,20 +1439,22 @@ void appendGfx_player_actor(void* arg0) {
player->icePillarEffect = NULL;
}
}
if (!(gBattleStatus.flags2 & 0x10000) && !(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000)) {
if (!(gBattleStatus.flags2 & BS_FLAGS2_10000) && !(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)) {
battleStatus->buffEffect->data.partnerBuff->unk_02 = 1;
} else {
battleStatus->buffEffect->data.partnerBuff->unk_02 = 0;
}
do {
if (player->debuff == 0xA) {
player->scalingFactor += ((0.4 - player->scalingFactor) / 6.0);
if (player->debuff == STATUS_SHRINK) {
player->scalingFactor += (0.4 - player->scalingFactor) / 6.0;
} else {
player->scalingFactor += ((1.0 - player->scalingFactor) / 6.0);
player->scalingFactor += (1.0 - player->scalingFactor) / 6.0;
}
} while (0); // required to match
if (player->flags & 0x08000000) {
if (player->flags & ACTOR_FLAG_8000000) {
if (battleStatus->hammerCharge > 0) {
create_status_icon_boost_hammer(player->hudElementDataIndex);
remove_status_icon_boost_jump(player->hudElementDataIndex);
@ -1454,15 +1472,17 @@ void appendGfx_player_actor(void* arg0) {
enable_status_icon_boost_hammer(player->hudElementDataIndex);
}
if ((player->flags & 0x08000000) && !(gBattleStatus.flags2 & 0x40)) {
if ((player->flags & ACTOR_FLAG_8000000) && !(gBattleStatus.flags2 & BS_FLAGS2_40)) {
if (playerData->curHP > 1) {
remove_status_icon_peril(player->hudElementDataIndex);
if (playerData->curHP > 5) {
remove_status_icon_danger(player->hudElementDataIndex);
} else {
create_status_icon_danger(player->hudElementDataIndex);
remove_status_icon_peril(player->hudElementDataIndex);
}
do {
if (playerData->curHP <= 5) {
create_status_icon_danger(player->hudElementDataIndex);
remove_status_icon_peril(player->hudElementDataIndex);
} else {
remove_status_icon_danger(player->hudElementDataIndex);
}
} while (0); // required to match
} else {
create_status_icon_peril(player->hudElementDataIndex);
remove_status_icon_danger(player->hudElementDataIndex);
@ -1473,9 +1493,16 @@ void appendGfx_player_actor(void* arg0) {
}
if (player->transparentStatus == 0xE) {
playerParts->flags |= 0x100;
playerParts->flags |= ACTOR_PART_FLAG_100;
if (FALSE) { // TODO required to match - also whyyyyyy compiler, whyyyyy
back:
playerParts->currentAnimation = func_80265D44(8);
create_status_debuff(player->hudElementDataIndex, 8);
goto end;
}
} else {
playerParts->flags &= ~0x100;
playerParts->flags &= ~ACTOR_PART_FLAG_100;
}
do {
@ -1486,10 +1513,20 @@ void appendGfx_player_actor(void* arg0) {
lastAnim = playerParts->currentAnimation;
} while (0); // required to match
if (((((gBattleStatus.flags2 & 0xA) == 2) && (partner != NULL)) || (gBattleStatus.outtaSightActive > 0)) && !(player->flags & 0x20000000) && ((partner == NULL) || !(partner->flags & 0x200000))) {
if (!(gBattleStatus.flags2 & 0x100000)) {
if ((player->debuff != 3) && (player->debuff != 5) && (player->debuff != 7) && (player->debuff != 8)) {
if ((player->transparentStatus != 0xE) && (player->stoneStatus != 0xC) && ((gBattleStatus.outtaSightActive > 0) || (gBattleStatus.flags2 & 2))) {
if (((((gBattleStatus.flags2 & (BS_FLAGS2_8 | BS_FLAGS2_2)) == BS_FLAGS2_2) && (partner != NULL)) || (battleStatus->outtaSightActive > 0)) &&
!(player->flags & ACTOR_FLAG_20000000) &&
((partner == NULL) || !(partner->flags & ACTOR_FLAG_NO_ATTACK)))
{
if (!(gBattleStatus.flags2 & BS_FLAGS2_100000)) {
if ((player->debuff != STATUS_FEAR) &&
(player->debuff != STATUS_PARALYZE) &&
(player->debuff != STATUS_FROZEN) &&
(player->debuff != STATUS_STOP))
{
if ((player->transparentStatus != STATUS_TRANSPARENT) &&
(player->stoneStatus != STATUS_STONE) &&
((battleStatus->outtaSightActive > 0) || (gBattleStatus.flags2 & BS_FLAGS2_2)))
{
if (is_ability_active(0x15)) {
playerParts->currentAnimation = func_80265D44(0x13);
} else if (player->debuff == 6) {
@ -1499,12 +1536,12 @@ void appendGfx_player_actor(void* arg0) {
} else {
playerParts->currentAnimation = func_80265D44(0x12);
}
spr_update_player_sprite(0, (s32) playerParts->currentAnimation, playerParts->animationRate);
spr_update_player_sprite(0, playerParts->currentAnimation, playerParts->animationRate);
cond1 = TRUE;
}
}
if (player->debuff != 9) {
if (player->debuff != STATUS_POISON) {
func_80266DAC(player, 0xC);
} else {
func_80266DAC(player, 0xD);
@ -1515,79 +1552,80 @@ void appendGfx_player_actor(void* arg0) {
cond3 = TRUE;
}
}
if (player->stoneStatus == 0xC) {
if (player->stoneStatus == STATUS_STONE) {
playerParts->currentAnimation = func_80265D44(0xC);
spr_update_player_sprite(0, playerParts->currentAnimation, playerParts->animationRate);
cond1 = TRUE;
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(player, 0);
}
func_80266EE8(player, 0);
cond2 = 1;
cond2 = TRUE;
enable_status_debuff(player->hudElementDataIndex);
cond3 = 1;
cond3 = TRUE;
enable_status_2(player->hudElementDataIndex);
cond4 = 1;
cond4 = TRUE;
enable_status_transparent(player->hudElementDataIndex);
enable_status_chill_out(player->hudElementDataIndex);
}
if ((player->flags & 0x04000000) && (cond1 == 0)) {
if ((player->flags & ACTOR_FLAG_4000000) && !cond1) {
s32 temp = playerParts->currentAnimation;
if (temp == func_80265D44(0xC)) {
playerParts->currentAnimation = func_80265D44(1);
}
}
if (is_ability_active(0x15) != 0) {
if (cond2 == 0) {
if (is_ability_active(ABILITY_BERSERKER)) {
if (!cond2) {
func_80266DAC(player, 8);
}
cond2 = 1;
cond2 = TRUE;
}
if (player->debuff == 9) {
if (cond2 == 0) {
if (player->debuff == STATUS_POISON) {
if (!cond2) {
func_80266DAC(player, 6);
}
cond2 = 1;
cond2 = TRUE;
}
if (player->debuff == 5) {
if (cond2 == 0) {
if (player->debuff == STATUS_PARALYZE) {
if (!cond2) {
func_80266DAC(player, 7);
}
cond2 = 1;
cond2 = TRUE;
}
if (player->staticStatus == 0xB) {
if (cond2 == 0) {
if (player->staticStatus == STATUS_STATIC) {
if (!cond2) {
func_80266DAC(player, 4);
}
cond2 = 1;
cond2 = TRUE;
}
if (battleStatus->turboChargeTurnsLeft != 0) {
if (cond3 == 0) {
if (!cond3) {
func_80266EE8(player, 0xB);
}
cond3 = 1;
cond3 = TRUE;
}
if (is_ability_active(0x13) != 0) {
if (cond2 == 0) {
if (is_ability_active(ABILITY_ZAP_TAP)) {
if (!cond2) {
func_80266DAC(player, 4);
}
cond2 = 1;
cond2 = TRUE;
}
if (cond2 == 0) {
if (!cond2) {
func_80266DAC(player, 0);
}
if (cond3 == 0) {
if (!cond3) {
func_80266EE8(player, 0);
}
if (player->flags & 0x04000000) {
if (player->flags & ACTOR_FLAG_4000000) {
if (battleStatus->hustleTurns != 0) {
playerParts->currentAnimation = func_80265D44(0x19);
cond1 = 1;
} else if (cond1 == 0) {
cond1 = TRUE;
} else if (!cond1) {
s32 temp = func_80265D44(1);
do {
if (temp == func_80265D44(0x19)) {
@ -1597,87 +1635,88 @@ void appendGfx_player_actor(void* arg0) {
}
do {
if (player->debuff == 7) {
if (player->debuff == STATUS_FROZEN) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(7);
cond1 = 1;
cond1 = TRUE;
}
} else if (player->debuff != STATUS_SHRINK) {
if (player->debuff == 9) {
if (player->debuff == STATUS_POISON) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(9);
cond1 = 1;
cond1 = TRUE;
}
} else if (player->debuff == 4) {
} else if (player->debuff == STATUS_DIZZY) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(4);
cond1 = 1;
cond1 = TRUE;
}
} else if (player->debuff == 6) {
} else if (player->debuff == STATUS_SLEEP) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(6);
cond1 = 1;
cond1 = TRUE;
}
} else if (player->debuff == 5) {
} else if (player->debuff == STATUS_PARALYZE) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(5);
cond1 = 1;
cond1 = TRUE;
}
} else {
if (player_team_is_ability_active(player, 0x15) != 0) {
if (cond1 == 0) {
if (player_team_is_ability_active(player, ABILITY_BERSERKER)) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(0x10);
cond1 = 1;
cond1 = TRUE;
}
}
}
}
if (is_ability_active(0x13) != 0) {
if (cond1 == 0) {
if (is_ability_active(ABILITY_ZAP_TAP)) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(0xB);
cond1 = 1;
cond1 = TRUE;
}
player->staticStatus = 0xB;
player->staticDuration = 0x7F;
} else if ((player->staticStatus == (s8) 0xB) && (cond1 == 0)) {
player->staticStatus = STATUS_STATIC;
player->staticDuration = 127;
} else if ((player->staticStatus == STATUS_STATIC) && !cond1) {
playerParts->currentAnimation = func_80265D44(0xB);
cond1 = 1;
cond1 = TRUE;
}
if ((player->transparentStatus == 0xE) || (playerParts->flags & 0x100)) {
if (cond1 == 0) {
if ((player->transparentStatus == STATUS_TRANSPARENT) || (playerParts->flags & ACTOR_PART_FLAG_100)) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(0xE);
cond1 = 1;
cond1 = TRUE;
}
create_status_transparent((s32) player->hudElementDataIndex, 0xE);
create_status_transparent(player->hudElementDataIndex, 0xE);
}
if (cond1 == 0) {
if (!cond1) {
playerParts->currentAnimation = func_80265D44(1);
}
} while(0); // needed to match
}
if (!(gBattleStatus.flags1 & 4) && (player->flags & 0x08000000)) {
if (cond4 == 0) {
if (!(gBattleStatus.flags1 & BS_FLAGS1_4) && (player->flags & ACTOR_FLAG_8000000)) {
if (!cond4) {
do {
if (player->debuff == 0x9) {
if (player->debuff == STATUS_POISON) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
} else if (player->debuff == 6) {
} else if (player->debuff == STATUS_SLEEP) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
} else if (player->debuff == 5) {
} else if (player->debuff == STATUS_PARALYZE) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
} else if (player->debuff == 4) {
} else if (player->debuff == STATUS_DIZZY) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
} else if (player->debuff == 10) {
} else if (player->debuff == STATUS_SHRINK) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
} else if (player->debuff == 7) {
} else if (player->debuff == STATUS_FROZEN) {
create_status_debuff(player->hudElementDataIndex, player->debuff);
}
} while (0); // required to match
if ((cond4 == 0) && ((is_ability_active(0x13) != 0) || (player->staticStatus == 0xB))) {
create_status_static((s32) player->hudElementDataIndex, 0xB);
if (!cond4 && (is_ability_active(ABILITY_ZAP_TAP) || (player->staticStatus == STATUS_STATIC))) {
create_status_static(player->hudElementDataIndex, 0xB);
}
}
if ((player->transparentStatus == 0xE) || (playerParts->flags & 0x100)) {
create_status_transparent((s32) player->hudElementDataIndex, 0xE);
if ((player->transparentStatus == STATUS_TRANSPARENT) || (playerParts->flags & ACTOR_PART_FLAG_100)) {
create_status_transparent(player->hudElementDataIndex, 0xE);
}
} else {
enable_status_debuff(player->hudElementDataIndex);
@ -1686,18 +1725,18 @@ void appendGfx_player_actor(void* arg0) {
enable_status_chill_out(player->hudElementDataIndex);
}
if (player->debuff != 8) {
if (cond1 == 0) {
if (player->debuff != STATUS_STOP) {
if (!cond1) {
s32 temp = playerParts->currentAnimation;
if (temp == func_80265D44(8)) {
playerParts->currentAnimation = func_80265D44(1);
}
}
} else {
playerParts->currentAnimation = func_80265D44(8);
create_status_debuff(player->hudElementDataIndex, 8);
goto back;
}
end:
set_status_icons_properties(player->hudElementDataIndex,
playerPosX, playerPosY, playerPosZ,
player->actorBlueprint->statusIconOffset.x * player->scalingFactor,
@ -1708,13 +1747,13 @@ void appendGfx_player_actor(void* arg0) {
player->size.y * player->scalingFactor,
player->size.x * player->scalingFactor);
dx = playerPosX + playerParts->unkOffset[0];
dy = playerPosY + playerParts->unkOffset[1];
dz = playerPosZ;
playerParts->currentPos.x = dx;
playerParts->currentPos.y = dy;
playerParts->currentPos.z = dz;
guTranslateF(mtxTranslate, dx, dy, dz);
playerPosX += playerParts->unkOffset[0];
playerPosY += playerParts->unkOffset[1];
playerParts->currentPos.x = playerPosX;
playerParts->currentPos.y = playerPosY;
playerParts->currentPos.z = playerPosZ;
guTranslateF(mtxTranslate, playerPosX, playerPosY, playerPosZ);
guTranslateF(mtxPivotOn,
-player->rotationPivotOffset.x * player->scalingFactor,
@ -1749,9 +1788,6 @@ void appendGfx_player_actor(void* arg0) {
func_802591EC(0, playerParts, clamp_angle(playerYaw + 180.0f), mtxTransform, 0);
_add_part_decoration(playerParts);
}
#else
INCLUDE_ASM(void, "182B30", appendGfx_player_actor);
#endif
void func_80258E14(void* arg0) {
Matrix4f mtxRotX, mtxRotY, mtxRotZ, mtxRotation, mtxScale;
@ -1924,7 +1960,7 @@ void func_8025950C(ActorPart* part, s32 yaw, Matrix4f mtx) {
if (decor->unk_768 != 0) {
decor->spritePalettes = spr_get_npc_palettes(part->currentAnimation >> 0x10);
decor->numSpritePalettes = 0;
while ((s32) decor->spritePalettes[decor->numSpritePalettes] != -1) {
while (decor->spritePalettes[decor->numSpritePalettes] != (PAL_PTR) -1) {
decor->numSpritePalettes++;
}
@ -1994,7 +2030,7 @@ void func_802597B0(ActorPart* part, s32 yaw, Matrix4f mtx) {
decor->spritePalettes = spr_get_player_palettes(part->currentAnimation >> 16);
decor->numSpritePalettes = 0;
while ((s32) decor->spritePalettes[decor->numSpritePalettes] != -1) {
while (decor->spritePalettes[decor->numSpritePalettes] != (PAL_PTR) -1) {
decor->numSpritePalettes++;
}
@ -3002,7 +3038,6 @@ void func_8025BAA0(s32 arg0, ActorPart* part, s32 yaw, s32 arg3, Matrix4f mtx, s
}
void func_8025C120(s32 arg0, ActorPart* part, s32 yaw, Matrix4f mtx, s32 arg4) {
DecorationTable* decor = part->decorationTable;
PAL_PTR color1;
PAL_PTR color2;
@ -3016,13 +3051,13 @@ void func_8025C120(s32 arg0, ActorPart* part, s32 yaw, Matrix4f mtx, s32 arg4) {
if (arg0 == 0) {
decor->spritePalettes = spr_get_player_palettes(part->currentAnimation >> 16);
decor->numSpritePalettes = 0;
while ((s32) decor->spritePalettes[decor->numSpritePalettes] != -1) {
while (decor->spritePalettes[decor->numSpritePalettes] != (PAL_PTR) -1) {
decor->numSpritePalettes++;
}
} else {
decor->spritePalettes = spr_get_npc_palettes(part->currentAnimation >> 16);
decor->numSpritePalettes = 0;
while ((s32) decor->spritePalettes[decor->numSpritePalettes] != -1) {
while (decor->spritePalettes[decor->numSpritePalettes] != (PAL_PTR) -1) {
decor->numSpritePalettes++;
}
decor->spriteColorVariations = spr_get_npc_color_variations(part->currentAnimation >> 16);

View File

@ -25,14 +25,12 @@ extern s16 D_80073E08;
extern s16 D_80073E0A;
extern s32 D_80073E10[];
extern u16* D_8009A680;
extern OSViMode _osViModeNtscLan1;
extern OSViMode _osViModeMPalLan1;
void boot_main(void) {
#ifdef VERSION_JP
if (osTvType == OS_TV_NTSC) {
nuGfxDisplayOff();
osViSetMode(&_osViModeNtscLan1);
osViSetMode(&osViModeNtscLan1);
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF | OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON);
nuGfxDisplayOff();
} else {
@ -40,10 +38,10 @@ void boot_main(void) {
}
#else // VERSION_JP
if (osTvType == OS_TV_NTSC) {
osViSetMode(&_osViModeNtscLan1);
osViSetMode(&osViModeNtscLan1);
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF | OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON);
} else if (osTvType == OS_TV_MPAL) {
osViSetMode(&_osViModeMPalLan1);
osViSetMode(&osViModeMpalLan1);
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF | OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON);
} else {
PANIC();

View File

@ -1,9 +1,9 @@
#include "PR/controller.h"
#include "macros.h"
extern u8 __osPfsInodeCacheBank;
extern int __osPfsInodeCacheChannel;
extern __OSInode __osPfsInodeCache;
s32 __osPfsInodeCacheChannel = -1;
u8 __osPfsInodeCacheBank = 250;
u16 __osSumcalc(u8 *ptr, int length) {
int i;

View File

@ -2,7 +2,7 @@
#include "PR/osint.h"
#include "PR/siint.h"
extern int __osPfsLastChannel;
s32 __osPfsLastChannel = -1;
s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) {
s32 ret;

View File

@ -3,8 +3,6 @@
f32 sin_rad(f32 x);
f32 cos_rad(f32 x);
extern float D_800958C0;
void guRotateF(float mf[4][4], float a, float x, float y, float z) {
static float dtor = 3.1415926 / 180.0;
float sine;
@ -13,7 +11,7 @@ void guRotateF(float mf[4][4], float a, float x, float y, float z) {
float xs, ys, zs;
guNormalize(&x, &y, &z);
a *= D_800958C0; // change to dtor later?
a *= dtor;
sine = sin_rad(a);
cosine = cos_rad(a);
t = 1.0f - cosine;

View File

@ -1,9 +1,108 @@
#include "ultra64.h"
#include "include_asm.h"
#include "PR/os_internal.h"
#include "PR/rcp.h"
INCLUDE_ASM(s32, "os/initialize", __createSpeedParam)
typedef struct
{
/* 0x0 */ unsigned int inst1;
/* 0x4 */ unsigned int inst2;
/* 0x8 */ unsigned int inst3;
/* 0xC */ unsigned int inst4;
} __osExceptionVector;
extern __osExceptionVector __osExceptionPreamble;
INCLUDE_ASM(void, "os/initialize", __osInitialize_common, void);
extern OSPiHandle __Dom1SpeedParam;
extern OSPiHandle __Dom2SpeedParam;
OSTime osClockRate = OS_CLOCK_RATE;
s32 osViClock = VI_NTSC_CLOCK;
u32 __osShutdown = 0;
u32 __OSGlobalIntMask = OS_IM_ALL;
#ifdef _FINALROM
extern u32 __osFinalrom;
#else
void* __printfunc = NULL;
u32 __kmc_pt_mode;
#endif
s32 paddingmeowplol[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
void __createSpeedParam(void) {
__Dom1SpeedParam.type = DEVICE_TYPE_INIT;
__Dom1SpeedParam.latency = IO_READ(PI_BSD_DOM1_LAT_REG);
__Dom1SpeedParam.pulse = IO_READ(PI_BSD_DOM1_PWD_REG);
__Dom1SpeedParam.pageSize = IO_READ(PI_BSD_DOM1_PGS_REG);
__Dom1SpeedParam.relDuration = IO_READ(PI_BSD_DOM1_RLS_REG);
__Dom2SpeedParam.type = DEVICE_TYPE_INIT;
__Dom2SpeedParam.latency = IO_READ(PI_BSD_DOM2_LAT_REG);
__Dom2SpeedParam.pulse = IO_READ(PI_BSD_DOM2_PWD_REG);
__Dom2SpeedParam.pageSize = IO_READ(PI_BSD_DOM2_PGS_REG);
__Dom2SpeedParam.relDuration = IO_READ(PI_BSD_DOM2_RLS_REG);
}
void __osInitialize_common() {
u32 pifdata;
#ifdef _FINALROM
__osFinalrom = TRUE;
#endif
__osSetSR(__osGetSR() | SR_CU1); //enable fpu
__osSetFpcCsr(FPCSR_FS | FPCSR_EV); //flush denorm to zero, enable invalid operation
__osSetWatchLo(0x4900000);
while (__osSiRawReadIo(PIF_RAM_END - 3, &pifdata)) { //last byte of joychannel ram
;
}
while (__osSiRawWriteIo(PIF_RAM_END - 3, pifdata | 8)) {
; //todo: magic contant
}
*(__osExceptionVector *)UT_VEC = __osExceptionPreamble;
*(__osExceptionVector *)XUT_VEC = __osExceptionPreamble;
*(__osExceptionVector *)ECC_VEC = __osExceptionPreamble;
*(__osExceptionVector *)E_VEC = __osExceptionPreamble;
osWritebackDCache((void *)UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector));
osInvalICache((void *)UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector));
__createSpeedParam();
osUnmapTLBAll();
osMapTLBRdb();
osClockRate = osClockRate * 3 / 4;
if (osResetType == 0 ) { // cold reset
bzero(osAppNMIBuffer, OS_APP_NMI_BUFSIZE);
}
if (osTvType == OS_TV_PAL) {
osViClock = VI_PAL_CLOCK;
} else if (osTvType == OS_TV_MPAL) {
osViClock = VI_MPAL_CLOCK;
} else {
osViClock = VI_NTSC_CLOCK;
}
// Wait until there are no RCP interrupts
if (__osGetCause() & CAUSE_IP5) {
while (TRUE) {
;
}
}
IO_WRITE(AI_CONTROL_REG, AI_CONTROL_DMA_ON);
IO_WRITE(AI_DACRATE_REG, AI_MAX_DAC_RATE - 1);
IO_WRITE(AI_BITRATE_REG, AI_MAX_BIT_RATE - 1);
}
void __osInitialize_autodetect(void) {
#ifndef _FINALROM
if (__checkHardware_msp()) {
__osInitialize_msp();
} else if (__checkHardware_kmc()) {
__osInitialize_kmc();
} else if (__checkHardware_isv()) {
__osInitialize_isv();
} else {
__osInitialize_emu();
}
#endif
}

View File

@ -24,10 +24,9 @@ NUCallBackList nuContCallBack = {
0,
};
// BSS
extern OSMesg nuContWaitMesgBuf;
extern OSMesg nuContDataMutexBuf;
extern OSMesgQueue nuContDataMutexQ;
OSMesg nuContWaitMesgBuf;
OSMesg nuContDataMutexBuf;
OSMesgQueue nuContDataMutexQ;
u8 nuContMgrInit(void) {
s32 i;

View File

@ -1,5 +1,5 @@
#include "ultra64.h"
#include "xstdio.h"
#include "libc/xstdio.h"
static char *proutSprintf(char *dst, const char *src, size_t count);

View File

@ -1,4 +1,49 @@
#include "ultra64.h"
#include "include_asm.h"
#include "macros.h"
#include "PR/os_internal.h"
#include "PR/R4300.h"
#include "PR/rcp.h"
#include "PR/viint.h"
INCLUDE_ASM(s32, "os/vi", __osViInit);
static __OSViContext vi[2] ALIGNED(8) = {{0}, {0}};
__OSViContext *__osViCurr = &vi[0];
__OSViContext *__osViNext = &vi[1];
s32 meowp12345[] = {0, 0};
OSViMode osViModePalLan1 = {
0x10,
{ 0x0000311E, 0x00000140, 0x04541E3A, 0x00000271, 0x00170C69, 0x0C6F0C6D, 0x00800300, 0x00000200, 0x00000000 },
{
{ 0x00000280, 0x00000400, 0x005F0239, 0x0009026B, 0x00000002 },
{ 0x00000280, 0x00000400, 0x005F0239, 0x0009026B, 0x00000002 }
}
};
void __osViInit(void) {
bzero(vi, sizeof(vi));
__osViCurr = &vi[0];
__osViNext = &vi[1];
__osViNext->retraceCount = 1;
__osViCurr->retraceCount = 1;
__osViNext->framep = (void*)K0BASE;
__osViCurr->framep = (void*)K0BASE;
if (osTvType == OS_TV_TYPE_PAL) {
__osViNext->modep = &osViModePalLan1;
} else if (osTvType == OS_TV_TYPE_MPAL) {
__osViNext->modep = &osViModeMpalLan1;
} else {
__osViNext->modep = &osViModeNtscLan1;
}
__osViNext->state = VI_STATE_BLACK;
__osViNext->control = __osViNext->modep->comRegs.ctrl;
while (IO_READ(VI_CURRENT_REG) > 10) { //wait for vsync?
}
IO_WRITE(VI_CONTROL_REG, 0); //pixel size blank (no data, no sync)
__osViSwapContext();
}

View File

@ -1740,3 +1740,9 @@ OSViMode osViModeTable[56] = {
}
}
};
// TODO move into separate files and define properly
OSViMode osViModeNtscLan1 = { 0x02, { 0x0000311E, 0x00000140, 0x03E52239, 0x0000020D, 0x00000C15, 0x0C150C15, 0x006C02EC, 0x00000200, 0x00000000 }, { { 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 }, { 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 } } };
OSViMode osViModeMpalLan1 = { 0x1E, { 0x0000311E, 0x00000140, 0x04651E39, 0x0000020D, 0x00040C11, 0x0C190C1A, 0x006C02EC, 0x00000200, 0x00000000 }, { { 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 }, { 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 } } };

View File

@ -1,8 +1,305 @@
#include "ultra64.h"
#include "include_asm.h"
#include "gcc/stdlib.h"
#include "gcc/string.h"
#include "libc/xstdio.h"
INCLUDE_ASM(s32, "os/xldtob", _Ldtob);
#define BUFF_LEN 0x20
INCLUDE_ASM(s32, "os/xldtob", _Ldunscale);
static s16 _Ldunscale(s16* pex, _Pft* px);
static void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp);
INCLUDE_ASM(s32, "os/xldtob", _Genld);
static const double pows[] = {10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L};
// float properties
#define _D0 0
#define _DBIAS 0x3ff
#define _DLONG 1
#define _DOFF 4
#define _FBIAS 0x7e
#define _FOFF 7
#define _FRND 1
#define _LBIAS 0x3ffe
#define _LOFF 15
// integer properties
#define _C2 1
#define _CSIGN 1
#define _ILONG 0
#define _MBMAX 8
#define NAN 2
#define INF 1
#define FINITE -1
#define _DFRAC ((1 << _DOFF) - 1)
#define _DMASK (0x7fff & ~_DFRAC)
#define _DMAX ((1 << (15 - _DOFF)) - 1)
#define _DNAN (0x8000 | _DMAX << _DOFF | 1 << (_DOFF - 1))
#define _DSIGN 0x8000
#define _D1 1 // big-endian order
#define _D2 2
#define _D3 3
#define ALIGN(s, align) (((u32)(s) + ((align)-1)) & ~((align)-1))
void _Ldtob(_Pft* px, char code) {
char buff[BUFF_LEN];
char *p;
f64 ldval;
s16 err;
s16 nsig;
s16 xexp;
// char unused[0x4];
p = buff;
ldval = px->v.ld;
if (px->prec < 0) {
px->prec = 6;
} else if (px->prec == 0 && (code == 'g' || code == 'G')) {
px->prec = 1;
}
err = _Ldunscale(&xexp, px);
if (err > 0) {
memcpy(px->s, err == 2 ? "NaN" : "Inf", px->n1 = 3);
return;
} else if (err == 0) {
nsig = 0;
xexp = 0;
} else {
int i;
int n;
if (ldval < 0) {
ldval = -ldval;
}
// what
if ((xexp = xexp * 30103 / 100000 - 4) < 0) {
n = ALIGN(-xexp, 4), xexp = -n;
for (i = 0; n > 0; n >>= 1, i++) {
if (n & 1) {
ldval *= pows[i];
}
}
} else if (xexp > 0) {
f64 factor = 1;
xexp &= ~3;
for (n = xexp, i = 0; n > 0; n >>= 1, i++) {
if (n & 1) {
factor *= pows[i];
}
}
ldval /= factor;
}
{
int gen = px->prec + ((code == 'f') ? 10 + xexp : 6);
if (gen > 0x13) {
gen = 0x13;
}
for (*p++ = '0'; gen > 0 && 0 < ldval; p += 8) {
int j;
int lo = ldval;
if ((gen -= 8) > 0) {
ldval = (ldval - lo) * 1e8;
}
for (p += 8, j = 8; lo > 0 && --j >= 0;) {
ldiv_t qr = ldiv(lo, 10);
*--p = qr.rem + '0', lo = qr.quot;
}
while (--j >= 0) {
*--p = '0';
}
}
gen = p - &buff[1];
for (p = &buff[1], xexp += 7; *p == '0'; p++) {
--gen, --xexp;
}
nsig = px->prec + ((code == 'f') ? xexp + 1 : ((code == 'e' || code == 'E') ? 1 : 0));
if (gen < nsig) {
nsig = gen;
}
if (nsig > 0) {
char drop = nsig < gen && '5' <= p[nsig] ? '9' : '0';
int n;
for (n = nsig; p[--n] == drop;) {
--nsig;
}
if (drop == '9') {
++p[n];
}
if (n < 0) {
--p, ++nsig, ++xexp;
}
}
}
}
_Genld(px, code, p, nsig, xexp);
}
s16 _Ldunscale(s16* pex, _Pft* px) {
u16* ps = (u16*) px;
s16 xchar = (ps[_D0] & _DMASK) >> _DOFF;
if (xchar == _DMAX) {
*pex = 0;
return (ps[_D0] & _DFRAC) || ps[_D1] || ps[_D2] || ps[_D3] ? 2 : 1;
} else if (xchar > 0) {
ps[_D0] = (ps[_D0] & ~_DMASK) | 0x3FF0;
*pex = xchar - 0x3FE;
return -1;
} else if (xchar < 0) {
return 2;
} else {
*pex = 0;
return 0;
}
}
void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
const unsigned char point = '.';
if (nsig <= 0) {
nsig = 1, p = "0"; // memes
}
if (code == 'f' || (code == 'g' || code == 'G') && xexp >= -4 && xexp < px->prec) {
xexp += 1;
if (code != 'f') {
if (((px->flags & 8) == 0) && nsig < px->prec) {
px->prec = nsig;
}
px->prec -= xexp;
if (px->prec < 0) {
px->prec = 0;
}
}
if (xexp <= 0) {
px->s[px->n1++] = '0';
if (px->prec > 0 || (px->flags & 8)) {
px->s[px->n1++] = point;
}
if (px->prec < -xexp) {
xexp = -px->prec;
}
px->nz1 = -xexp;
px->prec += xexp;
if (px->prec < nsig) {
nsig = px->prec;
}
memcpy(&px->s[px->n1], p, px->n2 = nsig); // , memes (this one is insane)
px->nz2 = px->prec - nsig;
} else if (nsig < xexp) {
memcpy(&px->s[px->n1], p, nsig);
px->n1 += nsig;
px->nz1 = xexp - nsig;
if (px->prec > 0 || (px->flags & 8)) {
px->s[px->n1] = point;
px->n2 += 1;
}
px->nz2 = px->prec;
} else {
memcpy(&px->s[px->n1], p, xexp);
px->n1 += xexp;
nsig -= xexp;
if (px->prec > 0 || (px->flags & 8)) {
px->s[px->n1++] = point;
}
if (px->prec < nsig) {
nsig = px->prec;
}
memcpy(&px->s[px->n1], &p[xexp], nsig);
px->n1 += nsig;
px->nz1 = px->prec - nsig;
}
} else {
if (code == 'g' || code == 'G') {
if (nsig < px->prec) {
px->prec = nsig;
}
if (--px->prec < 0) {
px->prec = 0;
}
if (code == 'g') {
code = 'e';
} else {
code = 'E';
}
}
px->s[px->n1++] = *p++;
if (px->prec > 0 || (px->flags & 8)) {
px->s[px->n1++] = point;
}
if (px->prec > 0) {
if (px->prec < --nsig) {
nsig = px->prec;
}
memcpy(&px->s[px->n1], p, nsig);
px->n1 += nsig;
px->nz1 = px->prec - nsig;
}
p = &px->s[px->n1];
*p++ = code;
if (xexp >= 0) {
*p++ = '+';
} else {
*p++ = '-';
xexp = -xexp;
}
if (xexp >= 100) {
if (xexp >= 1000) {
*p++ = (xexp / 1000) + '0', xexp %= 1000; // , memes
}
*p++ = (xexp / 100) + '0', xexp %= 100; // , memes
}
*p++ = (xexp / 10) + '0', xexp %= 10; // , memes
*p++ = xexp + '0';
px->n2 = (size_t)p - ((size_t)px->s + px->n1);
}
if ((px->flags & 0x14) == 0x10) {
s32 n = px->n0 + px->n1 + px->nz1 + px->n2 + px->nz2;
if (n < px->width) {
px->nz0 = px->width - n;
}
}
}

View File

@ -1,4 +1,59 @@
#include "ultra64.h"
#include "include_asm.h"
#include "gcc/stdlib.h"
#include "gcc/string.h"
#include "libc/xstdio.h"
INCLUDE_ASM(s32, "os/xlitob", _Litob);
#define BUFF_LEN 0x18
static char ldigs[] = "0123456789abcdef";
static char udigs[] = "0123456789ABCDEF";
void _Litob(_Pft *args, char type) {
char buff[BUFF_LEN];
const char *digs;
s32 base;
s32 i;
unsigned long long ullval;
if (type == 'X') {
digs = udigs;
} else {
digs = ldigs;
}
base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16);
i = BUFF_LEN;
ullval = args->v.ll;
if ((type == 'd' || type == 'i') && args->v.ll < 0) {
ullval = -ullval;
}
if (ullval != 0 || args->prec != 0) {
buff[--i] = digs[ullval % base];
}
args->v.ll = ullval / base;
while (args->v.ll > 0 && i > 0) {
lldiv_t qr = lldiv(args->v.ll, base);
args->v.ll = qr.quot;
buff[--i] = digs[qr.rem];
}
args->n1 = BUFF_LEN - i;
memcpy(args->s, buff + i, args->n1);
if (args->n1 < args->prec) {
args->nz0 = args->prec - args->n1;
}
if (args->prec < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) {
i = args->width - args->n0 - args->nz0 - args->n1;
if (i > 0) {
args->nz0 += i;
}
}
}

View File

@ -1,5 +1,5 @@
#include "stdlib/stdarg.h"
#include "xstdio.h"
#include "libc/xstdio.h"
#include "gcc/string.h"
#define isdigit(x) ((x >= '0' && x <= '9'))
@ -31,13 +31,8 @@
else \
return x.nchar; \
}
char spaces[] = " ";
char zeroes[] = "00000000000000000000000000000000";
// INCLUDE_ASM(s32, "os/3FEA0", _Printf);
// INCLUDE_ASM(s32, "os/3FEA0", _Putfld);
static char spaces[] = " ";
static char zeroes[] = "00000000000000000000000000000000";
static void _Putfld(_Pft *pf, va_list *pap, char code, char *ac);
@ -49,7 +44,7 @@ int _Printf(outfun prout, char *arg, const char *fmt, va_list args) {
static const char fchar[] = {' ', '+', '-', '#', '0', '\0'};
static const int fbit[] = {FLAGS_SPACE, FLAGS_PLUS, FLAGS_MINUS, FLAGS_HASH, FLAGS_ZERO, 0};
char ac[32];
x.nchar = 0;
for (;;) {
@ -58,15 +53,15 @@ int _Printf(outfun prout, char *arg, const char *fmt, va_list args) {
for (c = *s; c != 0 && c != '%';) {
c = *++s;
}
PUT(fmt, s - fmt);
if (c == 0) {
return x.nchar;
}
fmt = ++s;
for (x.flags = 0; (t = strchr(fchar, *s)) != NULL; s++) {
x.flags |= fbit[t - fchar];
}
@ -93,7 +88,7 @@ int _Printf(outfun prout, char *arg, const char *fmt, va_list args) {
}
x.qual = strchr("hlL", *s) ? *s++ : '\0';
if (x.qual == 'l' && *s == 'l') {
x.qual = 'L';
++s;
@ -101,22 +96,22 @@ int _Printf(outfun prout, char *arg, const char *fmt, va_list args) {
_Putfld(&x, &args, *s, ac);
x.width -= x.n0 + x.nz0 + x.n1 + x.nz1 + x.n2 + x.nz2;
if (!(x.flags & FLAGS_MINUS)) {
PAD(spaces, x.width);
}
PUT(ac, x.n0);
PAD(zeroes, x.nz0);
PUT(x.s, x.n1);
PAD(zeroes, x.nz1);
PUT(x.s + x.n1, x.n2);
PAD(zeroes, x.nz2);
if (x.flags & FLAGS_MINUS) {
PAD(spaces, x.width);
}
fmt = s + 1;
}
return 0;
@ -224,11 +219,11 @@ static void _Putfld(_Pft *x, va_list *args, char type, char *buff) {
case 's':
x->s = va_arg(*args, char *);
x->n1 = strlen(x->s);
if (x->prec >= 0 && x->n1 > x->prec) {
x->n1 = x->prec;
}
break;
case '%':
buff[x->n0++] = '%';
@ -239,4 +234,4 @@ static void _Putfld(_Pft *x, va_list *args, char type, char *buff) {
}
}
static const f32 padding = 0.0f;
static const s32 padding[] = {0, 0};

View File

@ -1 +1,2 @@
osTvType = 0x80000300;
osViModeNtscLan1 = 0x80095800;

View File

@ -139,7 +139,7 @@ dlabel nuGfxCfb
dlabel D_8009A65C
.space 4
dlabel D_8009A660
dlabel __osFinalrom
.space 4
dlabel gBGMPlayerA

View File

@ -1,78 +0,0 @@
.include "macro.inc"
.section .data
dlabel _osViModeNtscLan1
.word 0x02000000, 0x0000311E, 0x00000140, 0x03E52239, 0x0000020D, 0x00000C15, 0x0C150C15, 0x006C02EC, 0x00000200, 0x00000000, 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002, 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002
dlabel _osViModeMPalLan1
.word 0x1E000000, 0x0000311E, 0x00000140, 0x04651E39, 0x0000020D, 0x00040C11, 0x0C190C1A, 0x006C02EC, 0x00000200, 0x00000000, 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002, 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002
dlabel D_800958C0
.float 0.017453292, 0.0, 0.0, 0.0
dlabel __osPfsInodeCacheChannel
.word 0xFFFFFFFF
dlabel __osPfsInodeCacheBank
.byte 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
dlabel __osPfsLastChannel
.word 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000
dlabel D_800958F0
.word 0x00000000
dlabel D_800958F4
.word 0x03B9ACA0
dlabel osViClock
.word 0x02E6D354
dlabel __osShutdown
.word 0x00000000
dlabel __OSGlobalIntMask
.word 0x003FFF01, 0x00000000, 0x00000000, 0x00000000
dlabel D_80095910
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
dlabel D_80095938
.word 0x00000000, 0x00000000
dlabel D_80095940
.ascii "0123456789abcdef\0\0\0\0"
dlabel D_80095954
.ascii "0123456789ABCDEF\0\0\0\0\0\0\0\0\0\0\0\0"
dlabel vi
.short 0x0000
dlabel D_80095972
.short 0x0000
dlabel D_80095974
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
dlabel D_800959A0
.short 0x0000
dlabel D_800959A2
.short 0x0000
dlabel D_800959A4
.word 0x00000000
dlabel D_800959A8
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
dlabel __osViCurr
.word vi
dlabel __osViNext
.word D_800959A0, 0x00000000, 0x00000000
dlabel D_800959E0
.word 0x10000000, 0x0000311E, 0x00000140, 0x04541E3A, 0x00000271, 0x00170C69, 0x0C6F0C6D, 0x00800300, 0x00000200, 0x00000000, 0x00000280, 0x00000400, 0x005F0239, 0x0009026B, 0x00000002, 0x00000280, 0x00000400, 0x005F0239, 0x0009026B, 0x00000002

File diff suppressed because it is too large Load Diff

View File

@ -1,50 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel __createSpeedParam
/* 45A50 8006A650 3C05A460 */ lui $a1, 0xa460
/* 45A54 8006A654 34A50014 */ ori $a1, $a1, 0x14
/* 45A58 8006A658 3C06A460 */ lui $a2, 0xa460
/* 45A5C 8006A65C 34C60018 */ ori $a2, $a2, 0x18
/* 45A60 8006A660 3C07A460 */ lui $a3, 0xa460
/* 45A64 8006A664 34E7001C */ ori $a3, $a3, 0x1c
/* 45A68 8006A668 3C08A460 */ lui $t0, 0xa460
/* 45A6C 8006A66C 35080020 */ ori $t0, $t0, 0x20
/* 45A70 8006A670 3C09A460 */ lui $t1, 0xa460
/* 45A74 8006A674 35290024 */ ori $t1, $t1, 0x24
/* 45A78 8006A678 3C04A460 */ lui $a0, 0xa460
/* 45A7C 8006A67C 34840028 */ ori $a0, $a0, 0x28
/* 45A80 8006A680 3C03A460 */ lui $v1, 0xa460
/* 45A84 8006A684 3463002C */ ori $v1, $v1, 0x2c
/* 45A88 8006A688 3C02A460 */ lui $v0, 0xa460
/* 45A8C 8006A68C 34420030 */ ori $v0, $v0, 0x30
/* 45A90 8006A690 8CA50000 */ lw $a1, ($a1)
/* 45A94 8006A694 8CC60000 */ lw $a2, ($a2)
/* 45A98 8006A698 8CE70000 */ lw $a3, ($a3)
/* 45A9C 8006A69C 8D080000 */ lw $t0, ($t0)
/* 45AA0 8006A6A0 8D290000 */ lw $t1, ($t1)
/* 45AA4 8006A6A4 8C840000 */ lw $a0, ($a0)
/* 45AA8 8006A6A8 8C630000 */ lw $v1, ($v1)
/* 45AAC 8006A6AC 8C4A0000 */ lw $t2, ($v0)
/* 45AB0 8006A6B0 24020007 */ addiu $v0, $zero, 7
/* 45AB4 8006A6B4 3C01800B */ lui $at, %hi(D_800B451C)
/* 45AB8 8006A6B8 A022451C */ sb $v0, %lo(D_800B451C)($at)
/* 45ABC 8006A6BC 3C01800B */ lui $at, %hi(D_800B1B0C)
/* 45AC0 8006A6C0 A0221B0C */ sb $v0, %lo(D_800B1B0C)($at)
/* 45AC4 8006A6C4 3C01800B */ lui $at, %hi(D_800B451D)
/* 45AC8 8006A6C8 A025451D */ sb $a1, %lo(D_800B451D)($at)
/* 45ACC 8006A6CC 3C01800B */ lui $at, %hi(D_800B4520)
/* 45AD0 8006A6D0 A0264520 */ sb $a2, %lo(D_800B4520)($at)
/* 45AD4 8006A6D4 3C01800B */ lui $at, %hi(D_800B451E)
/* 45AD8 8006A6D8 A027451E */ sb $a3, %lo(D_800B451E)($at)
/* 45ADC 8006A6DC 3C01800B */ lui $at, %hi(D_800B451F)
/* 45AE0 8006A6E0 A028451F */ sb $t0, %lo(D_800B451F)($at)
/* 45AE4 8006A6E4 3C01800B */ lui $at, %hi(D_800B1B0D)
/* 45AE8 8006A6E8 A0291B0D */ sb $t1, %lo(D_800B1B0D)($at)
/* 45AEC 8006A6EC 3C01800B */ lui $at, %hi(D_800B1B10)
/* 45AF0 8006A6F0 A0241B10 */ sb $a0, %lo(D_800B1B10)($at)
/* 45AF4 8006A6F4 3C01800B */ lui $at, %hi(D_800B1B0E)
/* 45AF8 8006A6F8 A0231B0E */ sb $v1, %lo(D_800B1B0E)($at)
/* 45AFC 8006A6FC 3C01800B */ lui $at, %hi(D_800B1B0F)
/* 45B00 8006A700 03E00008 */ jr $ra
/* 45B04 8006A704 A02A1B0F */ sb $t2, %lo(D_800B1B0F)($at)

View File

@ -1,194 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel __osInitialize_common
/* 45B08 8006A708 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 45B0C 8006A70C 24020001 */ addiu $v0, $zero, 1
/* 45B10 8006A710 AFBF0018 */ sw $ra, 0x18($sp)
/* 45B14 8006A714 3C01800A */ lui $at, %hi(D_8009A660)
/* 45B18 8006A718 0C01B19C */ jal __osGetSR
/* 45B1C 8006A71C AC22A660 */ sw $v0, %lo(D_8009A660)($at)
/* 45B20 8006A720 3C042000 */ lui $a0, 0x2000
/* 45B24 8006A724 0C01B1A8 */ jal __osSetSR
/* 45B28 8006A728 00442025 */ or $a0, $v0, $a0
/* 45B2C 8006A72C 3C040100 */ lui $a0, 0x100
/* 45B30 8006A730 0C01B1A4 */ jal __osSetFpcCsr
/* 45B34 8006A734 34840800 */ ori $a0, $a0, 0x800
/* 45B38 8006A738 0C01B1AC */ jal __osSetWatchLo
/* 45B3C 8006A73C 3C040490 */ lui $a0, 0x490
/* 45B40 8006A740 3C041FC0 */ lui $a0, 0x1fc0
.L8006A744:
/* 45B44 8006A744 348407FC */ ori $a0, $a0, 0x7fc
/* 45B48 8006A748 0C01B1F0 */ jal __osSiRawReadIo
/* 45B4C 8006A74C 27A50010 */ addiu $a1, $sp, 0x10
/* 45B50 8006A750 1440FFFC */ bnez $v0, .L8006A744
/* 45B54 8006A754 3C041FC0 */ lui $a0, 0x1fc0
.L8006A758:
/* 45B58 8006A758 8FA50010 */ lw $a1, 0x10($sp)
/* 45B5C 8006A75C 3C041FC0 */ lui $a0, 0x1fc0
/* 45B60 8006A760 348407FC */ ori $a0, $a0, 0x7fc
/* 45B64 8006A764 0C01B204 */ jal __osSiRawWriteIo
/* 45B68 8006A768 34A50008 */ ori $a1, $a1, 8
/* 45B6C 8006A76C 1440FFFA */ bnez $v0, .L8006A758
/* 45B70 8006A770 00000000 */ nop
/* 45B74 8006A774 3C028007 */ lui $v0, %hi(func_8006A9F0)
/* 45B78 8006A778 2442A9F0 */ addiu $v0, $v0, %lo(func_8006A9F0)
/* 45B7C 8006A77C 3C068000 */ lui $a2, 0x8000
/* 45B80 8006A780 8C430000 */ lw $v1, ($v0)
/* 45B84 8006A784 8C440004 */ lw $a0, 4($v0)
/* 45B88 8006A788 8C450008 */ lw $a1, 8($v0)
/* 45B8C 8006A78C ACC30000 */ sw $v1, ($a2)
/* 45B90 8006A790 ACC40004 */ sw $a0, 4($a2)
/* 45B94 8006A794 ACC50008 */ sw $a1, 8($a2)
/* 45B98 8006A798 8C43000C */ lw $v1, 0xc($v0)
/* 45B9C 8006A79C ACC3000C */ sw $v1, 0xc($a2)
/* 45BA0 8006A7A0 3C068000 */ lui $a2, 0x8000
/* 45BA4 8006A7A4 34C60080 */ ori $a2, $a2, 0x80
/* 45BA8 8006A7A8 8C430000 */ lw $v1, ($v0)
/* 45BAC 8006A7AC 8C440004 */ lw $a0, 4($v0)
/* 45BB0 8006A7B0 8C450008 */ lw $a1, 8($v0)
/* 45BB4 8006A7B4 ACC30000 */ sw $v1, ($a2)
/* 45BB8 8006A7B8 ACC40004 */ sw $a0, 4($a2)
/* 45BBC 8006A7BC ACC50008 */ sw $a1, 8($a2)
/* 45BC0 8006A7C0 8C43000C */ lw $v1, 0xc($v0)
/* 45BC4 8006A7C4 ACC3000C */ sw $v1, 0xc($a2)
/* 45BC8 8006A7C8 3C068000 */ lui $a2, 0x8000
/* 45BCC 8006A7CC 34C60100 */ ori $a2, $a2, 0x100
/* 45BD0 8006A7D0 8C430000 */ lw $v1, ($v0)
/* 45BD4 8006A7D4 8C440004 */ lw $a0, 4($v0)
/* 45BD8 8006A7D8 8C450008 */ lw $a1, 8($v0)
/* 45BDC 8006A7DC ACC30000 */ sw $v1, ($a2)
/* 45BE0 8006A7E0 ACC40004 */ sw $a0, 4($a2)
/* 45BE4 8006A7E4 ACC50008 */ sw $a1, 8($a2)
/* 45BE8 8006A7E8 8C43000C */ lw $v1, 0xc($v0)
/* 45BEC 8006A7EC ACC3000C */ sw $v1, 0xc($a2)
/* 45BF0 8006A7F0 3C068000 */ lui $a2, 0x8000
/* 45BF4 8006A7F4 34C60180 */ ori $a2, $a2, 0x180
/* 45BF8 8006A7F8 8C430000 */ lw $v1, ($v0)
/* 45BFC 8006A7FC 8C440004 */ lw $a0, 4($v0)
/* 45C00 8006A800 8C450008 */ lw $a1, 8($v0)
/* 45C04 8006A804 ACC30000 */ sw $v1, ($a2)
/* 45C08 8006A808 ACC40004 */ sw $a0, 4($a2)
/* 45C0C 8006A80C ACC50008 */ sw $a1, 8($a2)
/* 45C10 8006A810 8C43000C */ lw $v1, 0xc($v0)
/* 45C14 8006A814 ACC3000C */ sw $v1, 0xc($a2)
/* 45C18 8006A818 3C048000 */ lui $a0, 0x8000
/* 45C1C 8006A81C 0C018614 */ jal osWritebackDCache
/* 45C20 8006A820 24050190 */ addiu $a1, $zero, 0x190
/* 45C24 8006A824 3C048000 */ lui $a0, 0x8000
/* 45C28 8006A828 0C0185F4 */ jal osInvalICache
/* 45C2C 8006A82C 24050190 */ addiu $a1, $zero, 0x190
/* 45C30 8006A830 3C05A460 */ lui $a1, 0xa460
/* 45C34 8006A834 34A50014 */ ori $a1, $a1, 0x14
/* 45C38 8006A838 3C06A460 */ lui $a2, 0xa460
/* 45C3C 8006A83C 34C60018 */ ori $a2, $a2, 0x18
/* 45C40 8006A840 3C07A460 */ lui $a3, 0xa460
/* 45C44 8006A844 34E7001C */ ori $a3, $a3, 0x1c
/* 45C48 8006A848 3C08A460 */ lui $t0, 0xa460
/* 45C4C 8006A84C 35080020 */ ori $t0, $t0, 0x20
/* 45C50 8006A850 3C09A460 */ lui $t1, 0xa460
/* 45C54 8006A854 35290024 */ ori $t1, $t1, 0x24
/* 45C58 8006A858 3C04A460 */ lui $a0, 0xa460
/* 45C5C 8006A85C 34840028 */ ori $a0, $a0, 0x28
/* 45C60 8006A860 3C03A460 */ lui $v1, 0xa460
/* 45C64 8006A864 3463002C */ ori $v1, $v1, 0x2c
/* 45C68 8006A868 3C02A460 */ lui $v0, 0xa460
/* 45C6C 8006A86C 34420030 */ ori $v0, $v0, 0x30
/* 45C70 8006A870 8CA50000 */ lw $a1, ($a1)
/* 45C74 8006A874 8CC60000 */ lw $a2, ($a2)
/* 45C78 8006A878 8CE70000 */ lw $a3, ($a3)
/* 45C7C 8006A87C 8D080000 */ lw $t0, ($t0)
/* 45C80 8006A880 8D290000 */ lw $t1, ($t1)
/* 45C84 8006A884 8C840000 */ lw $a0, ($a0)
/* 45C88 8006A888 8C630000 */ lw $v1, ($v1)
/* 45C8C 8006A88C 8C4A0000 */ lw $t2, ($v0)
/* 45C90 8006A890 24020007 */ addiu $v0, $zero, 7
/* 45C94 8006A894 3C01800B */ lui $at, %hi(D_800B451C)
/* 45C98 8006A898 A022451C */ sb $v0, %lo(D_800B451C)($at)
/* 45C9C 8006A89C 3C01800B */ lui $at, %hi(D_800B1B0C)
/* 45CA0 8006A8A0 A0221B0C */ sb $v0, %lo(D_800B1B0C)($at)
/* 45CA4 8006A8A4 3C01800B */ lui $at, %hi(D_800B451D)
/* 45CA8 8006A8A8 A025451D */ sb $a1, %lo(D_800B451D)($at)
/* 45CAC 8006A8AC 3C01800B */ lui $at, %hi(D_800B4520)
/* 45CB0 8006A8B0 A0264520 */ sb $a2, %lo(D_800B4520)($at)
/* 45CB4 8006A8B4 3C01800B */ lui $at, %hi(D_800B451E)
/* 45CB8 8006A8B8 A027451E */ sb $a3, %lo(D_800B451E)($at)
/* 45CBC 8006A8BC 3C01800B */ lui $at, %hi(D_800B451F)
/* 45CC0 8006A8C0 A028451F */ sb $t0, %lo(D_800B451F)($at)
/* 45CC4 8006A8C4 3C01800B */ lui $at, %hi(D_800B1B0D)
/* 45CC8 8006A8C8 A0291B0D */ sb $t1, %lo(D_800B1B0D)($at)
/* 45CCC 8006A8CC 3C01800B */ lui $at, %hi(D_800B1B10)
/* 45CD0 8006A8D0 A0241B10 */ sb $a0, %lo(D_800B1B10)($at)
/* 45CD4 8006A8D4 3C01800B */ lui $at, %hi(D_800B1B0E)
/* 45CD8 8006A8D8 A0231B0E */ sb $v1, %lo(D_800B1B0E)($at)
/* 45CDC 8006A8DC 3C01800B */ lui $at, %hi(D_800B1B0F)
/* 45CE0 8006A8E0 0C019A58 */ jal osUnmapTLBAll
/* 45CE4 8006A8E4 A02A1B0F */ sb $t2, %lo(D_800B1B0F)($at)
/* 45CE8 8006A8E8 0C01B28C */ jal osMapTLBRdb
/* 45CEC 8006A8EC 00000000 */ nop
/* 45CF0 8006A8F0 3C028009 */ lui $v0, %hi(D_800958F0)
/* 45CF4 8006A8F4 8C4258F0 */ lw $v0, %lo(D_800958F0)($v0)
/* 45CF8 8006A8F8 3C038009 */ lui $v1, %hi(D_800958F4)
/* 45CFC 8006A8FC 8C6358F4 */ lw $v1, %lo(D_800958F4)($v1)
/* 45D00 8006A900 00022040 */ sll $a0, $v0, 1
/* 45D04 8006A904 000337C2 */ srl $a2, $v1, 0x1f
/* 45D08 8006A908 00862025 */ or $a0, $a0, $a2
/* 45D0C 8006A90C 00032840 */ sll $a1, $v1, 1
/* 45D10 8006A910 00A32821 */ addu $a1, $a1, $v1
/* 45D14 8006A914 00A3302B */ sltu $a2, $a1, $v1
/* 45D18 8006A918 00822021 */ addu $a0, $a0, $v0
/* 45D1C 8006A91C 00862021 */ addu $a0, $a0, $a2
/* 45D20 8006A920 24060000 */ addiu $a2, $zero, 0
/* 45D24 8006A924 0C01B8C4 */ jal __udivdi3
/* 45D28 8006A928 24070004 */ addiu $a3, $zero, 4
/* 45D2C 8006A92C 3C048000 */ lui $a0, %hi(D_8000030C)
/* 45D30 8006A930 8C84030C */ lw $a0, %lo(D_8000030C)($a0)
/* 45D34 8006A934 3C018009 */ lui $at, %hi(D_800958F0)
/* 45D38 8006A938 AC2258F0 */ sw $v0, %lo(D_800958F0)($at)
/* 45D3C 8006A93C 3C018009 */ lui $at, %hi(D_800958F4)
/* 45D40 8006A940 14800005 */ bnez $a0, .L8006A958
/* 45D44 8006A944 AC2358F4 */ sw $v1, %lo(D_800958F4)($at)
/* 45D48 8006A948 3C048000 */ lui $a0, %hi(D_8000031C)
/* 45D4C 8006A94C 2484031C */ addiu $a0, $a0, %lo(D_8000031C)
/* 45D50 8006A950 0C01925C */ jal bzero
/* 45D54 8006A954 24050040 */ addiu $a1, $zero, 0x40
.L8006A958:
/* 45D58 8006A958 3C038000 */ lui $v1, %hi(osTvType)
/* 45D5C 8006A95C 8C630300 */ lw $v1, %lo(osTvType)($v1)
/* 45D60 8006A960 54600004 */ bnel $v1, $zero, .L8006A974
/* 45D64 8006A964 24020002 */ addiu $v0, $zero, 2
/* 45D68 8006A968 3C0202F5 */ lui $v0, 0x2f5
/* 45D6C 8006A96C 0801AA62 */ j .L8006A988
/* 45D70 8006A970 3442B2D2 */ ori $v0, $v0, 0xb2d2
.L8006A974:
/* 45D74 8006A974 14620003 */ bne $v1, $v0, .L8006A984
/* 45D78 8006A978 3C0202E6 */ lui $v0, 0x2e6
/* 45D7C 8006A97C 0801AA62 */ j .L8006A988
/* 45D80 8006A980 3442025C */ ori $v0, $v0, 0x25c
.L8006A984:
/* 45D84 8006A984 3442D354 */ ori $v0, $v0, 0xd354
.L8006A988:
/* 45D88 8006A988 3C018009 */ lui $at, %hi(osViClock)
/* 45D8C 8006A98C 0C01B198 */ jal __osGetCause
/* 45D90 8006A990 AC2258F8 */ sw $v0, %lo(osViClock)($at)
/* 45D94 8006A994 30421000 */ andi $v0, $v0, 0x1000
/* 45D98 8006A998 10400003 */ beqz $v0, .L8006A9A8
/* 45D9C 8006A99C 3C03A450 */ lui $v1, 0xa450
.L8006A9A0:
/* 45DA0 8006A9A0 0801AA68 */ j .L8006A9A0
/* 45DA4 8006A9A4 00000000 */ nop
.L8006A9A8:
/* 45DA8 8006A9A8 34630008 */ ori $v1, $v1, 8
/* 45DAC 8006A9AC 3C04A450 */ lui $a0, 0xa450
/* 45DB0 8006A9B0 34840010 */ ori $a0, $a0, 0x10
/* 45DB4 8006A9B4 3C05A450 */ lui $a1, 0xa450
/* 45DB8 8006A9B8 34A50014 */ ori $a1, $a1, 0x14
/* 45DBC 8006A9BC 24020001 */ addiu $v0, $zero, 1
/* 45DC0 8006A9C0 AC620000 */ sw $v0, ($v1)
/* 45DC4 8006A9C4 24023FFF */ addiu $v0, $zero, 0x3fff
/* 45DC8 8006A9C8 AC820000 */ sw $v0, ($a0)
/* 45DCC 8006A9CC 2402000F */ addiu $v0, $zero, 0xf
/* 45DD0 8006A9D0 ACA20000 */ sw $v0, ($a1)
/* 45DD4 8006A9D4 8FBF0018 */ lw $ra, 0x18($sp)
/* 45DD8 8006A9D8 03E00008 */ jr $ra
/* 45DDC 8006A9DC 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,77 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel __osViInit
/* 47E90 8006CA90 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 47E94 8006CA94 AFB00010 */ sw $s0, 0x10($sp)
/* 47E98 8006CA98 3C108009 */ lui $s0, %hi(vi)
/* 47E9C 8006CA9C 26105970 */ addiu $s0, $s0, %lo(vi)
/* 47EA0 8006CAA0 02002021 */ addu $a0, $s0, $zero
/* 47EA4 8006CAA4 AFBF0014 */ sw $ra, 0x14($sp)
/* 47EA8 8006CAA8 0C01925C */ jal bzero
/* 47EAC 8006CAAC 24050060 */ addiu $a1, $zero, 0x60
/* 47EB0 8006CAB0 3C038000 */ lui $v1, %hi(osTvType)
/* 47EB4 8006CAB4 8C630300 */ lw $v1, %lo(osTvType)($v1)
/* 47EB8 8006CAB8 3C018009 */ lui $at, %hi(__osViCurr)
/* 47EBC 8006CABC AC3059D0 */ sw $s0, %lo(__osViCurr)($at)
/* 47EC0 8006CAC0 26100030 */ addiu $s0, $s0, 0x30
/* 47EC4 8006CAC4 24020001 */ addiu $v0, $zero, 1
/* 47EC8 8006CAC8 3C018009 */ lui $at, %hi(D_800959A2)
/* 47ECC 8006CACC A42259A2 */ sh $v0, %lo(D_800959A2)($at)
/* 47ED0 8006CAD0 3C018009 */ lui $at, %hi(D_80095972)
/* 47ED4 8006CAD4 A4225972 */ sh $v0, %lo(D_80095972)($at)
/* 47ED8 8006CAD8 3C028000 */ lui $v0, 0x8000
/* 47EDC 8006CADC 3C018009 */ lui $at, %hi(__osViNext)
/* 47EE0 8006CAE0 AC3059D4 */ sw $s0, %lo(__osViNext)($at)
/* 47EE4 8006CAE4 3C018009 */ lui $at, %hi(D_800959A4)
/* 47EE8 8006CAE8 AC2259A4 */ sw $v0, %lo(D_800959A4)($at)
/* 47EEC 8006CAEC 3C018009 */ lui $at, %hi(D_80095974)
/* 47EF0 8006CAF0 AC225974 */ sw $v0, %lo(D_80095974)($at)
/* 47EF4 8006CAF4 14600004 */ bnez $v1, .L8006CB08
/* 47EF8 8006CAF8 24020002 */ addiu $v0, $zero, 2
/* 47EFC 8006CAFC 3C028009 */ lui $v0, %hi(D_800959E0)
/* 47F00 8006CB00 0801B2C9 */ j .L8006CB24
/* 47F04 8006CB04 244259E0 */ addiu $v0, $v0, %lo(D_800959E0)
.L8006CB08:
/* 47F08 8006CB08 14620004 */ bne $v1, $v0, .L8006CB1C
/* 47F0C 8006CB0C 00000000 */ nop
/* 47F10 8006CB10 3C028009 */ lui $v0, %hi(_osViModeMPalLan1)
/* 47F14 8006CB14 0801B2C9 */ j .L8006CB24
/* 47F18 8006CB18 24425870 */ addiu $v0, $v0, %lo(_osViModeMPalLan1)
.L8006CB1C:
/* 47F1C 8006CB1C 3C028009 */ lui $v0, %hi(_osViModeNtscLan1)
/* 47F20 8006CB20 24425820 */ addiu $v0, $v0, %lo(_osViModeNtscLan1)
.L8006CB24:
/* 47F24 8006CB24 3C018009 */ lui $at, %hi(D_800959A8)
/* 47F28 8006CB28 AC2259A8 */ sw $v0, %lo(D_800959A8)($at)
/* 47F2C 8006CB2C 3C038009 */ lui $v1, %hi(__osViNext)
/* 47F30 8006CB30 8C6359D4 */ lw $v1, %lo(__osViNext)($v1)
/* 47F34 8006CB34 8C640008 */ lw $a0, 8($v1)
/* 47F38 8006CB38 24020020 */ addiu $v0, $zero, 0x20
/* 47F3C 8006CB3C A4620000 */ sh $v0, ($v1)
/* 47F40 8006CB40 8C820004 */ lw $v0, 4($a0)
/* 47F44 8006CB44 3C04A440 */ lui $a0, 0xa440
/* 47F48 8006CB48 34840010 */ ori $a0, $a0, 0x10
/* 47F4C 8006CB4C AC62000C */ sw $v0, 0xc($v1)
/* 47F50 8006CB50 8C820000 */ lw $v0, ($a0)
/* 47F54 8006CB54 2C42000B */ sltiu $v0, $v0, 0xb
/* 47F58 8006CB58 14400007 */ bnez $v0, .L8006CB78
/* 47F5C 8006CB5C 3C02A440 */ lui $v0, 0xa440
/* 47F60 8006CB60 3C03A440 */ lui $v1, 0xa440
/* 47F64 8006CB64 34630010 */ ori $v1, $v1, 0x10
.L8006CB68:
/* 47F68 8006CB68 8C620000 */ lw $v0, ($v1)
/* 47F6C 8006CB6C 2C42000B */ sltiu $v0, $v0, 0xb
/* 47F70 8006CB70 1040FFFD */ beqz $v0, .L8006CB68
/* 47F74 8006CB74 3C02A440 */ lui $v0, 0xa440
.L8006CB78:
/* 47F78 8006CB78 AC400000 */ sw $zero, ($v0)
/* 47F7C 8006CB7C 0C019C1C */ jal __osViSwapContext
/* 47F80 8006CB80 00000000 */ nop
/* 47F84 8006CB84 8FBF0014 */ lw $ra, 0x14($sp)
/* 47F88 8006CB88 8FB00010 */ lw $s0, 0x10($sp)
/* 47F8C 8006CB8C 03E00008 */ jr $ra
/* 47F90 8006CB90 27BD0018 */ addiu $sp, $sp, 0x18
/* 47F94 8006CB94 00000000 */ nop
/* 47F98 8006CB98 00000000 */ nop
/* 47F9C 8006CB9C 00000000 */ nop

View File

@ -1,403 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel D_80099E30
.ascii "0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
.section .text
glabel _Genld
/* 474B4 8006C0B4 27BDFFD0 */ addiu $sp, $sp, -0x30
/* 474B8 8006C0B8 AFB20018 */ sw $s2, 0x18($sp)
/* 474BC 8006C0BC 00C09021 */ addu $s2, $a2, $zero
/* 474C0 8006C0C0 8FA60040 */ lw $a2, 0x40($sp)
/* 474C4 8006C0C4 AFB10014 */ sw $s1, 0x14($sp)
/* 474C8 8006C0C8 00808821 */ addu $s1, $a0, $zero
/* 474CC 8006C0CC AFB3001C */ sw $s3, 0x1c($sp)
/* 474D0 8006C0D0 00A09821 */ addu $s3, $a1, $zero
/* 474D4 8006C0D4 AFB50024 */ sw $s5, 0x24($sp)
/* 474D8 8006C0D8 00E0A821 */ addu $s5, $a3, $zero
/* 474DC 8006C0DC 00073C00 */ sll $a3, $a3, 0x10
/* 474E0 8006C0E0 AFBF0028 */ sw $ra, 0x28($sp)
/* 474E4 8006C0E4 AFB40020 */ sw $s4, 0x20($sp)
/* 474E8 8006C0E8 AFB00010 */ sw $s0, 0x10($sp)
/* 474EC 8006C0EC 1CE00004 */ bgtz $a3, .L8006C100
/* 474F0 8006C0F0 00C0A021 */ addu $s4, $a2, $zero
/* 474F4 8006C0F4 24150001 */ addiu $s5, $zero, 1
/* 474F8 8006C0F8 3C12800A */ lui $s2, %hi(D_80099E30)
/* 474FC 8006C0FC 26529E30 */ addiu $s2, $s2, %lo(D_80099E30)
.L8006C100:
/* 47500 8006C100 00051600 */ sll $v0, $a1, 0x18
/* 47504 8006C104 00022603 */ sra $a0, $v0, 0x18
/* 47508 8006C108 24050066 */ addiu $a1, $zero, 0x66
/* 4750C 8006C10C 1085000F */ beq $a0, $a1, .L8006C14C
/* 47510 8006C110 38830067 */ xori $v1, $a0, 0x67
/* 47514 8006C114 2C630001 */ sltiu $v1, $v1, 1
/* 47518 8006C118 38820047 */ xori $v0, $a0, 0x47
/* 4751C 8006C11C 2C420001 */ sltiu $v0, $v0, 1
/* 47520 8006C120 00621825 */ or $v1, $v1, $v0
/* 47524 8006C124 106000B4 */ beqz $v1, .L8006C3F8
/* 47528 8006C128 00061400 */ sll $v0, $a2, 0x10
/* 4752C 8006C12C 00021C03 */ sra $v1, $v0, 0x10
/* 47530 8006C130 2862FFFC */ slti $v0, $v1, -4
/* 47534 8006C134 1440009B */ bnez $v0, .L8006C3A4
/* 47538 8006C138 00131600 */ sll $v0, $s3, 0x18
/* 4753C 8006C13C 8E220024 */ lw $v0, 0x24($s1)
/* 47540 8006C140 0062102A */ slt $v0, $v1, $v0
/* 47544 8006C144 10400097 */ beqz $v0, .L8006C3A4
/* 47548 8006C148 00131600 */ sll $v0, $s3, 0x18
.L8006C14C:
/* 4754C 8006C14C 10850011 */ beq $a0, $a1, .L8006C194
/* 47550 8006C150 24D40001 */ addiu $s4, $a2, 1
/* 47554 8006C154 8E220030 */ lw $v0, 0x30($s1)
/* 47558 8006C158 30420008 */ andi $v0, $v0, 8
/* 4755C 8006C15C 14400006 */ bnez $v0, .L8006C178
/* 47560 8006C160 00151C00 */ sll $v1, $s5, 0x10
/* 47564 8006C164 8E220024 */ lw $v0, 0x24($s1)
/* 47568 8006C168 00031C03 */ sra $v1, $v1, 0x10
/* 4756C 8006C16C 0062102A */ slt $v0, $v1, $v0
/* 47570 8006C170 54400001 */ bnel $v0, $zero, .L8006C178
/* 47574 8006C174 AE230024 */ sw $v1, 0x24($s1)
.L8006C178:
/* 47578 8006C178 8E230024 */ lw $v1, 0x24($s1)
/* 4757C 8006C17C 00141400 */ sll $v0, $s4, 0x10
/* 47580 8006C180 00021403 */ sra $v0, $v0, 0x10
/* 47584 8006C184 00621823 */ subu $v1, $v1, $v0
/* 47588 8006C188 04610002 */ bgez $v1, .L8006C194
/* 4758C 8006C18C AE230024 */ sw $v1, 0x24($s1)
/* 47590 8006C190 AE200024 */ sw $zero, 0x24($s1)
.L8006C194:
/* 47594 8006C194 00141400 */ sll $v0, $s4, 0x10
/* 47598 8006C198 00029C03 */ sra $s3, $v0, 0x10
/* 4759C 8006C19C 1E600036 */ bgtz $s3, .L8006C278
/* 475A0 8006C1A0 00151400 */ sll $v0, $s5, 0x10
/* 475A4 8006C1A4 8E240014 */ lw $a0, 0x14($s1)
/* 475A8 8006C1A8 8E230008 */ lw $v1, 8($s1)
/* 475AC 8006C1AC 24820001 */ addiu $v0, $a0, 1
/* 475B0 8006C1B0 00641821 */ addu $v1, $v1, $a0
/* 475B4 8006C1B4 AE220014 */ sw $v0, 0x14($s1)
/* 475B8 8006C1B8 24020030 */ addiu $v0, $zero, 0x30
/* 475BC 8006C1BC A0620000 */ sb $v0, ($v1)
/* 475C0 8006C1C0 8E220024 */ lw $v0, 0x24($s1)
/* 475C4 8006C1C4 1C400005 */ bgtz $v0, .L8006C1DC
/* 475C8 8006C1C8 00000000 */ nop
/* 475CC 8006C1CC 8E220030 */ lw $v0, 0x30($s1)
/* 475D0 8006C1D0 30420008 */ andi $v0, $v0, 8
/* 475D4 8006C1D4 10400009 */ beqz $v0, .L8006C1FC
/* 475D8 8006C1D8 00141400 */ sll $v0, $s4, 0x10
.L8006C1DC:
/* 475DC 8006C1DC 8E240014 */ lw $a0, 0x14($s1)
/* 475E0 8006C1E0 8E230008 */ lw $v1, 8($s1)
/* 475E4 8006C1E4 24820001 */ addiu $v0, $a0, 1
/* 475E8 8006C1E8 00641821 */ addu $v1, $v1, $a0
/* 475EC 8006C1EC AE220014 */ sw $v0, 0x14($s1)
/* 475F0 8006C1F0 2402002E */ addiu $v0, $zero, 0x2e
/* 475F4 8006C1F4 A0620000 */ sb $v0, ($v1)
/* 475F8 8006C1F8 00141400 */ sll $v0, $s4, 0x10
.L8006C1FC:
/* 475FC 8006C1FC 8E230024 */ lw $v1, 0x24($s1)
/* 47600 8006C200 00021403 */ sra $v0, $v0, 0x10
/* 47604 8006C204 00021023 */ negu $v0, $v0
/* 47608 8006C208 0062102A */ slt $v0, $v1, $v0
/* 4760C 8006C20C 54400001 */ bnel $v0, $zero, .L8006C214
/* 47610 8006C210 0003A023 */ negu $s4, $v1
.L8006C214:
/* 47614 8006C214 00141400 */ sll $v0, $s4, 0x10
/* 47618 8006C218 8E240024 */ lw $a0, 0x24($s1)
/* 4761C 8006C21C 00021403 */ sra $v0, $v0, 0x10
/* 47620 8006C220 00021823 */ negu $v1, $v0
/* 47624 8006C224 AE230018 */ sw $v1, 0x18($s1)
/* 47628 8006C228 00822021 */ addu $a0, $a0, $v0
/* 4762C 8006C22C 00151400 */ sll $v0, $s5, 0x10
/* 47630 8006C230 00021403 */ sra $v0, $v0, 0x10
/* 47634 8006C234 0082102A */ slt $v0, $a0, $v0
/* 47638 8006C238 10400002 */ beqz $v0, .L8006C244
/* 4763C 8006C23C AE240024 */ sw $a0, 0x24($s1)
/* 47640 8006C240 0080A821 */ addu $s5, $a0, $zero
.L8006C244:
/* 47644 8006C244 02402821 */ addu $a1, $s2, $zero
/* 47648 8006C248 8E220008 */ lw $v0, 8($s1)
/* 4764C 8006C24C 8E240014 */ lw $a0, 0x14($s1)
/* 47650 8006C250 00158400 */ sll $s0, $s5, 0x10
/* 47654 8006C254 00108403 */ sra $s0, $s0, 0x10
/* 47658 8006C258 02003021 */ addu $a2, $s0, $zero
/* 4765C 8006C25C AE30001C */ sw $s0, 0x1c($s1)
/* 47660 8006C260 0C01929D */ jal memcpy
/* 47664 8006C264 00442021 */ addu $a0, $v0, $a0
/* 47668 8006C268 8E220024 */ lw $v0, 0x24($s1)
/* 4766C 8006C26C 00501023 */ subu $v0, $v0, $s0
/* 47670 8006C270 0801B17B */ j .L8006C5EC
/* 47674 8006C274 AE220020 */ sw $v0, 0x20($s1)
.L8006C278:
/* 47678 8006C278 00028403 */ sra $s0, $v0, 0x10
/* 4767C 8006C27C 0213102A */ slt $v0, $s0, $s3
/* 47680 8006C280 1040001C */ beqz $v0, .L8006C2F4
/* 47684 8006C284 02402821 */ addu $a1, $s2, $zero
/* 47688 8006C288 8E220008 */ lw $v0, 8($s1)
/* 4768C 8006C28C 8E240014 */ lw $a0, 0x14($s1)
/* 47690 8006C290 02003021 */ addu $a2, $s0, $zero
/* 47694 8006C294 0C01929D */ jal memcpy
/* 47698 8006C298 00442021 */ addu $a0, $v0, $a0
/* 4769C 8006C29C 8E230014 */ lw $v1, 0x14($s1)
/* 476A0 8006C2A0 8E240024 */ lw $a0, 0x24($s1)
/* 476A4 8006C2A4 02701023 */ subu $v0, $s3, $s0
/* 476A8 8006C2A8 AE220018 */ sw $v0, 0x18($s1)
/* 476AC 8006C2AC 00701821 */ addu $v1, $v1, $s0
/* 476B0 8006C2B0 1C800005 */ bgtz $a0, .L8006C2C8
/* 476B4 8006C2B4 AE230014 */ sw $v1, 0x14($s1)
/* 476B8 8006C2B8 8E220030 */ lw $v0, 0x30($s1)
/* 476BC 8006C2BC 30420008 */ andi $v0, $v0, 8
/* 476C0 8006C2C0 10400009 */ beqz $v0, .L8006C2E8
/* 476C4 8006C2C4 00000000 */ nop
.L8006C2C8:
/* 476C8 8006C2C8 8E220008 */ lw $v0, 8($s1)
/* 476CC 8006C2CC 8E230014 */ lw $v1, 0x14($s1)
/* 476D0 8006C2D0 00431021 */ addu $v0, $v0, $v1
/* 476D4 8006C2D4 2403002E */ addiu $v1, $zero, 0x2e
/* 476D8 8006C2D8 A0430000 */ sb $v1, ($v0)
/* 476DC 8006C2DC 8E22001C */ lw $v0, 0x1c($s1)
/* 476E0 8006C2E0 24420001 */ addiu $v0, $v0, 1
/* 476E4 8006C2E4 AE22001C */ sw $v0, 0x1c($s1)
.L8006C2E8:
/* 476E8 8006C2E8 8E220024 */ lw $v0, 0x24($s1)
/* 476EC 8006C2EC 0801B17B */ j .L8006C5EC
/* 476F0 8006C2F0 AE220020 */ sw $v0, 0x20($s1)
.L8006C2F4:
/* 476F4 8006C2F4 8E220008 */ lw $v0, 8($s1)
/* 476F8 8006C2F8 8E240014 */ lw $a0, 0x14($s1)
/* 476FC 8006C2FC 02603021 */ addu $a2, $s3, $zero
/* 47700 8006C300 0C01929D */ jal memcpy
/* 47704 8006C304 00442021 */ addu $a0, $v0, $a0
/* 47708 8006C308 8E220014 */ lw $v0, 0x14($s1)
/* 4770C 8006C30C 8E230024 */ lw $v1, 0x24($s1)
/* 47710 8006C310 02B4A823 */ subu $s5, $s5, $s4
/* 47714 8006C314 00533021 */ addu $a2, $v0, $s3
/* 47718 8006C318 1C600005 */ bgtz $v1, .L8006C330
/* 4771C 8006C31C AE260014 */ sw $a2, 0x14($s1)
/* 47720 8006C320 8E220030 */ lw $v0, 0x30($s1)
/* 47724 8006C324 30420008 */ andi $v0, $v0, 8
/* 47728 8006C328 10400007 */ beqz $v0, .L8006C348
/* 4772C 8006C32C 00000000 */ nop
.L8006C330:
/* 47730 8006C330 8E220008 */ lw $v0, 8($s1)
/* 47734 8006C334 24C30001 */ addiu $v1, $a2, 1
/* 47738 8006C338 AE230014 */ sw $v1, 0x14($s1)
/* 4773C 8006C33C 2403002E */ addiu $v1, $zero, 0x2e
/* 47740 8006C340 00461021 */ addu $v0, $v0, $a2
/* 47744 8006C344 A0430000 */ sb $v1, ($v0)
.L8006C348:
/* 47748 8006C348 8E230024 */ lw $v1, 0x24($s1)
/* 4774C 8006C34C 00151400 */ sll $v0, $s5, 0x10
/* 47750 8006C350 00021403 */ sra $v0, $v0, 0x10
/* 47754 8006C354 0062102A */ slt $v0, $v1, $v0
/* 47758 8006C358 54400001 */ bnel $v0, $zero, .L8006C360
/* 4775C 8006C35C 0060A821 */ addu $s5, $v1, $zero
.L8006C360:
/* 47760 8006C360 00142C00 */ sll $a1, $s4, 0x10
/* 47764 8006C364 00052C03 */ sra $a1, $a1, 0x10
/* 47768 8006C368 02452821 */ addu $a1, $s2, $a1
/* 4776C 8006C36C 8E220008 */ lw $v0, 8($s1)
/* 47770 8006C370 8E240014 */ lw $a0, 0x14($s1)
/* 47774 8006C374 00158400 */ sll $s0, $s5, 0x10
/* 47778 8006C378 00108403 */ sra $s0, $s0, 0x10
/* 4777C 8006C37C 02003021 */ addu $a2, $s0, $zero
/* 47780 8006C380 0C01929D */ jal memcpy
/* 47784 8006C384 00442021 */ addu $a0, $v0, $a0
/* 47788 8006C388 8E220014 */ lw $v0, 0x14($s1)
/* 4778C 8006C38C 8E230024 */ lw $v1, 0x24($s1)
/* 47790 8006C390 00501021 */ addu $v0, $v0, $s0
/* 47794 8006C394 00701823 */ subu $v1, $v1, $s0
/* 47798 8006C398 AE220014 */ sw $v0, 0x14($s1)
/* 4779C 8006C39C 0801B17B */ j .L8006C5EC
/* 477A0 8006C3A0 AE230018 */ sw $v1, 0x18($s1)
.L8006C3A4:
/* 477A4 8006C3A4 00021603 */ sra $v0, $v0, 0x18
/* 477A8 8006C3A8 38430067 */ xori $v1, $v0, 0x67
/* 477AC 8006C3AC 2C640001 */ sltiu $a0, $v1, 1
/* 477B0 8006C3B0 38420047 */ xori $v0, $v0, 0x47
/* 477B4 8006C3B4 2C420001 */ sltiu $v0, $v0, 1
/* 477B8 8006C3B8 00821025 */ or $v0, $a0, $v0
/* 477BC 8006C3BC 1040000E */ beqz $v0, .L8006C3F8
/* 477C0 8006C3C0 00151C00 */ sll $v1, $s5, 0x10
/* 477C4 8006C3C4 8E220024 */ lw $v0, 0x24($s1)
/* 477C8 8006C3C8 00031C03 */ sra $v1, $v1, 0x10
/* 477CC 8006C3CC 0062102A */ slt $v0, $v1, $v0
/* 477D0 8006C3D0 54400001 */ bnel $v0, $zero, .L8006C3D8
/* 477D4 8006C3D4 AE230024 */ sw $v1, 0x24($s1)
.L8006C3D8:
/* 477D8 8006C3D8 8E220024 */ lw $v0, 0x24($s1)
/* 477DC 8006C3DC 2442FFFF */ addiu $v0, $v0, -1
/* 477E0 8006C3E0 04410002 */ bgez $v0, .L8006C3EC
/* 477E4 8006C3E4 AE220024 */ sw $v0, 0x24($s1)
/* 477E8 8006C3E8 AE200024 */ sw $zero, 0x24($s1)
.L8006C3EC:
/* 477EC 8006C3EC 00041023 */ negu $v0, $a0
/* 477F0 8006C3F0 30420065 */ andi $v0, $v0, 0x65
/* 477F4 8006C3F4 34530045 */ ori $s3, $v0, 0x45
.L8006C3F8:
/* 477F8 8006C3F8 8E240014 */ lw $a0, 0x14($s1)
/* 477FC 8006C3FC 24820001 */ addiu $v0, $a0, 1
/* 47800 8006C400 AE220014 */ sw $v0, 0x14($s1)
/* 47804 8006C404 8E220008 */ lw $v0, 8($s1)
/* 47808 8006C408 92430000 */ lbu $v1, ($s2)
/* 4780C 8006C40C 00441021 */ addu $v0, $v0, $a0
/* 47810 8006C410 A0430000 */ sb $v1, ($v0)
/* 47814 8006C414 8E220024 */ lw $v0, 0x24($s1)
/* 47818 8006C418 1C400005 */ bgtz $v0, .L8006C430
/* 4781C 8006C41C 26520001 */ addiu $s2, $s2, 1
/* 47820 8006C420 8E220030 */ lw $v0, 0x30($s1)
/* 47824 8006C424 30420008 */ andi $v0, $v0, 8
/* 47828 8006C428 10400008 */ beqz $v0, .L8006C44C
/* 4782C 8006C42C 00000000 */ nop
.L8006C430:
/* 47830 8006C430 8E240014 */ lw $a0, 0x14($s1)
/* 47834 8006C434 8E230008 */ lw $v1, 8($s1)
/* 47838 8006C438 24820001 */ addiu $v0, $a0, 1
/* 4783C 8006C43C 00641821 */ addu $v1, $v1, $a0
/* 47840 8006C440 AE220014 */ sw $v0, 0x14($s1)
/* 47844 8006C444 2402002E */ addiu $v0, $zero, 0x2e
/* 47848 8006C448 A0620000 */ sb $v0, ($v1)
.L8006C44C:
/* 4784C 8006C44C 8E230024 */ lw $v1, 0x24($s1)
/* 47850 8006C450 18600015 */ blez $v1, .L8006C4A8
/* 47854 8006C454 26A2FFFF */ addiu $v0, $s5, -1
/* 47858 8006C458 0040A821 */ addu $s5, $v0, $zero
/* 4785C 8006C45C 00021400 */ sll $v0, $v0, 0x10
/* 47860 8006C460 00021403 */ sra $v0, $v0, 0x10
/* 47864 8006C464 0062102A */ slt $v0, $v1, $v0
/* 47868 8006C468 54400001 */ bnel $v0, $zero, .L8006C470
/* 4786C 8006C46C 0060A821 */ addu $s5, $v1, $zero
.L8006C470:
/* 47870 8006C470 02402821 */ addu $a1, $s2, $zero
/* 47874 8006C474 8E220008 */ lw $v0, 8($s1)
/* 47878 8006C478 8E240014 */ lw $a0, 0x14($s1)
/* 4787C 8006C47C 00158400 */ sll $s0, $s5, 0x10
/* 47880 8006C480 00108403 */ sra $s0, $s0, 0x10
/* 47884 8006C484 02003021 */ addu $a2, $s0, $zero
/* 47888 8006C488 0C01929D */ jal memcpy
/* 4788C 8006C48C 00442021 */ addu $a0, $v0, $a0
/* 47890 8006C490 8E220014 */ lw $v0, 0x14($s1)
/* 47894 8006C494 8E230024 */ lw $v1, 0x24($s1)
/* 47898 8006C498 00501021 */ addu $v0, $v0, $s0
/* 4789C 8006C49C 00701823 */ subu $v1, $v1, $s0
/* 478A0 8006C4A0 AE220014 */ sw $v0, 0x14($s1)
/* 478A4 8006C4A4 AE230018 */ sw $v1, 0x18($s1)
.L8006C4A8:
/* 478A8 8006C4A8 8E220008 */ lw $v0, 8($s1)
/* 478AC 8006C4AC 8E230014 */ lw $v1, 0x14($s1)
/* 478B0 8006C4B0 00439021 */ addu $s2, $v0, $v1
/* 478B4 8006C4B4 A2530000 */ sb $s3, ($s2)
/* 478B8 8006C4B8 00141400 */ sll $v0, $s4, 0x10
/* 478BC 8006C4BC 04400005 */ bltz $v0, .L8006C4D4
/* 478C0 8006C4C0 26520001 */ addiu $s2, $s2, 1
/* 478C4 8006C4C4 2402002B */ addiu $v0, $zero, 0x2b
/* 478C8 8006C4C8 A2420000 */ sb $v0, ($s2)
/* 478CC 8006C4CC 0801B139 */ j .L8006C4E4
/* 478D0 8006C4D0 26520001 */ addiu $s2, $s2, 1
.L8006C4D4:
/* 478D4 8006C4D4 2402002D */ addiu $v0, $zero, 0x2d
/* 478D8 8006C4D8 A2420000 */ sb $v0, ($s2)
/* 478DC 8006C4DC 26520001 */ addiu $s2, $s2, 1
/* 478E0 8006C4E0 0014A023 */ negu $s4, $s4
.L8006C4E4:
/* 478E4 8006C4E4 00142C00 */ sll $a1, $s4, 0x10
/* 478E8 8006C4E8 00052403 */ sra $a0, $a1, 0x10
/* 478EC 8006C4EC 28820064 */ slti $v0, $a0, 0x64
/* 478F0 8006C4F0 14400027 */ bnez $v0, .L8006C590
/* 478F4 8006C4F4 3C036666 */ lui $v1, 0x6666
/* 478F8 8006C4F8 288203E8 */ slti $v0, $a0, 0x3e8
/* 478FC 8006C4FC 14400012 */ bnez $v0, .L8006C548
/* 47900 8006C500 3C0351EB */ lui $v1, 0x51eb
/* 47904 8006C504 3C021062 */ lui $v0, 0x1062
/* 47908 8006C508 34424DD3 */ ori $v0, $v0, 0x4dd3
/* 4790C 8006C50C 00820018 */ mult $a0, $v0
/* 47910 8006C510 000517C3 */ sra $v0, $a1, 0x1f
/* 47914 8006C514 00004010 */ mfhi $t0
/* 47918 8006C518 00081983 */ sra $v1, $t0, 6
/* 4791C 8006C51C 00621823 */ subu $v1, $v1, $v0
/* 47920 8006C520 24620030 */ addiu $v0, $v1, 0x30
/* 47924 8006C524 A2420000 */ sb $v0, ($s2)
/* 47928 8006C528 26520001 */ addiu $s2, $s2, 1
/* 4792C 8006C52C 00031140 */ sll $v0, $v1, 5
/* 47930 8006C530 00431023 */ subu $v0, $v0, $v1
/* 47934 8006C534 00021080 */ sll $v0, $v0, 2
/* 47938 8006C538 00431021 */ addu $v0, $v0, $v1
/* 4793C 8006C53C 000210C0 */ sll $v0, $v0, 3
/* 47940 8006C540 0082A023 */ subu $s4, $a0, $v0
/* 47944 8006C544 3C0351EB */ lui $v1, 0x51eb
.L8006C548:
/* 47948 8006C548 3463851F */ ori $v1, $v1, 0x851f
/* 4794C 8006C54C 00141400 */ sll $v0, $s4, 0x10
/* 47950 8006C550 00022403 */ sra $a0, $v0, 0x10
/* 47954 8006C554 00830018 */ mult $a0, $v1
/* 47958 8006C558 000217C3 */ sra $v0, $v0, 0x1f
/* 4795C 8006C55C 00004010 */ mfhi $t0
/* 47960 8006C560 00081943 */ sra $v1, $t0, 5
/* 47964 8006C564 00621823 */ subu $v1, $v1, $v0
/* 47968 8006C568 24620030 */ addiu $v0, $v1, 0x30
/* 4796C 8006C56C A2420000 */ sb $v0, ($s2)
/* 47970 8006C570 26520001 */ addiu $s2, $s2, 1
/* 47974 8006C574 00031040 */ sll $v0, $v1, 1
/* 47978 8006C578 00431021 */ addu $v0, $v0, $v1
/* 4797C 8006C57C 000210C0 */ sll $v0, $v0, 3
/* 47980 8006C580 00431021 */ addu $v0, $v0, $v1
/* 47984 8006C584 00021080 */ sll $v0, $v0, 2
/* 47988 8006C588 0082A023 */ subu $s4, $a0, $v0
/* 4798C 8006C58C 3C036666 */ lui $v1, 0x6666
.L8006C590:
/* 47990 8006C590 34636667 */ ori $v1, $v1, 0x6667
/* 47994 8006C594 00141400 */ sll $v0, $s4, 0x10
/* 47998 8006C598 00022403 */ sra $a0, $v0, 0x10
/* 4799C 8006C59C 00830018 */ mult $a0, $v1
/* 479A0 8006C5A0 000217C3 */ sra $v0, $v0, 0x1f
/* 479A4 8006C5A4 00004010 */ mfhi $t0
/* 479A8 8006C5A8 00081883 */ sra $v1, $t0, 2
/* 479AC 8006C5AC 00621823 */ subu $v1, $v1, $v0
/* 479B0 8006C5B0 24620030 */ addiu $v0, $v1, 0x30
/* 479B4 8006C5B4 A2420000 */ sb $v0, ($s2)
/* 479B8 8006C5B8 26520001 */ addiu $s2, $s2, 1
/* 479BC 8006C5BC 00031080 */ sll $v0, $v1, 2
/* 479C0 8006C5C0 00431021 */ addu $v0, $v0, $v1
/* 479C4 8006C5C4 00021040 */ sll $v0, $v0, 1
/* 479C8 8006C5C8 00822023 */ subu $a0, $a0, $v0
/* 479CC 8006C5CC 24840030 */ addiu $a0, $a0, 0x30
/* 479D0 8006C5D0 A2440000 */ sb $a0, ($s2)
/* 479D4 8006C5D4 8E220008 */ lw $v0, 8($s1)
/* 479D8 8006C5D8 8E230014 */ lw $v1, 0x14($s1)
/* 479DC 8006C5DC 26520001 */ addiu $s2, $s2, 1
/* 479E0 8006C5E0 00431021 */ addu $v0, $v0, $v1
/* 479E4 8006C5E4 02421023 */ subu $v0, $s2, $v0
/* 479E8 8006C5E8 AE22001C */ sw $v0, 0x1c($s1)
.L8006C5EC:
/* 479EC 8006C5EC 8E220030 */ lw $v0, 0x30($s1)
/* 479F0 8006C5F0 24030010 */ addiu $v1, $zero, 0x10
/* 479F4 8006C5F4 30420014 */ andi $v0, $v0, 0x14
/* 479F8 8006C5F8 1443000F */ bne $v0, $v1, .L8006C638
/* 479FC 8006C5FC 00000000 */ nop
/* 47A00 8006C600 8E22000C */ lw $v0, 0xc($s1)
/* 47A04 8006C604 8E230014 */ lw $v1, 0x14($s1)
/* 47A08 8006C608 8E240018 */ lw $a0, 0x18($s1)
/* 47A0C 8006C60C 00431021 */ addu $v0, $v0, $v1
/* 47A10 8006C610 00441021 */ addu $v0, $v0, $a0
/* 47A14 8006C614 8E23001C */ lw $v1, 0x1c($s1)
/* 47A18 8006C618 8E240020 */ lw $a0, 0x20($s1)
/* 47A1C 8006C61C 8E250028 */ lw $a1, 0x28($s1)
/* 47A20 8006C620 00431021 */ addu $v0, $v0, $v1
/* 47A24 8006C624 00441821 */ addu $v1, $v0, $a0
/* 47A28 8006C628 0065102A */ slt $v0, $v1, $a1
/* 47A2C 8006C62C 10400002 */ beqz $v0, .L8006C638
/* 47A30 8006C630 00A31023 */ subu $v0, $a1, $v1
/* 47A34 8006C634 AE220010 */ sw $v0, 0x10($s1)
.L8006C638:
/* 47A38 8006C638 8FBF0028 */ lw $ra, 0x28($sp)
/* 47A3C 8006C63C 8FB50024 */ lw $s5, 0x24($sp)
/* 47A40 8006C640 8FB40020 */ lw $s4, 0x20($sp)
/* 47A44 8006C644 8FB3001C */ lw $s3, 0x1c($sp)
/* 47A48 8006C648 8FB20018 */ lw $s2, 0x18($sp)
/* 47A4C 8006C64C 8FB10014 */ lw $s1, 0x14($sp)
/* 47A50 8006C650 8FB00010 */ lw $s0, 0x10($sp)
/* 47A54 8006C654 03E00008 */ jr $ra
/* 47A58 8006C658 27BD0030 */ addiu $sp, $sp, 0x30
/* 47A5C 8006C65C 00000000 */ nop

View File

@ -1,334 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel D_80099DD0
.word 0x40240000, 0x00000000, 0x40590000, 0x00000000, 0x40C38800, 0x00000000, 0x4197D784, 0x00000000, 0x4341C379, 0x37E08000, 0x4693B8B5, 0xB5056E17, 0x4D384F03, 0xE93FF9F5, 0x5A827748, 0xF9301D32, 0x75154FDD, 0x7F73BF3C
dlabel D_80099E18
.word 0x4E614E00
dlabel D_80099E1C
.word 0x496E6600
dlabel D_80099E20
.double 1.0
dlabel D_80099E28
.double 100000000.0
.section .text
glabel _Ldtob
/* 46FD0 8006BBD0 27BDFF80 */ addiu $sp, $sp, -0x80
/* 46FD4 8006BBD4 AFB30054 */ sw $s3, 0x54($sp)
/* 46FD8 8006BBD8 00809821 */ addu $s3, $a0, $zero
/* 46FDC 8006BBDC AFB1004C */ sw $s1, 0x4c($sp)
/* 46FE0 8006BBE0 27B10018 */ addiu $s1, $sp, 0x18
/* 46FE4 8006BBE4 AFBF0060 */ sw $ra, 0x60($sp)
/* 46FE8 8006BBE8 AFB5005C */ sw $s5, 0x5c($sp)
/* 46FEC 8006BBEC AFB40058 */ sw $s4, 0x58($sp)
/* 46FF0 8006BBF0 AFB20050 */ sw $s2, 0x50($sp)
/* 46FF4 8006BBF4 AFB00048 */ sw $s0, 0x48($sp)
/* 46FF8 8006BBF8 F7B80078 */ sdc1 $f24, 0x78($sp)
/* 46FFC 8006BBFC F7B60070 */ sdc1 $f22, 0x70($sp)
/* 47000 8006BC00 F7B40068 */ sdc1 $f20, 0x68($sp)
/* 47004 8006BC04 8E630024 */ lw $v1, 0x24($s3)
/* 47008 8006BC08 D6740000 */ ldc1 $f20, ($s3)
/* 4700C 8006BC0C 04610003 */ bgez $v1, .L8006BC1C
/* 47010 8006BC10 00A0A821 */ addu $s5, $a1, $zero
/* 47014 8006BC14 0801AF12 */ j .L8006BC48
/* 47018 8006BC18 24020006 */ addiu $v0, $zero, 6
.L8006BC1C:
/* 4701C 8006BC1C 1460000C */ bnez $v1, .L8006BC50
/* 47020 8006BC20 27A40038 */ addiu $a0, $sp, 0x38
/* 47024 8006BC24 00051600 */ sll $v0, $a1, 0x18
/* 47028 8006BC28 00021603 */ sra $v0, $v0, 0x18
/* 4702C 8006BC2C 38430067 */ xori $v1, $v0, 0x67
/* 47030 8006BC30 2C630001 */ sltiu $v1, $v1, 1
/* 47034 8006BC34 38420047 */ xori $v0, $v0, 0x47
/* 47038 8006BC38 2C420001 */ sltiu $v0, $v0, 1
/* 4703C 8006BC3C 00621825 */ or $v1, $v1, $v0
/* 47040 8006BC40 10600003 */ beqz $v1, .L8006BC50
/* 47044 8006BC44 24020001 */ addiu $v0, $zero, 1
.L8006BC48:
/* 47048 8006BC48 AE620024 */ sw $v0, 0x24($s3)
/* 4704C 8006BC4C 27A40038 */ addiu $a0, $sp, 0x38
.L8006BC50:
/* 47050 8006BC50 0C01B007 */ jal _Ldunscale
/* 47054 8006BC54 02602821 */ addu $a1, $s3, $zero
/* 47058 8006BC58 00021400 */ sll $v0, $v0, 0x10
/* 4705C 8006BC5C 00021C03 */ sra $v1, $v0, 0x10
/* 47060 8006BC60 18600010 */ blez $v1, .L8006BCA4
/* 47064 8006BC64 24020002 */ addiu $v0, $zero, 2
/* 47068 8006BC68 3C06800A */ lui $a2, %hi(D_80099E1C)
/* 4706C 8006BC6C 24C69E1C */ addiu $a2, $a2, %lo(D_80099E1C)
/* 47070 8006BC70 8E670008 */ lw $a3, 8($s3)
/* 47074 8006BC74 14620003 */ bne $v1, $v0, .L8006BC84
/* 47078 8006BC78 24020003 */ addiu $v0, $zero, 3
/* 4707C 8006BC7C 3C06800A */ lui $a2, %hi(D_80099E18)
/* 47080 8006BC80 24C69E18 */ addiu $a2, $a2, %lo(D_80099E18)
.L8006BC84:
/* 47084 8006BC84 AE620014 */ sw $v0, 0x14($s3)
/* 47088 8006BC88 80C20000 */ lb $v0, ($a2)
/* 4708C 8006BC8C 80C30001 */ lb $v1, 1($a2)
/* 47090 8006BC90 80C40002 */ lb $a0, 2($a2)
/* 47094 8006BC94 A0E20000 */ sb $v0, ($a3)
/* 47098 8006BC98 A0E30001 */ sb $v1, 1($a3)
/* 4709C 8006BC9C 0801AFFB */ j .L8006BFEC
/* 470A0 8006BCA0 A0E40002 */ sb $a0, 2($a3)
.L8006BCA4:
/* 470A4 8006BCA4 14600003 */ bnez $v1, .L8006BCB4
/* 470A8 8006BCA8 00003821 */ addu $a3, $zero, $zero
/* 470AC 8006BCAC 0801AFF2 */ j .L8006BFC8
/* 470B0 8006BCB0 A7A00038 */ sh $zero, 0x38($sp)
.L8006BCB4:
/* 470B4 8006BCB4 44800000 */ mtc1 $zero, $f0
/* 470B8 8006BCB8 44800800 */ mtc1 $zero, $f1
/* 470BC 8006BCBC 00000000 */ nop
/* 470C0 8006BCC0 4620A03C */ c.lt.d $f20, $f0
/* 470C4 8006BCC4 00000000 */ nop
/* 470C8 8006BCC8 00000000 */ nop
/* 470CC 8006BCCC 45030001 */ bc1tl .L8006BCD4
/* 470D0 8006BCD0 4620A507 */ neg.d $f20, $f20
.L8006BCD4:
/* 470D4 8006BCD4 87A30038 */ lh $v1, 0x38($sp)
/* 470D8 8006BCD8 24027597 */ addiu $v0, $zero, 0x7597
/* 470DC 8006BCDC 00620018 */ mult $v1, $v0
/* 470E0 8006BCE0 00001812 */ mflo $v1
/* 470E4 8006BCE4 3C0214F8 */ lui $v0, 0x14f8
/* 470E8 8006BCE8 3442B589 */ ori $v0, $v0, 0xb589
/* 470EC 8006BCEC 00620018 */ mult $v1, $v0
/* 470F0 8006BCF0 00031FC3 */ sra $v1, $v1, 0x1f
/* 470F4 8006BCF4 00004010 */ mfhi $t0
/* 470F8 8006BCF8 00081343 */ sra $v0, $t0, 0xd
/* 470FC 8006BCFC 00431023 */ subu $v0, $v0, $v1
/* 47100 8006BD00 2443FFFC */ addiu $v1, $v0, -4
/* 47104 8006BD04 00031400 */ sll $v0, $v1, 0x10
/* 47108 8006BD08 00021403 */ sra $v0, $v0, 0x10
/* 4710C 8006BD0C 04410013 */ bgez $v0, .L8006BD5C
/* 47110 8006BD10 A7A30038 */ sh $v1, 0x38($sp)
/* 47114 8006BD14 00021023 */ negu $v0, $v0
/* 47118 8006BD18 24420003 */ addiu $v0, $v0, 3
/* 4711C 8006BD1C 2403FFFC */ addiu $v1, $zero, -4
/* 47120 8006BD20 00431824 */ and $v1, $v0, $v1
/* 47124 8006BD24 00031023 */ negu $v0, $v1
/* 47128 8006BD28 1860001F */ blez $v1, .L8006BDA8
/* 4712C 8006BD2C A7A20038 */ sh $v0, 0x38($sp)
/* 47130 8006BD30 3C04800A */ lui $a0, %hi(D_80099DD0)
/* 47134 8006BD34 24849DD0 */ addiu $a0, $a0, %lo(D_80099DD0)
.L8006BD38:
/* 47138 8006BD38 30620001 */ andi $v0, $v1, 1
/* 4713C 8006BD3C 10400003 */ beqz $v0, .L8006BD4C
/* 47140 8006BD40 00031843 */ sra $v1, $v1, 1
/* 47144 8006BD44 D4800000 */ ldc1 $f0, ($a0)
/* 47148 8006BD48 4620A502 */ mul.d $f20, $f20, $f0
.L8006BD4C:
/* 4714C 8006BD4C 1C60FFFA */ bgtz $v1, .L8006BD38
/* 47150 8006BD50 24840008 */ addiu $a0, $a0, 8
/* 47154 8006BD54 0801AF6A */ j .L8006BDA8
/* 47158 8006BD58 00000000 */ nop
.L8006BD5C:
/* 4715C 8006BD5C 18400012 */ blez $v0, .L8006BDA8
/* 47160 8006BD60 2402FFFC */ addiu $v0, $zero, -4
/* 47164 8006BD64 3C01800A */ lui $at, %hi(D_80099E20)
/* 47168 8006BD68 D4229E20 */ ldc1 $f2, %lo(D_80099E20)($at)
/* 4716C 8006BD6C 00621024 */ and $v0, $v1, $v0
/* 47170 8006BD70 00021C00 */ sll $v1, $v0, 0x10
/* 47174 8006BD74 00031C03 */ sra $v1, $v1, 0x10
/* 47178 8006BD78 1860000A */ blez $v1, .L8006BDA4
/* 4717C 8006BD7C A7A20038 */ sh $v0, 0x38($sp)
/* 47180 8006BD80 3C04800A */ lui $a0, %hi(D_80099DD0)
/* 47184 8006BD84 24849DD0 */ addiu $a0, $a0, %lo(D_80099DD0)
.L8006BD88:
/* 47188 8006BD88 30620001 */ andi $v0, $v1, 1
/* 4718C 8006BD8C 10400003 */ beqz $v0, .L8006BD9C
/* 47190 8006BD90 00031843 */ sra $v1, $v1, 1
/* 47194 8006BD94 D4800000 */ ldc1 $f0, ($a0)
/* 47198 8006BD98 46201082 */ mul.d $f2, $f2, $f0
.L8006BD9C:
/* 4719C 8006BD9C 1C60FFFA */ bgtz $v1, .L8006BD88
/* 471A0 8006BDA0 24840008 */ addiu $a0, $a0, 8
.L8006BDA4:
/* 471A4 8006BDA4 4622A503 */ div.d $f20, $f20, $f2
.L8006BDA8:
/* 471A8 8006BDA8 8E640024 */ lw $a0, 0x24($s3)
/* 471AC 8006BDAC 00151600 */ sll $v0, $s5, 0x18
/* 471B0 8006BDB0 00021603 */ sra $v0, $v0, 0x18
/* 471B4 8006BDB4 24030066 */ addiu $v1, $zero, 0x66
/* 471B8 8006BDB8 14430004 */ bne $v0, $v1, .L8006BDCC
/* 471BC 8006BDBC 24920006 */ addiu $s2, $a0, 6
/* 471C0 8006BDC0 87A30038 */ lh $v1, 0x38($sp)
/* 471C4 8006BDC4 2482000A */ addiu $v0, $a0, 0xa
/* 471C8 8006BDC8 00439021 */ addu $s2, $v0, $v1
.L8006BDCC:
/* 471CC 8006BDCC 2A420014 */ slti $v0, $s2, 0x14
/* 471D0 8006BDD0 50400001 */ beql $v0, $zero, .L8006BDD8
/* 471D4 8006BDD4 24120013 */ addiu $s2, $zero, 0x13
.L8006BDD8:
/* 471D8 8006BDD8 24020030 */ addiu $v0, $zero, 0x30
/* 471DC 8006BDDC A2220000 */ sb $v0, ($s1)
/* 471E0 8006BDE0 26310001 */ addiu $s1, $s1, 1
/* 471E4 8006BDE4 4480C000 */ mtc1 $zero, $f24
/* 471E8 8006BDE8 4480C800 */ mtc1 $zero, $f25
/* 471EC 8006BDEC 3C01800A */ lui $at, %hi(D_80099E28)
/* 471F0 8006BDF0 D4369E28 */ ldc1 $f22, %lo(D_80099E28)($at)
/* 471F4 8006BDF4 24140030 */ addiu $s4, $zero, 0x30
.L8006BDF8:
/* 471F8 8006BDF8 4634C03C */ c.lt.d $f24, $f20
/* 471FC 8006BDFC 24030001 */ addiu $v1, $zero, 1
/* 47200 8006BE00 00000000 */ nop
/* 47204 8006BE04 45010002 */ bc1t .L8006BE10
/* 47208 8006BE08 0012102A */ slt $v0, $zero, $s2
/* 4720C 8006BE0C 00001821 */ addu $v1, $zero, $zero
.L8006BE10:
/* 47210 8006BE10 00431024 */ and $v0, $v0, $v1
/* 47214 8006BE14 10400021 */ beqz $v0, .L8006BE9C
/* 47218 8006BE18 2652FFF8 */ addiu $s2, $s2, -8
/* 4721C 8006BE1C 4620A00D */ trunc.w.d $f0, $f20
/* 47220 8006BE20 44050000 */ mfc1 $a1, $f0
/* 47224 8006BE24 00000000 */ nop
/* 47228 8006BE28 1A400006 */ blez $s2, .L8006BE44
/* 4722C 8006BE2C 26310008 */ addiu $s1, $s1, 8
/* 47230 8006BE30 44850000 */ mtc1 $a1, $f0
/* 47234 8006BE34 00000000 */ nop
/* 47238 8006BE38 46800021 */ cvt.d.w $f0, $f0
/* 4723C 8006BE3C 4620A001 */ sub.d $f0, $f20, $f0
/* 47240 8006BE40 46360502 */ mul.d $f20, $f0, $f22
.L8006BE44:
/* 47244 8006BE44 18A00010 */ blez $a1, .L8006BE88
/* 47248 8006BE48 24100008 */ addiu $s0, $zero, 8
/* 4724C 8006BE4C 2610FFFF */ addiu $s0, $s0, -1
.L8006BE50:
/* 47250 8006BE50 0600000D */ bltz $s0, .L8006BE88
/* 47254 8006BE54 27A40040 */ addiu $a0, $sp, 0x40
/* 47258 8006BE58 0C01B588 */ jal ldiv
/* 4725C 8006BE5C 2406000A */ addiu $a2, $zero, 0xa
/* 47260 8006BE60 8FA20044 */ lw $v0, 0x44($sp)
/* 47264 8006BE64 2631FFFF */ addiu $s1, $s1, -1
/* 47268 8006BE68 24420030 */ addiu $v0, $v0, 0x30
/* 4726C 8006BE6C A2220000 */ sb $v0, ($s1)
/* 47270 8006BE70 8FA50040 */ lw $a1, 0x40($sp)
/* 47274 8006BE74 1CA0FFF6 */ bgtz $a1, .L8006BE50
/* 47278 8006BE78 2610FFFF */ addiu $s0, $s0, -1
/* 4727C 8006BE7C 0801AFA3 */ j .L8006BE8C
/* 47280 8006BE80 00000000 */ nop
.L8006BE84:
/* 47284 8006BE84 A2340000 */ sb $s4, ($s1)
.L8006BE88:
/* 47288 8006BE88 2610FFFF */ addiu $s0, $s0, -1
.L8006BE8C:
/* 4728C 8006BE8C 0603FFFD */ bgezl $s0, .L8006BE84
/* 47290 8006BE90 2631FFFF */ addiu $s1, $s1, -1
/* 47294 8006BE94 0801AF7E */ j .L8006BDF8
/* 47298 8006BE98 26310008 */ addiu $s1, $s1, 8
.L8006BE9C:
/* 4729C 8006BE9C 2623FFFF */ addiu $v1, $s1, -1
/* 472A0 8006BEA0 27A20018 */ addiu $v0, $sp, 0x18
/* 472A4 8006BEA4 00629023 */ subu $s2, $v1, $v0
/* 472A8 8006BEA8 97A20038 */ lhu $v0, 0x38($sp)
/* 472AC 8006BEAC 83A30019 */ lb $v1, 0x19($sp)
/* 472B0 8006BEB0 24420007 */ addiu $v0, $v0, 7
/* 472B4 8006BEB4 A7A20038 */ sh $v0, 0x38($sp)
/* 472B8 8006BEB8 24020030 */ addiu $v0, $zero, 0x30
/* 472BC 8006BEBC 14620009 */ bne $v1, $v0, .L8006BEE4
/* 472C0 8006BEC0 27B10019 */ addiu $s1, $sp, 0x19
/* 472C4 8006BEC4 24030030 */ addiu $v1, $zero, 0x30
.L8006BEC8:
/* 472C8 8006BEC8 97A20038 */ lhu $v0, 0x38($sp)
/* 472CC 8006BECC 26310001 */ addiu $s1, $s1, 1
/* 472D0 8006BED0 2442FFFF */ addiu $v0, $v0, -1
/* 472D4 8006BED4 A7A20038 */ sh $v0, 0x38($sp)
/* 472D8 8006BED8 82220000 */ lb $v0, ($s1)
/* 472DC 8006BEDC 1043FFFA */ beq $v0, $v1, .L8006BEC8
/* 472E0 8006BEE0 2652FFFF */ addiu $s2, $s2, -1
.L8006BEE4:
/* 472E4 8006BEE4 8E650024 */ lw $a1, 0x24($s3)
/* 472E8 8006BEE8 00151600 */ sll $v0, $s5, 0x18
/* 472EC 8006BEEC 00022603 */ sra $a0, $v0, 0x18
/* 472F0 8006BEF0 24020066 */ addiu $v0, $zero, 0x66
/* 472F4 8006BEF4 14820005 */ bne $a0, $v0, .L8006BF0C
/* 472F8 8006BEF8 38830065 */ xori $v1, $a0, 0x65
/* 472FC 8006BEFC 87A30038 */ lh $v1, 0x38($sp)
/* 47300 8006BF00 24A20001 */ addiu $v0, $a1, 1
/* 47304 8006BF04 0801AFC8 */ j .L8006BF20
/* 47308 8006BF08 00433821 */ addu $a3, $v0, $v1
.L8006BF0C:
/* 4730C 8006BF0C 2C630001 */ sltiu $v1, $v1, 1
/* 47310 8006BF10 38820045 */ xori $v0, $a0, 0x45
/* 47314 8006BF14 2C420001 */ sltiu $v0, $v0, 1
/* 47318 8006BF18 00621825 */ or $v1, $v1, $v0
/* 4731C 8006BF1C 00A33821 */ addu $a3, $a1, $v1
.L8006BF20:
/* 47320 8006BF20 00071400 */ sll $v0, $a3, 0x10
/* 47324 8006BF24 00021403 */ sra $v0, $v0, 0x10
/* 47328 8006BF28 0242102A */ slt $v0, $s2, $v0
/* 4732C 8006BF2C 54400001 */ bnel $v0, $zero, .L8006BF34
/* 47330 8006BF30 02403821 */ addu $a3, $s2, $zero
.L8006BF34:
/* 47334 8006BF34 00071400 */ sll $v0, $a3, 0x10
/* 47338 8006BF38 00022403 */ sra $a0, $v0, 0x10
/* 4733C 8006BF3C 18800022 */ blez $a0, .L8006BFC8
/* 47340 8006BF40 0092102A */ slt $v0, $a0, $s2
/* 47344 8006BF44 10400008 */ beqz $v0, .L8006BF68
/* 47348 8006BF48 24030030 */ addiu $v1, $zero, 0x30
/* 4734C 8006BF4C 02241021 */ addu $v0, $s1, $a0
/* 47350 8006BF50 80420000 */ lb $v0, ($v0)
/* 47354 8006BF54 28420035 */ slti $v0, $v0, 0x35
/* 47358 8006BF58 38420001 */ xori $v0, $v0, 1
/* 4735C 8006BF5C 00021023 */ negu $v0, $v0
/* 47360 8006BF60 30420039 */ andi $v0, $v0, 0x39
/* 47364 8006BF64 34430030 */ ori $v1, $v0, 0x30
.L8006BF68:
/* 47368 8006BF68 2485FFFF */ addiu $a1, $a0, -1
/* 4736C 8006BF6C 02252021 */ addu $a0, $s1, $a1
/* 47370 8006BF70 80820000 */ lb $v0, ($a0)
/* 47374 8006BF74 54430008 */ bnel $v0, $v1, .L8006BF98
/* 47378 8006BF78 24020039 */ addiu $v0, $zero, 0x39
/* 4737C 8006BF7C 00403021 */ addu $a2, $v0, $zero
.L8006BF80:
/* 47380 8006BF80 2484FFFF */ addiu $a0, $a0, -1
/* 47384 8006BF84 80820000 */ lb $v0, ($a0)
/* 47388 8006BF88 24E7FFFF */ addiu $a3, $a3, -1
/* 4738C 8006BF8C 1046FFFC */ beq $v0, $a2, .L8006BF80
/* 47390 8006BF90 24A5FFFF */ addiu $a1, $a1, -1
/* 47394 8006BF94 24020039 */ addiu $v0, $zero, 0x39
.L8006BF98:
/* 47398 8006BF98 14620004 */ bne $v1, $v0, .L8006BFAC
/* 4739C 8006BF9C 02251821 */ addu $v1, $s1, $a1
/* 473A0 8006BFA0 90620000 */ lbu $v0, ($v1)
/* 473A4 8006BFA4 24420001 */ addiu $v0, $v0, 1
/* 473A8 8006BFA8 A0620000 */ sb $v0, ($v1)
.L8006BFAC:
/* 473AC 8006BFAC 04A10007 */ bgez $a1, .L8006BFCC
/* 473B0 8006BFB0 02602021 */ addu $a0, $s3, $zero
/* 473B4 8006BFB4 97A20038 */ lhu $v0, 0x38($sp)
/* 473B8 8006BFB8 2631FFFF */ addiu $s1, $s1, -1
/* 473BC 8006BFBC 24E70001 */ addiu $a3, $a3, 1
/* 473C0 8006BFC0 24420001 */ addiu $v0, $v0, 1
/* 473C4 8006BFC4 A7A20038 */ sh $v0, 0x38($sp)
.L8006BFC8:
/* 473C8 8006BFC8 02602021 */ addu $a0, $s3, $zero
.L8006BFCC:
/* 473CC 8006BFCC 00152E00 */ sll $a1, $s5, 0x18
/* 473D0 8006BFD0 87A20038 */ lh $v0, 0x38($sp)
/* 473D4 8006BFD4 00052E03 */ sra $a1, $a1, 0x18
/* 473D8 8006BFD8 02203021 */ addu $a2, $s1, $zero
/* 473DC 8006BFDC 00073C00 */ sll $a3, $a3, 0x10
/* 473E0 8006BFE0 00073C03 */ sra $a3, $a3, 0x10
/* 473E4 8006BFE4 0C01B02D */ jal _Genld
/* 473E8 8006BFE8 AFA20010 */ sw $v0, 0x10($sp)
.L8006BFEC:
/* 473EC 8006BFEC 8FBF0060 */ lw $ra, 0x60($sp)
/* 473F0 8006BFF0 8FB5005C */ lw $s5, 0x5c($sp)
/* 473F4 8006BFF4 8FB40058 */ lw $s4, 0x58($sp)
/* 473F8 8006BFF8 8FB30054 */ lw $s3, 0x54($sp)
/* 473FC 8006BFFC 8FB20050 */ lw $s2, 0x50($sp)
/* 47400 8006C000 8FB1004C */ lw $s1, 0x4c($sp)
/* 47404 8006C004 8FB00048 */ lw $s0, 0x48($sp)
/* 47408 8006C008 D7B80078 */ ldc1 $f24, 0x78($sp)
/* 4740C 8006C00C D7B60070 */ ldc1 $f22, 0x70($sp)
/* 47410 8006C010 D7B40068 */ ldc1 $f20, 0x68($sp)
/* 47414 8006C014 03E00008 */ jr $ra
/* 47418 8006C018 27BD0080 */ addiu $sp, $sp, 0x80

View File

@ -1,46 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel _Ldunscale
/* 4741C 8006C01C 94A30000 */ lhu $v1, ($a1)
/* 47420 8006C020 30627FF0 */ andi $v0, $v1, 0x7ff0
/* 47424 8006C024 00023902 */ srl $a3, $v0, 4
/* 47428 8006C028 00E03021 */ addu $a2, $a3, $zero
/* 4742C 8006C02C 240207FF */ addiu $v0, $zero, 0x7ff
/* 47430 8006C030 14C20011 */ bne $a2, $v0, .L8006C078
/* 47434 8006C034 00A04021 */ addu $t0, $a1, $zero
/* 47438 8006C038 A4800000 */ sh $zero, ($a0)
/* 4743C 8006C03C 94A20000 */ lhu $v0, ($a1)
/* 47440 8006C040 3042000F */ andi $v0, $v0, 0xf
/* 47444 8006C044 14400019 */ bnez $v0, .L8006C0AC
/* 47448 8006C048 24020002 */ addiu $v0, $zero, 2
/* 4744C 8006C04C 94A20002 */ lhu $v0, 2($a1)
/* 47450 8006C050 14400016 */ bnez $v0, .L8006C0AC
/* 47454 8006C054 24020002 */ addiu $v0, $zero, 2
/* 47458 8006C058 94A20004 */ lhu $v0, 4($a1)
/* 4745C 8006C05C 14400013 */ bnez $v0, .L8006C0AC
/* 47460 8006C060 24020002 */ addiu $v0, $zero, 2
/* 47464 8006C064 94A20006 */ lhu $v0, 6($a1)
/* 47468 8006C068 14400010 */ bnez $v0, .L8006C0AC
/* 4746C 8006C06C 24020002 */ addiu $v0, $zero, 2
/* 47470 8006C070 0801B02B */ j .L8006C0AC
/* 47474 8006C074 24020001 */ addiu $v0, $zero, 1
.L8006C078:
/* 47478 8006C078 18C00007 */ blez $a2, .L8006C098
/* 4747C 8006C07C 2402FFFF */ addiu $v0, $zero, -1
/* 47480 8006C080 3063800F */ andi $v1, $v1, 0x800f
/* 47484 8006C084 34633FF0 */ ori $v1, $v1, 0x3ff0
/* 47488 8006C088 A5030000 */ sh $v1, ($t0)
/* 4748C 8006C08C 24E3FC02 */ addiu $v1, $a3, -0x3fe
/* 47490 8006C090 0801B02B */ j .L8006C0AC
/* 47494 8006C094 A4830000 */ sh $v1, ($a0)
.L8006C098:
/* 47498 8006C098 04C00003 */ bltz $a2, .L8006C0A8
/* 4749C 8006C09C 00001021 */ addu $v0, $zero, $zero
/* 474A0 8006C0A0 0801B02B */ j .L8006C0AC
/* 474A4 8006C0A4 A4800000 */ sh $zero, ($a0)
.L8006C0A8:
/* 474A8 8006C0A8 24020002 */ addiu $v0, $zero, 2
.L8006C0AC:
/* 474AC 8006C0AC 03E00008 */ jr $ra
/* 474B0 8006C0B0 00000000 */ nop

View File

@ -1,164 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel _Litob
/* 46D80 8006B980 27BDFFA0 */ addiu $sp, $sp, -0x60
/* 46D84 8006B984 AFB10044 */ sw $s1, 0x44($sp)
/* 46D88 8006B988 00808821 */ addu $s1, $a0, $zero
/* 46D8C 8006B98C AFB60058 */ sw $s6, 0x58($sp)
/* 46D90 8006B990 3C168009 */ lui $s6, %hi(D_80095940)
/* 46D94 8006B994 26D65940 */ addiu $s6, $s6, %lo(D_80095940)
/* 46D98 8006B998 00A02021 */ addu $a0, $a1, $zero
/* 46D9C 8006B99C 00052E00 */ sll $a1, $a1, 0x18
/* 46DA0 8006B9A0 00052E03 */ sra $a1, $a1, 0x18
/* 46DA4 8006B9A4 24020058 */ addiu $v0, $zero, 0x58
/* 46DA8 8006B9A8 AFBF005C */ sw $ra, 0x5c($sp)
/* 46DAC 8006B9AC AFB50054 */ sw $s5, 0x54($sp)
/* 46DB0 8006B9B0 AFB40050 */ sw $s4, 0x50($sp)
/* 46DB4 8006B9B4 AFB3004C */ sw $s3, 0x4c($sp)
/* 46DB8 8006B9B8 AFB20048 */ sw $s2, 0x48($sp)
/* 46DBC 8006B9BC 14A20003 */ bne $a1, $v0, .L8006B9CC
/* 46DC0 8006B9C0 AFB00040 */ sw $s0, 0x40($sp)
/* 46DC4 8006B9C4 3C168009 */ lui $s6, %hi(D_80095954)
/* 46DC8 8006B9C8 26D65954 */ addiu $s6, $s6, %lo(D_80095954)
.L8006B9CC:
/* 46DCC 8006B9CC 2402006F */ addiu $v0, $zero, 0x6f
/* 46DD0 8006B9D0 10A20009 */ beq $a1, $v0, .L8006B9F8
/* 46DD4 8006B9D4 38A30078 */ xori $v1, $a1, 0x78
/* 46DD8 8006B9D8 0003182B */ sltu $v1, $zero, $v1
/* 46DDC 8006B9DC 38A20058 */ xori $v0, $a1, 0x58
/* 46DE0 8006B9E0 0002102B */ sltu $v0, $zero, $v0
/* 46DE4 8006B9E4 00621824 */ and $v1, $v1, $v0
/* 46DE8 8006B9E8 10600004 */ beqz $v1, .L8006B9FC
/* 46DEC 8006B9EC 24130010 */ addiu $s3, $zero, 0x10
/* 46DF0 8006B9F0 0801AE7F */ j .L8006B9FC
/* 46DF4 8006B9F4 2413000A */ addiu $s3, $zero, 0xa
.L8006B9F8:
/* 46DF8 8006B9F8 24130008 */ addiu $s3, $zero, 8
.L8006B9FC:
/* 46DFC 8006B9FC 8E340000 */ lw $s4, ($s1)
/* 46E00 8006BA00 8E350004 */ lw $s5, 4($s1)
/* 46E04 8006BA04 00041600 */ sll $v0, $a0, 0x18
/* 46E08 8006BA08 00021603 */ sra $v0, $v0, 0x18
/* 46E0C 8006BA0C 38430064 */ xori $v1, $v0, 0x64
/* 46E10 8006BA10 2C630001 */ sltiu $v1, $v1, 1
/* 46E14 8006BA14 38420069 */ xori $v0, $v0, 0x69
/* 46E18 8006BA18 2C420001 */ sltiu $v0, $v0, 1
/* 46E1C 8006BA1C 00621825 */ or $v1, $v1, $v0
/* 46E20 8006BA20 10600008 */ beqz $v1, .L8006BA44
/* 46E24 8006BA24 24120018 */ addiu $s2, $zero, 0x18
/* 46E28 8006BA28 8E220000 */ lw $v0, ($s1)
/* 46E2C 8006BA2C 04410005 */ bgez $v0, .L8006BA44
/* 46E30 8006BA30 00000000 */ nop
/* 46E34 8006BA34 0015A823 */ negu $s5, $s5
/* 46E38 8006BA38 0014A023 */ negu $s4, $s4
/* 46E3C 8006BA3C 0015102B */ sltu $v0, $zero, $s5
/* 46E40 8006BA40 0282A023 */ subu $s4, $s4, $v0
.L8006BA44:
/* 46E44 8006BA44 56800007 */ bnel $s4, $zero, .L8006BA64
/* 46E48 8006BA48 2652FFFF */ addiu $s2, $s2, -1
/* 46E4C 8006BA4C 56A00005 */ bnel $s5, $zero, .L8006BA64
/* 46E50 8006BA50 2652FFFF */ addiu $s2, $s2, -1
/* 46E54 8006BA54 8E220024 */ lw $v0, 0x24($s1)
/* 46E58 8006BA58 1040000D */ beqz $v0, .L8006BA90
/* 46E5C 8006BA5C 02603821 */ addu $a3, $s3, $zero
/* 46E60 8006BA60 2652FFFF */ addiu $s2, $s2, -1
.L8006BA64:
/* 46E64 8006BA64 02603821 */ addu $a3, $s3, $zero
/* 46E68 8006BA68 00003021 */ addu $a2, $zero, $zero
/* 46E6C 8006BA6C 02802021 */ addu $a0, $s4, $zero
/* 46E70 8006BA70 02A02821 */ addu $a1, $s5, $zero
/* 46E74 8006BA74 27B00018 */ addiu $s0, $sp, 0x18
/* 46E78 8006BA78 0C01BA1C */ jal __umoddi3
/* 46E7C 8006BA7C 02128021 */ addu $s0, $s0, $s2
/* 46E80 8006BA80 02C31021 */ addu $v0, $s6, $v1
/* 46E84 8006BA84 90420000 */ lbu $v0, ($v0)
/* 46E88 8006BA88 A2020000 */ sb $v0, ($s0)
/* 46E8C 8006BA8C 02603821 */ addu $a3, $s3, $zero
.L8006BA90:
/* 46E90 8006BA90 00003021 */ addu $a2, $zero, $zero
/* 46E94 8006BA94 02802021 */ addu $a0, $s4, $zero
/* 46E98 8006BA98 0C01B8C4 */ jal __udivdi3
/* 46E9C 8006BA9C 02A02821 */ addu $a1, $s5, $zero
/* 46EA0 8006BAA0 AE220000 */ sw $v0, ($s1)
/* 46EA4 8006BAA4 AE230004 */ sw $v1, 4($s1)
/* 46EA8 8006BAA8 27A20018 */ addiu $v0, $sp, 0x18
/* 46EAC 8006BAAC 02428021 */ addu $s0, $s2, $v0
.L8006BAB0:
/* 46EB0 8006BAB0 8E220000 */ lw $v0, ($s1)
/* 46EB4 8006BAB4 1C400006 */ bgtz $v0, .L8006BAD0
/* 46EB8 8006BAB8 00001821 */ addu $v1, $zero, $zero
/* 46EBC 8006BABC 14400006 */ bnez $v0, .L8006BAD8
/* 46EC0 8006BAC0 0012102A */ slt $v0, $zero, $s2
/* 46EC4 8006BAC4 8E220004 */ lw $v0, 4($s1)
/* 46EC8 8006BAC8 10400003 */ beqz $v0, .L8006BAD8
/* 46ECC 8006BACC 0012102A */ slt $v0, $zero, $s2
.L8006BAD0:
/* 46ED0 8006BAD0 24030001 */ addiu $v1, $zero, 1
/* 46ED4 8006BAD4 0012102A */ slt $v0, $zero, $s2
.L8006BAD8:
/* 46ED8 8006BAD8 00621024 */ and $v0, $v1, $v0
/* 46EDC 8006BADC 10400014 */ beqz $v0, .L8006BB30
/* 46EE0 8006BAE0 02601821 */ addu $v1, $s3, $zero
/* 46EE4 8006BAE4 8E260000 */ lw $a2, ($s1)
/* 46EE8 8006BAE8 8E270004 */ lw $a3, 4($s1)
/* 46EEC 8006BAEC 001317C3 */ sra $v0, $s3, 0x1f
/* 46EF0 8006BAF0 AFA20010 */ sw $v0, 0x10($sp)
/* 46EF4 8006BAF4 AFA30014 */ sw $v1, 0x14($sp)
/* 46EF8 8006BAF8 0C01B5A9 */ jal lldiv
/* 46EFC 8006BAFC 27A40030 */ addiu $a0, $sp, 0x30
/* 46F00 8006BB00 8FA20030 */ lw $v0, 0x30($sp)
/* 46F04 8006BB04 8FA30034 */ lw $v1, 0x34($sp)
/* 46F08 8006BB08 AE220000 */ sw $v0, ($s1)
/* 46F0C 8006BB0C AE230004 */ sw $v1, 4($s1)
/* 46F10 8006BB10 8FA20038 */ lw $v0, 0x38($sp)
/* 46F14 8006BB14 8FA3003C */ lw $v1, 0x3c($sp)
/* 46F18 8006BB18 02C31021 */ addu $v0, $s6, $v1
/* 46F1C 8006BB1C 90420000 */ lbu $v0, ($v0)
/* 46F20 8006BB20 2610FFFF */ addiu $s0, $s0, -1
/* 46F24 8006BB24 2652FFFF */ addiu $s2, $s2, -1
/* 46F28 8006BB28 0801AEAC */ j .L8006BAB0
/* 46F2C 8006BB2C A2020000 */ sb $v0, ($s0)
.L8006BB30:
/* 46F30 8006BB30 8E240008 */ lw $a0, 8($s1)
/* 46F34 8006BB34 27A50018 */ addiu $a1, $sp, 0x18
/* 46F38 8006BB38 00B22821 */ addu $a1, $a1, $s2
/* 46F3C 8006BB3C 24060018 */ addiu $a2, $zero, 0x18
/* 46F40 8006BB40 00D23023 */ subu $a2, $a2, $s2
/* 46F44 8006BB44 0C01929D */ jal memcpy
/* 46F48 8006BB48 AE260014 */ sw $a2, 0x14($s1)
/* 46F4C 8006BB4C 8E240014 */ lw $a0, 0x14($s1)
/* 46F50 8006BB50 8E230024 */ lw $v1, 0x24($s1)
/* 46F54 8006BB54 0083102A */ slt $v0, $a0, $v1
/* 46F58 8006BB58 10400002 */ beqz $v0, .L8006BB64
/* 46F5C 8006BB5C 00641023 */ subu $v0, $v1, $a0
/* 46F60 8006BB60 AE220010 */ sw $v0, 0x10($s1)
.L8006BB64:
/* 46F64 8006BB64 8E220024 */ lw $v0, 0x24($s1)
/* 46F68 8006BB68 0441000F */ bgez $v0, .L8006BBA8
/* 46F6C 8006BB6C 24030010 */ addiu $v1, $zero, 0x10
/* 46F70 8006BB70 8E220030 */ lw $v0, 0x30($s1)
/* 46F74 8006BB74 30420014 */ andi $v0, $v0, 0x14
/* 46F78 8006BB78 1443000B */ bne $v0, $v1, .L8006BBA8
/* 46F7C 8006BB7C 00000000 */ nop
/* 46F80 8006BB80 8E220028 */ lw $v0, 0x28($s1)
/* 46F84 8006BB84 8E23000C */ lw $v1, 0xc($s1)
/* 46F88 8006BB88 8E250010 */ lw $a1, 0x10($s1)
/* 46F8C 8006BB8C 8E240014 */ lw $a0, 0x14($s1)
/* 46F90 8006BB90 00431023 */ subu $v0, $v0, $v1
/* 46F94 8006BB94 00451023 */ subu $v0, $v0, $a1
/* 46F98 8006BB98 00449023 */ subu $s2, $v0, $a0
/* 46F9C 8006BB9C 1A400002 */ blez $s2, .L8006BBA8
/* 46FA0 8006BBA0 00B21021 */ addu $v0, $a1, $s2
/* 46FA4 8006BBA4 AE220010 */ sw $v0, 0x10($s1)
.L8006BBA8:
/* 46FA8 8006BBA8 8FBF005C */ lw $ra, 0x5c($sp)
/* 46FAC 8006BBAC 8FB60058 */ lw $s6, 0x58($sp)
/* 46FB0 8006BBB0 8FB50054 */ lw $s5, 0x54($sp)
/* 46FB4 8006BBB4 8FB40050 */ lw $s4, 0x50($sp)
/* 46FB8 8006BBB8 8FB3004C */ lw $s3, 0x4c($sp)
/* 46FBC 8006BBBC 8FB20048 */ lw $s2, 0x48($sp)
/* 46FC0 8006BBC0 8FB10044 */ lw $s1, 0x44($sp)
/* 46FC4 8006BBC4 8FB00040 */ lw $s0, 0x40($sp)
/* 46FC8 8006BBC8 03E00008 */ jr $ra
/* 46FCC 8006BBCC 27BD0060 */ addiu $sp, $sp, 0x60

View File

@ -235,7 +235,7 @@ segments:
- [0x457C0, c, os/contramwrite, gcc_272 -O3]
- [0x459D0, hasm, os/parameters] # Needs actual symbols added
- [0x45A30, c, os/afterprenmi, gcc_272 -O3]
- [0x45A50, c, os/initialize]
- [0x45A50, c, os/initialize, gcc_272 -O3]
- [0x45DF0, hasm, os/exceptasm]
- [0x46760, hasm, os/__osDisableInt]
- [0x467D0, hasm, os/__osRestoreInt]
@ -247,8 +247,8 @@ segments:
- [0x46AE0, c, os/epirawwrite, gcc_272 -O3]
- [0x46C50, c, os/ai, gcc_272 -O3]
- [0x46C70, hasm, os/bcmp]
- [0x46D80, c, os/xlitob]
- [0x46FD0, c, os/xldtob]
- [0x46D80, c, os/xlitob, gcc_272 -O3]
- [0x46FD0, c, os/xldtob, gcc_272 -O3]
- [0x47A60, hasm, os/__osGetCause]
- [0x47A70, hasm, os/__osGetSR]
- [0x47A80, hasm, os/__osSetCompare]
@ -265,7 +265,7 @@ segments:
- [0x47C60, c, os/crc, gcc_272 -O3]
- [0x47D50, c, os/destroythread, gcc_272 -O3]
- [0x47E30, hasm, os/osMapTLBRdb]
- [0x47E90, c, os/vi]
- [0x47E90, c, os/vi, gcc_272 -O3]
- [0x47FA0, c, os/vigetcurrcontext, gcc_272 -O3]
- [0x47FB0, hasm, os/padding]
- [0x47FC0, hasm, os/guNormalize]
@ -359,7 +359,12 @@ segments:
- [0x6FA70, .data, os/timerintr] # libultra data
- [auto, .data, os/vimgr]
- [auto, .data, os/vitbl]
- [0x70C20, data, 70C20]
- [auto, .data, os/guRotate]
- [auto, .data, os/contpfs]
- [auto, .data, os/contramread]
- [auto, .data, os/initialize]
- [auto, .data, os/xlitob]
- [auto, .data, os/vi]
- [0x70E30, .data, battle/battle]
- [0x71430, bin, gspF3DEX2kawase_fifo_text]
- [0x72A60, bin, gspF3DEX2kawase_fifo_data]

View File

@ -2437,8 +2437,8 @@ __osRunQueue = 0x80094658; // type:data rom:0x6FA58
__osActiveQueue = 0x8009465C; // type:data rom:0x6FA5C
__osRunningThread = 0x80094660; // type:data rom:0x6FA60
osViModeTable = 0x800946A0; // rom:0x6FAA0
_osViModeNtscLan1 = 0x80095820; // type:data rom:0x70C20
_osViModeMPalLan1 = 0x80095870; // type:data rom:0x70C70
osViModeNtscLan1 = 0x80095820; // type:data rom:0x70C20
osViModeMpalLan1 = 0x80095870; // type:data rom:0x70C70
gBattleAreas = 0x80095A30; // type:data rom:0x70E30 size:0x600
D_80097D30 = 0x80097D30; // type:data rom:0x73130
D_80097DC8 = 0x80097DC8; // type:data rom:0x731C8
@ -2590,7 +2590,7 @@ gOverrideFlags = 0x8009A650; // type:data rom:0x75A50
D_8009A654 = 0x8009A654; // type:data rom:0x75A54
nuGfxCfb = 0x8009A658; // type:data rom:0x75A58
D_8009A65C = 0x8009A65C; // type:data rom:0x75A5C
D_8009A660 = 0x8009A660; // type:data rom:0x75A60
__osFinalrom = 0x8009A660; // type:data rom:0x75A60
gBGMPlayerA = 0x8009A664; // type:data rom:0x75A64
D_8009A668 = 0x8009A668; // type:data rom:0x75A68
gMasterGfxPos = 0x8009A66C; // rom:0x75A6C
@ -25715,9 +25715,9 @@ obfuscated_general_heap_create = 0x7012BC11; // type:data
D_7599F6D8 = 0x7599F6D8; // type:data
osTvType = 0x80000300; //
osRomBase = 0x80000308; // type:data
D_8000030C = 0x8000030C; // type:data
osResetType = 0x8000030C; // type:data
osMemSize = 0x80000318; // type:data
D_8000031C = 0x8000031C; // type:data
osAppNMIBuffer = 0x8000031C; // type:data
obfuscated_load_engine_data = 0x80026AC7; // type:data
dead_atan2 = 0x8002AF70; // type:data
obfuscated_create_audio_system = 0x8004AA85; // type:data

View File

@ -26,6 +26,9 @@ D_F0000008 = 0xF0000008;
D_F5000007 = 0xF5000007;
D_FA000028 = 0xFA000028;
D_FD100008 = 0xFD100008;
__osExceptionPreamble = 0x8006A9F0;
D_80095910 = 0x80095910;
D_80095938 = 0x80095938;
// Obfuscation symbols
obfuscated_battle_heap_create = battle_heap_create - 0xFEFFFFF;
@ -189,8 +192,8 @@ osRomBase = 0x80000308;
osMemSize = 0x80000318;
gBackgroundImage = 0x80200000;
D_80200000 = 0x80200000;
D_8000030C = 0x8000030C;
D_8000031C = 0x8000031C;
osResetType = 0x8000030C;
osAppNMIBuffer = 0x8000031C;
D_800A08C0 = 0x800A08C0;
// effect tlb stuff