Browse Source

Split startup code into different .init sections according to avr-libs convention.

ccrause 3 years ago
parent
commit
1108d03609
100 changed files with 302 additions and 1185 deletions
  1. 2 11
      rtl/embedded/avr/at90can128.pp
  2. 2 11
      rtl/embedded/avr/at90can32.pp
  3. 2 11
      rtl/embedded/avr/at90can64.pp
  4. 2 11
      rtl/embedded/avr/at90pwm1.pp
  5. 2 11
      rtl/embedded/avr/at90pwm161.pp
  6. 2 11
      rtl/embedded/avr/at90pwm216.pp
  7. 2 11
      rtl/embedded/avr/at90pwm2b.pp
  8. 2 11
      rtl/embedded/avr/at90pwm316.pp
  9. 2 11
      rtl/embedded/avr/at90pwm3b.pp
  10. 2 11
      rtl/embedded/avr/at90pwm81.pp
  11. 2 11
      rtl/embedded/avr/at90usb1286.pp
  12. 2 11
      rtl/embedded/avr/at90usb1287.pp
  13. 2 11
      rtl/embedded/avr/at90usb162.pp
  14. 2 11
      rtl/embedded/avr/at90usb646.pp
  15. 2 11
      rtl/embedded/avr/at90usb647.pp
  16. 2 11
      rtl/embedded/avr/at90usb82.pp
  17. 2 11
      rtl/embedded/avr/ata6285.pp
  18. 2 11
      rtl/embedded/avr/ata6286.pp
  19. 2 11
      rtl/embedded/avr/atmega128.pp
  20. 2 11
      rtl/embedded/avr/atmega1280.pp
  21. 2 11
      rtl/embedded/avr/atmega1281.pp
  22. 2 11
      rtl/embedded/avr/atmega1284.pp
  23. 2 11
      rtl/embedded/avr/atmega1284p.pp
  24. 10 18
      rtl/embedded/avr/atmega1284rfr2.pp
  25. 2 11
      rtl/embedded/avr/atmega128a.pp
  26. 2 11
      rtl/embedded/avr/atmega128rfa1.pp
  27. 10 18
      rtl/embedded/avr/atmega128rfr2.pp
  28. 2 11
      rtl/embedded/avr/atmega16.pp
  29. 3 11
      rtl/embedded/avr/atmega1608.pp
  30. 3 11
      rtl/embedded/avr/atmega1609.pp
  31. 2 11
      rtl/embedded/avr/atmega162.pp
  32. 2 11
      rtl/embedded/avr/atmega164a.pp
  33. 2 11
      rtl/embedded/avr/atmega164p.pp
  34. 2 11
      rtl/embedded/avr/atmega164pa.pp
  35. 2 11
      rtl/embedded/avr/atmega165a.pp
  36. 2 11
      rtl/embedded/avr/atmega165p.pp
  37. 2 11
      rtl/embedded/avr/atmega165pa.pp
  38. 2 11
      rtl/embedded/avr/atmega168.pp
  39. 2 11
      rtl/embedded/avr/atmega168a.pp
  40. 2 11
      rtl/embedded/avr/atmega168p.pp
  41. 2 11
      rtl/embedded/avr/atmega168pa.pp
  42. 10 18
      rtl/embedded/avr/atmega168pb.pp
  43. 2 11
      rtl/embedded/avr/atmega169a.pp
  44. 2 11
      rtl/embedded/avr/atmega169p.pp
  45. 2 11
      rtl/embedded/avr/atmega169pa.pp
  46. 2 11
      rtl/embedded/avr/atmega16a.pp
  47. 10 18
      rtl/embedded/avr/atmega16hva.pp
  48. 2 11
      rtl/embedded/avr/atmega16hvb.pp
  49. 10 18
      rtl/embedded/avr/atmega16hvbrevb.pp
  50. 2 11
      rtl/embedded/avr/atmega16m1.pp
  51. 2 11
      rtl/embedded/avr/atmega16u2.pp
  52. 2 11
      rtl/embedded/avr/atmega16u4.pp
  53. 2 11
      rtl/embedded/avr/atmega2560.pp
  54. 2 11
      rtl/embedded/avr/atmega2561.pp
  55. 10 18
      rtl/embedded/avr/atmega2564rfr2.pp
  56. 10 18
      rtl/embedded/avr/atmega256rfr2.pp
  57. 2 11
      rtl/embedded/avr/atmega32.pp
  58. 3 11
      rtl/embedded/avr/atmega3208.pp
  59. 3 11
      rtl/embedded/avr/atmega3209.pp
  60. 2 11
      rtl/embedded/avr/atmega324a.pp
  61. 2 11
      rtl/embedded/avr/atmega324p.pp
  62. 2 11
      rtl/embedded/avr/atmega324pa.pp
  63. 10 18
      rtl/embedded/avr/atmega324pb.pp
  64. 2 11
      rtl/embedded/avr/atmega325.pp
  65. 2 11
      rtl/embedded/avr/atmega3250.pp
  66. 2 11
      rtl/embedded/avr/atmega3250a.pp
  67. 2 11
      rtl/embedded/avr/atmega3250p.pp
  68. 2 11
      rtl/embedded/avr/atmega3250pa.pp
  69. 2 11
      rtl/embedded/avr/atmega325a.pp
  70. 2 11
      rtl/embedded/avr/atmega325p.pp
  71. 2 11
      rtl/embedded/avr/atmega325pa.pp
  72. 2 11
      rtl/embedded/avr/atmega328.pp
  73. 2 11
      rtl/embedded/avr/atmega328p.pp
  74. 10 19
      rtl/embedded/avr/atmega328pb.pp
  75. 2 11
      rtl/embedded/avr/atmega329.pp
  76. 2 11
      rtl/embedded/avr/atmega3290.pp
  77. 2 11
      rtl/embedded/avr/atmega3290a.pp
  78. 2 11
      rtl/embedded/avr/atmega3290p.pp
  79. 2 11
      rtl/embedded/avr/atmega3290pa.pp
  80. 2 11
      rtl/embedded/avr/atmega329a.pp
  81. 2 11
      rtl/embedded/avr/atmega329p.pp
  82. 2 11
      rtl/embedded/avr/atmega329pa.pp
  83. 2 11
      rtl/embedded/avr/atmega32a.pp
  84. 2 11
      rtl/embedded/avr/atmega32c1.pp
  85. 2 11
      rtl/embedded/avr/atmega32hvb.pp
  86. 10 18
      rtl/embedded/avr/atmega32hvbrevb.pp
  87. 2 11
      rtl/embedded/avr/atmega32m1.pp
  88. 2 11
      rtl/embedded/avr/atmega32u2.pp
  89. 2 11
      rtl/embedded/avr/atmega32u4.pp
  90. 10 18
      rtl/embedded/avr/atmega406.pp
  91. 2 11
      rtl/embedded/avr/atmega48.pp
  92. 3 11
      rtl/embedded/avr/atmega4808.pp
  93. 3 11
      rtl/embedded/avr/atmega4809.pp
  94. 2 11
      rtl/embedded/avr/atmega48a.pp
  95. 2 11
      rtl/embedded/avr/atmega48p.pp
  96. 2 11
      rtl/embedded/avr/atmega48pa.pp
  97. 10 18
      rtl/embedded/avr/atmega48pb.pp
  98. 2 11
      rtl/embedded/avr/atmega64.pp
  99. 2 11
      rtl/embedded/avr/atmega640.pp
  100. 2 11
      rtl/embedded/avr/atmega644.pp

