cortexm4f_start.inc 977 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. _etext: record end; external name '_etext';
  6. _bss_start: record end; external name '_bss_start';
  7. _bss_end: record end; external name '_bss_end';
  8. procedure Pascalmain; external name 'PASCALMAIN';
  9. procedure HaltProc; assembler; nostackframe; public name'_haltproc';
  10. asm
  11. .Lloop:
  12. b .Lloop
  13. end;
  14. procedure Startup; assembler; nostackframe; [public, alias: '_START'];
  15. asm
  16. ldr r1,.L_etext
  17. ldr r2,.L_data
  18. ldr r3,.L_edata
  19. .Lcopyloop:
  20. cmp r2,r3
  21. ittt ls
  22. ldrls r0,[r1],#4
  23. strls r0,[r2],#4
  24. bls .Lcopyloop
  25. // clear onboard ram
  26. ldr r1,.L_bss_start
  27. ldr r2,.L_bss_end
  28. mov r0,#0
  29. .Lzeroloop:
  30. cmp r1,r2
  31. itt ls
  32. strls r0,[r1],#4
  33. bls .Lzeroloop
  34. bl PASCALMAIN
  35. b HaltProc
  36. .L_bss_start:
  37. .long _bss_start
  38. .L_bss_end:
  39. .long _bss_end
  40. .L_etext:
  41. .long _etext
  42. .L_data:
  43. .long _data
  44. .L_edata:
  45. .long _edata
  46. end;