.include "macros.inc"

.section .sdata2
.balign 8
.global lbl_805AF398
lbl_805AF398:
	# ROM: 0x3FBC38
	.float 1.0

.global lbl_805AF39C
lbl_805AF39C:
	# ROM: 0x3FBC3C
	.4byte 0x46FFFE00

.global lbl_805AF3A0
lbl_805AF3A0:
	# ROM: 0x3FBC40
	.4byte 0x45800000
	.4byte 0

.global lbl_805AF3A8
lbl_805AF3A8:
	# ROM: 0x3FBC48
	.4byte 0x43300000
	.4byte 0


.section .sbss
.balign 8
.global salTimeOffset
salTimeOffset:
	.skip 0x4
.global salHooks
salHooks:
	.skip 0x8
.global salMaxStudioNum
salMaxStudioNum:
	.skip 0x1
.global salNumVoices
salNumVoices:
	.skip 0x1
.global salAuxFrame
salAuxFrame:
	.skip 0x1
.global salFrame
salFrame:
	.skip 0x1

.section .sdata, "wa"
.balign 8
.global lbl_805A8BD8
lbl_805A8BD8:
	.2byte 0
	.2byte 1
	.2byte 2
	.balign 4

.global lbl_805A8BE0
lbl_805A8BE0:
	.2byte 0
	.2byte 1
	.2byte 2
	.balign 4

.section .rodata
.balign 8
.global itdOffTab
itdOffTab:
	# ROM: 0x3D5BD0
	.4byte 0
	.4byte 0
	.4byte 0
	.4byte 0
	.4byte 0
	.4byte 0x00000001
	.4byte 0x00010001
	.4byte 0x00010001
	.4byte 0x00010001
	.4byte 0x00020002
	.4byte 0x00020002
	.4byte 0x00020003
	.4byte 0x00030003
	.4byte 0x00030003
	.4byte 0x00040004
	.4byte 0x00040004
	.4byte 0x00050005
	.4byte 0x00050006
	.4byte 0x00060006
	.4byte 0x00070007
	.4byte 0x00070008
	.4byte 0x00080008
	.4byte 0x00090009
	.4byte 0x0009000A
	.4byte 0x000A000A
	.4byte 0x000B000B
	.4byte 0x000C000C
	.4byte 0x000C000D
	.4byte 0x000D000D
	.4byte 0x000E000E
	.4byte 0x000F000F
	.4byte 0x000F0010
	.4byte 0x00100011
	.4byte 0x00110011
	.4byte 0x00120012
	.4byte 0x00130013
	.4byte 0x00130014
	.4byte 0x00140014
	.4byte 0x00150015
	.4byte 0x00160016
	.4byte 0x00160017
	.4byte 0x00170017
	.4byte 0x00180018
	.4byte 0x00180019
	.4byte 0x00190019
	.4byte 0x001A001A
	.4byte 0x001A001B
	.4byte 0x001B001B
	.4byte 0x001C001C
	.4byte 0x001C001C
	.4byte 0x001D001D
	.4byte 0x001D001D
	.4byte 0x001D001E
	.4byte 0x001E001E
	.4byte 0x001E001E
	.4byte 0x001F001F
	.4byte 0x001F001F
	.4byte 0x001F001F
	.4byte 0x001F0020
	.4byte 0x00200020
	.4byte 0x00200020
	.4byte 0x00200020
	.4byte 0x00200020
	.4byte 0x00200020


.section .text, "ax"

.global snd_handle_irq
snd_handle_irq:
/* 803B2F4C 003AFEAC  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B2F50 003AFEB0  7C 08 02 A6 */	mflr r0
/* 803B2F54 003AFEB4  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B2F58 003AFEB8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 803B2F5C 003AFEBC  88 0D AE 48 */	lbz r0, sndActive@sda21(r13)
/* 803B2F60 003AFEC0  28 00 00 00 */	cmplwi r0, 0
/* 803B2F64 003AFEC4  41 82 01 28 */	beq lbl_803B308C
/* 803B2F68 003AFEC8  4B FE A2 F1 */	bl streamCorrectLoops
/* 803B2F6C 003AFECC  48 00 21 89 */	bl hwIRQEnterCritical
/* 803B2F70 003AFED0  48 00 1F 05 */	bl salAiGetDest
/* 803B2F74 003AFED4  48 00 20 21 */	bl salCtrlDsp
/* 803B2F78 003AFED8  48 00 21 9D */	bl hwIRQLeaveCritical
/* 803B2F7C 003AFEDC  48 00 21 79 */	bl hwIRQEnterCritical
/* 803B2F80 003AFEE0  4B FF B0 39 */	bl salHandleAuxProcessing
/* 803B2F84 003AFEE4  48 00 21 91 */	bl hwIRQLeaveCritical
/* 803B2F88 003AFEE8  48 00 21 6D */	bl hwIRQEnterCritical
/* 803B2F8C 003AFEEC  88 8D AF 8E */	lbz r4, salAuxFrame@sda21(r13)
/* 803B2F90 003AFEF0  3C 60 55 55 */	lis r3, 0x55555556@ha
/* 803B2F94 003AFEF4  38 03 55 56 */	addi r0, r3, 0x55555556@l
/* 803B2F98 003AFEF8  88 AD AF 8F */	lbz r5, salFrame@sda21(r13)
/* 803B2F9C 003AFEFC  38 84 00 01 */	addi r4, r4, 1
/* 803B2FA0 003AFF00  39 20 00 00 */	li r9, 0
/* 803B2FA4 003AFF04  7C 60 20 96 */	mulhw r3, r0, r4
/* 803B2FA8 003AFF08  68 A0 00 01 */	xori r0, r5, 1
/* 803B2FAC 003AFF0C  98 0D AF 8F */	stb r0, salFrame@sda21(r13)
/* 803B2FB0 003AFF10  39 00 00 00 */	li r8, 0
/* 803B2FB4 003AFF14  54 60 0F FE */	srwi r0, r3, 0x1f
/* 803B2FB8 003AFF18  7C 03 02 14 */	add r0, r3, r0
/* 803B2FBC 003AFF1C  1C 00 00 03 */	mulli r0, r0, 3
/* 803B2FC0 003AFF20  7C 00 20 50 */	subf r0, r0, r4
/* 803B2FC4 003AFF24  98 0D AF 8E */	stb r0, salAuxFrame@sda21(r13)
/* 803B2FC8 003AFF28  48 00 00 4C */	b lbl_803B3014
lbl_803B2FCC:
/* 803B2FCC 003AFF2C  55 20 06 3E */	clrlwi r0, r9, 0x18
/* 803B2FD0 003AFF30  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B2FD4 003AFF34  1C 80 00 F4 */	mulli r4, r0, 0xf4
/* 803B2FD8 003AFF38  39 29 00 01 */	addi r9, r9, 1
/* 803B2FDC 003AFF3C  38 E4 00 24 */	addi r7, r4, 0x24
/* 803B2FE0 003AFF40  7D 03 39 2E */	stwx r8, r3, r7
/* 803B2FE4 003AFF44  38 A7 00 04 */	addi r5, r7, 4
/* 803B2FE8 003AFF48  38 87 00 08 */	addi r4, r7, 8
/* 803B2FEC 003AFF4C  38 67 00 0C */	addi r3, r7, 0xc
/* 803B2FF0 003AFF50  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B2FF4 003AFF54  38 07 00 10 */	addi r0, r7, 0x10
/* 803B2FF8 003AFF58  7D 06 29 2E */	stwx r8, r6, r5
/* 803B2FFC 003AFF5C  80 AD AF 54 */	lwz r5, dspVoice@sda21(r13)
/* 803B3000 003AFF60  7D 05 21 2E */	stwx r8, r5, r4
/* 803B3004 003AFF64  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B3008 003AFF68  7D 04 19 2E */	stwx r8, r4, r3
/* 803B300C 003AFF6C  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3010 003AFF70  7D 03 01 2E */	stwx r8, r3, r0
lbl_803B3014:
/* 803B3014 003AFF74  88 0D AF 8D */	lbz r0, salNumVoices@sda21(r13)
/* 803B3018 003AFF78  55 23 06 3E */	clrlwi r3, r9, 0x18
/* 803B301C 003AFF7C  7C 03 00 40 */	cmplw r3, r0
/* 803B3020 003AFF80  41 80 FF AC */	blt lbl_803B2FCC
/* 803B3024 003AFF84  48 00 20 F1 */	bl hwIRQLeaveCritical
/* 803B3028 003AFF88  3B E0 00 00 */	li r31, 0
/* 803B302C 003AFF8C  48 00 00 28 */	b lbl_803B3054
lbl_803B3030:
/* 803B3030 003AFF90  48 00 20 C5 */	bl hwIRQEnterCritical
/* 803B3034 003AFF94  7F E3 FB 78 */	mr r3, r31
/* 803B3038 003AFF98  48 00 01 55 */	bl hwSetTimeOffset
/* 803B303C 003AFF9C  38 60 01 00 */	li r3, 0x100
/* 803B3040 003AFFA0  4B FE 50 C5 */	bl seqHandle
/* 803B3044 003AFFA4  38 60 01 00 */	li r3, 0x100
/* 803B3048 003AFFA8  4B FE 7A C1 */	bl synthHandle
/* 803B304C 003AFFAC  48 00 20 C9 */	bl hwIRQLeaveCritical
/* 803B3050 003AFFB0  3B FF 00 01 */	addi r31, r31, 1
lbl_803B3054:
/* 803B3054 003AFFB4  57 E0 06 3E */	clrlwi r0, r31, 0x18
/* 803B3058 003AFFB8  28 00 00 05 */	cmplwi r0, 5
/* 803B305C 003AFFBC  41 80 FF D4 */	blt lbl_803B3030
/* 803B3060 003AFFC0  48 00 20 95 */	bl hwIRQEnterCritical
/* 803B3064 003AFFC4  38 60 00 00 */	li r3, 0
/* 803B3068 003AFFC8  48 00 01 25 */	bl hwSetTimeOffset
/* 803B306C 003AFFCC  4B FF D2 ED */	bl s3dHandle
/* 803B3070 003AFFD0  48 00 20 A5 */	bl hwIRQLeaveCritical
/* 803B3074 003AFFD4  48 00 20 81 */	bl hwIRQEnterCritical
/* 803B3078 003AFFD8  4B FE 99 35 */	bl streamHandle
/* 803B307C 003AFFDC  48 00 20 99 */	bl hwIRQLeaveCritical
/* 803B3080 003AFFE0  48 00 20 75 */	bl hwIRQEnterCritical
/* 803B3084 003AFFE4  4B FF 6E F1 */	bl vsSampleUpdates
/* 803B3088 003AFFE8  48 00 20 8D */	bl hwIRQLeaveCritical
lbl_803B308C:
/* 803B308C 003AFFEC  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3090 003AFFF0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 803B3094 003AFFF4  7C 08 03 A6 */	mtlr r0
/* 803B3098 003AFFF8  38 21 00 10 */	addi r1, r1, 0x10
/* 803B309C 003AFFFC  4E 80 00 20 */	blr