+ 2 - 11
rtl/embedded/avr/at90can128.pp

@@ -1,7 +1,5 @@
 unit AT90CAN128;
 unit AT90CAN128;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -576,14 +574,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 34 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -621,8 +614,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90can32.pp

@@ -1,7 +1,5 @@
 unit AT90CAN32;
 unit AT90CAN32;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -576,14 +574,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 34 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -621,8 +614,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90can64.pp

@@ -1,7 +1,5 @@
 unit AT90CAN64;
 unit AT90CAN64;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -576,14 +574,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 34 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 35 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 36 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -621,8 +614,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm1.pp

@@ -1,7 +1,5 @@
 unit AT90PWM1;
 unit AT90PWM1;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -482,14 +480,9 @@ procedure RESERVED30_ISR; external name 'RESERVED30_ISR'; // Interrupt 29
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC1_CAPT_ISR
    rjmp PSC1_CAPT_ISR
@@ -522,8 +515,6 @@ label
    rjmp RESERVED31_ISR
    rjmp RESERVED31_ISR
    rjmp SPM_READY_ISR
    rjmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC1_CAPT_ISR
    .weak PSC1_CAPT_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm161.pp

@@ -1,7 +1,5 @@
 unit AT90PWM161;
 unit AT90PWM161;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -463,14 +461,9 @@ procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 17 Watchdog Timeout Int
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 18 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 18 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 19 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 19 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EEC_ISR
    rjmp PSC2_EEC_ISR
@@ -491,8 +484,6 @@ label
    rjmp EE_READY_ISR
    rjmp EE_READY_ISR
    rjmp SPM_READY_ISR
    rjmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EEC_ISR
    .weak PSC2_EEC_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm216.pp

@@ -1,7 +1,5 @@
 unit AT90PWM216;
 unit AT90PWM216;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -526,14 +524,9 @@ procedure RESERVED30_ISR; external name 'RESERVED30_ISR'; // Interrupt 29
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp PSC2_CAPT_ISR
    jmp PSC2_CAPT_ISR
    jmp PSC2_EC_ISR
    jmp PSC2_EC_ISR
    jmp PSC1_CAPT_ISR
    jmp PSC1_CAPT_ISR
@@ -566,8 +559,6 @@ label
    jmp RESERVED31_ISR
    jmp RESERVED31_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC1_CAPT_ISR
    .weak PSC1_CAPT_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm2b.pp

@@ -1,7 +1,5 @@
 unit AT90PWM2B;
 unit AT90PWM2B;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -528,14 +526,9 @@ procedure RESERVED30_ISR; external name 'RESERVED30_ISR'; // Interrupt 29
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC1_CAPT_ISR
    rjmp PSC1_CAPT_ISR
@@ -568,8 +561,6 @@ label
    rjmp RESERVED31_ISR
    rjmp RESERVED31_ISR
    rjmp SPM_READY_ISR
    rjmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC1_CAPT_ISR
    .weak PSC1_CAPT_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm316.pp

@@ -1,7 +1,5 @@
 unit AT90PWM316;
 unit AT90PWM316;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -598,14 +596,9 @@ procedure RESERVED30_ISR; external name 'RESERVED30_ISR'; // Interrupt 29
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp PSC2_CAPT_ISR
    jmp PSC2_CAPT_ISR
    jmp PSC2_EC_ISR
    jmp PSC2_EC_ISR
    jmp PSC1_CAPT_ISR
    jmp PSC1_CAPT_ISR
@@ -638,8 +631,6 @@ label
    jmp RESERVED31_ISR
    jmp RESERVED31_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC1_CAPT_ISR
    .weak PSC1_CAPT_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm3b.pp

@@ -1,7 +1,5 @@
 unit AT90PWM3B;
 unit AT90PWM3B;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -600,14 +598,9 @@ procedure RESERVED30_ISR; external name 'RESERVED30_ISR'; // Interrupt 29
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure RESERVED31_ISR; external name 'RESERVED31_ISR'; // Interrupt 30 
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 31 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC1_CAPT_ISR
    rjmp PSC1_CAPT_ISR
@@ -640,8 +633,6 @@ label
    rjmp RESERVED31_ISR
    rjmp RESERVED31_ISR
    rjmp SPM_READY_ISR
    rjmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC1_CAPT_ISR
    .weak PSC1_CAPT_ISR

+ 2 - 11
rtl/embedded/avr/at90pwm81.pp

@@ -1,7 +1,5 @@
 unit AT90PWM81;
 unit AT90PWM81;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -463,14 +461,9 @@ procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 17 Watchdog Timeout Int
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 18 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 18 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 19 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 19 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_CAPT_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EC_ISR
    rjmp PSC2_EEC_ISR
    rjmp PSC2_EEC_ISR
@@ -491,8 +484,6 @@ label
    rjmp EE_READY_ISR
    rjmp EE_READY_ISR
    rjmp SPM_READY_ISR
    rjmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak PSC2_CAPT_ISR
    .weak PSC2_CAPT_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EC_ISR
    .weak PSC2_EEC_ISR
    .weak PSC2_EEC_ISR

+ 2 - 11
rtl/embedded/avr/at90usb1286.pp

@@ -1,7 +1,5 @@
 unit AT90USB1286;
 unit AT90USB1286;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -601,14 +599,9 @@ procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 35 Timer/
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -647,8 +640,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90usb1287.pp

@@ -1,7 +1,5 @@
 unit AT90USB1287;
 unit AT90USB1287;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -710,14 +708,9 @@ procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 35 Timer/
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -756,8 +749,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90usb162.pp

@@ -1,7 +1,5 @@
 unit AT90USB162;
 unit AT90USB162;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -449,14 +447,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 26 Anal
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -486,8 +479,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90usb646.pp

@@ -1,7 +1,5 @@
 unit AT90USB646;
 unit AT90USB646;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -710,14 +708,9 @@ procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 35 Timer/
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -756,8 +749,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90usb647.pp

@@ -1,7 +1,5 @@
 unit AT90USB647;
 unit AT90USB647;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -710,14 +708,9 @@ procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 35 Timer/
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 36 2-wire Serial Interface        
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 37 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -756,8 +749,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/at90usb82.pp

@@ -1,7 +1,5 @@
 unit AT90USB82;
 unit AT90USB82;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -449,14 +447,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 52 Anal
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 54 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 54 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 56 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 56 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -486,8 +479,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/ata6285.pp

@@ -1,7 +1,5 @@
 unit ATA6285;
 unit ATA6285;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -350,14 +348,9 @@ procedure EXCM_ISR; external name 'EXCM_ISR'; // Interrupt 24 External Input Clo
 procedure EEREADY_ISR; external name 'EEREADY_ISR'; // Interrupt 25 EEPROM Ready Interrupt
 procedure EEREADY_ISR; external name 'EEREADY_ISR'; // Interrupt 25 EEPROM Ready Interrupt
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 26 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 26 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -385,8 +378,6 @@ label
    rjmp EEREADY_ISR
    rjmp EEREADY_ISR
    rjmp SPM_RDY_ISR
    rjmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/ata6286.pp

