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
9e: 0c 94 3b 07 jmp 0xe76 ; 0xe76 <_exit> 000000a2 <__bad_interrupt>: a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> 000000a6 : /* 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 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 ba: 95 95 asr r25 bc: 87 95 ror r24 be: 6a 95 dec r22 c0: e2 f7 brpl .-8 ; 0xba } 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 : /* 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 d8: 88 0f add r24, r24 da: 99 1f adc r25, r25 dc: 6a 95 dec r22 de: e2 f7 brpl .-8 ; 0xd8 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 *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 : /* 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 : 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('\r', stream); 134: 8d e0 ldi r24, 0x0D ; 13 136: 0e 94 96 00 call 0x12c ; 0x12c } 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 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 : 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 : * 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 : /* * 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 : /* * 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
: } } int main(void) { 6b6: cf 93 push r28 6b8: df 93 push r29 6ba: 00 d0 rcall .+0 ; 0x6bc 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 don’t 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 uart_init(); 6ca: 0e 94 79 00 call 0xf2 ; 0xf2 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 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 /* Note the time in millis of last change of button state. */ last_toggle_time = timer_millis(); 71a: 0e 94 76 01 call 0x2ec ; 0x2ec 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 822: 88 23 and r24, r24 824: 61 f4 brne .+24 ; 0x83e 826: 77 23 and r23, r23 828: 51 f4 brne .+20 ; 0x83e 82a: 66 23 and r22, r22 82c: 41 f4 brne .+16 ; 0x83e 82e: 55 23 and r21, r21 830: 31 f4 brne .+12 ; 0x83e 832: 44 23 and r20, r20 834: 21 f4 brne .+8 ; 0x83e 836: 33 23 and r19, r19 838: 11 f4 brne .+4 ; 0x83e 83a: eb 30 cpi r30, 0x0B ; 11 83c: 08 f0 brcs .+2 ; 0x840 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 844: 5c cf rjmp .-328 ; 0x6fe 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 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 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 : 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 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 : 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 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 94c: b3 c1 rjmp .+870 ; 0xcb4 94e: 85 32 cpi r24, 0x25 ; 37 950: 41 f4 brne .+16 ; 0x962 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 962: 90 e0 ldi r25, 0x00 ; 0 964: b3 01 movw r22, r6 966: 0e 94 7a 06 call 0xcf4 ; 0xcf4 96a: e4 cf rjmp .-56 ; 0x934 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 976: 8b 32 cpi r24, 0x2B ; 43 978: 69 f0 breq .+26 ; 0x994 97a: 8c 32 cpi r24, 0x2C ; 44 97c: 28 f4 brcc .+10 ; 0x988 97e: 80 32 cpi r24, 0x20 ; 32 980: 51 f0 breq .+20 ; 0x996 982: 83 32 cpi r24, 0x23 ; 35 984: 71 f4 brne .+28 ; 0x9a2 986: 0b c0 rjmp .+22 ; 0x99e 988: 8d 32 cpi r24, 0x2D ; 45 98a: 39 f0 breq .+14 ; 0x99a 98c: 80 33 cpi r24, 0x30 ; 48 98e: 49 f4 brne .+18 ; 0x9a2 990: 11 60 ori r17, 0x01 ; 1 992: 2c c0 rjmp .+88 ; 0x9ec 994: 12 60 ori r17, 0x02 ; 2 996: 14 60 ori r17, 0x04 ; 4 998: 29 c0 rjmp .+82 ; 0x9ec 99a: 18 60 ori r17, 0x08 ; 8 99c: 27 c0 rjmp .+78 ; 0x9ec 99e: 10 61 ori r17, 0x10 ; 16 9a0: 25 c0 rjmp .+74 ; 0x9ec 9a2: 17 fd sbrc r17, 7 9a4: 2e c0 rjmp .+92 ; 0xa02 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 9ae: 16 ff sbrs r17, 6 9b0: 08 c0 rjmp .+16 ; 0x9c2 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 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 9d4: 8e 32 cpi r24, 0x2E ; 46 9d6: 21 f4 brne .+8 ; 0x9e0 9d8: 16 fd sbrc r17, 6 9da: 6c c1 rjmp .+728 ; 0xcb4 9dc: 10 64 ori r17, 0x40 ; 64 9de: 06 c0 rjmp .+12 ; 0x9ec 9e0: 8c 36 cpi r24, 0x6C ; 108 9e2: 11 f4 brne .+4 ; 0x9e8 9e4: 10 68 ori r17, 0x80 ; 128 9e6: 02 c0 rjmp .+4 ; 0x9ec 9e8: 88 36 cpi r24, 0x68 ; 104 9ea: 59 f4 brne .+22 ; 0xa02 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 a00: b8 cf rjmp .-144 ; 0x972 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 a0a: 90 52 subi r25, 0x20 ; 32 a0c: 93 30 cpi r25, 0x03 ; 3 a0e: 30 f4 brcc .+12 ; 0xa1c 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 a1c: 83 36 cpi r24, 0x63 ; 99 a1e: 31 f0 breq .+12 ; 0xa2c a20: 83 37 cpi r24, 0x73 ; 115 a22: 81 f0 breq .+32 ; 0xa44 a24: 83 35 cpi r24, 0x53 ; 83 a26: 09 f0 breq .+2 ; 0xa2a a28: 5a c0 rjmp .+180 ; 0xade a2a: 22 c0 rjmp .+68 ; 0xa70 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 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 a58: 6e 2d mov r22, r14 a5a: 70 e0 ldi r23, 0x00 ; 0 a5c: 02 c0 rjmp .+4 ; 0xa62 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 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 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 a84: 6e 2d mov r22, r14 a86: 70 e0 ldi r23, 0x00 ; 0 a88: 02 c0 rjmp .+4 ; 0xa8e 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 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 a9e: 06 c0 rjmp .+12 ; 0xaac 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 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 ab6: 0f c0 rjmp .+30 ; 0xad6 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 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 adc: e8 c0 rjmp .+464 ; 0xcae ade: 84 36 cpi r24, 0x64 ; 100 ae0: 11 f0 breq .+4 ; 0xae6 ae2: 89 36 cpi r24, 0x69 ; 105 ae4: 59 f5 brne .+86 ; 0xb3c ae6: f5 01 movw r30, r10 ae8: 17 ff sbrs r17, 7 aea: 07 c0 rjmp .+14 ; 0xafa 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 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 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 b3c: 85 37 cpi r24, 0x75 ; 117 b3e: 21 f4 brne .+8 ; 0xb48 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 b48: 19 7f andi r17, 0xF9 ; 249 b4a: 8f 36 cpi r24, 0x6F ; 111 b4c: a9 f0 breq .+42 ; 0xb78 b4e: 80 37 cpi r24, 0x70 ; 112 b50: 20 f4 brcc .+8 ; 0xb5a b52: 88 35 cpi r24, 0x58 ; 88 b54: 09 f0 breq .+2 ; 0xb58 b56: ae c0 rjmp .+348 ; 0xcb4 b58: 0b c0 rjmp .+22 ; 0xb70 b5a: 80 37 cpi r24, 0x70 ; 112 b5c: 21 f0 breq .+8 ; 0xb66 b5e: 88 37 cpi r24, 0x78 ; 120 b60: 09 f0 breq .+2 ; 0xb64 b62: a8 c0 rjmp .+336 ; 0xcb4 b64: 01 c0 rjmp .+2 ; 0xb68 b66: 10 61 ori r17, 0x10 ; 16 b68: 14 ff sbrs r17, 4 b6a: 09 c0 rjmp .+18 ; 0xb7e b6c: 14 60 ori r17, 0x04 ; 4 b6e: 07 c0 rjmp .+14 ; 0xb7e b70: 14 ff sbrs r17, 4 b72: 08 c0 rjmp .+16 ; 0xb84 b74: 16 60 ori r17, 0x06 ; 6 b76: 06 c0 rjmp .+12 ; 0xb84 b78: 28 e0 ldi r18, 0x08 ; 8 b7a: 30 e0 ldi r19, 0x00 ; 0 b7c: 05 c0 rjmp .+10 ; 0xb88 b7e: 20 e1 ldi r18, 0x10 ; 16 b80: 30 e0 ldi r19, 0x00 ; 0 b82: 02 c0 rjmp .+4 ; 0xb88 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 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 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 bbe: 0e 7f andi r16, 0xFE ; 254 bc0: fe 14 cp r15, r14 bc2: 30 f4 brcc .+12 ; 0xbd0 bc4: 04 ff sbrs r16, 4 bc6: 06 c0 rjmp .+12 ; 0xbd4 bc8: 02 fd sbrc r16, 2 bca: 04 c0 rjmp .+8 ; 0xbd4 bcc: 0f 7e andi r16, 0xEF ; 239 bce: 02 c0 rjmp .+4 ; 0xbd4 bd0: 1f 2d mov r17, r15 bd2: 01 c0 rjmp .+2 ; 0xbd6 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 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 bea: 09 7e andi r16, 0xE9 ; 233 bec: 09 c0 rjmp .+18 ; 0xc00 bee: 02 ff sbrs r16, 2 bf0: 06 c0 rjmp .+12 ; 0xbfe bf2: 1e 5f subi r17, 0xFE ; 254 bf4: 05 c0 rjmp .+10 ; 0xc00 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 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 c08: 00 ff sbrs r16, 0 c0a: 0d c0 rjmp .+26 ; 0xc26 c0c: ef 2c mov r14, r15 c0e: 1d 15 cp r17, r13 c10: 50 f4 brcc .+20 ; 0xc26 c12: ed 0c add r14, r13 c14: e1 1a sub r14, r17 c16: 1d 2d mov r17, r13 c18: 06 c0 rjmp .+12 ; 0xc26 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 c24: 1f 5f subi r17, 0xFF ; 255 c26: 1d 15 cp r17, r13 c28: c0 f3 brcs .-16 ; 0xc1a c2a: 04 c0 rjmp .+8 ; 0xc34 c2c: 1d 15 cp r17, r13 c2e: 10 f4 brcc .+4 ; 0xc34 c30: d1 1a sub r13, r17 c32: 01 c0 rjmp .+2 ; 0xc36 c34: dd 24 eor r13, r13 c36: 84 fe sbrs r8, 4 c38: 0f c0 rjmp .+30 ; 0xc58 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 c44: 82 fe sbrs r8, 2 c46: 1f c0 rjmp .+62 ; 0xc86 c48: 81 fe sbrs r8, 1 c4a: 03 c0 rjmp .+6 ; 0xc52 c4c: 88 e5 ldi r24, 0x58 ; 88 c4e: 90 e0 ldi r25, 0x00 ; 0 c50: 10 c0 rjmp .+32 ; 0xc72 c52: 88 e7 ldi r24, 0x78 ; 120 c54: 90 e0 ldi r25, 0x00 ; 0 c56: 0d c0 rjmp .+26 ; 0xc72 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 c62: 81 fc sbrc r8, 1 c64: 02 c0 rjmp .+4 ; 0xc6a c66: 80 e2 ldi r24, 0x20 ; 32 c68: 01 c0 rjmp .+2 ; 0xc6c 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 c78: 06 c0 rjmp .+12 ; 0xc86 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 c84: ea 94 dec r14 c86: fe 14 cp r15, r14 c88: c0 f3 brcs .-16 ; 0xc7a 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 c9c: ff 20 and r15, r15 c9e: a9 f7 brne .-22 ; 0xc8a ca0: 06 c0 rjmp .+12 ; 0xcae 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 cac: da 94 dec r13 cae: dd 20 and r13, r13 cb0: c1 f7 brne .-16 ; 0xca2 cb2: 40 ce rjmp .-896 ; 0x934 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 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 : 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 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 : 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 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 : 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 d06: 82 ff sbrs r24, 2 d08: 0d c0 rjmp .+26 ; 0xd24 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 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 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 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 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>