mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
c: osViGetCurrentFrameBuffer
This commit is contained in:
@@ -1,18 +0,0 @@
|
||||
glabel osViGetCurrentFramebuffer
|
||||
/* 0D2A70 800D1E70 27BDFFD8 */ addiu $sp, $sp, -0x28
|
||||
/* 0D2A74 800D1E74 AFBF001C */ sw $ra, 0x1c($sp)
|
||||
/* 0D2A78 800D1E78 0C034958 */ jal __osDisableInt
|
||||
/* 0D2A7C 800D1E7C AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* 0D2A80 800D1E80 3C0E800E */ lui $t6, %hi(__osViCurr) # $t6, 0x800e
|
||||
/* 0D2A84 800D1E84 8DCE4870 */ lw $t6, %lo(__osViCurr)($t6)
|
||||
/* 0D2A88 800D1E88 00408025 */ move $s0, $v0
|
||||
/* 0D2A8C 800D1E8C 02002025 */ move $a0, $s0
|
||||
/* 0D2A90 800D1E90 8DCF0004 */ lw $t7, 4($t6)
|
||||
/* 0D2A94 800D1E94 0C034960 */ jal __osRestoreInt
|
||||
/* 0D2A98 800D1E98 AFAF0020 */ sw $t7, 0x20($sp)
|
||||
/* 0D2A9C 800D1E9C 8FBF001C */ lw $ra, 0x1c($sp)
|
||||
/* 0D2AA0 800D1EA0 8FA20020 */ lw $v0, 0x20($sp)
|
||||
/* 0D2AA4 800D1EA4 8FB00018 */ lw $s0, 0x18($sp)
|
||||
/* 0D2AA8 800D1EA8 03E00008 */ jr $ra
|
||||
/* 0D2AAC 800D1EAC 27BD0028 */ addiu $sp, $sp, 0x28
|
||||
|
||||
@@ -5,11 +5,43 @@
|
||||
#include "macros.h"
|
||||
#include "libultra_internal.h"
|
||||
|
||||
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;
|
||||
|
||||
extern OSTime __osCurrentTime;//__osCurrentTime
|
||||
extern u32 __osBaseCounter; //__osBaseCounter
|
||||
extern __OSViContext *__osViCurr;
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/func_800D1DF0.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osViGetCurrentFramebuffer.s")
|
||||
|
||||
void *osViGetCurrentFramebuffer(void)
|
||||
{
|
||||
register u32 saveMask;
|
||||
void *framep;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
framep = __osViCurr->framep;
|
||||
__osRestoreInt(saveMask);
|
||||
return framep;
|
||||
}
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osViGetNextFramebuffer.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osSpTaskLoad.s")
|
||||
|
||||
+73
-17
@@ -9,6 +9,8 @@
|
||||
#define OS_SC_PRE_NMI_MSG 4
|
||||
#define OS_SC_MAX_MESGS 8
|
||||
|
||||
#define OS_SC_YIELD 2
|
||||
|
||||
typedef struct {
|
||||
short type;
|
||||
char misc[30];
|
||||
@@ -147,17 +149,76 @@ GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007957C.s")
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/__scMain.s")
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079760.s")
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079818.s")
|
||||
|
||||
|
||||
#if 1
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079B44.s")
|
||||
#else
|
||||
extern f32 D_800DE740;
|
||||
extern f32 D_800DE744;
|
||||
extern f32 D_800DE748;
|
||||
extern f32 D_800DE74C;
|
||||
extern u32 D_800DE750;
|
||||
extern f32 D_800E796C;
|
||||
extern u32 D_80126124;
|
||||
void func_80079B44(OSSched *sc){
|
||||
OSScTask *t, *sp = 0, *dp = 0;
|
||||
s32 state;
|
||||
u32 delta;
|
||||
f32 tmp1;
|
||||
|
||||
|
||||
//assert(sc->curRSPTask);
|
||||
|
||||
t = sc->curRSPTask;
|
||||
sc->curRSPTask = 0;
|
||||
|
||||
if (t->list.t.type == 2) {
|
||||
D_80126124 = osGetCount();
|
||||
delta = D_80126124 - D_80126120;
|
||||
tmp1 = (f32) delta;
|
||||
if(delta < 0){
|
||||
tmp1 += 4294967296.0;
|
||||
}
|
||||
D_800DE74C = tmp1*60.0f/D_800E796C;
|
||||
D_800DE744 = D_800DE744 + D_800DE74C;
|
||||
if(D_800DE740 < D_800DE74C){
|
||||
D_800DE740 = D_800DE74C;
|
||||
}
|
||||
if(D_800DE750%1000 == 1 || D_800DE750%1000 == 2){
|
||||
D_800DE748 = D_800DE744/500.0f;
|
||||
D_800DE744 = 0.0f;
|
||||
D_800DE740 = 0.0f;
|
||||
}
|
||||
}
|
||||
if(t->state & 0x10){
|
||||
if(func_800D1DF0(&(t->list))){
|
||||
t->state |= 0x20;
|
||||
if ((t->flags & 0x07) == -3) {
|
||||
|
||||
/* push the task back on the list */
|
||||
t->next = sc->gfxListHead;
|
||||
sc->gfxListHead = t;
|
||||
if (sc->gfxListTail == 0)
|
||||
sc->gfxListTail = t;
|
||||
}
|
||||
}
|
||||
else{
|
||||
t->state &= -3;
|
||||
}
|
||||
}
|
||||
else {
|
||||
t->state &= -3;
|
||||
__scTaskComplete(sc, t);
|
||||
}
|
||||
|
||||
state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0);
|
||||
if ( (__scSchedule (sc, &sp, &dp, state)) != state)
|
||||
__scExec(sc, sp, dp);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* __scHandleRDP is called when an RDP task signals that it has
|
||||
* finished
|
||||
*/
|
||||
void __scHandleRDP(OSSched *sc)
|
||||
{
|
||||
void __scHandleRDP(OSSched *sc){
|
||||
OSScTask *t, *sp = 0, *dp = 0;
|
||||
s32 state;
|
||||
|
||||
@@ -174,8 +235,7 @@ void __scHandleRDP(OSSched *sc)
|
||||
}
|
||||
|
||||
|
||||
OSScTask *__scTaskReady(OSScTask *t)
|
||||
{
|
||||
OSScTask *__scTaskReady(OSScTask *t){
|
||||
if (t) {
|
||||
/*
|
||||
* If there is a pending swap bail out til later (next
|
||||
@@ -194,14 +254,13 @@ OSScTask *__scTaskReady(OSScTask *t)
|
||||
#if 1
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/__scTaskComplete.s")
|
||||
#else
|
||||
s32 __scTaskComplete(OSSched *sc, OSScTask *t)
|
||||
{
|
||||
s32 __scTaskComplete(OSSched *sc, OSScTask *t) {
|
||||
int rv;
|
||||
int firsttime = 1;
|
||||
|
||||
if ((t->state & 0x03) == 0) { /* none of the needs bits set */
|
||||
|
||||
// assert (t->msgQ);
|
||||
assert (t->msgQ);
|
||||
if(t->msgQ){
|
||||
|
||||
//rv = osSendMesg(t->msgQ, &t->msg, OS_MESG_BLOCK);
|
||||
@@ -231,8 +290,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t)
|
||||
}
|
||||
#endif
|
||||
|
||||
void __scAppendList(OSSched *sc, OSScTask *t)
|
||||
{
|
||||
void __scAppendList(OSSched *sc, OSScTask *t) {
|
||||
u32 tmp = t->list.t.type;
|
||||
if (tmp == 2){
|
||||
if(sc->audioListTail)
|
||||
@@ -254,8 +312,7 @@ void __scAppendList(OSSched *sc, OSScTask *t)
|
||||
t->state = t->flags & 0x03;
|
||||
}
|
||||
|
||||
void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp)
|
||||
{
|
||||
void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp){
|
||||
|
||||
if (sp) {
|
||||
if (sp->list.t.type == M_AUDTASK) {
|
||||
@@ -286,8 +343,7 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp)
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007A080.s")
|
||||
#else
|
||||
extern OSTime D_80126118;
|
||||
void func_8007A080(OSSched *sc)
|
||||
{
|
||||
void func_8007A080(OSSched *sc) {
|
||||
if (sc->curRSPTask->list.t.type == M_GFXTASK) {
|
||||
|
||||
//sc->curRSPTask->state |= OS_SC_YIELD;
|
||||
|
||||
Reference in New Issue
Block a user