@@ -1,7 +1,5 @@
 unit ATA6286;
 unit ATA6286;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -350,14 +348,9 @@ procedure EXCM_ISR; external name 'EXCM_ISR'; // Interrupt 24 External Input Clo
 procedure EEREADY_ISR; external name 'EEREADY_ISR'; // Interrupt 25 EEPROM Ready Interrupt
 procedure EEREADY_ISR; external name 'EEREADY_ISR'; // Interrupt 25 EEPROM Ready Interrupt
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 26 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 26 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -385,8 +378,6 @@ label
    rjmp EEREADY_ISR
    rjmp EEREADY_ISR
    rjmp SPM_RDY_ISR
    rjmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega128.pp

@@ -1,7 +1,5 @@
 unit ATmega128;
 unit ATmega128;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -439,14 +437,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 32 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -482,8 +475,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega1280.pp

@@ -1,7 +1,5 @@
 unit ATmega1280;
 unit ATmega1280;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -727,14 +725,9 @@ procedure USART3__RX_ISR; external name 'USART3__RX_ISR'; // Interrupt 54 USART3
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -792,8 +785,6 @@ label
    jmp USART3__UDRE_ISR
    jmp USART3__UDRE_ISR
    jmp USART3__TX_ISR
    jmp USART3__TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega1281.pp

@@ -1,7 +1,5 @@
 unit ATmega1281;
 unit ATmega1281;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -646,14 +644,9 @@ procedure USART3__RX_ISR; external name 'USART3__RX_ISR'; // Interrupt 54 USART3
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -711,8 +704,6 @@ label
    jmp USART3__UDRE_ISR
    jmp USART3__UDRE_ISR
    jmp USART3__TX_ISR
    jmp USART3__TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega1284.pp

@@ -1,7 +1,5 @@
 unit ATmega1284;
 unit ATmega1284;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -481,14 +479,9 @@ procedure TIMER3_COMPA_ISR; external name 'TIMER3_COMPA_ISR'; // Interrupt 32 Ti
 procedure TIMER3_COMPB_ISR; external name 'TIMER3_COMPB_ISR'; // Interrupt 33 Timer/Counter3 Compare Match B
 procedure TIMER3_COMPB_ISR; external name 'TIMER3_COMPB_ISR'; // Interrupt 33 Timer/Counter3 Compare Match B
 procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 34 Timer/Counter3 Overflow
 procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 34 Timer/Counter3 Overflow
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -524,8 +517,6 @@ label
    jmp TIMER3_COMPB_ISR
    jmp TIMER3_COMPB_ISR
    jmp TIMER3_OVF_ISR
    jmp TIMER3_OVF_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega1284p.pp

@@ -1,7 +1,5 @@
 unit ATmega1284P;
 unit ATmega1284P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -483,14 +481,9 @@ procedure TIMER3_COMPA_ISR; external name 'TIMER3_COMPA_ISR'; // Interrupt 32 Ti
 procedure TIMER3_COMPB_ISR; external name 'TIMER3_COMPB_ISR'; // Interrupt 33 Timer/Counter3 Compare Match B
 procedure TIMER3_COMPB_ISR; external name 'TIMER3_COMPB_ISR'; // Interrupt 33 Timer/Counter3 Compare Match B
 procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 34 Timer/Counter3 Overflow
 procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 34 Timer/Counter3 Overflow
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -526,8 +519,6 @@ label
    jmp TIMER3_COMPB_ISR
    jmp TIMER3_COMPB_ISR
    jmp TIMER3_OVF_ISR
    jmp TIMER3_OVF_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 10 - 18
rtl/embedded/avr/atmega1284rfr2.pp

@@ -1,7 +1,6 @@
 unit ATmega1284RFR2;
 unit ATmega1284RFR2;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins Address
   PINA: byte absolute $20;  // Port A Input Pins Address
@@ -1790,10 +1789,10 @@ const
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -1865,15 +1864,10 @@ procedure TRX24_AMI0_ISR; external name 'TRX24_AMI0_ISR'; // Interrupt 73 Addres
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp INT2_ISR
   jmp INT2_ISR
@@ -1944,8 +1938,6 @@ asm
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI3_ISR
   jmp TRX24_AMI3_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega128a.pp

@@ -1,7 +1,5 @@
 unit ATmega128A;
 unit ATmega128A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -439,14 +437,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 32 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -482,8 +475,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega128rfa1.pp

@@ -1,7 +1,5 @@
 unit ATmega128RFA1;
 unit ATmega128RFA1;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -1029,14 +1027,9 @@ procedure SCNT_BACKOFF_ISR; external name 'SCNT_BACKOFF_ISR'; // Interrupt 69 Sy
 procedure AES_READY_ISR; external name 'AES_READY_ISR'; // Interrupt 70 AES engine ready interrupt
 procedure AES_READY_ISR; external name 'AES_READY_ISR'; // Interrupt 70 AES engine ready interrupt
 procedure BAT_LOW_ISR; external name 'BAT_LOW_ISR'; // Interrupt 71 Battery monitor indicates supply voltage below threshold
 procedure BAT_LOW_ISR; external name 'BAT_LOW_ISR'; // Interrupt 71 Battery monitor indicates supply voltage below threshold
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -1109,8 +1102,6 @@ label
    jmp AES_READY_ISR
    jmp AES_READY_ISR
    jmp BAT_LOW_ISR
    jmp BAT_LOW_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 10 - 18
rtl/embedded/avr/atmega128rfr2.pp

@@ -1,7 +1,6 @@
 unit ATmega128RFR2;
 unit ATmega128RFR2;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins Address
   PINA: byte absolute $20;  // Port A Input Pins Address
@@ -1798,10 +1797,10 @@ const
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -1873,15 +1872,10 @@ procedure TRX24_AMI0_ISR; external name 'TRX24_AMI0_ISR'; // Interrupt 73 Addres
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp INT2_ISR
   jmp INT2_ISR
@@ -1952,8 +1946,6 @@ asm
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI3_ISR
   jmp TRX24_AMI3_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega16.pp

@@ -1,7 +1,5 @@
 unit ATmega16;
 unit ATmega16;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -304,14 +302,9 @@ procedure INT2_ISR; external name 'INT2_ISR'; // Interrupt 18 External Interrupt
 procedure TIMER0_COMP_ISR; external name 'TIMER0_COMP_ISR'; // Interrupt 19 Timer/Counter0 Compare Match
 procedure TIMER0_COMP_ISR; external name 'TIMER0_COMP_ISR'; // Interrupt 19 Timer/Counter0 Compare Match
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp TIMER2_COMP_ISR
    jmp TIMER2_COMP_ISR
@@ -333,8 +326,6 @@ label
    jmp TIMER0_COMP_ISR
    jmp TIMER0_COMP_ISR
    jmp SPM_RDY_ISR
    jmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak TIMER2_COMP_ISR
    .weak TIMER2_COMP_ISR

+ 3 - 11
rtl/embedded/avr/atmega1608.pp

@@ -1,6 +1,5 @@
 unit ATmega1608;
 unit ATmega1608;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2047,14 +2046,9 @@ procedure USART2_TXC_ISR; external name 'USART2_TXC_ISR'; // Interrupt 33
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2095,8 +2089,6 @@ asm
   jmp PORTB_PORT_ISR
   jmp PORTB_PORT_ISR
   jmp PORTE_PORT_ISR
   jmp PORTE_PORT_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 3 - 11
rtl/embedded/avr/atmega1609.pp

