diff --git a/asm/non_matchings/unknown_066AA0/func_8006C3E0.s b/asm/non_matchings/unknown_066AA0/func_8006C3E0.s index de3f95a4..e10b8558 100644 --- a/asm/non_matchings/unknown_066AA0/func_8006C3E0.s +++ b/asm/non_matchings/unknown_066AA0/func_8006C3E0.s @@ -42,7 +42,7 @@ glabel func_8006C3E0 /* 06D070 8006C470 AFB90010 */ sw $t9, 0x10($sp) /* 06D074 8006C474 24A534E8 */ addiu $a1, %lo(D_801234E8) # addiu $a1, $a1, 0x34e8 /* 06D078 8006C478 24841260 */ addiu $a0, %lo(D_80121260) # addiu $a0, $a0, 0x1260 -/* 06D07C 8006C47C 0C01E4D4 */ jal func_80079350 +/* 06D07C 8006C47C 0C01E4D4 */ jal osCreateScheduler /* 06D080 8006C480 2406000D */ li $a2, 13 /* 06D084 8006C484 3C01800E */ lui $at, %hi(D_800DD3A0) # $at, 0x800e /* 06D088 8006C488 0C01BBEE */ jal func_8006EFB8 diff --git a/asm/non_matchings/unknown_079F50/D_800795AC.s b/asm/non_matchings/unknown_079F50/__scMain.s similarity index 99% rename from asm/non_matchings/unknown_079F50/D_800795AC.s rename to asm/non_matchings/unknown_079F50/__scMain.s index 8676224a..3caad31c 100644 --- a/asm/non_matchings/unknown_079F50/D_800795AC.s +++ b/asm/non_matchings/unknown_079F50/__scMain.s @@ -1,4 +1,4 @@ -glabel D_800795AC +glabel __scMain /* 07A1AC 800795AC 27BDFF98 */ addiu $sp, $sp, -0x68 /* 07A1B0 800795B0 AFBE0038 */ sw $fp, 0x38($sp) /* 07A1B4 800795B4 AFB70034 */ sw $s7, 0x34($sp) diff --git a/asm/non_matchings/unknown_079F50/func_80079350.s b/asm/non_matchings/unknown_079F50/func_80079350.s deleted file mode 100644 index 2d3fa628..00000000 --- a/asm/non_matchings/unknown_079F50/func_80079350.s +++ /dev/null @@ -1,78 +0,0 @@ -glabel func_80079350 -/* 079F50 80079350 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 079F54 80079354 AFB0001C */ sw $s0, 0x1c($sp) -/* 079F58 80079358 AFBF0024 */ sw $ra, 0x24($sp) -/* 079F5C 8007935C AFB10020 */ sw $s1, 0x20($sp) -/* 079F60 80079360 AFA5002C */ sw $a1, 0x2c($sp) -/* 079F64 80079364 AFA60030 */ sw $a2, 0x30($sp) -/* 079F68 80079368 AFA70034 */ sw $a3, 0x34($sp) -/* 079F6C 8007936C 240E0001 */ li $t6, 1 -/* 079F70 80079370 240F0004 */ li $t7, 4 -/* 079F74 80079374 00808025 */ move $s0, $a0 -/* 079F78 80079378 AC800274 */ sw $zero, 0x274($a0) -/* 079F7C 8007937C AC800278 */ sw $zero, 0x278($a0) -/* 079F80 80079380 AC800260 */ sw $zero, 0x260($a0) -/* 079F84 80079384 AC800264 */ sw $zero, 0x264($a0) -/* 079F88 80079388 AC800268 */ sw $zero, 0x268($a0) -/* 079F8C 8007938C AC80026C */ sw $zero, 0x26c($a0) -/* 079F90 80079390 AC800270 */ sw $zero, 0x270($a0) -/* 079F94 80079394 AC800280 */ sw $zero, 0x280($a0) -/* 079F98 80079398 AC80027C */ sw $zero, 0x27c($a0) -/* 079F9C 8007939C A48E0000 */ sh $t6, ($a0) -/* 079FA0 800793A0 A48F0020 */ sh $t7, 0x20($a0) -/* 079FA4 800793A4 30F100FF */ andi $s1, $a3, 0xff -/* 079FA8 800793A8 0C034664 */ jal osCreateViManager -/* 079FAC 800793AC 240400FE */ li $a0, 254 -/* 079FB0 800793B0 0011C080 */ sll $t8, $s1, 2 -/* 079FB4 800793B4 0311C021 */ addu $t8, $t8, $s1 -/* 079FB8 800793B8 3C19800E */ lui $t9, %hi(D_800E3900) # $t9, 0x800e -/* 079FBC 800793BC 27393900 */ addiu $t9, %lo(D_800E3900) # addiu $t9, $t9, 0x3900 -/* 079FC0 800793C0 0018C100 */ sll $t8, $t8, 4 -/* 079FC4 800793C4 0C034728 */ jal func_800D1CA0 -/* 079FC8 800793C8 03192021 */ addu $a0, $t8, $t9 -/* 079FCC 800793CC 0C034744 */ jal osViBlack -/* 079FD0 800793D0 24040001 */ li $a0, 1 -/* 079FD4 800793D4 26110040 */ addiu $s1, $s0, 0x40 -/* 079FD8 800793D8 02202025 */ move $a0, $s1 -/* 079FDC 800793DC 26050058 */ addiu $a1, $s0, 0x58 -/* 079FE0 800793E0 0C032208 */ jal osCreateMesgQueue -/* 079FE4 800793E4 24060008 */ li $a2, 8 -/* 079FE8 800793E8 26040078 */ addiu $a0, $s0, 0x78 -/* 079FEC 800793EC 26050090 */ addiu $a1, $s0, 0x90 -/* 079FF0 800793F0 0C032208 */ jal osCreateMesgQueue -/* 079FF4 800793F4 24060008 */ li $a2, 8 -/* 079FF8 800793F8 24040004 */ li $a0, 4 -/* 079FFC 800793FC 02202825 */ move $a1, $s1 -/* 07A000 80079400 0C0332EC */ jal osSetEventMesg -/* 07A004 80079404 2406029B */ li $a2, 667 -/* 07A008 80079408 24040009 */ li $a0, 9 -/* 07A00C 8007940C 02202825 */ move $a1, $s1 -/* 07A010 80079410 0C0332EC */ jal osSetEventMesg -/* 07A014 80079414 2406029C */ li $a2, 668 -/* 07A018 80079418 2404000E */ li $a0, 14 -/* 07A01C 8007941C 02202825 */ move $a1, $s1 -/* 07A020 80079420 0C0332EC */ jal osSetEventMesg -/* 07A024 80079424 2406029D */ li $a2, 669 -/* 07A028 80079428 93A6003B */ lbu $a2, 0x3b($sp) -/* 07A02C 8007942C 02202025 */ move $a0, $s1 -/* 07A030 80079430 0C034760 */ jal osViSetEventMsg -/* 07A034 80079434 2405029A */ li $a1, 666 -/* 07A038 80079438 8FA8002C */ lw $t0, 0x2c($sp) -/* 07A03C 8007943C 8FA90030 */ lw $t1, 0x30($sp) -/* 07A040 80079440 261100B0 */ addiu $s1, $s0, 0xb0 -/* 07A044 80079444 3C068008 */ lui $a2, %hi(D_800795AC) # $a2, 0x8008 -/* 07A048 80079448 24C695AC */ addiu $a2, %lo(D_800795AC) # addiu $a2, $a2, -0x6a54 -/* 07A04C 8007944C 02202025 */ move $a0, $s1 -/* 07A050 80079450 24050005 */ li $a1, 5 -/* 07A054 80079454 02003825 */ move $a3, $s0 -/* 07A058 80079458 AFA80010 */ sw $t0, 0x10($sp) -/* 07A05C 8007945C 0C032214 */ jal osCreateThread -/* 07A060 80079460 AFA90014 */ sw $t1, 0x14($sp) -/* 07A064 80079464 0C032268 */ jal osStartThread -/* 07A068 80079468 02202025 */ move $a0, $s1 -/* 07A06C 8007946C 8FBF0024 */ lw $ra, 0x24($sp) -/* 07A070 80079470 8FB0001C */ lw $s0, 0x1c($sp) -/* 07A074 80079474 8FB10020 */ lw $s1, 0x20($sp) -/* 07A078 80079478 03E00008 */ jr $ra -/* 07A07C 8007947C 27BD0028 */ addiu $sp, $sp, 0x28 - diff --git a/asm/non_matchings/unknown_07AF10/func_8007A550.s b/asm/non_matchings/unknown_07AF10/func_8007A550.s index befc96bf..318983e8 100644 --- a/asm/non_matchings/unknown_07AF10/func_8007A550.s +++ b/asm/non_matchings/unknown_07AF10/func_8007A550.s @@ -29,7 +29,7 @@ glabel func_8007A550 /* 07B1B4 8007A5B4 3C19800E */ lui $t9, %hi(D_800E3900) # $t9, 0x800e /* 07B1B8 8007A5B8 27393900 */ addiu $t9, %lo(D_800E3900) # addiu $t9, $t9, 0x3900 /* 07B1BC 8007A5BC 0018C100 */ sll $t8, $t8, 4 -/* 07B1C0 8007A5C0 0C034728 */ jal func_800D1CA0 +/* 07B1C0 8007A5C0 0C034728 */ jal osViSetMode /* 07B1C4 8007A5C4 03192021 */ addu $a0, $t8, $t9 /* 07B1C8 8007A5C8 1000007D */ b .L8007A7C0 /* 07B1CC 8007A5CC 00000000 */ nop @@ -66,7 +66,7 @@ glabel func_8007A550 /* 07B240 8007A640 ACAE0030 */ sw $t6, 0x30($a1) /* 07B244 8007A644 ACB80044 */ sw $t8, 0x44($a1) .L8007A648: -/* 07B248 8007A648 0C034728 */ jal func_800D1CA0 +/* 07B248 8007A648 0C034728 */ jal osViSetMode /* 07B24C 8007A64C 00A02025 */ move $a0, $a1 /* 07B250 8007A650 1000005B */ b .L8007A7C0 /* 07B254 8007A654 00000000 */ nop @@ -94,7 +94,7 @@ glabel func_8007A550 /* 07B2A4 8007A6A4 AC990008 */ sw $t9, 8($a0) /* 07B2A8 8007A6A8 AC880020 */ sw $t0, 0x20($a0) /* 07B2AC 8007A6AC AC820028 */ sw $v0, 0x28($a0) -/* 07B2B0 8007A6B0 0C034728 */ jal func_800D1CA0 +/* 07B2B0 8007A6B0 0C034728 */ jal osViSetMode /* 07B2B4 8007A6B4 AC82003C */ sw $v0, 0x3c($a0) /* 07B2B8 8007A6B8 10000041 */ b .L8007A7C0 /* 07B2BC 8007A6BC 00000000 */ nop @@ -122,7 +122,7 @@ glabel func_8007A550 /* 07B30C 8007A70C AC890008 */ sw $t1, 8($a0) /* 07B310 8007A710 AC8A0020 */ sw $t2, 0x20($a0) /* 07B314 8007A714 AC820028 */ sw $v0, 0x28($a0) -/* 07B318 8007A718 0C034728 */ jal func_800D1CA0 +/* 07B318 8007A718 0C034728 */ jal osViSetMode /* 07B31C 8007A71C AC82003C */ sw $v0, 0x3c($a0) /* 07B320 8007A720 10000027 */ b .L8007A7C0 /* 07B324 8007A724 00000000 */ nop @@ -132,7 +132,7 @@ glabel func_8007A550 /* 07B334 8007A734 3C0D800E */ lui $t5, %hi(D_800E3900) # $t5, 0x800e /* 07B338 8007A738 25AD3900 */ addiu $t5, %lo(D_800E3900) # addiu $t5, $t5, 0x3900 /* 07B33C 8007A73C 256C0280 */ addiu $t4, $t3, 0x280 -/* 07B340 8007A740 0C034728 */ jal func_800D1CA0 +/* 07B340 8007A740 0C034728 */ jal osViSetMode /* 07B344 8007A744 018D2021 */ addu $a0, $t4, $t5 /* 07B348 8007A748 1000001D */ b .L8007A7C0 /* 07B34C 8007A74C 00000000 */ nop @@ -142,7 +142,7 @@ glabel func_8007A550 /* 07B35C 8007A75C 3C18800E */ lui $t8, %hi(D_800E3900) # $t8, 0x800e /* 07B360 8007A760 27183900 */ addiu $t8, %lo(D_800E3900) # addiu $t8, $t8, 0x3900 /* 07B364 8007A764 25CF0320 */ addiu $t7, $t6, 0x320 -/* 07B368 8007A768 0C034728 */ jal func_800D1CA0 +/* 07B368 8007A768 0C034728 */ jal osViSetMode /* 07B36C 8007A76C 01F82021 */ addu $a0, $t7, $t8 /* 07B370 8007A770 10000013 */ b .L8007A7C0 /* 07B374 8007A774 00000000 */ nop @@ -152,7 +152,7 @@ glabel func_8007A550 /* 07B384 8007A784 3C09800E */ lui $t1, %hi(D_800E3900) # $t1, 0x800e /* 07B388 8007A788 25293900 */ addiu $t1, %lo(D_800E3900) # addiu $t1, $t1, 0x3900 /* 07B38C 8007A78C 272802D0 */ addiu $t0, $t9, 0x2d0 -/* 07B390 8007A790 0C034728 */ jal func_800D1CA0 +/* 07B390 8007A790 0C034728 */ jal osViSetMode /* 07B394 8007A794 01092021 */ addu $a0, $t0, $t1 /* 07B398 8007A798 10000009 */ b .L8007A7C0 /* 07B39C 8007A79C 00000000 */ nop @@ -162,7 +162,7 @@ glabel func_8007A550 /* 07B3AC 8007A7AC 3C0C800E */ lui $t4, %hi(D_800E3900) # $t4, 0x800e /* 07B3B0 8007A7B0 258C3900 */ addiu $t4, %lo(D_800E3900) # addiu $t4, $t4, 0x3900 /* 07B3B4 8007A7B4 254B0370 */ addiu $t3, $t2, 0x370 -/* 07B3B8 8007A7B8 0C034728 */ jal func_800D1CA0 +/* 07B3B8 8007A7B8 0C034728 */ jal osViSetMode /* 07B3BC 8007A7BC 016C2021 */ addu $a0, $t3, $t4 .L8007A7C0: /* 07B3C0 8007A7C0 0C034898 */ jal osViSetSpecialFeatures diff --git a/lib/asm/non_matchings/unknown_0D28A0/func_800D1CA0.s b/lib/asm/non_matchings/unknown_0D28A0/osViSetMode.s similarity index 98% rename from lib/asm/non_matchings/unknown_0D28A0/func_800D1CA0.s rename to lib/asm/non_matchings/unknown_0D28A0/osViSetMode.s index b0c9e81f..dbafd106 100644 --- a/lib/asm/non_matchings/unknown_0D28A0/func_800D1CA0.s +++ b/lib/asm/non_matchings/unknown_0D28A0/osViSetMode.s @@ -1,4 +1,4 @@ -glabel func_800D1CA0 +glabel osViSetMode /* 0D28A0 800D1CA0 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0D28A4 800D1CA4 AFBF001C */ sw $ra, 0x1c($sp) /* 0D28A8 800D1CA8 AFA40028 */ sw $a0, 0x28($sp) diff --git a/lib/src/unknown_0D28A0.c b/lib/src/unknown_0D28A0.c index 1376a235..2a38ff5d 100644 --- a/lib/src/unknown_0D28A0.c +++ b/lib/src/unknown_0D28A0.c @@ -4,4 +4,4 @@ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D28A0/func_800D1CA0.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D28A0/osViSetMode.s") diff --git a/src/unknown_066AA0.c b/src/unknown_066AA0.c index 81f4f63f..aea36d85 100644 --- a/src/unknown_066AA0.c +++ b/src/unknown_066AA0.c @@ -1436,7 +1436,7 @@ extern u8 D_80123538; extern s32 D_80123544; extern s32 D_801234E8; -void func_80079350(u16*, s32*, s32, u8, s32); +void osCreateScheduler(u16*, s32*, s32, u8, s32); void func_80079480(u16*, u8*, s32**, s32); void func_8006C3E0(void) { @@ -1459,7 +1459,7 @@ void func_8006C3E0(void) { sp24 = 0x1C; } - func_80079350(&D_80121260, &D_801234E8, 0xD, sp24, 1); + osCreateScheduler(&D_80121260, &D_801234E8, 0xD, sp24, 1); D_800DD3A0 = 0; if (func_8006EFB8() == 0) { D_800DD3A0 = 1; diff --git a/src/unknown_079F50.c b/src/unknown_079F50.c index 3583a059..466fdf06 100644 --- a/src/unknown_079F50.c +++ b/src/unknown_079F50.c @@ -3,12 +3,110 @@ #include "types.h" #include "macros.h" +#include "libultra_internal.h" + +#if 0 +GLOBAL_ASM("asm/non_matchings/unknown_079F50/osCreateScheduler.s") +#else +#define OS_SC_RETRACE_MSG 1 +#define OS_SC_PRE_NMI_MSG 4 +#define OS_SC_MAX_MESGS 8 + +typedef struct { + short type; + char misc[30]; +} OSScMsg; + +typedef struct OSScTask_s { + struct OSScTask_s *next; /* note: this must be first */ + u32 state; + u32 flags; + void *framebuffer; /* used by graphics tasks */ + + 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 */ + + +typedef struct SCClient_s { + struct SCClient_s *next; /* next client in the list */ + OSMesgQueue *msgQ; /* where to send the frame msg */ +} OSScClient; + +typedef struct { + OSScMsg retraceMsg; + OSScMsg prenmiMsg; + OSMesgQueue interruptQ; + OSMesg intBuf[OS_SC_MAX_MESGS]; + OSMesgQueue cmdQ; + OSMesg cmdMsgBuf[OS_SC_MAX_MESGS]; + OSThread thread; + OSScClient *clientList; + OSScTask *audioListHead; + OSScTask *gfxListHead; + OSScTask *audioListTail; + OSScTask *gfxListTail; + OSScTask *curRSPTask; + OSScTask *curRDPTask; + u32 frameCount; + s32 doAudio; +} OSSched; + +typedef struct{ + u8 pad00[0x50]; +}unk800E3900; + +extern OSViMode D_800E3900[];//osViModeTable; + +void __scMain(void); + +void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields){ + sc->curRSPTask = 0; + sc->curRDPTask = 0; + sc->clientList = 0; + + sc->audioListHead = 0; + sc->gfxListHead = 0; + sc->audioListTail = 0; + sc->gfxListTail = 0; + sc->doAudio = 0; + sc->frameCount = 0; + sc->retraceMsg.type = OS_SC_RETRACE_MSG; /* sent to apps */ + sc->prenmiMsg.type = OS_SC_PRE_NMI_MSG; + + + + /* + * Set up video manager, listen for Video, RSP, and RDP interrupts + */ + osCreateViManager(OS_PRIORITY_VIMGR); + osViSetMode(&D_800E3900[mode]); + osViBlack(TRUE); + + osCreateMesgQueue(&sc->interruptQ, sc->intBuf, OS_SC_MAX_MESGS); + osCreateMesgQueue(&sc->cmdQ, sc->cmdMsgBuf, OS_SC_MAX_MESGS); + + osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, (OSMesg)667); + osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, (OSMesg)668); + osSetEventMesg(OS_EVENT_PRENMI, &sc->interruptQ, (OSMesg)669); + + osViSetEventMsg(&sc->interruptQ, (OSMesg)666, numFields); + + + osCreateThread(&sc->thread, 5, __scMain, (void *)sc, stack, priority); + osStartThread(&sc->thread); +} +#endif -GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079350.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079480.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079574.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007957C.s") -GLOBAL_ASM("asm/non_matchings/unknown_079F50/D_800795AC.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") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079B44.s") diff --git a/undefined_syms.txt b/undefined_syms.txt index 842860ec..81e1aa7c 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -42,7 +42,7 @@ alAuxBusParam = 0x800659D4; D_80065D40 = 0x80065D40; D_80065D98 = 0x80065D98; D_8006C330 = 0x8006C330; -D_800795AC = 0x800795AC; +__scMain = 0x800795AC; D_8008F618 = 0x8008F618; D_800B6FC4 = 0x800B6FC4; func_800C7340 = 0x800C7340;