summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-02-03 18:49:02 -0800
committerGitHub <noreply@github.com>2023-02-03 18:49:02 -0800
commitf030d04b1442d09272af2cb1621c8c6e0cc99bb6 (patch)
tree486da30814a17fc72447a4c8f2493967f4add342
parent0e7b8726dba6dc74aa5f87dc98c2b1361f3607bd (diff)
parent118a3f288fff342cf7942f5318d376ce99749c61 (diff)
Merge pull request #267 from hatal175/dvdlow2
Only DVDLowRead left in dvdlow
-rw-r--r--Progress.md8
-rw-r--r--asm/dolphin/dvd/dvdlow/AlarmHandler.s36
-rw-r--r--asm/dolphin/dvd/dvdlow/DVDLowRead.s2
-rw-r--r--asm/dolphin/dvd/dvdlow/DVDLowReset.s49
-rw-r--r--asm/dolphin/dvd/dvdlow/__DVDInterruptHandler.s205
-rw-r--r--asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/createGuard__12daTagGuard_cFUl.s55
-rw-r--r--asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Create__FP10fopAc_ac_c.s49
-rw-r--r--asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Delete__FP12daTagGuard_c.s14
-rw-r--r--asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/getAppearPoint__12daTagGuard_cFP3Vec.s28
-rw-r--r--libs/dolphin/dvd/dvdlow.c276
10 files changed, 222 insertions, 500 deletions
diff --git a/Progress.md b/Progress.md
index fb44be567c..56020508e7 100644
--- a/Progress.md
+++ b/Progress.md
@@ -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
diff --git a/asm/dolphin/dvd/dvdlow/AlarmHandler.s b/asm/dolphin/dvd/dvdlow/AlarmHandler.s
deleted file mode 100644
index 02f295f423..0000000000
--- a/asm/dolphin/dvd/dvdlow/AlarmHandler.s
+++ /dev/null
@@ -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
diff --git a/asm/dolphin/dvd/dvdlow/DVDLowRead.s b/asm/dolphin/dvd/dvdlow/DVDLowRead.s
index 5da6d3f2ee..c25fd8d402 100644
--- a/asm/dolphin/dvd/dvdlow/DVDLowRead.s
+++ b/asm/dolphin/dvd/dvdlow/DVDLowRead.s
@@ -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 */
diff --git a/asm/dolphin/dvd/dvdlow/DVDLowReset.s b/asm/dolphin/dvd/dvdlow/DVDLowReset.s
deleted file mode 100644
index 20bdb91d83..0000000000
--- a/asm/dolphin/dvd/dvdlow/DVDLowReset.s
+++ /dev/null
@@ -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
diff --git a/asm/dolphin/dvd/dvdlow/__DVDInterruptHandler.s b/asm/dolphin/dvd/dvdlow/__DVDInterruptHandler.s
deleted file mode 100644
index 1f81f7fc1d..0000000000
--- a/asm/dolphin/dvd/dvdlow/__DVDInterruptHandler.s
+++ /dev/null
@@ -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
diff --git a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/createGuard__12daTagGuard_cFUl.s b/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/createGuard__12daTagGuard_cFUl.s
deleted file mode 100644
index 8ee49be927..0000000000
--- a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/createGuard__12daTagGuard_cFUl.s
+++ /dev/null
@@ -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
diff --git a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Create__FP10fopAc_ac_c.s b/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Create__FP10fopAc_ac_c.s
deleted file mode 100644
index 19612cf919..0000000000
--- a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Create__FP10fopAc_ac_c.s
+++ /dev/null
@@ -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
diff --git a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Delete__FP12daTagGuard_c.s b/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Delete__FP12daTagGuard_c.s
deleted file mode 100644
index ae414c2ec2..0000000000
--- a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/daTagGuard_Delete__FP12daTagGuard_c.s
+++ /dev/null
@@ -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
diff --git a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/getAppearPoint__12daTagGuard_cFP3Vec.s b/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/getAppearPoint__12daTagGuard_cFP3Vec.s
deleted file mode 100644
index 2c7e759d83..0000000000
--- a/asm/rel/d/a/tag/d_a_tag_guard/d_a_tag_guard/getAppearPoint__12daTagGuard_cFP3Vec.s
+++ /dev/null
@@ -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
diff --git a/libs/dolphin/dvd/dvdlow.c b/libs/dolphin/dvd/dvdlow.c
index c36c65bd7f..2ab0f3ab18 100644
--- a/libs/dolphin/dvd/dvdlow.c
+++ b/libs/dolphin/dvd/dvdlow.c
@@ -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() {