atmega128.pp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. {******************************************************************************
  2. Register definitions and startup code for ATMEL ATmega128
  3. ******************************************************************************}
  4. unit atmega128;
  5. {$goto on}
  6. interface
  7. implementation
  8. procedure PASCALMAIN; external name 'PASCALMAIN';
  9. procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
  10. asm
  11. cli
  12. .Lhalt:
  13. xjmp .Lhalt
  14. end;
  15. var
  16. _data: record end; external name '_data';
  17. _edata: record end; external name '_edata';
  18. _etext: record end; external name '_etext';
  19. _bss_start: record end; external name '_bss_start';
  20. _bss_end: record end; external name '_bss_end';
  21. _stack_top: record end; external name '_stack_top';
  22. procedure _FPC_start; assembler; nostackframe;
  23. label
  24. _start;
  25. asm
  26. // code derived from phillips appnote 10254
  27. .init
  28. .align 16
  29. .globl _start
  30. b _start
  31. b .LUndefined_Addr // Undefined Instruction vector
  32. b .LSWI_Addr // Software Interrupt vector
  33. b .LPrefetch_Addr // Prefetch abort vector
  34. b .LAbort_Addr // Data abort vector
  35. nop // reserved
  36. b .LIRQ_Addr // Interrupt Request (IRQ) vector
  37. b .LFIQ_Addr // Fast interrupt request (FIQ) vector
  38. .LUndefined_Addr:
  39. ldr r0,.L1
  40. ldr pc,[r0]
  41. .LSWI_Addr:
  42. ldr r0,.L2
  43. ldr pc,[r0]
  44. .LPrefetch_Addr:
  45. ldr r0,.L3
  46. ldr pc,[r0]
  47. .LAbort_Addr:
  48. ldr r0,.L4
  49. ldr pc,[r0]
  50. .LIRQ_Addr:
  51. ldr r0,.L5
  52. ldr pc,[r0]
  53. .LFIQ_Addr:
  54. ldr r0,.L5
  55. ldr pc,[r0]
  56. .L1:
  57. .long Undefined_Handler
  58. .L2:
  59. .long SWI_Handler
  60. .L3:
  61. .long Prefetch_Handler
  62. .L4:
  63. .long Abort_Handler
  64. .L5:
  65. .long IRQ_Handler
  66. .L6:
  67. .long FIQ_Handler
  68. {
  69. all ATMEL MCUs use the same startup code, the details are
  70. governed by defines
  71. }
  72. {$i start.inc}
  73. end;
  74. end.