.global hwInit
hwInit:
/* 803B30A0 003B0000  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 803B30A4 003B0004  7C 08 02 A6 */	mflr r0
/* 803B30A8 003B0008  90 01 00 24 */	stw r0, 0x24(r1)
/* 803B30AC 003B000C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 803B30B0 003B0010  7C DF 33 78 */	mr r31, r6
/* 803B30B4 003B0014  93 C1 00 18 */	stw r30, 0x18(r1)
/* 803B30B8 003B0018  7C BE 2B 78 */	mr r30, r5
/* 803B30BC 003B001C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 803B30C0 003B0020  7C 9D 23 78 */	mr r29, r4
/* 803B30C4 003B0024  93 81 00 10 */	stw r28, 0x10(r1)
/* 803B30C8 003B0028  7C 7C 1B 78 */	mr r28, r3
/* 803B30CC 003B002C  48 00 1F 89 */	bl hwInitIrq
/* 803B30D0 003B0030  38 00 00 00 */	li r0, 0
/* 803B30D4 003B0034  3C 60 80 3B */	lis r3, snd_handle_irq@ha
/* 803B30D8 003B0038  98 0D AF 8F */	stb r0, salFrame@sda21(r13)
/* 803B30DC 003B003C  38 63 2F 4C */	addi r3, r3, snd_handle_irq@l
/* 803B30E0 003B0040  7F E4 FB 78 */	mr r4, r31
/* 803B30E4 003B0044  7F 85 E3 78 */	mr r5, r28
/* 803B30E8 003B0048  98 0D AF 8E */	stb r0, salAuxFrame@sda21(r13)
/* 803B30EC 003B004C  90 0D AF 58 */	stw r0, salMessageCallback@sda21(r13)
/* 803B30F0 003B0050  48 00 1C 69 */	bl salInitAi
/* 803B30F4 003B0054  28 03 00 00 */	cmplwi r3, 0
/* 803B30F8 003B0058  41 82 00 3C */	beq lbl_803B3134
/* 803B30FC 003B005C  57 E5 07 FE */	clrlwi r5, r31, 0x1f
/* 803B3100 003B0060  57 A3 06 3E */	clrlwi r3, r29, 0x18
/* 803B3104 003B0064  57 C4 06 3E */	clrlwi r4, r30, 0x18
/* 803B3108 003B0068  4B FF 7B F5 */	bl salInitDspCtrl
/* 803B310C 003B006C  28 03 00 00 */	cmplwi r3, 0
/* 803B3110 003B0070  41 82 00 24 */	beq lbl_803B3134
/* 803B3114 003B0074  7F E3 FB 78 */	mr r3, r31
/* 803B3118 003B0078  48 00 1D 8D */	bl salInitDsp
/* 803B311C 003B007C  28 03 00 00 */	cmplwi r3, 0
/* 803B3120 003B0080  41 82 00 14 */	beq lbl_803B3134
/* 803B3124 003B0084  48 00 1F 61 */	bl hwEnableIrq
/* 803B3128 003B0088  48 00 1C F9 */	bl salStartAi
/* 803B312C 003B008C  38 60 00 00 */	li r3, 0
/* 803B3130 003B0090  48 00 00 08 */	b lbl_803B3138
lbl_803B3134:
/* 803B3134 003B0094  38 60 FF FF */	li r3, -1
lbl_803B3138:
/* 803B3138 003B0098  80 01 00 24 */	lwz r0, 0x24(r1)
/* 803B313C 003B009C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 803B3140 003B00A0  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 803B3144 003B00A4  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 803B3148 003B00A8  83 81 00 10 */	lwz r28, 0x10(r1)
/* 803B314C 003B00AC  7C 08 03 A6 */	mtlr r0
/* 803B3150 003B00B0  38 21 00 20 */	addi r1, r1, 0x20
/* 803B3154 003B00B4  4E 80 00 20 */	blr

.global hwExit
hwExit:
/* 803B3158 003B00B8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B315C 003B00BC  7C 08 02 A6 */	mflr r0
/* 803B3160 003B00C0  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3164 003B00C4  48 00 1F 59 */	bl hwDisableIrq
/* 803B3168 003B00C8  48 00 1D F9 */	bl salExitDsp
/* 803B316C 003B00CC  4B FF 7F 7D */	bl salExitDspCtrl
/* 803B3170 003B00D0  48 00 1C D1 */	bl salExitAi
/* 803B3174 003B00D4  48 00 1F 11 */	bl hwEnableIrq
/* 803B3178 003B00D8  48 00 1F 09 */	bl hwExitIrq
/* 803B317C 003B00DC  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3180 003B00E0  7C 08 03 A6 */	mtlr r0
/* 803B3184 003B00E4  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3188 003B00E8  4E 80 00 20 */	blr

.global hwSetTimeOffset
hwSetTimeOffset:
/* 803B318C 003B00EC  98 6D AF 80 */	stb r3, salTimeOffset@sda21(r13)
/* 803B3190 003B00F0  4E 80 00 20 */	blr

.global hwGetTimeOffset
hwGetTimeOffset:
/* 803B3194 003B00F4  88 6D AF 80 */	lbz r3, salTimeOffset@sda21(r13)
/* 803B3198 003B00F8  4E 80 00 20 */	blr

.global hwIsActive
hwIsActive:
/* 803B319C 003B00FC  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B31A0 003B0100  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B31A4 003B0104  7C 63 02 14 */	add r3, r3, r0
/* 803B31A8 003B0108  88 63 00 EC */	lbz r3, 0xec(r3)
/* 803B31AC 003B010C  7C 03 00 D0 */	neg r0, r3
/* 803B31B0 003B0110  7C 00 1B 78 */	or r0, r0, r3
/* 803B31B4 003B0114  54 03 0F FE */	srwi r3, r0, 0x1f
/* 803B31B8 003B0118  4E 80 00 20 */	blr

.global hwSetMesgCallback
hwSetMesgCallback:
/* 803B31BC 003B011C  90 6D AF 58 */	stw r3, salMessageCallback@sda21(r13)
/* 803B31C0 003B0120  4E 80 00 20 */	blr

.global hwSetPriority
hwSetPriority:
/* 803B31C4 003B0124  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B31C8 003B0128  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B31CC 003B012C  7C 63 02 14 */	add r3, r3, r0
/* 803B31D0 003B0130  90 83 00 1C */	stw r4, 0x1c(r3)
/* 803B31D4 003B0134  4E 80 00 20 */	blr

.global hwInitSamplePlayback
hwInitSamplePlayback:
/* 803B31D8 003B0138  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 803B31DC 003B013C  7C 08 02 A6 */	mflr r0
/* 803B31E0 003B0140  39 80 00 00 */	li r12, 0
/* 803B31E4 003B0144  39 60 00 00 */	li r11, 0
/* 803B31E8 003B0148  90 01 00 24 */	stw r0, 0x24(r1)
/* 803B31EC 003B014C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 803B31F0 003B0150  7D 5F 53 78 */	mr r31, r10
/* 803B31F4 003B0154  93 C1 00 18 */	stw r30, 0x18(r1)
/* 803B31F8 003B0158  7C 7E 1B 78 */	mr r30, r3
/* 803B31FC 003B015C  1C 7E 00 F4 */	mulli r3, r30, 0xf4
/* 803B3200 003B0160  93 A1 00 14 */	stw r29, 0x14(r1)
/* 803B3204 003B0164  3B A0 00 00 */	li r29, 0
/* 803B3208 003B0168  48 00 00 28 */	b lbl_803B3230
lbl_803B320C:
/* 803B320C 003B016C  81 4D AF 54 */	lwz r10, dspVoice@sda21(r13)
/* 803B3210 003B0170  55 80 15 BA */	rlwinm r0, r12, 2, 0x16, 0x1d
/* 803B3214 003B0174  39 8C 00 01 */	addi r12, r12, 1
/* 803B3218 003B0178  7D 4A 02 14 */	add r10, r10, r0
/* 803B321C 003B017C  39 4A 00 24 */	addi r10, r10, 0x24
/* 803B3220 003B0180  7C 03 50 2E */	lwzx r0, r3, r10
/* 803B3224 003B0184  54 00 06 B4 */	rlwinm r0, r0, 0, 0x1a, 0x1a
/* 803B3228 003B0188  7D 63 51 2E */	stwx r11, r3, r10
/* 803B322C 003B018C  7F BD 03 78 */	or r29, r29, r0
lbl_803B3230:
/* 803B3230 003B0190  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B3234 003B0194  55 8A 06 3E */	clrlwi r10, r12, 0x18
/* 803B3238 003B0198  7C 0A 00 40 */	cmplw r10, r0
/* 803B323C 003B019C  40 81 FF D0 */	ble lbl_803B320C
/* 803B3240 003B01A0  81 4D AF 54 */	lwz r10, dspVoice@sda21(r13)
/* 803B3244 003B01A4  38 00 00 00 */	li r0, 0
/* 803B3248 003B01A8  28 06 00 00 */	cmplwi r6, 0
/* 803B324C 003B01AC  7C CA 1A 14 */	add r6, r10, r3
/* 803B3250 003B01B0  93 A6 00 24 */	stw r29, 0x24(r6)
/* 803B3254 003B01B4  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B3258 003B01B8  7C C6 1A 14 */	add r6, r6, r3
/* 803B325C 003B01BC  90 E6 00 1C */	stw r7, 0x1c(r6)
/* 803B3260 003B01C0  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B3264 003B01C4  7C C6 1A 14 */	add r6, r6, r3
/* 803B3268 003B01C8  91 06 00 18 */	stw r8, 0x18(r6)
/* 803B326C 003B01CC  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B3270 003B01D0  7C C6 1A 14 */	add r6, r6, r3
/* 803B3274 003B01D4  90 06 00 F0 */	stw r0, 0xf0(r6)
/* 803B3278 003B01D8  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B327C 003B01DC  7C C6 1A 14 */	add r6, r6, r3
/* 803B3280 003B01E0  B0 86 00 70 */	sth r4, 0x70(r6)
/* 803B3284 003B01E4  80 ED AF 54 */	lwz r7, dspVoice@sda21(r13)
/* 803B3288 003B01E8  80 C5 00 00 */	lwz r6, 0(r5)
/* 803B328C 003B01EC  80 85 00 04 */	lwz r4, 4(r5)
/* 803B3290 003B01F0  7C E7 1A 14 */	add r7, r7, r3
/* 803B3294 003B01F4  90 C7 00 74 */	stw r6, 0x74(r7)
/* 803B3298 003B01F8  90 87 00 78 */	stw r4, 0x78(r7)
/* 803B329C 003B01FC  80 C5 00 08 */	lwz r6, 8(r5)
/* 803B32A0 003B0200  80 85 00 0C */	lwz r4, 0xc(r5)
/* 803B32A4 003B0204  90 C7 00 7C */	stw r6, 0x7c(r7)
/* 803B32A8 003B0208  90 87 00 80 */	stw r4, 0x80(r7)
/* 803B32AC 003B020C  80 C5 00 10 */	lwz r6, 0x10(r5)
/* 803B32B0 003B0210  80 85 00 14 */	lwz r4, 0x14(r5)
/* 803B32B4 003B0214  90 C7 00 84 */	stw r6, 0x84(r7)
/* 803B32B8 003B0218  90 87 00 88 */	stw r4, 0x88(r7)
/* 803B32BC 003B021C  80 C5 00 18 */	lwz r6, 0x18(r5)
/* 803B32C0 003B0220  80 85 00 1C */	lwz r4, 0x1c(r5)
/* 803B32C4 003B0224  90 C7 00 8C */	stw r6, 0x8c(r7)
/* 803B32C8 003B0228  90 87 00 90 */	stw r4, 0x90(r7)
/* 803B32CC 003B022C  41 82 00 44 */	beq lbl_803B3310
/* 803B32D0 003B0230  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B32D4 003B0234  38 A0 7F FF */	li r5, 0x7fff
/* 803B32D8 003B0238  7C 84 1A 14 */	add r4, r4, r3
/* 803B32DC 003B023C  98 04 00 A4 */	stb r0, 0xa4(r4)
/* 803B32E0 003B0240  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B32E4 003B0244  7C 84 1A 14 */	add r4, r4, r3
/* 803B32E8 003B0248  90 04 00 B8 */	stw r0, 0xb8(r4)
/* 803B32EC 003B024C  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B32F0 003B0250  7C 84 1A 14 */	add r4, r4, r3
/* 803B32F4 003B0254  90 04 00 BC */	stw r0, 0xbc(r4)
/* 803B32F8 003B0258  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B32FC 003B025C  7C 84 1A 14 */	add r4, r4, r3
/* 803B3300 003B0260  B0 A4 00 C0 */	sth r5, 0xc0(r4)
/* 803B3304 003B0264  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B3308 003B0268  7C 84 1A 14 */	add r4, r4, r3
/* 803B330C 003B026C  90 04 00 C4 */	stw r0, 0xc4(r4)
lbl_803B3310:
/* 803B3310 003B0270  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3314 003B0274  38 A0 00 FF */	li r5, 0xff
/* 803B3318 003B0278  28 09 00 00 */	cmplwi r9, 0
/* 803B331C 003B027C  7C 80 1A 14 */	add r4, r0, r3
/* 803B3320 003B0280  98 A4 00 E4 */	stb r5, 0xe4(r4)
/* 803B3324 003B0284  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3328 003B0288  7C 80 1A 14 */	add r4, r0, r3
/* 803B332C 003B028C  98 A4 00 E5 */	stb r5, 0xe5(r4)
/* 803B3330 003B0290  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3334 003B0294  7C 80 1A 14 */	add r4, r0, r3
/* 803B3338 003B0298  98 A4 00 E6 */	stb r5, 0xe6(r4)
/* 803B333C 003B029C  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3340 003B02A0  7C 60 1A 14 */	add r3, r0, r3
/* 803B3344 003B02A4  98 A3 00 E7 */	stb r5, 0xe7(r3)
/* 803B3348 003B02A8  41 82 00 1C */	beq lbl_803B3364
/* 803B334C 003B02AC  7F C3 F3 78 */	mr r3, r30
/* 803B3350 003B02B0  38 80 00 00 */	li r4, 0
/* 803B3354 003B02B4  48 00 03 81 */	bl hwSetSRCType
/* 803B3358 003B02B8  7F C3 F3 78 */	mr r3, r30
/* 803B335C 003B02BC  38 80 00 01 */	li r4, 1
/* 803B3360 003B02C0  48 00 03 A1 */	bl hwSetPolyPhaseFilter
lbl_803B3364:
/* 803B3364 003B02C4  7F C3 F3 78 */	mr r3, r30
/* 803B3368 003B02C8  7F E4 FB 78 */	mr r4, r31
/* 803B336C 003B02CC  48 00 03 C1 */	bl hwSetITDMode
/* 803B3370 003B02D0  80 01 00 24 */	lwz r0, 0x24(r1)
/* 803B3374 003B02D4  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 803B3378 003B02D8  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 803B337C 003B02DC  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 803B3380 003B02E0  7C 08 03 A6 */	mtlr r0
/* 803B3384 003B02E4  38 21 00 20 */	addi r1, r1, 0x20
/* 803B3388 003B02E8  4E 80 00 20 */	blr

