gokul/acoustic-guitar-tuner
This code defines the physical pin configuration and footprint layouts for the ATtiny1616 microcontroller and a matching tactile switch component, including their key hardware connection points, dimensions, and 3D models.
- Version
- 1.0.10
- License
- unset
- Stars
- 1
firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino.t1616.10c0.mD0.v2611.lst
/Users/gokul/Library/Caches/arduino/sketches/8973098C7AF9C42C1264BF017CDD1C0B/acoustic_tuner_attiny1616.ino.elf: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
__vectors():
../../../../crt1/gcrt1.S:61
0: 6a c0 rjmp .+212 ; 0xd6 <__ctors_end>
2: 00 00 nop
../../../../crt1/gcrt1.S:67
4: 84 c0 rjmp .+264 ; 0x10e <__bad_interrupt>
6: 00 00 nop
../../../../crt1/gcrt1.S:68
8: 82 c0 rjmp .+260 ; 0x10e <__bad_interrupt>
a: 00 00 nop
../../../../crt1/gcrt1.S:69
c: 80 c0 rjmp .+256 ; 0x10e <__bad_interrupt>
e: 00 00 nop
../../../../crt1/gcrt1.S:70
10: 7e c0 rjmp .+252 ; 0x10e <__bad_interrupt>
12: 00 00 nop
../../../../crt1/gcrt1.S:71
14: 7c c0 rjmp .+248 ; 0x10e <__bad_interrupt>
16: 00 00 nop
../../../../crt1/gcrt1.S:72
18: 7a c0 rjmp .+244 ; 0x10e <__bad_interrupt>
1a: 00 00 nop
../../../../crt1/gcrt1.S:73
1c: 78 c0 rjmp .+240 ; 0x10e <__bad_interrupt>
1e: 00 00 nop
../../../../crt1/gcrt1.S:74
20: 76 c0 rjmp .+236 ; 0x10e <__bad_interrupt>
22: 00 00 nop
../../../../crt1/gcrt1.S:75
24: 74 c0 rjmp .+232 ; 0x10e <__bad_interrupt>
26: 00 00 nop
../../../../crt1/gcrt1.S:76
28: 72 c0 rjmp .+228 ; 0x10e <__bad_interrupt>
2a: 00 00 nop
../../../../crt1/gcrt1.S:77
2c: 70 c0 rjmp .+224 ; 0x10e <__bad_interrupt>
2e: 00 00 nop
../../../../crt1/gcrt1.S:78
30: 6e c0 rjmp .+220 ; 0x10e <__bad_interrupt>
32: 00 00 nop
../../../../crt1/gcrt1.S:79
34: 6c c0 rjmp .+216 ; 0x10e <__bad_interrupt>
36: 00 00 nop
../../../../crt1/gcrt1.S:80
38: 6a c0 rjmp .+212 ; 0x10e <__bad_interrupt>
3a: 00 00 nop
../../../../crt1/gcrt1.S:81
3c: b1 c3 rjmp .+1890 ; 0x7a0 <__vector_15>
3e: 00 00 nop
../../../../crt1/gcrt1.S:82
40: 66 c0 rjmp .+204 ; 0x10e <__bad_interrupt>
42: 00 00 nop
../../../../crt1/gcrt1.S:83
44: 64 c0 rjmp .+200 ; 0x10e <__bad_interrupt>
46: 00 00 nop
../../../../crt1/gcrt1.S:84
48: 62 c0 rjmp .+196 ; 0x10e <__bad_interrupt>
4a: 00 00 nop
../../../../crt1/gcrt1.S:85
4c: 60 c0 rjmp .+192 ; 0x10e <__bad_interrupt>
4e: 00 00 nop
../../../../crt1/gcrt1.S:86
50: 5e c0 rjmp .+188 ; 0x10e <__bad_interrupt>
52: 00 00 nop
../../../../crt1/gcrt1.S:87
54: 5c c0 rjmp .+184 ; 0x10e <__bad_interrupt>
56: 00 00 nop
../../../../crt1/gcrt1.S:88
58: 5a c0 rjmp .+180 ; 0x10e <__bad_interrupt>
5a: 00 00 nop
../../../../crt1/gcrt1.S:89
5c: 58 c0 rjmp .+176 ; 0x10e <__bad_interrupt>
5e: 00 00 nop
../../../../crt1/gcrt1.S:90
60: 56 c0 rjmp .+172 ; 0x10e <__bad_interrupt>
62: 00 00 nop
../../../../crt1/gcrt1.S:91
64: 54 c0 rjmp .+168 ; 0x10e <__bad_interrupt>
66: 00 00 nop
../../../../crt1/gcrt1.S:92
68: 52 c0 rjmp .+164 ; 0x10e <__bad_interrupt>
6a: 00 00 nop
../../../../crt1/gcrt1.S:93
6c: 50 c0 rjmp .+160 ; 0x10e <__bad_interrupt>
6e: 00 00 nop
../../../../crt1/gcrt1.S:94
70: 4e c0 rjmp .+156 ; 0x10e <__bad_interrupt>
72: 00 00 nop
../../../../crt1/gcrt1.S:95
74: 4c c0 rjmp .+152 ; 0x10e <__bad_interrupt>
76: 00 00 nop
../../../../crt1/gcrt1.S:96
78: 4a c0 rjmp .+148 ; 0x10e <__bad_interrupt>
7a: 00 00 nop
7c: 08 00 .word 0x0008 ; ????
7e: 00 00 nop
80: be 92 st -X, r11
82: 24 49 sbci r18, 0x94 ; 148
84: 12 3e cpi r17, 0xE2 ; 226
86: ab aa std Y+51, r10 ; 0x33
88: aa 2a or r10, r26
8a: be cd rjmp .-1156 ; 0xfffffc08 <__eeprom_end+0xff7efc08>
8c: cc cc rjmp .-1640 ; 0xfffffa26 <__eeprom_end+0xff7efa26>
8e: 4c 3e cpi r20, 0xEC ; 236
90: 00 00 nop
92: 00 80 ld r0, Z
94: be ab std Y+54, r27 ; 0x36
96: aa aa std Y+50, r10 ; 0x32
98: aa 3e cpi r26, 0xEA ; 234
9a: 00 00 nop
9c: 00 00 nop
9e: bf 00 .word 0x00bf ; ????
a0: 00 00 nop
a2: 80 3f cpi r24, 0xF0 ; 240
a4: 00 00 nop
a6: 00 00 nop
a8: 00 08 sbc r0, r0
aa: 41 78 andi r20, 0x81 ; 129
ac: d3 bb out 0x13, r29 ; 19
ae: 43 87 std Z+11, r20 ; 0x0b
b0: d1 13 cpse r29, r17
b2: 3d 19 sub r19, r13
b4: 0e 3c cpi r16, 0xCE ; 206
b6: c3 bd out 0x23, r28 ; 35
b8: 42 82 std Z+2, r4 ; 0x02
ba: ad 2b or r26, r29
bc: 3e 68 ori r19, 0x8E ; 142
be: ec 82 std Y+4, r14 ; 0x04
c0: 76 be out 0x36, r7 ; 54
c2: d9 8f std Y+25, r29 ; 0x19
c4: e1 a9 ldd r30, Z+49 ; 0x31
c6: 3e 4c sbci r19, 0xCE ; 206
c8: 80 ef ldi r24, 0xF0 ; 240
ca: ff be out 0x3f, r15 ; 63
cc: 01 c4 rjmp .+2050 ; 0x8d0 <__DATA_REGION_LENGTH__+0xd0>
ce: ff 7f andi r31, 0xFF ; 255
d0: 3f 00 .word 0x003f ; ????
d2: 00 00 nop
...
000000d6 <__ctors_end>:
__trampolines_start():
../../../../crt1/gcrt1.S:230
d6: 11 24 eor r1, r1
../../../../crt1/gcrt1.S:231
d8: 1f be out 0x3f, r1 ; 63
../../../../crt1/gcrt1.S:232
da: cf ef ldi r28, 0xFF ; 255
../../../../crt1/gcrt1.S:234
dc: cd bf out 0x3d, r28 ; 61
../../../../crt1/gcrt1.S:236
de: df e3 ldi r29, 0x3F ; 63
../../../../crt1/gcrt1.S:237
e0: de bf out 0x3e, r29 ; 62
000000e2 <_initThreeStuff()>:
_Z15_initThreeStuffv():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:104
/* Minimum: Reset if we wound up here through malfunction - this relies on user clearing the *
* register on startup, which is rarely done in Arduino land. */
void __attribute__((weak)) init_reset_flags() ;
void __attribute__((weak)) init_reset_flags() {
uint8_t flags = RSTCTRL.RSTFR;
e2: 80 91 40 00 lds r24, 0x0040 ; 0x800040 <digital_pin_to_bit_mask+0x7f6fd1>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:105
RSTCTRL.RSTFR = flags;
e6: 80 93 40 00 sts 0x0040, r24 ; 0x800040 <digital_pin_to_bit_mask+0x7f6fd1>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:106
if (flags == 0) {
ea: 81 11 cpse r24, r1
ec: 05 c0 rjmp .+10 ; 0xf8 <_initThreeStuff()+0x16>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:107
_PROTECTED_WRITE(RSTCTRL.SWRR, 1);
ee: 98 ed ldi r25, 0xD8 ; 216
f0: 21 e0 ldi r18, 0x01 ; 1
f2: 94 bf out 0x34, r25 ; 52
f4: 20 93 41 00 sts 0x0041, r18 ; 0x800041 <digital_pin_to_bit_mask+0x7f6fd2>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:109
}
GPIOR0 = flags;
f8: 8c bb out 0x1c, r24 ; 28
000000fa <__do_clear_bss>:
__do_clear_bss():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2441
fa: 2a e3 ldi r18, 0x3A ; 58
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2442
fc: a0 e0 ldi r26, 0x00 ; 0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2443
fe: b8 e3 ldi r27, 0x38 ; 56
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2444
100: 01 c0 rjmp .+2 ; 0x104 <.do_clear_bss_start>
00000102 <.do_clear_bss_loop>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2446
102: 1d 92 st X+, r1
00000104 <.do_clear_bss_start>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2448
104: aa 30 cpi r26, 0x0A ; 10
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2449
106: b2 07 cpc r27, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2450
108: e1 f7 brne .-8 ; 0x102 <.do_clear_bss_loop>
.do_clear_bss_start():
../../../../crt1/gcrt1.S:314
10a: 79 d3 rcall .+1778 ; 0x7fe <main>
../../../../crt1/gcrt1.S:315
10c: 80 c7 rjmp .+3840 ; 0x100e <_exit>
0000010e <__bad_interrupt>:
__vector_22():
10e: 78 cf rjmp .-272 ; 0x0 <__vectors>
00000110 <tuner::estimate(int const*) [clone .constprop.3]>:
_ZN5tuner8estimateEPKi.constprop.3():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:14
constexpr uint16_t lastLag = 119;
// Input is signed, mean-removed, 10-bit ADC data. Fixed bounds keep SRAM use
// predictable on the ATtiny1616. Scores use the same normalization for peak
// selection and interpolation, unlike the earlier raw-correlation interpolator.
inline float estimate(const int16_t* samples) {
110: 2f 92 push r2
112: 3f 92 push r3
114: 4f 92 push r4
116: 5f 92 push r5
118: 6f 92 push r6
11a: 7f 92 push r7
11c: 8f 92 push r8
11e: 9f 92 push r9
120: af 92 push r10
122: bf 92 push r11
124: cf 92 push r12
126: df 92 push r13
128: ef 92 push r14
12a: ff 92 push r15
12c: 0f 93 push r16
12e: 1f 93 push r17
130: cf 93 push r28
132: df 93 push r29
134: cd b7 in r28, 0x3d ; 61
136: de b7 in r29, 0x3e ; 62
138: c0 5f subi r28, 0xF0 ; 240
13a: d1 40 sbci r29, 0x01 ; 1
13c: cd bf out 0x3d, r28 ; 61
13e: de bf out 0x3e, r29 ; 62
140: 2a e0 ldi r18, 0x0A ; 10
142: 38 e3 ldi r19, 0x38 ; 56
144: cd 51 subi r28, 0x1D ; 29
146: de 4f sbci r29, 0xFE ; 254
148: 28 83 st Y, r18
14a: 39 83 std Y+1, r19 ; 0x01
14c: c3 5e subi r28, 0xE3 ; 227
14e: d1 40 sbci r29, 0x01 ; 1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:15
int32_t energy = 0;
150: c1 2c mov r12, r1
152: d1 2c mov r13, r1
154: 76 01 movw r14, r12
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:17
for (uint16_t i = 0; i < sampleCount; ++i)
energy += (int32_t)samples[i] * samples[i];
156: cd 51 subi r28, 0x1D ; 29
158: de 4f sbci r29, 0xFE ; 254
15a: e8 81 ld r30, Y
15c: f9 81 ldd r31, Y+1 ; 0x01
15e: c3 5e subi r28, 0xE3 ; 227
160: d1 40 sbci r29, 0x01 ; 1
162: a1 91 ld r26, Z+
164: b1 91 ld r27, Z+
166: cd 51 subi r28, 0x1D ; 29
168: de 4f sbci r29, 0xFE ; 254
16a: e8 83 st Y, r30
16c: f9 83 std Y+1, r31 ; 0x01
16e: c3 5e subi r28, 0xE3 ; 227
170: d1 40 sbci r29, 0x01 ; 1
172: 9d 01 movw r18, r26
174: 05 d7 rcall .+3594 ; 0xf80 <__mulhisi3>
176: c6 0e add r12, r22
178: d7 1e adc r13, r23
17a: e8 1e adc r14, r24
17c: f9 1e adc r15, r25
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:16
// Input is signed, mean-removed, 10-bit ADC data. Fixed bounds keep SRAM use
// predictable on the ATtiny1616. Scores use the same normalization for peak
// selection and interpolation, unlike the earlier raw-correlation interpolator.
inline float estimate(const int16_t* samples) {
int32_t energy = 0;
for (uint16_t i = 0; i < sampleCount; ++i)
17e: ea 50 subi r30, 0x0A ; 10
180: fa 43 sbci r31, 0x3A ; 58
182: 49 f7 brne .-46 ; 0x156 <tuner::estimate(int const*) [clone .constprop.3]+0x46>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:18
energy += (int32_t)samples[i] * samples[i];
if (energy < 1024) return 0;
184: c1 14 cp r12, r1
186: 34 e0 ldi r19, 0x04 ; 4
188: d3 06 cpc r13, r19
18a: e1 04 cpc r14, r1
18c: f1 04 cpc r15, r1
18e: 0c f4 brge .+2 ; 0x192 <tuner::estimate(int const*) [clone .constprop.3]+0x82>
190: be c1 rjmp .+892 ; 0x50e <__LOCK_REGION_LENGTH__+0x10e>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:20
float score[lastLag + 1] = {};
192: 80 ee ldi r24, 0xE0 ; 224
194: 91 e0 ldi r25, 0x01 ; 1
196: fe 01 movw r30, r28
198: 31 96 adiw r30, 0x01 ; 1
19a: df 01 movw r26, r30
19c: 9c 01 movw r18, r24
19e: 1d 92 st X+, r1
1a0: 21 50 subi r18, 0x01 ; 1
1a2: 30 40 sbci r19, 0x00 ; 0
1a4: e1 f7 brne .-8 ; 0x19e <tuner::estimate(int const*) [clone .constprop.3]+0x8e>
1a6: ae 01 movw r20, r28
1a8: 4b 5a subi r20, 0xAB ; 171
1aa: 5f 4f sbci r21, 0xFF ; 255
1ac: cf 51 subi r28, 0x1F ; 31
1ae: de 4f sbci r29, 0xFE ; 254
1b0: 48 83 st Y, r20
1b2: 59 83 std Y+1, r21 ; 0x01
1b4: c1 5e subi r28, 0xE1 ; 225
1b6: d1 40 sbci r29, 0x01 ; 1
1b8: c1 51 subi r28, 0x11 ; 17
1ba: de 4f sbci r29, 0xFE ; 254
1bc: 48 83 st Y, r20
1be: 59 83 std Y+1, r21 ; 0x01
1c0: cf 5e subi r28, 0xEF ; 239
1c2: d1 40 sbci r29, 0x01 ; 1
1c4: 4b ee ldi r20, 0xEB ; 235
1c6: 84 2e mov r8, r20
1c8: 91 2c mov r9, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:21
float strongest = 0;
1ca: a1 2c mov r10, r1
1cc: b1 2c mov r11, r1
1ce: 00 e0 ldi r16, 0x00 ; 0
1d0: 10 e0 ldi r17, 0x00 ; 0
1d2: c4 01 movw r24, r8
1d4: 88 0f add r24, r24
1d6: 99 1f adc r25, r25
1d8: cd 51 subi r28, 0x1D ; 29
1da: de 4f sbci r29, 0xFE ; 254
1dc: a8 81 ld r26, Y
1de: b9 81 ldd r27, Y+1 ; 0x01
1e0: c3 5e subi r28, 0xE3 ; 227
1e2: d1 40 sbci r29, 0x01 ; 1
1e4: a8 1b sub r26, r24
1e6: b9 0b sbc r27, r25
1e8: c5 51 subi r28, 0x15 ; 21
1ea: de 4f sbci r29, 0xFE ; 254
1ec: a8 83 st Y, r26
1ee: b9 83 std Y+1, r27 ; 0x01
1f0: cb 5e subi r28, 0xEB ; 235
1f2: d1 40 sbci r29, 0x01 ; 1
1f4: ea e0 ldi r30, 0x0A ; 10
1f6: f8 e3 ldi r31, 0x38 ; 56
1f8: c3 51 subi r28, 0x13 ; 19
1fa: de 4f sbci r29, 0xFE ; 254
1fc: e8 83 st Y, r30
1fe: f9 83 std Y+1, r31 ; 0x01
200: cd 5e subi r28, 0xED ; 237
202: d1 40 sbci r29, 0x01 ; 1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:24
for (uint16_t lag = firstLag; lag <= lastLag; ++lag) {
int32_t cross = 0, a2 = 0, b2 = 0;
for (uint16_t i = 0; i < sampleCount - lag; ++i) {
204: 31 2c mov r3, r1
206: 21 2c mov r2, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:23
if (energy < 1024) return 0;
float score[lastLag + 1] = {};
float strongest = 0;
for (uint16_t lag = firstLag; lag <= lastLag; ++lag) {
int32_t cross = 0, a2 = 0, b2 = 0;
208: c1 2c mov r12, r1
20a: d1 2c mov r13, r1
20c: 76 01 movw r14, r12
20e: c9 51 subi r28, 0x19 ; 25
210: de 4f sbci r29, 0xFE ; 254
212: 18 82 st Y, r1
214: 19 82 std Y+1, r1 ; 0x01
216: 1a 82 std Y+2, r1 ; 0x02
218: 1b 82 std Y+3, r1 ; 0x03
21a: c7 5e subi r28, 0xE7 ; 231
21c: d1 40 sbci r29, 0x01 ; 1
21e: 41 2c mov r4, r1
220: 51 2c mov r5, r1
222: 32 01 movw r6, r4
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:24
for (uint16_t i = 0; i < sampleCount - lag; ++i) {
224: 28 14 cp r2, r8
226: 39 04 cpc r3, r9
228: 08 f0 brcs .+2 ; 0x22c <tuner::estimate(int const*) [clone .constprop.3]+0x11c>
22a: 44 c0 rjmp .+136 ; 0x2b4 <tuner::estimate(int const*) [clone .constprop.3]+0x1a4>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:25
const int16_t a = samples[i], b = samples[i + lag];
22c: c3 51 subi r28, 0x13 ; 19
22e: de 4f sbci r29, 0xFE ; 254
230: e8 81 ld r30, Y
232: f9 81 ldd r31, Y+1 ; 0x01
234: cd 5e subi r28, 0xED ; 237
236: d1 40 sbci r29, 0x01 ; 1
238: 41 91 ld r20, Z+
23a: 51 91 ld r21, Z+
23c: c3 51 subi r28, 0x13 ; 19
23e: de 4f sbci r29, 0xFE ; 254
240: e8 83 st Y, r30
242: f9 83 std Y+1, r31 ; 0x01
244: cd 5e subi r28, 0xED ; 237
246: d1 40 sbci r29, 0x01 ; 1
248: c5 51 subi r28, 0x15 ; 21
24a: de 4f sbci r29, 0xFE ; 254
24c: a8 81 ld r26, Y
24e: b9 81 ldd r27, Y+1 ; 0x01
250: cb 5e subi r28, 0xEB ; 235
252: d1 40 sbci r29, 0x01 ; 1
254: ed 91 ld r30, X+
256: fd 91 ld r31, X+
258: c5 51 subi r28, 0x15 ; 21
25a: de 4f sbci r29, 0xFE ; 254
25c: a8 83 st Y, r26
25e: b9 83 std Y+1, r27 ; 0x01
260: cb 5e subi r28, 0xEB ; 235
262: d1 40 sbci r29, 0x01 ; 1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:26
cross += (int32_t)a * b;
264: 9a 01 movw r18, r20
266: df 01 movw r26, r30
268: 8b d6 rcall .+3350 ; 0xf80 <__mulhisi3>
26a: 46 0e add r4, r22
26c: 57 1e adc r5, r23
26e: 68 1e adc r6, r24
270: 79 1e adc r7, r25
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:27
a2 += (int32_t)a * a;
272: da 01 movw r26, r20
274: 85 d6 rcall .+3338 ; 0xf80 <__mulhisi3>
276: c9 51 subi r28, 0x19 ; 25
278: de 4f sbci r29, 0xFE ; 254
27a: 28 81 ld r18, Y
27c: 39 81 ldd r19, Y+1 ; 0x01
27e: 4a 81 ldd r20, Y+2 ; 0x02
280: 5b 81 ldd r21, Y+3 ; 0x03
282: c7 5e subi r28, 0xE7 ; 231
284: d1 40 sbci r29, 0x01 ; 1
286: 26 0f add r18, r22
288: 37 1f adc r19, r23
28a: 48 1f adc r20, r24
28c: 59 1f adc r21, r25
28e: c9 51 subi r28, 0x19 ; 25
290: de 4f sbci r29, 0xFE ; 254
292: 28 83 st Y, r18
294: 39 83 std Y+1, r19 ; 0x01
296: 4a 83 std Y+2, r20 ; 0x02
298: 5b 83 std Y+3, r21 ; 0x03
29a: c7 5e subi r28, 0xE7 ; 231
29c: d1 40 sbci r29, 0x01 ; 1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:28
b2 += (int32_t)b * b;
29e: 9f 01 movw r18, r30
2a0: df 01 movw r26, r30
2a2: 6e d6 rcall .+3292 ; 0xf80 <__mulhisi3>
2a4: c6 0e add r12, r22
2a6: d7 1e adc r13, r23
2a8: e8 1e adc r14, r24
2aa: f9 1e adc r15, r25
2ac: 3f ef ldi r19, 0xFF ; 255
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:24
float score[lastLag + 1] = {};
float strongest = 0;
for (uint16_t lag = firstLag; lag <= lastLag; ++lag) {
int32_t cross = 0, a2 = 0, b2 = 0;
for (uint16_t i = 0; i < sampleCount - lag; ++i) {
2ae: 23 1a sub r2, r19
2b0: 33 0a sbc r3, r19
2b2: b8 cf rjmp .-144 ; 0x224 <tuner::estimate(int const*) [clone .constprop.3]+0x114>
2b4: c9 51 subi r28, 0x19 ; 25
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:30
const int16_t a = samples[i], b = samples[i + lag];
cross += (int32_t)a * b;
a2 += (int32_t)a * a;
b2 += (int32_t)b * b;
}
score[lag] = a2 + b2 ? (2.0f * cross) / (a2 + b2) : 0;
2b6: de 4f sbci r29, 0xFE ; 254
2b8: 88 81 ld r24, Y
2ba: 99 81 ldd r25, Y+1 ; 0x01
2bc: aa 81 ldd r26, Y+2 ; 0x02
2be: bb 81 ldd r27, Y+3 ; 0x03
2c0: c7 5e subi r28, 0xE7 ; 231
2c2: d1 40 sbci r29, 0x01 ; 1
2c4: c8 0e add r12, r24
2c6: d9 1e adc r13, r25
2c8: ea 1e adc r14, r26
2ca: fb 1e adc r15, r27
2cc: c1 14 cp r12, r1
2ce: d1 04 cpc r13, r1
2d0: e1 04 cpc r14, r1
2d2: f1 04 cpc r15, r1
2d4: 09 f4 brne .+2 ; 0x2d8 <tuner::estimate(int const*) [clone .constprop.3]+0x1c8>
2d6: 04 c1 rjmp .+520 ; 0x4e0 <__LOCK_REGION_LENGTH__+0xe0>
2d8: c3 01 movw r24, r6
2da: b2 01 movw r22, r4
2dc: a6 d4 rcall .+2380 ; 0xc2a <__floatsisf>
2de: 9b 01 movw r18, r22
2e0: ac 01 movw r20, r24
2e2: d1 d3 rcall .+1954 ; 0xa86 <__addsf3>
2e4: 2b 01 movw r4, r22
2e6: 3c 01 movw r6, r24
2e8: c7 01 movw r24, r14
2ea: b6 01 movw r22, r12
2ec: 9e d4 rcall .+2364 ; 0xc2a <__floatsisf>
2ee: 9b 01 movw r18, r22
2f0: ac 01 movw r20, r24
2f2: c3 01 movw r24, r6
2f4: b2 01 movw r22, r4
2f6: 2f d4 rcall .+2142 ; 0xb56 <__divsf3>
2f8: 6b 01 movw r12, r22
2fa: 7c 01 movw r14, r24
2fc: c1 51 subi r28, 0x11 ; 17
2fe: de 4f sbci r29, 0xFE ; 254
300: a8 81 ld r26, Y
302: b9 81 ldd r27, Y+1 ; 0x01
304: cf 5e subi r28, 0xEF ; 239
306: d1 40 sbci r29, 0x01 ; 1
308: cd 92 st X+, r12
30a: dd 92 st X+, r13
30c: ed 92 st X+, r14
30e: fd 92 st X+, r15
310: c1 51 subi r28, 0x11 ; 17
312: de 4f sbci r29, 0xFE ; 254
314: a8 83 st Y, r26
316: b9 83 std Y+1, r27 ; 0x01
318: cf 5e subi r28, 0xEF ; 239
31a: d1 40 sbci r29, 0x01 ; 1
31c: 95 01 movw r18, r10
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:31
if (score[lag] > strongest) strongest = score[lag];
31e: a8 01 movw r20, r16
320: c7 01 movw r24, r14
322: b6 01 movw r22, r12
324: 32 d5 rcall .+2660 ; 0xd8a <__gesf2>
326: 18 16 cp r1, r24
328: 14 f4 brge .+4 ; 0x32e <tuner::estimate(int const*) [clone .constprop.3]+0x21e>
32a: 56 01 movw r10, r12
32c: 87 01 movw r16, r14
32e: b1 e0 ldi r27, 0x01 ; 1
330: 8b 1a sub r8, r27
332: 91 08 sbc r9, r1
334: e8 e8 ldi r30, 0x88 ; 136
336: 8e 16 cp r8, r30
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:22
energy += (int32_t)samples[i] * samples[i];
if (energy < 1024) return 0;
float score[lastLag + 1] = {};
float strongest = 0;
for (uint16_t lag = firstLag; lag <= lastLag; ++lag) {
338: 91 04 cpc r9, r1
33a: 09 f0 breq .+2 ; 0x33e <tuner::estimate(int const*) [clone .constprop.3]+0x22e>
33c: 4a cf rjmp .-364 ; 0x1d2 <tuner::estimate(int const*) [clone .constprop.3]+0xc2>
33e: 2d ec ldi r18, 0xCD ; 205
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:33
b2 += (int32_t)b * b;
}
score[lag] = a2 + b2 ? (2.0f * cross) / (a2 + b2) : 0;
if (score[lag] > strongest) strongest = score[lag];
}
if (strongest < 0.8f) return 0;
340: 3c ec ldi r19, 0xCC ; 204
342: 4c e4 ldi r20, 0x4C ; 76
344: 5f e3 ldi r21, 0x3F ; 63
346: b5 01 movw r22, r10
348: c8 01 movw r24, r16
34a: 01 d4 rcall .+2050 ; 0xb4e <__cmpsf2>
34c: 87 fd sbrc r24, 7
34e: df c0 rjmp .+446 ; 0x50e <__LOCK_REGION_LENGTH__+0x10e>
350: 2b e7 ldi r18, 0x7B ; 123
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:38
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
const float left = score[lag - 1], mid = score[lag], right = score[lag + 1];
if (mid < 0.93f * strongest || mid <= left || mid < right) continue;
352: 34 e1 ldi r19, 0x14 ; 20
354: 4e e6 ldi r20, 0x6E ; 110
356: 5f e3 ldi r21, 0x3F ; 63
358: b5 01 movw r22, r10
35a: c8 01 movw r24, r16
35c: 5f d5 rcall .+2750 ; 0xe1c <__mulsf3>
35e: cd 51 subi r28, 0x1D ; 29
360: de 4f sbci r29, 0xFE ; 254
362: 68 83 st Y, r22
364: 79 83 std Y+1, r23 ; 0x01
366: 8a 83 std Y+2, r24 ; 0x02
368: 9b 83 std Y+3, r25 ; 0x03
36a: c3 5e subi r28, 0xE3 ; 227
36c: d1 40 sbci r29, 0x01 ; 1
36e: 26 e1 ldi r18, 0x16 ; 22
370: 22 2e mov r2, r18
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:36
if (score[lag] > strongest) strongest = score[lag];
}
if (strongest < 0.8f) return 0;
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
372: 31 2c mov r3, r1
374: cf 51 subi r28, 0x1F ; 31
376: de 4f sbci r29, 0xFE ; 254
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:37
const float left = score[lag - 1], mid = score[lag], right = score[lag + 1];
378: a8 81 ld r26, Y
37a: b9 81 ldd r27, Y+1 ; 0x01
37c: c1 5e subi r28, 0xE1 ; 225
37e: d1 40 sbci r29, 0x01 ; 1
380: 14 96 adiw r26, 0x04 ; 4
382: cd 90 ld r12, X+
384: dd 90 ld r13, X+
386: ed 90 ld r14, X+
388: fc 90 ld r15, X
38a: 17 97 sbiw r26, 0x07 ; 7
38c: 81 01 movw r16, r2
38e: 0f 5f subi r16, 0xFF ; 255
390: 1f 4f sbci r17, 0xFF ; 255
392: cd 51 subi r28, 0x1D ; 29
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:38
if (mid < 0.93f * strongest || mid <= left || mid < right) continue;
394: de 4f sbci r29, 0xFE ; 254
396: 28 81 ld r18, Y
398: 39 81 ldd r19, Y+1 ; 0x01
39a: 4a 81 ldd r20, Y+2 ; 0x02
39c: 5b 81 ldd r21, Y+3 ; 0x03
39e: c3 5e subi r28, 0xE3 ; 227
3a0: d1 40 sbci r29, 0x01 ; 1
3a2: c7 01 movw r24, r14
3a4: b6 01 movw r22, r12
3a6: d3 d3 rcall .+1958 ; 0xb4e <__cmpsf2>
3a8: 87 fd sbrc r24, 7
3aa: 9e c0 rjmp .+316 ; 0x4e8 <__LOCK_REGION_LENGTH__+0xe8>
3ac: cf 51 subi r28, 0x1F ; 31
3ae: de 4f sbci r29, 0xFE ; 254
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:37
}
if (strongest < 0.8f) return 0;
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
const float left = score[lag - 1], mid = score[lag], right = score[lag + 1];
3b0: e8 81 ld r30, Y
3b2: f9 81 ldd r31, Y+1 ; 0x01
3b4: c1 5e subi r28, 0xE1 ; 225
3b6: d1 40 sbci r29, 0x01 ; 1
3b8: 80 80 ld r8, Z
3ba: 91 80 ldd r9, Z+1 ; 0x01
3bc: a2 80 ldd r10, Z+2 ; 0x02
3be: b3 80 ldd r11, Z+3 ; 0x03
3c0: a7 01 movw r20, r14
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:38
if (mid < 0.93f * strongest || mid <= left || mid < right) continue;
3c2: 96 01 movw r18, r12
3c4: c5 01 movw r24, r10
3c6: b4 01 movw r22, r8
3c8: e0 d4 rcall .+2496 ; 0xd8a <__gesf2>
3ca: 87 ff sbrs r24, 7
3cc: 8d c0 rjmp .+282 ; 0x4e8 <__LOCK_REGION_LENGTH__+0xe8>
3ce: cf 51 subi r28, 0x1F ; 31
3d0: de 4f sbci r29, 0xFE ; 254
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:37
}
if (strongest < 0.8f) return 0;
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
const float left = score[lag - 1], mid = score[lag], right = score[lag + 1];
3d2: a8 81 ld r26, Y
3d4: b9 81 ldd r27, Y+1 ; 0x01
3d6: c1 5e subi r28, 0xE1 ; 225
3d8: d1 40 sbci r29, 0x01 ; 1
3da: 18 96 adiw r26, 0x08 ; 8
3dc: 4d 90 ld r4, X+
3de: 5d 90 ld r5, X+
3e0: 6d 90 ld r6, X+
3e2: 7c 90 ld r7, X
3e4: 1b 97 sbiw r26, 0x0b ; 11
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:38
if (mid < 0.93f * strongest || mid <= left || mid < right) continue;
3e6: a3 01 movw r20, r6
3e8: 92 01 movw r18, r4
3ea: c7 01 movw r24, r14
3ec: b6 01 movw r22, r12
3ee: af d3 rcall .+1886 ; 0xb4e <__cmpsf2>
3f0: 87 fd sbrc r24, 7
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:39
const float curvature = left - 2 * mid + right;
3f2: 7a c0 rjmp .+244 ; 0x4e8 <__LOCK_REGION_LENGTH__+0xe8>
3f4: a7 01 movw r20, r14
3f6: 96 01 movw r18, r12
3f8: c7 01 movw r24, r14
3fa: b6 01 movw r22, r12
3fc: 44 d3 rcall .+1672 ; 0xa86 <__addsf3>
3fe: 9b 01 movw r18, r22
400: ac 01 movw r20, r24
402: c5 01 movw r24, r10
404: b4 01 movw r22, r8
406: 3e d3 rcall .+1660 ; 0xa84 <__subsf3>
408: a3 01 movw r20, r6
40a: 92 01 movw r18, r4
40c: 3c d3 rcall .+1656 ; 0xa86 <__addsf3>
40e: 6b 01 movw r12, r22
410: 7c 01 movw r14, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:40
float offset = fabsf(curvature) > 0.000001f ? 0.5f * (left - right) / curvature : 0;
412: 9f 77 andi r25, 0x7F ; 127
414: 2d eb ldi r18, 0xBD ; 189
416: 37 e3 ldi r19, 0x37 ; 55
418: 46 e8 ldi r20, 0x86 ; 134
41a: 55 e3 ldi r21, 0x35 ; 53
41c: b6 d4 rcall .+2412 ; 0xd8a <__gesf2>
41e: 18 16 cp r1, r24
420: 0c f0 brlt .+2 ; 0x424 <__LOCK_REGION_LENGTH__+0x24>
422: 79 c0 rjmp .+242 ; 0x516 <__LOCK_REGION_LENGTH__+0x116>
424: a3 01 movw r20, r6
426: 92 01 movw r18, r4
428: c5 01 movw r24, r10
42a: b4 01 movw r22, r8
42c: 2b d3 rcall .+1622 ; 0xa84 <__subsf3>
42e: 20 e0 ldi r18, 0x00 ; 0
430: 30 e0 ldi r19, 0x00 ; 0
432: 40 e0 ldi r20, 0x00 ; 0
434: 5f e3 ldi r21, 0x3F ; 63
436: f2 d4 rcall .+2532 ; 0xe1c <__mulsf3>
438: a7 01 movw r20, r14
43a: 96 01 movw r18, r12
43c: 8c d3 rcall .+1816 ; 0xb56 <__divsf3>
43e: 6b 01 movw r12, r22
440: 7c 01 movw r14, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:41
if (offset > 0.5f) offset = 0.5f;
442: 20 e0 ldi r18, 0x00 ; 0
444: 30 e0 ldi r19, 0x00 ; 0
446: 40 e0 ldi r20, 0x00 ; 0
448: 5f e3 ldi r21, 0x3F ; 63
44a: 9f d4 rcall .+2366 ; 0xd8a <__gesf2>
44c: 18 16 cp r1, r24
44e: 0c f4 brge .+2 ; 0x452 <__LOCK_REGION_LENGTH__+0x52>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:42
if (offset < -0.5f) offset = -0.5f;
450: 66 c0 rjmp .+204 ; 0x51e <__LOCK_REGION_LENGTH__+0x11e>
452: 20 e0 ldi r18, 0x00 ; 0
454: 30 e0 ldi r19, 0x00 ; 0
456: 40 e0 ldi r20, 0x00 ; 0
458: 5f eb ldi r21, 0xBF ; 191
45a: c7 01 movw r24, r14
45c: b6 01 movw r22, r12
45e: 77 d3 rcall .+1774 ; 0xb4e <__cmpsf2>
460: 87 ff sbrs r24, 7
462: 05 c0 rjmp .+10 ; 0x46e <__LOCK_REGION_LENGTH__+0x6e>
464: c1 2c mov r12, r1
466: d1 2c mov r13, r1
468: e1 2c mov r14, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:43
const float hz = sampleRate / (lag + offset);
46a: 9f eb ldi r25, 0xBF ; 191
46c: f9 2e mov r15, r25
46e: b1 01 movw r22, r2
470: 90 e0 ldi r25, 0x00 ; 0
472: 80 e0 ldi r24, 0x00 ; 0
474: d8 d3 rcall .+1968 ; 0xc26 <__floatunsisf>
476: a7 01 movw r20, r14
478: 96 01 movw r18, r12
47a: 05 d3 rcall .+1546 ; 0xa86 <__addsf3>
47c: 9b 01 movw r18, r22
47e: ac 01 movw r20, r24
480: 60 e0 ldi r22, 0x00 ; 0
482: 70 e0 ldi r23, 0x00 ; 0
484: 8a ef ldi r24, 0xFA ; 250
486: 95 e4 ldi r25, 0x45 ; 69
488: 66 d3 rcall .+1740 ; 0xb56 <__divsf3>
48a: 6b 01 movw r12, r22
48c: 7c 01 movw r14, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:44
return hz >= 70 && hz <= 360 ? hz : 0;
48e: 20 e0 ldi r18, 0x00 ; 0
490: 30 e0 ldi r19, 0x00 ; 0
492: 4c e8 ldi r20, 0x8C ; 140
494: 52 e4 ldi r21, 0x42 ; 66
496: 79 d4 rcall .+2290 ; 0xd8a <__gesf2>
498: 87 fd sbrc r24, 7
49a: 39 c0 rjmp .+114 ; 0x50e <__LOCK_REGION_LENGTH__+0x10e>
49c: 20 e0 ldi r18, 0x00 ; 0
49e: 30 e0 ldi r19, 0x00 ; 0
4a0: 44 eb ldi r20, 0xB4 ; 180
4a2: 53 e4 ldi r21, 0x43 ; 67
4a4: c7 01 movw r24, r14
4a6: b6 01 movw r22, r12
4a8: 52 d3 rcall .+1700 ; 0xb4e <__cmpsf2>
4aa: 18 16 cp r1, r24
4ac: 84 f1 brlt .+96 ; 0x50e <__LOCK_REGION_LENGTH__+0x10e>
4ae: c7 01 movw r24, r14
4b0: b6 01 movw r22, r12
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:47
}
return 0;
}
4b2: c0 51 subi r28, 0x10 ; 16
4b4: de 4f sbci r29, 0xFE ; 254
4b6: cd bf out 0x3d, r28 ; 61
4b8: de bf out 0x3e, r29 ; 62
4ba: df 91 pop r29
4bc: cf 91 pop r28
4be: 1f 91 pop r17
4c0: 0f 91 pop r16
4c2: ff 90 pop r15
4c4: ef 90 pop r14
4c6: df 90 pop r13
4c8: cf 90 pop r12
4ca: bf 90 pop r11
4cc: af 90 pop r10
4ce: 9f 90 pop r9
4d0: 8f 90 pop r8
4d2: 7f 90 pop r7
4d4: 6f 90 pop r6
4d6: 5f 90 pop r5
4d8: 4f 90 pop r4
4da: 3f 90 pop r3
4dc: 2f 90 pop r2
4de: 08 95 ret
4e0: c1 2c mov r12, r1
4e2: d1 2c mov r13, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:30
const int16_t a = samples[i], b = samples[i + lag];
cross += (int32_t)a * b;
a2 += (int32_t)a * a;
b2 += (int32_t)b * b;
}
score[lag] = a2 + b2 ? (2.0f * cross) / (a2 + b2) : 0;
4e4: 76 01 movw r14, r12
4e6: 0a cf rjmp .-492 ; 0x2fc <tuner::estimate(int const*) [clone .constprop.3]+0x1ec>
4e8: cf 51 subi r28, 0x1F ; 31
4ea: de 4f sbci r29, 0xFE ; 254
4ec: 28 81 ld r18, Y
4ee: 39 81 ldd r19, Y+1 ; 0x01
4f0: c1 5e subi r28, 0xE1 ; 225
4f2: d1 40 sbci r29, 0x01 ; 1
4f4: 2c 5f subi r18, 0xFC ; 252
4f6: 3f 4f sbci r19, 0xFF ; 255
4f8: cf 51 subi r28, 0x1F ; 31
4fa: de 4f sbci r29, 0xFE ; 254
4fc: 28 83 st Y, r18
4fe: 39 83 std Y+1, r19 ; 0x01
500: c1 5e subi r28, 0xE1 ; 225
502: d1 40 sbci r29, 0x01 ; 1
504: 18 01 movw r2, r16
506: 07 37 cpi r16, 0x77 ; 119
508: 11 05 cpc r17, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:36
if (score[lag] > strongest) strongest = score[lag];
}
if (strongest < 0.8f) return 0;
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
50a: 09 f0 breq .+2 ; 0x50e <__LOCK_REGION_LENGTH__+0x10e>
50c: 33 cf rjmp .-410 ; 0x374 <tuner::estimate(int const*) [clone .constprop.3]+0x264>
50e: c1 2c mov r12, r1
510: d1 2c mov r13, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:44
const float curvature = left - 2 * mid + right;
float offset = fabsf(curvature) > 0.000001f ? 0.5f * (left - right) / curvature : 0;
if (offset > 0.5f) offset = 0.5f;
if (offset < -0.5f) offset = -0.5f;
const float hz = sampleRate / (lag + offset);
return hz >= 70 && hz <= 360 ? hz : 0;
512: 76 01 movw r14, r12
514: cc cf rjmp .-104 ; 0x4ae <__LOCK_REGION_LENGTH__+0xae>
516: c1 2c mov r12, r1
518: d1 2c mov r13, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:40
// Pick the earliest strong local peak, avoiding 2x/3x-period octave errors.
for (uint16_t lag = firstLag + 1; lag < lastLag; ++lag) {
const float left = score[lag - 1], mid = score[lag], right = score[lag + 1];
if (mid < 0.93f * strongest || mid <= left || mid < right) continue;
const float curvature = left - 2 * mid + right;
float offset = fabsf(curvature) > 0.000001f ? 0.5f * (left - right) / curvature : 0;
51a: 76 01 movw r14, r12
51c: a8 cf rjmp .-176 ; 0x46e <__LOCK_REGION_LENGTH__+0x6e>
51e: c1 2c mov r12, r1
520: d1 2c mov r13, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/pitch_detector.h:41
if (offset > 0.5f) offset = 0.5f;
522: e1 2c mov r14, r1
524: 8f e3 ldi r24, 0x3F ; 63
526: f8 2e mov r15, r24
528: a2 cf rjmp .-188 ; 0x46e <__LOCK_REGION_LENGTH__+0x6e>
0000052a <micros>:
micros():
52a: cf 92 push r12
52c: df 92 push r13
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:403
}
#if !(defined(MILLIS_USE_TIMERNONE) || defined(MILLIS_USE_TIMERRTC))
unsigned long micros() {
52e: ef 92 push r14
530: ff 92 push r15
532: 9f b7 in r25, 0x3f ; 63
534: f8 94 cli
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:412
#else /* TCA */
uint8_t ticks;
#endif
uint8_t flags;
/* Save current state and disable interrupts */
uint8_t oldSREG = SREG;
536: 88 e0 ldi r24, 0x08 ; 8
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:413
cli(); /* INTERRUPTS OFF */
538: 80 93 84 0a sts 0x0A84, r24 ; 0x800a84 <digital_pin_to_bit_mask+0x7f7a15>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:421
flags = _timer->INTFLAGS;
#elif defined(MILLIS_USE_TIMERA0)
ticks = TCA0.SPLIT.HCNT;
flags = TCA0.SPLIT.INTFLAGS;
#elif defined(MILLIS_USE_TIMERD0)
TCD0.CTRLE = TCD_SCAPTUREA_bm;
53c: 80 91 8e 0a lds r24, 0x0A8E ; 0x800a8e <digital_pin_to_bit_mask+0x7f7a1f>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:422
while (!(TCD0.STATUS & TCD_CMDRDY_bm)); // wait for sync - should be only one iteration of this loop
540: 81 ff sbrs r24, 1
542: fc cf rjmp .-8 ; 0x53c <micros+0x12>
544: 80 91 8d 0a lds r24, 0x0A8D ; 0x800a8d <digital_pin_to_bit_mask+0x7f7a1e>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:423
flags = TCD0.INTFLAGS;
548: e0 91 a2 0a lds r30, 0x0AA2 ; 0x800aa2 <digital_pin_to_bit_mask+0x7f7a33>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:424
ticks = TCD0.CAPTUREA;
54c: f0 91 a3 0a lds r31, 0x0AA3 ; 0x800aa3 <digital_pin_to_bit_mask+0x7f7a34>
550: c0 90 00 38 lds r12, 0x3800 ; 0x803800 <__DATA_REGION_ORIGIN__>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:434
* ISR has not fired. If we already read a high value of ticks, either we read it just before the overflow,
* so we shouldn't increment overflows, or interrupts are disabled and micros isn't expected to work so it
* doesn't matter.
* Get current number of overflows and timer count */
#if (MILLIS_TYPE != MILLIS_TCB)
overflows = timingStruct.timer_overflow_count;
554: d0 90 01 38 lds r13, 0x3801 ; 0x803801 <__DATA_REGION_ORIGIN__+0x1>
558: e0 90 02 38 lds r14, 0x3802 ; 0x803802 <__DATA_REGION_ORIGIN__+0x2>
55c: f0 90 03 38 lds r15, 0x3803 ; 0x803803 <__DATA_REGION_ORIGIN__+0x3>
560: 9f bf out 0x3f, r25 ; 63
562: 80 ff sbrs r24, 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:439
#else
overflows = timingStruct.timer_millis;
#endif
/* Turn interrupts back on, assuming they were on when micros was called. */
SREG = oldSREG; /* INTERRUPTS ON */
564: 08 c0 rjmp .+16 ; 0x576 <micros+0x4c>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:441
#if defined(MILLIS_USE_TIMERD0)
if ((flags & TCD_OVF_bm) && (ticks < 0x07)) {
566: e7 30 cpi r30, 0x07 ; 7
568: f1 05 cpc r31, r1
56a: 28 f4 brcc .+10 ; 0x576 <micros+0x4c>
56c: 8f ef ldi r24, 0xFF ; 255
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:451
if ((flags & TCB_CAPT_bm) && !(ticks & 0xFF00)) {
#endif
#if (MILLIS_TYPE == MILLIS_TCB) && !(F_CPU > 2000000UL)
overflows +=2;
#else
overflows++;
56e: c8 1a sub r12, r24
570: d8 0a sbc r13, r24
572: e8 0a sbc r14, r24
574: f8 0a sbc r15, r24
576: 9f 01 movw r18, r30
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:457
#endif
} // end getting ticks
#if defined(MILLIS_USE_TIMERD0)
#if (F_CPU == 20000000UL || F_CPU == 10000000UL || F_CPU == 5000000UL)
uint8_t ticks_l = ticks >> 1;
578: 36 95 lsr r19
57a: 27 95 ror r18
57c: cf 01 movw r24, r30
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:458
ticks = ticks + ticks_l + ((ticks_l >> 2) - (ticks_l >> 4) + (ticks_l >> 7));
57e: 82 0f add r24, r18
580: 91 1d adc r25, r1
582: e2 2f mov r30, r18
584: e6 95 lsr r30
586: e6 95 lsr r30
588: 32 2f mov r19, r18
58a: 32 95 swap r19
58c: 3f 70 andi r19, 0x0F ; 15
58e: e3 1b sub r30, r19
590: ff 0b sbc r31, r31
592: 27 fd sbrc r18, 7
594: 31 96 adiw r30, 0x01 ; 1
596: e8 0f add r30, r24
598: f9 1f adc r31, r25
59a: a0 e3 ldi r26, 0x30 ; 48
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:462
// + ticks +(ticks>>1)+(ticks>>3)-(ticks>>5)+(ticks>>8))
// speed optimization via doing math with smaller datatypes, since we know high byte is 1 or 0.
//microseconds = overflows * (TIME_TRACKING_CYCLES_PER_OVF / 20) + ticks; // ticks value corrected above. *FIVE HUNDRED AND TEN DOES NOT EVENLY DIVIDE BY 20!* What the fuck?
microseconds = overflows * (TIME_TRACKING_CYCLES_PER_OVF / 20) + ticks + (overflows >> 1);
59c: b3 e0 ldi r27, 0x03 ; 3
59e: a7 01 movw r20, r14
5a0: 96 01 movw r18, r12
5a2: 09 d5 rcall .+2578 ; 0xfb6 <__muluhisi3>
5a4: f6 94 lsr r15
5a6: e7 94 ror r14
5a8: d7 94 ror r13
5aa: c7 94 ror r12
5ac: c6 0e add r12, r22
5ae: d7 1e adc r13, r23
5b0: e8 1e adc r14, r24
5b2: f9 1e adc r15, r25
5b4: c7 01 movw r24, r14
5b6: b6 01 movw r22, r12
5b8: 6e 0f add r22, r30
5ba: 7f 1f adc r23, r31
5bc: 81 1d adc r24, r1
5be: 91 1d adc r25, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:800
microseconds = ((overflows * millisClockCyclesToMicroseconds(TIME_TRACKING_CYCLES_PER_OVF))
+ (ticks * (millisClockCyclesToMicroseconds(TIME_TRACKING_CYCLES_PER_OVF) / TIME_TRACKING_TIMER_PERIOD)));
#endif
#endif // end of timer-specific part of micros calculations
return microseconds;
}
5c0: ff 90 pop r15
5c2: ef 90 pop r14
5c4: df 90 pop r13
5c6: cf 90 pop r12
5c8: 08 95 ret
000005ca <delay>:
delay():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:233
_delay_ms(1);
}
}
}
#elif (PROGMEM_SIZE >= 16384 && !defined(MILLIS_USE_TIMERRTC))
void delay(uint32_t ms) { /* Interrupts will not prolong this less flash-efficient delay */
5ca: cf 92 push r12
5cc: df 92 push r13
5ce: ef 92 push r14
5d0: ff 92 push r15
5d2: cf 93 push r28
5d4: df 93 push r29
5d6: 6b 01 movw r12, r22
5d8: 7c 01 movw r14, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:234
uint16_t start = (uint16_t) micros();
5da: a7 df rcall .-178 ; 0x52a <micros>
5dc: eb 01 movw r28, r22
5de: a5 df rcall .-182 ; 0x52a <micros>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:236
while (ms > 0) {
while (((uint16_t) micros() - start) >= 1000 && ms) {
5e0: 6c 1b sub r22, r28
5e2: 7d 0b sbc r23, r29
5e4: 68 3e cpi r22, 0xE8 ; 232
5e6: 73 40 sbci r23, 0x03 ; 3
5e8: a0 f0 brcs .+40 ; 0x612 <delay+0x48>
5ea: c1 14 cp r12, r1
5ec: d1 04 cpc r13, r1
5ee: e1 04 cpc r14, r1
5f0: f1 04 cpc r15, r1
5f2: 39 f4 brne .+14 ; 0x602 <delay+0x38>
5f4: df 91 pop r29
5f6: cf 91 pop r28
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:241
ms-- ;
start += 1000;
}
}
}
5f8: ff 90 pop r15
5fa: ef 90 pop r14
5fc: df 90 pop r13
5fe: cf 90 pop r12
600: 08 95 ret
602: 81 e0 ldi r24, 0x01 ; 1
604: c8 1a sub r12, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:237
#elif (PROGMEM_SIZE >= 16384 && !defined(MILLIS_USE_TIMERRTC))
void delay(uint32_t ms) { /* Interrupts will not prolong this less flash-efficient delay */
uint16_t start = (uint16_t) micros();
while (ms > 0) {
while (((uint16_t) micros() - start) >= 1000 && ms) {
ms-- ;
606: d1 08 sbc r13, r1
608: e1 08 sbc r14, r1
60a: f1 08 sbc r15, r1
60c: c8 51 subi r28, 0x18 ; 24
60e: dc 4f sbci r29, 0xFC ; 252
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:238
start += 1000;
610: e6 cf rjmp .-52 ; 0x5de <delay+0x14>
612: c1 14 cp r12, r1
614: d1 04 cpc r13, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:235
}
}
#elif (PROGMEM_SIZE >= 16384 && !defined(MILLIS_USE_TIMERRTC))
void delay(uint32_t ms) { /* Interrupts will not prolong this less flash-efficient delay */
uint16_t start = (uint16_t) micros();
while (ms > 0) {
616: e1 04 cpc r14, r1
618: f1 04 cpc r15, r1
61a: 09 f7 brne .-62 ; 0x5de <delay+0x14>
61c: eb cf rjmp .-42 ; 0x5f4 <delay+0x2a>
0000061e <digitalRead.constprop.2>:
digitalRead.constprop.2():
61e: 80 91 28 04 lds r24, 0x0428 ; 0x800428 <digital_pin_to_bit_mask+0x7f73b9>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:363
/* Get port and check valid port */
PORT_t *port = digitalPinToPortStruct(pin);
/* Read pin value from PORTx.IN register */
if (port->IN & bit_mask) {
622: 81 70 andi r24, 0x01 ; 1
624: 08 95 ret
00000626 <digitalWrite>:
digitalWrite():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:368
return HIGH;
} else {
return LOW;
}
}
626: cf 93 push r28
628: df 93 push r29
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:241
default:
break;
}
}
void digitalWrite(uint8_t pin, uint8_t val) {
62a: 82 31 cpi r24, 0x12 ; 18
62c: 08 f0 brcs .+2 ; 0x630 <digitalWrite+0xa>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:244
check_valid_digital_pin(pin);
/* Get bit mask for pin */
uint8_t bit_mask = digitalPinToBitMask(pin);
62e: 47 c0 rjmp .+142 ; 0x6be <digitalWrite+0x98>
check_valid_digital_pin():
630: 90 e0 ldi r25, 0x00 ; 0
digitalWrite():
632: ec 01 movw r28, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/Arduino.h:888
#if !defined(NUM_TOTAL_PINS)
#define NUM_TOTAL_PINS (NUM_DIGITAL_PINS) /* Used the same way as NUM_DIGITAL_PINS. so it doesn't mean what it's named - I didn't make the convention*/
#endif
inline __attribute__((always_inline)) void check_valid_digital_pin(pin_size_t pin) {
if (__builtin_constant_p(pin)) {
634: c1 59 subi r28, 0x91 ; 145
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:244
636: df 46 sbci r29, 0x6F ; 111
638: 28 81 ld r18, Y
63a: 2f 3f cpi r18, 0xFF ; 255
63c: 09 f4 brne .+2 ; 0x640 <digitalWrite+0x1a>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:245
if (bit_mask == NOT_A_PIN) {
63e: 3f c0 rjmp .+126 ; 0x6be <digitalWrite+0x98>
640: ac 01 movw r20, r24
642: 43 5a subi r20, 0xA3 ; 163
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:250
return;
}
/* Get port */
PORT_t *port = digitalPinToPortStruct(pin);
644: 5f 46 sbci r21, 0x6F ; 111
646: da 01 movw r26, r20
648: ec 91 ld r30, X
64a: b0 e2 ldi r27, 0x20 ; 32
64c: eb 9f mul r30, r27
64e: f0 01 movw r30, r0
650: 11 24 eor r1, r1
652: fc 5f subi r31, 0xFC ; 252
654: 61 11 cpse r22, r1
656: 36 c0 rjmp .+108 ; 0x6c4 <digitalWrite+0x9e>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:255
/* Set output to value
This runs regardless of whether the pin is an output,
allowing the pin to be staged with
changed to an output. Code in the wild relies on this behavior. */
if (val == LOW) { /* If LOW */
658: 26 83 std Z+6, r18 ; 0x06
65a: 30 81 ld r19, Z
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:256
port->OUTCLR = bit_mask;
65c: 23 23 and r18, r19
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:280
} else {
port->OUTSET = bit_mask;
}
/* Input direction */
if (!(port->DIR & bit_mask)) {
65e: a1 f4 brne .+40 ; 0x688 <digitalWrite+0x62>
660: 9c 01 movw r18, r24
662: 25 5b subi r18, 0xB5 ; 181
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:282
/* Get bit position for getting pin ctrl reg */
uint8_t bit_pos = digitalPinToBitPosition(pin);
664: 3f 46 sbci r19, 0x6F ; 111
666: d9 01 movw r26, r18
668: 2c 91 ld r18, X
66a: 30 97 sbiw r30, 0x00 ; 0
66c: 69 f1 breq .+90 ; 0x6c8 <digitalWrite+0xa2>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:284
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
66e: 28 30 cpi r18, 0x08 ; 8
670: 58 f5 brcc .+86 ; 0x6c8 <digitalWrite+0xa2>
672: 70 96 adiw r30, 0x10 ; 16
674: e2 0f add r30, r18
676: f1 1d adc r31, r1
678: 3f b7 in r19, 0x3f ; 63
67a: f8 94 cli
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:287
/* Save system status and disable interrupts */
uint8_t status = SREG;
67c: 20 81 ld r18, Z
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:288
cli();
67e: 61 11 cpse r22, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:292
if (val == LOW) {
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
680: 26 c0 rjmp .+76 ; 0x6ce <digitalWrite+0xa8>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:290
/* Save system status and disable interrupts */
uint8_t status = SREG;
cli();
if (val == LOW) {
682: 27 7f andi r18, 0xF7 ; 247
684: 20 83 st Z, r18
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:292
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
686: 3f bf out 0x3f, r19 ; 63
turnOffPWM():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:295
} else {
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
688: 87 5c subi r24, 0xC7 ; 199
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:299
}
/* Restore system status */
SREG = status;
68a: 9f 46 sbci r25, 0x6F ; 111
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:107
* any timers with minimum overhead - critical on these parts
* Since nothing that will show up here can have more than one
* one bit set, binary and will give 0x00 if that bit is cleared
* which is NOT_ON_TIMER.
*/
uint8_t digital_pin_timer = digitalPinToTimer(pin) & __PeripheralControl;
68c: fc 01 movw r30, r24
68e: 90 81 ld r25, Z
690: 99 23 and r25, r25
692: a9 f0 breq .+42 ; 0x6be <digitalWrite+0x98>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:109
/* end megaTinyCore-specific section */
if (digital_pin_timer== NOT_ON_TIMER) {
694: 88 81 ld r24, Y
696: 90 34 cpi r25, 0x40 ; 64
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:113
return;
}
uint8_t bit_mask = digitalPinToBitMask(pin);
698: 09 f1 breq .+66 ; 0x6dc <digitalWrite+0xb6>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:116
// TCB_t *timerB;
switch (digital_pin_timer) {
69a: 98 3f cpi r25, 0xF8 ; 248
69c: e1 f0 breq .+56 ; 0x6d6 <digitalWrite+0xb0>
69e: 90 31 cpi r25, 0x10 ; 16
6a0: 71 f4 brne .+28 ; 0x6be <digitalWrite+0x98>
6a2: da 01 movw r26, r20
6a4: 9c 91 ld r25, X
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:132
}
if (bit_mask > 0x04) { // -> bit_pos > 2 -> output channel controlled by HCMP
bit_mask <<= 1; // mind the gap (between LCMP and HCMP)
}
#else // Normal parts
if (digitalPinToPort(pin) == PB) { // WO0-WO2, Bitmask has one of these bits 1: 0b00hhhlll.
6a6: 91 30 cpi r25, 0x01 ; 1
6a8: a1 f4 brne .+40 ; 0x6d2 <digitalWrite+0xac>
6aa: 85 30 cpi r24, 0x05 ; 5
6ac: 10 f0 brcs .+4 ; 0x6b2 <digitalWrite+0x8c>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:133
if (bit_mask > 0x04) { // Is it one of the three high ones? If so
6ae: 88 0f add r24, r24
6b0: 82 95 swap r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:134
bit_mask <<= 1; // nudge it 1 place left swap nybbles since that's 1 clock faster than 3 rightshifts.
6b2: 90 91 01 0a lds r25, 0x0A01 ; 0x800a01 <digital_pin_to_bit_mask+0x7f7992>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:142
} else {
// Otherwise, it's WO3-5. These will always be on 0b00hhh000,. Here since we ARE working with a high half timer, we need to just leftshift it once.
bit_mask <<= 1;
}
#endif // End if 8 vs normal parts
TCA0.SPLIT.CTRLB &= ~bit_mask;
6b6: 80 95 com r24
6b8: 89 23 and r24, r25
6ba: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 <digital_pin_to_bit_mask+0x7f7992>
digitalWrite():
6be: df 91 pop r29
6c0: cf 91 pop r28
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:312
* analogWritten() 255, then digitallyWritten() to HIGH, which
* would turn it off for the time between turnOffPWM() and
* PORT->OUTCLR)
* Since there's no penalty, why make a glitch we don't have to? */
turnOffPWM(pin);
}
6c2: 08 95 ret
6c4: 25 83 std Z+5, r18 ; 0x05
6c6: c9 cf rjmp .-110 ; 0x65a <digitalWrite+0x34>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:276
// val will now be 0 (LOW) if the toggling made it LOW
// or bit_mask if not. And further down, we only need to
// know if it's
/* If HIGH OR > TOGGLE */
} else {
port->OUTSET = bit_mask;
6c8: f0 e0 ldi r31, 0x00 ; 0
6ca: e0 e0 ldi r30, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:284
/* Input direction */
if (!(port->DIR & bit_mask)) {
/* Get bit position for getting pin ctrl reg */
uint8_t bit_pos = digitalPinToBitPosition(pin);
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
6cc: d5 cf rjmp .-86 ; 0x678 <digitalWrite+0x52>
6ce: 28 60 ori r18, 0x08 ; 8
6d0: d9 cf rjmp .-78 ; 0x684 <digitalWrite+0x5e>
turnOffPWM():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:295
if (val == LOW) {
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
} else {
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
6d2: 88 0f add r24, r24
6d4: ee cf rjmp .-36 ; 0x6b2 <digitalWrite+0x8c>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:139
bit_mask <<= 1; // nudge it 1 place left swap nybbles since that's 1 clock faster than 3 rightshifts.
_SWAP(bit_mask); // swap nybbles since that's 1 clock faster than 3 rightshifts.
}
} else {
// Otherwise, it's WO3-5. These will always be on 0b00hhh000,. Here since we ARE working with a high half timer, we need to just leftshift it once.
bit_mask <<= 1;
6d6: 10 92 a0 06 sts 0x06A0, r1 ; 0x8006a0 <digital_pin_to_bit_mask+0x7f7631>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:161
/* We don't need the type b timers as this core does not use them for PWM */
// 1-series parts have a DAC that we can use...
#if defined(DAC0)
case DACOUT:
DAC0.CTRLA = 0x00;
6da: f1 cf rjmp .-30 ; 0x6be <digitalWrite+0x98>
6dc: 82 30 cpi r24, 0x02 ; 2
6de: 19 f1 breq .+70 ; 0x726 <digitalWrite+0x100>
digitalWrite():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:197
#endif
SREG = oldSREG;
}
#else
uint8_t fc_mask = (bit_mask == 0x02 ? 0x80 : 0x40);
6e0: 80 e4 ldi r24, 0x40 ; 64
turnOffPWM():
6e2: 90 91 92 0a lds r25, 0x0A92 ; 0x800a92 <digital_pin_to_bit_mask+0x7f7a23>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:198
if (TCD0.FAULTCTRL & fc_mask) {
6e6: 98 23 and r25, r24
6e8: 51 f3 breq .-44 ; 0x6be <digitalWrite+0x98>
6ea: 4f b7 in r20, 0x3f ; 63
6ec: f8 94 cli
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:199
uint8_t oldSREG = SREG;
6ee: 90 91 80 0a lds r25, 0x0A80 ; 0x800a80 <digital_pin_to_bit_mask+0x7f7a11>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:203
cli();
// uint8_t TCD0_prescaler=TCD0.CTRLA & (~TCD_ENABLE_bm);
//
TCD0.CTRLA &= ~TCD_ENABLE_bm;
6f2: 9e 7f andi r25, 0xFE ; 254
6f4: 90 93 80 0a sts 0x0A80, r25 ; 0x800a80 <digital_pin_to_bit_mask+0x7f7a11>
6f8: 20 91 92 0a lds r18, 0x0A92 ; 0x800a92 <digital_pin_to_bit_mask+0x7f7a23>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:204
_PROTECTED_WRITE(TCD0.FAULTCTRL, TCD0.FAULTCTRL & (~fc_mask));
6fc: 90 e0 ldi r25, 0x00 ; 0
6fe: 80 95 com r24
700: 90 95 com r25
702: 30 e0 ldi r19, 0x00 ; 0
704: 82 23 and r24, r18
706: 93 23 and r25, r19
708: 28 ed ldi r18, 0xD8 ; 216
70a: 24 bf out 0x34, r18 ; 52
70c: 80 93 92 0a sts 0x0A92, r24 ; 0x800a92 <digital_pin_to_bit_mask+0x7f7a23>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:205
while (!(TCD0.STATUS & TCD_ENRDY_bm));
710: 80 91 8e 0a lds r24, 0x0A8E ; 0x800a8e <digital_pin_to_bit_mask+0x7f7a1f>
714: 80 ff sbrs r24, 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:206
TCD0.CTRLA |= TCD_ENABLE_bm;
716: fc cf rjmp .-8 ; 0x710 <digitalWrite+0xea>
718: 80 91 80 0a lds r24, 0x0A80 ; 0x800a80 <digital_pin_to_bit_mask+0x7f7a11>
71c: 81 60 ori r24, 0x01 ; 1
71e: 80 93 80 0a sts 0x0A80, r24 ; 0x800a80 <digital_pin_to_bit_mask+0x7f7a11>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:228
} else {
PORTC.PIN1CTRL &= ~(PORT_INVEN_bm);
}
#endif
#endif
SREG = oldSREG;
722: 4f bf out 0x3f, r20 ; 63
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:197
#endif
SREG = oldSREG;
}
#else
uint8_t fc_mask = (bit_mask == 0x02 ? 0x80 : 0x40);
724: cc cf rjmp .-104 ; 0x6be <digitalWrite+0x98>
digitalWrite():
726: 80 e8 ldi r24, 0x80 ; 128
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:33
constexpr float STRING_HZ[] = { 82.4069f, 110.0f, 146.832f, 195.998f, 246.942f, 329.628f };
constexpr float IN_TUNE_CENTS = 4.0f;
int16_t samples[SAMPLE_COUNT];
void allLedsOff() {
728: dc cf rjmp .-72 ; 0x6e2 <digitalWrite+0xbc>
0000072a <allLedsOff()>:
_Z10allLedsOffv():
72a: cf 93 push r28
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:34
for (uint8_t pin : NOTE_LEDS) digitalWrite(pin, LOW);
72c: df 93 push r29
72e: c3 e3 ldi r28, 0x33 ; 51
730: d0 e9 ldi r29, 0x90 ; 144
732: 60 e0 ldi r22, 0x00 ; 0
734: 89 91 ld r24, Y+
736: 77 df rcall .-274 ; 0x626 <digitalWrite>
738: 80 e9 ldi r24, 0x90 ; 144
73a: c9 33 cpi r28, 0x39 ; 57
73c: d8 07 cpc r29, r24
73e: c9 f7 brne .-14 ; 0x732 <allLedsOff()+0x8>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:35
digitalWrite(FLAT_LED, LOW);
740: 60 e0 ldi r22, 0x00 ; 0
742: 86 e0 ldi r24, 0x06 ; 6
744: 70 df rcall .-288 ; 0x626 <digitalWrite>
746: 60 e0 ldi r22, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:36
digitalWrite(TUNE_LED, LOW);
748: 88 e0 ldi r24, 0x08 ; 8
74a: 6d df rcall .-294 ; 0x626 <digitalWrite>
74c: 60 e0 ldi r22, 0x00 ; 0
74e: 87 e0 ldi r24, 0x07 ; 7
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:37
digitalWrite(SHARP_LED, LOW);
750: df 91 pop r29
752: cf 91 pop r28
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:38
}
754: 68 cf rjmp .-304 ; 0x626 <digitalWrite>
00000756 <pinMode>:
pinMode():
756: 82 31 cpi r24, 0x12 ; 18
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:37
void allLedsOff() {
for (uint8_t pin : NOTE_LEDS) digitalWrite(pin, LOW);
digitalWrite(FLAT_LED, LOW);
digitalWrite(TUNE_LED, LOW);
digitalWrite(SHARP_LED, LOW);
758: f0 f4 brcc .+60 ; 0x796 <pinMode+0x40>
check_valid_digital_pin():
75a: 90 e0 ldi r25, 0x00 ; 0
pinMode():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:44
}
void pinMode(uint8_t pin, uint8_t mode) {
check_valid_digital_pin(pin); /* generate compile error if a constant that is not a valid pin is used as the pin */
check_valid_pin_mode(mode); /* generate compile error if a constant that is not a valid pin mode is used as the mode */
uint8_t bit_mask = digitalPinToBitMask(pin);
75c: fc 01 movw r30, r24
75e: e1 59 subi r30, 0x91 ; 145
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/Arduino.h:888
760: ff 46 sbci r31, 0x6F ; 111
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:44
762: 20 81 ld r18, Z
764: 2f 3f cpi r18, 0xFF ; 255
766: b9 f0 breq .+46 ; 0x796 <pinMode+0x40>
768: fc 01 movw r30, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:45
if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP)) {
76a: e3 5a subi r30, 0xA3 ; 163
76c: ff 46 sbci r31, 0x6F ; 111
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:48
return; /* ignore invalid pins passed at runtime */
}
volatile uint8_t * port_base = (volatile uint8_t *) (uint16_t) ((&PORTA) + digitalPinToPort(pin));
76e: e0 81 ld r30, Z
770: 30 e2 ldi r19, 0x20 ; 32
772: e3 9f mul r30, r19
774: f0 01 movw r30, r0
776: 11 24 eor r1, r1
778: fc 5f subi r31, 0xFC ; 252
77a: 60 ff sbrs r22, 0
77c: 0d c0 rjmp .+26 ; 0x798 <pinMode+0x42>
77e: 21 83 std Z+1, r18 ; 0x01
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:49
if (mode & 0x01) {
780: 85 5b subi r24, 0xB5 ; 181
782: 9f 46 sbci r25, 0x6F ; 111
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:51
// OUTPUT mode, so write DIRSET with the mask.
*(port_base + 1) = bit_mask;
784: dc 01 movw r26, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:77
// then load with displacement 2 clocks. IFF the compiler puts this pointer into Y or Z, it is faster and smaller
// by 2 bytes and one clock. And let's hope it is, because the code above would suck too if it was in X.
// Handwritten assembly that exploited the knowledge that there will never be a carry would save 1 word and 1 clock.
// and could probably save at least several times that in initializing the port_base pointer. But if you're using
// pinMode you probably don't care.
port_base += (uint8_t) digitalPinToBitPosition(pin);
786: 8c 91 ld r24, X
788: e8 0f add r30, r24
78a: f1 1d adc r31, r1
78c: 80 89 ldd r24, Z+16 ; 0x10
78e: 61 ff sbrs r22, 1
790: 05 c0 rjmp .+10 ; 0x79c <pinMode+0x46>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:78
bit_mask = *(port_base + 0x10);
792: 88 60 ori r24, 0x08 ; 8
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:79
if (mode & 2) {
794: 80 8b std Z+16, r24 ; 0x10
796: 08 95 ret
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:80
bit_mask |= 0x08;
798: 22 83 std Z+2, r18 ; 0x02
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:84
} else {
bit_mask &= 0xF7;
}
*(port_base + 0x10) = bit_mask;
79a: f2 cf rjmp .-28 ; 0x780 <pinMode+0x2a>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:85
}
79c: 87 7f andi r24, 0xF7 ; 247
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:53
volatile uint8_t * port_base = (volatile uint8_t *) (uint16_t) ((&PORTA) + digitalPinToPort(pin));
if (mode & 0x01) {
// OUTPUT mode, so write DIRSET with the mask.
*(port_base + 1) = bit_mask;
} else { // otherwise it's input so we write DIRCLR
*(port_base + 2) = bit_mask;
79e: fa cf rjmp .-12 ; 0x794 <pinMode+0x3e>
000007a0 <__vector_15>:
__vector_15():
7a0: 8f 93 push r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_digital.c:82
port_base += (uint8_t) digitalPinToBitPosition(pin);
bit_mask = *(port_base + 0x10);
if (mode & 2) {
bit_mask |= 0x08;
} else {
bit_mask &= 0xF7;
7a2: 81 e0 ldi r24, 0x01 ; 1
7a4: 80 93 8d 0a sts 0x0A8D, r24 ; 0x800a8d <digital_pin_to_bit_mask+0x7f7a1e>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:839
#else
ISR(MILLIS_TIMER_VECTOR, ISR_NAKED) {
// Common Interrupt header for TCB, TCA and TCD;
// Clears the Timer Interrupt flag and pushes the CPU Registers
// 7 words / 7 clocks
__asm__ __volatile__(
7a8: 8f b7 in r24, 0x3f ; 63
7aa: 8f 93 push r24
7ac: ef 93 push r30
7ae: ff 93 push r31
7b0: e0 e0 ldi r30, 0x00 ; 0
7b2: f8 e3 ldi r31, 0x38 ; 56
7b4: 9f 93 push r25
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:950
[MIINC] "M" ((0x0000 - MILLIS_INC) & 0xFF),
[MINCD] "M" ((0xFFFF - MILLIS_INC) & 0xFF)
);
*/
__asm__ __volatile__(
7b6: 68 94 set
7b8: 8f ef ldi r24, 0xFF ; 255
7ba: 0d c0 rjmp .+26 ; 0x7d6 <sub4>
000007bc <ovf_end>:
7bc: e8 94 clt
7be: 84 81 ldd r24, Z+4 ; 0x04
7c0: 95 81 ldd r25, Z+5 ; 0x05
7c2: 80 5d subi r24, 0xD0 ; 208
7c4: 9c 4f sbci r25, 0xFC ; 252
7c6: 84 83 std Z+4, r24 ; 0x04
7c8: 95 83 std Z+5, r25 ; 0x05
7ca: 88 5e subi r24, 0xE8 ; 232
7cc: 93 40 sbci r25, 0x03 ; 3
7ce: 80 f0 brcs .+32 ; 0x7f0 <sub_end>
7d0: 84 83 std Z+4, r24 ; 0x04
7d2: 95 83 std Z+5, r25 ; 0x05
7d4: 8f ef ldi r24, 0xFF ; 255
000007d6 <sub4>:
7d6: 90 81 ld r25, Z
7d8: 98 1b sub r25, r24
7da: 91 93 st Z+, r25
7dc: 90 81 ld r25, Z
7de: 9f 4f sbci r25, 0xFF ; 255
7e0: 91 93 st Z+, r25
7e2: 90 81 ld r25, Z
7e4: 9f 4f sbci r25, 0xFF ; 255
7e6: 91 93 st Z+, r25
7e8: 90 81 ld r25, Z
7ea: 9f 4f sbci r25, 0xFF ; 255
7ec: 91 93 st Z+, r25
7ee: 36 f3 brts .-52 ; 0x7bc <ovf_end>
000007f0 <sub_end>:
7f0: 9f 91 pop r25
7f2: ff 91 pop r31
7f4: ef 91 pop r30
7f6: 8f 91 pop r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_micros_ISR.h:1012
[MINCD] "M" ((0xFFFF - MILLIS_INC) & 0xFF)
);
#endif /* (defined(MILLIS_USE_TIMERB0) || defined(MILLIS_USE_TIMERB1) || defined(MILLIS_USE_TIMERB2) || defined(MILLIS_USE_TIMERB3) || defined(MILLIS_USE_TIMERB4)) */
// Common ISR Epilogue for TCA, TCB and TCD, popping register in reverse Order
// 6 words, 14 clocks
__asm__ __volatile__(
7f8: 8f bf out 0x3f, r24 ; 63
7fa: 8f 91 pop r24
7fc: 18 95 reti
000007fe <main>:
main():
7fe: cf 93 push r28
800: df 93 push r29
802: cd b7 in r28, 0x3d ; 61
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:49
* called first in non-optiboot configurations (neither is needed on Optibooot configurations() *
* an extra bit of initialization code in .init3 to fix the vectors and still happen if user *
* overrides main. In the past there was a USB-related function here, that is removed, as work *
* will be needed in any event at the core level if VUSB-based "stuff" arrives, but really I'm *
* just waiting for the DU-series now */
int main() {
804: de b7 in r29, 0x3e ; 62
806: 2b 97 sbiw r28, 0x0b ; 11
808: cd bf out 0x3d, r28 ; 61
80a: de bf out 0x3e, r29 ; 62
init_clock():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:460
#if (CLOCK_SOURCE == 0)
#if (defined(CLOCK_TUNE_INTERNAL))
tune_internal(); // Will be inlined as only called once. Just too long and ugly to put two implementations in middle of this.
#else
#if defined(_MCLK_CTRLB) && defined(F_CPU) && defined(_MAIN_CLOCK_PRESCALER)
_PROTECTED_WRITE(CLKCTRL_MCLKCTRLB,_MCLK_CTRLB);
80c: 81 e0 ldi r24, 0x01 ; 1
80e: 98 ed ldi r25, 0xD8 ; 216
810: 94 bf out 0x34, r25 ; 52
812: 80 93 61 00 sts 0x0061, r24 ; 0x800061 <digital_pin_to_bit_mask+0x7f6ff2>
init_ADC0():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:552
/********************************* ADC ****************************************/
void __attribute__((weak)) init_ADC0() {
ADC_t* pADC;
_fastPtr_d(pADC, &ADC0);
816: e0 e0 ldi r30, 0x00 ; 0
818: f6 e0 ldi r31, 0x06 ; 6
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:575
#if F_CPU > 24000000 // 24 MHz / 16 = 1.5 MHz, 25 MHz / 32 = 780 kHz
pADC->CTRLC = ADC_PRESC_DIV32_gc | ADC_REFSEL_VDDREF_gc | ADC_SAMPCAP_bm;
#elif F_CPU >= 12000000 // 16 MHz / 16 = 1.0 MHz, 20 MHz / 16 = 1.25 MHz
pADC->CTRLC = ADC_PRESC_DIV16_gc | ADC_REFSEL_VDDREF_gc | ADC_SAMPCAP_bm;
#elif F_CPU >= 6000000 // 8 MHz / 8 = 1.0 MHz, 10 MHz / 8 = 1.25 MHz
pADC->CTRLC = ADC_PRESC_DIV8_gc | ADC_REFSEL_VDDREF_gc | ADC_SAMPCAP_bm;
81a: 92 e5 ldi r25, 0x52 ; 82
81c: 92 83 std Z+2, r25 ; 0x02
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:584
pADC->CTRLC = ADC_PRESC_DIV2_gc | ADC_REFSEL_VDDREF_gc | ADC_SAMPCAP_bm;
#endif
#if (F_CPU == 6000000 || F_CPU == 12000000 || F_CPU == 24000000 || F_CPU ==25000000)
pADC->SAMPCTRL = (7); // 9 ADC clocks, 12 us
#elif (F_CPU == 5000000 || F_CPU == 10000000 || F_CPU == 20000000)
pADC->SAMPCTRL = (13); // 15 ADC clock,s 12 us
81e: 9d e0 ldi r25, 0x0D ; 13
820: 95 83 std Z+5, r25 ; 0x05
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:588
#else
pADC->SAMPCTRL = (10); // 12 ADC clocks, 12 us
#endif
pADC->CTRLD = ADC_INITDLY_DLY16_gc;
822: 90 e2 ldi r25, 0x20 ; 32
824: 93 83 std Z+3, r25 ; 0x03
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:589
pADC->CTRLA = ADC_ENABLE_bm;
826: 80 83 st Z, r24
init_TCA0():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:680
void __attribute__((weak)) init_TCA0() {
/* TYPE A TIMER */
#if !defined(TCA_BUFFERED_3PIN)
#if defined(PORTMUX_CTRLC)
PORTMUX.CTRLC = TCA_PORTMUX;
828: 10 92 02 02 sts 0x0202, r1 ; 0x800202 <digital_pin_to_bit_mask+0x7f7193>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:684
#else
PORTMUX.TCAROUTEA = TCA_PORTMUX;
#endif
TCA0.SPLIT.CTRLD = TCA_SPLIT_SPLITM_bm;
82c: 80 93 03 0a sts 0x0A03, r24 ; 0x800a03 <digital_pin_to_bit_mask+0x7f7994>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:685
TCA0.SPLIT.LPER = PWM_TIMER_PERIOD;
830: 9e ef ldi r25, 0xFE ; 254
832: 90 93 26 0a sts 0x0A26, r25 ; 0x800a26 <digital_pin_to_bit_mask+0x7f79b7>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:686
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
836: 90 93 27 0a sts 0x0A27, r25 ; 0x800a27 <digital_pin_to_bit_mask+0x7f79b8>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:687
TCA0.SPLIT.CTRLA = (_TIMERA_PRESCALER | TCA_SPLIT_ENABLE_bm);
83a: 9b e0 ldi r25, 0x0B ; 11
83c: 90 93 00 0a sts 0x0A00, r25 ; 0x800a00 <digital_pin_to_bit_mask+0x7f7991>
init_millis():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:345
#else
TCA0.SINGLE.INTCTRL = TCA_SINGLE_OVF_bm;
#endif
#elif defined(MILLIS_USE_TIMERD0)
TCD_t* pTCD;
_fastPtr_d(pTCD, &TCD0);
840: e0 e8 ldi r30, 0x80 ; 128
842: fa e0 ldi r31, 0x0A ; 10
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:346
pTCD->CMPBCLR = TIME_TRACKING_TIMER_PERIOD; // essentially, this is TOP
844: 2d ef ldi r18, 0xFD ; 253
846: 31 e0 ldi r19, 0x01 ; 1
848: 26 a7 std Z+46, r18 ; 0x2e
84a: 37 a7 std Z+47, r19 ; 0x2f
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:347
pTCD->CTRLB = 0x00; // oneramp mode
84c: 11 82 std Z+1, r1 ; 0x01
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:348
pTCD->CTRLC = 0x80;
84e: 90 e8 ldi r25, 0x80 ; 128
850: 92 83 std Z+2, r25 ; 0x02
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:349
pTCD->INTCTRL = 0x01; // enable interrupt
852: 84 87 std Z+12, r24 ; 0x0c
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring.c:350
pTCD->CTRLA = _TIMERD0_PRESCALER | 0x01; // set clock source and enable!
854: 81 e1 ldi r24, 0x11 ; 17
856: 80 83 st Z, r24
main():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/main.cpp:53
onBeforeInit(); // Emnpty callback called before init but after the .init stuff. First normal code executed
init(); // Interrupts are turned on just prior to init() returning.
initVariant();
if (!onAfterInit()) sei(); // enable interrupts.
858: 78 94 sei
analogReadResolution():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:141
#else
if (res == 8) {
ADC0.CTRLA |= ADC_RESSEL_bm;
return true;
}
ADC0.CTRLA &= ~ADC_RESSEL_bm;
85a: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <digital_pin_to_bit_mask+0x7f7591>
85e: 8b 7f andi r24, 0xFB ; 251
860: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <digital_pin_to_bit_mask+0x7f7591>
setup():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:86
else digitalWrite(TUNE_LED, HIGH);
}
void setup() {
analogReadResolution(10);
pinMode(AUDIO_PIN, INPUT);
864: 60 e0 ldi r22, 0x00 ; 0
866: 8f e0 ldi r24, 0x0F ; 15
868: 76 df rcall .-276 ; 0x756 <pinMode>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:87
pinMode(MODE_PIN, INPUT_PULLUP);
86a: 62 e0 ldi r22, 0x02 ; 2
86c: 89 e0 ldi r24, 0x09 ; 9
86e: 73 df rcall .-282 ; 0x756 <pinMode>
main():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:88
for (uint8_t pin : NOTE_LEDS) pinMode(pin, OUTPUT);
870: 03 e3 ldi r16, 0x33 ; 51
872: 10 e9 ldi r17, 0x90 ; 144
setup():
874: 61 e0 ldi r22, 0x01 ; 1
876: f8 01 movw r30, r16
878: 81 91 ld r24, Z+
87a: 8f 01 movw r16, r30
87c: 6c df rcall .-296 ; 0x756 <pinMode>
87e: f0 e9 ldi r31, 0x90 ; 144
880: 09 33 cpi r16, 0x39 ; 57
882: 1f 07 cpc r17, r31
884: b9 f7 brne .-18 ; 0x874 <__DATA_REGION_LENGTH__+0x74>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:89
pinMode(FLAT_LED, OUTPUT);
886: 61 e0 ldi r22, 0x01 ; 1
888: 86 e0 ldi r24, 0x06 ; 6
88a: 65 df rcall .-310 ; 0x756 <pinMode>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:90
pinMode(TUNE_LED, OUTPUT);
88c: 61 e0 ldi r22, 0x01 ; 1
88e: 88 e0 ldi r24, 0x08 ; 8
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:91
pinMode(SHARP_LED, OUTPUT);
890: 62 df rcall .-316 ; 0x756 <pinMode>
892: 61 e0 ldi r22, 0x01 ; 1
894: 87 e0 ldi r24, 0x07 ; 7
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:92
allLedsOff();
896: 5f df rcall .-322 ; 0x756 <pinMode>
898: 48 df rcall .-368 ; 0x72a <allLedsOff()>
loop():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:102
// Sequence one LED at a time to avoid a nine-LED current pulse on CR2032.
const uint8_t indicators[] = {NOTE_LEDS[0], NOTE_LEDS[1], NOTE_LEDS[2],
NOTE_LEDS[3], NOTE_LEDS[4], NOTE_LEDS[5], FLAT_LED, TUNE_LED, SHARP_LED};
allLedsOff();
do {
for (uint8_t pin : indicators) {
89a: 1e 01 movw r2, r28
89c: 8a e0 ldi r24, 0x0A ; 10
89e: 28 0e add r2, r24
8a0: 31 1c adc r3, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:96
pinMode(SHARP_LED, OUTPUT);
allLedsOff();
}
void loop() {
if (digitalRead(MODE_PIN) == LOW) {
8a2: bd de rcall .-646 ; 0x61e <digitalRead.constprop.2>
8a4: 81 11 cpse r24, r1
8a6: 28 c0 rjmp .+80 ; 0x8f8 <__DATA_REGION_LENGTH__+0xf8>
8a8: 89 e0 ldi r24, 0x09 ; 9
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:98
// Sequence one LED at a time to avoid a nine-LED current pulse on CR2032.
const uint8_t indicators[] = {NOTE_LEDS[0], NOTE_LEDS[1], NOTE_LEDS[2],
8aa: e2 e1 ldi r30, 0x12 ; 18
8ac: f0 e9 ldi r31, 0x90 ; 144
8ae: de 01 movw r26, r28
8b0: 11 96 adiw r26, 0x01 ; 1
8b2: 01 90 ld r0, Z+
8b4: 0d 92 st X+, r0
8b6: 8a 95 dec r24
8b8: e1 f7 brne .-8 ; 0x8b2 <__DATA_REGION_LENGTH__+0xb2>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:100
NOTE_LEDS[3], NOTE_LEDS[4], NOTE_LEDS[5], FLAT_LED, TUNE_LED, SHARP_LED};
allLedsOff();
8ba: 37 df rcall .-402 ; 0x72a <allLedsOff()>
main():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:102
do {
for (uint8_t pin : indicators) {
8bc: 8e 01 movw r16, r28
8be: 0f 5f subi r16, 0xFF ; 255
8c0: 1f 4f sbci r17, 0xFF ; 255
loop():
8c2: f8 01 movw r30, r16
8c4: f1 90 ld r15, Z+
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:103
digitalWrite(pin, HIGH);
8c6: 8f 01 movw r16, r30
8c8: 61 e0 ldi r22, 0x01 ; 1
8ca: 8f 2d mov r24, r15
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:104
delay(150);
8cc: ac de rcall .-680 ; 0x626 <digitalWrite>
8ce: 66 e9 ldi r22, 0x96 ; 150
8d0: 70 e0 ldi r23, 0x00 ; 0
8d2: 80 e0 ldi r24, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:105
digitalWrite(pin, LOW);
8d4: 90 e0 ldi r25, 0x00 ; 0
8d6: 79 de rcall .-782 ; 0x5ca <delay>
8d8: 60 e0 ldi r22, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:102
// Sequence one LED at a time to avoid a nine-LED current pulse on CR2032.
const uint8_t indicators[] = {NOTE_LEDS[0], NOTE_LEDS[1], NOTE_LEDS[2],
NOTE_LEDS[3], NOTE_LEDS[4], NOTE_LEDS[5], FLAT_LED, TUNE_LED, SHARP_LED};
allLedsOff();
do {
for (uint8_t pin : indicators) {
8da: 8f 2d mov r24, r15
8dc: a4 de rcall .-696 ; 0x626 <digitalWrite>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:107
digitalWrite(pin, HIGH);
delay(150);
digitalWrite(pin, LOW);
}
} while (digitalRead(MODE_PIN) == LOW);
8de: 02 15 cp r16, r2
8e0: 13 05 cpc r17, r3
8e2: 79 f7 brne .-34 ; 0x8c2 <__DATA_REGION_LENGTH__+0xc2>
8e4: 9c de rcall .-712 ; 0x61e <digitalRead.constprop.2>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:108
allLedsOff();
8e6: 88 23 and r24, r24
8e8: 49 f3 breq .-46 ; 0x8bc <__DATA_REGION_LENGTH__+0xbc>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:109
delay(100);
8ea: 1f df rcall .-450 ; 0x72a <allLedsOff()>
8ec: 64 e6 ldi r22, 0x64 ; 100
8ee: 70 e0 ldi r23, 0x00 ; 0
8f0: 80 e0 ldi r24, 0x00 ; 0
8f2: 90 e0 ldi r25, 0x00 ; 0
8f4: 6a de rcall .-812 ; 0x5ca <delay>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:41
digitalWrite(TUNE_LED, LOW);
digitalWrite(SHARP_LED, LOW);
}
void captureSamples() {
uint32_t next = micros();
8f6: d5 cf rjmp .-86 ; 0x8a2 <__DATA_REGION_LENGTH__+0xa2>
captureSamples():
8f8: 18 de rcall .-976 ; 0x52a <micros>
8fa: 2b 01 movw r4, r22
8fc: 3c 01 movw r6, r24
8fe: 0a e0 ldi r16, 0x0A ; 10
900: 18 e3 ldi r17, 0x38 ; 56
902: 58 01 movw r10, r16
main():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:42
int32_t sum = 0;
904: c1 2c mov r12, r1
906: d1 2c mov r13, r1
908: 76 01 movw r14, r12
captureSamples():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:44
for (uint16_t i = 0; i < SAMPLE_COUNT; ++i) {
while ((int32_t)(micros() - next) < 0) {}
90a: 0f de rcall .-994 ; 0x52a <micros>
90c: 64 19 sub r22, r4
90e: 75 09 sbc r23, r5
910: 86 09 sbc r24, r6
912: 97 09 sbc r25, r7
914: 97 fd sbrc r25, 7
916: f9 cf rjmp .-14 ; 0x90a <__DATA_REGION_LENGTH__+0x10a>
analogRead():
918: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <digital_pin_to_bit_mask+0x7f7591>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:716
// don't waste flash on smallest parts.
if ((pin & 0x7F) > 0x1F) { // highest valid mux value for any 0 or 1-series part.
return ADC_ERROR_BAD_PIN_OR_CHANNEL;
}
#endif
if (!ADC0.CTRLA & 0x01) return ADC_ERROR_DISABLED;
91c: 88 23 and r24, r24
91e: 09 f4 brne .+2 ; 0x922 <__DATA_REGION_LENGTH__+0x122>
920: a0 c0 rjmp .+320 ; 0xa62 <__DATA_REGION_LENGTH__+0x262>
922: f2 e0 ldi r31, 0x02 ; 2
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:720
pin &= 0x1F;
/* Reference should be already set up */
/* Select channel */
ADC0.MUXPOS = (pin << ADC_MUXPOS_gp);
924: f0 93 06 06 sts 0x0606, r31 ; 0x800606 <digital_pin_to_bit_mask+0x7f7597>
928: 81 e0 ldi r24, 0x01 ; 1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:727
#if defined(STRICT_ERROR_CHECKING)
if (ADC0.COMMAND) return ADC_ERROR_BUSY;
#endif
/* Start conversion */
ADC0.COMMAND = ADC_STCONV_bm;
92a: 80 93 08 06 sts 0x0608, r24 ; 0x800608 <digital_pin_to_bit_mask+0x7f7599>
92e: 80 91 0b 06 lds r24, 0x060B ; 0x80060b <digital_pin_to_bit_mask+0x7f759c>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:730
/* Wait for result ready */
while (!(ADC0.INTFLAGS & ADC_RESRDY_bm));
932: 80 ff sbrs r24, 0
934: fc cf rjmp .-8 ; 0x92e <__DATA_REGION_LENGTH__+0x12e>
936: 80 91 10 06 lds r24, 0x0610 ; 0x800610 <digital_pin_to_bit_mask+0x7f75a1>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:733
/* Combine two bytes */
return ADC0.RES;
93a: 90 91 11 06 lds r25, 0x0611 ; 0x800611 <digital_pin_to_bit_mask+0x7f75a2>
captureSamples():
93e: f5 01 movw r30, r10
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:46
const int16_t value = analogRead(AUDIO_PIN);
samples[i] = value;
940: 81 93 st Z+, r24
942: 91 93 st Z+, r25
944: 5f 01 movw r10, r30
946: 09 2e mov r0, r25
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:47
sum += value;
948: 00 0c add r0, r0
94a: aa 0b sbc r26, r26
94c: bb 0b sbc r27, r27
94e: c8 0e add r12, r24
950: d9 1e adc r13, r25
952: ea 1e adc r14, r26
954: fb 1e adc r15, r27
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:48
next += SAMPLE_PERIOD_US;
956: fd e7 ldi r31, 0x7D ; 125
958: 4f 0e add r4, r31
95a: 51 1c adc r5, r1
95c: 61 1c adc r6, r1
95e: 71 1c adc r7, r1
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:43
}
void captureSamples() {
uint32_t next = micros();
int32_t sum = 0;
for (uint16_t i = 0; i < SAMPLE_COUNT; ++i) {
960: 8a e0 ldi r24, 0x0A ; 10
962: a8 16 cp r10, r24
964: 8a e3 ldi r24, 0x3A ; 58
966: b8 06 cpc r11, r24
968: 81 f6 brne .-96 ; 0x90a <__DATA_REGION_LENGTH__+0x10a>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:51
samples[i] = value;
sum += value;
next += SAMPLE_PERIOD_US;
}
const int16_t mean = sum / SAMPLE_COUNT;
96a: c7 01 movw r24, r14
96c: b6 01 movw r22, r12
96e: 20 e0 ldi r18, 0x00 ; 0
970: 31 e0 ldi r19, 0x01 ; 1
972: 40 e0 ldi r20, 0x00 ; 0
974: 50 e0 ldi r21, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:52
for (uint16_t i = 0; i < SAMPLE_COUNT; ++i) samples[i] -= mean;
976: e8 d2 rcall .+1488 ; 0xf48 <__divmodsi4>
978: f8 01 movw r30, r16
97a: 81 91 ld r24, Z+
97c: 91 91 ld r25, Z+
97e: 8f 01 movw r16, r30
980: 32 97 sbiw r30, 0x02 ; 2
982: 82 1b sub r24, r18
984: 93 0b sbc r25, r19
986: 80 83 st Z, r24
988: 91 83 std Z+1, r25 ; 0x01
98a: fa e3 ldi r31, 0x3A ; 58
98c: 0a 30 cpi r16, 0x0A ; 10
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:56
}
float estimateFrequency() {
return tuner::estimate(samples) * SAMPLE_CLOCK_SCALE;
98e: 1f 07 cpc r17, r31
990: 99 f7 brne .-26 ; 0x978 <__DATA_REGION_LENGTH__+0x178>
estimateFrequency():
992: be db rcall .-2180 ; 0x110 <tuner::estimate(int const*) [clone .constprop.3]>
994: 4b 01 movw r8, r22
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:73
}
return best;
}
void showTuning(float frequency) {
allLedsOff();
996: 5c 01 movw r10, r24
showTuning():
998: c8 de rcall .-624 ; 0x72a <allLedsOff()>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:74
if (frequency <= 0.0f) return;
99a: 20 e0 ldi r18, 0x00 ; 0
99c: 30 e0 ldi r19, 0x00 ; 0
99e: a9 01 movw r20, r18
9a0: c5 01 movw r24, r10
9a2: b4 01 movw r22, r8
9a4: d4 d0 rcall .+424 ; 0xb4e <__cmpsf2>
9a6: 18 16 cp r1, r24
9a8: 0c f0 brlt .+2 ; 0x9ac <__DATA_REGION_LENGTH__+0x1ac>
9aa: 7b cf rjmp .-266 ; 0x8a2 <__DATA_REGION_LENGTH__+0xa2>
9ac: 8b e1 ldi r24, 0x1B ; 27
9ae: 90 e9 ldi r25, 0x90 ; 144
9b0: 8a 87 std Y+10, r24 ; 0x0a
9b2: 9b 87 std Y+11, r25 ; 0x0b
main():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:60
float estimateFrequency() {
return tuner::estimate(samples) * SAMPLE_CLOCK_SCALE;
}
uint8_t nearestString(float frequency) {
uint8_t best = 0;
9b4: 00 e0 ldi r16, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:61
float smallestError = 100000.0f;
9b6: 71 2c mov r7, r1
9b8: 90 e5 ldi r25, 0x50 ; 80
9ba: 69 2e mov r6, r25
9bc: 23 ec ldi r18, 0xC3 ; 195
9be: 52 2e mov r5, r18
9c0: 37 e4 ldi r19, 0x47 ; 71
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:62
for (uint8_t i = 0; i < 6; ++i) {
9c2: 43 2e mov r4, r19
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:63
const float cents = fabsf(1731.234049f * logf(frequency / STRING_HZ[i]));
9c4: 10 e0 ldi r17, 0x00 ; 0
nearestString():
9c6: ea 85 ldd r30, Y+10 ; 0x0a
9c8: fb 85 ldd r31, Y+11 ; 0x0b
9ca: 21 91 ld r18, Z+
9cc: 31 91 ld r19, Z+
9ce: 41 91 ld r20, Z+
9d0: 51 91 ld r21, Z+
9d2: ea 87 std Y+10, r30 ; 0x0a
9d4: fb 87 std Y+11, r31 ; 0x0b
9d6: c5 01 movw r24, r10
9d8: b4 01 movw r22, r8
9da: bd d0 rcall .+378 ; 0xb56 <__divsf3>
9dc: df d1 rcall .+958 ; 0xd9c <log>
9de: 2d e7 ldi r18, 0x7D ; 125
9e0: 37 e6 ldi r19, 0x67 ; 103
9e2: 48 ed ldi r20, 0xD8 ; 216
9e4: 54 e4 ldi r21, 0x44 ; 68
9e6: 1a d2 rcall .+1076 ; 0xe1c <__mulsf3>
9e8: 6b 01 movw r12, r22
9ea: 7c 01 movw r14, r24
9ec: e8 94 clt
9ee: f7 f8 bld r15, 7
9f0: a7 01 movw r20, r14
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:64
if (cents < smallestError) {
9f2: 96 01 movw r18, r12
9f4: 67 2d mov r22, r7
9f6: 76 2d mov r23, r6
9f8: 85 2d mov r24, r5
9fa: 94 2d mov r25, r4
9fc: c6 d1 rcall .+908 ; 0xd8a <__gesf2>
9fe: 18 16 cp r1, r24
a00: 2c f4 brge .+10 ; 0xa0c <__DATA_REGION_LENGTH__+0x20c>
main():
a02: 7c 2c mov r7, r12
a04: 6d 2c mov r6, r13
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:65
smallestError = cents;
a06: 5e 2c mov r5, r14
a08: 4f 2c mov r4, r15
nearestString():
a0a: 01 2f mov r16, r17
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:62
}
uint8_t nearestString(float frequency) {
uint8_t best = 0;
float smallestError = 100000.0f;
for (uint8_t i = 0; i < 6; ++i) {
a0c: 1f 5f subi r17, 0xFF ; 255
a0e: 16 30 cpi r17, 0x06 ; 6
a10: d1 f6 brne .-76 ; 0x9c6 <__DATA_REGION_LENGTH__+0x1c6>
showTuning():
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:77
void showTuning(float frequency) {
allLedsOff();
if (frequency <= 0.0f) return;
const uint8_t stringIndex = nearestString(frequency);
digitalWrite(NOTE_LEDS[stringIndex], HIGH);
a12: 10 e0 ldi r17, 0x00 ; 0
a14: f8 01 movw r30, r16
a16: ed 5c subi r30, 0xCD ; 205
a18: ff 46 sbci r31, 0x6F ; 111
a1a: 61 e0 ldi r22, 0x01 ; 1
a1c: 80 81 ld r24, Z
a1e: 03 de rcall .-1018 ; 0x626 <digitalWrite>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:78
const float cents = 1731.234049f * logf(frequency / STRING_HZ[stringIndex]);
a20: 00 0f add r16, r16
a22: 11 1f adc r17, r17
a24: 00 0f add r16, r16
a26: 11 1f adc r17, r17
a28: f8 01 movw r30, r16
a2a: e5 5e subi r30, 0xE5 ; 229
a2c: ff 46 sbci r31, 0x6F ; 111
a2e: 20 81 ld r18, Z
a30: 31 81 ldd r19, Z+1 ; 0x01
a32: 42 81 ldd r20, Z+2 ; 0x02
a34: 53 81 ldd r21, Z+3 ; 0x03
a36: c5 01 movw r24, r10
a38: b4 01 movw r22, r8
a3a: 8d d0 rcall .+282 ; 0xb56 <__divsf3>
a3c: af d1 rcall .+862 ; 0xd9c <log>
a3e: 2d e7 ldi r18, 0x7D ; 125
a40: 37 e6 ldi r19, 0x67 ; 103
a42: 48 ed ldi r20, 0xD8 ; 216
a44: 54 e4 ldi r21, 0x44 ; 68
a46: ea d1 rcall .+980 ; 0xe1c <__mulsf3>
a48: 6b 01 movw r12, r22
a4a: 7c 01 movw r14, r24
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:79
if (cents < -IN_TUNE_CENTS) digitalWrite(FLAT_LED, HIGH);
a4c: 20 e0 ldi r18, 0x00 ; 0
a4e: 30 e0 ldi r19, 0x00 ; 0
a50: 40 e8 ldi r20, 0x80 ; 128
a52: 50 ec ldi r21, 0xC0 ; 192
a54: 7c d0 rcall .+248 ; 0xb4e <__cmpsf2>
a56: 87 ff sbrs r24, 7
a58: 07 c0 rjmp .+14 ; 0xa68 <__DATA_REGION_LENGTH__+0x268>
a5a: 61 e0 ldi r22, 0x01 ; 1
a5c: 86 e0 ldi r24, 0x06 ; 6
a5e: e3 dd rcall .-1082 ; 0x626 <digitalWrite>
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:81
else if (cents > IN_TUNE_CENTS) digitalWrite(SHARP_LED, HIGH);
else digitalWrite(TUNE_LED, HIGH);
a60: 20 cf rjmp .-448 ; 0x8a2 <__DATA_REGION_LENGTH__+0xa2>
main():
a62: 89 ef ldi r24, 0xF9 ; 249
a64: 92 e8 ldi r25, 0x82 ; 130
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/.tscircuit/toolchain/data/packages/megaTinyCore/hardware/megaavr/2.6.11/cores/megatinycore/wiring_analog.c:716
// don't waste flash on smallest parts.
if ((pin & 0x7F) > 0x1F) { // highest valid mux value for any 0 or 1-series part.
return ADC_ERROR_BAD_PIN_OR_CHANNEL;
}
#endif
if (!ADC0.CTRLA & 0x01) return ADC_ERROR_DISABLED;
a66: 6b cf rjmp .-298 ; 0x93e <__DATA_REGION_LENGTH__+0x13e>
showTuning():
a68: 20 e0 ldi r18, 0x00 ; 0
a6a: 30 e0 ldi r19, 0x00 ; 0
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:80
const uint8_t stringIndex = nearestString(frequency);
digitalWrite(NOTE_LEDS[stringIndex], HIGH);
const float cents = 1731.234049f * logf(frequency / STRING_HZ[stringIndex]);
if (cents < -IN_TUNE_CENTS) digitalWrite(FLAT_LED, HIGH);
else if (cents > IN_TUNE_CENTS) digitalWrite(SHARP_LED, HIGH);
a6c: 40 e8 ldi r20, 0x80 ; 128
a6e: 50 e4 ldi r21, 0x40 ; 64
a70: c7 01 movw r24, r14
a72: b6 01 movw r22, r12
a74: 8a d1 rcall .+788 ; 0xd8a <__gesf2>
a76: 61 e0 ldi r22, 0x01 ; 1
a78: 18 16 cp r1, r24
a7a: 14 f4 brge .+4 ; 0xa80 <__DATA_REGION_LENGTH__+0x280>
a7c: 87 e0 ldi r24, 0x07 ; 7
a7e: ef cf rjmp .-34 ; 0xa5e <__DATA_REGION_LENGTH__+0x25e>
a80: 88 e0 ldi r24, 0x08 ; 8
a82: ed cf rjmp .-38 ; 0xa5e <__DATA_REGION_LENGTH__+0x25e>
00000a84 <__subsf3>:
__subsf3():
a84: 50 58 subi r21, 0x80 ; 128
00000a86 <__addsf3>:
/Users/gokul/Documents/Codex/2026-09-09/is-t/outputs/acoustic-guitar-tuner/firmware/acoustic_tuner_attiny1616/acoustic_tuner_attiny1616.ino:81
else digitalWrite(TUNE_LED, HIGH);
a86: bb 27 eor r27, r27
a88: aa 27 eor r26, r26
a8a: 0e d0 rcall .+28 ; 0xaa8 <__addsf3x>
a8c: 44 c1 rjmp .+648 ; 0xd16 <__fp_round>
__addsf3():
a8e: 35 d1 rcall .+618 ; 0xcfa <__fp_pscA>
a90: 30 f0 brcs .+12 ; 0xa9e <__addsf3+0x18>
a92: 3a d1 rcall .+628 ; 0xd08 <__fp_pscB>
a94: 20 f0 brcs .+8 ; 0xa9e <__addsf3+0x18>
a96: 31 f4 brne .+12 ; 0xaa4 <__addsf3+0x1e>
a98: 9f 3f cpi r25, 0xFF ; 255
a9a: 11 f4 brne .+4 ; 0xaa0 <__addsf3+0x1a>
a9c: 1e f4 brtc .+6 ; 0xaa4 <__addsf3+0x1e>
a9e: 2a c1 rjmp .+596 ; 0xcf4 <__fp_nan>
aa0: 0e f4 brtc .+2 ; 0xaa4 <__addsf3+0x1e>
aa2: e0 95 com r30
aa4: e7 fb bst r30, 7
aa6: 20 c1 rjmp .+576 ; 0xce8 <__fp_inf>
00000aa8 <__addsf3x>:
__addsf3x():
aa8: e9 2f mov r30, r25
aaa: 46 d1 rcall .+652 ; 0xd38 <__fp_split3>
aac: 80 f3 brcs .-32 ; 0xa8e <__addsf3+0x8>
aae: ba 17 cp r27, r26
ab0: 62 07 cpc r22, r18
ab2: 73 07 cpc r23, r19
ab4: 84 07 cpc r24, r20
ab6: 95 07 cpc r25, r21
ab8: 18 f0 brcs .+6 ; 0xac0 <__addsf3x+0x18>
aba: 71 f4 brne .+28 ; 0xad8 <__addsf3x+0x30>
abc: 9e f5 brtc .+102 ; 0xb24 <__addsf3x+0x7c>
abe: 5e c1 rjmp .+700 ; 0xd7c <__fp_zero>
ac0: 0e f4 brtc .+2 ; 0xac4 <__addsf3x+0x1c>
ac2: e0 95 com r30
ac4: 0b 2e mov r0, r27
ac6: ba 2f mov r27, r26
ac8: a0 2d mov r26, r0
aca: 0b 01 movw r0, r22
acc: b9 01 movw r22, r18
ace: 90 01 movw r18, r0
ad0: 0c 01 movw r0, r24
ad2: ca 01 movw r24, r20
ad4: a0 01 movw r20, r0
ad6: 11 24 eor r1, r1
ad8: ff 27 eor r31, r31
ada: 59 1b sub r21, r25
adc: 99 f0 breq .+38 ; 0xb04 <__addsf3x+0x5c>
ade: 59 3f cpi r21, 0xF9 ; 249
ae0: 50 f4 brcc .+20 ; 0xaf6 <__addsf3x+0x4e>
ae2: 50 3e cpi r21, 0xE0 ; 224
ae4: 68 f1 brcs .+90 ; 0xb40 <__addsf3x+0x98>
ae6: 1a 16 cp r1, r26
ae8: f0 40 sbci r31, 0x00 ; 0
aea: a2 2f mov r26, r18
aec: 23 2f mov r18, r19
aee: 34 2f mov r19, r20
af0: 44 27 eor r20, r20
af2: 58 5f subi r21, 0xF8 ; 248
af4: f3 cf rjmp .-26 ; 0xadc <__addsf3x+0x34>
af6: 46 95 lsr r20
af8: 37 95 ror r19
afa: 27 95 ror r18
afc: a7 95 ror r26
afe: f0 40 sbci r31, 0x00 ; 0
b00: 53 95 inc r21
b02: c9 f7 brne .-14 ; 0xaf6 <__addsf3x+0x4e>
b04: 7e f4 brtc .+30 ; 0xb24 <__addsf3x+0x7c>
b06: 1f 16 cp r1, r31
b08: ba 0b sbc r27, r26
b0a: 62 0b sbc r22, r18
b0c: 73 0b sbc r23, r19
b0e: 84 0b sbc r24, r20
b10: ba f0 brmi .+46 ; 0xb40 <__addsf3x+0x98>
b12: 91 50 subi r25, 0x01 ; 1
b14: a1 f0 breq .+40 ; 0xb3e <__addsf3x+0x96>
b16: ff 0f add r31, r31
b18: bb 1f adc r27, r27
b1a: 66 1f adc r22, r22
b1c: 77 1f adc r23, r23
b1e: 88 1f adc r24, r24
b20: c2 f7 brpl .-16 ; 0xb12 <__addsf3x+0x6a>
b22: 0e c0 rjmp .+28 ; 0xb40 <__addsf3x+0x98>
b24: ba 0f add r27, r26
b26: 62 1f adc r22, r18
b28: 73 1f adc r23, r19
b2a: 84 1f adc r24, r20
b2c: 48 f4 brcc .+18 ; 0xb40 <__addsf3x+0x98>
b2e: 87 95 ror r24
b30: 77 95 ror r23
b32: 67 95 ror r22
b34: b7 95 ror r27
b36: f7 95 ror r31
b38: 9e 3f cpi r25, 0xFE ; 254
b3a: 08 f0 brcs .+2 ; 0xb3e <__addsf3x+0x96>
b3c: b3 cf rjmp .-154 ; 0xaa4 <__addsf3+0x1e>
b3e: 93 95 inc r25
b40: 88 0f add r24, r24
b42: 08 f0 brcs .+2 ; 0xb46 <__addsf3x+0x9e>
b44: 99 27 eor r25, r25
b46: ee 0f add r30, r30
b48: 97 95 ror r25
b4a: 87 95 ror r24
b4c: 08 95 ret
00000b4e <__cmpsf2>:
b4e: a8 d0 rcall .+336 ; 0xca0 <__fp_cmp>
b50: 08 f4 brcc .+2 ; 0xb54 <__cmpsf2+0x6>
b52: 81 e0 ldi r24, 0x01 ; 1
b54: 08 95 ret
00000b56 <__divsf3>:
b56: 0c d0 rcall .+24 ; 0xb70 <__divsf3x>
b58: de c0 rjmp .+444 ; 0xd16 <__fp_round>
b5a: d6 d0 rcall .+428 ; 0xd08 <__fp_pscB>
b5c: 40 f0 brcs .+16 ; 0xb6e <__divsf3+0x18>
b5e: cd d0 rcall .+410 ; 0xcfa <__fp_pscA>
b60: 30 f0 brcs .+12 ; 0xb6e <__divsf3+0x18>
b62: 21 f4 brne .+8 ; 0xb6c <__divsf3+0x16>
b64: 5f 3f cpi r21, 0xFF ; 255
b66: 19 f0 breq .+6 ; 0xb6e <__divsf3+0x18>
b68: bf c0 rjmp .+382 ; 0xce8 <__fp_inf>
b6a: 51 11 cpse r21, r1
b6c: 08 c1 rjmp .+528 ; 0xd7e <__fp_szero>
b6e: c2 c0 rjmp .+388 ; 0xcf4 <__fp_nan>
00000b70 <__divsf3x>:
b70: e3 d0 rcall .+454 ; 0xd38 <__fp_split3>
b72: 98 f3 brcs .-26 ; 0xb5a <__divsf3+0x4>
00000b74 <__divsf3_pse>:
__divsf3_pse():
b74: 99 23 and r25, r25
b76: c9 f3 breq .-14 ; 0xb6a <__divsf3+0x14>
b78: 55 23 and r21, r21
b7a: b1 f3 breq .-20 ; 0xb68 <__divsf3+0x12>
b7c: 95 1b sub r25, r21
b7e: 55 0b sbc r21, r21
b80: bb 27 eor r27, r27
b82: aa 27 eor r26, r26
b84: 62 17 cp r22, r18
b86: 73 07 cpc r23, r19
b88: 84 07 cpc r24, r20
b8a: 38 f0 brcs .+14 ; 0xb9a <__divsf3_pse+0x26>
b8c: 9f 5f subi r25, 0xFF ; 255
b8e: 5f 4f sbci r21, 0xFF ; 255
b90: 22 0f add r18, r18
b92: 33 1f adc r19, r19
b94: 44 1f adc r20, r20
b96: aa 1f adc r26, r26
b98: a9 f3 breq .-22 ; 0xb84 <__divsf3_pse+0x10>
b9a: 33 d0 rcall .+102 ; 0xc02 <__divsf3_pse+0x8e>
b9c: 0e 2e mov r0, r30
b9e: 3a f0 brmi .+14 ; 0xbae <__divsf3_pse+0x3a>
ba0: e0 e8 ldi r30, 0x80 ; 128
ba2: 30 d0 rcall .+96 ; 0xc04 <__divsf3_pse+0x90>
ba4: 91 50 subi r25, 0x01 ; 1
ba6: 50 40 sbci r21, 0x00 ; 0
ba8: e6 95 lsr r30
baa: 00 1c adc r0, r0
bac: ca f7 brpl .-14 ; 0xba0 <__divsf3_pse+0x2c>
bae: 29 d0 rcall .+82 ; 0xc02 <__divsf3_pse+0x8e>
bb0: fe 2f mov r31, r30
bb2: 27 d0 rcall .+78 ; 0xc02 <__divsf3_pse+0x8e>
bb4: 66 0f add r22, r22
bb6: 77 1f adc r23, r23
bb8: 88 1f adc r24, r24
bba: bb 1f adc r27, r27
bbc: 26 17 cp r18, r22
bbe: 37 07 cpc r19, r23
bc0: 48 07 cpc r20, r24
bc2: ab 07 cpc r26, r27
bc4: b0 e8 ldi r27, 0x80 ; 128
bc6: 09 f0 breq .+2 ; 0xbca <__divsf3_pse+0x56>
bc8: bb 0b sbc r27, r27
bca: 80 2d mov r24, r0
bcc: bf 01 movw r22, r30
bce: ff 27 eor r31, r31
bd0: 93 58 subi r25, 0x83 ; 131
bd2: 5f 4f sbci r21, 0xFF ; 255
bd4: 2a f0 brmi .+10 ; 0xbe0 <__divsf3_pse+0x6c>
bd6: 9e 3f cpi r25, 0xFE ; 254
bd8: 51 05 cpc r21, r1
bda: 68 f0 brcs .+26 ; 0xbf6 <__divsf3_pse+0x82>
bdc: 85 c0 rjmp .+266 ; 0xce8 <__fp_inf>
bde: cf c0 rjmp .+414 ; 0xd7e <__fp_szero>
be0: 5f 3f cpi r21, 0xFF ; 255
be2: ec f3 brlt .-6 ; 0xbde <__divsf3_pse+0x6a>
be4: 98 3e cpi r25, 0xE8 ; 232
be6: dc f3 brlt .-10 ; 0xbde <__divsf3_pse+0x6a>
be8: 86 95 lsr r24
bea: 77 95 ror r23
bec: 67 95 ror r22
bee: b7 95 ror r27
bf0: f7 95 ror r31
bf2: 9f 5f subi r25, 0xFF ; 255
bf4: c9 f7 brne .-14 ; 0xbe8 <__divsf3_pse+0x74>
bf6: 88 0f add r24, r24
bf8: 91 1d adc r25, r1
bfa: 96 95 lsr r25
bfc: 87 95 ror r24
bfe: 97 f9 bld r25, 7
c00: 08 95 ret
c02: e1 e0 ldi r30, 0x01 ; 1
c04: 66 0f add r22, r22
c06: 77 1f adc r23, r23
c08: 88 1f adc r24, r24
c0a: bb 1f adc r27, r27
c0c: 62 17 cp r22, r18
c0e: 73 07 cpc r23, r19
c10: 84 07 cpc r24, r20
c12: ba 07 cpc r27, r26
c14: 20 f0 brcs .+8 ; 0xc1e <__divsf3_pse+0xaa>
c16: 62 1b sub r22, r18
c18: 73 0b sbc r23, r19
c1a: 84 0b sbc r24, r20
c1c: ba 0b sbc r27, r26
c1e: ee 1f adc r30, r30
c20: 88 f7 brcc .-30 ; 0xc04 <__divsf3_pse+0x90>
c22: e0 95 com r30
c24: 08 95 ret
00000c26 <__floatunsisf>:
__floatunsisf():
c26: e8 94 clt
c28: 09 c0 rjmp .+18 ; 0xc3c <__floatsisf+0x12>
00000c2a <__floatsisf>:
c2a: 97 fb bst r25, 7
c2c: 3e f4 brtc .+14 ; 0xc3c <__floatsisf+0x12>
c2e: 90 95 com r25
c30: 80 95 com r24
c32: 70 95 com r23
c34: 61 95 neg r22
c36: 7f 4f sbci r23, 0xFF ; 255
c38: 8f 4f sbci r24, 0xFF ; 255
c3a: 9f 4f sbci r25, 0xFF ; 255
c3c: 99 23 and r25, r25
c3e: a9 f0 breq .+42 ; 0xc6a <__floatsisf+0x40>
c40: f9 2f mov r31, r25
c42: 96 e9 ldi r25, 0x96 ; 150
c44: bb 27 eor r27, r27
c46: 93 95 inc r25
c48: f6 95 lsr r31
c4a: 87 95 ror r24
c4c: 77 95 ror r23
c4e: 67 95 ror r22
c50: b7 95 ror r27
c52: f1 11 cpse r31, r1
c54: f8 cf rjmp .-16 ; 0xc46 <__floatsisf+0x1c>
c56: fa f4 brpl .+62 ; 0xc96 <__floatsisf+0x6c>
c58: bb 0f add r27, r27
c5a: 11 f4 brne .+4 ; 0xc60 <__floatsisf+0x36>
c5c: 60 ff sbrs r22, 0
c5e: 1b c0 rjmp .+54 ; 0xc96 <__floatsisf+0x6c>
c60: 6f 5f subi r22, 0xFF ; 255
c62: 7f 4f sbci r23, 0xFF ; 255
c64: 8f 4f sbci r24, 0xFF ; 255
c66: 9f 4f sbci r25, 0xFF ; 255
c68: 16 c0 rjmp .+44 ; 0xc96 <__floatsisf+0x6c>
c6a: 88 23 and r24, r24
c6c: 11 f0 breq .+4 ; 0xc72 <__floatsisf+0x48>
c6e: 96 e9 ldi r25, 0x96 ; 150
c70: 11 c0 rjmp .+34 ; 0xc94 <__floatsisf+0x6a>
c72: 77 23 and r23, r23
c74: 21 f0 breq .+8 ; 0xc7e <__floatsisf+0x54>
c76: 9e e8 ldi r25, 0x8E ; 142
c78: 87 2f mov r24, r23
c7a: 76 2f mov r23, r22
c7c: 05 c0 rjmp .+10 ; 0xc88 <__floatsisf+0x5e>
c7e: 66 23 and r22, r22
c80: 71 f0 breq .+28 ; 0xc9e <__floatsisf+0x74>
c82: 96 e8 ldi r25, 0x86 ; 134
c84: 86 2f mov r24, r22
c86: 70 e0 ldi r23, 0x00 ; 0
c88: 60 e0 ldi r22, 0x00 ; 0
c8a: 2a f0 brmi .+10 ; 0xc96 <__floatsisf+0x6c>
c8c: 9a 95 dec r25
c8e: 66 0f add r22, r22
c90: 77 1f adc r23, r23
c92: 88 1f adc r24, r24
c94: da f7 brpl .-10 ; 0xc8c <__floatsisf+0x62>
c96: 88 0f add r24, r24
c98: 96 95 lsr r25
c9a: 87 95 ror r24
c9c: 97 f9 bld r25, 7
c9e: 08 95 ret
00000ca0 <__fp_cmp>:
__fp_cmp():
ca0: 99 0f add r25, r25
ca2: 00 08 sbc r0, r0
ca4: 55 0f add r21, r21
ca6: aa 0b sbc r26, r26
ca8: e0 e8 ldi r30, 0x80 ; 128
caa: fe ef ldi r31, 0xFE ; 254
cac: 16 16 cp r1, r22
cae: 17 06 cpc r1, r23
cb0: e8 07 cpc r30, r24
cb2: f9 07 cpc r31, r25
cb4: c0 f0 brcs .+48 ; 0xce6 <__fp_cmp+0x46>
cb6: 12 16 cp r1, r18
cb8: 13 06 cpc r1, r19
cba: e4 07 cpc r30, r20
cbc: f5 07 cpc r31, r21
cbe: 98 f0 brcs .+38 ; 0xce6 <__fp_cmp+0x46>
cc0: 62 1b sub r22, r18
cc2: 73 0b sbc r23, r19
cc4: 84 0b sbc r24, r20
cc6: 95 0b sbc r25, r21
cc8: 39 f4 brne .+14 ; 0xcd8 <__fp_cmp+0x38>
cca: 0a 26 eor r0, r26
ccc: 61 f0 breq .+24 ; 0xce6 <__fp_cmp+0x46>
cce: 23 2b or r18, r19
cd0: 24 2b or r18, r20
cd2: 25 2b or r18, r21
cd4: 21 f4 brne .+8 ; 0xcde <__fp_cmp+0x3e>
cd6: 08 95 ret
cd8: 0a 26 eor r0, r26
cda: 09 f4 brne .+2 ; 0xcde <__fp_cmp+0x3e>
cdc: a1 40 sbci r26, 0x01 ; 1
cde: a6 95 lsr r26
ce0: 8f ef ldi r24, 0xFF ; 255
ce2: 81 1d adc r24, r1
ce4: 81 1d adc r24, r1
ce6: 08 95 ret
00000ce8 <__fp_inf>:
__fp_inf():
ce8: 97 f9 bld r25, 7
cea: 9f 67 ori r25, 0x7F ; 127
cec: 80 e8 ldi r24, 0x80 ; 128
cee: 70 e0 ldi r23, 0x00 ; 0
cf0: 60 e0 ldi r22, 0x00 ; 0
cf2: 08 95 ret
00000cf4 <__fp_nan>:
__fp_nan():
cf4: 9f ef ldi r25, 0xFF ; 255
cf6: 80 ec ldi r24, 0xC0 ; 192
cf8: 08 95 ret
00000cfa <__fp_pscA>:
__fp_pscA():
cfa: 00 24 eor r0, r0
cfc: 0a 94 dec r0
cfe: 16 16 cp r1, r22
d00: 17 06 cpc r1, r23
d02: 18 06 cpc r1, r24
d04: 09 06 cpc r0, r25
d06: 08 95 ret
00000d08 <__fp_pscB>:
__fp_pscB():
d08: 00 24 eor r0, r0
d0a: 0a 94 dec r0
d0c: 12 16 cp r1, r18
d0e: 13 06 cpc r1, r19
d10: 14 06 cpc r1, r20
d12: 05 06 cpc r0, r21
d14: 08 95 ret
00000d16 <__fp_round>:
__fp_round():
d16: 09 2e mov r0, r25
d18: 03 94 inc r0
d1a: 00 0c add r0, r0
d1c: 11 f4 brne .+4 ; 0xd22 <__fp_round+0xc>
d1e: 88 23 and r24, r24
d20: 52 f0 brmi .+20 ; 0xd36 <__fp_round+0x20>
d22: bb 0f add r27, r27
d24: 40 f4 brcc .+16 ; 0xd36 <__fp_round+0x20>
d26: bf 2b or r27, r31
d28: 11 f4 brne .+4 ; 0xd2e <__fp_round+0x18>
d2a: 60 ff sbrs r22, 0
d2c: 04 c0 rjmp .+8 ; 0xd36 <__fp_round+0x20>
d2e: 6f 5f subi r22, 0xFF ; 255
d30: 7f 4f sbci r23, 0xFF ; 255
d32: 8f 4f sbci r24, 0xFF ; 255
d34: 9f 4f sbci r25, 0xFF ; 255
d36: 08 95 ret
00000d38 <__fp_split3>:
__fp_split3():
d38: 57 fd sbrc r21, 7
d3a: 90 58 subi r25, 0x80 ; 128
d3c: 44 0f add r20, r20
d3e: 55 1f adc r21, r21
d40: 59 f0 breq .+22 ; 0xd58 <__fp_splitA+0x10>
d42: 5f 3f cpi r21, 0xFF ; 255
d44: 71 f0 breq .+28 ; 0xd62 <__fp_splitA+0x1a>
d46: 47 95 ror r20
00000d48 <__fp_splitA>:
d48: 88 0f add r24, r24
d4a: 97 fb bst r25, 7
d4c: 99 1f adc r25, r25
d4e: 61 f0 breq .+24 ; 0xd68 <__fp_splitA+0x20>
d50: 9f 3f cpi r25, 0xFF ; 255
d52: 79 f0 breq .+30 ; 0xd72 <__fp_splitA+0x2a>
d54: 87 95 ror r24
d56: 08 95 ret
d58: 12 16 cp r1, r18
d5a: 13 06 cpc r1, r19
d5c: 14 06 cpc r1, r20
d5e: 55 1f adc r21, r21
d60: f2 cf rjmp .-28 ; 0xd46 <__fp_split3+0xe>
d62: 46 95 lsr r20
d64: f1 df rcall .-30 ; 0xd48 <__fp_splitA>
d66: 08 c0 rjmp .+16 ; 0xd78 <__fp_splitA+0x30>
d68: 16 16 cp r1, r22
d6a: 17 06 cpc r1, r23
d6c: 18 06 cpc r1, r24
d6e: 99 1f adc r25, r25
d70: f1 cf rjmp .-30 ; 0xd54 <__fp_splitA+0xc>
d72: 86 95 lsr r24
d74: 71 05 cpc r23, r1
d76: 61 05 cpc r22, r1
d78: 08 94 sec
d7a: 08 95 ret
00000d7c <__fp_zero>:
__fp_zero():
d7c: e8 94 clt
00000d7e <__fp_szero>:
d7e: bb 27 eor r27, r27
d80: 66 27 eor r22, r22
d82: 77 27 eor r23, r23
d84: cb 01 movw r24, r22
d86: 97 f9 bld r25, 7
d88: 08 95 ret
00000d8a <__gesf2>:
__gesf2():
d8a: 8a df rcall .-236 ; 0xca0 <__fp_cmp>
d8c: 08 f4 brcc .+2 ; 0xd90 <__gesf2+0x6>
d8e: 8f ef ldi r24, 0xFF ; 255
d90: 08 95 ret
d92: 0e f0 brts .+2 ; 0xd96 <__gesf2+0xc>
d94: a6 c0 rjmp .+332 ; 0xee2 <__fp_mpack>
d96: ae cf rjmp .-164 ; 0xcf4 <__fp_nan>
d98: 68 94 set
d9a: a6 cf rjmp .-180 ; 0xce8 <__fp_inf>
00000d9c <log>:
log():
d9c: d5 df rcall .-86 ; 0xd48 <__fp_splitA>
d9e: c8 f3 brcs .-14 ; 0xd92 <__gesf2+0x8>
da0: 99 23 and r25, r25
da2: d1 f3 breq .-12 ; 0xd98 <__gesf2+0xe>
da4: c6 f3 brts .-16 ; 0xd96 <__gesf2+0xc>
da6: df 93 push r29
da8: cf 93 push r28
daa: 1f 93 push r17
dac: 0f 93 push r16
dae: ff 92 push r15
db0: c9 2f mov r28, r25
db2: dd 27 eor r29, r29
db4: 88 23 and r24, r24
db6: 2a f0 brmi .+10 ; 0xdc2 <log+0x26>
db8: 21 97 sbiw r28, 0x01 ; 1
dba: 66 0f add r22, r22
dbc: 77 1f adc r23, r23
dbe: 88 1f adc r24, r24
dc0: da f7 brpl .-10 ; 0xdb8 <log+0x1c>
dc2: 20 e0 ldi r18, 0x00 ; 0
dc4: 30 e0 ldi r19, 0x00 ; 0
dc6: 40 e8 ldi r20, 0x80 ; 128
dc8: 5f eb ldi r21, 0xBF ; 191
dca: 9f e3 ldi r25, 0x3F ; 63
dcc: 88 39 cpi r24, 0x98 ; 152
dce: 20 f0 brcs .+8 ; 0xdd8 <log+0x3c>
dd0: 80 3e cpi r24, 0xE0 ; 224
dd2: 30 f0 brcs .+12 ; 0xde0 <log+0x44>
dd4: 21 96 adiw r28, 0x01 ; 1
dd6: 8f 77 andi r24, 0x7F ; 127
dd8: 56 de rcall .-852 ; 0xa86 <__addsf3>
dda: ec e7 ldi r30, 0x7C ; 124
ddc: f0 e0 ldi r31, 0x00 ; 0
dde: 03 c0 rjmp .+6 ; 0xde6 <log+0x4a>
de0: 52 de rcall .-860 ; 0xa86 <__addsf3>
de2: e9 ea ldi r30, 0xA9 ; 169
de4: f0 e0 ldi r31, 0x00 ; 0
de6: 8b d0 rcall .+278 ; 0xefe <__fp_powser>
de8: 8b 01 movw r16, r22
dea: be 01 movw r22, r28
dec: ec 01 movw r28, r24
dee: fb 2e mov r15, r27
df0: 6f 57 subi r22, 0x7F ; 127
df2: 71 09 sbc r23, r1
df4: 75 95 asr r23
df6: 77 1f adc r23, r23
df8: 88 0b sbc r24, r24
dfa: 99 0b sbc r25, r25
dfc: 16 df rcall .-468 ; 0xc2a <__floatsisf>
dfe: 28 e1 ldi r18, 0x18 ; 24
e00: 32 e7 ldi r19, 0x72 ; 114
e02: 41 e3 ldi r20, 0x31 ; 49
e04: 5f e3 ldi r21, 0x3F ; 63
e06: 16 d0 rcall .+44 ; 0xe34 <__mulsf3x>
e08: af 2d mov r26, r15
e0a: 98 01 movw r18, r16
e0c: ae 01 movw r20, r28
e0e: ff 90 pop r15
e10: 0f 91 pop r16
e12: 1f 91 pop r17
e14: cf 91 pop r28
e16: df 91 pop r29
e18: 47 de rcall .-882 ; 0xaa8 <__addsf3x>
e1a: 7d cf rjmp .-262 ; 0xd16 <__fp_round>
00000e1c <__mulsf3>:
e1c: 0b d0 rcall .+22 ; 0xe34 <__mulsf3x>
e1e: 7b cf rjmp .-266 ; 0xd16 <__fp_round>
e20: 6c df rcall .-296 ; 0xcfa <__fp_pscA>
e22: 28 f0 brcs .+10 ; 0xe2e <__mulsf3+0x12>
e24: 71 df rcall .-286 ; 0xd08 <__fp_pscB>
e26: 18 f0 brcs .+6 ; 0xe2e <__mulsf3+0x12>
e28: 95 23 and r25, r21
e2a: 09 f0 breq .+2 ; 0xe2e <__mulsf3+0x12>
e2c: 5d cf rjmp .-326 ; 0xce8 <__fp_inf>
e2e: 62 cf rjmp .-316 ; 0xcf4 <__fp_nan>
e30: 11 24 eor r1, r1
e32: a5 cf rjmp .-182 ; 0xd7e <__fp_szero>
00000e34 <__mulsf3x>:
e34: 81 df rcall .-254 ; 0xd38 <__fp_split3>
e36: a0 f3 brcs .-24 ; 0xe20 <__mulsf3+0x4>
00000e38 <__mulsf3_pse>:
e38: 95 9f mul r25, r21
e3a: d1 f3 breq .-12 ; 0xe30 <__mulsf3+0x14>
__mulsf3_pse():
e3c: 95 0f add r25, r21
e3e: 50 e0 ldi r21, 0x00 ; 0
e40: 55 1f adc r21, r21
e42: 62 9f mul r22, r18
e44: f0 01 movw r30, r0
e46: 72 9f mul r23, r18
e48: bb 27 eor r27, r27
e4a: f0 0d add r31, r0
e4c: b1 1d adc r27, r1
e4e: 63 9f mul r22, r19
e50: aa 27 eor r26, r26
e52: f0 0d add r31, r0
e54: b1 1d adc r27, r1
e56: aa 1f adc r26, r26
e58: 64 9f mul r22, r20
e5a: 66 27 eor r22, r22
e5c: b0 0d add r27, r0
e5e: a1 1d adc r26, r1
e60: 66 1f adc r22, r22
e62: 82 9f mul r24, r18
e64: 22 27 eor r18, r18
e66: b0 0d add r27, r0
e68: a1 1d adc r26, r1
e6a: 62 1f adc r22, r18
e6c: 73 9f mul r23, r19
e6e: b0 0d add r27, r0
e70: a1 1d adc r26, r1
e72: 62 1f adc r22, r18
e74: 83 9f mul r24, r19
e76: a0 0d add r26, r0
e78: 61 1d adc r22, r1
e7a: 22 1f adc r18, r18
e7c: 74 9f mul r23, r20
e7e: 33 27 eor r19, r19
e80: a0 0d add r26, r0
e82: 61 1d adc r22, r1
e84: 23 1f adc r18, r19
e86: 84 9f mul r24, r20
e88: 60 0d add r22, r0
e8a: 21 1d adc r18, r1
e8c: 82 2f mov r24, r18
e8e: 76 2f mov r23, r22
e90: 6a 2f mov r22, r26
e92: 11 24 eor r1, r1
e94: 9f 57 subi r25, 0x7F ; 127
e96: 50 40 sbci r21, 0x00 ; 0
e98: 8a f0 brmi .+34 ; 0xebc <__mulsf3_pse+0x84>
e9a: e1 f0 breq .+56 ; 0xed4 <__mulsf3_pse+0x9c>
e9c: 88 23 and r24, r24
e9e: 4a f0 brmi .+18 ; 0xeb2 <__mulsf3_pse+0x7a>
ea0: ee 0f add r30, r30
ea2: ff 1f adc r31, r31
ea4: bb 1f adc r27, r27
ea6: 66 1f adc r22, r22
ea8: 77 1f adc r23, r23
eaa: 88 1f adc r24, r24
eac: 91 50 subi r25, 0x01 ; 1
eae: 50 40 sbci r21, 0x00 ; 0
eb0: a9 f7 brne .-22 ; 0xe9c <__mulsf3_pse+0x64>
eb2: 9e 3f cpi r25, 0xFE ; 254
eb4: 51 05 cpc r21, r1
eb6: 70 f0 brcs .+28 ; 0xed4 <__mulsf3_pse+0x9c>
eb8: 17 cf rjmp .-466 ; 0xce8 <__fp_inf>
eba: 61 cf rjmp .-318 ; 0xd7e <__fp_szero>
ebc: 5f 3f cpi r21, 0xFF ; 255
ebe: ec f3 brlt .-6 ; 0xeba <__mulsf3_pse+0x82>
ec0: 98 3e cpi r25, 0xE8 ; 232
ec2: dc f3 brlt .-10 ; 0xeba <__mulsf3_pse+0x82>
ec4: 86 95 lsr r24
ec6: 77 95 ror r23
ec8: 67 95 ror r22
eca: b7 95 ror r27
ecc: f7 95 ror r31
ece: e7 95 ror r30
ed0: 9f 5f subi r25, 0xFF ; 255
ed2: c1 f7 brne .-16 ; 0xec4 <__mulsf3_pse+0x8c>
ed4: fe 2b or r31, r30
ed6: 88 0f add r24, r24
ed8: 91 1d adc r25, r1
eda: 96 95 lsr r25
edc: 87 95 ror r24
ede: 97 f9 bld r25, 7
ee0: 08 95 ret
00000ee2 <__fp_mpack>:
__fp_mpack():
ee2: 9f 3f cpi r25, 0xFF ; 255
ee4: 31 f0 breq .+12 ; 0xef2 <__fp_mpack_finite+0xc>
00000ee6 <__fp_mpack_finite>:
ee6: 91 50 subi r25, 0x01 ; 1
ee8: 20 f4 brcc .+8 ; 0xef2 <__fp_mpack_finite+0xc>
eea: 87 95 ror r24
eec: 77 95 ror r23
eee: 67 95 ror r22
ef0: b7 95 ror r27
ef2: 88 0f add r24, r24
ef4: 91 1d adc r25, r1
ef6: 96 95 lsr r25
ef8: 87 95 ror r24
efa: 97 f9 bld r25, 7
efc: 08 95 ret
00000efe <__fp_powser>:
__fp_powser():
efe: df 93 push r29
f00: cf 93 push r28
f02: 1f 93 push r17
f04: 0f 93 push r16
f06: ff 92 push r15
f08: ef 92 push r14
f0a: df 92 push r13
f0c: 7b 01 movw r14, r22
f0e: 8c 01 movw r16, r24
f10: 68 94 set
f12: 05 c0 rjmp .+10 ; 0xf1e <__fp_powser+0x20>
f14: da 2e mov r13, r26
f16: ef 01 movw r28, r30
f18: 8d df rcall .-230 ; 0xe34 <__mulsf3x>
f1a: fe 01 movw r30, r28
f1c: e8 94 clt
f1e: a5 91 lpm r26, Z+
f20: 25 91 lpm r18, Z+
f22: 35 91 lpm r19, Z+
f24: 45 91 lpm r20, Z+
f26: 55 91 lpm r21, Z+
f28: ae f3 brts .-22 ; 0xf14 <__fp_powser+0x16>
f2a: ef 01 movw r28, r30
f2c: bd dd rcall .-1158 ; 0xaa8 <__addsf3x>
f2e: fe 01 movw r30, r28
f30: 97 01 movw r18, r14
f32: a8 01 movw r20, r16
f34: da 94 dec r13
f36: 79 f7 brne .-34 ; 0xf16 <__fp_powser+0x18>
f38: df 90 pop r13
f3a: ef 90 pop r14
f3c: ff 90 pop r15
f3e: 0f 91 pop r16
f40: 1f 91 pop r17
f42: cf 91 pop r28
f44: df 91 pop r29
f46: 08 95 ret
00000f48 <__divmodsi4>:
__divmodsi4():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1686
f48: 05 2e mov r0, r21
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1687
f4a: 97 fb bst r25, 7
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1688
f4c: 16 f4 brtc .+4 ; 0xf52 <__divmodsi4+0xa>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1689
f4e: 00 94 com r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1690
f50: 0f d0 rcall .+30 ; 0xf70 <__negsi2>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1692
f52: 57 fd sbrc r21, 7
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1694
f54: 05 d0 rcall .+10 ; 0xf60 <__divmodsi4_neg2>
f56: 39 d0 rcall .+114 ; 0xfca <__udivmodsi4>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1695
f58: 07 fc sbrc r0, 7
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1697
f5a: 02 d0 rcall .+4 ; 0xf60 <__divmodsi4_neg2>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1698
f5c: 46 f4 brtc .+16 ; 0xf6e <__divmodsi4_exit>
f5e: 08 c0 rjmp .+16 ; 0xf70 <__negsi2>
00000f60 <__divmodsi4_neg2>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1701
f60: 50 95 com r21
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1702
f62: 40 95 com r20
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1703
f64: 30 95 com r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1704
f66: 21 95 neg r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1705
f68: 3f 4f sbci r19, 0xFF ; 255
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1706
f6a: 4f 4f sbci r20, 0xFF ; 255
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1707
f6c: 5f 4f sbci r21, 0xFF ; 255
00000f6e <__divmodsi4_exit>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1709
f6e: 08 95 ret
00000f70 <__negsi2>:
__negsi2():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1718
f70: 90 95 com r25
f72: 80 95 com r24
f74: 70 95 com r23
f76: 61 95 neg r22
f78: 7f 4f sbci r23, 0xFF ; 255
f7a: 8f 4f sbci r24, 0xFF ; 255
f7c: 9f 4f sbci r25, 0xFF ; 255
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1719
f7e: 08 95 ret
00000f80 <__mulhisi3>:
__mulhisi3():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:529
f80: 05 d0 rcall .+10 ; 0xf8c <__umulhisi3>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:531
f82: 33 23 and r19, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:532
f84: 12 f4 brpl .+4 ; 0xf8a <__mulhisi3+0xa>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:533
f86: 8a 1b sub r24, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:536
f88: 9b 0b sbc r25, r27
f8a: 10 c0 rjmp .+32 ; 0xfac <__usmulhisi3_tail>
00000f8c <__umulhisi3>:
__umulhisi3():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:564
f8c: a2 9f mul r26, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:565
f8e: b0 01 movw r22, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:566
f90: b3 9f mul r27, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:567
f92: c0 01 movw r24, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:568
f94: a3 9f mul r26, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:573
f96: 70 0d add r23, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:574
f98: 81 1d adc r24, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:575
f9a: 11 24 eor r1, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:576
f9c: 91 1d adc r25, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:580
f9e: b2 9f mul r27, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:581
fa0: 70 0d add r23, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:582
fa2: 81 1d adc r24, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:583
fa4: 11 24 eor r1, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:584
fa6: 91 1d adc r25, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:585
fa8: 08 95 ret
00000faa <__usmulhisi3>:
__usmulhisi3():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:545
faa: f0 df rcall .-32 ; 0xf8c <__umulhisi3>
00000fac <__usmulhisi3_tail>:
__usmulhisi3_tail():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:551
fac: b7 ff sbrs r27, 7
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:552
fae: 08 95 ret
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:553
fb0: 82 1b sub r24, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:554
fb2: 93 0b sbc r25, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:555
fb4: 08 95 ret
00000fb6 <__muluhisi3>:
__muluhisi3():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:626
fb6: ea df rcall .-44 ; 0xf8c <__umulhisi3>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:627
fb8: a5 9f mul r26, r21
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:628
fba: 90 0d add r25, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:629
fbc: b4 9f mul r27, r20
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:630
fbe: 90 0d add r25, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:631
fc0: a4 9f mul r26, r20
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:632
fc2: 80 0d add r24, r0
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:633
fc4: 91 1d adc r25, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:634
fc6: 11 24 eor r1, r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:635
fc8: 08 95 ret
00000fca <__udivmodsi4>:
__udivmodsi4():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1638
fca: a1 e2 ldi r26, 0x21 ; 33
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1639
fcc: 1a 2e mov r1, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1640
fce: aa 1b sub r26, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1641
fd0: bb 1b sub r27, r27
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1642
fd2: fd 01 movw r30, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1644
fd4: 0d c0 rjmp .+26 ; 0xff0 <__udivmodsi4_ep>
00000fd6 <__udivmodsi4_loop>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1646
fd6: aa 1f adc r26, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1647
fd8: bb 1f adc r27, r27
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1648
fda: ee 1f adc r30, r30
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1649
fdc: ff 1f adc r31, r31
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1650
fde: a2 17 cp r26, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1651
fe0: b3 07 cpc r27, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1652
fe2: e4 07 cpc r30, r20
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1653
fe4: f5 07 cpc r31, r21
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1654
fe6: 20 f0 brcs .+8 ; 0xff0 <__udivmodsi4_ep>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1655
fe8: a2 1b sub r26, r18
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1656
fea: b3 0b sbc r27, r19
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1657
fec: e4 0b sbc r30, r20
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1658
fee: f5 0b sbc r31, r21
00000ff0 <__udivmodsi4_ep>:
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1660
ff0: 66 1f adc r22, r22
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1661
ff2: 77 1f adc r23, r23
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1662
ff4: 88 1f adc r24, r24
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1663
ff6: 99 1f adc r25, r25
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1664
ff8: 1a 94 dec r1
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1665
ffa: 69 f7 brne .-38 ; 0xfd6 <__udivmodsi4_loop>
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1667
ffc: 60 95 com r22
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1668
ffe: 70 95 com r23
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1669
1000: 80 95 com r24
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1670
1002: 90 95 com r25
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1672
1004: 9b 01 movw r18, r22
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1674
1006: ac 01 movw r20, r24
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1676
1008: bd 01 movw r22, r26
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1678
100a: cf 01 movw r24, r30
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1680
100c: 08 95 ret
0000100e <_exit>:
exit():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2278
100e: f8 94 cli
00001010 <__stop_program>:
__stop_program():
/home/admin/Arduino/toolchain-avr-special-master/gcc-build/avr/avrxmega3/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2280
1010: ff cf rjmp .-2 ; 0x1010 <__stop_program>