1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-27 07:07:09 +00:00

audio_load OK (#948)

* Match func_800DDB64

* Match func_800DC910

* remove stack comments

* Move nop padding to ucode_disas

* Partially label audio_synthesis

To some extent copied from sm64.

* cleanup

* Reverb and ReverbBits have nothing to do with reverbs

* review

* naming

* Revert "reduce diff"

This reverts commit cd4ac24d8809f3f8e5b0f91788bffd72b47d15af.

* Match func_800E283C

* Audio_DmaSampleData

* Warning fixes

* func_800E4198

* func_800E4918

* Fix compiler warnings in z_camera/db_camera

* cleanup

* terminology

* tiny bit of doc

* undo permuter_settings change

* Revert "Fix compiler warnings in z_camera/db_camera"

This reverts commit dfdfac47f2.

* review

Co-authored-by: zelda2774 <zelda2774@invalid>
This commit is contained in:
zelda2774 2021-09-07 20:14:09 +02:00 committed by GitHub
parent d63ed0c17a
commit 9c7d3688ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 600 additions and 1303 deletions

View file

@ -1,232 +0,0 @@
.rdata
glabel D_80149420
.asciz "SUPERDMA"
.balign 4
.text
glabel Audio_DmaSampleData
/* B5847C 800E12DC 27BDFFB0 */ addiu $sp, $sp, -0x50
/* B58480 800E12E0 AFB10030 */ sw $s1, 0x30($sp)
/* B58484 800E12E4 AFB0002C */ sw $s0, 0x2c($sp)
/* B58488 800E12E8 00A08025 */ move $s0, $a1
/* B5848C 800E12EC 00808825 */ move $s1, $a0
/* B58490 800E12F0 AFBF0034 */ sw $ra, 0x34($sp)
/* B58494 800E12F4 AFA60058 */ sw $a2, 0x58($sp)
/* B58498 800E12F8 AFA7005C */ sw $a3, 0x5c($sp)
/* B5849C 800E12FC 14C00008 */ bnez $a2, .L800E1320
/* B584A0 800E1300 00005825 */ move $t3, $zero
/* B584A4 800E1304 3C098017 */ lui $t1, %hi(gAudioContext) # $t1, 0x8017
/* B584A8 800E1308 2529F180 */ addiu $t1, %lo(gAudioContext) # addiu $t1, $t1, -0xe80
/* B584AC 800E130C 8D262624 */ lw $a2, 0x2624($t1)
/* B584B0 800E1310 90E20000 */ lbu $v0, ($a3)
/* B584B4 800E1314 0046082B */ sltu $at, $v0, $a2
/* B584B8 800E1318 54200057 */ bnezl $at, .L800E1478
/* B584BC 800E131C 8D25261C */ lw $a1, 0x261c($t1)
.L800E1320:
/* B584C0 800E1320 3C098017 */ lui $t1, %hi(gAudioContext) # $t1, 0x8017
/* B584C4 800E1324 2529F180 */ addiu $t1, %lo(gAudioContext) # addiu $t1, $t1, -0xe80
/* B584C8 800E1328 8D262624 */ lw $a2, 0x2624($t1)
/* B584CC 800E132C 8D252620 */ lw $a1, 0x2620($t1)
/* B584D0 800E1330 00C02025 */ move $a0, $a2
/* B584D4 800E1334 00C5082B */ sltu $at, $a2, $a1
/* B584D8 800E1338 50200036 */ beql $at, $zero, .L800E1414
/* B584DC 800E133C 8FB90058 */ lw $t9, 0x58($sp)
/* B584E0 800E1340 8D39261C */ lw $t9, 0x261c($t1)
/* B584E4 800E1344 0004C100 */ sll $t8, $a0, 4
/* B584E8 800E1348 03191821 */ addu $v1, $t8, $t9
.L800E134C:
/* B584EC 800E134C 8C6C0004 */ lw $t4, 4($v1)
/* B584F0 800E1350 00604025 */ move $t0, $v1
/* B584F4 800E1354 022C1023 */ subu $v0, $s1, $t4
/* B584F8 800E1358 04420029 */ bltzl $v0, .L800E1400
/* B584FC 800E135C 24840001 */ addiu $a0, $a0, 1
/* B58500 800E1360 950D000A */ lhu $t5, 0xa($t0)
/* B58504 800E1364 01B07023 */ subu $t6, $t5, $s0
/* B58508 800E1368 01C2082B */ sltu $at, $t6, $v0
/* B5850C 800E136C 54200024 */ bnezl $at, .L800E1400
/* B58510 800E1370 24840001 */ addiu $a0, $a0, 1
/* B58514 800E1374 910F000E */ lbu $t7, 0xe($t0)
/* B58518 800E1378 55E00018 */ bnezl $t7, .L800E13DC
/* B5851C 800E137C 240C0020 */ li $t4, 32
/* B58520 800E1380 9122282D */ lbu $v0, 0x282d($t1)
/* B58524 800E1384 9138282F */ lbu $t8, 0x282f($t1)
/* B58528 800E1388 53020014 */ beql $t8, $v0, .L800E13DC
/* B5852C 800E138C 240C0020 */ li $t4, 32
/* B58530 800E1390 9103000D */ lbu $v1, 0xd($t0)
/* B58534 800E1394 0122C821 */ addu $t9, $t1, $v0
/* B58538 800E1398 5043000E */ beql $v0, $v1, .L800E13D4
/* B5853C 800E139C 24590001 */ addiu $t9, $v0, 1
/* B58540 800E13A0 932C272C */ lbu $t4, 0x272c($t9)
/* B58544 800E13A4 01236821 */ addu $t5, $t1, $v1
/* B58548 800E13A8 A1AC272C */ sb $t4, 0x272c($t5)
/* B5854C 800E13AC 9138282D */ lbu $t8, 0x282d($t1)
/* B58550 800E13B0 8D2F261C */ lw $t7, 0x261c($t1)
/* B58554 800E13B4 910E000D */ lbu $t6, 0xd($t0)
/* B58558 800E13B8 0138C821 */ addu $t9, $t1, $t8
/* B5855C 800E13BC 932C272C */ lbu $t4, 0x272c($t9)
/* B58560 800E13C0 000C6900 */ sll $t5, $t4, 4
/* B58564 800E13C4 01EDC021 */ addu $t8, $t7, $t5
/* B58568 800E13C8 A30E000D */ sb $t6, 0xd($t8)
/* B5856C 800E13CC 9122282D */ lbu $v0, 0x282d($t1)
/* B58570 800E13D0 24590001 */ addiu $t9, $v0, 1
.L800E13D4:
/* B58574 800E13D4 A139282D */ sb $t9, 0x282d($t1)
/* B58578 800E13D8 240C0020 */ li $t4, 32
.L800E13DC:
/* B5857C 800E13DC A10C000E */ sb $t4, 0xe($t0)
/* B58580 800E13E0 8FAF005C */ lw $t7, 0x5c($sp)
/* B58584 800E13E4 A1E40000 */ sb $a0, ($t7)
/* B58588 800E13E8 8D0D0000 */ lw $t5, ($t0)
/* B5858C 800E13EC 8D180004 */ lw $t8, 4($t0)
/* B58590 800E13F0 01B17021 */ addu $t6, $t5, $s1
/* B58594 800E13F4 10000083 */ b .L800E1604
/* B58598 800E13F8 01D81023 */ subu $v0, $t6, $t8
/* B5859C 800E13FC 24840001 */ addiu $a0, $a0, 1
.L800E1400:
/* B585A0 800E1400 0085082B */ sltu $at, $a0, $a1
/* B585A4 800E1404 1420FFD1 */ bnez $at, .L800E134C
/* B585A8 800E1408 24630010 */ addiu $v1, $v1, 0x10
/* B585AC 800E140C AFA80048 */ sw $t0, 0x48($sp)
/* B585B0 800E1410 8FB90058 */ lw $t9, 0x58($sp)
.L800E1414:
/* B585B4 800E1414 8FA80048 */ lw $t0, 0x48($sp)
/* B585B8 800E1418 8FAC005C */ lw $t4, 0x5c($sp)
/* B585BC 800E141C 57200005 */ bnezl $t9, .L800E1434
/* B585C0 800E1420 9122282D */ lbu $v0, 0x282d($t1)
/* B585C4 800E1424 91820000 */ lbu $v0, ($t4)
/* B585C8 800E1428 10000013 */ b .L800E1478
/* B585CC 800E142C 8D25261C */ lw $a1, 0x261c($t1)
/* B585D0 800E1430 9122282D */ lbu $v0, 0x282d($t1)
.L800E1434:
/* B585D4 800E1434 912F282F */ lbu $t7, 0x282f($t1)
/* B585D8 800E1438 8FAD0058 */ lw $t5, 0x58($sp)
/* B585DC 800E143C 11E2000B */ beq $t7, $v0, .L800E146C
/* B585E0 800E1440 00000000 */ nop
/* B585E4 800E1444 11A00009 */ beqz $t5, .L800E146C
/* B585E8 800E1448 01227021 */ addu $t6, $t1, $v0
/* B585EC 800E144C 91CA272C */ lbu $t2, 0x272c($t6)
/* B585F0 800E1450 8D2C261C */ lw $t4, 0x261c($t1)
/* B585F4 800E1454 24580001 */ addiu $t8, $v0, 1
/* B585F8 800E1458 000AC900 */ sll $t9, $t2, 4
/* B585FC 800E145C A138282D */ sb $t8, 0x282d($t1)
/* B58600 800E1460 240B0001 */ li $t3, 1
/* B58604 800E1464 AFAA0038 */ sw $t2, 0x38($sp)
/* B58608 800E1468 032C4021 */ addu $t0, $t9, $t4
.L800E146C:
/* B5860C 800E146C 10000030 */ b .L800E1530
/* B58610 800E1470 00000000 */ nop
/* B58614 800E1474 8D25261C */ lw $a1, 0x261c($t1)
.L800E1478:
/* B58618 800E1478 00027900 */ sll $t7, $v0, 4
/* B5861C 800E147C 01E54021 */ addu $t0, $t7, $a1
/* B58620 800E1480 00002025 */ move $a0, $zero
.L800E1484:
/* B58624 800E1484 8D030004 */ lw $v1, 4($t0)
/* B58628 800E1488 02231023 */ subu $v0, $s1, $v1
/* B5862C 800E148C 04420024 */ bltzl $v0, .L800E1520
/* B58630 800E1490 00046900 */ sll $t5, $a0, 4
/* B58634 800E1494 950D000A */ lhu $t5, 0xa($t0)
/* B58638 800E1498 01B07023 */ subu $t6, $t5, $s0
/* B5863C 800E149C 01C2082B */ sltu $at, $t6, $v0
/* B58640 800E14A0 5420001F */ bnezl $at, .L800E1520
/* B58644 800E14A4 00046900 */ sll $t5, $a0, 4
/* B58648 800E14A8 9118000E */ lbu $t8, 0xe($t0)
/* B5864C 800E14AC 57000016 */ bnezl $t8, .L800E1508
/* B58650 800E14B0 8D0E0000 */ lw $t6, ($t0)
/* B58654 800E14B4 9122282C */ lbu $v0, 0x282c($t1)
/* B58658 800E14B8 9103000D */ lbu $v1, 0xd($t0)
/* B5865C 800E14BC 0122C821 */ addu $t9, $t1, $v0
/* B58660 800E14C0 5043000E */ beql $v0, $v1, .L800E14FC
/* B58664 800E14C4 24590001 */ addiu $t9, $v0, 1
/* B58668 800E14C8 932C262C */ lbu $t4, 0x262c($t9)
/* B5866C 800E14CC 01237821 */ addu $t7, $t1, $v1
/* B58670 800E14D0 A1EC262C */ sb $t4, 0x262c($t7)
/* B58674 800E14D4 9138282C */ lbu $t8, 0x282c($t1)
/* B58678 800E14D8 8D2E261C */ lw $t6, 0x261c($t1)
/* B5867C 800E14DC 910D000D */ lbu $t5, 0xd($t0)
/* B58680 800E14E0 0138C821 */ addu $t9, $t1, $t8
/* B58684 800E14E4 932C262C */ lbu $t4, 0x262c($t9)
/* B58688 800E14E8 000C7900 */ sll $t7, $t4, 4
/* B5868C 800E14EC 01CFC021 */ addu $t8, $t6, $t7
/* B58690 800E14F0 A30D000D */ sb $t5, 0xd($t8)
/* B58694 800E14F4 9122282C */ lbu $v0, 0x282c($t1)
/* B58698 800E14F8 24590001 */ addiu $t9, $v0, 1
.L800E14FC:
/* B5869C 800E14FC A139282C */ sb $t9, 0x282c($t1)
/* B586A0 800E1500 8D030004 */ lw $v1, 4($t0)
/* B586A4 800E1504 8D0E0000 */ lw $t6, ($t0)
.L800E1508:
/* B586A8 800E1508 240C0002 */ li $t4, 2
/* B586AC 800E150C A10C000E */ sb $t4, 0xe($t0)
/* B586B0 800E1510 01D17821 */ addu $t7, $t6, $s1
/* B586B4 800E1514 1000003B */ b .L800E1604
/* B586B8 800E1518 01E31023 */ subu $v0, $t7, $v1
/* B586BC 800E151C 00046900 */ sll $t5, $a0, 4
.L800E1520:
/* B586C0 800E1520 24840001 */ addiu $a0, $a0, 1
/* B586C4 800E1524 00C4082B */ sltu $at, $a2, $a0
/* B586C8 800E1528 1020FFD6 */ beqz $at, .L800E1484
/* B586CC 800E152C 01A54021 */ addu $t0, $t5, $a1
.L800E1530:
/* B586D0 800E1530 1560000D */ bnez $t3, .L800E1568
/* B586D4 800E1534 8FAA0038 */ lw $t2, 0x38($sp)
/* B586D8 800E1538 9122282C */ lbu $v0, 0x282c($t1)
/* B586DC 800E153C 9138282E */ lbu $t8, 0x282e($t1)
/* B586E0 800E1540 0122C821 */ addu $t9, $t1, $v0
/* B586E4 800E1544 17020003 */ bne $t8, $v0, .L800E1554
/* B586E8 800E1548 244C0001 */ addiu $t4, $v0, 1
/* B586EC 800E154C 1000002D */ b .L800E1604
/* B586F0 800E1550 00001025 */ move $v0, $zero
.L800E1554:
/* B586F4 800E1554 932A262C */ lbu $t2, 0x262c($t9)
/* B586F8 800E1558 8D2F261C */ lw $t7, 0x261c($t1)
/* B586FC 800E155C A12C282C */ sb $t4, 0x282c($t1)
/* B58700 800E1560 000A7100 */ sll $t6, $t2, 4
/* B58704 800E1564 01CF4021 */ addu $t0, $t6, $t7
.L800E1568:
/* B58708 800E1568 9502000A */ lhu $v0, 0xa($t0)
/* B5870C 800E156C 240D0003 */ li $t5, 3
/* B58710 800E1570 2401FFF0 */ li $at, -16
/* B58714 800E1574 A10D000E */ sb $t5, 0xe($t0)
/* B58718 800E1578 02218024 */ and $s0, $s1, $at
/* B5871C 800E157C AD100004 */ sw $s0, 4($t0)
/* B58720 800E1580 A5020008 */ sh $v0, 8($t0)
/* B58724 800E1584 8D2328A0 */ lw $v1, 0x28a0($t1)
/* B58728 800E1588 8D190000 */ lw $t9, ($t0)
/* B5872C 800E158C 8FAE0060 */ lw $t6, 0x60($sp)
/* B58730 800E1590 0003C080 */ sll $t8, $v1, 2
/* B58734 800E1594 0303C023 */ subu $t8, $t8, $v1
/* B58738 800E1598 0018C0C0 */ sll $t8, $t8, 3
/* B5873C 800E159C 3C0C8017 */ lui $t4, %hi(gAudioContext+0x1ed0) # $t4, 0x8017
/* B58740 800E15A0 3C0F8015 */ lui $t7, %hi(D_80149420) # $t7, 0x8015
/* B58744 800E15A4 25EF9420 */ addiu $t7, %lo(D_80149420) # addiu $t7, $t7, -0x6be0
/* B58748 800E15A8 258C1050 */ addiu $t4, %lo(gAudioContext+0x1ed0) # addiu $t4, $t4, 0x1050
/* B5874C 800E15AC 01382021 */ addu $a0, $t1, $t8
/* B58750 800E15B0 246D0001 */ addiu $t5, $v1, 1
/* B58754 800E15B4 AD2D28A0 */ sw $t5, 0x28a0($t1)
/* B58758 800E15B8 24841FE8 */ addiu $a0, $a0, 0x1fe8
/* B5875C 800E15BC AFAC0018 */ sw $t4, 0x18($sp)
/* B58760 800E15C0 AFAF0020 */ sw $t7, 0x20($sp)
/* B58764 800E15C4 AFAA0038 */ sw $t2, 0x38($sp)
/* B58768 800E15C8 AFA80048 */ sw $t0, 0x48($sp)
/* B5876C 800E15CC 02003825 */ move $a3, $s0
/* B58770 800E15D0 00002825 */ move $a1, $zero
/* B58774 800E15D4 00003025 */ move $a2, $zero
/* B58778 800E15D8 AFA20014 */ sw $v0, 0x14($sp)
/* B5877C 800E15DC AFB90010 */ sw $t9, 0x10($sp)
/* B58780 800E15E0 0C038AF8 */ jal Audio_DMA
/* B58784 800E15E4 AFAE001C */ sw $t6, 0x1c($sp)
/* B58788 800E15E8 8FAA0038 */ lw $t2, 0x38($sp)
/* B5878C 800E15EC 8FB8005C */ lw $t8, 0x5c($sp)
/* B58790 800E15F0 8FA80048 */ lw $t0, 0x48($sp)
/* B58794 800E15F4 0230C823 */ subu $t9, $s1, $s0
/* B58798 800E15F8 A30A0000 */ sb $t2, ($t8)
/* B5879C 800E15FC 8D0C0000 */ lw $t4, ($t0)
/* B587A0 800E1600 032C1021 */ addu $v0, $t9, $t4
.L800E1604:
/* B587A4 800E1604 8FBF0034 */ lw $ra, 0x34($sp)
/* B587A8 800E1608 8FB0002C */ lw $s0, 0x2c($sp)
/* B587AC 800E160C 8FB10030 */ lw $s1, 0x30($sp)
/* B587B0 800E1610 03E00008 */ jr $ra
/* B587B4 800E1614 27BD0050 */ addiu $sp, $sp, 0x50

View file

@ -1,172 +0,0 @@
glabel func_800E283C
/* B599DC 800E283C 27BDFF90 */ addiu $sp, $sp, -0x70
/* B599E0 800E2840 00047080 */ sll $t6, $a0, 2
/* B599E4 800E2844 3C0F8017 */ lui $t7, %hi(gAudioContext+0x2844) # $t7, 0x8017
/* B599E8 800E2848 8DEF19C4 */ lw $t7, %lo(gAudioContext+0x2844)($t7)
/* B599EC 800E284C 01C47021 */ addu $t6, $t6, $a0
/* B599F0 800E2850 000E7080 */ sll $t6, $t6, 2
/* B599F4 800E2854 AFBF0034 */ sw $ra, 0x34($sp)
/* B599F8 800E2858 AFB60030 */ sw $s6, 0x30($sp)
/* B599FC 800E285C AFB5002C */ sw $s5, 0x2c($sp)
/* B59A00 800E2860 AFB40028 */ sw $s4, 0x28($sp)
/* B59A04 800E2864 AFB30024 */ sw $s3, 0x24($sp)
/* B59A08 800E2868 AFB20020 */ sw $s2, 0x20($sp)
/* B59A0C 800E286C AFB1001C */ sw $s1, 0x1c($sp)
/* B59A10 800E2870 AFB00018 */ sw $s0, 0x18($sp)
/* B59A14 800E2874 AFAE0044 */ sw $t6, 0x44($sp)
/* B59A18 800E2878 01EE1021 */ addu $v0, $t7, $t6
/* B59A1C 800E287C 90590000 */ lbu $t9, ($v0)
/* B59A20 800E2880 90470001 */ lbu $a3, 1($v0)
/* B59A24 800E2884 00A09825 */ move $s3, $a1
/* B59A28 800E2888 AFB90050 */ sw $t9, 0x50($sp)
/* B59A2C 800E288C 8CA30000 */ lw $v1, ($a1)
/* B59A30 800E2890 00C0A025 */ move $s4, $a2
/* B59A34 800E2894 94550004 */ lhu $s5, 4($v0)
/* B59A38 800E2898 50600021 */ beql $v1, $zero, .L800E2920
/* B59A3C 800E289C 8E630004 */ lw $v1, 4($s3)
/* B59A40 800E28A0 10E0001E */ beqz $a3, .L800E291C
/* B59A44 800E28A4 00654021 */ addu $t0, $v1, $a1
/* B59A48 800E28A8 18E0001C */ blez $a3, .L800E291C
/* B59A4C 800E28AC ACA80000 */ sw $t0, ($a1)
/* B59A50 800E28B0 00009025 */ move $s2, $zero
/* B59A54 800E28B4 00071880 */ sll $v1, $a3, 2
/* B59A58 800E28B8 24160001 */ li $s6, 1
/* B59A5C 800E28BC 8E690000 */ lw $t1, ($s3)
.L800E28C0:
/* B59A60 800E28C0 01321021 */ addu $v0, $t1, $s2
/* B59A64 800E28C4 8C500000 */ lw $s0, ($v0)
/* B59A68 800E28C8 12000011 */ beqz $s0, .L800E2910
/* B59A6C 800E28CC 02138021 */ addu $s0, $s0, $s3
/* B59A70 800E28D0 AC500000 */ sw $s0, ($v0)
/* B59A74 800E28D4 920A0002 */ lbu $t2, 2($s0)
/* B59A78 800E28D8 02008825 */ move $s1, $s0
/* B59A7C 800E28DC 26040004 */ addiu $a0, $s0, 4
/* B59A80 800E28E0 1540000B */ bnez $t2, .L800E2910
/* B59A84 800E28E4 02602825 */ move $a1, $s3
/* B59A88 800E28E8 02803025 */ move $a2, $s4
/* B59A8C 800E28EC AFA3003C */ sw $v1, 0x3c($sp)
/* B59A90 800E28F0 0C039016 */ jal Audio_SampleReloc
/* B59A94 800E28F4 AFA70054 */ sw $a3, 0x54($sp)
/* B59A98 800E28F8 8E30000C */ lw $s0, 0xc($s1)
/* B59A9C 800E28FC 8FA3003C */ lw $v1, 0x3c($sp)
/* B59AA0 800E2900 8FA70054 */ lw $a3, 0x54($sp)
/* B59AA4 800E2904 02135821 */ addu $t3, $s0, $s3
/* B59AA8 800E2908 AE2B000C */ sw $t3, 0xc($s1)
/* B59AAC 800E290C A2360002 */ sb $s6, 2($s1)
.L800E2910:
/* B59AB0 800E2910 26520004 */ addiu $s2, $s2, 4
/* B59AB4 800E2914 5643FFEA */ bnel $s2, $v1, .L800E28C0
/* B59AB8 800E2918 8E690000 */ lw $t1, ($s3)
.L800E291C:
/* B59ABC 800E291C 8E630004 */ lw $v1, 4($s3)
.L800E2920:
/* B59AC0 800E2920 24160001 */ li $s6, 1
/* B59AC4 800E2924 50600016 */ beql $v1, $zero, .L800E2980
/* B59AC8 800E2928 8FAF0050 */ lw $t7, 0x50($sp)
/* B59ACC 800E292C 12A00013 */ beqz $s5, .L800E297C
/* B59AD0 800E2930 00736021 */ addu $t4, $v1, $s3
/* B59AD4 800E2934 1AA00011 */ blez $s5, .L800E297C
/* B59AD8 800E2938 AE6C0004 */ sw $t4, 4($s3)
/* B59ADC 800E293C 00008825 */ move $s1, $zero
/* B59AE0 800E2940 001590C0 */ sll $s2, $s5, 3
/* B59AE4 800E2944 8E6D0004 */ lw $t5, 4($s3)
.L800E2948:
/* B59AE8 800E2948 01B18021 */ addu $s0, $t5, $s1
/* B59AEC 800E294C 52000009 */ beql $s0, $zero, .L800E2974
/* B59AF0 800E2950 26310008 */ addiu $s1, $s1, 8
/* B59AF4 800E2954 8E0E0000 */ lw $t6, ($s0)
/* B59AF8 800E2958 02002025 */ move $a0, $s0
/* B59AFC 800E295C 02602825 */ move $a1, $s3
/* B59B00 800E2960 51C00004 */ beql $t6, $zero, .L800E2974
/* B59B04 800E2964 26310008 */ addiu $s1, $s1, 8
/* B59B08 800E2968 0C039016 */ jal Audio_SampleReloc
/* B59B0C 800E296C 02803025 */ move $a2, $s4
/* B59B10 800E2970 26310008 */ addiu $s1, $s1, 8
.L800E2974:
/* B59B14 800E2974 5632FFF4 */ bnel $s1, $s2, .L800E2948
/* B59B18 800E2978 8E6D0004 */ lw $t5, 4($s3)
.L800E297C:
/* B59B1C 800E297C 8FAF0050 */ lw $t7, 0x50($sp)
.L800E2980:
/* B59B20 800E2980 2418007E */ li $t8, 126
/* B59B24 800E2984 26720008 */ addiu $s2, $s3, 8
/* B59B28 800E2988 29E1007F */ slti $at, $t7, 0x7f
/* B59B2C 800E298C 54200003 */ bnezl $at, .L800E299C
/* B59B30 800E2990 8FA30050 */ lw $v1, 0x50($sp)
/* B59B34 800E2994 AFB80050 */ sw $t8, 0x50($sp)
/* B59B38 800E2998 8FA30050 */ lw $v1, 0x50($sp)
.L800E299C:
/* B59B3C 800E299C 24630001 */ addiu $v1, $v1, 1
/* B59B40 800E29A0 28610002 */ slti $at, $v1, 2
/* B59B44 800E29A4 14200024 */ bnez $at, .L800E2A38
/* B59B48 800E29A8 0003C880 */ sll $t9, $v1, 2
/* B59B4C 800E29AC 0333A821 */ addu $s5, $t9, $s3
/* B59B50 800E29B0 8E420000 */ lw $v0, ($s2)
.L800E29B4:
/* B59B54 800E29B4 1040001C */ beqz $v0, .L800E2A28
/* B59B58 800E29B8 00534021 */ addu $t0, $v0, $s3
/* B59B5C 800E29BC AE480000 */ sw $t0, ($s2)
/* B59B60 800E29C0 91090000 */ lbu $t1, ($t0)
/* B59B64 800E29C4 01008825 */ move $s1, $t0
/* B59B68 800E29C8 55200018 */ bnezl $t1, .L800E2A2C
/* B59B6C 800E29CC 26520004 */ addiu $s2, $s2, 4
/* B59B70 800E29D0 910A0001 */ lbu $t2, 1($t0)
/* B59B74 800E29D4 25040008 */ addiu $a0, $t0, 8
/* B59B78 800E29D8 02602825 */ move $a1, $s3
/* B59B7C 800E29DC 51400004 */ beql $t2, $zero, .L800E29F0
/* B59B80 800E29E0 26240010 */ addiu $a0, $s1, 0x10
/* B59B84 800E29E4 0C039016 */ jal Audio_SampleReloc
/* B59B88 800E29E8 02803025 */ move $a2, $s4
/* B59B8C 800E29EC 26240010 */ addiu $a0, $s1, 0x10
.L800E29F0:
/* B59B90 800E29F0 02602825 */ move $a1, $s3
/* B59B94 800E29F4 0C039016 */ jal Audio_SampleReloc
/* B59B98 800E29F8 02803025 */ move $a2, $s4
/* B59B9C 800E29FC 922B0002 */ lbu $t3, 2($s1)
/* B59BA0 800E2A00 2401007F */ li $at, 127
/* B59BA4 800E2A04 26240018 */ addiu $a0, $s1, 0x18
/* B59BA8 800E2A08 11610003 */ beq $t3, $at, .L800E2A18
/* B59BAC 800E2A0C 02602825 */ move $a1, $s3
/* B59BB0 800E2A10 0C039016 */ jal Audio_SampleReloc
/* B59BB4 800E2A14 02803025 */ move $a2, $s4
.L800E2A18:
/* B59BB8 800E2A18 8E300004 */ lw $s0, 4($s1)
/* B59BBC 800E2A1C A2360000 */ sb $s6, ($s1)
/* B59BC0 800E2A20 02136021 */ addu $t4, $s0, $s3
/* B59BC4 800E2A24 AE2C0004 */ sw $t4, 4($s1)
.L800E2A28:
/* B59BC8 800E2A28 26520004 */ addiu $s2, $s2, 4
.L800E2A2C:
/* B59BCC 800E2A2C 02B2082B */ sltu $at, $s5, $s2
/* B59BD0 800E2A30 5020FFE0 */ beql $at, $zero, .L800E29B4
/* B59BD4 800E2A34 8E420000 */ lw $v0, ($s2)
.L800E2A38:
/* B59BD8 800E2A38 3C0E8017 */ lui $t6, %hi(gAudioContext+0x2844) # $t6, 0x8017
/* B59BDC 800E2A3C 8DCE19C4 */ lw $t6, %lo(gAudioContext+0x2844)($t6)
/* B59BE0 800E2A40 8FAF0044 */ lw $t7, 0x44($sp)
/* B59BE4 800E2A44 8E6D0000 */ lw $t5, ($s3)
/* B59BE8 800E2A48 3C088017 */ lui $t0, %hi(gAudioContext+0x2844) # $t0, 0x8017
/* B59BEC 800E2A4C 01CFC021 */ addu $t8, $t6, $t7
/* B59BF0 800E2A50 AF0D000C */ sw $t5, 0xc($t8)
/* B59BF4 800E2A54 8FA90044 */ lw $t1, 0x44($sp)
/* B59BF8 800E2A58 8D0819C4 */ lw $t0, %lo(gAudioContext+0x2844)($t0)
/* B59BFC 800E2A5C 8E790004 */ lw $t9, 4($s3)
/* B59C00 800E2A60 3C0C8017 */ lui $t4, %hi(gAudioContext+0x2844) # $t4, 0x8017
/* B59C04 800E2A64 01095021 */ addu $t2, $t0, $t1
/* B59C08 800E2A68 AD590010 */ sw $t9, 0x10($t2)
/* B59C0C 800E2A6C 8FAE0044 */ lw $t6, 0x44($sp)
/* B59C10 800E2A70 8D8C19C4 */ lw $t4, %lo(gAudioContext+0x2844)($t4)
/* B59C14 800E2A74 266B0008 */ addiu $t3, $s3, 8
/* B59C18 800E2A78 018E7821 */ addu $t7, $t4, $t6
/* B59C1C 800E2A7C ADEB0008 */ sw $t3, 8($t7)
/* B59C20 800E2A80 8FBF0034 */ lw $ra, 0x34($sp)
/* B59C24 800E2A84 8FB60030 */ lw $s6, 0x30($sp)
/* B59C28 800E2A88 8FB5002C */ lw $s5, 0x2c($sp)
/* B59C2C 800E2A8C 8FB40028 */ lw $s4, 0x28($sp)
/* B59C30 800E2A90 8FB30024 */ lw $s3, 0x24($sp)
/* B59C34 800E2A94 8FB20020 */ lw $s2, 0x20($sp)
/* B59C38 800E2A98 8FB1001C */ lw $s1, 0x1c($sp)
/* B59C3C 800E2A9C 8FB00018 */ lw $s0, 0x18($sp)
/* B59C40 800E2AA0 03E00008 */ jr $ra
/* B59C44 800E2AA4 27BD0070 */ addiu $sp, $sp, 0x70

View file

@ -1,277 +0,0 @@
glabel func_800E4198
/* B5B338 800E4198 27BDFF98 */ addiu $sp, $sp, -0x68
/* B5B33C 800E419C AFB30030 */ sw $s3, 0x30($sp)
/* B5B340 800E41A0 3C138017 */ lui $s3, %hi(gAudioContext) # $s3, 0x8017
/* B5B344 800E41A4 2673F180 */ addiu $s3, %lo(gAudioContext) # addiu $s3, $s3, -0xe80
/* B5B348 800E41A8 8E6E176C */ lw $t6, 0x176c($s3)
/* B5B34C 800E41AC AFB50038 */ sw $s5, 0x38($sp)
/* B5B350 800E41B0 AFB2002C */ sw $s2, 0x2c($sp)
/* B5B354 800E41B4 00C09025 */ move $s2, $a2
/* B5B358 800E41B8 00E0A825 */ move $s5, $a3
/* B5B35C 800E41BC AFBF0044 */ sw $ra, 0x44($sp)
/* B5B360 800E41C0 AFB70040 */ sw $s7, 0x40($sp)
/* B5B364 800E41C4 AFB6003C */ sw $s6, 0x3c($sp)
/* B5B368 800E41C8 AFB40034 */ sw $s4, 0x34($sp)
/* B5B36C 800E41CC AFB10028 */ sw $s1, 0x28($sp)
/* B5B370 800E41D0 AFB00024 */ sw $s0, 0x24($sp)
/* B5B374 800E41D4 11C00003 */ beqz $t6, .L800E41E4
/* B5B378 800E41D8 00001025 */ move $v0, $zero
/* B5B37C 800E41DC 10000003 */ b .L800E41EC
/* B5B380 800E41E0 24020001 */ li $v0, 1
.L800E41E4:
/* B5B384 800E41E4 3C018017 */ lui $at, %hi(D_8016B780) # $at, 0x8017
/* B5B388 800E41E8 AC20B780 */ sw $zero, %lo(D_8016B780)($at)
.L800E41EC:
/* B5B38C 800E41EC AE601768 */ sw $zero, 0x1768($s3)
/* B5B390 800E41F0 02403025 */ move $a2, $s2
/* B5B394 800E41F4 0C038A0F */ jal func_800E283C
/* B5B398 800E41F8 AFA2004C */ sw $v0, 0x4c($sp)
/* B5B39C 800E41FC 8E641768 */ lw $a0, 0x1768($s3)
/* B5B3A0 800E4200 00002825 */ move $a1, $zero
/* B5B3A4 800E4204 0000A025 */ move $s4, $zero
/* B5B3A8 800E4208 18800011 */ blez $a0, .L800E4250
/* B5B3AC 800E420C 3C0F8017 */ lui $t7, %hi(gAudioContext)
/* B5B3B0 800E4210 25E2F180 */ addiu $v0, $t7, %lo(gAudioContext)
/* B5B3B4 800E4214 0004C080 */ sll $t8, $a0, 2
/* B5B3B8 800E4218 03023021 */ addu $a2, $t8, $v0
/* B5B3BC 800E421C 2403FFF0 */ li $v1, -16
.L800E4220:
/* B5B3C0 800E4220 8C590B68 */ lw $t9, 0xb68($v0)
/* B5B3C4 800E4224 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B3C8 800E4228 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B3CC 800E422C 8F2A0000 */ lw $t2, ($t9)
/* B5B3D0 800E4230 24420004 */ addiu $v0, $v0, 4
/* B5B3D4 800E4234 01415824 */ and $t3, $t2, $at
/* B5B3D8 800E4238 256C000F */ addiu $t4, $t3, 0xf
/* B5B3DC 800E423C 0046082B */ sltu $at, $v0, $a2
/* B5B3E0 800E4240 01836824 */ and $t5, $t4, $v1
/* B5B3E4 800E4244 1420FFF6 */ bnez $at, .L800E4220
/* B5B3E8 800E4248 00AD2821 */ addu $a1, $a1, $t5
/* B5B3EC 800E424C 0000A025 */ move $s4, $zero
.L800E4250:
/* B5B3F0 800E4250 188000A7 */ blez $a0, .L800E44F0
/* B5B3F4 800E4254 24170001 */ li $s7, 1
/* B5B3F8 800E4258 24160003 */ li $s6, 3
/* B5B3FC 800E425C 8E6E176C */ lw $t6, 0x176c($s3)
.L800E4260:
/* B5B400 800E4260 24010078 */ li $at, 120
/* B5B404 800E4264 0014C080 */ sll $t8, $s4, 2
/* B5B408 800E4268 11C100A1 */ beq $t6, $at, .L800E44F0
/* B5B40C 800E426C 02787821 */ addu $t7, $s3, $t8
/* B5B410 800E4270 8DF00B68 */ lw $s0, 0xb68($t7)
/* B5B414 800E4274 12A00005 */ beqz $s5, .L800E428C
/* B5B418 800E4278 00008825 */ move $s1, $zero
/* B5B41C 800E427C 52B7002D */ beql $s5, $s7, .L800E4334
/* B5B420 800E4280 8E030000 */ lw $v1, ($s0)
/* B5B424 800E4284 10000052 */ b .L800E43D0
/* B5B428 800E4288 00000000 */ nop
.L800E428C:
/* B5B42C 800E428C 8E030000 */ lw $v1, ($s0)
/* B5B430 800E4290 8E590010 */ lw $t9, 0x10($s2)
/* B5B434 800E4294 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B438 800E4298 00031100 */ sll $v0, $v1, 4
/* B5B43C 800E429C 00021782 */ srl $v0, $v0, 0x1e
/* B5B440 800E42A0 1722000A */ bne $t9, $v0, .L800E42CC
/* B5B444 800E42A4 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B448 800E42A8 8E450000 */ lw $a1, ($s2)
/* B5B44C 800E42AC 8E060004 */ lw $a2, 4($s0)
/* B5B450 800E42B0 00023E00 */ sll $a3, $v0, 0x18
/* B5B454 800E42B4 00073E03 */ sra $a3, $a3, 0x18
/* B5B458 800E42B8 AFB70010 */ sw $s7, 0x10($sp)
/* B5B45C 800E42BC 0C038171 */ jal func_800E05C4
/* B5B460 800E42C0 00612024 */ and $a0, $v1, $at
/* B5B464 800E42C4 10000042 */ b .L800E43D0
/* B5B468 800E42C8 00408825 */ move $s1, $v0
.L800E42CC:
/* B5B46C 800E42CC 8E4A0014 */ lw $t2, 0x14($s2)
/* B5B470 800E42D0 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B474 800E42D4 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B478 800E42D8 15420009 */ bne $t2, $v0, .L800E4300
/* B5B47C 800E42DC 00612024 */ and $a0, $v1, $at
/* B5B480 800E42E0 8E450004 */ lw $a1, 4($s2)
/* B5B484 800E42E4 8E060004 */ lw $a2, 4($s0)
/* B5B488 800E42E8 00023E00 */ sll $a3, $v0, 0x18
/* B5B48C 800E42EC 00073E03 */ sra $a3, $a3, 0x18
/* B5B490 800E42F0 0C038171 */ jal func_800E05C4
/* B5B494 800E42F4 AFB70010 */ sw $s7, 0x10($sp)
/* B5B498 800E42F8 10000035 */ b .L800E43D0
/* B5B49C 800E42FC 00408825 */ move $s1, $v0
.L800E4300:
/* B5B4A0 800E4300 16C20033 */ bne $s6, $v0, .L800E43D0
/* B5B4A4 800E4304 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B4A8 800E4308 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B4AC 800E430C 8E060004 */ lw $a2, 4($s0)
/* B5B4B0 800E4310 00023E00 */ sll $a3, $v0, 0x18
/* B5B4B4 800E4314 00073E03 */ sra $a3, $a3, 0x18
/* B5B4B8 800E4318 AFB70010 */ sw $s7, 0x10($sp)
/* B5B4BC 800E431C 00612024 */ and $a0, $v1, $at
/* B5B4C0 800E4320 0C038171 */ jal func_800E05C4
/* B5B4C4 800E4324 240500FE */ li $a1, 254
/* B5B4C8 800E4328 10000029 */ b .L800E43D0
/* B5B4CC 800E432C 00408825 */ move $s1, $v0
/* B5B4D0 800E4330 8E030000 */ lw $v1, ($s0)
.L800E4334:
/* B5B4D4 800E4334 8E4B0010 */ lw $t3, 0x10($s2)
/* B5B4D8 800E4338 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B4DC 800E433C 00031100 */ sll $v0, $v1, 4
/* B5B4E0 800E4340 00021782 */ srl $v0, $v0, 0x1e
/* B5B4E4 800E4344 1562000A */ bne $t3, $v0, .L800E4370
/* B5B4E8 800E4348 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B4EC 800E434C 8E450000 */ lw $a1, ($s2)
/* B5B4F0 800E4350 8E060004 */ lw $a2, 4($s0)
/* B5B4F4 800E4354 00023E00 */ sll $a3, $v0, 0x18
/* B5B4F8 800E4358 00073E03 */ sra $a3, $a3, 0x18
/* B5B4FC 800E435C AFA00010 */ sw $zero, 0x10($sp)
/* B5B500 800E4360 0C038171 */ jal func_800E05C4
/* B5B504 800E4364 00612024 */ and $a0, $v1, $at
/* B5B508 800E4368 10000019 */ b .L800E43D0
/* B5B50C 800E436C 00408825 */ move $s1, $v0
.L800E4370:
/* B5B510 800E4370 8E4C0014 */ lw $t4, 0x14($s2)
/* B5B514 800E4374 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B518 800E4378 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B51C 800E437C 15820009 */ bne $t4, $v0, .L800E43A4
/* B5B520 800E4380 00612024 */ and $a0, $v1, $at
/* B5B524 800E4384 8E450004 */ lw $a1, 4($s2)
/* B5B528 800E4388 8E060004 */ lw $a2, 4($s0)
/* B5B52C 800E438C 00023E00 */ sll $a3, $v0, 0x18
/* B5B530 800E4390 00073E03 */ sra $a3, $a3, 0x18
/* B5B534 800E4394 0C038171 */ jal func_800E05C4
/* B5B538 800E4398 AFA00010 */ sw $zero, 0x10($sp)
/* B5B53C 800E439C 1000000C */ b .L800E43D0
/* B5B540 800E43A0 00408825 */ move $s1, $v0
.L800E43A4:
/* B5B544 800E43A4 16C2000A */ bne $s6, $v0, .L800E43D0
/* B5B548 800E43A8 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B54C 800E43AC 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B550 800E43B0 8E060004 */ lw $a2, 4($s0)
/* B5B554 800E43B4 00023E00 */ sll $a3, $v0, 0x18
/* B5B558 800E43B8 00073E03 */ sra $a3, $a3, 0x18
/* B5B55C 800E43BC AFA00010 */ sw $zero, 0x10($sp)
/* B5B560 800E43C0 00612024 */ and $a0, $v1, $at
/* B5B564 800E43C4 0C038171 */ jal func_800E05C4
/* B5B568 800E43C8 240500FE */ li $a1, 254
/* B5B56C 800E43CC 00408825 */ move $s1, $v0
.L800E43D0:
/* B5B570 800E43D0 16200003 */ bnez $s1, .L800E43E0
/* B5B574 800E43D4 00000000 */ nop
/* B5B578 800E43D8 10000041 */ b .L800E44E0
/* B5B57C 800E43DC 8E641768 */ lw $a0, 0x1768($s3)
.L800E43E0:
/* B5B580 800E43E0 52A00006 */ beql $s5, $zero, .L800E43FC
/* B5B584 800E43E4 8E030000 */ lw $v1, ($s0)
/* B5B588 800E43E8 52B70023 */ beql $s5, $s7, .L800E4478
/* B5B58C 800E43EC 8E6A176C */ lw $t2, 0x176c($s3)
/* B5B590 800E43F0 1000003B */ b .L800E44E0
/* B5B594 800E43F4 8E641768 */ lw $a0, 0x1768($s3)
/* B5B598 800E43F8 8E030000 */ lw $v1, ($s0)
.L800E43FC:
/* B5B59C 800E43FC 24010001 */ li $at, 1
/* B5B5A0 800E4400 02202825 */ move $a1, $s1
/* B5B5A4 800E4404 00031100 */ sll $v0, $v1, 4
/* B5B5A8 800E4408 00021782 */ srl $v0, $v0, 0x1e
/* B5B5AC 800E440C 1441000E */ bne $v0, $at, .L800E4448
/* B5B5B0 800E4410 00403825 */ move $a3, $v0
/* B5B5B4 800E4414 8E6D2838 */ lw $t5, 0x2838($s3)
/* B5B5B8 800E4418 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B5BC 800E441C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B5C0 800E4420 00613024 */ and $a2, $v1, $at
/* B5B5C4 800E4424 8E040004 */ lw $a0, 4($s0)
/* B5B5C8 800E4428 02202825 */ move $a1, $s1
/* B5B5CC 800E442C 0C038AF3 */ jal func_800E2BCC
/* B5B5D0 800E4430 85A70002 */ lh $a3, 2($t5)
/* B5B5D4 800E4434 920E0000 */ lbu $t6, ($s0)
/* B5B5D8 800E4438 AE110004 */ sw $s1, 4($s0)
/* B5B5DC 800E443C 31D8FFF3 */ andi $t8, $t6, 0xfff3
/* B5B5E0 800E4440 1000000A */ b .L800E446C
/* B5B5E4 800E4444 A2180000 */ sb $t8, ($s0)
.L800E4448:
/* B5B5E8 800E4448 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B5EC 800E444C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B5F0 800E4450 00613024 */ and $a2, $v1, $at
/* B5B5F4 800E4454 0C038AAA */ jal Audio_DMAFastCopy
/* B5B5F8 800E4458 8E040004 */ lw $a0, 4($s0)
/* B5B5FC 800E445C 920F0000 */ lbu $t7, ($s0)
/* B5B600 800E4460 AE110004 */ sw $s1, 4($s0)
/* B5B604 800E4464 31F9FFF3 */ andi $t9, $t7, 0xfff3
/* B5B608 800E4468 A2190000 */ sb $t9, ($s0)
.L800E446C:
/* B5B60C 800E446C 1000001C */ b .L800E44E0
/* B5B610 800E4470 8E641768 */ lw $a0, 0x1768($s3)
/* B5B614 800E4474 8E6A176C */ lw $t2, 0x176c($s3)
.L800E4478:
/* B5B618 800E4478 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B61C 800E447C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B620 800E4480 000A5880 */ sll $t3, $t2, 2
/* B5B624 800E4484 016A5821 */ addu $t3, $t3, $t2
/* B5B628 800E4488 000B5880 */ sll $t3, $t3, 2
/* B5B62C 800E448C 026B1021 */ addu $v0, $s3, $t3
/* B5B630 800E4490 AC500D6C */ sw $s0, 0xd6c($v0)
/* B5B634 800E4494 AC510D70 */ sw $s1, 0xd70($v0)
/* B5B638 800E4498 8E6C176C */ lw $t4, 0x176c($s3)
/* B5B63C 800E449C AC400D78 */ sw $zero, 0xd78($v0)
/* B5B640 800E44A0 24420D68 */ addiu $v0, $v0, 0xd68
/* B5B644 800E44A4 000C6E00 */ sll $t5, $t4, 0x18
/* B5B648 800E44A8 01A17025 */ or $t6, $t5, $at
/* B5B64C 800E44AC AC4E000C */ sw $t6, 0xc($v0)
/* B5B650 800E44B0 8E030000 */ lw $v1, ($s0)
/* B5B654 800E44B4 8E180004 */ lw $t8, 4($s0)
/* B5B658 800E44B8 00617824 */ and $t7, $v1, $at
/* B5B65C 800E44BC 00035100 */ sll $t2, $v1, 4
/* B5B660 800E44C0 000A5F82 */ srl $t3, $t2, 0x1e
/* B5B664 800E44C4 030FC821 */ addu $t9, $t8, $t7
/* B5B668 800E44C8 032B6021 */ addu $t4, $t9, $t3
/* B5B66C 800E44CC AC4C0000 */ sw $t4, ($v0)
/* B5B670 800E44D0 8E6D176C */ lw $t5, 0x176c($s3)
/* B5B674 800E44D4 8E641768 */ lw $a0, 0x1768($s3)
/* B5B678 800E44D8 25AE0001 */ addiu $t6, $t5, 1
/* B5B67C 800E44DC AE6E176C */ sw $t6, 0x176c($s3)
.L800E44E0:
/* B5B680 800E44E0 26940001 */ addiu $s4, $s4, 1
/* B5B684 800E44E4 0284082A */ slt $at, $s4, $a0
/* B5B688 800E44E8 5420FF5D */ bnezl $at, .L800E4260
/* B5B68C 800E44EC 8E6E176C */ lw $t6, 0x176c($s3)
.L800E44F0:
/* B5B690 800E44F0 8E69176C */ lw $t1, 0x176c($s3)
/* B5B694 800E44F4 AE601768 */ sw $zero, 0x1768($s3)
/* B5B698 800E44F8 8FB8004C */ lw $t8, 0x4c($sp)
/* B5B69C 800E44FC 5120001A */ beql $t1, $zero, .L800E4568
/* B5B6A0 800E4500 8FBF0044 */ lw $ra, 0x44($sp)
/* B5B6A4 800E4504 17000017 */ bnez $t8, .L800E4564
/* B5B6A8 800E4508 00097880 */ sll $t7, $t1, 2
/* B5B6AC 800E450C 01E97821 */ addu $t7, $t7, $t1
/* B5B6B0 800E4510 000F7880 */ sll $t7, $t7, 2
/* B5B6B4 800E4514 026F1021 */ addu $v0, $s3, $t7
/* B5B6B8 800E4518 8C500D58 */ lw $s0, 0xd58($v0)
/* B5B6BC 800E451C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5B6C0 800E4520 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5B6C4 800E4524 8E030000 */ lw $v1, ($s0)
/* B5B6C8 800E4528 8C450D5C */ lw $a1, 0xd5c($v0)
/* B5B6CC 800E452C 3C0A8017 */ lui $t2, %hi(gAudioContext+0x1e78) # $t2, 0x8017
/* B5B6D0 800E4530 00613024 */ and $a2, $v1, $at
/* B5B6D4 800E4534 00064302 */ srl $t0, $a2, 0xc
/* B5B6D8 800E4538 8E040004 */ lw $a0, 4($s0)
/* B5B6DC 800E453C 25080001 */ addiu $t0, $t0, 1
/* B5B6E0 800E4540 254A0FF8 */ addiu $t2, %lo(gAudioContext+0x1e78) # addiu $t2, $t2, 0xff8
/* B5B6E4 800E4544 AFAA0014 */ sw $t2, 0x14($sp)
/* B5B6E8 800E4548 AFA80010 */ sw $t0, 0x10($sp)
/* B5B6EC 800E454C 8C590D60 */ lw $t9, 0xd60($v0)
/* B5B6F0 800E4550 00033900 */ sll $a3, $v1, 4
/* B5B6F4 800E4554 24420D54 */ addiu $v0, $v0, 0xd54
/* B5B6F8 800E4558 00073F82 */ srl $a3, $a3, 0x1e
/* B5B6FC 800E455C 0C038EB2 */ jal Audio_InitAsyncReq
/* B5B700 800E4560 AFB90018 */ sw $t9, 0x18($sp)
.L800E4564:
/* B5B704 800E4564 8FBF0044 */ lw $ra, 0x44($sp)
.L800E4568:
/* B5B708 800E4568 8FB00024 */ lw $s0, 0x24($sp)
/* B5B70C 800E456C 8FB10028 */ lw $s1, 0x28($sp)
/* B5B710 800E4570 8FB2002C */ lw $s2, 0x2c($sp)
/* B5B714 800E4574 8FB30030 */ lw $s3, 0x30($sp)
/* B5B718 800E4578 8FB40034 */ lw $s4, 0x34($sp)
/* B5B71C 800E457C 8FB50038 */ lw $s5, 0x38($sp)
/* B5B720 800E4580 8FB6003C */ lw $s6, 0x3c($sp)
/* B5B724 800E4584 8FB70040 */ lw $s7, 0x40($sp)
/* B5B728 800E4588 03E00008 */ jr $ra
/* B5B72C 800E458C 27BD0068 */ addiu $sp, $sp, 0x68

View file

@ -1,319 +0,0 @@
glabel func_800E4918
/* B5BAB8 800E4918 27BDFF88 */ addiu $sp, $sp, -0x78
/* B5BABC 800E491C AFB40034 */ sw $s4, 0x34($sp)
/* B5BAC0 800E4920 3C148017 */ lui $s4, %hi(gAudioContext) # $s4, 0x8017
/* B5BAC4 800E4924 2694F180 */ addiu $s4, %lo(gAudioContext) # addiu $s4, $s4, -0xe80
/* B5BAC8 800E4928 8E8E176C */ lw $t6, 0x176c($s4)
/* B5BACC 800E492C AFB50038 */ sw $s5, 0x38($sp)
/* B5BAD0 800E4930 AFB30030 */ sw $s3, 0x30($sp)
/* B5BAD4 800E4934 AFB10028 */ sw $s1, 0x28($sp)
/* B5BAD8 800E4938 00808825 */ move $s1, $a0
/* B5BADC 800E493C 00C09825 */ move $s3, $a2
/* B5BAE0 800E4940 00A0A825 */ move $s5, $a1
/* B5BAE4 800E4944 AFBF003C */ sw $ra, 0x3c($sp)
/* B5BAE8 800E4948 AFB2002C */ sw $s2, 0x2c($sp)
/* B5BAEC 800E494C AFB00024 */ sw $s0, 0x24($sp)
/* B5BAF0 800E4950 11C00003 */ beqz $t6, .L800E4960
/* B5BAF4 800E4954 AFA00044 */ sw $zero, 0x44($sp)
/* B5BAF8 800E4958 240F0001 */ li $t7, 1
/* B5BAFC 800E495C AFAF0044 */ sw $t7, 0x44($sp)
.L800E4960:
/* B5BB00 800E4960 8E982844 */ lw $t8, 0x2844($s4)
/* B5BB04 800E4964 0011C880 */ sll $t9, $s1, 2
/* B5BB08 800E4968 0331C821 */ addu $t9, $t9, $s1
/* B5BB0C 800E496C 0019C880 */ sll $t9, $t9, 2
/* B5BB10 800E4970 AE801768 */ sw $zero, 0x1768($s4)
/* B5BB14 800E4974 03191021 */ addu $v0, $t8, $t9
/* B5BB18 800E4978 904A0001 */ lbu $t2, 1($v0)
/* B5BB1C 800E497C 00009025 */ move $s2, $zero
/* B5BB20 800E4980 AFAA0074 */ sw $t2, 0x74($sp)
/* B5BB24 800E4984 90430000 */ lbu $v1, ($v0)
/* B5BB28 800E4988 944B0004 */ lhu $t3, 4($v0)
/* B5BB2C 800E498C 18600019 */ blez $v1, .L800E49F4
/* B5BB30 800E4990 AFAB006C */ sw $t3, 0x6c($sp)
/* B5BB34 800E4994 AFA30070 */ sw $v1, 0x70($sp)
/* B5BB38 800E4998 02202025 */ move $a0, $s1
.L800E499C:
/* B5BB3C 800E499C 0C039D26 */ jal Audio_GetInstrumentInner
/* B5BB40 800E49A0 02402825 */ move $a1, $s2
/* B5BB44 800E49A4 1040000E */ beqz $v0, .L800E49E0
/* B5BB48 800E49A8 00408025 */ move $s0, $v0
/* B5BB4C 800E49AC 904C0001 */ lbu $t4, 1($v0)
/* B5BB50 800E49B0 51800004 */ beql $t4, $zero, .L800E49C4
/* B5BB54 800E49B4 920D0002 */ lbu $t5, 2($s0)
/* B5BB58 800E49B8 0C039230 */ jal func_800E48C0
/* B5BB5C 800E49BC 24440008 */ addiu $a0, $v0, 8
/* B5BB60 800E49C0 920D0002 */ lbu $t5, 2($s0)
.L800E49C4:
/* B5BB64 800E49C4 2401007F */ li $at, 127
/* B5BB68 800E49C8 11A10003 */ beq $t5, $at, .L800E49D8
/* B5BB6C 800E49CC 00000000 */ nop
/* B5BB70 800E49D0 0C039230 */ jal func_800E48C0
/* B5BB74 800E49D4 26040018 */ addiu $a0, $s0, 0x18
.L800E49D8:
/* B5BB78 800E49D8 0C039230 */ jal func_800E48C0
/* B5BB7C 800E49DC 26040010 */ addiu $a0, $s0, 0x10
.L800E49E0:
/* B5BB80 800E49E0 8FAE0070 */ lw $t6, 0x70($sp)
/* B5BB84 800E49E4 26520001 */ addiu $s2, $s2, 1
/* B5BB88 800E49E8 564EFFEC */ bnel $s2, $t6, .L800E499C
/* B5BB8C 800E49EC 02202025 */ move $a0, $s1
/* B5BB90 800E49F0 00009025 */ move $s2, $zero
.L800E49F4:
/* B5BB94 800E49F4 8FAF0074 */ lw $t7, 0x74($sp)
/* B5BB98 800E49F8 19E0000C */ blez $t7, .L800E4A2C
/* B5BB9C 800E49FC 02202025 */ move $a0, $s1
.L800E4A00:
/* B5BBA0 800E4A00 0C039D5B */ jal Audio_GetDrum
/* B5BBA4 800E4A04 02402825 */ move $a1, $s2
/* B5BBA8 800E4A08 50400004 */ beql $v0, $zero, .L800E4A1C
/* B5BBAC 800E4A0C 8FB80074 */ lw $t8, 0x74($sp)
/* B5BBB0 800E4A10 0C039230 */ jal func_800E48C0
/* B5BBB4 800E4A14 24440004 */ addiu $a0, $v0, 4
/* B5BBB8 800E4A18 8FB80074 */ lw $t8, 0x74($sp)
.L800E4A1C:
/* B5BBBC 800E4A1C 26520001 */ addiu $s2, $s2, 1
/* B5BBC0 800E4A20 5658FFF7 */ bnel $s2, $t8, .L800E4A00
/* B5BBC4 800E4A24 02202025 */ move $a0, $s1
/* B5BBC8 800E4A28 00009025 */ move $s2, $zero
.L800E4A2C:
/* B5BBCC 800E4A2C 8FB9006C */ lw $t9, 0x6c($sp)
/* B5BBD0 800E4A30 1B20000B */ blez $t9, .L800E4A60
/* B5BBD4 800E4A34 02202025 */ move $a0, $s1
.L800E4A38:
/* B5BBD8 800E4A38 0C039D94 */ jal Audio_GetSfx
/* B5BBDC 800E4A3C 02402825 */ move $a1, $s2
/* B5BBE0 800E4A40 10400003 */ beqz $v0, .L800E4A50
/* B5BBE4 800E4A44 00402025 */ move $a0, $v0
/* B5BBE8 800E4A48 0C039230 */ jal func_800E48C0
/* B5BBEC 800E4A4C 00000000 */ nop
.L800E4A50:
/* B5BBF0 800E4A50 8FAA006C */ lw $t2, 0x6c($sp)
/* B5BBF4 800E4A54 26520001 */ addiu $s2, $s2, 1
/* B5BBF8 800E4A58 564AFFF7 */ bnel $s2, $t2, .L800E4A38
/* B5BBFC 800E4A5C 02202025 */ move $a0, $s1
.L800E4A60:
/* B5BC00 800E4A60 8E851768 */ lw $a1, 0x1768($s4)
/* B5BC04 800E4A64 00001825 */ move $v1, $zero
/* B5BC08 800E4A68 00009025 */ move $s2, $zero
/* B5BC0C 800E4A6C 50A000C1 */ beql $a1, $zero, .L800E4D74
/* B5BC10 800E4A70 8FBF003C */ lw $ra, 0x3c($sp)
/* B5BC14 800E4A74 18A00012 */ blez $a1, .L800E4AC0
/* B5BC18 800E4A78 8E88176C */ lw $t0, 0x176c($s4)
/* B5BC1C 800E4A7C 3C0B8017 */ lui $t3, %hi(gAudioContext)
/* B5BC20 800E4A80 2562F180 */ addiu $v0, $t3, %lo(gAudioContext)
/* B5BC24 800E4A84 00056080 */ sll $t4, $a1, 2
/* B5BC28 800E4A88 01823021 */ addu $a2, $t4, $v0
/* B5BC2C 800E4A8C 2404FFF0 */ li $a0, -16
.L800E4A90:
/* B5BC30 800E4A90 8C4D0B68 */ lw $t5, 0xb68($v0)
/* B5BC34 800E4A94 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BC38 800E4A98 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BC3C 800E4A9C 8DAE0000 */ lw $t6, ($t5)
/* B5BC40 800E4AA0 24420004 */ addiu $v0, $v0, 4
/* B5BC44 800E4AA4 01C17824 */ and $t7, $t6, $at
/* B5BC48 800E4AA8 25F8000F */ addiu $t8, $t7, 0xf
/* B5BC4C 800E4AAC 0046082B */ sltu $at, $v0, $a2
/* B5BC50 800E4AB0 0304C824 */ and $t9, $t8, $a0
/* B5BC54 800E4AB4 1420FFF6 */ bnez $at, .L800E4A90
/* B5BC58 800E4AB8 00791821 */ addu $v1, $v1, $t9
/* B5BC5C 800E4ABC 00009025 */ move $s2, $zero
.L800E4AC0:
/* B5BC60 800E4AC0 18A00090 */ blez $a1, .L800E4D04
/* B5BC64 800E4AC4 8FB10054 */ lw $s1, 0x54($sp)
/* B5BC68 800E4AC8 24010078 */ li $at, 120
.L800E4ACC:
/* B5BC6C 800E4ACC 1101008D */ beq $t0, $at, .L800E4D04
/* B5BC70 800E4AD0 00125080 */ sll $t2, $s2, 2
/* B5BC74 800E4AD4 028A6021 */ addu $t4, $s4, $t2
/* B5BC78 800E4AD8 8D900B68 */ lw $s0, 0xb68($t4)
/* B5BC7C 800E4ADC 8E030000 */ lw $v1, ($s0)
/* B5BC80 800E4AE0 00031100 */ sll $v0, $v1, 4
/* B5BC84 800E4AE4 00021782 */ srl $v0, $v0, 0x1e
/* B5BC88 800E4AE8 50400082 */ beql $v0, $zero, .L800E4CF4
/* B5BC8C 800E4AEC 26520001 */ addiu $s2, $s2, 1
/* B5BC90 800E4AF0 12A00005 */ beqz $s5, .L800E4B08
/* B5BC94 800E4AF4 24010001 */ li $at, 1
/* B5BC98 800E4AF8 52A10020 */ beql $s5, $at, .L800E4B7C
/* B5BC9C 800E4AFC 8E780010 */ lw $t8, 0x10($s3)
/* B5BCA0 800E4B00 10000036 */ b .L800E4BDC
/* B5BCA4 800E4B04 00000000 */ nop
.L800E4B08:
/* B5BCA8 800E4B08 8E6B0010 */ lw $t3, 0x10($s3)
/* B5BCAC 800E4B0C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BCB0 800E4B10 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BCB4 800E4B14 1562000A */ bne $t3, $v0, .L800E4B40
/* B5BCB8 800E4B18 00612024 */ and $a0, $v1, $at
/* B5BCBC 800E4B1C 8E650000 */ lw $a1, ($s3)
/* B5BCC0 800E4B20 8E060004 */ lw $a2, 4($s0)
/* B5BCC4 800E4B24 00023E00 */ sll $a3, $v0, 0x18
/* B5BCC8 800E4B28 240D0001 */ li $t5, 1
/* B5BCCC 800E4B2C AFAD0010 */ sw $t5, 0x10($sp)
/* B5BCD0 800E4B30 0C038171 */ jal func_800E05C4
/* B5BCD4 800E4B34 00073E03 */ sra $a3, $a3, 0x18
/* B5BCD8 800E4B38 10000028 */ b .L800E4BDC
/* B5BCDC 800E4B3C 00408825 */ move $s1, $v0
.L800E4B40:
/* B5BCE0 800E4B40 8E6E0014 */ lw $t6, 0x14($s3)
/* B5BCE4 800E4B44 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BCE8 800E4B48 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BCEC 800E4B4C 15C20023 */ bne $t6, $v0, .L800E4BDC
/* B5BCF0 800E4B50 00612024 */ and $a0, $v1, $at
/* B5BCF4 800E4B54 8E650004 */ lw $a1, 4($s3)
/* B5BCF8 800E4B58 8E060004 */ lw $a2, 4($s0)
/* B5BCFC 800E4B5C 00023E00 */ sll $a3, $v0, 0x18
/* B5BD00 800E4B60 240F0001 */ li $t7, 1
/* B5BD04 800E4B64 AFAF0010 */ sw $t7, 0x10($sp)
/* B5BD08 800E4B68 0C038171 */ jal func_800E05C4
/* B5BD0C 800E4B6C 00073E03 */ sra $a3, $a3, 0x18
/* B5BD10 800E4B70 1000001A */ b .L800E4BDC
/* B5BD14 800E4B74 00408825 */ move $s1, $v0
/* B5BD18 800E4B78 8E780010 */ lw $t8, 0x10($s3)
.L800E4B7C:
/* B5BD1C 800E4B7C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BD20 800E4B80 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BD24 800E4B84 17020009 */ bne $t8, $v0, .L800E4BAC
/* B5BD28 800E4B88 00612024 */ and $a0, $v1, $at
/* B5BD2C 800E4B8C 8E650000 */ lw $a1, ($s3)
/* B5BD30 800E4B90 8E060004 */ lw $a2, 4($s0)
/* B5BD34 800E4B94 00023E00 */ sll $a3, $v0, 0x18
/* B5BD38 800E4B98 00073E03 */ sra $a3, $a3, 0x18
/* B5BD3C 800E4B9C 0C038171 */ jal func_800E05C4
/* B5BD40 800E4BA0 AFA00010 */ sw $zero, 0x10($sp)
/* B5BD44 800E4BA4 1000000D */ b .L800E4BDC
/* B5BD48 800E4BA8 00408825 */ move $s1, $v0
.L800E4BAC:
/* B5BD4C 800E4BAC 8E790014 */ lw $t9, 0x14($s3)
/* B5BD50 800E4BB0 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BD54 800E4BB4 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BD58 800E4BB8 17220008 */ bne $t9, $v0, .L800E4BDC
/* B5BD5C 800E4BBC 00612024 */ and $a0, $v1, $at
/* B5BD60 800E4BC0 8E650004 */ lw $a1, 4($s3)
/* B5BD64 800E4BC4 8E060004 */ lw $a2, 4($s0)
/* B5BD68 800E4BC8 00023E00 */ sll $a3, $v0, 0x18
/* B5BD6C 800E4BCC 00073E03 */ sra $a3, $a3, 0x18
/* B5BD70 800E4BD0 0C038171 */ jal func_800E05C4
/* B5BD74 800E4BD4 AFA00010 */ sw $zero, 0x10($sp)
/* B5BD78 800E4BD8 00408825 */ move $s1, $v0
.L800E4BDC:
/* B5BD7C 800E4BDC 16200004 */ bnez $s1, .L800E4BF0
/* B5BD80 800E4BE0 00000000 */ nop
/* B5BD84 800E4BE4 8E88176C */ lw $t0, 0x176c($s4)
/* B5BD88 800E4BE8 10000041 */ b .L800E4CF0
/* B5BD8C 800E4BEC 8E851768 */ lw $a1, 0x1768($s4)
.L800E4BF0:
/* B5BD90 800E4BF0 12A00005 */ beqz $s5, .L800E4C08
/* B5BD94 800E4BF4 24010001 */ li $at, 1
/* B5BD98 800E4BF8 12A10023 */ beq $s5, $at, .L800E4C88
/* B5BD9C 800E4BFC 8E88176C */ lw $t0, 0x176c($s4)
/* B5BDA0 800E4C00 1000003B */ b .L800E4CF0
/* B5BDA4 800E4C04 8E851768 */ lw $a1, 0x1768($s4)
.L800E4C08:
/* B5BDA8 800E4C08 8E030000 */ lw $v1, ($s0)
/* B5BDAC 800E4C0C 24010001 */ li $at, 1
/* B5BDB0 800E4C10 02202825 */ move $a1, $s1
/* B5BDB4 800E4C14 00031100 */ sll $v0, $v1, 4
/* B5BDB8 800E4C18 00021782 */ srl $v0, $v0, 0x1e
/* B5BDBC 800E4C1C 1441000E */ bne $v0, $at, .L800E4C58
/* B5BDC0 800E4C20 00403825 */ move $a3, $v0
/* B5BDC4 800E4C24 8E8A2838 */ lw $t2, 0x2838($s4)
/* B5BDC8 800E4C28 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BDCC 800E4C2C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BDD0 800E4C30 00613024 */ and $a2, $v1, $at
/* B5BDD4 800E4C34 8E040004 */ lw $a0, 4($s0)
/* B5BDD8 800E4C38 02202825 */ move $a1, $s1
/* B5BDDC 800E4C3C 0C038AF3 */ jal func_800E2BCC
/* B5BDE0 800E4C40 85470002 */ lh $a3, 2($t2)
/* B5BDE4 800E4C44 920C0000 */ lbu $t4, ($s0)
/* B5BDE8 800E4C48 AE110004 */ sw $s1, 4($s0)
/* B5BDEC 800E4C4C 318BFFF3 */ andi $t3, $t4, 0xfff3
/* B5BDF0 800E4C50 1000000A */ b .L800E4C7C
/* B5BDF4 800E4C54 A20B0000 */ sb $t3, ($s0)
.L800E4C58:
/* B5BDF8 800E4C58 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BDFC 800E4C5C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BE00 800E4C60 00613024 */ and $a2, $v1, $at
/* B5BE04 800E4C64 0C038AAA */ jal Audio_DMAFastCopy
/* B5BE08 800E4C68 8E040004 */ lw $a0, 4($s0)
/* B5BE0C 800E4C6C 920D0000 */ lbu $t5, ($s0)
/* B5BE10 800E4C70 AE110004 */ sw $s1, 4($s0)
/* B5BE14 800E4C74 31AEFFF3 */ andi $t6, $t5, 0xfff3
/* B5BE18 800E4C78 A20E0000 */ sb $t6, ($s0)
.L800E4C7C:
/* B5BE1C 800E4C7C 8E88176C */ lw $t0, 0x176c($s4)
/* B5BE20 800E4C80 1000001B */ b .L800E4CF0
/* B5BE24 800E4C84 8E851768 */ lw $a1, 0x1768($s4)
.L800E4C88:
/* B5BE28 800E4C88 00087880 */ sll $t7, $t0, 2
/* B5BE2C 800E4C8C 01E87821 */ addu $t7, $t7, $t0
/* B5BE30 800E4C90 000F7880 */ sll $t7, $t7, 2
/* B5BE34 800E4C94 028F1021 */ addu $v0, $s4, $t7
/* B5BE38 800E4C98 AC500D6C */ sw $s0, 0xd6c($v0)
/* B5BE3C 800E4C9C AC510D70 */ sw $s1, 0xd70($v0)
/* B5BE40 800E4CA0 8E98176C */ lw $t8, 0x176c($s4)
/* B5BE44 800E4CA4 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BE48 800E4CA8 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BE4C 800E4CAC 0018CE00 */ sll $t9, $t8, 0x18
/* B5BE50 800E4CB0 03215025 */ or $t2, $t9, $at
/* B5BE54 800E4CB4 AC4A0D74 */ sw $t2, 0xd74($v0)
/* B5BE58 800E4CB8 AC400D78 */ sw $zero, 0xd78($v0)
/* B5BE5C 800E4CBC 8E030000 */ lw $v1, ($s0)
/* B5BE60 800E4CC0 8E0C0004 */ lw $t4, 4($s0)
/* B5BE64 800E4CC4 24420D68 */ addiu $v0, $v0, 0xd68
/* B5BE68 800E4CC8 00615824 */ and $t3, $v1, $at
/* B5BE6C 800E4CCC 00037100 */ sll $t6, $v1, 4
/* B5BE70 800E4CD0 000E7F82 */ srl $t7, $t6, 0x1e
/* B5BE74 800E4CD4 018B6821 */ addu $t5, $t4, $t3
/* B5BE78 800E4CD8 01AFC021 */ addu $t8, $t5, $t7
/* B5BE7C 800E4CDC AC580000 */ sw $t8, ($v0)
/* B5BE80 800E4CE0 8E99176C */ lw $t9, 0x176c($s4)
/* B5BE84 800E4CE4 8E851768 */ lw $a1, 0x1768($s4)
/* B5BE88 800E4CE8 27280001 */ addiu $t0, $t9, 1
/* B5BE8C 800E4CEC AE88176C */ sw $t0, 0x176c($s4)
.L800E4CF0:
/* B5BE90 800E4CF0 26520001 */ addiu $s2, $s2, 1
.L800E4CF4:
/* B5BE94 800E4CF4 0245082A */ slt $at, $s2, $a1
/* B5BE98 800E4CF8 5420FF74 */ bnezl $at, .L800E4ACC
/* B5BE9C 800E4CFC 24010078 */ li $at, 120
/* B5BEA0 800E4D00 AFB10054 */ sw $s1, 0x54($sp)
.L800E4D04:
/* B5BEA4 800E4D04 1100001A */ beqz $t0, .L800E4D70
/* B5BEA8 800E4D08 AE801768 */ sw $zero, 0x1768($s4)
/* B5BEAC 800E4D0C 8FAC0044 */ lw $t4, 0x44($sp)
/* B5BEB0 800E4D10 00085880 */ sll $t3, $t0, 2
/* B5BEB4 800E4D14 01685821 */ addu $t3, $t3, $t0
/* B5BEB8 800E4D18 15800015 */ bnez $t4, .L800E4D70
/* B5BEBC 800E4D1C 000B5880 */ sll $t3, $t3, 2
/* B5BEC0 800E4D20 028B1021 */ addu $v0, $s4, $t3
/* B5BEC4 800E4D24 8C500D58 */ lw $s0, 0xd58($v0)
/* B5BEC8 800E4D28 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B5BECC 800E4D2C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B5BED0 800E4D30 8E030000 */ lw $v1, ($s0)
/* B5BED4 800E4D34 8C450D5C */ lw $a1, 0xd5c($v0)
/* B5BED8 800E4D38 3C0E8017 */ lui $t6, %hi(gAudioContext+0x1e78) # $t6, 0x8017
/* B5BEDC 800E4D3C 00613024 */ and $a2, $v1, $at
/* B5BEE0 800E4D40 00064B02 */ srl $t1, $a2, 0xc
/* B5BEE4 800E4D44 8E040004 */ lw $a0, 4($s0)
/* B5BEE8 800E4D48 25290001 */ addiu $t1, $t1, 1
/* B5BEEC 800E4D4C 25CE0FF8 */ addiu $t6, %lo(gAudioContext+0x1e78) # addiu $t6, $t6, 0xff8
/* B5BEF0 800E4D50 AFAE0014 */ sw $t6, 0x14($sp)
/* B5BEF4 800E4D54 AFA90010 */ sw $t1, 0x10($sp)
/* B5BEF8 800E4D58 8C4D0D60 */ lw $t5, 0xd60($v0)
/* B5BEFC 800E4D5C 00033900 */ sll $a3, $v1, 4
/* B5BF00 800E4D60 24420D54 */ addiu $v0, $v0, 0xd54
/* B5BF04 800E4D64 00073F82 */ srl $a3, $a3, 0x1e
/* B5BF08 800E4D68 0C038EB2 */ jal Audio_InitAsyncReq
/* B5BF0C 800E4D6C AFAD0018 */ sw $t5, 0x18($sp)
.L800E4D70:
/* B5BF10 800E4D70 8FBF003C */ lw $ra, 0x3c($sp)
.L800E4D74:
/* B5BF14 800E4D74 8FB00024 */ lw $s0, 0x24($sp)
/* B5BF18 800E4D78 8FB10028 */ lw $s1, 0x28($sp)
/* B5BF1C 800E4D7C 8FB2002C */ lw $s2, 0x2c($sp)
/* B5BF20 800E4D80 8FB30030 */ lw $s3, 0x30($sp)
/* B5BF24 800E4D84 8FB40034 */ lw $s4, 0x34($sp)
/* B5BF28 800E4D88 8FB50038 */ lw $s5, 0x38($sp)
/* B5BF2C 800E4D8C 03E00008 */ jr $ra
/* B5BF30 800E4D90 27BD0078 */ addiu $sp, $sp, 0x78

View file

@ -1936,7 +1936,7 @@ void func_800E0E90(s32 id);
void func_800E0EB4(s32 arg0, s32 id);
void func_800E1148(void);
void func_800E11F0(void);
void* Audio_DmaSampleData(u32 arg0, s32 arg1, s32 arg2, u8* arg3, s32 arg4);
void* Audio_DmaSampleData(u32 devAddr, u32 size, s32 arg2, u8* dmaIndexRef, s32 medium);
void func_800E1618(s32 arg0);
s32 Audio_IsBankLoadComplete(s32 bankId);
s32 Audio_IsSeqLoadComplete(s32 seqId);
@ -1955,11 +1955,11 @@ void Audio_ProcessLoads(s32 resetStatus);
void func_800E301C(void* callback);
void Audio_ContextInit(void* heap, u32 heapSize);
void Audio_SyncLoadsInit(void);
s32 Audio_SyncLoadSample(s32 arg0, s32 arg1, u8* arg2);
s32 Audio_SyncLoadSeq(s32 seqIdx, u8* ramAddr, u8* arg2);
s32 Audio_SyncLoadSample(s32 arg0, s32 arg1, s8* arg2);
s32 Audio_SyncLoadSeq(s32 seqIdx, u8* ramAddr, s8* arg2);
void Audio_AsyncLoadReqInit(void);
void func_800E4D94(void);
void func_800E4EEC(s32 tableType, s32 arg1, u8* arg2);
void func_800E4EEC(s32 tableType, s32 arg1, s8* arg2);
void func_800E4F58(void);
void func_800E4FB0(void);
AudioTask* func_800E4FE0(void);

View file

@ -3069,9 +3069,6 @@ extern FaultThreadStruct gFaultStruct;
//extern ? D_8016B6B5;
//extern ? D_8016B6B8;
extern OSMesgQueue D_8016B6E0;
//extern OSMesg D_8016B6F8;
extern u8* D_8016B738[];
//extern u32 D_8016B780;
//extern ? D_8016B7A8;
//extern ? D_8016B7AC;
//extern ? D_8016B7B0;

View file

@ -731,25 +731,25 @@ typedef struct {
/* 0x1C */ u32 retMsg;
/* 0x20 */ OSMesgQueue* retQueue;
/* 0x24 */ OSMesgQueue msgQueue;
/* 0x3C */ OSMesg msg[1];
/* 0x3C */ OSMesg msg;
/* 0x40 */ OSIoMesg ioMesg;
} AsyncLoadReq; // size = 0x58
typedef struct {
/* 0x0000 */ u8 unk_00;
/* 0x0001 */ u8 unk_01;
/* 0x0002 */ u16 unk_02;
/* 0x0004 */ s32 unk_04;
/* 0x0008 */ s32 devAddr;
/* 0x000C */ u8* ramAddr;
/* 0x0010 */ u8* unk_10;
/* 0x0014 */ s32 status;
/* 0x0018 */ s32 size;
/* 0x001C */ s8* isDone;
/* 0x0020 */ AudioBankSample sample;
/* 0x0030 */ OSMesgQueue msgqueue;
/* 0x0048 */ OSMesg msg[1];
/* 0x004C */ OSIoMesg ioMesg;
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ u16 unk_02;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 devAddr;
/* 0x0C */ u8* ramAddr;
/* 0x10 */ u8* unk_10;
/* 0x14 */ s32 status;
/* 0x18 */ s32 size;
/* 0x1C */ s8* isDone;
/* 0x20 */ AudioBankSample sample;
/* 0x30 */ OSMesgQueue msgqueue;
/* 0x48 */ OSMesg msg;
/* 0x4C */ OSIoMesg ioMesg;
} AudioSyncLoad; // size = 0x64
typedef struct {
@ -758,79 +758,78 @@ typedef struct {
} unk_283C;
typedef struct {
/* 0x0000 */ s16 entryCnt;
/* 0x0002 */ s16 unk_02;
/* 0x0004 */ u32 romAddr;
/* 0x0008 */ char pad[0x8];
/* 0x00 */ s16 entryCnt;
/* 0x02 */ s16 unk_02;
/* 0x04 */ u32 romAddr;
/* 0x08 */ char pad[0x8];
} AudioTableHeader; // size = 0x10
typedef struct {
/* 0x0000 */ u32 romAddr;
/* 0x0004 */ u32 size;
/* 0x0008 */ s8 unk_08;
/* 0x0009 */ s8 type;
/* 0x000A */ char pad[6];
/* 0x00 */ u32 romAddr;
/* 0x04 */ u32 size;
/* 0x08 */ s8 unk_08;
/* 0x09 */ s8 type;
/* 0x0A */ char pad[6];
} SequenceTableEntry; // size = 0x10
typedef struct {
/* 0x0000 */ u32 romAddr;
/* 0x0004 */ u32 size;
/* 0x0008 */ u8 unk_08;
/* 0x0009 */ u8 unk_09;
/* 0x000A */ s16 unk_0A;
/* 0x000C */ s16 unk_0C;
/* 0x000E */ s16 unk_0E;
/* 0x00 */ u32 romAddr;
/* 0x04 */ u32 size;
/* 0x08 */ u8 unk_08;
/* 0x09 */ u8 unk_09;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ s16 unk_0C;
/* 0x0E */ s16 unk_0E;
} AudioBankTableEntry; // size = 0x10
typedef struct {
/* 0x0000 */ u32 romAddr;
/* 0x0004 */ u32 size;
/* 0x0008 */ s8 unk_08;
/* 0x0009 */ s8 unk_09;
/* 0x000A */ char pad[6];
/* 0x00 */ u32 romAddr;
/* 0x04 */ u32 size;
/* 0x08 */ s8 unk_08;
/* 0x09 */ s8 unk_09;
/* 0x0A */ char pad[6];
} AudioTableEntry; // size = 0x10
typedef struct {
/* 0x0000 */ AudioTableHeader header;
/* 0x0010 */ SequenceTableEntry entries[1];
/* 0x00 */ AudioTableHeader header;
/* 0x10 */ SequenceTableEntry entries[1];
} SequenceTable; // size >= 0x20
typedef struct {
/* 0x0000 */ AudioTableHeader header;
/* 0x0010 */ AudioBankTableEntry entries[1];
/* 0x00 */ AudioTableHeader header;
/* 0x10 */ AudioBankTableEntry entries[1];
} AudioBankTable; // size >= 0x20
typedef struct {
/* 0x0000 */ AudioTableHeader header;
/* 0x0010 */ AudioTableEntry entries[1];
/* 0x00 */ AudioTableHeader header;
/* 0x10 */ AudioTableEntry entries[1];
} AudioTable; // size >= 0x20
typedef struct {
/* 0x0000 */ OSTask task;
/* 0x0040 */ OSMesgQueue* taskQueue;
/* 0x0044 */ void* unk_44; // probably a message that gets unused.
/* 0x0048 */ char unk_48[0x8];
/* 0x00 */ OSTask task;
/* 0x40 */ OSMesgQueue* taskQueue;
/* 0x44 */ void* unk_44; // probably a message that gets unused.
/* 0x48 */ char unk_48[0x8];
} AudioTask; // size = 0x50
typedef struct {
/* 0x0000 */ u8* ramAddr;
/* 0x0004 */ u32 devAddr;
/* 0x0008 */ u16 unk_08;
/* 0x000A */ u16 size;
/* 0x000C */ u8 unk_0C;
/* 0x000D */ u8 unk_0D;
/* 0x000E */ u8 unk_0E;
/* 0x000F */ u8 unk_0F;
/* 0x00 */ u8* ramAddr;
/* 0x04 */ u32 devAddr;
/* 0x08 */ u16 sizeUnused;
/* 0x0A */ u16 size;
/* 0x0C */ u8 unused;
/* 0x0D */ u8 reuseIndex; // position in sSampleDmaReuseQueue1/2, if ttl == 0
/* 0x0E */ u8 ttl; // duration after which the DMA can be discarded
} SampleDmaReq; // size = 0x10
typedef struct {
s32 unk_00;
s32 unk_04;
s32 unk_08;
s32 unk_0C;
s32 unk_10;
s32 unk_14;
} RelocInfo;
/* 0x00 */ s32 index1;
/* 0x04 */ s32 index2;
/* 0x08 */ s32 baseAddr1;
/* 0x0C */ s32 baseAddr2;
/* 0x10 */ u32 medium1;
/* 0x14 */ u32 medium2;
} RelocInfo; // size = 0x18
typedef enum {
/* 0 */ SEQUENCE_TABLE,
@ -838,12 +837,6 @@ typedef enum {
/* 2 */ AUDIO_TABLE
} AudioTableType;
typedef struct {
Drum** drums;
AudioBankSound* sfx;
Instrument* instruments[1];
} unk_ldr;
typedef struct {
/* 0x0000 */ char unk_0000;
/* 0x0001 */ s8 numSynthesisReverbs;
@ -854,7 +847,7 @@ typedef struct {
/* 0x0014 */ NoteSubEu* noteSubsEu;
/* 0x0018 */ SynthesisReverb synthesisReverbs[4];
/* 0x0B38 */ char unk_0B38[0x30];
/* 0x0B68 */ AudioBankSample* unk_B68[128];
/* 0x0B68 */ AudioBankSample* unk_0B68[128];
/* 0x0D68 */ AudioStruct0D68 unk_0D68[128];
/* 0x1768 */ s32 unk_1768;
/* 0x176C */ s32 unk_176C;
@ -871,29 +864,28 @@ typedef struct {
/* 0x1E38 */ OSMesg unk_1E38[0x10];
/* 0x1E78 */ OSMesgQueue unk_1E78;
/* 0x1E90 */ OSMesg unk_1E90[0x10];
/* 0x1ED0 */ OSMesgQueue unk_1ED0;
/* 0x1EE8 */ OSMesg unk_1EE8[0x40];
/* 0x1FE8 */ OSIoMesg sampIoReq[1]; // unknown size
/* 0x2000 */ char unk_2000[0x5E8];
/* 0x1ED0 */ OSMesgQueue currAudioFrameDmaQueue;
/* 0x1EE8 */ OSMesg currAudioFrameDmaMesgBufs[0x40];
/* 0x1FE8 */ OSIoMesg currAudioFrameDmaIoMesgBufs[0x40];
/* 0x25E8 */ OSMesgQueue unk_25E8;
/* 0x2600 */ OSMesg unk_2600;
/* 0x2604 */ OSIoMesg unk_2604;
/* 0x261C */ SampleDmaReq* sampleDmaReqs;
/* 0x2620 */ u32 sampleDmaReqCnt;
/* 0x2624 */ u32 unk_2624; // sample start idx?
/* 0x2624 */ u32 sampleDmaListSize1;
/* 0x2628 */ s32 unk_2628;
/* 0x262C */ u8 unk_262C[0x100];
/* 0x272C */ u8 unk_272C[0x100];
/* 0x282C */ u8 unk_282C;
/* 0x282D */ u8 unk_282D;
/* 0x282E */ u8 unk_282E;
/* 0x282F */ u8 unk_282F;
/* 0x262C */ u8 sampleDmaReuseQueue1[0x100]; // read pos <= write pos, wrapping mod 256
/* 0x272C */ u8 sampleDmaReuseQueue2[0x100];
/* 0x282C */ u8 sampleDmaReuseQueue1RdPos;
/* 0x282D */ u8 sampleDmaReuseQueue2RdPos;
/* 0x282E */ u8 sampleDmaReuseQueue1WrPos;
/* 0x282F */ u8 sampleDmaReuseQueue2WrPos;
/* 0x2830 */ SequenceTable* sequenceTable;
/* 0x2834 */ AudioBankTable* audioBankTable;
/* 0x2838 */ AudioTable* audioTable;
union {
/* 0x283C */ u16* unk_283C;
/* 0x283C */ char* unk_283Cb;
/* 0x283C */ u8* unk_283Cb;
};
/* 0x2840 */ u16 seqTabEntCnt; // channels used?
/* 0x2844 */ CtlEntry* ctlEntries;
@ -908,7 +900,7 @@ typedef struct {
/* 0x2898 */ s16 tempoInternalToExternal;
/* 0x289A */ s8 soundMode;
/* 0x289C */ s32 totalTaskCnt;
/* 0x28A0 */ s32 sampleIoReqIdx;
/* 0x28A0 */ s32 curAudioFrameDmaCount;
/* 0x28A4 */ s32 rspTaskIdx;
/* 0x28A8 */ s32 curAIBufIdx;
/* 0x28AC */ Acmd* abiCmdBufs[2];
@ -990,52 +982,52 @@ typedef struct {
} NoteSubAttributes; // size = 0x18
typedef struct {
/* 0x0000 */ u32 heap;
/* 0x0004 */ u32 mainPool;
/* 0x0008 */ u32 initPool;
/* 0x00 */ u32 heap;
/* 0x04 */ u32 mainPool;
/* 0x08 */ u32 initPool;
} AudioContextInitSizes; // size = 0xC
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ u16 unk_0C;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ u16 unk_1C;
/* 0x00 */ f32 unk_00;
/* 0x04 */ f32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ u16 unk_0C;
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x1C */ u16 unk_1C;
} unk_50_s; // size = 0x20
typedef struct {
/* 0x0000 */ f32 volCur;
/* 0x0004 */ f32 volTarget;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ u16 unk_0C;
/* 0x000E */ u8 volScales[0x4];
/* 0x0012 */ u8 volFadeTimer;
/* 0x0013 */ u8 fadeVolUpdate;
/* 0x0014 */ u32 unk_14;
/* 0x0018 */ u16 unk_18;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ f32 unk_20;
/* 0x0024 */ f32 unk_24;
/* 0x0028 */ u16 unk_28;
/* 0x002A */ char unk_2A[0x2];
/* 0x002C */ u32 unk_2C[8];
/* 0x004C */ u8 unk_4C;
/* 0x004D */ u8 unk_4D;
/* 0x004E */ u8 unk_4E;
/* 0x004F */ char unk_4F;
/* 0x0050 */ unk_50_s unk_50[0x10];
/* 0x0250 */ u16 unk_250;
/* 0x0252 */ u16 unk_252;
/* 0x0254 */ u16 unk_254;
/* 0x0256 */ u16 unk_256;
/* 0x0258 */ u16 unk_258;
/* 0x025A */ char unk_25A[0x2];
/* 0x025C */ u32 unk_25C;
/* 0x0260 */ u8 unk_260;
/* 0x0261 */ char unk_261[0x3];
/* 0x000 */ f32 volCur;
/* 0x004 */ f32 volTarget;
/* 0x008 */ f32 unk_08;
/* 0x00C */ u16 unk_0C;
/* 0x00E */ u8 volScales[0x4];
/* 0x012 */ u8 volFadeTimer;
/* 0x013 */ u8 fadeVolUpdate;
/* 0x014 */ u32 unk_14;
/* 0x018 */ u16 unk_18;
/* 0x01C */ f32 unk_1C;
/* 0x020 */ f32 unk_20;
/* 0x024 */ f32 unk_24;
/* 0x028 */ u16 unk_28;
/* 0x02A */ char unk_2A[0x2];
/* 0x02C */ u32 unk_2C[8];
/* 0x04C */ u8 unk_4C;
/* 0x04D */ u8 unk_4D;
/* 0x04E */ u8 unk_4E;
/* 0x04F */ char unk_4F;
/* 0x050 */ unk_50_s unk_50[0x10];
/* 0x250 */ u16 unk_250;
/* 0x252 */ u16 unk_252;
/* 0x254 */ u16 unk_254;
/* 0x256 */ u16 unk_256;
/* 0x258 */ u16 unk_258;
/* 0x25A */ char unk_25A[0x2];
/* 0x25C */ u32 unk_25C;
/* 0x260 */ u8 unk_260;
/* 0x261 */ char unk_261[0x3];
} unk_D_8016E750; // size = 0x264
typedef enum {

View file

@ -3,25 +3,26 @@
typedef enum { LOAD_STATUS_WAITING, LOAD_STATUS_START, LOAD_STATUS_LOADING, LOAD_STATUS_DONE } SyncLoadStatus;
#define RELOC(v, base) (reloc = (void*)((u32)v + (u32)base))
// opaque type for unpatched audio bank data (should maybe get rid of this?)
typedef void AudioBankData;
/* forward declarations */
s32 func_800E217C(s32 playerIndex, s32, s32);
unk_ldr* func_800E2454(u32 bankId);
AudioBankData* func_800E2454(u32 bankId);
AudioBankSample* Audio_GetBankSample(s32 bankId, s32 sfxId);
void Audio_ProcessAsyncLoads(s32 arg0);
void Audio_HandleAsyncMsg(AsyncLoadReq* arg0, s32 arg1);
void Audio_UpdateAsyncReq(AsyncLoadReq* arg0, s32 arg1);
void func_800E4198(s32, unk_ldr*, RelocInfo*, s32);
void func_800E4198(s32, AudioBankData*, RelocInfo*, s32);
void Audio_SampleReloc(AudioBankSound* sound, u32, RelocInfo*);
void func_800E202C(s32 arg0);
u32 func_800E2338(u32 arg0, u32* arg1, s32 arg2);
u8* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate);
void* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate);
u32 Audio_GetTableIndex(s32 tableType, u32 tableIdx);
void* func_800E27A4(s32 tableType, s32 id);
void* Audio_GetLoadTable(s32 tableType);
void Audio_DMAFastCopy(u32 devAddr, u8* addr, u32 size, s32 handleType);
void func_800E2BCC(u32 devAddr, u8* addr, u32 size, s32 handleType);
void Audio_NoopCopy(u32 devAddr, u8* addr, u32 size, s32 handleType);
s32 Audio_DMA(OSIoMesg* mesg, u32 priority, s32 direction, u32 devAddr, void* ramAddr, u32 size, OSMesgQueue* reqQueue,
s32 handleType, const char* dmaFuncType);
void* Audio_AsyncLoadInner(s32 tableType, s32 arg1, s32 arg2, s32 arg3, OSMesgQueue* retQueue);
@ -38,33 +39,36 @@ void Audio_ProcessSyncLoads(s32 resetStatus);
void func_800E38F8(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
OSMesgQueue D_8016B6E0;
u8 D_8016B6F8[0x40];
u8* D_8016B738[0x12];
u32 D_8016B780[8];
OSMesg D_8016B6F8[0x10];
s8* D_8016B738[0x12];
s32 D_8016B780;
s32 sAudioLoadPad[4];
void func_800E11F0(void) {
s32 i;
u32 i;
for (i = 0; i < gAudioContext.unk_2624; i++) {
for (i = 0; i < gAudioContext.sampleDmaListSize1; i++) {
SampleDmaReq* req = &gAudioContext.sampleDmaReqs[i];
if (req->unk_0E != 0) {
req->unk_0E--;
if ((req->unk_0E) == 0) {
req->unk_0D = gAudioContext.unk_282E;
gAudioContext.unk_262C[gAudioContext.unk_282E] = i;
gAudioContext.unk_282E++;
if (req->ttl != 0) {
req->ttl--;
if (req->ttl == 0) {
req->reuseIndex = gAudioContext.sampleDmaReuseQueue1WrPos;
gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1WrPos] = i;
gAudioContext.sampleDmaReuseQueue1WrPos++;
}
}
}
for (i = gAudioContext.unk_2624; i < gAudioContext.sampleDmaReqCnt; i++) {
for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaReqCnt; i++) {
SampleDmaReq* req = &gAudioContext.sampleDmaReqs[i];
if (req->unk_0E != 0) {
req->unk_0E--;
if (req->unk_0E == 0) {
req->unk_0D = gAudioContext.unk_282F;
gAudioContext.unk_272C[gAudioContext.unk_282F] = i;
gAudioContext.unk_282F++;
if (req->ttl != 0) {
req->ttl--;
if (req->ttl == 0) {
req->reuseIndex = gAudioContext.sampleDmaReuseQueue2WrPos;
gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2WrPos] = i;
gAudioContext.sampleDmaReuseQueue2WrPos++;
}
}
}
@ -72,7 +76,102 @@ void func_800E11F0(void) {
gAudioContext.unk_2628 = 0;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/Audio_DmaSampleData.s")
void* Audio_DmaSampleData(u32 devAddr, u32 size, s32 arg2, u8* dmaIndexRef, s32 medium) {
s32 sp60;
SampleDmaReq* dma;
s32 hasDma = false;
u32 dmaDevAddr;
u32 pad;
u32 dmaIndex;
u32 transfer;
s32 bufferPos;
u32 i;
if (arg2 != 0 || *dmaIndexRef >= gAudioContext.sampleDmaListSize1) {
for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaReqCnt; i++) {
dma = &gAudioContext.sampleDmaReqs[i];
bufferPos = devAddr - dma->devAddr;
if (0 <= bufferPos && (u32)bufferPos <= dma->size - size) {
// We already have a DMA request for this memory range.
if (dma->ttl == 0 &&
gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.sampleDmaReuseQueue2WrPos) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
if (dma->reuseIndex != gAudioContext.sampleDmaReuseQueue2RdPos) {
gAudioContext.sampleDmaReuseQueue2[dma->reuseIndex] =
gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
gAudioContext
.sampleDmaReqs[gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos]]
.reuseIndex = dma->reuseIndex;
}
gAudioContext.sampleDmaReuseQueue2RdPos++;
}
dma->ttl = 32;
*dmaIndexRef = (u8)i;
return &dma->ramAddr[devAddr - dma->devAddr];
}
}
if (arg2 == 0) {
goto search_short_lived;
}
if (gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.sampleDmaReuseQueue2WrPos && arg2 != 0) {
// Allocate a DMA from reuse queue 2, unless full.
dmaIndex = gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
gAudioContext.sampleDmaReuseQueue2RdPos++;
dma = gAudioContext.sampleDmaReqs + dmaIndex;
hasDma = true;
}
} else {
search_short_lived:
dma = gAudioContext.sampleDmaReqs + *dmaIndexRef;
i = 0;
again:
bufferPos = devAddr - dma->devAddr;
if (0 <= bufferPos && (u32)bufferPos <= dma->size - size) {
// We already have DMA for this memory range.
if (dma->ttl == 0) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
if (dma->reuseIndex != gAudioContext.sampleDmaReuseQueue1RdPos) {
gAudioContext.sampleDmaReuseQueue1[dma->reuseIndex] =
gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos];
gAudioContext
.sampleDmaReqs[gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos]]
.reuseIndex = dma->reuseIndex;
}
gAudioContext.sampleDmaReuseQueue1RdPos++;
}
dma->ttl = 2;
return dma->ramAddr + (devAddr - dma->devAddr);
}
dma = gAudioContext.sampleDmaReqs + i++;
if (i <= gAudioContext.sampleDmaListSize1) {
goto again;
}
}
if (!hasDma) {
if (gAudioContext.sampleDmaReuseQueue1RdPos == gAudioContext.sampleDmaReuseQueue1WrPos) {
return NULL;
}
// Allocate a DMA from reuse queue 1.
dmaIndex = gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos++];
dma = gAudioContext.sampleDmaReqs + dmaIndex;
hasDma = true;
}
transfer = dma->size;
dmaDevAddr = devAddr & ~0xF;
dma->ttl = 3;
dma->devAddr = dmaDevAddr;
dma->sizeUnused = transfer;
Audio_DMA(&gAudioContext.currAudioFrameDmaIoMesgBufs[gAudioContext.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
OS_READ, dmaDevAddr, dma->ramAddr, transfer, &gAudioContext.currAudioFrameDmaQueue, medium, "SUPERDMA");
*dmaIndexRef = dmaIndex;
return (devAddr - dmaDevAddr) + dma->ramAddr;
}
void func_800E1618(s32 arg0) {
SampleDmaReq* temp_s0;
@ -94,25 +193,25 @@ void func_800E1618(s32 arg0) {
func_800DE238(temp_s0->ramAddr, gAudioContext.unk_288C);
temp_s0->size = gAudioContext.unk_288C;
temp_s0->devAddr = 0;
temp_s0->unk_08 = 0;
temp_s0->unk_0C = 0;
temp_s0->unk_0E = 0;
temp_s0->sizeUnused = 0;
temp_s0->unused = 0;
temp_s0->ttl = 0;
gAudioContext.sampleDmaReqCnt++;
}
}
for (i = 0; i < gAudioContext.sampleDmaReqCnt; i++) {
gAudioContext.unk_262C[i] = i;
gAudioContext.sampleDmaReqs[i].unk_0D = i;
for (i = 0; (u32)i < gAudioContext.sampleDmaReqCnt; i++) {
gAudioContext.sampleDmaReuseQueue1[i] = i;
gAudioContext.sampleDmaReqs[i].reuseIndex = i;
}
for (i = gAudioContext.sampleDmaReqCnt; i < 0x100; i++) {
gAudioContext.unk_262C[i] = 0;
gAudioContext.sampleDmaReuseQueue1[i] = 0;
}
gAudioContext.unk_282C = 0;
gAudioContext.unk_282E = gAudioContext.sampleDmaReqCnt;
gAudioContext.unk_2624 = gAudioContext.sampleDmaReqCnt;
gAudioContext.sampleDmaReuseQueue1RdPos = 0;
gAudioContext.sampleDmaReuseQueue1WrPos = gAudioContext.sampleDmaReqCnt;
gAudioContext.sampleDmaListSize1 = gAudioContext.sampleDmaReqCnt;
gAudioContext.unk_288C = gAudioContext.unk_2878;
for (j = 0; j < gAudioContext.maxSimultaneousNotes; j++) {
@ -124,24 +223,24 @@ void func_800E1618(s32 arg0) {
func_800DE238(temp_s0->ramAddr, gAudioContext.unk_288C);
temp_s0->size = gAudioContext.unk_288C;
temp_s0->devAddr = 0U;
temp_s0->unk_08 = 0;
temp_s0->unk_0C = 0;
temp_s0->unk_0E = 0;
temp_s0->sizeUnused = 0;
temp_s0->unused = 0;
temp_s0->ttl = 0;
gAudioContext.sampleDmaReqCnt++;
}
}
for (i = gAudioContext.unk_2624; i < gAudioContext.sampleDmaReqCnt; i++) {
gAudioContext.unk_272C[i - gAudioContext.unk_2624] = i;
gAudioContext.sampleDmaReqs[i].unk_0D = i - gAudioContext.unk_2624;
for (i = gAudioContext.sampleDmaListSize1; (u32)i < gAudioContext.sampleDmaReqCnt; i++) {
gAudioContext.sampleDmaReuseQueue2[i - gAudioContext.sampleDmaListSize1] = i;
gAudioContext.sampleDmaReqs[i].reuseIndex = i - gAudioContext.sampleDmaListSize1;
}
for (i = gAudioContext.sampleDmaReqCnt; i < 0x100; i++) {
gAudioContext.unk_272C[i] = gAudioContext.unk_2624;
gAudioContext.sampleDmaReuseQueue2[i] = gAudioContext.sampleDmaListSize1;
}
gAudioContext.unk_282D = 0;
gAudioContext.unk_282F = gAudioContext.sampleDmaReqCnt - gAudioContext.unk_2624;
gAudioContext.sampleDmaReuseQueue2RdPos = 0;
gAudioContext.sampleDmaReuseQueue2WrPos = gAudioContext.sampleDmaReqCnt - gAudioContext.sampleDmaListSize1;
}
s32 Audio_IsBankLoadComplete(s32 bankId) {
@ -223,10 +322,10 @@ void Audio_InitAudioTable(AudioTable* table, u32 romAddr, u16 arg2) {
}
}
unk_ldr* func_800E1B68(s32 arg0, u32* arg1) {
AudioBankData* func_800E1B68(s32 arg0, u32* arg1) {
char pad[0x8];
s32 phi_s0;
unk_ldr* sp28;
AudioBankData* sp28;
s32 phi_s1;
s32 phi_s2;
s32 i;
@ -275,7 +374,7 @@ s32 func_800E1C78(AudioBankSample* sample, s32 arg1) {
}
if (sample->medium == 1) {
func_800E2BCC(sample->sampleAddr, sampleAddr, sample->size, gAudioContext.audioTable->header.unk_02);
Audio_NoopCopy(sample->sampleAddr, sampleAddr, sample->size, gAudioContext.audioTable->header.unk_02);
} else {
Audio_DMAFastCopy(sample->sampleAddr, sampleAddr, sample->size, sample->medium);
}
@ -361,7 +460,7 @@ void func_800E1F7C(s32 arg0) {
}
void func_800E202C(s32 arg0) {
s32 i;
u32 i;
SoundMultiPool* pool = &gAudioContext.bankLoadedPool;
PersistentPool* persistent;
@ -482,8 +581,8 @@ u32 func_800E2338(u32 arg0, u32* arg1, s32 arg2) {
}
}
unk_ldr* func_800E2454(u32 bankId) {
u8* temp_ret;
AudioBankData* func_800E2454(u32 bankId) {
AudioBankData* temp_ret;
s32 unk02;
s32 unk03;
s32 sp38;
@ -496,22 +595,22 @@ unk_ldr* func_800E2454(u32 bankId) {
unk02 = gAudioContext.ctlEntries[idx].unk_02;
unk03 = gAudioContext.ctlEntries[idx].unk_03;
relocInfo.unk_00 = unk02;
relocInfo.unk_04 = unk03;
if (relocInfo.unk_00 != 0xFF) {
relocInfo.unk_08 = func_800E2338(relocInfo.unk_00, &relocInfo.unk_10, 0);
relocInfo.index1 = unk02;
relocInfo.index2 = unk03;
if (relocInfo.index1 != 0xFF) {
relocInfo.baseAddr1 = func_800E2338(relocInfo.index1, &relocInfo.medium1, 0);
} else {
relocInfo.unk_08 = 0;
relocInfo.baseAddr1 = 0;
}
if (unk03 != 0xFF) {
relocInfo.unk_0C = func_800E2338(unk03, &relocInfo.unk_14, 0);
relocInfo.baseAddr2 = func_800E2338(unk03, &relocInfo.medium2, 0);
} else {
relocInfo.unk_0C = 0;
relocInfo.baseAddr2 = 0;
}
temp_ret = func_800E2558(BANK_TABLE, bankId, &sp38);
if (temp_ret == 0) {
if (temp_ret == NULL) {
return NULL;
}
if (sp38 == 1) {
@ -521,7 +620,7 @@ unk_ldr* func_800E2454(u32 bankId) {
return temp_ret;
}
u8* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate) {
void* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate) {
u32 size;
AudioTable* table;
s32 pad;
@ -529,7 +628,7 @@ u8* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate) {
s32 status;
u32 romAddr;
s32 sp24;
u8* ret;
void* ret;
u32 id;
id = Audio_GetTableIndex(tableType, tableIdx);
@ -574,7 +673,7 @@ u8* func_800E2558(u32 tableType, u32 tableIdx, s32* didAllocate) {
*didAllocate = true;
if (sp40 == 1) {
func_800E2BCC(romAddr, ret, size, (s16)table->header.unk_02);
Audio_NoopCopy(romAddr, ret, size, (s16)table->header.unk_02);
} else {
Audio_DMAFastCopy(romAddr, ret, size, sp40);
}
@ -647,95 +746,82 @@ void* Audio_GetLoadTable(s32 tableType) {
#define BASE_OFFSET(x, off) (void*)((u32)(x) + (u32)(off))
#ifdef NON_MATCHING
void func_800E283C(s32 arg0, unk_ldr* arg1, RelocInfo* arg2) {
s32 temp_v1_3;
void* reloc;
void func_800E283C(s32 bankId, AudioBankData* mem, RelocInfo* relocInfo) {
u32 reloc;
u32 reloc2;
Instrument* inst;
Drum* drum;
AudioBankSound* sfx;
Instrument* inst;
Instrument** end;
Instrument** instIt;
Drum** drums;
s32 temp_a3;
s32 sp50;
s32 temp_s5;
s32 i;
s32 numDrums = gAudioContext.ctlEntries[bankId].numDrums;
s32 numInstruments = gAudioContext.ctlEntries[bankId].numInstruments;
s32 numSfx = gAudioContext.ctlEntries[bankId].numSfx;
void** ptrs = (void**)mem;
temp_a3 = gAudioContext.ctlEntries[arg0].numDrums;
sp50 = gAudioContext.ctlEntries[arg0].numInstruments;
temp_s5 = gAudioContext.ctlEntries[arg0].numSfx;
drums = arg1->drums;
if ((drums != NULL) && (temp_a3 != 0)) {
if (1) {
arg1->drums = RELOC(drums, arg1);
}
for (i = 0; i < temp_a3; i++) {
reloc = arg1->drums[i];
if (reloc != NULL) {
arg1->drums[i] = drum = RELOC(reloc, arg1);
reloc2 = ptrs[0];
if (1) {}
if ((reloc2 != 0) && (numDrums != 0)) {
ptrs[0] = BASE_OFFSET(reloc2, mem);
for (i = 0; i < numDrums; i++) {
reloc = ((Drum**)ptrs[0])[i];
if (reloc != 0) {
reloc = BASE_OFFSET(reloc, mem);
((Drum**)ptrs[0])[i] = drum = reloc;
if (!drum->loaded) {
Audio_SampleReloc(&drum->sound, arg1, arg2);
Audio_SampleReloc(&drum->sound, mem, relocInfo);
reloc = drum->envelope;
drum->envelope = BASE_OFFSET(reloc, arg1);
drum->envelope = BASE_OFFSET(reloc, mem);
drum->loaded = 1;
}
}
}
}
if ((arg1->sfx != NULL) && (temp_s5 != 0)) {
if (1) {
arg1->sfx = RELOC(arg1->sfx, arg1);
}
for (i = 0; i < temp_s5; i++) {
sfx = &arg1->sfx[i];
if ((sfx != NULL) && (sfx->sample != NULL)) {
Audio_SampleReloc(sfx, arg1, arg2);
}
}
}
if (sp50 >= 0x7F) {
sp50 = 0x7E;
}
temp_v1_3 = sp50 + 1;
if (temp_v1_3 > 1) {
instIt = arg1->instruments;
end = instIt + temp_v1_3 - 2;
do {
if (*instIt != NULL) {
inst = *instIt;
*instIt = RELOC(inst, arg1);
if (0) {}
inst = *instIt;
if (!inst->loaded) {
if (inst->normalRangeLo != 0) {
Audio_SampleReloc(&inst->lowNotesSound, arg1, arg2);
}
Audio_SampleReloc(&inst->normalNotesSound, arg1, arg2);
if (inst->normalRangeHi != 0x7F) {
Audio_SampleReloc(&inst->highNotesSound, arg1, arg2);
}
inst->loaded = 1;
inst->envelope = RELOC(inst->envelope, arg1);
reloc2 = ptrs[1];
if (1) {}
if ((reloc2 != 0) && (numSfx != 0)) {
ptrs[1] = BASE_OFFSET(reloc2, mem);
for (i = 0; i < numSfx; i++) {
reloc = (AudioBankSound*)ptrs[1] + i;
if (reloc != 0) {
sfx = reloc;
if (sfx->sample != NULL) {
Audio_SampleReloc(sfx, mem, relocInfo);
}
}
instIt++;
} while (instIt <= end);
}
}
gAudioContext.ctlEntries[arg0].drums = arg1->drums;
gAudioContext.ctlEntries[arg0].soundEffects = arg1->sfx;
gAudioContext.ctlEntries[arg0].instruments = arg1->instruments;
if (numInstruments > 0x7E) {
numInstruments = 0x7E;
}
for (i = 2; i <= 2 + numInstruments - 1; i++) {
if (ptrs[i] != NULL) {
ptrs[i] = BASE_OFFSET(ptrs[i], mem);
inst = ptrs[i];
if (!inst->loaded) {
if (inst->normalRangeLo != 0) {
Audio_SampleReloc(&inst->lowNotesSound, mem, relocInfo);
}
Audio_SampleReloc(&inst->normalNotesSound, mem, relocInfo);
if (inst->normalRangeHi != 0x7F) {
Audio_SampleReloc(&inst->highNotesSound, mem, relocInfo);
}
reloc = inst->envelope;
inst->envelope = BASE_OFFSET(reloc, mem);
inst->loaded = 1;
}
}
}
gAudioContext.ctlEntries[bankId].drums = ptrs[0];
gAudioContext.ctlEntries[bankId].soundEffects = ptrs[1];
gAudioContext.ctlEntries[bankId].instruments = (Instrument**)(ptrs + 2);
}
#else
void func_800E283C(s32 arg0, unk_ldr* arg1, RelocInfo* arg2);
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E283C.s")
#endif
#undef BASE_OFFSET
void Audio_DMAFastCopy(u32 devAddr, u8* addr, u32 size, s32 handleType) {
OSMesgQueue* msgQueue = &gAudioContext.unk_25E8;
@ -761,7 +847,7 @@ void Audio_DMAFastCopy(u32 devAddr, u8* addr, u32 size, s32 handleType) {
}
}
void func_800E2BCC(u32 devAddr, u8* addr, u32 size, s32 handleType) {
void Audio_NoopCopy(u32 devAddr, u8* addr, u32 size, s32 handleType) {
}
s32 (*sDmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction) = osEPiStartDma;
@ -949,7 +1035,7 @@ void Audio_ContextInit(void* heap, u32 heapSize) {
{
s32 i;
u8* ctxP = &gAudioContext;
u8* ctxP = (u8*)&gAudioContext;
for (i = sizeof(gAudioContext); i >= 0; i--) {
*ctxP++ = 0;
}
@ -984,10 +1070,10 @@ void Audio_ContextInit(void* heap, u32 heapSize) {
gAudioContext.rspTask[0].task.t.data_size = 0;
gAudioContext.rspTask[1].task.t.data_size = 0;
osCreateMesgQueue(&gAudioContext.unk_25E8, &gAudioContext.unk_2600, 1);
osCreateMesgQueue(&gAudioContext.unk_1ED0, gAudioContext.unk_1EE8, 0x40);
osCreateMesgQueue(&gAudioContext.currAudioFrameDmaQueue, gAudioContext.currAudioFrameDmaMesgBufs, 0x40);
osCreateMesgQueue(&gAudioContext.unk_1E20, gAudioContext.unk_1E38, 0x10);
osCreateMesgQueue(&gAudioContext.unk_1E78, gAudioContext.unk_1E90, 0x10);
gAudioContext.sampleIoReqIdx = 0;
gAudioContext.curAudioFrameDmaCount = 0;
gAudioContext.sampleDmaReqCnt = 0;
gAudioContext.cartHandle = osCartRomInit();
@ -1045,7 +1131,7 @@ void Audio_SyncLoadsInit(void) {
gAudioContext.syncLoads[1].status = 0;
}
s32 Audio_SyncLoadSample(s32 arg0, s32 arg1, u8* isDone) {
s32 Audio_SyncLoadSample(s32 arg0, s32 arg1, s8* isDone) {
AudioBankSample* sample;
AudioSyncLoad* syncLoad;
@ -1193,7 +1279,7 @@ void func_800E3874(AudioSyncLoad* arg0, s32 size) {
void func_800E38F8(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
}
s32 Audio_SyncLoadSeq(s32 seqIdx, u8* ramAddr, u8* isDone) {
s32 Audio_SyncLoadSeq(s32 seqIdx, u8* ramAddr, s8* isDone) {
AudioSyncLoad* syncLoad;
SequenceTable* seqTable;
u32 size;
@ -1291,7 +1377,7 @@ AsyncLoadReq* Audio_InitAsyncReq(u32 devAddr, void* ramAddr, u32 size, s32 arg3,
loadReq->unk_01 = 3;
loadReq->unk_02 = arg3;
loadReq->retMsg = retMsg;
osCreateMesgQueue(&loadReq->msgQueue, loadReq->msg, ARRAY_COUNT(loadReq->msg));
osCreateMesgQueue(&loadReq->msgQueue, &loadReq->msg, 1);
return loadReq;
}
@ -1306,8 +1392,8 @@ void Audio_ProcessAsyncLoads(s32 resetStatus) {
if (gAudioContext.curAsyncReq == NULL) {
if (resetStatus != 0) {
do {
} while (osRecvMesg(&gAudioContext.asyncLoadQueue, &loadReq, OS_MESG_NOBLOCK) != -1);
} else if (osRecvMesg(&gAudioContext.asyncLoadQueue, &loadReq, OS_MESG_NOBLOCK) == -1) {
} while (osRecvMesg(&gAudioContext.asyncLoadQueue, (OSMesg*)&loadReq, OS_MESG_NOBLOCK) != -1);
} else if (osRecvMesg(&gAudioContext.asyncLoadQueue, (OSMesg*)&loadReq, OS_MESG_NOBLOCK) == -1) {
gAudioContext.curAsyncReq = NULL;
} else {
gAudioContext.curAsyncReq = loadReq;
@ -1352,10 +1438,10 @@ void Audio_AsyncReqDone(AsyncLoadReq* loadReq) {
b2 = ASYNC_B2(retMsg);
t1 = gAudioContext.ctlEntries[b2].unk_02;
t2 = gAudioContext.ctlEntries[b2].unk_03;
sp30.unk_00 = t1;
sp30.unk_04 = t2;
sp30.unk_08 = t1 != 0xFF ? func_800E2318(t1, &sp30.unk_10) : 0;
sp30.unk_0C = t2 != 0xFF ? func_800E2318(t2, &sp30.unk_14) : 0;
sp30.index1 = t1;
sp30.index2 = t2;
sp30.baseAddr1 = t1 != 0xFF ? func_800E2318(t1, &sp30.medium1) : 0;
sp30.baseAddr2 = t2 != 0xFF ? func_800E2318(t2, &sp30.medium2) : 0;
Audio_SetBankLoadStatus(b2, ASYNC_B3(retMsg));
func_800E4198(b2, loadReq->unk_04, &sp30, 1);
break;
@ -1421,6 +1507,8 @@ void func_800E3FB4(AsyncLoadReq* req, u32 size) {
void func_800E4044(u32 devAddr, void* ramAddr, u32 size, s16 arg3) {
}
#define RELOC(v, base) (reloc = (void*)((u32)(v) + (u32)(base)))
void Audio_SampleReloc(AudioBankSound* sound, u32 arg1, RelocInfo* arg2) {
AudioBankSample* sample;
void* reloc;
@ -1432,12 +1520,12 @@ void Audio_SampleReloc(AudioBankSound* sound, u32 arg1, RelocInfo* arg2) {
sample->book = RELOC(sample->book, arg1);
switch (sample->medium) {
case 0:
sample->sampleAddr = RELOC(sample->sampleAddr, arg2->unk_08);
sample->medium = arg2->unk_10;
sample->sampleAddr = RELOC(sample->sampleAddr, arg2->baseAddr1);
sample->medium = arg2->medium1;
break;
case 1:
sample->sampleAddr = RELOC(sample->sampleAddr, arg2->unk_0C);
sample->medium = arg2->unk_14;
sample->sampleAddr = RELOC(sample->sampleAddr, arg2->baseAddr2);
sample->medium = arg2->medium2;
break;
case 2:
case 3:
@ -1446,13 +1534,107 @@ void Audio_SampleReloc(AudioBankSound* sound, u32 arg1, RelocInfo* arg2) {
sample->unk_bits25 = 1;
if (sample->unk_bits26 && (sample->medium != 0)) {
gAudioContext.unk_B68[gAudioContext.unk_1768++] = sample;
gAudioContext.unk_0B68[gAudioContext.unk_1768++] = sample;
}
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E4198.s")
#undef RELOC
void func_800E4198(s32 bankId, AudioBankData* mem, RelocInfo* relocInfo, s32 arg3) {
AudioStruct0D68* item;
AudioStruct0D68* item2;
AudioBankSample* sample;
s32 count;
s32 nChunks;
u8* addr;
s32 sp4C;
s32 i;
sp4C = false;
if (gAudioContext.unk_176C != 0) {
sp4C = true;
} else {
D_8016B780 = 0;
}
gAudioContext.unk_1768 = 0;
func_800E283C(bankId, mem, relocInfo);
count = 0;
for (i = 0; i < gAudioContext.unk_1768; i++) {
count += ALIGN16(gAudioContext.unk_0B68[i]->size);
}
if (count && count) {}
for (i = 0; i < gAudioContext.unk_1768; i++) {
if (gAudioContext.unk_176C == 120) {
break;
}
sample = gAudioContext.unk_0B68[i];
addr = NULL;
switch (arg3) {
case 0:
if (sample->medium == relocInfo->medium1) {
addr = func_800E05C4(sample->size, relocInfo->index1, sample->sampleAddr, sample->medium, 1);
} else if (sample->medium == relocInfo->medium2) {
addr = func_800E05C4(sample->size, relocInfo->index2, sample->sampleAddr, sample->medium, 1);
} else if (sample->medium == 3) {
addr = func_800E05C4(sample->size, 0xFE, sample->sampleAddr, sample->medium, 1);
}
break;
case 1:
if (sample->medium == relocInfo->medium1) {
addr = func_800E05C4(sample->size, relocInfo->index1, sample->sampleAddr, sample->medium, 0);
} else if (sample->medium == relocInfo->medium2) {
addr = func_800E05C4(sample->size, relocInfo->index2, sample->sampleAddr, sample->medium, 0);
} else if (sample->medium == 3) {
addr = func_800E05C4(sample->size, 0xFE, sample->sampleAddr, sample->medium, 0);
}
break;
}
if (addr == NULL) {
continue;
}
switch (arg3) {
case 0:
if (sample->medium == 1) {
Audio_NoopCopy((u32)sample->sampleAddr, addr, sample->size,
gAudioContext.audioTable->header.unk_02);
sample->sampleAddr = addr;
sample->medium = 0;
} else {
Audio_DMAFastCopy((u32)sample->sampleAddr, addr, sample->size, sample->medium);
sample->sampleAddr = addr;
sample->medium = 0;
}
if (sample->medium == 3) {}
break;
case 1:
item = &gAudioContext.unk_0D68[gAudioContext.unk_176C];
item->sample = sample;
item->ramAddr = addr;
item->encodedInfo = (gAudioContext.unk_176C << 24) | 0xFFFFFF;
item->isFree = false;
item->endAndMediumKey = (u32)sample->sampleAddr + sample->size + sample->medium;
gAudioContext.unk_176C++;
break;
}
}
gAudioContext.unk_1768 = 0;
if (gAudioContext.unk_176C != 0 && !sp4C) {
item2 = &gAudioContext.unk_0D68[gAudioContext.unk_176C - 1];
sample = item2->sample;
nChunks = (sample->size >> 12) + 1;
Audio_InitAsyncReq((u32)sample->sampleAddr, item2->ramAddr, sample->size, sample->medium, nChunks,
&gAudioContext.unk_1E78, item2->encodedInfo);
}
}
s32 func_800E4590(s32 resetStatus) {
AudioBankSample* sample;
@ -1564,13 +1746,139 @@ void func_800E48C0(AudioBankSound* sound) {
AudioBankSample* sample = sound->sample;
if ((sample->size != 0) && (sample->unk_bits26) && (sample->medium)) {
gAudioContext.unk_B68[gAudioContext.unk_1768++] = sample;
gAudioContext.unk_0B68[gAudioContext.unk_1768++] = sample;
}
}
// large
void func_800E4918(s32, s32, RelocInfo*);
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E4918.s")
void func_800E4918(s32 bankId, s32 arg1, RelocInfo* relocInfo) {
s32 numDrums;
s32 numInstruments;
s32 numSfx;
Drum* drum;
Instrument* instrument;
AudioBankSound* sound;
AudioStruct0D68* item;
AudioStruct0D68* item2;
u8* addr;
s32 count;
s32 i;
AudioBankSample* sample;
s32 sp44;
s32 nChunks;
sp44 = false;
if (gAudioContext.unk_176C != 0) {
sp44 = true;
}
gAudioContext.unk_1768 = 0;
numDrums = gAudioContext.ctlEntries[bankId].numDrums;
numInstruments = gAudioContext.ctlEntries[bankId].numInstruments;
numSfx = gAudioContext.ctlEntries[bankId].numSfx;
for (i = 0; i < numInstruments; i++) {
instrument = Audio_GetInstrumentInner(bankId, i);
if (instrument != NULL) {
if (instrument->normalRangeLo != 0) {
func_800E48C0(&instrument->lowNotesSound);
}
if (instrument->normalRangeHi != 0x7F) {
func_800E48C0(&instrument->highNotesSound);
}
func_800E48C0(&instrument->normalNotesSound);
}
}
for (i = 0; i < numDrums; i++) {
drum = Audio_GetDrum(bankId, i);
if (drum != NULL) {
func_800E48C0(&drum->sound);
}
}
for (i = 0; i < numSfx; i++) {
sound = Audio_GetSfx(bankId, i);
if (sound != NULL) {
func_800E48C0(sound);
}
}
if (gAudioContext.unk_1768 == 0) {
return;
}
count = 0;
for (i = 0; i < gAudioContext.unk_1768; i++) {
count += ALIGN16(gAudioContext.unk_0B68[i]->size);
}
if (count) {}
for (i = 0; i < gAudioContext.unk_1768; i++) {
if (gAudioContext.unk_176C == 120) {
break;
}
sample = gAudioContext.unk_0B68[i];
if (sample->medium == 0) {
continue;
}
switch (arg1) {
case 0:
if (sample->medium == relocInfo->medium1) {
addr = func_800E05C4(sample->size, relocInfo->index1, sample->sampleAddr, sample->medium, 1);
} else if (sample->medium == relocInfo->medium2) {
addr = func_800E05C4(sample->size, relocInfo->index2, sample->sampleAddr, sample->medium, 1);
}
break;
case 1:
if (sample->medium == relocInfo->medium1) {
addr = func_800E05C4(sample->size, relocInfo->index1, sample->sampleAddr, sample->medium, 0);
} else if (sample->medium == relocInfo->medium2) {
addr = func_800E05C4(sample->size, relocInfo->index2, sample->sampleAddr, sample->medium, 0);
}
break;
}
if (addr == NULL) {
continue;
}
switch (arg1) {
case 0:
if (sample->medium == 1) {
Audio_NoopCopy((u32)sample->sampleAddr, addr, sample->size,
gAudioContext.audioTable->header.unk_02);
sample->sampleAddr = addr;
sample->medium = 0;
} else {
Audio_DMAFastCopy((u32)sample->sampleAddr, addr, sample->size, sample->medium);
sample->sampleAddr = addr;
sample->medium = 0;
}
break;
case 1:
item = &gAudioContext.unk_0D68[gAudioContext.unk_176C];
item->sample = sample;
item->ramAddr = addr;
item->encodedInfo = (gAudioContext.unk_176C << 24) | 0xFFFFFF;
item->isFree = false;
item->endAndMediumKey = (u32)sample->sampleAddr + sample->size + sample->medium;
gAudioContext.unk_176C++;
break;
}
}
gAudioContext.unk_1768 = 0;
if (gAudioContext.unk_176C != 0 && !sp44) {
item2 = &gAudioContext.unk_0D68[gAudioContext.unk_176C - 1];
sample = item2->sample;
nChunks = (sample->size >> 12) + 1;
Audio_InitAsyncReq((u32)sample->sampleAddr, item2->ramAddr, sample->size, sample->medium, nChunks,
&gAudioContext.unk_1E78, item2->encodedInfo);
}
}
void func_800E4D94(void) {
s32 pad;
@ -1584,17 +1892,17 @@ void func_800E4D94(void) {
RelocInfo sp4C;
if (gAudioContext.unk_2D60[i].poolIndex == 1) {
temp_s2 = Audio_GetTableIndex(BANK_TABLE, gAudioContext.unk_2D60[i].id);
sp4C.unk_00 = gAudioContext.ctlEntries[temp_s2].unk_02;
sp4C.unk_04 = gAudioContext.ctlEntries[temp_s2].unk_03;
sp4C.index1 = gAudioContext.ctlEntries[temp_s2].unk_02;
sp4C.index2 = gAudioContext.ctlEntries[temp_s2].unk_03;
if (sp4C.unk_00 != 0xFF) {
sp4C.unk_00 = Audio_GetTableIndex(AUDIO_TABLE, sp4C.unk_00);
sp4C.unk_10 = audioTable->entries[sp4C.unk_00].unk_08;
if (sp4C.index1 != 0xFF) {
sp4C.index1 = Audio_GetTableIndex(AUDIO_TABLE, sp4C.index1);
sp4C.medium1 = audioTable->entries[sp4C.index1].unk_08;
}
if (sp4C.unk_04 != 0xFF) {
sp4C.unk_04 = Audio_GetTableIndex(AUDIO_TABLE, sp4C.unk_04);
sp4C.unk_14 = audioTable->entries[sp4C.unk_04].unk_08;
if (sp4C.index2 != 0xFF) {
sp4C.index2 = Audio_GetTableIndex(AUDIO_TABLE, sp4C.index2);
sp4C.medium2 = audioTable->entries[sp4C.index2].unk_08;
}
func_800E4918(temp_s2, 0, &sp4C);
}
@ -1610,7 +1918,7 @@ void func_800E4EDC(void) {
void func_800E4EE4(void) {
}
void func_800E4EEC(s32 tableType, s32 arg1, u8* arg2) {
void func_800E4EEC(s32 tableType, s32 arg1, s8* arg2) {
static u32 D_801304DC = 0;
D_8016B738[D_801304DC] = arg2;
Audio_AsyncLoad(tableType, arg1, 0, D_801304DC, &D_8016B6E0);
@ -1623,10 +1931,10 @@ void func_800E4EEC(s32 tableType, s32 arg1, u8* arg2) {
void func_800E4F58(void) {
u32 pad;
u32 sp20;
u8* temp_v0;
s8* temp_v0;
if (osRecvMesg(&D_8016B6E0, &sp20, OS_MESG_NOBLOCK) != -1) {
pad = sp20 >> 0x18;
if (osRecvMesg(&D_8016B6E0, (OSMesg*)&sp20, OS_MESG_NOBLOCK) != -1) {
pad = sp20 >> 24;
temp_v0 = D_8016B738[pad];
if (temp_v0 != NULL) {
*temp_v0 = 0;
@ -1635,5 +1943,5 @@ void func_800E4F58(void) {
}
void func_800E4FB0(void) {
osCreateMesgQueue(&D_8016B6E0, &D_8016B6F8, 0x10);
osCreateMesgQueue(&D_8016B6E0, D_8016B6F8, 0x10);
}

View file

@ -86,27 +86,27 @@ AudioTask* func_800E5000(void) {
D_801755D0();
}
sp5C = gAudioContext.sampleIoReqIdx;
for (i = 0; i < gAudioContext.sampleIoReqIdx; i++) {
if (osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK) == 0) {
sp5C = gAudioContext.curAudioFrameDmaCount;
for (i = 0; i < gAudioContext.curAudioFrameDmaCount; i++) {
if (osRecvMesg(&gAudioContext.currAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0) {
sp5C--;
}
}
if (sp5C != 0) {
for (i = 0; i < sp5C; i++) {
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_BLOCK);
osRecvMesg(&gAudioContext.currAudioFrameDmaQueue, NULL, OS_MESG_BLOCK);
}
}
sp48 = gAudioContext.unk_1ED0.validCount;
sp48 = gAudioContext.currAudioFrameDmaQueue.validCount;
if (sp48 != 0) {
for (i = 0; i < sp48; i++) {
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK);
osRecvMesg(&gAudioContext.currAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK);
}
}
gAudioContext.sampleIoReqIdx = 0;
gAudioContext.curAudioFrameDmaCount = 0;
func_800E11F0();
Audio_ProcessLoads(gAudioContext.resetStatus);
func_800E4F58();