.global hwBreak
hwBreak:
/* 803B338C 003B02EC  1C 83 00 F4 */	mulli r4, r3, 0xf4
/* 803B3390 003B02F0  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3394 003B02F4  7C 60 22 14 */	add r3, r0, r4
/* 803B3398 003B02F8  88 03 00 EC */	lbz r0, 0xec(r3)
/* 803B339C 003B02FC  28 00 00 01 */	cmplwi r0, 1
/* 803B33A0 003B0300  40 82 00 18 */	bne lbl_803B33B8
/* 803B33A4 003B0304  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B33A8 003B0308  28 00 00 00 */	cmplwi r0, 0
/* 803B33AC 003B030C  40 82 00 0C */	bne lbl_803B33B8
/* 803B33B0 003B0310  38 00 00 01 */	li r0, 1
/* 803B33B4 003B0314  98 03 00 EE */	stb r0, 0xee(r3)
lbl_803B33B8:
/* 803B33B8 003B0318  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B33BC 003B031C  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B33C0 003B0320  7C 63 22 14 */	add r3, r3, r4
/* 803B33C4 003B0324  54 00 10 3A */	slwi r0, r0, 2
/* 803B33C8 003B0328  7C 63 02 14 */	add r3, r3, r0
/* 803B33CC 003B032C  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B33D0 003B0330  60 00 00 20 */	ori r0, r0, 0x20
/* 803B33D4 003B0334  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B33D8 003B0338  4E 80 00 20 */	blr

.global hwSetADSR
hwSetADSR:
/* 803B33DC 003B033C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 803B33E0 003B0340  7C 08 02 A6 */	mflr r0
/* 803B33E4 003B0344  54 A6 06 3F */	clrlwi. r6, r5, 0x18
/* 803B33E8 003B0348  90 01 00 24 */	stw r0, 0x24(r1)
/* 803B33EC 003B034C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 803B33F0 003B0350  93 C1 00 18 */	stw r30, 0x18(r1)
/* 803B33F4 003B0354  7C 9E 23 78 */	mr r30, r4
/* 803B33F8 003B0358  93 A1 00 14 */	stw r29, 0x14(r1)
/* 803B33FC 003B035C  7C 7D 1B 78 */	mr r29, r3
/* 803B3400 003B0360  41 82 00 14 */	beq lbl_803B3414
/* 803B3404 003B0364  41 80 01 50 */	blt lbl_803B3554
/* 803B3408 003B0368  2C 06 00 03 */	cmpwi r6, 3
/* 803B340C 003B036C  40 80 01 48 */	bge lbl_803B3554
/* 803B3410 003B0370  48 00 00 6C */	b lbl_803B347C
lbl_803B3414:
/* 803B3414 003B0374  1C BD 00 F4 */	mulli r5, r29, 0xf4
/* 803B3418 003B0378  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B341C 003B037C  38 80 00 00 */	li r4, 0
/* 803B3420 003B0380  7C 60 2A 14 */	add r3, r0, r5
/* 803B3424 003B0384  98 83 00 A4 */	stb r4, 0xa4(r3)
/* 803B3428 003B0388  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B342C 003B038C  A0 9E 00 00 */	lhz r4, 0(r30)
/* 803B3430 003B0390  7C 60 2A 14 */	add r3, r0, r5
/* 803B3434 003B0394  90 83 00 B8 */	stw r4, 0xb8(r3)
/* 803B3438 003B0398  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B343C 003B039C  A0 9E 00 02 */	lhz r4, 2(r30)
/* 803B3440 003B03A0  7C 60 2A 14 */	add r3, r0, r5
/* 803B3444 003B03A4  90 83 00 BC */	stw r4, 0xbc(r3)
/* 803B3448 003B03A8  A0 1E 00 04 */	lhz r0, 4(r30)
/* 803B344C 003B03AC  54 04 18 38 */	slwi r4, r0, 3
/* 803B3450 003B03B0  28 04 7F FF */	cmplwi r4, 0x7fff
/* 803B3454 003B03B4  40 81 00 08 */	ble lbl_803B345C
/* 803B3458 003B03B8  38 80 7F FF */	li r4, 0x7fff
lbl_803B345C:
/* 803B345C 003B03BC  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3460 003B03C0  7C 60 2A 14 */	add r3, r0, r5
/* 803B3464 003B03C4  B0 83 00 C0 */	sth r4, 0xc0(r3)
/* 803B3468 003B03C8  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B346C 003B03CC  A0 9E 00 06 */	lhz r4, 6(r30)
/* 803B3470 003B03D0  7C 60 2A 14 */	add r3, r0, r5
/* 803B3474 003B03D4  90 83 00 C4 */	stw r4, 0xc4(r3)
/* 803B3478 003B03D8  48 00 00 DC */	b lbl_803B3554
lbl_803B347C:
/* 803B347C 003B03DC  1F FD 00 F4 */	mulli r31, r29, 0xf4
/* 803B3480 003B03E0  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3484 003B03E4  38 A0 00 01 */	li r5, 1
/* 803B3488 003B03E8  28 06 00 01 */	cmplwi r6, 1
/* 803B348C 003B03EC  7C 60 FA 14 */	add r3, r0, r31
/* 803B3490 003B03F0  38 80 00 00 */	li r4, 0
/* 803B3494 003B03F4  98 A3 00 A4 */	stb r5, 0xa4(r3)
/* 803B3498 003B03F8  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B349C 003B03FC  7C 60 FA 14 */	add r3, r0, r31
/* 803B34A0 003B0400  98 83 00 CA */	stb r4, 0xca(r3)
/* 803B34A4 003B0404  40 82 00 68 */	bne lbl_803B350C
/* 803B34A8 003B0408  80 7E 00 00 */	lwz r3, 0(r30)
/* 803B34AC 003B040C  4B FF 5D 65 */	bl adsrConvertTimeCents
/* 803B34B0 003B0410  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B34B4 003B0414  54 64 04 3E */	clrlwi r4, r3, 0x10
/* 803B34B8 003B0418  7C 60 FA 14 */	add r3, r0, r31
/* 803B34BC 003B041C  90 83 00 B8 */	stw r4, 0xb8(r3)
/* 803B34C0 003B0420  80 7E 00 04 */	lwz r3, 4(r30)
/* 803B34C4 003B0424  4B FF 5D 4D */	bl adsrConvertTimeCents
/* 803B34C8 003B0428  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B34CC 003B042C  54 64 04 3E */	clrlwi r4, r3, 0x10
/* 803B34D0 003B0430  7C 60 FA 14 */	add r3, r0, r31
/* 803B34D4 003B0434  90 83 00 BC */	stw r4, 0xbc(r3)
/* 803B34D8 003B0438  A0 1E 00 08 */	lhz r0, 8(r30)
/* 803B34DC 003B043C  7C 04 16 70 */	srawi r4, r0, 2
/* 803B34E0 003B0440  28 04 03 FF */	cmplwi r4, 0x3ff
/* 803B34E4 003B0444  40 81 00 08 */	ble lbl_803B34EC
/* 803B34E8 003B0448  38 80 03 FF */	li r4, 0x3ff
lbl_803B34EC:
/* 803B34EC 003B044C  3C 60 80 3F */	lis r3, dspScale2IndexTab@ha
/* 803B34F0 003B0450  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B34F4 003B0454  38 63 39 A4 */	addi r3, r3, dspScale2IndexTab@l
/* 803B34F8 003B0458  7C 83 20 AE */	lbzx r4, r3, r4
/* 803B34FC 003B045C  7C 60 FA 14 */	add r3, r0, r31
/* 803B3500 003B0460  20 04 00 C1 */	subfic r0, r4, 0xc1
/* 803B3504 003B0464  B0 03 00 C0 */	sth r0, 0xc0(r3)
/* 803B3508 003B0468  48 00 00 3C */	b lbl_803B3544
lbl_803B350C:
/* 803B350C 003B046C  80 7E 00 00 */	lwz r3, 0(r30)
/* 803B3510 003B0470  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3514 003B0474  54 64 04 3E */	clrlwi r4, r3, 0x10
/* 803B3518 003B0478  7C 60 FA 14 */	add r3, r0, r31
/* 803B351C 003B047C  90 83 00 B8 */	stw r4, 0xb8(r3)
/* 803B3520 003B0480  80 7E 00 04 */	lwz r3, 4(r30)
/* 803B3524 003B0484  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3528 003B0488  54 64 04 3E */	clrlwi r4, r3, 0x10
/* 803B352C 003B048C  7C 60 FA 14 */	add r3, r0, r31
/* 803B3530 003B0490  90 83 00 BC */	stw r4, 0xbc(r3)
/* 803B3534 003B0494  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3538 003B0498  A0 9E 00 08 */	lhz r4, 8(r30)
/* 803B353C 003B049C  7C 60 FA 14 */	add r3, r0, r31
/* 803B3540 003B04A0  B0 83 00 C0 */	sth r4, 0xc0(r3)
lbl_803B3544:
/* 803B3544 003B04A4  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3548 003B04A8  A0 9E 00 0A */	lhz r4, 0xa(r30)
/* 803B354C 003B04AC  7C 60 FA 14 */	add r3, r0, r31
/* 803B3550 003B04B0  90 83 00 C4 */	stw r4, 0xc4(r3)
lbl_803B3554:
/* 803B3554 003B04B4  1C 1D 00 F4 */	mulli r0, r29, 0xf4
/* 803B3558 003B04B8  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B355C 003B04BC  7C 63 02 14 */	add r3, r3, r0
/* 803B3560 003B04C0  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B3564 003B04C4  60 00 00 10 */	ori r0, r0, 0x10
/* 803B3568 003B04C8  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B356C 003B04CC  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 803B3570 003B04D0  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 803B3574 003B04D4  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 803B3578 003B04D8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 803B357C 003B04DC  7C 08 03 A6 */	mtlr r0
/* 803B3580 003B04E0  38 21 00 20 */	addi r1, r1, 0x20
/* 803B3584 003B04E4  4E 80 00 20 */	blr

