jb302@33
|
1 A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 1
|
jb302@33
|
2
|
jb302@33
|
3
|
jb302@33
|
4 MACRO ASSEMBLER A51 V8.02
|
jb302@33
|
5 OBJECT MODULE PLACED IN STARTUP.OBJ
|
jb302@33
|
6 ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG EP
|
jb302@33
|
7
|
jb302@33
|
8 LOC OBJ LINE SOURCE
|
jb302@33
|
9
|
jb302@33
|
10 1 $nomod51
|
jb302@33
|
11 2 ;------------------------------------------------------------------------------
|
jb302@33
|
12 3 ; This file is part of the C51 Compiler package
|
jb302@33
|
13 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
|
jb302@33
|
14 5 ; Version 8.01
|
jb302@33
|
15 6 ;
|
jb302@33
|
16 7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
|
jb302@33
|
17 8 ;------------------------------------------------------------------------------
|
jb302@33
|
18 9 ; STARTUP.A51: This code is executed after processor reset.
|
jb302@33
|
19 10 ;
|
jb302@33
|
20 11 ; To translate this file use A51 with the following invocation:
|
jb302@33
|
21 12 ;
|
jb302@33
|
22 13 ; A51 STARTUP.A51
|
jb302@33
|
23 14 ;
|
jb302@33
|
24 15 ; To link the modified STARTUP.OBJ file to your application use the following
|
jb302@33
|
25 16 ; Lx51 invocation:
|
jb302@33
|
26 17 ;
|
jb302@33
|
27 18 ; Lx51 your object file list, STARTUP.OBJ controls
|
jb302@33
|
28 19 ;
|
jb302@33
|
29 20 ;------------------------------------------------------------------------------
|
jb302@33
|
30 21 ;
|
jb302@33
|
31 22 ; User-defined <h> Power-On Initialization of Memory
|
jb302@33
|
32 23 ;
|
jb302@33
|
33 24 ; With the following EQU statements the initialization of memory
|
jb302@33
|
34 25 ; at processor reset can be defined:
|
jb302@33
|
35 26 ;
|
jb302@33
|
36 27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
|
jb302@33
|
37 28 ; <i> Note: The absolute start-address of IDATA memory is always 0
|
jb302@33
|
38 29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
|
jb302@33
|
39 0080 30 IDATALEN EQU 80H
|
jb302@33
|
40 31 ;
|
jb302@33
|
41 32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
|
jb302@33
|
42 33 ; <i> The absolute start address of XDATA memory
|
jb302@33
|
43 0000 34 XDATASTART EQU 0
|
jb302@33
|
44 35 ;
|
jb302@33
|
45 36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
|
jb302@33
|
46 37 ; <i> The length of XDATA memory in bytes.
|
jb302@33
|
47 0000 38 XDATALEN EQU 0
|
jb302@33
|
48 39 ;
|
jb302@33
|
49 40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
|
jb302@33
|
50 41 ; <i> The absolute start address of PDATA memory
|
jb302@33
|
51 0000 42 PDATASTART EQU 0H
|
jb302@33
|
52 43 ;
|
jb302@33
|
53 44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
|
jb302@33
|
54 45 ; <i> The length of PDATA memory in bytes.
|
jb302@33
|
55 0000 46 PDATALEN EQU 0H
|
jb302@33
|
56 47 ;
|
jb302@33
|
57 48 ;</h>
|
jb302@33
|
58 49 ;------------------------------------------------------------------------------
|
jb302@33
|
59 50 ;
|
jb302@33
|
60 51 ;<h> Reentrant Stack Initialization
|
jb302@33
|
61 52 ;
|
jb302@33
|
62 53 ; The following EQU statements define the stack pointer for reentrant
|
jb302@33
|
63 54 ; functions and initialized it:
|
jb302@33
|
64 55 ;
|
jb302@33
|
65 56 ; <h> Stack Space for reentrant functions in the SMALL model.
|
jb302@33
|
66 57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
|
jb302@33
|
67 58 ; <i> Stack space for reentrant functions in the SMALL model.
|
jb302@33
|
68 A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 2
|
jb302@33
|
69
|
jb302@33
|
70 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
|
jb302@33
|
71 60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
|
jb302@33
|
72 61 ; <i> Set the top of the stack to the highest location.
|
jb302@33
|
73 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
jb302@33
|
74 63 ; </h>
|
jb302@33
|
75 64 ;
|
jb302@33
|
76 65 ; <h> Stack Space for reentrant functions in the LARGE model.
|
jb302@33
|
77 66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
|
jb302@33
|
78 67 ; <i> Stack space for reentrant functions in the LARGE model.
|
jb302@33
|
79 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
|
jb302@33
|
80 69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
|
jb302@33
|
81 70 ; <i> Set the top of the stack to the highest location.
|
jb302@33
|
82 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
|
jb302@33
|
83 72 ; </h>
|
jb302@33
|
84 73 ;
|
jb302@33
|
85 74 ; <h> Stack Space for reentrant functions in the COMPACT model.
|
jb302@33
|
86 75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
|
jb302@33
|
87 76 ; <i> Stack space for reentrant functions in the COMPACT model.
|
jb302@33
|
88 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
|
jb302@33
|
89 78 ;
|
jb302@33
|
90 79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
|
jb302@33
|
91 80 ; <i> Set the top of the stack to the highest location.
|
jb302@33
|
92 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
jb302@33
|
93 82 ; </h>
|
jb302@33
|
94 83 ;</h>
|
jb302@33
|
95 84 ;------------------------------------------------------------------------------
|
jb302@33
|
96 85 ;
|
jb302@33
|
97 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
|
jb302@33
|
98 87 ; <e>Compact Model Page Definition
|
jb302@33
|
99 88 ;
|
jb302@33
|
100 89 ; <i>Define the XDATA page used for PDATA variables.
|
jb302@33
|
101 90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
|
jb302@33
|
102 91 ;
|
jb302@33
|
103 92 ; Enable pdata memory page initalization
|
jb302@33
|
104 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
|
jb302@33
|
105 94 ;
|
jb302@33
|
106 95 ; <o> PPAGE number <0x0-0xFF>
|
jb302@33
|
107 96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
|
jb302@33
|
108 0000 97 PPAGE EQU 0
|
jb302@33
|
109 98 ;
|
jb302@33
|
110 99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
|
jb302@33
|
111 100 ; <i> most 8051 variants use P2 as uppermost address byte
|
jb302@33
|
112 00A0 101 PPAGE_SFR DATA 0A0H
|
jb302@33
|
113 102 ;
|
jb302@33
|
114 103 ; </e>
|
jb302@33
|
115 104 ;------------------------------------------------------------------------------
|
jb302@33
|
116 105
|
jb302@33
|
117 106 ; Standard SFR Symbols
|
jb302@33
|
118 00E0 107 ACC DATA 0E0H
|
jb302@33
|
119 00F0 108 B DATA 0F0H
|
jb302@33
|
120 0081 109 SP DATA 81H
|
jb302@33
|
121 0082 110 DPL DATA 82H
|
jb302@33
|
122 0083 111 DPH DATA 83H
|
jb302@33
|
123 112
|
jb302@33
|
124 113 NAME ?C_STARTUP
|
jb302@33
|
125 114
|
jb302@33
|
126 115
|
jb302@33
|
127 116 ?C_C51STARTUP SEGMENT CODE
|
jb302@33
|
128 117 ?STACK SEGMENT IDATA
|
jb302@33
|
129 118
|
jb302@33
|
130 ---- 119 RSEG ?STACK
|
jb302@33
|
131 0000 120 DS 1
|
jb302@33
|
132 121
|
jb302@33
|
133 122 EXTRN CODE (?C_START)
|
jb302@33
|
134 123 PUBLIC ?C_STARTUP
|
jb302@33
|
135 124
|
jb302@33
|
136 A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 3
|
jb302@33
|
137
|
jb302@33
|
138 ---- 125 CSEG AT 0
|
jb302@33
|
139 0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
|
jb302@33
|
140 127
|
jb302@33
|
141 ---- 128 RSEG ?C_C51STARTUP
|
jb302@33
|
142 129
|
jb302@33
|
143 0000 130 STARTUP1:
|
jb302@33
|
144 131
|
jb302@33
|
145 132 IF IDATALEN <> 0
|
jb302@33
|
146 0000 787F 133 MOV R0,#IDATALEN - 1
|
jb302@33
|
147 0002 E4 134 CLR A
|
jb302@33
|
148 0003 F6 135 IDATALOOP: MOV @R0,A
|
jb302@33
|
149 0004 D8FD 136 DJNZ R0,IDATALOOP
|
jb302@33
|
150 137 ENDIF
|
jb302@33
|
151 138
|
jb302@33
|
152 139 IF XDATALEN <> 0
|
jb302@33
|
153 MOV DPTR,#XDATASTART
|
jb302@33
|
154 MOV R7,#LOW (XDATALEN)
|
jb302@33
|
155 IF (LOW (XDATALEN)) <> 0
|
jb302@33
|
156 MOV R6,#(HIGH (XDATALEN)) +1
|
jb302@33
|
157 ELSE
|
jb302@33
|
158 MOV R6,#HIGH (XDATALEN)
|
jb302@33
|
159 ENDIF
|
jb302@33
|
160 CLR A
|
jb302@33
|
161 XDATALOOP: MOVX @DPTR,A
|
jb302@33
|
162 INC DPTR
|
jb302@33
|
163 DJNZ R7,XDATALOOP
|
jb302@33
|
164 DJNZ R6,XDATALOOP
|
jb302@33
|
165 ENDIF
|
jb302@33
|
166 153
|
jb302@33
|
167 154 IF PPAGEENABLE <> 0
|
jb302@33
|
168 MOV PPAGE_SFR,#PPAGE
|
jb302@33
|
169 ENDIF
|
jb302@33
|
170 157
|
jb302@33
|
171 158 IF PDATALEN <> 0
|
jb302@33
|
172 MOV R0,#LOW (PDATASTART)
|
jb302@33
|
173 MOV R7,#LOW (PDATALEN)
|
jb302@33
|
174 CLR A
|
jb302@33
|
175 PDATALOOP: MOVX @R0,A
|
jb302@33
|
176 INC R0
|
jb302@33
|
177 DJNZ R7,PDATALOOP
|
jb302@33
|
178 ENDIF
|
jb302@33
|
179 166
|
jb302@33
|
180 167 IF IBPSTACK <> 0
|
jb302@33
|
181 EXTRN DATA (?C_IBP)
|
jb302@33
|
182
|
jb302@33
|
183 MOV ?C_IBP,#LOW IBPSTACKTOP
|
jb302@33
|
184 ENDIF
|
jb302@33
|
185 172
|
jb302@33
|
186 173 IF XBPSTACK <> 0
|
jb302@33
|
187 EXTRN DATA (?C_XBP)
|
jb302@33
|
188
|
jb302@33
|
189 MOV ?C_XBP,#HIGH XBPSTACKTOP
|
jb302@33
|
190 MOV ?C_XBP+1,#LOW XBPSTACKTOP
|
jb302@33
|
191 ENDIF
|
jb302@33
|
192 179
|
jb302@33
|
193 180 IF PBPSTACK <> 0
|
jb302@33
|
194 EXTRN DATA (?C_PBP)
|
jb302@33
|
195 MOV ?C_PBP,#LOW PBPSTACKTOP
|
jb302@33
|
196 ENDIF
|
jb302@33
|
197 184
|
jb302@33
|
198 0006 758100 F 185 MOV SP,#?STACK-1
|
jb302@33
|
199 186
|
jb302@33
|
200 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
|
jb302@33
|
201 188 ;<h> Code Banking
|
jb302@33
|
202 189 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
|
jb302@33
|
203 190
|
jb302@33
|
204 A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 4
|
jb302@33
|
205
|
jb302@33
|
206
|
jb302@33
|
207
|
jb302@33
|
208
|
jb302@33
|
209
|
jb302@33
|
210 195 ;</h>
|
jb302@33
|
211 0009 020000 F 196 LJMP ?C_START
|
jb302@33
|
212 197
|
jb302@33
|
213 198 END
|
jb302@33
|
214 A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 5
|
jb302@33
|
215
|
jb302@33
|
216 SYMBOL TABLE LISTING
|
jb302@33
|
217 ------ ----- -------
|
jb302@33
|
218
|
jb302@33
|
219
|
jb302@33
|
220 N A M E T Y P E V A L U E ATTRIBUTES
|
jb302@33
|
221
|
jb302@33
|
222 ?C_C51STARTUP. . . C SEG 000CH REL=UNIT
|
jb302@33
|
223 ?C_START . . . . . C ADDR ----- EXT
|
jb302@33
|
224 ?C_STARTUP . . . . C ADDR 0000H A
|
jb302@33
|
225 ?STACK . . . . . . I SEG 0001H REL=UNIT
|
jb302@33
|
226 ACC. . . . . . . . D ADDR 00E0H A
|
jb302@33
|
227 B. . . . . . . . . D ADDR 00F0H A
|
jb302@33
|
228 DPH. . . . . . . . D ADDR 0083H A
|
jb302@33
|
229 DPL. . . . . . . . D ADDR 0082H A
|
jb302@33
|
230 IBPSTACK . . . . . N NUMB 0000H A
|
jb302@33
|
231 IBPSTACKTOP. . . . N NUMB 0100H A
|
jb302@33
|
232 IDATALEN . . . . . N NUMB 0080H A
|
jb302@33
|
233 IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
|
jb302@33
|
234 PBPSTACK . . . . . N NUMB 0000H A
|
jb302@33
|
235 PBPSTACKTOP. . . . N NUMB 0100H A
|
jb302@33
|
236 PDATALEN . . . . . N NUMB 0000H A
|
jb302@33
|
237 PDATASTART . . . . N NUMB 0000H A
|
jb302@33
|
238 PPAGE. . . . . . . N NUMB 0000H A
|
jb302@33
|
239 PPAGEENABLE. . . . N NUMB 0000H A
|
jb302@33
|
240 PPAGE_SFR. . . . . D ADDR 00A0H A
|
jb302@33
|
241 SP . . . . . . . . D ADDR 0081H A
|
jb302@33
|
242 STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
|
jb302@33
|
243 XBPSTACK . . . . . N NUMB 0000H A
|
jb302@33
|
244 XBPSTACKTOP. . . . N NUMB 0000H A
|
jb302@33
|
245 XDATALEN . . . . . N NUMB 0000H A
|
jb302@33
|
246 XDATASTART . . . . N NUMB 0000H A
|
jb302@33
|
247
|
jb302@33
|
248
|
jb302@33
|
249 REGISTER BANK(S) USED: 0
|
jb302@33
|
250
|
jb302@33
|
251
|
jb302@33
|
252 ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
|