start.inc 793 B

1234567891011121314151617181920212223242526272829303132333435363738
  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. .LCopyDataLoop:
  15. lpm r0, Z+
  16. st X+, r0
  17. cpi XL, lo8(_edata)
  18. cpc XH, YH
  19. brne .LCopyDataLoop
  20. // Zero .bss section
  21. ldi XL,lo8(_bss_start)
  22. ldi XH,hi8(_bss_start)
  23. ldi YH,hi8(_bss_end)
  24. .LZeroBssLoop:
  25. st X+, r1
  26. cpi XL, lo8(_bss_end)
  27. cpc XH, YH
  28. brne .LZeroBssLoop
  29. call PASCALMAIN
  30. call _FPC_haltproc
  31. .text