From 939b9bbad9030655a35ff07062024691abb12240 Mon Sep 17 00:00:00 2001 From: cuu Date: Sun, 6 Apr 2025 23:08:27 +0800 Subject: [PATCH] sync with wez's fuzix mod --- Bin/PicoCalc_Fuzix_v1.1_pico2.uf2 | Bin 135168 -> 135168 bytes Code/FUZIX/fuzix1.1.patch | 167 +++++++++++++++++++++++------- 2 files changed, 130 insertions(+), 37 deletions(-) diff --git a/Bin/PicoCalc_Fuzix_v1.1_pico2.uf2 b/Bin/PicoCalc_Fuzix_v1.1_pico2.uf2 index f3635da440f87601d11efbe0c768c27bf31a082c..f29385663bdc322bc62924a34b920586eab1dcc5 100644 GIT binary patch delta 15141 zcmZ{L30PA{*Z-a5CWIvt2$%?{10fhiEdpBHBVt5w!L@E}QPBpZ%8N^>b-|?;t+ncC z$Exjz*7j3deL=;lEyb#}wzVx(+q$*IZfIQ^>yki7@}0Rim)!S#{(qilGWX8RIp=rI zoS8W@b1ARXlvir1x+{>D^iXt0U5|`XC>5xfjOFK!X#J7HmoIZV?lOmus}SC#Mmmnu zV3veu9XzuHe*Xll7ShGRG4 zu&yQ&YaEx{diZT{>)`hrcLe-?eyRPBf{MwB|=Jv)D6-@awVjrf^#2ng=C?j z1AWnr5%+__BO6rl8b?_RXBv7Z%Np9qB}CXXjtwm+fs4oR^omepwd!icniVZv0upML zkQHH_S8Q)lU=BEFe2q=4M&p>#a;=F`YaG*CetT9_^mu z+ogiS>nbWLm;sWEN47+sQYKIEq4fXFbY2b44s%TR`J6XBd{ymD$4ah_wPF-WeyZz7 zmbHH$g)mEEC`vGrRAZ8w)g~IrGsYbBzhuAhIkfsnLq#BQOi|ME6%8V?Lunu5c z6CkmUV4c7uG)5x)`;ph;zE)~SwsZyU^xi0N5F2?8PkcfIi*S!yjv*m9$U!`z@Vm(q z2EVU)wD7y$(++-L@r1+g8gd(V4Kw)SZB|>5Bis{j6AcmHH6j#V7*UWv?@M|o^k4Bi z$Y%02HOlxPsQsx`8Lx)?N^8i7kn9l0d>89LR&%G7J+Zo`R#h%ah$-ROcq-A-5;Tgurg8KqV=Wz!hRn4*+5e93 z*Cwv63>aGh`%;$Yj^xVMbmBe+v8Nzihoq_TIVXC3&Vi8r?dBXYFtOB-pDf9$$v`pk zh_-7o5+BLHZidhs&Fvbs@eIv%@@%&rsEoYU&EJ&NN>4}bb{m3L7+sv@Uc)a<8MO?9 zzzzI0qbAITUNm&&>owWP5#@uDT9w_LWdR?V(9+e0vw|GcS~&awur~reu4Z)=Z$pI` zT6?^+=5oX|_t&D`MIGV&k#|-RychjixVtb0-tT&UvvcGf`%HVh-4F!@e|SyB9QkeT z%);Gs+51oA)9(6_7rn{0cOShyvzIL#$}V_s%uOgh0*uq63#|jTu z$KBbi0f_nZQN$Qz2{vBV> z(&WP5@@tx-QcN>SYS}c;EMM&n%N_GjQ5sVo3V9{u9l)svv~=)K$C-DmDStoEtu8&r zI}WUxq8dR3f}()B#If~zMuJzceFq8g^@Dd}B?F%2b%O+N0iuY?PQNuSdldl0&Zt~rpO6Fdl``(((V_w^ZIuJn$gi!u7;(9ga>9VHG#Yt{3Q8|oeqY|T(w zp>mpaijaS3oh>#RV&<1O2 zc61{8gA5zJ3@s;TMo*C%By|z>?;_K`xruYkaCt3%H*ksJ-8Gjz&JyxO-t*c`;O2QC z`(PKC%*g({_$L#*oW)(w3=vb}aVotYX9wuH3|KEpYE(8ARyppw)izb5&(f|T#inw2 z-5Do5&LD!u8u$|6B%vVMaeAJOUV_IZjJW8rcIWF6L=Rv2e3qmJZ1Xt3@mShOIaA9*^@gPgJ7Ed78XBZdk--c(3*Np!Ejf zcOAJgZh$z0jW_dL@>ei>O-M)2lZg|OBbk|*noNaq00?7o%Y^j-n3MGUm3&<)!IN60 zLPN4>!DN{QQ(Vzjf+tUp7QF{tj#K0sr+b}GwQ6d&lg*Q#ioR}E;}1Z>QkagJ=2}p4 z1@TO78}2>3i+sDw_)cBK0*l8@`;?+%mI#FHfpjK$a_R`RSWebXO=7dip{Y4)?!KUe zcWMmJu!x|inIj?MPKa5=C5RkLhC}n7)9T}yKlMA4iMR%nmY*uquoYB5a5cYXb^*ICtqvK5ZdX0GmI^2al2{Q3Xr z{d_&opc9;*qN<0QePm+(c(nyOfvJ%{N5ibeEY$`uMFf~41DF9WNAOHbkiRh*Gjobo zB4oTSlbV^+!bIFY=T0BEn-E&hGV@~|`xX#ffE5-a$t*}<*_?tT)lC7*=7KINhwxMj zPcGr?6=%QfnU-X>^$&{2Nej zPJY-hGj3K{YH}OjbdhhmjBi7|<08RDQ4>E(-19FQ2dhh+A=&dTlyYVyiFf#+ZIQrmQXQsnuhj3=sRb9%{i_2mg{9w)0xrZOZy zmn0b(J9X|6*AFS7Ctyw-&ZcSR)e<|RE!BriT?Eq+EIvS!RN9Y`&MciH$p5Nztk`ma zS^2nW47ssMPf{2D6`)?M=j&4};8lwUFuG?JcN6GdT|5MW6h61P_(vpbXMnW|D}Ac8Q)>^sl*1@RG*3Y-m-%<^oVD51!A1vS1@z49_CP zOJ*K+PQwXaT7lM({Y#ToyP)nUxw3REw$wX@Ze_YdT4uV#pNbX3FGp@%9RW*KQS1R+1BIpHM>olG|&01(d1K^O5!Q zVb-Z=gJ;MRS!Kysz2r@SHtVZQlBYeCdE0cD(U(A43W@pLgY{hl0ygM*<)ibn2;N|c zU`jF%W1Ub8%2tpm8>YonJ{HyA1tp5yi>~wBsRtTPm@mKCFk0mFnpvD%@y2xKC6hKz zV%edMso{*L19l*4TbONl#RM{TOElqMHwFM~((~sr$s~AFK*MZN!)%#`t6gF71aHBN zZ|0V(0s5_azLyO{2X5WV>dtMQB-U+%DXn$PV}jo(7Dg~LEqP;IfN;Cspm*@$x9a;B zj&NyG{($l7Hvmc7UdVX8y?wdVJZYo|X`~ENQ*%ZwGnM407tCt%#EyZHjEf?7XW?76 zx(D-L=h(usd`Avr_~njN!IPA^VgI%CAS{(h5<89(C61Cwlr2?ByKKQmn9-L5fURWF zE|U_T$j)88gV=_l9+drY*D#USTV_6O&BGZ4zg-f_nlrr28av-!DG4)-5rvJB2^;T9 zh2Xr>3L&*H|1qXGg)JhW=Yq<3!KzH>ot49wa=%vglh_gM9+>MDikAuAV^=eoP``0c z&mhKvO{Hh{^s+Fv8dyE~Y>)FtFN<(4d0U-7w0NN-PCZ~paqV;C?9n+AQ^Qyh<5(F+ zy*)pT;Jta#l@PJ`nF|)a01SR7FYl!y^}7&Du0_cNzc<1B17KjX>tR8?0MD>P5UiL8 zWz0075_XX{-&@@#c)TchyiD*cZzQ3dX7eeBvskd{Fas$Tvb_5ft+irb-2L89NFnf5Zuna2E1L zNRy%cUTAw0o*j_hWpvP%fz=4QK$k;qgo&{n$}d4zV|ZrH<2V`%PHQ4R9`z5t8Z-Z0 z?3Tj>AH#adNf|iS3v48eKNcS{0hm>RkaPoCek@7LUeo_(!K_NF0dvtX}I&x!1&Oad#MpN0F{)KMY}SY$=N~lE2RSW2?`Sl&bMAg3lQh zIs@rG;C{12e6wWuVu~gg5qv(clO%(O@asD+rs(tojp7~G zcT%La@%+XB$S?IVQggO#HWpbAdz}}As|S$Y=gTIkj}5a$iL+%Ax%jb*2)=+r84Ko# zZ1&E*Fjhbet2=q;f-nRBb)i!fYr?hxYzJa)v079O*dBoKjh^>7cX$Z?CXQ)6=$mI) z_Vzdab?#d;&%?<-!SzwByia{6HREULNT$|zlOEUmAG>!XC+lam;kJvo?Q-0(w<7qv z32iuE`fi;Nux8Z2VLuqbSL zIN0%C_2{a7&SkLIX2G^w^pSCwx-s0#FLe^sy41FO8;V49MKW}X@L+KFA5z*g6_vT| z|7%4ibAHHVTn_wDDnk3w%qwoMRuX)$ zo@g8;#BppsVG|r%;kJ_38ef-08A?P^B{ET+8xWj#{km7^D8}WhU;WzxcIWcDo{z3) zTY%puw>4Pt`&(@cOGSpIGKLWj1p5A&FX-!!k;tomZWd{p%)BrCQ4_&8&k7Tkpczb{ z+2sDsz}|16$abNOZMiEuh2X!g3o8YqvI7;1Pm3XyK+?gc6YU=+TXgT}d1Fzlli)jT zJ(9jycl%94d}M z=nPrpNcMYExBvF0V~#nJ!HD)BJ-;I}p@HCkb_wUG?DTXy`Rt!D!upSLW7~%8lov&; zFUqiPuVBG9i!o#EJMHXETnQN6Wq%!FTS6g7hhs{3z9f6TEC%m0AC6}JefZ(%IL3`# z6NKkZE82NDw;Cnu>%;sbB7pj_o@W6l!H+G1AHaG?#yl2go;M!%Y%BWeac_a4uBKgX zOwq2n5gj_r1iKTfhXZ^}ZqU@|k(Ir{0DUOh{lWDcFOsx4#%)s3o7H{L+{&=}5H-q#r&de+}G&3pWRKjG=hpq0EW2EAm&f8*<>n%5_H- z5|>=gKGv>0^B;6{mIC!a(R8x{uB!c4u7;JO5m(BLm<-nz6!U0rD7zD527!wY`Yn$} zNmSidiBzj(RQH+^a)u(sZEO36>G2L8HB8{*o1HeArbblC;`bjdBVXeq`t&H*P`mQ#L z+o5{&0=?f3b}jy{pjsX9Qr^zeQ>;VjLCpA!-!vT>C0so%r3ZCrzG#;SunXF60Y;H1 z2X&)!BT;pLQ54d5fYqb-yKJ)Sy{C!6X7*w%?X-6kYLeO-){6kw%K)-Ah-Kt^;0n@Uil(CycB~b z2H%0oeE75@j$VmDX}axBSQgkTGnapERj48 zwH+rJHj3(Rl&P=Qy_7?7C%O6f<9s!^h0BZUdXQJ4GtR_1ExCHG_!BzA_$jjheA<))6c=mOXezgVW8yBs%pt+)b zx`NlT6LgBZq3LKWUDge5Fa1}oRNEb#j4KbdE&&^q!3L=ut{*ur)H<2=>W*TA^Wf7N zR$WFXc1NE}xD0QITE8LFTDPwB7{xu&RxM+-j=(;S-DJ{Fd!lI)9o43QK0V=%l;RY0 zG+Gim83Zo`Nl~pF-b!!5U8)GZ7eHs4QJjiWf>~=3%al|I4BAF;I`H&4&%tbvjux`Z zWJ=S~%Tm2zhlq8D4C|cypw1NcK^15z-QNdwhU|+zXuL#1wHd%t`KWw6#TjU;IUQiF z@j!x{gFFtB9g-q9#;(Yn3LVGQ-K1ACP!_W*b@v6>oFfG0&wj{)ZqgC`(8U1n0l<6p zgOGTN2cU9vlFKv0j`^aRvDcoTGdB};Vo1k^=!6guuW{dxi#)7DuBME(b4 z{G;mF5T1kvpnCfBB-CG34_C~W>06V~uzuTp;(lztgB$j+$(k9?mH3@O;iwm!fxW{S z{ZMw|tF>*i#lhz8q7OFzZ9`x(C|YyhH<;qds6cxQz6E3gu0Vd7Zk~){LF~cFXj;_% z{TvQIDtx`Nf2@lSMVoz2iHqR_5%&i&+*f?eb*7?S5qIG5o3BFF5-)^bknYg0r;0jL z_cSmU>aFTQ@pM!Wk@h}^dqG+Xt*V5U+oq#e+N2y3r5ut;S@jp6K=CtyE~46eP)M;Q znRjO#+IgVJO@tr{n1{+baB%n9 z8&U4rx~)~t-iFM<9QA4e=fFGWZUSRXh9%I}w;Cv{SBMh$YTP+bTXt@aXFEd*>q z@ls?_32o@8rQq6$v~Vdp5|FnXj1X&Qq15s~e;MjTP3mNtOl%qpAzpc)5!J2&+S3nC z=_p=>GGZ$H#_3wa35rTaTUVnliV1&GyapvkNCZqFX3a!8aSd9~asDX| z--q<)5 zPhb{h{mS~f%nz9%kimVs0!>o!(B>>{u0Z~412)pvBYk9fJZFl5{gTfa*_r_d&U`rS zxgNdUleNd7g)~fr?_ct#=I_YAnjbTxWH_rwxkh*rXj;~z7!4~EK2Q*b`>W7rakjw_ zcWjVbc_YLZtYNy0`B~ayBcdJmhQbGDFg!Ii=S@mC_du7X$Tntijx#VT?4>t0qBIR_ z!alocGtTFtaXyzB$LH+VOz|ePPb)DT$z;**H=*GY9o23D&twPBdujX@aHPF-;1=|b zN}!;BYzg#=;R{j17cvRzobxcNY=!A@FYUV(E%1|7ZWrUy-2BDR&(vhQt}nW+0M zWbUH1!TzzA#Ri}Ecui&OIyJO`Gj+1XR-4M^KUk$Sm9V;=bm-gYie%ilZ$%8>$}k)N zQ*RX{n=4V^z zUZ(x`q7Ts|`d}{%#%N*3O5N`wb0{t}Rx|JbopyN-bqTh#;zCO`=SZYay@%e9+3ikP zH*4L_!&?r+C$%sDQoJhLjCHFHuRAPBPPiyaz9^GiS>bcWdGlA|LJhDwNt5?M#J-H? z?nA>@taWGDT(xjIVDdTZ;NY5lI&{h|p~!Iu5M{YJ)2x-Im5p}Br3h+RKF19!Y_0gE zRDiChjLzcz?Zw#-KG*;DFOhPTpK=6HW`x4NYW#_u6I@qKoumTQ9smn-mbf~K4+O@c z;d@cD?`4|#2JD7;^8>LFbsq#DZpV-Li{e8vx*tWlA7ym8_M!O{R|OhT?P1g&nJGRT zC^K9U39rZq&)D@4WgJB(qp^px{0yJKXd8oaH97CaYqDFNAJe~&qG;nn*j--o?=aaH zM`~L%gq%qDgpj&x0Hn|PD(tq7p>F6T%{_)_Xr`|M2<|W16Dc-v)@fR zuKNT%i!RYyp9I3Q)L%p?zsRJt%MH)D86OTN!yf%ZZj846hP|5&-7b&7g&t=N?SBe& zhzN!cwJ&fmr^6a?2l8?{`xIIhRN-Q{D(S6L0U1<#8uUc)4Ku~3(Ihm8zHl0KM5pMs z)2I-|QXjmvne>K;=Y|YVjayYk@mX{d9i-RJ0_AYpd{$g{sQWXvD%fWgQhW|2CYQNp z7QRymXGSa7A!bH(s_iY8O81tF=R8imds~zBpV^VIBjP}{3v~WD)B)Aeb>~nQ^ggXV zhxBcWA6ssv1ut8+2tH|~f1X2uE79LXu)oQ`>U27o8_x$Em1@5P?K20kDf3H+_7g)d zlV%iU_(P=qLq^M4tyYRJ0B!fsdSXRkwDoJ0$PZ8q%B1+4082xYNZTZ%O*AqA^~g)i zp+7PKRQnwps9c{x6n`h9y(QA#lF`2T)|;Ctz7%LgwLbvu9QdR72eFvCe*{a5MVI9* zuR_boSy@>WUkwx+?ut_G%A^25KzJP*F@#p6V#^EF{tWcEG-V*gKSLF>jur8=^%qc_ z9l%iB7%&>u{>pR;QYk3@72VMtg^$3`LaK+<2&v7B?u+8@%f!zto?Afi?*WWd`zI5< zU{MLhe~QJ_-2_TLhYP@+ZlX0SUVMqeHH94RF^j|7{>9pNFzqNZJ=U z40kv9O{fRh?2lMNFNu4ozmR^#_fV-_0zd%Nh(#cDF@RYLj6gs%u=Q+wD9O?fwYBOCkR3l75)tJ94|<1G^U&TNhA# z4~p5LQp?{ciT_CR0(7@S-tr%4`NRwJODX;*P;6)xrN9&zkW%_A^x4BeBdUE2v@_-v z6jS_IET(QJEFuntB9U5MFwy$=!c^M=Eld03MHIIL7#KXF6pu{GvkPV~q_{QEh-$q+ zI}rB*6}^%aA4qX26mhh%1%+=LuK3r%dr>AYlUX{y_*sfW6ia7!OaNEw4(t1;aZli|{8iA%X-GcN} zXK+DC9WcnDGr|Y#U`Rmv0-k$Anhnn{Lf#AVURwY=JRgMT=OFJ0 qsrRcKehtz}#NmrS`+Qyy?1Qwm#p`>qcjWtmv90K7K4pG&$o~Pdhk!x= delta 15582 zcmZ{L3tUvi+y9x}v#?wi77obOJivl0prWAReMMN2)x1_-6Gd%NQ+{}f$_rjHypy9I zQY3PMW*5TD%1R5&iqwkC0z+-RzkfcT**Rxsp6B^K&pb2p z%*>&5uex-v`dF%h_|fi)E+nyPltQT>W;&LgH^TN4!(VP-w3r`L5q^^o(K3vh$0R;$ z;TaSB6%B{d+e{<2bNr~}4;^Iq+2IUd2>Glkl`4j)u<961^ht0(jq*wGI}K$>Zlf>w z#Hc=oHyeG;C#CZYSG+OB$nbua@>cx^ekLY9`uTPDwPi&$ewP2x-+eg0<*m1x8e@>7 z(Y@dJfz>LA18~eeEm8T@(NA#@6zviJHw+$%Wfs8sWzyqM?YYSm8K}OGFM|UinVeb zF)8w*^NWVFEa3y`a{nQnJGU{l`1WH2;V(nF0O=Z}OOS5SpZz;49IaJ0|7Qi|RZK0mLW*zQRF|ukcY25T zqb1Kn(bo~QcVvMJ$e|B6Uq^v=5UBqv3bZ zD*L5QXx?DGk z+@s&VB#1o?=`tjBwafZso69-~(tCEs5(yJa75zn@qGEs|yGqk7g-DNd zP;x}TZ;yf+HF1dM3Z0(Zo$z#Xvb!m*k)Nt=Cl4hnJJ}fho%-LJGHVcn$PN58vpUd7 zUWn+%)~R!eCDa8aH7avrwjO+BTx&NYpY3az)XMPp0eb`BW2)C2V~wPcht~GCf_V&0 zn0I~dzPX*@{eD})TzH>*y>MS)G`zR8{b6S4o93D3ICDf86#UVaFrT4+%$r%bZyvs1 zrJts9BkS8zjBow>`pjO&U?}^#?e}@{^Q(Yy`n+*5BVq!e>`a?~uF|sH$<*2a0)Ly~ z2SS<%X)&Zm(7zn=laSiGvz$gh4BmXTlW`A6*&+K0Kf`%02sL-7=*8b6>lr_!Mh7V#A3x^;;#MR;i?K^ymXF z^+OL6TQpql9!MlKDuU56gkd5WhVg}bl567)Shi{#V`y^PLpCONO`!y^S0dH*E>dRx zsH8&g4a${FoeZ3dl2}A}v7ow)3{~b2N|>~#WpwpHeSzbKjM#*(DgM`d^As(^m{1$X z@6YteflW1ixd4~- zl8Z@T8cBLr+OuyWsi05x9hQf7ViF>aq>-dSO^WIon}?!Y$q(xvHkIO{Tw4*0wj2}h zic{qVSa!BaV}EkduA(b214#9N_j=#KENlGyxJT0%Nz<4Pnr0gOP$u#$qR(Z%6Sx+f zv=jhiiA35jQ333d`p@yhGHkt;?&!afCB0ldW#+v)OUyfaG5?`{^n=oIdSig)j^lEZ z66f+YMQ+Z(Fl*q8$oG?hgH_10oRUFZSeNy%UFJzOgE^`j%#-^xXYe~2jj-aTb(Y)@ z36j9ZMJK~e(PnU&wZ*3{HGj8|Br-i(>(4eDr!zes*4N&bS#ez?cwM~UQJo=E*}Pjx zryC}T`A3G??9WY%P9ho#E|Zl@bo9Bb1o(Yb{H@OFqPzhlKV|g`)4{AlGMScA<(Zbx z7^NvPn`G8UOd66+x-kvf3B}3_K_l2ZAoZT*8n`e zhEB_VHhe8C45&4eTQuDE4OZe~v;MnXUan0GC9Sy#B^_y@}vv23wiMmOee z4wMB#gy0d7p_2sYyaf1|DzcOf!^|niH>KH{*j&ak*olK4>B~c4y`edIaUpj^-dMKr zJ=+FU>iN7wYywaENZ?J-Q6uxarGW`h%S^}zLdu3zRK5C`)2eeZywe)u3ezbXoz_0| z=*WH~k~WR($KG~iwhxaa31E^JK&pE}N1Et}Czg{^`sEXo*hfu_MK&4LjNyW3*xK~} z)HAx^RCR;XT1?Z&Jf|sx5tIwk4|Rn(lO7!t7pZGw^!7S5R&zBj{ga z9^?JmSR>Q@L7hwgpkC3a04qFU=Z!@*W?bF;|3~IzH!f(7k@p@Rhht)c-XS5Y#l3p;tqXiuLcr%KXNy`;I)9yaY&N?u$fQg#B`S#-eU5k68m z-7q-`r=k;+^Yk`R4Z?%-49BE2b&8K(!o;H#7mQy-2+@AL1bs?kP{&Hzd+Hr_(Fb8B zSv9VQgs6uXB0A=oFq-+yK$N-kng0EdrxuX$C6UKTMw|81)<;bc&of$x6`a=SR_3_2 zhBvybw_W}DHtUI2lB=);JYs53(wonutIq&p)I*j?HThu7{4~{hte}(f$NSVl|Db;P za{|$hk_}a!^@vN8Fs6B9)XmiUx*OB+Gbd?eLgZCPKbSd1E5UYIce_~Q=!dRF5`Y45 zkXgKq4^eH@9#HZV{(pem)GJ3AJgr#=}EOQ(z+p?CG z8&QoJR5XtxbLjKt5o9R+)I6$Fv@HSR(1CS{DG%yr#uk+HPN}c6d@qx%%#iqIc=0Vs zxzkXPa_jqo0pTe(8_2$~wgk)jy&3)|NWSU+|Frpk)o=BB|F8Smn+HDA^10>8?``Kr zJgxKeG->`5zGy)R73fRzXP__qI)9jwzuhE5rkVv@0D9fuO|WWwtE4>_bPL(riSP#? zRX{@WN?N#}i}Lb5CEd6{WO8RgZn{R7SnOcy z()1obqnf4AZA(SJpSd(yB-*-kC}C**($VZ^!M|UURp$mspa*mST~g+wy(`W#Cra{2 z8g-T=u!;fIEix6=ya@bXY~&5lDh(zIR45moi$GN{5kCu_Ve>XzB6tZ9E-NF;=+R{< zs_js9g#NN@7>r)VJ-Ttrx&k<^m@h^s=je_V8(Hn~QjbF15DDgx4lqj{EN)ucQLX0C zOi8Q%ifjNW2ugbocOHr| zXgeMRlR%JNYf%JusoP;QrEwNRFkjEanakRRtpmX8wu^u(XwABwO6X_$&$?c0Xx+m0 zS!tLAd{_tIWe)bGwlq&8s@VX%HXKWkeXi2W?^uYw;vwlEq4!xgbYqqOo-dGra5<8M zoDLE;=|fO`bUo~!Szv}zI&IUG=!%DuVYWkw!UW@lIdfml;B-qbZF+)5B8l^6=(H^v zXwS)8p2FR} zVit{y4e60-8f+*-KS-TN64-67nvRi!?F0Gh6Xr-`sx zh^0s0P4NT*zr7poi_;PIp8efKR>`KAWdw;&OKLprrABOaYJR$zO;67+syPX>M{_Xk zdu&cP?x^)>PEf8H0(-2=rN@u;48S);4Yjo8SRZyA94g5IsOAKyc;X2%hAujB6t;@F zF1d=EB*~uSC7bF_X0AkDrO@w}AWa0tUV(faBn*Mj7f=~EU*Peaq2ymU-+;1@A#Z>* z2HICb+eUb9hO`Iipe>?3CMrYtBamxh?$Sf~GU(k%ct!`YoQwfSOrTd!=CGGyww;iG zR)cq);yKw75gghbLx87G#rZpc*+CF;trJ~+DoKN{*W5*WY4xf3%G7_{D+LMFPmwg9 z;-zt#QE{vY4gioZZuBrJOr!ly4-D3y!y zABvMJ?R$2$XELrmJA-wl-SNawu`?w8Grahtd2Z$~{0Q3p-248bhd?Ksi=cPT^=7rI z@is}|=Sfk)lgzu!SIxnn>*8@~P*@Jz(Y~iU(ZOHzK!^*zh{tT(7vnq#TE6JRM$er% zS4PbhNC*nN5K!IuF^|cDS%|nUG0}6+-d8K$v|Yk|2L@N$&TsKr_OMsJ<~rfRiM#H| zxrP&M)(hh02ej?~b(1n~>=KX2*^15hM-FwWYeFN_s2!$MB~dqJFt?_78+ z5}RZ~uz@>|#8!h|RnME9)?H4SH`RR0J(idcThkhqDa^gx=%Mje@yz&s6Tr#(_8GLw z{%=>XEL=rMq~9fWa$5Jop`Nw|V_JI?{@Sp4|GLL~P;6Z+eWos1e%#`Iyc|nEsVh*z z226&)nI-ki9n`xt!K2Q~OY6m0HnSRTCBRlr>n(@jxC(-&ZLrt&jz=$Zp-yY0gEwX( zsEk&(LtTCh@jrDrIUaGrF$OSUVCQ_&sXgwpz5;u9Nd>W^_FrDXDuVqy!-tzI!JFFw z-j8XWkk|jaouqSr%tC4J{#eW^TGl8fEq{Ws)Zk!uw}!VLP|TP3&hNnYiUWcVtyl1I z4aV-Z46&=xTd;czuGO&6hmT|f>J~_x7I<;`SL}~V&>wI~0xnWP`~2F%qM8!bZ;8Rj z#3o0@Cg?%wjibb94yP=fLvilhL|<*(%66%T6EpX%4_71!EAkRXb=MDwy@hPPyFQi; zuk-Ge8=%6CiJk^)ZtP)0EX1QDS1fTX?!fV{d{Jk2F%IZ?h zEkJ+E!79?nuaXPXmP(wLdU5v2wOex>M@5@{;*Jt!Y|H4-J2_-9edW$;Y?@JK{!e13 zC>&&u|A0h~UlM=6gYKaHErZGD^aV?b+sBgsR~Se?w9H|5WyO0|53WQ4RN@7Q>h4vF zXTf*^Tu#5bH(Crdh$+TgQC8&MGm+3IUyw*&@FGR0Q9!%hVoPZOLb?W^!#aYSN->(3 zo-cbnH%L+boCill)1Z4n2wVat}f8)7)G`#)jR}KKh%qk0*fvk z|4^L9c0KIjDf;eVACaH7I>;0~w{l)cRMbo+nf$UZOZ`3MSN3JG?l{Z}E@G2*0=6sc z7;U}RR-zT;v}PxvDslj+u2w<6m!4o0%!8G1#HMlI3xf_@T9=A4G1|kZPm7@%98iat zV&+DlcoDYNPLI2A%Oz_r_p&C{IixMJ<3lxy)K*7%?aA5zOWQ28)rPj6EN;&wd$$f3eufK2s;#HBbx&EDKag$N;1bPFLMYwmK+Gc`#UrST+0aGvt$%| zrzt*9CQDi^k*)S38%7i@hEDZU<18$xpTNXDvgQhp`;cxVN|@n8Og?zO(-WT41i#`ZO!}1Inu&K=`+A~YK@&*0E^r#ppf@U84BV9U988owBmf<{X?L8m1dzSsrGaJrU^60gT}!f`EG$dW_S zIp>QANWO;PVwG zL78{9dFzl;{N@DQ7|Mi&k>s`5zhJt<>4q3pCWdxNh>T}*UDh)$<*{jEBq-RUNTMHW zXKK#__gJBOG)YlL0`-(=5~qxVhn3OfNxvIVIT5~12@`&aCh1}2R#+$S74j@UAJceS zyr;tjO)T0pmK+QLa=tTRw0oi1K#4k*3}bz?FL|7s+alRwO9xv#2DUIggsqT!nH4lV z^5jW#B=Wotj@XQf!3R9ZKN4=+v8iB>BZ-|GK-yY2I0iy8ysFegj(4t$g`x4}H#Qmk zshzhDdFx1J59BTLME>W1qSDO?Wr`f&Js#xQY{DHK>CJYyh}$M9v#ofx)mx z%))j`me}cK37zP$!oVJ6nFhtYOc_xOFMQsEOksP#Rj^DhXwp#AG;%Ur282N7gTO!s z!*3F9!~HRfsv?D8?}bCNH%aru))J&?y~$^=i~hoEKFL6y8Dufulnc8v$jj`UeBUmz zOm3G1d6yStLD!d*5uI?fFX;l=#lB=boCB7QmuUn|Ci2WA+Y?g(*D@z0$Ze3q;5i?X z0`FI=*x}OqU*Zj7h49rt@-)lkYwyV5xYs3xUhkmLVB%E5=QVO8L1REM1{iQ! zqw*LQ3-+OiD+`J)G)(N;-ZC3oW<&Awv0?AX#oT^L%Ki>gjKrZl%p4XQwE~$YmxK#R zxg>e$q5Ta1`#vdEc|FTz-uWBu`W;^F`UtP)lCA7>O*s!Fup(Z+F1@1ki?>(>=RtK{Ezv$3SuTgVOdh--8nI!4AaZpw&qTwzKMU9zZ~V83sog9Lnm`iBR$;~jGQh74T%!V$@YV#q4l#W2N%4!GLt|}h0D0AA{TbF7 znKO4p(&b18T_%&tknL~`#2zCCa~s2#L%JcF-I>-|HYfAN(WE;8~aj%}k`73ADRU zkbfoN1t@$LG5B2ofo8aEza>03i;N~|Ld`5vz^Y40xhzD`%t87&@_p#;%A16?PBGp zW|APj9uQw|n_)KO;NG+y$Xvoj-F(EvcQb0Cm&;uER0@~qYg`J;9%0a2(ldP2RWLX9 zYaL;bb(zR()m##x_%%Y$a2-!&7`%-_r&$NGECFqKv^HnX` z;c_cMQ;fWeNp4()H$PY(QPv0N;W7@MMVZ3pVnW&VPJJU%3-(3mI*Z9H)e)o=HZLX- zak0=CuK!EU+%IKtO_1MRnUS?P%}*6RUks~Z>WJ=Mk>FB-!ZP8I%KN(Qh&5bn!LaUV&le*|Q{MEbN$(3KFqW-2g5Aq^tpNhM^r z>YVuasDyN7u}0=0XkH{7iy(HsK%xU~+3>>|Y)~YOdXc;oB6C9PH;XKOevv#LCKqQ` z6U$1~1wVhVg=DRl&|1rgUL`gW#x4WTj}@L?JFOKev$dKrF!vV3)PO z=M0bgQZmMu9gI;<4r)Yt7~9#%TKKt~42N6!_UmXtvyE__v5~s^e1Z}_dF9ja<25#o zu?&YvhpDX;hHfKox^djx2A$)R2Un{wUhymL)UPDLUwH{;?D#=>NWs{G>rF6Q!iSIm z7)(+r4BAc>xj9vDhuI~kQI#V3%nmflPEz5AP^OAlKi>(%8m3~0EQ|X_lJ$+3EJ0U6 zPJ(5At^mcVvW#_dV?nbEy=E6_3`3S?FUwYdImBiLqM;5F!d;a3UhKfPl5F?Wf)|yD zU_PxRiKM5{R7tva%576Lk_7l9SBD>FNgokO9~}wyJtWcB)k|+=EE*x@br_JT!tmG0 z&+K6@n@4^p$@|Vr-X>8>x4p#5F0nuG3a$2|7W+vNX%KeohyBSN;j{f@8vCHB`%PKZ z9`zExdM|z$w7hC$lFfCjvCP=Tc*Y!g9QNA17|R-A$N};`nIKpXkgh(QgD;E}50wS` zTYz0^1K8gtUHy`vQh%JW#0yj2Cht7sOyxe`0T$ z%X5bH*!L2e@4e8(w&kzl3)R5tw9xY)YzFVNR%cw<#3>cG0cqrAnyaFo4S_K z$Ks6V{YTRRE}$<9n!{-9!!R^m1NXJa=H-5n6#4;Z+UNcw&?<->{WrD}>_^dk--RNR zd04)O@F$7zrw)Y2pjFP_szgsK_y-&YmXwALtxiCz&&-@xfN~PCog^O`a)v~O1UQ-6a|}%HuwLANyhJEGLzeq) zupyKR;r1C|OW^x#Pp>sfsx>m+PH~nzMGV4AXGv#rT6pa&DU9#@Xhz|ig;K|?fsSGH zjODA+-p0ZbeTmchzFl=p<|t^+p>@xZ56OGNZ|8u;2*G&{)}~l9W2kjQE1YbPKodXfoWJ9U3zt7WDhp5d$#`p80L4V?HSpYr;o_L(Qkc<}XOszDFGa z?gm31q`k*{(j8_cd9}m^T3#UyUaRJB5yIbJkiJT-RtgHl-RXJUot`JHimZVm{zoK? zyCGTRMhA<04I2i7!O*Vc1yu3^c=tfXVDU^{uwO(c{FXQrx=5LspsB-lb)-$vcd$&% zHA@njJ4m<$yk6V$+N+*cH>FlLJG8nCt>(a=+)B{=hys4}Di-WNA&>?rnwXuP-QMyF zw!A_d@R=~KdIrLZtHy0f&g~9zt^qY)oHnSP`d6g>6{vU0)PmzTI2+M5f@yqJUSZC4 zY`a&rC0FvJe3=elk{0^wEhaB)x zT|fg)zbhX|m>+my_InW^0lb_gAbu&pS_UjZR0!l_S3tRem3iI!glkDu`>0oj>v(xM8l1G_b`3`1bpBheYk@K-~&5rZ1YkSe7AZ95`J& zh@Bn8_wv|+YmLXbicim3Vt(-ex&*d>c* z_H38ODmWq6N5Ko(tm2x79h!ktz`w1+3aWtQS)fyGBvKgYqqxD&Tp|s7{HIayc(tNI zpYtWS5u~B#!7CwM{EFdkel2<-cHEG}L+f4U^yj|-Iqu-*c6{)%PhsCaPc zRPam4Ux2h3k_z6jOyf>*kpEB$WvgMRtc3HJH83RB{on17wpSnU<#cet3^??I6nNeJ z`L2O<#)${+c@*hS!#_Lm`ylOs^eLo2A^qG1oEK6!50W7769Vsn4Bw&z^&tHY3CkK| z6uiq7NLK$i~kc0di!|k?w3hMlno~}cgxXaeg+_A zm{KVp2nWhqCXn`m6=G_TB5c&yJz(ET7&xhc-0P-kE ly*4uZdPu7X!+-y)%hd+LU63l?uL)8NAvguIX$z10{}1^y=oSC~ diff --git a/Code/FUZIX/fuzix1.1.patch b/Code/FUZIX/fuzix1.1.patch index c29bbee..68d9a5e 100644 --- a/Code/FUZIX/fuzix1.1.patch +++ b/Code/FUZIX/fuzix1.1.patch @@ -13,10 +13,24 @@ index 4cc9df7a8..2ea26cb6a 100644 /* for platforms which support multiple SD cards */ diff --git a/Kernel/platform/platform-rpipico/CMakeLists.txt b/Kernel/platform/platform-rpipico/CMakeLists.txt -index 0081014c4..1d0e40c8f 100644 +index 0081014c4..794f85357 100644 --- a/Kernel/platform/platform-rpipico/CMakeLists.txt +++ b/Kernel/platform/platform-rpipico/CMakeLists.txt -@@ -28,6 +28,8 @@ add_executable(fuzix +@@ -7,11 +7,13 @@ project(fuzix C CXX ASM) + set(CMAKE_C_STANDARD 11) + set(CMAKE_BUILD_TYPE Debug) + set(PICO_COPY_TO_RAM 1) ++option(TOTALMEM "specify how much TOTALMEM is present" 0) + + add_compile_definitions( + PICO_HEAP_SIZE=0x0 + PICO_NO_BINARY_INFO=1 + PICO_TIME_DEFAULT_ALARM_POOL_DISABLED ++ TOTALMEM=${TOTALMEM} + ) + + pico_sdk_init() +@@ -28,6 +30,8 @@ add_executable(fuzix devices.c devflash.c devsdspi.c @@ -25,7 +39,7 @@ index 0081014c4..1d0e40c8f 100644 devtty.c elf.c main.c -@@ -81,6 +83,7 @@ target_link_libraries(fuzix +@@ -81,6 +85,7 @@ target_link_libraries(fuzix pico_multicore hardware_flash hardware_spi @@ -33,8 +47,41 @@ index 0081014c4..1d0e40c8f 100644 tinyusb_device ) +diff --git a/Kernel/platform/platform-rpipico/Makefile b/Kernel/platform/platform-rpipico/Makefile +index 1f1fdd280..463882cf4 100644 +--- a/Kernel/platform/platform-rpipico/Makefile ++++ b/Kernel/platform/platform-rpipico/Makefile +@@ -8,6 +8,19 @@ ifndef SUBTARGET + SUBTARGET=pico # set default subtarget + endif + ++ifeq ($(SUBTARGET),pico) ++TOTALMEM=160 ++endif ++ifeq ($(SUBTARGET),pico_w) ++TOTALMEM=160 ++endif ++ifeq ($(SUBTARGET),pico2) ++TOTALMEM=320 ++endif ++ifeq ($(SUBTARGET),pico2_w) ++TOTALMEM=320 ++endif ++ + PICOTOOLFLAGS= --family rp2040 + ifeq (${SUBTARGET}, pico2) + PICOTOOLFLAGS= --family data +@@ -29,7 +42,7 @@ build/fuzix.elf: ../../version.c build/Makefile + + build/Makefile: CMakeLists.txt $(wildcard ../../*.[chS]) $(wildcard ../../*/*.[chS]) + mkdir -p build +- (cd build && cmake -DPICO_BOARD=${SUBTARGET} ..) ++ (cd build && VERBOSE=1 cmake -DPICO_BOARD=${SUBTARGET} -DTOTALMEM=${TOTALMEM} ..) + + image:: world + ./update-flash.sh diff --git a/Kernel/platform/platform-rpipico/config.h b/Kernel/platform/platform-rpipico/config.h -index e7260099d..7328df2f7 100644 +index e7260099d..a04331090 100644 --- a/Kernel/platform/platform-rpipico/config.h +++ b/Kernel/platform/platform-rpipico/config.h @@ -9,10 +9,15 @@ @@ -68,7 +115,7 @@ index e7260099d..7328df2f7 100644 /* We have a GPIO interface */ #define CONFIG_DEV_GPIO /* Enable to make ^Z dump the inode table for debug */ -@@ -65,7 +70,7 @@ +@@ -65,14 +70,16 @@ #undef CONFIG_FONT8X8 /* Built in NAND flash. Warning, it's unstable. */ @@ -77,7 +124,17 @@ index e7260099d..7328df2f7 100644 /* Program layout */ -@@ -124,7 +129,8 @@ extern uint8_t progbase[USERMEM]; + #define UDATA_BLKS 3 + #define UDATA_SIZE (UDATA_BLKS << BLKSHIFT) + +-#define TOTALMEM 160 ++#if TOTALMEM == 0 ++#error TOTALMEM should have been defined via cmake ++#endif + #define NETMEM 0 + + #ifdef CONFIG_NET +@@ -124,7 +131,8 @@ extern uint8_t progbase[USERMEM]; #define DEV_UART_1_CTS_PIN 8 #define DEV_UART_1_RTS_PIN 9 #define NUM_DEV_TTY_USB 4 /* min 1 max 4. */ @@ -87,7 +144,7 @@ index e7260099d..7328df2f7 100644 #define DEV_USB_DETECT_TIMEOUT 5000 /* (ms) Total timeout time to detect USB host connection*/ #define DEV_USB_INIT_TIMEOUT 2000 /* (ms) Total timeout to try not swallow messages */ -@@ -140,10 +146,15 @@ extern uint8_t progbase[USERMEM]; +@@ -140,10 +148,15 @@ extern uint8_t progbase[USERMEM]; #define swap_map(x) ((uint8_t*)(x)) /* Prevent name clashes wish the Pico SDK */ @@ -2783,10 +2840,10 @@ index 0c8112c7d..d96cb7638 100644 cmdline = NULL; /* ignore cmdline if get_root_dev() is called again */ diff --git a/README.md b/README.md -index 78d522661..cec3c7992 100644 +index 78d522661..4a7e3d905 100644 --- a/README.md +++ b/README.md -@@ -1,122 +1,34 @@ +@@ -1,122 +1,60 @@ -** ENGINEERING WORK IN PROGRESS ** +# FUZIX on PicoCalc @@ -2799,53 +2856,35 @@ index 78d522661..cec3c7992 100644 +to boot on a PicoCalc device. -**FuzixOS**: Because Small Is Beautiful -+It currently builds and publishes images for -+the pico2 and pico_w. - +- -This is the initial public tree for the FuzixOS project. It is not yet useful although you can build and boot it and run -test application code. A lot of work is needed on the utilities and libraries. -+The patchset was originally taken from https://github.com/clockworkpi/PicoCalc - +- -# FUZIX -+## Downloads - +- -FUZIX is a fusion of various elements from the assorted UZI forks and -branches beaten together into some kind of semi-coherent platform and then -extended from V7 to somewhere in the SYS3 to SYS5.x world with bits of POSIX -thrown in for good measure. Various learnings and tricks from ELKS and from -OMU also got blended in -+[Download](https://github.com/wez/FUZIX/releases/tag/clockworkpi-continuous) - +- -# Pre-built images -+## Installation - +- -Some pre-built filesystems are now available on www.fuzix.org, and other -images should follow in time. -+* Attach a USB cable to the pico -+* Hold down the bootsel button and power cycle the pico -+* Copy the fuzix.uf2 to RP mount point - +- -# Supporting Fuzix -+To update the filesystem image on your SD card, you can use dd to put it on -+the second partition: - +- -As this gets asked a bit. The best way to support Fuzix is to contribute -code and/or docs. It's really an art project in computing. -+```console -+$ dd if=filesystem.img of=/dev/sdb2 oflag=direct bs=8192 status=progress -+``` - +- -If you want to spend money then please just buy a homeless person a pizza or a -coat or something like that. If you are changing electricity suppliers in the -UK to Octopus then signing up through this link gets both of us £50. Not an -endorsement, Octopus merely suck less than other UK energy suppliers. -+Make sure to change the `of` to match your device and ensure that you -+are writing it to the correct device! You will typically need root -+privileges to perform that dd command. - +- -https://share.octopus.energy/amber-calf-514 -+See [the PicoCalc repo for more information](https://github.com/clockworkpi/PicoCalc/tree/master/Bin/PicoCalc%20SD#flashing-the-fuzix-32mb-image) - +- -## Tools - -For the 6800, 8080, 8085, Z80 and Z180 the code is now built with the Fuzix C @@ -2931,3 +2970,57 @@ index 78d522661..cec3c7992 100644 - -[travis-image]: https://travis-ci.org/EtchedPixels/FUZIX.png?branch=master -[travis-url]: https://travis-ci.org/EtchedPixels/FUZIX ++It currently builds and publishes images for ++the pico2 and pico_w. ++ ++The patchset was originally taken from https://github.com/clockworkpi/PicoCalc ++ ++## Downloads ++ ++[Download](https://github.com/wez/FUZIX/releases/tag/clockworkpi-continuous) ++ ++## Installation ++ ++* Attach a USB cable to the pico ++* Hold down the bootsel button and power cycle the pico ++* Copy the fuzix.uf2 to RP mount point ++ ++To update the filesystem image on your SD card, you can use dd to put it on ++the second partition: ++ ++```console ++$ dd if=filesystem.img of=/dev/sdb2 oflag=direct bs=8192 status=progress ++``` ++ ++Make sure to change the `of` to match your device and ensure that you ++are writing it to the correct device! You will typically need root ++privileges to perform that dd command. ++ ++See [the PicoCalc repo for more information](https://github.com/clockworkpi/PicoCalc/tree/master/Bin/PicoCalc%20SD#flashing-the-fuzix-32mb-image) ++ ++## Iterating ++ ++I (@wez) am by no means an expert of FUZIX, but I've found the following things ++useful when iterating on building stuff in here: ++ ++* You can use `picoctl flash` to reset into flash mode, which saves some hassle ++ if you want to update the kernel image ++* To clean and rebuild the kernel image, without cmake over-aggressively caching things, use: ++ ++```console ++$ make -C Kernel/platform/platform-rpipico/ clean ++$ make TARGET=rpipico SUBTARGET=pico2_w diskimage ++``` ++ ++## Customizing your filesystem image ++ ++* You probably want to `echo "stty erase '^?'" > .profile` to make ++ delete/backspace work over the serial console ++* If you add an additional partition to your SD card, you can enable swap on it; the maximum size that can be used is 2048kB; you can create a partition larger than that size, but you can only use 2048kB or 4096 blocks of it. The following command will use that size: ++ ++```console ++$ swapon /dev/hda3 4096 ++``` ++ ++You can put that command into `/etc/rc` using `levee` as an editor; it is ++similar to `vi`.