1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-15 20:35:13 +00:00

Naming some functions in libultra_code, decompiling a decent amount. (#77)

* osgetactivequeue ok

* osspdevicebusy ok

* osGetCurrFaultedThread ok

* osSpRawStartDma OK

* __osSpSetPc and osViGetCurrentFramebuffer OK

* sinf, sins, and sptask OK

* coss OK

* cosf OK

* ran format.sh

* Updated PR to use ultratypes

* osContStartQuery OK

* ran format.sh

* Updated PR to fix issues

* Made suggested changes
This commit is contained in:
Lucas Shaw 2020-04-18 18:40:27 -07:00 committed by GitHub
parent 4961eb0a90
commit 21750d5aee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 709 additions and 747 deletions

View file

@ -1,5 +1,5 @@
#include <global.h>
OSThread* func_80104140() {
OSThread* __osGetActiveQueue() {
return __osActiveQueue;
}

View file

@ -0,0 +1,17 @@
#include <ultra64.h>
#include <global.h>
#include <ultra64/hardware.h>
s32 __osSpRawStartDma(s32 direction, u32 devAddr, void* dramAddr, u32 size) {
if (__osSpDeviceBusy()) {
return -1;
}
HW_REG(SP_MEM_ADDR_REG, u32) = devAddr;
HW_REG(SP_DRAM_ADDR_REG, u32) = osVirtualToPhysical(dramAddr);
if (direction == OS_READ) {
HW_REG(SP_WR_LEN_REG, u32) = size - 1;
} else {
HW_REG(SP_RD_LEN_REG, u32) = size - 1;
}
return 0;
}

View file

@ -2,16 +2,17 @@
#include <global.h>
#include <ultra64/hardware.h>
s32 func_801067A0(u32 a0) {
register u32 spStatus;
s32 __osSpSetPc(u32 data) {
spStatus = HW_REG(SP_STATUS_REG, u32);
register u32 spStatus = HW_REG(SP_STATUS_REG, u32);
if (!(spStatus & SP_STATUS_HALT)) {
return -1;
}
HW_REG(SP_PC_REG, u32) = a0;
else {
HW_REG(SP_PC_REG, u32) = data;
}
return 0;
}

View file

@ -1,21 +0,0 @@
#include <ultra64.h>
#include <global.h>
void func_80101B40(u32* a0) {
a0[0] = 0x3F800000; // Float?
a0[1] = 0;
a0[2] = 0;
a0[3] = 0;
a0[4] = 0;
a0[5] = 0;
a0[6] = 0x3F800000;
a0[7] = 0;
a0[8] = 0;
a0[9] = 0;
a0[10] = 0x3F800000;
a0[11] = 0;
a0[12] = 0;
a0[13] = 0;
a0[14] = 0;
a0[15] = 0x3F800000;
}

View file

@ -0,0 +1,26 @@
#include "libultra_internal.h"
#include <global.h>
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801031F0/func_801031F0.s")
s32 osContStartQuery(OSMesgQueue* mq) {
s32 ret;
ret = 0;
__osSiGetAccess();
if (_osCont_lastPollType != CONT_CMD_REQUEST_STATUS) {
__osPackRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &_osPifInternalBuff);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
ret = __osSiRawStartDma(OS_READ, &_osPifInternalBuff);
_osCont_lastPollType = CONT_CMD_REQUEST_STATUS;
__osSiRelAccess();
return ret;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801031F0/func_8010328C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801031F0/func_801032B0.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801031F0/func_80103A70.s")

View file

@ -1,15 +0,0 @@
#include <ultra64.h>
#include <global.h>
#include <ultra64/hardware.h>
u32 func_80103B30() {
register u32 status;
status = HW_REG(SP_STATUS_REG, u32);
if (status & 0x1C) {
return 1;
}
return 0;
}

3
src/libultra_code/cosf.c Normal file
View file

@ -0,0 +1,3 @@
#include "libultra_internal.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/cosf/cosf.s")

3
src/libultra_code/coss.c Normal file
View file

@ -0,0 +1,3 @@
#include "libultra_internal.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/coss/coss.s")

View file

@ -29,7 +29,7 @@ s32 __osSiRawWriteIo(void*, u32);
s32 osPiRawReadIo(u32 a0, u32 *a1);
void __osSpSetStatus(u32);
u32 __osSpGetStatus();
s32 __osSpSetPc(void*);
s32 __osSpSetPc(u32 data);
s32 __osSpDeviceBusy();
s32 __osSiDeviceBusy();
s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size);

View file

@ -1,7 +1,7 @@
#include <ultra64.h>
#include <global.h>
u32* func_80106760() {
u32* osViGetCurrentFramebuffer() {
register u32 sMask = __osDisableInt();
u32* var1;

3
src/libultra_code/sinf.c Normal file
View file

@ -0,0 +1,3 @@
#include "libultra_internal.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/sinf/sinf.s")

3
src/libultra_code/sins.c Normal file
View file

@ -0,0 +1,3 @@
#include "libultra_internal.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/sins/sins.s")

13
src/libultra_code/sp.c Normal file
View file

@ -0,0 +1,13 @@
#include <ultra64.h>
#include <global.h>
#include <ultra64/hardware.h>
u32 __osSpDeviceBusy() {
register u32 status = HW_REG(SP_STATUS_REG, u32);
if (status & (SP_STATUS_DMA_BUSY | SP_STATUS_DMA_FULL | SP_STATUS_IO_FULL)) {
return 1;
}
return 0;
}

View file

@ -0,0 +1,68 @@
#include "libultra_internal.h"
#include <ultra64/hardware.h>
#define _osVirtualToPhysical(ptr) \
if (ptr != NULL) { \
ptr = (void*)osVirtualToPhysical(ptr); \
}
static OSTask sTmpTask;
OSTask* _VirtualToPhysicalTask(OSTask* intp) {
OSTask* tp;
tp = &sTmpTask;
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;
}
#ifdef NON_MATCHING
// very close to matching, just regalloc
void osSpTaskLoad(OSTask* intp) {
OSTask* tp;
tp = _VirtualToPhysicalTask(intp);
if (tp->t.flags & OS_TASK_YIELDED) {
tp->t.ucode_data = tp->t.yield_data_ptr;
tp->t.ucode_data_size = tp->t.yield_data_size;
intp->t.flags &= ~OS_TASK_YIELDED;
if (tp->t.flags & OS_TASK_LOADABLE) {
tp->t.ucode = HW_REG((u32)intp->t.yield_data_ptr + OS_YIELD_DATA_SIZE - 4, u32);
}
}
osWritebackDCache(tp, sizeof(OSTask));
__osSpSetStatus(SP_CLR_SIG0 | SP_CLR_SIG1 | SP_CLR_SIG2 | SP_SET_INTR_BREAK);
while (__osSpSetPc(SP_IMEM_START) == -1) {
;
}
while (__osSpRawStartDma(1, (SP_IMEM_START - sizeof(*tp)), tp, sizeof(OSTask)) == -1) {
;
}
while (__osSpDeviceBusy()) {
;
}
while (__osSpRawStartDma(1, SP_IMEM_START, tp->t.ucode_boot, tp->t.ucode_boot_size) == -1) {
;
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/sptask/osSpTaskLoad.s")
#endif
void osSpTaskStartGo(OSTask* tp) {
while (__osSpDeviceBusy()) {
;
}
__osSpSetStatus(SP_SET_INTR_BREAK | SP_CLR_SSTEP | SP_CLR_BROKE | SP_CLR_HALT);
}