.global hwSetVirtualSampleLoopBuffer
hwSetVirtualSampleLoopBuffer:
/* 803B3588 003B04E8  1C C3 00 F4 */	mulli r6, r3, 0xf4
/* 803B358C 003B04EC  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3590 003B04F0  7C 60 32 14 */	add r3, r0, r6
/* 803B3594 003B04F4  90 83 00 94 */	stw r4, 0x94(r3)
/* 803B3598 003B04F8  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B359C 003B04FC  7C 60 32 14 */	add r3, r0, r6
/* 803B35A0 003B0500  90 A3 00 98 */	stw r5, 0x98(r3)
/* 803B35A4 003B0504  4E 80 00 20 */	blr

.global hwGetVirtualSampleState
hwGetVirtualSampleState:
/* 803B35A8 003B0508  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B35AC 003B050C  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B35B0 003B0510  7C 63 02 14 */	add r3, r3, r0
/* 803B35B4 003B0514  88 63 00 9C */	lbz r3, 0x9c(r3)
/* 803B35B8 003B0518  4E 80 00 20 */	blr

.global hwGetSampleType
hwGetSampleType:
/* 803B35BC 003B051C  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B35C0 003B0520  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B35C4 003B0524  7C 63 02 14 */	add r3, r3, r0
/* 803B35C8 003B0528  88 63 00 90 */	lbz r3, 0x90(r3)
/* 803B35CC 003B052C  4E 80 00 20 */	blr

.global hwGetSampleID
hwGetSampleID:
/* 803B35D0 003B0530  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B35D4 003B0534  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B35D8 003B0538  7C 63 02 14 */	add r3, r3, r0
/* 803B35DC 003B053C  A0 63 00 70 */	lhz r3, 0x70(r3)
/* 803B35E0 003B0540  4E 80 00 20 */	blr

.global hwSetStreamLoopPS
hwSetStreamLoopPS:
/* 803B35E4 003B0544  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B35E8 003B0548  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B35EC 003B054C  7C 63 02 14 */	add r3, r3, r0
/* 803B35F0 003B0550  98 83 00 A0 */	stb r4, 0xa0(r3)
/* 803B35F4 003B0554  4E 80 00 20 */	blr

.global hwStart
hwStart:
/* 803B35F8 003B0558  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B35FC 003B055C  7C 08 02 A6 */	mflr r0
/* 803B3600 003B0560  1C C3 00 F4 */	mulli r6, r3, 0xf4
/* 803B3604 003B0564  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3608 003B0568  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B360C 003B056C  88 AD AF 80 */	lbz r5, salTimeOffset@sda21(r13)
/* 803B3610 003B0570  7C 60 32 14 */	add r3, r0, r6
/* 803B3614 003B0574  98 A3 00 D4 */	stb r5, 0xd4(r3)
/* 803B3618 003B0578  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B361C 003B057C  7C 60 32 14 */	add r3, r0, r6
/* 803B3620 003B0580  4B FF A6 A5 */	bl salActivateVoice
/* 803B3624 003B0584  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3628 003B0588  7C 08 03 A6 */	mtlr r0
/* 803B362C 003B058C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3630 003B0590  4E 80 00 20 */	blr

.global hwKeyOff
hwKeyOff:
/* 803B3634 003B0594  1C 63 00 F4 */	mulli r3, r3, 0xf4
/* 803B3638 003B0598  80 8D AF 54 */	lwz r4, dspVoice@sda21(r13)
/* 803B363C 003B059C  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B3640 003B05A0  7C 64 1A 14 */	add r3, r4, r3
/* 803B3644 003B05A4  54 00 10 3A */	slwi r0, r0, 2
/* 803B3648 003B05A8  7C 63 02 14 */	add r3, r3, r0
/* 803B364C 003B05AC  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B3650 003B05B0  60 00 00 40 */	ori r0, r0, 0x40
/* 803B3654 003B05B4  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B3658 003B05B8  4E 80 00 20 */	blr

.global hwSetPitch
hwSetPitch:
/* 803B365C 003B05BC  54 80 04 3E */	clrlwi r0, r4, 0x10
/* 803B3660 003B05C0  80 AD AF 54 */	lwz r5, dspVoice@sda21(r13)
/* 803B3664 003B05C4  1C 63 00 F4 */	mulli r3, r3, 0xf4
/* 803B3668 003B05C8  28 00 40 00 */	cmplwi r0, 0x4000
/* 803B366C 003B05CC  7C A5 1A 14 */	add r5, r5, r3
/* 803B3670 003B05D0  41 80 00 08 */	blt lbl_803B3678
/* 803B3674 003B05D4  38 80 3F FF */	li r4, 0x3fff
lbl_803B3678:
/* 803B3678 003B05D8  88 05 00 E4 */	lbz r0, 0xe4(r5)
/* 803B367C 003B05DC  28 00 00 FF */	cmplwi r0, 0xff
/* 803B3680 003B05E0  41 82 00 1C */	beq lbl_803B369C
/* 803B3684 003B05E4  54 03 15 BA */	rlwinm r3, r0, 2, 0x16, 0x1d
/* 803B3688 003B05E8  54 80 23 36 */	rlwinm r0, r4, 4, 0xc, 0x1b
/* 803B368C 003B05EC  7C 65 1A 14 */	add r3, r5, r3
/* 803B3690 003B05F0  80 63 00 38 */	lwz r3, 0x38(r3)
/* 803B3694 003B05F4  7C 03 00 40 */	cmplw r3, r0
/* 803B3698 003B05F8  4D 82 00 20 */	beqlr
lbl_803B369C:
/* 803B369C 003B05FC  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B36A0 003B0600  54 84 23 36 */	rlwinm r4, r4, 4, 0xc, 0x1b
/* 803B36A4 003B0604  54 00 10 3A */	slwi r0, r0, 2
/* 803B36A8 003B0608  7C 65 02 14 */	add r3, r5, r0
/* 803B36AC 003B060C  90 83 00 38 */	stw r4, 0x38(r3)
/* 803B36B0 003B0610  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B36B4 003B0614  54 00 10 3A */	slwi r0, r0, 2
/* 803B36B8 003B0618  7C 65 02 14 */	add r3, r5, r0
/* 803B36BC 003B061C  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B36C0 003B0620  60 00 00 08 */	ori r0, r0, 8
/* 803B36C4 003B0624  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B36C8 003B0628  88 0D AF 80 */	lbz r0, salTimeOffset@sda21(r13)
/* 803B36CC 003B062C  98 05 00 E4 */	stb r0, 0xe4(r5)
/* 803B36D0 003B0630  4E 80 00 20 */	blr

.global hwSetSRCType
hwSetSRCType:
/* 803B36D4 003B0634  1C A3 00 F4 */	mulli r5, r3, 0xf4
/* 803B36D8 003B0638  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B36DC 003B063C  54 80 0D FC */	rlwinm r0, r4, 1, 0x17, 0x1e
/* 803B36E0 003B0640  38 6D A0 18 */	addi r3, r13, lbl_805A8BD8@sda21
/* 803B36E4 003B0644  7C 03 02 2E */	lhzx r0, r3, r0
/* 803B36E8 003B0648  7C 66 2A 14 */	add r3, r6, r5
/* 803B36EC 003B064C  B0 03 00 CC */	sth r0, 0xcc(r3)
/* 803B36F0 003B0650  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B36F4 003B0654  60 00 01 00 */	ori r0, r0, 0x100
/* 803B36F8 003B0658  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B36FC 003B065C  4E 80 00 20 */	blr

.global hwSetPolyPhaseFilter
hwSetPolyPhaseFilter:
/* 803B3700 003B0660  1C A3 00 F4 */	mulli r5, r3, 0xf4
/* 803B3704 003B0664  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B3708 003B0668  54 80 0D FC */	rlwinm r0, r4, 1, 0x17, 0x1e
/* 803B370C 003B066C  38 6D A0 20 */	addi r3, r13, lbl_805A8BE0@sda21
/* 803B3710 003B0670  7C 03 02 2E */	lhzx r0, r3, r0
/* 803B3714 003B0674  7C 66 2A 14 */	add r3, r6, r5
/* 803B3718 003B0678  B0 03 00 CE */	sth r0, 0xce(r3)
/* 803B371C 003B067C  80 03 00 24 */	lwz r0, 0x24(r3)
/* 803B3720 003B0680  60 00 00 80 */	ori r0, r0, 0x80
/* 803B3724 003B0684  90 03 00 24 */	stw r0, 0x24(r3)
/* 803B3728 003B0688  4E 80 00 20 */	blr

.global hwSetITDMode
hwSetITDMode:
/* 803B372C 003B068C  54 80 06 3F */	clrlwi. r0, r4, 0x18
/* 803B3730 003B0690  40 82 00 3C */	bne lbl_803B376C
/* 803B3734 003B0694  1C A3 00 F4 */	mulli r5, r3, 0xf4
/* 803B3738 003B0698  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B373C 003B069C  38 80 00 10 */	li r4, 0x10
/* 803B3740 003B06A0  7C 60 2A 14 */	add r3, r0, r5
/* 803B3744 003B06A4  80 03 00 F0 */	lwz r0, 0xf0(r3)
/* 803B3748 003B06A8  64 00 80 00 */	oris r0, r0, 0x8000
/* 803B374C 003B06AC  90 03 00 F0 */	stw r0, 0xf0(r3)
/* 803B3750 003B06B0  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3754 003B06B4  7C 60 2A 14 */	add r3, r0, r5
/* 803B3758 003B06B8  B0 83 00 D0 */	sth r4, 0xd0(r3)
/* 803B375C 003B06BC  80 0D AF 54 */	lwz r0, dspVoice@sda21(r13)
/* 803B3760 003B06C0  7C 60 2A 14 */	add r3, r0, r5
/* 803B3764 003B06C4  B0 83 00 D2 */	sth r4, 0xd2(r3)
/* 803B3768 003B06C8  4E 80 00 20 */	blr
lbl_803B376C:
/* 803B376C 003B06CC  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B3770 003B06D0  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3774 003B06D4  7C 63 02 14 */	add r3, r3, r0
/* 803B3778 003B06D8  80 03 00 F0 */	lwz r0, 0xf0(r3)
/* 803B377C 003B06DC  54 00 00 7E */	clrlwi r0, r0, 1
/* 803B3780 003B06E0  90 03 00 F0 */	stw r0, 0xf0(r3)
/* 803B3784 003B06E4  4E 80 00 20 */	blr

