From ef54201f11da49e54452b8c71b1a07878704f20a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nils=20Forss=C3=A9n?= Date: Mon, 2 Nov 2026 22:11:29 +0100 Subject: [PATCH 1/1] initial commit --- .vs/halloween_puff/v14/.atsuo | Bin 0 -> 22016 bytes halloween_puff.atsln | 22 + halloween_puff/Debug/Makefile | 125 + halloween_puff/Debug/halloween_puff.eep | 1 + halloween_puff/Debug/halloween_puff.elf | Bin 0 -> 26288 bytes halloween_puff/Debug/halloween_puff.hex | 185 ++ halloween_puff/Debug/halloween_puff.lss | 2033 +++++++++++++++++ halloween_puff/Debug/halloween_puff.map | 783 +++++++ halloween_puff/Debug/main.d | 52 + halloween_puff/Debug/main.o | Bin 0 -> 35064 bytes halloween_puff/Debug/makedep.mk | 6 + halloween_puff/Debug/memoryfile.xml | 17 + halloween_puff/Release/Makefile | 125 + halloween_puff/Release/halloween_puff.eep | 1 + halloween_puff/Release/halloween_puff.elf | Bin 0 -> 10128 bytes halloween_puff/Release/halloween_puff.hex | 101 + halloween_puff/Release/halloween_puff.lss | 785 +++++++ halloween_puff/Release/halloween_puff.map | 520 +++++ halloween_puff/Release/main.d | 49 + halloween_puff/Release/main.o | Bin 0 -> 4908 bytes halloween_puff/Release/makedep.mk | 6 + halloween_puff/Release/memoryfile.xml | 17 + .../halloween_puff.componentinfo.xml | 42 + halloween_puff/halloween_puff.cproj | 115 + halloween_puff/main.c | 334 +++ 25 files changed, 5319 insertions(+) create mode 100644 .vs/halloween_puff/v14/.atsuo create mode 100644 halloween_puff.atsln create mode 100644 halloween_puff/Debug/Makefile create mode 100644 halloween_puff/Debug/halloween_puff.eep create mode 100644 halloween_puff/Debug/halloween_puff.elf create mode 100644 halloween_puff/Debug/halloween_puff.hex create mode 100644 halloween_puff/Debug/halloween_puff.lss create mode 100644 halloween_puff/Debug/halloween_puff.map create mode 100644 halloween_puff/Debug/main.d create mode 100644 halloween_puff/Debug/main.o create mode 100644 halloween_puff/Debug/makedep.mk create mode 100644 halloween_puff/Debug/memoryfile.xml create mode 100644 halloween_puff/Release/Makefile create mode 100644 halloween_puff/Release/halloween_puff.eep create mode 100644 halloween_puff/Release/halloween_puff.elf create mode 100644 halloween_puff/Release/halloween_puff.hex create mode 100644 halloween_puff/Release/halloween_puff.lss create mode 100644 halloween_puff/Release/halloween_puff.map create mode 100644 halloween_puff/Release/main.d create mode 100644 halloween_puff/Release/main.o create mode 100644 halloween_puff/Release/makedep.mk create mode 100644 halloween_puff/Release/memoryfile.xml create mode 100644 halloween_puff/halloween_puff.componentinfo.xml create mode 100644 halloween_puff/halloween_puff.cproj create mode 100644 halloween_puff/main.c diff --git a/.vs/halloween_puff/v14/.atsuo b/.vs/halloween_puff/v14/.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..5c49617f4faf6c4ecb1f4ecb9a5e01261e0adcd6 GIT binary patch literal 22016 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 "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 0000000000000000000000000000000000000000..14fb8ec63bd3d6657fd6e3375a9f3fd43713300b GIT binary patch literal 26288 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bd2f0d49a90950823d0ada79773e980d10c34ee8 GIT binary patch literal 35064 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

