cortexm0_start.inc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 HaltProc; assembler; nostackframe; public name'_haltproc';
  11. asm
  12. .Lloop:
  13. b .Lloop
  14. end;
  15. procedure Startup; assembler; nostackframe; [public, alias: '_START'];
  16. asm
  17. ldr r1,.L_etext
  18. ldr r2,.L_data
  19. ldr r3,.L_edata
  20. mov r4,#4
  21. .Lcopyloop:
  22. // cmp r2,r3
  23. // ittt ls
  24. // ldrls r0,[r1],#4
  25. // strls r0,[r2],#4
  26. // bls .Lcopyloop
  27. ldr r0,[r1]
  28. str r0,[r2]
  29. add r1,r1,r4
  30. add r2,r2,r4
  31. cmp r2,r3
  32. bls .Lcopyloop
  33. // clear onboard ram
  34. ldr r1,.L_bss_start
  35. ldr r2,.L_bss_end
  36. mov r0,#0
  37. .Lzeroloop:
  38. //cmp r1,r2
  39. //itt ls
  40. //strls r0,[r1],#4
  41. //bls .Lzeroloop
  42. str r0,[r1]
  43. add r1,r1,r4
  44. cmp r1,r2
  45. bls .Lzeroloop
  46. {$ifdef REMAP_VECTTAB}
  47. ldr r0, .Lvtor
  48. ldr r1, .Ltext_start
  49. str r1, [r0]
  50. {$endif REMAP_VECTTAB}
  51. bl PASCALMAIN
  52. b HaltProc
  53. .L_bss_start:
  54. .long _bss_start
  55. .L_bss_end:
  56. .long _bss_end
  57. .L_etext:
  58. .long _etext
  59. .L_data:
  60. .long _data
  61. .L_edata:
  62. .long _edata
  63. {$ifdef REMAP_VECTTAB}
  64. .Lvtor:
  65. .long 0xE000ED08
  66. .Ltext_start:
  67. .long _text_start
  68. {$endif REMAP_VECTTAB}
  69. end;