atmega128.pp 2.2 KB

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