@@ -1,6 +1,5 @@
 unit ATmega1609;
 unit ATmega1609;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2055,14 +2054,9 @@ procedure USART3_RXC_ISR; external name 'USART3_RXC_ISR'; // Interrupt 37
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2107,8 +2101,6 @@ asm
   jmp USART3_DRE_ISR
   jmp USART3_DRE_ISR
   jmp USART3_TXC_ISR
   jmp USART3_TXC_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 2 - 11
rtl/embedded/avr/atmega162.pp

@@ -1,7 +1,5 @@
 unit ATmega162;
 unit ATmega162;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -362,14 +360,9 @@ procedure EE_RDY_ISR; external name 'EE_RDY_ISR'; // Interrupt 25 EEPROM Ready
 procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 26 Analog Comparator
 procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 26 Analog Comparator
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 27 Store Program Memory Read
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 27 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -398,8 +391,6 @@ label
    jmp ANA_COMP_ISR
    jmp ANA_COMP_ISR
    jmp SPM_RDY_ISR
    jmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega164a.pp

@@ -1,7 +1,5 @@
 unit ATmega164A;
 unit ATmega164A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -435,14 +433,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -474,8 +467,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega164p.pp

@@ -1,7 +1,5 @@
 unit ATmega164P;
 unit ATmega164P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -437,14 +435,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -476,8 +469,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega164pa.pp

@@ -1,7 +1,5 @@
 unit ATmega164PA;
 unit ATmega164PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -437,14 +435,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -476,8 +469,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega165a.pp

@@ -1,7 +1,5 @@
 unit ATmega165A;
 unit ATmega165A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -355,14 +353,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -385,8 +378,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega165p.pp

@@ -1,7 +1,5 @@
 unit ATmega165P;
 unit ATmega165P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -355,14 +353,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -385,8 +378,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega165pa.pp

@@ -1,7 +1,5 @@
 unit ATmega165PA;
 unit ATmega165PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -357,14 +355,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -387,8 +380,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega168.pp

@@ -1,7 +1,5 @@
 unit ATmega168;
 unit ATmega168;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -402,8 +395,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega168a.pp

@@ -1,7 +1,5 @@
 unit ATmega168A;
 unit ATmega168A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -402,8 +395,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega168p.pp

@@ -1,7 +1,5 @@
 unit ATmega168P;
 unit ATmega168P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -370,14 +368,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -404,8 +397,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega168pa.pp

@@ -1,7 +1,5 @@
 unit ATmega168PA;
 unit ATmega168PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -370,14 +368,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -404,8 +397,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 10 - 18
rtl/embedded/avr/atmega168pb.pp

@@ -1,7 +1,6 @@
 unit ATmega168PB;
 unit ATmega168PB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINB: byte absolute $23;  // Port B Input Pins
   PINB: byte absolute $23;  // Port B Input Pins
@@ -450,10 +449,10 @@ const
   RXS = $06;  
   RXS = $06;  
   RXSIE = $07;  
   RXSIE = $07;  
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -481,15 +480,10 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure USART_START_ISR; external name 'USART_START_ISR'; // Interrupt 26 USART Start Edge Interrupt
 procedure USART_START_ISR; external name 'USART_START_ISR'; // Interrupt 26 USART Start Edge Interrupt
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp PCINT0_ISR
   jmp PCINT0_ISR
@@ -516,8 +510,6 @@ asm
   jmp TWI_ISR
   jmp TWI_ISR
   jmp SPM_Ready_ISR
   jmp SPM_Ready_ISR
   jmp USART_START_ISR
   jmp USART_START_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega169a.pp

@@ -1,7 +1,5 @@
 unit ATmega169A;
 unit ATmega169A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -398,14 +396,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -429,8 +422,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega169p.pp

@@ -1,7 +1,5 @@
 unit ATmega169P;
 unit ATmega169P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -398,14 +396,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -429,8 +422,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega169pa.pp

@@ -1,7 +1,5 @@
 unit ATmega169PA;
 unit ATmega169PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -400,14 +398,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -431,8 +424,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega16a.pp

@@ -1,7 +1,5 @@
 unit ATmega16A;
 unit ATmega16A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -304,14 +302,9 @@ procedure INT2_ISR; external name 'INT2_ISR'; // Interrupt 18 External Interrupt
 procedure TIMER0_COMP_ISR; external name 'TIMER0_COMP_ISR'; // Interrupt 19 Timer/Counter0 Compare Match
 procedure TIMER0_COMP_ISR; external name 'TIMER0_COMP_ISR'; // Interrupt 19 Timer/Counter0 Compare Match
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp TIMER2_COMP_ISR
    jmp TIMER2_COMP_ISR
@@ -333,8 +326,6 @@ label
    jmp TIMER0_COMP_ISR
    jmp TIMER0_COMP_ISR
    jmp SPM_RDY_ISR
    jmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak TIMER2_COMP_ISR
    .weak TIMER2_COMP_ISR

+ 10 - 18
rtl/embedded/avr/atmega16hva.pp

@@ -1,7 +1,6 @@
 unit ATmega16HVA;
 unit ATmega16HVA;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins
   PINA: byte absolute $20;  // Port A Input Pins
@@ -310,10 +309,10 @@ const
   BPPL = $00;  
   BPPL = $00;  
   BPPLE = $01;  
   BPPLE = $01;  
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
@@ -335,15 +334,10 @@ procedure CCADC_CONV_ISR; external name 'CCADC_CONV_ISR'; // Interrupt 17 Coulom
 procedure CCADC_REG_CUR_ISR; external name 'CCADC_REG_CUR_ISR'; // Interrupt 18 Coloumb Counter ADC Regular Current
 procedure CCADC_REG_CUR_ISR; external name 'CCADC_REG_CUR_ISR'; // Interrupt 18 Coloumb Counter ADC Regular Current
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 19 Coloumb Counter ADC Accumulator
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 19 Coloumb Counter ADC Accumulator
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp BPINT_ISR
   jmp BPINT_ISR
   jmp VREGMON_ISR
   jmp VREGMON_ISR
   jmp INT0_ISR
   jmp INT0_ISR
@@ -364,8 +358,6 @@ asm
   jmp CCADC_REG_CUR_ISR
   jmp CCADC_REG_CUR_ISR
   jmp CCADC_ACC_ISR
   jmp CCADC_ACC_ISR
   jmp EE_READY_ISR
   jmp EE_READY_ISR
-
-  {$i start.inc}
 
 
   .weak BPINT_ISR
   .weak BPINT_ISR
   .weak VREGMON_ISR
   .weak VREGMON_ISR

+ 2 - 11
rtl/embedded/avr/atmega16hvb.pp

@@ -1,7 +1,5 @@
 unit ATmega16HVB;
 unit ATmega16HVB;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -382,14 +380,9 @@ procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp BPINT_ISR
    jmp BPINT_ISR
    jmp VREGMON_ISR
    jmp VREGMON_ISR
    jmp INT0_ISR
    jmp INT0_ISR
@@ -419,8 +412,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_ISR
    jmp SPM_ISR
 
 
-   {$i start.inc}
-
    .weak BPINT_ISR
    .weak BPINT_ISR
    .weak VREGMON_ISR
    .weak VREGMON_ISR
    .weak INT0_ISR
    .weak INT0_ISR

+ 10 - 18
rtl/embedded/avr/atmega16hvbrevb.pp

@@ -1,7 +1,6 @@
 unit ATmega16HVBrevB;
 unit ATmega16HVBrevB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins
   PINA: byte absolute $20;  // Port A Input Pins
