mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 12:19:18 +02:00
Fixed startup assembler code for the case where there's no data in .bss and/or in .data.
Fixed _stack_top symbol calculation so it works for all controllers. Added ATTINY2313 controller. git-svn-id: trunk@31031 -
This commit is contained in:
parent
03880c2f74
commit
ab9c8bb569
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -8299,6 +8299,7 @@ rtl/embedded/avr/atmega16.pp svneol=native#text/plain
|
|||||||
rtl/embedded/avr/atmega168fam.pp svneol=native#text/plain
|
rtl/embedded/avr/atmega168fam.pp svneol=native#text/plain
|
||||||
rtl/embedded/avr/atmega48fam.pp svneol=native#text/plain
|
rtl/embedded/avr/atmega48fam.pp svneol=native#text/plain
|
||||||
rtl/embedded/avr/atmega8.pp svneol=native#text/plain
|
rtl/embedded/avr/atmega8.pp svneol=native#text/plain
|
||||||
|
rtl/embedded/avr/attiny2313.pp svneol=native#text/plain
|
||||||
rtl/embedded/avr/attinyx4.pp svneol=native#text/plain
|
rtl/embedded/avr/attinyx4.pp svneol=native#text/plain
|
||||||
rtl/embedded/avr/avrcommon.inc svneol=native#text/plain
|
rtl/embedded/avr/avrcommon.inc svneol=native#text/plain
|
||||||
rtl/embedded/avr/avrsim.pp svneol=native#text/plain
|
rtl/embedded/avr/avrsim.pp svneol=native#text/plain
|
||||||
|
@ -61,6 +61,7 @@ Type
|
|||||||
ct_attiny24,
|
ct_attiny24,
|
||||||
ct_attiny44,
|
ct_attiny44,
|
||||||
ct_attiny84,
|
ct_attiny84,
|
||||||
|
ct_attiny2313,
|
||||||
|
|
||||||
ct_atmega48,
|
ct_atmega48,
|
||||||
ct_atmega88,
|
ct_atmega88,
|
||||||
@ -171,6 +172,16 @@ Const
|
|||||||
eeprombase:0;
|
eeprombase:0;
|
||||||
eepromsize:512
|
eepromsize:512
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
controllertypestr:'ATTINY2313';
|
||||||
|
controllerunitstr:'ATTINY2313';
|
||||||
|
flashbase:0;
|
||||||
|
flashsize:2048;
|
||||||
|
srambase:0;
|
||||||
|
sramsize:128;
|
||||||
|
eeprombase:0;
|
||||||
|
eepromsize:128
|
||||||
|
),
|
||||||
|
|
||||||
(
|
(
|
||||||
controllertypestr:'ATMEGA48';
|
controllertypestr:'ATMEGA48';
|
||||||
|
@ -634,17 +634,18 @@ begin
|
|||||||
Add('OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")');
|
Add('OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")');
|
||||||
Add('OUTPUT_ARCH(avr:2)');
|
Add('OUTPUT_ARCH(avr:2)');
|
||||||
Add('MEMORY');
|
Add('MEMORY');
|
||||||
Add('{');
|
|
||||||
with embedded_controllers[current_settings.controllertype] do
|
with embedded_controllers[current_settings.controllertype] do
|
||||||
begin
|
begin
|
||||||
|
Add('{');
|
||||||
Add(' text (rx) : ORIGIN = 0, LENGTH = 0x'+IntToHex(flashsize,8));
|
Add(' text (rx) : ORIGIN = 0, LENGTH = 0x'+IntToHex(flashsize,8));
|
||||||
Add(' data (rw!x) : ORIGIN = 0x800060, LENGTH = 0x'+IntToHex(sramsize,8));
|
Add(' data (rw!x) : ORIGIN = 0x800060, LENGTH = 0x'+IntToHex(sramsize,8));
|
||||||
Add(' eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 0x'+IntToHex(eepromsize,8));
|
Add(' eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 0x'+IntToHex(eepromsize,8));
|
||||||
Add(' fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K');
|
Add(' fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K');
|
||||||
Add(' lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K');
|
Add(' lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K');
|
||||||
Add(' signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K');
|
Add(' signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K');
|
||||||
|
Add('}');
|
||||||
|
Add('_stack_top = 0x' + IntToHex(sramsize-1,4) + ';');
|
||||||
end;
|
end;
|
||||||
Add('}');
|
|
||||||
Add('SECTIONS');
|
Add('SECTIONS');
|
||||||
Add('{');
|
Add('{');
|
||||||
Add(' /* Read-only sections, merged into text segment: */');
|
Add(' /* Read-only sections, merged into text segment: */');
|
||||||
@ -860,8 +861,6 @@ begin
|
|||||||
Add(' .debug_loc 0 : { *(.debug_loc) }');
|
Add(' .debug_loc 0 : { *(.debug_loc) }');
|
||||||
Add(' .debug_macinfo 0 : { *(.debug_macinfo) }');
|
Add(' .debug_macinfo 0 : { *(.debug_macinfo) }');
|
||||||
Add('}');
|
Add('}');
|
||||||
{ last address of ram on an atmega128 }
|
|
||||||
Add('_stack_top = 0x0fff;');
|
|
||||||
end;
|
end;
|
||||||
{$endif AVR}
|
{$endif AVR}
|
||||||
|
|
||||||
|
435
rtl/embedded/avr/attiny2313.pp
Normal file
435
rtl/embedded/avr/attiny2313.pp
Normal file
@ -0,0 +1,435 @@
|
|||||||
|
{******************************************************************************
|
||||||
|
Register definitions and startup code for ATMEL ATtiny 24/44/84
|
||||||
|
|
||||||
|
******************************************************************************}
|
||||||
|
unit attiny2313;
|
||||||
|
|
||||||
|
{$goto on}
|
||||||
|
|
||||||
|
interface
|
||||||
|
var
|
||||||
|
DIDR : byte absolute $21;
|
||||||
|
UBRRH : byte absolute $22;
|
||||||
|
UCSRC : byte absolute $23;
|
||||||
|
ACSR : byte absolute $28;
|
||||||
|
UBRRL : byte absolute $29;
|
||||||
|
UCSRB : byte absolute $2A;
|
||||||
|
UCSRA : byte absolute $2B;
|
||||||
|
UDR : byte absolute $2C;
|
||||||
|
USICR : byte absolute $2D;
|
||||||
|
USISR : byte absolute $2E;
|
||||||
|
USIDR : byte absolute $2F;
|
||||||
|
PIND : byte absolute $30;
|
||||||
|
DDRD : byte absolute $31;
|
||||||
|
PORTD : byte absolute $32;
|
||||||
|
GPIOR0 : byte absolute $33;
|
||||||
|
GPIOR1 : byte absolute $34;
|
||||||
|
GPIOR2 : byte absolute $35;
|
||||||
|
PINB : byte absolute $36;
|
||||||
|
DDRB : byte absolute $37;
|
||||||
|
PORTB : byte absolute $38;
|
||||||
|
PINA : byte absolute $39;
|
||||||
|
DDRA : byte absolute $3A;
|
||||||
|
PORTA : byte absolute $3B;
|
||||||
|
EECR : byte absolute $3C;
|
||||||
|
EEDR : byte absolute $3D;
|
||||||
|
EEAR : byte absolute $3E;
|
||||||
|
PCMSK : byte absolute $40;
|
||||||
|
WDTCSR : byte absolute $41;
|
||||||
|
TCCR1C : byte absolute $42;
|
||||||
|
GTCCR : byte absolute $43;
|
||||||
|
ICR1L : byte absolute $44;
|
||||||
|
ICR1H : byte absolute $45;
|
||||||
|
ICR1 : word absolute $44;
|
||||||
|
CLKPR : byte absolute $46;
|
||||||
|
OCR1BL : byte absolute $48;
|
||||||
|
OCR1BH : byte absolute $49;
|
||||||
|
OCR1B : word absolute $48;
|
||||||
|
OCR1AL : byte absolute $4A;
|
||||||
|
OCR1AH : byte absolute $4B;
|
||||||
|
OCR1A : word absolute $4A;
|
||||||
|
TCNT1L : byte absolute $4C;
|
||||||
|
TCNT1H : byte absolute $4D;
|
||||||
|
TCNT1 : word absolute $4C;
|
||||||
|
TCCR1B : byte absolute $4E;
|
||||||
|
TCCR1A : byte absolute $4F;
|
||||||
|
TCCR0A : byte absolute $50;
|
||||||
|
OSCCAL : byte absolute $51;
|
||||||
|
TCNT0 : byte absolute $52;
|
||||||
|
TCCR0B : byte absolute $53;
|
||||||
|
MCUSR : byte absolute $54;
|
||||||
|
MCUCR : byte absolute $55;
|
||||||
|
OCR0A : byte absolute $56;
|
||||||
|
SPMCSR : byte absolute $57;
|
||||||
|
TIFR : byte absolute $58;
|
||||||
|
TIMSK : byte absolute $59;
|
||||||
|
EIFR : byte absolute $5A;
|
||||||
|
GIMSK : byte absolute $5B;
|
||||||
|
OCR0B : byte absolute $5C;
|
||||||
|
SPL : byte absolute $5D;
|
||||||
|
SREG : byte absolute $5F;
|
||||||
|
|
||||||
|
const
|
||||||
|
{ DIDR }
|
||||||
|
AIN1D = 1;
|
||||||
|
AIN0D = 0;
|
||||||
|
|
||||||
|
{ UCSRC }
|
||||||
|
UMSEL = 6;
|
||||||
|
UPM1 = 5;
|
||||||
|
UPM0 = 4;
|
||||||
|
USBS = 3;
|
||||||
|
UCSZ1 = 2;
|
||||||
|
UCSZ0 = 1;
|
||||||
|
UCPO = 0;
|
||||||
|
|
||||||
|
{ ACSR }
|
||||||
|
ACD = 7;
|
||||||
|
ACBG = 6;
|
||||||
|
ACO = 5;
|
||||||
|
ACI = 4;
|
||||||
|
ACIE = 3;
|
||||||
|
ACIC = 2;
|
||||||
|
ACIS1 = 1;
|
||||||
|
ACIS0 = 0;
|
||||||
|
|
||||||
|
{ UCSRB }
|
||||||
|
RXCIE = 7;
|
||||||
|
TXCIE = 6;
|
||||||
|
UDRIE = 5;
|
||||||
|
RXEN = 4;
|
||||||
|
TXEN = 3;
|
||||||
|
UCSZ2 = 2;
|
||||||
|
RXB8 = 1;
|
||||||
|
TXB8 = 0;
|
||||||
|
|
||||||
|
{ UCSRA }
|
||||||
|
RXC = 7;
|
||||||
|
TXC = 6;
|
||||||
|
UDRE = 5;
|
||||||
|
FE = 4;
|
||||||
|
DOR = 3;
|
||||||
|
UPE = 2;
|
||||||
|
U2X = 1;
|
||||||
|
MPCM = 0;
|
||||||
|
|
||||||
|
{ USICR }
|
||||||
|
USISIE = 7;
|
||||||
|
USIOIE = 6;
|
||||||
|
USIWM1 = 5;
|
||||||
|
USIWM0 = 4;
|
||||||
|
USICS1 = 3;
|
||||||
|
USICS0 = 2;
|
||||||
|
USICLK = 1;
|
||||||
|
USITC = 0;
|
||||||
|
|
||||||
|
{ USISR }
|
||||||
|
USISIF = 7;
|
||||||
|
USIOIF = 6;
|
||||||
|
USIPF = 5;
|
||||||
|
USIDC = 4;
|
||||||
|
USICNT3 = 3;
|
||||||
|
USICNT2 = 2;
|
||||||
|
USICNT1 = 1;
|
||||||
|
USICNT0 = 0;
|
||||||
|
|
||||||
|
{ PCMSK }
|
||||||
|
PCINT7 = 7;
|
||||||
|
PCINT6 = 6;
|
||||||
|
PCINT5 = 5;
|
||||||
|
PCINT4 = 4;
|
||||||
|
PCINT3 = 3;
|
||||||
|
PCINT2 = 2;
|
||||||
|
PCINT1 = 1;
|
||||||
|
PCINT0 = 0;
|
||||||
|
|
||||||
|
{ PINB }
|
||||||
|
PINB3 = 3;
|
||||||
|
PINB2 = 2;
|
||||||
|
PINB1 = 1;
|
||||||
|
PINB0 = 0;
|
||||||
|
|
||||||
|
{ DDRB }
|
||||||
|
DDB3 = 3;
|
||||||
|
DDB2 = 2;
|
||||||
|
DDB1 = 1;
|
||||||
|
DDB0 = 0;
|
||||||
|
|
||||||
|
{ PORTB }
|
||||||
|
PORTB3 = 3;
|
||||||
|
PORTB2 = 2;
|
||||||
|
PORTB1 = 1;
|
||||||
|
PORTB0 = 0;
|
||||||
|
|
||||||
|
{ PINA }
|
||||||
|
PINA7 = 7;
|
||||||
|
PINA6 = 6;
|
||||||
|
PINA5 = 5;
|
||||||
|
PINA4 = 4;
|
||||||
|
PINA3 = 3;
|
||||||
|
PINA2 = 2;
|
||||||
|
PINA1 = 1;
|
||||||
|
PINA0 = 0;
|
||||||
|
|
||||||
|
{ DDRA }
|
||||||
|
DDA7 = 7;
|
||||||
|
DDA6 = 6;
|
||||||
|
DDA5 = 5;
|
||||||
|
DDA4 = 4;
|
||||||
|
DDA3 = 3;
|
||||||
|
DDA2 = 2;
|
||||||
|
DDA1 = 1;
|
||||||
|
DDA0 = 0;
|
||||||
|
|
||||||
|
{ PORTA }
|
||||||
|
PORTA7 = 7;
|
||||||
|
PORTA6 = 6;
|
||||||
|
PORTA5 = 5;
|
||||||
|
PORTA4 = 4;
|
||||||
|
PORTA3 = 3;
|
||||||
|
PORTA2 = 2;
|
||||||
|
PORTA1 = 1;
|
||||||
|
PORTA0 = 0;
|
||||||
|
|
||||||
|
{ EECR }
|
||||||
|
EEPM1 = 5;
|
||||||
|
EEPM0 = 4;
|
||||||
|
EERIE = 3;
|
||||||
|
EEMPE = 2;
|
||||||
|
EEPE = 1;
|
||||||
|
EERE = 0;
|
||||||
|
|
||||||
|
{ EEARL }
|
||||||
|
EEAR7 = 7;
|
||||||
|
EEAR6 = 6;
|
||||||
|
EEAR5 = 5;
|
||||||
|
EEAR4 = 4;
|
||||||
|
EEAR3 = 3;
|
||||||
|
EEAR2 = 2;
|
||||||
|
EEAR1 = 1;
|
||||||
|
EEAR0 = 0;
|
||||||
|
|
||||||
|
{ EEARH }
|
||||||
|
EEAR8 = 0;
|
||||||
|
|
||||||
|
{ PCMSK1 }
|
||||||
|
PCINT11 = 3;
|
||||||
|
PCINT10 = 2;
|
||||||
|
PCINT9 = 1;
|
||||||
|
PCINT8 = 0;
|
||||||
|
|
||||||
|
{ WDTCSR }
|
||||||
|
WDIF = 7;
|
||||||
|
WDIE = 6;
|
||||||
|
WDP3 = 5;
|
||||||
|
WDCE = 4;
|
||||||
|
WDE = 3;
|
||||||
|
WDP2 = 2;
|
||||||
|
WDP1 = 1;
|
||||||
|
WDP0 = 0;
|
||||||
|
|
||||||
|
{ TCCR1C }
|
||||||
|
FOC1A = 7;
|
||||||
|
FOC1B = 6;
|
||||||
|
|
||||||
|
{ GTCCR }
|
||||||
|
PSR10 = 0;
|
||||||
|
|
||||||
|
{ CLKPR }
|
||||||
|
CLKPCE = 7;
|
||||||
|
CLKPS3 = 3;
|
||||||
|
CLKPS2 = 2;
|
||||||
|
CLKPS1 = 1;
|
||||||
|
CLKPS0 = 0;
|
||||||
|
|
||||||
|
{ TCCR1B }
|
||||||
|
ICNC1 = 7;
|
||||||
|
ICES1 = 6;
|
||||||
|
WGM13 = 4;
|
||||||
|
WGM12 = 3;
|
||||||
|
CS12 = 2;
|
||||||
|
CS11 = 1;
|
||||||
|
CS10 = 0;
|
||||||
|
|
||||||
|
{ TCCR1A }
|
||||||
|
COM1A1 = 7;
|
||||||
|
COM1A0 = 6;
|
||||||
|
COM1B1 = 5;
|
||||||
|
COM1B0 = 4;
|
||||||
|
WGM11 = 1;
|
||||||
|
WGM10 = 0;
|
||||||
|
|
||||||
|
{ TCCR0A }
|
||||||
|
COM0A1 = 7;
|
||||||
|
COM0A0 = 6;
|
||||||
|
COM0B1 = 5;
|
||||||
|
COM0B0 = 4;
|
||||||
|
WGM01 = 1;
|
||||||
|
WGM00 = 0;
|
||||||
|
|
||||||
|
{ OSCCAL }
|
||||||
|
CAL6 = 6;
|
||||||
|
CAL5 = 5;
|
||||||
|
CAL4 = 4;
|
||||||
|
CAL3 = 3;
|
||||||
|
CAL2 = 2;
|
||||||
|
CAL1 = 1;
|
||||||
|
CAL0 = 0;
|
||||||
|
|
||||||
|
{ TCCR0B }
|
||||||
|
FOC0A = 7;
|
||||||
|
FOC0B = 6;
|
||||||
|
WGM02 = 3;
|
||||||
|
CS02 = 2;
|
||||||
|
CS01 = 1;
|
||||||
|
CS00 = 0;
|
||||||
|
|
||||||
|
{ MCUSR }
|
||||||
|
WDRF = 3;
|
||||||
|
BORF = 2;
|
||||||
|
EXTRF = 1;
|
||||||
|
PORF = 0;
|
||||||
|
|
||||||
|
{ MCUCR }
|
||||||
|
PUD = 7;
|
||||||
|
SM1 = 6;
|
||||||
|
SE = 5;
|
||||||
|
SM0 = 4;
|
||||||
|
ISC11 = 3;
|
||||||
|
ISC10 = 2;
|
||||||
|
ISC01 = 1;
|
||||||
|
ISC00 = 0;
|
||||||
|
|
||||||
|
{ SPMCSR }
|
||||||
|
CTPB = 4;
|
||||||
|
RFLB = 3;
|
||||||
|
PGWRT = 2;
|
||||||
|
PGERS = 1;
|
||||||
|
SELFPRGEN= 0;
|
||||||
|
|
||||||
|
{ TIFR }
|
||||||
|
TOV1 = 7;
|
||||||
|
OCF1A = 6;
|
||||||
|
OCF1B = 5;
|
||||||
|
ICF1 = 3;
|
||||||
|
OCF0B = 2;
|
||||||
|
TOV0 = 1;
|
||||||
|
OCF0A = 0;
|
||||||
|
|
||||||
|
{ TIMSK }
|
||||||
|
TOIE1 = 7;
|
||||||
|
OCIE1A = 6;
|
||||||
|
OCIE1B = 5;
|
||||||
|
ICIE1 = 3;
|
||||||
|
OCIE0B = 2;
|
||||||
|
TOIE0 = 1;
|
||||||
|
OCIE0A = 0;
|
||||||
|
|
||||||
|
{ GIMSK }
|
||||||
|
INT1 = 7;
|
||||||
|
INT0 = 6;
|
||||||
|
PCIE = 5;
|
||||||
|
|
||||||
|
{ EIFR }
|
||||||
|
INTF1 = 7;
|
||||||
|
INTF0 = 6;
|
||||||
|
PCIF = 5;
|
||||||
|
|
||||||
|
{$define RELBRANCHES}
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$i avrcommon.inc}
|
||||||
|
|
||||||
|
procedure Int00Handler; external name 'Int00Handler';
|
||||||
|
procedure Int01Handler; external name 'Int01Handler';
|
||||||
|
procedure Int02Handler; external name 'Int02Handler';
|
||||||
|
procedure Int03Handler; external name 'Int03Handler';
|
||||||
|
procedure Int04Handler; external name 'Int04Handler';
|
||||||
|
procedure Int05Handler; external name 'Int05Handler';
|
||||||
|
procedure Int06Handler; external name 'Int06Handler';
|
||||||
|
procedure Int07Handler; external name 'Int07Handler';
|
||||||
|
procedure Int08Handler; external name 'Int08Handler';
|
||||||
|
procedure Int09Handler; external name 'Int09Handler';
|
||||||
|
procedure Int10Handler; external name 'Int10Handler';
|
||||||
|
procedure Int11Handler; external name 'Int11Handler';
|
||||||
|
procedure Int12Handler; external name 'Int12Handler';
|
||||||
|
procedure Int13Handler; external name 'Int13Handler';
|
||||||
|
procedure Int14Handler; external name 'Int14Handler';
|
||||||
|
procedure Int15Handler; external name 'Int15Handler';
|
||||||
|
procedure Int16Handler; external name 'Int16Handler';
|
||||||
|
procedure Int17Handler; external name 'Int17Handler';
|
||||||
|
|
||||||
|
procedure _FPC_start; assembler; nostackframe;
|
||||||
|
label
|
||||||
|
_start;
|
||||||
|
asm
|
||||||
|
.init
|
||||||
|
.globl _start
|
||||||
|
|
||||||
|
rjmp _start
|
||||||
|
rjmp Int00Handler
|
||||||
|
rjmp Int01Handler
|
||||||
|
rjmp Int02Handler
|
||||||
|
rjmp Int03Handler
|
||||||
|
rjmp Int04Handler
|
||||||
|
rjmp Int05Handler
|
||||||
|
rjmp Int06Handler
|
||||||
|
rjmp Int07Handler
|
||||||
|
rjmp Int08Handler
|
||||||
|
rjmp Int09Handler
|
||||||
|
rjmp Int10Handler
|
||||||
|
rjmp Int11Handler
|
||||||
|
rjmp Int12Handler
|
||||||
|
rjmp Int13Handler
|
||||||
|
rjmp Int14Handler
|
||||||
|
rjmp Int15Handler
|
||||||
|
rjmp Int16Handler
|
||||||
|
rjmp Int17Handler
|
||||||
|
|
||||||
|
{
|
||||||
|
all ATMEL MCUs use the same startup code, the details are
|
||||||
|
governed by defines
|
||||||
|
}
|
||||||
|
{$i start.inc}
|
||||||
|
|
||||||
|
.weak Int00Handler
|
||||||
|
.weak Int01Handler
|
||||||
|
.weak Int02Handler
|
||||||
|
.weak Int03Handler
|
||||||
|
.weak Int04Handler
|
||||||
|
.weak Int05Handler
|
||||||
|
.weak Int06Handler
|
||||||
|
.weak Int07Handler
|
||||||
|
.weak Int08Handler
|
||||||
|
.weak Int09Handler
|
||||||
|
.weak Int10Handler
|
||||||
|
.weak Int11Handler
|
||||||
|
.weak Int12Handler
|
||||||
|
.weak Int13Handler
|
||||||
|
.weak Int14Handler
|
||||||
|
.weak Int15Handler
|
||||||
|
.weak Int16Handler
|
||||||
|
.weak Int17Handler
|
||||||
|
|
||||||
|
.set Int00Handler, Default_IRQ_handler
|
||||||
|
.set Int01Handler, Default_IRQ_handler
|
||||||
|
.set Int02Handler, Default_IRQ_handler
|
||||||
|
.set Int03Handler, Default_IRQ_handler
|
||||||
|
.set Int04Handler, Default_IRQ_handler
|
||||||
|
.set Int05Handler, Default_IRQ_handler
|
||||||
|
.set Int06Handler, Default_IRQ_handler
|
||||||
|
.set Int07Handler, Default_IRQ_handler
|
||||||
|
.set Int08Handler, Default_IRQ_handler
|
||||||
|
.set Int09Handler, Default_IRQ_handler
|
||||||
|
.set Int10Handler, Default_IRQ_handler
|
||||||
|
.set Int11Handler, Default_IRQ_handler
|
||||||
|
.set Int12Handler, Default_IRQ_handler
|
||||||
|
.set Int13Handler, Default_IRQ_handler
|
||||||
|
.set Int14Handler, Default_IRQ_handler
|
||||||
|
.set Int15Handler, Default_IRQ_handler
|
||||||
|
.set Int16Handler, Default_IRQ_handler
|
||||||
|
.set Int17Handler, Default_IRQ_handler
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
@ -13,6 +13,10 @@
|
|||||||
ldi YH,hi8(_edata)
|
ldi YH,hi8(_edata)
|
||||||
ldi ZL,lo8(_etext)
|
ldi ZL,lo8(_etext)
|
||||||
ldi ZH,hi8(_etext)
|
ldi ZH,hi8(_etext)
|
||||||
|
|
||||||
|
cpi XL, lo8(_edata)
|
||||||
|
cpc XH, YH
|
||||||
|
breq .LCopyDataLoopEnd
|
||||||
.LCopyDataLoop:
|
.LCopyDataLoop:
|
||||||
lpm r0, Z+
|
lpm r0, Z+
|
||||||
st X+, r0
|
st X+, r0
|
||||||
@ -20,17 +24,23 @@
|
|||||||
cpi XL, lo8(_edata)
|
cpi XL, lo8(_edata)
|
||||||
cpc XH, YH
|
cpc XH, YH
|
||||||
brne .LCopyDataLoop
|
brne .LCopyDataLoop
|
||||||
|
.LCopyDataLoopEnd:
|
||||||
|
|
||||||
// Zero .bss section
|
// Zero .bss section
|
||||||
ldi XL,lo8(_bss_start)
|
ldi XL,lo8(_bss_start)
|
||||||
ldi XH,hi8(_bss_start)
|
ldi XH,hi8(_bss_start)
|
||||||
ldi YH,hi8(_bss_end)
|
ldi YH,hi8(_bss_end)
|
||||||
|
|
||||||
|
cpi XL, lo8(_bss_end)
|
||||||
|
cpc XH, YH
|
||||||
|
breq .LZeroBssLoopEnd
|
||||||
.LZeroBssLoop:
|
.LZeroBssLoop:
|
||||||
st X+, r1
|
st X+, r1
|
||||||
|
|
||||||
cpi XL, lo8(_bss_end)
|
cpi XL, lo8(_bss_end)
|
||||||
cpc XH, YH
|
cpc XH, YH
|
||||||
brne .LZeroBssLoop
|
brne .LZeroBssLoop
|
||||||
|
.LZeroBssLoopEnd:
|
||||||
|
|
||||||
{$ifdef RELBRANCHES}
|
{$ifdef RELBRANCHES}
|
||||||
rjmp PASCALMAIN
|
rjmp PASCALMAIN
|
||||||
|
Loading…
Reference in New Issue
Block a user