diff --git a/asm/non_matchings/unknown_003260/audioNewThread.s b/asm/non_matchings/unknown_003260/audioNewThread.s index ebc8fd5d..d88dbb2c 100644 --- a/asm/non_matchings/unknown_003260/audioNewThread.s +++ b/asm/non_matchings/unknown_003260/audioNewThread.s @@ -11,8 +11,8 @@ glabel audioNewThread /* 003284 80002684 AC265F90 */ sw $a2, %lo(D_80115F90)($at) /* 003288 80002688 8C8E0014 */ lw $t6, 0x14($a0) /* 00328C 8000268C 3C018011 */ lui $at, %hi(D_80115F94) # $at, 0x8011 -/* 003290 80002690 3C0F8000 */ lui $t7, %hi(func_80003008) # $t7, 0x8000 -/* 003294 80002694 25EF3008 */ addiu $t7, %lo(func_80003008) # addiu $t7, $t7, 0x3008 +/* 003290 80002690 3C0F8000 */ lui $t7, %hi(__amDmaNew) # $t7, 0x8000 +/* 003294 80002694 25EF3008 */ addiu $t7, %lo(__amDmaNew) # addiu $t7, $t7, 0x3008 /* 003298 80002698 AC2E5F94 */ sw $t6, %lo(D_80115F94)($at) /* 00329C 8000269C 00809825 */ move $s3, $a0 /* 0032A0 800026A0 AC8F0010 */ sw $t7, 0x10($a0) @@ -106,14 +106,14 @@ glabel audioNewThread /* 0033F0 800027F0 0C0321FB */ jal alInit /* 0033F4 800027F4 02602825 */ move $a1, $s3 .L800027F8: -/* 0033F8 800027F8 3C028012 */ lui $v0, %hi(D_80119240) # $v0, 0x8012 -/* 0033FC 800027FC 24429240 */ addiu $v0, %lo(D_80119240) # addiu $v0, $v0, -0x6dc0 -/* 003400 80002800 3C128012 */ lui $s2, %hi(D_80119240) # $s2, 0x8012 -/* 003404 80002804 3C108012 */ lui $s0, %hi(D_80119240+20) # $s0, 0x8012 +/* 0033F8 800027F8 3C028012 */ lui $v0, %hi(dmaBuffs) # $v0, 0x8012 +/* 0033FC 800027FC 24429240 */ addiu $v0, %lo(dmaBuffs) # addiu $v0, $v0, -0x6dc0 +/* 003400 80002800 3C128012 */ lui $s2, %hi(dmaBuffs) # $s2, 0x8012 +/* 003404 80002804 3C108012 */ lui $s0, %hi(dmaBuffs+20) # $s0, 0x8012 /* 003408 80002808 AC400004 */ sw $zero, 4($v0) /* 00340C 8000280C AC400000 */ sw $zero, ($v0) -/* 003410 80002810 26109254 */ addiu $s0, %lo(D_80119240+20) # addiu $s0, $s0, -0x6dac -/* 003414 80002814 26529240 */ addiu $s2, %lo(D_80119240) # addiu $s2, $s2, -0x6dc0 +/* 003410 80002810 26109254 */ addiu $s0, %lo(dmaBuffs+20) # addiu $s0, $s0, -0x6dac +/* 003414 80002814 26529240 */ addiu $s2, %lo(dmaBuffs) # addiu $s2, $s2, -0x6dc0 /* 003418 80002818 00008825 */ move $s1, $zero .L8000281C: /* 00341C 8000281C 02002025 */ move $a0, $s0 @@ -243,8 +243,8 @@ glabel audioNewThread /* 0035F8 800029F8 0C032208 */ jal osCreateMesgQueue /* 0035FC 800029FC 24060032 */ li $a2, 50 /* 003600 80002A00 8FB9004C */ lw $t9, 0x4c($sp) -/* 003604 80002A04 3C188012 */ lui $t8, %hi(D_80119230) # $t8, 0x8012 -/* 003608 80002A08 27189230 */ addiu $t8, %lo(D_80119230) # addiu $t8, $t8, -0x6dd0 +/* 003604 80002A04 3C188012 */ lui $t8, %hi(dmaState) # $t8, 0x8012 +/* 003608 80002A08 27189230 */ addiu $t8, %lo(dmaState) # addiu $t8, $t8, -0x6dd0 /* 00360C 80002A0C 3C048011 */ lui $a0, %hi(audioThread) # $a0, 0x8011 /* 003610 80002A10 3C068000 */ lui $a2, %hi(func_80002A98) # $a2, 0x8000 /* 003614 80002A14 24C62A98 */ addiu $a2, %lo(func_80002A98) # addiu $a2, $a2, 0x2a98 diff --git a/asm/non_matchings/unknown_003260/func_80002E38.s b/asm/non_matchings/unknown_003260/func_80002E38.s deleted file mode 100644 index 85f3c18e..00000000 --- a/asm/non_matchings/unknown_003260/func_80002E38.s +++ /dev/null @@ -1,129 +0,0 @@ -glabel func_80002E38 -/* 003A38 80002E38 3C098012 */ lui $t1, %hi(D_80119230) # $t1, 0x8012 -/* 003A3C 80002E3C 25299230 */ addiu $t1, %lo(D_80119230) # addiu $t1, $t1, -0x6dd0 -/* 003A40 80002E40 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 003A44 80002E44 8D280004 */ lw $t0, 4($t1) -/* 003A48 80002E48 AFB00028 */ sw $s0, 0x28($sp) -/* 003A4C 80002E4C AFA60058 */ sw $a2, 0x58($sp) -/* 003A50 80002E50 308A0001 */ andi $t2, $a0, 1 -/* 003A54 80002E54 AFBF002C */ sw $ra, 0x2c($sp) -/* 003A58 80002E58 00803825 */ move $a3, $a0 -/* 003A5C 80002E5C 00003025 */ move $a2, $zero -/* 003A60 80002E60 AFAA0048 */ sw $t2, 0x48($sp) -/* 003A64 80002E64 11000016 */ beqz $t0, .L80002EC0 -/* 003A68 80002E68 01008025 */ move $s0, $t0 -.L80002E6C: -/* 003A6C 80002E6C 8E020008 */ lw $v0, 8($s0) -/* 003A70 80002E70 00E57021 */ addu $t6, $a3, $a1 -/* 003A74 80002E74 00E2082B */ sltu $at, $a3, $v0 -/* 003A78 80002E78 14200011 */ bnez $at, .L80002EC0 -/* 003A7C 80002E7C 24430400 */ addiu $v1, $v0, 0x400 -/* 003A80 80002E80 006E082A */ slt $at, $v1, $t6 -/* 003A84 80002E84 1420000A */ bnez $at, .L80002EB0 -/* 003A88 80002E88 02003025 */ move $a2, $s0 -/* 003A8C 80002E8C 8E180010 */ lw $t8, 0x10($s0) -/* 003A90 80002E90 3C0F800E */ lui $t7, %hi(D_800DC680) # $t7, 0x800e -/* 003A94 80002E94 8DEFC680 */ lw $t7, %lo(D_800DC680)($t7) -/* 003A98 80002E98 0307C821 */ addu $t9, $t8, $a3 -/* 003A9C 80002E9C 03222023 */ subu $a0, $t9, $v0 -/* 003AA0 80002EA0 0C03233C */ jal osVirtualToPhysical -/* 003AA4 80002EA4 AE0F000C */ sw $t7, 0xc($s0) -/* 003AA8 80002EA8 10000054 */ b .L80002FFC -/* 003AAC 80002EAC 8FBF002C */ lw $ra, 0x2c($sp) -.L80002EB0: -/* 003AB0 80002EB0 8E100000 */ lw $s0, ($s0) -/* 003AB4 80002EB4 00000000 */ nop -/* 003AB8 80002EB8 1600FFEC */ bnez $s0, .L80002E6C -/* 003ABC 80002EBC 00000000 */ nop -.L80002EC0: -/* 003AC0 80002EC0 8D300008 */ lw $s0, 8($t1) -/* 003AC4 80002EC4 00000000 */ nop -/* 003AC8 80002EC8 16000004 */ bnez $s0, .L80002EDC -/* 003ACC 80002ECC 02002025 */ move $a0, $s0 -/* 003AD0 80002ED0 14C00002 */ bnez $a2, .L80002EDC -/* 003AD4 80002ED4 00000000 */ nop -/* 003AD8 80002ED8 01003025 */ move $a2, $t0 -.L80002EDC: -/* 003ADC 80002EDC 16000007 */ bnez $s0, .L80002EFC -/* 003AE0 80002EE0 00000000 */ nop -/* 003AE4 80002EE4 8CC40010 */ lw $a0, 0x10($a2) -/* 003AE8 80002EE8 0C03233C */ jal osVirtualToPhysical -/* 003AEC 80002EEC AFAA0030 */ sw $t2, 0x30($sp) -/* 003AF0 80002EF0 8FAA0030 */ lw $t2, 0x30($sp) -/* 003AF4 80002EF4 10000040 */ b .L80002FF8 -/* 003AF8 80002EF8 004A1021 */ addu $v0, $v0, $t2 -.L80002EFC: -/* 003AFC 80002EFC 8E0B0000 */ lw $t3, ($s0) -/* 003B00 80002F00 AFA70050 */ sw $a3, 0x50($sp) -/* 003B04 80002F04 AFA60038 */ sw $a2, 0x38($sp) -/* 003B08 80002F08 0C0321D8 */ jal alUnlink -/* 003B0C 80002F0C AD2B0008 */ sw $t3, 8($t1) -/* 003B10 80002F10 8FA60038 */ lw $a2, 0x38($sp) -/* 003B14 80002F14 8FA70050 */ lw $a3, 0x50($sp) -/* 003B18 80002F18 3C098012 */ lui $t1, %hi(D_80119230) # $t1, 0x8012 -/* 003B1C 80002F1C 10C00008 */ beqz $a2, .L80002F40 -/* 003B20 80002F20 25299230 */ addiu $t1, %lo(D_80119230) # addiu $t1, $t1, -0x6dd0 -/* 003B24 80002F24 02002025 */ move $a0, $s0 -/* 003B28 80002F28 00C02825 */ move $a1, $a2 -/* 003B2C 80002F2C 0C0321E4 */ jal alLink -/* 003B30 80002F30 AFA70050 */ sw $a3, 0x50($sp) -/* 003B34 80002F34 8FA70050 */ lw $a3, 0x50($sp) -/* 003B38 80002F38 1000000E */ b .L80002F74 -/* 003B3C 80002F3C 8FAC0048 */ lw $t4, 0x48($sp) -.L80002F40: -/* 003B40 80002F40 8D280004 */ lw $t0, 4($t1) -/* 003B44 80002F44 00000000 */ nop -/* 003B48 80002F48 11000006 */ beqz $t0, .L80002F64 -/* 003B4C 80002F4C 00000000 */ nop -/* 003B50 80002F50 AD300004 */ sw $s0, 4($t1) -/* 003B54 80002F54 AE080000 */ sw $t0, ($s0) -/* 003B58 80002F58 AE000004 */ sw $zero, 4($s0) -/* 003B5C 80002F5C 10000004 */ b .L80002F70 -/* 003B60 80002F60 AD100004 */ sw $s0, 4($t0) -.L80002F64: -/* 003B64 80002F64 AD300004 */ sw $s0, 4($t1) -/* 003B68 80002F68 AE000000 */ sw $zero, ($s0) -/* 003B6C 80002F6C AE000004 */ sw $zero, 4($s0) -.L80002F70: -/* 003B70 80002F70 8FAC0048 */ lw $t4, 0x48($sp) -.L80002F74: -/* 003B74 80002F74 3C0D800E */ lui $t5, %hi(D_800DC680) # $t5, 0x800e -/* 003B78 80002F78 00EC3823 */ subu $a3, $a3, $t4 -/* 003B7C 80002F7C AE070008 */ sw $a3, 8($s0) -/* 003B80 80002F80 8DADC680 */ lw $t5, %lo(D_800DC680)($t5) -/* 003B84 80002F84 3C08800E */ lui $t0, %hi(D_800DC684) # $t0, 0x800e -/* 003B88 80002F88 2508C684 */ addiu $t0, %lo(D_800DC684) # addiu $t0, $t0, -0x397c -/* 003B8C 80002F8C AE0D000C */ sw $t5, 0xc($s0) -/* 003B90 80002F90 8E030010 */ lw $v1, 0x10($s0) -/* 003B94 80002F94 8D020000 */ lw $v0, ($t0) -/* 003B98 80002F98 3C0F8012 */ lui $t7, %hi(D_80119640) # $t7, 0x8012 -/* 003B9C 80002F9C 00027080 */ sll $t6, $v0, 2 -/* 003BA0 80002FA0 3C198012 */ lui $t9, %hi(D_80119AF0) # $t9, 0x8012 -/* 003BA4 80002FA4 01C27023 */ subu $t6, $t6, $v0 -/* 003BA8 80002FA8 000E70C0 */ sll $t6, $t6, 3 -/* 003BAC 80002FAC 27399AF0 */ addiu $t9, %lo(D_80119AF0) # addiu $t9, $t9, -0x6510 -/* 003BB0 80002FB0 25EF9640 */ addiu $t7, %lo(D_80119640) # addiu $t7, $t7, -0x69c0 -/* 003BB4 80002FB4 24180400 */ li $t8, 1024 -/* 003BB8 80002FB8 244B0001 */ addiu $t3, $v0, 1 -/* 003BBC 80002FBC AD0B0000 */ sw $t3, ($t0) -/* 003BC0 80002FC0 AFB80014 */ sw $t8, 0x14($sp) -/* 003BC4 80002FC4 01CF2021 */ addu $a0, $t6, $t7 -/* 003BC8 80002FC8 AFB90018 */ sw $t9, 0x18($sp) -/* 003BCC 80002FCC 24050001 */ li $a1, 1 -/* 003BD0 80002FD0 00003025 */ move $a2, $zero -/* 003BD4 80002FD4 AFA30010 */ sw $v1, 0x10($sp) -/* 003BD8 80002FD8 0C0323E0 */ jal osPiStartDma -/* 003BDC 80002FDC AFA3004C */ sw $v1, 0x4c($sp) -/* 003BE0 80002FE0 8FA4004C */ lw $a0, 0x4c($sp) -/* 003BE4 80002FE4 0C03233C */ jal osVirtualToPhysical -/* 003BE8 80002FE8 00000000 */ nop -/* 003BEC 80002FEC 8FAC0048 */ lw $t4, 0x48($sp) -/* 003BF0 80002FF0 00000000 */ nop -/* 003BF4 80002FF4 004C1021 */ addu $v0, $v0, $t4 -.L80002FF8: -/* 003BF8 80002FF8 8FBF002C */ lw $ra, 0x2c($sp) -.L80002FFC: -/* 003BFC 80002FFC 8FB00028 */ lw $s0, 0x28($sp) -/* 003C00 80003000 03E00008 */ jr $ra -/* 003C04 80003004 27BD0050 */ addiu $sp, $sp, 0x50 - diff --git a/asm/non_matchings/unknown_003260/func_80003008.s b/asm/non_matchings/unknown_003260/func_80003008.s deleted file mode 100644 index 6e563ea9..00000000 --- a/asm/non_matchings/unknown_003260/func_80003008.s +++ /dev/null @@ -1,17 +0,0 @@ -glabel func_80003008 -/* 003C08 80003008 3C038012 */ lui $v1, %hi(D_80119230) # $v1, 0x8012 -/* 003C0C 8000300C 24639230 */ addiu $v1, %lo(D_80119230) # addiu $v1, $v1, -0x6dd0 -/* 003C10 80003010 906E0000 */ lbu $t6, ($v1) -/* 003C14 80003014 3C028000 */ lui $v0, %hi(func_80002E38) # $v0, 0x8000 -/* 003C18 80003018 15C00007 */ bnez $t6, .L80003038 -/* 003C1C 8000301C 24422E38 */ addiu $v0, %lo(func_80002E38) # addiu $v0, $v0, 0x2e38 -/* 003C20 80003020 3C0F8012 */ lui $t7, %hi(D_80119240) # $t7, 0x8012 -/* 003C24 80003024 25EF9240 */ addiu $t7, %lo(D_80119240) # addiu $t7, $t7, -0x6dc0 -/* 003C28 80003028 24180001 */ li $t8, 1 -/* 003C2C 8000302C AC600004 */ sw $zero, 4($v1) -/* 003C30 80003030 AC6F0008 */ sw $t7, 8($v1) -/* 003C34 80003034 A0780000 */ sb $t8, ($v1) -.L80003038: -/* 003C38 80003038 03E00008 */ jr $ra -/* 003C3C 8000303C AC830000 */ sw $v1, ($a0) - diff --git a/asm/non_matchings/unknown_003260/func_80003040.s b/asm/non_matchings/unknown_003260/func_80003040.s index 8afd6898..3419bf91 100644 --- a/asm/non_matchings/unknown_003260/func_80003040.s +++ b/asm/non_matchings/unknown_003260/func_80003040.s @@ -26,8 +26,8 @@ glabel func_80003040 /* 003C9C 8000309C 1420FFF9 */ bnez $at, .L80003084 /* 003CA0 800030A0 02202025 */ move $a0, $s1 .L800030A4: -/* 003CA4 800030A4 3C128012 */ lui $s2, %hi(D_80119230) # $s2, 0x8012 -/* 003CA8 800030A8 26529230 */ addiu $s2, %lo(D_80119230) # addiu $s2, $s2, -0x6dd0 +/* 003CA4 800030A4 3C128012 */ lui $s2, %hi(dmaState) # $s2, 0x8012 +/* 003CA8 800030A8 26529230 */ addiu $s2, %lo(dmaState) # addiu $s2, $s2, -0x6dd0 /* 003CAC 800030AC 8E500004 */ lw $s0, 4($s2) /* 003CB0 800030B0 3C13800E */ lui $s3, %hi(D_800DC680) # $s3, 0x800e /* 003CB4 800030B4 1200001C */ beqz $s0, .L80003128 diff --git a/src/unknown_003260.c b/src/unknown_003260.c index 196a6ce9..268cd00e 100644 --- a/src/unknown_003260.c +++ b/src/unknown_003260.c @@ -20,8 +20,8 @@ extern OSMesgQueue D_80116198; extern OSMesg D_801161B0[8]; extern ALGlobals ALGlobals_801161D0; extern s32 D_80116220[3076]; -extern s32 D_80119230[3]; -extern unk80119240 D_80119240[50]; +extern AMDMAState dmaState; +extern AMDMABuffer dmaBuffs[50]; extern s32 D_80119628; extern s32 D_8011962C; extern s32 D_80119630; @@ -78,6 +78,8 @@ const char D_800E4B80[] = "WARNING: Attempt to stop NULL sound aborted\n"; /*********************************/ +s32 __amDMA(s32 addr, s32 len, void *state); + #if 1 GLOBAL_ASM("asm/non_matchings/unknown_003260/audioNewThread.s") #else @@ -89,7 +91,7 @@ void audioNewThread(ALSynConfig *c, OSPri p, OSSched *arg2) { s32 i; D_80115F90 = arg2; D_80115F94 = c->heap; - c->dmaproc = &func_80003008; + c->dmaproc = &__amDmaNew; c->outputRate = osAiSetFrequency(22050); D_8011962C = (((f32)c->outputRate) * 2.0f) / gVideoRefreshRate; if (D_8011962C < 0) { @@ -121,7 +123,7 @@ void audioNewThread(ALSynConfig *c, OSPri p, OSSched *arg2) { osCreateMesgQueue(&OSMesgQueue_80116160, &D_80116178, 8); osCreateMesgQueue(&D_80119AF0, &D_80119B08, 50); - osCreateThread(&audioThread, 4, &func_80002A98, NULL, &D_80119230, p); + osCreateThread(&audioThread, 4, &func_80002A98, NULL, &dmaState, p); } #endif @@ -136,8 +138,22 @@ void audioStopThread(void) { GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80002A98.s") GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80002C00.s") GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80002DF8.s") -GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80002E38.s") -GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80003008.s") +GLOBAL_ASM("asm/non_matchings/unknown_003260/__amDMA.s") + +ALDMAproc __amDmaNew(AMDMAState **state) { + int i; + + if(!dmaState.initialized) { /* only do this once */ + dmaState.firstUsed = 0; + dmaState.firstFree = &dmaBuffs[0]; + dmaState.initialized = 1; + } + + *state = &dmaState; /* state is never used in this case */ + + return __amDMA; +} + GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80003040.s") void set_sfx_volume_slider(u32 arg0) { diff --git a/src/unknown_003260.h b/src/unknown_003260.h index 169e09ce..56ae3757 100644 --- a/src/unknown_003260.h +++ b/src/unknown_003260.h @@ -49,13 +49,13 @@ typedef union { }ALSndpEvent; -typedef struct unk80119240 +typedef struct AMDMABuffer { ALLink node; u32 unk08; u32 unk0C; void *unk10; -} unk80119240; +} AMDMABuffer; /* Unknown Size */ /*typedef struct unk800DC6B0 { @@ -72,6 +72,13 @@ typedef struct audioMgrConfig_s{ u16 unk10; } audioMgrConfig; +typedef struct { + u8 initialized; + u8 unk1[3]; + AMDMABuffer *firstUsed; + AMDMABuffer *firstFree; +} AMDMAState; + extern s32 D_800DC680; extern s32 D_800DC684; extern s32 D_800DC688; @@ -94,7 +101,6 @@ extern s32 sfxVolumeSlider; extern s32 D_800DC6C4; extern void func_80002A98(void*); -extern u32 func_80003008; void *alHeapDBAlloc(u8 *file, s32 line, ALHeap *hp, s32 num, s32 size); //lib/src/al void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount); //lib/src/unknown_0C9C90.c ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt); //lib/src/unknown_0C9C90.c diff --git a/src/unknown_003260_bss.c b/src/unknown_003260_bss.c index 9692b19e..84740ab7 100644 --- a/src/unknown_003260_bss.c +++ b/src/unknown_003260_bss.c @@ -2,7 +2,6 @@ /* RAM_POS: 0x80002660 */ #include "unknown_003260.h" - // This file is needed, since there is a bss reordering issue with D_80119BD0 and gAlSndPlayer OSSched *D_80115F90; @@ -16,8 +15,8 @@ OSMesgQueue D_80116198; OSMesg D_801161B0[8]; ALGlobals ALGlobals_801161D0; s32 D_80116220[3076]; -s32 D_80119230[3]; -unk80119240 D_80119240[50]; +AMDMAState dmaState; +AMDMABuffer dmaBuffs[50]; s32 D_80119628; s32 D_8011962C; s32 D_80119630;