diff options
author | YamaArashi <shadow962@live.com> | 2015-11-27 18:54:15 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2015-11-27 18:54:15 -0800 |
commit | d4cbc7e468fa33bc478896bcdff2252c2bec2c02 (patch) | |
tree | aeaf315d607b402e3e682d1dccaed52b059e3d1c | |
parent | 9eabe80048c1a64cdd5a9c978d0df59eac7f84fd (diff) |
split out RTC functions
-rw-r--r-- | asm/emerald.s | 825 | ||||
-rw-r--r-- | asm/rtc.s | 824 |
2 files changed, 825 insertions, 824 deletions
diff --git a/asm/emerald.s b/asm/emerald.s index 94d6deb78..5436af3c1 100644 --- a/asm/emerald.s +++ b/asm/emerald.s @@ -75805,830 +75805,7 @@ sub_802EFFC: ; 802EFFC .pool thumb_func_end sub_802EFFC - thumb_func_start GameFreakRTC_ClearIME -; void GameFreakRTC_ClearIME() -GameFreakRTC_ClearIME: ; 802F0CC - ldr r2, =0x03000dce - ldr r1, =0x04000208 - ldrh r0, [r1] - strh r0, [r2] - movs r0, 0 - strh r0, [r1] - bx lr - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_ClearIME - - thumb_func_start GameFreakRTC_RestoreIME -; void GameFreakRTC_RestoreIME() -GameFreakRTC_RestoreIME: ; 802F0E4 - ldr r0, =0x04000208 - ldr r1, =0x03000dce - ldrh r1, [r1] - strh r1, [r0] - bx lr - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_RestoreIME - - thumb_func_start GameFreakRTC_ConvertFromBCD -; u8 GameFreakRTC_ConvertFromBCD(u8 bcdByte) -GameFreakRTC_ConvertFromBCD: ; 802F0F8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x9F - bhi @0802F10A - movs r3, 0xF - ands r3, r2 - cmp r3, 0x9 - bls @0802F10E -@0802F10A: - movs r0, 0xFF - b @0802F11C -@0802F10E: - lsrs r1, r0, 28 - movs r0, 0xF - ands r1, r0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, r3 -@0802F11C: - pop {r1} - bx r1 - thumb_func_end GameFreakRTC_ConvertFromBCD - - thumb_func_start GameFreakRTC_IsLeapYear -; BOOL GameFreakRTC_IsLeapYear(u32 year) -GameFreakRTC_IsLeapYear: ; 802F120 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x3 - ands r0, r4 - cmp r0, 0 - bne @0802F138 - adds r0, r4, 0 - movs r1, 0x64 - bl __umodsi3 - cmp r0, 0 - bne @0802F146 -@0802F138: - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, 0 - bl __umodsi3 - cmp r0, 0 - bne @0802F14A -@0802F146: - movs r0, 0x1 - b @0802F14C -@0802F14A: - movs r0, 0 -@0802F14C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GameFreakRTC_IsLeapYear - - thumb_func_start GameFreakRTC_ConvertYearMonthDayToNumDays -; u16 GameFreakRTC_ConvertYearMonthDayToNumDays(u8 year, u8 month, u8 dayOfMonth) -GameFreakRTC_ConvertYearMonthDayToNumDays: ; 802F154 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - movs r5, 0 - subs r4, r7, 0x1 - cmp r4, 0 - blt @0802F192 -@0802F170: - ldr r1, =0x0000016d - adds r0, r5, r1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - bl GameFreakRTC_IsLeapYear - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne @0802F18C - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -@0802F18C: - subs r4, 0x1 - cmp r4, 0 - bge @0802F170 -@0802F192: - subs r0, r6, 0x1 - cmp r0, 0 - ble @0802F1AA - ldr r1, =gUnknown_082FECCC - adds r4, r0, 0 -@0802F19C: - ldm r1!, {r0} - adds r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - subs r4, 0x1 - cmp r4, 0 - bne @0802F19C -@0802F1AA: - cmp r6, 0x2 - bls @0802F1C2 - adds r0, r7, 0 - bl GameFreakRTC_IsLeapYear - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne @0802F1C2 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -@0802F1C2: - mov r1, r8 - adds r0, r5, r1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r5, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_ConvertYearMonthDayToNumDays - - thumb_func_start GameFreakRTC_GetNumDaysInternal -; u16 GameFreakRTC_GetNumDaysInternal(struct RtcInfo *rtc) -GameFreakRTC_GetNumDaysInternal: ; 802F1E0 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6] - bl GameFreakRTC_ConvertFromBCD - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldrb r0, [r6, 0x1] - bl GameFreakRTC_ConvertFromBCD - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r6, 0x2] - bl GameFreakRTC_ConvertFromBCD - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl GameFreakRTC_ConvertYearMonthDayToNumDays - lsls r0, 16 - lsrs r0, 16 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GameFreakRTC_GetNumDaysInternal - - thumb_func_start GameFreakRTC_Init -; void GameFreakRTC_Init() -GameFreakRTC_Init: ; 802F21C - push {r4,r5,lr} - ldr r5, =0x03000db8 - movs r0, 0 - strh r0, [r5] - bl GameFreakRTC_ClearIME - bl RTC_SetReadWrite - bl RTC_Init - ldr r4, =0x03000dcc - strb r0, [r4] - bl GameFreakRTC_RestoreIME - ldrb r4, [r4] - movs r0, 0xF - ands r0, r4 - cmp r0, 0x1 - beq @0802F250 - movs r0, 0x1 - strh r0, [r5] - b @0802F26E - .align 2, 0 - .pool -@0802F250: - movs r0, 0xF0 - ands r0, r4 - cmp r0, 0 - beq @0802F25A - movs r0, 0x2 -@0802F25A: - strh r0, [r5] - ldr r4, =0x03000dc0 - adds r0, r4, 0 - bl GameFreakRTC_GetControlRegAndRTCDateTime - adds r0, r4, 0 - bl GameFreakRTC_TestForErrors - ldr r1, =0x03000db8 - strh r0, [r1] -@0802F26E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_Init - - thumb_func_start GameFreakRTC_GetErrorFlags -; u16 GameFreakRTC_GetErrorFlags() -GameFreakRTC_GetErrorFlags: ; 802F27C - ldr r0, =0x03000db8 - ldrh r0, [r0] - bx lr - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_GetErrorFlags - - thumb_func_start GameFreakRTC_GetRTCDateTime -; void GameFreakRTC_GetRTCDateTime(struct RtcInfo *rtc) -GameFreakRTC_GetRTCDateTime: ; 802F288 - push {r4,lr} - adds r2, r0, 0 - ldr r0, =0x03000db8 - ldrh r1, [r0] - movs r0, 0xFF - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq @0802F2AC - adds r1, r2, 0 - ldr r0, =gUnknown_082FECC0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - b @0802F2B2 - .align 2, 0 - .pool -@0802F2AC: - adds r0, r2, 0 - bl GameFreakRTC_GetControlRegAndRTCDateTime -@0802F2B2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetRTCDateTime - - thumb_func_start GameFreakRTC_GetRTCDateTimeInternal -; void GameFreakRTC_GetRTCDateTimeInternal(struct RtcInfo *rtc) -GameFreakRTC_GetRTCDateTimeInternal: ; 802F2B8 - push {r4,lr} - adds r4, r0, 0 - bl GameFreakRTC_ClearIME - adds r0, r4, 0 - bl RTC_GetDateTime - bl GameFreakRTC_RestoreIME - pop {r4} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetRTCDateTimeInternal - - thumb_func_start GameFreakRTC_GetControlReg -; void GameFreakRTC_GetControlReg(struct RtcInfo *rtc) -GameFreakRTC_GetControlReg: ; 802F2D0 - push {r4,lr} - adds r4, r0, 0 - bl GameFreakRTC_ClearIME - adds r0, r4, 0 - bl RTC_GetControlReg - bl GameFreakRTC_RestoreIME - pop {r4} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetControlReg - - thumb_func_start GameFreakRTC_GetControlRegAndRTCDateTime -; void GameFreakRTC_GetControlRegAndRTCDateTime(struct RtcInfo *rtc) -GameFreakRTC_GetControlRegAndRTCDateTime: ; 802F2E8 - push {r4,lr} - adds r4, r0, 0 - bl GameFreakRTC_GetControlReg - adds r0, r4, 0 - bl GameFreakRTC_GetRTCDateTimeInternal - pop {r4} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetControlRegAndRTCDateTime - - thumb_func_start GameFreakRTC_TestForErrors -; u16 GameFreakRTC_TestForErrors(struct RtcInfo *rtc) -GameFreakRTC_TestForErrors: ; 802F2FC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - ldrb r1, [r7, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - negs r0, r0 - asrs r4, r0, 31 - movs r0, 0x20 - ands r4, r0 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne @0802F322 - movs r0, 0x10 - orrs r4, r0 -@0802F322: - ldrb r0, [r7] - bl GameFreakRTC_ConvertFromBCD - mov r8, r0 - cmp r0, 0xFF - bne @0802F336 - movs r0, 0x40 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F336: - ldrb r0, [r7, 0x1] - bl GameFreakRTC_ConvertFromBCD - adds r6, r0, 0 - cmp r6, 0xFF - beq @0802F34A - cmp r6, 0 - beq @0802F34A - cmp r6, 0xC - ble @0802F352 -@0802F34A: - movs r0, 0x80 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F352: - ldrb r0, [r7, 0x2] - bl GameFreakRTC_ConvertFromBCD - adds r5, r0, 0 - cmp r5, 0xFF - bne @0802F36A - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F36A: - cmp r6, 0x2 - bne @0802F384 - mov r0, r8 - bl GameFreakRTC_IsLeapYear - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_082FECCC - ldr r1, [r1, 0x4] - adds r0, r1 - b @0802F38E - .align 2, 0 - .pool -@0802F384: - ldr r0, =gUnknown_082FECCC - subs r1, r6, 0x1 - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] -@0802F38E: - cmp r5, r0 - ble @0802F39E - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F39E: - ldrb r0, [r7, 0x4] - bl GameFreakRTC_ConvertFromBCD - adds r5, r0, 0 - cmp r5, 0x18 - ble @0802F3B6 - movs r1, 0x80 - lsls r1, 2 - adds r0, r1, 0 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F3B6: - ldrb r0, [r7, 0x5] - bl GameFreakRTC_ConvertFromBCD - adds r5, r0, 0 - cmp r5, 0x3C - ble @0802F3CE - movs r1, 0x80 - lsls r1, 3 - adds r0, r1, 0 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F3CE: - ldrb r0, [r7, 0x6] - bl GameFreakRTC_ConvertFromBCD - adds r5, r0, 0 - cmp r5, 0x3C - ble @0802F3E6 - movs r1, 0x80 - lsls r1, 4 - adds r0, r1, 0 - orrs r4, r0 - lsls r0, r4, 16 - lsrs r4, r0, 16 -@0802F3E6: - adds r0, r4, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_TestForErrors - - thumb_func_start GameFreakRTC_Reset -; void GameFreakRTC_Reset() -GameFreakRTC_Reset: ; 802F3F8 - push {lr} - bl GameFreakRTC_ClearIME - bl RTC_Reset - bl GameFreakRTC_RestoreIME - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_Reset - - thumb_func_start GameFreakRTC_FormatDecimalTimeString -; void GameFreakRTC_FormatDecimalTimeString(u8 *dest, s32 hour, s32 minute, s32 second) -GameFreakRTC_FormatDecimalTimeString: ; 802F40C - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalString - movs r4, 0xF0 - strb r4, [r0] - adds r0, 0x1 - adds r1, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalString - strb r4, [r0] - adds r0, 0x1 - adds r1, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalString - movs r1, 0xFF - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_FormatDecimalTimeString - - thumb_func_start GameFreakRTC_FormatHexTimeString -; void GameFreakRTC_FormatHexTimeString(u8 *dest, s32 hour, s32 minute, s32 second) -GameFreakRTC_FormatHexTimeString: ; 802F444 - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToHexString - movs r4, 0xF0 - strb r4, [r0] - adds r0, 0x1 - adds r1, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToHexString - strb r4, [r0] - adds r0, 0x1 - adds r1, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToHexString - movs r1, 0xFF - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_FormatHexTimeString - - thumb_func_start GameFreakRTC_FormatHexTimeStringFromRtcInfo -; void GameFreakRTC_FormatHexTimeStringFromRtcInfo() -GameFreakRTC_FormatHexTimeStringFromRtcInfo: ; 802F47C - push {lr} - ldr r3, =0x03000dc0 - ldrb r1, [r3, 0x4] - ldrb r2, [r3, 0x5] - ldrb r3, [r3, 0x6] - bl GameFreakRTC_FormatHexTimeString - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_FormatHexTimeStringFromRtcInfo - - thumb_func_start GameFreakRTC_FormatDecimalYearMonthDayString -; void GameFreakRTC_FormatDecimalYearMonthDayString(u8 *dest, s32 year, s32 month, s32 dayOfMonth) -GameFreakRTC_FormatDecimalYearMonthDayString: ; 802F494 - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - movs r2, 0x2 - movs r3, 0x4 - bl ConvertIntToDecimalString - movs r4, 0xAE - strb r4, [r0] - adds r0, 0x1 - adds r1, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalString - strb r4, [r0] - adds r0, 0x1 - adds r1, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalString - movs r1, 0xFF - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_FormatDecimalYearMonthDayString - - thumb_func_start GameFreakRTC_FormatHexYearMonthDayString -; void GameFreakRTC_FormatHexYearMonthDayString(u8 *dest, s32 year, s32 month, s32 dayOfMonth) -GameFreakRTC_FormatHexYearMonthDayString: ; 802F4CC - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - movs r2, 0x2 - movs r3, 0x4 - bl ConvertIntToHexString - movs r4, 0xAE - strb r4, [r0] - adds r0, 0x1 - adds r1, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToHexString - strb r4, [r0] - adds r0, 0x1 - adds r1, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToHexString - movs r1, 0xFF - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_FormatHexYearMonthDayString - - thumb_func_start GameFreakRTC_GetRTCDelta -; void GameFreakRTC_GetRTCDelta(RtcInfo *rtc, GameDateTime *delta, GameDateTime *dateTime) -GameFreakRTC_GetRTCDelta: ; 802F504 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - adds r6, r2, 0 - bl GameFreakRTC_GetNumDaysInternal - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5, 0x6] - bl GameFreakRTC_ConvertFromBCD - ldrb r1, [r6, 0x4] - subs r0, r1 - strb r0, [r7, 0x4] - ldrb r0, [r5, 0x5] - bl GameFreakRTC_ConvertFromBCD - ldrb r1, [r6, 0x3] - subs r0, r1 - strb r0, [r7, 0x3] - ldrb r0, [r5, 0x4] - bl GameFreakRTC_ConvertFromBCD - ldrb r1, [r6, 0x2] - subs r0, r1 - strb r0, [r7, 0x2] - ldrh r0, [r6] - subs r4, r0 - strh r4, [r7] - ldrb r1, [r7, 0x4] - movs r0, 0x4 - ldrsb r0, [r7, r0] - cmp r0, 0 - bge @0802F556 - adds r0, r1, 0 - adds r0, 0x3C - strb r0, [r7, 0x4] - ldrb r0, [r7, 0x3] - subs r0, 0x1 - strb r0, [r7, 0x3] -@0802F556: - ldrb r1, [r7, 0x3] - movs r0, 0x3 - ldrsb r0, [r7, r0] - cmp r0, 0 - bge @0802F56C - adds r0, r1, 0 - adds r0, 0x3C - strb r0, [r7, 0x3] - ldrb r0, [r7, 0x2] - subs r0, 0x1 - strb r0, [r7, 0x2] -@0802F56C: - ldrb r1, [r7, 0x2] - movs r0, 0x2 - ldrsb r0, [r7, r0] - cmp r0, 0 - bge @0802F582 - adds r0, r1, 0 - adds r0, 0x18 - strb r0, [r7, 0x2] - ldrh r0, [r7] - subs r0, 0x1 - strh r0, [r7] -@0802F582: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetRTCDelta - - thumb_func_start GameFreakRTC_CalcLocalDateTime -; void GameFreakRTC_CalcLocalDateTime() -GameFreakRTC_CalcLocalDateTime: ; 802F588 - push {r4,lr} - ldr r4, =0x03000dc0 - adds r0, r4, 0 - bl GameFreakRTC_GetRTCDateTime - ldr r1, =0x03005cf8 - ldr r0, =0x03005d90 - ldr r2, [r0] - adds r2, 0x98 - adds r0, r4, 0 - bl GameFreakRTC_GetRTCDelta - pop {r4} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_CalcLocalDateTime - - thumb_func_start GameFreakRTC_CalcRTCToLocalDelta_DayZero -; void GameFreakRTC_CalcRTCToLocalDelta_DayZero(u8 hour, u8 minute) -GameFreakRTC_CalcRTCToLocalDelta_DayZero: ; 802F5B4 - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - movs r0, 0 - adds r1, r3, 0 - movs r3, 0 - bl GameFreakRTC_CalcRTCToLocalDelta - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_CalcRTCToLocalDelta_DayZero - - thumb_func_start GameFreakRTC_CalcRTCToLocalDelta -; void GameFreakRTC_CalcRTCToLocalDelta(u16 numDays, u8 hour, u8 minute, u8 second) -GameFreakRTC_CalcRTCToLocalDelta: ; 802F5C8 - push {r4,r5,lr} - ldr r4, =0x03005cf8 - strh r0, [r4] - strb r1, [r4, 0x2] - strb r2, [r4, 0x3] - strb r3, [r4, 0x4] - ldr r5, =0x03000dc0 - adds r0, r5, 0 - bl GameFreakRTC_GetRTCDateTime - ldr r0, =0x03005d90 - ldr r1, [r0] - adds r1, 0x98 - adds r0, r5, 0 - adds r2, r4, 0 - bl GameFreakRTC_GetRTCDelta - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_CalcRTCToLocalDelta - - thumb_func_start GameFreakRTC_GetDelta -; void GameFreakRTC_GetDelta(GameDateTime *delta, GameDateTime *dateTime1, GameDateTime *dateTime2) -GameFreakRTC_GetDelta: ; 802F5FC - push {r4-r6,lr} - adds r4, r0, 0 - ldrb r3, [r2, 0x4] - ldrb r0, [r1, 0x4] - subs r5, r3, r0 - strb r5, [r4, 0x4] - ldrb r3, [r2, 0x3] - ldrb r0, [r1, 0x3] - subs r6, r3, r0 - strb r6, [r4, 0x3] - ldrb r0, [r2, 0x2] - ldrb r3, [r1, 0x2] - subs r0, r3 - strb r0, [r4, 0x2] - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r4] - lsls r0, r5, 24 - cmp r0, 0 - bge @0802F630 - adds r0, r5, 0 - adds r0, 0x3C - strb r0, [r4, 0x4] - subs r0, r6, 0x1 - strb r0, [r4, 0x3] -@0802F630: - ldrb r1, [r4, 0x3] - movs r0, 0x3 - ldrsb r0, [r4, r0] - cmp r0, 0 - bge @0802F646 - adds r0, r1, 0 - adds r0, 0x3C - strb r0, [r4, 0x3] - ldrb r0, [r4, 0x2] - subs r0, 0x1 - strb r0, [r4, 0x2] -@0802F646: - ldrb r1, [r4, 0x2] - movs r0, 0x2 - ldrsb r0, [r4, r0] - cmp r0, 0 - bge @0802F65C - adds r0, r1, 0 - adds r0, 0x18 - strb r0, [r4, 0x2] - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] -@0802F65C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end GameFreakRTC_GetDelta - - thumb_func_start GameFreakRTC_GetNumMinutes -; u16 GameFreakRTC_GetNumMinutes() -GameFreakRTC_GetNumMinutes: ; 802F664 - push {r4,lr} - ldr r4, =0x03000dc0 - adds r0, r4, 0 - bl GameFreakRTC_GetRTCDateTime - adds r0, r4, 0 - bl GameFreakRTC_GetNumDaysInternal - lsls r0, 16 - lsrs r0, 16 - lsls r1, r0, 1 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - ldrb r2, [r4, 0x4] - lsls r1, r2, 4 - subs r1, r2 - lsls r1, 2 - adds r0, r1 - ldrb r4, [r4, 0x5] - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_GetNumMinutes - - thumb_func_start GameFreakRTC_GetNumDays -; u16 GameFreakRTC_GetNumDays() -GameFreakRTC_GetNumDays: ; 802F69C - push {lr} - ldr r0, =0x03000dc0 - bl GameFreakRTC_GetNumDaysInternal - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end GameFreakRTC_GetNumDays + .include "asm/rtc.s" thumb_func_start c2_title_menu_3 c2_title_menu_3: ; 802F6B0 diff --git a/asm/rtc.s b/asm/rtc.s new file mode 100644 index 000000000..b1cfe0678 --- /dev/null +++ b/asm/rtc.s @@ -0,0 +1,824 @@ + thumb_func_start GameFreakRTC_ClearIME +; void GameFreakRTC_ClearIME() +GameFreakRTC_ClearIME: ; 802F0CC + ldr r2, =0x03000dce + ldr r1, =0x04000208 + ldrh r0, [r1] + strh r0, [r2] + movs r0, 0 + strh r0, [r1] + bx lr + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_ClearIME + + thumb_func_start GameFreakRTC_RestoreIME +; void GameFreakRTC_RestoreIME() +GameFreakRTC_RestoreIME: ; 802F0E4 + ldr r0, =0x04000208 + ldr r1, =0x03000dce + ldrh r1, [r1] + strh r1, [r0] + bx lr + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_RestoreIME + + thumb_func_start GameFreakRTC_ConvertFromBCD +; u8 GameFreakRTC_ConvertFromBCD(u8 bcdByte) +GameFreakRTC_ConvertFromBCD: ; 802F0F8 + push {lr} + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x9F + bhi @0802F10A + movs r3, 0xF + ands r3, r2 + cmp r3, 0x9 + bls @0802F10E +@0802F10A: + movs r0, 0xFF + b @0802F11C +@0802F10E: + lsrs r1, r0, 28 + movs r0, 0xF + ands r1, r0 + lsls r0, r1, 2 + adds r0, r1 + lsls r0, 1 + adds r0, r3 +@0802F11C: + pop {r1} + bx r1 + thumb_func_end GameFreakRTC_ConvertFromBCD + + thumb_func_start GameFreakRTC_IsLeapYear +; BOOL GameFreakRTC_IsLeapYear(u32 year) +GameFreakRTC_IsLeapYear: ; 802F120 + push {r4,lr} + adds r4, r0, 0 + movs r0, 0x3 + ands r0, r4 + cmp r0, 0 + bne @0802F138 + adds r0, r4, 0 + movs r1, 0x64 + bl __umodsi3 + cmp r0, 0 + bne @0802F146 +@0802F138: + movs r1, 0xC8 + lsls r1, 1 + adds r0, r4, 0 + bl __umodsi3 + cmp r0, 0 + bne @0802F14A +@0802F146: + movs r0, 0x1 + b @0802F14C +@0802F14A: + movs r0, 0 +@0802F14C: + pop {r4} + pop {r1} + bx r1 + thumb_func_end GameFreakRTC_IsLeapYear + + thumb_func_start GameFreakRTC_ConvertYearMonthDayToNumDays +; u16 GameFreakRTC_ConvertYearMonthDayToNumDays(u8 year, u8 month, u8 dayOfMonth) +GameFreakRTC_ConvertYearMonthDayToNumDays: ; 802F154 + push {r4-r7,lr} + mov r7, r8 + push {r7} + lsls r0, 24 + lsrs r7, r0, 24 + lsls r1, 24 + lsrs r6, r1, 24 + lsls r2, 24 + lsrs r2, 24 + mov r8, r2 + movs r5, 0 + subs r4, r7, 0x1 + cmp r4, 0 + blt @0802F192 +@0802F170: + ldr r1, =0x0000016d + adds r0, r5, r1 + lsls r0, 16 + lsrs r5, r0, 16 + adds r0, r4, 0 + bl GameFreakRTC_IsLeapYear + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne @0802F18C + adds r0, r5, 0x1 + lsls r0, 16 + lsrs r5, r0, 16 +@0802F18C: + subs r4, 0x1 + cmp r4, 0 + bge @0802F170 +@0802F192: + subs r0, r6, 0x1 + cmp r0, 0 + ble @0802F1AA + ldr r1, =gUnknown_082FECCC + adds r4, r0, 0 +@0802F19C: + ldm r1!, {r0} + adds r0, r5, r0 + lsls r0, 16 + lsrs r5, r0, 16 + subs r4, 0x1 + cmp r4, 0 + bne @0802F19C +@0802F1AA: + cmp r6, 0x2 + bls @0802F1C2 + adds r0, r7, 0 + bl GameFreakRTC_IsLeapYear + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne @0802F1C2 + adds r0, r5, 0x1 + lsls r0, 16 + lsrs r5, r0, 16 +@0802F1C2: + mov r1, r8 + adds r0, r5, r1 + lsls r0, 16 + lsrs r5, r0, 16 + adds r0, r5, 0 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_ConvertYearMonthDayToNumDays + + thumb_func_start GameFreakRTC_GetNumDaysInternal +; u16 GameFreakRTC_GetNumDaysInternal(struct RtcInfo *rtc) +GameFreakRTC_GetNumDaysInternal: ; 802F1E0 + push {r4-r6,lr} + adds r6, r0, 0 + ldrb r0, [r6] + bl GameFreakRTC_ConvertFromBCD + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldrb r0, [r6, 0x1] + bl GameFreakRTC_ConvertFromBCD + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + ldrb r0, [r6, 0x2] + bl GameFreakRTC_ConvertFromBCD + adds r2, r0, 0 + lsls r2, 24 + lsrs r2, 24 + adds r0, r5, 0 + adds r1, r4, 0 + bl GameFreakRTC_ConvertYearMonthDayToNumDays + lsls r0, 16 + lsrs r0, 16 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end GameFreakRTC_GetNumDaysInternal + + thumb_func_start GameFreakRTC_Init +; void GameFreakRTC_Init() +GameFreakRTC_Init: ; 802F21C + push {r4,r5,lr} + ldr r5, =0x03000db8 + movs r0, 0 + strh r0, [r5] + bl GameFreakRTC_ClearIME + bl RTC_SetReadWrite + bl RTC_Init + ldr r4, =0x03000dcc + strb r0, [r4] + bl GameFreakRTC_RestoreIME + ldrb r4, [r4] + movs r0, 0xF + ands r0, r4 + cmp r0, 0x1 + beq @0802F250 + movs r0, 0x1 + strh r0, [r5] + b @0802F26E + .align 2, 0 + .pool +@0802F250: + movs r0, 0xF0 + ands r0, r4 + cmp r0, 0 + beq @0802F25A + movs r0, 0x2 +@0802F25A: + strh r0, [r5] + ldr r4, =0x03000dc0 + adds r0, r4, 0 + bl GameFreakRTC_GetControlRegAndRTCDateTime + adds r0, r4, 0 + bl GameFreakRTC_TestForErrors + ldr r1, =0x03000db8 + strh r0, [r1] +@0802F26E: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_Init + + thumb_func_start GameFreakRTC_GetErrorFlags +; u16 GameFreakRTC_GetErrorFlags() +GameFreakRTC_GetErrorFlags: ; 802F27C + ldr r0, =0x03000db8 + ldrh r0, [r0] + bx lr + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_GetErrorFlags + + thumb_func_start GameFreakRTC_GetRTCDateTime +; void GameFreakRTC_GetRTCDateTime(struct RtcInfo *rtc) +GameFreakRTC_GetRTCDateTime: ; 802F288 + push {r4,lr} + adds r2, r0, 0 + ldr r0, =0x03000db8 + ldrh r1, [r0] + movs r0, 0xFF + lsls r0, 4 + ands r0, r1 + cmp r0, 0 + beq @0802F2AC + adds r1, r2, 0 + ldr r0, =gUnknown_082FECC0 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + b @0802F2B2 + .align 2, 0 + .pool +@0802F2AC: + adds r0, r2, 0 + bl GameFreakRTC_GetControlRegAndRTCDateTime +@0802F2B2: + pop {r4} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetRTCDateTime + + thumb_func_start GameFreakRTC_GetRTCDateTimeInternal +; void GameFreakRTC_GetRTCDateTimeInternal(struct RtcInfo *rtc) +GameFreakRTC_GetRTCDateTimeInternal: ; 802F2B8 + push {r4,lr} + adds r4, r0, 0 + bl GameFreakRTC_ClearIME + adds r0, r4, 0 + bl RTC_GetDateTime + bl GameFreakRTC_RestoreIME + pop {r4} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetRTCDateTimeInternal + + thumb_func_start GameFreakRTC_GetControlReg +; void GameFreakRTC_GetControlReg(struct RtcInfo *rtc) +GameFreakRTC_GetControlReg: ; 802F2D0 + push {r4,lr} + adds r4, r0, 0 + bl GameFreakRTC_ClearIME + adds r0, r4, 0 + bl RTC_GetControlReg + bl GameFreakRTC_RestoreIME + pop {r4} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetControlReg + + thumb_func_start GameFreakRTC_GetControlRegAndRTCDateTime +; void GameFreakRTC_GetControlRegAndRTCDateTime(struct RtcInfo *rtc) +GameFreakRTC_GetControlRegAndRTCDateTime: ; 802F2E8 + push {r4,lr} + adds r4, r0, 0 + bl GameFreakRTC_GetControlReg + adds r0, r4, 0 + bl GameFreakRTC_GetRTCDateTimeInternal + pop {r4} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetControlRegAndRTCDateTime + + thumb_func_start GameFreakRTC_TestForErrors +; u16 GameFreakRTC_TestForErrors(struct RtcInfo *rtc) +GameFreakRTC_TestForErrors: ; 802F2FC + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r7, r0, 0 + ldrb r1, [r7, 0x7] + movs r0, 0x80 + ands r0, r1 + lsls r0, 24 + lsrs r0, 24 + negs r0, r0 + asrs r4, r0, 31 + movs r0, 0x20 + ands r4, r0 + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne @0802F322 + movs r0, 0x10 + orrs r4, r0 +@0802F322: + ldrb r0, [r7] + bl GameFreakRTC_ConvertFromBCD + mov r8, r0 + cmp r0, 0xFF + bne @0802F336 + movs r0, 0x40 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F336: + ldrb r0, [r7, 0x1] + bl GameFreakRTC_ConvertFromBCD + adds r6, r0, 0 + cmp r6, 0xFF + beq @0802F34A + cmp r6, 0 + beq @0802F34A + cmp r6, 0xC + ble @0802F352 +@0802F34A: + movs r0, 0x80 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F352: + ldrb r0, [r7, 0x2] + bl GameFreakRTC_ConvertFromBCD + adds r5, r0, 0 + cmp r5, 0xFF + bne @0802F36A + movs r1, 0x80 + lsls r1, 1 + adds r0, r1, 0 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F36A: + cmp r6, 0x2 + bne @0802F384 + mov r0, r8 + bl GameFreakRTC_IsLeapYear + lsls r0, 24 + lsrs r0, 24 + ldr r1, =gUnknown_082FECCC + ldr r1, [r1, 0x4] + adds r0, r1 + b @0802F38E + .align 2, 0 + .pool +@0802F384: + ldr r0, =gUnknown_082FECCC + subs r1, r6, 0x1 + lsls r1, 2 + adds r1, r0 + ldr r0, [r1] +@0802F38E: + cmp r5, r0 + ble @0802F39E + movs r1, 0x80 + lsls r1, 1 + adds r0, r1, 0 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F39E: + ldrb r0, [r7, 0x4] + bl GameFreakRTC_ConvertFromBCD + adds r5, r0, 0 + cmp r5, 0x18 + ble @0802F3B6 + movs r1, 0x80 + lsls r1, 2 + adds r0, r1, 0 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F3B6: + ldrb r0, [r7, 0x5] + bl GameFreakRTC_ConvertFromBCD + adds r5, r0, 0 + cmp r5, 0x3C + ble @0802F3CE + movs r1, 0x80 + lsls r1, 3 + adds r0, r1, 0 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F3CE: + ldrb r0, [r7, 0x6] + bl GameFreakRTC_ConvertFromBCD + adds r5, r0, 0 + cmp r5, 0x3C + ble @0802F3E6 + movs r1, 0x80 + lsls r1, 4 + adds r0, r1, 0 + orrs r4, r0 + lsls r0, r4, 16 + lsrs r4, r0, 16 +@0802F3E6: + adds r0, r4, 0 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_TestForErrors + + thumb_func_start GameFreakRTC_Reset +; void GameFreakRTC_Reset() +GameFreakRTC_Reset: ; 802F3F8 + push {lr} + bl GameFreakRTC_ClearIME + bl RTC_Reset + bl GameFreakRTC_RestoreIME + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_Reset + + thumb_func_start GameFreakRTC_FormatDecimalTimeString +; void GameFreakRTC_FormatDecimalTimeString(u8 *dest, s32 hour, s32 minute, s32 second) +GameFreakRTC_FormatDecimalTimeString: ; 802F40C + push {r4-r6,lr} + adds r5, r2, 0 + adds r6, r3, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToDecimalString + movs r4, 0xF0 + strb r4, [r0] + adds r0, 0x1 + adds r1, r5, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToDecimalString + strb r4, [r0] + adds r0, 0x1 + adds r1, r6, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToDecimalString + movs r1, 0xFF + strb r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_FormatDecimalTimeString + + thumb_func_start GameFreakRTC_FormatHexTimeString +; void GameFreakRTC_FormatHexTimeString(u8 *dest, s32 hour, s32 minute, s32 second) +GameFreakRTC_FormatHexTimeString: ; 802F444 + push {r4-r6,lr} + adds r5, r2, 0 + adds r6, r3, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToHexString + movs r4, 0xF0 + strb r4, [r0] + adds r0, 0x1 + adds r1, r5, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToHexString + strb r4, [r0] + adds r0, 0x1 + adds r1, r6, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToHexString + movs r1, 0xFF + strb r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_FormatHexTimeString + + thumb_func_start GameFreakRTC_FormatHexTimeStringFromRtcInfo +; void GameFreakRTC_FormatHexTimeStringFromRtcInfo() +GameFreakRTC_FormatHexTimeStringFromRtcInfo: ; 802F47C + push {lr} + ldr r3, =0x03000dc0 + ldrb r1, [r3, 0x4] + ldrb r2, [r3, 0x5] + ldrb r3, [r3, 0x6] + bl GameFreakRTC_FormatHexTimeString + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_FormatHexTimeStringFromRtcInfo + + thumb_func_start GameFreakRTC_FormatDecimalYearMonthDayString +; void GameFreakRTC_FormatDecimalYearMonthDayString(u8 *dest, s32 year, s32 month, s32 dayOfMonth) +GameFreakRTC_FormatDecimalYearMonthDayString: ; 802F494 + push {r4-r6,lr} + adds r5, r2, 0 + adds r6, r3, 0 + movs r2, 0x2 + movs r3, 0x4 + bl ConvertIntToDecimalString + movs r4, 0xAE + strb r4, [r0] + adds r0, 0x1 + adds r1, r5, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToDecimalString + strb r4, [r0] + adds r0, 0x1 + adds r1, r6, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToDecimalString + movs r1, 0xFF + strb r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_FormatDecimalYearMonthDayString + + thumb_func_start GameFreakRTC_FormatHexYearMonthDayString +; void GameFreakRTC_FormatHexYearMonthDayString(u8 *dest, s32 year, s32 month, s32 dayOfMonth) +GameFreakRTC_FormatHexYearMonthDayString: ; 802F4CC + push {r4-r6,lr} + adds r5, r2, 0 + adds r6, r3, 0 + movs r2, 0x2 + movs r3, 0x4 + bl ConvertIntToHexString + movs r4, 0xAE + strb r4, [r0] + adds r0, 0x1 + adds r1, r5, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToHexString + strb r4, [r0] + adds r0, 0x1 + adds r1, r6, 0 + movs r2, 0x2 + movs r3, 0x2 + bl ConvertIntToHexString + movs r1, 0xFF + strb r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_FormatHexYearMonthDayString + + thumb_func_start GameFreakRTC_GetRTCDelta +; void GameFreakRTC_GetRTCDelta(RtcInfo *rtc, GameDateTime *delta, GameDateTime *dateTime) +GameFreakRTC_GetRTCDelta: ; 802F504 + push {r4-r7,lr} + adds r5, r0, 0 + adds r7, r1, 0 + adds r6, r2, 0 + bl GameFreakRTC_GetNumDaysInternal + adds r4, r0, 0 + lsls r4, 16 + lsrs r4, 16 + ldrb r0, [r5, 0x6] + bl GameFreakRTC_ConvertFromBCD + ldrb r1, [r6, 0x4] + subs r0, r1 + strb r0, [r7, 0x4] + ldrb r0, [r5, 0x5] + bl GameFreakRTC_ConvertFromBCD + ldrb r1, [r6, 0x3] + subs r0, r1 + strb r0, [r7, 0x3] + ldrb r0, [r5, 0x4] + bl GameFreakRTC_ConvertFromBCD + ldrb r1, [r6, 0x2] + subs r0, r1 + strb r0, [r7, 0x2] + ldrh r0, [r6] + subs r4, r0 + strh r4, [r7] + ldrb r1, [r7, 0x4] + movs r0, 0x4 + ldrsb r0, [r7, r0] + cmp r0, 0 + bge @0802F556 + adds r0, r1, 0 + adds r0, 0x3C + strb r0, [r7, 0x4] + ldrb r0, [r7, 0x3] + subs r0, 0x1 + strb r0, [r7, 0x3] +@0802F556: + ldrb r1, [r7, 0x3] + movs r0, 0x3 + ldrsb r0, [r7, r0] + cmp r0, 0 + bge @0802F56C + adds r0, r1, 0 + adds r0, 0x3C + strb r0, [r7, 0x3] + ldrb r0, [r7, 0x2] + subs r0, 0x1 + strb r0, [r7, 0x2] +@0802F56C: + ldrb r1, [r7, 0x2] + movs r0, 0x2 + ldrsb r0, [r7, r0] + cmp r0, 0 + bge @0802F582 + adds r0, r1, 0 + adds r0, 0x18 + strb r0, [r7, 0x2] + ldrh r0, [r7] + subs r0, 0x1 + strh r0, [r7] +@0802F582: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetRTCDelta + + thumb_func_start GameFreakRTC_CalcLocalDateTime +; void GameFreakRTC_CalcLocalDateTime() +GameFreakRTC_CalcLocalDateTime: ; 802F588 + push {r4,lr} + ldr r4, =0x03000dc0 + adds r0, r4, 0 + bl GameFreakRTC_GetRTCDateTime + ldr r1, =0x03005cf8 + ldr r0, =0x03005d90 + ldr r2, [r0] + adds r2, 0x98 + adds r0, r4, 0 + bl GameFreakRTC_GetRTCDelta + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_CalcLocalDateTime + + thumb_func_start GameFreakRTC_CalcRTCToLocalDelta_DayZero +; void GameFreakRTC_CalcRTCToLocalDelta_DayZero(u8 hour, u8 minute) +GameFreakRTC_CalcRTCToLocalDelta_DayZero: ; 802F5B4 + push {lr} + adds r3, r0, 0 + adds r2, r1, 0 + movs r0, 0 + adds r1, r3, 0 + movs r3, 0 + bl GameFreakRTC_CalcRTCToLocalDelta + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_CalcRTCToLocalDelta_DayZero + + thumb_func_start GameFreakRTC_CalcRTCToLocalDelta +; void GameFreakRTC_CalcRTCToLocalDelta(u16 numDays, u8 hour, u8 minute, u8 second) +GameFreakRTC_CalcRTCToLocalDelta: ; 802F5C8 + push {r4,r5,lr} + ldr r4, =0x03005cf8 + strh r0, [r4] + strb r1, [r4, 0x2] + strb r2, [r4, 0x3] + strb r3, [r4, 0x4] + ldr r5, =0x03000dc0 + adds r0, r5, 0 + bl GameFreakRTC_GetRTCDateTime + ldr r0, =0x03005d90 + ldr r1, [r0] + adds r1, 0x98 + adds r0, r5, 0 + adds r2, r4, 0 + bl GameFreakRTC_GetRTCDelta + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_CalcRTCToLocalDelta + + thumb_func_start GameFreakRTC_GetDelta +; void GameFreakRTC_GetDelta(GameDateTime *delta, GameDateTime *dateTime1, GameDateTime *dateTime2) +GameFreakRTC_GetDelta: ; 802F5FC + push {r4-r6,lr} + adds r4, r0, 0 + ldrb r3, [r2, 0x4] + ldrb r0, [r1, 0x4] + subs r5, r3, r0 + strb r5, [r4, 0x4] + ldrb r3, [r2, 0x3] + ldrb r0, [r1, 0x3] + subs r6, r3, r0 + strb r6, [r4, 0x3] + ldrb r0, [r2, 0x2] + ldrb r3, [r1, 0x2] + subs r0, r3 + strb r0, [r4, 0x2] + ldrh r0, [r2] + ldrh r1, [r1] + subs r0, r1 + strh r0, [r4] + lsls r0, r5, 24 + cmp r0, 0 + bge @0802F630 + adds r0, r5, 0 + adds r0, 0x3C + strb r0, [r4, 0x4] + subs r0, r6, 0x1 + strb r0, [r4, 0x3] +@0802F630: + ldrb r1, [r4, 0x3] + movs r0, 0x3 + ldrsb r0, [r4, r0] + cmp r0, 0 + bge @0802F646 + adds r0, r1, 0 + adds r0, 0x3C + strb r0, [r4, 0x3] + ldrb r0, [r4, 0x2] + subs r0, 0x1 + strb r0, [r4, 0x2] +@0802F646: + ldrb r1, [r4, 0x2] + movs r0, 0x2 + ldrsb r0, [r4, r0] + cmp r0, 0 + bge @0802F65C + adds r0, r1, 0 + adds r0, 0x18 + strb r0, [r4, 0x2] + ldrh r0, [r4] + subs r0, 0x1 + strh r0, [r4] +@0802F65C: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end GameFreakRTC_GetDelta + + thumb_func_start GameFreakRTC_GetNumMinutes +; u16 GameFreakRTC_GetNumMinutes() +GameFreakRTC_GetNumMinutes: ; 802F664 + push {r4,lr} + ldr r4, =0x03000dc0 + adds r0, r4, 0 + bl GameFreakRTC_GetRTCDateTime + adds r0, r4, 0 + bl GameFreakRTC_GetNumDaysInternal + lsls r0, 16 + lsrs r0, 16 + lsls r1, r0, 1 + adds r1, r0 + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 5 + ldrb r2, [r4, 0x4] + lsls r1, r2, 4 + subs r1, r2 + lsls r1, 2 + adds r0, r1 + ldrb r4, [r4, 0x5] + adds r0, r4 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_GetNumMinutes + + thumb_func_start GameFreakRTC_GetNumDays +; u16 GameFreakRTC_GetNumDays() +GameFreakRTC_GetNumDays: ; 802F69C + push {lr} + ldr r0, =0x03000dc0 + bl GameFreakRTC_GetNumDaysInternal + lsls r0, 16 + lsrs r0, 16 + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GameFreakRTC_GetNumDays |