.global hwSetVolume
hwSetVolume:
/* 803B3788 003B06E8  94 21 FF B0 */	stwu r1, -0x50(r1)
/* 803B378C 003B06EC  7C 08 02 A6 */	mflr r0
/* 803B3790 003B06F0  C0 02 D6 78 */	lfs f0, lbl_805AF398@sda21(r2)
/* 803B3794 003B06F4  90 01 00 54 */	stw r0, 0x54(r1)
/* 803B3798 003B06F8  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B379C 003B06FC  FC 01 00 40 */	fcmpo cr0, f1, f0
/* 803B37A0 003B0700  93 E1 00 4C */	stw r31, 0x4c(r1)
/* 803B37A4 003B0704  93 C1 00 48 */	stw r30, 0x48(r1)
/* 803B37A8 003B0708  7C BE 2B 78 */	mr r30, r5
/* 803B37AC 003B070C  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B37B0 003B0710  7F E3 02 14 */	add r31, r3, r0
/* 803B37B4 003B0714  4C 41 13 82 */	cror 2, 1, 2
/* 803B37B8 003B0718  40 82 00 08 */	bne lbl_803B37C0
/* 803B37BC 003B071C  FC 20 00 90 */	fmr f1, f0
lbl_803B37C0:
/* 803B37C0 003B0720  C0 02 D6 78 */	lfs f0, lbl_805AF398@sda21(r2)
/* 803B37C4 003B0724  FC 02 00 40 */	fcmpo cr0, f2, f0
/* 803B37C8 003B0728  4C 41 13 82 */	cror 2, 1, 2
/* 803B37CC 003B072C  40 82 00 08 */	bne lbl_803B37D4
/* 803B37D0 003B0730  FC 40 00 90 */	fmr f2, f0
lbl_803B37D4:
/* 803B37D4 003B0734  C0 02 D6 78 */	lfs f0, lbl_805AF398@sda21(r2)
/* 803B37D8 003B0738  FC 03 00 40 */	fcmpo cr0, f3, f0
/* 803B37DC 003B073C  4C 41 13 82 */	cror 2, 1, 2
/* 803B37E0 003B0740  40 82 00 08 */	bne lbl_803B37E8
/* 803B37E4 003B0744  FC 60 00 90 */	fmr f3, f0
lbl_803B37E8:
/* 803B37E8 003B0748  88 1F 00 EF */	lbz r0, 0xef(r31)
/* 803B37EC 003B074C  3C 60 80 56 */	lis r3, dspStudio@ha
/* 803B37F0 003B0750  38 E3 F2 60 */	addi r7, r3, dspStudio@l
/* 803B37F4 003B0754  81 1F 00 F0 */	lwz r8, 0xf0(r31)
/* 803B37F8 003B0758  1C 00 00 BC */	mulli r0, r0, 0xbc
/* 803B37FC 003B075C  7C 83 23 78 */	mr r3, r4
/* 803B3800 003B0760  7F C5 F3 78 */	mr r5, r30
/* 803B3804 003B0764  7C 87 02 14 */	add r4, r7, r0
/* 803B3808 003B0768  55 07 0F FE */	srwi r7, r8, 0x1f
/* 803B380C 003B076C  80 04 00 54 */	lwz r0, 0x54(r4)
/* 803B3810 003B0770  38 81 00 08 */	addi r4, r1, 8
/* 803B3814 003B0774  20 00 00 01 */	subfic r0, r0, 1
/* 803B3818 003B0778  7C 00 00 34 */	cntlzw r0, r0
/* 803B381C 003B077C  54 08 D9 7E */	srwi r8, r0, 5
/* 803B3820 003B0780  4B FF A8 F1 */	bl salCalcVolume
/* 803B3824 003B0784  C0 62 D6 7C */	lfs f3, lbl_805AF39C@sda21(r2)
/* 803B3828 003B0788  C0 41 00 08 */	lfs f2, 8(r1)
/* 803B382C 003B078C  C0 21 00 0C */	lfs f1, 0xc(r1)
/* 803B3830 003B0790  C0 01 00 10 */	lfs f0, 0x10(r1)
/* 803B3834 003B0794  EC 43 00 B2 */	fmuls f2, f3, f2
/* 803B3838 003B0798  EC 23 00 72 */	fmuls f1, f3, f1
/* 803B383C 003B079C  88 1F 00 E5 */	lbz r0, 0xe5(r31)
/* 803B3840 003B07A0  EC 03 00 32 */	fmuls f0, f3, f0
/* 803B3844 003B07A4  FC 40 10 1E */	fctiwz f2, f2
/* 803B3848 003B07A8  28 00 00 FF */	cmplwi r0, 0xff
/* 803B384C 003B07AC  FC 20 08 1E */	fctiwz f1, f1
/* 803B3850 003B07B0  FC 00 00 1E */	fctiwz f0, f0
/* 803B3854 003B07B4  D8 41 00 30 */	stfd f2, 0x30(r1)
/* 803B3858 003B07B8  D8 21 00 38 */	stfd f1, 0x38(r1)
/* 803B385C 003B07BC  80 81 00 34 */	lwz r4, 0x34(r1)
/* 803B3860 003B07C0  D8 01 00 40 */	stfd f0, 0x40(r1)
/* 803B3864 003B07C4  80 A1 00 3C */	lwz r5, 0x3c(r1)
/* 803B3868 003B07C8  80 C1 00 44 */	lwz r6, 0x44(r1)
/* 803B386C 003B07CC  41 82 00 34 */	beq lbl_803B38A0
/* 803B3870 003B07D0  A0 7F 00 4C */	lhz r3, 0x4c(r31)
/* 803B3874 003B07D4  54 80 04 3E */	clrlwi r0, r4, 0x10
/* 803B3878 003B07D8  7C 03 00 40 */	cmplw r3, r0
/* 803B387C 003B07DC  40 82 00 24 */	bne lbl_803B38A0
/* 803B3880 003B07E0  A0 7F 00 4E */	lhz r3, 0x4e(r31)
/* 803B3884 003B07E4  54 A0 04 3E */	clrlwi r0, r5, 0x10
/* 803B3888 003B07E8  7C 03 00 40 */	cmplw r3, r0
/* 803B388C 003B07EC  40 82 00 14 */	bne lbl_803B38A0
/* 803B3890 003B07F0  A0 7F 00 50 */	lhz r3, 0x50(r31)
/* 803B3894 003B07F4  54 C0 04 3E */	clrlwi r0, r6, 0x10
/* 803B3898 003B07F8  7C 03 00 40 */	cmplw r3, r0
/* 803B389C 003B07FC  41 82 00 24 */	beq lbl_803B38C0
lbl_803B38A0:
/* 803B38A0 003B0800  B0 9F 00 4C */	sth r4, 0x4c(r31)
/* 803B38A4 003B0804  38 00 00 00 */	li r0, 0
/* 803B38A8 003B0808  B0 BF 00 4E */	sth r5, 0x4e(r31)
/* 803B38AC 003B080C  B0 DF 00 50 */	sth r6, 0x50(r31)
/* 803B38B0 003B0810  80 7F 00 24 */	lwz r3, 0x24(r31)
/* 803B38B4 003B0814  60 63 00 01 */	ori r3, r3, 1
/* 803B38B8 003B0818  90 7F 00 24 */	stw r3, 0x24(r31)
/* 803B38BC 003B081C  98 1F 00 E5 */	stb r0, 0xe5(r31)
lbl_803B38C0:
/* 803B38C0 003B0820  C0 62 D6 7C */	lfs f3, lbl_805AF39C@sda21(r2)
/* 803B38C4 003B0824  C0 41 00 14 */	lfs f2, 0x14(r1)
/* 803B38C8 003B0828  C0 21 00 18 */	lfs f1, 0x18(r1)
/* 803B38CC 003B082C  C0 01 00 1C */	lfs f0, 0x1c(r1)
/* 803B38D0 003B0830  EC 43 00 B2 */	fmuls f2, f3, f2
/* 803B38D4 003B0834  EC 23 00 72 */	fmuls f1, f3, f1
/* 803B38D8 003B0838  88 1F 00 E6 */	lbz r0, 0xe6(r31)
/* 803B38DC 003B083C  EC 03 00 32 */	fmuls f0, f3, f0
/* 803B38E0 003B0840  FC 40 10 1E */	fctiwz f2, f2
/* 803B38E4 003B0844  28 00 00 FF */	cmplwi r0, 0xff
/* 803B38E8 003B0848  FC 20 08 1E */	fctiwz f1, f1
/* 803B38EC 003B084C  FC 00 00 1E */	fctiwz f0, f0
/* 803B38F0 003B0850  D8 41 00 40 */	stfd f2, 0x40(r1)
/* 803B38F4 003B0854  D8 21 00 38 */	stfd f1, 0x38(r1)
/* 803B38F8 003B0858  80 81 00 44 */	lwz r4, 0x44(r1)
/* 803B38FC 003B085C  D8 01 00 30 */	stfd f0, 0x30(r1)
/* 803B3900 003B0860  80 A1 00 3C */	lwz r5, 0x3c(r1)
/* 803B3904 003B0864  80 C1 00 34 */	lwz r6, 0x34(r1)
/* 803B3908 003B0868  41 82 00 34 */	beq lbl_803B393C
/* 803B390C 003B086C  A0 7F 00 52 */	lhz r3, 0x52(r31)
/* 803B3910 003B0870  54 80 04 3E */	clrlwi r0, r4, 0x10
/* 803B3914 003B0874  7C 03 00 40 */	cmplw r3, r0
/* 803B3918 003B0878  40 82 00 24 */	bne lbl_803B393C
/* 803B391C 003B087C  A0 7F 00 54 */	lhz r3, 0x54(r31)
/* 803B3920 003B0880  54 A0 04 3E */	clrlwi r0, r5, 0x10
/* 803B3924 003B0884  7C 03 00 40 */	cmplw r3, r0
/* 803B3928 003B0888  40 82 00 14 */	bne lbl_803B393C
/* 803B392C 003B088C  A0 7F 00 56 */	lhz r3, 0x56(r31)
/* 803B3930 003B0890  54 C0 04 3E */	clrlwi r0, r6, 0x10
/* 803B3934 003B0894  7C 03 00 40 */	cmplw r3, r0
/* 803B3938 003B0898  41 82 00 24 */	beq lbl_803B395C
lbl_803B393C:
/* 803B393C 003B089C  B0 9F 00 52 */	sth r4, 0x52(r31)
/* 803B3940 003B08A0  38 00 00 00 */	li r0, 0
/* 803B3944 003B08A4  B0 BF 00 54 */	sth r5, 0x54(r31)
/* 803B3948 003B08A8  B0 DF 00 56 */	sth r6, 0x56(r31)
/* 803B394C 003B08AC  80 7F 00 24 */	lwz r3, 0x24(r31)
/* 803B3950 003B08B0  60 63 00 02 */	ori r3, r3, 2
/* 803B3954 003B08B4  90 7F 00 24 */	stw r3, 0x24(r31)
/* 803B3958 003B08B8  98 1F 00 E6 */	stb r0, 0xe6(r31)
lbl_803B395C:
/* 803B395C 003B08BC  C0 62 D6 7C */	lfs f3, lbl_805AF39C@sda21(r2)
/* 803B3960 003B08C0  C0 41 00 20 */	lfs f2, 0x20(r1)
/* 803B3964 003B08C4  C0 21 00 24 */	lfs f1, 0x24(r1)
/* 803B3968 003B08C8  C0 01 00 28 */	lfs f0, 0x28(r1)
/* 803B396C 003B08CC  EC 43 00 B2 */	fmuls f2, f3, f2
/* 803B3970 003B08D0  EC 23 00 72 */	fmuls f1, f3, f1
/* 803B3974 003B08D4  88 1F 00 E7 */	lbz r0, 0xe7(r31)
/* 803B3978 003B08D8  EC 03 00 32 */	fmuls f0, f3, f0
/* 803B397C 003B08DC  FC 40 10 1E */	fctiwz f2, f2
/* 803B3980 003B08E0  28 00 00 FF */	cmplwi r0, 0xff
/* 803B3984 003B08E4  FC 20 08 1E */	fctiwz f1, f1
/* 803B3988 003B08E8  FC 00 00 1E */	fctiwz f0, f0
/* 803B398C 003B08EC  D8 41 00 40 */	stfd f2, 0x40(r1)
/* 803B3990 003B08F0  D8 21 00 38 */	stfd f1, 0x38(r1)
/* 803B3994 003B08F4  80 81 00 44 */	lwz r4, 0x44(r1)
/* 803B3998 003B08F8  D8 01 00 30 */	stfd f0, 0x30(r1)
/* 803B399C 003B08FC  80 A1 00 3C */	lwz r5, 0x3c(r1)
/* 803B39A0 003B0900  80 C1 00 34 */	lwz r6, 0x34(r1)
/* 803B39A4 003B0904  41 82 00 34 */	beq lbl_803B39D8
/* 803B39A8 003B0908  A0 7F 00 58 */	lhz r3, 0x58(r31)
/* 803B39AC 003B090C  54 80 04 3E */	clrlwi r0, r4, 0x10
/* 803B39B0 003B0910  7C 03 00 40 */	cmplw r3, r0
/* 803B39B4 003B0914  40 82 00 24 */	bne lbl_803B39D8
/* 803B39B8 003B0918  A0 7F 00 5A */	lhz r3, 0x5a(r31)
/* 803B39BC 003B091C  54 A0 04 3E */	clrlwi r0, r5, 0x10
/* 803B39C0 003B0920  7C 03 00 40 */	cmplw r3, r0
/* 803B39C4 003B0924  40 82 00 14 */	bne lbl_803B39D8
/* 803B39C8 003B0928  A0 7F 00 5C */	lhz r3, 0x5c(r31)
/* 803B39CC 003B092C  54 C0 04 3E */	clrlwi r0, r6, 0x10
/* 803B39D0 003B0930  7C 03 00 40 */	cmplw r3, r0
/* 803B39D4 003B0934  41 82 00 24 */	beq lbl_803B39F8
lbl_803B39D8:
/* 803B39D8 003B0938  B0 9F 00 58 */	sth r4, 0x58(r31)
/* 803B39DC 003B093C  38 00 00 00 */	li r0, 0
/* 803B39E0 003B0940  B0 BF 00 5A */	sth r5, 0x5a(r31)
/* 803B39E4 003B0944  B0 DF 00 5C */	sth r6, 0x5c(r31)
/* 803B39E8 003B0948  80 7F 00 24 */	lwz r3, 0x24(r31)
/* 803B39EC 003B094C  60 63 00 04 */	ori r3, r3, 4
/* 803B39F0 003B0950  90 7F 00 24 */	stw r3, 0x24(r31)
/* 803B39F4 003B0954  98 1F 00 E7 */	stb r0, 0xe7(r31)
lbl_803B39F8:
/* 803B39F8 003B0958  80 1F 00 F0 */	lwz r0, 0xf0(r31)
/* 803B39FC 003B095C  54 00 00 01 */	rlwinm. r0, r0, 0, 0, 0
/* 803B3A00 003B0960  41 82 00 30 */	beq lbl_803B3A30
/* 803B3A04 003B0964  3C 60 80 3E */	lis r3, itdOffTab@ha
/* 803B3A08 003B0968  57 C0 8D FC */	rlwinm r0, r30, 0x11, 0x17, 0x1e
/* 803B3A0C 003B096C  38 83 8B D0 */	addi r4, r3, itdOffTab@l
/* 803B3A10 003B0970  7C 64 02 2E */	lhzx r3, r4, r0
/* 803B3A14 003B0974  7C 04 02 2E */	lhzx r0, r4, r0
/* 803B3A18 003B0978  B0 7F 00 D0 */	sth r3, 0xd0(r31)
/* 803B3A1C 003B097C  20 00 00 20 */	subfic r0, r0, 0x20
/* 803B3A20 003B0980  B0 1F 00 D2 */	sth r0, 0xd2(r31)
/* 803B3A24 003B0984  80 1F 00 24 */	lwz r0, 0x24(r31)
/* 803B3A28 003B0988  60 00 02 00 */	ori r0, r0, 0x200
/* 803B3A2C 003B098C  90 1F 00 24 */	stw r0, 0x24(r31)
lbl_803B3A30:
/* 803B3A30 003B0990  80 01 00 54 */	lwz r0, 0x54(r1)
/* 803B3A34 003B0994  83 E1 00 4C */	lwz r31, 0x4c(r1)
/* 803B3A38 003B0998  83 C1 00 48 */	lwz r30, 0x48(r1)
/* 803B3A3C 003B099C  7C 08 03 A6 */	mtlr r0
/* 803B3A40 003B09A0  38 21 00 50 */	addi r1, r1, 0x50
/* 803B3A44 003B09A4  4E 80 00 20 */	blr

