From 5223e8bc9be70a0be407867c8456655b730453ee Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Wed, 14 May 2014 16:10:05 +0000 Subject: [PATCH] 20140514-181000 --- V2/Programm/Programm.atsuo | Bin 19456 -> 20480 bytes V2/Programm/Programm/Debug/Makefile | 2 +- V2/Programm/Programm/Debug/Programm.d | 16 +- V2/Programm/Programm/Debug/Programm.elf | Bin 185094 -> 93270 bytes V2/Programm/Programm/Debug/Programm.hex | 798 +- V2/Programm/Programm/Debug/Programm.lss | 14943 +++---------------- V2/Programm/Programm/Debug/Programm.map | 243 +- V2/Programm/Programm/Debug/Programm.srec | 798 +- V2/Programm/Programm/Programm.cpp | 59 +- V2/Programm/Programm/Programm.cppproj | 93 +- V2/Programm/Programm/io/Display.hpp | 4 +- V2/Programm/Programm/io/Input.hpp | 27 + V2/Programm/Programm/io/Spi.hpp | 86 + V2/Programm/Programm/io/hardware/portj.hpp | 22 + V2/Programm/Programm/io/hardware/portk.hpp | 22 + V2/Programm/Programm/io/rfm12b.hpp | 160 + V2/Programm/Programm/peripheral.h | 39 + 17 files changed, 3062 insertions(+), 14250 deletions(-) create mode 100644 V2/Programm/Programm/io/Input.hpp create mode 100644 V2/Programm/Programm/io/Spi.hpp create mode 100644 V2/Programm/Programm/io/hardware/portj.hpp create mode 100644 V2/Programm/Programm/io/hardware/portk.hpp create mode 100644 V2/Programm/Programm/io/rfm12b.hpp diff --git a/V2/Programm/Programm.atsuo b/V2/Programm/Programm.atsuo index 2101dac331693bbf797130aa4a1d1dca3e43b8ae..b520818c057bfd966c7e1067cf9b79cd02f7c926 100644 GIT binary patch delta 2465 zcmd5-YfRHu6u-B$wX~(QJPYzDAW|NMzJ$ulmX<2w0Fi+vT}VSa=;Sr{Ll99qm$)xx zXipZ+GB;+-HgP(&bLuu{mCcNOKus2B_F>A$nJt@1_kb;Q=k}pr{4hUl_vZJ%=l;&Q z_x{g0_u)N8y|eV(6pyZleZq9XYA6(1J-@w|`uN+Z4D$H7vVi@Xqr>w>&M4PFr+CIoHpwX6)haz1ZV04sv`GTujh38EA+j?f_3?0fuIghf=!#7U&~ zBH*Vr#{@DIxbh_}*sf@UExv%#f&3AmEDIi4z!P(?}bX7J%p#%3bJ zkFlJjO~l5EqJ%#v>EMO`k(0H?lQl@MkJ$#1q0BfjX3QnNPS=Pegb2wsxUN40vs;Yx z21=E_Bu;n@%|sL?leUJJK(p}g2~$vzNnjZPKYXiOKydEzD|&f#J8}V47{nU zIGGQ0+A?TOeK~H-J>n0fmhcQlwAf25L{IFbkyH^QesvhThOlfvNr%-&v?y7^Ityeg zzmxEA94m*34MNIn`4YE!!g}ep;%p|FT}TYgVm~|G89~}oE75j6v9e&3&``z zfXfN{4#Au@ksJ+Dqt<>dw?n|skMTrHSdCedL!&gkwB08uRt;M?6qPI6z85?z)hAN{$ zqtn^68cU36TQZrKNB{S_`T=CEPAb zgOaMdFkG{r_ClyiM^Ayy)Xcw%w%|1>r`cur0d`nBhwW*^hln##?jvl^AICEEWC+s_eSBEE=n0c@`$ZXo6nY%K;XN4kFWd#m?Tu+_}L!+J4Zj_lez z3A(B`;BK7^PSm>m=DJto@Yw4hXvXtYh2fy+z4UEPCEvV^ww%z*gbGWE^F|LcoeRf~DpRJlrJ4utahUkMwFVtLE0e z^w`aN`7@XAr!>BEdf!F)@uO}hb2Az4q^Nn{Q)o-DPj`?Zto@`1=|%+BSMcb;TuqioD+2;*wc_+oMQ}I?kO`ztQ_HWdT`aT z^~4pPaum&7NDqboT(E8F=ZQBf7JgUjxm}Zo2in#d zgV+7S&Ze1~j$qGppRXVVAm(@xr;wStc;#B|CIMrgjhB1DFq#oaOaWn}m1*KTaQ8R%+4Nz&FugHw= zR=}5=PYrknW;Yv*M(_y=H(@!am>MGnSw_L9$lU-%b2F?KHQ@MqY-|4k DJB7nn delta 1389 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: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 at`}01Jr3{Xo5cm)dKY)@)Z1z?&;JA0dbzy- literal 185094 zcmeFa3wTw<+4jFCn}h_AGZr}|1_Xp8B)CPSh=_S=$ONx=V) zwDT<$ZRXMzw8tMQh1!>oCM^wS{M+Eqho8ou6qxbXDZAUNQ?~a1=hnPI^9BvtWWM~? z;kWmHwBvU>ysA1o8dj~U+En%F;bZ%~s@gkJDr**>v1HYG&)59pvFxffl5@ zx$Lp!J(qV~zG~UB-Ili)nZADC55vK#}v-R zpCk33BMRph9bWiS(c#Aqt4F^+=2d#$Uv+-bz4RB|S2%aUCl9~mXFc`R#;OJq1>bb! ze*DCzChxQ{UzJq-=VRjiYrgHYul&i%kK?Z#&zN2H@Jq$Bi^mktbw^Y@d*$@vxzByF z<6|>MDEAi6#h>>T&n>I^*=cij96tL{wCeeRSv~W6eyr!v&0O&>GEetvX2$1!RqV_i zXWY%`xolb0?5YK=TO3)neA)7pN}l~Emp`_AK|P#DoJmqqGVq>b3#yDKuFoF$^s%1H ziw+l-wpZz~w@Uw9`nwlDdhyOj>uo(=_R)@dFaK^w?WzV<_41DIe=e`Q&E~S|+$aLl68Prj%zXH?J#=5QMPK^HCS`xWwRC-D@zuoz>D6oX znjgOoeZTee;mVcyAEVcphkMOj{p6+7&(w2Y?6CJoH&(8UCg$GpJ#&9txw0TJ_u+qW zhTPX}S-J9jUOn7C-}^mt<5|TcR+K(`T7G7i%x*B`&CDeem(2NiN!7~IqS8Mvd231C zvNjFs703VkB=<<}4_DvQ-C3Oe+VR8H*S*{Ne(TE*S6_ec_Mf@~{Nd{R?=twq)z|ZW zxcc($>VN9$JO7KK(ud^wduqwyr0efra=&}zhwJYT*Izz&`F{7i|Ea6T54+!g_v-P( z_4nVM!5^-_KU{zPryKt>*Wdj=JX^+{%@0@CAFi(Pr)uBtncV;W=NmsTi$UPpAUcX{J^T7)$)mYowC2H!cUe|)h%1+rN?R(A1$fMJ*%u^jf+?7HqlnGemcS~R!W+zfobVddvf%zb3;9@TH@1~ul9dmh=N)Y7_T*EBdh`}l)Z z^}f!mKPPW#{B!R=m%LSySyHbgJ=ST-#Y?VQG8E6bA6QbfWaX0Qmh8ZD?muI%eQJsO z$~n#}&r)}&h3Z@Nqd8~JnLB&-sa>xuXfwC0Bxh0G$6Fm!rL&K!((fKDDLpm2WTINo zI^)QuS03zq;gPuZVCQp>yr_yX&Iye^f9vX;f}E_Xtj_C>JluJBb^9ZQov*H*+xe~| zwJRU#d|`Frc~=}cdszF*>|t$&om1ItJO*G~D@bjzP{r0uD+$`e&X zpU6L>L7Qvx8dWZ=>Z;r4iQ;<~OY_9#op&{z#pnnOB|q6qoDo5o`s!FMxc=&T%7>Q(+-wfpwLl6EI&mkd>AUJL4XEBm_Ys%BTGU()#M8h0K0s&ZbJ2GtLBx#aK1 zRl8F)D~HX#YxbPkrL#HGbbYj--SqDYW6L^mY*&4@C2v#qqo*<|i(`ecNwMLv2d*l* zYUNec2X=JmP?cY`M%67_-e_Ikx~7*_K6pXFk&6#)Mm#-jDjz%i652&wUaHPIvH-KT zx$=z4!VAu>UT{H1^)D+^DziS`)M3lX+LiOFwslCaY=hVMtm@?sX_f7foeFP0W-jaF z&Q-_NizkEqOw;`=til|ikMTa7`g}+BR#fbmoAPE zBluHQ-ksCt)ESj0)t6^{-4frYIj_NybMMcn%mzPG%BGansGQSj{)~+3DP^s{Yh0Oi zs$S)goGFcm9l55?^-ZVbq|5B{Y))u2r7Y*cDUCP&tw!aP#`TX}&{S0xpmsyXd{SKH z$K*VieX3RE*`Q&;Uy3oN1)mpJy{PKwS1GAJ`@59N!u_i9;r;Etdt|>kYx*3c0$*cD z+0PqS{%w8P5#3)@p6%;T*8lrkK^6+?AAjr8J;zkr*%!=CsqA$4;={jHIU(=%Q^kji z|6Kf5@s8r>idPmF6+cisv3O|lRmB$8tCRME! z2UW8&EK+|}56_d(rI2XSe^+g*8VWIWYSlvsLLo<{p@v zR(asTe>_;&>8#j89WObyc=pQKYU#?ki|6iE@zv;rTHmgH{?%V+70mwnK-t972@gyd z>XY}}RnJ%T*t?~w``+8@&B%Nxb9v^IEyvWmCv#zDNy{f&j;nW9%h@g2%G#T8WK7w` zB^|2Tu58dI|E&C53Q9jZ`WC+b)2GwrlX~8AN$KXQdV7C+?C4v4I$ee1e&;ovk)5pGiYfIJI*rTzZ#-_(^k8O|r_L%qR@YK6f(_=qV8&s{lw6g1Cm&Y!M zwbQ;4^`>Ob%Zz2NYMCB8UUurOEU#8p-{IrOPsE=SCJY~QwwFKSoc!nwURM86BWq>x zpz{q`KbbgT>g3^5ruyF_^t?K1J-$%L?-Y)N^+%%t{$B{=Pjgrs?>yb+*AeIGmj6d@ ze529)^!Cp8YRExvuZx#%+ZT9sY`d#h-?lIG8rya^uc>YS*lS_i-MuW^z6kyBe|md8 z@GVNyzSzsL?VkEOl059~U1EFJ+w0|ZwK11^-EF(K*VDEyLyrH`+w0@?we8Ej{i4e-WT{VH#~Z4dM&+4j{QPLclU?G5r~ z*!DHvEZZLJ725W-_T2RLuJaaH{d#YaZQtM(+xCrKnQag8mf7}A-U{2k*;{4Xw|Hx8 z`&MtAZ4dP}*!D1QqiqlOw%GOvZ<}r3=2h7CNZusspWfam?={;V?d`Vh+r2k!dyKc& zw#Rz!+V(hapKagaeQ4X`y(-(j)BDu6CphhiPJ5EmzRPJ(cG^>%_Ee{Rx6_{Hw5L1m z8BY5ir#;hY-|MtzIqmzL_We%#0jFK)v}Zf*IZk`7)1K$FA9ULDo%T$fbi=6f&PJ6M_E^^w%PP@cuFLBzXPP@!$$DH<3r~RnYUgoqPbK1+D_RpO53a98FKzpe-a*^`z&m8y zA9~fc{U`4m+y1k6#J2Z)M{WBP@3?KZSG{c?&Q*QUo&(=V@h`#u=fO6%^@ZNv#ZLPY zZBscyHSF#oivHunynVKPx%UCu zeK2>XZ`YyCzD4mn3jFDft6;o+wb#Y!gS@V`eT~=6wg-FNZTniUhi%{B^|b9FUN76e z+3RiFw|aeSd#KmfwugEBYwta^; z#J0zKH{14|-mSJh!5e1Vle`hOeU~@VwkLa|ZF`D0#;gP-?odr z1-8A!TWH%cZ;@>;^%mRqa<*4p;d-a6Y}@2$7(XS@xzy}^6dwtwkuwC!iTO}71Of-fOm9?(MSeUwON2`(^KS+uq^5 zY1@_F9@~D++iTmu_TI7WUEaI4z1w@=wtwsGv+dWt4{ZAl??c;u)BDJ_f9F-%_8xD) zZSVCywe7dP&usf0?|^Op-uu$F-}MgK_IutTwmVI|b5f_cq)Yy7ehQ*oeEwjvv`++^7k6jGZv0)AWgx@0c=a_-&&)4WBl- zYwqn6?#`V$apL&f#ta`jq0^Mfw^7a=KX$}zoo<^vwV>1O{4?(w)EqH<{ZwQC+d$JJF(N<j=7pPYVuUP#^sk@+AXX7CD#oa+I8rN zu~Ua$KH%D+gUyr=Jufes*Li5y3%Z<}70tUKue07{@fX$1ZNWfXTzdL~-N^OSe*8ik ze8myZTieR>x@3D^Ez$YE7O)iWuhW#=Ui5|k)+GPo8OFbs`8DDJety^cjsHVj^lpf| zz0XnE?^X?U4qmv%Z}G=;Y>kW0aH7ymQE5HvdtT&{vplc%%pYqdy$6&UDX9R;i(Huo z$E?A0q|{8ukWy--PD1I(9~!}N|DANys2QOnJ@pPaQqpUlgqYg=N1k^^+Q;~nz_dqe zV~ZY1uZy6XY6=QQYNg=Me1xfVU#Q&!qf@Uy$)N1jQj^9`@FHh?gnsF`+P+ZttEPzi z!igI>cCr_#e>J+S?-4ymaP_uRo2&xw%+z!+{ zRnsM%mJ=E8R1X?7qby*@O522yJEPnQJ011Ys1 zt%;adox+@flrz3*7U)1q-3uV#*-^Zs>_AHWjtv7HNNI2lPPgsAAJ~B!=_R%UHEJDd z66ipU+P~$zycPpKuT@i3!_r|oS4fqAh-Vu<+_ie z<|7EJHxM&LcD)eEOKV6JQZve&m;RVT?F1qC(sfbXzVwGA@){@RQgkD=T?wcE4CVJ@ z1N*99lx!vRBPe-kJ%AGW(E@eN6f|V97oFGeryvcd#`fbq%)k0CC&uqbOHQciM>9@! zazDZ(FYQGJr)Eq+Kg={2QMwp{nGZhYNImBqBBaZbTsyo-h~%X`#(t(|9CC(tEl0f6 zDeDjKW(>v-?@7jNcVhgPUWkPw;gs%ruAfood@dwvAfwOSo4xH$S`U;LCuJcyFm(gPY>PJ*9 zOy`*}e=htJcb2+{5m%mtq4TvPDjyLS*eI{=nK@|bBYr|{?u8eD6FcWAGAJyR87>MP+YaB&qY9Cfax%s zoWj@4WLH#6=xtnI6D|g=YoG(_Lg+nR-xs`Sw0)lM$!nqC?D`g9O4PX*vio;Izt8&o z4*92FW>h^3{e`$szhBh_^;!M5koU%2P1KtlNB3K?PO85^ z|JwQtuJcKGuk*QfrD0qRVg4j!{1elI7w*Y9xMmy|pLTGb7Y`r{c;oV2t?ob+z_`}6}Ep>8vn5OJ1% z|EVYWh{z9!!r9XX_?L?_)%loUwJ}$}3$KHBL_9*KYZ0ew`*?5?Q8VCuz(!!Y`g6RM zPoWnP6@%kR>+}awm&+O72`%yImdE!%-D4O9Z;|U>jhE*2wpmvwz3?hEo3*U(x6+!` zmsYCR>I%4;r?5!#6jo@SLd=_|C`?x?|LvH<>B;2c9%&A>0G2ftM{KCG`=eG`b3L3^ zykunarY_R@KK?ln5pAY!&d7k~&v={s{eE zv~JI&TdnGkJDYb(kxX9oB9q~}FIXy*7uv|f5SJ!6xROQIKzuIfXnleOe+|)n@oe6{ zM6!7|5oz5K(-HX#B5+b_`V*H)CL@1?cG8q%LwT*Za-K5>V^3ckxf1WWv-xIEU+hd^ zG2!tiup~Z#F=qmo+6ioZFJF5&>hQIFAhNkriex{ADv{Rf`R8okACZ&#I8XGWd~FSk zKb_gU+mB>(^Ac(OE&qJc&q|T1U+8)#_~+YFPXNTswa3%ovW`6I1)e-k;+`UK`xRIjkA^q4p2k=C#A&r#MVug;tDNH%vTk!)@h zBAL99M;=66F-+6N2F?iYRq_5ys?bTg198$(CB5fyh4wYcWRMU@biu`ewOs;GJ0@y zZO6kX?|Cq7<^EXj%-ho;u$cwR?l@F$0mFyv;K zYOodeMjeR=e{!cgzKkXv$*b0R?oCccmySHu{K+Bs)Ca>dy1jurh#bC8C=G(8wp$4) zmv1O5HOjk)Rdc_>JJyQzI~~Iz<*VRiDl4Y8%exVWD)%Wkt=Ov5Fa6k@JK$v84X}(K zUx<<9aIK-l&vsJVp8+ZFVMr?XPS;Vl({x=TmrDslSs}H3-hb)PU%6tdPQTHiUhZ9Z zHO6t?GP>t*1>xZkrndVjUMZIgjg=bZ)yAPePAkU8*%D5svKq$O4u}3Yt!T%IDmi=u zGjt|QHCTarxsH7Mw&g4ET4H=@jXLrwLOthJ(MKaEEvq|na(NYFD5cbM@&@5h<#)kb ziQ))~t#Z5LaHNT8)v*r_e}ZzXI1=$podHWb`({)u;8iZ|Z)!|ywbIMw<&Hk~GA+A+ z7dr9fo`EvfbynUvIP?m5=V6jrpQ{mb3t_6^A@-Pe8%9Ephv3lfF~wOh=`kL7>aUcFR9q-&Qt>UR$m=kx6~k1M4XD`pdPom=xm-@E^4+Y?EZ{;~19QDHCjvhm zE0{7q6}LF&)q{k^yYP~zah%^AQkS;AKC|xy1!#G^#&|hgj+wig`F9@2&1l{ekh&Id zN!Bls%Z1s7{50=Py7PA8Pp^P$vfmHhm@sH9>lCd-KXQ2kW2DqZc`xD6%jZ2G#nrIX z`nk(+xJJ@a>vvp@!+#HVwzNZ1Wi_a z8}XDk!c?p-#@g|}AZ6m>?B(*li4HvxOAC0*Mm{?W*=*t;+_p({3R2ANeoqsHMP({sh; z8kxeb$nbJFQ_MZc{E2Pw03%_x==^}r@<&nJnJqfrhskX1lepyBV)kb+Rq-CX7oRQT zNSG#>Jee(K>dyJIWex+gMezVkX6s8yk=gpA%$7cNEOi{FCXK*YO=qfmMU5lSnd;uU zGljU6>zQIEcWUY`K6FW#DLPNGbonbN?aUM%CtxyD-%4EaOfkC_%U7IoItQ+dBhb0Q ze&+^ac$zC_>dyHyWex)~MX?S{W~#2F$V?q~XNsk`hf|XmVXV$f8AqTqi8IB_D6^-` zz`b9>OwpN5XZc@I+LdyHyWex)~ zMKK>HGu2sAWTt+E_d9MRBhVRlrg#g?%*o82rtraG0q=GFwTi1b zoulc@+tm^y=4$RGtmZbvU(LPH)to_nSf}XD7Qlt8xsfpH_-anE7feRY4~Lj0qjpzw z%KD*4=?+%pYHlP{jIZVt`|1*UQSB#bQqf(_S#1DJ#XdyEgw>pm(R3!R=5!3Eqx=HS zP<%C~V<1de8YFSaEHQf+OjX>C3Jy!g@h?|%X6lalESbXqOB6@IWL8H?ip)WLHP7V@ z0E=lJI+>N+>lrnoUdg-aOa6W49^gbDg2??5)7HY&^!{1kguA0SN^~x#^SlOdYLrw0 zN;bqtNrj@spc$-Fv<Y!xA)1$;4HPiOM)QlUmffD!A8l_yWO4d17V^kvn zBkT4tsu7A2gEsI5icSGXjggT87*SjYlL4=nv=EF~Z4*qDUVXM;WTXH_6rY7j#f_2{ zf)T52g{jyCR7}8#4n0GO7|~I|tn%L?%fX0_Z7{)TyTm19#O&QLRZ%lLfRStlp@TR0BVdUu>OjfIcshN*uqd&4I+1)E@9GWG6Co-<7*_;e~6%Rsk z_!Ne@jd5?G?)|h4VB#~F__{=AI-OmghEoGoCjlrM;saGD6etFL22(`?TMJM|3IIiM zKTL-HsicJf#cBs(s&q9g@)BpH08kVUz@*}rk`@9Kt5w5PYzHbP07ZwMh(w_1ILfT@ zW}Kn;C6117U;@+;iAx5G*(sdkiW^YDS(l9CUjoHU-7z01a~J@MVhxzgL7Jo_0i`c- zET(z5(6EF{oDomIF7Xn_v_3F3t5dtAOB|iu=sfQT9+iY%;%vyjy2LT48S51N>>NSK zNCA{6o(Ypd^AR-DLQtZd1yiM8u_942QUE22Ep!Qex713~LQrD0Y?zAG!dMefqN5v~ zi73(0o{sWSoS`^MbhLp9N^K=B86{>%VXERORB%u-j(>>~Gj+#&l+0lOC5l~OGOJxB zB^)Id(>%DBI3u1OB|ZXX+5(ume?SgU;sap+6355D*4eUv4}g6K9|IdlM*9orzx)#2i7+#(G!|RyWYhimxe40sV5G=L*O^`bB ziRM^@`wwr8udY12&E+#qMzct2`;L63c^{+o<6EQK$C^2Opvur8u#C%UpNrSzLsd#Q zz*5_Nh}YB)RjuScRJCI8p(;~ZF}0oUK#A#q)#Dxb8D5Q{x56?mzlR;*qiRb0B2sGm zD^adtw&&pq+{1ncPo5War@+SZcc(IL-PYyOrFB>{g7=6T8h+Rtr32x1#Mf=7da< zr}?mqtTem@^2n6ei9kh-=X|oH&ncCujJ@p7=$JmIlqSPc+ihfDiI$bzb85wSUkMdc zSuydPTHSUxhv$@`Ghi8)U)fR4DWz$w(Ee;l&N;P?z&T|oD+JD|72~hQbIQ2;VHsB} zL}}-o8pppnr%as3WdEGIA;c8ftfNf+(cwF~U2)p=Nn_?-HAytNDXphJz;PpeI&`e^~5R;$te z-CsvOu4ZfwpH`b6Rdi)8`p@SZ<|lB)wxa*EI)11h@%{nj@S~qr8<#3w$%?#Uo1efH z+lrwTk4i;8tu{X@wjC7<__SJ$_McT-SK{^BI?9`1ew^#Iame*Ley9i11fTI@9OT&i zsETV)!MR==$G^N@n;_+1ugziLdTqtT87Nqd*H>eFe+Pc@z;FAQAD;P2bV>a>A7`Ft zGm2gp@UsXt+CSAJ6VC0qo&Mj??GQaBUXFVrRmlWY?8t{z#c=Bn0ZjM8Cw7fLvHUp0 z{HW4b*)6wjY9n3q#iW{vGo(+}8`85NBOjrt&&bH{&B%qA$?wg`NB&TPj7&#`|20N3 z`HiZ`@6m-XVDZoN+f15>?*>#t!{Zfowj*C?6oa^KnIE-jID@!G-OC`ZS`129 zt~zqL(g9?e-;C9i>vF+0t48M}t~>IX>>A_*p$rA+LxkZcVcEKoMMJ3UiTB|5C_2M` ztLo3$?7(BwP*m?VKBQZJ&SsrUJMnY29Db%{epLBeOyD-7X?o(z`k%6yP}yk=L>P($ zsXT+z&CiXtz#BCg-FQ>=CKP>N)r}vs?bq4*(-0Gtv~ua*bjV2TP3X*yK$!od_pRnY zz1We@Kz6}vd!zRn-S}koBgozO`RoxtI|$gXzdIj;Az5wXaoV<(wad8tO?dr4H$#M0Mh{k ztOFwnm@XFtY*&~60l=DH@IL@pR}}rf0<44y|1Mx}u?PX{fk_Mk#xEQHZvi&m?M)o8 zd5~Seas!vhH#A(!5u@RH7L6cWFBI}ZOSoQR5HF7m3WG}r5UxKml5pvALAY99_&)&G z3>N)QuU;_}{l9|i5EK4gxN1 zQ3Z?N_W9pMJu9DA-Aw+vPUH~$^?ocd`m31u0&qraMzn3mFSlp3xk6u~Gx_Thk(LPU zZo>7qDcj&avKN0nqV2i2dFoPrXCAfrs}qra2)rX0jF4+|?Q``F=wRIwFO$E05V;4T z^8(>sCV%T7vIOFmfJ1+?^+|rSwQW27Mc8Mg5HB{7orv8Ri1)w$x=;sY@^?ZapTVEn z-JP2@BR$ofV{LoxR8L(*C&tS0G(qzs{!!DzFYq2jmwKpO&Gxme~$(`|% zc6t!JGp1UX6)M_cik{_~_r0b$cm zm}cVZDqIm>Mo1;=G#~OXPC`3Kt1bqdTmq!jW&7aoRsdleJiWLuFsqt{2kg5RS%V=B z?};a%TnjF%uRO2Mt!SySy|^$iI3JoC{O~1+;R0|eR{-jLsXx(i1r8r&0WJcU4TE_8 zFVO16uYxjc2E#UN$IEx*S3#dasFy>i3-K;r08^_^(aF8vi+B;eO`~rfOsJSIp+dz2 zd{_Huv%q4QT00npHQGj!2NIWFCN-%qgvse$B$;x0f82*P{jXTEU@=Usy9-4%-KY4D z%;A{m;P1Psrx(-7F&(>t&c9#)bZnq={XG~;d~Zm78TIl5NOJI}qYNekT`FHC*V)gANsH;0%bUWi*FPtQB`bugKu^^zrX)TBSg ziJ$!87&NQ#cl*>cPjc{l#_0L%indwP{*z&ZwOTFwC8Ed7cB zyjjvKBm*iL@KgO9fzFP+QF@0_yiw}K#fMS*7!|7z5aNrEesDIdHa-u4siF~Z>iwUQ z%<8E}N^vAiMmk#3WTfuu$!Zf|s&or0^7hF{fz^}ZIG9xAZ6?#CqO6|!>A@t(3t{d8 zNo^Xn@>-Z1hY&g@!-SBj5|>N}v**B6#TA@g-Wz>}d5aod6LJ!YzBfuDgsHkyJ|X5X zutHLt50fD-kQ5nW!V1Y^OJVZhpz&4ci_zkDMmdo6ol!3|3`x6jhO2poZ^^{lQj^pV zi&dN?2BfDT;Dt}|_SPib$^c6e1F{(4lSHQ`X$qq(NsQ{ssMwI+2;kFceHqgvwL#x= z*#DvpaB7l_6d;LWdzeg02T2PdiPbv8ROv}pBuPdJkVG*LCKdA~ErcZgTIT?mOA@ti z)XE2AZXA;6=mHaxx=LI!NzCp8Qx&D0U6S-u%v;pxnxvIb!bxJP?vziGISi0Qu^&u^ z*k4k@Nn$bncBGK>0{ddLI7z>QoJ7(%T%rf^4Bs>sE4U`<6U4rsi4Br;0QbDrFjaIEPEC@L0whs92$M-UBxxZevD#6X zD(!o@kYuC)Nfi0pu~PAfq=k@l9Il3(W9O!g+DVuye*&-KkVMA`n2_|X#3hr&>{_f^ z@h4Q!BxPaVqDI#wb%hd65>s`je3HyzfFz1_VKT(}k`hi5i)F!tqyg-U(c&bHhMYvw zc%0#lJi|9`?uVi9>NX2;agrFoub8RLGZ;XUiWy)@VgSF0C2JC$nxvmI%C1R_I<84N zL?DACZNPkPfvKXNR|rW)3Xnu`BTOb`lca@^#A@4Ns&ok}a!oQ)fFz1rVN!9Mq=k@F z0oVI5mn3RCsg)nVt2iXl@iI(Es+727l9;^*hWnp>m=>-{FJa!IM%N_04JDi;rs_`l zB$>kiNfh6K$q?U_lyH(*>{FPK^f~)tv^YtpAiE^x@N=52xNBO+)a(9n4Ti$cWSU$L z1o$b9es2CU0=|K%ovp4!08zV?0lbmYPn{U>DFZfrf?G0;+Vu<|YWj(j4e&32bZXSb zGm5C`D;%RB}^t}r=*3@#A>g@RB06}k|rYsXrjnZ5~Sj8Nej}X zKZaqoH(@IF9V*7(4*Eulj!)@y7AYUVJ28pSG@jDNqRgrmk{-@pX5XW18{#ZlV@Ie;2($&Vr} zhp7E}3~sM9NgpCEP7(uJF<^5p1Gs2aGr*E$1ALO`)Fh?e;F83slk8&AJ`k&~a7GG{ zMDYYn#{I3Ng^xbki@?Wh;hjzQEduS6(8~?Nzz%Ex2VxINd-{CNn)z*luwd543I>z z8BE6CLQ=v>VzC^UkaRiwVzf9(Lm?-T6h+!NrtaQ!HHN}9>2AcuNn*gw4A?TA0VL@m z23V48fKL*gnxrQfW!EG|b!VBP?14g(kpd)9>tL#)EoYY` zZNj`ojjl<09ZEP!Ox2z8Niv54k|^E)lkpFclyH(*Oyl5xDqO|B7%fiHamX%7`ZJZu zNY$4=|1*`kH@Xzjxg4fm_!X~>q$ryKmLePAQ$(kx=mJJriWoJMWs1fO5{irzporo$ zn2dRbq=it#YK1UWx}6nCk&yxvQJe*niuX%e2t}+m2c}|wK*a=#=vYptLlLzF)XH-) zHx5N~%!3I<^Cd2sB4(GtRKM5W)(?{C)RgRE zl%<4GPrz{hGgv4wQh*YQ%V9F66_S=f36Ws6H8553dsNh4i2498sh>E}w+bd_X|;sP zS$by(pML0D9u`;&Q?Y6mu{!{L%R`4AwgU#W4NNHSgWahE1|92Q@{;Q%E*T7FZ-c3d z2f4o`7}IXX$uPPGV=f`Z@>VM&F z=n)@Nufgm4kEz?k;XkGx(~B%HxF>^$f5!V0^6(Oa$%B5d$bcId;PXJI=3x(`$b){c z$f!w-ijBp6dwk;c&GL1)(YO_+ipt^Cw>U-$z(R2dOvcH-bB1XluuvWeQzagI&2Qvc zSm+zZH2(`j{7w!-1F&cwMnmP(a(AJiHlAAfbtvrcK*t!ER2?UA$viN72254N*fsL7 zA5#@Iy5`{olyDxHsypTLU=9O3P@D;qd733DNj&86bBNyQcrpi5gB#&}qCbbo<>wGq z_dkcIe+!)a93pBQ`m+fAaRZh9EU|h5u1dj=8|do`lX>YUp)xPd#|kO}$@uskFJ{X4+>aY54~D6Ayo_q>;vYBAaUGpce@AEV;|4k=(7FBq7dHD< zH0n1~FTWnT0{|U2z+|99BrX{MW{-iXilwNa0ceBCjT&78&>c!R08G^#^8ql2i61vm z9|w~;8ZTKgM}dzUSZxwaJ(J5%Vc66_Y>0oV#PyS#o@wx{XXuT$@O{o()j^C$ zy_VJHz*K4GO@fz^P%-}d4Zi30U`OQ$Kg^)zK0;WpGvLf$I zj1(Y=;x=7Ef8@Vi(n3gLwU=QkHlKqC-j&etKAjFp)Lx@j{vi?^lIW;}2}wI8E}0}| z?}e#~=A2!U)EVAfUB|u{El$z| z$Vns}Kx!*o;?yl)55rJM(mce)Nn${K2E4G90VHV|11w24z$b}LP0}wJW!EG|Rl`)# z@S#GIkpd)9JP4C< zKoZ3|Fd2VcNeL&3#WW5+Nr%}Nqs2+8iRp1k(%a{3r1Bn94b>F2L`<9_I{VSN>Dv)P zQ2_%iMK-{vh)zvWA4XY<7}bGgiheO%C^AxjB8qKcGUoP@7D5rL<-_n#J+dMxGE#sd zia9W;m?vo=6tP-on2Mdrp$69@I{MM+P(-aOwes;ua44c93KNRDNL(^S%V` zNzo9@Th!>9qRCLgDPpSbluwa43{XU|4@}12S5m?$Vlj<^PtgMQ#b|MgRzY?tk`2}* zY<3oKv(s<+Bn*ZdtgVRjH(0CSa5q>C-p1hJmybd)H&|~l*lw^Gu$KY;28&M3RTZP` z28&S#7!`Z{HU!vnrZ-rP@g8jfQ$;OC3Uo#aKu57DOs1%rq$NN{!dNXErb>pRVsL{+ zUn`iL^ehRLlkV@v^-WS6czVEGl&E!}R{kOiJ1Ei77A95OOI$Ka%sSehvaFm#;JLRKf4g)Ar>Lw{kDCrGWN=>{!VQTQy+i}MDMK8UEWM0xGROZFmV6i}bm|ELrw5$_GO59*kuLG0u z)s;*cpS!_g!G(>09XxZm{Ucp>zEew`1gXgGHTx*}f{@h9n07 zI?ja2K$}WjG62kO3sV)x__73`3nn*ebPd3O(*nR$-7y~kbC|fnqTU`RbJRhyWR3zG zELO{d$p(u}4MfNWD+=EjhTiz{SoEDYGb0Ix-C!|b2m?0HWdLtxW-!2BhHQX;8KP4! z7mqN?UWORejb)1R#>k3bq`-$>r1WtZ%A;^p`$lU(CH&_$>=b9Ficf+ z=Ij!kCoykPqib|tf)c)VFjaTTN5>on)((o-!DRe5NQ#UNrjM;NLq{34`J$-K@%_(lC%_YagrFY zhXF7Ahyf&NJp=5TWCMJX=+q?bV3Z|^QO~kW(M}Mnx9Ua;kVJ7kOvb%I(n3gLwJk7J z+W1Z($w&c`C~kyF#Z8hHLK3TOg{fEpDkhLb#~wNzlBiWsEB`4H9FpkR1{0FDOI$KZ z%-#)C6}$M7BbBP7+gfr+kvkVSprxuft^gZ%RryNi3#u@JUj*Uym9s zPSRPBU6S+$s|u;S$CM3LC&a`lqBEV&O}Fr_nG{{h085b#@F}8GQ*;BPEJchu08>Tj z6NMrp1t_BUDNM%vnWTkK#A=6Ns&oh|ay>FqfFg=t!ldFsNeiKf)v94CHXRicD568p zgF_Luqf99O9TFUh==cUE6djScWQv%b!r85;!`UT8+^a>6t|^)aC7dFr>Q4C-nZp1@ z6l=g_{ArRBP7#Y~6nu)7voA)AQ?v=POOb4_CfD%rQW#9%f8K||aD%lQk^Tm&DID$w zi^2H}9=>ieg1N!^6NBvrivfKZ;BT<#)LebTC~~Dg!D7@fM#Vbbg@E7&>zy=wzywo8 z_ra-`E+Yk?qsV`IMy6<=q$NN{!dR^erb>45GHdy=N`4;9b zNYoBcD{qSFa8RP-Q_o$^sKhXIr* z9)-y~9ha0Ol=KFxG8OMnm>T@vRGcxp!Lqu)!HS|s{szl9;u|a~yIEp&{uB%;u)(75 zHJHrHE(w)+aW+^ium`5rK8PZEoiI}328;UZFd5&Qk}2bJH&`sV7pB&&X3vOSe1k>D zJ9Iw1gU;Xvi;gepT)&>vVmDaS_faoD3%UaU9q+g8f3qwHmfQO9AbsOWB45sVaA5hxyk z$taIXTEdFJ4Hm2MU+7b%AG0DC2_vCme1k>t1WYP^D``^E-C(hr$DzhfqGEhW(;F;0 z^gKA1A!=z%C?AZuanPY71t#d!kho-YnB5SD-+$oja_!iRd5aodqw@xo@U?@fx>G(n z<}k2!P;3m7@t-LvGX8`O7K>>d{L9eC?2FOjm!W?^b}vJEgVh14!(jORhkGy-l2mV` zOA-SHFN#-y>62$>98UH{@2`7ogG!8yVGuaoT z#YtKMIfz7w`{%_Lm^4)5EoyQ7_f)|FU(*7NvdFgCCLW(B+;o!dYe&}Bu0&A znWEM+g(M>dNTN6fCgUC_X(1%B+GLn2y_*%eCK)L}5=H*glTvY#q=k^gYExkPCZfCPsmI;O#dq!|*IOcJx_!|?kLoL!Ri7tCAK=$fSOpoEjeRNX0` zBy$)biQ)p7jDMk|gpN_ymU|oWkI7M{sqI1*B zylW;!*D}CTWCMJP=+qRAW0a+cQEOSIXzVPZ$VdT-D6WRdnAb>J2t};60j5gJS&d%pCiSNyy5mcdlf2XN{OppgQ=Q7nVW^emOM1mH*)t33fzC7BQ4 z13K8-*Q==vWPts%s=J86#$If~krv>>4p@ zim8ekU1O9FB^)EB>Q4C>nZp1^6t}=+p0-L#5=MG+bwAF^2A-M0o#)_;+0B*J{moS$ zo=*MsK;wvSuBgmsiPevgk-+APzBw?Nmw6H@^Wto-SYQ!Mt=*3zdW|qr;^vC_0+@_% zp=8SV+|3mWE{3Ufr`WUL=86vDuAXi&8_wY7iVn^F`kI^;ySbvye<)OyPeYOe03AzU zGSD)KO9p`1t6{3*1->i+7(xJyt^t^QS^$`;JLUsm4ih(5)Yrgdj@C++%u!%-#cJze zvbkbY0}-;h+6dpL483vIJoKG6G7AWX-CQx?eFkj4gaNz+tzdw?1la)p5=5t7E}mzU zy#z68E6Wre#O&)8!AOA>f#N2ZjB<;lC9DYCT(MdOOqKSSD|i_R72}&LirZjPk^c}T z)1;!ixuX0sOvP?O#e_=`9q-fWT!N^*My>pLBsl2M!6j7C*(q_!=rDUPOjT6#C5g_j zF>g_$YjpkuC4B8*s_vAJjyVjh9TeYz$@t%u6d8ZQ=8DBM4*n(RZ|sZF;+LS>w+Aml zdUJIEsjaXushf7q$52Sp*@%mi#DMw?*zzy~NYeQXuq4?4pCmdpN&OgQNn%trOcix` zP)IUTfFz0sVKVMRk`_V|s~v@@(gm!@%Z-r&BvJeZCKZoJS_nz3b{wW+KS#v`lIYO$ z;E+V^BooU2i3EovI`~fo3rXKfTrx?_u9b=k72P9q-jvXNn)z*luwd5 z43I>z4ot>hS5m@BVlj<_Ptqdx#b|Mo)S`#Fe)aHL`Oe59g?VZrB;3!=Efn3jwnn>>LPK;Br&@; zOjXR|?2@Eon763WHA(fxoQ@=>>Q4D2nZp1{6#Kwr{Cy=QoFo?0IQS%;gIA6kEl$!! zkX@4W=IUmo7Q!=&OENeiKf)yBhA?0i&ApoornbUGAK zn@p|zVI(*d(J=ug6it%2WQv%5KTK7;&X*)b#hACK(KSWupoFhSOx2z8DKduviYOMs zWc+g^C7dD_(>O zI_md10U>2klN|nqWCv;^wGk%Z;={<$e<9gHRCoVEvZ#sCe<@iFe1Ap%wineblv4xl zT#ZbAR`yHy{Ougyh5mMKtp0nZ7(9@{H(j(C!CWjqVK8st^xreZ0HUF`q%eSsj)Tb= z8!u@g?*Ueu3R9&m9+CHekpk}lij!bcak8WZ-vj#T_%yhRVJ_y>W>G7jj8}0mr(*_8 zFrO)L$(S>H0Zdgqj|v*|EX-Tf=o<5`P{J{1s_vAJxj77APH_=ThPYT#!ZByDCt&hR z?E}~sqs1{F4cWz9lk_Fd@J62D8-H4ip^&6mh>MfNfZYt(+@Ap?sh9zlBnDK)NupDe z^m9gW!PF!%>bNFpCxHx-)B%0(%>EZOE)tTA6d;LW9!w@BU(!NIVzsU?RXUm#c}+G_ zfFz1hm{jZ{X(1$agKIF%C5c*3YULGp6^A4`y2FH|9uk*K60`fmRK-70L6h_n<}GS; zP14&?!bxJP?vziGISi0QaUe{FI7m{$Nn)`PFd>Ow!-^U$PSPpJE=l?c#7Ug$yaq@e zyk!Z_ynO;;b^i%OlRMzlPaupV{se+b8cVFMSAy9HJb|Du1wNV58fY?9rqp=?LA4G{ ztsPk+r`|}3PavqL!(?h|p~*~{8utkV<+?DnZgz>_8~=Ehj{0;y{RExCClGXWpmY60 zoEG~8g8G@%%a4}?*rB5#Oa|H*O~xg&Lp2+wDlR}}&Ca=)+^EqtJC{HSXNRe}V?I0P zF!2cl^|mmXqxO;|a};<2!D=}$c>=+v1|s1J1pfk{D12?n*>xv=hQ9MJ0J@%F*uMaX z|5Dc^*4mjFLjc#M2N_@=Q7~Wx12%nHhJYu4$72kzH*z+>zmcO;uS?G|%HGH^su#-? z6_v`;W2C^+L$L=;rlF^#$uzisSt6_Th2isGR^-xSq`=Zcu{TUA_K`HH=su!gwSF*s z{)>w7wNqc==omq#b0bG>Ahq(rm>XwZqN6`d*cu>l$!szEW*9#Icd z1QHyQ=$H=^k`_o@GD*x{3d85Wd`XgY6Xq>ybWPF}DB&bARd>oK$s7hqqPPqu<6kZ* z;Uuw`#=$4)A@;>+agv^doJ7(lq#l5&-J2i7P)O2?h>MfNfDah3Wd;LC(i;r0B-sF; zBsw)oRgAJEF={)@6t!L^BpE3{62+}B8TU3x3n7WsDq;Bimle4t87V*##R`~Id|A>$ zNMf~}Fns=tiU}mq@d2FZV1EYznooC^a$oHYIIG}&!L2`M@-e7@+mTh0g5O#hROKPl$3CaSWKhf zQ&i5r7%fiG?;*Ps`G3vBYUF+ZQ@8Yf0%PHV^aTRrC^6to2E35L0HX9A11w55z(oLSxE~) ziPbj2RID{BCZI%zo(BgdYTKAleh(5Hl<3$36O^_}Trx_`ehsE7w(%v2Qd`Vh)aV+e z9#FzjVyfnHFWVR z422}kL0p_92Bb4!(=`krNlO`ENwNVxNpxzGo?(<-lo<6HOck93koqRcNCA>4?uW^^ zKb5o)l348^OqC8?DI^&wKoZ3RFsb;Zq=k^gYKLGdb|)$(kVJ=`2ZtnTN0?ClDiR!$ z=%|JXN#96ZGD*z#IJ*@ooL!Q%1M?O&x+dulP{K)Ks_v9ek~s{JM6m`;#-AoB;Uuw` z#=$4)EB3``agtIe21(L?DH+qc!<7G*k~K$+{+5aUOUbO$|CR}z8j@~|vXC&U1xpmQ zeo`PYQUDT)O<^*mW|Ecw2`^KumJL%SV^A^pMH2d2!Q>=mNvND8=PxB=fi^G|dyqx! zBP_iQqeBnd;euKRCY1jd5*#k*XbY2d`vxyCr|&|8SUY4zjegm zo(vv-?-~U2TSp}fw%57MR+X)XM*g z!VV8~d+ zc+k)McGklJ2UCOBt;HF$&-|?JKl3|)9{JDwj3fTckIL&Tu{!c|3@Px;kG@?nnHT=M z#tfBtah~~6-3wD|Z$J@!XKJLxXMWV*WD)=04B8`^GCud29}B(%Q|s<#&xl?8nI9eR z()sifI)l&r=r~B{`ujL7_L(2`52%+PM3Msl9q+?rp!*~)831N~22&LsQCS1o%a|W(9`%m1_PQgVDpO%;5|kU2H1NH8{pq#(5aV;YZzrOAB;Ky!@qy>3t172 z6j%``9)-y$k4sv@iokCjv6_e8;NL%CMP5;igo^QR9Z~!?Uh$-)Nk#XO9;>CWV(e{H zj4x?=?Vv-?gL5sRmd=Foc9@-(&m|a?;&u4pK+J)J@%= z!B9xjtB8w}#DKvJ*rFIflK#MeGBos!hz;;bqEnM}kWrQ-Mnz%x_fMV{l8h7}i6Z}5 zD;alZNedx~)w;p(@1L+DNitG^B#K>NQn9O~g^Lm|Nll@Ilf+crDW4>B7$Aw_K$whw zkfel@#9|r;pQJqY#b|Mo`an)1X*5z-z|<}Ce~F=xq?-{JCy4=z8SuhS7(kLHF`x_$ zO_B}pNupDe^dO@wNsOAnGDSxLr2kpDNCA=whxb{g{E(ro!;=pKK74 zj1(Y=;v|?>%FB`9kVMA}n2X_5zry zIKh`BNsnRPqDI#wJr5jecF24~=WaSTl{_aDWlVM{vH?CtbZUxPG0IZJsC6t;)cskZ$VdT- zD6WCYnAb|0jM=4#)t-f^(#5RE^~gv8iYTs!NyQD47D5rLZG@@VGpLwA5gohfbSR>> zm0G#N+&C1`u?Z#=ZIQTSikQ6y}??7yO`xLRrEZZ zdg(G!06L0GVKPO_BrO3t62@w)V5;OOUoP-#9rUe$$w_}gLgl18zt*uDo(hI z%KKwF9F*u-1Cy$2B`z5yW^aM1iibI&MCnaTRn+JjrB9)Rqr_C*DIX*D|?;@rVQZC%s>W|p`mYPY=D0mqEjyyqZnl`LyX$SGDWWfO1&Z&DX=0?+yawP zZk4oz6@eQpR(lzyN}IeOco_*5;~OlB+hJ0%Leiw7yTM|$N|=guM#cD&rf-Ys*hi;x z8KSm}TKNJbIOx!^6DH`qCUME=F#8>ts`w3Gl5593n763WH993w!qH)>?v#&?ISi~F z6yJr(_}`Zl8GphCi^Vh!{$=PF?2FOjm!Tby-OG^vIN(d9W?^AcH$A=$Lm^4;Audi5 z0~#`5%LoRLq%Rm?NwNVxNpxzGPBO}p#Hepzs_2Xtg(M>dNTPTMCgZM_v=EY5?Kn)8 z4rN7NZj2NliQ*BMR6HtaAtbTd37Cq_Ld67<=+N`vkVMVn+?2nA1cxL#zJ&=%CnYYK zBxcuPg^C88U6RyrD$btKHAx+ygp+2X$}J{NjAVIiB3(@ql~g7F)D{; zimrc2NHS7@B#P}}GVTtN7D5uMb%v?Zr&*CC87V*##XOi)%$Kwfl2|PYQ?XsBm_QO8 z{poZ_qSlRCc?-;qLlPZbU_w$?iAyGl*?nND;wH{6NqPqJ7B#vi=~XD8d6tS2_!KY|4`(m^>MGGOj6v+mw z8k-%jCI-{D_;n118?04`^fy>d;cz!t49;ip@QZdJm>aAY7;HCK4Cu=Me}hG*=IV7u zkt@ByV$?83#VWa}v*%22um<8fa05&gHGEm1Gg1ILii2S?Mb}AM0(2yd)oz8UlIu}1 zxWS@t2ux1;%@Qgn-PvFbgJ&kpMTy#IYURH~VFx8TM!=-%NQp~EiP@83s^TEKMwC9n zR7H)hQ924G93`gePWdRA!vIPYr@~~Orb$W?N_vCU1JgAgrUs9D1!v4|u&nNHuhHdyrag2}w}mQa}&XM@E8{b6ctvr1VfjFh;+qTUxK#~3=-U(9K-8!YPAQ7?ZMNe%#X41&o( z2TNQs0L&f%Qx#wFWeGqQCO2wy4M0~Y;Q%mIcgzRC942nCsE>rn9F3MNnWMl4i`B-# zWP`<~1|npGH3_~o483v7tLQs#W(E+9WBIr@n2$F*1C}yi^F0jU&CCb}*vpU&@GnDj z>g8fOqwHmfQPWtasLf7U5sVaA5hzZE$tb5vTEdFJ4Hm1-f~nGJtjI;eNT?X!U{Ra_ zlZrFZWSUfTH&~SKhpAX8D#n*IeHo%-DV@$`h}t}Av< zwCC&+orf`RQKM^go`MpN4pVife00oVVC|r|1SaDzlN1?$!Ul`QG!Fh{=q2{WXz|O? z+mPMMkltXeL+VE`b<@dTV<;r)bHv3-V!&PoY6 z;Ds|7K$6NBU`et8K1p z2uVf?kVNqyOe!9dv=EY5?HibiwL`@OlIYO$;E+V^I1|e6LxMvR9Y>l1yD=VH%s|SO<{7vo1w{2IpNOcsuk3(Fc%|gZK##k z!gM$o(UAp{s@W2kj1jZ*VXEQ^PAD;|##BX(t}#l#=X4k`Rd>qA$Q%YRqR3g0d5TI( z5=MG+^)1d!2XsOW{>>hoF}u04y1%(*L3#QgiM-hF`Vx+{)74Gyt73xlyBQ0Q#L4 z0H*4W`2d*1#LX4;Y?#bZ8_AM63T&=etvyUOS8Qq^LN-@<@Qq;TjSb#L-+3c5j9}Q! z6$1t{VDtNX5x`5(R0h~fkPYxJL3HZn;vq)aOAw=?EK@Z5Em;wa6j%``=EG!^oh2<{ zMd0R&)w;n{>F-&QZx17(A{Pk%pTDNq1tt}{N}5!3H&?9I9fp7Z8Wj^RL39kJ)42pu z>qV`+59Y=}hmIaFL8qt0C8NXa0Wkdg*PPuwXg-d4iyB>{^8%FcOAu3ar+jqGVPNf` zI1nb|A0#O<{)EjHi)kGEOVAtai_zkjpidyXmms~l8jaKyFm=;SzsFEW(mxOvCy4=z z8L%ab0VL^+nJ!5-z$b}LO;R?aEJ=)-z%oT|fLMKPF;ajeisN81?(vcqLK3S@g{jh( z?+8go3Xnu`5=<&imb4I(SZx|i#k!$l0!ef%rqdyb+AM12#Yk{SqGJY3NSY~e$s{p* z0ZdiA#h2WJW*5v`)aaU|0Z_t8Vyf1MF^z*y(n$8jXmOHe zK~5rR6;j`asat;j9)?1a_}3lBNn*fm2D~ti0VHWH1MHe)1ALO`)FhQN%96yWbu3fV z4u7Sz8*GgIlNv!rPOqJfwid>V76d;M>dYDw)AZZ~avD!wMip@jC1d{03 zO{YT=wXM|3KR|**5*?dhLedtAOD2igJ7KEgEY9v8G~dF!MUAdW`W#9)Nlew9@<}p> z0g@=b29xpcl9X_gSWM&Klk^??Vzf9(P3{enq&HU|AeHx+vbpMrm^ejrrqH=*;~#{g ziy2@kvH?CtbZUwQGs;rLsQoZibkqAnk&yxvQTzxdW3H045Q+`~_vXRZf&@*7>*}aVQ=U zH8p;m@?+2Y>i@9!_JLJZXS(>_=OiHnhzN*?fB`Kcgz$9?A5sJa1w@8Xq=;w?B#>YX zF$6@$VoE8csS+T>QcFDy$Uw)*=6+n0B(=l$4gt^J(!vCqjl1FNs})3*IW5x?T$7ek)FznZb|FY(?R zWBNhb_WI|y@a1NI3&>vZTloQVw}D>?R54=TMAaGiND%Be=rMx$uW$n{!?fd>`nnh1 z#_i@eH8?}I_}5QZhf)0Ig98|(!bfp=qJ<2bxblCabhSeL0cGDf6VO062z4%MhpIF1 z7q~P-#joR_-Y3KcQD z-vK~HUz8NQ9DT)*ua_J6XRr}rhU|Vt_lYa7=7IjzUIoeMR}5)8c_4;p82Oy_?6Bnps zB){1n=rtR?=Dp>8ErYZz_`mPqg~)sR7H;4m-rj^Y-pu=2*o@@2!*wd%$4~uNK)iv3 zCPA|M^#nA4H}U@;ge25O>HZF%zjw==lZ4U^30MW(lq=rRo518!?#BDml zjNBerD6~BwcnYE!Pit6sdmwKdo`tC+?niJRN$di|ZRvxt3G4u9I0w-kzzZ zqe~{efpJS%T$pqcNHmieDvdHsvegii2p)xK7hl(qXeKe)F^DoLwgPRjn9ro{fP+ku zhqEiX;pRZx8D+us9&R4a4o0kbIBO05!&xG$nPThTlZ>Hd*uq&NAUzh`W6Vk_vtOPrlHwj>Z?J(HMR> zOT!KtcZ}q)cn@cZKSR7_JAwk-pOD9AIn6dX=5*Q-A|0SC@YTj=0Dy`{r3I_%m=2hK~o>ENAlJqNSG(J1rMKheuO z&y`6Q3NeY`If(ZAyoNUoSku2UBbj8O5R(XgF ziJ{Uc!z5b`F^OO|h>mD?4T)wFlL;LRlb&Z=Eao#Q1vrCALlIg5aSzS=Kj;dX^g8@} zCedLw9d`Gl1DSM!4jz*{2g4*9g-O4qm&YV}jbfU{AA_;79kNh}Nd$`_+V2q>7QrND z8w+upzVLxE$wDC}5gZNCjAJw`f=SFa9^y8SN5(WJ(J-6F0F#JKBG$4A0Rbk_Fae@W zx?TM;nZ)QB5I6M`UXo0@q8@k8;=-gGfkZQjq0%VBBwGzJiQr6#_J5X!L^FxWgbs#D zUu0V><}>MDz(FR-)7u(^%JOHvukm5{_$;Dv6U2R`nrkCj^ducT7I_YaMKlVFHqy&u z5xtf%P2)8ul|>c`v4~(DMEkr{!y;J3Y%3sc)5FZj`N%>c77<(y(Tq=MSOklhtsa8k ze?!JJ7SXVY#sG_mttQs;E&>89qG2UOS+q+1GFimv4G=fglcP%(ZO6DJEG{f+1rp67 zhDxIhi)=N-B7z$s+W%)XB$`D`CR8vidXsIjn9rgQ0S8%RHc5SO=9|rP-veiUiN0_` z%KA!>N_3b?hgZH&2U4jU9Xu*|4u(oJ3Y7-Z%cBy#`ZG;q*@sFc3x%jeurEYA-cQ3K zsKji8A#T$iW+as?6rvKrLWpK8(y$0BG22jx+x%l>OrsJFG7bSM5gWmPmYXm(0V>gu zfGCxU)i0AujGh2-QxzOtQfVBC@RD8wX!b0OOAG7XDh60=o7+$QJ$Dw8Y}ViLg$h-O@XsCfGlWNs3lSz!Ohq$R-yd;_QHpVSsabePF zAkj=>s5Htj$yP&5BDe~o{a>vi(M)18p@U&k?n<=9Vm^}!00)^Q-`B{n6hyzTu^2w` z0X+G8aL;HyfJdW{zxF-7_3x!BRa1%tk^sI)Zk%V&#vu%aA>%095 zmkfQzj<)9@dXu)OtKOv7XFK?>@L!OG37&`G_m7ywdxRy&FdC%W0bUT>!GM-;A|SvE z8n!|7lH1iUlNXHM1Htbf@si|4C59?tapA>RfJF0xq0%VB3tJ8Gg5X|=4&puy$>4=P zrmpIYUuWTSys0Z(JmBVI>TmJp$@ev$gCY2VOgeXL3+K`SXVH9qAoE2!dmqT8Lq9qg zKF}z9_yN7h2YCujud(!M-pNPf-oVQTGH2l6GY8@}I=@!3SSUmmg0uWX(rgWjAPck2 zg}Cb{B4d~=v^@yXJNJ;fhR7m(D1&7MB)EAYwvbrMcaS*12O8!>G;4+WW%7a1OCfIR zZ8nX3_+J>RgvEsqzW@@=2Zla4mdkh+7x~Qg?w|vlRIny+D`Y)XkEEJj%2rh+aFPCXp+Kj+QddyZ2ahuAR zkt>RYkkS7@Cc!5lnsJ4OX~y6qJ!V@8ahtz_jQ*4+a|aF2(im7vh^-;k@)HCE<_;QG zL6kbH)i0AejNS-wQ(ZZ_oI6%x+!7WS>O2c1nmP=XMj7hZYH02t_zXn*zez*1|7nl( zm`vzk_82d*Ef(|l7>57{_ZYHUeG#F@AnyGqFQ6-A(!22UnM8*-=&<{HbRd&X)4^ks z=U|vbqcEw>svwi-wVP=g=loWgWT6m~2)+c-e(%z-2qrPxK8V}2lNre*3x$|Oa1TT? z?$xjeCNWzI;x_+JWK3fc4R6pGU=p!ciM8~`*aVnF!+wY|sa5?lnZ)SVAa3d*jxL#W zEygWjabeOhAkj=>s5Htj$yP&5B6t*{{eN9UqM5{GLI=a7$!v?od?u9w&S26Bg!aG^ z=RQ#UJ9LFidJKL(ljx97hgW|45gf>*Z_>eIlILKUM58ci3%$HKiC!N<+{SJHPnl$) z5R(Xg0MUM*)UXI9G20o4+jNc@$s`Mfm_+atL^Gb&um~nG+gXU)d=5;;T%MnbYA^3nZ)Q^j&5oPFG(it#<(RcE=)QCB$`PKl|~sR*=mSM z1oI%;|MnUZ%_JrhIv6G$V_PidGwD3wAd}>gUI9Y6$J7sGcKlk9MKn&Lao0HRn#rOY z=-{!)b1*ETQCKvRULK3+)sJZ!PlBy-FtSjHMFekvXrKFPSOklhtq6kOKX+WiA`69B zM6f?ZGZt!C1dEt$Fa*DUj*Mw6qG1w^0TvM}Cf4#j1O!+_!%&E_D4~9tEMoL{2!8*Z zmn4hs!nh?YE-Wes63rrpN}~*mY&FCpf)gOx|JyYrnng?|R4^?13%12#K8uA?}RtXS;y|mWP`I)>W%< zJLQ074gLX(NG?-s?UIEqg$`J>WkGaYa@1AFC2+uEf_#X(trAIOwXsn80gHGZMEloX zBej3Q0~Ql@gt*&Rvt?Xx`~wyZooIaFuV@S(uxRK{#sP^Y07Io=h5)vje!wE$7oua-Pos2 z_4M+VA$pBqn#RRBIwM#pG$Rm9K(v>|8kROA@PNf^V<2wR51EmZgoTjNKVT6Y1<{P7 zHB2)G4_M4L7UDJ^L&mgah=y4-29_aWw-aj_fw2ithlcSGrOpKP%cKsY?}oUk$2hv2 zJ2qn65*8Qgya*(kIt-OY8S2<-Xzn051ET$(sUh0`9~SdjCI1^3$7ffWOz2>ip;y@! zi}}mY+kk`1kQ}fUB6JJHz5lK}Wzs45`Ank220HBSL+3-#c@Bn2Gzychp_j)b zdet&b5;;R%Q`X@&Y_GKtYoLEO|2cu6v8AjU0WabeO#Akj=> zs5Htj$yP&5BDfZ!{a>dc(M)18p@U)4{cMZHd?qahoWZ2$5&Aa7ec)T|l}X=#pU)&Z z9HGN2bLc=OeU}d2oa8weCebKN+C?vqN%VS=X&T$KQzls`#3X{-A=>X98WzDMX4?gE zo9<&q&Pf&uF^S+#h-Q3A!y=f(Y`Yc@Bm}GzyFEq?gAcdYyo{ zjdyiW7Fj67B7(;t+UMgM7QrHBI|*@{lFUdJSt!IJg6~5#;|CfR!6Ih+5aKqckTH!# zG{`svSVZg$16n#^YyvEz;S@w!bXxr~S;T0EqnrA3jxJeLf^kb&Tv+rNkZ2Y$R2pSi zWUC<-5sX2!|5+Lm%_1ffDi{_$&9+#~XVHHH9Gs8zfK`LT&QTtACXMZZ&hQNi z*84C74_I_|^59(hi;i&S0qZE8y#p27n)SH)Wm1XJry*`?Gn+;#{TGHRVR50-mEX7+l^80G zGE}nF5S0j?f#^7$)sPG-$pLGB7rZ_p?u_o8g9j`RHwUa6(IRuevIhTvMdTn;Y+Z6C zx)eHK(e^4t$K`;!>bL|BSWIvP;%+;PBr;D}DE)v%{18O@cUU8}f58J56TSvp(I7;ISS)E`EAFyb6pT-@(gwa1>5r30-%Y(oJ1fbz{h<5Z1^~)pxqmMz{)OUGV z65tjLZo=Y1fO{@V0ESA#3;}F4{eVUMI7G+jghuHYg$`KE_5nl>SS$)5A`V!mV7mcy za_=j<3T@{BtCGa<4p?;PN{5$kq63$qFVn$WhCBze4ACgl#RhtL%MiWJLfpnTKuVbr zEEJj%2%d&$FVARL+Kj*h7PDP|xJ`Y#D7`F%jQ#5zsXjlZ3m~8~aZGIXV)0jlVbQ%LpA~uFt%fBNa zz$6+*L6k|O)i0AtjGh8Qz6>_X&MsE zBqkF&m<`P%Y>UNwCVdTX29xF@bQ8pV;M_IJr0>AbpOfg&K!;cUjt*qf-_pTjlILKU zM58e20KGgW(Q6^oG*)y|CRr%NB!crH+V2Vti(nG7)j-^)eauKESt!ILf>jXBSgm0Z zOk%cLh}--VWK3fc4GlB~m_%$Dv6g`tn*ft&sDmhzma1PSlNh}U;-;!Nx@6K@7`KGQ zg-NG?L^Fw@(kR0uTMaRZ;A)8We~pGjGl|KB4u(lN-$Yw1<};}m;2@LafVCN+M}waOw3g;+#z8$>g1*RTi{G24p}eEt&|(^y2q0U84=BDRZI%VGosSVY54 zh_dJ<^~+=tqxVDb`A=SwEP52(yS;SCjlwpyrhFCwK(id%0p*vm&4UR!^<459s(FVT+wkE9ZRS5La%waI!0&j za7Bl8bTEf28iiB8p%*zNhbww*r&seolbYW9)^fO7i_OI|5V!HVo=P|ig$PG*14M^s zqlTpsj&l^VZHBn(%aAdAxT0+nL~r=B>Z&(9aJYI7mc5W5jfg!@tYse(2WUjY7Kmou zs(zU?V)RQ8H}zj^8fnz-Dcm}X3yrP^5=|q9N}~*oY&Aq9g1aC(PP;WEgGO?=dIEQ5 z2gIH6SV8b`<>BUVH4-f{hbwFF4_8E1F~!!`$&t|Eine-)j>}4Q)o}?Nu9%X~ zI-MgdlzzA(z8a$aTceTMzu@7D37>+v+b1BY(9VDNiiWi`zEDbI_;5wTHX3(K<*<0~ zUJ>6&yrl&}0Rqsl4x%01pnjPIVDuIUe*cn}B?0at0W2;AD8DEH7%B}j1hCcg!xizZ z5FMlEHA=@Qbhu)+?GQa&u_%OyI9%<7?HFC}`#~SHorkNxAThkd6&>E7!^^Abz$K`W z4&D;vIhZAgMwu?2rqC1QC0cSj$-i1gJy9euz@1 zRsAxl!|2x_Zt7-^E~&E@=NPwy z#f3?gK%$w%P-&E5lC6fAL@*Dc{co=!(M)18p@U)4lWdE{d?tMha0ZhK5IPg$K5*}i z%A~)6pFbzjVG2$0X0eFo{NC(wp@1m_)CBOw;&7FjgM;SSZ9Kf;T|4 z-+eVKf=SF)1aX_L?yF3)P>4wc`$IHip@u~;iP;82+~x!_rZI_zNi+tSM68%tO9KJ| zOrl{ZM46OOzf2}EdOXBU{Sz-qCVhZ$OITc(6kB^SCNWeRWte2EAtn)=0MY*6t|8G( zVlttFVNy3-IbkuMNrM3gnIwm+*$7<=(Zkj4@bOth<4PKLJ#>?@Xf_=@7I_YaMKlVF z7SYRN5xwRzO=G)$$|4JeSVZtai1zs*4U1qAvsFOcrU#gj^O1!@EFxG2(TwvoEP_SM zwh-brFGt2S7SXVh#sG_m)evhrihux%XsCiHi>lQxlSPbv0^+8w;OLS?U&Xj3EG{hi z4v^^ih@sLb!y;P^v54Rbi1xo;L!w#4WI_eQqVKUS7V}y3Pk@6g;$uhoim`+E3$21a znE$T(?Gkk7Mx2^{3g1CJQAk*$e7D$d0Lyoa5pCrOY1-ps5yH2;HZ~$e{%Gqh7|f~6 ze76{#Ptp1Q$%Sy{KI|}^xet@?7NbLMJ2>plrvvA_cj-X3%6E%NBj{k*N~5s#SM(xV z<=95A5%g+a)gNiX$F>Q*@$?MhHogg?Oo$c=QJLT*hz|S|4U3>Mv)v7GoB9n3S1??RvKnPl&!PWFO#i|o)2+Te}@dh);8;K zXDu#ly$(n;TNx^iGHkWg5L*c@glHG5G$fj>O!fpsA9CN!wph$(>s^3@Y?bd8JA^wt zop<=YrXpq1Jox!cqC*88UYb@3NeXbdx#E7zJ^6GiP^eB+@@M)d63rwg8w*h;y~eg!%xBUGz(FR-gM@dk!_6r`=#19E!3PN*ZXP6DK&*L?U=99* z1R}>F?$&DuVKhPy5@>r5qCe4{3a12aVwe2{hz#SavjXSiA=b#LqCOB@1|fJ2aevXh%=0 zUnX}L?J#rdHe?X)bX<@7WpUw7KOoWEVW>3BaK~2DA0!aZg6J6KXq1jo=s^Or6KW!K`pJ%DmJ}FK<6auL7oN{LT=adMp&0dI&+~z!X)tftIg`;6Cje-3bu_9tE4?2i!s5cM9{`Ew7DJ^`hFi88nwJQUhG_rCXo&Vd z?MVZZ2_4LS>?drC#r%2cmw-d_691(2ZiKFZxIbKSvoa}rLy$>ySWbtRN6~>yx`qxO zlRO8*BpQWDMfCERM6cOQ)A%1?tZauY6k-y=nGo&wEDeib60X}G%SKi%=R3_ZTbo`a!#^Ph)D#Wg=ogj8WzDMX4?XBo1a6*G$zrom&O2-h;1X* zas~kbCeg4JqD*>T{W6)v=v@#uHH@Q6CjBeMEn#tC(yxF-Gl`+nD8nRM4Kaz}Zix1O zkA_4uiOGZxhDmLk&=!mNOzI6d$Rv5v@ESs8`7_@wHXJ@ai)cIxabGz+Qdx8-9Xu9! z4u(ZE3X2}1m&YP{y~#9*cOZVRJsRnkV^7)ObVf=A#TaDW0Xmi@bj5OhZA(zRYC_c z>C1HRnB+MaCebKN+CVRlN%T6vG>v&*R3=#{#3X{P5bgJ?8WzDMW;+aVo8~YhCnXDo zm_+a(L^B@Jum~nG+YyM{{5UeEF^L8lhX9j^z0QD^A0Z&XBpP0WD3gw=UnY|n{Vv2! z<#Tk&q-_|tgvEtP`+-C=iJ{Uc!z5b`F^S+Yi1z=uhD0-o$%GDuNpG+%7W0{O5^#`7 z^4($#>yAgC`rTr&X54;$SVX>C%rlw~i_j<}=}j+>B=kBD!T#q~C5eSXBq4YfqFp+t zVQC~GBbd!$qt@3UWBBtRv|V79{DGS=?jNbE-lV{Hi!nirNt)L)N%$B>gLFH<3u3tp zX!$t;0=%Fh3!<0IQNK)HFuDuGP4(qNVe;Z;3{}G7!i&3rMDv27(kR0VTMhAoU{{C^ zVmA%R;DtV>K8)vhFY!6v)VJ?Ki};v&9&esJralBi@WVrNevi(jUmp)=et2jZoyiAz z3QdP|bTE9NQTXsQy~qc73Qez$=sM277d2A*7kuW&gfBtd?O$Qb!q5C@*hS+D&(Rou=10R}8h3ny z!{R;jBfgh-%Q*xE2tdPbh<0?3`ehP;(FY)IYB(|r0sfr?u(%N5w-+Sp=AjnXj+J@aF>BM^P&$D$A-?U^4R#Jmn$4(R0G_tEWWJ9n#BJ_BNSkM!tp zj=5g`2Rd+%@dY|~dkoLP>@jGR>0%VUyyb&lZ!t|{^+cT!EEJj%2)+T)UcRYeX)^*p zJj878LfocSX5@-uA!PJFJVfwqh-Q38!!%>?kshF4s;-s z_S3;*lILKUM58e2$Mo`;M6XUv)42BzWs-$LOd^;M(SCQ-um~nGTQ`W?ls8G4WT6m~ z2zG&J#;zI`!6atu4sn}rM8-5G(J++80F#In5Nr7|0s>5;p$9~n)Jy#`nZ)Qqh?`3B zl4R1)F>VQq3zL2aB$`PKl|~sR*=mSM1dAZr|G^p(%_JrhIv6Hh^)0l;Vm^}w0?uI4 z1cWY!xDRZ&Q<-!d{Cpx$-$|MVg zm_%?AMEgBO!y=f(Yiq`EG|si1SFbC43$P1CfRC;Ndzk( z+W&La;2@Lak=_b~?t z#s&?GU=g#eg}BZC0~ym;M8h^311uu8kyuLyj7@+=G^~Rti#DiVCW{!o1>&Zra&*a} zYcOsJiwlc}0EuQ1L#0uMMYbAZ5y7nx?f>%{63rqe6Dk-M-NCk4%x6&v;2?|ifOQ0i zoqp(nJLQ)9(HS1FmcY{-u*Sj=JYdmz7M)Aq|1&uAfYm@}?|?;z8akK*7LCHIB)z-? z7QNQctNGz+!FwhLtQxG-%OLpv7Z~M$WuXx12-ZP#h?Z(t8tKR|W?KPq*T>lE&;g6K zamoZcc ziwl+hCy;0=F;p65sAQ`lDiPcW(Q$f4Lo%o&2doEs;`Iq}XIyo6@POsv=79Ax-cC7S zS%ZJTA~K&Tw$@BXmqG_D+U7!ZT*}l{$0cyUVuC7&yX}WaBJ+fW(hpd~DVj8T|tm!A%g&_^gI$#^3>q z*`9;A&0~-;Z5g6r4~>Ckh}iSQS~emeKph&kK$JRL)i0AejD88?rhd#za_)Et2SJ%a9zf4k7d- zhzBXt4y*`h)D#G zK(yblX;=i4nC(pne*cIWx!hPN#3X{RLp0+X8WzDMW_t^Q-#m_)X*qRMt=ao?;mk=$)x|nxFswuOuF*fi!q6z(kR0uTMaRZ;7N$~ z|3eLlW)hPL9SoCh#FY~k^O5IQY9Tc zCV38qNi+(RR?y31620=6rg7evlt~r}F^OOfMEjkqVG&GXwvG_D=@n)qlPnZs62bNm z&6uxY5lmvXP7t^Gb!1Fq5)J)n3^0jUH)1XQFg5`u(a;5=OzNtBnM`8z4G=fAfTK$$ zZNRuCEG|si0VH}(VyHCAFv(U!Od{A9qW$luA<;}?GNFTEQY+hHF`r3q0S+=r4p^fR z$~~qYus(#3&mtPjXx#PDY-LgGJ3$tC4u(ZE3X86$m&YP{O<Q6j*WqanSbJdz9wq_vl4l$var|a&YV2<|91RdG|~XSVfp!iy`>_mpMv0 z3x!BWa41BFD4}6#q$9(aZ8XGPKMxth2Q1n~K=h`MQdhm{fdkeUSY|+|)TXja2#}hALrkq0+wriKY@mrBQ}Twi==m!Mhd^zQPl!8XX-V*a<>BUl^()>^Ibd0Xf50Mg15<4M7jh(Yz@n`HqT|v>U3FXn z2P`J&4{^8keNg8K3#A{hi1&qP|N3d9_AhwAV!}d*yZtsK725fqTBo6i#upx-5LFc_j89jbnr1Yq=72)_S-mn8w(Y(`Rx3jwYJ5={Vx zO2Z5RY&HFWMSMI&$7q5^=@^9$Sj;vFq6aJ%g%A-3tZA^Vr0adHrD!`3ST}D5F}!!M z=uk(8m%l~_Ze}La!Q0Gu4rUpmQKpLr>E$g$^qK*28wWq6GlGReGXlZs5bfpN8kROA z@PNf^vmtKNN@nCFVIgGn4_E|eLNwzn4bzOl0~WK*fw;{{Wb~&rdH0)!IvNAZ5V5($ zT7Hdy0Ci}15Tew1Nc}RY!{};=n@VtWNuAowppM0bIt@Ugsl!ldl%bBThUN}}H4yE8 zt%hj-(+*fnCUh{%(3Z_;i^cq9XfNR4G9(AA)d)>N-23y&lu56_&u0=HcG6+@kLD?p zj?uwmlILKUM58e2H}vwDM6b0Fw{iJgWs-$LOd{9-(SARrVG&GXwv7P6=M@%5)GRm%A{x2FOx}(-VSk7 zD>%AjQoHZs?pa)zbUl!0CNWeRWte2EAtn*r0nz@ys3FlzVlttFVbVyp#bQ2_{v2=y zlUfma7UDiIW4(cyhMymAd4I4AuD9Xuv^4u(lI3X|5+%VQF~4lzyR0Wek` z`dBE$B!UMZ+V6uJ7QrNDdkx|?buCvWSt!ILf`=iR@rZ^+Fp1fYLfqzI$e6|?8s4Wd zz$9XC5^MPe0s>5;;dO{I=?(SEWD=u~LEO|KUXo0D9^;mO>1dEt04}#BsB4ZkhXy`*@fJMYQ5^MPp0s<_ep*=)dl&^l7EMjyI2tNPG z(Itz%h;d6;Tv&83kZ2Y$R2pSiWUC<-5$pxg5iQV=XcjS~zCz(C-%eHoVN?YB0dy;fjuv=vcaKA$rZj)lNElhbuZfL$7nRbYz2c0hX@dcaTQJV#HdyVmJacqTwTmW_930zf2kt&1Z(x zy&O=|=qDJegvEtMzXTFZBZf+&42^6xL?eP7Av#W-G$eyYa=3aMcP1ANcW3;#DtNf^ zaC5lIPU3dT;mR8P!xfQZ5O-_Q!{}1za7Ej@5FMBI)K$kNaJXWE_aW}KuOf-e5f(~6 zToFGG(f*y#NbO(naK(flK-}$H*s}1uS2UcY@rA#mF?_h9A&bMZV>^e%J6sVz&7hX6 zfd>dc!-o*<=qdHfBmkp7g1D)f$RGr`27{ZhxDa3nkZ1xhR2pUoV5{keE8-6M*ioj^ z7>bP2F$x{7i044`aK)k!BI0n>9=5S`y|3pYw4H~mJ4g)ga7Blqba?q#H5|AE-A@N^ z3Gy7w5=5g+7d7X1Bqr5 zL#0uMNwykd62S_H_J5&yR;xNi=MuF~B5Z8;P}?KtO;=G^~RtlQyVd zCX*Pw1>&Z@z|kd>_F&u+78fSH1|*tE43$P1CfRC;Nd&h-wExd*NHmj}Oz2>kbewIm zn9rmOfP+ku!_{7do`mS(s?%QvSw!P|H10|*Q5N;3gU2Gz!LW!%VbLx0@>oQ#R;FoO zP^T=iP>4kYQxNU*ehrIY5wjhHxJ}<@MzY94Ar=vQ6`~mrXjlY`nC%e6ZGICO(^y2q zdo%`EMC>(UErl4H0E=ii3{e&xQNK(UG5T$Yn|hd|OBVeZ#w}rSVbKC0(JW%9G|I5Z zRzoZz_zpz-|E`8avxv!r3Wh~rW?L-gv#1$xkVOvuE96hc@q5LJA$h%TS?W5&t^kyU z32s8d8YD+?U%_vvyL0#ul$;yR;Ga8Yb;bh{MB(kB$8s^9qxi+EMmtVtXVM{nuDc9K z?;$Yd4I2-jcMG<9rszy|_=j4&@>ocGLqXhah4(-vv1s0~p;f3pSyYOD-6><>cxO&U zlUv#3X2%D|>XFi!TIS?ku>zM+2p`$RfBD~y@q%vKM`3CETU=@ysxkimT68bVJ*g!aEJec|vJz*xV*z~ZsCEOVBO&Hn;`EH`H?rsUYTYhYY{k07~YfMmzAE350A ztXP{|Ts|u+y9Sra%4!p5EjRmN)^gi?gn*nHWXsPwodZjoxl86dS-)a2cD<9!88Pb& zv&OEE<*sJ!*OR0cZ~Na_%XVi=H7l>GyxPgi(P~a!%@SO@jawv%a`P6HqnhjDFM5zE zuPv9ethVkHskV38#oD8UuH1o!x0f9K0CXVQfhBn0*N*XTXH<*>Q(0RA<^0$cbadQ) z5|ftPfgiExj}zsiAshWlFq4t#hc9L#-=^FGIx4@X$cmHV7!?sLrC z=a{+AF>{||=03;FeU873yz&1v5wUSHDy!cL6tjg}+?8R1F=nbF^yckln@|DTxdnvU6R00M(;Ic3T&pB|?>S zxSAzP2c{ebpaankEWx8u{_TZId$|ZxSsVToRp`KBcYC>FCl_AAYpMNKV1J9(TgMlT zmHDp!EBv9BaH5yk?q{8(=;e|OO{jL7=ePwfyZ+Sk;0a#}Zf~it|8J-d!BYaakJQVy zp+1)N>!rRD^)7r_xi`4`aA8pEs#?4p+<%JIpg~>x(RE1d>Q<&473*>X7&DyMZLz5= zPh|NAu?OLMbsv@=i;evPj$>!hqnzup_l==-B_(KIkzDTwxSrFkBP`t^wVri|Sl^+cl*aGaDnds9T!;$$EA>; zco(@d#vvLHqtiVfmVZI$DOj(yubJgAjD_Jt7~0|*A;TOP+T+zQFlfjvxK>|fG4Qp= z3iSzsPPa`!Pe4|%*~{=aCN>pKxEJl{aSU*OB)!(YJeQ$3x5=H?1t%~h9KP2?v8rj67m@w?0EOF>Qi!YpB}T+Cm85-?|Z#z!CHwl)0hl! zh39UTwOF`WcuBRnDb4SL~(hiJCH&hSatfi zQ($bfAj?=e2qEh}a4h?gn7n9R4t)pS4D-^y-kpKi+#xO}B)0?Cr4B5L3*Od55sPUX z%w%RUeHh;F2PV>A^p|Oc3#Lq@@lQ9AX3K&ZJN*H!pTk#n>{l#ehHS$HGiGPVHk>75 zc81L5t0(5okZsAEm^VYV<$@V&<91>nuFq}D1v8e5#f;UwTrQZgwz{0Qck*JVctJBm zwv(~qO4FWbdzRqA(awwg2LBodrn0tfD0hhEyBut{uf)HD+n%@)n{5!)y#ljIUyl1S z)XYrTmuZindS!Qbb#g0W^{_j*6<^5j+%BGfZT`JESGsq*9dppI8=Q9S#sI`PcXi_V zquSllZgOYb7R7UMi$}T!cY)`0Mx|Xly0O}($hoz>v3`AQ{^ZW1v7gN?as$}t_VjC; z?J#SexaTt3b8jc^7BlYc(=ZG{=t8_q{vb4$Nv{~}#B(Qi?g2V?^jnAC$3ji*bH@`l3F6a7Ya@w)CSV|rbYdq?Mjb|!a0wq#(Rdb4P6XP+X6 zPFO#UH+z2r9JIms+vXy@$pvy>`?dpxZcGF+^z&QI&fNr?7u>(d9nu*?bR}LBWAn;7 ze`~zl^a0t>^hk_X=~JXHKJ zOAM0&kVHGMnlHqg6B1cW)dPm%QoyxGNCA`6NQpsV6cIM-7BS(nqg{8h5aNryF{Fcl zjPZLrSz0nSM>}<^-|-l(GuE%-PC4WJA!Bts`+2u}Z;tKwZ9zajzUJGpy=(_pye%aS zMDjbnvC?&}L<&5zsqdp7qjuV2~b z#X7B9Xle*d48hqTPBwCmu+svH+5QZXJ}LOGgb}!AZjiy43bcv_(3+>tT5V@}-~KB1 z#`fl}bTE@gK23PJdtGQp2N?u=b2|EzW^b=#=Q{agfLFXjqTyt1zL zu9VFyk@o&18W^chFooLj`Zsr zFtpDPH`}|JctHe6k6X#tfX@4JXU#a`br2X_XLDaH{dh#doyl+W^Bfodk=;c_gNg=K zE^<^4swk~3d#tp!+?h9OPEGBi1+}G*6wI%zDqmdCZ`p|Ao92|(JyKp}{w=6mw5V!c zMQLUAoYJMWBMKJGn>VMrw61b#`J7=ziK3xJBZe1?W#EG9B?Eouxd_1Jsw(FWLdYP* z4oVaaFB&?CZLt3*T3J1>YDro7pe1#cRnox!A2kY7dFA4os?x`cDr#^T#Rhj#ZQTN? zV2oLr7pzoymC9;coLXKs{Y!UAP2Ouo7@5LIk941R`#t~ zS>51@q}^!C>YtU}J1eU@oc@o?=#6v|Yi|78f=Jj!eF9N`EFWGy*hG{snmW+L^srCZ zvriNDv>BpcBR}QUeqZ0>@t@;{w2c>!1Q(_ZxIVs|0#3Az59giTiCYwlH?J5;q-X%j zQ`I3i{vTiu zI=^Coxp5d8vQFrRlwXXbTPWq>E1QKOrrwQZ3@#NIO@#rc!mXgfuu72{rSY8{hLJuly2&F^HEKyjOyEe!Ad&68z$)3D#L$8!SEKERLREq_=K- zH0S=?E)TFb0bOLILhIe74Dc8Z@VLtZ{3jdWR)-_}_fK9P;y=w0V{Q1PlP_NvS!VJ* z;Pi~2bhr(bb^6jLV1J#y^!e9cr!PHL*J)|K9QXL(lM7-S4>f^5TAp)V$QKIR^Oh;{JQN zEN=>3en2k|UqANk9{Z^AQXlyJVFP@5alf?n>ry9)%jfsY=lAd@bpGJQ-MqX1o-;Dm z&VKlSf3z1L>c;1|v20-S=Vp%lNm}UhX@lzKE~%_48?>;z`r*pz#e*JORQvGan$mgY z{M^`x@F&X#Ev}W1lMTd2%jWU(W%CBfr=FZkN|Kou`Kp&JE5YaAN{SN^pIg(OHJk@Q6^?d^&Gg-J;Tx`K62b;XT|a-bwx;T>Lrw@!dFpX3Y6M|NWdNlSukI^YI5o^Ssx%d@R$j$zvATz`y#5 z_jSuh-BMV)plmii+lvpXp-;cVfB3-vlQ*<4h(C`weoCGH@gtpM19f7B5Nl_BY+5~r z82llY{Kt=jZR>?UX~@so93PjT{oSnb9eRw*?_=XRW8;I&PE;HE0bd2-T=XC`a;#&H z^;zTcb2ev>%Ww1D9LaW7bbJ+J4nX({$iqih5xBAHskW!em!?w ze%_k4e$x?INw{9o2^dTz?YAgX2C6<)}XB{Opv>o;F-R06cm4UFIXYlcyD9 zzQ9CzvwZw_;?&B)6Q|uXq(rIbhF&37xu%%EdDG%5?+x zMy^_=bHvBI7OsTm5m6BntvBtVe1-hwk0{SZ!rp`NX+=X?rVdc}a~^#hstCG-?{uMh80+V$wYG zIvj@C<#SocWJbSD`Dvy#f7nAU)fvN^vC-nGTd1zs{_Id^I@JF$3OHURQ@h z(qg;-u>BB+i)7}W29vywK~?$E@~Y3_?%p;Ol=Jz=*R4O_mo9Ven09Z$Z36}r$X~UA z0obeI1&FT{NPih(xgLU-;m33qQ<;CmFE-y{m*xfek@6ZU<1Ix$ z=i-n2(WCU=QM$L>V*T81b$O&cAozHZHDQ zUS9WjjkMw8_xO>kM&h=6{)_`C`@heDr9*}Wd5K-dT)QU;5KiY@-fGNM7vF$^V#-4# z4NL-dEgSs@?N18}E_P?a+uO2m6|30r!h+($f}3#%Ggr9bcxlxvs;dn2E6`n#hL75? z^$FNBrZJw?yaN>0tZ`*!wdIQ!8`@8p%+Swx$2N2kNfo@cpF<;tlLa`;fHdg?&m#y1 zejXMIY1pMt3JE!@$vXHMkL_?hQl||t7P|mPghTUm1BTw$8aCW^4~L@mF-&88VvPl@ z1Sc~+tTwJyYV-Ogt(CdkdH+H4zTXTQbk&#`XBa3YO^Xhq3rFgkb7&T|YqIowi zo--bMyog<`*WE&t0eY?9*_-A}uZY}ino#Qd8UqONxRlkBpvQbsWR^SG6ZCr-a}UZ6+v@-o}H;976iMDN5D zy$8@i`}n;mov>gAN9i-}H`gT|HFR416l)K+_1v^A4o_skLBh@ zV#r{BW2R&K*$%^SeUkgREXH~Q^6tc^X!G>{-ml zl{4)KGtqvESAfa!>0UkdsF?QJ#bR+Y77HHMICSC77&{zXvV$F7D$g?lF`*ShU-TIh zres*)kL0HqgpuB3lF-e_xI7-(hUT0S9C#MtQ2jU_zkK{I4f~kjBpw_S({zl9x655x zT2fVsCzhA=rhe#sQU9|AgZ$4wEGd)c4JG{YAzTe#AvCYVUTS_-DV`Q#r-v_Ml!q<) zsKvfhFGqKLOacdqN2CnG$$PF&^`a8K3tz`K<^MP>w%5elxpPYwmper-Z=NhE z#aYpLtg@^QZ++C&mQ>Z0mf_4at$mP|+IBnA%(m-0lQhCfd0>^seT zZ+I>w$1z_V$}->Y&2oO_R^ay~%zyYzRPl;CYuu!D$)U^juIGf`UvnxTu2Vs^1rl@C zik2@Faq{v2ng3Rxv=Rbes*m+u1&1}pm+E7E8{n|k_)>kW@AGijZhWaG#7ujsCqd9O zs-+53FE=pN4uz?A3S3EbTw&_>4NTPyBg(O$?g4R~N-7QuVf!CHm$TEfh-!)^qn<9w zDyW`Nn7ZD;R4*w^y<6Z)st**V{?Ncwz4X%5Qy^#&ReFnFL^GzsJ?`X=NV2d35_1M8 zsdq_vNRs-bloLtn0?9o(No^AHw|&fiyOHpK=_1uz5RL%#`v#`EpfGiNWW>FoDv*n; z6+PI%RCg;(J=efgs}-hxM&L@SeF{?_HZav0g{kocGaL}AzS5Vqq6Z6HL6tsE2hq@@ z5HyskOp{SpLjY54QkZ(Xz?D=-6sA6AV5%IwG<8?GbS2dYg{h|sTtSuIq7TrFGp0pU z>E?V~pqpH)f-2oS6xe8Erb;(Y(rd?@A<2hOt}*SfH`zB2_HO)ixXgqw#QNPGfz1Lo zTm5RG&87Vq8*3*lTMtiI7RA8ZV(^7#u|LfG2Q}gMTsk;R5v{clUy8PDbs%#D6g3Q= zv?KFvzAR@=tK(fb?yT`MQDA$GPtu;C zkB$4IG~yyj>@`9Ij7qCF+Ni7xR*rfV8ymchpQLQ#F4Ckw3T&^D<2;8?gv}Ul>sDtu zdDG(=JyGuo*6UL1HZFJ^+Pc*kk@_(g8Ik3;TQ3v+$?G;Q z<_yiqebJY?Pd-09^QEpg=aO#iC+&938TQGW>%Tlczvd=Bd2^#)z@N?Na-H4)i97fS z9u_ugC5wekTFGYNSxC%zDw~?09Yq=cn*UA#I|BjHsrujr9&;K*FOzb;vm1IZ1TIv^ z73NPCoHj63FMRJQBl|%YLf}m`OX0cD^9@Y3PT^;upEWSmK84RhpEod7-yG(ycLqZz zAjnPikiZSjLg;D(Q$4Hj^U&K3O!d0LZ$ZCfV5$oWkH9Y?jD{dLRRx5Xtc6}`V5+SG zH#jdszhq#lcN9JW{egk0y5KwfIVRnqdqI$!YK+3mq2(8loC>NP0%N?P_d?)JbzI;E z=R@ez2BzxOR>vE<5CU(inF`N=e#pR7^$NcVebB&Erv=q(VqQ0*7E!5NB=P!~hcPpY{PUb70i#=umY z1#WP*LGLgy)td^x2YuYYRQdR}d3K@;wEW(&Q$aOC;X3GL5L}Y#d4cPlozS}sO!cn7 z4e~=ACk;&14d3?8+rYg9?E#-RWIQ07v zxKLdXxIuImd;>W<)E&AP1TIvg1#WP5LGKZ`g6f#S_0CD?QwFB$(ZzJAFLZwh28(K@ z!Vf{08JKFV!W*GC8JKFX!e^k*8JOw@{0RXYSOh&3g4|RO3f$mSKvx-ZrnRLceWbs`CmLcg3$pK#-eiK7^O7fvz(!)fRypoE^|R4NUd6!pEWCH!xMFtIe2n zgYE%AZmQ7=FN1!u6K4p?=djdF@YPLlhCIOOw|Lwd%zcLU+Df2jyKc{g=a%Q zXke-p3b#TZFfi3Af$N>~&>tC?sy~0#47o=@kA@&ORfWP!p_dz&YMa6@LGKp0lIoDc z)W@U@&Oo1nfMHZw-OY8Vdr7(8=?7g1feY1Gfg426mU6vQ23-Mx3)K?>H;CRS<$C8? z=;t7Cp-Ktd;B>?f>~!Ie>^K!vVh?AqTADX{Ci6m6~ zWktfLq4`tnfT{Sq=7jHto(Ta=wNl`E=PBrQ2Bu00+~6F9K5SsBvkE&sF<1~Jp(=tf zcLI8ZfvILGyb*enfvFA%T<^RF{knmvJ`%XW$;IFQw1*%!)d&c4kB7e9z*IE~FNI!i zV5(;oeiQm_15@Q($0YSmN9ZmPxv8c>c*$ANa|}$iM&JhL8R%yXOm$G)A@YpP7u(Cs;|P-W2Fqv zKu?3fg=((A4Wgfra=o(}x&ZU>K;HGZhaNthimmEBfX zpj>TWD!Z+|fHHrA0=cQ|{<#?C(FUfn`{x>zml~ML?w@y{{E~sG?EZNSHntPY9+%2) zl$W8r!oXB^qr3~{y#}VT8|9NIpEfX+-6+>%W4qeyajEQ%cpu8G2Bxw*;xj0pH!zjm z5f@=In}DG6RCY&v2<6udOl7ye{2i5C*^*XJ*{$zbly5gMmEHQTKzWscsqEHwFUtD` zuB3|E`kn!P-ndXjZG8u0ms)H#tyEE4-zwm>#)T?s>pKE_(lKUxN@e%BwJ0w$FqPfo zzKHTJ15?>O?g^An8koxNahGFHT5qF$f-g39hgi%}jea3vM@pIil~?LM>?O zY$x}doh6msaGpl_oPnwAhO-bG#Gz)dNM$#i^HHucFqPeKo=4d+yFV(svrM2o%D_~1 zXIYJMoq?(B&T>1-I}J=_cb22E^ARNl(!g|%I@dhK>2M0Q`!AoKK5T- z%vOxb?&l_O%*CflM7McRtlB+ys=Y-19W((T9ao{;L|#BrmiML{jZUf%^|h^*##Rbx11ypd+8Bq4Klj6DV-wfl6y~ z4+`9Fpt3G`3I%R5P&u0Hj{>(AsMIGPM1fDoQ2AwYKMLGkpwgN=he82%2dJz|4n=`G z2~>_It5D$n0hRjX78Llb3zc6d`Na#|LZH%`9EAcm4yde4)}g@d0xCz7J5k^!0hRjX zF%92EMRwVBF1I?5fe4`nXjlIjc!T(l)s5ei(YB~=9qT%aY@W)%1w z2$i2DFQC9R8kN>$F$!FnQCXL)L4oTrDo2w$P~a+zN`3NO6!=sJm0u>uU=8I$j7n>A z846r}QCXMVg#s5{RE{Q3qQIpVmHK1>3VcR`%CD34C~&n!r8T(^1+KBEtV^Cjfh#L2 zN0UV;a6Lt(J~J6qVNGSQNN?qOvZz0tGIbs2ol1Md6sK zv?kA>z^5bPHW&py2NAa_6!^pgmHOmX6t+R|DxfltJaPwg!y?6%4nD2PyHVi!CaL)2 z$XwMV)j<@vmPxAfD0IcTgv!s7vr*u3hDvL4BMMx^P+6CJ4FxV;s2ok^VhQ4cg-U&L zGzxqgfyytFn^EAJg-UDkO%%9Np|UR75i1VYCsd9mr=Y-936=Wf3KaNk0hM1T-$j87 z6DqCAZYXd$LSj0&6bf8=P^nM0qQEBws2of7#lkTSB9@0xSYs-!$>&fw zXe#TH@1Vf-MY458fh!3r7&jDnsz+sAaxDrxzl+;p6nIic1s`?5**pt^TR>%w>bV0P z`yZBpju4osqK@htf%C0zxKOss3rq02d0hr33=BbMzTzIL+ zLf}GWPxjO`5V}w=hror3OB1jEJoHWjQ*n_Z{3i5!2Btc#Fg1SDOA=D&Ly(YajKb8D z3{1tfjR~ojNx5G1N|X^vWuFyL?@|})6a+3*TnCxu1oSBbQ*lKk+zl&T9|*ju5)i`F zw@bNR^mLTrLRGIYb%TMa>=Os-eGm>D^#KSXsqE7S>N60!P=5r03zdBm(GQF1PzYcu z`J6z32@nBa-S>g{hAin94rGpuPZMQ>b&WG9!}8KF^>ohR}t2 zECeo8_Swcll-^&|*gsPBfr zg^HU6cAt8+lVm@5`LbcCq#6O?HL0feU9O zvTywDKzX;o6;$?(zfRar^njpMR7DUroO-O3>qSpN87@@I6{cQgU@H6EgnBoGEu`KL zK_r!ZhC=-zgf7(QAaJ3w&r|wf$5IFZOl99QoPqL#2BxZku(i}HrCcxiDU=aOl~S1c zpn<9ElNjo=5H^L{!LA39RQ9P1^)Ol%ZU0U@C5?*sN!uw-}gem%`Ks zq+BohHI$K%>LZ1zbFr%eOjQ73Lh2Dx#@&Y=4}lAnea=H&3t?-ipMb!HihDL@*#`ZR zfvLEABm5ThF#}VbQJ6Xh`!gn_?g&9bs<8@FPcbl+eOg4l9KuNIRS-l{*(XQTyCHO; z-VcEb6*q`%*89+>4NS$YBH=FF0z&Xop_&F^66#q3S5U1{n0kYOsq8Z+>VptQQXhrj z@>JYw%H^T6uyv#hbv^_xRQ6dE^%w|UsHa2FEUM)SQ$J;3syzx*A2Kl2X@#k?u=_+3 zD*JwCKa__GTtQ{u@7#d$W&>00gs|b%tx~QReHdjloa(&7)LGcE0;aN0sHhVV_J?{5 z1TIweX%%%fgf7&}AaJ4L#+cXt|BCw>7_E*hyVp%mn;{I#GG0UoVtWbeA&f)1n+7|q z(eq=8n`Cbr{s_gDxqEZZV9Ar3^I|x~p13Bkaov-dKe?2gfvUzrK?>(=6PSvY=U)6o@Rlfy!B)}A$ zA`?Cjc`?8gUqrZ+m;^J!ddSfT$dKZZ2vg1vFok?xlv@y(l5zk6DJkUtqI?^HQ7GR> zKoknj!b$52)0`DdbV3{0f0lD8EHO6bgCQ9>7$-838bb9?&j>-WgzuJ_NF*+*a!N5rW)>fRq%+ zBTV^GfGOmcqx=SeR45y;EQ3OPxkiTv%^xgndaHT<7dms;%@H&dK zC5*>@ke`(BT8fcaO)ziDaR|tpLf$>f`3Q_cxflUaD7aK%Ih0#VeV~+s&=G|~UO&nY zV-(7B2pD`6-$a;lbh%tvM==|LWl}B(Fhy^KDYpigLXUY5L4T)&*HY*)?-$U&2{6TI zEN4iZa&oB;lyVw$5T{rcVam<`Q^*%cxf_8DDfc5FC58NglxGkah4KOdqEOr@;T^cf zm;xaHrr-*Tv|1q_2{6T?2ve>s^?_2ZhmMpK`yxzvAixyzE>fOHAQj4s2uMjGPb1|R zEW;RuasmRPP{`}}IP`@9rr>gpZ2KTz4KT&72vfdQ>I0=b0v#Drd=_EKs{y8vzmjr1 zR(PaB*@S?U6!KkCE=FJ!%H;@%LctXyX>ElZ3@`=Pj)dQXJRV?*k0VTZrPK#X`8jlC zNHH0UMwUZ44FNEPJfM`z5EzBB69G{u65dhD1EoGtP##4<@f4>@7{xVo!uA4+faxT!bkv2bh9uX6D_9b@JG-WTwcUZjWog zRX_kc3O&(25B*|*DfC2p%=gff5fGa~Yv2XYmjswX>)zL(?+h@7*1GRO=K>d*jK|8c zDJ&!@^l*DI^yLAjSc$-^w*zudfGMj4DBpwOCcIrP;5rqDX?b?9#em_lp2 z^U$x9@Vc>BbI~`9PPq_*o?)olA-F(;`T+zNWhih77DCU3H4%j#RPThoH^3BHaGipF zF2EF8WEDTa-5UY1e3<@oAo`AkIz!X~6Y=u4;Ulbz7_2AD$YkyFsm1(-r>kZ+)K;eldSVm+`P0V;(aYVU)7 zAixw_V0;4oa)2qcs2Gn4eiH&Rq0mBN33Ph0(HjOK=*Nco5d^*1P#ZB}=V}1z90;xe zkj2Lkp9Pgd&!0zQYCS&8v?(;ZpAUU;fGISiAAr6iz!aLrzYCpHcNB9!=ERf36q!Pg zq8CA57GMfZ%eO<{9bgJg#ZN##6JQEWzi&b3oEybFjd||MFy*DtQ|VpM_XU_j^XZSE zpARsF=Fkn8td2oIeiWKFKMb9dWx%gPycJXmJ)r&=`ey;A&_sANW}@T6q?AIF-}%rN z2be+=-j|_smWyI8L0k_ig`QPU#B6dZ0%A~THoFXZXMia*gWU`L%>Ywq*7`AYdfm|* z#$eh=pF7kiAn0+2x($L;PpI!haJq>Cn=!qc6J~o9daS%2dS8GkG?hF6{b+zGG=01X z{aS!2G-Vuzc^c=5D5e+Um7r4S3G)%??**7bbHJ<6zX&h|=X?B(YQkh|dYFSzXs)*u zIwyE2=3R&ngG!-?&7VX6I=~c~yiLQ5sWnWVC^TW~gx(!s3Qf}XLg&m3#oU4@!VHK) z&z+m0&j~PvW?k!{_XU_jGpz&Aj|P}Rv#U>_b4rC`9>tVqL73f8EJEO{<3-5V0!*>J zgfUx$JRV?*QxU!ic{{)qnj$r03d1J^=ndTvd_Dm65CoqNK)nLNc@ESGac%=jMLal{ z`3w9$H5MC(>NXA4S^Tvyx1k8W_Q8J2lVMsy5uDnC{gjPiHb4=)$AkTp3&M{&MR3y& z_ER2101b-pvpU#M`JD%-gZ;b!wUg(xeef8?LROX@~LL0VJzC|0b>imTB(O7fp1F_=NPoUnc zD)m=lO{sqvD@whH^`!ndsu|YOEtOAELspFVq*yQND`K^%zlmCfnS1)0dn@X(9RXd9 z!am6gT^b%jRPQ4MM4_;ck3#o`mjbmOjesZ=_L)uS>Ua?sjj;#;Q7G(#lF;qpq(NWV zQFi-v6mKH%W=I*DaiFM24{8jPJ__r$53LKw6k2xy0t%wAzVhIpMnP!w9SDd*VI9=L zD?Ct~#gS85J;CY zbfSUc5<1b9@M}pi8iR#VC_~>GD5juqJ%E6MD6AKRLy25gL#{jd$mI~R~q6ii60WruZ~N^sgBF$%17t`;i5NJ8mm{gxw5r7Mw=_As$;adGO{{G zn=4P?YJ@A$T-jD_>gLMj>UeFgOs$UB=E@qhSZJl@%At4{BDX8mdZ+vG4%B-$0$P!x z*4RCR<~Se5E=8@eI|i*ZK8#(8T4Q%H8gE$`yA-v??oPDn9t2!2idtiLB$|3`7`qg; z#_kii0!zZ!rKmM_cjChA31gR{*4RCZ>vbWFU5Z*`cN8w;I0Vq8s5N%C6>{o^opDQb<~(dY~Jhp|ghYwRvU7kN62U5Z*`cL#dTZUoS!s5N%4qCb=O+dzY#A$EMz6OucuSdY?7*9&75o#MFDx z)cd-r_k*V18%@36Hub(yqu#H_dgS{H2=`k@yk%PHifN?>Oe?K5t#rV&Qj=+=PSZ*U zOe80Ju;vnkH**1S4 zA!^;(uc0|O2S*f&T6gy8XeG|f5rv}GoxK~4$N4&oK+Bngl5+YTdQxq7QMUf+!TV?%LbXwYYvk6pC7R?bGOST-6{7MXkGbBRV42I-sZ} z4=L(ci4{zEsV1!+gkfof*XrUS(01r8F>yZZh5KQ@!^KY9iU{|+sa$9Xj~29h%2*5s zK2wnW1av-3ki8W;pCZVffVDZF8OUA&eWkH?Lg!Ngoj(Pgj|XHg$JpY-0NHz>^C^Jr zv(V}Ompu{#jedXG`=QgzFZ%*?y7y&|#o(h~U-lEw>Cl&b1v=gLvM0k$K)=20=b+PJ zFMA(!x)NkxfPTf;~XkD(5)_eA$0oFWp9H{N4o5Za5d0v zE_*3-`pabxLZ_o#_G#$!kjw7GornH#+54f>5ia{v==6Zgo&cvdUEi{oLZ|y%_Aco3 zfy+JvosMwXBXKXIH(d64=yZO|9)lYhz234HK&QJ~_G{4T=axMlJ`{SjWiN(Kced;u z(CNpPeG)ny*s_=5u1I&a?A_4mr7bRp5jwrJvJXS2t5)_^==9ghF5)pY-lyt|wn~oS2kP8+ zK>GtV$KB-8mS)2J50t+prXMKb{s-zBZmztc+I_Etf!MApF@cuY?U*>!HW3r3HQYOk4z#a+!K2bKWE*@A5#&EEeK)9Lu&l( z8d3amY?a-I@duDTPF;9mZe}9TR^#KCIIo6qUk(3To2nt)SK}7)eh_SJ`wDaIE6@@f zjf6~`6BF)<`5*m6Ot>f3hJ3>_{InCBFxMjmT4GPc#5pnHo|vC~Bx1rnv0miO>ublb zFc3>)SfC}gJtoeH3HQYOG$;`h?ul{c`<-Vm>6;OrmaAV~@O8{FgIf~rdCV7svmEYu z%bVsk~wG7?1gn9v3Xb+$MOgTPpi7ZwW5ymda7*WfV(z!c$fU=JN!j@J+XQ-mvnEpKpTP9gxN z2(I)U#qD^JP>lNKk=Ty;P!aBj3Lj+g3Sb0Yt|*JA<7KG{+FNmVjF^`tymnc3U_Tej z&vOv&bD$F=yfu|}#S{jz=~qplEow(hoEIhB7v-03=^i2+vCX!hN0E1UZ!6t(g@IU_ z2MDypPR7JJG2xz=UqdEh!acET$a^xblD+E+1F>}16=;dwj)`+(!aXs+m`%ildty^S ziv7%XCt)BqQ0%fJWgrNp$LM|xF z6X(Q)dt&|(Mj|HM6MGJMv!B`SBn-sTh!ALr^~S_GG2xz=f0mMn3HQWqVb$?W>8bYb zQW7ulgaGRnim;R$?5BJ@tnetpQf{!Ha%))OQG})3U_a%lu)?DVOS!>*%GvO~BX5fE z&iP3aN z|Lh=L58?iLOh?{f+qg95g@ITa^8zig$714~m~c}!0<^!@*oOxBSxTYh{Z8+PE5Eb=ARa&h7j%> zq7QlVS(5c23UgOTpe42=CeDco_r&~Tt3*t=C-x5V=0h#pr-ivbEzlA>9TVrognMHC z`B@?++!Ol(dGq?(yRtA4OLt{~mRKVaGI35!xF_ZxF|YX-fB?G0Thv5_=^k&WQ>4#QaMFiI{Lt>`mm&erCIq zFc3>aPM{_BUQC=56YhzfcCiyN;hva2M*xZB*W$|(oL$ufZ50m1h&eOio|($Bb$dNd z=<*zd`yBYXSop3ojR;{Nn?{5{ThytTI4?@LFUr4UlA2MtZ^rA$y9te9e;tK^SQ-%m zEwKU#nK&mV+!OO}yCh=5J+Z0Cm+!*ZA0c5NmPUj?OKeU|oD&o7iTT%V5;5VP*b3y$ zerCIqFc3>4LZBtq7Zc~ignMHC{hvfkxF@EMbwDEdwfOoGmmxJlTZJ_-V$MvsXQr}j z-JXsspF9WQJ_o*I89r!EBSIL+rV$~~7PU1d&WjT6i}J5+rDhcFoAD6x=1X06L z#DsfdpCWJeGuxenfmj+50xhvGV&a^ba8Ilr#iVys6EWeQ*aPq~PD8NeJq?@R4%4R< zkNGecmeJCPUQh$ufd+Y<-Lp8>%kDOgHZG#1lJffUU26c`v9@S_6@1i3Uh-_ zplyhAF>y{zxF_ac3Gz!aXtnYI7nc+!O0T-n_ncsv``<(v4l9CAKXl&WQ>4#QZzf ziI{LtYzpoGe8buj6Xu8sw8S2ciF0DYJu&|>cOoX-6I+42!zOmA^9uv9^ot|V66=eJ zb7I0hG5=P1A|~7uBdPD)my>IZr}avoZncLameUdL>2PlW-fB?GqVJgK(b%zqkrp*`!IHFw`L3tp(bmw#USIQNn#u{%eJForEK{ag7~8 z-eEJHbT1GFVrh~m&=NZl6X(Q)dt&~xi9}4eCw3KiPr_BQLrxforF(%uOYGa2I436D z6Z7A1Bx1rnu_lmWKeOFQ7>K1IC(sg`9TVrognMHCLy|;HxF@EaH$Wn}#`qlzXH+#o zTZL&cV$MvsXQr}j-6q6IT%Ln)p94Qr40}kW5g`m@(})mgi<%!3=S2zkMfvZ4QZowo z&A1+U^Xnix;}ZsAX+#LL#0FyGoS1M=%zucKhza+^4j}Kak5*dt2m`S+A_Q7u@5jVB zG2xz={~{_86Yhy!MBeOYwmS&}u{0tCT4Fb2;+&XpPplEeq))RFG2xz=_N4)dwl{3vmPUjykWC{(pe?EaWYaft>G6qh zUzGo%E;XZY-;C3cci28I{YD4_u{0tCT4ImJ#CaPC_r(0CeTkTGPplJphYjq~h!6&1 zX+#LL#9oYvb7I0hG5?KWA|~7u+mF22&un)R24ZPM2(-lBiHUP!!acE*E_Na&+!K2x zF3Uk8xyJadCD-URL0g3bF=Eb4xM!xaY~A+6^79;o`yBW|eAqQHjR;{Nn?{5{Thxh| zI4?@LFY3IDotja&Z^o;L9rkTZBSIL6r4b>}68knL&WQ>4#QevyiI{LttO-|$pVHb{ zlQ0lVBSN4hHajNHi3#__{8zh)m~c;QIr3&dv)xG;h@}xB&=Tv3iF0DYJu(0Ja3Ut$ z6FZMp#|-SMmv5g({2~GzOBCUIm%)C@CIr9~;d__Ce#*}984N}E-es_#@<8|uh9Z3L zGT2Xfe^Z$WMc4>%u%GfffA(jve-hZuMnI8TD*a{|DAio#&+k_4%tn~&wF2!mSRNDS z*Fd4#Qe9siI{LtjO`r09&4`p zvTjB!FHg8HZyc`gX$1JPC_Y9AzN}IMb?3{Ph|`M@>?jfDMu|Y%5Hn)poS1M=>@gQR zHH2{A5K9nydr2%^Az|(c3ADu4#>6=>;hxybE_Na&+!Nb{*r!Tj=}s)n^=W~Y*uj`M zCnnqzJLY01V!}PKvxvBzWGYfeYFr^9_Od8+zw<-7PQnq}__9WURM_b^-3x?)*se+u4}q3g zQ%sx_6Yh!mEhrK(;hxxBy{zxF_cK!brq~dt$F5Z}v0W zorHndKt(Mk&=T7d6X(Q)dtwJ&>_kksC#GFtK_dCGxF-l_R5d|cg>5ln&P=#xrm}3^ zw!}$Xo`Z0o1NXBE8(gPfM`0j)yxNQcZBYke;=Cx~z9_$!N@_;oz8Oy=Z|<~WXMDmy zER6_(me|FZI436D6Z4z8Bx1rnv3gvghY{?LkT4KSBSN4hHX$a?i3#__{O&S|m~c<* z5#$}V8BY&Xgn?KZ5dtl-B{6YMOt>fJx4B8ggnMGzGZ`e3FN?eEaOqJKv?F3}jF>YM z?wP49Ter5j+R1Ye?sMQKaA9ZpG$Mq7Y#I>)ZBd;uabA>gUzFdSC^e&S-;CRkH}@{G zBSIL6r4b>}65AgW=fs42Vt$*XL`=9Rb{u)%Dv71v2w@_SYO6BF)<`Td#_ zG2x!rH^`g)%yuVXAeKgiKuc^a5~i)7l3P-^C+0VfO2mYFV%kw0B$6+S`&My{UK6xc zs7EA5%$rQOXQr}j-M)%$fjkG{J_qic82+R~8WF-kHjM~@wy36;ewornqd#9l@0@MkU3h!6&1X+#LL#P-C* zIWgg$nBM^{5fko-9YfwX5Nvl624ZPM2(-k`#>6=>;hvb^iY*Zn?ujkHs^bZS5ykGN z5mXjNqk+nzXnc>#;%GEdSsIP|s635OU+lb(@?g;6Vh#uGLkML7R1Qa@fy$9+e2>b} zXf#rJI~w;;+>DCO@JwH@O{qSFByyu4M{%EM~DD-`0x?tP#Lb}yM zbzLFdg)-gBp}LNtI_j4YMic|}6)Inulhp5@%0iwVs(WUrj{4Nn4vDERH0Pf>5TUvecZUzA~JwuTa@tRy?Fs#T&tW0s>s2 z6Cr*-sM8?U29=_(R98{Fh%lnqzPLhVAmG~|-YC_zY~N3VO2L+DD1P~0i^_FqBf%c! zQ2YQPoR|b{PB=mFlj@0G(0&z8T!pw+s>>;+pf1Sg0f^Z_eFWmMpst5FU8>6|J}T9x zC|02Qb;a@?h!;z>>inGna%5Cjbn@Cw3@QcL)fG!9$P5wYLOc;v3bI55iW32)2xOn7 z_$r_jUzh5$6t@FPv881AEXCGR?WEX-&{+JV;`_HJR;X_erzi$X^;wE@0lf{ArA+v`jjVL3%e{*;oNP9un&XEFk=3p)>shpMw*!(1I_iJ5%q5(sKBKh5dFsk_O?6d&U<8^M;W|Q7gUZ5_AA{fj8{%If ztqz;daQNpYKDm5|KrT~Fxx?X%dk$ee;-2JA2l2QUd?V6u=QZvvsKcfk?)(Xq$8>Ka z=wQ148=Sko+kBYEX$0-_t^6&{J)(8o4c~~kJtjW$W_xKrSLI`IZnUc7Zg?x=wwd_6 z4&4aXuw5j#Wz}JE?w6|LZul+a^EHAF=FRJJ1Q_?#)?smOd#dAZ`1^?afr-z&dl0lM zpYpjIt_}P0_`~6=aoyLL{=+hR5wstf^0^zXZPD`h!{Jj#;@TtVV3~ag+V$yPacw@8 z#~%*A)QB4>f)19+FF0OB;66G!?uKiNpFI9>_#4RkO_M+S{$~ihS3LehNcHhy8i{;qc4&a{3B_4wm@^g1%e6S6rV@=kbTb-~26Xiie0my>`H_!~yWuyH&n*NU%!7Om1LG$_IxNm_b#&YfKZdyPoA}IoBZ6MJ zS3Y;c^)`MUe>l7oFGsIN(7`f$5cIO~z2bW3IgdXa-h`J*ry%HHnY{>lrSo2Ky;+*a z9}d3=zsjYmZzYt;Pw4dGobn-;Ux(}cy*&PK_op-8 zUpQa%(ZT$G9liu{mzwyDOFnwrNBLO1b(r|I@bQQ{!Nh0YXAtz*UHRV)*Aw|X{&4tl zJn}q&po3+eMOXo+IGvhaeAZiAln+;bR!(#|K7C@&U)PI$#f;9)n;9iU?C3<4V#caX z8#Z)p#L3lNoi9A!-qG8!@%b)93+B3wYc@&m=Xq;i@*60R`N2;xhIXz)Bg$aj`XXvRBn3~?-&2Nt{BY*h=)>afGwS;{`Al4ihuXx z7|EP_$>==0^uN~?112Hcg~v7o!m9828+FAoGlF=I;U7l{Q64+LUtdi57qSwk{eVm{ z#nE@_3vL;qL+5@QfW00EkJlH66$w)DDD8D`ItdFaH>T$`Wj#2NvAc zIH&xee)mBC;xQtNH6oVG{uj>M5*S~tSe}M$3IsHw+RJtRzM#Z^;RwrYvn0it5rtVA zmo}!X<`_}->;#M`OhW@6QH*glYAC+E!%6U?)g)iu;pFA-7`qAjPmKLHpmR)wK`r{ogYCW@fW<*!)JrzJfSB z#v=bF*t-AI{t;~cvT|h5o|C1YpV>gCsK_n>nKRlkEIIg{`9r{r#=%{J+fXW3V~f zU4cX_|9E!(OlE(Q+1!Vlv*Bei{q^kpE!gUByxtA?NwqfjtG@Glfid|`fNkqP6?ST` zy5h&M)A(p8nzQ(Skl8=Y>?dJ=5r40EeYh*OZ1P)?#b2M(7H9ar%tpe2EzNKqb-=^O7nGYwuwbkebZ%Ob>6J=%_@IJIe&nB*nHb*M$UFFIP zr#d>jyVk#ens;^gY$&T93vFe}sJECLXUzisLU-S$j`npMw{)Ri)o5+Ap?7wy#)-bJ z-rg5_aBlgchvu%^+|%9h($60H`Kq3_mRT)7TQs|4OKjB*&zzT{ub%hhY(#ws@N9%x^XC2C)_Ge% zgX_!o?oA-mwGo$0H6cT_s%$~KcrH1ltpRR2G!)KXSS7iK2dr0Rvf1q3~1bF3`- zps)7K=2U|=)>V1UDzGlz*xj`;VJ&QzbsN{23p>m91s1P<@sQC?Bh50+Y@)O=iX8+h zynS)Xr;WvTbzxL(@O5ZQ1#eE#TbX~^8t#&oB`0ZxbeF*|@GIp4jTg%B96rc9v#>R diff --git a/V2/Programm/Programm/Debug/Programm.hex b/V2/Programm/Programm/Debug/Programm.hex index b3cbec9..e58700f 100644 --- a/V2/Programm/Programm/Debug/Programm.hex +++ b/V2/Programm/Programm/Debug/Programm.hex @@ -12,633 +12,177 @@ :1000B0000C94A6000C94A6000C94A6000C94A60028 :1000C0000C94A6000C94A6000C94A6000C94A60018 :1000D0000C94A6000C94A6000C94A6000C94A60008 -:1000E0000C94A6000C941B111B1111241FBECFEF02 +:1000E0000C94A6000C94C702C70211241FBECFEFC8 :1000F000D1E2DEBFCDBF00E00CBF12E0A0E0B2E075 -:10010000E4EFF7E200E00BBF02C007900D92A033CE -:10011000B107D9F722E0A0E3B2E001C01D92A233FB +:10010000ECE9FBE000E00BBF02C007900D92A630C7 +:10011000B107D9F722E0A6E0B2E001C01D92A930F4 :10012000B207E1F710E0CAEED0E000E006C0229787 -:100130000109FE010BBF0E942011C83ED10780E0DB -:100140000807A9F70E94C8010C94F8130C9400004A -:10015000A198999A409A389AA098989AEAE0F1E082 -:1001600080818860808381E88093200189E080938A -:100170002101A8E2B1E01C921C92808180688083FA -:100180008081806480838081806280838FEF8AB9E0 -:100190008FEF99EF0197F1F700C00000EBE0F1E07D -:1001A00080818F7B808380818F7D808388E38BB982 -:1001B000808180688083A3EDB0E01197F1F700C0E3 -:1001C000000080818F7780838FE19EE40197F1F7B3 -:1001D00000C00000808180688083A3EDB0E01197AB -:1001E000F1F700C0000080818F7780838FED91E070 -:1001F0000197F1F700C00000808180688083A3ED43 -:10020000B0E01197F1F700C0000080818F77808304 -:100210008FED91E00197F1F700C0000080818068C8 -:100220008083A3EDB0E01197F1F700C0000080815A -:100230008F7780838FED91E00197F1F700C0000088 -:1002400080818F7B808380818F7D80831BB88081BC -:1002500080688083A3EDB0E01197F1F700C0000043 -:1002600080818F7780838FE39FE10197F1F700C052 -:10027000000080818F7B808380818F7D808381E0FF -:100280008BB9908190689083A3EDB0E01197F1F75E -:1002900000C0000090819F779083AFE3BFE111978A -:1002A000F1F700C0000090819F7B908390819F7D3B -:1002B000908394E09BB9908190689083A3EDB0E027 -:1002C0001197F1F700C0000090819F779083BFEFF6 -:1002D00021EE34E0B15020403040E1F700C0000092 -:1002E00090819F7B908390819F7D90839CE09BB9C0 -:1002F000908190689083A3EDB0E01197F1F700C072 -:10030000000090819F779083AFE3BFE11197F1F7F1 -:1003100000C0000090819F7B908390819F7D90839F -:100320008BB980818068808383ED90E00197F1F73D -:1003300000C0000080818F778083AFE3BFE1119719 -:10034000F1F700C00000409898E081E088231CF499 -:10035000A09A989A02C0A098989AA19A999A880F00 -:1003600000C000C00000A198999A915079F788E0E8 -:10037000A098989AA19A999A00C000C00000A198EC -:10038000999A8150A9F7409A8FEF80932801089598 -:10039000CF93DF93CDB7DEB76D970FB6F894DEBF7E -:1003A0000FBECDBF0BE011E00F2EF8E2AF2EBB2445 -:1003B000B394F02D0F2EFAEF6F2EF02D262C9924EA -:1003C0009A946894772477F80F2EF0ED8F2EF02D05 -:1003D0006E0125E1C20ED11C3C2C4D2CEE24E39481 -:1003E000F12CEC0EFD1E5E2CFD8ED8018C918F7BC6 -:1003F0008C938C918F7D8C9381E08BB98C918068EC -:100400008C93E3EDF0E03197F1F700C000008C91A0 -:100410008F778C93EFE3FFE13197F1F700C0000095 -:10042000D5012C92409888E0A098989AA19A999A20 -:1004300000C000C00000A198999A8150A9F798E0E7 -:100440008DEE88231CF4A09A989A02C0A098989ADE -:10045000A19A999A880F00C000C00000A198999AAB -:10046000915079F7409AE0E0F2E060E940EC22EE4A -:1004700075EF5FEE31EEA3C3843E09F09EC0D80154 -:100480008C9180648C938C918F7D8C931BB81AB85F -:100490008C9180688C9383ED90E00197F1F700C018 -:1004A00000008C918F778C9389B19AB88F30D1F4FA -:1004B0008C918F7B8C938C918F7D8C934BB98C918D -:1004C00080688C9383ED90E00197F1F700C0000005 -:1004D0008C918F778C938FE99FE00197F1F700C0A3 -:1004E000000056C08F34D9F4D8018C918F7B8C9347 -:1004F0008C918F7D8C936BB98C9180688C9383EDFC -:1005000090E00197F1F700C000008C918F778C93F9 -:100510008FE99FE00197F1F700C0000039C08F31EB -:10052000D9F4D8018C918F7B8C938C918F7D8C9397 -:100530008BB88C9180688C9383ED90E00197F1F7F4 -:1005400000C000008C918F778C938FE99FE001971A -:10055000F1F700C000001CC08F35D1F4D8018C9198 -:100560008F7B8C938C918F7D8C937BB88C918068E2 -:100570008C9383ED90E00197F1F700C000008C911F -:100580008F778C938FE99FE00197F1F700C000000F -:10059000D8018C918F7B8C938C9180628C933BB92A -:1005A0008C9180688C9383ED90E00197F1F700C007 -:1005B00000008C918F778C9302C3863F09F09EC018 -:1005C000D8018C9180648C938C918F7D8C931BB817 -:1005D0001AB88C9180688C9383ED90E00197F1F7C5 -:1005E00000C000008C918F778C9389B19AB88F30BE -:1005F000D1F48C918F7B8C938C918F7D8C934BB9A4 -:100600008C9180688C9383ED90E00197F1F700C0A6 -:1006100000008C918F778C938FE99FE00197F1F721 -:1006200000C0000056C08F34D9F4D8018C918F7B64 -:100630008C938C918F7D8C936BB98C9180688C930B -:1006400083ED90E00197F1F700C000008C918F7767 -:100650008C938FE99FE00197F1F700C0000039C04B -:100660008F31D9F4D8018C918F7B8C938C918F7DB5 -:100670008C938BB88C9180688C9383ED90E001977C -:10068000F1F700C000008C918F778C938FE99FE089 -:100690000197F1F700C000001CC08F35D1F4D801DC -:1006A0008C918F7B8C938C918F7D8C937BB88C916C -:1006B00080688C9383ED90E00197F1F700C0000013 -:1006C0008C918F778C938FE99FE00197F1F700C0B1 -:1006D0000000D8018C918F7B8C938C9180628C93DD -:1006E0005BB98C9180688C9383ED90E00197F1F772 -:1006F00000C000008C918F778C9361C28C3F09F011 -:100700009EC0D8018C9180648C938C918F7D8C934A -:100710001BB81AB88C9180688C9383ED90E0019798 -:10072000F1F700C000008C918F778C9389B19AB853 -:100730008F30D1F48C918F7B8C938C918F7D8C93A7 -:100740004BB98C9180688C9383ED90E00197F1F721 -:1007500000C000008C918F778C938FE99FE0019708 -:10076000F1F700C0000056C08F34D9F4D8018C9145 -:100770008F7B8C938C918F7D8C936BB98C918068DF -:100780008C9383ED90E00197F1F700C000008C910D -:100790008F778C938FE99FE00197F1F700C00000FD -:1007A00039C08F31D9F4D8018C918F7B8C938C9187 -:1007B0008F7D8C938BB88C9180688C9383ED90E0C7 -:1007C0000197F1F700C000008C918F778C938FE92F -:1007D0009FE00197F1F700C000001CC08F35D1F4F5 -:1007E000D8018C918F7B8C938C918F7D8C937BB86F -:1007F0008C9180688C9383ED90E00197F1F700C0B5 -:1008000000008C918F778C938FE99FE00197F1F72F -:1008100000C00000D8018C918F7B8C938C918062FA -:100820008C937BB98C9180688C9383ED90E00197D9 -:10083000F1F700C000008C918F778C93C0C18F3D81 -:1008400009F09EC0D8018C9180648C938C918F7D2F -:100850008C931BB81AB88C9180688C9383ED90E0D0 -:100860000197F1F700C000008C918F778C9389B1CC -:100870009AB88F30D1F48C918F7B8C938C918F7D33 -:100880008C934BB98C9180688C9383ED90E00197A9 -:10089000F1F700C000008C918F778C938FE99FE077 -:1008A0000197F1F700C0000056C08F34D9F4D80189 -:1008B0008C918F7B8C938C918F7D8C936BB98C9169 -:1008C00080688C9383ED90E00197F1F700C0000001 -:1008D0008C918F778C938FE99FE00197F1F700C09F -:1008E000000039C08F31D9F4D8018C918F7B8C9363 -:1008F0008C918F7D8C938BB88C9180688C9383EDD9 -:1009000090E00197F1F700C000008C918F778C93F5 -:100910008FE99FE00197F1F700C000001CC08F3500 -:10092000D1F4D8018C918F7B8C938C918F7D8C939B -:100930007BB88C9180688C9383ED90E00197F1F700 -:1009400000C000008C918F778C938FE99FE0019716 -:10095000F1F700C00000D8018C918F7B8C938C91B3 -:1009600080628C932BB98C9180688C9383ED90E09E -:100970000197F1F700C000008C918F778C931FC115 -:10098000D8019C9190649C939C919F7D9C931BB8F3 -:100990001AB89C9190689C93A3EDB0E01197F1F781 -:1009A00000C00000D8019C919F779C9399B19AB8A0 -:1009B0008A3009F079C0892F80558031D0F48C912C -:1009C0008F7B8C938C918F7D8C937BB88C9180687E -:1009D0008C9383ED90E00197F1F700C000008C91BB -:1009E0008F778C938FE99FE00197F1F700C00000AB -:1009F000E6C09031D8F4D8018C918F7B8C938C9188 -:100A00008F7D8C934BB98C9180688C9383ED90E0B3 -:100A10000197F1F700C000008C918F778C938FE9DC -:100A20009FE00197F1F700C00000C9C0892F8054F2 -:100A30008031D8F4D8018C918F7B8C938C918F7DF1 -:100A40008C936BB98C9180688C9383ED90E00197C7 -:100A5000F1F700C000008C918F778C938FE99FE0B5 -:100A60000197F1F700C00000AAC09051903108F042 -:100A7000A6C0D8018C918F7B8C938C918F7D8C93A9 -:100A80008BB88C9180688C9383ED90E00197F1F79F -:100A900000C000008C918F778C938FE99FE00197C5 -:100AA000F1F700C000008BC09F30E1F4D8019C91A9 -:100AB0009F7B9C939C919F7D9C934BB99C9190684C -:100AC0009C93A3EDB0E01197F1F700C00000D801AE -:100AD0009C919F779C93AFE9BFE01197F1F700C01D -:100AE000000059C09F34E1F4D8019C919F7B9C93F6 -:100AF0009C919F7D9C936BB99C9190689C93A3ED76 -:100B0000B0E01197F1F700C00000D8019C919F77E9 -:100B10009C93AFE9BFE01197F1F700C000003BC024 -:100B20009F31E1F4D8019C919F7B9C939C919F7D88 -:100B30009C938BB89C9190689C93A3EDB0E0119727 -:100B4000F1F700C00000D8019C919F779C93AFE91A -:100B5000BFE01197F1F700C000001DC09F35D9F428 -:100B6000D8019C919F7B9C939C919F7D9C937BB88B -:100B70009C9190689C93A3EDB0E01197F1F700C0B1 -:100B80000000D8019C919F779C93AFE9BFE011973B -:100B9000F1F700C00000D8019C919F7B9C939C9131 -:100BA00090629C938BB98C9180688C9383ED90E0DC -:100BB0000197F1F700C000008C918F778C938191A1 -:100BC00081115ACC1F926F9282E192E09F938F9392 -:100BD000DF92CF920E9424110F900F900F900F90F0 -:100BE0000F900F90E32DF42D60E940EC22EE75EFAD -:100BF0005FEE31EEA3C3843E09F09EC0D8018C9114 -:100C000080648C938C918F7D8C931BB81AB88C91D7 -:100C100080688C9383ED90E00197F1F700C00000AD -:100C20008C918F778C9389B19AB88F30D1F48C9155 -:100C30008F7B8C938C918F7D8C934BB98C9180683A -:100C40008C9383ED90E00197F1F700C000008C9148 -:100C50008F778C938FE99FE00197F1F700C0000038 -:100C600056C08F34D9F4D8018C918F7B8C938C91A2 -:100C70008F7D8C936BB98C9180688C9383ED90E021 -:100C80000197F1F700C000008C918F778C938FE96A -:100C90009FE00197F1F700C0000039C08F31D9F40F -:100CA000D8018C918F7B8C938C918F7D8C938BB89A -:100CB0008C9180688C9383ED90E00197F1F700C0F0 -:100CC00000008C918F778C938FE99FE00197F1F76B -:100CD00000C000001CC08F35D1F4D8018C918F7BEF -:100CE0008C938C918F7D8C937BB88C9180688C9346 -:100CF00083ED90E00197F1F700C000008C918F77B1 -:100D00008C938FE99FE00197F1F700C00000D801B4 -:100D10008C918F7B8C938C9180628C933BB98C915E -:100D200080688C9383ED90E00197F1F700C000009C -:100D30008C918F778C9302C3863F09F09EC0D801B7 -:100D40008C9180648C938C918F7D8C931BB81AB896 -:100D50008C9180688C9383ED90E00197F1F700C04F -:100D600000008C918F778C9389B19AB88F30D1F431 -:100D70008C918F7B8C938C918F7D8C934BB98C91C4 -:100D800080688C9383ED90E00197F1F700C000003C -:100D90008C918F778C938FE99FE00197F1F700C0DA -:100DA000000056C08F34D9F4D8018C918F7B8C937E -:100DB0008C918F7D8C936BB98C9180688C9383ED33 -:100DC00090E00197F1F700C000008C918F778C9331 -:100DD0008FE99FE00197F1F700C0000039C08F3123 -:100DE000D9F4D8018C918F7B8C938C918F7D8C93CF -:100DF0008BB88C9180688C9383ED90E00197F1F72C -:100E000000C000008C918F778C938FE99FE0019751 -:100E1000F1F700C000001CC08F35D1F4D8018C91CF -:100E20008F7B8C938C918F7D8C937BB88C91806819 -:100E30008C9383ED90E00197F1F700C000008C9156 -:100E40008F778C938FE99FE00197F1F700C0000046 -:100E5000D8018C918F7B8C938C9180628C935BB941 -:100E60008C9180688C9383ED90E00197F1F700C03E -:100E700000008C918F778C9361C28C3F09F09EC0EB -:100E8000D8018C9180648C938C918F7D8C931BB84E -:100E90001AB88C9180688C9383ED90E00197F1F7FC -:100EA00000C000008C918F778C9389B19AB88F30F5 -:100EB000D1F48C918F7B8C938C918F7D8C934BB9DB -:100EC0008C9180688C9383ED90E00197F1F700C0DE -:100ED00000008C918F778C938FE99FE00197F1F759 -:100EE00000C0000056C08F34D9F4D8018C918F7B9C -:100EF0008C938C918F7D8C936BB98C9180688C9343 -:100F000083ED90E00197F1F700C000008C918F779E -:100F10008C938FE99FE00197F1F700C0000039C082 -:100F20008F31D9F4D8018C918F7B8C938C918F7DEC -:100F30008C938BB88C9180688C9383ED90E00197B3 -:100F4000F1F700C000008C918F778C938FE99FE0C0 -:100F50000197F1F700C000001CC08F35D1F4D80113 -:100F60008C918F7B8C938C918F7D8C937BB88C91A3 -:100F700080688C9383ED90E00197F1F700C000004A -:100F80008C918F778C938FE99FE00197F1F700C0E8 -:100F90000000D8018C918F7B8C938C9180628C9314 -:100FA0007BB98C9180688C9383ED90E00197F1F789 -:100FB00000C000008C918F778C93C0C18F3D09F0E9 -:100FC0009EC0D8018C9180648C938C918F7D8C9382 -:100FD0001BB81AB88C9180688C9383ED90E00197D0 -:100FE000F1F700C000008C918F778C9389B19AB88B -:100FF0008F30D1F48C918F7B8C938C918F7D8C93DF -:101000004BB98C9180688C9383ED90E00197F1F758 -:1010100000C000008C918F778C938FE99FE001973F -:10102000F1F700C0000056C08F34D9F4D8018C917C -:101030008F7B8C938C918F7D8C936BB98C91806816 -:101040008C9383ED90E00197F1F700C000008C9144 -:101050008F778C938FE99FE00197F1F700C0000034 -:1010600039C08F31D9F4D8018C918F7B8C938C91BE -:101070008F7D8C938BB88C9180688C9383ED90E0FE -:101080000197F1F700C000008C918F778C938FE966 -:101090009FE00197F1F700C000001CC08F35D1F42C -:1010A000D8018C918F7B8C938C918F7D8C937BB8A6 -:1010B0008C9180688C9383ED90E00197F1F700C0EC -:1010C00000008C918F778C938FE99FE00197F1F767 -:1010D00000C00000D8018C918F7B8C938C91806232 -:1010E0008C932BB98C9180688C9383ED90E0019761 -:1010F000F1F700C000008C918F778C931FC1D8014D -:101100009C9190649C939C919F7D9C931BB81AB872 -:101110009C9190689C93A3EDB0E01197F1F700C00B -:101120000000D8019C919F779C9399B19AB88A301E -:1011300009F079C0892F80558031D0F48C918F7B54 -:101140008C938C918F7D8C937BB88C9180688C93E1 -:1011500083ED90E00197F1F700C000008C918F774C -:101160008C938FE99FE00197F1F700C00000E6C083 -:101170009031D8F4D8018C918F7B8C938C918F7D9A -:101180008C934BB98C9180688C9383ED90E00197A0 -:10119000F1F700C000008C918F778C938FE99FE06E -:1011A0000197F1F700C00000C9C0892F8054803139 -:1011B000D8F4D8018C918F7B8C938C918F7D8C93FC -:1011C0006BB98C9180688C9383ED90E00197F1F777 -:1011D00000C000008C918F778C938FE99FE001977E -:1011E000F1F700C00000AAC09051903108F0A6C0ED -:1011F000D8018C918F7B8C938C918F7D8C938BB845 -:101200008C9180688C9383ED90E00197F1F700C09A -:1012100000008C918F778C938FE99FE00197F1F715 -:1012200000C000008BC09F30E1F4D8019C919F7BEF -:101230009C939C919F7D9C934BB99C9190689C93AF -:10124000A3EDB0E01197F1F700C00000D8019C9128 -:101250009F779C93AFE9BFE01197F1F700C00000C2 -:1012600059C09F34E1F4D8019C919F7B9C939C9141 -:101270009F7D9C936BB99C9190689C93A3EDB0E08B -:101280001197F1F700C00000D8019C919F779C93C3 -:10129000AFE9BFE01197F1F700C000003BC09F31FC -:1012A000E1F4D8019C919F7B9C939C919F7D9C93A2 -:1012B0008BB89C9190689C93A3EDB0E01197F1F7E7 -:1012C00000C00000D8019C919F779C93AFE9BFE0DC -:1012D0001197F1F700C000001DC09F35D9F4D80167 -:1012E0009C919F7B9C939C919F7D9C937BB89C91B0 -:1012F00090689C93A3EDB0E01197F1F700C0000057 -:10130000D8019C919F779C93AFE9BFE01197F1F7CB -:1013100000C00000D8019C919F7B9C939C9190629F -:101320009C938BB98C9180688C9383ED90E00197AE -:10133000F1F700C000008C918F778C93819181111F -:101340005ACC1F9286E98F9389E192E09F938F9305 -:10135000FF92EF920E9424110F900F900F900F9028 -:101360000F900F90E52DFD8D60E940EC22EE75EFBA -:101370005FEE31EEA3C3843E09F09EC0D8018C918C -:1013800080648C938C918F7D8C931BB81AB88C9150 -:1013900080688C9383ED90E00197F1F700C0000026 -:1013A0008C918F778C9389B19AB88F30D1F48C91CE -:1013B0008F7B8C938C918F7D8C934BB98C918068B3 -:1013C0008C9383ED90E00197F1F700C000008C91C1 -:1013D0008F778C938FE99FE00197F1F700C00000B1 -:1013E00056C08F34D9F4D8018C918F7B8C938C911B -:1013F0008F7D8C936BB98C9180688C9383ED90E09A -:101400000197F1F700C000008C918F778C938FE9E2 -:101410009FE00197F1F700C0000039C08F31D9F487 -:10142000D8018C918F7B8C938C918F7D8C938BB812 -:101430008C9180688C9383ED90E00197F1F700C068 -:1014400000008C918F778C938FE99FE00197F1F7E3 -:1014500000C000001CC08F35D1F4D8018C918F7B67 -:101460008C938C918F7D8C937BB88C9180688C93BE -:1014700083ED90E00197F1F700C000008C918F7729 -:101480008C938FE99FE00197F1F700C00000D8012D -:101490008C918F7B8C938C9180628C933BB98C91D7 -:1014A00080688C9383ED90E00197F1F700C0000015 -:1014B0008C918F778C9302C3863F09F09EC0D80130 -:1014C0008C9180648C938C918F7D8C931BB81AB80F -:1014D0008C9180688C9383ED90E00197F1F700C0C8 -:1014E00000008C918F778C9389B19AB88F30D1F4AA -:1014F0008C918F7B8C938C918F7D8C934BB98C913D -:1015000080688C9383ED90E00197F1F700C00000B4 -:101510008C918F778C938FE99FE00197F1F700C052 -:10152000000056C08F34D9F4D8018C918F7B8C93F6 -:101530008C918F7D8C936BB98C9180688C9383EDAB -:1015400090E00197F1F700C000008C918F778C93A9 -:101550008FE99FE00197F1F700C0000039C08F319B -:10156000D9F4D8018C918F7B8C938C918F7D8C9347 -:101570008BB88C9180688C9383ED90E00197F1F7A4 -:1015800000C000008C918F778C938FE99FE00197CA -:10159000F1F700C000001CC08F35D1F4D8018C9148 -:1015A0008F7B8C938C918F7D8C937BB88C91806892 -:1015B0008C9383ED90E00197F1F700C000008C91CF -:1015C0008F778C938FE99FE00197F1F700C00000BF -:1015D000D8018C918F7B8C938C9180628C935BB9BA -:1015E0008C9180688C9383ED90E00197F1F700C0B7 -:1015F00000008C918F778C9361C28C3F09F09EC064 -:10160000D8018C9180648C938C918F7D8C931BB8C6 -:101610001AB88C9180688C9383ED90E00197F1F774 -:1016200000C000008C918F778C9389B19AB88F306D -:10163000D1F48C918F7B8C938C918F7D8C934BB953 -:101640008C9180688C9383ED90E00197F1F700C056 -:1016500000008C918F778C938FE99FE00197F1F7D1 -:1016600000C0000056C08F34D9F4D8018C918F7B14 -:101670008C938C918F7D8C936BB98C9180688C93BB -:1016800083ED90E00197F1F700C000008C918F7717 -:101690008C938FE99FE00197F1F700C0000039C0FB -:1016A0008F31D9F4D8018C918F7B8C938C918F7D65 -:1016B0008C938BB88C9180688C9383ED90E001972C -:1016C000F1F700C000008C918F778C938FE99FE039 -:1016D0000197F1F700C000001CC08F35D1F4D8018C -:1016E0008C918F7B8C938C918F7D8C937BB88C911C -:1016F00080688C9383ED90E00197F1F700C00000C3 -:101700008C918F778C938FE99FE00197F1F700C060 -:101710000000D8018C918F7B8C938C9180628C938C -:101720007BB98C9180688C9383ED90E00197F1F701 -:1017300000C000008C918F778C93C0C18F3D09F061 -:101740009EC0D8018C9180648C938C918F7D8C93FA -:101750001BB81AB88C9180688C9383ED90E0019748 -:10176000F1F700C000008C918F778C9389B19AB803 -:101770008F30D1F48C918F7B8C938C918F7D8C9357 -:101780004BB98C9180688C9383ED90E00197F1F7D1 -:1017900000C000008C918F778C938FE99FE00197B8 -:1017A000F1F700C0000056C08F34D9F4D8018C91F5 -:1017B0008F7B8C938C918F7D8C936BB98C9180688F -:1017C0008C9383ED90E00197F1F700C000008C91BD -:1017D0008F778C938FE99FE00197F1F700C00000AD -:1017E00039C08F31D9F4D8018C918F7B8C938C9137 -:1017F0008F7D8C938BB88C9180688C9383ED90E077 -:101800000197F1F700C000008C918F778C938FE9DE -:101810009FE00197F1F700C000001CC08F35D1F4A4 -:10182000D8018C918F7B8C938C918F7D8C937BB81E -:101830008C9180688C9383ED90E00197F1F700C064 -:1018400000008C918F778C938FE99FE00197F1F7DF -:1018500000C00000D8018C918F7B8C938C918062AA -:101860008C932BB98C9180688C9383ED90E00197D9 -:10187000F1F700C000008C918F778C931FC1D801C5 -:101880009C9190649C939C919F7D9C931BB81AB8EB -:101890009C9190689C93A3EDB0E01197F1F700C084 -:1018A0000000D8019C919F779C9399B19AB88A3097 -:1018B00009F079C0892F80558031D0F48C918F7BCD -:1018C0008C938C918F7D8C937BB88C9180688C935A -:1018D00083ED90E00197F1F700C000008C918F77C5 -:1018E0008C938FE99FE00197F1F700C00000E6C0FC -:1018F0009031D8F4D8018C918F7B8C938C918F7D13 -:101900008C934BB98C9180688C9383ED90E0019718 -:10191000F1F700C000008C918F778C938FE99FE0E6 -:101920000197F1F700C00000C9C0892F80548031B1 -:10193000D8F4D8018C918F7B8C938C918F7D8C9374 -:101940006BB98C9180688C9383ED90E00197F1F7EF -:1019500000C000008C918F778C938FE99FE00197F6 -:10196000F1F700C00000AAC09051903108F0A6C065 -:10197000D8018C918F7B8C938C918F7D8C938BB8BD -:101980008C9180688C9383ED90E00197F1F700C013 -:1019900000008C918F778C938FE99FE00197F1F78E -:1019A00000C000008BC09F30E1F4D8019C919F7B68 -:1019B0009C939C919F7D9C934BB99C9190689C9328 -:1019C000A3EDB0E01197F1F700C00000D8019C91A1 -:1019D0009F779C93AFE9BFE01197F1F700C000003B -:1019E00059C09F34E1F4D8019C919F7B9C939C91BA -:1019F0009F7D9C936BB99C9190689C93A3EDB0E004 -:101A00001197F1F700C00000D8019C919F779C933B -:101A1000AFE9BFE01197F1F700C000003BC09F3174 -:101A2000E1F4D8019C919F7B9C939C919F7D9C931A -:101A30008BB89C9190689C93A3EDB0E01197F1F75F -:101A400000C00000D8019C919F779C93AFE9BFE054 -:101A50001197F1F700C000001DC09F35D9F4D801DF -:101A60009C919F7B9C939C919F7D9C937BB89C9128 -:101A700090689C93A3EDB0E01197F1F700C00000CF -:101A8000D8019C919F779C93AFE9BFE01197F1F744 -:101A900000C00000D8019C919F7B9C939C91906218 -:101AA0009C938BB98C9180688C9383ED90E0019727 -:101AB000F1F700C000008C918F778C938191811198 -:101AC0005ACCE2E0F2E060E940EC22EE75EF5FEE26 -:101AD00031EEA3C3843E09F09EC0D8018C9180648E -:101AE0008C938C918F7D8C931BB81AB88C918068E5 -:101AF0008C9383ED90E00197F1F700C000008C918A -:101B00008F778C9389B19AB88F30D1F48C918F7B79 -:101B10008C938C918F7D8C934BB98C9180688C9336 -:101B200083ED90E00197F1F700C000008C918F7772 -:101B30008C938FE99FE00197F1F700C0000056C039 -:101B40008F34D9F4D8018C918F7B8C938C918F7DBD -:101B50008C936BB98C9180688C9383ED90E00197A6 -:101B6000F1F700C000008C918F778C938FE99FE094 -:101B70000197F1F700C0000039C08F31D9F4D801C6 -:101B80008C918F7B8C938C918F7D8C938BB88C9167 -:101B900080688C9383ED90E00197F1F700C000001E -:101BA0008C918F778C938FE99FE00197F1F700C0BC -:101BB00000001CC08F35D1F4D8018C918F7B8C93A1 -:101BC0008C918F7D8C937BB88C9180688C9383ED06 -:101BD00090E00197F1F700C000008C918F778C9313 -:101BE0008FE99FE00197F1F700C00000D8018C91C8 -:101BF0008F7B8C938C9180628C933BB98C918068A5 -:101C00008C9383ED90E00197F1F700C000008C9178 -:101C10008F778C9302C3863F09F09EC0D8018C91C8 -:101C200080648C938C918F7D8C931BB81AB88C91A7 -:101C300080688C9383ED90E00197F1F700C000007D -:101C40008C918F778C9389B19AB88F30D1F48C9125 -:101C50008F7B8C938C918F7D8C934BB98C9180680A -:101C60008C9383ED90E00197F1F700C000008C9118 -:101C70008F778C938FE99FE00197F1F700C0000008 -:101C800056C08F34D9F4D8018C918F7B8C938C9172 -:101C90008F7D8C936BB98C9180688C9383ED90E0F1 -:101CA0000197F1F700C000008C918F778C938FE93A -:101CB0009FE00197F1F700C0000039C08F31D9F4DF -:101CC000D8018C918F7B8C938C918F7D8C938BB86A -:101CD0008C9180688C9383ED90E00197F1F700C0C0 -:101CE00000008C918F778C938FE99FE00197F1F73B -:101CF00000C000001CC08F35D1F4D8018C918F7BBF -:101D00008C938C918F7D8C937BB88C9180688C9315 -:101D100083ED90E00197F1F700C000008C918F7780 -:101D20008C938FE99FE00197F1F700C00000D80184 -:101D30008C918F7B8C938C9180628C935BB98C910E -:101D400080688C9383ED90E00197F1F700C000006C -:101D50008C918F778C9361C28C3F09F09EC0D80123 -:101D60008C9180648C938C918F7D8C931BB81AB866 -:101D70008C9180688C9383ED90E00197F1F700C01F -:101D800000008C918F778C9389B19AB88F30D1F401 -:101D90008C918F7B8C938C918F7D8C934BB98C9194 -:101DA00080688C9383ED90E00197F1F700C000000C -:101DB0008C918F778C938FE99FE00197F1F700C0AA -:101DC000000056C08F34D9F4D8018C918F7B8C934E -:101DD0008C918F7D8C936BB98C9180688C9383ED03 -:101DE00090E00197F1F700C000008C918F778C9301 -:101DF0008FE99FE00197F1F700C0000039C08F31F3 -:101E0000D9F4D8018C918F7B8C938C918F7D8C939E -:101E10008BB88C9180688C9383ED90E00197F1F7FB -:101E200000C000008C918F778C938FE99FE0019721 -:101E3000F1F700C000001CC08F35D1F4D8018C919F -:101E40008F7B8C938C918F7D8C937BB88C918068E9 -:101E50008C9383ED90E00197F1F700C000008C9126 -:101E60008F778C938FE99FE00197F1F700C0000016 -:101E7000D8018C918F7B8C938C9180628C937BB9F1 -:101E80008C9180688C9383ED90E00197F1F700C00E -:101E900000008C918F778C93C0C18F3D09F09EC05C -:101EA000D8018C9180648C938C918F7D8C931BB81E -:101EB0001AB88C9180688C9383ED90E00197F1F7CC -:101EC00000C000008C918F778C9389B19AB88F30C5 -:101ED000D1F48C918F7B8C938C918F7D8C934BB9AB -:101EE0008C9180688C9383ED90E00197F1F700C0AE -:101EF00000008C918F778C938FE99FE00197F1F729 -:101F000000C0000056C08F34D9F4D8018C918F7B6B -:101F10008C938C918F7D8C936BB98C9180688C9312 -:101F200083ED90E00197F1F700C000008C918F776E -:101F30008C938FE99FE00197F1F700C0000039C052 -:101F40008F31D9F4D8018C918F7B8C938C918F7DBC -:101F50008C938BB88C9180688C9383ED90E0019783 -:101F6000F1F700C000008C918F778C938FE99FE090 -:101F70000197F1F700C000001CC08F35D1F4D801E3 -:101F80008C918F7B8C938C918F7D8C937BB88C9173 -:101F900080688C9383ED90E00197F1F700C000001A -:101FA0008C918F778C938FE99FE00197F1F700C0B8 -:101FB0000000D8018C918F7B8C938C9180628C93E4 -:101FC0002BB98C9180688C9383ED90E00197F1F7A9 -:101FD00000C000008C918F778C931FC1D8019C9119 -:101FE00090649C939C919F7D9C931BB81AB89C9184 -:101FF00090689C93A3EDB0E01197F1F700C000004A -:10200000D8019C919F779C9399B19AB88A3009F036 -:1020100079C0892F80558031D0F48C918F7B8C933F -:102020008C918F7D8C937BB88C9180688C9383EDA1 -:1020300090E00197F1F700C000008C918F778C93AE -:102040008FE99FE00197F1F700C00000E6C09031F2 -:10205000D8F4D8018C918F7B8C938C918F7D8C934D -:102060004BB98C9180688C9383ED90E00197F1F7E8 -:1020700000C000008C918F778C938FE99FE00197CF -:10208000F1F700C00000C9C0892F80548031D8F416 -:10209000D8018C918F7B8C938C918F7D8C936BB9B5 -:1020A0008C9180688C9383ED90E00197F1F700C0EC -:1020B00000008C918F778C938FE99FE00197F1F767 -:1020C00000C00000AAC09051903108F0A6C0D8010D -:1020D0008C918F7B8C938C918F7D8C938BB88C9112 -:1020E00080688C9383ED90E00197F1F700C00000C9 -:1020F0008C918F778C938FE99FE00197F1F700C067 -:1021000000008BC09F30E1F4D8019C919F7B9C9391 -:102110009C919F7D9C934BB99C9190689C93A3ED5F -:10212000B0E01197F1F700C00000D8019C919F77B3 -:102130009C93AFE9BFE01197F1F700C0000059C0D0 -:102140009F34E1F4D8019C919F7B9C939C919F7D4F -:102150009C936BB99C9190689C93A3EDB0E0119710 -:10216000F1F700C00000D8019C919F779C93AFE9E4 -:10217000BFE01197F1F700C000003BC09F31E1F4D0 -:10218000D8019C919F7B9C939C919F7D9C938BB845 -:102190009C9190689C93A3EDB0E01197F1F700C07B -:1021A0000000D8019C919F779C93AFE9BFE0119705 -:1021B000F1F700C000001DC09F35D9F4D8019C91F3 -:1021C0009F7B9C939C919F7D9C937BB89C919068F6 -:1021D0009C93A3EDB0E01197F1F700C00000D80187 -:1021E0009C919F779C93AFE9BFE01197F1F700C0F6 -:1021F0000000D8019C919F7B9C939C9190629C9342 -:102200008BB98C9180688C9383ED90E00197F1F706 -:1022100000C000008C918F778C93819181115ACCF2 -:10222000BFEFE3EDF0E3B150E040F040E1F700C074 -:1022300000000C94F50180E392E00E94A80008954C -:102240000790F691E02D19940F931F93CF93DF938E -:10225000CDB7DEB72E970FB6F894DEBF0FBECDBF59 -:102260000E891F8986E08C831A8309838FEF9FE78D -:102270009E838D83CE014A96AC01688D798DCE0107 -:1022800001960E945311EF81F885E00FF11F108233 -:102290002E960FB6F894DEBF0FBECDBFDF91CF9163 -:1022A0001F910F9108952F923F924F925F926F92DC -:1022B0007F928F929F92AF92BF92CF92DF92EF92D6 -:1022C000FF920F931F93CF93DF93CDB7DEB72C9779 -:1022D0000FB6F894DEBF0FBECDBF7C016B018A0143 -:1022E000FC0117821682838181FFC6C188248394F2 -:1022F000912C8C0E9D1EF7019381F60193FD859123 -:1023000093FF81916F01882309F4B2C1853239F4BA -:1023100093FD859193FF81916F01853229F4B70177 -:1023200090E00E946E13E7CF512C312C20E0203238 -:10233000A8F48B3261F028F4803251F0833271F4CA -:102340000BC08D3239F0803349F4216028C02260FF -:10235000246025C0286023C0206121C027FD27C03C -:10236000382F30533A3078F426FF06C0FAE05F9EEB -:10237000300D1124532E13C08AE0389E300D1124E5 -:10238000332E20620CC08E3221F426FD71C12064F0 -:1023900006C08C3611F4206802C0883641F4F6017C -:1023A00093FD859193FF81916F018111C0CF982F8B -:1023B0009554933018F09052933028F40C5F1F4FCF -:1023C000FFE3F9830DC0833631F0833771F0833535 -:1023D00009F05EC023C0F801808189830E5F1F4F22 -:1023E00044244394512C540115C03801F2E06F0E7F -:1023F000711CF801A080B18026FF03C0652D70E03C -:1024000002C06FEF7FEFC5012C870E9463132C0180 -:1024100083012C856FE7262E222218C03801F2E0B6 -:102420006F0E711CF801A080B18026FF03C0652DDE -:1024300070E002C06FEF7FEFC5012C870E94581338 -:102440002C012C8550E8252E222A830123FC1CC058 -:1024500006C0B70180E290E00E946E133A94832D8B -:1024600090E048165906A8F30FC0F50127FC8591A6 -:1024700027FE81915F01B70190E00E946E13311039 -:102480003A94F1E04F1A51084114510471F7EDC02C -:10249000843611F0893641F5F80127FF07C06081C5 -:1024A0007181828193810C5F1F4F08C060817181AF -:1024B000882777FD8095982F0E5F1F4F4FE6B42E2B -:1024C000B22297FF09C090958095709561957F4FD6 -:1024D0008F4F9F4FF0E8BF2A2AE030E0A4010E940E -:1024E0009A13A82EA81843C0853731F43FEEB32EB7 -:1024F000B2222AE030E024C099EFB92EB2228F3602 -:10250000B9F020F4883509F0B3C00DC0803721F050 -:10251000883709F0ADC002C020E1B22AB4FE0BC07A -:1025200084E0B82A08C024FF09C0E6E0BE2A06C03D -:1025300028E030E005C020E130E002C020E132E0D8 -:10254000F801B7FE07C060817181828193810C5FC1 -:102550001F4F06C06081718180E090E00E5F1F4FC9 -:10256000A4010E949A13A82EA818FFE7BF22B6FE66 -:102570000BC02B2D2E7FA51450F4B4FE0AC0B2FC64 -:1025800008C02B2D2E7E05C07A2C2B2D03C07A2C53 -:1025900001C0752C24FF0DC0FE01EA0DF11D8081E4 -:1025A000803311F4297E09C022FF06C0739473940E -:1025B00004C0822F867809F0739423FD14C020FF95 -:1025C0000FC05A2C731460F4530C5718732C08C0A6 -:1025D000B70180E290E02C870E946E1373942C85E3 -:1025E0007314B0F304C0731410F4371801C0312C05 -:1025F00024FF12C0B70180E390E02C870E946E1385 -:102600002C8522FF1EC021FF03C088E590E002C098 -:1026100088E790E0B7010CC0822F867891F021FD09 -:1026200002C080E201C08BE227FD8DE2B70190E09D -:102630000E946E1306C0B70180E390E00E946E1303 -:102640005A94A514C0F3AA94F401EA0DF11DB70140 -:10265000808190E00E946E13A110F5CF06C0B701F3 -:1026600080E290E00E946E133A943110F8CF43CE8E -:10267000F7012681378102C02FEF3FEFC9012C9669 -:102680000FB6F894DEBF0FBECDBFDF91CF911F9183 -:102690000F91FF90EF90DF90CF90BF90AF909F9001 -:1026A0008F907F906F905F904F903F902F90089504 -:1026B000FC010590615070400110D8F7809590950D -:1026C0008E0F9F1F0895FC01615070400190011012 -:1026D000D8F7809590958E0F9F1F08950F931F93A5 -:1026E000CF93DF938C01EB018B8181FD03C00FEF52 -:1026F0001FEF1AC082FF0DC02E813F818C819D810A -:102700002817390764F4E881F9810193F983E88394 -:1027100006C0E885F985802F1995892B41F78E81B0 -:102720009F8101969F838E83C801DF91CF911F9176 -:102730000F910895FA01AA27283051F1203181F133 -:10274000E8946F936E7F6E5F7F4F8F4F9F4FAF4FB9 -:10275000B1E03ED0B4E03CD0670F781F891F9A1FCC -:10276000A11D680F791F8A1F911DA11D6A0F711D80 -:10277000811D911DA11D20D009F468943F912AE08C -:10278000269F11243019305D3193DEF6CF01089574 -:10279000462F4770405D4193B3E00FD0C9F7F6CFA5 -:1027A000462F4F70405D4A3318F0495D31FD40526D -:1027B000419302D0A9F7EACFB4E0A6959795879503 -:1027C00077956795BA95C9F70097610571050895E2 -:1027D0009B01AC010A2E069457954795379527958E -:1027E000BA95C9F7620F731F841F951FA01D089526 -:0427F000F894FFCF8B -:1027F40020000A2048616C6C6F2048616E6E61682D -:10280400210030782530345800204C65640A20308B -:102814007825303258204B6F6E74726173740000E7 +:100130000109FE010BBF0E94F402C83ED10780E016 +:100140000807A9F70E94D0010C94CC050C9400007C +:10015000E5E0F1E08081806180830895EBE0F1E0EB +:10016000808180628083089598E087FF02C0A09A12 +:1001700001C0A098989AA19A999A880F00C000C0CF +:100180000000A198999A915081F70895CF93C82FB4 +:100190004098892F81700E94B4008C2F0E94B40077 +:1001A000409ACF910895382F98E080E02091050182 +:1001B00037FF02C0206401C02F7B20930501880F08 +:1001C0002091030123FD816020910501206220938D +:1001D0000501330F00C000C00000209105012F7DF4 +:1001E00020930501915011F70895EBE0F1E0808133 +:1001F0008068808383ED90E00197F1F700C00000F4 +:1002000080818F7780830895EBE0F1E090819F7B80 +:10021000908390819F7D90838BB90C94F50081E051 +:100220000E9404018FE39FE10197F1F700C00000F5 +:100230000895CF93C82F90910B01906490930B0178 +:1002400090910B019F7D90930B011BB81AB80E94EF +:10025000F50099B18FEF8AB9CA30E9F4892F80553A +:10026000803110F480E80EC0903110F480EC0AC0A8 +:10027000892F8054803110F480E904C0905190316E +:1002800060F580ED0E9404018FE99FE00197F1F78E +:1002900000C0000022C09F3011F480EC0BC09F34DE +:1002A00011F480E907C09F3111F480ED03C09F3540 +:1002B00049F480E80E9404018FE99FE00197F1F77B +:1002C00000C0000090910B019F7B90930B010E9456 +:1002D000AE00CBB9CF910C94F500CF9108950F9358 +:1002E0001F93CF93DF93CDB7DEB72A970FB6F8945D +:1002F000DEBF0FBECDBF9F938F9380E092E09F93B0 +:100300008F938E010F5F1F4F1F930F930E94F80270 +:100310000F900F900F900F900F900F9011C0843E90 +:1003200011F481EE0BC0863F11F48FEE07C08C3FB5 +:1003300011F485EF03C08F3D09F482EE0E9419018C +:10034000F80181918F018111EACF2A960FB6F894B6 +:10035000DEBF0FBECDBFDF91CF911F910F910895EA +:100360001F93CF93DF93182FC92FE5E0F1E0208191 +:100370002F7E20830E946F018C2F0E94D300D82FE4 +:1003800080E0C82F812F0E94D300C82B0E94A800B4 +:10039000CE010E946F01CE01DF91CF911F91089590 +:1003A00088EC92E80E94B00181E89AEC0E94B001CA +:1003B00083E89AEC0E94B001809105018F7E8093C2 +:1003C00005018091030186958695869591E08927A0 +:1003D000817090E00E946F012FEF39E582E692E094 +:1003E0002150304080409040D9F700C0000080E0AC +:1003F00091E00E94C600109228012FEF39E688E1B3 +:10040000215030408040E1F700C00000F6CF1F933C +:10041000CF93DF93A198999A409A389AA098989A86 +:10042000EAE0F1E080818860808381E880932001A8 +:1004300089E080932101C8E2D1E01882188280818E +:1004400080688083808180648083808180628083F3 +:100450001FEF1AB98FEF99EF0197F1F700C0000075 +:1004600088E30E9404018FE19EE40197F1F700C048 +:1004700000000E94F5008FED91E00197F1F700C0B8 +:1004800000000E94F5008FED91E00197F1F700C0A8 +:1004900000000E94F5008FED91E00197F1F700C098 +:1004A000000080E00E9404018FE39FE10197F1F7D3 +:1004B00000C000000E940F0184E00E9404019FEF31 +:1004C00021EE84E0915020408040E1F700C0000020 +:1004D0008CE00E9404018FE39FE10197F1F700C0D7 +:1004E00000000E940F0180E091E00E94C600188386 +:1004F000DF91CF911F9108952FEF81EE94E021506D +:1005000080409040E1F700C0000080E290EC0E9443 +:10051000B00187ED90E80E94B0018BEA92EC0E9456 +:10052000B00181E89AEC0E94B00180E090EE0E9458 +:10053000B00180E098EC0E94B0012FEF87EA91E6CD +:10054000215080409040E1F700C000000E940F0160 +:1005500087EF94EC0E94B00180E296EA0E94B0011D +:1005600087E294E90E94B00182E296EC0E94B00119 +:1005700080E698E90E94B0012FEF87EA91E62150CA +:1005800080409040E1F700C000000C940F010F93F1 +:100590001F93CF93DF9387E092E00E94070205E06C +:1005A00011E0F80180818F7B8083C4E0D1E08881F5 +:1005B0008064888380818F7D808388818062888346 +:1005C0000E94A8008881806188838881877F8883D2 +:1005D000F8018081877F808386E092E0DF91CF9170 +:1005E0001F910F910C947C020790F691E02D1994C5 +:1005F0000F931F93CF93DF93CDB7DEB72E970FB630 +:10060000F894DEBF0FBECDBF0E891F8986E08C83B4 +:100610001A8309838FEF9FE79E838D83CE014A96CD +:10062000AC01688D798DCE0101960E942703EF8180 +:10063000F885E00FF11F10822E960FB6F894DEBFFA +:100640000FBECDBFDF91CF911F910F9108952F92D3 +:100650003F924F925F926F927F928F929F92AF9252 +:10066000BF92CF92DF92EF92FF920F931F93CF939F +:10067000DF93CDB7DEB72C970FB6F894DEBF0FBE71 +:10068000CDBF7C016B018A01FC0117821682838138 +:1006900081FFC6C188248394912C8C0E9D1EF70186 +:1006A0009381F60193FD859193FF81916F018823DA +:1006B00009F4B2C1853239F493FD859193FF81919C +:1006C0006F01853229F4B70190E00E944205E7CF1F +:1006D000512C312C20E02032A8F48B3261F028F428 +:1006E000803251F0833271F40BC08D3239F0803397 +:1006F00049F4216028C02260246025C0286023C0FE +:10070000206121C027FD27C0382F30533A3078F4BC +:1007100026FF06C0FAE05F9E300D1124532E13C051 +:100720008AE0389E300D1124332E20620CC08E32A8 +:1007300021F426FD71C1206406C08C3611F42068B6 +:1007400002C0883641F4F60193FD859193FF8191B3 +:100750006F018111C0CF982F9554933018F09052AB +:10076000933028F40C5F1F4FFFE3F9830DC08336ED +:1007700031F0833771F0833509F05EC023C0F80192 +:10078000808189830E5F1F4F44244394512C540170 +:1007900015C03801F2E06F0E711CF801A080B18025 +:1007A00026FF03C0652D70E002C06FEF7FEFC5012B +:1007B0002C870E9437052C0183012C856FE7262E9C +:1007C000222218C03801F2E06F0E711CF801A080DF +:1007D000B18026FF03C0652D70E002C06FEF7FEF90 +:1007E000C5012C870E942C052C012C8550E8252E54 +:1007F000222A830123FC1CC006C0B70180E290E0DE +:100800000E9442053A94832D90E048165906A8F3B9 +:100810000FC0F50127FC859127FE81915F01B7018B +:1008200090E00E94420531103A94F1E04F1A5108CD +:100830004114510471F7EDC0843611F0893641F549 +:10084000F80127FF07C060817181828193810C5F6D +:100850001F4F08C060817181882777FD8095982F90 +:100860000E5F1F4F4FE6B42EB22297FF09C090953E +:100870008095709561957F4F8F4F9F4FF0E8BF2A0D +:100880002AE030E0A4010E946E05A82EA81843C0FB +:10089000853731F43FEEB32EB2222AE030E024C097 +:1008A00099EFB92EB2228F36B9F020F4883509F0CD +:1008B000B3C00DC0803721F0883709F0ADC002C049 +:1008C00020E1B22AB4FE0BC084E0B82A08C024FF9D +:1008D00009C0E6E0BE2A06C028E030E005C020E1FD +:1008E00030E002C020E132E0F801B7FE07C06081CD +:1008F0007181828193810C5F1F4F06C0608171817D +:1009000080E090E00E5F1F4FA4010E946E05A82EAC +:10091000A818FFE7BF22B6FE0BC02B2D2E7FA51413 +:1009200050F4B4FE0AC0B2FC08C02B2D2E7E05C0C8 +:100930007A2C2B2D03C07A2C01C0752C24FF0DC0FE +:10094000FE01EA0DF11D8081803311F4297E09C07A +:1009500022FF06C07394739404C0822F867809F036 +:10096000739423FD14C020FF0FC05A2C731460F43D +:10097000530C5718732C08C0B70180E290E02C8705 +:100980000E94420573942C857314B0F304C0731451 +:1009900010F4371801C0312C24FF12C0B70180E3D6 +:1009A00090E02C870E9442052C8522FF1EC021FF6B +:1009B00003C088E590E002C088E790E0B7010CC072 +:1009C000822F867891F021FD02C080E201C08BE287 +:1009D00027FD8DE2B70190E00E94420506C0B701F5 +:1009E00080E390E00E9442055A94A514C0F3AA94B3 +:1009F000F401EA0DF11DB701808190E00E944205EB +:100A0000A110F5CF06C0B70180E290E00E94420538 +:100A10003A943110F8CF43CEF7012681378102C0D6 +:100A20002FEF3FEFC9012C960FB6F894DEBF0FBE33 +:100A3000CDBFDF91CF911F910F91FF90EF90DF908D +:100A4000CF90BF90AF909F908F907F906F905F906E +:100A50004F903F902F900895FC0105906150704099 +:100A60000110D8F7809590958E0F9F1F0895FC0177 +:100A70006150704001900110D8F7809590958E0FCD +:100A80009F1F08950F931F93CF93DF938C01EB016A +:100A90008B8181FD03C00FEF1FEF1AC082FF0DC0D5 +:100AA0002E813F818C819D812817390764F4E8816C +:100AB000F9810193F983E88306C0E885F985802FE1 +:100AC0001995892B41F78E819F8101969F838E8393 +:100AD000C801DF91CF911F910F910895FA01AA27C4 +:100AE000283051F1203181F1E8946F936E7F6E5F71 +:100AF0007F4F8F4F9F4FAF4FB1E03ED0B4E03CD01F +:100B0000670F781F891F9A1FA11D680F791F8A1F01 +:100B1000911DA11D6A0F711D811D911DA11D20D068 +:100B200009F468943F912AE0269F11243019305D22 +:100B30003193DEF6CF010895462F4770405D419313 +:100B4000B3E00FD0C9F7F6CF462F4F70405D4A3360 +:100B500018F0495D31FD4052419302D0A9F7EACF28 +:100B6000B4E0A6959795879577956795BA95C9F757 +:100B700000976105710508959B01AC010A2E06944A +:100B80005795479537952795BA95C9F7620F731F03 +:0C0B9000841F951FA01D0895F894FFCF4E +:060B9C0025303458200052 :00000001FF diff --git a/V2/Programm/Programm/Debug/Programm.lss b/V2/Programm/Programm/Debug/Programm.lss index fe96689..0bbaae1 100644 --- a/V2/Programm/Programm/Debug/Programm.lss +++ b/V2/Programm/Programm/Debug/Programm.lss @@ -3,12960 +3,2249 @@ Programm.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000030 00800200 000027f4 00002888 2**0 + 0 .data 00000006 00800200 00000b9c 00000c30 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000027f4 00000000 00000000 00000094 2**1 + 1 .text 00000b9c 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000002 00800230 00800230 000028b8 2**0 + 2 .bss 00000003 00800206 00800206 00000c36 2**0 ALLOC - 3 .stab 00000c9c 00000000 00000000 000028b8 2**2 + 3 .stab 00000c9c 00000000 00000000 00000c38 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 000001aa 00000000 00000000 00003554 2**0 + 4 .stabstr 000001aa 00000000 00000000 000018d4 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 000036fe 2**0 + 5 .comment 0000002f 00000000 00000000 00001a7e 2**0 CONTENTS, READONLY - 6 .debug_aranges 000000a8 00000000 00000000 0000372d 2**0 + 6 .debug_aranges 000000f0 00000000 00000000 00001aad 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00017fac 00000000 00000000 000037d5 2**0 + 7 .debug_info 000046c9 00000000 00000000 00001b9d 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 0000080c 00000000 00000000 0001b781 2**0 + 8 .debug_abbrev 0000089d 00000000 00000000 00006266 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00002bc7 00000000 00000000 0001bf8d 2**0 + 9 .debug_line 00000d6b 00000000 00000000 00006b03 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000180 00000000 00000000 0001eb54 2**2 + 10 .debug_frame 00000260 00000000 00000000 00007870 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00001cb8 00000000 00000000 0001ecd4 2**0 + 11 .debug_str 000097d0 00000000 00000000 00007ad0 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 0000a922 00000000 00000000 0002098c 2**0 + 12 .debug_loc 00001071 00000000 00000000 000112a0 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000df8 00000000 00000000 0002b2ae 2**0 + 13 .debug_ranges 000001b8 00000000 00000000 00012311 2**0 + CONTENTS, READONLY, DEBUGGING + 14 .debug_macro 00002f76 00000000 00000000 000124c9 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: - 0: 0c 94 75 00 jmp 0xea ; 0xea <__ctors_end> - 4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 10: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 14: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 18: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 1c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 20: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 24: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 28: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 2c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 30: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 34: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 38: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 3c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 40: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 44: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 48: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 4c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 50: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 54: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 58: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 5c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 60: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 64: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 68: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 6c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 70: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 74: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 78: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 7c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 80: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 84: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 88: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 8c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 90: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 94: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 98: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - 9c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - a0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - a4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - a8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - ac: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - b0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - b4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - b8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - bc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - c0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - c4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - c8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - cc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - d0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - d4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - d8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - dc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> - e0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 0: 0c 94 75 00 jmp 0xea ; 0xea <__ctors_end> + 4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 10: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 14: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 18: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 1c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 20: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 24: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 28: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 2c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 30: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 34: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 38: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 3c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 40: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 44: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 48: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 4c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 50: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 54: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 58: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 5c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 60: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 64: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 68: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 6c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 70: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 74: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 78: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 7c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 80: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 84: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 88: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 8c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 90: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 94: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 98: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + 9c: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + a0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + a4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + a8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + ac: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + b0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + b4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + b8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + bc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + c0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + c4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + c8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + cc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + d0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + d4: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + d8: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + dc: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> + e0: 0c 94 a6 00 jmp 0x14c ; 0x14c <__bad_interrupt> 000000e4 <__trampolines_start>: - e4: 0c 94 1b 11 jmp 0x2236 ; 0x2236 <_GLOBAL__sub_I_d> + e4: 0c 94 c7 02 jmp 0x58e ; 0x58e <_GLOBAL__sub_I_d> 000000e8 <__ctors_start>: - e8: 1b 11 cpse r17, r11 + e8: c7 02 muls r28, r23 000000ea <__ctors_end>: - ea: 11 24 eor r1, r1 - ec: 1f be out 0x3f, r1 ; 63 - ee: cf ef ldi r28, 0xFF ; 255 - f0: d1 e2 ldi r29, 0x21 ; 33 - f2: de bf out 0x3e, r29 ; 62 - f4: cd bf out 0x3d, r28 ; 61 - f6: 00 e0 ldi r16, 0x00 ; 0 - f8: 0c bf out 0x3c, r16 ; 60 + ea: 11 24 eor r1, r1 + ec: 1f be out 0x3f, r1 ; 63 + ee: cf ef ldi r28, 0xFF ; 255 + f0: d1 e2 ldi r29, 0x21 ; 33 + f2: de bf out 0x3e, r29 ; 62 + f4: cd bf out 0x3d, r28 ; 61 + f6: 00 e0 ldi r16, 0x00 ; 0 + f8: 0c bf out 0x3c, r16 ; 60 000000fa <__do_copy_data>: - fa: 12 e0 ldi r17, 0x02 ; 2 - fc: a0 e0 ldi r26, 0x00 ; 0 - fe: b2 e0 ldi r27, 0x02 ; 2 - 100: e4 ef ldi r30, 0xF4 ; 244 - 102: f7 e2 ldi r31, 0x27 ; 39 - 104: 00 e0 ldi r16, 0x00 ; 0 - 106: 0b bf out 0x3b, r16 ; 59 - 108: 02 c0 rjmp .+4 ; 0x10e <__do_copy_data+0x14> - 10a: 07 90 elpm r0, Z+ - 10c: 0d 92 st X+, r0 - 10e: a0 33 cpi r26, 0x30 ; 48 - 110: b1 07 cpc r27, r17 - 112: d9 f7 brne .-10 ; 0x10a <__do_copy_data+0x10> + fa: 12 e0 ldi r17, 0x02 ; 2 + fc: a0 e0 ldi r26, 0x00 ; 0 + fe: b2 e0 ldi r27, 0x02 ; 2 + 100: ec e9 ldi r30, 0x9C ; 156 + 102: fb e0 ldi r31, 0x0B ; 11 + 104: 00 e0 ldi r16, 0x00 ; 0 + 106: 0b bf out 0x3b, r16 ; 59 + 108: 02 c0 rjmp .+4 ; 0x10e <__do_copy_data+0x14> + 10a: 07 90 elpm r0, Z+ + 10c: 0d 92 st X+, r0 + 10e: a6 30 cpi r26, 0x06 ; 6 + 110: b1 07 cpc r27, r17 + 112: d9 f7 brne .-10 ; 0x10a <__do_copy_data+0x10> 00000114 <__do_clear_bss>: - 114: 22 e0 ldi r18, 0x02 ; 2 - 116: a0 e3 ldi r26, 0x30 ; 48 - 118: b2 e0 ldi r27, 0x02 ; 2 - 11a: 01 c0 rjmp .+2 ; 0x11e <.do_clear_bss_start> + 114: 22 e0 ldi r18, 0x02 ; 2 + 116: a6 e0 ldi r26, 0x06 ; 6 + 118: b2 e0 ldi r27, 0x02 ; 2 + 11a: 01 c0 rjmp .+2 ; 0x11e <.do_clear_bss_start> 0000011c <.do_clear_bss_loop>: - 11c: 1d 92 st X+, r1 + 11c: 1d 92 st X+, r1 0000011e <.do_clear_bss_start>: - 11e: a2 33 cpi r26, 0x32 ; 50 - 120: b2 07 cpc r27, r18 - 122: e1 f7 brne .-8 ; 0x11c <.do_clear_bss_loop> + 11e: a9 30 cpi r26, 0x09 ; 9 + 120: b2 07 cpc r27, r18 + 122: e1 f7 brne .-8 ; 0x11c <.do_clear_bss_loop> 00000124 <__do_global_ctors>: - 124: 10 e0 ldi r17, 0x00 ; 0 - 126: ca ee ldi r28, 0xEA ; 234 - 128: d0 e0 ldi r29, 0x00 ; 0 - 12a: 00 e0 ldi r16, 0x00 ; 0 - 12c: 06 c0 rjmp .+12 ; 0x13a <__do_global_ctors+0x16> - 12e: 22 97 sbiw r28, 0x02 ; 2 - 130: 01 09 sbc r16, r1 - 132: fe 01 movw r30, r28 - 134: 0b bf out 0x3b, r16 ; 59 - 136: 0e 94 20 11 call 0x2240 ; 0x2240 <__tablejump_elpm__> - 13a: c8 3e cpi r28, 0xE8 ; 232 - 13c: d1 07 cpc r29, r17 - 13e: 80 e0 ldi r24, 0x00 ; 0 - 140: 08 07 cpc r16, r24 - 142: a9 f7 brne .-22 ; 0x12e <__do_global_ctors+0xa> - 144: 0e 94 c8 01 call 0x390 ; 0x390

- 148: 0c 94 f8 13 jmp 0x27f0 ; 0x27f0 <_exit> + 124: 10 e0 ldi r17, 0x00 ; 0 + 126: ca ee ldi r28, 0xEA ; 234 + 128: d0 e0 ldi r29, 0x00 ; 0 + 12a: 00 e0 ldi r16, 0x00 ; 0 + 12c: 06 c0 rjmp .+12 ; 0x13a <__do_global_ctors+0x16> + 12e: 22 97 sbiw r28, 0x02 ; 2 + 130: 01 09 sbc r16, r1 + 132: fe 01 movw r30, r28 + 134: 0b bf out 0x3b, r16 ; 59 + 136: 0e 94 f4 02 call 0x5e8 ; 0x5e8 <__tablejump_elpm__> + 13a: c8 3e cpi r28, 0xE8 ; 232 + 13c: d1 07 cpc r29, r17 + 13e: 80 e0 ldi r24, 0x00 ; 0 + 140: 08 07 cpc r16, r24 + 142: a9 f7 brne .-22 ; 0x12e <__do_global_ctors+0xa> + 144: 0e 94 d0 01 call 0x3a0 ; 0x3a0
+ 148: 0c 94 cc 05 jmp 0xb98 ; 0xb98 <_exit> 0000014c <__bad_interrupt>: - 14c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + 14c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -00000150 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev>: +00000150 <_ZN6avrlib3pinINS_5portjELh4EE3setEb.part.8>: + +namespace avrlib { + + struct portj + { + static uint8_t port() { return PORTJ; } + 150: e5 e0 ldi r30, 0x05 ; 5 + 152: f1 e0 ldi r31, 0x01 ; 1 + 154: 80 81 ld r24, Z + struct pin + { + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1<: + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 15c: eb e0 ldi r30, 0x0B ; 11 + 15e: f1 e0 ldi r31, 0x01 ; 1 + 160: 80 81 ld r24, Z + 162: 80 62 ori r24, 0x20 ; 32 + static void port(uint8_t v) { PORTL = v; } + 164: 80 83 st Z, r24 + 166: 08 95 ret + +00000168 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49>: + void init_port() { + sck::make_low(); //output und low; + cs::make_high(); //output und low; + sdi::make_low(); //output und low; + } + void send_soft(uint8_t data) { + 168: 98 e0 ldi r25, 0x08 ; 8 + for (uint8_t i=0; i<8; i++) + { + if (data & 0x80) { + 16a: 87 ff sbrs r24, 7 + 16c: 02 c0 rjmp .+4 ; 0x172 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49+0xa> namespace avrlib { struct portg { static uint8_t port() { return PORTG; } static void port(uint8_t v) { PORTG = v; } - 150: a1 98 cbi 0x14, 1 ; 20 + 16e: a0 9a sbi 0x14, 0 ; 20 + 170: 01 c0 rjmp .+2 ; 0x174 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49+0xc> + 172: a0 98 cbi 0x14, 0 ; 20 static uint8_t pin() { return PING; } static void pin(uint8_t v) { PING = v; } static uint8_t dir() { return DDRG; } static void dir(uint8_t v) { DDRG = v; } - 152: 99 9a sbi 0x13, 1 ; 19 + 174: 98 9a sbi 0x13, 0 ; 19 +namespace avrlib { + + struct portg + { + static uint8_t port() { return PORTG; } + static void port(uint8_t v) { PORTG = v; } + 176: a1 9a sbi 0x14, 1 ; 20 + + static uint8_t pin() { return PING; } + static void pin(uint8_t v) { PING = v; } + + static uint8_t dir() { return DDRG; } + static void dir(uint8_t v) { DDRG = v; } + 178: 99 9a sbi 0x13, 1 ; 19 + } + else { + sdi::make_low(); + } + sck::make_high(); + data<<=1; + 17a: 88 0f add r24, r24 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 17c: 00 c0 rjmp .+0 ; 0x17e <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49+0x16> + 17e: 00 c0 rjmp .+0 ; 0x180 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49+0x18> + 180: 00 00 nop +namespace avrlib { + + struct portg + { + static uint8_t port() { return PORTG; } + static void port(uint8_t v) { PORTG = v; } + 182: a1 98 cbi 0x14, 1 ; 20 + + static uint8_t pin() { return PING; } + static void pin(uint8_t v) { PING = v; } + + static uint8_t dir() { return DDRG; } + static void dir(uint8_t v) { DDRG = v; } + 184: 99 9a sbi 0x13, 1 ; 19 + 186: 91 50 subi r25, 0x01 ; 1 + sck::make_low(); //output und low; + cs::make_high(); //output und low; + sdi::make_low(); //output und low; + } + void send_soft(uint8_t data) { + for (uint8_t i=0; i<8; i++) + 188: 81 f7 brne .-32 ; 0x16a <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49+0x2> + sck::make_high(); + data<<=1; + _delay_us(0.3); + sck::make_low(); + } + } + 18a: 08 95 ret + +0000018c <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE15digitalPotWriteEj.isra.50>: + cs::clear(); + } + void CSOff() { + cs::set(); + } + void digitalPotWrite(uint16_t value) { + 18c: cf 93 push r28 + 18e: c8 2f mov r28, r24 namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - 154: 40 9a sbi 0x08, 0 ; 8 + 190: 40 98 cbi 0x08, 0 ; 8 + this->CSOn(); + this->send_soft((value>>8)&0b00000001); //high byte least significant bit + 192: 89 2f mov r24, r25 + 194: 81 70 andi r24, 0x01 ; 1 + 196: 0e 94 b4 00 call 0x168 ; 0x168 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49> + this->send_soft(value & 0xff); + 19a: 8c 2f mov r24, r28 + 19c: 0e 94 b4 00 call 0x168 ; 0x168 <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49> + 1a0: 40 9a sbi 0x08, 0 ; 8 + this->CSOff(); + } + 1a2: cf 91 pop r28 + 1a4: 08 95 ret - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } +000001a6 <_ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17>: + } + void init_spi() { + SPCR = (1< + 1b4: 20 64 ori r18, 0x40 ; 64 + 1b6: 01 c0 rjmp .+2 ; 0x1ba <_ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17+0x14> + else + Port::port(Port::port() & ~(1< + 1d6: 00 c0 rjmp .+0 ; 0x1d8 <_ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17+0x32> + 1d8: 00 00 nop + +namespace avrlib { + + struct portj + { + static uint8_t port() { return PORTJ; } + 1da: 20 91 05 01 lds r18, 0x0105 + else + Port::port(Port::port() & ~(1< + data<<=1; + _delay_us(0.3); + sck::clear(); + } + return datain; + } + 1e8: 08 95 ret + +000001ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5>: + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 1ea: eb e0 ldi r30, 0x0B ; 11 + 1ec: f1 e0 ldi r31, 0x01 ; 1 + 1ee: 80 81 ld r24, Z + struct pin + { + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1< + 1fc: 00 c0 rjmp .+0 ; 0x1fe <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5+0x14> + 1fe: 00 00 nop + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 200: 80 81 ld r24, Z + else + Port::port(Port::port() & ~(1<: + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 208: eb e0 ldi r30, 0x0B ; 11 + 20a: f1 e0 ldi r31, 0x01 ; 1 + 20c: 90 81 ld r25, Z + 20e: 9f 7b andi r25, 0xBF ; 191 + static void port(uint8_t v) { PORTL = v; } + 210: 90 83 st Z, r25 + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 212: 90 81 ld r25, Z + 214: 9f 7d andi r25, 0xDF ; 223 + static void port(uint8_t v) { PORTL = v; } + 216: 90 83 st Z, r25 +namespace avrlib { + + struct portd + { + static uint8_t port() { return PORTD; } + static void port(uint8_t v) { PORTD = v; } + 218: 8b b9 out 0x0b, r24 ; 11 + prs::set(); + } else { + prs::clear(); + } + PortData::port(data); + this->toggleE(); + 21a: 0c 94 f5 00 jmp 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> + +0000021e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30>: + this->setInstruction(0b00000000); + _delay_ms(2); + } + + void clear() { + this->setInstruction(0b00000001); + 21e: 81 e0 ldi r24, 0x01 ; 1 + 220: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 224: 8f e3 ldi r24, 0x3F ; 63 + 226: 9f e1 ldi r25, 0x1F ; 31 + 228: 01 97 sbiw r24, 0x01 ; 1 + 22a: f1 f7 brne .-4 ; 0x228 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30+0xa> + 22c: 00 c0 rjmp .+0 ; 0x22e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30+0x10> + 22e: 00 00 nop + 230: 08 95 ret + +00000232 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36>: + lputc(c); + } + } + } + + void lputc(uint8_t c) { + 232: cf 93 push r28 + 234: c8 2f mov r28, r24 + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 236: 90 91 0b 01 lds r25, 0x010B + struct pin + { + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1<toggleE(); + 24e: 0e 94 f5 00 call 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> + struct portd + { + static uint8_t port() { return PORTD; } + static void port(uint8_t v) { PORTD = v; } + + static uint8_t pin() { return PIND; } + 252: 99 b1 in r25, 0x09 ; 9 + static void pin(uint8_t v) { PIND = v; } + + static uint8_t dir() { return DDRD; } + static void dir(uint8_t v) { DDRD = v; } + 254: 8f ef ldi r24, 0xFF ; 255 + 256: 8a b9 out 0x0a, r24 ; 10 + } + } + + void lputc(uint8_t c) { + uint8_t pos = this->getAddress(); // read busy-flag and address counter + if (c == '\n') { + 258: ca 30 cpi r28, 0x0A ; 10 + 25a: e9 f4 brne .+58 ; 0x296 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x64> + _delay_us(53); + pen::clear(); + } + + void newline(uint8_t pos) { + if ( pos >= 0x50 && pos <= 0x5F ) { + 25c: 89 2f mov r24, r25 + 25e: 80 55 subi r24, 0x50 ; 80 + 260: 80 31 cpi r24, 0x10 ; 16 + 262: 10 f4 brcc .+4 ; 0x268 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x36> + return data; + } + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + 264: 80 e8 ldi r24, 0x80 ; 128 + 266: 0e c0 rjmp .+28 ; 0x284 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x52> + + void newline(uint8_t pos) { + if ( pos >= 0x50 && pos <= 0x5F ) { + return this->setLine(1); + } + if ( pos >= 0x00 && pos <= 0x0F) { + 268: 90 31 cpi r25, 0x10 ; 16 + 26a: 10 f4 brcc .+4 ; 0x270 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x3e> + } + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + 26c: 80 ec ldi r24, 0xC0 ; 192 + 26e: 0a c0 rjmp .+20 ; 0x284 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x52> + return this->setLine(1); + } + if ( pos >= 0x00 && pos <= 0x0F) { + return this->setLine(2); + } + if ( pos >= 0x40 && pos <= 0x4F) { + 270: 89 2f mov r24, r25 + 272: 80 54 subi r24, 0x40 ; 64 + 274: 80 31 cpi r24, 0x10 ; 16 + 276: 10 f4 brcc .+4 ; 0x27c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x4a> + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + case 3: this->setInstruction(0b10010000); break; //0x10-0x1F + 278: 80 e9 ldi r24, 0x90 ; 144 + 27a: 04 c0 rjmp .+8 ; 0x284 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x52> + return this->setLine(2); + } + if ( pos >= 0x40 && pos <= 0x4F) { + return this->setLine(3); + } + if ( pos >= 0x10 && pos <= 0x1F) { + 27c: 90 51 subi r25, 0x10 ; 16 + 27e: 90 31 cpi r25, 0x10 ; 16 + 280: 60 f5 brcc .+88 ; 0x2da <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0xa8> + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + case 3: this->setInstruction(0b10010000); break; //0x10-0x1F + case 4: this->setInstruction(0b11010000); break; //0x50-0x5F + 282: 80 ed ldi r24, 0xD0 ; 208 + 284: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + 288: 8f e9 ldi r24, 0x9F ; 159 + 28a: 9f e0 ldi r25, 0x0F ; 15 + 28c: 01 97 sbiw r24, 0x01 ; 1 + 28e: f1 f7 brne .-4 ; 0x28c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x5a> + 290: 00 c0 rjmp .+0 ; 0x292 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x60> + 292: 00 00 nop + 294: 22 c0 rjmp .+68 ; 0x2da <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0xa8> + void lputc(uint8_t c) { + uint8_t pos = this->getAddress(); // read busy-flag and address counter + if (c == '\n') { + this->newline(pos); + } else { + if ( pos == 0x0F ) { + 296: 9f 30 cpi r25, 0x0F ; 15 + 298: 11 f4 brne .+4 ; 0x29e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x6c> + } + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + 29a: 80 ec ldi r24, 0xC0 ; 192 + 29c: 0b c0 rjmp .+22 ; 0x2b4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x82> + if (c == '\n') { + this->newline(pos); + } else { + if ( pos == 0x0F ) { + this->setLine(2); + } else if ( pos == 0x4F ) { + 29e: 9f 34 cpi r25, 0x4F ; 79 + 2a0: 11 f4 brne .+4 ; 0x2a6 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x74> + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + case 3: this->setInstruction(0b10010000); break; //0x10-0x1F + 2a2: 80 e9 ldi r24, 0x90 ; 144 + 2a4: 07 c0 rjmp .+14 ; 0x2b4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x82> + } else { + if ( pos == 0x0F ) { + this->setLine(2); + } else if ( pos == 0x4F ) { + this->setLine(3); + } else if ( pos == 0x1F ) { + 2a6: 9f 31 cpi r25, 0x1F ; 31 + 2a8: 11 f4 brne .+4 ; 0x2ae <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x7c> + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + case 2: this->setInstruction(0b11000000); break; //0x40-0x4F + case 3: this->setInstruction(0b10010000); break; //0x10-0x1F + case 4: this->setInstruction(0b11010000); break; //0x50-0x5F + 2aa: 80 ed ldi r24, 0xD0 ; 208 + 2ac: 03 c0 rjmp .+6 ; 0x2b4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x82> + this->setLine(2); + } else if ( pos == 0x4F ) { + this->setLine(3); + } else if ( pos == 0x1F ) { + this->setLine(4); + } else if ( pos == 0x5F ) { + 2ae: 9f 35 cpi r25, 0x5F ; 95 + 2b0: 49 f4 brne .+18 ; 0x2c4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x92> + return data; + } + + void setLine(uint8_t l) { + switch(l) { + case 1: this->setInstruction(0b10000000); break; //0x00-0x0F + 2b2: 80 e8 ldi r24, 0x80 ; 128 + 2b4: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + 2b8: 8f e9 ldi r24, 0x9F ; 159 + 2ba: 9f e0 ldi r25, 0x0F ; 15 + 2bc: 01 97 sbiw r24, 0x01 ; 1 + 2be: f1 f7 brne .-4 ; 0x2bc <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x8a> + 2c0: 00 c0 rjmp .+0 ; 0x2c2 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36+0x90> + 2c2: 00 00 nop + +namespace avrlib { + + struct portl + { + static uint8_t port() { return PORTL; } + 2c4: 90 91 0b 01 lds r25, 0x010B + 2c8: 9f 7b andi r25, 0xBF ; 191 + static void port(uint8_t v) { PORTL = v; } + 2ca: 90 93 0b 01 sts 0x010B, r25 + 2ce: 0e 94 ae 00 call 0x15c ; 0x15c <_ZN6avrlib3pinINS_5portlELh5EE3setEb.part.14> +namespace avrlib { + + struct portd + { + static uint8_t port() { return PORTD; } + static void port(uint8_t v) { PORTD = v; } + 2d2: cb b9 out 0x0b, r28 ; 11 + } else if ( pos == 0x5F ) { + this->setLine(1); + } + this->setChar(c); + } + } + 2d4: cf 91 pop r28 + prs::set(); + } else { + prs::clear(); + } + PortData::port(data); + this->toggleE(); + 2d6: 0c 94 f5 00 jmp 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> + } else if ( pos == 0x5F ) { + this->setLine(1); + } + this->setChar(c); + } + } + 2da: cf 91 pop r28 + 2dc: 08 95 ret + +000002de <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38>: + void on() { + this->setInstruction(0b00001100); + _delay_ms(2); + } + + void printHex(uint16_t d) { + 2de: 0f 93 push r16 + 2e0: 1f 93 push r17 + 2e2: cf 93 push r28 + 2e4: df 93 push r29 + 2e6: cd b7 in r28, 0x3d ; 61 + 2e8: de b7 in r29, 0x3e ; 62 + 2ea: 2a 97 sbiw r28, 0x0a ; 10 + 2ec: 0f b6 in r0, 0x3f ; 63 + 2ee: f8 94 cli + 2f0: de bf out 0x3e, r29 ; 62 + 2f2: 0f be out 0x3f, r0 ; 63 + 2f4: cd bf out 0x3d, r28 ; 61 + char t[10]; + sprintf(t, "%04X ", d); + 2f6: 9f 93 push r25 + 2f8: 8f 93 push r24 + 2fa: 80 e0 ldi r24, 0x00 ; 0 + 2fc: 92 e0 ldi r25, 0x02 ; 2 + 2fe: 9f 93 push r25 + 300: 8f 93 push r24 + 302: 8e 01 movw r16, r28 + 304: 0f 5f subi r16, 0xFF ; 255 + 306: 1f 4f sbci r17, 0xFF ; 255 + 308: 1f 93 push r17 + 30a: 0f 93 push r16 + 30c: 0e 94 f8 02 call 0x5f0 ; 0x5f0 + 310: 0f 90 pop r0 + 312: 0f 90 pop r0 + 314: 0f 90 pop r0 + 316: 0f 90 pop r0 + 318: 0f 90 pop r0 + 31a: 0f 90 pop r0 + 31c: 11 c0 rjmp .+34 ; 0x340 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x62> + } + + void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ + register char c; + while ( (c = *s++) ) { + if(c == 0xE4) { //ä + 31e: 84 3e cpi r24, 0xE4 ; 228 + 320: 11 f4 brne .+4 ; 0x326 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x48> + lputc(0xE1); + 322: 81 ee ldi r24, 0xE1 ; 225 + 324: 0b c0 rjmp .+22 ; 0x33c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x5e> + } else if(c == 0xF6) { //ö + 326: 86 3f cpi r24, 0xF6 ; 246 + 328: 11 f4 brne .+4 ; 0x32e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x50> + lputc(0xEF); + 32a: 8f ee ldi r24, 0xEF ; 239 + 32c: 07 c0 rjmp .+14 ; 0x33c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x5e> + } else if(c == 0xFC) { //ü + 32e: 8c 3f cpi r24, 0xFC ; 252 + 330: 11 f4 brne .+4 ; 0x336 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x58> + lputc(0xF5); + 332: 85 ef ldi r24, 0xF5 ; 245 + 334: 03 c0 rjmp .+6 ; 0x33c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x5e> + } else if(c == 0xDF) { //ü + 336: 8f 3d cpi r24, 0xDF ; 223 + 338: 09 f4 brne .+2 ; 0x33c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x5e> + lputc(0xE2); + 33a: 82 ee ldi r24, 0xE2 ; 226 + } else { + lputc(c); + 33c: 0e 94 19 01 call 0x232 ; 0x232 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36> + this->lputs(t); + } + + void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ + register char c; + while ( (c = *s++) ) { + 340: f8 01 movw r30, r16 + 342: 81 91 ld r24, Z+ + 344: 8f 01 movw r16, r30 + 346: 81 11 cpse r24, r1 + 348: ea cf rjmp .-44 ; 0x31e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38+0x40> + + void printHex(uint16_t d) { + char t[10]; + sprintf(t, "%04X ", d); + this->lputs(t); + } + 34a: 2a 96 adiw r28, 0x0a ; 10 + 34c: 0f b6 in r0, 0x3f ; 63 + 34e: f8 94 cli + 350: de bf out 0x3e, r29 ; 62 + 352: 0f be out 0x3f, r0 ; 63 + 354: cd bf out 0x3d, r28 ; 61 + 356: df 91 pop r29 + 358: cf 91 pop r28 + 35a: 1f 91 pop r17 + 35c: 0f 91 pop r16 + 35e: 08 95 ret + +00000360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39>: + this->send(0x8208); // TX off + _delay_ms(100); + } + private: + Spi s; + uint16_t send(uint16_t wert) { + 360: 1f 93 push r17 + 362: cf 93 push r28 + 364: df 93 push r29 + 366: 18 2f mov r17, r24 + 368: c9 2f mov r28, r25 + +namespace avrlib { + + struct portj + { + static uint8_t port() { return PORTJ; } + 36a: e5 e0 ldi r30, 0x05 ; 5 + 36c: f1 e0 ldi r31, 0x01 ; 1 + 36e: 20 81 ld r18, Z + 370: 2f 7e andi r18, 0xEF ; 239 + static void port(uint8_t v) { PORTJ = v; } + 372: 20 83 st Z, r18 + s.CSOn(); + d.printHex(wert); + 374: 0e 94 6f 01 call 0x2de ; 0x2de <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38> + } + uint8_t send(uint8_t data) { + if(mode == 0) { + return this->send_hard(data); + } + return this->send_soft(data); + 378: 8c 2f mov r24, r28 + 37a: 0e 94 d3 00 call 0x1a6 ; 0x1a6 <_ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17> + uint16_t werti = s.send((uint8_t)(wert >> 8)) << 8; + 37e: d8 2f mov r29, r24 + 380: 80 e0 ldi r24, 0x00 ; 0 + 382: c8 2f mov r28, r24 + 384: 81 2f mov r24, r17 + 386: 0e 94 d3 00 call 0x1a6 ; 0x1a6 <_ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17> + werti |= s.send((uint8_t)wert); + 38a: c8 2b or r28, r24 + 38c: 0e 94 a8 00 call 0x150 ; 0x150 <_ZN6avrlib3pinINS_5portjELh4EE3setEb.part.8> + s.CSOff(); + d.printHex(werti); + 390: ce 01 movw r24, r28 + 392: 0e 94 6f 01 call 0x2de ; 0x2de <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38> + return werti; + } + 396: ce 01 movw r24, r28 + 398: df 91 pop r29 + 39a: cf 91 pop r28 + 39c: 1f 91 pop r17 + 39e: 08 95 ret + +000003a0
: + s.CSOn(); + while(s.has_data()); // wait until FIFO ready + } + + void beginasyncrx() { + this->send(0x82C8); // RX on + 3a0: 88 ec ldi r24, 0xC8 ; 200 + 3a2: 92 e8 ldi r25, 0x82 ; 130 + 3a4: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xCA81); // set FIFO mode + 3a8: 81 e8 ldi r24, 0x81 ; 129 + 3aa: 9a ec ldi r25, 0xCA ; 202 + 3ac: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xCA83); // enable FIFO + 3b0: 83 e8 ldi r24, 0x83 ; 131 + 3b2: 9a ec ldi r25, 0xCA ; 202 + 3b4: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + +namespace avrlib { + + struct portj + { + static uint8_t port() { return PORTJ; } + 3b8: 80 91 05 01 lds r24, 0x0105 + 3bc: 8f 7e andi r24, 0xEF ; 239 + static void port(uint8_t v) { PORTJ = v; } + 3be: 80 93 05 01 sts 0x0105, r24 + + static uint8_t pin() { return PINJ; } + 3c2: 80 91 03 01 lds r24, 0x0103 + } + uint8_t has_data() { + return !miso::read(); + 3c6: 86 95 lsr r24 + 3c8: 86 95 lsr r24 + 3ca: 86 95 lsr r24 + 3cc: 91 e0 ldi r25, 0x01 ; 1 + 3ce: 89 27 eor r24, r25 +#define MASTER 1 + +int main(void) +{ + r.beginasyncrx(); + d.printHex(r.hasdata()); + 3d0: 81 70 andi r24, 0x01 ; 1 + 3d2: 90 e0 ldi r25, 0x00 ; 0 + 3d4: 0e 94 6f 01 call 0x2de ; 0x2de <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38> + 3d8: 2f ef ldi r18, 0xFF ; 255 + 3da: 39 e5 ldi r19, 0x59 ; 89 + 3dc: 82 e6 ldi r24, 0x62 ; 98 + 3de: 92 e0 ldi r25, 0x02 ; 2 + 3e0: 21 50 subi r18, 0x01 ; 1 + 3e2: 30 40 sbci r19, 0x00 ; 0 + 3e4: 80 40 sbci r24, 0x00 ; 0 + 3e6: 90 40 sbci r25, 0x00 ; 0 + 3e8: d9 f7 brne .-10 ; 0x3e0 + 3ea: 00 c0 rjmp .+0 ; 0x3ec + 3ec: 00 00 nop + void setValue(uint8_t v) { + uint16_t wert = (uint16_t)( this->MIN + (((float)(this->MAX - this->MIN ) / 0xFF) * v)); + this->digitalPotWrite(wert); + 3ee: 80 e0 ldi r24, 0x00 ; 0 + 3f0: 91 e0 ldi r25, 0x01 ; 1 + 3f2: 0e 94 c6 00 call 0x18c ; 0x18c <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE15digitalPotWriteEj.isra.50> } void off() { this->setValue(0); } void setValue(uint8_t wert) { OCR5AL = wert; - 178: 1c 92 st X, r1 + 3f6: 10 92 28 01 sts 0x0128, r1 + 3fa: 2f ef ldi r18, 0xFF ; 255 + 3fc: 39 e6 ldi r19, 0x69 ; 105 + 3fe: 88 e1 ldi r24, 0x18 ; 24 + 400: 21 50 subi r18, 0x01 ; 1 + 402: 30 40 sbci r19, 0x00 ; 0 + 404: 80 40 sbci r24, 0x00 ; 0 + 406: e1 f7 brne .-8 ; 0x400 + 408: 00 c0 rjmp .+0 ; 0x40a + 40a: 00 00 nop + 40c: f6 cf rjmp .-20 ; 0x3fa + +0000040e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev>: +#include + +template +class Display { + public: + Display() { + 40e: 1f 93 push r17 + 410: cf 93 push r28 + 412: df 93 push r29 +namespace avrlib { + + struct portg + { + static uint8_t port() { return PORTG; } + static void port(uint8_t v) { PORTG = v; } + 414: a1 98 cbi 0x14, 1 ; 20 + + static uint8_t pin() { return PING; } + static void pin(uint8_t v) { PING = v; } + + static uint8_t dir() { return DDRG; } + static void dir(uint8_t v) { DDRG = v; } + 416: 99 9a sbi 0x13, 1 ; 19 + 418: 40 9a sbi 0x08, 0 ; 8 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 41a: 38 9a sbi 0x07, 0 ; 7 +namespace avrlib { + + struct portg + { + static uint8_t port() { return PORTG; } + static void port(uint8_t v) { PORTG = v; } + 41c: a0 98 cbi 0x14, 0 ; 20 + + static uint8_t pin() { return PING; } + static void pin(uint8_t v) { PING = v; } + + static uint8_t dir() { return DDRG; } + static void dir(uint8_t v) { DDRG = v; } + 41e: 98 9a sbi 0x13, 0 ; 19 + + static uint8_t pin() { return PINL; } + static void pin(uint8_t v) { PINL = v; } + + static uint8_t dir() { return DDRL; } + 420: ea e0 ldi r30, 0x0A ; 10 + 422: f1 e0 ldi r31, 0x01 ; 1 + 424: 80 81 ld r24, Z + static bool value() { return (Port::pin() & (1<setValue(0); + } + void setValue(uint8_t wert) { + OCR5AL = wert; + 43c: 18 82 st Y, r1 static void port(uint8_t v) { PORTL = v; } static uint8_t pin() { return PINL; } static void pin(uint8_t v) { PINL = v; } static uint8_t dir() { return DDRL; } - 17a: 80 81 ld r24, Z - 17c: 80 68 ori r24, 0x80 ; 128 + 43e: 80 81 ld r24, Z + 440: 80 68 ori r24, 0x80 ; 128 static void dir(uint8_t v) { DDRL = v; } - 17e: 80 83 st Z, r24 + 442: 80 83 st Z, r24 static void port(uint8_t v) { PORTL = v; } static uint8_t pin() { return PINL; } static void pin(uint8_t v) { PINL = v; } static uint8_t dir() { return DDRL; } - 180: 80 81 ld r24, Z - 182: 80 64 ori r24, 0x40 ; 64 + 444: 80 81 ld r24, Z + 446: 80 64 ori r24, 0x40 ; 64 static void dir(uint8_t v) { DDRL = v; } - 184: 80 83 st Z, r24 + 448: 80 83 st Z, r24 static void port(uint8_t v) { PORTL = v; } static uint8_t pin() { return PINL; } static void pin(uint8_t v) { PINL = v; } static uint8_t dir() { return DDRL; } - 186: 80 81 ld r24, Z - 188: 80 62 ori r24, 0x20 ; 32 + 44a: 80 81 ld r24, Z + 44c: 80 62 ori r24, 0x20 ; 32 static void dir(uint8_t v) { DDRL = v; } - 18a: 80 83 st Z, r24 + 44e: 80 83 st Z, r24 static uint8_t pin() { return PIND; } static void pin(uint8_t v) { PIND = v; } static uint8_t dir() { return DDRD; } static void dir(uint8_t v) { DDRD = v; } - 18c: 8f ef ldi r24, 0xFF ; 255 - 18e: 8a b9 out 0x0a, r24 ; 10 + 450: 1f ef ldi r17, 0xFF ; 255 + 452: 1a b9 out 0x0a, r17 ; 10 + 454: 8f ef ldi r24, 0xFF ; 255 + 456: 99 ef ldi r25, 0xF9 ; 249 + 458: 01 97 sbiw r24, 0x01 ; 1 + 45a: f1 f7 brne .-4 ; 0x458 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x4a> + 45c: 00 c0 rjmp .+0 ; 0x45e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x50> + 45e: 00 00 nop + const typedef avrlib::pin prw; + const typedef avrlib::pin prs; + + void init() { + _delay_ms(16); + this->setInstruction(0x38); + 460: 88 e3 ldi r24, 0x38 ; 56 + 462: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + 466: 8f e1 ldi r24, 0x1F ; 31 + 468: 9e e4 ldi r25, 0x4E ; 78 + 46a: 01 97 sbiw r24, 0x01 ; 1 + 46c: f1 f7 brne .-4 ; 0x46a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x5c> + 46e: 00 c0 rjmp .+0 ; 0x470 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x62> + 470: 00 00 nop + _delay_ms(5); + this->toggleE(); + 472: 0e 94 f5 00 call 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 190: 8f ef ldi r24, 0xFF ; 255 - 192: 99 ef ldi r25, 0xF9 ; 249 - 194: 01 97 sbiw r24, 0x01 ; 1 - 196: f1 f7 brne .-4 ; 0x194 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x44> - 198: 00 c0 rjmp .+0 ; 0x19a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x4a> - 19a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19c: eb e0 ldi r30, 0x0B ; 11 - 19e: f1 e0 ldi r31, 0x01 ; 1 - 1a0: 80 81 ld r24, Z - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1be: 00 c0 rjmp .+0 ; 0x1c0 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x70> - 1c0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c2: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 1d0: 00 c0 rjmp .+0 ; 0x1d2 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x82> - 1d2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d4: 80 81 ld r24, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1e2: 00 c0 rjmp .+0 ; 0x1e4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x94> - 1e4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e6: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 1f4: 00 c0 rjmp .+0 ; 0x1f6 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xa6> - 1f6: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f8: 80 81 ld r24, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 206: 00 c0 rjmp .+0 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xb8> - 208: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20a: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 218: 00 c0 rjmp .+0 ; 0x21a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xca> - 21a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21c: 80 81 ld r24, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 22a: 00 c0 rjmp .+0 ; 0x22c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xdc> - 22c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 22e: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 23c: 00 c0 rjmp .+0 ; 0x23e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xee> - 23e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 240: 80 81 ld r24, Z - 242: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 244: 80 83 st Z, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 246: 80 81 ld r24, Z - 248: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 24a: 80 83 st Z, r24 - 24c: 1b b8 out 0x0b, r1 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 24e: 80 81 ld r24, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 25c: 00 c0 rjmp .+0 ; 0x25e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x10e> - 25e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 260: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 26e: 00 c0 rjmp .+0 ; 0x270 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x120> - 270: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 272: 80 81 ld r24, Z - 274: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 276: 80 83 st Z, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 278: 80 81 ld r24, Z - 27a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 27c: 80 83 st Z, r24 - 27e: 81 e0 ldi r24, 0x01 ; 1 - 280: 8b b9 out 0x0b, r24 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 282: 90 81 ld r25, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 290: 00 c0 rjmp .+0 ; 0x292 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x142> - 292: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 294: 90 81 ld r25, Z - else - Port::port(Port::port() & ~(1< - 2a2: 00 c0 rjmp .+0 ; 0x2a4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x154> - 2a4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2a6: 90 81 ld r25, Z - 2a8: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 2aa: 90 83 st Z, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2ac: 90 81 ld r25, Z - 2ae: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 2b0: 90 83 st Z, r25 - 2b2: 94 e0 ldi r25, 0x04 ; 4 - 2b4: 9b b9 out 0x0b, r25 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2b6: 90 81 ld r25, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2c4: 00 c0 rjmp .+0 ; 0x2c6 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x176> - 2c6: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2c8: 90 81 ld r25, Z - else - Port::port(Port::port() & ~(1< - 2dc: 00 c0 rjmp .+0 ; 0x2de <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x18e> - 2de: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2e0: 90 81 ld r25, Z - 2e2: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 2e4: 90 83 st Z, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2e6: 90 81 ld r25, Z - 2e8: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 2ea: 90 83 st Z, r25 - 2ec: 9c e0 ldi r25, 0x0C ; 12 - 2ee: 9b b9 out 0x0b, r25 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2f0: 90 81 ld r25, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2fe: 00 c0 rjmp .+0 ; 0x300 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x1b0> - 300: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 302: 90 81 ld r25, Z - else - Port::port(Port::port() & ~(1< - 310: 00 c0 rjmp .+0 ; 0x312 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x1c2> - 312: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 314: 90 81 ld r25, Z - 316: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 318: 90 83 st Z, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 31a: 90 81 ld r25, Z - 31c: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 31e: 90 83 st Z, r25 - 320: 8b b9 out 0x0b, r24 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 322: 80 81 ld r24, Z - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 330: 00 c0 rjmp .+0 ; 0x332 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x1e2> - 332: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 334: 80 81 ld r24, Z - else - Port::port(Port::port() & ~(1< - 342: 00 c0 rjmp .+0 ; 0x344 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x1f4> - 344: 00 00 nop -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 346: 40 98 cbi 0x08, 0 ; 8 - 348: 98 e0 ldi r25, 0x08 ; 8 - 34a: 81 e0 ldi r24, 0x01 ; 1 - sdi::make_low(); //output und low; + 476: 8f ed ldi r24, 0xDF ; 223 + 478: 91 e0 ldi r25, 0x01 ; 1 + 47a: 01 97 sbiw r24, 0x01 ; 1 + 47c: f1 f7 brne .-4 ; 0x47a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x6c> + 47e: 00 c0 rjmp .+0 ; 0x480 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x72> + 480: 00 00 nop + _delay_us(120); + this->toggleE(); + 482: 0e 94 f5 00 call 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> + 486: 8f ed ldi r24, 0xDF ; 223 + 488: 91 e0 ldi r25, 0x01 ; 1 + 48a: 01 97 sbiw r24, 0x01 ; 1 + 48c: f1 f7 brne .-4 ; 0x48a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x7c> + 48e: 00 c0 rjmp .+0 ; 0x490 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x82> + 490: 00 00 nop + _delay_us(120); + this->toggleE(); + 492: 0e 94 f5 00 call 0x1ea ; 0x1ea <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5> + 496: 8f ed ldi r24, 0xDF ; 223 + 498: 91 e0 ldi r25, 0x01 ; 1 + 49a: 01 97 sbiw r24, 0x01 ; 1 + 49c: f1 f7 brne .-4 ; 0x49a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x8c> + 49e: 00 c0 rjmp .+0 ; 0x4a0 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x92> + 4a0: 00 00 nop + void setBacklight(uint8_t level) { + backlight.setValue(level); } - void send_soft(uint8_t data) { - for (uint8_t i=0; i<8; i++) - { - if (data & 0x80) { - 34c: 88 23 and r24, r24 - 34e: 1c f4 brge .+6 ; 0x356 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x206> -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 350: a0 9a sbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 352: 98 9a sbi 0x13, 0 ; 19 - 354: 02 c0 rjmp .+4 ; 0x35a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x20a> -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 356: a0 98 cbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 358: 98 9a sbi 0x13, 0 ; 19 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 35a: a1 9a sbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 35c: 99 9a sbi 0x13, 1 ; 19 - } - else { - sdi::make_low(); - } - sck::make_high(); - data<<=1; - 35e: 88 0f add r24, r24 + + void off() { + this->setInstruction(0b00000000); + 4a2: 80 e0 ldi r24, 0x00 ; 0 + 4a4: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 360: 00 c0 rjmp .+0 ; 0x362 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x212> - 362: 00 c0 rjmp .+0 ; 0x364 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x214> - 364: 00 00 nop -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 366: a1 98 cbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 368: 99 9a sbi 0x13, 1 ; 19 - 36a: 91 50 subi r25, 0x01 ; 1 - sck::make_low(); //output und low; - cs::make_high(); //output und low; - sdi::make_low(); //output und low; + 4a8: 8f e3 ldi r24, 0x3F ; 63 + 4aa: 9f e1 ldi r25, 0x1F ; 31 + 4ac: 01 97 sbiw r24, 0x01 ; 1 + 4ae: f1 f7 brne .-4 ; 0x4ac <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x9e> + 4b0: 00 c0 rjmp .+0 ; 0x4b2 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xa4> + 4b2: 00 00 nop + _delay_us(120); + this->toggleE(); + _delay_us(120); + + this->off(); + this->clear(); + 4b4: 0e 94 0f 01 call 0x21e ; 0x21e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30> + this->setContrastMax(); + this->setBacklightMax(); } - void send_soft(uint8_t data) { - for (uint8_t i=0; i<8; i++) - 36c: 79 f7 brne .-34 ; 0x34c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x1fc> - 36e: 88 e0 ldi r24, 0x08 ; 8 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 370: a0 98 cbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 372: 98 9a sbi 0x13, 0 ; 19 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 374: a1 9a sbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 376: 99 9a sbi 0x13, 1 ; 19 - 378: 00 c0 rjmp .+0 ; 0x37a <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x22a> - 37a: 00 c0 rjmp .+0 ; 0x37c <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x22c> - 37c: 00 00 nop -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 37e: a1 98 cbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 380: 99 9a sbi 0x13, 1 ; 19 - 382: 81 50 subi r24, 0x01 ; 1 - 384: a9 f7 brne .-22 ; 0x370 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0x220> - 386: 40 9a sbi 0x08, 0 ; 8 - 388: 8f ef ldi r24, 0xFF ; 255 - 38a: 80 93 28 01 sts 0x0128, r24 - 38e: 08 95 ret - -00000390
: -ledgruenclass gruen; -ledgelbclass gelb;*/ -displayclass d; - -int main(void) -{ - 390: cf 93 push r28 - 392: df 93 push r29 - 394: cd b7 in r28, 0x3d ; 61 - 396: de b7 in r29, 0x3e ; 62 - 398: 6d 97 sbiw r28, 0x1d ; 29 - 39a: 0f b6 in r0, 0x3f ; 63 - 39c: f8 94 cli - 39e: de bf out 0x3e, r29 ; 62 - 3a0: 0f be out 0x3f, r0 ; 63 - 3a2: cd bf out 0x3d, r28 ; 61 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 3a4: 0b e0 ldi r16, 0x0B ; 11 - 3a6: 11 e0 ldi r17, 0x01 ; 1 - 3a8: 0f 2e mov r0, r31 - 3aa: f8 e2 ldi r31, 0x28 ; 40 - 3ac: af 2e mov r10, r31 - 3ae: bb 24 eor r11, r11 - 3b0: b3 94 inc r11 - 3b2: f0 2d mov r31, r0 - 3b4: 0f 2e mov r0, r31 - 3b6: fa ef ldi r31, 0xFA ; 250 - 3b8: 6f 2e mov r6, r31 - 3ba: f0 2d mov r31, r0 - 3bc: 26 2c mov r2, r6 - - static uint8_t pin() { return PIND; } - static void pin(uint8_t v) { PIND = v; } - - static uint8_t dir() { return DDRD; } - static void dir(uint8_t v) { DDRD = v; } - 3be: 99 24 eor r9, r9 - 3c0: 9a 94 dec r9 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 3c2: 68 94 set - 3c4: 77 24 eor r7, r7 - 3c6: 77 f8 bld r7, 7 - 3c8: 0f 2e mov r0, r31 - 3ca: f0 ed ldi r31, 0xD0 ; 208 - 3cc: 8f 2e mov r8, r31 - 3ce: f0 2d mov r31, r0 + + void entrymode() { + this->setInstruction(0b00000100); + 4b8: 84 e0 ldi r24, 0x04 ; 4 + 4ba: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + 4be: 9f ef ldi r25, 0xFF ; 255 + 4c0: 21 ee ldi r18, 0xE1 ; 225 + 4c2: 84 e0 ldi r24, 0x04 ; 4 + 4c4: 91 50 subi r25, 0x01 ; 1 + 4c6: 20 40 sbci r18, 0x00 ; 0 + 4c8: 80 40 sbci r24, 0x00 ; 0 + 4ca: e1 f7 brne .-8 ; 0x4c4 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xb6> + 4cc: 00 c0 rjmp .+0 ; 0x4ce <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xc0> + 4ce: 00 00 nop + this->setInstruction(0b00000001); _delay_ms(2); } - void printHex(uint16_t d) { - char t[8]; - sprintf(t, "0x%04X", d); - 3d0: 6e 01 movw r12, r28 - 3d2: 25 e1 ldi r18, 0x15 ; 21 - 3d4: c2 0e add r12, r18 - 3d6: d1 1c adc r13, r1 - 3d8: 3c 2c mov r3, r12 - 3da: 4d 2c mov r4, r13 - d.clear(); - d.setBacklight(led); - d.setContrast(cont); - d.lputs(" "); - d.printHex(led); - sprintf(t, " Led\n 0x%02X Kontrast", cont); - 3dc: ee 24 eor r14, r14 - 3de: e3 94 inc r14 - 3e0: f1 2c mov r15, r1 - 3e2: ec 0e add r14, r28 - 3e4: fd 1e adc r15, r29 - 3e6: 5e 2c mov r5, r14 - 3e8: fd 8e std Y+29, r15 ; 0x1d - 3ea: d8 01 movw r26, r16 - 3ec: 8c 91 ld r24, X - 3ee: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 3f0: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 3f2: 8c 91 ld r24, X - 3f4: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 3f6: 8c 93 st X, r24 - 3f8: 81 e0 ldi r24, 0x01 ; 1 - 3fa: 8b b9 out 0x0b, r24 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 3fc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 40a: 00 c0 rjmp .+0 ; 0x40c - 40c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 40e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 41c: 00 c0 rjmp .+0 ; 0x41e - 41e: 00 00 nop - 420: d5 01 movw r26, r10 - 422: 2c 92 st X, r2 - 424: 40 98 cbi 0x08, 0 ; 8 - 426: 88 e0 ldi r24, 0x08 ; 8 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 428: a0 98 cbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 42a: 98 9a sbi 0x13, 0 ; 19 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 42c: a1 9a sbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 42e: 99 9a sbi 0x13, 1 ; 19 - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 430: 00 c0 rjmp .+0 ; 0x432 - 432: 00 c0 rjmp .+0 ; 0x434 - 434: 00 00 nop -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 436: a1 98 cbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 438: 99 9a sbi 0x13, 1 ; 19 - 43a: 81 50 subi r24, 0x01 ; 1 - 43c: a9 f7 brne .-22 ; 0x428 - 43e: 98 e0 ldi r25, 0x08 ; 8 - 440: 8d ee ldi r24, 0xED ; 237 - { - if (data & 0x80) { - 442: 88 23 and r24, r24 - 444: 1c f4 brge .+6 ; 0x44c -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 446: a0 9a sbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 448: 98 9a sbi 0x13, 0 ; 19 - 44a: 02 c0 rjmp .+4 ; 0x450 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 44c: a0 98 cbi 0x14, 0 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 44e: 98 9a sbi 0x13, 0 ; 19 -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 450: a1 9a sbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 452: 99 9a sbi 0x13, 1 ; 19 - } - else { - sdi::make_low(); - } - sck::make_high(); - data<<=1; - 454: 88 0f add r24, r24 - 456: 00 c0 rjmp .+0 ; 0x458 - 458: 00 c0 rjmp .+0 ; 0x45a - 45a: 00 00 nop -namespace avrlib { - - struct portg - { - static uint8_t port() { return PORTG; } - static void port(uint8_t v) { PORTG = v; } - 45c: a1 98 cbi 0x14, 1 ; 20 - - static uint8_t pin() { return PING; } - static void pin(uint8_t v) { PING = v; } - - static uint8_t dir() { return DDRG; } - static void dir(uint8_t v) { DDRG = v; } - 45e: 99 9a sbi 0x13, 1 ; 19 - 460: 91 50 subi r25, 0x01 ; 1 - sck::make_low(); //output und low; - cs::make_high(); //output und low; - sdi::make_low(); //output und low; + void on() { + this->setInstruction(0b00001100); + 4d0: 8c e0 ldi r24, 0x0C ; 12 + 4d2: 0e 94 04 01 call 0x208 ; 0x208 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26> + 4d6: 8f e3 ldi r24, 0x3F ; 63 + 4d8: 9f e1 ldi r25, 0x1F ; 31 + 4da: 01 97 sbiw r24, 0x01 ; 1 + 4dc: f1 f7 brne .-4 ; 0x4da <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xcc> + 4de: 00 c0 rjmp .+0 ; 0x4e0 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev+0xd2> + 4e0: 00 00 nop + this->clear(); + this->entrymode(); + + _delay_ms(100); + this->on(); + this->clear(); + 4e2: 0e 94 0f 01 call 0x21e ; 0x21e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30> } - void send_soft(uint8_t data) { - for (uint8_t i=0; i<8; i++) - 462: 79 f7 brne .-34 ; 0x442 - 464: 40 9a sbi 0x08, 0 ; 8 - 466: e0 e0 ldi r30, 0x00 ; 0 - 468: f2 e0 ldi r31, 0x02 ; 2 - 46a: 60 e9 ldi r22, 0x90 ; 144 - 46c: 40 ec ldi r20, 0xC0 ; 192 - 46e: 22 ee ldi r18, 0xE2 ; 226 - 470: 75 ef ldi r23, 0xF5 ; 245 - 472: 5f ee ldi r21, 0xEF ; 239 - 474: 31 ee ldi r19, 0xE1 ; 225 - 476: a3 c3 rjmp .+1862 ; 0xbbe + void on() { + this->digitalPotWrite(this->MAX); + 4e6: 80 e0 ldi r24, 0x00 ; 0 + 4e8: 91 e0 ldi r25, 0x01 ; 1 + 4ea: 0e 94 c6 00 call 0x18c ; 0x18c <_ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE15digitalPotWriteEj.isra.50> + 4ee: 18 83 st Y, r17 + pen::make_output(); + prw::make_output(); + prs::make_output(); + PortData::dir(0xFF); + this->init(); } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - 478: 84 3e cpi r24, 0xE4 ; 228 - 47a: 09 f0 breq .+2 ; 0x47e - 47c: 9e c0 rjmp .+316 ; 0x5ba - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 47e: d8 01 movw r26, r16 - 480: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 49e: 00 c0 rjmp .+0 ; 0x4a0 - 4a0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4a2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 4ac: 8f 30 cpi r24, 0x0F ; 15 - 4ae: d1 f4 brne .+52 ; 0x4e4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4b0: 8c 91 ld r24, X - 4b2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 4b4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4b6: 8c 91 ld r24, X - 4b8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 4ba: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 4bc: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4be: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 4cc: 00 c0 rjmp .+0 ; 0x4ce - 4ce: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4d0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 4de: 00 c0 rjmp .+0 ; 0x4e0 - 4e0: 00 00 nop - 4e2: 56 c0 rjmp .+172 ; 0x590 - this->setLine(2); - } else if ( pos == 0x4F ) { - 4e4: 8f 34 cpi r24, 0x4F ; 79 - 4e6: d9 f4 brne .+54 ; 0x51e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4e8: d8 01 movw r26, r16 - 4ea: 8c 91 ld r24, X - 4ec: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 4ee: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4f0: 8c 91 ld r24, X - 4f2: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 4f4: 8c 93 st X, r24 - 4f6: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 4f8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 506: 00 c0 rjmp .+0 ; 0x508 - 508: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 50a: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 518: 00 c0 rjmp .+0 ; 0x51a - 51a: 00 00 nop - 51c: 39 c0 rjmp .+114 ; 0x590 - this->setLine(3); - } else if ( pos == 0x1F ) { - 51e: 8f 31 cpi r24, 0x1F ; 31 - 520: d9 f4 brne .+54 ; 0x558 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 522: d8 01 movw r26, r16 - 524: 8c 91 ld r24, X - 526: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 528: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 52a: 8c 91 ld r24, X - 52c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 52e: 8c 93 st X, r24 - 530: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 532: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 540: 00 c0 rjmp .+0 ; 0x542 - 542: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 544: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 552: 00 c0 rjmp .+0 ; 0x554 - 554: 00 00 nop - 556: 1c c0 rjmp .+56 ; 0x590 - this->setLine(4); - } else if ( pos == 0x5F ) { - 558: 8f 35 cpi r24, 0x5F ; 95 - 55a: d1 f4 brne .+52 ; 0x590 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 55c: d8 01 movw r26, r16 - 55e: 8c 91 ld r24, X - 560: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 562: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 564: 8c 91 ld r24, X - 566: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 568: 8c 93 st X, r24 - 56a: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 56c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 57a: 00 c0 rjmp .+0 ; 0x57c - 57c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 57e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 58c: 00 c0 rjmp .+0 ; 0x58e - 58e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 590: d8 01 movw r26, r16 - 592: 8c 91 ld r24, X - 594: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 596: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 598: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 5ae: 00 c0 rjmp .+0 ; 0x5b0 - 5b0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 5b2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - 5ba: 86 3f cpi r24, 0xF6 ; 246 - 5bc: 09 f0 breq .+2 ; 0x5c0 - 5be: 9e c0 rjmp .+316 ; 0x6fc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 5c0: d8 01 movw r26, r16 - 5c2: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 5e0: 00 c0 rjmp .+0 ; 0x5e2 - 5e2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 5e4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 5ee: 8f 30 cpi r24, 0x0F ; 15 - 5f0: d1 f4 brne .+52 ; 0x626 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 5f2: 8c 91 ld r24, X - 5f4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 5f6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 5f8: 8c 91 ld r24, X - 5fa: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 5fc: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 5fe: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 600: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 60e: 00 c0 rjmp .+0 ; 0x610 - 610: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 612: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 620: 00 c0 rjmp .+0 ; 0x622 - 622: 00 00 nop - 624: 56 c0 rjmp .+172 ; 0x6d2 - this->setLine(2); - } else if ( pos == 0x4F ) { - 626: 8f 34 cpi r24, 0x4F ; 79 - 628: d9 f4 brne .+54 ; 0x660 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 62a: d8 01 movw r26, r16 - 62c: 8c 91 ld r24, X - 62e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 630: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 632: 8c 91 ld r24, X - 634: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 636: 8c 93 st X, r24 - 638: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 63a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 648: 00 c0 rjmp .+0 ; 0x64a - 64a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 64c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 65a: 00 c0 rjmp .+0 ; 0x65c - 65c: 00 00 nop - 65e: 39 c0 rjmp .+114 ; 0x6d2 - this->setLine(3); - } else if ( pos == 0x1F ) { - 660: 8f 31 cpi r24, 0x1F ; 31 - 662: d9 f4 brne .+54 ; 0x69a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 664: d8 01 movw r26, r16 - 666: 8c 91 ld r24, X - 668: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 66a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 66c: 8c 91 ld r24, X - 66e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 670: 8c 93 st X, r24 - 672: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 674: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 682: 00 c0 rjmp .+0 ; 0x684 - 684: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 686: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 694: 00 c0 rjmp .+0 ; 0x696 - 696: 00 00 nop - 698: 1c c0 rjmp .+56 ; 0x6d2 - this->setLine(4); - } else if ( pos == 0x5F ) { - 69a: 8f 35 cpi r24, 0x5F ; 95 - 69c: d1 f4 brne .+52 ; 0x6d2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 69e: d8 01 movw r26, r16 - 6a0: 8c 91 ld r24, X - 6a2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 6a4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6a6: 8c 91 ld r24, X - 6a8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 6aa: 8c 93 st X, r24 - 6ac: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6ae: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 6bc: 00 c0 rjmp .+0 ; 0x6be - 6be: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6c0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 6ce: 00 c0 rjmp .+0 ; 0x6d0 - 6d0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6d2: d8 01 movw r26, r16 - 6d4: 8c 91 ld r24, X - 6d6: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 6d8: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6da: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 6f0: 00 c0 rjmp .+0 ; 0x6f2 - 6f2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 6f4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - 6fc: 8c 3f cpi r24, 0xFC ; 252 - 6fe: 09 f0 breq .+2 ; 0x702 - 700: 9e c0 rjmp .+316 ; 0x83e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 702: d8 01 movw r26, r16 - 704: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 722: 00 c0 rjmp .+0 ; 0x724 - 724: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 726: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 730: 8f 30 cpi r24, 0x0F ; 15 - 732: d1 f4 brne .+52 ; 0x768 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 734: 8c 91 ld r24, X - 736: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 738: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 73a: 8c 91 ld r24, X - 73c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 73e: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 740: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 742: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 750: 00 c0 rjmp .+0 ; 0x752 - 752: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 754: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 762: 00 c0 rjmp .+0 ; 0x764 - 764: 00 00 nop - 766: 56 c0 rjmp .+172 ; 0x814 - this->setLine(2); - } else if ( pos == 0x4F ) { - 768: 8f 34 cpi r24, 0x4F ; 79 - 76a: d9 f4 brne .+54 ; 0x7a2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 76c: d8 01 movw r26, r16 - 76e: 8c 91 ld r24, X - 770: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 772: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 774: 8c 91 ld r24, X - 776: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 778: 8c 93 st X, r24 - 77a: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 77c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 78a: 00 c0 rjmp .+0 ; 0x78c - 78c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 78e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 79c: 00 c0 rjmp .+0 ; 0x79e - 79e: 00 00 nop - 7a0: 39 c0 rjmp .+114 ; 0x814 - this->setLine(3); - } else if ( pos == 0x1F ) { - 7a2: 8f 31 cpi r24, 0x1F ; 31 - 7a4: d9 f4 brne .+54 ; 0x7dc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7a6: d8 01 movw r26, r16 - 7a8: 8c 91 ld r24, X - 7aa: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 7ac: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7ae: 8c 91 ld r24, X - 7b0: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 7b2: 8c 93 st X, r24 - 7b4: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7b6: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 7c4: 00 c0 rjmp .+0 ; 0x7c6 - 7c6: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7c8: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 7d6: 00 c0 rjmp .+0 ; 0x7d8 - 7d8: 00 00 nop - 7da: 1c c0 rjmp .+56 ; 0x814 - this->setLine(4); - } else if ( pos == 0x5F ) { - 7dc: 8f 35 cpi r24, 0x5F ; 95 - 7de: d1 f4 brne .+52 ; 0x814 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7e0: d8 01 movw r26, r16 - 7e2: 8c 91 ld r24, X - 7e4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 7e6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7e8: 8c 91 ld r24, X - 7ea: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 7ec: 8c 93 st X, r24 - 7ee: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 7f0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 7fe: 00 c0 rjmp .+0 ; 0x800 - 800: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 802: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 810: 00 c0 rjmp .+0 ; 0x812 - 812: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 814: d8 01 movw r26, r16 - 816: 8c 91 ld r24, X - 818: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 81a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 81c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 832: 00 c0 rjmp .+0 ; 0x834 - 834: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 836: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - lputc(0xF5); - } else if(c == 0xDF) { //ü - 83e: 8f 3d cpi r24, 0xDF ; 223 - 840: 09 f0 breq .+2 ; 0x844 - 842: 9e c0 rjmp .+316 ; 0x980 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 844: d8 01 movw r26, r16 - 846: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 864: 00 c0 rjmp .+0 ; 0x866 - 866: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 868: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 872: 8f 30 cpi r24, 0x0F ; 15 - 874: d1 f4 brne .+52 ; 0x8aa - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 876: 8c 91 ld r24, X - 878: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 87a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 87c: 8c 91 ld r24, X - 87e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 880: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 882: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 884: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 892: 00 c0 rjmp .+0 ; 0x894 - 894: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 896: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 8a4: 00 c0 rjmp .+0 ; 0x8a6 - 8a6: 00 00 nop - 8a8: 56 c0 rjmp .+172 ; 0x956 - this->setLine(2); - } else if ( pos == 0x4F ) { - 8aa: 8f 34 cpi r24, 0x4F ; 79 - 8ac: d9 f4 brne .+54 ; 0x8e4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8ae: d8 01 movw r26, r16 - 8b0: 8c 91 ld r24, X - 8b2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 8b4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8b6: 8c 91 ld r24, X - 8b8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 8ba: 8c 93 st X, r24 - 8bc: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8be: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 8cc: 00 c0 rjmp .+0 ; 0x8ce - 8ce: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8d0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 8de: 00 c0 rjmp .+0 ; 0x8e0 - 8e0: 00 00 nop - 8e2: 39 c0 rjmp .+114 ; 0x956 - this->setLine(3); - } else if ( pos == 0x1F ) { - 8e4: 8f 31 cpi r24, 0x1F ; 31 - 8e6: d9 f4 brne .+54 ; 0x91e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8e8: d8 01 movw r26, r16 - 8ea: 8c 91 ld r24, X - 8ec: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 8ee: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8f0: 8c 91 ld r24, X - 8f2: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 8f4: 8c 93 st X, r24 - 8f6: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 8f8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 906: 00 c0 rjmp .+0 ; 0x908 - 908: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 90a: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 918: 00 c0 rjmp .+0 ; 0x91a - 91a: 00 00 nop - 91c: 1c c0 rjmp .+56 ; 0x956 - this->setLine(4); - } else if ( pos == 0x5F ) { - 91e: 8f 35 cpi r24, 0x5F ; 95 - 920: d1 f4 brne .+52 ; 0x956 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 922: d8 01 movw r26, r16 - 924: 8c 91 ld r24, X - 926: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 928: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 92a: 8c 91 ld r24, X - 92c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 92e: 8c 93 st X, r24 - 930: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 932: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 940: 00 c0 rjmp .+0 ; 0x942 - 942: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 944: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 952: 00 c0 rjmp .+0 ; 0x954 - 954: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 956: d8 01 movw r26, r16 - 958: 8c 91 ld r24, X - 95a: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 95c: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 95e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 974: 00 c0 rjmp .+0 ; 0x976 - 976: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 978: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 980: d8 01 movw r26, r16 - 982: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 9a0: 00 c0 rjmp .+0 ; 0x9a2 - 9a2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9a4: d8 01 movw r26, r16 - 9a6: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1<: + 4f8: 2f ef ldi r18, 0xFF ; 255 + 4fa: 81 ee ldi r24, 0xE1 ; 225 + 4fc: 94 e0 ldi r25, 0x04 ; 4 + 4fe: 21 50 subi r18, 0x01 ; 1 + 500: 80 40 sbci r24, 0x00 ; 0 + 502: 90 40 sbci r25, 0x00 ; 0 + 504: e1 f7 brne .-8 ; 0x4fe <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x6> + 506: 00 c0 rjmp .+0 ; 0x508 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x10> + 508: 00 00 nop + return werti; + } + void init(void) { + _delay_ms(100); + + this->send(0xC020); // AVR CLK: 10MHz + 50a: 80 e2 ldi r24, 0x20 ; 32 + 50c: 90 ec ldi r25, 0xC0 ; 192 + 50e: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0x80D7); // Enable FIFO + 512: 87 ed ldi r24, 0xD7 ; 215 + 514: 90 e8 ldi r25, 0x80 ; 128 + 516: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xC2AB); // Data Filter: internal + 51a: 8b ea ldi r24, 0xAB ; 171 + 51c: 92 ec ldi r25, 0xC2 ; 194 + 51e: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xCA81); // Set FIFO mode + 522: 81 e8 ldi r24, 0x81 ; 129 + 524: 9a ec ldi r25, 0xCA ; 202 + 526: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xE000); // disable wakeuptimer + 52a: 80 e0 ldi r24, 0x00 ; 0 + 52c: 90 ee ldi r25, 0xE0 ; 224 + 52e: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->send(0xC800); // disable low duty cycle + 532: 80 e0 ldi r24, 0x00 ; 0 + 534: 98 ec ldi r25, 0xC8 ; 200 + 536: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + 53a: 2f ef ldi r18, 0xFF ; 255 + 53c: 87 ea ldi r24, 0xA7 ; 167 + 53e: 91 e6 ldi r25, 0x61 ; 97 + 540: 21 50 subi r18, 0x01 ; 1 + 542: 80 40 sbci r24, 0x00 ; 0 + 544: 90 40 sbci r25, 0x00 ; 0 + 546: e1 f7 brne .-8 ; 0x540 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x48> + 548: 00 c0 rjmp .+0 ; 0x54a <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x52> + 54a: 00 00 nop + _delay_ms(2000); + d.clear(); + 54c: 0e 94 0f 01 call 0x21e ; 0x21e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30> + this->send(0xC4F7); // AFC settings: autotuning: -10kHz...+7,5kHz + 550: 87 ef ldi r24, 0xF7 ; 247 + 552: 94 ec ldi r25, 0xC4 ; 196 + 554: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + if( freq < 96 ) { // 430,2400MHz + this->send( 0xA000 | 96 ); + } else if( freq > 3903 ) { // 439,7575MHz + this->send( 0xA000 | 3903 ); + } + this->send( 0xA000 | freq ); + 558: 80 e2 ldi r24, 0x20 ; 32 + 55a: 96 ea ldi r25, 0xA6 ; 166 + 55c: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + this->setpower(); // 1mW Ausgangsleistung, 120kHz Frequenzshift + _delay_ms(2000); + d.clear(); + } + void setbandwidth() { + this->send( 0x9400 | ( ( bandwidth & 7 ) << 5 ) | ( ( gain & 3 ) << 3 ) | ( drssi & 7 ) ); + 560: 87 e2 ldi r24, 0x27 ; 39 + 562: 94 e9 ldi r25, 0x94 ; 148 + 564: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + return; + } + if (baud < 5400) { // Baudrate= 344827,58621/(R+1)/(1+CS*7) + this->send(0xC680 | ( ( 43104 / baud ) - 1 ) ); + } else { + this->send(0xC600 | ( ( 344828UL / baud ) - 1 ) ); + 568: 82 e2 ldi r24, 0x22 ; 34 + 56a: 96 ec ldi r25, 0xC6 ; 198 + 56c: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> } } - - void lputc(uint8_t c) { - uint8_t pos = this->getAddress(); // read busy-flag and address counter - if (c == '\n') { - 9b0: 8a 30 cpi r24, 0x0A ; 10 - 9b2: 09 f0 breq .+2 ; 0x9b6 - 9b4: 79 c0 rjmp .+242 ; 0xaa8 - _delay_us(53); - pen::clear(); - } - - void newline(uint8_t pos) { - if ( pos >= 0x50 && pos <= 0x5F ) { - 9b6: 89 2f mov r24, r25 - 9b8: 80 55 subi r24, 0x50 ; 80 - 9ba: 80 31 cpi r24, 0x10 ; 16 - 9bc: d0 f4 brcc .+52 ; 0x9f2 + void setpower() { + this->send( 0x9800 | ( power & 7 ) | ( ( mod & 15 ) << 4 ) ); + 570: 80 e6 ldi r24, 0x60 ; 96 + 572: 98 e9 ldi r25, 0x98 ; 152 + 574: 0e 94 b0 01 call 0x360 ; 0x360 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39> + 578: 2f ef ldi r18, 0xFF ; 255 + 57a: 87 ea ldi r24, 0xA7 ; 167 + 57c: 91 e6 ldi r25, 0x61 ; 97 + 57e: 21 50 subi r18, 0x01 ; 1 + 580: 80 40 sbci r24, 0x00 ; 0 + 582: 90 40 sbci r25, 0x00 ; 0 + 584: e1 f7 brne .-8 ; 0x57e <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x86> + 586: 00 c0 rjmp .+0 ; 0x588 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv+0x90> + 588: 00 00 nop + this->setfreq(); // Sende/Empfangsfrequenz auf 433,92MHz einstellen + this->setbandwidth(); // 400kHz Bandbreite, 0dB Verstärkung, DRSSI threshold: -61dBm + this->setbaud(); // 19200 baud + this->setpower(); // 1mW Ausgangsleistung, 120kHz Frequenzshift + _delay_ms(2000); + d.clear(); + 58a: 0c 94 0f 01 jmp 0x21e ; 0x21e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30> + +0000058e <_GLOBAL__sub_I_d>: + uint8_t addr = r.rxbyte(); + d.printHex(addr); + d.lputs(" Addr");*/ + _delay_ms(500); + } + 58e: 0f 93 push r16 + 590: 1f 93 push r17 + 592: cf 93 push r28 + 594: df 93 push r29 + PINL7, + PINL6, + PINL5 +> displayclass; -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9be: 8c 91 ld r24, X - 9c0: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 9c2: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9c4: 8c 91 ld r24, X - 9c6: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 9c8: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 9ca: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9cc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 9da: 00 c0 rjmp .+0 ; 0x9dc - 9dc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9de: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 9ec: 00 c0 rjmp .+0 ; 0x9ee - 9ee: 00 00 nop - 9f0: e6 c0 rjmp .+460 ; 0xbbe - return this->setLine(1); - } - if ( pos >= 0x00 && pos <= 0x0F) { - 9f2: 90 31 cpi r25, 0x10 ; 16 - 9f4: d8 f4 brcc .+54 ; 0xa2c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9f6: d8 01 movw r26, r16 - 9f8: 8c 91 ld r24, X - 9fa: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 9fc: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 9fe: 8c 91 ld r24, X - a00: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - a02: 8c 93 st X, r24 - a04: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a06: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - a14: 00 c0 rjmp .+0 ; 0xa16 - a16: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a18: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - a26: 00 c0 rjmp .+0 ; 0xa28 - a28: 00 00 nop - a2a: c9 c0 rjmp .+402 ; 0xbbe - return this->setLine(2); - } - if ( pos >= 0x40 && pos <= 0x4F) { - a2c: 89 2f mov r24, r25 - a2e: 80 54 subi r24, 0x40 ; 64 - a30: 80 31 cpi r24, 0x10 ; 16 - a32: d8 f4 brcc .+54 ; 0xa6a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a34: d8 01 movw r26, r16 - a36: 8c 91 ld r24, X - a38: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - a3a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a3c: 8c 91 ld r24, X - a3e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - a40: 8c 93 st X, r24 - a42: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a44: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - a52: 00 c0 rjmp .+0 ; 0xa54 - a54: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a56: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - a64: 00 c0 rjmp .+0 ; 0xa66 - a66: 00 00 nop - a68: aa c0 rjmp .+340 ; 0xbbe - return this->setLine(3); - } - if ( pos >= 0x10 && pos <= 0x1F) { - a6a: 90 51 subi r25, 0x10 ; 16 - a6c: 90 31 cpi r25, 0x10 ; 16 - a6e: 08 f0 brcs .+2 ; 0xa72 - a70: a6 c0 rjmp .+332 ; 0xbbe - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a72: d8 01 movw r26, r16 - a74: 8c 91 ld r24, X - a76: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - a78: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a7a: 8c 91 ld r24, X - a7c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - a7e: 8c 93 st X, r24 - a80: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a82: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - a90: 00 c0 rjmp .+0 ; 0xa92 - a92: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - a94: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - aa2: 00 c0 rjmp .+0 ; 0xaa4 - aa4: 00 00 nop - aa6: 8b c0 rjmp .+278 ; 0xbbe - void lputc(uint8_t c) { - uint8_t pos = this->getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - aa8: 9f 30 cpi r25, 0x0F ; 15 - aaa: e1 f4 brne .+56 ; 0xae4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - aac: d8 01 movw r26, r16 - aae: 9c 91 ld r25, X - ab0: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - ab2: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ab4: 9c 91 ld r25, X - ab6: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - ab8: 9c 93 st X, r25 - aba: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - abc: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - aca: 00 c0 rjmp .+0 ; 0xacc - acc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ace: d8 01 movw r26, r16 - ad0: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - ade: 00 c0 rjmp .+0 ; 0xae0 - ae0: 00 00 nop - ae2: 59 c0 rjmp .+178 ; 0xb96 - this->setLine(2); - } else if ( pos == 0x4F ) { - ae4: 9f 34 cpi r25, 0x4F ; 79 - ae6: e1 f4 brne .+56 ; 0xb20 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ae8: d8 01 movw r26, r16 - aea: 9c 91 ld r25, X - aec: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - aee: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - af0: 9c 91 ld r25, X - af2: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - af4: 9c 93 st X, r25 - af6: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - af8: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - b06: 00 c0 rjmp .+0 ; 0xb08 - b08: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b0a: d8 01 movw r26, r16 - b0c: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - b1a: 00 c0 rjmp .+0 ; 0xb1c - b1c: 00 00 nop - b1e: 3b c0 rjmp .+118 ; 0xb96 - this->setLine(3); - } else if ( pos == 0x1F ) { - b20: 9f 31 cpi r25, 0x1F ; 31 - b22: e1 f4 brne .+56 ; 0xb5c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b24: d8 01 movw r26, r16 - b26: 9c 91 ld r25, X - b28: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - b2a: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b2c: 9c 91 ld r25, X - b2e: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - b30: 9c 93 st X, r25 - b32: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b34: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - b42: 00 c0 rjmp .+0 ; 0xb44 - b44: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b46: d8 01 movw r26, r16 - b48: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - b56: 00 c0 rjmp .+0 ; 0xb58 - b58: 00 00 nop - b5a: 1d c0 rjmp .+58 ; 0xb96 - this->setLine(4); - } else if ( pos == 0x5F ) { - b5c: 9f 35 cpi r25, 0x5F ; 95 - b5e: d9 f4 brne .+54 ; 0xb96 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b60: d8 01 movw r26, r16 - b62: 9c 91 ld r25, X - b64: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - b66: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b68: 9c 91 ld r25, X - b6a: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - b6c: 9c 93 st X, r25 - b6e: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b70: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - b7e: 00 c0 rjmp .+0 ; 0xb80 - b80: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b82: d8 01 movw r26, r16 - b84: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - b92: 00 c0 rjmp .+0 ; 0xb94 - b94: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b96: d8 01 movw r26, r16 - b98: 9c 91 ld r25, X - b9a: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - b9c: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - b9e: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - bb4: 00 c0 rjmp .+0 ; 0xbb6 - bb6: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - bb8: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<lputs(t); - } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - bbe: 81 91 ld r24, Z+ - bc0: 81 11 cpse r24, r1 - bc2: 5a cc rjmp .-1868 ; 0x478 - _delay_ms(2); - } - - void printHex(uint16_t d) { - char t[8]; - sprintf(t, "0x%04X", d); - bc4: 1f 92 push r1 - bc6: 6f 92 push r6 - bc8: 82 e1 ldi r24, 0x12 ; 18 - bca: 92 e0 ldi r25, 0x02 ; 2 - bcc: 9f 93 push r25 - bce: 8f 93 push r24 - bd0: df 92 push r13 - bd2: cf 92 push r12 - bd4: 0e 94 24 11 call 0x2248 ; 0x2248 - bd8: 0f 90 pop r0 - bda: 0f 90 pop r0 - bdc: 0f 90 pop r0 - bde: 0f 90 pop r0 - be0: 0f 90 pop r0 - be2: 0f 90 pop r0 - be4: e3 2d mov r30, r3 - be6: f4 2d mov r31, r4 - be8: 60 e9 ldi r22, 0x90 ; 144 - bea: 40 ec ldi r20, 0xC0 ; 192 - bec: 22 ee ldi r18, 0xE2 ; 226 - bee: 75 ef ldi r23, 0xF5 ; 245 - bf0: 5f ee ldi r21, 0xEF ; 239 - bf2: 31 ee ldi r19, 0xE1 ; 225 - bf4: a3 c3 rjmp .+1862 ; 0x133c - } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - bf6: 84 3e cpi r24, 0xE4 ; 228 - bf8: 09 f0 breq .+2 ; 0xbfc - bfa: 9e c0 rjmp .+316 ; 0xd38 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - bfc: d8 01 movw r26, r16 - bfe: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - c1c: 00 c0 rjmp .+0 ; 0xc1e - c1e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c20: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - c2a: 8f 30 cpi r24, 0x0F ; 15 - c2c: d1 f4 brne .+52 ; 0xc62 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c2e: 8c 91 ld r24, X - c30: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - c32: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c34: 8c 91 ld r24, X - c36: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - c38: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - c3a: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c3c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - c4a: 00 c0 rjmp .+0 ; 0xc4c - c4c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c4e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - c5c: 00 c0 rjmp .+0 ; 0xc5e - c5e: 00 00 nop - c60: 56 c0 rjmp .+172 ; 0xd0e - this->setLine(2); - } else if ( pos == 0x4F ) { - c62: 8f 34 cpi r24, 0x4F ; 79 - c64: d9 f4 brne .+54 ; 0xc9c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c66: d8 01 movw r26, r16 - c68: 8c 91 ld r24, X - c6a: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - c6c: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c6e: 8c 91 ld r24, X - c70: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - c72: 8c 93 st X, r24 - c74: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c76: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - c84: 00 c0 rjmp .+0 ; 0xc86 - c86: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - c88: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - c96: 00 c0 rjmp .+0 ; 0xc98 - c98: 00 00 nop - c9a: 39 c0 rjmp .+114 ; 0xd0e - this->setLine(3); - } else if ( pos == 0x1F ) { - c9c: 8f 31 cpi r24, 0x1F ; 31 - c9e: d9 f4 brne .+54 ; 0xcd6 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ca0: d8 01 movw r26, r16 - ca2: 8c 91 ld r24, X - ca4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - ca6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ca8: 8c 91 ld r24, X - caa: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - cac: 8c 93 st X, r24 - cae: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - cb0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - cbe: 00 c0 rjmp .+0 ; 0xcc0 - cc0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - cc2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - cd0: 00 c0 rjmp .+0 ; 0xcd2 - cd2: 00 00 nop - cd4: 1c c0 rjmp .+56 ; 0xd0e - this->setLine(4); - } else if ( pos == 0x5F ) { - cd6: 8f 35 cpi r24, 0x5F ; 95 - cd8: d1 f4 brne .+52 ; 0xd0e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - cda: d8 01 movw r26, r16 - cdc: 8c 91 ld r24, X - cde: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - ce0: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ce2: 8c 91 ld r24, X - ce4: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - ce6: 8c 93 st X, r24 - ce8: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - cea: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - cf8: 00 c0 rjmp .+0 ; 0xcfa - cfa: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - cfc: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - d0a: 00 c0 rjmp .+0 ; 0xd0c - d0c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d0e: d8 01 movw r26, r16 - d10: 8c 91 ld r24, X - d12: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - d14: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d16: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - d2c: 00 c0 rjmp .+0 ; 0xd2e - d2e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d30: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - d38: 86 3f cpi r24, 0xF6 ; 246 - d3a: 09 f0 breq .+2 ; 0xd3e - d3c: 9e c0 rjmp .+316 ; 0xe7a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d3e: d8 01 movw r26, r16 - d40: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - d5e: 00 c0 rjmp .+0 ; 0xd60 - d60: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d62: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - d6c: 8f 30 cpi r24, 0x0F ; 15 - d6e: d1 f4 brne .+52 ; 0xda4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d70: 8c 91 ld r24, X - d72: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - d74: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d76: 8c 91 ld r24, X - d78: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - d7a: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - d7c: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d7e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - d8c: 00 c0 rjmp .+0 ; 0xd8e - d8e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - d90: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - d9e: 00 c0 rjmp .+0 ; 0xda0 - da0: 00 00 nop - da2: 56 c0 rjmp .+172 ; 0xe50 - this->setLine(2); - } else if ( pos == 0x4F ) { - da4: 8f 34 cpi r24, 0x4F ; 79 - da6: d9 f4 brne .+54 ; 0xdde - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - da8: d8 01 movw r26, r16 - daa: 8c 91 ld r24, X - dac: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - dae: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - db0: 8c 91 ld r24, X - db2: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - db4: 8c 93 st X, r24 - db6: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - db8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - dc6: 00 c0 rjmp .+0 ; 0xdc8 - dc8: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - dca: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - dd8: 00 c0 rjmp .+0 ; 0xdda - dda: 00 00 nop - ddc: 39 c0 rjmp .+114 ; 0xe50 - this->setLine(3); - } else if ( pos == 0x1F ) { - dde: 8f 31 cpi r24, 0x1F ; 31 - de0: d9 f4 brne .+54 ; 0xe18 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - de2: d8 01 movw r26, r16 - de4: 8c 91 ld r24, X - de6: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - de8: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - dea: 8c 91 ld r24, X - dec: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - dee: 8c 93 st X, r24 - df0: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - df2: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - e00: 00 c0 rjmp .+0 ; 0xe02 - e02: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e04: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - e12: 00 c0 rjmp .+0 ; 0xe14 - e14: 00 00 nop - e16: 1c c0 rjmp .+56 ; 0xe50 - this->setLine(4); - } else if ( pos == 0x5F ) { - e18: 8f 35 cpi r24, 0x5F ; 95 - e1a: d1 f4 brne .+52 ; 0xe50 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e1c: d8 01 movw r26, r16 - e1e: 8c 91 ld r24, X - e20: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - e22: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e24: 8c 91 ld r24, X - e26: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - e28: 8c 93 st X, r24 - e2a: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e2c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - e3a: 00 c0 rjmp .+0 ; 0xe3c - e3c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e3e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - e4c: 00 c0 rjmp .+0 ; 0xe4e - e4e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e50: d8 01 movw r26, r16 - e52: 8c 91 ld r24, X - e54: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - e56: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e58: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - e6e: 00 c0 rjmp .+0 ; 0xe70 - e70: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e72: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - e7a: 8c 3f cpi r24, 0xFC ; 252 - e7c: 09 f0 breq .+2 ; 0xe80 - e7e: 9e c0 rjmp .+316 ; 0xfbc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - e80: d8 01 movw r26, r16 - e82: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - ea0: 00 c0 rjmp .+0 ; 0xea2 - ea2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ea4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - eae: 8f 30 cpi r24, 0x0F ; 15 - eb0: d1 f4 brne .+52 ; 0xee6 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - eb2: 8c 91 ld r24, X - eb4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - eb6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - eb8: 8c 91 ld r24, X - eba: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - ebc: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - ebe: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ec0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - ece: 00 c0 rjmp .+0 ; 0xed0 - ed0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ed2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - ee0: 00 c0 rjmp .+0 ; 0xee2 - ee2: 00 00 nop - ee4: 56 c0 rjmp .+172 ; 0xf92 - this->setLine(2); - } else if ( pos == 0x4F ) { - ee6: 8f 34 cpi r24, 0x4F ; 79 - ee8: d9 f4 brne .+54 ; 0xf20 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - eea: d8 01 movw r26, r16 - eec: 8c 91 ld r24, X - eee: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - ef0: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ef2: 8c 91 ld r24, X - ef4: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - ef6: 8c 93 st X, r24 - ef8: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - efa: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - f08: 00 c0 rjmp .+0 ; 0xf0a - f0a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f0c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - f1a: 00 c0 rjmp .+0 ; 0xf1c - f1c: 00 00 nop - f1e: 39 c0 rjmp .+114 ; 0xf92 - this->setLine(3); - } else if ( pos == 0x1F ) { - f20: 8f 31 cpi r24, 0x1F ; 31 - f22: d9 f4 brne .+54 ; 0xf5a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f24: d8 01 movw r26, r16 - f26: 8c 91 ld r24, X - f28: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - f2a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f2c: 8c 91 ld r24, X - f2e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - f30: 8c 93 st X, r24 - f32: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f34: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - f42: 00 c0 rjmp .+0 ; 0xf44 - f44: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f46: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - f54: 00 c0 rjmp .+0 ; 0xf56 - f56: 00 00 nop - f58: 1c c0 rjmp .+56 ; 0xf92 - this->setLine(4); - } else if ( pos == 0x5F ) { - f5a: 8f 35 cpi r24, 0x5F ; 95 - f5c: d1 f4 brne .+52 ; 0xf92 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f5e: d8 01 movw r26, r16 - f60: 8c 91 ld r24, X - f62: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - f64: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f66: 8c 91 ld r24, X - f68: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - f6a: 8c 93 st X, r24 - f6c: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f6e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - f7c: 00 c0 rjmp .+0 ; 0xf7e - f7e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f80: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - f8e: 00 c0 rjmp .+0 ; 0xf90 - f90: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f92: d8 01 movw r26, r16 - f94: 8c 91 ld r24, X - f96: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - f98: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - f9a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - fb0: 00 c0 rjmp .+0 ; 0xfb2 - fb2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - fb4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - lputc(0xF5); - } else if(c == 0xDF) { //ü - fbc: 8f 3d cpi r24, 0xDF ; 223 - fbe: 09 f0 breq .+2 ; 0xfc2 - fc0: 9e c0 rjmp .+316 ; 0x10fe - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - fc2: d8 01 movw r26, r16 - fc4: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - fe2: 00 c0 rjmp .+0 ; 0xfe4 - fe4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - fe6: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - ff0: 8f 30 cpi r24, 0x0F ; 15 - ff2: d1 f4 brne .+52 ; 0x1028 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ff4: 8c 91 ld r24, X - ff6: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - ff8: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - ffa: 8c 91 ld r24, X - ffc: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - ffe: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1000: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1002: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1010: 00 c0 rjmp .+0 ; 0x1012 - 1012: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1014: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1022: 00 c0 rjmp .+0 ; 0x1024 - 1024: 00 00 nop - 1026: 56 c0 rjmp .+172 ; 0x10d4 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1028: 8f 34 cpi r24, 0x4F ; 79 - 102a: d9 f4 brne .+54 ; 0x1062 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 102c: d8 01 movw r26, r16 - 102e: 8c 91 ld r24, X - 1030: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1032: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1034: 8c 91 ld r24, X - 1036: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1038: 8c 93 st X, r24 - 103a: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 103c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 104a: 00 c0 rjmp .+0 ; 0x104c - 104c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 104e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 105c: 00 c0 rjmp .+0 ; 0x105e - 105e: 00 00 nop - 1060: 39 c0 rjmp .+114 ; 0x10d4 - this->setLine(3); - } else if ( pos == 0x1F ) { - 1062: 8f 31 cpi r24, 0x1F ; 31 - 1064: d9 f4 brne .+54 ; 0x109c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1066: d8 01 movw r26, r16 - 1068: 8c 91 ld r24, X - 106a: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 106c: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 106e: 8c 91 ld r24, X - 1070: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1072: 8c 93 st X, r24 - 1074: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1076: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1084: 00 c0 rjmp .+0 ; 0x1086 - 1086: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1088: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1096: 00 c0 rjmp .+0 ; 0x1098 - 1098: 00 00 nop - 109a: 1c c0 rjmp .+56 ; 0x10d4 - this->setLine(4); - } else if ( pos == 0x5F ) { - 109c: 8f 35 cpi r24, 0x5F ; 95 - 109e: d1 f4 brne .+52 ; 0x10d4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10a0: d8 01 movw r26, r16 - 10a2: 8c 91 ld r24, X - 10a4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 10a6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10a8: 8c 91 ld r24, X - 10aa: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 10ac: 8c 93 st X, r24 - 10ae: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10b0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 10be: 00 c0 rjmp .+0 ; 0x10c0 - 10c0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10c2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 10d0: 00 c0 rjmp .+0 ; 0x10d2 - 10d2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10d4: d8 01 movw r26, r16 - 10d6: 8c 91 ld r24, X - 10d8: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 10da: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10dc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 10f2: 00 c0 rjmp .+0 ; 0x10f4 - 10f4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10f6: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 10fe: d8 01 movw r26, r16 - 1100: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 111e: 00 c0 rjmp .+0 ; 0x1120 - 1120: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1122: d8 01 movw r26, r16 - 1124: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - 112e: 8a 30 cpi r24, 0x0A ; 10 - 1130: 09 f0 breq .+2 ; 0x1134 - 1132: 79 c0 rjmp .+242 ; 0x1226 - _delay_us(53); - pen::clear(); - } - - void newline(uint8_t pos) { - if ( pos >= 0x50 && pos <= 0x5F ) { - 1134: 89 2f mov r24, r25 - 1136: 80 55 subi r24, 0x50 ; 80 - 1138: 80 31 cpi r24, 0x10 ; 16 - 113a: d0 f4 brcc .+52 ; 0x1170 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 113c: 8c 91 ld r24, X - 113e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1140: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1142: 8c 91 ld r24, X - 1144: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1146: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1148: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 114a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1158: 00 c0 rjmp .+0 ; 0x115a - 115a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 115c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 116a: 00 c0 rjmp .+0 ; 0x116c - 116c: 00 00 nop - 116e: e6 c0 rjmp .+460 ; 0x133c - return this->setLine(1); - } - if ( pos >= 0x00 && pos <= 0x0F) { - 1170: 90 31 cpi r25, 0x10 ; 16 - 1172: d8 f4 brcc .+54 ; 0x11aa - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1174: d8 01 movw r26, r16 - 1176: 8c 91 ld r24, X - 1178: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 117a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 117c: 8c 91 ld r24, X - 117e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1180: 8c 93 st X, r24 - 1182: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1184: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1192: 00 c0 rjmp .+0 ; 0x1194 - 1194: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1196: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 11a4: 00 c0 rjmp .+0 ; 0x11a6 - 11a6: 00 00 nop - 11a8: c9 c0 rjmp .+402 ; 0x133c - return this->setLine(2); - } - if ( pos >= 0x40 && pos <= 0x4F) { - 11aa: 89 2f mov r24, r25 - 11ac: 80 54 subi r24, 0x40 ; 64 - 11ae: 80 31 cpi r24, 0x10 ; 16 - 11b0: d8 f4 brcc .+54 ; 0x11e8 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11b2: d8 01 movw r26, r16 - 11b4: 8c 91 ld r24, X - 11b6: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 11b8: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11ba: 8c 91 ld r24, X - 11bc: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 11be: 8c 93 st X, r24 - 11c0: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11c2: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 11d0: 00 c0 rjmp .+0 ; 0x11d2 - 11d2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11d4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 11e2: 00 c0 rjmp .+0 ; 0x11e4 - 11e4: 00 00 nop - 11e6: aa c0 rjmp .+340 ; 0x133c - return this->setLine(3); - } - if ( pos >= 0x10 && pos <= 0x1F) { - 11e8: 90 51 subi r25, 0x10 ; 16 - 11ea: 90 31 cpi r25, 0x10 ; 16 - 11ec: 08 f0 brcs .+2 ; 0x11f0 - 11ee: a6 c0 rjmp .+332 ; 0x133c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11f0: d8 01 movw r26, r16 - 11f2: 8c 91 ld r24, X - 11f4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 11f6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 11f8: 8c 91 ld r24, X - 11fa: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 11fc: 8c 93 st X, r24 - 11fe: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1200: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 120e: 00 c0 rjmp .+0 ; 0x1210 - 1210: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1212: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1220: 00 c0 rjmp .+0 ; 0x1222 - 1222: 00 00 nop - 1224: 8b c0 rjmp .+278 ; 0x133c - void lputc(uint8_t c) { - uint8_t pos = this->getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1226: 9f 30 cpi r25, 0x0F ; 15 - 1228: e1 f4 brne .+56 ; 0x1262 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 122a: d8 01 movw r26, r16 - 122c: 9c 91 ld r25, X - 122e: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1230: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1232: 9c 91 ld r25, X - 1234: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1236: 9c 93 st X, r25 - 1238: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 123a: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1248: 00 c0 rjmp .+0 ; 0x124a - 124a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 124c: d8 01 movw r26, r16 - 124e: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 125c: 00 c0 rjmp .+0 ; 0x125e - 125e: 00 00 nop - 1260: 59 c0 rjmp .+178 ; 0x1314 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1262: 9f 34 cpi r25, 0x4F ; 79 - 1264: e1 f4 brne .+56 ; 0x129e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1266: d8 01 movw r26, r16 - 1268: 9c 91 ld r25, X - 126a: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 126c: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 126e: 9c 91 ld r25, X - 1270: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1272: 9c 93 st X, r25 - 1274: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1276: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1284: 00 c0 rjmp .+0 ; 0x1286 - 1286: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1288: d8 01 movw r26, r16 - 128a: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 1298: 00 c0 rjmp .+0 ; 0x129a - 129a: 00 00 nop - 129c: 3b c0 rjmp .+118 ; 0x1314 - this->setLine(3); - } else if ( pos == 0x1F ) { - 129e: 9f 31 cpi r25, 0x1F ; 31 - 12a0: e1 f4 brne .+56 ; 0x12da - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12a2: d8 01 movw r26, r16 - 12a4: 9c 91 ld r25, X - 12a6: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 12a8: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12aa: 9c 91 ld r25, X - 12ac: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 12ae: 9c 93 st X, r25 - 12b0: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12b2: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 12c0: 00 c0 rjmp .+0 ; 0x12c2 - 12c2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12c4: d8 01 movw r26, r16 - 12c6: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 12d4: 00 c0 rjmp .+0 ; 0x12d6 - 12d6: 00 00 nop - 12d8: 1d c0 rjmp .+58 ; 0x1314 - this->setLine(4); - } else if ( pos == 0x5F ) { - 12da: 9f 35 cpi r25, 0x5F ; 95 - 12dc: d9 f4 brne .+54 ; 0x1314 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12de: d8 01 movw r26, r16 - 12e0: 9c 91 ld r25, X - 12e2: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 12e4: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12e6: 9c 91 ld r25, X - 12e8: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 12ea: 9c 93 st X, r25 - 12ec: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 12ee: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 12fc: 00 c0 rjmp .+0 ; 0x12fe - 12fe: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1300: d8 01 movw r26, r16 - 1302: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 1310: 00 c0 rjmp .+0 ; 0x1312 - 1312: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1314: d8 01 movw r26, r16 - 1316: 9c 91 ld r25, X - 1318: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 131a: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 131c: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1332: 00 c0 rjmp .+0 ; 0x1334 - 1334: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1336: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<lputs(t); - } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - 133c: 81 91 ld r24, Z+ - 133e: 81 11 cpse r24, r1 - 1340: 5a cc rjmp .-1868 ; 0xbf6 - 1342: 1f 92 push r1 - 1344: 86 e9 ldi r24, 0x96 ; 150 - 1346: 8f 93 push r24 - 1348: 89 e1 ldi r24, 0x19 ; 25 - 134a: 92 e0 ldi r25, 0x02 ; 2 - 134c: 9f 93 push r25 - 134e: 8f 93 push r24 - 1350: ff 92 push r15 - 1352: ef 92 push r14 - 1354: 0e 94 24 11 call 0x2248 ; 0x2248 - 1358: 0f 90 pop r0 - 135a: 0f 90 pop r0 - 135c: 0f 90 pop r0 - 135e: 0f 90 pop r0 - 1360: 0f 90 pop r0 - 1362: 0f 90 pop r0 - 1364: e5 2d mov r30, r5 - 1366: fd 8d ldd r31, Y+29 ; 0x1d - 1368: 60 e9 ldi r22, 0x90 ; 144 - 136a: 40 ec ldi r20, 0xC0 ; 192 - 136c: 22 ee ldi r18, 0xE2 ; 226 - 136e: 75 ef ldi r23, 0xF5 ; 245 - 1370: 5f ee ldi r21, 0xEF ; 239 - 1372: 31 ee ldi r19, 0xE1 ; 225 - 1374: a3 c3 rjmp .+1862 ; 0x1abc - if(c == 0xE4) { //ä - 1376: 84 3e cpi r24, 0xE4 ; 228 - 1378: 09 f0 breq .+2 ; 0x137c - 137a: 9e c0 rjmp .+316 ; 0x14b8 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 137c: d8 01 movw r26, r16 - 137e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 139c: 00 c0 rjmp .+0 ; 0x139e - 139e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13a0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 13aa: 8f 30 cpi r24, 0x0F ; 15 - 13ac: d1 f4 brne .+52 ; 0x13e2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13ae: 8c 91 ld r24, X - 13b0: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 13b2: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13b4: 8c 91 ld r24, X - 13b6: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 13b8: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 13ba: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13bc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 13ca: 00 c0 rjmp .+0 ; 0x13cc - 13cc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13ce: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 13dc: 00 c0 rjmp .+0 ; 0x13de - 13de: 00 00 nop - 13e0: 56 c0 rjmp .+172 ; 0x148e - this->setLine(2); - } else if ( pos == 0x4F ) { - 13e2: 8f 34 cpi r24, 0x4F ; 79 - 13e4: d9 f4 brne .+54 ; 0x141c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13e6: d8 01 movw r26, r16 - 13e8: 8c 91 ld r24, X - 13ea: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 13ec: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13ee: 8c 91 ld r24, X - 13f0: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 13f2: 8c 93 st X, r24 - 13f4: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 13f6: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1404: 00 c0 rjmp .+0 ; 0x1406 - 1406: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1408: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1416: 00 c0 rjmp .+0 ; 0x1418 - 1418: 00 00 nop - 141a: 39 c0 rjmp .+114 ; 0x148e - this->setLine(3); - } else if ( pos == 0x1F ) { - 141c: 8f 31 cpi r24, 0x1F ; 31 - 141e: d9 f4 brne .+54 ; 0x1456 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1420: d8 01 movw r26, r16 - 1422: 8c 91 ld r24, X - 1424: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1426: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1428: 8c 91 ld r24, X - 142a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 142c: 8c 93 st X, r24 - 142e: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1430: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 143e: 00 c0 rjmp .+0 ; 0x1440 - 1440: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1442: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1450: 00 c0 rjmp .+0 ; 0x1452 - 1452: 00 00 nop - 1454: 1c c0 rjmp .+56 ; 0x148e - this->setLine(4); - } else if ( pos == 0x5F ) { - 1456: 8f 35 cpi r24, 0x5F ; 95 - 1458: d1 f4 brne .+52 ; 0x148e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 145a: d8 01 movw r26, r16 - 145c: 8c 91 ld r24, X - 145e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1460: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1462: 8c 91 ld r24, X - 1464: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1466: 8c 93 st X, r24 - 1468: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 146a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1478: 00 c0 rjmp .+0 ; 0x147a - 147a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 147c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 148a: 00 c0 rjmp .+0 ; 0x148c - 148c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 148e: d8 01 movw r26, r16 - 1490: 8c 91 ld r24, X - 1492: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1494: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1496: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 14ac: 00 c0 rjmp .+0 ; 0x14ae - 14ae: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14b0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - 14b8: 86 3f cpi r24, 0xF6 ; 246 - 14ba: 09 f0 breq .+2 ; 0x14be - 14bc: 9e c0 rjmp .+316 ; 0x15fa - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14be: d8 01 movw r26, r16 - 14c0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 14de: 00 c0 rjmp .+0 ; 0x14e0 - 14e0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14e2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 14ec: 8f 30 cpi r24, 0x0F ; 15 - 14ee: d1 f4 brne .+52 ; 0x1524 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14f0: 8c 91 ld r24, X - 14f2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 14f4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14f6: 8c 91 ld r24, X - 14f8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 14fa: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 14fc: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 14fe: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 150c: 00 c0 rjmp .+0 ; 0x150e - 150e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1510: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 151e: 00 c0 rjmp .+0 ; 0x1520 - 1520: 00 00 nop - 1522: 56 c0 rjmp .+172 ; 0x15d0 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1524: 8f 34 cpi r24, 0x4F ; 79 - 1526: d9 f4 brne .+54 ; 0x155e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1528: d8 01 movw r26, r16 - 152a: 8c 91 ld r24, X - 152c: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 152e: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1530: 8c 91 ld r24, X - 1532: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1534: 8c 93 st X, r24 - 1536: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1538: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1546: 00 c0 rjmp .+0 ; 0x1548 - 1548: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 154a: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1558: 00 c0 rjmp .+0 ; 0x155a - 155a: 00 00 nop - 155c: 39 c0 rjmp .+114 ; 0x15d0 - this->setLine(3); - } else if ( pos == 0x1F ) { - 155e: 8f 31 cpi r24, 0x1F ; 31 - 1560: d9 f4 brne .+54 ; 0x1598 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1562: d8 01 movw r26, r16 - 1564: 8c 91 ld r24, X - 1566: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1568: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 156a: 8c 91 ld r24, X - 156c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 156e: 8c 93 st X, r24 - 1570: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1572: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1580: 00 c0 rjmp .+0 ; 0x1582 - 1582: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1584: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1592: 00 c0 rjmp .+0 ; 0x1594 - 1594: 00 00 nop - 1596: 1c c0 rjmp .+56 ; 0x15d0 - this->setLine(4); - } else if ( pos == 0x5F ) { - 1598: 8f 35 cpi r24, 0x5F ; 95 - 159a: d1 f4 brne .+52 ; 0x15d0 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 159c: d8 01 movw r26, r16 - 159e: 8c 91 ld r24, X - 15a0: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 15a2: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15a4: 8c 91 ld r24, X - 15a6: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 15a8: 8c 93 st X, r24 - 15aa: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15ac: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 15ba: 00 c0 rjmp .+0 ; 0x15bc - 15bc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15be: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 15cc: 00 c0 rjmp .+0 ; 0x15ce - 15ce: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15d0: d8 01 movw r26, r16 - 15d2: 8c 91 ld r24, X - 15d4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 15d6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15d8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 15ee: 00 c0 rjmp .+0 ; 0x15f0 - 15f0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 15f2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - 15fa: 8c 3f cpi r24, 0xFC ; 252 - 15fc: 09 f0 breq .+2 ; 0x1600 - 15fe: 9e c0 rjmp .+316 ; 0x173c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1600: d8 01 movw r26, r16 - 1602: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1620: 00 c0 rjmp .+0 ; 0x1622 - 1622: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1624: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 162e: 8f 30 cpi r24, 0x0F ; 15 - 1630: d1 f4 brne .+52 ; 0x1666 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1632: 8c 91 ld r24, X - 1634: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1636: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1638: 8c 91 ld r24, X - 163a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 163c: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 163e: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1640: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 164e: 00 c0 rjmp .+0 ; 0x1650 - 1650: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1652: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1660: 00 c0 rjmp .+0 ; 0x1662 - 1662: 00 00 nop - 1664: 56 c0 rjmp .+172 ; 0x1712 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1666: 8f 34 cpi r24, 0x4F ; 79 - 1668: d9 f4 brne .+54 ; 0x16a0 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 166a: d8 01 movw r26, r16 - 166c: 8c 91 ld r24, X - 166e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1670: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1672: 8c 91 ld r24, X - 1674: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1676: 8c 93 st X, r24 - 1678: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 167a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1688: 00 c0 rjmp .+0 ; 0x168a - 168a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 168c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 169a: 00 c0 rjmp .+0 ; 0x169c - 169c: 00 00 nop - 169e: 39 c0 rjmp .+114 ; 0x1712 - this->setLine(3); - } else if ( pos == 0x1F ) { - 16a0: 8f 31 cpi r24, 0x1F ; 31 - 16a2: d9 f4 brne .+54 ; 0x16da - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16a4: d8 01 movw r26, r16 - 16a6: 8c 91 ld r24, X - 16a8: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 16aa: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16ac: 8c 91 ld r24, X - 16ae: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 16b0: 8c 93 st X, r24 - 16b2: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16b4: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 16c2: 00 c0 rjmp .+0 ; 0x16c4 - 16c4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16c6: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 16d4: 00 c0 rjmp .+0 ; 0x16d6 - 16d6: 00 00 nop - 16d8: 1c c0 rjmp .+56 ; 0x1712 - this->setLine(4); - } else if ( pos == 0x5F ) { - 16da: 8f 35 cpi r24, 0x5F ; 95 - 16dc: d1 f4 brne .+52 ; 0x1712 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16de: d8 01 movw r26, r16 - 16e0: 8c 91 ld r24, X - 16e2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 16e4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16e6: 8c 91 ld r24, X - 16e8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 16ea: 8c 93 st X, r24 - 16ec: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 16ee: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 16fc: 00 c0 rjmp .+0 ; 0x16fe - 16fe: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1700: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 170e: 00 c0 rjmp .+0 ; 0x1710 - 1710: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1712: d8 01 movw r26, r16 - 1714: 8c 91 ld r24, X - 1716: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1718: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 171a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1730: 00 c0 rjmp .+0 ; 0x1732 - 1732: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1734: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - lputc(0xF5); - } else if(c == 0xDF) { //ü - 173c: 8f 3d cpi r24, 0xDF ; 223 - 173e: 09 f0 breq .+2 ; 0x1742 - 1740: 9e c0 rjmp .+316 ; 0x187e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1742: d8 01 movw r26, r16 - 1744: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1762: 00 c0 rjmp .+0 ; 0x1764 - 1764: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1766: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1770: 8f 30 cpi r24, 0x0F ; 15 - 1772: d1 f4 brne .+52 ; 0x17a8 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1774: 8c 91 ld r24, X - 1776: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1778: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 177a: 8c 91 ld r24, X - 177c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 177e: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1780: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1782: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1790: 00 c0 rjmp .+0 ; 0x1792 - 1792: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1794: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 17a2: 00 c0 rjmp .+0 ; 0x17a4 - 17a4: 00 00 nop - 17a6: 56 c0 rjmp .+172 ; 0x1854 - this->setLine(2); - } else if ( pos == 0x4F ) { - 17a8: 8f 34 cpi r24, 0x4F ; 79 - 17aa: d9 f4 brne .+54 ; 0x17e2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17ac: d8 01 movw r26, r16 - 17ae: 8c 91 ld r24, X - 17b0: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 17b2: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17b4: 8c 91 ld r24, X - 17b6: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 17b8: 8c 93 st X, r24 - 17ba: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17bc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 17ca: 00 c0 rjmp .+0 ; 0x17cc - 17cc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17ce: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 17dc: 00 c0 rjmp .+0 ; 0x17de - 17de: 00 00 nop - 17e0: 39 c0 rjmp .+114 ; 0x1854 - this->setLine(3); - } else if ( pos == 0x1F ) { - 17e2: 8f 31 cpi r24, 0x1F ; 31 - 17e4: d9 f4 brne .+54 ; 0x181c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17e6: d8 01 movw r26, r16 - 17e8: 8c 91 ld r24, X - 17ea: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 17ec: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17ee: 8c 91 ld r24, X - 17f0: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 17f2: 8c 93 st X, r24 - 17f4: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 17f6: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1804: 00 c0 rjmp .+0 ; 0x1806 - 1806: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1808: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1816: 00 c0 rjmp .+0 ; 0x1818 - 1818: 00 00 nop - 181a: 1c c0 rjmp .+56 ; 0x1854 - this->setLine(4); - } else if ( pos == 0x5F ) { - 181c: 8f 35 cpi r24, 0x5F ; 95 - 181e: d1 f4 brne .+52 ; 0x1854 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1820: d8 01 movw r26, r16 - 1822: 8c 91 ld r24, X - 1824: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1826: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1828: 8c 91 ld r24, X - 182a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 182c: 8c 93 st X, r24 - 182e: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1830: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 183e: 00 c0 rjmp .+0 ; 0x1840 - 1840: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1842: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1850: 00 c0 rjmp .+0 ; 0x1852 - 1852: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1854: d8 01 movw r26, r16 - 1856: 8c 91 ld r24, X - 1858: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 185a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 185c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1872: 00 c0 rjmp .+0 ; 0x1874 - 1874: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1876: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 187e: d8 01 movw r26, r16 - 1880: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 189e: 00 c0 rjmp .+0 ; 0x18a0 - 18a0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18a2: d8 01 movw r26, r16 - 18a4: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - 18ae: 8a 30 cpi r24, 0x0A ; 10 - 18b0: 09 f0 breq .+2 ; 0x18b4 - 18b2: 79 c0 rjmp .+242 ; 0x19a6 - _delay_us(53); - pen::clear(); - } - - void newline(uint8_t pos) { - if ( pos >= 0x50 && pos <= 0x5F ) { - 18b4: 89 2f mov r24, r25 - 18b6: 80 55 subi r24, 0x50 ; 80 - 18b8: 80 31 cpi r24, 0x10 ; 16 - 18ba: d0 f4 brcc .+52 ; 0x18f0 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18bc: 8c 91 ld r24, X - 18be: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 18c0: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18c2: 8c 91 ld r24, X - 18c4: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 18c6: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 18c8: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18ca: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 18d8: 00 c0 rjmp .+0 ; 0x18da - 18da: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18dc: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 18ea: 00 c0 rjmp .+0 ; 0x18ec - 18ec: 00 00 nop - 18ee: e6 c0 rjmp .+460 ; 0x1abc - return this->setLine(1); - } - if ( pos >= 0x00 && pos <= 0x0F) { - 18f0: 90 31 cpi r25, 0x10 ; 16 - 18f2: d8 f4 brcc .+54 ; 0x192a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18f4: d8 01 movw r26, r16 - 18f6: 8c 91 ld r24, X - 18f8: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 18fa: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 18fc: 8c 91 ld r24, X - 18fe: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1900: 8c 93 st X, r24 - 1902: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1904: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1912: 00 c0 rjmp .+0 ; 0x1914 - 1914: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1916: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1924: 00 c0 rjmp .+0 ; 0x1926 - 1926: 00 00 nop - 1928: c9 c0 rjmp .+402 ; 0x1abc - return this->setLine(2); - } - if ( pos >= 0x40 && pos <= 0x4F) { - 192a: 89 2f mov r24, r25 - 192c: 80 54 subi r24, 0x40 ; 64 - 192e: 80 31 cpi r24, 0x10 ; 16 - 1930: d8 f4 brcc .+54 ; 0x1968 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1932: d8 01 movw r26, r16 - 1934: 8c 91 ld r24, X - 1936: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1938: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 193a: 8c 91 ld r24, X - 193c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 193e: 8c 93 st X, r24 - 1940: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1942: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1950: 00 c0 rjmp .+0 ; 0x1952 - 1952: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1954: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1962: 00 c0 rjmp .+0 ; 0x1964 - 1964: 00 00 nop - 1966: aa c0 rjmp .+340 ; 0x1abc - return this->setLine(3); - } - if ( pos >= 0x10 && pos <= 0x1F) { - 1968: 90 51 subi r25, 0x10 ; 16 - 196a: 90 31 cpi r25, 0x10 ; 16 - 196c: 08 f0 brcs .+2 ; 0x1970 - 196e: a6 c0 rjmp .+332 ; 0x1abc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1970: d8 01 movw r26, r16 - 1972: 8c 91 ld r24, X - 1974: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1976: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1978: 8c 91 ld r24, X - 197a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 197c: 8c 93 st X, r24 - 197e: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1980: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 198e: 00 c0 rjmp .+0 ; 0x1990 - 1990: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1992: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 19a0: 00 c0 rjmp .+0 ; 0x19a2 - 19a2: 00 00 nop - 19a4: 8b c0 rjmp .+278 ; 0x1abc - void lputc(uint8_t c) { - uint8_t pos = this->getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 19a6: 9f 30 cpi r25, 0x0F ; 15 - 19a8: e1 f4 brne .+56 ; 0x19e2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19aa: d8 01 movw r26, r16 - 19ac: 9c 91 ld r25, X - 19ae: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 19b0: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19b2: 9c 91 ld r25, X - 19b4: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 19b6: 9c 93 st X, r25 - 19b8: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19ba: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 19c8: 00 c0 rjmp .+0 ; 0x19ca - 19ca: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19cc: d8 01 movw r26, r16 - 19ce: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 19dc: 00 c0 rjmp .+0 ; 0x19de - 19de: 00 00 nop - 19e0: 59 c0 rjmp .+178 ; 0x1a94 - this->setLine(2); - } else if ( pos == 0x4F ) { - 19e2: 9f 34 cpi r25, 0x4F ; 79 - 19e4: e1 f4 brne .+56 ; 0x1a1e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19e6: d8 01 movw r26, r16 - 19e8: 9c 91 ld r25, X - 19ea: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 19ec: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19ee: 9c 91 ld r25, X - 19f0: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 19f2: 9c 93 st X, r25 - 19f4: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 19f6: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1a04: 00 c0 rjmp .+0 ; 0x1a06 - 1a06: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a08: d8 01 movw r26, r16 - 1a0a: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 1a18: 00 c0 rjmp .+0 ; 0x1a1a - 1a1a: 00 00 nop - 1a1c: 3b c0 rjmp .+118 ; 0x1a94 - this->setLine(3); - } else if ( pos == 0x1F ) { - 1a1e: 9f 31 cpi r25, 0x1F ; 31 - 1a20: e1 f4 brne .+56 ; 0x1a5a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a22: d8 01 movw r26, r16 - 1a24: 9c 91 ld r25, X - 1a26: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1a28: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a2a: 9c 91 ld r25, X - 1a2c: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1a2e: 9c 93 st X, r25 - 1a30: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a32: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1a40: 00 c0 rjmp .+0 ; 0x1a42 - 1a42: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a44: d8 01 movw r26, r16 - 1a46: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 1a54: 00 c0 rjmp .+0 ; 0x1a56 - 1a56: 00 00 nop - 1a58: 1d c0 rjmp .+58 ; 0x1a94 - this->setLine(4); - } else if ( pos == 0x5F ) { - 1a5a: 9f 35 cpi r25, 0x5F ; 95 - 1a5c: d9 f4 brne .+54 ; 0x1a94 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a5e: d8 01 movw r26, r16 - 1a60: 9c 91 ld r25, X - 1a62: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1a64: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a66: 9c 91 ld r25, X - 1a68: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1a6a: 9c 93 st X, r25 - 1a6c: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a6e: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1a7c: 00 c0 rjmp .+0 ; 0x1a7e - 1a7e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a80: d8 01 movw r26, r16 - 1a82: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 1a90: 00 c0 rjmp .+0 ; 0x1a92 - 1a92: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a94: d8 01 movw r26, r16 - 1a96: 9c 91 ld r25, X - 1a98: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1a9a: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1a9c: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1ab2: 00 c0 rjmp .+0 ; 0x1ab4 - 1ab4: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ab6: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<lputs(t); - } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - 1abc: 81 91 ld r24, Z+ - 1abe: 81 11 cpse r24, r1 - 1ac0: 5a cc rjmp .-1868 ; 0x1376 - 1ac2: e2 e0 ldi r30, 0x02 ; 2 - 1ac4: f2 e0 ldi r31, 0x02 ; 2 - 1ac6: 60 e9 ldi r22, 0x90 ; 144 - 1ac8: 40 ec ldi r20, 0xC0 ; 192 - 1aca: 22 ee ldi r18, 0xE2 ; 226 - 1acc: 75 ef ldi r23, 0xF5 ; 245 - 1ace: 5f ee ldi r21, 0xEF ; 239 - 1ad0: 31 ee ldi r19, 0xE1 ; 225 - 1ad2: a3 c3 rjmp .+1862 ; 0x221a <__stack+0x1b> - if(c == 0xE4) { //ä - 1ad4: 84 3e cpi r24, 0xE4 ; 228 - 1ad6: 09 f0 breq .+2 ; 0x1ada - 1ad8: 9e c0 rjmp .+316 ; 0x1c16 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ada: d8 01 movw r26, r16 - 1adc: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1afa: 00 c0 rjmp .+0 ; 0x1afc - 1afc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1afe: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1b08: 8f 30 cpi r24, 0x0F ; 15 - 1b0a: d1 f4 brne .+52 ; 0x1b40 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b0c: 8c 91 ld r24, X - 1b0e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1b10: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b12: 8c 91 ld r24, X - 1b14: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1b16: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1b18: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b1a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1b28: 00 c0 rjmp .+0 ; 0x1b2a - 1b2a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b2c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1b3a: 00 c0 rjmp .+0 ; 0x1b3c - 1b3c: 00 00 nop - 1b3e: 56 c0 rjmp .+172 ; 0x1bec - this->setLine(2); - } else if ( pos == 0x4F ) { - 1b40: 8f 34 cpi r24, 0x4F ; 79 - 1b42: d9 f4 brne .+54 ; 0x1b7a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b44: d8 01 movw r26, r16 - 1b46: 8c 91 ld r24, X - 1b48: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1b4a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b4c: 8c 91 ld r24, X - 1b4e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1b50: 8c 93 st X, r24 - 1b52: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b54: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1b62: 00 c0 rjmp .+0 ; 0x1b64 - 1b64: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b66: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1b74: 00 c0 rjmp .+0 ; 0x1b76 - 1b76: 00 00 nop - 1b78: 39 c0 rjmp .+114 ; 0x1bec - this->setLine(3); - } else if ( pos == 0x1F ) { - 1b7a: 8f 31 cpi r24, 0x1F ; 31 - 1b7c: d9 f4 brne .+54 ; 0x1bb4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b7e: d8 01 movw r26, r16 - 1b80: 8c 91 ld r24, X - 1b82: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1b84: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b86: 8c 91 ld r24, X - 1b88: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1b8a: 8c 93 st X, r24 - 1b8c: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1b8e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1b9c: 00 c0 rjmp .+0 ; 0x1b9e - 1b9e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ba0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1bae: 00 c0 rjmp .+0 ; 0x1bb0 - 1bb0: 00 00 nop - 1bb2: 1c c0 rjmp .+56 ; 0x1bec - this->setLine(4); - } else if ( pos == 0x5F ) { - 1bb4: 8f 35 cpi r24, 0x5F ; 95 - 1bb6: d1 f4 brne .+52 ; 0x1bec - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bb8: d8 01 movw r26, r16 - 1bba: 8c 91 ld r24, X - 1bbc: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1bbe: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bc0: 8c 91 ld r24, X - 1bc2: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1bc4: 8c 93 st X, r24 - 1bc6: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bc8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1bd6: 00 c0 rjmp .+0 ; 0x1bd8 - 1bd8: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bda: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1be8: 00 c0 rjmp .+0 ; 0x1bea - 1bea: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bec: d8 01 movw r26, r16 - 1bee: 8c 91 ld r24, X - 1bf0: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1bf2: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1bf4: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1c0a: 00 c0 rjmp .+0 ; 0x1c0c - 1c0c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c0e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - 1c16: 86 3f cpi r24, 0xF6 ; 246 - 1c18: 09 f0 breq .+2 ; 0x1c1c - 1c1a: 9e c0 rjmp .+316 ; 0x1d58 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c1c: d8 01 movw r26, r16 - 1c1e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1c3c: 00 c0 rjmp .+0 ; 0x1c3e - 1c3e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c40: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1c4a: 8f 30 cpi r24, 0x0F ; 15 - 1c4c: d1 f4 brne .+52 ; 0x1c82 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c4e: 8c 91 ld r24, X - 1c50: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1c52: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c54: 8c 91 ld r24, X - 1c56: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1c58: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1c5a: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c5c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1c6a: 00 c0 rjmp .+0 ; 0x1c6c - 1c6c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c6e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1c7c: 00 c0 rjmp .+0 ; 0x1c7e - 1c7e: 00 00 nop - 1c80: 56 c0 rjmp .+172 ; 0x1d2e - this->setLine(2); - } else if ( pos == 0x4F ) { - 1c82: 8f 34 cpi r24, 0x4F ; 79 - 1c84: d9 f4 brne .+54 ; 0x1cbc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c86: d8 01 movw r26, r16 - 1c88: 8c 91 ld r24, X - 1c8a: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1c8c: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c8e: 8c 91 ld r24, X - 1c90: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1c92: 8c 93 st X, r24 - 1c94: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1c96: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1ca4: 00 c0 rjmp .+0 ; 0x1ca6 - 1ca6: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ca8: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1cb6: 00 c0 rjmp .+0 ; 0x1cb8 - 1cb8: 00 00 nop - 1cba: 39 c0 rjmp .+114 ; 0x1d2e - this->setLine(3); - } else if ( pos == 0x1F ) { - 1cbc: 8f 31 cpi r24, 0x1F ; 31 - 1cbe: d9 f4 brne .+54 ; 0x1cf6 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1cc0: d8 01 movw r26, r16 - 1cc2: 8c 91 ld r24, X - 1cc4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1cc6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1cc8: 8c 91 ld r24, X - 1cca: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1ccc: 8c 93 st X, r24 - 1cce: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1cd0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1cde: 00 c0 rjmp .+0 ; 0x1ce0 - 1ce0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ce2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1cf0: 00 c0 rjmp .+0 ; 0x1cf2 - 1cf2: 00 00 nop - 1cf4: 1c c0 rjmp .+56 ; 0x1d2e - this->setLine(4); - } else if ( pos == 0x5F ) { - 1cf6: 8f 35 cpi r24, 0x5F ; 95 - 1cf8: d1 f4 brne .+52 ; 0x1d2e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1cfa: d8 01 movw r26, r16 - 1cfc: 8c 91 ld r24, X - 1cfe: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1d00: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d02: 8c 91 ld r24, X - 1d04: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1d06: 8c 93 st X, r24 - 1d08: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d0a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1d18: 00 c0 rjmp .+0 ; 0x1d1a - 1d1a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d1c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1d2a: 00 c0 rjmp .+0 ; 0x1d2c - 1d2c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d2e: d8 01 movw r26, r16 - 1d30: 8c 91 ld r24, X - 1d32: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1d34: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d36: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1d4c: 00 c0 rjmp .+0 ; 0x1d4e - 1d4e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d50: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - while ( (c = *s++) ) { - if(c == 0xE4) { //ä - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - 1d58: 8c 3f cpi r24, 0xFC ; 252 - 1d5a: 09 f0 breq .+2 ; 0x1d5e - 1d5c: 9e c0 rjmp .+316 ; 0x1e9a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d5e: d8 01 movw r26, r16 - 1d60: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1d7e: 00 c0 rjmp .+0 ; 0x1d80 - 1d80: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d82: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1d8c: 8f 30 cpi r24, 0x0F ; 15 - 1d8e: d1 f4 brne .+52 ; 0x1dc4 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d90: 8c 91 ld r24, X - 1d92: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1d94: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d96: 8c 91 ld r24, X - 1d98: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1d9a: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1d9c: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1d9e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1dac: 00 c0 rjmp .+0 ; 0x1dae - 1dae: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1db0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1dbe: 00 c0 rjmp .+0 ; 0x1dc0 - 1dc0: 00 00 nop - 1dc2: 56 c0 rjmp .+172 ; 0x1e70 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1dc4: 8f 34 cpi r24, 0x4F ; 79 - 1dc6: d9 f4 brne .+54 ; 0x1dfe - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1dc8: d8 01 movw r26, r16 - 1dca: 8c 91 ld r24, X - 1dcc: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1dce: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1dd0: 8c 91 ld r24, X - 1dd2: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1dd4: 8c 93 st X, r24 - 1dd6: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1dd8: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1de6: 00 c0 rjmp .+0 ; 0x1de8 - 1de8: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1dea: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1df8: 00 c0 rjmp .+0 ; 0x1dfa - 1dfa: 00 00 nop - 1dfc: 39 c0 rjmp .+114 ; 0x1e70 - this->setLine(3); - } else if ( pos == 0x1F ) { - 1dfe: 8f 31 cpi r24, 0x1F ; 31 - 1e00: d9 f4 brne .+54 ; 0x1e38 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e02: d8 01 movw r26, r16 - 1e04: 8c 91 ld r24, X - 1e06: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1e08: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e0a: 8c 91 ld r24, X - 1e0c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1e0e: 8c 93 st X, r24 - 1e10: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e12: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1e20: 00 c0 rjmp .+0 ; 0x1e22 - 1e22: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e24: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1e32: 00 c0 rjmp .+0 ; 0x1e34 - 1e34: 00 00 nop - 1e36: 1c c0 rjmp .+56 ; 0x1e70 - this->setLine(4); - } else if ( pos == 0x5F ) { - 1e38: 8f 35 cpi r24, 0x5F ; 95 - 1e3a: d1 f4 brne .+52 ; 0x1e70 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e3c: d8 01 movw r26, r16 - 1e3e: 8c 91 ld r24, X - 1e40: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1e42: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e44: 8c 91 ld r24, X - 1e46: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1e48: 8c 93 st X, r24 - 1e4a: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e4c: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1e5a: 00 c0 rjmp .+0 ; 0x1e5c - 1e5c: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e5e: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1e6c: 00 c0 rjmp .+0 ; 0x1e6e - 1e6e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e70: d8 01 movw r26, r16 - 1e72: 8c 91 ld r24, X - 1e74: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1e76: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e78: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1e8e: 00 c0 rjmp .+0 ; 0x1e90 - 1e90: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1e92: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - lputc(0xE1); - } else if(c == 0xF6) { //ö - lputc(0xEF); - } else if(c == 0xFC) { //ü - lputc(0xF5); - } else if(c == 0xDF) { //ü - 1e9a: 8f 3d cpi r24, 0xDF ; 223 - 1e9c: 09 f0 breq .+2 ; 0x1ea0 - 1e9e: 9e c0 rjmp .+316 ; 0x1fdc - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ea0: d8 01 movw r26, r16 - 1ea2: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1ec0: 00 c0 rjmp .+0 ; 0x1ec2 - 1ec2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ec4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 1ece: 8f 30 cpi r24, 0x0F ; 15 - 1ed0: d1 f4 brne .+52 ; 0x1f06 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ed2: 8c 91 ld r24, X - 1ed4: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1ed6: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ed8: 8c 91 ld r24, X - 1eda: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1edc: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 1ede: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ee0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1eee: 00 c0 rjmp .+0 ; 0x1ef0 - 1ef0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1ef2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1f00: 00 c0 rjmp .+0 ; 0x1f02 - 1f02: 00 00 nop - 1f04: 56 c0 rjmp .+172 ; 0x1fb2 - this->setLine(2); - } else if ( pos == 0x4F ) { - 1f06: 8f 34 cpi r24, 0x4F ; 79 - 1f08: d9 f4 brne .+54 ; 0x1f40 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f0a: d8 01 movw r26, r16 - 1f0c: 8c 91 ld r24, X - 1f0e: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1f10: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f12: 8c 91 ld r24, X - 1f14: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1f16: 8c 93 st X, r24 - 1f18: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f1a: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1f28: 00 c0 rjmp .+0 ; 0x1f2a - 1f2a: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f2c: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1f3a: 00 c0 rjmp .+0 ; 0x1f3c - 1f3c: 00 00 nop - 1f3e: 39 c0 rjmp .+114 ; 0x1fb2 - this->setLine(3); - } else if ( pos == 0x1F ) { - 1f40: 8f 31 cpi r24, 0x1F ; 31 - 1f42: d9 f4 brne .+54 ; 0x1f7a - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f44: d8 01 movw r26, r16 - 1f46: 8c 91 ld r24, X - 1f48: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1f4a: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f4c: 8c 91 ld r24, X - 1f4e: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1f50: 8c 93 st X, r24 - 1f52: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f54: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1f62: 00 c0 rjmp .+0 ; 0x1f64 - 1f64: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f66: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1f74: 00 c0 rjmp .+0 ; 0x1f76 - 1f76: 00 00 nop - 1f78: 1c c0 rjmp .+56 ; 0x1fb2 - this->setLine(4); - } else if ( pos == 0x5F ) { - 1f7a: 8f 35 cpi r24, 0x5F ; 95 - 1f7c: d1 f4 brne .+52 ; 0x1fb2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f7e: d8 01 movw r26, r16 - 1f80: 8c 91 ld r24, X - 1f82: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1f84: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f86: 8c 91 ld r24, X - 1f88: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 1f8a: 8c 93 st X, r24 - 1f8c: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1f8e: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1f9c: 00 c0 rjmp .+0 ; 0x1f9e - 1f9e: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1fa0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 1fae: 00 c0 rjmp .+0 ; 0x1fb0 - 1fb0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1fb2: d8 01 movw r26, r16 - 1fb4: 8c 91 ld r24, X - 1fb6: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 1fb8: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1fba: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1fd0: 00 c0 rjmp .+0 ; 0x1fd2 - 1fd2: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1fd4: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 1fdc: d8 01 movw r26, r16 - 1fde: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 1ffc: 00 c0 rjmp .+0 ; 0x1ffe - 1ffe: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2000: d8 01 movw r26, r16 - 2002: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1<getAddress(); // read busy-flag and address counter - if (c == '\n') { - 200c: 8a 30 cpi r24, 0x0A ; 10 - 200e: 09 f0 breq .+2 ; 0x2012 - 2010: 79 c0 rjmp .+242 ; 0x2104 - _delay_us(53); - pen::clear(); - } - - void newline(uint8_t pos) { - if ( pos >= 0x50 && pos <= 0x5F ) { - 2012: 89 2f mov r24, r25 - 2014: 80 55 subi r24, 0x50 ; 80 - 2016: 80 31 cpi r24, 0x10 ; 16 - 2018: d0 f4 brcc .+52 ; 0x204e - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 201a: 8c 91 ld r24, X - 201c: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 201e: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2020: 8c 91 ld r24, X - 2022: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 2024: 8c 93 st X, r24 -namespace avrlib { - - struct portd - { - static uint8_t port() { return PORTD; } - static void port(uint8_t v) { PORTD = v; } - 2026: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2028: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2036: 00 c0 rjmp .+0 ; 0x2038 - 2038: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 203a: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 2048: 00 c0 rjmp .+0 ; 0x204a - 204a: 00 00 nop - 204c: e6 c0 rjmp .+460 ; 0x221a <__stack+0x1b> - return this->setLine(1); - } - if ( pos >= 0x00 && pos <= 0x0F) { - 204e: 90 31 cpi r25, 0x10 ; 16 - 2050: d8 f4 brcc .+54 ; 0x2088 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2052: d8 01 movw r26, r16 - 2054: 8c 91 ld r24, X - 2056: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 2058: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 205a: 8c 91 ld r24, X - 205c: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 205e: 8c 93 st X, r24 - 2060: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2062: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2070: 00 c0 rjmp .+0 ; 0x2072 - 2072: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2074: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 2082: 00 c0 rjmp .+0 ; 0x2084 - 2084: 00 00 nop - 2086: c9 c0 rjmp .+402 ; 0x221a <__stack+0x1b> - return this->setLine(2); - } - if ( pos >= 0x40 && pos <= 0x4F) { - 2088: 89 2f mov r24, r25 - 208a: 80 54 subi r24, 0x40 ; 64 - 208c: 80 31 cpi r24, 0x10 ; 16 - 208e: d8 f4 brcc .+54 ; 0x20c6 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2090: d8 01 movw r26, r16 - 2092: 8c 91 ld r24, X - 2094: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 2096: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2098: 8c 91 ld r24, X - 209a: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 209c: 8c 93 st X, r24 - 209e: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20a0: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 20ae: 00 c0 rjmp .+0 ; 0x20b0 - 20b0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20b2: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 20c0: 00 c0 rjmp .+0 ; 0x20c2 - 20c2: 00 00 nop - 20c4: aa c0 rjmp .+340 ; 0x221a <__stack+0x1b> - return this->setLine(3); - } - if ( pos >= 0x10 && pos <= 0x1F) { - 20c6: 90 51 subi r25, 0x10 ; 16 - 20c8: 90 31 cpi r25, 0x10 ; 16 - 20ca: 08 f0 brcs .+2 ; 0x20ce - 20cc: a6 c0 rjmp .+332 ; 0x221a <__stack+0x1b> - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20ce: d8 01 movw r26, r16 - 20d0: 8c 91 ld r24, X - 20d2: 8f 7b andi r24, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 20d4: 8c 93 st X, r24 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20d6: 8c 91 ld r24, X - 20d8: 8f 7d andi r24, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 20da: 8c 93 st X, r24 - 20dc: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20de: 8c 91 ld r24, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 20ec: 00 c0 rjmp .+0 ; 0x20ee - 20ee: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 20f0: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1< - 20fe: 00 c0 rjmp .+0 ; 0x2100 - 2100: 00 00 nop - 2102: 8b c0 rjmp .+278 ; 0x221a <__stack+0x1b> - void lputc(uint8_t c) { - uint8_t pos = this->getAddress(); // read busy-flag and address counter - if (c == '\n') { - this->newline(pos); - } else { - if ( pos == 0x0F ) { - 2104: 9f 30 cpi r25, 0x0F ; 15 - 2106: e1 f4 brne .+56 ; 0x2140 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2108: d8 01 movw r26, r16 - 210a: 9c 91 ld r25, X - 210c: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 210e: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2110: 9c 91 ld r25, X - 2112: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 2114: 9c 93 st X, r25 - 2116: 4b b9 out 0x0b, r20 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2118: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2126: 00 c0 rjmp .+0 ; 0x2128 - 2128: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 212a: d8 01 movw r26, r16 - 212c: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 213a: 00 c0 rjmp .+0 ; 0x213c - 213c: 00 00 nop - 213e: 59 c0 rjmp .+178 ; 0x21f2 - this->setLine(2); - } else if ( pos == 0x4F ) { - 2140: 9f 34 cpi r25, 0x4F ; 79 - 2142: e1 f4 brne .+56 ; 0x217c - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2144: d8 01 movw r26, r16 - 2146: 9c 91 ld r25, X - 2148: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 214a: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 214c: 9c 91 ld r25, X - 214e: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 2150: 9c 93 st X, r25 - 2152: 6b b9 out 0x0b, r22 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2154: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2162: 00 c0 rjmp .+0 ; 0x2164 - 2164: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2166: d8 01 movw r26, r16 - 2168: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 2176: 00 c0 rjmp .+0 ; 0x2178 - 2178: 00 00 nop - 217a: 3b c0 rjmp .+118 ; 0x21f2 - this->setLine(3); - } else if ( pos == 0x1F ) { - 217c: 9f 31 cpi r25, 0x1F ; 31 - 217e: e1 f4 brne .+56 ; 0x21b8 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2180: d8 01 movw r26, r16 - 2182: 9c 91 ld r25, X - 2184: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 2186: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2188: 9c 91 ld r25, X - 218a: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 218c: 9c 93 st X, r25 - 218e: 8b b8 out 0x0b, r8 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2190: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 219e: 00 c0 rjmp .+0 ; 0x21a0 - 21a0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21a2: d8 01 movw r26, r16 - 21a4: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 21b2: 00 c0 rjmp .+0 ; 0x21b4 - 21b4: 00 00 nop - 21b6: 1d c0 rjmp .+58 ; 0x21f2 - this->setLine(4); - } else if ( pos == 0x5F ) { - 21b8: 9f 35 cpi r25, 0x5F ; 95 - 21ba: d9 f4 brne .+54 ; 0x21f2 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21bc: d8 01 movw r26, r16 - 21be: 9c 91 ld r25, X - 21c0: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 21c2: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21c4: 9c 91 ld r25, X - 21c6: 9f 7d andi r25, 0xDF ; 223 - static void port(uint8_t v) { PORTL = v; } - 21c8: 9c 93 st X, r25 - 21ca: 7b b8 out 0x0b, r7 ; 11 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21cc: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 21da: 00 c0 rjmp .+0 ; 0x21dc - 21dc: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21de: d8 01 movw r26, r16 - 21e0: 9c 91 ld r25, X - else - Port::port(Port::port() & ~(1< - 21ee: 00 c0 rjmp .+0 ; 0x21f0 - 21f0: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21f2: d8 01 movw r26, r16 - 21f4: 9c 91 ld r25, X - 21f6: 9f 7b andi r25, 0xBF ; 191 - static void port(uint8_t v) { PORTL = v; } - 21f8: 9c 93 st X, r25 - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 21fa: 9c 91 ld r25, X - struct pin - { - static void set(bool value = true) - { - if (value) - Port::port(Port::port() | (1< - 2210: 00 c0 rjmp .+0 ; 0x2212 <__stack+0x13> - 2212: 00 00 nop - -namespace avrlib { - - struct portl - { - static uint8_t port() { return PORTL; } - 2214: 8c 91 ld r24, X - else - Port::port(Port::port() & ~(1<lputs(t); - } - - void lputs(const char *s) { /* print string on lcd (no auto linefeed) */ - register char c; - while ( (c = *s++) ) { - 221a: 81 91 ld r24, Z+ - 221c: 81 11 cpse r24, r1 - 221e: 5a cc rjmp .-1868 ; 0x1ad4 - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 2220: bf ef ldi r27, 0xFF ; 255 - 2222: e3 ed ldi r30, 0xD3 ; 211 - 2224: f0 e3 ldi r31, 0x30 ; 48 - 2226: b1 50 subi r27, 0x01 ; 1 - 2228: e0 40 sbci r30, 0x00 ; 0 - 222a: f0 40 sbci r31, 0x00 ; 0 - 222c: e1 f7 brne .-8 ; 0x2226 <__stack+0x27> - 222e: 00 c0 rjmp .+0 ; 0x2230 <__stack+0x31> - 2230: 00 00 nop - 2232: 0c 94 f5 01 jmp 0x3ea ; 0x3ea - -00002236 <_GLOBAL__sub_I_d>: - - -/*ledrotclass rot; -ledgruenclass gruen; -ledgelbclass gelb;*/ displayclass d; - 2236: 80 e3 ldi r24, 0x30 ; 48 - 2238: 92 e0 ldi r25, 0x02 ; 2 - 223a: 0e 94 a8 00 call 0x150 ; 0x150 <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev> - 223e: 08 95 ret + 596: 87 e0 ldi r24, 0x07 ; 7 + 598: 92 e0 ldi r25, 0x02 ; 2 + 59a: 0e 94 07 02 call 0x40e ; 0x40e <_ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev> -00002240 <__tablejump_elpm__>: - 2240: 07 90 elpm r0, Z+ - 2242: f6 91 elpm r31, Z - 2244: e0 2d mov r30, r0 - 2246: 19 94 eijmp +namespace avrlib { -00002248 : - 2248: 0f 93 push r16 - 224a: 1f 93 push r17 - 224c: cf 93 push r28 - 224e: df 93 push r29 - 2250: cd b7 in r28, 0x3d ; 61 - 2252: de b7 in r29, 0x3e ; 62 - 2254: 2e 97 sbiw r28, 0x0e ; 14 - 2256: 0f b6 in r0, 0x3f ; 63 - 2258: f8 94 cli - 225a: de bf out 0x3e, r29 ; 62 - 225c: 0f be out 0x3f, r0 ; 63 - 225e: cd bf out 0x3d, r28 ; 61 - 2260: 0e 89 ldd r16, Y+22 ; 0x16 - 2262: 1f 89 ldd r17, Y+23 ; 0x17 - 2264: 86 e0 ldi r24, 0x06 ; 6 - 2266: 8c 83 std Y+4, r24 ; 0x04 - 2268: 1a 83 std Y+2, r17 ; 0x02 - 226a: 09 83 std Y+1, r16 ; 0x01 - 226c: 8f ef ldi r24, 0xFF ; 255 - 226e: 9f e7 ldi r25, 0x7F ; 127 - 2270: 9e 83 std Y+6, r25 ; 0x06 - 2272: 8d 83 std Y+5, r24 ; 0x05 - 2274: ce 01 movw r24, r28 - 2276: 4a 96 adiw r24, 0x1a ; 26 - 2278: ac 01 movw r20, r24 - 227a: 68 8d ldd r22, Y+24 ; 0x18 - 227c: 79 8d ldd r23, Y+25 ; 0x19 - 227e: ce 01 movw r24, r28 - 2280: 01 96 adiw r24, 0x01 ; 1 - 2282: 0e 94 53 11 call 0x22a6 ; 0x22a6 - 2286: ef 81 ldd r30, Y+7 ; 0x07 - 2288: f8 85 ldd r31, Y+8 ; 0x08 - 228a: e0 0f add r30, r16 - 228c: f1 1f adc r31, r17 - 228e: 10 82 st Z, r1 - 2290: 2e 96 adiw r28, 0x0e ; 14 - 2292: 0f b6 in r0, 0x3f ; 63 - 2294: f8 94 cli - 2296: de bf out 0x3e, r29 ; 62 - 2298: 0f be out 0x3f, r0 ; 63 - 229a: cd bf out 0x3d, r28 ; 61 - 229c: df 91 pop r29 - 229e: cf 91 pop r28 - 22a0: 1f 91 pop r17 - 22a2: 0f 91 pop r16 - 22a4: 08 95 ret + struct portj + { + static uint8_t port() { return PORTJ; } + 59e: 05 e0 ldi r16, 0x05 ; 5 + 5a0: 11 e0 ldi r17, 0x01 ; 1 + 5a2: f8 01 movw r30, r16 + 5a4: 80 81 ld r24, Z + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1<: - 22a6: 2f 92 push r2 - 22a8: 3f 92 push r3 - 22aa: 4f 92 push r4 - 22ac: 5f 92 push r5 - 22ae: 6f 92 push r6 - 22b0: 7f 92 push r7 - 22b2: 8f 92 push r8 - 22b4: 9f 92 push r9 - 22b6: af 92 push r10 - 22b8: bf 92 push r11 - 22ba: cf 92 push r12 - 22bc: df 92 push r13 - 22be: ef 92 push r14 - 22c0: ff 92 push r15 - 22c2: 0f 93 push r16 - 22c4: 1f 93 push r17 - 22c6: cf 93 push r28 - 22c8: df 93 push r29 - 22ca: cd b7 in r28, 0x3d ; 61 - 22cc: de b7 in r29, 0x3e ; 62 - 22ce: 2c 97 sbiw r28, 0x0c ; 12 - 22d0: 0f b6 in r0, 0x3f ; 63 - 22d2: f8 94 cli - 22d4: de bf out 0x3e, r29 ; 62 - 22d6: 0f be out 0x3f, r0 ; 63 - 22d8: cd bf out 0x3d, r28 ; 61 - 22da: 7c 01 movw r14, r24 - 22dc: 6b 01 movw r12, r22 - 22de: 8a 01 movw r16, r20 - 22e0: fc 01 movw r30, r24 - 22e2: 17 82 std Z+7, r1 ; 0x07 - 22e4: 16 82 std Z+6, r1 ; 0x06 - 22e6: 83 81 ldd r24, Z+3 ; 0x03 - 22e8: 81 ff sbrs r24, 1 - 22ea: c6 c1 rjmp .+908 ; 0x2678 - 22ec: 88 24 eor r8, r8 - 22ee: 83 94 inc r8 - 22f0: 91 2c mov r9, r1 - 22f2: 8c 0e add r8, r28 - 22f4: 9d 1e adc r9, r29 - 22f6: f7 01 movw r30, r14 - 22f8: 93 81 ldd r25, Z+3 ; 0x03 - 22fa: f6 01 movw r30, r12 - 22fc: 93 fd sbrc r25, 3 - 22fe: 85 91 lpm r24, Z+ - 2300: 93 ff sbrs r25, 3 - 2302: 81 91 ld r24, Z+ - 2304: 6f 01 movw r12, r30 - 2306: 88 23 and r24, r24 - 2308: 09 f4 brne .+2 ; 0x230c - 230a: b2 c1 rjmp .+868 ; 0x2670 - 230c: 85 32 cpi r24, 0x25 ; 37 - 230e: 39 f4 brne .+14 ; 0x231e - 2310: 93 fd sbrc r25, 3 - 2312: 85 91 lpm r24, Z+ - 2314: 93 ff sbrs r25, 3 - 2316: 81 91 ld r24, Z+ - 2318: 6f 01 movw r12, r30 - 231a: 85 32 cpi r24, 0x25 ; 37 - 231c: 29 f4 brne .+10 ; 0x2328 - 231e: b7 01 movw r22, r14 - 2320: 90 e0 ldi r25, 0x00 ; 0 - 2322: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2326: e7 cf rjmp .-50 ; 0x22f6 - 2328: 51 2c mov r5, r1 - 232a: 31 2c mov r3, r1 - 232c: 20 e0 ldi r18, 0x00 ; 0 - 232e: 20 32 cpi r18, 0x20 ; 32 - 2330: a8 f4 brcc .+42 ; 0x235c - 2332: 8b 32 cpi r24, 0x2B ; 43 - 2334: 61 f0 breq .+24 ; 0x234e - 2336: 28 f4 brcc .+10 ; 0x2342 - 2338: 80 32 cpi r24, 0x20 ; 32 - 233a: 51 f0 breq .+20 ; 0x2350 - 233c: 83 32 cpi r24, 0x23 ; 35 - 233e: 71 f4 brne .+28 ; 0x235c - 2340: 0b c0 rjmp .+22 ; 0x2358 - 2342: 8d 32 cpi r24, 0x2D ; 45 - 2344: 39 f0 breq .+14 ; 0x2354 - 2346: 80 33 cpi r24, 0x30 ; 48 - 2348: 49 f4 brne .+18 ; 0x235c - 234a: 21 60 ori r18, 0x01 ; 1 - 234c: 28 c0 rjmp .+80 ; 0x239e - 234e: 22 60 ori r18, 0x02 ; 2 - 2350: 24 60 ori r18, 0x04 ; 4 - 2352: 25 c0 rjmp .+74 ; 0x239e - 2354: 28 60 ori r18, 0x08 ; 8 - 2356: 23 c0 rjmp .+70 ; 0x239e - 2358: 20 61 ori r18, 0x10 ; 16 - 235a: 21 c0 rjmp .+66 ; 0x239e - 235c: 27 fd sbrc r18, 7 - 235e: 27 c0 rjmp .+78 ; 0x23ae - 2360: 38 2f mov r19, r24 - 2362: 30 53 subi r19, 0x30 ; 48 - 2364: 3a 30 cpi r19, 0x0A ; 10 - 2366: 78 f4 brcc .+30 ; 0x2386 - 2368: 26 ff sbrs r18, 6 - 236a: 06 c0 rjmp .+12 ; 0x2378 - 236c: fa e0 ldi r31, 0x0A ; 10 - 236e: 5f 9e mul r5, r31 - 2370: 30 0d add r19, r0 - 2372: 11 24 eor r1, r1 - 2374: 53 2e mov r5, r19 - 2376: 13 c0 rjmp .+38 ; 0x239e - 2378: 8a e0 ldi r24, 0x0A ; 10 - 237a: 38 9e mul r3, r24 - 237c: 30 0d add r19, r0 - 237e: 11 24 eor r1, r1 - 2380: 33 2e mov r3, r19 - 2382: 20 62 ori r18, 0x20 ; 32 - 2384: 0c c0 rjmp .+24 ; 0x239e - 2386: 8e 32 cpi r24, 0x2E ; 46 - 2388: 21 f4 brne .+8 ; 0x2392 - 238a: 26 fd sbrc r18, 6 - 238c: 71 c1 rjmp .+738 ; 0x2670 - 238e: 20 64 ori r18, 0x40 ; 64 - 2390: 06 c0 rjmp .+12 ; 0x239e - 2392: 8c 36 cpi r24, 0x6C ; 108 - 2394: 11 f4 brne .+4 ; 0x239a - 2396: 20 68 ori r18, 0x80 ; 128 - 2398: 02 c0 rjmp .+4 ; 0x239e - 239a: 88 36 cpi r24, 0x68 ; 104 - 239c: 41 f4 brne .+16 ; 0x23ae - 239e: f6 01 movw r30, r12 - 23a0: 93 fd sbrc r25, 3 - 23a2: 85 91 lpm r24, Z+ - 23a4: 93 ff sbrs r25, 3 - 23a6: 81 91 ld r24, Z+ - 23a8: 6f 01 movw r12, r30 - 23aa: 81 11 cpse r24, r1 - 23ac: c0 cf rjmp .-128 ; 0x232e - 23ae: 98 2f mov r25, r24 - 23b0: 95 54 subi r25, 0x45 ; 69 - 23b2: 93 30 cpi r25, 0x03 ; 3 - 23b4: 18 f0 brcs .+6 ; 0x23bc - 23b6: 90 52 subi r25, 0x20 ; 32 - 23b8: 93 30 cpi r25, 0x03 ; 3 - 23ba: 28 f4 brcc .+10 ; 0x23c6 - 23bc: 0c 5f subi r16, 0xFC ; 252 - 23be: 1f 4f sbci r17, 0xFF ; 255 - 23c0: ff e3 ldi r31, 0x3F ; 63 - 23c2: f9 83 std Y+1, r31 ; 0x01 - 23c4: 0d c0 rjmp .+26 ; 0x23e0 - 23c6: 83 36 cpi r24, 0x63 ; 99 - 23c8: 31 f0 breq .+12 ; 0x23d6 - 23ca: 83 37 cpi r24, 0x73 ; 115 - 23cc: 71 f0 breq .+28 ; 0x23ea - 23ce: 83 35 cpi r24, 0x53 ; 83 - 23d0: 09 f0 breq .+2 ; 0x23d4 - 23d2: 5e c0 rjmp .+188 ; 0x2490 - 23d4: 23 c0 rjmp .+70 ; 0x241c - 23d6: f8 01 movw r30, r16 - 23d8: 80 81 ld r24, Z - 23da: 89 83 std Y+1, r24 ; 0x01 - 23dc: 0e 5f subi r16, 0xFE ; 254 - 23de: 1f 4f sbci r17, 0xFF ; 255 - 23e0: 44 24 eor r4, r4 - 23e2: 43 94 inc r4 - 23e4: 51 2c mov r5, r1 - 23e6: 54 01 movw r10, r8 - 23e8: 15 c0 rjmp .+42 ; 0x2414 - 23ea: 38 01 movw r6, r16 - 23ec: f2 e0 ldi r31, 0x02 ; 2 - 23ee: 6f 0e add r6, r31 - 23f0: 71 1c adc r7, r1 - 23f2: f8 01 movw r30, r16 - 23f4: a0 80 ld r10, Z - 23f6: b1 80 ldd r11, Z+1 ; 0x01 - 23f8: 26 ff sbrs r18, 6 - 23fa: 03 c0 rjmp .+6 ; 0x2402 - 23fc: 65 2d mov r22, r5 - 23fe: 70 e0 ldi r23, 0x00 ; 0 - 2400: 02 c0 rjmp .+4 ; 0x2406 - 2402: 6f ef ldi r22, 0xFF ; 255 - 2404: 7f ef ldi r23, 0xFF ; 255 - 2406: c5 01 movw r24, r10 - 2408: 2c 87 std Y+12, r18 ; 0x0c - 240a: 0e 94 63 13 call 0x26c6 ; 0x26c6 - 240e: 2c 01 movw r4, r24 - 2410: 83 01 movw r16, r6 - 2412: 2c 85 ldd r18, Y+12 ; 0x0c - 2414: 6f e7 ldi r22, 0x7F ; 127 - 2416: 26 2e mov r2, r22 - 2418: 22 22 and r2, r18 - 241a: 18 c0 rjmp .+48 ; 0x244c - 241c: 38 01 movw r6, r16 - 241e: f2 e0 ldi r31, 0x02 ; 2 - 2420: 6f 0e add r6, r31 - 2422: 71 1c adc r7, r1 - 2424: f8 01 movw r30, r16 - 2426: a0 80 ld r10, Z - 2428: b1 80 ldd r11, Z+1 ; 0x01 - 242a: 26 ff sbrs r18, 6 - 242c: 03 c0 rjmp .+6 ; 0x2434 - 242e: 65 2d mov r22, r5 - 2430: 70 e0 ldi r23, 0x00 ; 0 - 2432: 02 c0 rjmp .+4 ; 0x2438 - 2434: 6f ef ldi r22, 0xFF ; 255 - 2436: 7f ef ldi r23, 0xFF ; 255 - 2438: c5 01 movw r24, r10 - 243a: 2c 87 std Y+12, r18 ; 0x0c - 243c: 0e 94 58 13 call 0x26b0 ; 0x26b0 - 2440: 2c 01 movw r4, r24 - 2442: 2c 85 ldd r18, Y+12 ; 0x0c - 2444: 50 e8 ldi r21, 0x80 ; 128 - 2446: 25 2e mov r2, r21 - 2448: 22 2a or r2, r18 - 244a: 83 01 movw r16, r6 - 244c: 23 fc sbrc r2, 3 - 244e: 1c c0 rjmp .+56 ; 0x2488 - 2450: 06 c0 rjmp .+12 ; 0x245e - 2452: b7 01 movw r22, r14 - 2454: 80 e2 ldi r24, 0x20 ; 32 - 2456: 90 e0 ldi r25, 0x00 ; 0 - 2458: 0e 94 6e 13 call 0x26dc ; 0x26dc - 245c: 3a 94 dec r3 - 245e: 83 2d mov r24, r3 - 2460: 90 e0 ldi r25, 0x00 ; 0 - 2462: 48 16 cp r4, r24 - 2464: 59 06 cpc r5, r25 - 2466: a8 f3 brcs .-22 ; 0x2452 - 2468: 0f c0 rjmp .+30 ; 0x2488 - 246a: f5 01 movw r30, r10 - 246c: 27 fc sbrc r2, 7 - 246e: 85 91 lpm r24, Z+ - 2470: 27 fe sbrs r2, 7 - 2472: 81 91 ld r24, Z+ - 2474: 5f 01 movw r10, r30 - 2476: b7 01 movw r22, r14 - 2478: 90 e0 ldi r25, 0x00 ; 0 - 247a: 0e 94 6e 13 call 0x26dc ; 0x26dc - 247e: 31 10 cpse r3, r1 - 2480: 3a 94 dec r3 - 2482: f1 e0 ldi r31, 0x01 ; 1 - 2484: 4f 1a sub r4, r31 - 2486: 51 08 sbc r5, r1 - 2488: 41 14 cp r4, r1 - 248a: 51 04 cpc r5, r1 - 248c: 71 f7 brne .-36 ; 0x246a - 248e: ed c0 rjmp .+474 ; 0x266a - 2490: 84 36 cpi r24, 0x64 ; 100 - 2492: 11 f0 breq .+4 ; 0x2498 - 2494: 89 36 cpi r24, 0x69 ; 105 - 2496: 41 f5 brne .+80 ; 0x24e8 - 2498: f8 01 movw r30, r16 - 249a: 27 ff sbrs r18, 7 - 249c: 07 c0 rjmp .+14 ; 0x24ac - 249e: 60 81 ld r22, Z - 24a0: 71 81 ldd r23, Z+1 ; 0x01 - 24a2: 82 81 ldd r24, Z+2 ; 0x02 - 24a4: 93 81 ldd r25, Z+3 ; 0x03 - 24a6: 0c 5f subi r16, 0xFC ; 252 - 24a8: 1f 4f sbci r17, 0xFF ; 255 - 24aa: 08 c0 rjmp .+16 ; 0x24bc - 24ac: 60 81 ld r22, Z - 24ae: 71 81 ldd r23, Z+1 ; 0x01 - 24b0: 88 27 eor r24, r24 - 24b2: 77 fd sbrc r23, 7 - 24b4: 80 95 com r24 - 24b6: 98 2f mov r25, r24 - 24b8: 0e 5f subi r16, 0xFE ; 254 - 24ba: 1f 4f sbci r17, 0xFF ; 255 - 24bc: 4f e6 ldi r20, 0x6F ; 111 - 24be: b4 2e mov r11, r20 - 24c0: b2 22 and r11, r18 - 24c2: 97 ff sbrs r25, 7 - 24c4: 09 c0 rjmp .+18 ; 0x24d8 - 24c6: 90 95 com r25 - 24c8: 80 95 com r24 - 24ca: 70 95 com r23 - 24cc: 61 95 neg r22 - 24ce: 7f 4f sbci r23, 0xFF ; 255 - 24d0: 8f 4f sbci r24, 0xFF ; 255 - 24d2: 9f 4f sbci r25, 0xFF ; 255 - 24d4: f0 e8 ldi r31, 0x80 ; 128 - 24d6: bf 2a or r11, r31 - 24d8: 2a e0 ldi r18, 0x0A ; 10 - 24da: 30 e0 ldi r19, 0x00 ; 0 - 24dc: a4 01 movw r20, r8 - 24de: 0e 94 9a 13 call 0x2734 ; 0x2734 <__ultoa_invert> - 24e2: a8 2e mov r10, r24 - 24e4: a8 18 sub r10, r8 - 24e6: 43 c0 rjmp .+134 ; 0x256e - 24e8: 85 37 cpi r24, 0x75 ; 117 - 24ea: 31 f4 brne .+12 ; 0x24f8 - 24ec: 3f ee ldi r19, 0xEF ; 239 - 24ee: b3 2e mov r11, r19 - 24f0: b2 22 and r11, r18 - 24f2: 2a e0 ldi r18, 0x0A ; 10 - 24f4: 30 e0 ldi r19, 0x00 ; 0 - 24f6: 24 c0 rjmp .+72 ; 0x2540 - 24f8: 99 ef ldi r25, 0xF9 ; 249 - 24fa: b9 2e mov r11, r25 - 24fc: b2 22 and r11, r18 - 24fe: 8f 36 cpi r24, 0x6F ; 111 - 2500: b9 f0 breq .+46 ; 0x2530 - 2502: 20 f4 brcc .+8 ; 0x250c - 2504: 88 35 cpi r24, 0x58 ; 88 - 2506: 09 f0 breq .+2 ; 0x250a - 2508: b3 c0 rjmp .+358 ; 0x2670 - 250a: 0d c0 rjmp .+26 ; 0x2526 - 250c: 80 37 cpi r24, 0x70 ; 112 - 250e: 21 f0 breq .+8 ; 0x2518 - 2510: 88 37 cpi r24, 0x78 ; 120 - 2512: 09 f0 breq .+2 ; 0x2516 - 2514: ad c0 rjmp .+346 ; 0x2670 - 2516: 02 c0 rjmp .+4 ; 0x251c - 2518: 20 e1 ldi r18, 0x10 ; 16 - 251a: b2 2a or r11, r18 - 251c: b4 fe sbrs r11, 4 - 251e: 0b c0 rjmp .+22 ; 0x2536 - 2520: 84 e0 ldi r24, 0x04 ; 4 - 2522: b8 2a or r11, r24 - 2524: 08 c0 rjmp .+16 ; 0x2536 - 2526: 24 ff sbrs r18, 4 - 2528: 09 c0 rjmp .+18 ; 0x253c - 252a: e6 e0 ldi r30, 0x06 ; 6 - 252c: be 2a or r11, r30 - 252e: 06 c0 rjmp .+12 ; 0x253c - 2530: 28 e0 ldi r18, 0x08 ; 8 - 2532: 30 e0 ldi r19, 0x00 ; 0 - 2534: 05 c0 rjmp .+10 ; 0x2540 - 2536: 20 e1 ldi r18, 0x10 ; 16 - 2538: 30 e0 ldi r19, 0x00 ; 0 - 253a: 02 c0 rjmp .+4 ; 0x2540 - 253c: 20 e1 ldi r18, 0x10 ; 16 - 253e: 32 e0 ldi r19, 0x02 ; 2 - 2540: f8 01 movw r30, r16 - 2542: b7 fe sbrs r11, 7 - 2544: 07 c0 rjmp .+14 ; 0x2554 - 2546: 60 81 ld r22, Z - 2548: 71 81 ldd r23, Z+1 ; 0x01 - 254a: 82 81 ldd r24, Z+2 ; 0x02 - 254c: 93 81 ldd r25, Z+3 ; 0x03 - 254e: 0c 5f subi r16, 0xFC ; 252 - 2550: 1f 4f sbci r17, 0xFF ; 255 - 2552: 06 c0 rjmp .+12 ; 0x2560 - 2554: 60 81 ld r22, Z - 2556: 71 81 ldd r23, Z+1 ; 0x01 - 2558: 80 e0 ldi r24, 0x00 ; 0 - 255a: 90 e0 ldi r25, 0x00 ; 0 - 255c: 0e 5f subi r16, 0xFE ; 254 - 255e: 1f 4f sbci r17, 0xFF ; 255 - 2560: a4 01 movw r20, r8 - 2562: 0e 94 9a 13 call 0x2734 ; 0x2734 <__ultoa_invert> - 2566: a8 2e mov r10, r24 - 2568: a8 18 sub r10, r8 - 256a: ff e7 ldi r31, 0x7F ; 127 - 256c: bf 22 and r11, r31 - 256e: b6 fe sbrs r11, 6 - 2570: 0b c0 rjmp .+22 ; 0x2588 - 2572: 2b 2d mov r18, r11 - 2574: 2e 7f andi r18, 0xFE ; 254 - 2576: a5 14 cp r10, r5 - 2578: 50 f4 brcc .+20 ; 0x258e - 257a: b4 fe sbrs r11, 4 - 257c: 0a c0 rjmp .+20 ; 0x2592 - 257e: b2 fc sbrc r11, 2 - 2580: 08 c0 rjmp .+16 ; 0x2592 - 2582: 2b 2d mov r18, r11 - 2584: 2e 7e andi r18, 0xEE ; 238 - 2586: 05 c0 rjmp .+10 ; 0x2592 - 2588: 7a 2c mov r7, r10 - 258a: 2b 2d mov r18, r11 - 258c: 03 c0 rjmp .+6 ; 0x2594 - 258e: 7a 2c mov r7, r10 - 2590: 01 c0 rjmp .+2 ; 0x2594 - 2592: 75 2c mov r7, r5 - 2594: 24 ff sbrs r18, 4 - 2596: 0d c0 rjmp .+26 ; 0x25b2 - 2598: fe 01 movw r30, r28 - 259a: ea 0d add r30, r10 - 259c: f1 1d adc r31, r1 - 259e: 80 81 ld r24, Z - 25a0: 80 33 cpi r24, 0x30 ; 48 - 25a2: 11 f4 brne .+4 ; 0x25a8 - 25a4: 29 7e andi r18, 0xE9 ; 233 - 25a6: 09 c0 rjmp .+18 ; 0x25ba - 25a8: 22 ff sbrs r18, 2 - 25aa: 06 c0 rjmp .+12 ; 0x25b8 - 25ac: 73 94 inc r7 - 25ae: 73 94 inc r7 - 25b0: 04 c0 rjmp .+8 ; 0x25ba - 25b2: 82 2f mov r24, r18 - 25b4: 86 78 andi r24, 0x86 ; 134 - 25b6: 09 f0 breq .+2 ; 0x25ba - 25b8: 73 94 inc r7 - 25ba: 23 fd sbrc r18, 3 - 25bc: 14 c0 rjmp .+40 ; 0x25e6 - 25be: 20 ff sbrs r18, 0 - 25c0: 0f c0 rjmp .+30 ; 0x25e0 - 25c2: 5a 2c mov r5, r10 - 25c4: 73 14 cp r7, r3 - 25c6: 60 f4 brcc .+24 ; 0x25e0 - 25c8: 53 0c add r5, r3 - 25ca: 57 18 sub r5, r7 - 25cc: 73 2c mov r7, r3 - 25ce: 08 c0 rjmp .+16 ; 0x25e0 - 25d0: b7 01 movw r22, r14 - 25d2: 80 e2 ldi r24, 0x20 ; 32 - 25d4: 90 e0 ldi r25, 0x00 ; 0 - 25d6: 2c 87 std Y+12, r18 ; 0x0c - 25d8: 0e 94 6e 13 call 0x26dc ; 0x26dc - 25dc: 73 94 inc r7 - 25de: 2c 85 ldd r18, Y+12 ; 0x0c - 25e0: 73 14 cp r7, r3 - 25e2: b0 f3 brcs .-20 ; 0x25d0 - 25e4: 04 c0 rjmp .+8 ; 0x25ee - 25e6: 73 14 cp r7, r3 - 25e8: 10 f4 brcc .+4 ; 0x25ee - 25ea: 37 18 sub r3, r7 - 25ec: 01 c0 rjmp .+2 ; 0x25f0 - 25ee: 31 2c mov r3, r1 - 25f0: 24 ff sbrs r18, 4 - 25f2: 12 c0 rjmp .+36 ; 0x2618 - 25f4: b7 01 movw r22, r14 - 25f6: 80 e3 ldi r24, 0x30 ; 48 - 25f8: 90 e0 ldi r25, 0x00 ; 0 - 25fa: 2c 87 std Y+12, r18 ; 0x0c - 25fc: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2600: 2c 85 ldd r18, Y+12 ; 0x0c - 2602: 22 ff sbrs r18, 2 - 2604: 1e c0 rjmp .+60 ; 0x2642 - 2606: 21 ff sbrs r18, 1 - 2608: 03 c0 rjmp .+6 ; 0x2610 - 260a: 88 e5 ldi r24, 0x58 ; 88 - 260c: 90 e0 ldi r25, 0x00 ; 0 - 260e: 02 c0 rjmp .+4 ; 0x2614 - 2610: 88 e7 ldi r24, 0x78 ; 120 - 2612: 90 e0 ldi r25, 0x00 ; 0 - 2614: b7 01 movw r22, r14 - 2616: 0c c0 rjmp .+24 ; 0x2630 - 2618: 82 2f mov r24, r18 - 261a: 86 78 andi r24, 0x86 ; 134 - 261c: 91 f0 breq .+36 ; 0x2642 - 261e: 21 fd sbrc r18, 1 - 2620: 02 c0 rjmp .+4 ; 0x2626 - 2622: 80 e2 ldi r24, 0x20 ; 32 - 2624: 01 c0 rjmp .+2 ; 0x2628 - 2626: 8b e2 ldi r24, 0x2B ; 43 - 2628: 27 fd sbrc r18, 7 - 262a: 8d e2 ldi r24, 0x2D ; 45 - 262c: b7 01 movw r22, r14 - 262e: 90 e0 ldi r25, 0x00 ; 0 - 2630: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2634: 06 c0 rjmp .+12 ; 0x2642 - 2636: b7 01 movw r22, r14 - 2638: 80 e3 ldi r24, 0x30 ; 48 - 263a: 90 e0 ldi r25, 0x00 ; 0 - 263c: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2640: 5a 94 dec r5 - 2642: a5 14 cp r10, r5 - 2644: c0 f3 brcs .-16 ; 0x2636 - 2646: aa 94 dec r10 - 2648: f4 01 movw r30, r8 - 264a: ea 0d add r30, r10 - 264c: f1 1d adc r31, r1 - 264e: b7 01 movw r22, r14 - 2650: 80 81 ld r24, Z - 2652: 90 e0 ldi r25, 0x00 ; 0 - 2654: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2658: a1 10 cpse r10, r1 - 265a: f5 cf rjmp .-22 ; 0x2646 - 265c: 06 c0 rjmp .+12 ; 0x266a - 265e: b7 01 movw r22, r14 - 2660: 80 e2 ldi r24, 0x20 ; 32 - 2662: 90 e0 ldi r25, 0x00 ; 0 - 2664: 0e 94 6e 13 call 0x26dc ; 0x26dc - 2668: 3a 94 dec r3 - 266a: 31 10 cpse r3, r1 - 266c: f8 cf rjmp .-16 ; 0x265e - 266e: 43 ce rjmp .-890 ; 0x22f6 - 2670: f7 01 movw r30, r14 - 2672: 26 81 ldd r18, Z+6 ; 0x06 - 2674: 37 81 ldd r19, Z+7 ; 0x07 - 2676: 02 c0 rjmp .+4 ; 0x267c - 2678: 2f ef ldi r18, 0xFF ; 255 - 267a: 3f ef ldi r19, 0xFF ; 255 - 267c: c9 01 movw r24, r18 - 267e: 2c 96 adiw r28, 0x0c ; 12 - 2680: 0f b6 in r0, 0x3f ; 63 - 2682: f8 94 cli - 2684: de bf out 0x3e, r29 ; 62 - 2686: 0f be out 0x3f, r0 ; 63 - 2688: cd bf out 0x3d, r28 ; 61 - 268a: df 91 pop r29 - 268c: cf 91 pop r28 - 268e: 1f 91 pop r17 - 2690: 0f 91 pop r16 - 2692: ff 90 pop r15 - 2694: ef 90 pop r14 - 2696: df 90 pop r13 - 2698: cf 90 pop r12 - 269a: bf 90 pop r11 - 269c: af 90 pop r10 - 269e: 9f 90 pop r9 - 26a0: 8f 90 pop r8 - 26a2: 7f 90 pop r7 - 26a4: 6f 90 pop r6 - 26a6: 5f 90 pop r5 - 26a8: 4f 90 pop r4 - 26aa: 3f 90 pop r3 - 26ac: 2f 90 pop r2 - 26ae: 08 95 ret + static uint8_t pin() { return PINJ; } + static void pin(uint8_t v) { PINJ = v; } -000026b0 : - 26b0: fc 01 movw r30, r24 - 26b2: 05 90 lpm r0, Z+ - 26b4: 61 50 subi r22, 0x01 ; 1 - 26b6: 70 40 sbci r23, 0x00 ; 0 - 26b8: 01 10 cpse r0, r1 - 26ba: d8 f7 brcc .-10 ; 0x26b2 - 26bc: 80 95 com r24 - 26be: 90 95 com r25 - 26c0: 8e 0f add r24, r30 - 26c2: 9f 1f adc r25, r31 - 26c4: 08 95 ret + static uint8_t dir() { return DDRJ; } + 5aa: c4 e0 ldi r28, 0x04 ; 4 + 5ac: d1 e0 ldi r29, 0x01 ; 1 + 5ae: 88 81 ld r24, Y + static bool value() { return (Port::pin() & (1<: - 26c6: fc 01 movw r30, r24 - 26c8: 61 50 subi r22, 0x01 ; 1 - 26ca: 70 40 sbci r23, 0x00 ; 0 - 26cc: 01 90 ld r0, Z+ - 26ce: 01 10 cpse r0, r1 - 26d0: d8 f7 brcc .-10 ; 0x26c8 - 26d2: 80 95 com r24 - 26d4: 90 95 com r25 - 26d6: 8e 0f add r24, r30 - 26d8: 9f 1f adc r25, r31 - 26da: 08 95 ret + static void output(bool value) + { + if (value) + Port::dir(Port::dir() | (1<: - 26dc: 0f 93 push r16 - 26de: 1f 93 push r17 - 26e0: cf 93 push r28 - 26e2: df 93 push r29 - 26e4: 8c 01 movw r16, r24 - 26e6: eb 01 movw r28, r22 - 26e8: 8b 81 ldd r24, Y+3 ; 0x03 - 26ea: 81 fd sbrc r24, 1 - 26ec: 03 c0 rjmp .+6 ; 0x26f4 - 26ee: 0f ef ldi r16, 0xFF ; 255 - 26f0: 1f ef ldi r17, 0xFF ; 255 - 26f2: 1a c0 rjmp .+52 ; 0x2728 - 26f4: 82 ff sbrs r24, 2 - 26f6: 0d c0 rjmp .+26 ; 0x2712 - 26f8: 2e 81 ldd r18, Y+6 ; 0x06 - 26fa: 3f 81 ldd r19, Y+7 ; 0x07 - 26fc: 8c 81 ldd r24, Y+4 ; 0x04 - 26fe: 9d 81 ldd r25, Y+5 ; 0x05 - 2700: 28 17 cp r18, r24 - 2702: 39 07 cpc r19, r25 - 2704: 64 f4 brge .+24 ; 0x271e - 2706: e8 81 ld r30, Y - 2708: f9 81 ldd r31, Y+1 ; 0x01 - 270a: 01 93 st Z+, r16 - 270c: f9 83 std Y+1, r31 ; 0x01 - 270e: e8 83 st Y, r30 - 2710: 06 c0 rjmp .+12 ; 0x271e - 2712: e8 85 ldd r30, Y+8 ; 0x08 - 2714: f9 85 ldd r31, Y+9 ; 0x09 - 2716: 80 2f mov r24, r16 - 2718: 19 95 eicall - 271a: 89 2b or r24, r25 - 271c: 41 f7 brne .-48 ; 0x26ee - 271e: 8e 81 ldd r24, Y+6 ; 0x06 - 2720: 9f 81 ldd r25, Y+7 ; 0x07 - 2722: 01 96 adiw r24, 0x01 ; 1 - 2724: 9f 83 std Y+7, r25 ; 0x07 - 2726: 8e 83 std Y+6, r24 ; 0x06 - 2728: c8 01 movw r24, r16 - 272a: df 91 pop r29 - 272c: cf 91 pop r28 - 272e: 1f 91 pop r17 - 2730: 0f 91 pop r16 - 2732: 08 95 ret +namespace avrlib { -00002734 <__ultoa_invert>: - 2734: fa 01 movw r30, r20 - 2736: aa 27 eor r26, r26 - 2738: 28 30 cpi r18, 0x08 ; 8 - 273a: 51 f1 breq .+84 ; 0x2790 <__ultoa_invert+0x5c> - 273c: 20 31 cpi r18, 0x10 ; 16 - 273e: 81 f1 breq .+96 ; 0x27a0 <__ultoa_invert+0x6c> - 2740: e8 94 clt - 2742: 6f 93 push r22 - 2744: 6e 7f andi r22, 0xFE ; 254 - 2746: 6e 5f subi r22, 0xFE ; 254 - 2748: 7f 4f sbci r23, 0xFF ; 255 - 274a: 8f 4f sbci r24, 0xFF ; 255 - 274c: 9f 4f sbci r25, 0xFF ; 255 - 274e: af 4f sbci r26, 0xFF ; 255 - 2750: b1 e0 ldi r27, 0x01 ; 1 - 2752: 3e d0 rcall .+124 ; 0x27d0 <__ultoa_invert+0x9c> - 2754: b4 e0 ldi r27, 0x04 ; 4 - 2756: 3c d0 rcall .+120 ; 0x27d0 <__ultoa_invert+0x9c> - 2758: 67 0f add r22, r23 - 275a: 78 1f adc r23, r24 - 275c: 89 1f adc r24, r25 - 275e: 9a 1f adc r25, r26 - 2760: a1 1d adc r26, r1 - 2762: 68 0f add r22, r24 - 2764: 79 1f adc r23, r25 - 2766: 8a 1f adc r24, r26 - 2768: 91 1d adc r25, r1 - 276a: a1 1d adc r26, r1 - 276c: 6a 0f add r22, r26 - 276e: 71 1d adc r23, r1 - 2770: 81 1d adc r24, r1 - 2772: 91 1d adc r25, r1 - 2774: a1 1d adc r26, r1 - 2776: 20 d0 rcall .+64 ; 0x27b8 <__ultoa_invert+0x84> - 2778: 09 f4 brne .+2 ; 0x277c <__ultoa_invert+0x48> - 277a: 68 94 set - 277c: 3f 91 pop r19 - 277e: 2a e0 ldi r18, 0x0A ; 10 - 2780: 26 9f mul r18, r22 - 2782: 11 24 eor r1, r1 - 2784: 30 19 sub r19, r0 - 2786: 30 5d subi r19, 0xD0 ; 208 - 2788: 31 93 st Z+, r19 - 278a: de f6 brtc .-74 ; 0x2742 <__ultoa_invert+0xe> - 278c: cf 01 movw r24, r30 - 278e: 08 95 ret - 2790: 46 2f mov r20, r22 - 2792: 47 70 andi r20, 0x07 ; 7 - 2794: 40 5d subi r20, 0xD0 ; 208 - 2796: 41 93 st Z+, r20 - 2798: b3 e0 ldi r27, 0x03 ; 3 - 279a: 0f d0 rcall .+30 ; 0x27ba <__ultoa_invert+0x86> - 279c: c9 f7 brne .-14 ; 0x2790 <__ultoa_invert+0x5c> - 279e: f6 cf rjmp .-20 ; 0x278c <__ultoa_invert+0x58> - 27a0: 46 2f mov r20, r22 - 27a2: 4f 70 andi r20, 0x0F ; 15 - 27a4: 40 5d subi r20, 0xD0 ; 208 - 27a6: 4a 33 cpi r20, 0x3A ; 58 - 27a8: 18 f0 brcs .+6 ; 0x27b0 <__ultoa_invert+0x7c> - 27aa: 49 5d subi r20, 0xD9 ; 217 - 27ac: 31 fd sbrc r19, 1 - 27ae: 40 52 subi r20, 0x20 ; 32 - 27b0: 41 93 st Z+, r20 - 27b2: 02 d0 rcall .+4 ; 0x27b8 <__ultoa_invert+0x84> - 27b4: a9 f7 brne .-22 ; 0x27a0 <__ultoa_invert+0x6c> - 27b6: ea cf rjmp .-44 ; 0x278c <__ultoa_invert+0x58> - 27b8: b4 e0 ldi r27, 0x04 ; 4 - 27ba: a6 95 lsr r26 - 27bc: 97 95 ror r25 - 27be: 87 95 ror r24 - 27c0: 77 95 ror r23 - 27c2: 67 95 ror r22 - 27c4: ba 95 dec r27 - 27c6: c9 f7 brne .-14 ; 0x27ba <__ultoa_invert+0x86> - 27c8: 00 97 sbiw r24, 0x00 ; 0 - 27ca: 61 05 cpc r22, r1 - 27cc: 71 05 cpc r23, r1 - 27ce: 08 95 ret - 27d0: 9b 01 movw r18, r22 - 27d2: ac 01 movw r20, r24 - 27d4: 0a 2e mov r0, r26 - 27d6: 06 94 lsr r0 - 27d8: 57 95 ror r21 - 27da: 47 95 ror r20 - 27dc: 37 95 ror r19 - 27de: 27 95 ror r18 - 27e0: ba 95 dec r27 - 27e2: c9 f7 brne .-14 ; 0x27d6 <__ultoa_invert+0xa2> - 27e4: 62 0f add r22, r18 - 27e6: 73 1f adc r23, r19 - 27e8: 84 1f adc r24, r20 - 27ea: 95 1f adc r25, r21 - 27ec: a0 1d adc r26, r0 - 27ee: 08 95 ret + struct portj + { + static uint8_t port() { return PORTJ; } + 5b4: 80 81 ld r24, Z + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1<: - 27f0: f8 94 cli + static uint8_t pin() { return PINJ; } + static void pin(uint8_t v) { PINJ = v; } -000027f2 <__stop_program>: - 27f2: ff cf rjmp .-2 ; 0x27f2 <__stop_program> + static uint8_t dir() { return DDRJ; } + 5ba: 88 81 ld r24, Y + static bool value() { return (Port::pin() & (1< + static void port(uint8_t v) { PORTJ = v; } + + static uint8_t pin() { return PINJ; } + static void pin(uint8_t v) { PINJ = v; } + + static uint8_t dir() { return DDRJ; } + 5c4: 88 81 ld r24, Y + 5c6: 80 61 ori r24, 0x10 ; 16 + static void dir(uint8_t v) { DDRJ = v; } + 5c8: 88 83 st Y, r24 + static void port(uint8_t v) { PORTJ = v; } + + static uint8_t pin() { return PINJ; } + static void pin(uint8_t v) { PINJ = v; } + + static uint8_t dir() { return DDRJ; } + 5ca: 88 81 ld r24, Y + else + Port::dir(Port::dir() & ~(1< +class Rfm12B { + public: + Rfm12B() { + this->init(); + 5d8: 86 e0 ldi r24, 0x06 ; 6 + 5da: 92 e0 ldi r25, 0x02 ; 2 + 5dc: df 91 pop r29 + 5de: cf 91 pop r28 + 5e0: 1f 91 pop r17 + 5e2: 0f 91 pop r16 + 5e4: 0c 94 7c 02 jmp 0x4f8 ; 0x4f8 <_ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv> + +000005e8 <__tablejump_elpm__>: + 5e8: 07 90 elpm r0, Z+ + 5ea: f6 91 elpm r31, Z + 5ec: e0 2d mov r30, r0 + 5ee: 19 94 eijmp + +000005f0 : + 5f0: 0f 93 push r16 + 5f2: 1f 93 push r17 + 5f4: cf 93 push r28 + 5f6: df 93 push r29 + 5f8: cd b7 in r28, 0x3d ; 61 + 5fa: de b7 in r29, 0x3e ; 62 + 5fc: 2e 97 sbiw r28, 0x0e ; 14 + 5fe: 0f b6 in r0, 0x3f ; 63 + 600: f8 94 cli + 602: de bf out 0x3e, r29 ; 62 + 604: 0f be out 0x3f, r0 ; 63 + 606: cd bf out 0x3d, r28 ; 61 + 608: 0e 89 ldd r16, Y+22 ; 0x16 + 60a: 1f 89 ldd r17, Y+23 ; 0x17 + 60c: 86 e0 ldi r24, 0x06 ; 6 + 60e: 8c 83 std Y+4, r24 ; 0x04 + 610: 1a 83 std Y+2, r17 ; 0x02 + 612: 09 83 std Y+1, r16 ; 0x01 + 614: 8f ef ldi r24, 0xFF ; 255 + 616: 9f e7 ldi r25, 0x7F ; 127 + 618: 9e 83 std Y+6, r25 ; 0x06 + 61a: 8d 83 std Y+5, r24 ; 0x05 + 61c: ce 01 movw r24, r28 + 61e: 4a 96 adiw r24, 0x1a ; 26 + 620: ac 01 movw r20, r24 + 622: 68 8d ldd r22, Y+24 ; 0x18 + 624: 79 8d ldd r23, Y+25 ; 0x19 + 626: ce 01 movw r24, r28 + 628: 01 96 adiw r24, 0x01 ; 1 + 62a: 0e 94 27 03 call 0x64e ; 0x64e + 62e: ef 81 ldd r30, Y+7 ; 0x07 + 630: f8 85 ldd r31, Y+8 ; 0x08 + 632: e0 0f add r30, r16 + 634: f1 1f adc r31, r17 + 636: 10 82 st Z, r1 + 638: 2e 96 adiw r28, 0x0e ; 14 + 63a: 0f b6 in r0, 0x3f ; 63 + 63c: f8 94 cli + 63e: de bf out 0x3e, r29 ; 62 + 640: 0f be out 0x3f, r0 ; 63 + 642: cd bf out 0x3d, r28 ; 61 + 644: df 91 pop r29 + 646: cf 91 pop r28 + 648: 1f 91 pop r17 + 64a: 0f 91 pop r16 + 64c: 08 95 ret + +0000064e : + 64e: 2f 92 push r2 + 650: 3f 92 push r3 + 652: 4f 92 push r4 + 654: 5f 92 push r5 + 656: 6f 92 push r6 + 658: 7f 92 push r7 + 65a: 8f 92 push r8 + 65c: 9f 92 push r9 + 65e: af 92 push r10 + 660: bf 92 push r11 + 662: cf 92 push r12 + 664: df 92 push r13 + 666: ef 92 push r14 + 668: ff 92 push r15 + 66a: 0f 93 push r16 + 66c: 1f 93 push r17 + 66e: cf 93 push r28 + 670: df 93 push r29 + 672: cd b7 in r28, 0x3d ; 61 + 674: de b7 in r29, 0x3e ; 62 + 676: 2c 97 sbiw r28, 0x0c ; 12 + 678: 0f b6 in r0, 0x3f ; 63 + 67a: f8 94 cli + 67c: de bf out 0x3e, r29 ; 62 + 67e: 0f be out 0x3f, r0 ; 63 + 680: cd bf out 0x3d, r28 ; 61 + 682: 7c 01 movw r14, r24 + 684: 6b 01 movw r12, r22 + 686: 8a 01 movw r16, r20 + 688: fc 01 movw r30, r24 + 68a: 17 82 std Z+7, r1 ; 0x07 + 68c: 16 82 std Z+6, r1 ; 0x06 + 68e: 83 81 ldd r24, Z+3 ; 0x03 + 690: 81 ff sbrs r24, 1 + 692: c6 c1 rjmp .+908 ; 0xa20 + 694: 88 24 eor r8, r8 + 696: 83 94 inc r8 + 698: 91 2c mov r9, r1 + 69a: 8c 0e add r8, r28 + 69c: 9d 1e adc r9, r29 + 69e: f7 01 movw r30, r14 + 6a0: 93 81 ldd r25, Z+3 ; 0x03 + 6a2: f6 01 movw r30, r12 + 6a4: 93 fd sbrc r25, 3 + 6a6: 85 91 lpm r24, Z+ + 6a8: 93 ff sbrs r25, 3 + 6aa: 81 91 ld r24, Z+ + 6ac: 6f 01 movw r12, r30 + 6ae: 88 23 and r24, r24 + 6b0: 09 f4 brne .+2 ; 0x6b4 + 6b2: b2 c1 rjmp .+868 ; 0xa18 + 6b4: 85 32 cpi r24, 0x25 ; 37 + 6b6: 39 f4 brne .+14 ; 0x6c6 + 6b8: 93 fd sbrc r25, 3 + 6ba: 85 91 lpm r24, Z+ + 6bc: 93 ff sbrs r25, 3 + 6be: 81 91 ld r24, Z+ + 6c0: 6f 01 movw r12, r30 + 6c2: 85 32 cpi r24, 0x25 ; 37 + 6c4: 29 f4 brne .+10 ; 0x6d0 + 6c6: b7 01 movw r22, r14 + 6c8: 90 e0 ldi r25, 0x00 ; 0 + 6ca: 0e 94 42 05 call 0xa84 ; 0xa84 + 6ce: e7 cf rjmp .-50 ; 0x69e + 6d0: 51 2c mov r5, r1 + 6d2: 31 2c mov r3, r1 + 6d4: 20 e0 ldi r18, 0x00 ; 0 + 6d6: 20 32 cpi r18, 0x20 ; 32 + 6d8: a8 f4 brcc .+42 ; 0x704 + 6da: 8b 32 cpi r24, 0x2B ; 43 + 6dc: 61 f0 breq .+24 ; 0x6f6 + 6de: 28 f4 brcc .+10 ; 0x6ea + 6e0: 80 32 cpi r24, 0x20 ; 32 + 6e2: 51 f0 breq .+20 ; 0x6f8 + 6e4: 83 32 cpi r24, 0x23 ; 35 + 6e6: 71 f4 brne .+28 ; 0x704 + 6e8: 0b c0 rjmp .+22 ; 0x700 + 6ea: 8d 32 cpi r24, 0x2D ; 45 + 6ec: 39 f0 breq .+14 ; 0x6fc + 6ee: 80 33 cpi r24, 0x30 ; 48 + 6f0: 49 f4 brne .+18 ; 0x704 + 6f2: 21 60 ori r18, 0x01 ; 1 + 6f4: 28 c0 rjmp .+80 ; 0x746 + 6f6: 22 60 ori r18, 0x02 ; 2 + 6f8: 24 60 ori r18, 0x04 ; 4 + 6fa: 25 c0 rjmp .+74 ; 0x746 + 6fc: 28 60 ori r18, 0x08 ; 8 + 6fe: 23 c0 rjmp .+70 ; 0x746 + 700: 20 61 ori r18, 0x10 ; 16 + 702: 21 c0 rjmp .+66 ; 0x746 + 704: 27 fd sbrc r18, 7 + 706: 27 c0 rjmp .+78 ; 0x756 + 708: 38 2f mov r19, r24 + 70a: 30 53 subi r19, 0x30 ; 48 + 70c: 3a 30 cpi r19, 0x0A ; 10 + 70e: 78 f4 brcc .+30 ; 0x72e + 710: 26 ff sbrs r18, 6 + 712: 06 c0 rjmp .+12 ; 0x720 + 714: fa e0 ldi r31, 0x0A ; 10 + 716: 5f 9e mul r5, r31 + 718: 30 0d add r19, r0 + 71a: 11 24 eor r1, r1 + 71c: 53 2e mov r5, r19 + 71e: 13 c0 rjmp .+38 ; 0x746 + 720: 8a e0 ldi r24, 0x0A ; 10 + 722: 38 9e mul r3, r24 + 724: 30 0d add r19, r0 + 726: 11 24 eor r1, r1 + 728: 33 2e mov r3, r19 + 72a: 20 62 ori r18, 0x20 ; 32 + 72c: 0c c0 rjmp .+24 ; 0x746 + 72e: 8e 32 cpi r24, 0x2E ; 46 + 730: 21 f4 brne .+8 ; 0x73a + 732: 26 fd sbrc r18, 6 + 734: 71 c1 rjmp .+738 ; 0xa18 + 736: 20 64 ori r18, 0x40 ; 64 + 738: 06 c0 rjmp .+12 ; 0x746 + 73a: 8c 36 cpi r24, 0x6C ; 108 + 73c: 11 f4 brne .+4 ; 0x742 + 73e: 20 68 ori r18, 0x80 ; 128 + 740: 02 c0 rjmp .+4 ; 0x746 + 742: 88 36 cpi r24, 0x68 ; 104 + 744: 41 f4 brne .+16 ; 0x756 + 746: f6 01 movw r30, r12 + 748: 93 fd sbrc r25, 3 + 74a: 85 91 lpm r24, Z+ + 74c: 93 ff sbrs r25, 3 + 74e: 81 91 ld r24, Z+ + 750: 6f 01 movw r12, r30 + 752: 81 11 cpse r24, r1 + 754: c0 cf rjmp .-128 ; 0x6d6 + 756: 98 2f mov r25, r24 + 758: 95 54 subi r25, 0x45 ; 69 + 75a: 93 30 cpi r25, 0x03 ; 3 + 75c: 18 f0 brcs .+6 ; 0x764 + 75e: 90 52 subi r25, 0x20 ; 32 + 760: 93 30 cpi r25, 0x03 ; 3 + 762: 28 f4 brcc .+10 ; 0x76e + 764: 0c 5f subi r16, 0xFC ; 252 + 766: 1f 4f sbci r17, 0xFF ; 255 + 768: ff e3 ldi r31, 0x3F ; 63 + 76a: f9 83 std Y+1, r31 ; 0x01 + 76c: 0d c0 rjmp .+26 ; 0x788 + 76e: 83 36 cpi r24, 0x63 ; 99 + 770: 31 f0 breq .+12 ; 0x77e + 772: 83 37 cpi r24, 0x73 ; 115 + 774: 71 f0 breq .+28 ; 0x792 + 776: 83 35 cpi r24, 0x53 ; 83 + 778: 09 f0 breq .+2 ; 0x77c + 77a: 5e c0 rjmp .+188 ; 0x838 + 77c: 23 c0 rjmp .+70 ; 0x7c4 + 77e: f8 01 movw r30, r16 + 780: 80 81 ld r24, Z + 782: 89 83 std Y+1, r24 ; 0x01 + 784: 0e 5f subi r16, 0xFE ; 254 + 786: 1f 4f sbci r17, 0xFF ; 255 + 788: 44 24 eor r4, r4 + 78a: 43 94 inc r4 + 78c: 51 2c mov r5, r1 + 78e: 54 01 movw r10, r8 + 790: 15 c0 rjmp .+42 ; 0x7bc + 792: 38 01 movw r6, r16 + 794: f2 e0 ldi r31, 0x02 ; 2 + 796: 6f 0e add r6, r31 + 798: 71 1c adc r7, r1 + 79a: f8 01 movw r30, r16 + 79c: a0 80 ld r10, Z + 79e: b1 80 ldd r11, Z+1 ; 0x01 + 7a0: 26 ff sbrs r18, 6 + 7a2: 03 c0 rjmp .+6 ; 0x7aa + 7a4: 65 2d mov r22, r5 + 7a6: 70 e0 ldi r23, 0x00 ; 0 + 7a8: 02 c0 rjmp .+4 ; 0x7ae + 7aa: 6f ef ldi r22, 0xFF ; 255 + 7ac: 7f ef ldi r23, 0xFF ; 255 + 7ae: c5 01 movw r24, r10 + 7b0: 2c 87 std Y+12, r18 ; 0x0c + 7b2: 0e 94 37 05 call 0xa6e ; 0xa6e + 7b6: 2c 01 movw r4, r24 + 7b8: 83 01 movw r16, r6 + 7ba: 2c 85 ldd r18, Y+12 ; 0x0c + 7bc: 6f e7 ldi r22, 0x7F ; 127 + 7be: 26 2e mov r2, r22 + 7c0: 22 22 and r2, r18 + 7c2: 18 c0 rjmp .+48 ; 0x7f4 + 7c4: 38 01 movw r6, r16 + 7c6: f2 e0 ldi r31, 0x02 ; 2 + 7c8: 6f 0e add r6, r31 + 7ca: 71 1c adc r7, r1 + 7cc: f8 01 movw r30, r16 + 7ce: a0 80 ld r10, Z + 7d0: b1 80 ldd r11, Z+1 ; 0x01 + 7d2: 26 ff sbrs r18, 6 + 7d4: 03 c0 rjmp .+6 ; 0x7dc + 7d6: 65 2d mov r22, r5 + 7d8: 70 e0 ldi r23, 0x00 ; 0 + 7da: 02 c0 rjmp .+4 ; 0x7e0 + 7dc: 6f ef ldi r22, 0xFF ; 255 + 7de: 7f ef ldi r23, 0xFF ; 255 + 7e0: c5 01 movw r24, r10 + 7e2: 2c 87 std Y+12, r18 ; 0x0c + 7e4: 0e 94 2c 05 call 0xa58 ; 0xa58 + 7e8: 2c 01 movw r4, r24 + 7ea: 2c 85 ldd r18, Y+12 ; 0x0c + 7ec: 50 e8 ldi r21, 0x80 ; 128 + 7ee: 25 2e mov r2, r21 + 7f0: 22 2a or r2, r18 + 7f2: 83 01 movw r16, r6 + 7f4: 23 fc sbrc r2, 3 + 7f6: 1c c0 rjmp .+56 ; 0x830 + 7f8: 06 c0 rjmp .+12 ; 0x806 + 7fa: b7 01 movw r22, r14 + 7fc: 80 e2 ldi r24, 0x20 ; 32 + 7fe: 90 e0 ldi r25, 0x00 ; 0 + 800: 0e 94 42 05 call 0xa84 ; 0xa84 + 804: 3a 94 dec r3 + 806: 83 2d mov r24, r3 + 808: 90 e0 ldi r25, 0x00 ; 0 + 80a: 48 16 cp r4, r24 + 80c: 59 06 cpc r5, r25 + 80e: a8 f3 brcs .-22 ; 0x7fa + 810: 0f c0 rjmp .+30 ; 0x830 + 812: f5 01 movw r30, r10 + 814: 27 fc sbrc r2, 7 + 816: 85 91 lpm r24, Z+ + 818: 27 fe sbrs r2, 7 + 81a: 81 91 ld r24, Z+ + 81c: 5f 01 movw r10, r30 + 81e: b7 01 movw r22, r14 + 820: 90 e0 ldi r25, 0x00 ; 0 + 822: 0e 94 42 05 call 0xa84 ; 0xa84 + 826: 31 10 cpse r3, r1 + 828: 3a 94 dec r3 + 82a: f1 e0 ldi r31, 0x01 ; 1 + 82c: 4f 1a sub r4, r31 + 82e: 51 08 sbc r5, r1 + 830: 41 14 cp r4, r1 + 832: 51 04 cpc r5, r1 + 834: 71 f7 brne .-36 ; 0x812 + 836: ed c0 rjmp .+474 ; 0xa12 + 838: 84 36 cpi r24, 0x64 ; 100 + 83a: 11 f0 breq .+4 ; 0x840 + 83c: 89 36 cpi r24, 0x69 ; 105 + 83e: 41 f5 brne .+80 ; 0x890 + 840: f8 01 movw r30, r16 + 842: 27 ff sbrs r18, 7 + 844: 07 c0 rjmp .+14 ; 0x854 + 846: 60 81 ld r22, Z + 848: 71 81 ldd r23, Z+1 ; 0x01 + 84a: 82 81 ldd r24, Z+2 ; 0x02 + 84c: 93 81 ldd r25, Z+3 ; 0x03 + 84e: 0c 5f subi r16, 0xFC ; 252 + 850: 1f 4f sbci r17, 0xFF ; 255 + 852: 08 c0 rjmp .+16 ; 0x864 + 854: 60 81 ld r22, Z + 856: 71 81 ldd r23, Z+1 ; 0x01 + 858: 88 27 eor r24, r24 + 85a: 77 fd sbrc r23, 7 + 85c: 80 95 com r24 + 85e: 98 2f mov r25, r24 + 860: 0e 5f subi r16, 0xFE ; 254 + 862: 1f 4f sbci r17, 0xFF ; 255 + 864: 4f e6 ldi r20, 0x6F ; 111 + 866: b4 2e mov r11, r20 + 868: b2 22 and r11, r18 + 86a: 97 ff sbrs r25, 7 + 86c: 09 c0 rjmp .+18 ; 0x880 + 86e: 90 95 com r25 + 870: 80 95 com r24 + 872: 70 95 com r23 + 874: 61 95 neg r22 + 876: 7f 4f sbci r23, 0xFF ; 255 + 878: 8f 4f sbci r24, 0xFF ; 255 + 87a: 9f 4f sbci r25, 0xFF ; 255 + 87c: f0 e8 ldi r31, 0x80 ; 128 + 87e: bf 2a or r11, r31 + 880: 2a e0 ldi r18, 0x0A ; 10 + 882: 30 e0 ldi r19, 0x00 ; 0 + 884: a4 01 movw r20, r8 + 886: 0e 94 6e 05 call 0xadc ; 0xadc <__ultoa_invert> + 88a: a8 2e mov r10, r24 + 88c: a8 18 sub r10, r8 + 88e: 43 c0 rjmp .+134 ; 0x916 + 890: 85 37 cpi r24, 0x75 ; 117 + 892: 31 f4 brne .+12 ; 0x8a0 + 894: 3f ee ldi r19, 0xEF ; 239 + 896: b3 2e mov r11, r19 + 898: b2 22 and r11, r18 + 89a: 2a e0 ldi r18, 0x0A ; 10 + 89c: 30 e0 ldi r19, 0x00 ; 0 + 89e: 24 c0 rjmp .+72 ; 0x8e8 + 8a0: 99 ef ldi r25, 0xF9 ; 249 + 8a2: b9 2e mov r11, r25 + 8a4: b2 22 and r11, r18 + 8a6: 8f 36 cpi r24, 0x6F ; 111 + 8a8: b9 f0 breq .+46 ; 0x8d8 + 8aa: 20 f4 brcc .+8 ; 0x8b4 + 8ac: 88 35 cpi r24, 0x58 ; 88 + 8ae: 09 f0 breq .+2 ; 0x8b2 + 8b0: b3 c0 rjmp .+358 ; 0xa18 + 8b2: 0d c0 rjmp .+26 ; 0x8ce + 8b4: 80 37 cpi r24, 0x70 ; 112 + 8b6: 21 f0 breq .+8 ; 0x8c0 + 8b8: 88 37 cpi r24, 0x78 ; 120 + 8ba: 09 f0 breq .+2 ; 0x8be + 8bc: ad c0 rjmp .+346 ; 0xa18 + 8be: 02 c0 rjmp .+4 ; 0x8c4 + 8c0: 20 e1 ldi r18, 0x10 ; 16 + 8c2: b2 2a or r11, r18 + 8c4: b4 fe sbrs r11, 4 + 8c6: 0b c0 rjmp .+22 ; 0x8de + 8c8: 84 e0 ldi r24, 0x04 ; 4 + 8ca: b8 2a or r11, r24 + 8cc: 08 c0 rjmp .+16 ; 0x8de + 8ce: 24 ff sbrs r18, 4 + 8d0: 09 c0 rjmp .+18 ; 0x8e4 + 8d2: e6 e0 ldi r30, 0x06 ; 6 + 8d4: be 2a or r11, r30 + 8d6: 06 c0 rjmp .+12 ; 0x8e4 + 8d8: 28 e0 ldi r18, 0x08 ; 8 + 8da: 30 e0 ldi r19, 0x00 ; 0 + 8dc: 05 c0 rjmp .+10 ; 0x8e8 + 8de: 20 e1 ldi r18, 0x10 ; 16 + 8e0: 30 e0 ldi r19, 0x00 ; 0 + 8e2: 02 c0 rjmp .+4 ; 0x8e8 + 8e4: 20 e1 ldi r18, 0x10 ; 16 + 8e6: 32 e0 ldi r19, 0x02 ; 2 + 8e8: f8 01 movw r30, r16 + 8ea: b7 fe sbrs r11, 7 + 8ec: 07 c0 rjmp .+14 ; 0x8fc + 8ee: 60 81 ld r22, Z + 8f0: 71 81 ldd r23, Z+1 ; 0x01 + 8f2: 82 81 ldd r24, Z+2 ; 0x02 + 8f4: 93 81 ldd r25, Z+3 ; 0x03 + 8f6: 0c 5f subi r16, 0xFC ; 252 + 8f8: 1f 4f sbci r17, 0xFF ; 255 + 8fa: 06 c0 rjmp .+12 ; 0x908 + 8fc: 60 81 ld r22, Z + 8fe: 71 81 ldd r23, Z+1 ; 0x01 + 900: 80 e0 ldi r24, 0x00 ; 0 + 902: 90 e0 ldi r25, 0x00 ; 0 + 904: 0e 5f subi r16, 0xFE ; 254 + 906: 1f 4f sbci r17, 0xFF ; 255 + 908: a4 01 movw r20, r8 + 90a: 0e 94 6e 05 call 0xadc ; 0xadc <__ultoa_invert> + 90e: a8 2e mov r10, r24 + 910: a8 18 sub r10, r8 + 912: ff e7 ldi r31, 0x7F ; 127 + 914: bf 22 and r11, r31 + 916: b6 fe sbrs r11, 6 + 918: 0b c0 rjmp .+22 ; 0x930 + 91a: 2b 2d mov r18, r11 + 91c: 2e 7f andi r18, 0xFE ; 254 + 91e: a5 14 cp r10, r5 + 920: 50 f4 brcc .+20 ; 0x936 + 922: b4 fe sbrs r11, 4 + 924: 0a c0 rjmp .+20 ; 0x93a + 926: b2 fc sbrc r11, 2 + 928: 08 c0 rjmp .+16 ; 0x93a + 92a: 2b 2d mov r18, r11 + 92c: 2e 7e andi r18, 0xEE ; 238 + 92e: 05 c0 rjmp .+10 ; 0x93a + 930: 7a 2c mov r7, r10 + 932: 2b 2d mov r18, r11 + 934: 03 c0 rjmp .+6 ; 0x93c + 936: 7a 2c mov r7, r10 + 938: 01 c0 rjmp .+2 ; 0x93c + 93a: 75 2c mov r7, r5 + 93c: 24 ff sbrs r18, 4 + 93e: 0d c0 rjmp .+26 ; 0x95a + 940: fe 01 movw r30, r28 + 942: ea 0d add r30, r10 + 944: f1 1d adc r31, r1 + 946: 80 81 ld r24, Z + 948: 80 33 cpi r24, 0x30 ; 48 + 94a: 11 f4 brne .+4 ; 0x950 + 94c: 29 7e andi r18, 0xE9 ; 233 + 94e: 09 c0 rjmp .+18 ; 0x962 + 950: 22 ff sbrs r18, 2 + 952: 06 c0 rjmp .+12 ; 0x960 + 954: 73 94 inc r7 + 956: 73 94 inc r7 + 958: 04 c0 rjmp .+8 ; 0x962 + 95a: 82 2f mov r24, r18 + 95c: 86 78 andi r24, 0x86 ; 134 + 95e: 09 f0 breq .+2 ; 0x962 + 960: 73 94 inc r7 + 962: 23 fd sbrc r18, 3 + 964: 14 c0 rjmp .+40 ; 0x98e + 966: 20 ff sbrs r18, 0 + 968: 0f c0 rjmp .+30 ; 0x988 + 96a: 5a 2c mov r5, r10 + 96c: 73 14 cp r7, r3 + 96e: 60 f4 brcc .+24 ; 0x988 + 970: 53 0c add r5, r3 + 972: 57 18 sub r5, r7 + 974: 73 2c mov r7, r3 + 976: 08 c0 rjmp .+16 ; 0x988 + 978: b7 01 movw r22, r14 + 97a: 80 e2 ldi r24, 0x20 ; 32 + 97c: 90 e0 ldi r25, 0x00 ; 0 + 97e: 2c 87 std Y+12, r18 ; 0x0c + 980: 0e 94 42 05 call 0xa84 ; 0xa84 + 984: 73 94 inc r7 + 986: 2c 85 ldd r18, Y+12 ; 0x0c + 988: 73 14 cp r7, r3 + 98a: b0 f3 brcs .-20 ; 0x978 + 98c: 04 c0 rjmp .+8 ; 0x996 + 98e: 73 14 cp r7, r3 + 990: 10 f4 brcc .+4 ; 0x996 + 992: 37 18 sub r3, r7 + 994: 01 c0 rjmp .+2 ; 0x998 + 996: 31 2c mov r3, r1 + 998: 24 ff sbrs r18, 4 + 99a: 12 c0 rjmp .+36 ; 0x9c0 + 99c: b7 01 movw r22, r14 + 99e: 80 e3 ldi r24, 0x30 ; 48 + 9a0: 90 e0 ldi r25, 0x00 ; 0 + 9a2: 2c 87 std Y+12, r18 ; 0x0c + 9a4: 0e 94 42 05 call 0xa84 ; 0xa84 + 9a8: 2c 85 ldd r18, Y+12 ; 0x0c + 9aa: 22 ff sbrs r18, 2 + 9ac: 1e c0 rjmp .+60 ; 0x9ea + 9ae: 21 ff sbrs r18, 1 + 9b0: 03 c0 rjmp .+6 ; 0x9b8 + 9b2: 88 e5 ldi r24, 0x58 ; 88 + 9b4: 90 e0 ldi r25, 0x00 ; 0 + 9b6: 02 c0 rjmp .+4 ; 0x9bc + 9b8: 88 e7 ldi r24, 0x78 ; 120 + 9ba: 90 e0 ldi r25, 0x00 ; 0 + 9bc: b7 01 movw r22, r14 + 9be: 0c c0 rjmp .+24 ; 0x9d8 + 9c0: 82 2f mov r24, r18 + 9c2: 86 78 andi r24, 0x86 ; 134 + 9c4: 91 f0 breq .+36 ; 0x9ea + 9c6: 21 fd sbrc r18, 1 + 9c8: 02 c0 rjmp .+4 ; 0x9ce + 9ca: 80 e2 ldi r24, 0x20 ; 32 + 9cc: 01 c0 rjmp .+2 ; 0x9d0 + 9ce: 8b e2 ldi r24, 0x2B ; 43 + 9d0: 27 fd sbrc r18, 7 + 9d2: 8d e2 ldi r24, 0x2D ; 45 + 9d4: b7 01 movw r22, r14 + 9d6: 90 e0 ldi r25, 0x00 ; 0 + 9d8: 0e 94 42 05 call 0xa84 ; 0xa84 + 9dc: 06 c0 rjmp .+12 ; 0x9ea + 9de: b7 01 movw r22, r14 + 9e0: 80 e3 ldi r24, 0x30 ; 48 + 9e2: 90 e0 ldi r25, 0x00 ; 0 + 9e4: 0e 94 42 05 call 0xa84 ; 0xa84 + 9e8: 5a 94 dec r5 + 9ea: a5 14 cp r10, r5 + 9ec: c0 f3 brcs .-16 ; 0x9de + 9ee: aa 94 dec r10 + 9f0: f4 01 movw r30, r8 + 9f2: ea 0d add r30, r10 + 9f4: f1 1d adc r31, r1 + 9f6: b7 01 movw r22, r14 + 9f8: 80 81 ld r24, Z + 9fa: 90 e0 ldi r25, 0x00 ; 0 + 9fc: 0e 94 42 05 call 0xa84 ; 0xa84 + a00: a1 10 cpse r10, r1 + a02: f5 cf rjmp .-22 ; 0x9ee + a04: 06 c0 rjmp .+12 ; 0xa12 + a06: b7 01 movw r22, r14 + a08: 80 e2 ldi r24, 0x20 ; 32 + a0a: 90 e0 ldi r25, 0x00 ; 0 + a0c: 0e 94 42 05 call 0xa84 ; 0xa84 + a10: 3a 94 dec r3 + a12: 31 10 cpse r3, r1 + a14: f8 cf rjmp .-16 ; 0xa06 + a16: 43 ce rjmp .-890 ; 0x69e + a18: f7 01 movw r30, r14 + a1a: 26 81 ldd r18, Z+6 ; 0x06 + a1c: 37 81 ldd r19, Z+7 ; 0x07 + a1e: 02 c0 rjmp .+4 ; 0xa24 + a20: 2f ef ldi r18, 0xFF ; 255 + a22: 3f ef ldi r19, 0xFF ; 255 + a24: c9 01 movw r24, r18 + a26: 2c 96 adiw r28, 0x0c ; 12 + a28: 0f b6 in r0, 0x3f ; 63 + a2a: f8 94 cli + a2c: de bf out 0x3e, r29 ; 62 + a2e: 0f be out 0x3f, r0 ; 63 + a30: cd bf out 0x3d, r28 ; 61 + a32: df 91 pop r29 + a34: cf 91 pop r28 + a36: 1f 91 pop r17 + a38: 0f 91 pop r16 + a3a: ff 90 pop r15 + a3c: ef 90 pop r14 + a3e: df 90 pop r13 + a40: cf 90 pop r12 + a42: bf 90 pop r11 + a44: af 90 pop r10 + a46: 9f 90 pop r9 + a48: 8f 90 pop r8 + a4a: 7f 90 pop r7 + a4c: 6f 90 pop r6 + a4e: 5f 90 pop r5 + a50: 4f 90 pop r4 + a52: 3f 90 pop r3 + a54: 2f 90 pop r2 + a56: 08 95 ret + +00000a58 : + a58: fc 01 movw r30, r24 + a5a: 05 90 lpm r0, Z+ + a5c: 61 50 subi r22, 0x01 ; 1 + a5e: 70 40 sbci r23, 0x00 ; 0 + a60: 01 10 cpse r0, r1 + a62: d8 f7 brcc .-10 ; 0xa5a + a64: 80 95 com r24 + a66: 90 95 com r25 + a68: 8e 0f add r24, r30 + a6a: 9f 1f adc r25, r31 + a6c: 08 95 ret + +00000a6e : + a6e: fc 01 movw r30, r24 + a70: 61 50 subi r22, 0x01 ; 1 + a72: 70 40 sbci r23, 0x00 ; 0 + a74: 01 90 ld r0, Z+ + a76: 01 10 cpse r0, r1 + a78: d8 f7 brcc .-10 ; 0xa70 + a7a: 80 95 com r24 + a7c: 90 95 com r25 + a7e: 8e 0f add r24, r30 + a80: 9f 1f adc r25, r31 + a82: 08 95 ret + +00000a84 : + a84: 0f 93 push r16 + a86: 1f 93 push r17 + a88: cf 93 push r28 + a8a: df 93 push r29 + a8c: 8c 01 movw r16, r24 + a8e: eb 01 movw r28, r22 + a90: 8b 81 ldd r24, Y+3 ; 0x03 + a92: 81 fd sbrc r24, 1 + a94: 03 c0 rjmp .+6 ; 0xa9c + a96: 0f ef ldi r16, 0xFF ; 255 + a98: 1f ef ldi r17, 0xFF ; 255 + a9a: 1a c0 rjmp .+52 ; 0xad0 + a9c: 82 ff sbrs r24, 2 + a9e: 0d c0 rjmp .+26 ; 0xaba + aa0: 2e 81 ldd r18, Y+6 ; 0x06 + aa2: 3f 81 ldd r19, Y+7 ; 0x07 + aa4: 8c 81 ldd r24, Y+4 ; 0x04 + aa6: 9d 81 ldd r25, Y+5 ; 0x05 + aa8: 28 17 cp r18, r24 + aaa: 39 07 cpc r19, r25 + aac: 64 f4 brge .+24 ; 0xac6 + aae: e8 81 ld r30, Y + ab0: f9 81 ldd r31, Y+1 ; 0x01 + ab2: 01 93 st Z+, r16 + ab4: f9 83 std Y+1, r31 ; 0x01 + ab6: e8 83 st Y, r30 + ab8: 06 c0 rjmp .+12 ; 0xac6 + aba: e8 85 ldd r30, Y+8 ; 0x08 + abc: f9 85 ldd r31, Y+9 ; 0x09 + abe: 80 2f mov r24, r16 + ac0: 19 95 eicall + ac2: 89 2b or r24, r25 + ac4: 41 f7 brne .-48 ; 0xa96 + ac6: 8e 81 ldd r24, Y+6 ; 0x06 + ac8: 9f 81 ldd r25, Y+7 ; 0x07 + aca: 01 96 adiw r24, 0x01 ; 1 + acc: 9f 83 std Y+7, r25 ; 0x07 + ace: 8e 83 std Y+6, r24 ; 0x06 + ad0: c8 01 movw r24, r16 + ad2: df 91 pop r29 + ad4: cf 91 pop r28 + ad6: 1f 91 pop r17 + ad8: 0f 91 pop r16 + ada: 08 95 ret + +00000adc <__ultoa_invert>: + adc: fa 01 movw r30, r20 + ade: aa 27 eor r26, r26 + ae0: 28 30 cpi r18, 0x08 ; 8 + ae2: 51 f1 breq .+84 ; 0xb38 <__ultoa_invert+0x5c> + ae4: 20 31 cpi r18, 0x10 ; 16 + ae6: 81 f1 breq .+96 ; 0xb48 <__ultoa_invert+0x6c> + ae8: e8 94 clt + aea: 6f 93 push r22 + aec: 6e 7f andi r22, 0xFE ; 254 + aee: 6e 5f subi r22, 0xFE ; 254 + af0: 7f 4f sbci r23, 0xFF ; 255 + af2: 8f 4f sbci r24, 0xFF ; 255 + af4: 9f 4f sbci r25, 0xFF ; 255 + af6: af 4f sbci r26, 0xFF ; 255 + af8: b1 e0 ldi r27, 0x01 ; 1 + afa: 3e d0 rcall .+124 ; 0xb78 <__ultoa_invert+0x9c> + afc: b4 e0 ldi r27, 0x04 ; 4 + afe: 3c d0 rcall .+120 ; 0xb78 <__ultoa_invert+0x9c> + b00: 67 0f add r22, r23 + b02: 78 1f adc r23, r24 + b04: 89 1f adc r24, r25 + b06: 9a 1f adc r25, r26 + b08: a1 1d adc r26, r1 + b0a: 68 0f add r22, r24 + b0c: 79 1f adc r23, r25 + b0e: 8a 1f adc r24, r26 + b10: 91 1d adc r25, r1 + b12: a1 1d adc r26, r1 + b14: 6a 0f add r22, r26 + b16: 71 1d adc r23, r1 + b18: 81 1d adc r24, r1 + b1a: 91 1d adc r25, r1 + b1c: a1 1d adc r26, r1 + b1e: 20 d0 rcall .+64 ; 0xb60 <__ultoa_invert+0x84> + b20: 09 f4 brne .+2 ; 0xb24 <__ultoa_invert+0x48> + b22: 68 94 set + b24: 3f 91 pop r19 + b26: 2a e0 ldi r18, 0x0A ; 10 + b28: 26 9f mul r18, r22 + b2a: 11 24 eor r1, r1 + b2c: 30 19 sub r19, r0 + b2e: 30 5d subi r19, 0xD0 ; 208 + b30: 31 93 st Z+, r19 + b32: de f6 brtc .-74 ; 0xaea <__ultoa_invert+0xe> + b34: cf 01 movw r24, r30 + b36: 08 95 ret + b38: 46 2f mov r20, r22 + b3a: 47 70 andi r20, 0x07 ; 7 + b3c: 40 5d subi r20, 0xD0 ; 208 + b3e: 41 93 st Z+, r20 + b40: b3 e0 ldi r27, 0x03 ; 3 + b42: 0f d0 rcall .+30 ; 0xb62 <__ultoa_invert+0x86> + b44: c9 f7 brne .-14 ; 0xb38 <__ultoa_invert+0x5c> + b46: f6 cf rjmp .-20 ; 0xb34 <__ultoa_invert+0x58> + b48: 46 2f mov r20, r22 + b4a: 4f 70 andi r20, 0x0F ; 15 + b4c: 40 5d subi r20, 0xD0 ; 208 + b4e: 4a 33 cpi r20, 0x3A ; 58 + b50: 18 f0 brcs .+6 ; 0xb58 <__ultoa_invert+0x7c> + b52: 49 5d subi r20, 0xD9 ; 217 + b54: 31 fd sbrc r19, 1 + b56: 40 52 subi r20, 0x20 ; 32 + b58: 41 93 st Z+, r20 + b5a: 02 d0 rcall .+4 ; 0xb60 <__ultoa_invert+0x84> + b5c: a9 f7 brne .-22 ; 0xb48 <__ultoa_invert+0x6c> + b5e: ea cf rjmp .-44 ; 0xb34 <__ultoa_invert+0x58> + b60: b4 e0 ldi r27, 0x04 ; 4 + b62: a6 95 lsr r26 + b64: 97 95 ror r25 + b66: 87 95 ror r24 + b68: 77 95 ror r23 + b6a: 67 95 ror r22 + b6c: ba 95 dec r27 + b6e: c9 f7 brne .-14 ; 0xb62 <__ultoa_invert+0x86> + b70: 00 97 sbiw r24, 0x00 ; 0 + b72: 61 05 cpc r22, r1 + b74: 71 05 cpc r23, r1 + b76: 08 95 ret + b78: 9b 01 movw r18, r22 + b7a: ac 01 movw r20, r24 + b7c: 0a 2e mov r0, r26 + b7e: 06 94 lsr r0 + b80: 57 95 ror r21 + b82: 47 95 ror r20 + b84: 37 95 ror r19 + b86: 27 95 ror r18 + b88: ba 95 dec r27 + b8a: c9 f7 brne .-14 ; 0xb7e <__ultoa_invert+0xa2> + b8c: 62 0f add r22, r18 + b8e: 73 1f adc r23, r19 + b90: 84 1f adc r24, r20 + b92: 95 1f adc r25, r21 + b94: a0 1d adc r26, r0 + b96: 08 95 ret + +00000b98 <_exit>: + b98: f8 94 cli + +00000b9a <__stop_program>: + b9a: ff cf rjmp .-2 ; 0xb9a <__stop_program> diff --git a/V2/Programm/Programm/Debug/Programm.map b/V2/Programm/Programm/Debug/Programm.map index f726152..b1424aa 100644 --- a/V2/Programm/Programm/Debug/Programm.map +++ b/V2/Programm/Programm/Debug/Programm.map @@ -30,13 +30,23 @@ Discarded input sections .group 0x00000000 0x8 Programm.o .group 0x00000000 0x8 Programm.o .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o + .group 0x00000000 0x8 Programm.o .text 0x00000000 0x0 Programm.o - .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh - 0x00000000 0x2c Programm.o - .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5writeEbh - 0x00000000 0x40 Programm.o - .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7newlineEh - 0x00000000 0x102 Programm.o .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) .text.libgcc.mul @@ -230,7 +240,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x27f4 +.text 0x00000000 0xb9c *(.vectors) .vectors 0x00000000 0xe4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6/crtm2560.o 0x00000000 __vector_default @@ -348,39 +358,65 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x0000014c __vector_42 0x00000150 . = ALIGN (0x2) *(.text.*) + .text._ZN6avrlib3pinINS_5portjELh4EE3setEb.part.8 + 0x00000150 0xc Programm.o + .text._ZN6avrlib3pinINS_5portlELh5EE3setEb.part.14 + 0x0000015c 0xc Programm.o + .text._ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE9send_softEh.isra.49 + 0x00000168 0x24 Programm.o + .text._ZN7Mcp4151IN6avrlib5portcELi0ENS0_5portgELi0ES2_Li1EE15digitalPotWriteEj.isra.50 + 0x0000018c 0x1a Programm.o + .text._ZN3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EE9send_softEh.isra.17 + 0x000001a6 0x44 Programm.o + .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE7toggleEEv.isra.5 + 0x000001ea 0x1e Programm.o + .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE14setInstructionEh.isra.26 + 0x00000208 0x16 Programm.o + .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5clearEv.isra.30 + 0x0000021e 0x14 Programm.o + .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE5lputcEh.isra.36 + 0x00000232 0xac Programm.o + .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EE8printHexEj.isra.38 + 0x000002de 0x82 Programm.o + .text._ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4sendEj.isra.39 + 0x00000360 0x40 Programm.o + .text.startup.main + 0x000003a0 0x6e Programm.o + 0x000003a0 main .text._ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC2Ev - 0x00000150 0x240 Programm.o - 0x00000150 _ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev - 0x00000150 _ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC2Ev - .text.main 0x00000390 0x1ea6 Programm.o - 0x00000390 main - .text._GLOBAL__sub_I_d - 0x00002236 0xa Programm.o - .text.libgcc 0x00002240 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_tablejump_elpm.o) - 0x00002240 __tablejump_elpm__ + 0x0000040e 0xea Programm.o + 0x0000040e _ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC1Ev + 0x0000040e _ZN7DisplayI7Mcp4151IN6avrlib5portcELi0ENS1_5portgELi0ES3_Li1EE6LedPWMINS1_5portlELi3EENS1_5portdES6_Li7ELi6ELi5EEC2Ev + .text._ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv + 0x000004f8 0x96 Programm.o + 0x000004f8 _ZN6Rfm12BI3SpiIN6avrlib5portjELi4ELi3ELi6ELi5ELi1EELh1ELh0ELh7ELm433920ELj9600ELh0ELh6EE4initEv + .text.startup._GLOBAL__sub_I_d + 0x0000058e 0x5a Programm.o + .text.libgcc 0x000005e8 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_tablejump_elpm.o) + 0x000005e8 __tablejump_elpm__ .text.avr-libc - 0x00002248 0x5e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - 0x00002248 sprintf + 0x000005f0 0x5e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + 0x000005f0 sprintf .text.avr-libc - 0x000022a6 0x40a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - 0x000022a6 vfprintf + 0x0000064e 0x40a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + 0x0000064e vfprintf .text.avr-libc - 0x000026b0 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(strnlen_P.o) - 0x000026b0 strnlen_P + 0x00000a58 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(strnlen_P.o) + 0x00000a58 strnlen_P .text.avr-libc - 0x000026c6 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(strnlen.o) - 0x000026c6 strnlen + 0x00000a6e 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(strnlen.o) + 0x00000a6e strnlen .text.avr-libc - 0x000026dc 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) - 0x000026dc fputc + 0x00000a84 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + 0x00000a84 fputc .text.avr-libc - 0x00002734 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(ultoa_invert.o) - 0x00002734 __ultoa_invert - 0x000027f0 . = ALIGN (0x2) + 0x00000adc 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(ultoa_invert.o) + 0x00000adc __ultoa_invert + 0x00000b98 . = ALIGN (0x2) *(.fini9) - .fini9 0x000027f0 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) - 0x000027f0 _exit - 0x000027f0 exit + .fini9 0x00000b98 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) + 0x00000b98 _exit + 0x00000b98 exit *(.fini9) *(.fini8) *(.fini8) @@ -399,11 +435,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x000027f0 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) + .fini0 0x00000b98 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr6\libgcc.a(_exit.o) *(.fini0) - 0x000027f4 _etext = . + 0x00000b9c _etext = . -.data 0x00800200 0x30 load address 0x000027f4 +.data 0x00800200 0x6 load address 0x00000b9c 0x00800200 PROVIDE (__data_start, .) *(.data) .data 0x00800200 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6/crtm2560.o @@ -423,30 +459,30 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.rodata) *(.rodata*) .rodata.str1.1 - 0x00800200 0x2f Programm.o + 0x00800200 0x6 Programm.o *(.gnu.linkonce.d*) - 0x00800230 . = ALIGN (0x2) - *fill* 0x0080022f 0x1 - 0x00800230 _edata = . - 0x00800230 PROVIDE (__data_end, .) + 0x00800206 . = ALIGN (0x2) + 0x00800206 _edata = . + 0x00800206 PROVIDE (__data_end, .) -.bss 0x00800230 0x2 - 0x00800230 PROVIDE (__bss_start, .) +.bss 0x00800206 0x3 + 0x00800206 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800230 0x2 Programm.o - 0x00800230 d + .bss 0x00800206 0x3 Programm.o + 0x00800206 r + 0x00800207 d *(.bss*) *(COMMON) - 0x00800232 PROVIDE (__bss_end, .) - 0x000027f4 __data_load_start = LOADADDR (.data) - 0x00002824 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00800209 PROVIDE (__bss_end, .) + 0x00000b9c __data_load_start = LOADADDR (.data) + 0x00000ba2 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800232 0x0 - 0x00800232 PROVIDE (__noinit_start, .) +.noinit 0x00800209 0x0 + 0x00800209 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800232 PROVIDE (__noinit_end, .) - 0x00800232 _end = . - 0x00800232 PROVIDE (__heap_start, .) + 0x00800209 PROVIDE (__noinit_end, .) + 0x00800209 _end = . + 0x00800209 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -513,66 +549,66 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0xa8 +.debug_aranges 0x00000000 0xf0 *(.debug_aranges) .debug_aranges - 0x00000000 0x48 Programm.o + 0x00000000 0x90 Programm.o .debug_aranges - 0x00000048 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + 0x00000090 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) .debug_aranges - 0x00000068 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + 0x000000b0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) .debug_aranges - 0x00000088 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + 0x000000d0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x17fac +.debug_info 0x00000000 0x46c9 *(.debug_info) - .debug_info 0x00000000 0x176eb Programm.o - .debug_info 0x000176eb 0x204 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_info 0x000178ef 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_info 0x00017e38 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_info 0x00000000 0x3e08 Programm.o + .debug_info 0x00003e08 0x204 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_info 0x0000400c 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_info 0x00004555 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x80c +.debug_abbrev 0x00000000 0x89d *(.debug_abbrev) - .debug_abbrev 0x00000000 0x41b Programm.o - .debug_abbrev 0x0000041b 0x12a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_abbrev 0x00000545 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_abbrev 0x0000071b 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_abbrev 0x00000000 0x4ac Programm.o + .debug_abbrev 0x000004ac 0x12a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_abbrev 0x000005d6 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_abbrev 0x000007ac 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) -.debug_line 0x00000000 0x2bc7 +.debug_line 0x00000000 0xd6b *(.debug_line) - .debug_line 0x00000000 0x26a0 Programm.o - .debug_line 0x000026a0 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_line 0x000027ee 0x2ff c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_line 0x00002aed 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_line 0x00000000 0x844 Programm.o + .debug_line 0x00000844 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_line 0x00000992 0x2ff c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_line 0x00000c91 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) -.debug_frame 0x00000000 0x180 +.debug_frame 0x00000000 0x260 *(.debug_frame) - .debug_frame 0x00000000 0x84 Programm.o - .debug_frame 0x00000084 0x40 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_frame 0x000000c4 0x84 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_frame 0x00000148 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_frame 0x00000000 0x164 Programm.o + .debug_frame 0x00000164 0x40 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_frame 0x000001a4 0x84 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_frame 0x00000228 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) -.debug_str 0x00000000 0x1cb8 +.debug_str 0x00000000 0x97d0 *(.debug_str) - .debug_str 0x00000000 0x1b09 Programm.o - 0x1b53 (size before relaxing) - .debug_str 0x00001b09 0xa3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_str 0x00000000 0x9635 Programm.o + 0x979d (size before relaxing) + .debug_str 0x00009635 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) 0x127 (size before relaxing) - .debug_str 0x00001bac 0xbf c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_str 0x000096d1 0xb2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) 0x198 (size before relaxing) - .debug_str 0x00001c6b 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_str 0x00009783 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) 0xf8 (size before relaxing) -.debug_loc 0x00000000 0xa922 +.debug_loc 0x00000000 0x1071 *(.debug_loc) - .debug_loc 0x00000000 0xa1ab Programm.o - .debug_loc 0x0000a1ab 0x61 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_loc 0x0000a20c 0x623 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_loc 0x0000a82f 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_loc 0x00000000 0x8fa Programm.o + .debug_loc 0x000008fa 0x61 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_loc 0x0000095b 0x623 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_loc 0x00000f7e 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) .debug_macinfo *(.debug_macinfo) @@ -580,14 +616,33 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0xdf8 +.debug_ranges 0x00000000 0x1b8 *(.debug_ranges) - .debug_ranges 0x00000000 0xdc8 Programm.o - .debug_ranges 0x00000dc8 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) - .debug_ranges 0x00000dd8 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) - .debug_ranges 0x00000de8 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) + .debug_ranges 0x00000000 0x188 Programm.o + .debug_ranges 0x00000188 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(sprintf.o) + .debug_ranges 0x00000198 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(vfprintf_std.o) + .debug_ranges 0x000001a8 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr6\libc.a(fputc.o) -.debug_macro +.debug_macro 0x00000000 0x2f76 *(.debug_macro) + .debug_macro 0x00000000 0x1be Programm.o + .debug_macro 0x000001be 0x5c2 Programm.o + .debug_macro 0x00000780 0x10 Programm.o + .debug_macro 0x00000790 0x10 Programm.o + .debug_macro 0x000007a0 0x1e Programm.o + .debug_macro 0x000007be 0x9e Programm.o + .debug_macro 0x0000085c 0x1e62 Programm.o + .debug_macro 0x000026be 0xd6 Programm.o + .debug_macro 0x00002794 0x2ea Programm.o + .debug_macro 0x00002a7e 0xd9 Programm.o + .debug_macro 0x00002b57 0x34 Programm.o + .debug_macro 0x00002b8b 0x18 Programm.o + .debug_macro 0x00002ba3 0x6c Programm.o + .debug_macro 0x00002c0f 0x10 Programm.o + .debug_macro 0x00002c1f 0x16d Programm.o + .debug_macro 0x00002d8c 0x58 Programm.o + .debug_macro 0x00002de4 0x10 Programm.o + .debug_macro 0x00002df4 0x97 Programm.o + .debug_macro 0x00002e8b 0xeb Programm.o OUTPUT(Programm.elf elf32-avr) LOAD linker stubs diff --git a/V2/Programm/Programm/Debug/Programm.srec b/V2/Programm/Programm/Debug/Programm.srec index c6a39b2..74ae1cb 100644 --- a/V2/Programm/Programm/Debug/Programm.srec +++ b/V2/Programm/Programm/Debug/Programm.srec @@ -13,633 +13,177 @@ S11300A00C94A6000C94A6000C94A6000C94A60034 S11300B00C94A6000C94A6000C94A6000C94A60024 S11300C00C94A6000C94A6000C94A6000C94A60014 S11300D00C94A6000C94A6000C94A6000C94A60004 -S11300E00C94A6000C941B111B1111241FBECFEFFE +S11300E00C94A6000C94C702C70211241FBECFEFC4 S11300F0D1E2DEBFCDBF00E00CBF12E0A0E0B2E071 -S1130100E4EFF7E200E00BBF02C007900D92A033CA -S1130110B107D9F722E0A0E3B2E001C01D92A233F7 +S1130100ECE9FBE000E00BBF02C007900D92A630C3 +S1130110B107D9F722E0A6E0B2E001C01D92A930F0 S1130120B207E1F710E0CAEED0E000E006C0229783 -S11301300109FE010BBF0E942011C83ED10780E0D7 -S11301400807A9F70E94C8010C94F8130C94000046 -S1130150A198999A409A389AA098989AEAE0F1E07E -S113016080818860808381E88093200189E0809386 -S11301702101A8E2B1E01C921C92808180688083F6 -S11301808081806480838081806280838FEF8AB9DC -S11301908FEF99EF0197F1F700C00000EBE0F1E079 -S11301A080818F7B808380818F7D808388E38BB97E -S11301B0808180688083A3EDB0E01197F1F700C0DF -S11301C0000080818F7780838FE19EE40197F1F7AF -S11301D000C00000808180688083A3EDB0E01197A7 -S11301E0F1F700C0000080818F7780838FED91E06C -S11301F00197F1F700C00000808180688083A3ED3F -S1130200B0E01197F1F700C0000080818F77808300 -S11302108FED91E00197F1F700C0000080818068C4 -S11302208083A3EDB0E01197F1F700C00000808156 -S11302308F7780838FED91E00197F1F700C0000084 -S113024080818F7B808380818F7D80831BB88081B8 -S113025080688083A3EDB0E01197F1F700C000003F -S113026080818F7780838FE39FE10197F1F700C04E -S1130270000080818F7B808380818F7D808381E0FB -S11302808BB9908190689083A3EDB0E01197F1F75A -S113029000C0000090819F779083AFE3BFE1119786 -S11302A0F1F700C0000090819F7B908390819F7D37 -S11302B0908394E09BB9908190689083A3EDB0E023 -S11302C01197F1F700C0000090819F779083BFEFF2 -S11302D021EE34E0B15020403040E1F700C000008E -S11302E090819F7B908390819F7D90839CE09BB9BC -S11302F0908190689083A3EDB0E01197F1F700C06E -S1130300000090819F779083AFE3BFE11197F1F7ED -S113031000C0000090819F7B908390819F7D90839B -S11303208BB980818068808383ED90E00197F1F739 -S113033000C0000080818F778083AFE3BFE1119715 -S1130340F1F700C00000409898E081E088231CF495 -S1130350A09A989A02C0A098989AA19A999A880FFC -S113036000C000C00000A198999A915079F788E0E4 -S1130370A098989AA19A999A00C000C00000A198E8 -S1130380999A8150A9F7409A8FEF80932801089594 -S1130390CF93DF93CDB7DEB76D970FB6F894DEBF7A -S11303A00FBECDBF0BE011E00F2EF8E2AF2EBB2441 -S11303B0B394F02D0F2EFAEF6F2EF02D262C9924E6 -S11303C09A946894772477F80F2EF0ED8F2EF02D01 -S11303D06E0125E1C20ED11C3C2C4D2CEE24E3947D -S11303E0F12CEC0EFD1E5E2CFD8ED8018C918F7BC2 -S11303F08C938C918F7D8C9381E08BB98C918068E8 -S11304008C93E3EDF0E03197F1F700C000008C919C -S11304108F778C93EFE3FFE13197F1F700C0000091 -S1130420D5012C92409888E0A098989AA19A999A1C -S113043000C000C00000A198999A8150A9F798E0E3 -S11304408DEE88231CF4A09A989A02C0A098989ADA -S1130450A19A999A880F00C000C00000A198999AA7 -S1130460915079F7409AE0E0F2E060E940EC22EE46 -S113047075EF5FEE31EEA3C3843E09F09EC0D80150 -S11304808C9180648C938C918F7D8C931BB81AB85B -S11304908C9180688C9383ED90E00197F1F700C014 -S11304A000008C918F778C9389B19AB88F30D1F4F6 -S11304B08C918F7B8C938C918F7D8C934BB98C9189 -S11304C080688C9383ED90E00197F1F700C0000001 -S11304D08C918F778C938FE99FE00197F1F700C09F -S11304E0000056C08F34D9F4D8018C918F7B8C9343 -S11304F08C918F7D8C936BB98C9180688C9383EDF8 -S113050090E00197F1F700C000008C918F778C93F5 -S11305108FE99FE00197F1F700C0000039C08F31E7 -S1130520D9F4D8018C918F7B8C938C918F7D8C9393 -S11305308BB88C9180688C9383ED90E00197F1F7F0 -S113054000C000008C918F778C938FE99FE0019716 -S1130550F1F700C000001CC08F35D1F4D8018C9194 -S11305608F7B8C938C918F7D8C937BB88C918068DE -S11305708C9383ED90E00197F1F700C000008C911B -S11305808F778C938FE99FE00197F1F700C000000B -S1130590D8018C918F7B8C938C9180628C933BB926 -S11305A08C9180688C9383ED90E00197F1F700C003 -S11305B000008C918F778C9302C3863F09F09EC014 -S11305C0D8018C9180648C938C918F7D8C931BB813 -S11305D01AB88C9180688C9383ED90E00197F1F7C1 -S11305E000C000008C918F778C9389B19AB88F30BA -S11305F0D1F48C918F7B8C938C918F7D8C934BB9A0 -S11306008C9180688C9383ED90E00197F1F700C0A2 -S113061000008C918F778C938FE99FE00197F1F71D -S113062000C0000056C08F34D9F4D8018C918F7B60 -S11306308C938C918F7D8C936BB98C9180688C9307 -S113064083ED90E00197F1F700C000008C918F7763 -S11306508C938FE99FE00197F1F700C0000039C047 -S11306608F31D9F4D8018C918F7B8C938C918F7DB1 -S11306708C938BB88C9180688C9383ED90E0019778 -S1130680F1F700C000008C918F778C938FE99FE085 -S11306900197F1F700C000001CC08F35D1F4D801D8 -S11306A08C918F7B8C938C918F7D8C937BB88C9168 -S11306B080688C9383ED90E00197F1F700C000000F -S11306C08C918F778C938FE99FE00197F1F700C0AD -S11306D00000D8018C918F7B8C938C9180628C93D9 -S11306E05BB98C9180688C9383ED90E00197F1F76E -S11306F000C000008C918F778C9361C28C3F09F00D -S11307009EC0D8018C9180648C938C918F7D8C9346 -S11307101BB81AB88C9180688C9383ED90E0019794 -S1130720F1F700C000008C918F778C9389B19AB84F -S11307308F30D1F48C918F7B8C938C918F7D8C93A3 -S11307404BB98C9180688C9383ED90E00197F1F71D -S113075000C000008C918F778C938FE99FE0019704 -S1130760F1F700C0000056C08F34D9F4D8018C9141 -S11307708F7B8C938C918F7D8C936BB98C918068DB -S11307808C9383ED90E00197F1F700C000008C9109 -S11307908F778C938FE99FE00197F1F700C00000F9 -S11307A039C08F31D9F4D8018C918F7B8C938C9183 -S11307B08F7D8C938BB88C9180688C9383ED90E0C3 -S11307C00197F1F700C000008C918F778C938FE92B -S11307D09FE00197F1F700C000001CC08F35D1F4F1 -S11307E0D8018C918F7B8C938C918F7D8C937BB86B -S11307F08C9180688C9383ED90E00197F1F700C0B1 -S113080000008C918F778C938FE99FE00197F1F72B -S113081000C00000D8018C918F7B8C938C918062F6 -S11308208C937BB98C9180688C9383ED90E00197D5 -S1130830F1F700C000008C918F778C93C0C18F3D7D -S113084009F09EC0D8018C9180648C938C918F7D2B -S11308508C931BB81AB88C9180688C9383ED90E0CC -S11308600197F1F700C000008C918F778C9389B1C8 -S11308709AB88F30D1F48C918F7B8C938C918F7D2F -S11308808C934BB98C9180688C9383ED90E00197A5 -S1130890F1F700C000008C918F778C938FE99FE073 -S11308A00197F1F700C0000056C08F34D9F4D80185 -S11308B08C918F7B8C938C918F7D8C936BB98C9165 -S11308C080688C9383ED90E00197F1F700C00000FD -S11308D08C918F778C938FE99FE00197F1F700C09B -S11308E0000039C08F31D9F4D8018C918F7B8C935F -S11308F08C918F7D8C938BB88C9180688C9383EDD5 -S113090090E00197F1F700C000008C918F778C93F1 -S11309108FE99FE00197F1F700C000001CC08F35FC -S1130920D1F4D8018C918F7B8C938C918F7D8C9397 -S11309307BB88C9180688C9383ED90E00197F1F7FC -S113094000C000008C918F778C938FE99FE0019712 -S1130950F1F700C00000D8018C918F7B8C938C91AF -S113096080628C932BB98C9180688C9383ED90E09A -S11309700197F1F700C000008C918F778C931FC111 -S1130980D8019C9190649C939C919F7D9C931BB8EF -S11309901AB89C9190689C93A3EDB0E01197F1F77D -S11309A000C00000D8019C919F779C9399B19AB89C -S11309B08A3009F079C0892F80558031D0F48C9128 -S11309C08F7B8C938C918F7D8C937BB88C9180687A -S11309D08C9383ED90E00197F1F700C000008C91B7 -S11309E08F778C938FE99FE00197F1F700C00000A7 -S11309F0E6C09031D8F4D8018C918F7B8C938C9184 -S1130A008F7D8C934BB98C9180688C9383ED90E0AF -S1130A100197F1F700C000008C918F778C938FE9D8 -S1130A209FE00197F1F700C00000C9C0892F8054EE -S1130A308031D8F4D8018C918F7B8C938C918F7DED -S1130A408C936BB98C9180688C9383ED90E00197C3 -S1130A50F1F700C000008C918F778C938FE99FE0B1 -S1130A600197F1F700C00000AAC09051903108F03E -S1130A70A6C0D8018C918F7B8C938C918F7D8C93A5 -S1130A808BB88C9180688C9383ED90E00197F1F79B -S1130A9000C000008C918F778C938FE99FE00197C1 -S1130AA0F1F700C000008BC09F30E1F4D8019C91A5 -S1130AB09F7B9C939C919F7D9C934BB99C91906848 -S1130AC09C93A3EDB0E01197F1F700C00000D801AA -S1130AD09C919F779C93AFE9BFE01197F1F700C019 -S1130AE0000059C09F34E1F4D8019C919F7B9C93F2 -S1130AF09C919F7D9C936BB99C9190689C93A3ED72 -S1130B00B0E01197F1F700C00000D8019C919F77E5 -S1130B109C93AFE9BFE01197F1F700C000003BC020 -S1130B209F31E1F4D8019C919F7B9C939C919F7D84 -S1130B309C938BB89C9190689C93A3EDB0E0119723 -S1130B40F1F700C00000D8019C919F779C93AFE916 -S1130B50BFE01197F1F700C000001DC09F35D9F424 -S1130B60D8019C919F7B9C939C919F7D9C937BB887 -S1130B709C9190689C93A3EDB0E01197F1F700C0AD -S1130B800000D8019C919F779C93AFE9BFE0119737 -S1130B90F1F700C00000D8019C919F7B9C939C912D -S1130BA090629C938BB98C9180688C9383ED90E0D8 -S1130BB00197F1F700C000008C918F778C9381919D -S1130BC081115ACC1F926F9282E192E09F938F938E -S1130BD0DF92CF920E9424110F900F900F900F90EC -S1130BE00F900F90E32DF42D60E940EC22EE75EFA9 -S1130BF05FEE31EEA3C3843E09F09EC0D8018C9110 -S1130C0080648C938C918F7D8C931BB81AB88C91D3 -S1130C1080688C9383ED90E00197F1F700C00000A9 -S1130C208C918F778C9389B19AB88F30D1F48C9151 -S1130C308F7B8C938C918F7D8C934BB98C91806836 -S1130C408C9383ED90E00197F1F700C000008C9144 -S1130C508F778C938FE99FE00197F1F700C0000034 -S1130C6056C08F34D9F4D8018C918F7B8C938C919E -S1130C708F7D8C936BB98C9180688C9383ED90E01D -S1130C800197F1F700C000008C918F778C938FE966 -S1130C909FE00197F1F700C0000039C08F31D9F40B -S1130CA0D8018C918F7B8C938C918F7D8C938BB896 -S1130CB08C9180688C9383ED90E00197F1F700C0EC -S1130CC000008C918F778C938FE99FE00197F1F767 -S1130CD000C000001CC08F35D1F4D8018C918F7BEB -S1130CE08C938C918F7D8C937BB88C9180688C9342 -S1130CF083ED90E00197F1F700C000008C918F77AD -S1130D008C938FE99FE00197F1F700C00000D801B0 -S1130D108C918F7B8C938C9180628C933BB98C915A -S1130D2080688C9383ED90E00197F1F700C0000098 -S1130D308C918F778C9302C3863F09F09EC0D801B3 -S1130D408C9180648C938C918F7D8C931BB81AB892 -S1130D508C9180688C9383ED90E00197F1F700C04B -S1130D6000008C918F778C9389B19AB88F30D1F42D -S1130D708C918F7B8C938C918F7D8C934BB98C91C0 -S1130D8080688C9383ED90E00197F1F700C0000038 -S1130D908C918F778C938FE99FE00197F1F700C0D6 -S1130DA0000056C08F34D9F4D8018C918F7B8C937A -S1130DB08C918F7D8C936BB98C9180688C9383ED2F -S1130DC090E00197F1F700C000008C918F778C932D -S1130DD08FE99FE00197F1F700C0000039C08F311F -S1130DE0D9F4D8018C918F7B8C938C918F7D8C93CB -S1130DF08BB88C9180688C9383ED90E00197F1F728 -S1130E0000C000008C918F778C938FE99FE001974D -S1130E10F1F700C000001CC08F35D1F4D8018C91CB -S1130E208F7B8C938C918F7D8C937BB88C91806815 -S1130E308C9383ED90E00197F1F700C000008C9152 -S1130E408F778C938FE99FE00197F1F700C0000042 -S1130E50D8018C918F7B8C938C9180628C935BB93D -S1130E608C9180688C9383ED90E00197F1F700C03A -S1130E7000008C918F778C9361C28C3F09F09EC0E7 -S1130E80D8018C9180648C938C918F7D8C931BB84A -S1130E901AB88C9180688C9383ED90E00197F1F7F8 -S1130EA000C000008C918F778C9389B19AB88F30F1 -S1130EB0D1F48C918F7B8C938C918F7D8C934BB9D7 -S1130EC08C9180688C9383ED90E00197F1F700C0DA -S1130ED000008C918F778C938FE99FE00197F1F755 -S1130EE000C0000056C08F34D9F4D8018C918F7B98 -S1130EF08C938C918F7D8C936BB98C9180688C933F -S1130F0083ED90E00197F1F700C000008C918F779A -S1130F108C938FE99FE00197F1F700C0000039C07E -S1130F208F31D9F4D8018C918F7B8C938C918F7DE8 -S1130F308C938BB88C9180688C9383ED90E00197AF -S1130F40F1F700C000008C918F778C938FE99FE0BC -S1130F500197F1F700C000001CC08F35D1F4D8010F -S1130F608C918F7B8C938C918F7D8C937BB88C919F -S1130F7080688C9383ED90E00197F1F700C0000046 -S1130F808C918F778C938FE99FE00197F1F700C0E4 -S1130F900000D8018C918F7B8C938C9180628C9310 -S1130FA07BB98C9180688C9383ED90E00197F1F785 -S1130FB000C000008C918F778C93C0C18F3D09F0E5 -S1130FC09EC0D8018C9180648C938C918F7D8C937E -S1130FD01BB81AB88C9180688C9383ED90E00197CC -S1130FE0F1F700C000008C918F778C9389B19AB887 -S1130FF08F30D1F48C918F7B8C938C918F7D8C93DB -S11310004BB98C9180688C9383ED90E00197F1F754 -S113101000C000008C918F778C938FE99FE001973B -S1131020F1F700C0000056C08F34D9F4D8018C9178 -S11310308F7B8C938C918F7D8C936BB98C91806812 -S11310408C9383ED90E00197F1F700C000008C9140 -S11310508F778C938FE99FE00197F1F700C0000030 -S113106039C08F31D9F4D8018C918F7B8C938C91BA -S11310708F7D8C938BB88C9180688C9383ED90E0FA -S11310800197F1F700C000008C918F778C938FE962 -S11310909FE00197F1F700C000001CC08F35D1F428 -S11310A0D8018C918F7B8C938C918F7D8C937BB8A2 -S11310B08C9180688C9383ED90E00197F1F700C0E8 -S11310C000008C918F778C938FE99FE00197F1F763 -S11310D000C00000D8018C918F7B8C938C9180622E -S11310E08C932BB98C9180688C9383ED90E001975D -S11310F0F1F700C000008C918F778C931FC1D80149 -S11311009C9190649C939C919F7D9C931BB81AB86E -S11311109C9190689C93A3EDB0E01197F1F700C007 -S11311200000D8019C919F779C9399B19AB88A301A -S113113009F079C0892F80558031D0F48C918F7B50 -S11311408C938C918F7D8C937BB88C9180688C93DD -S113115083ED90E00197F1F700C000008C918F7748 -S11311608C938FE99FE00197F1F700C00000E6C07F -S11311709031D8F4D8018C918F7B8C938C918F7D96 -S11311808C934BB98C9180688C9383ED90E001979C -S1131190F1F700C000008C918F778C938FE99FE06A -S11311A00197F1F700C00000C9C0892F8054803135 -S11311B0D8F4D8018C918F7B8C938C918F7D8C93F8 -S11311C06BB98C9180688C9383ED90E00197F1F773 -S11311D000C000008C918F778C938FE99FE001977A -S11311E0F1F700C00000AAC09051903108F0A6C0E9 -S11311F0D8018C918F7B8C938C918F7D8C938BB841 -S11312008C9180688C9383ED90E00197F1F700C096 -S113121000008C918F778C938FE99FE00197F1F711 -S113122000C000008BC09F30E1F4D8019C919F7BEB -S11312309C939C919F7D9C934BB99C9190689C93AB -S1131240A3EDB0E01197F1F700C00000D8019C9124 -S11312509F779C93AFE9BFE01197F1F700C00000BE -S113126059C09F34E1F4D8019C919F7B9C939C913D -S11312709F7D9C936BB99C9190689C93A3EDB0E087 -S11312801197F1F700C00000D8019C919F779C93BF -S1131290AFE9BFE01197F1F700C000003BC09F31F8 -S11312A0E1F4D8019C919F7B9C939C919F7D9C939E -S11312B08BB89C9190689C93A3EDB0E01197F1F7E3 -S11312C000C00000D8019C919F779C93AFE9BFE0D8 -S11312D01197F1F700C000001DC09F35D9F4D80163 -S11312E09C919F7B9C939C919F7D9C937BB89C91AC -S11312F090689C93A3EDB0E01197F1F700C0000053 -S1131300D8019C919F779C93AFE9BFE01197F1F7C7 -S113131000C00000D8019C919F7B9C939C9190629B -S11313209C938BB98C9180688C9383ED90E00197AA -S1131330F1F700C000008C918F778C93819181111B -S11313405ACC1F9286E98F9389E192E09F938F9301 -S1131350FF92EF920E9424110F900F900F900F9024 -S11313600F900F90E52DFD8D60E940EC22EE75EFB6 -S11313705FEE31EEA3C3843E09F09EC0D8018C9188 -S113138080648C938C918F7D8C931BB81AB88C914C -S113139080688C9383ED90E00197F1F700C0000022 -S11313A08C918F778C9389B19AB88F30D1F48C91CA -S11313B08F7B8C938C918F7D8C934BB98C918068AF -S11313C08C9383ED90E00197F1F700C000008C91BD -S11313D08F778C938FE99FE00197F1F700C00000AD -S11313E056C08F34D9F4D8018C918F7B8C938C9117 -S11313F08F7D8C936BB98C9180688C9383ED90E096 -S11314000197F1F700C000008C918F778C938FE9DE -S11314109FE00197F1F700C0000039C08F31D9F483 -S1131420D8018C918F7B8C938C918F7D8C938BB80E -S11314308C9180688C9383ED90E00197F1F700C064 -S113144000008C918F778C938FE99FE00197F1F7DF -S113145000C000001CC08F35D1F4D8018C918F7B63 -S11314608C938C918F7D8C937BB88C9180688C93BA -S113147083ED90E00197F1F700C000008C918F7725 -S11314808C938FE99FE00197F1F700C00000D80129 -S11314908C918F7B8C938C9180628C933BB98C91D3 -S11314A080688C9383ED90E00197F1F700C0000011 -S11314B08C918F778C9302C3863F09F09EC0D8012C -S11314C08C9180648C938C918F7D8C931BB81AB80B -S11314D08C9180688C9383ED90E00197F1F700C0C4 -S11314E000008C918F778C9389B19AB88F30D1F4A6 -S11314F08C918F7B8C938C918F7D8C934BB98C9139 -S113150080688C9383ED90E00197F1F700C00000B0 -S11315108C918F778C938FE99FE00197F1F700C04E -S1131520000056C08F34D9F4D8018C918F7B8C93F2 -S11315308C918F7D8C936BB98C9180688C9383EDA7 -S113154090E00197F1F700C000008C918F778C93A5 -S11315508FE99FE00197F1F700C0000039C08F3197 -S1131560D9F4D8018C918F7B8C938C918F7D8C9343 -S11315708BB88C9180688C9383ED90E00197F1F7A0 -S113158000C000008C918F778C938FE99FE00197C6 -S1131590F1F700C000001CC08F35D1F4D8018C9144 -S11315A08F7B8C938C918F7D8C937BB88C9180688E -S11315B08C9383ED90E00197F1F700C000008C91CB -S11315C08F778C938FE99FE00197F1F700C00000BB -S11315D0D8018C918F7B8C938C9180628C935BB9B6 -S11315E08C9180688C9383ED90E00197F1F700C0B3 -S11315F000008C918F778C9361C28C3F09F09EC060 -S1131600D8018C9180648C938C918F7D8C931BB8C2 -S11316101AB88C9180688C9383ED90E00197F1F770 -S113162000C000008C918F778C9389B19AB88F3069 -S1131630D1F48C918F7B8C938C918F7D8C934BB94F -S11316408C9180688C9383ED90E00197F1F700C052 -S113165000008C918F778C938FE99FE00197F1F7CD -S113166000C0000056C08F34D9F4D8018C918F7B10 -S11316708C938C918F7D8C936BB98C9180688C93B7 -S113168083ED90E00197F1F700C000008C918F7713 -S11316908C938FE99FE00197F1F700C0000039C0F7 -S11316A08F31D9F4D8018C918F7B8C938C918F7D61 -S11316B08C938BB88C9180688C9383ED90E0019728 -S11316C0F1F700C000008C918F778C938FE99FE035 -S11316D00197F1F700C000001CC08F35D1F4D80188 -S11316E08C918F7B8C938C918F7D8C937BB88C9118 -S11316F080688C9383ED90E00197F1F700C00000BF -S11317008C918F778C938FE99FE00197F1F700C05C -S11317100000D8018C918F7B8C938C9180628C9388 -S11317207BB98C9180688C9383ED90E00197F1F7FD -S113173000C000008C918F778C93C0C18F3D09F05D -S11317409EC0D8018C9180648C938C918F7D8C93F6 -S11317501BB81AB88C9180688C9383ED90E0019744 -S1131760F1F700C000008C918F778C9389B19AB8FF -S11317708F30D1F48C918F7B8C938C918F7D8C9353 -S11317804BB98C9180688C9383ED90E00197F1F7CD -S113179000C000008C918F778C938FE99FE00197B4 -S11317A0F1F700C0000056C08F34D9F4D8018C91F1 -S11317B08F7B8C938C918F7D8C936BB98C9180688B -S11317C08C9383ED90E00197F1F700C000008C91B9 -S11317D08F778C938FE99FE00197F1F700C00000A9 -S11317E039C08F31D9F4D8018C918F7B8C938C9133 -S11317F08F7D8C938BB88C9180688C9383ED90E073 -S11318000197F1F700C000008C918F778C938FE9DA -S11318109FE00197F1F700C000001CC08F35D1F4A0 -S1131820D8018C918F7B8C938C918F7D8C937BB81A -S11318308C9180688C9383ED90E00197F1F700C060 -S113184000008C918F778C938FE99FE00197F1F7DB -S113185000C00000D8018C918F7B8C938C918062A6 -S11318608C932BB98C9180688C9383ED90E00197D5 -S1131870F1F700C000008C918F778C931FC1D801C1 -S11318809C9190649C939C919F7D9C931BB81AB8E7 -S11318909C9190689C93A3EDB0E01197F1F700C080 -S11318A00000D8019C919F779C9399B19AB88A3093 -S11318B009F079C0892F80558031D0F48C918F7BC9 -S11318C08C938C918F7D8C937BB88C9180688C9356 -S11318D083ED90E00197F1F700C000008C918F77C1 -S11318E08C938FE99FE00197F1F700C00000E6C0F8 -S11318F09031D8F4D8018C918F7B8C938C918F7D0F -S11319008C934BB98C9180688C9383ED90E0019714 -S1131910F1F700C000008C918F778C938FE99FE0E2 -S11319200197F1F700C00000C9C0892F80548031AD -S1131930D8F4D8018C918F7B8C938C918F7D8C9370 -S11319406BB98C9180688C9383ED90E00197F1F7EB -S113195000C000008C918F778C938FE99FE00197F2 -S1131960F1F700C00000AAC09051903108F0A6C061 -S1131970D8018C918F7B8C938C918F7D8C938BB8B9 -S11319808C9180688C9383ED90E00197F1F700C00F -S113199000008C918F778C938FE99FE00197F1F78A -S11319A000C000008BC09F30E1F4D8019C919F7B64 -S11319B09C939C919F7D9C934BB99C9190689C9324 -S11319C0A3EDB0E01197F1F700C00000D8019C919D -S11319D09F779C93AFE9BFE01197F1F700C0000037 -S11319E059C09F34E1F4D8019C919F7B9C939C91B6 -S11319F09F7D9C936BB99C9190689C93A3EDB0E000 -S1131A001197F1F700C00000D8019C919F779C9337 -S1131A10AFE9BFE01197F1F700C000003BC09F3170 -S1131A20E1F4D8019C919F7B9C939C919F7D9C9316 -S1131A308BB89C9190689C93A3EDB0E01197F1F75B -S1131A4000C00000D8019C919F779C93AFE9BFE050 -S1131A501197F1F700C000001DC09F35D9F4D801DB -S1131A609C919F7B9C939C919F7D9C937BB89C9124 -S1131A7090689C93A3EDB0E01197F1F700C00000CB -S1131A80D8019C919F779C93AFE9BFE01197F1F740 -S1131A9000C00000D8019C919F7B9C939C91906214 -S1131AA09C938BB98C9180688C9383ED90E0019723 -S1131AB0F1F700C000008C918F778C938191811194 -S1131AC05ACCE2E0F2E060E940EC22EE75EF5FEE22 -S1131AD031EEA3C3843E09F09EC0D8018C9180648A -S1131AE08C938C918F7D8C931BB81AB88C918068E1 -S1131AF08C9383ED90E00197F1F700C000008C9186 -S1131B008F778C9389B19AB88F30D1F48C918F7B75 -S1131B108C938C918F7D8C934BB98C9180688C9332 -S1131B2083ED90E00197F1F700C000008C918F776E -S1131B308C938FE99FE00197F1F700C0000056C035 -S1131B408F34D9F4D8018C918F7B8C938C918F7DB9 -S1131B508C936BB98C9180688C9383ED90E00197A2 -S1131B60F1F700C000008C918F778C938FE99FE090 -S1131B700197F1F700C0000039C08F31D9F4D801C2 -S1131B808C918F7B8C938C918F7D8C938BB88C9163 -S1131B9080688C9383ED90E00197F1F700C000001A -S1131BA08C918F778C938FE99FE00197F1F700C0B8 -S1131BB000001CC08F35D1F4D8018C918F7B8C939D -S1131BC08C918F7D8C937BB88C9180688C9383ED02 -S1131BD090E00197F1F700C000008C918F778C930F -S1131BE08FE99FE00197F1F700C00000D8018C91C4 -S1131BF08F7B8C938C9180628C933BB98C918068A1 -S1131C008C9383ED90E00197F1F700C000008C9174 -S1131C108F778C9302C3863F09F09EC0D8018C91C4 -S1131C2080648C938C918F7D8C931BB81AB88C91A3 -S1131C3080688C9383ED90E00197F1F700C0000079 -S1131C408C918F778C9389B19AB88F30D1F48C9121 -S1131C508F7B8C938C918F7D8C934BB98C91806806 -S1131C608C9383ED90E00197F1F700C000008C9114 -S1131C708F778C938FE99FE00197F1F700C0000004 -S1131C8056C08F34D9F4D8018C918F7B8C938C916E -S1131C908F7D8C936BB98C9180688C9383ED90E0ED -S1131CA00197F1F700C000008C918F778C938FE936 -S1131CB09FE00197F1F700C0000039C08F31D9F4DB -S1131CC0D8018C918F7B8C938C918F7D8C938BB866 -S1131CD08C9180688C9383ED90E00197F1F700C0BC -S1131CE000008C918F778C938FE99FE00197F1F737 -S1131CF000C000001CC08F35D1F4D8018C918F7BBB -S1131D008C938C918F7D8C937BB88C9180688C9311 -S1131D1083ED90E00197F1F700C000008C918F777C -S1131D208C938FE99FE00197F1F700C00000D80180 -S1131D308C918F7B8C938C9180628C935BB98C910A -S1131D4080688C9383ED90E00197F1F700C0000068 -S1131D508C918F778C9361C28C3F09F09EC0D8011F -S1131D608C9180648C938C918F7D8C931BB81AB862 -S1131D708C9180688C9383ED90E00197F1F700C01B -S1131D8000008C918F778C9389B19AB88F30D1F4FD -S1131D908C918F7B8C938C918F7D8C934BB98C9190 -S1131DA080688C9383ED90E00197F1F700C0000008 -S1131DB08C918F778C938FE99FE00197F1F700C0A6 -S1131DC0000056C08F34D9F4D8018C918F7B8C934A -S1131DD08C918F7D8C936BB98C9180688C9383EDFF -S1131DE090E00197F1F700C000008C918F778C93FD -S1131DF08FE99FE00197F1F700C0000039C08F31EF -S1131E00D9F4D8018C918F7B8C938C918F7D8C939A -S1131E108BB88C9180688C9383ED90E00197F1F7F7 -S1131E2000C000008C918F778C938FE99FE001971D -S1131E30F1F700C000001CC08F35D1F4D8018C919B -S1131E408F7B8C938C918F7D8C937BB88C918068E5 -S1131E508C9383ED90E00197F1F700C000008C9122 -S1131E608F778C938FE99FE00197F1F700C0000012 -S1131E70D8018C918F7B8C938C9180628C937BB9ED -S1131E808C9180688C9383ED90E00197F1F700C00A -S1131E9000008C918F778C93C0C18F3D09F09EC058 -S1131EA0D8018C9180648C938C918F7D8C931BB81A -S1131EB01AB88C9180688C9383ED90E00197F1F7C8 -S1131EC000C000008C918F778C9389B19AB88F30C1 -S1131ED0D1F48C918F7B8C938C918F7D8C934BB9A7 -S1131EE08C9180688C9383ED90E00197F1F700C0AA -S1131EF000008C918F778C938FE99FE00197F1F725 -S1131F0000C0000056C08F34D9F4D8018C918F7B67 -S1131F108C938C918F7D8C936BB98C9180688C930E -S1131F2083ED90E00197F1F700C000008C918F776A -S1131F308C938FE99FE00197F1F700C0000039C04E -S1131F408F31D9F4D8018C918F7B8C938C918F7DB8 -S1131F508C938BB88C9180688C9383ED90E001977F -S1131F60F1F700C000008C918F778C938FE99FE08C -S1131F700197F1F700C000001CC08F35D1F4D801DF -S1131F808C918F7B8C938C918F7D8C937BB88C916F -S1131F9080688C9383ED90E00197F1F700C0000016 -S1131FA08C918F778C938FE99FE00197F1F700C0B4 -S1131FB00000D8018C918F7B8C938C9180628C93E0 -S1131FC02BB98C9180688C9383ED90E00197F1F7A5 -S1131FD000C000008C918F778C931FC1D8019C9115 -S1131FE090649C939C919F7D9C931BB81AB89C9180 -S1131FF090689C93A3EDB0E01197F1F700C0000046 -S1132000D8019C919F779C9399B19AB88A3009F032 -S113201079C0892F80558031D0F48C918F7B8C933B -S11320208C918F7D8C937BB88C9180688C9383ED9D -S113203090E00197F1F700C000008C918F778C93AA -S11320408FE99FE00197F1F700C00000E6C09031EE -S1132050D8F4D8018C918F7B8C938C918F7D8C9349 -S11320604BB98C9180688C9383ED90E00197F1F7E4 -S113207000C000008C918F778C938FE99FE00197CB -S1132080F1F700C00000C9C0892F80548031D8F412 -S1132090D8018C918F7B8C938C918F7D8C936BB9B1 -S11320A08C9180688C9383ED90E00197F1F700C0E8 -S11320B000008C918F778C938FE99FE00197F1F763 -S11320C000C00000AAC09051903108F0A6C0D80109 -S11320D08C918F7B8C938C918F7D8C938BB88C910E -S11320E080688C9383ED90E00197F1F700C00000C5 -S11320F08C918F778C938FE99FE00197F1F700C063 -S113210000008BC09F30E1F4D8019C919F7B9C938D -S11321109C919F7D9C934BB99C9190689C93A3ED5B -S1132120B0E01197F1F700C00000D8019C919F77AF -S11321309C93AFE9BFE01197F1F700C0000059C0CC -S11321409F34E1F4D8019C919F7B9C939C919F7D4B -S11321509C936BB99C9190689C93A3EDB0E011970C -S1132160F1F700C00000D8019C919F779C93AFE9E0 -S1132170BFE01197F1F700C000003BC09F31E1F4CC -S1132180D8019C919F7B9C939C919F7D9C938BB841 -S11321909C9190689C93A3EDB0E01197F1F700C077 -S11321A00000D8019C919F779C93AFE9BFE0119701 -S11321B0F1F700C000001DC09F35D9F4D8019C91EF -S11321C09F7B9C939C919F7D9C937BB89C919068F2 -S11321D09C93A3EDB0E01197F1F700C00000D80183 -S11321E09C919F779C93AFE9BFE01197F1F700C0F2 -S11321F00000D8019C919F7B9C939C9190629C933E -S11322008BB98C9180688C9383ED90E00197F1F702 -S113221000C000008C918F778C93819181115ACCEE -S1132220BFEFE3EDF0E3B150E040F040E1F700C070 -S113223000000C94F50180E392E00E94A800089548 -S11322400790F691E02D19940F931F93CF93DF938A -S1132250CDB7DEB72E970FB6F894DEBF0FBECDBF55 -S11322600E891F8986E08C831A8309838FEF9FE789 -S11322709E838D83CE014A96AC01688D798DCE0103 -S113228001960E945311EF81F885E00FF11F10822F -S11322902E960FB6F894DEBF0FBECDBFDF91CF915F -S11322A01F910F9108952F923F924F925F926F92D8 -S11322B07F928F929F92AF92BF92CF92DF92EF92D2 -S11322C0FF920F931F93CF93DF93CDB7DEB72C9775 -S11322D00FB6F894DEBF0FBECDBF7C016B018A013F -S11322E0FC0117821682838181FFC6C188248394EE -S11322F0912C8C0E9D1EF7019381F60193FD85911F -S113230093FF81916F01882309F4B2C1853239F4B6 -S113231093FD859193FF81916F01853229F4B70173 -S113232090E00E946E13E7CF512C312C20E0203234 -S1132330A8F48B3261F028F4803251F0833271F4C6 -S11323400BC08D3239F0803349F4216028C02260FB -S1132350246025C0286023C0206121C027FD27C038 -S1132360382F30533A3078F426FF06C0FAE05F9EE7 -S1132370300D1124532E13C08AE0389E300D1124E1 -S1132380332E20620CC08E3221F426FD71C12064EC -S113239006C08C3611F4206802C0883641F4F60178 -S11323A093FD859193FF81916F018111C0CF982F87 -S11323B09554933018F09052933028F40C5F1F4FCB -S11323C0FFE3F9830DC0833631F0833771F0833531 -S11323D009F05EC023C0F801808189830E5F1F4F1E -S11323E044244394512C540115C03801F2E06F0E7B -S11323F0711CF801A080B18026FF03C0652D70E038 -S113240002C06FEF7FEFC5012C870E9463132C017C -S113241083012C856FE7262E222218C03801F2E0B2 -S11324206F0E711CF801A080B18026FF03C0652DDA -S113243070E002C06FEF7FEFC5012C870E94581334 -S11324402C012C8550E8252E222A830123FC1CC054 -S113245006C0B70180E290E00E946E133A94832D87 -S113246090E048165906A8F30FC0F50127FC8591A2 -S113247027FE81915F01B70190E00E946E13311035 -S11324803A94F1E04F1A51084114510471F7EDC028 -S1132490843611F0893641F5F80127FF07C06081C1 -S11324A07181828193810C5F1F4F08C060817181AB -S11324B0882777FD8095982F0E5F1F4F4FE6B42E27 -S11324C0B22297FF09C090958095709561957F4FD2 -S11324D08F4F9F4FF0E8BF2A2AE030E0A4010E940A -S11324E09A13A82EA81843C0853731F43FEEB32EB3 -S11324F0B2222AE030E024C099EFB92EB2228F36FE -S1132500B9F020F4883509F0B3C00DC0803721F04C -S1132510883709F0ADC002C020E1B22AB4FE0BC076 -S113252084E0B82A08C024FF09C0E6E0BE2A06C039 -S113253028E030E005C020E130E002C020E132E0D4 -S1132540F801B7FE07C060817181828193810C5FBD -S11325501F4F06C06081718180E090E00E5F1F4FC5 -S1132560A4010E949A13A82EA818FFE7BF22B6FE62 -S11325700BC02B2D2E7FA51450F4B4FE0AC0B2FC60 -S113258008C02B2D2E7E05C07A2C2B2D03C07A2C4F -S113259001C0752C24FF0DC0FE01EA0DF11D8081E0 -S11325A0803311F4297E09C022FF06C0739473940A -S11325B004C0822F867809F0739423FD14C020FF91 -S11325C00FC05A2C731460F4530C5718732C08C0A2 -S11325D0B70180E290E02C870E946E1373942C85DF -S11325E07314B0F304C0731410F4371801C0312C01 -S11325F024FF12C0B70180E390E02C870E946E1381 -S11326002C8522FF1EC021FF03C088E590E002C094 -S113261088E790E0B7010CC0822F867891F021FD05 -S113262002C080E201C08BE227FD8DE2B70190E099 -S11326300E946E1306C0B70180E390E00E946E13FF -S11326405A94A514C0F3AA94F401EA0DF11DB7013C -S1132650808190E00E946E13A110F5CF06C0B701EF -S113266080E290E00E946E133A943110F8CF43CE8A -S1132670F7012681378102C02FEF3FEFC9012C9665 -S11326800FB6F894DEBF0FBECDBFDF91CF911F917F -S11326900F91FF90EF90DF90CF90BF90AF909F90FD -S11326A08F907F906F905F904F903F902F90089500 -S11326B0FC010590615070400110D8F78095909509 -S11326C08E0F9F1F0895FC0161507040019001100E -S11326D0D8F7809590958E0F9F1F08950F931F93A1 -S11326E0CF93DF938C01EB018B8181FD03C00FEF4E -S11326F01FEF1AC082FF0DC02E813F818C819D8106 -S11327002817390764F4E881F9810193F983E88390 -S113271006C0E885F985802F1995892B41F78E81AC -S11327209F8101969F838E83C801DF91CF911F9172 -S11327300F910895FA01AA27283051F1203181F12F -S1132740E8946F936E7F6E5F7F4F8F4F9F4FAF4FB5 -S1132750B1E03ED0B4E03CD0670F781F891F9A1FC8 -S1132760A11D680F791F8A1F911DA11D6A0F711D7C -S1132770811D911DA11D20D009F468943F912AE088 -S1132780269F11243019305D3193DEF6CF01089570 -S1132790462F4770405D4193B3E00FD0C9F7F6CFA1 -S11327A0462F4F70405D4A3318F0495D31FD405269 -S11327B0419302D0A9F7EACFB4E0A69597958795FF -S11327C077956795BA95C9F70097610571050895DE -S11327D09B01AC010A2E069457954795379527958A -S11327E0BA95C9F7620F731F841F951FA01D089522 -S10727F0F894FFCF87 -S11327F420000A2048616C6C6F2048616E6E616829 -S1132804210030782530345800204C65640A203087 -S11328147825303258204B6F6E74726173740000E3 +S11301300109FE010BBF0E94F402C83ED10780E012 +S11301400807A9F70E94D0010C94CC050C94000078 +S1130150E5E0F1E08081806180830895EBE0F1E0E7 +S1130160808180628083089598E087FF02C0A09A0E +S113017001C0A098989AA19A999A880F00C000C0CB +S11301800000A198999A915081F70895CF93C82FB0 +S11301904098892F81700E94B4008C2F0E94B40073 +S11301A0409ACF910895382F98E080E0209105017E +S11301B037FF02C0206401C02F7B20930501880F04 +S11301C02091030123FD8160209105012062209389 +S11301D00501330F00C000C00000209105012F7DF0 +S11301E020930501915011F70895EBE0F1E080812F +S11301F08068808383ED90E00197F1F700C00000F0 +S113020080818F7780830895EBE0F1E090819F7B7C +S1130210908390819F7D90838BB90C94F50081E04D +S11302200E9404018FE39FE10197F1F700C00000F1 +S11302300895CF93C82F90910B01906490930B0174 +S113024090910B019F7D90930B011BB81AB80E94EB +S1130250F50099B18FEF8AB9CA30E9F4892F805536 +S1130260803110F480E80EC0903110F480EC0AC0A4 +S1130270892F8054803110F480E904C0905190316A +S113028060F580ED0E9404018FE99FE00197F1F78A +S113029000C0000022C09F3011F480EC0BC09F34DA +S11302A011F480E907C09F3111F480ED03C09F353C +S11302B049F480E80E9404018FE99FE00197F1F777 +S11302C000C0000090910B019F7B90930B010E9452 +S11302D0AE00CBB9CF910C94F500CF9108950F9354 +S11302E01F93CF93DF93CDB7DEB72A970FB6F89459 +S11302F0DEBF0FBECDBF9F938F9380E092E09F93AC +S11303008F938E010F5F1F4F1F930F930E94F8026C +S11303100F900F900F900F900F900F9011C0843E8C +S113032011F481EE0BC0863F11F48FEE07C08C3FB1 +S113033011F485EF03C08F3D09F482EE0E94190188 +S1130340F80181918F018111EACF2A960FB6F894B2 +S1130350DEBF0FBECDBFDF91CF911F910F910895E6 +S11303601F93CF93DF93182FC92FE5E0F1E020818D +S11303702F7E20830E946F018C2F0E94D300D82FE0 +S113038080E0C82F812F0E94D300C82B0E94A800B0 +S1130390CE010E946F01CE01DF91CF911F9108958C +S11303A088EC92E80E94B00181E89AEC0E94B001C6 +S11303B083E89AEC0E94B001809105018F7E8093BE +S11303C005018091030186958695869591E089279C +S11303D0817090E00E946F012FEF39E582E692E090 +S11303E02150304080409040D9F700C0000080E0A8 +S11303F091E00E94C600109228012FEF39E688E1AF +S1130400215030408040E1F700C00000F6CF1F9338 +S1130410CF93DF93A198999A409A389AA098989A82 +S1130420EAE0F1E080818860808381E880932001A4 +S113043089E080932101C8E2D1E01882188280818A +S113044080688083808180648083808180628083EF +S11304501FEF1AB98FEF99EF0197F1F700C0000071 +S113046088E30E9404018FE19EE40197F1F700C044 +S113047000000E94F5008FED91E00197F1F700C0B4 +S113048000000E94F5008FED91E00197F1F700C0A4 +S113049000000E94F5008FED91E00197F1F700C094 +S11304A0000080E00E9404018FE39FE10197F1F7CF +S11304B000C000000E940F0184E00E9404019FEF2D +S11304C021EE84E0915020408040E1F700C000001C +S11304D08CE00E9404018FE39FE10197F1F700C0D3 +S11304E000000E940F0180E091E00E94C600188382 +S11304F0DF91CF911F9108952FEF81EE94E0215069 +S113050080409040E1F700C0000080E290EC0E943F +S1130510B00187ED90E80E94B0018BEA92EC0E9452 +S1130520B00181E89AEC0E94B00180E090EE0E9454 +S1130530B00180E098EC0E94B0012FEF87EA91E6C9 +S1130540215080409040E1F700C000000E940F015C +S113055087EF94EC0E94B00180E296EA0E94B00119 +S113056087E294E90E94B00182E296EC0E94B00115 +S113057080E698E90E94B0012FEF87EA91E62150C6 +S113058080409040E1F700C000000C940F010F93ED +S11305901F93CF93DF9387E092E00E94070205E068 +S11305A011E0F80180818F7B8083C4E0D1E08881F1 +S11305B08064888380818F7D808388818062888342 +S11305C00E94A8008881806188838881877F8883CE +S11305D0F8018081877F808386E092E0DF91CF916C +S11305E01F910F910C947C020790F691E02D1994C1 +S11305F00F931F93CF93DF93CDB7DEB72E970FB62C +S1130600F894DEBF0FBECDBF0E891F8986E08C83B0 +S11306101A8309838FEF9FE79E838D83CE014A96C9 +S1130620AC01688D798DCE0101960E942703EF817C +S1130630F885E00FF11F10822E960FB6F894DEBFF6 +S11306400FBECDBFDF91CF911F910F9108952F92CF +S11306503F924F925F926F927F928F929F92AF924E +S1130660BF92CF92DF92EF92FF920F931F93CF939B +S1130670DF93CDB7DEB72C970FB6F894DEBF0FBE6D +S1130680CDBF7C016B018A01FC0117821682838134 +S113069081FFC6C188248394912C8C0E9D1EF70182 +S11306A09381F60193FD859193FF81916F018823D6 +S11306B009F4B2C1853239F493FD859193FF819198 +S11306C06F01853229F4B70190E00E944205E7CF1B +S11306D0512C312C20E02032A8F48B3261F028F424 +S11306E0803251F0833271F40BC08D3239F0803393 +S11306F049F4216028C02260246025C0286023C0FA +S1130700206121C027FD27C0382F30533A3078F4B8 +S113071026FF06C0FAE05F9E300D1124532E13C04D +S11307208AE0389E300D1124332E20620CC08E32A4 +S113073021F426FD71C1206406C08C3611F42068B2 +S113074002C0883641F4F60193FD859193FF8191AF +S11307506F018111C0CF982F9554933018F09052A7 +S1130760933028F40C5F1F4FFFE3F9830DC08336E9 +S113077031F0833771F0833509F05EC023C0F8018E +S1130780808189830E5F1F4F44244394512C54016C +S113079015C03801F2E06F0E711CF801A080B18021 +S11307A026FF03C0652D70E002C06FEF7FEFC50127 +S11307B02C870E9437052C0183012C856FE7262E98 +S11307C0222218C03801F2E06F0E711CF801A080DB +S11307D0B18026FF03C0652D70E002C06FEF7FEF8C +S11307E0C5012C870E942C052C012C8550E8252E50 +S11307F0222A830123FC1CC006C0B70180E290E0DA +S11308000E9442053A94832D90E048165906A8F3B5 +S11308100FC0F50127FC859127FE81915F01B70187 +S113082090E00E94420531103A94F1E04F1A5108C9 +S11308304114510471F7EDC0843611F0893641F545 +S1130840F80127FF07C060817181828193810C5F69 +S11308501F4F08C060817181882777FD8095982F8C +S11308600E5F1F4F4FE6B42EB22297FF09C090953A +S11308708095709561957F4F8F4F9F4FF0E8BF2A09 +S11308802AE030E0A4010E946E05A82EA81843C0F7 +S1130890853731F43FEEB32EB2222AE030E024C093 +S11308A099EFB92EB2228F36B9F020F4883509F0C9 +S11308B0B3C00DC0803721F0883709F0ADC002C045 +S11308C020E1B22AB4FE0BC084E0B82A08C024FF99 +S11308D009C0E6E0BE2A06C028E030E005C020E1F9 +S11308E030E002C020E132E0F801B7FE07C06081C9 +S11308F07181828193810C5F1F4F06C06081718179 +S113090080E090E00E5F1F4FA4010E946E05A82EA8 +S1130910A818FFE7BF22B6FE0BC02B2D2E7FA5140F +S113092050F4B4FE0AC0B2FC08C02B2D2E7E05C0C4 +S11309307A2C2B2D03C07A2C01C0752C24FF0DC0FA +S1130940FE01EA0DF11D8081803311F4297E09C076 +S113095022FF06C07394739404C0822F867809F032 +S1130960739423FD14C020FF0FC05A2C731460F439 +S1130970530C5718732C08C0B70180E290E02C8701 +S11309800E94420573942C857314B0F304C073144D +S113099010F4371801C0312C24FF12C0B70180E3D2 +S11309A090E02C870E9442052C8522FF1EC021FF67 +S11309B003C088E590E002C088E790E0B7010CC06E +S11309C0822F867891F021FD02C080E201C08BE283 +S11309D027FD8DE2B70190E00E94420506C0B701F1 +S11309E080E390E00E9442055A94A514C0F3AA94AF +S11309F0F401EA0DF11DB701808190E00E944205E7 +S1130A00A110F5CF06C0B70180E290E00E94420534 +S1130A103A943110F8CF43CEF7012681378102C0D2 +S1130A202FEF3FEFC9012C960FB6F894DEBF0FBE2F +S1130A30CDBFDF91CF911F910F91FF90EF90DF9089 +S1130A40CF90BF90AF909F908F907F906F905F906A +S1130A504F903F902F900895FC0105906150704095 +S1130A600110D8F7809590958E0F9F1F0895FC0173 +S1130A706150704001900110D8F7809590958E0FC9 +S1130A809F1F08950F931F93CF93DF938C01EB0166 +S1130A908B8181FD03C00FEF1FEF1AC082FF0DC0D1 +S1130AA02E813F818C819D812817390764F4E88168 +S1130AB0F9810193F983E88306C0E885F985802FDD +S1130AC01995892B41F78E819F8101969F838E838F +S1130AD0C801DF91CF911F910F910895FA01AA27C0 +S1130AE0283051F1203181F1E8946F936E7F6E5F6D +S1130AF07F4F8F4F9F4FAF4FB1E03ED0B4E03CD01B +S1130B00670F781F891F9A1FA11D680F791F8A1FFD +S1130B10911DA11D6A0F711D811D911DA11D20D064 +S1130B2009F468943F912AE0269F11243019305D1E +S1130B303193DEF6CF010895462F4770405D41930F +S1130B40B3E00FD0C9F7F6CF462F4F70405D4A335C +S1130B5018F0495D31FD4052419302D0A9F7EACF24 +S1130B60B4E0A6959795879577956795BA95C9F753 +S1130B7000976105710508959B01AC010A2E069446 +S1130B805795479537952795BA95C9F7620F731FFF +S10F0B90841F951FA01D0895F894FFCF4A +S1090B9C2530345820004E S9030000FC diff --git a/V2/Programm/Programm/Programm.cpp b/V2/Programm/Programm/Programm.cpp index 49ad87d..af4fd0e 100644 --- a/V2/Programm/Programm/Programm.cpp +++ b/V2/Programm/Programm/Programm.cpp @@ -8,44 +8,39 @@ #include "peripheral.h" #include +rfm12class r; -/*ledrotclass rot; -ledgruenclass gruen; -ledgelbclass gelb;*/ -displayclass d; +#define PING 1 +#define SLEEP 2 +#define ACTIVE 3 +#define SETSLEEP 4 +#define SETACTIVE 5 +#define RUN 6 +#define SETRUN 7 +#define DEDECT 8 +#define SETDEDECT 9 + +#define ALL 0 +#define MASTER 1 int main(void) { - char t[20]; - uint8_t led = 0xFA; - uint8_t cont = 150; + r.beginasyncrx(); + d.printHex(r.hasdata()); + _delay_ms(15000); + //char t[20]; + d.setContrast(255); + d.setBacklight(0); while(1) { - d.clear(); - d.setBacklight(led); - d.setContrast(cont); - d.lputs(" "); - d.printHex(led); - sprintf(t, " Led\n 0x%02X Kontrast", cont); - d.lputs(t); - d.lputs("\n Hallo Hannah!"); + /*r.txpacket(ALL, MASTER, ACTIVE); + _delay_ms(1); - _delay_ms(1000); + r.beginasyncrx(); + while(r.hasdata()) { } + uint8_t addr = r.rxbyte(); + d.printHex(addr); + d.lputs(" Addr");*/ + _delay_ms(500); } - /*gruen.on(); - _delay_ms(2000); - gruen.off(); - - gelb.on(); - _delay_ms(1000); - gelb.off(); - - rot.on(); - _delay_ms(2000); - gelb.on(); - - _delay_ms(1000); - gelb.off(); - rot.off(); */ - } \ No newline at end of file diff --git a/V2/Programm/Programm/Programm.cppproj b/V2/Programm/Programm/Programm.cppproj index 1ffaad8..9543054 100644 --- a/V2/Programm/Programm/Programm.cppproj +++ b/V2/Programm/Programm/Programm.cppproj @@ -18,8 +18,7 @@ Native true false - - + exception_table 0 true 0x20000000 @@ -105,42 +104,45 @@ - True - True - True - True - True - True - - - DEBUG - - - Optimize (-O1) - True - True - Default (-g2) - True - True - True - - - DEBUG - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - <segmentname>=<address>, for example .boot=0xff - Default (-Wa,-g) - + True + True + True + True + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + True + True + + + DEBUG + + + Optimize for size (-Os) + True + True + Maximum (-g3) + True + True + True + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + Default (-Wa,-g) + @@ -165,9 +167,18 @@ compile + + compile + + + compile + compile + + compile + compile @@ -177,6 +188,12 @@ compile + + compile + + + compile + compile diff --git a/V2/Programm/Programm/io/Display.hpp b/V2/Programm/Programm/io/Display.hpp index 10e5af5..79e03c2 100644 --- a/V2/Programm/Programm/io/Display.hpp +++ b/V2/Programm/Programm/io/Display.hpp @@ -58,8 +58,8 @@ class Display { } void printHex(uint16_t d) { - char t[8]; - sprintf(t, "0x%04X", d); + char t[10]; + sprintf(t, "%04X ", d); this->lputs(t); } diff --git a/V2/Programm/Programm/io/Input.hpp b/V2/Programm/Programm/io/Input.hpp new file mode 100644 index 0000000..59b95d5 --- /dev/null +++ b/V2/Programm/Programm/io/Input.hpp @@ -0,0 +1,27 @@ +/* + * Input.hpp + * + * Created: 13.05.2014 23:34:00 + * Author: netz + */ + + +#ifndef INPUT_H_ +#define INPUT_H_ + +template +class Input { + public: + Input() { + Port::port(0xFF); + Port::dir(0x00); + } + uint8_t get() { + return ~Port::pin(); + } + private: + const typedef avrlib::pin pactive; +}; + + +#endif /* INPUT_H_ */ \ No newline at end of file diff --git a/V2/Programm/Programm/io/Spi.hpp b/V2/Programm/Programm/io/Spi.hpp new file mode 100644 index 0000000..e212858 --- /dev/null +++ b/V2/Programm/Programm/io/Spi.hpp @@ -0,0 +1,86 @@ +/* + * Spi.h + * + * Created: 06.11.2013 15:41:34 + * Author: netz + */ + + +#ifndef SPI_H_ +#define SPI_H_ + +#include +#include +#include "hardware/pin.hpp" + +template +class Spi { + public: + Spi() { + this->init(); + } + void CSOn() { + cs::clear(); + } + void CSOff() { + cs::set(); + } + uint8_t send(uint8_t data) { + if(mode == 0) { + return this->send_hard(data); + } + return this->send_soft(data); + } + uint8_t has_data() { + return !miso::read(); + } + private: + const typedef avrlib::pin cs; + const typedef avrlib::pin miso; + const typedef avrlib::pin mosi; + const typedef avrlib::pin sck; + void init() { + this->init_port(); + if(mode == 0) { + this->init_spi(); + } + } + void init_port() { + mosi::make_low(); //output und low; + sck::make_low(); //output und low; + cs::make_high(); //output und low; + miso::make_input(); //input und low; + } + void init_spi() { + SPCR = (1< + +namespace avrlib { + + struct portj + { + static uint8_t port() { return PORTJ; } + static void port(uint8_t v) { PORTJ = v; } + + static uint8_t pin() { return PINJ; } + static void pin(uint8_t v) { PINJ = v; } + + static uint8_t dir() { return DDRJ; } + static void dir(uint8_t v) { DDRJ = v; } + }; + +} + +#endif diff --git a/V2/Programm/Programm/io/hardware/portk.hpp b/V2/Programm/Programm/io/hardware/portk.hpp new file mode 100644 index 0000000..13a2fe7 --- /dev/null +++ b/V2/Programm/Programm/io/hardware/portk.hpp @@ -0,0 +1,22 @@ +#ifndef AVRLIB_PORTK_HPP +#define AVRLIB_PORTK_HPP + +#include + +namespace avrlib { + + struct portk + { + static uint8_t port() { return PORTK; } + static void port(uint8_t v) { PORTK = v; } + + static uint8_t pin() { return PINK; } + static void pin(uint8_t v) { PINK = v; } + + static uint8_t dir() { return DDRK; } + static void dir(uint8_t v) { DDRK = v; } + }; + +} + +#endif diff --git a/V2/Programm/Programm/io/rfm12b.hpp b/V2/Programm/Programm/io/rfm12b.hpp new file mode 100644 index 0000000..61a32d7 --- /dev/null +++ b/V2/Programm/Programm/io/rfm12b.hpp @@ -0,0 +1,160 @@ +/* + * rfm12.hpp + * + * Created: 08.05.2014 00:06:49 + * Author: netz + */ + + +#ifndef RFM12_H_ +#define RFM12_H_ + +template +class Rfm12B { + public: + Rfm12B() { + this->init(); + } + + void ready(void) { + s.CSOn(); + while(s.has_data()); // wait until FIFO ready + } + + void beginasyncrx() { + this->send(0x82C8); // RX on + this->send(0xCA81); // set FIFO mode + this->send(0xCA83); // enable FIFO + } + + uint8_t hasdata() { + s.CSOn(); + return s.has_data(); + } + + uint8_t rxbyte() { + return this->send(0xB000); + } + + void endasyncrx() { + this->send(0x8208); // RX off + } + + void txdata(uint8_t *data, uint8_t number) { + uint8_t i; + this->send(0x8238); // TX on + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB82D); + this->ready(); + this->send(0xB8D4); + for (i=0; iready(); + this->send(0xB800|(*data++)); + } + this->ready(); + this->send(0x8208); // TX off + } + + void rxdata(uint8_t *data, uint8_t number) { + uint8_t i; + this->send(0x82C8); // RX on + this->send(0xCA81); // set FIFO mode + this->send(0xCA83); // enable FIFO + for (i=0; iready(); + *data++=this->send(0xB000); + } + this->send(0x8208); // RX off + } + + void txpacket(uint8_t addr, uint8_t from, uint8_t data) { + this->send(0x8238); // TX on + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB8AA); + this->ready(); + this->send(0xB82D); + this->ready(); + this->send(0xB8D4); + this->ready(); + this->send(0xB800|addr); + this->ready(); + this->send(0xB800|from); + this->ready(); + this->send(0xB800|data); + this->ready(); + this->send(0xB800); + this->ready(); + this->send(0x8208); // TX off + _delay_ms(100); + } + private: + Spi s; + uint16_t send(uint16_t wert) { + s.CSOn(); + d.printHex(wert); + uint16_t werti = s.send((uint8_t)(wert >> 8)) << 8; + werti |= s.send((uint8_t)wert); + s.CSOff(); + d.printHex(werti); + return werti; + } + void init(void) { + _delay_ms(100); + + this->send(0xC020); // AVR CLK: 10MHz + this->send(0x80D7); // Enable FIFO + this->send(0xC2AB); // Data Filter: internal + this->send(0xCA81); // Set FIFO mode + this->send(0xE000); // disable wakeuptimer + this->send(0xC800); // disable low duty cycle + _delay_ms(2000); + d.clear(); + this->send(0xC4F7); // AFC settings: autotuning: -10kHz...+7,5kHz + + this->setfreq(); // Sende/Empfangsfrequenz auf 433,92MHz einstellen + this->setbandwidth(); // 400kHz Bandbreite, 0dB Verstärkung, DRSSI threshold: -61dBm + this->setbaud(); // 19200 baud + this->setpower(); // 1mW Ausgangsleistung, 120kHz Frequenzshift + _delay_ms(2000); + d.clear(); + } + void setbandwidth() { + this->send( 0x9400 | ( ( bandwidth & 7 ) << 5 ) | ( ( gain & 3 ) << 3 ) | ( drssi & 7 ) ); + } + void setfreq() { + uint16_t freq = (uint16_t)(((float)(frequenz-430000)/1000)/0.0025); // macro for calculating frequency value out of frequency in kHz + if( freq < 96 ) { // 430,2400MHz + this->send( 0xA000 | 96 ); + } else if( freq > 3903 ) { // 439,7575MHz + this->send( 0xA000 | 3903 ); + } + this->send( 0xA000 | freq ); + } + void setbaud() { + if (baud < 663) { + return; + } + if (baud < 5400) { // Baudrate= 344827,58621/(R+1)/(1+CS*7) + this->send(0xC680 | ( ( 43104 / baud ) - 1 ) ); + } else { + this->send(0xC600 | ( ( 344828UL / baud ) - 1 ) ); + } + } + void setpower() { + this->send( 0x9800 | ( power & 7 ) | ( ( mod & 15 ) << 4 ) ); + } +}; + +#endif /* RFM12_H_ */ \ No newline at end of file diff --git a/V2/Programm/Programm/peripheral.h b/V2/Programm/Programm/peripheral.h index ee4be77..87aa8fc 100644 --- a/V2/Programm/Programm/peripheral.h +++ b/V2/Programm/Programm/peripheral.h @@ -16,6 +16,8 @@ #include "io/hardware/portd.hpp" #include "io/hardware/portg.hpp" #include "io/hardware/porth.hpp" +#include "io/hardware/portj.hpp" +#include "io/hardware/portk.hpp" #include "io/hardware/portl.hpp" #include "io/Led.hpp" @@ -32,6 +34,19 @@ typedef Led< PINH5 //Rot > ledrotclass; +#include "io/Input.hpp" +typedef Input< + avrlib::portk, + PINK7, //Active + PINK5, //Ilde + PINK2, //Enter + PINK6, //Back + PINK4, //Top + PINK0, //Down + PINK1, //Left + PINK3 //Right +> inputclass; + #include "io/LedPWM.hpp" typedef LedPWM< avrlib::portl, @@ -59,4 +74,28 @@ typedef Display< // displayclass; +displayclass d; + +#include "io/Spi.hpp" +typedef Spi< // + avrlib::portj, + PINJ4, + PINJ3, + PINJ6, + PINJ5, + 1 //Software +> spiclass; + +#include "io/rfm12b.hpp" +typedef Rfm12B< + spiclass, //SPI Hardware + 1, //Bandwidth // 400kHz Bandbreite, 0dB Verstärkung, DRSSI threshold: -61dBm + 0, //Gain + 7, //DRRSI + 433920,//(uint16_t)RF12FREQ(433.92), // Sende/Empfangsfrequenz auf 433,92MHz einstellen + 9600, //Baudrate // 9600 baud + 0, //Power // 1mW Ausgangsleistung, 120kHz Frequenzshift + 6 //Mod +> rfm12class; + #endif /* PERIPHERAL_H_ */ \ No newline at end of file