@@ -671,10 +670,10 @@ const
   BPPL = $00;  
   BPPL = $00;  
   BPPLE = $01;  
   BPPLE = $01;  
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
@@ -704,15 +703,10 @@ procedure CCADC_REG_CUR_ISR; external name 'CCADC_REG_CUR_ISR'; // Interrupt 25
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb Counter ADC Accumulator
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb Counter ADC Accumulator
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp BPINT_ISR
   jmp BPINT_ISR
   jmp VREGMON_ISR
   jmp VREGMON_ISR
   jmp INT0_ISR
   jmp INT0_ISR
@@ -741,8 +735,6 @@ asm
   jmp CCADC_ACC_ISR
   jmp CCADC_ACC_ISR
   jmp EE_READY_ISR
   jmp EE_READY_ISR
   jmp SPM_ISR
   jmp SPM_ISR
-
-  {$i start.inc}
 
 
   .weak BPINT_ISR
   .weak BPINT_ISR
   .weak VREGMON_ISR
   .weak VREGMON_ISR

+ 2 - 11
rtl/embedded/avr/atmega16m1.pp

@@ -1,7 +1,5 @@
 unit ATmega16M1;
 unit ATmega16M1;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -634,14 +632,9 @@ procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 28 Watchdog Time-Out In
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp ANACOMP0_ISR
    jmp ANACOMP0_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP2_ISR
    jmp ANACOMP2_ISR
@@ -673,8 +666,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak ANACOMP0_ISR
    .weak ANACOMP0_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP2_ISR
    .weak ANACOMP2_ISR

+ 2 - 11
rtl/embedded/avr/atmega16u2.pp

@@ -1,7 +1,5 @@
 unit ATmega16U2;
 unit ATmega16U2;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -449,14 +447,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 26 Anal
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -486,8 +479,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega16u4.pp

@@ -1,7 +1,5 @@
 unit ATmega16U4;
 unit ATmega16U4;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -620,14 +618,9 @@ procedure TIMER4_COMPD_ISR; external name 'TIMER4_COMPD_ISR'; // Interrupt 40 Ti
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 41 Timer/Counter4 Overflow
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 41 Timer/Counter4 Overflow
 procedure TIMER4_FPF_ISR; external name 'TIMER4_FPF_ISR'; // Interrupt 42 Timer/Counter4 Fault Protection Interrupt
 procedure TIMER4_FPF_ISR; external name 'TIMER4_FPF_ISR'; // Interrupt 42 Timer/Counter4 Fault Protection Interrupt
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -671,8 +664,6 @@ label
    jmp TIMER4_OVF_ISR
    jmp TIMER4_OVF_ISR
    jmp TIMER4_FPF_ISR
    jmp TIMER4_FPF_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega2560.pp

@@ -1,7 +1,5 @@
 unit ATmega2560;
 unit ATmega2560;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -727,14 +725,9 @@ procedure USART3__RX_ISR; external name 'USART3__RX_ISR'; // Interrupt 54 USART3
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -792,8 +785,6 @@ label
    jmp USART3__UDRE_ISR
    jmp USART3__UDRE_ISR
    jmp USART3__TX_ISR
    jmp USART3__TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega2561.pp

@@ -1,7 +1,5 @@
 unit ATmega2561;
 unit ATmega2561;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -647,14 +645,9 @@ procedure USART3__RX_ISR; external name 'USART3__RX_ISR'; // Interrupt 54 USART3
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -712,8 +705,6 @@ label
    jmp USART3__UDRE_ISR
    jmp USART3__UDRE_ISR
    jmp USART3__TX_ISR
    jmp USART3__TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 10 - 18
rtl/embedded/avr/atmega2564rfr2.pp

@@ -1,7 +1,6 @@
 unit ATmega2564RFR2;
 unit ATmega2564RFR2;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins Address
   PINA: byte absolute $20;  // Port A Input Pins Address
@@ -1792,10 +1791,10 @@ const
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -1867,15 +1866,10 @@ procedure TRX24_AMI0_ISR; external name 'TRX24_AMI0_ISR'; // Interrupt 73 Addres
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp INT2_ISR
   jmp INT2_ISR
@@ -1946,8 +1940,6 @@ asm
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI3_ISR
   jmp TRX24_AMI3_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 10 - 18
rtl/embedded/avr/atmega256rfr2.pp

@@ -1,7 +1,6 @@
 unit ATmega256RFR2;
 unit ATmega256RFR2;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins Address
   PINA: byte absolute $20;  // Port A Input Pins Address
@@ -1800,10 +1799,10 @@ const
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH6 = $06;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
   RX_LENGTH7 = $07;  // Received Frame Length
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -1875,15 +1874,10 @@ procedure TRX24_AMI0_ISR; external name 'TRX24_AMI0_ISR'; // Interrupt 73 Addres
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI1_ISR; external name 'TRX24_AMI1_ISR'; // Interrupt 74 Address match interrupt of address filter 1
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI2_ISR; external name 'TRX24_AMI2_ISR'; // Interrupt 75 Address match interrupt of address filter 2
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
 procedure TRX24_AMI3_ISR; external name 'TRX24_AMI3_ISR'; // Interrupt 76 Address match interrupt of address filter 3
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp INT2_ISR
   jmp INT2_ISR
@@ -1954,8 +1948,6 @@ asm
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI1_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI2_ISR
   jmp TRX24_AMI3_ISR
   jmp TRX24_AMI3_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega32.pp

@@ -1,7 +1,5 @@
 unit ATmega32;
 unit ATmega32;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -291,14 +289,9 @@ procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 18 Analog Com
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 19 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 19 2-wire Serial Interface
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -320,8 +313,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_RDY_ISR
    jmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 3 - 11
rtl/embedded/avr/atmega3208.pp

@@ -1,6 +1,5 @@
 unit ATmega3208;
 unit ATmega3208;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2047,14 +2046,9 @@ procedure USART2_TXC_ISR; external name 'USART2_TXC_ISR'; // Interrupt 33
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2095,8 +2089,6 @@ asm
   jmp PORTB_PORT_ISR
   jmp PORTB_PORT_ISR
   jmp PORTE_PORT_ISR
   jmp PORTE_PORT_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 3 - 11
rtl/embedded/avr/atmega3209.pp

@@ -1,6 +1,5 @@
 unit ATmega3209;
 unit ATmega3209;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2055,14 +2054,9 @@ procedure USART3_RXC_ISR; external name 'USART3_RXC_ISR'; // Interrupt 37
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2107,8 +2101,6 @@ asm
   jmp USART3_DRE_ISR
   jmp USART3_DRE_ISR
   jmp USART3_TXC_ISR
   jmp USART3_TXC_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 2 - 11
rtl/embedded/avr/atmega324a.pp

@@ -1,7 +1,5 @@
 unit ATmega324A;
 unit ATmega324A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -436,14 +434,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -475,8 +468,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega324p.pp

@@ -1,7 +1,5 @@
 unit ATmega324P;
 unit ATmega324P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -438,14 +436,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -477,8 +470,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega324pa.pp

@@ -1,7 +1,5 @@
 unit ATmega324PA;
 unit ATmega324PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -437,14 +435,9 @@ procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 R
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1 Data Register Empty
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 TX complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -476,8 +469,6 @@ label
    jmp USART1_UDRE_ISR
    jmp USART1_UDRE_ISR
    jmp USART1_TX_ISR
    jmp USART1_TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 10 - 18
rtl/embedded/avr/atmega324pb.pp

