From 71e7f2ae27e7cd08775324f31a0f42f6b0a1792c Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 1 Feb 2023 19:36:14 +0200 Subject: [PATCH] Match SeekTwiceBeforeRead --- Progress.md | 8 +-- asm/dolphin/dvd/dvdlow/Read.s | 71 -------------------- asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s | 35 ---------- libs/dolphin/dvd/dvdlow.c | 31 ++++++--- 4 files changed, 26 insertions(+), 119 deletions(-) delete mode 100644 asm/dolphin/dvd/dvdlow/Read.s delete mode 100644 asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s diff --git a/Progress.md b/Progress.md index bb64478f290..fb44be567c7 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.084343% | 866204 | 3596544 +.text | 24.087902% | 866332 | 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.087671% | 1290140 | 4020672 +Total | 32.090854% | 1290268 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 32.087671% | 1290140 | 4020672 +main.dol | 32.090854% | 1290268 | 4020672 RELs | 33.048286% | 3800660 | 11500324 -Total | 32.799441% | 5090800 | 15520996 +Total | 32.800266% | 5090928 | 15520996 ## RELs diff --git a/asm/dolphin/dvd/dvdlow/Read.s b/asm/dolphin/dvd/dvdlow/Read.s deleted file mode 100644 index c5ef132ff1e..00000000000 --- a/asm/dolphin/dvd/dvdlow/Read.s +++ /dev/null @@ -1,71 +0,0 @@ -lbl_80347A88: -/* 80347A88 7C 08 02 A6 */ mflr r0 -/* 80347A8C 90 01 00 04 */ stw r0, 4(r1) -/* 80347A90 38 00 00 00 */ li r0, 0 -/* 80347A94 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 80347A98 93 E1 00 24 */ stw r31, 0x24(r1) -/* 80347A9C 93 C1 00 20 */ stw r30, 0x20(r1) -/* 80347AA0 3B C5 00 00 */ addi r30, r5, 0 -/* 80347AA4 93 A1 00 1C */ stw r29, 0x1c(r1) -/* 80347AA8 3B A4 00 00 */ addi r29, r4, 0 -/* 80347AAC 93 81 00 18 */ stw r28, 0x18(r1) -/* 80347AB0 3B 83 00 00 */ addi r28, r3, 0 -/* 80347AB4 90 0D 91 90 */ stw r0, StopAtNextInt(r13) -/* 80347AB8 38 00 00 01 */ li r0, 1 -/* 80347ABC 90 CD 91 98 */ stw r6, Callback(r13) -/* 80347AC0 3C C0 80 45 */ lis r6, CommandList@ha /* 0x8044C830@ha */ -/* 80347AC4 3B E6 C8 30 */ addi r31, r6, CommandList@l /* 0x8044C830@l */ -/* 80347AC8 90 0D 91 D0 */ stw r0, LastCommandWasRead(r13) -/* 80347ACC 4B FF AC 51 */ bl __OSGetSystemTime -/* 80347AD0 90 8D 91 CC */ stw r4, LastReadIssued+0x4(r13) -/* 80347AD4 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006000@ha */ -/* 80347AD8 3C 00 00 A0 */ lis r0, 0xa0 -/* 80347ADC 90 6D 91 C8 */ stw r3, LastReadIssued(r13) -/* 80347AE0 38 84 60 00 */ addi r4, r4, 0x6000 /* 0xCC006000@l */ -/* 80347AE4 3C 60 A8 00 */ lis r3, 0xa800 -/* 80347AE8 90 64 00 08 */ stw r3, 8(r4) -/* 80347AEC 57 C3 F0 BE */ srwi r3, r30, 2 -/* 80347AF0 7C 1D 00 40 */ cmplw r29, r0 -/* 80347AF4 90 64 00 0C */ stw r3, 0xc(r4) -/* 80347AF8 38 00 00 03 */ li r0, 3 -/* 80347AFC 93 A4 00 10 */ stw r29, 0x10(r4) -/* 80347B00 93 84 00 14 */ stw r28, 0x14(r4) -/* 80347B04 93 A4 00 18 */ stw r29, 0x18(r4) -/* 80347B08 93 AD 91 94 */ stw r29, LastLength(r13) -/* 80347B0C 90 04 00 1C */ stw r0, 0x1c(r4) -/* 80347B10 40 81 00 38 */ ble lbl_80347B48 -/* 80347B14 3C 60 80 00 */ lis r3, 0x8000 /* 0x800000F8@ha */ -/* 80347B18 80 03 00 F8 */ lwz r0, 0x00F8(r3) /* 0x800000F8@l */ -/* 80347B1C 38 7F 00 68 */ addi r3, r31, 0x68 -/* 80347B20 54 00 F0 BE */ srwi r0, r0, 2 -/* 80347B24 1F C0 00 14 */ mulli r30, r0, 0x14 -/* 80347B28 4B FF 2D D1 */ bl OSCreateAlarm -/* 80347B2C 3C 60 80 34 */ lis r3, AlarmHandlerForTimeout@ha /* 0x80347A18@ha */ -/* 80347B30 38 E3 7A 18 */ addi r7, r3, AlarmHandlerForTimeout@l /* 0x80347A18@l */ -/* 80347B34 38 DE 00 00 */ addi r6, r30, 0 -/* 80347B38 38 7F 00 68 */ addi r3, r31, 0x68 -/* 80347B3C 38 A0 00 00 */ li r5, 0 -/* 80347B40 4B FF 30 19 */ bl OSSetAlarm -/* 80347B44 48 00 00 34 */ b lbl_80347B78 -lbl_80347B48: -/* 80347B48 3C 60 80 00 */ lis r3, 0x8000 /* 0x800000F8@ha */ -/* 80347B4C 80 03 00 F8 */ lwz r0, 0x00F8(r3) /* 0x800000F8@l */ -/* 80347B50 38 7F 00 68 */ addi r3, r31, 0x68 -/* 80347B54 54 00 F0 BE */ srwi r0, r0, 2 -/* 80347B58 1F C0 00 0A */ mulli r30, r0, 0xa -/* 80347B5C 4B FF 2D 9D */ bl OSCreateAlarm -/* 80347B60 3C 60 80 34 */ lis r3, AlarmHandlerForTimeout@ha /* 0x80347A18@ha */ -/* 80347B64 38 E3 7A 18 */ addi r7, r3, AlarmHandlerForTimeout@l /* 0x80347A18@l */ -/* 80347B68 38 DE 00 00 */ addi r6, r30, 0 -/* 80347B6C 38 7F 00 68 */ addi r3, r31, 0x68 -/* 80347B70 38 A0 00 00 */ li r5, 0 -/* 80347B74 4B FF 2F E5 */ bl OSSetAlarm -lbl_80347B78: -/* 80347B78 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 80347B7C 83 E1 00 24 */ lwz r31, 0x24(r1) -/* 80347B80 83 C1 00 20 */ lwz r30, 0x20(r1) -/* 80347B84 83 A1 00 1C */ lwz r29, 0x1c(r1) -/* 80347B88 83 81 00 18 */ lwz r28, 0x18(r1) -/* 80347B8C 38 21 00 28 */ addi r1, r1, 0x28 -/* 80347B90 7C 08 03 A6 */ mtlr r0 -/* 80347B94 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s b/asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s deleted file mode 100644 index 8916051946e..00000000000 --- a/asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s +++ /dev/null @@ -1,35 +0,0 @@ -lbl_80347B98: -/* 80347B98 7C 08 02 A6 */ mflr r0 -/* 80347B9C 3C E0 80 45 */ lis r7, CommandList@ha /* 0x8044C830@ha */ -/* 80347BA0 90 01 00 04 */ stw r0, 4(r1) -/* 80347BA4 54 A8 00 21 */ rlwinm. r8, r5, 0, 0, 0x10 -/* 80347BA8 39 27 C8 30 */ addi r9, r7, CommandList@l /* 0x8044C830@l */ -/* 80347BAC 94 21 FF F8 */ stwu r1, -8(r1) -/* 80347BB0 40 82 00 0C */ bne lbl_80347BBC -/* 80347BB4 39 40 00 00 */ li r10, 0 -/* 80347BB8 48 00 00 0C */ b lbl_80347BC4 -lbl_80347BBC: -/* 80347BBC 80 0D 91 B8 */ lwz r0, WorkAroundSeekLocation(r13) -/* 80347BC0 7D 48 02 14 */ add r10, r8, r0 -lbl_80347BC4: -/* 80347BC4 38 00 00 02 */ li r0, 2 -/* 80347BC8 90 09 00 00 */ stw r0, 0(r9) -/* 80347BCC 39 00 00 01 */ li r8, 1 -/* 80347BD0 38 E0 FF FF */ li r7, -1 -/* 80347BD4 91 49 00 0C */ stw r10, 0xc(r9) -/* 80347BD8 38 00 00 00 */ li r0, 0 -/* 80347BDC 90 C9 00 10 */ stw r6, 0x10(r9) -/* 80347BE0 91 09 00 14 */ stw r8, 0x14(r9) -/* 80347BE4 90 69 00 18 */ stw r3, 0x18(r9) -/* 80347BE8 7D 43 53 78 */ mr r3, r10 -/* 80347BEC 90 89 00 1C */ stw r4, 0x1c(r9) -/* 80347BF0 7C C4 33 78 */ mr r4, r6 -/* 80347BF4 90 A9 00 20 */ stw r5, 0x20(r9) -/* 80347BF8 90 C9 00 24 */ stw r6, 0x24(r9) -/* 80347BFC 90 E9 00 28 */ stw r7, 0x28(r9) -/* 80347C00 90 0D 91 D4 */ stw r0, NextCommandNumber(r13) -/* 80347C04 48 00 02 AD */ bl DVDLowSeek -/* 80347C08 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80347C0C 38 21 00 08 */ addi r1, r1, 8 -/* 80347C10 7C 08 03 A6 */ mtlr r0 -/* 80347C14 4E 80 00 20 */ blr diff --git a/libs/dolphin/dvd/dvdlow.c b/libs/dolphin/dvd/dvdlow.c index b16f071c9d1..c36c65bd7f3 100644 --- a/libs/dolphin/dvd/dvdlow.c +++ b/libs/dolphin/dvd/dvdlow.c @@ -18,7 +18,7 @@ void __DVDInterruptHandler(); static void AlarmHandler(); static void AlarmHandlerForTimeout(); static void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb); -static void SeekTwiceBeforeRead(); +static void SeekTwiceBeforeRead(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb); void DVDLowRead(); BOOL DVDLowSeek(u32 arg0, DVDLowCallback cb); BOOL DVDLowWaitCoverClose(DVDLowCallback cb); @@ -65,7 +65,7 @@ typedef struct DVDCommand { /* ############################################################################################## */ /* 8044C830-8044C870 079550 003C+04 6/6 0/0 0/0 .bss CommandList */ -static u8 CommandList[60 + 4 /* padding */]; +static DVDCommand CommandList[3]; /* 80451710-80451714 000C10 0004+00 12/12 0/0 0/0 .sbss StopAtNextInt */ static volatile BOOL StopAtNextInt; @@ -233,14 +233,27 @@ void Read(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) { } /* 80347B98-80347C18 3424D8 0080+00 1/1 0/0 0/0 .text SeekTwiceBeforeRead */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void SeekTwiceBeforeRead() { - nofralloc -#include "asm/dolphin/dvd/dvdlow/SeekTwiceBeforeRead.s" +void SeekTwiceBeforeRead(u32 arg0, u32 arg1, u32 arg2, DVDLowCallback cb) { + u32 val; + u32 temp = arg2 & 0xffff8000; + if (temp == 0) { + val = 0; + } else { + val = temp + WorkAroundSeekLocation[0]; + } + + CommandList[0]._0 = 2; + CommandList[0]._c = val; + CommandList[0].callback = cb; + CommandList[1]._0 = 1; + CommandList[1]._4 = arg0; + CommandList[1]._8 = arg1; + CommandList[1]._c = arg2; + CommandList[1].callback = cb; + CommandList[2]._0 = -1; + NextCommandNumber = 0; + DVDLowSeek(val, cb); } -#pragma pop /* 80347C18-80347EB0 342558 0298+00 0/0 4/4 0/0 .text DVDLowRead */ #pragma push