.global hwOff
hwOff:
/* 803B3A48 003B09A8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3A4C 003B09AC  7C 08 02 A6 */	mflr r0
/* 803B3A50 003B09B0  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3A54 003B09B4  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B3A58 003B09B8  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3A5C 003B09BC  7C 63 02 14 */	add r3, r3, r0
/* 803B3A60 003B09C0  4B FF A3 05 */	bl salDeactivateVoice
/* 803B3A64 003B09C4  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3A68 003B09C8  7C 08 03 A6 */	mtlr r0
/* 803B3A6C 003B09CC  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3A70 003B09D0  4E 80 00 20 */	blr

.global hwSetAUXProcessingCallbacks
hwSetAUXProcessingCallbacks:
/* 803B3A74 003B09D4  54 60 06 3E */	clrlwi r0, r3, 0x18
/* 803B3A78 003B09D8  3C 60 80 56 */	lis r3, dspStudio@ha
/* 803B3A7C 003B09DC  1D 00 00 BC */	mulli r8, r0, 0xbc
/* 803B3A80 003B09E0  38 03 F2 60 */	addi r0, r3, dspStudio@l
/* 803B3A84 003B09E4  7C 60 42 14 */	add r3, r0, r8
/* 803B3A88 003B09E8  90 83 00 AC */	stw r4, 0xac(r3)
/* 803B3A8C 003B09EC  90 A3 00 B4 */	stw r5, 0xb4(r3)
/* 803B3A90 003B09F0  90 C3 00 B0 */	stw r6, 0xb0(r3)
/* 803B3A94 003B09F4  90 E3 00 B8 */	stw r7, 0xb8(r3)
/* 803B3A98 003B09F8  4E 80 00 20 */	blr

.global hwActivateStudio
hwActivateStudio:
/* 803B3A9C 003B09FC  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3AA0 003B0A00  7C 08 02 A6 */	mflr r0
/* 803B3AA4 003B0A04  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3AA8 003B0A08  4B FF 77 21 */	bl salActivateStudio
/* 803B3AAC 003B0A0C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3AB0 003B0A10  7C 08 03 A6 */	mtlr r0
/* 803B3AB4 003B0A14  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3AB8 003B0A18  4E 80 00 20 */	blr

.global hwDeactivateStudio
hwDeactivateStudio:
/* 803B3ABC 003B0A1C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3AC0 003B0A20  7C 08 02 A6 */	mflr r0
/* 803B3AC4 003B0A24  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3AC8 003B0A28  4B FF 78 51 */	bl salDeactivateStudio
/* 803B3ACC 003B0A2C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3AD0 003B0A30  7C 08 03 A6 */	mtlr r0
/* 803B3AD4 003B0A34  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3AD8 003B0A38  4E 80 00 20 */	blr

.global hwAddInput
hwAddInput:
/* 803B3ADC 003B0A3C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3AE0 003B0A40  7C 08 02 A6 */	mflr r0
/* 803B3AE4 003B0A44  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3AE8 003B0A48  54 60 06 3E */	clrlwi r0, r3, 0x18
/* 803B3AEC 003B0A4C  1C A0 00 BC */	mulli r5, r0, 0xbc
/* 803B3AF0 003B0A50  3C 60 80 56 */	lis r3, dspStudio@ha
/* 803B3AF4 003B0A54  38 03 F2 60 */	addi r0, r3, dspStudio@l
/* 803B3AF8 003B0A58  7C 60 2A 14 */	add r3, r0, r5
/* 803B3AFC 003B0A5C  4B FF A3 91 */	bl salAddStudioInput
/* 803B3B00 003B0A60  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3B04 003B0A64  7C 08 03 A6 */	mtlr r0
/* 803B3B08 003B0A68  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3B0C 003B0A6C  4E 80 00 20 */	blr

.global hwRemoveInput
hwRemoveInput:
/* 803B3B10 003B0A70  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3B14 003B0A74  7C 08 02 A6 */	mflr r0
/* 803B3B18 003B0A78  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3B1C 003B0A7C  54 60 06 3E */	clrlwi r0, r3, 0x18
/* 803B3B20 003B0A80  1C A0 00 BC */	mulli r5, r0, 0xbc
/* 803B3B24 003B0A84  3C 60 80 56 */	lis r3, dspStudio@ha
/* 803B3B28 003B0A88  38 03 F2 60 */	addi r0, r3, dspStudio@l
/* 803B3B2C 003B0A8C  7C 60 2A 14 */	add r3, r0, r5
/* 803B3B30 003B0A90  4B FF A4 05 */	bl salRemoveStudioInput
/* 803B3B34 003B0A94  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3B38 003B0A98  7C 08 03 A6 */	mtlr r0
/* 803B3B3C 003B0A9C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3B40 003B0AA0  4E 80 00 20 */	blr

.global hwChangeStudio
hwChangeStudio:
/* 803B3B44 003B0AA4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3B48 003B0AA8  7C 08 02 A6 */	mflr r0
/* 803B3B4C 003B0AAC  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3B50 003B0AB0  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B3B54 003B0AB4  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3B58 003B0AB8  7C 63 02 14 */	add r3, r3, r0
/* 803B3B5C 003B0ABC  4B FF A2 69 */	bl salReconnectVoice
/* 803B3B60 003B0AC0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3B64 003B0AC4  7C 08 03 A6 */	mtlr r0
/* 803B3B68 003B0AC8  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3B6C 003B0ACC  4E 80 00 20 */	blr

