mirror of https://github.com/zeldaret/tp.git
Merge pull request #267 from hatal175/dvdlow2
Only DVDLowRead left in dvdlow
This commit is contained in:
commit
f030d04b14
|
|
@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes)
|
|||
.init | 97.972973% | 9280 | 9472
|
||||
.extab | 100.000000% | 96 | 96
|
||||
.extabindex | 100.000000% | 96 | 96
|
||||
.text | 24.087902% | 866332 | 3596544
|
||||
.text | 24.117264% | 867388 | 3596544
|
||||
.ctors | 100.000000% | 448 | 448
|
||||
.dtors | 100.000000% | 32 | 32
|
||||
.rodata | 100.000000% | 193856 | 193856
|
||||
.data | 100.000000% | 197632 | 197632
|
||||
.sdata | 100.000000% | 1408 | 1408
|
||||
.sdata2 | 100.000000% | 20832 | 20832
|
||||
Total | 32.090854% | 1290268 | 4020672
|
||||
Total | 32.117119% | 1291324 | 4020672
|
||||
|
||||
## Total
|
||||
|
||||
Section | Percentage | Decompiled (bytes) | Total (bytes)
|
||||
---|---|---|---
|
||||
main.dol | 32.090854% | 1290268 | 4020672
|
||||
main.dol | 32.117119% | 1291324 | 4020672
|
||||
RELs | 33.048286% | 3800660 | 11500324
|
||||
Total | 32.800266% | 5090928 | 15520996
|
||||
Total | 32.807070% | 5091984 | 15520996
|
||||
|
||||
## RELs
|
||||
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
lbl_80347994:
|
||||
/* 80347994 7C 08 02 A6 */ mflr r0
|
||||
/* 80347998 3C 60 80 45 */ lis r3, CommandList@ha /* 0x8044C830@ha */
|
||||
/* 8034799C 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 803479A0 38 83 C8 30 */ addi r4, r3, CommandList@l /* 0x8044C830@l */
|
||||
/* 803479A4 94 21 FF F8 */ stwu r1, -8(r1)
|
||||
/* 803479A8 80 0D 91 D4 */ lwz r0, NextCommandNumber(r13)
|
||||
/* 803479AC 1C 00 00 14 */ mulli r0, r0, 0x14
|
||||
/* 803479B0 7C 64 00 2E */ lwzx r3, r4, r0
|
||||
/* 803479B4 2C 03 00 01 */ cmpwi r3, 1
|
||||
/* 803479B8 40 82 00 2C */ bne lbl_803479E4
|
||||
/* 803479BC 80 6D 91 D4 */ lwz r3, NextCommandNumber(r13)
|
||||
/* 803479C0 7C C4 02 14 */ add r6, r4, r0
|
||||
/* 803479C4 38 03 00 01 */ addi r0, r3, 1
|
||||
/* 803479C8 90 0D 91 D4 */ stw r0, NextCommandNumber(r13)
|
||||
/* 803479CC 80 66 00 04 */ lwz r3, 4(r6)
|
||||
/* 803479D0 80 86 00 08 */ lwz r4, 8(r6)
|
||||
/* 803479D4 80 A6 00 0C */ lwz r5, 0xc(r6)
|
||||
/* 803479D8 80 C6 00 10 */ lwz r6, 0x10(r6)
|
||||
/* 803479DC 48 00 00 AD */ bl Read
|
||||
/* 803479E0 48 00 00 28 */ b lbl_80347A08
|
||||
lbl_803479E4:
|
||||
/* 803479E4 2C 03 00 02 */ cmpwi r3, 2
|
||||
/* 803479E8 40 82 00 20 */ bne lbl_80347A08
|
||||
/* 803479EC 80 6D 91 D4 */ lwz r3, NextCommandNumber(r13)
|
||||
/* 803479F0 7C 84 02 14 */ add r4, r4, r0
|
||||
/* 803479F4 38 03 00 01 */ addi r0, r3, 1
|
||||
/* 803479F8 90 0D 91 D4 */ stw r0, NextCommandNumber(r13)
|
||||
/* 803479FC 80 64 00 0C */ lwz r3, 0xc(r4)
|
||||
/* 80347A00 80 84 00 10 */ lwz r4, 0x10(r4)
|
||||
/* 80347A04 48 00 04 AD */ bl DVDLowSeek
|
||||
lbl_80347A08:
|
||||
/* 80347A08 80 01 00 0C */ lwz r0, 0xc(r1)
|
||||
/* 80347A0C 38 21 00 08 */ addi r1, r1, 8
|
||||
/* 80347A10 7C 08 03 A6 */ mtlr r0
|
||||
/* 80347A14 4E 80 00 20 */ blr
|
||||
|
|
@ -112,7 +112,7 @@ lbl_80347D9C:
|
|||
/* 80347DA4 81 0D 91 C0 */ lwz r8, LastReadFinished(r13)
|
||||
/* 80347DA8 80 05 00 F8 */ lwz r0, 0x00F8(r5) /* 0x800000F8@l */
|
||||
/* 80347DAC 3C A0 10 62 */ lis r5, 0x1062 /* 0x10624DD3@ha */
|
||||
/* 80347DB0 81 2D 91 C4 */ lwz r9, data_80451744(r13)
|
||||
/* 80347DB0 81 2D 91 C4 */ lwz r9, LastReadFinished+0x4(r13)
|
||||
/* 80347DB4 38 C0 00 00 */ li r6, 0
|
||||
/* 80347DB8 54 07 F0 BE */ srwi r7, r0, 2
|
||||
/* 80347DBC 38 05 4D D3 */ addi r0, r5, 0x4DD3 /* 0x10624DD3@l */
|
||||
|
|
|
|||
|
|
@ -1,49 +0,0 @@
|
|||
lbl_80348388:
|
||||
/* 80348388 7C 08 02 A6 */ mflr r0
|
||||
/* 8034838C 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC003000@ha */
|
||||
/* 80348390 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 80348394 38 00 00 02 */ li r0, 2
|
||||
/* 80348398 94 21 FF E0 */ stwu r1, -0x20(r1)
|
||||
/* 8034839C BF 41 00 08 */ stmw r26, 8(r1)
|
||||
/* 803483A0 3B E4 30 00 */ addi r31, r4, 0x3000 /* 0xCC003000@l */
|
||||
/* 803483A4 90 04 60 04 */ stw r0, 0x6004(r4)
|
||||
/* 803483A8 83 C4 30 24 */ lwz r30, 0x3024(r4)
|
||||
/* 803483AC 57 C0 07 B8 */ rlwinm r0, r30, 0, 0x1e, 0x1c
|
||||
/* 803483B0 60 00 00 01 */ ori r0, r0, 1
|
||||
/* 803483B4 94 1F 00 24 */ stwu r0, 0x24(r31)
|
||||
/* 803483B8 4B FF A3 65 */ bl __OSGetSystemTime
|
||||
/* 803483BC 3C A0 80 00 */ lis r5, 0x8000 /* 0x800000F8@ha */
|
||||
/* 803483C0 80 05 00 F8 */ lwz r0, 0x00F8(r5) /* 0x800000F8@l */
|
||||
/* 803483C4 3C A0 43 1C */ lis r5, 0x431C /* 0x431BDE83@ha */
|
||||
/* 803483C8 38 A5 DE 83 */ addi r5, r5, 0xDE83 /* 0x431BDE83@l */
|
||||
/* 803483CC 54 00 F0 BE */ srwi r0, r0, 2
|
||||
/* 803483D0 7C 05 00 16 */ mulhwu r0, r5, r0
|
||||
/* 803483D4 54 00 8B FE */ srwi r0, r0, 0xf
|
||||
/* 803483D8 1C 00 00 0C */ mulli r0, r0, 0xc
|
||||
/* 803483DC 3B 44 00 00 */ addi r26, r4, 0
|
||||
/* 803483E0 3B 63 00 00 */ addi r27, r3, 0
|
||||
/* 803483E4 54 1C E8 FE */ srwi r28, r0, 3
|
||||
/* 803483E8 3B A0 00 00 */ li r29, 0
|
||||
lbl_803483EC:
|
||||
/* 803483EC 4B FF A3 31 */ bl __OSGetSystemTime
|
||||
/* 803483F0 7C BA 20 10 */ subfc r5, r26, r4
|
||||
/* 803483F4 7C 1B 19 10 */ subfe r0, r27, r3
|
||||
/* 803483F8 6C 04 80 00 */ xoris r4, r0, 0x8000
|
||||
/* 803483FC 6F A3 80 00 */ xoris r3, r29, 0x8000
|
||||
/* 80348400 7C 1C 28 10 */ subfc r0, r28, r5
|
||||
/* 80348404 7C 63 21 10 */ subfe r3, r3, r4
|
||||
/* 80348408 7C 64 21 10 */ subfe r3, r4, r4
|
||||
/* 8034840C 7C 63 00 D1 */ neg. r3, r3
|
||||
/* 80348410 40 82 FF DC */ bne lbl_803483EC
|
||||
/* 80348414 63 C0 00 05 */ ori r0, r30, 5
|
||||
/* 80348418 90 1F 00 00 */ stw r0, 0(r31)
|
||||
/* 8034841C 38 00 00 01 */ li r0, 1
|
||||
/* 80348420 90 0D 91 A8 */ stw r0, ResetOccurred(r13)
|
||||
/* 80348424 4B FF A2 F9 */ bl __OSGetSystemTime
|
||||
/* 80348428 90 8D 91 A4 */ stw r4, data_80451724(r13)
|
||||
/* 8034842C 90 6D 91 A0 */ stw r3, LastResetEnd(r13)
|
||||
/* 80348430 BB 41 00 08 */ lmw r26, 8(r1)
|
||||
/* 80348434 80 01 00 24 */ lwz r0, 0x24(r1)
|
||||
/* 80348438 38 21 00 20 */ addi r1, r1, 0x20
|
||||
/* 8034843C 7C 08 03 A6 */ mtlr r0
|
||||
/* 80348440 4E 80 00 20 */ blr
|
||||
|
|
@ -1,205 +0,0 @@
|
|||
lbl_803476B4:
|
||||
/* 803476B4 7C 08 02 A6 */ mflr r0
|
||||
/* 803476B8 3C 60 80 45 */ lis r3, CommandList@ha /* 0x8044C830@ha */
|
||||
/* 803476BC 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 803476C0 94 21 FD 10 */ stwu r1, -0x2f0(r1)
|
||||
/* 803476C4 BF 61 02 DC */ stmw r27, 0x2dc(r1)
|
||||
/* 803476C8 3B 84 00 00 */ addi r28, r4, 0
|
||||
/* 803476CC 3B C3 C8 30 */ addi r30, r3, CommandList@l /* 0x8044C830@l */
|
||||
/* 803476D0 3B A0 00 00 */ li r29, 0
|
||||
/* 803476D4 80 0D 91 D0 */ lwz r0, LastCommandWasRead(r13)
|
||||
/* 803476D8 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 803476DC 41 82 00 40 */ beq lbl_8034771C
|
||||
/* 803476E0 4B FF B0 3D */ bl __OSGetSystemTime
|
||||
/* 803476E4 90 8D 91 C4 */ stw r4, data_80451744(r13)
|
||||
/* 803476E8 38 00 00 00 */ li r0, 0
|
||||
/* 803476EC 90 6D 91 C0 */ stw r3, LastReadFinished(r13)
|
||||
/* 803476F0 90 0D 84 58 */ stw r0, FirstRead(r13)
|
||||
/* 803476F4 80 1E 00 C4 */ lwz r0, 0xc4(r30)
|
||||
/* 803476F8 90 1E 00 B8 */ stw r0, 0xb8(r30)
|
||||
/* 803476FC 80 1E 00 C8 */ lwz r0, 0xc8(r30)
|
||||
/* 80347700 90 1E 00 BC */ stw r0, 0xbc(r30)
|
||||
/* 80347704 80 1E 00 CC */ lwz r0, 0xcc(r30)
|
||||
/* 80347708 90 1E 00 C0 */ stw r0, 0xc0(r30)
|
||||
/* 8034770C 80 0D 91 90 */ lwz r0, StopAtNextInt(r13)
|
||||
/* 80347710 2C 00 00 01 */ cmpwi r0, 1
|
||||
/* 80347714 40 82 00 08 */ bne lbl_8034771C
|
||||
/* 80347718 63 BD 00 08 */ ori r29, r29, 8
|
||||
lbl_8034771C:
|
||||
/* 8034771C 38 00 00 00 */ li r0, 0
|
||||
/* 80347720 90 0D 91 D0 */ stw r0, LastCommandWasRead(r13)
|
||||
/* 80347724 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */
|
||||
/* 80347728 90 0D 91 90 */ stw r0, StopAtNextInt(r13)
|
||||
/* 8034772C 80 03 60 00 */ lwz r0, 0x6000(r3) /* 0xCC006000@l */
|
||||
/* 80347730 70 1F 00 2A */ andi. r31, r0, 0x2a
|
||||
/* 80347734 70 03 00 54 */ andi. r3, r0, 0x54
|
||||
/* 80347738 57 E0 08 3C */ slwi r0, r31, 1
|
||||
/* 8034773C 7C 7B 00 38 */ and r27, r3, r0
|
||||
/* 80347740 57 60 06 73 */ rlwinm. r0, r27, 0, 0x19, 0x19
|
||||
/* 80347744 41 82 00 08 */ beq lbl_8034774C
|
||||
/* 80347748 63 BD 00 08 */ ori r29, r29, 8
|
||||
lbl_8034774C:
|
||||
/* 8034774C 57 60 06 F7 */ rlwinm. r0, r27, 0, 0x1b, 0x1b
|
||||
/* 80347750 41 82 00 08 */ beq lbl_80347758
|
||||
/* 80347754 63 BD 00 01 */ ori r29, r29, 1
|
||||
lbl_80347758:
|
||||
/* 80347758 57 60 07 7B */ rlwinm. r0, r27, 0, 0x1d, 0x1d
|
||||
/* 8034775C 41 82 00 08 */ beq lbl_80347764
|
||||
/* 80347760 63 BD 00 02 */ ori r29, r29, 2
|
||||
lbl_80347764:
|
||||
/* 80347764 28 1D 00 00 */ cmplwi r29, 0
|
||||
/* 80347768 41 82 00 14 */ beq lbl_8034777C
|
||||
/* 8034776C 38 00 00 00 */ li r0, 0
|
||||
/* 80347770 90 0D 91 A8 */ stw r0, ResetOccurred(r13)
|
||||
/* 80347774 38 7E 00 68 */ addi r3, r30, 0x68
|
||||
/* 80347778 4B FF 34 C5 */ bl OSCancelAlarm
|
||||
lbl_8034777C:
|
||||
/* 8034777C 7F 60 FB 78 */ or r0, r27, r31
|
||||
/* 80347780 3F E0 CC 00 */ lis r31, 0xCC00 /* 0xCC006000@ha */
|
||||
/* 80347784 90 1F 60 00 */ stw r0, 0x6000(r31) /* 0xCC006000@l */
|
||||
/* 80347788 80 0D 91 A8 */ lwz r0, ResetOccurred(r13)
|
||||
/* 8034778C 28 00 00 00 */ cmplwi r0, 0
|
||||
/* 80347790 41 82 00 A0 */ beq lbl_80347830
|
||||
/* 80347794 4B FF AF 89 */ bl __OSGetSystemTime
|
||||
/* 80347798 3C A0 80 00 */ lis r5, 0x8000 /* 0x800000F8@ha */
|
||||
/* 8034779C 80 ED 91 A0 */ lwz r7, LastResetEnd(r13)
|
||||
/* 803477A0 80 C5 00 F8 */ lwz r6, 0x00F8(r5) /* 0x800000F8@l */
|
||||
/* 803477A4 3C A0 10 62 */ lis r5, 0x1062 /* 0x10624DD3@ha */
|
||||
/* 803477A8 38 A5 4D D3 */ addi r5, r5, 0x4DD3 /* 0x10624DD3@l */
|
||||
/* 803477AC 81 0D 91 A4 */ lwz r8, data_80451724(r13)
|
||||
/* 803477B0 54 C6 F0 BE */ srwi r6, r6, 2
|
||||
/* 803477B4 7C A5 30 16 */ mulhwu r5, r5, r6
|
||||
/* 803477B8 54 A5 D1 BE */ srwi r5, r5, 6
|
||||
/* 803477BC 1C A5 00 C8 */ mulli r5, r5, 0xc8
|
||||
/* 803477C0 7C C8 20 10 */ subfc r6, r8, r4
|
||||
/* 803477C4 7C 67 19 10 */ subfe r3, r7, r3
|
||||
/* 803477C8 38 00 00 00 */ li r0, 0
|
||||
/* 803477CC 6C 64 80 00 */ xoris r4, r3, 0x8000
|
||||
/* 803477D0 6C 03 80 00 */ xoris r3, r0, 0x8000
|
||||
/* 803477D4 7C 05 30 10 */ subfc r0, r5, r6
|
||||
/* 803477D8 7C 63 21 10 */ subfe r3, r3, r4
|
||||
/* 803477DC 7C 64 21 10 */ subfe r3, r4, r4
|
||||
/* 803477E0 7C 63 00 D1 */ neg. r3, r3
|
||||
/* 803477E4 41 82 00 4C */ beq lbl_80347830
|
||||
/* 803477E8 3B 7F 60 00 */ addi r27, r31, 0x6000
|
||||
/* 803477EC 84 1B 00 04 */ lwzu r0, 4(r27)
|
||||
/* 803477F0 54 03 07 7A */ rlwinm r3, r0, 0, 0x1d, 0x1d
|
||||
/* 803477F4 54 00 0F 7A */ rlwinm r0, r0, 1, 0x1d, 0x1d
|
||||
/* 803477F8 7C 60 00 38 */ and r0, r3, r0
|
||||
/* 803477FC 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
|
||||
/* 80347800 41 82 00 24 */ beq lbl_80347824
|
||||
/* 80347804 81 8D 91 9C */ lwz r12, ResetCoverCallback(r13)
|
||||
/* 80347808 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 8034780C 41 82 00 10 */ beq lbl_8034781C
|
||||
/* 80347810 7D 88 03 A6 */ mtlr r12
|
||||
/* 80347814 38 60 00 04 */ li r3, 4
|
||||
/* 80347818 4E 80 00 21 */ blrl
|
||||
lbl_8034781C:
|
||||
/* 8034781C 38 00 00 00 */ li r0, 0
|
||||
/* 80347820 90 0D 91 9C */ stw r0, ResetCoverCallback(r13)
|
||||
lbl_80347824:
|
||||
/* 80347824 80 1B 00 00 */ lwz r0, 0(r27)
|
||||
/* 80347828 90 1B 00 00 */ stw r0, 0(r27)
|
||||
/* 8034782C 48 00 00 58 */ b lbl_80347884
|
||||
lbl_80347830:
|
||||
/* 80347830 80 0D 91 AC */ lwz r0, WaitingCoverClose(r13)
|
||||
/* 80347834 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 80347838 41 82 00 40 */ beq lbl_80347878
|
||||
/* 8034783C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */
|
||||
/* 80347840 38 A3 60 00 */ addi r5, r3, 0x6000 /* 0xCC006000@l */
|
||||
/* 80347844 84 05 00 04 */ lwzu r0, 4(r5)
|
||||
/* 80347848 54 04 07 BC */ rlwinm r4, r0, 0, 0x1e, 0x1e
|
||||
/* 8034784C 54 03 07 7A */ rlwinm r3, r0, 0, 0x1d, 0x1d
|
||||
/* 80347850 54 00 0F 7A */ rlwinm r0, r0, 1, 0x1d, 0x1d
|
||||
/* 80347854 7C 63 00 38 */ and r3, r3, r0
|
||||
/* 80347858 54 60 07 7B */ rlwinm. r0, r3, 0, 0x1d, 0x1d
|
||||
/* 8034785C 41 82 00 08 */ beq lbl_80347864
|
||||
/* 80347860 63 BD 00 04 */ ori r29, r29, 4
|
||||
lbl_80347864:
|
||||
/* 80347864 7C 60 23 78 */ or r0, r3, r4
|
||||
/* 80347868 90 05 00 00 */ stw r0, 0(r5)
|
||||
/* 8034786C 38 00 00 00 */ li r0, 0
|
||||
/* 80347870 90 0D 91 AC */ stw r0, WaitingCoverClose(r13)
|
||||
/* 80347874 48 00 00 10 */ b lbl_80347884
|
||||
lbl_80347878:
|
||||
/* 80347878 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */
|
||||
/* 8034787C 38 00 00 00 */ li r0, 0
|
||||
/* 80347880 90 03 60 04 */ stw r0, 0x6004(r3) /* 0xCC006004@l */
|
||||
lbl_80347884:
|
||||
/* 80347884 57 A0 07 39 */ rlwinm. r0, r29, 0, 0x1c, 0x1c
|
||||
/* 80347888 41 82 00 14 */ beq lbl_8034789C
|
||||
/* 8034788C 80 0D 91 B0 */ lwz r0, Breaking(r13)
|
||||
/* 80347890 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 80347894 40 82 00 08 */ bne lbl_8034789C
|
||||
/* 80347898 57 BD 07 76 */ rlwinm r29, r29, 0, 0x1d, 0x1b
|
||||
lbl_8034789C:
|
||||
/* 8034789C 57 A0 07 FF */ clrlwi. r0, r29, 0x1f
|
||||
/* 803478A0 41 82 00 80 */ beq lbl_80347920
|
||||
/* 803478A4 80 0D 91 D4 */ lwz r0, NextCommandNumber(r13)
|
||||
/* 803478A8 1C 00 00 14 */ mulli r0, r0, 0x14
|
||||
/* 803478AC 7C 7E 00 2E */ lwzx r3, r30, r0
|
||||
/* 803478B0 2C 03 00 01 */ cmpwi r3, 1
|
||||
/* 803478B4 40 82 00 30 */ bne lbl_803478E4
|
||||
/* 803478B8 80 6D 91 D4 */ lwz r3, NextCommandNumber(r13)
|
||||
/* 803478BC 7C DE 02 14 */ add r6, r30, r0
|
||||
/* 803478C0 38 03 00 01 */ addi r0, r3, 1
|
||||
/* 803478C4 90 0D 91 D4 */ stw r0, NextCommandNumber(r13)
|
||||
/* 803478C8 80 66 00 04 */ lwz r3, 4(r6)
|
||||
/* 803478CC 80 86 00 08 */ lwz r4, 8(r6)
|
||||
/* 803478D0 80 A6 00 0C */ lwz r5, 0xc(r6)
|
||||
/* 803478D4 80 C6 00 10 */ lwz r6, 0x10(r6)
|
||||
/* 803478D8 48 00 01 B1 */ bl Read
|
||||
/* 803478DC 38 00 00 01 */ li r0, 1
|
||||
/* 803478E0 48 00 00 34 */ b lbl_80347914
|
||||
lbl_803478E4:
|
||||
/* 803478E4 2C 03 00 02 */ cmpwi r3, 2
|
||||
/* 803478E8 40 82 00 28 */ bne lbl_80347910
|
||||
/* 803478EC 80 6D 91 D4 */ lwz r3, NextCommandNumber(r13)
|
||||
/* 803478F0 7C 9E 02 14 */ add r4, r30, r0
|
||||
/* 803478F4 38 03 00 01 */ addi r0, r3, 1
|
||||
/* 803478F8 90 0D 91 D4 */ stw r0, NextCommandNumber(r13)
|
||||
/* 803478FC 80 64 00 0C */ lwz r3, 0xc(r4)
|
||||
/* 80347900 80 84 00 10 */ lwz r4, 0x10(r4)
|
||||
/* 80347904 48 00 05 AD */ bl DVDLowSeek
|
||||
/* 80347908 38 00 00 01 */ li r0, 1
|
||||
/* 8034790C 48 00 00 08 */ b lbl_80347914
|
||||
lbl_80347910:
|
||||
/* 80347910 38 00 00 00 */ li r0, 0
|
||||
lbl_80347914:
|
||||
/* 80347914 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 80347918 41 82 00 18 */ beq lbl_80347930
|
||||
/* 8034791C 48 00 00 64 */ b lbl_80347980
|
||||
lbl_80347920:
|
||||
/* 80347920 38 00 FF FF */ li r0, -1
|
||||
/* 80347924 90 1E 00 00 */ stw r0, 0(r30)
|
||||
/* 80347928 38 00 00 00 */ li r0, 0
|
||||
/* 8034792C 90 0D 91 D4 */ stw r0, NextCommandNumber(r13)
|
||||
lbl_80347930:
|
||||
/* 80347930 38 61 00 10 */ addi r3, r1, 0x10
|
||||
/* 80347934 4B FF 46 CD */ bl OSClearContext
|
||||
/* 80347938 38 61 00 10 */ addi r3, r1, 0x10
|
||||
/* 8034793C 4B FF 44 FD */ bl OSSetCurrentContext
|
||||
/* 80347940 28 1D 00 00 */ cmplwi r29, 0
|
||||
/* 80347944 41 82 00 2C */ beq lbl_80347970
|
||||
/* 80347948 81 8D 91 98 */ lwz r12, Callback(r13)
|
||||
/* 8034794C 38 00 00 00 */ li r0, 0
|
||||
/* 80347950 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 80347954 90 0D 91 98 */ stw r0, Callback(r13)
|
||||
/* 80347958 41 82 00 10 */ beq lbl_80347968
|
||||
/* 8034795C 7D 88 03 A6 */ mtlr r12
|
||||
/* 80347960 38 7D 00 00 */ addi r3, r29, 0
|
||||
/* 80347964 4E 80 00 21 */ blrl
|
||||
lbl_80347968:
|
||||
/* 80347968 38 00 00 00 */ li r0, 0
|
||||
/* 8034796C 90 0D 91 B0 */ stw r0, Breaking(r13)
|
||||
lbl_80347970:
|
||||
/* 80347970 38 61 00 10 */ addi r3, r1, 0x10
|
||||
/* 80347974 4B FF 46 8D */ bl OSClearContext
|
||||
/* 80347978 7F 83 E3 78 */ mr r3, r28
|
||||
/* 8034797C 4B FF 44 BD */ bl OSSetCurrentContext
|
||||
lbl_80347980:
|
||||
/* 80347980 BB 61 02 DC */ lmw r27, 0x2dc(r1)
|
||||
/* 80347984 80 01 02 F4 */ lwz r0, 0x2f4(r1)
|
||||
/* 80347988 38 21 02 F0 */ addi r1, r1, 0x2f0
|
||||
/* 8034798C 7C 08 03 A6 */ mtlr r0
|
||||
/* 80347990 4E 80 00 20 */ blr
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
lbl_80D5985C:
|
||||
/* 80D5985C 94 21 FF D0 */ stwu r1, -0x30(r1)
|
||||
/* 80D59860 7C 08 02 A6 */ mflr r0
|
||||
/* 80D59864 90 01 00 34 */ stw r0, 0x34(r1)
|
||||
/* 80D59868 93 E1 00 2C */ stw r31, 0x2c(r1)
|
||||
/* 80D5986C 93 C1 00 28 */ stw r30, 0x28(r1)
|
||||
/* 80D59870 7C 7E 1B 78 */ mr r30, r3
|
||||
/* 80D59874 7C 9F 23 78 */ mr r31, r4
|
||||
/* 80D59878 C0 03 04 D0 */ lfs f0, 0x4d0(r3)
|
||||
/* 80D5987C D0 01 00 10 */ stfs f0, 0x10(r1)
|
||||
/* 80D59880 C0 03 04 D4 */ lfs f0, 0x4d4(r3)
|
||||
/* 80D59884 D0 01 00 14 */ stfs f0, 0x14(r1)
|
||||
/* 80D59888 C0 03 04 D8 */ lfs f0, 0x4d8(r3)
|
||||
/* 80D5988C D0 01 00 18 */ stfs f0, 0x18(r1)
|
||||
/* 80D59890 80 03 00 B0 */ lwz r0, 0xb0(r3)
|
||||
/* 80D59894 54 00 C6 3E */ rlwinm r0, r0, 0x18, 0x18, 0x1f
|
||||
/* 80D59898 28 00 00 FF */ cmplwi r0, 0xff
|
||||
/* 80D5989C 41 82 00 34 */ beq lbl_80D598D0
|
||||
/* 80D598A0 80 7E 05 68 */ lwz r3, 0x568(r30)
|
||||
/* 80D598A4 38 80 00 00 */ li r4, 0
|
||||
/* 80D598A8 4B 2F 7F 09 */ bl dPath_GetPnt__FPC5dPathi
|
||||
/* 80D598AC C0 03 00 04 */ lfs f0, 4(r3)
|
||||
/* 80D598B0 D0 01 00 10 */ stfs f0, 0x10(r1)
|
||||
/* 80D598B4 C0 03 00 08 */ lfs f0, 8(r3)
|
||||
/* 80D598B8 D0 01 00 14 */ stfs f0, 0x14(r1)
|
||||
/* 80D598BC C0 03 00 0C */ lfs f0, 0xc(r3)
|
||||
/* 80D598C0 D0 01 00 18 */ stfs f0, 0x18(r1)
|
||||
/* 80D598C4 80 1E 00 B0 */ lwz r0, 0xb0(r30)
|
||||
/* 80D598C8 54 00 42 1E */ rlwinm r0, r0, 8, 8, 0xf
|
||||
/* 80D598CC 7F FF 03 78 */ or r31, r31, r0
|
||||
lbl_80D598D0:
|
||||
/* 80D598D0 88 1E 04 E2 */ lbz r0, 0x4e2(r30)
|
||||
/* 80D598D4 7C 07 07 74 */ extsb r7, r0
|
||||
/* 80D598D8 38 00 00 00 */ li r0, 0
|
||||
/* 80D598DC 90 01 00 08 */ stw r0, 8(r1)
|
||||
/* 80D598E0 38 60 02 97 */ li r3, 0x297
|
||||
/* 80D598E4 28 1E 00 00 */ cmplwi r30, 0
|
||||
/* 80D598E8 41 82 00 0C */ beq lbl_80D598F4
|
||||
/* 80D598EC 80 9E 00 04 */ lwz r4, 4(r30)
|
||||
/* 80D598F0 48 00 00 08 */ b lbl_80D598F8
|
||||
lbl_80D598F4:
|
||||
/* 80D598F4 38 80 FF FF */ li r4, -1
|
||||
lbl_80D598F8:
|
||||
/* 80D598F8 7F E5 FB 78 */ mr r5, r31
|
||||
/* 80D598FC 38 C1 00 10 */ addi r6, r1, 0x10
|
||||
/* 80D59900 39 1E 04 DC */ addi r8, r30, 0x4dc
|
||||
/* 80D59904 39 20 00 00 */ li r9, 0
|
||||
/* 80D59908 39 40 FF FF */ li r10, -1
|
||||
/* 80D5990C 4B 2C 05 E5 */ bl fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i
|
||||
/* 80D59910 83 E1 00 2C */ lwz r31, 0x2c(r1)
|
||||
/* 80D59914 83 C1 00 28 */ lwz r30, 0x28(r1)
|
||||
/* 80D59918 80 01 00 34 */ lwz r0, 0x34(r1)
|
||||
/* 80D5991C 7C 08 03 A6 */ mtlr r0
|
||||
/* 80D59920 38 21 00 30 */ addi r1, r1, 0x30
|
||||
/* 80D59924 4E 80 00 20 */ blr
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
lbl_80D59928:
|
||||
/* 80D59928 94 21 FF F0 */ stwu r1, -0x10(r1)
|
||||
/* 80D5992C 7C 08 02 A6 */ mflr r0
|
||||
/* 80D59930 90 01 00 14 */ stw r0, 0x14(r1)
|
||||
/* 80D59934 93 E1 00 0C */ stw r31, 0xc(r1)
|
||||
/* 80D59938 93 C1 00 08 */ stw r30, 8(r1)
|
||||
/* 80D5993C 7C 7E 1B 78 */ mr r30, r3
|
||||
/* 80D59940 80 03 04 A0 */ lwz r0, 0x4a0(r3)
|
||||
/* 80D59944 54 00 07 39 */ rlwinm. r0, r0, 0, 0x1c, 0x1c
|
||||
/* 80D59948 40 82 00 1C */ bne lbl_80D59964
|
||||
/* 80D5994C 28 1E 00 00 */ cmplwi r30, 0
|
||||
/* 80D59950 41 82 00 08 */ beq lbl_80D59958
|
||||
/* 80D59954 4B 2B F2 11 */ bl __ct__10fopAc_ac_cFv
|
||||
lbl_80D59958:
|
||||
/* 80D59958 80 1E 04 A0 */ lwz r0, 0x4a0(r30)
|
||||
/* 80D5995C 60 00 00 08 */ ori r0, r0, 8
|
||||
/* 80D59960 90 1E 04 A0 */ stw r0, 0x4a0(r30)
|
||||
lbl_80D59964:
|
||||
/* 80D59964 80 1E 00 B0 */ lwz r0, 0xb0(r30)
|
||||
/* 80D59968 54 03 C6 3E */ rlwinm r3, r0, 0x18, 0x18, 0x1f
|
||||
/* 80D5996C 88 1E 04 BA */ lbz r0, 0x4ba(r30)
|
||||
/* 80D59970 7C 04 07 74 */ extsb r4, r0
|
||||
/* 80D59974 4B 2F 7E 79 */ bl dPath_GetRoomPath__Fii
|
||||
/* 80D59978 90 7E 05 68 */ stw r3, 0x568(r30)
|
||||
/* 80D5997C 80 7E 05 68 */ lwz r3, 0x568(r30)
|
||||
/* 80D59980 38 80 00 00 */ li r4, 0
|
||||
/* 80D59984 4B 2F 7E 2D */ bl dPath_GetPnt__FPC5dPathi
|
||||
/* 80D59988 7C 7F 1B 78 */ mr r31, r3
|
||||
/* 80D5998C 80 7E 05 68 */ lwz r3, 0x568(r30)
|
||||
/* 80D59990 38 80 00 01 */ li r4, 1
|
||||
/* 80D59994 4B 2F 7E 1D */ bl dPath_GetPnt__FPC5dPathi
|
||||
/* 80D59998 7C 64 1B 78 */ mr r4, r3
|
||||
/* 80D5999C C0 1F 00 04 */ lfs f0, 4(r31)
|
||||
/* 80D599A0 D0 1E 04 D0 */ stfs f0, 0x4d0(r30)
|
||||
/* 80D599A4 C0 1F 00 08 */ lfs f0, 8(r31)
|
||||
/* 80D599A8 D0 1E 04 D4 */ stfs f0, 0x4d4(r30)
|
||||
/* 80D599AC C0 1F 00 0C */ lfs f0, 0xc(r31)
|
||||
/* 80D599B0 D0 1E 04 D8 */ stfs f0, 0x4d8(r30)
|
||||
/* 80D599B4 38 7F 00 04 */ addi r3, r31, 4
|
||||
/* 80D599B8 38 84 00 04 */ addi r4, r4, 4
|
||||
/* 80D599BC 4B 51 72 49 */ bl cLib_targetAngleY__FPC3VecPC3Vec
|
||||
/* 80D599C0 B0 7E 04 DE */ sth r3, 0x4de(r30)
|
||||
/* 80D599C4 38 60 00 04 */ li r3, 4
|
||||
/* 80D599C8 83 E1 00 0C */ lwz r31, 0xc(r1)
|
||||
/* 80D599CC 83 C1 00 08 */ lwz r30, 8(r1)
|
||||
/* 80D599D0 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
/* 80D599D4 7C 08 03 A6 */ mtlr r0
|
||||
/* 80D599D8 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 80D599DC 4E 80 00 20 */ blr
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
lbl_80D599E0:
|
||||
/* 80D599E0 94 21 FF F0 */ stwu r1, -0x10(r1)
|
||||
/* 80D599E4 7C 08 02 A6 */ mflr r0
|
||||
/* 80D599E8 90 01 00 14 */ stw r0, 0x14(r1)
|
||||
/* 80D599EC 28 03 00 00 */ cmplwi r3, 0
|
||||
/* 80D599F0 41 82 00 0C */ beq lbl_80D599FC
|
||||
/* 80D599F4 38 80 00 00 */ li r4, 0
|
||||
/* 80D599F8 4B 2B F2 95 */ bl __dt__10fopAc_ac_cFv
|
||||
lbl_80D599FC:
|
||||
/* 80D599FC 38 60 00 01 */ li r3, 1
|
||||
/* 80D59A00 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
/* 80D59A04 7C 08 03 A6 */ mtlr r0
|
||||
/* 80D59A08 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 80D59A0C 4E 80 00 20 */ blr
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
lbl_80D597F8:
|
||||
/* 80D597F8 94 21 FF F0 */ stwu r1, -0x10(r1)
|
||||
/* 80D597FC 7C 08 02 A6 */ mflr r0
|
||||
/* 80D59800 90 01 00 14 */ stw r0, 0x14(r1)
|
||||
/* 80D59804 93 E1 00 0C */ stw r31, 0xc(r1)
|
||||
/* 80D59808 7C 9F 23 78 */ mr r31, r4
|
||||
/* 80D5980C 80 63 05 68 */ lwz r3, 0x568(r3)
|
||||
/* 80D59810 28 03 00 00 */ cmplwi r3, 0
|
||||
/* 80D59814 40 82 00 0C */ bne lbl_80D59820
|
||||
/* 80D59818 38 60 00 00 */ li r3, 0
|
||||
/* 80D5981C 48 00 00 2C */ b lbl_80D59848
|
||||
lbl_80D59820:
|
||||
/* 80D59820 A0 83 00 00 */ lhz r4, 0(r3)
|
||||
/* 80D59824 38 84 FF FF */ addi r4, r4, -1
|
||||
/* 80D59828 4B 2F 7F 89 */ bl dPath_GetPnt__FPC5dPathi
|
||||
/* 80D5982C C0 03 00 04 */ lfs f0, 4(r3)
|
||||
/* 80D59830 D0 1F 00 00 */ stfs f0, 0(r31)
|
||||
/* 80D59834 C0 03 00 08 */ lfs f0, 8(r3)
|
||||
/* 80D59838 D0 1F 00 04 */ stfs f0, 4(r31)
|
||||
/* 80D5983C C0 03 00 0C */ lfs f0, 0xc(r3)
|
||||
/* 80D59840 D0 1F 00 08 */ stfs f0, 8(r31)
|
||||
/* 80D59844 38 60 00 01 */ li r3, 1
|
||||
lbl_80D59848:
|
||||
/* 80D59848 83 E1 00 0C */ lwz r31, 0xc(r1)
|
||||
/* 80D5984C 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
/* 80D59850 7C 08 03 A6 */ mtlr r0
|
||||
/* 80D59854 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 80D59858 4E 80 00 20 */ blr
|
||||
|
|
@ -4,22 +4,25 @@
|
|||
//
|
||||
|
||||
#include "dolphin/dvd/dvdlow.h"
|
||||
#include "dolphin/dvd/dvd.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/os/OSAlarm.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "dolphin/os/OSReset.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
void __DVDInitWA();
|
||||
void __DVDInterruptHandler();
|
||||
void __DVDInterruptHandler(u32 arg0, OSContext* context);
|
||||
static void AlarmHandler();
|
||||
static void AlarmHandlerForTimeout();
|
||||
static void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb);
|
||||
static void SeekTwiceBeforeRead(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb);
|
||||
void DVDLowRead();
|
||||
static void Read(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb);
|
||||
static void SeekTwiceBeforeRead(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb);
|
||||
BOOL DVDLowRead(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb);
|
||||
BOOL DVDLowSeek(u32 arg0, DVDLowCallback cb);
|
||||
BOOL DVDLowWaitCoverClose(DVDLowCallback cb);
|
||||
BOOL DVDLowReadDiskID(u32 arg0, DVDLowCallback cb);
|
||||
|
|
@ -43,13 +46,10 @@ void OSInitAlarm();
|
|||
void OSCreateAlarm();
|
||||
void OSSetAlarm();
|
||||
void OSCancelAlarm();
|
||||
void OSSetCurrentContext();
|
||||
void OSClearContext();
|
||||
BOOL OSDisableInterrupts();
|
||||
void OSRestoreInterrupts(BOOL enabled);
|
||||
void __OSMaskInterrupts();
|
||||
OSTime __OSGetSystemTime();
|
||||
void DVDGetCurrentDiskID();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
|
|
@ -57,7 +57,7 @@ void DVDGetCurrentDiskID();
|
|||
|
||||
typedef struct DVDCommand {
|
||||
s32 _0;
|
||||
u32 _4;
|
||||
void* _4;
|
||||
u32 _8;
|
||||
u32 _c;
|
||||
DVDLowCallback callback;
|
||||
|
|
@ -77,16 +77,13 @@ static u32 LastLength;
|
|||
static DVDLowCallback Callback;
|
||||
|
||||
/* 8045171C-80451720 000C1C 0004+00 1/1 0/0 0/0 .sbss ResetCoverCallback */
|
||||
static u8 ResetCoverCallback[4];
|
||||
static DVDLowCallback ResetCoverCallback;
|
||||
|
||||
/* 80451720-80451724 000C20 0004+00 2/2 0/0 0/0 .sbss LastResetEnd */
|
||||
static u8 LastResetEnd[4];
|
||||
|
||||
/* 80451724-80451728 000C24 0004+00 2/2 0/0 0/0 .sbss None */
|
||||
static u8 data_80451724[4];
|
||||
static volatile OSTime LastResetEnd;
|
||||
|
||||
/* 80451728-8045172C 000C28 0004+00 2/2 0/0 0/0 .sbss ResetOccurred */
|
||||
static u8 ResetOccurred[4];
|
||||
static volatile u32 ResetOccurred;
|
||||
|
||||
/* 8045172C-80451730 000C2C 0004+00 3/3 0/0 0/0 .sbss WaitingCoverClose */
|
||||
static volatile BOOL WaitingCoverClose;
|
||||
|
|
@ -95,16 +92,13 @@ static volatile BOOL WaitingCoverClose;
|
|||
static BOOL Breaking;
|
||||
|
||||
/* 80451734-80451738 000C34 0004+00 2/2 0/0 0/0 .sbss WorkAroundType */
|
||||
static u32 WorkAroundType;
|
||||
static volatile u32 WorkAroundType;
|
||||
|
||||
/* 80451738-80451740 000C38 0004+04 2/2 0/0 0/0 .sbss WorkAroundSeekLocation */
|
||||
static u32 WorkAroundSeekLocation[2];
|
||||
|
||||
/* 80451740-80451744 000C40 0004+00 2/2 0/0 0/0 .sbss LastReadFinished */
|
||||
static BOOL LastReadFinished;
|
||||
|
||||
/* 80451744-80451748 000C44 0004+00 2/2 0/0 0/0 .sbss None */
|
||||
static u8 data_80451744[4];
|
||||
static volatile OSTime LastReadFinished;
|
||||
|
||||
/* 80451748-8045174C 000C48 0004+00 1/1 0/0 0/0 .sbss LastReadIssued */
|
||||
static OSTime LastReadIssued;
|
||||
|
|
@ -113,7 +107,7 @@ static OSTime LastReadIssued;
|
|||
static volatile BOOL LastCommandWasRead;
|
||||
|
||||
/* 80451754-80451758 000C54 0004+00 5/5 0/0 0/0 .sbss NextCommandNumber */
|
||||
static u32 NextCommandNumber;
|
||||
static volatile u32 NextCommandNumber;
|
||||
|
||||
/* 80347674-803476B4 341FB4 0040+00 0/0 1/1 0/0 .text __DVDInitWA */
|
||||
void __DVDInitWA() {
|
||||
|
|
@ -125,10 +119,7 @@ void __DVDInitWA() {
|
|||
|
||||
/* ############################################################################################## */
|
||||
/* 8044C870-8044C898 079590 0028+00 0/1 0/0 0/0 .bss AlarmForWA */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 AlarmForWA[40];
|
||||
#pragma pop
|
||||
static OSAlarm AlarmForWA;
|
||||
|
||||
/* 8044C898-8044C8C0 0795B8 0028+00 9/11 0/0 0/0 .bss AlarmForTimeout */
|
||||
static OSAlarm AlarmForTimeout;
|
||||
|
|
@ -139,56 +130,149 @@ static OSAlarm AlarmForBreak;
|
|||
/* 8044C8E8-8044C8F4 079608 000C+00 0/1 0/0 0/0 .bss Prev */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 Prev[12];
|
||||
static u32 Prev[3];
|
||||
#pragma pop
|
||||
|
||||
/* 8044C8F4-8044C900 079614 000C+00 0/2 0/0 0/0 .bss Curr */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 Curr[12];
|
||||
static u32 Curr[3];
|
||||
#pragma pop
|
||||
|
||||
/* 804509D8-804509E0 000458 0004+04 2/2 0/0 0/0 .sdata FirstRead */
|
||||
SECTION_SDATA static u32 FirstRead[1 + 1 /* padding */] = {
|
||||
SECTION_SDATA static BOOL FirstRead[1 + 1 /* padding */] = {
|
||||
0x00000001,
|
||||
/* padding */
|
||||
0x00000000,
|
||||
};
|
||||
|
||||
/* 803476B4-80347994 341FF4 02E0+00 0/0 1/1 0/0 .text __DVDInterruptHandler */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __DVDInterruptHandler() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvdlow/__DVDInterruptHandler.s"
|
||||
void __DVDInterruptHandler(u32 arg0, OSContext* context) {
|
||||
u32 reg;
|
||||
s32 rv;
|
||||
u32 val = 0;
|
||||
u32 val2;
|
||||
u32 val3;
|
||||
u32 val4;
|
||||
OSContext localContext;
|
||||
if (LastCommandWasRead) {
|
||||
LastReadFinished = __OSGetSystemTime();
|
||||
FirstRead[0] = 0;
|
||||
Prev[0] = Curr[0];
|
||||
Prev[1] = Curr[1];
|
||||
Prev[2] = Curr[2];
|
||||
|
||||
if (StopAtNextInt == TRUE) {
|
||||
val |= 8;
|
||||
}
|
||||
}
|
||||
|
||||
LastCommandWasRead = FALSE;
|
||||
StopAtNextInt = FALSE;
|
||||
reg = __DIRegs[0];
|
||||
val4 = (reg & 0x2a);
|
||||
val2 = (reg & 0x54) & (val4 << 1);
|
||||
if (val2 & 0x40) {
|
||||
val |= 8;
|
||||
}
|
||||
if (val2 & 0x10) {
|
||||
val |= 1;
|
||||
}
|
||||
if (val2 & 0x4) {
|
||||
val |= 2;
|
||||
}
|
||||
|
||||
if (val) {
|
||||
ResetOccurred = FALSE;
|
||||
OSCancelAlarm(&AlarmForTimeout);
|
||||
}
|
||||
__DIRegs[0] = val2 | (val4);
|
||||
|
||||
if (ResetOccurred && (__OSGetSystemTime() - LastResetEnd) < (OSTime)OSMillisecondsToTicks(200)) {
|
||||
reg = __DIRegs[1];
|
||||
val2 = (reg & 0x4) & ((reg & 0x2) << 1);
|
||||
if (val2 & 0x4) {
|
||||
if (ResetCoverCallback) {
|
||||
ResetCoverCallback(4);
|
||||
}
|
||||
ResetCoverCallback = NULL;
|
||||
}
|
||||
|
||||
__DIRegs[1] = __DIRegs[1];
|
||||
} else if (WaitingCoverClose) {
|
||||
reg = __DIRegs[1];
|
||||
val3 = reg & 2;
|
||||
val2 = (reg & 0x4) & ((reg & 0x2) << 1);
|
||||
if (val2 & 4) {
|
||||
val |= 4;
|
||||
}
|
||||
__DIRegs[1] = val2 | val3;
|
||||
WaitingCoverClose = FALSE;
|
||||
} else {
|
||||
__DIRegs[1] = 0;
|
||||
}
|
||||
|
||||
if ((val & 8) && !Breaking) {
|
||||
val &= ~0x8;
|
||||
}
|
||||
|
||||
if (val & 1) {
|
||||
u32 num;
|
||||
DVDCommand* command;
|
||||
s32 cmd0 = CommandList[num = NextCommandNumber]._0;
|
||||
if (cmd0 == 1) {
|
||||
NextCommandNumber++;
|
||||
command = &CommandList[num];
|
||||
Read(command->_4, command->_8, command->_c, command->callback);
|
||||
rv = 1;
|
||||
} else if (cmd0 == 2) {
|
||||
NextCommandNumber++;
|
||||
command = &CommandList[num];
|
||||
DVDLowSeek(command->_c, command->callback);
|
||||
rv = 1;
|
||||
} else {
|
||||
rv = 0;
|
||||
}
|
||||
|
||||
if (rv) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
CommandList[0]._0 = -1;
|
||||
NextCommandNumber = 0;
|
||||
}
|
||||
|
||||
OSClearContext(&localContext);
|
||||
OSSetCurrentContext(&localContext);
|
||||
if (val) {
|
||||
DVDLowCallback cb = Callback;
|
||||
Callback = NULL;
|
||||
if (cb) {
|
||||
cb(val);
|
||||
}
|
||||
Breaking = FALSE;
|
||||
}
|
||||
|
||||
OSClearContext(&localContext);
|
||||
OSSetCurrentContext(context);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80347994-80347A18 3422D4 0084+00 1/1 0/0 0/0 .text AlarmHandler */
|
||||
#ifdef NONMATCHING
|
||||
static void AlarmHandler(OSAlarm* alarm, OSContext* context) {
|
||||
DVDCommand* cmd;
|
||||
cmd = &CommandList[NextCommandNumber];
|
||||
u32 num;
|
||||
s32 cmd0 = CommandList[num = NextCommandNumber]._0;
|
||||
|
||||
if (cmd->_0 == 1) {
|
||||
if (cmd0 == 1) {
|
||||
++NextCommandNumber;
|
||||
cmd = &CommandList[num];
|
||||
Read(cmd->_4, cmd->_8, cmd->_c, cmd->callback);
|
||||
} else if (cmd->_0 == 2) {
|
||||
} else if (cmd0 == 2) {
|
||||
++NextCommandNumber;
|
||||
cmd = &CommandList[num];
|
||||
DVDLowSeek(cmd->_c, cmd->callback);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void AlarmHandler() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvdlow/AlarmHandler.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 80347A18-80347A88 342358 0070+00 9/9 0/0 0/0 .text AlarmHandlerForTimeout */
|
||||
static void AlarmHandlerForTimeout(OSAlarm* alarm, OSContext* context) {
|
||||
|
|
@ -213,7 +297,7 @@ static void __setAlarm(u32 seconds) {
|
|||
}
|
||||
|
||||
/* 80347A88-80347B98 3423C8 0110+00 3/3 0/0 0/0 .text Read */
|
||||
void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
void Read(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
StopAtNextInt = FALSE;
|
||||
Callback = cb;
|
||||
LastCommandWasRead = TRUE;
|
||||
|
|
@ -221,7 +305,7 @@ void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
|||
__DIRegs[2] = 0xA8000000;
|
||||
__DIRegs[3] = arg2 >> 2;
|
||||
__DIRegs[4] = arg1;
|
||||
__DIRegs[5] = arg0;
|
||||
__DIRegs[5] = (u32)arg0;
|
||||
__DIRegs[6] = arg1;
|
||||
LastLength = arg1;
|
||||
__DIRegs[7] = 3;
|
||||
|
|
@ -233,7 +317,7 @@ void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
|||
}
|
||||
|
||||
/* 80347B98-80347C18 3424D8 0080+00 1/1 0/0 0/0 .text SeekTwiceBeforeRead */
|
||||
void SeekTwiceBeforeRead(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
void SeekTwiceBeforeRead(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
u32 val;
|
||||
u32 temp = arg2 & 0xffff8000;
|
||||
if (temp == 0) {
|
||||
|
|
@ -256,14 +340,82 @@ void SeekTwiceBeforeRead(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
|||
}
|
||||
|
||||
/* 80347C18-80347EB0 342558 0298+00 0/0 4/4 0/0 .text DVDLowRead */
|
||||
// Issues with alarm time calculation
|
||||
#ifdef NONMATCHING
|
||||
BOOL DVDLowRead(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
if (WorkAroundType == 0) {
|
||||
Curr[2] = -1;
|
||||
NextCommandNumber = 0;
|
||||
Read(arg0, arg1, arg2, cb);
|
||||
} else if (WorkAroundType == 1) {
|
||||
if (FirstRead[0]) {
|
||||
SeekTwiceBeforeRead(arg0, arg1, arg2, cb);
|
||||
} else {
|
||||
u32 curr2 = Curr[2] >> 15;
|
||||
u32 prev1 = (Prev[2] + Prev[1] - 1) >> 15;
|
||||
DVDDiskID* id = DVDGetCurrentDiskID();
|
||||
|
||||
BOOL is_streaming = id->is_streaming ? TRUE : FALSE;
|
||||
u32 val;
|
||||
BOOL val2;
|
||||
if (is_streaming) {
|
||||
val = 5;
|
||||
} else {
|
||||
val = 15;
|
||||
}
|
||||
|
||||
if (curr2 > prev1 - 2 || curr2 < prev1 + (val + 3)) {
|
||||
val2 = TRUE;
|
||||
} else {
|
||||
val2 = FALSE;
|
||||
}
|
||||
|
||||
if (!val2) {
|
||||
CommandList[0]._0 = -1;
|
||||
NextCommandNumber = 0;
|
||||
Read(arg0, arg1, arg2, cb);
|
||||
} else {
|
||||
curr2 = Curr[2] >> 15;
|
||||
prev1 = (Prev[2] + Prev[1] - 1) >> 15;
|
||||
if (curr2 == prev1 || curr2 + 1 == prev1) {
|
||||
OSTime diff = __OSGetSystemTime() - LastReadFinished;
|
||||
OSTime five_ms = (OSTime)OSMillisecondsToTicks(5);
|
||||
if (diff < five_ms) {
|
||||
CommandList[0]._0 = -1;
|
||||
NextCommandNumber = 0;
|
||||
Read(arg0, arg1, arg2, cb);
|
||||
} else {
|
||||
OSTime temp;
|
||||
temp = diff - five_ms + (OSTime)OSMicrosecondsToTicks(500);
|
||||
CommandList[0]._0 = 1;
|
||||
CommandList[0]._4 = arg0;
|
||||
CommandList[0]._8 = arg1;
|
||||
CommandList[0]._c = arg2;
|
||||
CommandList[0].callback = cb;
|
||||
CommandList[1]._0 = -1;
|
||||
NextCommandNumber = 0;
|
||||
OSCreateAlarm(&AlarmForWA);
|
||||
OSSetAlarm(&AlarmForWA, temp, AlarmHandler);
|
||||
}
|
||||
} else {
|
||||
SeekTwiceBeforeRead(arg0, arg1, arg2, cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDLowRead() {
|
||||
asm BOOL DVDLowRead(void* arg0, u32 arg1, u32 arg2, DVDLowCallback cb) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvdlow/DVDLowRead.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 80347EB0-80347F44 3427F0 0094+00 3/3 2/2 0/0 .text DVDLowSeek */
|
||||
BOOL DVDLowSeek(u32 arg0, DVDLowCallback cb) {
|
||||
|
|
@ -365,14 +517,20 @@ BOOL DVDLowAudioBufferConfig(s32 arg0, u32 arg1, DVDLowCallback cb) {
|
|||
}
|
||||
|
||||
/* 80348388-80348444 342CC8 00BC+00 0/0 1/1 0/0 .text DVDLowReset */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDLowReset() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvdlow/DVDLowReset.s"
|
||||
void DVDLowReset() {
|
||||
u32 reg;
|
||||
OSTime startTime;
|
||||
__DIRegs[1] = 2;
|
||||
reg = __PIRegs[9];
|
||||
__PIRegs[9] = (reg & ~4) | 1;
|
||||
startTime = __OSGetSystemTime();
|
||||
|
||||
while (__OSGetSystemTime() - startTime < OSMicrosecondsToTicks(12));
|
||||
|
||||
__PIRegs[9] = reg | 5;
|
||||
ResetOccurred = TRUE;
|
||||
LastResetEnd = __OSGetSystemTime();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80348444-80348458 342D84 0014+00 0/0 1/1 0/0 .text DVDLowBreak */
|
||||
BOOL DVDLowBreak() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue