diff --git a/src/lib/ultra/io/aisetnextbuf.c b/src/lib/ultra/io/aisetnextbuf.c index e570d72c6..6d2701e30 100644 --- a/src/lib/ultra/io/aisetnextbuf.c +++ b/src/lib/ultra/io/aisetnextbuf.c @@ -1,79 +1,26 @@ #include -u32 var80060990 = 0; +s32 osAiSetNextBuffer(void *bufPtr, u32 size) +{ + static u8 hdwrBugFlag = 0; + char *bptr = bufPtr; -GLOBAL_ASM( -glabel osAiSetNextBuffer -/* 4e3c0: 27bdffe0 */ addiu $sp,$sp,-32 -/* 4e3c4: 3c0f8006 */ lui $t7,%hi(var80060990) -/* 4e3c8: 91ef0990 */ lbu $t7,%lo(var80060990)($t7) -/* 4e3cc: afa40020 */ sw $a0,0x20($sp) -/* 4e3d0: 8fae0020 */ lw $t6,0x20($sp) -/* 4e3d4: afbf0014 */ sw $ra,0x14($sp) -/* 4e3d8: afa50024 */ sw $a1,0x24($sp) -/* 4e3dc: 11e00003 */ beqz $t7,.L0004e3ec -/* 4e3e0: afae001c */ sw $t6,0x1c($sp) -/* 4e3e4: 25d8e000 */ addiu $t8,$t6,-8192 -/* 4e3e8: afb8001c */ sw $t8,0x1c($sp) -.L0004e3ec: -/* 4e3ec: 8fb90020 */ lw $t9,0x20($sp) -/* 4e3f0: 8fa80024 */ lw $t0,0x24($sp) -/* 4e3f4: 03284821 */ addu $t1,$t9,$t0 -/* 4e3f8: 312a1fff */ andi $t2,$t1,0x1fff -/* 4e3fc: 15400005 */ bnez $t2,.L0004e414 -/* 4e400: 00000000 */ nop -/* 4e404: 240b0001 */ addiu $t3,$zero,0x1 -/* 4e408: 3c018006 */ lui $at,%hi(var80060990) -/* 4e40c: 10000003 */ b .L0004e41c -/* 4e410: a02b0990 */ sb $t3,%lo(var80060990)($at) -.L0004e414: -/* 4e414: 3c018006 */ lui $at,%hi(var80060990) -/* 4e418: a0200990 */ sb $zero,%lo(var80060990)($at) -.L0004e41c: -/* 4e41c: 0c0147b0 */ jal __osAiDeviceBusy -/* 4e420: 00000000 */ nop -/* 4e424: 10400003 */ beqz $v0,.L0004e434 -/* 4e428: 00000000 */ nop -/* 4e42c: 10000009 */ b .L0004e454 -/* 4e430: 2402ffff */ addiu $v0,$zero,-1 -.L0004e434: -/* 4e434: 0c012d20 */ jal osVirtualToPhysical -/* 4e438: 8fa4001c */ lw $a0,0x1c($sp) -/* 4e43c: 3c0ca450 */ lui $t4,0xa450 -/* 4e440: ad820000 */ sw $v0,0x0($t4) -/* 4e444: 8fad0024 */ lw $t5,0x24($sp) -/* 4e448: 3c0fa450 */ lui $t7,0xa450 -/* 4e44c: 00001025 */ or $v0,$zero,$zero -/* 4e450: aded0004 */ sw $t5,0x4($t7) -.L0004e454: -/* 4e454: 8fbf0014 */ lw $ra,0x14($sp) -/* 4e458: 27bd0020 */ addiu $sp,$sp,0x20 -/* 4e45c: 03e00008 */ jr $ra -/* 4e460: 00000000 */ nop -); + if (hdwrBugFlag != 0) { + bptr -= 0x2000; + } -// Mismatch: Needs data relocation -//s32 osAiSetNextBuffer(void *bufPtr, u32 size) -//{ -// static u8 hdwrBugFlag = 0; -// char *bptr = bufPtr; -// -// if (hdwrBugFlag != 0) { -// bptr -= 0x2000; -// } -// -// if ((((u32)bufPtr + size) & 0x1fff) == 0) { -// hdwrBugFlag = 1; -// } else { -// hdwrBugFlag = 0; -// } -// -// if (__osAiDeviceBusy()) { -// return -1; -// } -// -// IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr)); -// IO_WRITE(AI_LEN_REG, size); -// -// return 0; -//} + if ((((u32)bufPtr + size) & 0x1fff) == 0) { + hdwrBugFlag = 1; + } else { + hdwrBugFlag = 0; + } + + if (__osAiDeviceBusy()) { + return -1; + } + + IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr)); + IO_WRITE(AI_LEN_REG, size); + + return 0; +}