prime/asm/Dolphin/os/OSResetSW.s

273 lines
13 KiB
ArmAsm

.include "macros.inc"
.section .sbss
.balign 8
.global ResetCallback
ResetCallback:
.skip 0x4
.global Down
Down:
.skip 0x4
.global LastState
LastState:
.skip 0x4
.skip 0x4
.global HoldUp
HoldUp:
.skip 0x8
.global HoldDown
HoldDown:
.skip 0x8
.section .text, "ax"
.global __OSResetSWInterruptHandler
__OSResetSWInterruptHandler:
/* 8038349C 003803FC 7C 08 02 A6 */ mflr r0
/* 803834A0 00380400 90 01 00 04 */ stw r0, 4(r1)
/* 803834A4 00380404 94 21 FF D8 */ stwu r1, -0x28(r1)
/* 803834A8 00380408 93 E1 00 24 */ stw r31, 0x24(r1)
/* 803834AC 0038040C 93 C1 00 20 */ stw r30, 0x20(r1)
/* 803834B0 00380410 93 A1 00 1C */ stw r29, 0x1c(r1)
/* 803834B4 00380414 48 00 1F 15 */ bl __OSGetSystemTime
/* 803834B8 00380418 3C A0 80 00 */ lis r5, 0x800000F8@ha
/* 803834BC 0038041C 90 8D AD 5C */ stw r4, HoldDown+4@sda21(r13)
/* 803834C0 00380420 80 05 00 F8 */ lwz r0, 0x800000F8@l(r5)
/* 803834C4 00380424 3C 80 43 1C */ lis r4, 0x431BDE83@ha
/* 803834C8 00380428 38 84 DE 83 */ addi r4, r4, 0x431BDE83@l
/* 803834CC 0038042C 90 6D AD 58 */ stw r3, HoldDown@sda21(r13)
/* 803834D0 00380430 54 00 F0 BE */ srwi r0, r0, 2
/* 803834D4 00380434 7C 04 00 16 */ mulhwu r0, r4, r0
/* 803834D8 00380438 54 00 8B FE */ srwi r0, r0, 0xf
/* 803834DC 0038043C 1C 00 00 64 */ mulli r0, r0, 0x64
/* 803834E0 00380440 54 1D E8 FE */ srwi r29, r0, 3
/* 803834E4 00380444 3B C0 00 00 */ li r30, 0
/* 803834E8 00380448 3F E0 CC 00 */ lis r31, 0xcc00
lbl_803834EC:
/* 803834EC 0038044C 48 00 1E DD */ bl __OSGetSystemTime
/* 803834F0 00380450 80 CD AD 5C */ lwz r6, HoldDown+4@sda21(r13)
/* 803834F4 00380454 6F C5 80 00 */ xoris r5, r30, 0x8000
/* 803834F8 00380458 80 0D AD 58 */ lwz r0, HoldDown@sda21(r13)
/* 803834FC 0038045C 7C 86 20 10 */ subfc r4, r6, r4
/* 80383500 00380460 7C 00 19 10 */ subfe r0, r0, r3
/* 80383504 00380464 6C 03 80 00 */ xoris r3, r0, 0x8000
/* 80383508 00380468 7C 1D 20 10 */ subfc r0, r29, r4
/* 8038350C 0038046C 7C A5 19 10 */ subfe r5, r5, r3
/* 80383510 00380470 7C A3 19 10 */ subfe r5, r3, r3
/* 80383514 00380474 7C A5 00 D1 */ neg. r5, r5
/* 80383518 00380478 41 82 00 10 */ beq lbl_80383528
/* 8038351C 0038047C 80 1F 30 00 */ lwz r0, 0x3000(r31)
/* 80383520 00380480 54 00 03 DF */ rlwinm. r0, r0, 0, 0xf, 0xf
/* 80383524 00380484 41 82 FF C8 */ beq lbl_803834EC
lbl_80383528:
/* 80383528 00380488 3C 60 CC 00 */ lis r3, 0xCC003000@ha
/* 8038352C 0038048C 80 03 30 00 */ lwz r0, 0xCC003000@l(r3)
/* 80383530 00380490 54 00 03 DF */ rlwinm. r0, r0, 0, 0xf, 0xf
/* 80383534 00380494 40 82 00 34 */ bne lbl_80383568
/* 80383538 00380498 38 00 00 01 */ li r0, 1
/* 8038353C 0038049C 90 0D AD 44 */ stw r0, Down@sda21(r13)
/* 80383540 003804A0 38 60 02 00 */ li r3, 0x200
/* 80383544 003804A4 90 0D AD 48 */ stw r0, LastState@sda21(r13)
/* 80383548 003804A8 4B FF E4 E1 */ bl __OSMaskInterrupts
/* 8038354C 003804AC 81 8D AD 40 */ lwz r12, ResetCallback@sda21(r13)
/* 80383550 003804B0 28 0C 00 00 */ cmplwi r12, 0
/* 80383554 003804B4 41 82 00 14 */ beq lbl_80383568
/* 80383558 003804B8 38 00 00 00 */ li r0, 0
/* 8038355C 003804BC 7D 88 03 A6 */ mtlr r12
/* 80383560 003804C0 90 0D AD 40 */ stw r0, ResetCallback@sda21(r13)
/* 80383564 003804C4 4E 80 00 21 */ blrl
lbl_80383568:
/* 80383568 003804C8 38 00 00 02 */ li r0, 2
/* 8038356C 003804CC 3C 60 CC 00 */ lis r3, 0xCC003000@ha
/* 80383570 003804D0 90 03 30 00 */ stw r0, 0xCC003000@l(r3)
/* 80383574 003804D4 80 01 00 2C */ lwz r0, 0x2c(r1)
/* 80383578 003804D8 83 E1 00 24 */ lwz r31, 0x24(r1)
/* 8038357C 003804DC 83 C1 00 20 */ lwz r30, 0x20(r1)
/* 80383580 003804E0 83 A1 00 1C */ lwz r29, 0x1c(r1)
/* 80383584 003804E4 38 21 00 28 */ addi r1, r1, 0x28
/* 80383588 003804E8 7C 08 03 A6 */ mtlr r0
/* 8038358C 003804EC 4E 80 00 20 */ blr
.global OSGetResetButtonState
OSGetResetButtonState:
/* 80383590 003804F0 7C 08 02 A6 */ mflr r0
/* 80383594 003804F4 90 01 00 04 */ stw r0, 4(r1)
/* 80383598 003804F8 94 21 FF E8 */ stwu r1, -0x18(r1)
/* 8038359C 003804FC 93 E1 00 14 */ stw r31, 0x14(r1)
/* 803835A0 00380500 93 C1 00 10 */ stw r30, 0x10(r1)
/* 803835A4 00380504 93 A1 00 0C */ stw r29, 0xc(r1)
/* 803835A8 00380508 4B FF E0 B9 */ bl OSDisableInterrupts
/* 803835AC 0038050C 7C 7E 1B 78 */ mr r30, r3
/* 803835B0 00380510 48 00 1E 19 */ bl __OSGetSystemTime
/* 803835B4 00380514 3C A0 CC 00 */ lis r5, 0xCC003000@ha
/* 803835B8 00380518 80 05 30 00 */ lwz r0, 0xCC003000@l(r5)
/* 803835BC 0038051C 54 00 03 DF */ rlwinm. r0, r0, 0, 0xf, 0xf
/* 803835C0 00380520 40 82 00 DC */ bne lbl_8038369C
/* 803835C4 00380524 80 0D AD 44 */ lwz r0, Down@sda21(r13)
/* 803835C8 00380528 2C 00 00 00 */ cmpwi r0, 0
/* 803835CC 0038052C 40 82 00 40 */ bne lbl_8038360C
/* 803835D0 00380530 80 0D AD 50 */ lwz r0, HoldUp@sda21(r13)
/* 803835D4 00380534 38 C0 00 00 */ li r6, 0
/* 803835D8 00380538 80 AD AD 54 */ lwz r5, HoldUp+4@sda21(r13)
/* 803835DC 0038053C 38 E0 00 01 */ li r7, 1
/* 803835E0 00380540 7C 00 32 78 */ xor r0, r0, r6
/* 803835E4 00380544 7C A5 32 78 */ xor r5, r5, r6
/* 803835E8 00380548 90 ED AD 44 */ stw r7, Down@sda21(r13)
/* 803835EC 0038054C 7C A0 03 79 */ or. r0, r5, r0
/* 803835F0 00380550 41 82 00 08 */ beq lbl_803835F8
/* 803835F4 00380554 48 00 00 08 */ b lbl_803835FC
lbl_803835F8:
/* 803835F8 00380558 7C C7 33 78 */ mr r7, r6
lbl_803835FC:
/* 803835FC 0038055C 90 8D AD 5C */ stw r4, HoldDown+4@sda21(r13)
/* 80383600 00380560 7C FD 3B 78 */ mr r29, r7
/* 80383604 00380564 90 6D AD 58 */ stw r3, HoldDown@sda21(r13)
/* 80383608 00380568 48 00 01 48 */ b lbl_80383750
lbl_8038360C:
/* 8038360C 0038056C 80 0D AD 50 */ lwz r0, HoldUp@sda21(r13)
/* 80383610 00380570 39 20 00 00 */ li r9, 0
/* 80383614 00380574 80 AD AD 54 */ lwz r5, HoldUp+4@sda21(r13)
/* 80383618 00380578 39 40 00 01 */ li r10, 1
/* 8038361C 0038057C 7C 00 4A 78 */ xor r0, r0, r9
/* 80383620 00380580 7C A5 4A 78 */ xor r5, r5, r9
/* 80383624 00380584 7C A0 03 79 */ or. r0, r5, r0
/* 80383628 00380588 40 82 00 58 */ bne lbl_80383680
/* 8038362C 0038058C 3C C0 80 00 */ lis r6, 0x800000F8@ha
/* 80383630 00380590 80 AD AD 5C */ lwz r5, HoldDown+4@sda21(r13)
/* 80383634 00380594 80 E6 00 F8 */ lwz r7, 0x800000F8@l(r6)
/* 80383638 00380598 3C C0 43 1C */ lis r6, 0x431BDE83@ha
/* 8038363C 0038059C 39 06 DE 83 */ addi r8, r6, 0x431BDE83@l
/* 80383640 003805A0 80 0D AD 58 */ lwz r0, HoldDown@sda21(r13)
/* 80383644 003805A4 54 E6 F0 BE */ srwi r6, r7, 2
/* 80383648 003805A8 7C C8 30 16 */ mulhwu r6, r8, r6
/* 8038364C 003805AC 54 C6 8B FE */ srwi r6, r6, 0xf
/* 80383650 003805B0 1C C6 00 64 */ mulli r6, r6, 0x64
/* 80383654 003805B4 7C E5 20 10 */ subfc r7, r5, r4
/* 80383658 003805B8 7C 00 19 10 */ subfe r0, r0, r3
/* 8038365C 003805BC 54 C8 E8 FE */ srwi r8, r6, 3
/* 80383660 003805C0 6C 05 80 00 */ xoris r5, r0, 0x8000
/* 80383664 003805C4 6D 26 80 00 */ xoris r6, r9, 0x8000
/* 80383668 003805C8 7C 07 40 10 */ subfc r0, r7, r8
/* 8038366C 003805CC 7C A5 31 10 */ subfe r5, r5, r6
/* 80383670 003805D0 7C A6 31 10 */ subfe r5, r6, r6
/* 80383674 003805D4 7C A5 00 D1 */ neg. r5, r5
/* 80383678 003805D8 40 82 00 08 */ bne lbl_80383680
/* 8038367C 003805DC 7D 2A 4B 78 */ mr r10, r9
lbl_80383680:
/* 80383680 003805E0 2C 0A 00 00 */ cmpwi r10, 0
/* 80383684 003805E4 41 82 00 0C */ beq lbl_80383690
/* 80383688 003805E8 38 00 00 01 */ li r0, 1
/* 8038368C 003805EC 48 00 00 08 */ b lbl_80383694
lbl_80383690:
/* 80383690 003805F0 38 00 00 00 */ li r0, 0
lbl_80383694:
/* 80383694 003805F4 7C 1D 03 78 */ mr r29, r0
/* 80383698 003805F8 48 00 00 B8 */ b lbl_80383750
lbl_8038369C:
/* 8038369C 003805FC 80 0D AD 44 */ lwz r0, Down@sda21(r13)
/* 803836A0 00380600 2C 00 00 00 */ cmpwi r0, 0
/* 803836A4 00380604 41 82 00 34 */ beq lbl_803836D8
/* 803836A8 00380608 80 AD AD 48 */ lwz r5, LastState@sda21(r13)
/* 803836AC 0038060C 38 00 00 00 */ li r0, 0
/* 803836B0 00380610 90 0D AD 44 */ stw r0, Down@sda21(r13)
/* 803836B4 00380614 2C 05 00 00 */ cmpwi r5, 0
/* 803836B8 00380618 3B A5 00 00 */ addi r29, r5, 0
/* 803836BC 0038061C 41 82 00 10 */ beq lbl_803836CC
/* 803836C0 00380620 90 8D AD 54 */ stw r4, HoldUp+4@sda21(r13)
/* 803836C4 00380624 90 6D AD 50 */ stw r3, HoldUp@sda21(r13)
/* 803836C8 00380628 48 00 00 88 */ b lbl_80383750
lbl_803836CC:
/* 803836CC 0038062C 90 0D AD 54 */ stw r0, HoldUp+4@sda21(r13)
/* 803836D0 00380630 90 0D AD 50 */ stw r0, HoldUp@sda21(r13)
/* 803836D4 00380634 48 00 00 7C */ b lbl_80383750
lbl_803836D8:
/* 803836D8 00380638 80 CD AD 50 */ lwz r6, HoldUp@sda21(r13)
/* 803836DC 0038063C 39 00 00 00 */ li r8, 0
/* 803836E0 00380640 80 ED AD 54 */ lwz r7, HoldUp+4@sda21(r13)
/* 803836E4 00380644 7C C0 42 78 */ xor r0, r6, r8
/* 803836E8 00380648 7C E5 42 78 */ xor r5, r7, r8
/* 803836EC 0038064C 7C A0 03 79 */ or. r0, r5, r0
/* 803836F0 00380650 41 82 00 50 */ beq lbl_80383740
/* 803836F4 00380654 3C A0 80 00 */ lis r5, 0x800000F8@ha
/* 803836F8 00380658 80 05 00 F8 */ lwz r0, 0x800000F8@l(r5)
/* 803836FC 0038065C 3C A0 10 62 */ lis r5, 0x10624DD3@ha
/* 80383700 00380660 38 A5 4D D3 */ addi r5, r5, 0x10624DD3@l
/* 80383704 00380664 54 00 F0 BE */ srwi r0, r0, 2
/* 80383708 00380668 7C 05 00 16 */ mulhwu r0, r5, r0
/* 8038370C 0038066C 54 00 D1 BE */ srwi r0, r0, 6
/* 80383710 00380670 1C 00 00 28 */ mulli r0, r0, 0x28
/* 80383714 00380674 7C E7 20 10 */ subfc r7, r7, r4
/* 80383718 00380678 7C A6 19 10 */ subfe r5, r6, r3
/* 8038371C 0038067C 6C A6 80 00 */ xoris r6, r5, 0x8000
/* 80383720 00380680 6D 05 80 00 */ xoris r5, r8, 0x8000
/* 80383724 00380684 7C 00 38 10 */ subfc r0, r0, r7
/* 80383728 00380688 7C A5 31 10 */ subfe r5, r5, r6
/* 8038372C 0038068C 7C A6 31 10 */ subfe r5, r6, r6
/* 80383730 00380690 7C A5 00 D1 */ neg. r5, r5
/* 80383734 00380694 41 82 00 0C */ beq lbl_80383740
/* 80383738 00380698 3B A0 00 01 */ li r29, 1
/* 8038373C 0038069C 48 00 00 14 */ b lbl_80383750
lbl_80383740:
/* 80383740 003806A0 38 00 00 00 */ li r0, 0
/* 80383744 003806A4 90 0D AD 54 */ stw r0, HoldUp+4@sda21(r13)
/* 80383748 003806A8 3B A0 00 00 */ li r29, 0
/* 8038374C 003806AC 90 0D AD 50 */ stw r0, HoldUp@sda21(r13)
lbl_80383750:
/* 80383750 003806B0 3C A0 80 00 */ lis r5, 0x800030E3@ha
/* 80383754 003806B4 93 AD AD 48 */ stw r29, LastState@sda21(r13)
/* 80383758 003806B8 88 05 30 E3 */ lbz r0, 0x800030E3@l(r5)
/* 8038375C 003806BC 54 00 06 BF */ clrlwi. r0, r0, 0x1a
/* 80383760 003806C0 41 82 00 A0 */ beq lbl_80383800
/* 80383764 003806C4 1D 40 00 3C */ mulli r10, r0, 0x3c
/* 80383768 003806C8 80 05 00 F8 */ lwz r0, 0xf8(r5)
/* 8038376C 003806CC 81 2D AC EC */ lwz r9, __OSStartTime+4@sda21(r13)
/* 80383770 003806D0 81 0D AC E8 */ lwz r8, __OSStartTime@sda21(r13)
/* 80383774 003806D4 54 06 F0 BE */ srwi r6, r0, 2
/* 80383778 003806D8 7D 40 FE 70 */ srawi r0, r10, 0x1f
/* 8038377C 003806DC 7C E0 31 D6 */ mullw r7, r0, r6
/* 80383780 003806E0 7C 0A 30 16 */ mulhwu r0, r10, r6
/* 80383784 003806E4 7C AA 31 D6 */ mullw r5, r10, r6
/* 80383788 003806E8 7D 29 28 14 */ addc r9, r9, r5
/* 8038378C 003806EC 3B E0 00 00 */ li r31, 0
/* 80383790 003806F0 7C E7 02 14 */ add r7, r7, r0
/* 80383794 003806F4 7C 0A F9 D6 */ mullw r0, r10, r31
/* 80383798 003806F8 7C 07 02 14 */ add r0, r7, r0
/* 8038379C 003806FC 7D 08 01 14 */ adde r8, r8, r0
/* 803837A0 00380700 6D 07 80 00 */ xoris r7, r8, 0x8000
/* 803837A4 00380704 6C 65 80 00 */ xoris r5, r3, 0x8000
/* 803837A8 00380708 7C 04 48 10 */ subfc r0, r4, r9
/* 803837AC 0038070C 7C A5 39 10 */ subfe r5, r5, r7
/* 803837B0 00380710 7C A7 39 10 */ subfe r5, r7, r7
/* 803837B4 00380714 7C A5 00 D1 */ neg. r5, r5
/* 803837B8 00380718 41 82 00 48 */ beq lbl_80383800
/* 803837BC 0038071C 7C 89 20 10 */ subfc r4, r9, r4
/* 803837C0 00380720 7C 68 19 10 */ subfe r3, r8, r3
/* 803837C4 00380724 38 A0 00 00 */ li r5, 0
/* 803837C8 00380728 48 00 64 05 */ bl __div2i
/* 803837CC 0038072C 38 A0 00 00 */ li r5, 0
/* 803837D0 00380730 38 C0 00 02 */ li r6, 2
/* 803837D4 00380734 48 00 63 F9 */ bl __div2i
/* 803837D8 00380738 38 00 00 01 */ li r0, 1
/* 803837DC 0038073C 7C 84 00 38 */ and r4, r4, r0
/* 803837E0 00380740 7C 60 F8 38 */ and r0, r3, r31
/* 803837E4 00380744 7C 83 FA 78 */ xor r3, r4, r31
/* 803837E8 00380748 7C 00 FA 78 */ xor r0, r0, r31
/* 803837EC 0038074C 7C 60 03 79 */ or. r0, r3, r0
/* 803837F0 00380750 40 82 00 0C */ bne lbl_803837FC
/* 803837F4 00380754 3B A0 00 01 */ li r29, 1
/* 803837F8 00380758 48 00 00 08 */ b lbl_80383800
lbl_803837FC:
/* 803837FC 0038075C 3B A0 00 00 */ li r29, 0
lbl_80383800:
/* 80383800 00380760 7F C3 F3 78 */ mr r3, r30
/* 80383804 00380764 4B FF DE 85 */ bl OSRestoreInterrupts
/* 80383808 00380768 7F A3 EB 78 */ mr r3, r29
/* 8038380C 0038076C 80 01 00 1C */ lwz r0, 0x1c(r1)
/* 80383810 00380770 83 E1 00 14 */ lwz r31, 0x14(r1)
/* 80383814 00380774 83 C1 00 10 */ lwz r30, 0x10(r1)
/* 80383818 00380778 83 A1 00 0C */ lwz r29, 0xc(r1)
/* 8038381C 0038077C 38 21 00 18 */ addi r1, r1, 0x18
/* 80383820 00380780 7C 08 03 A6 */ mtlr r0
/* 80383824 00380784 4E 80 00 20 */ blr