You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
4.9 KiB
272 lines
4.9 KiB
#include "iar_common.h"
|
|
|
|
NAME fmemcpy
|
|
|
|
//RTMODEL "__SystemLibrary", "CLib"
|
|
//RTMODEL "__calling_convention", "idata_reentrant"
|
|
RTMODEL "__code_model", "near"
|
|
RTMODEL "__core", "plain"
|
|
//RTMODEL "__data_model", "small"
|
|
RTMODEL "__dptr_size", "16"
|
|
RTMODEL "__extended_stack", "disabled"
|
|
//RTMODEL "__location_for_constants", "data"
|
|
RTMODEL "__number_of_dptrs", "1"
|
|
RTMODEL "__rt_version", "1"
|
|
|
|
RSEG DOVERLAY:DATA:NOROOT(0)
|
|
RSEG IOVERLAY:IDATA:NOROOT(0)
|
|
RSEG ISTACK:IDATA:NOROOT(0)
|
|
RSEG PSTACK:XDATA:NOROOT(0)
|
|
RSEG XSTACK:XDATA:NOROOT(0)
|
|
|
|
PUBWEAK IE
|
|
PUBWEAK EA
|
|
PUBWEAK DPH1
|
|
PUBWEAK DPL1
|
|
PUBWEAK DPS
|
|
PUBLIC fmemcpy
|
|
FUNCTION fmemcpy,0203H
|
|
ARGFRAME ISTACK, 3, STACK
|
|
|
|
CFI Names cfiNames0
|
|
CFI StackFrame CFA_SP SP IDATA
|
|
CFI StackFrame CFA_PSP16 PSP16 XDATA
|
|
CFI StackFrame CFA_XSP16 XSP16 XDATA
|
|
CFI StaticOverlayFrame CFA_IOVERLAY IOVERLAY
|
|
CFI StaticOverlayFrame CFA_DOVERLAY DOVERLAY
|
|
CFI Resource `PSW.CY`:1, `B.BR0`:1, `B.BR1`:1, `B.BR2`:1, `B.BR3`:1
|
|
CFI Resource `B.BR4`:1, `B.BR5`:1, `B.BR6`:1, `B.BR7`:1, `VB.BR8`:1
|
|
CFI Resource `VB.BR9`:1, `VB.BR10`:1, `VB.BR11`:1, `VB.BR12`:1
|
|
CFI Resource `VB.BR13`:1, `VB.BR14`:1, `VB.BR15`:1, VB:8, B:8, A:8
|
|
CFI Resource PSW:8, DPL0:8, DPH0:8, R0:8, R1:8, R2:8, R3:8, R4:8, R5:8
|
|
CFI Resource R6:8, R7:8, V0:8, V1:8, V2:8, V3:8, V4:8, V5:8, V6:8, V7:8
|
|
CFI Resource SP:8, PSPH:8, PSPL:8, PSP16:16, XSPH:8, XSPL:8, XSP16:16
|
|
CFI VirtualResource ?RET:16, ?RET_HIGH:8, ?RET_LOW:8
|
|
CFI ResourceParts PSP16 PSPH, PSPL
|
|
CFI ResourceParts XSP16 XSPH, XSPL
|
|
CFI ResourceParts ?RET ?RET_HIGH, ?RET_LOW
|
|
CFI EndNames cfiNames0
|
|
|
|
CFI Common cfiCommon0 Using cfiNames0
|
|
CFI CodeAlign 1
|
|
CFI DataAlign -1
|
|
CFI ReturnAddress ?RET CODE
|
|
CFI CFA_DOVERLAY Used
|
|
CFI CFA_IOVERLAY Used
|
|
CFI CFA_SP SP+-2
|
|
CFI CFA_PSP16 PSP16+0
|
|
CFI CFA_XSP16 XSP16+0
|
|
CFI `PSW.CY` SameValue
|
|
CFI `B.BR0` SameValue
|
|
CFI `B.BR1` SameValue
|
|
CFI `B.BR2` SameValue
|
|
CFI `B.BR3` SameValue
|
|
CFI `B.BR4` SameValue
|
|
CFI `B.BR5` SameValue
|
|
CFI `B.BR6` SameValue
|
|
CFI `B.BR7` SameValue
|
|
CFI `VB.BR8` SameValue
|
|
CFI `VB.BR9` SameValue
|
|
CFI `VB.BR10` SameValue
|
|
CFI `VB.BR11` SameValue
|
|
CFI `VB.BR12` SameValue
|
|
CFI `VB.BR13` SameValue
|
|
CFI `VB.BR14` SameValue
|
|
CFI `VB.BR15` SameValue
|
|
CFI VB SameValue
|
|
CFI B Undefined
|
|
CFI A Undefined
|
|
CFI PSW SameValue
|
|
CFI DPL0 Undefined
|
|
CFI DPH0 Undefined
|
|
CFI R0 Undefined
|
|
CFI R1 Undefined
|
|
CFI R2 Undefined
|
|
CFI R3 Undefined
|
|
CFI R4 Undefined
|
|
CFI R5 Undefined
|
|
CFI R6 SameValue
|
|
CFI R7 SameValue
|
|
CFI V0 SameValue
|
|
CFI V1 SameValue
|
|
CFI V2 SameValue
|
|
CFI V3 SameValue
|
|
CFI V4 SameValue
|
|
CFI V5 SameValue
|
|
CFI V6 SameValue
|
|
CFI V7 SameValue
|
|
CFI PSPH Undefined
|
|
CFI PSPL Undefined
|
|
CFI XSPH Undefined
|
|
CFI XSPL Undefined
|
|
CFI ?RET Concat
|
|
CFI ?RET_HIGH Frame(CFA_SP, 2)
|
|
CFI ?RET_LOW Frame(CFA_SP, 1)
|
|
CFI EndCommon cfiCommon0
|
|
|
|
ASEGN SFR_AN:DATA:NOROOT,085H
|
|
DPH1:
|
|
DATA8
|
|
DS 1
|
|
|
|
ASEGN SFR_AN:DATA:NOROOT,084H
|
|
DPL1:
|
|
DATA8
|
|
DS 1
|
|
|
|
ASEGN SFR_AN:DATA:NOROOT,086H
|
|
DPS:
|
|
DATA8
|
|
DS 1
|
|
|
|
ASEGN SFR_AN:DATA:NOROOT,0a8H
|
|
IE:
|
|
DATA8
|
|
DS 1
|
|
|
|
ASEGN BIT_AN:BIT:NOROOT,0afH
|
|
EA:
|
|
DATA8
|
|
DS 1
|
|
|
|
RSEG NEAR_CODE:CODE:NOROOT(0)
|
|
// __reentrantb void fmemcpy(void __generic *d, const void __generic *s, uint16_t n) __reentrant
|
|
fmemcpy:
|
|
CFI Block cfiBlock0 Using cfiCommon0
|
|
CFI Function fmemcpy
|
|
CODE
|
|
|
|
AR0 EQU 0
|
|
AR1 EQU 1
|
|
AR2 EQU 2
|
|
AR3 EQU 3
|
|
AR4 EQU 4
|
|
AR5 EQU 5
|
|
AR6 EQU 6
|
|
AR7 EQU 7
|
|
|
|
MOV A,R4
|
|
JNZ nlownz
|
|
ORL A,R5
|
|
JNZ nnz
|
|
doret: RET
|
|
nlownz: INC R5
|
|
nnz: MOV R0,SP
|
|
DEC R0
|
|
DEC R0
|
|
|
|
// decide memory space
|
|
MOV A,R3
|
|
JB ACC.7,doret // >=0x80 code
|
|
JNB ACC.0,xdataptr // ==0x01 xdata
|
|
idataptr:
|
|
MOV A,@R0
|
|
DEC R0
|
|
JB ACC.7,idatacodeptr // >=0x80 code
|
|
JNB ACC.0,idataxdataptr // ==0x01 xdata
|
|
idataidataptr:
|
|
DEC R0
|
|
MOV AR0,@R0
|
|
idataidataloop:
|
|
MOV A,@R0
|
|
INC R0
|
|
MOV @R1,A
|
|
INC R1
|
|
DJNZ R4,idataidataloop
|
|
DJNZ R5,idataidataloop
|
|
RET
|
|
idataxdataptr:
|
|
MOV DPH,@R0
|
|
DEC R0
|
|
MOV DPL,@R0
|
|
idataxdataloop:
|
|
MOVX A,@DPTR
|
|
INC DPTR
|
|
MOV @R1,A
|
|
INC R1
|
|
DJNZ R4,idataxdataloop
|
|
DJNZ R5,idataxdataloop
|
|
RET
|
|
idatacodeptr:
|
|
MOV DPH,@R0
|
|
DEC R0
|
|
MOV DPL,@R0
|
|
idatacodeloop:
|
|
CLR A
|
|
MOVC A,@A+DPTR
|
|
INC DPTR
|
|
MOV @R1,A
|
|
INC R1
|
|
DJNZ R4,idatacodeloop
|
|
DJNZ R5,idatacodeloop
|
|
RET
|
|
xdataptr:
|
|
MOV DPL,R1
|
|
MOV DPH,R2
|
|
MOV A,@R0
|
|
DEC R0
|
|
JB ACC.7,xdatacodeptr // >=0x80 code
|
|
JNB ACC.0,xdataxdataptr // ==0x01 xdata
|
|
xdataidataptr:
|
|
DEC R0
|
|
MOV AR0,@R0
|
|
xdataidataloop:
|
|
MOV A,@R1
|
|
INC R1
|
|
MOVX @DPTR,A
|
|
INC DPTR
|
|
DJNZ R4,xdataidataloop
|
|
DJNZ R5,xdataidataloop
|
|
RET
|
|
xdataxdataptr:
|
|
PUSH IE
|
|
CLR EA
|
|
PUSH DPL1
|
|
PUSH DPH1
|
|
MOV DPH1,@R0
|
|
DEC R0
|
|
MOV DPL1,@R0
|
|
xdataxdataloop:
|
|
XRL DPS,#1
|
|
MOVX A,@DPTR
|
|
INC DPTR
|
|
XRL DPS,#1
|
|
MOVX @DPTR,A
|
|
INC DPTR
|
|
DJNZ R4,xdataxdataloop
|
|
DJNZ R5,xdataxdataloop
|
|
POP DPH1
|
|
POP DPL1
|
|
POP IE
|
|
RET
|
|
xdatacodeptr:
|
|
PUSH IE
|
|
CLR EA
|
|
PUSH DPL1
|
|
PUSH DPH1
|
|
MOV DPH1,@R0
|
|
DEC R0
|
|
MOV DPL1,@R0
|
|
xdatacodeloop:
|
|
XRL DPS,#1
|
|
CLR A
|
|
MOVC A,@A+DPTR
|
|
INC DPTR
|
|
XRL DPS,#1
|
|
MOVX @DPTR,A
|
|
INC DPTR
|
|
DJNZ R4,xdatacodeloop
|
|
DJNZ R5,xdatacodeloop
|
|
POP DPH1
|
|
POP DPL1
|
|
POP IE
|
|
RET
|
|
CFI EndBlock cfiBlock0
|
|
REQUIRE IE
|
|
REQUIRE EA
|
|
REQUIRE DPS
|
|
REQUIRE DPL1
|
|
REQUIRE DPH1
|
|
|
|
END
|