mirror of
https://github.com/pmret/papermario.git
synced 2024-11-09 12:32:38 +01:00
Match 50 functions in Libultra (#636)
* Fix script disasm * Stuff * Work on libultra * More Libultra Work * My Libultra work for now * Fix all OS warnings * fix gitignore
This commit is contained in:
parent
96e85f4da1
commit
e1766601f8
@ -63,6 +63,7 @@ typedef u32 OSHWIntr;
|
||||
/* Interrupt masks */
|
||||
|
||||
#define OS_IM_NONE 0x00000001
|
||||
#define OS_IM_RCP 0x00000401 // MODIFIED HEADER FILE, MISSING DEFINE
|
||||
#define OS_IM_SW1 0x00000501
|
||||
#define OS_IM_SW2 0x00000601
|
||||
#define OS_IM_CART 0x00000c01
|
||||
|
@ -18,6 +18,7 @@ extern void __osDequeueThread(OSThread **, OSThread *);
|
||||
extern void __osEnqueueThread(OSThread **, OSThread *);
|
||||
extern OSThread *__osPopThread(OSThread **);
|
||||
extern void __osDispatchThread(void);
|
||||
extern void __osCleanupThread(void);
|
||||
|
||||
extern void __osSetTimerIntr(OSTime);
|
||||
extern OSTime __osInsertTimer(OSTimer *);
|
||||
@ -36,6 +37,7 @@ extern OSTime __osCurrentTime;
|
||||
extern u32 __osBaseCounter;
|
||||
extern u32 __osViIntrCount;
|
||||
extern u32 __osTimerCounter;
|
||||
extern u32 __osShutdown;
|
||||
|
||||
extern __OSEventState __osEventStateTab[OS_NUM_EVENTS];
|
||||
|
||||
|
151
include/PR/piint.h
Normal file
151
include/PR/piint.h
Normal file
@ -0,0 +1,151 @@
|
||||
#ifndef _PIINT_H_
|
||||
#define _PIINT_H_
|
||||
|
||||
#include "PR/os_internal.h"
|
||||
#include "PR/rcp.h"
|
||||
|
||||
//https://github.com/LuigiBlood/64dd/wiki/Memory-Map
|
||||
|
||||
#define LEO_BASE_REG 0x05000000
|
||||
|
||||
#define LEO_CMD (LEO_BASE_REG + 0x508)
|
||||
#define LEO_STATUS (LEO_BASE_REG + 0x508)
|
||||
|
||||
#define LEO_BM_CTL (LEO_BASE_REG + 0x510)
|
||||
#define LEO_BM_STATUS (LEO_BASE_REG + 0x510)
|
||||
|
||||
#define LEO_SEQ_CTL (LEO_BASE_REG + 0x518)
|
||||
#define LEO_SEQ_STATUS (LEO_BASE_REG + 0x518)
|
||||
|
||||
#define LEO_C2_BUFF (LEO_BASE_REG + 0x000) //C2 Sector Buffer
|
||||
#define LEO_SECTOR_BUFF (LEO_BASE_REG + 0x400) //Data Sector Buffer
|
||||
#define LEO_DATA (LEO_BASE_REG + 0x500) //Data
|
||||
#define LEO_MISC_REG (LEO_BASE_REG + 0x504) //Misc Register
|
||||
#define LEO_CUR_TK (LEO_BASE_REG + 0x50C) //Current Track
|
||||
#define LEO_ERR_SECTOR (LEO_BASE_REG + 0x514) //Sector Error Status
|
||||
#define LEO_CUR_SECTOR (LEO_BASE_REG + 0x51C) //Current Sector
|
||||
#define LEO_HARD_RESET (LEO_BASE_REG + 0x520) //Hard Reset
|
||||
#define LEO_C1_S0 (LEO_BASE_REG + 0x524) //C1
|
||||
#define LEO_HOST_SECBYTE (LEO_BASE_REG + 0x528) //Sector Size (in bytes)
|
||||
#define LEO_C1_S2 (LEO_BASE_REG + 0x52C) //C1
|
||||
#define LEO_SEC_BYTE (LEO_BASE_REG + 0x530) //Sectors per Block, Full Size
|
||||
#define LEO_C1_S4 (LEO_BASE_REG + 0x534) //C1
|
||||
#define LEO_C1_S6 (LEO_BASE_REG + 0x538) //C1
|
||||
#define LEO_CUR_ADDR (LEO_BASE_REG + 0x53C) //Current Address?
|
||||
#define LEO_ID_REG (LEO_BASE_REG + 0x540) //ID
|
||||
#define LEO_TEST_REG (LEO_BASE_REG + 0x544) //Test Read
|
||||
#define LEO_TEST_PIN_SEL (LEO_BASE_REG + 0x548) //Test Write
|
||||
#define LEO_RAM_ADDR (LEO_BASE_REG + 0x580) //Microsequencer RAM
|
||||
|
||||
#define LEO_STATUS_PRESENCE_MASK 0xFFFF
|
||||
|
||||
#define LEO_STATUS_DATA_REQUEST 0x40000000
|
||||
#define LEO_STATUS_C2_TRANSFER 0x10000000
|
||||
#define LEO_STATUS_BUFFER_MANAGER_ERROR 0x08000000
|
||||
#define LEO_STATUS_BUFFER_MANAGER_INTERRUPT 0x04000000
|
||||
#define LEO_STATUS_MECHANIC_INTERRUPT 0x02000000
|
||||
#define LEO_STATUS_DISK_PRESENT 0x01000000
|
||||
#define LEO_STATUS_BUSY_STATE 0x00800000
|
||||
#define LEO_STATUS_RESET_STATE 0x00400000
|
||||
#define LEO_STATUS_MOTOR_NOT_SPINNING 0x00100000
|
||||
#define LEO_STATUS_HEAD_RETRACTED 0x00080000
|
||||
#define LEO_STATUS_WRITE_PROTECT_ERROR 0x00040000
|
||||
#define LEO_STATUS_MECHANIC_ERROR 0x00020000
|
||||
#define LEO_STATUS_DISK_CHANGE 0x00010000
|
||||
|
||||
#define LEO_STATUS_MODE_MASK (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED)
|
||||
#define LEO_STATUS_MODE_SLEEP (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED)
|
||||
#define LEO_STATUS_MODE_STANDBY (LEO_STATUS_HEAD_RETRACTED)
|
||||
#define LEO_STATUS_MODE_ACTIVE 0
|
||||
|
||||
#define LEO_CUR_TK_INDEX_LOCK 0x60000000
|
||||
|
||||
#define LEO_BM_STATUS_RUNNING 0x80000000 //Running
|
||||
#define LEO_BM_STATUS_ERROR 0x04000000 //Error
|
||||
#define LEO_BM_STATUS_MICRO 0x02000000 //Micro Status?
|
||||
#define LEO_BM_STATUS_BLOCK 0x01000000 //Block Transfer
|
||||
#define LEO_BM_STATUS_C1CORRECTION 0x00800000 //C1 Correction
|
||||
#define LEO_BM_STATUS_C1DOUBLE 0x00400000 //C1 Double
|
||||
#define LEO_BM_STATUS_C1SINGLE 0x00200000 //C1 Single
|
||||
#define LEO_BM_STATUS_C1ERROR 0x00010000 //C1 Error
|
||||
|
||||
#define LEO_BM_CTL_START 0x80000000 //Start Buffer Manager
|
||||
#define LEO_BM_CTL_MODE 0x40000000 //Buffer Manager Mode
|
||||
#define LEO_BM_CTL_IMASK 0x20000000 //BM Interrupt Mask
|
||||
#define LEO_BM_CTL_RESET 0x10000000 //Buffer Manager Reset
|
||||
#define LEO_BM_CTL_DISABLE_OR 0x08000000 //Disable OR Check?
|
||||
#define LEO_BM_CTL_DISABLE_C1 0x04000000 //Disable C1 Correction
|
||||
#define LEO_BM_CTL_BLOCK 0x02000000 //Block Transfer
|
||||
#define LEO_BM_CTL_CLR_MECHANIC_INTR 0x01000000 //Mechanic Interrupt Reset
|
||||
|
||||
#define LEO_BM_CTL_CONTROL_MASK 0xFF000000
|
||||
#define LEO_BM_CTL_SECTOR_MASK 0x00FF0000
|
||||
#define LEO_BM_CTL_SECTOR_SHIFT 16
|
||||
|
||||
#define LEO_CMD_TYPE_0 0 //TODO: name
|
||||
#define LEO_CMD_TYPE_1 1 //TODO: name
|
||||
#define LEO_CMD_TYPE_2 2 //TODO: name
|
||||
|
||||
#define LEO_ERROR_GOOD 0
|
||||
#define LEO_ERROR_4 4 //maybe busy?
|
||||
#define LEO_ERROR_22 22 //
|
||||
#define LEO_ERROR_23 23 //unrecovered read error?
|
||||
#define LEO_ERROR_24 24 //no reference position found?
|
||||
#define LEO_ERROR_29 29 //
|
||||
|
||||
extern OSDevMgr __osPiDevMgr;
|
||||
extern OSPiHandle *__osCurrentHandle[2];
|
||||
extern OSPiHandle CartRomHandle;
|
||||
extern OSPiHandle LeoDiskHandle;
|
||||
extern OSMesgQueue __osPiAccessQueue;
|
||||
extern u32 __osPiAccessQueueEnabled;
|
||||
|
||||
int __osPiDeviceBusy(void);
|
||||
void __osDevMgrMain(void *);
|
||||
void __osPiCreateAccessQueue(void);
|
||||
void __osPiRelAccess(void);
|
||||
void __osPiGetAccess(void);
|
||||
s32 __osEPiRawWriteIo(OSPiHandle *, u32 , u32);
|
||||
s32 __osEPiRawReadIo(OSPiHandle *, u32 , u32 *);
|
||||
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
|
||||
|
||||
#define UPDATE_REG(pihandle, reg, var) \
|
||||
if (cHandle->var != pihandle->var) \
|
||||
IO_WRITE(reg, pihandle->var)
|
||||
|
||||
#define EPI_SYNC(pihandle, stat, domain) \
|
||||
\
|
||||
WAIT_ON_IOBUSY(stat); \
|
||||
\
|
||||
domain = pihandle->domain; \
|
||||
if (__osCurrentHandle[domain]->type != pihandle->type) \
|
||||
{ \
|
||||
OSPiHandle *cHandle = __osCurrentHandle[domain]; \
|
||||
if (domain == PI_DOMAIN1) \
|
||||
{ \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM1_LAT_REG, latency); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM1_PGS_REG, pageSize); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM1_RLS_REG, relDuration); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM1_PWD_REG, pulse); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM2_LAT_REG, latency); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM2_PGS_REG, pageSize); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM2_RLS_REG, relDuration); \
|
||||
UPDATE_REG(pihandle, PI_BSD_DOM2_PWD_REG, pulse); \
|
||||
} \
|
||||
cHandle->type = pihandle->type; \
|
||||
cHandle->latency = pihandle->latency; \
|
||||
cHandle->pageSize = pihandle->pageSize; \
|
||||
cHandle->relDuration = pihandle->relDuration; \
|
||||
cHandle->pulse = pihandle->pulse; \
|
||||
}(void)0
|
||||
|
||||
#endif
|
70
include/PR/viint.h
Normal file
70
include/PR/viint.h
Normal file
@ -0,0 +1,70 @@
|
||||
#ifndef _VIINT_H
|
||||
#define _VIINT_H
|
||||
#include "PR/os_internal.h"
|
||||
|
||||
#define OS_TV_TYPE_PAL 0
|
||||
#define OS_TV_TYPE_NTSC 1
|
||||
#define OS_TV_TYPE_MPAL 2
|
||||
|
||||
#define VI_STATE_MODE_UPDATED 0x01
|
||||
#define VI_STATE_XSCALE_UPDATED 0x02
|
||||
#define VI_STATE_YSCALE_UPDATED 0x04
|
||||
#define VI_STATE_CTRL_UPDATED 0x08 // related to control regs changing
|
||||
#define VI_STATE_BUFFER_UPDATED 0x10 // swap buffer
|
||||
#define VI_STATE_BLACK 0x20 // probably related to a black screen
|
||||
#define VI_STATE_REPEATLINE 0x40 // repeat line?
|
||||
#define VI_STATE_FADE 0x80 // fade
|
||||
|
||||
#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */
|
||||
#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */
|
||||
#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */
|
||||
|
||||
#define VI_SCALE_MASK 0xfff //see rcp scale_x/scale_y
|
||||
#define VI_2_10_FPART_MASK 0x3ff
|
||||
#define VI_SUBPIXEL_SH 0x10
|
||||
|
||||
#define BURST(hsync_width, color_width, vsync_width, color_start) \
|
||||
(hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20))
|
||||
#define WIDTH(v) v
|
||||
#define VSYNC(v) v
|
||||
#define HSYNC(duration, leap) (duration | (leap << 16))
|
||||
#define LEAP(upper, lower) ((upper << 16) | lower)
|
||||
#define START(start, end) ((start << 16) | end)
|
||||
|
||||
#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1))
|
||||
|
||||
#define F210(val) FTOFIX(val, 2, 10)
|
||||
#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16))
|
||||
|
||||
#define VCURRENT(v) v //seemingly unused
|
||||
#define ORIGIN(v) v
|
||||
#define VINTR(v) v
|
||||
#define HSTART START
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* 0x0 */ f32 factor;
|
||||
/* 0x4 */ u16 offset;
|
||||
/* 0x8 */ u32 scale;
|
||||
} __OSViScale;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* 0x0 */ u16 state;
|
||||
/* 0x2 */ u16 retraceCount;
|
||||
/* 0x4 */ void *framep;
|
||||
/* 0x8 */ OSViMode *modep;
|
||||
/* 0xC */ u32 control;
|
||||
/* 0x10 */ OSMesgQueue *msgq;
|
||||
/* 0x14 */ OSMesg msg;
|
||||
/* 0x18 */ __OSViScale x;
|
||||
/* 0x24 */ __OSViScale y;
|
||||
} __OSViContext; // 0x30 bytes
|
||||
|
||||
void __osViSwapContext(void);
|
||||
extern __OSViContext *__osViCurr;
|
||||
extern __OSViContext *__osViNext;
|
||||
extern u32 __additional_scanline;
|
||||
__OSViContext *__osViGetCurrentContext(void);
|
||||
void __osViInit(void);
|
||||
#endif
|
@ -17,9 +17,6 @@ void nuBoot(void);
|
||||
void boot_idle(void);
|
||||
void boot_main(void);
|
||||
|
||||
void osCleanupThread(void);
|
||||
OSThread* osGetActiveQueue(void);
|
||||
|
||||
f32 signF(f32 val);
|
||||
|
||||
void* heap_malloc(s32 size);
|
||||
|
@ -14,10 +14,10 @@ extern EvtScript N(handleEvent_80219500);
|
||||
|
||||
s32 N(defenseTable_80218E10)[] = {
|
||||
ELEMENT_NORMAL, 0,
|
||||
ELEMENT_WATER, 4294967294,
|
||||
ELEMENT_ICE, 4294967294,
|
||||
ELEMENT_WATER, -2,
|
||||
ELEMENT_ICE, -2,
|
||||
ELEMENT_FIRE, 99,
|
||||
ELEMENT_BLAST, 4294967295,
|
||||
ELEMENT_BLAST, -1,
|
||||
ELEMENT_END,
|
||||
};
|
||||
|
||||
|
14
src/bss.c
14
src/bss.c
@ -14,14 +14,14 @@ BSS s32 D_8009A5B8;
|
||||
BSS char D_8009A5BC[0x4];
|
||||
BSS s32 D_8009A5C0;
|
||||
BSS char D_8009A5C4[0x4];
|
||||
BSS s32 D_8009A5C8;
|
||||
BSS s32 __osBaseCounter;
|
||||
BSS s32 D_8009A5CC;
|
||||
BSS s32 D_8009A5D0;
|
||||
BSS s32 D_8009A5D4;
|
||||
BSS s32 timeFreezeMode;
|
||||
BSS s32 nuGfxZBuffer;
|
||||
BSS u32 nuContDataLockKey;
|
||||
BSS s32 D_8009A5E4;
|
||||
BSS s32 __osViIntrCount;
|
||||
BSS s32 D_8009A5E8;
|
||||
BSS float D_8009A5EC;
|
||||
BSS u32 nuGfxCfbCounter;
|
||||
@ -31,7 +31,7 @@ BSS s32 D_8009A5FC;
|
||||
BSS s32 gGameState;
|
||||
BSS s16 gNpcCount;
|
||||
BSS s16 D_8009A606;
|
||||
BSS s32 D_8009A608;
|
||||
BSS s32 __osCurrentTime;
|
||||
BSS s32 D_8009A60C;
|
||||
BSS s32 nuGfxUcode;
|
||||
BSS u32 nuContNum;
|
||||
@ -40,7 +40,7 @@ BSS u8 D_8009A61C;
|
||||
BSS s32 D_8009A620;
|
||||
BSS char D_8009A624[0x4];
|
||||
BSS s32 D_8009A628;
|
||||
BSS s32 D_8009A62C;
|
||||
BSS s32 __osTimerCounter;
|
||||
BSS s32 D_8009A630;
|
||||
BSS s16 gCurrentCamID;
|
||||
BSS s32 nuPiCartHandle;
|
||||
@ -249,7 +249,7 @@ BSS s32 D_800AF8F0;
|
||||
BSS char D_800AF8F4[0x4];
|
||||
BSS s32 D_800AF8F8;
|
||||
BSS s32 D_800AF8FC;
|
||||
BSS s32 D_800AF900;
|
||||
BSS s32 siAccessBuf;
|
||||
BSS char D_800AF904[0xC];
|
||||
BSS s32 D_800AF910;
|
||||
BSS char D_800AF914[0x4];
|
||||
@ -347,7 +347,7 @@ BSS s8 D_800D9668[0x18];
|
||||
BSS s8 D_800D9680[0x100];
|
||||
BSS s8 rspbootUcodeBuffer[0x100];
|
||||
BSS s8 D_800D9880[0x700];
|
||||
BSS s8 D_800D9F80[0x80];
|
||||
BSS s8 __osEventStateTab[0x80];
|
||||
BSS s8 D_800DA000[0x3C];
|
||||
BSS s32 D_800DA03C;
|
||||
BSS s8 D_800DA040[0x400];
|
||||
@ -363,7 +363,7 @@ BSS s8 D_800DAAC0[0x18];
|
||||
BSS s8 nuContPfs[0x1A0];
|
||||
BSS s8 nuSiMesgQ[0x18];
|
||||
BSS s8 D_800DAC90[0x18];
|
||||
BSS s8 D_800DACA8[0x18];
|
||||
BSS s8 __osSiAccessQueue[0x18];
|
||||
BSS s8 gCurrentSaveFile[0x1380];
|
||||
BSS s8 nuContDataMutexQ[0x20];
|
||||
BSS s32 D_800DC060;
|
||||
|
@ -275,7 +275,7 @@ void crash_screen_draw(OSThread* faultedThread) {
|
||||
}
|
||||
|
||||
OSThread* crash_screen_get_faulted_thread(void) {
|
||||
OSThread* thread = osGetActiveQueue();
|
||||
OSThread* thread = __osGetActiveQueue();
|
||||
|
||||
while (thread->priority != -1) {
|
||||
if (thread->priority > 0 && thread->priority < 0x7F && (thread->flags & 3)) {
|
||||
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/3c490_len_3c0", osDevMgrMain);
|
@ -1,5 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
u8 hdwrBugFlag = 0; // Local Static to osAiSetNextBuffer.
|
||||
|
||||
INCLUDE_ASM(s32, "os/3ca80_len_a0", osAiSetNextBuffer, void* buf, u32 unk);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41420_len_120", osStartThread, OSThread* thread);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41540_len_c0", osStopThread, OSThread* thread);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/41600_len_40", osDequeueThread);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41640_len_50", osYieldThread, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/41690_len_10", osGetActiveQueue);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(OSTime, "os/416a0_len_90", osGetTime, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41730_len_20", osSetTime, OSTime time);
|
@ -1,4 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(int, "os/41750_len_450", osSetTimer, OSTimer* timer, OSTime start, OSTime end, OSMesgQueue* queue,
|
||||
OSMesg mesg);
|
@ -1,9 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/41880", osTimerServicesInit);
|
||||
|
||||
INCLUDE_ASM(s32, "os/41880", osTimerInterrupt);
|
||||
|
||||
INCLUDE_ASM(s32, "os/41880", osSetTimerIntr);
|
||||
|
||||
INCLUDE_ASM(s32, "os/41880", osInsertTimer);
|
@ -1,4 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41ba0_len_c0", osMapTLB, s32 unk, OSPageMask pageMask, void* buf, u32 unk1, u32 unk2,
|
||||
s32 unk3);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/41c60_len_c0", __osProbeTLB);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41d20_len_40", osUnmapTLB, s32 unk);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/41d60_len_50", osUnmapTLBAll, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void*, "os/41db0_len_40", osViGetCurrentFramebuffer, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void*, "os/41df0_len_40", osViGetNextFramebuffer, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(u32, "os/41e30_len_40", osViGetCurrentMode, void);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/421b0_len_60", osViSetEvent, OSMesgQueue* queue, OSMesg mesg, u32 unk);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42210_len_50", osViSetMode, OSViMode* mode);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42260_len_170", osViSetSpecialFeatures, u32 feat);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/423d0_len_50", osViSetYScale, f32 scale);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42420_len_50", osViSwapBuffer, void* buf);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/42470_len_310", osViSwapContext);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42780_len_120", osViBlack, u8 unk);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42900_len_80", guMtxF2L, float mf[4][4], Mtx* m);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42980_len_80", guMtxL2F, float mf[4][4], Mtx* m);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42a00_len_100", guMtxCatF, float m[4][4], float n[4][4], float r[4][4]);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42b00_len_c0", guScale, Mtx* m, float x, float y, float z);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42bc0_len_60", guScaleF, float mf[4][4], float x, float y, float z);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42c20_len_e0", guTranslate, Mtx* m, float x, float y, float z);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42d00_len_60", guTranslateF, float mf[4][4], float x, float y, float z);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/42d60_len_80", guMtxCat);
|
@ -1,4 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42de0_len_90", guMtxXFML, Mtx* m, float x, float y, float z, float* ox, float* oy,
|
||||
float* oz);
|
@ -1,4 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/42e70_len_390", guMtxXFMF, float mf[4][4], float x, float y, float z, float* ox, float* oy,
|
||||
float* oz);
|
@ -1,5 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/467f0_len_90", osSetGlobalIntMask);
|
||||
|
||||
INCLUDE_ASM(s32, "os/467f0_len_90", osResetGlobalIntMask);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(s32, "os/47a70_len_10", osGetSR);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/47e30_len_60", osMapTLBRdb, void);
|
27
src/os/aisetnextbuf.c
Normal file
27
src/os/aisetnextbuf.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include "PR/osint.h"
|
||||
#include "PR/rcp.h"
|
||||
|
||||
s32 osAiSetNextBuffer(void *bufPtr, u32 size) {
|
||||
static u8 hdwrBugFlag = FALSE;
|
||||
char *bptr;
|
||||
|
||||
if (__osAiDeviceBusy()) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bptr = bufPtr;
|
||||
|
||||
if (hdwrBugFlag) {
|
||||
bptr -= 0x2000;
|
||||
}
|
||||
|
||||
if ((((u32)bufPtr + size) & 0x1fff) == 0) {
|
||||
hdwrBugFlag = TRUE;
|
||||
} else {
|
||||
hdwrBugFlag = FALSE;
|
||||
}
|
||||
|
||||
IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr));
|
||||
IO_WRITE(AI_LEN_REG, size);
|
||||
return 0;
|
||||
}
|
26
src/os/createthread.c
Normal file
26
src/os/createthread.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include "PR/R4300.h"
|
||||
#include "PR/osint.h"
|
||||
|
||||
void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri p) {
|
||||
register u32 saveMask;
|
||||
OSIntMask mask;
|
||||
t->id = id;
|
||||
t->priority = p;
|
||||
t->next = NULL;
|
||||
t->queue = NULL;
|
||||
t->context.pc = (u32)entry;
|
||||
t->context.a0 = (s64)(s32)arg; // Double cast gets rid of compiler warning
|
||||
t->context.sp = (s64)(s32)sp - 16;
|
||||
t->context.ra = (u64)__osCleanupThread;
|
||||
mask = OS_IM_ALL;
|
||||
t->context.sr = SR_IMASK | SR_EXL | SR_IE;
|
||||
t->context.rcp = (mask & RCP_IMASK) >> RCP_IMASKSHIFT;
|
||||
t->context.fpcsr = (u32)(FPCSR_FS | FPCSR_EV);
|
||||
t->fp = 0;
|
||||
t->state = OS_STATE_STOPPED;
|
||||
t->flags = 0;
|
||||
saveMask = __osDisableInt();
|
||||
t->tlnext = __osActiveQueue;
|
||||
__osActiveQueue = t;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
108
src/os/devmgr.c
Normal file
108
src/os/devmgr.c
Normal file
@ -0,0 +1,108 @@
|
||||
#include "PR/rcp.h"
|
||||
#include "PR/piint.h"
|
||||
|
||||
void __osDevMgrMain(void *args) {
|
||||
OSIoMesg *mb = NULL;
|
||||
OSMesg em;
|
||||
OSMesg dummy;
|
||||
s32 ret = 0;
|
||||
OSDevMgr *dm = (OSDevMgr *)args;
|
||||
s32 messageSend = 0;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
osRecvMesg(dm->cmdQueue, (OSMesg)&mb, OS_MESG_BLOCK);
|
||||
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
if (info->transferMode == LEO_TRACK_MODE && mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0) {
|
||||
messageSend = 1;
|
||||
} else {
|
||||
messageSend = 0;
|
||||
}
|
||||
|
||||
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
|
||||
__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];
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
|
||||
|
||||
if (messageSend == 1 && mb->piHandle->transferInfo.block[0].errStatus == LEO_ERROR_GOOD) {
|
||||
messageSend = 0;
|
||||
goto doMessageSend;
|
||||
}
|
||||
|
||||
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
|
||||
if (mb->piHandle->transferInfo.blockNum == 1) {
|
||||
osYieldThread();
|
||||
}
|
||||
} else {
|
||||
switch (mb->hdr.type) {
|
||||
case OS_MESG_TYPE_DMAREAD:
|
||||
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
|
||||
ret = dm->dma(OS_READ, mb->devAddr, mb->dramAddr, mb->size);
|
||||
break;
|
||||
case OS_MESG_TYPE_DMAWRITE:
|
||||
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
|
||||
ret = dm->dma(OS_WRITE, mb->devAddr, mb->dramAddr, mb->size);
|
||||
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);
|
||||
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);
|
||||
break;
|
||||
case OS_MESG_TYPE_LOOPBACK:
|
||||
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
|
||||
ret = -1;
|
||||
break;
|
||||
default:
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
|
||||
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
|
||||
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
5
src/os/getactivequeue.c
Normal file
5
src/os/getactivequeue.c
Normal file
@ -0,0 +1,5 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
OSThread *__osGetActiveQueue(void) {
|
||||
return __osActiveQueue;
|
||||
}
|
15
src/os/gettime.c
Normal file
15
src/os/gettime.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
OSTime osGetTime() {
|
||||
u32 tmptime;
|
||||
u32 elapseCount;
|
||||
OSTime currentCount;
|
||||
register u32 saveMask;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
tmptime = osGetCount();
|
||||
elapseCount = tmptime - __osBaseCounter;
|
||||
currentCount = __osCurrentTime;
|
||||
__osRestoreInt(saveMask);
|
||||
return currentCount + elapseCount;
|
||||
}
|
12
src/os/guMtxCat.c
Normal file
12
src/os/guMtxCat.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include "common.h"
|
||||
|
||||
void guMtxCatL(Mtx *m, Mtx *n, Mtx *res) {
|
||||
float mf[4][4], nf[4][4], resf[4][4];
|
||||
|
||||
guMtxL2F(mf, m);
|
||||
guMtxL2F(nf, n);
|
||||
|
||||
guMtxCatF(mf, nf, resf);
|
||||
|
||||
guMtxF2L(resf, res);
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/guMtxIdent", guMtxIdent, Mtx* m);
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/guMtxIdentF", guMtxIdentF, float mf[4][4]);
|
7
src/os/guMtxXFMF.c
Normal file
7
src/os/guMtxXFMF.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "common.h"
|
||||
|
||||
void guMtxXFMF(f32 mf[4][4], f32 x, f32 y, f32 z, f32 *ox, f32 *oy, f32 *oz) {
|
||||
*ox = mf[0][0]*x + mf[1][0]*y + mf[2][0]*z + mf[3][0];
|
||||
*oy = mf[0][1]*x + mf[1][1]*y + mf[2][1]*z + mf[3][1];
|
||||
*oz = mf[0][2]*x + mf[1][2]*y + mf[2][2]*z + mf[3][2];
|
||||
}
|
10
src/os/guMtxXFML.c
Normal file
10
src/os/guMtxXFML.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include "common.h"
|
||||
|
||||
void guMtxXFML(Mtx *m, float x, float y, float z, float *ox, float *oy, float *oz)
|
||||
{
|
||||
float mf[4][4];
|
||||
|
||||
guMtxL2F(mf, m);
|
||||
|
||||
guMtxXFMF(mf, x, y, z, ox, oy, oz);
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/osCreateThread", osCreateThread, OSThread* thread, OSId id, void (*entrypoint)(void*),
|
||||
void* unk1,
|
||||
void* unk2, OSPri pri);
|
@ -1,4 +1,4 @@
|
||||
#include "common.h"
|
||||
#include "PR/os_internal.h"
|
||||
|
||||
s32 osEPiLinkHandle(OSPiHandle* EPiHandle) {
|
||||
u32 saveMask = __osDisableInt();
|
||||
|
@ -1,10 +1,10 @@
|
||||
#include "common.h"
|
||||
#include "PR/piint.h"
|
||||
|
||||
s32 osEPiReadIo(OSPiHandle* pihandle, u32 devAddr, u32* data) {
|
||||
s32 ret;
|
||||
|
||||
osPiGetAccess();
|
||||
ret = osEPiRawReadIo(pihandle, devAddr, data);
|
||||
osPiRelAccess();
|
||||
__osPiGetAccess();
|
||||
ret = __osEPiRawReadIo(pihandle, devAddr, data);
|
||||
__osPiRelAccess();
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "common.h"
|
||||
#include "PR/piint.h"
|
||||
|
||||
s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) {
|
||||
if (!__osPiDevMgr.active) {
|
||||
|
@ -1,11 +1,11 @@
|
||||
#include "common.h"
|
||||
#include "PR/piint.h"
|
||||
|
||||
s32 osEPiWriteIo(OSPiHandle* handle, u32 devAddr, u32 data) {
|
||||
register s32 ret;
|
||||
|
||||
osPiGetAccess();
|
||||
ret = osEPiRawWriteIo(handle, devAddr, data);
|
||||
osPiRelAccess();
|
||||
__osPiGetAccess();
|
||||
ret = __osEPiRawWriteIo(handle, devAddr, data);
|
||||
__osPiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
#include "common.h"
|
||||
#include "PR/osint.h"
|
||||
|
||||
INCLUDE_ASM(OSPri, "os/osGetThreadPri", osGetThreadPri, OSThread* thread);
|
||||
OSPri osGetThreadPri(OSThread *thread) {
|
||||
if (thread == NULL) {
|
||||
thread = __osRunningThread;
|
||||
}
|
||||
|
||||
return thread->priority;
|
||||
}
|
||||
|
@ -19,8 +19,8 @@ void osSetThreadPri(OSThread* thread, OSPri pri) {
|
||||
if (thread->priority != pri) {
|
||||
thread->priority = pri;
|
||||
if (thread != __osRunningThread && thread->state != 1) {
|
||||
osDequeueThread(thread->queue, thread);
|
||||
osEnqueueThread(thread->queue, thread);
|
||||
__osDequeueThread(thread->queue, thread);
|
||||
__osEnqueueThread(thread->queue, thread);
|
||||
}
|
||||
if (__osRunningThread->priority < __osRunQueue->priority) {
|
||||
__osRunningThread->state = 2;
|
||||
|
@ -1,9 +1,7 @@
|
||||
#include "common.h"
|
||||
#include "PR/rcp.h"
|
||||
|
||||
s32 osSiDeviceBusy(void) {
|
||||
// in oot, status is HW_REG(SI_STATUS_REG, u32);
|
||||
// however, this macro doesn't exist in our libultra version apparently
|
||||
u32 status = *(volatile u32*)(SI_STATUS_REG | 0xA0000000);
|
||||
register u32 status = IO_READ(SI_STATUS_REG);
|
||||
|
||||
if (status & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY)) {
|
||||
return TRUE;
|
||||
|
@ -1,3 +0,0 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM(void, "os/osViRepeatLine", osViRepeatLine, u8 unk);
|
@ -1,4 +1,5 @@
|
||||
#include "common.h"
|
||||
#include "PR/osint.h"
|
||||
#include "PR/R4300.h"
|
||||
|
||||
u32 osVirtualToPhysical(void *addr) {
|
||||
if (IS_KSEG0(addr)) {
|
||||
|
9
src/os/resetglobalintmask.c
Normal file
9
src/os/resetglobalintmask.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/os_internal.h"
|
||||
|
||||
void __osResetGlobalIntMask(OSHWIntr mask) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__OSGlobalIntMask &= ~(mask & ~OS_IM_RCP);
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
@ -1,8 +1,6 @@
|
||||
#include "common.h"
|
||||
#include <PR/osint.h>
|
||||
|
||||
u32 __osPreNMI = 0;
|
||||
|
||||
s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flags)
|
||||
{
|
||||
register u32 saveMask;
|
||||
|
@ -1,4 +1,21 @@
|
||||
#include "common.h"
|
||||
#include <PR/osint.h>
|
||||
|
||||
INCLUDE_ASM(void, "os/seteventmesg", osSetEventMesg, OSEvent event, OSMesgQueue* queue, OSMesg mesg);
|
||||
u32 __osPreNMI = 0;
|
||||
|
||||
void osSetEventMesg(OSEvent event, OSMesgQueue *mq, OSMesg msg) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
__OSEventState *es = &__osEventStateTab[event];
|
||||
|
||||
es->messageQueue = mq;
|
||||
es->message = msg;
|
||||
|
||||
if (event == OS_EVENT_PRENMI) {
|
||||
if (__osShutdown && !__osPreNMI) {
|
||||
osSendMesg(mq, msg, OS_MESG_NOBLOCK);
|
||||
}
|
||||
__osPreNMI = TRUE;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
|
9
src/os/setglobalintmask.c
Normal file
9
src/os/setglobalintmask.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/os_internal.h"
|
||||
|
||||
void __osSetGlobalIntMask(OSHWIntr mask) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__OSGlobalIntMask |= mask;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
5
src/os/settime.c
Normal file
5
src/os/settime.c
Normal file
@ -0,0 +1,5 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void osSetTime(OSTime time) {
|
||||
__osCurrentTime = time;
|
||||
}
|
40
src/os/settimer.c
Normal file
40
src/os/settimer.c
Normal file
@ -0,0 +1,40 @@
|
||||
#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;
|
||||
|
||||
t->next = NULL;
|
||||
t->prev = NULL;
|
||||
t->value = countdown;
|
||||
t->interval = interval;
|
||||
|
||||
if (countdown == 0) {
|
||||
t->value = interval;
|
||||
}
|
||||
|
||||
t->mq = mq;
|
||||
t->msg = msg;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
if (__osTimerList->next != __osTimerList) {
|
||||
next = __osTimerList->next;
|
||||
count = osGetCount();
|
||||
value = count - __osTimerCounter;
|
||||
|
||||
if (value < next->value) {
|
||||
next->value -= value;
|
||||
} else {
|
||||
next->value = 1;
|
||||
}
|
||||
}
|
||||
|
||||
time = __osInsertTimer(t);
|
||||
__osSetTimerIntr(__osTimerList->next->value);
|
||||
__osRestoreInt(saveMask);
|
||||
|
||||
return 0;
|
||||
}
|
34
src/os/startthread.c
Normal file
34
src/os/startthread.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void osStartThread(OSThread *t) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
switch (t->state) {
|
||||
case OS_STATE_WAITING:
|
||||
t->state = OS_STATE_RUNNABLE;
|
||||
__osEnqueueThread(&__osRunQueue, t);
|
||||
break;
|
||||
case OS_STATE_STOPPED:
|
||||
if (t->queue == NULL || t->queue == &__osRunQueue)
|
||||
{
|
||||
t->state = OS_STATE_RUNNABLE;
|
||||
__osEnqueueThread(&__osRunQueue, t);
|
||||
}
|
||||
else
|
||||
{
|
||||
t->state = OS_STATE_WAITING;
|
||||
__osEnqueueThread(t->queue, t);
|
||||
__osEnqueueThread(&__osRunQueue, __osPopThread(t->queue));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (__osRunningThread == NULL) {
|
||||
__osDispatchThread();
|
||||
} else if (__osRunningThread->priority < __osRunQueue->priority) {
|
||||
__osRunningThread->state = OS_STATE_RUNNABLE;
|
||||
__osEnqueueAndYield(&__osRunQueue);
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
24
src/os/stopthread.c
Normal file
24
src/os/stopthread.c
Normal file
@ -0,0 +1,24 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void osStopThread(OSThread *t) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
register u16 state = OS_STATE_RUNNING;
|
||||
|
||||
if (t != NULL) {
|
||||
state = t->state;
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case OS_STATE_RUNNING:
|
||||
__osRunningThread->state = OS_STATE_STOPPED;
|
||||
__osEnqueueAndYield(NULL);
|
||||
break;
|
||||
case OS_STATE_RUNNABLE:
|
||||
case OS_STATE_WAITING:
|
||||
t->state = OS_STATE_STOPPED;
|
||||
__osDequeueThread(t->queue, t);
|
||||
break;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
18
src/os/thread.c
Normal file
18
src/os/thread.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void __osDequeueThread(OSThread **queue, OSThread *t) {
|
||||
register OSThread *pred;
|
||||
register OSThread *succ;
|
||||
|
||||
pred = (OSThread *) queue;
|
||||
succ = pred->next;
|
||||
|
||||
while (succ != NULL) {
|
||||
if (succ == t) {
|
||||
pred->next = t->next;
|
||||
return;
|
||||
}
|
||||
pred = succ;
|
||||
succ = pred->next;
|
||||
}
|
||||
}
|
98
src/os/timerintr.c
Normal file
98
src/os/timerintr.c
Normal file
@ -0,0 +1,98 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void __osTimerServicesInit(void) {
|
||||
__osCurrentTime = 0;
|
||||
__osBaseCounter = 0;
|
||||
__osViIntrCount = 0;
|
||||
__osTimerList->prev = __osTimerList;
|
||||
__osTimerList->next = __osTimerList->prev;
|
||||
__osTimerList->value = 0;
|
||||
__osTimerList->interval = __osTimerList->value;
|
||||
__osTimerList->mq = NULL;
|
||||
__osTimerList->msg = 0;
|
||||
}
|
||||
|
||||
void __osTimerInterrupt(void) {
|
||||
OSTimer *t;
|
||||
u32 count;
|
||||
u32 elapsed_cycles;
|
||||
|
||||
if (__osTimerList->next != __osTimerList) {
|
||||
while (TRUE) {
|
||||
t = __osTimerList->next;
|
||||
if (t == __osTimerList) {
|
||||
__osSetCompare(0);
|
||||
__osTimerCounter = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
count = osGetCount();
|
||||
elapsed_cycles = count - __osTimerCounter;
|
||||
__osTimerCounter = count;
|
||||
|
||||
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;
|
||||
|
||||
if (t->mq != NULL) {
|
||||
osSendMesg(t->mq, t->msg, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
if (t->interval != 0) {
|
||||
t->value = t->interval;
|
||||
__osInsertTimer(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void __osSetTimerIntr(OSTime tim) {
|
||||
OSTime NewTime;
|
||||
u32 savedMask;
|
||||
|
||||
if (tim < 468) {
|
||||
tim = 468;
|
||||
}
|
||||
|
||||
savedMask = __osDisableInt();
|
||||
__osTimerCounter = osGetCount();
|
||||
NewTime = __osTimerCounter + tim;
|
||||
__osSetCompare(NewTime);
|
||||
__osRestoreInt(savedMask);
|
||||
}
|
||||
|
||||
OSTime __osInsertTimer(OSTimer *t) {
|
||||
OSTimer *timep;
|
||||
OSTime tim;
|
||||
u32 savedMask;
|
||||
savedMask = __osDisableInt();
|
||||
|
||||
timep = __osTimerList->next;
|
||||
tim = t->value;
|
||||
|
||||
while (timep != __osTimerList && tim > timep->value) {
|
||||
tim -= timep->value;
|
||||
timep = timep->next;
|
||||
}
|
||||
|
||||
t->value = tim;
|
||||
|
||||
if (timep != __osTimerList) {
|
||||
timep->value -= tim;
|
||||
}
|
||||
|
||||
t->next = timep;
|
||||
t->prev = timep->prev;
|
||||
timep->prev->next = t;
|
||||
timep->prev = t;
|
||||
__osRestoreInt(savedMask);
|
||||
return tim;
|
||||
}
|
13
src/os/viblack.c
Normal file
13
src/os/viblack.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViBlack(u8 active) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->state |= VI_STATE_BLACK;
|
||||
} else {
|
||||
__osViNext->state &= ~VI_STATE_BLACK;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
9
src/os/vigetcurrframebuf.c
Normal file
9
src/os/vigetcurrframebuf.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void *osViGetCurrentFramebuffer(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
void *framep = __osViCurr->framep;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
return framep;
|
||||
}
|
9
src/os/vigetmode.c
Normal file
9
src/os/vigetmode.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
u32 osViGetCurrentMode(void) {
|
||||
register u32 savedMask = __osDisableInt();
|
||||
register u32 modeType = __osViCurr->modep->type;
|
||||
|
||||
__osRestoreInt(savedMask);
|
||||
return modeType;
|
||||
}
|
9
src/os/vigetnextframebuf.c
Normal file
9
src/os/vigetnextframebuf.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void *osViGetNextFramebuffer(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
void *framep = __osViNext->framep;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
return framep;
|
||||
}
|
13
src/os/virepeatline.c
Normal file
13
src/os/virepeatline.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViRepeatLine(u8 active) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->state |= VI_STATE_REPEATLINE;
|
||||
} else {
|
||||
__osViNext->state &= ~VI_STATE_REPEATLINE;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
10
src/os/visetevent.c
Normal file
10
src/os/visetevent.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViSetEvent(OSMesgQueue *mq, OSMesg m, u32 retraceCount) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->msgq = mq;
|
||||
__osViNext->msg = m;
|
||||
__osViNext->retraceCount = retraceCount;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
11
src/os/visetmode.c
Normal file
11
src/os/visetmode.c
Normal file
@ -0,0 +1,11 @@
|
||||
#include "common.h"
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViSetMode(OSViMode *modep) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->modep = modep;
|
||||
__osViNext->state = VI_STATE_MODE_UPDATED;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
44
src/os/visetspecial.c
Normal file
44
src/os/visetspecial.c
Normal file
@ -0,0 +1,44 @@
|
||||
#include "PR/rcp.h"
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViSetSpecialFeatures(u32 func) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if ((func & OS_VI_GAMMA_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_GAMMA_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_GAMMA_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_DITHER_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_GAMMA_DITHER_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_DITHER_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_GAMMA_DITHER_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DIVOT_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_DIVOT_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DIVOT_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_DIVOT_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DITHER_FILTER_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_DITHER_FILTER_ON;
|
||||
__osViNext->control &= ~VI_CTRL_ANTIALIAS_MASK;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DITHER_FILTER_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_DITHER_FILTER_ON;
|
||||
__osViNext->control |= __osViNext->modep->comRegs.ctrl & VI_CTRL_ANTIALIAS_MASK;
|
||||
}
|
||||
|
||||
__osViNext->state |= VI_STATE_CTRL_UPDATED;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
9
src/os/visetyscale.c
Normal file
9
src/os/visetyscale.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViSetYScale(f32 value) {
|
||||
register u32 saveMask;
|
||||
saveMask = __osDisableInt();
|
||||
__osViNext->y.factor = value;
|
||||
__osViNext->state |= VI_STATE_YSCALE_UPDATED;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
9
src/os/viswapbuf.c
Normal file
9
src/os/viswapbuf.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/viint.h"
|
||||
|
||||
void osViSwapBuffer(void* frameBufPtr) {
|
||||
u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->framep = frameBufPtr;
|
||||
__osViNext->state |= VI_STATE_BUFFER_UPDATED;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
68
src/os/viswapcontext.c
Normal file
68
src/os/viswapcontext.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include "PR/rcp.h"
|
||||
#include "PR/viint.h"
|
||||
|
||||
void __osViSwapContext() {
|
||||
register OSViMode *vm;
|
||||
register __OSViContext *vc;
|
||||
u32 origin;
|
||||
u32 vStart;
|
||||
u32 hStart;
|
||||
u32 nomValue;
|
||||
u32 field;
|
||||
|
||||
field = 0;
|
||||
vc = __osViNext;
|
||||
vm = vc->modep;
|
||||
|
||||
field = IO_READ(VI_CURRENT_REG) & 1; //field num
|
||||
|
||||
origin = osVirtualToPhysical(vc->framep) + (vm->fldRegs[field].origin);
|
||||
if (vc->state & VI_STATE_XSCALE_UPDATED) {
|
||||
vc->x.scale |= (vm->comRegs.xScale & ~VI_SCALE_MASK);
|
||||
} else {
|
||||
vc->x.scale = vm->comRegs.xScale;
|
||||
}
|
||||
|
||||
if (vc->state & VI_STATE_YSCALE_UPDATED) {
|
||||
nomValue = vm->fldRegs[field].yScale & VI_SCALE_MASK;
|
||||
vc->y.scale = vc->y.factor * nomValue;
|
||||
vc->y.scale |= vm->fldRegs[field].yScale & ~VI_SCALE_MASK;
|
||||
} else {
|
||||
vc->y.scale = vm->fldRegs[field].yScale;
|
||||
}
|
||||
|
||||
vStart = (vm->fldRegs[field].vStart - (__additional_scanline << 0x10)) + __additional_scanline;
|
||||
hStart = vm->comRegs.hStart;
|
||||
|
||||
if (vc->state & VI_STATE_BLACK) {
|
||||
hStart = 0;
|
||||
}
|
||||
|
||||
if (vc->state & VI_STATE_REPEATLINE) {
|
||||
vc->y.scale = 0;
|
||||
origin = osVirtualToPhysical(vc->framep);
|
||||
}
|
||||
|
||||
if (vc->state & VI_STATE_FADE) {
|
||||
vc->y.scale = (vc->y.offset << VI_SUBPIXEL_SH) & (VI_2_10_FPART_MASK << VI_SUBPIXEL_SH);
|
||||
origin = osVirtualToPhysical(vc->framep);
|
||||
}
|
||||
|
||||
IO_WRITE(VI_ORIGIN_REG, origin);
|
||||
IO_WRITE(VI_WIDTH_REG, vm->comRegs.width);
|
||||
IO_WRITE(VI_BURST_REG, vm->comRegs.burst);
|
||||
IO_WRITE(VI_V_SYNC_REG, vm->comRegs.vSync);
|
||||
IO_WRITE(VI_H_SYNC_REG, vm->comRegs.hSync);
|
||||
IO_WRITE(VI_LEAP_REG, vm->comRegs.leap);
|
||||
IO_WRITE(VI_H_START_REG, hStart);
|
||||
IO_WRITE(VI_V_START_REG, vStart);
|
||||
IO_WRITE(VI_V_BURST_REG, vm->fldRegs[field].vBurst);
|
||||
IO_WRITE(VI_INTR_REG, vm->fldRegs[field].vIntr);
|
||||
IO_WRITE(VI_X_SCALE_REG, vc->x.scale);
|
||||
IO_WRITE(VI_Y_SCALE_REG, vc->y.scale);
|
||||
IO_WRITE(VI_CONTROL_REG, vc->control);
|
||||
|
||||
__osViNext = __osViCurr;
|
||||
__osViCurr = vc;
|
||||
*__osViNext = *__osViCurr;
|
||||
}
|
9
src/os/yieldthread.c
Normal file
9
src/os/yieldthread.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "PR/osint.h"
|
||||
|
||||
void osYieldThread(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osRunningThread->state = OS_STATE_RUNNABLE;
|
||||
__osEnqueueAndYield(&__osRunQueue);
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
@ -846,7 +846,7 @@ def disassemble(bytes, midx, symbol_map={}, comments=True, romstart=0, namespace
|
||||
out += f"ActorPartBlueprint {struct['name']}[] = {{\n"
|
||||
|
||||
for _ in range(0, struct["length"] // 36):
|
||||
d = unpack(">IbbbbbbhIIIIhxxxxxx", bytes.read(36))
|
||||
d = unpack(">IbbbbbbhIIIIbbxxxxxx", bytes.read(36))
|
||||
|
||||
out += INDENT + "{\n"
|
||||
out += INDENT + INDENT + f".flags = {read_flags(d[0], 'ActorPartFlags')},\n"
|
||||
@ -859,6 +859,7 @@ def disassemble(bytes, midx, symbol_map={}, comments=True, romstart=0, namespace
|
||||
out += INDENT + INDENT + f".eventFlags = {read_flags(d[10], 'ActorEventFlags')},\n"
|
||||
out += INDENT + INDENT + f".elementImmunityFlags = {read_flags(d[11], 'ElementImmunityFlags')},\n"
|
||||
out += INDENT + INDENT + f".unk_1C = {d[12]},\n"
|
||||
out += INDENT + INDENT + f".unk_1D = {d[13]},\n"
|
||||
out += INDENT + "},\n"
|
||||
|
||||
out += f"}};\n"
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
.section .data
|
||||
|
||||
dlabel D_80094670
|
||||
dlabel __osTimerList
|
||||
.word 0x800D9210, 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
dlabel D_80094680
|
||||
@ -26,7 +26,7 @@ dlabel D_80094694
|
||||
dlabel D_80094698
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_8009469C
|
||||
dlabel __additional_scanline
|
||||
.word 0x00000000
|
||||
|
||||
dlabel osViModeTable
|
||||
@ -62,10 +62,10 @@ dlabel D_800958F4
|
||||
dlabel D_800958F8
|
||||
.word 0x02E6D354
|
||||
|
||||
dlabel D_800958FC
|
||||
dlabel __osShutdown
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_80095900
|
||||
dlabel __OSGlobalIntMask
|
||||
.word 0x003FFF01, 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
dlabel D_80095910
|
||||
@ -101,10 +101,10 @@ dlabel D_800959A4
|
||||
dlabel D_800959A8
|
||||
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
dlabel D_800959D0
|
||||
dlabel __osViCurr
|
||||
.word D_80095970
|
||||
|
||||
dlabel D_800959D4
|
||||
dlabel __osViNext
|
||||
.word D_800959A0, 0x00000000, 0x00000000
|
||||
|
||||
dlabel D_800959E0
|
||||
|
@ -1,267 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
.section .rodata
|
||||
|
||||
dlabel jtbl_80099B20
|
||||
.word .L800613D4_3C7D4, .L800612F4_3C6F4, .L80061328_3C728, .L800613E4_3C7E4, .L800613E4_3C7E4, .L8006135C_3C75C, .L80061398_3C798, 0
|
||||
|
||||
.section .text
|
||||
|
||||
glabel osDevMgrMain
|
||||
/* 3C490 80061090 27BDFFB8 */ addiu $sp, $sp, -0x48
|
||||
/* 3C494 80061094 AFB20030 */ sw $s2, 0x30($sp)
|
||||
/* 3C498 80061098 00809021 */ addu $s2, $a0, $zero
|
||||
/* 3C49C 8006109C AFB40038 */ sw $s4, 0x38($sp)
|
||||
/* 3C4A0 800610A0 24140002 */ addiu $s4, $zero, 2
|
||||
/* 3C4A4 800610A4 AFB5003C */ sw $s5, 0x3c($sp)
|
||||
/* 3C4A8 800610A8 24150001 */ addiu $s5, $zero, 1
|
||||
/* 3C4AC 800610AC AFBF0040 */ sw $ra, 0x40($sp)
|
||||
/* 3C4B0 800610B0 AFB30034 */ sw $s3, 0x34($sp)
|
||||
/* 3C4B4 800610B4 AFB1002C */ sw $s1, 0x2c($sp)
|
||||
/* 3C4B8 800610B8 AFB00028 */ sw $s0, 0x28($sp)
|
||||
/* 3C4BC 800610BC AFA00018 */ sw $zero, 0x18($sp)
|
||||
.L800610C0:
|
||||
/* 3C4C0 800610C0 8E440008 */ lw $a0, 8($s2)
|
||||
/* 3C4C4 800610C4 27A50018 */ addiu $a1, $sp, 0x18
|
||||
/* 3C4C8 800610C8 0C0195BC */ jal osRecvMesg
|
||||
/* 3C4CC 800610CC 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C4D0 800610D0 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C4D4 800610D4 8C500014 */ lw $s0, 0x14($v0)
|
||||
/* 3C4D8 800610D8 1200007C */ beqz $s0, .L800612CC
|
||||
/* 3C4DC 800610DC 00000000 */ nop
|
||||
/* 3C4E0 800610E0 92020004 */ lbu $v0, 4($s0)
|
||||
/* 3C4E4 800610E4 14540078 */ bne $v0, $s4, .L800612C8
|
||||
/* 3C4E8 800610E8 00000000 */ nop
|
||||
/* 3C4EC 800610EC 8E020014 */ lw $v0, 0x14($s0)
|
||||
/* 3C4F0 800610F0 2C420002 */ sltiu $v0, $v0, 2
|
||||
/* 3C4F4 800610F4 10400074 */ beqz $v0, .L800612C8
|
||||
/* 3C4F8 800610F8 2402FFFF */ addiu $v0, $zero, -1
|
||||
/* 3C4FC 800610FC 9603001A */ lhu $v1, 0x1a($s0)
|
||||
/* 3C500 80061100 AE02001C */ sw $v0, 0x1c($s0)
|
||||
/* 3C504 80061104 000310C0 */ sll $v0, $v1, 3
|
||||
/* 3C508 80061108 00431021 */ addu $v0, $v0, $v1
|
||||
/* 3C50C 8006110C 00021080 */ sll $v0, $v0, 2
|
||||
/* 3C510 80061110 02021021 */ addu $v0, $s0, $v0
|
||||
/* 3C514 80061114 96030018 */ lhu $v1, 0x18($s0)
|
||||
/* 3C518 80061118 2451002C */ addiu $s1, $v0, 0x2c
|
||||
/* 3C51C 8006111C 24020003 */ addiu $v0, $zero, 3
|
||||
/* 3C520 80061120 10620005 */ beq $v1, $v0, .L80061138
|
||||
/* 3C524 80061124 00000000 */ nop
|
||||
/* 3C528 80061128 8E220004 */ lw $v0, 4($s1)
|
||||
/* 3C52C 8006112C 8E23000C */ lw $v1, 0xc($s1)
|
||||
/* 3C530 80061130 00431023 */ subu $v0, $v0, $v1
|
||||
/* 3C534 80061134 AE220004 */ sw $v0, 4($s1)
|
||||
.L80061138:
|
||||
/* 3C538 80061138 96020018 */ lhu $v0, 0x18($s0)
|
||||
/* 3C53C 8006113C 14540005 */ bne $v0, $s4, .L80061154
|
||||
/* 3C540 80061140 00009821 */ addu $s3, $zero, $zero
|
||||
/* 3C544 80061144 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C548 80061148 8C420014 */ lw $v0, 0x14($v0)
|
||||
/* 3C54C 8006114C 8C420014 */ lw $v0, 0x14($v0)
|
||||
/* 3C550 80061150 2C530001 */ sltiu $s3, $v0, 1
|
||||
.L80061154:
|
||||
/* 3C554 80061154 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C558 80061158 27A5001C */ addiu $a1, $sp, 0x1c
|
||||
/* 3C55C 8006115C 0C0195BC */ jal osRecvMesg
|
||||
/* 3C560 80061160 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C564 80061164 3C040010 */ lui $a0, 0x10
|
||||
/* 3C568 80061168 0C01AD0C */ jal osResetGlobalIntMask
|
||||
/* 3C56C 8006116C 34840401 */ ori $a0, $a0, 0x401
|
||||
/* 3C570 80061170 3C050500 */ lui $a1, 0x500
|
||||
/* 3C574 80061174 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C578 80061178 34A50510 */ ori $a1, $a1, 0x510
|
||||
/* 3C57C 8006117C 8E030024 */ lw $v1, 0x24($s0)
|
||||
/* 3C580 80061180 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C584 80061184 3C068000 */ lui $a2, 0x8000
|
||||
/* 3C588 80061188 0C01ADB8 */ jal osEPiRawWriteIo
|
||||
/* 3C58C 8006118C 00663025 */ or $a2, $v1, $a2
|
||||
.L80061190:
|
||||
/* 3C590 80061190 8E44000C */ lw $a0, 0xc($s2)
|
||||
/* 3C594 80061194 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 3C598 80061198 0C0195BC */ jal osRecvMesg
|
||||
/* 3C59C 8006119C 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C5A0 800611A0 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C5A4 800611A4 8C500014 */ lw $s0, 0x14($v0)
|
||||
/* 3C5A8 800611A8 9603001A */ lhu $v1, 0x1a($s0)
|
||||
/* 3C5AC 800611AC 000310C0 */ sll $v0, $v1, 3
|
||||
/* 3C5B0 800611B0 00431021 */ addu $v0, $v0, $v1
|
||||
/* 3C5B4 800611B4 00021080 */ sll $v0, $v0, 2
|
||||
/* 3C5B8 800611B8 02021021 */ addu $v0, $s0, $v0
|
||||
/* 3C5BC 800611BC 2451002C */ addiu $s1, $v0, 0x2c
|
||||
/* 3C5C0 800611C0 8E230000 */ lw $v1, ($s1)
|
||||
/* 3C5C4 800611C4 2402001D */ addiu $v0, $zero, 0x1d
|
||||
/* 3C5C8 800611C8 14620027 */ bne $v1, $v0, .L80061268
|
||||
/* 3C5CC 800611CC 02002021 */ addu $a0, $s0, $zero
|
||||
/* 3C5D0 800611D0 3C050500 */ lui $a1, 0x500
|
||||
/* 3C5D4 800611D4 8E020024 */ lw $v0, 0x24($s0)
|
||||
/* 3C5D8 800611D8 34A50510 */ ori $a1, $a1, 0x510
|
||||
/* 3C5DC 800611DC 3C061000 */ lui $a2, 0x1000
|
||||
/* 3C5E0 800611E0 0C01ADB8 */ jal osEPiRawWriteIo
|
||||
/* 3C5E4 800611E4 00463025 */ or $a2, $v0, $a2
|
||||
/* 3C5E8 800611E8 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C5EC 800611EC 8E060024 */ lw $a2, 0x24($s0)
|
||||
/* 3C5F0 800611F0 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C5F4 800611F4 3C050500 */ lui $a1, 0x500
|
||||
/* 3C5F8 800611F8 0C01ADB8 */ jal osEPiRawWriteIo
|
||||
/* 3C5FC 800611FC 34A50510 */ ori $a1, $a1, 0x510
|
||||
/* 3C600 80061200 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C604 80061204 3C050500 */ lui $a1, 0x500
|
||||
/* 3C608 80061208 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C60C 8006120C 34A50508 */ ori $a1, $a1, 0x508
|
||||
/* 3C610 80061210 0C01AD5C */ jal osEPiRawReadIo
|
||||
/* 3C614 80061214 27A60024 */ addiu $a2, $sp, 0x24
|
||||
/* 3C618 80061218 8FA20024 */ lw $v0, 0x24($sp)
|
||||
/* 3C61C 8006121C 3C030200 */ lui $v1, 0x200
|
||||
/* 3C620 80061220 00431024 */ and $v0, $v0, $v1
|
||||
/* 3C624 80061224 10400008 */ beqz $v0, .L80061248
|
||||
/* 3C628 80061228 3C050500 */ lui $a1, 0x500
|
||||
/* 3C62C 8006122C 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C630 80061230 34A50510 */ ori $a1, $a1, 0x510
|
||||
/* 3C634 80061234 8E030024 */ lw $v1, 0x24($s0)
|
||||
/* 3C638 80061238 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C63C 8006123C 3C060100 */ lui $a2, 0x100
|
||||
/* 3C640 80061240 0C01ADB8 */ jal osEPiRawWriteIo
|
||||
/* 3C644 80061244 00663025 */ or $a2, $v1, $a2
|
||||
.L80061248:
|
||||
/* 3C648 80061248 3C03A460 */ lui $v1, 0xa460
|
||||
/* 3C64C 8006124C 34630010 */ ori $v1, $v1, 0x10
|
||||
/* 3C650 80061250 3C040010 */ lui $a0, 0x10
|
||||
/* 3C654 80061254 24020004 */ addiu $v0, $zero, 4
|
||||
/* 3C658 80061258 AE220000 */ sw $v0, ($s1)
|
||||
/* 3C65C 8006125C AC740000 */ sw $s4, ($v1)
|
||||
/* 3C660 80061260 0C01ACFC */ jal osSetGlobalIntMask
|
||||
/* 3C664 80061264 34840C01 */ ori $a0, $a0, 0xc01
|
||||
.L80061268:
|
||||
/* 3C668 80061268 8FA50018 */ lw $a1, 0x18($sp)
|
||||
/* 3C66C 8006126C 8CA40004 */ lw $a0, 4($a1)
|
||||
/* 3C670 80061270 0C019608 */ jal osSendMesg
|
||||
/* 3C674 80061274 00003021 */ addu $a2, $zero, $zero
|
||||
/* 3C678 80061278 16750006 */ bne $s3, $s5, .L80061294
|
||||
/* 3C67C 8006127C 00000000 */ nop
|
||||
/* 3C680 80061280 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C684 80061284 8C420014 */ lw $v0, 0x14($v0)
|
||||
/* 3C688 80061288 8C42002C */ lw $v0, 0x2c($v0)
|
||||
/* 3C68C 8006128C 1040FFC0 */ beqz $v0, .L80061190
|
||||
/* 3C690 80061290 00009821 */ addu $s3, $zero, $zero
|
||||
.L80061294:
|
||||
/* 3C694 80061294 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C698 80061298 00002821 */ addu $a1, $zero, $zero
|
||||
/* 3C69C 8006129C 0C019608 */ jal osSendMesg
|
||||
/* 3C6A0 800612A0 00003021 */ addu $a2, $zero, $zero
|
||||
/* 3C6A4 800612A4 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C6A8 800612A8 8C420014 */ lw $v0, 0x14($v0)
|
||||
/* 3C6AC 800612AC 9442001A */ lhu $v0, 0x1a($v0)
|
||||
/* 3C6B0 800612B0 1455FF83 */ bne $v0, $s5, .L800610C0
|
||||
/* 3C6B4 800612B4 00000000 */ nop
|
||||
/* 3C6B8 800612B8 0C019890 */ jal osYieldThread
|
||||
/* 3C6BC 800612BC 00000000 */ nop
|
||||
/* 3C6C0 800612C0 08018430 */ j .L800610C0
|
||||
/* 3C6C4 800612C4 00000000 */ nop
|
||||
.L800612C8:
|
||||
/* 3C6C8 800612C8 8FA20018 */ lw $v0, 0x18($sp)
|
||||
.L800612CC:
|
||||
/* 3C6CC 800612CC 94420000 */ lhu $v0, ($v0)
|
||||
/* 3C6D0 800612D0 2443FFF6 */ addiu $v1, $v0, -0xa
|
||||
/* 3C6D4 800612D4 2C620007 */ sltiu $v0, $v1, 7
|
||||
/* 3C6D8 800612D8 10400042 */ beqz $v0, .L800613E4_3C7E4
|
||||
/* 3C6DC 800612DC 00031080 */ sll $v0, $v1, 2
|
||||
/* 3C6E0 800612E0 3C01800A */ lui $at, %hi(jtbl_80099B20)
|
||||
/* 3C6E4 800612E4 00220821 */ addu $at, $at, $v0
|
||||
/* 3C6E8 800612E8 8C229B20 */ lw $v0, %lo(jtbl_80099B20)($at)
|
||||
/* 3C6EC 800612EC 00400008 */ jr $v0
|
||||
/* 3C6F0 800612F0 00000000 */ nop
|
||||
.L800612F4_3C6F4:
|
||||
/* 3C6F4 800612F4 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C6F8 800612F8 27A5001C */ addiu $a1, $sp, 0x1c
|
||||
/* 3C6FC 800612FC 0C0195BC */ jal osRecvMesg
|
||||
/* 3C700 80061300 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C704 80061304 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C708 80061308 8C45000C */ lw $a1, 0xc($v0)
|
||||
/* 3C70C 8006130C 8C460008 */ lw $a2, 8($v0)
|
||||
/* 3C710 80061310 8C470010 */ lw $a3, 0x10($v0)
|
||||
/* 3C714 80061314 8E420014 */ lw $v0, 0x14($s2)
|
||||
/* 3C718 80061318 0040F809 */ jalr $v0
|
||||
/* 3C71C 8006131C 00002021 */ addu $a0, $zero, $zero
|
||||
/* 3C720 80061320 080184FA */ j .L800613E8
|
||||
/* 3C724 80061324 00000000 */ nop
|
||||
.L80061328_3C728:
|
||||
/* 3C728 80061328 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C72C 8006132C 27A5001C */ addiu $a1, $sp, 0x1c
|
||||
/* 3C730 80061330 0C0195BC */ jal osRecvMesg
|
||||
/* 3C734 80061334 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C738 80061338 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C73C 8006133C 8C45000C */ lw $a1, 0xc($v0)
|
||||
/* 3C740 80061340 8C460008 */ lw $a2, 8($v0)
|
||||
/* 3C744 80061344 8C470010 */ lw $a3, 0x10($v0)
|
||||
/* 3C748 80061348 8E420014 */ lw $v0, 0x14($s2)
|
||||
/* 3C74C 8006134C 0040F809 */ jalr $v0
|
||||
/* 3C750 80061350 24040001 */ addiu $a0, $zero, 1
|
||||
/* 3C754 80061354 080184FA */ j .L800613E8
|
||||
/* 3C758 80061358 00000000 */ nop
|
||||
.L8006135C_3C75C:
|
||||
/* 3C75C 8006135C 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C760 80061360 27A5001C */ addiu $a1, $sp, 0x1c
|
||||
/* 3C764 80061364 0C0195BC */ jal osRecvMesg
|
||||
/* 3C768 80061368 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C76C 8006136C 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C770 80061370 8C430010 */ lw $v1, 0x10($v0)
|
||||
/* 3C774 80061374 AFA30010 */ sw $v1, 0x10($sp)
|
||||
/* 3C778 80061378 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C77C 8006137C 8C46000C */ lw $a2, 0xc($v0)
|
||||
/* 3C780 80061380 8C470008 */ lw $a3, 8($v0)
|
||||
/* 3C784 80061384 8E420018 */ lw $v0, 0x18($s2)
|
||||
/* 3C788 80061388 0040F809 */ jalr $v0
|
||||
/* 3C78C 8006138C 00002821 */ addu $a1, $zero, $zero
|
||||
/* 3C790 80061390 080184FA */ j .L800613E8
|
||||
/* 3C794 80061394 00000000 */ nop
|
||||
.L80061398_3C798:
|
||||
/* 3C798 80061398 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C79C 8006139C 27A5001C */ addiu $a1, $sp, 0x1c
|
||||
/* 3C7A0 800613A0 0C0195BC */ jal osRecvMesg
|
||||
/* 3C7A4 800613A4 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C7A8 800613A8 8FA20018 */ lw $v0, 0x18($sp)
|
||||
/* 3C7AC 800613AC 8C430010 */ lw $v1, 0x10($v0)
|
||||
/* 3C7B0 800613B0 AFA30010 */ sw $v1, 0x10($sp)
|
||||
/* 3C7B4 800613B4 8C440014 */ lw $a0, 0x14($v0)
|
||||
/* 3C7B8 800613B8 8C46000C */ lw $a2, 0xc($v0)
|
||||
/* 3C7BC 800613BC 8C470008 */ lw $a3, 8($v0)
|
||||
/* 3C7C0 800613C0 8E420018 */ lw $v0, 0x18($s2)
|
||||
/* 3C7C4 800613C4 0040F809 */ jalr $v0
|
||||
/* 3C7C8 800613C8 24050001 */ addiu $a1, $zero, 1
|
||||
/* 3C7CC 800613CC 080184FA */ j .L800613E8
|
||||
/* 3C7D0 800613D0 00000000 */ nop
|
||||
.L800613D4_3C7D4:
|
||||
/* 3C7D4 800613D4 8FA50018 */ lw $a1, 0x18($sp)
|
||||
/* 3C7D8 800613D8 8CA40004 */ lw $a0, 4($a1)
|
||||
/* 3C7DC 800613DC 0C019608 */ jal osSendMesg
|
||||
/* 3C7E0 800613E0 00003021 */ addu $a2, $zero, $zero
|
||||
.L800613E4_3C7E4:
|
||||
/* 3C7E4 800613E4 2402FFFF */ addiu $v0, $zero, -1
|
||||
.L800613E8:
|
||||
/* 3C7E8 800613E8 1440FF35 */ bnez $v0, .L800610C0
|
||||
/* 3C7EC 800613EC 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 3C7F0 800613F0 8E44000C */ lw $a0, 0xc($s2)
|
||||
/* 3C7F4 800613F4 0C0195BC */ jal osRecvMesg
|
||||
/* 3C7F8 800613F8 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3C7FC 800613FC 8FA50018 */ lw $a1, 0x18($sp)
|
||||
/* 3C800 80061400 8CA40004 */ lw $a0, 4($a1)
|
||||
/* 3C804 80061404 0C019608 */ jal osSendMesg
|
||||
/* 3C808 80061408 00003021 */ addu $a2, $zero, $zero
|
||||
/* 3C80C 8006140C 8E440010 */ lw $a0, 0x10($s2)
|
||||
/* 3C810 80061410 00002821 */ addu $a1, $zero, $zero
|
||||
/* 3C814 80061414 0C019608 */ jal osSendMesg
|
||||
/* 3C818 80061418 00003021 */ addu $a2, $zero, $zero
|
||||
/* 3C81C 8006141C 08018430 */ j .L800610C0
|
||||
/* 3C820 80061420 00000000 */ nop
|
||||
/* 3C824 80061424 8FBF0040 */ lw $ra, 0x40($sp)
|
||||
/* 3C828 80061428 8FB5003C */ lw $s5, 0x3c($sp)
|
||||
/* 3C82C 8006142C 8FB40038 */ lw $s4, 0x38($sp)
|
||||
/* 3C830 80061430 8FB30034 */ lw $s3, 0x34($sp)
|
||||
/* 3C834 80061434 8FB20030 */ lw $s2, 0x30($sp)
|
||||
/* 3C838 80061438 8FB1002C */ lw $s1, 0x2c($sp)
|
||||
/* 3C83C 8006143C 8FB00028 */ lw $s0, 0x28($sp)
|
||||
/* 3C840 80061440 03E00008 */ jr $ra
|
||||
/* 3C844 80061444 27BD0048 */ addiu $sp, $sp, 0x48
|
||||
/* 3C848 80061448 00000000 */ nop
|
||||
/* 3C84C 8006144C 00000000 */ nop
|
@ -1,7 +1,7 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osPiGetAccess
|
||||
glabel __osPiGetAccess
|
||||
/* 3C8A4 800614A4 3C028009 */ lui $v0, %hi(__osPiAccessQueueEnabled)
|
||||
/* 3C8A8 800614A8 8C423D90 */ lw $v0, %lo(__osPiAccessQueueEnabled)($v0)
|
||||
/* 3C8AC 800614AC 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
|
@ -1,7 +1,7 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osPiRelAccess
|
||||
glabel __osPiRelAccess
|
||||
/* 3C910 80061510 27BDFFE8 */ addiu $sp, $sp, -0x18
|
||||
/* 3C914 80061514 AFBF0010 */ sw $ra, 0x10($sp)
|
||||
/* 3C918 80061518 3C04800B */ lui $a0, %hi(gOsPiMessageQueue)
|
||||
|
@ -1,48 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osAiSetNextBuffer
|
||||
/* 3CA80 80061680 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
/* 3CA84 80061684 AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 3CA88 80061688 00808021 */ addu $s0, $a0, $zero
|
||||
/* 3CA8C 8006168C AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 3CA90 80061690 AFBF0018 */ sw $ra, 0x18($sp)
|
||||
/* 3CA94 80061694 0C01AE14 */ jal osAiDeviceBusy
|
||||
/* 3CA98 80061698 00A08821 */ addu $s1, $a1, $zero
|
||||
/* 3CA9C 8006169C 14400018 */ bnez $v0, .L80061700
|
||||
/* 3CAA0 800616A0 2402FFFF */ addiu $v0, $zero, -1
|
||||
/* 3CAA4 800616A4 3C028009 */ lui $v0, %hi(hdwrBugFlag)
|
||||
/* 3CAA8 800616A8 90423DA0 */ lbu $v0, %lo(hdwrBugFlag)($v0)
|
||||
/* 3CAAC 800616AC 10400002 */ beqz $v0, .L800616B8
|
||||
/* 3CAB0 800616B0 02002021 */ addu $a0, $s0, $zero
|
||||
/* 3CAB4 800616B4 2484E000 */ addiu $a0, $a0, -0x2000
|
||||
.L800616B8:
|
||||
/* 3CAB8 800616B8 02111021 */ addu $v0, $s0, $s1
|
||||
/* 3CABC 800616BC 30421FFF */ andi $v0, $v0, 0x1fff
|
||||
/* 3CAC0 800616C0 14400004 */ bnez $v0, .L800616D4
|
||||
/* 3CAC4 800616C4 24020001 */ addiu $v0, $zero, 1
|
||||
/* 3CAC8 800616C8 3C018009 */ lui $at, %hi(hdwrBugFlag)
|
||||
/* 3CACC 800616CC 080185B7 */ j .L800616DC
|
||||
/* 3CAD0 800616D0 A0223DA0 */ sb $v0, %lo(hdwrBugFlag)($at)
|
||||
.L800616D4:
|
||||
/* 3CAD4 800616D4 3C018009 */ lui $at, %hi(hdwrBugFlag)
|
||||
/* 3CAD8 800616D8 A0203DA0 */ sb $zero, %lo(hdwrBugFlag)($at)
|
||||
.L800616DC:
|
||||
/* 3CADC 800616DC 0C0187A4 */ jal osVirtualToPhysical
|
||||
/* 3CAE0 800616E0 00000000 */ nop
|
||||
/* 3CAE4 800616E4 3C05A450 */ lui $a1, 0xa450
|
||||
/* 3CAE8 800616E8 34A50004 */ ori $a1, $a1, 4
|
||||
/* 3CAEC 800616EC 00402021 */ addu $a0, $v0, $zero
|
||||
/* 3CAF0 800616F0 00001021 */ addu $v0, $zero, $zero
|
||||
/* 3CAF4 800616F4 3C03A450 */ lui $v1, 0xa450
|
||||
/* 3CAF8 800616F8 AC640000 */ sw $a0, ($v1)
|
||||
/* 3CAFC 800616FC ACB10000 */ sw $s1, ($a1)
|
||||
.L80061700:
|
||||
/* 3CB00 80061700 8FBF0018 */ lw $ra, 0x18($sp)
|
||||
/* 3CB04 80061704 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 3CB08 80061708 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 3CB0C 8006170C 03E00008 */ jr $ra
|
||||
/* 3CB10 80061710 27BD0020 */ addiu $sp, $sp, 0x20
|
||||
/* 3CB14 80061714 00000000 */ nop
|
||||
/* 3CB18 80061718 00000000 */ nop
|
||||
/* 3CB1C 8006171C 00000000 */ nop
|
@ -5,11 +5,11 @@ glabel osSiCreateAccessQueue
|
||||
/* 41170 80065D70 27BDFFE8 */ addiu $sp, $sp, -0x18
|
||||
/* 41174 80065D74 24020001 */ addiu $v0, $zero, 1
|
||||
/* 41178 80065D78 AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 4117C 80065D7C 3C10800E */ lui $s0, %hi(D_800DACA8)
|
||||
/* 41180 80065D80 2610ACA8 */ addiu $s0, $s0, %lo(D_800DACA8)
|
||||
/* 4117C 80065D7C 3C10800E */ lui $s0, %hi(__osSiAccessQueue)
|
||||
/* 41180 80065D80 2610ACA8 */ addiu $s0, $s0, %lo(__osSiAccessQueue)
|
||||
/* 41184 80065D84 02002021 */ addu $a0, $s0, $zero
|
||||
/* 41188 80065D88 3C05800B */ lui $a1, %hi(D_800AF900)
|
||||
/* 4118C 80065D8C 24A5F900 */ addiu $a1, $a1, %lo(D_800AF900)
|
||||
/* 41188 80065D88 3C05800B */ lui $a1, %hi(siAccessBuf)
|
||||
/* 4118C 80065D8C 24A5F900 */ addiu $a1, $a1, %lo(siAccessBuf)
|
||||
/* 41190 80065D90 AFBF0014 */ sw $ra, 0x14($sp)
|
||||
/* 41194 80065D94 3C018009 */ lui $at, %hi(__osSiAccessQueueEnabled)
|
||||
/* 41198 80065D98 AC224640 */ sw $v0, %lo(__osSiAccessQueueEnabled)($at)
|
||||
|
@ -10,20 +10,20 @@ glabel osSiGetAccess
|
||||
/* 411D8 80065DD8 24020001 */ addiu $v0, $zero, 1
|
||||
/* 411DC 80065DDC 3C018009 */ lui $at, %hi(__osSiAccessQueueEnabled)
|
||||
/* 411E0 80065DE0 AC224640 */ sw $v0, %lo(__osSiAccessQueueEnabled)($at)
|
||||
/* 411E4 80065DE4 3C04800E */ lui $a0, %hi(D_800DACA8)
|
||||
/* 411E8 80065DE8 2484ACA8 */ addiu $a0, $a0, %lo(D_800DACA8)
|
||||
/* 411EC 80065DEC 3C05800B */ lui $a1, %hi(D_800AF900)
|
||||
/* 411F0 80065DF0 24A5F900 */ addiu $a1, $a1, %lo(D_800AF900)
|
||||
/* 411E4 80065DE4 3C04800E */ lui $a0, %hi(__osSiAccessQueue)
|
||||
/* 411E8 80065DE8 2484ACA8 */ addiu $a0, $a0, %lo(__osSiAccessQueue)
|
||||
/* 411EC 80065DEC 3C05800B */ lui $a1, %hi(siAccessBuf)
|
||||
/* 411F0 80065DF0 24A5F900 */ addiu $a1, $a1, %lo(siAccessBuf)
|
||||
/* 411F4 80065DF4 0C019560 */ jal osCreateMesgQueue
|
||||
/* 411F8 80065DF8 24060001 */ addiu $a2, $zero, 1
|
||||
/* 411FC 80065DFC 3C04800E */ lui $a0, %hi(D_800DACA8)
|
||||
/* 41200 80065E00 2484ACA8 */ addiu $a0, $a0, %lo(D_800DACA8)
|
||||
/* 411FC 80065DFC 3C04800E */ lui $a0, %hi(__osSiAccessQueue)
|
||||
/* 41200 80065E00 2484ACA8 */ addiu $a0, $a0, %lo(__osSiAccessQueue)
|
||||
/* 41204 80065E04 00002821 */ addu $a1, $zero, $zero
|
||||
/* 41208 80065E08 0C019608 */ jal osSendMesg
|
||||
/* 4120C 80065E0C 00003021 */ addu $a2, $zero, $zero
|
||||
.L80065E10:
|
||||
/* 41210 80065E10 3C04800E */ lui $a0, %hi(D_800DACA8)
|
||||
/* 41214 80065E14 2484ACA8 */ addiu $a0, $a0, %lo(D_800DACA8)
|
||||
/* 41210 80065E10 3C04800E */ lui $a0, %hi(__osSiAccessQueue)
|
||||
/* 41214 80065E14 2484ACA8 */ addiu $a0, $a0, %lo(__osSiAccessQueue)
|
||||
/* 41218 80065E18 27A50010 */ addiu $a1, $sp, 0x10
|
||||
/* 4121C 80065E1C 0C0195BC */ jal osRecvMesg
|
||||
/* 41220 80065E20 24060001 */ addiu $a2, $zero, 1
|
||||
|
@ -4,8 +4,8 @@
|
||||
glabel osSiRelAccess
|
||||
/* 41230 80065E30 27BDFFE8 */ addiu $sp, $sp, -0x18
|
||||
/* 41234 80065E34 AFBF0010 */ sw $ra, 0x10($sp)
|
||||
/* 41238 80065E38 3C04800E */ lui $a0, %hi(D_800DACA8)
|
||||
/* 4123C 80065E3C 2484ACA8 */ addiu $a0, $a0, %lo(D_800DACA8)
|
||||
/* 41238 80065E38 3C04800E */ lui $a0, %hi(__osSiAccessQueue)
|
||||
/* 4123C 80065E3C 2484ACA8 */ addiu $a0, $a0, %lo(__osSiAccessQueue)
|
||||
/* 41240 80065E40 00002821 */ addu $a1, $zero, $zero
|
||||
/* 41244 80065E44 0C019608 */ jal osSendMesg
|
||||
/* 41248 80065E48 00003021 */ addu $a2, $zero, $zero
|
||||
|
@ -1,83 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osStartThread
|
||||
/* 41420 80066020 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
/* 41424 80066024 AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 41428 80066028 00808021 */ addu $s0, $a0, $zero
|
||||
/* 4142C 8006602C AFBF001C */ sw $ra, 0x1c($sp)
|
||||
/* 41430 80066030 AFB20018 */ sw $s2, 0x18($sp)
|
||||
/* 41434 80066034 0C01ACD8 */ jal __osDisableInt
|
||||
/* 41438 80066038 AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 4143C 8006603C 96030010 */ lhu $v1, 0x10($s0)
|
||||
/* 41440 80066040 00409021 */ addu $s2, $v0, $zero
|
||||
/* 41444 80066044 24020001 */ addiu $v0, $zero, 1
|
||||
/* 41448 80066048 10620008 */ beq $v1, $v0, .L8006606C
|
||||
/* 4144C 8006604C 24020008 */ addiu $v0, $zero, 8
|
||||
/* 41450 80066050 1462001E */ bne $v1, $v0, .L800660CC
|
||||
/* 41454 80066054 24020002 */ addiu $v0, $zero, 2
|
||||
/* 41458 80066058 A6020010 */ sh $v0, 0x10($s0)
|
||||
/* 4145C 8006605C 3C048009 */ lui $a0, %hi(__osRunQueue)
|
||||
/* 41460 80066060 24844658 */ addiu $a0, $a0, %lo(__osRunQueue)
|
||||
/* 41464 80066064 08019831 */ j .L800660C4
|
||||
/* 41468 80066068 02002821 */ addu $a1, $s0, $zero
|
||||
.L8006606C:
|
||||
/* 4146C 8006606C 8E020008 */ lw $v0, 8($s0)
|
||||
/* 41470 80066070 50400006 */ beql $v0, $zero, .L8006608C
|
||||
/* 41474 80066074 24020002 */ addiu $v0, $zero, 2
|
||||
/* 41478 80066078 3C118009 */ lui $s1, %hi(__osRunQueue)
|
||||
/* 4147C 8006607C 26314658 */ addiu $s1, $s1, %lo(__osRunQueue)
|
||||
/* 41480 80066080 14510007 */ bne $v0, $s1, .L800660A0
|
||||
/* 41484 80066084 02002821 */ addu $a1, $s0, $zero
|
||||
/* 41488 80066088 24020002 */ addiu $v0, $zero, 2
|
||||
.L8006608C:
|
||||
/* 4148C 8006608C A6020010 */ sh $v0, 0x10($s0)
|
||||
/* 41490 80066090 3C048009 */ lui $a0, %hi(__osRunQueue)
|
||||
/* 41494 80066094 24844658 */ addiu $a0, $a0, %lo(__osRunQueue)
|
||||
/* 41498 80066098 08019831 */ j .L800660C4
|
||||
/* 4149C 8006609C 02002821 */ addu $a1, $s0, $zero
|
||||
.L800660A0:
|
||||
/* 414A0 800660A0 8E040008 */ lw $a0, 8($s0)
|
||||
/* 414A4 800660A4 24020008 */ addiu $v0, $zero, 8
|
||||
/* 414A8 800660A8 0C01AC5D */ jal osEnqueueThread
|
||||
/* 414AC 800660AC A6020010 */ sh $v0, 0x10($s0)
|
||||
/* 414B0 800660B0 8E040008 */ lw $a0, 8($s0)
|
||||
/* 414B4 800660B4 0C01AC6F */ jal __osPopThread
|
||||
/* 414B8 800660B8 00000000 */ nop
|
||||
/* 414BC 800660BC 02202021 */ addu $a0, $s1, $zero
|
||||
/* 414C0 800660C0 00402821 */ addu $a1, $v0, $zero
|
||||
.L800660C4:
|
||||
/* 414C4 800660C4 0C01AC5D */ jal osEnqueueThread
|
||||
/* 414C8 800660C8 00000000 */ nop
|
||||
.L800660CC:
|
||||
/* 414CC 800660CC 3C048009 */ lui $a0, %hi(__osRunningThread)
|
||||
/* 414D0 800660D0 8C844660 */ lw $a0, %lo(__osRunningThread)($a0)
|
||||
/* 414D4 800660D4 14800005 */ bnez $a0, .L800660EC
|
||||
/* 414D8 800660D8 00000000 */ nop
|
||||
/* 414DC 800660DC 0C01AC75 */ jal osDispatchThread
|
||||
/* 414E0 800660E0 00000000 */ nop
|
||||
/* 414E4 800660E4 08019846 */ j .L80066118
|
||||
/* 414E8 800660E8 00000000 */ nop
|
||||
.L800660EC:
|
||||
/* 414EC 800660EC 3C028009 */ lui $v0, %hi(__osRunQueue)
|
||||
/* 414F0 800660F0 8C424658 */ lw $v0, %lo(__osRunQueue)($v0)
|
||||
/* 414F4 800660F4 8C830004 */ lw $v1, 4($a0)
|
||||
/* 414F8 800660F8 8C420004 */ lw $v0, 4($v0)
|
||||
/* 414FC 800660FC 0062182A */ slt $v1, $v1, $v0
|
||||
/* 41500 80066100 10600005 */ beqz $v1, .L80066118
|
||||
/* 41504 80066104 24020002 */ addiu $v0, $zero, 2
|
||||
/* 41508 80066108 A4820010 */ sh $v0, 0x10($a0)
|
||||
/* 4150C 8006610C 3C048009 */ lui $a0, %hi(__osRunQueue)
|
||||
/* 41510 80066110 0C01AC1B */ jal __osEnqueueAndYield
|
||||
/* 41514 80066114 24844658 */ addiu $a0, $a0, %lo(__osRunQueue)
|
||||
.L80066118:
|
||||
/* 41518 80066118 0C01ACF4 */ jal __osRestoreInt
|
||||
/* 4151C 8006611C 02402021 */ addu $a0, $s2, $zero
|
||||
/* 41520 80066120 8FBF001C */ lw $ra, 0x1c($sp)
|
||||
/* 41524 80066124 8FB20018 */ lw $s2, 0x18($sp)
|
||||
/* 41528 80066128 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 4152C 8006612C 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 41530 80066130 03E00008 */ jr $ra
|
||||
/* 41534 80066134 27BD0020 */ addiu $sp, $sp, 0x20
|
||||
/* 41538 80066138 00000000 */ nop
|
||||
/* 4153C 8006613C 00000000 */ nop
|
@ -1,57 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osStopThread
|
||||
/* 41540 80066140 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
/* 41544 80066144 AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 41548 80066148 00808021 */ addu $s0, $a0, $zero
|
||||
/* 4154C 8006614C AFBF0018 */ sw $ra, 0x18($sp)
|
||||
/* 41550 80066150 0C01ACD8 */ jal __osDisableInt
|
||||
/* 41554 80066154 AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 41558 80066158 24030004 */ addiu $v1, $zero, 4
|
||||
/* 4155C 8006615C 12000002 */ beqz $s0, .L80066168
|
||||
/* 41560 80066160 00408821 */ addu $s1, $v0, $zero
|
||||
/* 41564 80066164 96030010 */ lhu $v1, 0x10($s0)
|
||||
.L80066168:
|
||||
/* 41568 80066168 3063FFFF */ andi $v1, $v1, 0xffff
|
||||
/* 4156C 8006616C 24020004 */ addiu $v0, $zero, 4
|
||||
/* 41570 80066170 1062000C */ beq $v1, $v0, .L800661A4
|
||||
/* 41574 80066174 28620005 */ slti $v0, $v1, 5
|
||||
/* 41578 80066178 10400005 */ beqz $v0, .L80066190
|
||||
/* 4157C 8006617C 24020002 */ addiu $v0, $zero, 2
|
||||
/* 41580 80066180 10620010 */ beq $v1, $v0, .L800661C4
|
||||
/* 41584 80066184 00000000 */ nop
|
||||
/* 41588 80066188 08019876 */ j .L800661D8
|
||||
/* 4158C 8006618C 00000000 */ nop
|
||||
.L80066190:
|
||||
/* 41590 80066190 24020008 */ addiu $v0, $zero, 8
|
||||
/* 41594 80066194 1062000B */ beq $v1, $v0, .L800661C4
|
||||
/* 41598 80066198 00000000 */ nop
|
||||
/* 4159C 8006619C 08019876 */ j .L800661D8
|
||||
/* 415A0 800661A0 00000000 */ nop
|
||||
.L800661A4:
|
||||
/* 415A4 800661A4 3C038009 */ lui $v1, %hi(__osRunningThread)
|
||||
/* 415A8 800661A8 8C634660 */ lw $v1, %lo(__osRunningThread)($v1)
|
||||
/* 415AC 800661AC 00002021 */ addu $a0, $zero, $zero
|
||||
/* 415B0 800661B0 24020001 */ addiu $v0, $zero, 1
|
||||
/* 415B4 800661B4 0C01AC1B */ jal __osEnqueueAndYield
|
||||
/* 415B8 800661B8 A4620010 */ sh $v0, 0x10($v1)
|
||||
/* 415BC 800661BC 08019876 */ j .L800661D8
|
||||
/* 415C0 800661C0 00000000 */ nop
|
||||
.L800661C4:
|
||||
/* 415C4 800661C4 8E040008 */ lw $a0, 8($s0)
|
||||
/* 415C8 800661C8 24020001 */ addiu $v0, $zero, 1
|
||||
/* 415CC 800661CC 02002821 */ addu $a1, $s0, $zero
|
||||
/* 415D0 800661D0 0C019880 */ jal osDequeueThread
|
||||
/* 415D4 800661D4 A6020010 */ sh $v0, 0x10($s0)
|
||||
.L800661D8:
|
||||
/* 415D8 800661D8 0C01ACF4 */ jal __osRestoreInt
|
||||
/* 415DC 800661DC 02202021 */ addu $a0, $s1, $zero
|
||||
/* 415E0 800661E0 8FBF0018 */ lw $ra, 0x18($sp)
|
||||
/* 415E4 800661E4 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 415E8 800661E8 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 415EC 800661EC 03E00008 */ jr $ra
|
||||
/* 415F0 800661F0 27BD0020 */ addiu $sp, $sp, 0x20
|
||||
/* 415F4 800661F4 00000000 */ nop
|
||||
/* 415F8 800661F8 00000000 */ nop
|
||||
/* 415FC 800661FC 00000000 */ nop
|
@ -1,23 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel osDequeueThread
|
||||
/* 41600 80066200 8C820000 */ lw $v0, ($a0)
|
||||
/* 41604 80066204 10400009 */ beqz $v0, .L8006622C
|
||||
/* 41608 80066208 00000000 */ nop
|
||||
.L8006620C:
|
||||
/* 4160C 8006620C 54450004 */ bnel $v0, $a1, .L80066220
|
||||
/* 41610 80066210 00402021 */ addu $a0, $v0, $zero
|
||||
/* 41614 80066214 8C420000 */ lw $v0, ($v0)
|
||||
/* 41618 80066218 0801988B */ j .L8006622C
|
||||
/* 4161C 8006621C AC820000 */ sw $v0, ($a0)
|
||||
.L80066220:
|
||||
/* 41620 80066220 8C420000 */ lw $v0, ($v0)
|
||||
/* 41624 80066224 1440FFF9 */ bnez $v0, .L8006620C
|
||||
/* 41628 80066228 00000000 */ nop
|
||||
.L8006622C:
|
||||
/* 4162C 8006622C 03E00008 */ jr $ra
|
||||
/* 41630 80066230 00000000 */ nop
|
||||
/* 41634 80066234 00000000 */ nop
|
||||
/* 41638 80066238 00000000 */ nop
|
||||
/* 4163C 8006623C 00000000 */ nop
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user