📄 utils.cod
字号:
; 102 : {
00000 |$L39855|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd00c sub sp, sp, #0xC
00008 |$M39853|
00008 e58d1004 str r1, [sp, #4]
0000c e1a01000 mov r1, r0
00010 e58d1008 str r1, [sp, #8]
; 103 : UINT32 ms, sec, min, hour, day, month, year, leap;
; 104 : UINT32 *mtbl;
; 105 :
; 106 : ms = 0;
; 107 : sec = CurrTime % 60;
; 108 : min = (CurrTime / 60);
00014 e59f2160 ldr r2, [pc, #0x160]
; 109 : hour = (min / 60);
; 110 : day = (hour / 24);
00018 e59fe158 ldr lr, [pc, #0x158]
0001c e083b291 umull r11, r3, r1, r2
00020 e1a0a2a3 mov r10, r3, lsr #5
00024 e083929a umull r9, r3, r10, r2
; 111 :
; 112 : pSysTime->wMilliseconds = ms;
; 113 : pSysTime->wSecond = sec;
; 114 : pSysTime->wMinute = (min % 60);
; 115 : pSysTime->wHour = (hour % 24);
; 116 : pSysTime->wDayOfWeek = (day + JAN1WEEK) % 7;
00028 e59f2144 ldr r2, [pc, #0x144]
; 117 :
; 118 : year = ORIGINYEAR;
0002c e06a420a rsb r4, r10, r10, lsl #4
00030 e1a072a3 mov r7, r3, lsr #5
00034 e0835e97 umull r5, r3, r7, lr
00038 e0411104 sub r1, r1, r4, lsl #2
0003c e1a00223 mov r0, r3, lsr #4
00040 e2808002 add r8, r0, #2
00044 e0826298 umull r6, r2, r8, r2
00048 e59d4004 ldr r4, [sp, #4]
0004c e067e207 rsb lr, r7, r7, lsl #4
00050 e0483002 sub r3, r8, r2
00054 e08230a3 add r3, r2, r3, lsr #1
00058 e1a03123 mov r3, r3, lsr #2
0005c e58d0000 str r0, [sp]
00060 e0802080 add r2, r0, r0, lsl #1
00064 e0633183 rsb r3, r3, r3, lsl #3
00068 e04a010e sub r0, r10, lr, lsl #2
0006c e0483003 sub r3, r8, r3
00070 e0472182 sub r2, r7, r2, lsl #3
00074 e3a0e000 mov lr, #0
00078 e1c400ba strh r0, [r4, #0xA]
0007c e3a00e7b mov r0, #0x7B, 28
00080 e3a06f5b mov r6, #0x5B, 30
; 119 : while (TRUE)
; 120 : {
; 121 : leap = IsLeapYear(year);
00084 e59f50e4 ldr r5, [pc, #0xE4]
00088 e1c430b4 strh r3, [r4, #4]
0008c e59d3008 ldr r3, [sp, #8]
00090 e1c420b8 strh r2, [r4, #8]
00094 e59d2000 ldr r2, [sp]
00098 e1c4e0be strh lr, [r4, #0xE]
0009c e1c410bc strh r1, [r4, #0xC]
000a0 e380000c orr r0, r0, #0xC
000a4 e3a08064 mov r8, #0x64
000a8 e3a07e19 mov r7, #0x19, 28
000ac e3866001 orr r6, r6, #1
000b0 |$L39717|
000b0 e3a0e000 mov lr, #0
000b4 e3100003 tst r0, #3
000b8 1a00000f bne |$L39836|
000bc e0831590 umull r1, r3, r0, r5
000c0 e3a0e001 mov lr, #1
000c4 e1a032a3 mov r3, r3, lsr #5
000c8 e0020893 mul r2, r3, r8
000cc e0503002 subs r3, r0, r2
000d0 1a000008 bne |$L39852|
000d4 e0831590 umull r1, r3, r0, r5
000d8 e1a033a3 mov r3, r3, lsr #7
000dc e0020793 mul r2, r3, r7
000e0 e0503002 subs r3, r0, r2
000e4 e59d2000 ldr r2, [sp]
000e8 13a0e000 movne lr, #0
000ec 1a000002 bne |$L39836|
000f0 e3a0e001 mov lr, #1
; 123 : break;
; 124 : day -= 365+leap;
000f4 ea000000 b |$L39836|
000f8 |$L39852|
000f8 e59d2000 ldr r2, [sp]
; 119 : while (TRUE)
; 120 : {
; 121 : leap = IsLeapYear(year);
000fc |$L39836|
; 122 : if (day < 365+leap)
000fc e28e3c01 add r3, lr, #1, 24
00100 e283306d add r3, r3, #0x6D
00104 e1520003 cmp r2, r3
; 123 : break;
; 124 : day -= 365+leap;
00108 2042300e subcs r3, r2, lr
0010c 20432006 subcs r2, r3, r6
00110 258d2000 strcs r2, [sp]
; 125 : year++;
00114 22800001 addcs r0, r0, #1
00118 2affffe4 bcs |$L39717|
; 126 : }
; 127 : pSysTime->wYear = year;
; 128 :
; 129 : mtbl = leap ? monthtable_leap : monthtable;
0011c e59f3048 ldr r3, [pc, #0x48]
00120 e35e0000 cmp lr, #0
00124 e1c400b0 strh r0, [r4]
00128 02833030 addeq r3, r3, #0x30
; 130 : for (month=0; month<12; month++) {
0012c e3a01000 mov r1, #0
00130 |$L39720|
; 131 : if (day < mtbl[month])
00130 e5930000 ldr r0, [r3]
00134 e1520000 cmp r2, r0
00138 3a000004 bcc |$L39841|
0013c e2811001 add r1, r1, #1
00140 e351000c cmp r1, #0xC
; 132 : break;
; 133 : day -= mtbl[month];
00144 e0422000 sub r2, r2, r0
00148 e2833004 add r3, r3, #4
0014c 3afffff7 bcc |$L39720|
00150 |$L39841|
; 134 : }
; 135 :
; 136 : pSysTime->wDay = day+1;
00150 e2823001 add r3, r2, #1
; 137 : pSysTime->wMonth = month+1;
00154 e2812001 add r2, r1, #1
00158 e1c420b2 strh r2, [r4, #2]
0015c e1c430b6 strh r3, [r4, #6]
; 138 :
; 139 : return;
; 140 :
; 141 : }
00160 e28dd00c add sp, sp, #0xC
00164 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00168 e12fff1e bx lr
0016c |$L39858|
0016c 00000000 DCD |monthtable_leap|
00170 51eb851f DCD 0x51eb851f
00174 24924925 DCD 0x24924925
00178 aaaaaaab DCD 0xaaaaaaab
0017c 88888889 DCD 0x88888889
00180 |$M39854|
ENDP ; |FormatSystemTime|
EXPORT |OEMGetRealTime|
IMPORT |OALPAtoVA|
00000 AREA |.text| { |OEMGetRealTime| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMGetRealTime|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMGetRealTime| } ; comdat associative
|$T39869| DCD |$L39868|
DCD 0x40000c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |OEMGetRealTime| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMGetRealTime| PROC
; 145 : {
00000 |$L39868|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M39866|
00004 e1a04000 mov r4, r0
; 146 : volatile BULVERDE_RTC_REG *pRTCRegs = NULL;
; 147 : UINT32 CurrTime = 0;
; 148 :
; 149 : // Get the RTC value.
; 150 : //
; 151 : pRTCRegs = (volatile XLLP_RTC_T *)OALPAtoVA(BULVERDE_BASE_REG_PA_RTC, FALSE);
00008 e3a00101 mov r0, #1, 2
0000c e3800609 orr r0, r0, #9, 12
00010 e3a01000 mov r1, #0
00014 eb000000 bl OALPAtoVA
; 152 : CurrTime = pRTCRegs->rcnr;
00018 e5900000 ldr r0, [r0]
; 153 :
; 154 : FormatSystemTime(CurrTime, pSysTime);
0001c e1a01004 mov r1, r4
00020 eb000000 bl FormatSystemTime
; 155 :
; 156 : return(TRUE);
00024 e3a00001 mov r0, #1
; 157 :
; 158 : }
00028 e8bd4010 ldmia sp!, {r4, lr}
0002c e12fff1e bx lr
00030 |$M39867|
ENDP ; |OEMGetRealTime|
EXPORT |OEMEthGetSecs|
00000 AREA |.text| { |OEMEthGetSecs| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMEthGetSecs|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMEthGetSecs| } ; comdat associative
|$T39878| DCD |$L39877|
DCD 0x40001402
; Function compile flags: /Ogsy
00000 AREA |.text| { |OEMEthGetSecs| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMEthGetSecs| PROC
; 162 : {
00000 |$L39877|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd010 sub sp, sp, #0x10
00008 |$M39875|
; 163 : SYSTEMTIME st;
; 164 :
; 165 : OEMGetRealTime( &st );
00008 e28d0000 add r0, sp, #0
0000c eb000000 bl OEMGetRealTime
; 166 :
; 167 : return((60UL * (60UL * (24UL * (31UL * st.wMonth + st.wDay) + st.wHour) + st.wMinute)) + st.wSecond);
00010 e1dd30b2 ldrh r3, [sp, #2]
00014 e1dd20b6 ldrh r2, [sp, #6]
00018 e1dd10b8 ldrh r1, [sp, #8]
0001c e0633283 rsb r3, r3, r3, lsl #5
00020 e0833002 add r3, r3, r2
00024 e0833083 add r3, r3, r3, lsl #1
00028 e1dd20ba ldrh r2, [sp, #0xA]
0002c e0813183 add r3, r1, r3, lsl #3
00030 e0633203 rsb r3, r3, r3, lsl #4
00034 e1dd10bc ldrh r1, [sp, #0xC]
00038 e0823103 add r3, r2, r3, lsl #2
0003c e0633203 rsb r3, r3, r3, lsl #4
00040 e0810103 add r0, r1, r3, lsl #2
; 168 : }
00044 e28dd010 add sp, sp, #0x10
00048 e49de004 ldr lr, [sp], #4
0004c e12fff1e bx lr
00050 |$M39876|
ENDP ; |OEMEthGetSecs|
EXPORT |OALGetTickCount|
00000 AREA |.text| { |OALGetTickCount| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OALGetTickCount|, PDATA, SELECTION=5, ASSOC=|.text| { |OALGetTickCount| } ; comdat associative
|$T39887| DCD |$L39886|
DCD 0x40000701
; Function compile flags: /Ogsy
00000 AREA |.text| { |OALGetTickCount| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OALGetTickCount| PROC
; 181 : {
00000 |$L39886|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M39884|
; 182 : return OEMEthGetSecs () * 1000;
00004 eb000000 bl OEMEthGetSecs
00008 e1a03000 mov r3, r0
0000c e3a02ffa mov r2, #0xFA, 30
00010 e0000293 mul r0, r3, r2
; 183 : }
00014 e49de004 ldr lr, [sp], #4
00018 e12fff1e bx lr
0001c |$M39885|
ENDP ; |OALGetTickCount|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -