Match libultra iQue ver (#1111)

* match libultra ique pt 1

* add sgidefs.h to include/gcc

* recvmesg match + _getcount

* add elfpatch.py for those compiled with -mips3

* pt 2

* os/setthreadpri(.data) -> os/thread

* os thread matches

* os timer matches

* pt 4 (erm... 3?)

* vitbl

* os pi matches

* pt. uhmmmm, i've lost track...

* os pfs matches

* replace elfpatch.py

* pt. just forget it...

* outsource from ultralib ique branch

* .

* . 2

* final blow

* add egcs compiler to Jenkinsfile

* fix errors from CI

* minor changes as requested
This commit is contained in:
AltoXorg 2023-08-17 01:29:21 +08:00 committed by GitHub
parent b22883da65
commit b171712e0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
221 changed files with 2802 additions and 52407 deletions

2
Jenkinsfile vendored
View File

@ -15,6 +15,8 @@ pipeline {
sh 'curl -L "https://github.com/decompals/ido-static-recomp/releases/download/v0.2/ido-5.3-recomp-ubuntu-latest.tar.gz" | tar zx -C tools/build/cc/ido5.3'
sh 'curl -L "https://github.com/decompals/mips-gcc-2.7.2/releases/download/main/gcc-2.7.2-linux.tar.gz" | tar zx -C tools/build/cc/gcc2.7.2'
sh 'curl -L "https://github.com/decompals/mips-binutils-2.6/releases/download/main/binutils-2.6-linux.tar.gz" | tar zx -C tools/build/cc/gcc2.7.2'
sh 'curl -L "https://github.com/decompals/mips-binutils-egcs-2.9.5/releases/latest/download/mips-binutils-egcs-2.9.5-linux.tar.gz" | tar zx -C tools/build/cc/egcs'
sh 'curl -L "https://github.com/decompals/mips-gcc-egcs-2.91.66/releases/latest/download/mips-gcc-egcs-2.91.66-linux.tar.gz" | tar zx -C tools/build/cc/egcs'
sh 'pip install -U -r requirements.txt'
sh 'cargo install pigment64'
sh './configure'

115
include/PR/bcp.h Normal file
View File

@ -0,0 +1,115 @@
#ifndef _BCP_H_
#define _BCP_H_
#ifdef BBPLAYER
#include "rcp.h"
/**
* MIPS Interface (MI) Additional Registers
*/
//! MI_SK_EXCEPTION_REG ?
#define MI_14_REG (MI_BASE_REG + 0x14)
//! ?
#define MI_30_REG (MI_BASE_REG + 0x30)
//! ?
#define MI_38_REG (MI_BASE_REG + 0x38)
//! MI_HW_INTR_MASK_REG ?
#define MI_3C_REG (MI_BASE_REG + 0x3C)
/**
* Peripheral Interface (PI) Additional Registers
*/
//! PI_ATB_UPPER_REG ?
#define PI_40_REG (PI_BASE_REG + 0x40)
//! ?
#define PI_44_REG (PI_BASE_REG + 0x44)
//! PI_CARD_CNT_REG ?
#define PI_48_REG (PI_BASE_REG + 0x48)
//! ?
#define PI_4C_REG (PI_BASE_REG + 0x4C)
//! PI_AES_CNT_REG ?
#define PI_50_REG (PI_BASE_REG + 0x50)
//! PI_ALLOWED_IO_REG ?
#define PI_54_REG (PI_BASE_REG + 0x54)
//! ?
#define PI_58_REG (PI_BASE_REG + 0x58)
//! ?
#define PI_5C_REG (PI_BASE_REG + 0x5C)
//! PI_MISC_REG ?
#define PI_60_REG (PI_BASE_REG + 0x60)
//! ?
#define PI_64_REG (PI_BASE_REG + 0x64)
//! PI_CARD_BLK_OFFSET_REG ?
#define PI_70_REG (PI_BASE_REG + 0x70)
//! PI_EX_DMA_BUF ?
#define PI_10000_REG(i) (PI_BASE_REG + 0x10000 + (i))
//! PI_ATB_LOWER_REG ?
#define PI_10500_REG(i) (PI_BASE_REG + 0x10500 + (i) * 4)
/**
* Serial Interface (SI) Additional Registers
*/
//! ?
#define SI_0C_REG (SI_BASE_REG + 0x0C)
//! ?
#define SI_1C_REG (SI_BASE_REG + 0x1C)
#endif
#endif

View File

@ -1,17 +1,21 @@
#ifndef _CONTROLLER_H
#define _CONTROLLER_H
#include "os_internal.h"
#include "rcp.h"
//should go somewhere else but
#define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4)
#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0])))
#define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4)
typedef struct {
typedef struct
{
/* 0x0 */ u32 ramarray[15];
/* 0x3C */ u32 pifstatus;
} OSPifRam;
typedef struct {
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
@ -103,70 +107,93 @@ typedef struct
/* 0x4 */ u8 data[EEPROM_BLOCK_SIZE];
} __OSContEepromFormat;
#define PFS_ONE_PAGE 8
#define PFS_PAGE_SIZE (BLOCKSIZE*PFS_ONE_PAGE)
#define PFS_INODE_SIZE_PER_PAGE 128
#define PFS_ID_0AREA 1
#define PFS_ID_1AREA 3
#define PFS_ID_2AREA 4
#define PFS_ID_3AREA 6
#define PFS_LABEL_AREA 7
#define PFS_WRITTEN 2
#define PFS_EOF 1
#define PFS_PAGE_NOT_EXIST 2
#define PFS_PAGE_NOT_USED 3
#define PFS_FORCE 1
#define PFS_ID_BANK_256K 0
// Joybus commands
//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage
#define CONT_CMD_REQUEST_STATUS 0
#define CONT_CMD_READ_BUTTON 1
#define CONT_CMD_READ_MEMPACK 2
#define CONT_CMD_WRITE_MEMPACK 3
#define CONT_CMD_READ_EEPROM 4
#define CONT_CMD_WRITE_EEPROM 5
#define CONT_CMD_RESET 0xff
#define CONT_CMD_REQUEST_STATUS 0
#define CONT_CMD_READ_BUTTON 1
#define CONT_CMD_READ_PAK 2
#define CONT_CMD_WRITE_PAK 3
#define CONT_CMD_READ_EEPROM 4
#define CONT_CMD_WRITE_EEPROM 5
#define CONT_CMD_READ36_VOICE 9
#define CONT_CMD_WRITE20_VOICE 10
#define CONT_CMD_READ2_VOICE 11
#define CONT_CMD_WRITE4_VOICE 12
#define CONT_CMD_SWRITE_VOICE 13
#define CONT_CMD_CHANNEL_RESET 0xFD
#define CONT_CMD_RESET 0xFF
#define CONT_CMD_REQUEST_STATUS_TX 1
#define CONT_CMD_READ_BUTTON_TX 1
#define CONT_CMD_READ_MEMPACK_TX 3
#define CONT_CMD_WRITE_MEMPACK_TX 35
#define CONT_CMD_READ_EEPROM_TX 2
#define CONT_CMD_WRITE_EEPROM_TX 10
#define CONT_CMD_RESET_TX 1
// Bytes transmitted for each joybus command
#define CONT_CMD_REQUEST_STATUS_TX 1
#define CONT_CMD_READ_BUTTON_TX 1
#define CONT_CMD_READ_PAK_TX 3
#define CONT_CMD_WRITE_PAK_TX 35
#define CONT_CMD_READ_EEPROM_TX 2
#define CONT_CMD_WRITE_EEPROM_TX 10
#define CONT_CMD_READ36_VOICE_TX 3
#define CONT_CMD_WRITE20_VOICE_TX 23
#define CONT_CMD_READ2_VOICE_TX 3
#define CONT_CMD_WRITE4_VOICE_TX 7
#define CONT_CMD_SWRITE_VOICE_TX 3
#define CONT_CMD_RESET_TX 1
#define CONT_CMD_REQUEST_STATUS_RX 3
#define CONT_CMD_READ_BUTTON_RX 4
#define CONT_CMD_READ_MEMPACK_RX 33
#define CONT_CMD_WRITE_MEMPACK_RX 1
#define CONT_CMD_READ_EEPROM_RX 8
#define CONT_CMD_WRITE_EEPROM_RX 1
#define CONT_CMD_RESET_RX 3
// Bytes received for each joybus command
#define CONT_CMD_REQUEST_STATUS_RX 3
#define CONT_CMD_READ_BUTTON_RX 4
#define CONT_CMD_READ_PAK_RX 33
#define CONT_CMD_WRITE_PAK_RX 1
#define CONT_CMD_READ_EEPROM_RX 8
#define CONT_CMD_WRITE_EEPROM_RX 1
#define CONT_CMD_READ36_VOICE_RX 37
#define CONT_CMD_WRITE20_VOICE_RX 1
#define CONT_CMD_READ2_VOICE_RX 3
#define CONT_CMD_WRITE4_VOICE_RX 1
#define CONT_CMD_SWRITE_VOICE_RX 1
#define CONT_CMD_RESET_RX 3
#define CONT_CMD_NOP 0xff
#define CONT_CMD_END 0xfe //indicates end of a command
#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
#define CONT_CMD_NOP 0xff
#define CONT_CMD_END 0xfe //indicates end of a command
#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
#define DIR_STATUS_EMPTY 0
#define DIR_STATUS_UNKNOWN 1
#define DIR_STATUS_OCCUPIED 2
#define DIR_STATUS_EMPTY 0
#define DIR_STATUS_UNKNOWN 1
#define DIR_STATUS_OCCUPIED 2
// Controller accessory addresses
// https://github.com/joeldipops/TransferBoy/blob/master/docs/TransferPakReference.md
// Accesory detection
#define CONT_ADDR_DETECT 0x8000
// Rumble
#define CONT_ADDR_RUMBLE 0xC000
// Controller Pak
// Transfer Pak
#define CONT_ADDR_GB_POWER 0x8000 // Same as the detection address, but semantically different
#define CONT_ADDR_GB_BANK 0xA000
#define CONT_ADDR_GB_STATUS 0xB000
// Addresses sent to controller accessories are in blocks, not bytes
#define CONT_BLOCKS(x) ((x) / BLOCKSIZE)
// Block addresses of the above
#define CONT_BLOCK_DETECT CONT_BLOCKS(CONT_ADDR_DETECT)
#define CONT_BLOCK_RUMBLE CONT_BLOCKS(CONT_ADDR_RUMBLE)
#define CONT_BLOCK_GB_POWER CONT_BLOCKS(CONT_ADDR_GB_POWER)
#define CONT_BLOCK_GB_BANK CONT_BLOCKS(CONT_ADDR_GB_BANK)
#define CONT_BLOCK_GB_STATUS CONT_BLOCKS(CONT_ADDR_GB_STATUS)
// Transfer pak
#define GB_POWER_ON 0x84
#define GB_POWER_OFF 0xFE
#define PFS_BANK_LAPPED_BY 8 /* => u8 */
#define PFS_SECTOR_PER_BANK 32
#define PFS_INODE_DIST_MAP (PFS_BANK_LAPPED_BY * PFS_SECTOR_PER_BANK)
#define PFS_SECTOR_SIZE (PFS_INODE_SIZE_PER_PAGE/PFS_SECTOR_PER_BANK)
typedef struct
{
/* 0x0 */ __OSInode inode;
/* 0x100 */ u8 bank;
/* 0x101 */ u8 map[256];
/* 0x101 */ u8 map[PFS_INODE_DIST_MAP];
} __OSInodeCache;
extern s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
@ -178,6 +205,8 @@ s32 __osGetId(OSPfs *pfs);
s32 __osCheckId(OSPfs *pfs);
s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank);
s32 __osPfsSelectBank(OSPfs *pfs, u8 bank);
s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page);
s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u8 bank, __OSInodeUnit *last_page);
s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank);
s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer);
s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force);
@ -202,26 +231,27 @@ extern u8 __osMaxControllers;
#define ERRCK(fn) \
ret = fn; \
if (ret != 0) \
return ret;
return ret
#define SET_ACTIVEBANK_TO_ZERO \
if (pfs->activebank != 0) \
{ \
ERRCK(__osPfsSelectBank(pfs, 0)) \
}
ERRCK(__osPfsSelectBank(pfs, 0)); \
} (void)0
#define PFS_CHECK_ID \
if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \
return PFS_ERR_NEW_PACK;
#endif
return PFS_ERR_NEW_PACK
#define PFS_CHECK_STATUS \
if ((pfs->status & PFS_INITIALIZED) == 0) \
return PFS_ERR_INVALID;
return PFS_ERR_INVALID
#define PFS_GET_STATUS \
__osSiGetAccess(); \
ret = __osPfsGetStatus(queue, channel); \
__osSiRelAccess(); \
if (ret != 0) \
return ret;
return ret
#endif

View File

@ -7,45 +7,51 @@
*---------------------------------------------------------------------*/
#ifndef _OS_FLASH_H_
#define _OS_FLASH_H_
#define _OS_FLASH_H_
#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#include <PR/ultratypes.h>
#include "ultratypes.h"
#include "os_pi.h"
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
/*
* defines for FLASH
*/
#define FLASH_START_ADDR 0x08000000
#define FLASH_START_ADDR 0x08000000
#define FLASH_SIZE 0x20000
#define FLASH_LATENCY 0x5
#define FLASH_PULSE 0x0c
#define FLASH_PAGE_SIZE 0xf
#define FLASH_REL_DURATION 0x2
#define DEVICE_TYPE_FLASH 8
#define FLASH_SIZE 0x20000
#define FLASH_VERSION_MX_PROTO_A 0x00c20000
#define FLASH_VERSION_MX_A 0x00c20001
#define FLASH_VERSION_MX_C 0x00c2001e
#define FLASH_VERSION_MX_B_AND_D 0x00c2001d
#define FLASH_VERSION_MEI 0x003200f1
#define FLASH_LATENCY 0x5
#define FLASH_PULSE 0x0c
#define FLASH_PAGE_SIZE 0xf
#define FLASH_REL_DURATION 0x2
#define DEVICE_TYPE_FLASH 8
#define FLASH_VERSION_MX_PROTO_A 0x00c20000
#define FLASH_VERSION_MX_A 0x00c20001
#define FLASH_VERSION_MX_C 0x00c2001e
#define FLASH_VERSION_MX_B_AND_D 0x00c2001d
#define FLASH_VERSION_MEI 0x003200f1
#define OLD_FLASH 0
#define NEW_FLASH 1
/* OLD_FLASH is MX_PROTO_A, MX_A and MX_C */
#define OLD_FLASH 0
/* NEW_FLASH is MX_B_AND_D and MATSUSHITA flash */
#define NEW_FLASH 1
#define FLASH_STATUS_ERASE_BUSY 2
#define FLASH_STATUS_ERASE_ERROR -1
#define FLASH_STATUS_ERASE_OK 0
#define FLASH_STATUS_ERASE_BUSY 2
#define FLASH_STATUS_ERASE_OK 0
#define FLASH_STATUS_ERASE_ERROR -1
#define FLASH_STATUS_WRITE_BUSY 1
#define FLASH_STATUS_WRITE_OK 0
#define FLASH_STATUS_WRITE_ERROR -1
extern OSPiHandle *osFlashReInit(u8 latency, u8 pulse,
u8 page_size, u8 rel_duration, u32 start);
u8 page_size, u8 rel_duration, u32 start);
extern OSPiHandle *osFlashInit(void);
extern void osFlashReadStatus(u8 *flash_status);
extern void osFlashReadId(u32 *flash_type, u32 *flash_maker);
@ -53,10 +59,10 @@ extern void osFlashClearStatus(void);
extern s32 osFlashAllErase(void);
extern s32 osFlashSectorErase(u32 page_num);
extern s32 osFlashWriteBuffer(OSIoMesg *mb, s32 priority,
void *dramAddr, OSMesgQueue *mq);
void *dramAddr, OSMesgQueue *mq);
extern s32 osFlashWriteArray(u32 page_num);
extern s32 osFlashReadArray(OSIoMesg *mb, s32 priority, u32 page_num,
void *dramAddr, u32 n_pages, OSMesgQueue *mq);
void *dramAddr, u32 n_pages, OSMesgQueue *mq);
extern void osFlashChange(u32 flash_num);
extern void osFlashAllEraseThrough(void);
extern void osFlashSectorEraseThrough(u32 page_num);

View File

@ -0,0 +1,40 @@
#ifndef _OS_INTERNAL_FLASH_H_
#define _OS_INTERNAL_FLASH_H_
#include "os_message.h"
#include "os_flash.h"
#define FLASH_BLOCK_SIZE 128
/**
* Flash commands
*/
#define FLASH_CMD_REG 0x10000
/* set whole chip erase mode */
#define FLASH_CMD_CHIP_ERASE 0x3C000000
/* set sector erase mode */
#define FLASH_CMD_SECTOR_ERASE 0x4B000000
/* do erasure */
#define FLASH_CMD_EXECUTE_ERASE 0x78000000
/* program selected page */
#define FLASH_CMD_PROGRAM_PAGE 0xA5000000
/* set page program mode */
#define FLASH_CMD_PAGE_PROGRAM 0xB4000000
/* set status mode */
#define FLASH_CMD_STATUS 0xD2000000
/* set silicon id mode */
#define FLASH_CMD_ID 0xE1000000
/* set read mode */
#define FLASH_CMD_READ_ARRAY 0xF0000000
extern OSIoMesg __osFlashMsg;
extern OSMesgQueue __osFlashMessageQ;
extern OSPiHandle __osFlashHandler;
extern OSMesg __osFlashMsgBuf[1];
extern s32 __osFlashVersion;
extern u32 __osFlashID[4];
u32 __osFlashGetAddr(u32 page_num);
#endif

View File

@ -1,3 +1,4 @@
/*====================================================================
* os_pfs.h
*
@ -81,16 +82,18 @@ typedef struct {
*
*/
/* File System size */
#define OS_PFS_VERSION 0x0200
#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8)
#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255)
#define PFS_INODE_SIZE_PER_PAGE 128
#define PFS_FILE_NAME_LEN 16
#define PFS_FILE_EXT_LEN 4
#define BLOCKSIZE 32 /* bytes */
#define PFS_ONE_PAGE 8 /* blocks */
#define PFS_MAX_BANKS 62
#define BLOCKSIZE 32 /* bytes */
#define PFS_ONE_PAGE 8 /* blocks */
#define PFS_MAX_BANKS 62
/* File System flag */
@ -99,28 +102,32 @@ typedef struct {
#define PFS_CREATE 2
/* File System status */
#define PFS_INITIALIZED 0x1
#define PFS_CORRUPTED 0x2 /* File system was corrupted */
#define PFS_ID_BROKEN 0x4
#define PFS_MOTOR_INITIALIZED 0x8
#define PFS_GBPAK_INITIALIZED 0x10
#define PFS_INITIALIZED 0x1
#define PFS_CORRUPTED 0x2
#define PFS_ID_BROKEN 0x4
#define PFS_MOTOR_INITIALIZED 0x8
#define PFS_GBPAK_INITIALIZED 0x10
/* Definition for page usage */
#define PFS_EOF 1
#define PFS_PAGE_NOT_EXIST 2
#define PFS_PAGE_NOT_USED 3
/* File System error number */
#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */
/* different one */
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */
#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
#define PFS_DATA_FULL 7 /* no free pages on ram pack */
#define PFS_DIR_FULL 8 /* no free directories on ram pack*/
#define PFS_ERR_EXIST 9 /* file exists */
#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
#define PFS_ERR_DEVICE 11 /* wrong device type*/
#define PFS_ERR_NO_GBCART 12 /* no gb cartridge (64GB-PAK) */
#define PFS_ERR_NEW_GBCART 13 /* gb cartridge may be changed */
#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a different one */
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker*/
#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
#define PFS_DATA_FULL 7 /* no free pages on ram pack*/
#define PFS_DIR_FULL 8 /* no free directories on ram pack*/
#define PFS_ERR_EXIST 9 /* file exists*/
#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
#define PFS_ERR_DEVICE 11 /* wrong device type*/
#define PFS_ERR_NO_GBCART 12 /* no gb cartridge (64GB-PAK) */
#define PFS_ERR_NEW_GBCART 13 /* gb cartridge may be changed */
/* Definition for bank */
#define PFS_ID_BANK_256K 0

View File

@ -114,9 +114,11 @@ s32 __osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 );
OSMesgQueue *osPiGetCmdQueue(void);
#define WAIT_ON_IOBUSY(stat) \
while (stat = IO_READ(PI_STATUS_REG), stat & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) \
; \
(void)0
{ \
stat = IO_READ(PI_STATUS_REG); \
while (stat & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) \
stat = IO_READ(PI_STATUS_REG); \
} (void)0
#define UPDATE_REG(pihandle, reg, var) \
if (cHandle->var != pihandle->var) \

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,15 @@
#ifndef _SIINT_H
#define _SIINT_H
#include "PR/os_internal.h"
#include "PR/rcp.h"
extern s32 __osEepromRead16K;
extern u8 __osPfsInodeCacheBank;
void __osSiGetAccess(void);
void __osSiRelAccess(void);
int __osSiDeviceBusy(void);
void __osSiCreateAccessQueue(void);
#endif

View File

@ -1,257 +0,0 @@
#ifndef _CONTROLLER_H
#define _CONTROLLER_H
#include "PR/os_internal.h"
#include "PR/rcp.h"
//should go somewhere else but
#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0])))
#define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4)
typedef struct
{
/* 0x0 */ u32 ramarray[15];
/* 0x3C */ u32 pifstatus;
} OSPifRam;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u16 button;
/* 0x6 */ s8 stick_x;
/* 0x7 */ s8 stick_y;
} __OSContReadFormat;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u8 typeh;
/* 0x5 */ u8 typel;
/* 0x6 */ u8 status;
/* 0x7 */ u8 dummy1;
} __OSContRequesFormat;
typedef struct
{
/* 0x0 */ u8 txsize;
/* 0x1 */ u8 rxsize;
/* 0x2 */ u8 cmd;
/* 0x3 */ u8 typeh;
/* 0x4 */ u8 typel;
/* 0x5 */ u8 status;
} __OSContRequesFormatShort;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u8 addrh;
/* 0x5 */ u8 addrl;
/* 0x6 */ u8 data[BLOCKSIZE];
/* 0x26 */ u8 datacrc;
} __OSContRamReadFormat;
typedef union {
/* 0x0 */ struct
{
/* 0x0 */ u8 bank;
/* 0x1 */ u8 page;
} inode_t;
/* 0x0 */ u16 ipage;
} __OSInodeUnit;
typedef struct
{
/* 0x0 */ u32 game_code;
/* 0x4 */ u16 company_code;
/* 0x6 */ __OSInodeUnit start_page;
/* 0x8 */ u8 status;
/* 0x9 */ s8 reserved;
/* 0xA */ u16 data_sum;
/* 0xC */ u8 ext_name[PFS_FILE_EXT_LEN];
/* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN];
} __OSDir;
typedef struct
{
/* 0x0 */ __OSInodeUnit inode_page[128];
} __OSInode;
typedef struct
{
/* 0x0 */ u32 repaired;
/* 0x4 */ u32 random;
/* 0x8 */ u64 serial_mid;
/* 0x10 */ u64 serial_low;
/* 0x18 */ u16 deviceid;
/* 0x1A */ u8 banks;
/* 0x1B */ u8 version;
/* 0x1C */ u16 checksum;
/* 0x1E */ u16 inverted_checksum;
} __OSPackId;
typedef struct
{
/* 0x0 */ u8 txsize;
/* 0x1 */ u8 rxsize;
/* 0x2 */ u8 cmd;
/* 0x3 */ u8 address;
/* 0x4 */ u8 data[EEPROM_BLOCK_SIZE];
} __OSContEepromFormat;
// Joybus commands
//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage
#define CONT_CMD_REQUEST_STATUS 0
#define CONT_CMD_READ_BUTTON 1
#define CONT_CMD_READ_PAK 2
#define CONT_CMD_WRITE_PAK 3
#define CONT_CMD_READ_EEPROM 4
#define CONT_CMD_WRITE_EEPROM 5
#define CONT_CMD_READ36_VOICE 9
#define CONT_CMD_WRITE20_VOICE 10
#define CONT_CMD_READ2_VOICE 11
#define CONT_CMD_WRITE4_VOICE 12
#define CONT_CMD_SWRITE_VOICE 13
#define CONT_CMD_CHANNEL_RESET 0xFD
#define CONT_CMD_RESET 0xFF
// Bytes transmitted for each joybus command
#define CONT_CMD_REQUEST_STATUS_TX 1
#define CONT_CMD_READ_BUTTON_TX 1
#define CONT_CMD_READ_PAK_TX 3
#define CONT_CMD_WRITE_PAK_TX 35
#define CONT_CMD_READ_EEPROM_TX 2
#define CONT_CMD_WRITE_EEPROM_TX 10
#define CONT_CMD_READ36_VOICE_TX 3
#define CONT_CMD_WRITE20_VOICE_TX 23
#define CONT_CMD_READ2_VOICE_TX 3
#define CONT_CMD_WRITE4_VOICE_TX 7
#define CONT_CMD_SWRITE_VOICE_TX 3
#define CONT_CMD_RESET_TX 1
// Bytes received for each joybus command
#define CONT_CMD_REQUEST_STATUS_RX 3
#define CONT_CMD_READ_BUTTON_RX 4
#define CONT_CMD_READ_PAK_RX 33
#define CONT_CMD_WRITE_PAK_RX 1
#define CONT_CMD_READ_EEPROM_RX 8
#define CONT_CMD_WRITE_EEPROM_RX 1
#define CONT_CMD_READ36_VOICE_RX 37
#define CONT_CMD_WRITE20_VOICE_RX 1
#define CONT_CMD_READ2_VOICE_RX 3
#define CONT_CMD_WRITE4_VOICE_RX 1
#define CONT_CMD_SWRITE_VOICE_RX 1
#define CONT_CMD_RESET_RX 3
#define CONT_CMD_NOP 0xff
#define CONT_CMD_END 0xfe //indicates end of a command
#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
#define DIR_STATUS_EMPTY 0
#define DIR_STATUS_UNKNOWN 1
#define DIR_STATUS_OCCUPIED 2
// Controller accessory addresses
// https://github.com/joeldipops/TransferBoy/blob/master/docs/TransferPakReference.md
// Accesory detection
#define CONT_ADDR_DETECT 0x8000
// Rumble
#define CONT_ADDR_RUMBLE 0xC000
// Controller Pak
// Transfer Pak
#define CONT_ADDR_GB_POWER 0x8000 // Same as the detection address, but semantically different
#define CONT_ADDR_GB_BANK 0xA000
#define CONT_ADDR_GB_STATUS 0xB000
// Addresses sent to controller accessories are in blocks, not bytes
#define CONT_BLOCKS(x) ((x) / BLOCKSIZE)
// Block addresses of the above
#define CONT_BLOCK_DETECT CONT_BLOCKS(CONT_ADDR_DETECT)
#define CONT_BLOCK_RUMBLE CONT_BLOCKS(CONT_ADDR_RUMBLE)
#define CONT_BLOCK_GB_POWER CONT_BLOCKS(CONT_ADDR_GB_POWER)
#define CONT_BLOCK_GB_BANK CONT_BLOCKS(CONT_ADDR_GB_BANK)
#define CONT_BLOCK_GB_STATUS CONT_BLOCKS(CONT_ADDR_GB_STATUS)
// Transfer pak
#define GB_POWER_ON 0x84
#define GB_POWER_OFF 0xFE
typedef struct
{
/* 0x0 */ __OSInode inode;
/* 0x100 */ u8 bank;
/* 0x101 */ u8 map[PFS_INODE_DIST_MAP];
} __OSInodeCache;
extern s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
u16 __osSumcalc(u8 *ptr, int length);
s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum);
s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid);
s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp);
s32 __osGetId(OSPfs *pfs);
s32 __osCheckId(OSPfs *pfs);
s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank);
s32 __osPfsSelectBank(OSPfs *pfs, u8 bank);
s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page);
s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u8 bank, __OSInodeUnit *last_page);
s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank);
s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer);
s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force);
void __osContGetInitData(u8 *pattern, OSContStatus *data);
void __osPackRequestData(u8 cmd);
void __osPfsRequestData(u8 cmd);
void __osPfsGetInitData(u8* pattern, OSContStatus* data);
u8 __osContAddressCrc(u16 addr);
u8 __osContDataCrc(u8 *data);
s32 __osPfsGetStatus(OSMesgQueue *queue, int channel);
extern u8 __osContLastCmd;
extern OSTimer __osEepromTimer;
extern OSMesg __osEepromTimerMsg;
extern OSMesgQueue __osEepromTimerQ;
extern OSPifRam __osEepPifRam;
extern OSPifRam __osContPifRam;
extern OSPifRam __osPfsPifRam;
extern u8 __osMaxControllers;
//some version of this almost certainly existed since there's plenty of times where it's used right before a return 0
#define ERRCK(fn) \
ret = fn; \
if (ret != 0) \
return ret;
#define SET_ACTIVEBANK_TO_ZERO \
if (pfs->activebank != 0) \
{ \
ERRCK(__osPfsSelectBank(pfs, 0)) \
}
#define PFS_CHECK_ID \
if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \
return PFS_ERR_NEW_PACK;
#define PFS_CHECK_STATUS \
if ((pfs->status & PFS_INITIALIZED) == 0) \
return PFS_ERR_INVALID;
#define PFS_GET_STATUS \
__osSiGetAccess(); \
ret = __osPfsGetStatus(queue, channel); \
__osSiRelAccess(); \
if (ret != 0) \
return ret;
#endif

44
include/gcc/sgidefs.h Normal file
View File

@ -0,0 +1,44 @@
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ralf Baechle <ralf@gnu.org>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _SGIDEFS_H
#define _SGIDEFS_H 1
/*
* Definitions for the ISA level
*/
#define _MIPS_ISA_MIPS1 1
#define _MIPS_ISA_MIPS2 2
#define _MIPS_ISA_MIPS3 3
#define _MIPS_ISA_MIPS4 4
#define _MIPS_ISA_MIPS5 5
/*
* Subprogram calling convention
*
* At the moment only _MIPS_SIM_ABI32 is in use. This will change rsn.
* Until GCC 2.8.0 is released don't rely on this definitions because the
* 64bit code is essentially using the 32bit interface model just with
* 64bit registers.
*/
#define _MIPS_SIM_ABI32 1
#define _MIPS_SIM_NABI32 2
#define _MIPS_SIM_ABI64 3
#endif /* sgidefs.h */

View File

@ -40,7 +40,7 @@ typedef char * __gnuc_va_list;
/* Get definitions for _MIPS_SIM_ABI64 etc. */
#ifdef _MIPS_SIM
#include <sgidefs.h>
#include "gcc/sgidefs.h"
#endif
#ifdef _STDARG_H

View File

@ -26,7 +26,14 @@
#define TRANSPARENT_UNION
#endif
#define ALIGNED(x) __attribute__((aligned(x)))
#ifndef BBPLAYER
# define ALIGNED(x) __attribute__((aligned(x)))
# define BBALIGNED(x) ALIGNED(x)
#else
# define ALIGNED(x)
# define BBALIGNED(x) __attribute__((aligned(x)))
#endif
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
#define ALIGN8(val) (((val) + 0x7) & ~0x7)

View File

@ -86,7 +86,7 @@ enum {
/* Get definitions for _MIPS_SIM_ABI64 etc. */
#ifdef _MIPS_SIM
#include <sgidefs.h>
#include "gcc/sgidefs.h"
#endif
#ifdef _STDARG_H

View File

@ -24,5 +24,9 @@ curl -L "https://github.com/pmret/binutils-papermario/releases/download/master/l
curl -L "https://github.com/decompals/mips-gcc-2.7.2/releases/download/main/gcc-2.7.2-linux.tar.gz" | tar zx -C tools/build/cc/gcc2.7.2
curl -L "https://github.com/decompals/mips-binutils-2.6/releases/download/main/binutils-2.6-linux.tar.gz" | tar zx -C tools/build/cc/gcc2.7.2
# EGCS
curl -L "https://github.com/decompals/mips-binutils-egcs-2.9.5/releases/latest/download/mips-binutils-egcs-2.9.5-linux.tar.gz" | tar zx -C tools/build/cc/egcs
curl -L "https://github.com/decompals/mips-gcc-egcs-2.91.66/releases/latest/download/mips-gcc-egcs-2.91.66-linux.tar.gz" | tar zx -C tools/build/cc/egcs
echo "Downloading IDO 5.3 for Linux"
curl -L "https://github.com/decompals/ido-static-recomp/releases/download/v0.2/ido-5.3-recomp-ubuntu-latest.tar.gz" | tar zx -C tools/build/cc/ido5.3

35
src/os/_getcount.c Normal file
View File

@ -0,0 +1,35 @@
#include "ultra64.h"
#include "macros.h"
#include "PR/os_internal.h"
#ifdef BBPLAYER
u32 __osBbLastRCount;
u32 __osBbRCountWraps;
u32 __osBbLastVCount;
u32 __osBbVCountWraps;
u32 osGetCount(void) {
u32 count;
u32 mask;
mask = __osDisableInt();
__asm__("mfc0 %0, $9" : "=r"(count));
if (count < __osBbLastRCount) {
__osBbRCountWraps++;
}
__osBbLastRCount = count;
count = (((u64)__osBbRCountWraps << 32) | count) * 125ull / 192ull;
if (count < __osBbLastVCount) {
__osBbVCountWraps++;
}
__osBbLastVCount = count;
__osRestoreInt(mask);
return count;
}
#endif

18
src/os/_setcompare.c Normal file
View File

@ -0,0 +1,18 @@
#include "PR/os_internal.h"
extern u32 __osBbLastRCount;
extern u32 __osBbRCountWraps;
extern u32 __osBbLastVCount;
extern u32 __osBbVCountWraps;
void __osSetCompare(u32 v) {
if (v != 0) {
u32 mask = __osDisableInt();
u32 wraps = (v < __osBbLastVCount) ? __osBbVCountWraps + 1 : __osBbVCountWraps;
v = (((u64)wraps << 32) | v) * 192ull / 125ull;
__osRestoreInt(mask);
}
__asm__ ("mtc0 %0, $11" :: "r"(v));
}

View File

@ -31,9 +31,7 @@ OSPiHandle *osCartRomInit(void)
bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo));
while (stat = IO_READ(PI_STATUS_REG), stat & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) {
;
}
WAIT_ON_IOBUSY(stat);
latency = IO_READ(PI_BSD_DOM1_LAT_REG);
pageSize = IO_READ(PI_BSD_DOM1_PGS_REG);

48
src/os/common.c Normal file
View File

@ -0,0 +1,48 @@
#include "ultra64.h"
void* memset(void* dest, int ch, size_t n) {
unsigned char* p = dest;
size_t i;
for (i = 0; i < n; i++) {
p[i] = ch;
}
return dest;
}
// these functions below should be separate in libultra_rom, however they aren't aligned in proper
int memcmp(const void* str1, const void* str2, size_t n) {
const unsigned char* s1 = str1;
const unsigned char* s2 = str2;
unsigned char u1, u2;
while (n-- > 0) {
u2 = *s2++;
u1 = *s1++;
if (u1 != u2) {
return u1 - u2;
}
}
return 0;
}
// n should be size_t but can't be
int strncmp(const char* str1, const char* str2, int n) {
int i;
for (i = 0; (*str1 == *str2) && (i < n); i++) {
if (*str1 == 0) {
if (*str2 == 0) {
return 0;
}
break;
}
if (*str2 == 0) {
break;
}
str1++;
str2++;
}
return (i != n) ? *str1 - *str2 : 0;
}

View File

@ -1,90 +1,94 @@
#include "PR/controller.h"
#include "macros.h"
#include "PR/os_internal.h"
#include "PR/controller.h"
#include "PR/rmon.h"
extern __OSInode __osPfsInodeCache;
__OSInode __osPfsInodeCache ALIGNED(8);
s32 __osPfsInodeCacheChannel = -1;
u8 __osPfsInodeCacheBank = 250;
u16 __osSumcalc(u8 *ptr, int length) {
u16 __osSumcalc(u8* ptr, int length) {
int i;
s32 sum;
u8* tmp;
sum = 0;
tmp = ptr;
u32 sum = 0;
u8* tmp = ptr;
for (i = 0; i < length; i++) {
sum += *tmp++;
}
return sum;
return sum & 0xFFFF;
}
s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum) {
u16 data;
s32 __osIdCheckSum(u16* ptr, u16* csum, u16* icsum) {
u16 data = 0;
u32 j;
data = 0;
*icsum = 0;
*csum = *icsum;
for (j = 0; j < 28; j += 2) {
data = *(u16 *)((u8 *)ptr + j);
*csum = *icsum = 0;
for (j = 0; j < ((sizeof(__OSPackId) - sizeof(u32)) / sizeof(u8)); j += 2) {
data = *(u16*)((u32)ptr + j);
*csum += data;
*icsum += ~data;
}
return 0;
}
s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid) {
s32 ret;
s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid) {
s32 ret = 0;
u8 temp[BLOCKSIZE];
u8 comp[BLOCKSIZE];
u8 mask;
u8 mask = 0;
int i;
int j;
int j = 0;
u16 index[4];
//ret = 0;
//mask = 0;
newid->repaired = -1;
newid->random = osGetCount();
newid->serial_mid = badid->serial_mid;
newid->serial_low = badid->serial_low;
j = 0;
SET_ACTIVEBANK_TO_ZERO;
do {
ERRCK(__osPfsSelectBank(pfs, j))
ERRCK(__osPfsSelectBank(pfs, j));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, temp));
temp[0] = j | 0x80;
for (i = 1; i < ARRAY_COUNT(temp); i++) {
for (i = 1; i < BLOCKSIZE; i++) {
temp[i] = ~temp[i];
}
ERRCK(__osContRamWrite(pfs->queue, pfs->channel, 0, temp, FALSE));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, comp));
for (i = 0; i < ARRAY_COUNT(temp); i++) {
for (i = 0; i < BLOCKSIZE; i++) {
if (comp[i] != temp[i]) {
break;
}
}
if (i != ARRAY_COUNT(temp)) {
if (i != BLOCKSIZE) {
break;
}
if (j > 0) {
ERRCK(__osPfsSelectBank(pfs, 0));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 0, (u8*)temp));
if (temp[0] != 128) {
break; //TODO: remove magic constant
if (temp[0] != 0x80) {
break;
}
}
j++;
} while (j < PFS_MAX_BANKS);
SET_ACTIVEBANK_TO_ZERO;
if (j > 0) {
mask = 1;
} else {
mask = 0;
}
mask = (j > 0) ? 1 : 0;
newid->deviceid = (badid->deviceid & (u16)~1) | mask;
newid->banks = j;
newid->version = badid->version;
@ -93,65 +97,71 @@ s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid) {
index[1] = PFS_ID_1AREA;
index[2] = PFS_ID_2AREA;
index[3] = PFS_ID_3AREA;
for (i = 0; i < ARRAY_COUNT(index); i++) {
for (i = 0; i < ARRLEN(index); i++) {
ERRCK(__osContRamWrite(pfs->queue, pfs->channel, index[i], (u8*)newid, TRUE));
}
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp));
for (i = 0; i < ARRAY_COUNT(temp); i++) {
if (temp[i] != ((u8 *)newid)[i]) {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, PFS_ID_0AREA, (u8*)temp));
for (i = 0; i < BLOCKSIZE; i++) {
if (temp[i] != ((u8*)newid)[i]) {
return PFS_ERR_DEVICE;
}
}
return 0;
}
s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp) {
s32 __osCheckPackId(OSPfs* pfs, __OSPackId* temp) {
u16 index[4];
s32 ret;
s32 ret = 0;
u16 sum;
u16 isum;
int i;
int j;
ret = 0;
SET_ACTIVEBANK_TO_ZERO;
index[0] = PFS_ID_0AREA;
index[1] = PFS_ID_1AREA;
index[2] = PFS_ID_2AREA;
index[3] = PFS_ID_3AREA;
for (i = 1; i < ARRAY_COUNT(index); i++) {
for (i = 1; i < ARRLEN(index); i++) {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, index[i], (u8*)temp));
__osIdCheckSum((u16 *)temp, &sum, &isum);
if (temp->checksum == sum && temp->inverted_checksum == isum)
__osIdCheckSum((u16*)temp, &sum, &isum);
if (temp->checksum == sum && temp->inverted_checksum == isum) {
break;
}
}
if (i == ARRAY_COUNT(index)) {
if (i == ARRLEN(index)) {
return PFS_ERR_ID_FATAL;
}
for (j = 0; j < ARRAY_COUNT(index); j++) {
for (j = 0; j < ARRLEN(index); j++) {
if (j != i) {
ERRCK(__osContRamWrite(pfs->queue, pfs->channel, index[j], (u8*)temp, TRUE));
}
}
return 0;
}
s32 __osGetId(OSPfs *pfs) {
int k;
s32 __osGetId(OSPfs* pfs) {
u16 sum;
u16 isum;
u8 temp[BLOCKSIZE];
__OSPackId newid;
s32 ret;
__OSPackId *id;
__OSPackId* id;
SET_ACTIVEBANK_TO_ZERO;
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, PFS_ID_0AREA, (u8*)temp));
__osIdCheckSum((u16*)temp, &sum, &isum);
id = (__OSPackId*)temp;
if (id->checksum != sum || id->inverted_checksum != isum) {
ret = __osCheckPackId(pfs, id);
if (ret == PFS_ERR_ID_FATAL) {
ERRCK(__osRepairPackId(pfs, id, &newid));
id = &newid;
@ -159,45 +169,51 @@ s32 __osGetId(OSPfs *pfs) {
return ret;
}
}
if ((id->deviceid & 1) == 0) { //TODO: remove magic constant
if ((id->deviceid & 1) == 0) {
ERRCK(__osRepairPackId(pfs, id, &newid));
id = &newid;
if ((id->deviceid & 1) == 0) {
return PFS_ERR_DEVICE;
}
}
bcopy(id, pfs->id, ARRAY_COUNT(pfs->id));
bcopy(id, pfs->id, BLOCKSIZE);
pfs->version = id->version;
pfs->banks = id->banks;
pfs->inode_start_page = pfs->banks * 2 + 3; //TODO: loads of magic constants..
pfs->inode_start_page = 1 + DEF_DIR_PAGES + (2 * pfs->banks);
pfs->dir_size = 16;
pfs->inode_table = 8;
pfs->minode_table = (pfs->banks + 1) * PFS_ONE_PAGE;
pfs->inode_table = PFS_ONE_PAGE;
pfs->minode_table = (1 + pfs->banks) * PFS_ONE_PAGE;
pfs->dir_table = pfs->minode_table + pfs->banks * PFS_ONE_PAGE;
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 7, pfs->label));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, PFS_LABEL_AREA, pfs->label));
return 0;
}
s32 __osCheckId(OSPfs *pfs) {
s32 __osCheckId(OSPfs* pfs) {
u8 temp[BLOCKSIZE];
s32 ret;
if (pfs->activebank != 0) {
ret = __osPfsSelectBank(pfs, 0);
if (ret == PFS_ERR_NEW_PACK) {
ret = __osPfsSelectBank(pfs, 0);
}
if (ret != 0) {
return ret;
}
}
ret = __osContRamRead(pfs->queue, pfs->channel, 1, temp);
ret = __osContRamRead(pfs->queue, pfs->channel, PFS_ID_0AREA, (u8*)temp);
if (ret != 0) {
if (ret != PFS_ERR_NEW_PACK) {
return ret;
} else {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, temp));
}
ERRCK(__osContRamRead(pfs->queue, pfs->channel, PFS_ID_0AREA, (u8*)temp));
}
if (bcmp(pfs->id, temp, BLOCKSIZE) != 0) {
@ -207,62 +223,67 @@ s32 __osCheckId(OSPfs *pfs) {
return 0;
}
s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank) {
s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank) {
u8 sum;
int j;
s32 ret;
int offset;
u8 *addr;
u8* addr;
if (flag == PFS_READ && bank == __osPfsInodeCacheBank && pfs->channel == __osPfsInodeCacheChannel) {
if (flag == PFS_READ && bank == __osPfsInodeCacheBank && (pfs->channel == __osPfsInodeCacheChannel)) {
bcopy(&__osPfsInodeCache, inode, sizeof(__OSInode));
return 0;
}
SET_ACTIVEBANK_TO_ZERO;
if (bank > 0) {
offset = 1;
} else {
offset = pfs->inode_start_page;
}
offset = (bank > 0) ? 1 : pfs->inode_start_page;
if (flag == PFS_WRITE) {
inode->inode_page[0].inode_t.page = __osSumcalc((u8*)&inode->inode_page[offset], (128 - offset) * 2);
inode->inode_page[0].inode_t.page =
__osSumcalc((u8*)&inode->inode_page[offset], (PFS_INODE_SIZE_PER_PAGE - offset) * 2);
}
for (j = 0; j < PFS_ONE_PAGE; j++) {
addr = ((u8 *)inode->inode_page + j * 32);
addr = ((u8*)inode->inode_page + j * BLOCKSIZE);
if (flag == PFS_WRITE) {
ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->inode_table + bank * PFS_ONE_PAGE + j, addr, FALSE);
ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->minode_table + bank * PFS_ONE_PAGE + j, addr, FALSE);
} else {
ret = __osContRamRead(pfs->queue, pfs->channel, pfs->inode_table + bank * 8 + j, addr);
}
if (ret != 0) {
return ret;
}
}
if (flag == PFS_READ) {
sum = __osSumcalc((u8*)&inode->inode_page[offset], (128 - offset) * 2);
sum = __osSumcalc((u8*)&inode->inode_page[offset], (PFS_INODE_SIZE_PER_PAGE - offset) * 2);
if (sum != inode->inode_page[0].inode_t.page) {
for (j = 0; j < PFS_ONE_PAGE; j++) {
addr = ((u8 *)inode->inode_page + j * 32);
addr = ((u8*)inode->inode_page + j * BLOCKSIZE);
ret = __osContRamRead(pfs->queue, pfs->channel, pfs->minode_table + bank * PFS_ONE_PAGE + j, addr);
}
sum = __osSumcalc((u8*)&inode->inode_page[offset], (128 - offset) * 2);
sum = __osSumcalc((u8*)&inode->inode_page[offset], (PFS_INODE_SIZE_PER_PAGE - offset) * 2);
if (sum != inode->inode_page[0].inode_t.page) {
return PFS_ERR_INCONSISTENT;
}
for (j = 0; j < PFS_ONE_PAGE; j++) {
addr = ((u8 *)inode->inode_page + j * 32);
ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->inode_table + bank * PFS_ONE_PAGE + j, addr, FALSE);
addr = ((u8*)inode->inode_page + j * BLOCKSIZE);
ret =
__osContRamWrite(pfs->queue, pfs->channel, pfs->inode_table + bank * PFS_ONE_PAGE + j, addr, FALSE);
}
}
}
__osPfsInodeCacheBank = bank;
bcopy(inode, &__osPfsInodeCache, sizeof(__OSInode));
__osPfsInodeCacheChannel = pfs->channel;
return 0;
}

View File

@ -2,22 +2,27 @@
#include "PR/siint.h"
s32 osContStartQuery(OSMesgQueue* mq) {
s32 ret;
s32 ret = 0;
__osSiGetAccess();
if (__osContLastCmd != 0) {
__osPackRequestData(0);
__osSiRawStartDma(1, &__osContPifRam);
osRecvMesg(mq, NULL, 1);
}
ret = __osSiRawStartDma(0, &__osContPifRam);
__osContLastCmd = 0;
__osSiRelAccess();
if (__osContLastCmd != CONT_CMD_REQUEST_STATUS) {
__osPackRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray);
#ifdef BBPLAYER
__osContLastCmd = CONT_CMD_CHANNEL_RESET;
#else
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
#endif
__osSiRelAccess();
return ret;
}
void osContGetQuery(OSContStatus *data) {
void osContGetQuery(OSContStatus* data) {
u8 pattern;
__osContGetInitData(&pattern, data);
}

View File

@ -1,61 +1,97 @@
#include "PR/os_internal.h"
#include "PR/rcp.h"
#include "PR/controller.h"
#include "PR/osint.h"
#include "PR/siint.h"
s32 __osPfsLastChannel = -1;
extern u32 __osBbPakAddress[4];
extern u32 __osBbPakSize;
s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) {
#ifndef BBPLAYER
s32 __osPfsLastChannel = -1;
#endif
#define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr))
s32 __osContRamRead(OSMesgQueue* mq, int channel, u16 address, u8* buffer) {
#ifdef BBPLAYER
s32 ret;
u8* ptr;
s32 i;
int retry = 2;
__osSiGetAccess();
do {
ptr = (u8 *)(&__osPfsPifRam);
if (__osContLastCmd != CONT_CMD_READ_MEMPACK || __osPfsLastChannel != channel) {
__osContLastCmd = CONT_CMD_READ_MEMPACK;
ret = 0;
if (__osBbPakAddress[channel] != 0) {
if (__osBbPakSize - 0x20 >= address * 0x20) {
int i;
for (i = 0; i < 0x20; i++) {
buffer[i] = *(u8*)(__osBbPakAddress[channel] + address * 0x20 + i);
}
}
} else {
ret = 1;
}
__osSiRelAccess();
return ret;
#else
s32 ret = 0;
s32 i;
u8* ptr;
s32 retry = 2;
__osSiGetAccess();
do {
ptr = (u8*)&__osPfsPifRam;
if (__osContLastCmd != CONT_CMD_READ_PAK || (u32)__osPfsLastChannel != channel) {
__osContLastCmd = CONT_CMD_READ_PAK;
__osPfsLastChannel = channel;
for (i = 0; i < channel; i++) {
*ptr++ = 0;
}
for (i = 0; i < channel; i++) { *ptr++ = CONT_CMD_REQUEST_STATUS; }
__osPfsPifRam.pifstatus = CONT_CMD_EXE;
((__OSContRamReadFormat *)ptr)->dummy = 0xff;
((__OSContRamReadFormat *)ptr)->txsize = 3;
((__OSContRamReadFormat *)ptr)->rxsize = 33;
((__OSContRamReadFormat *)ptr)->cmd = CONT_CMD_READ_MEMPACK;
((__OSContRamReadFormat *)ptr)->datacrc = 0xff;
READFORMAT(ptr)->dummy = CONT_CMD_NOP;
READFORMAT(ptr)->txsize = CONT_CMD_READ_PAK_TX;
READFORMAT(ptr)->rxsize = CONT_CMD_READ_PAK_RX;
READFORMAT(ptr)->cmd = CONT_CMD_READ_PAK;
READFORMAT(ptr)->datacrc = 0xFF;
ptr[sizeof(__OSContRamReadFormat)] = CONT_CMD_END;
} else {
ptr += channel;
}
((__OSContRamReadFormat *)ptr)->addrh = address >> 3;
((__OSContRamReadFormat *)ptr)->addrl = (address << 5) | __osContAddressCrc(address) ;
__osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
__osSiRawStartDma(OS_READ, &__osPfsPifRam);
READFORMAT(ptr)->addrh = address >> 3;
READFORMAT(ptr)->addrl = (u8)((address << 5) | __osContAddressCrc(address));
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = (((__OSContRamReadFormat *)ptr)->rxsize & 0xC0) >> 4;
if (ret == 0) {
if (__osContDataCrc(((__OSContRamReadFormat *)ptr)->data) != ((__OSContRamReadFormat *)ptr)->datacrc) {
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = CHNL_ERR(*READFORMAT(ptr));
if (!ret) {
if (__osContDataCrc(READFORMAT(ptr)->data) != READFORMAT(ptr)->datacrc) {
ret = __osPfsGetStatus(mq, channel);
if (ret != 0) {
if (ret) {
break;
} else {
ret = PFS_ERR_CONTRFAIL;
}
} else {
bcopy(((__OSContRamReadFormat *)ptr)->data, buffer, BLOCKSIZE);
bcopy(READFORMAT(ptr)->data, buffer, BLOCKSIZE);
}
} else {
ret = PFS_ERR_NOPACK;
}
} while (ret == PFS_ERR_CONTRFAIL && retry-- >= 0);
} while ((ret == PFS_ERR_CONTRFAIL) && (retry-- >= 0));
__osSiRelAccess();
return ret;
#endif
}

View File

@ -1,58 +1,91 @@
#include "PR/os_internal.h"
#include "PR/rcp.h"
#include "PR/controller.h"
#include "PR/osint.h"
#include "PR/siint.h"
extern int __osPfsLastChannel;
extern u32 __osBbPakAddress[4];
extern u32 __osBbPakSize;
s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force) {
s32 ret;
u8* ptr;
s32 i;
int retry = 2;
u8 crc;
extern s32 __osPfsLastChannel;
if (force != PFS_FORCE && address < PFS_LABEL_AREA && address != 0) {
#define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr))
s32 __osContRamWrite(OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force) {
#ifdef BBPLAYER
s32 ret = 0;
if ((force != TRUE) && (address < PFS_LABEL_AREA) && (address != 0)) {
return 0;
}
__osSiGetAccess();
do {
ptr = (u8 *)(&__osPfsPifRam);
if (__osContLastCmd != CONT_CMD_WRITE_MEMPACK || __osPfsLastChannel != channel) {
__osContLastCmd = CONT_CMD_WRITE_MEMPACK;
if (__osBbPakAddress[channel] != 0) {
if (__osBbPakSize - 0x20 >= address * 0x20) {
int i = 0;
for (i = 0; i < 0x20; i++) {
*(u8*)(__osBbPakAddress[channel] + address * 0x20 + i) = buffer[i];
}
}
} else {
ret = 1;
}
__osSiRelAccess();
return ret;
#else
s32 ret = 0;
s32 i;
u8* ptr;
s32 retry = 2;
u8 crc;
if ((force != TRUE) && (address < PFS_LABEL_AREA) && (address != 0)) {
return 0;
}
__osSiGetAccess();
do {
ptr = (u8*)__osPfsPifRam.ramarray;
if (__osContLastCmd != CONT_CMD_WRITE_PAK || (u32)__osPfsLastChannel != channel) {
__osContLastCmd = CONT_CMD_WRITE_PAK;
__osPfsLastChannel = channel;
for (i = 0; i < channel; i++) {
*ptr++ = 0;
}
for (i = 0; i < channel; i++) { *ptr++ = CONT_CMD_REQUEST_STATUS; }
__osPfsPifRam.pifstatus = CONT_CMD_EXE;
((__OSContRamReadFormat *)ptr)->dummy = 0xff;
((__OSContRamReadFormat *)ptr)->txsize = 35;
((__OSContRamReadFormat *)ptr)->rxsize = 1;
((__OSContRamReadFormat *)ptr)->cmd = CONT_CMD_WRITE_MEMPACK;
((__OSContRamReadFormat *)ptr)->datacrc = 0xff;
READFORMAT(ptr)->dummy = CONT_CMD_NOP;
READFORMAT(ptr)->txsize = CONT_CMD_WRITE_PAK_TX;
READFORMAT(ptr)->rxsize = CONT_CMD_WRITE_PAK_RX;
READFORMAT(ptr)->cmd = CONT_CMD_WRITE_PAK;
READFORMAT(ptr)->datacrc = 0xFF;
ptr[sizeof(__OSContRamReadFormat)] = CONT_CMD_END;
} else {
ptr += channel;
}
((__OSContRamReadFormat *)ptr)->addrh = address >> 3;
((__OSContRamReadFormat *)ptr)->addrl = (address << 5) | __osContAddressCrc(address);
bcopy(buffer, ((__OSContRamReadFormat *)ptr)->data, BLOCKSIZE);
READFORMAT(ptr)->addrh = address >> 3;
READFORMAT(ptr)->addrl = ((address << 5) | __osContAddressCrc(address));
bcopy(buffer, READFORMAT(ptr)->data, BLOCKSIZE);
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
crc = __osContDataCrc(buffer);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = (((__OSContRamReadFormat *)ptr)->rxsize & 0xC0) >> 4;
if (ret == 0) {
if (crc != ((__OSContRamReadFormat *)ptr)->datacrc) {
ret = __osPfsGetStatus(mq, channel);
if (ret != 0) {
ret = CHNL_ERR(*READFORMAT(ptr));
if (!ret) {
if (crc != READFORMAT(ptr)->datacrc) {
if ((ret = __osPfsGetStatus(mq, channel))) {
break;
} else {
ret = PFS_ERR_CONTRFAIL;
@ -61,8 +94,10 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int
} else {
ret = PFS_ERR_NOPACK;
}
} while (ret == PFS_ERR_CONTRFAIL && retry-- >= 0);
} while ((ret == PFS_ERR_CONTRFAIL) && (retry-- >= 0));
__osSiRelAccess();
return ret;
#endif
}

View File

@ -1,60 +1,83 @@
#include "PR/os_internal.h"
#include "PR/controller.h"
#include "PR/siint.h"
#include "PR/rcp.h"
#include "macros.h"
void __osPackReadData(void);
static void __osPackReadData(void);
s32 osContStartReadData(OSMesgQueue *mq) {
s32 ret;
int i;
s32 osContStartReadData(OSMesgQueue* mq) {
s32 ret = 0;
__osSiGetAccess();
if (__osContLastCmd != CONT_CMD_READ_BUTTON) {
__osPackReadData();
ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam);
ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray);
#ifdef BBPLAYER
__osContLastCmd = CONT_CMD_CHANNEL_RESET;
#else
__osContLastCmd = CONT_CMD_READ_BUTTON;
#endif
__osSiRelAccess();
return ret;
}
void osContGetReadData(OSContPad *data) {
u8 *ptr;
extern u32 __osBbIsBb;
extern u32 __osBbHackFlags;
void osContGetReadData(OSContPad* data) {
u8* ptr = (u8*)__osContPifRam.ramarray;
__OSContReadFormat readformat;
int i;
ptr = (u8 *)&__osContPifRam.ramarray;
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContReadFormat), data++) {
readformat = *(__OSContReadFormat *)ptr;
readformat = *(__OSContReadFormat*)ptr;
data->errno = CHNL_ERR(readformat);
if (data->errno == 0) {
data->button = readformat.button;
data->stick_x = readformat.stick_x;
data->stick_y = readformat.stick_y;
if (data->errno != 0) {
continue;
}
data->button = readformat.button;
data->stick_x = readformat.stick_x;
data->stick_y = readformat.stick_y;
}
#ifdef BBPLAYER
if (__osBbIsBb && __osBbHackFlags != 0) {
OSContPad tmp;
data -= __osMaxControllers;
tmp = data[0];
data[0] = data[__osBbHackFlags];
data[__osBbHackFlags] = tmp;
}
#endif
}
void __osPackReadData(void) {
u8 *ptr;
static void __osPackReadData(void) {
u8* ptr = (u8*)__osContPifRam.ramarray;
__OSContReadFormat readformat;
int i;
ptr = (u8*)&__osContPifRam.ramarray;
for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) {
for (i = 0; i < ARRLEN(__osContPifRam.ramarray); i++) {
__osContPifRam.ramarray[i] = 0;
}
__osContPifRam.pifstatus = CONT_CMD_EXE;
readformat.dummy = CONT_CMD_NOP;
readformat.txsize = CONT_CMD_READ_BUTTON_TX;
readformat.rxsize = CONT_CMD_READ_BUTTON_RX;
readformat.cmd = CONT_CMD_READ_BUTTON;
readformat.button = -1;
readformat.button = 0xFFFF;
readformat.stick_x = -1;
readformat.stick_y = -1;
for (i = 0; i < __osMaxControllers; i++) {
*(__OSContReadFormat*)ptr = readformat;
ptr += sizeof(__OSContReadFormat);

View File

@ -1,12 +1,13 @@
#include "ultra64.h"
#include "macros.h"
#include "PR/siint.h"
#include "PR/os_internal.h"
#include "controller.h"
#include "PR/controller.h"
#include "PR/siint.h"
s32 __osContinitialized = 0;
extern u32 __osBbIsBb;
extern u32 __osBbHackFlags;
extern u32 __osBbPakAddress[4];
OSPifRam __osContPifRam ALIGNED(16);
OSPifRam __osContPifRam BBALIGNED(16);
u8 __osContLastCmd;
u8 __osMaxControllers;
@ -14,6 +15,8 @@ OSTimer __osEepromTimer;
OSMesgQueue __osEepromTimerQ ALIGNED(8);
OSMesg __osEepromTimerMsg;
s32 __osContinitialized = 0;
s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
OSMesg dummy;
s32 ret = 0;
@ -45,7 +48,11 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
__osContGetInitData(bitpattern, data);
#ifdef BBPLAYER
__osContLastCmd = CONT_CMD_CHANNEL_RESET;
#else
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
#endif
__osSiCreateAccessQueue();
osCreateMesgQueue(&__osEepromTimerQ, &__osEepromTimerMsg, 1);
@ -55,21 +62,40 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
void __osContGetInitData(u8* pattern, OSContStatus* data) {
u8* ptr;
__OSContRequesFormat requestHeader;
s32 i;
u8 bits;
int i;
u8 bits = 0;
bits = 0;
ptr = (u8*) __osContPifRam.ramarray;
ptr = (u8*)__osContPifRam.ramarray;
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestHeader), data++) {
requestHeader = *(__OSContRequesFormat*)ptr;
data->errno = CHNL_ERR(requestHeader);
if (data->errno == 0) {
data->type = requestHeader.typel << 8 | requestHeader.typeh;
data->status = requestHeader.status;
bits |= 1 << i;
if (data->errno != 0) {
continue;
}
data->type = requestHeader.typel << 8 | requestHeader.typeh;
#ifdef BBPLAYER
data->status = __osBbPakAddress[i] != 0;
#else
data->status = requestHeader.status;
#endif
bits |= 1 << i;
}
#ifdef BBPLAYER
if (__osBbIsBb && __osBbHackFlags != 0) {
OSContStatus tmp;
bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) | ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags);
data -= __osMaxControllers;
tmp = data[0];
data[0] = data[__osBbHackFlags];
data[__osBbHackFlags] = tmp;
}
#endif
*pattern = bits;
}
@ -83,7 +109,7 @@ void __osPackRequestData(u8 cmd) {
}
__osContPifRam.pifstatus = CONT_CMD_EXE;
ptr = (u8*) __osContPifRam.ramarray;
ptr = (u8*)__osContPifRam.ramarray;
requestHeader.dummy = CONT_CMD_NOP;
requestHeader.txsize = CONT_CMD_RESET_TX;
requestHeader.rxsize = CONT_CMD_RESET_RX;

View File

@ -13,7 +13,11 @@ void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void
t->context.sp = (s64)(s32)sp - 16;
t->context.ra = (u64)__osCleanupThread;
mask = OS_IM_ALL;
#if VERSION_IQUE
t->context.sr = (mask & (SR_IMASK | SR_IE)) | SR_EXL;
#else
t->context.sr = SR_IMASK | SR_EXL | SR_IE;
#endif
t->context.rcp = (mask & RCP_IMASK) >> RCP_IMASKSHIFT;
t->context.fpcsr = (u32)(FPCSR_FS | FPCSR_EV);
t->fp = 0;

View File

@ -1,10 +1,10 @@
#include "PR/os_internal.h"
#include "PR/osint.h"
void osDestroyThread(OSThread *t) {
void osDestroyThread(OSThread* t) {
register u32 saveMask;
register OSThread *pred;
register OSThread *succ;
register OSThread* pred;
register OSThread* succ;
saveMask = __osDisableInt();
@ -25,7 +25,6 @@ void osDestroyThread(OSThread *t) {
break;
}
pred = succ;
succ = pred->tlnext;
}
}

View File

@ -1,31 +1,38 @@
#include "PR/os_internal.h"
#include "PR/rcp.h"
#include "PR/piint.h"
void __osDevMgrMain(void *args) {
OSIoMesg *mb = NULL;
extern u32 __osBbIsBb;
void __osDevMgrMain(void* args) {
OSIoMesg* mb;
OSMesg em;
OSMesg dummy;
s32 ret = 0;
OSDevMgr *dm = (OSDevMgr *)args;
s32 ret;
OSDevMgr* dm;
s32 messageSend = 0;
#ifdef BBPLAYER
int check = 0;
#endif
while (TRUE)
{
dm = (OSDevMgr*)args;
mb = NULL;
ret = 0;
while (TRUE) {
osRecvMesg(dm->cmdQueue, (OSMesg)&mb, OS_MESG_BLOCK);
if (mb->piHandle != NULL &&
mb->piHandle->type == DEVICE_TYPE_64DD &&
if (mb->piHandle != NULL && mb->piHandle->type == DEVICE_TYPE_64DD &&
(mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0 ||
mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_1))
{
__OSBlockInfo *blockInfo;
__OSTranxInfo *info;
mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_1)) {
__OSBlockInfo* blockInfo;
__OSTranxInfo* info;
info = &mb->piHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
info->sectorNum = -1;
if (info->transferMode != LEO_SECTOR_MODE) {
blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr - blockInfo->sectorSize);
blockInfo->dramAddr = (void*)((u32)blockInfo->dramAddr - blockInfo->sectorSize);
}
if (info->transferMode == LEO_TRACK_MODE && mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0) {
@ -38,32 +45,32 @@ void __osDevMgrMain(void *args) {
__osResetGlobalIntMask(OS_IM_PI);
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, (info->bmCtlShadow | 0x80000000));
doMessageSend:
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
info = &mb->piHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
readblock1:
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
info = &mb->piHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
if (blockInfo->errStatus == LEO_ERROR_29) {
u32 stat;
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET);
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow);
__osEPiRawReadIo(mb->piHandle, LEO_STATUS, &stat);
if (blockInfo->errStatus == LEO_ERROR_29) {
u32 stat;
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET);
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow);
__osEPiRawReadIo(mb->piHandle, LEO_STATUS, &stat);
if (stat & LEO_STATUS_MECHANIC_INTERRUPT) {
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR);
}
blockInfo->errStatus = LEO_ERROR_4;
IO_WRITE(PI_STATUS_REG, PI_CLR_INTR);
__osSetGlobalIntMask(OS_IM_PI | SR_IBIT4);
if (stat & LEO_STATUS_MECHANIC_INTERRUPT) {
__osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR);
}
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
blockInfo->errStatus = LEO_ERROR_4;
IO_WRITE(PI_STATUS_REG, PI_CLR_INTR);
__osSetGlobalIntMask(OS_IM_PI | SR_IBIT4);
}
if (messageSend == 1 && mb->piHandle->transferInfo.block[0].errStatus == LEO_ERROR_GOOD) {
messageSend = 0;
goto doMessageSend;
}
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
if (messageSend == 1 && mb->piHandle->transferInfo.block[0].errStatus == LEO_ERROR_GOOD) {
messageSend = 0;
goto readblock1;
}
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
if (mb->piHandle->transferInfo.blockNum == 1) {
@ -73,6 +80,13 @@ doMessageSend:
switch (mb->hdr.type) {
case OS_MESG_TYPE_DMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
#ifdef BBPLAYER
if (__osBbIsBb == TRUE && ((u32)mb->dramAddr & 0x7F) >= 0x60) {
check = TRUE;
ret = dm->dma(OS_READ, mb->devAddr, (void*)(u32)0x80600000, mb->size);
break;
}
#endif
ret = dm->dma(OS_READ, mb->devAddr, mb->dramAddr, mb->size);
break;
case OS_MESG_TYPE_DMAWRITE:
@ -81,13 +95,18 @@ doMessageSend:
break;
case OS_MESG_TYPE_EDMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->edma(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr,
mb->size);
#ifdef BBPLAYER
if (__osBbIsBb == TRUE && ((u32)mb->dramAddr & 0x7F) >= 0x60) {
check = TRUE;
ret = dm->edma(mb->piHandle, OS_READ, mb->devAddr, (void*)(u32)0x80600000, mb->size);
break;
}
#endif
ret = dm->edma(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, mb->size);
break;
case OS_MESG_TYPE_EDMAWRITE:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->edma(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr,
mb->size);
ret = dm->edma(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr, mb->size);
break;
case OS_MESG_TYPE_LOOPBACK:
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
@ -100,6 +119,14 @@ doMessageSend:
if (ret == 0) {
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
#ifdef BBPLAYER
if (__osBbIsBb == TRUE && check) {
osInvalDCache((void*)0x80600000, (mb->size + DCACHE_LINEMASK) & ~DCACHE_LINEMASK);
bcopy((void*)0x80600000, mb->dramAddr, mb->size);
check = FALSE;
osWritebackDCache(mb->dramAddr, mb->size);
}
#endif
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
}

View File

@ -1,16 +1,100 @@
#include "PR/piint.h"
#include "PR/ultraerror.h"
#include "PR/bcp.h"
s32 __osEPiRawStartDma(OSPiHandle *pihandle, s32 direction, u32 devAddr, void *dramAddr, u32 size)
{
s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* dramAddr, u32 size) {
#ifdef BBPLAYER
u64 dummybuf[2];
#endif
u32 stat;
u32 domain;
#ifdef BBPLAYER
u32 buffer;
u32 pgsize;
u16* adr;
u32 i;
#endif
EPI_SYNC(pihandle, stat, domain);
#ifdef BBPLAYER
if (direction == OS_READ) {
pgsize = 1;
for (i = 1; i <= pihandle->pageSize + 2; i++) {
pgsize *= 2;
}
if ((devAddr & (pgsize - 1)) == (pgsize - 2)) {
__osEPiRawReadIo(pihandle, devAddr - 2, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr);
*(adr++) = (u16)buffer;
devAddr += 2;
dramAddr = adr;
size -= 2;
if (size >= 4) {
__osEPiRawReadIo(pihandle, devAddr, &buffer);
adr = (u16*)dramAddr;
*(adr++) = buffer >> 16;
*(adr++) = (u16)buffer;
devAddr += 4;
dramAddr = adr;
size -= 4;
if (size != 0) {
__osEPiRawReadIo(pihandle, devAddr, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr);
*(adr++) = buffer >> 16;
devAddr += 2;
dramAddr = adr;
size -= 2;
}
}
}
if (((((devAddr + size) & (pgsize - 1)) == 2) | (size == 2)) != 0) {
if ((devAddr + size) & 2) {
__osEPiRawReadIo(pihandle, devAddr + size - 2, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr) + (size - 2) / 2;
*adr = buffer >> 16;
} else {
__osEPiRawReadIo(pihandle, devAddr + size - 4, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr) + (size - 2) / 2;
*adr = (u16)buffer;
}
size -= 2;
}
if (size == 0) {
size = 8;
dramAddr = (void*)dummybuf;
devAddr = 0;
}
}
#endif
IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dramAddr));
IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS(pihandle->baseAddress | devAddr));
switch (direction)
{
#ifdef BBPLAYER
if (direction >= 2u) {
return -1;
}
if ((pihandle->baseAddress | devAddr) <= 0x400) {
IO_WRITE((direction == OS_READ) ? PI_5C_REG : PI_58_REG, size - 1);
} else {
IO_WRITE((direction == OS_READ) ? PI_WR_LEN_REG : PI_RD_LEN_REG, size - 1);
}
#else
switch (direction) {
case OS_READ:
IO_WRITE(PI_WR_LEN_REG, size - 1);
break;
@ -20,5 +104,6 @@ s32 __osEPiRawStartDma(OSPiHandle *pihandle, s32 direction, u32 devAddr, void *d
default:
return -1;
}
#endif
return 0;
}

51
src/os/flashinit.c Normal file
View File

@ -0,0 +1,51 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
#include "macros.h"
u32 __osFlashID[4] ALIGNED(8);
OSIoMesg __osFlashMsg ALIGNED(8);
OSMesgQueue __osFlashMessageQ ALIGNED(8);
OSPiHandle __osFlashHandler ALIGNED(8);
OSMesg __osFlashMsgBuf[1];
s32 __osFlashVersion;
OSPiHandle* osFlashInit(void) {
#ifndef BBPLAYER
u32 flash_type;
u32 flash_maker;
#endif
osCreateMesgQueue(&__osFlashMessageQ, __osFlashMsgBuf, ARRAY_COUNT(__osFlashMsgBuf));
if (__osFlashHandler.baseAddress == PHYS_TO_K1(FLASH_START_ADDR)) {
return &__osFlashHandler;
}
__osFlashHandler.type = DEVICE_TYPE_FLASH;
__osFlashHandler.baseAddress = PHYS_TO_K1(FLASH_START_ADDR);
__osFlashHandler.latency = FLASH_LATENCY;
__osFlashHandler.pulse = FLASH_PULSE;
__osFlashHandler.pageSize = FLASH_PAGE_SIZE;
__osFlashHandler.relDuration = FLASH_REL_DURATION;
__osFlashHandler.domain = PI_DOMAIN2;
__osFlashHandler.speed = 0;
bzero(&__osFlashHandler.transferInfo, sizeof(__OSTranxInfo));
osEPiLinkHandle(&__osFlashHandler);
#ifndef BBPLAYER
osFlashReadId(&flash_type, &flash_maker);
if (flash_maker == FLASH_VERSION_MX_C || flash_maker == FLASH_VERSION_MX_A ||
flash_maker == FLASH_VERSION_MX_PROTO_A) {
__osFlashVersion = OLD_FLASH;
} else {
__osFlashVersion = NEW_FLASH;
}
#else
__osFlashVersion = NEW_FLASH;
#endif
return &__osFlashHandler;
}

64
src/os/flashreadarray.c Normal file
View File

@ -0,0 +1,64 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
extern u32 __osBbFlashAddress;
extern u32 __osBbFlashSize;
s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 page_num, void* dramAddr, u32 n_pages, OSMesgQueue* mq) {
#ifdef BBPLAYER
if (__osBbFlashSize != 0 && __osBbFlashSize >= (page_num + n_pages) * 0x80) {
bcopy((void*)(__osBbFlashAddress + page_num * 0x80), dramAddr, n_pages * 0x80);
return osSendMesg(mq, NULL, OS_MESG_NOBLOCK);
} else {
bzero(dramAddr, n_pages * 0x80);
return osSendMesg(mq, NULL, OS_MESG_NOBLOCK);
}
#else
u32 ret;
u32 tmp;
u32 end_page;
u32 one_dma_pages;
// select read array mode
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_READ_ARRAY);
// dummy read?
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &tmp);
// DMA requested pages
mb->hdr.pri = priority;
mb->hdr.retQueue = mq;
mb->dramAddr = dramAddr;
end_page = page_num + n_pages - 1;
if ((end_page & 0xF00) != (page_num & 0xF00)) {
one_dma_pages = 256 - (page_num & 0xFF);
n_pages -= one_dma_pages;
mb->size = one_dma_pages * FLASH_BLOCK_SIZE;
mb->devAddr = __osFlashGetAddr(page_num);
osEPiStartDma(&__osFlashHandler, mb, OS_READ);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
page_num = (page_num + 256) & 0xF00;
mb->dramAddr = (u32)mb->dramAddr + mb->size;
}
while (n_pages > 256) {
one_dma_pages = 256;
n_pages -= 256;
mb->size = one_dma_pages * FLASH_BLOCK_SIZE;
mb->devAddr = __osFlashGetAddr(page_num);
osEPiStartDma(&__osFlashHandler, mb, OS_READ);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
page_num += 256;
mb->dramAddr = (u32)mb->dramAddr + mb->size;
}
mb->size = n_pages * FLASH_BLOCK_SIZE;
mb->devAddr = __osFlashGetAddr(page_num);
ret = osEPiStartDma(&__osFlashHandler, mb, OS_READ);
return ret;
#endif
}

48
src/os/flashsectorerase.c Normal file
View File

@ -0,0 +1,48 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
extern u32 __osBbFlashAddress;
extern u32 __osBbFlashSize;
s32 osFlashSectorErase(u32 page_num) {
#ifdef BBPLAYER
if (__osBbFlashSize != 0 && page_num * 0x80 < __osBbFlashSize) {
int i;
u32* p = (u32*)(__osBbFlashAddress + page_num * 0x80);
for (i = 0; i < 0x80 / 4; i++) {
p[i] = -1;
}
return FLASH_STATUS_ERASE_OK;
}
return FLASH_STATUS_ERASE_ERROR;
#else
u32 status;
OSTimer mytimer;
OSMesgQueue timerMesgQueue;
OSMesg dummy;
// start sector erase operation
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_SECTOR_ERASE | page_num);
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE);
// wait for completion by polling erase-busy flag
osCreateMesgQueue(&timerMesgQueue, &dummy, 1);
do {
osSetTimer(&mytimer, OS_USEC_TO_CYCLES(12500), 0, &timerMesgQueue, &dummy);
osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK);
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
} while ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY);
// check erase operation status, clear status
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
osFlashClearStatus();
if (((status & 0xFF) == 8) || ((status & 0xFF) == 0x48) || ((status & 8) == 8)) {
return FLASH_STATUS_ERASE_OK;
} else {
return FLASH_STATUS_ERASE_ERROR;
}
#endif
}

46
src/os/flashwritearray.c Normal file
View File

@ -0,0 +1,46 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
extern u32 __osBbFlashAddress;
extern u32 __osBbFlashSize;
extern u8 __osBbFlashBuffer[128];
s32 osFlashWriteArray(u32 page_num) {
#ifdef BBPLAYER
if (__osBbFlashSize != 0 && __osBbFlashSize >= page_num * 0x80 + 0x80) {
bcopy(__osBbFlashBuffer, (void*)(__osBbFlashAddress + page_num * 0x80), 0x80);
return FLASH_STATUS_WRITE_OK;
}
return FLASH_STATUS_WRITE_ERROR;
#else
u32 status;
OSTimer mytimer;
OSMesgQueue timerMesgQueue;
OSMesg dummy;
if ((u32)__osFlashVersion == NEW_FLASH) {
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM);
}
// start program page operation
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PROGRAM_PAGE | page_num);
// wait for completion by polling write-busy flag
osCreateMesgQueue(&timerMesgQueue, &dummy, 1);
do {
osSetTimer(&mytimer, OS_USEC_TO_CYCLES(200), 0, &timerMesgQueue, &dummy);
osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK);
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
} while ((status & FLASH_STATUS_WRITE_BUSY) == FLASH_STATUS_WRITE_BUSY);
// check program operation status, clear status
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
osFlashClearStatus();
if (((status & 0xFF) == 4) || ((status & 0xFF) == 0x44) || ((status & 4) == 4)) {
return FLASH_STATUS_WRITE_OK;
} else {
return FLASH_STATUS_WRITE_ERROR;
}
#endif
}

35
src/os/flashwritebuffer.c Normal file
View File

@ -0,0 +1,35 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
extern u32 __osBbFlashAddress;
extern u32 __osBbFlashSize;
#ifdef BBPLAYER
u8 __osBbFlashBuffer[0x80];
#endif
s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq) {
#ifdef BBPLAYER
if (__osBbFlashSize != 0) {
bcopy(dramAddr, __osBbFlashBuffer, 0x80);
return osSendMesg(mq, NULL, NULL);
}
return -1;
#else
s32 ret;
// select page program mode
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM);
// DMA 128-byte page
mb->hdr.pri = priority;
mb->hdr.retQueue = mq;
mb->dramAddr = dramAddr;
mb->devAddr = 0;
mb->size = FLASH_BLOCK_SIZE;
ret = osEPiStartDma(&__osFlashHandler, mb, OS_WRITE);
return ret;
#endif
}

View File

@ -1,33 +1,51 @@
#include "include_asm.h"
#include "PR/os_internal.h"
#include "PR/rcp.h"
typedef struct
{
/* 0x0 */ unsigned int inst1;
/* 0x4 */ unsigned int inst2;
/* 0x8 */ unsigned int inst3;
/* 0xC */ unsigned int inst4;
typedef struct {
/* 0x0 */ unsigned int inst1;
/* 0x4 */ unsigned int inst2;
/* 0x8 */ unsigned int inst3;
/* 0xC */ unsigned int inst4;
} __osExceptionVector;
extern __osExceptionVector __osExceptionPreamble;
extern __osExceptionVector __osExceptionPreamble[];
extern OSPiHandle __Dom1SpeedParam;
extern OSPiHandle __Dom2SpeedParam;
#ifdef BBPLAYER
#include "PR/bcp.h"
extern u32 __osBbIsBb;
extern u32 __osBbEepromSize;
extern u32 __osBbPakSize;
extern u32 __osBbFlashSize;
extern u32 __osBbEepromAddress;
extern u32 __osBbPakAddress[4];
extern u32 __osBbFlashAddress;
extern u32 __osBbSramSize;
extern u32 __osBbSramAddress;
char __osBbLibVersion[] = "libultra 02/12/04 10:57:58";
#endif
OSTime osClockRate = OS_CLOCK_RATE;
s32 osViClock = VI_NTSC_CLOCK;
u32 __osShutdown = 0;
#ifdef BBPLAYER
u32 __osShutdownTime = 0;
#endif
u32 __OSGlobalIntMask = OS_IM_ALL;
#ifdef _FINALROM
extern u32 __osFinalrom;
u32 __osFinalrom;
#else
void* __printfunc = NULL;
u32 __kmc_pt_mode;
void* __printfunc = NULL;
#endif
#if !VERSION_IQUE
s32 D_80095904[3] = { 0 }; // padding?
s32 D_80095910[10] = { 0 };
s32 D_80095938[2] = { 0 };
#endif
void __createSpeedParam(void) {
__Dom1SpeedParam.type = DEVICE_TYPE_INIT;
@ -50,28 +68,59 @@ void __osInitialize_common() {
__osFinalrom = TRUE;
#endif
__osSetSR(__osGetSR() | SR_CU1); //enable fpu
__osSetFpcCsr(FPCSR_FS | FPCSR_EV); //flush denorm to zero, enable invalid operation
__osSetSR(__osGetSR() | SR_CU1); // enable fpu
__osSetFpcCsr(FPCSR_FS | FPCSR_EV); // flush denorm to zero, enable invalid operation
__osSetWatchLo(0x4900000);
#ifdef BBPLAYER
{
u32 x, y;
IO_WRITE(MI_3C_REG, 0x22000);
x = IO_READ(MI_3C_REG);
IO_WRITE(MI_3C_REG, 0x11000);
y = IO_READ(MI_3C_REG);
__osBbIsBb = ((x & 0x140) == 0x140) && ((y & 0x140) == 0);
}
if (__osBbIsBb) {
if (IO_READ(PI_60_REG) & 0xC0000000) {
__osBbIsBb = 2;
}
}
if (__osBbIsBb) {
osTvType = OS_TV_NTSC;
osRomType = 0;
osResetType = 0;
osVersion = 1;
}
if (!__osBbIsBb) {
#endif
while (__osSiRawReadIo(PIF_RAM_END - 3, &pifdata)) { //last byte of joychannel ram
;
}
while (__osSiRawWriteIo(PIF_RAM_END - 3, pifdata | 8)) {
; //todo: magic contant
; //todo: magic constant
}
*(__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));
#ifdef BBPLAYER
}
#endif
*(__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
if (osResetType == 0) { // cold reset
bzero(osAppNMIBuffer, OS_APP_NMI_BUFSIZE);
}
@ -83,13 +132,36 @@ void __osInitialize_common() {
osViClock = VI_NTSC_CLOCK;
}
// Wait until there are no RCP interrupts
// Lock up if there are RCP interrupts pending
if (__osGetCause() & CAUSE_IP5) {
while (TRUE) {
;
}
}
#ifdef BBPLAYER
if (!__osBbIsBb) {
// On iQue these are set before the game runs
__osBbEepromSize = 0x200;
__osBbPakSize = 0x8000;
__osBbFlashSize = 0x20000;
__osBbEepromAddress = 0x803FFE00;
__osBbPakAddress[0] = 0x803F7E00;
__osBbPakAddress[1] = 0;
__osBbPakAddress[2] = 0;
__osBbPakAddress[3] = 0;
__osBbFlashAddress = 0x803E0000;
__osBbSramSize = __osBbFlashSize;
__osBbSramAddress = __osBbFlashAddress;
}
if (__osBbIsBb) {
IO_WRITE(PI_64_REG, IO_READ(PI_64_REG) & 0x7FFFFFFF);
IO_WRITE(MI_3C_REG, 0x20000);
IO_WRITE(SI_0C_REG, 0);
IO_WRITE(SI_1C_REG, (IO_READ(SI_1C_REG) & 0x80FFFFFF) | 0x2F400000);
}
#endif
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);

View File

@ -1,16 +1,25 @@
#include "macros.h"
#include "PR/os_internal.h"
#include "controller.h"
#include "PR/controller.h"
#include "PR/siint.h"
#ifndef BBPLAYER
/*
static OSPifRam __MotorDataBuf[MAXCONTROLLERS] ALIGNED(8);
*/
extern OSPifRam __MotorDataBuf[MAXCONTROLLERS];
#endif
#define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr))
s32 __osMotorAccess(OSPfs* pfs, s32 flag) {
#ifdef BBPLAYER
return PFS_ERR_INVALID;
#else
int i;
s32 ret;
u8* ptr = (u8*) &__MotorDataBuf[pfs->channel];
u8* ptr = (u8*)&__MotorDataBuf[pfs->channel];
if (!(pfs->status & PFS_MOTOR_INITIALIZED)) {
return 5;
@ -46,10 +55,12 @@ s32 __osMotorAccess(OSPfs* pfs, s32 flag) {
__osSiRelAccess();
return ret;
#endif
}
static void _MakeMotorData(int channel, OSPifRam *mdata) {
u8 *ptr = (u8*) mdata->ramarray;
#ifndef BBPLAYER
static void __osMakeMotorData(int channel, OSPifRam* mdata) {
u8* ptr = (u8*)mdata->ramarray;
__OSContRamReadFormat ramreadformat;
int i;
@ -70,8 +81,12 @@ static void _MakeMotorData(int channel, OSPifRam *mdata) {
ptr += sizeof(__OSContRamReadFormat);
ptr[0] = CONT_CMD_END;
}
#endif
s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) {
s32 osMotorInit(OSMesgQueue* mq, OSPfs* pfs, int channel) {
#ifdef BBPLAYER
return PFS_ERR_DEVICE;
#else
s32 ret;
u8 temp[32];
@ -127,9 +142,10 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) {
}
if (!(pfs->status & PFS_MOTOR_INITIALIZED)) {
_MakeMotorData(channel, &__MotorDataBuf[channel]);
__osMakeMotorData(channel, &__MotorDataBuf[channel]);
}
pfs->status = PFS_MOTOR_INITIALIZED;
return 0;
#endif
}

View File

@ -1,140 +1,145 @@
#include "PR/os_internal.h"
#include "PR/controller.h"
#include "PR/rmon.h"
s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared,
s32* finalPage);
#define ROUND_UP_DIVIDE(numerator, denominator) (((numerator) + (denominator) - 1) / (denominator))
s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, int fileSize, s32* fileNo) {
s32 startPage;
s32 decleared;
s32 prevPage;
s32 oldPrevPage = 0;
s32 osPfsAllocateFile(OSPfs* pfs, u16 company_code, u32 game_code, u8* game_name, u8* ext_name, int file_size_in_bytes,
s32* file_no) {
int start_page;
int decleared;
int last_page;
int old_last_page = 0;
s32 ret = 0;
s32 fileSizeInPages;
int file_size_in_pages;
__OSInode inode;
__OSInode backupInode;
__OSInode backup_inode;
__OSDir dir;
u8 bank;
u8 prevBank = 0;
s32 firsttime = 0;
u8 old_bank = 0;
int firsttime = 0;
s32 bytes;
__OSInodeUnit fpage;
if ((companyCode == 0) || (gameCode == 0)) {
if (company_code == 0 || game_code == 0) {
return PFS_ERR_INVALID;
}
fileSizeInPages = (fileSize + PFS_PAGE_SIZE - 1) / PFS_PAGE_SIZE;
file_size_in_pages = ROUND_UP_DIVIDE(file_size_in_bytes, BLOCKSIZE * PFS_ONE_PAGE);
if (((ret = osPfsFindFile(pfs, companyCode, gameCode, gameName, extName, fileNo)) != 0) &&
(ret != PFS_ERR_INVALID)) {
if (((ret = osPfsFindFile(pfs, company_code, game_code, game_name, ext_name, file_no)) != 0) &&
ret != PFS_ERR_INVALID) {
return ret;
}
if (*fileNo != -1) {
if (*file_no != -1) {
return PFS_ERR_EXIST;
}
ret = osPfsFreeBlocks(pfs, &bytes);
if (fileSize > bytes) {
if (file_size_in_bytes > bytes) {
return PFS_DATA_FULL;
}
if (fileSizeInPages == 0) {
return (PFS_ERR_INVALID);
if (file_size_in_pages == 0) {
return PFS_ERR_INVALID;
}
if (((ret = osPfsFindFile(pfs, 0, 0, 0, 0, fileNo)) != 0) && (ret != PFS_ERR_INVALID)) {
if (((ret = osPfsFindFile(pfs, 0, 0, NULL, NULL, file_no)) != 0) && ret != PFS_ERR_INVALID) {
return ret;
}
if (*fileNo == -1) {
if (*file_no == -1) {
return PFS_DIR_FULL;
}
for (bank = PFS_ID_BANK_256K; bank < pfs->banks; bank++) {
if ((ret = __osPfsRWInode(pfs, &inode, PFS_READ, bank)) != 0) {
return ret;
}
ret = __osPfsDeclearPage(pfs, &inode, fileSizeInPages, &startPage, bank, &decleared, &prevPage);
if (ret) {
return ret;
}
if (startPage != -1) { /* There is free space */
for (bank = 0; bank < pfs->banks; bank++) {
ERRCK(__osPfsRWInode(pfs, &inode, PFS_READ, bank));
ERRCK(__osPfsDeclearPage(pfs, &inode, file_size_in_pages, &start_page, bank, &decleared, &last_page));
if (start_page != -1) {
if (firsttime == 0) {
fpage.inode_t.page = (u8)startPage;
fpage.inode_t.page = start_page;
fpage.inode_t.bank = bank;
} else { /* Writing previous bank inode */
backupInode.inode_page[oldPrevPage].inode_t.bank = bank;
backupInode.inode_page[oldPrevPage].inode_t.page = (u8)startPage;
if ((ret = __osPfsRWInode(pfs, &backupInode, PFS_WRITE, prevBank)) != 0) {
return ret;
}
} else {
backup_inode.inode_page[old_last_page].inode_t.bank = bank;
backup_inode.inode_page[old_last_page].inode_t.page = start_page;
ERRCK(__osPfsRWInode(pfs, &backup_inode, PFS_WRITE, old_bank));
}
if (fileSizeInPages > decleared) {
bcopy(&inode, &backupInode, sizeof(__OSInode));
oldPrevPage = prevPage;
prevBank = bank;
fileSizeInPages -= decleared;
if (file_size_in_pages > decleared) {
bcopy(&inode, &backup_inode, sizeof(__OSInode));
old_last_page = last_page;
old_bank = bank;
file_size_in_pages -= decleared;
firsttime++;
} else {
fileSizeInPages = 0;
if ((ret = __osPfsRWInode(pfs, &inode, PFS_WRITE, bank)) != 0) {
return ret;
}
file_size_in_pages = 0;
ERRCK(__osPfsRWInode(pfs, &inode, PFS_WRITE, bank));
break;
}
}
}
if ((fileSizeInPages > 0) || (startPage == -1)) {
if (file_size_in_pages > 0 || start_page == -1) {
return PFS_ERR_INCONSISTENT;
}
dir.start_page = fpage;
dir.company_code = companyCode;
dir.game_code = gameCode;
dir.company_code = company_code;
dir.game_code = game_code;
dir.data_sum = 0;
bcopy(gameName, dir.game_name, PFS_FILE_NAME_LEN);
bcopy(extName, dir.ext_name, PFS_FILE_EXT_LEN);
bcopy(game_name, dir.game_name, PFS_FILE_NAME_LEN);
bcopy(ext_name, dir.ext_name, PFS_FILE_EXT_LEN);
return __osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + *fileNo, (u8*)&dir, 0);
ret = __osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + *file_no, (u8*)&dir, FALSE);
return ret;
}
s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared,
s32* finalPage) {
s32 j;
s32 spage, prevPage;
s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, int file_size_in_pages, int* first_page, u8 bank, int* decleared,
int* last_page) {
int j;
int spage;
int old_page;
s32 ret = 0;
s32 offset = ((bank > PFS_ID_BANK_256K) ? 1 : pfs->inode_start_page);
int offset = bank > 0 ? 1 : pfs->inode_start_page;
for (j = offset; j < PFS_INODE_SIZE_PER_PAGE; j++) {
if (inode->inode_page[j].ipage == PFS_PAGE_NOT_USED) {
for (j = offset; j < ARRLEN(inode->inode_page); j++) {
if (inode->inode_page[j].ipage == 3) {
break;
}
}
if (j == PFS_INODE_SIZE_PER_PAGE) {
*startPage = -1;
if (j == ARRLEN(inode->inode_page)) {
*first_page = -1;
return ret;
}
spage = j;
*decleared = 1;
prevPage = j;
old_page = j;
j++;
while ((fileSizeInPages > *decleared) && (j < PFS_INODE_SIZE_PER_PAGE)) {
if (inode->inode_page[j].ipage == PFS_PAGE_NOT_USED) {
inode->inode_page[prevPage].inode_t.bank = (u8)bank;
inode->inode_page[prevPage].inode_t.page = (u8)j;
prevPage = j;
while (file_size_in_pages > *decleared && j < ARRLEN(inode->inode_page)) {
if (inode->inode_page[j].ipage == 3) {
inode->inode_page[old_page].inode_t.bank = bank;
inode->inode_page[old_page].inode_t.page = j;
old_page = j;
(*decleared)++;
}
j++;
}
*startPage = spage;
if ((j == (PFS_INODE_SIZE_PER_PAGE)) && (fileSizeInPages > *decleared)) {
*finalPage = prevPage;
*first_page = spage;
if (j == ARRLEN(inode->inode_page) && file_size_in_pages > *decleared) {
*last_page = old_page;
} else {
inode->inode_page[prevPage].ipage = PFS_EOF;
*finalPage = 0;
inode->inode_page[old_page].ipage = 1;
*last_page = 0;
}
return ret;
}

View File

@ -1,42 +1,56 @@
#include "PR/os_internal.h"
#include "PR/controller.h"
#include "PR/siint.h"
extern u8 __osPfsInodeCacheBank;
extern u32 __osBbPakAddress[4];
void __osPfsRequestOneChannel(int channel, u8 cmd);
void __osPfsGetOneChannelData(int channel, OSContStatus *data);
void __osPfsGetOneChannelData(int channel, OSContStatus* data);
s32 __osPfsGetStatus(OSMesgQueue *queue, int channel) {
s32 ret;
s32 __osPfsGetStatus(OSMesgQueue* queue, int channel) {
#ifdef BBPLAYER
if (__osBbPakAddress[channel] != 0) {
return 0;
}
return PFS_ERR_NOPACK;
#else
s32 ret = 0;
OSMesg dummy;
OSContStatus data;
__osPfsInodeCacheBank = 0xfa;
ret = 0;
__osPfsRequestOneChannel(channel, 0);
__osPfsInodeCacheBank = 250;
__osPfsRequestOneChannel(channel, CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
__osPfsGetOneChannelData(channel, &data);
if (((data.status & CONT_CARD_ON) != 0) && ((data.status & CONT_CARD_PULL) != 0)) {
return PFS_ERR_NEW_PACK;
}
if ((data.errno != 0) || ((data.status & CONT_CARD_ON) == 0)) {
} else if ((data.errno != 0) || ((data.status & CONT_CARD_ON) == 0)) {
return PFS_ERR_NOPACK;
}
if ((data.status & CONT_ADDR_CRC_ER) != 0) {
} else if ((data.status & CONT_ADDR_CRC_ER) != 0) {
return PFS_ERR_CONTRFAIL;
}
return ret;
#endif
}
void __osPfsRequestOneChannel(int channel, u8 cmd) {
u8 *ptr;
u8* ptr;
__OSContRequesFormatShort requestformat;
int i;
__osContLastCmd = CONT_CMD_END;
__osPfsPifRam.pifstatus = CONT_CMD_EXE;
ptr = (u8 *)&__osPfsPifRam;
__osPfsPifRam.pifstatus = CONT_CMD_READ_BUTTON;
ptr = (u8*)&__osPfsPifRam;
requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX;
requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX;
@ -44,27 +58,32 @@ void __osPfsRequestOneChannel(int channel, u8 cmd) {
requestformat.typeh = CONT_CMD_NOP;
requestformat.typel = CONT_CMD_NOP;
requestformat.status = CONT_CMD_NOP;
for (i = 0; i < channel; i++) {
*ptr++ = 0;
*ptr++ = CONT_CMD_REQUEST_STATUS;
}
*(__OSContRequesFormatShort *)ptr = requestformat;
*(__OSContRequesFormatShort*)ptr = requestformat;
ptr += sizeof(__OSContRequesFormatShort);
*ptr = CONT_CMD_END;
}
void __osPfsGetOneChannelData(int channel, OSContStatus *data) {
u8 *ptr;
void __osPfsGetOneChannelData(int channel, OSContStatus* data) {
u8* ptr = (u8*)&__osPfsPifRam;
__OSContRequesFormatShort requestformat;
int i;
ptr = (u8*)&__osPfsPifRam;
for (i = 0; i < channel; i++) {
ptr++;
}
requestformat = *(__OSContRequesFormatShort *)ptr;
requestformat = *(__OSContRequesFormatShort*)ptr;
data->errno = CHNL_ERR(requestformat);
if (data->errno == 0) {
data->type = (requestformat.typel << 8) | (requestformat.typeh);
data->status = requestformat.status;
if (data->errno != 0) {
return;
}
data->type = (requestformat.typel << 8) | (requestformat.typeh);
data->status = requestformat.status;
}

View File

@ -2,28 +2,7 @@
#include "PR/controller.h"
#include "PR/siint.h"
s32 osPfsCheckRamArea(OSPfs *pfs);
s32 osPfsNumFiles(OSPfs *pfs, s32 *max_files, s32 *files_used) {
int j;
s32 ret;
__OSDir dir;
int files;
files = 0;
PFS_CHECK_STATUS;
ERRCK(__osCheckId(pfs));
SET_ACTIVEBANK_TO_ZERO;
for (j = 0; j < pfs->dir_size; j++) {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir));
if (dir.company_code != 0 && dir.game_code != 0) {
files++;
}
}
*files_used = files;
*max_files = pfs->dir_size;
ret = __osPfsGetStatus(pfs->queue, pfs->channel);
return ret;
}
s32 __osPfsCheckRamArea(OSPfs *pfs);
s32 osPfsInitPak(OSMesgQueue *queue, OSPfs *pfs, int channel) {
int k;
@ -37,7 +16,7 @@ s32 osPfsInitPak(OSMesgQueue *queue, OSPfs *pfs, int channel) {
pfs->queue = queue;
pfs->channel = channel;
pfs->status = 0;
ERRCK(osPfsCheckRamArea(pfs));
ERRCK(__osPfsCheckRamArea(pfs));
ERRCK(__osPfsSelectBank(pfs, 0));
ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp));
__osIdCheckSum((u16*)temp, &sum, &isum);
@ -76,7 +55,7 @@ s32 osPfsInitPak(OSMesgQueue *queue, OSPfs *pfs, int channel) {
return ret;
}
s32 osPfsCheckRamArea(OSPfs *pfs) {
s32 __osPfsCheckRamArea(OSPfs *pfs) {
u8 temp1[BLOCKSIZE];
u8 temp2[BLOCKSIZE];
u8 temp3[BLOCKSIZE];

View File

@ -1,14 +1,27 @@
#include "macros.h"
#include "PR/os_internal.h"
#include "PR/controller.h"
#include "PR/siint.h"
extern u32 __osBbIsBb;
extern u32 __osBbHackFlags;
extern u32 __osBbPakAddress[4];
OSPifRam __osPfsPifRam BBALIGNED(16);
s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern) {
s32 ret = 0;
OSMesg msg;
OSMesg dummy;
u8 bitpattern;
OSContStatus contData[MAXCONTROLLERS];
s32 channel;
OSContStatus data[MAXCONTROLLERS];
int channel;
#ifdef BBPLAYER
int crc_error_cnt = 3;
u8 bits = 0;
s32 crcErrorCount = 3;
#else
u8 bits = 0;
s32 crc_error_cnt = 3;
#endif
__osSiGetAccess();
@ -16,26 +29,27 @@ s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern) {
__osPfsRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
__osPfsGetInitData(&bitpattern, &contData[0]);
__osPfsGetInitData(&bitpattern, &data[0]);
for (channel = 0; channel < __osMaxControllers; channel++) {
if ((contData[channel].status & CONT_ADDR_CRC_ER) == 0) {
crcErrorCount--;
if ((data[channel].status & CONT_ADDR_CRC_ER) == 0) {
crc_error_cnt--;
break;
}
}
if (channel == __osMaxControllers) {
crcErrorCount = 0;
crc_error_cnt = 0;
}
} while (crcErrorCount > 0);
} while (crc_error_cnt > 0);
for (channel = 0; channel < __osMaxControllers; channel++) {
if ((contData[channel].errno == 0) && ((contData[channel].status & CONT_CARD_ON) != 0)) {
if ((data[channel].errno == 0) && ((data[channel].status & CONT_CARD_ON) != 0)) {
bits |= (1 << channel);
}
}
@ -44,50 +58,67 @@ s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern) {
return ret;
}
void __osPfsRequestData(u8 poll) {
u8* bufPtr = (u8*)&__osPfsPifRam;
__OSContRequesFormat req;
s32 i;
void __osPfsRequestData(u8 cmd) {
u8* ptr = (u8*)&__osPfsPifRam;
__OSContRequesFormat requestformat;
int i;
__osContLastCmd = poll;
__osPfsPifRam.pifstatus = 1;
req.dummy = 0xFF;
req.txsize = 1;
req.rxsize = 3;
req.cmd = poll;
req.typeh = 0xFF;
req.typel = 0xFF;
req.status = 0xFF;
req.dummy1 = 0xFF;
__osContLastCmd = cmd;
__osPfsPifRam.pifstatus = CONT_CMD_EXE;
requestformat.dummy = CONT_CMD_NOP;
requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX;
requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX;
requestformat.cmd = cmd;
requestformat.typeh = CONT_CMD_NOP;
requestformat.typel = CONT_CMD_NOP;
requestformat.status = CONT_CMD_NOP;
requestformat.dummy1 = CONT_CMD_NOP;
for (i = 0; i < __osMaxControllers; i++) {
*((__OSContRequesFormat*)bufPtr) = req;
bufPtr += sizeof(req);
*((__OSContRequesFormat*)ptr) = requestformat;
ptr += sizeof(__OSContRequesFormat);
}
*((u8*)bufPtr) = CONT_CMD_END;
*ptr = CONT_CMD_END;
}
void __osPfsGetInitData(u8* pattern, OSContStatus* contData) {
u8* bufptr;
__OSContRequesFormat req;
s32 i;
void __osPfsGetInitData(u8* pattern, OSContStatus* data) {
u8* ptr;
__OSContRequesFormat requestformat;
int i;
u8 bits = 0;
bufptr = (u8*)&__osPfsPifRam;
ptr = (u8*)&__osPfsPifRam;
for (i = 0; i < __osMaxControllers; i++, bufptr += sizeof(req), contData++) {
req = *((__OSContRequesFormat*)bufptr);
contData->errno = ((req.rxsize & 0xC0) >> 4);
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestformat), data++) {
requestformat = *((__OSContRequesFormat*)ptr);
data->errno = CHNL_ERR(requestformat);
if (contData->errno) {
if (data->errno != 0) {
continue;
}
contData->type = ((req.typel << 8) | req.typeh);
contData->status = req.status;
data->type = ((requestformat.typel << 8) | requestformat.typeh);
#ifdef BBPLAYER
data->status = __osBbPakAddress[i] != 0;
#else
data->status = requestformat.status;
#endif
bits |= (1 << i);
}
#ifdef BBPLAYER
if (__osBbIsBb && __osBbHackFlags != 0) {
OSContStatus tmp;
bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) | ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags);
data -= __osMaxControllers;
tmp = data[0];
data[0] = data[__osBbHackFlags];
data[__osBbHackFlags] = tmp;
}
#endif
*pattern = bits;
}

23
src/os/pfsnumfiles.c Normal file
View File

@ -0,0 +1,23 @@
#include "PR/controller.h"
#include "PR/siint.h"
s32 osPfsNumFiles(OSPfs *pfs, s32 *max_files, s32 *files_used) {
int j;
s32 ret;
__OSDir dir;
int files;
files = 0;
PFS_CHECK_STATUS;
ERRCK(__osCheckId(pfs));
SET_ACTIVEBANK_TO_ZERO;
for (j = 0; j < pfs->dir_size; j++) {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir));
if (dir.company_code != 0 && dir.game_code != 0) {
files++;
}
}
*files_used = files;
*max_files = pfs->dir_size;
ret = __osPfsGetStatus(pfs->queue, pfs->channel);
return ret;
}

51
src/os/pfssearchfile.c Normal file
View File

@ -0,0 +1,51 @@
#include "PR/os_internal.h"
#include "PR/controller.h"
s32 osPfsFindFile(OSPfs* pfs, u16 company_code, u32 game_code, u8* game_name, u8* ext_name, s32* file_no) {
s32 j;
int i;
__OSDir dir;
s32 ret = 0;
int fail;
if (!(pfs->status & PFS_INITIALIZED)) {
return PFS_ERR_INVALID;
}
ERRCK(__osCheckId(pfs));
for (j = 0; j < pfs->dir_size; j++) {
ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir));
ERRCK(__osPfsGetStatus(pfs->queue, pfs->channel));
if ((dir.company_code == company_code) && dir.game_code == game_code) {
fail = FALSE;
if (game_name != NULL) {
for (i = 0; i < ARRLEN(dir.game_name); i++) {
if (dir.game_name[i] != game_name[i]) {
fail = TRUE;
break;
}
}
}
if (ext_name != NULL && !fail) {
for (i = 0; i < ARRLEN(dir.ext_name); i++) {
if (dir.ext_name[i] != ext_name[i]) {
fail = TRUE;
break;
}
}
}
if (!fail) {
*file_no = j;
return ret;
}
}
}
*file_no = -1;
return PFS_ERR_INVALID;
}

View File

@ -1,54 +1,71 @@
#include "macros.h"
#include "PR/os_internal.h"
#include "PR/ultraerror.h"
#include "PR/piint.h"
OSDevMgr __osPiDevMgr = {0};
OSPiHandle *__osPiTable = NULL;
OSPiHandle __Dom1SpeedParam ALIGNED(8);
OSPiHandle __Dom2SpeedParam ALIGNED(8);
OSPiHandle *__osCurrentHandle[2] ALIGNED(8) = {&__Dom1SpeedParam, &__Dom2SpeedParam};
#include "PR/rdb.h"
extern OSThread piThread;
extern char piThreadStack[OS_PIM_STACKSIZE];
extern OSMesgQueue piEventQueue;
extern OSMesg piEventBuf[1];
void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt) {
/*
static OSThread piThread ALIGNED(8);
static char piThreadStack[OS_PIM_STACKSIZE] ALIGNED(16);
static OSMesgQueue piEventQueue ALIGNED(8);
static OSMesg piEventBuf[1];
*/
OSDevMgr __osPiDevMgr = { 0 };
OSPiHandle* __osPiTable = NULL;
OSPiHandle __Dom1SpeedParam ALIGNED(8);
OSPiHandle __Dom2SpeedParam ALIGNED(8);
OSPiHandle* __osCurrentHandle[2] ALIGNED(8) = { &__Dom1SpeedParam, &__Dom2SpeedParam };
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) {
u32 savedMask;
OSPri oldPri;
OSPri myPri;
if (!__osPiDevMgr.active) {
osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt);
osCreateMesgQueue(&piEventQueue, (OSMesg*)piEventBuf, 1);
if (__osPiDevMgr.active) {
return;
}
osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt);
osCreateMesgQueue(&piEventQueue, (OSMesg*)piEventBuf, 1);
if (!__osPiAccessQueueEnabled) {
__osPiCreateAccessQueue();
}
if (!__osPiAccessQueueEnabled) {
__osPiCreateAccessQueue();
}
osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222);
oldPri = -1;
myPri = osGetThreadPri(NULL);
osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222);
oldPri = -1;
myPri = osGetThreadPri(NULL);
if (myPri < pri) {
oldPri = myPri;
osSetThreadPri(NULL, pri);
}
if (myPri < pri) {
oldPri = myPri;
osSetThreadPri(NULL, pri);
}
savedMask = __osDisableInt();
__osPiDevMgr.active = 1;
__osPiDevMgr.thread = &piThread;
__osPiDevMgr.cmdQueue = cmdQ;
__osPiDevMgr.evtQueue = &piEventQueue;
__osPiDevMgr.acsQueue = &__osPiAccessQueue;
__osPiDevMgr.dma = __osPiRawStartDma;
__osPiDevMgr.edma = __osEPiRawStartDma;
osCreateThread(&piThread, 0, __osDevMgrMain, &__osPiDevMgr, &piThreadStack[OS_PIM_STACKSIZE], pri);
osStartThread(&piThread);
__osRestoreInt(savedMask);
savedMask = __osDisableInt();
__osPiDevMgr.active = 1;
__osPiDevMgr.thread = &piThread;
__osPiDevMgr.cmdQueue = cmdQ;
__osPiDevMgr.evtQueue = &piEventQueue;
__osPiDevMgr.acsQueue = &__osPiAccessQueue;
__osPiDevMgr.dma = __osPiRawStartDma;
__osPiDevMgr.edma = __osEPiRawStartDma;
#ifdef BBPLAYER
osCreateThread(&piThread, 0xCE5, __osDevMgrMain, &__osPiDevMgr, &piThreadStack[OS_PIM_STACKSIZE], pri);
#else
osCreateThread(&piThread, 0, __osDevMgrMain, &__osPiDevMgr, &piThreadStack[OS_PIM_STACKSIZE], pri);
#endif
osStartThread(&piThread);
if (oldPri != -1) {
osSetThreadPri(NULL, oldPri);
}
__osRestoreInt(savedMask);
if (oldPri != -1) {
osSetThreadPri(NULL, oldPri);
}
}

View File

@ -9,8 +9,10 @@ s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flags) {
__osRestoreInt(saveMask);
return -1;
}
__osRunningThread->state = OS_STATE_WAITING;
__osEnqueueAndYield(&mq->mtqueue);
else {
__osRunningThread->state = OS_STATE_WAITING;
__osEnqueueAndYield(&mq->mtqueue);
}
}
if (msg != NULL) {

View File

@ -1,12 +1,5 @@
#include "ultra64.h"
#include <PR/osint.h>
#include "include_asm.h"
struct __osThreadTail __osThreadTail = {0, -1};
OSThread* __osRunQueue = (OSThread*) &__osThreadTail;
OSThread* __osActiveQueue = (OSThread*) &__osThreadTail;
OSThread* __osRunningThread = NULL;
OSThread* __osFaultedThread = NULL;
void osSetThreadPri(OSThread* thread, OSPri pri) {
register u32 prevInt = __osDisableInt();

View File

@ -1,26 +1,23 @@
#include "PR/osint.h"
int osSetTimer(OSTimer *t, OSTime countdown, OSTime interval, OSMesgQueue *mq, OSMesg msg) {
register u32 saveMask;
OSTime time;
OSTimer* next;
u32 count;
u32 value;
u32 saveMask;
t->next = NULL;
t->prev = NULL;
t->value = countdown;
t->interval = interval;
if (countdown == 0) {
t->value = interval;
}
t->value = (countdown != 0) ? countdown : interval;
t->mq = mq;
t->msg = msg;
saveMask = __osDisableInt();
if (__osTimerList->next != __osTimerList) {
if (__osTimerList->next == __osTimerList) {
} else {
next = __osTimerList->next;
count = osGetCount();
value = count - __osTimerCounter;

12
src/os/si.c Normal file
View File

@ -0,0 +1,12 @@
#include "PR/os_internal.h"
#include "PR/siint.h"
int __osSiDeviceBusy() {
register u32 stat = IO_READ(SI_STATUS_REG);
if (stat & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY)) {
return TRUE;
} else {
return FALSE;
}
}

View File

@ -1,23 +1,39 @@
#include "PR/os_internal.h"
#include "PR/siint.h"
s32 __osSiRawStartDma(s32 direction, void *dramAddr)
{
if (IO_READ(SI_STATUS_REG) & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY))
return -1;
extern u32 __osBbIsBb;
if (direction == OS_WRITE)
void skKeepAlive(void);
s32 __osSiRawStartDma(s32 direction, void* dramAddr) {
if (IO_READ(SI_STATUS_REG) & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY)) {
return -1;
}
if (direction == OS_WRITE) {
osWritebackDCache(dramAddr, 64);
}
IO_WRITE(SI_DRAM_ADDR_REG, osVirtualToPhysical(dramAddr));
if (direction == OS_READ)
IO_WRITE(SI_PIF_ADDR_RD64B_REG, 0x1FC007C0);
else
IO_WRITE(SI_PIF_ADDR_WR64B_REG, 0x1FC007C0);
if (direction == OS_READ) {
#ifdef BBPLAYER
if (__osBbIsBb) {
register u32 mask = __osDisableInt();
if (direction == OS_READ)
skKeepAlive();
__osRestoreInt(mask);
}
#endif
IO_WRITE(SI_PIF_ADDR_RD64B_REG, PIF_RAM_START);
} else {
IO_WRITE(SI_PIF_ADDR_WR64B_REG, PIF_RAM_START);
}
if (direction == OS_READ) {
osInvalDCache(dramAddr, 64);
}
return 0;
}

View File

@ -2,9 +2,6 @@
#include "PR/rcp.h"
#include "PR/osint.h"
// TODO: this comes from a header
#ident "$Revision: 1.17 $"
s32 __osSpRawStartDma(s32 direction, u32 devAddr, void *dramAddr, u32 size)
{
if (__osSpDeviceBusy())

View File

@ -10,11 +10,10 @@ int sprintf(char* s, const char* fmt, ...) {
ret = _Printf(&proutSprintf, s, fmt, argp);
if (ret < 0) {
return ret;
if (ret >= 0) {
s[ret] = 0;
}
s[ret] = 0;
return ret;
}

View File

@ -11,8 +11,29 @@
extern OSTask tmp_task;
#if VERSION_IQUE
static OSTask* _VirtualToPhysicalTask(OSTask* intp) {
OSTask* tp;
tp = &tmp_task;
bcopy(intp, tp, sizeof(OSTask));
_osVirtualToPhysical(tp->t.ucode);
_osVirtualToPhysical(tp->t.ucode_data);
_osVirtualToPhysical(tp->t.dram_stack);
_osVirtualToPhysical(tp->t.output_buff);
_osVirtualToPhysical(tp->t.output_buff_size);
_osVirtualToPhysical(tp->t.data_ptr);
_osVirtualToPhysical(tp->t.yield_data_ptr);
return tp;
}
#endif
void osSpTaskLoad(OSTask *intp) {
OSTask *tp;
#if VERSION_IQUE
tp = _VirtualToPhysicalTask(intp);
#else
tp = &tmp_task;
bcopy(intp, tp, sizeof(OSTask));
_osVirtualToPhysical(tp->t.ucode);
@ -22,6 +43,7 @@ void osSpTaskLoad(OSTask *intp) {
_osVirtualToPhysical(tp->t.output_buff_size);
_osVirtualToPhysical(tp->t.data_ptr);
_osVirtualToPhysical(tp->t.yield_data_ptr);
#endif
if (tp->t.flags & OS_TASK_YIELDED) {
tp->t.ucode_data = tp->t.yield_data_ptr;

View File

@ -2,11 +2,9 @@
void osStopThread(OSThread *t) {
register u32 saveMask = __osDisableInt();
register u16 state = OS_STATE_RUNNING;
register u16 state;
if (t != NULL) {
state = t->state;
}
state = (t == NULL) ? OS_STATE_RUNNING: t->state;
switch (state) {
case OS_STATE_RUNNING:

View File

@ -1,6 +1,7 @@
#include "gcc/string.h"
int strcmp(const char* str1, const char* str2) {
#if !VERSION_IQUE
unsigned char c1 = *str1;
unsigned char c2 = *str2;
@ -15,4 +16,14 @@ int strcmp(const char* str1, const char* str2) {
}
}
return c1 - c2;
#else
while (*str1 == *str2) {
if (*str1++ == 0) {
return 0;
}
str2++;
}
return *str1 - *str2;
#endif
}

View File

@ -1,6 +1,13 @@
#include "ultra64.h"
#include "PR/osint.h"
void __osDequeueThread(OSThread **queue, OSThread *t) {
struct __osThreadTail __osThreadTail = {0, -1};
OSThread* __osRunQueue = (OSThread*) &__osThreadTail;
OSThread* __osActiveQueue = (OSThread*) &__osThreadTail;
OSThread* __osRunningThread = NULL;
OSThread* __osFaultedThread = NULL;
void __osDequeueThread(register OSThread **queue, register OSThread *t) {
register OSThread *pred;
register OSThread *succ;

View File

@ -11,52 +11,50 @@ void __osTimerServicesInit(void) {
__osCurrentTime = 0;
__osBaseCounter = 0;
__osViIntrCount = 0;
__osTimerList->prev = __osTimerList;
__osTimerList->next = __osTimerList->prev;
__osTimerList->value = 0;
__osTimerList->interval = __osTimerList->value;
__osTimerList->next = __osTimerList->prev = __osTimerList;
__osTimerList->interval = __osTimerList->value = 0;
__osTimerList->mq = NULL;
__osTimerList->msg = 0;
}
void __osTimerInterrupt(void) {
OSTimer *t;
OSTimer* t;
u32 count;
u32 elapsed_cycles;
if (__osTimerList->next != __osTimerList) {
while (TRUE) {
t = __osTimerList->next;
if (t == __osTimerList) {
__osSetCompare(0);
__osTimerCounter = 0;
break;
}
if (__osTimerList->next == __osTimerList) {
return;
}
for (;;) {
t = __osTimerList->next;
count = osGetCount();
elapsed_cycles = count - __osTimerCounter;
__osTimerCounter = count;
if (t == __osTimerList) {
__osSetCompare(0);
__osTimerCounter = 0;
break;
}
if (elapsed_cycles < t->value)
{
t->value -= elapsed_cycles;
__osSetTimerIntr(t->value);
break;
} else {
t->prev->next = t->next;
t->next->prev = t->prev;
t->next = NULL;
t->prev = NULL;
count = osGetCount();
elapsed_cycles = count - __osTimerCounter;
__osTimerCounter = count;
if (t->mq != NULL) {
osSendMesg(t->mq, t->msg, OS_MESG_NOBLOCK);
}
if (elapsed_cycles < t->value) {
t->value -= elapsed_cycles;
__osSetTimerIntr(t->value);
break;
}
if (t->interval != 0) {
t->value = t->interval;
__osInsertTimer(t);
}
}
t->prev->next = t->next;
t->next->prev = t->prev;
t->next = NULL;
t->prev = NULL;
if (t->mq != NULL) {
osSendMesg(t->mq, t->msg, OS_MESG_NOBLOCK);
}
if (t->interval != 0) {
t->value = t->interval;
__osInsertTimer(t);
}
}
}
@ -77,17 +75,14 @@ void __osSetTimerIntr(OSTime tim) {
}
OSTime __osInsertTimer(OSTimer *t) {
OSTimer *timep;
OSTimer* timep;
OSTime tim;
u32 savedMask;
savedMask = __osDisableInt();
u32 savedMask = __osDisableInt();
timep = __osTimerList->next;
tim = t->value;
while (timep != __osTimerList && tim > timep->value) {
for (; timep != __osTimerList && tim > timep->value; timep = timep->next) {
tim -= timep->value;
timep = timep->next;
}
t->value = tim;

View File

@ -11,17 +11,6 @@ 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];

View File

@ -49,7 +49,11 @@ void osCreateViManager(OSPri pri) {
__osViDevMgr.acsQueue = NULL;
__osViDevMgr.dma = NULL;
__osViDevMgr.edma = NULL;
#ifdef BBPLAYER
osCreateThread(&viThread, 0xD49, viMgrMain, &__osViDevMgr, &viThreadStack[OS_VIM_STACKSIZE], pri);
#else
osCreateThread(&viThread, 0, viMgrMain, &__osViDevMgr, &viThreadStack[OS_VIM_STACKSIZE], pri);
#endif
__osViInit();
osStartThread(&viThread);
__osRestoreInt(savedMask);

View File

@ -1,10 +1,37 @@
#include "PR/os_vi.h"
#include "PR/os.h"
#include "PR/rcp.h"
#include "PR/viint.h"
OSViMode osViModeMpalLan1 = {
0x1E,
{ 0x0000311E, 0x00000140, 0x04651E39, 0x0000020D, 0x00040C11, 0x0C190C1A, 0x006C02EC, 0x00000200, 0x00000000 },
{
{ 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 },
{ 0x00000280, 0x00000400, 0x002501FF, 0x000E0204, 0x00000002 }
}
OS_VI_MPAL_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
VI_CTRL_PIXEL_ADV_3, // ctrl
WIDTH(320), // width
BURST(57, 30, 5, 70), // burst
VSYNC(525), // vSync
HSYNC(3089, 4), // hSync
LEAP(3097, 3098), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
// [1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
} },
};

37
src/os/vimodentsclan1.c Normal file
View File

@ -0,0 +1,37 @@
#include "PR/os.h"
#include "PR/rcp.h"
#include "PR/viint.h"
OSViMode osViModeNtscLan1 = {
OS_VI_NTSC_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
VI_CTRL_PIXEL_ADV_3, // ctrl
WIDTH(320), // width
BURST(57, 34, 5, 62), // burst
VSYNC(525), // vSync
HSYNC(3093, 0), // hSync
LEAP(3093, 3093), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
// [1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
} },
};

37
src/os/vimodepallan1.c Normal file
View File

@ -0,0 +1,37 @@
#include "PR/os.h"
#include "PR/rcp.h"
#include "PR/viint.h"
OSViMode osViModePalLan1 = {
OS_VI_PAL_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
VI_CTRL_PIXEL_ADV_3, // ctrl
WIDTH(320), // width
BURST(58, 30, 4, 69), // burst
VSYNC(625), // vSync
HSYNC(3177, 23), // hSync
LEAP(3183, 3181), // leap
HSTART(128, 768), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
},
{
// [1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
} },
};

View File

@ -1,7 +1,20 @@
#include "PR/os_internal.h"
#include "PR/ultraerror.h"
#include "PR/rcp.h"
#include "PR/viint.h"
void osViSetMode(OSViMode *modep) {
register u32 saveMask = __osDisableInt();
extern u32 __osBbIsBb;
void osViSetMode(OSViMode* modep) {
register u32 saveMask;
saveMask = __osDisableInt();
#ifdef BBPLAYER
if (__osBbIsBb) {
modep->comRegs.ctrl &= ~VI_CTRL_PIXEL_ADV_2;
}
#endif
__osViNext->modep = modep;
__osViNext->state = VI_STATE_MODE_UPDATED;

View File

@ -1740,7 +1740,3 @@ 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 } } };

View File

@ -36,7 +36,7 @@ static const double pows[] = {10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L
#define _D2 2
#define _D3 3
#define ALIGN(s, align) (((u32)(s) + ((align)-1)) & ~((align)-1))
#define ALIGN(s, align) (((u32)(s) + ((align)-1)) & ~((align)-1))
void _Ldtob(_Pft* px, char code) {
char buff[BUFF_LEN];
@ -64,34 +64,36 @@ void _Ldtob(_Pft* px, char code) {
nsig = 0;
xexp = 0;
} else {
int i;
int n;
{
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];
}
if (ldval < 0) {
ldval = -ldval;
}
ldval /= factor;
// 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);
@ -102,7 +104,7 @@ void _Ldtob(_Pft* px, char code) {
for (*p++ = '0'; gen > 0 && 0 < ldval; p += 8) {
int j;
int lo = ldval;
long lo = ldval;
if ((gen -= 8) > 0) {
ldval = (ldval - lo) * 1e8;
@ -131,7 +133,7 @@ void _Ldtob(_Pft* px, char code) {
}
if (nsig > 0) {
char drop = nsig < gen && '5' <= p[nsig] ? '9' : '0';
const char drop = nsig < gen && '5' <= p[nsig] ? '9' : '0';
int n;
for (n = nsig; p[--n] == drop;) {
@ -177,18 +179,17 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
const unsigned char point = '.';
if (nsig <= 0) {
nsig = 1, p = "0"; // memes
nsig = 1, p = "0";
}
if (code == 'f' || (code == 'g' || code == 'G') && xexp >= -4 && xexp < px->prec) {
xexp += 1;
xexp++;
if (code != 'f') {
if (((px->flags & 8) == 0) && nsig < px->prec) {
px->prec = nsig;
}
px->prec -= xexp;
if (px->prec < 0) {
if ((px->prec -= xexp) < 0) {
px->prec = 0;
}
}
@ -211,7 +212,7 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
nsig = px->prec;
}
memcpy(&px->s[px->n1], p, px->n2 = nsig); // , memes (this one is insane)
memcpy(&px->s[px->n1], p, px->n2 = nsig);
px->nz2 = px->prec - nsig;
} else if (nsig < xexp) {
memcpy(&px->s[px->n1], p, nsig);
@ -219,7 +220,7 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
px->nz1 = xexp - nsig;
if (px->prec > 0 || (px->flags & 8)) {
px->s[px->n1] = point;
px->n2 += 1;
px->n2++;
}
px->nz2 = px->prec;
@ -250,11 +251,7 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
px->prec = 0;
}
if (code == 'g') {
code = 'e';
} else {
code = 'E';
}
code = (code == 'g') ? 'e' : 'E';
}
px->s[px->n1++] = *p++;
@ -285,11 +282,11 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
if (xexp >= 100) {
if (xexp >= 1000) {
*p++ = (xexp / 1000) + '0', xexp %= 1000; // , memes
*p++ = (xexp / 1000) + '0', xexp %= 1000;
}
*p++ = (xexp / 100) + '0', xexp %= 100; // , memes
*p++ = (xexp / 100) + '0', xexp %= 100;
}
*p++ = (xexp / 10) + '0', xexp %= 10; // , memes
*p++ = (xexp / 10) + '0', xexp %= 10;
*p++ = xexp + '0';
px->n2 = (size_t)p - ((size_t)px->s + px->n1);
@ -303,3 +300,4 @@ void _Genld(_Pft* px, char code, u8* p, s16 nsig, s16 xexp) {
}
}
}

View File

@ -14,11 +14,7 @@ void _Litob(_Pft *args, char type) {
s32 i;
unsigned long long ullval;
if (type == 'X') {
digs = udigs;
} else {
digs = ldigs;
}
digs = (type == 'X') ? udigs : ldigs;
base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16);
i = BUFF_LEN;
@ -50,9 +46,7 @@ void _Litob(_Pft *args, char type) {
}
if (args->prec < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) {
i = args->width - args->n0 - args->nz0 - args->n1;
if (i > 0) {
if ((i = args->width - args->n0 - args->nz0 - args->n1) > 0) {
args->nz0 += i;
}
}

2
tools/build/cc/egcs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

View File

@ -58,6 +58,8 @@ def write_ninja_rules(
cc_ido = f"{BUILD_TOOLS}/cc/ido5.3/cc"
cc_272_dir = f"{BUILD_TOOLS}/cc/gcc2.7.2/"
cc_272 = f"{cc_272_dir}/gcc"
cc_egcs_dir = f"{BUILD_TOOLS}/cc/egcs/"
cc_egcs = f"{cc_egcs_dir}/gcc"
cxx = f"{BUILD_TOOLS}/cc/gcc/g++"
ICONV = "iconv --from UTF-8 --to $encoding"
@ -69,6 +71,8 @@ def write_ninja_rules(
CPPFLAGS_272 = CPPFLAGS_COMMON + " -nostdinc"
CPPFLAGS_EGCS = CPPFLAGS_COMMON + " -D__USE_ISOC99 -DBBPLAYER -nostdinc"
CPPFLAGS = "-w " + CPPFLAGS_COMMON + " -nostdinc"
cflags = f"-c -G0 -O2 -gdwarf-2 -x c -B {BUILD_TOOLS}/cc/gcc/ {extra_cflags}"
@ -78,6 +82,8 @@ def write_ninja_rules(
cflags_272 = f"-c -G0 -mgp32 -mfp32 -mips3 {extra_cflags}"
cflags_272 = cflags_272.replace("-ggdb3", "-g1")
cflags_egcs = f"-c -fno-PIC -mno-abicalls -mcpu=4300 -G 0 -x c -B {cc_egcs_dir} {extra_cflags}"
ninja.variable("python", sys.executable)
ld_args = f"-T ver/$version/build/undefined_syms.txt -T ver/$version/undefined_syms_auto.txt -T ver/$version/undefined_funcs_auto.txt -Map $mapfile --no-check-sections -T $in -o $out"
@ -160,6 +166,12 @@ def write_ninja_rules(
command=f"bash -o pipefail -c 'COMPILER_PATH={cc_272_dir} {cc_272} {CPPFLAGS_272} {extra_cppflags} $cppflags {cflags_272} $cflags $in -o $out && mips-linux-gnu-objcopy -N $in $out'",
)
ninja.rule(
"cc_egcs",
description="cc_egcs $in",
command=f"bash -o pipefail -c '{cc_egcs} {CPPFLAGS_EGCS} {extra_cppflags} $cppflags {cflags_egcs} $cflags $in -o $out && mips-linux-gnu-objcopy -N $in $out && python3 ./tools/patch_64bit_compile.py $out'",
)
ninja.rule(
"cxx",
description="cxx $in",
@ -650,6 +662,9 @@ class Configure:
elif "gcc_272" in cflags:
task = "cc_272"
cflags = cflags.replace("gcc_272", "")
elif "egcs" in cflags:
task = "cc_egcs"
cflags = cflags.replace("egcs", "")
encoding = "CP932" # similar to SHIFT-JIS, but includes backslash and tilde
if version == "ique":

View File

@ -0,0 +1,23 @@
#!/usr/bin/env python3
import argparse, struct, sys
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("file", help="file to patch")
args = parser.parse_args()
with open(args.file, "r+b") as f:
magic = struct.unpack(">I", f.read(4))[0]
if magic != 0x7F454C46:
print("Error: Not an ELF file")
sys.exit(1)
f.seek(36)
flags = struct.unpack(">I", f.read(4))[0]
if flags & 0xF0000000 == 0x20000000: # test for mips3
# patch it
flags |= 0x00000100 # set EF_MIPS_32BITMODE
f.seek(36)
f.write(struct.pack(">I", flags))

File diff suppressed because it is too large Load Diff

View File

@ -1,279 +0,0 @@
.include "macro.inc"
.section .rodata
/* Generated by spimdisasm 1.11.1 */
glabel D_IQUE_80098710
/* 73B10 80098710 3FB999999999999A */ .double 0.100000000000000006
glabel D_IQUE_80098718
/* 73B18 80098718 3FB999999999999A */ .double 0.100000000000000006
glabel D_IQUE_80098720
/* 73B20 80098720 3F91DF469D353918 */ .double 0.017453292222222222
/* 73B28 80098728 00000000 */ .double 0
glabel D_IQUE_80098730
/* 73B30 80098730 */ .asciz " +-#0"
.balign 4
glabel D_IQUE_80098738
/* 73B38 80098738 00000001 */ .word 0x00000001
/* 73B3C 8009873C 00000002 */ .word 0x00000002
/* 73B40 80098740 00000004 */ .word 0x00000004
/* 73B44 80098744 00000008 */ .word 0x00000008
/* 73B48 80098748 00000010 */ .word 0x00000010
/* 73B4C 8009874C 00000000 */ .word 0x00000000
glabel D_IQUE_80098750
/* 73B50 80098750 */ .asciz "hlL"
.balign 4
/* 73B54 80098754 */ .asciz ""
.balign 4
.align 3
glabel jtbl_IQUE_80098758
/* 73B58 80098758 800635F4 */ .word .LIQUE_800635F4
/* 73B5C 8009875C 8006360C */ .word .LIQUE_8006360C
/* 73B60 80098760 8006360C */ .word .LIQUE_8006360C
/* 73B64 80098764 8006360C */ .word .LIQUE_8006360C
/* 73B68 80098768 8006360C */ .word .LIQUE_8006360C
/* 73B6C 8009876C 8006360C */ .word .LIQUE_8006360C
/* 73B70 80098770 8006360C */ .word .LIQUE_8006360C
/* 73B74 80098774 8006360C */ .word .LIQUE_8006360C
/* 73B78 80098778 8006360C */ .word .LIQUE_8006360C
/* 73B7C 8009877C 8006360C */ .word .LIQUE_8006360C
/* 73B80 80098780 8006360C */ .word .LIQUE_8006360C
/* 73B84 80098784 8006360C */ .word .LIQUE_8006360C
/* 73B88 80098788 8006360C */ .word .LIQUE_8006360C
/* 73B8C 8009878C 8006360C */ .word .LIQUE_8006360C
/* 73B90 80098790 8006360C */ .word .LIQUE_8006360C
/* 73B94 80098794 8006360C */ .word .LIQUE_8006360C
/* 73B98 80098798 8006360C */ .word .LIQUE_8006360C
/* 73B9C 8009879C 8006360C */ .word .LIQUE_8006360C
/* 73BA0 800987A0 8006360C */ .word .LIQUE_8006360C
/* 73BA4 800987A4 8006360C */ .word .LIQUE_8006360C
/* 73BA8 800987A8 8006360C */ .word .LIQUE_8006360C
/* 73BAC 800987AC 8006360C */ .word .LIQUE_8006360C
/* 73BB0 800987B0 8006360C */ .word .LIQUE_8006360C
/* 73BB4 800987B4 8006360C */ .word .LIQUE_8006360C
/* 73BB8 800987B8 8006360C */ .word .LIQUE_8006360C
/* 73BBC 800987BC 8006360C */ .word .LIQUE_8006360C
/* 73BC0 800987C0 8006360C */ .word .LIQUE_8006360C
/* 73BC4 800987C4 8006360C */ .word .LIQUE_8006360C
/* 73BC8 800987C8 8006360C */ .word .LIQUE_8006360C
/* 73BCC 800987CC 8006360C */ .word .LIQUE_8006360C
/* 73BD0 800987D0 8006360C */ .word .LIQUE_8006360C
/* 73BD4 800987D4 8006360C */ .word .LIQUE_8006360C
/* 73BD8 800987D8 80063424 */ .word .LIQUE_80063424
/* 73BDC 800987DC 8006360C */ .word .LIQUE_8006360C
/* 73BE0 800987E0 80063424 */ .word .LIQUE_80063424
/* 73BE4 800987E4 8006360C */ .word .LIQUE_8006360C
/* 73BE8 800987E8 8006360C */ .word .LIQUE_8006360C
/* 73BEC 800987EC 8006360C */ .word .LIQUE_8006360C
/* 73BF0 800987F0 8006360C */ .word .LIQUE_8006360C
/* 73BF4 800987F4 8006360C */ .word .LIQUE_8006360C
/* 73BF8 800987F8 8006360C */ .word .LIQUE_8006360C
/* 73BFC 800987FC 8006360C */ .word .LIQUE_8006360C
/* 73C00 80098800 8006360C */ .word .LIQUE_8006360C
/* 73C04 80098804 8006360C */ .word .LIQUE_8006360C
/* 73C08 80098808 8006360C */ .word .LIQUE_8006360C
/* 73C0C 8009880C 8006360C */ .word .LIQUE_8006360C
/* 73C10 80098810 8006360C */ .word .LIQUE_8006360C
/* 73C14 80098814 8006360C */ .word .LIQUE_8006360C
/* 73C18 80098818 8006360C */ .word .LIQUE_8006360C
/* 73C1C 8009881C 8006360C */ .word .LIQUE_8006360C
/* 73C20 80098820 8006360C */ .word .LIQUE_8006360C
/* 73C24 80098824 80063324 */ .word .LIQUE_80063324
/* 73C28 80098828 8006360C */ .word .LIQUE_8006360C
/* 73C2C 8009882C 8006360C */ .word .LIQUE_8006360C
/* 73C30 80098830 8006360C */ .word .LIQUE_8006360C
/* 73C34 80098834 8006360C */ .word .LIQUE_8006360C
/* 73C38 80098838 8006360C */ .word .LIQUE_8006360C
/* 73C3C 8009883C 8006360C */ .word .LIQUE_8006360C
/* 73C40 80098840 8006360C */ .word .LIQUE_8006360C
/* 73C44 80098844 8006360C */ .word .LIQUE_8006360C
/* 73C48 80098848 8006360C */ .word .LIQUE_8006360C
/* 73C4C 8009884C 8006360C */ .word .LIQUE_8006360C
/* 73C50 80098850 800631F0 */ .word .LIQUE_800631F0
/* 73C54 80098854 80063228 */ .word .LIQUE_80063228
/* 73C58 80098858 80063424 */ .word .LIQUE_80063424
/* 73C5C 8009885C 80063424 */ .word .LIQUE_80063424
/* 73C60 80098860 80063424 */ .word .LIQUE_80063424
/* 73C64 80098864 8006360C */ .word .LIQUE_8006360C
/* 73C68 80098868 80063228 */ .word .LIQUE_80063228
/* 73C6C 8009886C 8006360C */ .word .LIQUE_8006360C
/* 73C70 80098870 8006360C */ .word .LIQUE_8006360C
/* 73C74 80098874 8006360C */ .word .LIQUE_8006360C
/* 73C78 80098878 8006360C */ .word .LIQUE_8006360C
/* 73C7C 8009887C 800634BC */ .word .LIQUE_800634BC
/* 73C80 80098880 80063324 */ .word .LIQUE_80063324
/* 73C84 80098884 80063560 */ .word .LIQUE_80063560
/* 73C88 80098888 8006360C */ .word .LIQUE_8006360C
/* 73C8C 8009888C 8006360C */ .word .LIQUE_8006360C
/* 73C90 80098890 800635AC */ .word .LIQUE_800635AC
/* 73C94 80098894 8006360C */ .word .LIQUE_8006360C
/* 73C98 80098898 80063324 */ .word .LIQUE_80063324
/* 73C9C 8009889C 8006360C */ .word .LIQUE_8006360C
/* 73CA0 800988A0 8006360C */ .word .LIQUE_8006360C
/* 73CA4 800988A4 80063324 */ .word .LIQUE_80063324
/* 73CA8 800988A8 00000000 */ .word 0x00000000
/* 73CAC 800988AC 00000000 */ .word 0x00000000
glabel D_IQUE_800988B0
/* 73CB0 800988B0 */ .byte 0x00
/* 73CB1 800988B1 */ .byte 0x14
/* 73CB2 800988B2 */ .byte 0x18
/* 73CB3 800988B3 */ .byte 0x18
/* 73CB4 800988B4 */ .byte 0x1C
/* 73CB5 800988B5 */ .byte 0x1C
/* 73CB6 800988B6 */ .byte 0x1C
/* 73CB7 800988B7 */ .byte 0x1C
/* 73CB8 800988B8 */ .byte 0x20
/* 73CB9 800988B9 */ .byte 0x20
/* 73CBA 800988BA */ .byte 0x20
/* 73CBB 800988BB */ .byte 0x20
/* 73CBC 800988BC */ .byte 0x20
/* 73CBD 800988BD */ .byte 0x20
/* 73CBE 800988BE */ .byte 0x20
/* 73CBF 800988BF */ .byte 0x20
/* 73CC0 800988C0 */ .byte 0x00
/* 73CC1 800988C1 */ .byte 0x04
/* 73CC2 800988C2 */ .byte 0x08
/* 73CC3 800988C3 */ .byte 0x08
/* 73CC4 800988C4 */ .byte 0x0C
/* 73CC5 800988C5 */ .byte 0x0C
/* 73CC6 800988C6 */ .byte 0x0C
/* 73CC7 800988C7 */ .byte 0x0C
/* 73CC8 800988C8 */ .byte 0x10
/* 73CC9 800988C9 */ .byte 0x10
/* 73CCA 800988CA */ .byte 0x10
/* 73CCB 800988CB */ .byte 0x10
/* 73CCC 800988CC */ .byte 0x10
/* 73CCD 800988CD */ .byte 0x10
/* 73CCE 800988CE */ .byte 0x10
/* 73CCF 800988CF */ .byte 0x10
.align 3
glabel jtbl_IQUE_800988D0
/* 73CD0 800988D0 80066894 */ .word .LIQUE_80066894
/* 73CD4 800988D4 80066858 */ .word .LIQUE_80066858
/* 73CD8 800988D8 80066834 */ .word .LIQUE_80066834
/* 73CDC 800988DC 8006664C */ .word .LIQUE_8006664C
/* 73CE0 800988E0 80066508 */ .word .LIQUE_80066508
/* 73CE4 800988E4 800667C0 */ .word .LIQUE_800667C0
/* 73CE8 800988E8 800664CC */ .word .LIQUE_800664CC
/* 73CEC 800988EC 800664D8 */ .word .LIQUE_800664D8
/* 73CF0 800988F0 800664E4 */ .word .LIQUE_800664E4
/* 73CF4 800988F4 00000000 */ .word 0x00000000
/* 73CF8 800988F8 00000000 */ .word 0x00000000
/* 73CFC 800988FC 00000000 */ .word 0x00000000
glabel D_IQUE_80098900
/* 73D00 80098900 */ .short 0x0555
/* 73D02 80098902 */ .short 0x0556
/* 73D04 80098904 */ .short 0x0559
/* 73D06 80098906 */ .short 0x055A
/* 73D08 80098908 */ .short 0x0565
/* 73D0A 8009890A */ .short 0x0566
/* 73D0C 8009890C */ .short 0x0569
/* 73D0E 8009890E */ .short 0x056A
/* 73D10 80098910 */ .short 0x0595
/* 73D12 80098912 */ .short 0x0596
/* 73D14 80098914 */ .short 0x0599
/* 73D16 80098916 */ .short 0x059A
/* 73D18 80098918 */ .short 0x05A5
/* 73D1A 8009891A */ .short 0x05A6
/* 73D1C 8009891C */ .short 0x05A9
/* 73D1E 8009891E */ .short 0x05AA
/* 73D20 80098920 */ .short 0x0655
/* 73D22 80098922 */ .short 0x0656
/* 73D24 80098924 */ .short 0x0659
/* 73D26 80098926 */ .short 0x065A
/* 73D28 80098928 */ .short 0x0665
/* 73D2A 8009892A */ .short 0x0666
/* 73D2C 8009892C */ .short 0x0669
/* 73D2E 8009892E */ .short 0x066A
/* 73D30 80098930 */ .short 0x0695
/* 73D32 80098932 */ .short 0x0696
/* 73D34 80098934 */ .short 0x0699
/* 73D36 80098936 */ .short 0x069A
/* 73D38 80098938 */ .short 0x06A5
/* 73D3A 8009893A */ .short 0x06A6
/* 73D3C 8009893C */ .short 0x06A9
/* 73D3E 8009893E */ .short 0x06AA
/* 73D40 80098940 */ .short 0x0955
/* 73D42 80098942 */ .short 0x0956
/* 73D44 80098944 */ .short 0x0959
/* 73D46 80098946 */ .short 0x095A
/* 73D48 80098948 */ .short 0x0965
/* 73D4A 8009894A */ .short 0x0966
/* 73D4C 8009894C */ .short 0x0969
/* 73D4E 8009894E */ .short 0x096A
/* 73D50 80098950 */ .short 0x0995
/* 73D52 80098952 */ .short 0x0996
/* 73D54 80098954 */ .short 0x0999
/* 73D56 80098956 */ .short 0x099A
/* 73D58 80098958 */ .short 0x09A5
/* 73D5A 8009895A */ .short 0x09A6
/* 73D5C 8009895C */ .short 0x09A9
/* 73D5E 8009895E */ .short 0x09AA
/* 73D60 80098960 */ .short 0x0A55
/* 73D62 80098962 */ .short 0x0A56
/* 73D64 80098964 */ .short 0x0A59
/* 73D66 80098966 */ .short 0x0A5A
/* 73D68 80098968 */ .short 0x0A65
/* 73D6A 8009896A */ .short 0x0A66
/* 73D6C 8009896C */ .short 0x0A69
/* 73D6E 8009896E */ .short 0x0A6A
/* 73D70 80098970 */ .short 0x0A95
/* 73D72 80098972 */ .short 0x0A96
/* 73D74 80098974 */ .short 0x0A99
/* 73D76 80098976 */ .short 0x0A9A
/* 73D78 80098978 */ .short 0x0AA5
/* 73D7A 8009897A */ .short 0x0AA6
/* 73D7C 8009897C */ .short 0x0AA9
/* 73D7E 8009897E */ .short 0x0AAA
.align 3
glabel jtbl_IQUE_80098980
/* 73D80 80098980 80067A7C */ .word .LIQUE_80067A7C
/* 73D84 80098984 8006790C */ .word .LIQUE_8006790C
/* 73D88 80098988 80067984 */ .word .LIQUE_80067984
/* 73D8C 8009898C 80067A88 */ .word .LIQUE_80067A88
/* 73D90 80098990 80067A88 */ .word .LIQUE_80067A88
/* 73D94 80098994 800679B8 */ .word .LIQUE_800679B8
/* 73D98 80098998 80067A40 */ .word .LIQUE_80067A40
/* 73D9C 8009899C 00000000 */ .word 0x00000000
glabel xldtob_pows
/* 73DA0 800989A0 4024000000000000 */ .double 10
/* 73DA8 800989A8 4059000000000000 */ .double 100
/* 73DB0 800989B0 40C3880000000000 */ .double 10000
/* 73DB8 800989B8 4197D78400000000 */ .double 100000000
/* 73DC0 800989C0 4341C37937E08000 */ .double 10000000000000000
/* 73DC8 800989C8 4693B8B5B5056E17 */ .double 1.00000000000000005e+32
/* 73DD0 800989D0 4D384F03E93FF9F5 */ .double 1.00000000000000002e+64
/* 73DD8 800989D8 5A827748F9301D32 */ .double 1.00000000000000008e+128
/* 73DE0 800989E0 75154FDD7F73BF3C */ .double 1.00000000000000003e+256
glabel xldtob_800989e8
/* 73DE8 800989E8 4E614E00 */ .word 0x4E614E00
glabel xldtob_800989ec
/* 73DEC 800989EC 496E6600 */ .word 0x496E6600
glabel xldtob_800989f0
/* 73DF0 800989F0 4197D784 */ .word 0x4197D784
/* 73DF4 800989F4 00000000 */ .word 0x00000000
glabel D_IQUE_800989F8
/* 73DF8 800989F8 */ .byte 0x30
/* 73DF9 800989F9 */ .byte 0x00
/* 73DFA 800989FA */ .byte 0x00
/* 73DFB 800989FB */ .byte 0x00
/* 73DFC 800989FC */ .byte 0x00
/* 73DFD 800989FD */ .byte 0x00
/* 73DFE 800989FE */ .byte 0x00
/* 73DFF 800989FF */ .byte 0x00

File diff suppressed because it is too large Load Diff

View File

@ -1,82 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel memset
/* 434E0 800680E0 10C00006 */ beqz $a2, .LIQUE_800680FC
/* 434E4 800680E4 00003821 */ addu $a3, $zero, $zero
.LIQUE_800680E8:
/* 434E8 800680E8 00871021 */ addu $v0, $a0, $a3
/* 434EC 800680EC 24E70001 */ addiu $a3, $a3, 0x1
/* 434F0 800680F0 00E6182B */ sltu $v1, $a3, $a2
/* 434F4 800680F4 1460FFFC */ bnez $v1, .LIQUE_800680E8
/* 434F8 800680F8 A0450000 */ sb $a1, 0x0($v0)
.LIQUE_800680FC:
/* 434FC 800680FC 03E00008 */ jr $ra
/* 43500 80068100 00801021 */ addu $v0, $a0, $zero
glabel memcmp
/* 43504 80068104 0801A04B */ j .LIQUE_8006812C
/* 43508 80068108 00C01021 */ addu $v0, $a2, $zero
.LIQUE_8006810C:
/* 4350C 8006810C 90A30000 */ lbu $v1, 0x0($a1)
/* 43510 80068110 24A50001 */ addiu $a1, $a1, 0x1
/* 43514 80068114 90820000 */ lbu $v0, 0x0($a0)
/* 43518 80068118 10430003 */ beq $v0, $v1, .LIQUE_80068128
/* 4351C 8006811C 24840001 */ addiu $a0, $a0, 0x1
/* 43520 80068120 03E00008 */ jr $ra
/* 43524 80068124 00431023 */ subu $v0, $v0, $v1
.LIQUE_80068128:
/* 43528 80068128 00C01021 */ addu $v0, $a2, $zero
.LIQUE_8006812C:
/* 4352C 8006812C 1440FFF7 */ bnez $v0, .LIQUE_8006810C
/* 43530 80068130 24C6FFFF */ addiu $a2, $a2, -0x1
/* 43534 80068134 03E00008 */ jr $ra
/* 43538 80068138 00001021 */ addu $v0, $zero, $zero
glabel strncmp
/* 4353C 8006813C 0801A05F */ j .LIQUE_8006817C
/* 43540 80068140 00004021 */ addu $t0, $zero, $zero
.LIQUE_80068144:
/* 43544 80068144 0106102A */ slt $v0, $t0, $a2
/* 43548 80068148 10400011 */ beqz $v0, .LIQUE_80068190
/* 4354C 8006814C 00000000 */ nop
/* 43550 80068150 15400005 */ bnez $t2, .LIQUE_80068168
/* 43554 80068154 00000000 */ nop
/* 43558 80068158 1520000D */ bnez $t1, .LIQUE_80068190
/* 4355C 8006815C 00001021 */ addu $v0, $zero, $zero
/* 43560 80068160 03E00008 */ jr $ra
/* 43564 80068164 00000000 */ nop
.LIQUE_80068168:
/* 43568 80068168 10E00009 */ beqz $a3, .LIQUE_80068190
/* 4356C 8006816C 00000000 */ nop
/* 43570 80068170 24840001 */ addiu $a0, $a0, 0x1
/* 43574 80068174 24A50001 */ addiu $a1, $a1, 0x1
/* 43578 80068178 25080001 */ addiu $t0, $t0, 0x1
.LIQUE_8006817C:
/* 4357C 8006817C 90830000 */ lbu $v1, 0x0($a0)
/* 43580 80068180 90A70000 */ lbu $a3, 0x0($a1)
/* 43584 80068184 00605021 */ addu $t2, $v1, $zero
/* 43588 80068188 1067FFEE */ beq $v1, $a3, .LIQUE_80068144
/* 4358C 8006818C 00E04821 */ addu $t1, $a3, $zero
.LIQUE_80068190:
/* 43590 80068190 11060006 */ beq $t0, $a2, .LIQUE_800681AC
/* 43594 80068194 00031E00 */ sll $v1, $v1, 24
/* 43598 80068198 00031E03 */ sra $v1, $v1, 24
/* 4359C 8006819C 00071600 */ sll $v0, $a3, 24
/* 435A0 800681A0 00021603 */ sra $v0, $v0, 24
/* 435A4 800681A4 03E00008 */ jr $ra
/* 435A8 800681A8 00621023 */ subu $v0, $v1, $v0
.LIQUE_800681AC:
/* 435AC 800681AC 03E00008 */ jr $ra
/* 435B0 800681B0 00001021 */ addu $v0, $zero, $zero
/* 435B4 800681B4 00000000 */ nop
/* 435B8 800681B8 00000000 */ nop
/* 435BC 800681BC 00000000 */ nop

View File

@ -1,35 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel strcmp
/* 43490 80068090 0801A02C */ j .LIQUE_800680B0
/* 43494 80068094 90860000 */ lbu $a2, 0x0($a0)
.LIQUE_80068098:
/* 43498 80068098 14E00003 */ bnez $a3, .LIQUE_800680A8
/* 4349C 8006809C 24840001 */ addiu $a0, $a0, 0x1
/* 434A0 800680A0 03E00008 */ jr $ra
/* 434A4 800680A4 00001021 */ addu $v0, $zero, $zero
.LIQUE_800680A8:
/* 434A8 800680A8 24A50001 */ addiu $a1, $a1, 0x1
/* 434AC 800680AC 90860000 */ lbu $a2, 0x0($a0)
.LIQUE_800680B0:
/* 434B0 800680B0 90A80000 */ lbu $t0, 0x0($a1)
/* 434B4 800680B4 80A30000 */ lb $v1, 0x0($a1)
/* 434B8 800680B8 00061600 */ sll $v0, $a2, 24
/* 434BC 800680BC 00021603 */ sra $v0, $v0, 24
/* 434C0 800680C0 1043FFF5 */ beq $v0, $v1, .LIQUE_80068098
/* 434C4 800680C4 00C03821 */ addu $a3, $a2, $zero
/* 434C8 800680C8 00061E00 */ sll $v1, $a2, 24
/* 434CC 800680CC 00031E03 */ sra $v1, $v1, 24
/* 434D0 800680D0 00081600 */ sll $v0, $t0, 24
/* 434D4 800680D4 00021603 */ sra $v0, $v0, 24
/* 434D8 800680D8 03E00008 */ jr $ra
/* 434DC 800680DC 00621023 */ subu $v0, $v1, $v0

View File

@ -1,25 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel __osAiDeviceBus
/* 45B40 8006A740 3C02A450 */ lui $v0, (0xA450000C >> 16)
/* 45B44 8006A744 3442000C */ ori $v0, $v0, (0xA450000C & 0xFFFF)
/* 45B48 8006A748 8C430000 */ lw $v1, 0x0($v0)
/* 45B4C 8006A74C 04610003 */ bgez $v1, .LIQUE_8006A75C
/* 45B50 8006A750 00001021 */ addu $v0, $zero, $zero
/* 45B54 8006A754 03E00008 */ jr $ra
/* 45B58 8006A758 24020001 */ addiu $v0, $zero, 0x1
.LIQUE_8006A75C:
/* 45B5C 8006A75C 03E00008 */ jr $ra
/* 45B60 8006A760 00000000 */ nop
/* 45B64 8006A764 00000000 */ nop
/* 45B68 8006A768 00000000 */ nop
/* 45B6C 8006A76C 00000000 */ nop

View File

@ -1,16 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osAiGetLength
/* 3B710 80060310 3C03A450 */ lui $v1, (0xA4500004 >> 16)
/* 3B714 80060314 34630004 */ ori $v1, $v1, (0xA4500004 & 0xFFFF)
/* 3B718 80060318 03E00008 */ jr $ra
/* 3B71C 8006031C 8C620000 */ lw $v0, 0x0($v1)

View File

@ -1,16 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osAiGetStatus
/* 3B720 80060320 3C03A450 */ lui $v1, (0xA450000C >> 16)
/* 3B724 80060324 3463000C */ ori $v1, $v1, (0xA450000C & 0xFFFF)
/* 3B728 80060328 03E00008 */ jr $ra
/* 3B72C 8006032C 8C620000 */ lw $v0, 0x0($v1)

View File

@ -1,83 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osAiSetFrequency
/* 3B730 80060330 44841000 */ mtc1 $a0, $f2
/* 3B734 80060334 468010A1 */ cvt.d.w $f2, $f2
/* 3B738 80060338 3C018009 */ lui $at, %hi(osViClock)
/* 3B73C 8006033C C42445A8 */ lwc1 $f4, %lo(osViClock)($at)
/* 3B740 80060340 46802120 */ cvt.s.w $f4, $f4
/* 3B744 80060344 04830006 */ bgezl $a0, .LIQUE_80060360
/* 3B748 80060348 46201020 */ cvt.s.d $f0, $f2
/* 3B74C 8006034C 3C0141F0 */ lui $at, (0x41F00000 >> 16)
/* 3B750 80060350 44810800 */ mtc1 $at, $f1
/* 3B754 80060354 44800000 */ mtc1 $zero, $f0
/* 3B758 80060358 46201080 */ add.d $f2, $f2, $f0
/* 3B75C 8006035C 46201020 */ cvt.s.d $f0, $f2
.LIQUE_80060360:
/* 3B760 80060360 3C013F00 */ lui $at, (0x3F000000 >> 16)
/* 3B764 80060364 44811000 */ mtc1 $at, $f2
/* 3B768 80060368 46002003 */ div.s $f0, $f4, $f0
/* 3B76C 8006036C 46020000 */ add.s $f0, $f0, $f2
/* 3B770 80060370 3C014F00 */ lui $at, (0x4F000000 >> 16)
/* 3B774 80060374 44811000 */ mtc1 $at, $f2
/* 3B778 80060378 4600103E */ c.le.s $f2, $f0
/* 3B77C 8006037C 45030005 */ bc1tl .LIQUE_80060394
/* 3B780 80060380 46020001 */ sub.s $f0, $f0, $f2
/* 3B784 80060384 4600018D */ trunc.w.s $f6, $f0
/* 3B788 80060388 44073000 */ mfc1 $a3, $f6
/* 3B78C 8006038C 080180EA */ j .LIQUE_800603A8
/* 3B790 80060390 2CE20084 */ sltiu $v0, $a3, 0x84
.LIQUE_80060394:
/* 3B794 80060394 3C028000 */ lui $v0, 0x8000
/* 3B798 80060398 4600018D */ trunc.w.s $f6, $f0
/* 3B79C 8006039C 44073000 */ mfc1 $a3, $f6
/* 3B7A0 800603A0 00E23825 */ or $a3, $a3, $v0
/* 3B7A4 800603A4 2CE20084 */ sltiu $v0, $a3, 0x84
.LIQUE_800603A8:
/* 3B7A8 800603A8 10400003 */ beqz $v0, .LIQUE_800603B8
/* 3B7AC 800603AC 3C023E0F */ lui $v0, (0x3E0F83E1 >> 16)
/* 3B7B0 800603B0 03E00008 */ jr $ra
/* 3B7B4 800603B4 2402FFFF */ addiu $v0, $zero, -0x1
.LIQUE_800603B8:
/* 3B7B8 800603B8 344283E1 */ ori $v0, $v0, (0x3E0F83E1 & 0xFFFF)
/* 3B7BC 800603BC 00E20019 */ multu $a3, $v0
/* 3B7C0 800603C0 00001010 */ mfhi $v0
/* 3B7C4 800603C4 00021102 */ srl $v0, $v0, 4
/* 3B7C8 800603C8 304400FF */ andi $a0, $v0, 0xFF
/* 3B7CC 800603CC 2C830011 */ sltiu $v1, $a0, 0x11
/* 3B7D0 800603D0 50600001 */ beql $v1, $zero, .LIQUE_800603D8
/* 3B7D4 800603D4 24040010 */ addiu $a0, $zero, 0x10
.LIQUE_800603D8:
/* 3B7D8 800603D8 3C05A450 */ lui $a1, (0xA4500010 >> 16)
/* 3B7DC 800603DC 34A50010 */ ori $a1, $a1, (0xA4500010 & 0xFFFF)
/* 3B7E0 800603E0 3C06A450 */ lui $a2, (0xA4500014 >> 16)
/* 3B7E4 800603E4 34C60014 */ ori $a2, $a2, (0xA4500014 & 0xFFFF)
/* 3B7E8 800603E8 24E3FFFF */ addiu $v1, $a3, -0x1
/* 3B7EC 800603EC ACA30000 */ sw $v1, 0x0($a1)
/* 3B7F0 800603F0 3C028009 */ lui $v0, %hi(osViClock)
/* 3B7F4 800603F4 8C4245A8 */ lw $v0, %lo(osViClock)($v0)
/* 3B7F8 800603F8 2484FFFF */ addiu $a0, $a0, -0x1
/* 3B7FC 800603FC ACC40000 */ sw $a0, 0x0($a2)
/* 3B800 80060400 14E00002 */ bnez $a3, .LIQUE_8006040C
/* 3B804 80060404 0047001A */ div $zero, $v0, $a3
/* 3B808 80060408 0007000D */ break 7
.LIQUE_8006040C:
/* 3B80C 8006040C 2401FFFF */ addiu $at, $zero, -0x1
/* 3B810 80060410 14E10004 */ bne $a3, $at, .LIQUE_80060424
/* 3B814 80060414 3C018000 */ lui $at, (0x80000000 >> 16)
/* 3B818 80060418 14410002 */ bne $v0, $at, .LIQUE_80060424
/* 3B81C 8006041C 00000000 */ nop
/* 3B820 80060420 0006000D */ break 6
.LIQUE_80060424:
/* 3B824 80060424 00001012 */ mflo $v0
/* 3B828 80060428 03E00008 */ jr $ra
/* 3B82C 8006042C 00000000 */ nop

View File

@ -1,56 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osAiSetNextBuffer
/* 3B830 80060430 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 3B834 80060434 AFB00010 */ sw $s0, 0x10($sp)
/* 3B838 80060438 00808021 */ addu $s0, $a0, $zero
/* 3B83C 8006043C AFB10014 */ sw $s1, 0x14($sp)
/* 3B840 80060440 AFBF0018 */ sw $ra, 0x18($sp)
/* 3B844 80060444 0C01A9D0 */ jal __osAiDeviceBus
/* 3B848 80060448 00A08821 */ addu $s1, $a1, $zero
/* 3B84C 8006044C 14400018 */ bnez $v0, .LIQUE_800604B0
/* 3B850 80060450 2402FFFF */ addiu $v0, $zero, -0x1
/* 3B854 80060454 3C028009 */ lui $v0, %hi(aisetnextbuf_hdwrBugFlag)
/* 3B858 80060458 904229C0 */ lbu $v0, %lo(aisetnextbuf_hdwrBugFlag)($v0)
/* 3B85C 8006045C 10400002 */ beqz $v0, .LIQUE_80060468
/* 3B860 80060460 02002021 */ addu $a0, $s0, $zero
/* 3B864 80060464 2484E000 */ addiu $a0, $a0, -0x2000
.LIQUE_80060468:
/* 3B868 80060468 02111021 */ addu $v0, $s0, $s1
/* 3B86C 8006046C 30421FFF */ andi $v0, $v0, 0x1FFF
/* 3B870 80060470 14400004 */ bnez $v0, .LIQUE_80060484
/* 3B874 80060474 24020001 */ addiu $v0, $zero, 0x1
/* 3B878 80060478 3C018009 */ lui $at, %hi(aisetnextbuf_hdwrBugFlag)
/* 3B87C 8006047C 08018123 */ j .LIQUE_8006048C
/* 3B880 80060480 A02229C0 */ sb $v0, %lo(aisetnextbuf_hdwrBugFlag)($at)
.LIQUE_80060484:
/* 3B884 80060484 3C018009 */ lui $at, %hi(aisetnextbuf_hdwrBugFlag)
/* 3B888 80060488 A02029C0 */ sb $zero, %lo(aisetnextbuf_hdwrBugFlag)($at)
.LIQUE_8006048C:
/* 3B88C 8006048C 0C01836C */ jal osVirtualToPhysical
/* 3B890 80060490 00000000 */ nop
/* 3B894 80060494 3C03A450 */ lui $v1, (0xA4500004 >> 16)
/* 3B898 80060498 34630004 */ ori $v1, $v1, (0xA4500004 & 0xFFFF)
/* 3B89C 8006049C 00402821 */ addu $a1, $v0, $zero
/* 3B8A0 800604A0 00001021 */ addu $v0, $zero, $zero
/* 3B8A4 800604A4 3C04A450 */ lui $a0, %hi(D_A4500000)
/* 3B8A8 800604A8 AC850000 */ sw $a1, %lo(D_A4500000)($a0)
/* 3B8AC 800604AC AC710000 */ sw $s1, 0x0($v1)
.LIQUE_800604B0:
/* 3B8B0 800604B0 8FBF0018 */ lw $ra, 0x18($sp)
/* 3B8B4 800604B4 8FB10014 */ lw $s1, 0x14($sp)
/* 3B8B8 800604B8 8FB00010 */ lw $s0, 0x10($sp)
/* 3B8BC 800604BC 03E00008 */ jr $ra
/* 3B8C0 800604C0 27BD0020 */ addiu $sp, $sp, 0x20
/* 3B8C4 800604C4 00000000 */ nop
/* 3B8C8 800604C8 00000000 */ nop
/* 3B8CC 800604CC 00000000 */ nop

View File

@ -1,59 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osContStartQuery
/* 3BAB0 800606B0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3BAB4 800606B4 AFB00010 */ sw $s0, 0x10($sp)
/* 3BAB8 800606B8 AFBF0014 */ sw $ra, 0x14($sp)
/* 3BABC 800606BC 0C018FE5 */ jal __osSiGetAccess
/* 3BAC0 800606C0 00808021 */ addu $s0, $a0, $zero
/* 3BAC4 800606C4 3C02800A */ lui $v0, %hi(__osContLastCmd)
/* 3BAC8 800606C8 904291F0 */ lbu $v0, %lo(__osContLastCmd)($v0)
/* 3BACC 800606CC 1040000B */ beqz $v0, .LIQUE_800606FC
/* 3BAD0 800606D0 00000000 */ nop
/* 3BAD4 800606D4 0C01833C */ jal __osPackRequestData
/* 3BAD8 800606D8 00002021 */ addu $a0, $zero, $zero
/* 3BADC 800606DC 3C05800B */ lui $a1, %hi(__osContPifRam)
/* 3BAE0 800606E0 24A5F910 */ addiu $a1, $a1, %lo(__osContPifRam)
/* 3BAE4 800606E4 0C018F98 */ jal __osSiRawStartDma
/* 3BAE8 800606E8 24040001 */ addiu $a0, $zero, 0x1
/* 3BAEC 800606EC 02002021 */ addu $a0, $s0, $zero
/* 3BAF0 800606F0 00002821 */ addu $a1, $zero, $zero
/* 3BAF4 800606F4 0C018DCC */ jal osRecvMesg
/* 3BAF8 800606F8 24060001 */ addiu $a2, $zero, 0x1
.LIQUE_800606FC:
/* 3BAFC 800606FC 3C05800B */ lui $a1, %hi(__osContPifRam)
/* 3BB00 80060700 24A5F910 */ addiu $a1, $a1, %lo(__osContPifRam)
/* 3BB04 80060704 0C018F98 */ jal __osSiRawStartDma
/* 3BB08 80060708 00002021 */ addu $a0, $zero, $zero
/* 3BB0C 8006070C 240300FD */ addiu $v1, $zero, 0xFD
/* 3BB10 80060710 3C01800A */ lui $at, %hi(__osContLastCmd)
/* 3BB14 80060714 A02391F0 */ sb $v1, %lo(__osContLastCmd)($at)
/* 3BB18 80060718 0C018FF4 */ jal __osSiRelAccess
/* 3BB1C 8006071C 00408021 */ addu $s0, $v0, $zero
/* 3BB20 80060720 02001021 */ addu $v0, $s0, $zero
/* 3BB24 80060724 8FBF0014 */ lw $ra, 0x14($sp)
/* 3BB28 80060728 8FB00010 */ lw $s0, 0x10($sp)
/* 3BB2C 8006072C 03E00008 */ jr $ra
/* 3BB30 80060730 27BD0018 */ addiu $sp, $sp, 0x18
glabel osContGetQuery
/* 3BB34 80060734 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 3BB38 80060738 00802821 */ addu $a1, $a0, $zero
/* 3BB3C 8006073C AFBF0018 */ sw $ra, 0x18($sp)
/* 3BB40 80060740 0C0182E1 */ jal __osContGetInitData
/* 3BB44 80060744 27A40010 */ addiu $a0, $sp, 0x10
/* 3BB48 80060748 8FBF0018 */ lw $ra, 0x18($sp)
/* 3BB4C 8006074C 03E00008 */ jr $ra
/* 3BB50 80060750 27BD0020 */ addiu $sp, $sp, 0x20
/* 3BB54 80060754 00000000 */ nop
/* 3BB58 80060758 00000000 */ nop
/* 3BB5C 8006075C 00000000 */ nop

View File

@ -1,184 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osContStartReadData
/* 3BB60 80060760 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3BB64 80060764 AFB00010 */ sw $s0, 0x10($sp)
/* 3BB68 80060768 AFBF0014 */ sw $ra, 0x14($sp)
/* 3BB6C 8006076C 0C018FE5 */ jal __osSiGetAccess
/* 3BB70 80060770 00808021 */ addu $s0, $a0, $zero
/* 3BB74 80060774 3C03800A */ lui $v1, %hi(__osContLastCmd)
/* 3BB78 80060778 906391F0 */ lbu $v1, %lo(__osContLastCmd)($v1)
/* 3BB7C 8006077C 24020001 */ addiu $v0, $zero, 0x1
/* 3BB80 80060780 1062000B */ beq $v1, $v0, .LIQUE_800607B0
/* 3BB84 80060784 00000000 */ nop
/* 3BB88 80060788 0C018249 */ jal __osPackReadData
/* 3BB8C 8006078C 00000000 */ nop
/* 3BB90 80060790 3C05800B */ lui $a1, %hi(__osContPifRam)
/* 3BB94 80060794 24A5F910 */ addiu $a1, $a1, %lo(__osContPifRam)
/* 3BB98 80060798 0C018F98 */ jal __osSiRawStartDma
/* 3BB9C 8006079C 24040001 */ addiu $a0, $zero, 0x1
/* 3BBA0 800607A0 02002021 */ addu $a0, $s0, $zero
/* 3BBA4 800607A4 00002821 */ addu $a1, $zero, $zero
/* 3BBA8 800607A8 0C018DCC */ jal osRecvMesg
/* 3BBAC 800607AC 24060001 */ addiu $a2, $zero, 0x1
.LIQUE_800607B0:
/* 3BBB0 800607B0 3C05800B */ lui $a1, %hi(__osContPifRam)
/* 3BBB4 800607B4 24A5F910 */ addiu $a1, $a1, %lo(__osContPifRam)
/* 3BBB8 800607B8 0C018F98 */ jal __osSiRawStartDma
/* 3BBBC 800607BC 00002021 */ addu $a0, $zero, $zero
/* 3BBC0 800607C0 240300FD */ addiu $v1, $zero, 0xFD
/* 3BBC4 800607C4 3C01800A */ lui $at, %hi(__osContLastCmd)
/* 3BBC8 800607C8 A02391F0 */ sb $v1, %lo(__osContLastCmd)($at)
/* 3BBCC 800607CC 0C018FF4 */ jal __osSiRelAccess
/* 3BBD0 800607D0 00408021 */ addu $s0, $v0, $zero
/* 3BBD4 800607D4 02001021 */ addu $v0, $s0, $zero
/* 3BBD8 800607D8 8FBF0014 */ lw $ra, 0x14($sp)
/* 3BBDC 800607DC 8FB00010 */ lw $s0, 0x10($sp)
/* 3BBE0 800607E0 03E00008 */ jr $ra
/* 3BBE4 800607E4 27BD0018 */ addiu $sp, $sp, 0x18
glabel osContGetReadData
/* 3BBE8 800607E8 27BDFFF0 */ addiu $sp, $sp, -0x10
/* 3BBEC 800607EC 00803821 */ addu $a3, $a0, $zero
/* 3BBF0 800607F0 3C0A800B */ lui $t2, %hi(__osContPifRam)
/* 3BBF4 800607F4 254AF910 */ addiu $t2, $t2, %lo(__osContPifRam)
/* 3BBF8 800607F8 3C05800A */ lui $a1, %hi(__osMaxControllers)
/* 3BBFC 800607FC 90A591D2 */ lbu $a1, %lo(__osMaxControllers)($a1)
/* 3BC00 80060800 10A0001F */ beqz $a1, .LIQUE_80060880
/* 3BC04 80060804 00004821 */ addu $t1, $zero, $zero
/* 3BC08 80060808 24880003 */ addiu $t0, $a0, 0x3
/* 3BC0C 8006080C 24860002 */ addiu $a2, $a0, 0x2
.LIQUE_80060810:
/* 3BC10 80060810 894B0000 */ lwl $t3, 0x0($t2)
/* 3BC14 80060814 994B0003 */ lwr $t3, 0x3($t2)
/* 3BC18 80060818 894C0004 */ lwl $t4, 0x4($t2)
/* 3BC1C 8006081C 994C0007 */ lwr $t4, 0x7($t2)
/* 3BC20 80060820 ABAB0000 */ swl $t3, 0x0($sp)
/* 3BC24 80060824 BBAB0003 */ swr $t3, 0x3($sp)
/* 3BC28 80060828 ABAC0004 */ swl $t4, 0x4($sp)
/* 3BC2C 8006082C BBAC0007 */ swr $t4, 0x7($sp)
/* 3BC30 80060830 93A20002 */ lbu $v0, 0x2($sp)
/* 3BC34 80060834 304200C0 */ andi $v0, $v0, 0xC0
/* 3BC38 80060838 00021102 */ srl $v0, $v0, 4
/* 3BC3C 8006083C 14400007 */ bnez $v0, .LIQUE_8006085C
/* 3BC40 80060840 A0C20002 */ sb $v0, 0x2($a2)
/* 3BC44 80060844 97A20004 */ lhu $v0, 0x4($sp)
/* 3BC48 80060848 93A30006 */ lbu $v1, 0x6($sp)
/* 3BC4C 8006084C 93A40007 */ lbu $a0, 0x7($sp)
/* 3BC50 80060850 A4E20000 */ sh $v0, 0x0($a3)
/* 3BC54 80060854 A0C30000 */ sb $v1, 0x0($a2)
/* 3BC58 80060858 A1040000 */ sb $a0, 0x0($t0)
.LIQUE_8006085C:
/* 3BC5C 8006085C 25290001 */ addiu $t1, $t1, 0x1
/* 3BC60 80060860 254A0008 */ addiu $t2, $t2, 0x8
/* 3BC64 80060864 24C60006 */ addiu $a2, $a2, 0x6
/* 3BC68 80060868 25080006 */ addiu $t0, $t0, 0x6
/* 3BC6C 8006086C 3C05800A */ lui $a1, %hi(__osMaxControllers)
/* 3BC70 80060870 90A591D2 */ lbu $a1, %lo(__osMaxControllers)($a1)
/* 3BC74 80060874 0125102A */ slt $v0, $t1, $a1
/* 3BC78 80060878 1440FFE5 */ bnez $v0, .LIQUE_80060810
/* 3BC7C 8006087C 24E70006 */ addiu $a3, $a3, 0x6
.LIQUE_80060880:
/* 3BC80 80060880 3C028000 */ lui $v0, %hi(__osBbIsBb)
/* 3BC84 80060884 8C420388 */ lw $v0, %lo(__osBbIsBb)($v0)
/* 3BC88 80060888 10400024 */ beqz $v0, .LIQUE_8006091C
/* 3BC8C 8006088C 00000000 */ nop
/* 3BC90 80060890 3C048000 */ lui $a0, %hi(__osBbHackFlags)
/* 3BC94 80060894 8C84038C */ lw $a0, %lo(__osBbHackFlags)($a0)
/* 3BC98 80060898 10800020 */ beqz $a0, .LIQUE_8006091C
/* 3BC9C 8006089C 00051840 */ sll $v1, $a1, 1
/* 3BCA0 800608A0 00651821 */ addu $v1, $v1, $a1
/* 3BCA4 800608A4 00031840 */ sll $v1, $v1, 1
/* 3BCA8 800608A8 00E33823 */ subu $a3, $a3, $v1
/* 3BCAC 800608AC 00041040 */ sll $v0, $a0, 1
/* 3BCB0 800608B0 00441021 */ addu $v0, $v0, $a0
/* 3BCB4 800608B4 00021040 */ sll $v0, $v0, 1
/* 3BCB8 800608B8 00471021 */ addu $v0, $v0, $a3
/* 3BCBC 800608BC 88EB0000 */ lwl $t3, 0x0($a3)
/* 3BCC0 800608C0 98EB0003 */ lwr $t3, 0x3($a3)
/* 3BCC4 800608C4 84EC0004 */ lh $t4, 0x4($a3)
/* 3BCC8 800608C8 ABAB0008 */ swl $t3, 0x8($sp)
/* 3BCCC 800608CC BBAB000B */ swr $t3, 0xB($sp)
/* 3BCD0 800608D0 A7AC000C */ sh $t4, 0xC($sp)
/* 3BCD4 800608D4 884B0000 */ lwl $t3, 0x0($v0)
/* 3BCD8 800608D8 984B0003 */ lwr $t3, 0x3($v0)
/* 3BCDC 800608DC 844C0004 */ lh $t4, 0x4($v0)
/* 3BCE0 800608E0 A8EB0000 */ swl $t3, 0x0($a3)
/* 3BCE4 800608E4 B8EB0003 */ swr $t3, 0x3($a3)
/* 3BCE8 800608E8 A4EC0004 */ sh $t4, 0x4($a3)
/* 3BCEC 800608EC 3C048000 */ lui $a0, %hi(__osBbHackFlags)
/* 3BCF0 800608F0 8C84038C */ lw $a0, %lo(__osBbHackFlags)($a0)
/* 3BCF4 800608F4 00041840 */ sll $v1, $a0, 1
/* 3BCF8 800608F8 00641821 */ addu $v1, $v1, $a0
/* 3BCFC 800608FC 00031840 */ sll $v1, $v1, 1
/* 3BD00 80060900 00671821 */ addu $v1, $v1, $a3
/* 3BD04 80060904 8BAB0008 */ lwl $t3, 0x8($sp)
/* 3BD08 80060908 9BAB000B */ lwr $t3, 0xB($sp)
/* 3BD0C 8006090C 87AC000C */ lh $t4, 0xC($sp)
/* 3BD10 80060910 A86B0000 */ swl $t3, 0x0($v1)
/* 3BD14 80060914 B86B0003 */ swr $t3, 0x3($v1)
/* 3BD18 80060918 A46C0004 */ sh $t4, 0x4($v1)
.LIQUE_8006091C:
/* 3BD1C 8006091C 03E00008 */ jr $ra
/* 3BD20 80060920 27BD0010 */ addiu $sp, $sp, 0x10
glabel __osPackReadData
/* 3BD24 80060924 27BDFFF8 */ addiu $sp, $sp, -0x8
/* 3BD28 80060928 3C06800B */ lui $a2, %hi(__osContPifRam)
/* 3BD2C 8006092C 24C6F910 */ addiu $a2, $a2, %lo(__osContPifRam)
/* 3BD30 80060930 00002821 */ addu $a1, $zero, $zero
/* 3BD34 80060934 00C01821 */ addu $v1, $a2, $zero
.LIQUE_80060938:
/* 3BD38 80060938 AC600000 */ sw $zero, 0x0($v1)
/* 3BD3C 8006093C 24A50001 */ addiu $a1, $a1, 0x1
/* 3BD40 80060940 28A2000F */ slti $v0, $a1, 0xF
/* 3BD44 80060944 1440FFFC */ bnez $v0, .LIQUE_80060938
/* 3BD48 80060948 24630004 */ addiu $v1, $v1, 0x4
/* 3BD4C 8006094C 00002821 */ addu $a1, $zero, $zero
/* 3BD50 80060950 24040001 */ addiu $a0, $zero, 0x1
/* 3BD54 80060954 240200FF */ addiu $v0, $zero, 0xFF
/* 3BD58 80060958 3C01800B */ lui $at, %hi(__osContPifRam + 0x3C)
/* 3BD5C 8006095C AC24F94C */ sw $a0, %lo(__osContPifRam + 0x3C)($at)
/* 3BD60 80060960 A3A40001 */ sb $a0, 0x1($sp)
/* 3BD64 80060964 A3A40003 */ sb $a0, 0x3($sp)
/* 3BD68 80060968 3C04800A */ lui $a0, %hi(__osMaxControllers)
/* 3BD6C 8006096C 908491D2 */ lbu $a0, %lo(__osMaxControllers)($a0)
/* 3BD70 80060970 24030004 */ addiu $v1, $zero, 0x4
/* 3BD74 80060974 A3A20000 */ sb $v0, 0x0($sp)
/* 3BD78 80060978 3402FFFF */ ori $v0, $zero, 0xFFFF
/* 3BD7C 8006097C A3A30002 */ sb $v1, 0x2($sp)
/* 3BD80 80060980 2403FFFF */ addiu $v1, $zero, -0x1
/* 3BD84 80060984 A7A20004 */ sh $v0, 0x4($sp)
/* 3BD88 80060988 A3A30006 */ sb $v1, 0x6($sp)
/* 3BD8C 8006098C 1080000F */ beqz $a0, .LIQUE_800609CC
/* 3BD90 80060990 A3A30007 */ sb $v1, 0x7($sp)
.LIQUE_80060994:
/* 3BD94 80060994 8BA70000 */ lwl $a3, 0x0($sp)
/* 3BD98 80060998 9BA70003 */ lwr $a3, 0x3($sp)
/* 3BD9C 8006099C 8BA80004 */ lwl $t0, 0x4($sp)
/* 3BDA0 800609A0 9BA80007 */ lwr $t0, 0x7($sp)
/* 3BDA4 800609A4 A8C70000 */ swl $a3, 0x0($a2)
/* 3BDA8 800609A8 B8C70003 */ swr $a3, 0x3($a2)
/* 3BDAC 800609AC A8C80004 */ swl $t0, 0x4($a2)
/* 3BDB0 800609B0 B8C80007 */ swr $t0, 0x7($a2)
/* 3BDB4 800609B4 3C02800A */ lui $v0, %hi(__osMaxControllers)
/* 3BDB8 800609B8 904291D2 */ lbu $v0, %lo(__osMaxControllers)($v0)
/* 3BDBC 800609BC 24A50001 */ addiu $a1, $a1, 0x1
/* 3BDC0 800609C0 00A2102A */ slt $v0, $a1, $v0
/* 3BDC4 800609C4 1440FFF3 */ bnez $v0, .LIQUE_80060994
/* 3BDC8 800609C8 24C60008 */ addiu $a2, $a2, 0x8
.LIQUE_800609CC:
/* 3BDCC 800609CC 240200FE */ addiu $v0, $zero, 0xFE
/* 3BDD0 800609D0 A0C20000 */ sb $v0, 0x0($a2)
/* 3BDD4 800609D4 03E00008 */ jr $ra
/* 3BDD8 800609D8 27BD0008 */ addiu $sp, $sp, 0x8
/* 3BDDC 800609DC 00000000 */ nop

View File

@ -1,271 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osContInit
/* 3BDE0 800609E0 3C028009 */ lui $v0, %hi(__osContinitialized)
/* 3BDE4 800609E4 8C4229D0 */ lw $v0, %lo(__osContinitialized)($v0)
/* 3BDE8 800609E8 27BDFF80 */ addiu $sp, $sp, -0x80
/* 3BDEC 800609EC AFB40070 */ sw $s4, 0x70($sp)
/* 3BDF0 800609F0 0080A021 */ addu $s4, $a0, $zero
/* 3BDF4 800609F4 AFB60078 */ sw $s6, 0x78($sp)
/* 3BDF8 800609F8 00A0B021 */ addu $s6, $a1, $zero
/* 3BDFC 800609FC AFB50074 */ sw $s5, 0x74($sp)
/* 3BE00 80060A00 00C0A821 */ addu $s5, $a2, $zero
/* 3BE04 80060A04 AFBF007C */ sw $ra, 0x7C($sp)
/* 3BE08 80060A08 AFB3006C */ sw $s3, 0x6C($sp)
/* 3BE0C 80060A0C AFB20068 */ sw $s2, 0x68($sp)
/* 3BE10 80060A10 AFB10064 */ sw $s1, 0x64($sp)
/* 3BE14 80060A14 10400003 */ beqz $v0, .LIQUE_80060A24
/* 3BE18 80060A18 AFB00060 */ sw $s0, 0x60($sp)
/* 3BE1C 80060A1C 080182D7 */ j .LIQUE_80060B5C
/* 3BE20 80060A20 00001021 */ addu $v0, $zero, $zero
.LIQUE_80060A24:
/* 3BE24 80060A24 24040001 */ addiu $a0, $zero, 0x1
/* 3BE28 80060A28 3C018009 */ lui $at, %hi(__osContinitialized)
/* 3BE2C 80060A2C 0C019164 */ jal osGetTime
/* 3BE30 80060A30 AC2429D0 */ sw $a0, %lo(__osContinitialized)($at)
/* 3BE34 80060A34 00409021 */ addu $s2, $v0, $zero
/* 3BE38 80060A38 00609821 */ addu $s3, $v1, $zero
/* 3BE3C 80060A3C 16400022 */ bnez $s2, .LIQUE_80060AC8
/* 3BE40 80060A40 24020004 */ addiu $v0, $zero, 0x4
/* 3BE44 80060A44 16400007 */ bnez $s2, .LIQUE_80060A64
/* 3BE48 80060A48 27B10040 */ addiu $s1, $sp, 0x40
/* 3BE4C 80060A4C 3C020165 */ lui $v0, (0x165A0BB >> 16)
/* 3BE50 80060A50 3442A0BB */ ori $v0, $v0, (0x165A0BB & 0xFFFF)
/* 3BE54 80060A54 0053102B */ sltu $v0, $v0, $s3
/* 3BE58 80060A58 1440001B */ bnez $v0, .LIQUE_80060AC8
/* 3BE5C 80060A5C 24020004 */ addiu $v0, $zero, 0x4
/* 3BE60 80060A60 27B10040 */ addiu $s1, $sp, 0x40
.LIQUE_80060A64:
/* 3BE64 80060A64 02202021 */ addu $a0, $s1, $zero
/* 3BE68 80060A68 27B00058 */ addiu $s0, $sp, 0x58
/* 3BE6C 80060A6C 02002821 */ addu $a1, $s0, $zero
/* 3BE70 80060A70 0C018DB0 */ jal osCreateMesgQueue
/* 3BE74 80060A74 24060001 */ addiu $a2, $zero, 0x1
/* 3BE78 80060A78 00004021 */ addu $t0, $zero, $zero
/* 3BE7C 80060A7C 00004821 */ addu $t1, $zero, $zero
/* 3BE80 80060A80 27A40020 */ addiu $a0, $sp, 0x20
/* 3BE84 80060A84 24060000 */ addiu $a2, $zero, 0x0
/* 3BE88 80060A88 3C070165 */ lui $a3, (0x165A0BC >> 16)
/* 3BE8C 80060A8C 34E7A0BC */ ori $a3, $a3, (0x165A0BC & 0xFFFF)
/* 3BE90 80060A90 00F3102B */ sltu $v0, $a3, $s3
/* 3BE94 80060A94 00F33823 */ subu $a3, $a3, $s3
/* 3BE98 80060A98 00D23023 */ subu $a2, $a2, $s2
/* 3BE9C 80060A9C 00C23023 */ subu $a2, $a2, $v0
/* 3BEA0 80060AA0 AFA80010 */ sw $t0, 0x10($sp)
/* 3BEA4 80060AA4 AFA90014 */ sw $t1, 0x14($sp)
/* 3BEA8 80060AA8 AFB10018 */ sw $s1, 0x18($sp)
/* 3BEAC 80060AAC 0C0191A0 */ jal osSetTimer
/* 3BEB0 80060AB0 AFB0001C */ sw $s0, 0x1C($sp)
/* 3BEB4 80060AB4 02202021 */ addu $a0, $s1, $zero
/* 3BEB8 80060AB8 02002821 */ addu $a1, $s0, $zero
/* 3BEBC 80060ABC 0C018DCC */ jal osRecvMesg
/* 3BEC0 80060AC0 24060001 */ addiu $a2, $zero, 0x1
/* 3BEC4 80060AC4 24020004 */ addiu $v0, $zero, 0x4
.LIQUE_80060AC8:
/* 3BEC8 80060AC8 3C01800A */ lui $at, %hi(__osMaxControllers)
/* 3BECC 80060ACC A02291D2 */ sb $v0, %lo(__osMaxControllers)($at)
/* 3BED0 80060AD0 0C01833C */ jal __osPackRequestData
/* 3BED4 80060AD4 00002021 */ addu $a0, $zero, $zero
/* 3BED8 80060AD8 24040001 */ addiu $a0, $zero, 0x1
/* 3BEDC 80060ADC 3C11800B */ lui $s1, %hi(__osContPifRam)
/* 3BEE0 80060AE0 2631F910 */ addiu $s1, $s1, %lo(__osContPifRam)
/* 3BEE4 80060AE4 0C018F98 */ jal __osSiRawStartDma
/* 3BEE8 80060AE8 02202821 */ addu $a1, $s1, $zero
/* 3BEEC 80060AEC 02802021 */ addu $a0, $s4, $zero
/* 3BEF0 80060AF0 27B00058 */ addiu $s0, $sp, 0x58
/* 3BEF4 80060AF4 02002821 */ addu $a1, $s0, $zero
/* 3BEF8 80060AF8 0C018DCC */ jal osRecvMesg
/* 3BEFC 80060AFC 24060001 */ addiu $a2, $zero, 0x1
/* 3BF00 80060B00 00002021 */ addu $a0, $zero, $zero
/* 3BF04 80060B04 0C018F98 */ jal __osSiRawStartDma
/* 3BF08 80060B08 02202821 */ addu $a1, $s1, $zero
/* 3BF0C 80060B0C 02802021 */ addu $a0, $s4, $zero
/* 3BF10 80060B10 02002821 */ addu $a1, $s0, $zero
/* 3BF14 80060B14 24060001 */ addiu $a2, $zero, 0x1
/* 3BF18 80060B18 0C018DCC */ jal osRecvMesg
/* 3BF1C 80060B1C 00408821 */ addu $s1, $v0, $zero
/* 3BF20 80060B20 02C02021 */ addu $a0, $s6, $zero
/* 3BF24 80060B24 0C0182E1 */ jal __osContGetInitData
/* 3BF28 80060B28 02A02821 */ addu $a1, $s5, $zero
/* 3BF2C 80060B2C 240200FD */ addiu $v0, $zero, 0xFD
/* 3BF30 80060B30 3C01800A */ lui $at, %hi(__osContLastCmd)
/* 3BF34 80060B34 A02291F0 */ sb $v0, %lo(__osContLastCmd)($at)
/* 3BF38 80060B38 0C018FD0 */ jal __osSiCreateAccessQueue
/* 3BF3C 80060B3C 00000000 */ nop
/* 3BF40 80060B40 3C04800E */ lui $a0, %hi(__osEepromTimerQ)
/* 3BF44 80060B44 24848E20 */ addiu $a0, $a0, %lo(__osEepromTimerQ)
/* 3BF48 80060B48 3C05800A */ lui $a1, %hi(__osEepromTimerMsg)
/* 3BF4C 80060B4C 24A591F4 */ addiu $a1, $a1, %lo(__osEepromTimerMsg)
/* 3BF50 80060B50 0C018DB0 */ jal osCreateMesgQueue
/* 3BF54 80060B54 24060001 */ addiu $a2, $zero, 0x1
/* 3BF58 80060B58 02201021 */ addu $v0, $s1, $zero
.LIQUE_80060B5C:
/* 3BF5C 80060B5C 8FBF007C */ lw $ra, 0x7C($sp)
/* 3BF60 80060B60 8FB60078 */ lw $s6, 0x78($sp)
/* 3BF64 80060B64 8FB50074 */ lw $s5, 0x74($sp)
/* 3BF68 80060B68 8FB40070 */ lw $s4, 0x70($sp)
/* 3BF6C 80060B6C 8FB3006C */ lw $s3, 0x6C($sp)
/* 3BF70 80060B70 8FB20068 */ lw $s2, 0x68($sp)
/* 3BF74 80060B74 8FB10064 */ lw $s1, 0x64($sp)
/* 3BF78 80060B78 8FB00060 */ lw $s0, 0x60($sp)
/* 3BF7C 80060B7C 03E00008 */ jr $ra
/* 3BF80 80060B80 27BD0080 */ addiu $sp, $sp, 0x80
glabel __osContGetInitData
/* 3BF84 80060B84 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3BF88 80060B88 00A03821 */ addu $a3, $a1, $zero
/* 3BF8C 80060B8C 3C0A800B */ lui $t2, %hi(__osContPifRam)
/* 3BF90 80060B90 254AF910 */ addiu $t2, $t2, %lo(__osContPifRam)
/* 3BF94 80060B94 00003021 */ addu $a2, $zero, $zero
/* 3BF98 80060B98 00004021 */ addu $t0, $zero, $zero
/* 3BF9C 80060B9C 3C03800A */ lui $v1, %hi(__osMaxControllers)
/* 3BFA0 80060BA0 906391D2 */ lbu $v1, %lo(__osMaxControllers)($v1)
/* 3BFA4 80060BA4 00806021 */ addu $t4, $a0, $zero
/* 3BFA8 80060BA8 10600026 */ beqz $v1, .LIQUE_80060C44
/* 3BFAC 80060BAC AFB00010 */ sw $s0, 0x10($sp)
/* 3BFB0 80060BB0 240B0001 */ addiu $t3, $zero, 0x1
/* 3BFB4 80060BB4 24A50002 */ addiu $a1, $a1, 0x2
/* 3BFB8 80060BB8 3C098000 */ lui $t1, %hi(__osBbPakAddress)
/* 3BFBC 80060BBC 25290374 */ addiu $t1, $t1, %lo(__osBbPakAddress)
.LIQUE_80060BC0:
/* 3BFC0 80060BC0 894D0000 */ lwl $t5, 0x0($t2)
/* 3BFC4 80060BC4 994D0003 */ lwr $t5, 0x3($t2)
/* 3BFC8 80060BC8 894E0004 */ lwl $t6, 0x4($t2)
/* 3BFCC 80060BCC 994E0007 */ lwr $t6, 0x7($t2)
/* 3BFD0 80060BD0 ABAD0000 */ swl $t5, 0x0($sp)
/* 3BFD4 80060BD4 BBAD0003 */ swr $t5, 0x3($sp)
/* 3BFD8 80060BD8 ABAE0004 */ swl $t6, 0x4($sp)
/* 3BFDC 80060BDC BBAE0007 */ swr $t6, 0x7($sp)
/* 3BFE0 80060BE0 93A20002 */ lbu $v0, 0x2($sp)
/* 3BFE4 80060BE4 304200C0 */ andi $v0, $v0, 0xC0
/* 3BFE8 80060BE8 00021102 */ srl $v0, $v0, 4
/* 3BFEC 80060BEC 1440000C */ bnez $v0, .LIQUE_80060C20
/* 3BFF0 80060BF0 A0A20001 */ sb $v0, 0x1($a1)
/* 3BFF4 80060BF4 00CB2004 */ sllv $a0, $t3, $a2
/* 3BFF8 80060BF8 01042025 */ or $a0, $t0, $a0
/* 3BFFC 80060BFC 93A20005 */ lbu $v0, 0x5($sp)
/* 3C000 80060C00 93A30004 */ lbu $v1, 0x4($sp)
/* 3C004 80060C04 00021200 */ sll $v0, $v0, 8
/* 3C008 80060C08 00621825 */ or $v1, $v1, $v0
/* 3C00C 80060C0C A4E30000 */ sh $v1, 0x0($a3)
/* 3C010 80060C10 8D220000 */ lw $v0, 0x0($t1)
/* 3C014 80060C14 308800FF */ andi $t0, $a0, 0xFF
/* 3C018 80060C18 0002102B */ sltu $v0, $zero, $v0
/* 3C01C 80060C1C A0A20000 */ sb $v0, 0x0($a1)
.LIQUE_80060C20:
/* 3C020 80060C20 25290004 */ addiu $t1, $t1, 0x4
/* 3C024 80060C24 24C60001 */ addiu $a2, $a2, 0x1
/* 3C028 80060C28 254A0008 */ addiu $t2, $t2, 0x8
/* 3C02C 80060C2C 24A50004 */ addiu $a1, $a1, 0x4
/* 3C030 80060C30 3C03800A */ lui $v1, %hi(__osMaxControllers)
/* 3C034 80060C34 906391D2 */ lbu $v1, %lo(__osMaxControllers)($v1)
/* 3C038 80060C38 00C3102A */ slt $v0, $a2, $v1
/* 3C03C 80060C3C 1440FFE0 */ bnez $v0, .LIQUE_80060BC0
/* 3C040 80060C40 24E70004 */ addiu $a3, $a3, 0x4
.LIQUE_80060C44:
/* 3C044 80060C44 3C028000 */ lui $v0, %hi(__osBbIsBb)
/* 3C048 80060C48 8C420388 */ lw $v0, %lo(__osBbIsBb)($v0)
/* 3C04C 80060C4C 10400025 */ beqz $v0, .LIQUE_80060CE4
/* 3C050 80060C50 8FB00010 */ lw $s0, 0x10($sp)
/* 3C054 80060C54 3C058000 */ lui $a1, %hi(__osBbHackFlags)
/* 3C058 80060C58 8CA5038C */ lw $a1, %lo(__osBbHackFlags)($a1)
/* 3C05C 80060C5C 10A00021 */ beqz $a1, .LIQUE_80060CE4
/* 3C060 80060C60 00031880 */ sll $v1, $v1, 2
/* 3C064 80060C64 00E33823 */ subu $a3, $a3, $v1
/* 3C068 80060C68 00051080 */ sll $v0, $a1, 2
/* 3C06C 80060C6C 00471021 */ addu $v0, $v0, $a3
/* 3C070 80060C70 24040001 */ addiu $a0, $zero, 0x1
/* 3C074 80060C74 00A42004 */ sllv $a0, $a0, $a1
/* 3C078 80060C78 34830001 */ ori $v1, $a0, 0x1
/* 3C07C 80060C7C 00031827 */ nor $v1, $zero, $v1
/* 3C080 80060C80 01031824 */ and $v1, $t0, $v1
/* 3C084 80060C84 88ED0000 */ lwl $t5, 0x0($a3)
/* 3C088 80060C88 98ED0003 */ lwr $t5, 0x3($a3)
/* 3C08C 80060C8C ABAD0008 */ swl $t5, 0x8($sp)
/* 3C090 80060C90 BBAD000B */ swr $t5, 0xB($sp)
/* 3C094 80060C94 884D0000 */ lwl $t5, 0x0($v0)
/* 3C098 80060C98 984D0003 */ lwr $t5, 0x3($v0)
/* 3C09C 80060C9C A8ED0000 */ swl $t5, 0x0($a3)
/* 3C0A0 80060CA0 B8ED0003 */ swr $t5, 0x3($a3)
/* 3C0A4 80060CA4 31020001 */ andi $v0, $t0, 0x1
/* 3C0A8 80060CA8 00A21004 */ sllv $v0, $v0, $a1
/* 3C0AC 80060CAC 00621825 */ or $v1, $v1, $v0
/* 3C0B0 80060CB0 01042024 */ and $a0, $t0, $a0
/* 3C0B4 80060CB4 00A42007 */ srav $a0, $a0, $a1
/* 3C0B8 80060CB8 00641825 */ or $v1, $v1, $a0
/* 3C0BC 80060CBC 3C028000 */ lui $v0, %hi(__osBbHackFlags)
/* 3C0C0 80060CC0 8C42038C */ lw $v0, %lo(__osBbHackFlags)($v0)
/* 3C0C4 80060CC4 306800FF */ andi $t0, $v1, 0xFF
/* 3C0C8 80060CC8 00021080 */ sll $v0, $v0, 2
/* 3C0CC 80060CCC 00471021 */ addu $v0, $v0, $a3
/* 3C0D0 80060CD0 8BAD0008 */ lwl $t5, 0x8($sp)
/* 3C0D4 80060CD4 9BAD000B */ lwr $t5, 0xB($sp)
/* 3C0D8 80060CD8 A84D0000 */ swl $t5, 0x0($v0)
/* 3C0DC 80060CDC B84D0003 */ swr $t5, 0x3($v0)
/* 3C0E0 80060CE0 8FB00010 */ lw $s0, 0x10($sp)
.LIQUE_80060CE4:
/* 3C0E4 80060CE4 A1880000 */ sb $t0, 0x0($t4)
/* 3C0E8 80060CE8 03E00008 */ jr $ra
/* 3C0EC 80060CEC 27BD0018 */ addiu $sp, $sp, 0x18
glabel __osPackRequestData
/* 3C0F0 80060CF0 27BDFFF8 */ addiu $sp, $sp, -0x8
/* 3C0F4 80060CF4 308800FF */ andi $t0, $a0, 0xFF
/* 3C0F8 80060CF8 00003021 */ addu $a2, $zero, $zero
/* 3C0FC 80060CFC 3C03800B */ lui $v1, %hi(__osContPifRam)
/* 3C100 80060D00 2463F910 */ addiu $v1, $v1, %lo(__osContPifRam)
.LIQUE_80060D04:
/* 3C104 80060D04 AC600000 */ sw $zero, 0x0($v1)
/* 3C108 80060D08 24C60001 */ addiu $a2, $a2, 0x1
/* 3C10C 80060D0C 28C2000F */ slti $v0, $a2, 0xF
/* 3C110 80060D10 1440FFFC */ bnez $v0, .LIQUE_80060D04
/* 3C114 80060D14 24630004 */ addiu $v1, $v1, 0x4
/* 3C118 80060D18 3C02800B */ lui $v0, %hi(__osContPifRam + 0x3C)
/* 3C11C 80060D1C 2442F94C */ addiu $v0, $v0, %lo(__osContPifRam + 0x3C)
/* 3C120 80060D20 2447FFC4 */ addiu $a3, $v0, -0x3C
/* 3C124 80060D24 00003021 */ addu $a2, $zero, $zero
/* 3C128 80060D28 24040001 */ addiu $a0, $zero, 0x1
/* 3C12C 80060D2C 240300FF */ addiu $v1, $zero, 0xFF
/* 3C130 80060D30 AC440000 */ sw $a0, 0x0($v0)
/* 3C134 80060D34 3C05800A */ lui $a1, %hi(__osMaxControllers)
/* 3C138 80060D38 90A591D2 */ lbu $a1, %lo(__osMaxControllers)($a1)
/* 3C13C 80060D3C 24020003 */ addiu $v0, $zero, 0x3
/* 3C140 80060D40 A3A30000 */ sb $v1, 0x0($sp)
/* 3C144 80060D44 A3A40001 */ sb $a0, 0x1($sp)
/* 3C148 80060D48 A3A20002 */ sb $v0, 0x2($sp)
/* 3C14C 80060D4C A3A80003 */ sb $t0, 0x3($sp)
/* 3C150 80060D50 A3A30004 */ sb $v1, 0x4($sp)
/* 3C154 80060D54 A3A30005 */ sb $v1, 0x5($sp)
/* 3C158 80060D58 A3A30006 */ sb $v1, 0x6($sp)
/* 3C15C 80060D5C 10A0000F */ beqz $a1, .LIQUE_80060D9C
/* 3C160 80060D60 A3A30007 */ sb $v1, 0x7($sp)
.LIQUE_80060D64:
/* 3C164 80060D64 8BA90000 */ lwl $t1, 0x0($sp)
/* 3C168 80060D68 9BA90003 */ lwr $t1, 0x3($sp)
/* 3C16C 80060D6C 8BAA0004 */ lwl $t2, 0x4($sp)
/* 3C170 80060D70 9BAA0007 */ lwr $t2, 0x7($sp)
/* 3C174 80060D74 A8E90000 */ swl $t1, 0x0($a3)
/* 3C178 80060D78 B8E90003 */ swr $t1, 0x3($a3)
/* 3C17C 80060D7C A8EA0004 */ swl $t2, 0x4($a3)
/* 3C180 80060D80 B8EA0007 */ swr $t2, 0x7($a3)
/* 3C184 80060D84 3C02800A */ lui $v0, %hi(__osMaxControllers)
/* 3C188 80060D88 904291D2 */ lbu $v0, %lo(__osMaxControllers)($v0)
/* 3C18C 80060D8C 24C60001 */ addiu $a2, $a2, 0x1
/* 3C190 80060D90 00C2102A */ slt $v0, $a2, $v0
/* 3C194 80060D94 1440FFF3 */ bnez $v0, .LIQUE_80060D64
/* 3C198 80060D98 24E70008 */ addiu $a3, $a3, 0x8
.LIQUE_80060D9C:
/* 3C19C 80060D9C 240200FE */ addiu $v0, $zero, 0xFE
/* 3C1A0 80060DA0 A0E20000 */ sb $v0, 0x0($a3)
/* 3C1A4 80060DA4 03E00008 */ jr $ra
/* 3C1A8 80060DA8 27BD0008 */ addiu $sp, $sp, 0x8
/* 3C1AC 80060DAC 00000000 */ nop

View File

@ -1,67 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osVirtualToPhysical
/* 3C1B0 80060DB0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3C1B4 80060DB4 AFBF0014 */ sw $ra, 0x14($sp)
/* 3C1B8 80060DB8 AFBE0010 */ sw $fp, 0x10($sp)
/* 3C1BC 80060DBC 03A0F021 */ addu $fp, $sp, $zero
/* 3C1C0 80060DC0 AFC40018 */ sw $a0, 0x18($fp)
/* 3C1C4 80060DC4 8FC20018 */ lw $v0, 0x18($fp)
/* 3C1C8 80060DC8 0441000F */ bgez $v0, .LIQUE_80060E08
/* 3C1CC 80060DCC 00000000 */ nop
/* 3C1D0 80060DD0 8FC20018 */ lw $v0, 0x18($fp)
/* 3C1D4 80060DD4 3C039FFF */ lui $v1, (0x9FFFFFFF >> 16)
/* 3C1D8 80060DD8 3463FFFF */ ori $v1, $v1, (0x9FFFFFFF & 0xFFFF)
/* 3C1DC 80060DDC 0062102B */ sltu $v0, $v1, $v0
/* 3C1E0 80060DE0 14400009 */ bnez $v0, .LIQUE_80060E08
/* 3C1E4 80060DE4 00000000 */ nop
/* 3C1E8 80060DE8 8FC20018 */ lw $v0, 0x18($fp)
/* 3C1EC 80060DEC 3C041FFF */ lui $a0, (0x1FFFFFFF >> 16)
/* 3C1F0 80060DF0 3484FFFF */ ori $a0, $a0, (0x1FFFFFFF & 0xFFFF)
/* 3C1F4 80060DF4 00441824 */ and $v1, $v0, $a0
/* 3C1F8 80060DF8 0801839B */ j .LIQUE_80060E6C
/* 3C1FC 80060DFC 00601021 */ addu $v0, $v1, $zero
/* 3C200 80060E00 0801839B */ j .LIQUE_80060E6C
/* 3C204 80060E04 00000000 */ nop
.LIQUE_80060E08:
/* 3C208 80060E08 8FC20018 */ lw $v0, 0x18($fp)
/* 3C20C 80060E0C 3C039FFF */ lui $v1, (0x9FFFFFFF >> 16)
/* 3C210 80060E10 3463FFFF */ ori $v1, $v1, (0x9FFFFFFF & 0xFFFF)
/* 3C214 80060E14 0062102B */ sltu $v0, $v1, $v0
/* 3C218 80060E18 1040000F */ beqz $v0, .LIQUE_80060E58
/* 3C21C 80060E1C 00000000 */ nop
/* 3C220 80060E20 8FC20018 */ lw $v0, 0x18($fp)
/* 3C224 80060E24 3C03BFFF */ lui $v1, (0xBFFFFFFF >> 16)
/* 3C228 80060E28 3463FFFF */ ori $v1, $v1, (0xBFFFFFFF & 0xFFFF)
/* 3C22C 80060E2C 0062102B */ sltu $v0, $v1, $v0
/* 3C230 80060E30 14400009 */ bnez $v0, .LIQUE_80060E58
/* 3C234 80060E34 00000000 */ nop
/* 3C238 80060E38 8FC20018 */ lw $v0, 0x18($fp)
/* 3C23C 80060E3C 3C041FFF */ lui $a0, (0x1FFFFFFF >> 16)
/* 3C240 80060E40 3484FFFF */ ori $a0, $a0, (0x1FFFFFFF & 0xFFFF)
/* 3C244 80060E44 00441824 */ and $v1, $v0, $a0
/* 3C248 80060E48 0801839B */ j .LIQUE_80060E6C
/* 3C24C 80060E4C 00601021 */ addu $v0, $v1, $zero
/* 3C250 80060E50 0801839B */ j .LIQUE_80060E6C
/* 3C254 80060E54 00000000 */ nop
.LIQUE_80060E58:
/* 3C258 80060E58 0C019388 */ jal __osProbeTLB
/* 3C25C 80060E5C 8FC40018 */ lw $a0, 0x18($fp)
/* 3C260 80060E60 00401821 */ addu $v1, $v0, $zero
/* 3C264 80060E64 0801839B */ j .LIQUE_80060E6C
/* 3C268 80060E68 00601021 */ addu $v0, $v1, $zero
.LIQUE_80060E6C:
/* 3C26C 80060E6C 03C0E821 */ addu $sp, $fp, $zero
/* 3C270 80060E70 8FBF0014 */ lw $ra, 0x14($sp)
/* 3C274 80060E74 8FBE0010 */ lw $fp, 0x10($sp)
/* 3C278 80060E78 03E00008 */ jr $ra
/* 3C27C 80060E7C 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -1,118 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel coss
/* 3C290 80060E90 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3C294 80060E94 24844000 */ addiu $a0, $a0, 0x4000
/* 3C298 80060E98 AFBF0010 */ sw $ra, 0x10($sp)
/* 3C29C 80060E9C 0C0189F0 */ jal sins
/* 3C2A0 80060EA0 3084FFFF */ andi $a0, $a0, 0xFFFF
/* 3C2A4 80060EA4 8FBF0010 */ lw $ra, 0x10($sp)
/* 3C2A8 80060EA8 03E00008 */ jr $ra
/* 3C2AC 80060EAC 27BD0018 */ addiu $sp, $sp, 0x18
glabel guFrustumF
/* 3C2B0 80060EB0 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 3C2B4 80060EB4 F7BC0038 */ sdc1 $f28, 0x38($sp)
/* 3C2B8 80060EB8 4485E000 */ mtc1 $a1, $f28
/* 3C2BC 80060EBC F7B40018 */ sdc1 $f20, 0x18($sp)
/* 3C2C0 80060EC0 4486A000 */ mtc1 $a2, $f20
/* 3C2C4 80060EC4 F7BE0040 */ sdc1 $f30, 0x40($sp)
/* 3C2C8 80060EC8 4487F000 */ mtc1 $a3, $f30
/* 3C2CC 80060ECC F7B60020 */ sdc1 $f22, 0x20($sp)
/* 3C2D0 80060ED0 C7B60058 */ lwc1 $f22, 0x58($sp)
/* 3C2D4 80060ED4 F7B80028 */ sdc1 $f24, 0x28($sp)
/* 3C2D8 80060ED8 C7B8005C */ lwc1 $f24, 0x5C($sp)
/* 3C2DC 80060EDC AFB00010 */ sw $s0, 0x10($sp)
/* 3C2E0 80060EE0 F7BA0030 */ sdc1 $f26, 0x30($sp)
/* 3C2E4 80060EE4 C7BA0060 */ lwc1 $f26, 0x60($sp)
/* 3C2E8 80060EE8 AFBF0014 */ sw $ra, 0x14($sp)
/* 3C2EC 80060EEC 0C019698 */ jal guMtxIdentF
/* 3C2F0 80060EF0 00808021 */ addu $s0, $a0, $zero
/* 3C2F4 80060EF4 3C01C000 */ lui $at, (0xC0000000 >> 16)
/* 3C2F8 80060EF8 44811000 */ mtc1 $at, $f2
/* 3C2FC 80060EFC 4602D082 */ mul.s $f2, $f26, $f2
/* 3C300 80060F00 4618C100 */ add.s $f4, $f24, $f24
/* 3C304 80060F04 461CA201 */ sub.s $f8, $f20, $f28
/* 3C308 80060F08 461EB281 */ sub.s $f10, $f22, $f30
/* 3C30C 80060F0C 461CA500 */ add.s $f20, $f20, $f28
/* 3C310 80060F10 00003021 */ addu $a2, $zero, $zero
/* 3C314 80060F14 3C01BF80 */ lui $at, (0xBF800000 >> 16)
/* 3C318 80060F18 44813000 */ mtc1 $at, $f6
/* 3C31C 80060F1C 461EB580 */ add.s $f22, $f22, $f30
/* 3C320 80060F20 02002821 */ addu $a1, $s0, $zero
/* 3C324 80060F24 AE00003C */ sw $zero, 0x3C($s0)
/* 3C328 80060F28 46181082 */ mul.s $f2, $f2, $f24
/* 3C32C 80060F2C E606002C */ swc1 $f6, 0x2C($s0)
/* 3C330 80060F30 46082003 */ div.s $f0, $f4, $f8
/* 3C334 80060F34 460A2103 */ div.s $f4, $f4, $f10
/* 3C338 80060F38 E6000000 */ swc1 $f0, 0x0($s0)
/* 3C33C 80060F3C 4618D000 */ add.s $f0, $f26, $f24
/* 3C340 80060F40 4608A503 */ div.s $f20, $f20, $f8
/* 3C344 80060F44 460AB583 */ div.s $f22, $f22, $f10
/* 3C348 80060F48 4618D681 */ sub.s $f26, $f26, $f24
/* 3C34C 80060F4C E6040014 */ swc1 $f4, 0x14($s0)
/* 3C350 80060F50 E6140020 */ swc1 $f20, 0x20($s0)
/* 3C354 80060F54 E6160024 */ swc1 $f22, 0x24($s0)
/* 3C358 80060F58 46000007 */ neg.s $f0, $f0
/* 3C35C 80060F5C 461A0003 */ div.s $f0, $f0, $f26
/* 3C360 80060F60 E6000028 */ swc1 $f0, 0x28($s0)
/* 3C364 80060F64 461A1083 */ div.s $f2, $f2, $f26
/* 3C368 80060F68 E6020038 */ swc1 $f2, 0x38($s0)
.LIQUE_80060F6C:
/* 3C36C 80060F6C 00002021 */ addu $a0, $zero, $zero
/* 3C370 80060F70 00A01821 */ addu $v1, $a1, $zero
.LIQUE_80060F74:
/* 3C374 80060F74 C4600000 */ lwc1 $f0, 0x0($v1)
/* 3C378 80060F78 C7AC0064 */ lwc1 $f12, 0x64($sp)
/* 3C37C 80060F7C 460C0002 */ mul.s $f0, $f0, $f12
/* 3C380 80060F80 24840001 */ addiu $a0, $a0, 0x1
/* 3C384 80060F84 28820004 */ slti $v0, $a0, 0x4
/* 3C388 80060F88 E4600000 */ swc1 $f0, 0x0($v1)
/* 3C38C 80060F8C 1440FFF9 */ bnez $v0, .LIQUE_80060F74
/* 3C390 80060F90 24630004 */ addiu $v1, $v1, 0x4
/* 3C394 80060F94 24C60001 */ addiu $a2, $a2, 0x1
/* 3C398 80060F98 28C20004 */ slti $v0, $a2, 0x4
/* 3C39C 80060F9C 1440FFF3 */ bnez $v0, .LIQUE_80060F6C
/* 3C3A0 80060FA0 24A50010 */ addiu $a1, $a1, 0x10
/* 3C3A4 80060FA4 8FBF0014 */ lw $ra, 0x14($sp)
/* 3C3A8 80060FA8 8FB00010 */ lw $s0, 0x10($sp)
/* 3C3AC 80060FAC D7BE0040 */ ldc1 $f30, 0x40($sp)
/* 3C3B0 80060FB0 D7BC0038 */ ldc1 $f28, 0x38($sp)
/* 3C3B4 80060FB4 D7BA0030 */ ldc1 $f26, 0x30($sp)
/* 3C3B8 80060FB8 D7B80028 */ ldc1 $f24, 0x28($sp)
/* 3C3BC 80060FBC D7B60020 */ ldc1 $f22, 0x20($sp)
/* 3C3C0 80060FC0 D7B40018 */ ldc1 $f20, 0x18($sp)
/* 3C3C4 80060FC4 03E00008 */ jr $ra
/* 3C3C8 80060FC8 27BD0048 */ addiu $sp, $sp, 0x48
glabel guFrustum
/* 3C3CC 80060FCC 27BDFF98 */ addiu $sp, $sp, -0x68
/* 3C3D0 80060FD0 AFB00060 */ sw $s0, 0x60($sp)
/* 3C3D4 80060FD4 00808021 */ addu $s0, $a0, $zero
/* 3C3D8 80060FD8 C7A00078 */ lwc1 $f0, 0x78($sp)
/* 3C3DC 80060FDC C7A2007C */ lwc1 $f2, 0x7C($sp)
/* 3C3E0 80060FE0 C7A40080 */ lwc1 $f4, 0x80($sp)
/* 3C3E4 80060FE4 C7A60084 */ lwc1 $f6, 0x84($sp)
/* 3C3E8 80060FE8 27A40020 */ addiu $a0, $sp, 0x20
/* 3C3EC 80060FEC AFBF0064 */ sw $ra, 0x64($sp)
/* 3C3F0 80060FF0 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3C3F4 80060FF4 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3C3F8 80060FF8 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3C3FC 80060FFC 0C0183AC */ jal guFrustumF
/* 3C400 80061000 E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3C404 80061004 27A40020 */ addiu $a0, $sp, 0x20
/* 3C408 80061008 0C0196B0 */ jal guMtxF2L
/* 3C40C 8006100C 02002821 */ addu $a1, $s0, $zero
/* 3C410 80061010 8FBF0064 */ lw $ra, 0x64($sp)
/* 3C414 80061014 8FB00060 */ lw $s0, 0x60($sp)
/* 3C418 80061018 03E00008 */ jr $ra
/* 3C41C 8006101C 27BD0068 */ addiu $sp, $sp, 0x68

View File

@ -1,221 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guLookAtF
/* 3C420 80061020 27BDFFA8 */ addiu $sp, $sp, -0x58
/* 3C424 80061024 F7BA0040 */ sdc1 $f26, 0x40($sp)
/* 3C428 80061028 C7BA007C */ lwc1 $f26, 0x7C($sp)
/* 3C42C 8006102C F7B40028 */ sdc1 $f20, 0x28($sp)
/* 3C430 80061030 C7B40068 */ lwc1 $f20, 0x68($sp)
/* 3C434 80061034 F7B60030 */ sdc1 $f22, 0x30($sp)
/* 3C438 80061038 C7B6006C */ lwc1 $f22, 0x6C($sp)
/* 3C43C 8006103C AFB00020 */ sw $s0, 0x20($sp)
/* 3C440 80061040 00808021 */ addu $s0, $a0, $zero
/* 3C444 80061044 F7B80038 */ sdc1 $f24, 0x38($sp)
/* 3C448 80061048 C7B80070 */ lwc1 $f24, 0x70($sp)
/* 3C44C 8006104C AFBF0024 */ sw $ra, 0x24($sp)
/* 3C450 80061050 F7BE0050 */ sdc1 $f30, 0x50($sp)
/* 3C454 80061054 F7BC0048 */ sdc1 $f28, 0x48($sp)
/* 3C458 80061058 AFA5005C */ sw $a1, 0x5C($sp)
/* 3C45C 8006105C AFA60060 */ sw $a2, 0x60($sp)
/* 3C460 80061060 0C019698 */ jal guMtxIdentF
/* 3C464 80061064 AFA70064 */ sw $a3, 0x64($sp)
/* 3C468 80061068 C7AE005C */ lwc1 $f14, 0x5C($sp)
/* 3C46C 8006106C 460EA781 */ sub.s $f30, $f20, $f14
/* 3C470 80061070 461EF002 */ mul.s $f0, $f30, $f30
/* 3C474 80061074 C7B20060 */ lwc1 $f18, 0x60($sp)
/* 3C478 80061078 4612B581 */ sub.s $f22, $f22, $f18
/* 3C47C 8006107C 4616B102 */ mul.s $f4, $f22, $f22
/* 3C480 80061080 C7AE0064 */ lwc1 $f14, 0x64($sp)
/* 3C484 80061084 460EC701 */ sub.s $f28, $f24, $f14
/* 3C488 80061088 461CE082 */ mul.s $f2, $f28, $f28
/* 3C48C 8006108C 46040000 */ add.s $f0, $f0, $f4
/* 3C490 80061090 46020300 */ add.s $f12, $f0, $f2
/* 3C494 80061094 46006084 */ sqrt.s $f2, $f12
/* 3C498 80061098 46021032 */ c.eq.s $f2, $f2
/* 3C49C 8006109C 45010004 */ bc1t .LIQUE_800610B0
/* 3C4A0 800610A0 E7B60010 */ swc1 $f22, 0x10($sp)
/* 3C4A4 800610A4 0C0183A0 */ jal sqrtf
/* 3C4A8 800610A8 00000000 */ nop
/* 3C4AC 800610AC 46000086 */ mov.s $f2, $f0
.LIQUE_800610B0:
/* 3C4B0 800610B0 3C01BFF0 */ lui $at, (0xBFF00000 >> 16)
/* 3C4B4 800610B4 44810800 */ mtc1 $at, $f1
/* 3C4B8 800610B8 44800000 */ mtc1 $zero, $f0
/* 3C4BC 800610BC 460010A1 */ cvt.d.s $f2, $f2
/* 3C4C0 800610C0 46220003 */ div.d $f0, $f0, $f2
/* 3C4C4 800610C4 46200020 */ cvt.s.d $f0, $f0
/* 3C4C8 800610C8 4600F782 */ mul.s $f30, $f30, $f0
/* 3C4CC 800610CC 4600E702 */ mul.s $f28, $f28, $f0
/* 3C4D0 800610D0 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C4D4 800610D4 46009482 */ mul.s $f18, $f18, $f0
/* 3C4D8 800610D8 C7AE0078 */ lwc1 $f14, 0x78($sp)
/* 3C4DC 800610DC 461C7102 */ mul.s $f4, $f14, $f28
/* 3C4E0 800610E0 4612D082 */ mul.s $f2, $f26, $f18
/* 3C4E4 800610E4 461ED282 */ mul.s $f10, $f26, $f30
/* 3C4E8 800610E8 E7B20010 */ swc1 $f18, 0x10($sp)
/* 3C4EC 800610EC C7B20074 */ lwc1 $f18, 0x74($sp)
/* 3C4F0 800610F0 461C9182 */ mul.s $f6, $f18, $f28
/* 3C4F4 800610F4 C7AE0010 */ lwc1 $f14, 0x10($sp)
/* 3C4F8 800610F8 460E9302 */ mul.s $f12, $f18, $f14
/* 3C4FC 800610FC C7B20078 */ lwc1 $f18, 0x78($sp)
/* 3C500 80061100 461E9202 */ mul.s $f8, $f18, $f30
/* 3C504 80061104 46022601 */ sub.s $f24, $f4, $f2
/* 3C508 80061108 4618C002 */ mul.s $f0, $f24, $f24
/* 3C50C 8006110C 46065501 */ sub.s $f20, $f10, $f6
/* 3C510 80061110 4614A102 */ mul.s $f4, $f20, $f20
/* 3C514 80061114 46086581 */ sub.s $f22, $f12, $f8
/* 3C518 80061118 4616B082 */ mul.s $f2, $f22, $f22
/* 3C51C 8006111C 46040000 */ add.s $f0, $f0, $f4
/* 3C520 80061120 46020300 */ add.s $f12, $f0, $f2
/* 3C524 80061124 46006004 */ sqrt.s $f0, $f12
/* 3C528 80061128 46000032 */ c.eq.s $f0, $f0
/* 3C52C 8006112C 45010003 */ bc1t .LIQUE_8006113C
/* 3C530 80061130 00000000 */ nop
/* 3C534 80061134 0C0183A0 */ jal sqrtf
/* 3C538 80061138 00000000 */ nop
.LIQUE_8006113C:
/* 3C53C 8006113C 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3C540 80061140 44817800 */ mtc1 $at, $f15
/* 3C544 80061144 44807000 */ mtc1 $zero, $f14
/* 3C548 80061148 46000021 */ cvt.d.s $f0, $f0
/* 3C54C 8006114C 46207003 */ div.d $f0, $f14, $f0
/* 3C550 80061150 46200020 */ cvt.s.d $f0, $f0
/* 3C554 80061154 4600C602 */ mul.s $f24, $f24, $f0
/* 3C558 80061158 4600B582 */ mul.s $f22, $f22, $f0
/* 3C55C 8006115C 4600A502 */ mul.s $f20, $f20, $f0
/* 3C560 80061160 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C564 80061164 46169102 */ mul.s $f4, $f18, $f22
/* 3C568 80061168 4614E082 */ mul.s $f2, $f28, $f20
/* 3C56C 8006116C 4618E282 */ mul.s $f10, $f28, $f24
/* 3C570 80061170 4616F182 */ mul.s $f6, $f30, $f22
/* 3C574 80061174 4614F302 */ mul.s $f12, $f30, $f20
/* 3C578 80061178 46189202 */ mul.s $f8, $f18, $f24
/* 3C57C 8006117C 46022101 */ sub.s $f4, $f4, $f2
/* 3C580 80061180 46042002 */ mul.s $f0, $f4, $f4
/* 3C584 80061184 46065281 */ sub.s $f10, $f10, $f6
/* 3C588 80061188 E7A40074 */ swc1 $f4, 0x74($sp)
/* 3C58C 8006118C 460A5102 */ mul.s $f4, $f10, $f10
/* 3C590 80061190 46086681 */ sub.s $f26, $f12, $f8
/* 3C594 80061194 461AD082 */ mul.s $f2, $f26, $f26
/* 3C598 80061198 46040000 */ add.s $f0, $f0, $f4
/* 3C59C 8006119C 46020300 */ add.s $f12, $f0, $f2
/* 3C5A0 800611A0 46006004 */ sqrt.s $f0, $f12
/* 3C5A4 800611A4 46000032 */ c.eq.s $f0, $f0
/* 3C5A8 800611A8 45010003 */ bc1t .LIQUE_800611B8
/* 3C5AC 800611AC E7AA0078 */ swc1 $f10, 0x78($sp)
/* 3C5B0 800611B0 0C0183A0 */ jal sqrtf
/* 3C5B4 800611B4 00000000 */ nop
.LIQUE_800611B8:
/* 3C5B8 800611B8 46000021 */ cvt.d.s $f0, $f0
/* 3C5BC 800611BC 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3C5C0 800611C0 44817800 */ mtc1 $at, $f15
/* 3C5C4 800611C4 44807000 */ mtc1 $zero, $f14
/* 3C5C8 800611C8 C7B20074 */ lwc1 $f18, 0x74($sp)
/* 3C5CC 800611CC 46207003 */ div.d $f0, $f14, $f0
/* 3C5D0 800611D0 46200020 */ cvt.s.d $f0, $f0
/* 3C5D4 800611D4 46009482 */ mul.s $f18, $f18, $f0
/* 3C5D8 800611D8 4600D682 */ mul.s $f26, $f26, $f0
/* 3C5DC 800611DC C7AE0078 */ lwc1 $f14, 0x78($sp)
/* 3C5E0 800611E0 46007382 */ mul.s $f14, $f14, $f0
/* 3C5E4 800611E4 E7B20074 */ swc1 $f18, 0x74($sp)
/* 3C5E8 800611E8 C7B2005C */ lwc1 $f18, 0x5C($sp)
/* 3C5EC 800611EC 46189102 */ mul.s $f4, $f18, $f24
/* 3C5F0 800611F0 E7AE0078 */ swc1 $f14, 0x78($sp)
/* 3C5F4 800611F4 C7AE0060 */ lwc1 $f14, 0x60($sp)
/* 3C5F8 800611F8 46147002 */ mul.s $f0, $f14, $f20
/* 3C5FC 800611FC C7B20064 */ lwc1 $f18, 0x64($sp)
/* 3C600 80061200 46169202 */ mul.s $f8, $f18, $f22
/* 3C604 80061204 C7AE005C */ lwc1 $f14, 0x5C($sp)
/* 3C608 80061208 C7B20074 */ lwc1 $f18, 0x74($sp)
/* 3C60C 8006120C 46127182 */ mul.s $f6, $f14, $f18
/* 3C610 80061210 C7AE0060 */ lwc1 $f14, 0x60($sp)
/* 3C614 80061214 C7B20078 */ lwc1 $f18, 0x78($sp)
/* 3C618 80061218 46127282 */ mul.s $f10, $f14, $f18
/* 3C61C 8006121C C7AE0064 */ lwc1 $f14, 0x64($sp)
/* 3C620 80061220 461A7302 */ mul.s $f12, $f14, $f26
/* 3C624 80061224 C7B2005C */ lwc1 $f18, 0x5C($sp)
/* 3C628 80061228 461E9082 */ mul.s $f2, $f18, $f30
/* 3C62C 8006122C C7AE0060 */ lwc1 $f14, 0x60($sp)
/* 3C630 80061230 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C634 80061234 46127382 */ mul.s $f14, $f14, $f18
/* 3C638 80061238 46002100 */ add.s $f4, $f4, $f0
/* 3C63C 8006123C 460A3180 */ add.s $f6, $f6, $f10
/* 3C640 80061240 46082100 */ add.s $f4, $f4, $f8
/* 3C644 80061244 460C3180 */ add.s $f6, $f6, $f12
/* 3C648 80061248 E7AE0018 */ swc1 $f14, 0x18($sp)
/* 3C64C 8006124C C7AE0064 */ lwc1 $f14, 0x64($sp)
/* 3C650 80061250 461C7402 */ mul.s $f16, $f14, $f28
/* 3C654 80061254 E6180000 */ swc1 $f24, 0x0($s0)
/* 3C658 80061258 E6140010 */ swc1 $f20, 0x10($s0)
/* 3C65C 8006125C E6160020 */ swc1 $f22, 0x20($s0)
/* 3C660 80061260 E61E0008 */ swc1 $f30, 0x8($s0)
/* 3C664 80061264 E6120018 */ swc1 $f18, 0x18($s0)
/* 3C668 80061268 E61C0028 */ swc1 $f28, 0x28($s0)
/* 3C66C 8006126C AE00000C */ sw $zero, 0xC($s0)
/* 3C670 80061270 AE00001C */ sw $zero, 0x1C($s0)
/* 3C674 80061274 AE00002C */ sw $zero, 0x2C($s0)
/* 3C678 80061278 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3C67C 8006127C 3C013F80 */ lui $at, (0x3F800000 >> 16)
/* 3C680 80061280 44810000 */ mtc1 $at, $f0
/* 3C684 80061284 46121080 */ add.s $f2, $f2, $f18
/* 3C688 80061288 E600003C */ swc1 $f0, 0x3C($s0)
/* 3C68C 8006128C C7AE0074 */ lwc1 $f14, 0x74($sp)
/* 3C690 80061290 46002107 */ neg.s $f4, $f4
/* 3C694 80061294 E60E0004 */ swc1 $f14, 0x4($s0)
/* 3C698 80061298 C7B20078 */ lwc1 $f18, 0x78($sp)
/* 3C69C 8006129C 8FBF0024 */ lw $ra, 0x24($sp)
/* 3C6A0 800612A0 D7BE0050 */ ldc1 $f30, 0x50($sp)
/* 3C6A4 800612A4 D7BC0048 */ ldc1 $f28, 0x48($sp)
/* 3C6A8 800612A8 D7B80038 */ ldc1 $f24, 0x38($sp)
/* 3C6AC 800612AC D7B60030 */ ldc1 $f22, 0x30($sp)
/* 3C6B0 800612B0 D7B40028 */ ldc1 $f20, 0x28($sp)
/* 3C6B4 800612B4 46003187 */ neg.s $f6, $f6
/* 3C6B8 800612B8 E6120014 */ swc1 $f18, 0x14($s0)
/* 3C6BC 800612BC E61A0024 */ swc1 $f26, 0x24($s0)
/* 3C6C0 800612C0 D7BA0040 */ ldc1 $f26, 0x40($sp)
/* 3C6C4 800612C4 46101080 */ add.s $f2, $f2, $f16
/* 3C6C8 800612C8 E6040030 */ swc1 $f4, 0x30($s0)
/* 3C6CC 800612CC E6060034 */ swc1 $f6, 0x34($s0)
/* 3C6D0 800612D0 46001087 */ neg.s $f2, $f2
/* 3C6D4 800612D4 E6020038 */ swc1 $f2, 0x38($s0)
/* 3C6D8 800612D8 8FB00020 */ lw $s0, 0x20($sp)
/* 3C6DC 800612DC 03E00008 */ jr $ra
/* 3C6E0 800612E0 27BD0058 */ addiu $sp, $sp, 0x58
glabel guLookAt
/* 3C6E4 800612E4 27BDFF90 */ addiu $sp, $sp, -0x70
/* 3C6E8 800612E8 AFB00068 */ sw $s0, 0x68($sp)
/* 3C6EC 800612EC 00808021 */ addu $s0, $a0, $zero
/* 3C6F0 800612F0 C7A00080 */ lwc1 $f0, 0x80($sp)
/* 3C6F4 800612F4 C7A20084 */ lwc1 $f2, 0x84($sp)
/* 3C6F8 800612F8 C7A40088 */ lwc1 $f4, 0x88($sp)
/* 3C6FC 800612FC C7A6008C */ lwc1 $f6, 0x8C($sp)
/* 3C700 80061300 C7A80090 */ lwc1 $f8, 0x90($sp)
/* 3C704 80061304 C7AA0094 */ lwc1 $f10, 0x94($sp)
/* 3C708 80061308 27A40028 */ addiu $a0, $sp, 0x28
/* 3C70C 8006130C AFBF006C */ sw $ra, 0x6C($sp)
/* 3C710 80061310 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3C714 80061314 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3C718 80061318 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3C71C 8006131C E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3C720 80061320 E7A80020 */ swc1 $f8, 0x20($sp)
/* 3C724 80061324 0C018408 */ jal guLookAtF
/* 3C728 80061328 E7AA0024 */ swc1 $f10, 0x24($sp)
/* 3C72C 8006132C 27A40028 */ addiu $a0, $sp, 0x28
/* 3C730 80061330 0C0196B0 */ jal guMtxF2L
/* 3C734 80061334 02002821 */ addu $a1, $s0, $zero
/* 3C738 80061338 8FBF006C */ lw $ra, 0x6C($sp)
/* 3C73C 8006133C 8FB00068 */ lw $s0, 0x68($sp)
/* 3C740 80061340 03E00008 */ jr $ra
/* 3C744 80061344 27BD0070 */ addiu $sp, $sp, 0x70
/* 3C748 80061348 00000000 */ nop
/* 3C74C 8006134C 00000000 */ nop

View File

@ -1,601 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guLookAtHiliteF
/* 3C750 80061350 27BDFF88 */ addiu $sp, $sp, -0x78
/* 3C754 80061354 F7BC0068 */ sdc1 $f28, 0x68($sp)
/* 3C758 80061358 C7BC00A4 */ lwc1 $f28, 0xA4($sp)
/* 3C75C 8006135C F7B40048 */ sdc1 $f20, 0x48($sp)
/* 3C760 80061360 C7B40090 */ lwc1 $f20, 0x90($sp)
/* 3C764 80061364 F7B60050 */ sdc1 $f22, 0x50($sp)
/* 3C768 80061368 C7B60094 */ lwc1 $f22, 0x94($sp)
/* 3C76C 8006136C F7B80058 */ sdc1 $f24, 0x58($sp)
/* 3C770 80061370 C7B80098 */ lwc1 $f24, 0x98($sp)
/* 3C774 80061374 AFB3003C */ sw $s3, 0x3C($sp)
/* 3C778 80061378 8FB300C0 */ lw $s3, 0xC0($sp)
/* 3C77C 8006137C AFB10034 */ sw $s1, 0x34($sp)
/* 3C780 80061380 00808821 */ addu $s1, $a0, $zero
/* 3C784 80061384 AFB00030 */ sw $s0, 0x30($sp)
/* 3C788 80061388 00A08021 */ addu $s0, $a1, $zero
/* 3C78C 8006138C AFB20038 */ sw $s2, 0x38($sp)
/* 3C790 80061390 00C09021 */ addu $s2, $a2, $zero
/* 3C794 80061394 AFB40040 */ sw $s4, 0x40($sp)
/* 3C798 80061398 8FB400C4 */ lw $s4, 0xC4($sp)
/* 3C79C 8006139C AFBF0044 */ sw $ra, 0x44($sp)
/* 3C7A0 800613A0 F7BE0070 */ sdc1 $f30, 0x70($sp)
/* 3C7A4 800613A4 F7BA0060 */ sdc1 $f26, 0x60($sp)
/* 3C7A8 800613A8 0C019698 */ jal guMtxIdentF
/* 3C7AC 800613AC AFA70084 */ sw $a3, 0x84($sp)
/* 3C7B0 800613B0 C7AE0084 */ lwc1 $f14, 0x84($sp)
/* 3C7B4 800613B4 460EA501 */ sub.s $f20, $f20, $f14
/* 3C7B8 800613B8 4614A002 */ mul.s $f0, $f20, $f20
/* 3C7BC 800613BC C7B20088 */ lwc1 $f18, 0x88($sp)
/* 3C7C0 800613C0 4612B581 */ sub.s $f22, $f22, $f18
/* 3C7C4 800613C4 4616B102 */ mul.s $f4, $f22, $f22
/* 3C7C8 800613C8 C7AE008C */ lwc1 $f14, 0x8C($sp)
/* 3C7CC 800613CC 460EC601 */ sub.s $f24, $f24, $f14
/* 3C7D0 800613D0 4618C082 */ mul.s $f2, $f24, $f24
/* 3C7D4 800613D4 46040000 */ add.s $f0, $f0, $f4
/* 3C7D8 800613D8 E7B40010 */ swc1 $f20, 0x10($sp)
/* 3C7DC 800613DC 46020300 */ add.s $f12, $f0, $f2
/* 3C7E0 800613E0 E7B60014 */ swc1 $f22, 0x14($sp)
/* 3C7E4 800613E4 46006084 */ sqrt.s $f2, $f12
/* 3C7E8 800613E8 46021032 */ c.eq.s $f2, $f2
/* 3C7EC 800613EC 45010004 */ bc1t .LIQUE_80061400
/* 3C7F0 800613F0 E7B80018 */ swc1 $f24, 0x18($sp)
/* 3C7F4 800613F4 0C0183A0 */ jal sqrtf
/* 3C7F8 800613F8 00000000 */ nop
/* 3C7FC 800613FC 46000086 */ mov.s $f2, $f0
.LIQUE_80061400:
/* 3C800 80061400 460010A1 */ cvt.d.s $f2, $f2
/* 3C804 80061404 3C01BFF0 */ lui $at, (0xBFF00000 >> 16)
/* 3C808 80061408 44810800 */ mtc1 $at, $f1
/* 3C80C 8006140C 44800000 */ mtc1 $zero, $f0
/* 3C810 80061410 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C814 80061414 46220003 */ div.d $f0, $f0, $f2
/* 3C818 80061418 46200020 */ cvt.s.d $f0, $f0
/* 3C81C 8006141C 46009482 */ mul.s $f18, $f18, $f0
/* 3C820 80061420 E7B20010 */ swc1 $f18, 0x10($sp)
/* 3C824 80061424 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3C828 80061428 46009482 */ mul.s $f18, $f18, $f0
/* 3C82C 8006142C C7AE0018 */ lwc1 $f14, 0x18($sp)
/* 3C830 80061430 46007382 */ mul.s $f14, $f14, $f0
/* 3C834 80061434 E7B20014 */ swc1 $f18, 0x14($sp)
/* 3C838 80061438 C7B200A0 */ lwc1 $f18, 0xA0($sp)
/* 3C83C 8006143C 460E9102 */ mul.s $f4, $f18, $f14
/* 3C840 80061440 E7AE0018 */ swc1 $f14, 0x18($sp)
/* 3C844 80061444 C7AE0014 */ lwc1 $f14, 0x14($sp)
/* 3C848 80061448 460EE082 */ mul.s $f2, $f28, $f14
/* 3C84C 8006144C C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C850 80061450 4612E282 */ mul.s $f10, $f28, $f18
/* 3C854 80061454 C7AE009C */ lwc1 $f14, 0x9C($sp)
/* 3C858 80061458 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3C85C 8006145C 46127182 */ mul.s $f6, $f14, $f18
/* 3C860 80061460 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3C864 80061464 46127302 */ mul.s $f12, $f14, $f18
/* 3C868 80061468 C7AE00A0 */ lwc1 $f14, 0xA0($sp)
/* 3C86C 8006146C C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C870 80061470 46127202 */ mul.s $f8, $f14, $f18
/* 3C874 80061474 46022101 */ sub.s $f4, $f4, $f2
/* 3C878 80061478 46042002 */ mul.s $f0, $f4, $f4
/* 3C87C 8006147C 46065781 */ sub.s $f30, $f10, $f6
/* 3C880 80061480 E7A4001C */ swc1 $f4, 0x1C($sp)
/* 3C884 80061484 461EF102 */ mul.s $f4, $f30, $f30
/* 3C888 80061488 46086301 */ sub.s $f12, $f12, $f8
/* 3C88C 8006148C 460C6082 */ mul.s $f2, $f12, $f12
/* 3C890 80061490 46040000 */ add.s $f0, $f0, $f4
/* 3C894 80061494 E7AC0020 */ swc1 $f12, 0x20($sp)
/* 3C898 80061498 46020300 */ add.s $f12, $f0, $f2
/* 3C89C 8006149C 46006004 */ sqrt.s $f0, $f12
/* 3C8A0 800614A0 46000032 */ c.eq.s $f0, $f0
/* 3C8A4 800614A4 45030004 */ bc1tl .LIQUE_800614B8
/* 3C8A8 800614A8 46000021 */ cvt.d.s $f0, $f0
/* 3C8AC 800614AC 0C0183A0 */ jal sqrtf
/* 3C8B0 800614B0 00000000 */ nop
/* 3C8B4 800614B4 46000021 */ cvt.d.s $f0, $f0
.LIQUE_800614B8:
/* 3C8B8 800614B8 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3C8BC 800614BC 4481D800 */ mtc1 $at, $f27
/* 3C8C0 800614C0 4480D000 */ mtc1 $zero, $f26
/* 3C8C4 800614C4 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3C8C8 800614C8 4620D003 */ div.d $f0, $f26, $f0
/* 3C8CC 800614CC 46200020 */ cvt.s.d $f0, $f0
/* 3C8D0 800614D0 46007382 */ mul.s $f14, $f14, $f0
/* 3C8D4 800614D4 C7B20020 */ lwc1 $f18, 0x20($sp)
/* 3C8D8 800614D8 46009482 */ mul.s $f18, $f18, $f0
/* 3C8DC 800614DC 4600F782 */ mul.s $f30, $f30, $f0
/* 3C8E0 800614E0 E7AE001C */ swc1 $f14, 0x1C($sp)
/* 3C8E4 800614E4 C7AE0014 */ lwc1 $f14, 0x14($sp)
/* 3C8E8 800614E8 46127102 */ mul.s $f4, $f14, $f18
/* 3C8EC 800614EC E7B20020 */ swc1 $f18, 0x20($sp)
/* 3C8F0 800614F0 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3C8F4 800614F4 461E9082 */ mul.s $f2, $f18, $f30
/* 3C8F8 800614F8 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3C8FC 800614FC 460E9282 */ mul.s $f10, $f18, $f14
/* 3C900 80061500 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3C904 80061504 C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3C908 80061508 460E9182 */ mul.s $f6, $f18, $f14
/* 3C90C 8006150C 461E9302 */ mul.s $f12, $f18, $f30
/* 3C910 80061510 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3C914 80061514 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3C918 80061518 460E9202 */ mul.s $f8, $f18, $f14
/* 3C91C 8006151C 46022101 */ sub.s $f4, $f4, $f2
/* 3C920 80061520 46042002 */ mul.s $f0, $f4, $f4
/* 3C924 80061524 46065281 */ sub.s $f10, $f10, $f6
/* 3C928 80061528 E7A4009C */ swc1 $f4, 0x9C($sp)
/* 3C92C 8006152C 460A5102 */ mul.s $f4, $f10, $f10
/* 3C930 80061530 46086701 */ sub.s $f28, $f12, $f8
/* 3C934 80061534 461CE082 */ mul.s $f2, $f28, $f28
/* 3C938 80061538 46040000 */ add.s $f0, $f0, $f4
/* 3C93C 8006153C 46020300 */ add.s $f12, $f0, $f2
/* 3C940 80061540 46006004 */ sqrt.s $f0, $f12
/* 3C944 80061544 46000032 */ c.eq.s $f0, $f0
/* 3C948 80061548 45010003 */ bc1t .LIQUE_80061558
/* 3C94C 8006154C E7AA00A0 */ swc1 $f10, 0xA0($sp)
/* 3C950 80061550 0C0183A0 */ jal sqrtf
/* 3C954 80061554 00000000 */ nop
.LIQUE_80061558:
/* 3C958 80061558 46000021 */ cvt.d.s $f0, $f0
/* 3C95C 8006155C 4620D003 */ div.d $f0, $f26, $f0
/* 3C960 80061560 46200020 */ cvt.s.d $f0, $f0
/* 3C964 80061564 4600E702 */ mul.s $f28, $f28, $f0
/* 3C968 80061568 C7B2009C */ lwc1 $f18, 0x9C($sp)
/* 3C96C 8006156C 46009482 */ mul.s $f18, $f18, $f0
/* 3C970 80061570 C7AE00A0 */ lwc1 $f14, 0xA0($sp)
/* 3C974 80061574 46007382 */ mul.s $f14, $f14, $f0
/* 3C978 80061578 E7B2009C */ swc1 $f18, 0x9C($sp)
/* 3C97C 8006157C C7B200A8 */ lwc1 $f18, 0xA8($sp)
/* 3C980 80061580 46129002 */ mul.s $f0, $f18, $f18
/* 3C984 80061584 E7AE00A0 */ swc1 $f14, 0xA0($sp)
/* 3C988 80061588 C7AE00AC */ lwc1 $f14, 0xAC($sp)
/* 3C98C 8006158C 460E7082 */ mul.s $f2, $f14, $f14
/* 3C990 80061590 C7B200B0 */ lwc1 $f18, 0xB0($sp)
/* 3C994 80061594 46129102 */ mul.s $f4, $f18, $f18
/* 3C998 80061598 46020000 */ add.s $f0, $f0, $f2
/* 3C99C 8006159C 46040300 */ add.s $f12, $f0, $f4
/* 3C9A0 800615A0 46006004 */ sqrt.s $f0, $f12
/* 3C9A4 800615A4 46000032 */ c.eq.s $f0, $f0
/* 3C9A8 800615A8 45030004 */ bc1tl .LIQUE_800615BC
/* 3C9AC 800615AC 46000021 */ cvt.d.s $f0, $f0
/* 3C9B0 800615B0 0C0183A0 */ jal sqrtf
/* 3C9B4 800615B4 00000000 */ nop
/* 3C9B8 800615B8 46000021 */ cvt.d.s $f0, $f0
.LIQUE_800615BC:
/* 3C9BC 800615BC 4620D003 */ div.d $f0, $f26, $f0
/* 3C9C0 800615C0 C7AE00A8 */ lwc1 $f14, 0xA8($sp)
/* 3C9C4 800615C4 46200020 */ cvt.s.d $f0, $f0
/* 3C9C8 800615C8 46007382 */ mul.s $f14, $f14, $f0
/* 3C9CC 800615CC C7B200AC */ lwc1 $f18, 0xAC($sp)
/* 3C9D0 800615D0 46009482 */ mul.s $f18, $f18, $f0
/* 3C9D4 800615D4 E7AE00A8 */ swc1 $f14, 0xA8($sp)
/* 3C9D8 800615D8 C7AE00B0 */ lwc1 $f14, 0xB0($sp)
/* 3C9DC 800615DC 46007382 */ mul.s $f14, $f14, $f0
/* 3C9E0 800615E0 E7B200AC */ swc1 $f18, 0xAC($sp)
/* 3C9E4 800615E4 C7B200A8 */ lwc1 $f18, 0xA8($sp)
/* 3C9E8 800615E8 E7AE00B0 */ swc1 $f14, 0xB0($sp)
/* 3C9EC 800615EC C7AE0010 */ lwc1 $f14, 0x10($sp)
/* 3C9F0 800615F0 460E9600 */ add.s $f24, $f18, $f14
/* 3C9F4 800615F4 4618C002 */ mul.s $f0, $f24, $f24
/* 3C9F8 800615F8 C7B200AC */ lwc1 $f18, 0xAC($sp)
/* 3C9FC 800615FC C7AE0014 */ lwc1 $f14, 0x14($sp)
/* 3CA00 80061600 460E9580 */ add.s $f22, $f18, $f14
/* 3CA04 80061604 4616B102 */ mul.s $f4, $f22, $f22
/* 3CA08 80061608 C7B200B0 */ lwc1 $f18, 0xB0($sp)
/* 3CA0C 8006160C C7AE0018 */ lwc1 $f14, 0x18($sp)
/* 3CA10 80061610 460E9500 */ add.s $f20, $f18, $f14
/* 3CA14 80061614 4614A082 */ mul.s $f2, $f20, $f20
/* 3CA18 80061618 46040000 */ add.s $f0, $f0, $f4
/* 3CA1C 8006161C 46020300 */ add.s $f12, $f0, $f2
/* 3CA20 80061620 46006084 */ sqrt.s $f2, $f12
/* 3CA24 80061624 46021032 */ c.eq.s $f2, $f2
/* 3CA28 80061628 45010004 */ bc1t .LIQUE_8006163C
/* 3CA2C 8006162C 00000000 */ nop
/* 3CA30 80061630 0C0183A0 */ jal sqrtf
/* 3CA34 80061634 00000000 */ nop
/* 3CA38 80061638 46000086 */ mov.s $f2, $f0
.LIQUE_8006163C:
/* 3CA3C 8006163C 3C01800A */ lui $at, %hi(D_IQUE_80098710)
/* 3CA40 80061640 D4208710 */ ldc1 $f0, %lo(D_IQUE_80098710)($at)
/* 3CA44 80061644 460010A1 */ cvt.d.s $f2, $f2
/* 3CA48 80061648 4622003C */ c.lt.d $f0, $f2
/* 3CA4C 8006164C 45000029 */ bc1f .LIQUE_800616F4
/* 3CA50 80061650 C7B2001C */ lwc1 $f18, 0x1C($sp)
/* 3CA54 80061654 4622D003 */ div.d $f0, $f26, $f2
/* 3CA58 80061658 46200020 */ cvt.s.d $f0, $f0
/* 3CA5C 8006165C 4600C602 */ mul.s $f24, $f24, $f0
/* 3CA60 80061660 4600B582 */ mul.s $f22, $f22, $f0
/* 3CA64 80061664 4600A502 */ mul.s $f20, $f20, $f0
/* 3CA68 80061668 4612C102 */ mul.s $f4, $f24, $f18
/* 3CA6C 8006166C 461EB082 */ mul.s $f2, $f22, $f30
/* 3CA70 80061670 C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3CA74 80061674 460EA182 */ mul.s $f6, $f20, $f14
/* 3CA78 80061678 461CA202 */ mul.s $f8, $f20, $f28
/* 3CA7C 8006167C 46022100 */ add.s $f4, $f4, $f2
/* 3CA80 80061680 C7B2009C */ lwc1 $f18, 0x9C($sp)
/* 3CA84 80061684 4612C082 */ mul.s $f2, $f24, $f18
/* 3CA88 80061688 46062100 */ add.s $f4, $f4, $f6
/* 3CA8C 8006168C C7AE00A0 */ lwc1 $f14, 0xA0($sp)
/* 3CA90 80061690 460EB182 */ mul.s $f6, $f22, $f14
/* 3CA94 80061694 44930000 */ mtc1 $s3, $f0
/* 3CA98 80061698 46800020 */ cvt.s.w $f0, $f0
/* 3CA9C 8006169C 46002102 */ mul.s $f4, $f4, $f0
/* 3CAA0 800616A0 46061080 */ add.s $f2, $f2, $f6
/* 3CAA4 800616A4 46081080 */ add.s $f2, $f2, $f8
/* 3CAA8 800616A8 44940000 */ mtc1 $s4, $f0
/* 3CAAC 800616AC 46800020 */ cvt.s.w $f0, $f0
/* 3CAB0 800616B0 46001082 */ mul.s $f2, $f2, $f0
/* 3CAB4 800616B4 46042100 */ add.s $f4, $f4, $f4
/* 3CAB8 800616B8 00131080 */ sll $v0, $s3, 2
/* 3CABC 800616BC 44823000 */ mtc1 $v0, $f6
/* 3CAC0 800616C0 468031A0 */ cvt.s.w $f6, $f6
/* 3CAC4 800616C4 46043180 */ add.s $f6, $f6, $f4
/* 3CAC8 800616C8 46021080 */ add.s $f2, $f2, $f2
/* 3CACC 800616CC 00141080 */ sll $v0, $s4, 2
/* 3CAD0 800616D0 44820000 */ mtc1 $v0, $f0
/* 3CAD4 800616D4 46800020 */ cvt.s.w $f0, $f0
/* 3CAD8 800616D8 46020000 */ add.s $f0, $f0, $f2
/* 3CADC 800616DC 4600348D */ trunc.w.s $f18, $f6
/* 3CAE0 800616E0 E6520000 */ swc1 $f18, 0x0($s2)
/* 3CAE4 800616E4 4600038D */ trunc.w.s $f14, $f0
/* 3CAE8 800616E8 E64E0004 */ swc1 $f14, 0x4($s2)
/* 3CAEC 800616EC 080185C2 */ j .LIQUE_80061708
/* 3CAF0 800616F0 C7AE00B4 */ lwc1 $f14, 0xB4($sp)
.LIQUE_800616F4:
/* 3CAF4 800616F4 00131040 */ sll $v0, $s3, 1
/* 3CAF8 800616F8 00141840 */ sll $v1, $s4, 1
/* 3CAFC 800616FC AE420000 */ sw $v0, 0x0($s2)
/* 3CB00 80061700 AE430004 */ sw $v1, 0x4($s2)
/* 3CB04 80061704 C7AE00B4 */ lwc1 $f14, 0xB4($sp)
.LIQUE_80061708:
/* 3CB08 80061708 460E7002 */ mul.s $f0, $f14, $f14
/* 3CB0C 8006170C C7B200B8 */ lwc1 $f18, 0xB8($sp)
/* 3CB10 80061710 46129082 */ mul.s $f2, $f18, $f18
/* 3CB14 80061714 C7AE00BC */ lwc1 $f14, 0xBC($sp)
/* 3CB18 80061718 460E7102 */ mul.s $f4, $f14, $f14
/* 3CB1C 8006171C 46020000 */ add.s $f0, $f0, $f2
/* 3CB20 80061720 46040300 */ add.s $f12, $f0, $f4
/* 3CB24 80061724 46006004 */ sqrt.s $f0, $f12
/* 3CB28 80061728 46000032 */ c.eq.s $f0, $f0
/* 3CB2C 8006172C 45030004 */ bc1tl .LIQUE_80061740
/* 3CB30 80061730 46000021 */ cvt.d.s $f0, $f0
/* 3CB34 80061734 0C0183A0 */ jal sqrtf
/* 3CB38 80061738 00000000 */ nop
/* 3CB3C 8006173C 46000021 */ cvt.d.s $f0, $f0
.LIQUE_80061740:
/* 3CB40 80061740 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3CB44 80061744 4481D800 */ mtc1 $at, $f27
/* 3CB48 80061748 4480D000 */ mtc1 $zero, $f26
/* 3CB4C 8006174C C7B200B4 */ lwc1 $f18, 0xB4($sp)
/* 3CB50 80061750 4620D003 */ div.d $f0, $f26, $f0
/* 3CB54 80061754 46200020 */ cvt.s.d $f0, $f0
/* 3CB58 80061758 46009482 */ mul.s $f18, $f18, $f0
/* 3CB5C 8006175C C7AE00B8 */ lwc1 $f14, 0xB8($sp)
/* 3CB60 80061760 46007382 */ mul.s $f14, $f14, $f0
/* 3CB64 80061764 E7B200B4 */ swc1 $f18, 0xB4($sp)
/* 3CB68 80061768 C7B200BC */ lwc1 $f18, 0xBC($sp)
/* 3CB6C 8006176C 46009482 */ mul.s $f18, $f18, $f0
/* 3CB70 80061770 E7AE00B8 */ swc1 $f14, 0xB8($sp)
/* 3CB74 80061774 C7AE00B4 */ lwc1 $f14, 0xB4($sp)
/* 3CB78 80061778 E7B200BC */ swc1 $f18, 0xBC($sp)
/* 3CB7C 8006177C C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3CB80 80061780 46127600 */ add.s $f24, $f14, $f18
/* 3CB84 80061784 4618C002 */ mul.s $f0, $f24, $f24
/* 3CB88 80061788 C7AE00B8 */ lwc1 $f14, 0xB8($sp)
/* 3CB8C 8006178C C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3CB90 80061790 46127580 */ add.s $f22, $f14, $f18
/* 3CB94 80061794 4616B102 */ mul.s $f4, $f22, $f22
/* 3CB98 80061798 C7AE00BC */ lwc1 $f14, 0xBC($sp)
/* 3CB9C 8006179C C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3CBA0 800617A0 46127500 */ add.s $f20, $f14, $f18
/* 3CBA4 800617A4 4614A082 */ mul.s $f2, $f20, $f20
/* 3CBA8 800617A8 46040000 */ add.s $f0, $f0, $f4
/* 3CBAC 800617AC 46020300 */ add.s $f12, $f0, $f2
/* 3CBB0 800617B0 46006084 */ sqrt.s $f2, $f12
/* 3CBB4 800617B4 46021032 */ c.eq.s $f2, $f2
/* 3CBB8 800617B8 45010004 */ bc1t .LIQUE_800617CC
/* 3CBBC 800617BC 00000000 */ nop
/* 3CBC0 800617C0 0C0183A0 */ jal sqrtf
/* 3CBC4 800617C4 00000000 */ nop
/* 3CBC8 800617C8 46000086 */ mov.s $f2, $f0
.LIQUE_800617CC:
/* 3CBCC 800617CC 3C01800A */ lui $at, %hi(D_IQUE_80098718)
/* 3CBD0 800617D0 D4208718 */ ldc1 $f0, %lo(D_IQUE_80098718)($at)
/* 3CBD4 800617D4 460010A1 */ cvt.d.s $f2, $f2
/* 3CBD8 800617D8 4622003C */ c.lt.d $f0, $f2
/* 3CBDC 800617DC 45000028 */ bc1f .LIQUE_80061880
/* 3CBE0 800617E0 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3CBE4 800617E4 4622D003 */ div.d $f0, $f26, $f2
/* 3CBE8 800617E8 46200020 */ cvt.s.d $f0, $f0
/* 3CBEC 800617EC 4600C602 */ mul.s $f24, $f24, $f0
/* 3CBF0 800617F0 4600B582 */ mul.s $f22, $f22, $f0
/* 3CBF4 800617F4 4600A502 */ mul.s $f20, $f20, $f0
/* 3CBF8 800617F8 460EC102 */ mul.s $f4, $f24, $f14
/* 3CBFC 800617FC 461EB082 */ mul.s $f2, $f22, $f30
/* 3CC00 80061800 C7B20020 */ lwc1 $f18, 0x20($sp)
/* 3CC04 80061804 4612A182 */ mul.s $f6, $f20, $f18
/* 3CC08 80061808 461CA202 */ mul.s $f8, $f20, $f28
/* 3CC0C 8006180C 46022100 */ add.s $f4, $f4, $f2
/* 3CC10 80061810 C7AE009C */ lwc1 $f14, 0x9C($sp)
/* 3CC14 80061814 460EC082 */ mul.s $f2, $f24, $f14
/* 3CC18 80061818 46062100 */ add.s $f4, $f4, $f6
/* 3CC1C 8006181C C7B200A0 */ lwc1 $f18, 0xA0($sp)
/* 3CC20 80061820 4612B182 */ mul.s $f6, $f22, $f18
/* 3CC24 80061824 44930000 */ mtc1 $s3, $f0
/* 3CC28 80061828 46800020 */ cvt.s.w $f0, $f0
/* 3CC2C 8006182C 46002102 */ mul.s $f4, $f4, $f0
/* 3CC30 80061830 46061080 */ add.s $f2, $f2, $f6
/* 3CC34 80061834 46081080 */ add.s $f2, $f2, $f8
/* 3CC38 80061838 44940000 */ mtc1 $s4, $f0
/* 3CC3C 8006183C 46800020 */ cvt.s.w $f0, $f0
/* 3CC40 80061840 46001082 */ mul.s $f2, $f2, $f0
/* 3CC44 80061844 46042100 */ add.s $f4, $f4, $f4
/* 3CC48 80061848 00131080 */ sll $v0, $s3, 2
/* 3CC4C 8006184C 44823000 */ mtc1 $v0, $f6
/* 3CC50 80061850 468031A0 */ cvt.s.w $f6, $f6
/* 3CC54 80061854 46043180 */ add.s $f6, $f6, $f4
/* 3CC58 80061858 46021080 */ add.s $f2, $f2, $f2
/* 3CC5C 8006185C 00141080 */ sll $v0, $s4, 2
/* 3CC60 80061860 44820000 */ mtc1 $v0, $f0
/* 3CC64 80061864 46800020 */ cvt.s.w $f0, $f0
/* 3CC68 80061868 46020000 */ add.s $f0, $f0, $f2
/* 3CC6C 8006186C 4600338D */ trunc.w.s $f14, $f6
/* 3CC70 80061870 E64E0008 */ swc1 $f14, 0x8($s2)
/* 3CC74 80061874 4600038D */ trunc.w.s $f14, $f0
/* 3CC78 80061878 08018624 */ j .LIQUE_80061890
/* 3CC7C 8006187C E64E000C */ swc1 $f14, 0xC($s2)
.LIQUE_80061880:
/* 3CC80 80061880 00131040 */ sll $v0, $s3, 1
/* 3CC84 80061884 00141840 */ sll $v1, $s4, 1
/* 3CC88 80061888 AE420008 */ sw $v0, 0x8($s2)
/* 3CC8C 8006188C AE43000C */ sw $v1, 0xC($s2)
.LIQUE_80061890:
/* 3CC90 80061890 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CC94 80061894 44810000 */ mtc1 $at, $f0
/* 3CC98 80061898 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3CC9C 8006189C 46007002 */ mul.s $f0, $f14, $f0
/* 3CCA0 800618A0 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CCA4 800618A4 44811000 */ mtc1 $at, $f2
/* 3CCA8 800618A8 4602003C */ c.lt.s $f0, $f2
/* 3CCAC 800618AC 45000005 */ bc1f .LIQUE_800618C4
/* 3CCB0 800618B0 2402007F */ addiu $v0, $zero, 0x7F
/* 3CCB4 800618B4 4600048D */ trunc.w.s $f18, $f0
/* 3CCB8 800618B8 44029000 */ mfc1 $v0, $f18
/* 3CCBC 800618BC 08018632 */ j .LIQUE_800618C8
/* 3CCC0 800618C0 A2020008 */ sb $v0, 0x8($s0)
.LIQUE_800618C4:
/* 3CCC4 800618C4 A2020008 */ sb $v0, 0x8($s0)
.LIQUE_800618C8:
/* 3CCC8 800618C8 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CCCC 800618CC 44810000 */ mtc1 $at, $f0
/* 3CCD0 800618D0 4600F002 */ mul.s $f0, $f30, $f0
/* 3CCD4 800618D4 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CCD8 800618D8 44811000 */ mtc1 $at, $f2
/* 3CCDC 800618DC 4602003C */ c.lt.s $f0, $f2
/* 3CCE0 800618E0 45000005 */ bc1f .LIQUE_800618F8
/* 3CCE4 800618E4 2402007F */ addiu $v0, $zero, 0x7F
/* 3CCE8 800618E8 4600038D */ trunc.w.s $f14, $f0
/* 3CCEC 800618EC 44027000 */ mfc1 $v0, $f14
/* 3CCF0 800618F0 0801863F */ j .LIQUE_800618FC
/* 3CCF4 800618F4 A2020009 */ sb $v0, 0x9($s0)
.LIQUE_800618F8:
/* 3CCF8 800618F8 A2020009 */ sb $v0, 0x9($s0)
.LIQUE_800618FC:
/* 3CCFC 800618FC 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CD00 80061900 44810000 */ mtc1 $at, $f0
/* 3CD04 80061904 C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3CD08 80061908 46007002 */ mul.s $f0, $f14, $f0
/* 3CD0C 8006190C 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CD10 80061910 44811000 */ mtc1 $at, $f2
/* 3CD14 80061914 4602003C */ c.lt.s $f0, $f2
/* 3CD18 80061918 45000005 */ bc1f .LIQUE_80061930
/* 3CD1C 8006191C 2402007F */ addiu $v0, $zero, 0x7F
/* 3CD20 80061920 4600048D */ trunc.w.s $f18, $f0
/* 3CD24 80061924 44029000 */ mfc1 $v0, $f18
/* 3CD28 80061928 0801864D */ j .LIQUE_80061934
/* 3CD2C 8006192C A202000A */ sb $v0, 0xA($s0)
.LIQUE_80061930:
/* 3CD30 80061930 A202000A */ sb $v0, 0xA($s0)
.LIQUE_80061934:
/* 3CD34 80061934 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CD38 80061938 44810000 */ mtc1 $at, $f0
/* 3CD3C 8006193C C7AE009C */ lwc1 $f14, 0x9C($sp)
/* 3CD40 80061940 46007002 */ mul.s $f0, $f14, $f0
/* 3CD44 80061944 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CD48 80061948 44811000 */ mtc1 $at, $f2
/* 3CD4C 8006194C 4602003C */ c.lt.s $f0, $f2
/* 3CD50 80061950 45000005 */ bc1f .LIQUE_80061968
/* 3CD54 80061954 2402007F */ addiu $v0, $zero, 0x7F
/* 3CD58 80061958 4600048D */ trunc.w.s $f18, $f0
/* 3CD5C 8006195C 44029000 */ mfc1 $v0, $f18
/* 3CD60 80061960 0801865B */ j .LIQUE_8006196C
/* 3CD64 80061964 A2020018 */ sb $v0, 0x18($s0)
.LIQUE_80061968:
/* 3CD68 80061968 A2020018 */ sb $v0, 0x18($s0)
.LIQUE_8006196C:
/* 3CD6C 8006196C 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CD70 80061970 44810000 */ mtc1 $at, $f0
/* 3CD74 80061974 C7AE00A0 */ lwc1 $f14, 0xA0($sp)
/* 3CD78 80061978 46007002 */ mul.s $f0, $f14, $f0
/* 3CD7C 8006197C 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CD80 80061980 44811000 */ mtc1 $at, $f2
/* 3CD84 80061984 4602003C */ c.lt.s $f0, $f2
/* 3CD88 80061988 45000005 */ bc1f .LIQUE_800619A0
/* 3CD8C 8006198C 2402007F */ addiu $v0, $zero, 0x7F
/* 3CD90 80061990 4600048D */ trunc.w.s $f18, $f0
/* 3CD94 80061994 44029000 */ mfc1 $v0, $f18
/* 3CD98 80061998 08018669 */ j .LIQUE_800619A4
/* 3CD9C 8006199C A2020019 */ sb $v0, 0x19($s0)
.LIQUE_800619A0:
/* 3CDA0 800619A0 A2020019 */ sb $v0, 0x19($s0)
.LIQUE_800619A4:
/* 3CDA4 800619A4 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3CDA8 800619A8 44810000 */ mtc1 $at, $f0
/* 3CDAC 800619AC 4600E002 */ mul.s $f0, $f28, $f0
/* 3CDB0 800619B0 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3CDB4 800619B4 44811000 */ mtc1 $at, $f2
/* 3CDB8 800619B8 4602003C */ c.lt.s $f0, $f2
/* 3CDBC 800619BC 45000005 */ bc1f .LIQUE_800619D4
/* 3CDC0 800619C0 2402007F */ addiu $v0, $zero, 0x7F
/* 3CDC4 800619C4 4600038D */ trunc.w.s $f14, $f0
/* 3CDC8 800619C8 44027000 */ mfc1 $v0, $f14
/* 3CDCC 800619CC 08018676 */ j .LIQUE_800619D8
/* 3CDD0 800619D0 A202001A */ sb $v0, 0x1A($s0)
.LIQUE_800619D4:
/* 3CDD4 800619D4 A202001A */ sb $v0, 0x1A($s0)
.LIQUE_800619D8:
/* 3CDD8 800619D8 C7AE0084 */ lwc1 $f14, 0x84($sp)
/* 3CDDC 800619DC C7B2001C */ lwc1 $f18, 0x1C($sp)
/* 3CDE0 800619E0 46127182 */ mul.s $f6, $f14, $f18
/* 3CDE4 800619E4 C7AE0088 */ lwc1 $f14, 0x88($sp)
/* 3CDE8 800619E8 461E7002 */ mul.s $f0, $f14, $f30
/* 3CDEC 800619EC C7B2008C */ lwc1 $f18, 0x8C($sp)
/* 3CDF0 800619F0 C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3CDF4 800619F4 460E9302 */ mul.s $f12, $f18, $f14
/* 3CDF8 800619F8 C7B20084 */ lwc1 $f18, 0x84($sp)
/* 3CDFC 800619FC C7AE009C */ lwc1 $f14, 0x9C($sp)
/* 3CE00 80061A00 460E9102 */ mul.s $f4, $f18, $f14
/* 3CE04 80061A04 C7B20088 */ lwc1 $f18, 0x88($sp)
/* 3CE08 80061A08 C7AE00A0 */ lwc1 $f14, 0xA0($sp)
/* 3CE0C 80061A0C A2000000 */ sb $zero, 0x0($s0)
/* 3CE10 80061A10 460E9402 */ mul.s $f16, $f18, $f14
/* 3CE14 80061A14 A2000001 */ sb $zero, 0x1($s0)
/* 3CE18 80061A18 A2000002 */ sb $zero, 0x2($s0)
/* 3CE1C 80061A1C C7B2008C */ lwc1 $f18, 0x8C($sp)
/* 3CE20 80061A20 461C9482 */ mul.s $f18, $f18, $f28
/* 3CE24 80061A24 46003180 */ add.s $f6, $f6, $f0
/* 3CE28 80061A28 E7B20028 */ swc1 $f18, 0x28($sp)
/* 3CE2C 80061A2C A2000003 */ sb $zero, 0x3($s0)
/* 3CE30 80061A30 A2000004 */ sb $zero, 0x4($s0)
/* 3CE34 80061A34 A2000005 */ sb $zero, 0x5($s0)
/* 3CE38 80061A38 A2000006 */ sb $zero, 0x6($s0)
/* 3CE3C 80061A3C C7AE0084 */ lwc1 $f14, 0x84($sp)
/* 3CE40 80061A40 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3CE44 80061A44 24020080 */ addiu $v0, $zero, 0x80
/* 3CE48 80061A48 46127082 */ mul.s $f2, $f14, $f18
/* 3CE4C 80061A4C A2000007 */ sb $zero, 0x7($s0)
/* 3CE50 80061A50 A2000010 */ sb $zero, 0x10($s0)
/* 3CE54 80061A54 A2020011 */ sb $v0, 0x11($s0)
/* 3CE58 80061A58 C7AE0088 */ lwc1 $f14, 0x88($sp)
/* 3CE5C 80061A5C C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3CE60 80061A60 46127282 */ mul.s $f10, $f14, $f18
/* 3CE64 80061A64 A2000012 */ sb $zero, 0x12($s0)
/* 3CE68 80061A68 A2000013 */ sb $zero, 0x13($s0)
/* 3CE6C 80061A6C A2000014 */ sb $zero, 0x14($s0)
/* 3CE70 80061A70 A2020015 */ sb $v0, 0x15($s0)
/* 3CE74 80061A74 C7AE008C */ lwc1 $f14, 0x8C($sp)
/* 3CE78 80061A78 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3CE7C 80061A7C 3C013F80 */ lui $at, (0x3F800000 >> 16)
/* 3CE80 80061A80 44810000 */ mtc1 $at, $f0
/* 3CE84 80061A84 46127202 */ mul.s $f8, $f14, $f18
/* 3CE88 80061A88 A2000016 */ sb $zero, 0x16($s0)
/* 3CE8C 80061A8C A2000017 */ sb $zero, 0x17($s0)
/* 3CE90 80061A90 C7AE001C */ lwc1 $f14, 0x1C($sp)
/* 3CE94 80061A94 8FBF0044 */ lw $ra, 0x44($sp)
/* 3CE98 80061A98 8FB40040 */ lw $s4, 0x40($sp)
/* 3CE9C 80061A9C 8FB3003C */ lw $s3, 0x3C($sp)
/* 3CEA0 80061AA0 8FB20038 */ lw $s2, 0x38($sp)
/* 3CEA4 80061AA4 8FB00030 */ lw $s0, 0x30($sp)
/* 3CEA8 80061AA8 D7BA0060 */ ldc1 $f26, 0x60($sp)
/* 3CEAC 80061AAC D7B80058 */ ldc1 $f24, 0x58($sp)
/* 3CEB0 80061AB0 D7B60050 */ ldc1 $f22, 0x50($sp)
/* 3CEB4 80061AB4 D7B40048 */ ldc1 $f20, 0x48($sp)
/* 3CEB8 80061AB8 E62E0000 */ swc1 $f14, 0x0($s1)
/* 3CEBC 80061ABC E63E0010 */ swc1 $f30, 0x10($s1)
/* 3CEC0 80061AC0 C7B20020 */ lwc1 $f18, 0x20($sp)
/* 3CEC4 80061AC4 460C3180 */ add.s $f6, $f6, $f12
/* 3CEC8 80061AC8 E6320020 */ swc1 $f18, 0x20($s1)
/* 3CECC 80061ACC C7AE009C */ lwc1 $f14, 0x9C($sp)
/* 3CED0 80061AD0 46102100 */ add.s $f4, $f4, $f16
/* 3CED4 80061AD4 E62E0004 */ swc1 $f14, 0x4($s1)
/* 3CED8 80061AD8 C7B200A0 */ lwc1 $f18, 0xA0($sp)
/* 3CEDC 80061ADC 46003187 */ neg.s $f6, $f6
/* 3CEE0 80061AE0 E6320014 */ swc1 $f18, 0x14($s1)
/* 3CEE4 80061AE4 E63C0024 */ swc1 $f28, 0x24($s1)
/* 3CEE8 80061AE8 C7AE0010 */ lwc1 $f14, 0x10($sp)
/* 3CEEC 80061AEC 460A1080 */ add.s $f2, $f2, $f10
/* 3CEF0 80061AF0 E62E0008 */ swc1 $f14, 0x8($s1)
/* 3CEF4 80061AF4 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3CEF8 80061AF8 46081080 */ add.s $f2, $f2, $f8
/* 3CEFC 80061AFC E6320018 */ swc1 $f18, 0x18($s1)
/* 3CF00 80061B00 C7AE0028 */ lwc1 $f14, 0x28($sp)
/* 3CF04 80061B04 D7BE0070 */ ldc1 $f30, 0x70($sp)
/* 3CF08 80061B08 460E2100 */ add.s $f4, $f4, $f14
/* 3CF0C 80061B0C D7BC0068 */ ldc1 $f28, 0x68($sp)
/* 3CF10 80061B10 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3CF14 80061B14 46001087 */ neg.s $f2, $f2
/* 3CF18 80061B18 E6320028 */ swc1 $f18, 0x28($s1)
/* 3CF1C 80061B1C AE20000C */ sw $zero, 0xC($s1)
/* 3CF20 80061B20 AE20001C */ sw $zero, 0x1C($s1)
/* 3CF24 80061B24 AE20002C */ sw $zero, 0x2C($s1)
/* 3CF28 80061B28 E620003C */ swc1 $f0, 0x3C($s1)
/* 3CF2C 80061B2C E6260030 */ swc1 $f6, 0x30($s1)
/* 3CF30 80061B30 E6220038 */ swc1 $f2, 0x38($s1)
/* 3CF34 80061B34 46002107 */ neg.s $f4, $f4
/* 3CF38 80061B38 E6240034 */ swc1 $f4, 0x34($s1)
/* 3CF3C 80061B3C 8FB10034 */ lw $s1, 0x34($sp)
/* 3CF40 80061B40 03E00008 */ jr $ra
/* 3CF44 80061B44 27BD0078 */ addiu $sp, $sp, 0x78
glabel guLookAtHilite
/* 3CF48 80061B48 27BDFF48 */ addiu $sp, $sp, -0xB8
/* 3CF4C 80061B4C C7A000C8 */ lwc1 $f0, 0xC8($sp)
/* 3CF50 80061B50 C7A200CC */ lwc1 $f2, 0xCC($sp)
/* 3CF54 80061B54 C7A400D0 */ lwc1 $f4, 0xD0($sp)
/* 3CF58 80061B58 C7A600D4 */ lwc1 $f6, 0xD4($sp)
/* 3CF5C 80061B5C C7A800D8 */ lwc1 $f8, 0xD8($sp)
/* 3CF60 80061B60 C7AA00DC */ lwc1 $f10, 0xDC($sp)
/* 3CF64 80061B64 C7AC00E0 */ lwc1 $f12, 0xE0($sp)
/* 3CF68 80061B68 C7AE00E4 */ lwc1 $f14, 0xE4($sp)
/* 3CF6C 80061B6C C7B000E8 */ lwc1 $f16, 0xE8($sp)
/* 3CF70 80061B70 C7B200EC */ lwc1 $f18, 0xEC($sp)
/* 3CF74 80061B74 F7B40098 */ sdc1 $f20, 0x98($sp)
/* 3CF78 80061B78 C7B400F0 */ lwc1 $f20, 0xF0($sp)
/* 3CF7C 80061B7C F7B600A0 */ sdc1 $f22, 0xA0($sp)
/* 3CF80 80061B80 C7B600F4 */ lwc1 $f22, 0xF4($sp)
/* 3CF84 80061B84 F7B800A8 */ sdc1 $f24, 0xA8($sp)
/* 3CF88 80061B88 C7B800F8 */ lwc1 $f24, 0xF8($sp)
/* 3CF8C 80061B8C AFB00090 */ sw $s0, 0x90($sp)
/* 3CF90 80061B90 00808021 */ addu $s0, $a0, $zero
/* 3CF94 80061B94 F7BA00B0 */ sdc1 $f26, 0xB0($sp)
/* 3CF98 80061B98 C7BA00FC */ lwc1 $f26, 0xFC($sp)
/* 3CF9C 80061B9C 8FA20100 */ lw $v0, 0x100($sp)
/* 3CFA0 80061BA0 8FA30104 */ lw $v1, 0x104($sp)
/* 3CFA4 80061BA4 27A40050 */ addiu $a0, $sp, 0x50
/* 3CFA8 80061BA8 AFBF0094 */ sw $ra, 0x94($sp)
/* 3CFAC 80061BAC E7A00010 */ swc1 $f0, 0x10($sp)
/* 3CFB0 80061BB0 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3CFB4 80061BB4 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3CFB8 80061BB8 E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3CFBC 80061BBC E7A80020 */ swc1 $f8, 0x20($sp)
/* 3CFC0 80061BC0 E7AA0024 */ swc1 $f10, 0x24($sp)
/* 3CFC4 80061BC4 E7AC0028 */ swc1 $f12, 0x28($sp)
/* 3CFC8 80061BC8 E7AE002C */ swc1 $f14, 0x2C($sp)
/* 3CFCC 80061BCC E7B00030 */ swc1 $f16, 0x30($sp)
/* 3CFD0 80061BD0 E7B20034 */ swc1 $f18, 0x34($sp)
/* 3CFD4 80061BD4 E7B40038 */ swc1 $f20, 0x38($sp)
/* 3CFD8 80061BD8 E7B6003C */ swc1 $f22, 0x3C($sp)
/* 3CFDC 80061BDC E7B80040 */ swc1 $f24, 0x40($sp)
/* 3CFE0 80061BE0 E7BA0044 */ swc1 $f26, 0x44($sp)
/* 3CFE4 80061BE4 AFA20048 */ sw $v0, 0x48($sp)
/* 3CFE8 80061BE8 0C0184D4 */ jal guLookAtHiliteF
/* 3CFEC 80061BEC AFA3004C */ sw $v1, 0x4C($sp)
/* 3CFF0 80061BF0 27A40050 */ addiu $a0, $sp, 0x50
/* 3CFF4 80061BF4 0C0196B0 */ jal guMtxF2L
/* 3CFF8 80061BF8 02002821 */ addu $a1, $s0, $zero
/* 3CFFC 80061BFC 8FBF0094 */ lw $ra, 0x94($sp)
/* 3D000 80061C00 8FB00090 */ lw $s0, 0x90($sp)
/* 3D004 80061C04 D7BA00B0 */ ldc1 $f26, 0xB0($sp)
/* 3D008 80061C08 D7B800A8 */ ldc1 $f24, 0xA8($sp)
/* 3D00C 80061C0C D7B600A0 */ ldc1 $f22, 0xA0($sp)
/* 3D010 80061C10 D7B40098 */ ldc1 $f20, 0x98($sp)
/* 3D014 80061C14 03E00008 */ jr $ra
/* 3D018 80061C18 27BD00B8 */ addiu $sp, $sp, 0xB8
/* 3D01C 80061C1C 00000000 */ nop

View File

@ -1,337 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guLookAtReflectF
/* 3D020 80061C20 27BDFF98 */ addiu $sp, $sp, -0x68
/* 3D024 80061C24 F7BC0058 */ sdc1 $f28, 0x58($sp)
/* 3D028 80061C28 C7BC0088 */ lwc1 $f28, 0x88($sp)
/* 3D02C 80061C2C F7BE0060 */ sdc1 $f30, 0x60($sp)
/* 3D030 80061C30 C7BE008C */ lwc1 $f30, 0x8C($sp)
/* 3D034 80061C34 F7BA0050 */ sdc1 $f26, 0x50($sp)
/* 3D038 80061C38 C7BA0090 */ lwc1 $f26, 0x90($sp)
/* 3D03C 80061C3C F7B40038 */ sdc1 $f20, 0x38($sp)
/* 3D040 80061C40 C7B4007C */ lwc1 $f20, 0x7C($sp)
/* 3D044 80061C44 F7B60040 */ sdc1 $f22, 0x40($sp)
/* 3D048 80061C48 C7B60080 */ lwc1 $f22, 0x80($sp)
/* 3D04C 80061C4C AFB1002C */ sw $s1, 0x2C($sp)
/* 3D050 80061C50 00808821 */ addu $s1, $a0, $zero
/* 3D054 80061C54 AFB00028 */ sw $s0, 0x28($sp)
/* 3D058 80061C58 00A08021 */ addu $s0, $a1, $zero
/* 3D05C 80061C5C F7B80048 */ sdc1 $f24, 0x48($sp)
/* 3D060 80061C60 C7B80084 */ lwc1 $f24, 0x84($sp)
/* 3D064 80061C64 AFBF0030 */ sw $ra, 0x30($sp)
/* 3D068 80061C68 AFA60070 */ sw $a2, 0x70($sp)
/* 3D06C 80061C6C 0C019698 */ jal guMtxIdentF
/* 3D070 80061C70 AFA70074 */ sw $a3, 0x74($sp)
/* 3D074 80061C74 C7AE0070 */ lwc1 $f14, 0x70($sp)
/* 3D078 80061C78 460EA501 */ sub.s $f20, $f20, $f14
/* 3D07C 80061C7C 4614A002 */ mul.s $f0, $f20, $f20
/* 3D080 80061C80 C7B20074 */ lwc1 $f18, 0x74($sp)
/* 3D084 80061C84 4612B581 */ sub.s $f22, $f22, $f18
/* 3D088 80061C88 4616B102 */ mul.s $f4, $f22, $f22
/* 3D08C 80061C8C C7AE0078 */ lwc1 $f14, 0x78($sp)
/* 3D090 80061C90 460EC601 */ sub.s $f24, $f24, $f14
/* 3D094 80061C94 4618C082 */ mul.s $f2, $f24, $f24
/* 3D098 80061C98 46040000 */ add.s $f0, $f0, $f4
/* 3D09C 80061C9C E7B40010 */ swc1 $f20, 0x10($sp)
/* 3D0A0 80061CA0 46020300 */ add.s $f12, $f0, $f2
/* 3D0A4 80061CA4 E7B60014 */ swc1 $f22, 0x14($sp)
/* 3D0A8 80061CA8 46006084 */ sqrt.s $f2, $f12
/* 3D0AC 80061CAC 46021032 */ c.eq.s $f2, $f2
/* 3D0B0 80061CB0 45010004 */ bc1t .LIQUE_80061CC4
/* 3D0B4 80061CB4 E7B80018 */ swc1 $f24, 0x18($sp)
/* 3D0B8 80061CB8 0C0183A0 */ jal sqrtf
/* 3D0BC 80061CBC 00000000 */ nop
/* 3D0C0 80061CC0 46000086 */ mov.s $f2, $f0
.LIQUE_80061CC4:
/* 3D0C4 80061CC4 460010A1 */ cvt.d.s $f2, $f2
/* 3D0C8 80061CC8 3C01BFF0 */ lui $at, (0xBFF00000 >> 16)
/* 3D0CC 80061CCC 44810800 */ mtc1 $at, $f1
/* 3D0D0 80061CD0 44800000 */ mtc1 $zero, $f0
/* 3D0D4 80061CD4 C7AE0018 */ lwc1 $f14, 0x18($sp)
/* 3D0D8 80061CD8 46220003 */ div.d $f0, $f0, $f2
/* 3D0DC 80061CDC 46200020 */ cvt.s.d $f0, $f0
/* 3D0E0 80061CE0 46007382 */ mul.s $f14, $f14, $f0
/* 3D0E4 80061CE4 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3D0E8 80061CE8 46009482 */ mul.s $f18, $f18, $f0
/* 3D0EC 80061CEC 460EF102 */ mul.s $f4, $f30, $f14
/* 3D0F0 80061CF0 E7B20010 */ swc1 $f18, 0x10($sp)
/* 3D0F4 80061CF4 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3D0F8 80061CF8 46009482 */ mul.s $f18, $f18, $f0
/* 3D0FC 80061CFC E7AE0018 */ swc1 $f14, 0x18($sp)
/* 3D100 80061D00 C7AE0010 */ lwc1 $f14, 0x10($sp)
/* 3D104 80061D04 460ED282 */ mul.s $f10, $f26, $f14
/* 3D108 80061D08 4612D082 */ mul.s $f2, $f26, $f18
/* 3D10C 80061D0C E7B20014 */ swc1 $f18, 0x14($sp)
/* 3D110 80061D10 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3D114 80061D14 4612E182 */ mul.s $f6, $f28, $f18
/* 3D118 80061D18 C7AE0014 */ lwc1 $f14, 0x14($sp)
/* 3D11C 80061D1C 460EE302 */ mul.s $f12, $f28, $f14
/* 3D120 80061D20 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3D124 80061D24 4612F202 */ mul.s $f8, $f30, $f18
/* 3D128 80061D28 46022601 */ sub.s $f24, $f4, $f2
/* 3D12C 80061D2C 4618C002 */ mul.s $f0, $f24, $f24
/* 3D130 80061D30 46065501 */ sub.s $f20, $f10, $f6
/* 3D134 80061D34 4614A102 */ mul.s $f4, $f20, $f20
/* 3D138 80061D38 46086581 */ sub.s $f22, $f12, $f8
/* 3D13C 80061D3C 4616B082 */ mul.s $f2, $f22, $f22
/* 3D140 80061D40 46040000 */ add.s $f0, $f0, $f4
/* 3D144 80061D44 46020300 */ add.s $f12, $f0, $f2
/* 3D148 80061D48 46006004 */ sqrt.s $f0, $f12
/* 3D14C 80061D4C 46000032 */ c.eq.s $f0, $f0
/* 3D150 80061D50 45010003 */ bc1t .LIQUE_80061D60
/* 3D154 80061D54 00000000 */ nop
/* 3D158 80061D58 0C0183A0 */ jal sqrtf
/* 3D15C 80061D5C 00000000 */ nop
.LIQUE_80061D60:
/* 3D160 80061D60 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3D164 80061D64 44817800 */ mtc1 $at, $f15
/* 3D168 80061D68 44807000 */ mtc1 $zero, $f14
/* 3D16C 80061D6C 46000021 */ cvt.d.s $f0, $f0
/* 3D170 80061D70 46207003 */ div.d $f0, $f14, $f0
/* 3D174 80061D74 46200020 */ cvt.s.d $f0, $f0
/* 3D178 80061D78 4600C602 */ mul.s $f24, $f24, $f0
/* 3D17C 80061D7C 4600B582 */ mul.s $f22, $f22, $f0
/* 3D180 80061D80 4600A502 */ mul.s $f20, $f20, $f0
/* 3D184 80061D84 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3D188 80061D88 46169102 */ mul.s $f4, $f18, $f22
/* 3D18C 80061D8C C7AE0018 */ lwc1 $f14, 0x18($sp)
/* 3D190 80061D90 46147082 */ mul.s $f2, $f14, $f20
/* 3D194 80061D94 46187282 */ mul.s $f10, $f14, $f24
/* 3D198 80061D98 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3D19C 80061D9C 46169182 */ mul.s $f6, $f18, $f22
/* 3D1A0 80061DA0 46149302 */ mul.s $f12, $f18, $f20
/* 3D1A4 80061DA4 C7AE0014 */ lwc1 $f14, 0x14($sp)
/* 3D1A8 80061DA8 46187202 */ mul.s $f8, $f14, $f24
/* 3D1AC 80061DAC 46022701 */ sub.s $f28, $f4, $f2
/* 3D1B0 80061DB0 461CE002 */ mul.s $f0, $f28, $f28
/* 3D1B4 80061DB4 46065781 */ sub.s $f30, $f10, $f6
/* 3D1B8 80061DB8 461EF102 */ mul.s $f4, $f30, $f30
/* 3D1BC 80061DBC 46086681 */ sub.s $f26, $f12, $f8
/* 3D1C0 80061DC0 461AD082 */ mul.s $f2, $f26, $f26
/* 3D1C4 80061DC4 46040000 */ add.s $f0, $f0, $f4
/* 3D1C8 80061DC8 46020300 */ add.s $f12, $f0, $f2
/* 3D1CC 80061DCC 46006004 */ sqrt.s $f0, $f12
/* 3D1D0 80061DD0 46000032 */ c.eq.s $f0, $f0
/* 3D1D4 80061DD4 45010003 */ bc1t .LIQUE_80061DE4
/* 3D1D8 80061DD8 00000000 */ nop
/* 3D1DC 80061DDC 0C0183A0 */ jal sqrtf
/* 3D1E0 80061DE0 00000000 */ nop
.LIQUE_80061DE4:
/* 3D1E4 80061DE4 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 3D1E8 80061DE8 44819800 */ mtc1 $at, $f19
/* 3D1EC 80061DEC 44809000 */ mtc1 $zero, $f18
/* 3D1F0 80061DF0 46000021 */ cvt.d.s $f0, $f0
/* 3D1F4 80061DF4 46209003 */ div.d $f0, $f18, $f0
/* 3D1F8 80061DF8 46200020 */ cvt.s.d $f0, $f0
/* 3D1FC 80061DFC 4600E702 */ mul.s $f28, $f28, $f0
/* 3D200 80061E00 4600F782 */ mul.s $f30, $f30, $f0
/* 3D204 80061E04 4600D682 */ mul.s $f26, $f26, $f0
/* 3D208 80061E08 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D20C 80061E0C 44810000 */ mtc1 $at, $f0
/* 3D210 80061E10 4600C002 */ mul.s $f0, $f24, $f0
/* 3D214 80061E14 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D218 80061E18 44811000 */ mtc1 $at, $f2
/* 3D21C 80061E1C 4602003C */ c.lt.s $f0, $f2
/* 3D220 80061E20 45000005 */ bc1f .LIQUE_80061E38
/* 3D224 80061E24 2402007F */ addiu $v0, $zero, 0x7F
/* 3D228 80061E28 4600038D */ trunc.w.s $f14, $f0
/* 3D22C 80061E2C 44027000 */ mfc1 $v0, $f14
/* 3D230 80061E30 0801878F */ j .LIQUE_80061E3C
/* 3D234 80061E34 A2020008 */ sb $v0, 0x8($s0)
.LIQUE_80061E38:
/* 3D238 80061E38 A2020008 */ sb $v0, 0x8($s0)
.LIQUE_80061E3C:
/* 3D23C 80061E3C 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D240 80061E40 44810000 */ mtc1 $at, $f0
/* 3D244 80061E44 4600A002 */ mul.s $f0, $f20, $f0
/* 3D248 80061E48 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D24C 80061E4C 44811000 */ mtc1 $at, $f2
/* 3D250 80061E50 4602003C */ c.lt.s $f0, $f2
/* 3D254 80061E54 45000005 */ bc1f .LIQUE_80061E6C
/* 3D258 80061E58 2402007F */ addiu $v0, $zero, 0x7F
/* 3D25C 80061E5C 4600038D */ trunc.w.s $f14, $f0
/* 3D260 80061E60 44027000 */ mfc1 $v0, $f14
/* 3D264 80061E64 0801879C */ j .LIQUE_80061E70
/* 3D268 80061E68 A2020009 */ sb $v0, 0x9($s0)
.LIQUE_80061E6C:
/* 3D26C 80061E6C A2020009 */ sb $v0, 0x9($s0)
.LIQUE_80061E70:
/* 3D270 80061E70 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D274 80061E74 44810000 */ mtc1 $at, $f0
/* 3D278 80061E78 4600B002 */ mul.s $f0, $f22, $f0
/* 3D27C 80061E7C 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D280 80061E80 44811000 */ mtc1 $at, $f2
/* 3D284 80061E84 4602003C */ c.lt.s $f0, $f2
/* 3D288 80061E88 45000005 */ bc1f .LIQUE_80061EA0
/* 3D28C 80061E8C 2402007F */ addiu $v0, $zero, 0x7F
/* 3D290 80061E90 4600038D */ trunc.w.s $f14, $f0
/* 3D294 80061E94 44027000 */ mfc1 $v0, $f14
/* 3D298 80061E98 080187A9 */ j .LIQUE_80061EA4
/* 3D29C 80061E9C A202000A */ sb $v0, 0xA($s0)
.LIQUE_80061EA0:
/* 3D2A0 80061EA0 A202000A */ sb $v0, 0xA($s0)
.LIQUE_80061EA4:
/* 3D2A4 80061EA4 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D2A8 80061EA8 44810000 */ mtc1 $at, $f0
/* 3D2AC 80061EAC 4600E002 */ mul.s $f0, $f28, $f0
/* 3D2B0 80061EB0 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D2B4 80061EB4 44811000 */ mtc1 $at, $f2
/* 3D2B8 80061EB8 4602003C */ c.lt.s $f0, $f2
/* 3D2BC 80061EBC 45000005 */ bc1f .LIQUE_80061ED4
/* 3D2C0 80061EC0 2402007F */ addiu $v0, $zero, 0x7F
/* 3D2C4 80061EC4 4600038D */ trunc.w.s $f14, $f0
/* 3D2C8 80061EC8 44027000 */ mfc1 $v0, $f14
/* 3D2CC 80061ECC 080187B6 */ j .LIQUE_80061ED8
/* 3D2D0 80061ED0 A2020018 */ sb $v0, 0x18($s0)
.LIQUE_80061ED4:
/* 3D2D4 80061ED4 A2020018 */ sb $v0, 0x18($s0)
.LIQUE_80061ED8:
/* 3D2D8 80061ED8 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D2DC 80061EDC 44810000 */ mtc1 $at, $f0
/* 3D2E0 80061EE0 4600F002 */ mul.s $f0, $f30, $f0
/* 3D2E4 80061EE4 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D2E8 80061EE8 44811000 */ mtc1 $at, $f2
/* 3D2EC 80061EEC 4602003C */ c.lt.s $f0, $f2
/* 3D2F0 80061EF0 45000005 */ bc1f .LIQUE_80061F08
/* 3D2F4 80061EF4 2402007F */ addiu $v0, $zero, 0x7F
/* 3D2F8 80061EF8 4600038D */ trunc.w.s $f14, $f0
/* 3D2FC 80061EFC 44027000 */ mfc1 $v0, $f14
/* 3D300 80061F00 080187C3 */ j .LIQUE_80061F0C
/* 3D304 80061F04 A2020019 */ sb $v0, 0x19($s0)
.LIQUE_80061F08:
/* 3D308 80061F08 A2020019 */ sb $v0, 0x19($s0)
.LIQUE_80061F0C:
/* 3D30C 80061F0C 3C014300 */ lui $at, (0x43000000 >> 16)
/* 3D310 80061F10 44810000 */ mtc1 $at, $f0
/* 3D314 80061F14 4600D002 */ mul.s $f0, $f26, $f0
/* 3D318 80061F18 3C0142FE */ lui $at, (0x42FE0000 >> 16)
/* 3D31C 80061F1C 44811000 */ mtc1 $at, $f2
/* 3D320 80061F20 4602003C */ c.lt.s $f0, $f2
/* 3D324 80061F24 45000005 */ bc1f .LIQUE_80061F3C
/* 3D328 80061F28 2402007F */ addiu $v0, $zero, 0x7F
/* 3D32C 80061F2C 4600038D */ trunc.w.s $f14, $f0
/* 3D330 80061F30 44027000 */ mfc1 $v0, $f14
/* 3D334 80061F34 080187D0 */ j .LIQUE_80061F40
/* 3D338 80061F38 A202001A */ sb $v0, 0x1A($s0)
.LIQUE_80061F3C:
/* 3D33C 80061F3C A202001A */ sb $v0, 0x1A($s0)
.LIQUE_80061F40:
/* 3D340 80061F40 C7AE0070 */ lwc1 $f14, 0x70($sp)
/* 3D344 80061F44 46187182 */ mul.s $f6, $f14, $f24
/* 3D348 80061F48 C7B20074 */ lwc1 $f18, 0x74($sp)
/* 3D34C 80061F4C 46149002 */ mul.s $f0, $f18, $f20
/* 3D350 80061F50 C7AE0078 */ lwc1 $f14, 0x78($sp)
/* 3D354 80061F54 46167302 */ mul.s $f12, $f14, $f22
/* 3D358 80061F58 C7B20070 */ lwc1 $f18, 0x70($sp)
/* 3D35C 80061F5C 461C9102 */ mul.s $f4, $f18, $f28
/* 3D360 80061F60 C7AE0074 */ lwc1 $f14, 0x74($sp)
/* 3D364 80061F64 A2000000 */ sb $zero, 0x0($s0)
/* 3D368 80061F68 461E7402 */ mul.s $f16, $f14, $f30
/* 3D36C 80061F6C A2000001 */ sb $zero, 0x1($s0)
/* 3D370 80061F70 A2000002 */ sb $zero, 0x2($s0)
/* 3D374 80061F74 C7B20078 */ lwc1 $f18, 0x78($sp)
/* 3D378 80061F78 461A9482 */ mul.s $f18, $f18, $f26
/* 3D37C 80061F7C 46003180 */ add.s $f6, $f6, $f0
/* 3D380 80061F80 460C3180 */ add.s $f6, $f6, $f12
/* 3D384 80061F84 E7B20020 */ swc1 $f18, 0x20($sp)
/* 3D388 80061F88 A2000003 */ sb $zero, 0x3($s0)
/* 3D38C 80061F8C A2000004 */ sb $zero, 0x4($s0)
/* 3D390 80061F90 A2000005 */ sb $zero, 0x5($s0)
/* 3D394 80061F94 A2000006 */ sb $zero, 0x6($s0)
/* 3D398 80061F98 C7AE0070 */ lwc1 $f14, 0x70($sp)
/* 3D39C 80061F9C C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3D3A0 80061FA0 24020080 */ addiu $v0, $zero, 0x80
/* 3D3A4 80061FA4 46127082 */ mul.s $f2, $f14, $f18
/* 3D3A8 80061FA8 A2000007 */ sb $zero, 0x7($s0)
/* 3D3AC 80061FAC A2000010 */ sb $zero, 0x10($s0)
/* 3D3B0 80061FB0 A2020011 */ sb $v0, 0x11($s0)
/* 3D3B4 80061FB4 C7AE0074 */ lwc1 $f14, 0x74($sp)
/* 3D3B8 80061FB8 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3D3BC 80061FBC 46127282 */ mul.s $f10, $f14, $f18
/* 3D3C0 80061FC0 A2000012 */ sb $zero, 0x12($s0)
/* 3D3C4 80061FC4 A2000013 */ sb $zero, 0x13($s0)
/* 3D3C8 80061FC8 A2000014 */ sb $zero, 0x14($s0)
/* 3D3CC 80061FCC A2020015 */ sb $v0, 0x15($s0)
/* 3D3D0 80061FD0 C7AE0078 */ lwc1 $f14, 0x78($sp)
/* 3D3D4 80061FD4 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3D3D8 80061FD8 3C013F80 */ lui $at, (0x3F800000 >> 16)
/* 3D3DC 80061FDC 44810000 */ mtc1 $at, $f0
/* 3D3E0 80061FE0 46127202 */ mul.s $f8, $f14, $f18
/* 3D3E4 80061FE4 A2000016 */ sb $zero, 0x16($s0)
/* 3D3E8 80061FE8 A2000017 */ sb $zero, 0x17($s0)
/* 3D3EC 80061FEC E6380000 */ swc1 $f24, 0x0($s1)
/* 3D3F0 80061FF0 E6340010 */ swc1 $f20, 0x10($s1)
/* 3D3F4 80061FF4 E6360020 */ swc1 $f22, 0x20($s1)
/* 3D3F8 80061FF8 E63C0004 */ swc1 $f28, 0x4($s1)
/* 3D3FC 80061FFC E63E0014 */ swc1 $f30, 0x14($s1)
/* 3D400 80062000 E63A0024 */ swc1 $f26, 0x24($s1)
/* 3D404 80062004 C7AE0010 */ lwc1 $f14, 0x10($sp)
/* 3D408 80062008 8FBF0030 */ lw $ra, 0x30($sp)
/* 3D40C 8006200C 8FB00028 */ lw $s0, 0x28($sp)
/* 3D410 80062010 D7BE0060 */ ldc1 $f30, 0x60($sp)
/* 3D414 80062014 D7BC0058 */ ldc1 $f28, 0x58($sp)
/* 3D418 80062018 D7BA0050 */ ldc1 $f26, 0x50($sp)
/* 3D41C 8006201C D7B80048 */ ldc1 $f24, 0x48($sp)
/* 3D420 80062020 46102100 */ add.s $f4, $f4, $f16
/* 3D424 80062024 E62E0008 */ swc1 $f14, 0x8($s1)
/* 3D428 80062028 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3D42C 8006202C 46003187 */ neg.s $f6, $f6
/* 3D430 80062030 E6320018 */ swc1 $f18, 0x18($s1)
/* 3D434 80062034 C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3D438 80062038 D7B60040 */ ldc1 $f22, 0x40($sp)
/* 3D43C 8006203C 460E2100 */ add.s $f4, $f4, $f14
/* 3D440 80062040 D7B40038 */ ldc1 $f20, 0x38($sp)
/* 3D444 80062044 C7B20018 */ lwc1 $f18, 0x18($sp)
/* 3D448 80062048 460A1080 */ add.s $f2, $f2, $f10
/* 3D44C 8006204C E6320028 */ swc1 $f18, 0x28($s1)
/* 3D450 80062050 AE20000C */ sw $zero, 0xC($s1)
/* 3D454 80062054 AE20001C */ sw $zero, 0x1C($s1)
/* 3D458 80062058 AE20002C */ sw $zero, 0x2C($s1)
/* 3D45C 8006205C 46081080 */ add.s $f2, $f2, $f8
/* 3D460 80062060 E620003C */ swc1 $f0, 0x3C($s1)
/* 3D464 80062064 E6260030 */ swc1 $f6, 0x30($s1)
/* 3D468 80062068 46002107 */ neg.s $f4, $f4
/* 3D46C 8006206C E6240034 */ swc1 $f4, 0x34($s1)
/* 3D470 80062070 46001087 */ neg.s $f2, $f2
/* 3D474 80062074 E6220038 */ swc1 $f2, 0x38($s1)
/* 3D478 80062078 8FB1002C */ lw $s1, 0x2C($sp)
/* 3D47C 8006207C 03E00008 */ jr $ra
/* 3D480 80062080 27BD0068 */ addiu $sp, $sp, 0x68
glabel guLookAtReflect
/* 3D484 80062084 27BDFF88 */ addiu $sp, $sp, -0x78
/* 3D488 80062088 AFB00070 */ sw $s0, 0x70($sp)
/* 3D48C 8006208C 00808021 */ addu $s0, $a0, $zero
/* 3D490 80062090 C7A00088 */ lwc1 $f0, 0x88($sp)
/* 3D494 80062094 C7A2008C */ lwc1 $f2, 0x8C($sp)
/* 3D498 80062098 C7A40090 */ lwc1 $f4, 0x90($sp)
/* 3D49C 8006209C C7A60094 */ lwc1 $f6, 0x94($sp)
/* 3D4A0 800620A0 C7A80098 */ lwc1 $f8, 0x98($sp)
/* 3D4A4 800620A4 C7AA009C */ lwc1 $f10, 0x9C($sp)
/* 3D4A8 800620A8 C7AC00A0 */ lwc1 $f12, 0xA0($sp)
/* 3D4AC 800620AC 27A40030 */ addiu $a0, $sp, 0x30
/* 3D4B0 800620B0 AFBF0074 */ sw $ra, 0x74($sp)
/* 3D4B4 800620B4 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3D4B8 800620B8 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3D4BC 800620BC E7A40018 */ swc1 $f4, 0x18($sp)
/* 3D4C0 800620C0 E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3D4C4 800620C4 E7A80020 */ swc1 $f8, 0x20($sp)
/* 3D4C8 800620C8 E7AA0024 */ swc1 $f10, 0x24($sp)
/* 3D4CC 800620CC 0C018708 */ jal guLookAtReflectF
/* 3D4D0 800620D0 E7AC0028 */ swc1 $f12, 0x28($sp)
/* 3D4D4 800620D4 27A40030 */ addiu $a0, $sp, 0x30
/* 3D4D8 800620D8 0C0196B0 */ jal guMtxF2L
/* 3D4DC 800620DC 02002821 */ addu $a1, $s0, $zero
/* 3D4E0 800620E0 8FBF0074 */ lw $ra, 0x74($sp)
/* 3D4E4 800620E4 8FB00070 */ lw $s0, 0x70($sp)
/* 3D4E8 800620E8 03E00008 */ jr $ra
/* 3D4EC 800620EC 27BD0078 */ addiu $sp, $sp, 0x78

View File

@ -1,108 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guOrthoF
/* 3D4F0 800620F0 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 3D4F4 800620F4 F7BA0030 */ sdc1 $f26, 0x30($sp)
/* 3D4F8 800620F8 4485D000 */ mtc1 $a1, $f26
/* 3D4FC 800620FC F7B40018 */ sdc1 $f20, 0x18($sp)
/* 3D500 80062100 4486A000 */ mtc1 $a2, $f20
/* 3D504 80062104 F7BC0038 */ sdc1 $f28, 0x38($sp)
/* 3D508 80062108 4487E000 */ mtc1 $a3, $f28
/* 3D50C 8006210C F7B60020 */ sdc1 $f22, 0x20($sp)
/* 3D510 80062110 C7B60058 */ lwc1 $f22, 0x58($sp)
/* 3D514 80062114 F7BE0040 */ sdc1 $f30, 0x40($sp)
/* 3D518 80062118 C7BE005C */ lwc1 $f30, 0x5C($sp)
/* 3D51C 8006211C AFB00010 */ sw $s0, 0x10($sp)
/* 3D520 80062120 F7B80028 */ sdc1 $f24, 0x28($sp)
/* 3D524 80062124 C7B80060 */ lwc1 $f24, 0x60($sp)
/* 3D528 80062128 AFBF0014 */ sw $ra, 0x14($sp)
/* 3D52C 8006212C 0C019698 */ jal guMtxIdentF
/* 3D530 80062130 00808021 */ addu $s0, $a0, $zero
/* 3D534 80062134 461AA101 */ sub.s $f4, $f20, $f26
/* 3D538 80062138 461CB201 */ sub.s $f8, $f22, $f28
/* 3D53C 8006213C 461EC181 */ sub.s $f6, $f24, $f30
/* 3D540 80062140 461AA500 */ add.s $f20, $f20, $f26
/* 3D544 80062144 00003021 */ addu $a2, $zero, $zero
/* 3D548 80062148 02002821 */ addu $a1, $s0, $zero
/* 3D54C 8006214C 461CB580 */ add.s $f22, $f22, $f28
/* 3D550 80062150 3C013F80 */ lui $at, (0x3F800000 >> 16)
/* 3D554 80062154 44810000 */ mtc1 $at, $f0
/* 3D558 80062158 3C014000 */ lui $at, (0x40000000 >> 16)
/* 3D55C 8006215C 44811000 */ mtc1 $at, $f2
/* 3D560 80062160 461EC600 */ add.s $f24, $f24, $f30
/* 3D564 80062164 E600003C */ swc1 $f0, 0x3C($s0)
/* 3D568 80062168 46041003 */ div.s $f0, $f2, $f4
/* 3D56C 8006216C 46081083 */ div.s $f2, $f2, $f8
/* 3D570 80062170 4600A507 */ neg.s $f20, $f20
/* 3D574 80062174 4604A503 */ div.s $f20, $f20, $f4
/* 3D578 80062178 4600B587 */ neg.s $f22, $f22
/* 3D57C 8006217C 4608B583 */ div.s $f22, $f22, $f8
/* 3D580 80062180 4600C607 */ neg.s $f24, $f24
/* 3D584 80062184 E6000000 */ swc1 $f0, 0x0($s0)
/* 3D588 80062188 3C01C000 */ lui $at, (0xC0000000 >> 16)
/* 3D58C 8006218C 44810000 */ mtc1 $at, $f0
/* 3D590 80062190 4606C603 */ div.s $f24, $f24, $f6
/* 3D594 80062194 E6020014 */ swc1 $f2, 0x14($s0)
/* 3D598 80062198 E6140030 */ swc1 $f20, 0x30($s0)
/* 3D59C 8006219C E6160034 */ swc1 $f22, 0x34($s0)
/* 3D5A0 800621A0 E6180038 */ swc1 $f24, 0x38($s0)
/* 3D5A4 800621A4 46060003 */ div.s $f0, $f0, $f6
/* 3D5A8 800621A8 E6000028 */ swc1 $f0, 0x28($s0)
.LIQUE_800621AC:
/* 3D5AC 800621AC 00002021 */ addu $a0, $zero, $zero
/* 3D5B0 800621B0 00A01821 */ addu $v1, $a1, $zero
.LIQUE_800621B4:
/* 3D5B4 800621B4 C4600000 */ lwc1 $f0, 0x0($v1)
/* 3D5B8 800621B8 C7AA0064 */ lwc1 $f10, 0x64($sp)
/* 3D5BC 800621BC 460A0002 */ mul.s $f0, $f0, $f10
/* 3D5C0 800621C0 24840001 */ addiu $a0, $a0, 0x1
/* 3D5C4 800621C4 28820004 */ slti $v0, $a0, 0x4
/* 3D5C8 800621C8 E4600000 */ swc1 $f0, 0x0($v1)
/* 3D5CC 800621CC 1440FFF9 */ bnez $v0, .LIQUE_800621B4
/* 3D5D0 800621D0 24630004 */ addiu $v1, $v1, 0x4
/* 3D5D4 800621D4 24C60001 */ addiu $a2, $a2, 0x1
/* 3D5D8 800621D8 28C20004 */ slti $v0, $a2, 0x4
/* 3D5DC 800621DC 1440FFF3 */ bnez $v0, .LIQUE_800621AC
/* 3D5E0 800621E0 24A50010 */ addiu $a1, $a1, 0x10
/* 3D5E4 800621E4 8FBF0014 */ lw $ra, 0x14($sp)
/* 3D5E8 800621E8 8FB00010 */ lw $s0, 0x10($sp)
/* 3D5EC 800621EC D7BE0040 */ ldc1 $f30, 0x40($sp)
/* 3D5F0 800621F0 D7BC0038 */ ldc1 $f28, 0x38($sp)
/* 3D5F4 800621F4 D7BA0030 */ ldc1 $f26, 0x30($sp)
/* 3D5F8 800621F8 D7B80028 */ ldc1 $f24, 0x28($sp)
/* 3D5FC 800621FC D7B60020 */ ldc1 $f22, 0x20($sp)
/* 3D600 80062200 D7B40018 */ ldc1 $f20, 0x18($sp)
/* 3D604 80062204 03E00008 */ jr $ra
/* 3D608 80062208 27BD0048 */ addiu $sp, $sp, 0x48
glabel guOrtho
/* 3D60C 8006220C 27BDFF98 */ addiu $sp, $sp, -0x68
/* 3D610 80062210 AFB00060 */ sw $s0, 0x60($sp)
/* 3D614 80062214 00808021 */ addu $s0, $a0, $zero
/* 3D618 80062218 C7A00078 */ lwc1 $f0, 0x78($sp)
/* 3D61C 8006221C C7A2007C */ lwc1 $f2, 0x7C($sp)
/* 3D620 80062220 C7A40080 */ lwc1 $f4, 0x80($sp)
/* 3D624 80062224 C7A60084 */ lwc1 $f6, 0x84($sp)
/* 3D628 80062228 27A40020 */ addiu $a0, $sp, 0x20
/* 3D62C 8006222C AFBF0064 */ sw $ra, 0x64($sp)
/* 3D630 80062230 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3D634 80062234 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3D638 80062238 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3D63C 8006223C 0C01883C */ jal guOrthoF
/* 3D640 80062240 E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3D644 80062244 27A40020 */ addiu $a0, $sp, 0x20
/* 3D648 80062248 0C0196B0 */ jal guMtxF2L
/* 3D64C 8006224C 02002821 */ addu $a1, $s0, $zero
/* 3D650 80062250 8FBF0064 */ lw $ra, 0x64($sp)
/* 3D654 80062254 8FB00060 */ lw $s0, 0x60($sp)
/* 3D658 80062258 03E00008 */ jr $ra
/* 3D65C 8006225C 27BD0068 */ addiu $sp, $sp, 0x68

View File

@ -1,148 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guPerspectiveF
/* 3D660 80062260 27BDFFB0 */ addiu $sp, $sp, -0x50
/* 3D664 80062264 F7B80030 */ sdc1 $f24, 0x30($sp)
/* 3D668 80062268 4486C000 */ mtc1 $a2, $f24
/* 3D66C 8006226C F7BA0038 */ sdc1 $f26, 0x38($sp)
/* 3D670 80062270 4487D000 */ mtc1 $a3, $f26
/* 3D674 80062274 F7B60028 */ sdc1 $f22, 0x28($sp)
/* 3D678 80062278 C7B60060 */ lwc1 $f22, 0x60($sp)
/* 3D67C 8006227C F7BC0040 */ sdc1 $f28, 0x40($sp)
/* 3D680 80062280 C7BC0064 */ lwc1 $f28, 0x64($sp)
/* 3D684 80062284 AFB00010 */ sw $s0, 0x10($sp)
/* 3D688 80062288 00808021 */ addu $s0, $a0, $zero
/* 3D68C 8006228C AFB10014 */ sw $s1, 0x14($sp)
/* 3D690 80062290 F7BE0048 */ sdc1 $f30, 0x48($sp)
/* 3D694 80062294 C7BE0068 */ lwc1 $f30, 0x68($sp)
/* 3D698 80062298 AFBF0018 */ sw $ra, 0x18($sp)
/* 3D69C 8006229C F7B40020 */ sdc1 $f20, 0x20($sp)
/* 3D6A0 800622A0 0C019698 */ jal guMtxIdentF
/* 3D6A4 800622A4 00A08821 */ addu $s1, $a1, $zero
/* 3D6A8 800622A8 3C01800A */ lui $at, %hi(D_IQUE_80098720)
/* 3D6AC 800622AC D4228720 */ ldc1 $f2, %lo(D_IQUE_80098720)($at)
/* 3D6B0 800622B0 4600C021 */ cvt.d.s $f0, $f24
/* 3D6B4 800622B4 46220002 */ mul.d $f0, $f0, $f2
/* 3D6B8 800622B8 3C013F00 */ lui $at, (0x3F000000 >> 16)
/* 3D6BC 800622BC 4481A000 */ mtc1 $at, $f20
/* 3D6C0 800622C0 46200620 */ cvt.s.d $f24, $f0
/* 3D6C4 800622C4 4614C502 */ mul.s $f20, $f24, $f20
/* 3D6C8 800622C8 0C00A7A8 */ jal cos_rad
/* 3D6CC 800622CC 4600A306 */ mov.s $f12, $f20
/* 3D6D0 800622D0 4600A306 */ mov.s $f12, $f20
/* 3D6D4 800622D4 0C00A78F */ jal sin_rad
/* 3D6D8 800622D8 46000606 */ mov.s $f24, $f0
/* 3D6DC 800622DC 00003021 */ addu $a2, $zero, $zero
/* 3D6E0 800622E0 461CB180 */ add.s $f6, $f22, $f28
/* 3D6E4 800622E4 02002821 */ addu $a1, $s0, $zero
/* 3D6E8 800622E8 4600C603 */ div.s $f24, $f24, $f0
/* 3D6EC 800622EC 461CB101 */ sub.s $f4, $f22, $f28
/* 3D6F0 800622F0 461AC683 */ div.s $f26, $f24, $f26
/* 3D6F4 800622F4 3C01BF80 */ lui $at, (0xBF800000 >> 16)
/* 3D6F8 800622F8 44811000 */ mtc1 $at, $f2
/* 3D6FC 800622FC 4616B580 */ add.s $f22, $f22, $f22
/* 3D700 80062300 E61A0000 */ swc1 $f26, 0x0($s0)
/* 3D704 80062304 E6180014 */ swc1 $f24, 0x14($s0)
/* 3D708 80062308 461CB582 */ mul.s $f22, $f22, $f28
/* 3D70C 8006230C AE00003C */ sw $zero, 0x3C($s0)
/* 3D710 80062310 E602002C */ swc1 $f2, 0x2C($s0)
/* 3D714 80062314 46043003 */ div.s $f0, $f6, $f4
/* 3D718 80062318 E6000028 */ swc1 $f0, 0x28($s0)
/* 3D71C 8006231C 4604B583 */ div.s $f22, $f22, $f4
/* 3D720 80062320 E6160038 */ swc1 $f22, 0x38($s0)
.LIQUE_80062324:
/* 3D724 80062324 00002021 */ addu $a0, $zero, $zero
/* 3D728 80062328 00A01821 */ addu $v1, $a1, $zero
.LIQUE_8006232C:
/* 3D72C 8006232C C4600000 */ lwc1 $f0, 0x0($v1)
/* 3D730 80062330 461E0002 */ mul.s $f0, $f0, $f30
/* 3D734 80062334 24840001 */ addiu $a0, $a0, 0x1
/* 3D738 80062338 28820004 */ slti $v0, $a0, 0x4
/* 3D73C 8006233C E4600000 */ swc1 $f0, 0x0($v1)
/* 3D740 80062340 1440FFFA */ bnez $v0, .LIQUE_8006232C
/* 3D744 80062344 24630004 */ addiu $v1, $v1, 0x4
/* 3D748 80062348 24C60001 */ addiu $a2, $a2, 0x1
/* 3D74C 8006234C 28C20004 */ slti $v0, $a2, 0x4
/* 3D750 80062350 1440FFF4 */ bnez $v0, .LIQUE_80062324
/* 3D754 80062354 24A50010 */ addiu $a1, $a1, 0x10
/* 3D758 80062358 12200021 */ beqz $s1, .LIQUE_800623E0
/* 3D75C 8006235C 8FBF0018 */ lw $ra, 0x18($sp)
/* 3D760 80062360 3C014000 */ lui $at, (0x40000000 >> 16)
/* 3D764 80062364 44810800 */ mtc1 $at, $f1
/* 3D768 80062368 44800000 */ mtc1 $zero, $f0
/* 3D76C 8006236C 460030A1 */ cvt.d.s $f2, $f6
/* 3D770 80062370 4620103E */ c.le.d $f2, $f0
/* 3D774 80062374 45010018 */ bc1t .LIQUE_800623D8
/* 3D778 80062378 3402FFFF */ ori $v0, $zero, 0xFFFF
/* 3D77C 8006237C 3C014100 */ lui $at, (0x41000000 >> 16)
/* 3D780 80062380 44810800 */ mtc1 $at, $f1
/* 3D784 80062384 44800000 */ mtc1 $zero, $f0
/* 3D788 80062388 3C0141E0 */ lui $at, (0x41E00000 >> 16)
/* 3D78C 8006238C 44812800 */ mtc1 $at, $f5
/* 3D790 80062390 44802000 */ mtc1 $zero, $f4
/* 3D794 80062394 46220003 */ div.d $f0, $f0, $f2
/* 3D798 80062398 4620203E */ c.le.d $f4, $f0
/* 3D79C 8006239C 45030005 */ bc1tl .LIQUE_800623B4
/* 3D7A0 800623A0 46240001 */ sub.d $f0, $f0, $f4
/* 3D7A4 800623A4 4620020D */ trunc.w.d $f8, $f0
/* 3D7A8 800623A8 44034000 */ mfc1 $v1, $f8
/* 3D7AC 800623AC 080188F2 */ j .LIQUE_800623C8
/* 3D7B0 800623B0 A6230000 */ sh $v1, 0x0($s1)
.LIQUE_800623B4:
/* 3D7B4 800623B4 3C028000 */ lui $v0, (0x80000000 >> 16)
/* 3D7B8 800623B8 4620020D */ trunc.w.d $f8, $f0
/* 3D7BC 800623BC 44034000 */ mfc1 $v1, $f8
/* 3D7C0 800623C0 00621825 */ or $v1, $v1, $v0
/* 3D7C4 800623C4 A6230000 */ sh $v1, 0x0($s1)
.LIQUE_800623C8:
/* 3D7C8 800623C8 3062FFFF */ andi $v0, $v1, 0xFFFF
/* 3D7CC 800623CC 14400004 */ bnez $v0, .LIQUE_800623E0
/* 3D7D0 800623D0 8FBF0018 */ lw $ra, 0x18($sp)
/* 3D7D4 800623D4 24020001 */ addiu $v0, $zero, 0x1
.LIQUE_800623D8:
/* 3D7D8 800623D8 A6220000 */ sh $v0, 0x0($s1)
/* 3D7DC 800623DC 8FBF0018 */ lw $ra, 0x18($sp)
.LIQUE_800623E0:
/* 3D7E0 800623E0 8FB10014 */ lw $s1, 0x14($sp)
/* 3D7E4 800623E4 8FB00010 */ lw $s0, 0x10($sp)
/* 3D7E8 800623E8 D7BE0048 */ ldc1 $f30, 0x48($sp)
/* 3D7EC 800623EC D7BC0040 */ ldc1 $f28, 0x40($sp)
/* 3D7F0 800623F0 D7BA0038 */ ldc1 $f26, 0x38($sp)
/* 3D7F4 800623F4 D7B80030 */ ldc1 $f24, 0x30($sp)
/* 3D7F8 800623F8 D7B60028 */ ldc1 $f22, 0x28($sp)
/* 3D7FC 800623FC D7B40020 */ ldc1 $f20, 0x20($sp)
/* 3D800 80062400 03E00008 */ jr $ra
/* 3D804 80062404 27BD0050 */ addiu $sp, $sp, 0x50
glabel guPerspective
/* 3D808 80062408 27BDFF98 */ addiu $sp, $sp, -0x68
/* 3D80C 8006240C AFB00060 */ sw $s0, 0x60($sp)
/* 3D810 80062410 00808021 */ addu $s0, $a0, $zero
/* 3D814 80062414 C7A00078 */ lwc1 $f0, 0x78($sp)
/* 3D818 80062418 C7A2007C */ lwc1 $f2, 0x7C($sp)
/* 3D81C 8006241C C7A40080 */ lwc1 $f4, 0x80($sp)
/* 3D820 80062420 27A40020 */ addiu $a0, $sp, 0x20
/* 3D824 80062424 AFBF0064 */ sw $ra, 0x64($sp)
/* 3D828 80062428 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3D82C 8006242C E7A20014 */ swc1 $f2, 0x14($sp)
/* 3D830 80062430 0C018898 */ jal guPerspectiveF
/* 3D834 80062434 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3D838 80062438 27A40020 */ addiu $a0, $sp, 0x20
/* 3D83C 8006243C 0C0196B0 */ jal guMtxF2L
/* 3D840 80062440 02002821 */ addu $a1, $s0, $zero
/* 3D844 80062444 8FBF0064 */ lw $ra, 0x64($sp)
/* 3D848 80062448 8FB00060 */ lw $s0, 0x60($sp)
/* 3D84C 8006244C 03E00008 */ jr $ra
/* 3D850 80062450 27BD0068 */ addiu $sp, $sp, 0x68
/* 3D854 80062454 00000000 */ nop
/* 3D858 80062458 00000000 */ nop
/* 3D85C 8006245C 00000000 */ nop

View File

@ -1,134 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guPositionF
/* 3D860 80062460 3C018009 */ lui $at, %hi(position_800929e0)
/* 3D864 80062464 C42229E0 */ lwc1 $f2, %lo(position_800929e0)($at)
/* 3D868 80062468 44859000 */ mtc1 $a1, $f18
/* 3D86C 8006246C 27BDFFB0 */ addiu $sp, $sp, -0x50
/* 3D870 80062470 F7B80030 */ sdc1 $f24, 0x30($sp)
/* 3D874 80062474 C7B80060 */ lwc1 $f24, 0x60($sp)
/* 3D878 80062478 F7B40020 */ sdc1 $f20, 0x20($sp)
/* 3D87C 8006247C 46029502 */ mul.s $f20, $f18, $f2
/* 3D880 80062480 44869000 */ mtc1 $a2, $f18
/* 3D884 80062484 AFB00018 */ sw $s0, 0x18($sp)
/* 3D888 80062488 F7BA0038 */ sdc1 $f26, 0x38($sp)
/* 3D88C 8006248C 46029682 */ mul.s $f26, $f18, $f2
/* 3D890 80062490 44879000 */ mtc1 $a3, $f18
/* 3D894 80062494 00808021 */ addu $s0, $a0, $zero
/* 3D898 80062498 AFBF001C */ sw $ra, 0x1C($sp)
/* 3D89C 8006249C F7BE0048 */ sdc1 $f30, 0x48($sp)
/* 3D8A0 800624A0 F7BC0040 */ sdc1 $f28, 0x40($sp)
/* 3D8A4 800624A4 F7B60028 */ sdc1 $f22, 0x28($sp)
/* 3D8A8 800624A8 46029782 */ mul.s $f30, $f18, $f2
/* 3D8AC 800624AC 0C00A78F */ jal sin_rad
/* 3D8B0 800624B0 4600A306 */ mov.s $f12, $f20
/* 3D8B4 800624B4 4600A306 */ mov.s $f12, $f20
/* 3D8B8 800624B8 0C00A7A8 */ jal cos_rad
/* 3D8BC 800624BC E7A00010 */ swc1 $f0, 0x10($sp)
/* 3D8C0 800624C0 46000586 */ mov.s $f22, $f0
/* 3D8C4 800624C4 0C00A78F */ jal sin_rad
/* 3D8C8 800624C8 4600D306 */ mov.s $f12, $f26
/* 3D8CC 800624CC 4600D306 */ mov.s $f12, $f26
/* 3D8D0 800624D0 0C00A7A8 */ jal cos_rad
/* 3D8D4 800624D4 46000506 */ mov.s $f20, $f0
/* 3D8D8 800624D8 46000706 */ mov.s $f28, $f0
/* 3D8DC 800624DC 0C00A78F */ jal sin_rad
/* 3D8E0 800624E0 4600F306 */ mov.s $f12, $f30
/* 3D8E4 800624E4 4600F306 */ mov.s $f12, $f30
/* 3D8E8 800624E8 0C00A7A8 */ jal cos_rad
/* 3D8EC 800624EC 46000686 */ mov.s $f26, $f0
/* 3D8F0 800624F0 4600E382 */ mul.s $f14, $f28, $f0
/* 3D8F4 800624F4 461AE402 */ mul.s $f16, $f28, $f26
/* 3D8F8 800624F8 4600A307 */ neg.s $f12, $f20
/* 3D8FC 800624FC 46186302 */ mul.s $f12, $f12, $f24
/* 3D900 80062500 461AB082 */ mul.s $f2, $f22, $f26
/* 3D904 80062504 4600B182 */ mul.s $f6, $f22, $f0
/* 3D908 80062508 C7B20010 */ lwc1 $f18, 0x10($sp)
/* 3D90C 8006250C 46149102 */ mul.s $f4, $f18, $f20
/* 3D910 80062510 4614B502 */ mul.s $f20, $f22, $f20
/* 3D914 80062514 461C9202 */ mul.s $f8, $f18, $f28
/* 3D918 80062518 461CB582 */ mul.s $f22, $f22, $f28
/* 3D91C 8006251C 46187382 */ mul.s $f14, $f14, $f24
/* 3D920 80062520 46188402 */ mul.s $f16, $f16, $f24
/* 3D924 80062524 46002282 */ mul.s $f10, $f4, $f0
/* 3D928 80062528 461A2102 */ mul.s $f4, $f4, $f26
/* 3D92C 8006252C 46184202 */ mul.s $f8, $f8, $f24
/* 3D930 80062530 4618B582 */ mul.s $f22, $f22, $f24
/* 3D934 80062534 46062100 */ add.s $f4, $f4, $f6
/* 3D938 80062538 4600A182 */ mul.s $f6, $f20, $f0
/* 3D93C 8006253C 46025281 */ sub.s $f10, $f10, $f2
/* 3D940 80062540 461A9082 */ mul.s $f2, $f18, $f26
/* 3D944 80062544 461AA502 */ mul.s $f20, $f20, $f26
/* 3D948 80062548 46009002 */ mul.s $f0, $f18, $f0
/* 3D94C 8006254C 46185282 */ mul.s $f10, $f10, $f24
/* 3D950 80062550 8FBF001C */ lw $ra, 0x1C($sp)
/* 3D954 80062554 D7BE0048 */ ldc1 $f30, 0x48($sp)
/* 3D958 80062558 D7BC0040 */ ldc1 $f28, 0x40($sp)
/* 3D95C 8006255C 46182102 */ mul.s $f4, $f4, $f24
/* 3D960 80062560 E7A00014 */ swc1 $f0, 0x14($sp)
/* 3D964 80062564 AE00000C */ sw $zero, 0xC($s0)
/* 3D968 80062568 AE00001C */ sw $zero, 0x1C($s0)
/* 3D96C 8006256C AE00002C */ sw $zero, 0x2C($s0)
/* 3D970 80062570 C7B20064 */ lwc1 $f18, 0x64($sp)
/* 3D974 80062574 3C013F80 */ lui $at, (0x3F800000 >> 16)
/* 3D978 80062578 44810000 */ mtc1 $at, $f0
/* 3D97C 8006257C E6120030 */ swc1 $f18, 0x30($s0)
/* 3D980 80062580 C7B20068 */ lwc1 $f18, 0x68($sp)
/* 3D984 80062584 46023180 */ add.s $f6, $f6, $f2
/* 3D988 80062588 E6120034 */ swc1 $f18, 0x34($s0)
/* 3D98C 8006258C C7B2006C */ lwc1 $f18, 0x6C($sp)
/* 3D990 80062590 46183182 */ mul.s $f6, $f6, $f24
/* 3D994 80062594 E6120038 */ swc1 $f18, 0x38($s0)
/* 3D998 80062598 E600003C */ swc1 $f0, 0x3C($s0)
/* 3D99C 8006259C E60C0008 */ swc1 $f12, 0x8($s0)
/* 3D9A0 800625A0 E60E0000 */ swc1 $f14, 0x0($s0)
/* 3D9A4 800625A4 C7B20014 */ lwc1 $f18, 0x14($sp)
/* 3D9A8 800625A8 D7BA0038 */ ldc1 $f26, 0x38($sp)
/* 3D9AC 800625AC 4612A501 */ sub.s $f20, $f20, $f18
/* 3D9B0 800625B0 E6160028 */ swc1 $f22, 0x28($s0)
/* 3D9B4 800625B4 D7B60028 */ ldc1 $f22, 0x28($sp)
/* 3D9B8 800625B8 4618A502 */ mul.s $f20, $f20, $f24
/* 3D9BC 800625BC D7B80030 */ ldc1 $f24, 0x30($sp)
/* 3D9C0 800625C0 E6100004 */ swc1 $f16, 0x4($s0)
/* 3D9C4 800625C4 E6080018 */ swc1 $f8, 0x18($s0)
/* 3D9C8 800625C8 E60A0010 */ swc1 $f10, 0x10($s0)
/* 3D9CC 800625CC E6040014 */ swc1 $f4, 0x14($s0)
/* 3D9D0 800625D0 E6060020 */ swc1 $f6, 0x20($s0)
/* 3D9D4 800625D4 E6140024 */ swc1 $f20, 0x24($s0)
/* 3D9D8 800625D8 8FB00018 */ lw $s0, 0x18($sp)
/* 3D9DC 800625DC D7B40020 */ ldc1 $f20, 0x20($sp)
/* 3D9E0 800625E0 03E00008 */ jr $ra
/* 3D9E4 800625E4 27BD0050 */ addiu $sp, $sp, 0x50
glabel guPosition
/* 3D9E8 800625E8 27BDFF98 */ addiu $sp, $sp, -0x68
/* 3D9EC 800625EC AFB00060 */ sw $s0, 0x60($sp)
/* 3D9F0 800625F0 00808021 */ addu $s0, $a0, $zero
/* 3D9F4 800625F4 C7A00078 */ lwc1 $f0, 0x78($sp)
/* 3D9F8 800625F8 C7A2007C */ lwc1 $f2, 0x7C($sp)
/* 3D9FC 800625FC C7A40080 */ lwc1 $f4, 0x80($sp)
/* 3DA00 80062600 C7A60084 */ lwc1 $f6, 0x84($sp)
/* 3DA04 80062604 27A40020 */ addiu $a0, $sp, 0x20
/* 3DA08 80062608 AFBF0064 */ sw $ra, 0x64($sp)
/* 3DA0C 8006260C E7A00010 */ swc1 $f0, 0x10($sp)
/* 3DA10 80062610 E7A20014 */ swc1 $f2, 0x14($sp)
/* 3DA14 80062614 E7A40018 */ swc1 $f4, 0x18($sp)
/* 3DA18 80062618 0C018918 */ jal guPositionF
/* 3DA1C 8006261C E7A6001C */ swc1 $f6, 0x1C($sp)
/* 3DA20 80062620 27A40020 */ addiu $a0, $sp, 0x20
/* 3DA24 80062624 0C0196B0 */ jal guMtxF2L
/* 3DA28 80062628 02002821 */ addu $a1, $s0, $zero
/* 3DA2C 8006262C 8FBF0064 */ lw $ra, 0x64($sp)
/* 3DA30 80062630 8FB00060 */ lw $s0, 0x60($sp)
/* 3DA34 80062634 03E00008 */ jr $ra
/* 3DA38 80062638 27BD0068 */ addiu $sp, $sp, 0x68
/* 3DA3C 8006263C 00000000 */ nop

View File

@ -1,110 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel guRotateRPYF
/* 3DA40 80062640 3C018009 */ lui $at, %hi(rotaterpy_800929f0)
/* 3DA44 80062644 C42229F0 */ lwc1 $f2, %lo(rotaterpy_800929f0)($at)
/* 3DA48 80062648 44854000 */ mtc1 $a1, $f8
/* 3DA4C 8006264C 27BDFFA8 */ addiu $sp, $sp, -0x58
/* 3DA50 80062650 F7B40028 */ sdc1 $f20, 0x28($sp)
/* 3DA54 80062654 46024502 */ mul.s $f20, $f8, $f2
/* 3DA58 80062658 44864000 */ mtc1 $a2, $f8
/* 3DA5C 8006265C AFB00020 */ sw $s0, 0x20($sp)
/* 3DA60 80062660 F7B60030 */ sdc1 $f22, 0x30($sp)
/* 3DA64 80062664 46024582 */ mul.s $f22, $f8, $f2
/* 3DA68 80062668 44874000 */ mtc1 $a3, $f8
/* 3DA6C 8006266C 00808021 */ addu $s0, $a0, $zero
/* 3DA70 80062670 AFBF0024 */ sw $ra, 0x24($sp)
/* 3DA74 80062674 F7BE0050 */ sdc1 $f30, 0x50($sp)
/* 3DA78 80062678 F7BC0048 */ sdc1 $f28, 0x48($sp)
/* 3DA7C 8006267C F7BA0040 */ sdc1 $f26, 0x40($sp)
/* 3DA80 80062680 F7B80038 */ sdc1 $f24, 0x38($sp)
/* 3DA84 80062684 46024782 */ mul.s $f30, $f8, $f2
/* 3DA88 80062688 0C00A78F */ jal sin_rad
/* 3DA8C 8006268C 4600A306 */ mov.s $f12, $f20
/* 3DA90 80062690 4600A306 */ mov.s $f12, $f20
/* 3DA94 80062694 0C00A7A8 */ jal cos_rad
/* 3DA98 80062698 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3DA9C 8006269C 46000706 */ mov.s $f28, $f0
/* 3DAA0 800626A0 0C00A78F */ jal sin_rad
/* 3DAA4 800626A4 4600B306 */ mov.s $f12, $f22
/* 3DAA8 800626A8 4600B306 */ mov.s $f12, $f22
/* 3DAAC 800626AC 0C00A7A8 */ jal cos_rad
/* 3DAB0 800626B0 46000686 */ mov.s $f26, $f0
/* 3DAB4 800626B4 46000606 */ mov.s $f24, $f0
/* 3DAB8 800626B8 0C00A78F */ jal sin_rad
/* 3DABC 800626BC 4600F306 */ mov.s $f12, $f30
/* 3DAC0 800626C0 4600F306 */ mov.s $f12, $f30
/* 3DAC4 800626C4 0C00A7A8 */ jal cos_rad
/* 3DAC8 800626C8 46000586 */ mov.s $f22, $f0
/* 3DACC 800626CC 46000506 */ mov.s $f20, $f0
/* 3DAD0 800626D0 0C019698 */ jal guMtxIdentF
/* 3DAD4 800626D4 02002021 */ addu $a0, $s0, $zero
/* 3DAD8 800626D8 4614C402 */ mul.s $f16, $f24, $f20
/* 3DADC 800626DC 4616C482 */ mul.s $f18, $f24, $f22
/* 3DAE0 800626E0 4614E302 */ mul.s $f12, $f28, $f20
/* 3DAE4 800626E4 461AE002 */ mul.s $f0, $f28, $f26
/* 3DAE8 800626E8 C7A80010 */ lwc1 $f8, 0x10($sp)
/* 3DAEC 800626EC 461A4082 */ mul.s $f2, $f8, $f26
/* 3DAF0 800626F0 4616E202 */ mul.s $f8, $f28, $f22
/* 3DAF4 800626F4 4618E702 */ mul.s $f28, $f28, $f24
/* 3DAF8 800626F8 46140102 */ mul.s $f4, $f0, $f20
/* 3DAFC 800626FC 46160002 */ mul.s $f0, $f0, $f22
/* 3DB00 80062700 46141182 */ mul.s $f6, $f2, $f20
/* 3DB04 80062704 46161082 */ mul.s $f2, $f2, $f22
/* 3DB08 80062708 E7A80018 */ swc1 $f8, 0x18($sp)
/* 3DB0C 8006270C C7A80010 */ lwc1 $f8, 0x10($sp)
/* 3DB10 80062710 46184382 */ mul.s $f14, $f8, $f24
/* 3DB14 80062714 46164282 */ mul.s $f10, $f8, $f22
/* 3DB18 80062718 8FBF0024 */ lw $ra, 0x24($sp)
/* 3DB1C 8006271C 46144502 */ mul.s $f20, $f8, $f20
/* 3DB20 80062720 D7BE0050 */ ldc1 $f30, 0x50($sp)
/* 3DB24 80062724 C7A80018 */ lwc1 $f8, 0x18($sp)
/* 3DB28 80062728 D7B80038 */ ldc1 $f24, 0x38($sp)
/* 3DB2C 8006272C D7B60030 */ ldc1 $f22, 0x30($sp)
/* 3DB30 80062730 46083181 */ sub.s $f6, $f6, $f8
/* 3DB34 80062734 E61C0028 */ swc1 $f28, 0x28($s0)
/* 3DB38 80062738 D7BC0048 */ ldc1 $f28, 0x48($sp)
/* 3DB3C 8006273C 4600D687 */ neg.s $f26, $f26
/* 3DB40 80062740 E61A0008 */ swc1 $f26, 0x8($s0)
/* 3DB44 80062744 D7BA0040 */ ldc1 $f26, 0x40($sp)
/* 3DB48 80062748 46140001 */ sub.s $f0, $f0, $f20
/* 3DB4C 8006274C E6100000 */ swc1 $f16, 0x0($s0)
/* 3DB50 80062750 D7B40028 */ ldc1 $f20, 0x28($sp)
/* 3DB54 80062754 460C1080 */ add.s $f2, $f2, $f12
/* 3DB58 80062758 E6120004 */ swc1 $f18, 0x4($s0)
/* 3DB5C 8006275C E60E0018 */ swc1 $f14, 0x18($s0)
/* 3DB60 80062760 460A2100 */ add.s $f4, $f4, $f10
/* 3DB64 80062764 E6060010 */ swc1 $f6, 0x10($s0)
/* 3DB68 80062768 E6020014 */ swc1 $f2, 0x14($s0)
/* 3DB6C 8006276C E6040020 */ swc1 $f4, 0x20($s0)
/* 3DB70 80062770 E6000024 */ swc1 $f0, 0x24($s0)
/* 3DB74 80062774 8FB00020 */ lw $s0, 0x20($sp)
/* 3DB78 80062778 03E00008 */ jr $ra
/* 3DB7C 8006277C 27BD0058 */ addiu $sp, $sp, 0x58
glabel guRotateRPY
/* 3DB80 80062780 27BDFFA8 */ addiu $sp, $sp, -0x58
/* 3DB84 80062784 AFB00050 */ sw $s0, 0x50($sp)
/* 3DB88 80062788 00808021 */ addu $s0, $a0, $zero
/* 3DB8C 8006278C AFBF0054 */ sw $ra, 0x54($sp)
/* 3DB90 80062790 0C018990 */ jal guRotateRPYF
/* 3DB94 80062794 27A40010 */ addiu $a0, $sp, 0x10
/* 3DB98 80062798 27A40010 */ addiu $a0, $sp, 0x10
/* 3DB9C 8006279C 0C0196B0 */ jal guMtxF2L
/* 3DBA0 800627A0 02002821 */ addu $a1, $s0, $zero
/* 3DBA4 800627A4 8FBF0054 */ lw $ra, 0x54($sp)
/* 3DBA8 800627A8 8FB00050 */ lw $s0, 0x50($sp)
/* 3DBAC 800627AC 03E00008 */ jr $ra
/* 3DBB0 800627B0 27BD0058 */ addiu $sp, $sp, 0x58
/* 3DBB4 800627B4 00000000 */ nop
/* 3DBB8 800627B8 00000000 */ nop
/* 3DBBC 800627BC 00000000 */ nop

View File

@ -1,35 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel sins
/* 3DBC0 800627C0 3084FFFF */ andi $a0, $a0, 0xFFFF
/* 3DBC4 800627C4 00042102 */ srl $a0, $a0, 4
/* 3DBC8 800627C8 30820400 */ andi $v0, $a0, 0x400
/* 3DBCC 800627CC 10400003 */ beqz $v0, .LIQUE_800627DC
/* 3DBD0 800627D0 00041027 */ nor $v0, $zero, $a0
/* 3DBD4 800627D4 080189F8 */ j .LIQUE_800627E0
/* 3DBD8 800627D8 304203FF */ andi $v0, $v0, 0x3FF
.LIQUE_800627DC:
/* 3DBDC 800627DC 308203FF */ andi $v0, $a0, 0x3FF
.LIQUE_800627E0:
/* 3DBE0 800627E0 00021040 */ sll $v0, $v0, 1
/* 3DBE4 800627E4 3C038009 */ lui $v1, %hi(sins_sintable)
/* 3DBE8 800627E8 00621821 */ addu $v1, $v1, $v0
/* 3DBEC 800627EC 84632A00 */ lh $v1, %lo(sins_sintable)($v1)
/* 3DBF0 800627F0 30820800 */ andi $v0, $a0, 0x800
/* 3DBF4 800627F4 14400003 */ bnez $v0, .LIQUE_80062804
/* 3DBF8 800627F8 00031023 */ negu $v0, $v1
/* 3DBFC 800627FC 03E00008 */ jr $ra
/* 3DC00 80062800 00601021 */ addu $v0, $v1, $zero
.LIQUE_80062804:
/* 3DC04 80062804 00021400 */ sll $v0, $v0, 16
/* 3DC08 80062808 03E00008 */ jr $ra
/* 3DC0C 8006280C 00021403 */ sra $v0, $v0, 16

View File

@ -1,16 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel sqrtf
/* 3C280 80060E80 03E00008 */ jr $ra
/* 3C284 80060E84 46006004 */ sqrt.s $f0, $f12
/* 3C288 80060E88 00000000 */ nop
/* 3C28C 80060E8C 00000000 */ nop

View File

@ -1,132 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel ldiv
/* 48020 8006CC20 14C00002 */ bnez $a2, .LIQUE_8006CC2C
/* 48024 8006CC24 00A6001A */ div $zero, $a1, $a2
/* 48028 8006CC28 0007000D */ break 7
.LIQUE_8006CC2C:
/* 4802C 8006CC2C 2401FFFF */ addiu $at, $zero, -0x1
/* 48030 8006CC30 14C10004 */ bne $a2, $at, .LIQUE_8006CC44
/* 48034 8006CC34 3C018000 */ lui $at, (0x80000000 >> 16)
/* 48038 8006CC38 14A10002 */ bne $a1, $at, .LIQUE_8006CC44
/* 4803C 8006CC3C 00000000 */ nop
/* 48040 8006CC40 0006000D */ break 6
.LIQUE_8006CC44:
/* 48044 8006CC44 00003812 */ mflo $a3
/* 48048 8006CC48 00000000 */ nop
/* 4804C 8006CC4C 00000000 */ nop
/* 48050 8006CC50 00C70018 */ mult $a2, $a3
/* 48054 8006CC54 27BDFFF8 */ addiu $sp, $sp, -0x8
/* 48058 8006CC58 AFA70000 */ sw $a3, 0x0($sp)
/* 4805C 8006CC5C 00001012 */ mflo $v0
/* 48060 8006CC60 00A21823 */ subu $v1, $a1, $v0
/* 48064 8006CC64 04E10006 */ bgez $a3, .LIQUE_8006CC80
/* 48068 8006CC68 AFA30004 */ sw $v1, 0x4($sp)
/* 4806C 8006CC6C 18600004 */ blez $v1, .LIQUE_8006CC80
/* 48070 8006CC70 24E20001 */ addiu $v0, $a3, 0x1
/* 48074 8006CC74 00661823 */ subu $v1, $v1, $a2
/* 48078 8006CC78 AFA20000 */ sw $v0, 0x0($sp)
/* 4807C 8006CC7C AFA30004 */ sw $v1, 0x4($sp)
.LIQUE_8006CC80:
/* 48080 8006CC80 8FA80000 */ lw $t0, 0x0($sp)
/* 48084 8006CC84 8FA90004 */ lw $t1, 0x4($sp)
/* 48088 8006CC88 AC880000 */ sw $t0, 0x0($a0)
/* 4808C 8006CC8C AC890004 */ sw $t1, 0x4($a0)
/* 48090 8006CC90 00801021 */ addu $v0, $a0, $zero
/* 48094 8006CC94 03E00008 */ jr $ra
/* 48098 8006CC98 27BD0008 */ addiu $sp, $sp, 0x8
glabel lldiv
/* 4809C 8006CC9C 27BDFFC8 */ addiu $sp, $sp, -0x38
/* 480A0 8006CCA0 AFB40030 */ sw $s4, 0x30($sp)
/* 480A4 8006CCA4 0080A021 */ addu $s4, $a0, $zero
/* 480A8 8006CCA8 AFB10024 */ sw $s1, 0x24($sp)
/* 480AC 8006CCAC AFB00020 */ sw $s0, 0x20($sp)
/* 480B0 8006CCB0 00C08021 */ addu $s0, $a2, $zero
/* 480B4 8006CCB4 00E08821 */ addu $s1, $a3, $zero
/* 480B8 8006CCB8 AFB3002C */ sw $s3, 0x2C($sp)
/* 480BC 8006CCBC AFB20028 */ sw $s2, 0x28($sp)
/* 480C0 8006CCC0 8FB20048 */ lw $s2, 0x48($sp)
/* 480C4 8006CCC4 8FB3004C */ lw $s3, 0x4C($sp)
/* 480C8 8006CCC8 02002021 */ addu $a0, $s0, $zero
/* 480CC 8006CCCC 02202821 */ addu $a1, $s1, $zero
/* 480D0 8006CCD0 AFBF0034 */ sw $ra, 0x34($sp)
/* 480D4 8006CCD4 02403021 */ addu $a2, $s2, $zero
/* 480D8 8006CCD8 0C01B384 */ jal __divdi3
/* 480DC 8006CCDC 02603821 */ addu $a3, $s3, $zero
/* 480E0 8006CCE0 00404021 */ addu $t0, $v0, $zero
/* 480E4 8006CCE4 00604821 */ addu $t1, $v1, $zero
/* 480E8 8006CCE8 02690019 */ multu $s3, $t1
/* 480EC 8006CCEC 00002010 */ mfhi $a0
/* 480F0 8006CCF0 00002812 */ mflo $a1
/* 480F4 8006CCF4 00000000 */ nop
/* 480F8 8006CCF8 00000000 */ nop
/* 480FC 8006CCFC 02680018 */ mult $s3, $t0
/* 48100 8006CD00 00001012 */ mflo $v0
/* 48104 8006CD04 00000000 */ nop
/* 48108 8006CD08 00000000 */ nop
/* 4810C 8006CD0C 01320018 */ mult $t1, $s2
/* 48110 8006CD10 AFA80010 */ sw $t0, 0x10($sp)
/* 48114 8006CD14 AFA90014 */ sw $t1, 0x14($sp)
/* 48118 8006CD18 8FA60010 */ lw $a2, 0x10($sp)
/* 4811C 8006CD1C 00822021 */ addu $a0, $a0, $v0
/* 48120 8006CD20 00001812 */ mflo $v1
/* 48124 8006CD24 00832021 */ addu $a0, $a0, $v1
/* 48128 8006CD28 0225382B */ sltu $a3, $s1, $a1
/* 4812C 8006CD2C 02252823 */ subu $a1, $s1, $a1
/* 48130 8006CD30 02042023 */ subu $a0, $s0, $a0
/* 48134 8006CD34 00872023 */ subu $a0, $a0, $a3
/* 48138 8006CD38 AFA40018 */ sw $a0, 0x18($sp)
/* 4813C 8006CD3C AFA5001C */ sw $a1, 0x1C($sp)
/* 48140 8006CD40 04C10014 */ bgez $a2, .LIQUE_8006CD94
/* 48144 8006CD44 8FBF0034 */ lw $ra, 0x34($sp)
/* 48148 8006CD48 8FA20018 */ lw $v0, 0x18($sp)
/* 4814C 8006CD4C 5C400006 */ bgtzl $v0, .LIQUE_8006CD68
/* 48150 8006CD50 25230001 */ addiu $v1, $t1, 0x1
/* 48154 8006CD54 14400010 */ bnez $v0, .LIQUE_8006CD98
/* 48158 8006CD58 02801021 */ addu $v0, $s4, $zero
/* 4815C 8006CD5C 8FA2001C */ lw $v0, 0x1C($sp)
/* 48160 8006CD60 1040000C */ beqz $v0, .LIQUE_8006CD94
/* 48164 8006CD64 25230001 */ addiu $v1, $t1, 0x1
.LIQUE_8006CD68:
/* 48168 8006CD68 2C660001 */ sltiu $a2, $v1, 0x1
/* 4816C 8006CD6C 01061021 */ addu $v0, $t0, $a2
/* 48170 8006CD70 00B3382B */ sltu $a3, $a1, $s3
/* 48174 8006CD74 00B32823 */ subu $a1, $a1, $s3
/* 48178 8006CD78 00922023 */ subu $a0, $a0, $s2
/* 4817C 8006CD7C 00872023 */ subu $a0, $a0, $a3
/* 48180 8006CD80 AFA20010 */ sw $v0, 0x10($sp)
/* 48184 8006CD84 AFA30014 */ sw $v1, 0x14($sp)
/* 48188 8006CD88 AFA40018 */ sw $a0, 0x18($sp)
/* 4818C 8006CD8C AFA5001C */ sw $a1, 0x1C($sp)
/* 48190 8006CD90 8FBF0034 */ lw $ra, 0x34($sp)
.LIQUE_8006CD94:
/* 48194 8006CD94 02801021 */ addu $v0, $s4, $zero
.LIQUE_8006CD98:
/* 48198 8006CD98 8FAA0010 */ lw $t2, 0x10($sp)
/* 4819C 8006CD9C 8FAB0014 */ lw $t3, 0x14($sp)
/* 481A0 8006CDA0 8FAC0018 */ lw $t4, 0x18($sp)
/* 481A4 8006CDA4 8FAD001C */ lw $t5, 0x1C($sp)
/* 481A8 8006CDA8 AE8A0000 */ sw $t2, 0x0($s4)
/* 481AC 8006CDAC AE8B0004 */ sw $t3, 0x4($s4)
/* 481B0 8006CDB0 AE8C0008 */ sw $t4, 0x8($s4)
/* 481B4 8006CDB4 AE8D000C */ sw $t5, 0xC($s4)
/* 481B8 8006CDB8 8FB40030 */ lw $s4, 0x30($sp)
/* 481BC 8006CDBC 8FB3002C */ lw $s3, 0x2C($sp)
/* 481C0 8006CDC0 8FB20028 */ lw $s2, 0x28($sp)
/* 481C4 8006CDC4 8FB10024 */ lw $s1, 0x24($sp)
/* 481C8 8006CDC8 8FB00020 */ lw $s0, 0x20($sp)
/* 481CC 8006CDCC 03E00008 */ jr $ra
/* 481D0 8006CDD0 27BD0038 */ addiu $sp, $sp, 0x38
/* 481D4 8006CDD4 00000000 */ nop
/* 481D8 8006CDD8 00000000 */ nop
/* 481DC 8006CDDC 00000000 */ nop

View File

@ -1,54 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel strchr
/* 3DFD0 80062BD0 00052E00 */ sll $a1, $a1, 24
/* 3DFD4 80062BD4 08018AFB */ j .LIQUE_80062BEC
/* 3DFD8 80062BD8 00052E03 */ sra $a1, $a1, 24
.LIQUE_80062BDC:
/* 3DFDC 80062BDC 14600003 */ bnez $v1, .LIQUE_80062BEC
/* 3DFE0 80062BE0 24840001 */ addiu $a0, $a0, 0x1
/* 3DFE4 80062BE4 03E00008 */ jr $ra
/* 3DFE8 80062BE8 00001021 */ addu $v0, $zero, $zero
.LIQUE_80062BEC:
/* 3DFEC 80062BEC 80820000 */ lb $v0, 0x0($a0)
/* 3DFF0 80062BF0 1445FFFA */ bne $v0, $a1, .LIQUE_80062BDC
/* 3DFF4 80062BF4 90830000 */ lbu $v1, 0x0($a0)
/* 3DFF8 80062BF8 03E00008 */ jr $ra
/* 3DFFC 80062BFC 00801021 */ addu $v0, $a0, $zero
glabel strlen
/* 3E000 80062C00 80820000 */ lb $v0, 0x0($a0)
/* 3E004 80062C04 10400005 */ beqz $v0, .LIQUE_80062C1C
/* 3E008 80062C08 00801821 */ addu $v1, $a0, $zero
/* 3E00C 80062C0C 24630001 */ addiu $v1, $v1, 0x1
.LIQUE_80062C10:
/* 3E010 80062C10 80620000 */ lb $v0, 0x0($v1)
/* 3E014 80062C14 5440FFFE */ bnel $v0, $zero, .LIQUE_80062C10
/* 3E018 80062C18 24630001 */ addiu $v1, $v1, 0x1
.LIQUE_80062C1C:
/* 3E01C 80062C1C 03E00008 */ jr $ra
/* 3E020 80062C20 00641023 */ subu $v0, $v1, $a0
glabel memcpy
/* 3E024 80062C24 10C00007 */ beqz $a2, .LIQUE_80062C44
/* 3E028 80062C28 00801821 */ addu $v1, $a0, $zero
.LIQUE_80062C2C:
/* 3E02C 80062C2C 90A20000 */ lbu $v0, 0x0($a1)
/* 3E030 80062C30 24A50001 */ addiu $a1, $a1, 0x1
/* 3E034 80062C34 24C6FFFF */ addiu $a2, $a2, -0x1
/* 3E038 80062C38 A0620000 */ sb $v0, 0x0($v1)
/* 3E03C 80062C3C 14C0FFFB */ bnez $a2, .LIQUE_80062C2C
/* 3E040 80062C40 24630001 */ addiu $v1, $v1, 0x1
.LIQUE_80062C44:
/* 3E044 80062C44 03E00008 */ jr $ra
/* 3E048 80062C48 00801021 */ addu $v0, $a0, $zero
/* 3E04C 80062C4C 00000000 */ nop

View File

@ -1,733 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel _Ldtob
/* 45EB0 8006AAB0 27BDFF88 */ addiu $sp, $sp, -0x78
/* 45EB4 8006AAB4 AFB1004C */ sw $s1, 0x4C($sp)
/* 45EB8 8006AAB8 27B10018 */ addiu $s1, $sp, 0x18
/* 45EBC 8006AABC AFB40058 */ sw $s4, 0x58($sp)
/* 45EC0 8006AAC0 0080A021 */ addu $s4, $a0, $zero
/* 45EC4 8006AAC4 00052E00 */ sll $a1, $a1, 24
/* 45EC8 8006AAC8 AFB30054 */ sw $s3, 0x54($sp)
/* 45ECC 8006AACC AFBF005C */ sw $ra, 0x5C($sp)
/* 45ED0 8006AAD0 AFB20050 */ sw $s2, 0x50($sp)
/* 45ED4 8006AAD4 AFB00048 */ sw $s0, 0x48($sp)
/* 45ED8 8006AAD8 F7B80070 */ sdc1 $f24, 0x70($sp)
/* 45EDC 8006AADC F7B60068 */ sdc1 $f22, 0x68($sp)
/* 45EE0 8006AAE0 F7B40060 */ sdc1 $f20, 0x60($sp)
/* 45EE4 8006AAE4 8E820024 */ lw $v0, 0x24($s4)
/* 45EE8 8006AAE8 D6940000 */ ldc1 $f20, 0x0($s4)
/* 45EEC 8006AAEC 04410003 */ bgez $v0, .LIQUE_8006AAFC
/* 45EF0 8006AAF0 00059E03 */ sra $s3, $a1, 24
/* 45EF4 8006AAF4 0801AAC7 */ j .LIQUE_8006AB1C
/* 45EF8 8006AAF8 24020006 */ addiu $v0, $zero, 0x6
.LIQUE_8006AAFC:
/* 45EFC 8006AAFC 14400009 */ bnez $v0, .LIQUE_8006AB24
/* 45F00 8006AB00 27A40038 */ addiu $a0, $sp, 0x38
/* 45F04 8006AB04 24020067 */ addiu $v0, $zero, 0x67
/* 45F08 8006AB08 12620003 */ beq $s3, $v0, .LIQUE_8006AB18
/* 45F0C 8006AB0C 24020047 */ addiu $v0, $zero, 0x47
/* 45F10 8006AB10 16620004 */ bne $s3, $v0, .LIQUE_8006AB24
/* 45F14 8006AB14 00000000 */ nop
.LIQUE_8006AB18:
/* 45F18 8006AB18 24020001 */ addiu $v0, $zero, 0x1
.LIQUE_8006AB1C:
/* 45F1C 8006AB1C AE820024 */ sw $v0, 0x24($s4)
/* 45F20 8006AB20 27A40038 */ addiu $a0, $sp, 0x38
.LIQUE_8006AB24:
/* 45F24 8006AB24 0C01ABB7 */ jal _Ldunscale
/* 45F28 8006AB28 02802821 */ addu $a1, $s4, $zero
/* 45F2C 8006AB2C 00401821 */ addu $v1, $v0, $zero
/* 45F30 8006AB30 18600013 */ blez $v1, .LIQUE_8006AB80
/* 45F34 8006AB34 00000000 */ nop
/* 45F38 8006AB38 24020002 */ addiu $v0, $zero, 0x2
/* 45F3C 8006AB3C 14620005 */ bne $v1, $v0, .LIQUE_8006AB54
/* 45F40 8006AB40 8E840008 */ lw $a0, 0x8($s4)
/* 45F44 8006AB44 3C03800A */ lui $v1, %hi(xldtob_800989e8)
/* 45F48 8006AB48 246389E8 */ addiu $v1, $v1, %lo(xldtob_800989e8)
/* 45F4C 8006AB4C 0801AAD8 */ j .LIQUE_8006AB60
/* 45F50 8006AB50 24020003 */ addiu $v0, $zero, 0x3
.LIQUE_8006AB54:
/* 45F54 8006AB54 3C03800A */ lui $v1, %hi(xldtob_800989ec)
/* 45F58 8006AB58 246389EC */ addiu $v1, $v1, %lo(xldtob_800989ec)
/* 45F5C 8006AB5C 24020003 */ addiu $v0, $zero, 0x3
.LIQUE_8006AB60:
/* 45F60 8006AB60 AE820014 */ sw $v0, 0x14($s4)
/* 45F64 8006AB64 806A0000 */ lb $t2, 0x0($v1)
/* 45F68 8006AB68 806B0001 */ lb $t3, 0x1($v1)
/* 45F6C 8006AB6C 806C0002 */ lb $t4, 0x2($v1)
/* 45F70 8006AB70 A08A0000 */ sb $t2, 0x0($a0)
/* 45F74 8006AB74 A08B0001 */ sb $t3, 0x1($a0)
/* 45F78 8006AB78 0801ABAC */ j .LIQUE_8006AEB0
/* 45F7C 8006AB7C A08C0002 */ sb $t4, 0x2($a0)
.LIQUE_8006AB80:
/* 45F80 8006AB80 14400003 */ bnez $v0, .LIQUE_8006AB90
/* 45F84 8006AB84 00003821 */ addu $a3, $zero, $zero
/* 45F88 8006AB88 0801ABA6 */ j .LIQUE_8006AE98
/* 45F8C 8006AB8C A7A00038 */ sh $zero, 0x38($sp)
.LIQUE_8006AB90:
/* 45F90 8006AB90 44800000 */ mtc1 $zero, $f0
/* 45F94 8006AB94 44800800 */ mtc1 $zero, $f1
/* 45F98 8006AB98 4620A03C */ c.lt.d $f20, $f0
/* 45F9C 8006AB9C 45030001 */ bc1tl .LIQUE_8006ABA4
/* 45FA0 8006ABA0 4620A507 */ neg.d $f20, $f20
.LIQUE_8006ABA4:
/* 45FA4 8006ABA4 87A40038 */ lh $a0, 0x38($sp)
/* 45FA8 8006ABA8 24037597 */ addiu $v1, $zero, 0x7597
/* 45FAC 8006ABAC 00830018 */ mult $a0, $v1
/* 45FB0 8006ABB0 00002012 */ mflo $a0
/* 45FB4 8006ABB4 3C0214F8 */ lui $v0, (0x14F8B589 >> 16)
/* 45FB8 8006ABB8 3442B589 */ ori $v0, $v0, (0x14F8B589 & 0xFFFF)
/* 45FBC 8006ABBC 00820018 */ mult $a0, $v0
/* 45FC0 8006ABC0 000427C3 */ sra $a0, $a0, 31
/* 45FC4 8006ABC4 00001010 */ mfhi $v0
/* 45FC8 8006ABC8 00021343 */ sra $v0, $v0, 13
/* 45FCC 8006ABCC 00441023 */ subu $v0, $v0, $a0
/* 45FD0 8006ABD0 2444FFFC */ addiu $a0, $v0, -0x4
/* 45FD4 8006ABD4 00041C00 */ sll $v1, $a0, 16
/* 45FD8 8006ABD8 00031403 */ sra $v0, $v1, 16
/* 45FDC 8006ABDC 04410013 */ bgez $v0, .LIQUE_8006AC2C
/* 45FE0 8006ABE0 A7A40038 */ sh $a0, 0x38($sp)
/* 45FE4 8006ABE4 00021023 */ negu $v0, $v0
/* 45FE8 8006ABE8 24420003 */ addiu $v0, $v0, 0x3
/* 45FEC 8006ABEC 2403FFFC */ addiu $v1, $zero, -0x4
/* 45FF0 8006ABF0 00431824 */ and $v1, $v0, $v1
/* 45FF4 8006ABF4 00032023 */ negu $a0, $v1
/* 45FF8 8006ABF8 18600020 */ blez $v1, .LIQUE_8006AC7C
/* 45FFC 8006ABFC A7A40038 */ sh $a0, 0x38($sp)
/* 46000 8006AC00 3C04800A */ lui $a0, %hi(xldtob_pows)
/* 46004 8006AC04 248489A0 */ addiu $a0, $a0, %lo(xldtob_pows)
.LIQUE_8006AC08:
/* 46008 8006AC08 30620001 */ andi $v0, $v1, 0x1
/* 4600C 8006AC0C 10400003 */ beqz $v0, .LIQUE_8006AC1C
/* 46010 8006AC10 00031843 */ sra $v1, $v1, 1
/* 46014 8006AC14 D4800000 */ ldc1 $f0, 0x0($a0)
/* 46018 8006AC18 4620A502 */ mul.d $f20, $f20, $f0
.LIQUE_8006AC1C:
/* 4601C 8006AC1C 1C60FFFA */ bgtz $v1, .LIQUE_8006AC08
/* 46020 8006AC20 24840008 */ addiu $a0, $a0, 0x8
/* 46024 8006AC24 0801AB20 */ j .LIQUE_8006AC80
/* 46028 8006AC28 8E840024 */ lw $a0, 0x24($s4)
.LIQUE_8006AC2C:
/* 4602C 8006AC2C 18400013 */ blez $v0, .LIQUE_8006AC7C
/* 46030 8006AC30 2402FFFC */ addiu $v0, $zero, -0x4
/* 46034 8006AC34 00821024 */ and $v0, $a0, $v0
/* 46038 8006AC38 00021C00 */ sll $v1, $v0, 16
/* 4603C 8006AC3C 3C013FF0 */ lui $at, (0x3FF00000 >> 16)
/* 46040 8006AC40 44811800 */ mtc1 $at, $f3
/* 46044 8006AC44 44801000 */ mtc1 $zero, $f2
/* 46048 8006AC48 00031C03 */ sra $v1, $v1, 16
/* 4604C 8006AC4C 1860000A */ blez $v1, .LIQUE_8006AC78
/* 46050 8006AC50 A7A20038 */ sh $v0, 0x38($sp)
/* 46054 8006AC54 3C04800A */ lui $a0, %hi(xldtob_pows)
/* 46058 8006AC58 248489A0 */ addiu $a0, $a0, %lo(xldtob_pows)
.LIQUE_8006AC5C:
/* 4605C 8006AC5C 30620001 */ andi $v0, $v1, 0x1
/* 46060 8006AC60 10400003 */ beqz $v0, .LIQUE_8006AC70
/* 46064 8006AC64 00031843 */ sra $v1, $v1, 1
/* 46068 8006AC68 D4800000 */ ldc1 $f0, 0x0($a0)
/* 4606C 8006AC6C 46201082 */ mul.d $f2, $f2, $f0
.LIQUE_8006AC70:
/* 46070 8006AC70 1C60FFFA */ bgtz $v1, .LIQUE_8006AC5C
/* 46074 8006AC74 24840008 */ addiu $a0, $a0, 0x8
.LIQUE_8006AC78:
/* 46078 8006AC78 4622A503 */ div.d $f20, $f20, $f2
.LIQUE_8006AC7C:
/* 4607C 8006AC7C 8E840024 */ lw $a0, 0x24($s4)
.LIQUE_8006AC80:
/* 46080 8006AC80 24020066 */ addiu $v0, $zero, 0x66
/* 46084 8006AC84 16620004 */ bne $s3, $v0, .LIQUE_8006AC98
/* 46088 8006AC88 24920006 */ addiu $s2, $a0, 0x6
/* 4608C 8006AC8C 87A30038 */ lh $v1, 0x38($sp)
/* 46090 8006AC90 2482000A */ addiu $v0, $a0, 0xA
/* 46094 8006AC94 00439021 */ addu $s2, $v0, $v1
.LIQUE_8006AC98:
/* 46098 8006AC98 2A420014 */ slti $v0, $s2, 0x14
/* 4609C 8006AC9C 50400001 */ beql $v0, $zero, .LIQUE_8006ACA4
/* 460A0 8006ACA0 24120013 */ addiu $s2, $zero, 0x13
.LIQUE_8006ACA4:
/* 460A4 8006ACA4 24020030 */ addiu $v0, $zero, 0x30
/* 460A8 8006ACA8 A2220000 */ sb $v0, 0x0($s1)
/* 460AC 8006ACAC 1A400028 */ blez $s2, .LIQUE_8006AD50
/* 460B0 8006ACB0 26310001 */ addiu $s1, $s1, 0x1
/* 460B4 8006ACB4 4480C000 */ mtc1 $zero, $f24
/* 460B8 8006ACB8 4480C800 */ mtc1 $zero, $f25
/* 460BC 8006ACBC 3C01800A */ lui $at, %hi(xldtob_800989f0)
/* 460C0 8006ACC0 D43689F0 */ ldc1 $f22, %lo(xldtob_800989f0)($at)
.LIQUE_8006ACC4:
/* 460C4 8006ACC4 4634C03C */ c.lt.d $f24, $f20
/* 460C8 8006ACC8 45000021 */ bc1f .LIQUE_8006AD50
/* 460CC 8006ACCC 2652FFF8 */ addiu $s2, $s2, -0x8
/* 460D0 8006ACD0 4620A10D */ trunc.w.d $f4, $f20
/* 460D4 8006ACD4 44052000 */ mfc1 $a1, $f4
/* 460D8 8006ACD8 1A400005 */ blez $s2, .LIQUE_8006ACF0
/* 460DC 8006ACDC 26310008 */ addiu $s1, $s1, 0x8
/* 460E0 8006ACE0 44850000 */ mtc1 $a1, $f0
/* 460E4 8006ACE4 46800021 */ cvt.d.w $f0, $f0
/* 460E8 8006ACE8 4620A001 */ sub.d $f0, $f20, $f0
/* 460EC 8006ACEC 46360502 */ mul.d $f20, $f0, $f22
.LIQUE_8006ACF0:
/* 460F0 8006ACF0 18A0000D */ blez $a1, .LIQUE_8006AD28
/* 460F4 8006ACF4 24100008 */ addiu $s0, $zero, 0x8
/* 460F8 8006ACF8 2610FFFF */ addiu $s0, $s0, -0x1
.LIQUE_8006ACFC:
/* 460FC 8006ACFC 0600000A */ bltz $s0, .LIQUE_8006AD28
/* 46100 8006AD00 27A40040 */ addiu $a0, $sp, 0x40
/* 46104 8006AD04 0C01B308 */ jal ldiv
/* 46108 8006AD08 2406000A */ addiu $a2, $zero, 0xA
/* 4610C 8006AD0C 93A20047 */ lbu $v0, 0x47($sp)
/* 46110 8006AD10 2631FFFF */ addiu $s1, $s1, -0x1
/* 46114 8006AD14 24420030 */ addiu $v0, $v0, 0x30
/* 46118 8006AD18 A2220000 */ sb $v0, 0x0($s1)
/* 4611C 8006AD1C 8FA50040 */ lw $a1, 0x40($sp)
/* 46120 8006AD20 5CA0FFF6 */ bgtzl $a1, .LIQUE_8006ACFC
/* 46124 8006AD24 2610FFFF */ addiu $s0, $s0, -0x1
.LIQUE_8006AD28:
/* 46128 8006AD28 2610FFFF */ addiu $s0, $s0, -0x1
/* 4612C 8006AD2C 06000006 */ bltz $s0, .LIQUE_8006AD48
/* 46130 8006AD30 00000000 */ nop
/* 46134 8006AD34 24020030 */ addiu $v0, $zero, 0x30
.LIQUE_8006AD38:
/* 46138 8006AD38 2631FFFF */ addiu $s1, $s1, -0x1
/* 4613C 8006AD3C 2610FFFF */ addiu $s0, $s0, -0x1
/* 46140 8006AD40 0601FFFD */ bgez $s0, .LIQUE_8006AD38
/* 46144 8006AD44 A2220000 */ sb $v0, 0x0($s1)
.LIQUE_8006AD48:
/* 46148 8006AD48 1E40FFDE */ bgtz $s2, .LIQUE_8006ACC4
/* 4614C 8006AD4C 26310008 */ addiu $s1, $s1, 0x8
.LIQUE_8006AD50:
/* 46150 8006AD50 2624FFFF */ addiu $a0, $s1, -0x1
/* 46154 8006AD54 27A30018 */ addiu $v1, $sp, 0x18
/* 46158 8006AD58 00839023 */ subu $s2, $a0, $v1
/* 4615C 8006AD5C 27B10019 */ addiu $s1, $sp, 0x19
/* 46160 8006AD60 24030030 */ addiu $v1, $zero, 0x30
/* 46164 8006AD64 97A20038 */ lhu $v0, 0x38($sp)
/* 46168 8006AD68 83A40019 */ lb $a0, 0x19($sp)
/* 4616C 8006AD6C 24420007 */ addiu $v0, $v0, 0x7
/* 46170 8006AD70 14830009 */ bne $a0, $v1, .LIQUE_8006AD98
/* 46174 8006AD74 A7A20038 */ sh $v0, 0x38($sp)
/* 46178 8006AD78 24040030 */ addiu $a0, $zero, 0x30
.LIQUE_8006AD7C:
/* 4617C 8006AD7C 97A20038 */ lhu $v0, 0x38($sp)
/* 46180 8006AD80 26310001 */ addiu $s1, $s1, 0x1
/* 46184 8006AD84 2442FFFF */ addiu $v0, $v0, -0x1
/* 46188 8006AD88 A7A20038 */ sh $v0, 0x38($sp)
/* 4618C 8006AD8C 82230000 */ lb $v1, 0x0($s1)
/* 46190 8006AD90 1064FFFA */ beq $v1, $a0, .LIQUE_8006AD7C
/* 46194 8006AD94 2652FFFF */ addiu $s2, $s2, -0x1
.LIQUE_8006AD98:
/* 46198 8006AD98 24020066 */ addiu $v0, $zero, 0x66
/* 4619C 8006AD9C 16620005 */ bne $s3, $v0, .LIQUE_8006ADB4
/* 461A0 8006ADA0 8E840024 */ lw $a0, 0x24($s4)
/* 461A4 8006ADA4 87A30038 */ lh $v1, 0x38($sp)
/* 461A8 8006ADA8 24820001 */ addiu $v0, $a0, 0x1
/* 461AC 8006ADAC 0801AB75 */ j .LIQUE_8006ADD4
/* 461B0 8006ADB0 00431021 */ addu $v0, $v0, $v1
.LIQUE_8006ADB4:
/* 461B4 8006ADB4 24020065 */ addiu $v0, $zero, 0x65
/* 461B8 8006ADB8 12620004 */ beq $s3, $v0, .LIQUE_8006ADCC
/* 461BC 8006ADBC 00001821 */ addu $v1, $zero, $zero
/* 461C0 8006ADC0 24020045 */ addiu $v0, $zero, 0x45
/* 461C4 8006ADC4 16620003 */ bne $s3, $v0, .LIQUE_8006ADD4
/* 461C8 8006ADC8 00641021 */ addu $v0, $v1, $a0
.LIQUE_8006ADCC:
/* 461CC 8006ADCC 24030001 */ addiu $v1, $zero, 0x1
/* 461D0 8006ADD0 00641021 */ addu $v0, $v1, $a0
.LIQUE_8006ADD4:
/* 461D4 8006ADD4 00021400 */ sll $v0, $v0, 16
/* 461D8 8006ADD8 00023C03 */ sra $a3, $v0, 16
/* 461DC 8006ADDC 0247102A */ slt $v0, $s2, $a3
/* 461E0 8006ADE0 10400002 */ beqz $v0, .LIQUE_8006ADEC
/* 461E4 8006ADE4 00121400 */ sll $v0, $s2, 16
/* 461E8 8006ADE8 00023C03 */ sra $a3, $v0, 16
.LIQUE_8006ADEC:
/* 461EC 8006ADEC 18E0002A */ blez $a3, .LIQUE_8006AE98
/* 461F0 8006ADF0 00F2102A */ slt $v0, $a3, $s2
/* 461F4 8006ADF4 10400007 */ beqz $v0, .LIQUE_8006AE14
/* 461F8 8006ADF8 02271821 */ addu $v1, $s1, $a3
/* 461FC 8006ADFC 80620000 */ lb $v0, 0x0($v1)
/* 46200 8006AE00 28420035 */ slti $v0, $v0, 0x35
/* 46204 8006AE04 14400004 */ bnez $v0, .LIQUE_8006AE18
/* 46208 8006AE08 24030030 */ addiu $v1, $zero, 0x30
/* 4620C 8006AE0C 0801AB86 */ j .LIQUE_8006AE18
/* 46210 8006AE10 24030039 */ addiu $v1, $zero, 0x39
.LIQUE_8006AE14:
/* 46214 8006AE14 24030030 */ addiu $v1, $zero, 0x30
.LIQUE_8006AE18:
/* 46218 8006AE18 24E6FFFF */ addiu $a2, $a3, -0x1
/* 4621C 8006AE1C 02262021 */ addu $a0, $s1, $a2
/* 46220 8006AE20 80820000 */ lb $v0, 0x0($a0)
/* 46224 8006AE24 00604021 */ addu $t0, $v1, $zero
/* 46228 8006AE28 1448000D */ bne $v0, $t0, .LIQUE_8006AE60
/* 4622C 8006AE2C 24020039 */ addiu $v0, $zero, 0x39
/* 46230 8006AE30 00071C00 */ sll $v1, $a3, 16
/* 46234 8006AE34 3C02FFFF */ lui $v0, (0xFFFF0000 >> 16)
/* 46238 8006AE38 00622821 */ addu $a1, $v1, $v0
/* 4623C 8006AE3C 3C09FFFF */ lui $t1, (0xFFFF0000 >> 16)
.LIQUE_8006AE40:
/* 46240 8006AE40 00A01821 */ addu $v1, $a1, $zero
/* 46244 8006AE44 00A92821 */ addu $a1, $a1, $t1
/* 46248 8006AE48 24C6FFFF */ addiu $a2, $a2, -0x1
/* 4624C 8006AE4C 02262021 */ addu $a0, $s1, $a2
/* 46250 8006AE50 80820000 */ lb $v0, 0x0($a0)
/* 46254 8006AE54 1048FFFA */ beq $v0, $t0, .LIQUE_8006AE40
/* 46258 8006AE58 00033C03 */ sra $a3, $v1, 16
/* 4625C 8006AE5C 24020039 */ addiu $v0, $zero, 0x39
.LIQUE_8006AE60:
/* 46260 8006AE60 15020004 */ bne $t0, $v0, .LIQUE_8006AE74
/* 46264 8006AE64 00000000 */ nop
/* 46268 8006AE68 90820000 */ lbu $v0, 0x0($a0)
/* 4626C 8006AE6C 24420001 */ addiu $v0, $v0, 0x1
/* 46270 8006AE70 A0820000 */ sb $v0, 0x0($a0)
.LIQUE_8006AE74:
/* 46274 8006AE74 04C10009 */ bgez $a2, .LIQUE_8006AE9C
/* 46278 8006AE78 02802021 */ addu $a0, $s4, $zero
/* 4627C 8006AE7C 2631FFFF */ addiu $s1, $s1, -0x1
/* 46280 8006AE80 24E20001 */ addiu $v0, $a3, 0x1
/* 46284 8006AE84 00021400 */ sll $v0, $v0, 16
/* 46288 8006AE88 97A30038 */ lhu $v1, 0x38($sp)
/* 4628C 8006AE8C 00023C03 */ sra $a3, $v0, 16
/* 46290 8006AE90 24630001 */ addiu $v1, $v1, 0x1
/* 46294 8006AE94 A7A30038 */ sh $v1, 0x38($sp)
.LIQUE_8006AE98:
/* 46298 8006AE98 02802021 */ addu $a0, $s4, $zero
.LIQUE_8006AE9C:
/* 4629C 8006AE9C 02602821 */ addu $a1, $s3, $zero
/* 462A0 8006AEA0 87A20038 */ lh $v0, 0x38($sp)
/* 462A4 8006AEA4 02203021 */ addu $a2, $s1, $zero
/* 462A8 8006AEA8 0C01ABDE */ jal _Genld
/* 462AC 8006AEAC AFA20010 */ sw $v0, 0x10($sp)
.LIQUE_8006AEB0:
/* 462B0 8006AEB0 8FBF005C */ lw $ra, 0x5C($sp)
/* 462B4 8006AEB4 8FB40058 */ lw $s4, 0x58($sp)
/* 462B8 8006AEB8 8FB30054 */ lw $s3, 0x54($sp)
/* 462BC 8006AEBC 8FB20050 */ lw $s2, 0x50($sp)
/* 462C0 8006AEC0 8FB1004C */ lw $s1, 0x4C($sp)
/* 462C4 8006AEC4 8FB00048 */ lw $s0, 0x48($sp)
/* 462C8 8006AEC8 D7B80070 */ ldc1 $f24, 0x70($sp)
/* 462CC 8006AECC D7B60068 */ ldc1 $f22, 0x68($sp)
/* 462D0 8006AED0 D7B40060 */ ldc1 $f20, 0x60($sp)
/* 462D4 8006AED4 03E00008 */ jr $ra
/* 462D8 8006AED8 27BD0078 */ addiu $sp, $sp, 0x78
glabel _Ldunscale
/* 462DC 8006AEDC 94A60000 */ lhu $a2, 0x0($a1)
/* 462E0 8006AEE0 00803821 */ addu $a3, $a0, $zero
/* 462E4 8006AEE4 240307FF */ addiu $v1, $zero, 0x7FF
/* 462E8 8006AEE8 30C27FF0 */ andi $v0, $a2, 0x7FF0
/* 462EC 8006AEEC 00022102 */ srl $a0, $v0, 4
/* 462F0 8006AEF0 14830013 */ bne $a0, $v1, .LIQUE_8006AF40
/* 462F4 8006AEF4 00801021 */ addu $v0, $a0, $zero
/* 462F8 8006AEF8 A4E00000 */ sh $zero, 0x0($a3)
/* 462FC 8006AEFC 94A20000 */ lhu $v0, 0x0($a1)
/* 46300 8006AF00 3042000F */ andi $v0, $v0, 0xF
/* 46304 8006AF04 1440000A */ bnez $v0, .LIQUE_8006AF30
/* 46308 8006AF08 00000000 */ nop
/* 4630C 8006AF0C 94A20002 */ lhu $v0, 0x2($a1)
/* 46310 8006AF10 14400007 */ bnez $v0, .LIQUE_8006AF30
/* 46314 8006AF14 00000000 */ nop
/* 46318 8006AF18 94A20004 */ lhu $v0, 0x4($a1)
/* 4631C 8006AF1C 14400004 */ bnez $v0, .LIQUE_8006AF30
/* 46320 8006AF20 00000000 */ nop
/* 46324 8006AF24 94A20006 */ lhu $v0, 0x6($a1)
/* 46328 8006AF28 10400003 */ beqz $v0, .LIQUE_8006AF38
/* 4632C 8006AF2C 00000000 */ nop
.LIQUE_8006AF30:
/* 46330 8006AF30 03E00008 */ jr $ra
/* 46334 8006AF34 24020002 */ addiu $v0, $zero, 0x2
.LIQUE_8006AF38:
/* 46338 8006AF38 03E00008 */ jr $ra
/* 4633C 8006AF3C 24020001 */ addiu $v0, $zero, 0x1
.LIQUE_8006AF40:
/* 46340 8006AF40 18800007 */ blez $a0, .LIQUE_8006AF60
/* 46344 8006AF44 30C3800F */ andi $v1, $a2, 0x800F
/* 46348 8006AF48 2402FFFF */ addiu $v0, $zero, -0x1
/* 4634C 8006AF4C 34633FF0 */ ori $v1, $v1, 0x3FF0
/* 46350 8006AF50 2484FC02 */ addiu $a0, $a0, -0x3FE
/* 46354 8006AF54 A4A30000 */ sh $v1, 0x0($a1)
/* 46358 8006AF58 03E00008 */ jr $ra
/* 4635C 8006AF5C A4E40000 */ sh $a0, 0x0($a3)
.LIQUE_8006AF60:
/* 46360 8006AF60 04400003 */ bltz $v0, .LIQUE_8006AF70
/* 46364 8006AF64 00001021 */ addu $v0, $zero, $zero
/* 46368 8006AF68 03E00008 */ jr $ra
/* 4636C 8006AF6C A4E00000 */ sh $zero, 0x0($a3)
.LIQUE_8006AF70:
/* 46370 8006AF70 03E00008 */ jr $ra
/* 46374 8006AF74 24020002 */ addiu $v0, $zero, 0x2
glabel _Genld
/* 46378 8006AF78 27BDFFD8 */ addiu $sp, $sp, -0x28
/* 4637C 8006AF7C AFB3001C */ sw $s3, 0x1C($sp)
/* 46380 8006AF80 00C09821 */ addu $s3, $a2, $zero
/* 46384 8006AF84 00052E00 */ sll $a1, $a1, 24
/* 46388 8006AF88 AFB40020 */ sw $s4, 0x20($sp)
/* 4638C 8006AF8C 0005A603 */ sra $s4, $a1, 24
/* 46390 8006AF90 AFB20018 */ sw $s2, 0x18($sp)
/* 46394 8006AF94 87B2003A */ lh $s2, 0x3A($sp)
/* 46398 8006AF98 00073C00 */ sll $a3, $a3, 16
/* 4639C 8006AF9C AFB00010 */ sw $s0, 0x10($sp)
/* 463A0 8006AFA0 00078403 */ sra $s0, $a3, 16
/* 463A4 8006AFA4 AFB10014 */ sw $s1, 0x14($sp)
/* 463A8 8006AFA8 00808821 */ addu $s1, $a0, $zero
/* 463AC 8006AFAC 1E000004 */ bgtz $s0, .LIQUE_8006AFC0
/* 463B0 8006AFB0 AFBF0024 */ sw $ra, 0x24($sp)
/* 463B4 8006AFB4 24100001 */ addiu $s0, $zero, 0x1
/* 463B8 8006AFB8 3C13800A */ lui $s3, %hi(D_IQUE_800989F8)
/* 463BC 8006AFBC 267389F8 */ addiu $s3, $s3, %lo(D_IQUE_800989F8)
.LIQUE_8006AFC0:
/* 463C0 8006AFC0 24020066 */ addiu $v0, $zero, 0x66
/* 463C4 8006AFC4 1282000C */ beq $s4, $v0, .LIQUE_8006AFF8
/* 463C8 8006AFC8 24020067 */ addiu $v0, $zero, 0x67
/* 463CC 8006AFCC 12820003 */ beq $s4, $v0, .LIQUE_8006AFDC
/* 463D0 8006AFD0 24020047 */ addiu $v0, $zero, 0x47
/* 463D4 8006AFD4 1682008E */ bne $s4, $v0, .LIQUE_8006B210
/* 463D8 8006AFD8 24030067 */ addiu $v1, $zero, 0x67
.LIQUE_8006AFDC:
/* 463DC 8006AFDC 2A42FFFC */ slti $v0, $s2, -0x4
/* 463E0 8006AFE0 1440008B */ bnez $v0, .LIQUE_8006B210
/* 463E4 8006AFE4 24030067 */ addiu $v1, $zero, 0x67
/* 463E8 8006AFE8 8E250024 */ lw $a1, 0x24($s1)
/* 463EC 8006AFEC 0245102A */ slt $v0, $s2, $a1
/* 463F0 8006AFF0 10400087 */ beqz $v0, .LIQUE_8006B210
/* 463F4 8006AFF4 00000000 */ nop
.LIQUE_8006AFF8:
/* 463F8 8006AFF8 26420001 */ addiu $v0, $s2, 0x1
/* 463FC 8006AFFC 00021400 */ sll $v0, $v0, 16
/* 46400 8006B000 24030066 */ addiu $v1, $zero, 0x66
/* 46404 8006B004 1283000E */ beq $s4, $v1, .LIQUE_8006B040
/* 46408 8006B008 00029403 */ sra $s2, $v0, 16
/* 4640C 8006B00C 8E220030 */ lw $v0, 0x30($s1)
/* 46410 8006B010 30420008 */ andi $v0, $v0, 0x8
/* 46414 8006B014 14400006 */ bnez $v0, .LIQUE_8006B030
/* 46418 8006B018 8E250024 */ lw $a1, 0x24($s1)
/* 4641C 8006B01C 0205102A */ slt $v0, $s0, $a1
/* 46420 8006B020 10400004 */ beqz $v0, .LIQUE_8006B034
/* 46424 8006B024 00B21023 */ subu $v0, $a1, $s2
/* 46428 8006B028 AE300024 */ sw $s0, 0x24($s1)
/* 4642C 8006B02C 02002821 */ addu $a1, $s0, $zero
.LIQUE_8006B030:
/* 46430 8006B030 00B21023 */ subu $v0, $a1, $s2
.LIQUE_8006B034:
/* 46434 8006B034 04410002 */ bgez $v0, .LIQUE_8006B040
/* 46438 8006B038 AE220024 */ sw $v0, 0x24($s1)
/* 4643C 8006B03C AE200024 */ sw $zero, 0x24($s1)
.LIQUE_8006B040:
/* 46440 8006B040 1E40002F */ bgtz $s2, .LIQUE_8006B100
/* 46444 8006B044 0212102A */ slt $v0, $s0, $s2
/* 46448 8006B048 8E240014 */ lw $a0, 0x14($s1)
/* 4644C 8006B04C 8E220008 */ lw $v0, 0x8($s1)
/* 46450 8006B050 24030030 */ addiu $v1, $zero, 0x30
/* 46454 8006B054 00441021 */ addu $v0, $v0, $a0
/* 46458 8006B058 A0430000 */ sb $v1, 0x0($v0)
/* 4645C 8006B05C 8E250024 */ lw $a1, 0x24($s1)
/* 46460 8006B060 24840001 */ addiu $a0, $a0, 0x1
/* 46464 8006B064 1CA00005 */ bgtz $a1, .LIQUE_8006B07C
/* 46468 8006B068 AE240014 */ sw $a0, 0x14($s1)
/* 4646C 8006B06C 8E220030 */ lw $v0, 0x30($s1)
/* 46470 8006B070 30420008 */ andi $v0, $v0, 0x8
/* 46474 8006B074 10400009 */ beqz $v0, .LIQUE_8006B09C
/* 46478 8006B078 00121823 */ negu $v1, $s2
.LIQUE_8006B07C:
/* 4647C 8006B07C 8E220008 */ lw $v0, 0x8($s1)
/* 46480 8006B080 2403002E */ addiu $v1, $zero, 0x2E
/* 46484 8006B084 00441021 */ addu $v0, $v0, $a0
/* 46488 8006B088 A0430000 */ sb $v1, 0x0($v0)
/* 4648C 8006B08C 8E250024 */ lw $a1, 0x24($s1)
/* 46490 8006B090 24840001 */ addiu $a0, $a0, 0x1
/* 46494 8006B094 AE240014 */ sw $a0, 0x14($s1)
/* 46498 8006B098 00121823 */ negu $v1, $s2
.LIQUE_8006B09C:
/* 4649C 8006B09C 00A3102A */ slt $v0, $a1, $v1
/* 464A0 8006B0A0 10400007 */ beqz $v0, .LIQUE_8006B0C0
/* 464A4 8006B0A4 00B21021 */ addu $v0, $a1, $s2
/* 464A8 8006B0A8 96220026 */ lhu $v0, 0x26($s1)
/* 464AC 8006B0AC 00021023 */ negu $v0, $v0
/* 464B0 8006B0B0 00021400 */ sll $v0, $v0, 16
/* 464B4 8006B0B4 00029403 */ sra $s2, $v0, 16
/* 464B8 8006B0B8 00121823 */ negu $v1, $s2
/* 464BC 8006B0BC 00B21021 */ addu $v0, $a1, $s2
.LIQUE_8006B0C0:
/* 464C0 8006B0C0 AE220024 */ sw $v0, 0x24($s1)
/* 464C4 8006B0C4 0050102A */ slt $v0, $v0, $s0
/* 464C8 8006B0C8 10400002 */ beqz $v0, .LIQUE_8006B0D4
/* 464CC 8006B0CC AE230018 */ sw $v1, 0x18($s1)
/* 464D0 8006B0D0 86300026 */ lh $s0, 0x26($s1)
.LIQUE_8006B0D4:
/* 464D4 8006B0D4 02602821 */ addu $a1, $s3, $zero
/* 464D8 8006B0D8 8E230008 */ lw $v1, 0x8($s1)
/* 464DC 8006B0DC 8E240014 */ lw $a0, 0x14($s1)
/* 464E0 8006B0E0 02003021 */ addu $a2, $s0, $zero
/* 464E4 8006B0E4 AE30001C */ sw $s0, 0x1C($s1)
/* 464E8 8006B0E8 0C018B09 */ jal memcpy
/* 464EC 8006B0EC 00642021 */ addu $a0, $v1, $a0
/* 464F0 8006B0F0 8E220024 */ lw $v0, 0x24($s1)
/* 464F4 8006B0F4 00501023 */ subu $v0, $v0, $s0
/* 464F8 8006B0F8 0801AD10 */ j .LIQUE_8006B440
/* 464FC 8006B0FC AE220020 */ sw $v0, 0x20($s1)
.LIQUE_8006B100:
/* 46500 8006B100 1040001B */ beqz $v0, .LIQUE_8006B170
/* 46504 8006B104 02602821 */ addu $a1, $s3, $zero
/* 46508 8006B108 8E220008 */ lw $v0, 0x8($s1)
/* 4650C 8006B10C 8E240014 */ lw $a0, 0x14($s1)
/* 46510 8006B110 02003021 */ addu $a2, $s0, $zero
/* 46514 8006B114 0C018B09 */ jal memcpy
/* 46518 8006B118 00442021 */ addu $a0, $v0, $a0
/* 4651C 8006B11C 8E250024 */ lw $a1, 0x24($s1)
/* 46520 8006B120 8E230014 */ lw $v1, 0x14($s1)
/* 46524 8006B124 02501023 */ subu $v0, $s2, $s0
/* 46528 8006B128 AE220018 */ sw $v0, 0x18($s1)
/* 4652C 8006B12C 00701821 */ addu $v1, $v1, $s0
/* 46530 8006B130 1CA00005 */ bgtz $a1, .LIQUE_8006B148
/* 46534 8006B134 AE230014 */ sw $v1, 0x14($s1)
/* 46538 8006B138 8E220030 */ lw $v0, 0x30($s1)
/* 4653C 8006B13C 30420008 */ andi $v0, $v0, 0x8
/* 46540 8006B140 504000BF */ beql $v0, $zero, .LIQUE_8006B440
/* 46544 8006B144 AE250020 */ sw $a1, 0x20($s1)
.LIQUE_8006B148:
/* 46548 8006B148 8E220008 */ lw $v0, 0x8($s1)
/* 4654C 8006B14C 2404002E */ addiu $a0, $zero, 0x2E
/* 46550 8006B150 00431021 */ addu $v0, $v0, $v1
/* 46554 8006B154 A0440000 */ sb $a0, 0x0($v0)
/* 46558 8006B158 8E23001C */ lw $v1, 0x1C($s1)
/* 4655C 8006B15C 8E250024 */ lw $a1, 0x24($s1)
/* 46560 8006B160 24630001 */ addiu $v1, $v1, 0x1
/* 46564 8006B164 AE23001C */ sw $v1, 0x1C($s1)
/* 46568 8006B168 0801AD10 */ j .LIQUE_8006B440
/* 4656C 8006B16C AE250020 */ sw $a1, 0x20($s1)
.LIQUE_8006B170:
/* 46570 8006B170 8E230008 */ lw $v1, 0x8($s1)
/* 46574 8006B174 8E240014 */ lw $a0, 0x14($s1)
/* 46578 8006B178 02403021 */ addu $a2, $s2, $zero
/* 4657C 8006B17C 0C018B09 */ jal memcpy
/* 46580 8006B180 00642021 */ addu $a0, $v1, $a0
/* 46584 8006B184 02121023 */ subu $v0, $s0, $s2
/* 46588 8006B188 00021400 */ sll $v0, $v0, 16
/* 4658C 8006B18C 00028403 */ sra $s0, $v0, 16
/* 46590 8006B190 8E230014 */ lw $v1, 0x14($s1)
/* 46594 8006B194 8E250024 */ lw $a1, 0x24($s1)
/* 46598 8006B198 00722021 */ addu $a0, $v1, $s2
/* 4659C 8006B19C 1CA00005 */ bgtz $a1, .LIQUE_8006B1B4
/* 465A0 8006B1A0 AE240014 */ sw $a0, 0x14($s1)
/* 465A4 8006B1A4 8E220030 */ lw $v0, 0x30($s1)
/* 465A8 8006B1A8 30420008 */ andi $v0, $v0, 0x8
/* 465AC 8006B1AC 10400009 */ beqz $v0, .LIQUE_8006B1D4
/* 465B0 8006B1B0 00B0102A */ slt $v0, $a1, $s0
.LIQUE_8006B1B4:
/* 465B4 8006B1B4 8E220008 */ lw $v0, 0x8($s1)
/* 465B8 8006B1B8 2403002E */ addiu $v1, $zero, 0x2E
/* 465BC 8006B1BC 00441021 */ addu $v0, $v0, $a0
/* 465C0 8006B1C0 A0430000 */ sb $v1, 0x0($v0)
/* 465C4 8006B1C4 8E250024 */ lw $a1, 0x24($s1)
/* 465C8 8006B1C8 24840001 */ addiu $a0, $a0, 0x1
/* 465CC 8006B1CC AE240014 */ sw $a0, 0x14($s1)
/* 465D0 8006B1D0 00B0102A */ slt $v0, $a1, $s0
.LIQUE_8006B1D4:
/* 465D4 8006B1D4 54400001 */ bnel $v0, $zero, .LIQUE_8006B1DC
/* 465D8 8006B1D8 86300026 */ lh $s0, 0x26($s1)
.LIQUE_8006B1DC:
/* 465DC 8006B1DC 02722821 */ addu $a1, $s3, $s2
/* 465E0 8006B1E0 8E230008 */ lw $v1, 0x8($s1)
/* 465E4 8006B1E4 8E240014 */ lw $a0, 0x14($s1)
/* 465E8 8006B1E8 02003021 */ addu $a2, $s0, $zero
/* 465EC 8006B1EC 0C018B09 */ jal memcpy
/* 465F0 8006B1F0 00642021 */ addu $a0, $v1, $a0
/* 465F4 8006B1F4 8E220014 */ lw $v0, 0x14($s1)
/* 465F8 8006B1F8 8E230024 */ lw $v1, 0x24($s1)
/* 465FC 8006B1FC 00501021 */ addu $v0, $v0, $s0
/* 46600 8006B200 00701823 */ subu $v1, $v1, $s0
/* 46604 8006B204 AE220014 */ sw $v0, 0x14($s1)
/* 46608 8006B208 0801AD10 */ j .LIQUE_8006B440
/* 4660C 8006B20C AE230018 */ sw $v1, 0x18($s1)
.LIQUE_8006B210:
/* 46610 8006B210 12830003 */ beq $s4, $v1, .LIQUE_8006B220
/* 46614 8006B214 24020047 */ addiu $v0, $zero, 0x47
/* 46618 8006B218 56820010 */ bnel $s4, $v0, .LIQUE_8006B25C
/* 4661C 8006B21C 8E240014 */ lw $a0, 0x14($s1)
.LIQUE_8006B220:
/* 46620 8006B220 8E250024 */ lw $a1, 0x24($s1)
/* 46624 8006B224 0205102A */ slt $v0, $s0, $a1
/* 46628 8006B228 10400004 */ beqz $v0, .LIQUE_8006B23C
/* 4662C 8006B22C 24A2FFFF */ addiu $v0, $a1, -0x1
/* 46630 8006B230 AE300024 */ sw $s0, 0x24($s1)
/* 46634 8006B234 02002821 */ addu $a1, $s0, $zero
/* 46638 8006B238 24A2FFFF */ addiu $v0, $a1, -0x1
.LIQUE_8006B23C:
/* 4663C 8006B23C 04410002 */ bgez $v0, .LIQUE_8006B248
/* 46640 8006B240 AE220024 */ sw $v0, 0x24($s1)
/* 46644 8006B244 AE200024 */ sw $zero, 0x24($s1)
.LIQUE_8006B248:
/* 46648 8006B248 16830002 */ bne $s4, $v1, .LIQUE_8006B254
/* 4664C 8006B24C 24050045 */ addiu $a1, $zero, 0x45
/* 46650 8006B250 24050065 */ addiu $a1, $zero, 0x65
.LIQUE_8006B254:
/* 46654 8006B254 00A0A021 */ addu $s4, $a1, $zero
/* 46658 8006B258 8E240014 */ lw $a0, 0x14($s1)
.LIQUE_8006B25C:
/* 4665C 8006B25C 8E220008 */ lw $v0, 0x8($s1)
/* 46660 8006B260 92630000 */ lbu $v1, 0x0($s3)
/* 46664 8006B264 26730001 */ addiu $s3, $s3, 0x1
/* 46668 8006B268 00441021 */ addu $v0, $v0, $a0
/* 4666C 8006B26C A0430000 */ sb $v1, 0x0($v0)
/* 46670 8006B270 8E250024 */ lw $a1, 0x24($s1)
/* 46674 8006B274 24840001 */ addiu $a0, $a0, 0x1
/* 46678 8006B278 1CA00005 */ bgtz $a1, .LIQUE_8006B290
/* 4667C 8006B27C AE240014 */ sw $a0, 0x14($s1)
/* 46680 8006B280 8E220030 */ lw $v0, 0x30($s1)
/* 46684 8006B284 30420008 */ andi $v0, $v0, 0x8
/* 46688 8006B288 10400008 */ beqz $v0, .LIQUE_8006B2AC
/* 4668C 8006B28C 00000000 */ nop
.LIQUE_8006B290:
/* 46690 8006B290 8E220008 */ lw $v0, 0x8($s1)
/* 46694 8006B294 2403002E */ addiu $v1, $zero, 0x2E
/* 46698 8006B298 00441021 */ addu $v0, $v0, $a0
/* 4669C 8006B29C A0430000 */ sb $v1, 0x0($v0)
/* 466A0 8006B2A0 8E250024 */ lw $a1, 0x24($s1)
/* 466A4 8006B2A4 24840001 */ addiu $a0, $a0, 0x1
/* 466A8 8006B2A8 AE240014 */ sw $a0, 0x14($s1)
.LIQUE_8006B2AC:
/* 466AC 8006B2AC 18A00012 */ blez $a1, .LIQUE_8006B2F8
/* 466B0 8006B2B0 2602FFFF */ addiu $v0, $s0, -0x1
/* 466B4 8006B2B4 00021400 */ sll $v0, $v0, 16
/* 466B8 8006B2B8 00028403 */ sra $s0, $v0, 16
/* 466BC 8006B2BC 00B0182A */ slt $v1, $a1, $s0
/* 466C0 8006B2C0 54600001 */ bnel $v1, $zero, .LIQUE_8006B2C8
/* 466C4 8006B2C4 86300026 */ lh $s0, 0x26($s1)
.LIQUE_8006B2C8:
/* 466C8 8006B2C8 02602821 */ addu $a1, $s3, $zero
/* 466CC 8006B2CC 8E230008 */ lw $v1, 0x8($s1)
/* 466D0 8006B2D0 8E240014 */ lw $a0, 0x14($s1)
/* 466D4 8006B2D4 02003021 */ addu $a2, $s0, $zero
/* 466D8 8006B2D8 0C018B09 */ jal memcpy
/* 466DC 8006B2DC 00642021 */ addu $a0, $v1, $a0
/* 466E0 8006B2E0 8E220014 */ lw $v0, 0x14($s1)
/* 466E4 8006B2E4 8E230024 */ lw $v1, 0x24($s1)
/* 466E8 8006B2E8 00501021 */ addu $v0, $v0, $s0
/* 466EC 8006B2EC 00701823 */ subu $v1, $v1, $s0
/* 466F0 8006B2F0 AE220014 */ sw $v0, 0x14($s1)
/* 466F4 8006B2F4 AE230018 */ sw $v1, 0x18($s1)
.LIQUE_8006B2F8:
/* 466F8 8006B2F8 8E230008 */ lw $v1, 0x8($s1)
/* 466FC 8006B2FC 8E220014 */ lw $v0, 0x14($s1)
/* 46700 8006B300 00629821 */ addu $s3, $v1, $v0
/* 46704 8006B304 A2740000 */ sb $s4, 0x0($s3)
/* 46708 8006B308 06400005 */ bltz $s2, .LIQUE_8006B320
/* 4670C 8006B30C 26730001 */ addiu $s3, $s3, 0x1
/* 46710 8006B310 2402002B */ addiu $v0, $zero, 0x2B
/* 46714 8006B314 A2620000 */ sb $v0, 0x0($s3)
/* 46718 8006B318 0801ACCE */ j .LIQUE_8006B338
/* 4671C 8006B31C 26730001 */ addiu $s3, $s3, 0x1
.LIQUE_8006B320:
/* 46720 8006B320 2403002D */ addiu $v1, $zero, 0x2D
/* 46724 8006B324 A2630000 */ sb $v1, 0x0($s3)
/* 46728 8006B328 26730001 */ addiu $s3, $s3, 0x1
/* 4672C 8006B32C 00121023 */ negu $v0, $s2
/* 46730 8006B330 00021400 */ sll $v0, $v0, 16
/* 46734 8006B334 00029403 */ sra $s2, $v0, 16
.LIQUE_8006B338:
/* 46738 8006B338 2A420064 */ slti $v0, $s2, 0x64
/* 4673C 8006B33C 14400029 */ bnez $v0, .LIQUE_8006B3E4
/* 46740 8006B340 3C036666 */ lui $v1, (0x66666667 >> 16)
/* 46744 8006B344 2A4203E8 */ slti $v0, $s2, 0x3E8
/* 46748 8006B348 14400014 */ bnez $v0, .LIQUE_8006B39C
/* 4674C 8006B34C 3C0351EB */ lui $v1, (0x51EB851F >> 16)
/* 46750 8006B350 3C031062 */ lui $v1, (0x10624DD3 >> 16)
/* 46754 8006B354 34634DD3 */ ori $v1, $v1, (0x10624DD3 & 0xFFFF)
/* 46758 8006B358 02430018 */ mult $s2, $v1
/* 4675C 8006B35C 001217C3 */ sra $v0, $s2, 31
/* 46760 8006B360 00001810 */ mfhi $v1
/* 46764 8006B364 00031983 */ sra $v1, $v1, 6
/* 46768 8006B368 00621823 */ subu $v1, $v1, $v0
/* 4676C 8006B36C 24640030 */ addiu $a0, $v1, 0x30
/* 46770 8006B370 A2640000 */ sb $a0, 0x0($s3)
/* 46774 8006B374 26730001 */ addiu $s3, $s3, 0x1
/* 46778 8006B378 00031140 */ sll $v0, $v1, 5
/* 4677C 8006B37C 00431023 */ subu $v0, $v0, $v1
/* 46780 8006B380 00021080 */ sll $v0, $v0, 2
/* 46784 8006B384 00431021 */ addu $v0, $v0, $v1
/* 46788 8006B388 000210C0 */ sll $v0, $v0, 3
/* 4678C 8006B38C 02421023 */ subu $v0, $s2, $v0
/* 46790 8006B390 00021400 */ sll $v0, $v0, 16
/* 46794 8006B394 00029403 */ sra $s2, $v0, 16
/* 46798 8006B398 3C0351EB */ lui $v1, (0x51EB851F >> 16)
.LIQUE_8006B39C:
/* 4679C 8006B39C 3463851F */ ori $v1, $v1, (0x51EB851F & 0xFFFF)
/* 467A0 8006B3A0 02430018 */ mult $s2, $v1
/* 467A4 8006B3A4 001217C3 */ sra $v0, $s2, 31
/* 467A8 8006B3A8 00001810 */ mfhi $v1
/* 467AC 8006B3AC 00031943 */ sra $v1, $v1, 5
/* 467B0 8006B3B0 00621823 */ subu $v1, $v1, $v0
/* 467B4 8006B3B4 24640030 */ addiu $a0, $v1, 0x30
/* 467B8 8006B3B8 A2640000 */ sb $a0, 0x0($s3)
/* 467BC 8006B3BC 26730001 */ addiu $s3, $s3, 0x1
/* 467C0 8006B3C0 00031040 */ sll $v0, $v1, 1
/* 467C4 8006B3C4 00431021 */ addu $v0, $v0, $v1
/* 467C8 8006B3C8 000210C0 */ sll $v0, $v0, 3
/* 467CC 8006B3CC 00431021 */ addu $v0, $v0, $v1
/* 467D0 8006B3D0 00021080 */ sll $v0, $v0, 2
/* 467D4 8006B3D4 02421023 */ subu $v0, $s2, $v0
/* 467D8 8006B3D8 00021400 */ sll $v0, $v0, 16
/* 467DC 8006B3DC 00029403 */ sra $s2, $v0, 16
/* 467E0 8006B3E0 3C036666 */ lui $v1, (0x66666667 >> 16)
.LIQUE_8006B3E4:
/* 467E4 8006B3E4 34636667 */ ori $v1, $v1, (0x66666667 & 0xFFFF)
/* 467E8 8006B3E8 02430018 */ mult $s2, $v1
/* 467EC 8006B3EC 001217C3 */ sra $v0, $s2, 31
/* 467F0 8006B3F0 00001810 */ mfhi $v1
/* 467F4 8006B3F4 00031883 */ sra $v1, $v1, 2
/* 467F8 8006B3F8 00621823 */ subu $v1, $v1, $v0
/* 467FC 8006B3FC 24640030 */ addiu $a0, $v1, 0x30
/* 46800 8006B400 A2640000 */ sb $a0, 0x0($s3)
/* 46804 8006B404 26730001 */ addiu $s3, $s3, 0x1
/* 46808 8006B408 00031080 */ sll $v0, $v1, 2
/* 4680C 8006B40C 00431021 */ addu $v0, $v0, $v1
/* 46810 8006B410 00021040 */ sll $v0, $v0, 1
/* 46814 8006B414 02421023 */ subu $v0, $s2, $v0
/* 46818 8006B418 00021400 */ sll $v0, $v0, 16
/* 4681C 8006B41C 00029403 */ sra $s2, $v0, 16
/* 46820 8006B420 26430030 */ addiu $v1, $s2, 0x30
/* 46824 8006B424 A2630000 */ sb $v1, 0x0($s3)
/* 46828 8006B428 8E220008 */ lw $v0, 0x8($s1)
/* 4682C 8006B42C 8E240014 */ lw $a0, 0x14($s1)
/* 46830 8006B430 26730001 */ addiu $s3, $s3, 0x1
/* 46834 8006B434 00441021 */ addu $v0, $v0, $a0
/* 46838 8006B438 02621023 */ subu $v0, $s3, $v0
/* 4683C 8006B43C AE22001C */ sw $v0, 0x1C($s1)
.LIQUE_8006B440:
/* 46840 8006B440 8E220030 */ lw $v0, 0x30($s1)
/* 46844 8006B444 24030010 */ addiu $v1, $zero, 0x10
/* 46848 8006B448 30420014 */ andi $v0, $v0, 0x14
/* 4684C 8006B44C 14430010 */ bne $v0, $v1, .LIQUE_8006B490
/* 46850 8006B450 8FBF0024 */ lw $ra, 0x24($sp)
/* 46854 8006B454 8E22000C */ lw $v0, 0xC($s1)
/* 46858 8006B458 8E230014 */ lw $v1, 0x14($s1)
/* 4685C 8006B45C 8E240018 */ lw $a0, 0x18($s1)
/* 46860 8006B460 8E25001C */ lw $a1, 0x1C($s1)
/* 46864 8006B464 8E260020 */ lw $a2, 0x20($s1)
/* 46868 8006B468 00431021 */ addu $v0, $v0, $v1
/* 4686C 8006B46C 00441021 */ addu $v0, $v0, $a0
/* 46870 8006B470 00451021 */ addu $v0, $v0, $a1
/* 46874 8006B474 8E240028 */ lw $a0, 0x28($s1)
/* 46878 8006B478 00461021 */ addu $v0, $v0, $a2
/* 4687C 8006B47C 0044182A */ slt $v1, $v0, $a0
/* 46880 8006B480 10600003 */ beqz $v1, .LIQUE_8006B490
/* 46884 8006B484 00821023 */ subu $v0, $a0, $v0
/* 46888 8006B488 AE220010 */ sw $v0, 0x10($s1)
/* 4688C 8006B48C 8FBF0024 */ lw $ra, 0x24($sp)
.LIQUE_8006B490:
/* 46890 8006B490 8FB40020 */ lw $s4, 0x20($sp)
/* 46894 8006B494 8FB3001C */ lw $s3, 0x1C($sp)
/* 46898 8006B498 8FB20018 */ lw $s2, 0x18($sp)
/* 4689C 8006B49C 8FB10014 */ lw $s1, 0x14($sp)
/* 468A0 8006B4A0 8FB00010 */ lw $s0, 0x10($sp)
/* 468A4 8006B4A4 03E00008 */ jr $ra
/* 468A8 8006B4A8 27BD0028 */ addiu $sp, $sp, 0x28
/* 468AC 8006B4AC 00000000 */ nop

View File

@ -1,168 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel _Litob
/* 45C80 8006A880 27BDFFA0 */ addiu $sp, $sp, -0x60
/* 45C84 8006A884 AFB3004C */ sw $s3, 0x4C($sp)
/* 45C88 8006A888 00809821 */ addu $s3, $a0, $zero
/* 45C8C 8006A88C 00052E00 */ sll $a1, $a1, 24
/* 45C90 8006A890 00052E03 */ sra $a1, $a1, 24
/* 45C94 8006A894 24020058 */ addiu $v0, $zero, 0x58
/* 45C98 8006A898 AFBF005C */ sw $ra, 0x5C($sp)
/* 45C9C 8006A89C AFB60058 */ sw $s6, 0x58($sp)
/* 45CA0 8006A8A0 AFB50054 */ sw $s5, 0x54($sp)
/* 45CA4 8006A8A4 AFB40050 */ sw $s4, 0x50($sp)
/* 45CA8 8006A8A8 AFB20048 */ sw $s2, 0x48($sp)
/* 45CAC 8006A8AC AFB10044 */ sw $s1, 0x44($sp)
/* 45CB0 8006A8B0 14A20005 */ bne $a1, $v0, .LIQUE_8006A8C8
/* 45CB4 8006A8B4 AFB00040 */ sw $s0, 0x40($sp)
/* 45CB8 8006A8B8 3C168009 */ lui $s6, %hi(xlitob_udigs)
/* 45CBC 8006A8BC 26D645D4 */ addiu $s6, $s6, %lo(xlitob_udigs)
/* 45CC0 8006A8C0 0801AA35 */ j .LIQUE_8006A8D4
/* 45CC4 8006A8C4 2402006F */ addiu $v0, $zero, 0x6F
.LIQUE_8006A8C8:
/* 45CC8 8006A8C8 3C168009 */ lui $s6, %hi(xlitob_ldigs)
/* 45CCC 8006A8CC 26D645C0 */ addiu $s6, $s6, %lo(xlitob_ldigs)
/* 45CD0 8006A8D0 2402006F */ addiu $v0, $zero, 0x6F
.LIQUE_8006A8D4:
/* 45CD4 8006A8D4 10A20007 */ beq $a1, $v0, .LIQUE_8006A8F4
/* 45CD8 8006A8D8 24020078 */ addiu $v0, $zero, 0x78
/* 45CDC 8006A8DC 10A20003 */ beq $a1, $v0, .LIQUE_8006A8EC
/* 45CE0 8006A8E0 24020058 */ addiu $v0, $zero, 0x58
/* 45CE4 8006A8E4 14A20004 */ bne $a1, $v0, .LIQUE_8006A8F8
/* 45CE8 8006A8E8 2414000A */ addiu $s4, $zero, 0xA
.LIQUE_8006A8EC:
/* 45CEC 8006A8EC 0801AA3E */ j .LIQUE_8006A8F8
/* 45CF0 8006A8F0 24140010 */ addiu $s4, $zero, 0x10
.LIQUE_8006A8F4:
/* 45CF4 8006A8F4 24140008 */ addiu $s4, $zero, 0x8
.LIQUE_8006A8F8:
/* 45CF8 8006A8F8 8E700000 */ lw $s0, 0x0($s3)
/* 45CFC 8006A8FC 8E710004 */ lw $s1, 0x4($s3)
/* 45D00 8006A900 24020064 */ addiu $v0, $zero, 0x64
/* 45D04 8006A904 10A20004 */ beq $a1, $v0, .LIQUE_8006A918
/* 45D08 8006A908 24120018 */ addiu $s2, $zero, 0x18
/* 45D0C 8006A90C 24020069 */ addiu $v0, $zero, 0x69
/* 45D10 8006A910 14A20009 */ bne $a1, $v0, .LIQUE_8006A938
/* 45D14 8006A914 02301025 */ or $v0, $s1, $s0
.LIQUE_8006A918:
/* 45D18 8006A918 8E620000 */ lw $v0, 0x0($s3)
/* 45D1C 8006A91C 04410006 */ bgez $v0, .LIQUE_8006A938
/* 45D20 8006A920 02301025 */ or $v0, $s1, $s0
/* 45D24 8006A924 00118823 */ negu $s1, $s1
/* 45D28 8006A928 00108023 */ negu $s0, $s0
/* 45D2C 8006A92C 0011102B */ sltu $v0, $zero, $s1
/* 45D30 8006A930 02028023 */ subu $s0, $s0, $v0
/* 45D34 8006A934 02301025 */ or $v0, $s1, $s0
.LIQUE_8006A938:
/* 45D38 8006A938 14400004 */ bnez $v0, .LIQUE_8006A94C
/* 45D3C 8006A93C 02803821 */ addu $a3, $s4, $zero
/* 45D40 8006A940 8E620024 */ lw $v0, 0x24($s3)
/* 45D44 8006A944 1040000B */ beqz $v0, .LIQUE_8006A974
/* 45D48 8006A948 0014AFC3 */ sra $s5, $s4, 31
.LIQUE_8006A94C:
/* 45D4C 8006A94C 00003021 */ addu $a2, $zero, $zero
/* 45D50 8006A950 02002021 */ addu $a0, $s0, $zero
/* 45D54 8006A954 0C01B7A0 */ jal __umoddi3
/* 45D58 8006A958 02202821 */ addu $a1, $s1, $zero
/* 45D5C 8006A95C 02C32021 */ addu $a0, $s6, $v1
/* 45D60 8006A960 90850000 */ lbu $a1, 0x0($a0)
/* 45D64 8006A964 24120017 */ addiu $s2, $zero, 0x17
/* 45D68 8006A968 A3A5002F */ sb $a1, 0x2F($sp)
/* 45D6C 8006A96C 02803821 */ addu $a3, $s4, $zero
/* 45D70 8006A970 0014AFC3 */ sra $s5, $s4, 31
.LIQUE_8006A974:
/* 45D74 8006A974 02A03021 */ addu $a2, $s5, $zero
/* 45D78 8006A978 02002021 */ addu $a0, $s0, $zero
/* 45D7C 8006A97C 0C01B648 */ jal __udivdi3
/* 45D80 8006A980 02202821 */ addu $a1, $s1, $zero
/* 45D84 8006A984 AE620000 */ sw $v0, 0x0($s3)
/* 45D88 8006A988 AE630004 */ sw $v1, 0x4($s3)
/* 45D8C 8006A98C 8E620000 */ lw $v0, 0x0($s3)
/* 45D90 8006A990 1C400006 */ bgtz $v0, .LIQUE_8006A9AC
/* 45D94 8006A994 00000000 */ nop
/* 45D98 8006A998 5440001C */ bnel $v0, $zero, .LIQUE_8006AA0C
/* 45D9C 8006A99C 27A50018 */ addiu $a1, $sp, 0x18
/* 45DA0 8006A9A0 8E620004 */ lw $v0, 0x4($s3)
.LIQUE_8006A9A4:
/* 45DA4 8006A9A4 10400019 */ beqz $v0, .LIQUE_8006AA0C
/* 45DA8 8006A9A8 27A50018 */ addiu $a1, $sp, 0x18
.LIQUE_8006A9AC:
/* 45DAC 8006A9AC 1A400016 */ blez $s2, .LIQUE_8006AA08
/* 45DB0 8006A9B0 02801821 */ addu $v1, $s4, $zero
/* 45DB4 8006A9B4 02A01021 */ addu $v0, $s5, $zero
/* 45DB8 8006A9B8 8E660000 */ lw $a2, 0x0($s3)
/* 45DBC 8006A9BC 8E670004 */ lw $a3, 0x4($s3)
/* 45DC0 8006A9C0 AFA20010 */ sw $v0, 0x10($sp)
/* 45DC4 8006A9C4 AFA30014 */ sw $v1, 0x14($sp)
/* 45DC8 8006A9C8 0C01B327 */ jal lldiv
/* 45DCC 8006A9CC 27A40030 */ addiu $a0, $sp, 0x30
/* 45DD0 8006A9D0 2652FFFF */ addiu $s2, $s2, -0x1
/* 45DD4 8006A9D4 8FA3003C */ lw $v1, 0x3C($sp)
/* 45DD8 8006A9D8 8FA80030 */ lw $t0, 0x30($sp)
/* 45DDC 8006A9DC 8FA90034 */ lw $t1, 0x34($sp)
/* 45DE0 8006A9E0 02C31821 */ addu $v1, $s6, $v1
/* 45DE4 8006A9E4 AE680000 */ sw $t0, 0x0($s3)
/* 45DE8 8006A9E8 AE690004 */ sw $t1, 0x4($s3)
/* 45DEC 8006A9EC 90640000 */ lbu $a0, 0x0($v1)
/* 45DF0 8006A9F0 8E630000 */ lw $v1, 0x0($s3)
/* 45DF4 8006A9F4 03B21021 */ addu $v0, $sp, $s2
/* 45DF8 8006A9F8 1C60FFEC */ bgtz $v1, .LIQUE_8006A9AC
/* 45DFC 8006A9FC A0440018 */ sb $a0, 0x18($v0)
/* 45E00 8006AA00 5060FFE8 */ beql $v1, $zero, .LIQUE_8006A9A4
/* 45E04 8006AA04 8E620004 */ lw $v0, 0x4($s3)
.LIQUE_8006AA08:
/* 45E08 8006AA08 27A50018 */ addiu $a1, $sp, 0x18
.LIQUE_8006AA0C:
/* 45E0C 8006AA0C 00B22821 */ addu $a1, $a1, $s2
/* 45E10 8006AA10 24020018 */ addiu $v0, $zero, 0x18
/* 45E14 8006AA14 00521023 */ subu $v0, $v0, $s2
/* 45E18 8006AA18 8E640008 */ lw $a0, 0x8($s3)
/* 45E1C 8006AA1C 00403021 */ addu $a2, $v0, $zero
/* 45E20 8006AA20 0C018B09 */ jal memcpy
/* 45E24 8006AA24 AE620014 */ sw $v0, 0x14($s3)
/* 45E28 8006AA28 8E640014 */ lw $a0, 0x14($s3)
/* 45E2C 8006AA2C 8E630024 */ lw $v1, 0x24($s3)
/* 45E30 8006AA30 0083102A */ slt $v0, $a0, $v1
/* 45E34 8006AA34 10400002 */ beqz $v0, .LIQUE_8006AA40
/* 45E38 8006AA38 00641023 */ subu $v0, $v1, $a0
/* 45E3C 8006AA3C AE620010 */ sw $v0, 0x10($s3)
.LIQUE_8006AA40:
/* 45E40 8006AA40 04610011 */ bgez $v1, .LIQUE_8006AA88
/* 45E44 8006AA44 8FBF005C */ lw $ra, 0x5C($sp)
/* 45E48 8006AA48 8E620030 */ lw $v0, 0x30($s3)
/* 45E4C 8006AA4C 24030010 */ addiu $v1, $zero, 0x10
/* 45E50 8006AA50 30420014 */ andi $v0, $v0, 0x14
/* 45E54 8006AA54 1443000D */ bne $v0, $v1, .LIQUE_8006AA8C
/* 45E58 8006AA58 8FB60058 */ lw $s6, 0x58($sp)
/* 45E5C 8006AA5C 8E620028 */ lw $v0, 0x28($s3)
/* 45E60 8006AA60 8E63000C */ lw $v1, 0xC($s3)
/* 45E64 8006AA64 00431023 */ subu $v0, $v0, $v1
/* 45E68 8006AA68 8E630010 */ lw $v1, 0x10($s3)
/* 45E6C 8006AA6C 8E640014 */ lw $a0, 0x14($s3)
/* 45E70 8006AA70 00431023 */ subu $v0, $v0, $v1
/* 45E74 8006AA74 00449023 */ subu $s2, $v0, $a0
/* 45E78 8006AA78 1A400004 */ blez $s2, .LIQUE_8006AA8C
/* 45E7C 8006AA7C 00721021 */ addu $v0, $v1, $s2
/* 45E80 8006AA80 AE620010 */ sw $v0, 0x10($s3)
/* 45E84 8006AA84 8FBF005C */ lw $ra, 0x5C($sp)
.LIQUE_8006AA88:
/* 45E88 8006AA88 8FB60058 */ lw $s6, 0x58($sp)
.LIQUE_8006AA8C:
/* 45E8C 8006AA8C 8FB50054 */ lw $s5, 0x54($sp)
/* 45E90 8006AA90 8FB40050 */ lw $s4, 0x50($sp)
/* 45E94 8006AA94 8FB3004C */ lw $s3, 0x4C($sp)
/* 45E98 8006AA98 8FB20048 */ lw $s2, 0x48($sp)
/* 45E9C 8006AA9C 8FB10044 */ lw $s1, 0x44($sp)
/* 45EA0 8006AAA0 8FB00040 */ lw $s0, 0x40($sp)
/* 45EA4 8006AAA4 03E00008 */ jr $ra
/* 45EA8 8006AAA8 27BD0060 */ addiu $sp, $sp, 0x60
/* 45EAC 8006AAAC 00000000 */ nop

View File

@ -1,766 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel _Printf
/* 3E050 80062C50 27BDFF80 */ addiu $sp, $sp, -0x80
/* 3E054 80062C54 AFB40078 */ sw $s4, 0x78($sp)
/* 3E058 80062C58 0080A021 */ addu $s4, $a0, $zero
/* 3E05C 80062C5C AFB30074 */ sw $s3, 0x74($sp)
/* 3E060 80062C60 00A09821 */ addu $s3, $a1, $zero
/* 3E064 80062C64 00C02821 */ addu $a1, $a2, $zero
/* 3E068 80062C68 AFBF007C */ sw $ra, 0x7C($sp)
/* 3E06C 80062C6C AFB20070 */ sw $s2, 0x70($sp)
/* 3E070 80062C70 AFB1006C */ sw $s1, 0x6C($sp)
/* 3E074 80062C74 AFB00068 */ sw $s0, 0x68($sp)
/* 3E078 80062C78 AFA7008C */ sw $a3, 0x8C($sp)
/* 3E07C 80062C7C AFA0003C */ sw $zero, 0x3C($sp)
.LIQUE_80062C80:
/* 3E080 80062C80 80B10000 */ lb $s1, 0x0($a1)
/* 3E084 80062C84 12200008 */ beqz $s1, .LIQUE_80062CA8
/* 3E088 80062C88 00A09021 */ addu $s2, $a1, $zero
/* 3E08C 80062C8C 24020025 */ addiu $v0, $zero, 0x25
.LIQUE_80062C90:
/* 3E090 80062C90 12220006 */ beq $s1, $v0, .LIQUE_80062CAC
/* 3E094 80062C94 02458023 */ subu $s0, $s2, $a1
/* 3E098 80062C98 26520001 */ addiu $s2, $s2, 0x1
/* 3E09C 80062C9C 82510000 */ lb $s1, 0x0($s2)
/* 3E0A0 80062CA0 1620FFFB */ bnez $s1, .LIQUE_80062C90
/* 3E0A4 80062CA4 00000000 */ nop
.LIQUE_80062CA8:
/* 3E0A8 80062CA8 02458023 */ subu $s0, $s2, $a1
.LIQUE_80062CAC:
/* 3E0AC 80062CAC 1A000008 */ blez $s0, .LIQUE_80062CD0
/* 3E0B0 80062CB0 02602021 */ addu $a0, $s3, $zero
/* 3E0B4 80062CB4 0280F809 */ jalr $s4
/* 3E0B8 80062CB8 02003021 */ addu $a2, $s0, $zero
/* 3E0BC 80062CBC 00409821 */ addu $s3, $v0, $zero
/* 3E0C0 80062CC0 12600129 */ beqz $s3, .LIQUE_80063168
/* 3E0C4 80062CC4 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E0C8 80062CC8 00501021 */ addu $v0, $v0, $s0
/* 3E0CC 80062CCC AFA2003C */ sw $v0, 0x3C($sp)
.LIQUE_80062CD0:
/* 3E0D0 80062CD0 12200125 */ beqz $s1, .LIQUE_80063168
/* 3E0D4 80062CD4 26520001 */ addiu $s2, $s2, 0x1
/* 3E0D8 80062CD8 3C10800A */ lui $s0, %hi(D_IQUE_80098730)
/* 3E0DC 80062CDC 26108730 */ addiu $s0, $s0, %lo(D_IQUE_80098730)
/* 3E0E0 80062CE0 3C11800A */ lui $s1, %hi(D_IQUE_80098750)
/* 3E0E4 80062CE4 26318750 */ addiu $s1, $s1, %lo(D_IQUE_80098750)
/* 3E0E8 80062CE8 08018B44 */ j .LIQUE_80062D10
/* 3E0EC 80062CEC AFA00040 */ sw $zero, 0x40($sp)
.LIQUE_80062CF0:
/* 3E0F0 80062CF0 00021080 */ sll $v0, $v0, 2
/* 3E0F4 80062CF4 8FA30040 */ lw $v1, 0x40($sp)
/* 3E0F8 80062CF8 3C04800A */ lui $a0, %hi(D_IQUE_80098738)
/* 3E0FC 80062CFC 00822021 */ addu $a0, $a0, $v0
/* 3E100 80062D00 8C848738 */ lw $a0, %lo(D_IQUE_80098738)($a0)
/* 3E104 80062D04 26520001 */ addiu $s2, $s2, 0x1
/* 3E108 80062D08 00641825 */ or $v1, $v1, $a0
/* 3E10C 80062D0C AFA30040 */ sw $v1, 0x40($sp)
.LIQUE_80062D10:
/* 3E110 80062D10 82450000 */ lb $a1, 0x0($s2)
/* 3E114 80062D14 0C018AF4 */ jal strchr
/* 3E118 80062D18 02002021 */ addu $a0, $s0, $zero
/* 3E11C 80062D1C 1440FFF4 */ bnez $v0, .LIQUE_80062CF0
/* 3E120 80062D20 00501023 */ subu $v0, $v0, $s0
/* 3E124 80062D24 82430000 */ lb $v1, 0x0($s2)
/* 3E128 80062D28 2402002A */ addiu $v0, $zero, 0x2A
/* 3E12C 80062D2C 5462001E */ bnel $v1, $v0, .LIQUE_80062DA8
/* 3E130 80062D30 AFA00038 */ sw $zero, 0x38($sp)
/* 3E134 80062D34 8FA2008C */ lw $v0, 0x8C($sp)
/* 3E138 80062D38 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E13C 80062D3C 24420003 */ addiu $v0, $v0, 0x3
/* 3E140 80062D40 00431024 */ and $v0, $v0, $v1
/* 3E144 80062D44 24420004 */ addiu $v0, $v0, 0x4
/* 3E148 80062D48 AFA2008C */ sw $v0, 0x8C($sp)
/* 3E14C 80062D4C 8C42FFFC */ lw $v0, -0x4($v0)
/* 3E150 80062D50 04410006 */ bgez $v0, .LIQUE_80062D6C
/* 3E154 80062D54 AFA20038 */ sw $v0, 0x38($sp)
/* 3E158 80062D58 8FA30040 */ lw $v1, 0x40($sp)
/* 3E15C 80062D5C 00021023 */ negu $v0, $v0
/* 3E160 80062D60 AFA20038 */ sw $v0, 0x38($sp)
/* 3E164 80062D64 34630004 */ ori $v1, $v1, 0x4
/* 3E168 80062D68 AFA30040 */ sw $v1, 0x40($sp)
.LIQUE_80062D6C:
/* 3E16C 80062D6C 26520001 */ addiu $s2, $s2, 0x1
/* 3E170 80062D70 08018B6F */ j .LIQUE_80062DBC
/* 3E174 80062D74 92450000 */ lbu $a1, 0x0($s2)
.LIQUE_80062D78:
/* 3E178 80062D78 8FA40038 */ lw $a0, 0x38($sp)
/* 3E17C 80062D7C 288203E7 */ slti $v0, $a0, 0x3E7
/* 3E180 80062D80 10400009 */ beqz $v0, .LIQUE_80062DA8
/* 3E184 80062D84 26520001 */ addiu $s2, $s2, 0x1
/* 3E188 80062D88 00041880 */ sll $v1, $a0, 2
/* 3E18C 80062D8C 00641821 */ addu $v1, $v1, $a0
/* 3E190 80062D90 00031840 */ sll $v1, $v1, 1
/* 3E194 80062D94 00061600 */ sll $v0, $a2, 24
/* 3E198 80062D98 00021603 */ sra $v0, $v0, 24
/* 3E19C 80062D9C 00621821 */ addu $v1, $v1, $v0
/* 3E1A0 80062DA0 2463FFD0 */ addiu $v1, $v1, -0x30
/* 3E1A4 80062DA4 AFA30038 */ sw $v1, 0x38($sp)
.LIQUE_80062DA8:
/* 3E1A8 80062DA8 92450000 */ lbu $a1, 0x0($s2)
/* 3E1AC 80062DAC 24A2FFD0 */ addiu $v0, $a1, -0x30
/* 3E1B0 80062DB0 2C42000A */ sltiu $v0, $v0, 0xA
/* 3E1B4 80062DB4 1440FFF0 */ bnez $v0, .LIQUE_80062D78
/* 3E1B8 80062DB8 00A03021 */ addu $a2, $a1, $zero
.LIQUE_80062DBC:
/* 3E1BC 80062DBC 00051600 */ sll $v0, $a1, 24
/* 3E1C0 80062DC0 00021603 */ sra $v0, $v0, 24
/* 3E1C4 80062DC4 2403002E */ addiu $v1, $zero, 0x2E
/* 3E1C8 80062DC8 10430004 */ beq $v0, $v1, .LIQUE_80062DDC
/* 3E1CC 80062DCC 2402FFFF */ addiu $v0, $zero, -0x1
/* 3E1D0 80062DD0 AFA20034 */ sw $v0, 0x34($sp)
/* 3E1D4 80062DD4 08018B98 */ j .LIQUE_80062E60
/* 3E1D8 80062DD8 92450000 */ lbu $a1, 0x0($s2)
.LIQUE_80062DDC:
/* 3E1DC 80062DDC 26520001 */ addiu $s2, $s2, 0x1
/* 3E1E0 80062DE0 82430000 */ lb $v1, 0x0($s2)
/* 3E1E4 80062DE4 2402002A */ addiu $v0, $zero, 0x2A
/* 3E1E8 80062DE8 54620018 */ bnel $v1, $v0, .LIQUE_80062E4C
/* 3E1EC 80062DEC AFA00034 */ sw $zero, 0x34($sp)
/* 3E1F0 80062DF0 8FA2008C */ lw $v0, 0x8C($sp)
/* 3E1F4 80062DF4 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E1F8 80062DF8 24420003 */ addiu $v0, $v0, 0x3
/* 3E1FC 80062DFC 00431024 */ and $v0, $v0, $v1
/* 3E200 80062E00 24420004 */ addiu $v0, $v0, 0x4
/* 3E204 80062E04 AFA2008C */ sw $v0, 0x8C($sp)
/* 3E208 80062E08 8C43FFFC */ lw $v1, -0x4($v0)
/* 3E20C 80062E0C 26520001 */ addiu $s2, $s2, 0x1
/* 3E210 80062E10 AFA30034 */ sw $v1, 0x34($sp)
/* 3E214 80062E14 08018B98 */ j .LIQUE_80062E60
/* 3E218 80062E18 92450000 */ lbu $a1, 0x0($s2)
.LIQUE_80062E1C:
/* 3E21C 80062E1C 8FA40034 */ lw $a0, 0x34($sp)
/* 3E220 80062E20 288203E7 */ slti $v0, $a0, 0x3E7
/* 3E224 80062E24 10400009 */ beqz $v0, .LIQUE_80062E4C
/* 3E228 80062E28 26520001 */ addiu $s2, $s2, 0x1
/* 3E22C 80062E2C 00041880 */ sll $v1, $a0, 2
/* 3E230 80062E30 00641821 */ addu $v1, $v1, $a0
/* 3E234 80062E34 00031840 */ sll $v1, $v1, 1
/* 3E238 80062E38 00061600 */ sll $v0, $a2, 24
/* 3E23C 80062E3C 00021603 */ sra $v0, $v0, 24
/* 3E240 80062E40 00621821 */ addu $v1, $v1, $v0
/* 3E244 80062E44 2463FFD0 */ addiu $v1, $v1, -0x30
/* 3E248 80062E48 AFA30034 */ sw $v1, 0x34($sp)
.LIQUE_80062E4C:
/* 3E24C 80062E4C 92450000 */ lbu $a1, 0x0($s2)
/* 3E250 80062E50 24A2FFD0 */ addiu $v0, $a1, -0x30
/* 3E254 80062E54 2C42000A */ sltiu $v0, $v0, 0xA
/* 3E258 80062E58 1440FFF0 */ bnez $v0, .LIQUE_80062E1C
/* 3E25C 80062E5C 00A03021 */ addu $a2, $a1, $zero
.LIQUE_80062E60:
/* 3E260 80062E60 02202021 */ addu $a0, $s1, $zero
/* 3E264 80062E64 00052E00 */ sll $a1, $a1, 24
/* 3E268 80062E68 0C018AF4 */ jal strchr
/* 3E26C 80062E6C 00052E03 */ sra $a1, $a1, 24
/* 3E270 80062E70 10400003 */ beqz $v0, .LIQUE_80062E80
/* 3E274 80062E74 00001021 */ addu $v0, $zero, $zero
/* 3E278 80062E78 92420000 */ lbu $v0, 0x0($s2)
/* 3E27C 80062E7C 26520001 */ addiu $s2, $s2, 0x1
.LIQUE_80062E80:
/* 3E280 80062E80 A3A20044 */ sb $v0, 0x44($sp)
/* 3E284 80062E84 00021600 */ sll $v0, $v0, 24
/* 3E288 80062E88 00022603 */ sra $a0, $v0, 24
/* 3E28C 80062E8C 2403006C */ addiu $v1, $zero, 0x6C
/* 3E290 80062E90 54830007 */ bnel $a0, $v1, .LIQUE_80062EB0
/* 3E294 80062E94 27A40010 */ addiu $a0, $sp, 0x10
/* 3E298 80062E98 82420000 */ lb $v0, 0x0($s2)
/* 3E29C 80062E9C 14440004 */ bne $v0, $a0, .LIQUE_80062EB0
/* 3E2A0 80062EA0 27A40010 */ addiu $a0, $sp, 0x10
/* 3E2A4 80062EA4 2402004C */ addiu $v0, $zero, 0x4C
/* 3E2A8 80062EA8 A3A20044 */ sb $v0, 0x44($sp)
/* 3E2AC 80062EAC 26520001 */ addiu $s2, $s2, 0x1
.LIQUE_80062EB0:
/* 3E2B0 80062EB0 27A5008C */ addiu $a1, $sp, 0x8C
/* 3E2B4 80062EB4 82460000 */ lb $a2, 0x0($s2)
/* 3E2B8 80062EB8 0C018C63 */ jal _Putfld
/* 3E2BC 80062EBC 27A70048 */ addiu $a3, $sp, 0x48
/* 3E2C0 80062EC0 8FA3001C */ lw $v1, 0x1C($sp)
/* 3E2C4 80062EC4 8FA20020 */ lw $v0, 0x20($sp)
/* 3E2C8 80062EC8 8FA40024 */ lw $a0, 0x24($sp)
/* 3E2CC 80062ECC 8FA50028 */ lw $a1, 0x28($sp)
/* 3E2D0 80062ED0 00621821 */ addu $v1, $v1, $v0
/* 3E2D4 80062ED4 00641821 */ addu $v1, $v1, $a0
/* 3E2D8 80062ED8 00651821 */ addu $v1, $v1, $a1
/* 3E2DC 80062EDC 8FA2002C */ lw $v0, 0x2C($sp)
/* 3E2E0 80062EE0 8FA40030 */ lw $a0, 0x30($sp)
/* 3E2E4 80062EE4 8FA50038 */ lw $a1, 0x38($sp)
/* 3E2E8 80062EE8 00621821 */ addu $v1, $v1, $v0
/* 3E2EC 80062EEC 00641821 */ addu $v1, $v1, $a0
/* 3E2F0 80062EF0 8FA20040 */ lw $v0, 0x40($sp)
/* 3E2F4 80062EF4 00A32823 */ subu $a1, $a1, $v1
/* 3E2F8 80062EF8 30420004 */ andi $v0, $v0, 0x4
/* 3E2FC 80062EFC 14400017 */ bnez $v0, .LIQUE_80062F5C
/* 3E300 80062F00 AFA50038 */ sw $a1, 0x38($sp)
/* 3E304 80062F04 18A00016 */ blez $a1, .LIQUE_80062F60
/* 3E308 80062F08 8FA6001C */ lw $a2, 0x1C($sp)
/* 3E30C 80062F0C 00A08821 */ addu $s1, $a1, $zero
/* 3E310 80062F10 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80062F14:
/* 3E314 80062F14 14400002 */ bnez $v0, .LIQUE_80062F20
/* 3E318 80062F18 02208021 */ addu $s0, $s1, $zero
/* 3E31C 80062F1C 24100020 */ addiu $s0, $zero, 0x20
.LIQUE_80062F20:
/* 3E320 80062F20 5A00000C */ blezl $s0, .LIQUE_80062F54
/* 3E324 80062F24 02308823 */ subu $s1, $s1, $s0
/* 3E328 80062F28 02602021 */ addu $a0, $s3, $zero
/* 3E32C 80062F2C 3C058009 */ lui $a1, %hi(D_IQUE_80093200)
/* 3E330 80062F30 24A53200 */ addiu $a1, $a1, %lo(D_IQUE_80093200)
/* 3E334 80062F34 0280F809 */ jalr $s4
/* 3E338 80062F38 02003021 */ addu $a2, $s0, $zero
/* 3E33C 80062F3C 00409821 */ addu $s3, $v0, $zero
/* 3E340 80062F40 12600089 */ beqz $s3, .LIQUE_80063168
/* 3E344 80062F44 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E348 80062F48 00501021 */ addu $v0, $v0, $s0
/* 3E34C 80062F4C AFA2003C */ sw $v0, 0x3C($sp)
/* 3E350 80062F50 02308823 */ subu $s1, $s1, $s0
.LIQUE_80062F54:
/* 3E354 80062F54 1E20FFEF */ bgtz $s1, .LIQUE_80062F14
/* 3E358 80062F58 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80062F5C:
/* 3E35C 80062F5C 8FA6001C */ lw $a2, 0x1C($sp)
.LIQUE_80062F60:
/* 3E360 80062F60 18C00009 */ blez $a2, .LIQUE_80062F88
/* 3E364 80062F64 02602021 */ addu $a0, $s3, $zero
/* 3E368 80062F68 0280F809 */ jalr $s4
/* 3E36C 80062F6C 27A50048 */ addiu $a1, $sp, 0x48
/* 3E370 80062F70 00409821 */ addu $s3, $v0, $zero
/* 3E374 80062F74 1260007C */ beqz $s3, .LIQUE_80063168
/* 3E378 80062F78 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E37C 80062F7C 8FA3001C */ lw $v1, 0x1C($sp)
/* 3E380 80062F80 00431021 */ addu $v0, $v0, $v1
/* 3E384 80062F84 AFA2003C */ sw $v0, 0x3C($sp)
.LIQUE_80062F88:
/* 3E388 80062F88 8FA20020 */ lw $v0, 0x20($sp)
/* 3E38C 80062F8C 18400016 */ blez $v0, .LIQUE_80062FE8
/* 3E390 80062F90 8FA60024 */ lw $a2, 0x24($sp)
/* 3E394 80062F94 00408821 */ addu $s1, $v0, $zero
/* 3E398 80062F98 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80062F9C:
/* 3E39C 80062F9C 14400002 */ bnez $v0, .LIQUE_80062FA8
/* 3E3A0 80062FA0 02208021 */ addu $s0, $s1, $zero
/* 3E3A4 80062FA4 24100020 */ addiu $s0, $zero, 0x20
.LIQUE_80062FA8:
/* 3E3A8 80062FA8 5A00000C */ blezl $s0, .LIQUE_80062FDC
/* 3E3AC 80062FAC 02308823 */ subu $s1, $s1, $s0
/* 3E3B0 80062FB0 02602021 */ addu $a0, $s3, $zero
/* 3E3B4 80062FB4 3C058009 */ lui $a1, %hi(D_IQUE_80093224)
/* 3E3B8 80062FB8 24A53224 */ addiu $a1, $a1, %lo(D_IQUE_80093224)
/* 3E3BC 80062FBC 0280F809 */ jalr $s4
/* 3E3C0 80062FC0 02003021 */ addu $a2, $s0, $zero
/* 3E3C4 80062FC4 00409821 */ addu $s3, $v0, $zero
/* 3E3C8 80062FC8 12600067 */ beqz $s3, .LIQUE_80063168
/* 3E3CC 80062FCC 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E3D0 80062FD0 00501021 */ addu $v0, $v0, $s0
/* 3E3D4 80062FD4 AFA2003C */ sw $v0, 0x3C($sp)
/* 3E3D8 80062FD8 02308823 */ subu $s1, $s1, $s0
.LIQUE_80062FDC:
/* 3E3DC 80062FDC 1E20FFEF */ bgtz $s1, .LIQUE_80062F9C
/* 3E3E0 80062FE0 2E220021 */ sltiu $v0, $s1, 0x21
/* 3E3E4 80062FE4 8FA60024 */ lw $a2, 0x24($sp)
.LIQUE_80062FE8:
/* 3E3E8 80062FE8 18C00009 */ blez $a2, .LIQUE_80063010
/* 3E3EC 80062FEC 8FA50018 */ lw $a1, 0x18($sp)
/* 3E3F0 80062FF0 0280F809 */ jalr $s4
/* 3E3F4 80062FF4 02602021 */ addu $a0, $s3, $zero
/* 3E3F8 80062FF8 00409821 */ addu $s3, $v0, $zero
/* 3E3FC 80062FFC 1260005A */ beqz $s3, .LIQUE_80063168
/* 3E400 80063000 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E404 80063004 8FA30024 */ lw $v1, 0x24($sp)
/* 3E408 80063008 00431021 */ addu $v0, $v0, $v1
/* 3E40C 8006300C AFA2003C */ sw $v0, 0x3C($sp)
.LIQUE_80063010:
/* 3E410 80063010 8FA20028 */ lw $v0, 0x28($sp)
/* 3E414 80063014 18400016 */ blez $v0, .LIQUE_80063070
/* 3E418 80063018 8FA6002C */ lw $a2, 0x2C($sp)
/* 3E41C 8006301C 00408821 */ addu $s1, $v0, $zero
/* 3E420 80063020 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80063024:
/* 3E424 80063024 14400002 */ bnez $v0, .LIQUE_80063030
/* 3E428 80063028 02208021 */ addu $s0, $s1, $zero
/* 3E42C 8006302C 24100020 */ addiu $s0, $zero, 0x20
.LIQUE_80063030:
/* 3E430 80063030 5A00000C */ blezl $s0, .LIQUE_80063064
/* 3E434 80063034 02308823 */ subu $s1, $s1, $s0
/* 3E438 80063038 02602021 */ addu $a0, $s3, $zero
/* 3E43C 8006303C 3C058009 */ lui $a1, %hi(D_IQUE_80093224)
/* 3E440 80063040 24A53224 */ addiu $a1, $a1, %lo(D_IQUE_80093224)
/* 3E444 80063044 0280F809 */ jalr $s4
/* 3E448 80063048 02003021 */ addu $a2, $s0, $zero
/* 3E44C 8006304C 00409821 */ addu $s3, $v0, $zero
/* 3E450 80063050 12600045 */ beqz $s3, .LIQUE_80063168
/* 3E454 80063054 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E458 80063058 00501021 */ addu $v0, $v0, $s0
/* 3E45C 8006305C AFA2003C */ sw $v0, 0x3C($sp)
/* 3E460 80063060 02308823 */ subu $s1, $s1, $s0
.LIQUE_80063064:
/* 3E464 80063064 1E20FFEF */ bgtz $s1, .LIQUE_80063024
/* 3E468 80063068 2E220021 */ sltiu $v0, $s1, 0x21
/* 3E46C 8006306C 8FA6002C */ lw $a2, 0x2C($sp)
.LIQUE_80063070:
/* 3E470 80063070 18C0000B */ blez $a2, .LIQUE_800630A0
/* 3E474 80063074 8FA30018 */ lw $v1, 0x18($sp)
/* 3E478 80063078 8FA50024 */ lw $a1, 0x24($sp)
/* 3E47C 8006307C 02602021 */ addu $a0, $s3, $zero
/* 3E480 80063080 0280F809 */ jalr $s4
/* 3E484 80063084 00652821 */ addu $a1, $v1, $a1
/* 3E488 80063088 00409821 */ addu $s3, $v0, $zero
/* 3E48C 8006308C 12600036 */ beqz $s3, .LIQUE_80063168
/* 3E490 80063090 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E494 80063094 8FA3002C */ lw $v1, 0x2C($sp)
/* 3E498 80063098 00431021 */ addu $v0, $v0, $v1
/* 3E49C 8006309C AFA2003C */ sw $v0, 0x3C($sp)
.LIQUE_800630A0:
/* 3E4A0 800630A0 8FA20030 */ lw $v0, 0x30($sp)
/* 3E4A4 800630A4 58400016 */ blezl $v0, .LIQUE_80063100
/* 3E4A8 800630A8 8FA20040 */ lw $v0, 0x40($sp)
/* 3E4AC 800630AC 00408821 */ addu $s1, $v0, $zero
/* 3E4B0 800630B0 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_800630B4:
/* 3E4B4 800630B4 14400002 */ bnez $v0, .LIQUE_800630C0
/* 3E4B8 800630B8 02208021 */ addu $s0, $s1, $zero
/* 3E4BC 800630BC 24100020 */ addiu $s0, $zero, 0x20
.LIQUE_800630C0:
/* 3E4C0 800630C0 5A00000C */ blezl $s0, .LIQUE_800630F4
/* 3E4C4 800630C4 02308823 */ subu $s1, $s1, $s0
/* 3E4C8 800630C8 02602021 */ addu $a0, $s3, $zero
/* 3E4CC 800630CC 3C058009 */ lui $a1, %hi(D_IQUE_80093224)
/* 3E4D0 800630D0 24A53224 */ addiu $a1, $a1, %lo(D_IQUE_80093224)
/* 3E4D4 800630D4 0280F809 */ jalr $s4
/* 3E4D8 800630D8 02003021 */ addu $a2, $s0, $zero
/* 3E4DC 800630DC 00409821 */ addu $s3, $v0, $zero
/* 3E4E0 800630E0 12600021 */ beqz $s3, .LIQUE_80063168
/* 3E4E4 800630E4 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E4E8 800630E8 00501021 */ addu $v0, $v0, $s0
/* 3E4EC 800630EC AFA2003C */ sw $v0, 0x3C($sp)
/* 3E4F0 800630F0 02308823 */ subu $s1, $s1, $s0
.LIQUE_800630F4:
/* 3E4F4 800630F4 1E20FFEF */ bgtz $s1, .LIQUE_800630B4
/* 3E4F8 800630F8 2E220021 */ sltiu $v0, $s1, 0x21
/* 3E4FC 800630FC 8FA20040 */ lw $v0, 0x40($sp)
.LIQUE_80063100:
/* 3E500 80063100 30420004 */ andi $v0, $v0, 0x4
/* 3E504 80063104 10400016 */ beqz $v0, .LIQUE_80063160
/* 3E508 80063108 8FA20038 */ lw $v0, 0x38($sp)
/* 3E50C 8006310C 18400014 */ blez $v0, .LIQUE_80063160
/* 3E510 80063110 00408821 */ addu $s1, $v0, $zero
/* 3E514 80063114 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80063118:
/* 3E518 80063118 14400002 */ bnez $v0, .LIQUE_80063124
/* 3E51C 8006311C 02208021 */ addu $s0, $s1, $zero
/* 3E520 80063120 24100020 */ addiu $s0, $zero, 0x20
.LIQUE_80063124:
/* 3E524 80063124 5A00000C */ blezl $s0, .LIQUE_80063158
/* 3E528 80063128 02308823 */ subu $s1, $s1, $s0
/* 3E52C 8006312C 02602021 */ addu $a0, $s3, $zero
/* 3E530 80063130 3C058009 */ lui $a1, %hi(D_IQUE_80093200)
/* 3E534 80063134 24A53200 */ addiu $a1, $a1, %lo(D_IQUE_80093200)
/* 3E538 80063138 0280F809 */ jalr $s4
/* 3E53C 8006313C 02003021 */ addu $a2, $s0, $zero
/* 3E540 80063140 00409821 */ addu $s3, $v0, $zero
/* 3E544 80063144 12600008 */ beqz $s3, .LIQUE_80063168
/* 3E548 80063148 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E54C 8006314C 00501021 */ addu $v0, $v0, $s0
/* 3E550 80063150 AFA2003C */ sw $v0, 0x3C($sp)
/* 3E554 80063154 02308823 */ subu $s1, $s1, $s0
.LIQUE_80063158:
/* 3E558 80063158 1E20FFEF */ bgtz $s1, .LIQUE_80063118
/* 3E55C 8006315C 2E220021 */ sltiu $v0, $s1, 0x21
.LIQUE_80063160:
/* 3E560 80063160 08018B20 */ j .LIQUE_80062C80
/* 3E564 80063164 26450001 */ addiu $a1, $s2, 0x1
.LIQUE_80063168:
/* 3E568 80063168 8FA2003C */ lw $v0, 0x3C($sp)
/* 3E56C 8006316C 8FBF007C */ lw $ra, 0x7C($sp)
/* 3E570 80063170 8FB40078 */ lw $s4, 0x78($sp)
/* 3E574 80063174 8FB30074 */ lw $s3, 0x74($sp)
/* 3E578 80063178 8FB20070 */ lw $s2, 0x70($sp)
/* 3E57C 8006317C 8FB1006C */ lw $s1, 0x6C($sp)
/* 3E580 80063180 8FB00068 */ lw $s0, 0x68($sp)
/* 3E584 80063184 03E00008 */ jr $ra
/* 3E588 80063188 27BD0080 */ addiu $sp, $sp, 0x80
glabel _Putfld
/* 3E58C 8006318C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3E590 80063190 AFB00010 */ sw $s0, 0x10($sp)
/* 3E594 80063194 00808021 */ addu $s0, $a0, $zero
/* 3E598 80063198 00A04021 */ addu $t0, $a1, $zero
/* 3E59C 8006319C 00E04821 */ addu $t1, $a3, $zero
/* 3E5A0 800631A0 00063600 */ sll $a2, $a2, 24
/* 3E5A4 800631A4 00063603 */ sra $a2, $a2, 24
/* 3E5A8 800631A8 24C2FFDB */ addiu $v0, $a2, -0x25
/* 3E5AC 800631AC 00021600 */ sll $v0, $v0, 24
/* 3E5B0 800631B0 00021603 */ sra $v0, $v0, 24
/* 3E5B4 800631B4 2C430054 */ sltiu $v1, $v0, 0x54
/* 3E5B8 800631B8 AFBF0014 */ sw $ra, 0x14($sp)
/* 3E5BC 800631BC AE000020 */ sw $zero, 0x20($s0)
/* 3E5C0 800631C0 AE00001C */ sw $zero, 0x1C($s0)
/* 3E5C4 800631C4 AE000018 */ sw $zero, 0x18($s0)
/* 3E5C8 800631C8 AE000014 */ sw $zero, 0x14($s0)
/* 3E5CC 800631CC AE000010 */ sw $zero, 0x10($s0)
/* 3E5D0 800631D0 1060010E */ beqz $v1, .LIQUE_8006360C
/* 3E5D4 800631D4 AE00000C */ sw $zero, 0xC($s0)
/* 3E5D8 800631D8 00021080 */ sll $v0, $v0, 2
/* 3E5DC 800631DC 3C03800A */ lui $v1, %hi(jtbl_IQUE_80098758)
/* 3E5E0 800631E0 00621821 */ addu $v1, $v1, $v0
/* 3E5E4 800631E4 8C638758 */ lw $v1, %lo(jtbl_IQUE_80098758)($v1)
/* 3E5E8 800631E8 00600008 */ jr $v1
/* 3E5EC 800631EC 00000000 */ nop
glabel .LIQUE_800631F0
/* 3E5F0 800631F0 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E5F4 800631F4 8E04000C */ lw $a0, 0xC($s0)
/* 3E5F8 800631F8 8D020000 */ lw $v0, 0x0($t0)
/* 3E5FC 800631FC 01242821 */ addu $a1, $t1, $a0
/* 3E600 80063200 24840001 */ addiu $a0, $a0, 0x1
/* 3E604 80063204 24420003 */ addiu $v0, $v0, 0x3
/* 3E608 80063208 00431024 */ and $v0, $v0, $v1
/* 3E60C 8006320C 24420004 */ addiu $v0, $v0, 0x4
/* 3E610 80063210 AD020000 */ sw $v0, 0x0($t0)
/* 3E614 80063214 AE04000C */ sw $a0, 0xC($s0)
/* 3E618 80063218 8D030000 */ lw $v1, 0x0($t0)
/* 3E61C 8006321C 9062FFFF */ lbu $v0, -0x1($v1)
/* 3E620 80063220 08018D88 */ j .LIQUE_80063620
/* 3E624 80063224 A0A20000 */ sb $v0, 0x0($a1)
glabel .LIQUE_80063228
/* 3E628 80063228 82030034 */ lb $v1, 0x34($s0)
/* 3E62C 8006322C 2402006C */ addiu $v0, $zero, 0x6C
/* 3E630 80063230 1062000F */ beq $v1, $v0, .LIQUE_80063270
/* 3E634 80063234 2402004C */ addiu $v0, $zero, 0x4C
/* 3E638 80063238 5462000E */ bnel $v1, $v0, .LIQUE_80063274
/* 3E63C 8006323C 8D040000 */ lw $a0, 0x0($t0)
/* 3E640 80063240 8D020000 */ lw $v0, 0x0($t0)
/* 3E644 80063244 2403FFF8 */ addiu $v1, $zero, -0x8
/* 3E648 80063248 24420007 */ addiu $v0, $v0, 0x7
/* 3E64C 8006324C 00431024 */ and $v0, $v0, $v1
/* 3E650 80063250 24420008 */ addiu $v0, $v0, 0x8
/* 3E654 80063254 AD020000 */ sw $v0, 0x0($t0)
/* 3E658 80063258 8C44FFF8 */ lw $a0, -0x8($v0)
/* 3E65C 8006325C 8C45FFFC */ lw $a1, -0x4($v0)
/* 3E660 80063260 AE040000 */ sw $a0, 0x0($s0)
/* 3E664 80063264 AE050004 */ sw $a1, 0x4($s0)
/* 3E668 80063268 08018CA8 */ j .LIQUE_800632A0
/* 3E66C 8006326C 82030034 */ lb $v1, 0x34($s0)
.LIQUE_80063270:
/* 3E670 80063270 8D040000 */ lw $a0, 0x0($t0)
.LIQUE_80063274:
/* 3E674 80063274 2402FFFC */ addiu $v0, $zero, -0x4
/* 3E678 80063278 24840003 */ addiu $a0, $a0, 0x3
/* 3E67C 8006327C 00822024 */ and $a0, $a0, $v0
/* 3E680 80063280 24840004 */ addiu $a0, $a0, 0x4
/* 3E684 80063284 AD040000 */ sw $a0, 0x0($t0)
/* 3E688 80063288 8C85FFFC */ lw $a1, -0x4($a0)
/* 3E68C 8006328C 00A01821 */ addu $v1, $a1, $zero
/* 3E690 80063290 000517C3 */ sra $v0, $a1, 31
/* 3E694 80063294 AE020000 */ sw $v0, 0x0($s0)
/* 3E698 80063298 AE030004 */ sw $v1, 0x4($s0)
/* 3E69C 8006329C 82030034 */ lb $v1, 0x34($s0)
.LIQUE_800632A0:
/* 3E6A0 800632A0 24020068 */ addiu $v0, $zero, 0x68
/* 3E6A4 800632A4 54620008 */ bnel $v1, $v0, .LIQUE_800632C8
/* 3E6A8 800632A8 8E020000 */ lw $v0, 0x0($s0)
/* 3E6AC 800632AC 96040006 */ lhu $a0, 0x6($s0)
/* 3E6B0 800632B0 00042400 */ sll $a0, $a0, 16
/* 3E6B4 800632B4 00041C03 */ sra $v1, $a0, 16
/* 3E6B8 800632B8 000417C3 */ sra $v0, $a0, 31
/* 3E6BC 800632BC AE020000 */ sw $v0, 0x0($s0)
/* 3E6C0 800632C0 AE030004 */ sw $v1, 0x4($s0)
/* 3E6C4 800632C4 8E020000 */ lw $v0, 0x0($s0)
.LIQUE_800632C8:
/* 3E6C8 800632C8 04430004 */ bgezl $v0, .LIQUE_800632DC
/* 3E6CC 800632CC 8E030030 */ lw $v1, 0x30($s0)
/* 3E6D0 800632D0 8E02000C */ lw $v0, 0xC($s0)
/* 3E6D4 800632D4 08018CC0 */ j .LIQUE_80063300
/* 3E6D8 800632D8 2403002D */ addiu $v1, $zero, 0x2D
.LIQUE_800632DC:
/* 3E6DC 800632DC 30620002 */ andi $v0, $v1, 0x2
/* 3E6E0 800632E0 50400004 */ beql $v0, $zero, .LIQUE_800632F4
/* 3E6E4 800632E4 30620001 */ andi $v0, $v1, 0x1
/* 3E6E8 800632E8 8E02000C */ lw $v0, 0xC($s0)
/* 3E6EC 800632EC 08018CC0 */ j .LIQUE_80063300
/* 3E6F0 800632F0 2403002B */ addiu $v1, $zero, 0x2B
.LIQUE_800632F4:
/* 3E6F4 800632F4 10400006 */ beqz $v0, .LIQUE_80063310
/* 3E6F8 800632F8 24030020 */ addiu $v1, $zero, 0x20
/* 3E6FC 800632FC 8E02000C */ lw $v0, 0xC($s0)
.LIQUE_80063300:
/* 3E700 80063300 01222021 */ addu $a0, $t1, $v0
/* 3E704 80063304 24420001 */ addiu $v0, $v0, 0x1
/* 3E708 80063308 A0830000 */ sb $v1, 0x0($a0)
/* 3E70C 8006330C AE02000C */ sw $v0, 0xC($s0)
.LIQUE_80063310:
/* 3E710 80063310 02002021 */ addu $a0, $s0, $zero
/* 3E714 80063314 8E02000C */ lw $v0, 0xC($s0)
/* 3E718 80063318 00C02821 */ addu $a1, $a2, $zero
/* 3E71C 8006331C 08018D67 */ j .LIQUE_8006359C
/* 3E720 80063320 01221021 */ addu $v0, $t1, $v0
glabel .LIQUE_80063324
/* 3E724 80063324 82030034 */ lb $v1, 0x34($s0)
/* 3E728 80063328 2402006C */ addiu $v0, $zero, 0x6C
/* 3E72C 8006332C 1062000F */ beq $v1, $v0, .LIQUE_8006336C
/* 3E730 80063330 2402004C */ addiu $v0, $zero, 0x4C
/* 3E734 80063334 5462000E */ bnel $v1, $v0, .LIQUE_80063370
/* 3E738 80063338 8D040000 */ lw $a0, 0x0($t0)
/* 3E73C 8006333C 8D020000 */ lw $v0, 0x0($t0)
/* 3E740 80063340 2403FFF8 */ addiu $v1, $zero, -0x8
/* 3E744 80063344 24420007 */ addiu $v0, $v0, 0x7
/* 3E748 80063348 00431024 */ and $v0, $v0, $v1
/* 3E74C 8006334C 24420008 */ addiu $v0, $v0, 0x8
/* 3E750 80063350 AD020000 */ sw $v0, 0x0($t0)
/* 3E754 80063354 8C44FFF8 */ lw $a0, -0x8($v0)
/* 3E758 80063358 8C45FFFC */ lw $a1, -0x4($v0)
/* 3E75C 8006335C AE040000 */ sw $a0, 0x0($s0)
/* 3E760 80063360 AE050004 */ sw $a1, 0x4($s0)
/* 3E764 80063364 08018CE7 */ j .LIQUE_8006339C
/* 3E768 80063368 82030034 */ lb $v1, 0x34($s0)
.LIQUE_8006336C:
/* 3E76C 8006336C 8D040000 */ lw $a0, 0x0($t0)
.LIQUE_80063370:
/* 3E770 80063370 2402FFFC */ addiu $v0, $zero, -0x4
/* 3E774 80063374 24840003 */ addiu $a0, $a0, 0x3
/* 3E778 80063378 00822024 */ and $a0, $a0, $v0
/* 3E77C 8006337C 24840004 */ addiu $a0, $a0, 0x4
/* 3E780 80063380 AD040000 */ sw $a0, 0x0($t0)
/* 3E784 80063384 8C85FFFC */ lw $a1, -0x4($a0)
/* 3E788 80063388 00A01821 */ addu $v1, $a1, $zero
/* 3E78C 8006338C 000517C3 */ sra $v0, $a1, 31
/* 3E790 80063390 AE020000 */ sw $v0, 0x0($s0)
/* 3E794 80063394 AE030004 */ sw $v1, 0x4($s0)
/* 3E798 80063398 82030034 */ lb $v1, 0x34($s0)
.LIQUE_8006339C:
/* 3E79C 8006339C 24020068 */ addiu $v0, $zero, 0x68
/* 3E7A0 800633A0 14620003 */ bne $v1, $v0, .LIQUE_800633B0
/* 3E7A4 800633A4 00000000 */ nop
/* 3E7A8 800633A8 08018CEF */ j .LIQUE_800633BC
/* 3E7AC 800633AC 96030006 */ lhu $v1, 0x6($s0)
.LIQUE_800633B0:
/* 3E7B0 800633B0 54600006 */ bnel $v1, $zero, .LIQUE_800633CC
/* 3E7B4 800633B4 8E020030 */ lw $v0, 0x30($s0)
/* 3E7B8 800633B8 8E030004 */ lw $v1, 0x4($s0)
.LIQUE_800633BC:
/* 3E7BC 800633BC 00001021 */ addu $v0, $zero, $zero
/* 3E7C0 800633C0 AE020000 */ sw $v0, 0x0($s0)
/* 3E7C4 800633C4 AE030004 */ sw $v1, 0x4($s0)
/* 3E7C8 800633C8 8E020030 */ lw $v0, 0x30($s0)
.LIQUE_800633CC:
/* 3E7CC 800633CC 30420008 */ andi $v0, $v0, 0x8
/* 3E7D0 800633D0 1040000F */ beqz $v0, .LIQUE_80063410
/* 3E7D4 800633D4 24030030 */ addiu $v1, $zero, 0x30
/* 3E7D8 800633D8 8E05000C */ lw $a1, 0xC($s0)
/* 3E7DC 800633DC 24040078 */ addiu $a0, $zero, 0x78
/* 3E7E0 800633E0 01251021 */ addu $v0, $t1, $a1
/* 3E7E4 800633E4 24A50001 */ addiu $a1, $a1, 0x1
/* 3E7E8 800633E8 A0430000 */ sb $v1, 0x0($v0)
/* 3E7EC 800633EC 10C40004 */ beq $a2, $a0, .LIQUE_80063400
/* 3E7F0 800633F0 AE05000C */ sw $a1, 0xC($s0)
/* 3E7F4 800633F4 24020058 */ addiu $v0, $zero, 0x58
/* 3E7F8 800633F8 14C20006 */ bne $a2, $v0, .LIQUE_80063414
/* 3E7FC 800633FC 02002021 */ addu $a0, $s0, $zero
.LIQUE_80063400:
/* 3E800 80063400 01251021 */ addu $v0, $t1, $a1
/* 3E804 80063404 24A30001 */ addiu $v1, $a1, 0x1
/* 3E808 80063408 A0460000 */ sb $a2, 0x0($v0)
/* 3E80C 8006340C AE03000C */ sw $v1, 0xC($s0)
.LIQUE_80063410:
/* 3E810 80063410 02002021 */ addu $a0, $s0, $zero
.LIQUE_80063414:
/* 3E814 80063414 8E02000C */ lw $v0, 0xC($s0)
/* 3E818 80063418 00C02821 */ addu $a1, $a2, $zero
/* 3E81C 8006341C 08018D67 */ j .LIQUE_8006359C
/* 3E820 80063420 01221021 */ addu $v0, $t1, $v0
glabel .LIQUE_80063424
/* 3E824 80063424 82030034 */ lb $v1, 0x34($s0)
/* 3E828 80063428 2402004C */ addiu $v0, $zero, 0x4C
/* 3E82C 8006342C 8D020000 */ lw $v0, 0x0($t0)
/* 3E830 80063430 2403FFF8 */ addiu $v1, $zero, -0x8
/* 3E834 80063434 24420007 */ addiu $v0, $v0, 0x7
/* 3E838 80063438 00431024 */ and $v0, $v0, $v1
/* 3E83C 8006343C 24420008 */ addiu $v0, $v0, 0x8
/* 3E840 80063440 AD020000 */ sw $v0, 0x0($t0)
/* 3E844 80063444 D440FFF8 */ ldc1 $f0, -0x8($v0)
/* 3E848 80063448 F6000000 */ sdc1 $f0, 0x0($s0)
/* 3E84C 8006344C 96020000 */ lhu $v0, 0x0($s0)
/* 3E850 80063450 30428000 */ andi $v0, $v0, 0x8000
/* 3E854 80063454 10400003 */ beqz $v0, .LIQUE_80063464
/* 3E858 80063458 2403002D */ addiu $v1, $zero, 0x2D
/* 3E85C 8006345C 08018D23 */ j .LIQUE_8006348C
/* 3E860 80063460 8E02000C */ lw $v0, 0xC($s0)
.LIQUE_80063464:
/* 3E864 80063464 8E030030 */ lw $v1, 0x30($s0)
/* 3E868 80063468 30620002 */ andi $v0, $v1, 0x2
/* 3E86C 8006346C 10400004 */ beqz $v0, .LIQUE_80063480
/* 3E870 80063470 30620001 */ andi $v0, $v1, 0x1
/* 3E874 80063474 8E02000C */ lw $v0, 0xC($s0)
/* 3E878 80063478 08018D23 */ j .LIQUE_8006348C
/* 3E87C 8006347C 2403002B */ addiu $v1, $zero, 0x2B
.LIQUE_80063480:
/* 3E880 80063480 10400006 */ beqz $v0, .LIQUE_8006349C
/* 3E884 80063484 24030020 */ addiu $v1, $zero, 0x20
/* 3E888 80063488 8E02000C */ lw $v0, 0xC($s0)
.LIQUE_8006348C:
/* 3E88C 8006348C 01222021 */ addu $a0, $t1, $v0
/* 3E890 80063490 24420001 */ addiu $v0, $v0, 0x1
/* 3E894 80063494 A0830000 */ sb $v1, 0x0($a0)
/* 3E898 80063498 AE02000C */ sw $v0, 0xC($s0)
.LIQUE_8006349C:
/* 3E89C 8006349C 02002021 */ addu $a0, $s0, $zero
/* 3E8A0 800634A0 8E02000C */ lw $v0, 0xC($s0)
/* 3E8A4 800634A4 00C02821 */ addu $a1, $a2, $zero
/* 3E8A8 800634A8 01221021 */ addu $v0, $t1, $v0
/* 3E8AC 800634AC 0C01AAAC */ jal _Ldtob
/* 3E8B0 800634B0 AE020008 */ sw $v0, 0x8($s0)
/* 3E8B4 800634B4 08018D89 */ j .LIQUE_80063624
/* 3E8B8 800634B8 8FBF0014 */ lw $ra, 0x14($sp)
glabel .LIQUE_800634BC
/* 3E8BC 800634BC 82030034 */ lb $v1, 0x34($s0)
/* 3E8C0 800634C0 24020068 */ addiu $v0, $zero, 0x68
/* 3E8C4 800634C4 1462000B */ bne $v1, $v0, .LIQUE_800634F4
/* 3E8C8 800634C8 2402006C */ addiu $v0, $zero, 0x6C
/* 3E8CC 800634CC 8D020000 */ lw $v0, 0x0($t0)
/* 3E8D0 800634D0 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E8D4 800634D4 24420003 */ addiu $v0, $v0, 0x3
/* 3E8D8 800634D8 00431024 */ and $v0, $v0, $v1
/* 3E8DC 800634DC 24420004 */ addiu $v0, $v0, 0x4
/* 3E8E0 800634E0 AD020000 */ sw $v0, 0x0($t0)
/* 3E8E4 800634E4 8C44FFFC */ lw $a0, -0x4($v0)
/* 3E8E8 800634E8 9603002E */ lhu $v1, 0x2E($s0)
/* 3E8EC 800634EC 08018D88 */ j .LIQUE_80063620
/* 3E8F0 800634F0 A4830000 */ sh $v1, 0x0($a0)
.LIQUE_800634F4:
/* 3E8F4 800634F4 10620010 */ beq $v1, $v0, .LIQUE_80063538
/* 3E8F8 800634F8 2402004C */ addiu $v0, $zero, 0x4C
/* 3E8FC 800634FC 5462000F */ bnel $v1, $v0, .LIQUE_8006353C
/* 3E900 80063500 8D020000 */ lw $v0, 0x0($t0)
/* 3E904 80063504 8D040000 */ lw $a0, 0x0($t0)
/* 3E908 80063508 2405FFFC */ addiu $a1, $zero, -0x4
/* 3E90C 8006350C 24840003 */ addiu $a0, $a0, 0x3
/* 3E910 80063510 00852024 */ and $a0, $a0, $a1
/* 3E914 80063514 24840004 */ addiu $a0, $a0, 0x4
/* 3E918 80063518 AD040000 */ sw $a0, 0x0($t0)
/* 3E91C 8006351C 8E03002C */ lw $v1, 0x2C($s0)
/* 3E920 80063520 8C85FFFC */ lw $a1, -0x4($a0)
/* 3E924 80063524 00001021 */ addu $v0, $zero, $zero
/* 3E928 80063528 ACA20000 */ sw $v0, 0x0($a1)
/* 3E92C 8006352C ACA30004 */ sw $v1, 0x4($a1)
/* 3E930 80063530 08018D89 */ j .LIQUE_80063624
/* 3E934 80063534 8FBF0014 */ lw $ra, 0x14($sp)
.LIQUE_80063538:
/* 3E938 80063538 8D020000 */ lw $v0, 0x0($t0)
.LIQUE_8006353C:
/* 3E93C 8006353C 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E940 80063540 24420003 */ addiu $v0, $v0, 0x3
/* 3E944 80063544 00431024 */ and $v0, $v0, $v1
/* 3E948 80063548 24420004 */ addiu $v0, $v0, 0x4
/* 3E94C 8006354C AD020000 */ sw $v0, 0x0($t0)
/* 3E950 80063550 8C44FFFC */ lw $a0, -0x4($v0)
/* 3E954 80063554 8E03002C */ lw $v1, 0x2C($s0)
/* 3E958 80063558 08018D88 */ j .LIQUE_80063620
/* 3E95C 8006355C AC830000 */ sw $v1, 0x0($a0)
glabel .LIQUE_80063560
/* 3E960 80063560 02002021 */ addu $a0, $s0, $zero
/* 3E964 80063564 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E968 80063568 8D020000 */ lw $v0, 0x0($t0)
/* 3E96C 8006356C 24050078 */ addiu $a1, $zero, 0x78
/* 3E970 80063570 24420003 */ addiu $v0, $v0, 0x3
/* 3E974 80063574 00431024 */ and $v0, $v0, $v1
/* 3E978 80063578 24420004 */ addiu $v0, $v0, 0x4
/* 3E97C 8006357C AD020000 */ sw $v0, 0x0($t0)
/* 3E980 80063580 8C43FFFC */ lw $v1, -0x4($v0)
/* 3E984 80063584 8E02000C */ lw $v0, 0xC($s0)
/* 3E988 80063588 00603821 */ addu $a3, $v1, $zero
/* 3E98C 8006358C 000337C3 */ sra $a2, $v1, 31
/* 3E990 80063590 01221021 */ addu $v0, $t1, $v0
/* 3E994 80063594 AE060000 */ sw $a2, 0x0($s0)
/* 3E998 80063598 AE070004 */ sw $a3, 0x4($s0)
.LIQUE_8006359C:
/* 3E99C 8006359C 0C01AA20 */ jal _Litob
/* 3E9A0 800635A0 AE020008 */ sw $v0, 0x8($s0)
/* 3E9A4 800635A4 08018D89 */ j .LIQUE_80063624
/* 3E9A8 800635A8 8FBF0014 */ lw $ra, 0x14($sp)
glabel .LIQUE_800635AC
/* 3E9AC 800635AC 8D020000 */ lw $v0, 0x0($t0)
/* 3E9B0 800635B0 2403FFFC */ addiu $v1, $zero, -0x4
/* 3E9B4 800635B4 24420003 */ addiu $v0, $v0, 0x3
/* 3E9B8 800635B8 00431024 */ and $v0, $v0, $v1
/* 3E9BC 800635BC 24420004 */ addiu $v0, $v0, 0x4
/* 3E9C0 800635C0 AD020000 */ sw $v0, 0x0($t0)
/* 3E9C4 800635C4 8C43FFFC */ lw $v1, -0x4($v0)
/* 3E9C8 800635C8 00602021 */ addu $a0, $v1, $zero
/* 3E9CC 800635CC 0C018B00 */ jal strlen
/* 3E9D0 800635D0 AE030008 */ sw $v1, 0x8($s0)
/* 3E9D4 800635D4 8E030024 */ lw $v1, 0x24($s0)
/* 3E9D8 800635D8 04600011 */ bltz $v1, .LIQUE_80063620
/* 3E9DC 800635DC AE020014 */ sw $v0, 0x14($s0)
/* 3E9E0 800635E0 0062102A */ slt $v0, $v1, $v0
/* 3E9E4 800635E4 5440000E */ bnel $v0, $zero, .LIQUE_80063620
/* 3E9E8 800635E8 AE030014 */ sw $v1, 0x14($s0)
/* 3E9EC 800635EC 08018D89 */ j .LIQUE_80063624
/* 3E9F0 800635F0 8FBF0014 */ lw $ra, 0x14($sp)
glabel .LIQUE_800635F4
/* 3E9F4 800635F4 8E02000C */ lw $v0, 0xC($s0)
/* 3E9F8 800635F8 24030025 */ addiu $v1, $zero, 0x25
/* 3E9FC 800635FC 01222021 */ addu $a0, $t1, $v0
/* 3EA00 80063600 24420001 */ addiu $v0, $v0, 0x1
/* 3EA04 80063604 08018D87 */ j .LIQUE_8006361C
/* 3EA08 80063608 A0830000 */ sb $v1, 0x0($a0)
glabel .LIQUE_8006360C
/* 3EA0C 8006360C 8E02000C */ lw $v0, 0xC($s0)
/* 3EA10 80063610 01221821 */ addu $v1, $t1, $v0
/* 3EA14 80063614 24420001 */ addiu $v0, $v0, 0x1
/* 3EA18 80063618 A0660000 */ sb $a2, 0x0($v1)
.LIQUE_8006361C:
/* 3EA1C 8006361C AE02000C */ sw $v0, 0xC($s0)
.LIQUE_80063620:
/* 3EA20 80063620 8FBF0014 */ lw $ra, 0x14($sp)
.LIQUE_80063624:
/* 3EA24 80063624 8FB00010 */ lw $s0, 0x10($sp)
/* 3EA28 80063628 03E00008 */ jr $ra
/* 3EA2C 8006362C 27BD0018 */ addiu $sp, $sp, 0x18
glabel sprintf
/* 3EA30 80063630 AFA50004 */ sw $a1, 0x4($sp)
/* 3EA34 80063634 AFA60008 */ sw $a2, 0x8($sp)
/* 3EA38 80063638 AFA7000C */ sw $a3, 0xC($sp)
/* 3EA3C 8006363C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3EA40 80063640 AFB00010 */ sw $s0, 0x10($sp)
/* 3EA44 80063644 00808021 */ addu $s0, $a0, $zero
/* 3EA48 80063648 00A03021 */ addu $a2, $a1, $zero
/* 3EA4C 8006364C 3C048006 */ lui $a0, %hi(proutSprintf)
/* 3EA50 80063650 24843688 */ addiu $a0, $a0, %lo(proutSprintf)
/* 3EA54 80063654 02002821 */ addu $a1, $s0, $zero
/* 3EA58 80063658 AFBF0014 */ sw $ra, 0x14($sp)
/* 3EA5C 8006365C 0C018B14 */ jal _Printf
/* 3EA60 80063660 27A70020 */ addiu $a3, $sp, 0x20
/* 3EA64 80063664 00401821 */ addu $v1, $v0, $zero
/* 3EA68 80063668 04600002 */ bltz $v1, .LIQUE_80063674
/* 3EA6C 8006366C 02031021 */ addu $v0, $s0, $v1
/* 3EA70 80063670 A0400000 */ sb $zero, 0x0($v0)
.LIQUE_80063674:
/* 3EA74 80063674 8FBF0014 */ lw $ra, 0x14($sp)
/* 3EA78 80063678 8FB00010 */ lw $s0, 0x10($sp)
/* 3EA7C 8006367C 00601021 */ addu $v0, $v1, $zero
/* 3EA80 80063680 03E00008 */ jr $ra
/* 3EA84 80063684 27BD0018 */ addiu $sp, $sp, 0x18
glabel proutSprintf
/* 3EA88 80063688 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 3EA8C 8006368C AFB10014 */ sw $s1, 0x14($sp)
/* 3EA90 80063690 00808821 */ addu $s1, $a0, $zero
/* 3EA94 80063694 AFB00010 */ sw $s0, 0x10($sp)
/* 3EA98 80063698 AFBF0018 */ sw $ra, 0x18($sp)
/* 3EA9C 8006369C 0C018B09 */ jal memcpy
/* 3EAA0 800636A0 00C08021 */ addu $s0, $a2, $zero
/* 3EAA4 800636A4 02301021 */ addu $v0, $s1, $s0
/* 3EAA8 800636A8 8FBF0018 */ lw $ra, 0x18($sp)
/* 3EAAC 800636AC 8FB10014 */ lw $s1, 0x14($sp)
/* 3EAB0 800636B0 8FB00010 */ lw $s0, 0x10($sp)
/* 3EAB4 800636B4 03E00008 */ jr $ra
/* 3EAB8 800636B8 27BD0020 */ addiu $sp, $sp, 0x20
/* 3EABC 800636BC 00000000 */ nop

View File

@ -1,40 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osCreateMesgQueue
/* 3EAC0 800636C0 27BDFFF8 */ addiu $sp, $sp, -0x8
/* 3EAC4 800636C4 AFBE0000 */ sw $fp, 0x0($sp)
/* 3EAC8 800636C8 03A0F021 */ addu $fp, $sp, $zero
/* 3EACC 800636CC AFC40008 */ sw $a0, 0x8($fp)
/* 3EAD0 800636D0 AFC5000C */ sw $a1, 0xC($fp)
/* 3EAD4 800636D4 AFC60010 */ sw $a2, 0x10($fp)
/* 3EAD8 800636D8 8FC20008 */ lw $v0, 0x8($fp)
/* 3EADC 800636DC 3C038009 */ lui $v1, %hi(__osThreadTail)
/* 3EAE0 800636E0 24633270 */ addiu $v1, $v1, %lo(__osThreadTail)
/* 3EAE4 800636E4 AC430000 */ sw $v1, 0x0($v0)
/* 3EAE8 800636E8 8FC20008 */ lw $v0, 0x8($fp)
/* 3EAEC 800636EC 3C038009 */ lui $v1, %hi(__osThreadTail)
/* 3EAF0 800636F0 24633270 */ addiu $v1, $v1, %lo(__osThreadTail)
/* 3EAF4 800636F4 AC430004 */ sw $v1, 0x4($v0)
/* 3EAF8 800636F8 8FC20008 */ lw $v0, 0x8($fp)
/* 3EAFC 800636FC AC400008 */ sw $zero, 0x8($v0)
/* 3EB00 80063700 8FC20008 */ lw $v0, 0x8($fp)
/* 3EB04 80063704 AC40000C */ sw $zero, 0xC($v0)
/* 3EB08 80063708 8FC20008 */ lw $v0, 0x8($fp)
/* 3EB0C 8006370C 8FC30010 */ lw $v1, 0x10($fp)
/* 3EB10 80063710 AC430010 */ sw $v1, 0x10($v0)
/* 3EB14 80063714 8FC20008 */ lw $v0, 0x8($fp)
/* 3EB18 80063718 8FC3000C */ lw $v1, 0xC($fp)
/* 3EB1C 8006371C AC430014 */ sw $v1, 0x14($v0)
/* 3EB20 80063720 03C0E821 */ addu $sp, $fp, $zero
/* 3EB24 80063724 8FBE0000 */ lw $fp, 0x0($sp)
/* 3EB28 80063728 03E00008 */ jr $ra
/* 3EB2C 8006372C 27BD0008 */ addiu $sp, $sp, 0x8

View File

@ -1,117 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osJamMesg
/* 468B0 8006B4B0 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 468B4 8006B4B4 AFBF0018 */ sw $ra, 0x18($sp)
/* 468B8 8006B4B8 AFBE0014 */ sw $fp, 0x14($sp)
/* 468BC 8006B4BC AFB00010 */ sw $s0, 0x10($sp)
/* 468C0 8006B4C0 03A0F021 */ addu $fp, $sp, $zero
/* 468C4 8006B4C4 AFC40020 */ sw $a0, 0x20($fp)
/* 468C8 8006B4C8 AFC50024 */ sw $a1, 0x24($fp)
/* 468CC 8006B4CC 0C019B40 */ jal __osDisableInt
/* 468D0 8006B4D0 AFC60028 */ sw $a2, 0x28($fp)
/* 468D4 8006B4D4 00408021 */ addu $s0, $v0, $zero
.LIQUE_8006B4D8:
/* 468D8 8006B4D8 8FC20020 */ lw $v0, 0x20($fp)
/* 468DC 8006B4DC 8FC30020 */ lw $v1, 0x20($fp)
/* 468E0 8006B4E0 8C420008 */ lw $v0, 0x8($v0)
/* 468E4 8006B4E4 8C630010 */ lw $v1, 0x10($v1)
/* 468E8 8006B4E8 0043102A */ slt $v0, $v0, $v1
/* 468EC 8006B4EC 10400003 */ beqz $v0, .LIQUE_8006B4FC
/* 468F0 8006B4F0 00000000 */ nop
/* 468F4 8006B4F4 0801AD53 */ j .LIQUE_8006B54C
/* 468F8 8006B4F8 00000000 */ nop
.LIQUE_8006B4FC:
/* 468FC 8006B4FC 8FC20028 */ lw $v0, 0x28($fp)
/* 46900 8006B500 24030001 */ addiu $v1, $zero, 0x1
/* 46904 8006B504 1443000B */ bne $v0, $v1, .LIQUE_8006B534
/* 46908 8006B508 00000000 */ nop
/* 4690C 8006B50C 3C028009 */ lui $v0, %hi(__osRunningThread)
/* 46910 8006B510 8C423280 */ lw $v0, %lo(__osRunningThread)($v0)
/* 46914 8006B514 24030008 */ addiu $v1, $zero, 0x8
/* 46918 8006B518 A4430010 */ sh $v1, 0x10($v0)
/* 4691C 8006B51C 8FC30020 */ lw $v1, 0x20($fp)
/* 46920 8006B520 24620004 */ addiu $v0, $v1, 0x4
/* 46924 8006B524 0C019A81 */ jal __osEnqueueAndYield
/* 46928 8006B528 00402021 */ addu $a0, $v0, $zero
/* 4692C 8006B52C 0801AD51 */ j .LIQUE_8006B544
/* 46930 8006B530 00000000 */ nop
.LIQUE_8006B534:
/* 46934 8006B534 0C019B5C */ jal __osRestoreInt
/* 46938 8006B538 02002021 */ addu $a0, $s0, $zero
/* 4693C 8006B53C 0801AD83 */ j .LIQUE_8006B60C
/* 46940 8006B540 2402FFFF */ addiu $v0, $zero, -0x1
.LIQUE_8006B544:
/* 46944 8006B544 0801AD36 */ j .LIQUE_8006B4D8
/* 46948 8006B548 00000000 */ nop
.LIQUE_8006B54C:
/* 4694C 8006B54C 8FC20020 */ lw $v0, 0x20($fp)
/* 46950 8006B550 8FC30020 */ lw $v1, 0x20($fp)
/* 46954 8006B554 8FC40020 */ lw $a0, 0x20($fp)
/* 46958 8006B558 8C63000C */ lw $v1, 0xC($v1)
/* 4695C 8006B55C 8C850010 */ lw $a1, 0x10($a0)
/* 46960 8006B560 00652021 */ addu $a0, $v1, $a1
/* 46964 8006B564 2483FFFF */ addiu $v1, $a0, -0x1
/* 46968 8006B568 8FC40020 */ lw $a0, 0x20($fp)
/* 4696C 8006B56C 8C850010 */ lw $a1, 0x10($a0)
/* 46970 8006B570 14A00002 */ bnez $a1, .LIQUE_8006B57C
/* 46974 8006B574 0065001A */ div $zero, $v1, $a1
/* 46978 8006B578 0007000D */ break 7
.LIQUE_8006B57C:
/* 4697C 8006B57C 2401FFFF */ addiu $at, $zero, -0x1
/* 46980 8006B580 14A10004 */ bne $a1, $at, .LIQUE_8006B594
/* 46984 8006B584 3C018000 */ lui $at, (0x80000000 >> 16)
/* 46988 8006B588 14610002 */ bne $v1, $at, .LIQUE_8006B594
/* 4698C 8006B58C 00000000 */ nop
/* 46990 8006B590 0006000D */ break 6
.LIQUE_8006B594:
/* 46994 8006B594 00001810 */ mfhi $v1
/* 46998 8006B598 AC43000C */ sw $v1, 0xC($v0)
/* 4699C 8006B59C 8FC20020 */ lw $v0, 0x20($fp)
/* 469A0 8006B5A0 8FC30020 */ lw $v1, 0x20($fp)
/* 469A4 8006B5A4 8C64000C */ lw $a0, 0xC($v1)
/* 469A8 8006B5A8 00801821 */ addu $v1, $a0, $zero
/* 469AC 8006B5AC 00032080 */ sll $a0, $v1, 2
/* 469B0 8006B5B0 8C430014 */ lw $v1, 0x14($v0)
/* 469B4 8006B5B4 00831021 */ addu $v0, $a0, $v1
/* 469B8 8006B5B8 8FC30024 */ lw $v1, 0x24($fp)
/* 469BC 8006B5BC AC430000 */ sw $v1, 0x0($v0)
/* 469C0 8006B5C0 8FC30020 */ lw $v1, 0x20($fp)
/* 469C4 8006B5C4 8FC20020 */ lw $v0, 0x20($fp)
/* 469C8 8006B5C8 8FC30020 */ lw $v1, 0x20($fp)
/* 469CC 8006B5CC 8C640008 */ lw $a0, 0x8($v1)
/* 469D0 8006B5D0 24830001 */ addiu $v1, $a0, 0x1
/* 469D4 8006B5D4 AC430008 */ sw $v1, 0x8($v0)
/* 469D8 8006B5D8 8FC20020 */ lw $v0, 0x20($fp)
/* 469DC 8006B5DC 8C430000 */ lw $v1, 0x0($v0)
/* 469E0 8006B5E0 8C620000 */ lw $v0, 0x0($v1)
/* 469E4 8006B5E4 10400005 */ beqz $v0, .LIQUE_8006B5FC
/* 469E8 8006B5E8 00000000 */ nop
/* 469EC 8006B5EC 0C019AD6 */ jal __osPopThread
/* 469F0 8006B5F0 8FC40020 */ lw $a0, 0x20($fp)
/* 469F4 8006B5F4 0C0190A0 */ jal osStartThread
/* 469F8 8006B5F8 00402021 */ addu $a0, $v0, $zero
.LIQUE_8006B5FC:
/* 469FC 8006B5FC 0C019B5C */ jal __osRestoreInt
/* 46A00 8006B600 02002021 */ addu $a0, $s0, $zero
/* 46A04 8006B604 0801AD83 */ j .LIQUE_8006B60C
/* 46A08 8006B608 00001021 */ addu $v0, $zero, $zero
.LIQUE_8006B60C:
/* 46A0C 8006B60C 03C0E821 */ addu $sp, $fp, $zero
/* 46A10 8006B610 8FBF0018 */ lw $ra, 0x18($sp)
/* 46A14 8006B614 8FBE0014 */ lw $fp, 0x14($sp)
/* 46A18 8006B618 8FB00010 */ lw $s0, 0x10($sp)
/* 46A1C 8006B61C 03E00008 */ jr $ra
/* 46A20 8006B620 27BD0020 */ addiu $sp, $sp, 0x20
/* 46A24 8006B624 00000000 */ nop
/* 46A28 8006B628 00000000 */ nop
/* 46A2C 8006B62C 00000000 */ nop

View File

@ -1,114 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osRecvMesg
/* 3EB30 80063730 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 3EB34 80063734 AFBF0018 */ sw $ra, 0x18($sp)
/* 3EB38 80063738 AFBE0014 */ sw $fp, 0x14($sp)
/* 3EB3C 8006373C AFB00010 */ sw $s0, 0x10($sp)
/* 3EB40 80063740 03A0F021 */ addu $fp, $sp, $zero
/* 3EB44 80063744 AFC40020 */ sw $a0, 0x20($fp)
/* 3EB48 80063748 AFC50024 */ sw $a1, 0x24($fp)
/* 3EB4C 8006374C 0C019B40 */ jal __osDisableInt
/* 3EB50 80063750 AFC60028 */ sw $a2, 0x28($fp)
/* 3EB54 80063754 00408021 */ addu $s0, $v0, $zero
.LIQUE_80063758:
/* 3EB58 80063758 8FC20020 */ lw $v0, 0x20($fp)
/* 3EB5C 8006375C 8C430008 */ lw $v1, 0x8($v0)
/* 3EB60 80063760 10600003 */ beqz $v1, .LIQUE_80063770
/* 3EB64 80063764 00000000 */ nop
/* 3EB68 80063768 08018DED */ j .LIQUE_800637B4
/* 3EB6C 8006376C 00000000 */ nop
.LIQUE_80063770:
/* 3EB70 80063770 8FC20028 */ lw $v0, 0x28($fp)
/* 3EB74 80063774 14400007 */ bnez $v0, .LIQUE_80063794
/* 3EB78 80063778 00000000 */ nop
/* 3EB7C 8006377C 0C019B5C */ jal __osRestoreInt
/* 3EB80 80063780 02002021 */ addu $a0, $s0, $zero
/* 3EB84 80063784 08018E20 */ j .LIQUE_80063880
/* 3EB88 80063788 2402FFFF */ addiu $v0, $zero, -0x1
/* 3EB8C 8006378C 08018DEB */ j .LIQUE_800637AC
/* 3EB90 80063790 00000000 */ nop
.LIQUE_80063794:
/* 3EB94 80063794 3C028009 */ lui $v0, %hi(__osRunningThread)
/* 3EB98 80063798 8C423280 */ lw $v0, %lo(__osRunningThread)($v0)
/* 3EB9C 8006379C 24030008 */ addiu $v1, $zero, 0x8
/* 3EBA0 800637A0 A4430010 */ sh $v1, 0x10($v0)
/* 3EBA4 800637A4 0C019A81 */ jal __osEnqueueAndYield
/* 3EBA8 800637A8 8FC40020 */ lw $a0, 0x20($fp)
.LIQUE_800637AC:
/* 3EBAC 800637AC 08018DD6 */ j .LIQUE_80063758
/* 3EBB0 800637B0 00000000 */ nop
.LIQUE_800637B4:
/* 3EBB4 800637B4 8FC20024 */ lw $v0, 0x24($fp)
/* 3EBB8 800637B8 1040000B */ beqz $v0, .LIQUE_800637E8
/* 3EBBC 800637BC 00000000 */ nop
/* 3EBC0 800637C0 8FC20024 */ lw $v0, 0x24($fp)
/* 3EBC4 800637C4 8FC30020 */ lw $v1, 0x20($fp)
/* 3EBC8 800637C8 8FC40020 */ lw $a0, 0x20($fp)
/* 3EBCC 800637CC 8C85000C */ lw $a1, 0xC($a0)
/* 3EBD0 800637D0 00A02021 */ addu $a0, $a1, $zero
/* 3EBD4 800637D4 00042880 */ sll $a1, $a0, 2
/* 3EBD8 800637D8 8C640014 */ lw $a0, 0x14($v1)
/* 3EBDC 800637DC 00A41821 */ addu $v1, $a1, $a0
/* 3EBE0 800637E0 8C640000 */ lw $a0, 0x0($v1)
/* 3EBE4 800637E4 AC440000 */ sw $a0, 0x0($v0)
.LIQUE_800637E8:
/* 3EBE8 800637E8 8FC20020 */ lw $v0, 0x20($fp)
/* 3EBEC 800637EC 8FC30020 */ lw $v1, 0x20($fp)
/* 3EBF0 800637F0 8C64000C */ lw $a0, 0xC($v1)
/* 3EBF4 800637F4 24830001 */ addiu $v1, $a0, 0x1
/* 3EBF8 800637F8 8FC40020 */ lw $a0, 0x20($fp)
/* 3EBFC 800637FC 8C850010 */ lw $a1, 0x10($a0)
/* 3EC00 80063800 14A00002 */ bnez $a1, .LIQUE_8006380C
/* 3EC04 80063804 0065001A */ div $zero, $v1, $a1
/* 3EC08 80063808 0007000D */ break 7
.LIQUE_8006380C:
/* 3EC0C 8006380C 2401FFFF */ addiu $at, $zero, -0x1
/* 3EC10 80063810 14A10004 */ bne $a1, $at, .LIQUE_80063824
/* 3EC14 80063814 3C018000 */ lui $at, (0x80000000 >> 16)
/* 3EC18 80063818 14610002 */ bne $v1, $at, .LIQUE_80063824
/* 3EC1C 8006381C 00000000 */ nop
/* 3EC20 80063820 0006000D */ break 6
.LIQUE_80063824:
/* 3EC24 80063824 00001810 */ mfhi $v1
/* 3EC28 80063828 AC43000C */ sw $v1, 0xC($v0)
/* 3EC2C 8006382C 8FC30020 */ lw $v1, 0x20($fp)
/* 3EC30 80063830 8FC20020 */ lw $v0, 0x20($fp)
/* 3EC34 80063834 8FC30020 */ lw $v1, 0x20($fp)
/* 3EC38 80063838 8C640008 */ lw $a0, 0x8($v1)
/* 3EC3C 8006383C 2483FFFF */ addiu $v1, $a0, -0x1
/* 3EC40 80063840 AC430008 */ sw $v1, 0x8($v0)
/* 3EC44 80063844 8FC20020 */ lw $v0, 0x20($fp)
/* 3EC48 80063848 8C430004 */ lw $v1, 0x4($v0)
/* 3EC4C 8006384C 8C620000 */ lw $v0, 0x0($v1)
/* 3EC50 80063850 10400007 */ beqz $v0, .LIQUE_80063870
/* 3EC54 80063854 00000000 */ nop
/* 3EC58 80063858 8FC30020 */ lw $v1, 0x20($fp)
/* 3EC5C 8006385C 24620004 */ addiu $v0, $v1, 0x4
/* 3EC60 80063860 0C019AD6 */ jal __osPopThread
/* 3EC64 80063864 00402021 */ addu $a0, $v0, $zero
/* 3EC68 80063868 0C0190A0 */ jal osStartThread
/* 3EC6C 8006386C 00402021 */ addu $a0, $v0, $zero
.LIQUE_80063870:
/* 3EC70 80063870 0C019B5C */ jal __osRestoreInt
/* 3EC74 80063874 02002021 */ addu $a0, $s0, $zero
/* 3EC78 80063878 08018E20 */ j .LIQUE_80063880
/* 3EC7C 8006387C 00001021 */ addu $v0, $zero, $zero
.LIQUE_80063880:
/* 3EC80 80063880 03C0E821 */ addu $sp, $fp, $zero
/* 3EC84 80063884 8FBF0018 */ lw $ra, 0x18($sp)
/* 3EC88 80063888 8FBE0014 */ lw $fp, 0x14($sp)
/* 3EC8C 8006388C 8FB00010 */ lw $s0, 0x10($sp)
/* 3EC90 80063890 03E00008 */ jr $ra
/* 3EC94 80063894 27BD0020 */ addiu $sp, $sp, 0x20
/* 3EC98 80063898 00000000 */ nop
/* 3EC9C 8006389C 00000000 */ nop

View File

@ -1,113 +0,0 @@
.include "macro.inc"
/* assembler directives */
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.set gp=64 /* allow use of 64-bit general purpose registers */
.section .text, "ax"
/* Generated by spimdisasm 1.11.1 */
glabel osSendMesg
/* 3ECA0 800638A0 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 3ECA4 800638A4 AFBF001C */ sw $ra, 0x1C($sp)
/* 3ECA8 800638A8 AFBE0018 */ sw $fp, 0x18($sp)
/* 3ECAC 800638AC AFB10014 */ sw $s1, 0x14($sp)
/* 3ECB0 800638B0 AFB00010 */ sw $s0, 0x10($sp)
/* 3ECB4 800638B4 03A0F021 */ addu $fp, $sp, $zero
/* 3ECB8 800638B8 AFC40020 */ sw $a0, 0x20($fp)
/* 3ECBC 800638BC AFC50024 */ sw $a1, 0x24($fp)
/* 3ECC0 800638C0 0C019B40 */ jal __osDisableInt
/* 3ECC4 800638C4 AFC60028 */ sw $a2, 0x28($fp)
/* 3ECC8 800638C8 00408021 */ addu $s0, $v0, $zero
.LIQUE_800638CC:
/* 3ECCC 800638CC 8FC20020 */ lw $v0, 0x20($fp)
/* 3ECD0 800638D0 8FC30020 */ lw $v1, 0x20($fp)
/* 3ECD4 800638D4 8C420008 */ lw $v0, 0x8($v0)
/* 3ECD8 800638D8 8C630010 */ lw $v1, 0x10($v1)
/* 3ECDC 800638DC 0043102A */ slt $v0, $v0, $v1
/* 3ECE0 800638E0 10400003 */ beqz $v0, .LIQUE_800638F0
/* 3ECE4 800638E4 00000000 */ nop
/* 3ECE8 800638E8 08018E50 */ j .LIQUE_80063940
/* 3ECEC 800638EC 00000000 */ nop
.LIQUE_800638F0:
/* 3ECF0 800638F0 8FC20028 */ lw $v0, 0x28($fp)
/* 3ECF4 800638F4 24030001 */ addiu $v1, $zero, 0x1
/* 3ECF8 800638F8 1443000B */ bne $v0, $v1, .LIQUE_80063928
/* 3ECFC 800638FC 00000000 */ nop
/* 3ED00 80063900 3C028009 */ lui $v0, %hi(__osRunningThread)
/* 3ED04 80063904 8C423280 */ lw $v0, %lo(__osRunningThread)($v0)
/* 3ED08 80063908 24030008 */ addiu $v1, $zero, 0x8
/* 3ED0C 8006390C A4430010 */ sh $v1, 0x10($v0)
/* 3ED10 80063910 8FC30020 */ lw $v1, 0x20($fp)
/* 3ED14 80063914 24620004 */ addiu $v0, $v1, 0x4
/* 3ED18 80063918 0C019A81 */ jal __osEnqueueAndYield
/* 3ED1C 8006391C 00402021 */ addu $a0, $v0, $zero
/* 3ED20 80063920 08018E4E */ j .LIQUE_80063938
/* 3ED24 80063924 00000000 */ nop
.LIQUE_80063928:
/* 3ED28 80063928 0C019B5C */ jal __osRestoreInt
/* 3ED2C 8006392C 02002021 */ addu $a0, $s0, $zero
/* 3ED30 80063930 08018E7C */ j .LIQUE_800639F0
/* 3ED34 80063934 2402FFFF */ addiu $v0, $zero, -0x1
.LIQUE_80063938:
/* 3ED38 80063938 08018E33 */ j .LIQUE_800638CC
/* 3ED3C 8006393C 00000000 */ nop
.LIQUE_80063940:
/* 3ED40 80063940 8FC20020 */ lw $v0, 0x20($fp)
/* 3ED44 80063944 8FC30020 */ lw $v1, 0x20($fp)
/* 3ED48 80063948 8C42000C */ lw $v0, 0xC($v0)
/* 3ED4C 8006394C 8C630008 */ lw $v1, 0x8($v1)
/* 3ED50 80063950 00438821 */ addu $s1, $v0, $v1
/* 3ED54 80063954 8FC20020 */ lw $v0, 0x20($fp)
/* 3ED58 80063958 8C430010 */ lw $v1, 0x10($v0)
/* 3ED5C 8006395C 14600002 */ bnez $v1, .LIQUE_80063968
/* 3ED60 80063960 0223001A */ div $zero, $s1, $v1
/* 3ED64 80063964 0007000D */ break 7
.LIQUE_80063968:
/* 3ED68 80063968 2401FFFF */ addiu $at, $zero, -0x1
/* 3ED6C 8006396C 14610004 */ bne $v1, $at, .LIQUE_80063980
/* 3ED70 80063970 3C018000 */ lui $at, (0x80000000 >> 16)
/* 3ED74 80063974 16210002 */ bne $s1, $at, .LIQUE_80063980
/* 3ED78 80063978 00000000 */ nop
/* 3ED7C 8006397C 0006000D */ break 6
.LIQUE_80063980:
/* 3ED80 80063980 00001010 */ mfhi $v0
/* 3ED84 80063984 00408821 */ addu $s1, $v0, $zero
/* 3ED88 80063988 8FC20020 */ lw $v0, 0x20($fp)
/* 3ED8C 8006398C 02201821 */ addu $v1, $s1, $zero
/* 3ED90 80063990 00032080 */ sll $a0, $v1, 2
/* 3ED94 80063994 8C430014 */ lw $v1, 0x14($v0)
/* 3ED98 80063998 00831021 */ addu $v0, $a0, $v1
/* 3ED9C 8006399C 8FC30024 */ lw $v1, 0x24($fp)
/* 3EDA0 800639A0 AC430000 */ sw $v1, 0x0($v0)
/* 3EDA4 800639A4 8FC30020 */ lw $v1, 0x20($fp)
/* 3EDA8 800639A8 8FC20020 */ lw $v0, 0x20($fp)
/* 3EDAC 800639AC 8FC30020 */ lw $v1, 0x20($fp)
/* 3EDB0 800639B0 8C640008 */ lw $a0, 0x8($v1)
/* 3EDB4 800639B4 24830001 */ addiu $v1, $a0, 0x1
/* 3EDB8 800639B8 AC430008 */ sw $v1, 0x8($v0)
/* 3EDBC 800639BC 8FC20020 */ lw $v0, 0x20($fp)
/* 3EDC0 800639C0 8C430000 */ lw $v1, 0x0($v0)
/* 3EDC4 800639C4 8C620000 */ lw $v0, 0x0($v1)
/* 3EDC8 800639C8 10400005 */ beqz $v0, .LIQUE_800639E0
/* 3EDCC 800639CC 00000000 */ nop
/* 3EDD0 800639D0 0C019AD6 */ jal __osPopThread
/* 3EDD4 800639D4 8FC40020 */ lw $a0, 0x20($fp)
/* 3EDD8 800639D8 0C0190A0 */ jal osStartThread
/* 3EDDC 800639DC 00402021 */ addu $a0, $v0, $zero
.LIQUE_800639E0:
/* 3EDE0 800639E0 0C019B5C */ jal __osRestoreInt
/* 3EDE4 800639E4 02002021 */ addu $a0, $s0, $zero
/* 3EDE8 800639E8 08018E7C */ j .LIQUE_800639F0
/* 3EDEC 800639EC 00001021 */ addu $v0, $zero, $zero
.LIQUE_800639F0:
/* 3EDF0 800639F0 03C0E821 */ addu $sp, $fp, $zero
/* 3EDF4 800639F4 8FBF001C */ lw $ra, 0x1C($sp)
/* 3EDF8 800639F8 8FBE0018 */ lw $fp, 0x18($sp)
/* 3EDFC 800639FC 8FB10014 */ lw $s1, 0x14($sp)
/* 3EE00 80063A00 8FB00010 */ lw $s0, 0x10($sp)
/* 3EE04 80063A04 03E00008 */ jr $ra
/* 3EE08 80063A08 27BD0020 */ addiu $sp, $sp, 0x20
/* 3EE0C 80063A0C 00000000 */ nop

Some files were not shown because too many files have changed in this diff Show More