📄 osal.lst
字号:
112 return strlen( pString );
\ 000004 ; Setup parameters for call to function strlen
\ 000004 90.... MOV DPTR,#(strlen & 0xffff)
\ 000007 74.. MOV A,#((strlen >> 16) & 0xff)
\ 000009 02.... LJMP ?Subroutine19 & 0xFFFF
113 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine19:
\ 000000 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ ??Subroutine19_0:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
114
115 /*********************************************************************
116 * @fn osal_memcpy
117 *
118 * @brief
119 *
120 * Generic memory copy.
121 *
122 * Note: This function differs from the standard memcpy(), since
123 * it returns the pointer to the next destination byte. The
124 * standard memcpy() returns the original destination address.
125 *
126 * @param dst - destination address
127 * @param src - source address
128 * @param len - number of bytes to copy
129 *
130 * @return pointer to end of destination buffer
131 */
\ In segment BANKED_CODE, align 1, keep-with-next
132 void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len )
\ osal_memcpy:
133 {
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 740B MOV A,#0xb
\ 00000B 12.... LCALL ?XSTACK_DISP0_8
\ 00000E 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_19:
\ 000011 A3 INC DPTR
\ 000012 E0 MOVX A,@DPTR
134 byte *pDst;
135 const byte GENERIC *pSrc;
136
137 pSrc = src;
\ 000013 A9.. MOV R1,?V0 + 0
\ 000015 AA.. MOV R2,?V0 + 1
\ 000017 FB MOV R3,A
138 pDst = dst;
\ 000018 8E82 MOV DPL,R6
\ 00001A 8F83 MOV DPH,R7
\ 00001C 800D SJMP ??osal_memcpy_0
139
140 while ( len-- )
141 *pDst++ = *pSrc++;
\ ??osal_memcpy_1:
\ 00001E 12.... LCALL ?C_GPTR_LOAD
\ 000021 F0 MOVX @DPTR,A
\ 000022 E9 MOV A,R1
\ 000023 2401 ADD A,#0x1
\ 000025 09 INC R1
\ 000026 EA MOV A,R2
\ 000027 3400 ADDC A,#0x0
\ 000029 FA MOV R2,A
\ 00002A A3 INC DPTR
\ ??osal_memcpy_0:
\ 00002B EC MOV A,R4
\ 00002C FE MOV R6,A
\ 00002D ED MOV A,R5
\ 00002E FF MOV R7,A
\ 00002F 74FF MOV A,#-0x1
\ 000031 2E ADD A,R6
\ 000032 1C DEC R4
\ 000033 74FF MOV A,#-0x1
\ 000035 3F ADDC A,R7
\ 000036 FD MOV R5,A
\ 000037 EE MOV A,R6
\ 000038 7001 JNZ ??osal_memcpy_2
\ 00003A EF MOV A,R7
\ ??osal_memcpy_2:
\ 00003B 70E1 JNZ ??osal_memcpy_1
142
143 return ( pDst );
\ 00003D AA82 MOV R2,DPL
\ 00003F AB83 MOV R3,DPH
\ 000041 REQUIRE ?Subroutine20
\ 000041 ; // Fall through to label ?Subroutine20
144 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine20:
\ 000000 7F03 MOV R7,#0x3
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F5.. MOV ?V0 + 0,A
\ 000003 A3 INC DPTR
\ 000004 E0 MOVX A,@DPTR
\ 000005 F5.. MOV ?V0 + 1,A
\ 000007 22 RET
145
146 /*********************************************************************
147 * @fn osal_cpyExtAddr
148 *
149 * @brief
150 *
151 * Copy extended addresses. This function will copy 8 bytes.
152 *
153 * @param dest destination address pointer
154 * @param src source address pointer
155 *
156 * @return dest + Z_EXTADDR_LEN
157 */
\ In segment BANKED_CODE, align 1, keep-with-next
158 void *osal_cpyExtAddr( void *dest, void *src )
\ osal_cpyExtAddr:
159 {
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
160 return osal_memcpy( dest, src, Z_EXTADDR_LEN );
\ 000005 ; Setup parameters for call to function osal_memcpy
\ 000005 8C.. MOV ?V0 + 0,R4
\ 000007 8D.. MOV ?V0 + 1,R5
\ 000009 75..00 MOV ?V0 + 2,#0x0
\ 00000C 78.. MOV R0,#?V0 + 0
\ 00000E 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000011 7C08 MOV R4,#0x8
\ 000013 7D00 MOV R5,#0x0
\ 000015 90.... MOV DPTR,#(osal_memcpy & 0xffff)
\ 000018 74.. MOV A,#((osal_memcpy >> 16) & 0xff)
\ 00001A 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00001D 7403 MOV A,#0x3
\ 00001F 12.... LCALL ?DEALLOC_XSTACK8
\ 000022 80.. SJMP ?Subroutine20
161 }
162
163 /*********************************************************************
164 * @fn osal_memset
165 *
166 * @brief
167 *
168 * Set memory buffer to value.
169 *
170 * @param dest - pointer to buffer
171 * @param value - what to set each byte of the message
172 * @param size - how big
173 *
174 * @return value of next widget, 0 if no widget found
175 */
\ In segment BANKED_CODE, align 1, keep-with-next
176 void *osal_memset( void *dest, byte value, int len )
\ osal_memset:
177 {
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
178 return memset( dest, value, len );
\ 000005 ; Setup parameters for call to function memset
\ 000005 8C.. MOV ?V0 + 0,R4
\ 000007 8D.. MOV ?V0 + 1,R5
\ 000009 78.. MOV R0,#?V0 + 0
\ 00000B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00000E E9 MOV A,R1
\ 00000F FC MOV R4,A
\ 000010 7D00 MOV R5,#0x0
\ 000012 90.... MOV DPTR,#(memset & 0xffff)
\ 000015 74.. MOV A,#((memset >> 16) & 0xff)
\ 000017 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00001A 7402 MOV A,#0x2
\ 00001C 12.... LCALL ?DEALLOC_XSTACK8
\ 00001F 02.... LJMP ?Subroutine21 & 0xFFFF
179 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine21:
\ 000000 7F02 MOV R7,#0x2
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
180
181 /*********************************************************************
182 * @fn osal_build_uint16
183 *
184 * @brief
185 *
186 * Build a uint16 out of 2 bytes (0 then 1).
187 *
188 * @param swapped - 0 then 1
189 *
190 * @return uint16
191 */
\ In segment BANKED_CODE, align 1, keep-with-next
192 uint16 osal_build_uint16( byte *swapped )
\ osal_build_uint16:
193 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
194 return ( BUILD_UINT16( swapped[0], swapped[1] ) );
\ 000005 8A82 MOV DPL,R2
\ 000007 8B83 MOV DPH,R3
\ 000009 E0 MOVX A,@DPTR
\ 00000A FC MOV R4,A
\ 00000B A3 INC DPTR
\ 00000C E0 MOVX A,@DPTR
\ 00000D F9 MOV R1,A
\ 00000E E4 CLR A
\ 00000F 2C ADD A,R4
\ 000010 FA MOV R2,A
\ 000011 E9 MOV A,R1
\ 000012 3400 ADDC A,#0x0
\ 000014 FB MOV R3,A
\ 000015 REQUIRE ?Subroutine23
\ 000015 ; // Fall through to label ?Subroutine23
195 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine23:
\ 000000 7F01 MOV R7,#0x1
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
196
197 /*********************************************************************
198 * @fn osal_build_uint32
199 *
200 * @brief
201 *
202 * Build a uint32 out of sequential bytes.
203 *
204 * @param swapped - sequential bytes
205 * @param len - number of bytes in the byte array
206 *
207 * @return uint32
208 */
\ In segment BANKED_CODE, align 1, keep-with-next
209 uint32 osal_build_uint32( byte *swapped, byte len )
\ osal_build_uint32:
210 {
\ 000000 74F0 MOV A,#-0x10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -