From b3fd2000139c578389d37bbf1321f12923c9f042 Mon Sep 17 00:00:00 2001 From: chregu82 <64577148+chregu82@users.noreply.github.com> Date: Sat, 8 Aug 2020 15:56:29 +0200 Subject: [PATCH] Improved graphics performance --- README.md | 14 ++++++++++ bin/kernel.img | Bin 353504 -> 353504 bytes bin/kernel7.img | Bin 357600 -> 357600 bytes bin/kernel8-32.img | Bin 357600 -> 357600 bytes bin/recovery7l.img | Bin 283796 -> 283796 bytes pigfx_config.h.in | 2 +- src/c_utils.c | 44 +++++++++++++++++++++++++++++++ src/c_utils.h | 1 + src/gfx.c | 63 +++++++++++++++++---------------------------- 9 files changed, 84 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 86ed9f6..e480939 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,20 @@ There's a [example](shapes/anim_dinos.bin) for a moving dinosaur (after first lo There is no collision detection yet. +## Graphics performance + +If you want to do graphics, get a Pi Zero. Multi core Pi's like the models 2 - 4 are much slower if only one core is used like PiGFX does. + +Graphics which are drawn on a multiple of 4 pixels x-position draw much faster than on a multiple of 2 or 1. You will also get more speed if your image has a width of a multiple of 4. Drawing solid is faster than drawing transparent. + +This is a table that shows the time for drawing a 400x300 pixel image on different x-positions. + +|Pi Gen. |Aligned 4 px |Aligned 2 px |unaligned +|------- |------------ |------------ |--------- +|1 (zero) |20.8ms |40.4ms |53.0ms +|2 |46.9ms |90.8ms |114.5ms +|3 |50.1ms |93.9ms |122.1ms +|4 |33.4ms |64.9ms |144.4ms ## Compiling on Mac / Linux diff --git a/bin/kernel.img b/bin/kernel.img index 652fd0b322532a0b68282d018dc91bec82961b19..0d4ec4b5fad8d9b5675f47da771301c0495a89a5 100755 GIT binary patch delta 17965 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 delta 17474 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 H0WSXoB$udH diff --git a/bin/kernel7.img b/bin/kernel7.img index 95958c9453d00cc323f6be425e6b3504c0e49b05..681debe7a972e1c16397512b595035ca779ad2a0 100755 GIT binary patch delta 16023 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 z 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 diff --git a/bin/kernel8-32.img b/bin/kernel8-32.img index 5de8b0e73fc0b6c901274519d5451677c02af5af..708b578f52d9b161953b2ba289e1f23e240d3c97 100755 GIT binary patch delta 15500 zcmcJ0cU+Xm_V;rJ76AcKklqA47VHrlmT02UU{6r7Yt(4a#D={_jeXQ(MQqrxu^0rw zh85A+3sEDiYlKx}Vl-;h{e6esz2WBG`@Z+{dq3|V5A)2KGiOepGxIF>3(MaxEWdv; z(L((cIwQiSI%_6POEeUCXeLLrTYNN=yL+NRz1PG0HCIiR@hvYCeI4a&`>GTw_t^KO z)l#Qx=R3EOWe&M%CZ7m@Mixc~G3X+q3|hohqo#E= z*lC*cH&GUr-CN1irGkWGEBUZgbqbJW9k=+#dtxjiG2e!JE23AvVrh!J;OI{*3muo# zJfUzP9=$i4o@1?lx5nER7M#^`n^Q0?m8YCqJLd;#CUQzNm;+@w=eEAVn2MzgT1cYd znY*JwbB{6*$bKqEJNr+Yf<;`=>*A!DYPgg(2rbGm0kG15jRLH9Q^1M^TVxcVQVLWE zdarNAeH`}Jyy2Mlg%$n~aK(I6&`>t&g;sIl7*X12Yn?SsmM-mDwvNJa_cyMv&b=;= zm-dkNtJ%w_(k>!5Om-^mS1#~xNXNrueCf8d54hoF-#Y#?g~VbC?k?_uY~|w#FiL?B z7m!J`uCr7&bMbav0E|p4MkQF<_ihUbxH%YExR3Iz4)~>eMI!DcYW}Wk)bEG1~CULBp42tlxGdXE8c)qW^6%nA1i?A2+m~fO6+Plkz zbsc^CL1wM7EfA%#Mu@-BPV182TkfgrO+Dm=`u_5M-GF8R@WBA&0WCrrL#*%i5wi+P z!d?Ci+!L?}*|I^n98}NUH3SrV08y)i$QkwOeW-fMx82dI#NdMwPx!T?=5Op?1-7yB z=7Mz{6>kwU@2hz5R1`o>^*v?F`u@C(MNJk<1qSOW;GsBENt8- z_S32=0g!2CLFgLR_vwFAK!jQZ3Ye^E)oqL0WAXY{_&C7TT$|uZ2{wgjA=0SUun(D4 z%$%+7h(46(V9}mD9_jJX8(1INC10WYV7R!&GJhv)A*bMA-HPXkWt8lyFE7>i`LMpb zzj2uz-H!m!E@H-go04oq9l@hgaPcH8qKslQW<|U!**s;ldR2Vu7gK0;pCVcpD6ER; zD-%V?DfPlfTIgFwZH7}uw;4_)BzMi<_&Kt>O?Q7coIBQ1R27ekCl|aE_)~OT6d!5~ z`nQ=g;Bz%%OMj)|B9029PGY{owhNhg-?kD(&MG+DTmpBdQQ;`6#i`TkLhg_}4D*WJ z2rE366pQ5@+uh5nY3RQW{a#7Gp!-W5 zeWjn#%TCz;3IXNTJ`t7r-P5$>yPDP%Pt~6^%@fbFJDN5P{@WWqy9kKC$~vET$V;_7 zWk_s*lf<4k2he-+!`Put>Oig9Ae!nG+cf>XrNOKz@h~q4uvnxCfDck$lzLnp3A3$o9l7`c_!-&IqDkM#2F<A57=PdECw{q4&@@@?t4Wlq-}cpZqL;Gc=n?dzOdtKV zDEFJJHD;!x?=zSXZYCqfRFrqd^rj)Q@z=fVZv!l&zOEqCzg`mQ^1G(hf1zm;pl#Kb zd{$e>O2TaK+6y`Jo5l3AEIan9?@{=Q0~QkSG$j&TK2=3t!91<0Db7 z_aEPan&>x;A5X5oKQWuiKxB`n2roHuqQ8uqSXIzdIecPUx+o7!Y)6s$*AwlEYlHXk z8Nww}W=skdpEZ&9CUsH0dy|7?^yGz>*SW>bBriF6N>kh5tts7veN$O$YJB;Lh%vPf zA8S^oIKouoB}v=8<+Z6H;(k;4a_T6@_CO+R@G`{gDW^}HAi{puznK<9^rPN)#ySV_ zwm?1&X(eBM`+=xtly&E|rFnAVye-sMA2@%!bF0VYNDJ_=Ja0?9+h8TzJJ#{s5_m2i z`Wx~dO`GgZnvc)_pXb^Copyh1o)u|cdD0yJ4I}>!rWk&Jc_Aeh2=THAF`)#Fw-}dk zTvL{35B;@OJM8GBoU-;)+AlAx^`7>~m$X-S9Q`m8&w6{8;v>seM4%gDWUIBGh`uxW z$=3dQ^i@2iTKlWf7wBhN`zz2tX?JvWb#9=(i=VvlkWb$X45`3-3E})V5J{MBd$Yh8D_g zNmr?-e&Y5tL62meT~+9w{Crn9U6ylpwWee8+^*V`Dqrtvg37tU?r>Tw`{VC2xoCGg zq^aw>d(tpjGdY}k1MVTeO!lF!a!ztP(K1h7OkN;@@?^}OF2X5K?%gwlp2+fhzY4s3 z+iY5G-QQL1t4gWQ+*OH^n4cpz?X5>y^7`J|q?fvV9Vk(D-WP^lZ|uHlG+w^gSA|B( z!2MyU_*>#{FF6>0yU6+bH;U@FW%UD{kWV}B^OTDYcnhc7GU>ovq_UbR{y5ouoU(<| z<&%`!v|9%1!)depSl>Y`xh3DHdP#S^3(c14`mbrIteIMc`T{XbPDpj3&T>v_IBMSm zsU1WEg&gW!{g&CJ3NF!Djyf1A2OW$P%S*`{2P@MH`R-sNd*e+c;)VM{}}H8Z|LnUtQ<8j`-t2&Y}L+TnIcKBEseq4{#p;VMeO zc!v=)+o6>DJhL@*kQ*{vi>5bZL1w)0zae9@DhrPra&A^zK{w>ZtXA|)mOTBcs*VDRt~y;Pda6=axY5OPXWp-B?RN|DpH^H>*8sp)D67+{tx&G0CZJHZ z^+Vj%;xq1RAa1bYQhoI6qratgV!k>zWaAd-1Hcr$rf9qM z!b_AD$)=t*);`ozteub0x1BVVcHA*%76?UIwPWiyb+>3|f5?^m{UO=;GRojnPpLw2 zr0na2>iZ-09&**#rnt>ED(_I-cEjXo4JSZc)BH3vP`a13*WbT2;ITEuZH6(dO{cOhN6Ar^x4pd<8dn4}|E{gqb za_@r}@$8{=Hu@ofS2Bi)w~u9eW2kukSdKC_7ly}jud!1n{X?_K2Q&s*Y50IfD2`X^ zCS!kn2Ls{k;f~5k_2U{?`kvOlOG8UPz}nx@OyBKo(PIA45M7x z`LTx#C`uO7jWVYwNO4hwW}!(sn_7wMM%l>}gUr9v6f6!umN}*%WWYjGYq7y7YdsEy zE;~OSNEP%4AAd{YXpwCGG(&vzK)!i8K-@6N*k3}$s3JM@m#5g0MnCfqbN-NXpGA_; zAAk0#5DyIca?jV=i9cV+y)TbIha>;+79$_YxqsB9elq=!aOy6Nf3&7Hvf8UjR7q}o z)q=`PprkeX}TEhQ1!)`UJ|iS*?v+_S!={@{~!ht5?V?F;J%f z7D5hE#k>uh zPzU30vUwEII4Z+NqHJ-`$h!muiSyV%ihUX@BL*#+-sL1K)N zW9+F_g)-JL#X?i-Sa0KBESBOddoq(hXX)r>(6Vf^Ne79@%Jd@il`v{{MmDE7P>;ZG z0P`+^6ITLf16L{qRSe>fOHsI;_eryyMuBN7N>S4?4N)dt$Zkm0#~bv5s3!R8f0+5b%_lL z3C_@jr}$D6G4noW_)=T3=qDC_6zc5sBdWwwnqgvIS}i|9FqGpb{@~Mz%Lb4?*>TMP zs^T;y4}`T9#&KMs5_$9V%4E+I0;nR5;2FVGg`AxT`um2I?Ta@Gq)Lct6fCO zZB7WF%Df|(YB+5`m8eCmFs|nrYLREb!=2=sX!xi zWijK4h4+w9YAXJ`#j&9@Q{>&^f>11d=@vVO!Hv$|;_6{EM(n=D397&47Nb5|Ag15q z_7%~eaEpgmqy9JG#ZJ;D<5`Ml2cENduI)&hTZL*-;9wMtJIv;ykGx$B zIv9MOBU;=(uc@FJV)=4a7^x>eQB5>ERik>;nwwRl4iv%jtI^kB?p-zL`0WjjsZQ~_ zyEn|H2i!TF!uV}y+@lG+ zas3s}YeMm23i?ecQjEHiw!A5vN0*1HctNo)9rnNuS1L|cvUxKnR~EwH$-b6zTOSFw_RGz?o^6M#|?T=aL~K+X47HV|0tMS8f1z2OKuh) zczK@3^q^5rdBE|Eo^6cdI$r z;JeQAX28XU^L(Qxm|J|F%Y6nRCZ6XZpHZlYJD;}TGa62Ch8Lfc6wh*aK@3Gk=I5AA z6Tp^@rKmC%ma1ayJd91nSa=DRt6Ime=J5L%sxHpvaP?lW)}b68-V5vO%i+bn5R7ZM zV;}Ng)f;+WmctIcp~v|-T)8(zy2gWS0QNXs@EU&S(Vs!I=?ZUj4$tjP4QU`}^+tMy zv3pZ5W#v9Fb|W6C8l;~-2!=4u>H`!Qxewyck*mdGOyiGZskZL-b7oTnAMXvaOJkv# zpU?5$SZF2>?KG;+E`7;UmjfhEt{F?-4r37(C(d!JzHp8G=XgP1NUR^fIJfi>>O6-pfyCSFe z2U37S^5Dn)k(S)J>;URZU-0Mwh_*XtId1@nUp>q32f*KQ&$8b@w5QH;!-3FW)>-Z` z5Q(`4&mV|%6UKW6lDBW*SxYJ66EVl=sjV#5Dz3Afz4`7yELVo#4Ma6E`z%Ke0*$9< zIA#zv6r;}a@@L&!*DpY?_ZJi*zCOcKzd)Tf!UEe57-0+l0^Gx^zMy)#k1^S&crr%~BYRy-^q=su zHK1^57|N!&VX#;PzZ*uux+F~td*3_@nhl3tARWg$bOtZ7MuL6Y<3ujF7oa;bVmUj zUGWU0$6@>Vj1P=MmdL}2A(cmuBM*mY=;&%TzaK|_x?F%S6@xiqJaW>hY;HK7V*K`I zn~T2mL@b~%w0X2I=IzMlUE@&=FV5z26X2XPvbpU9N>Y{L1aOQ>aUv?4k3n@CV!}qD zn>C55#M+8mP9#>f%tT0vf_)+!43$7Uy!8DESd}||fum7eJb60(ioQA>xbyLe@WsS< za9DVPlj0FmcQN)?OaGYRkV!~`*(bR9Bxvj42_82IobEWmyU=%93q1FK&~(@i zmX@DjF_}6!PQ{Qqb@8!@vBjZl+n8`FiZE=&4hC8!v3bhDq2|Qy7@oWmp#EeMp zKLr`GCa;_VxsU^=(6om3C(K2f*S~7>{c*GDJ_y;yY@1Cb5c=adkD5yD#e?IVF%|sZ zJkC$2!V7*l&TiANA)dfociwatdYRr6`+o0f5IXfZ$74`zKdy3rbHSK24U?8&(sXLo zd@3f{E8(YSJ+dv@&B2oLdMJ4@uIgpmm`$?o82jotFP=`#Red}imV?EoLnZLh8Aue^ zu4a%o)!{iaP=y5Zg&B|@+tm!@hyCZd`b=!muaEH%v^0b_&4jP?<*b=Ft95518u7z1 zcAG^hsKk!XqOkI7j$yxwSX+Eicf)M@l8>+z4*dhu+g3i=aSy3 zGDh)Zt^7*7?ORl9n~w77ZxNV$l%IZ!gT$L7W>d&?dt)?|Q`$W-{}V@x(!7!7#~j+YZWZRER7BA>AB$DvZSx^B^n;$WM3^Y#SqP4XIp<>RD8_V<=2=z1L!u1Rt>bS_aHoY7@2Re2+61k_gMt*K>4zW!a`Ro z%&6#s0QDmst%o5LtpfzV?TVl4Y10dqX7QCp)ZV!?cv883QWjTUjQtF!xy2|YUt{`p zu-XP}&+`SVNJ?j|tp1k8GZ&*S`#FpEF2+&kbQafLf(S^@;vq}m`3JIiu4;E?agu_s z&*Ho#*i9FM<_oS6jZ_n{lsv_ZEN;6LN1~BgylN>0=>}uGkT0oB3aG_4X3Me_F*brXtbo7aq`3lo_U79waBew%nB7)lgM)EaB3K*n*p(PWs#*!3 zM2Wc)Gmw{8B6P9wuf%>f`!H8ug~QzY!)6oi&Wj?VY8GnI(FHD-Iu?|J5mhNQj7P4b zUQYLcqPo$1c@+Za#$o<#70RWo!`y=*Z0cc-XNoMf4QR+f{L?zrIhPm-eZyhCff2D7 z7^^9WBUS@A=P);1jXnFDVqhpLn+>aJyU0AsZP&mt8uQ>a;1W@_2I&T;an(bmzlM6b zzRyrsjjG)4YIw#o) zIfK`#c1s2ySqJ`BWbhl+|1N`r)`PY93?8r^{m~gb7k%o-=hlM@Oppoc^8 z2C5wt6($S<0p{z9EAo)pxJI3g??;_5Vk&lApsbf)@qt>cQUN&&X<*Z6R+`cu=nRRRL#k8~cDfcn6c&It*$ zR~${}P8;EMhthfYMyO|hIxkTDo#~vHj2h$EMp`WCC z88eZ_lVKWUg=E|+)#Vv`sH?gH*#mNmGFa?|F-vjHy%g5`{Xv!EyBl_654KSp>I0PTkCZSra%2hPSR3+-BTzAMCj6 zAP?C`CvY=dZ9fWvsRy~sep>Ey4W6Tp37%YbFOELXK^Rr$0Sfm!pKAGGgZ;4$#!|;z z@MGiN`O3_vQn}Lsm>E~J2WX$Nb_%x0*Qq=tg?5RHsa#GED<4kfSUs$qn#%EdSUEA3 zbM&Ze=caPqR2qXDqiv~lUK}{YV-6y0Ht0FwAS$XwdcJoM&gYT#?jSuEYF{`6>N#ob zmX3WM&YuohGSawHI)w%ufEQMQ=#T#MAdL3u23<`Fg znqmoeO@%Z6nt|-pF9X@>bqWv303U@ZoRmSK<$D89sfUGSE49~V8$0sd44Cp#3OgUB zNZoOuJm>tn*r)m&#(6!MS008JRN#Y$DO|S}qj&h%BBakZhgEt@;h;e7LM}1Y|Nr?w*?2xrYIzTdu^_9$^i~KLOIipwG`Uy z|MKbG8n~_gdwkC}|BSm(&Bs~+f5GjvV=a03QEETU1;EJ|{BNFqAT$q*{5QA?r{CXb zFU5QXpZyoyPIGCK*6_obaUL*JA76mSm5teX4Grj76}_aFokYNAKhO1?c} z1h*DIQI+O75X4y)jaZ;hbIT!TLay{Zk5t`&o1I7K*XL#D>9BZ{!ku!-OPKcXkX-Bp zqxbUMTx@)IQ}{$K92NQf0*IVU;mQ}Na`_B6&K0cgfC3UffX^?Bbb!;(1-O553eUX& z3R~f%7eHZU3Kv|!{qwjKj=e}v#nC<7=?9Fb?cq^BKxMnHnO!MTBJD@!MCh1 z7j1T7TqO&9kPU`rB8RqQfhPQCy9lx7L-6B7)xZSu)RqmmA7FP;Npm)1C;TCqO zJ8+##|3M&JLfj&cPCxJZORn;eE2NP{u5MNSlB?SX7MPODv6=;b(u(I&LawEaxYcbO z3mWq1+tgF6_UD}2xcS7ln>@Io6IW6V5_KMZ<@aEh*;E<6^vKFyeS+S#D8s#7d?gR% z^VwZo{YN;}$Xz_-M|x?O8{)uy?@&#Vzmpf=K_N95jN2yL>gBpnFb=MF;J;UQ^3yv| z+xeaBb{E%+DCzH7O8UEqlyKf~7neW&d{^~Q2CJSOH@k*nL&4B_)(RGb0xfxUhYpU$Tk zmG29vwcqO<&~`bChuN4`MgH?0JhcEGF_^a%ASK+}!B+~Xi_^Ismcwsju4%xx!D_tB zK#j`!?

