fpc/rtl/embedded/avr/attiny441.pp
florian 3cb2cff444 * patch by Christo Crause: more AVR controllers, resolves #36683
git-svn-id: trunk@44130 -
(cherry picked from commit 04ad607bb4)

# Conflicts:
#	.gitattributes
2021-10-24 12:40:37 +02:00

670 lines
25 KiB
ObjectPascal

unit ATtiny441;
{$goto on}
interface
var
ADCSRB: byte absolute $24; // ADC Control and Status Register B
ADCSRA: byte absolute $25; // The ADC Control and Status register
ADC: word absolute $26; // ADC Data Register Bytes
ADCL: byte absolute $26; // ADC Data Register Bytes
ADCH: byte absolute $27; // ADC Data Register Bytes;
ADMUXB: byte absolute $28; // The ADC multiplexer Selection Register B
ADMUXA: byte absolute $29; // The ADC multiplexer Selection Register A
ACSR0A: byte absolute $2A; // Analog Comparator 0 Control And Status Register A
ACSR0B: byte absolute $2B; // Analog Comparator 0 Control And Status Register B
ACSR1A: byte absolute $2C; // Analog Comparator 1 Control And Status Register A
ACSR1B: byte absolute $2D; // Analog Comparator 1 Control And Status Register B
TIFR1: byte absolute $2E; // Timer/Counter Interrupt Flag register
TIMSK1: byte absolute $2F; // Timer/Counter1 Interrupt Mask Register
TIFR2: byte absolute $30; // Timer/Counter Interrupt Flag register
TIMSK2: byte absolute $31; // Timer/Counter2 Interrupt Mask Register
PCMSK0: byte absolute $32; // Pin Change Enable Mask 0
GPIOR0: byte absolute $33; // General Purpose I/O Register 0
GPIOR1: byte absolute $34; // General Purpose I/O Register 1
GPIOR2: byte absolute $35; // General Purpose I/O Register 2
PINB: byte absolute $36; // Port B Data register
DDRB: byte absolute $37; // Data Direction Register, Port B
PORTB: byte absolute $38; // Input Pins, Port B
PINA: byte absolute $39; // Port A Input Pins
DDRA: byte absolute $3A; // Data Direction Register, Port A
PORTA: byte absolute $3B; // Port A Data Register
EECR: byte absolute $3C; // EEPROM Control Register
EEDR: byte absolute $3D; // EEPROM Data Register
EEAR: word absolute $3E; // EEPROM Address Register Bytes
EEARL: byte absolute $3E; // EEPROM Address Register Bytes
EEARH: byte absolute $3F; // EEPROM Address Register Bytes;
PCMSK1: byte absolute $40; // Pin Change Enable Mask 1
WDTCSR: byte absolute $41; // Watchdog Timer Control and Status Register
TCCR1C: byte absolute $42; // Timer/Counter1 Control Register C
GTCCR: byte absolute $43; // General Timer/Counter Control Register
ICR1: word absolute $44; // Timer/Counter1 Input Capture Register Bytes
ICR1L: byte absolute $44; // Timer/Counter1 Input Capture Register Bytes
ICR1H: byte absolute $45; // Timer/Counter1 Input Capture Register Bytes;
OCR1B: word absolute $48; // Timer/Counter1 Output Compare Register B Bytes
OCR1BL: byte absolute $48; // Timer/Counter1 Output Compare Register B Bytes
OCR1BH: byte absolute $49; // Timer/Counter1 Output Compare Register B Bytes;
OCR1A: word absolute $4A; // Timer/Counter1 Output Compare Register A Bytes
OCR1AL: byte absolute $4A; // Timer/Counter1 Output Compare Register A Bytes
OCR1AH: byte absolute $4B; // Timer/Counter1 Output Compare Register A Bytes;
TCNT1: word absolute $4C; // Timer/Counter1 Bytes
TCNT1L: byte absolute $4C; // Timer/Counter1 Bytes
TCNT1H: byte absolute $4D; // Timer/Counter1 Bytes;
TCCR1B: byte absolute $4E; // Timer/Counter1 Control Register B
TCCR1A: byte absolute $4F; // Timer/Counter1 Control Register A
TCCR0A: byte absolute $50; // Timer/Counter Control Register A
TCNT0: byte absolute $52; // Timer/Counter0
TCCR0B: byte absolute $53; // Timer/Counter Control Register B
MCUSR: byte absolute $54; // MCU Status Register
MCUCR: byte absolute $55; // MCU Control Register
OCR0A: byte absolute $56; // Timer/Counter0 Output Compare Register A
SPMCSR: byte absolute $57; // Store Program Memory Control and Status Register
TIFR0: byte absolute $58; // Timer/Counter0 Interrupt Flag Register
TIMSK0: byte absolute $59; // Timer/Counter Interrupt Mask Register
GIFR: byte absolute $5A; // General Interrupt Flag register
GIMSK: byte absolute $5B; // General Interrupt Mask Register
OCR0B: byte absolute $5C; // Timer/Counter0 Output Compare Register B
SP: word absolute $5D; // Stack Pointer
SPL: byte absolute $5D; // Stack Pointer
SPH: byte absolute $5E; // Stack Pointer ;
SREG: byte absolute $5F; // Status Register
DIDR0: byte absolute $60; // Digital Input Disable Register 0
DIDR1: byte absolute $61; // Digital Input Disable Register 1
PUEB: byte absolute $62; // Pull-up Enable Control Register
PUEA: byte absolute $63; // Pull-up Enable Control Register
PORTCR: byte absolute $64; // Port Control Register
REMAP: byte absolute $65; // Remap Port Pins
TOCPMCOE: byte absolute $66; // Timer Output Compare Pin Mux Channel Output Enable
TOCPMSA0: byte absolute $67; // Timer Output Compare Pin Mux Selection 0
TOCPMSA1: byte absolute $68; // Timer Output Compare Pin Mux Selection 1
PHDE: byte absolute $6A; // Port High Drive Enable Register
PRR: byte absolute $70; // Power Reduction Register
CCP: byte absolute $71; // Configuration Change Protection
CLKCR: byte absolute $72; // Clock Control Register
CLKPR: byte absolute $73; // Clock Prescale Register
OSCCAL0: byte absolute $74; // Oscillator Calibration Register 8MHz
OSCTCAL0A: byte absolute $75; // Oscillator Temperature Calibration Register A
OSCTCAL0B: byte absolute $76; // Oscillator Temperature Calibration Register B
OSCCAL1: byte absolute $77; // Oscillator Calibration Register 32kHz
UDR0: byte absolute $80; // USART I/O Data Register
UBRR0: word absolute $81; // USART Baud Rate Register Bytes
UBRR0L: byte absolute $81; // USART Baud Rate Register Bytes
UBRR0H: byte absolute $82; // USART Baud Rate Register Bytes;
UCSR0D: byte absolute $83; // USART Control and Status Register D
UCSR0C: byte absolute $84; // USART Control and Status Register C
UCSR0B: byte absolute $85; // USART Control and Status Register B
UCSR0A: byte absolute $86; // USART Control and Status Register A
UDR1: byte absolute $90; // USART I/O Data Register
UBRR1: word absolute $91; // USART Baud Rate Register Bytes
UBRR1L: byte absolute $91; // USART Baud Rate Register Bytes
UBRR1H: byte absolute $92; // USART Baud Rate Register Bytes;
UCSR1D: byte absolute $93; // USART Control and Status Register D
UCSR1C: byte absolute $94; // USART Control and Status Register C
UCSR1B: byte absolute $95; // USART Control and Status Register B
UCSR1A: byte absolute $96; // USART Control and Status Register A
TWSD: byte absolute $A0; // TWI Slave Data Register
TWSAM: byte absolute $A1; // TWI Slave Address Mask Register
TWSA: byte absolute $A2; // TWI Slave Address Register
TWSSRA: byte absolute $A3; // TWI Slave Status Register A
TWSCRB: byte absolute $A4; // TWI Slave Control Register B
TWSCRA: byte absolute $A5; // TWI Slave Control Register A
SPDR: byte absolute $B0; // SPI Data Register
SPSR: byte absolute $B1; // SPI Status Register
SPCR: byte absolute $B2; // SPI Control Register
ICR2: word absolute $C0; // Timer/Counter2 Input Capture Register Bytes
ICR2L: byte absolute $C0; // Timer/Counter2 Input Capture Register Bytes
ICR2H: byte absolute $C1; // Timer/Counter2 Input Capture Register Bytes;
OCR2B: word absolute $C2; // Timer/Counter2 Output Compare Register B Bytes
OCR2BL: byte absolute $C2; // Timer/Counter2 Output Compare Register B Bytes
OCR2BH: byte absolute $C3; // Timer/Counter2 Output Compare Register B Bytes;
OCR2A: word absolute $C4; // Timer/Counter2 Output Compare Register A Bytes
OCR2AL: byte absolute $C4; // Timer/Counter2 Output Compare Register A Bytes
OCR2AH: byte absolute $C5; // Timer/Counter2 Output Compare Register A Bytes;
TCNT2: word absolute $C6; // Timer/Counter2 Bytes
TCNT2L: byte absolute $C6; // Timer/Counter2 Bytes
TCNT2H: byte absolute $C7; // Timer/Counter2 Bytes;
TCCR2C: byte absolute $C8; // Timer/Counter2 Control Register C
TCCR2B: byte absolute $C9; // Timer/Counter2 Control Register B
TCCR2A: byte absolute $CA; // Timer/Counter2 Control Register A
const
// ADC Control and Status Register B
ADTS0 = $00; // ADC Auto Trigger Sources
ADTS1 = $01; // ADC Auto Trigger Sources
ADTS2 = $02; // ADC Auto Trigger Sources
ADLAR = $03;
// The ADC Control and Status register
ADPS0 = $00; // ADC Prescaler Select Bits
ADPS1 = $01; // ADC Prescaler Select Bits
ADPS2 = $02; // ADC Prescaler Select Bits
ADIE = $03;
ADIF = $04;
ADATE = $05;
ADSC = $06;
ADEN = $07;
// The ADC multiplexer Selection Register B
GSEL0 = $00; // Gain Selection Bits
GSEL1 = $01; // Gain Selection Bits
REFS0 = $05; // Reference Selection Bits
REFS1 = $06; // Reference Selection Bits
REFS2 = $07; // Reference Selection Bits
// The ADC multiplexer Selection Register A
MUX0 = $00; // Analog Channel and Gain Selection Bits
MUX1 = $01; // Analog Channel and Gain Selection Bits
MUX2 = $02; // Analog Channel and Gain Selection Bits
MUX3 = $03; // Analog Channel and Gain Selection Bits
MUX4 = $04; // Analog Channel and Gain Selection Bits
MUX5 = $05; // Analog Channel and Gain Selection Bits
// Analog Comparator 0 Control And Status Register A
ACIS00 = $00; // Analog Comparator 0 Interrupt Mode Select bits
ACIS01 = $01; // Analog Comparator 0 Interrupt Mode Select bits
ACIC0 = $02;
ACIE0 = $03;
ACI0 = $04;
ACO0 = $05;
ACPMUX2 = $06;
ACD0 = $07;
// Analog Comparator 0 Control And Status Register B
ACPMUX0 = $00; // Analog Comparator 0 Positive Input Multiplexer Bits 1:0
ACPMUX1 = $01; // Analog Comparator 0 Positive Input Multiplexer Bits 1:0
ACNMUX0 = $02; // Analog Comparator 0 Negative Input Multiplexer
ACNMUX1 = $03; // Analog Comparator 0 Negative Input Multiplexer
ACOE0 = $04;
HLEV0 = $06;
HSEL0 = $07;
// Analog Comparator 1 Control And Status Register A
ACIS10 = $00; // Analog Comparator 1 Interrupt Mode Select bits
ACIS11 = $01; // Analog Comparator 1 Interrupt Mode Select bits
ACIC1 = $02;
ACIE1 = $03;
ACI1 = $04;
ACO1 = $05;
ACBG1 = $06;
ACD1 = $07;
// Analog Comparator 1 Control And Status Register B
ACME1 = $02;
ACOE1 = $04;
HLEV1 = $06;
HSEL1 = $07;
// Timer/Counter Interrupt Flag register
TOV1 = $00;
OCF1A = $01;
OCF1B = $02;
ICF1 = $05;
// Timer/Counter1 Interrupt Mask Register
TOIE1 = $00;
OCIE1A = $01;
OCIE1B = $02;
ICIE1 = $05;
// Timer/Counter Interrupt Flag register
TOV2 = $00;
OCF2A = $01;
OCF2B = $02;
ICF2 = $05;
// Timer/Counter2 Interrupt Mask Register
TOIE2 = $00;
OCIE2A = $01;
OCIE2B = $02;
ICIE2 = $05;
// Pin Change Enable Mask 0
PCINT0 = $00;
PCINT1 = $01;
PCINT2 = $02;
PCINT3 = $03;
PCINT4 = $04;
PCINT5 = $05;
PCINT6 = $06;
PCINT7 = $07;
// Input Pins, Port B
PB0 = $00;
PB1 = $01;
PB2 = $02;
PB3 = $03;
// Port A Data Register
PA0 = $00;
PA1 = $01;
PA2 = $02;
PA3 = $03;
PA4 = $04;
PA5 = $05;
PA6 = $06;
PA7 = $07;
// EEPROM Control Register
EERE = $00;
EEPE = $01;
EEMPE = $02;
EERIE = $03;
EEPM0 = $04; // EEPROM Programming Mode Bits
EEPM1 = $05; // EEPROM Programming Mode Bits
// Pin Change Enable Mask 1
PCINT8 = $00;
PCINT9 = $01;
PCINT10 = $02;
PCINT11 = $03;
// Watchdog Timer Control and Status Register
WDE = $03;
WDP0 = $00; // Watchdog Timer Prescaler Bits
WDP1 = $01; // Watchdog Timer Prescaler Bits
WDP2 = $02; // Watchdog Timer Prescaler Bits
WDP3 = $05; // Watchdog Timer Prescaler Bits
WDIE = $06;
WDIF = $07;
// Timer/Counter1 Control Register C
FOC1B = $06;
FOC1A = $07;
// General Timer/Counter Control Register
PSR = $00;
TSM = $07;
// Timer/Counter1 Control Register B
CS10 = $00; // Clock Select bits
CS11 = $01; // Clock Select bits
CS12 = $02; // Clock Select bits
ICES1 = $06;
ICNC1 = $07;
// Timer/Counter1 Control Register A
WGM10 = $00; // Pulse Width Modulator Select Bits
WGM11 = $01; // Pulse Width Modulator Select Bits
COM1B0 = $04; // Compare Output Mode 1B, bits
COM1B1 = $05; // Compare Output Mode 1B, bits
COM1A0 = $06; // Compare Output Mode 1A, bits
COM1A1 = $07; // Compare Output Mode 1A, bits
// Timer/Counter Control Register A
WGM00 = $00; // Waveform Generation Mode bits
WGM01 = $01; // Waveform Generation Mode bits
COM0B0 = $04; // Compare Match Output B Mode bits
COM0B1 = $05; // Compare Match Output B Mode bits
COM0A0 = $06; // Compare Match Output A Mode bits
COM0A1 = $07; // Compare Match Output A Mode bits
// Timer/Counter Control Register B
CS00 = $00; // Clock Select bits
CS01 = $01; // Clock Select bits
CS02 = $02; // Clock Select bits
WGM02 = $03;
FOC0B = $06;
FOC0A = $07;
// MCU Status Register
PORF = $00;
EXTRF = $01;
BORF = $02;
WDRF = $03;
// MCU Control Register
ISC00 = $00;
ISC01 = $01;
SM0 = $03; // Sleep Mode Select Bits
SM1 = $04; // Sleep Mode Select Bits
SE = $05;
// Store Program Memory Control and Status Register
SPMEN = $00;
PGERS = $01;
PGWRT = $02;
RFLB = $03;
CTPB = $04;
RSIG = $05;
// Timer/Counter0 Interrupt Flag Register
TOV0 = $00;
OCF0A = $01;
OCF0B = $02;
// Timer/Counter Interrupt Mask Register
TOIE0 = $00;
OCIE0A = $01;
OCIE0B = $02;
// General Interrupt Flag register
PCIF0 = $04; // Pin Change Interrupt Flags
PCIF1 = $05; // Pin Change Interrupt Flags
INTF0 = $06;
// General Interrupt Mask Register
PCIE0 = $04; // Pin Change Interrupt Enables
PCIE1 = $05; // Pin Change Interrupt Enables
INT0 = $06;
// Status Register
C = $00;
Z = $01;
N = $02;
V = $03;
S = $04;
H = $05;
T = $06;
I = $07;
// Digital Input Disable Register 0
ADC0D = $00;
ADC1D = $01;
ADC2D = $02;
ADC3D = $03;
ADC4D = $04;
ADC5D = $05;
ADC6D = $06;
ADC7D = $07;
// Digital Input Disable Register 1
ADC11D = $00;
ADC10D = $01;
ADC8D = $02;
ADC9D = $03;
// Port Control Register
BBMA = $00;
BBMB = $01;
// Remap Port Pins
U0MAP = $00;
SPIMAP = $01;
// Timer Output Compare Pin Mux Channel Output Enable
TOCC0OE = $00;
TOCC1OE = $01;
TOCC2OE = $02;
TOCC3OE = $03;
TOCC4OE = $04;
TOCC5OE = $05;
TOCC6OE = $06;
TOCC7OE = $07;
// Timer Output Compare Pin Mux Selection 0
TOCC0S0 = $00; // Timer Output Compare Channel 0 Selection Bits
TOCC0S1 = $01; // Timer Output Compare Channel 0 Selection Bits
TOCC1S0 = $02; // Timer Output Compare Channel 1 Selection Bits
TOCC1S1 = $03; // Timer Output Compare Channel 1 Selection Bits
TOCC2S0 = $04; // Timer Output Compare Channel 2 Selection Bits
TOCC2S1 = $05; // Timer Output Compare Channel 2 Selection Bits
TOCC3S0 = $06; // Timer Output Compare Channel 3 Selection Bits
TOCC3S1 = $07; // Timer Output Compare Channel 3 Selection Bits
// Timer Output Compare Pin Mux Selection 1
TOCC4S0 = $00; // Timer Output Compare Channel 4 Selection Bits
TOCC4S1 = $01; // Timer Output Compare Channel 4 Selection Bits
TOCC5S0 = $02; // Timer Output Compare Channel 5 Selection Bits
TOCC5S1 = $03; // Timer Output Compare Channel 5 Selection Bits
TOCC6S0 = $04; // Timer Output Compare Channel 6 Selection Bits
TOCC6S1 = $05; // Timer Output Compare Channel 6 Selection Bits
TOCC7S0 = $06; // Timer Output Compare Channel 7 Selection Bits
TOCC7S1 = $07; // Timer Output Compare Channel 7 Selection Bits
// Port High Drive Enable Register
PHDEA0 = $00; // PortA High Drive Enable
PHDEA1 = $01; // PortA High Drive Enable
// Power Reduction Register
PRADC = $00;
PRTIM0 = $01;
PRTIM1 = $02;
PRTIM2 = $03;
PRSPI = $04;
PRUSART0 = $05;
PRUSART1 = $06;
PRTWI = $07;
// Clock Control Register
CKSEL0 = $00; // Clock Select Bits
CKSEL1 = $01; // Clock Select Bits
CKSEL2 = $02; // Clock Select Bits
CKSEL3 = $03; // Clock Select Bits
SUT = $04;
CKOUTC = $05;
CSTR = $06;
OSCRDY = $07;
// Clock Prescale Register
CLKPS0 = $00; // Clock Prescaler Select Bits
CLKPS1 = $01; // Clock Prescaler Select Bits
CLKPS2 = $02; // Clock Prescaler Select Bits
CLKPS3 = $03; // Clock Prescaler Select Bits
// USART Control and Status Register D
SFDE0 = $05;
RXS0 = $06;
RXSIE0 = $07;
// USART Control and Status Register C
UCPOL0 = $00;
UCSZ00 = $01; // Character Size
UCSZ01 = $02; // Character Size
USBS0 = $03;
UPM00 = $04; // Parity Mode Bits
UPM01 = $05; // Parity Mode Bits
UMSEL00 = $06; // USART Mode Select
UMSEL01 = $07; // USART Mode Select
// USART Control and Status Register B
TXB80 = $00;
RXB80 = $01;
UCSZ02 = $02;
TXEN0 = $03;
RXEN0 = $04;
UDRIE0 = $05;
TXCIE0 = $06;
RXCIE0 = $07;
// USART Control and Status Register A
MPCM0 = $00;
U2X0 = $01;
UPE0 = $02;
DOR0 = $03;
FE0 = $04;
UDRE0 = $05;
TXC0 = $06;
RXC0 = $07;
// USART Control and Status Register D
SFDE1 = $05;
RXS1 = $06;
RXSIE1 = $07;
// USART Control and Status Register C
UCPOL1 = $00;
UCSZ10 = $01; // Character Size
UCSZ11 = $02; // Character Size
USBS1 = $03;
UPM10 = $04; // Parity Mode Bits
UPM11 = $05; // Parity Mode Bits
UMSEL10 = $06; // USART Mode Select
UMSEL11 = $07; // USART Mode Select
// USART Control and Status Register B
TXB81 = $00;
RXB81 = $01;
UCSZ12 = $02;
TXEN1 = $03;
RXEN1 = $04;
UDRIE1 = $05;
TXCIE1 = $06;
RXCIE1 = $07;
// USART Control and Status Register A
MPCM1 = $00;
U2X1 = $01;
UPE1 = $02;
DOR1 = $03;
FE1 = $04;
UDRE1 = $05;
TXC1 = $06;
RXC1 = $07;
// TWI Slave Data Register
TWSD0 = $00; // TWI slave data bit
TWSD1 = $01; // TWI slave data bit
TWSD2 = $02; // TWI slave data bit
TWSD3 = $03; // TWI slave data bit
TWSD4 = $04; // TWI slave data bit
TWSD5 = $05; // TWI slave data bit
TWSD6 = $06; // TWI slave data bit
TWSD7 = $07; // TWI slave data bit
// TWI Slave Address Mask Register
TWAE = $00;
TWSAM1 = $01; // TWI Address Mask Bits
TWSAM2 = $02; // TWI Address Mask Bits
TWSAM3 = $03; // TWI Address Mask Bits
TWSAM4 = $04; // TWI Address Mask Bits
TWSAM5 = $05; // TWI Address Mask Bits
TWSAM6 = $06; // TWI Address Mask Bits
TWSAM7 = $07; // TWI Address Mask Bits
// TWI Slave Status Register A
TWAS = $00;
TWDIR = $01;
TWBE = $02;
TWC = $03;
TWRA = $04;
TWCH = $05;
TWASIF = $06;
TWDIF = $07;
// TWI Slave Control Register B
TWCMD0 = $00;
TWCMD1 = $01;
TWAA = $02;
TWHNM = $03;
// TWI Slave Control Register A
TWSME = $00;
TWPME = $01;
TWSIE = $02;
TWEN = $03;
TWASIE = $04;
TWDIE = $05;
TWSHE = $07;
// SPI Status Register
SPI2X = $00;
WCOL = $06;
SPIF = $07;
// SPI Control Register
SPR0 = $00; // SPI Clock Rate Selects
SPR1 = $01; // SPI Clock Rate Selects
CPHA = $02;
CPOL = $03;
MSTR = $04;
DORD = $05;
SPE = $06;
SPIE = $07;
// Timer/Counter2 Control Register C
FOC2B = $06;
FOC2A = $07;
// Timer/Counter2 Control Register B
CS20 = $00; // Clock Select bits
CS21 = $01; // Clock Select bits
CS22 = $02; // Clock Select bits
ICES2 = $06;
ICNC2 = $07;
// Timer/Counter2 Control Register A
WGM20 = $00; // Pulse Width Modulator Select Bits
WGM21 = $01; // Pulse Width Modulator Select Bits
COM2B0 = $04; // Compare Output Mode 2B, bits
COM2B1 = $05; // Compare Output Mode 2B, bits
COM2A0 = $06; // Compare Output Mode 2A, bits
COM2A1 = $07; // Compare Output Mode 2A, bits
implementation
{$define RELBRANCHES}
{$i avrcommon.inc}
procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 2 Pin Change Interrupt Request 0
procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 3 Pin Change Interrupt Request 1
procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 4 Watchdog Time-out Interrupt
procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 5 Timer/Counter1 Capture Event
procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 6 Timer/Counter1 Compare Match A
procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 7 Timer/Counter1 Compare Match B
procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 8 Timer/Counter1 Overflow
procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 9 TimerCounter0 Compare Match A
procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 10 TimerCounter0 Compare Match B
procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 11 Timer/Couner0 Overflow
procedure ANA_COMP0_ISR; external name 'ANA_COMP0_ISR'; // Interrupt 12 Analog Comparator 0
procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 13 ADC Conversion Complete
procedure EE_RDY_ISR; external name 'EE_RDY_ISR'; // Interrupt 14 EEPROM Ready
procedure ANA_COMP1_ISR; external name 'ANA_COMP1_ISR'; // Interrupt 15 Analog Comparator 1
procedure TIMER2_CAPT_ISR; external name 'TIMER2_CAPT_ISR'; // Interrupt 16 Timer/Counter2 Capture Event
procedure TIMER2_COMPA_ISR; external name 'TIMER2_COMPA_ISR'; // Interrupt 17 Timer/Counter2 Compare Match A
procedure TIMER2_COMPB_ISR; external name 'TIMER2_COMPB_ISR'; // Interrupt 18 Timer/Counter2 Compare Match B
procedure TIMER2_OVF_ISR; external name 'TIMER2_OVF_ISR'; // Interrupt 19 Timer/Counter2 Overflow
procedure SPI_ISR; external name 'SPI_ISR'; // Interrupt 20 Serial Peripheral Interface
procedure USART0_START_ISR; external name 'USART0_START_ISR'; // Interrupt 21 USART0, Start
procedure USART0_RX_ISR; external name 'USART0_RX_ISR'; // Interrupt 22 USART0, Rx Complete
procedure USART0_UDRE_ISR; external name 'USART0_UDRE_ISR'; // Interrupt 23 USART0 Data Register Empty
procedure USART0_TX_ISR; external name 'USART0_TX_ISR'; // Interrupt 24 USART0, Tx Complete
procedure USART1_START_ISR; external name 'USART1_START_ISR'; // Interrupt 25 USART1, Start
procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 26 USART1, Rx Complete
procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 27 USART1 Data Register Empty
procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 28 USART1, Tx Complete
procedure TWI_SLAVE_ISR; external name 'TWI_SLAVE_ISR'; // Interrupt 29 Two-wire Serial Interface
procedure _FPC_start; assembler; nostackframe;
label
_start;
asm
.init
.globl _start
rjmp _start
rjmp INT0_ISR
rjmp PCINT0_ISR
rjmp PCINT1_ISR
rjmp WDT_ISR
rjmp TIMER1_CAPT_ISR
rjmp TIMER1_COMPA_ISR
rjmp TIMER1_COMPB_ISR
rjmp TIMER1_OVF_ISR
rjmp TIMER0_COMPA_ISR
rjmp TIMER0_COMPB_ISR
rjmp TIMER0_OVF_ISR
rjmp ANA_COMP0_ISR
rjmp ADC_ISR
rjmp EE_RDY_ISR
rjmp ANA_COMP1_ISR
rjmp TIMER2_CAPT_ISR
rjmp TIMER2_COMPA_ISR
rjmp TIMER2_COMPB_ISR
rjmp TIMER2_OVF_ISR
rjmp SPI_ISR
rjmp USART0_START_ISR
rjmp USART0_RX_ISR
rjmp USART0_UDRE_ISR
rjmp USART0_TX_ISR
rjmp USART1_START_ISR
rjmp USART1_RX_ISR
rjmp USART1_UDRE_ISR
rjmp USART1_TX_ISR
rjmp TWI_SLAVE_ISR
{$i start.inc}
.weak INT0_ISR
.weak PCINT0_ISR
.weak PCINT1_ISR
.weak WDT_ISR
.weak TIMER1_CAPT_ISR
.weak TIMER1_COMPA_ISR
.weak TIMER1_COMPB_ISR
.weak TIMER1_OVF_ISR
.weak TIMER0_COMPA_ISR
.weak TIMER0_COMPB_ISR
.weak TIMER0_OVF_ISR
.weak ANA_COMP0_ISR
.weak ADC_ISR
.weak EE_RDY_ISR
.weak ANA_COMP1_ISR
.weak TIMER2_CAPT_ISR
.weak TIMER2_COMPA_ISR
.weak TIMER2_COMPB_ISR
.weak TIMER2_OVF_ISR
.weak SPI_ISR
.weak USART0_START_ISR
.weak USART0_RX_ISR
.weak USART0_UDRE_ISR
.weak USART0_TX_ISR
.weak USART1_START_ISR
.weak USART1_RX_ISR
.weak USART1_UDRE_ISR
.weak USART1_TX_ISR
.weak TWI_SLAVE_ISR
.set INT0_ISR, Default_IRQ_handler
.set PCINT0_ISR, Default_IRQ_handler
.set PCINT1_ISR, Default_IRQ_handler
.set WDT_ISR, Default_IRQ_handler
.set TIMER1_CAPT_ISR, Default_IRQ_handler
.set TIMER1_COMPA_ISR, Default_IRQ_handler
.set TIMER1_COMPB_ISR, Default_IRQ_handler
.set TIMER1_OVF_ISR, Default_IRQ_handler
.set TIMER0_COMPA_ISR, Default_IRQ_handler
.set TIMER0_COMPB_ISR, Default_IRQ_handler
.set TIMER0_OVF_ISR, Default_IRQ_handler
.set ANA_COMP0_ISR, Default_IRQ_handler
.set ADC_ISR, Default_IRQ_handler
.set EE_RDY_ISR, Default_IRQ_handler
.set ANA_COMP1_ISR, Default_IRQ_handler
.set TIMER2_CAPT_ISR, Default_IRQ_handler
.set TIMER2_COMPA_ISR, Default_IRQ_handler
.set TIMER2_COMPB_ISR, Default_IRQ_handler
.set TIMER2_OVF_ISR, Default_IRQ_handler
.set SPI_ISR, Default_IRQ_handler
.set USART0_START_ISR, Default_IRQ_handler
.set USART0_RX_ISR, Default_IRQ_handler
.set USART0_UDRE_ISR, Default_IRQ_handler
.set USART0_TX_ISR, Default_IRQ_handler
.set USART1_START_ISR, Default_IRQ_handler
.set USART1_RX_ISR, Default_IRQ_handler
.set USART1_UDRE_ISR, Default_IRQ_handler
.set USART1_TX_ISR, Default_IRQ_handler
.set TWI_SLAVE_ISR, Default_IRQ_handler
end;
end.