@@ -1,7 +1,6 @@
 unit ATmega324PB;
 unit ATmega324PB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins
   PINA: byte absolute $20;  // Port A Input Pins
@@ -606,10 +605,10 @@ const
   TWAM15 = $06;
   TWAM15 = $06;
   TWAM16 = $07;
   TWAM16 = $07;
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -664,15 +663,10 @@ procedure USART2_UDRE_ISR; external name 'USART2_UDRE_ISR'; // Interrupt 48 USAR
 procedure USART2_TX_ISR; external name 'USART2_TX_ISR'; // Interrupt 49 USART2 Tx Complete
 procedure USART2_TX_ISR; external name 'USART2_TX_ISR'; // Interrupt 49 USART2 Tx Complete
 procedure USART2_RXS_ISR; external name 'USART2_RXS_ISR'; // Interrupt 50 USART2 RX start edge detect
 procedure USART2_RXS_ISR; external name 'USART2_RXS_ISR'; // Interrupt 50 USART2 RX start edge detect
 procedure USART2_START_ISR; external name 'USART2_START_ISR'; // Interrupt 50 USART2 RX start edge detect
 procedure USART2_START_ISR; external name 'USART2_START_ISR'; // Interrupt 50 USART2 RX start edge detect
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
   jmp INT2_ISR
   jmp INT2_ISR
@@ -726,8 +720,6 @@ asm
   jmp USART2_TX_ISR
   jmp USART2_TX_ISR
   jmp USART2_RXS_ISR
   jmp USART2_RXS_ISR
   jmp USART2_START_ISR
   jmp USART2_START_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega325.pp

@@ -1,7 +1,5 @@
 unit ATmega325;
 unit ATmega325;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -352,14 +350,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -382,8 +375,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3250.pp

@@ -1,7 +1,5 @@
 unit ATmega3250;
 unit ATmega3250;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -366,14 +364,9 @@ procedure NOT_USED_ISR; external name 'NOT_USED_ISR'; // Interrupt 22 RESERVED
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -399,8 +392,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3250a.pp

@@ -1,7 +1,5 @@
 unit ATmega3250A;
 unit ATmega3250A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure NOT_USED_ISR; external name 'NOT_USED_ISR'; // Interrupt 22 RESERVED
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -401,8 +394,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3250p.pp

@@ -1,7 +1,5 @@
 unit ATmega3250P;
 unit ATmega3250P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure NOT_USED_ISR; external name 'NOT_USED_ISR'; // Interrupt 22 RESERVED
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -401,8 +394,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3250pa.pp

@@ -1,7 +1,5 @@
 unit ATmega3250PA;
 unit ATmega3250PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure NOT_USED_ISR; external name 'NOT_USED_ISR'; // Interrupt 22 RESERVED
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -401,8 +394,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega325a.pp

@@ -1,7 +1,5 @@
 unit ATmega325A;
 unit ATmega325A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -353,14 +351,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -383,8 +376,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega325p.pp

@@ -1,7 +1,5 @@
 unit ATmega325P;
 unit ATmega325P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -355,14 +353,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -385,8 +378,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega325pa.pp

@@ -1,7 +1,5 @@
 unit ATmega325PA;
 unit ATmega325PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -355,14 +353,9 @@ procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 19 ADC Conversion Compl
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -385,8 +378,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega328.pp

@@ -1,7 +1,5 @@
 unit ATmega328;
 unit ATmega328;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -402,8 +395,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega328p.pp

@@ -1,7 +1,5 @@
 unit ATmega328P;
 unit ATmega328P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -370,14 +368,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
@@ -404,8 +397,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_Ready_ISR
    jmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 10 - 19
rtl/embedded/avr/atmega328pb.pp

@@ -1,7 +1,6 @@
 unit ATmega328PB;
 unit ATmega328PB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINB: byte absolute $23;  // Port B Input Pins
   PINB: byte absolute $23;  // Port B Input Pins
@@ -627,10 +626,10 @@ const
   TWAM15 = $06;
   TWAM15 = $06;
   TWAM16 = $07;
   TWAM16 = $07;
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -676,16 +675,10 @@ procedure TIMER4_CAPT_ISR; external name 'TIMER4_CAPT_ISR'; // Interrupt 41 Time
 procedure TIMER4_COMPA_ISR; external name 'TIMER4_COMPA_ISR'; // Interrupt 42 Timer/Counter4 Compare Match A
 procedure TIMER4_COMPA_ISR; external name 'TIMER4_COMPA_ISR'; // Interrupt 42 Timer/Counter4 Compare Match A
 procedure TIMER4_COMPB_ISR; external name 'TIMER4_COMPB_ISR'; // Interrupt 43 Timer/Counter4 Compare Match B
 procedure TIMER4_COMPB_ISR; external name 'TIMER4_COMPB_ISR'; // Interrupt 43 Timer/Counter4 Compare Match B
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 44 Timer/Counter4 Overflow
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 44 Timer/Counter4 Overflow
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
-  jmp INT0_ISR
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp INT1_ISR
   jmp INT1_ISR
   jmp PCINT0_ISR
   jmp PCINT0_ISR
   jmp PCINT1_ISR
   jmp PCINT1_ISR
@@ -729,8 +722,6 @@ asm
   jmp TIMER4_COMPA_ISR
   jmp TIMER4_COMPA_ISR
   jmp TIMER4_COMPB_ISR
   jmp TIMER4_COMPB_ISR
   jmp TIMER4_OVF_ISR
   jmp TIMER4_OVF_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega329.pp

@@ -1,7 +1,5 @@
 unit ATmega329;
 unit ATmega329;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -389,14 +387,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -420,8 +413,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3290.pp

@@ -1,7 +1,5 @@
 unit ATmega3290;
 unit ATmega3290;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -405,14 +403,9 @@ procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -438,8 +431,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3290a.pp

@@ -1,7 +1,5 @@
 unit ATmega3290A;
 unit ATmega3290A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -413,14 +411,9 @@ procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -446,8 +439,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3290p.pp

@@ -1,7 +1,5 @@
 unit ATmega3290P;
 unit ATmega3290P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -413,14 +411,9 @@ procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -446,8 +439,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega3290pa.pp

@@ -1,7 +1,5 @@
 unit ATmega3290PA;
 unit ATmega3290PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -413,14 +411,9 @@ procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 23 Pin Change Interrupt Request 2
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 24 Pin Change Interrupt Request 3
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -446,8 +439,6 @@ label
    jmp PCINT2_ISR
    jmp PCINT2_ISR
    jmp PCINT3_ISR
    jmp PCINT3_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega329a.pp

@@ -1,7 +1,5 @@
 unit ATmega329A;
 unit ATmega329A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -556,14 +554,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -587,8 +580,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega329p.pp

@@ -1,7 +1,5 @@
 unit ATmega329P;
 unit ATmega329P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -558,14 +556,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -589,8 +582,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega329pa.pp

@@ -1,7 +1,5 @@
 unit ATmega329PA;
 unit ATmega329PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -558,14 +556,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 20 EEPROM Rea
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 21 Store Program Memory Read
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 procedure LCD_ISR; external name 'LCD_ISR'; // Interrupt 22 LCD Start of Frame
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp PCINT0_ISR
    jmp PCINT0_ISR
    jmp PCINT1_ISR
    jmp PCINT1_ISR
