mirror of
https://github.com/pmret/papermario.git
synced 2025-05-23 21:46:32 +02:00
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:
parent
b22883da65
commit
b171712e0e
2
Jenkinsfile
vendored
2
Jenkinsfile
vendored
@ -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
115
include/PR/bcp.h
Normal 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
|
@ -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
|
||||
|
@ -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);
|
||||
|
40
include/PR/os_internal_flash.h
Normal file
40
include/PR/os_internal_flash.h
Normal 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
|
@ -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
|
||||
|
@ -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) \
|
||||
|
970
include/PR/rcp.h
970
include/PR/rcp.h
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
44
include/gcc/sgidefs.h
Normal 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 */
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
35
src/os/_getcount.c
Normal 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
18
src/os/_setcompare.c
Normal 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));
|
||||
}
|
@ -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
48
src/os/common.c
Normal 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;
|
||||
}
|
175
src/os/contpfs.c
175
src/os/contpfs.c
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
103
src/os/devmgr.c
103
src/os/devmgr.c
@ -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);
|
||||
}
|
||||
|
@ -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
51
src/os/flashinit.c
Normal 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
64
src/os/flashreadarray.c
Normal 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
48
src/os/flashsectorerase.c
Normal 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
46
src/os/flashwritearray.c
Normal 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
35
src/os/flashwritebuffer.c
Normal 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
|
||||
}
|
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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
23
src/os/pfsnumfiles.c
Normal 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
51
src/os/pfssearchfile.c
Normal 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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
|
@ -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
12
src/os/si.c
Normal 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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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())
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
11
src/os/vi.c
11
src/os/vi.c
@ -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];
|
||||
|
@ -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);
|
||||
|
@ -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
37
src/os/vimodentsclan1.c
Normal 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
37
src/os/vimodepallan1.c
Normal 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
|
||||
} },
|
||||
};
|
@ -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;
|
||||
|
@ -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 } } };
|
||||
|
@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
2
tools/build/cc/egcs/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
@ -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":
|
||||
|
23
tools/patch_64bit_compile.py
Normal file
23
tools/patch_64bit_compile.py
Normal 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
@ -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
@ -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
|
@ -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
|
@ -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
|
@ -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)
|
@ -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)
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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)
|
||||