123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- uses
- intrinsics;
- var
- _data: record end; external name '__data_start';
- _edata: record end; external name '__data_end';
- _etext: record end; external name '_etext';
- _bss_start: record end; external name '__bss_start';
- _bss_end: record end; external name '__bss_end';
- _stack_top: record end; external name '_stack_top';
- __dtors_end: record end; external name '__dtors_end';
- procedure PASCALMAIN; external name 'PASCALMAIN';
- procedure _FPC_haltproc; public name '_haltproc';noreturn;
- begin
- avr_cli;
- while true do
- ;
- end;
- procedure Default_IRQ_handler; public name '_Default_IRQ_handler';noreturn;
- begin
- while true do
- ;
- end;
- procedure _FPC_init_zeroreg_SP; public name '_init_zeroreg_SP'; section '.init2';assembler;nostackframe;noreturn;
- asm
- {$ifdef CPUAVR_16_REGS}
- clr r17
- {$else CPUAVR_16_REGS}
- clr r1
- {$endif CPUAVR_16_REGS}
- // AVR1 has a hardware stack, no configuration possible
- {$ifndef CPUAVR1}
- // load stack pointer
- ldi r30,lo8(_stack_top)
- out 0x3d,r30
- {$if declared(SPH) or declared(CPU)}
- ldi r30,hi8(_stack_top)
- out 0x3e,r30
- {$endif declared}
- {$endif CPUAVR1}
- end;
- {$ifndef CPUAVR1}
- procedure _FPC_copy_data; section '.init4';assembler;nostackframe;noreturn;
- asm
- // Initialize .data section
- ldi XL,lo8(_data)
- ldi XH,hi8(_data)
- ldi YH,hi8(_edata)
- ldi ZL,lo8(_etext)
- {$ifdef CPUAVR_16_REGS}
- ldi ZH,hi8(_etext)+(0x40) // program memory mapped to $4000 in data space
- {$else CPUAVR_16_REGS}
- ldi ZH,hi8(_etext)
- {$endif CPUAVR_16_REGS}
- rjmp .LCopyDataLoopEntry
- .LCopyDataLoop:
- {$ifdef CPUAVR_16_REGS}
- ld r16, Z+
- {$else CPUAVR_16_REGS}
- lpm r16, Z+
- {$endif CPUAVR_16_REGS}
- st X+, r16
- .LCopyDataLoopEntry:
- cpi XL, lo8(_edata)
- cpc XH, YH
- brne .LCopyDataLoop
- // Zero .bss section
- ldi XL,lo8(_bss_start)
- ldi XH,hi8(_bss_start)
- ldi YH,hi8(_bss_end)
- {$ifdef RELBRANCHES}
- rjmp .LZeroBssLoopEntry
- {$else RELBRANCHES}
- jmp .LZeroBssLoopEntry
- {$endif RELBRANCHES}
- .LZeroBssLoop:
- {$ifdef CPUAVR_16_REGS}
- st X+, r17
- {$else CPUAVR_16_REGS}
- st X+, r1
- {$endif CPUAVR_16_REGS}
- .LZeroBssLoopEntry:
- cpi XL, lo8(_bss_end)
- cpc XH, YH
- brne .LZeroBssLoop
- end;
- {$endif CPUAVR1}
- procedure _FPC_jmp_main; section '.init9';assembler;nostackframe;noreturn;
- asm
- {$ifdef RELBRANCHES}
- rjmp PASCALMAIN
- {$else RELBRANCHES}
- jmp PASCALMAIN
- {$endif RELBRANCHES}
- end;
|