cortexm0p_start.inc 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. var
  2. _stack_top: record end; external name '_stack_top';
  3. _data: record end; external name '_data';
  4. _edata: record end; external name '_edata';
  5. _text_start: record end; external name '_text_start';
  6. _etext: record end; external name '_etext';
  7. _bss_start: record end; external name '_bss_start';
  8. _bss_end: record end; external name '_bss_end';
  9. procedure Pascalmain; external name 'PASCALMAIN';
  10. procedure _NonMaskableInt_Handler; assembler; nostackframe; public name '_NonMaskableInt_Handler';
  11. asm
  12. .Lloop:
  13. bkpt
  14. b .Lloop
  15. end;
  16. procedure _NMI_Handler; assembler; nostackframe; public name '_NMI_Handler';
  17. asm
  18. .Lloop:
  19. bkpt
  20. b .Lloop
  21. end;
  22. procedure _HardFault_Handler; assembler; nostackframe; public name '_HardFault_Handler';
  23. asm
  24. .Lloop:
  25. bkpt
  26. b .Lloop
  27. end;
  28. procedure _SVC_Handler; assembler; nostackframe; public name '_SVC_Handler';
  29. asm
  30. .Lloop:
  31. bkpt
  32. b .Lloop
  33. end;
  34. procedure _PendSV_Handler; assembler; nostackframe; public name '_PendSV_Handler';
  35. asm
  36. .Lloop:
  37. bkpt
  38. b .Lloop
  39. end;
  40. procedure _SysTick_Handler; assembler; nostackframe; public name '_SysTick_Handler';
  41. asm
  42. .Lloop:
  43. bkpt
  44. b .Lloop
  45. end;
  46. procedure HaltProc; assembler; nostackframe; public name'_haltproc';
  47. asm
  48. .Lloop:
  49. bkpt
  50. b .Lloop
  51. end;
  52. procedure Startup; assembler; nostackframe; [public, alias: '_START'];
  53. asm
  54. ldr r1,.L_etext
  55. ldr r2,.L_data
  56. ldr r3,.L_edata
  57. mov r4,#4
  58. .Lcopyloop:
  59. // cmp r2,r3
  60. // ittt ls
  61. // ldrls r0,[r1],#4
  62. // strls r0,[r2],#4
  63. // bls .Lcopyloop
  64. ldr r0,[r1]
  65. str r0,[r2]
  66. add r1,r1,r4
  67. add r2,r2,r4
  68. cmp r2,r3
  69. bls .Lcopyloop
  70. // clear onboard ram
  71. ldr r1,.L_bss_start
  72. ldr r2,.L_bss_end
  73. mov r0,#0
  74. .Lzeroloop:
  75. //cmp r1,r2
  76. //itt ls
  77. //strls r0,[r1],#4
  78. //bls .Lzeroloop
  79. str r0,[r1]
  80. add r1,r1,r4
  81. cmp r1,r2
  82. bls .Lzeroloop
  83. ldr r0, .Lvtor
  84. ldr r1, .Ltext_start
  85. str r1, [r0]
  86. bl PASCALMAIN
  87. b HaltProc
  88. .balign 4
  89. .L_bss_start:
  90. .long _bss_start
  91. .L_bss_end:
  92. .long _bss_end
  93. .L_etext:
  94. .long _etext
  95. .L_data:
  96. .long _data
  97. .L_edata:
  98. .long _edata
  99. .Lvtor:
  100. .long 0xE000ED08
  101. .Ltext_start:
  102. .long _text_start
  103. end;