diff options
Diffstat (limited to 'arm7/asm/RTC_internal.s')
-rw-r--r-- | arm7/asm/RTC_internal.s | 780 |
1 files changed, 780 insertions, 0 deletions
diff --git a/arm7/asm/RTC_internal.s b/arm7/asm/RTC_internal.s new file mode 100644 index 00000000..b310c9aa --- /dev/null +++ b/arm7/asm/RTC_internal.s @@ -0,0 +1,780 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start FUN_03805A48 +FUN_03805A48: ;@ 0x03805A48 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl RTCi_GpioStart + mov r0, r7 + mov r1, r6 + bl RTCi_GpioSendCommand + cmp r7, #6 + beq _03805A90 + cmp r7, #134 ;@ 0x86 + bne _03805A9C + mov r0, r5 + mov r1, r4 + bl RTCi_GpioReceiveData + b _03805A9C +_03805A90: + mov r0, r5 + mov r1, r4 + bl RTCi_GpioSendData +_03805A9C: + bl RTCi_GpioEnd + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + + arm_func_start FUN_03805AAC +FUN_03805AAC: ;@ 0x03805AAC + ldr r2, [r0] + mov r1, r2, lsl #18 + mov r3, r1, lsr #26 + cmp r3, #35 ;@ 0x23 + addls pc, pc, r3, lsl #2 + b _03805BA8 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B78 + b _03805B78 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805B54 + b _03805B54 + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C +_03805B54: + mov r1, r2, lsl #17 + movs r1, r1, lsr #31 + bxeq lr + bic r2, r2, #16128 ;@ 0x3f00 + add r1, r3, #18 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805B78: + mov r1, r2, lsl #17 + movs r1, r1, lsr #31 + bxeq lr + bic r2, r2, #16128 ;@ 0x3f00 + add r1, r3, #24 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805B9C: + orr r1, r2, #16384 ;@ 0x4000 + str r1, [r0] + bx lr +_03805BA8: + ldr r1, [r0] + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r1, r1, #16128 ;@ 0x3f00 + str r1, [r0] + bx lr + + arm_func_start FUN_03805BC4 +FUN_03805BC4: ;@ 0x03805BC4 + ldr r1, [r0] + mov r2, r1, lsl #18 + mov r2, r2, lsr #26 + cmp r2, #35 ;@ 0x23 + addls pc, pc, r2, lsl #2 + b _03805CD0 + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805C6C + b _03805C6C + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CA4 + b _03805CA4 + b _03805C78 + b _03805C78 +_03805C6C: + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + bx lr +_03805C78: + orr r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r2, r1, #16128 ;@ 0x3f00 + mov r1, r1, lsl #18 + mov r1, r1, lsr #26 + sub r1, r1, #18 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805CA4: + orr r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r2, r1, #16128 ;@ 0x3f00 + mov r1, r1, lsl #18 + mov r1, r1, lsr #26 + sub r1, r1, #24 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805CD0: + ldr r1, [r0] + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r1, r1, #16128 ;@ 0x3f00 + str r1, [r0] + bx lr + + arm_func_start RTC_WriteFree +RTC_WriteFree: ;@ 0x03805CEC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #112 ;@ 0x70 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadFree +RTC_ReadFree: ;@ 0x03805D18 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #112 ;@ 0x70 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAdjust +RTC_WriteAdjust: ;@ 0x03805D44 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #48 ;@ 0x30 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAdjust +RTC_ReadAdjust: ;@ 0x03805D70 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #48 ;@ 0x30 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteStatus2 +RTC_WriteStatus2: ;@ 0x03805D9C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #64 ;@ 0x40 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadStatus2 +RTC_ReadStatus2: ;@ 0x03805DC8 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #64 ;@ 0x40 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteStatus1 +RTC_WriteStatus1: ;@ 0x03805DF4 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #0 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadStatus1 +RTC_ReadStatus1: ;@ 0x03805E20 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #0 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAlarm2 +RTC_WriteAlarm2: ;@ 0x03805E4C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #25 + movs r0, r0, lsr #31 + moveq r0, #0 + beq _03805E8C + mov r0, #6 + mov r1, #80 ;@ 0x50 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805E8C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAlarm2 +RTC_ReadAlarm2: ;@ 0x03805E98 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #25 + movs r0, r0, lsr #31 + moveq r0, #0 + beq _03805ED8 + mov r0, #134 ;@ 0x86 + mov r1, #80 ;@ 0x50 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805ED8: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAlarm1 +RTC_WriteAlarm1: ;@ 0x03805EE4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + cmp r0, #4 + movne r0, #0 + bne _03805F28 + mov r0, #6 + mov r1, #16 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805F28: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAlarm1 +RTC_ReadAlarm1: ;@ 0x03805F34 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + cmp r0, #4 + movne r0, #0 + bne _03805F78 + mov r0, #134 ;@ 0x86 + mov r1, #16 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805F78: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WritePulse +RTC_WritePulse: ;@ 0x03805F84 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + and r0, r0, #11 + cmp r0, #1 + movne r0, #0 + bne _03805FCC + mov r0, #6 + mov r1, #16 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + mov r0, #1 +_03805FCC: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadPulse +RTC_ReadPulse: ;@ 0x03805FD8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + and r0, r0, #11 + cmp r0, #1 + movne r0, #0 + bne _03806020 + mov r0, #134 ;@ 0x86 + mov r1, #16 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + mov r0, #1 +_03806020: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteTime +RTC_WriteTime: ;@ 0x0380602C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #96 ;@ 0x60 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadTime +RTC_ReadTime: ;@ 0x03806058 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #96 ;@ 0x60 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadDate +RTC_ReadDate: ;@ 0x03806084 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #32 + mov r2, r4 + mov r3, #4 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteDateTime +RTC_WriteDateTime: ;@ 0x038060B0 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #32 + mov r2, r4 + mov r3, #7 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadDateTime +RTC_ReadDateTime: ;@ 0x038060DC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #32 + mov r2, r4 + mov r3, #7 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_SetHourFormat +RTC_SetHourFormat: ;@ 0x03806108 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #12 + mov r4, r0 + and r5, r4, #1 + mov r0, r5, lsl #16 + mov r0, r0, lsr #16 + cmp r0, #1 + bne _038061FC + add r0, sp, #0 + bl RTC_ReadStatus1 + ldrh r1, [sp] + mov r0, r1, lsl #30 + mov r2, r0, lsr #31 + mov r0, r5, lsl #16 + cmp r2, r0, lsr #16 + beq _038061FC + and r4, r4, #1 + bic r1, r1, #2 + mov r0, r4, lsl #16 + mov r0, r0, lsr #16 + and r0, r0, #1 + orr r0, r1, r0, lsl #1 + strh r0, [sp] + add r0, sp, #0 + bl RTC_WriteStatus1 + mov r0, #134 ;@ 0x86 + mov r1, #16 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, r4, lsl #16 + movs r0, r0, lsr #16 + bne _03806198 + add r0, sp, #4 + bl FUN_03805BC4 + b _038061A0 +_03806198: + add r0, sp, #4 + bl FUN_03805AAC +_038061A0: + mov r0, #6 + mov r1, #16 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #134 ;@ 0x86 + mov r1, #80 ;@ 0x50 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, r5, lsl #16 + movs r0, r0, lsr #16 + bne _038061E0 + add r0, sp, #4 + bl FUN_03805BC4 + b _038061E8 +_038061E0: + add r0, sp, #4 + bl FUN_03805AAC +_038061E8: + mov r0, #6 + mov r1, #80 ;@ 0x50 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 +_038061FC: + add sp, sp, #12 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start RTC_Reset +RTC_Reset: ;@ 0x03806208 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + ldrh r0, [sp] + bic r0, r0, #1 + orr r0, r0, #1 + strh r0, [sp] + mov r0, #6 + mov r1, #0 + add r2, sp, #0 + mov r3, #1 + bl FUN_03805A48 + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start RTCi_GpioStart +RTCi_GpioStart: ;@ 0x03806248 + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #114 ;@ 0x72 + strh r0, [ip] + mov r3, #2 +_03806264: + subs r3, r3, #1 + bne _03806264 + bic r0, r0, #4 + orr r0, r0, #4 + strh r0, [ip] + mov r3, #2 +_0380627C: + subs r3, r3, #1 + bne _0380627C + bx lr + + arm_func_start RTCi_GpioEnd +RTCi_GpioEnd: ;@ 0x03806288 + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + mov r3, #2 +_03806294: + subs r3, r3, #1 + bne _03806294 + ldrh r0, [ip] + bic r0, r0, #4 + orr r0, r0, #0 + strh r0, [ip] + mov r3, #2 +_038062B0: + subs r3, r3, #1 + bne _038062B0 + bx lr + + arm_func_start RTCi_GpioSendCommand +RTCi_GpioSendCommand: ;@ 0x038062BC + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + orr r1, r0, r1 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #116 ;@ 0x74 + mov r2, #0 +_038062D8: + bic r0, r0, #3 + orr r0, r0, #0 + mov r3, #1 + tst r3, r1, lsr r2 + movne r3, #1 + moveq r3, #0 + orr r0, r0, r3 + strh r0, [ip] + mov r3, #9 +_038062FC: + subs r3, r3, #1 + bne _038062FC + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_03806314: + subs r3, r3, #1 + bne _03806314 + add r2, r2, #1 + cmp r2, #8 + bne _038062D8 + bx lr + + arm_func_start RTCi_GpioSendData +RTCi_GpioSendData: ;@ 0x0380632C + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 +_03806334: + stmdb sp!, {r0, r1} + tst r0, #1 + ldreqh r1, [r0] + ldrneh r1, [r0, #-1] + movne r1, r1, lsr #8 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #116 ;@ 0x74 + mov r2, #0 +_03806358: + bic r0, r0, #3 + orr r0, r0, #0 + mov r3, #1 + tst r3, r1, lsr r2 + movne r3, #1 + moveq r3, #0 + orr r0, r0, r3 + strh r0, [ip] + mov r3, #9 +_0380637C: + subs r3, r3, #1 + bne _0380637C + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_03806394: + subs r3, r3, #1 + bne _03806394 + add r2, r2, #1 + cmp r2, #8 + bne _03806358 + ldmia sp!, {r0, r1} + add r0, r0, #1 + subs r1, r1, #1 + bne _03806334 + bx lr + + arm_func_start RTCi_GpioReceiveData +RTCi_GpioReceiveData: ;@ 0x038063BC + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 +_038063C4: + stmdb sp!, {r0, r1} + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #100 ;@ 0x64 + mov r2, #0 + mov r1, #0 +_038063DC: + bic r0, r0, #3 + orr r0, r0, #0 + strh r0, [ip] + mov r3, #9 +_038063EC: + subs r3, r3, #1 + bne _038063EC + ldrh r0, [ip] + and r3, r0, #1 + cmp r3, #1 + moveq r3, #128 ;@ 0x80 + movne r3, #0 + orr r2, r3, r2, lsr #1 + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_0380641C: + subs r3, r3, #1 + bne _0380641C + add r1, r1, #1 + cmp r1, #8 + bne _038063DC + ldmia sp!, {r0, r1} + tst r0, #1 + beq _03806454 + ldrh r3, [r0, #-1] + bic r3, r3, #65280 ;@ 0xff00 + mov r2, r2, lsl #8 + orr r3, r2, r3 + strh r3, [r0, #-1] + b _03806464 +_03806454: + ldrh r3, [r0] + bic r3, r3, #255 ;@ 0xff + orr r3, r3, r2 + strh r3, [r0] +_03806464: + add r0, r0, #1 + subs r1, r1, #1 + bne _038063C4 + bx lr |