1
0
mirror of synced 2024-06-14 11:09:51 +02:00
avr_demo/button_debounce/main.lss

2052 lines
72 KiB
Plaintext
Raw Normal View History

2011-10-11 23:03:48 +02:00
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000050 00800100 00000e7a 00000f0e 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000e7a 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000256 00800150 00800150 00000f5e 2**0
ALLOC
3 .stab 00000c84 00000000 00000000 00000f60 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 0000019d 00000000 00000000 00001be4 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 000001c8 00000000 00000000 00001d88 2**3
CONTENTS, READONLY, DEBUGGING
6 .debug_info 0000145e 00000000 00000000 00001f50 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 00000983 00000000 00000000 000033ae 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 00000953 00000000 00000000 00003d31 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 0000035c 00000000 00000000 00004684 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 00000421 00000000 00000000 000049e0 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00000cc7 00000000 00000000 00004e01 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_ranges 00000048 00000000 00000000 00005ac8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end>
4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
2c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
38: 0c 94 7b 02 jmp 0x4f6 ; 0x4f6 <__vector_14>
3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
48: 0c 94 d7 00 jmp 0x1ae ; 0x1ae <__vector_18>
4c: 0c 94 17 01 jmp 0x22e ; 0x22e <__vector_19>
50: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
00000068 <__ctors_end>:
68: 11 24 eor r1, r1
6a: 1f be out 0x3f, r1 ; 63
6c: cf ef ldi r28, 0xFF ; 255
6e: d8 e0 ldi r29, 0x08 ; 8
70: de bf out 0x3e, r29 ; 62
72: cd bf out 0x3d, r28 ; 61
00000074 <__do_copy_data>:
74: 11 e0 ldi r17, 0x01 ; 1
76: a0 e0 ldi r26, 0x00 ; 0
78: b1 e0 ldi r27, 0x01 ; 1
7a: ea e7 ldi r30, 0x7A ; 122
7c: fe e0 ldi r31, 0x0E ; 14
7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10>
80: 05 90 lpm r0, Z+
82: 0d 92 st X+, r0
84: a0 35 cpi r26, 0x50 ; 80
86: b1 07 cpc r27, r17
88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc>
0000008a <__do_clear_bss>:
8a: 13 e0 ldi r17, 0x03 ; 3
8c: a0 e5 ldi r26, 0x50 ; 80
8e: b1 e0 ldi r27, 0x01 ; 1
90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start>
00000092 <.do_clear_bss_loop>:
92: 1d 92 st X+, r1
00000094 <.do_clear_bss_start>:
94: a6 3a cpi r26, 0xA6 ; 166
96: b1 07 cpc r27, r17
98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop>
9a: 0e 94 5b 03 call 0x6b6 ; 0x6b6 <main>
9e: 0c 94 3b 07 jmp 0xe76 ; 0xe76 <_exit>
000000a2 <__bad_interrupt>:
a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000a6 <digital_read>:
/* Make PORTB5 (Arduino digital 13) an output by setting bit in DDR. */
DDRB |= _BV(PORTB5);
}
uint8_t digital_read(int input_register, int pin) {
a6: cf 93 push r28
a8: df 93 push r29
aa: 00 d0 rcall .+0 ; 0xac <digital_read+0x6>
ac: cd b7 in r28, 0x3d ; 61
ae: de b7 in r29, 0x3e ; 62
b0: 9a 83 std Y+2, r25 ; 0x02
b2: 89 83 std Y+1, r24 ; 0x01
return bit_is_set(input_register, pin) != 0 ? 1 : 0;
b4: 89 81 ldd r24, Y+1 ; 0x01
b6: 90 e0 ldi r25, 0x00 ; 0
b8: 02 c0 rjmp .+4 ; 0xbe <digital_read+0x18>
ba: 95 95 asr r25
bc: 87 95 ror r24
be: 6a 95 dec r22
c0: e2 f7 brpl .-8 ; 0xba <digital_read+0x14>
}
c2: 81 70 andi r24, 0x01 ; 1
c4: 0f 90 pop r0
c6: 0f 90 pop r0
c8: df 91 pop r29
ca: cf 91 pop r28
cc: 08 95 ret
000000ce <digital_write>:
/* You could use cbi ie &= ~ or sbi ie |= but this makes code more readable. */
void digital_write(volatile uint8_t *data_port, uint8_t pin, uint8_t value) {
ce: fc 01 movw r30, r24
if (0 == value) {
*data_port &= ~(_BV(pin));
d0: 20 81 ld r18, Z
d2: 81 e0 ldi r24, 0x01 ; 1
d4: 90 e0 ldi r25, 0x00 ; 0
d6: 02 c0 rjmp .+4 ; 0xdc <digital_write+0xe>
d8: 88 0f add r24, r24
da: 99 1f adc r25, r25
dc: 6a 95 dec r22
de: e2 f7 brpl .-8 ; 0xd8 <digital_write+0xa>
return bit_is_set(input_register, pin) != 0 ? 1 : 0;
}
/* You could use cbi ie &= ~ or sbi ie |= but this makes code more readable. */
void digital_write(volatile uint8_t *data_port, uint8_t pin, uint8_t value) {
if (0 == value) {
e0: 44 23 and r20, r20
e2: 21 f4 brne .+8 ; 0xec <digital_write+0x1e>
*data_port &= ~(_BV(pin));
e4: 80 95 com r24
e6: 82 23 and r24, r18
e8: 80 83 st Z, r24
ea: 08 95 ret
} else {
*data_port |= _BV(pin);
ec: 28 2b or r18, r24
ee: 20 83 st Z, r18
f0: 08 95 ret
000000f2 <uart_init>:
/* http://www.cs.mun.ca/~rod/Winter2007/4723/notes/serial/serial.html */
void uart_init(void) {
tx_buffer.start = 0;
f2: 10 92 51 03 sts 0x0351, r1
f6: 10 92 50 03 sts 0x0350, r1
tx_buffer.end = 0;
fa: 10 92 53 03 sts 0x0353, r1
fe: 10 92 52 03 sts 0x0352, r1
rx_buffer.start = 0;
102: 10 92 95 03 sts 0x0395, r1
106: 10 92 94 03 sts 0x0394, r1
rx_buffer.end = 0;
10a: 10 92 97 03 sts 0x0397, r1
10e: 10 92 96 03 sts 0x0396, r1
UBRR0H = UBRRH_VALUE;
112: 10 92 c5 00 sts 0x00C5, r1
UBRR0L = UBRRL_VALUE;
116: 87 e6 ldi r24, 0x67 ; 103
118: 80 93 c4 00 sts 0x00C4, r24
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); /* 8-bit data */
11c: 86 e0 ldi r24, 0x06 ; 6
11e: 80 93 c2 00 sts 0x00C2, r24
UCSR0B = _BV(RXEN0) | _BV(TXEN0); /* Enable RX and TX */
122: 88 e1 ldi r24, 0x18 ; 24
124: 80 93 c1 00 sts 0x00C1, r24
sei();
128: 78 94 sei
}
12a: 08 95 ret
0000012c <uart_putchar>:
int uart_putchar(char c, FILE *stream) {
12c: 1f 93 push r17
12e: 18 2f mov r17, r24
if (c == '\n') {
130: 8a 30 cpi r24, 0x0A ; 10
132: 19 f4 brne .+6 ; 0x13a <uart_putchar+0xe>
uart_putchar('\r', stream);
134: 8d e0 ldi r24, 0x0D ; 13
136: 0e 94 96 00 call 0x12c ; 0x12c <uart_putchar>
}
int write_pointer = (tx_buffer.end + 1) % UART_TX_BUFFER_SIZE;
13a: 20 91 52 03 lds r18, 0x0352
13e: 30 91 53 03 lds r19, 0x0353
142: c9 01 movw r24, r18
144: 01 96 adiw r24, 0x01 ; 1
146: 60 e0 ldi r22, 0x00 ; 0
148: 71 e0 ldi r23, 0x01 ; 1
14a: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4>
if (write_pointer != tx_buffer.start){
14e: 40 91 50 03 lds r20, 0x0350
152: 50 91 51 03 lds r21, 0x0351
156: 84 17 cp r24, r20
158: 95 07 cpc r25, r21
15a: 81 f0 breq .+32 ; 0x17c <uart_putchar+0x50>
tx_buffer.buffer[tx_buffer.end] = c;
15c: f9 01 movw r30, r18
15e: ee 0f add r30, r30
160: ff 1f adc r31, r31
162: e0 5b subi r30, 0xB0 ; 176
164: fe 4f sbci r31, 0xFE ; 254
166: 10 83 st Z, r17
168: 11 82 std Z+1, r1 ; 0x01
tx_buffer.end = write_pointer;
16a: 90 93 53 03 sts 0x0353, r25
16e: 80 93 52 03 sts 0x0352, r24
/* Data available. Enable the transmit interrupt for serial port 0. */
UCSR0B |= _BV(UDRIE0);
172: 80 91 c1 00 lds r24, 0x00C1
176: 80 62 ori r24, 0x20 ; 32
178: 80 93 c1 00 sts 0x00C1, r24
}
return 0;
}
17c: 80 e0 ldi r24, 0x00 ; 0
17e: 90 e0 ldi r25, 0x00 ; 0
180: 1f 91 pop r17
182: 08 95 ret
00000184 <uart_getchar>:
int uart_getchar(FILE *stream) {
int read_pointer = (rx_buffer.start + 1) % UART_RX_BUFFER_SIZE;
184: 80 91 94 03 lds r24, 0x0394
188: 90 91 95 03 lds r25, 0x0395
18c: 01 96 adiw r24, 0x01 ; 1
18e: 60 e2 ldi r22, 0x20 ; 32
190: 70 e0 ldi r23, 0x00 ; 0
192: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4>
rx_buffer.start = read_pointer;
196: 90 93 95 03 sts 0x0395, r25
19a: 80 93 94 03 sts 0x0394, r24
return rx_buffer.buffer[read_pointer];
19e: fc 01 movw r30, r24
1a0: ee 0f add r30, r30
1a2: ff 1f adc r31, r31
1a4: ec 5a subi r30, 0xAC ; 172
1a6: fc 4f sbci r31, 0xFC ; 252
}
1a8: 80 81 ld r24, Z
1aa: 91 81 ldd r25, Z+1 ; 0x01
1ac: 08 95 ret
000001ae <__vector_18>:
ISR(USART_RX_vect) {
1ae: 1f 92 push r1
1b0: 0f 92 push r0
1b2: 0f b6 in r0, 0x3f ; 63
1b4: 0f 92 push r0
1b6: 11 24 eor r1, r1
1b8: 2f 93 push r18
1ba: 3f 93 push r19
1bc: 4f 93 push r20
1be: 5f 93 push r21
1c0: 6f 93 push r22
1c2: 7f 93 push r23
1c4: 8f 93 push r24
1c6: 9f 93 push r25
1c8: af 93 push r26
1ca: bf 93 push r27
1cc: ef 93 push r30
1ce: ff 93 push r31
int write_pointer = (rx_buffer.end + 1) % UART_RX_BUFFER_SIZE;
1d0: 20 91 96 03 lds r18, 0x0396
1d4: 30 91 97 03 lds r19, 0x0397
1d8: c9 01 movw r24, r18
1da: 01 96 adiw r24, 0x01 ; 1
1dc: 60 e2 ldi r22, 0x20 ; 32
1de: 70 e0 ldi r23, 0x00 ; 0
1e0: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4>
/* Add next byte to ringbuffer if it has space available. */
if (write_pointer != rx_buffer.start){
1e4: 40 91 94 03 lds r20, 0x0394
1e8: 50 91 95 03 lds r21, 0x0395
1ec: 84 17 cp r24, r20
1ee: 95 07 cpc r25, r21
1f0: 69 f0 breq .+26 ; 0x20c <__vector_18+0x5e>
rx_buffer.buffer[rx_buffer.end] = UDR0;
1f2: 40 91 c6 00 lds r20, 0x00C6
1f6: f9 01 movw r30, r18
1f8: ee 0f add r30, r30
1fa: ff 1f adc r31, r31
1fc: ec 5a subi r30, 0xAC ; 172
1fe: fc 4f sbci r31, 0xFC ; 252
200: 40 83 st Z, r20
202: 11 82 std Z+1, r1 ; 0x01
rx_buffer.end = write_pointer;
204: 90 93 97 03 sts 0x0397, r25
208: 80 93 96 03 sts 0x0396, r24
}
}
20c: ff 91 pop r31
20e: ef 91 pop r30
210: bf 91 pop r27
212: af 91 pop r26
214: 9f 91 pop r25
216: 8f 91 pop r24
218: 7f 91 pop r23
21a: 6f 91 pop r22
21c: 5f 91 pop r21
21e: 4f 91 pop r20
220: 3f 91 pop r19
222: 2f 91 pop r18
224: 0f 90 pop r0
226: 0f be out 0x3f, r0 ; 63
228: 0f 90 pop r0
22a: 1f 90 pop r1
22c: 18 95 reti
0000022e <__vector_19>:
ISR(USART_UDRE_vect){
22e: 1f 92 push r1
230: 0f 92 push r0
232: 0f b6 in r0, 0x3f ; 63
234: 0f 92 push r0
236: 11 24 eor r1, r1
238: 2f 93 push r18
23a: 3f 93 push r19
23c: 5f 93 push r21
23e: 6f 93 push r22
240: 7f 93 push r23
242: 8f 93 push r24
244: 9f 93 push r25
246: af 93 push r26
248: bf 93 push r27
24a: ef 93 push r30
24c: ff 93 push r31
int read_pointer = (tx_buffer.start + 1) % UART_TX_BUFFER_SIZE;
24e: 80 91 50 03 lds r24, 0x0350
252: 90 91 51 03 lds r25, 0x0351
256: 01 96 adiw r24, 0x01 ; 1
258: 60 e0 ldi r22, 0x00 ; 0
25a: 71 e0 ldi r23, 0x01 ; 1
25c: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4>
/* Transmit next byte if data available in ringbuffer. */
if (read_pointer != tx_buffer.end) {
260: 20 91 52 03 lds r18, 0x0352
264: 30 91 53 03 lds r19, 0x0353
268: 82 17 cp r24, r18
26a: 93 07 cpc r25, r19
26c: 69 f0 breq .+26 ; 0x288 <__vector_19+0x5a>
UDR0 = tx_buffer.buffer[read_pointer];
26e: fc 01 movw r30, r24
270: ee 0f add r30, r30
272: ff 1f adc r31, r31
274: e0 5b subi r30, 0xB0 ; 176
276: fe 4f sbci r31, 0xFE ; 254
278: 20 81 ld r18, Z
27a: 20 93 c6 00 sts 0x00C6, r18
tx_buffer.start = read_pointer;
27e: 90 93 51 03 sts 0x0351, r25
282: 80 93 50 03 sts 0x0350, r24
286: 05 c0 rjmp .+10 ; 0x292 <__vector_19+0x64>
} else {
/* Nothing to send. Disable the transmit interrupt for serial port 0. */
UCSR0B &= ~_BV(UDRIE0);
288: 80 91 c1 00 lds r24, 0x00C1
28c: 8f 7d andi r24, 0xDF ; 223
28e: 80 93 c1 00 sts 0x00C1, r24
}
}
292: ff 91 pop r31
294: ef 91 pop r30
296: bf 91 pop r27
298: af 91 pop r26
29a: 9f 91 pop r25
29c: 8f 91 pop r24
29e: 7f 91 pop r23
2a0: 6f 91 pop r22
2a2: 5f 91 pop r21
2a4: 3f 91 pop r19
2a6: 2f 91 pop r18
2a8: 0f 90 pop r0
2aa: 0f be out 0x3f, r0 ; 63
2ac: 0f 90 pop r0
2ae: 1f 90 pop r1
2b0: 18 95 reti
000002b2 <timer_init>:
* Initializes the timer, and resets the timer count to 0. Sets up the ISRs
* linked with timer0.
*/
void timer_init(){
//Set up the timer to run at F_CPU / 256, in normal mode (we reset TCNT0 in the ISR)
TCCR0A = 0x0;
2b2: 14 bc out 0x24, r1 ; 36
TCCR0B |= _BV(CS02);
2b4: 85 b5 in r24, 0x25 ; 37
2b6: 84 60 ori r24, 0x04 ; 4
2b8: 85 bd out 0x25, r24 ; 37
//Set compare value to be F_CPU / 1000 -- fire interrupt every millisecond
OCR0A = F_CPU / 256 / 1000;
2ba: 8e e3 ldi r24, 0x3E ; 62
2bc: 87 bd out 0x27, r24 ; 39
//Enable compare interrupt
TIMSK0 = _BV(OCIE0A);
2be: 82 e0 ldi r24, 0x02 ; 2
2c0: 80 93 6e 00 sts 0x006E, r24
//Reset count variables
_timer_millis = 0;
2c4: 10 92 98 03 sts 0x0398, r1
2c8: 10 92 99 03 sts 0x0399, r1
2cc: 10 92 9a 03 sts 0x039A, r1
2d0: 10 92 9b 03 sts 0x039B, r1
2d4: 10 92 9c 03 sts 0x039C, r1
2d8: 10 92 9d 03 sts 0x039D, r1
2dc: 10 92 9e 03 sts 0x039E, r1
2e0: 10 92 9f 03 sts 0x039F, r1
//Enable interrupts if the NO_INTERRUPT_ENABLE define is not set. If it is, you need to call sei() elsewhere.
#ifndef NO_INTERRUPT_ENABLE
sei();
2e4: 78 94 sei
#endif
DDRB = 0xFF;
2e6: 8f ef ldi r24, 0xFF ; 255
2e8: 84 b9 out 0x04, r24 ; 4
}
2ea: 08 95 ret
000002ec <timer_millis>:
/*
* Returns the number of milliseconds which have elapsed since the
* last time timer_init() was called. Overflows after about 49 days.
*/
uint64_t timer_millis(){
return _timer_millis;
2ec: 20 91 98 03 lds r18, 0x0398
2f0: 30 91 99 03 lds r19, 0x0399
2f4: 40 91 9a 03 lds r20, 0x039A
2f8: 50 91 9b 03 lds r21, 0x039B
2fc: 60 91 9c 03 lds r22, 0x039C
300: 70 91 9d 03 lds r23, 0x039D
304: 80 91 9e 03 lds r24, 0x039E
308: 90 91 9f 03 lds r25, 0x039F
}
30c: 08 95 ret
0000030e <timer_micros>:
/*
* Returns the number of microseconds which have elapsed since the
* last time timer_init() was called. Overflows after about 71 minutes.
*/
uint64_t timer_micros(){
30e: 2f 92 push r2
310: 3f 92 push r3
312: 4f 92 push r4
314: 5f 92 push r5
316: 6f 92 push r6
318: 7f 92 push r7
31a: 8f 92 push r8
31c: 9f 92 push r9
31e: af 92 push r10
320: bf 92 push r11
322: cf 92 push r12
324: df 92 push r13
326: ef 92 push r14
328: ff 92 push r15
32a: 0f 93 push r16
32c: 1f 93 push r17
32e: cf 93 push r28
330: df 93 push r29
332: 0f 92 push r0
334: cd b7 in r28, 0x3d ; 61
336: de b7 in r29, 0x3e ; 62
return (_timer_millis * 1000);
338: 80 90 98 03 lds r8, 0x0398
33c: 70 90 99 03 lds r7, 0x0399
340: 60 90 9a 03 lds r6, 0x039A
344: 50 90 9b 03 lds r5, 0x039B
348: 40 90 9c 03 lds r4, 0x039C
34c: 30 90 9d 03 lds r3, 0x039D
350: 20 90 9e 03 lds r2, 0x039E
354: 80 91 9f 03 lds r24, 0x039F
358: 89 83 std Y+1, r24 ; 0x01
35a: 28 2d mov r18, r8
35c: 37 2d mov r19, r7
35e: 46 2d mov r20, r6
360: 55 2d mov r21, r5
362: 64 2d mov r22, r4
364: 73 2d mov r23, r3
366: 82 2d mov r24, r2
368: 99 81 ldd r25, Y+1 ; 0x01
36a: 02 e0 ldi r16, 0x02 ; 2
36c: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3>
370: f2 2e mov r15, r18
372: 13 2f mov r17, r19
374: e4 2e mov r14, r20
376: d5 2e mov r13, r21
378: c6 2e mov r12, r22
37a: b7 2e mov r11, r23
37c: a8 2e mov r10, r24
37e: 99 2e mov r9, r25
380: 05 e0 ldi r16, 0x05 ; 5
382: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3>
386: b2 2f mov r27, r18
388: bf 19 sub r27, r15
38a: f1 e0 ldi r31, 0x01 ; 1
38c: 2b 17 cp r18, r27
38e: 08 f0 brcs .+2 ; 0x392 <timer_micros+0x84>
390: f0 e0 ldi r31, 0x00 ; 0
392: 23 2f mov r18, r19
394: 21 1b sub r18, r17
396: e1 e0 ldi r30, 0x01 ; 1
398: 32 17 cp r19, r18
39a: 08 f0 brcs .+2 ; 0x39e <timer_micros+0x90>
39c: e0 e0 ldi r30, 0x00 ; 0
39e: 02 2f mov r16, r18
3a0: 0f 1b sub r16, r31
3a2: 31 e0 ldi r19, 0x01 ; 1
3a4: 20 17 cp r18, r16
3a6: 08 f0 brcs .+2 ; 0x3aa <timer_micros+0x9c>
3a8: 30 e0 ldi r19, 0x00 ; 0
3aa: e3 2b or r30, r19
3ac: 34 2f mov r19, r20
3ae: 3e 19 sub r19, r14
3b0: 21 e0 ldi r18, 0x01 ; 1
3b2: 43 17 cp r20, r19
3b4: 08 f0 brcs .+2 ; 0x3b8 <timer_micros+0xaa>
3b6: 20 e0 ldi r18, 0x00 ; 0
3b8: f3 2e mov r15, r19
3ba: fe 1a sub r15, r30
3bc: 41 e0 ldi r20, 0x01 ; 1
3be: 3f 15 cp r19, r15
3c0: 08 f0 brcs .+2 ; 0x3c4 <timer_micros+0xb6>
3c2: 40 e0 ldi r20, 0x00 ; 0
3c4: 24 2b or r18, r20
3c6: 45 2f mov r20, r21
3c8: 4d 19 sub r20, r13
3ca: 31 e0 ldi r19, 0x01 ; 1
3cc: 54 17 cp r21, r20
3ce: 08 f0 brcs .+2 ; 0x3d2 <timer_micros+0xc4>
3d0: 30 e0 ldi r19, 0x00 ; 0
3d2: 14 2f mov r17, r20
3d4: 12 1b sub r17, r18
3d6: 21 e0 ldi r18, 0x01 ; 1
3d8: 41 17 cp r20, r17
3da: 08 f0 brcs .+2 ; 0x3de <timer_micros+0xd0>
3dc: 20 e0 ldi r18, 0x00 ; 0
3de: 32 2b or r19, r18
3e0: 46 2f mov r20, r22
3e2: 4c 19 sub r20, r12
3e4: 21 e0 ldi r18, 0x01 ; 1
3e6: 64 17 cp r22, r20
3e8: 08 f0 brcs .+2 ; 0x3ec <timer_micros+0xde>
3ea: 20 e0 ldi r18, 0x00 ; 0
3ec: a4 2f mov r26, r20
3ee: a3 1b sub r26, r19
3f0: 31 e0 ldi r19, 0x01 ; 1
3f2: 4a 17 cp r20, r26
3f4: 08 f0 brcs .+2 ; 0x3f8 <timer_micros+0xea>
3f6: 30 e0 ldi r19, 0x00 ; 0
3f8: 23 2b or r18, r19
3fa: 47 2f mov r20, r23
3fc: 4b 19 sub r20, r11
3fe: 31 e0 ldi r19, 0x01 ; 1
400: 74 17 cp r23, r20
402: 08 f0 brcs .+2 ; 0x406 <timer_micros+0xf8>
404: 30 e0 ldi r19, 0x00 ; 0
406: e4 2f mov r30, r20
408: e2 1b sub r30, r18
40a: 21 e0 ldi r18, 0x01 ; 1
40c: 4e 17 cp r20, r30
40e: 08 f0 brcs .+2 ; 0x412 <timer_micros+0x104>
410: 20 e0 ldi r18, 0x00 ; 0
412: 32 2b or r19, r18
414: 48 2f mov r20, r24
416: 4a 19 sub r20, r10
418: 21 e0 ldi r18, 0x01 ; 1
41a: 84 17 cp r24, r20
41c: 08 f0 brcs .+2 ; 0x420 <timer_micros+0x112>
41e: 20 e0 ldi r18, 0x00 ; 0
420: f4 2f mov r31, r20
422: f3 1b sub r31, r19
424: 81 e0 ldi r24, 0x01 ; 1
426: 4f 17 cp r20, r31
428: 08 f0 brcs .+2 ; 0x42c <timer_micros+0x11e>
42a: 80 e0 ldi r24, 0x00 ; 0
42c: 28 2b or r18, r24
42e: 99 19 sub r25, r9
430: 92 1b sub r25, r18
432: 2b 2f mov r18, r27
434: 28 0d add r18, r8
436: 31 e0 ldi r19, 0x01 ; 1
438: 2b 17 cp r18, r27
43a: 08 f0 brcs .+2 ; 0x43e <timer_micros+0x130>
43c: 30 e0 ldi r19, 0x00 ; 0
43e: 70 0e add r7, r16
440: 41 e0 ldi r20, 0x01 ; 1
442: 70 16 cp r7, r16
444: 08 f0 brcs .+2 ; 0x448 <timer_micros+0x13a>
446: 40 e0 ldi r20, 0x00 ; 0
448: 37 0d add r19, r7
44a: 81 e0 ldi r24, 0x01 ; 1
44c: 37 15 cp r19, r7
44e: 08 f0 brcs .+2 ; 0x452 <timer_micros+0x144>
450: 80 e0 ldi r24, 0x00 ; 0
452: 48 2b or r20, r24
454: 6f 0c add r6, r15
456: 51 e0 ldi r21, 0x01 ; 1
458: 6f 14 cp r6, r15
45a: 08 f0 brcs .+2 ; 0x45e <timer_micros+0x150>
45c: 50 e0 ldi r21, 0x00 ; 0
45e: 46 0d add r20, r6
460: 81 e0 ldi r24, 0x01 ; 1
462: 46 15 cp r20, r6
464: 08 f0 brcs .+2 ; 0x468 <timer_micros+0x15a>
466: 80 e0 ldi r24, 0x00 ; 0
468: 58 2b or r21, r24
46a: 51 0e add r5, r17
46c: 61 e0 ldi r22, 0x01 ; 1
46e: 51 16 cp r5, r17
470: 08 f0 brcs .+2 ; 0x474 <timer_micros+0x166>
472: 60 e0 ldi r22, 0x00 ; 0
474: 55 0d add r21, r5
476: 81 e0 ldi r24, 0x01 ; 1
478: 55 15 cp r21, r5
47a: 08 f0 brcs .+2 ; 0x47e <timer_micros+0x170>
47c: 80 e0 ldi r24, 0x00 ; 0
47e: 68 2b or r22, r24
480: 4a 0e add r4, r26
482: 71 e0 ldi r23, 0x01 ; 1
484: 4a 16 cp r4, r26
486: 08 f0 brcs .+2 ; 0x48a <timer_micros+0x17c>
488: 70 e0 ldi r23, 0x00 ; 0
48a: 64 0d add r22, r4
48c: 81 e0 ldi r24, 0x01 ; 1
48e: 64 15 cp r22, r4
490: 08 f0 brcs .+2 ; 0x494 <timer_micros+0x186>
492: 80 e0 ldi r24, 0x00 ; 0
494: 78 2b or r23, r24
496: 3e 0e add r3, r30
498: 81 e0 ldi r24, 0x01 ; 1
49a: 3e 16 cp r3, r30
49c: 08 f0 brcs .+2 ; 0x4a0 <timer_micros+0x192>
49e: 80 e0 ldi r24, 0x00 ; 0
4a0: 73 0d add r23, r3
4a2: e1 e0 ldi r30, 0x01 ; 1
4a4: 73 15 cp r23, r3
4a6: 08 f0 brcs .+2 ; 0x4aa <timer_micros+0x19c>
4a8: e0 e0 ldi r30, 0x00 ; 0
4aa: 8e 2b or r24, r30
4ac: 2f 0e add r2, r31
4ae: e1 e0 ldi r30, 0x01 ; 1
4b0: 2f 16 cp r2, r31
4b2: 08 f0 brcs .+2 ; 0x4b6 <timer_micros+0x1a8>
4b4: e0 e0 ldi r30, 0x00 ; 0
4b6: 82 0d add r24, r2
4b8: f1 e0 ldi r31, 0x01 ; 1
4ba: 82 15 cp r24, r2
4bc: 08 f0 brcs .+2 ; 0x4c0 <timer_micros+0x1b2>
4be: f0 e0 ldi r31, 0x00 ; 0
4c0: ef 2b or r30, r31
4c2: a9 81 ldd r26, Y+1 ; 0x01
4c4: 9a 0f add r25, r26
4c6: 9e 0f add r25, r30
4c8: 03 e0 ldi r16, 0x03 ; 3
4ca: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3>
}
4ce: 0f 90 pop r0
4d0: df 91 pop r29
4d2: cf 91 pop r28
4d4: 1f 91 pop r17
4d6: 0f 91 pop r16
4d8: ff 90 pop r15
4da: ef 90 pop r14
4dc: df 90 pop r13
4de: cf 90 pop r12
4e0: bf 90 pop r11
4e2: af 90 pop r10
4e4: 9f 90 pop r9
4e6: 8f 90 pop r8
4e8: 7f 90 pop r7
4ea: 6f 90 pop r6
4ec: 5f 90 pop r5
4ee: 4f 90 pop r4
4f0: 3f 90 pop r3
4f2: 2f 90 pop r2
4f4: 08 95 ret
000004f6 <__vector_14>:
/*
* The ISR for timer0 overflow. Increment the _timer_count here, and do the calculcations
* to increment _timer_millis as needed.
*/
ISR(TIMER0_COMPA_vect){
4f6: 1f 92 push r1
4f8: 0f 92 push r0
4fa: 0f b6 in r0, 0x3f ; 63
4fc: 0f 92 push r0
4fe: 11 24 eor r1, r1
500: 2f 93 push r18
502: 3f 93 push r19
504: 4f 93 push r20
506: 5f 93 push r21
508: 6f 93 push r22
50a: 7f 93 push r23
50c: 8f 93 push r24
50e: 9f 93 push r25
510: af 93 push r26
512: ef 93 push r30
514: ff 93 push r31
TCNT0 = 0;
516: 16 bc out 0x26, r1 ; 38
_timer_millis++;
518: 40 91 98 03 lds r20, 0x0398
51c: 30 91 99 03 lds r19, 0x0399
520: 20 91 9a 03 lds r18, 0x039A
524: 90 91 9b 03 lds r25, 0x039B
528: 80 91 9c 03 lds r24, 0x039C
52c: f0 91 9d 03 lds r31, 0x039D
530: e0 91 9e 03 lds r30, 0x039E
534: a0 91 9f 03 lds r26, 0x039F
538: 64 2f mov r22, r20
53a: 6f 5f subi r22, 0xFF ; 255
53c: 51 e0 ldi r21, 0x01 ; 1
53e: 64 17 cp r22, r20
540: 08 f0 brcs .+2 ; 0x544 <__vector_14+0x4e>
542: 50 e0 ldi r21, 0x00 ; 0
544: 53 0f add r21, r19
546: 41 e0 ldi r20, 0x01 ; 1
548: 53 17 cp r21, r19
54a: 08 f0 brcs .+2 ; 0x54e <__vector_14+0x58>
54c: 40 e0 ldi r20, 0x00 ; 0
54e: 42 0f add r20, r18
550: 31 e0 ldi r19, 0x01 ; 1
552: 42 17 cp r20, r18
554: 08 f0 brcs .+2 ; 0x558 <__vector_14+0x62>
556: 30 e0 ldi r19, 0x00 ; 0
558: 39 0f add r19, r25
55a: 21 e0 ldi r18, 0x01 ; 1
55c: 39 17 cp r19, r25
55e: 08 f0 brcs .+2 ; 0x562 <__vector_14+0x6c>
560: 20 e0 ldi r18, 0x00 ; 0
562: 28 0f add r18, r24
564: 91 e0 ldi r25, 0x01 ; 1
566: 28 17 cp r18, r24
568: 08 f0 brcs .+2 ; 0x56c <__vector_14+0x76>
56a: 90 e0 ldi r25, 0x00 ; 0
56c: 9f 0f add r25, r31
56e: 81 e0 ldi r24, 0x01 ; 1
570: 9f 17 cp r25, r31
572: 08 f0 brcs .+2 ; 0x576 <__vector_14+0x80>
574: 80 e0 ldi r24, 0x00 ; 0
576: 8e 0f add r24, r30
578: 71 e0 ldi r23, 0x01 ; 1
57a: 8e 17 cp r24, r30
57c: 08 f0 brcs .+2 ; 0x580 <__vector_14+0x8a>
57e: 70 e0 ldi r23, 0x00 ; 0
580: 7a 0f add r23, r26
582: 60 93 98 03 sts 0x0398, r22
586: 50 93 99 03 sts 0x0399, r21
58a: 40 93 9a 03 sts 0x039A, r20
58e: 30 93 9b 03 sts 0x039B, r19
592: 20 93 9c 03 sts 0x039C, r18
596: 90 93 9d 03 sts 0x039D, r25
59a: 80 93 9e 03 sts 0x039E, r24
59e: 70 93 9f 03 sts 0x039F, r23
}
5a2: ff 91 pop r31
5a4: ef 91 pop r30
5a6: af 91 pop r26
5a8: 9f 91 pop r25
5aa: 8f 91 pop r24
5ac: 7f 91 pop r23
5ae: 6f 91 pop r22
5b0: 5f 91 pop r21
5b2: 4f 91 pop r20
5b4: 3f 91 pop r19
5b6: 2f 91 pop r18
5b8: 0f 90 pop r0
5ba: 0f be out 0x3f, r0 ; 63
5bc: 0f 90 pop r0
5be: 1f 90 pop r1
5c0: 18 95 reti
000005c2 <__ashldi3>:
5c2: cf 92 push r12
5c4: df 92 push r13
5c6: ef 92 push r14
5c8: ff 92 push r15
5ca: 0f 93 push r16
5cc: cf 93 push r28
5ce: df 93 push r29
5d0: cd b7 in r28, 0x3d ; 61
5d2: de b7 in r29, 0x3e ; 62
5d4: 60 97 sbiw r28, 0x10 ; 16
5d6: 0f b6 in r0, 0x3f ; 63
5d8: f8 94 cli
5da: de bf out 0x3e, r29 ; 62
5dc: 0f be out 0x3f, r0 ; 63
5de: cd bf out 0x3d, r28 ; 61
5e0: 00 23 and r16, r16
5e2: 09 f4 brne .+2 ; 0x5e6 <__ashldi3+0x24>
5e4: 5a c0 rjmp .+180 ; 0x69a <__ashldi3+0xd8>
5e6: 29 87 std Y+9, r18 ; 0x09
5e8: 3a 87 std Y+10, r19 ; 0x0a
5ea: 4b 87 std Y+11, r20 ; 0x0b
5ec: 5c 87 std Y+12, r21 ; 0x0c
5ee: 6d 87 std Y+13, r22 ; 0x0d
5f0: 7e 87 std Y+14, r23 ; 0x0e
5f2: 8f 87 std Y+15, r24 ; 0x0f
5f4: 98 8b std Y+16, r25 ; 0x10
5f6: 80 e2 ldi r24, 0x20 ; 32
5f8: 80 1b sub r24, r16
5fa: 49 85 ldd r20, Y+9 ; 0x09
5fc: 5a 85 ldd r21, Y+10 ; 0x0a
5fe: 6b 85 ldd r22, Y+11 ; 0x0b
600: 7c 85 ldd r23, Y+12 ; 0x0c
602: 18 16 cp r1, r24
604: b4 f0 brlt .+44 ; 0x632 <__ashldi3+0x70>
606: 19 82 std Y+1, r1 ; 0x01
608: 1a 82 std Y+2, r1 ; 0x02
60a: 1b 82 std Y+3, r1 ; 0x03
60c: 1c 82 std Y+4, r1 ; 0x04
60e: 99 27 eor r25, r25
610: 87 fd sbrc r24, 7
612: 90 95 com r25
614: 90 95 com r25
616: 81 95 neg r24
618: 9f 4f sbci r25, 0xFF ; 255
61a: 04 c0 rjmp .+8 ; 0x624 <__ashldi3+0x62>
61c: 44 0f add r20, r20
61e: 55 1f adc r21, r21
620: 66 1f adc r22, r22
622: 77 1f adc r23, r23
624: 8a 95 dec r24
626: d2 f7 brpl .-12 ; 0x61c <__ashldi3+0x5a>
628: 4d 83 std Y+5, r20 ; 0x05
62a: 5e 83 std Y+6, r21 ; 0x06
62c: 6f 83 std Y+7, r22 ; 0x07
62e: 78 87 std Y+8, r23 ; 0x08
630: 2c c0 rjmp .+88 ; 0x68a <__ashldi3+0xc8>
632: 6a 01 movw r12, r20
634: 7b 01 movw r14, r22
636: 00 2e mov r0, r16
638: 04 c0 rjmp .+8 ; 0x642 <__ashldi3+0x80>
63a: cc 0c add r12, r12
63c: dd 1c adc r13, r13
63e: ee 1c adc r14, r14
640: ff 1c adc r15, r15
642: 0a 94 dec r0
644: d2 f7 brpl .-12 ; 0x63a <__ashldi3+0x78>
646: c9 82 std Y+1, r12 ; 0x01
648: da 82 std Y+2, r13 ; 0x02
64a: eb 82 std Y+3, r14 ; 0x03
64c: fc 82 std Y+4, r15 ; 0x04
64e: 6a 01 movw r12, r20
650: 7b 01 movw r14, r22
652: 04 c0 rjmp .+8 ; 0x65c <__ashldi3+0x9a>
654: f6 94 lsr r15
656: e7 94 ror r14
658: d7 94 ror r13
65a: c7 94 ror r12
65c: 8a 95 dec r24
65e: d2 f7 brpl .-12 ; 0x654 <__ashldi3+0x92>
660: d7 01 movw r26, r14
662: c6 01 movw r24, r12
664: 4d 85 ldd r20, Y+13 ; 0x0d
666: 5e 85 ldd r21, Y+14 ; 0x0e
668: 6f 85 ldd r22, Y+15 ; 0x0f
66a: 78 89 ldd r23, Y+16 ; 0x10
66c: 04 c0 rjmp .+8 ; 0x676 <__ashldi3+0xb4>
66e: 44 0f add r20, r20
670: 55 1f adc r21, r21
672: 66 1f adc r22, r22
674: 77 1f adc r23, r23
676: 0a 95 dec r16
678: d2 f7 brpl .-12 ; 0x66e <__ashldi3+0xac>
67a: 84 2b or r24, r20
67c: 95 2b or r25, r21
67e: a6 2b or r26, r22
680: b7 2b or r27, r23
682: 8d 83 std Y+5, r24 ; 0x05
684: 9e 83 std Y+6, r25 ; 0x06
686: af 83 std Y+7, r26 ; 0x07
688: b8 87 std Y+8, r27 ; 0x08
68a: 29 81 ldd r18, Y+1 ; 0x01
68c: 3a 81 ldd r19, Y+2 ; 0x02
68e: 4b 81 ldd r20, Y+3 ; 0x03
690: 5c 81 ldd r21, Y+4 ; 0x04
692: 6d 81 ldd r22, Y+5 ; 0x05
694: 7e 81 ldd r23, Y+6 ; 0x06
696: 8f 81 ldd r24, Y+7 ; 0x07
698: 98 85 ldd r25, Y+8 ; 0x08
69a: 60 96 adiw r28, 0x10 ; 16
69c: 0f b6 in r0, 0x3f ; 63
69e: f8 94 cli
6a0: de bf out 0x3e, r29 ; 62
6a2: 0f be out 0x3f, r0 ; 63
6a4: cd bf out 0x3d, r28 ; 61
6a6: df 91 pop r29
6a8: cf 91 pop r28
6aa: 0f 91 pop r16
6ac: ff 90 pop r15
6ae: ef 90 pop r14
6b0: df 90 pop r13
6b2: cf 90 pop r12
6b4: 08 95 ret
000006b6 <main>:
}
}
int main(void) {
6b6: cf 93 push r28
6b8: df 93 push r29
6ba: 00 d0 rcall .+0 ; 0x6bc <main+0x6>
6bc: cd b7 in r28, 0x3d ; 61
6be: de b7 in r29, 0x3e ; 62
#include "timer.h"
void init(void) {
/* Make PORTD2 (Arduino digital 2) input by clearing bit in DDR */
DDRD &= ~(_BV(PORTD2));
6c0: 52 98 cbi 0x0a, 2 ; 10
/* you dont connect anything to pin and if you try to read it, it will read as 1. Now, */
/* when you externally drive that pin to zero(i.e. connect to ground / or pull-down), */
/* only then it will be read as 0. */
/* Enable pullups by setting bits in PORT. Default state is now high. */
PORTD |= (_BV(PORTD2));
6c2: 5a 9a sbi 0x0b, 2 ; 11
/* Make PORTB5 (Arduino digital 13) an output by setting bit in DDR. */
DDRB |= _BV(PORTB5);
6c4: 25 9a sbi 0x04, 5 ; 4
}
int main(void) {
init();
timer_init();
6c6: 0e 94 59 01 call 0x2b2 ; 0x2b2 <timer_init>
uart_init();
6ca: 0e 94 79 00 call 0xf2 ; 0xf2 <uart_init>
stdout = &uart_output;
6ce: 82 e4 ldi r24, 0x42 ; 66
6d0: 91 e0 ldi r25, 0x01 ; 1
6d2: 90 93 a3 03 sts 0x03A3, r25
6d6: 80 93 a2 03 sts 0x03A2, r24
stdin = &uart_input;
6da: 84 e3 ldi r24, 0x34 ; 52
6dc: 91 e0 ldi r25, 0x01 ; 1
6de: 90 93 a1 03 sts 0x03A1, r25
6e2: 80 93 a0 03 sts 0x03A0, r24
uint8_t current_reading;
uint8_t previous_reading = 0;
uint8_t current_state = 0;
uint8_t previous_state = 0;
6e6: 77 24 eor r7, r7
stdout = &uart_output;
stdin = &uart_input;
uint8_t current_reading;
uint8_t previous_reading = 0;
uint8_t current_state = 0;
6e8: 00 e0 ldi r16, 0x00 ; 0
uart_init();
stdout = &uart_output;
stdin = &uart_input;
uint8_t current_reading;
uint8_t previous_reading = 0;
6ea: 20 e0 ldi r18, 0x00 ; 0
current_reading = digital_read(PIND, PIND2);
if (current_reading != previous_reading) {
/* Note the time in millis of last change of button state. */
last_toggle_time = timer_millis();
printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time);
6ec: 40 e0 ldi r20, 0x00 ; 0
6ee: 44 2e mov r4, r20
6f0: 41 e0 ldi r20, 0x01 ; 1
6f2: 54 2e mov r5, r20
current_state = current_reading;
}
/* Just for debugging purposes. */
if (current_state != previous_state) {
printf("+ State toggled %d (%d)\n", current_state, last_toggle_time);
6f4: 5b e1 ldi r21, 0x1B ; 27
6f6: 25 2e mov r2, r21
6f8: 51 e0 ldi r21, 0x01 ; 1
6fa: 35 2e mov r3, r21
6fc: 01 c0 rjmp .+2 ; 0x700 <main+0x4a>
DDRB |= _BV(PORTB5);
}
uint8_t digital_read(int input_register, int pin) {
return bit_is_set(input_register, pin) != 0 ? 1 : 0;
6fe: 21 2f mov r18, r17
uint64_t last_toggle_time;
while (1) {
current_reading = digital_read(PIND, PIND2);
700: 89 b1 in r24, 0x09 ; 9
702: 89 83 std Y+1, r24 ; 0x01
704: 1a 82 std Y+2, r1 ; 0x02
DDRB |= _BV(PORTB5);
}
uint8_t digital_read(int input_register, int pin) {
return bit_is_set(input_register, pin) != 0 ? 1 : 0;
706: 89 81 ldd r24, Y+1 ; 0x01
708: 90 e0 ldi r25, 0x00 ; 0
70a: 95 95 asr r25
70c: 87 95 ror r24
70e: 95 95 asr r25
710: 87 95 ror r24
712: 18 2f mov r17, r24
714: 11 70 andi r17, 0x01 ; 1
uint64_t last_toggle_time;
while (1) {
current_reading = digital_read(PIND, PIND2);
if (current_reading != previous_reading) {
716: 12 17 cp r17, r18
718: 59 f1 breq .+86 ; 0x770 <main+0xba>
/* Note the time in millis of last change of button state. */
last_toggle_time = timer_millis();
71a: 0e 94 76 01 call 0x2ec ; 0x2ec <timer_millis>
71e: 49 01 movw r8, r18
720: 5a 01 movw r10, r20
722: 6b 01 movw r12, r22
724: 7c 01 movw r14, r24
printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time);
726: 8d b7 in r24, 0x3d ; 61
728: 9e b7 in r25, 0x3e ; 62
72a: 0c 97 sbiw r24, 0x0c ; 12
72c: 0f b6 in r0, 0x3f ; 63
72e: f8 94 cli
730: 9e bf out 0x3e, r25 ; 62
732: 0f be out 0x3f, r0 ; 63
734: 8d bf out 0x3d, r24 ; 61
736: ed b7 in r30, 0x3d ; 61
738: fe b7 in r31, 0x3e ; 62
73a: 31 96 adiw r30, 0x01 ; 1
73c: ad b7 in r26, 0x3d ; 61
73e: be b7 in r27, 0x3e ; 62
740: 12 96 adiw r26, 0x02 ; 2
742: 5c 92 st X, r5
744: 4e 92 st -X, r4
746: 11 97 sbiw r26, 0x01 ; 1
748: 12 83 std Z+2, r17 ; 0x02
74a: 13 82 std Z+3, r1 ; 0x03
74c: 84 82 std Z+4, r8 ; 0x04
74e: 95 82 std Z+5, r9 ; 0x05
750: a6 82 std Z+6, r10 ; 0x06
752: b7 82 std Z+7, r11 ; 0x07
754: c0 86 std Z+8, r12 ; 0x08
756: d1 86 std Z+9, r13 ; 0x09
758: e2 86 std Z+10, r14 ; 0x0a
75a: f3 86 std Z+11, r15 ; 0x0b
75c: 0e 94 6f 04 call 0x8de ; 0x8de <printf>
760: 8d b7 in r24, 0x3d ; 61
762: 9e b7 in r25, 0x3e ; 62
764: 0c 96 adiw r24, 0x0c ; 12
766: 0f b6 in r0, 0x3f ; 63
768: f8 94 cli
76a: 9e bf out 0x3e, r25 ; 62
76c: 0f be out 0x3f, r0 ; 63
76e: 8d bf out 0x3d, r24 ; 61
}
/* If there has been more than 10 millis since last toggling */
/* of button state, assume it is real and not bouncing noise. */
if ((timer_millis() - last_toggle_time) > 10) {
770: 0e 94 76 01 call 0x2ec ; 0x2ec <timer_millis>
774: e2 2f mov r30, r18
776: e8 19 sub r30, r8
778: f1 e0 ldi r31, 0x01 ; 1
77a: 2e 17 cp r18, r30
77c: 08 f0 brcs .+2 ; 0x780 <main+0xca>
77e: f0 e0 ldi r31, 0x00 ; 0
780: a3 2f mov r26, r19
782: a9 19 sub r26, r9
784: 21 e0 ldi r18, 0x01 ; 1
786: 3a 17 cp r19, r26
788: 08 f0 brcs .+2 ; 0x78c <main+0xd6>
78a: 20 e0 ldi r18, 0x00 ; 0
78c: 3a 2f mov r19, r26
78e: 3f 1b sub r19, r31
790: f1 e0 ldi r31, 0x01 ; 1
792: a3 17 cp r26, r19
794: 08 f0 brcs .+2 ; 0x798 <main+0xe2>
796: f0 e0 ldi r31, 0x00 ; 0
798: 2f 2b or r18, r31
79a: a4 2f mov r26, r20
79c: aa 19 sub r26, r10
79e: f1 e0 ldi r31, 0x01 ; 1
7a0: 4a 17 cp r20, r26
7a2: 08 f0 brcs .+2 ; 0x7a6 <main+0xf0>
7a4: f0 e0 ldi r31, 0x00 ; 0
7a6: 4a 2f mov r20, r26
7a8: 42 1b sub r20, r18
7aa: 21 e0 ldi r18, 0x01 ; 1
7ac: a4 17 cp r26, r20
7ae: 08 f0 brcs .+2 ; 0x7b2 <main+0xfc>
7b0: 20 e0 ldi r18, 0x00 ; 0
7b2: f2 2b or r31, r18
7b4: a5 2f mov r26, r21
7b6: ab 19 sub r26, r11
7b8: 21 e0 ldi r18, 0x01 ; 1
7ba: 5a 17 cp r21, r26
7bc: 08 f0 brcs .+2 ; 0x7c0 <main+0x10a>
7be: 20 e0 ldi r18, 0x00 ; 0
7c0: 5a 2f mov r21, r26
7c2: 5f 1b sub r21, r31
7c4: f1 e0 ldi r31, 0x01 ; 1
7c6: a5 17 cp r26, r21
7c8: 08 f0 brcs .+2 ; 0x7cc <main+0x116>
7ca: f0 e0 ldi r31, 0x00 ; 0
7cc: 2f 2b or r18, r31
7ce: a6 2f mov r26, r22
7d0: ac 19 sub r26, r12
7d2: f1 e0 ldi r31, 0x01 ; 1
7d4: 6a 17 cp r22, r26
7d6: 08 f0 brcs .+2 ; 0x7da <main+0x124>
7d8: f0 e0 ldi r31, 0x00 ; 0
7da: 6a 2f mov r22, r26
7dc: 62 1b sub r22, r18
7de: 21 e0 ldi r18, 0x01 ; 1
7e0: a6 17 cp r26, r22
7e2: 08 f0 brcs .+2 ; 0x7e6 <main+0x130>
7e4: 20 e0 ldi r18, 0x00 ; 0
7e6: f2 2b or r31, r18
7e8: 27 2f mov r18, r23
7ea: 2d 19 sub r18, r13
7ec: a1 e0 ldi r26, 0x01 ; 1
7ee: 72 17 cp r23, r18
7f0: 08 f0 brcs .+2 ; 0x7f4 <main+0x13e>
7f2: a0 e0 ldi r26, 0x00 ; 0
7f4: 72 2f mov r23, r18
7f6: 7f 1b sub r23, r31
7f8: f1 e0 ldi r31, 0x01 ; 1
7fa: 27 17 cp r18, r23
7fc: 08 f0 brcs .+2 ; 0x800 <main+0x14a>
7fe: f0 e0 ldi r31, 0x00 ; 0
800: af 2b or r26, r31
802: f8 2f mov r31, r24
804: fe 19 sub r31, r14
806: 21 e0 ldi r18, 0x01 ; 1
808: 8f 17 cp r24, r31
80a: 08 f0 brcs .+2 ; 0x80e <main+0x158>
80c: 20 e0 ldi r18, 0x00 ; 0
80e: 8f 2f mov r24, r31
810: 8a 1b sub r24, r26
812: a1 e0 ldi r26, 0x01 ; 1
814: f8 17 cp r31, r24
816: 08 f0 brcs .+2 ; 0x81a <main+0x164>
818: a0 e0 ldi r26, 0x00 ; 0
81a: 2a 2b or r18, r26
81c: 9f 19 sub r25, r15
81e: 92 17 cp r25, r18
820: 71 f4 brne .+28 ; 0x83e <main+0x188>
822: 88 23 and r24, r24
824: 61 f4 brne .+24 ; 0x83e <main+0x188>
826: 77 23 and r23, r23
828: 51 f4 brne .+20 ; 0x83e <main+0x188>
82a: 66 23 and r22, r22
82c: 41 f4 brne .+16 ; 0x83e <main+0x188>
82e: 55 23 and r21, r21
830: 31 f4 brne .+12 ; 0x83e <main+0x188>
832: 44 23 and r20, r20
834: 21 f4 brne .+8 ; 0x83e <main+0x188>
836: 33 23 and r19, r19
838: 11 f4 brne .+4 ; 0x83e <main+0x188>
83a: eb 30 cpi r30, 0x0B ; 11
83c: 08 f0 brcs .+2 ; 0x840 <main+0x18a>
DDRB |= _BV(PORTB5);
}
uint8_t digital_read(int input_register, int pin) {
return bit_is_set(input_register, pin) != 0 ? 1 : 0;
83e: 01 2f mov r16, r17
if ((timer_millis() - last_toggle_time) > 10) {
current_state = current_reading;
}
/* Just for debugging purposes. */
if (current_state != previous_state) {
840: 07 15 cp r16, r7
842: 09 f4 brne .+2 ; 0x846 <main+0x190>
844: 5c cf rjmp .-328 ; 0x6fe <main+0x48>
printf("+ State toggled %d (%d)\n", current_state, last_toggle_time);
846: ad b7 in r26, 0x3d ; 61
848: be b7 in r27, 0x3e ; 62
84a: 1c 97 sbiw r26, 0x0c ; 12
84c: 0f b6 in r0, 0x3f ; 63
84e: f8 94 cli
850: be bf out 0x3e, r27 ; 62
852: 0f be out 0x3f, r0 ; 63
854: ad bf out 0x3d, r26 ; 61
856: ed b7 in r30, 0x3d ; 61
858: fe b7 in r31, 0x3e ; 62
85a: 31 96 adiw r30, 0x01 ; 1
85c: 12 96 adiw r26, 0x02 ; 2
85e: 3c 92 st X, r3
860: 2e 92 st -X, r2
862: 11 97 sbiw r26, 0x01 ; 1
864: 02 83 std Z+2, r16 ; 0x02
866: 13 82 std Z+3, r1 ; 0x03
868: 84 82 std Z+4, r8 ; 0x04
86a: 95 82 std Z+5, r9 ; 0x05
86c: a6 82 std Z+6, r10 ; 0x06
86e: b7 82 std Z+7, r11 ; 0x07
870: c0 86 std Z+8, r12 ; 0x08
872: d1 86 std Z+9, r13 ; 0x09
874: e2 86 std Z+10, r14 ; 0x0a
876: f3 86 std Z+11, r15 ; 0x0b
878: 0e 94 6f 04 call 0x8de ; 0x8de <printf>
87c: 8d b7 in r24, 0x3d ; 61
87e: 9e b7 in r25, 0x3e ; 62
880: 0c 96 adiw r24, 0x0c ; 12
882: 0f b6 in r0, 0x3f ; 63
884: f8 94 cli
886: 9e bf out 0x3e, r25 ; 62
888: 0f be out 0x3f, r0 ; 63
88a: 8d bf out 0x3d, r24 ; 61
88c: 70 2e mov r7, r16
88e: 37 cf rjmp .-402 ; 0x6fe <main+0x48>
00000890 <__divmodhi4>:
890: 97 fb bst r25, 7
892: 09 2e mov r0, r25
894: 07 26 eor r0, r23
896: 0a d0 rcall .+20 ; 0x8ac <__divmodhi4_neg1>
898: 77 fd sbrc r23, 7
89a: 04 d0 rcall .+8 ; 0x8a4 <__divmodhi4_neg2>
89c: 0c d0 rcall .+24 ; 0x8b6 <__udivmodhi4>
89e: 06 d0 rcall .+12 ; 0x8ac <__divmodhi4_neg1>
8a0: 00 20 and r0, r0
8a2: 1a f4 brpl .+6 ; 0x8aa <__divmodhi4_exit>
000008a4 <__divmodhi4_neg2>:
8a4: 70 95 com r23
8a6: 61 95 neg r22
8a8: 7f 4f sbci r23, 0xFF ; 255
000008aa <__divmodhi4_exit>:
8aa: 08 95 ret
000008ac <__divmodhi4_neg1>:
8ac: f6 f7 brtc .-4 ; 0x8aa <__divmodhi4_exit>
8ae: 90 95 com r25
8b0: 81 95 neg r24
8b2: 9f 4f sbci r25, 0xFF ; 255
8b4: 08 95 ret
000008b6 <__udivmodhi4>:
8b6: aa 1b sub r26, r26
8b8: bb 1b sub r27, r27
8ba: 51 e1 ldi r21, 0x11 ; 17
8bc: 07 c0 rjmp .+14 ; 0x8cc <__udivmodhi4_ep>
000008be <__udivmodhi4_loop>:
8be: aa 1f adc r26, r26
8c0: bb 1f adc r27, r27
8c2: a6 17 cp r26, r22
8c4: b7 07 cpc r27, r23
8c6: 10 f0 brcs .+4 ; 0x8cc <__udivmodhi4_ep>
8c8: a6 1b sub r26, r22
8ca: b7 0b sbc r27, r23
000008cc <__udivmodhi4_ep>:
8cc: 88 1f adc r24, r24
8ce: 99 1f adc r25, r25
8d0: 5a 95 dec r21
8d2: a9 f7 brne .-22 ; 0x8be <__udivmodhi4_loop>
8d4: 80 95 com r24
8d6: 90 95 com r25
8d8: bc 01 movw r22, r24
8da: cd 01 movw r24, r26
8dc: 08 95 ret
000008de <printf>:
8de: a0 e0 ldi r26, 0x00 ; 0
8e0: b0 e0 ldi r27, 0x00 ; 0
8e2: e5 e7 ldi r30, 0x75 ; 117
8e4: f4 e0 ldi r31, 0x04 ; 4
8e6: 0c 94 14 07 jmp 0xe28 ; 0xe28 <__prologue_saves__+0x20>
8ea: fe 01 movw r30, r28
8ec: 35 96 adiw r30, 0x05 ; 5
8ee: 61 91 ld r22, Z+
8f0: 71 91 ld r23, Z+
8f2: 80 91 a2 03 lds r24, 0x03A2
8f6: 90 91 a3 03 lds r25, 0x03A3
8fa: af 01 movw r20, r30
8fc: 0e 94 84 04 call 0x908 ; 0x908 <vfprintf>
900: 20 96 adiw r28, 0x00 ; 0
902: e2 e0 ldi r30, 0x02 ; 2
904: 0c 94 30 07 jmp 0xe60 ; 0xe60 <__epilogue_restores__+0x20>
00000908 <vfprintf>:
908: ad e0 ldi r26, 0x0D ; 13
90a: b0 e0 ldi r27, 0x00 ; 0
90c: ea e8 ldi r30, 0x8A ; 138
90e: f4 e0 ldi r31, 0x04 ; 4
910: 0c 94 04 07 jmp 0xe08 ; 0xe08 <__prologue_saves__>
914: 3c 01 movw r6, r24
916: 7d 87 std Y+13, r23 ; 0x0d
918: 6c 87 std Y+12, r22 ; 0x0c
91a: 5a 01 movw r10, r20
91c: fc 01 movw r30, r24
91e: 17 82 std Z+7, r1 ; 0x07
920: 16 82 std Z+6, r1 ; 0x06
922: 83 81 ldd r24, Z+3 ; 0x03
924: 81 ff sbrs r24, 1
926: ca c1 rjmp .+916 ; 0xcbc <vfprintf+0x3b4>
928: 3f e3 ldi r19, 0x3F ; 63
92a: c3 2e mov r12, r19
92c: 2e 01 movw r4, r28
92e: 08 94 sec
930: 41 1c adc r4, r1
932: 51 1c adc r5, r1
934: f3 01 movw r30, r6
936: 93 81 ldd r25, Z+3 ; 0x03
938: ec 85 ldd r30, Y+12 ; 0x0c
93a: fd 85 ldd r31, Y+13 ; 0x0d
93c: 93 fd sbrc r25, 3
93e: 85 91 lpm r24, Z+
940: 93 ff sbrs r25, 3
942: 81 91 ld r24, Z+
944: fd 87 std Y+13, r31 ; 0x0d
946: ec 87 std Y+12, r30 ; 0x0c
948: 88 23 and r24, r24
94a: 09 f4 brne .+2 ; 0x94e <vfprintf+0x46>
94c: b3 c1 rjmp .+870 ; 0xcb4 <vfprintf+0x3ac>
94e: 85 32 cpi r24, 0x25 ; 37
950: 41 f4 brne .+16 ; 0x962 <vfprintf+0x5a>
952: 93 fd sbrc r25, 3
954: 85 91 lpm r24, Z+
956: 93 ff sbrs r25, 3
958: 81 91 ld r24, Z+
95a: fd 87 std Y+13, r31 ; 0x0d
95c: ec 87 std Y+12, r30 ; 0x0c
95e: 85 32 cpi r24, 0x25 ; 37
960: 29 f4 brne .+10 ; 0x96c <vfprintf+0x64>
962: 90 e0 ldi r25, 0x00 ; 0
964: b3 01 movw r22, r6
966: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
96a: e4 cf rjmp .-56 ; 0x934 <vfprintf+0x2c>
96c: ee 24 eor r14, r14
96e: dd 24 eor r13, r13
970: 10 e0 ldi r17, 0x00 ; 0
972: 10 32 cpi r17, 0x20 ; 32
974: b0 f4 brcc .+44 ; 0x9a2 <vfprintf+0x9a>
976: 8b 32 cpi r24, 0x2B ; 43
978: 69 f0 breq .+26 ; 0x994 <vfprintf+0x8c>
97a: 8c 32 cpi r24, 0x2C ; 44
97c: 28 f4 brcc .+10 ; 0x988 <vfprintf+0x80>
97e: 80 32 cpi r24, 0x20 ; 32
980: 51 f0 breq .+20 ; 0x996 <vfprintf+0x8e>
982: 83 32 cpi r24, 0x23 ; 35
984: 71 f4 brne .+28 ; 0x9a2 <vfprintf+0x9a>
986: 0b c0 rjmp .+22 ; 0x99e <vfprintf+0x96>
988: 8d 32 cpi r24, 0x2D ; 45
98a: 39 f0 breq .+14 ; 0x99a <vfprintf+0x92>
98c: 80 33 cpi r24, 0x30 ; 48
98e: 49 f4 brne .+18 ; 0x9a2 <vfprintf+0x9a>
990: 11 60 ori r17, 0x01 ; 1
992: 2c c0 rjmp .+88 ; 0x9ec <vfprintf+0xe4>
994: 12 60 ori r17, 0x02 ; 2
996: 14 60 ori r17, 0x04 ; 4
998: 29 c0 rjmp .+82 ; 0x9ec <vfprintf+0xe4>
99a: 18 60 ori r17, 0x08 ; 8
99c: 27 c0 rjmp .+78 ; 0x9ec <vfprintf+0xe4>
99e: 10 61 ori r17, 0x10 ; 16
9a0: 25 c0 rjmp .+74 ; 0x9ec <vfprintf+0xe4>
9a2: 17 fd sbrc r17, 7
9a4: 2e c0 rjmp .+92 ; 0xa02 <vfprintf+0xfa>
9a6: 28 2f mov r18, r24
9a8: 20 53 subi r18, 0x30 ; 48
9aa: 2a 30 cpi r18, 0x0A ; 10
9ac: 98 f4 brcc .+38 ; 0x9d4 <vfprintf+0xcc>
9ae: 16 ff sbrs r17, 6
9b0: 08 c0 rjmp .+16 ; 0x9c2 <vfprintf+0xba>
9b2: 8e 2d mov r24, r14
9b4: 88 0f add r24, r24
9b6: e8 2e mov r14, r24
9b8: ee 0c add r14, r14
9ba: ee 0c add r14, r14
9bc: e8 0e add r14, r24
9be: e2 0e add r14, r18
9c0: 15 c0 rjmp .+42 ; 0x9ec <vfprintf+0xe4>
9c2: 8d 2d mov r24, r13
9c4: 88 0f add r24, r24
9c6: d8 2e mov r13, r24
9c8: dd 0c add r13, r13
9ca: dd 0c add r13, r13
9cc: d8 0e add r13, r24
9ce: d2 0e add r13, r18
9d0: 10 62 ori r17, 0x20 ; 32
9d2: 0c c0 rjmp .+24 ; 0x9ec <vfprintf+0xe4>
9d4: 8e 32 cpi r24, 0x2E ; 46
9d6: 21 f4 brne .+8 ; 0x9e0 <vfprintf+0xd8>
9d8: 16 fd sbrc r17, 6
9da: 6c c1 rjmp .+728 ; 0xcb4 <vfprintf+0x3ac>
9dc: 10 64 ori r17, 0x40 ; 64
9de: 06 c0 rjmp .+12 ; 0x9ec <vfprintf+0xe4>
9e0: 8c 36 cpi r24, 0x6C ; 108
9e2: 11 f4 brne .+4 ; 0x9e8 <vfprintf+0xe0>
9e4: 10 68 ori r17, 0x80 ; 128
9e6: 02 c0 rjmp .+4 ; 0x9ec <vfprintf+0xe4>
9e8: 88 36 cpi r24, 0x68 ; 104
9ea: 59 f4 brne .+22 ; 0xa02 <vfprintf+0xfa>
9ec: ec 85 ldd r30, Y+12 ; 0x0c
9ee: fd 85 ldd r31, Y+13 ; 0x0d
9f0: 93 fd sbrc r25, 3
9f2: 85 91 lpm r24, Z+
9f4: 93 ff sbrs r25, 3
9f6: 81 91 ld r24, Z+
9f8: fd 87 std Y+13, r31 ; 0x0d
9fa: ec 87 std Y+12, r30 ; 0x0c
9fc: 88 23 and r24, r24
9fe: 09 f0 breq .+2 ; 0xa02 <vfprintf+0xfa>
a00: b8 cf rjmp .-144 ; 0x972 <vfprintf+0x6a>
a02: 98 2f mov r25, r24
a04: 95 54 subi r25, 0x45 ; 69
a06: 93 30 cpi r25, 0x03 ; 3
a08: 18 f0 brcs .+6 ; 0xa10 <vfprintf+0x108>
a0a: 90 52 subi r25, 0x20 ; 32
a0c: 93 30 cpi r25, 0x03 ; 3
a0e: 30 f4 brcc .+12 ; 0xa1c <vfprintf+0x114>
a10: 24 e0 ldi r18, 0x04 ; 4
a12: 30 e0 ldi r19, 0x00 ; 0
a14: a2 0e add r10, r18
a16: b3 1e adc r11, r19
a18: c9 82 std Y+1, r12 ; 0x01
a1a: 0f c0 rjmp .+30 ; 0xa3a <vfprintf+0x132>
a1c: 83 36 cpi r24, 0x63 ; 99
a1e: 31 f0 breq .+12 ; 0xa2c <vfprintf+0x124>
a20: 83 37 cpi r24, 0x73 ; 115
a22: 81 f0 breq .+32 ; 0xa44 <vfprintf+0x13c>
a24: 83 35 cpi r24, 0x53 ; 83
a26: 09 f0 breq .+2 ; 0xa2a <vfprintf+0x122>
a28: 5a c0 rjmp .+180 ; 0xade <vfprintf+0x1d6>
a2a: 22 c0 rjmp .+68 ; 0xa70 <vfprintf+0x168>
a2c: f5 01 movw r30, r10
a2e: 80 81 ld r24, Z
a30: 89 83 std Y+1, r24 ; 0x01
a32: 22 e0 ldi r18, 0x02 ; 2
a34: 30 e0 ldi r19, 0x00 ; 0
a36: a2 0e add r10, r18
a38: b3 1e adc r11, r19
a3a: 21 e0 ldi r18, 0x01 ; 1
a3c: e2 2e mov r14, r18
a3e: f1 2c mov r15, r1
a40: 42 01 movw r8, r4
a42: 14 c0 rjmp .+40 ; 0xa6c <vfprintf+0x164>
a44: 92 e0 ldi r25, 0x02 ; 2
a46: 29 2e mov r2, r25
a48: 31 2c mov r3, r1
a4a: 2a 0c add r2, r10
a4c: 3b 1c adc r3, r11
a4e: f5 01 movw r30, r10
a50: 80 80 ld r8, Z
a52: 91 80 ldd r9, Z+1 ; 0x01
a54: 16 ff sbrs r17, 6
a56: 03 c0 rjmp .+6 ; 0xa5e <vfprintf+0x156>
a58: 6e 2d mov r22, r14
a5a: 70 e0 ldi r23, 0x00 ; 0
a5c: 02 c0 rjmp .+4 ; 0xa62 <vfprintf+0x15a>
a5e: 6f ef ldi r22, 0xFF ; 255
a60: 7f ef ldi r23, 0xFF ; 255
a62: c4 01 movw r24, r8
a64: 0e 94 6f 06 call 0xcde ; 0xcde <strnlen>
a68: 7c 01 movw r14, r24
a6a: 51 01 movw r10, r2
a6c: 1f 77 andi r17, 0x7F ; 127
a6e: 15 c0 rjmp .+42 ; 0xa9a <vfprintf+0x192>
a70: 82 e0 ldi r24, 0x02 ; 2
a72: 28 2e mov r2, r24
a74: 31 2c mov r3, r1
a76: 2a 0c add r2, r10
a78: 3b 1c adc r3, r11
a7a: f5 01 movw r30, r10
a7c: 80 80 ld r8, Z
a7e: 91 80 ldd r9, Z+1 ; 0x01
a80: 16 ff sbrs r17, 6
a82: 03 c0 rjmp .+6 ; 0xa8a <vfprintf+0x182>
a84: 6e 2d mov r22, r14
a86: 70 e0 ldi r23, 0x00 ; 0
a88: 02 c0 rjmp .+4 ; 0xa8e <vfprintf+0x186>
a8a: 6f ef ldi r22, 0xFF ; 255
a8c: 7f ef ldi r23, 0xFF ; 255
a8e: c4 01 movw r24, r8
a90: 0e 94 64 06 call 0xcc8 ; 0xcc8 <strnlen_P>
a94: 7c 01 movw r14, r24
a96: 10 68 ori r17, 0x80 ; 128
a98: 51 01 movw r10, r2
a9a: 13 fd sbrc r17, 3
a9c: 1c c0 rjmp .+56 ; 0xad6 <vfprintf+0x1ce>
a9e: 06 c0 rjmp .+12 ; 0xaac <vfprintf+0x1a4>
aa0: 80 e2 ldi r24, 0x20 ; 32
aa2: 90 e0 ldi r25, 0x00 ; 0
aa4: b3 01 movw r22, r6
aa6: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
aaa: da 94 dec r13
aac: 8d 2d mov r24, r13
aae: 90 e0 ldi r25, 0x00 ; 0
ab0: e8 16 cp r14, r24
ab2: f9 06 cpc r15, r25
ab4: a8 f3 brcs .-22 ; 0xaa0 <vfprintf+0x198>
ab6: 0f c0 rjmp .+30 ; 0xad6 <vfprintf+0x1ce>
ab8: f4 01 movw r30, r8
aba: 17 fd sbrc r17, 7
abc: 85 91 lpm r24, Z+
abe: 17 ff sbrs r17, 7
ac0: 81 91 ld r24, Z+
ac2: 4f 01 movw r8, r30
ac4: 90 e0 ldi r25, 0x00 ; 0
ac6: b3 01 movw r22, r6
ac8: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
acc: d1 10 cpse r13, r1
ace: da 94 dec r13
ad0: 08 94 sec
ad2: e1 08 sbc r14, r1
ad4: f1 08 sbc r15, r1
ad6: e1 14 cp r14, r1
ad8: f1 04 cpc r15, r1
ada: 71 f7 brne .-36 ; 0xab8 <vfprintf+0x1b0>
adc: e8 c0 rjmp .+464 ; 0xcae <vfprintf+0x3a6>
ade: 84 36 cpi r24, 0x64 ; 100
ae0: 11 f0 breq .+4 ; 0xae6 <vfprintf+0x1de>
ae2: 89 36 cpi r24, 0x69 ; 105
ae4: 59 f5 brne .+86 ; 0xb3c <vfprintf+0x234>
ae6: f5 01 movw r30, r10
ae8: 17 ff sbrs r17, 7
aea: 07 c0 rjmp .+14 ; 0xafa <vfprintf+0x1f2>
aec: 80 81 ld r24, Z
aee: 91 81 ldd r25, Z+1 ; 0x01
af0: a2 81 ldd r26, Z+2 ; 0x02
af2: b3 81 ldd r27, Z+3 ; 0x03
af4: 24 e0 ldi r18, 0x04 ; 4
af6: 30 e0 ldi r19, 0x00 ; 0
af8: 09 c0 rjmp .+18 ; 0xb0c <vfprintf+0x204>
afa: 60 81 ld r22, Z
afc: 71 81 ldd r23, Z+1 ; 0x01
afe: cb 01 movw r24, r22
b00: aa 27 eor r26, r26
b02: 97 fd sbrc r25, 7
b04: a0 95 com r26
b06: ba 2f mov r27, r26
b08: 22 e0 ldi r18, 0x02 ; 2
b0a: 30 e0 ldi r19, 0x00 ; 0
b0c: a2 0e add r10, r18
b0e: b3 1e adc r11, r19
b10: 01 2f mov r16, r17
b12: 0f 76 andi r16, 0x6F ; 111
b14: b7 ff sbrs r27, 7
b16: 08 c0 rjmp .+16 ; 0xb28 <vfprintf+0x220>
b18: b0 95 com r27
b1a: a0 95 com r26
b1c: 90 95 com r25
b1e: 81 95 neg r24
b20: 9f 4f sbci r25, 0xFF ; 255
b22: af 4f sbci r26, 0xFF ; 255
b24: bf 4f sbci r27, 0xFF ; 255
b26: 00 68 ori r16, 0x80 ; 128
b28: bc 01 movw r22, r24
b2a: cd 01 movw r24, r26
b2c: a2 01 movw r20, r4
b2e: 2a e0 ldi r18, 0x0A ; 10
b30: 30 e0 ldi r19, 0x00 ; 0
b32: 0e 94 a6 06 call 0xd4c ; 0xd4c <__ultoa_invert>
b36: f8 2e mov r15, r24
b38: f4 18 sub r15, r4
b3a: 3f c0 rjmp .+126 ; 0xbba <vfprintf+0x2b2>
b3c: 85 37 cpi r24, 0x75 ; 117
b3e: 21 f4 brne .+8 ; 0xb48 <vfprintf+0x240>
b40: 1f 7e andi r17, 0xEF ; 239
b42: 2a e0 ldi r18, 0x0A ; 10
b44: 30 e0 ldi r19, 0x00 ; 0
b46: 20 c0 rjmp .+64 ; 0xb88 <vfprintf+0x280>
b48: 19 7f andi r17, 0xF9 ; 249
b4a: 8f 36 cpi r24, 0x6F ; 111
b4c: a9 f0 breq .+42 ; 0xb78 <vfprintf+0x270>
b4e: 80 37 cpi r24, 0x70 ; 112
b50: 20 f4 brcc .+8 ; 0xb5a <vfprintf+0x252>
b52: 88 35 cpi r24, 0x58 ; 88
b54: 09 f0 breq .+2 ; 0xb58 <vfprintf+0x250>
b56: ae c0 rjmp .+348 ; 0xcb4 <vfprintf+0x3ac>
b58: 0b c0 rjmp .+22 ; 0xb70 <vfprintf+0x268>
b5a: 80 37 cpi r24, 0x70 ; 112
b5c: 21 f0 breq .+8 ; 0xb66 <vfprintf+0x25e>
b5e: 88 37 cpi r24, 0x78 ; 120
b60: 09 f0 breq .+2 ; 0xb64 <vfprintf+0x25c>
b62: a8 c0 rjmp .+336 ; 0xcb4 <vfprintf+0x3ac>
b64: 01 c0 rjmp .+2 ; 0xb68 <vfprintf+0x260>
b66: 10 61 ori r17, 0x10 ; 16
b68: 14 ff sbrs r17, 4
b6a: 09 c0 rjmp .+18 ; 0xb7e <vfprintf+0x276>
b6c: 14 60 ori r17, 0x04 ; 4
b6e: 07 c0 rjmp .+14 ; 0xb7e <vfprintf+0x276>
b70: 14 ff sbrs r17, 4
b72: 08 c0 rjmp .+16 ; 0xb84 <vfprintf+0x27c>
b74: 16 60 ori r17, 0x06 ; 6
b76: 06 c0 rjmp .+12 ; 0xb84 <vfprintf+0x27c>
b78: 28 e0 ldi r18, 0x08 ; 8
b7a: 30 e0 ldi r19, 0x00 ; 0
b7c: 05 c0 rjmp .+10 ; 0xb88 <vfprintf+0x280>
b7e: 20 e1 ldi r18, 0x10 ; 16
b80: 30 e0 ldi r19, 0x00 ; 0
b82: 02 c0 rjmp .+4 ; 0xb88 <vfprintf+0x280>
b84: 20 e1 ldi r18, 0x10 ; 16
b86: 32 e0 ldi r19, 0x02 ; 2
b88: f5 01 movw r30, r10
b8a: 17 ff sbrs r17, 7
b8c: 07 c0 rjmp .+14 ; 0xb9c <vfprintf+0x294>
b8e: 60 81 ld r22, Z
b90: 71 81 ldd r23, Z+1 ; 0x01
b92: 82 81 ldd r24, Z+2 ; 0x02
b94: 93 81 ldd r25, Z+3 ; 0x03
b96: 44 e0 ldi r20, 0x04 ; 4
b98: 50 e0 ldi r21, 0x00 ; 0
b9a: 06 c0 rjmp .+12 ; 0xba8 <vfprintf+0x2a0>
b9c: 60 81 ld r22, Z
b9e: 71 81 ldd r23, Z+1 ; 0x01
ba0: 80 e0 ldi r24, 0x00 ; 0
ba2: 90 e0 ldi r25, 0x00 ; 0
ba4: 42 e0 ldi r20, 0x02 ; 2
ba6: 50 e0 ldi r21, 0x00 ; 0
ba8: a4 0e add r10, r20
baa: b5 1e adc r11, r21
bac: a2 01 movw r20, r4
bae: 0e 94 a6 06 call 0xd4c ; 0xd4c <__ultoa_invert>
bb2: f8 2e mov r15, r24
bb4: f4 18 sub r15, r4
bb6: 01 2f mov r16, r17
bb8: 0f 77 andi r16, 0x7F ; 127
bba: 06 ff sbrs r16, 6
bbc: 09 c0 rjmp .+18 ; 0xbd0 <vfprintf+0x2c8>
bbe: 0e 7f andi r16, 0xFE ; 254
bc0: fe 14 cp r15, r14
bc2: 30 f4 brcc .+12 ; 0xbd0 <vfprintf+0x2c8>
bc4: 04 ff sbrs r16, 4
bc6: 06 c0 rjmp .+12 ; 0xbd4 <vfprintf+0x2cc>
bc8: 02 fd sbrc r16, 2
bca: 04 c0 rjmp .+8 ; 0xbd4 <vfprintf+0x2cc>
bcc: 0f 7e andi r16, 0xEF ; 239
bce: 02 c0 rjmp .+4 ; 0xbd4 <vfprintf+0x2cc>
bd0: 1f 2d mov r17, r15
bd2: 01 c0 rjmp .+2 ; 0xbd6 <vfprintf+0x2ce>
bd4: 1e 2d mov r17, r14
bd6: 80 2f mov r24, r16
bd8: 90 e0 ldi r25, 0x00 ; 0
bda: 04 ff sbrs r16, 4
bdc: 0c c0 rjmp .+24 ; 0xbf6 <vfprintf+0x2ee>
bde: fe 01 movw r30, r28
be0: ef 0d add r30, r15
be2: f1 1d adc r31, r1
be4: 20 81 ld r18, Z
be6: 20 33 cpi r18, 0x30 ; 48
be8: 11 f4 brne .+4 ; 0xbee <vfprintf+0x2e6>
bea: 09 7e andi r16, 0xE9 ; 233
bec: 09 c0 rjmp .+18 ; 0xc00 <vfprintf+0x2f8>
bee: 02 ff sbrs r16, 2
bf0: 06 c0 rjmp .+12 ; 0xbfe <vfprintf+0x2f6>
bf2: 1e 5f subi r17, 0xFE ; 254
bf4: 05 c0 rjmp .+10 ; 0xc00 <vfprintf+0x2f8>
bf6: 86 78 andi r24, 0x86 ; 134
bf8: 90 70 andi r25, 0x00 ; 0
bfa: 00 97 sbiw r24, 0x00 ; 0
bfc: 09 f0 breq .+2 ; 0xc00 <vfprintf+0x2f8>
bfe: 1f 5f subi r17, 0xFF ; 255
c00: 80 2e mov r8, r16
c02: 99 24 eor r9, r9
c04: 03 fd sbrc r16, 3
c06: 12 c0 rjmp .+36 ; 0xc2c <vfprintf+0x324>
c08: 00 ff sbrs r16, 0
c0a: 0d c0 rjmp .+26 ; 0xc26 <vfprintf+0x31e>
c0c: ef 2c mov r14, r15
c0e: 1d 15 cp r17, r13
c10: 50 f4 brcc .+20 ; 0xc26 <vfprintf+0x31e>
c12: ed 0c add r14, r13
c14: e1 1a sub r14, r17
c16: 1d 2d mov r17, r13
c18: 06 c0 rjmp .+12 ; 0xc26 <vfprintf+0x31e>
c1a: 80 e2 ldi r24, 0x20 ; 32
c1c: 90 e0 ldi r25, 0x00 ; 0
c1e: b3 01 movw r22, r6
c20: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
c24: 1f 5f subi r17, 0xFF ; 255
c26: 1d 15 cp r17, r13
c28: c0 f3 brcs .-16 ; 0xc1a <vfprintf+0x312>
c2a: 04 c0 rjmp .+8 ; 0xc34 <vfprintf+0x32c>
c2c: 1d 15 cp r17, r13
c2e: 10 f4 brcc .+4 ; 0xc34 <vfprintf+0x32c>
c30: d1 1a sub r13, r17
c32: 01 c0 rjmp .+2 ; 0xc36 <vfprintf+0x32e>
c34: dd 24 eor r13, r13
c36: 84 fe sbrs r8, 4
c38: 0f c0 rjmp .+30 ; 0xc58 <vfprintf+0x350>
c3a: 80 e3 ldi r24, 0x30 ; 48
c3c: 90 e0 ldi r25, 0x00 ; 0
c3e: b3 01 movw r22, r6
c40: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
c44: 82 fe sbrs r8, 2
c46: 1f c0 rjmp .+62 ; 0xc86 <vfprintf+0x37e>
c48: 81 fe sbrs r8, 1
c4a: 03 c0 rjmp .+6 ; 0xc52 <vfprintf+0x34a>
c4c: 88 e5 ldi r24, 0x58 ; 88
c4e: 90 e0 ldi r25, 0x00 ; 0
c50: 10 c0 rjmp .+32 ; 0xc72 <vfprintf+0x36a>
c52: 88 e7 ldi r24, 0x78 ; 120
c54: 90 e0 ldi r25, 0x00 ; 0
c56: 0d c0 rjmp .+26 ; 0xc72 <vfprintf+0x36a>
c58: c4 01 movw r24, r8
c5a: 86 78 andi r24, 0x86 ; 134
c5c: 90 70 andi r25, 0x00 ; 0
c5e: 00 97 sbiw r24, 0x00 ; 0
c60: 91 f0 breq .+36 ; 0xc86 <vfprintf+0x37e>
c62: 81 fc sbrc r8, 1
c64: 02 c0 rjmp .+4 ; 0xc6a <vfprintf+0x362>
c66: 80 e2 ldi r24, 0x20 ; 32
c68: 01 c0 rjmp .+2 ; 0xc6c <vfprintf+0x364>
c6a: 8b e2 ldi r24, 0x2B ; 43
c6c: 07 fd sbrc r16, 7
c6e: 8d e2 ldi r24, 0x2D ; 45
c70: 90 e0 ldi r25, 0x00 ; 0
c72: b3 01 movw r22, r6
c74: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
c78: 06 c0 rjmp .+12 ; 0xc86 <vfprintf+0x37e>
c7a: 80 e3 ldi r24, 0x30 ; 48
c7c: 90 e0 ldi r25, 0x00 ; 0
c7e: b3 01 movw r22, r6
c80: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
c84: ea 94 dec r14
c86: fe 14 cp r15, r14
c88: c0 f3 brcs .-16 ; 0xc7a <vfprintf+0x372>
c8a: fa 94 dec r15
c8c: f2 01 movw r30, r4
c8e: ef 0d add r30, r15
c90: f1 1d adc r31, r1
c92: 80 81 ld r24, Z
c94: 90 e0 ldi r25, 0x00 ; 0
c96: b3 01 movw r22, r6
c98: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
c9c: ff 20 and r15, r15
c9e: a9 f7 brne .-22 ; 0xc8a <vfprintf+0x382>
ca0: 06 c0 rjmp .+12 ; 0xcae <vfprintf+0x3a6>
ca2: 80 e2 ldi r24, 0x20 ; 32
ca4: 90 e0 ldi r25, 0x00 ; 0
ca6: b3 01 movw r22, r6
ca8: 0e 94 7a 06 call 0xcf4 ; 0xcf4 <fputc>
cac: da 94 dec r13
cae: dd 20 and r13, r13
cb0: c1 f7 brne .-16 ; 0xca2 <vfprintf+0x39a>
cb2: 40 ce rjmp .-896 ; 0x934 <vfprintf+0x2c>
cb4: f3 01 movw r30, r6
cb6: 86 81 ldd r24, Z+6 ; 0x06
cb8: 97 81 ldd r25, Z+7 ; 0x07
cba: 02 c0 rjmp .+4 ; 0xcc0 <vfprintf+0x3b8>
cbc: 8f ef ldi r24, 0xFF ; 255
cbe: 9f ef ldi r25, 0xFF ; 255
cc0: 2d 96 adiw r28, 0x0d ; 13
cc2: e2 e1 ldi r30, 0x12 ; 18
cc4: 0c 94 20 07 jmp 0xe40 ; 0xe40 <__epilogue_restores__>
00000cc8 <strnlen_P>:
cc8: fc 01 movw r30, r24
cca: 05 90 lpm r0, Z+
ccc: 61 50 subi r22, 0x01 ; 1
cce: 70 40 sbci r23, 0x00 ; 0
cd0: 01 10 cpse r0, r1
cd2: d8 f7 brcc .-10 ; 0xcca <strnlen_P+0x2>
cd4: 80 95 com r24
cd6: 90 95 com r25
cd8: 8e 0f add r24, r30
cda: 9f 1f adc r25, r31
cdc: 08 95 ret
00000cde <strnlen>:
cde: fc 01 movw r30, r24
ce0: 61 50 subi r22, 0x01 ; 1
ce2: 70 40 sbci r23, 0x00 ; 0
ce4: 01 90 ld r0, Z+
ce6: 01 10 cpse r0, r1
ce8: d8 f7 brcc .-10 ; 0xce0 <strnlen+0x2>
cea: 80 95 com r24
cec: 90 95 com r25
cee: 8e 0f add r24, r30
cf0: 9f 1f adc r25, r31
cf2: 08 95 ret
00000cf4 <fputc>:
cf4: 0f 93 push r16
cf6: 1f 93 push r17
cf8: cf 93 push r28
cfa: df 93 push r29
cfc: 8c 01 movw r16, r24
cfe: eb 01 movw r28, r22
d00: 8b 81 ldd r24, Y+3 ; 0x03
d02: 81 ff sbrs r24, 1
d04: 1b c0 rjmp .+54 ; 0xd3c <fputc+0x48>
d06: 82 ff sbrs r24, 2
d08: 0d c0 rjmp .+26 ; 0xd24 <fputc+0x30>
d0a: 2e 81 ldd r18, Y+6 ; 0x06
d0c: 3f 81 ldd r19, Y+7 ; 0x07
d0e: 8c 81 ldd r24, Y+4 ; 0x04
d10: 9d 81 ldd r25, Y+5 ; 0x05
d12: 28 17 cp r18, r24
d14: 39 07 cpc r19, r25
d16: 64 f4 brge .+24 ; 0xd30 <fputc+0x3c>
d18: e8 81 ld r30, Y
d1a: f9 81 ldd r31, Y+1 ; 0x01
d1c: 01 93 st Z+, r16
d1e: f9 83 std Y+1, r31 ; 0x01
d20: e8 83 st Y, r30
d22: 06 c0 rjmp .+12 ; 0xd30 <fputc+0x3c>
d24: e8 85 ldd r30, Y+8 ; 0x08
d26: f9 85 ldd r31, Y+9 ; 0x09
d28: 80 2f mov r24, r16
d2a: 09 95 icall
d2c: 00 97 sbiw r24, 0x00 ; 0
d2e: 31 f4 brne .+12 ; 0xd3c <fputc+0x48>
d30: 8e 81 ldd r24, Y+6 ; 0x06
d32: 9f 81 ldd r25, Y+7 ; 0x07
d34: 01 96 adiw r24, 0x01 ; 1
d36: 9f 83 std Y+7, r25 ; 0x07
d38: 8e 83 std Y+6, r24 ; 0x06
d3a: 02 c0 rjmp .+4 ; 0xd40 <fputc+0x4c>
d3c: 0f ef ldi r16, 0xFF ; 255
d3e: 1f ef ldi r17, 0xFF ; 255
d40: c8 01 movw r24, r16
d42: df 91 pop r29
d44: cf 91 pop r28
d46: 1f 91 pop r17
d48: 0f 91 pop r16
d4a: 08 95 ret
00000d4c <__ultoa_invert>:
d4c: fa 01 movw r30, r20
d4e: aa 27 eor r26, r26
d50: 28 30 cpi r18, 0x08 ; 8
d52: 51 f1 breq .+84 ; 0xda8 <__ultoa_invert+0x5c>
d54: 20 31 cpi r18, 0x10 ; 16
d56: 81 f1 breq .+96 ; 0xdb8 <__ultoa_invert+0x6c>
d58: e8 94 clt
d5a: 6f 93 push r22
d5c: 6e 7f andi r22, 0xFE ; 254
d5e: 6e 5f subi r22, 0xFE ; 254
d60: 7f 4f sbci r23, 0xFF ; 255
d62: 8f 4f sbci r24, 0xFF ; 255
d64: 9f 4f sbci r25, 0xFF ; 255
d66: af 4f sbci r26, 0xFF ; 255
d68: b1 e0 ldi r27, 0x01 ; 1
d6a: 3e d0 rcall .+124 ; 0xde8 <__ultoa_invert+0x9c>
d6c: b4 e0 ldi r27, 0x04 ; 4
d6e: 3c d0 rcall .+120 ; 0xde8 <__ultoa_invert+0x9c>
d70: 67 0f add r22, r23
d72: 78 1f adc r23, r24
d74: 89 1f adc r24, r25
d76: 9a 1f adc r25, r26
d78: a1 1d adc r26, r1
d7a: 68 0f add r22, r24
d7c: 79 1f adc r23, r25
d7e: 8a 1f adc r24, r26
d80: 91 1d adc r25, r1
d82: a1 1d adc r26, r1
d84: 6a 0f add r22, r26
d86: 71 1d adc r23, r1
d88: 81 1d adc r24, r1
d8a: 91 1d adc r25, r1
d8c: a1 1d adc r26, r1
d8e: 20 d0 rcall .+64 ; 0xdd0 <__ultoa_invert+0x84>
d90: 09 f4 brne .+2 ; 0xd94 <__ultoa_invert+0x48>
d92: 68 94 set
d94: 3f 91 pop r19
d96: 2a e0 ldi r18, 0x0A ; 10
d98: 26 9f mul r18, r22
d9a: 11 24 eor r1, r1
d9c: 30 19 sub r19, r0
d9e: 30 5d subi r19, 0xD0 ; 208
da0: 31 93 st Z+, r19
da2: de f6 brtc .-74 ; 0xd5a <__ultoa_invert+0xe>
da4: cf 01 movw r24, r30
da6: 08 95 ret
da8: 46 2f mov r20, r22
daa: 47 70 andi r20, 0x07 ; 7
dac: 40 5d subi r20, 0xD0 ; 208
dae: 41 93 st Z+, r20
db0: b3 e0 ldi r27, 0x03 ; 3
db2: 0f d0 rcall .+30 ; 0xdd2 <__ultoa_invert+0x86>
db4: c9 f7 brne .-14 ; 0xda8 <__ultoa_invert+0x5c>
db6: f6 cf rjmp .-20 ; 0xda4 <__ultoa_invert+0x58>
db8: 46 2f mov r20, r22
dba: 4f 70 andi r20, 0x0F ; 15
dbc: 40 5d subi r20, 0xD0 ; 208
dbe: 4a 33 cpi r20, 0x3A ; 58
dc0: 18 f0 brcs .+6 ; 0xdc8 <__ultoa_invert+0x7c>
dc2: 49 5d subi r20, 0xD9 ; 217
dc4: 31 fd sbrc r19, 1
dc6: 40 52 subi r20, 0x20 ; 32
dc8: 41 93 st Z+, r20
dca: 02 d0 rcall .+4 ; 0xdd0 <__ultoa_invert+0x84>
dcc: a9 f7 brne .-22 ; 0xdb8 <__ultoa_invert+0x6c>
dce: ea cf rjmp .-44 ; 0xda4 <__ultoa_invert+0x58>
dd0: b4 e0 ldi r27, 0x04 ; 4
dd2: a6 95 lsr r26
dd4: 97 95 ror r25
dd6: 87 95 ror r24
dd8: 77 95 ror r23
dda: 67 95 ror r22
ddc: ba 95 dec r27
dde: c9 f7 brne .-14 ; 0xdd2 <__ultoa_invert+0x86>
de0: 00 97 sbiw r24, 0x00 ; 0
de2: 61 05 cpc r22, r1
de4: 71 05 cpc r23, r1
de6: 08 95 ret
de8: 9b 01 movw r18, r22
dea: ac 01 movw r20, r24
dec: 0a 2e mov r0, r26
dee: 06 94 lsr r0
df0: 57 95 ror r21
df2: 47 95 ror r20
df4: 37 95 ror r19
df6: 27 95 ror r18
df8: ba 95 dec r27
dfa: c9 f7 brne .-14 ; 0xdee <__ultoa_invert+0xa2>
dfc: 62 0f add r22, r18
dfe: 73 1f adc r23, r19
e00: 84 1f adc r24, r20
e02: 95 1f adc r25, r21
e04: a0 1d adc r26, r0
e06: 08 95 ret
00000e08 <__prologue_saves__>:
e08: 2f 92 push r2
e0a: 3f 92 push r3
e0c: 4f 92 push r4
e0e: 5f 92 push r5
e10: 6f 92 push r6
e12: 7f 92 push r7
e14: 8f 92 push r8
e16: 9f 92 push r9
e18: af 92 push r10
e1a: bf 92 push r11
e1c: cf 92 push r12
e1e: df 92 push r13
e20: ef 92 push r14
e22: ff 92 push r15
e24: 0f 93 push r16
e26: 1f 93 push r17
e28: cf 93 push r28
e2a: df 93 push r29
e2c: cd b7 in r28, 0x3d ; 61
e2e: de b7 in r29, 0x3e ; 62
e30: ca 1b sub r28, r26
e32: db 0b sbc r29, r27
e34: 0f b6 in r0, 0x3f ; 63
e36: f8 94 cli
e38: de bf out 0x3e, r29 ; 62
e3a: 0f be out 0x3f, r0 ; 63
e3c: cd bf out 0x3d, r28 ; 61
e3e: 09 94 ijmp
00000e40 <__epilogue_restores__>:
e40: 2a 88 ldd r2, Y+18 ; 0x12
e42: 39 88 ldd r3, Y+17 ; 0x11
e44: 48 88 ldd r4, Y+16 ; 0x10
e46: 5f 84 ldd r5, Y+15 ; 0x0f
e48: 6e 84 ldd r6, Y+14 ; 0x0e
e4a: 7d 84 ldd r7, Y+13 ; 0x0d
e4c: 8c 84 ldd r8, Y+12 ; 0x0c
e4e: 9b 84 ldd r9, Y+11 ; 0x0b
e50: aa 84 ldd r10, Y+10 ; 0x0a
e52: b9 84 ldd r11, Y+9 ; 0x09
e54: c8 84 ldd r12, Y+8 ; 0x08
e56: df 80 ldd r13, Y+7 ; 0x07
e58: ee 80 ldd r14, Y+6 ; 0x06
e5a: fd 80 ldd r15, Y+5 ; 0x05
e5c: 0c 81 ldd r16, Y+4 ; 0x04
e5e: 1b 81 ldd r17, Y+3 ; 0x03
e60: aa 81 ldd r26, Y+2 ; 0x02
e62: b9 81 ldd r27, Y+1 ; 0x01
e64: ce 0f add r28, r30
e66: d1 1d adc r29, r1
e68: 0f b6 in r0, 0x3f ; 63
e6a: f8 94 cli
e6c: de bf out 0x3e, r29 ; 62
e6e: 0f be out 0x3f, r0 ; 63
e70: cd bf out 0x3d, r28 ; 61
e72: ed 01 movw r28, r26
e74: 08 95 ret
00000e76 <_exit>:
e76: f8 94 cli
00000e78 <__stop_program>:
e78: ff cf rjmp .-2 ; 0xe78 <__stop_program>