From: Nils Forssén Date: Mon, 2 Nov 2026 21:11:29 +0000 (+0100) Subject: initial commit X-Git-Url: https://gitweb.forssennils.se/sitemap.xml?a=commitdiff_plain;p=Halloween_puff.git initial commit --- ef54201f11da49e54452b8c71b1a07878704f20a diff --git a/.vs/halloween_puff/v14/.atsuo b/.vs/halloween_puff/v14/.atsuo new file mode 100644 index 0000000..5c49617 Binary files /dev/null and b/.vs/halloween_puff/v14/.atsuo differ diff --git a/halloween_puff.atsln b/halloween_puff.atsln new file mode 100644 index 0000000..3e08982 --- /dev/null +++ b/halloween_puff.atsln @@ -0,0 +1,22 @@ + +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 diff --git a/halloween_puff/Debug/Makefile b/halloween_puff/Debug/Makefile new file mode 100644 index 0000000..b4b4c39 --- /dev/null +++ b/halloween_puff/Debug/Makefile @@ -0,0 +1,125 @@ +################################################################################ +# 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 diff --git a/halloween_puff/Debug/halloween_puff.eep b/halloween_puff/Debug/halloween_puff.eep new file mode 100644 index 0000000..7c166a1 --- /dev/null +++ b/halloween_puff/Debug/halloween_puff.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/halloween_puff/Debug/halloween_puff.elf b/halloween_puff/Debug/halloween_puff.elf new file mode 100644 index 0000000..14fb8ec Binary files /dev/null and b/halloween_puff/Debug/halloween_puff.elf differ diff --git a/halloween_puff/Debug/halloween_puff.hex b/halloween_puff/Debug/halloween_puff.hex new file mode 100644 index 0000000..208b0d0 --- /dev/null +++ b/halloween_puff/Debug/halloween_puff.hex @@ -0,0 +1,185 @@ +: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 diff --git a/halloween_puff/Debug/halloween_puff.lss b/halloween_puff/Debug/halloween_puff.lss new file mode 100644 index 0000000..bd013f5 --- /dev/null +++ b/halloween_puff/Debug/halloween_puff.lss @@ -0,0 +1,2033 @@ + +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
+ 84: c9 c4 rjmp .+2450 ; 0xa18 + +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 / 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 : +} + +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 + ; +} + 9f6: 08 95 ret + +Disassembly of section .text.i2c_write: + +000009ae : + +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 + ; +} + 9c0: 08 95 ret + +Disassembly of section .text.i2c_stop: + +000009f8 : + +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 + ; +} + a06: 08 95 ret + +Disassembly of section .text.i2c_write_byte: + +00000948 : + +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_write((address << 1) | 0); + 952: 8d 2f mov r24, r29 + 954: 88 0f add r24, r24 + 956: 2b d0 rcall .+86 ; 0x9ae + i2c_write(data); + 958: 8c 2f mov r24, r28 + 95a: 29 d0 rcall .+82 ; 0x9ae + i2c_stop(); + 95c: 4d d0 rcall .+154 ; 0x9f8 +} + 95e: df 91 pop r29 + 960: cf 91 pop r28 + 962: 08 95 ret + +Disassembly of section .text.lcd_expander_write: + +00000a4a : +// 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 + a52: 08 95 ret + +Disassembly of section .text.adc_sampling_init: + +000007da : +// ============================================================ + +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 : + +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 + 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 + 1bc: 80 f3 brcs .-32 ; 0x19e + 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 + + 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 : +// 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 + 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 + 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 + 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 : + +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 + 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 + 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 + 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 + 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 : + +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 + 70a: c8 2f mov r28, r24 + int8_t row = get_row(f2); + 70c: c7 01 movw r24, r14 + 70e: 84 d0 rcall .+264 ; 0x818 + + // 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 + 714: 88 23 and r24, r24 + 716: 2c f4 brge .+10 ; 0x722 + col = get_column(f2); + 718: c7 01 movw r24, r14 + 71a: b9 d0 rcall .+370 ; 0x88e + 71c: c8 2f mov r28, r24 + row = get_row(f1); + 71e: c8 01 movw r24, r16 + 720: 7b d0 rcall .+246 ; 0x818 + } + + if (col < 0 || row < 0) + 722: cc 23 and r28, r28 + 724: cc f0 brlt .+50 ; 0x758 + 726: 88 23 and r24, r24 + 728: cc f0 brlt .+50 ; 0x75c + 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 + 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 + 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 : +{ + 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 + #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 + 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 + 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 + 904: 00 c0 rjmp .+0 ; 0x906 + 906: 00 00 nop + _delay_us(50); +} + 908: cf 91 pop r28 + 90a: 08 95 ret + +Disassembly of section .text.lcd_write4: + +00000998 : + +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_pulse_enable(data); + 9a6: 8c 2f mov r24, r28 + 9a8: 9e df rcall .-196 ; 0x8e6 +} + 9aa: cf 91 pop r28 + 9ac: 08 95 ret + +Disassembly of section .text.lcd_send: + +00000964 : + +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((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 +} + 97a: df 91 pop r29 + 97c: cf 91 pop r28 + 97e: 08 95 ret + +Disassembly of section .text.lcd_data: + +00000a54 : + _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 + a58: 08 95 ret + +Disassembly of section .text.lcd_putc: + +00000a5a : +} + +static void lcd_putc(char c) +{ + lcd_data((uint8_t)c); + a5a: fc df rcall .-8 ; 0xa54 + a5c: 08 95 ret + +Disassembly of section .text.lcd_print: + +000008bc : +} + +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_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_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_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 : + +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 + 512: 00 d0 rcall .+0 ; 0x514 + 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 +{ + 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 + 586: 03 c0 rjmp .+6 ; 0x58e + + while (n < width) { + lcd_putc(' '); + 588: 80 e2 ldi r24, 0x20 ; 32 + 58a: 67 d2 rcall .+1230 ; 0xa5a + 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 + 592: 09 c0 rjmp .+18 ; 0x5a6 + 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 + while (n < width) { + lcd_putc(' '); + width--; + } + + while (n > 0) + 5a6: 11 11 cpse r17, r1 + 5a8: f5 cf rjmp .-22 ; 0x594 + 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_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 + + 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 + #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 + 922: 00 c0 rjmp .+0 ; 0x924 + 924: 00 00 nop + _delay_ms(2); +} + 926: cf 91 pop r28 + 928: 08 95 ret + +Disassembly of section .text.lcd_goto: + +00000a26 : + 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 + a30: 08 95 ret + +Disassembly of section .text.lcd_init: + +0000076a : + 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 + 778: 00 c0 rjmp .+0 ; 0x77a + 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 + 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 + 78a: 00 c0 rjmp .+0 ; 0x78c + 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 + #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 + 79c: 00 c0 rjmp .+0 ; 0x79e + 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 + 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 + 7ae: 00 c0 rjmp .+0 ; 0x7b0 + 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 + 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 + 7c0: 00 c0 rjmp .+0 ; 0x7c2 + 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(0x08); // Display off + 7c8: 88 e0 ldi r24, 0x08 ; 8 + 7ca: a0 d0 rcall .+320 ; 0x90c + lcd_command(0x01); // Clear display + 7cc: 81 e0 ldi r24, 0x01 ; 1 + 7ce: 9e d0 rcall .+316 ; 0x90c + lcd_command(0x06); // Increment cursor + 7d0: 86 e0 ldi r24, 0x06 ; 6 + 7d2: 9c d0 rcall .+312 ; 0x90c + lcd_command(0x0C); // Display on, cursor off + 7d4: 8c e0 ldi r24, 0x0C ; 12 + 7d6: 9a d0 rcall .+308 ; 0x90c + 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 + 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 + 680: 90 91 01 03 lds r25, 0x0301 ; 0x800301 + 684: 01 96 adiw r24, 0x01 ; 1 + 686: 90 93 01 03 sts 0x0301, r25 ; 0x800301 + 68a: 80 93 00 03 sts 0x0300, r24 ; 0x800300 + + if (!block_ready) { + 68e: 80 91 04 03 lds r24, 0x0304 ; 0x800304 + 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 + 69a: 90 91 03 03 lds r25, 0x0303 ; 0x800303 + 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 + 6c6: 80 93 02 03 sts 0x0302, r24 ; 0x800302 + block_ready = 1; + 6ca: 81 e0 ldi r24, 0x01 ; 1 + 6cc: 80 93 04 03 sts 0x0304, r24 ; 0x800304 + 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 + 6e0: 80 93 02 03 sts 0x0302, r24 ; 0x800302 + } + } +} + 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 +// ============================================================ + +int main(void) +{ + 5be: cf 93 push r28 + 5c0: df 93 push r29 + 5c2: 00 d0 rcall .+0 ; 0x5c4 + 5c4: 00 d0 rcall .+0 ; 0x5c6 + 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 + lcd_init(); + 5cc: ce d0 rcall .+412 ; 0x76a + adc_sampling_init(); + 5ce: 05 d1 rcall .+522 ; 0x7da + + 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_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 + + while (1) { + if (block_ready) { + 5e0: 80 91 04 03 lds r24, 0x0304 ; 0x800304 + 5e4: 88 23 and r24, r24 + 5e6: e1 f3 breq .-8 ; 0x5e0 + // 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 + + // 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 + 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 + 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_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_putc(key); + 618: 81 2f mov r24, r17 + 61a: 1f d2 rcall .+1086 ; 0xa5a + 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 + } + + // 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_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_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(" 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_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 + + // Restart sampling atomically + cli(); + 64a: f8 94 cli + + sample_index = 0; + 64c: 10 92 03 03 sts 0x0303, r1 ; 0x800303 + 650: 10 92 02 03 sts 0x0302, r1 ; 0x800302 + block_ready = 0; + 654: 10 92 04 03 sts 0x0304, r1 ; 0x800304 + 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 + +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 : + 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> diff --git a/halloween_puff/Debug/halloween_puff.map b/halloween_puff/Debug/halloween_puff.map new file mode 100644 index 0000000..c15aa7b --- /dev/null +++ b/halloween_puff/Debug/halloween_puff.map @@ -0,0 +1,783 @@ +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 diff --git a/halloween_puff/Debug/main.d b/halloween_puff/Debug/main.d new file mode 100644 index 0000000..4b3499b --- /dev/null +++ b/halloween_puff/Debug/main.d @@ -0,0 +1,52 @@ +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: diff --git a/halloween_puff/Debug/main.o b/halloween_puff/Debug/main.o new file mode 100644 index 0000000..bd2f0d4 Binary files /dev/null and b/halloween_puff/Debug/main.o differ diff --git a/halloween_puff/Debug/makedep.mk b/halloween_puff/Debug/makedep.mk new file mode 100644 index 0000000..6a14fde --- /dev/null +++ b/halloween_puff/Debug/makedep.mk @@ -0,0 +1,6 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +main.c + diff --git a/halloween_puff/Debug/memoryfile.xml b/halloween_puff/Debug/memoryfile.xml new file mode 100644 index 0000000..f40a207 --- /dev/null +++ b/halloween_puff/Debug/memoryfile.xml @@ -0,0 +1,17 @@ + + + + + bytes + 8192 + 2663 + 5529 + + + bytes + 1024 + 517 + 507 + + + diff --git a/halloween_puff/Release/Makefile b/halloween_puff/Release/Makefile new file mode 100644 index 0000000..c74f7e6 --- /dev/null +++ b/halloween_puff/Release/Makefile @@ -0,0 +1,125 @@ +################################################################################ +# 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 diff --git a/halloween_puff/Release/halloween_puff.eep b/halloween_puff/Release/halloween_puff.eep new file mode 100644 index 0000000..7c166a1 --- /dev/null +++ b/halloween_puff/Release/halloween_puff.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/halloween_puff/Release/halloween_puff.elf b/halloween_puff/Release/halloween_puff.elf new file mode 100644 index 0000000..e24e33d Binary files /dev/null and b/halloween_puff/Release/halloween_puff.elf differ diff --git a/halloween_puff/Release/halloween_puff.hex b/halloween_puff/Release/halloween_puff.hex new file mode 100644 index 0000000..f0010a7 --- /dev/null +++ b/halloween_puff/Release/halloween_puff.hex @@ -0,0 +1,101 @@ +: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 diff --git a/halloween_puff/Release/halloween_puff.lss b/halloween_puff/Release/halloween_puff.lss new file mode 100644 index 0000000..325b508 --- /dev/null +++ b/halloween_puff/Release/halloween_puff.lss @@ -0,0 +1,785 @@ + +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
+ 8a: 84 c2 rjmp .+1288 ; 0x594 + +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 : + 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 + 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 + 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 + 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 + d4: 08 95 ret + +Disassembly of section .text.lcd_pulse_enable: + +000000d6 : + 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 + 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 + ee: 80 e1 ldi r24, 0x10 ; 16 + f0: 8a 95 dec r24 + f2: f1 f7 brne .-4 ; 0xf0 + f4: 00 c0 rjmp .+0 ; 0xf6 + f6: cf 91 pop r28 + f8: 08 95 ret + +Disassembly of section .text.lcd_send: + +000000fa : + 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 + 114: 81 2f mov r24, r17 + 116: df df rcall .-66 ; 0xd6 + 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 + 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 + +Disassembly of section .text.startup.main: + +00000161 : + ... + +00000162
: + 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 + 1a8: 00 c0 rjmp .+0 ; 0x1aa + 1aa: 00 00 nop + 1ac: 68 e3 ldi r22, 0x38 ; 56 + 1ae: 87 e2 ldi r24, 0x27 ; 39 + 1b0: 70 df rcall .-288 ; 0x92 + 1b2: 88 e3 ldi r24, 0x38 ; 56 + 1b4: 90 df rcall .-224 ; 0xd6 + 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 + 1be: 00 c0 rjmp .+0 ; 0x1c0 + 1c0: 00 00 nop + 1c2: 68 e3 ldi r22, 0x38 ; 56 + 1c4: 87 e2 ldi r24, 0x27 ; 39 + 1c6: 65 df rcall .-310 ; 0x92 + 1c8: 88 e3 ldi r24, 0x38 ; 56 + 1ca: 85 df rcall .-246 ; 0xd6 + 1cc: b2 e3 ldi r27, 0x32 ; 50 + 1ce: ba 95 dec r27 + 1d0: f1 f7 brne .-4 ; 0x1ce + 1d2: 68 e3 ldi r22, 0x38 ; 56 + 1d4: 87 e2 ldi r24, 0x27 ; 39 + 1d6: 5d df rcall .-326 ; 0x92 + 1d8: 88 e3 ldi r24, 0x38 ; 56 + 1da: 7d df rcall .-262 ; 0xd6 + 1dc: e2 e3 ldi r30, 0x32 ; 50 + 1de: ea 95 dec r30 + 1e0: f1 f7 brne .-4 ; 0x1de + 1e2: 68 e2 ldi r22, 0x28 ; 40 + 1e4: 87 e2 ldi r24, 0x27 ; 39 + 1e6: 55 df rcall .-342 ; 0x92 + 1e8: 88 e2 ldi r24, 0x28 ; 40 + 1ea: 75 df rcall .-278 ; 0xd6 + 1ec: f2 e3 ldi r31, 0x32 ; 50 + 1ee: fa 95 dec r31 + 1f0: f1 f7 brne .-4 ; 0x1ee + 1f2: 60 e0 ldi r22, 0x00 ; 0 + 1f4: 88 e2 ldi r24, 0x28 ; 40 + 1f6: 81 df rcall .-254 ; 0xfa + 1f8: 60 e0 ldi r22, 0x00 ; 0 + 1fa: 88 e0 ldi r24, 0x08 ; 8 + 1fc: 7e df rcall .-260 ; 0xfa + 1fe: 60 e0 ldi r22, 0x00 ; 0 + 200: 81 e0 ldi r24, 0x01 ; 1 + 202: 7b df rcall .-266 ; 0xfa + 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 + 216: 60 e0 ldi r22, 0x00 ; 0 + 218: 8c e0 ldi r24, 0x0C ; 12 + 21a: 6f df rcall .-290 ; 0xfa + 21c: 60 e0 ldi r22, 0x00 ; 0 + 21e: 81 e0 ldi r24, 0x01 ; 1 + 220: 6c df rcall .-296 ; 0xfa + 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 + 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 + 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 + 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 + 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 + 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 + 378: 61 e0 ldi r22, 0x01 ; 1 + 37a: 8b 2d mov r24, r11 + 37c: be de rcall .-644 ; 0xfa + 37e: 80 91 0c 01 lds r24, 0x010C ; 0x80010c + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 462: 61 e0 ldi r22, 0x01 ; 1 + 464: 80 e2 ldi r24, 0x20 ; 32 + 466: 49 de rcall .-878 ; 0xfa + 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 + 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 + 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 + 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 + 4ee: 10 92 0d 01 sts 0x010D, r1 ; 0x80010d + 4f2: 60 e0 ldi r22, 0x00 ; 0 + 4f4: 81 e0 ldi r24, 0x01 ; 1 + 4f6: 01 de rcall .-1022 ; 0xfa + 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 + 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 + 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 + 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 + 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 + 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 : + 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> diff --git a/halloween_puff/Release/halloween_puff.map b/halloween_puff/Release/halloween_puff.map new file mode 100644 index 0000000..327dc08 --- /dev/null +++ b/halloween_puff/Release/halloween_puff.map @@ -0,0 +1,520 @@ +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 diff --git a/halloween_puff/Release/main.d b/halloween_puff/Release/main.d new file mode 100644 index 0000000..e6bda49 --- /dev/null +++ b/halloween_puff/Release/main.d @@ -0,0 +1,49 @@ +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: diff --git a/halloween_puff/Release/main.o b/halloween_puff/Release/main.o new file mode 100644 index 0000000..808de0c Binary files /dev/null and b/halloween_puff/Release/main.o differ diff --git a/halloween_puff/Release/makedep.mk b/halloween_puff/Release/makedep.mk new file mode 100644 index 0000000..6a14fde --- /dev/null +++ b/halloween_puff/Release/makedep.mk @@ -0,0 +1,6 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +main.c + diff --git a/halloween_puff/Release/memoryfile.xml b/halloween_puff/Release/memoryfile.xml new file mode 100644 index 0000000..503b1ef --- /dev/null +++ b/halloween_puff/Release/memoryfile.xml @@ -0,0 +1,17 @@ + + + + + bytes + 8192 + 1456 + 6736 + + + bytes + 1024 + 21 + 1003 + + + diff --git a/halloween_puff/halloween_puff.componentinfo.xml b/halloween_puff/halloween_puff.componentinfo.xml new file mode 100644 index 0000000..53b67ea --- /dev/null +++ b/halloween_puff/halloween_puff.componentinfo.xml @@ -0,0 +1,42 @@ + + + + + + + Device + Startup + + + Atmel + 1.7.0 + C:/Program Files (x86)\Atmel\Studio\7.0\Packs + + + + + C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\xc8\avr\include\avr\iom88p.h + + header + XC + 8Uo83M1jILDTCAMw0T59TA== + + xc8/avr/include/avr/iom88p.h + + + + + ATmega_DFP + C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/Atmel.ATmega_DFP.pdsc + 1.7.374 + true + ATmega88P + + + + Resolved + Fixed + true + + + \ No newline at end of file diff --git a/halloween_puff/halloween_puff.cproj b/halloween_puff/halloween_puff.cproj new file mode 100644 index 0000000..5d0b8a1 --- /dev/null +++ b/halloween_puff/halloween_puff.cproj @@ -0,0 +1,115 @@ + + + + 2.0 + 7.0 + com.microchip.xc8 + 2285C48D-296E-43FD-A7B6-69885F64CFFD + ATmega88P + none + Executable + C + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + halloween_puff + halloween_puff + halloween_puff + XC8_2.36 + true + false + true + true + 0x20000000 + + true + exception_table + 2 + 0 + 0 + + + + + + + + + + + + + + com.atmel.avrdbg.tool.jtagice3plus + J30200019319 + 0x1E930F + + + + 125000 + + ISP + + com.atmel.avrdbg.tool.jtagice3plus + J30200019319 + JTAGICE3 + + ISP + 125000 + + + + + True + True + True + + + (%24DeviceMacro) + NDEBUG + + + Optimize for size (-Os) + True + True + True + + + libm + + + + + + + + + True + True + + + (%24DeviceMacro) + DEBUG + + + Optimize debugging experience (-Og) + True + True + Default (-g2) + True + + + libm + + + Default (-Wa,-g) + + + + + + compile + + + + \ No newline at end of file diff --git a/halloween_puff/main.c b/halloween_puff/main.c new file mode 100644 index 0000000..e57bf71 --- /dev/null +++ b/halloween_puff/main.c @@ -0,0 +1,334 @@ +#define F_CPU 1000000UL +#define I2C_FREQ 50000UL + +#include +#include +#include + +// ============================================================ +// 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; + } + } + } + } +} +