📄 cstartup.lst
字号:
144 000008 ; 1 IES not used
145 000008 ; 0 First use of IES, need to setup IES
146 000008 ; <0 IES already setup and used
147 000008 ;---------------------------------------------------
------------;
148 000008 A901 LDA #1
149 00000A 85.. STA zp:?IES_USAGE
150 00000C #endif
151 00000C
152 00000C ;---------------------------------------------------
------------;
153 00000C ; If hardware must be initiated from assembly or if
interrupts ;
154 00000C ; should be on when reaching main, this is the place
to insert ;
155 00000C ; such code.
;
156 00000C ;
;
157 00000C ; NOTE: You probably want to initialize the mode
register here. ;
158 00000C ;---------------------------------------------------
------------;
159 00000C ;---------------------------------------------------
------------;
160 00000C ; Call __low_level_init to perform initialization
before ;
161 00000C ; initializing segments and calling main.
;
162 00000C ; If the function returns 0 no segment initializatio
n should ;
163 00000C ; take place.
;
164 00000C ;
;
165 00000C ; Link with your own version of __low_level_init to
override ;
166 00000C ; the default action: to do nothing but return 1.
;
167 00000C ;---------------------------------------------------
------------;
168 00000C
169 00000C A2.. LDX #SFE(EXPR_STACK) ; set up
expression
stack
170 00000E 20.... JSR __low_level_init
171 000011 A8 TAY ; test return
value
172 000012 F005 BEQ skip_seg_init
173 000014
174 000014
175 000014 ;---------------------------------------------------
------------;
176 000014 ; If it is not a requirement that static/global data
is set ;
177 000014 ; to zero or to some explicit value at startup, the
following ;
178 000014 ; line refering to seg_init can be deleted, or
commented. ;
179 000014 ;---------------------------------------------------
------------;
180 000014
181 000014 20.... JSR seg_init ; initialize
data
segments
182 000017 A2.. LDX #SFE(EXPR_STACK) ; set up
expression
stack
(again)
183 000019 ; as seg_init
destroys it
184 000019 skip_seg_init
185 000019
186 000019 ;---------------------------------------------------
------------;
187 000019 ; Set up expression stack
;
188 000019 ;---------------------------------------------------
------------;
189 000019
190 000019 expr_stack_start EQU SFE(EXPR_STACK)
191 000019
192 000019 LIMIT expr_stack_start,0,100h,"Expression
stack out of
range"
193 000019
194 000019 A2.. LDX #expr_stack_start & 255 ; load
initial
expr stack
pointer
195 00001B
196 00001B 20.... JSR main ; execute main()
197 00001E
198 00001E ;---------------------------------------------------
------------;
199 00001E ; Now when we are ready with our C program we must
perform a ;
200 00001E ; system-dependent action. In this case we just
stop. ;
201 00001E ;---------------------------------------------------
------------;
202 00001E ; DO NOT CHANGE THE NEXT LINE OF CSTARTUP IF YOU
WANT TO RUN ;
203 00001E ; YOUR SOFTWARE WITH THE HELP OF THE C-SPY HLL
DEBUGGER. ;
204 00001E ;---------------------------------------------------
------------;
205 00001E
206 00001E 4C.... JMP REFFN exit
207 000021
208 000021
209 000021 ;---------------------------------------------------
------------;
210 000021 ; Copy initialized PROMmed code to shadow RAM and
clear ;
211 000021 ; uninitialized variables.
;
212 000021 ;---------------------------------------------------
------------;
213 000021
214 000000 EXTERN ?DP0_L00, ?DP1_L00
215 000021 seg_init
216 000021
217 000021 ;---------------------------------------;
218 000021 ; Initialize recursive stack RF_STACK ;
219 000021 ;---------------------------------------;
220 000021 A9.. LDA #LOW(SFB(RF_STACK)+2)
221 000023 8D.... STA np:SFB(RF_STACK)+0
222 000026 A9.. LDA #HIGH(SFB(RF_STACK)+2)
223 000028 8D.... STA np:SFB(RF_STACK)+1
224 00002B
225 00002B
226 00002B ;---------------------------------------;
227 00002B ; Zero out Z_UDATA ;
228 00002B ;---------------------------------------;
229 00002B A0.. LDY #SIZEOF(Z_UDATA)
230 00002D F00A BEQ skip1
231 00002F A2.. LDX #SFB(Z_UDATA)
232 000031 A900 LDA #0
233 000033 9500 loop1 STA 0,X
234 000035 E8 INX
235 000036 88 DEY
236 000037 D0FA BNE loop1
237 000039 skip1
238 000039
239 000039
240 000039 ;---------------------------------------;
241 000039 ; Copy Z_CDATA into Z_IDATA ;
242 000039 ;---------------------------------------;
243 000039 A0.. LDY #SIZEOF(Z_CDATA)
244 00003B F009 BEQ skip2
245 00003D B9.... loop2: LDA NP:SFB(Z_CDATA)-1,Y
246 000040 99.... STA NP:SFB(Z_IDATA)-1,Y
247 000043 88 DEY
248 000044 D0F7 BNE loop2
249 000046 skip2
250 000046
251 000046 ;---------------------------------------;
252 000046 ; Zero out N_UDATA ;
253 000046 ;---------------------------------------;
254 000046 3C.... LDM #LOW(SFB(N_UDATA)),?DP0_L00
255 000049 3C.... LDM #HIGH(SFB(N_UDATA)),?DP0_L00+1
256 00004C A900 LDA #0
257 00004E A8 TAY
258 00004F A2.. LDX #HIGH(SIZEOF(N_UDATA))
259 000051 F00A BEQ skip3
260 000053 91.. loop3 STA (?DP0_L00),Y
261 000055 C8 INY
262 000056 D0FB BNE loop3
263 000058 E6.. INC ZP:?DP0_L00+1
264 00005A CA DEX
265 00005B D0F6 BNE loop3
266 00005D skip3
267 00005D A2.. LDX #LOW(SIZEOF(N_UDATA))
268 00005F F006 BEQ skip4
269 000061 91.. loop4 STA (?DP0_L00),Y
270 000063 C8 INY
271 000064 CA DEX
272 000065 D0FA BNE loop4
273 000067 skip4
274 000067
275 000067
276 000067 ;---------------------------------------;
277 000067 ; Copy CCSTR into ECSTR ;
278 000067 ;---------------------------------------;
279 000067 3C.... LDM #LOW(SFB(CCSTR)),?DP0_L00
280 00006A 3C.... LDM #HIGH(SFB(CCSTR)),?DP0_L00+1
281 00006D 3C.... LDM #LOW(SFB(ECSTR)),?DP1_L00
282 000070 3C.... LDM #HIGH(SFB(ECSTR)),?DP1_L00+1
283 000073 A2.. LDX #HIGH(SIZEOF(CCSTR))
284 000075 F003 BEQ skip5
285 000077 20.... JSR large_copy_mem
286 00007A skip5
287 00007A A2.. LDX #LOW(SIZEOF(CCSTR))
288 00007C F003 BEQ skip6
289 00007E 20.... JSR small_copy_mem
290 000081 skip6
291 000081
292 000081 ;---------------------------------------;
293 000081 ; Copy N_CDATA into N_IDATA ;
294 000081 ;---------------------------------------;
295 000081 3C.... LDM #LOW(SFB(N_CDATA)),?DP0_L00
296 000084 3C.... LDM #HIGH(SFB(N_CDATA)),?DP0_L00+1
297 000087 3C.... LDM #LOW(SFB(N_IDATA)),?DP1_L00
298 00008A 3C.... LDM #HIGH(SFB(N_IDATA)),?DP1_L00+1
299 00008D A2.. LDX #HIGH(SIZEOF(N_CDATA))
300 00008F F003 BEQ skip7
301 000091 20.... JSR large_copy_mem
302 000094 skip7
303 000094 A2.. LDX #LOW(SIZEOF(N_CDATA))
304 000096 F00A BEQ return
305 000098
306 000098 ; fall into small_copy_mem to do final copy
307 000098
308 000098 ;---------------------------------------;
309 000098 ; Copy memory ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -