cortexm3_start.inc 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. .Lcopyloop:
  21. cmp r2,r3
  22. ittt ls
  23. ldrls r0,[r1],#4
  24. strls r0,[r2],#4
  25. bls .Lcopyloop
  26. // clear onboard ram
  27. ldr r1,.L_bss_start
  28. ldr r2,.L_bss_end
  29. mov r0,#0
  30. .Lzeroloop:
  31. cmp r1,r2
  32. itt ls
  33. strls r0,[r1],#4
  34. bls .Lzeroloop
  35. {$ifdef REMAP_VECTTAB}
  36. ldr r0, .Lvtor
  37. ldr r1, .Ltext_start
  38. str r1, [r0]
  39. {$endif REMAP_VECTTAB}
  40. bl PASCALMAIN
  41. b HaltProc
  42. .L_bss_start:
  43. .long _bss_start
  44. .L_bss_end:
  45. .long _bss_end
  46. .L_etext:
  47. .long _etext
  48. .L_data:
  49. .long _data
  50. .L_edata:
  51. .long _edata
  52. {$ifdef REMAP_VECTTAB}
  53. .Lvtor:
  54. .long 0xE000ED08
  55. .Ltext_start:
  56. .long _text_start
  57. {$endif REMAP_VECTTAB}
  58. end;