--- /dev/null
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Atmel Studio Solution File, Format Version 11.00
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "halloween_puff", "halloween_puff\halloween_puff.cproj", "{2285C48D-296E-43FD-A7B6-69885F64CFFD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|AVR = Debug|AVR
+ Release|AVR = Release|AVR
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2285C48D-296E-43FD-A7B6-69885F64CFFD}.Debug|AVR.ActiveCfg = Debug|AVR
+ {2285C48D-296E-43FD-A7B6-69885F64CFFD}.Debug|AVR.Build.0 = Debug|AVR
+ {2285C48D-296E-43FD-A7B6-69885F64CFFD}.Release|AVR.ActiveCfg = Release|AVR
+ {2285C48D-296E-43FD-A7B6-69885F64CFFD}.Release|AVR.Build.0 = Release|AVR
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
--- /dev/null
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+SHELL := cmd.exe
+RM := rm -rf
+
+USER_OBJS :=
+
+LIBS :=
+PROJ :=
+
+O_SRCS :=
+C_SRCS :=
+S_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+PREPROCESSING_SRCS :=
+OBJS :=
+OBJS_AS_ARGS :=
+C_DEPS :=
+C_DEPS_AS_ARGS :=
+EXECUTABLES :=
+OUTPUT_FILE_PATH :=
+OUTPUT_FILE_PATH_AS_ARGS :=
+AVR_APP_PATH :=$$$AVR_APP_PATH$$$
+QUOTE := "
+ADDITIONAL_DEPENDENCIES:=
+OUTPUT_FILE_DEP:=
+LIB_DEP:=
+LINKER_SCRIPT_DEP:=
+
+# Every subdirectory with source files must be described here
+SUBDIRS :=
+
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../main.c
+
+
+PREPROCESSING_SRCS +=
+
+
+ASM_SRCS +=
+
+
+OBJS += \
+main.o
+
+OBJS_AS_ARGS += \
+main.o
+
+C_DEPS += \
+main.d
+
+C_DEPS_AS_ARGS += \
+main.d
+
+OUTPUT_FILE_PATH +=halloween_puff.elf
+
+OUTPUT_FILE_PATH_AS_ARGS +=halloween_puff.elf
+
+ADDITIONAL_DEPENDENCIES:=
+
+OUTPUT_FILE_DEP:= ./makedep.mk
+
+LIB_DEP+=
+
+LINKER_SCRIPT_DEP+=
+
+
+# AVR32/GNU C Compiler
+./main.o: .././main.c
+ @echo Building file: $<
+ @echo Invoking: XC8 C Compiler : 2.36
+ $(QUOTE)C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe$(QUOTE) -mcpu=ATmega88P -mdfp="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8" -c -x c -funsigned-char -funsigned-bitfields -mext=cci -D__ATmega88P__ -DDEBUG -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
+ @echo Finished building: $<
+
+
+
+
+
+# AVR32/GNU Preprocessing Assembler
+
+
+
+# AVR32/GNU Assembler
+
+
+
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
+
+$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
+ @echo Building target: $@
+ @echo Invoking: XC8 C Linker : 2.36
+ $(QUOTE)C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -mcpu=ATmega88P -mdfp="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8" -Wl,-Map="halloween_puff.map" -funsigned-char -funsigned-bitfields -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums --memorysummary,memoryfile.xml
+ @echo Finished building target: $@
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "halloween_puff.elf" "halloween_puff.hex"
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "halloween_puff.elf" "halloween_puff.eep" || exit 0
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objdump.exe" -h -S "halloween_puff.elf" > "halloween_puff.lss"
+
+
+
+
+
+
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
+ -$(RM) $(C_DEPS_AS_ARGS)
+ rm -rf "halloween_puff.elf" "halloween_puff.hex" "halloween_puff.eep" "halloween_puff.map" "halloween_puff.usersignatures" "halloween_puff.a" "halloween_puff.lss"
+
\ No newline at end of file
--- /dev/null
+:00000001FF
--- /dev/null
+:100000001CC02DC52CC52BC52AC529C528C527C58B
+:1000100026C525C524C523C522C521C51BC41FC5AA
+:100020001EC51DC51CC51BC51AC51DC318C517C5D2
+:1000300016C515C501000305800011241FBECFEFB2
+:10004000D4E0DEBFCDBFE4E3F0E040E017C0B591FF
+:10005000A59135912591059107FD0CC0959185914C
+:10006000EF01F92FE82F05900D92A217B307D9F7EA
+:10007000FE0104C01D92A217B307E1F7E933F407AC
+:0A00800031F79DD2C9C4F894FFCFF8
+:10008A0042760575B6735572E3705F6FCA6D246C5C
+:10009A006E6AA768D066E964F262EC60D75EB45C07
+:1000AA00825A4358F6559B533451C04E404CB4497A
+:1000BA001D477B44CE41173F573C8D39BA36DF3353
+:1000CA00FC30112E1F2B2728282524221A1F0C1C2E
+:1000DA00F918E215C812AB0F8C0C6B0948062403F9
+:1000EA000000DCFCB8F995F674F355F038ED1EEA19
+:1000FA0007E7F4E3E6E0DCDDD8DAD9D7E1D4EFD1DB
+:02010A0004CF20
+:10010C0046696E64696E6720746F6E6573004B652B
+:10011C00793A2000202020202020202020202000A0
+:09012C0046313A002046323A0047
+:0C0135003132333435363738392A302364
+:100142002F923F924F925F926F927F928F929F92E5
+:10015200AF92BF92CF92DF92EF92FF920F931F93D3
+:10016200CF93DF93CDB7DEB7CF50D1400FB6F8941F
+:10017200DEBF0FBECDBF5C01C45FDE4F79836883F3
+:10018200CC50D140C25FDE4F59834883CE50D1401C
+:1001920080E090E040E050E0BA010CC0FC01EE0FBC
+:1001A200FF1FEA0DFB1D20813181420F531F611D8C
+:1001B200711D01968F3F910589F380F3452F562FCC
+:1001C200672F7727CA5FDE4F59834883C650D140D5
+:1001D200CB5FDE4F1882C550D140DAC0F801EE0F76
+:1001E200FF1FEA0DFB1D80819181A0E0B0E0CA5F94
+:1001F200DE4F28813981C650D140A901330F660BE9
+:10020200770B841B950BA60BB70BAC01BD0122F437
+:10021200495F5F4F6F4F7F4F6A017B01689412F80D
+:10022200F594E794D794C7941694D1F7CB5FDE4F39
+:100232003881C550D140832F90E0880F991F092E35
+:10024200000CAA0B86579F4FAF4FFC015A2FDBD3EE
+:10025200DB01222D332D482D592DF0D3DC01CB01AA
+:10026200072E7EE0B595A795979587957A95D1F754
+:10027200702D8C0D9D1DAE1DBF1D84199509A609FB
+:10028200B7090F5F1F4F422C532C682C792C282E54
+:10029200392E8A2E9B2E09C000E010E0412C512CF1
+:1002A2003201212C312C812C912C0F3F110509F0A8
+:1002B20008F494CFCB5FDE4F4881C550D140042F64
+:1002C20010E0C801880F991F092E000CAA0B86574F
+:1002D2009F4FAF4FFC015A2F96D3DB01222D332DB6
+:1002E200482D592DABD39B01AC01012E1EE0559533
+:1002F2004795379527951A95D1F7102DC85FDE4F90
+:10030200288339834A835B83C850D140222D332D01
+:10031200482D592D622D732D882D992D05D36B01F2
+:100322007C01A3019201C301B201FED2C60ED71E07
+:10033200E81EF91EC85FDE4F688179818A819B8140
+:10034200C850D140F1D2A7019601261B370B480BAA
+:10035200590BDA01C9011AF480E090E0DC01000FC8
+:10036200111F000F111FE1E0F0E0EC0FFD1FE00F85
+:10037200F11F80839183A283B383CB5FDE4F3881E9
+:10038200C550D1403F5FCB5FDE4F3883C550D1406F
+:10039200CB5FDE4F4881C550D140413408F47CCF59
+:1003A20081E030E0932F27C0E82FF0E0EE0FFF1F2F
+:1003B200EE0FFF1F21E030E02C0F3D1FE20FF31F75
+:1003C2000081118122813381E92FF0E0EE0FFF1FBE
+:1003D200EE0FFF1F41E050E04C0F5D1FE40FF51FD1
+:1003E200408151816281738140175107620773070F
+:1003F20008F4982F8F5F8134B8F2392F20E04FEF45
+:1004020038C0822F90E0FC013196632F70E0E6172E
+:10041200F7072CF06F5F7F4F681779074CF54F3F56
+:1004220021F1880F991F880F991FE1E0F0E0EC0F8E
+:10043200FD1FE80FF91FC080D180E280F380E42F16
+:10044200F0E0EE0FFF1FEE0FFF1F81E090E08C0F38
+:100452009D1FE80FF91F80819181A281B3818C15C4
+:100462009D05AE05BF0518F003C0422F01C0422F03
+:100472002F5F213430F2A32FB0E0509620E43FE109
+:10048200D7D2DC01CB0180589F4FAF4FBF4F892F8E
+:100492009A2FAB2FBB27C45FDE4FE881F981CC5086
+:1004A200D1409183808350E0DA015096C1D2DC01C1
+:1004B200CB0180589F4FAF4FBF4F892F9A2FAB2F41
+:1004C200BB27C25FDE4FE881F981CE50D1409183D4
+:1004D2008083C15FDE4F0FB6F894DEBF0FBECDBF83
+:1004E200DF91CF911F910F91FF90EF90DF90CF900E
+:1004F200BF90AF909F908F907F906F905F904F9042
+:060502003F902F900895C8
+:100508000F931F93CF93DF9300D000D00F92CDB7F6
+:10051800DEB7AC01062FE0E011E01E0F9A01ADEC4A
+:10052800BCEC2AD29695879596958795969587954A
+:100538009C01220F331F880F991F880F991F880F5E
+:10054800991F820F931F9A01281B390BC90121E0BB
+:1005580030E02C0F3D1F2E0F311DF901805D808387
+:100568009A010AD2AC0156954795569547955695E6
+:1005780047954115510539F0E12F153068F203C050
+:1005880080E267D201501017D8F309C01150E1E09A
+:10059800F0E0EC0FFD1FE10FF11D80815AD211111F
+:1005A800F5CF0F900F900F900F900F90DF91CF9194
+:0605B8001F910F91089550
+:1005BE00CF93DF9300D000D0CDB7DEB705D2CED02B
+:1005CE0005D1789460E080E027D26CE071E080E0A5
+:1005DE006ED1809104038823E1F3AE014D5F5F4F2E
+:1005EE00BE016F5F7F4F80E091E0A4DD6B817C8167
+:1005FE0089819A817BD0182F882369F060E080E092
+:10060E000BD26AE171E080E052D1812F1FD260E2FD
+:10061E0071E080E04CD160E081E0FED16CE271E0EF
+:10062E0080E045D164E089819A8167DF60E371E003
+:10063E0080E03DD164E08B819C815FDFF894109265
+:10064E0003031092020310920403EEE6F0E08081A1
+:08065E00826080837894BDCF17
+:100666001F920F920FB60F9211242F933F938F93E1
+:100676009F93EF93FF93809100039091010301965E
+:10068600909301038093000380910403811127C096
+:1006960080910203909103032091780030917900B4
+:1006A600FC01EE0FFF1FE050FF4F318320830196C0
+:1006B6008F3F910581F078F080E091E090930303FD
+:1006C6008093020381E080930403EEE6F0E08081EC
+:1006D6008D7F808304C09093030380930203FF9170
+:1006E600EF919F918F913F912F910F900FBE0F9099
+:0406F6001F901895A4
+:1006FA00EF92FF920F931F93CF938C017B01C2D08D
+:10070A00C82FC70184D0CC2314F088232CF4C70146
+:10071A00B9D0C82FC8017BD0CC23CCF08823CCF029
+:10072A00082E000C990B9C01220F331F820F931F76
+:10073A008C0F911DC7FD9A95092E000CAA0B8B5C94
+:10074A009E4FAF4FFC018491A7FD808103C080E0DA
+:10075A0001C080E0CF911F910F91FF90EF90089513
+:10076A002FEF80E792E0215080409040E1F700C0EF
+:10077A00000060E080E30BD18FE19EE40197F1F77E
+:10078A0000C0000060E080E302D187E592E00197B3
+:10079A00F1F700C0000060E080E3F9D087E592E05D
+:1007AA000197F1F700C0000060E080E2F0D087E531
+:1007BA0092E00197F1F700C0000088E2A2D088E039
+:1007CA00A0D081E09ED086E09CD08CE09AD008959B
+:1007DA0087B18E7F87B988B18E7F88B9EEE7F0E05E
+:1007EA0080818160808380E480937C008FE880939D
+:1007FA007A0082E084BD15BC16BC99EF97BD85BB13
+:0E080A00EEE6F0E090819260908385BD089547
+:100818009C012C5932402932310580F02D5531097F
+:100828002932310568F02F5331092932310550F04A
+:1008380086599340899740F483E0089580E00895AD
+:0C08480081E0089582E008958FEF08958C
+:100854001F920F920FB60F9211248F93EF93FF9371
+:1008640080917A0086FD09C080910403811105C03E
+:10087400EAE7F0E0808180648083FF91EF918F91BB
+:0A0884000F900FBE0F901F90189503
+:10088E009C012F5A34402932310558F02D57310929
+:10089E002932310540F0895A9540899730F482E02B
+:0E08AE00089580E0089581E008958FEF089589
+:1008BC00CF92DF92EF926B01E82E05C09FEFC91A21
+:1008CC00D90AE90AC4D0F6018491E7FC8081811130
+:0A08DC00F5CFEF90DF90CF90089564
+:1008E600CF93C82F8460AED085E08A95F1F70000DB
+:1008F6008C2F8B7FA7D087EC90E00197F1F700C093
+:060906000000CF910895EE
+:10090C00CF93C82F60E028D0C150C23030F48FE3B1
+:0E091C009FE10197F1F700C00000CF91089510
+:10092A00DB018F939F9348D0BF91AF91A29F800D17
+:0E093A00911DA39F900DB29F900D1124089562
+:10094800CF93DF93D82FC62F4BD08D2F880F2BD066
+:0C0958008C2F29D04DD0DF91CF91089555
+:10096400CF93DF93C82FD62F807F14D06D2F8C2F79
+:0C0974008295807F0FD0DF91CF91089515
+:10098000A29FB001B39FC001A39F01D0B29F700D81
+:08099000811D1124911D089541
+:10099800CF93807F682BC62FC8608C2F52D08C2FA6
+:0609A8009EDFCF910895CF
+:1009AE008093BB0084E88093BC008091BC008823B8
+:0409BE00E4F70895BD
+:1009C200DEDFA59F900DB49F900DA49F800D911D19
+:0409D200112408954F
+:1009D6001092B90088E48093B80084E08093BC004C
+:0209E600089572
+:1009E80084EA8093BC008091BC008823E4F70895D2
+:1009F80084E98093BC008091BC0084FDFCCF0895FD
+:100A080057FD03C06591759108956191719108959D
+:0E0A1800EC0123D021D0CE0121D0CE0120D080
+:0C0A2600811180E4860F80686EDF089567
+:0C0A3200A6DFB7FF0895821B930B089508
+:0C0A3E00B7FFC0CFBFDF821B930B0895F1
+:0A0A4A00682F686087E27BDF0895E3
+:060A540061E086DF089559
+:040A5A00FCDF089520
+:020A5E00D0CAFC
+:020A60000895F7
+:020A62000895F5
+:020A64000895F3
+:020A66000FDBA4
+:00000001FF
--- /dev/null
+
+halloween_puff.elf: file format elf32-avr
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .data 00000000 00800100 00800100 00000b1c 2**0
+ ALLOC, LOAD, DATA
+ 1 .text 0000008a 00000000 00000000 000000b4 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .comment 0000002f 00000000 00000000 00000b1c 2**0
+ CONTENTS, READONLY
+ 3 .stack.descriptors.hdr 00000062 00000000 00000000 00000b4b 2**0
+ CONTENTS, READONLY
+ 4 .debug_aranges 000000d8 00000000 00000000 00000bad 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 5 .debug_info 00001650 00000000 00000000 00000c85 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 6 .debug_abbrev 0000087b 00000000 00000000 000022d5 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 7 .debug_line 000008a4 00000000 00000000 00002b50 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 8 .debug_frame 000002c4 00000000 00000000 000033f4 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 9 .debug_str 00000233 00000000 00000000 000036b8 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 10 .debug_loc 00000df0 00000000 00000000 000038eb 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 11 .debug_ranges 00000128 00000000 00000000 000046db 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 12 .text 00000002 00000a5e 00000a5e 00000b12 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 13 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00004804 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 14 .text.i2c_init 00000012 000009d6 000009d6 00000a8a 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 15 .text.i2c_start 00000010 000009e8 000009e8 00000a9c 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 16 .text.i2c_write 00000014 000009ae 000009ae 00000a62 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 17 .text.i2c_stop 00000010 000009f8 000009f8 00000aac 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 18 .text.i2c_write_byte 0000001c 00000948 00000948 000009fc 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 19 .text.lcd_expander_write 0000000a 00000a4a 00000a4a 00000afe 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 20 .text.adc_sampling_init 0000003e 000007da 000007da 0000088e 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 21 .text.analyze_block 000003c6 00000142 00000142 000001f6 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 22 .text.get_column 0000002e 0000088e 0000088e 00000942 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 23 .text.get_row 0000003c 00000818 00000818 000008cc 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 24 .text.decode_key 00000070 000006fa 000006fa 000007ae 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 25 .text.lcd_pulse_enable 00000026 000008e6 000008e6 0000099a 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 26 .text.lcd_write4 00000016 00000998 00000998 00000a4c 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 27 .text.lcd_send 0000001c 00000964 00000964 00000a18 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 28 .text.lcd_data 00000006 00000a54 00000a54 00000b08 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 29 .text.lcd_putc 00000004 00000a5a 00000a5a 00000b0e 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 30 .text.lcd_print 0000002a 000008bc 000008bc 00000970 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 31 .text.lcd_print_uint 000000b6 00000508 00000508 000005bc 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 32 .text.lcd_command 0000001e 0000090c 0000090c 000009c0 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 33 .text.lcd_goto 0000000c 00000a26 00000a26 00000ada 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 34 .text.lcd_init 00000070 0000076a 0000076a 0000081e 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 35 .text.__vector_14 0000003a 00000854 00000854 00000908 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 36 .text.__vector_21 00000094 00000666 00000666 0000071a 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 37 .progmemx.data 00000029 0000010c 0000010c 000001c0 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, PROGMEMX
+ 38 .text.main 000000a8 000005be 000005be 00000672 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 39 .progmemx.data.keypad.2090 0000000c 00000135 00000135 000001e9 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, PROGMEMX
+ 40 .bss.adc_count 00000002 00800300 00800300 00000b1c 2**0
+ ALLOC
+ 41 .progmemx.data.coeff 00000082 0000008a 0000008a 0000013e 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, PROGMEMX
+ 42 .bss.block_ready 00000001 00800304 00800304 00000b1c 2**0
+ ALLOC
+ 43 .bss.sample_index 00000002 00800302 00800302 00000b1c 2**0
+ ALLOC
+ 44 .bss.samples 00000200 00800100 00800100 00000b1c 2**0
+ ALLOC
+ 45 .text.libgcc.mul 0000001e 0000092a 0000092a 000009de 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 46 .text.libgcc.mul 00000018 00000980 00000980 00000a34 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 47 .text.libgcc.mul 0000000c 00000a32 00000a32 00000ae6 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 48 .text.libgcc.mul 00000014 000009c2 000009c2 00000a76 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 49 .text.libgcc.mul 0000000c 00000a3e 00000a3e 00000af2 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 50 .text.libgcc 00000010 00000a08 00000a08 00000abc 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 51 .text.__dummy_fini 00000002 00000a60 00000a60 00000b14 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 52 .text.__dummy_funcs_on_exit 00000002 00000a62 00000a62 00000b16 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 53 .text.__dummy_simulator_exit 00000002 00000a64 00000a64 00000b18 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 54 .text.exit 0000000e 00000a18 00000a18 00000acc 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 55 .text._Exit 00000002 00000a66 00000a66 00000b1a 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+ 0: 1c c0 rjmp .+56 ; 0x3a <__ctors_end>
+ 2: 2d c5 rjmp .+2650 ; 0xa5e <__bad_interrupt>
+ 4: 2c c5 rjmp .+2648 ; 0xa5e <__bad_interrupt>
+ 6: 2b c5 rjmp .+2646 ; 0xa5e <__bad_interrupt>
+ 8: 2a c5 rjmp .+2644 ; 0xa5e <__bad_interrupt>
+ a: 29 c5 rjmp .+2642 ; 0xa5e <__bad_interrupt>
+ c: 28 c5 rjmp .+2640 ; 0xa5e <__bad_interrupt>
+ e: 27 c5 rjmp .+2638 ; 0xa5e <__bad_interrupt>
+ 10: 26 c5 rjmp .+2636 ; 0xa5e <__bad_interrupt>
+ 12: 25 c5 rjmp .+2634 ; 0xa5e <__bad_interrupt>
+ 14: 24 c5 rjmp .+2632 ; 0xa5e <__bad_interrupt>
+ 16: 23 c5 rjmp .+2630 ; 0xa5e <__bad_interrupt>
+ 18: 22 c5 rjmp .+2628 ; 0xa5e <__bad_interrupt>
+ 1a: 21 c5 rjmp .+2626 ; 0xa5e <__bad_interrupt>
+ 1c: 1b c4 rjmp .+2102 ; 0x854 <__vector_14>
+ 1e: 1f c5 rjmp .+2622 ; 0xa5e <__bad_interrupt>
+ 20: 1e c5 rjmp .+2620 ; 0xa5e <__bad_interrupt>
+ 22: 1d c5 rjmp .+2618 ; 0xa5e <__bad_interrupt>
+ 24: 1c c5 rjmp .+2616 ; 0xa5e <__bad_interrupt>
+ 26: 1b c5 rjmp .+2614 ; 0xa5e <__bad_interrupt>
+ 28: 1a c5 rjmp .+2612 ; 0xa5e <__bad_interrupt>
+ 2a: 1d c3 rjmp .+1594 ; 0x666 <__vector_21>
+ 2c: 18 c5 rjmp .+2608 ; 0xa5e <__bad_interrupt>
+ 2e: 17 c5 rjmp .+2606 ; 0xa5e <__bad_interrupt>
+ 30: 16 c5 rjmp .+2604 ; 0xa5e <__bad_interrupt>
+ 32: 15 c5 rjmp .+2602 ; 0xa5e <__bad_interrupt>
+
+00000034 <.dinit>:
+ 34: 01 00 .word 0x0001 ; ????
+ 36: 03 05 cpc r16, r3
+ 38: 80 00 .word 0x0080 ; ????
+
+0000003a <__ctors_end>:
+ 3a: 11 24 eor r1, r1
+ 3c: 1f be out 0x3f, r1 ; 63
+ 3e: cf ef ldi r28, 0xFF ; 255
+ 40: d4 e0 ldi r29, 0x04 ; 4
+ 42: de bf out 0x3e, r29 ; 62
+ 44: cd bf out 0x3d, r28 ; 61
+
+00000046 <__do_copy_data>:
+ 46: e4 e3 ldi r30, 0x34 ; 52
+ 48: f0 e0 ldi r31, 0x00 ; 0
+ 4a: 40 e0 ldi r20, 0x00 ; 0
+ 4c: 17 c0 rjmp .+46 ; 0x7c <__do_clear_bss+0x8>
+ 4e: b5 91 lpm r27, Z+
+ 50: a5 91 lpm r26, Z+
+ 52: 35 91 lpm r19, Z+
+ 54: 25 91 lpm r18, Z+
+ 56: 05 91 lpm r16, Z+
+ 58: 07 fd sbrc r16, 7
+ 5a: 0c c0 rjmp .+24 ; 0x74 <__do_clear_bss>
+ 5c: 95 91 lpm r25, Z+
+ 5e: 85 91 lpm r24, Z+
+ 60: ef 01 movw r28, r30
+ 62: f9 2f mov r31, r25
+ 64: e8 2f mov r30, r24
+ 66: 05 90 lpm r0, Z+
+ 68: 0d 92 st X+, r0
+ 6a: a2 17 cp r26, r18
+ 6c: b3 07 cpc r27, r19
+ 6e: d9 f7 brne .-10 ; 0x66 <__do_copy_data+0x20>
+ 70: fe 01 movw r30, r28
+ 72: 04 c0 rjmp .+8 ; 0x7c <__do_clear_bss+0x8>
+
+00000074 <__do_clear_bss>:
+ 74: 1d 92 st X+, r1
+ 76: a2 17 cp r26, r18
+ 78: b3 07 cpc r27, r19
+ 7a: e1 f7 brne .-8 ; 0x74 <__do_clear_bss>
+ 7c: e9 33 cpi r30, 0x39 ; 57
+ 7e: f4 07 cpc r31, r20
+ 80: 31 f7 brne .-52 ; 0x4e <__do_copy_data+0x8>
+ 82: 9d d2 rcall .+1338 ; 0x5be <main>
+ 84: c9 c4 rjmp .+2450 ; 0xa18 <exit>
+
+00000086 <_exit>:
+ 86: f8 94 cli
+
+00000088 <__stop_program>:
+ 88: ff cf rjmp .-2 ; 0x88 <__stop_program>
+
+Disassembly of section .text:
+
+00000a5e <__bad_interrupt>:
+ a5e: d0 ca rjmp .-2656 ; 0x0 <__TEXT_REGION_ORIGIN__>
+
+Disassembly of section .text.i2c_init:
+
+000009d6 <i2c_init>:
+// I2C / TWI driver
+// ============================================================
+
+static void i2c_init(void)
+{
+ TWSR = 0;
+ 9d6: 10 92 b9 00 sts 0x00B9, r1 ; 0x8000b9 <__TEXT_REGION_LENGTH__+0x7fe0b9>
+ TWBR = (uint8_t)((F_CPU / I2C_FREQ - 16) / 2);
+ 9da: 88 e4 ldi r24, 0x48 ; 72
+ 9dc: 80 93 b8 00 sts 0x00B8, r24 ; 0x8000b8 <__TEXT_REGION_LENGTH__+0x7fe0b8>
+ TWCR = (1 << TWEN);
+ 9e0: 84 e0 ldi r24, 0x04 ; 4
+ 9e2: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 9e6: 08 95 ret
+
+Disassembly of section .text.i2c_start:
+
+000009e8 <i2c_start>:
+}
+
+static void i2c_start(void)
+{
+ TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
+ 9e8: 84 ea ldi r24, 0xA4 ; 164
+ 9ea: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+
+ while (!(TWCR & (1 << TWINT)))
+ 9ee: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 9f2: 88 23 and r24, r24
+ 9f4: e4 f7 brge .-8 ; 0x9ee <i2c_start+0x6>
+ ;
+}
+ 9f6: 08 95 ret
+
+Disassembly of section .text.i2c_write:
+
+000009ae <i2c_write>:
+
+static void i2c_write(uint8_t data)
+{
+ TWDR = data;
+ 9ae: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__TEXT_REGION_LENGTH__+0x7fe0bb>
+ TWCR = (1 << TWINT) | (1 << TWEN);
+ 9b2: 84 e8 ldi r24, 0x84 ; 132
+ 9b4: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+
+ while (!(TWCR & (1 << TWINT)))
+ 9b8: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 9bc: 88 23 and r24, r24
+ 9be: e4 f7 brge .-8 ; 0x9b8 <i2c_write+0xa>
+ ;
+}
+ 9c0: 08 95 ret
+
+Disassembly of section .text.i2c_stop:
+
+000009f8 <i2c_stop>:
+
+static void i2c_stop(void)
+{
+ TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
+ 9f8: 84 e9 ldi r24, 0x94 ; 148
+ 9fa: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+
+ while (TWCR & (1 << TWSTO))
+ 9fe: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ a02: 84 fd sbrc r24, 4
+ a04: fc cf rjmp .-8 ; 0x9fe <i2c_stop+0x6>
+ ;
+}
+ a06: 08 95 ret
+
+Disassembly of section .text.i2c_write_byte:
+
+00000948 <i2c_write_byte>:
+
+static void i2c_write_byte(uint8_t address, uint8_t data)
+{
+ 948: cf 93 push r28
+ 94a: df 93 push r29
+ 94c: d8 2f mov r29, r24
+ 94e: c6 2f mov r28, r22
+ i2c_start();
+ 950: 4b d0 rcall .+150 ; 0x9e8 <i2c_start>
+ i2c_write((address << 1) | 0);
+ 952: 8d 2f mov r24, r29
+ 954: 88 0f add r24, r24
+ 956: 2b d0 rcall .+86 ; 0x9ae <i2c_write>
+ i2c_write(data);
+ 958: 8c 2f mov r24, r28
+ 95a: 29 d0 rcall .+82 ; 0x9ae <i2c_write>
+ i2c_stop();
+ 95c: 4d d0 rcall .+154 ; 0x9f8 <i2c_stop>
+}
+ 95e: df 91 pop r29
+ 960: cf 91 pop r28
+ 962: 08 95 ret
+
+Disassembly of section .text.lcd_expander_write:
+
+00000a4a <lcd_expander_write>:
+// LCD driver: HD44780 + PCF8574 I2C backpack
+// ============================================================
+
+static void lcd_expander_write(uint8_t data)
+{
+ i2c_write_byte(LCD_ADDR, data | LCD_BACKLIGHT);
+ a4a: 68 2f mov r22, r24
+ a4c: 68 60 ori r22, 0x08 ; 8
+ a4e: 87 e2 ldi r24, 0x27 ; 39
+ a50: 7b df rcall .-266 ; 0x948 <i2c_write_byte>
+ a52: 08 95 ret
+
+Disassembly of section .text.adc_sampling_init:
+
+000007da <adc_sampling_init>:
+// ============================================================
+
+static void adc_sampling_init(void)
+{
+ // ADC0 / PC0 input
+ DDRC &= ~(1 << DDC0);
+ 7da: 87 b1 in r24, 0x07 ; 7
+ 7dc: 8e 7f andi r24, 0xFE ; 254
+ 7de: 87 b9 out 0x07, r24 ; 7
+ PORTC &= ~(1 << PORTC0);
+ 7e0: 88 b1 in r24, 0x08 ; 8
+ 7e2: 8e 7f andi r24, 0xFE ; 254
+ 7e4: 88 b9 out 0x08, r24 ; 8
+ DIDR0 |= (1 << ADC0D);
+ 7e6: ee e7 ldi r30, 0x7E ; 126
+ 7e8: f0 e0 ldi r31, 0x00 ; 0
+ 7ea: 80 81 ld r24, Z
+ 7ec: 81 60 ori r24, 0x01 ; 1
+ 7ee: 80 83 st Z, r24
+
+ // AVcc reference, ADC0
+ ADMUX = (1 << REFS0);
+ 7f0: 80 e4 ldi r24, 0x40 ; 64
+ 7f2: 80 93 7c 00 sts 0x007C, r24 ; 0x80007c <__TEXT_REGION_LENGTH__+0x7fe07c>
+
+ // ADC enabled, interrupt enabled, prescaler 128
+ // No auto-trigger: software starts each conversion
+ ADCSRA = (1 << ADEN) |
+ 7f6: 8f e8 ldi r24, 0x8F ; 143
+ 7f8: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7fe07a>
+ (1 << ADPS2) |
+ (1 << ADPS1) |
+ (1 << ADPS0);
+
+ // Timer0 CTC: 16 MHz / 8 / (249 + 1) = 8 kHz
+ TCCR0A = (1 << WGM01);
+ 7fc: 82 e0 ldi r24, 0x02 ; 2
+ 7fe: 84 bd out 0x24, r24 ; 36
+ TCCR0B = 0;
+ 800: 15 bc out 0x25, r1 ; 37
+ TCNT0 = 0;
+ 802: 16 bc out 0x26, r1 ; 38
+ OCR0A = 249;
+ 804: 99 ef ldi r25, 0xF9 ; 249
+ 806: 97 bd out 0x27, r25 ; 39
+
+ // Clear pending Timer0 compare flag
+ TIFR0 = (1 << OCF0A);
+ 808: 85 bb out 0x15, r24 ; 21
+
+ // Enable Timer0 compare interrupt
+ TIMSK0 |= (1 << OCIE0A);
+ 80a: ee e6 ldi r30, 0x6E ; 110
+ 80c: f0 e0 ldi r31, 0x00 ; 0
+ 80e: 90 81 ld r25, Z
+ 810: 92 60 ori r25, 0x02 ; 2
+ 812: 90 83 st Z, r25
+
+ // Start Timer0 with prescaler 8
+ TCCR0B = (1 << CS01);
+ 814: 85 bd out 0x25, r24 ; 37
+ 816: 08 95 ret
+
+Disassembly of section .text.analyze_block:
+
+00000142 <analyze_block>:
+
+static void analyze_block(
+volatile uint16_t *data,
+uint16_t *freq1,
+uint16_t *freq2)
+{
+ 142: 2f 92 push r2
+ 144: 3f 92 push r3
+ 146: 4f 92 push r4
+ 148: 5f 92 push r5
+ 14a: 6f 92 push r6
+ 14c: 7f 92 push r7
+ 14e: 8f 92 push r8
+ 150: 9f 92 push r9
+ 152: af 92 push r10
+ 154: bf 92 push r11
+ 156: cf 92 push r12
+ 158: df 92 push r13
+ 15a: ef 92 push r14
+ 15c: ff 92 push r15
+ 15e: 0f 93 push r16
+ 160: 1f 93 push r17
+ 162: cf 93 push r28
+ 164: df 93 push r29
+ 166: cd b7 in r28, 0x3d ; 61
+ 168: de b7 in r29, 0x3e ; 62
+ 16a: cf 50 subi r28, 0x0F ; 15
+ 16c: d1 40 sbci r29, 0x01 ; 1
+ 16e: 0f b6 in r0, 0x3f ; 63
+ 170: f8 94 cli
+ 172: de bf out 0x3e, r29 ; 62
+ 174: 0f be out 0x3f, r0 ; 63
+ 176: cd bf out 0x3d, r28 ; 61
+ 178: 5c 01 movw r10, r24
+ 17a: c4 5f subi r28, 0xF4 ; 244
+ 17c: de 4f sbci r29, 0xFE ; 254
+ 17e: 79 83 std Y+1, r23 ; 0x01
+ 180: 68 83 st Y, r22
+ 182: cc 50 subi r28, 0x0C ; 12
+ 184: d1 40 sbci r29, 0x01 ; 1
+ 186: c2 5f subi r28, 0xF2 ; 242
+ 188: de 4f sbci r29, 0xFE ; 254
+ 18a: 59 83 std Y+1, r21 ; 0x01
+ 18c: 48 83 st Y, r20
+ 18e: ce 50 subi r28, 0x0E ; 14
+ 190: d1 40 sbci r29, 0x01 ; 1
+ uint32_t sum = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++)
+ 192: 80 e0 ldi r24, 0x00 ; 0
+ 194: 90 e0 ldi r25, 0x00 ; 0
+static void analyze_block(
+volatile uint16_t *data,
+uint16_t *freq1,
+uint16_t *freq2)
+{
+ uint32_t sum = 0;
+ 196: 40 e0 ldi r20, 0x00 ; 0
+ 198: 50 e0 ldi r21, 0x00 ; 0
+ 19a: ba 01 movw r22, r20
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++)
+ 19c: 0c c0 rjmp .+24 ; 0x1b6 <analyze_block+0x74>
+ sum += data[i];
+ 19e: fc 01 movw r30, r24
+ 1a0: ee 0f add r30, r30
+ 1a2: ff 1f adc r31, r31
+ 1a4: ea 0d add r30, r10
+ 1a6: fb 1d adc r31, r11
+ 1a8: 20 81 ld r18, Z
+ 1aa: 31 81 ldd r19, Z+1 ; 0x01
+ 1ac: 42 0f add r20, r18
+ 1ae: 53 1f adc r21, r19
+ 1b0: 61 1d adc r22, r1
+ 1b2: 71 1d adc r23, r1
+uint16_t *freq1,
+uint16_t *freq2)
+{
+ uint32_t sum = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++)
+ 1b4: 01 96 adiw r24, 0x01 ; 1
+ 1b6: 8f 3f cpi r24, 0xFF ; 255
+ 1b8: 91 05 cpc r25, r1
+ 1ba: 89 f3 breq .-30 ; 0x19e <analyze_block+0x5c>
+ 1bc: 80 f3 brcs .-32 ; 0x19e <analyze_block+0x5c>
+ sum += data[i];
+
+ int16_t mean = (int16_t)(sum / N_SAMPLES);
+ 1be: 45 2f mov r20, r21
+ 1c0: 56 2f mov r21, r22
+ 1c2: 67 2f mov r22, r23
+ 1c4: 77 27 eor r23, r23
+ 1c6: ca 5f subi r28, 0xFA ; 250
+ 1c8: de 4f sbci r29, 0xFE ; 254
+ 1ca: 59 83 std Y+1, r21 ; 0x01
+ 1cc: 48 83 st Y, r20
+ 1ce: c6 50 subi r28, 0x06 ; 6
+ 1d0: d1 40 sbci r29, 0x01 ; 1
+
+ uint32_t power[NUM_BINS];
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ 1d2: cb 5f subi r28, 0xFB ; 251
+ 1d4: de 4f sbci r29, 0xFE ; 254
+ 1d6: 18 82 st Y, r1
+ 1d8: c5 50 subi r28, 0x05 ; 5
+ 1da: d1 40 sbci r29, 0x01 ; 1
+ 1dc: da c0 rjmp .+436 ; 0x392 <__EEPROM_REGION_LENGTH__+0x192>
+ int32_t q1 = 0;
+ int32_t q2 = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++) {
+ int32_t x = ((int32_t)data[i] - mean) / 8;
+ 1de: f8 01 movw r30, r16
+ 1e0: ee 0f add r30, r30
+ 1e2: ff 1f adc r31, r31
+ 1e4: ea 0d add r30, r10
+ 1e6: fb 1d adc r31, r11
+ 1e8: 80 81 ld r24, Z
+ 1ea: 91 81 ldd r25, Z+1 ; 0x01
+ 1ec: a0 e0 ldi r26, 0x00 ; 0
+ 1ee: b0 e0 ldi r27, 0x00 ; 0
+ 1f0: ca 5f subi r28, 0xFA ; 250
+ 1f2: de 4f sbci r29, 0xFE ; 254
+ 1f4: 28 81 ld r18, Y
+ 1f6: 39 81 ldd r19, Y+1 ; 0x01
+ 1f8: c6 50 subi r28, 0x06 ; 6
+ 1fa: d1 40 sbci r29, 0x01 ; 1
+ 1fc: a9 01 movw r20, r18
+ 1fe: 33 0f add r19, r19
+ 200: 66 0b sbc r22, r22
+ 202: 77 0b sbc r23, r23
+ 204: 84 1b sub r24, r20
+ 206: 95 0b sbc r25, r21
+ 208: a6 0b sbc r26, r22
+ 20a: b7 0b sbc r27, r23
+ 20c: ac 01 movw r20, r24
+ 20e: bd 01 movw r22, r26
+ 210: 22 f4 brpl .+8 ; 0x21a <__EEPROM_REGION_LENGTH__+0x1a>
+ 212: 49 5f subi r20, 0xF9 ; 249
+ 214: 5f 4f sbci r21, 0xFF ; 255
+ 216: 6f 4f sbci r22, 0xFF ; 255
+ 218: 7f 4f sbci r23, 0xFF ; 255
+ 21a: 6a 01 movw r12, r20
+ 21c: 7b 01 movw r14, r22
+ 21e: 68 94 set
+ 220: 12 f8 bld r1, 2
+ 222: f5 94 asr r15
+ 224: e7 94 ror r14
+ 226: d7 94 ror r13
+ 228: c7 94 ror r12
+ 22a: 16 94 lsr r1
+ 22c: d1 f7 brne .-12 ; 0x222 <__EEPROM_REGION_LENGTH__+0x22>
+
+ int32_t q0 = x
+ + (((int32_t)coeff[b] * q1) >> 14)
+ 22e: cb 5f subi r28, 0xFB ; 251
+ 230: de 4f sbci r29, 0xFE ; 254
+ 232: 38 81 ld r19, Y
+ 234: c5 50 subi r28, 0x05 ; 5
+ 236: d1 40 sbci r29, 0x01 ; 1
+ 238: 83 2f mov r24, r19
+ 23a: 90 e0 ldi r25, 0x00 ; 0
+ 23c: 88 0f add r24, r24
+ 23e: 99 1f adc r25, r25
+ 240: 09 2e mov r0, r25
+ 242: 00 0c add r0, r0
+ 244: aa 0b sbc r26, r26
+ 246: 86 57 subi r24, 0x76 ; 118
+ 248: 9f 4f sbci r25, 0xFF ; 255
+ 24a: af 4f sbci r26, 0xFF ; 255
+ 24c: fc 01 movw r30, r24
+ 24e: 5a 2f mov r21, r26
+ 250: db d3 rcall .+1974 ; 0xa08 <__xload_2>
+ 252: db 01 movw r26, r22
+ 254: 22 2d mov r18, r2
+ 256: 33 2d mov r19, r3
+ 258: 48 2d mov r20, r8
+ 25a: 59 2d mov r21, r9
+ 25c: f0 d3 rcall .+2016 ; 0xa3e <__mulshisi3>
+ 25e: dc 01 movw r26, r24
+ 260: cb 01 movw r24, r22
+ 262: 07 2e mov r0, r23
+ 264: 7e e0 ldi r23, 0x0E ; 14
+ 266: b5 95 asr r27
+ 268: a7 95 ror r26
+ 26a: 97 95 ror r25
+ 26c: 87 95 ror r24
+ 26e: 7a 95 dec r23
+ 270: d1 f7 brne .-12 ; 0x266 <__EEPROM_REGION_LENGTH__+0x66>
+ 272: 70 2d mov r23, r0
+ 274: 8c 0d add r24, r12
+ 276: 9d 1d adc r25, r13
+ 278: ae 1d adc r26, r14
+ 27a: bf 1d adc r27, r15
+ int32_t q2 = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++) {
+ int32_t x = ((int32_t)data[i] - mean) / 8;
+
+ int32_t q0 = x
+ 27c: 84 19 sub r24, r4
+ 27e: 95 09 sbc r25, r5
+ 280: a6 09 sbc r26, r6
+ 282: b7 09 sbc r27, r7
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ int32_t q1 = 0;
+ int32_t q2 = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++) {
+ 284: 0f 5f subi r16, 0xFF ; 255
+ 286: 1f 4f sbci r17, 0xFF ; 255
+
+ int32_t q0 = x
+ + (((int32_t)coeff[b] * q1) >> 14)
+ - q2;
+
+ q2 = q1;
+ 288: 42 2c mov r4, r2
+ 28a: 53 2c mov r5, r3
+ 28c: 68 2c mov r6, r8
+ 28e: 79 2c mov r7, r9
+ q1 = q0;
+ 290: 28 2e mov r2, r24
+ 292: 39 2e mov r3, r25
+ 294: 8a 2e mov r8, r26
+ 296: 9b 2e mov r9, r27
+ 298: 09 c0 rjmp .+18 ; 0x2ac <__EEPROM_REGION_LENGTH__+0xac>
+ 29a: 00 e0 ldi r16, 0x00 ; 0
+ 29c: 10 e0 ldi r17, 0x00 ; 0
+ 29e: 41 2c mov r4, r1
+ 2a0: 51 2c mov r5, r1
+ 2a2: 32 01 movw r6, r4
+ 2a4: 21 2c mov r2, r1
+ 2a6: 31 2c mov r3, r1
+ 2a8: 81 2c mov r8, r1
+ 2aa: 91 2c mov r9, r1
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ int32_t q1 = 0;
+ int32_t q2 = 0;
+
+ for (uint16_t i = 0; i < N_SAMPLES; i++) {
+ 2ac: 0f 3f cpi r16, 0xFF ; 255
+ 2ae: 11 05 cpc r17, r1
+ 2b0: 09 f0 breq .+2 ; 0x2b4 <__EEPROM_REGION_LENGTH__+0xb4>
+ 2b2: 08 f4 brcc .+2 ; 0x2b6 <__EEPROM_REGION_LENGTH__+0xb6>
+ 2b4: 94 cf rjmp .-216 ; 0x1de <analyze_block+0x9c>
+
+ q2 = q1;
+ q1 = q0;
+ }
+
+ int32_t term = ((int32_t)coeff[b] * q1) >> 14;
+ 2b6: cb 5f subi r28, 0xFB ; 251
+ 2b8: de 4f sbci r29, 0xFE ; 254
+ 2ba: 48 81 ld r20, Y
+ 2bc: c5 50 subi r28, 0x05 ; 5
+ 2be: d1 40 sbci r29, 0x01 ; 1
+ 2c0: 04 2f mov r16, r20
+ 2c2: 10 e0 ldi r17, 0x00 ; 0
+ 2c4: c8 01 movw r24, r16
+ 2c6: 88 0f add r24, r24
+ 2c8: 99 1f adc r25, r25
+ 2ca: 09 2e mov r0, r25
+ 2cc: 00 0c add r0, r0
+ 2ce: aa 0b sbc r26, r26
+ 2d0: 86 57 subi r24, 0x76 ; 118
+ 2d2: 9f 4f sbci r25, 0xFF ; 255
+ 2d4: af 4f sbci r26, 0xFF ; 255
+ 2d6: fc 01 movw r30, r24
+ 2d8: 5a 2f mov r21, r26
+ 2da: 96 d3 rcall .+1836 ; 0xa08 <__xload_2>
+ 2dc: db 01 movw r26, r22
+ 2de: 22 2d mov r18, r2
+ 2e0: 33 2d mov r19, r3
+ 2e2: 48 2d mov r20, r8
+ 2e4: 59 2d mov r21, r9
+ 2e6: ab d3 rcall .+1878 ; 0xa3e <__mulshisi3>
+ 2e8: 9b 01 movw r18, r22
+ 2ea: ac 01 movw r20, r24
+ 2ec: 01 2e mov r0, r17
+ 2ee: 1e e0 ldi r17, 0x0E ; 14
+ 2f0: 55 95 asr r21
+ 2f2: 47 95 ror r20
+ 2f4: 37 95 ror r19
+ 2f6: 27 95 ror r18
+ 2f8: 1a 95 dec r17
+ 2fa: d1 f7 brne .-12 ; 0x2f0 <__EEPROM_REGION_LENGTH__+0xf0>
+ 2fc: 10 2d mov r17, r0
+ 2fe: c8 5f subi r28, 0xF8 ; 248
+ 300: de 4f sbci r29, 0xFE ; 254
+ 302: 28 83 st Y, r18
+ 304: 39 83 std Y+1, r19 ; 0x01
+ 306: 4a 83 std Y+2, r20 ; 0x02
+ 308: 5b 83 std Y+3, r21 ; 0x03
+ 30a: c8 50 subi r28, 0x08 ; 8
+ 30c: d1 40 sbci r29, 0x01 ; 1
+ int32_t p = q1 * q1 + q2 * q2 - term * q2;
+ 30e: 22 2d mov r18, r2
+ 310: 33 2d mov r19, r3
+ 312: 48 2d mov r20, r8
+ 314: 59 2d mov r21, r9
+ 316: 62 2d mov r22, r2
+ 318: 73 2d mov r23, r3
+ 31a: 88 2d mov r24, r8
+ 31c: 99 2d mov r25, r9
+ 31e: 05 d3 rcall .+1546 ; 0x92a <__mulsi3>
+ 320: 6b 01 movw r12, r22
+ 322: 7c 01 movw r14, r24
+ 324: a3 01 movw r20, r6
+ 326: 92 01 movw r18, r4
+ 328: c3 01 movw r24, r6
+ 32a: b2 01 movw r22, r4
+ 32c: fe d2 rcall .+1532 ; 0x92a <__mulsi3>
+ 32e: c6 0e add r12, r22
+ 330: d7 1e adc r13, r23
+ 332: e8 1e adc r14, r24
+ 334: f9 1e adc r15, r25
+ 336: c8 5f subi r28, 0xF8 ; 248
+ 338: de 4f sbci r29, 0xFE ; 254
+ 33a: 68 81 ld r22, Y
+ 33c: 79 81 ldd r23, Y+1 ; 0x01
+ 33e: 8a 81 ldd r24, Y+2 ; 0x02
+ 340: 9b 81 ldd r25, Y+3 ; 0x03
+ 342: c8 50 subi r28, 0x08 ; 8
+ 344: d1 40 sbci r29, 0x01 ; 1
+ 346: f1 d2 rcall .+1506 ; 0x92a <__mulsi3>
+
+ power[b] = (p > 0) ? (uint32_t)p : 0;
+ 348: a7 01 movw r20, r14
+ 34a: 96 01 movw r18, r12
+ 34c: 26 1b sub r18, r22
+ 34e: 37 0b sbc r19, r23
+ 350: 48 0b sbc r20, r24
+ 352: 59 0b sbc r21, r25
+ 354: da 01 movw r26, r20
+ 356: c9 01 movw r24, r18
+ 358: 1a f4 brpl .+6 ; 0x360 <__EEPROM_REGION_LENGTH__+0x160>
+ 35a: 80 e0 ldi r24, 0x00 ; 0
+ 35c: 90 e0 ldi r25, 0x00 ; 0
+ 35e: dc 01 movw r26, r24
+ 360: 00 0f add r16, r16
+ 362: 11 1f adc r17, r17
+ 364: 00 0f add r16, r16
+ 366: 11 1f adc r17, r17
+ 368: e1 e0 ldi r30, 0x01 ; 1
+ 36a: f0 e0 ldi r31, 0x00 ; 0
+ 36c: ec 0f add r30, r28
+ 36e: fd 1f adc r31, r29
+ 370: e0 0f add r30, r16
+ 372: f1 1f adc r31, r17
+ 374: 80 83 st Z, r24
+ 376: 91 83 std Z+1, r25 ; 0x01
+ 378: a2 83 std Z+2, r26 ; 0x02
+ 37a: b3 83 std Z+3, r27 ; 0x03
+
+ int16_t mean = (int16_t)(sum / N_SAMPLES);
+
+ uint32_t power[NUM_BINS];
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ 37c: cb 5f subi r28, 0xFB ; 251
+ 37e: de 4f sbci r29, 0xFE ; 254
+ 380: 38 81 ld r19, Y
+ 382: c5 50 subi r28, 0x05 ; 5
+ 384: d1 40 sbci r29, 0x01 ; 1
+ 386: 3f 5f subi r19, 0xFF ; 255
+ 388: cb 5f subi r28, 0xFB ; 251
+ 38a: de 4f sbci r29, 0xFE ; 254
+ 38c: 38 83 st Y, r19
+ 38e: c5 50 subi r28, 0x05 ; 5
+ 390: d1 40 sbci r29, 0x01 ; 1
+ 392: cb 5f subi r28, 0xFB ; 251
+ 394: de 4f sbci r29, 0xFE ; 254
+ 396: 48 81 ld r20, Y
+ 398: c5 50 subi r28, 0x05 ; 5
+ 39a: d1 40 sbci r29, 0x01 ; 1
+ 39c: 41 34 cpi r20, 0x41 ; 65
+ 39e: 08 f4 brcc .+2 ; 0x3a2 <__EEPROM_REGION_LENGTH__+0x1a2>
+ 3a0: 7c cf rjmp .-264 ; 0x29a <__EEPROM_REGION_LENGTH__+0x9a>
+ 3a2: 81 e0 ldi r24, 0x01 ; 1
+ 3a4: 30 e0 ldi r19, 0x00 ; 0
+ 3a6: 93 2f mov r25, r19
+ 3a8: 27 c0 rjmp .+78 ; 0x3f8 <__EEPROM_REGION_LENGTH__+0x1f8>
+ }
+
+ uint8_t best1 = 0;
+
+ for (uint8_t b = 1; b < NUM_BINS; b++) {
+ if (power[b] > power[best1])
+ 3aa: e8 2f mov r30, r24
+ 3ac: f0 e0 ldi r31, 0x00 ; 0
+ 3ae: ee 0f add r30, r30
+ 3b0: ff 1f adc r31, r31
+ 3b2: ee 0f add r30, r30
+ 3b4: ff 1f adc r31, r31
+ 3b6: 21 e0 ldi r18, 0x01 ; 1
+ 3b8: 30 e0 ldi r19, 0x00 ; 0
+ 3ba: 2c 0f add r18, r28
+ 3bc: 3d 1f adc r19, r29
+ 3be: e2 0f add r30, r18
+ 3c0: f3 1f adc r31, r19
+ 3c2: 00 81 ld r16, Z
+ 3c4: 11 81 ldd r17, Z+1 ; 0x01
+ 3c6: 22 81 ldd r18, Z+2 ; 0x02
+ 3c8: 33 81 ldd r19, Z+3 ; 0x03
+ 3ca: e9 2f mov r30, r25
+ 3cc: f0 e0 ldi r31, 0x00 ; 0
+ 3ce: ee 0f add r30, r30
+ 3d0: ff 1f adc r31, r31
+ 3d2: ee 0f add r30, r30
+ 3d4: ff 1f adc r31, r31
+ 3d6: 41 e0 ldi r20, 0x01 ; 1
+ 3d8: 50 e0 ldi r21, 0x00 ; 0
+ 3da: 4c 0f add r20, r28
+ 3dc: 5d 1f adc r21, r29
+ 3de: e4 0f add r30, r20
+ 3e0: f5 1f adc r31, r21
+ 3e2: 40 81 ld r20, Z
+ 3e4: 51 81 ldd r21, Z+1 ; 0x01
+ 3e6: 62 81 ldd r22, Z+2 ; 0x02
+ 3e8: 73 81 ldd r23, Z+3 ; 0x03
+ 3ea: 40 17 cp r20, r16
+ 3ec: 51 07 cpc r21, r17
+ 3ee: 62 07 cpc r22, r18
+ 3f0: 73 07 cpc r23, r19
+ 3f2: 08 f4 brcc .+2 ; 0x3f6 <__EEPROM_REGION_LENGTH__+0x1f6>
+ best1 = b;
+ 3f4: 98 2f mov r25, r24
+ power[b] = (p > 0) ? (uint32_t)p : 0;
+ }
+
+ uint8_t best1 = 0;
+
+ for (uint8_t b = 1; b < NUM_BINS; b++) {
+ 3f6: 8f 5f subi r24, 0xFF ; 255
+ 3f8: 81 34 cpi r24, 0x41 ; 65
+ 3fa: b8 f2 brcs .-82 ; 0x3aa <__EEPROM_REGION_LENGTH__+0x1aa>
+ 3fc: 39 2f mov r19, r25
+ 3fe: 20 e0 ldi r18, 0x00 ; 0
+ 400: 4f ef ldi r20, 0xFF ; 255
+ 402: 38 c0 rjmp .+112 ; 0x474 <__DATA_REGION_LENGTH__+0x74>
+ }
+
+ uint8_t best2 = 255;
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ if ((b + 1 >= best1) && (b <= best1 + 1))
+ 404: 82 2f mov r24, r18
+ 406: 90 e0 ldi r25, 0x00 ; 0
+ 408: fc 01 movw r30, r24
+ 40a: 31 96 adiw r30, 0x01 ; 1
+ 40c: 63 2f mov r22, r19
+ 40e: 70 e0 ldi r23, 0x00 ; 0
+ 410: e6 17 cp r30, r22
+ 412: f7 07 cpc r31, r23
+ 414: 2c f0 brlt .+10 ; 0x420 <__DATA_REGION_LENGTH__+0x20>
+ 416: 6f 5f subi r22, 0xFF ; 255
+ 418: 7f 4f sbci r23, 0xFF ; 255
+ 41a: 68 17 cp r22, r24
+ 41c: 79 07 cpc r23, r25
+ 41e: 4c f5 brge .+82 ; 0x472 <__DATA_REGION_LENGTH__+0x72>
+ continue;
+
+ if (best2 == 255 || power[b] > power[best2])
+ 420: 4f 3f cpi r20, 0xFF ; 255
+ 422: 21 f1 breq .+72 ; 0x46c <__DATA_REGION_LENGTH__+0x6c>
+ 424: 88 0f add r24, r24
+ 426: 99 1f adc r25, r25
+ 428: 88 0f add r24, r24
+ 42a: 99 1f adc r25, r25
+ 42c: e1 e0 ldi r30, 0x01 ; 1
+ 42e: f0 e0 ldi r31, 0x00 ; 0
+ 430: ec 0f add r30, r28
+ 432: fd 1f adc r31, r29
+ 434: e8 0f add r30, r24
+ 436: f9 1f adc r31, r25
+ 438: c0 80 ld r12, Z
+ 43a: d1 80 ldd r13, Z+1 ; 0x01
+ 43c: e2 80 ldd r14, Z+2 ; 0x02
+ 43e: f3 80 ldd r15, Z+3 ; 0x03
+ 440: e4 2f mov r30, r20
+ 442: f0 e0 ldi r31, 0x00 ; 0
+ 444: ee 0f add r30, r30
+ 446: ff 1f adc r31, r31
+ 448: ee 0f add r30, r30
+ 44a: ff 1f adc r31, r31
+ 44c: 81 e0 ldi r24, 0x01 ; 1
+ 44e: 90 e0 ldi r25, 0x00 ; 0
+ 450: 8c 0f add r24, r28
+ 452: 9d 1f adc r25, r29
+ 454: e8 0f add r30, r24
+ 456: f9 1f adc r31, r25
+ 458: 80 81 ld r24, Z
+ 45a: 91 81 ldd r25, Z+1 ; 0x01
+ 45c: a2 81 ldd r26, Z+2 ; 0x02
+ 45e: b3 81 ldd r27, Z+3 ; 0x03
+ 460: 8c 15 cp r24, r12
+ 462: 9d 05 cpc r25, r13
+ 464: ae 05 cpc r26, r14
+ 466: bf 05 cpc r27, r15
+ 468: 18 f0 brcs .+6 ; 0x470 <__DATA_REGION_LENGTH__+0x70>
+ 46a: 03 c0 rjmp .+6 ; 0x472 <__DATA_REGION_LENGTH__+0x72>
+ best2 = b;
+ 46c: 42 2f mov r20, r18
+ 46e: 01 c0 rjmp .+2 ; 0x472 <__DATA_REGION_LENGTH__+0x72>
+ 470: 42 2f mov r20, r18
+ best1 = b;
+ }
+
+ uint8_t best2 = 255;
+
+ for (uint8_t b = 0; b < NUM_BINS; b++) {
+ 472: 2f 5f subi r18, 0xFF ; 255
+ 474: 21 34 cpi r18, 0x41 ; 65
+ 476: 30 f2 brcs .-116 ; 0x404 <__DATA_REGION_LENGTH__+0x4>
+
+ if (best2 == 255 || power[b] > power[best2])
+ best2 = b;
+ }
+
+ *freq1 = ((uint32_t)(best1 + MIN_BIN) * SAMPLE_RATE
+ 478: a3 2f mov r26, r19
+ 47a: b0 e0 ldi r27, 0x00 ; 0
+ 47c: 50 96 adiw r26, 0x10 ; 16
+ 47e: 20 e4 ldi r18, 0x40 ; 64
+ 480: 3f e1 ldi r19, 0x1F ; 31
+ 482: d7 d2 rcall .+1454 ; 0xa32 <__usmulhisi3>
+ + N_SAMPLES / 2) / N_SAMPLES;
+ 484: dc 01 movw r26, r24
+ 486: cb 01 movw r24, r22
+ 488: 80 58 subi r24, 0x80 ; 128
+ 48a: 9f 4f sbci r25, 0xFF ; 255
+ 48c: af 4f sbci r26, 0xFF ; 255
+ 48e: bf 4f sbci r27, 0xFF ; 255
+ 490: 89 2f mov r24, r25
+ 492: 9a 2f mov r25, r26
+ 494: ab 2f mov r26, r27
+ 496: bb 27 eor r27, r27
+
+ if (best2 == 255 || power[b] > power[best2])
+ best2 = b;
+ }
+
+ *freq1 = ((uint32_t)(best1 + MIN_BIN) * SAMPLE_RATE
+ 498: c4 5f subi r28, 0xF4 ; 244
+ 49a: de 4f sbci r29, 0xFE ; 254
+ 49c: e8 81 ld r30, Y
+ 49e: f9 81 ldd r31, Y+1 ; 0x01
+ 4a0: cc 50 subi r28, 0x0C ; 12
+ 4a2: d1 40 sbci r29, 0x01 ; 1
+ 4a4: 91 83 std Z+1, r25 ; 0x01
+ 4a6: 80 83 st Z, r24
+ + N_SAMPLES / 2) / N_SAMPLES;
+
+ *freq2 = ((uint32_t)(best2 + MIN_BIN) * SAMPLE_RATE
+ 4a8: 50 e0 ldi r21, 0x00 ; 0
+ 4aa: da 01 movw r26, r20
+ 4ac: 50 96 adiw r26, 0x10 ; 16
+ 4ae: c1 d2 rcall .+1410 ; 0xa32 <__usmulhisi3>
+ + N_SAMPLES / 2) / N_SAMPLES;
+ 4b0: dc 01 movw r26, r24
+ 4b2: cb 01 movw r24, r22
+ 4b4: 80 58 subi r24, 0x80 ; 128
+ 4b6: 9f 4f sbci r25, 0xFF ; 255
+ 4b8: af 4f sbci r26, 0xFF ; 255
+ 4ba: bf 4f sbci r27, 0xFF ; 255
+ 4bc: 89 2f mov r24, r25
+ 4be: 9a 2f mov r25, r26
+ 4c0: ab 2f mov r26, r27
+ 4c2: bb 27 eor r27, r27
+ }
+
+ *freq1 = ((uint32_t)(best1 + MIN_BIN) * SAMPLE_RATE
+ + N_SAMPLES / 2) / N_SAMPLES;
+
+ *freq2 = ((uint32_t)(best2 + MIN_BIN) * SAMPLE_RATE
+ 4c4: c2 5f subi r28, 0xF2 ; 242
+ 4c6: de 4f sbci r29, 0xFE ; 254
+ 4c8: e8 81 ld r30, Y
+ 4ca: f9 81 ldd r31, Y+1 ; 0x01
+ 4cc: ce 50 subi r28, 0x0E ; 14
+ 4ce: d1 40 sbci r29, 0x01 ; 1
+ 4d0: 91 83 std Z+1, r25 ; 0x01
+ 4d2: 80 83 st Z, r24
+ + N_SAMPLES / 2) / N_SAMPLES;
+}
+ 4d4: c1 5f subi r28, 0xF1 ; 241
+ 4d6: de 4f sbci r29, 0xFE ; 254
+ 4d8: 0f b6 in r0, 0x3f ; 63
+ 4da: f8 94 cli
+ 4dc: de bf out 0x3e, r29 ; 62
+ 4de: 0f be out 0x3f, r0 ; 63
+ 4e0: cd bf out 0x3d, r28 ; 61
+ 4e2: df 91 pop r29
+ 4e4: cf 91 pop r28
+ 4e6: 1f 91 pop r17
+ 4e8: 0f 91 pop r16
+ 4ea: ff 90 pop r15
+ 4ec: ef 90 pop r14
+ 4ee: df 90 pop r13
+ 4f0: cf 90 pop r12
+ 4f2: bf 90 pop r11
+ 4f4: af 90 pop r10
+ 4f6: 9f 90 pop r9
+ 4f8: 8f 90 pop r8
+ 4fa: 7f 90 pop r7
+ 4fc: 6f 90 pop r6
+ 4fe: 5f 90 pop r5
+ 500: 4f 90 pop r4
+ 502: 3f 90 pop r3
+ 504: 2f 90 pop r2
+ 506: 08 95 ret
+
+Disassembly of section .text.get_column:
+
+0000088e <get_column>:
+// Frequency matching tolerance in Hz
+#define FREQ_TOLERANCE 20
+
+static int8_t get_column(uint16_t f)
+{
+ if (f >= 1219 - FREQ_TOLERANCE &&
+ 88e: 9c 01 movw r18, r24
+ 890: 2f 5a subi r18, 0xAF ; 175
+ 892: 34 40 sbci r19, 0x04 ; 4
+ 894: 29 32 cpi r18, 0x29 ; 41
+ 896: 31 05 cpc r19, r1
+ 898: 58 f0 brcs .+22 ; 0x8b0 <get_column+0x22>
+ f <= 1219 + FREQ_TOLERANCE)
+ return 0;
+
+ if (f >= 1344 - FREQ_TOLERANCE &&
+ 89a: 2d 57 subi r18, 0x7D ; 125
+ 89c: 31 09 sbc r19, r1
+ 89e: 29 32 cpi r18, 0x29 ; 41
+ 8a0: 31 05 cpc r19, r1
+ 8a2: 40 f0 brcs .+16 ; 0x8b4 <get_column+0x26>
+ f <= 1344 + FREQ_TOLERANCE)
+ return 1;
+
+ if (f >= 1469 - FREQ_TOLERANCE &&
+ 8a4: 89 5a subi r24, 0xA9 ; 169
+ 8a6: 95 40 sbci r25, 0x05 ; 5
+ 8a8: 89 97 sbiw r24, 0x29 ; 41
+ 8aa: 30 f4 brcc .+12 ; 0x8b8 <get_column+0x2a>
+ f <= 1469 + FREQ_TOLERANCE)
+ return 2;
+ 8ac: 82 e0 ldi r24, 0x02 ; 2
+ 8ae: 08 95 ret
+
+static int8_t get_column(uint16_t f)
+{
+ if (f >= 1219 - FREQ_TOLERANCE &&
+ f <= 1219 + FREQ_TOLERANCE)
+ return 0;
+ 8b0: 80 e0 ldi r24, 0x00 ; 0
+ 8b2: 08 95 ret
+
+ if (f >= 1344 - FREQ_TOLERANCE &&
+ f <= 1344 + FREQ_TOLERANCE)
+ return 1;
+ 8b4: 81 e0 ldi r24, 0x01 ; 1
+ 8b6: 08 95 ret
+
+ if (f >= 1469 - FREQ_TOLERANCE &&
+ f <= 1469 + FREQ_TOLERANCE)
+ return 2;
+
+ return -1;
+ 8b8: 8f ef ldi r24, 0xFF ; 255
+}
+ 8ba: 08 95 ret
+
+Disassembly of section .text.get_row:
+
+00000818 <get_row>:
+
+static int8_t get_row(uint16_t f)
+{
+ if (f >= 688 - FREQ_TOLERANCE &&
+ 818: 9c 01 movw r18, r24
+ 81a: 2c 59 subi r18, 0x9C ; 156
+ 81c: 32 40 sbci r19, 0x02 ; 2
+ 81e: 29 32 cpi r18, 0x29 ; 41
+ 820: 31 05 cpc r19, r1
+ 822: 80 f0 brcs .+32 ; 0x844 <get_row+0x2c>
+ f <= 688 + FREQ_TOLERANCE)
+ return 0;
+
+ if (f >= 781 - FREQ_TOLERANCE &&
+ 824: 2d 55 subi r18, 0x5D ; 93
+ 826: 31 09 sbc r19, r1
+ 828: 29 32 cpi r18, 0x29 ; 41
+ 82a: 31 05 cpc r19, r1
+ 82c: 68 f0 brcs .+26 ; 0x848 <get_row+0x30>
+ f <= 781 + FREQ_TOLERANCE)
+ return 1;
+
+ if (f >= 844 - FREQ_TOLERANCE &&
+ 82e: 2f 53 subi r18, 0x3F ; 63
+ 830: 31 09 sbc r19, r1
+ 832: 29 32 cpi r18, 0x29 ; 41
+ 834: 31 05 cpc r19, r1
+ 836: 50 f0 brcs .+20 ; 0x84c <get_row+0x34>
+ f <= 844 + FREQ_TOLERANCE)
+ return 2;
+
+ if (f >= 938 - FREQ_TOLERANCE &&
+ 838: 86 59 subi r24, 0x96 ; 150
+ 83a: 93 40 sbci r25, 0x03 ; 3
+ 83c: 89 97 sbiw r24, 0x29 ; 41
+ 83e: 40 f4 brcc .+16 ; 0x850 <get_row+0x38>
+ f <= 938 + FREQ_TOLERANCE)
+ return 3;
+ 840: 83 e0 ldi r24, 0x03 ; 3
+ 842: 08 95 ret
+
+static int8_t get_row(uint16_t f)
+{
+ if (f >= 688 - FREQ_TOLERANCE &&
+ f <= 688 + FREQ_TOLERANCE)
+ return 0;
+ 844: 80 e0 ldi r24, 0x00 ; 0
+ 846: 08 95 ret
+
+ if (f >= 781 - FREQ_TOLERANCE &&
+ f <= 781 + FREQ_TOLERANCE)
+ return 1;
+ 848: 81 e0 ldi r24, 0x01 ; 1
+ 84a: 08 95 ret
+
+ if (f >= 844 - FREQ_TOLERANCE &&
+ f <= 844 + FREQ_TOLERANCE)
+ return 2;
+ 84c: 82 e0 ldi r24, 0x02 ; 2
+ 84e: 08 95 ret
+
+ if (f >= 938 - FREQ_TOLERANCE &&
+ f <= 938 + FREQ_TOLERANCE)
+ return 3;
+
+ return -1;
+ 850: 8f ef ldi r24, 0xFF ; 255
+}
+ 852: 08 95 ret
+
+Disassembly of section .text.decode_key:
+
+000006fa <decode_key>:
+
+static char decode_key(uint16_t f1, uint16_t f2)
+{
+ 6fa: ef 92 push r14
+ 6fc: ff 92 push r15
+ 6fe: 0f 93 push r16
+ 700: 1f 93 push r17
+ 702: cf 93 push r28
+ 704: 8c 01 movw r16, r24
+ 706: 7b 01 movw r14, r22
+ {'4', '5', '6'},
+ {'7', '8', '9'},
+ {'*', '0', '#'}
+ };
+
+ int8_t col = get_column(f1);
+ 708: c2 d0 rcall .+388 ; 0x88e <get_column>
+ 70a: c8 2f mov r28, r24
+ int8_t row = get_row(f2);
+ 70c: c7 01 movw r24, r14
+ 70e: 84 d0 rcall .+264 ; 0x818 <get_row>
+
+ // The two strongest frequencies may appear in either order.
+ if (col < 0 || row < 0) {
+ 710: cc 23 and r28, r28
+ 712: 14 f0 brlt .+4 ; 0x718 <decode_key+0x1e>
+ 714: 88 23 and r24, r24
+ 716: 2c f4 brge .+10 ; 0x722 <decode_key+0x28>
+ col = get_column(f2);
+ 718: c7 01 movw r24, r14
+ 71a: b9 d0 rcall .+370 ; 0x88e <get_column>
+ 71c: c8 2f mov r28, r24
+ row = get_row(f1);
+ 71e: c8 01 movw r24, r16
+ 720: 7b d0 rcall .+246 ; 0x818 <get_row>
+ }
+
+ if (col < 0 || row < 0)
+ 722: cc 23 and r28, r28
+ 724: cc f0 brlt .+50 ; 0x758 <decode_key+0x5e>
+ 726: 88 23 and r24, r24
+ 728: cc f0 brlt .+50 ; 0x75c <decode_key+0x62>
+ return '\0';
+
+ return keypad[row][col];
+ 72a: 08 2e mov r0, r24
+ 72c: 00 0c add r0, r0
+ 72e: 99 0b sbc r25, r25
+ 730: 9c 01 movw r18, r24
+ 732: 22 0f add r18, r18
+ 734: 33 1f adc r19, r19
+ 736: 82 0f add r24, r18
+ 738: 93 1f adc r25, r19
+ 73a: 8c 0f add r24, r28
+ 73c: 91 1d adc r25, r1
+ 73e: c7 fd sbrc r28, 7
+ 740: 9a 95 dec r25
+ 742: 09 2e mov r0, r25
+ 744: 00 0c add r0, r0
+ 746: aa 0b sbc r26, r26
+ 748: 8b 5c subi r24, 0xCB ; 203
+ 74a: 9e 4f sbci r25, 0xFE ; 254
+ 74c: af 4f sbci r26, 0xFF ; 255
+ 74e: fc 01 movw r30, r24
+ 750: 84 91 lpm r24, Z
+ 752: a7 fd sbrc r26, 7
+ 754: 80 81 ld r24, Z
+ 756: 03 c0 rjmp .+6 ; 0x75e <decode_key+0x64>
+ col = get_column(f2);
+ row = get_row(f1);
+ }
+
+ if (col < 0 || row < 0)
+ return '\0';
+ 758: 80 e0 ldi r24, 0x00 ; 0
+ 75a: 01 c0 rjmp .+2 ; 0x75e <decode_key+0x64>
+ 75c: 80 e0 ldi r24, 0x00 ; 0
+
+ return keypad[row][col];
+}
+ 75e: cf 91 pop r28
+ 760: 1f 91 pop r17
+ 762: 0f 91 pop r16
+ 764: ff 90 pop r15
+ 766: ef 90 pop r14
+ 768: 08 95 ret
+
+Disassembly of section .text.lcd_pulse_enable:
+
+000008e6 <lcd_pulse_enable>:
+{
+ i2c_write_byte(LCD_ADDR, data | LCD_BACKLIGHT);
+}
+
+static void lcd_pulse_enable(uint8_t data)
+{
+ 8e6: cf 93 push r28
+ 8e8: c8 2f mov r28, r24
+ lcd_expander_write(data | LCD_EN);
+ 8ea: 84 60 ori r24, 0x04 ; 4
+ 8ec: ae d0 rcall .+348 ; 0xa4a <lcd_expander_write>
+ #else
+ //round up by default
+ __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ #endif
+
+ __builtin_avr_delay_cycles(__ticks_dc);
+ 8ee: 85 e0 ldi r24, 0x05 ; 5
+ 8f0: 8a 95 dec r24
+ 8f2: f1 f7 brne .-4 ; 0x8f0 <lcd_pulse_enable+0xa>
+ 8f4: 00 00 nop
+ _delay_us(1);
+
+ lcd_expander_write(data & ~LCD_EN);
+ 8f6: 8c 2f mov r24, r28
+ 8f8: 8b 7f andi r24, 0xFB ; 251
+ 8fa: a7 d0 rcall .+334 ; 0xa4a <lcd_expander_write>
+ 8fc: 87 ec ldi r24, 0xC7 ; 199
+ 8fe: 90 e0 ldi r25, 0x00 ; 0
+ 900: 01 97 sbiw r24, 0x01 ; 1
+ 902: f1 f7 brne .-4 ; 0x900 <lcd_pulse_enable+0x1a>
+ 904: 00 c0 rjmp .+0 ; 0x906 <lcd_pulse_enable+0x20>
+ 906: 00 00 nop
+ _delay_us(50);
+}
+ 908: cf 91 pop r28
+ 90a: 08 95 ret
+
+Disassembly of section .text.lcd_write4:
+
+00000998 <lcd_write4>:
+
+static void lcd_write4(uint8_t nibble, uint8_t mode)
+{
+ 998: cf 93 push r28
+ uint8_t data = (nibble & 0xF0) | mode | LCD_BACKLIGHT;
+ 99a: 80 7f andi r24, 0xF0 ; 240
+ 99c: 68 2b or r22, r24
+ 99e: c6 2f mov r28, r22
+ 9a0: c8 60 ori r28, 0x08 ; 8
+
+ lcd_expander_write(data);
+ 9a2: 8c 2f mov r24, r28
+ 9a4: 52 d0 rcall .+164 ; 0xa4a <lcd_expander_write>
+ lcd_pulse_enable(data);
+ 9a6: 8c 2f mov r24, r28
+ 9a8: 9e df rcall .-196 ; 0x8e6 <lcd_pulse_enable>
+}
+ 9aa: cf 91 pop r28
+ 9ac: 08 95 ret
+
+Disassembly of section .text.lcd_send:
+
+00000964 <lcd_send>:
+
+static void lcd_send(uint8_t value, uint8_t mode)
+{
+ 964: cf 93 push r28
+ 966: df 93 push r29
+ 968: c8 2f mov r28, r24
+ 96a: d6 2f mov r29, r22
+ lcd_write4(value & 0xF0, mode);
+ 96c: 80 7f andi r24, 0xF0 ; 240
+ 96e: 14 d0 rcall .+40 ; 0x998 <lcd_write4>
+ lcd_write4((value << 4) & 0xF0, mode);
+ 970: 6d 2f mov r22, r29
+ 972: 8c 2f mov r24, r28
+ 974: 82 95 swap r24
+ 976: 80 7f andi r24, 0xF0 ; 240
+ 978: 0f d0 rcall .+30 ; 0x998 <lcd_write4>
+}
+ 97a: df 91 pop r29
+ 97c: cf 91 pop r28
+ 97e: 08 95 ret
+
+Disassembly of section .text.lcd_data:
+
+00000a54 <lcd_data>:
+ _delay_ms(2);
+}
+
+static void lcd_data(uint8_t data)
+{
+ lcd_send(data, LCD_RS);
+ a54: 61 e0 ldi r22, 0x01 ; 1
+ a56: 86 df rcall .-244 ; 0x964 <lcd_send>
+ a58: 08 95 ret
+
+Disassembly of section .text.lcd_putc:
+
+00000a5a <lcd_putc>:
+}
+
+static void lcd_putc(char c)
+{
+ lcd_data((uint8_t)c);
+ a5a: fc df rcall .-8 ; 0xa54 <lcd_data>
+ a5c: 08 95 ret
+
+Disassembly of section .text.lcd_print:
+
+000008bc <lcd_print>:
+}
+
+static void lcd_print(const char *str)
+{
+ 8bc: cf 92 push r12
+ 8be: df 92 push r13
+ 8c0: ef 92 push r14
+ 8c2: 6b 01 movw r12, r22
+ 8c4: e8 2e mov r14, r24
+ while (*str)
+ 8c6: 05 c0 rjmp .+10 ; 0x8d2 <lcd_print+0x16>
+ lcd_putc(*str++);
+ 8c8: 9f ef ldi r25, 0xFF ; 255
+ 8ca: c9 1a sub r12, r25
+ 8cc: d9 0a sbc r13, r25
+ 8ce: e9 0a sbc r14, r25
+ 8d0: c4 d0 rcall .+392 ; 0xa5a <lcd_putc>
+ lcd_data((uint8_t)c);
+}
+
+static void lcd_print(const char *str)
+{
+ while (*str)
+ 8d2: f6 01 movw r30, r12
+ 8d4: 84 91 lpm r24, Z
+ 8d6: e7 fc sbrc r14, 7
+ 8d8: 80 81 ld r24, Z
+ 8da: 81 11 cpse r24, r1
+ 8dc: f5 cf rjmp .-22 ; 0x8c8 <lcd_print+0xc>
+ lcd_putc(*str++);
+}
+ 8de: ef 90 pop r14
+ 8e0: df 90 pop r13
+ 8e2: cf 90 pop r12
+ 8e4: 08 95 ret
+
+Disassembly of section .text.lcd_print_uint:
+
+00000508 <lcd_print_uint>:
+
+static void lcd_print_uint(uint16_t value, uint8_t width)
+{
+ 508: 0f 93 push r16
+ 50a: 1f 93 push r17
+ 50c: cf 93 push r28
+ 50e: df 93 push r29
+ 510: 00 d0 rcall .+0 ; 0x512 <lcd_print_uint+0xa>
+ 512: 00 d0 rcall .+0 ; 0x514 <lcd_print_uint+0xc>
+ 514: 0f 92 push r0
+ 516: cd b7 in r28, 0x3d ; 61
+ 518: de b7 in r29, 0x3e ; 62
+ 51a: ac 01 movw r20, r24
+ 51c: 06 2f mov r16, r22
+ char digits[5];
+ uint8_t n = 0;
+ 51e: e0 e0 ldi r30, 0x00 ; 0
+
+ do {
+ digits[n++] = '0' + (value % 10);
+ 520: 11 e0 ldi r17, 0x01 ; 1
+ 522: 1e 0f add r17, r30
+ 524: 9a 01 movw r18, r20
+ 526: ad ec ldi r26, 0xCD ; 205
+ 528: bc ec ldi r27, 0xCC ; 204
+ 52a: 2a d2 rcall .+1108 ; 0x980 <__umulhisi3>
+ 52c: 96 95 lsr r25
+ 52e: 87 95 ror r24
+ 530: 96 95 lsr r25
+ 532: 87 95 ror r24
+ 534: 96 95 lsr r25
+ 536: 87 95 ror r24
+ 538: 9c 01 movw r18, r24
+ 53a: 22 0f add r18, r18
+ 53c: 33 1f adc r19, r19
+ 53e: 88 0f add r24, r24
+ 540: 99 1f adc r25, r25
+ 542: 88 0f add r24, r24
+ 544: 99 1f adc r25, r25
+ 546: 88 0f add r24, r24
+ 548: 99 1f adc r25, r25
+ 54a: 82 0f add r24, r18
+ 54c: 93 1f adc r25, r19
+ 54e: 9a 01 movw r18, r20
+ 550: 28 1b sub r18, r24
+ 552: 39 0b sbc r19, r25
+ 554: c9 01 movw r24, r18
+ 556: 21 e0 ldi r18, 0x01 ; 1
+ 558: 30 e0 ldi r19, 0x00 ; 0
+ 55a: 2c 0f add r18, r28
+ 55c: 3d 1f adc r19, r29
+ 55e: 2e 0f add r18, r30
+ 560: 31 1d adc r19, r1
+ 562: f9 01 movw r30, r18
+ 564: 80 5d subi r24, 0xD0 ; 208
+ 566: 80 83 st Z, r24
+ value /= 10;
+ 568: 9a 01 movw r18, r20
+ 56a: 0a d2 rcall .+1044 ; 0x980 <__umulhisi3>
+ 56c: ac 01 movw r20, r24
+ 56e: 56 95 lsr r21
+ 570: 47 95 ror r20
+ 572: 56 95 lsr r21
+ 574: 47 95 ror r20
+ 576: 56 95 lsr r21
+ 578: 47 95 ror r20
+ } while (value && n < 5);
+ 57a: 41 15 cp r20, r1
+ 57c: 51 05 cpc r21, r1
+ 57e: 39 f0 breq .+14 ; 0x58e <lcd_print_uint+0x86>
+{
+ char digits[5];
+ uint8_t n = 0;
+
+ do {
+ digits[n++] = '0' + (value % 10);
+ 580: e1 2f mov r30, r17
+ value /= 10;
+ } while (value && n < 5);
+ 582: 15 30 cpi r17, 0x05 ; 5
+ 584: 68 f2 brcs .-102 ; 0x520 <lcd_print_uint+0x18>
+ 586: 03 c0 rjmp .+6 ; 0x58e <lcd_print_uint+0x86>
+
+ while (n < width) {
+ lcd_putc(' ');
+ 588: 80 e2 ldi r24, 0x20 ; 32
+ 58a: 67 d2 rcall .+1230 ; 0xa5a <lcd_putc>
+ width--;
+ 58c: 01 50 subi r16, 0x01 ; 1
+ do {
+ digits[n++] = '0' + (value % 10);
+ value /= 10;
+ } while (value && n < 5);
+
+ while (n < width) {
+ 58e: 10 17 cp r17, r16
+ 590: d8 f3 brcs .-10 ; 0x588 <lcd_print_uint+0x80>
+ 592: 09 c0 rjmp .+18 ; 0x5a6 <lcd_print_uint+0x9e>
+ lcd_putc(' ');
+ width--;
+ }
+
+ while (n > 0)
+ lcd_putc(digits[--n]);
+ 594: 11 50 subi r17, 0x01 ; 1
+ 596: e1 e0 ldi r30, 0x01 ; 1
+ 598: f0 e0 ldi r31, 0x00 ; 0
+ 59a: ec 0f add r30, r28
+ 59c: fd 1f adc r31, r29
+ 59e: e1 0f add r30, r17
+ 5a0: f1 1d adc r31, r1
+ 5a2: 80 81 ld r24, Z
+ 5a4: 5a d2 rcall .+1204 ; 0xa5a <lcd_putc>
+ while (n < width) {
+ lcd_putc(' ');
+ width--;
+ }
+
+ while (n > 0)
+ 5a6: 11 11 cpse r17, r1
+ 5a8: f5 cf rjmp .-22 ; 0x594 <lcd_print_uint+0x8c>
+ lcd_putc(digits[--n]);
+}
+ 5aa: 0f 90 pop r0
+ 5ac: 0f 90 pop r0
+ 5ae: 0f 90 pop r0
+ 5b0: 0f 90 pop r0
+ 5b2: 0f 90 pop r0
+ 5b4: df 91 pop r29
+ 5b6: cf 91 pop r28
+ 5b8: 1f 91 pop r17
+ 5ba: 0f 91 pop r16
+ 5bc: 08 95 ret
+
+Disassembly of section .text.lcd_command:
+
+0000090c <lcd_command>:
+ lcd_write4(value & 0xF0, mode);
+ lcd_write4((value << 4) & 0xF0, mode);
+}
+
+static void lcd_command(uint8_t cmd)
+{
+ 90c: cf 93 push r28
+ 90e: c8 2f mov r28, r24
+ lcd_send(cmd, 0);
+ 910: 60 e0 ldi r22, 0x00 ; 0
+ 912: 28 d0 rcall .+80 ; 0x964 <lcd_send>
+
+ if (cmd == 0x01 || cmd == 0x02)
+ 914: c1 50 subi r28, 0x01 ; 1
+ 916: c2 30 cpi r28, 0x02 ; 2
+ 918: 30 f4 brcc .+12 ; 0x926 <lcd_command+0x1a>
+ #else
+ //round up by default
+ __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ #endif
+
+ __builtin_avr_delay_cycles(__ticks_dc);
+ 91a: 8f e3 ldi r24, 0x3F ; 63
+ 91c: 9f e1 ldi r25, 0x1F ; 31
+ 91e: 01 97 sbiw r24, 0x01 ; 1
+ 920: f1 f7 brne .-4 ; 0x91e <lcd_command+0x12>
+ 922: 00 c0 rjmp .+0 ; 0x924 <lcd_command+0x18>
+ 924: 00 00 nop
+ _delay_ms(2);
+}
+ 926: cf 91 pop r28
+ 928: 08 95 ret
+
+Disassembly of section .text.lcd_goto:
+
+00000a26 <lcd_goto>:
+ lcd_command(0x01);
+}
+
+static void lcd_goto(uint8_t row, uint8_t col)
+{
+ uint8_t address = (row == 0) ? 0x00 : 0x40;
+ a26: 81 11 cpse r24, r1
+ a28: 80 e4 ldi r24, 0x40 ; 64
+ lcd_command(0x80 | (address + col));
+ a2a: 86 0f add r24, r22
+ a2c: 80 68 ori r24, 0x80 ; 128
+ a2e: 6e df rcall .-292 ; 0x90c <lcd_command>
+ a30: 08 95 ret
+
+Disassembly of section .text.lcd_init:
+
+0000076a <lcd_init>:
+ 76a: 2f ef ldi r18, 0xFF ; 255
+ 76c: 80 e7 ldi r24, 0x70 ; 112
+ 76e: 92 e0 ldi r25, 0x02 ; 2
+ 770: 21 50 subi r18, 0x01 ; 1
+ 772: 80 40 sbci r24, 0x00 ; 0
+ 774: 90 40 sbci r25, 0x00 ; 0
+ 776: e1 f7 brne .-8 ; 0x770 <lcd_init+0x6>
+ 778: 00 c0 rjmp .+0 ; 0x77a <lcd_init+0x10>
+ 77a: 00 00 nop
+static void lcd_init(void)
+{
+ _delay_ms(50);
+
+ // Standard HD44780 startup sequence
+ lcd_write4(0x30, 0);
+ 77c: 60 e0 ldi r22, 0x00 ; 0
+ 77e: 80 e3 ldi r24, 0x30 ; 48
+ 780: 0b d1 rcall .+534 ; 0x998 <lcd_write4>
+ 782: 8f e1 ldi r24, 0x1F ; 31
+ 784: 9e e4 ldi r25, 0x4E ; 78
+ 786: 01 97 sbiw r24, 0x01 ; 1
+ 788: f1 f7 brne .-4 ; 0x786 <lcd_init+0x1c>
+ 78a: 00 c0 rjmp .+0 ; 0x78c <lcd_init+0x22>
+ 78c: 00 00 nop
+ _delay_ms(5);
+
+ lcd_write4(0x30, 0);
+ 78e: 60 e0 ldi r22, 0x00 ; 0
+ 790: 80 e3 ldi r24, 0x30 ; 48
+ 792: 02 d1 rcall .+516 ; 0x998 <lcd_write4>
+ #else
+ //round up by default
+ __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ #endif
+
+ __builtin_avr_delay_cycles(__ticks_dc);
+ 794: 87 e5 ldi r24, 0x57 ; 87
+ 796: 92 e0 ldi r25, 0x02 ; 2
+ 798: 01 97 sbiw r24, 0x01 ; 1
+ 79a: f1 f7 brne .-4 ; 0x798 <lcd_init+0x2e>
+ 79c: 00 c0 rjmp .+0 ; 0x79e <lcd_init+0x34>
+ 79e: 00 00 nop
+ _delay_us(150);
+
+ lcd_write4(0x30, 0);
+ 7a0: 60 e0 ldi r22, 0x00 ; 0
+ 7a2: 80 e3 ldi r24, 0x30 ; 48
+ 7a4: f9 d0 rcall .+498 ; 0x998 <lcd_write4>
+ 7a6: 87 e5 ldi r24, 0x57 ; 87
+ 7a8: 92 e0 ldi r25, 0x02 ; 2
+ 7aa: 01 97 sbiw r24, 0x01 ; 1
+ 7ac: f1 f7 brne .-4 ; 0x7aa <lcd_init+0x40>
+ 7ae: 00 c0 rjmp .+0 ; 0x7b0 <lcd_init+0x46>
+ 7b0: 00 00 nop
+ _delay_us(150);
+
+ lcd_write4(0x20, 0);
+ 7b2: 60 e0 ldi r22, 0x00 ; 0
+ 7b4: 80 e2 ldi r24, 0x20 ; 32
+ 7b6: f0 d0 rcall .+480 ; 0x998 <lcd_write4>
+ 7b8: 87 e5 ldi r24, 0x57 ; 87
+ 7ba: 92 e0 ldi r25, 0x02 ; 2
+ 7bc: 01 97 sbiw r24, 0x01 ; 1
+ 7be: f1 f7 brne .-4 ; 0x7bc <lcd_init+0x52>
+ 7c0: 00 c0 rjmp .+0 ; 0x7c2 <lcd_init+0x58>
+ 7c2: 00 00 nop
+ _delay_us(150);
+
+ lcd_command(0x28); // 4-bit mode, 2 lines
+ 7c4: 88 e2 ldi r24, 0x28 ; 40
+ 7c6: a2 d0 rcall .+324 ; 0x90c <lcd_command>
+ lcd_command(0x08); // Display off
+ 7c8: 88 e0 ldi r24, 0x08 ; 8
+ 7ca: a0 d0 rcall .+320 ; 0x90c <lcd_command>
+ lcd_command(0x01); // Clear display
+ 7cc: 81 e0 ldi r24, 0x01 ; 1
+ 7ce: 9e d0 rcall .+316 ; 0x90c <lcd_command>
+ lcd_command(0x06); // Increment cursor
+ 7d0: 86 e0 ldi r24, 0x06 ; 6
+ 7d2: 9c d0 rcall .+312 ; 0x90c <lcd_command>
+ lcd_command(0x0C); // Display on, cursor off
+ 7d4: 8c e0 ldi r24, 0x0C ; 12
+ 7d6: 9a d0 rcall .+308 ; 0x90c <lcd_command>
+ 7d8: 08 95 ret
+
+Disassembly of section .text.__vector_14:
+
+00000854 <__vector_14>:
+}
+
+volatile uint16_t adc_count = 0;
+
+ISR(TIMER0_COMPA_vect)
+{
+ 854: 1f 92 push r1
+ 856: 0f 92 push r0
+ 858: 0f b6 in r0, 0x3f ; 63
+ 85a: 0f 92 push r0
+ 85c: 11 24 eor r1, r1
+ 85e: 8f 93 push r24
+ 860: ef 93 push r30
+ 862: ff 93 push r31
+ if (!(ADCSRA & (1 << ADSC)) && !block_ready) {
+ 864: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7fe07a>
+ 868: 86 fd sbrc r24, 6
+ 86a: 09 c0 rjmp .+18 ; 0x87e <__vector_14+0x2a>
+ 86c: 80 91 04 03 lds r24, 0x0304 ; 0x800304 <block_ready>
+ 870: 81 11 cpse r24, r1
+ 872: 05 c0 rjmp .+10 ; 0x87e <__vector_14+0x2a>
+ ADCSRA |= (1 << ADSC);
+ 874: ea e7 ldi r30, 0x7A ; 122
+ 876: f0 e0 ldi r31, 0x00 ; 0
+ 878: 80 81 ld r24, Z
+ 87a: 80 64 ori r24, 0x40 ; 64
+ 87c: 80 83 st Z, r24
+ }
+}
+ 87e: ff 91 pop r31
+ 880: ef 91 pop r30
+ 882: 8f 91 pop r24
+ 884: 0f 90 pop r0
+ 886: 0f be out 0x3f, r0 ; 63
+ 888: 0f 90 pop r0
+ 88a: 1f 90 pop r1
+ 88c: 18 95 reti
+
+Disassembly of section .text.__vector_21:
+
+00000666 <__vector_21>:
+
+ISR(ADC_vect)
+{
+ 666: 1f 92 push r1
+ 668: 0f 92 push r0
+ 66a: 0f b6 in r0, 0x3f ; 63
+ 66c: 0f 92 push r0
+ 66e: 11 24 eor r1, r1
+ 670: 2f 93 push r18
+ 672: 3f 93 push r19
+ 674: 8f 93 push r24
+ 676: 9f 93 push r25
+ 678: ef 93 push r30
+ 67a: ff 93 push r31
+ adc_count++;
+ 67c: 80 91 00 03 lds r24, 0x0300 ; 0x800300 <adc_count>
+ 680: 90 91 01 03 lds r25, 0x0301 ; 0x800301 <adc_count+0x1>
+ 684: 01 96 adiw r24, 0x01 ; 1
+ 686: 90 93 01 03 sts 0x0301, r25 ; 0x800301 <adc_count+0x1>
+ 68a: 80 93 00 03 sts 0x0300, r24 ; 0x800300 <adc_count>
+
+ if (!block_ready) {
+ 68e: 80 91 04 03 lds r24, 0x0304 ; 0x800304 <block_ready>
+ 692: 81 11 cpse r24, r1
+ 694: 27 c0 rjmp .+78 ; 0x6e4 <__vector_21+0x7e>
+ uint16_t i = sample_index;
+ 696: 80 91 02 03 lds r24, 0x0302 ; 0x800302 <sample_index>
+ 69a: 90 91 03 03 lds r25, 0x0303 ; 0x800303 <sample_index+0x1>
+ samples[i] = ADC;
+ 69e: 20 91 78 00 lds r18, 0x0078 ; 0x800078 <__TEXT_REGION_LENGTH__+0x7fe078>
+ 6a2: 30 91 79 00 lds r19, 0x0079 ; 0x800079 <__TEXT_REGION_LENGTH__+0x7fe079>
+ 6a6: fc 01 movw r30, r24
+ 6a8: ee 0f add r30, r30
+ 6aa: ff 1f adc r31, r31
+ 6ac: e0 50 subi r30, 0x00 ; 0
+ 6ae: ff 4f sbci r31, 0xFF ; 255
+ 6b0: 31 83 std Z+1, r19 ; 0x01
+ 6b2: 20 83 st Z, r18
+ i++;
+ 6b4: 01 96 adiw r24, 0x01 ; 1
+
+ if (i >= N_SAMPLES) {
+ 6b6: 8f 3f cpi r24, 0xFF ; 255
+ 6b8: 91 05 cpc r25, r1
+ 6ba: 81 f0 breq .+32 ; 0x6dc <__vector_21+0x76>
+ 6bc: 78 f0 brcs .+30 ; 0x6dc <__vector_21+0x76>
+ sample_index = N_SAMPLES;
+ 6be: 80 e0 ldi r24, 0x00 ; 0
+ 6c0: 91 e0 ldi r25, 0x01 ; 1
+ 6c2: 90 93 03 03 sts 0x0303, r25 ; 0x800303 <sample_index+0x1>
+ 6c6: 80 93 02 03 sts 0x0302, r24 ; 0x800302 <sample_index>
+ block_ready = 1;
+ 6ca: 81 e0 ldi r24, 0x01 ; 1
+ 6cc: 80 93 04 03 sts 0x0304, r24 ; 0x800304 <block_ready>
+ TIMSK0 &= ~(1 << OCIE0A);
+ 6d0: ee e6 ldi r30, 0x6E ; 110
+ 6d2: f0 e0 ldi r31, 0x00 ; 0
+ 6d4: 80 81 ld r24, Z
+ 6d6: 8d 7f andi r24, 0xFD ; 253
+ 6d8: 80 83 st Z, r24
+ 6da: 04 c0 rjmp .+8 ; 0x6e4 <__vector_21+0x7e>
+ } else {
+ sample_index = i;
+ 6dc: 90 93 03 03 sts 0x0303, r25 ; 0x800303 <sample_index+0x1>
+ 6e0: 80 93 02 03 sts 0x0302, r24 ; 0x800302 <sample_index>
+ }
+ }
+}
+ 6e4: ff 91 pop r31
+ 6e6: ef 91 pop r30
+ 6e8: 9f 91 pop r25
+ 6ea: 8f 91 pop r24
+ 6ec: 3f 91 pop r19
+ 6ee: 2f 91 pop r18
+ 6f0: 0f 90 pop r0
+ 6f2: 0f be out 0x3f, r0 ; 63
+ 6f4: 0f 90 pop r0
+ 6f6: 1f 90 pop r1
+ 6f8: 18 95 reti
+
+Disassembly of section .text.main:
+
+000005be <main>:
+// ============================================================
+// Main
+// ============================================================
+
+int main(void)
+{
+ 5be: cf 93 push r28
+ 5c0: df 93 push r29
+ 5c2: 00 d0 rcall .+0 ; 0x5c4 <main+0x6>
+ 5c4: 00 d0 rcall .+0 ; 0x5c6 <main+0x8>
+ 5c6: cd b7 in r28, 0x3d ; 61
+ 5c8: de b7 in r29, 0x3e ; 62
+ uint16_t f1, f2;
+
+ i2c_init();
+ 5ca: 05 d2 rcall .+1034 ; 0x9d6 <i2c_init>
+ lcd_init();
+ 5cc: ce d0 rcall .+412 ; 0x76a <lcd_init>
+ adc_sampling_init();
+ 5ce: 05 d1 rcall .+522 ; 0x7da <adc_sampling_init>
+
+ sei();
+ 5d0: 78 94 sei
+
+ lcd_goto(0, 0);
+ 5d2: 60 e0 ldi r22, 0x00 ; 0
+ 5d4: 80 e0 ldi r24, 0x00 ; 0
+ 5d6: 27 d2 rcall .+1102 ; 0xa26 <lcd_goto>
+ lcd_print("Finding tones");
+ 5d8: 6c e0 ldi r22, 0x0C ; 12
+ 5da: 71 e0 ldi r23, 0x01 ; 1
+ 5dc: 80 e0 ldi r24, 0x00 ; 0
+ 5de: 6e d1 rcall .+732 ; 0x8bc <lcd_print>
+
+ while (1) {
+ if (block_ready) {
+ 5e0: 80 91 04 03 lds r24, 0x0304 ; 0x800304 <block_ready>
+ 5e4: 88 23 and r24, r24
+ 5e6: e1 f3 breq .-8 ; 0x5e0 <main+0x22>
+ // Analyze the collected samples
+ analyze_block(samples, &f1, &f2);
+ 5e8: ae 01 movw r20, r28
+ 5ea: 4d 5f subi r20, 0xFD ; 253
+ 5ec: 5f 4f sbci r21, 0xFF ; 255
+ 5ee: be 01 movw r22, r28
+ 5f0: 6f 5f subi r22, 0xFF ; 255
+ 5f2: 7f 4f sbci r23, 0xFF ; 255
+ 5f4: 80 e0 ldi r24, 0x00 ; 0
+ 5f6: 91 e0 ldi r25, 0x01 ; 1
+ 5f8: a4 dd rcall .-1208 ; 0x142 <analyze_block>
+
+ // Decode the keypad character
+ char key = decode_key(f1, f2);
+ 5fa: 6b 81 ldd r22, Y+3 ; 0x03
+ 5fc: 7c 81 ldd r23, Y+4 ; 0x04
+ 5fe: 89 81 ldd r24, Y+1 ; 0x01
+ 600: 9a 81 ldd r25, Y+2 ; 0x02
+ 602: 7b d0 rcall .+246 ; 0x6fa <decode_key>
+ 604: 18 2f mov r17, r24
+
+ // Display the detected character when a valid pair is found
+ if (key != '\0') {
+ 606: 88 23 and r24, r24
+ 608: 69 f0 breq .+26 ; 0x624 <main+0x66>
+ lcd_goto(0, 0);
+ 60a: 60 e0 ldi r22, 0x00 ; 0
+ 60c: 80 e0 ldi r24, 0x00 ; 0
+ 60e: 0b d2 rcall .+1046 ; 0xa26 <lcd_goto>
+ lcd_print("Key: ");
+ 610: 6a e1 ldi r22, 0x1A ; 26
+ 612: 71 e0 ldi r23, 0x01 ; 1
+ 614: 80 e0 ldi r24, 0x00 ; 0
+ 616: 52 d1 rcall .+676 ; 0x8bc <lcd_print>
+ lcd_putc(key);
+ 618: 81 2f mov r24, r17
+ 61a: 1f d2 rcall .+1086 ; 0xa5a <lcd_putc>
+ lcd_print(" ");
+ 61c: 60 e2 ldi r22, 0x20 ; 32
+ 61e: 71 e0 ldi r23, 0x01 ; 1
+ 620: 80 e0 ldi r24, 0x00 ; 0
+ 622: 4c d1 rcall .+664 ; 0x8bc <lcd_print>
+ }
+
+ // Show detected frequencies for debugging
+ lcd_goto(1, 0);
+ 624: 60 e0 ldi r22, 0x00 ; 0
+ 626: 81 e0 ldi r24, 0x01 ; 1
+ 628: fe d1 rcall .+1020 ; 0xa26 <lcd_goto>
+ lcd_print("F1:");
+ 62a: 6c e2 ldi r22, 0x2C ; 44
+ 62c: 71 e0 ldi r23, 0x01 ; 1
+ 62e: 80 e0 ldi r24, 0x00 ; 0
+ 630: 45 d1 rcall .+650 ; 0x8bc <lcd_print>
+ lcd_print_uint(f1, 4);
+ 632: 64 e0 ldi r22, 0x04 ; 4
+ 634: 89 81 ldd r24, Y+1 ; 0x01
+ 636: 9a 81 ldd r25, Y+2 ; 0x02
+ 638: 67 df rcall .-306 ; 0x508 <lcd_print_uint>
+ lcd_print(" F2:");
+ 63a: 60 e3 ldi r22, 0x30 ; 48
+ 63c: 71 e0 ldi r23, 0x01 ; 1
+ 63e: 80 e0 ldi r24, 0x00 ; 0
+ 640: 3d d1 rcall .+634 ; 0x8bc <lcd_print>
+ lcd_print_uint(f2, 4);
+ 642: 64 e0 ldi r22, 0x04 ; 4
+ 644: 8b 81 ldd r24, Y+3 ; 0x03
+ 646: 9c 81 ldd r25, Y+4 ; 0x04
+ 648: 5f df rcall .-322 ; 0x508 <lcd_print_uint>
+
+ // Restart sampling atomically
+ cli();
+ 64a: f8 94 cli
+
+ sample_index = 0;
+ 64c: 10 92 03 03 sts 0x0303, r1 ; 0x800303 <sample_index+0x1>
+ 650: 10 92 02 03 sts 0x0302, r1 ; 0x800302 <sample_index>
+ block_ready = 0;
+ 654: 10 92 04 03 sts 0x0304, r1 ; 0x800304 <block_ready>
+ TIMSK0 |= (1 << OCIE0A);
+ 658: ee e6 ldi r30, 0x6E ; 110
+ 65a: f0 e0 ldi r31, 0x00 ; 0
+ 65c: 80 81 ld r24, Z
+ 65e: 82 60 ori r24, 0x02 ; 2
+ 660: 80 83 st Z, r24
+
+ sei();
+ 662: 78 94 sei
+ 664: bd cf rjmp .-134 ; 0x5e0 <main+0x22>
+
+Disassembly of section .text.libgcc.mul:
+
+0000092a <__mulsi3>:
+ 92a: db 01 movw r26, r22
+ 92c: 8f 93 push r24
+ 92e: 9f 93 push r25
+ 930: 48 d0 rcall .+144 ; 0x9c2 <__muluhisi3>
+ 932: bf 91 pop r27
+ 934: af 91 pop r26
+ 936: a2 9f mul r26, r18
+ 938: 80 0d add r24, r0
+ 93a: 91 1d adc r25, r1
+ 93c: a3 9f mul r26, r19
+ 93e: 90 0d add r25, r0
+ 940: b2 9f mul r27, r18
+ 942: 90 0d add r25, r0
+ 944: 11 24 eor r1, r1
+ 946: 08 95 ret
+
+Disassembly of section .text.libgcc.mul:
+
+00000980 <__umulhisi3>:
+ 980: a2 9f mul r26, r18
+ 982: b0 01 movw r22, r0
+ 984: b3 9f mul r27, r19
+ 986: c0 01 movw r24, r0
+ 988: a3 9f mul r26, r19
+ 98a: 01 d0 rcall .+2 ; 0x98e <__umulhisi3+0xe>
+ 98c: b2 9f mul r27, r18
+ 98e: 70 0d add r23, r0
+ 990: 81 1d adc r24, r1
+ 992: 11 24 eor r1, r1
+ 994: 91 1d adc r25, r1
+ 996: 08 95 ret
+
+Disassembly of section .text.libgcc.mul:
+
+00000a32 <__usmulhisi3>:
+ a32: a6 df rcall .-180 ; 0x980 <__umulhisi3>
+
+00000a34 <__usmulhisi3_tail>:
+ a34: b7 ff sbrs r27, 7
+ a36: 08 95 ret
+ a38: 82 1b sub r24, r18
+ a3a: 93 0b sbc r25, r19
+ a3c: 08 95 ret
+
+Disassembly of section .text.libgcc.mul:
+
+000009c2 <__muluhisi3>:
+ 9c2: de df rcall .-68 ; 0x980 <__umulhisi3>
+ 9c4: a5 9f mul r26, r21
+ 9c6: 90 0d add r25, r0
+ 9c8: b4 9f mul r27, r20
+ 9ca: 90 0d add r25, r0
+ 9cc: a4 9f mul r26, r20
+ 9ce: 80 0d add r24, r0
+ 9d0: 91 1d adc r25, r1
+ 9d2: 11 24 eor r1, r1
+ 9d4: 08 95 ret
+
+Disassembly of section .text.libgcc.mul:
+
+00000a3e <__mulshisi3>:
+ a3e: b7 ff sbrs r27, 7
+ a40: c0 cf rjmp .-128 ; 0x9c2 <__muluhisi3>
+
+00000a42 <__mulohisi3>:
+ a42: bf df rcall .-130 ; 0x9c2 <__muluhisi3>
+ a44: 82 1b sub r24, r18
+ a46: 93 0b sbc r25, r19
+ a48: 08 95 ret
+
+Disassembly of section .text.libgcc:
+
+00000a08 <__xload_2>:
+ a08: 57 fd sbrc r21, 7
+ a0a: 03 c0 rjmp .+6 ; 0xa12 <__xload_2+0xa>
+ a0c: 65 91 lpm r22, Z+
+ a0e: 75 91 lpm r23, Z+
+ a10: 08 95 ret
+ a12: 61 91 ld r22, Z+
+ a14: 71 91 ld r23, Z+
+ a16: 08 95 ret
+
+Disassembly of section .text.__dummy_fini:
+
+00000a60 <_fini>:
+ a60: 08 95 ret
+
+Disassembly of section .text.__dummy_funcs_on_exit:
+
+00000a62 <__funcs_on_exit>:
+ a62: 08 95 ret
+
+Disassembly of section .text.__dummy_simulator_exit:
+
+00000a64 <__simulator_exit>:
+ a64: 08 95 ret
+
+Disassembly of section .text.exit:
+
+00000a18 <exit>:
+ a18: ec 01 movw r28, r24
+ a1a: 23 d0 rcall .+70 ; 0xa62 <__funcs_on_exit>
+ a1c: 21 d0 rcall .+66 ; 0xa60 <_fini>
+ a1e: ce 01 movw r24, r28
+ a20: 21 d0 rcall .+66 ; 0xa64 <__simulator_exit>
+ a22: ce 01 movw r24, r28
+ a24: 20 d0 rcall .+64 ; 0xa66 <_Exit>
+
+Disassembly of section .text._Exit:
+
+00000a66 <_Exit>:
+ a66: 0f db rcall .-2530 ; 0x86 <_exit>
--- /dev/null
+Archive member included to satisfy reference by file (symbol)
+
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ main.o (__mulsi3)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ main.o (__do_clear_bss)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ main.o (__umulhisi3)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ main.o (__usmulhisi3)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o) (__muluhisi3)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ main.o (__mulshisi3)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ main.o (__xload_2)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o (exit)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o) (_Exit)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o) (_exit)
+
+Discarded input sections
+
+ .data 0x0000000000000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .bss 0x0000000000000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .text 0x0000000000000000 0x0 main.o
+ .data 0x0000000000000000 0x0 main.o
+ .bss 0x0000000000000000 0x0 main.o
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .stack.descriptors
+ 0x0000000000000000 0x16 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.mul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .stack.descriptors
+ 0x0000000000000000 0x19 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .stack.descriptors
+ 0x0000000000000000 0x39 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .stack.descriptors
+ 0x0000000000000000 0x19 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .stack.descriptors
+ 0x0000000000000000 0x32 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.mul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .stack.descriptors
+ 0x0000000000000000 0x17 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.mul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .stack.descriptors
+ 0x0000000000000000 0x13 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+
+Memory Configuration
+
+Name Origin Length Attributes
+text 0x0000000000000000 0x0000000000002000 xr
+data 0x0000000000800100 0x0000000000000400 rw !x
+eeprom 0x0000000000810000 0x0000000000000200 rw !x
+fuse 0x0000000000820000 0x0000000000000003 rw !x
+lock 0x0000000000830000 0x0000000000000400 rw !x
+signature 0x0000000000840000 0x0000000000000400 rw !x
+user_signatures 0x0000000000850000 0x0000000000000400 rw !x
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+LOAD main.o
+START GROUP
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libm.a
+END GROUP
+START GROUP
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libm.a
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const\libatmega88p.a
+END GROUP
+ 0x0000000000000000 __TEXT_REGION_ORIGIN__ = DEFINED (__TEXT_REGION_ORIGIN__)?__TEXT_REGION_ORIGIN__:0x0
+ [0x0000000000800100] __DATA_REGION_ORIGIN__ = DEFINED (__DATA_REGION_ORIGIN__)?__DATA_REGION_ORIGIN__:0x800060
+ [0x0000000000002000] __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x2000
+ [0x0000000000000400] __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
+ [0x0000000000000200] __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
+ [0x0000000000000003] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
+ 0x0000000000000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
+ 0x0000000000000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
+ 0x0000000000000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text 0x0000000000000000 0x8a
+ *(.vectors)
+ .vectors 0x0000000000000000 0x34 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x0000000000000000 __vector_default
+ 0x0000000000000000 __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+ *(.dinit)
+ .dinit 0x0000000000000034 0x5 data_init
+ 0x000000000000003a . = ALIGN (0x2)
+ *fill* 0x0000000000000039 0x1
+ 0x000000000000003a __trampolines_start = .
+ *(.trampolines)
+ .trampolines 0x000000000000003a 0x0 linker stubs
+ *(.trampolines*)
+ 0x000000000000003a __trampolines_end = .
+ *libprintf_flt.a:*(.progmem.data)
+ *libc.a:*(.progmem.data)
+ 0x000000000000003a . = ALIGN (0x2)
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+ 0x000000000000003a __ctors_start = .
+ *(.ctors)
+ 0x000000000000003a __ctors_end = .
+ 0x000000000000003a __dtors_start = .
+ *(.dtors)
+ 0x000000000000003a __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0 0x000000000000003a 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x000000000000003a __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2 0x000000000000003a 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4 0x0000000000000046 0x3c c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ 0x0000000000000046 __do_copy_data
+ 0x0000000000000074 __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9 0x0000000000000082 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ *(.init9)
+ 0x0000000000000086 . = ALIGN (0x2)
+ *(.fini9)
+ .fini9 0x0000000000000086 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ 0x0000000000000086 _exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0 0x0000000000000086 0x4 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ *(.fini0)
+ 0x000000000000008a _etext = .
+
+.data 0x0000000000800100 0x0 load address 0x000000000000008a
+ [!provide] PROVIDE (__data_start, .)
+ *(.gnu.linkonce.d*)
+ *(.gnu.linkonce.r*)
+ 0x0000000000800100 . = ALIGN (0x2)
+ 0x0000000000800100 _edata = .
+ [!provide] PROVIDE (__data_end, .)
+
+.bss 0x0000000000800100 0x0
+ [!provide] PROVIDE (__bss_start, .)
+ *(COMMON)
+ [!provide] PROVIDE (__bss_end, .)
+ 0x000000000000008a __data_load_start = LOADADDR (.data)
+ 0x000000000000008a __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit 0x0000000000800100 0x0
+ [!provide] PROVIDE (__noinit_start, .)
+ *(.noinit*)
+ [!provide] PROVIDE (__noinit_end, .)
+ 0x0000000000800100 _end = .
+
+.eeprom 0x0000000000810000 0x0
+ *(.eeprom*)
+ 0x0000000000810000 __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.user_signatures
+ *(.user_signatures*)
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment 0x0000000000000000 0x2f
+ *(.comment)
+ .comment 0x0000000000000000 0x2f main.o
+ 0x30 (size before relaxing)
+ .comment 0x000000000000002f 0x30 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .comment 0x000000000000002f 0x30 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+
+.stack.descriptors.hdr
+ 0x0000000000000000 0x62
+ .stack.descriptors.hdr
+ 0x0000000000000000 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ .stack.descriptors.hdr
+ 0x000000000000000e 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ .stack.descriptors.hdr
+ 0x000000000000001c 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ .stack.descriptors.hdr
+ 0x000000000000002a 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ .stack.descriptors.hdr
+ 0x0000000000000038 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ .stack.descriptors.hdr
+ 0x0000000000000046 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ .stack.descriptors.hdr
+ 0x0000000000000054 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+
+.note.GNU-stack
+ 0x0000000000000000 0x0
+ .note.GNU-stack
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .note.GNU-stack
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+
+.note.gnu.build-id
+ *(.note.gnu.build-id)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges 0x0000000000000000 0xd8
+ *(.debug_aranges)
+ .debug_aranges
+ 0x0000000000000000 0xd8 main.o
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info 0x0000000000000000 0x1650
+ *(.debug_info .gnu.linkonce.wi.*)
+ .debug_info 0x0000000000000000 0x5f4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .debug_info 0x00000000000005f4 0x105c main.o
+
+.debug_abbrev 0x0000000000000000 0x87b
+ *(.debug_abbrev)
+ .debug_abbrev 0x0000000000000000 0x5a2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .debug_abbrev 0x00000000000005a2 0x2d9 main.o
+
+.debug_line 0x0000000000000000 0x8a4
+ *(.debug_line .debug_line.* .debug_line_end)
+ .debug_line 0x0000000000000000 0x137 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .debug_line 0x0000000000000137 0x76d main.o
+
+.debug_frame 0x0000000000000000 0x2c4
+ *(.debug_frame)
+ .debug_frame 0x0000000000000000 0x2c4 main.o
+
+.debug_str 0x0000000000000000 0x233
+ *(.debug_str)
+ .debug_str 0x0000000000000000 0x208 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .debug_str 0x0000000000000208 0x2b main.o
+
+.debug_loc 0x0000000000000000 0xdf0
+ *(.debug_loc)
+ .debug_loc 0x0000000000000000 0xdf0 main.o
+
+.debug_macinfo
+ *(.debug_macinfo)
+
+.debug_weaknames
+ *(.debug_weaknames)
+
+.debug_funcnames
+ *(.debug_funcnames)
+
+.debug_typenames
+ *(.debug_typenames)
+
+.debug_varnames
+ *(.debug_varnames)
+
+.debug_pubtypes
+ *(.debug_pubtypes)
+
+.debug_ranges 0x0000000000000000 0x128
+ *(.debug_ranges)
+ .debug_ranges 0x0000000000000000 0x128 main.o
+
+.debug_macro
+ *(.debug_macro)
+OUTPUT(halloween_puff.elf elf32-avr)
+LOAD linker stubs
+LOAD data_init
+
+.note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c
+ .note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.bss.adc_count 0x0000000000800300 0x2
+ .bss.adc_count
+ 0x0000000000800300 0x2 main.o
+ 0x0000000000800300 adc_count
+
+.bss.block_ready
+ 0x0000000000800304 0x1
+ .bss.block_ready
+ 0x0000000000800304 0x1 main.o
+
+.bss.sample_index
+ 0x0000000000800302 0x2
+ .bss.sample_index
+ 0x0000000000800302 0x2 main.o
+
+.bss.samples 0x0000000000800100 0x200
+ .bss.samples 0x0000000000800100 0x200 main.o
+
+.progmemx.data.coeff
+ 0x000000000000008a 0x82
+ .progmemx.data.coeff
+ 0x000000000000008a 0x82 main.o
+
+.progmemx.data 0x000000000000010c 0x29
+ .progmemx.data
+ 0x000000000000010c 0x29 main.o
+
+.progmemx.data.keypad.2090
+ 0x0000000000000135 0xc
+ .progmemx.data.keypad.2090
+ 0x0000000000000135 0xc main.o
+
+.text.analyze_block
+ 0x0000000000000142 0x3c6
+ .text.analyze_block
+ 0x0000000000000142 0x3c6 main.o
+
+.text.lcd_print_uint
+ 0x0000000000000508 0xb6
+ .text.lcd_print_uint
+ 0x0000000000000508 0xb6 main.o
+
+.text.main 0x00000000000005be 0xa8
+ .text.main 0x00000000000005be 0xa8 main.o
+ 0x00000000000005be main
+
+.text.__vector_21
+ 0x0000000000000666 0x94
+ .text.__vector_21
+ 0x0000000000000666 0x94 main.o
+ 0x0000000000000666 __vector_21
+
+.text.decode_key
+ 0x00000000000006fa 0x70
+ .text.decode_key
+ 0x00000000000006fa 0x70 main.o
+
+.text.lcd_init 0x000000000000076a 0x70
+ .text.lcd_init
+ 0x000000000000076a 0x70 main.o
+
+.text.adc_sampling_init
+ 0x00000000000007da 0x3e
+ .text.adc_sampling_init
+ 0x00000000000007da 0x3e main.o
+
+.text.get_row 0x0000000000000818 0x3c
+ .text.get_row 0x0000000000000818 0x3c main.o
+
+.text.__vector_14
+ 0x0000000000000854 0x3a
+ .text.__vector_14
+ 0x0000000000000854 0x3a main.o
+ 0x0000000000000854 __vector_14
+
+.text.get_column
+ 0x000000000000088e 0x2e
+ .text.get_column
+ 0x000000000000088e 0x2e main.o
+
+.text.lcd_print
+ 0x00000000000008bc 0x2a
+ .text.lcd_print
+ 0x00000000000008bc 0x2a main.o
+
+.text.lcd_pulse_enable
+ 0x00000000000008e6 0x26
+ .text.lcd_pulse_enable
+ 0x00000000000008e6 0x26 main.o
+
+.text.lcd_command
+ 0x000000000000090c 0x1e
+ .text.lcd_command
+ 0x000000000000090c 0x1e main.o
+
+.text.libgcc.mul
+ 0x000000000000092a 0x1e
+ .text.libgcc.mul
+ 0x000000000000092a 0x1e c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulsi3.o)
+ 0x000000000000092a __mulsi3
+
+.text.i2c_write_byte
+ 0x0000000000000948 0x1c
+ .text.i2c_write_byte
+ 0x0000000000000948 0x1c main.o
+
+.text.lcd_send 0x0000000000000964 0x1c
+ .text.lcd_send
+ 0x0000000000000964 0x1c main.o
+
+.text.libgcc.mul
+ 0x0000000000000980 0x18
+ .text.libgcc.mul
+ 0x0000000000000980 0x18 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_umulhisi3.o)
+ 0x0000000000000980 __umulhisi3
+
+.text.lcd_write4
+ 0x0000000000000998 0x16
+ .text.lcd_write4
+ 0x0000000000000998 0x16 main.o
+
+.text.i2c_write
+ 0x00000000000009ae 0x14
+ .text.i2c_write
+ 0x00000000000009ae 0x14 main.o
+
+.text.libgcc.mul
+ 0x00000000000009c2 0x14
+ .text.libgcc.mul
+ 0x00000000000009c2 0x14 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_muluhisi3.o)
+ 0x00000000000009c2 __muluhisi3
+
+.text.i2c_init 0x00000000000009d6 0x12
+ .text.i2c_init
+ 0x00000000000009d6 0x12 main.o
+
+.text.i2c_start
+ 0x00000000000009e8 0x10
+ .text.i2c_start
+ 0x00000000000009e8 0x10 main.o
+
+.text.i2c_stop 0x00000000000009f8 0x10
+ .text.i2c_stop
+ 0x00000000000009f8 0x10 main.o
+
+.text.libgcc 0x0000000000000a08 0x10
+ .text.libgcc 0x0000000000000a08 0x10 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_xload_2.o)
+ 0x0000000000000a08 __xload_2
+
+.text.exit 0x0000000000000a18 0xe
+ .text.exit 0x0000000000000a18 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000a18 exit
+
+.text.lcd_goto 0x0000000000000a26 0xc
+ .text.lcd_goto
+ 0x0000000000000a26 0xc main.o
+
+.text.libgcc.mul
+ 0x0000000000000a32 0xc
+ .text.libgcc.mul
+ 0x0000000000000a32 0xc c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_usmulhisi3.o)
+ 0x0000000000000a32 __usmulhisi3
+ 0x0000000000000a34 __usmulhisi3_tail
+
+.text.libgcc.mul
+ 0x0000000000000a3e 0xc
+ .text.libgcc.mul
+ 0x0000000000000a3e 0xc c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_mulshisi3.o)
+ 0x0000000000000a3e __mulshisi3
+ 0x0000000000000a42 __mulohisi3
+
+.text.lcd_expander_write
+ 0x0000000000000a4a 0xa
+ .text.lcd_expander_write
+ 0x0000000000000a4a 0xa main.o
+
+.text.lcd_data 0x0000000000000a54 0x6
+ .text.lcd_data
+ 0x0000000000000a54 0x6 main.o
+
+.text.lcd_putc 0x0000000000000a5a 0x4
+ .text.lcd_putc
+ 0x0000000000000a5a 0x4 main.o
+
+.text 0x0000000000000a5e 0x2
+ .text 0x0000000000000a5e 0x2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x0000000000000a5e __vector_22
+ 0x0000000000000a5e __vector_1
+ 0x0000000000000a5e __vector_24
+ 0x0000000000000a5e __vector_12
+ 0x0000000000000a5e __bad_interrupt
+ 0x0000000000000a5e __vector_6
+ 0x0000000000000a5e __vector_3
+ 0x0000000000000a5e __vector_23
+ 0x0000000000000a5e __vector_25
+ 0x0000000000000a5e __vector_11
+ 0x0000000000000a5e __vector_13
+ 0x0000000000000a5e __vector_17
+ 0x0000000000000a5e __vector_19
+ 0x0000000000000a5e __vector_7
+ 0x0000000000000a5e __vector_5
+ 0x0000000000000a5e __vector_4
+ 0x0000000000000a5e __vector_9
+ 0x0000000000000a5e __vector_2
+ 0x0000000000000a5e __vector_15
+ 0x0000000000000a5e __vector_8
+ 0x0000000000000a5e __vector_10
+ 0x0000000000000a5e __vector_16
+ 0x0000000000000a5e __vector_18
+ 0x0000000000000a5e __vector_20
+
+.text.__dummy_fini
+ 0x0000000000000a60 0x2
+ .text.__dummy_fini
+ 0x0000000000000a60 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000a60 _fini
+
+.text.__dummy_funcs_on_exit
+ 0x0000000000000a62 0x2
+ .text.__dummy_funcs_on_exit
+ 0x0000000000000a62 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000a62 __funcs_on_exit
+
+.text.__dummy_simulator_exit
+ 0x0000000000000a64 0x2
+ .text.__dummy_simulator_exit
+ 0x0000000000000a64 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000a64 __simulator_exit
+
+.text._Exit 0x0000000000000a66 0x2
+ .text._Exit 0x0000000000000a66 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ 0x0000000000000a66 _Exit
--- /dev/null
+main.d main.o: .././main.c \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\io.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\sfr_defs.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\inttypes.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\features.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\stdint.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\alltypes.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\stdint.h \
+ C:/Program\ Files\ (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/include/avr/iom88p.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\portpins.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\common.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\fuse.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\lock.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\interrupt.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay_basic.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\math.h
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\io.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\inttypes.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\features.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\stdint.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\alltypes.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\stdint.h:
+
+C:/Program\ Files\ (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/include/avr/iom88p.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\portpins.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\common.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\fuse.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\lock.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\interrupt.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay_basic.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\math.h:
--- /dev/null
+################################################################################
+# Automatically-generated file. Do not edit or delete the file
+################################################################################
+
+main.c
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <executable name="halloween_puff.elf">
+ <memory name="program">
+ <units>bytes</units>
+ <length>8192</length>
+ <used>2663</used>
+ <free>5529</free>
+ </memory>
+ <memory name="data">
+ <units>bytes</units>
+ <length>1024</length>
+ <used>517</used>
+ <free>507</free>
+ </memory>
+ </executable>
+</project>
--- /dev/null
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+SHELL := cmd.exe
+RM := rm -rf
+
+USER_OBJS :=
+
+LIBS :=
+PROJ :=
+
+O_SRCS :=
+C_SRCS :=
+S_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+PREPROCESSING_SRCS :=
+OBJS :=
+OBJS_AS_ARGS :=
+C_DEPS :=
+C_DEPS_AS_ARGS :=
+EXECUTABLES :=
+OUTPUT_FILE_PATH :=
+OUTPUT_FILE_PATH_AS_ARGS :=
+AVR_APP_PATH :=$$$AVR_APP_PATH$$$
+QUOTE := "
+ADDITIONAL_DEPENDENCIES:=
+OUTPUT_FILE_DEP:=
+LIB_DEP:=
+LINKER_SCRIPT_DEP:=
+
+# Every subdirectory with source files must be described here
+SUBDIRS :=
+
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../main.c
+
+
+PREPROCESSING_SRCS +=
+
+
+ASM_SRCS +=
+
+
+OBJS += \
+main.o
+
+OBJS_AS_ARGS += \
+main.o
+
+C_DEPS += \
+main.d
+
+C_DEPS_AS_ARGS += \
+main.d
+
+OUTPUT_FILE_PATH +=halloween_puff.elf
+
+OUTPUT_FILE_PATH_AS_ARGS +=halloween_puff.elf
+
+ADDITIONAL_DEPENDENCIES:=
+
+OUTPUT_FILE_DEP:= ./makedep.mk
+
+LIB_DEP+=
+
+LINKER_SCRIPT_DEP+=
+
+
+# AVR32/GNU C Compiler
+./main.o: .././main.c
+ @echo Building file: $<
+ @echo Invoking: XC8 C Compiler : 2.36
+ $(QUOTE)C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe$(QUOTE) -mcpu=ATmega88P -mdfp="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8" -c -x c -funsigned-char -funsigned-bitfields -mext=cci -D__ATmega88P__ -DNDEBUG -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
+ @echo Finished building: $<
+
+
+
+
+
+# AVR32/GNU Preprocessing Assembler
+
+
+
+# AVR32/GNU Assembler
+
+
+
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
+
+$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
+ @echo Building target: $@
+ @echo Invoking: XC8 C Linker : 2.36
+ $(QUOTE)C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -mcpu=ATmega88P -mdfp="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8" -Wl,-Map="halloween_puff.map" -funsigned-char -funsigned-bitfields -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax --memorysummary,memoryfile.xml
+ @echo Finished building target: $@
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "halloween_puff.elf" "halloween_puff.hex"
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "halloween_puff.elf" "halloween_puff.eep" || exit 0
+ "C:\Program Files\Microchip\xc8\v2.36\bin\avr-objdump.exe" -h -S "halloween_puff.elf" > "halloween_puff.lss"
+
+
+
+
+
+
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
+ -$(RM) $(C_DEPS_AS_ARGS)
+ rm -rf "halloween_puff.elf" "halloween_puff.hex" "halloween_puff.eep" "halloween_puff.map" "halloween_puff.usersignatures" "halloween_puff.a" "halloween_puff.lss"
+
\ No newline at end of file
--- /dev/null
+:00000001FF
--- /dev/null
+:100000001FC046C045C044C043C042C041C040C0FC
+:100010003FC03EC03DC03CC03BC03AC039C038C004
+:1000200037C036C035C034C033C032C031C030C034
+:100030002FC02EC00100010C0005A4010C01158089
+:1000400011241FBECFEFD4E0DEBFCDBFE4E3F0E06C
+:1000500040E017C0B591A59135912591059107FD17
+:100060000CC095918591EF01F92FE82F05900D9225
+:10007000A217B307D9F7FE0104C01D92A217B30758
+:10008000E1F7E034F40731F76CD084C2F894FFCF85
+:02009000B7CFE8
+:1000920094EA9093BC009091BC0097FFFCCF880F2C
+:1000A2008093BB0084E88093BC008091BC0087FFF2
+:1000B200FCCF6093BB0084E88093BC008091BC00BD
+:1000C20087FFFCCF84E98093BC008091BC0084FD53
+:0400D200FCCF0895C2
+:1000D600CF93C82F682F6C6087E2D8DF00006C2FA3
+:1000E6006B7F686087E2D2DF80E18A95F1F700C016
+:0400F600CF91089509
+:1000FA001F93CF93DF93C82FD62FD860182F107F66
+:10010A001D2B612F686087E2BFDF812FDFDFC29579
+:10011A00C07FCD2B6C2F686087E2B6DF8C2FDF9112
+:06012A00CF911F91D3CF1D
+:10013000426F6D6220706C616E7465642100436F64
+:10014000756E74646F776E3A200050756666210094
+:1001500057726F6E672050494E210050494E3A2029
+:01016000009E
+:1001610000CF93DF93CDB7DEB763970FB6F894DE78
+:10017100BF0FBECDBF8AB18F718AB98BB1806E8B33
+:10018100B98AB18F608AB987B18B6087B918B81005
+:1001910092B90082E08093B80084E08093BC008330
+:1001A100ED90E30197F1F700C0000068E387E2708A
+:1001B100DF88E390DFA1EEB4E01197F1F700C00012
+:1001C1000068E387E265DF88E385DFB2E3BA95F192
+:1001D100F768E387E25DDF88E37DDFE2E3EA95F13B
+:1001E100F768E287E255DF88E275DFF2E3FA95F11D
+:1001F100F760E088E281DF60E088E07EDF60E08137
+:10020100E07BDF83EF91E00197F1F700C000006030
+:10021100E086E072DF60E08CE06FDF60E081E06C3F
+:10022100DFA3EFB1E01197F1F700C0000060E080BB
+:10023100E863DFACE5CA2EA1E0DA2EA0E0EA2E8069
+:10024100E561E05ADFF6018491E7FC8081BFEFCBE5
+:100251001ADB0AEB0A8111F4CF1D8681E08E8782B9
+:10026100E08F8783E0888B85E0898B86E08A8B87A6
+:10027100E08B8B8CE0E0E0F1E0DE01119601900D66
+:10028100928A95E1F760E001E010E0E8E0FE2EFAE5
+:10029100E09F2EFE013D9640E050E08AB1807F8ACA
+:1002A100B98BB1807F8BB92AB1DF01C801019002FE
+:1002B100C0880F991F0A94E2F7822B8AB99BB198E3
+:1002C100010C9002C0220F331F0A94E2F7822F80A3
+:1002D1009589238BB923E02A95F1F70000DE0151BE
+:1002E1009620E030E089B190E00D9002C0959587AD
+:1002F100950A94E2F780FF0CC02F5F3F4F23303106
+:100301000589F74F5F5F4F4430510539F660E0C111
+:10031100CFCA01880F991F840F951FA1E0B0E0ACEF
+:100321000FBD1F8A0F9B1FDC01A20FB31FBC90BB27
+:100331002041F36B1509F4ADCF80ED8B0D8A3010A0
+:10034100F580910C018730F0F4439AE3EDF0E3314D
+:1003510097F1F700C00000439880910C01E82FF05D
+:10036100E0E35FFE4FB08291E0980F90930C018B18
+:100371005F60E08068C1DE61E08B2DBEDE80910CA4
+:1003810001873011F06B2D85CF109214018FE4930A
+:10039100EC0197F1F700C000002DE031E087E8950E
+:1003A100E0A0E047E306C0FC014491A7FD408101C4
+:1003B10096A11DF90151919F015413BBC08D38F5D0
+:1003C100E09F07F0E0AF0779F760E081E095DEA3F9
+:1003D100EFB1E01197F1F700C0000060E080E88C18
+:1003E100DE82E430E3C32E31E0D32E30E0E32E2F62
+:1003F100EFC21AD20AE20A61E07FDEF6018491E7D8
+:10040100FC80818111F4CF6AE0A62E60E080EC745B
+:10041100DE83E45EE3C52E51E0D52E50E0E52E3FAC
+:10042100EFC31AD30AE30A61E067DEF6018491E7BC
+:10043100FC80818111F4CFFA2D27E6F202E12C1123
+:1004410024E594E594A7FCE39461E080E38E0D54E8
+:10045100DE8A2D3AE0E39E8019112461E0805D4C33
+:10046100DE61E080E249DEF6B881E086B9A7E8B353
+:10047100E11197F1F700C0000086B9BFE9EDEFF295
+:10048100E0B150E040F040E1F700C00000AA94A1C3
+:1004910010BCCF60E081E030DE83EF91E00197F1A5
+:1004A100F700C0000060E080E827DE80E54AE4C490
+:1004B1002E41E0D42E40E0E42E9FEFC91AD90AE97B
+:1004C1000A61E01ADEF6018491E7FC80818111F472
+:1004D100CF18B898B8AAE2B0E5EEEFF0E0A150B0BD
+:1004E10040E040F040D9F7000010920C0110920D4D
+:1004F1000160E081E001DE83EF91E00197F1F70017
+:10050100C0000060E080E8F8DD80E59BE5C92E9140
+:10051100E0D92E90E0E92E9FEFC91AD90AE90A61C4
+:10052100E0EBDDF6018491E7FC80818111F4CF6B72
+:100531002DB0CE60E081E0E0DDE3EFF1E03197F155
+:10054100F700C0000060E080E8D7DD87E520E5C264
+:100551002E21E0D22E20E0E22E2FEFC21AD20AE2A3
+:100561000A61E0CADDF6018491E7FC80818111F422
+:10057100CF3FE342E48FE0315040408040E1F7005B
+:05058100C00000B2CF34
+:080586003733353536303800FB
+:02058E000895CE
+:020590000895CC
+:020592000895CA
+:0E059400EC01FCDFFADFCE01FADFCE0100D071
+:0205A20074DD06
+:0C05A4003132333435363738392A3023F1
+:00000001FF
--- /dev/null
+
+halloween_puff.elf: file format elf32-avr
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .data 00000000 00800100 000005b0 00000664 2**0
+ ALLOC, LOAD, DATA
+ 1 .text 00000090 00000000 00000000 000000b4 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .comment 0000002f 00000000 00000000 00000664 2**0
+ CONTENTS, READONLY
+ 3 .stack.descriptors.hdr 0000000e 00000000 00000000 00000693 2**0
+ CONTENTS, READONLY
+ 4 .debug_info 000005f4 00000000 00000000 000006a1 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 5 .debug_abbrev 000005a2 00000000 00000000 00000c95 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 6 .debug_line 00000137 00000000 00000000 00001237 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 7 .debug_str 00000208 00000000 00000000 0000136e 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 8 .text 00000002 00000090 00000090 00000144 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 9 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00001578 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 10 .text.i2c_write_byte 00000044 00000092 00000092 00000146 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 11 .text.lcd_pulse_enable 00000024 000000d6 000000d6 0000018a 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 12 .text.lcd_send 00000036 000000fa 000000fa 000001ae 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 13 .progmemx.data 00000031 00000130 00000130 000001e4 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, PROGMEMX
+ 14 .rodata 0000000c 00800100 000005a4 00000658 2**0
+ CONTENTS, ALLOC, LOAD, DATA
+ 15 .text.startup.main 00000425 00000161 00000161 00000215 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 16 .progmemx.data.correct_pin 00000008 00000586 00000586 0000063a 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, PROGMEMX
+ 17 .bss.pin_length 00000001 0080010c 0080010c 00000664 2**0
+ ALLOC
+ 18 .bss.pin 00000008 0080010d 0080010d 00000664 2**0
+ ALLOC
+ 19 .text.__dummy_fini 00000002 0000058e 0000058e 00000642 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 20 .text.__dummy_funcs_on_exit 00000002 00000590 00000590 00000644 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 21 .text.__dummy_simulator_exit 00000002 00000592 00000592 00000646 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 22 .text.exit 0000000e 00000594 00000594 00000648 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 23 .text._Exit 00000002 000005a2 000005a2 00000656 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+ 0: 1f c0 rjmp .+62 ; 0x40 <__ctors_end>
+ 2: 46 c0 rjmp .+140 ; 0x90 <_etext>
+ 4: 45 c0 rjmp .+138 ; 0x90 <_etext>
+ 6: 44 c0 rjmp .+136 ; 0x90 <_etext>
+ 8: 43 c0 rjmp .+134 ; 0x90 <_etext>
+ a: 42 c0 rjmp .+132 ; 0x90 <_etext>
+ c: 41 c0 rjmp .+130 ; 0x90 <_etext>
+ e: 40 c0 rjmp .+128 ; 0x90 <_etext>
+ 10: 3f c0 rjmp .+126 ; 0x90 <_etext>
+ 12: 3e c0 rjmp .+124 ; 0x90 <_etext>
+ 14: 3d c0 rjmp .+122 ; 0x90 <_etext>
+ 16: 3c c0 rjmp .+120 ; 0x90 <_etext>
+ 18: 3b c0 rjmp .+118 ; 0x90 <_etext>
+ 1a: 3a c0 rjmp .+116 ; 0x90 <_etext>
+ 1c: 39 c0 rjmp .+114 ; 0x90 <_etext>
+ 1e: 38 c0 rjmp .+112 ; 0x90 <_etext>
+ 20: 37 c0 rjmp .+110 ; 0x90 <_etext>
+ 22: 36 c0 rjmp .+108 ; 0x90 <_etext>
+ 24: 35 c0 rjmp .+106 ; 0x90 <_etext>
+ 26: 34 c0 rjmp .+104 ; 0x90 <_etext>
+ 28: 33 c0 rjmp .+102 ; 0x90 <_etext>
+ 2a: 32 c0 rjmp .+100 ; 0x90 <_etext>
+ 2c: 31 c0 rjmp .+98 ; 0x90 <_etext>
+ 2e: 30 c0 rjmp .+96 ; 0x90 <_etext>
+ 30: 2f c0 rjmp .+94 ; 0x90 <_etext>
+ 32: 2e c0 rjmp .+92 ; 0x90 <_etext>
+
+00000034 <.dinit>:
+ 34: 01 00 .word 0x0001 ; ????
+ 36: 01 0c add r0, r1
+ 38: 00 05 cpc r16, r0
+ 3a: a4 01 movw r20, r8
+ 3c: 0c 01 movw r0, r24
+ 3e: 15 80 ldd r1, Z+5 ; 0x05
+
+00000040 <__ctors_end>:
+ 40: 11 24 eor r1, r1
+ 42: 1f be out 0x3f, r1 ; 63
+ 44: cf ef ldi r28, 0xFF ; 255
+ 46: d4 e0 ldi r29, 0x04 ; 4
+ 48: de bf out 0x3e, r29 ; 62
+ 4a: cd bf out 0x3d, r28 ; 61
+
+0000004c <__do_copy_data>:
+ 4c: e4 e3 ldi r30, 0x34 ; 52
+ 4e: f0 e0 ldi r31, 0x00 ; 0
+ 50: 40 e0 ldi r20, 0x00 ; 0
+ 52: 17 c0 rjmp .+46 ; 0x82 <__do_clear_bss+0x8>
+ 54: b5 91 lpm r27, Z+
+ 56: a5 91 lpm r26, Z+
+ 58: 35 91 lpm r19, Z+
+ 5a: 25 91 lpm r18, Z+
+ 5c: 05 91 lpm r16, Z+
+ 5e: 07 fd sbrc r16, 7
+ 60: 0c c0 rjmp .+24 ; 0x7a <__do_clear_bss>
+ 62: 95 91 lpm r25, Z+
+ 64: 85 91 lpm r24, Z+
+ 66: ef 01 movw r28, r30
+ 68: f9 2f mov r31, r25
+ 6a: e8 2f mov r30, r24
+ 6c: 05 90 lpm r0, Z+
+ 6e: 0d 92 st X+, r0
+ 70: a2 17 cp r26, r18
+ 72: b3 07 cpc r27, r19
+ 74: d9 f7 brne .-10 ; 0x6c <__do_copy_data+0x20>
+ 76: fe 01 movw r30, r28
+ 78: 04 c0 rjmp .+8 ; 0x82 <__do_clear_bss+0x8>
+
+0000007a <__do_clear_bss>:
+ 7a: 1d 92 st X+, r1
+ 7c: a2 17 cp r26, r18
+ 7e: b3 07 cpc r27, r19
+ 80: e1 f7 brne .-8 ; 0x7a <__do_clear_bss>
+ 82: e0 34 cpi r30, 0x40 ; 64
+ 84: f4 07 cpc r31, r20
+ 86: 31 f7 brne .-52 ; 0x54 <__do_copy_data+0x8>
+ 88: 6c d0 rcall .+216 ; 0x162 <main>
+ 8a: 84 c2 rjmp .+1288 ; 0x594 <exit>
+
+0000008c <_exit>:
+ 8c: f8 94 cli
+
+0000008e <__stop_program>:
+ 8e: ff cf rjmp .-2 ; 0x8e <__stop_program>
+
+Disassembly of section .text:
+
+00000090 <__bad_interrupt>:
+ 90: b7 cf rjmp .-146 ; 0x0 <__TEXT_REGION_ORIGIN__>
+
+Disassembly of section .text.i2c_write_byte:
+
+00000092 <i2c_write_byte>:
+ 92: 94 ea ldi r25, 0xA4 ; 164
+ 94: 90 93 bc 00 sts 0x00BC, r25 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 98: 90 91 bc 00 lds r25, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 9c: 97 ff sbrs r25, 7
+ 9e: fc cf rjmp .-8 ; 0x98 <i2c_write_byte+0x6>
+ a0: 88 0f add r24, r24
+ a2: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__TEXT_REGION_LENGTH__+0x7fe0bb>
+ a6: 84 e8 ldi r24, 0x84 ; 132
+ a8: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ ac: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ b0: 87 ff sbrs r24, 7
+ b2: fc cf rjmp .-8 ; 0xac <i2c_write_byte+0x1a>
+ b4: 60 93 bb 00 sts 0x00BB, r22 ; 0x8000bb <__TEXT_REGION_LENGTH__+0x7fe0bb>
+ b8: 84 e8 ldi r24, 0x84 ; 132
+ ba: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ be: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ c2: 87 ff sbrs r24, 7
+ c4: fc cf rjmp .-8 ; 0xbe <i2c_write_byte+0x2c>
+ c6: 84 e9 ldi r24, 0x94 ; 148
+ c8: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ cc: 80 91 bc 00 lds r24, 0x00BC ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ d0: 84 fd sbrc r24, 4
+ d2: fc cf rjmp .-8 ; 0xcc <i2c_write_byte+0x3a>
+ d4: 08 95 ret
+
+Disassembly of section .text.lcd_pulse_enable:
+
+000000d6 <lcd_pulse_enable>:
+ d6: cf 93 push r28
+ d8: c8 2f mov r28, r24
+ da: 68 2f mov r22, r24
+ dc: 6c 60 ori r22, 0x0C ; 12
+ de: 87 e2 ldi r24, 0x27 ; 39
+ e0: d8 df rcall .-80 ; 0x92 <i2c_write_byte>
+ e2: 00 00 nop
+ e4: 6c 2f mov r22, r28
+ e6: 6b 7f andi r22, 0xFB ; 251
+ e8: 68 60 ori r22, 0x08 ; 8
+ ea: 87 e2 ldi r24, 0x27 ; 39
+ ec: d2 df rcall .-92 ; 0x92 <i2c_write_byte>
+ ee: 80 e1 ldi r24, 0x10 ; 16
+ f0: 8a 95 dec r24
+ f2: f1 f7 brne .-4 ; 0xf0 <lcd_pulse_enable+0x1a>
+ f4: 00 c0 rjmp .+0 ; 0xf6 <lcd_pulse_enable+0x20>
+ f6: cf 91 pop r28
+ f8: 08 95 ret
+
+Disassembly of section .text.lcd_send:
+
+000000fa <lcd_send>:
+ fa: 1f 93 push r17
+ fc: cf 93 push r28
+ fe: df 93 push r29
+ 100: c8 2f mov r28, r24
+ 102: d6 2f mov r29, r22
+ 104: d8 60 ori r29, 0x08 ; 8
+ 106: 18 2f mov r17, r24
+ 108: 10 7f andi r17, 0xF0 ; 240
+ 10a: 1d 2b or r17, r29
+ 10c: 61 2f mov r22, r17
+ 10e: 68 60 ori r22, 0x08 ; 8
+ 110: 87 e2 ldi r24, 0x27 ; 39
+ 112: bf df rcall .-130 ; 0x92 <i2c_write_byte>
+ 114: 81 2f mov r24, r17
+ 116: df df rcall .-66 ; 0xd6 <lcd_pulse_enable>
+ 118: c2 95 swap r28
+ 11a: c0 7f andi r28, 0xF0 ; 240
+ 11c: cd 2b or r28, r29
+ 11e: 6c 2f mov r22, r28
+ 120: 68 60 ori r22, 0x08 ; 8
+ 122: 87 e2 ldi r24, 0x27 ; 39
+ 124: b6 df rcall .-148 ; 0x92 <i2c_write_byte>
+ 126: 8c 2f mov r24, r28
+ 128: df 91 pop r29
+ 12a: cf 91 pop r28
+ 12c: 1f 91 pop r17
+ 12e: d3 cf rjmp .-90 ; 0xd6 <lcd_pulse_enable>
+
+Disassembly of section .text.startup.main:
+
+00000161 <main-0x1>:
+ ...
+
+00000162 <main>:
+ 162: cf 93 push r28
+ 164: df 93 push r29
+ 166: cd b7 in r28, 0x3d ; 61
+ 168: de b7 in r29, 0x3e ; 62
+ 16a: 63 97 sbiw r28, 0x13 ; 19
+ 16c: 0f b6 in r0, 0x3f ; 63
+ 16e: f8 94 cli
+ 170: de bf out 0x3e, r29 ; 62
+ 172: 0f be out 0x3f, r0 ; 63
+ 174: cd bf out 0x3d, r28 ; 61
+ 176: 8a b1 in r24, 0x0a ; 10
+ 178: 8f 71 andi r24, 0x1F ; 31
+ 17a: 8a b9 out 0x0a, r24 ; 10
+ 17c: 8b b1 in r24, 0x0b ; 11
+ 17e: 80 6e ori r24, 0xE0 ; 224
+ 180: 8b b9 out 0x0b, r24 ; 11
+ 182: 8a b1 in r24, 0x0a ; 10
+ 184: 8f 60 ori r24, 0x0F ; 15
+ 186: 8a b9 out 0x0a, r24 ; 10
+ 188: 87 b1 in r24, 0x07 ; 7
+ 18a: 8b 60 ori r24, 0x0B ; 11
+ 18c: 87 b9 out 0x07, r24 ; 7
+ 18e: 18 b8 out 0x08, r1 ; 8
+ 190: 10 92 b9 00 sts 0x00B9, r1 ; 0x8000b9 <__TEXT_REGION_LENGTH__+0x7fe0b9>
+ 194: 82 e0 ldi r24, 0x02 ; 2
+ 196: 80 93 b8 00 sts 0x00B8, r24 ; 0x8000b8 <__TEXT_REGION_LENGTH__+0x7fe0b8>
+ 19a: 84 e0 ldi r24, 0x04 ; 4
+ 19c: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__TEXT_REGION_LENGTH__+0x7fe0bc>
+ 1a0: 83 ed ldi r24, 0xD3 ; 211
+ 1a2: 90 e3 ldi r25, 0x30 ; 48
+ 1a4: 01 97 sbiw r24, 0x01 ; 1
+ 1a6: f1 f7 brne .-4 ; 0x1a4 <main+0x42>
+ 1a8: 00 c0 rjmp .+0 ; 0x1aa <main+0x48>
+ 1aa: 00 00 nop
+ 1ac: 68 e3 ldi r22, 0x38 ; 56
+ 1ae: 87 e2 ldi r24, 0x27 ; 39
+ 1b0: 70 df rcall .-288 ; 0x92 <i2c_write_byte>
+ 1b2: 88 e3 ldi r24, 0x38 ; 56
+ 1b4: 90 df rcall .-224 ; 0xd6 <lcd_pulse_enable>
+ 1b6: a1 ee ldi r26, 0xE1 ; 225
+ 1b8: b4 e0 ldi r27, 0x04 ; 4
+ 1ba: 11 97 sbiw r26, 0x01 ; 1
+ 1bc: f1 f7 brne .-4 ; 0x1ba <main+0x58>
+ 1be: 00 c0 rjmp .+0 ; 0x1c0 <main+0x5e>
+ 1c0: 00 00 nop
+ 1c2: 68 e3 ldi r22, 0x38 ; 56
+ 1c4: 87 e2 ldi r24, 0x27 ; 39
+ 1c6: 65 df rcall .-310 ; 0x92 <i2c_write_byte>
+ 1c8: 88 e3 ldi r24, 0x38 ; 56
+ 1ca: 85 df rcall .-246 ; 0xd6 <lcd_pulse_enable>
+ 1cc: b2 e3 ldi r27, 0x32 ; 50
+ 1ce: ba 95 dec r27
+ 1d0: f1 f7 brne .-4 ; 0x1ce <main+0x6c>
+ 1d2: 68 e3 ldi r22, 0x38 ; 56
+ 1d4: 87 e2 ldi r24, 0x27 ; 39
+ 1d6: 5d df rcall .-326 ; 0x92 <i2c_write_byte>
+ 1d8: 88 e3 ldi r24, 0x38 ; 56
+ 1da: 7d df rcall .-262 ; 0xd6 <lcd_pulse_enable>
+ 1dc: e2 e3 ldi r30, 0x32 ; 50
+ 1de: ea 95 dec r30
+ 1e0: f1 f7 brne .-4 ; 0x1de <main+0x7c>
+ 1e2: 68 e2 ldi r22, 0x28 ; 40
+ 1e4: 87 e2 ldi r24, 0x27 ; 39
+ 1e6: 55 df rcall .-342 ; 0x92 <i2c_write_byte>
+ 1e8: 88 e2 ldi r24, 0x28 ; 40
+ 1ea: 75 df rcall .-278 ; 0xd6 <lcd_pulse_enable>
+ 1ec: f2 e3 ldi r31, 0x32 ; 50
+ 1ee: fa 95 dec r31
+ 1f0: f1 f7 brne .-4 ; 0x1ee <main+0x8c>
+ 1f2: 60 e0 ldi r22, 0x00 ; 0
+ 1f4: 88 e2 ldi r24, 0x28 ; 40
+ 1f6: 81 df rcall .-254 ; 0xfa <lcd_send>
+ 1f8: 60 e0 ldi r22, 0x00 ; 0
+ 1fa: 88 e0 ldi r24, 0x08 ; 8
+ 1fc: 7e df rcall .-260 ; 0xfa <lcd_send>
+ 1fe: 60 e0 ldi r22, 0x00 ; 0
+ 200: 81 e0 ldi r24, 0x01 ; 1
+ 202: 7b df rcall .-266 ; 0xfa <lcd_send>
+ 204: 83 ef ldi r24, 0xF3 ; 243
+ 206: 91 e0 ldi r25, 0x01 ; 1
+ 208: 01 97 sbiw r24, 0x01 ; 1
+ 20a: f1 f7 brne .-4 ; 0x208 <__EEPROM_REGION_LENGTH__+0x8>
+ 20c: 00 c0 rjmp .+0 ; 0x20e <__EEPROM_REGION_LENGTH__+0xe>
+ 20e: 00 00 nop
+ 210: 60 e0 ldi r22, 0x00 ; 0
+ 212: 86 e0 ldi r24, 0x06 ; 6
+ 214: 72 df rcall .-284 ; 0xfa <lcd_send>
+ 216: 60 e0 ldi r22, 0x00 ; 0
+ 218: 8c e0 ldi r24, 0x0C ; 12
+ 21a: 6f df rcall .-290 ; 0xfa <lcd_send>
+ 21c: 60 e0 ldi r22, 0x00 ; 0
+ 21e: 81 e0 ldi r24, 0x01 ; 1
+ 220: 6c df rcall .-296 ; 0xfa <lcd_send>
+ 222: a3 ef ldi r26, 0xF3 ; 243
+ 224: b1 e0 ldi r27, 0x01 ; 1
+ 226: 11 97 sbiw r26, 0x01 ; 1
+ 228: f1 f7 brne .-4 ; 0x226 <__EEPROM_REGION_LENGTH__+0x26>
+ 22a: 00 c0 rjmp .+0 ; 0x22c <__EEPROM_REGION_LENGTH__+0x2c>
+ 22c: 00 00 nop
+ 22e: 60 e0 ldi r22, 0x00 ; 0
+ 230: 80 e8 ldi r24, 0x80 ; 128
+ 232: 63 df rcall .-314 ; 0xfa <lcd_send>
+ 234: ac e5 ldi r26, 0x5C ; 92
+ 236: ca 2e mov r12, r26
+ 238: a1 e0 ldi r26, 0x01 ; 1
+ 23a: da 2e mov r13, r26
+ 23c: a0 e0 ldi r26, 0x00 ; 0
+ 23e: ea 2e mov r14, r26
+ 240: 80 e5 ldi r24, 0x50 ; 80
+ 242: 61 e0 ldi r22, 0x01 ; 1
+ 244: 5a df rcall .-332 ; 0xfa <lcd_send>
+ 246: f6 01 movw r30, r12
+ 248: 84 91 lpm r24, Z
+ 24a: e7 fc sbrc r14, 7
+ 24c: 80 81 ld r24, Z
+ 24e: bf ef ldi r27, 0xFF ; 255
+ 250: cb 1a sub r12, r27
+ 252: db 0a sbc r13, r27
+ 254: eb 0a sbc r14, r27
+ 256: 81 11 cpse r24, r1
+ 258: f4 cf rjmp .-24 ; 0x242 <__EEPROM_REGION_LENGTH__+0x42>
+ 25a: 1d 86 std Y+13, r1 ; 0x0d
+ 25c: 81 e0 ldi r24, 0x01 ; 1
+ 25e: 8e 87 std Y+14, r24 ; 0x0e
+ 260: 82 e0 ldi r24, 0x02 ; 2
+ 262: 8f 87 std Y+15, r24 ; 0x0f
+ 264: 83 e0 ldi r24, 0x03 ; 3
+ 266: 88 8b std Y+16, r24 ; 0x10
+ 268: 85 e0 ldi r24, 0x05 ; 5
+ 26a: 89 8b std Y+17, r24 ; 0x11
+ 26c: 86 e0 ldi r24, 0x06 ; 6
+ 26e: 8a 8b std Y+18, r24 ; 0x12
+ 270: 87 e0 ldi r24, 0x07 ; 7
+ 272: 8b 8b std Y+19, r24 ; 0x13
+ 274: 8c e0 ldi r24, 0x0C ; 12
+ 276: e0 e0 ldi r30, 0x00 ; 0
+ 278: f1 e0 ldi r31, 0x01 ; 1
+ 27a: de 01 movw r26, r28
+ 27c: 11 96 adiw r26, 0x01 ; 1
+ 27e: 01 90 ld r0, Z+
+ 280: 0d 92 st X+, r0
+ 282: 8a 95 dec r24
+ 284: e1 f7 brne .-8 ; 0x27e <__EEPROM_REGION_LENGTH__+0x7e>
+ 286: 60 e0 ldi r22, 0x00 ; 0
+ 288: 01 e0 ldi r16, 0x01 ; 1
+ 28a: 10 e0 ldi r17, 0x00 ; 0
+ 28c: e8 e0 ldi r30, 0x08 ; 8
+ 28e: fe 2e mov r15, r30
+ 290: fa e0 ldi r31, 0x0A ; 10
+ 292: 9f 2e mov r9, r31
+ 294: fe 01 movw r30, r28
+ 296: 3d 96 adiw r30, 0x0d ; 13
+ 298: 40 e0 ldi r20, 0x00 ; 0
+ 29a: 50 e0 ldi r21, 0x00 ; 0
+ 29c: 8a b1 in r24, 0x0a ; 10
+ 29e: 80 7f andi r24, 0xF0 ; 240
+ 2a0: 8a b9 out 0x0a, r24 ; 10
+ 2a2: 8b b1 in r24, 0x0b ; 11
+ 2a4: 80 7f andi r24, 0xF0 ; 240
+ 2a6: 8b b9 out 0x0b, r24 ; 11
+ 2a8: 2a b1 in r18, 0x0a ; 10
+ 2aa: df 01 movw r26, r30
+ 2ac: c8 01 movw r24, r16
+ 2ae: 01 90 ld r0, Z+
+ 2b0: 02 c0 rjmp .+4 ; 0x2b6 <__EEPROM_REGION_LENGTH__+0xb6>
+ 2b2: 88 0f add r24, r24
+ 2b4: 99 1f adc r25, r25
+ 2b6: 0a 94 dec r0
+ 2b8: e2 f7 brpl .-8 ; 0x2b2 <__EEPROM_REGION_LENGTH__+0xb2>
+ 2ba: 82 2b or r24, r18
+ 2bc: 8a b9 out 0x0a, r24 ; 10
+ 2be: 9b b1 in r25, 0x0b ; 11
+ 2c0: 98 01 movw r18, r16
+ 2c2: 0c 90 ld r0, X
+ 2c4: 02 c0 rjmp .+4 ; 0x2ca <__EEPROM_REGION_LENGTH__+0xca>
+ 2c6: 22 0f add r18, r18
+ 2c8: 33 1f adc r19, r19
+ 2ca: 0a 94 dec r0
+ 2cc: e2 f7 brpl .-8 ; 0x2c6 <__EEPROM_REGION_LENGTH__+0xc6>
+ 2ce: 82 2f mov r24, r18
+ 2d0: 80 95 com r24
+ 2d2: 89 23 and r24, r25
+ 2d4: 8b b9 out 0x0b, r24 ; 11
+ 2d6: 23 e0 ldi r18, 0x03 ; 3
+ 2d8: 2a 95 dec r18
+ 2da: f1 f7 brne .-4 ; 0x2d8 <__EEPROM_REGION_LENGTH__+0xd8>
+ 2dc: 00 00 nop
+ 2de: de 01 movw r26, r28
+ 2e0: 51 96 adiw r26, 0x11 ; 17
+ 2e2: 20 e0 ldi r18, 0x00 ; 0
+ 2e4: 30 e0 ldi r19, 0x00 ; 0
+ 2e6: 89 b1 in r24, 0x09 ; 9
+ 2e8: 90 e0 ldi r25, 0x00 ; 0
+ 2ea: 0d 90 ld r0, X+
+ 2ec: 02 c0 rjmp .+4 ; 0x2f2 <__EEPROM_REGION_LENGTH__+0xf2>
+ 2ee: 95 95 asr r25
+ 2f0: 87 95 ror r24
+ 2f2: 0a 94 dec r0
+ 2f4: e2 f7 brpl .-8 ; 0x2ee <__EEPROM_REGION_LENGTH__+0xee>
+ 2f6: 80 ff sbrs r24, 0
+ 2f8: 0c c0 rjmp .+24 ; 0x312 <__EEPROM_REGION_LENGTH__+0x112>
+ 2fa: 2f 5f subi r18, 0xFF ; 255
+ 2fc: 3f 4f sbci r19, 0xFF ; 255
+ 2fe: 23 30 cpi r18, 0x03 ; 3
+ 300: 31 05 cpc r19, r1
+ 302: 89 f7 brne .-30 ; 0x2e6 <__EEPROM_REGION_LENGTH__+0xe6>
+ 304: 4f 5f subi r20, 0xFF ; 255
+ 306: 5f 4f sbci r21, 0xFF ; 255
+ 308: 44 30 cpi r20, 0x04 ; 4
+ 30a: 51 05 cpc r21, r1
+ 30c: 39 f6 brne .-114 ; 0x29c <__EEPROM_REGION_LENGTH__+0x9c>
+ 30e: 60 e0 ldi r22, 0x00 ; 0
+ 310: c1 cf rjmp .-126 ; 0x294 <__EEPROM_REGION_LENGTH__+0x94>
+ 312: ca 01 movw r24, r20
+ 314: 88 0f add r24, r24
+ 316: 99 1f adc r25, r25
+ 318: 84 0f add r24, r20
+ 31a: 95 1f adc r25, r21
+ 31c: a1 e0 ldi r26, 0x01 ; 1
+ 31e: b0 e0 ldi r27, 0x00 ; 0
+ 320: ac 0f add r26, r28
+ 322: bd 1f adc r27, r29
+ 324: 8a 0f add r24, r26
+ 326: 9b 1f adc r25, r27
+ 328: dc 01 movw r26, r24
+ 32a: a2 0f add r26, r18
+ 32c: b3 1f adc r27, r19
+ 32e: bc 90 ld r11, X
+ 330: bb 20 and r11, r11
+ 332: 41 f3 breq .-48 ; 0x304 <__EEPROM_REGION_LENGTH__+0x104>
+ 334: 6b 15 cp r22, r11
+ 336: 09 f4 brne .+2 ; 0x33a <__EEPROM_REGION_LENGTH__+0x13a>
+ 338: ad cf rjmp .-166 ; 0x294 <__EEPROM_REGION_LENGTH__+0x94>
+ 33a: 80 ed ldi r24, 0xD0 ; 208
+ 33c: 8b 0d add r24, r11
+ 33e: 8a 30 cpi r24, 0x0A ; 10
+ 340: 10 f5 brcc .+68 ; 0x386 <__EEPROM_REGION_LENGTH__+0x186>
+ 342: 80 91 0c 01 lds r24, 0x010C ; 0x80010c <pin_length>
+ 346: 87 30 cpi r24, 0x07 ; 7
+ 348: f0 f4 brcc .+60 ; 0x386 <__EEPROM_REGION_LENGTH__+0x186>
+ 34a: 43 9a sbi 0x08, 3 ; 8
+ 34c: e3 ed ldi r30, 0xD3 ; 211
+ 34e: f0 e3 ldi r31, 0x30 ; 48
+ 350: 31 97 sbiw r30, 0x01 ; 1
+ 352: f1 f7 brne .-4 ; 0x350 <__EEPROM_REGION_LENGTH__+0x150>
+ 354: 00 c0 rjmp .+0 ; 0x356 <__EEPROM_REGION_LENGTH__+0x156>
+ 356: 00 00 nop
+ 358: 43 98 cbi 0x08, 3 ; 8
+ 35a: 80 91 0c 01 lds r24, 0x010C ; 0x80010c <pin_length>
+ 35e: e8 2f mov r30, r24
+ 360: f0 e0 ldi r31, 0x00 ; 0
+ 362: e3 5f subi r30, 0xF3 ; 243
+ 364: fe 4f sbci r31, 0xFE ; 254
+ 366: b0 82 st Z, r11
+ 368: 91 e0 ldi r25, 0x01 ; 1
+ 36a: 98 0f add r25, r24
+ 36c: 90 93 0c 01 sts 0x010C, r25 ; 0x80010c <pin_length>
+ 370: 8b 5f subi r24, 0xFB ; 251
+ 372: 60 e0 ldi r22, 0x00 ; 0
+ 374: 80 68 ori r24, 0x80 ; 128
+ 376: c1 de rcall .-638 ; 0xfa <lcd_send>
+ 378: 61 e0 ldi r22, 0x01 ; 1
+ 37a: 8b 2d mov r24, r11
+ 37c: be de rcall .-644 ; 0xfa <lcd_send>
+ 37e: 80 91 0c 01 lds r24, 0x010C ; 0x80010c <pin_length>
+ 382: 87 30 cpi r24, 0x07 ; 7
+ 384: 11 f0 breq .+4 ; 0x38a <__EEPROM_REGION_LENGTH__+0x18a>
+ 386: 6b 2d mov r22, r11
+ 388: 85 cf rjmp .-246 ; 0x294 <__EEPROM_REGION_LENGTH__+0x94>
+ 38a: 10 92 14 01 sts 0x0114, r1 ; 0x800114 <pin+0x7>
+ 38e: 8f e4 ldi r24, 0x4F ; 79
+ 390: 93 ec ldi r25, 0xC3 ; 195
+ 392: 01 97 sbiw r24, 0x01 ; 1
+ 394: f1 f7 brne .-4 ; 0x392 <__EEPROM_REGION_LENGTH__+0x192>
+ 396: 00 c0 rjmp .+0 ; 0x398 <__EEPROM_REGION_LENGTH__+0x198>
+ 398: 00 00 nop
+ 39a: 2d e0 ldi r18, 0x0D ; 13
+ 39c: 31 e0 ldi r19, 0x01 ; 1
+ 39e: 87 e8 ldi r24, 0x87 ; 135
+ 3a0: 95 e0 ldi r25, 0x05 ; 5
+ 3a2: a0 e0 ldi r26, 0x00 ; 0
+ 3a4: 47 e3 ldi r20, 0x37 ; 55
+ 3a6: 06 c0 rjmp .+12 ; 0x3b4 <__EEPROM_REGION_LENGTH__+0x1b4>
+ 3a8: fc 01 movw r30, r24
+ 3aa: 44 91 lpm r20, Z
+ 3ac: a7 fd sbrc r26, 7
+ 3ae: 40 81 ld r20, Z
+ 3b0: 01 96 adiw r24, 0x01 ; 1
+ 3b2: a1 1d adc r26, r1
+ 3b4: f9 01 movw r30, r18
+ 3b6: 51 91 ld r21, Z+
+ 3b8: 9f 01 movw r18, r30
+ 3ba: 54 13 cpse r21, r20
+ 3bc: bb c0 rjmp .+374 ; 0x534 <__stack+0x35>
+ 3be: 8d 38 cpi r24, 0x8D ; 141
+ 3c0: f5 e0 ldi r31, 0x05 ; 5
+ 3c2: 9f 07 cpc r25, r31
+ 3c4: f0 e0 ldi r31, 0x00 ; 0
+ 3c6: af 07 cpc r26, r31
+ 3c8: 79 f7 brne .-34 ; 0x3a8 <__EEPROM_REGION_LENGTH__+0x1a8>
+ 3ca: 60 e0 ldi r22, 0x00 ; 0
+ 3cc: 81 e0 ldi r24, 0x01 ; 1
+ 3ce: 95 de rcall .-726 ; 0xfa <lcd_send>
+ 3d0: a3 ef ldi r26, 0xF3 ; 243
+ 3d2: b1 e0 ldi r27, 0x01 ; 1
+ 3d4: 11 97 sbiw r26, 0x01 ; 1
+ 3d6: f1 f7 brne .-4 ; 0x3d4 <__EEPROM_REGION_LENGTH__+0x1d4>
+ 3d8: 00 c0 rjmp .+0 ; 0x3da <__EEPROM_REGION_LENGTH__+0x1da>
+ 3da: 00 00 nop
+ 3dc: 60 e0 ldi r22, 0x00 ; 0
+ 3de: 80 e8 ldi r24, 0x80 ; 128
+ 3e0: 8c de rcall .-744 ; 0xfa <lcd_send>
+ 3e2: 82 e4 ldi r24, 0x42 ; 66
+ 3e4: 30 e3 ldi r19, 0x30 ; 48
+ 3e6: c3 2e mov r12, r19
+ 3e8: 31 e0 ldi r19, 0x01 ; 1
+ 3ea: d3 2e mov r13, r19
+ 3ec: 30 e0 ldi r19, 0x00 ; 0
+ 3ee: e3 2e mov r14, r19
+ 3f0: 2f ef ldi r18, 0xFF ; 255
+ 3f2: c2 1a sub r12, r18
+ 3f4: d2 0a sbc r13, r18
+ 3f6: e2 0a sbc r14, r18
+ 3f8: 61 e0 ldi r22, 0x01 ; 1
+ 3fa: 7f de rcall .-770 ; 0xfa <lcd_send>
+ 3fc: f6 01 movw r30, r12
+ 3fe: 84 91 lpm r24, Z
+ 400: e7 fc sbrc r14, 7
+ 402: 80 81 ld r24, Z
+ 404: 81 11 cpse r24, r1
+ 406: f4 cf rjmp .-24 ; 0x3f0 <__EEPROM_REGION_LENGTH__+0x1f0>
+ 408: 6a e0 ldi r22, 0x0A ; 10
+ 40a: a6 2e mov r10, r22
+ 40c: 60 e0 ldi r22, 0x00 ; 0
+ 40e: 80 ec ldi r24, 0xC0 ; 192
+ 410: 74 de rcall .-792 ; 0xfa <lcd_send>
+ 412: 83 e4 ldi r24, 0x43 ; 67
+ 414: 5e e3 ldi r21, 0x3E ; 62
+ 416: c5 2e mov r12, r21
+ 418: 51 e0 ldi r21, 0x01 ; 1
+ 41a: d5 2e mov r13, r21
+ 41c: 50 e0 ldi r21, 0x00 ; 0
+ 41e: e5 2e mov r14, r21
+ 420: 3f ef ldi r19, 0xFF ; 255
+ 422: c3 1a sub r12, r19
+ 424: d3 0a sbc r13, r19
+ 426: e3 0a sbc r14, r19
+ 428: 61 e0 ldi r22, 0x01 ; 1
+ 42a: 67 de rcall .-818 ; 0xfa <lcd_send>
+ 42c: f6 01 movw r30, r12
+ 42e: 84 91 lpm r24, Z
+ 430: e7 fc sbrc r14, 7
+ 432: 80 81 ld r24, Z
+ 434: 81 11 cpse r24, r1
+ 436: f4 cf rjmp .-24 ; 0x420 <__DATA_REGION_LENGTH__+0x20>
+ 438: fa 2d mov r31, r10
+ 43a: 27 e6 ldi r18, 0x67 ; 103
+ 43c: f2 02 muls r31, r18
+ 43e: e1 2c mov r14, r1
+ 440: 11 24 eor r1, r1
+ 442: e5 94 asr r14
+ 444: e5 94 asr r14
+ 446: a7 fc sbrc r10, 7
+ 448: e3 94 inc r14
+ 44a: 61 e0 ldi r22, 0x01 ; 1
+ 44c: 80 e3 ldi r24, 0x30 ; 48
+ 44e: 8e 0d add r24, r14
+ 450: 54 de rcall .-856 ; 0xfa <lcd_send>
+ 452: 8a 2d mov r24, r10
+ 454: 3a e0 ldi r19, 0x0A ; 10
+ 456: e3 9e mul r14, r19
+ 458: 80 19 sub r24, r0
+ 45a: 11 24 eor r1, r1
+ 45c: 61 e0 ldi r22, 0x01 ; 1
+ 45e: 80 5d subi r24, 0xD0 ; 208
+ 460: 4c de rcall .-872 ; 0xfa <lcd_send>
+ 462: 61 e0 ldi r22, 0x01 ; 1
+ 464: 80 e2 ldi r24, 0x20 ; 32
+ 466: 49 de rcall .-878 ; 0xfa <lcd_send>
+ 468: f6 b8 out 0x06, r15 ; 6
+ 46a: 81 e0 ldi r24, 0x01 ; 1
+ 46c: 86 b9 out 0x06, r24 ; 6
+ 46e: a7 e8 ldi r26, 0x87 ; 135
+ 470: b3 e1 ldi r27, 0x13 ; 19
+ 472: 11 97 sbiw r26, 0x01 ; 1
+ 474: f1 f7 brne .-4 ; 0x472 <__DATA_REGION_LENGTH__+0x72>
+ 476: 00 c0 rjmp .+0 ; 0x478 <__DATA_REGION_LENGTH__+0x78>
+ 478: 00 00 nop
+ 47a: 86 b9 out 0x06, r24 ; 6
+ 47c: bf e9 ldi r27, 0x9F ; 159
+ 47e: ed ef ldi r30, 0xFD ; 253
+ 480: f2 e0 ldi r31, 0x02 ; 2
+ 482: b1 50 subi r27, 0x01 ; 1
+ 484: e0 40 sbci r30, 0x00 ; 0
+ 486: f0 40 sbci r31, 0x00 ; 0
+ 488: e1 f7 brne .-8 ; 0x482 <__DATA_REGION_LENGTH__+0x82>
+ 48a: 00 c0 rjmp .+0 ; 0x48c <__DATA_REGION_LENGTH__+0x8c>
+ 48c: 00 00 nop
+ 48e: aa 94 dec r10
+ 490: a1 10 cpse r10, r1
+ 492: bc cf rjmp .-136 ; 0x40c <__DATA_REGION_LENGTH__+0xc>
+ 494: 60 e0 ldi r22, 0x00 ; 0
+ 496: 81 e0 ldi r24, 0x01 ; 1
+ 498: 30 de rcall .-928 ; 0xfa <lcd_send>
+ 49a: 83 ef ldi r24, 0xF3 ; 243
+ 49c: 91 e0 ldi r25, 0x01 ; 1
+ 49e: 01 97 sbiw r24, 0x01 ; 1
+ 4a0: f1 f7 brne .-4 ; 0x49e <__DATA_REGION_LENGTH__+0x9e>
+ 4a2: 00 c0 rjmp .+0 ; 0x4a4 <__DATA_REGION_LENGTH__+0xa4>
+ 4a4: 00 00 nop
+ 4a6: 60 e0 ldi r22, 0x00 ; 0
+ 4a8: 80 e8 ldi r24, 0x80 ; 128
+ 4aa: 27 de rcall .-946 ; 0xfa <lcd_send>
+ 4ac: 80 e5 ldi r24, 0x50 ; 80
+ 4ae: 4a e4 ldi r20, 0x4A ; 74
+ 4b0: c4 2e mov r12, r20
+ 4b2: 41 e0 ldi r20, 0x01 ; 1
+ 4b4: d4 2e mov r13, r20
+ 4b6: 40 e0 ldi r20, 0x00 ; 0
+ 4b8: e4 2e mov r14, r20
+ 4ba: 9f ef ldi r25, 0xFF ; 255
+ 4bc: c9 1a sub r12, r25
+ 4be: d9 0a sbc r13, r25
+ 4c0: e9 0a sbc r14, r25
+ 4c2: 61 e0 ldi r22, 0x01 ; 1
+ 4c4: 1a de rcall .-972 ; 0xfa <lcd_send>
+ 4c6: f6 01 movw r30, r12
+ 4c8: 84 91 lpm r24, Z
+ 4ca: e7 fc sbrc r14, 7
+ 4cc: 80 81 ld r24, Z
+ 4ce: 81 11 cpse r24, r1
+ 4d0: f4 cf rjmp .-24 ; 0x4ba <__DATA_REGION_LENGTH__+0xba>
+ 4d2: 18 b8 out 0x08, r1 ; 8
+ 4d4: 98 b8 out 0x08, r9 ; 8
+ 4d6: aa e2 ldi r26, 0x2A ; 42
+ 4d8: b0 e5 ldi r27, 0x50 ; 80
+ 4da: ee ef ldi r30, 0xFE ; 254
+ 4dc: f0 e0 ldi r31, 0x00 ; 0
+ 4de: a1 50 subi r26, 0x01 ; 1
+ 4e0: b0 40 sbci r27, 0x00 ; 0
+ 4e2: e0 40 sbci r30, 0x00 ; 0
+ 4e4: f0 40 sbci r31, 0x00 ; 0
+ 4e6: d9 f7 brne .-10 ; 0x4de <__DATA_REGION_LENGTH__+0xde>
+ 4e8: 00 00 nop
+ 4ea: 10 92 0c 01 sts 0x010C, r1 ; 0x80010c <pin_length>
+ 4ee: 10 92 0d 01 sts 0x010D, r1 ; 0x80010d <pin>
+ 4f2: 60 e0 ldi r22, 0x00 ; 0
+ 4f4: 81 e0 ldi r24, 0x01 ; 1
+ 4f6: 01 de rcall .-1022 ; 0xfa <lcd_send>
+ 4f8: 83 ef ldi r24, 0xF3 ; 243
+ 4fa: 91 e0 ldi r25, 0x01 ; 1
+ 4fc: 01 97 sbiw r24, 0x01 ; 1
+ 4fe: f1 f7 brne .-4 ; 0x4fc <__DATA_REGION_LENGTH__+0xfc>
+ 500: 00 c0 rjmp .+0 ; 0x502 <__stack+0x3>
+ 502: 00 00 nop
+ 504: 60 e0 ldi r22, 0x00 ; 0
+ 506: 80 e8 ldi r24, 0x80 ; 128
+ 508: f8 dd rcall .-1040 ; 0xfa <lcd_send>
+ 50a: 80 e5 ldi r24, 0x50 ; 80
+ 50c: 9b e5 ldi r25, 0x5B ; 91
+ 50e: c9 2e mov r12, r25
+ 510: 91 e0 ldi r25, 0x01 ; 1
+ 512: d9 2e mov r13, r25
+ 514: 90 e0 ldi r25, 0x00 ; 0
+ 516: e9 2e mov r14, r25
+ 518: 9f ef ldi r25, 0xFF ; 255
+ 51a: c9 1a sub r12, r25
+ 51c: d9 0a sbc r13, r25
+ 51e: e9 0a sbc r14, r25
+ 520: 61 e0 ldi r22, 0x01 ; 1
+ 522: eb dd rcall .-1066 ; 0xfa <lcd_send>
+ 524: f6 01 movw r30, r12
+ 526: 84 91 lpm r24, Z
+ 528: e7 fc sbrc r14, 7
+ 52a: 80 81 ld r24, Z
+ 52c: 81 11 cpse r24, r1
+ 52e: f4 cf rjmp .-24 ; 0x518 <__stack+0x19>
+ 530: 6b 2d mov r22, r11
+ 532: b0 ce rjmp .-672 ; 0x294 <__EEPROM_REGION_LENGTH__+0x94>
+ 534: 60 e0 ldi r22, 0x00 ; 0
+ 536: 81 e0 ldi r24, 0x01 ; 1
+ 538: e0 dd rcall .-1088 ; 0xfa <lcd_send>
+ 53a: e3 ef ldi r30, 0xF3 ; 243
+ 53c: f1 e0 ldi r31, 0x01 ; 1
+ 53e: 31 97 sbiw r30, 0x01 ; 1
+ 540: f1 f7 brne .-4 ; 0x53e <__stack+0x3f>
+ 542: 00 c0 rjmp .+0 ; 0x544 <__stack+0x45>
+ 544: 00 00 nop
+ 546: 60 e0 ldi r22, 0x00 ; 0
+ 548: 80 e8 ldi r24, 0x80 ; 128
+ 54a: d7 dd rcall .-1106 ; 0xfa <lcd_send>
+ 54c: 87 e5 ldi r24, 0x57 ; 87
+ 54e: 20 e5 ldi r18, 0x50 ; 80
+ 550: c2 2e mov r12, r18
+ 552: 21 e0 ldi r18, 0x01 ; 1
+ 554: d2 2e mov r13, r18
+ 556: 20 e0 ldi r18, 0x00 ; 0
+ 558: e2 2e mov r14, r18
+ 55a: 2f ef ldi r18, 0xFF ; 255
+ 55c: c2 1a sub r12, r18
+ 55e: d2 0a sbc r13, r18
+ 560: e2 0a sbc r14, r18
+ 562: 61 e0 ldi r22, 0x01 ; 1
+ 564: ca dd rcall .-1132 ; 0xfa <lcd_send>
+ 566: f6 01 movw r30, r12
+ 568: 84 91 lpm r24, Z
+ 56a: e7 fc sbrc r14, 7
+ 56c: 80 81 ld r24, Z
+ 56e: 81 11 cpse r24, r1
+ 570: f4 cf rjmp .-24 ; 0x55a <__stack+0x5b>
+ 572: 3f e3 ldi r19, 0x3F ; 63
+ 574: 42 e4 ldi r20, 0x42 ; 66
+ 576: 8f e0 ldi r24, 0x0F ; 15
+ 578: 31 50 subi r19, 0x01 ; 1
+ 57a: 40 40 sbci r20, 0x00 ; 0
+ 57c: 80 40 sbci r24, 0x00 ; 0
+ 57e: e1 f7 brne .-8 ; 0x578 <__stack+0x79>
+ 580: 00 c0 rjmp .+0 ; 0x582 <__stack+0x83>
+ 582: 00 00 nop
+ 584: b2 cf rjmp .-156 ; 0x4ea <__DATA_REGION_LENGTH__+0xea>
+
+Disassembly of section .text.__dummy_fini:
+
+0000058e <_fini>:
+ 58e: 08 95 ret
+
+Disassembly of section .text.__dummy_funcs_on_exit:
+
+00000590 <__funcs_on_exit>:
+ 590: 08 95 ret
+
+Disassembly of section .text.__dummy_simulator_exit:
+
+00000592 <__simulator_exit>:
+ 592: 08 95 ret
+
+Disassembly of section .text.exit:
+
+00000594 <exit>:
+ 594: ec 01 movw r28, r24
+ 596: fc df rcall .-8 ; 0x590 <__funcs_on_exit>
+ 598: fa df rcall .-12 ; 0x58e <_fini>
+ 59a: ce 01 movw r24, r28
+ 59c: fa df rcall .-12 ; 0x592 <__simulator_exit>
+ 59e: ce 01 movw r24, r28
+ 5a0: 00 d0 rcall .+0 ; 0x5a2 <_Exit>
+
+Disassembly of section .text._Exit:
+
+000005a2 <_Exit>:
+ 5a2: 74 dd rcall .-1304 ; 0x8c <_exit>
--- /dev/null
+Archive member included to satisfy reference by file (symbol)
+
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ main.o (__do_copy_data)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o (exit)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o) (_Exit)
+c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o) (_exit)
+
+Discarded input sections
+
+ .data 0x0000000000000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .bss 0x0000000000000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ .text 0x0000000000000000 0x0 main.o
+ .data 0x0000000000000000 0x0 main.o
+ .bss 0x0000000000000000 0x0 main.o
+ .bss.last_key 0x0000000000000000 0x1 main.o
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.mul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ .text 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .data 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .bss 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.mul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.div
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.prologue
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .stack.descriptors
+ 0x0000000000000000 0x13 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.builtins
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.fmul
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ .text.libgcc.fixed
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+
+Memory Configuration
+
+Name Origin Length Attributes
+text 0x0000000000000000 0x0000000000002000 xr
+data 0x0000000000800100 0x0000000000000400 rw !x
+eeprom 0x0000000000810000 0x0000000000000200 rw !x
+fuse 0x0000000000820000 0x0000000000000003 rw !x
+lock 0x0000000000830000 0x0000000000000400 rw !x
+signature 0x0000000000840000 0x0000000000000400 rw !x
+user_signatures 0x0000000000850000 0x0000000000000400 rw !x
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+LOAD main.o
+START GROUP
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libm.a
+END GROUP
+START GROUP
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libm.a
+LOAD c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const\libatmega88p.a
+END GROUP
+ 0x0000000000000000 __TEXT_REGION_ORIGIN__ = DEFINED (__TEXT_REGION_ORIGIN__)?__TEXT_REGION_ORIGIN__:0x0
+ [0x0000000000800100] __DATA_REGION_ORIGIN__ = DEFINED (__DATA_REGION_ORIGIN__)?__DATA_REGION_ORIGIN__:0x800060
+ [0x0000000000002000] __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x2000
+ [0x0000000000000400] __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
+ [0x0000000000000200] __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
+ [0x0000000000000003] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
+ 0x0000000000000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
+ 0x0000000000000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
+ 0x0000000000000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text 0x0000000000000000 0x90
+ *(.vectors)
+ .vectors 0x0000000000000000 0x34 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x0000000000000000 __vector_default
+ 0x0000000000000000 __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+ *(.dinit)
+ .dinit 0x0000000000000034 0xc data_init
+ 0x0000000000000040 . = ALIGN (0x2)
+ *fill* 0x0000000000000040 0x0
+ 0x0000000000000040 __trampolines_start = .
+ *(.trampolines)
+ .trampolines 0x0000000000000040 0x0 linker stubs
+ *(.trampolines*)
+ 0x0000000000000040 __trampolines_end = .
+ *libprintf_flt.a:*(.progmem.data)
+ *libc.a:*(.progmem.data)
+ 0x0000000000000040 . = ALIGN (0x2)
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+ 0x0000000000000040 __ctors_start = .
+ *(.ctors)
+ 0x0000000000000040 __ctors_end = .
+ 0x0000000000000040 __dtors_start = .
+ *(.dtors)
+ 0x0000000000000040 __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0 0x0000000000000040 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x0000000000000040 __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2 0x0000000000000040 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4 0x000000000000004c 0x3c c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_copy_data.o)
+ 0x000000000000004c __do_copy_data
+ 0x000000000000007a __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9 0x0000000000000088 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ *(.init9)
+ 0x000000000000008c . = ALIGN (0x2)
+ *(.fini9)
+ .fini9 0x000000000000008c 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ 0x000000000000008c _exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0 0x000000000000008c 0x4 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+ *(.fini0)
+ 0x0000000000000090 _etext = .
+
+.data 0x0000000000800100 0x0 load address 0x0000000000000090
+ [!provide] PROVIDE (__data_start, .)
+ *(.gnu.linkonce.d*)
+ *(.gnu.linkonce.r*)
+ 0x0000000000800100 . = ALIGN (0x2)
+ 0x0000000000800100 _edata = .
+ [!provide] PROVIDE (__data_end, .)
+
+.bss 0x0000000000800100 0x0
+ [!provide] PROVIDE (__bss_start, .)
+ *(COMMON)
+ [!provide] PROVIDE (__bss_end, .)
+ 0x0000000000000090 __data_load_start = LOADADDR (.data)
+ 0x0000000000000090 __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit 0x0000000000800100 0x0
+ [!provide] PROVIDE (__noinit_start, .)
+ *(.noinit*)
+ [!provide] PROVIDE (__noinit_end, .)
+ 0x0000000000800100 _end = .
+
+.eeprom 0x0000000000810000 0x0
+ *(.eeprom*)
+ 0x0000000000810000 __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.user_signatures
+ *(.user_signatures*)
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment 0x0000000000000000 0x2f
+ *(.comment)
+ .comment 0x0000000000000000 0x2f main.o
+ 0x30 (size before relaxing)
+ .comment 0x000000000000002f 0x30 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .comment 0x000000000000002f 0x30 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+
+.note.GNU-stack
+ 0x0000000000000000 0x0
+ .note.GNU-stack
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ .note.GNU-stack
+ 0x0000000000000000 0x0 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+
+.stack.descriptors.hdr
+ 0x0000000000000000 0xe
+ .stack.descriptors.hdr
+ 0x0000000000000000 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/avr4/memx-const\libgcc.a(_exit.o)
+
+.note.gnu.build-id
+ *(.note.gnu.build-id)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges
+ *(.debug_aranges)
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info 0x0000000000000000 0x5f4
+ *(.debug_info .gnu.linkonce.wi.*)
+ .debug_info 0x0000000000000000 0x5f4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.debug_abbrev 0x0000000000000000 0x5a2
+ *(.debug_abbrev)
+ .debug_abbrev 0x0000000000000000 0x5a2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.debug_line 0x0000000000000000 0x137
+ *(.debug_line .debug_line.* .debug_line_end)
+ .debug_line 0x0000000000000000 0x137 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.debug_frame
+ *(.debug_frame)
+
+.debug_str 0x0000000000000000 0x208
+ *(.debug_str)
+ .debug_str 0x0000000000000000 0x208 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.debug_loc
+ *(.debug_loc)
+
+.debug_macinfo
+ *(.debug_macinfo)
+
+.debug_weaknames
+ *(.debug_weaknames)
+
+.debug_funcnames
+ *(.debug_funcnames)
+
+.debug_typenames
+ *(.debug_typenames)
+
+.debug_varnames
+ *(.debug_varnames)
+
+.debug_pubtypes
+ *(.debug_pubtypes)
+
+.debug_ranges
+ *(.debug_ranges)
+
+.debug_macro
+ *(.debug_macro)
+OUTPUT(halloween_puff.elf elf32-avr)
+LOAD linker stubs
+LOAD data_init
+
+.note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c
+ .note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+
+.text 0x0000000000000090 0x2
+ .text 0x0000000000000090 0x2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/lib/avr4/memx-const/crtatmega88p.o
+ 0x0000000000000090 __vector_22
+ 0x0000000000000090 __vector_1
+ 0x0000000000000090 __vector_24
+ 0x0000000000000090 __vector_12
+ 0x0000000000000090 __bad_interrupt
+ 0x0000000000000090 __vector_6
+ 0x0000000000000090 __vector_3
+ 0x0000000000000090 __vector_23
+ 0x0000000000000090 __vector_25
+ 0x0000000000000090 __vector_11
+ 0x0000000000000090 __vector_13
+ 0x0000000000000090 __vector_17
+ 0x0000000000000090 __vector_19
+ 0x0000000000000090 __vector_7
+ 0x0000000000000090 __vector_5
+ 0x0000000000000090 __vector_4
+ 0x0000000000000090 __vector_9
+ 0x0000000000000090 __vector_2
+ 0x0000000000000090 __vector_21
+ 0x0000000000000090 __vector_15
+ 0x0000000000000090 __vector_8
+ 0x0000000000000090 __vector_14
+ 0x0000000000000090 __vector_10
+ 0x0000000000000090 __vector_16
+ 0x0000000000000090 __vector_18
+ 0x0000000000000090 __vector_20
+
+.text.i2c_write_byte
+ 0x0000000000000092 0x44
+ .text.i2c_write_byte
+ 0x0000000000000092 0x44 main.o
+
+.text.lcd_pulse_enable
+ 0x00000000000000d6 0x24
+ .text.lcd_pulse_enable
+ 0x00000000000000d6 0x24 main.o
+
+.text.lcd_send 0x00000000000000fa 0x36
+ .text.lcd_send
+ 0x00000000000000fa 0x36 main.o
+
+.progmemx.data 0x0000000000000130 0x31
+ .progmemx.data
+ 0x0000000000000130 0x31 main.o
+
+.text.startup.main
+ 0x0000000000000161 0x425
+ *fill* 0x0000000000000161 0x1
+ .text.startup.main
+ 0x0000000000000162 0x424 main.o
+ 0x0000000000000162 main
+
+.progmemx.data.correct_pin
+ 0x0000000000000586 0x8
+ .progmemx.data.correct_pin
+ 0x0000000000000586 0x8 main.o
+ 0x0000000000000586 correct_pin
+
+.text.__dummy_fini
+ 0x000000000000058e 0x2
+ .text.__dummy_fini
+ 0x000000000000058e 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x000000000000058e _fini
+
+.text.__dummy_funcs_on_exit
+ 0x0000000000000590 0x2
+ .text.__dummy_funcs_on_exit
+ 0x0000000000000590 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000590 __funcs_on_exit
+
+.text.__dummy_simulator_exit
+ 0x0000000000000592 0x2
+ .text.__dummy_simulator_exit
+ 0x0000000000000592 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000592 __simulator_exit
+
+.text.exit 0x0000000000000594 0xe
+ .text.exit 0x0000000000000594 0xe c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(exit.o)
+ 0x0000000000000594 exit
+
+.text._Exit 0x00000000000005a2 0x2
+ .text._Exit 0x00000000000005a2 0x2 c:/program files/microchip/xc8/v2.36/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr4/memx-const\libc.a(_Exit.o)
+ 0x00000000000005a2 _Exit
+
+.rodata 0x0000000000800100 0xc load address 0x00000000000005a4
+ .rodata 0x0000000000800100 0xc main.o
+
+.bss.pin_length
+ 0x000000000080010c 0x1
+ .bss.pin_length
+ 0x000000000080010c 0x1 main.o
+ 0x000000000080010c pin_length
+
+.bss.pin 0x000000000080010d 0x8
+ .bss.pin 0x000000000080010d 0x8 main.o
+ 0x000000000080010d pin
--- /dev/null
+main.d main.o: .././main.c \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\io.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\sfr_defs.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\inttypes.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\features.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\stdint.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\alltypes.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\stdint.h \
+ C:/Program\ Files\ (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/include/avr/iom88p.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\portpins.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\common.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\fuse.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\lock.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay_basic.h \
+ c:\program\ files\microchip\xc8\v2.36\avr\avr\include\math.h
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\io.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\inttypes.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\features.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\stdint.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\alltypes.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\bits\stdint.h:
+
+C:/Program\ Files\ (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/xc8/avr/include/avr/iom88p.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\portpins.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\common.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\fuse.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\avr\lock.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\util\delay_basic.h:
+
+c:\program\ files\microchip\xc8\v2.36\avr\avr\include\math.h:
--- /dev/null
+################################################################################
+# Automatically-generated file. Do not edit or delete the file
+################################################################################
+
+main.c
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <executable name="halloween_puff.elf">
+ <memory name="program">
+ <units>bytes</units>
+ <length>8192</length>
+ <used>1456</used>
+ <free>6736</free>
+ </memory>
+ <memory name="data">
+ <units>bytes</units>
+ <length>1024</length>
+ <used>21</used>
+ <free>1003</free>
+ </memory>
+ </executable>
+</project>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">
+ <ProjectComponents>
+ <ProjectComponent z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
+ <CApiVersion></CApiVersion>
+ <CBundle></CBundle>
+ <CClass>Device</CClass>
+ <CGroup>Startup</CGroup>
+ <CSub></CSub>
+ <CVariant></CVariant>
+ <CVendor>Atmel</CVendor>
+ <CVersion>1.7.0</CVersion>
+ <DefaultRepoPath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs</DefaultRepoPath>
+ <DependentComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+ <Description></Description>
+ <Files xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
+ <d4p1:anyType i:type="FileInfo">
+ <AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8\avr\include\avr\iom88p.h</AbsolutePath>
+ <Attribute></Attribute>
+ <Category>header</Category>
+ <Condition>XC</Condition>
+ <FileContentHash>8Uo83M1jILDTCAMw0T59TA==</FileContentHash>
+ <FileVersion></FileVersion>
+ <Name>xc8/avr/include/avr/iom88p.h</Name>
+ <SelectString></SelectString>
+ <SourcePath></SourcePath>
+ </d4p1:anyType>
+ </Files>
+ <PackName>ATmega_DFP</PackName>
+ <PackPath>C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/Atmel.ATmega_DFP.pdsc</PackPath>
+ <PackVersion>1.7.374</PackVersion>
+ <PresentInProject>true</PresentInProject>
+ <ReferenceConditionId>ATmega88P</ReferenceConditionId>
+ <RteComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
+ <d4p1:string></d4p1:string>
+ </RteComponents>
+ <Status>Resolved</Status>
+ <VersionMode>Fixed</VersionMode>
+ <IsComponentInAtProject>true</IsComponentInAtProject>
+ </ProjectComponent>
+ </ProjectComponents>
+</Store>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectVersion>7.0</ProjectVersion>
+ <ToolchainName>com.microchip.xc8</ToolchainName>
+ <ProjectGuid>2285C48D-296E-43FD-A7B6-69885F64CFFD</ProjectGuid>
+ <avrdevice>ATmega88P</avrdevice>
+ <avrdeviceseries>none</avrdeviceseries>
+ <OutputType>Executable</OutputType>
+ <Language>C</Language>
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>
+ <OutputFileExtension>.elf</OutputFileExtension>
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
+ <AssemblyName>halloween_puff</AssemblyName>
+ <Name>halloween_puff</Name>
+ <RootNamespace>halloween_puff</RootNamespace>
+ <ToolchainFlavour>XC8_2.36</ToolchainFlavour>
+ <KeepTimersRunning>true</KeepTimersRunning>
+ <OverrideVtor>false</OverrideVtor>
+ <CacheFlash>true</CacheFlash>
+ <ProgFlashFromRam>true</ProgFlashFromRam>
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>
+ <UncachedRange />
+ <preserveEEPROM>true</preserveEEPROM>
+ <OverrideVtorValue>exception_table</OverrideVtorValue>
+ <BootSegment>2</BootSegment>
+ <ResetRule>0</ResetRule>
+ <eraseonlaunchrule>0</eraseonlaunchrule>
+ <EraseKey />
+ <AsfFrameworkConfig>
+ <framework-data xmlns="">
+ <options />
+ <configurations />
+ <files />
+ <documentation help="" />
+ <offline-documentation help="" />
+ <dependencies>
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.52.0" />
+ </dependencies>
+ </framework-data>
+ </AsfFrameworkConfig>
+ <avrtool>com.atmel.avrdbg.tool.jtagice3plus</avrtool>
+ <avrtoolserialnumber>J30200019319</avrtoolserialnumber>
+ <avrdeviceexpectedsignature>0x1E930F</avrdeviceexpectedsignature>
+ <com_atmel_avrdbg_tool_jtagice3plus>
+ <ToolOptions>
+ <InterfaceProperties>
+ <IspClock>125000</IspClock>
+ </InterfaceProperties>
+ <InterfaceName>ISP</InterfaceName>
+ </ToolOptions>
+ <ToolType>com.atmel.avrdbg.tool.jtagice3plus</ToolType>
+ <ToolNumber>J30200019319</ToolNumber>
+ <ToolName>JTAGICE3</ToolName>
+ </com_atmel_avrdbg_tool_jtagice3plus>
+ <avrtoolinterface>ISP</avrtoolinterface>
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+ <ToolchainSettings>
+ <com.microchip.xc8>
+ <com.microchip.xc8.common.optimization.RelaxBranches>True</com.microchip.xc8.common.optimization.RelaxBranches>
+ <com.microchip.xc8.compiler.general.ChangeDefaultCharTypeUnsigned>True</com.microchip.xc8.compiler.general.ChangeDefaultCharTypeUnsigned>
+ <com.microchip.xc8.compiler.general.ChangeDefaultBitFieldUnsigned>True</com.microchip.xc8.compiler.general.ChangeDefaultBitFieldUnsigned>
+ <com.microchip.xc8.compiler.symbols.DefSymbols>
+ <ListValues>
+ <Value>(%24DeviceMacro)</Value>
+ <Value>NDEBUG</Value>
+ </ListValues>
+ </com.microchip.xc8.compiler.symbols.DefSymbols>
+ <com.microchip.xc8.compiler.optimization.level>Optimize for size (-Os)</com.microchip.xc8.compiler.optimization.level>
+ <com.microchip.xc8.compiler.optimization.PackStructureMembers>True</com.microchip.xc8.compiler.optimization.PackStructureMembers>
+ <com.microchip.xc8.compiler.optimization.AllocateBytesNeededForEnum>True</com.microchip.xc8.compiler.optimization.AllocateBytesNeededForEnum>
+ <com.microchip.xc8.compiler.warnings.AllWarnings>True</com.microchip.xc8.compiler.warnings.AllWarnings>
+ <com.microchip.xc8.linker.libraries.Libraries>
+ <ListValues>
+ <Value>libm</Value>
+ </ListValues>
+ </com.microchip.xc8.linker.libraries.Libraries>
+ </com.microchip.xc8>
+ </ToolchainSettings>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+ <ToolchainSettings>
+ <com.microchip.xc8>
+ <com.microchip.xc8.compiler.general.ChangeDefaultCharTypeUnsigned>True</com.microchip.xc8.compiler.general.ChangeDefaultCharTypeUnsigned>
+ <com.microchip.xc8.compiler.general.ChangeDefaultBitFieldUnsigned>True</com.microchip.xc8.compiler.general.ChangeDefaultBitFieldUnsigned>
+ <com.microchip.xc8.compiler.symbols.DefSymbols>
+ <ListValues>
+ <Value>(%24DeviceMacro)</Value>
+ <Value>DEBUG</Value>
+ </ListValues>
+ </com.microchip.xc8.compiler.symbols.DefSymbols>
+ <com.microchip.xc8.compiler.optimization.level>Optimize debugging experience (-Og)</com.microchip.xc8.compiler.optimization.level>
+ <com.microchip.xc8.compiler.optimization.PackStructureMembers>True</com.microchip.xc8.compiler.optimization.PackStructureMembers>
+ <com.microchip.xc8.compiler.optimization.AllocateBytesNeededForEnum>True</com.microchip.xc8.compiler.optimization.AllocateBytesNeededForEnum>
+ <com.microchip.xc8.compiler.optimization.DebugLevel>Default (-g2)</com.microchip.xc8.compiler.optimization.DebugLevel>
+ <com.microchip.xc8.compiler.warnings.AllWarnings>True</com.microchip.xc8.compiler.warnings.AllWarnings>
+ <com.microchip.xc8.linker.libraries.Libraries>
+ <ListValues>
+ <Value>libm</Value>
+ </ListValues>
+ </com.microchip.xc8.linker.libraries.Libraries>
+ <com.microchip.xc8.assembler.debugging.DebugLevel>Default (-Wa,-g)</com.microchip.xc8.assembler.debugging.DebugLevel>
+ </com.microchip.xc8>
+ </ToolchainSettings>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="main.c">
+ <SubType>compile</SubType>
+ </Compile>
+ </ItemGroup>
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+</Project>
\ No newline at end of file
--- /dev/null
+#define F_CPU 1000000UL
+#define I2C_FREQ 50000UL
+
+#include <avr/io.h>
+#include <util/delay.h>
+#include <stdint.h>
+
+// ============================================================
+// I2C configuration
+// ============================================================
+
+#define LCD_ADDR 0x27
+
+#define PIN_LENGTH 7
+
+char pin[PIN_LENGTH + 1] = {0};
+uint8_t pin_length = 0;
+char last_key = '\0';
+const char correct_pin[] = "7355608";
+
+// PCF8574 pin mapping for the LCD
+#define LCD_RS (1 << 0)
+#define LCD_RW (1 << 1)
+#define LCD_EN (1 << 2)
+#define LCD_BACKLIGHT (1 << 3)
+
+// ============================================================
+// I2C / TWI driver
+// ============================================================
+
+static void i2c_init(void)
+{
+ TWSR = 0;
+ TWBR = (uint8_t)((F_CPU / I2C_FREQ - 16) / 2);
+ TWCR = (1 << TWEN);
+}
+
+static void i2c_start(void)
+{
+ TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
+ while (!(TWCR & (1 << TWINT))) {
+ }
+}
+
+static void i2c_write(uint8_t data)
+{
+ TWDR = data;
+ TWCR = (1 << TWINT) | (1 << TWEN);
+ while (!(TWCR & (1 << TWINT))) {
+ }
+}
+
+static void i2c_stop(void)
+{
+ TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
+ while (TWCR & (1 << TWSTO)) {
+ }
+}
+
+static void i2c_write_byte(uint8_t address, uint8_t data)
+{
+ i2c_start();
+ i2c_write((address << 1) | 0);
+ i2c_write(data);
+ i2c_stop();
+}
+
+// ============================================================
+// HD44780 LCD via PCF8574 I2C expander
+// ============================================================
+
+static void lcd_expander_write(uint8_t data)
+{
+ i2c_write_byte(LCD_ADDR, data | LCD_BACKLIGHT);
+}
+
+static void lcd_pulse_enable(uint8_t data)
+{
+ lcd_expander_write(data | LCD_EN);
+ _delay_us(1);
+
+ lcd_expander_write(data & ~LCD_EN);
+ _delay_us(50);
+}
+
+static void lcd_write4(uint8_t nibble, uint8_t mode)
+{
+ uint8_t data = (nibble & 0xF0) | mode | LCD_BACKLIGHT;
+ lcd_expander_write(data);
+ lcd_pulse_enable(data);
+}
+
+static void lcd_send(uint8_t value, uint8_t mode)
+{
+ lcd_write4(value & 0xF0, mode);
+ lcd_write4((value << 4) & 0xF0, mode);
+}
+
+static void lcd_command(uint8_t cmd)
+{
+ lcd_send(cmd, 0);
+
+ if (cmd == 0x01 || cmd == 0x02) {
+ _delay_ms(2);
+ }
+}
+
+static void lcd_data(uint8_t data)
+{
+ lcd_send(data, LCD_RS);
+}
+
+static void lcd_putc(char c)
+{
+ lcd_data((uint8_t)c);
+}
+
+static void lcd_print(const char *str)
+{
+ while (*str) {
+ lcd_putc(*str++);
+ }
+}
+
+static void lcd_clear(void)
+{
+ lcd_command(0x01);
+}
+
+static void lcd_goto(uint8_t row, uint8_t col)
+{
+ uint8_t address = (row == 0) ? 0x00 : 0x40;
+ lcd_command(0x80 | (address + col));
+}
+
+static void lcd_init(void)
+{
+ _delay_ms(50);
+
+ lcd_write4(0x30, 0);
+ _delay_ms(5);
+
+ lcd_write4(0x30, 0);
+ _delay_us(150);
+
+ lcd_write4(0x30, 0);
+ _delay_us(150);
+
+ lcd_write4(0x20, 0);
+ _delay_us(150);
+
+ lcd_command(0x28); // 4-bit mode, 2 lines, 5x8 font
+ lcd_command(0x08); // Display off
+ lcd_command(0x01); // Clear display
+ lcd_command(0x06); // Entry mode: increment cursor
+ lcd_command(0x0C); // Display on, cursor off
+}
+
+// ============================================================
+// Main: initialize I2C and LCD only
+// ============================================================
+
+int main(void)
+{
+ // Configure Port D pins
+ DDRD &= ~((1 << DDD5) | (1 << DDD6) | (1 << DDD7));
+ PORTD |= (1 << PORTD5) | (1 << PORTD6) | (1 << PORTD7);
+
+ DDRD |= (1 << DDD0) | (1 << DDD1) |
+ (1 << DDD2) | (1 << DDD3);
+
+ // Configure PC0 and PC3 as outputs
+ DDRC |= (1 << DDC0) | (1 << DDC1) | (1 << DDC3);
+ PORTC = 0;
+
+ // Initialize I2C and LCD
+ i2c_init();
+ lcd_init();
+
+ lcd_clear();
+ lcd_goto(0, 0);
+ lcd_print("PIN: ");
+
+ // Keypad configuration
+ const uint8_t row_pins[4] = {PD0, PD1, PD2, PD3};
+ const uint8_t col_pins[3] = {PD5, PD6, PD7};
+
+ const char keypad[4][3] = {
+ {'1', '2', '3'},
+ {'4', '5', '6'},
+ {'7', '8', '9'},
+ {'*', '0', '#'}
+ };
+
+ char last_key = '\0';
+ uint16_t elapsed_ms = 0;
+
+ while (1)
+ {
+ char key = '\0';
+
+ // Scan keypad
+ for (uint8_t row = 0; row < 4; row++)
+ {
+ // Release all row pins
+ DDRD &= ~((1 << PD0) | (1 << PD1) |
+ (1 << PD2) | (1 << PD3));
+
+ PORTD &= ~((1 << PD0) | (1 << PD1) |
+ (1 << PD2) | (1 << PD3));
+
+ // Drive selected row LOW
+ DDRD |= (1 << row_pins[row]);
+ PORTD &= ~(1 << row_pins[row]);
+
+ _delay_us(10);
+
+ for (uint8_t col = 0; col < 3; col++)
+ {
+ if (!(PIND & (1 << col_pins[col])))
+ {
+ key = keypad[row][col];
+ break;
+ }
+ }
+
+ if (key != '\0')
+ break;
+ }
+
+ // Handle key presses
+ if (key == '\0')
+ {
+ last_key = '\0';
+ }
+ else if (key != last_key)
+ {
+ last_key = key;
+
+ if (key >= '0' && key <= '9' &&
+ pin_length < PIN_LENGTH)
+ {
+ // Blink LED on PC3 for 50 ms
+ PORTC |= (1 << PORTC3);
+ _delay_ms(50);
+ PORTC &= ~(1 << PORTC3);
+
+ // Store entered digit
+ pin[pin_length] = key;
+ pin_length++;
+
+ // Display entered digit
+ lcd_goto(0, 5 + pin_length - 1);
+ lcd_putc(key);
+
+ // Check when complete PIN has been entered
+ if (pin_length == PIN_LENGTH)
+ {
+ pin[pin_length] = '\0';
+
+ _delay_ms(200);
+ uint8_t match = 1;
+
+ for (uint8_t i = 0; i < PIN_LENGTH; i++)
+ {
+ if (pin[i] != correct_pin[i])
+ {
+ match = 0;
+ break;
+ }
+ }
+
+ if (match)
+ {
+ // Correct PIN
+ lcd_clear();
+ lcd_goto(0, 0);
+ lcd_print("Bomb planted!");
+
+ // 10-second countdown
+ for (int8_t remaining = 10;
+ remaining > 0;
+ remaining--)
+ {
+ lcd_goto(1, 0);
+ lcd_print("Countdown: ");
+ lcd_putc('0' + remaining / 10);
+ lcd_putc('0' + remaining % 10);
+ lcd_print(" ");
+
+ // Toggle LED and beep once per second
+ PINC = (1 << PINC3);
+
+ PINC = (1 << PINC0);
+ _delay_ms(20);
+ PINC = (1 << PINC0);
+
+ _delay_ms(1000 - 20);
+ }
+
+ // Countdown finished
+ lcd_clear();
+ lcd_goto(0, 0);
+ lcd_print("Puff!");
+ PORTC = 0;
+ PORTC = (1 << PORTC1) | (1 << PORTC3);
+
+ _delay_ms(100000);
+ }
+ else
+ {
+ // Incorrect PIN
+ lcd_clear();
+ lcd_goto(0, 0);
+ lcd_print("Wrong PIN!");
+
+ _delay_ms(5000);
+ }
+
+ // Reset PIN input
+ pin_length = 0;
+ pin[0] = '\0';
+
+ lcd_clear();
+ lcd_goto(0, 0);
+ lcd_print("PIN: ");
+
+ last_key = key;
+ }
+ }
+ }
+ }
+}
+