diff --git a/lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s b/lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s deleted file mode 100644 index 6169cc80..00000000 --- a/lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s +++ /dev/null @@ -1,80 +0,0 @@ -glabel _VirtualToPhysicalTask -/* 0D2AF0 800D1EF0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D2AF4 800D1EF4 3C0E8013 */ lui $t6, %hi(D_8012D1A0) # $t6, 0x8013 -/* 0D2AF8 800D1EF8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D2AFC 800D1EFC AFA40020 */ sw $a0, 0x20($sp) -/* 0D2B00 800D1F00 25CED1A0 */ addiu $t6, %lo(D_8012D1A0) # addiu $t6, $t6, -0x2e60 -/* 0D2B04 800D1F04 AFAE001C */ sw $t6, 0x1c($sp) -/* 0D2B08 800D1F08 01C02825 */ move $a1, $t6 -/* 0D2B0C 800D1F0C 8FA40020 */ lw $a0, 0x20($sp) -/* 0D2B10 800D1F10 0C032768 */ jal bcopy -/* 0D2B14 800D1F14 24060040 */ li $a2, 64 -/* 0D2B18 800D1F18 8FAF001C */ lw $t7, 0x1c($sp) -/* 0D2B1C 800D1F1C 8DF80010 */ lw $t8, 0x10($t7) -/* 0D2B20 800D1F20 13000005 */ beqz $t8, .L800D1F38 -/* 0D2B24 800D1F24 00000000 */ nop -/* 0D2B28 800D1F28 0C03233C */ jal osVirtualToPhysical -/* 0D2B2C 800D1F2C 03002025 */ move $a0, $t8 -/* 0D2B30 800D1F30 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D2B34 800D1F34 AF220010 */ sw $v0, 0x10($t9) -.L800D1F38: -/* 0D2B38 800D1F38 8FA8001C */ lw $t0, 0x1c($sp) -/* 0D2B3C 800D1F3C 8D090018 */ lw $t1, 0x18($t0) -/* 0D2B40 800D1F40 11200005 */ beqz $t1, .L800D1F58 -/* 0D2B44 800D1F44 00000000 */ nop -/* 0D2B48 800D1F48 0C03233C */ jal osVirtualToPhysical -/* 0D2B4C 800D1F4C 01202025 */ move $a0, $t1 -/* 0D2B50 800D1F50 8FAA001C */ lw $t2, 0x1c($sp) -/* 0D2B54 800D1F54 AD420018 */ sw $v0, 0x18($t2) -.L800D1F58: -/* 0D2B58 800D1F58 8FAB001C */ lw $t3, 0x1c($sp) -/* 0D2B5C 800D1F5C 8D6C0020 */ lw $t4, 0x20($t3) -/* 0D2B60 800D1F60 11800005 */ beqz $t4, .L800D1F78 -/* 0D2B64 800D1F64 00000000 */ nop -/* 0D2B68 800D1F68 0C03233C */ jal osVirtualToPhysical -/* 0D2B6C 800D1F6C 01802025 */ move $a0, $t4 -/* 0D2B70 800D1F70 8FAD001C */ lw $t5, 0x1c($sp) -/* 0D2B74 800D1F74 ADA20020 */ sw $v0, 0x20($t5) -.L800D1F78: -/* 0D2B78 800D1F78 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D2B7C 800D1F7C 8DCF0028 */ lw $t7, 0x28($t6) -/* 0D2B80 800D1F80 11E00005 */ beqz $t7, .L800D1F98 -/* 0D2B84 800D1F84 00000000 */ nop -/* 0D2B88 800D1F88 0C03233C */ jal osVirtualToPhysical -/* 0D2B8C 800D1F8C 01E02025 */ move $a0, $t7 -/* 0D2B90 800D1F90 8FB8001C */ lw $t8, 0x1c($sp) -/* 0D2B94 800D1F94 AF020028 */ sw $v0, 0x28($t8) -.L800D1F98: -/* 0D2B98 800D1F98 8FB9001C */ lw $t9, 0x1c($sp) -/* 0D2B9C 800D1F9C 8F28002C */ lw $t0, 0x2c($t9) -/* 0D2BA0 800D1FA0 11000005 */ beqz $t0, .L800D1FB8 -/* 0D2BA4 800D1FA4 00000000 */ nop -/* 0D2BA8 800D1FA8 0C03233C */ jal osVirtualToPhysical -/* 0D2BAC 800D1FAC 01002025 */ move $a0, $t0 -/* 0D2BB0 800D1FB0 8FA9001C */ lw $t1, 0x1c($sp) -/* 0D2BB4 800D1FB4 AD22002C */ sw $v0, 0x2c($t1) -.L800D1FB8: -/* 0D2BB8 800D1FB8 8FAA001C */ lw $t2, 0x1c($sp) -/* 0D2BBC 800D1FBC 8D4B0030 */ lw $t3, 0x30($t2) -/* 0D2BC0 800D1FC0 11600005 */ beqz $t3, .L800D1FD8 -/* 0D2BC4 800D1FC4 00000000 */ nop -/* 0D2BC8 800D1FC8 0C03233C */ jal osVirtualToPhysical -/* 0D2BCC 800D1FCC 01602025 */ move $a0, $t3 -/* 0D2BD0 800D1FD0 8FAC001C */ lw $t4, 0x1c($sp) -/* 0D2BD4 800D1FD4 AD820030 */ sw $v0, 0x30($t4) -.L800D1FD8: -/* 0D2BD8 800D1FD8 8FAD001C */ lw $t5, 0x1c($sp) -/* 0D2BDC 800D1FDC 8DAE0038 */ lw $t6, 0x38($t5) -/* 0D2BE0 800D1FE0 11C00005 */ beqz $t6, .L800D1FF8 -/* 0D2BE4 800D1FE4 00000000 */ nop -/* 0D2BE8 800D1FE8 0C03233C */ jal osVirtualToPhysical -/* 0D2BEC 800D1FEC 01C02025 */ move $a0, $t6 -/* 0D2BF0 800D1FF0 8FAF001C */ lw $t7, 0x1c($sp) -/* 0D2BF4 800D1FF4 ADE20038 */ sw $v0, 0x38($t7) -.L800D1FF8: -/* 0D2BF8 800D1FF8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D2BFC 800D1FFC 8FA2001C */ lw $v0, 0x1c($sp) -/* 0D2C00 800D2000 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D2C04 800D2004 03E00008 */ jr $ra -/* 0D2C08 800D2008 00000000 */ nop - diff --git a/lib/src/unknown_0D29F0.c b/lib/src/unknown_0D29F0.c index 56dc04f3..851b883f 100644 --- a/lib/src/unknown_0D29F0.c +++ b/lib/src/unknown_0D29F0.c @@ -50,6 +50,9 @@ void *osViGetNextFramebuffer(void){ return framep; } + +//TODO Split into sptask.c and seperate header + #define OS_TASK_YIELDED 0x0001 #define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ @@ -68,11 +71,30 @@ void *osViGetNextFramebuffer(void){ #define SP_IMEM_START 0x04001000 /* read/write */ +#define _osVirtualToPhysical(ptr) \ + if (ptr != NULL) \ + { \ + ptr = (void *)osVirtualToPhysical(ptr); \ + } -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s") - -void osSpTaskLoad(OSTask *intp) +OSTask D_8012D1A0; +OSTask *_VirtualToPhysicalTask(OSTask *intp) { + OSTask *tp; + tp = &D_8012D1A0; + 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; +} + +void osSpTaskLoad(OSTask *intp){ OSTask *tp; tp = _VirtualToPhysicalTask(intp); @@ -99,8 +121,6 @@ void osSpTaskLoad(OSTask *intp) ; } - - void osSpTaskStartGo(OSTask *tp){ while (__osSpDeviceBusy());