c4{cV`08;|CR8&i2otX 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 Crrx~( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e24e33d907ed59d58ed0161a38c7ec48e2589484 GIT binary patch literal 10128 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%0D1+aCSWvP zK#bQM?u!%Su`wqZ5U(y^`F0S*0Et?HevmSg2@Zw%n7+b%bh0oXo*NuR)M2L+^XYWL z*Tb;yhlW7h|0gvqKGMTT$>G(h%g$Udz})vkS@7_`&+SQ)Wj zA6SC?3QlJrzlziAB6-SOAJ~96JUyx|LrnAUz+u4r*CM6)pRMX>)_|1eKULLZnKnZZ z2-M&I?f(1}_0s%fdE=PKo<~aaujxtb7&OhlrYEyMKSmD}?+u~+UD9Fy znQRgphk|_l)1dYKC7{+B&~*Kx7_R2=Y?0ufE@+3K^9B6_=*LkPg;;}u{Ro=A3{s%^ z-l}R^yG{aTx^3G8L~ z>-STdk7HCn%@G3WQONJpBpZ+UJ}1=wk)SUL`kJ7>fyS>IsQy?QTf(583(fbRmAUl;ZT7jVSQWl^%cY=&`K~oCmzK%aGI)(pGybX? zm(R0V%|Gt(dBdV2vDCHISK;@#O1Aqwtg^JsRZ~}4>v4Ii-6fS8sP$Brq0X|ps;cd- zP3Xv=sH-lmb$P4Renn_)MO9s;+wb*-u~YA~I-W|eyA0iT`{=dwF;6M^B_gDr)d&j!IAUW`8+|Zl&h*d>WTuGMFb^=5>`;dfYx&No_5p zwm%5ZxmKKTxS}%8CU;#WH;dH0!mP|(TTyX=^B%*Xvl=-AYFpl#?dsIBQm@a4v+hFY z)rC9Q3Y{7LbaUsm+~ckp(m5A596F1|h0cQiwnyQSB+}&R(?g?BYu1;ecA9jh4MIE7 zV5M7_%R{SUu!eMft-8y~e85g;enDQ&J?2Aik%p+}&0L;Vm(EeCYc58r}J&*dCR;`7})n30x-dtTLV@rx!9;+zzXthwgvT(Oa)XK@b=0C{gF_64*XBC`Y|0&Mix+? zeP#5|EnJ{SB83?^C_jSy5KiFGpDm=rk2y9MdGf>3Q3KUSpI`JqHr-CC9uC4Uyn|Aa zZp(zy^JF*zzngdl>p`~_0_b_NwPCxa?|n$?HaC|io`!8#nr`H5Ra~C@s>Zec*6M>mD%aOm~XUT8IhgAC!I*L@6H_oF>h z6U1!Y390UPj`O3v)34!2`zJlBcWzo&x{d65 zehKGC?`Gt8uli^&LuF_^(>rJe{PaFieR}=}5kH(?_&L7E?{UtL_9&~r$M1R0kKQHM zz>i<|db|I?`O!Ll_KO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..808de0c254859cea1aebf5e85f9e7dea2f277299 GIT binary patch literal 4908 zcma);4{TG%9mnq_X_97u6QGD?Knz5Th4O4j2rQ%E68=p?U?}UVs_ToB7y>wU=9m_y zu5m&Z2Rj0rBtU6ZLN`GbRgBPyCX|6iyNR+PBFYf$s&K@l3k--s5$X_yeSh{{@<@u- zv(Deo?{~lZ-QBzMJ6A1Pu~bnMCX2#eV1pK8Ck%|$qA@QPFrAHKV_4ITVB-lE44q(m z9#%E=60aL<~Zn>Qza?!2Go zn5WW!=RWHCsAP}f*f&jGrwk|0o$|Ns{EfdO(B^dpI>1H#4qscK$k#ExJ$+XPtKr_p zc28sHw?7?p|5RVtRn91Wt}bjtlGlAM7^PUdu)ijr__f2{lHs& zs_*Za|4RE$T6G2sPpqrvJA5^Kr*9jt5B#2Q57cpgz{dlD2F`hucPSaWmEg!-v^hmw z;px1WKUDAY{pv&Ix!o3S<^DErRqQEM1v+xtt|(^|B}j+kt*o@Bg#MZt{*JfX_9`Rb zn_|d~`%K>E?Nb9CQ+W=uGS;Q6-fiS&zP&BTM z)nfB%P!VV0vkHw+YiQ0oz>n|`41dY;8{W?PN_o%lVb+P@$3`W(=^5G&@2$W{znS%W zLyY;Lh5I76qLEo*R|@x%ztd<~=?HJ6#9Oe5{qWn)OGPji`8BQ7i}QA`y_(l` z9P0h>syw%K9jC6}>buL^tlSc{#7}r@(}8sS)W73Y(z)~YSoo)^g%(R?zI|_dYxj|!+kH`fz`d@NojrAc3GO^H;d^incOK0b?TeuaEQ$R>*x4~VnY|+H{FqIn z50*s4>q{a_)|;5^h#~gS{%J$ne=x*OA7ayL2TLLwHE4hm87?keNo1p$UD(-}>S)Yo zqp;~2WUzGhJ7LqzGVs~_m_3SB3p*ZfV18kf(CpqCVzY9b1GR){+6z`~xu(ToMI6>F zSr!9Nd4=Y-uaEI>?QWMaHq0*3UUzTs*tO!V9y@cClxh{59hG*??z9y<;*LtYvotma ztH614*q!S=Wvs;IcH2ul8eGg_tMq7_>{~H#sY@$yRczHtZ62F29d?^rE3T}J?M&iG z7TYl+)<8^WXSU#Hp%%dfP}(Vqp)w9t@&s@Kwt@OiB0ty&9ZxLcDTe%1a!{q8{$EIc z?EGQ-7Qwfa{NUx#mBb>?8e);>WpDywUV_pYrTAB&rNkn>j9A1w!4&U+dUP>cbTMy= zm^Yxcx|n)h%nlLL0Bs__IHLP>+@j<6!8GncXe;@_A3%>1i@xnTKB?osfvNAO&@mHGyuyM(_1x?A{rw zo|DkqI{!l*Ct>|^o}LW4B9D}evg-QFOWVbl1AH8Tyo$+npXP_4}3|ArM z9wU_}#Z5+AD(e4>qcb#g+{N(8BFCKu2eyz|L_-pio56In$xn3z>Jn6aKDw{7QDu?& zEO6-a<>~Szi#EzLy&CFl1u#K|^&+?nqgclkTwD8DQ+_f + + + + 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; + } + } + } + } +} + -- 2.47.3