2
0

start.inc 1020 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. {$ifdef RELBRANCHES}
  27. rjmp .LZeroBssLoopEntry
  28. {$else RELBRANCHES}
  29. jmp .LZeroBssLoopEntry
  30. {$endif RELBRANCHES}
  31. .LZeroBssLoop:
  32. st X+, r1
  33. .LZeroBssLoopEntry:
  34. cpi XL, lo8(_bss_end)
  35. cpc XH, YH
  36. brne .LZeroBssLoop
  37. {$ifdef RELBRANCHES}
  38. rjmp PASCALMAIN
  39. {$else RELBRANCHES}
  40. jmp PASCALMAIN
  41. {$endif RELBRANCHES}
  42. .text