.global hwGetPos
hwGetPos:
/* 803B3B70 003B0AD0  1C A3 00 F4 */	mulli r5, r3, 0xf4
/* 803B3B74 003B0AD4  80 CD AF 54 */	lwz r6, dspVoice@sda21(r13)
/* 803B3B78 003B0AD8  7C 86 2A 14 */	add r4, r6, r5
/* 803B3B7C 003B0ADC  88 04 00 EC */	lbz r0, 0xec(r4)
/* 803B3B80 003B0AE0  28 00 00 02 */	cmplwi r0, 2
/* 803B3B84 003B0AE4  41 82 00 0C */	beq lbl_803B3B90
/* 803B3B88 003B0AE8  38 60 00 00 */	li r3, 0
/* 803B3B8C 003B0AEC  4E 80 00 20 */	blr
lbl_803B3B90:
/* 803B3B90 003B0AF0  88 04 00 90 */	lbz r0, 0x90(r4)
/* 803B3B94 003B0AF4  2C 00 00 03 */	cmpwi r0, 3
/* 803B3B98 003B0AF8  41 82 00 58 */	beq lbl_803B3BF0
/* 803B3B9C 003B0AFC  40 80 00 18 */	bge lbl_803B3BB4
/* 803B3BA0 003B0B00  2C 00 00 02 */	cmpwi r0, 2
/* 803B3BA4 003B0B04  40 80 00 5C */	bge lbl_803B3C00
/* 803B3BA8 003B0B08  2C 00 00 00 */	cmpwi r0, 0
/* 803B3BAC 003B0B0C  40 80 00 10 */	bge lbl_803B3BBC
/* 803B3BB0 003B0B10  4E 80 00 20 */	blr
lbl_803B3BB4:
/* 803B3BB4 003B0B14  2C 00 00 06 */	cmpwi r0, 6
/* 803B3BB8 003B0B18  4C 80 00 20 */	bgelr
lbl_803B3BBC:
/* 803B3BBC 003B0B1C  7C 66 2A 14 */	add r3, r6, r5
/* 803B3BC0 003B0B20  80 03 00 78 */	lwz r0, 0x78(r3)
/* 803B3BC4 003B0B24  80 63 00 20 */	lwz r3, 0x20(r3)
/* 803B3BC8 003B0B28  54 00 08 3C */	slwi r0, r0, 1
/* 803B3BCC 003B0B2C  7C 00 18 50 */	subf r0, r0, r3
/* 803B3BD0 003B0B30  54 64 07 3E */	clrlwi r4, r3, 0x1c
/* 803B3BD4 003B0B34  54 00 E1 3E */	srwi r0, r0, 4
/* 803B3BD8 003B0B38  28 04 00 02 */	cmplwi r4, 2
/* 803B3BDC 003B0B3C  1C 60 00 0E */	mulli r3, r0, 0xe
/* 803B3BE0 003B0B40  4D 80 00 20 */	bltlr
/* 803B3BE4 003B0B44  7C 64 1A 14 */	add r3, r4, r3
/* 803B3BE8 003B0B48  38 63 FF FE */	addi r3, r3, -2
/* 803B3BEC 003B0B4C  4E 80 00 20 */	blr
lbl_803B3BF0:
/* 803B3BF0 003B0B50  80 64 00 78 */	lwz r3, 0x78(r4)
/* 803B3BF4 003B0B54  80 04 00 20 */	lwz r0, 0x20(r4)
/* 803B3BF8 003B0B58  7C 63 00 50 */	subf r3, r3, r0
/* 803B3BFC 003B0B5C  4E 80 00 20 */	blr
lbl_803B3C00:
/* 803B3C00 003B0B60  80 64 00 78 */	lwz r3, 0x78(r4)
/* 803B3C04 003B0B64  80 04 00 20 */	lwz r0, 0x20(r4)
/* 803B3C08 003B0B68  54 63 F8 7E */	srwi r3, r3, 1
/* 803B3C0C 003B0B6C  7C 63 00 50 */	subf r3, r3, r0
/* 803B3C10 003B0B70  4E 80 00 20 */	blr

.global hwFlushStream
hwFlushStream:
/* 803B3C14 003B0B74  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 803B3C18 003B0B78  7C 08 02 A6 */	mflr r0
/* 803B3C1C 003B0B7C  90 01 00 34 */	stw r0, 0x34(r1)
/* 803B3C20 003B0B80  39 61 00 30 */	addi r11, r1, 0x30
/* 803B3C24 003B0B84  4B FD 5E 51 */	bl _savegpr_25
/* 803B3C28 003B0B88  7C 79 1B 78 */	mr r25, r3
/* 803B3C2C 003B0B8C  7C 9D 23 78 */	mr r29, r4
/* 803B3C30 003B0B90  7C BA 2B 78 */	mr r26, r5
/* 803B3C34 003B0B94  7C FB 3B 78 */	mr r27, r7
/* 803B3C38 003B0B98  7D 1C 43 78 */	mr r28, r8
/* 803B3C3C 003B0B9C  7C C3 33 78 */	mr r3, r6
/* 803B3C40 003B0BA0  38 81 00 08 */	addi r4, r1, 8
/* 803B3C44 003B0BA4  48 00 0E C9 */	bl aramGetStreamBufferAddress
/* 803B3C48 003B0BA8  57 A0 06 FE */	clrlwi r0, r29, 0x1b
/* 803B3C4C 003B0BAC  57 BE 00 34 */	rlwinm r30, r29, 0, 0, 0x1a
/* 803B3C50 003B0BB0  7F 5A 02 14 */	add r26, r26, r0
/* 803B3C54 003B0BB4  7C 7F 1B 78 */	mr r31, r3
/* 803B3C58 003B0BB8  38 1A 00 1F */	addi r0, r26, 0x1f
/* 803B3C5C 003B0BBC  7F B9 F2 14 */	add r29, r25, r30
/* 803B3C60 003B0BC0  54 1A 00 34 */	rlwinm r26, r0, 0, 0, 0x1a
/* 803B3C64 003B0BC4  7F A3 EB 78 */	mr r3, r29
/* 803B3C68 003B0BC8  7F 44 D3 78 */	mr r4, r26
/* 803B3C6C 003B0BCC  4B FC AE 75 */	bl DCStoreRange
/* 803B3C70 003B0BD0  7F A3 EB 78 */	mr r3, r29
/* 803B3C74 003B0BD4  7F 45 D3 78 */	mr r5, r26
/* 803B3C78 003B0BD8  7F 67 DB 78 */	mr r7, r27
/* 803B3C7C 003B0BDC  7F 88 E3 78 */	mr r8, r28
/* 803B3C80 003B0BE0  7C 9F F2 14 */	add r4, r31, r30
/* 803B3C84 003B0BE4  38 C0 00 01 */	li r6, 1
/* 803B3C88 003B0BE8  48 00 03 89 */	bl aramUploadData
/* 803B3C8C 003B0BEC  39 61 00 30 */	addi r11, r1, 0x30
/* 803B3C90 003B0BF0  4B FD 5E 31 */	bl _restgpr_25
/* 803B3C94 003B0BF4  80 01 00 34 */	lwz r0, 0x34(r1)
/* 803B3C98 003B0BF8  7C 08 03 A6 */	mtlr r0
/* 803B3C9C 003B0BFC  38 21 00 30 */	addi r1, r1, 0x30
/* 803B3CA0 003B0C00  4E 80 00 20 */	blr

.global hwInitStream
hwInitStream:
/* 803B3CA4 003B0C04  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3CA8 003B0C08  7C 08 02 A6 */	mflr r0
/* 803B3CAC 003B0C0C  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3CB0 003B0C10  48 00 0D 55 */	bl aramAllocateStreamBuffer
/* 803B3CB4 003B0C14  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3CB8 003B0C18  7C 08 03 A6 */	mtlr r0
/* 803B3CBC 003B0C1C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3CC0 003B0C20  4E 80 00 20 */	blr

.global hwExitStream
hwExitStream:
/* 803B3CC4 003B0C24  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3CC8 003B0C28  7C 08 02 A6 */	mflr r0
/* 803B3CCC 003B0C2C  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3CD0 003B0C30  48 00 0E 75 */	bl aramFreeStreamBuffer
/* 803B3CD4 003B0C34  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3CD8 003B0C38  7C 08 03 A6 */	mtlr r0
/* 803B3CDC 003B0C3C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3CE0 003B0C40  4E 80 00 20 */	blr

.global hwGetStreamPlayBuffer
hwGetStreamPlayBuffer:
/* 803B3CE4 003B0C44  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3CE8 003B0C48  7C 08 02 A6 */	mflr r0
/* 803B3CEC 003B0C4C  38 80 00 00 */	li r4, 0
/* 803B3CF0 003B0C50  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3CF4 003B0C54  48 00 0E 19 */	bl aramGetStreamBufferAddress
/* 803B3CF8 003B0C58  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3CFC 003B0C5C  7C 08 03 A6 */	mtlr r0
/* 803B3D00 003B0C60  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3D04 003B0C64  4E 80 00 20 */	blr

.global hwTransAddr
hwTransAddr:
/* 803B3D08 003B0C68  4E 80 00 20 */	blr

.global hwFrq2Pitch
hwFrq2Pitch:
/* 803B3D0C 003B0C6C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 803B3D10 003B0C70  7C 08 02 A6 */	mflr r0
/* 803B3D14 003B0C74  3C A0 43 30 */	lis r5, 0x4330
/* 803B3D18 003B0C78  3C 80 80 55 */	lis r4, synthInfo@ha
/* 803B3D1C 003B0C7C  90 01 00 24 */	stw r0, 0x24(r1)
/* 803B3D20 003B0C80  C8 42 D6 88 */	lfd f2, lbl_805AF3A8@sda21(r2)
/* 803B3D24 003B0C84  80 04 00 50 */	lwz r0, synthInfo@l(r4)
/* 803B3D28 003B0C88  90 61 00 0C */	stw r3, 0xc(r1)
/* 803B3D2C 003B0C8C  C0 62 D6 80 */	lfs f3, lbl_805AF3A0@sda21(r2)
/* 803B3D30 003B0C90  90 A1 00 08 */	stw r5, 8(r1)
/* 803B3D34 003B0C94  C8 01 00 08 */	lfd f0, 8(r1)
/* 803B3D38 003B0C98  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3D3C 003B0C9C  EC 20 10 28 */	fsubs f1, f0, f2
/* 803B3D40 003B0CA0  90 A1 00 10 */	stw r5, 0x10(r1)
/* 803B3D44 003B0CA4  C8 01 00 10 */	lfd f0, 0x10(r1)
/* 803B3D48 003B0CA8  EC 23 00 72 */	fmuls f1, f3, f1
/* 803B3D4C 003B0CAC  EC 00 10 28 */	fsubs f0, f0, f2
/* 803B3D50 003B0CB0  EC 21 00 24 */	fdivs f1, f1, f0
/* 803B3D54 003B0CB4  4B FD 5C 01 */	bl __cvt_fp2unsigned
/* 803B3D58 003B0CB8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 803B3D5C 003B0CBC  7C 08 03 A6 */	mtlr r0
/* 803B3D60 003B0CC0  38 21 00 20 */	addi r1, r1, 0x20
/* 803B3D64 003B0CC4  4E 80 00 20 */	blr

