From a39620bc99f45f11c8016ff56013434e5a9fd243 Mon Sep 17 00:00:00 2001 From: Shaun Inman Date: Wed, 15 Feb 2023 21:30:24 -0500 Subject: [PATCH] misc cleanup --- git/minui-menu-sgb.png | Bin 0 -> 44017 bytes src/common/api.c | 33 +++++++++++++++++--- src/minarch/main.c | 68 ++++++++++++++++++++--------------------- src/minui/makefile | 2 ++ 4 files changed, 63 insertions(+), 40 deletions(-) create mode 100644 git/minui-menu-sgb.png diff --git a/git/minui-menu-sgb.png b/git/minui-menu-sgb.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2d74163448f2f92b3b12d75911fc35cc039753 GIT binary patch literal 44017 zcmYJaV|XRa7w#R~b~3STJDJ$_#O5Ru+vdc!ZQHhO+wY#|{Lgv&%idRC-PKiHYgMoH zTX%&i$VtG%;J^R@0m1*26jcHO0`Ua`0^WfF0i0>8m#zo=U^|OxI4j$kI=dP=ng9tI z+ZmY<{j@POGf^@zH2&i-YQhTyRG#otR7k~b?V=OWT<2#R#Y>yKSHhshskNNz<3w92 z>p533HiujQZt;p`hEbVAc%>Ls8%|-1W#XQWhEaQ*sB1Q@JC3F^TiuB*sp6t!o@MO7 z0#R705LFdK;i^`mDKBNjZN^*$qFL>h(^BR0*}&mw6ozjf z0TinH!w9$AJ+UDMZ+*|(!R3ObAWyB|>7swiG`w8yr^VB1QI^mSSWwk!peRG11+c_x{cWb`0;9@s#>s854Z!EmD1qu=&L4kolWBCF8 zg#H$URP!Thct0JY)!1?DJJPo7yECOJ2V2N7Q>FeD7x@#A9Y$|NBu<};-{V%hVxBsRyEJ}~>?8np^zLSAb8-RfT zo}>Uwf|s?#)C`3TTcH3mM(}CjWSH> zszX+*CjHewY@4hlD&bDw9W&Q~vVz&~)L(KiyD(R}bqjGxh;$sZ<@u>(+RDzy^1o35 zI#V9d*FGMlS#uME%Pn5CBe;ub$NjU(%yfTDykUa{_yrYq*euQ@Mokz8;R3 z0?Xmj9ViGM`QJoP8;Iiei(jdTyf@L|7(XrlR8FgauCg}^H4U7!rG!%H0n8O(*s;FI z|NfZ&$boLdH$;`5Gex1@E5C+7|_Bu~Vzd8D|md?>|Y~ zF)SCEiT|&YAm}$tcZd=EN59`M)wFNC-)+XL9T$JvCJfv*B=GWpoYfoTupmK=_2%H6 z#Dn5@MU{Z7W*+NeT9vBd8Vm5ex7Do*&FQB{LGFi#*yA;BM=P{vi{pp@ro}QyL{=Fc zzOAKLtj>zw-d+J=w7B0-ZbKLyFlb;Bq(=WI8O5DP#^QNhc0`DN{g0hIKZR=UhV=$q2})7O*wQr)$W=^yb*dq z5=^3&RRnjwc@uKZ&>NE%_eFq{$q%H3UbS++);-NeJVfsGMUX3i(Y=6509s&Whb%9v z3P4nZBte>d+PB%vrbA%_;R1L!EA6{f(6Chb7Jga|^5w&?rF|FULRh9-(yV4%G#O$y z|8n0@myj4eIcvu$cImFN>aZ-QySp1tNO{T<%wE-WD#P*AUfEffXu>mFPTwy zXuUuv0+XyEq{^uAU#5o+)W9VzuEe=0iY}>($i9&+DW1L|$j*n$CoOeJsPu%ge;7)q z#yDvpLWz=ym~HoCbpJcs^kIV;F2sd)Vm&juu%zLxa;cG3r53%4OKr`bP_k9en7rMO z5WhtUOH94KbPOsBlHQ8kUo)RM>+xzYG=*aZeq4tUlJ`=vOs*2!q#i&*| zH@1Cw#wk2*JZ^P$Re=(0k&}%rsXLpa@>_epxoW8D=>89pTSUPGMo83bo0j4J%Gi_x${Ps*I_#vr6eXDsd23ZnI=TFSOgQU!W`MgxrA- zx&4LLI?Q|&agwp^0X%1~dh+L}HASLw<-KytIAWf9GY>L|Q**;owZG@a7&IoqJpO7Q z#)qopmzQ&zj$jLm-dWsV((-*$H~#+nNoJnIWia>7Lrf4uh=(_z7r`bsitFVRgAi83 zAjFBs9^Ib2rEPRh$jRyXV*^0|NCy>QTWDaIUm(c5uk!MGAG<-<3?mrKc0AyCa1evj zV698*>sGc>Vl4xe`kTya1S*Ym$qlC0=rDt^`Y@%!spr%jhy?XXA_@vxT)5hkl`u!w z8ihj#iyEnyf2M^3p;VYa^mKLMf2$r+5RKo>&CR8QLSkZIB(kRl&#GK1ln>eVLV@)?PTwk^I(HLatk2KyUq9$SES_v_WyScprzQD9 zLPDa8<%-02b#)mtk47n*nwb@Q^9NNfv7p$I9vvUI2An##by}(_7fi(_wN&VZ(g;CY zxt!uiY?j?P`j1*Up-+>8Ar6*5{et=D!qe3ICipdP6PcwwuE*&(9`~&Dz-INDOBiuq zjGc9LAZ00yDlsuJ(-RX|pDv)8exk%ecxAhWm=S~W{IAANPV)=(nBq$Ibww6}yb=`7 zl7dgWPKJ-tY}wOh0#oj|KZE*rWypU~lkMi&hgmIG#i5jyrHvo{{{1^LM!@q&2A-s) zz6HRzhbnfo>u|EOGGb6~DpP!FsCfGbh z*DtFpFC;%XNm;B^T3ASS(t_#T-g7(l^~Hayn3k2*<$Q`#Lq5aXjs`;jr?VW?EEmEr zAoS>NXU8ziQA8F90k#j_l1%>@vns|<2e7i(=U=~mDexw{37d&{czBQ!O2Tf3V=_B( z85!&6h*MV1mg(112Q?^AFM$$cL~OP=bc3kE8iV;WOU(M70pb{SDlymt{97Id*WjB(dWH;|pNQ{VxFp;81 zF$_xMQ$-qtLz5J6ESs{VLUaBkI>H;r=t6?H9gZqkfkq^v@OUCy&Ra{I@>k|EzgL_W zg^Uq@0uKhgv@+h-QahbY=a5}hr>4_ClBoV#wOu1ULI9ZsgL#>G9hO{Omdrk$&W6N~ zA2p85{NZeiDv%0f11gp8aMk>Z#u$s&IEErv7@!vjJe5Ep-?ByM2F^KQu1)l_ARe)1 z78W`SsfN6~zHqKCL;1U(3Kv|aNF^$wR8D3FA0;uC422SRWSF7*qprF-2LC6}+xt5U zp~+6s*J<`w7~fZ=oma#RspRFfz<0*y*+eSK5lcP091+kJlwqg}^`IiS{mQEV|Moo}*2B$x5Wr5=UP1Ns-loVTIayfxb;+FB zjgw$B%v@blXn<<#=AaEIe{dkeByv68m#*7wUwzqfM6RtgfP#V=FAU)qPYj2NjZ~s^ z7l>wu$yJ&p;mC>roXV`r3qp^vpwc#>FUcB8G$6;H@E38M+rtU+=}$pmkzrU}$my;^ zX~7ha)44)%DE$@BbKfXaC1I4nTFRViNbo( z(%s;1tWly~`$O<@>p#gt$a83t(OOabZB4at(f+#d=ZUsAHmV*aIr^qL86WuI` z_$gQW7FL$Qc0yu6+S5~05Zvb&5INAzB&?Cx&Q3m%*ZmNmU6T?!*7FJxhy=Vl1o4t# zkr(NcrhgDg0!*XyBep;4(;o&c6w=JNb(_{llTOg*H`qBiXeyQg>q}LZm1bcEcowd_ zJ?giO0E`%s7Mk}5R(`cOA_9W#W}C?bJSp=CL@et78zjUVQCurO26_$tgTm0E0$NZy zxr%BMiNMTct4_2DngQoNGnVbymJ_G==V|h~Ql#QMUT5t?h*L=l-buz>lOatz@GGSb~r#&CZX=3(9e8UlpW$5(ldg{Ytt6FJoEtivqa| zM)hT$K64NY7_BT3GU1~>+`#l^7ZGE)^`e)BiI6HKd#08Q zu%08z8#_BYUtN!)#7$4O0qeXVd;obB<~utXu+tQO4uVUn27SHgUqR2=Xd=$=x#bn- z73kg!@SSMDJZk3uAxd3A{K3oc9=H< zj13D5>*VBg^Os7#=g@Yme9JIeo6|+DTw6kGzc(8@`_LPogHVbuHJEEATCZ8Q*YAOW zYkDWqzM=CSsg};pNjlnKkm|3&v*T=^uI}#c2fbB={;?4qS_~Sz79q!}Y%Y|r$Pc%I zA=NT@vcwqO6AeII#mmJN=7kC}`v!*RT#?7s$`BJDNZt*f}H!KeMk4 z%3xsQ6;;o5;uoYJ(F>~)m7qXFL!(N~&QT6?84#N)H%&9H15L>14knuJ$pX!QW!N*R zlr;LYXKz2Rv}vINEf6xQ1BA%3S*9^M)ZDg33oj@He=BGcy58;L-JQ>tFqzUImx^ z{r!htLth9a1xU$lcYX6?a#cOmX|e9Fp${}s7ws4Nhqb` ziRNh){zog%Om3I(;E!^4oDof!$K1?s(@@9~DqH7LOEWz>KQlr}D>GI)rRX!jqhZ(1pQ@3zRu`#7Hd zzCRpKk-d!S!OrPdQ&Zb=Kd|T32dlUGY7XaCIc5$iYz5RN>{=Nwj zI3WFX`%U}%Ge*~JIx9%;>-qZYE8r1v#qRq1`dJ7Hgiz2?w}T)d@6Ly2`^BysxHL<^ z=c^Zz@WcD|S%>NC$mbn5zOu-|S~!#QtGmDZBcl5wM*fS$*yHWN;)-28S>1P9#>M8O zqN}QO0*Zwf?wLlZ`P=>mF-{Upiyeso>2m)2y!1B1?0dStd;Oco4GbS2pK&bp^-zYc zJTckuursOpr+z@1U$S5_=l6+(0Eqwh>h~LqyGu#QcK7}JSh`M&2#kSUxL^yq^mk+3 z_U88iQ3E%KUvXnvP$fgxQr|Pi1q_H8(D@0^3ERPbAPNXBauKj_T{Fe>mud258b`wD z!}s|Yd#TcE!^goWs?Rn4Ap?jaCR>IZ-%-Y8XUDN*k8GgYmEVGy<(FnxuQX*_Xi0#6 z@cEAq<9&6DyGc?cPxkb~vLNj{=jSV3LP`90Ij}rMWP}jMR?qS6qve~Q9N>VYfSp~A zxb;MPHJf|U2zQmfvssj4>i+fP?T!1yS~L0m?QI1f8`x|rqg25s|3i%EtT0#%jghE$ zc;CtaIWkkh$#?xzUBA|8#gZ=0MLQzVz}VI8pj!bab>DmK*5`)u8ZO(KaB3dcUSjYnbhgX6YT}*xOs4Ltxt^ zX%kBUCjp>31oxKH@>-`|r(6Xn2)rO+LqH03H`(V8O!XUM71Ph093)xlJ*Ze8XfG02lF#Oxied|0P=5 z%?SYS%!%_w4m}cQB@MD?5&7SxaE=P$S>n49|1q!7G{tJXNS$b?E9!7TA}}HADJW6{ zu)aul`SCbOtWwPX0iK{cmC=S__B^OSlK7+Eg_w;ZnM2ywv6co7Prk56O?U%JssAXN z0`Pk{@^gNZ$@$G5lZa}ZVs40Efh@{X`6O?XJYWKlts#vHgU>;9f&*dxsT+IcPw z0M@+B6|yEGi2q-dh+eZj!wOIM4@nwKNB-|(QC!L$)4-6`?U5kPC0vl%tPug{T6w}# zJ@GsZ8vy_L59NVx#P_5^0J_tYh5bLI`EN{shW;<)18}VWaHXP44l2gK^ELku!~wWt zo)=OZQegM)ywH`~ZYhjU1fptrf~-6vF#%%lwoH+^`vy6xqdzi1JXZCU+q(`*dHYV4 zmD3Nv1OERZiDveMi3xF8se~^E8}wET&>*)I!6YqqRmIl?)y{1I`uYE0s}=Y|qsWTy z2&ZzV24B#mr9>6b6Pa_NR}|4G*RE}$mreW%CQ7k4@(K&UZjhq4I-5Fi5_ z$-0|PH3br|x*aF<3xEhUI(;uMFKh2ssHmt((tiMNE04N+vCy@MWEN@(@Bwg_ z)RhmK3U>GK5W@J^3xZus+a$SAZn@w7PhwAis1mDI!`j>1dyfJ&$=F|S1}bnGDl=*J zE>f_8S6p1YZZvAZ9@MuE>|6^;Tu@+Aq}F(pu<)rA?u+QfJV^Qz-@F`-Ji8Zl;qjj45+x&#lvU z*q%ep6EPfSSxso2h*B>&wl_f%xGymZd65gt0DbN8*pHeiuURy5AyGSI!susB*l_nl zi{aUJli1Mxdo-;#@?zW?@U>T%LjT8nLUr(8IFTug>wtiza{aY^Jv}|GJ!uCS(0h7% z8W0dLatPtViciTQj3CHWkNv4C%ER){#Br2>L5r`hu0RI4tx^=seSEsx+j)Gt`K97c zRPwx1B22VAb3FZ;$|zB|lqkUnF#Yj?-O2~X@Jv?mLJ`PO2TKCZDI>UMO7JUmn$||D zHFIcV-jb4d>x>g++1thlaz!|oKHQOOc(-CA>nPSkdwDyb1OVl-@aO8GJ<{Ri&VIuP$qit zK#Dq|n%wAV`AbrHyh$^(bybm2pfx;y7MvYn=*r7xL|)>6%3VdUfE*FpO zwmB#w%B&BhtD@rTDUp(;86GPfr>o{s<9Fp*IIYmKvDk|b8HxnEzy~De8*#n8y$>NK zBpjEm>;Ol5e015%OPVy5ka*REBsvu(c6dBn1h`%f3D8`tg4@mLW`)I$wObWtwP>Np zX+k#-f3AoWdBT6t4L#AdNi>gwuHqn)Lcc>}sI=GM!4WLJ{}s3p>jLTor&%O?z^Ki0 z+LTOoZYmhWo%UMc#QNm$cuqYHL$WxgqlKqHgZWkBxKH1!^pNn#uPN+_4#OE7gL)FO z*uU2av(NPkb0@j=B!93NdxV8RUJ#f$wc&2zz>M$$h8$(I+{az^Djw9&_f2PVdwTOV zJ+lo?9|vaq`rRqbfFC||@_y6XB+0Yk+HN(nvjb`ysxCUIy-pwONbPIwTv53XwHkh2 zF(}{PtlmW8hnmabFKuCP9c5AdD95A2#zwYiFDe*BShf2uqI@$mv({ZDUV@Y%isdc+ zBXTRhaMR-yV@s_F<|dL=2($4)5OE^l1j&hY03BtX+LI zFtgWr-lNuOa}GN+AX?ts^l}_eNSNQ;JTC3sDbe<1VdI-z{`uhOY;4TyD!}o!ltX0( z_-FtnyYb%3Mk%&_urU@AV`F?Tw6KE}3iP4lm|!b?;1Ke-+S*RJw0}=t%+19o)e^gS z8J`Sk+?EO#-X!^8=TAV|*?u@X`uJoY3TKw&&2Db$?&uZ{{89ft{*kU}*22nITVWBm zjCyx#aYLRcW82jY&7isn^&Y=3a$Py~T{(*WldI4d4JJeoviojYANYxEyN{6!CCpw$ z$_{%=G@q$O;8T_Q=77O=a$0){x?pis8^I#vMO#oMMM9S63L?X{fttFI@UATQgRPAf z)vlU5nzZJ$DF~zsrL)glrg(mESWKPE_sQfqSQhx=#bS3}ySoFOn}VA@*bpbt+oTI!n&Xi6lt6N zOCz5e&CsnzWY2t>(UFBmnBBm@c+hlTDt$xj}r`+1*Jy9{>d!or}`)W zXs@nnUK!MCsGtQoU8HqzwKjD@TvU~=HFoj;QVS9WhMG1vhTsMZPfPpj7mVc1MqmO{ zQAVu;73e~r0^l7^9@p&ZD%qu6s`z(r*2O-mY7}EECiel8|3iUEvp4)-?!5Pk;@ohg zTcOHP(dLjUcK9{$ErY`Bzg3dEKldC-7P;v4?gYz|7#5h8P{xP-8x03%*ynq)Qhw}m z8#J4vp|TdA!DP3wbQCC2O^vN>Z~J`3Oh0>8L-u6KbaW<~onh*Gj(RPwuX~*Gq!8^+ zOvt1L!b6Cdx%h)6XTEQa8MRr1&mI8~5D0SVHT>yZ^0}MX2oltmNRn`7jfxiK!L;Z5 z#KLs3ZMPS0c-m;rqv2a{eRNwL9LLM2)+RV6QhyP<^_hak z%N}Ki7t~5l|E3bcE+PyOi|%w%Ya;ol)Z{UW|~N_O(p59pDR@?JD7kQYXW%bB#Kw?D2y;zq>EVHnWD(XW`J%)wY+ zxDDF6mYDoW`1~4&=MI^f$oq12E9G9Inm=}aDqtYjAbbC$Y^wloDvgx?Ubi1)j&$jNq*U=ws`P0G9c zuWk&5F9R~(}0;+Y~Wiwe;gWL4$8F+82p^{losVZ6BL^uUlfJk^Y2h0CaYdco1IrjSE-EfwB}qs~NKa2!8`67ifFqWtND|Sz z>vQ0<6(5DcKY{vNm#Abyb8e=u64%Y?;&G+__wRWtZeR@G_Brz8c9@r@?C7ZIwBx)J zc@cM`)S#g31$-9+IJvRN-9y}mWqpDYI5^GUt!hr$@Eh)UTOJhqFK>b#dO2|9j`sF- zfU}@6rc&KqT+oKKD$-&ADm4)?5jtze%&j-;;JTwpPxvsuM=!u?L}{xgK_AEK{A^B= zkh};_;0E+LB90s=YhCh&r`zyyaVhG%YYfyG(O_!zbH7!s1nqJ1*8DgJgh+HbuSU*O z{3~ioq6`>!Xd$EXVc50RU4`zOZ&RxDh!C9n%D9h?jsR7y6_Q$wi`jgMbF1@I9_+nB z@JMEMc5&U`yYQYFFQWsQ6Zpx#yE|)ZX#^;*3QE~l97DmJPltJA?LkUe9cxhm3H6|( ze%dU}p*9BI-dks9I+@mXcFzwFJqF+lbkOhECol+;(-P7Vb$6?cndrx24}*xhR+BTh zwxY)&1TNIGMeIRL7y&xt4Q|nc_ATeDujFSSXDFfl;qIF8HA=r8jFm5~8Z|o?Q}==$ zqVZ2XwlAmIi8bOsYTfG5ZMipoP_*Fp8W2U3lkYr)oK7f+Z*%&6{v5wMnEZ*0sK>nD z-qbae1qvy|Coe18`;Pm41d(z)HYQaV->{*J4FSXPePK$Uvfm_k2fL9a#(2TW$vI+L zKWm;C0Xu2*$0W5J6>GAm<=|?w{pP;Y?NG||U?2ylD+35bjje@^Y9Xi_R@B9$O7Sw4 zfGP9b#QAUg3F;Ga)+M6WYM}*FS#A^fVwq~BOu8?@P`SpUfL6hJkgrR9|IN+US68`M zk03=G@gE%>Jv{mZfM{=!kIkYy&o$V;bYC!;8u;aiZP>Xz!g zf7sMHE|l_Ph$vi<;9(Em;;HqmW!T*(Ehg5hqNr17XPRDP9{pA@TDZ0TV|~E+Uio6& ztGTx@1%Cm$OyfBJCOF5yLdqU#~1k%#T_BGI2zy|O$q9~^@9U|Ty#OK0gB z_#Tq=gk(<=h_kk<>+{D4FFck7xPi`|h1k#9=4Mw94<5^24nY+_>a(ye$qbfsfN|#e zc3RB7O@DPknipsAdL=H{u$C)l;Cgj9JUQo>T0{6l^@@-`Vra6Pj-R&T)1CY=!eU>x zHx~RV4aHvbBUZ$sw%OI%gU7nFDosWDYAY;B+kP9F7?lhAOw*bB$S&JSx1ltKLtA2j z7Aa)iAmr&d;^1hRE7~GT^zd&b{IfPZg0(n0da`JS*QHaxAfBvzk0@k-oUW!OHV%#y zDN05Y=n~j24+n>tbHN<=!?U}%H?Je0(zGNDi&x*;%EiK>e5A1Xqg0CNUXdFo;xrw} zvt=|M$-vNXcW*GFRs)W5(ydik@$~a><6=heLc^)w!dWEfVpvl$%UzjJ#M=9BkzeWV z%iSGwB%Mrk%iWdmgMJpQgwdLl%dP7Ndh=EnUFXN71}`!`scr; znNoT3{e;nP0W9}pYD$CpF(N_=%{dUc-%E1VN)mS3cAw~}J|MN#CTDfU! zr^J^}UJMpvMdWK9mq8|``yndD^0hxTyVJtm)98%--GS|3J?*jQfc1CjC7g}zP<2Ic zL|Vv@j%vqCz<2jK`HDCG$$X#?xG}4O)~!Vx<`{n4bmA!ev#yXP0(E%dun;9FW-b;W zRi;#`nK86ov#7lqP5fDjR?EU^^y$jvF>XP}X9fjy|W z(u0;bL}AO?QHbX$IML*KeksrreCb1fn2#3W?uQQ+$*l|bC<+E`^;D$hPj0~tYKWUx zVxQMTu;h%DObr|l4Lm4uCKag%*NYUlCX|!pC*Bb>!{&qJDO@RMYGJLZ zKJEG$7yC7*j#nD5M}g0MI@YoT^dCR-lE?|f(V={PIiVhi$D@q1YA_C^@9;rc=63%f z+C7Oe7LOP96@q}d){$aXnieo(>dz<&^~OEe|0V;y<|1~n_>e)J+CtN+`H#o_!*Ib& zYB%W`&`|$eyb`Ff!RKZKTvw-Pd4gmy7%@hLcCnGnqMT;a;O8TO#ggMC4alB%AwMmv z3%(EueiIJ*s^>F9@5i38zGch7~ z5?~JA5n5WsPSI-&Sg|)7Qg<{_YW?`}3IzIuR@33ihU)J6?yN?t@-P~it4hhIwKg1< z-bwyyTFA~=OHUt6pQF$S3gzi+-S=BbC>ZUvec(#sg9lb>dA-8A)g&T#I?o3auUQtjddyERL|g z$ys=9nAhqT+)d8r`8I#Kb)(3c7$-YoaxiWy(=x37aIilB%X%TN$o}Rx(&-zs zFsrbMPHRdIV5-3VhkM09LHweyp<99$?V;Oz)ONk}rU+g&4rPpO8Owag*y8t-7>M$g z6d^ehpU^wmHb9a61XX~X`vAq_|LAO0`kgV07(Z__L%H#h|pq! zN8V+s+|0@)5$9rPkB)z#qH4Zn@j>#>&9^jMsIzjpy0B|M;a!mcC~sclL&M@zZ8ylik}%oDIDwfw$!pC-)PFu93$6NzLgSZ|CC*1J zxe|zPfnXi1b|DQ+f%MyKHHFW10`<`Doz>L2&k{4xn|<#jd;^Zvzo_jn@1 z%g#rI*gyjLpXpOEXBn-gC|vsvf$i{-|LPlwr5tY z8gh}{2$BSjRJT*Dxqw9*zoYjI?7oN-vxv55%t+DKu*%-X|F@!CjMp<1>M^UQoL=$$ z*hfJHeK&Qz8W?l2r{|a*XWCpe>m0qnt{VnXaE`M&KofRts{MyD!d9)p~2j|ESR-4&iuNW zDgb>TO6u$BQn|7ZKKc9vtyp;ya(yO~`#P&EbTdZSU2&yFUTkI0Oo*19KhQQxG38yg!_Q?U5{sM>`RBpxLX+h?$5;sUe4#?NCL-vTjLq{OwG+H5!egF zRCWv&uy{D)FOtG&E{VAOCjHS(+mCw)JLrZG>tJ|qp1_%pz7~2>datHG$nT@_`da0P zG(A8~czdu1{_DQtvKwq}f= z&z1G-jjq55F=^R;yk3B}$kR;tjAPD!`~ z?5X9=1l8?V;qqMJ8sBM6UkH42t~1+_tk>wglVh2_S4ZjZ2pE*axD1^@~Jnw{yI3?)Uf$1+2EoeSJlO%c(4ABo2Nz_ zPw^^FtTpJ=K2FU5mAZ=9=TFQOViwec48Iv(>YcXTwMHwGX`b{;fF$q_p${Lz9w#0` z|GRK*O-Cf|JTa20khi;c(ZY{1C2OWk8kbDtUePQ7Tm!392OE$CsVLVUlSz;!rA>L$E9Jf7*jvR^4dLx=YP5lg0=bOo@eH{6W_h}dC@ zKFXuDd+trp$YQzr;_+E#cWXZXzE@d-9r^CMyuhckp`l;9LJf@@TWaLTX=4tp$WN6X zC${e!KdrNzx}Z9GsyL|($r69PcuzSy&!Bkb=%918Y510Vp-V9vRqCcg&s;y-Q7z=R zxDEj5yi1V-dIw4N!+Z7R%Pux#3MdO5LZ=E&x_c@V*2z3AiRY`YuALg>!s7ld7M4Uy zNuiNRu-gF>D$0*33{r*aJGBzy<>l3Ex6Pm1Ba#_B$ms4u2U3gjxQJk4H9&Me##mD<-mbcGAGuF97YwSj(ebWv;2@}dssaJ)aM{*pkFX% zvE@XDiqM6#uvy)*|0YTAfjQtX%DfqEo@gTZ>bVLUDoXtR{(if>AH5IBIhpA72)RK< zu`L6y>6}%e@z z-^EMSRzWSFeVQ^OFr@$4e)+O(R-Re z`LJWB4|l~H?9NXO^4Ll@9u(c{;@7w`mZrr=9-3kd?yU`fPC|5rc%$lR`x)rL_rprM zGG&r%Y24f%xT@EFfM*dgI3Vk=h}Xt-H>?nl*6H6ZSIb;@Wv!-Y*8p-tr#Pwd(Xb~n z)(-BI++c|)E z6wwD@P=Kft6;di!73P(>58@H8)f3O_!EyCt;HXG0uT&-c5n=q;5uhCLbKLTNXV(D; zTCf;^6%ZBGex%8OB}6l~J3;D+?3YT`Tpa%z?DD@`w%v_Y#?)^zHJwSV)OC}CZ{tj$ zqhRvF9i4F7SX8yv$exPkSrR96wH$0A;QWi)i}Fhu41u0sV?<^%I7Ow4MX7yMzjRhu zQSQSy51@78r$!hxzT4RmCP0z%9dYOL9*AZ;cRYf0P!N)tW<&IKvEN~` z>H~D^9izi%qx!=RzU6lj)%uRAxEU<1st614so z7AjwL7ZLBk%cuZR3qWv82sm(YS*EU0B3N~atwDG8KR$In9`g?cRYr>DEtbkWFV`A_ zw(0F{brK6&_iwEno<=ynOD23LAmFHYX{r74i^S=skDfiOgXBchi)J}-e(~9%om?XX zoP->P2apU~vC^5y%D4u{);kejoJ)FS{AIC}nvd2Ky;w3J*RU^J%qXkGq}7BrrP2BU6nQAvVWtmx-VjTc1&Hj3Udc%YdVBLET?+fTJZ&S&#B69NLIh@Tl7K zet!a}#b<6F9$3G3e$~bi#?W?an^wr_%IkKzqf;u(Hwfq6?DPfzYIMqE@N*bowxlRr zxhn|Jb9Ki^?@l!l#Xb^tw4L12D4GdKq2vL)jDmC_Zy2y-d1US>9Rk>4YC~QA)&q}^ zT?`FL1AU6Cq{tc2PwHLT0NvyX3So9A5hbMbFwJVgoOqzfJ{1+~onSWngt9bSLrK#b zbc+M@-$KJ3MWl*R<5ZFdK;;4;RRGsTRTeI+Ls!yV^>h7lkKhx)iK=U3PZ^JsMa2Is z{{s(vIcoi+PDP!8U>XzqJm=664Ut&yUjuWy%jJUzE$>+rND|f31|ww&K;#%;o&&1# zNxOvbkRX1dd!$Wh(9%Cwo_BgY&#w)ji#Xa|caI*br+P^F^qGV0Q7^ z<%VF$R{1#8i%=Rw=w^_6FoMmA&Bsg~99W1bxDeCovJaM)3Z*+6sSu0tSNR~Qn_1f7 z*$y$fD){T-X1|t#weNim7-=_UK)7E_$5!%;yp{`2^D)5TW6Wttcf zy7DyflH=TW4f#DUTm~;eb0ykIi<7i#c7IJjyMt9@oXm(gE4qwR>y8?!{T(Q)fcJ!! zv}n5s;XC2-Q6DT9XIeRs#q5~J#0joqocF?u^zum&J?ATnt+g5LuE9lsGd?*iALdZi zdQr*!T;+fJMb;=pV)kd}*K%(S1Vjt@KvUJPCmRXYSWM@Gx~{~flLNS&BlA%sea>vv zD*Kw|=4b8gw9H3MBCx3PPczXIRFE4-Vz_fxb z*@eu25uP&$85|s1{dfdv6>+F$ZkyaZyW?>H<8%L9?$&jneA#B{MbL<(-Sw`jT3zxO z-z`}S*cr(Wmjj5INl^d=1qQv2myd2w1cPp3BEvEezdG!t+yw=IJ`d{TCWx`4wpp%x z+L@-|ma{lLMSTn|rjAy?{lWaSlgwa4eJaTABfWO9d##8ja|HKNK{-1gl@(+c5n5GM z$GyF6-%(?l%vtA;>iAks+wj|x0QJsV?*bxM_H?m;j5Gubb4`8(m7%%#bKNei$!vAq zDlP7$2=ydJ!lJ@OuL|@KT#}g-pp?9VNm`eW-e#D@1fmFQgt6`utBbzB4}*Q1G@KPS zoDwIYNynt8zSn4&pIeF6#BdJSg_`e+NcK*(j(S*D77!qD$>ho~3~u~8NdD^z^=c$p z6RM%Kl&T#1SCv7&U6j&g1TmK1O$ZfyeO4u1-$h{KDqfAGP0Ko8m<%0BcM~$O^xVx& z4GAPB3^+5mbPN!-_F!e;#>&Xt5W46Y3z;j!ICIG#V1&Z0Ej^^+-&$&lfc+DOf<2lT zg8O|D)}1}JLxRyxsiJwvZiW$}4Y_Dd$8ac0ili4RLGKR$D9&enOR9m}#S1Rlj>LGg zaT60foh{Ja)MWZmr$OtF(&>Dvv}=eR1A?7EN(&!g0L~q_fq{uR>hJxOX_U#~M6oSA54 zpc+1Gzhcg@ZhFN7*`{-^lTFK{vZy7;LP_D^jD}N>UY=rYY`r7HRCy=h!r16F)jzp{oZT1MgH85nKl0 zI;O^MQJ?tetfo~CQ$^6s`BgbpEO%PR${k)mO{`a41|BYW)r6B+Qz5x;F`ys3H;Yoy` z@#8X+#{`PJ3eWxxP%IsHWK5q#&!!e11Z;^rs4@U3P%a__Ss5NiItwXhj5$d4iMsNJ zZe`x>Xu4zF5LC6O4!A_clZNUT0VLqhPM zZqmg14W=Y3pw!*lLz=2G9E}Tu^0bb%Xtuz?UY8gVcjt7Tb{oQm!u|Y1W@@UcbF6#^ z&Spf;>|hx(9pxqas;NaBP91YTa)wbIHRlqnAnzcLeXu2%dJR6L6*{;t!YFi%s;9dc zqEA>=1*RWms{6?)g_&^$xwmN206Yr7Pr8C_VlUELg4s}am@Cbucru;-;Lp`;kGm+@ zSq0jY9`w|I7G;#x_MS|fFm1>6cfo2@MJ(kJu6n#Bkak6M3yPK>u!xL1k(fB^5mqjQ zNsfPCB%Hx#M(@uH0l3#cY&Pq;V?69`q3=xW!*!_yFOQvHR-bx}mI3p)3`1wMSt;Ha zdd%S6{W0Wks$M$u!CmZSaXw~tf4~>I6A?FZwiRp}a6A2u2;H*i%(%)uBL%rE15l-U z*D^e|5q}argjr8ZZp8*T+pb99(7d}a5@>Jj(P_VWYLbH5cJgh*s*ceV5_QVpg0&ksp($iL^aUt_e5tL*|>%L2b$3@>X54B zjR#@W61!=yqHt&kQ&b*{tPK_$O3;d6R$Ansp|K3<&BF8>@^!?Ca4@V_;H%_G?KGb7 zapVu}=nM*fP=}m?)euCBD6bp0{MTl*>8ZILV1Jk>mY=u-@y^wiv_>J+?-}vo-xod6 zi(L}3<&(Z(I#e>cX#umOA9NktIZmB}#i=+th3v42;MYNPks<5HSA*0cMS2Oc#6RpW z#x1u`!PXp+vbaaPtOR>DIvCDRB({*^3Cv@_CI8uy@bz`D2ZT_*FN`7AUmn>&uYAP~ zh_XsW%4jVw@XHYGFwsT^p4-{~kE(NwuIrDwb#r3db{gABW2dog+qTh|jcu!O(xkC% zHn!P!|KB_A825fYW1NlO##(dD`E2#`7>JFn!MXWQ2f{?Rj)+tPoDMa(_9tu$9~s6H~Ua9W5!JyW3<%QxcvcsV)KU6S__>Y1lpVeMJDSIcu*a_|7d!<+!U38 zlV?}G1Tope0(Ai=YO?-`2kz1V+a}FFL4#i>!rIXB>juJG?~>$&Mw!;cz7*21$(cTI z(rJ2;a-@He?N{G_?I56Gz_v?7_Tc5bpP0TsxUcq66T}VJn7VVOkDkBVBONjq+OZHK z!sqfN(|Ps)aZ#|hhR!!MBdSMk0t(_$=dU|#mpUSC>eA;GQ|w&x!K>7}NOKhN9i$0? z@+dJwfd3&VaJ{Lp=!Uy1`Um{U5BCLKaLfrBYdtFi#;Aot9WOL1*&#-{up0hWK>Z#d zYH=J$GV^+1Qup|GVZYvZCH>8xlV4EKYhRXjzc1YGa3qPID$UDITVyTcRgTq5Iw!lIDcw;SY6F7|Tie=98gSGb5RFGsc?h(A9xvxE z+jUFAPlLT3=h>b@#okvIOC(5(lol<#XK z9xAh?fvJH;!gM(G_Nv~?9j1KM32RAXeWF;$9QnCq;*;|J>o@!srn9+;DD5gMlkc~U zHZgHop59n|8^8Kxyq)7^CA|N}<0Au|!u&@2zAe>;(`B9-(z8P`4W7XH@71Kkpt6be8ngH9&0DtS@ znq7RR7b|foUtHV*oaf!|MXvAe?vDHFEHPv{9NM3``TdegJq+42BmOY$Fl?%uit`uS?e?!B`sjPmlv7W9_Z??ue%MhRu8Mdb^vN*-;`f5P3$A0u^ zmBy_}MnK?jWsvCrLH}RA9nD<_6LiX)KK|8SeO|q%QcahMv+yv#G1yCX%UC8IoCWRl z+(#{~MDUnS&xv_mQg$hKnnUy4M!bqZFY26KXo}^K$Dvdk`P@e3d-k3hjL#o8@8GI3 zX$)p7z4TCO?u0-){6Bnm{f3Gns!-*FFE20s#7M?!B&S0?Gdu(M$Ha8Ya_(@NeU@5L z3r%Ho_J0I~ah^=B`ITfq+AlyaZxXZi)ldN)E;K~8<~#6GevAk-Y0xA~?3)_L7Lph7 zGjGzWh7%)PeIlVU7&}eF;ohqZxEBZ0xrxhPa4Dv1(;d3V*#Ue2(2%w!H(11!E3ph+ zPEA*E8LcdVTf_N5n`%<{d^n<@$56ls&Uw|rE>DLQQ=mwL0`sh#XAjHmzV>ftZdGDa zq@e)iM}+pi1fw1=D_?SM;sx;#+b;IoDZ5$2X&Y+=wVJIHrUl3T9M!f!XvctRty!GM zQNi5Lbo=?EGyS(lJ2~Q`)QQ<9J1mab2*s3HjUv0AaZtixg-RKt-_cy#=V}`eKy8pg zm5(4#rwjM1keIy){UucKYaN3*lrDssXFJ;JT_n~0)#U5O7Uaam#fnDJy3FHpkBCJ; z2d4y$mdE(qTGjTQFqp!p>s)%_!QD$mMTJNK3Q`1My3Mv^VZqSxshxcqHJwY>zUV#j z&a?ibn0V=~Zb_Y!HHxvW2#jze0e=u+lp=ciL+sok(x+DQoLf|IpgZWsxmnjLuKo7+A7B-&EDK)rTXMOz+ZDLWm-Bu1}WtrdV{JEPW zAH2aHRnb%GQZ8$$6TW3+I92ql(NK?1)t$f~dXGU>PbZ4EC!@MFR7_f~cl8x!aN!)! zPLE*qyfxSvmXb|cca@{a?^H%o`-XFaKj`hfr4`o5joF~iGSGN`O6c#3s!Qv2eSMb) zhlk~7nhWAK#MsG+)H-5XL&Bh`FRyTF$ck->gRbsc<=_t!@op8NF!9hkBk@G5Q`QA@WxX zg90FE^rqgCUv`%r8H{XA9ZT-C-;x<8nTM&Qi�?D7)wF`@hnW?EprC;?YWwHFxr; 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 W_-jHR4lAL6-v=or$qI3!p#KLG3GZ+K literal 0 HcmV?d00001 diff --git a/src/common/api.c b/src/common/api.c index a288ae9..5b52ea6 100644 --- a/src/common/api.c +++ b/src/common/api.c @@ -168,11 +168,23 @@ SDL_Surface* GFX_init(int mode) { gfx.vinfo.yres_virtual = VIRTUAL_HEIGHT; gfx.vinfo.xoffset = 0; gfx.vinfo.yoffset = 0; - ioctl(gfx.fb0_fd, FBIOPUT_VSCREENINFO, &gfx.vinfo); + if (ioctl(gfx.fb0_fd, FBIOPUT_VSCREENINFO, &gfx.vinfo)) LOG_info("FBIOPUT_VSCREENINFO failed %s\n", strerror(errno)); + + // printf("bits_per_pixel: %i\n", gfx.vinfo.bits_per_pixel); + // printf("xres: %i\n", gfx.vinfo.xres); + // printf("yres: %i\n", gfx.vinfo.yres); + // printf("xres_virtual: %i\n", gfx.vinfo.xres_virtual); + // printf("yres_virtual: %i\n", gfx.vinfo.yres_virtual); + // printf("xoffset: %i\n", gfx.vinfo.xoffset); + // printf("yoffset: %i\n", gfx.vinfo.yoffset); + // printf("activate: %i\n", gfx.vinfo.activate); + // printf("vmode: %i\n", gfx.vinfo.vmode); + // printf("sync: %i\n", gfx.vinfo.sync); + // fflush(stdout); struct owlfb_sync_info sinfo; sinfo.enabled = 1; - ioctl(gfx.fb0_fd, OWLFB_VSYNC_EVENT_EN, &sinfo); + if (ioctl(gfx.fb0_fd, OWLFB_VSYNC_EVENT_EN, &sinfo)) LOG_info("OWLFB_VSYNC_EVENT_EN failed %s\n", strerror(errno)); gfx.page = 1; // start on the backbuffer gfx.fb0_buffer = mmap(0, VIRTUAL_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, gfx.fb0_fd, 0); @@ -229,6 +241,17 @@ void GFX_quit(void) { GFX_clearAll(); munmap(gfx.fb0_buffer, VIRTUAL_SIZE); + + // restore for other binaries + gfx.vinfo.bits_per_pixel = FIXED_DEPTH; + gfx.vinfo.xres = FIXED_WIDTH; + gfx.vinfo.yres = FIXED_HEIGHT; + gfx.vinfo.xres_virtual = FIXED_WIDTH; + gfx.vinfo.yres_virtual = FIXED_HEIGHT; + gfx.vinfo.xoffset = 0; + gfx.vinfo.yoffset = 0; + if (ioctl(gfx.fb0_fd, FBIOPUT_VSCREENINFO, &gfx.vinfo)) LOG_info("FBIOPUT_VSCREENINFO failed %s\n", strerror(errno)); + close(gfx.fb0_fd); SDL_Quit(); } @@ -279,13 +302,13 @@ SDL_Surface* GFX_resize(int w, int h, int pitch) { void GFX_flip(SDL_Surface* screen) { // point framebuffer at the first line of the backbuffer gfx.vinfo.yoffset = gfx.page * PAGE_HEIGHT; - ioctl(gfx.fb0_fd, gfx.resized ? FBIOPUT_VSCREENINFO : FBIOPAN_DISPLAY, &gfx.vinfo); + if (ioctl(gfx.fb0_fd, gfx.resized ? FBIOPUT_VSCREENINFO : FBIOPAN_DISPLAY, &gfx.vinfo)) LOG_info("FBIOPUT_VSCREENINFO failed %s\n", strerror(errno)); gfx.resized = 0; if (gfx.vsync!=VSYNC_OFF) { // this limiting condition helps SuperFX chip games if (gfx.vsync==VSYNC_STRICT || frame_start==0 || SDL_GetTicks()-frame_startcallback; - // } else { - // puts("missing audo_buffer_status callback"); - // core.audio_buffer_status = NULL; - // } - // fflush(stdout); - break; - } - // TODO: not used by gambatte - case RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY: { /* 63 */ - // TODO: unused? - // puts("RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY"); - // - // const unsigned *latency_ms = (const unsigned *)data; - // if (latency_ms) { - // unsigned frames = *latency_ms * core.fps / 1000; - // if (frames < 30) - // audio_buffer_size_override = frames; - // printf("audio_buffer_size_override = %i (unused?)\n", frames); - // else - // PA_WARN("Audio buffer change out of range (%d), ignored\n", frames); - // } - break; - } - + // TODO: used by mgba, (but only during frameskip?) + // case RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK: { /* 62 */ + // LOG_info("RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK\n"); + // const struct retro_audio_buffer_status_callback *cb = (const struct retro_audio_buffer_status_callback *)data; + // if (cb) { + // LOG_info("has audo_buffer_status callback\n"); + // core.audio_buffer_status = cb->callback; + // } else { + // LOG_info("no audo_buffer_status callback\n"); + // core.audio_buffer_status = NULL; + // } + // break; + // } + // TODO: used by mgba, (but only during frameskip?) + // case RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY: { /* 63 */ + // LOG_info("RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY\n"); + // + // const unsigned *latency_ms = (const unsigned *)data; + // if (latency_ms) { + // unsigned frames = *latency_ms * core.fps / 1000; + // if (frames < 30) + // // audio_buffer_size_override = frames; + // LOG_info("audio_buffer_size_override = %i (unused?)\n", frames); + // else + // LOG_info("Audio buffer change out of range (%d), ignored\n", frames); + // } + // break; + // } + // TODO: RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 case RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE: { /* 65 */ // const struct retro_system_content_info_override* info = (const struct retro_system_content_info_override* )data; @@ -3917,6 +3914,7 @@ int main(int argc , char* argv[]) { while (!quit) { GFX_startFrame(); + // if (core.audio_buffer_status) core.audio_buffer_status(true, 100, false); core.run(); limitFF(); diff --git a/src/minui/makefile b/src/minui/makefile index 3f48c14..b246416 100644 --- a/src/minui/makefile +++ b/src/minui/makefile @@ -8,6 +8,8 @@ CC = $(CROSS_COMPILE)gcc CFLAGS = -marm -mtune=cortex-a9 -mfpu=neon-fp16 -mfloat-abi=hard -march=armv7-a -fomit-frame-pointer CFLAGS += -I. -I../common -DPLATFORM=\"$(UNION_PLATFORM)\" LDFLAGS = -ldl -lSDL -lSDL_image -lSDL_ttf -lmsettings -lpthread +# CFLAGS += -fsanitize=address -fno-common +# LDFLAGS += -lasan all: $(CC) main.c ../common/utils.c ../common/api.c -o $(TARGET) $(CFLAGS) $(LDFLAGS)