From a485abfc773b249f8181cf5b5410ab3cb8b10197 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 21 Sep 2021 17:02:20 -0400 Subject: [PATCH] Faster and smaller coordinate conversion (thx @xot) --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.gfx.s | 127 +++++++++++++++++++-------------------------------- 2 files changed, 47 insertions(+), 80 deletions(-) diff --git a/applecorn.po b/applecorn.po index 974163d2227d0bec928a5730c969d1bb95da4ea0..cad9bc6423bfc3342d862dec17e8012815261d46 100644 GIT binary patch delta 2600 zcmZt|3s6+o^}V-nfu|w@@)PCST0VXv(UH;w4Y0eiz!O|{K_oV=9X}*ZTkB-TG?NY+ z%Myya2~p?>YCLbKh#Uo3z?ZW=U9-wusoWj$B4)Cy88<_)SdMyD?!TZWL}3+(K{*?TQHl z=a;NBH%?28zQ%i!H?!AQ2AJ5tgunik^d>JClGwUgiFL zhdNh*eBcoGxr6qmfE6e<1*D|u{ic2827}-9<8niz-}Fkk;e_81-eY=4#LDWggRMYS zDc~Hr1gFKH0^Fehe z%?>jv^pX@@jr-`fCBR3%iR1nQA;IBRGVk7I+EJtoOveO9>YDU~wYK?6(?yo-Y-)$+ zQKTGfCYw>d9CRfGMs!Uk!m4X#sjGT_b5n0mH2<*rE%?BOito}n+pJcptjB7V6_$y8 zSz(1-`?hs^nOv@|vF1soa+OMZ%&IO_GjeUcRVG)d%Sv}^byjKV&fPt>F?8)Nowiqh zhoQz9_c&8zQ*et}D^z)_HOz`p$T^KMn4Opq1bEijc#qQ0P*~VG*K1jA{<0n(cVcl} zf9(JlFg&1)_gD(v3BW-sM`$=Q`}GGDb99U;LNNs(7axnd0KAZS$Xktl#|oE7^7oZ( zEjT~g&f@AZHTg5_7CRr#eZY=l2eLUr5e{#Rq8TsFi=hJWgU}}3Y0i(H_t7P3uZ?l* z;JpAF4-byPBV#Plc{)R|@cbf9hQ)CA7~>Ip)aIkt#~t<7_wkQ39Axm+d7Fh0(&2y& zbtypA(x5Bf62e08a`=CR=+AyS19cRFmDB|rn)lOLA`^#l3&7GO90gv9Ci?UD?T7nc zJwj+Y=PWPqVekUVEdqOf^6YfBsnI{J_g^%f@J}23?HmE$A2(XraaiWPr1y6i{0kC0 zJI<7O>nyc>x?9i`Fj|5d`+I>UwJ-ISv6l^ptk*awYN4-+KuW{~(Tz1?K&i!`JZ!=D z3+PxeP<_pCXsj5dksJzPz~=b1_7;M~WmK&w!atZ|H$;%tFa?z`AX8ChS9B}wityZK z`ycI{_8$A7eFC>Rd%#XRk}zy^60 zc@sOjK4Sn+)|{CvD=(=%Gbyk9?U~8KlI^7pSRyaU+acGVnPf`yWPz!yZ%+A1NXMUclP^$gZRV?3) zd%09ms=et7>?l=fN1cjNm3q5MTl0l8Q0K1o7zvg*=g!=yoXfEB02WR5@&dlB=Y(aL zj(Uo_1&q3_!D>QK*vr#Fl{=O^^9bB9i8B_b`#HA)&+2@*d!lIdDH;^CAi*_It$FC? zsfV6(ZcVU0EK7utUS9f0!v@PwoI z2rdLp@WKoyQHX11)WA^>dOAn1%Ojjx2{zHqaD-0K&B9uz5DN*XP7oqy!rfW zo6tG~9|R7!itfU6rkDCx@!X3%q7qh;38NpE>ldg1Q)?f@Zw9s zhloKf961NYO2jov<1>xGM7?;f_k-ek{xN12Flw9&U(jR@p`A*Qnt-=E?c|pP-;`>h zlB;1lTt<8=s8I>v^9@epJS=ji^U+2kq5CoQ>v^hWo|6oe}TR9EzVcAsddm(QFxrix~G91L@W4F&m`yDn1O~x?m73Kb6@oOb$b0et1K+)(iY-Jt0STa{Sc8Y5eFBA9a+FKJ>fi=+)KQ&~rS%wX)9TjGQd^$~NBB(1-cc2cjSs;-D0{ScqtRRmdAqzB< z<*oG_Ks-sM`H^KKh?T|yo{nkl-3SUP@*gNI2lSSoqYSl%ddqprP-kd}E2}H3okh*H zuhbjro9kX_z~cYUlr@yq$9;pE>#NUE%?;J(Da!?H*K!eCeQdKCZ`3U9@-1`8-{G(W z|FMTnU64#&L}hZ2N_tSO9OyzB(+%bbdMF2Niyz*!1-W?#@X`H=kl_<6VQe=UKf0;_ zqlL05CZdh+^FC1_2^abVx%4nv)ZYO@PR zVTKcRDM8l8#9l>idtz^HUXg^0@^&co7aW_4luG?S9XSexQmxj1;?U%27^VJ-BUh=` z6cy~!f96mWY~R(M+>b7d&?zt3`QTJ73$gq zvhk@b+zg&gXZo&I@oJi|%lGVsdtdz}p>3J8J?wz~KRN zqG=E|`p?>hGo8Y$WVvaOY4jUy6;}+OLrc&+XGUXh2e7TYvhs6thbbJo{pM&%3!U2n zmPL$6L9CF1;J1L{NB)kW?5#lkhzX$MTR{pLK$o_H^|AY%O$3RHPp8^~e{hepI)c=} zJ!mci(p8O4)%gaeDm?qT)8)MFq+HRi6}bPfm)w5tSV4zHmUXHvBN>5r^0I{OvDLK`r5+D z)Ikows-X@}#FzDyxB$~p_c5AnQ8%?%O`H*SaP*8yzb(gl3%)jlvlOTJ36BcT8Uh&I zQ#A)vl`2}4;k?&rr#&1s?LFbq&eVi0QVi+f6nC_yAiT=ko)o{rl1ba|#4+1iF$yn` z%IQ6m8HUzpkah#Q@B%7(_Fv*ARPtvQi<-A^oml(!b!XO$Z;HSJ8 z4duK+lqg!FCa`y$^@E9%V)Hnh3clVfxeNF4Ru+4^@91{0I&~jkJ1=$6mQy=y+iVRP z$>@mF!UMc@9e#{iqKTxMD5^U0vrwu%T$MCF(FjZ&mQMBdjQB8j7c;XhYJd%&)nr&S zuMn(^!`t=nT;$9vq7zHla%ODUjPC?7g#bQ%l{Y_tRs1S$p_zy~f0ugm0oC+?@>QnF zIOzn$1?DL{Ez;5oUX(FG)Kmx(%9lH|neb8&UJhEP@pjBy&jW7E>-UNn#xPL-1#^0K z`X5WxevM!5U*aqE$Bf8);l4-=ORwMU9-djZ&?jkL=3Lz472lzfzA- ZP1 and ZP2 - STA ZP1+0 - STA ZP2+0 - LDA VDUQ+6 +* X-coordinate in VDUQ+5,+6 1280*7/32=280 + LDA VDUQ+6 ; X-coord -> ZP1 and ZP2 STA ZP1+1 STA ZP2+1 - CLC ; ZP1 divide by 2 (0-639 now) - ROR ZP1+1 - ROR ZP1+0 - CLC ; ZP1 divide by 2 (0-319 now) - ROR ZP1+1 - ROR ZP1+0 - CLC ; ZP1+ZP2->ZP2 - LDA ZP1+0 - ADC ZP2+0 + LDA VDUQ+5 + STA ZP1+0 + ASL A ; ZP2 *= 8 + ROL ZP2+1 + ASL A + ROL ZP2+1 + ASL A + ROL ZP2+1 + SEC ; ZP2-ZP1->ZP2 + SBC ZP1+0 STA ZP2+0 - LDA ZP1+1 - ADC ZP2+1 - STA ZP2+1 - CLC ; ZP1+ZP2->ZP2 - LDA ZP1+0 - ADC ZP2+0 - STA ZP2+0 - LDA ZP1+1 - ADC ZP2+1 - STA ZP2+1 - CLC ; ZP1+ZP2->ZP2 - LDA ZP1+0 - ADC ZP2+0 - STA ZP2+0 - LDA ZP1+1 - ADC ZP2+1 - STA ZP2+1 - CLC ; ZP2 divide by 2 - ROR ZP2+1 - ROR ZP2+0 - CLC ; ZP2 divide by 2 - ROR ZP2+1 - ROR ZP2+0 - CLC ; ZP2 divide by 2 - ROR ZP2+1 - ROR ZP2+0 - LDA ZP2+0 - STA VDUQ+5 LDA ZP2+1 - STA VDUQ+6 - -* Y-coordinate in VDUQ+7,+8 1024/4*3/4=192 - LDA VDUQ+7 ; Y-coord -> ZP1 - STA ZP1+0 - LDA VDUQ+8 - STA ZP1+1 - CLC ; ZP1 divide by 2 (0-512 now) - ROR ZP1+1 - ROR ZP1+0 - CLC ; ZP1 divide by 2 (0-256 now) - ROR ZP1+1 - ROR ZP1+0 - LDA ZP1+0 ; Copy ZP1->ZP2 - STA ZP2+0 - LDA ZP1+1 - STA ZP2+1 - CLC ; ZP1+ZP2->ZP2 - LDA ZP1+0 - ADC ZP2+0 - STA ZP2+0 - LDA ZP1+1 - ADC ZP2+1 - STA ZP2+1 - CLC ; ZP1+ZP2->ZP2 - LDA ZP1+0 - ADC ZP2+0 - STA ZP2+0 - LDA ZP1+1 - ADC ZP2+1 - STA ZP2+1 - CLC ; ZP2 divide by 2 - ROR ZP2+1 + SBC ZP1+1 + LSR A ; ZP2 /= 32 ROR ZP2+0 - CLC ; ZP2 divide by 2 - ROR ZP2+1 + LSR A ROR ZP2+0 + LSR A + ROR ZP2+0 + LSR A + ROR ZP2+0 + LSR A + ROR ZP2+0 + STA VDUQ+6 ; ZP2 -> X-coord LDA ZP2+0 + STA VDUQ+5 + +* Y-coordinate in VDUQ+7,+8 1024*3/16=192 + LDA VDUQ+8 ; Y-coord -> ZP1 + STA ZP1+1 + STA ZP2+1 + LDA VDUQ+7 + STA ZP1+0 + ASL A ; ZP2 *= 2 + ROL ZP2+1 + CLC ; ZP2+ZP1->ZP2 + ADC ZP1+0 + STA ZP2+0 + LDA ZP2+1 + ADC ZP1+1 + LSR A ; ZP2 /= 16 + ROR ZP2+0 + LSR A + ROR ZP2+0 + LSR A + ROR ZP2+0 + LSR A + STA VDUQ+8 ; ZP2 -> Y-coord + LDA ZP2+0 + ROR STA VDUQ+7 - LDA ZP2+1 - STA VDUQ+8 - RTS * Add coordinates to XPIXEL, YPIXEL