From 438099519360c3d90d5df7f6dfc36cba79bec524 Mon Sep 17 00:00:00 2001 From: Kevin Armstrong Date: Sat, 1 Dec 2012 00:03:46 +0000 Subject: [PATCH 1/2] make addmonths work slightly more correctly --- Core/HLE/sceRtc.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Core/HLE/sceRtc.cpp b/Core/HLE/sceRtc.cpp index 7d9067a538..36c5b3fc26 100644 --- a/Core/HLE/sceRtc.cpp +++ b/Core/HLE/sceRtc.cpp @@ -618,18 +618,30 @@ int sceRtcTickAddMonths(u32 destTickPtr, u32 srcTickPtr, int numMonths) { if (Memory::IsValidAddress(destTickPtr) && Memory::IsValidAddress(srcTickPtr)) { - s64 srcTick = (s64)Memory::Read_U64(srcTickPtr); + u64 srcTick = Memory::Read_U64(srcTickPtr); // slightly bodgy but we need to add months to a pt and then convert to ticks (untested and broken) ScePspDateTime pt; - - int years = numMonths /12; - int realmonths = numMonths % 12; memset(&pt, 0, sizeof(pt)); - pt.year = years; - pt.month = realmonths; - srcTick +=__RtcPspTimeToTicks(pt); - + if (numMonths < 0) + { + numMonths = (numMonths^0xFFFFFFFF)+1; + int years = numMonths /12; + int realmonths = numMonths % 12; + + pt.year = years; + pt.month = realmonths; + srcTick -=__RtcPspTimeToTicks(pt); + } + else + { + int years = numMonths /12; + int realmonths = numMonths % 12; + + pt.year = years; + pt.month = realmonths; + srcTick +=__RtcPspTimeToTicks(pt); + } Memory::Write_U64(srcTick, destTickPtr); } From e1a5bf91c30b743bd139a63949103f3e706e1f97 Mon Sep 17 00:00:00 2001 From: Kevin Armstrong Date: Sat, 1 Dec 2012 12:52:42 +0000 Subject: [PATCH 2/2] more rtc changes, getting closer --- Core/HLE/sceRtc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceRtc.cpp b/Core/HLE/sceRtc.cpp index 36c5b3fc26..c63094b2b7 100644 --- a/Core/HLE/sceRtc.cpp +++ b/Core/HLE/sceRtc.cpp @@ -620,7 +620,7 @@ int sceRtcTickAddMonths(u32 destTickPtr, u32 srcTickPtr, int numMonths) { u64 srcTick = Memory::Read_U64(srcTickPtr); - // slightly bodgy but we need to add months to a pt and then convert to ticks (untested and broken) + // slightly bodgy but we need to add months to a pt and then convert to ticks ScePspDateTime pt; memset(&pt, 0, sizeof(pt)); if (numMonths < 0)