start.inc 927 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. _start:
  2. clr r1
  3. // load stack pointer
  4. ldi r30,lo8(_stack_top)
  5. out 0x3d,r30
  6. ldi r30,hi8(_stack_top)
  7. out 0x3e,r30
  8. // Initialize .data section
  9. ldi XL,lo8(_data)
  10. ldi XH,hi8(_data)
  11. ldi YH,hi8(_edata)
  12. ldi ZL,lo8(_etext)
  13. ldi ZH,hi8(_etext)
  14. rjmp .LCopyDataLoopEntry
  15. .LCopyDataLoop:
  16. lpm r0, Z+
  17. st X+, r0
  18. .LCopyDataLoopEntry:
  19. cpi XL, lo8(_edata)
  20. cpc XH, YH
  21. brne .LCopyDataLoop
  22. // Zero .bss section
  23. ldi XL,lo8(_bss_start)
  24. ldi XH,hi8(_bss_start)
  25. ldi YH,hi8(_bss_end)
  26. rjmp .LZeroBssLoopEntry
  27. .LZeroBssLoop:
  28. st X+, r1
  29. .LZeroBssLoopEntry:
  30. cpi XL, lo8(_bss_end)
  31. cpc XH, YH
  32. brne .LZeroBssLoop
  33. {$ifdef RELBRANCHES}
  34. rjmp PASCALMAIN
  35. {$else RELBRANCHES}
  36. jmp PASCALMAIN
  37. {$endif RELBRANCHES}
  38. .text