diff --git a/lib/asm/non_matchings/unknown_0D24E0/osDpSetNextBuffer.s b/lib/asm/non_matchings/unknown_0D24E0/osDpSetNextBuffer.s deleted file mode 100644 index 92dc8125..00000000 --- a/lib/asm/non_matchings/unknown_0D24E0/osDpSetNextBuffer.s +++ /dev/null @@ -1,50 +0,0 @@ -glabel osDpSetNextBuffer -/* 0D24E0 800D18E0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D24E4 800D18E4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D24E8 800D18E8 AFA40028 */ sw $a0, 0x28($sp) -/* 0D24EC 800D18EC AFA60030 */ sw $a2, 0x30($sp) -/* 0D24F0 800D18F0 AFA70034 */ sw $a3, 0x34($sp) -/* 0D24F4 800D18F4 0C035814 */ jal __osDpDeviceBusy -/* 0D24F8 800D18F8 AFB00018 */ sw $s0, 0x18($sp) -/* 0D24FC 800D18FC 10400003 */ beqz $v0, .L800D190C -/* 0D2500 800D1900 00000000 */ nop -/* 0D2504 800D1904 1000001B */ b .L800D1974 -/* 0D2508 800D1908 2402FFFF */ li $v0, -1 -.L800D190C: -/* 0D250C 800D190C 240E0001 */ li $t6, 1 -/* 0D2510 800D1910 3C0FA410 */ lui $t7, %hi(D_A410000C) # $t7, 0xa410 -/* 0D2514 800D1914 ADEE000C */ sw $t6, %lo(D_A410000C)($t7) -.L800D1918: -/* 0D2518 800D1918 3C18A410 */ lui $t8, %hi(D_A410000C) # $t8, 0xa410 -/* 0D251C 800D191C 8F10000C */ lw $s0, %lo(D_A410000C)($t8) -/* 0D2520 800D1920 32190001 */ andi $t9, $s0, 1 -/* 0D2524 800D1924 1720FFFC */ bnez $t9, .L800D1918 -/* 0D2528 800D1928 00000000 */ nop -/* 0D252C 800D192C 0C03233C */ jal osVirtualToPhysical -/* 0D2530 800D1930 8FA40028 */ lw $a0, 0x28($sp) -/* 0D2534 800D1934 3C08A410 */ lui $t0, 0xa410 -/* 0D2538 800D1938 AD020000 */ sw $v0, ($t0) -/* 0D253C 800D193C 0C03233C */ jal osVirtualToPhysical -/* 0D2540 800D1940 8FA40028 */ lw $a0, 0x28($sp) -/* 0D2544 800D1944 8FAD0034 */ lw $t5, 0x34($sp) -/* 0D2548 800D1948 00405825 */ move $t3, $v0 -/* 0D254C 800D194C 8FAC0030 */ lw $t4, 0x30($sp) -/* 0D2550 800D1950 016D7821 */ addu $t7, $t3, $t5 -/* 0D2554 800D1954 240A0000 */ li $t2, 0 -/* 0D2558 800D1958 01ED082B */ sltu $at, $t7, $t5 -/* 0D255C 800D195C 002A7021 */ addu $t6, $at, $t2 -/* 0D2560 800D1960 01E04825 */ move $t1, $t7 -/* 0D2564 800D1964 3C18A410 */ lui $t8, %hi(D_A4100004) # $t8, 0xa410 -/* 0D2568 800D1968 AF090004 */ sw $t1, %lo(D_A4100004)($t8) -/* 0D256C 800D196C 00001025 */ move $v0, $zero -/* 0D2570 800D1970 01CC7021 */ addu $t6, $t6, $t4 -.L800D1974: -/* 0D2574 800D1974 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D2578 800D1978 8FB00018 */ lw $s0, 0x18($sp) -/* 0D257C 800D197C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D2580 800D1980 03E00008 */ jr $ra -/* 0D2584 800D1984 00000000 */ nop - -/* 0D2588 800D1988 00000000 */ nop -/* 0D258C 800D198C 00000000 */ nop - diff --git a/lib/src/os/__osAiDeviceBusy.c b/lib/src/os/__osAiDeviceBusy.c index 51d953b2..6aedb115 100644 --- a/lib/src/os/__osAiDeviceBusy.c +++ b/lib/src/os/__osAiDeviceBusy.c @@ -6,8 +6,7 @@ s32 __osAiDeviceBusy(void) { register s32 status = IO_READ(AI_STATUS_REG); if (status & AI_STATUS_FIFO_FULL) + return TRUE; - return 1; - - return 0; + return FALSE; } diff --git a/lib/src/os/osDpSetNextBuffer.c b/lib/src/os/osDpSetNextBuffer.c index ae725053..de35b0bd 100644 --- a/lib/src/os/osDpSetNextBuffer.c +++ b/lib/src/os/osDpSetNextBuffer.c @@ -1,7 +1,20 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800D18E0 */ -#include "types.h" -#include "macros.h" +#include "libultra_internal.h" +#include "osVirtualToPhysical.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D24E0/osDpSetNextBuffer.s") +int __osDpDeviceBusy(void); +s32 osDpSetNextBuffer(void *bufPtr, u64 size) { + register u32 stat; + + if (__osDpDeviceBusy()) + return -1; + IO_WRITE(DPC_STATUS_REG, DPC_CLR_XBUS_DMEM_DMA); + do { + stat = IO_READ(DPC_STATUS_REG); + } while (stat & DPC_STATUS_XBUS_DMEM_DMA); + IO_WRITE(DPC_START_REG, osVirtualToPhysical(bufPtr)); + IO_WRITE(DPC_END_REG, osVirtualToPhysical(bufPtr) + size); + return 0; +}