📄 start12.lst
字号:
001b 270b [3/1] BEQ *+13 ;abs = 0028
219: #ifdef FAR_DATA
220: PSHD ; save counter
221: LDAB 1,X+ ; load destination page
222: LDY 2,X+ ; destination address
223: #if defined(__HCS12X__)
224: STAB __GPAGE_ADR__
225: #else /* __HCS12X__ */
226: __PIC_JSR(_SET_PAGE) ; sets the destinations page register
227: #endif /* __HCS12X__ */
228: PULD ; restore counter
229: #else /* FAR_DATA */
230: LDY 2,X+ ; load destination address
001d ed31 [3] LDY 2,X+
231: #endif /* FAR_DATA */
232:
233: #if defined(__HCS12X__) && defined(FAR_DATA)
234: #if defined(__OPTIMIZE_FOR_SIZE__) /* -os, default */
235: Copy: PSHA
236: LDAA 1,X+
237: GSTAA 1,Y+ ; move a byte from ROM to the data area
238: PULA
239: __FEED_COP_IN_HLI() ; feed the COP if necessary /*lint !e505 !e522 asm code */
240: DBNE D,Copy ; copy-byte loop
241: #else
242: LSRD ; /2 and save bit 0 in the carry
243: BEQ Copy1 ; do we copy more than 1 byte?
244:
245: Copy: PSHD
246: LDD 2,X+
247: GSTD 2,Y+ ; move a word from ROM to the data area
248: PULD
249: __FEED_COP_IN_HLI() ; feed the COP if necessary /*lint !e505 !e522 asm code */
250: DBNE D,Copy ; copy-word loop
251: Copy1:
252: BCC NextBlock ; handle last byte?
253: LDAA 1,X+
254: GSTAA 1,Y+ ; move a byte from ROM to the data area
255: #endif
256: #elif defined(__OPTIMIZE_FOR_SIZE__) /* -os, default */
257: Copy: MOVB 1,X+,1,Y+ ; move a byte from ROM to the data area
001f 180a3070 [5] MOVB 1,X+,1,Y+
258: __FEED_COP_IN_HLI() ; feed the COP if necessary /*lint !e505 !e522 asm code */
259: DBNE D,Copy ; copy-byte loop
0023 0434f9 [3] DBNE D,*-4 ;abs = 001f
260: #else /* __OPTIMIZE_FOR_TIME__ */
261: LSRD ; /2 and save bit 0 in the carry
262: BEQ Copy1 ; do we copy more than 1 byte?
263: Copy: MOVW 2,X+,2,Y+ ; move a word from ROM to the data area
264: __FEED_COP_IN_HLI() ; feed the COP if necessary /*lint !e505 !e522 asm code */
265: DBNE D,Copy ; copy-word loop
266: Copy1:
267: BCC NextBlock ; handle last byte?
268: MOVB 1,X+,1,Y+ ; copy the last byte
269: #endif /* __OPTIMIZE_FOR_SIZE__/__OPTIMIZE_FOR_TIME__ */
270: BRA NextBlock
0026 20f1 [3] BRA *-13 ;abs = 0019
271: funcInits: ; call of global construtors is only in c++ necessary
272: #if defined(__cplusplus)
273: #if defined(__ELF_OBJECT_FILE_FORMAT__)
274: #if defined( __BANKED__) || defined(__LARGE__)
275: LDY _startupData.nofInitBodies; load number of cpp.
276: BEQ done ; if cppcount == 0, goto done
277: LDX _startupData.initBodies ; load address of first module to initialize
278: nextInit:
279: LEAX 3,X ; increment to next init
280: PSHX ; save address of next function to initialize
281: PSHY ; save cpp counter
282: CALL [-3,X] ; use double indirect call to load the page register also
283: PULY ; restore cpp counter
284: PULX ; restore actual address
285: DEY ; decrement cpp counter
286: BNE nextInit
287: #else /* defined( __BANKED__) || defined(__LARGE__) */
288:
289: LDD _startupData.nofInitBodies; load number of cpp.
290: BEQ done ; if cppcount == 0, goto done
291: LDX _startupData.initBodies ; load address of first module to initialize
292: nextInit:
293: LDY 2,X+ ; load address of first module to initialize
294: PSHD
295: PSHX ; save actual address
296: JSR 0,Y ; call initialization function
297: PULX ; restore actual address
298: PULD ; restore cpp counter
299: DBNE D, nextInit
300: #endif /* defined( __BANKED__) || defined(__LARGE__) */
301: #else /* __ELF_OBJECT_FILE_FORMAT__ */
302: LDX _startupData.mInits ; load address of first module to initialize
303: #if defined( __BANKED__) || defined(__LARGE__)
304: nextInit: LDY 3,X+ ; load address of initialization function
305: BEQ done ; stop when address == 0
306: ; in common environments the offset of a function is never 0, so this test could be avoided
307: #ifdef __InitFunctionsMayHaveOffset0__
308: BRCLR -1,X, done, 0xff ; stop when address == 0
309: #endif /* __InitFunctionsMayHaveOffset0__ */
310: PSHX ; save address of next function to initialize
311: CALL [-3,X] ; use double indirect call to load the page register also
312: #else /* defined( __BANKED__) || defined(__LARGE__) */
313: nextInit:
314: LDY 2,X+ ; load address of first module to initialize
315: BEQ done ; stop when address of function == 0
316: PSHX ; save actual address
317: JSR 0,Y ; call initialization function
318: #endif /* defined( __BANKED__) || defined(__LARGE__) */
319: PULX ; restore actual address
320: BRA nextInit
321: #endif /* __ELF_OBJECT_FILE_FORMAT__ */
322: done:
323: #endif /* __cplusplus */
324: }
325: }
0028 0a [7] RTC
326: #endif /* __ONLY_INIT_SP */
327:
328: #if defined( __ELF_OBJECT_FILE_FORMAT__) && defined(__cplusplus ) && 0 /* the call to main does not support to return anymore */
329:
330: #if !defined(FAR_DATA) && (defined( __BANKED__) || defined(__LARGE__))
331: static void __far Fini(void)
332: #else
333: static void Fini(void)
334: #endif
335: {
336: /* purpose: 1) call global destructors in C++ */
337: __asm {
338: #if defined( __BANKED__) || defined(__LARGE__)
339:
340: LDY _startupData.nofFiniBodies; load number of cpp.
341: BEQ done ; if cppcount == 0, goto done
342: LDX _startupData.finiBodies ; load address of first module to finalize
343: nextInit2:
344: LEAX 3,X ; increment to next init
345: PSHX ; save address of next function to finalize
346: PSHY ; save cpp counter
347: CALL [-3,X] ; use double indirect call to load the page register also
348: PULY ; restore cpp counter
349: PULX ; restore actual address
350: DEY ; decrement cpp counter
351: BNE nextInit2
352: #else /* defined( __BANKED__) || defined(__LARGE__) */
353:
354: LDD _startupData.nofFiniBodies; load number of cpp.
355: BEQ done ; if cppcount == 0, goto done
356: LDX _startupData.finiBodies ; load address of first module to finalize
357: nextInit2:
358: LDY 2,X+ ; load address of first module to finalize
359: PSHD
360: PSHX ; save actual address
361: JSR 0,Y ; call finalize function
362: PULX ; restore actual address
363: PULD ; restore cpp counter
364: DBNE D, nextInit2
365: #endif /* defined(__BANKED__) || defined(__LARGE__) */
366: done:;
367: }
368: }
369: #endif
370:
371:
372: #include "non_bank.sgm"
373:
374: #pragma MESSAGE DISABLE C12053 /* Stack-pointer change not in debugging-information */
375: #pragma NO_FRAME
376: #pragma NO_ENTRY
377: #if !defined(__SMALL__)
378: #pragma NO_EXIT
379: #endif
380:
381: /* The function _Startup must be called in order to initialize global variables and to call main */
382: /* You can adapt this function or call it from your startup code to implement a different startup */
383: /* functionality. */
384:
385: /* You should also setup the needed IO registers as WINDEF (HC12A4 only) or the COP registers to run */
386: /* on hardware */
387:
388: /* to set the reset vector several ways are possible : */
389: /* 1. define the function with "interrupt 0" as done below in the first case */
390: /* 2. add the following line to your prm file : VECTOR ADDRESS 0xfffe _Startup */
391: /* of course, even more posibilities exists */
392: /* the reset vector must be set so that the application has a defined entry point */
393:
394: #if defined(__SET_RESET_VECTOR__)
395: __EXTERN_C void __interrupt 0 _Startup(void) {
396: #else
397: __EXTERN_C void _Startup(void) {
Function: _Startup
Source : D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\Sources\Start12.c
Options : -CPUHCS12 -D__NO_FLOAT__ -Env"GENPATH=D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006;D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\bin;D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\prm;D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\cmd;D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\Sources;D:\Program Files\Freescale\CW for HC12 V4.5\lib\HC12c\lib;D:\Program Files\Freescale\CW for HC12 V4.5\lib\HC12c\src;D:\Program Files\Freescale\CW for HC12 V4.5\lib\HC12c\include" -Env"LIBPATH=D:\Program Files\Freescale\CW for HC12 V4.5\lib\HC12c\include" -Env"OBJPATH=D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\bin" -Env"TEXTPATH=D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\bin" -Lasm=%n.lst -Mb -ObjN="D:\Chg\Tech\FSL_Support\from ChatRoom\9S12DP256_Vector Remapping_Jul262006\9S12DP256_Vector_Remapping_Jul262006_Data\Full_Chip_Simulation\ObjectCode\Start12.c.o" -WmsgSd12053
398: #endif
399: /* purpose: 1) initialize the stack
400: 2) initialize the RAM, copy down init data etc (Init)
401: 3) call main;
402: parameters: NONE
403: called from: _PRESTART-code generated by the Linker
404: or directly referenced by the reset vector */
405:
406: /* initialize the stack pointer */
407: INIT_SP_FROM_STARTUP_DESC(); /*lint !e522 asm code */ /* HLI macro definition in hidef.h */
0000 cf0000 [2] LDS #__SEG_END_SSTACK
408:
409: #if defined(_HCS12_SERIALMON)
410: /* for Monitor based software remap the RAM & EEPROM to adhere
411: to EB386. Edit RAM and EEPROM sections in PRM file to match these. */
412: ___INITRG = 0x00; /* lock registers block to 0x0000 */
413: ___INITRM = 0x39; /* lock Ram to end at 0x3FFF */
414: ___INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */
415: #endif
416:
417: /* Here user defined code could be inserted, the stack could be used */
418: #if defined(_DO_DISABLE_COP_)
419: _DISABLE_COP();
420: #endif
421:
422: /* Example : Set up WinDef Register to allow Paging */
423: #ifdef HC812A4 /* HC12 A4 derivative needs WINDEF to configure which pages are available */
424: #if (__ENABLE_EPAGE__ != 0 || __ENABLE_DPAGE__ != 0 || __ENABLE_PPAGE__ != 0)
425: WINDEF= __ENABLE_EPAGE__ | __ENABLE_DPAGE__ | __ENABLE_PPAGE__;
426: #endif
427: #endif
428:
429: #ifndef __ONLY_INIT_SP
430: Init(); /* zero out, copy down, call constructors */
0003 4a000000 [7] CALL Init,PAGE(Init)
431: #endif
432:
433: /* Here user defined code could be inserted, all global variables are initilized */
434: #if defined(_DO_ENABLE_COP_)
435: _ENABLE_COP(1);
436: #endif
437:
438: /* call main() */
439: main();
0007 4a000000 [7] CALL main,PAGE(main)
440: }
441:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -