attinyx4.pp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. {******************************************************************************
  2. Register definitions and startup code for ATMEL ATtiny 24/44/84
  3. ******************************************************************************}
  4. unit attinyx4;
  5. {$goto on}
  6. interface
  7. var
  8. PRR : byte absolute $20;
  9. DIDR0 : byte absolute $21;
  10. ADCSRB : byte absolute $23;
  11. ADCL : byte absolute $24;
  12. ADCH : byte absolute $25;
  13. ADC : word absolute $24;
  14. ADCSRA : byte absolute $26;
  15. ADMUX : byte absolute $27;
  16. ACSR : byte absolute $28;
  17. TIFR1 : byte absolute $2B;
  18. TIMSK1 : byte absolute $2C;
  19. USICR : byte absolute $2D;
  20. USISR : byte absolute $2E;
  21. USIDR : byte absolute $2F;
  22. USIBR : byte absolute $30;
  23. PCMSK0 : byte absolute $32;
  24. GPIOR0 : byte absolute $33;
  25. GPIOR1 : byte absolute $34;
  26. GPIOR2 : byte absolute $35;
  27. PINB : byte absolute $36;
  28. DDRB : byte absolute $37;
  29. PORTB : byte absolute $38;
  30. PINA : byte absolute $39;
  31. DDRA : byte absolute $3A;
  32. PORTA : byte absolute $3B;
  33. EECR : byte absolute $3C;
  34. EEDR : byte absolute $3D;
  35. EEARL : byte absolute $3E;
  36. EEARH : byte absolute $3F;
  37. EEAR : word absolute $3E;
  38. PCMSK1 : byte absolute $40;
  39. WDTCSR : byte absolute $41;
  40. TCCR1C : byte absolute $42;
  41. GTCCR : byte absolute $43;
  42. ICR1L : byte absolute $44;
  43. ICR1H : byte absolute $45;
  44. ICR1 : word absolute $44;
  45. CLKPR : byte absolute $46;
  46. DWDR : byte absolute $47;
  47. OCR1BL : byte absolute $48;
  48. OCR1BH : byte absolute $49;
  49. OCR1B : word absolute $48;
  50. OCR1AL : byte absolute $4A;
  51. OCR1AH : byte absolute $4B;
  52. OCR1A : word absolute $4A;
  53. TCNT1L : byte absolute $4C;
  54. TCNT1H : byte absolute $4D;
  55. TCNT1 : word absolute $4C;
  56. TCCR1B : byte absolute $4E;
  57. TCCR1A : byte absolute $4F;
  58. TCCR0A : byte absolute $50;
  59. OSCCAL : byte absolute $51;
  60. TCNT0 : byte absolute $52;
  61. TCCR0B : byte absolute $53;
  62. MCUSR : byte absolute $54;
  63. MCUCR : byte absolute $55;
  64. OCR0A : byte absolute $56;
  65. SPMCSR : byte absolute $57;
  66. TIFR0 : byte absolute $58;
  67. TIMSK0 : byte absolute $59;
  68. GIFR : byte absolute $5A;
  69. GIMSK : byte absolute $5B;
  70. OCR0B : byte absolute $5C;
  71. SPL : byte absolute $5D;
  72. SPH : byte absolute $5E;
  73. SP : word absolute $5D;
  74. SREG : byte absolute $5F;
  75. const
  76. { PRR }
  77. PRTIM1 = 3;
  78. PRTIM0 = 2;
  79. PRUSI = 1;
  80. PRADC = 0;
  81. { DIDR0 }
  82. ADC7D = 7;
  83. ADC6D = 6;
  84. ADC5D = 5;
  85. ADC4D = 4;
  86. ADC3D = 3;
  87. ADC2D = 2;
  88. ADC1D = 1;
  89. ADC0D = 0;
  90. { ADCSRB }
  91. BIN = 7;
  92. ACME = 6;
  93. ADLAR = 4;
  94. ADTS2 = 2;
  95. ADTS1 = 1;
  96. ADTS0 = 0;
  97. { ADCSRA }
  98. ADEN = 7;
  99. ADSC = 6;
  100. ADATE = 5;
  101. ADIF = 4;
  102. ADIE = 3;
  103. ADPS2 = 2;
  104. ADPS1 = 1;
  105. ADPS0 = 0;
  106. { ADMUX }
  107. REFS1 = 7;
  108. REFS0 = 6;
  109. MUX5 = 5;
  110. MUX4 = 4;
  111. MUX3 = 3;
  112. MUX2 = 2;
  113. MUX1 = 1;
  114. MUX0 = 0;
  115. { ACSR }
  116. ACD = 7;
  117. ACBG = 6;
  118. ACO = 5;
  119. ACI = 4;
  120. ACIE = 3;
  121. ACIC = 2;
  122. ACIS1 = 1;
  123. ACIS0 = 0;
  124. { TIFR1 }
  125. ICF1 = 5;
  126. OCF1B = 2;
  127. OCF1A = 1;
  128. TOV1 = 0;
  129. { TIMSK1 }
  130. ICIE1 = 5;
  131. OCIE1B = 2;
  132. OCIE1A = 1;
  133. TOIE1 = 0;
  134. { USICR }
  135. USISIE = 7;
  136. USIOIE = 6;
  137. USIWM1 = 5;
  138. USIWM0 = 4;
  139. USICS1 = 3;
  140. USICS0 = 2;
  141. USICLK = 1;
  142. USITC = 0;
  143. { USISR }
  144. USISIF = 7;
  145. USIOIF = 6;
  146. USIPF = 5;
  147. USIDC = 4;
  148. USICNT3 = 3;
  149. USICNT2 = 2;
  150. USICNT1 = 1;
  151. USICNT0 = 0;
  152. { PCMSK0 }
  153. PCINT7 = 7;
  154. PCINT6 = 6;
  155. PCINT5 = 5;
  156. PCINT4 = 4;
  157. PCINT3 = 3;
  158. PCINT2 = 2;
  159. PCINT1 = 1;
  160. PCINT0 = 0;
  161. { PINB }
  162. PINB3 = 3;
  163. PINB2 = 2;
  164. PINB1 = 1;
  165. PINB0 = 0;
  166. { DDRB }
  167. DDB3 = 3;
  168. DDB2 = 2;
  169. DDB1 = 1;
  170. DDB0 = 0;
  171. { PORTB }
  172. PORTB3 = 3;
  173. PORTB2 = 2;
  174. PORTB1 = 1;
  175. PORTB0 = 0;
  176. { PINA }
  177. PINA7 = 7;
  178. PINA6 = 6;
  179. PINA5 = 5;
  180. PINA4 = 4;
  181. PINA3 = 3;
  182. PINA2 = 2;
  183. PINA1 = 1;
  184. PINA0 = 0;
  185. { DDRA }
  186. DDA7 = 7;
  187. DDA6 = 6;
  188. DDA5 = 5;
  189. DDA4 = 4;
  190. DDA3 = 3;
  191. DDA2 = 2;
  192. DDA1 = 1;
  193. DDA0 = 0;
  194. { PORTA }
  195. PORTA7 = 7;
  196. PORTA6 = 6;
  197. PORTA5 = 5;
  198. PORTA4 = 4;
  199. PORTA3 = 3;
  200. PORTA2 = 2;
  201. PORTA1 = 1;
  202. PORTA0 = 0;
  203. { EECR }
  204. EEPM1 = 5;
  205. EEPM0 = 4;
  206. EERIE = 3;
  207. EEMPE = 2;
  208. EEPE = 1;
  209. EERE = 0;
  210. { EEARL }
  211. EEAR7 = 7;
  212. EEAR6 = 6;
  213. EEAR5 = 5;
  214. EEAR4 = 4;
  215. EEAR3 = 3;
  216. EEAR2 = 2;
  217. EEAR1 = 1;
  218. EEAR0 = 0;
  219. { EEARH }
  220. EEAR8 = 0;
  221. { PCMSK1 }
  222. PCINT11 = 3;
  223. PCINT10 = 2;
  224. PCINT9 = 1;
  225. PCINT8 = 0;
  226. { WDTCSR }
  227. WDIF = 7;
  228. WDIE = 6;
  229. WDP3 = 5;
  230. WDCE = 4;
  231. WDE = 3;
  232. WDP2 = 2;
  233. WDP1 = 1;
  234. WDP0 = 0;
  235. { TCCR1C }
  236. FOC1A = 7;
  237. FOC1B = 6;
  238. { GTCCR }
  239. TSM = 7;
  240. PSR10 = 0;
  241. { CLKPR }
  242. CLKPCE = 7;
  243. CLKPS3 = 3;
  244. CLKPS2 = 2;
  245. CLKPS1 = 1;
  246. CLKPS0 = 0;
  247. { TCCR1B }
  248. ICNC1 = 7;
  249. ICES1 = 6;
  250. WGM13 = 4;
  251. WGM12 = 3;
  252. CS12 = 2;
  253. CS11 = 1;
  254. CS10 = 0;
  255. { TCCR1A }
  256. COM1A1 = 7;
  257. COM1A0 = 6;
  258. COM1B1 = 5;
  259. COM1B0 = 4;
  260. WGM11 = 1;
  261. WGM10 = 0;
  262. { TCCR0A }
  263. COM0A1 = 7;
  264. COM0A0 = 6;
  265. COM0B1 = 5;
  266. COM0B0 = 4;
  267. WGM01 = 1;
  268. WGM00 = 0;
  269. { OSCCAL }
  270. CAL7 = 7;
  271. CAL6 = 6;
  272. CAL5 = 5;
  273. CAL4 = 4;
  274. CAL3 = 3;
  275. CAL2 = 2;
  276. CAL1 = 1;
  277. CAL0 = 0;
  278. { TCCR0B }
  279. FOC0A = 7;
  280. FOC0B = 6;
  281. WGM02 = 3;
  282. CS02 = 2;
  283. CS01 = 1;
  284. CS00 = 0;
  285. { MCUSR }
  286. WDRF = 3;
  287. BORF = 2;
  288. EXTRF = 1;
  289. PORF = 0;
  290. { MCUCR }
  291. BODS = 7;
  292. PUD = 6;
  293. SE = 5;
  294. SM1 = 4;
  295. SM0 = 3;
  296. BODSE = 2;
  297. ISC01 = 1;
  298. ISC00 = 0;
  299. { SPMCSR }
  300. RSIG = 5;
  301. CTPB = 4;
  302. RFLB = 3;
  303. PGWRT = 2;
  304. PGERS = 1;
  305. SPMEN = 0;
  306. { TIFR0 }
  307. OCF0B = 2;
  308. OCF0A = 1;
  309. TOV0 = 0;
  310. { TIMSK0 }
  311. OCIE0B = 2;
  312. OCIE0A = 1;
  313. TOIE0 = 0;
  314. { GIFR }
  315. INTF0 = 6;
  316. PCIF1 = 5;
  317. PCIF0 = 4;
  318. { GIMSK }
  319. INT0 = 6;
  320. PCIE1 = 5;
  321. PCIE0 = 4;
  322. {$define RELBRANCHES}
  323. implementation
  324. {$i avrcommon.inc}
  325. procedure Int00Handler; external name 'Int00Handler';
  326. procedure Int01Handler; external name 'Int01Handler';
  327. procedure Int02Handler; external name 'Int02Handler';
  328. procedure Int03Handler; external name 'Int03Handler';
  329. procedure Int04Handler; external name 'Int04Handler';
  330. procedure Int05Handler; external name 'Int05Handler';
  331. procedure Int06Handler; external name 'Int06Handler';
  332. procedure Int07Handler; external name 'Int07Handler';
  333. procedure Int08Handler; external name 'Int08Handler';
  334. procedure Int09Handler; external name 'Int09Handler';
  335. procedure Int10Handler; external name 'Int10Handler';
  336. procedure Int11Handler; external name 'Int11Handler';
  337. procedure Int12Handler; external name 'Int12Handler';
  338. procedure Int13Handler; external name 'Int13Handler';
  339. procedure Int14Handler; external name 'Int14Handler';
  340. procedure Int15Handler; external name 'Int15Handler';
  341. procedure Int16Handler; external name 'Int16Handler';
  342. procedure _FPC_start; assembler; nostackframe;
  343. label
  344. _start;
  345. asm
  346. .init
  347. .globl _start
  348. rjmp _start
  349. rjmp Int00Handler
  350. rjmp Int01Handler
  351. rjmp Int02Handler
  352. rjmp Int03Handler
  353. rjmp Int04Handler
  354. rjmp Int05Handler
  355. rjmp Int06Handler
  356. rjmp Int07Handler
  357. rjmp Int08Handler
  358. rjmp Int09Handler
  359. rjmp Int10Handler
  360. rjmp Int11Handler
  361. rjmp Int12Handler
  362. rjmp Int13Handler
  363. rjmp Int14Handler
  364. rjmp Int15Handler
  365. rjmp Int16Handler
  366. {
  367. all ATMEL MCUs use the same startup code, the details are
  368. governed by defines
  369. }
  370. {$i start.inc}
  371. .weak Int00Handler
  372. .weak Int01Handler
  373. .weak Int02Handler
  374. .weak Int03Handler
  375. .weak Int04Handler
  376. .weak Int05Handler
  377. .weak Int06Handler
  378. .weak Int07Handler
  379. .weak Int08Handler
  380. .weak Int09Handler
  381. .weak Int10Handler
  382. .weak Int11Handler
  383. .weak Int12Handler
  384. .weak Int13Handler
  385. .weak Int14Handler
  386. .weak Int15Handler
  387. .weak Int16Handler
  388. .set Int00Handler, Default_IRQ_handler
  389. .set Int01Handler, Default_IRQ_handler
  390. .set Int02Handler, Default_IRQ_handler
  391. .set Int03Handler, Default_IRQ_handler
  392. .set Int04Handler, Default_IRQ_handler
  393. .set Int05Handler, Default_IRQ_handler
  394. .set Int06Handler, Default_IRQ_handler
  395. .set Int07Handler, Default_IRQ_handler
  396. .set Int08Handler, Default_IRQ_handler
  397. .set Int09Handler, Default_IRQ_handler
  398. .set Int10Handler, Default_IRQ_handler
  399. .set Int11Handler, Default_IRQ_handler
  400. .set Int12Handler, Default_IRQ_handler
  401. .set Int13Handler, Default_IRQ_handler
  402. .set Int14Handler, Default_IRQ_handler
  403. .set Int15Handler, Default_IRQ_handler
  404. .set Int16Handler, Default_IRQ_handler
  405. end;
  406. end.