@@ -589,8 +582,6 @@ label
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
    jmp LCD_ISR
    jmp LCD_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR
    .weak PCINT1_ISR
    .weak PCINT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega32a.pp

@@ -1,7 +1,5 @@
 unit ATmega32A;
 unit ATmega32A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -291,14 +289,9 @@ procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 18 Analog Com
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 19 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 19 2-wire Serial Interface
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 procedure SPM_RDY_ISR; external name 'SPM_RDY_ISR'; // Interrupt 20 Store Program Memory Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -320,8 +313,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_RDY_ISR
    jmp SPM_RDY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega32c1.pp

@@ -1,7 +1,5 @@
 unit ATmega32C1;
 unit ATmega32C1;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -546,14 +544,9 @@ procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 28 Watchdog Time-Out In
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp ANACOMP0_ISR
    jmp ANACOMP0_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP2_ISR
    jmp ANACOMP2_ISR
@@ -585,8 +578,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak ANACOMP0_ISR
    .weak ANACOMP0_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP2_ISR
    .weak ANACOMP2_ISR

+ 2 - 11
rtl/embedded/avr/atmega32hvb.pp

@@ -1,7 +1,5 @@
 unit ATmega32HVB;
 unit ATmega32HVB;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -382,14 +380,9 @@ procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp BPINT_ISR
    jmp BPINT_ISR
    jmp VREGMON_ISR
    jmp VREGMON_ISR
    jmp INT0_ISR
    jmp INT0_ISR
@@ -419,8 +412,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_ISR
    jmp SPM_ISR
 
 
-   {$i start.inc}
-
    .weak BPINT_ISR
    .weak BPINT_ISR
    .weak VREGMON_ISR
    .weak VREGMON_ISR
    .weak INT0_ISR
    .weak INT0_ISR

+ 10 - 18
rtl/embedded/avr/atmega32hvbrevb.pp

@@ -1,7 +1,6 @@
 unit ATmega32HVBrevB;
 unit ATmega32HVBrevB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins
   PINA: byte absolute $20;  // Port A Input Pins
@@ -403,10 +402,10 @@ const
   BPPL = $00;  
   BPPL = $00;  
   BPPLE = $01;  
   BPPLE = $01;  
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
 procedure VREGMON_ISR; external name 'VREGMON_ISR'; // Interrupt 2 Voltage regulator monitor interrupt
@@ -436,15 +435,10 @@ procedure CCADC_REG_CUR_ISR; external name 'CCADC_REG_CUR_ISR'; // Interrupt 25
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb Counter ADC Accumulator
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 26 Coloumb Counter ADC Accumulator
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
 procedure SPM_ISR; external name 'SPM_ISR'; // Interrupt 28 SPM Ready
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp BPINT_ISR
   jmp BPINT_ISR
   jmp VREGMON_ISR
   jmp VREGMON_ISR
   jmp INT0_ISR
   jmp INT0_ISR
@@ -473,8 +467,6 @@ asm
   jmp CCADC_ACC_ISR
   jmp CCADC_ACC_ISR
   jmp EE_READY_ISR
   jmp EE_READY_ISR
   jmp SPM_ISR
   jmp SPM_ISR
-
-  {$i start.inc}
 
 
   .weak BPINT_ISR
   .weak BPINT_ISR
   .weak VREGMON_ISR
   .weak VREGMON_ISR

+ 2 - 11
rtl/embedded/avr/atmega32m1.pp

@@ -1,7 +1,5 @@
 unit ATmega32M1;
 unit ATmega32M1;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -634,14 +632,9 @@ procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 28 Watchdog Time-Out In
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp ANACOMP0_ISR
    jmp ANACOMP0_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP1_ISR
    jmp ANACOMP2_ISR
    jmp ANACOMP2_ISR
@@ -673,8 +666,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak ANACOMP0_ISR
    .weak ANACOMP0_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP1_ISR
    .weak ANACOMP2_ISR
    .weak ANACOMP2_ISR

+ 2 - 11
rtl/embedded/avr/atmega32u2.pp

@@ -1,7 +1,5 @@
 unit ATmega32U2;
 unit ATmega32U2;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -449,14 +447,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 26 Anal
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 27 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 28 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -486,8 +479,6 @@ label
    jmp EE_READY_ISR
    jmp EE_READY_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega32u4.pp

@@ -1,7 +1,5 @@
 unit ATmega32U4;
 unit ATmega32U4;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -643,14 +641,9 @@ procedure TIMER4_COMPD_ISR; external name 'TIMER4_COMPD_ISR'; // Interrupt 40 Ti
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 41 Timer/Counter4 Overflow
 procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 41 Timer/Counter4 Overflow
 procedure TIMER4_FPF_ISR; external name 'TIMER4_FPF_ISR'; // Interrupt 42 Timer/Counter4 Fault Protection Interrupt
 procedure TIMER4_FPF_ISR; external name 'TIMER4_FPF_ISR'; // Interrupt 42 Timer/Counter4 Fault Protection Interrupt
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -694,8 +687,6 @@ label
    jmp TIMER4_OVF_ISR
    jmp TIMER4_OVF_ISR
    jmp TIMER4_FPF_ISR
    jmp TIMER4_FPF_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 10 - 18
rtl/embedded/avr/atmega406.pp

@@ -1,7 +1,6 @@
 unit ATmega406;
 unit ATmega406;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINA: byte absolute $20;  // Port A Input Pins
   PINA: byte absolute $20;  // Port A Input Pins
@@ -395,10 +394,10 @@ const
   BPPL = $00;  
   BPPL = $00;  
   BPPLE = $01;  
   BPPLE = $01;  
 
 
-
-implementation
-
-{$i avrcommon.inc}
+
+implementation
+
+{$i avrcommon.inc}
 
 
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure BPINT_ISR; external name 'BPINT_ISR'; // Interrupt 1 Battery Protection Interrupt
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 2 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 2 External Interrupt Request 0
@@ -422,15 +421,10 @@ procedure CCADC_REG_CUR_ISR; external name 'CCADC_REG_CUR_ISR'; // Interrupt 19
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 20 Coloumb Counter ADC Accumulator
 procedure CCADC_ACC_ISR; external name 'CCADC_ACC_ISR'; // Interrupt 20 Coloumb Counter ADC Accumulator
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 21 EEPROM Ready
 procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 21 EEPROM Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 22 Store Program Memory Ready
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 22 Store Program Memory Ready
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp BPINT_ISR
   jmp BPINT_ISR
   jmp INT0_ISR
   jmp INT0_ISR
   jmp INT1_ISR
   jmp INT1_ISR
@@ -453,8 +447,6 @@ asm
   jmp CCADC_ACC_ISR
   jmp CCADC_ACC_ISR
   jmp EE_READY_ISR
   jmp EE_READY_ISR
   jmp SPM_READY_ISR
   jmp SPM_READY_ISR
-
-  {$i start.inc}
 
 
   .weak BPINT_ISR
   .weak BPINT_ISR
   .weak INT0_ISR
   .weak INT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega48.pp

@@ -1,7 +1,5 @@
 unit ATmega48;
 unit ATmega48;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -366,14 +364,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -400,8 +393,6 @@ label
    rjmp TWI_ISR
    rjmp TWI_ISR
    rjmp SPM_Ready_ISR
    rjmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 3 - 11
rtl/embedded/avr/atmega4808.pp