.global hwInitSampleMem
hwInitSampleMem:
/* 803B3D68 003B0CC8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3D6C 003B0CCC  7C 08 02 A6 */	mflr r0
/* 803B3D70 003B0CD0  7C 83 23 78 */	mr r3, r4
/* 803B3D74 003B0CD4  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3D78 003B0CD8  48 00 04 8D */	bl aramInit
/* 803B3D7C 003B0CDC  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3D80 003B0CE0  7C 08 03 A6 */	mtlr r0
/* 803B3D84 003B0CE4  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3D88 003B0CE8  4E 80 00 20 */	blr

.global hwExitSampleMem
hwExitSampleMem:
/* 803B3D8C 003B0CEC  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3D90 003B0CF0  7C 08 02 A6 */	mflr r0
/* 803B3D94 003B0CF4  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3D98 003B0CF8  48 00 07 59 */	bl aramExit
/* 803B3D9C 003B0CFC  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3DA0 003B0D00  7C 08 03 A6 */	mtlr r0
/* 803B3DA4 003B0D04  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3DA8 003B0D08  4E 80 00 20 */	blr

.global hwSaveSample
hwSaveSample:
/* 803B3DAC 003B0D0C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3DB0 003B0D10  7C 08 02 A6 */	mflr r0
/* 803B3DB4 003B0D14  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3DB8 003B0D18  93 E1 00 0C */	stw r31, 0xc(r1)
/* 803B3DBC 003B0D1C  7C 9F 23 78 */	mr r31, r4
/* 803B3DC0 003B0D20  80 63 00 00 */	lwz r3, 0(r3)
/* 803B3DC4 003B0D24  80 63 00 04 */	lwz r3, 4(r3)
/* 803B3DC8 003B0D28  54 60 46 3E */	srwi r0, r3, 0x18
/* 803B3DCC 003B0D2C  54 64 02 3E */	clrlwi r4, r3, 8
/* 803B3DD0 003B0D30  2C 00 00 03 */	cmpwi r0, 3
/* 803B3DD4 003B0D34  41 82 00 4C */	beq lbl_803B3E20
/* 803B3DD8 003B0D38  40 80 00 18 */	bge lbl_803B3DF0
/* 803B3DDC 003B0D3C  2C 00 00 02 */	cmpwi r0, 2
/* 803B3DE0 003B0D40  40 80 00 3C */	bge lbl_803B3E1C
/* 803B3DE4 003B0D44  2C 00 00 00 */	cmpwi r0, 0
/* 803B3DE8 003B0D48  40 80 00 10 */	bge lbl_803B3DF8
/* 803B3DEC 003B0D4C  48 00 00 34 */	b lbl_803B3E20
lbl_803B3DF0:
/* 803B3DF0 003B0D50  2C 00 00 06 */	cmpwi r0, 6
/* 803B3DF4 003B0D54  40 80 00 2C */	bge lbl_803B3E20
lbl_803B3DF8:
/* 803B3DF8 003B0D58  3C 60 24 92 */	lis r3, 0x24924925@ha
/* 803B3DFC 003B0D5C  38 04 00 0D */	addi r0, r4, 0xd
/* 803B3E00 003B0D60  38 63 49 25 */	addi r3, r3, 0x24924925@l
/* 803B3E04 003B0D64  7C 63 00 16 */	mulhwu r3, r3, r0
/* 803B3E08 003B0D68  7C 03 00 50 */	subf r0, r3, r0
/* 803B3E0C 003B0D6C  54 00 F8 7E */	srwi r0, r0, 1
/* 803B3E10 003B0D70  7C 00 1A 14 */	add r0, r0, r3
/* 803B3E14 003B0D74  54 04 00 38 */	rlwinm r4, r0, 0, 0, 0x1c
/* 803B3E18 003B0D78  48 00 00 08 */	b lbl_803B3E20
lbl_803B3E1C:
/* 803B3E1C 003B0D7C  54 84 08 3C */	slwi r4, r4, 1
lbl_803B3E20:
/* 803B3E20 003B0D80  80 7F 00 00 */	lwz r3, 0(r31)
/* 803B3E24 003B0D84  48 00 07 49 */	bl aramStoreData
/* 803B3E28 003B0D88  90 7F 00 00 */	stw r3, 0(r31)
/* 803B3E2C 003B0D8C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3E30 003B0D90  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 803B3E34 003B0D94  7C 08 03 A6 */	mtlr r0
/* 803B3E38 003B0D98  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3E3C 003B0D9C  4E 80 00 20 */	blr

.global hwSetSaveSampleCallback
hwSetSaveSampleCallback:
/* 803B3E40 003B0DA0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3E44 003B0DA4  7C 08 02 A6 */	mflr r0
/* 803B3E48 003B0DA8  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3E4C 003B0DAC  48 00 06 C9 */	bl aramSetUploadCallback
/* 803B3E50 003B0DB0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3E54 003B0DB4  7C 08 03 A6 */	mtlr r0
/* 803B3E58 003B0DB8  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3E5C 003B0DBC  4E 80 00 20 */	blr

.global hwRemoveSample
hwRemoveSample:
/* 803B3E60 003B0DC0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3E64 003B0DC4  7C 08 02 A6 */	mflr r0
/* 803B3E68 003B0DC8  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3E6C 003B0DCC  80 63 00 04 */	lwz r3, 4(r3)
/* 803B3E70 003B0DD0  54 60 46 3E */	srwi r0, r3, 0x18
/* 803B3E74 003B0DD4  54 65 02 3E */	clrlwi r5, r3, 8
/* 803B3E78 003B0DD8  2C 00 00 03 */	cmpwi r0, 3
/* 803B3E7C 003B0DDC  41 82 00 4C */	beq lbl_803B3EC8
/* 803B3E80 003B0DE0  40 80 00 18 */	bge lbl_803B3E98
/* 803B3E84 003B0DE4  2C 00 00 02 */	cmpwi r0, 2
/* 803B3E88 003B0DE8  40 80 00 3C */	bge lbl_803B3EC4
/* 803B3E8C 003B0DEC  2C 00 00 00 */	cmpwi r0, 0
/* 803B3E90 003B0DF0  40 80 00 10 */	bge lbl_803B3EA0
/* 803B3E94 003B0DF4  48 00 00 34 */	b lbl_803B3EC8
lbl_803B3E98:
/* 803B3E98 003B0DF8  2C 00 00 06 */	cmpwi r0, 6
/* 803B3E9C 003B0DFC  40 80 00 2C */	bge lbl_803B3EC8
lbl_803B3EA0:
/* 803B3EA0 003B0E00  3C 60 24 92 */	lis r3, 0x24924925@ha
/* 803B3EA4 003B0E04  38 05 00 0D */	addi r0, r5, 0xd
/* 803B3EA8 003B0E08  38 63 49 25 */	addi r3, r3, 0x24924925@l
/* 803B3EAC 003B0E0C  7C 63 00 16 */	mulhwu r3, r3, r0
/* 803B3EB0 003B0E10  7C 03 00 50 */	subf r0, r3, r0
/* 803B3EB4 003B0E14  54 00 F8 7E */	srwi r0, r0, 1
/* 803B3EB8 003B0E18  7C 00 1A 14 */	add r0, r0, r3
/* 803B3EBC 003B0E1C  54 05 00 38 */	rlwinm r5, r0, 0, 0, 0x1c
/* 803B3EC0 003B0E20  48 00 00 08 */	b lbl_803B3EC8
lbl_803B3EC4:
/* 803B3EC4 003B0E24  54 A5 08 3C */	slwi r5, r5, 1
lbl_803B3EC8:
/* 803B3EC8 003B0E28  7C 83 23 78 */	mr r3, r4
/* 803B3ECC 003B0E2C  7C A4 2B 78 */	mr r4, r5
/* 803B3ED0 003B0E30  48 00 0A 59 */	bl aramRemoveData
/* 803B3ED4 003B0E34  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3ED8 003B0E38  7C 08 03 A6 */	mtlr r0
/* 803B3EDC 003B0E3C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3EE0 003B0E40  4E 80 00 20 */	blr

.global hwSyncSampleMem
hwSyncSampleMem:
/* 803B3EE4 003B0E44  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 803B3EE8 003B0E48  7C 08 02 A6 */	mflr r0
/* 803B3EEC 003B0E4C  90 01 00 14 */	stw r0, 0x14(r1)
/* 803B3EF0 003B0E50  48 00 02 FD */	bl aramSyncTransferQueue
/* 803B3EF4 003B0E54  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803B3EF8 003B0E58  7C 08 03 A6 */	mtlr r0
/* 803B3EFC 003B0E5C  38 21 00 10 */	addi r1, r1, 0x10
/* 803B3F00 003B0E60  4E 80 00 20 */	blr

.global hwFrameDone
hwFrameDone:
/* 803B3F04 003B0E64  4E 80 00 20 */	blr

.global sndSetHooks
sndSetHooks:
/* 803B3F08 003B0E68  80 83 00 00 */	lwz r4, 0(r3)
/* 803B3F0C 003B0E6C  80 03 00 04 */	lwz r0, 4(r3)
/* 803B3F10 003B0E70  90 8D AF 84 */	stw r4, salHooks@sda21(r13)
/* 803B3F14 003B0E74  90 0D AF 88 */	stw r0, salHooks+4@sda21(r13)
/* 803B3F18 003B0E78  4E 80 00 20 */	blr

.global hwDisableHRTF
hwDisableHRTF:
/* 803B3F1C 003B0E7C  38 00 00 00 */	li r0, 0
/* 803B3F20 003B0E80  90 0D AF 44 */	stw r0, dspHRTFOn@sda21(r13)
/* 803B3F24 003B0E84  4E 80 00 20 */	blr

.global hwGetVirtualSampleID
hwGetVirtualSampleID:
/* 803B3F28 003B0E88  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B3F2C 003B0E8C  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3F30 003B0E90  7C 63 02 14 */	add r3, r3, r0
/* 803B3F34 003B0E94  88 03 00 EC */	lbz r0, 0xec(r3)
/* 803B3F38 003B0E98  28 00 00 00 */	cmplwi r0, 0
/* 803B3F3C 003B0E9C  40 82 00 0C */	bne lbl_803B3F48
/* 803B3F40 003B0EA0  38 60 FF FF */	li r3, -1
/* 803B3F44 003B0EA4  4E 80 00 20 */	blr
lbl_803B3F48:
/* 803B3F48 003B0EA8  80 63 00 E8 */	lwz r3, 0xe8(r3)
/* 803B3F4C 003B0EAC  4E 80 00 20 */	blr

.global hwVoiceInStartup
hwVoiceInStartup:
/* 803B3F50 003B0EB0  1C 03 00 F4 */	mulli r0, r3, 0xf4
/* 803B3F54 003B0EB4  80 6D AF 54 */	lwz r3, dspVoice@sda21(r13)
/* 803B3F58 003B0EB8  7C 63 02 14 */	add r3, r3, r0
/* 803B3F5C 003B0EBC  88 03 00 EC */	lbz r0, 0xec(r3)
/* 803B3F60 003B0EC0  20 00 00 01 */	subfic r0, r0, 1
/* 803B3F64 003B0EC4  7C 00 00 34 */	cntlzw r0, r0
/* 803B3F68 003B0EC8  54 03 D9 7E */	srwi r3, r0, 5
/* 803B3F6C 003B0ECC  4E 80 00 20 */	blr