mca-pendel/sketches/pendulum/pendulum.lss

1930 lines
65 KiB
Plaintext

pendulum.elf: Dateiformat elf32-avr
Sektionen:
Idx Name Größe VMA LMA Datei-Off Ausr.
0 .data 0000000a 00800100 00000d1e 00000db2 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000d1e 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000000c 0080010a 0080010a 00000dbc 2**0
ALLOC
3 .stab 000010d4 00000000 00000000 00000dbc 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000f4b 00000000 00000000 00001e90 2**0
CONTENTS, READONLY, DEBUGGING
5 .comment 00000011 00000000 00000000 00002ddb 2**0
CONTENTS, READONLY
6 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00002dec 2**2
CONTENTS, READONLY
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 3b 00 jmp 0x76 ; 0x76 <__ctors_end>
4: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
8: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__vector_2>
c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
10: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
14: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
18: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
1c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
20: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
24: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
28: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
2c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
30: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
34: 0c 94 a3 00 jmp 0x146 ; 0x146 <__vector_13>
38: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
3c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
40: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
44: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
48: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
4c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
50: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
54: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
58: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
5c: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
60: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
64: 0c 94 58 00 jmp 0xb0 ; 0xb0 <__bad_interrupt>
68: 96 02 muls r25, r22
6a: 9a 02 muls r25, r26
6c: 9e 02 muls r25, r30
6e: a1 02 muls r26, r17
70: a5 02 muls r26, r21
72: a9 02 muls r26, r25
74: 96 02 muls r25, r22
00000076 <__ctors_end>:
76: 11 24 eor r1, r1
78: 1f be out 0x3f, r1 ; 63
7a: cf ef ldi r28, 0xFF ; 255
7c: d8 e0 ldi r29, 0x08 ; 8
7e: de bf out 0x3e, r29 ; 62
80: cd bf out 0x3d, r28 ; 61
00000082 <__do_copy_data>:
82: 11 e0 ldi r17, 0x01 ; 1
84: a0 e0 ldi r26, 0x00 ; 0
86: b1 e0 ldi r27, 0x01 ; 1
88: ee e1 ldi r30, 0x1E ; 30
8a: fd e0 ldi r31, 0x0D ; 13
8c: 02 c0 rjmp .+4 ; 0x92 <__do_copy_data+0x10>
8e: 05 90 lpm r0, Z+
90: 0d 92 st X+, r0
92: aa 30 cpi r26, 0x0A ; 10
94: b1 07 cpc r27, r17
96: d9 f7 brne .-10 ; 0x8e <__do_copy_data+0xc>
00000098 <__do_clear_bss>:
98: 21 e0 ldi r18, 0x01 ; 1
9a: aa e0 ldi r26, 0x0A ; 10
9c: b1 e0 ldi r27, 0x01 ; 1
9e: 01 c0 rjmp .+2 ; 0xa2 <.do_clear_bss_start>
000000a0 <.do_clear_bss_loop>:
a0: 1d 92 st X+, r1
000000a2 <.do_clear_bss_start>:
a2: a6 31 cpi r26, 0x16 ; 22
a4: b2 07 cpc r27, r18
a6: e1 f7 brne .-8 ; 0xa0 <.do_clear_bss_loop>
a8: 0e 94 f4 02 call 0x5e8 ; 0x5e8 <main>
ac: 0c 94 8d 06 jmp 0xd1a ; 0xd1a <_exit>
000000b0 <__bad_interrupt>:
b0: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000b4 <__vector_2>:
uint32_t volatile time = 0;
uint32_t volatile T_half = 0;
uint32_t volatile oldTime = 0;
// On External Interrupt:
ISR(INT1_vect) {
b4: 1f 92 push r1
b6: 0f 92 push r0
b8: 0f b6 in r0, 0x3f ; 63
ba: 0f 92 push r0
bc: 11 24 eor r1, r1
be: 2f 93 push r18
c0: 3f 93 push r19
c2: 8f 93 push r24
c4: 9f 93 push r25
c6: af 93 push r26
c8: bf 93 push r27
ca: ef 93 push r30
cc: ff 93 push r31
cli();
ce: f8 94 cli
T_half = time + TCNT1;
d0: 80 91 12 01 lds r24, 0x0112
d4: 90 91 13 01 lds r25, 0x0113
d8: a0 91 14 01 lds r26, 0x0114
dc: b0 91 15 01 lds r27, 0x0115
e0: e4 e8 ldi r30, 0x84 ; 132
e2: f0 e0 ldi r31, 0x00 ; 0
e4: 20 81 ld r18, Z
e6: 31 81 ldd r19, Z+1 ; 0x01
e8: 82 0f add r24, r18
ea: 93 1f adc r25, r19
ec: a1 1d adc r26, r1
ee: b1 1d adc r27, r1
f0: 80 93 0e 01 sts 0x010E, r24
f4: 90 93 0f 01 sts 0x010F, r25
f8: a0 93 10 01 sts 0x0110, r26
fc: b0 93 11 01 sts 0x0111, r27
TCNT1 = 0; // Reset Timer/Counter1
100: 11 82 std Z+1, r1 ; 0x01
102: 10 82 st Z, r1
time = 0;
104: 10 92 12 01 sts 0x0112, r1
108: 10 92 13 01 sts 0x0113, r1
10c: 10 92 14 01 sts 0x0114, r1
110: 10 92 15 01 sts 0x0115, r1
oldTime = 0;
114: 10 92 0a 01 sts 0x010A, r1
118: 10 92 0b 01 sts 0x010B, r1
11c: 10 92 0c 01 sts 0x010C, r1
120: 10 92 0d 01 sts 0x010D, r1
PORTC ^= 0x02;
124: 98 b1 in r25, 0x08 ; 8
126: 82 e0 ldi r24, 0x02 ; 2
128: 89 27 eor r24, r25
12a: 88 b9 out 0x08, r24 ; 8
//~ min = HUE_MID;
//~ max = HUE_MID;
//~ status = (status == 1 ? -1 : 1);
}
12c: ff 91 pop r31
12e: ef 91 pop r30
130: bf 91 pop r27
132: af 91 pop r26
134: 9f 91 pop r25
136: 8f 91 pop r24
138: 3f 91 pop r19
13a: 2f 91 pop r18
13c: 0f 90 pop r0
13e: 0f be out 0x3f, r0 ; 63
140: 0f 90 pop r0
142: 1f 90 pop r1
144: 18 95 reti
00000146 <__vector_13>:
// On Timer Overflow Interrupt:
ISR(TIMER1_OVF_vect) {
146: 1f 92 push r1
148: 0f 92 push r0
14a: 0f b6 in r0, 0x3f ; 63
14c: 0f 92 push r0
14e: 11 24 eor r1, r1
150: 8f 93 push r24
152: 9f 93 push r25
154: af 93 push r26
156: bf 93 push r27
time += 0x00010000;
158: 80 91 12 01 lds r24, 0x0112
15c: 90 91 13 01 lds r25, 0x0113
160: a0 91 14 01 lds r26, 0x0114
164: b0 91 15 01 lds r27, 0x0115
168: 11 96 adiw r26, 0x01 ; 1
16a: 80 93 12 01 sts 0x0112, r24
16e: 90 93 13 01 sts 0x0113, r25
172: a0 93 14 01 sts 0x0114, r26
176: b0 93 15 01 sts 0x0115, r27
}
17a: bf 91 pop r27
17c: af 91 pop r26
17e: 9f 91 pop r25
180: 8f 91 pop r24
182: 0f 90 pop r0
184: 0f be out 0x3f, r0 ; 63
186: 0f 90 pop r0
188: 1f 90 pop r1
18a: 18 95 reti
0000018c <writeZero>:
#define wait14 wait8; wait6
#define wait15 wait14; w_nop1
// WS2812B protocol
inline void writeZero() {
PORTC |= 0x01; // PORTC0 = 1, PORTC[5:1] = invariant
18c: 40 9a sbi 0x08, 0 ; 8
wait6;
18e: 00 c0 rjmp .+0 ; 0x190 <writeZero+0x4>
190: 00 c0 rjmp .+0 ; 0x192 <writeZero+0x6>
192: 00 c0 rjmp .+0 ; 0x194 <writeZero+0x8>
PORTC &= 0xfe; // PORTC0 = 0, PORTC[5:1] = invariant
194: 40 98 cbi 0x08, 0 ; 8
wait15;
196: 00 c0 rjmp .+0 ; 0x198 <writeZero+0xc>
198: 00 c0 rjmp .+0 ; 0x19a <writeZero+0xe>
19a: 00 c0 rjmp .+0 ; 0x19c <writeZero+0x10>
19c: 00 c0 rjmp .+0 ; 0x19e <writeZero+0x12>
19e: 00 c0 rjmp .+0 ; 0x1a0 <writeZero+0x14>
1a0: 00 c0 rjmp .+0 ; 0x1a2 <writeZero+0x16>
1a2: 00 c0 rjmp .+0 ; 0x1a4 <writeZero+0x18>
1a4: 00 00 nop
1a6: 08 95 ret
000001a8 <writeOne>:
}
// WS2812B protocol
inline void writeOne() {
PORTC |= 0x01; // PORTC0 = 1, PORTC[5:1] = invariant
1a8: 40 9a sbi 0x08, 0 ; 8
wait14;
1aa: 00 c0 rjmp .+0 ; 0x1ac <writeOne+0x4>
1ac: 00 c0 rjmp .+0 ; 0x1ae <writeOne+0x6>
1ae: 00 c0 rjmp .+0 ; 0x1b0 <writeOne+0x8>
1b0: 00 c0 rjmp .+0 ; 0x1b2 <writeOne+0xa>
1b2: 00 c0 rjmp .+0 ; 0x1b4 <writeOne+0xc>
1b4: 00 c0 rjmp .+0 ; 0x1b6 <writeOne+0xe>
1b6: 00 c0 rjmp .+0 ; 0x1b8 <writeOne+0x10>
PORTC &= 0xfe; // PORTC0 = 0, PORTC[5:1] = invariant
1b8: 40 98 cbi 0x08, 0 ; 8
wait8;
1ba: 00 c0 rjmp .+0 ; 0x1bc <writeOne+0x14>
1bc: 00 c0 rjmp .+0 ; 0x1be <writeOne+0x16>
1be: 00 c0 rjmp .+0 ; 0x1c0 <writeOne+0x18>
1c0: 00 c0 rjmp .+0 ; 0x1c2 <writeOne+0x1a>
1c2: 08 95 ret
000001c4 <writeRGB>:
}
inline void writeRGB(uint8_t red, uint8_t green, uint8_t blue) {
1c4: af 92 push r10
1c6: bf 92 push r11
1c8: cf 92 push r12
1ca: df 92 push r13
1cc: ef 92 push r14
1ce: ff 92 push r15
1d0: 0f 93 push r16
1d2: 1f 93 push r17
1d4: cf 93 push r28
1d6: df 93 push r29
1d8: c8 2e mov r12, r24
1da: e4 2e mov r14, r20
1dc: c8 e0 ldi r28, 0x08 ; 8
1de: d0 e0 ldi r29, 0x00 ; 0
int i;
for( i = 128; i > 0; i >>= 1 ) {
1e0: 00 e8 ldi r16, 0x80 ; 128
1e2: 10 e0 ldi r17, 0x00 ; 0
if( green & i ){
1e4: a6 2e mov r10, r22
1e6: b1 2c mov r11, r1
1e8: c8 01 movw r24, r16
1ea: 8a 21 and r24, r10
1ec: 9b 21 and r25, r11
1ee: 89 2b or r24, r25
1f0: 19 f0 breq .+6 ; 0x1f8 <writeRGB+0x34>
writeOne();
1f2: 0e 94 d4 00 call 0x1a8 ; 0x1a8 <writeOne>
1f6: 02 c0 rjmp .+4 ; 0x1fc <writeRGB+0x38>
} else {
writeZero();
1f8: 0e 94 c6 00 call 0x18c ; 0x18c <writeZero>
}
inline void writeRGB(uint8_t red, uint8_t green, uint8_t blue) {
int i;
for( i = 128; i > 0; i >>= 1 ) {
1fc: 15 95 asr r17
1fe: 07 95 ror r16
200: 21 97 sbiw r28, 0x01 ; 1
202: 91 f7 brne .-28 ; 0x1e8 <writeRGB+0x24>
204: c8 e0 ldi r28, 0x08 ; 8
206: d0 e0 ldi r29, 0x00 ; 0
208: 00 e8 ldi r16, 0x80 ; 128
20a: 10 e0 ldi r17, 0x00 ; 0
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
if( red & i ){
20c: d1 2c mov r13, r1
20e: c8 01 movw r24, r16
210: 8c 21 and r24, r12
212: 9d 21 and r25, r13
214: 89 2b or r24, r25
216: 19 f0 breq .+6 ; 0x21e <writeRGB+0x5a>
writeOne();
218: 0e 94 d4 00 call 0x1a8 ; 0x1a8 <writeOne>
21c: 02 c0 rjmp .+4 ; 0x222 <writeRGB+0x5e>
} else {
writeZero();
21e: 0e 94 c6 00 call 0x18c ; 0x18c <writeZero>
} else {
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
222: 15 95 asr r17
224: 07 95 ror r16
226: 21 97 sbiw r28, 0x01 ; 1
228: 91 f7 brne .-28 ; 0x20e <writeRGB+0x4a>
22a: c8 e0 ldi r28, 0x08 ; 8
22c: d0 e0 ldi r29, 0x00 ; 0
22e: 00 e8 ldi r16, 0x80 ; 128
230: 10 e0 ldi r17, 0x00 ; 0
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
if( blue & i ){
232: f1 2c mov r15, r1
234: c8 01 movw r24, r16
236: 8e 21 and r24, r14
238: 9f 21 and r25, r15
23a: 89 2b or r24, r25
23c: 19 f0 breq .+6 ; 0x244 <writeRGB+0x80>
writeOne();
23e: 0e 94 d4 00 call 0x1a8 ; 0x1a8 <writeOne>
242: 02 c0 rjmp .+4 ; 0x248 <writeRGB+0x84>
} else {
writeZero();
244: 0e 94 c6 00 call 0x18c ; 0x18c <writeZero>
} else {
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
248: 15 95 asr r17
24a: 07 95 ror r16
24c: 21 97 sbiw r28, 0x01 ; 1
24e: 91 f7 brne .-28 ; 0x234 <writeRGB+0x70>
writeOne();
} else {
writeZero();
}
}
}
250: df 91 pop r29
252: cf 91 pop r28
254: 1f 91 pop r17
256: 0f 91 pop r16
258: ff 90 pop r15
25a: ef 90 pop r14
25c: df 90 pop r13
25e: cf 90 pop r12
260: bf 90 pop r11
262: af 90 pop r10
264: 08 95 ret
00000266 <interpolate>:
#include "color_hsv.h"
void interpolate(hsv_t start, hsv_t end, size_t steps, hsv_t *colors) {
266: 2f 92 push r2
268: 3f 92 push r3
26a: 4f 92 push r4
26c: 5f 92 push r5
26e: 6f 92 push r6
270: 7f 92 push r7
272: 8f 92 push r8
274: 9f 92 push r9
276: af 92 push r10
278: bf 92 push r11
27a: cf 92 push r12
27c: df 92 push r13
27e: ef 92 push r14
280: ff 92 push r15
282: 0f 93 push r16
284: 1f 93 push r17
286: cf 93 push r28
288: df 93 push r29
28a: cd b7 in r28, 0x3d ; 61
28c: de b7 in r29, 0x3e ; 62
28e: 2a 97 sbiw r28, 0x0a ; 10
290: 0f b6 in r0, 0x3f ; 63
292: f8 94 cli
294: de bf out 0x3e, r29 ; 62
296: 0f be out 0x3f, r0 ; 63
298: cd bf out 0x3d, r28 ; 61
29a: d8 2e mov r13, r24
29c: c9 2e mov r12, r25
29e: f7 01 movw r30, r14
if( steps == 1 ) {
2a0: 01 30 cpi r16, 0x01 ; 1
2a2: 11 05 cpc r17, r1
2a4: 01 f1 breq .+64 ; 0x2e6 <interpolate+0x80>
return;
}
for( size_t i = 0; i < steps; i++ ) {
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
2a6: 3b 01 movw r6, r22
2a8: 29 01 movw r4, r18
2aa: 46 1a sub r4, r22
2ac: 57 0a sbc r5, r23
2ae: 84 2f mov r24, r20
2b0: 90 e0 ldi r25, 0x00 ; 0
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
2b2: bc 01 movw r22, r24
2b4: 6d 19 sub r22, r13
2b6: 71 09 sbc r23, r1
2b8: 7e 83 std Y+6, r23 ; 0x06
2ba: 6d 83 std Y+5, r22 ; 0x05
2bc: 85 2f mov r24, r21
2be: 90 e0 ldi r25, 0x00 ; 0
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
2c0: 9c 01 movw r18, r24
2c2: 2c 19 sub r18, r12
2c4: 31 09 sbc r19, r1
2c6: 38 87 std Y+8, r19 ; 0x08
2c8: 2f 83 std Y+7, r18 ; 0x07
2ca: 33 96 adiw r30, 0x03 ; 3
2cc: 1a 86 std Y+10, r1 ; 0x0a
2ce: 19 86 std Y+9, r1 ; 0x09
2d0: e1 2c mov r14, r1
2d2: f1 2c mov r15, r1
2d4: 80 e0 ldi r24, 0x00 ; 0
2d6: 90 e0 ldi r25, 0x00 ; 0
2d8: 20 e0 ldi r18, 0x00 ; 0
2da: 30 e0 ldi r19, 0x00 ; 0
return;
}
for( size_t i = 0; i < steps; i++ ) {
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
2dc: 58 01 movw r10, r16
2de: 41 e0 ldi r20, 0x01 ; 1
2e0: a4 1a sub r10, r20
2e2: b1 08 sbc r11, r1
2e4: 05 c0 rjmp .+10 ; 0x2f0 <interpolate+0x8a>
#include "color_hsv.h"
void interpolate(hsv_t start, hsv_t end, size_t steps, hsv_t *colors) {
if( steps == 1 ) {
colors[0] = start;
2e6: 60 83 st Z, r22
2e8: 71 83 std Z+1, r23 ; 0x01
2ea: 82 83 std Z+2, r24 ; 0x02
2ec: 93 83 std Z+3, r25 ; 0x03
return;
2ee: 3d c0 rjmp .+122 ; 0x36a <interpolate+0x104>
2f0: 1c 01 movw r2, r24
2f2: 24 0c add r2, r4
2f4: 35 1c adc r3, r5
2f6: 4d 81 ldd r20, Y+5 ; 0x05
2f8: 5e 81 ldd r21, Y+6 ; 0x06
2fa: 4e 0d add r20, r14
2fc: 5f 1d adc r21, r15
2fe: 5a 83 std Y+2, r21 ; 0x02
300: 49 83 std Y+1, r20 ; 0x01
302: 4f 81 ldd r20, Y+7 ; 0x07
304: 58 85 ldd r21, Y+8 ; 0x08
306: 69 85 ldd r22, Y+9 ; 0x09
308: 7a 85 ldd r23, Y+10 ; 0x0a
30a: 46 0f add r20, r22
30c: 57 1f adc r21, r23
30e: 5c 83 std Y+4, r21 ; 0x04
310: 4b 83 std Y+3, r20 ; 0x03
}
for( size_t i = 0; i < steps; i++ ) {
312: 20 17 cp r18, r16
314: 31 07 cpc r19, r17
316: 49 f1 breq .+82 ; 0x36a <interpolate+0x104>
318: 4f 01 movw r8, r30
31a: 53 e0 ldi r21, 0x03 ; 3
31c: 85 1a sub r8, r21
31e: 91 08 sbc r9, r1
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
320: b5 01 movw r22, r10
322: 0e 94 5f 06 call 0xcbe ; 0xcbe <__divmodhi4>
326: 66 0d add r22, r6
328: 77 1d adc r23, r7
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
colors[i] = tmp;
32a: d4 01 movw r26, r8
32c: 6d 93 st X+, r22
32e: 7c 93 st X, r23
330: 4f 01 movw r8, r30
332: b1 e0 ldi r27, 0x01 ; 1
334: 8b 1a sub r8, r27
336: 91 08 sbc r9, r1
}
for( size_t i = 0; i < steps; i++ ) {
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
338: c7 01 movw r24, r14
33a: b5 01 movw r22, r10
33c: 0e 94 5f 06 call 0xcbe ; 0xcbe <__divmodhi4>
340: 6d 0d add r22, r13
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
colors[i] = tmp;
342: d4 01 movw r26, r8
344: 6c 93 st X, r22
for( size_t i = 0; i < steps; i++ ) {
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
346: 89 85 ldd r24, Y+9 ; 0x09
348: 9a 85 ldd r25, Y+10 ; 0x0a
34a: b5 01 movw r22, r10
34c: 0e 94 5f 06 call 0xcbe ; 0xcbe <__divmodhi4>
350: 6c 0d add r22, r12
colors[i] = tmp;
352: 60 83 st Z, r22
if( steps == 1 ) {
colors[0] = start;
return;
}
for( size_t i = 0; i < steps; i++ ) {
354: 2f 5f subi r18, 0xFF ; 255
356: 3f 4f sbci r19, 0xFF ; 255
358: 34 96 adiw r30, 0x04 ; 4
35a: 4b 81 ldd r20, Y+3 ; 0x03
35c: 5c 81 ldd r21, Y+4 ; 0x04
35e: 5a 87 std Y+10, r21 ; 0x0a
360: 49 87 std Y+9, r20 ; 0x09
362: e9 80 ldd r14, Y+1 ; 0x01
364: fa 80 ldd r15, Y+2 ; 0x02
366: c1 01 movw r24, r2
368: c3 cf rjmp .-122 ; 0x2f0 <interpolate+0x8a>
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
colors[i] = tmp;
}
}
36a: 2a 96 adiw r28, 0x0a ; 10
36c: 0f b6 in r0, 0x3f ; 63
36e: f8 94 cli
370: de bf out 0x3e, r29 ; 62
372: 0f be out 0x3f, r0 ; 63
374: cd bf out 0x3d, r28 ; 61
376: df 91 pop r29
378: cf 91 pop r28
37a: 1f 91 pop r17
37c: 0f 91 pop r16
37e: ff 90 pop r15
380: ef 90 pop r14
382: df 90 pop r13
384: cf 90 pop r12
386: bf 90 pop r11
388: af 90 pop r10
38a: 9f 90 pop r9
38c: 8f 90 pop r8
38e: 7f 90 pop r7
390: 6f 90 pop r6
392: 5f 90 pop r5
394: 4f 90 pop r4
396: 3f 90 pop r3
398: 2f 90 pop r2
39a: 08 95 ret
0000039c <hsv2rgb>:
for(size_t i = 0; i < count; ++i) {
rgbList[i] = hsv2rgb(&hsvList[i]);
}
}
rgb_t hsv2rgb(hsv_t* hsv) {
39c: 2f 92 push r2
39e: 3f 92 push r3
3a0: 4f 92 push r4
3a2: 5f 92 push r5
3a4: 6f 92 push r6
3a6: 7f 92 push r7
3a8: 8f 92 push r8
3aa: 9f 92 push r9
3ac: af 92 push r10
3ae: bf 92 push r11
3b0: cf 92 push r12
3b2: df 92 push r13
3b4: ef 92 push r14
3b6: ff 92 push r15
3b8: 0f 93 push r16
3ba: 1f 93 push r17
3bc: cf 93 push r28
3be: df 93 push r29
3c0: 00 d0 rcall .+0 ; 0x3c2 <hsv2rgb+0x26>
3c2: 00 d0 rcall .+0 ; 0x3c4 <hsv2rgb+0x28>
3c4: cd b7 in r28, 0x3d ; 61
3c6: de b7 in r29, 0x3e ; 62
rgb_t res;
if(hsv->sat == 0) {
3c8: fc 01 movw r30, r24
3ca: b2 80 ldd r11, Z+2 ; 0x02
3cc: 33 80 ldd r3, Z+3 ; 0x03
3ce: b1 10 cpse r11, r1
3d0: 04 c0 rjmp .+8 ; 0x3da <hsv2rgb+0x3e>
res.r = res.g = res.b = hsv->val;
3d2: 23 2c mov r2, r3
3d4: 3b 82 std Y+3, r3 ; 0x03
3d6: 3c 82 std Y+4, r3 ; 0x04
3d8: c2 c0 rjmp .+388 ; 0x55e <hsv2rgb+0x1c2>
3da: fc 01 movw r30, r24
} else {
float hue = (float) (hsv->hue<360?hsv->hue:hsv->hue-360);
3dc: 00 81 ld r16, Z
3de: 11 81 ldd r17, Z+1 ; 0x01
3e0: b8 01 movw r22, r16
3e2: 08 36 cpi r16, 0x68 ; 104
3e4: f1 e0 ldi r31, 0x01 ; 1
3e6: 1f 07 cpc r17, r31
3e8: 10 f0 brcs .+4 ; 0x3ee <hsv2rgb+0x52>
3ea: 68 56 subi r22, 0x68 ; 104
3ec: 71 40 sbci r23, 0x01 ; 1
3ee: 80 e0 ldi r24, 0x00 ; 0
3f0: 90 e0 ldi r25, 0x00 ; 0
3f2: 0e 94 64 05 call 0xac8 ; 0xac8 <__floatunsisf>
3f6: 2b 01 movw r4, r22
3f8: 3c 01 movw r6, r24
float val = ((float) hsv->val ) / 100.0;
3fa: 63 2d mov r22, r3
3fc: 70 e0 ldi r23, 0x00 ; 0
3fe: 80 e0 ldi r24, 0x00 ; 0
400: 90 e0 ldi r25, 0x00 ; 0
402: 0e 94 64 05 call 0xac8 ; 0xac8 <__floatunsisf>
406: 20 e0 ldi r18, 0x00 ; 0
408: 30 e0 ldi r19, 0x00 ; 0
40a: 48 ec ldi r20, 0xC8 ; 200
40c: 52 e4 ldi r21, 0x42 ; 66
40e: 0e 94 c3 04 call 0x986 ; 0x986 <__divsf3>
412: 6b 01 movw r12, r22
414: 7c 01 movw r14, r24
float sat = ((float) hsv->sat ) / 100.0;
416: 6b 2d mov r22, r11
418: 70 e0 ldi r23, 0x00 ; 0
41a: 80 e0 ldi r24, 0x00 ; 0
41c: 90 e0 ldi r25, 0x00 ; 0
41e: 0e 94 64 05 call 0xac8 ; 0xac8 <__floatunsisf>
422: 20 e0 ldi r18, 0x00 ; 0
424: 30 e0 ldi r19, 0x00 ; 0
426: 48 ec ldi r20, 0xC8 ; 200
428: 52 e4 ldi r21, 0x42 ; 66
42a: 0e 94 c3 04 call 0x986 ; 0x986 <__divsf3>
42e: 4b 01 movw r8, r22
430: 5c 01 movw r10, r24
uint8_t h = hue / 60;
432: 20 e0 ldi r18, 0x00 ; 0
434: 30 e0 ldi r19, 0x00 ; 0
436: 40 e7 ldi r20, 0x70 ; 112
438: 52 e4 ldi r21, 0x42 ; 66
43a: c3 01 movw r24, r6
43c: b2 01 movw r22, r4
43e: 0e 94 c3 04 call 0x986 ; 0x986 <__divsf3>
442: 2b 01 movw r4, r22
444: 3c 01 movw r6, r24
446: 0e 94 35 05 call 0xa6a ; 0xa6a <__fixunssfsi>
44a: 6a 83 std Y+2, r22 ; 0x02
float f = ( hue / 60 ) - h;
44c: 70 e0 ldi r23, 0x00 ; 0
44e: 80 e0 ldi r24, 0x00 ; 0
450: 90 e0 ldi r25, 0x00 ; 0
452: 0e 94 66 05 call 0xacc ; 0xacc <__floatsisf>
456: 9b 01 movw r18, r22
458: ac 01 movw r20, r24
45a: c3 01 movw r24, r6
45c: b2 01 movw r22, r4
45e: 0e 94 56 04 call 0x8ac ; 0x8ac <__subsf3>
462: 2b 01 movw r4, r22
464: 3c 01 movw r6, r24
uint8_t p = RGB_MAX * ( val * ( 1 - sat ));
466: a5 01 movw r20, r10
468: 94 01 movw r18, r8
46a: 60 e0 ldi r22, 0x00 ; 0
46c: 70 e0 ldi r23, 0x00 ; 0
46e: 80 e8 ldi r24, 0x80 ; 128
470: 9f e3 ldi r25, 0x3F ; 63
472: 0e 94 56 04 call 0x8ac ; 0x8ac <__subsf3>
476: 9b 01 movw r18, r22
478: ac 01 movw r20, r24
47a: c7 01 movw r24, r14
47c: b6 01 movw r22, r12
47e: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
482: 20 e0 ldi r18, 0x00 ; 0
484: 30 e0 ldi r19, 0x00 ; 0
486: 40 e0 ldi r20, 0x00 ; 0
488: 53 e4 ldi r21, 0x43 ; 67
48a: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
48e: 0e 94 35 05 call 0xa6a ; 0xa6a <__fixunssfsi>
492: 26 2e mov r2, r22
uint8_t q = RGB_MAX * ( val * ( 1 - sat * f ));
494: a3 01 movw r20, r6
496: 92 01 movw r18, r4
498: c5 01 movw r24, r10
49a: b4 01 movw r22, r8
49c: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
4a0: 9b 01 movw r18, r22
4a2: ac 01 movw r20, r24
4a4: 60 e0 ldi r22, 0x00 ; 0
4a6: 70 e0 ldi r23, 0x00 ; 0
4a8: 80 e8 ldi r24, 0x80 ; 128
4aa: 9f e3 ldi r25, 0x3F ; 63
4ac: 0e 94 56 04 call 0x8ac ; 0x8ac <__subsf3>
4b0: 9b 01 movw r18, r22
4b2: ac 01 movw r20, r24
4b4: c7 01 movw r24, r14
4b6: b6 01 movw r22, r12
4b8: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
4bc: 20 e0 ldi r18, 0x00 ; 0
4be: 30 e0 ldi r19, 0x00 ; 0
4c0: 40 e0 ldi r20, 0x00 ; 0
4c2: 53 e4 ldi r21, 0x43 ; 67
4c4: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
4c8: 0e 94 35 05 call 0xa6a ; 0xa6a <__fixunssfsi>
4cc: 69 83 std Y+1, r22 ; 0x01
uint8_t t = RGB_MAX * ( val * ( 1 - sat * ( 1 - f )));
4ce: a3 01 movw r20, r6
4d0: 92 01 movw r18, r4
4d2: 60 e0 ldi r22, 0x00 ; 0
4d4: 70 e0 ldi r23, 0x00 ; 0
4d6: 80 e8 ldi r24, 0x80 ; 128
4d8: 9f e3 ldi r25, 0x3F ; 63
4da: 0e 94 56 04 call 0x8ac ; 0x8ac <__subsf3>
4de: 9b 01 movw r18, r22
4e0: ac 01 movw r20, r24
4e2: c5 01 movw r24, r10
4e4: b4 01 movw r22, r8
4e6: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
4ea: 9b 01 movw r18, r22
4ec: ac 01 movw r20, r24
4ee: 60 e0 ldi r22, 0x00 ; 0
4f0: 70 e0 ldi r23, 0x00 ; 0
4f2: 80 e8 ldi r24, 0x80 ; 128
4f4: 9f e3 ldi r25, 0x3F ; 63
4f6: 0e 94 56 04 call 0x8ac ; 0x8ac <__subsf3>
4fa: 9b 01 movw r18, r22
4fc: ac 01 movw r20, r24
4fe: c7 01 movw r24, r14
500: b6 01 movw r22, r12
502: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
506: 20 e0 ldi r18, 0x00 ; 0
508: 30 e0 ldi r19, 0x00 ; 0
50a: 40 e0 ldi r20, 0x00 ; 0
50c: 53 e4 ldi r21, 0x43 ; 67
50e: 0e 94 f2 05 call 0xbe4 ; 0xbe4 <__mulsf3>
512: 0e 94 35 05 call 0xa6a ; 0xa6a <__fixunssfsi>
switch(h) {
516: 2a 81 ldd r18, Y+2 ; 0x02
518: 82 2f mov r24, r18
51a: 90 e0 ldi r25, 0x00 ; 0
51c: 87 30 cpi r24, 0x07 ; 7
51e: 91 05 cpc r25, r1
520: e8 f4 brcc .+58 ; 0x55c <hsv2rgb+0x1c0>
522: fc 01 movw r30, r24
524: ec 5c subi r30, 0xCC ; 204
526: ff 4f sbci r31, 0xFF ; 255
528: 0c 94 73 06 jmp 0xce6 ; 0xce6 <__tablejump2__>
case 0:
case 6: res.r = hsv->val; res.g = t; res.b = p; break;
52c: 2b 82 std Y+3, r2 ; 0x03
52e: 6c 83 std Y+4, r22 ; 0x04
530: 23 2c mov r2, r3
532: 15 c0 rjmp .+42 ; 0x55e <hsv2rgb+0x1c2>
case 1: res.r = q; res.g = hsv->val; res.b = p; break;
534: 2b 82 std Y+3, r2 ; 0x03
536: 3c 82 std Y+4, r3 ; 0x04
538: 29 80 ldd r2, Y+1 ; 0x01
53a: 11 c0 rjmp .+34 ; 0x55e <hsv2rgb+0x1c2>
case 2: res.r = p; res.g = hsv->val; res.b = t; break;
53c: 6b 83 std Y+3, r22 ; 0x03
53e: 3c 82 std Y+4, r3 ; 0x04
540: 0e c0 rjmp .+28 ; 0x55e <hsv2rgb+0x1c2>
case 3: res.r = p; res.g = q; res.b = hsv->val; break;
542: 3b 82 std Y+3, r3 ; 0x03
544: 89 81 ldd r24, Y+1 ; 0x01
546: 8c 83 std Y+4, r24 ; 0x04
548: 0a c0 rjmp .+20 ; 0x55e <hsv2rgb+0x1c2>
case 4: res.r = t; res.g = p; res.b = hsv->val; break;
54a: 3b 82 std Y+3, r3 ; 0x03
54c: 2c 82 std Y+4, r2 ; 0x04
54e: 26 2e mov r2, r22
550: 06 c0 rjmp .+12 ; 0x55e <hsv2rgb+0x1c2>
case 5: res.r = hsv->hue; res.g = p; res.b = q; break;
552: e9 81 ldd r30, Y+1 ; 0x01
554: eb 83 std Y+3, r30 ; 0x03
556: 2c 82 std Y+4, r2 ; 0x04
558: 20 2e mov r2, r16
55a: 01 c0 rjmp .+2 ; 0x55e <hsv2rgb+0x1c2>
uint8_t p = RGB_MAX * ( val * ( 1 - sat ));
uint8_t q = RGB_MAX * ( val * ( 1 - sat * f ));
uint8_t t = RGB_MAX * ( val * ( 1 - sat * ( 1 - f )));
switch(h) {
55c: 21 2c mov r2, r1
case 5: res.r = hsv->hue; res.g = p; res.b = q; break;
}
}
return res;
}
55e: 62 2d mov r22, r2
560: 7c 81 ldd r23, Y+4 ; 0x04
562: 8b 81 ldd r24, Y+3 ; 0x03
564: 0f 90 pop r0
566: 0f 90 pop r0
568: 0f 90 pop r0
56a: 0f 90 pop r0
56c: df 91 pop r29
56e: cf 91 pop r28
570: 1f 91 pop r17
572: 0f 91 pop r16
574: ff 90 pop r15
576: ef 90 pop r14
578: df 90 pop r13
57a: cf 90 pop r12
57c: bf 90 pop r11
57e: af 90 pop r10
580: 9f 90 pop r9
582: 8f 90 pop r8
584: 7f 90 pop r7
586: 6f 90 pop r6
588: 5f 90 pop r5
58a: 4f 90 pop r4
58c: 3f 90 pop r3
58e: 2f 90 pop r2
590: 08 95 ret
00000592 <hsv2rgbList>:
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
colors[i] = tmp;
}
}
void hsv2rgbList(hsv_t* hsvList, rgb_t* rgbList, size_t count) {
592: cf 92 push r12
594: df 92 push r13
596: ef 92 push r14
598: ff 92 push r15
59a: 0f 93 push r16
59c: 1f 93 push r17
59e: cf 93 push r28
5a0: df 93 push r29
5a2: 6a 01 movw r12, r20
5a4: eb 01 movw r28, r22
5a6: 7c 01 movw r14, r24
for(size_t i = 0; i < count; ++i) {
5a8: 00 e0 ldi r16, 0x00 ; 0
5aa: 10 e0 ldi r17, 0x00 ; 0
5ac: 0c 15 cp r16, r12
5ae: 1d 05 cpc r17, r13
5b0: 61 f0 breq .+24 ; 0x5ca <hsv2rgbList+0x38>
rgbList[i] = hsv2rgb(&hsvList[i]);
5b2: c7 01 movw r24, r14
5b4: 0e 94 ce 01 call 0x39c ; 0x39c <hsv2rgb>
5b8: 69 93 st Y+, r22
5ba: 79 93 st Y+, r23
5bc: 89 93 st Y+, r24
colors[i] = tmp;
}
}
void hsv2rgbList(hsv_t* hsvList, rgb_t* rgbList, size_t count) {
for(size_t i = 0; i < count; ++i) {
5be: 0f 5f subi r16, 0xFF ; 255
5c0: 1f 4f sbci r17, 0xFF ; 255
5c2: 84 e0 ldi r24, 0x04 ; 4
5c4: e8 0e add r14, r24
5c6: f1 1c adc r15, r1
5c8: f1 cf rjmp .-30 ; 0x5ac <hsv2rgbList+0x1a>
rgbList[i] = hsv2rgb(&hsvList[i]);
}
}
5ca: df 91 pop r29
5cc: cf 91 pop r28
5ce: 1f 91 pop r17
5d0: 0f 91 pop r16
5d2: ff 90 pop r15
5d4: ef 90 pop r14
5d6: df 90 pop r13
5d8: cf 90 pop r12
5da: 08 95 ret
000005dc <init_hsv_t>:
5dc: 28 2f mov r18, r24
5de: 86 2f mov r24, r22
5e0: 62 2f mov r22, r18
5e2: 79 2f mov r23, r25
5e4: 94 2f mov r25, r20
5e6: 08 95 ret
000005e8 <main>:
// On Timer Overflow Interrupt:
ISR(TIMER1_OVF_vect) {
time += 0x00010000;
}
int main(void) {
5e8: cf 93 push r28
5ea: df 93 push r29
5ec: cd b7 in r28, 0x3d ; 61
5ee: de b7 in r29, 0x3e ; 62
5f0: c2 5d subi r28, 0xD2 ; 210
5f2: d1 09 sbc r29, r1
5f4: 0f b6 in r0, 0x3f ; 63
5f6: f8 94 cli
5f8: de bf out 0x3e, r29 ; 62
5fa: 0f be out 0x3f, r0 ; 63
5fc: cd bf out 0x3d, r28 ; 61
EIMSK |= 0x02; // External Interrupt Mask Register
5fe: e9 9a sbi 0x1d, 1 ; 29
// Enable INT1 (PIN5) for interrupt
EICRA |= 0x0c; // External Interrupt Control Register
600: 80 91 69 00 lds r24, 0x0069
604: 8c 60 ori r24, 0x0C ; 12
606: 80 93 69 00 sts 0x0069, r24
// INT1 on rising edge
TIMSK1 |= 0x01; // Timer/Counter1 Interrupt Mask Register
60a: 80 91 6f 00 lds r24, 0x006F
60e: 81 60 ori r24, 0x01 ; 1
610: 80 93 6f 00 sts 0x006F, r24
// Enable overflow interrupt
TCCR1B |= 0x01; // Timer/Counter1 Control Register B
614: 80 91 81 00 lds r24, 0x0081
618: 81 60 ori r24, 0x01 ; 1
61a: 80 93 81 00 sts 0x0081, r24
// Prescale Factor 1
SREG |= 0x80; // Status Register
61e: 8f b7 in r24, 0x3f ; 63
620: 80 68 ori r24, 0x80 ; 128
622: 8f bf out 0x3f, r24 ; 63
// Enable global interrupts
DDRC = 0x3f; // Digital Direction PORTC[5:0] = output
624: 8f e3 ldi r24, 0x3F ; 63
626: 87 b9 out 0x07, r24 ; 7
PORTC = 0x00;
628: 18 b8 out 0x08, r1 ; 8
// Init color
hsv_t colorsHSV[LEDS];
rgb_t colorsRGB[LEDS];
interpolate(
62a: 80 91 00 01 lds r24, 0x0100
62e: 90 91 01 01 lds r25, 0x0101
632: 44 e1 ldi r20, 0x14 ; 20
634: 64 e6 ldi r22, 0x64 ; 100
636: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
63a: 4b 01 movw r8, r22
63c: 5c 01 movw r10, r24
63e: 80 91 02 01 lds r24, 0x0102
642: 90 91 03 01 lds r25, 0x0103
646: 44 e1 ldi r20, 0x14 ; 20
648: 64 e6 ldi r22, 0x64 ; 100
64a: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
64e: 9e 01 movw r18, r28
650: 2f 5f subi r18, 0xFF ; 255
652: 3f 4f sbci r19, 0xFF ; 255
654: 79 01 movw r14, r18
656: 0e e1 ldi r16, 0x1E ; 30
658: 10 e0 ldi r17, 0x00 ; 0
65a: a5 01 movw r20, r10
65c: 94 01 movw r18, r8
65e: 0e 94 33 01 call 0x266 ; 0x266 <interpolate>
init_hsv_t(min, HUE_SAT, HUE_VAL), // from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
662: 4e e1 ldi r20, 0x1E ; 30
664: 50 e0 ldi r21, 0x00 ; 0
666: be 01 movw r22, r28
668: 67 58 subi r22, 0x87 ; 135
66a: 7f 4f sbci r23, 0xFF ; 255
66c: c7 01 movw r24, r14
66e: 0e 94 c9 02 call 0x592 ; 0x592 <hsv2rgbList>
672: 49 e7 ldi r20, 0x79 ; 121
674: a4 2e mov r10, r20
676: b1 2c mov r11, r1
678: ac 0e add r10, r28
67a: bd 1e adc r11, r29
67c: 32 e0 ldi r19, 0x02 ; 2
67e: a3 0e add r10, r19
680: b1 1c adc r11, r1
682: 4e 01 movw r8, r28
684: 85 ed ldi r24, 0xD5 ; 213
686: 88 0e add r8, r24
688: 91 1c adc r9, r1
68a: 85 01 movw r16, r10
68c: d8 01 movw r26, r16
68e: 11 97 sbiw r26, 0x01 ; 1
690: c8 01 movw r24, r16
692: 02 97 sbiw r24, 0x02 ; 2
// Assign color
for(int i = 0; i < LEDS; i++) {
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
694: f8 01 movw r30, r16
696: 40 81 ld r20, Z
698: 6c 91 ld r22, X
69a: fc 01 movw r30, r24
69c: 80 81 ld r24, Z
69e: 0e 94 e2 00 call 0x1c4 ; 0x1c4 <writeRGB>
6a2: 0d 5f subi r16, 0xFD ; 253
6a4: 1f 4f sbci r17, 0xFF ; 255
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
// Assign color
for(int i = 0; i < LEDS; i++) {
6a6: 08 15 cp r16, r8
6a8: 19 05 cpc r17, r9
6aa: 81 f7 brne .-32 ; 0x68c <main+0xa4>
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
}
// Next color
int8_t sign = 1;
min += sign * HUE_STEP;
6ac: 80 91 02 01 lds r24, 0x0102
6b0: 90 91 03 01 lds r25, 0x0103
6b4: 08 96 adiw r24, 0x08 ; 8
6b6: 90 93 03 01 sts 0x0103, r25
6ba: 80 93 02 01 sts 0x0102, r24
max -= sign * HUE_STEP;
6be: 80 91 00 01 lds r24, 0x0100
6c2: 90 91 01 01 lds r25, 0x0101
6c6: 08 97 sbiw r24, 0x08 ; 8
6c8: 90 93 01 01 sts 0x0101, r25
6cc: 80 93 00 01 sts 0x0100, r24
interpolate(
6d0: 80 91 00 01 lds r24, 0x0100
6d4: 90 91 01 01 lds r25, 0x0101
6d8: 44 e1 ldi r20, 0x14 ; 20
6da: 64 e6 ldi r22, 0x64 ; 100
6dc: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
6e0: 2b 01 movw r4, r22
6e2: 3c 01 movw r6, r24
6e4: 80 91 02 01 lds r24, 0x0102
6e8: 90 91 03 01 lds r25, 0x0103
6ec: 44 e1 ldi r20, 0x14 ; 20
6ee: 64 e6 ldi r22, 0x64 ; 100
6f0: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
6f4: 9e 01 movw r18, r28
6f6: 2f 5f subi r18, 0xFF ; 255
6f8: 3f 4f sbci r19, 0xFF ; 255
6fa: 79 01 movw r14, r18
6fc: 0e e1 ldi r16, 0x1E ; 30
6fe: 10 e0 ldi r17, 0x00 ; 0
700: a3 01 movw r20, r6
702: 92 01 movw r18, r4
704: 0e 94 33 01 call 0x266 ; 0x266 <interpolate>
init_hsv_t(min, HUE_SAT, HUE_VAL), // from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
708: 4e e1 ldi r20, 0x1E ; 30
70a: 50 e0 ldi r21, 0x00 ; 0
70c: be 01 movw r22, r28
70e: 67 58 subi r22, 0x87 ; 135
710: 7f 4f sbci r23, 0xFF ; 255
712: c7 01 movw r24, r14
714: 0e 94 c9 02 call 0x592 ; 0x592 <hsv2rgbList>
for(int i = 0; i < LEDS; i++) {
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
}
// Next color
int8_t sign = 1;
718: dd 24 eor r13, r13
71a: d3 94 inc r13
uint32_t T_step = T_half / colorSteps;
// Check if it is time for next color
if(time + TCNT1 > oldTime + T_step) {
oldTime += T_step;
PORTC ^= 0x04;
71c: 34 e0 ldi r19, 0x04 ; 4
71e: c3 2e mov r12, r19
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
while(1) {
sei();
720: 78 94 sei
uint32_t T_step = T_half / colorSteps;
722: 80 91 0e 01 lds r24, 0x010E
726: 90 91 0f 01 lds r25, 0x010F
72a: a0 91 10 01 lds r26, 0x0110
72e: b0 91 11 01 lds r27, 0x0111
732: 25 e0 ldi r18, 0x05 ; 5
734: b6 95 lsr r27
736: a7 95 ror r26
738: 97 95 ror r25
73a: 87 95 ror r24
73c: 2a 95 dec r18
73e: d1 f7 brne .-12 ; 0x734 <main+0x14c>
// Check if it is time for next color
if(time + TCNT1 > oldTime + T_step) {
740: 00 91 12 01 lds r16, 0x0112
744: 10 91 13 01 lds r17, 0x0113
748: 20 91 14 01 lds r18, 0x0114
74c: 30 91 15 01 lds r19, 0x0115
750: e0 91 84 00 lds r30, 0x0084
754: f0 91 85 00 lds r31, 0x0085
758: 40 91 0a 01 lds r20, 0x010A
75c: 50 91 0b 01 lds r21, 0x010B
760: 60 91 0c 01 lds r22, 0x010C
764: 70 91 0d 01 lds r23, 0x010D
768: 0e 0f add r16, r30
76a: 1f 1f adc r17, r31
76c: 21 1d adc r18, r1
76e: 31 1d adc r19, r1
770: 48 0f add r20, r24
772: 59 1f adc r21, r25
774: 6a 1f adc r22, r26
776: 7b 1f adc r23, r27
778: 40 17 cp r20, r16
77a: 51 07 cpc r21, r17
77c: 62 07 cpc r22, r18
77e: 73 07 cpc r23, r19
780: 78 f6 brcc .-98 ; 0x720 <main+0x138>
oldTime += T_step;
782: 40 91 0a 01 lds r20, 0x010A
786: 50 91 0b 01 lds r21, 0x010B
78a: 60 91 0c 01 lds r22, 0x010C
78e: 70 91 0d 01 lds r23, 0x010D
792: 84 0f add r24, r20
794: 95 1f adc r25, r21
796: a6 1f adc r26, r22
798: b7 1f adc r27, r23
79a: 80 93 0a 01 sts 0x010A, r24
79e: 90 93 0b 01 sts 0x010B, r25
7a2: a0 93 0c 01 sts 0x010C, r26
7a6: b0 93 0d 01 sts 0x010D, r27
PORTC ^= 0x04;
7aa: 88 b1 in r24, 0x08 ; 8
7ac: 8c 25 eor r24, r12
7ae: 88 b9 out 0x08, r24 ; 8
// Assign color
cli();
7b0: f8 94 cli
7b2: 85 01 movw r16, r10
7b4: d8 01 movw r26, r16
7b6: 11 97 sbiw r26, 0x01 ; 1
7b8: c8 01 movw r24, r16
7ba: 02 97 sbiw r24, 0x02 ; 2
for(int i = 0; i < LEDS; i++) {
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
7bc: f8 01 movw r30, r16
7be: 40 81 ld r20, Z
7c0: 6c 91 ld r22, X
7c2: fc 01 movw r30, r24
7c4: 80 81 ld r24, Z
7c6: 0e 94 e2 00 call 0x1c4 ; 0x1c4 <writeRGB>
7ca: 0d 5f subi r16, 0xFD ; 253
7cc: 1f 4f sbci r17, 0xFF ; 255
if(time + TCNT1 > oldTime + T_step) {
oldTime += T_step;
PORTC ^= 0x04;
// Assign color
cli();
for(int i = 0; i < LEDS; i++) {
7ce: 08 15 cp r16, r8
7d0: 19 05 cpc r17, r9
7d2: 81 f7 brne .-32 ; 0x7b4 <main+0x1cc>
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
}
sei();
7d4: 78 94 sei
//~ _delay_us(51);
// Next color
min += sign * HUE_STEP;
7d6: 80 91 02 01 lds r24, 0x0102
7da: 90 91 03 01 lds r25, 0x0103
7de: fd 2d mov r31, r13
7e0: 28 e0 ldi r18, 0x08 ; 8
7e2: f2 02 muls r31, r18
7e4: 80 0d add r24, r0
7e6: 91 1d adc r25, r1
7e8: 11 24 eor r1, r1
7ea: 90 93 03 01 sts 0x0103, r25
7ee: 80 93 02 01 sts 0x0102, r24
max -= sign * HUE_STEP;
7f2: 80 91 00 01 lds r24, 0x0100
7f6: 90 91 01 01 lds r25, 0x0101
7fa: 38 e0 ldi r19, 0x08 ; 8
7fc: f3 02 muls r31, r19
7fe: 80 19 sub r24, r0
800: 91 09 sbc r25, r1
802: 11 24 eor r1, r1
804: 90 93 01 01 sts 0x0101, r25
808: 80 93 00 01 sts 0x0100, r24
interpolate(
80c: 80 91 00 01 lds r24, 0x0100
810: 90 91 01 01 lds r25, 0x0101
814: 44 e1 ldi r20, 0x14 ; 20
816: 64 e6 ldi r22, 0x64 ; 100
818: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
81c: 2b 01 movw r4, r22
81e: 3c 01 movw r6, r24
820: 80 91 02 01 lds r24, 0x0102
824: 90 91 03 01 lds r25, 0x0103
828: 44 e1 ldi r20, 0x14 ; 20
82a: 64 e6 ldi r22, 0x64 ; 100
82c: 0e 94 ee 02 call 0x5dc ; 0x5dc <init_hsv_t>
830: fe 01 movw r30, r28
832: 31 96 adiw r30, 0x01 ; 1
834: 7f 01 movw r14, r30
836: 0e e1 ldi r16, 0x1E ; 30
838: 10 e0 ldi r17, 0x00 ; 0
83a: a3 01 movw r20, r6
83c: 92 01 movw r18, r4
83e: 0e 94 33 01 call 0x266 ; 0x266 <interpolate>
init_hsv_t(min, HUE_SAT, HUE_VAL), // from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
842: 4e e1 ldi r20, 0x1E ; 30
844: 50 e0 ldi r21, 0x00 ; 0
846: be 01 movw r22, r28
848: 67 58 subi r22, 0x87 ; 135
84a: 7f 4f sbci r23, 0xFF ; 255
84c: c7 01 movw r24, r14
84e: 0e 94 c9 02 call 0x592 ; 0x592 <hsv2rgbList>
// Check if reached amplitude
if(sign == 1 && (min >= HUE_MAX || max <= HUE_MIN)) {
852: f1 e0 ldi r31, 0x01 ; 1
854: df 12 cpse r13, r31
856: 12 c0 rjmp .+36 ; 0x87c <main+0x294>
858: 80 91 02 01 lds r24, 0x0102
85c: 90 91 03 01 lds r25, 0x0103
860: 82 36 cpi r24, 0x62 ; 98
862: 92 40 sbci r25, 0x02 ; 2
864: 18 f0 brcs .+6 ; 0x86c <main+0x284>
sign = -1;
866: dd 24 eor r13, r13
868: da 94 dec r13
86a: 5a cf rjmp .-332 ; 0x720 <main+0x138>
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
// Check if reached amplitude
if(sign == 1 && (min >= HUE_MAX || max <= HUE_MIN)) {
86c: 80 91 00 01 lds r24, 0x0100
870: 90 91 01 01 lds r25, 0x0101
874: 8f 35 cpi r24, 0x5F ; 95
876: 91 40 sbci r25, 0x01 ; 1
878: b0 f3 brcs .-20 ; 0x866 <main+0x27e>
87a: 52 cf rjmp .-348 ; 0x720 <main+0x138>
sign = -1;
} else if(sign == -1 && (min <= HUE_MIN || max >= HUE_MAX)) {
87c: 8f ef ldi r24, 0xFF ; 255
87e: d8 16 cp r13, r24
880: 11 f0 breq .+4 ; 0x886 <main+0x29e>
882: d1 2c mov r13, r1
884: 4d cf rjmp .-358 ; 0x720 <main+0x138>
886: 80 91 02 01 lds r24, 0x0102
88a: 90 91 03 01 lds r25, 0x0103
88e: 8f 35 cpi r24, 0x5F ; 95
890: 91 40 sbci r25, 0x01 ; 1
892: 18 f4 brcc .+6 ; 0x89a <main+0x2b2>
sign = 1;
894: dd 24 eor r13, r13
896: d3 94 inc r13
898: 43 cf rjmp .-378 ; 0x720 <main+0x138>
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
// Check if reached amplitude
if(sign == 1 && (min >= HUE_MAX || max <= HUE_MIN)) {
sign = -1;
} else if(sign == -1 && (min <= HUE_MIN || max >= HUE_MAX)) {
89a: 80 91 00 01 lds r24, 0x0100
89e: 90 91 01 01 lds r25, 0x0101
8a2: 82 36 cpi r24, 0x62 ; 98
8a4: 92 40 sbci r25, 0x02 ; 2
8a6: 08 f4 brcc .+2 ; 0x8aa <main+0x2c2>
8a8: 3b cf rjmp .-394 ; 0x720 <main+0x138>
8aa: f4 cf rjmp .-24 ; 0x894 <main+0x2ac>
000008ac <__subsf3>:
8ac: 50 58 subi r21, 0x80 ; 128
000008ae <__addsf3>:
8ae: bb 27 eor r27, r27
8b0: aa 27 eor r26, r26
8b2: 0e 94 6e 04 call 0x8dc ; 0x8dc <__addsf3x>
8b6: 0c 94 b8 05 jmp 0xb70 ; 0xb70 <__fp_round>
8ba: 0e 94 aa 05 call 0xb54 ; 0xb54 <__fp_pscA>
8be: 38 f0 brcs .+14 ; 0x8ce <__addsf3+0x20>
8c0: 0e 94 b1 05 call 0xb62 ; 0xb62 <__fp_pscB>
8c4: 20 f0 brcs .+8 ; 0x8ce <__addsf3+0x20>
8c6: 39 f4 brne .+14 ; 0x8d6 <__addsf3+0x28>
8c8: 9f 3f cpi r25, 0xFF ; 255
8ca: 19 f4 brne .+6 ; 0x8d2 <__addsf3+0x24>
8cc: 26 f4 brtc .+8 ; 0x8d6 <__addsf3+0x28>
8ce: 0c 94 a7 05 jmp 0xb4e ; 0xb4e <__fp_nan>
8d2: 0e f4 brtc .+2 ; 0x8d6 <__addsf3+0x28>
8d4: e0 95 com r30
8d6: e7 fb bst r30, 7
8d8: 0c 94 a1 05 jmp 0xb42 ; 0xb42 <__fp_inf>
000008dc <__addsf3x>:
8dc: e9 2f mov r30, r25
8de: 0e 94 c9 05 call 0xb92 ; 0xb92 <__fp_split3>
8e2: 58 f3 brcs .-42 ; 0x8ba <__addsf3+0xc>
8e4: ba 17 cp r27, r26
8e6: 62 07 cpc r22, r18
8e8: 73 07 cpc r23, r19
8ea: 84 07 cpc r24, r20
8ec: 95 07 cpc r25, r21
8ee: 20 f0 brcs .+8 ; 0x8f8 <__addsf3x+0x1c>
8f0: 79 f4 brne .+30 ; 0x910 <__stack+0x11>
8f2: a6 f5 brtc .+104 ; 0x95c <__stack+0x5d>
8f4: 0c 94 eb 05 jmp 0xbd6 ; 0xbd6 <__fp_zero>
8f8: 0e f4 brtc .+2 ; 0x8fc <__addsf3x+0x20>
8fa: e0 95 com r30
8fc: 0b 2e mov r0, r27
8fe: ba 2f mov r27, r26
900: a0 2d mov r26, r0
902: 0b 01 movw r0, r22
904: b9 01 movw r22, r18
906: 90 01 movw r18, r0
908: 0c 01 movw r0, r24
90a: ca 01 movw r24, r20
90c: a0 01 movw r20, r0
90e: 11 24 eor r1, r1
910: ff 27 eor r31, r31
912: 59 1b sub r21, r25
914: 99 f0 breq .+38 ; 0x93c <__stack+0x3d>
916: 59 3f cpi r21, 0xF9 ; 249
918: 50 f4 brcc .+20 ; 0x92e <__stack+0x2f>
91a: 50 3e cpi r21, 0xE0 ; 224
91c: 68 f1 brcs .+90 ; 0x978 <__stack+0x79>
91e: 1a 16 cp r1, r26
920: f0 40 sbci r31, 0x00 ; 0
922: a2 2f mov r26, r18
924: 23 2f mov r18, r19
926: 34 2f mov r19, r20
928: 44 27 eor r20, r20
92a: 58 5f subi r21, 0xF8 ; 248
92c: f3 cf rjmp .-26 ; 0x914 <__stack+0x15>
92e: 46 95 lsr r20
930: 37 95 ror r19
932: 27 95 ror r18
934: a7 95 ror r26
936: f0 40 sbci r31, 0x00 ; 0
938: 53 95 inc r21
93a: c9 f7 brne .-14 ; 0x92e <__stack+0x2f>
93c: 7e f4 brtc .+30 ; 0x95c <__stack+0x5d>
93e: 1f 16 cp r1, r31
940: ba 0b sbc r27, r26
942: 62 0b sbc r22, r18
944: 73 0b sbc r23, r19
946: 84 0b sbc r24, r20
948: ba f0 brmi .+46 ; 0x978 <__stack+0x79>
94a: 91 50 subi r25, 0x01 ; 1
94c: a1 f0 breq .+40 ; 0x976 <__stack+0x77>
94e: ff 0f add r31, r31
950: bb 1f adc r27, r27
952: 66 1f adc r22, r22
954: 77 1f adc r23, r23
956: 88 1f adc r24, r24
958: c2 f7 brpl .-16 ; 0x94a <__stack+0x4b>
95a: 0e c0 rjmp .+28 ; 0x978 <__stack+0x79>
95c: ba 0f add r27, r26
95e: 62 1f adc r22, r18
960: 73 1f adc r23, r19
962: 84 1f adc r24, r20
964: 48 f4 brcc .+18 ; 0x978 <__stack+0x79>
966: 87 95 ror r24
968: 77 95 ror r23
96a: 67 95 ror r22
96c: b7 95 ror r27
96e: f7 95 ror r31
970: 9e 3f cpi r25, 0xFE ; 254
972: 08 f0 brcs .+2 ; 0x976 <__stack+0x77>
974: b0 cf rjmp .-160 ; 0x8d6 <__addsf3+0x28>
976: 93 95 inc r25
978: 88 0f add r24, r24
97a: 08 f0 brcs .+2 ; 0x97e <__stack+0x7f>
97c: 99 27 eor r25, r25
97e: ee 0f add r30, r30
980: 97 95 ror r25
982: 87 95 ror r24
984: 08 95 ret
00000986 <__divsf3>:
986: 0e 94 d7 04 call 0x9ae ; 0x9ae <__divsf3x>
98a: 0c 94 b8 05 jmp 0xb70 ; 0xb70 <__fp_round>
98e: 0e 94 b1 05 call 0xb62 ; 0xb62 <__fp_pscB>
992: 58 f0 brcs .+22 ; 0x9aa <__divsf3+0x24>
994: 0e 94 aa 05 call 0xb54 ; 0xb54 <__fp_pscA>
998: 40 f0 brcs .+16 ; 0x9aa <__divsf3+0x24>
99a: 29 f4 brne .+10 ; 0x9a6 <__divsf3+0x20>
99c: 5f 3f cpi r21, 0xFF ; 255
99e: 29 f0 breq .+10 ; 0x9aa <__divsf3+0x24>
9a0: 0c 94 a1 05 jmp 0xb42 ; 0xb42 <__fp_inf>
9a4: 51 11 cpse r21, r1
9a6: 0c 94 ec 05 jmp 0xbd8 ; 0xbd8 <__fp_szero>
9aa: 0c 94 a7 05 jmp 0xb4e ; 0xb4e <__fp_nan>
000009ae <__divsf3x>:
9ae: 0e 94 c9 05 call 0xb92 ; 0xb92 <__fp_split3>
9b2: 68 f3 brcs .-38 ; 0x98e <__divsf3+0x8>
000009b4 <__divsf3_pse>:
9b4: 99 23 and r25, r25
9b6: b1 f3 breq .-20 ; 0x9a4 <__divsf3+0x1e>
9b8: 55 23 and r21, r21
9ba: 91 f3 breq .-28 ; 0x9a0 <__divsf3+0x1a>
9bc: 95 1b sub r25, r21
9be: 55 0b sbc r21, r21
9c0: bb 27 eor r27, r27
9c2: aa 27 eor r26, r26
9c4: 62 17 cp r22, r18
9c6: 73 07 cpc r23, r19
9c8: 84 07 cpc r24, r20
9ca: 38 f0 brcs .+14 ; 0x9da <__divsf3_pse+0x26>
9cc: 9f 5f subi r25, 0xFF ; 255
9ce: 5f 4f sbci r21, 0xFF ; 255
9d0: 22 0f add r18, r18
9d2: 33 1f adc r19, r19
9d4: 44 1f adc r20, r20
9d6: aa 1f adc r26, r26
9d8: a9 f3 breq .-22 ; 0x9c4 <__divsf3_pse+0x10>
9da: 35 d0 rcall .+106 ; 0xa46 <__divsf3_pse+0x92>
9dc: 0e 2e mov r0, r30
9de: 3a f0 brmi .+14 ; 0x9ee <__divsf3_pse+0x3a>
9e0: e0 e8 ldi r30, 0x80 ; 128
9e2: 32 d0 rcall .+100 ; 0xa48 <__divsf3_pse+0x94>
9e4: 91 50 subi r25, 0x01 ; 1
9e6: 50 40 sbci r21, 0x00 ; 0
9e8: e6 95 lsr r30
9ea: 00 1c adc r0, r0
9ec: ca f7 brpl .-14 ; 0x9e0 <__divsf3_pse+0x2c>
9ee: 2b d0 rcall .+86 ; 0xa46 <__divsf3_pse+0x92>
9f0: fe 2f mov r31, r30
9f2: 29 d0 rcall .+82 ; 0xa46 <__divsf3_pse+0x92>
9f4: 66 0f add r22, r22
9f6: 77 1f adc r23, r23
9f8: 88 1f adc r24, r24
9fa: bb 1f adc r27, r27
9fc: 26 17 cp r18, r22
9fe: 37 07 cpc r19, r23
a00: 48 07 cpc r20, r24
a02: ab 07 cpc r26, r27
a04: b0 e8 ldi r27, 0x80 ; 128
a06: 09 f0 breq .+2 ; 0xa0a <__divsf3_pse+0x56>
a08: bb 0b sbc r27, r27
a0a: 80 2d mov r24, r0
a0c: bf 01 movw r22, r30
a0e: ff 27 eor r31, r31
a10: 93 58 subi r25, 0x83 ; 131
a12: 5f 4f sbci r21, 0xFF ; 255
a14: 3a f0 brmi .+14 ; 0xa24 <__divsf3_pse+0x70>
a16: 9e 3f cpi r25, 0xFE ; 254
a18: 51 05 cpc r21, r1
a1a: 78 f0 brcs .+30 ; 0xa3a <__divsf3_pse+0x86>
a1c: 0c 94 a1 05 jmp 0xb42 ; 0xb42 <__fp_inf>
a20: 0c 94 ec 05 jmp 0xbd8 ; 0xbd8 <__fp_szero>
a24: 5f 3f cpi r21, 0xFF ; 255
a26: e4 f3 brlt .-8 ; 0xa20 <__divsf3_pse+0x6c>
a28: 98 3e cpi r25, 0xE8 ; 232
a2a: d4 f3 brlt .-12 ; 0xa20 <__divsf3_pse+0x6c>
a2c: 86 95 lsr r24
a2e: 77 95 ror r23
a30: 67 95 ror r22
a32: b7 95 ror r27
a34: f7 95 ror r31
a36: 9f 5f subi r25, 0xFF ; 255
a38: c9 f7 brne .-14 ; 0xa2c <__divsf3_pse+0x78>
a3a: 88 0f add r24, r24
a3c: 91 1d adc r25, r1
a3e: 96 95 lsr r25
a40: 87 95 ror r24
a42: 97 f9 bld r25, 7
a44: 08 95 ret
a46: e1 e0 ldi r30, 0x01 ; 1
a48: 66 0f add r22, r22
a4a: 77 1f adc r23, r23
a4c: 88 1f adc r24, r24
a4e: bb 1f adc r27, r27
a50: 62 17 cp r22, r18
a52: 73 07 cpc r23, r19
a54: 84 07 cpc r24, r20
a56: ba 07 cpc r27, r26
a58: 20 f0 brcs .+8 ; 0xa62 <__divsf3_pse+0xae>
a5a: 62 1b sub r22, r18
a5c: 73 0b sbc r23, r19
a5e: 84 0b sbc r24, r20
a60: ba 0b sbc r27, r26
a62: ee 1f adc r30, r30
a64: 88 f7 brcc .-30 ; 0xa48 <__divsf3_pse+0x94>
a66: e0 95 com r30
a68: 08 95 ret
00000a6a <__fixunssfsi>:
a6a: 0e 94 d1 05 call 0xba2 ; 0xba2 <__fp_splitA>
a6e: 88 f0 brcs .+34 ; 0xa92 <__fixunssfsi+0x28>
a70: 9f 57 subi r25, 0x7F ; 127
a72: 98 f0 brcs .+38 ; 0xa9a <__fixunssfsi+0x30>
a74: b9 2f mov r27, r25
a76: 99 27 eor r25, r25
a78: b7 51 subi r27, 0x17 ; 23
a7a: b0 f0 brcs .+44 ; 0xaa8 <__fixunssfsi+0x3e>
a7c: e1 f0 breq .+56 ; 0xab6 <__fixunssfsi+0x4c>
a7e: 66 0f add r22, r22
a80: 77 1f adc r23, r23
a82: 88 1f adc r24, r24
a84: 99 1f adc r25, r25
a86: 1a f0 brmi .+6 ; 0xa8e <__fixunssfsi+0x24>
a88: ba 95 dec r27
a8a: c9 f7 brne .-14 ; 0xa7e <__fixunssfsi+0x14>
a8c: 14 c0 rjmp .+40 ; 0xab6 <__fixunssfsi+0x4c>
a8e: b1 30 cpi r27, 0x01 ; 1
a90: 91 f0 breq .+36 ; 0xab6 <__fixunssfsi+0x4c>
a92: 0e 94 eb 05 call 0xbd6 ; 0xbd6 <__fp_zero>
a96: b1 e0 ldi r27, 0x01 ; 1
a98: 08 95 ret
a9a: 0c 94 eb 05 jmp 0xbd6 ; 0xbd6 <__fp_zero>
a9e: 67 2f mov r22, r23
aa0: 78 2f mov r23, r24
aa2: 88 27 eor r24, r24
aa4: b8 5f subi r27, 0xF8 ; 248
aa6: 39 f0 breq .+14 ; 0xab6 <__fixunssfsi+0x4c>
aa8: b9 3f cpi r27, 0xF9 ; 249
aaa: cc f3 brlt .-14 ; 0xa9e <__fixunssfsi+0x34>
aac: 86 95 lsr r24
aae: 77 95 ror r23
ab0: 67 95 ror r22
ab2: b3 95 inc r27
ab4: d9 f7 brne .-10 ; 0xaac <__fixunssfsi+0x42>
ab6: 3e f4 brtc .+14 ; 0xac6 <__fixunssfsi+0x5c>
ab8: 90 95 com r25
aba: 80 95 com r24
abc: 70 95 com r23
abe: 61 95 neg r22
ac0: 7f 4f sbci r23, 0xFF ; 255
ac2: 8f 4f sbci r24, 0xFF ; 255
ac4: 9f 4f sbci r25, 0xFF ; 255
ac6: 08 95 ret
00000ac8 <__floatunsisf>:
ac8: e8 94 clt
aca: 09 c0 rjmp .+18 ; 0xade <__floatsisf+0x12>
00000acc <__floatsisf>:
acc: 97 fb bst r25, 7
ace: 3e f4 brtc .+14 ; 0xade <__floatsisf+0x12>
ad0: 90 95 com r25
ad2: 80 95 com r24
ad4: 70 95 com r23
ad6: 61 95 neg r22
ad8: 7f 4f sbci r23, 0xFF ; 255
ada: 8f 4f sbci r24, 0xFF ; 255
adc: 9f 4f sbci r25, 0xFF ; 255
ade: 99 23 and r25, r25
ae0: a9 f0 breq .+42 ; 0xb0c <__floatsisf+0x40>
ae2: f9 2f mov r31, r25
ae4: 96 e9 ldi r25, 0x96 ; 150
ae6: bb 27 eor r27, r27
ae8: 93 95 inc r25
aea: f6 95 lsr r31
aec: 87 95 ror r24
aee: 77 95 ror r23
af0: 67 95 ror r22
af2: b7 95 ror r27
af4: f1 11 cpse r31, r1
af6: f8 cf rjmp .-16 ; 0xae8 <__floatsisf+0x1c>
af8: fa f4 brpl .+62 ; 0xb38 <__floatsisf+0x6c>
afa: bb 0f add r27, r27
afc: 11 f4 brne .+4 ; 0xb02 <__floatsisf+0x36>
afe: 60 ff sbrs r22, 0
b00: 1b c0 rjmp .+54 ; 0xb38 <__floatsisf+0x6c>
b02: 6f 5f subi r22, 0xFF ; 255
b04: 7f 4f sbci r23, 0xFF ; 255
b06: 8f 4f sbci r24, 0xFF ; 255
b08: 9f 4f sbci r25, 0xFF ; 255
b0a: 16 c0 rjmp .+44 ; 0xb38 <__floatsisf+0x6c>
b0c: 88 23 and r24, r24
b0e: 11 f0 breq .+4 ; 0xb14 <__floatsisf+0x48>
b10: 96 e9 ldi r25, 0x96 ; 150
b12: 11 c0 rjmp .+34 ; 0xb36 <__floatsisf+0x6a>
b14: 77 23 and r23, r23
b16: 21 f0 breq .+8 ; 0xb20 <__floatsisf+0x54>
b18: 9e e8 ldi r25, 0x8E ; 142
b1a: 87 2f mov r24, r23
b1c: 76 2f mov r23, r22
b1e: 05 c0 rjmp .+10 ; 0xb2a <__floatsisf+0x5e>
b20: 66 23 and r22, r22
b22: 71 f0 breq .+28 ; 0xb40 <__floatsisf+0x74>
b24: 96 e8 ldi r25, 0x86 ; 134
b26: 86 2f mov r24, r22
b28: 70 e0 ldi r23, 0x00 ; 0
b2a: 60 e0 ldi r22, 0x00 ; 0
b2c: 2a f0 brmi .+10 ; 0xb38 <__floatsisf+0x6c>
b2e: 9a 95 dec r25
b30: 66 0f add r22, r22
b32: 77 1f adc r23, r23
b34: 88 1f adc r24, r24
b36: da f7 brpl .-10 ; 0xb2e <__floatsisf+0x62>
b38: 88 0f add r24, r24
b3a: 96 95 lsr r25
b3c: 87 95 ror r24
b3e: 97 f9 bld r25, 7
b40: 08 95 ret
00000b42 <__fp_inf>:
b42: 97 f9 bld r25, 7
b44: 9f 67 ori r25, 0x7F ; 127
b46: 80 e8 ldi r24, 0x80 ; 128
b48: 70 e0 ldi r23, 0x00 ; 0
b4a: 60 e0 ldi r22, 0x00 ; 0
b4c: 08 95 ret
00000b4e <__fp_nan>:
b4e: 9f ef ldi r25, 0xFF ; 255
b50: 80 ec ldi r24, 0xC0 ; 192
b52: 08 95 ret
00000b54 <__fp_pscA>:
b54: 00 24 eor r0, r0
b56: 0a 94 dec r0
b58: 16 16 cp r1, r22
b5a: 17 06 cpc r1, r23
b5c: 18 06 cpc r1, r24
b5e: 09 06 cpc r0, r25
b60: 08 95 ret
00000b62 <__fp_pscB>:
b62: 00 24 eor r0, r0
b64: 0a 94 dec r0
b66: 12 16 cp r1, r18
b68: 13 06 cpc r1, r19
b6a: 14 06 cpc r1, r20
b6c: 05 06 cpc r0, r21
b6e: 08 95 ret
00000b70 <__fp_round>:
b70: 09 2e mov r0, r25
b72: 03 94 inc r0
b74: 00 0c add r0, r0
b76: 11 f4 brne .+4 ; 0xb7c <__fp_round+0xc>
b78: 88 23 and r24, r24
b7a: 52 f0 brmi .+20 ; 0xb90 <__fp_round+0x20>
b7c: bb 0f add r27, r27
b7e: 40 f4 brcc .+16 ; 0xb90 <__fp_round+0x20>
b80: bf 2b or r27, r31
b82: 11 f4 brne .+4 ; 0xb88 <__fp_round+0x18>
b84: 60 ff sbrs r22, 0
b86: 04 c0 rjmp .+8 ; 0xb90 <__fp_round+0x20>
b88: 6f 5f subi r22, 0xFF ; 255
b8a: 7f 4f sbci r23, 0xFF ; 255
b8c: 8f 4f sbci r24, 0xFF ; 255
b8e: 9f 4f sbci r25, 0xFF ; 255
b90: 08 95 ret
00000b92 <__fp_split3>:
b92: 57 fd sbrc r21, 7
b94: 90 58 subi r25, 0x80 ; 128
b96: 44 0f add r20, r20
b98: 55 1f adc r21, r21
b9a: 59 f0 breq .+22 ; 0xbb2 <__fp_splitA+0x10>
b9c: 5f 3f cpi r21, 0xFF ; 255
b9e: 71 f0 breq .+28 ; 0xbbc <__fp_splitA+0x1a>
ba0: 47 95 ror r20
00000ba2 <__fp_splitA>:
ba2: 88 0f add r24, r24
ba4: 97 fb bst r25, 7
ba6: 99 1f adc r25, r25
ba8: 61 f0 breq .+24 ; 0xbc2 <__fp_splitA+0x20>
baa: 9f 3f cpi r25, 0xFF ; 255
bac: 79 f0 breq .+30 ; 0xbcc <__fp_splitA+0x2a>
bae: 87 95 ror r24
bb0: 08 95 ret
bb2: 12 16 cp r1, r18
bb4: 13 06 cpc r1, r19
bb6: 14 06 cpc r1, r20
bb8: 55 1f adc r21, r21
bba: f2 cf rjmp .-28 ; 0xba0 <__fp_split3+0xe>
bbc: 46 95 lsr r20
bbe: f1 df rcall .-30 ; 0xba2 <__fp_splitA>
bc0: 08 c0 rjmp .+16 ; 0xbd2 <__fp_splitA+0x30>
bc2: 16 16 cp r1, r22
bc4: 17 06 cpc r1, r23
bc6: 18 06 cpc r1, r24
bc8: 99 1f adc r25, r25
bca: f1 cf rjmp .-30 ; 0xbae <__fp_splitA+0xc>
bcc: 86 95 lsr r24
bce: 71 05 cpc r23, r1
bd0: 61 05 cpc r22, r1
bd2: 08 94 sec
bd4: 08 95 ret
00000bd6 <__fp_zero>:
bd6: e8 94 clt
00000bd8 <__fp_szero>:
bd8: bb 27 eor r27, r27
bda: 66 27 eor r22, r22
bdc: 77 27 eor r23, r23
bde: cb 01 movw r24, r22
be0: 97 f9 bld r25, 7
be2: 08 95 ret
00000be4 <__mulsf3>:
be4: 0e 94 05 06 call 0xc0a ; 0xc0a <__mulsf3x>
be8: 0c 94 b8 05 jmp 0xb70 ; 0xb70 <__fp_round>
bec: 0e 94 aa 05 call 0xb54 ; 0xb54 <__fp_pscA>
bf0: 38 f0 brcs .+14 ; 0xc00 <__mulsf3+0x1c>
bf2: 0e 94 b1 05 call 0xb62 ; 0xb62 <__fp_pscB>
bf6: 20 f0 brcs .+8 ; 0xc00 <__mulsf3+0x1c>
bf8: 95 23 and r25, r21
bfa: 11 f0 breq .+4 ; 0xc00 <__mulsf3+0x1c>
bfc: 0c 94 a1 05 jmp 0xb42 ; 0xb42 <__fp_inf>
c00: 0c 94 a7 05 jmp 0xb4e ; 0xb4e <__fp_nan>
c04: 11 24 eor r1, r1
c06: 0c 94 ec 05 jmp 0xbd8 ; 0xbd8 <__fp_szero>
00000c0a <__mulsf3x>:
c0a: 0e 94 c9 05 call 0xb92 ; 0xb92 <__fp_split3>
c0e: 70 f3 brcs .-36 ; 0xbec <__mulsf3+0x8>
00000c10 <__mulsf3_pse>:
c10: 95 9f mul r25, r21
c12: c1 f3 breq .-16 ; 0xc04 <__mulsf3+0x20>
c14: 95 0f add r25, r21
c16: 50 e0 ldi r21, 0x00 ; 0
c18: 55 1f adc r21, r21
c1a: 62 9f mul r22, r18
c1c: f0 01 movw r30, r0
c1e: 72 9f mul r23, r18
c20: bb 27 eor r27, r27
c22: f0 0d add r31, r0
c24: b1 1d adc r27, r1
c26: 63 9f mul r22, r19
c28: aa 27 eor r26, r26
c2a: f0 0d add r31, r0
c2c: b1 1d adc r27, r1
c2e: aa 1f adc r26, r26
c30: 64 9f mul r22, r20
c32: 66 27 eor r22, r22
c34: b0 0d add r27, r0
c36: a1 1d adc r26, r1
c38: 66 1f adc r22, r22
c3a: 82 9f mul r24, r18
c3c: 22 27 eor r18, r18
c3e: b0 0d add r27, r0
c40: a1 1d adc r26, r1
c42: 62 1f adc r22, r18
c44: 73 9f mul r23, r19
c46: b0 0d add r27, r0
c48: a1 1d adc r26, r1
c4a: 62 1f adc r22, r18
c4c: 83 9f mul r24, r19
c4e: a0 0d add r26, r0
c50: 61 1d adc r22, r1
c52: 22 1f adc r18, r18
c54: 74 9f mul r23, r20
c56: 33 27 eor r19, r19
c58: a0 0d add r26, r0
c5a: 61 1d adc r22, r1
c5c: 23 1f adc r18, r19
c5e: 84 9f mul r24, r20
c60: 60 0d add r22, r0
c62: 21 1d adc r18, r1
c64: 82 2f mov r24, r18
c66: 76 2f mov r23, r22
c68: 6a 2f mov r22, r26
c6a: 11 24 eor r1, r1
c6c: 9f 57 subi r25, 0x7F ; 127
c6e: 50 40 sbci r21, 0x00 ; 0
c70: 9a f0 brmi .+38 ; 0xc98 <__mulsf3_pse+0x88>
c72: f1 f0 breq .+60 ; 0xcb0 <__mulsf3_pse+0xa0>
c74: 88 23 and r24, r24
c76: 4a f0 brmi .+18 ; 0xc8a <__mulsf3_pse+0x7a>
c78: ee 0f add r30, r30
c7a: ff 1f adc r31, r31
c7c: bb 1f adc r27, r27
c7e: 66 1f adc r22, r22
c80: 77 1f adc r23, r23
c82: 88 1f adc r24, r24
c84: 91 50 subi r25, 0x01 ; 1
c86: 50 40 sbci r21, 0x00 ; 0
c88: a9 f7 brne .-22 ; 0xc74 <__mulsf3_pse+0x64>
c8a: 9e 3f cpi r25, 0xFE ; 254
c8c: 51 05 cpc r21, r1
c8e: 80 f0 brcs .+32 ; 0xcb0 <__mulsf3_pse+0xa0>
c90: 0c 94 a1 05 jmp 0xb42 ; 0xb42 <__fp_inf>
c94: 0c 94 ec 05 jmp 0xbd8 ; 0xbd8 <__fp_szero>
c98: 5f 3f cpi r21, 0xFF ; 255
c9a: e4 f3 brlt .-8 ; 0xc94 <__mulsf3_pse+0x84>
c9c: 98 3e cpi r25, 0xE8 ; 232
c9e: d4 f3 brlt .-12 ; 0xc94 <__mulsf3_pse+0x84>
ca0: 86 95 lsr r24
ca2: 77 95 ror r23
ca4: 67 95 ror r22
ca6: b7 95 ror r27
ca8: f7 95 ror r31
caa: e7 95 ror r30
cac: 9f 5f subi r25, 0xFF ; 255
cae: c1 f7 brne .-16 ; 0xca0 <__mulsf3_pse+0x90>
cb0: fe 2b or r31, r30
cb2: 88 0f add r24, r24
cb4: 91 1d adc r25, r1
cb6: 96 95 lsr r25
cb8: 87 95 ror r24
cba: 97 f9 bld r25, 7
cbc: 08 95 ret
00000cbe <__divmodhi4>:
cbe: 97 fb bst r25, 7
cc0: 07 2e mov r0, r23
cc2: 16 f4 brtc .+4 ; 0xcc8 <__divmodhi4+0xa>
cc4: 00 94 com r0
cc6: 07 d0 rcall .+14 ; 0xcd6 <__divmodhi4_neg1>
cc8: 77 fd sbrc r23, 7
cca: 09 d0 rcall .+18 ; 0xcde <__divmodhi4_neg2>
ccc: 0e 94 79 06 call 0xcf2 ; 0xcf2 <__udivmodhi4>
cd0: 07 fc sbrc r0, 7
cd2: 05 d0 rcall .+10 ; 0xcde <__divmodhi4_neg2>
cd4: 3e f4 brtc .+14 ; 0xce4 <__divmodhi4_exit>
00000cd6 <__divmodhi4_neg1>:
cd6: 90 95 com r25
cd8: 81 95 neg r24
cda: 9f 4f sbci r25, 0xFF ; 255
cdc: 08 95 ret
00000cde <__divmodhi4_neg2>:
cde: 70 95 com r23
ce0: 61 95 neg r22
ce2: 7f 4f sbci r23, 0xFF ; 255
00000ce4 <__divmodhi4_exit>:
ce4: 08 95 ret
00000ce6 <__tablejump2__>:
ce6: ee 0f add r30, r30
ce8: ff 1f adc r31, r31
cea: 05 90 lpm r0, Z+
cec: f4 91 lpm r31, Z
cee: e0 2d mov r30, r0
cf0: 09 94 ijmp
00000cf2 <__udivmodhi4>:
cf2: aa 1b sub r26, r26
cf4: bb 1b sub r27, r27
cf6: 51 e1 ldi r21, 0x11 ; 17
cf8: 07 c0 rjmp .+14 ; 0xd08 <__udivmodhi4_ep>
00000cfa <__udivmodhi4_loop>:
cfa: aa 1f adc r26, r26
cfc: bb 1f adc r27, r27
cfe: a6 17 cp r26, r22
d00: b7 07 cpc r27, r23
d02: 10 f0 brcs .+4 ; 0xd08 <__udivmodhi4_ep>
d04: a6 1b sub r26, r22
d06: b7 0b sbc r27, r23
00000d08 <__udivmodhi4_ep>:
d08: 88 1f adc r24, r24
d0a: 99 1f adc r25, r25
d0c: 5a 95 dec r21
d0e: a9 f7 brne .-22 ; 0xcfa <__udivmodhi4_loop>
d10: 80 95 com r24
d12: 90 95 com r25
d14: bc 01 movw r22, r24
d16: cd 01 movw r24, r26
d18: 08 95 ret
00000d1a <_exit>:
d1a: f8 94 cli
00000d1c <__stop_program>:
d1c: ff cf rjmp .-2 ; 0xd1c <__stop_program>