@@ -1,6 +1,5 @@
 unit ATmega4808;
 unit ATmega4808;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2047,14 +2046,9 @@ procedure USART2_TXC_ISR; external name 'USART2_TXC_ISR'; // Interrupt 33
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTB_PORT_ISR; external name 'PORTB_PORT_ISR'; // Interrupt 34 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 procedure PORTE_PORT_ISR; external name 'PORTE_PORT_ISR'; // Interrupt 35 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2095,8 +2089,6 @@ asm
   jmp PORTB_PORT_ISR
   jmp PORTB_PORT_ISR
   jmp PORTE_PORT_ISR
   jmp PORTE_PORT_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 3 - 11
rtl/embedded/avr/atmega4809.pp

@@ -1,6 +1,5 @@
 unit ATmega4809;
 unit ATmega4809;
 
 
-{$goto on}
 interface
 interface
 
 
 type
 type
@@ -2055,14 +2054,9 @@ procedure USART3_RXC_ISR; external name 'USART3_RXC_ISR'; // Interrupt 37
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_DRE_ISR; external name 'USART3_DRE_ISR'; // Interrupt 38 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 procedure USART3_TXC_ISR; external name 'USART3_TXC_ISR'; // Interrupt 39 
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  jmp _start
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  jmp __dtors_end
   jmp CRCSCAN_NMI_ISR
   jmp CRCSCAN_NMI_ISR
   jmp BOD_VLM_ISR
   jmp BOD_VLM_ISR
   jmp RTC_CNT_ISR
   jmp RTC_CNT_ISR
@@ -2107,8 +2101,6 @@ asm
   jmp USART3_DRE_ISR
   jmp USART3_DRE_ISR
   jmp USART3_TXC_ISR
   jmp USART3_TXC_ISR
 
 
-  {$i start.inc}
-
   .weak CRCSCAN_NMI_ISR
   .weak CRCSCAN_NMI_ISR
   .weak BOD_VLM_ISR
   .weak BOD_VLM_ISR
   .weak RTC_CNT_ISR
   .weak RTC_CNT_ISR

+ 2 - 11
rtl/embedded/avr/atmega48a.pp

@@ -1,7 +1,5 @@
 unit ATmega48A;
 unit ATmega48A;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -366,14 +364,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -400,8 +393,6 @@ label
    rjmp TWI_ISR
    rjmp TWI_ISR
    rjmp SPM_Ready_ISR
    rjmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega48p.pp

@@ -1,7 +1,5 @@
 unit ATmega48P;
 unit ATmega48P;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -402,8 +395,6 @@ label
    rjmp TWI_ISR
    rjmp TWI_ISR
    rjmp SPM_Ready_ISR
    rjmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 2 - 11
rtl/embedded/avr/atmega48pa.pp

@@ -1,7 +1,5 @@
 unit ATmega48PA;
 unit ATmega48PA;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -368,14 +366,9 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   rjmp _start
+   rjmp __dtors_end
    rjmp INT0_ISR
    rjmp INT0_ISR
    rjmp INT1_ISR
    rjmp INT1_ISR
    rjmp PCINT0_ISR
    rjmp PCINT0_ISR
@@ -402,8 +395,6 @@ label
    rjmp TWI_ISR
    rjmp TWI_ISR
    rjmp SPM_Ready_ISR
    rjmp SPM_Ready_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak PCINT0_ISR
    .weak PCINT0_ISR

+ 10 - 18
rtl/embedded/avr/atmega48pb.pp

@@ -1,7 +1,6 @@
 unit ATmega48PB;
 unit ATmega48PB;
-
-{$goto on}
-interface
+
+interface
 
 
 var
 var
   PINB: byte absolute $23;  // Port B Input Pins
   PINB: byte absolute $23;  // Port B Input Pins
@@ -445,10 +444,10 @@ const
   RXS = $06;  
   RXS = $06;  
   RXSIE = $07;  
   RXSIE = $07;  
 
 
-
-implementation
-{$define RELBRANCHES}
-{$i avrcommon.inc}
+
+implementation
+{$define RELBRANCHES}
+{$i avrcommon.inc}
 
 
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
@@ -476,15 +475,10 @@ procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Anal
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 procedure USART_START_ISR; external name 'USART_START_ISR'; // Interrupt 26 USART Start Edge Interrupt
 procedure USART_START_ISR; external name 'USART_START_ISR'; // Interrupt 26 USART Start Edge Interrupt
-
-procedure _FPC_start; assembler; nostackframe;
-label
-  _start;
-asm
-  .init
-  .globl _start
-
-  rjmp _start
+
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
+ asm
+  rjmp __dtors_end
   rjmp INT0_ISR
   rjmp INT0_ISR
   rjmp INT1_ISR
   rjmp INT1_ISR
   rjmp PCINT0_ISR
   rjmp PCINT0_ISR
@@ -511,8 +505,6 @@ asm
   rjmp TWI_ISR
   rjmp TWI_ISR
   rjmp SPM_Ready_ISR
   rjmp SPM_Ready_ISR
   rjmp USART_START_ISR
   rjmp USART_START_ISR
-
-  {$i start.inc}
 
 
   .weak INT0_ISR
   .weak INT0_ISR
   .weak INT1_ISR
   .weak INT1_ISR

+ 2 - 11
rtl/embedded/avr/atmega64.pp

@@ -1,7 +1,5 @@
 unit ATmega64;
 unit ATmega64;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -441,14 +439,9 @@ procedure USART1__TX_ISR; external name 'USART1__TX_ISR'; // Interrupt 32 USART1
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 33 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 34 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -484,8 +477,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega640.pp

@@ -1,7 +1,5 @@
 unit ATmega640;
 unit ATmega640;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -726,14 +724,9 @@ procedure USART3__RX_ISR; external name 'USART3__RX_ISR'; // Interrupt 54 USART3
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__UDRE_ISR; external name 'USART3__UDRE_ISR'; // Interrupt 55 USART3 Data register Empty
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 procedure USART3__TX_ISR; external name 'USART3__TX_ISR'; // Interrupt 56 USART3, Tx Complete
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -791,8 +784,6 @@ label
    jmp USART3__UDRE_ISR
    jmp USART3__UDRE_ISR
    jmp USART3__TX_ISR
    jmp USART3__TX_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

+ 2 - 11
rtl/embedded/avr/atmega644.pp

@@ -1,7 +1,5 @@
 unit ATmega644;
 unit ATmega644;
 
 
-{$goto on}
-
 interface
 interface
 
 
 var
 var
@@ -399,14 +397,9 @@ procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 25 EEPROM Rea
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 26 2-wire Serial Interface
 procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 26 2-wire Serial Interface
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 27 Store Program Memory Read
 procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 27 Store Program Memory Read
 
 
-procedure _FPC_start; assembler; nostackframe;
-label
-   _start;
+procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  asm
  asm
-   .init
-   .globl _start
-
-   jmp _start
+   jmp __dtors_end
    jmp INT0_ISR
    jmp INT0_ISR
    jmp INT1_ISR
    jmp INT1_ISR
    jmp INT2_ISR
    jmp INT2_ISR
@@ -435,8 +428,6 @@ label
    jmp TWI_ISR
    jmp TWI_ISR
    jmp SPM_READY_ISR
    jmp SPM_READY_ISR
 
 
-   {$i start.inc}
-
    .weak INT0_ISR
    .weak INT0_ISR
    .weak INT1_ISR
    .weak INT1_ISR
    .weak INT2_ISR
    .weak INT2_ISR

Some files were not shown because too many files changed in this diff