atmega128.pp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. {******************************************************************************
  2. Register definitions and startup code for ATMEL ATmega128
  3. ******************************************************************************}
  4. unit atmega128;
  5. {$goto on}
  6. {$macro on}
  7. interface
  8. const
  9. _SFR_OFFSET = $20; //indirect addressing
  10. var
  11. PINF : byte absolute $00+_SFR_OFFSET;
  12. PINE : byte absolute $01+_SFR_OFFSET;
  13. DDRE : byte absolute $02+_SFR_OFFSET;
  14. PORTE : byte absolute $03+_SFR_OFFSET;
  15. ADCW : word absolute $04+_SFR_OFFSET;
  16. ADC : word absolute $04+_SFR_OFFSET;
  17. ADCL : byte absolute $04+_SFR_OFFSET;
  18. ADCH : byte absolute $05+_SFR_OFFSET;
  19. ADCSR : byte absolute $06+_SFR_OFFSET;
  20. ADCSRA : byte absolute $06+_SFR_OFFSET;
  21. ADMUX : byte absolute $07+_SFR_OFFSET;
  22. ACSR : byte absolute $08+_SFR_OFFSET;
  23. UBRR0L : byte absolute $09+_SFR_OFFSET;
  24. UCSR0B : byte absolute $0A+_SFR_OFFSET;
  25. UCSR0A : byte absolute $0B+_SFR_OFFSET;
  26. UDR0 : byte absolute $0C+_SFR_OFFSET;
  27. SPCR : byte absolute $0D+_SFR_OFFSET;
  28. SPSR : byte absolute $0E+_SFR_OFFSET;
  29. SPDR : byte absolute $0F+_SFR_OFFSET;
  30. PIND : byte absolute $10+_SFR_OFFSET;
  31. DDRD : byte absolute $11+_SFR_OFFSET;
  32. PORTD : byte absolute $12+_SFR_OFFSET;
  33. PINC : byte absolute $13+_SFR_OFFSET;
  34. DDRC : byte absolute $14+_SFR_OFFSET;
  35. PORTC : byte absolute $15+_SFR_OFFSET;
  36. PINB : byte absolute $16+_SFR_OFFSET;
  37. DDRB : byte absolute $17+_SFR_OFFSET;
  38. PORTB : byte absolute $18+_SFR_OFFSET;
  39. PINA : byte absolute $19+_SFR_OFFSET;
  40. DDRA : byte absolute $1A+_SFR_OFFSET;
  41. PORTA : byte absolute $1B+_SFR_OFFSET;
  42. EECR : byte absolute $1C+_SFR_OFFSET;
  43. EEDR : byte absolute $1D+_SFR_OFFSET;
  44. EEAR : word absolute $1E+_SFR_OFFSET;
  45. EEARL : byte absolute $1E+_SFR_OFFSET;
  46. EEARH : byte absolute $1F+_SFR_OFFSET;
  47. SFIOR : byte absolute $20+_SFR_OFFSET;
  48. WDTCR : byte absolute $21+_SFR_OFFSET;
  49. OCDR : byte absolute $22+_SFR_OFFSET;
  50. OCR2 : byte absolute $23+_SFR_OFFSET;
  51. TCNT2 : byte absolute $24+_SFR_OFFSET;
  52. TCCR2 : byte absolute $25+_SFR_OFFSET;
  53. ICR1 : word absolute $26+_SFR_OFFSET;
  54. ICR1L : byte absolute $26+_SFR_OFFSET;
  55. ICR1H : byte absolute $27+_SFR_OFFSET;
  56. OCR1B : word absolute $28+_SFR_OFFSET;
  57. OCR1BL : byte absolute $28+_SFR_OFFSET;
  58. OCR1BH : byte absolute $29+_SFR_OFFSET;
  59. OCR1A : word absolute $2A+_SFR_OFFSET;
  60. OCR1AL : byte absolute $2A+_SFR_OFFSET;
  61. OCR1AH : byte absolute $2B+_SFR_OFFSET;
  62. TCNT1 : word absolute $2C+_SFR_OFFSET;
  63. TCNT1L : byte absolute $2C+_SFR_OFFSET;
  64. TCNT1H : byte absolute $2D+_SFR_OFFSET;
  65. TCCR1A : byte absolute $2F+_SFR_OFFSET;
  66. TCCR1B : byte absolute $2E+_SFR_OFFSET;
  67. ASSR : byte absolute $30+_SFR_OFFSET;
  68. OCR0 : byte absolute $31+_SFR_OFFSET;
  69. TCNT0 : byte absolute $32+_SFR_OFFSET;
  70. TCCR0 : byte absolute $33+_SFR_OFFSET;
  71. MCUSR : byte absolute $34+_SFR_OFFSET;
  72. MCUCSR : byte absolute $34+_SFR_OFFSET;
  73. MCUCR : byte absolute $35+_SFR_OFFSET;
  74. TIFR : byte absolute $36+_SFR_OFFSET;
  75. TIMSK : byte absolute $37+_SFR_OFFSET;
  76. EIFR : byte absolute $38+_SFR_OFFSET;
  77. EIMSK : byte absolute $39+_SFR_OFFSET;
  78. EICRB : byte absolute $3A+_SFR_OFFSET;
  79. RAMPZ : byte absolute $3B+_SFR_OFFSET;
  80. XDIV : byte absolute $3C+_SFR_OFFSET;
  81. DDRF : byte absolute $61;
  82. PORTF : byte absolute $62;
  83. PING : byte absolute $63;
  84. DDRG : byte absolute $64;
  85. PORTG : byte absolute $65;
  86. SPMCSR : byte absolute $68;
  87. EICRA : byte absolute $6A;
  88. XMCRB : byte absolute $6C;
  89. XMCRA : byte absolute $6D;
  90. OSCCAL : byte absolute $6F;
  91. TWBR : byte absolute $70;
  92. TWSR : byte absolute $71;
  93. TWAR : byte absolute $72;
  94. TWDR : byte absolute $73;
  95. TWCR : byte absolute $74;
  96. OCR1C : word absolute $78;
  97. OCR1CL : byte absolute $78;
  98. OCR1CH : byte absolute $79;
  99. TCCR1C : byte absolute $7A;
  100. ETIFR : byte absolute $7C;
  101. ETIMSK : byte absolute $7D;
  102. ICR3 : word absolute $80;
  103. ICR3L : byte absolute $80;
  104. ICR3H : byte absolute $81;
  105. OCR3C : word absolute $82;
  106. OCR3CL : byte absolute $82;
  107. OCR3CH : byte absolute $83;
  108. OCR3B : word absolute $84;
  109. OCR3BL : byte absolute $84;
  110. OCR3BH : byte absolute $85;
  111. OCR3A : word absolute $86;
  112. OCR3AL : byte absolute $86;
  113. OCR3AH : byte absolute $87;
  114. TCNT3 : word absolute $88;
  115. TCNT3L : byte absolute $88;
  116. TCNT3H : byte absolute $89;
  117. TCCR3B : byte absolute $8A;
  118. TCCR3A : byte absolute $8B;
  119. TCCR3C : byte absolute $8C;
  120. UBRR0H : byte absolute $90;
  121. UCSR0C : byte absolute $95;
  122. UBRR1H : byte absolute $98;
  123. UBRR1L : byte absolute $99;
  124. UCSR1B : byte absolute $9A;
  125. UCSR1A : byte absolute $9B;
  126. UDR1 : byte absolute $9C;
  127. UCSR1C : byte absolute $9D;
  128. const
  129. TWINT = 7;
  130. TWEA = 6;
  131. TWSTA = 5;
  132. TWSTO = 4;
  133. TWWC = 3;
  134. TWEN = 2;
  135. TWIE = 0;
  136. TWA6 = 7;
  137. TWA5 = 6;
  138. TWA4 = 5;
  139. TWA3 = 4;
  140. TWA2 = 3;
  141. TWA1 = 2;
  142. TWA0 = 1;
  143. TWGCE = 0;
  144. TWS7 = 7;
  145. TWS6 = 6;
  146. TWS5 = 5;
  147. TWS4 = 4;
  148. TWS3 = 3;
  149. TWPS1 = 1;
  150. TWPS0 = 0;
  151. SRL2 = 6;
  152. SRL1 = 5;
  153. SRL0 = 4;
  154. SRW01 = 3;
  155. SRW00 = 2;
  156. SRW11 = 1;
  157. XMBK = 7;
  158. XMM2 = 2;
  159. XMM1 = 1;
  160. XMM0 = 0;
  161. XDIVEN = 7;
  162. XDIV6 = 6;
  163. XDIV5 = 5;
  164. XDIV4 = 4;
  165. XDIV3 = 3;
  166. XDIV2 = 2;
  167. XDIV1 = 1;
  168. XDIV0 = 0;
  169. RAMPZ0 = 0;
  170. ISC31 = 7;
  171. ISC30 = 6;
  172. ISC21 = 5;
  173. ISC20 = 4;
  174. ISC11 = 3;
  175. ISC10 = 2;
  176. ISC01 = 1;
  177. ISC00 = 0;
  178. ISC71 = 7;
  179. ISC70 = 6;
  180. ISC61 = 5;
  181. ISC60 = 4;
  182. ISC51 = 3;
  183. ISC50 = 2;
  184. ISC41 = 1;
  185. ISC40 = 0;
  186. SPMIE = 7;
  187. RWWSB = 6;
  188. RWWSRE = 4;
  189. BLBSET = 3;
  190. PGWRT = 2;
  191. PGERS = 1;
  192. SPMEN = 0;
  193. INT7 = 7;
  194. INT6 = 6;
  195. INT5 = 5;
  196. INT4 = 4;
  197. INT3 = 3;
  198. INT2 = 2;
  199. INT1 = 1;
  200. INT0 = 0;
  201. INTF7 = 7;
  202. INTF6 = 6;
  203. INTF5 = 5;
  204. INTF4 = 4;
  205. INTF3 = 3;
  206. INTF2 = 2;
  207. INTF1 = 1;
  208. INTF0 = 0;
  209. OCIE2 = 7;
  210. TOIE2 = 6;
  211. TICIE1 = 5;
  212. OCIE1A = 4;
  213. OCIE1B = 3;
  214. TOIE1 = 2;
  215. OCIE0 = 1;
  216. TOIE0 = 0;
  217. OCF2 = 7;
  218. TOV2 = 6;
  219. ICF1 = 5;
  220. OCF1A = 4;
  221. OCF1B = 3;
  222. TOV1 = 2;
  223. OCF0 = 1;
  224. TOV0 = 0;
  225. TICIE3 = 5;
  226. OCIE3A = 4;
  227. OCIE3B = 3;
  228. TOIE3 = 2;
  229. OCIE3C = 1;
  230. OCIE1C = 0;
  231. ICF3 = 5;
  232. OCF3A = 4;
  233. OCF3B = 3;
  234. TOV3 = 2;
  235. OCF3C = 1;
  236. OCF1C = 0;
  237. SRE = 7;
  238. SRW = 6;
  239. SRW10 = 6;
  240. SE = 5;
  241. SM1 = 4;
  242. SM0 = 3;
  243. SM2 = 2;
  244. IVSEL = 1;
  245. IVCE = 0;
  246. JTD = 7;
  247. JTRF = 4;
  248. WDRF = 3;
  249. BORF = 2;
  250. EXTRF = 1;
  251. PORF = 0;
  252. FOC = 7;
  253. WGM0 = 6;
  254. COM1 = 5;
  255. COM0 = 4;
  256. WGM1 = 3;
  257. CS2 = 2;
  258. CS1 = 1;
  259. CS0 = 0;
  260. FOC0 = 7;
  261. WGM00 = 6;
  262. COM01 = 5;
  263. COM00 = 4;
  264. WGM01 = 3;
  265. CS02 = 2;
  266. CS01 = 1;
  267. CS00 = 0;
  268. FOC2 = 7;
  269. WGM20 = 6;
  270. COM21 = 5;
  271. COM20 = 4;
  272. WGM21 = 3;
  273. CS22 = 2;
  274. CS21 = 1;
  275. CS20 = 0;
  276. AS0 = 3;
  277. TCN0UB = 2;
  278. OCR0UB = 1;
  279. TCR0UB = 0;
  280. COMA1 = 7;
  281. COMA0 = 6;
  282. COMB1 = 5;
  283. COMB0 = 4;
  284. COMC1 = 3;
  285. COMC0 = 2;
  286. WGMA1 = 1;
  287. WGMA0 = 0;
  288. COM1A1 = 7;
  289. COM1A0 = 6;
  290. COM1B1 = 5;
  291. COM1B0 = 4;
  292. COM1C1 = 3;
  293. COM1C0 = 2;
  294. WGM11 = 1;
  295. WGM10 = 0;
  296. COM3A1 = 7;
  297. COM3A0 = 6;
  298. COM3B1 = 5;
  299. COM3B0 = 4;
  300. COM3C1 = 3;
  301. COM3C0 = 2;
  302. WGM31 = 1;
  303. WGM30 = 0;
  304. ICNC = 7;
  305. ICES = 6;
  306. WGMB3 = 4;
  307. WGMB2 = 3;
  308. CSB2 = 2;
  309. CSB1 = 1;
  310. CSB0 = 0;
  311. ICNC1 = 7;
  312. ICES1 = 6;
  313. WGM13 = 4;
  314. WGM12 = 3;
  315. CS12 = 2;
  316. CS11 = 1;
  317. CS10 = 0;
  318. ICNC3 = 7;
  319. ICES3 = 6;
  320. WGM33 = 4;
  321. WGM32 = 3;
  322. CS32 = 2;
  323. CS31 = 1;
  324. CS30 = 0;
  325. FOCA = 7;
  326. FOCB = 6;
  327. FOCC = 5;
  328. FOC3A = 7;
  329. FOC3B = 6;
  330. FOC3C = 5;
  331. FOC1A = 7;
  332. FOC1B = 6;
  333. FOC1C = 5;
  334. IDRD = 7;
  335. OCDR7 = 7;
  336. OCDR6 = 6;
  337. OCDR5 = 5;
  338. OCDR4 = 4;
  339. OCDR3 = 3;
  340. OCDR2 = 2;
  341. OCDR1 = 1;
  342. OCDR0 = 0;
  343. WDCE = 4;
  344. WDE = 3;
  345. WDP2 = 2;
  346. WDP1 = 1;
  347. WDP0 = 0;
  348. TSM = 7;
  349. ACME = 3;
  350. PUD = 2;
  351. PSR0 = 1;
  352. PSR321 = 0;
  353. SPIF = 7;
  354. WCOL = 6;
  355. SPI2X = 0;
  356. SPIE = 7;
  357. SPE = 6;
  358. DORD = 5;
  359. MSTR = 4;
  360. CPOL = 3;
  361. CPHA = 2;
  362. SPR1 = 1;
  363. SPR0 = 0;
  364. UMSEL = 6;
  365. UPM1 = 5;
  366. UPM0 = 4;
  367. USBS = 3;
  368. UCSZ1 = 2;
  369. UCSZ0 = 1;
  370. UCPOL = 0;
  371. UMSEL1 = 6;
  372. UPM11 = 5;
  373. UPM10 = 4;
  374. USBS1 = 3;
  375. UCSZ11 = 2;
  376. UCSZ10 = 1;
  377. UCPOL1 = 0;
  378. UMSEL0 = 6;
  379. UPM01 = 5;
  380. UPM00 = 4;
  381. USBS0 = 3;
  382. UCSZ01 = 2;
  383. UCSZ00 = 1;
  384. UCPOL0 = 0;
  385. RXC = 7;
  386. TXC = 6;
  387. UDRE = 5;
  388. FE = 4;
  389. DOR = 3;
  390. UPE = 2;
  391. U2X = 1;
  392. MPCM = 0;
  393. RXC1 = 7;
  394. TXC1 = 6;
  395. UDRE1 = 5;
  396. FE1 = 4;
  397. DOR1 = 3;
  398. UPE1 = 2;
  399. U2X1 = 1;
  400. MPCM1 = 0;
  401. RXC0 = 7;
  402. TXC0 = 6;
  403. UDRE0 = 5;
  404. FE0 = 4;
  405. DOR0 = 3;
  406. UPE0 = 2;
  407. U2X0 = 1;
  408. MPCM0 = 0;
  409. RXCIE = 7;
  410. TXCIE = 6;
  411. UDRIE = 5;
  412. RXEN = 4;
  413. TXEN = 3;
  414. UCSZ = 2;
  415. UCSZ2 = 2;
  416. RXB8 = 1;
  417. TXB8 = 0;
  418. RXCIE1 = 7;
  419. TXCIE1 = 6;
  420. UDRIE1 = 5;
  421. RXEN1 = 4;
  422. TXEN1 = 3;
  423. UCSZ12 = 2;
  424. RXB81 = 1;
  425. TXB81 = 0;
  426. RXCIE0 = 7;
  427. TXCIE0 = 6;
  428. UDRIE0 = 5;
  429. RXEN0 = 4;
  430. TXEN0 = 3;
  431. UCSZ02 = 2;
  432. RXB80 = 1;
  433. TXB80 = 0;
  434. ACD = 7;
  435. ACBG = 6;
  436. ACO = 5;
  437. ACI = 4;
  438. ACIE = 3;
  439. ACIC = 2;
  440. ACIS1 = 1;
  441. ACIS0 = 0;
  442. ADEN = 7;
  443. ADSC = 6;
  444. ADFR = 5;
  445. ADIF = 4;
  446. ADIE = 3;
  447. ADPS2 = 2;
  448. ADPS1 = 1;
  449. ADPS0 = 0;
  450. REFS1 = 7;
  451. REFS0 = 6;
  452. ADLAR = 5;
  453. MUX4 = 4;
  454. MUX3 = 3;
  455. MUX2 = 2;
  456. MUX1 = 1;
  457. MUX0 = 0;
  458. {$define DOCALL:=call}
  459. {$define DOJMP:=jmp}
  460. implementation
  461. procedure PASCALMAIN; external name 'PASCALMAIN';
  462. procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
  463. asm
  464. cli
  465. .Lhalt:
  466. jmp .Lhalt
  467. end;
  468. procedure Default_IRQ_handler; assembler; nostackframe; public name '_Default_IRQ_handler';
  469. asm
  470. .Lloop:
  471. jmp .Lloop
  472. end;
  473. var
  474. _data: record end; external name '_data';
  475. _edata: record end; external name '_edata';
  476. _etext: record end; external name '_etext';
  477. _bss_start: record end; external name '_bss_start';
  478. _bss_end: record end; external name '_bss_end';
  479. _stack_top: record end; external name '_stack_top';
  480. Int00Handler : Pointer = @Default_IRQ_handler;
  481. Int01Handler : Pointer = @Default_IRQ_handler;
  482. Int02Handler : Pointer = @Default_IRQ_handler;
  483. Int03Handler : Pointer = @Default_IRQ_handler;
  484. Int04Handler : Pointer = @Default_IRQ_handler;
  485. Int05Handler : Pointer = @Default_IRQ_handler;
  486. Int06Handler : Pointer = @Default_IRQ_handler;
  487. Int07Handler : Pointer = @Default_IRQ_handler;
  488. Int08Handler : Pointer = @Default_IRQ_handler;
  489. Int09Handler : Pointer = @Default_IRQ_handler;
  490. Int10Handler : Pointer = @Default_IRQ_handler;
  491. Int11Handler : Pointer = @Default_IRQ_handler;
  492. Int12Handler : Pointer = @Default_IRQ_handler;
  493. Int13Handler : Pointer = @Default_IRQ_handler;
  494. Int14Handler : Pointer = @Default_IRQ_handler;
  495. Int15Handler : Pointer = @Default_IRQ_handler;
  496. Int16Handler : Pointer = @Default_IRQ_handler;
  497. Int17Handler : Pointer = @Default_IRQ_handler;
  498. Int18Handler : Pointer = @Default_IRQ_handler;
  499. Int19Handler : Pointer = @Default_IRQ_handler;
  500. Int20Handler : Pointer = @Default_IRQ_handler;
  501. Int21Handler : Pointer = @Default_IRQ_handler;
  502. Int22Handler : Pointer = @Default_IRQ_handler;
  503. Int23Handler : Pointer = @Default_IRQ_handler;
  504. Int24Handler : Pointer = @Default_IRQ_handler;
  505. Int25Handler : Pointer = @Default_IRQ_handler;
  506. Int26Handler : Pointer = @Default_IRQ_handler;
  507. Int27Handler : Pointer = @Default_IRQ_handler;
  508. Int28Handler : Pointer = @Default_IRQ_handler;
  509. Int29Handler : Pointer = @Default_IRQ_handler;
  510. Int30Handler : Pointer = @Default_IRQ_handler;
  511. Int31Handler : Pointer = @Default_IRQ_handler;
  512. Int32Handler : Pointer = @Default_IRQ_handler;
  513. Int33Handler : Pointer = @Default_IRQ_handler;
  514. Int34Handler : Pointer = @Default_IRQ_handler;
  515. procedure _FPC_start; assembler; nostackframe;
  516. label
  517. _start;
  518. asm
  519. .init
  520. .globl _start
  521. // .org 0x00
  522. rjmp _start
  523. rjmp Int00Handler
  524. rjmp Int01Handler
  525. rjmp Int02Handler
  526. rjmp Int03Handler
  527. rjmp Int04Handler
  528. rjmp Int05Handler
  529. rjmp Int06Handler
  530. rjmp Int07Handler
  531. rjmp Int08Handler
  532. rjmp Int09Handler
  533. rjmp Int10Handler
  534. rjmp Int11Handler
  535. rjmp Int12Handler
  536. rjmp Int13Handler
  537. rjmp Int14Handler
  538. rjmp Int15Handler
  539. rjmp Int16Handler
  540. rjmp Int17Handler
  541. rjmp Int18Handler
  542. rjmp Int19Handler
  543. rjmp Int20Handler
  544. rjmp Int21Handler
  545. rjmp Int22Handler
  546. rjmp Int23Handler
  547. rjmp Int24Handler
  548. rjmp Int25Handler
  549. rjmp Int26Handler
  550. rjmp Int27Handler
  551. rjmp Int28Handler
  552. rjmp Int29Handler
  553. rjmp Int30Handler
  554. rjmp Int31Handler
  555. rjmp Int32Handler
  556. rjmp Int33Handler
  557. rjmp Int34Handler
  558. {
  559. all ATMEL MCUs use the same startup code, the details are
  560. governed by defines
  561. }
  562. {$i start.inc}
  563. end;
  564. end.