Files
oot-gc/asm/OSAudioSystem.s

206 lines
9.5 KiB
ArmAsm

# OSAudioSystem.c
.include "macros.inc"
.section .text, "ax"
.balign 4
glabel __OSInitAudioSystem
/* 097F08 8009D4A8 7C0802A6 */ mflr r0
/* 097F0C 8009D4AC 90010004 */ stw r0, 4(r1)
/* 097F10 8009D4B0 9421FFD0 */ stwu r1, -0x30(r1)
/* 097F14 8009D4B4 BF210014 */ stmw r25, 0x14(r1)
/* 097F18 8009D4B8 4BFFFFD1 */ bl OSGetArenaHi
/* 097F1C 8009D4BC 3C808100 */ lis r4, 0x8100
/* 097F20 8009D4C0 38A00080 */ li r5, 0x80
/* 097F24 8009D4C4 3863FF80 */ addi r3, r3, -128
/* 097F28 8009D4C8 4BF67FFD */ bl memcpy
/* 097F2C 8009D4CC 3C60800F */ lis r3, DSPInitCode@ha
/* 097F30 8009D4D0 38830BC8 */ addi r4, r3, DSPInitCode@l
/* 097F34 8009D4D4 3C608100 */ lis r3, 0x8100
/* 097F38 8009D4D8 38A00080 */ li r5, 0x80
/* 097F3C 8009D4DC 4BF67FE9 */ bl memcpy
/* 097F40 8009D4E0 3C608100 */ lis r3, 0x8100
/* 097F44 8009D4E4 38800080 */ li r4, 0x80
/* 097F48 8009D4E8 48000295 */ bl DCFlushRange
/* 097F4C 8009D4EC 3C60CC00 */ lis r3, DSP_REGS_BASE@ha
/* 097F50 8009D4F0 38635000 */ addi r3, r3, DSP_REGS_BASE@l
/* 097F54 8009D4F4 38000043 */ li r0, 0x43
/* 097F58 8009D4F8 B0030012 */ sth r0, DSP_12(r3)
/* 097F5C 8009D4FC 3BE3000A */ addi r31, r3, DSP_0A
/* 097F60 8009D500 380008AC */ li r0, 0x8ac
/* 097F64 8009D504 B003000A */ sth r0, DSP_0A(r3)
/* 097F68 8009D508 A003000A */ lhz r0, DSP_0A(r3)
/* 097F6C 8009D50C 60000001 */ ori r0, r0, 1
/* 097F70 8009D510 B003000A */ sth r0, DSP_0A(r3)
lbl_8009D514:
/* 097F74 8009D514 A01F0000 */ lhz r0, 0(r31)
/* 097F78 8009D518 540007FF */ clrlwi. r0, r0, 0x1f
/* 097F7C 8009D51C 4082FFF8 */ bne lbl_8009D514
/* 097F80 8009D520 38000000 */ li r0, 0
/* 097F84 8009D524 3C80CC00 */ lis r4, DSP_REGS_BASE@ha
/* 097F88 8009D528 B0045000 */ sth r0, (DSP_REGS_BASE + DSP_00)@l(r4)
lbl_8009D52C:
/* 097F8C 8009D52C 3BC45000 */ addi r30, r4, 0x5000
/* 097F90 8009D530 A47E0004 */ lhzu r3, 4(r30)
/* 097F94 8009D534 3BA45000 */ addi r29, r4, 0x5000
/* 097F98 8009D538 A41D0006 */ lhzu r0, 6(r29)
/* 097F9C 8009D53C 5060801E */ rlwimi r0, r3, 0x10, 0, 0xf
/* 097FA0 8009D540 54000001 */ rlwinm. r0, r0, 0, 0, 0
/* 097FA4 8009D544 4082FFE8 */ bne lbl_8009D52C
/* 097FA8 8009D548 3C60CC00 */ lis r3, DSP_REGS_BASE@ha
/* 097FAC 8009D54C 3C000100 */ lis r0, 0x100
/* 097FB0 8009D550 3B635000 */ addi r27, r3, DSP_REGS_BASE@l
/* 097FB4 8009D554 941B0020 */ stwu r0, DSP_20(r27)
/* 097FB8 8009D558 38000000 */ li r0, 0
/* 097FBC 8009D55C 3B435000 */ addi r26, r3, DSP_REGS_BASE@l
/* 097FC0 8009D560 941A0024 */ stwu r0, DSP_24(r26)
/* 097FC4 8009D564 38000020 */ li r0, 0x20
/* 097FC8 8009D568 3B235000 */ addi r25, r3, DSP_REGS_BASE@l
/* 097FCC 8009D56C 94190028 */ stwu r0, DSP_28(r25)
/* 097FD0 8009D570 A07F0000 */ lhz r3, 0(r31)
/* 097FD4 8009D574 48000008 */ b lbl_8009D57C
lbl_8009D578:
/* 097FD8 8009D578 A07F0000 */ lhz r3, 0(r31)
lbl_8009D57C:
/* 097FDC 8009D57C 546006B5 */ rlwinm. r0, r3, 0, 0x1a, 0x1a
/* 097FE0 8009D580 4182FFF8 */ beq lbl_8009D578
/* 097FE4 8009D584 B07F0000 */ sth r3, 0(r31)
/* 097FE8 8009D588 48004D39 */ bl OSGetTick
/* 097FEC 8009D58C 7C7C1B78 */ mr r28, r3
lbl_8009D590:
/* 097FF0 8009D590 48004D31 */ bl OSGetTick
/* 097FF4 8009D594 7C1C1850 */ subf r0, r28, r3
/* 097FF8 8009D598 2C000892 */ cmpwi r0, 0x892
/* 097FFC 8009D59C 4180FFF4 */ blt lbl_8009D590
/* 098000 8009D5A0 3C000100 */ lis r0, 0x100
/* 098004 8009D5A4 901B0000 */ stw r0, 0(r27)
/* 098008 8009D5A8 38600000 */ li r3, 0
/* 09800C 8009D5AC 38000020 */ li r0, 0x20
/* 098010 8009D5B0 907A0000 */ stw r3, 0(r26)
/* 098014 8009D5B4 90190000 */ stw r0, 0(r25)
/* 098018 8009D5B8 A07F0000 */ lhz r3, 0(r31)
/* 09801C 8009D5BC 48000008 */ b lbl_8009D5C4
lbl_8009D5C0:
/* 098020 8009D5C0 A07F0000 */ lhz r3, 0(r31)
lbl_8009D5C4:
/* 098024 8009D5C4 546006B5 */ rlwinm. r0, r3, 0, 0x1a, 0x1a
/* 098028 8009D5C8 4182FFF8 */ beq lbl_8009D5C0
/* 09802C 8009D5CC B07F0000 */ sth r3, 0(r31)
/* 098030 8009D5D0 A01F0000 */ lhz r0, 0(r31)
/* 098034 8009D5D4 54000566 */ rlwinm r0, r0, 0, 0x15, 0x13
/* 098038 8009D5D8 B01F0000 */ sth r0, 0(r31)
lbl_8009D5DC:
/* 09803C 8009D5DC A01F0000 */ lhz r0, 0(r31)
/* 098040 8009D5E0 5400056B */ rlwinm. r0, r0, 0, 0x15, 0x15
/* 098044 8009D5E4 4082FFF8 */ bne lbl_8009D5DC
/* 098048 8009D5E8 A01F0000 */ lhz r0, 0(r31)
/* 09804C 8009D5EC 540007B8 */ rlwinm r0, r0, 0, 0x1e, 0x1c
/* 098050 8009D5F0 B01F0000 */ sth r0, 0(r31)
/* 098054 8009D5F4 A01E0000 */ lhz r0, 0(r30)
/* 098058 8009D5F8 48000008 */ b lbl_8009D600
lbl_8009D5FC:
/* 09805C 8009D5FC A01E0000 */ lhz r0, 0(r30)
lbl_8009D600:
/* 098060 8009D600 5405043E */ clrlwi r5, r0, 0x10
/* 098064 8009D604 54000421 */ rlwinm. r0, r0, 0, 0x10, 0x10
/* 098068 8009D608 4182FFF4 */ beq lbl_8009D5FC
/* 09806C 8009D60C A01F0000 */ lhz r0, 0(r31)
/* 098070 8009D610 A09D0000 */ lhz r4, 0(r29)
/* 098074 8009D614 60000004 */ ori r0, r0, 4
/* 098078 8009D618 B01F0000 */ sth r0, 0(r31)
/* 09807C 8009D61C 380008AC */ li r0, 0x8ac
/* 098080 8009D620 B01F0000 */ sth r0, 0(r31)
/* 098084 8009D624 A01F0000 */ lhz r0, 0(r31)
/* 098088 8009D628 60000001 */ ori r0, r0, 1
/* 09808C 8009D62C B01F0000 */ sth r0, 0(r31)
lbl_8009D630:
/* 098090 8009D630 A01F0000 */ lhz r0, 0(r31)
/* 098094 8009D634 540007FF */ clrlwi. r0, r0, 0x1f
/* 098098 8009D638 4082FFF8 */ bne lbl_8009D630
/* 09809C 8009D63C 4BFFFE4D */ bl OSGetArenaHi
/* 0980A0 8009D640 3883FF80 */ addi r4, r3, -128
/* 0980A4 8009D644 3C608100 */ lis r3, 0x8100
/* 0980A8 8009D648 38A00080 */ li r5, 0x80
/* 0980AC 8009D64C 4BF67E79 */ bl memcpy
/* 0980B0 8009D650 BB210014 */ lmw r25, 0x14(r1)
/* 0980B4 8009D654 80010034 */ lwz r0, 0x34(r1)
/* 0980B8 8009D658 38210030 */ addi r1, r1, 0x30
/* 0980BC 8009D65C 7C0803A6 */ mtlr r0
/* 0980C0 8009D660 4E800020 */ blr
glabel __OSStopAudioSystem
/* 0980C4 8009D664 7C0802A6 */ mflr r0
/* 0980C8 8009D668 3C60CC00 */ lis r3, DSP_REGS_BASE@ha
/* 0980CC 8009D66C 90010004 */ stw r0, 4(r1)
/* 0980D0 8009D670 38000804 */ li r0, 0x804
/* 0980D4 8009D674 9421FFF0 */ stwu r1, -0x10(r1)
/* 0980D8 8009D678 93E1000C */ stw r31, 0xc(r1)
/* 0980DC 8009D67C 3BE35000 */ addi r31, r3, DSP_REGS_BASE@l
/* 0980E0 8009D680 38635000 */ addi r3, r3, DSP_REGS_BASE@l
/* 0980E4 8009D684 93C10008 */ stw r30, 8(r1)
/* 0980E8 8009D688 B01F000A */ sth r0, DSP_0A(r31)
/* 0980EC 8009D68C A0030036 */ lhz r0, DSP_36(r3)
/* 0980F0 8009D690 5400045E */ rlwinm r0, r0, 0, 0x11, 0xf
/* 0980F4 8009D694 B0030036 */ sth r0, DSP_36(r3)
/* 0980F8 8009D698 A41F000A */ lhzu r0, DSP_0A(r31)
/* 0980FC 8009D69C 48000008 */ b lbl_8009D6A4
lbl_8009D6A0:
/* 098100 8009D6A0 A01F0000 */ lhz r0, DSP_00(r31)
lbl_8009D6A4:
/* 098104 8009D6A4 5400056B */ rlwinm. r0, r0, 0, 0x15, 0x15
/* 098108 8009D6A8 4082FFF8 */ bne lbl_8009D6A0
/* 09810C 8009D6AC A01F0000 */ lhz r0, DSP_00(r31)
/* 098110 8009D6B0 48000008 */ b lbl_8009D6B8
lbl_8009D6B4:
/* 098114 8009D6B4 A01F0000 */ lhz r0, DSP_00(r31)
lbl_8009D6B8:
/* 098118 8009D6B8 540005AD */ rlwinm. r0, r0, 0, 0x16, 0x16
/* 09811C 8009D6BC 4082FFF8 */ bne lbl_8009D6B4
/* 098120 8009D6C0 380008AC */ li r0, 0x8ac
/* 098124 8009D6C4 3C60CC00 */ lis r3, DSP_REGS_BASE@ha
/* 098128 8009D6C8 B01F0000 */ sth r0, DSP_00(r31)
/* 09812C 8009D6CC 38000000 */ li r0, 0
/* 098130 8009D6D0 B0035000 */ sth r0, (DSP_REGS_BASE + DSP_00)@l(r3)
/* 098134 8009D6D4 38835000 */ addi r4, r3, DSP_REGS_BASE@l
lbl_8009D6D8:
/* 098138 8009D6D8 A0640004 */ lhz r3, DSP_04(r4)
/* 09813C 8009D6DC A0040006 */ lhz r0, DSP_06(r4)
/* 098140 8009D6E0 5060801E */ rlwimi r0, r3, 0x10, 0, 0xf
/* 098144 8009D6E4 54000001 */ rlwinm. r0, r0, 0, 0, 0
/* 098148 8009D6E8 4082FFF0 */ bne lbl_8009D6D8
/* 09814C 8009D6EC 48004BD5 */ bl OSGetTick
/* 098150 8009D6F0 7C7E1B78 */ mr r30, r3
lbl_8009D6F4:
/* 098154 8009D6F4 48004BCD */ bl OSGetTick
/* 098158 8009D6F8 7C1E1850 */ subf r0, r30, r3
/* 09815C 8009D6FC 2C00002C */ cmpwi r0, 0x2c
/* 098160 8009D700 4180FFF4 */ blt lbl_8009D6F4
/* 098164 8009D704 A01F0000 */ lhz r0, DSP_00(r31)
/* 098168 8009D708 60000001 */ ori r0, r0, 1
/* 09816C 8009D70C B01F0000 */ sth r0, DSP_00(r31)
/* 098170 8009D710 A01F0000 */ lhz r0, DSP_00(r31)
/* 098174 8009D714 48000008 */ b lbl_8009D71C
lbl_8009D718:
/* 098178 8009D718 A01F0000 */ lhz r0, DSP_00(r31)
lbl_8009D71C:
/* 09817C 8009D71C 540007FF */ clrlwi. r0, r0, 0x1f
/* 098180 8009D720 4082FFF8 */ bne lbl_8009D718
/* 098184 8009D724 80010014 */ lwz r0, 0x14(r1)
/* 098188 8009D728 83E1000C */ lwz r31, 0xc(r1)
/* 09818C 8009D72C 83C10008 */ lwz r30, 8(r1)
/* 098190 8009D730 38210010 */ addi r1, r1, 0x10
/* 098194 8009D734 7C0803A6 */ mtlr r0
/* 098198 8009D738 4E800020 */ blr
.section .data, "wa"
.balign 8
/* 000EDC48 800F0BC8 0080 */
DSPInitCode:
.long 0x029F0010, 0x029F0033, 0x029F0034, 0x029F0035, 0x029F0036, 0x029F0037, 0x029F0038, 0x029F0039
.long 0x12061203, 0x12041205, 0x00808000, 0x0088FFFF, 0x00841000, 0x0064001D, 0x02180000, 0x81001C1E
.long 0x00441B1E, 0x00840800, 0x00640027, 0x191E0000, 0x00DEFFFC, 0x02A08000, 0x029C0028, 0x16FC0054
.long 0x16FD4348, 0x002102FF, 0x02FF02FF, 0x02FF02FF, 0x02FF02FF, 0x00000000, 0x00000000, 0x00000000