atmega8.pp 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. {******************************************************************************
  2. Register definitions and startup code for ATMEL ATmega128
  3. ******************************************************************************}
  4. unit atmega8;
  5. {$goto on}
  6. interface
  7. const
  8. _SFR_OFFSET = $20; //indirect addressing
  9. var
  10. TWBR : byte absolute $00+_SFR_OFFSET;
  11. TWSR : byte absolute $01+_SFR_OFFSET;
  12. TWAR : byte absolute $02+_SFR_OFFSET;
  13. TWDR : byte absolute $03+_SFR_OFFSET;
  14. ADCW : word absolute $04+_SFR_OFFSET;
  15. ADC : word absolute $04+_SFR_OFFSET;
  16. ADCL : byte absolute $04+_SFR_OFFSET;
  17. ADCH : byte absolute $05+_SFR_OFFSET;
  18. ADCSRA : byte absolute $06+_SFR_OFFSET;
  19. ADMUX : byte absolute $07+_SFR_OFFSET;
  20. ACSR : byte absolute $08+_SFR_OFFSET;
  21. UBRRL : byte absolute $09+_SFR_OFFSET;
  22. UCSRB : byte absolute $0A+_SFR_OFFSET;
  23. UCSRA : byte absolute $0B+_SFR_OFFSET;
  24. UDR : byte absolute $0C+_SFR_OFFSET;
  25. SPCR : byte absolute $0D+_SFR_OFFSET;
  26. SPSR : byte absolute $0E+_SFR_OFFSET;
  27. SPDR : byte absolute $0F+_SFR_OFFSET;
  28. PIND : byte absolute $10+_SFR_OFFSET;
  29. DDRD : byte absolute $11+_SFR_OFFSET;
  30. PORTD : byte absolute $12+_SFR_OFFSET;
  31. PINC : byte absolute $13+_SFR_OFFSET;
  32. DDRC : byte absolute $14+_SFR_OFFSET;
  33. PORTC : byte absolute $15+_SFR_OFFSET;
  34. PINB : byte absolute $16+_SFR_OFFSET;
  35. DDRB : byte absolute $17+_SFR_OFFSET;
  36. PORTB : byte absolute $18+_SFR_OFFSET;
  37. EECR : byte absolute $1C+_SFR_OFFSET;
  38. EEDR : byte absolute $1D+_SFR_OFFSET;
  39. EEAR : word absolute $1E+_SFR_OFFSET;
  40. EEARL : byte absolute $1E+_SFR_OFFSET;
  41. EEARH : byte absolute $1F+_SFR_OFFSET;
  42. UCSRC : byte absolute $20+_SFR_OFFSET;
  43. UBRRH : byte absolute $20+_SFR_OFFSET;
  44. WDTCR : byte absolute $21+_SFR_OFFSET;
  45. ASSR : byte absolute $22+_SFR_OFFSET;
  46. OCR2 : byte absolute $23+_SFR_OFFSET;
  47. TCNT2 : byte absolute $24+_SFR_OFFSET;
  48. TCCR2 : byte absolute $25+_SFR_OFFSET;
  49. ICR1 : word absolute $26+_SFR_OFFSET;
  50. ICR1L : byte absolute $26+_SFR_OFFSET;
  51. ICR1H : byte absolute $27+_SFR_OFFSET;
  52. OCR1B : word absolute $28+_SFR_OFFSET;
  53. OCR1BL : byte absolute $28+_SFR_OFFSET;
  54. OCR1BH : byte absolute $29+_SFR_OFFSET;
  55. OCR1A : word absolute $2A+_SFR_OFFSET;
  56. OCR1AL : byte absolute $2A+_SFR_OFFSET;
  57. OCR1AH : byte absolute $2B+_SFR_OFFSET;
  58. TCNT1 : word absolute $2C+_SFR_OFFSET;
  59. TCNT1L : byte absolute $2C+_SFR_OFFSET;
  60. TCNT1H : byte absolute $2D+_SFR_OFFSET;
  61. TCCR1B : byte absolute $2E+_SFR_OFFSET;
  62. TCCR1A : byte absolute $2F+_SFR_OFFSET;
  63. SFIOR : byte absolute $30+_SFR_OFFSET;
  64. OSCCAL : byte absolute $31+_SFR_OFFSET;
  65. TCNT0 : byte absolute $32+_SFR_OFFSET;
  66. TCCR0 : byte absolute $33+_SFR_OFFSET;
  67. MCUSR : byte absolute $34+_SFR_OFFSET;
  68. MCUCSR : byte absolute $34+_SFR_OFFSET;
  69. MCUCR : byte absolute $35+_SFR_OFFSET;
  70. TWCR : byte absolute $36+_SFR_OFFSET;
  71. SPMCR : byte absolute $37+_SFR_OFFSET;
  72. TIFR : byte absolute $38+_SFR_OFFSET;
  73. TIMSK : byte absolute $39+_SFR_OFFSET;
  74. GIFR : byte absolute $3A+_SFR_OFFSET;
  75. GICR : byte absolute $3B+_SFR_OFFSET;
  76. SP : word absolute $3D+_SFR_OFFSET;
  77. SPL : byte absolute $3D+_SFR_OFFSET;
  78. SPH : byte absolute $3E+_SFR_OFFSET;
  79. SREG : byte absolute $3F+_SFR_OFFSET;
  80. const
  81. TWINT = 7;
  82. TWEA = 6;
  83. TWSTA = 5;
  84. TWSTO = 4;
  85. TWWC = 3;
  86. TWEN = 2;
  87. TWIE = 0;
  88. TWA6 = 7;
  89. TWA5 = 6;
  90. TWA4 = 5;
  91. TWA3 = 4;
  92. TWA2 = 3;
  93. TWA1 = 2;
  94. TWA0 = 1;
  95. TWGCE = 0;
  96. TWS7 = 7;
  97. TWS6 = 6;
  98. TWS5 = 5;
  99. TWS4 = 4;
  100. TWS3 = 3;
  101. TWPS1 = 1;
  102. TWPS0 = 0;
  103. XDIVEN = 7;
  104. XDIV6 = 6;
  105. XDIV5 = 5;
  106. XDIV4 = 4;
  107. XDIV3 = 3;
  108. XDIV2 = 2;
  109. XDIV1 = 1;
  110. XDIV0 = 0;
  111. ISC11 = 3;
  112. ISC10 = 2;
  113. ISC01 = 1;
  114. ISC00 = 0;
  115. INT1 = 7;
  116. INT0 = 6;
  117. INTF1 = 7;
  118. INTF0 = 6;
  119. OCIE2 = 7;
  120. TOIE2 = 6;
  121. TICIE1 = 5;
  122. OCIE1A = 4;
  123. OCIE1B = 3;
  124. TOIE1 = 2;
  125. TOIE0 = 0;
  126. OCF2 = 7;
  127. TOV2 = 6;
  128. ICF1 = 5;
  129. OCF1A = 4;
  130. OCF1B = 3;
  131. TOV1 = 2;
  132. TOV0 = 0;
  133. SPMIE = 7;
  134. RWWSB = 6;
  135. RWWSRE = 4;
  136. BLBSET = 3;
  137. PGWRT = 2;
  138. PGERS = 1;
  139. SPMEN = 0;
  140. COM1A1 = 7;
  141. COM1A0 = 6;
  142. COM1B1 = 5;
  143. COM1B0 = 4;
  144. COM1C1 = 3;
  145. COM1C0 = 2;
  146. WGM11 = 1;
  147. WGM10 = 0;
  148. ICNC = 7;
  149. ICES = 6;
  150. WGMB3 = 4;
  151. WGMB2 = 3;
  152. CSB2 = 2;
  153. CSB1 = 1;
  154. CSB0 = 0;
  155. ICNC1 = 7;
  156. ICES1 = 6;
  157. WGM13 = 4;
  158. WGM12 = 3;
  159. CS12 = 2;
  160. CS11 = 1;
  161. CS10 = 0;
  162. FOC2 = 7;
  163. WGM20 = 6;
  164. COM21 = 5;
  165. COM20 = 4;
  166. WGM21 = 3;
  167. CS22 = 2;
  168. CS21 = 1;
  169. CS20 = 0;
  170. SPIF = 7;
  171. WCOL = 6;
  172. SPI2X = 0;
  173. SPIE = 7;
  174. SPE = 6;
  175. DORD = 5;
  176. MSTR = 4;
  177. CPOL = 3;
  178. CPHA = 2;
  179. SPR1 = 1;
  180. SPR0 = 0;
  181. URSEL = 7;
  182. UMSEL = 6;
  183. UPM1 = 5;
  184. UPM0 = 4;
  185. USBS = 3;
  186. UCSZ1 = 2;
  187. UCSZ0 = 1;
  188. UCPOL = 0;
  189. RXC = 7;
  190. TXC = 6;
  191. UDRE = 5;
  192. FE = 4;
  193. DOR = 3;
  194. UPE = 2;
  195. U2X = 1;
  196. MPCM = 0;
  197. RXCIE = 7;
  198. TXCIE = 6;
  199. UDRIE = 5;
  200. RXEN = 4;
  201. TXEN = 3;
  202. UCSZ = 2;
  203. UCSZ2 = 2;
  204. RXB8 = 1;
  205. TXB8 = 0;
  206. ACD = 7;
  207. ACBG = 6;
  208. ACO = 5;
  209. ACI = 4;
  210. ACIE = 3;
  211. ACIC = 2;
  212. ACIS1 = 1;
  213. ACIS0 = 0;
  214. ADEN = 7;
  215. ADSC = 6;
  216. ADFR = 5;
  217. ADIF = 4;
  218. ADIE = 3;
  219. ADPS2 = 2;
  220. ADPS1 = 1;
  221. ADPS0 = 0;
  222. REFS1 = 7;
  223. REFS0 = 6;
  224. ADLAR = 5;
  225. MUX3 = 3;
  226. MUX2 = 2;
  227. MUX1 = 1;
  228. MUX0 = 0;
  229. implementation
  230. {$i avrcommon.inc}
  231. procedure Int00Handler; external name 'Int00Handler';
  232. procedure Int01Handler; external name 'Int01Handler';
  233. procedure Int02Handler; external name 'Int02Handler';
  234. procedure Int03Handler; external name 'Int03Handler';
  235. procedure Int04Handler; external name 'Int04Handler';
  236. procedure Int05Handler; external name 'Int05Handler';
  237. procedure Int06Handler; external name 'Int06Handler';
  238. procedure Int07Handler; external name 'Int07Handler';
  239. procedure Int08Handler; external name 'Int08Handler';
  240. procedure Int09Handler; external name 'Int09Handler';
  241. procedure Int10Handler; external name 'Int10Handler';
  242. procedure Int11Handler; external name 'Int11Handler';
  243. procedure Int12Handler; external name 'Int12Handler';
  244. procedure Int13Handler; external name 'Int13Handler';
  245. procedure Int14Handler; external name 'Int14Handler';
  246. procedure Int15Handler; external name 'Int15Handler';
  247. procedure Int16Handler; external name 'Int16Handler';
  248. procedure Int17Handler; external name 'Int17Handler';
  249. procedure Int18Handler; external name 'Int18Handler';
  250. procedure _FPC_start; assembler; nostackframe;
  251. label
  252. _start;
  253. asm
  254. .init
  255. .globl _start
  256. jmp _start
  257. jmp Int00Handler
  258. jmp Int01Handler
  259. jmp Int02Handler
  260. jmp Int03Handler
  261. jmp Int04Handler
  262. jmp Int05Handler
  263. jmp Int06Handler
  264. jmp Int07Handler
  265. jmp Int08Handler
  266. jmp Int09Handler
  267. jmp Int10Handler
  268. jmp Int11Handler
  269. jmp Int12Handler
  270. jmp Int13Handler
  271. jmp Int14Handler
  272. jmp Int15Handler
  273. jmp Int16Handler
  274. jmp Int17Handler
  275. jmp Int18Handler
  276. {
  277. all ATMEL MCUs use the same startup code, the details are
  278. governed by defines
  279. }
  280. {$i start.inc}
  281. .weak Int00Handler
  282. .weak Int01Handler
  283. .weak Int02Handler
  284. .weak Int03Handler
  285. .weak Int04Handler
  286. .weak Int05Handler
  287. .weak Int06Handler
  288. .weak Int07Handler
  289. .weak Int08Handler
  290. .weak Int09Handler
  291. .weak Int10Handler
  292. .weak Int11Handler
  293. .weak Int12Handler
  294. .weak Int13Handler
  295. .weak Int14Handler
  296. .weak Int15Handler
  297. .weak Int16Handler
  298. .weak Int17Handler
  299. .weak Int18Handler
  300. .set Int00Handler, Default_IRQ_handler
  301. .set Int01Handler, Default_IRQ_handler
  302. .set Int02Handler, Default_IRQ_handler
  303. .set Int03Handler, Default_IRQ_handler
  304. .set Int04Handler, Default_IRQ_handler
  305. .set Int05Handler, Default_IRQ_handler
  306. .set Int06Handler, Default_IRQ_handler
  307. .set Int07Handler, Default_IRQ_handler
  308. .set Int08Handler, Default_IRQ_handler
  309. .set Int09Handler, Default_IRQ_handler
  310. .set Int10Handler, Default_IRQ_handler
  311. .set Int11Handler, Default_IRQ_handler
  312. .set Int12Handler, Default_IRQ_handler
  313. .set Int13Handler, Default_IRQ_handler
  314. .set Int14Handler, Default_IRQ_handler
  315. .set Int15Handler, Default_IRQ_handler
  316. .set Int16Handler, Default_IRQ_handler
  317. .set Int17Handler, Default_IRQ_handler
  318. .set Int18Handler, Default_IRQ_handler
  319. end;
  320. end.