Decompile rdpCreateTask
This commit is contained in:
parent
028b86f7aa
commit
c49972f46e
|
|
@ -58,7 +58,7 @@
|
|||
build/ROMID/lib/lib_233c0.o (section); \
|
||||
build/ROMID/lib/lib_24e40.o (section); \
|
||||
build/ROMID/lib/lib_2f490.o (section); \
|
||||
build/ROMID/lib/lib_2f8a0.o (section); \
|
||||
build/ROMID/lib/rdp.o (section); \
|
||||
build/ROMID/lib/lib_2fa00.o (section); \
|
||||
build/ROMID/lib/ultra/audio/heap.o (section); \
|
||||
build/ROMID/lib/lib_2fba0.o (section); \
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
build/ROMID/lib/lib_233c0.o (section); \
|
||||
build/ROMID/lib/lib_24e40.o (section); \
|
||||
build/ROMID/lib/lib_2f490.o (section); \
|
||||
build/ROMID/lib/lib_2f8a0.o (section); \
|
||||
build/ROMID/lib/rdp.o (section); \
|
||||
build/ROMID/lib/lib_2fa00.o (section); \
|
||||
build/ROMID/lib/ultra/audio/heap.o (section); \
|
||||
build/ROMID/lib/lib_2fba0.o (section); \
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
build/ROMID/lib/lib_233c0.o (section); \
|
||||
build/ROMID/lib/lib_24e40.o (section); \
|
||||
build/ROMID/lib/lib_2f490.o (section); \
|
||||
build/ROMID/lib/lib_2f8a0.o (section); \
|
||||
build/ROMID/lib/rdp.o (section); \
|
||||
build/ROMID/lib/lib_2fa00.o (section); \
|
||||
build/ROMID/lib/ultra/audio/heap.o (section); \
|
||||
build/ROMID/lib/lib_2fba0.o (section); \
|
||||
|
|
|
|||
|
|
@ -25,11 +25,7 @@ typedef struct OSScTask_s {
|
|||
OSTask list;
|
||||
OSMesgQueue *msgQ;
|
||||
OSMesg msg;
|
||||
#ifndef _FINALROM /* all #ifdef items should */
|
||||
OSTime startTime; /* remain at the end!!, or */
|
||||
OSTime totalTime; /* possible conflict if */
|
||||
#endif /* FINALROM library used with */
|
||||
} OSScTask; /* non FINALROM code */
|
||||
} OSScTask;
|
||||
|
||||
/*
|
||||
* OSScTask flags:
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ extern union filedataptr g_TileFileData;
|
|||
extern s32 g_TileNumRooms;
|
||||
extern u32 *g_TileRooms;
|
||||
extern u32 var8009a918;
|
||||
extern u32 var8009a970[256];
|
||||
extern u8 g_RdpDramStack[SP_DRAM_STACK_SIZE8];
|
||||
extern u32 var8009c2d0;
|
||||
extern struct var8009c340 var8009c340;
|
||||
extern u32 var8009c344;
|
||||
|
|
|
|||
|
|
@ -80,11 +80,9 @@ extern u32 var8005f024;
|
|||
extern u32 var8005f030;
|
||||
extern u32 var8005f034;
|
||||
extern u32 var8005f038;
|
||||
extern u16 *var8005f040;
|
||||
extern u16 *var8005f044;
|
||||
extern u32 var8005f048;
|
||||
extern u32 var8005f0a8;
|
||||
extern u32 var8005f108;
|
||||
extern u16 *g_RdpOutBufferEnd;
|
||||
extern u16 *g_RdpOutBufferStart;
|
||||
extern struct rdptask *g_RdpCurTask;
|
||||
extern ALGlobals *var8005f110;
|
||||
extern ALGlobals *alGlobals;
|
||||
extern u32 var8005f120;
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef _IN_LIB_LIB_2F8A0_H
|
||||
#define _IN_LIB_LIB_2F8A0_H
|
||||
#include <ultra64.h>
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
u32 rdpInit(void);
|
||||
void func0002f8f4(Gfx *gdlstart, Gfx *gdlend, u32 arg2, void *arg3);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef _IN_LIB_RDP_H
|
||||
#define _IN_LIB_RDP_H
|
||||
#include <ultra64.h>
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
void rdpInit(void);
|
||||
void rdpCreateTask(Gfx *gdlstart, Gfx *gdlend, u32 arg2, void *msg);
|
||||
|
||||
#endif
|
||||
|
|
@ -7187,4 +7187,10 @@ struct var80095210 {
|
|||
u16 unk32[45];
|
||||
};
|
||||
|
||||
struct rdptask {
|
||||
OSScTask sctask;
|
||||
u16 *framebuffer;
|
||||
u32 unk5c;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2133,15 +2133,15 @@ glabel func0000a044
|
|||
/* a920: 3c018006 */ lui $at,%hi(var8005d5a0)
|
||||
/* a924: 11400006 */ beqz $t2,.L0000a940
|
||||
/* a928: ac2ed5a0 */ sw $t6,%lo(var8005d5a0)($at)
|
||||
/* a92c: 3c0f8006 */ lui $t7,%hi(var8005f108)
|
||||
/* a930: 8deff108 */ lw $t7,%lo(var8005f108)($t7)
|
||||
/* a92c: 3c0f8006 */ lui $t7,%hi(g_RdpCurTask)
|
||||
/* a930: 8deff108 */ lw $t7,%lo(g_RdpCurTask)($t7)
|
||||
/* a934: 8d390028 */ lw $t9,0x28($t1)
|
||||
/* a938: 10000006 */ b .L0000a954
|
||||
/* a93c: adf90058 */ sw $t9,0x58($t7)
|
||||
.L0000a940:
|
||||
/* a940: 3c18800a */ lui $t8,%hi(var8009cac0)
|
||||
/* a944: 3c0e8006 */ lui $t6,%hi(var8005f108)
|
||||
/* a948: 8dcef108 */ lw $t6,%lo(var8005f108)($t6)
|
||||
/* a944: 3c0e8006 */ lui $t6,%hi(g_RdpCurTask)
|
||||
/* a948: 8dcef108 */ lw $t6,%lo(g_RdpCurTask)($t6)
|
||||
/* a94c: 8f18cac0 */ lw $t8,%lo(var8009cac0)($t8)
|
||||
/* a950: add80058 */ sw $t8,0x58($t6)
|
||||
.L0000a954:
|
||||
|
|
|
|||
|
|
@ -66,8 +66,6 @@ u32 var8009a964;
|
|||
u32 var8009a968;
|
||||
u32 var8009a96c;
|
||||
|
||||
u32 var8009a970[256];
|
||||
|
||||
u32 var8005f030 = 0x00000000;
|
||||
u32 var8005f034 = 0x00000000;
|
||||
u32 var8005f038 = 0x00000000;
|
||||
|
|
|
|||
|
|
@ -1,141 +0,0 @@
|
|||
#include <ultra64.h>
|
||||
#include "constants.h"
|
||||
#include "types.h"
|
||||
#include "data.h"
|
||||
#include "bss.h"
|
||||
#include "lib/memory.h"
|
||||
|
||||
u8 var8009ad70[0xb00];
|
||||
|
||||
u16 *var8005f040 = NULL;
|
||||
u16 *var8005f044 = NULL;
|
||||
u32 var8005f048 = 0x00000000;
|
||||
u32 var8005f04c = 0x00000000;
|
||||
u32 var8005f050 = 0x00000000;
|
||||
u32 var8005f054 = 0x00000000;
|
||||
u32 var8005f058 = 0x00000001;
|
||||
u32 var8005f05c = 0x00000002;
|
||||
u32 var8005f060 = 0x00000000;
|
||||
u32 var8005f064 = 0x00000000;
|
||||
u32 var8005f068 = 0x00000000;
|
||||
u32 var8005f06c = 0x00001000;
|
||||
u32 var8005f070 = 0x00000000;
|
||||
u32 var8005f074 = 0x00000800;
|
||||
u32 var8005f078 = (u32) &var8009a970;
|
||||
u32 var8005f07c = 0x00000400;
|
||||
u32 var8005f080 = 0x00000000;
|
||||
u32 var8005f084 = 0x00000000;
|
||||
u32 var8005f088 = 0x00000000;
|
||||
u32 var8005f08c = 0x00000000;
|
||||
u32 var8005f090 = 0x00000000;
|
||||
u32 var8005f094 = 0x00000000;
|
||||
u32 var8005f098 = 0x00000000;
|
||||
u32 var8005f09c = 0x00000000;
|
||||
u32 var8005f0a0 = 0x00000000;
|
||||
u32 var8005f0a4 = 0x00000000;
|
||||
u32 var8005f0a8 = 0x00000000;
|
||||
u32 var8005f0ac = 0x00000000;
|
||||
u32 var8005f0b0 = 0x00000000;
|
||||
u32 var8005f0b4 = 0x00000000;
|
||||
u32 var8005f0b8 = 0x00000001;
|
||||
u32 var8005f0bc = 0x00000002;
|
||||
u32 var8005f0c0 = 0x00000000;
|
||||
u32 var8005f0c4 = 0x00000000;
|
||||
u32 var8005f0c8 = 0x00000000;
|
||||
u32 var8005f0cc = 0x00001000;
|
||||
u32 var8005f0d0 = 0x00000000;
|
||||
u32 var8005f0d4 = 0x00000800;
|
||||
u32 var8005f0d8 = (u32) &var8009a970;
|
||||
u32 var8005f0dc = 0x00000400;
|
||||
u32 var8005f0e0 = 0x00000000;
|
||||
u32 var8005f0e4 = 0x00000000;
|
||||
u32 var8005f0e8 = 0x00000000;
|
||||
u32 var8005f0ec = 0x00000000;
|
||||
u32 var8005f0f0 = 0x00000000;
|
||||
u32 var8005f0f4 = 0x00000000;
|
||||
u32 var8005f0f8 = 0x00000000;
|
||||
u32 var8005f0fc = 0x00000000;
|
||||
u32 var8005f100 = 0x00000000;
|
||||
u32 var8005f104 = 0x00000000;
|
||||
u32 var8005f108 = (u32) &var8005f048;
|
||||
|
||||
void rdpInit(void)
|
||||
{
|
||||
s32 size = 0x10000;
|
||||
|
||||
if (IS4MB()) {
|
||||
size = 0x8000;
|
||||
}
|
||||
|
||||
var8005f044 = malloc(size, MEMPOOL_PERMANENT);
|
||||
var8005f040 = (u16 *)((u32)var8005f044 + size);
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0002f8f4
|
||||
/* 2f8f4: 27bdffe0 */ addiu $sp,$sp,-32
|
||||
/* 2f8f8: 3c038006 */ lui $v1,%hi(var8005f108)
|
||||
/* 2f8fc: 2463f108 */ addiu $v1,$v1,%lo(var8005f108)
|
||||
/* 2f900: afa60028 */ sw $a2,0x28($sp)
|
||||
/* 2f904: 8c660000 */ lw $a2,0x0($v1)
|
||||
/* 2f908: 3c028006 */ lui $v0,%hi(rspbootTextStart)
|
||||
/* 2f90c: 3c0e8006 */ lui $t6,%hi(rspbootTextEnd)
|
||||
/* 2f910: 24429fe0 */ addiu $v0,$v0,%lo(rspbootTextStart)
|
||||
/* 2f914: 25cea0b0 */ addiu $t6,$t6,%lo(rspbootTextEnd)
|
||||
/* 2f918: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* 2f91c: 01c27823 */ subu $t7,$t6,$v0
|
||||
/* 2f920: acc20018 */ sw $v0,0x18($a2)
|
||||
/* 2f924: 3c188006 */ lui $t8,%hi(gspTextStart)
|
||||
/* 2f928: 3c198009 */ lui $t9,%hi(gspDataStart)
|
||||
/* 2f92c: accf001c */ sw $t7,0x1c($a2)
|
||||
/* 2f930: 24c20010 */ addiu $v0,$a2,0x10
|
||||
/* 2f934: 2718a0b0 */ addiu $t8,$t8,%lo(gspTextStart)
|
||||
/* 2f938: 27399ad0 */ addiu $t9,$t9,%lo(gspDataStart)
|
||||
/* 2f93c: ac580010 */ sw $t8,0x10($v0)
|
||||
/* 2f940: ac590018 */ sw $t9,0x18($v0)
|
||||
/* 2f944: 3c088006 */ lui $t0,%hi(var8005f044)
|
||||
/* 2f948: 8d08f044 */ lw $t0,%lo(var8005f044)($t0)
|
||||
/* 2f94c: 3c098006 */ lui $t1,%hi(var8005f040)
|
||||
/* 2f950: 00a45023 */ subu $t2,$a1,$a0
|
||||
/* 2f954: ac480028 */ sw $t0,0x28($v0)
|
||||
/* 2f958: 8d29f040 */ lw $t1,%lo(var8005f040)($t1)
|
||||
/* 2f95c: 000a58c3 */ sra $t3,$t2,0x3
|
||||
/* 2f960: 3c0d800a */ lui $t5,%hi(var8009ad70)
|
||||
/* 2f964: 000b60c0 */ sll $t4,$t3,0x3
|
||||
/* 2f968: 25adad70 */ addiu $t5,$t5,%lo(var8009ad70)
|
||||
/* 2f96c: 240e0b00 */ addiu $t6,$zero,0xb00
|
||||
/* 2f970: ac440030 */ sw $a0,0x30($v0)
|
||||
/* 2f974: ac4c0034 */ sw $t4,0x34($v0)
|
||||
/* 2f978: ac4d0038 */ sw $t5,0x38($v0)
|
||||
/* 2f97c: ac4e003c */ sw $t6,0x3c($v0)
|
||||
/* 2f980: ac49002c */ sw $t1,0x2c($v0)
|
||||
/* 2f984: 3c188009 */ lui $t8,%hi(var8008db30)
|
||||
/* 2f988: 240f0063 */ addiu $t7,$zero,0x63
|
||||
/* 2f98c: 2718db30 */ addiu $t8,$t8,%lo(var8008db30)
|
||||
/* 2f990: acc00000 */ sw $zero,0x0($a2)
|
||||
/* 2f994: accf0008 */ sw $t7,0x8($a2)
|
||||
/* 2f998: acd80050 */ sw $t8,0x50($a2)
|
||||
/* 2f99c: acc70054 */ sw $a3,0x54($a2)
|
||||
/* 2f9a0: 8c790000 */ lw $t9,0x0($v1)
|
||||
/* 2f9a4: 8f280058 */ lw $t0,0x58($t9)
|
||||
/* 2f9a8: acc8000c */ sw $t0,0xc($a2)
|
||||
/* 2f9ac: 0c012048 */ jal osWritebackDCacheAll
|
||||
/* 2f9b0: afa6001c */ sw $a2,0x1c($sp)
|
||||
/* 2f9b4: 3c048009 */ lui $a0,%hi(g_SchedThread)
|
||||
/* 2f9b8: 8fa5001c */ lw $a1,0x1c($sp)
|
||||
/* 2f9bc: 0c0007ea */ jal __scHandleRetraceViaPri
|
||||
/* 2f9c0: 2484dbd0 */ addiu $a0,$a0,%lo(g_SchedThread)
|
||||
/* 2f9c4: 3c028006 */ lui $v0,%hi(var8005f108)
|
||||
/* 2f9c8: 2442f108 */ addiu $v0,$v0,%lo(var8005f108)
|
||||
/* 2f9cc: 8c490000 */ lw $t1,0x0($v0)
|
||||
/* 2f9d0: 3c0a8006 */ lui $t2,%hi(var8005f048)
|
||||
/* 2f9d4: 8fbf0014 */ lw $ra,0x14($sp)
|
||||
/* 2f9d8: 254af048 */ addiu $t2,$t2,%lo(var8005f048)
|
||||
/* 2f9dc: 3c0c8006 */ lui $t4,%hi(var8005f0a8)
|
||||
/* 2f9e0: 258cf0a8 */ addiu $t4,$t4,%lo(var8005f0a8)
|
||||
/* 2f9e4: 012a5826 */ xor $t3,$t1,$t2
|
||||
/* 2f9e8: 016c6826 */ xor $t5,$t3,$t4
|
||||
/* 2f9ec: ac4d0000 */ sw $t5,0x0($v0)
|
||||
/* 2f9f0: 03e00008 */ jr $ra
|
||||
/* 2f9f4: 27bd0020 */ addiu $sp,$sp,0x20
|
||||
);
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
#include "lib/lib_13750.h"
|
||||
#include "lib/lib_13790.h"
|
||||
#include "lib/lib_233c0.h"
|
||||
#include "lib/lib_2f8a0.h"
|
||||
#include "lib/rdp.h"
|
||||
#include "lib/lib_2f490.h"
|
||||
#include "lib/lib_2fa00.h"
|
||||
#include "data.h"
|
||||
|
|
@ -564,7 +564,7 @@ glabel mainInit
|
|||
/* d640: 24a5d990 */ addiu $a1,$a1,-9840
|
||||
/* d644: 2484d968 */ addiu $a0,$a0,-9880
|
||||
/* d648: 00003025 */ move $a2,$zero
|
||||
/* d64c: 0c00bc7d */ jal func0002f8f4
|
||||
/* d64c: 0c00bc7d */ jal rdpCreateTask
|
||||
/* d650: 02003825 */ move $a3,$s0
|
||||
/* d654: 8fa31490 */ lw $v1,0x1490($sp)
|
||||
/* d658: 24630001 */ addiu $v1,$v1,0x1
|
||||
|
|
@ -925,12 +925,12 @@ glabel mainInit
|
|||
/* d868: 0c0026d4 */ jal func00009b50
|
||||
/* d86c: 02002025 */ or $a0,$s0,$zero
|
||||
/* d870: 8faa0048 */ lw $t2,0x48($sp)
|
||||
/* d874: 3c018006 */ lui $at,%hi(var8005f044)
|
||||
/* d874: 3c018006 */ lui $at,%hi(g_RdpOutBufferStart)
|
||||
/* d878: 3c048009 */ lui $a0,%hi(var8008db30)
|
||||
/* d87c: ac2af044 */ sw $t2,%lo(var8005f044)($at)
|
||||
/* d880: 3c018006 */ lui $at,%hi(var8005f040)
|
||||
/* d87c: ac2af044 */ sw $t2,%lo(g_RdpOutBufferStart)($at)
|
||||
/* d880: 3c018006 */ lui $at,%hi(g_RdpOutBufferEnd)
|
||||
/* d884: 254e0800 */ addiu $t6,$t2,0x800
|
||||
/* d888: ac2ef040 */ sw $t6,%lo(var8005f040)($at)
|
||||
/* d888: ac2ef040 */ sw $t6,%lo(g_RdpOutBufferEnd)($at)
|
||||
/* d88c: 2484db30 */ addiu $a0,$a0,%lo(var8008db30)
|
||||
/* d890: 27a51470 */ addiu $a1,$sp,0x1470
|
||||
/* d894: 0c0121bc */ jal osRecvMesg
|
||||
|
|
@ -967,7 +967,7 @@ glabel mainInit
|
|||
/* d904: 24a5dcf0 */ addiu $a1,$a1,%lo(var8005dcf0)
|
||||
/* d908: 2484dcc8 */ addiu $a0,$a0,%lo(var8005dcc8)
|
||||
/* d90c: 00003025 */ or $a2,$zero,$zero
|
||||
/* d910: 0c00be3d */ jal func0002f8f4
|
||||
/* d910: 0c00be3d */ jal rdpCreateTask
|
||||
/* d914: 02003825 */ or $a3,$s0,$zero
|
||||
/* d918: 8fa31488 */ lw $v1,0x1488($sp)
|
||||
/* d91c: 24630001 */ addiu $v1,$v1,0x1
|
||||
|
|
@ -1342,7 +1342,7 @@ glabel mainInit
|
|||
/* de1c: 24a5f610 */ addiu $a1,$a1,-2544
|
||||
/* de20: 02402025 */ or $a0,$s2,$zero
|
||||
/* de24: 00003025 */ or $a2,$zero,$zero
|
||||
/* de28: 0c00c411 */ jal func0002f8f4
|
||||
/* de28: 0c00c411 */ jal rdpCreateTask
|
||||
/* de2c: 8fa70054 */ lw $a3,0x54($sp)
|
||||
/* de30: 26100001 */ addiu $s0,$s0,0x1
|
||||
/* de34: 2a010006 */ slti $at,$s0,0x6
|
||||
|
|
@ -1591,8 +1591,8 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
|
|||
// func0000aab0(2);
|
||||
// func00009b50(fb);
|
||||
//
|
||||
// var8005f044 = texture;
|
||||
// var8005f040 = texture + 0x400; // 0x800 bytes, because texture is u16
|
||||
// g_RdpOutBufferStart = texture;
|
||||
// g_RdpOutBufferEnd = texture + 0x400; // 0x800 bytes, because texture is u16
|
||||
//
|
||||
// while (osRecvMesg(&var8008db30, &sp1470, OS_MESG_NOBLOCK) == 0) {
|
||||
// // empty
|
||||
|
|
@ -1607,7 +1607,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
|
|||
//
|
||||
// if (*(s16 *)sp1470 == 1) {
|
||||
// func0000a044();
|
||||
// func0002f8f4(var8005dcc8, var8005dcf0, 0, sp1450);
|
||||
// rdpCreateTask(var8005dcc8, var8005dcf0, 0, sp1450);
|
||||
// j++;
|
||||
// }
|
||||
// }
|
||||
|
|
@ -2647,7 +2647,7 @@ void mainTick(void)
|
|||
func0000a044();
|
||||
}
|
||||
|
||||
func0002f8f4(gdlstart, gdl, 0, array);
|
||||
rdpCreateTask(gdlstart, gdl, 0, array);
|
||||
var8005d9cc++;
|
||||
func00012a8c();
|
||||
func0f16cf94();
|
||||
|
|
@ -3020,7 +3020,7 @@ glabel mainTick
|
|||
.NB0000ee3c:
|
||||
/* ee3c: 8fa50094 */ lw $a1,0x94($sp)
|
||||
/* ee40: 00003025 */ or $a2,$zero,$zero
|
||||
/* ee44: 0c00c411 */ jal func0002f8f4
|
||||
/* ee44: 0c00c411 */ jal rdpCreateTask
|
||||
/* ee48: 27a70070 */ addiu $a3,$sp,0x70
|
||||
/* ee4c: 3c028006 */ lui $v0,0x8006
|
||||
/* ee50: 2442f2ec */ addiu $v0,$v0,-3348
|
||||
|
|
|
|||
|
|
@ -0,0 +1,113 @@
|
|||
#include <ultra64.h>
|
||||
#include "constants.h"
|
||||
#include "types.h"
|
||||
#include "data.h"
|
||||
#include "bss.h"
|
||||
#include "lib/memory.h"
|
||||
|
||||
u8 g_RdpDramStack[SP_DRAM_STACK_SIZE8];
|
||||
|
||||
u8 g_RdpYieldData[0xb00];
|
||||
|
||||
u16 *g_RdpOutBufferEnd = NULL;
|
||||
u16 *g_RdpOutBufferStart = NULL;
|
||||
|
||||
struct rdptask g_RdpTaskA = {
|
||||
{
|
||||
// OSScTask
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
{
|
||||
// OSTask
|
||||
M_GFXTASK, // type
|
||||
OS_TASK_DP_WAIT, // flags
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
SP_UCODE_SIZE, // ucode_size
|
||||
NULL,
|
||||
SP_UCODE_DATA_SIZE, // ucode_data_size
|
||||
(u64 *) &g_RdpDramStack, // dram_stack
|
||||
SP_DRAM_STACK_SIZE8, // dram_stack_size
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct rdptask g_RdpTaskB = {
|
||||
{
|
||||
// OSScTask
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
{
|
||||
// OSTask
|
||||
M_GFXTASK, // type
|
||||
OS_TASK_DP_WAIT, // flags
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
SP_UCODE_SIZE, // ucode_size
|
||||
NULL,
|
||||
SP_UCODE_DATA_SIZE, // ucode_data_size
|
||||
(u64 *) &g_RdpDramStack, // dram_stack
|
||||
SP_DRAM_STACK_SIZE8, // dram_stack_size
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct rdptask *g_RdpCurTask = &g_RdpTaskA;
|
||||
|
||||
extern u8 rspbootTextStart;
|
||||
extern u8 rspbootTextEnd;
|
||||
extern u8 gspTextStart;
|
||||
extern u8 gspDataStart;
|
||||
|
||||
void rdpInit(void)
|
||||
{
|
||||
s32 size = 0x10000;
|
||||
|
||||
if (IS4MB()) {
|
||||
size = 0x8000;
|
||||
}
|
||||
|
||||
g_RdpOutBufferStart = malloc(size, MEMPOOL_PERMANENT);
|
||||
g_RdpOutBufferEnd = (u16 *)((u32)g_RdpOutBufferStart + size);
|
||||
}
|
||||
|
||||
void rdpCreateTask(Gfx *gdlstart, Gfx *gdlend, u32 arg2, void *msg)
|
||||
{
|
||||
OSScTask *sctask;
|
||||
OSTask *task;
|
||||
|
||||
sctask = &g_RdpCurTask->sctask;
|
||||
task = &sctask->list;
|
||||
|
||||
task->t.ucode_boot = (u64 *) &rspbootTextStart;
|
||||
task->t.ucode_boot_size = (u32) (&rspbootTextEnd - &rspbootTextStart);
|
||||
|
||||
if (rspbootTextStart);
|
||||
|
||||
task->t.ucode = (u64 *) &gspTextStart;
|
||||
task->t.ucode_data = (u64 *) &gspDataStart;
|
||||
task->t.output_buff = (u64 *)g_RdpOutBufferStart;
|
||||
task->t.output_buff_size = (u64 *)g_RdpOutBufferEnd;
|
||||
task->t.data_ptr = (u64 *) gdlstart;
|
||||
task->t.data_size = (gdlend - gdlstart) * sizeof(Gfx);
|
||||
task->t.yield_data_ptr = (u64 *)&g_RdpYieldData;
|
||||
task->t.yield_data_size = sizeof(g_RdpYieldData);
|
||||
|
||||
sctask->next = NULL;
|
||||
sctask->flags = OS_SC_NEEDS_RSP | OS_SC_NEEDS_RDP | OS_SC_LAST_TASK | OS_SC_SWAPBUFFER;
|
||||
sctask->msgQ = &var8008db30;
|
||||
sctask->msg = msg;
|
||||
sctask->framebuffer = g_RdpCurTask->framebuffer;
|
||||
|
||||
osWritebackDCacheAll();
|
||||
__scHandleRetraceViaPri(&g_SchedThread, sctask);
|
||||
|
||||
// Swap g_RdpCurTask
|
||||
g_RdpCurTask = (struct rdptask *)((u32)g_RdpCurTask ^ (u32) &g_RdpTaskA ^ (u32) &g_RdpTaskB);
|
||||
}
|
||||
Loading…
Reference in New Issue