>jrl)WS|7e`z}B*S2a5+t;q!NJVLC?<5l}GnG+r$@bkCx z_YWvW*!yugBg}&m&Ir5UY_A$zhZbu9F#WWA#GIG{uLfkSj>#= zW>Zf%U7}T%SDM9o>LYDD#@ypp7{`|wPZpN(X&4`a@fjGi9Y;OwEMsc7dXfiE{N0~rve-bZH@Eu9K%Y;?dCvl#M=5~n(b(LGQSl{e#;7XL`=DWvx+q>_|KYh%45V;Oj`b9Vx2hY!|}f%1w7o!DZhcA zyIc8&YOihOH^0#?@=x3LTotRyTX?_=+>LD6!Mk3dcE&dG0+sc5TlnD%B;c~Fdr86N zowk}y{lRT1WO#K?F#}PFk98Ol<9DRRyu=qVzqMP;rh9;WvNantZ|* z9{vi4*^h7|`U>S$_GWf?4Sz-IK3Mg(Dq8&6@eKv24Dtrnp|lU*fT%dUnPdMXb(5a;C#AT_B!a~FO)EzM7`JI9e&9-9 ztlTLYQOwGG5hk(|*@487pbd$NHTct|MFr1rzo)9g)mGTTL@ppPPE1JT7$HKPo?GCC zfjmcuU{RRJNdSxciTJS#e!YP^IRVO-64}{K^boVXd4Qd0D3TKyKOPDdTN3$*YS)6Q zok(#W32G`O+}+3t_M*9SFZ46*uIHcM$PewsMUl9bzt@T8>VU2j;VR=f2ya|jHg*t0 z{fai4P3o%k_rE#NgN>ZwATojuVmuX2XdBn;ElD92bM|iJ<)uV*5mAYcloGWBZ{(+? zpq|p~>L`NMZ%iCTxNb5i{H&ZMjHf#aPcd>MuX2P+2ZP8+^i?NcS23Ohw{#PKitG((&C7_&Bqna)A?{)b z^-a6rF3Py2g@lM^0i}ivYS5rz#E@?XH5GX5@YtsfYO3>W;NYI3X-hApO&zTpVD~?G C`lrnR delta 15371 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 diff --git a/pigfx_config.h.in b/pigfx_config.h.in index 543ef05..4bb45f6 100644 --- a/pigfx_config.h.in +++ b/pigfx_config.h.in @@ -10,7 +10,7 @@ #define PIGFX_MAJVERSION 1 /* Major version number */ #define PIGFX_MINVERSION 7 /* Minor version number */ -#define PIGFX_BUILDVERSION 1 /* Build version. */ +#define PIGFX_BUILDVERSION 2 /* Build version. */ /** Versions: diff --git a/src/c_utils.c b/src/c_utils.c index 2ee6ff4..9fcbf05 100644 --- a/src/c_utils.c +++ b/src/c_utils.c @@ -32,6 +32,50 @@ void *qmemcpy(void *dest, void *src, size_t n) return pigfx_memcpy(dest, src, n); } +void veryfastmemcpy(void *dest, void* src, unsigned int n) +{ + //ee_printf("veryfast\n"); + if ((((unsigned int)dest & 0x3) == 0) && (((unsigned int)src & 0x3) == 0)) + { + // both 4 byte aligned + int single = n & 0x3; + int singpos = n - single; + int quad = singpos / 4; + unsigned int* qdest = dest; + unsigned int* qsrc = src; + unsigned char* sdest = (unsigned char*)dest+singpos; + unsigned char* ssrc = (unsigned char*)src+singpos; + for (int q=0; qheight; // Write pixel data to saved background unsigned char* pScreen = PFB(x,y); - unsigned int i,j; + unsigned int i/*, j*/; unsigned char* pSave = pSprite->pBackground+8; unsigned int height = *pH; unsigned int width = *pW; @@ -504,12 +491,9 @@ void gfx_save_background(tSprite* pSprite, unsigned char* pBitmap, unsigned int for( i=0; i= 0) if (balance>= 0) { yoff--; balance -= yoff+yoff; - //balance-=--yoff+yoff; } } } @@ -1141,7 +1123,7 @@ void gfx_term_render_cursor() /** Fill cursor buffer with the current background and framebuffer with fg. */ -void gfx_term_render_cursor_newline_dma() +void gfx_term_render_cursor_newline() { // const unsigned int BG = ctx.bg32; // 4 pixels @@ -1153,7 +1135,7 @@ void gfx_term_render_cursor_newline_dma() } if( ctx.term.cursor_visible ) - gfx_fill_rect_dma( ctx.term.cursor_col * ctx.term.FONTWIDTH, ctx.term.cursor_row * ctx.term.FONTHEIGHT, ctx.term.FONTWIDTH, ctx.term.FONTHEIGHT ); + gfx_fill_rect( ctx.term.cursor_col * ctx.term.FONTWIDTH, ctx.term.cursor_row * ctx.term.FONTHEIGHT, ctx.term.FONTWIDTH, ctx.term.FONTHEIGHT ); } // check if loading bitmap @@ -1210,8 +1192,9 @@ void gfx_term_putstring( const char* str ) { while( *str ) { +#if ENABLED(GFX_USE_DMA) while( DMA_CHAN0_BUSY ); // Busy wait for DMA - +#endif int checkscroll = 1; switch( *str ) { @@ -1273,8 +1256,10 @@ void gfx_term_putstring( const char* str ) --ctx.term.cursor_row; gfx_scroll_down(ctx.term.FONTHEIGHT); - gfx_term_render_cursor_newline_dma(); + gfx_term_render_cursor_newline(); +#if ENABLED(GFX_USE_DMA) dma_execute_queue(); +#endif } ++str;