mirror of
1
0
Fork 0
avr_demo/button_debounce/main.lss

2052 lines
72 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>